From 7e0e160196799f64d366c871324745da57b5f170 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Fri, 1 Jul 2022 15:23:38 +0200 Subject: [PATCH 001/129] Update version on dev-branch after release --- ResInsightVersion.cmake | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ResInsightVersion.cmake b/ResInsightVersion.cmake index 6cc10100df..e2b2443fc3 100644 --- a/ResInsightVersion.cmake +++ b/ResInsightVersion.cmake @@ -1,17 +1,17 @@ set(RESINSIGHT_MAJOR_VERSION 2022) set(RESINSIGHT_MINOR_VERSION 06) -set(RESINSIGHT_PATCH_VERSION 0) +set(RESINSIGHT_PATCH_VERSION 1) # Opional text with no restrictions -#"set(RESINSIGHT_VERSION_TEXT "-dev") +set(RESINSIGHT_VERSION_TEXT "-dev") #set(RESINSIGHT_VERSION_TEXT "-RC_03") # Optional text # Must be unique and increasing within one combination of major/minor/patch version # The uniqueness of this text is independent of RESINSIGHT_VERSION_TEXT # Format of text must be ".xx" -# set(RESINSIGHT_DEV_VERSION ".01") +set(RESINSIGHT_DEV_VERSION ".01") # https://github.com/CRAVA/crava/tree/master/libs/nrlib set(NRLIB_GITHUB_SHA "ba35d4359882f1c6f5e9dc30eb95fe52af50fd6f") From 3a55db15e5e53d07234d84cf044b277075d3da12 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Fri, 1 Jul 2022 15:35:56 +0200 Subject: [PATCH 002/129] Added field and object keywords --- .../2022.06/ri-fieldKeywords.txt | 4636 +++++++++++++++++ .../2022.06/ri-objectKeywords.txt | 434 ++ 2 files changed, 5070 insertions(+) create mode 100644 ApplicationLibCode/Adm/projectfilekeywords/2022.06/ri-fieldKeywords.txt create mode 100644 ApplicationLibCode/Adm/projectfilekeywords/2022.06/ri-objectKeywords.txt diff --git a/ApplicationLibCode/Adm/projectfilekeywords/2022.06/ri-fieldKeywords.txt b/ApplicationLibCode/Adm/projectfilekeywords/2022.06/ri-fieldKeywords.txt new file mode 100644 index 0000000000..c4cc485a97 --- /dev/null +++ b/ApplicationLibCode/Adm/projectfilekeywords/2022.06/ri-fieldKeywords.txt @@ -0,0 +1,4636 @@ +// ResInsight version string : 2022.06.1-dev.01 +// Report generated : fre. jul 1 15:27:03 2022 +// +// + +AnalysisPlot - class RimAnalysisPlot + WindowController + ShowWindow + WindowGeometry + Id + (A)ViewId + ShowPlotTitle + ShowTrackLegends + TrackLegendsHorizontal + TitleFontSize + LegendDeltaFontSize + RowSpan + ColSpan + AnalysisPlotData + TimeStepFilter + TimeSteps + ReferenceCase + IsUsingAutoName + PlotDescription + BarOrientation + MajorGroupType + MediumGroupType + MinorGroupType + ValueSortOperation + groupForColors + UseTopBarsFilter + MaxBarCount + UseBarText + UseCaseInBarText + UseEnsembleInBarText + UseSummaryItemInBarText + UseTimeStepInBarText + UseQuantityInBarText + BarTextFontSize + ValueAxisProperties + PlotDataFilterCollection + +AnalysisPlotCollection - class RimAnalysisPlotCollection + AnalysisPlots + +AnalysisPlotDataEntry - class RimAnalysisPlotDataEntry + SummaryCase + Ensemble + SummaryAddress + IsEnsembleCurve + +Annotations - class RimAnnotationInViewCollection + IsActive + TextAnnotations + AnnotationPlaneDepth + SnapAnnotations + TextAnnotationsInView + ReachCircleAnnotationsInView + UserDefinedPolylinesAnnotationsInView + PolylinesFromFileAnnotationsInView + AnnotationFontSize + +AsciiDataCurve - class RimAsciiDataCurve + Show + CurveName + CurveDescription + LegendDescription + AutoName + ShowLegend + ShowErrorBars + Color + FillColor + Thickness + CurveInterpolation + LineStyle + FillStyle + PointSymbol + SymbolEdgeColor + SymbolSkipPxDist + SymbolLabel + SymbolSize + SymbolLabelPosition + PlotCurveAppearance + PlotAxis + TimeSteps + Values + Title + +CalcScript - class RimCalcScript + AbsolutePath + +CalculatedSummaryCase - class RimCalculatedSummaryCase + ShortName + NameSetting + ShowSubNodesInTree + AutoShortyName + SummaryHeaderFilename + Id + (A)CaseId + +CellEdgeResultSlot - class RimCellEdgeColors + EnableCellEdgeColors + propertyType + CellEdgeVariable + UseXVariable + UseYVariable + UseZVariable + LegendDefinition + SingleVarEdgeResult + +CellFilterCollection - class RimCellFilterCollection + Active + CellFilters + RangeFilters + +CellPropertyFilter - class RimEclipsePropertyFilter + UserDescription + Active + FilterType + GridIndex + PropagateToSubGrids + SelectedValues + ResultDefinition + LowerBound + UpperBound + CategorySelection + +CellPropertyFilters - class RimEclipsePropertyFilterCollection + Active + PropertyFilters + +CellRangeFilter - class RimCellRangeFilter + UserDescription + Active + FilterType + GridIndex + PropagateToSubGrids + StartIndexI + CellCountI + StartIndexJ + CellCountJ + StartIndexK + CellCountK + +CellRangeFilterCollection - class RimCellFilterCollection + Active + CellFilters + RangeFilters + +ChangeDataSourceFeatureUi - class RimWellLogCurveCommonDataSource + CurveCase + SummaryCase + TrajectoryType + CurveWellPath + SimulationWellName + BranchDetection + Branch + CurveTimeStep + WBSSmoothing + WBSSmoothingThreshold + RftTimeStep + RftWellName + SegmentBranchId + +CmdSelectionChangeExecData - class caf::CmdSelectionChangeExecData + selectionLevel + previousSelection + newSelection + +ColorLegend - class RimColorLegend + ColorLegendName + ColorLegendItems + +ColorLegendCollection - class RimColorLegendCollection + CustomColorLegends + +ColorLegendItem - class RimColorLegendItem + Color + CategoryValue + CategoryName + +CompletionTemplateCollection - class RimCompletionTemplateCollection + FractureTemplates + StimPlanModelTemplates + ValveTemplates + FractureGroupStatisticsCollection + +CorrelationMatrixPlot - class RimCorrelationMatrixPlot + WindowController + ShowWindow + WindowGeometry + Id + (A)ViewId + ShowPlotTitle + ShowTrackLegends + TrackLegendsHorizontal + TitleFontSize + LegendDeltaFontSize + RowSpan + ColSpan + AnalysisPlotData + TimeStepFilter + TimeStep + AutoTitle + PlotTitle + LabelFontSize + AxisTitleFontSize + AxisValueFontSize + UseCaseFilter + CurveSetForFiltering + EditCaseFilter + CorrelationAbsValues + CorrelationSorting + CorrelationAbsSorting + ExcludeParamsWithoutVariation + ShowOnlyTopNCorrelations + TopNFilterCount + LegendConfig + SelectedParameters + +CorrelationPlot - class RimCorrelationPlot + WindowController + ShowWindow + WindowGeometry + Id + (A)ViewId + ShowPlotTitle + ShowTrackLegends + TrackLegendsHorizontal + TitleFontSize + LegendDeltaFontSize + RowSpan + ColSpan + AnalysisPlotData + TimeStepFilter + TimeStep + AutoTitle + PlotTitle + LabelFontSize + AxisTitleFontSize + AxisValueFontSize + UseCaseFilter + CurveSetForFiltering + EditCaseFilter + CorrelationAbsValues + CorrelationAbsSorting + ExcludeParamsWithoutVariation + ShowOnlyTopNCorrelations + TopNFilterCount + SelectedParameters + +CorrelationPlotCollection - class RimCorrelationPlotCollection + CorrelationPlots + CorrelationReports + +CorrelationReportPlot - class RimCorrelationReportPlot + WindowController + ShowWindow + WindowGeometry + Id + (A)ViewId + ShowPlotTitle + ShowTrackLegends + TrackLegendsHorizontal + TitleFontSize + LegendDeltaFontSize + PlotWindowTitle + MatrixPlot + CorrelationPlot + CrossPlot + SubTitleFontSize + LabelFontSize + AxisTitleFontSize + AxisValueFontSize + +CrossSection - class RimExtrudedCurveIntersection + Active + ShowInactiveCells + UseSeparateIntersectionDataSource + SeparateIntersectionDataSource + UserDescription + Type + Direction + WellPath + SimulationWell + Points + PointsUi + AzimuthAngle + DipAngle + CustomExtrusionPoints + TwoAzimuthPoints + Branch + ExtentLength + lengthUp + lengthDown + SurfaceIntersections + UpperThreshold + LowerThreshold + DepthFilter + CollectionUpperThreshold + CollectionLowerThreshold + ThresholdOverridden + CollectionDepthFilterType + +CrossSectionCollection - class RimIntersectionCollection + CrossSections + IntersectionBoxes + Active + UpperDepthThreshold + LowerDepthThreshold + DepthFilterOverride + CollectionDepthFilterType + +CurveIntersection - class RimExtrudedCurveIntersection + Active + ShowInactiveCells + UseSeparateIntersectionDataSource + SeparateIntersectionDataSource + UserDescription + Type + Direction + WellPath + SimulationWell + Points + PointsUi + AzimuthAngle + DipAngle + CustomExtrusionPoints + TwoAzimuthPoints + Branch + ExtentLength + lengthUp + lengthDown + SurfaceIntersections + UpperThreshold + LowerThreshold + DepthFilter + CollectionUpperThreshold + CollectionLowerThreshold + ThresholdOverridden + CollectionDepthFilterType + +DataContainerFloat - class RimcDataContainerDouble + values + +DataContainerString - class RimcDataContainerString + values + +DataContainerTime - class RimcDataContainerTime + values + +DepthTrackPlot - class RimDepthTrackPlot + WindowController + ShowWindow + WindowGeometry + Id + (A)ViewId + ShowPlotTitle + ShowTrackLegends + TrackLegendsHorizontal + TitleFontSize + LegendDeltaFontSize + PlotDescription + DepthType + DepthUnit + MinimumDepth + MaximumDepth + ShowDepthGridLines + AutoScaleDepthEnabled + SubTitleFontSize + AxisTitleFontSize + AxisValueFontSize + NameConfig + FilterEnsembleCurveSet + DepthEqualization + Tracks + DepthOrientation + +DoubleParameter - class RimDoubleParameter + Name + Label + Description + Advanced + Valid + Value + +Eclipse2dViewCollection - class RimEclipseContourMapViewCollection + EclipseViews + +EclipseCase - class RimEclipseResultCase + Name + (A)CaseUserDescription + NameSetting + Id + (A)CaseId + FilePath + (A)CaseFileName + (A)GridFileName + DefaultFormationNames + TimeStepFilter + IntersectionViewCollection + ReservoirViews + MatrixModelResults + FractureModelResults + FlipXAxis + FlipYAxis + ContourMaps + InputPropertyCollection + UnitSystem + FlowDiagSolutions + SourSimFileName + +EclipseGeometrySelectionItem - class RimEclipseGeometrySelectionItem + EclipseCase + GridIndex + CellIndex + LocalIntersectionPoint + +EclipseResultAddress - class RimEclipseResultAddress + ResultName + ResultType + EclipseCase + +ElasticProperties - class RimElasticProperties + FilePath + ShowScaledProperties + PropertyScalingCollection + +ElasticPropertyScaling - class RimElasticPropertyScaling + Name + IsChecked + Formation + Facies + Property + Scale + +ElasticPropertyScalingCollection - class RimElasticPropertyScalingCollection + ElasticPropertyScalings + +EnsembleFractureStatistics - class RimEnsembleFractureStatistics + Name + FilePaths + ExcludeZeroWidthFractures + MeshAlignmentType + MeshType + NumberOfSamplesX + NumberOfSamplesY + AdaptiveMeanType + AdaptiveNumLayersType + AdaptiveNumLayers + SelectedStatisticsType + ComputeStatistics + +EnsembleFractureStatisticsPlot - class RimEnsembleFractureStatisticsPlot + WindowController + ShowWindow + WindowGeometry + Id + (A)ViewId + ShowPlotTitle + ShowTrackLegends + TrackLegendsHorizontal + TitleFontSize + LegendDeltaFontSize + PlotDescription + NumHistogramBins + HistogramBarColor + HistogramGapWidth + HistogramFrequencyType + Precision + TickNumberFormat + GraphType + EnsembleFractureStatistics + Property + +EnsembleFractureStatisticsPlotCollection - class RimEnsembleFractureStatisticsPlotCollection + EnsembleFractureStatisticsPlots + +EnsembleStatisticsSurface - class RimEnsembleStatisticsSurface + SurfaceUserDecription + SurfaceColor + DepthOffset + StatisticsType + +EnsembleSurface - class RimEnsembleSurface + SurfaceUserDecription + SubCollections + SurfacesField + FilterEnsembleCurveSet + +EnsembleWellLogStatisticsCurve - class RimEnsembleWellLogStatisticsCurve + Show + CurveName + CurveDescription + LegendDescription + AutoName + ShowLegend + ShowErrorBars + Color + FillColor + Thickness + CurveInterpolation + LineStyle + FillStyle + PointSymbol + SymbolEdgeColor + SymbolSkipPxDist + SymbolLabel + SymbolSize + SymbolLabelPosition + PlotCurveAppearance + StackCurve + StackPhaseColors + TrajectoryType + CurveWellPath + SimulationWellName + BranchDetection + Branch + CurveCase + CurveEclipseResult + CurveGeomechResult + CurveTimeStep + AddCaseNameToCurveName + AddPropertyToCurveName + AddWellNameToCurveName + AddTimestepToCurveName + AddDateToCurveName + EnsembleWellLogCurveSet + StatisticsType + +EnsembleWellLogs - class RimEnsembleWellLogs + Name + WellLogFiles + +EnsembleWellLogsCollection - class RimEnsembleWellLogsCollection + EnsembleWellLogsCollection + +FaciesInitialPressureConfig - class RimFaciesInitialPressureConfig + IsChecked + FaciesName + FaciesValue + Fraction + +FaciesProperties - class RimFaciesProperties + FilePath + FaciesDefinition + ColorLegend + +Fault - class RimFaultInView + FaultName + ShowFault + Color + +Faults - class RimFaultInViewCollection + Active + ShowFaultFaces + ShowOppositeFaultFaces + ShowFaultsOutsideFilters + OnlyShowWithDefNeighbor + FaultFaceCulling + ShowFaultLabel + FaultLabelColor + ShowNNCs + HideNncsWhenNoResultIsAvailable + Faults + EnableFaultRA + FaultRASettings + +FileSummaryCase - class RimFileSummaryCase + ShortName + NameSetting + ShowSubNodesInTree + AutoShortyName + SummaryHeaderFilename + Id + (A)CaseId + IncludeRestartFiles + AdditionalSummaryFilePath + +FileSurface - class RimFileSurface + SurfaceUserDecription + SurfaceColor + DepthOffset + SurfaceFilePath + +FishbonesCollection - class RimFishbonesCollection + Name + IsChecked + FishbonesSubs + StartMD + MainBoreDiameter + MainBoreSkinFactor + +FishbonesMultipleSubs - class RimFishbones + Active + Name + Color + LateralCountPerSub + LateralLength + LateralExitAngle + LateralBuildAngle + LateralTubingDiameter + LateralOpenHoleRoghnessFactor + LateralTubingRoghnessFactor + LateralInstallSuccessFraction + IcdCount + IcdOrificeDiameter + IcdFlowCoefficient + SubsLocationMode + RangeStart + RangeEnd + RangeSubSpacing + RangeSubCount + LocationOfSubs + ValveLocations + SubsOrientationMode + InstallationRotationAngles + FixedInstallationRotationAngle + PipeProperties + +FishbonesPipeProperties - class RimFishbonesPipeProperties + LateralHoleDiameter + SkinFactor + +FlowCharacteristicsPlot - class RimFlowCharacteristicsPlot + WindowController + ShowWindow + WindowGeometry + FlowCase + FlowDiagSolution + TimeSelectionType + SelectedTimeSteps + SelectedTimeStepsUi + CellPVThreshold + ShowLegend + CellFilter + CellFilterView + TracerFilter + SelectedTracerNames + MinCommunication + MaxTof + +FlowDiagSolution - class RimFlowDiagSolution + UserDescription + +FlowPlotCollection - class RimFlowPlotCollection + FlowCharacteristicsPlot + DefaultWellAllocationPlot + WellDistributionPlotCollection + StoredWellAllocationPlots + StoredFlowCharacteristicsPlots + +FormationNames - class RimFormationNames + FormationNamesFileName + +FormationNamesCollectionObject - class RimFormationNamesCollection + FormationNamesList + +FractureContainment - class RimFractureContainment + IsUsingFractureContainment + TopKLayer + BaseKLayer + TruncateAtFaults + FaultThrowValue + +FractureDefinitionCollection - class RimFractureTemplateCollection + DefaultUnitForTemplates + FractureDefinitions + NextValidFractureTemplateId + +FractureGroupStatisticsCollection - class RimEnsembleFractureStatisticsCollection + FractureGroupStatistics + +FractureTemplateCollection - class RimFractureTemplateCollection + DefaultUnitForTemplates + FractureDefinitions + NextValidFractureTemplateId + +GeoMech2dViewCollection - class RimGeoMechContourMapViewCollection + GeoMechViews + +GeoMechGeometrySelectionItem - class RimGeoMechGeometrySelectionItem + GeoMechCase + m_gridIndex + m_cellIndex + m_elementFace + m_hasIntersectionTriangle + m_intersectionTriangle_0 + m_intersectionTriangle_1 + m_intersectionTriangle_2 + m_localIntersectionPoint + +GeoMechPart - class RimGeoMechPart + Name + IsChecked + PartId + +GeoMechPartCollection - class RimGeoMechPartCollection + Parts + +GeoMechPropertyFilter - class RimGeoMechPropertyFilter + UserDescription + Active + FilterType + GridIndex + PropagateToSubGrids + SelectedValues + ResultDefinition + LowerBound + UpperBound + +GeoMechPropertyFilters - class RimGeoMechPropertyFilterCollection + Active + PropertyFilters + +GeoMechResultDefinition - class RimGeoMechResultDefinition + IsChecked + ResultPositionType + ResultFieldName + ResultComponentName + TimeLapseBaseTimeStep + ReferenceTimeStep + CompactionRefLayer + NormalizeByHSP + NormalizationAirGap + +GeoMechResultSlot - class RimGeoMechCellColors + IsChecked + ResultPositionType + ResultFieldName + ResultComponentName + TimeLapseBaseTimeStep + ReferenceTimeStep + CompactionRefLayer + NormalizeByHSP + NormalizationAirGap + LegendDefinition + +GeoMechView - class RimGeoMechView + WindowController + ShowWindow + WindowGeometry + Id + (A)ViewId + NameConfig + CameraPosition + CameraPointOfInterest + PerspectiveProjection + GridZScale + BackgroundColor + (A)ViewBackgroundColor + MaximumFrameRate + CurrentTimeStep + MeshMode + SurfaceMode + ShowGridBox + DisableLighting + ShowZScale + ComparisonView + FontSize + CrossSections + IntersectionResultDefColl + ReservoirSurfaceResultDefColl + GridCollection + OverlayInfoConfig + WellMeasurements + SurfaceInViewCollection + RangeFilters + GridCellResult + TensorResults + PropertyFilters + Parts + ShowDisplacement + DisplacementScaling + +GridCaseSurface - class RimGridCaseSurface + SurfaceUserDecription + SurfaceColor + DepthOffset + SourceCase + SliceIndex + Watertight + +GridCollection - class RimGridCollection + IsActive + MainGrid + PersistentLgrs + +GridCrossPlotCurve - class RimGridCrossPlotCurve + Show + CurveName + CurveDescription + LegendDescription + AutoName + ShowLegend + ShowErrorBars + Color + FillColor + Thickness + CurveInterpolation + LineStyle + FillStyle + PointSymbol + SymbolEdgeColor + SymbolSkipPxDist + SymbolLabel + SymbolSize + SymbolLabelPosition + PlotCurveAppearance + +GridCrossPlotCurveSet - class RimGridCrossPlotDataSet + Name + IsChecked + Case + TimeStep + VisibleCellView + Grouping + XAxisProperty + YAxisProperty + GroupingProperty + NameConfig + CrossPlotCurves + UseCustomColor + CustomColor + PlotCellFilterCollection + +GridInfo - class RimGridInfo + IsActive + GridName + GridIndex + +GridInfoCollection - class RimGridInfoCollection + IsActive + GridInfos + +GridStatisticsPlot - class RimGridStatisticsPlot + WindowController + ShowWindow + WindowGeometry + Id + (A)ViewId + ShowPlotTitle + ShowTrackLegends + TrackLegendsHorizontal + TitleFontSize + LegendDeltaFontSize + PlotDescription + NumHistogramBins + HistogramBarColor + HistogramGapWidth + HistogramFrequencyType + Precision + TickNumberFormat + GraphType + Case + TimeStep + VisibleCellView + Property + +GridStatisticsPlotCollection - class RimGridStatisticsPlotCollection + GridStatisticsPlots + +GridSummaryCase - class RimGridSummaryCase + ShortName + NameSetting + ShowSubNodesInTree + AutoShortyName + SummaryHeaderFilename + Id + (A)CaseId + Associated3DCase + CachedCasename + Associated3DCaseGridFileName + IncludeRestartFiles + +GridTimeHistoryCurve - class RimGridTimeHistoryCurve + Show + CurveName + CurveDescription + LegendDescription + AutoName + ShowLegend + ShowErrorBars + Color + FillColor + Thickness + CurveInterpolation + LineStyle + FillStyle + PointSymbol + SymbolEdgeColor + SymbolSkipPxDist + SymbolLabel + SymbolSize + SymbolLabelPosition + PlotCurveAppearance + GeometrySelectionText + EclipseResultDefinition + GeoMechResultDefinition + GeometrySelectionItem + PlotAxis + +IntegerParameter - class RimIntegerParameter + Name + Label + Description + Advanced + Valid + Value + +Intersection2dView - class Rim2dIntersectionView + WindowController + ShowWindow + WindowGeometry + Id + (A)ViewId + NameConfig + CameraPosition + CameraPointOfInterest + PerspectiveProjection + GridZScale + BackgroundColor + (A)ViewBackgroundColor + MaximumFrameRate + CurrentTimeStep + MeshMode + SurfaceMode + ShowGridBox + DisableLighting + ShowZScale + ComparisonView + FontSize + Intersection + ShowDefiningPoints + ShowAxisLines + +Intersection2dViewCollection - class Rim2dIntersectionViewCollection + IntersectionViews + +IntersectionBox - class RimBoxIntersection + Active + ShowInactiveCells + UseSeparateIntersectionDataSource + SeparateIntersectionDataSource + UserDescription + singlePlaneState + MinXCoord + MaxXCoord + MinYCoord + MaxYCoord + MinDepth + MaxDepth + xySliderStepSize + DepthSliderStepSize + +IntersectionCollection - class RimIntersectionCollection + CrossSections + IntersectionBoxes + Active + UpperDepthThreshold + LowerDepthThreshold + DepthFilterOverride + CollectionDepthFilterType + +IntersectionResultDefinition - class RimIntersectionResultDefinition + IsActive + Case + TimeStep + IntersectionResultDefinitionDescription + EclipseResultDef + GeoMechResultDef + LegendConfig + TernaryLegendConfig + +Legend - class RimRegularLegendConfig + ShowLegend + NumberOfLevels + Precision + TickNumberFormat + ColorRangeMode + ColorLegend + MappingMode + RangeType + UserDefinedMax + UserDefinedMin + CategoryColorMode + ResultVariableUsage + ResetDefaultValues + CenterLegendAroundZero + +ListParameter - class RimListParameter + Name + Label + Description + Advanced + Valid + Value + +MainPlotCollection - class RimMainPlotCollection + Show + WellLogPlotCollection + RftPlotCollection + PltPlotCollection + SummaryMultiPlotCollection + AnalysisPlotCollection + CorrelationPlotCollection + SummaryCrossPlotCollection + FlowPlotCollection + Rim3dCrossPlotCollection + RimSaturationPressurePlotCollection + RimMultiPlotCollection + StimPlanModelPlotCollection + VfpPlotCollection + GridStatisticsPlotCollection + EnsembleFractureStatisticsPlotCollection + SummaryPlotCollection + +MdiWindowController - class RimMdiWindowController + MainWindowID + xPos + yPos + Width + Height + IsMaximized + +MockModelSettings - class RimMockModelSettings + CellCountX + CellCountY + CellCountZ + TotalCellCount + ResultCount + TimeStepCount + +ModeledWellPath - class RimModeledWellPath + Name + (A)WellPathName + AirGap + DatumElevation + UnitSystem + SimWellName + SimBranchIndex + ShowWellPathLabel + ShowWellPath + WellPathRadiusScale + WellPathColor + Completions + CompletionSettings + WellLogFiles + CollectionOf3dWellLogCurves + WellPathFormationKeyInFile + WellPathFormationFilePath + WellPathAttributes + WellPathTieIn + WellIASettings + WellPathGeometryDef + +MultiPlot - class RimMultiPlot + WindowController + ShowWindow + WindowGeometry + Id + (A)ViewId + ShowPlotTitle + ShowTrackLegends + TrackLegendsHorizontal + TitleFontSize + LegendDeltaFontSize + ProjectFileVersionString + ShowTitleInPlot + PlotDescription + Plots + NumberOfColumns + RowsPerPage + ShowPlotTitles + MajorTickmarkCount + SubTitleFontSize + PagePreviewMode + +MultiSnapshotDefinition - class RimAdvancedSnapshotExportDefinition + IsActive + View + EclipseResultType + SelectedEclipseResults + TimeStepStart + TimeStepEnd + SnapShotDirection + RangeFilterStart + RangeFilterEnd + AdditionalCases + +MultiSummaryPlot - class RimSummaryMultiPlot + WindowController + ShowWindow + WindowGeometry + Id + (A)ViewId + ShowPlotTitle + ShowTrackLegends + TrackLegendsHorizontal + TitleFontSize + LegendDeltaFontSize + ProjectFileVersionString + ShowTitleInPlot + PlotDescription + Plots + NumberOfColumns + RowsPerPage + ShowPlotTitles + MajorTickmarkCount + SubTitleFontSize + PagePreviewMode + AutoPlotTitle + AutoSubPlotTitle + LinkSubPlotAxes + LinkTimeAxis + AutoAdjustAppearance + AxisRangeAggregation + PlotFilterYAxisThreshold + DefaultStepDimension + +NonNetLayers - class RimNonNetLayers + IsChecked + Cutoff + Facies + FaciesDefinition + +ObservedDataCollection - class RimObservedDataCollection + ObservedDataArray + ObservedFmuRftDataArray + +ObservedFmuRftData - class RimObservedFmuRftData + Name + Directory + +ParameterGroup - class RimParameterGroup + Parameters + Name + Label + Comment + Expanded + ParameterLists + +ParameterList - class RimParameterList + ParameterNames + Name + Label + +ParameterResultCrossPlot - class RimParameterResultCrossPlot + WindowController + ShowWindow + WindowGeometry + Id + (A)ViewId + ShowPlotTitle + ShowTrackLegends + TrackLegendsHorizontal + TitleFontSize + LegendDeltaFontSize + RowSpan + ColSpan + AnalysisPlotData + TimeStepFilter + TimeStep + AutoTitle + PlotTitle + LabelFontSize + AxisTitleFontSize + AxisValueFontSize + UseCaseFilter + CurveSetForFiltering + EditCaseFilter + EnsembleParameter + +PdmDocument - class caf::PdmDocument + DocumentFileName + +PdmObjectCollection - class caf::PdmObjectCollection + PdmObjects + +PdmObjectGroup - class caf::PdmObjectGroup + +Perforation - class RimPerforationInterval + Name + IsChecked + StartMeasuredDepth + EndMeasuredDepth + Diameter + SkinFactor + StartOfHistory + UseCustomStartDate + StartDate + UseCustomEndDate + EndDate + Valves + +PerforationCollection - class RimPerforationCollection + Name + IsChecked + Perforations + NonDarcyParameters + +PlotDataFilterCollection - class RimPlotDataFilterCollection + IsActive + PlotDataFiltersField + +PlotDataFilterItem - class RimPlotDataFilterItem + IsActive + FilterTarget + FilterAddressField + QuantityText + FilterOperation + MinTopN + Max + Min + EnsembleParameterValueCategories + ConsideredTimestepsType + ExplicitlySelectedTimeSteps + +PlotTemplateCollection - class RimPlotTemplateFolderItem + FolderName + FileNames + SubFolders + +PlotTemplateFileItem - class RimPlotTemplateFileItem + AbsolutePath + +PolyLineFilter - class RimPolygonFilter + UserDescription + Active + FilterType + GridIndex + PropagateToSubGrids + PolygonFilterType + PolyIncludeType + Targets + Case + ShowLines + ShowSpheres + LineThickness + SphereRadiusFactor + LineColor + SphereColor + EnableFiltering + EnableKFilter + KRangeFilter + PolygonPlaneDepth + LockPolygon + +PolygonFilter - class RimPolygonFilter + UserDescription + Active + FilterType + GridIndex + PropagateToSubGrids + PolygonFilterType + PolyIncludeType + Targets + Case + ShowLines + ShowSpheres + LineThickness + SphereRadiusFactor + LineColor + SphereColor + EnableFiltering + EnableKFilter + KRangeFilter + PolygonPlaneDepth + LockPolygon + +PolylineTarget - class RimPolylineTarget + IsEnabled + TargetPointXyd + +PolylinesFromFileAnnotation - class RimPolylinesFromFileAnnotation + IsActive + ClosePolyline + ShowLines + ShowSpheres + Appearance + PolyLineFilePath + PolyLineDescription + +PressureTable - class RimPressureTable + Items + PressureDate + +PressureTableItem - class RimPressureTableItem + Depth + InitialPressure + Pressure + +PropertyFilter - class RimPropertyFilter + UserDescription + Active + FilterType + GridIndex + PropagateToSubGrids + SelectedValues + +ResInsightAnalysisModels - class RimEclipseCaseCollection + Reservoirs + CaseGroups + +ResInsightGeoMechCase - class RimGeoMechCase + Name + (A)CaseUserDescription + NameSetting + Id + (A)CaseId + FilePath + (A)CaseFileName + (A)GridFileName + DefaultFormationNames + TimeStepFilter + IntersectionViewCollection + GeoMechViews + CaseCohesion + FrctionAngleDeg + ElementPropertyFileNames + BiotCoefficientType + BiotFixedCoefficient + BiotResultAddress + InitialPermeabilityType + InitialPermeabilityFixed + InitialPermeabilityAddress + PermeabilityExponent + WaterDensityShearSlipIndicator + ContourMaps + MudWeightWindowParameters + +ResInsightGeoMechModels - class RimGeoMechModels + Cases + +ResInsightOilField - class RimOilField + AnalysisModels + GeoMechModels + WellPathCollection + CompletionTemplateCollection + SummaryCaseCollection + FormationNamesCollection + ObservedDataCollection + AnnotationCollection + EnsembleWellLogsCollection + FractureDefinitionCollection + SurfaceCollection + +ResInsightProject - class RimProject + DocumentFileName + ProjectFileVersionString + ReferencedExternalFiles + OilFields + ColorLegendCollection + WellPathImport + MainPlotCollection + LinkedViews + CalculationCollection + GridCalculationCollection + CommandObjects + MultiSnapshotDefinitions + TreeViewStates + TreeViewCurrentModelIndexPaths + PlotWindowTreeViewStates + PlotWindowTreeViewCurrentModelIndexPaths + show3DWindow + showPlotWindow + tiled3DWindow + tiledPlotWindow + DialogData + Reservoirs + CaseGroups + +ResampleData - class RimcSummaryResampleData + TimeSteps + Values + +ReservoirCellResultStorage - class RimReservoirCellResultsStorage + ResultCacheFileName + ResultCacheEntries + +ReservoirView - class RimEclipseView + WindowController + ShowWindow + WindowGeometry + Id + (A)ViewId + NameConfig + CameraPosition + CameraPointOfInterest + PerspectiveProjection + GridZScale + BackgroundColor + (A)ViewBackgroundColor + MaximumFrameRate + CurrentTimeStep + MeshMode + SurfaceMode + ShowGridBox + DisableLighting + ShowZScale + ComparisonView + FontSize + CrossSections + IntersectionResultDefColl + ReservoirSurfaceResultDefColl + GridCollection + OverlayInfoConfig + WellMeasurements + SurfaceInViewCollection + RangeFilters + GridCellResult + GridCellEdgeResult + ElementVectorResult + FaultResultSettings + StimPlanColors + VirtualPerforationResult + WellCollection + FaultCollection + AnnotationCollection + StreamlineCollection + PropertyFilters + ShowInactiveCells + ShowInvalidCells + +ResultDefinition - class RimEclipseResultDefinition + IsChecked + ResultType + PorosityModelType + ResultVariable + FlowDiagSolution + TimeLapseBaseTimeStep + DifferenceCase + DivideByCellFaceArea + SelectedInjectorTracers + SelectedProducerTracers + SelectedSouringTracers + FlowTracerSelectionMode + PhaseSelection + ShowOnlyVisibleCategoriesInLegend + MSyncSelectedInjProd + MSyncSelectedProdInj + +ResultSlot - class RimEclipseCellColors + IsChecked + ResultType + PorosityModelType + ResultVariable + FlowDiagSolution + TimeLapseBaseTimeStep + DifferenceCase + DivideByCellFaceArea + SelectedInjectorTracers + SelectedProducerTracers + SelectedSouringTracers + FlowTracerSelectionMode + PhaseSelection + ShowOnlyVisibleCategoriesInLegend + MSyncSelectedInjProd + MSyncSelectedProdInj + LegendDefinition + ResultVarLegendDefinitionList + TernaryLegendDefinition + LegendDefinitionPtrField + +ResultStorageEntryInfo - class RimReservoirCellResultsStorageEntryInfo + ResultType + ResultName + TimeSteps + DaysSinceSimulationStart + FilePositionDataStart + +RftAddress - class RimDataSourceForRftPlt + SourceType + EclipseCase + WellLogFile + Ensemble + ObservedFmuRftData + +RiaMemoryCleanup - class RiaMemoryCleanup + DataCase + ResultsToDelete + +RiaPreferences - class RiaPreferences + navigationPolicy + enableGrpcServer + defaultGrpcPort + scriptDirectory + scriptEditorExecutable + MaxScriptFoldersDepth + octaveExecutable + octaveShowHeaderInfoWhenExecutingScripts + pythonExecutable + pythonDebugInfo + ssihubAddress + defaultMeshModeType + defaultGridLineColors + defaultFaultGridLineColors + defaultWellLableColor + defaultViewerBackgroundColor + defaultScaleFactorZ + defaultSceneFontSizePt + defaultAnnotationFontSizePt + defaultWellLabelFontSizePt + defaultPlotFontSizePt + showLegendBackground + enableFaultsByDefault + showInfoBox + showGridBox + lastUsedProjectFileName + autocomputeDepth + loadAndShowSoil + holoLensDisableCertificateVerification + csvTextExportFieldSeparator + readerSettings + dateFormat + timeFormat + useUndoRedo + plotTemplateFolders + MaxPlotTemplateFoldersDepth + defaultPlotTemplate + pageSize + pageOrientation + pageLeftMargin + pageTopMargin + pageRightMargin + pageBottomMargin + openExportedPdfInViewer + useQtChartsPlotByDefault + SurfaceImportResamplingDistance + MultiLateralWellPattern + guiTheme + summaryPreferences + geoMechPreferences + systemPreferences + +RiaPreferencesGeoMech - class RiaPreferencesGeoMech + geomechFRAPreprocCommand + geomechFRAPostprocCommand + geomechFRAMacrisCommand + geomechFRADefaultXML + geomechFRADefaultAdvXML + geomechWIADefaultXML + geomechWIACommand + keepTemporaryFile + waitForInputFileEdit + +RiaPreferencesSummary - class RiaPreferencesSummary + summaryRestartFilesShowImportDialog + summaryImportMode + gridImportMode + summaryEnsembleImportMode + defaultSummaryHistoryCurveStyle + defaultSummaryCurvesTextFilter + defaultSummaryPlot + defaultSummaryTemplates + createEnhancedSummaryDataFile_v01 + useEnhancedSummaryDataFile + createH5SummaryDataFile_v01 + createH5SummaryFileThreadCount + summaryReaderType_v01 + showSummaryTimeAsLongString + useMultipleThreadsWhenLoadingSummaryCases + DefaultNumberOfColumns + DefaultRowsPerPage + curveColorByPhase + appendHistoryVectorForDragDrop + historyCurveContrastColor + +RiaPreferencesSystem - class RiaPreferencesSystem + useShaders + showHud + appendClassNameToUiText + appendFieldKeywordToToolTipText + showViewIdInTree + showTestToolbar + includeFractureDebugInfoFile + holoLensExportFolder + showProjectChangedDialog + showProgressBar + showPdfExportDialog + gtestFilter + exportScalingFactor + eclipseReaderMode + +RiaRegressionTest - class RiaRegressionTest + workingFolder + folderContainingDiffTool + folderContainingGitTool + regressionTestFolder + showInteractiveDiffImages + useOpenMPForGeometryCreation + openReportInBrowser + testFilter + appendTestsAfterTestFilter + invalidateExternalFilePaths + forcePlotEngine + +RicCaseAndFileExportSettingsUi - class RicCaseAndFileExportSettingsUi + Folder + CaseToApply + +RicCellRangeUi - class RicCellRangeUi + Case + GridIndex + StartIndexI + StartIndexJ + StartIndexK + CellCountI + CellCountJ + CellCountK + +RicCreateEnsembleSurfaceUi - class RicCreateEnsembleSurfaceUi + Layers + AutoCreateEnsembleSurfaces + MinLayer + MaxLayer + +RicCreateEnsembleWellLogUi - class RicCreateEnsembleWellLogUi + AutoCreateEnsembleWellLogs + TimeStep + WellPathSource + WellPath + WellFilePath + SelectedProperties + +RicCreateMultipleWellPathLateralsUi - class RicCreateMultipleWellPathLateralsUi + SourceLaterals + TopLevelWellPath + Locations + +RicDeleteItemExecData - class RicDeleteItemExecData + PathToField + Description + indexToObject + deletedObjectAsXml + +RicExportCarfinUi - class RicExportCarfinUi + CellRange + ExportFileName + CaseToApply + CellCountI + CellCountJ + CellCountK + MaxWellCount + +RicExportCompletionDataSettingsUi - class RicExportCompletionDataSettingsUi + Folder + CaseToApply + FileSplit + compdatExport + TimeStepIndex + IncludeMSW + UseLateralNTG + IncludePerforations + IncludeFishbones + IncludeFractures + TransScalingType + TransScalingTimeStep + TransScalingWBHPSource + TransScalingWBHP + ExcludeMainBoreForFishbones + ReportCompletionTypesSeparately + ExportDataSourceAsComment + ExportWelspec + CompletionWelspecAfterMainBore + UseCustomFileName + CustomFileName + +RicExportContourMapToTextUi - class RicExportContourMapToTextUi + ExportFileName + ExportLocalCoordinates + UndefinedValueLabel + ExcludeUndefinedValues + +RicExportEclipseInputGridUi - class RicExportEclipseSectorModelUi + ExportGrid + ExportGridFilename + ExportInLocalCoords + InvisibleCellActnum + GridBoxSelection + MinI + MinJ + MinK + MaxI + MaxJ + MaxK + ExportFaults + ExportFaultsFilename + RefinementCountI + RefinementCountJ + RefinementCountK + ExportParams + ExportParamsFilename + ExportMainKeywords + +RicExportLgrUi - class RicExportLgrUi + ExportFolder + CaseToApply + TimeStepIndex + IncludePerforations + IncludeFractures + IncludeFishbones + CellCountI + CellCountJ + CellCountK + SplitType + +RicExportToLasFileObj - class RicExportToLasFileObj + tvdrkbOffset + +RicExportToLasFileResampleUi - class RicExportToLasFileResampleUi + ExportFolder + FilePrefix + CapitalizeFileName + CurveUnitConversion + ActivateResample + ResampleInterval + ExportTvdrkb + tvdrkbOffsets + +RicExportWellPathsUi - class RicExportWellPathsUi + ExportFolder + MdStepSize + +RicGridCalculator - class RicGridCalculatorUi + CurrentCalculation + NewCalculation + DeleteCalculation + +RicHoloLensCreateSessionUi - class RicHoloLensCreateSessionUi + SessionName + SessionPinCode + ServerSettings + +RicHoloLensExportToFolderUi - class RicHoloLensExportToFolderUi + ViewForExport + ExportFolder + +RicHoloLensServerSettings - class RicHoloLensServerSettings + ServerAddress + +RicLinkVisibleViewsFeatureUi - class RicLinkVisibleViewsFeatureUi + MasterView + +RicPasteAsciiDataToSummaryPlotFeatureUi - class RicPasteAsciiDataToSummaryPlotFeatureUi + PlotTitle + CurvePrefix + DecimalSeparator + DateFormat + TimeFormat + UseCustomDateFormat + CustomDateTimeFormat + LineStyle + Symbol + SymbolSkipDinstance + CellSeparator + TimeColumnName + PreviewText + +RicSaturationPressureUi - class RicSaturationPressureUi + CaseToApply + TimeStep + +RicSaveEclipseInputVisibleCellsUi - class RicSaveEclipseInputVisibleCellsUi + ExportFilename + ExportKeyword + VisibleActiveCellsValue + HiddenActiveCellsValue + InactiveCellsValue + +RicSaveMultiPlotTemplateFeatureSettings - class RicSaveMultiPlotTemplateFeatureSettings + FilePath + Name + PersistObjectNameWells + PersistObjectNameGroups + PersistObjectNameRegions + +RicSelectCaseOrEnsembleUi - class RicSelectCaseOrEnsembleUi + SelectedSummaryCase + SelectedEnsemble + +RicSelectPlotTemplateUi - class RicSelectPlotTemplateUi + SelectedPlotTemplates + +RicSelectSummaryPlotUI - class RicSelectSummaryPlotUI + SelectedSummaryPlot + CreateNewPlot + NewViewName + +RicSelectViewUI - class RicSelectViewUI + MasterView + CreateNewView + NewViewName + +RicSummaryAddressSelection - class RiuSummaryVectorSelectionUi + SummaryCases + CurrentSummaryCategory + SelectedSummaryCategories + FieldVectors + Aquifers + AquiferVectors + NetworkVectors + MiscVectors + Regions + RegionsVectors + Region2RegionRegions + Region2RegionVectors + WellGroupWellGroupNames + WellGroupVectors + WellWellName + WellVectors + WellCompletionWellName + WellCompletionIjk + WellCompletionVectors + WellCompletionLgrLgrName + WellCompletionLgrWellName + WellCompletionLgrIjk + WellCompletionLgrVectors + WellLgrLgrName + WellLgrWellName + WellLgrVectors + WellSegmentWellName + WellSegmentNumber + WellSegmentVectors + BlockIjk + BlockVectors + BlockLgrLgrName + BlockLgrIjk + BlockLgrVectors + CalculatedVectors + ImportedVectors + +RicSummaryCurveCalculator - class RicSummaryCurveCalculatorUi + CurrentCalculation + NewCalculation + DeleteCalculation + +RicSummaryCurveCreator - class RicSummaryPlotEditorUi + TargetPlot + UseAutoAppearanceAssignment + AppearanceApplyButton + CaseAppearanceType + VariableAppearanceType + WellAppearanceType + GroupAppearanceType + RegionAppearanceType + UseAutoPlotTitle + ApplySelection + Close + OK + SummaryCurveNameConfig + +RicWellPathsUnitSystemSettingsUi - class RicWellPathsUnitSystemSettingsUi + UnitSystem + +RifReaderSettings - class RifReaderSettings + importFaults + importSimulationNNCs + includeInactiveCellsInFaultGeometry + importAdvancedMswData + useResultIndexFile + skipWellData + includeFileAbsolutePathPrefix + importSummaryData + +Rim3dWellLogCurveCollection - class Rim3dWellLogCurveCollection + Show3dWellLogCurves + PlaneWidthScaling + Show3dWellLogGrid + Show3dWellLogBackground + ArrayOf3dWellLogCurves + +Rim3dWellLogExtractionCurve - class Rim3dWellLogExtractionCurve + Show3dWellLogCurve + MinCurveValue + MaxCurveValue + DrawPlane + CurveColor + CurveCase + CurveTimeStep + CurveEclipseResult + CurveGeomechResult + NameConfig + +Rim3dWellLogFileCurve - class Rim3dWellLogFileCurve + Show3dWellLogCurve + MinCurveValue + MaxCurveValue + DrawPlane + CurveColor + CurveWellLogChannel + WellLogFile + NameConfig + +Rim3dWellLogRftCurve - class Rim3dWellLogRftCurve + Show3dWellLogCurve + MinCurveValue + MaxCurveValue + DrawPlane + CurveColor + eclipseResultCase + timeStep + wellLogChannelName + NameConfig + +RimAnnotationCollection - class RimAnnotationCollection + IsActive + TextAnnotations + ReachCircleAnnotations + UserDefinedPolylineAnnotations + PolylineFromFileAnnotations + +RimAnnotationCollectionBase - class RimAnnotationCollectionBase + IsActive + TextAnnotations + +RimAnnotationGroupCollection - class RimAnnotationGroupCollection + IsActive + Annotations + +RimAnnotationLineAppearance - class RimAnnotationLineAppearance + LineFieldsHidden + Color + Thickness + +RimAnnotationTextAppearance - class RimAnnotationTextAppearance + FontSize + FontColor + BackgroundColor + AnchorLineColor + +RimBinaryExportSettings - class RimBinaryExportSettings + Filename + EclipseKeyword + UndefinedValue + +RimCaseCollection - class RimCaseCollection + Reservoirs + +RimCellFilterCollection - class RimCellFilterCollection + Active + CellFilters + RangeFilters + +RimCommandExecuteScript - class RimCommandExecuteScript + Name + ScriptText + IsEnabled + +RimCommandIssueFieldChanged - class RimCommandIssueFieldChanged + CommandName + ObjectName + FieldName + FieldValueToApply + +RimCommandObject - class RimCommandObject + +RimCommandRouter - class RimCommandRouter + +RimContourMapView - class RimEclipseContourMapView + WindowController + ShowWindow + WindowGeometry + Id + (A)ViewId + NameConfig + CameraPosition + CameraPointOfInterest + PerspectiveProjection + GridZScale + BackgroundColor + (A)ViewBackgroundColor + MaximumFrameRate + CurrentTimeStep + MeshMode + SurfaceMode + ShowGridBox + DisableLighting + ShowZScale + ComparisonView + FontSize + CrossSections + IntersectionResultDefColl + ReservoirSurfaceResultDefColl + GridCollection + OverlayInfoConfig + WellMeasurements + SurfaceInViewCollection + RangeFilters + GridCellResult + GridCellEdgeResult + ElementVectorResult + FaultResultSettings + StimPlanColors + VirtualPerforationResult + WellCollection + FaultCollection + AnnotationCollection + StreamlineCollection + PropertyFilters + ShowInactiveCells + ShowInvalidCells + ContourMapProjection + ShowAxisLines + ShowScaleLegend + +RimCsvUserData - class RimCsvUserData + ShortName + NameSetting + ShowSubNodesInTree + AutoShortyName + SummaryHeaderFilename + Id + (A)CaseId + UseCustomIdentifier + SummaryType + IdentifierName + ParseOptions + +RimCustomObjectiveFunction - class RimCustomObjectiveFunction + FunctionTitle + CustomFunctionTitle + Weights + ObjectiveFunctions + +RimCustomObjectiveFunctionCollection - class RimCustomObjectiveFunctionCollection + ObjectiveFunctions + +RimCustomObjectiveFunctionWeight - class RimCustomObjectiveFunctionWeight + WeightTitle + ObjectiveSummaryAddress + WeightValue + ObjectiveFunction + +RimDerivedEnsembleCase - class RimDerivedSummaryCase + ShortName + NameSetting + ShowSubNodesInTree + AutoShortyName + SummaryHeaderFilename + Id + (A)CaseId + SummaryCase1 + Operator + SummaryCase2 + UseFixedTimeStep + FixedTimeStepIndex + InUse + +RimDerivedEnsembleCaseCollection - class RimDerivedEnsembleCaseCollection + SummaryCases + SummaryCollectionName + NameCount + IsEnsemble + Id + (A)EnsembleId + Ensemble1 + Ensemble2 + Operator + CaseCount + MatchOnParameters + UseFixedTimeStep + FixedTimeStepIndex + +RimDialogData - class RimDialogData + ExportCarfin + ExportCompletionData + MultipleFractionsData + HoloLenseExportToFolderData + ExportwellPathsData + ExportLgr + ExportSectorModel + MockModelSettings + CreateEnsembleSurfaceUi + CreateEnsembleWellLogUi + +RimEclipseContourMapProjection - class RimEclipseContourMapProjection + Name + IsChecked + SampleSpacing + ResultAggregation + ContourLines + ContourLabels + SmoothContourLines + WeightByParameter + WeightingResult + +RimEclipseResultAddressCollection - class RimEclipseResultAddressCollection + Name + Addresses + ResultType + +RimElementVectorResult - class RimElementVectorResult + LegendDefinition + ShowOil + ShowGas + ShowWater + ShowResult + VectorView + VectorSurfaceCrossingLocation + ShowVectorI + ShowVectorJ + ShowVectorK + ShowNncData + Threshold + VectorColor + UniformVectorColor + SizeScale + +RimEllipseFractureTemplate - class RimEllipseFractureTemplate + Id + UserDescription + UnitSystem + Orientation + AzimuthAngle + SkinFactor + PerforationLength + PerforationEfficiency + WellDiameter + ConductivityType + WellPathDepthAtFracture + FractureContainmentField + NonDarcyFlowType + UserDefinedDFactor + FractureWidthType + FractureWidth + BetaFactorType + InertialCoefficient + PermeabilityType + RelativePermeability + EffectivePermeability + RelativeGasDensity + GasViscosity + HeightScaleFactor + WidthScaleFactor + DFactorScaleFactor + ConductivityFactor + HalfLength + Height + Width + Permeability + +RimEnsembleCurveFilter - class RimEnsembleCurveFilter + FilterTitle + Active + FilterMode + EnsembleParameter + ObjectiveSummaryAddress + ObjectiveFunction + CustomObjectiveFunction + MinValue + MaxValue + Categories + +RimEnsembleCurveFilterCollection - class RimEnsembleCurveFilterCollection + Active + CurveFilters + NewEnsembleFilter + +RimEnsembleCurveSet - class RimEnsembleCurveSet + EnsembleCurveSet + IsActive + SummaryGroup + SummaryAddress + Resampling + ColorMode + Color + EnsembleParameter + ObjectiveSummaryAddress + CustomObjectiveFunction + ShowObjectiveFunctionFormula + MinDateRange + MinTimeStep + MaxDateRange + MaxTimeStep + TimeStepFilter + TimeSteps + PlotAxis + Axis + LegendConfig + CurveFilters + CustomObjectiveFunctions + ObjectiveFunction + Statistics + UserDefinedName + AutoName + SummaryAddressNameTools + +RimEnsembleCurveSetCollection - class RimEnsembleCurveSetCollection + EnsembleCurveSets + IsActive + +RimEnsembleStatistics - class RimEnsembleStatistics + Active + HideEnsembleCurves + BasedOnFilteredCases + ShowP10Curve + ShowP50Curve + ShowP90Curve + ShowMeanCurve + ShowCurveLabels + IncludeIncompleteCurves + Color + +RimEnsembleWellLogCurveSet - class RimEnsembleWellLogCurveSet + EnsembleCurveSet + IsActive + EnsembleWellLogs + WellLogChannelName + FilterEnsembleCurveSet + DepthEqualization + ColorMode + Color + Statistics + UserDefinedName + AutoName + PlotCurveAppearance + +RimEquilibriumAxisAnnotation - class RimEquilibriumAxisAnnotation + Active + Name + Value + RangeStart + RangeEnd + AnnotationType + Associated3DCase + m_equilNum + +RimExportInputSettings - class RimExportInputSettings + Filename + Keyword + +RimFaultRAPreprocSettings - class RimFaultRAPreprocSettings + StartTimeStepEclipse + EndTimeStepEclipse + StartTimeStepGeoMech + EndTimeStepGeoMech + EclipseCase + GeomechCase + BaseDir + CleanBaseDir + SmoothEclipseData + ElasticTableFilename + +RimFaultRASettings - class RimFaultRASettings + EclipseCase + GeomechCase + EclipseFRACase + BaseDir + ElasticTableFilename + StartTimeStepEclipse + EndTimeStepEclipse + StartTimeStepGeoMech + EndTimeStepGeoMech + BasicParameters + AdvancedParameters + BasicParametersRI + AdvancedParametersRI + +RimFaultResultSlot - class RimEclipseFaultColors + ShowCustomFaultResult + CustomResultSlot + +RimFractureExportSettings - class RimFractureExportSettings + Filename + CaseToApply + +RimGeoMechContourMapProjection - class RimGeoMechContourMapProjection + Name + IsChecked + SampleSpacing + ResultAggregation + ContourLines + ContourLabels + SmoothContourLines + LimitToPorRegion + VerticalLimit + PaddingAroundPorRegion + +RimGeoMechContourMapView - class RimGeoMechContourMapView + WindowController + ShowWindow + WindowGeometry + Id + (A)ViewId + NameConfig + CameraPosition + CameraPointOfInterest + PerspectiveProjection + GridZScale + BackgroundColor + (A)ViewBackgroundColor + MaximumFrameRate + CurrentTimeStep + MeshMode + SurfaceMode + ShowGridBox + DisableLighting + ShowZScale + ComparisonView + FontSize + CrossSections + IntersectionResultDefColl + ReservoirSurfaceResultDefColl + GridCollection + OverlayInfoConfig + WellMeasurements + SurfaceInViewCollection + RangeFilters + GridCellResult + TensorResults + PropertyFilters + Parts + ShowDisplacement + DisplacementScaling + ContourMapProjection + ShowAxisLines + ShowScaleLegend + +RimGridCalculation - class RimGridCalculation + Description + Expression + Unit + Variables + CalculatedValues + TimeSteps + Id + +RimGridCalculationCollection - class RimGridCalculationCollection + Calculations + +RimGridCalculationVariable - class RimGridCalculationVariable + VariableName + ResultType + ResultVariable + EclipseGridCase + TimeStep + VisibleCellView + DefaultValueType + DefaultValue + +RimGridCrossPlot - class RimGridCrossPlot + WindowController + ShowWindow + WindowGeometry + Id + (A)ViewId + ShowPlotTitle + ShowTrackLegends + TrackLegendsHorizontal + TitleFontSize + LegendDeltaFontSize + RowSpan + ColSpan + ShowInfoBox + NameConfig + xAxisProperties + yAxisProperties + CrossPlotCurve + +RimGridCrossPlotCollection - class RimGridCrossPlotCollection + GridCrossPlots + +RimGridCrossPlotCurveSetNameConfig - class RimGridCrossPlotDataSetNameConfig + CustomCurveName + AddCaseName + AddAxisVariables + AddTimeStep + AddGrouping + +RimGridCrossPlotNameConfig - class RimGridCrossPlotNameConfig + CustomCurveName + AddDataSetNames + +RimIdenticalGridCaseGroup - class RimIdenticalGridCaseGroup + UserDescription + GroupId + StatisticsCaseCollection + CaseCollection + +RimInputProperty - class RimEclipseInputProperty + ResultName + EclipseKeyword + FileName + +RimInputPropertyCollection - class RimEclipseInputPropertyCollection + InputProperties + +RimInputReservoir - class RimEclipseInputCase + Name + (A)CaseUserDescription + NameSetting + Id + (A)CaseId + FilePath + (A)CaseFileName + (A)GridFileName + DefaultFormationNames + TimeStepFilter + IntersectionViewCollection + ReservoirViews + MatrixModelResults + FractureModelResults + FlipXAxis + FlipYAxis + ContourMaps + InputPropertyCollection + AdditionalFileNamesProxy + +RimIntersectionResultsDefinitionCollection - class RimIntersectionResultsDefinitionCollection + isActive + IntersectionResultDefinitions + +RimMeasurement - class RimMeasurement + +RimMswCompletionParameters - class RimMswCompletionParameters + RefMDType + RefMD + CustomValuesForLateral + LinerDiameter + RoughnessFactor + PressureDrop + LengthAndDepth + EnforceMaxSegmentLength + MaxSegmentLength + +RimMudWeightWindowParameters - class RimMudWeightWindowParameters + WellDeviationSourceType + WellDeviationFixed + WellDeviationAddress + WellAzimuthSourceType + WellAzimuthFixed + WellAzimuthAddress + UCSSourceType + UCSFixed + UCSAddress + PoissonsRatioSourceType + PoissonsRatioFixed + PoissonsRatioAddress + K0_FGSourceType + K0_FGFixed + K0_FGAddress + obg0SourceType + obg0Fixed + obg0Address + AirGap + SHMultiplier + UpperLimitType + LowerLimitType + FractureGradientCalculationType + PorePressureNonReservoirSource + UserPPNonReservoir + PPNonReservoirAddress + ReferenceLayer + +RimMultiPlotCollection - class RimMultiPlotCollection + MultiPlots + +RimMultipleLocations - class RimMultipleLocations + LocationMode + RangeStart + RangeEnd + Spacing + RangeValveCount + Locations + +RimMultipleValveLocations - class RimMultipleValveLocations + LocationMode + RangeStart + RangeEnd + ValveSpacing + RangeValveCount + LocationOfValves + +RimNonDarcyPerforationParameters - class RimNonDarcyPerforationParameters + NonDarcyFlowType + UserDefinedDFactor + GridPermeabilityScalingFactor + WellRadius + RelativeGasDensity + GasViscosity + InertialCoefficientBeta0 + PermeabilityScalingFactor + PorosityScalingFactor + +RimObjectiveFunction - class RimObjectiveFunction + FunctionType + NormalizeByNumberOfObservations + NormalizeByNumberOfVectors + ErrorEstimatePercentage + UseSquaredError + +RimObservedEclipseUserData - class RimObservedEclipseUserData + ShortName + NameSetting + ShowSubNodesInTree + AutoShortyName + SummaryHeaderFilename + Id + (A)CaseId + UseCustomIdentifier + SummaryType + IdentifierName + +RimOilFieldEntry - class RimOilFieldEntry + OilFieldName + EdmId + Selected + wellsFilePath + Wells + +RimOilRegionEntry - class RimOilRegionEntry + OilRegionEntry + Fields + Selected + +RimPlotAxisAnnotation - class RimPlotAxisAnnotation + Active + Name + Value + RangeStart + RangeEnd + +RimPlotCellFilterCollection - class RimPlotCellFilterCollection + Name + IsChecked + FilterMode + CellFilters + +RimPlotCellPropertyFilter - class RimPlotCellPropertyFilter + Name + IsChecked + FilterMode + ResultDefinition + LowerBound + UpperBound + +RimPolylineAppearance - class RimPolylineAppearance + LineFieldsHidden + Color + Thickness + SphereFieldsHidden + SphereColor + SphereRadiusFactor + +RimPolylinesAnnotationInView - class RimPolylinesAnnotationInView + IsActive + SourceAnnotation + +RimPolylinesFromFileAnnotationInView - class RimPolylinesFromFileAnnotationInView + IsActive + SourceAnnotation + +RimProcess - class RimProcess + Command + Description + ID + +RimReachCircleAnnotation - class RimReachCircleAnnotation + IsActive + CenterPointXyd + Radius + Name + Appearance + +RimReachCircleAnnotationInView - class RimReachCircleAnnotationInView + IsActive + SourceAnnotation + +RimSaturationPressurePlot - class RimSaturationPressurePlot + WindowController + ShowWindow + WindowGeometry + Id + (A)ViewId + ShowPlotTitle + ShowTrackLegends + TrackLegendsHorizontal + TitleFontSize + LegendDeltaFontSize + RowSpan + ColSpan + ShowInfoBox + NameConfig + xAxisProperties + yAxisProperties + CrossPlotCurve + +RimSaturationPressurePlotCollection - class RimSaturationPressurePlotCollection + SaturationPressurePlots + +RimStatisticalCalculation - class RimEclipseStatisticsCase + Name + (A)CaseUserDescription + NameSetting + Id + (A)CaseId + FilePath + (A)CaseFileName + (A)GridFileName + DefaultFormationNames + TimeStepFilter + IntersectionViewCollection + ReservoirViews + MatrixModelResults + FractureModelResults + FlipXAxis + FlipYAxis + ContourMaps + InputPropertyCollection + ResultType + PorosityModel + DynamicPropertiesToCalculate + StaticPropertiesToCalculate + GeneratedPropertiesToCalculate + InputPropertiesToCalculate + FractureDynamicPropertiesToCalculate + FractureStaticPropertiesToCalculate + FractureGeneratedPropertiesToCalculate + FractureInputPropertiesToCalculate + CalculatePercentiles + PercentileCalculationType + LowPercentile + MidPercentile + HighPercentile + WellDataSourceCase + UseZeroAsInactiveCellValue + +RimStatisticalCollection - class RimEclipseStatisticsCaseCollection + Reservoirs + +RimStimPlanColors - class RimStimPlanColors + IsChecked + ResultName + DefaultColor + LegendConfigurations + ShowStimPlanMesh + StimPlanCellVizMode + +RimStimPlanFractureTemplate - class RimStimPlanFractureTemplate + Id + UserDescription + UnitSystem + Orientation + AzimuthAngle + SkinFactor + PerforationLength + PerforationEfficiency + WellDiameter + ConductivityType + WellPathDepthAtFracture + FractureContainmentField + NonDarcyFlowType + UserDefinedDFactor + FractureWidthType + FractureWidth + BetaFactorType + InertialCoefficient + PermeabilityType + RelativePermeability + EffectivePermeability + RelativeGasDensity + GasViscosity + HeightScaleFactor + WidthScaleFactor + DFactorScaleFactor + ConductivityFactor + StimPlanFileName + UserDefinedWellPathDepthAtFracture + BorderPolygonResultName + ActiveTimeStepIndex + ConductivityResultName + ShowStimPlanMesh + +RimStimPlanLegendConfig - class RimStimPlanLegendConfig + Name + Legend + +RimSummaryAddressCollection - class RimSummaryAddressCollection + Name + ContentsType + SummaryAddresses + AddressSubfolders + CaseId + EnsembleId + +RimSummaryCalculation - class RimSummaryCalculation + Description + Expression + Unit + Variables + CalculatedValues + TimeSteps + Id + +RimSummaryCalculationCollection - class RimSummaryCalculationCollection + Calculations + +RimSummaryCalculationVariable - class RimSummaryCalculationVariable + VariableName + SummaryCase + SummaryAddress + +RimSummaryCurveCollection - class RimSummaryCurveCollection + CollectionCurves + IsActive + +RimSummaryCurveCollectionModifier - class RimSummaryPlotSourceStepping + StepDimension + CurveCase + IncludeEnsembleCasesForCaseStepping + WellName + GroupName + Region + VectorName + CellBlock + Segment + Completion + Aquifer + Ensemble + Placeholder + +RimSummaryMultiPlotCollection - class RimSummaryMultiPlotCollection + MultiSummaryPlots + +RimSummaryPlotManager - class RimSummaryPlotManager + SummaryPlot + FilterText + AddressCandidates + SelectedDataSources + IncludeDiffCurves + PushButtonReplace + PushButtonNewPlot + PushButtonAppend + IndividualPlotPerObject + IndividualPlotPerVector + IndividualPlotPerDataSource + CreateMultiPlot + +RimSurfaceIntersectionBand - class RimSurfaceIntersectionBand + IsChecked + LineAppearance + BandColor + BandOpacity + BandPolygonOffsetUnit + Surfaces + NameProxy + +RimSurfaceIntersectionCollection - class RimSurfaceIntersectionCollection + IsChecked + IntersectionBands + IntersectionCurves + +RimSurfaceIntersectionCurve - class RimSurfaceIntersectionCurve + IsChecked + LineAppearance + Surface1 + NameProxy + +RimTensorResults - class RimTensorResults + LegendDefinition + ResultVariable + ShowTensors + Principal1 + Principal2 + Principal3 + Threshold + VectorColor + ScaleMethod + SizeScale + RangeType + +RimTernaryLegendConfig - class RimTernaryLegendConfig + ShowTernaryLegend + Precision + RangeType + ternaryRangeSummary + UserDefinedMaxSoil + UserDefinedMinSoil + UserDefinedMaxSgas + UserDefinedMinSgas + UserDefinedMaxSwat + UserDefinedMinSwat + +RimTextAnnotation - class RimTextAnnotation + AnchorPointXyd + LabelPointXyd + Text + IsActive + TextAppearance + +RimTextAnnotationInView - class RimTextAnnotationInView + IsActive + SourceAnnotation + +RimTimeAxisAnnotation - class RimTimeAxisAnnotation + Active + Name + Value + RangeStart + RangeEnd + +RimTimeStepFilter - class RimTimeStepFilter + FilterType + FirstTimeStep + LastTimeStep + Interval + DateFormat + TimeStepIndicesToImport + +RimUserDefinedPolylinesAnnotationInView - class RimUserDefinedPolylinesAnnotationInView + IsActive + SourceAnnotation + +RimVfpPlotCollection - class RimVfpPlotCollection + VfpPlots + +RimViewLinkerCollection - class RimViewLinkerCollection + Active + ViewLinkers + +RimViewNameConfig - class RimViewNameConfig + CustomCurveName + AddCaseName + AddAggregationType + AddProperty + AddSampleSpacing + +RimVirtualPerforationResults - class RimVirtualPerforationResults + ShowConnectionFactors + ShowClosedConnections + GeometryScaleFactor + LegendDefinition + +RimWellIASettings - class RimWellIASettings + Name + IsChecked + GeomechCase + BaseDir + StartMeasuredDepth + EndMeasuredDepth + BufferXY + ModelingParameters + TimeStepParameters + showBox + startDate + boxValid + +RimWellIASettingsCollection - class RimWellIASettingsCollection + WellIASettings + +RimWellLogExtractionCurve - class RimWellLogExtractionCurve + Show + CurveName + CurveDescription + LegendDescription + AutoName + ShowLegend + ShowErrorBars + Color + FillColor + Thickness + CurveInterpolation + LineStyle + FillStyle + PointSymbol + SymbolEdgeColor + SymbolSkipPxDist + SymbolLabel + SymbolSize + SymbolLabelPosition + PlotCurveAppearance + StackCurve + StackPhaseColors + TrajectoryType + CurveWellPath + SimulationWellName + BranchDetection + Branch + CurveCase + CurveEclipseResult + CurveGeomechResult + CurveTimeStep + AddCaseNameToCurveName + AddPropertyToCurveName + AddWellNameToCurveName + AddTimestepToCurveName + AddDateToCurveName + +RimWellLogExtractionCurveNameConfig - class RimWellLogExtractionCurveNameConfig + CustomCurveName + AddCaseName + AddProperty + AddWellName + AddTimeStep + AddDate + +RimWellLogFileCurveNameConfig - class RimWellLogFileCurveNameConfig + CustomCurveName + +RimWellLogPlotNameConfig - class RimWellLogPlotNameConfig + CustomCurveName + AddCaseName + AddWellName + AddTimeStep + AddAirGap + AddWaterDepth + +RimWellLogRftCurveNameConfig - class RimWellLogRftCurveNameConfig + CustomCurveName + +RimWellLogWbsCurve - class RimWellLogWbsCurve + Show + CurveName + CurveDescription + LegendDescription + AutoName + ShowLegend + ShowErrorBars + Color + FillColor + Thickness + CurveInterpolation + LineStyle + FillStyle + PointSymbol + SymbolEdgeColor + SymbolSkipPxDist + SymbolLabel + SymbolSize + SymbolLabelPosition + PlotCurveAppearance + StackCurve + StackPhaseColors + TrajectoryType + CurveWellPath + SimulationWellName + BranchDetection + Branch + CurveCase + CurveEclipseResult + CurveGeomechResult + CurveTimeStep + AddCaseNameToCurveName + AddPropertyToCurveName + AddWellNameToCurveName + AddTimestepToCurveName + AddDateToCurveName + SmoothCurve + SmoothingThreshold + +RimWellPathEntry - class RimWellPathEntry + Name + Selected + WellPathType + surveyType + requestUrl + wellPathFilePath + +RimWellPathImport - class RimWellPathImport + WellTypeSurvey + WellTypePlans + UtmMode + UtmNorth + UtmSouth + UtmEast + UtmWest + Regions + +RimWellPathTieIn - class RimWellPathTieIn + ParentWellPath + ChildWellPath + TieInMeasuredDepth + AddValveAtConnection + Valve + +RiuCreateMultipleFractionsUi - class RiuCreateMultipleFractionsUi + SourceCase + MinDistanceFromWellTd + MaxFracturesPerWell + Options + FractureCreationSummary + +RiuMultipleFractionsOptions - class RicCreateMultipleFracturesOptionItemUi + TopKLayer + BaseKLayer + Template + MinSpacing + +ScriptLocation - class RimScriptCollection + ScriptDirectory + CalcScripts + SubDirectories + +SimWellFracture - class RimSimWellFracture + Name + IsChecked + FractureDef + EditTemplate + CreateEllipseTemplate + CreateStimPlanTemplate + AutoUpdateWellPathDepthAtFractureFromTemplate + WellPathDepthAtFracture + Azimuth + PerforationLength + PerforationEfficiency + WellDiameter + Dip + Tilt + FractureUnit + TimeIndexToPlot + MeasuredDepth + Branch + +SimWellFractureCollection - class RimSimWellFractureCollection + Fractures + +StimPlanFractureTemplate - class RimStimPlanFractureTemplate + Id + UserDescription + UnitSystem + Orientation + AzimuthAngle + SkinFactor + PerforationLength + PerforationEfficiency + WellDiameter + ConductivityType + WellPathDepthAtFracture + FractureContainmentField + NonDarcyFlowType + UserDefinedDFactor + FractureWidthType + FractureWidth + BetaFactorType + InertialCoefficient + PermeabilityType + RelativePermeability + EffectivePermeability + RelativeGasDensity + GasViscosity + HeightScaleFactor + WidthScaleFactor + DFactorScaleFactor + ConductivityFactor + StimPlanFileName + UserDefinedWellPathDepthAtFracture + BorderPolygonResultName + ActiveTimeStepIndex + ConductivityResultName + ShowStimPlanMesh + +StimPlanModel - class RimStimPlanModel + Name + IsChecked + StimPlanModelTemplate + EditModelTemplate + EclipseCase + TimeStep + InitialPressureEclipseCase + StaticEclipseCase + MeasuredDepth + ExtractionOffsetTop + ExtractionOffsetBottom + ExtractionDepthTop + ExtractionDepthBottom + ExtractionType + ThicknessDirectionWellPath + BoundingBoxHorizontal + BoundingBoxVertical + UseDetailedFluidLoss + RelativePermeabilityFactor + PoroElasticConstant + ThermalExpansionCoefficient + PerforationLength + FractureOrientation + AzimuthAngle + FormationDip + AutoComputeBarrier + Barrier + DistanceToBarrier + BarrierDip + WellPenetrationLayer + ShowOnlyBarrierFault + ShowAllFaults + BarrierFaultName + BarrierTextAnnotation + PerforationInterval + +StimPlanModelCollection - class RimStimPlanModelCollection + Name + IsChecked + StimPlanModels + +StimPlanModelCurve - class RimStimPlanModelCurve + Show + CurveName + CurveDescription + LegendDescription + AutoName + ShowLegend + ShowErrorBars + Color + FillColor + Thickness + CurveInterpolation + LineStyle + FillStyle + PointSymbol + SymbolEdgeColor + SymbolSkipPxDist + SymbolLabel + SymbolSize + SymbolLabelPosition + PlotCurveAppearance + StackCurve + StackPhaseColors + TrajectoryType + CurveWellPath + SimulationWellName + BranchDetection + Branch + CurveCase + CurveEclipseResult + CurveGeomechResult + CurveTimeStep + AddCaseNameToCurveName + AddPropertyToCurveName + AddWellNameToCurveName + AddTimestepToCurveName + AddDateToCurveName + StimPlanModel + CurveProperty + +StimPlanModelPlot - class RimStimPlanModelPlot + WindowController + ShowWindow + WindowGeometry + Id + (A)ViewId + ShowPlotTitle + ShowTrackLegends + TrackLegendsHorizontal + TitleFontSize + LegendDeltaFontSize + PlotDescription + DepthType + DepthUnit + MinimumDepth + MaximumDepth + ShowDepthGridLines + AutoScaleDepthEnabled + SubTitleFontSize + AxisTitleFontSize + AxisValueFontSize + NameConfig + FilterEnsembleCurveSet + DepthEqualization + Tracks + DepthOrientation + StimPlanModel + EditModel + EclipseCase + TimeStep + +StimPlanModelPlotCollection - class RimStimPlanModelPlotCollection + StimPlanModelPlots + +StimPlanModelTemplate - class RimStimPlanModelTemplate + Name + Id + DynamicEclipseCase + TimeStep + InitialPressureEclipseCase + UseForInitialPressure + UseForPressure + EditPressureTable + StaticEclipseCase + UseEqlNumForPressureInterpolation + DefaultPorosity + DefaultPermeability + VerticalStress + VerticalStressGradient + StressDepth + ReferenceTemperature + ReferenceTemperatureGradient + ReferenceTemperatureDepth + OverburdenHeight + OverburdenFormation + OverburdenFacies + OverburdenPorosity + OverburdenPermeability + OverburdenFluidDensity + UnderburdenHeight + UnderburdenFormation + UnderburdenFacies + UnderburdenPorosity + UnderburdenPermeability + UnderburdenFluidDensity + FaciesInitialPressureConfigs + PressureTable + ElasticProperties + FaciesProperties + NonNetLayers + +StimPlanModelTemplateCollection - class RimStimPlanModelTemplateCollection + StimPlanModelTemplates + NextValidId + +StreamlineInViewCollection - class RimStreamlineInViewCollection + LegendDefinition + Name + FlowThreshold + LengthThreshold + Resolution + MaxDays + UseProducers + UseInjectors + Phase + isActive + VisualizationMode + ColorMode + AnimationSpeed + AnimationIndex + ScaleFactor + TracerLength + +StringParameter - class RimStringParameter + Name + Label + Description + Advanced + Valid + Value + +SummaryAddress - class RimSummaryAddress + SummaryVarType + SummaryQuantityName + SummaryRegion + SummaryRegion2 + SummaryWellGroup + SummaryWell + SummaryWellSegment + SummaryLgr + SummaryCellI + SummaryCellJ + SummaryCellK + SummaryAquifer + IsErrorResult + CalculationId + CaseId + EnsembleId + +SummaryCaseCollection - class RimSummaryCaseMainCollection + SummaryCases + SummaryCaseCollections + +SummaryCaseSubCollection - class RimSummaryCaseCollection + SummaryCases + SummaryCollectionName + NameCount + IsEnsemble + Id + (A)EnsembleId + +SummaryCrossPlot - class RimSummaryCrossPlot + WindowController + ShowWindow + WindowGeometry + Id + (A)ViewId + ShowPlotTitle + ShowTrackLegends + TrackLegendsHorizontal + TitleFontSize + LegendDeltaFontSize + RowSpan + ColSpan + IsUsingAutoName + PlotDescription + normalizeCurveYValues + useQtChartsPlot + SummaryCurveCollection + EnsembleCurveSetCollection + GridTimeHistoryCurves + AsciiDataCurves + AxisProperties + SummaryPlotFilterTextCurveSetEditor + LeftYAxisProperties + RightYAxisProperties + BottomAxisProperties + TimeAxisProperties + +SummaryCrossPlotCollection - class RimSummaryCrossPlotCollection + SummaryCrossPlots + +SummaryCurve - class RimSummaryCurve + Show + CurveName + CurveDescription + LegendDescription + AutoName + ShowLegend + ShowErrorBars + Color + FillColor + Thickness + CurveInterpolation + LineStyle + FillStyle + PointSymbol + SymbolEdgeColor + SymbolSkipPxDist + SymbolLabel + SymbolSize + SymbolLabelPosition + PlotCurveAppearance + StackCurve + StackPhaseColors + SummaryCase + SummaryAddress + Resampling + SummaryCaseX + SummaryAddressX + IsEnsembleCurve + PlotAxis + Axis + SummaryCurveNameConfig + isTopZWithinCategory + +SummaryCurveAutoName - class RimSummaryCurveAutoName + LongVectorName + VectorName + Unit + RegionNumber + WellGroupName + WellName + WellSegmentNumber + LgrName + Completion + Aquifer + CaseName + +SummaryObservedDataFile - class RimSummaryObservedDataFile + ShortName + NameSetting + ShowSubNodesInTree + AutoShortyName + SummaryHeaderFilename + Id + (A)CaseId + UseCustomIdentifier + SummaryType + IdentifierName + +SummaryPageDownloadEntity - class SummaryPageDownloadEntity + Name + RequestUrl + ResponseFilename + +SummaryPlot - class RimSummaryPlot + WindowController + ShowWindow + WindowGeometry + Id + (A)ViewId + ShowPlotTitle + ShowTrackLegends + TrackLegendsHorizontal + TitleFontSize + LegendDeltaFontSize + RowSpan + ColSpan + IsUsingAutoName + PlotDescription + normalizeCurveYValues + useQtChartsPlot + SummaryCurveCollection + EnsembleCurveSetCollection + GridTimeHistoryCurves + AsciiDataCurves + AxisProperties + SummaryPlotFilterTextCurveSetEditor + LeftYAxisProperties + RightYAxisProperties + BottomAxisProperties + TimeAxisProperties + +SummaryPlotCollection - class RimSummaryPlotCollection + SummaryPlots + +SummaryPlotFilterTextCurveSetEditor - class RimSummaryPlotFilterTextCurveSetEditor + CurveFilterText + SummaryCases + +SummaryTimeAxisProperties - class RimSummaryTimeAxisProperties + IsAppearanceOverridden + Active + ShowTitle + Title + AutoZoom + TimeMode + TimeUnit + VisibleDateRangeMax + VisibleDateRangeMin + VisibleTimeRangeMax + VisibleTimeRangeMin + VisibleTimeModeRangeMax + VisibleTimeModeRangeMin + TitlePosition + FontSize + ValuesFontSize + AutoDate + DateComponents + TimeComponents + DateFormat + TimeFormat + MajorTickmarkCount + Annotations + +SummaryYAxisProperties - class RimPlotAxisProperties + IsAppearanceOverridden + Active + IsMinMaxOverridden + Name + AxisTitle + AutoTitle + DisplayLongName + DisplayShortName + DisplayUnitText + CustomTitle + VisibleRangeMax + VisibleRangeMin + NumberFormat + Decimals + ScaleFactor + AutoZoom + LogarithmicScale + AxisInverted + ShowNumbers + PlotAxis + PlotAxisIndex + TitlePosition + TitleDeltaFontSize + ValueDeltaFontSize + Annotations + MajorTickmarkCount + +Surface - class RimFileSurface + SurfaceUserDecription + SurfaceColor + DepthOffset + SurfaceFilePath + +SurfaceCollection - class RimSurfaceCollection + SurfaceUserDecription + SubCollections + SurfacesField + +SurfaceInView - class RimSurfaceInView + Active + ShowInactiveCells + UseSeparateIntersectionDataSource + SeparateIntersectionDataSource + Name + SurfaceRef + ResultDefinition + +SurfaceInViewCollection - class RimSurfaceInViewCollection + Name + IsChecked + SurfacesInViewFieldCollections + SurfacesInViewField + SurfaceCollectionRef + +SurfaceResultDefinition - class RimSurfaceResultDefinition + Name + IsChecked + PropertyName + LegendConfig + SurfaceInView + +TC2 - class TC2 + ta + da + ia + ba + +TestCommand1 - class TestCommand1 + TextArgument + DoubleArgument + IntArgument + BoolArgument + +TofAccumulatedPhaseFractionsPlot - class RimTofAccumulatedPhaseFractionsPlot + WindowController + ShowWindow + WindowGeometry + PlotDescription + ShowPlotTitle + MaxTof + +TotalWellAllocationPlot - class RimTotalWellAllocationPlot + WindowController + ShowWindow + WindowGeometry + PlotDescription + ShowPlotTitle + +TriangleGeometry - class RimcTriangleGeometry + XCoords + YCoords + ZCoords + Connections + MeshXCoords + MeshYCoords + MeshZCoords + FaultMeshXCoords + FaultMeshYCoords + FaultMeshZCoords + DisplayModelOffset + +UserDefinedFilter - class RimUserDefinedFilter + UserDescription + Active + FilterType + GridIndex + PropagateToSubGrids + IndividualCellIndices + +UserDefinedPolylinesAnnotation - class RimUserDefinedPolylinesAnnotation + IsActive + ClosePolyline + ShowLines + ShowSpheres + Appearance + Name + Targets + +ValveTemplate - class RimValveTemplate + Name + UnitSystem + CompletionType + UserLabel + OrificeDiameter + FlowCoefficient + AICDParameters + +ValveTemplateCollection - class RimValveTemplateCollection + ValveDefinitions + ValveUnits + +VfpPlot - class RimVfpPlot + WindowController + ShowWindow + WindowGeometry + Id + (A)ViewId + ShowPlotTitle + ShowTrackLegends + TrackLegendsHorizontal + TitleFontSize + LegendDeltaFontSize + RowSpan + ColSpan + PlotTitle + FilePath + TableType + TableNumber + ReferenceDepth + FlowingPhase + FlowingWaterFraction + FlowingGasFraction + InterpolatedVariable + PrimaryVariable + FamilyVariable + LiquidFlowRateIdx + THPIdx + ArtificialLiftQuantityIdx + WaterCutIdx + GasLiquidRatioIdx + +View3dOverlayInfoConfig - class Rim3dOverlayInfoConfig + Active + ShowAnimProgress + ShowInfoText + ShowResultInfo + ShowHistogram + ShowVolumeWeightedMean + ShowVersionInfo + StatisticsTimeRange + StatisticsCellRange + +ViewController - class RimViewController + Active + Name + ManagedView + SyncCamera + ShowCursor + SyncTimeStep + SyncCellResult + SyncLegendDefinitions + SyncRangeFilters + SyncPropertyFilters + +ViewLinker - class RimViewLinker + Name + MainView + ManagedViews + +WbsParameters - class RimWbsParameters + PorePressureReservoirSource + PorePressureNonReservoirSource + UserPPNonReservoir + PoissionRatioSource + UcsSource + OBG0Source + DFSource + K0SHSource + FGShaleSource + K0FGSource + WaterDensitySource + UserPoissonRatio + UserUcs + UserDF + UserK0FG + UserK0SH + FGMultiplier + WaterDensity + GeoMechCase + WellPath + TimeStep + +Well - class RimSimWellInView + Name + (A)WellName + ShowWell + ShowWellLabel + ShowWellHead + ShowWellPipe + ShowWellSpheres + ShowWellDisks + WellHeadScaleFactor + WellPipeRadiusScale + WellPipeColor + WellDiskColor + ShowWellCells + ShowWellCellFence + FractureCollection + +WellAllocationPlot - class RimWellAllocationPlot + WindowController + ShowWindow + WindowGeometry + PlotDescription + ShowPlotTitle + BranchDetection + CurveCase + PlotTimeStep + WellName + FlowDiagSolution + FlowType + GroupSmallContributions + SmallContributionsThreshold + AccumulatedWellFlowPlot + TotalWellFlowPlot + WellAllocLegend + TofAccumulatedPhaseFractionsPlot + +WellAllocationPlotLegend - class RimWellAllocationPlotLegend + ShowPlotLegend + +WellBoreStabilityPlot - class RimWellBoreStabilityPlot + WindowController + ShowWindow + WindowGeometry + Id + (A)ViewId + ShowPlotTitle + ShowTrackLegends + TrackLegendsHorizontal + TitleFontSize + LegendDeltaFontSize + PlotDescription + DepthType + DepthUnit + MinimumDepth + MaximumDepth + ShowDepthGridLines + AutoScaleDepthEnabled + SubTitleFontSize + AxisTitleFontSize + AxisValueFontSize + NameConfig + FilterEnsembleCurveSet + DepthEqualization + Tracks + DepthOrientation + WbsParameters + +WellDistributionPlot - class RimWellDistributionPlot + WindowController + ShowWindow + WindowGeometry + Id + (A)ViewId + ShowPlotTitle + ShowTrackLegends + TrackLegendsHorizontal + TitleFontSize + LegendDeltaFontSize + RowSpan + ColSpan + Case + TimeStepIndex + WellName + Phase + GroupSmallContributions + SmallContributionsRelativeThreshold + MaximumTOF + +WellDistributionPlotCollection - class RimWellDistributionPlotCollection + WindowController + ShowWindow + WindowGeometry + Id + (A)ViewId + ShowPlotTitle + ShowTrackLegends + TrackLegendsHorizontal + TitleFontSize + LegendDeltaFontSize + Case + TimeStepIndex + WellName + GroupSmallContributions + SmallContributionsRelativeThreshold + MaximumTOF + Plots + ShowOil + ShowGas + ShowWater + PlotDescription + +WellFlowRateCurve - class RimWellFlowRateCurve + Show + CurveName + CurveDescription + LegendDescription + AutoName + ShowLegend + ShowErrorBars + Color + FillColor + Thickness + CurveInterpolation + LineStyle + FillStyle + PointSymbol + SymbolEdgeColor + SymbolSkipPxDist + SymbolLabel + SymbolSize + SymbolLabelPosition + PlotCurveAppearance + StackCurve + StackPhaseColors + +WellLogExtractionCurve - class RimWellLogExtractionCurve + Show + CurveName + CurveDescription + LegendDescription + AutoName + ShowLegend + ShowErrorBars + Color + FillColor + Thickness + CurveInterpolation + LineStyle + FillStyle + PointSymbol + SymbolEdgeColor + SymbolSkipPxDist + SymbolLabel + SymbolSize + SymbolLabelPosition + PlotCurveAppearance + StackCurve + StackPhaseColors + TrajectoryType + CurveWellPath + SimulationWellName + BranchDetection + Branch + CurveCase + CurveEclipseResult + CurveGeomechResult + CurveTimeStep + AddCaseNameToCurveName + AddPropertyToCurveName + AddWellNameToCurveName + AddTimestepToCurveName + AddDateToCurveName + +WellLogFile - class RimWellLogFile + WellName + Date + FileName + Name + WellLogFileChannels + WellFlowCondition + +WellLogFileChannel - class RimWellLogFileChannel + Name + +WellLogFileCurve - class RimWellLogFileCurve + Show + CurveName + CurveDescription + LegendDescription + AutoName + ShowLegend + ShowErrorBars + Color + FillColor + Thickness + CurveInterpolation + LineStyle + FillStyle + PointSymbol + SymbolEdgeColor + SymbolSkipPxDist + SymbolLabel + SymbolSize + SymbolLabelPosition + PlotCurveAppearance + StackCurve + StackPhaseColors + CurveWellPath + CurveWellLogChannel + WellLogFile + +WellLogPlot - class RimWellLogPlot + WindowController + ShowWindow + WindowGeometry + Id + (A)ViewId + ShowPlotTitle + ShowTrackLegends + TrackLegendsHorizontal + TitleFontSize + LegendDeltaFontSize + PlotDescription + DepthType + DepthUnit + MinimumDepth + MaximumDepth + ShowDepthGridLines + AutoScaleDepthEnabled + SubTitleFontSize + AxisTitleFontSize + AxisValueFontSize + NameConfig + FilterEnsembleCurveSet + DepthEqualization + Tracks + DepthOrientation + +WellLogPlotCollection - class RimWellLogPlotCollection + WellLogPlots + +WellLogPlotTrack - class RimWellLogTrack + WindowController + ShowWindow + WindowGeometry + Id + (A)ViewId + ShowPlotTitle + ShowTrackLegends + TrackLegendsHorizontal + TitleFontSize + LegendDeltaFontSize + RowSpan + ColSpan + TrackDescription + Curves + VisibleXRangeMin + VisibleXRangeMax + AutoScaleX + LogarithmicScaleX + InvertPropertyValueAxis + ShowXGridLines + ExplicitTickIntervals + MinAndMaxTicksOnly + MajorTickIntervals + MinorTickIntervals + AxisFontSize + AnnotationType + RegionDisplay + ColorShadingLegend + ColorShadingTransparency + ShowFormationLabels + RegionLabelFontSize + FormationSource + FormationTrajectoryType + FormationWellPath + FormationWellPathForSourceWellPath + FormationSimulationWellName + FormationBranchIndex + FormationBranchDetection + FormationCase + FormationLevel + ShowFormationFluids + ShowWellPathAttributes + WellPathAttributesInLegend + ShowWellPathCompletions + WellPathCompletionsInLegend + ShowWellPathAttrBothSides + ShowWellPathAttrLabels + AttributesWellPathSource + AttributesCollection + OverburdenHeight + UnderburdenHeight + ResultDefinition + EnsembleWellLogCurveSet + +WellLogRftCurve - class RimWellLogRftCurve + Show + CurveName + CurveDescription + LegendDescription + AutoName + ShowLegend + ShowErrorBars + Color + FillColor + Thickness + CurveInterpolation + LineStyle + FillStyle + PointSymbol + SymbolEdgeColor + SymbolSkipPxDist + SymbolLabel + SymbolSize + SymbolLabelPosition + PlotCurveAppearance + StackCurve + StackPhaseColors + CurveEclipseResultCase + CurveSummaryCase + CurveEnsemble + ObservedFmuRftData + TimeStep + WellName + BranchIndex + BranchDetection + WellLogChannelName + RftDataType + SegmentResultName + SegmentBranchId + +WellMeasurement - class RimWellMeasurement + WellName + Depth + Date + Value + Kind + Quality + Remark + FilePath + +WellMeasurementCurve - class RimWellMeasurementCurve + Show + CurveName + CurveDescription + LegendDescription + AutoName + ShowLegend + ShowErrorBars + Color + FillColor + Thickness + CurveInterpolation + LineStyle + FillStyle + PointSymbol + SymbolEdgeColor + SymbolSkipPxDist + SymbolLabel + SymbolSize + SymbolLabelPosition + PlotCurveAppearance + StackCurve + StackPhaseColors + CurveWellPath + CurveMeasurementKind + +WellMeasurementFilePath - class RimWellMeasurementFilePath + UserDecription + FilePath + +WellMeasurementInView - class RimWellMeasurementInView + Name + IsChecked + MeasurementKind + LegendDefinition + WellsSerialized + AvailableWellsSerialized + LowerBound + UpperBound + QualityFilter + RadiusScaleFactor + +WellMeasurements - class RimWellMeasurementCollection + Measurements + ImportedFiles + +WellMeasurementsInView - class RimWellMeasurementInViewCollection + Name + IsChecked + MeasurementKinds + +WellPath - class RimFileWellPath + AirGap + DatumElevation + UnitSystem + SimWellName + SimBranchIndex + ShowWellPathLabel + ShowWellPath + WellPathRadiusScale + WellPathColor + Completions + CompletionSettings + WellLogFiles + CollectionOf3dWellLogCurves + WellPathFormationKeyInFile + WellPathFormationFilePath + WellPathAttributes + WellPathTieIn + WellIASettings + WellPathFilepath + WellPathFilePathInCache + WellPathNumberInFile + UseAutoGeneratedPointAtSeaLevel + +WellPathAicdParameters - class RimWellPathAicdParameters + DeviceOpen + StrengthAICD + DensityCalibrationFluid + ViscosityCalibrationFluid + VolumeFlowRateExponent + ViscosityFunctionExponent + CriticalWaterLiquidFractionEmul + ViscosityTransitionRegionEmul + MaxRatioOfEmulsionVisc + MaxFlowRate + ExponentOilDensity + ExponentWaterDensity + ExponentGasDensity + ExponentOilViscosity + ExponentWaterViscosity + ExponentGasViscosity + +WellPathAttribute - class RimWellPathAttribute + CompletionType + DepthStart + DepthEnd + DiameterInInches + +WellPathAttributes - class RimWellPathAttributeCollection + Name + IsChecked + Attributes + +WellPathBase - class RimWellPath + AirGap + DatumElevation + UnitSystem + SimWellName + SimBranchIndex + ShowWellPathLabel + ShowWellPath + WellPathRadiusScale + WellPathColor + Completions + CompletionSettings + WellLogFiles + CollectionOf3dWellLogCurves + WellPathFormationKeyInFile + WellPathFormationFilePath + WellPathAttributes + WellPathTieIn + WellIASettings + +WellPathCompletionSettings - class RimWellPathCompletionSettings + WellNameForExport + WellGroupNameForExport + ReferenceDepthForExport + WellTypeForExport + DrainageRadiusForPI + GasInflowEq + AutoWellShutIn + AllowWellCrossFlow + WellBoreFluidPVTTable + HydrostaticDensity + FluidInPlaceRegion + MswParameters + +WellPathCompletions - class RimWellPathCompletions + Perforations + Fishbones + Fractures + StimPlanModels + WellNameForExport + WellGroupNameForExport + ReferenceDepthForExport + WellTypeForExport + DrainageRadiusForPI + GasInflowEq + AutoWellShutIn + AllowWellCrossFlow + WellBoreFluidPVTTable + HydrostaticDensity + FluidInPlaceRegion + +WellPathFracture - class RimWellPathFracture + Name + IsChecked + FractureDef + EditTemplate + CreateEllipseTemplate + CreateStimPlanTemplate + AutoUpdateWellPathDepthAtFractureFromTemplate + WellPathDepthAtFracture + Azimuth + PerforationLength + PerforationEfficiency + WellDiameter + Dip + Tilt + FractureUnit + TimeIndexToPlot + MeasuredDepth + +WellPathFractureCollection - class RimWellPathFractureCollection + Name + IsChecked + Fractures + +WellPathGeometry - class RimWellPathGeometryDef + ReferencePosUtmXyd + AirGap + MdAtFirstTarget + WellPathTargets + ShowAbsolutePosForWellTargets + UseTopLevelWellReferencePoint + UseAutoGeneratedTargetAtSeaLevel + LinkReferencePointUpdates + AutoGeneratedTarget + AttachedToParentWell + FixedWellPathPoints + FixedMeasuredDepths + ShowSpheres + SphereColor + SphereRadiusFactor + +WellPathGeometryDef - class RimWellPathGeometryDef + ReferencePosUtmXyd + AirGap + MdAtFirstTarget + WellPathTargets + ShowAbsolutePosForWellTargets + UseTopLevelWellReferencePoint + UseAutoGeneratedTargetAtSeaLevel + LinkReferencePointUpdates + AutoGeneratedTarget + AttachedToParentWell + FixedWellPathPoints + FixedMeasuredDepths + ShowSpheres + SphereColor + SphereRadiusFactor + +WellPathGroup - class RimWellPathGroup + AirGap + DatumElevation + UnitSystem + SimWellName + SimBranchIndex + ShowWellPathLabel + ShowWellPath + WellPathRadiusScale + WellPathColor + Completions + CompletionSettings + WellLogFiles + CollectionOf3dWellLogCurves + WellPathFormationKeyInFile + WellPathFormationFilePath + WellPathAttributes + WellPathTieIn + WellIASettings + ChildWellPaths + GroupName + AddValveAtConnection + Valve + +WellPathTarget - class RimWellPathTarget + IsEnabled + TargetPoint + TargetPointForDisplay + TargetMeasuredDepth + Dogleg1 + Dogleg2 + UseFixedAzimuth + Azimuth + UseFixedInclination + Inclination + EstimatedDogleg1 + EstimatedDogleg2 + EstimatedAzimuth + EstimatedInclination + TargetType + HasTangentConstraint + +WellPathValve - class RimWellPathValve + Name + IsChecked + ValveTemplate + StartMeasuredDepth + ValveLocations + EditTemplate + CreateTemplate + +WellPaths - class RimWellPathCollection + Active + ShowWellPathLabel + WellPathLabelColor + GlobalWellPathVisibility + WellPathRadiusScale + WellPathClip + WellPathClipZDistance + WellPaths + WellMeasurements + +WellPltPlot - class RimWellPltPlot + WindowController + ShowWindow + WindowGeometry + Id + (A)ViewId + ShowPlotTitle + ShowTrackLegends + TrackLegendsHorizontal + TitleFontSize + LegendDeltaFontSize + PlotDescription + DepthType + DepthUnit + MinimumDepth + MaximumDepth + ShowDepthGridLines + AutoScaleDepthEnabled + SubTitleFontSize + AxisTitleFontSize + AxisValueFontSize + NameConfig + FilterEnsembleCurveSet + DepthEqualization + Tracks + DepthOrientation + WellLog + WellName + Sources + TimeSteps + UseStandardConditionCurves + UseReservoirConditionCurves + Phases + +WellPltPlotCollection - class RimPltPlotCollection + PltPlots + +WellRftEnsembleCurveSet - class RimWellRftEnsembleCurveSet + Ensemble + ColorMode + EnsembleParameter + LegendConfig + +WellRftPlot - class RimWellRftPlot + WindowController + ShowWindow + WindowGeometry + Id + (A)ViewId + ShowPlotTitle + ShowTrackLegends + TrackLegendsHorizontal + TitleFontSize + LegendDeltaFontSize + PlotDescription + DepthType + DepthUnit + MinimumDepth + MaximumDepth + ShowDepthGridLines + AutoScaleDepthEnabled + SubTitleFontSize + AxisTitleFontSize + AxisValueFontSize + NameConfig + FilterEnsembleCurveSet + DepthEqualization + Tracks + DepthOrientation + ShowStatisticsCurves + ShowEnsembleCurves + ShowErrorObserved + WellLog + WellName + BranchIndex + BranchDetection + EnsembleCurveSets + +WellRftPlotCollection - class RimRftPlotCollection + RftPlots + +Wells - class RimSimWellInViewCollection + Active + ShowWellsIntersectingVisibleCells + WellHeadScale + WellPipeRadiusScale + CellCenterSphereScale + WellLabelColor + ShowConnectionStatusColors + WellColorForApply + WellPipeColors + WellPipeVertexCount + WellPipeCoordType + DefaultWellFenceDirection + WellCellTransparency + IsAutoDetectingBranches + WellHeadPosition + Wells + WellDiskSummaryCase + WellDiskQuantity + WellDiskPropertyType + WellDiskPropertyConfigType + WellDiskShowQuantityLabels + WellDiskShowLabelsBackground + WellDiskScaleFactor + WellDiskColor + ShowWellCommunicationLines + +cafNamedTreeNode - class cafNamedTreeNode + ChildNodes + Name + IsChecked + +cafObjectReferenceTreeNode - class cafObjectReferenceTreeNode + ChildNodes + ReferencedObject + +cafTreeNode - class cafTreeNode + ChildNodes + +cloneView - class RicfCloneView + viewId + +closeProject - class RicfCloseProject + +computeCaseGroupStatistics - class RicfComputeCaseGroupStatistics + caseGroupId + caseIds + +createGridCaseGroup - class RicfCreateGridCaseGroup + casePaths + +createGridCaseGroupResult - class RicfCreateGridCaseGroupResult + groupId + groupName + +createLgrForCompletions - class RicfCreateLgrForCompletions + caseId + timeStep + wellPathNames + refinementI + refinementJ + refinementK + splitType + +createMultiPlot - class RicNewMultiPlotFeature + plots + +createMultipleFractures - class RicfCreateMultipleFractures + caseId + wellPathNames + minDistFromWellTd + maxFracturesPerWell + templateId + topLayer + baseLayer + spacing + action + +createSaturationPressurePlots - class RicfCreateSaturationPressurePlots + caseIds + +createStatisticsCase - class RicfCreateStatisticsCase + caseGroupId + +createStatisticsCaseResult - class RicfCreateStatisticsCaseResult + caseId + +createView - class RicfCreateView + caseId + +createViewResult - class RicfCreateViewResult + viewId + +createWbsPlotResult - class RicfCreateWbsPlotResult + viewId + +createWellBoreStabilityPlot - class RicfCreateWellBoreStabilityPlotFeature + caseId + wellPath + timeStep + wbsParameters + +exportContourMapToText - class RicExportContourMapToTextFeature + exportFileName + exportLocalCoordinates + undefinedValueLabel + excludeUndefinedValues + viewId + +exportFlowCharacteristics - class RicfExportFlowCharacteristics + caseId + timeSteps + injectors + producers + fileName + minimumCommunication + aquiferCellThreshold + +exportLgrForCompletions - class RicfExportLgrForCompletions + caseId + timeStep + wellPathNames + refinementI + refinementJ + refinementK + splitType + +exportMsw - class RicfExportMsw + caseId + wellPath + includePerforations + includeFishbones + includeFractures + fileSplit + +exportMultiCaseSnapshots - class RicfExportMultiCaseSnapshots + gridListFile + +exportProperty - class RicfExportProperty + caseId + timeStep + property + eclipseKeyword + undefinedValue + exportFile + +exportPropertyInViews - class RicfExportPropertyInViews + caseId + viewIds + viewNames + undefinedValue + +exportSimWellFractureCompletions - class RicfExportSimWellFractureCompletions + caseId + viewId + viewName + timeStep + simulationWellNames + fileSplit + compdatExport + +exportSnapshots - class RicfExportSnapshots + type + prefix + caseId + viewId + exportFolder + plotOutputFormat + +exportVisibleCells - class RicfExportVisibleCells + caseId + viewId + viewName + exportKeyword + visibleActiveCellsValue + hiddenActiveCellsValue + inactiveCellsValue + +exportWellLogPlotData - class RicfExportWellLogPlotData + exportFormat + viewId + exportFolder + filePrefix + exportTvdRkb + capitalizeFileNames + resampleInterval + convertCurveUnits + +exportWellLogPlotDataResult - class RicfExportWellLogPlotDataResult + exportedFiles + +exportWellPathCompletions - class RicfExportWellPathCompletions + caseId + timeStep + wellPathNames + fileSplit + compdatExport + combinationMode + includeMsw + useNtgHorizontally + includePerforations + includeFishbones + includeFractures + excludeMainBoreForFishbones + performTransScaling + transScalingTimeStep + transScalingWBHPFromSummary + transScalingWBHP + exportComments + exportWelspec + customFileName + +exportWellPaths - class RicfExportWellPaths + wellPathNames + mdStepSize + +importFormationNames - class RicfImportFormationNames + formationFiles + applyToCaseId + +importWellLogFiles - class RicfImportWellLogFiles + wellLogFolder + wellLogFiles + +importWellLogFilesResult - class RicfImportWellLogFilesResult + wellPathNames + +importWellPaths - class RicImportWellPaths + wellPathFolder + wellPathFiles + importGrouped + +importWellPathsResult - class RicImportWellPathsResult + wellPathNames + +loadCase - class RicfLoadCase + path + gridOnly + +loadCaseResult - class RicfLoadCaseResult + id + +openProject - class RicfOpenProject + path + +replaceCase - class RicfSingleCaseReplace + caseId + newGridFile + +replaceMultipleCases - class RicfMultiCaseReplace + +replaceSourceCases - class RicfReplaceSourceCases + caseGroupId + gridListFile + +runOctaveScript - class RicfRunOctaveScript + path + caseIds + +saveProject - class RicSaveProjectFeature + filePath + +saveProjectAs - class RicSaveProjectAsFeature + filePath + +scaleFractureTemplate - class RicfScaleFractureTemplate + id + halfLength + height + dFactor + conductivity + width + +setExportFolder - class RicfSetExportFolder + type + path + createFolder + +setFractureContainment - class RicfSetFractureContainment + id + topLayer + baseLayer + +setMainWindowSize - class RicfSetMainWindowSize + height + width + +setPlotWindowSize - class RicfSetPlotWindowSize + height + width + +setStartDir - class RicfSetStartDir + path + +setTimeStep - class RicfSetTimeStep + caseId + viewId + timeStep + +stackCurves - class RicStackSelectedCurvesFeature + curves + +unstackCurves - class RicUnstackSelectedCurvesFeature + curves + diff --git a/ApplicationLibCode/Adm/projectfilekeywords/2022.06/ri-objectKeywords.txt b/ApplicationLibCode/Adm/projectfilekeywords/2022.06/ri-objectKeywords.txt new file mode 100644 index 0000000000..06e2582d65 --- /dev/null +++ b/ApplicationLibCode/Adm/projectfilekeywords/2022.06/ri-objectKeywords.txt @@ -0,0 +1,434 @@ +// ResInsight version string : 2022.06.1-dev.01 +// Report generated : fre. jul 1 15:27:03 2022 +// +// + +AnalysisPlot +AnalysisPlotCollection +AnalysisPlotDataEntry +Annotations +AsciiDataCurve +CalcScript +CalculatedSummaryCase +CellEdgeResultSlot +CellFilterCollection +CellPropertyFilter +CellPropertyFilters +CellRangeFilter +CellRangeFilterCollection +ChangeDataSourceFeatureUi +CmdSelectionChangeExecData +ColorLegend +ColorLegendCollection +ColorLegendItem +CompletionTemplateCollection +CorrelationMatrixPlot +CorrelationPlot +CorrelationPlotCollection +CorrelationReportPlot +CrossSection +CrossSectionCollection +CurveIntersection +DataContainerFloat +DataContainerString +DataContainerTime +DepthTrackPlot +DoubleParameter +Eclipse2dViewCollection +EclipseCase +EclipseGeometrySelectionItem +EclipseResultAddress +ElasticProperties +ElasticPropertyScaling +ElasticPropertyScalingCollection +EnsembleFractureStatistics +EnsembleFractureStatisticsPlot +EnsembleFractureStatisticsPlotCollection +EnsembleStatisticsSurface +EnsembleSurface +EnsembleWellLogStatisticsCurve +EnsembleWellLogs +EnsembleWellLogsCollection +FaciesInitialPressureConfig +FaciesProperties +Fault +Faults +FileSummaryCase +FileSurface +FishbonesCollection +FishbonesMultipleSubs +FishbonesPipeProperties +FlowCharacteristicsPlot +FlowDiagSolution +FlowPlotCollection +FormationNames +FormationNamesCollectionObject +FractureContainment +FractureDefinitionCollection +FractureGroupStatisticsCollection +FractureTemplateCollection +GeoMech2dViewCollection +GeoMechGeometrySelectionItem +GeoMechPart +GeoMechPartCollection +GeoMechPropertyFilter +GeoMechPropertyFilters +GeoMechResultDefinition +GeoMechResultSlot +GeoMechView +GridCaseSurface +GridCollection +GridCrossPlotCurve +GridCrossPlotCurveSet +GridInfo +GridInfoCollection +GridStatisticsPlot +GridStatisticsPlotCollection +GridSummaryCase +GridTimeHistoryCurve +IntegerParameter +Intersection2dView +Intersection2dViewCollection +IntersectionBox +IntersectionCollection +IntersectionResultDefinition +Legend +ListParameter +MainPlotCollection +MdiWindowController +MockModelSettings +ModeledWellPath +MultiPlot +MultiSnapshotDefinition +MultiSummaryPlot +NonNetLayers +ObservedDataCollection +ObservedFmuRftData +ParameterGroup +ParameterList +ParameterResultCrossPlot +PdmDocument +PdmObjectCollection +PdmObjectGroup +Perforation +PerforationCollection +PlotDataFilterCollection +PlotDataFilterItem +PlotTemplateCollection +PlotTemplateFileItem +PolyLineFilter +PolygonFilter +PolylineTarget +PolylinesFromFileAnnotation +PressureTable +PressureTableItem +PropertyFilter +ResInsightAnalysisModels +ResInsightGeoMechCase +ResInsightGeoMechModels +ResInsightOilField +ResInsightProject +ResampleData +ReservoirCellResultStorage +ReservoirView +ResultDefinition +ResultSlot +ResultStorageEntryInfo +RftAddress +RiaMemoryCleanup +RiaPreferences +RiaPreferencesGeoMech +RiaPreferencesSummary +RiaPreferencesSystem +RiaRegressionTest +RicCaseAndFileExportSettingsUi +RicCellRangeUi +RicCreateEnsembleSurfaceUi +RicCreateEnsembleWellLogUi +RicCreateMultipleWellPathLateralsUi +RicDeleteItemExecData +RicExportCarfinUi +RicExportCompletionDataSettingsUi +RicExportContourMapToTextUi +RicExportEclipseInputGridUi +RicExportLgrUi +RicExportToLasFileObj +RicExportToLasFileResampleUi +RicExportWellPathsUi +RicGridCalculator +RicHoloLensCreateSessionUi +RicHoloLensExportToFolderUi +RicHoloLensServerSettings +RicLinkVisibleViewsFeatureUi +RicPasteAsciiDataToSummaryPlotFeatureUi +RicSaturationPressureUi +RicSaveEclipseInputVisibleCellsUi +RicSaveMultiPlotTemplateFeatureSettings +RicSelectCaseOrEnsembleUi +RicSelectPlotTemplateUi +RicSelectSummaryPlotUI +RicSelectViewUI +RicSummaryAddressSelection +RicSummaryCurveCalculator +RicSummaryCurveCreator +RicWellPathsUnitSystemSettingsUi +RifReaderSettings +Rim3dWellLogCurveCollection +Rim3dWellLogExtractionCurve +Rim3dWellLogFileCurve +Rim3dWellLogRftCurve +RimAnnotationCollection +RimAnnotationCollectionBase +RimAnnotationGroupCollection +RimAnnotationLineAppearance +RimAnnotationTextAppearance +RimBinaryExportSettings +RimCaseCollection +RimCellFilterCollection +RimCommandExecuteScript +RimCommandIssueFieldChanged +RimCommandObject +RimCommandRouter +RimContourMapView +RimCsvUserData +RimCustomObjectiveFunction +RimCustomObjectiveFunctionCollection +RimCustomObjectiveFunctionWeight +RimDerivedEnsembleCase +RimDerivedEnsembleCaseCollection +RimDialogData +RimEclipseContourMapProjection +RimEclipseResultAddressCollection +RimElementVectorResult +RimEllipseFractureTemplate +RimEnsembleCurveFilter +RimEnsembleCurveFilterCollection +RimEnsembleCurveSet +RimEnsembleCurveSetCollection +RimEnsembleStatistics +RimEnsembleWellLogCurveSet +RimEquilibriumAxisAnnotation +RimExportInputSettings +RimFaultRAPreprocSettings +RimFaultRASettings +RimFaultResultSlot +RimFractureExportSettings +RimGeoMechContourMapProjection +RimGeoMechContourMapView +RimGridCalculation +RimGridCalculationCollection +RimGridCalculationVariable +RimGridCrossPlot +RimGridCrossPlotCollection +RimGridCrossPlotCurveSetNameConfig +RimGridCrossPlotNameConfig +RimIdenticalGridCaseGroup +RimInputProperty +RimInputPropertyCollection +RimInputReservoir +RimIntersectionResultsDefinitionCollection +RimMeasurement +RimMswCompletionParameters +RimMudWeightWindowParameters +RimMultiPlotCollection +RimMultipleLocations +RimMultipleValveLocations +RimNonDarcyPerforationParameters +RimObjectiveFunction +RimObservedEclipseUserData +RimOilFieldEntry +RimOilRegionEntry +RimPlotAxisAnnotation +RimPlotCellFilterCollection +RimPlotCellPropertyFilter +RimPolylineAppearance +RimPolylinesAnnotationInView +RimPolylinesFromFileAnnotationInView +RimProcess +RimReachCircleAnnotation +RimReachCircleAnnotationInView +RimSaturationPressurePlot +RimSaturationPressurePlotCollection +RimStatisticalCalculation +RimStatisticalCollection +RimStimPlanColors +RimStimPlanFractureTemplate +RimStimPlanLegendConfig +RimSummaryAddressCollection +RimSummaryCalculation +RimSummaryCalculationCollection +RimSummaryCalculationVariable +RimSummaryCurveCollection +RimSummaryCurveCollectionModifier +RimSummaryMultiPlotCollection +RimSummaryPlotManager +RimSurfaceIntersectionBand +RimSurfaceIntersectionCollection +RimSurfaceIntersectionCurve +RimTensorResults +RimTernaryLegendConfig +RimTextAnnotation +RimTextAnnotationInView +RimTimeAxisAnnotation +RimTimeStepFilter +RimUserDefinedPolylinesAnnotationInView +RimVfpPlotCollection +RimViewLinkerCollection +RimViewNameConfig +RimVirtualPerforationResults +RimWellIASettings +RimWellIASettingsCollection +RimWellLogExtractionCurve +RimWellLogExtractionCurveNameConfig +RimWellLogFileCurveNameConfig +RimWellLogPlotNameConfig +RimWellLogRftCurveNameConfig +RimWellLogWbsCurve +RimWellPathEntry +RimWellPathImport +RimWellPathTieIn +RiuCreateMultipleFractionsUi +RiuMultipleFractionsOptions +ScriptLocation +SimWellFracture +SimWellFractureCollection +StimPlanFractureTemplate +StimPlanModel +StimPlanModelCollection +StimPlanModelCurve +StimPlanModelPlot +StimPlanModelPlotCollection +StimPlanModelTemplate +StimPlanModelTemplateCollection +StreamlineInViewCollection +StringParameter +SummaryAddress +SummaryCaseCollection +SummaryCaseSubCollection +SummaryCrossPlot +SummaryCrossPlotCollection +SummaryCurve +SummaryCurveAutoName +SummaryObservedDataFile +SummaryPageDownloadEntity +SummaryPlot +SummaryPlotCollection +SummaryPlotFilterTextCurveSetEditor +SummaryTimeAxisProperties +SummaryYAxisProperties +Surface +SurfaceCollection +SurfaceInView +SurfaceInViewCollection +SurfaceResultDefinition +TC2 +TestCommand1 +TofAccumulatedPhaseFractionsPlot +TotalWellAllocationPlot +TriangleGeometry +UserDefinedFilter +UserDefinedPolylinesAnnotation +ValveTemplate +ValveTemplateCollection +VfpPlot +View3dOverlayInfoConfig +ViewController +ViewLinker +WbsParameters +Well +WellAllocationPlot +WellAllocationPlotLegend +WellBoreStabilityPlot +WellDistributionPlot +WellDistributionPlotCollection +WellFlowRateCurve +WellLogExtractionCurve +WellLogFile +WellLogFileChannel +WellLogFileCurve +WellLogPlot +WellLogPlotCollection +WellLogPlotTrack +WellLogRftCurve +WellMeasurement +WellMeasurementCurve +WellMeasurementFilePath +WellMeasurementInView +WellMeasurements +WellMeasurementsInView +WellPath +WellPathAicdParameters +WellPathAttribute +WellPathAttributes +WellPathBase +WellPathCompletionSettings +WellPathCompletions +WellPathFracture +WellPathFractureCollection +WellPathGeometry +WellPathGeometryDef +WellPathGroup +WellPathTarget +WellPathValve +WellPaths +WellPltPlot +WellPltPlotCollection +WellRftEnsembleCurveSet +WellRftPlot +WellRftPlotCollection +Wells +cafNamedTreeNode +cafObjectReferenceTreeNode +cafTreeNode +cloneView +closeProject +computeCaseGroupStatistics +createGridCaseGroup +createGridCaseGroupResult +createLgrForCompletions +createMultiPlot +createMultipleFractures +createSaturationPressurePlots +createStatisticsCase +createStatisticsCaseResult +createView +createViewResult +createWbsPlotResult +createWellBoreStabilityPlot +exportContourMapToText +exportFlowCharacteristics +exportLgrForCompletions +exportMsw +exportMultiCaseSnapshots +exportProperty +exportPropertyInViews +exportSimWellFractureCompletions +exportSnapshots +exportVisibleCells +exportWellLogPlotData +exportWellLogPlotDataResult +exportWellPathCompletions +exportWellPaths +importFormationNames +importWellLogFiles +importWellLogFilesResult +importWellPaths +importWellPathsResult +loadCase +loadCaseResult +openProject +replaceCase +replaceMultipleCases +replaceSourceCases +runOctaveScript +saveProject +saveProjectAs +scaleFractureTemplate +setExportFolder +setFractureContainment +setMainWindowSize +setPlotWindowSize +setStartDir +setTimeStep +stackCurves +unstackCurves From 1a4d29f4ba5f1051e2a358bfbeb4495f11b10032 Mon Sep 17 00:00:00 2001 From: jonjenssen <69144954+jonjenssen@users.noreply.github.com> Date: Mon, 4 Jul 2022 15:48:52 +0200 Subject: [PATCH 003/129] Allow using scale values less than 1.0 (#9108) * Change view scale into list of predefined double values in both toolbar and property editor. Add values less than 1.0 --- ApplicationLibCode/Application/RiaDefines.cpp | 8 +++ ApplicationLibCode/Application/RiaDefines.h | 2 + .../Application/RiaGuiApplication.cpp | 7 ++- .../ProjectDataModel/Rim3dView.cpp | 56 ++++++++++++------- .../ProjectDataModel/Rim3dView.h | 18 +++--- .../ProjectDataModel/RimGridView.cpp | 6 +- .../UserInterface/RiuMainWindow.cpp | 24 +++++--- .../UserInterface/RiuMainWindow.h | 4 +- 8 files changed, 83 insertions(+), 42 deletions(-) diff --git a/ApplicationLibCode/Application/RiaDefines.cpp b/ApplicationLibCode/Application/RiaDefines.cpp index d9bb911053..d61157c3ee 100644 --- a/ApplicationLibCode/Application/RiaDefines.cpp +++ b/ApplicationLibCode/Application/RiaDefines.cpp @@ -345,3 +345,11 @@ QString RiaDefines::stringListSeparator() { return "|"; } + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::vector RiaDefines::viewScaleOptions() +{ + return { 0.05, 0.1, 0.2, 0.5, 1.0, 2.0, 3.0, 4.0, 5.0, 10.0, 15.0, 20.0 }; +} diff --git a/ApplicationLibCode/Application/RiaDefines.h b/ApplicationLibCode/Application/RiaDefines.h index e52b34965a..cc24d2d896 100644 --- a/ApplicationLibCode/Application/RiaDefines.h +++ b/ApplicationLibCode/Application/RiaDefines.h @@ -225,4 +225,6 @@ constexpr enum MultiPlotPageUpdateType operator&( const enum MultiPlotPageUpdate return ( enum MultiPlotPageUpdateType )( uint32_t( selfValue ) & uint32_t( inValue ) ); } +std::vector viewScaleOptions(); + }; // namespace RiaDefines diff --git a/ApplicationLibCode/Application/RiaGuiApplication.cpp b/ApplicationLibCode/Application/RiaGuiApplication.cpp index c492c4d4d3..86d1d0f1a7 100644 --- a/ApplicationLibCode/Application/RiaGuiApplication.cpp +++ b/ApplicationLibCode/Application/RiaGuiApplication.cpp @@ -1476,10 +1476,11 @@ void RiaGuiApplication::applyGuiPreferences( const RiaPreferences* rim3dView->applyBackgroundColorAndFontChanges(); } - if ( oldPreferences && ( applySettingsToAllViews || - rim3dView->scaleZ == static_cast( oldPreferences->defaultScaleFactorZ() ) ) ) + if ( oldPreferences && + ( applySettingsToAllViews || + rim3dView->scaleZ() == static_cast( oldPreferences->defaultScaleFactorZ() ) ) ) { - rim3dView->scaleZ = static_cast( m_preferences->defaultScaleFactorZ() ); + rim3dView->setScaleZ( static_cast( m_preferences->defaultScaleFactorZ() ) ); rim3dView->updateScaling(); if ( rim3dView == activeViewWindow() ) { diff --git a/ApplicationLibCode/ProjectDataModel/Rim3dView.cpp b/ApplicationLibCode/ProjectDataModel/Rim3dView.cpp index f27b3361fd..7379a6ced6 100644 --- a/ApplicationLibCode/ProjectDataModel/Rim3dView.cpp +++ b/ApplicationLibCode/ProjectDataModel/Rim3dView.cpp @@ -57,6 +57,7 @@ #include "cafFrameAnimationControl.h" #include "cafPdmFieldScriptingCapability.h" #include "cafPdmFieldScriptingCapabilityCvfColor3.h" +#include "cafPdmUiComboBoxEditor.h" #include "cvfCamera.h" #include "cvfModelBasicList.h" @@ -115,13 +116,14 @@ Rim3dView::Rim3dView() CAF_PDM_InitScriptableField( &isPerspectiveView, "PerspectiveProjection", true, "Perspective Projection" ); double defaultScaleFactor = preferences->defaultScaleFactorZ(); - CAF_PDM_InitScriptableField( &scaleZ, + CAF_PDM_InitScriptableField( &m_scaleZ, "GridZScale", defaultScaleFactor, "Z Scale", "", "Scales the scene in the Z direction", "" ); + m_scaleZ.uiCapability()->setUiEditorTypeName( caf::PdmUiComboBoxEditor::uiEditorTypeName() ); cvf::Color3f defBackgColor = preferences->defaultViewerBackgroundColor(); CAF_PDM_InitScriptableField( &m_backgroundColor, "BackgroundColor", defBackgColor, "Background" ); @@ -411,8 +413,8 @@ void Rim3dView::defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOr viewGroup->add( &m_comparisonView ); caf::PdmUiGroup* gridGroup = uiOrdering.addNewGroup( "Grid Appearance" ); - gridGroup->add( &scaleZ ); - scaleZ.uiCapability()->setUiReadOnly( !this->isScaleZEditable() ); + gridGroup->add( &m_scaleZ ); + m_scaleZ.uiCapability()->setUiReadOnly( !this->isScaleZEditable() ); gridGroup->add( &meshMode ); gridGroup->add( &surfaceMode ); @@ -846,7 +848,7 @@ void Rim3dView::fieldChangedByUi( const caf::PdmFieldHandle* changedField, const { if ( m_viewer ) m_viewer->enableParallelProjection( !isPerspectiveView() ); } - else if ( changedField == &scaleZ ) + else if ( changedField == &m_scaleZ ) { updateScaling(); @@ -1081,7 +1083,7 @@ void Rim3dView::updateGridBoxData() } } - viewer()->updateGridBoxData( scaleZ(), + viewer()->updateGridBoxData( m_scaleZ(), ownerCase()->displayModelOffset(), backgroundColor(), combinedDomainBBox, @@ -1113,21 +1115,33 @@ void Rim3dView::resetLegends() //-------------------------------------------------------------------------------------------------- void Rim3dView::setScaleZAndUpdate( double scalingFactor ) { - if ( this->scaleZ != scalingFactor ) + if ( scaleZ() != scalingFactor ) { - this->scaleZ = scalingFactor; - - updateScaling(); + this->m_scaleZ.setValueWithFieldChanged( scalingFactor ); } } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void Rim3dView::setScaleZ( double scalingFactor ) +{ + m_scaleZ = scalingFactor; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +double Rim3dView::scaleZ() const +{ + return m_scaleZ(); +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void Rim3dView::updateScaling() { - if ( scaleZ < 1 ) scaleZ = 1; - if ( viewer() ) { cvf::Vec3d poi = viewer()->pointOfInterest(); @@ -1136,8 +1150,8 @@ void Rim3dView::updateScaling() dir = viewer()->mainCamera()->direction(); up = viewer()->mainCamera()->up(); - eye[2] = poi[2] * scaleZ() / this->scaleTransform()->worldTransform()( 2, 2 ) + ( eye[2] - poi[2] ); - poi[2] = poi[2] * scaleZ() / this->scaleTransform()->worldTransform()( 2, 2 ); + eye[2] = poi[2] * m_scaleZ() / this->scaleTransform()->worldTransform()( 2, 2 ) + ( eye[2] - poi[2] ); + poi[2] = poi[2] * m_scaleZ() / this->scaleTransform()->worldTransform()( 2, 2 ); viewer()->mainCamera()->setFromLookAt( eye, eye + dir, up ); viewer()->setPointOfInterest( poi ); @@ -1145,7 +1159,7 @@ void Rim3dView::updateScaling() if ( activeComparisonView() ) { - activeComparisonView()->setScaleZAndUpdate( scaleZ ); + activeComparisonView()->setScaleZAndUpdate( m_scaleZ ); } onUpdateScaleTransform(); @@ -1160,10 +1174,7 @@ void Rim3dView::updateScaling() //-------------------------------------------------------------------------------------------------- void Rim3dView::updateZScaleLabel() { - // Update Z scale label - int scale = static_cast( scaleZ() ); - - if ( viewer() ) viewer()->setZScale( scale ); + if ( viewer() ) viewer()->setZScale( m_scaleZ() ); } //-------------------------------------------------------------------------------------------------- @@ -1371,7 +1382,7 @@ cvf::ref Rim3dView::displayCoordTransform() const { cvf::ref coordTrans = new caf::DisplayCoordTransform; - cvf::Vec3d scale( 1.0, 1.0, scaleZ ); + cvf::Vec3d scale( 1.0, 1.0, m_scaleZ ); coordTrans->setScale( scale ); RimCase* rimCase = ownerCase(); @@ -1416,6 +1427,13 @@ QList Rim3dView::calculateValueOptions( const caf::PdmFi { options = caf::FontTools::relativeSizeValueOptions( RiaPreferences::current()->defaultSceneFontSize() ); } + else if ( fieldNeedingOptions == &m_scaleZ ) + { + for ( auto scale : RiaDefines::viewScaleOptions() ) + { + options.push_back( caf::PdmOptionItemInfo( QString::number( scale ), scale ) ); + } + } return options; } diff --git a/ApplicationLibCode/ProjectDataModel/Rim3dView.h b/ApplicationLibCode/ProjectDataModel/Rim3dView.h index 99c59c7d19..6955bca439 100644 --- a/ApplicationLibCode/ProjectDataModel/Rim3dView.h +++ b/ApplicationLibCode/ProjectDataModel/Rim3dView.h @@ -93,9 +93,8 @@ public: // Public fields: - caf::PdmField scaleZ; - caf::PdmField isPerspectiveView; - caf::PdmField maximumFrameRate; + caf::PdmField isPerspectiveView; + caf::PdmField maximumFrameRate; // Draw style @@ -168,10 +167,12 @@ public: void updateAnnotationItems(); void resetLegends(); - void setScaleZAndUpdate( double scaleZ ); - void updateScaling(); - void updateZScaleLabel(); - bool isScaleZEditable(); + void setScaleZ( double scaleZ ); + void setScaleZAndUpdate( double scaleZ ); + void updateScaling(); + void updateZScaleLabel(); + bool isScaleZEditable(); + double scaleZ() const; bool isMasterView() const; Rim3dView* activeComparisonView() const; @@ -253,6 +254,9 @@ protected: cvf::ref m_intersectionVizModel; cvf::ref m_wellPathsPartManager; + caf::PdmField m_scaleZ; + caf::PdmField m_customScaleZ; + private: friend class RimProject; diff --git a/ApplicationLibCode/ProjectDataModel/RimGridView.cpp b/ApplicationLibCode/ProjectDataModel/RimGridView.cpp index 3301ded5e8..8e6deb57eb 100644 --- a/ApplicationLibCode/ProjectDataModel/RimGridView.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimGridView.cpp @@ -466,19 +466,19 @@ void RimGridView::onClearReservoirCellVisibilitiesIfNecessary() //-------------------------------------------------------------------------------------------------- void RimGridView::fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) { - if ( changedField == &scaleZ ) + if ( changedField == &m_scaleZ ) { m_intersectionCollection->updateIntersectionBoxGeometry(); } Rim3dView::fieldChangedByUi( changedField, oldValue, newValue ); - if ( changedField == &scaleZ ) + if ( changedField == &m_scaleZ ) { RimViewLinker* viewLinker = this->assosiatedViewLinker(); if ( viewLinker ) { - viewLinker->updateScaleZ( this, scaleZ ); + viewLinker->updateScaleZ( this, scaleZ() ); viewLinker->updateCamera( this ); } } diff --git a/ApplicationLibCode/UserInterface/RiuMainWindow.cpp b/ApplicationLibCode/UserInterface/RiuMainWindow.cpp index a8b7d15f27..d5f071a79f 100644 --- a/ApplicationLibCode/UserInterface/RiuMainWindow.cpp +++ b/ApplicationLibCode/UserInterface/RiuMainWindow.cpp @@ -84,6 +84,7 @@ #include #include +#include #include #include #include @@ -665,10 +666,14 @@ void RiuMainWindow::createToolBars() scaleLabel->setText( "Scale" ); toolbar->addWidget( scaleLabel ); - m_scaleFactor = new QSpinBox( toolbar ); - m_scaleFactor->setValue( 0 ); + m_scaleFactor = new QComboBox( toolbar ); + QStringList scaleItems; + for ( auto d : RiaDefines::viewScaleOptions() ) + { + m_scaleFactor->addItem( QString::number( d ), QVariant( d ) ); + } toolbar->addWidget( m_scaleFactor ); - connect( m_scaleFactor, SIGNAL( valueChanged( int ) ), SLOT( slotScaleChanged( int ) ) ); + connect( m_scaleFactor, SIGNAL( currentIndexChanged( int ) ), SLOT( slotScaleChanged( int ) ) ); } { @@ -1867,11 +1872,13 @@ void RiuMainWindow::applyFontSizesToDockedPlots() //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RiuMainWindow::slotScaleChanged( int scaleValue ) +void RiuMainWindow::slotScaleChanged( int index ) { if ( RiaApplication::instance()->activeReservoirView() ) { - RiaApplication::instance()->activeReservoirView()->scaleZ.setValueWithFieldChanged( scaleValue ); + double scaleValue = m_scaleFactor->currentData().toDouble(); + + RiaApplication::instance()->activeReservoirView()->setScaleZAndUpdate( scaleValue ); } } @@ -1885,10 +1892,11 @@ void RiuMainWindow::updateScaleValue() if ( isRegularReservoirView && view->isScaleZEditable() ) { m_scaleFactor->setEnabled( true ); - - int scaleValue = static_cast( view->scaleZ() ); // Round down is probably ok. m_scaleFactor->blockSignals( true ); - m_scaleFactor->setValue( scaleValue ); + + int index = m_scaleFactor->findData( QVariant( view->scaleZ() ) ); + m_scaleFactor->setCurrentIndex( index ); + m_scaleFactor->blockSignals( false ); } else diff --git a/ApplicationLibCode/UserInterface/RiuMainWindow.h b/ApplicationLibCode/UserInterface/RiuMainWindow.h index fcf01b2b40..3b4ae0e2d2 100644 --- a/ApplicationLibCode/UserInterface/RiuMainWindow.h +++ b/ApplicationLibCode/UserInterface/RiuMainWindow.h @@ -35,7 +35,7 @@ class QActionGroup; class QMdiSubWindow; class QToolButton; -class QSpinBox; +class QComboBox; class QTimer; class QUndoView; @@ -255,7 +255,7 @@ private: caf::PdmObject* m_pdmRoot; caf::PdmUiPropertyView* m_pdmUiPropertyView; - QSpinBox* m_scaleFactor; + QComboBox* m_scaleFactor; QActionGroup* m_dsActionGroup; QAction* m_enableLightingAction; From 6d65554a7736e47911f6b5388d2facb32e0ce948 Mon Sep 17 00:00:00 2001 From: jonjenssen <69144954+jonjenssen@users.noreply.github.com> Date: Tue, 5 Jul 2022 11:06:10 +0200 Subject: [PATCH 004/129] Add qt advanced docking to third party folder and build environment (#9109) * Add qt advanced docking as submodule --- .gitmodules | 3 +++ CMakeLists.txt | 24 +++++++++++++++++++++++- ThirdParty/qtadvanceddocking | 1 + 3 files changed, 27 insertions(+), 1 deletion(-) create mode 160000 ThirdParty/qtadvanceddocking diff --git a/.gitmodules b/.gitmodules index bd07849034..c212beaf20 100644 --- a/.gitmodules +++ b/.gitmodules @@ -7,3 +7,6 @@ [submodule "ThirdParty/fast_float"] path = ThirdParty/fast_float url = https://github.com/fastfloat/fast_float +[submodule "ThirdParty/qtadvanceddocking"] + path = ThirdParty/qtadvanceddocking + url = https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System.git diff --git a/CMakeLists.txt b/CMakeLists.txt index 5af32ce03b..0923db7e45 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -264,7 +264,7 @@ set(CMAKE_CXX_COMPILER_LAUNCHER ${TEMP_CMAKE_CXX_COMPILER_LAUNCHER}) # ############################################################################## # Go through required git submodules # # ############################################################################## -list(APPEND THIRD_PARTY_SUBMODULES fast_float qwt) +list(APPEND THIRD_PARTY_SUBMODULES fast_float qwt qtadvanceddocking) # ############################################################################## # Init GIT submodules if they haven't already # @@ -455,6 +455,28 @@ endif() list(APPEND THIRD_PARTY_LIBRARIES qwt) +# ############################################################################## +# Qt Advanced Docking System +# ############################################################################## +set(ADS_VERSION "3.8.2") + +add_subdirectory(ThirdParty/qtadvanceddocking) + +if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") + target_compile_options(qtadvanceddocking PRIVATE -Wno-deprecated-copy) +elseif(MSVC) + target_compile_options(qtadvanceddocking PRIVATE /wd4996 /wd4005) +elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + target_compile_options(qtadvanceddocking PRIVATE -Wno-deprecated) +endif() + +if(RESINSIGHT_ENABLE_UNITY_BUILD) + message("Cmake Unity build is enabled on : QtADS") + set_property(TARGET qtadvanceddocking PROPERTY UNITY_BUILD true) +endif() + +list(APPEND THIRD_PARTY_LIBRARIES qtadvanceddocking) + # ############################################################################## # Nightcharts # ############################################################################## diff --git a/ThirdParty/qtadvanceddocking b/ThirdParty/qtadvanceddocking new file mode 160000 index 0000000000..75d58b3ea3 --- /dev/null +++ b/ThirdParty/qtadvanceddocking @@ -0,0 +1 @@ +Subproject commit 75d58b3ea310a609ecaee695ef8d0f065413bc86 From 94124d4eac1e81388fc4b390af371c0002259a43 Mon Sep 17 00:00:00 2001 From: Kristian Bendiksen Date: Wed, 15 Jun 2022 10:18:05 +0200 Subject: [PATCH 005/129] #9039: Thermal Fractures: add file reader --- .../FileInterface/CMakeLists_files.cmake | 2 + .../RifThermalFractureReader.cpp | 154 ++ .../FileInterface/RifThermalFractureReader.h | 38 + .../ReservoirDataModel/CMakeLists_files.cmake | 2 + .../RigThermalFractureDefinition.cpp | 127 + .../RigThermalFractureDefinition.h | 93 + .../UnitTests/CMakeLists_files.cmake | 1 + .../RifThermalFractureReader-Test.cpp | 45 + .../fracture_metric.csv | 2431 +++++++++++++++++ 9 files changed, 2893 insertions(+) create mode 100644 ApplicationLibCode/FileInterface/RifThermalFractureReader.cpp create mode 100644 ApplicationLibCode/FileInterface/RifThermalFractureReader.h create mode 100644 ApplicationLibCode/ReservoirDataModel/RigThermalFractureDefinition.cpp create mode 100644 ApplicationLibCode/ReservoirDataModel/RigThermalFractureDefinition.h create mode 100644 ApplicationLibCode/UnitTests/RifThermalFractureReader-Test.cpp create mode 100644 ApplicationLibCode/UnitTests/TestData/RifThermalFractureReader/fracture_metric.csv diff --git a/ApplicationLibCode/FileInterface/CMakeLists_files.cmake b/ApplicationLibCode/FileInterface/CMakeLists_files.cmake index 5da763a486..7759377c46 100644 --- a/ApplicationLibCode/FileInterface/CMakeLists_files.cmake +++ b/ApplicationLibCode/FileInterface/CMakeLists_files.cmake @@ -40,6 +40,7 @@ set(SOURCE_GROUP_HEADER_FILES ${CMAKE_CURRENT_LIST_DIR}/RifElementPropertyTableReader.h ${CMAKE_CURRENT_LIST_DIR}/RifElementPropertyReader.h ${CMAKE_CURRENT_LIST_DIR}/RifStimPlanXmlReader.h + ${CMAKE_CURRENT_LIST_DIR}/RifThermalFractureReader.h ${CMAKE_CURRENT_LIST_DIR}/RifSummaryCaseRestartSelector.h ${CMAKE_CURRENT_LIST_DIR}/RifCaseRealizationParametersReader.h ${CMAKE_CURRENT_LIST_DIR}/RifFileParseTools.h @@ -115,6 +116,7 @@ set(SOURCE_GROUP_SOURCE_FILES ${CMAKE_CURRENT_LIST_DIR}/RifElementPropertyTableReader.cpp ${CMAKE_CURRENT_LIST_DIR}/RifElementPropertyReader.cpp ${CMAKE_CURRENT_LIST_DIR}/RifStimPlanXmlReader.cpp + ${CMAKE_CURRENT_LIST_DIR}/RifThermalFractureReader.cpp ${CMAKE_CURRENT_LIST_DIR}/RifSummaryCaseRestartSelector.cpp ${CMAKE_CURRENT_LIST_DIR}/RifCaseRealizationParametersReader.cpp ${CMAKE_CURRENT_LIST_DIR}/RifFileParseTools.cpp diff --git a/ApplicationLibCode/FileInterface/RifThermalFractureReader.cpp b/ApplicationLibCode/FileInterface/RifThermalFractureReader.cpp new file mode 100644 index 0000000000..0b81a2e5c0 --- /dev/null +++ b/ApplicationLibCode/FileInterface/RifThermalFractureReader.cpp @@ -0,0 +1,154 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2022 - Equinor ASA +// +// ResInsight is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU General Public License at +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#include "RifThermalFractureReader.h" + +#include "RiaTextStringTools.h" + +#include "RigThermalFractureDefinition.h" + +#include "RifFileParseTools.h" + +#include +#include +#include + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::pair, QString> + RifThermalFractureReader::readFractureCsvFile( const QString& filePath ) +{ + QFile file( filePath ); + if ( !file.open( QIODevice::ReadOnly | QIODevice::Text ) ) + { + return std::make_pair( nullptr, QString( "Unable to open file: %1" ).arg( filePath ) ); + } + + std::shared_ptr def = std::make_shared(); + + QString separator = ","; + + auto appendPropertyValues = [def]( int nodeIndex, int timeStepIndex, int valueOffset, const QStringList& values ) { + for ( int i = valueOffset; i < values.size() - 1; i++ ) + { + double value = values[i].toDouble(); + int propertyIndex = i - valueOffset; + def->appendPropertyValue( propertyIndex, nodeIndex, timeStepIndex, value ); + } + }; + + QTextStream in( &file ); + int lineNumber = 1; + + QStringList headerValues; + // The two items in the csv is name and timestep + const int valueOffset = 2; + int nodeIndex = 0; + int timeStepIndex = 0; + bool isFirstHeader = true; + while ( !in.atEnd() ) + { + QString line = in.readLine(); + if ( lineNumber == 1 ) + { + // The first line is the name of the fracture + def->setName( line ); + } + else if ( isHeaderLine( line ) ) + { + headerValues = RifFileParseTools::splitLineAndTrim( line, separator ); + if ( isFirstHeader ) + { + // Create the result vector when encountering the first header + for ( int i = valueOffset; i < headerValues.size() - 1; i++ ) + { + auto [name, unit] = parseNameAndUnit( headerValues[i] ); + def->addProperty( name, unit ); + } + + isFirstHeader = false; + } + else + { + nodeIndex++; + timeStepIndex = 0; + } + } + else if ( isCenterNodeLine( line ) ) + { + // The first node is the center node + auto values = RifFileParseTools::splitLineAndTrim( line, separator ); + + // Second is the timestamp + QString dateString = values[1]; + QString dateFormat = "DD.MMMM.yy hh:mm:ss"; + QDateTime dateTime = QDateTime::fromString( dateString, dateFormat ); + def->addTimeStep( dateTime.toSecsSinceEpoch() ); + + // + appendPropertyValues( nodeIndex, timeStepIndex, valueOffset, values ); + timeStepIndex = 0; + } + else if ( isInternalNodeLine( line ) ) + { + auto values = RifFileParseTools::splitLineAndTrim( line, separator ); + appendPropertyValues( nodeIndex, timeStepIndex, valueOffset, values ); + timeStepIndex = 0; + } + + lineNumber++; + } + + return std::make_pair( def, "" ); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +bool RifThermalFractureReader::isHeaderLine( const QString& line ) +{ + return line.contains( "XCoord" ); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +bool RifThermalFractureReader::isCenterNodeLine( const QString& line ) +{ + return line.contains( "Centre Node" ); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +bool RifThermalFractureReader::isInternalNodeLine( const QString& line ) +{ + return line.contains( "Internal Node" ); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::pair RifThermalFractureReader::parseNameAndUnit( const QString& value ) +{ + QStringList values = value.split( " " ); + QString name = values[0]; + QString unit = values[1].replace( "(", "" ).replace( ")", "" ); + return std::make_pair( name, unit ); +} diff --git a/ApplicationLibCode/FileInterface/RifThermalFractureReader.h b/ApplicationLibCode/FileInterface/RifThermalFractureReader.h new file mode 100644 index 0000000000..ed72b859aa --- /dev/null +++ b/ApplicationLibCode/FileInterface/RifThermalFractureReader.h @@ -0,0 +1,38 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2022 - Equinor ASA +// +// ResInsight is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU General Public License at +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#pragma once + +#include + +#include + +class RigThermalFractureDefinition; + +class RifThermalFractureReader +{ +public: + static std::pair, QString> readFractureCsvFile( const QString& fileName ); + +private: + static bool isHeaderLine( const QString& line ); + static bool isCenterNodeLine( const QString& line ); + static bool isInternalNodeLine( const QString& line ); + + static std::pair parseNameAndUnit( const QString& value ); +}; diff --git a/ApplicationLibCode/ReservoirDataModel/CMakeLists_files.cmake b/ApplicationLibCode/ReservoirDataModel/CMakeLists_files.cmake index 86ebebf947..85f9b358ce 100644 --- a/ApplicationLibCode/ReservoirDataModel/CMakeLists_files.cmake +++ b/ApplicationLibCode/ReservoirDataModel/CMakeLists_files.cmake @@ -60,6 +60,7 @@ set(SOURCE_GROUP_HEADER_FILES ${CMAKE_CURRENT_LIST_DIR}/RigWeightedMeanCalc.h ${CMAKE_CURRENT_LIST_DIR}/RigWellPathFormations.h ${CMAKE_CURRENT_LIST_DIR}/RigStimPlanFractureDefinition.h + ${CMAKE_CURRENT_LIST_DIR}/RigThermalFractureDefinition.h ${CMAKE_CURRENT_LIST_DIR}/RigFractureGrid.h ${CMAKE_CURRENT_LIST_DIR}/RigFractureCell.h ${CMAKE_CURRENT_LIST_DIR}/RigWellResultPoint.h @@ -149,6 +150,7 @@ set(SOURCE_GROUP_SOURCE_FILES ${CMAKE_CURRENT_LIST_DIR}/RigWeightedMeanCalc.cpp ${CMAKE_CURRENT_LIST_DIR}/RigWellPathFormations.cpp ${CMAKE_CURRENT_LIST_DIR}/RigStimPlanFractureDefinition.cpp + ${CMAKE_CURRENT_LIST_DIR}/RigThermalFractureDefinition.cpp ${CMAKE_CURRENT_LIST_DIR}/RigFractureGrid.cpp ${CMAKE_CURRENT_LIST_DIR}/RigFractureCell.cpp ${CMAKE_CURRENT_LIST_DIR}/RigWellResultPoint.cpp diff --git a/ApplicationLibCode/ReservoirDataModel/RigThermalFractureDefinition.cpp b/ApplicationLibCode/ReservoirDataModel/RigThermalFractureDefinition.cpp new file mode 100644 index 0000000000..871fa2d775 --- /dev/null +++ b/ApplicationLibCode/ReservoirDataModel/RigThermalFractureDefinition.cpp @@ -0,0 +1,127 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2022 - Equinor ASA +// +// ResInsight is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU General Public License at +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#include "RigThermalFractureDefinition.h" + +#include "RiaEclipseUnitTools.h" +#include "RiaLogging.h" + +#include + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RigThermalFractureDefinition::RigThermalFractureDefinition() +{ +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RigThermalFractureDefinition::~RigThermalFractureDefinition() +{ +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RigThermalFractureDefinition::setName( const QString& name ) +{ + m_name = name; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QString RigThermalFractureDefinition::name() const +{ + return m_name; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +size_t RigThermalFractureDefinition::numNodes() const +{ + if ( m_results.empty() ) return 0u; + + return m_results[0].numNodes(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +const std::vector& RigThermalFractureDefinition::timeSteps() const +{ + return m_timeSteps; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RigThermalFractureDefinition::addTimeStep( double timeStep ) +{ + m_timeSteps.push_back( timeStep ); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +size_t RigThermalFractureDefinition::numTimeSteps() const +{ + return m_timeSteps.size(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RigThermalFractureDefinition::addProperty( const QString& name, const QString& unit ) +{ + m_results.push_back( RigThermalFractureResult( name, unit ) ); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::vector> RigThermalFractureDefinition::getPropertyNamesUnits() const +{ + std::vector> namesAndUnits; + for ( auto r : m_results ) + namesAndUnits.push_back( std::make_pair( r.name(), r.unit() ) ); + + return namesAndUnits; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RigThermalFractureDefinition::appendPropertyValue( int propertyIndex, int nodeIndex, int timeStepIndex, double value ) +{ + CAF_ASSERT( propertyIndex >= 0 ); + CAF_ASSERT( propertyIndex < static_cast( m_results.size() ) ); + + m_results[propertyIndex].appendValue( nodeIndex, timeStepIndex, value ); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +double RigThermalFractureDefinition::getPropertyValue( int propertyIndex, int nodeIndex, int timeStepIndex ) const +{ + return m_results[propertyIndex].getValue( nodeIndex, timeStepIndex ); +} diff --git a/ApplicationLibCode/ReservoirDataModel/RigThermalFractureDefinition.h b/ApplicationLibCode/ReservoirDataModel/RigThermalFractureDefinition.h new file mode 100644 index 0000000000..af58c3113d --- /dev/null +++ b/ApplicationLibCode/ReservoirDataModel/RigThermalFractureDefinition.h @@ -0,0 +1,93 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2022 - Equinor ASA +// +// ResInsight is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU General Public License at +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#pragma once + +#include "RiaDefines.h" + +#include + +#include + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +class RigThermalFractureResult +{ +public: + RigThermalFractureResult( const QString& name, const QString& unit ) + : m_name( name ) + , m_unit( unit ) + { + } + + QString name() { return m_name; } + QString unit() { return m_unit; } + + void appendValue( int nodeIndex, int timeStepIndex, double value ) + { + if ( nodeIndex >= static_cast( parameterValues.size() ) ) + parameterValues.push_back( { value } ); + else + parameterValues[nodeIndex].push_back( value ); + } + + double getValue( int nodeIndex, int timeStepIndex ) const { return parameterValues[nodeIndex][timeStepIndex]; } + + size_t numNodes() const { return parameterValues.size(); } + +private: + QString m_name; + QString m_unit; + + // Vector for each time step for each node + std::vector> parameterValues; +}; + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +class RigThermalFractureDefinition +{ +public: + RigThermalFractureDefinition(); + ~RigThermalFractureDefinition(); + + void setName( const QString& name ); + QString name() const; + + const std::vector& timeSteps() const; + void addTimeStep( double timeStep ); + size_t numTimeSteps() const; + + size_t numNodes() const; + + void addProperty( const QString& name, const QString& unit ); + + std::vector> getPropertyNamesUnits() const; + + void appendPropertyValue( int propertyIndex, int nodeIndex, int timeStepIndex, double value ); + + double getPropertyValue( int propertyIndex, int nodeIndex, int timeStepIndex ) const; + +private: + QString m_name; + + std::vector m_timeSteps; + std::vector m_results; +}; diff --git a/ApplicationLibCode/UnitTests/CMakeLists_files.cmake b/ApplicationLibCode/UnitTests/CMakeLists_files.cmake index 2e5cb9569d..b6cb8bb1b6 100644 --- a/ApplicationLibCode/UnitTests/CMakeLists_files.cmake +++ b/ApplicationLibCode/UnitTests/CMakeLists_files.cmake @@ -72,6 +72,7 @@ set(SOURCE_GROUP_SOURCE_FILES ${CMAKE_CURRENT_LIST_DIR}/RifElasticPropertiesReader-Test.cpp ${CMAKE_CURRENT_LIST_DIR}/RiaStatisticsTools-Test.cpp ${CMAKE_CURRENT_LIST_DIR}/RifStimPlanXmlReader-Test.cpp + ${CMAKE_CURRENT_LIST_DIR}/RifThermalFractureReader-Test.cpp ${CMAKE_CURRENT_LIST_DIR}/RigWellPathGeometryExporter-Test.cpp ${CMAKE_CURRENT_LIST_DIR}/RifStimPlanModelDeviationFrkExporter-Test.cpp ${CMAKE_CURRENT_LIST_DIR}/RifSummaryDataReader-Test.cpp diff --git a/ApplicationLibCode/UnitTests/RifThermalFractureReader-Test.cpp b/ApplicationLibCode/UnitTests/RifThermalFractureReader-Test.cpp new file mode 100644 index 0000000000..31c23ea9f8 --- /dev/null +++ b/ApplicationLibCode/UnitTests/RifThermalFractureReader-Test.cpp @@ -0,0 +1,45 @@ +#include "gtest/gtest.h" + +#include "RiaTestDataDirectory.h" + +#include "RifThermalFractureReader.h" +#include "RigThermalFractureDefinition.h" + +static const QString CASE_REAL_TEST_DATA_DIRECTORY = QString( "%1/RifThermalFractureReader/" ).arg( TEST_DATA_DIR ); + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +TEST( RifThermalFractureReaderTest, LoadFile ) +{ + QString fileName = CASE_REAL_TEST_DATA_DIRECTORY + "fracture_metric.csv"; + + auto [fractureData, errorMessage] = RifThermalFractureReader::readFractureCsvFile( fileName ); + + EXPECT_TRUE( errorMessage.isEmpty() ); + EXPECT_TRUE( fractureData.get() ); + + EXPECT_EQ( "frac01", fractureData->name().toStdString() ); + + EXPECT_EQ( fractureData->numNodes(), 57u ); + + EXPECT_EQ( fractureData->numTimeSteps(), 29u ); + + auto properties = fractureData->getPropertyNamesUnits(); + EXPECT_EQ( properties.size(), 19u ); + EXPECT_EQ( properties[0].first.toStdString(), "XCoord" ); + EXPECT_EQ( properties[0].second.toStdString(), "m" ); + + // The location of the center node is the same for all timesteps + double centerNodeX = 459352.0; + double centerNodeY = -7.32599e+06; + double centerNodeZ = 2735.0; + + int nodeIndex = 0; + for ( size_t timeStepIndex = 0; timeStepIndex < fractureData->numTimeSteps(); timeStepIndex++ ) + { + EXPECT_DOUBLE_EQ( centerNodeX, fractureData->getPropertyValue( 0, nodeIndex, static_cast( timeStepIndex ) ) ); + EXPECT_DOUBLE_EQ( centerNodeY, fractureData->getPropertyValue( 1, nodeIndex, static_cast( timeStepIndex ) ) ); + EXPECT_DOUBLE_EQ( centerNodeZ, fractureData->getPropertyValue( 2, nodeIndex, static_cast( timeStepIndex ) ) ); + } +} diff --git a/ApplicationLibCode/UnitTests/TestData/RifThermalFractureReader/fracture_metric.csv b/ApplicationLibCode/UnitTests/TestData/RifThermalFractureReader/fracture_metric.csv new file mode 100644 index 0000000000..d5358f6eab --- /dev/null +++ b/ApplicationLibCode/UnitTests/TestData/RifThermalFractureReader/fracture_metric.csv @@ -0,0 +1,2431 @@ +frac01 +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Centre Node(1),09.12.1997 22:12:00,459352,-7.32599e+06,2735,0.203163,386.075,10.065,373.207,1000.26,0.318,0.171043,708.241,0.378137,339.935,11.655,1.13368,55.5623,33.2722,12.8677,46.1399, +Centre Node(1),05.02.1998 14:35:11,459352,-7.32599e+06,2735,0.0145999,386.695,10.0547,383.818,1000.09,0.318,0.104823,2.39161,0.251669,349.508,10.8229,1.96263,44.6939,34.3095,2.87659,37.1861, +Centre Node(1),12.04.1998 23:29:05,459352,-7.32599e+06,2735,3.048e-07,387.256,10.0513,384.736,1000.23,0.318,0.0867732,2.39161,0.318317,349.9,10.6303,2.37484,36.7878,34.8364,2.51953,37.3559, +Centre Node(1),16.08.1998 08:06:27,459352,-7.32599e+06,2735,3.048e-07,369.704,10.048,385.031,999.891,0.318,0.0661685,2.39161,0.270915,356.062,10.4218,3.12029,36.5477,28.9691,-15.3269,13.6422, +Centre Node(1),18.10.1998 00:25:09,459352,-7.32599e+06,2735,0.0196283,358.935,10.0472,354.586,999.02,0.318,0.059019,2.39161,0.253608,328.444,10.331,3.50965,15.9013,26.1427,4.34837,30.4911, +Centre Node(1),19.12.1998 16:43:50,459352,-7.32599e+06,2735,3.048e-07,359.538,10.046,363.972,999.394,0.318,0.0531779,2.39161,0.23897,346.357,10.1943,3.90434,29.5867,17.6145,-4.43427,13.1802, +Centre Node(1),20.02.1999 09:02:31,459352,-7.32599e+06,2735,0.0654113,356.182,10.046,351.254,998.87,0.318,0.0509413,23.6377,0.306383,332.373,10.2413,4.08035,16.3121,18.8811,4.92782,23.8089, +Centre Node(1),25.06.1999 17:39:53,459352,-7.32599e+06,2735,3.048e-07,356.823,10.0454,358.075,999.279,0.318,0.047726,2.39161,0.213626,345.413,10.1879,4.36182,23.9339,12.6622,-1.25206,11.4101, +Centre Node(1),27.08.1999 09:58:34,459352,-7.32599e+06,2735,0.0611455,348.962,10.0461,344.596,998.538,0.318,0.0454833,19.3081,0.253291,331.773,10.2773,4.58259,12.1052,12.8234,4.36582,17.1892, +Centre Node(1),30.12.1999 18:35:56,459352,-7.32599e+06,2735,3.048e-07,346.141,10.0458,349.588,998.802,0.318,0.0437597,2.39161,0.205237,341.446,10.2272,4.76739,17.4866,8.14196,-3.44711,4.69484, +Centre Node(1),06.09.2000 11:50:41,459352,-7.32599e+06,2735,0.233762,352.457,10.0458,344.958,998.529,0.318,0.0420014,1078.87,0.0488517,337.201,10.2886,4.97238,9.44804,7.75672,7.49942,15.2561, +Centre Node(1),09.01.2001 20:28:03,459352,-7.32599e+06,2735,3.048e-07,357.064,10.0446,355.522,999.055,0.318,0.037812,2.39161,0.149205,349.83,10.2275,5.53701,15.0515,5.69248,1.54212,7.2346, +Centre Node(1),13.03.2001 12:46:44,459352,-7.32599e+06,2735,0.0120971,356.622,10.0443,354.848,998.893,0.318,0.0369852,2.39161,0.0795952,345.34,10.2559,5.66429,10.4831,9.50854,1.7738,11.2823, +Centre Node(1),15.05.2001 05:05:26,459352,-7.32599e+06,2735,3.048e-07,357.873,10.0439,358.476,999.033,0.318,0.0363807,2.39161,0.164569,349.439,10.2206,5.76072,11.5569,9.03685,-0.603314,8.43353, +Centre Node(1),17.09.2001 13:42:48,459352,-7.32599e+06,2735,3.048e-07,359.578,10.0436,359.131,999.025,0.318,0.0358769,2.39161,0.108665,348.804,10.2158,5.84359,9.90427,10.3269,0.44658,10.7734, +Centre Node(1),20.01.2002 22:20:10,459352,-7.32599e+06,2735,3.048e-07,361.355,10.043,361.758,999.11,0.318,0.0347939,2.39161,0.136498,350.695,10.1917,6.02965,11.5023,11.0628,-0.40253,10.6602, +Centre Node(1),26.05.2002 06:57:32,459352,-7.32599e+06,2735,3.048e-07,362.868,10.0425,364.125,999.179,0.318,0.033819,2.39161,0.151089,351.681,10.184,6.20725,11.8582,12.4443,-1.25682,11.1875, +Centre Node(1),28.09.2002 15:34:55,459352,-7.32599e+06,2735,3.048e-07,363.865,10.0422,365.508,999.229,0.318,0.0330033,2.39161,0.118395,351.177,10.1936,6.36387,12.0343,14.3314,-1.64288,12.6885, +Centre Node(1),30.11.2002 07:53:36,459352,-7.32599e+06,2735,3.048e-07,364.545,10.0418,367.193,999.262,0.318,0.0321458,2.39161,0.178793,351.841,10.187,6.53685,12.4601,15.3515,-2.64796,12.7035, +Centre Node(1),01.02.2003 00:12:17,459352,-7.32599e+06,2735,3.048e-07,363.627,10.0417,367.714,999.322,0.318,0.0317612,2.39161,0.15142,351.19,10.1908,6.61741,12.7751,16.5245,-4.08718,12.4373, +Centre Node(1),04.04.2003 16:30:58,459352,-7.32599e+06,2735,3.048e-07,365.695,10.0416,368.613,999.379,0.318,0.0313672,2.39161,0.184146,351.767,10.188,6.70203,12.449,16.8459,-2.91809,13.9278, +Centre Node(1),06.06.2003 08:49:39,459352,-7.32599e+06,2735,3.048e-07,365.727,10.0414,369.026,999.322,0.318,0.0309654,2.39161,0.18378,351.64,10.1843,6.7904,13.493,17.3859,-3.29888,14.087, +Centre Node(1),09.10.2003 17:27:02,459352,-7.32599e+06,2735,3.048e-07,365.504,10.0413,369.403,999.384,0.318,0.0305869,2.39161,0.197575,351.087,10.1856,6.87576,13.7367,18.3158,-3.89881,14.417, +Centre Node(1),16.06.2004 10:41:46,459352,-7.32599e+06,2735,3.048e-07,366.158,10.0409,370.272,999.336,0.318,0.0298311,2.39161,0.1477,350.997,10.1814,7.05265,13.933,19.2749,-4.11468,15.1602, +Centre Node(1),19.10.2004 19:19:08,459352,-7.32599e+06,2735,3.048e-07,366.217,10.0402,371.358,999.34,0.318,0.0284053,2.39161,0.13999,349.952,10.1761,7.41172,14.6994,21.4053,-5.14031,16.265, +Centre Node(1),27.06.2005 12:33:53,459352,-7.32599e+06,2735,3.048e-07,366.277,10.0399,371.973,999.343,0.318,0.0277035,2.39161,0.137228,349.601,10.1697,7.60194,15.9773,22.372,-5.69557,16.6764, +Centre Node(1),10.11.2006 23:03:22,459352,-7.32599e+06,2735,3.048e-07,366.061,10.0392,372.701,999.332,0.318,0.0263759,2.39161,0.123303,348.552,10.163,7.98935,16.6566,24.1483,-6.6394,17.5089, +Centre Node(1),01.12.2006,459352,-7.32599e+06,2735,3.048e-07,365.274,10.0381,373.945,999.534,0.318,0.0241579,2.39161,0.192062,346.399,10.1611,8.73137,17.3607,27.5455,-8.6708,18.8747, +Centre Node(1),01.12.2006,459352,-7.32599e+06,2735,3.048e-07,365.274,10.0381,373.945,999.534,0.318,0.0241579,2.39161,0.192062,346.399,10.1611,8.73137,17.3607,27.5455,-8.6708,18.8747, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Internal Node(2),09.12.1997 22:12:00,459353,-7.32599e+06,2737.75,0.214692,386.349,10.0776,374.548,1000.28,0.318,0.21136,835.779,0.558425,337.235,12.5731,0.922452,54.0624,37.313,11.8009,49.1139, +Internal Node(2),05.02.1998 14:35:11,459353,-7.32599e+06,2737.86,0.0319557,387.372,10.0603,384.308,1000.09,0.318,0.129537,2.75609,0.541816,348.331,10.3126,1.61019,45.5135,35.977,3.06492,39.0419, +Internal Node(2),12.04.1998 23:29:05,459353,-7.32599e+06,2738.03,3.048e-07,388.008,10.0582,385.821,1000.27,0.318,0.108826,2.39161,0.49317,349.584,10.1468,1.93867,37.6044,36.2375,2.18693,38.4245, +Internal Node(2),16.08.1998 08:06:27,459353,-7.32599e+06,2738.3,3.048e-07,370.483,10.0526,386.439,999.891,0.318,0.0845194,2.39161,0.406183,356.281,10.0775,2.57414,37.3057,30.158,-15.9554,14.2026, +Internal Node(2),18.10.1998 00:25:09,459353,-7.32599e+06,2738.3,0.0182279,359.713,10.0741,356.566,999.055,0.318,0.0746502,2.39161,0.399063,328.906,10.1393,2.96712,15.9965,27.6602,3.14687,30.807, +Internal Node(2),19.12.1998 16:43:50,459353,-7.32599e+06,2738.33,3.048e-07,360.336,10.061,365.606,999.394,0.318,0.0671088,2.39161,0.368173,346.769,10.0958,3.33974,29.969,18.8364,-5.27016,13.5663, +Internal Node(2),20.02.1999 09:02:31,459353,-7.32599e+06,2738.33,0.0710909,356.625,10.0673,352.812,998.891,0.318,0.0640904,30.3451,0.996201,332.811,10.1162,3.51536,16.5686,20.0016,3.81265,23.8142, +Internal Node(2),25.06.1999 17:39:53,459353,-7.32599e+06,2738.92,3.048e-07,357.721,10.061,359.7,999.279,0.318,0.0638275,2.39161,0.315588,345.977,10.0927,3.64514,24.146,13.7224,-1.97916,11.7433, +Internal Node(2),27.08.1999 09:58:34,459353,-7.32599e+06,2738.81,0.0782147,349.424,10.0703,345.63,998.56,0.318,0.0597016,40.4121,0.727501,332.462,10.1199,3.92288,12.1594,13.168,3.7936,16.9616, +Internal Node(2),30.12.1999 18:35:56,459353,-7.32599e+06,2739.39,3.048e-07,347.193,10.0651,350.662,998.805,0.318,0.0610211,2.39161,0.29857,342.381,10.0999,3.98693,17.3417,8.28087,-3.46939,4.81148, +Internal Node(2),06.09.2000 11:50:41,459353,-7.32599e+06,2739.8,0.277512,352.929,10.0729,345.603,998.554,0.318,0.0609499,1805.07,0.135766,338.059,10.1169,4.13238,9.50737,7.54346,7.32628,14.8697, +Internal Node(2),09.01.2001 20:28:03,459353,-7.32599e+06,2741.59,0.0396045,358.254,10.0657,355.523,999.085,0.318,0.0230041,5.24662,0.34556,351.154,10.0858,4.37345,14.6214,4.36935,2.73073,7.10008, +Internal Node(2),13.03.2001 12:46:44,459353,-7.32599e+06,2741.59,0.0566387,357.527,10.0666,354.265,998.935,0.318,0.0224112,15.3457,0.562818,347.103,10.0941,4.50831,10.016,7.16273,3.26135,10.4241, +Internal Node(2),15.05.2001 05:05:26,459353,-7.32599e+06,2741.59,3.048e-07,359.226,10.0635,357.708,999.073,0.318,0.0220002,2.39161,0.22552,351.123,10.0854,4.60247,10.3723,6.5851,1.51844,8.10353, +Internal Node(2),17.09.2001 13:42:48,459353,-7.32599e+06,2741.59,0.0424055,360.574,10.0628,357.976,999.078,0.318,0.021655,6.44038,0.3058,350.31,10.0832,4.68512,9.11852,7.6661,2.59823,10.2643, +Internal Node(2),20.01.2002 22:20:10,459353,-7.32599e+06,2742.44,0.0313943,362.603,10.0595,360.213,999.172,0.318,0.023673,2.61336,0.198526,352.488,10.0707,4.6921,10.5297,7.72522,2.38994,10.1152, +Internal Node(2),26.05.2002 06:57:32,459353,-7.32598e+06,2743.23,0.0230018,364.297,10.0579,361.973,999.249,0.318,0.0260991,2.39161,0.18688,353.636,10.0622,4.70192,10.8756,8.33745,2.324,10.6614, +Internal Node(2),28.09.2002 15:34:55,459353,-7.32598e+06,2743.24,0.026665,364.901,10.0585,362.816,999.278,0.318,0.0253968,2.39161,0.106679,352.999,10.0622,4.85586,11.1937,9.81749,2.08447,11.902, +Internal Node(2),30.11.2002 07:53:36,459354,-7.32598e+06,2743.87,0.00374847,365.745,10.0576,363.976,999.318,0.318,0.0276662,2.39161,0.131835,353.784,10.0568,4.89136,11.4124,10.1914,1.7688,11.9602, +Internal Node(2),01.02.2003 00:12:17,459354,-7.32598e+06,2743.87,3.048e-07,365.294,10.0577,364.169,999.354,0.318,0.0272634,2.39161,0.211069,353.073,10.0567,4.97084,11.9067,11.096,1.12519,12.2212, +Internal Node(2),04.04.2003 16:30:58,459354,-7.32598e+06,2743.87,0.00668589,366.522,10.0574,364.961,999.416,0.318,0.0268508,2.39161,0.0940554,353.672,10.0564,5.05491,11.7302,11.2894,1.56095,12.8504, +Internal Node(2),06.06.2003 08:49:39,459354,-7.32598e+06,2744.01,3.048e-07,366.441,10.0567,365.159,999.354,0.318,0.0271479,2.39161,0.0772942,353.566,10.0548,5.11187,12.4465,11.593,1.28255,12.8755, +Internal Node(2),09.10.2003 17:27:02,459354,-7.32598e+06,2744.01,3.048e-07,366.367,10.0566,365.269,999.421,0.318,0.0267513,2.39161,0.107006,352.973,10.0547,5.19413,12.6547,12.2962,1.09801,13.3942, +Internal Node(2),16.06.2004 10:41:46,459354,-7.32598e+06,2744.01,3.048e-07,366.765,10.0559,365.862,999.364,0.318,0.0259631,2.39161,0.0480474,352.899,10.0542,5.36529,12.9325,12.9628,0.903322,13.8661, +Internal Node(2),19.10.2004 19:19:08,459354,-7.32598e+06,2744.01,3.048e-07,366.786,10.0547,366.328,999.366,0.318,0.0245119,2.39161,0.0418185,351.835,10.0533,5.7077,13.5434,14.4925,0.458457,14.951, +Internal Node(2),27.06.2005 12:33:53,459354,-7.32598e+06,2744.01,3.048e-07,366.833,10.0536,366.641,999.368,0.318,0.0238104,2.39161,0.0398264,351.491,10.0521,5.88781,14.7958,15.1499,0.19203,15.3419, +Internal Node(2),10.11.2006 23:03:22,459354,-7.32598e+06,2744.01,3.048e-07,366.626,10.0523,366.852,999.358,0.318,0.0225005,2.39161,0.0336846,350.446,10.0511,6.25398,15.4831,16.4059,-0.226119,16.1798, +Internal Node(2),01.12.2006,459354,-7.32598e+06,2744.01,3.048e-07,365.774,10.0511,367.13,999.573,0.318,0.0203622,2.39161,0.064133,348.261,10.0502,6.95193,16.224,18.8689,-1.35635,17.5125, +Internal Node(2),01.12.2006,459354,-7.32598e+06,2744.01,3.048e-07,365.774,10.0511,367.13,999.573,0.318,0.0203622,2.39161,0.064133,348.261,10.0502,6.95193,16.224,18.8689,-1.35635,17.5125, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Internal Node(3),09.12.1997 22:12:00,459354,-7.32599e+06,2736.66,0.217377,386.231,10.0776,373,1000.27,0.318,0.211058,867.532,0.214156,336.393,12.3051,0.918064,56.2871,36.6071,13.2318,49.8389, +Internal Node(3),05.02.1998 14:35:11,459354,-7.32599e+06,2737.25,0.0282413,386.673,10.0603,383.591,1000.09,0.318,0.132589,2.39161,0.193155,347.788,10.4025,1.56185,46.2791,35.8028,3.08283,38.8857, +Internal Node(3),12.04.1998 23:29:05,459355,-7.32599e+06,2737.72,3.048e-07,387.166,10.0582,385.228,1000.23,0.318,0.114114,2.39161,0.208694,348.846,10.2115,1.83241,37.9522,36.3826,1.93781,38.3205, +Internal Node(3),16.08.1998 08:06:27,459355,-7.32599e+06,2738.03,3.048e-07,369.689,10.0526,385.831,999.891,0.318,0.0865555,2.39161,0.174937,355.437,10.099,2.46583,37.8083,30.3941,-16.1425,14.2516, +Internal Node(3),18.10.1998 00:25:09,459355,-7.32599e+06,2738.02,0.0228391,358.911,10.0741,355.876,999.023,0.318,0.0751982,2.39161,0.172664,328.512,10.1538,2.88064,16.3007,27.3644,3.03443,30.3988, +Internal Node(3),19.12.1998 16:43:50,459356,-7.32599e+06,2738.33,3.048e-07,359.586,10.061,365.123,999.394,0.318,0.0692069,2.39161,0.157074,346.021,10.1017,3.18087,30.5803,19.1026,-5.53722,13.5653, +Internal Node(3),20.02.1999 09:02:31,459356,-7.32599e+06,2738.32,0.0734611,356.424,10.0673,352.399,998.881,0.318,0.0657377,33.4826,0.253158,332.532,10.1282,3.3655,16.8407,19.8668,4.02525,23.892, +Internal Node(3),25.06.1999 17:39:53,459356,-7.32599e+06,2738.6,3.048e-07,356.937,10.061,359.057,999.279,0.318,0.0630752,2.39161,0.132659,345.436,10.1023,3.56246,24.569,13.6211,-2.12045,11.5006, +Internal Node(3),27.08.1999 09:58:34,459357,-7.32599e+06,2738.57,0.0818295,349.205,10.0703,345.14,998.55,0.318,0.0593299,46.2781,0.245973,332.311,10.1449,3.81922,12.2438,12.8289,4.06427,16.8932, +Internal Node(3),30.12.1999 18:35:56,459357,-7.32599e+06,2739.04,3.048e-07,346.345,10.0651,350.123,998.805,0.318,0.059599,2.39161,0.123888,341.956,10.1132,3.90959,17.6081,8.1664,-3.77798,4.38841, +Internal Node(3),06.09.2000 11:50:41,459357,-7.32599e+06,2739.22,0.276558,352.869,10.0729,345.141,998.545,0.318,0.0577837,1786.51,0.0502581,337.825,10.1415,4.09511,9.55761,7.31593,7.72785,15.0438, +Internal Node(3),09.01.2001 20:28:03,459358,-7.326e+06,2740.19,0.0265492,357.406,10.0657,355.541,999.078,0.318,0.0567941,2.39161,0.0801013,350.903,10.1061,4.50612,14.729,4.63732,1.86512,6.50244, +Internal Node(3),13.03.2001 12:46:44,459358,-7.326e+06,2740.19,0.0601587,356.99,10.0666,354.296,998.91,0.318,0.055307,18.3883,0.172623,346.473,10.1313,4.6479,10.2637,7.82376,2.69358,10.5173, +Internal Node(3),15.05.2001 05:05:26,459359,-7.326e+06,2740.04,3.048e-07,358.191,10.0635,357.809,999.05,0.318,0.0533459,2.39161,0.0948542,350.489,10.1182,4.76647,10.8773,7.31963,0.38267,7.7023, +Internal Node(3),17.09.2001 13:42:48,459359,-7.326e+06,2740.04,0.0343934,359.901,10.0628,358.231,999.04,0.318,0.0524528,3.43614,0.0711521,349.777,10.1201,4.85418,9.39518,8.45429,1.66986,10.1242, +Internal Node(3),20.01.2002 22:20:10,459359,-7.326e+06,2740.04,0.0160658,361.662,10.0595,360.652,999.125,0.318,0.050618,2.39161,0.0698229,351.649,10.1077,5.04629,11.0482,9.00255,1.01013,10.0127, +Internal Node(3),26.05.2002 06:57:32,459359,-7.326e+06,2740.28,3.048e-07,363.192,10.0579,362.699,999.195,0.318,0.0502127,2.39161,0.0773277,352.632,10.0995,5.18913,11.4538,10.0671,0.492803,10.5599, +Internal Node(3),28.09.2002 15:34:55,459359,-7.326e+06,2740.31,3.048e-07,364.169,10.0585,363.826,999.244,0.318,0.0489939,2.39161,0.0461299,352.123,10.1001,5.34971,11.6346,11.7031,0.343346,12.0464, +Internal Node(3),30.11.2002 07:53:36,459359,-7.326e+06,2740.42,3.048e-07,364.758,10.0576,365.326,999.272,0.318,0.048094,2.39161,0.0690758,352.811,10.0937,5.50778,12.0001,12.5149,-0.567727,11.9472, +Internal Node(3),01.02.2003 00:12:17,459358,-7.326e+06,2740.44,3.048e-07,364.003,10.0577,365.679,999.336,0.318,0.0475705,2.39161,0.0883882,352.16,10.0937,5.59053,12.3122,13.5184,-1.67603,11.8423, +Internal Node(3),04.04.2003 16:30:58,459358,-7.326e+06,2740.45,3.048e-07,365.819,10.0574,366.526,999.4,0.318,0.0469385,2.39161,0.0604581,352.746,10.0915,5.6772,12.0203,13.7801,-0.706257,13.0739, +Internal Node(3),06.06.2003 08:49:39,459358,-7.326e+06,2740.45,3.048e-07,365.829,10.0567,366.86,999.328,0.318,0.0462841,2.39161,0.0580416,352.612,10.0892,5.76694,12.9491,14.2483,-1.03108,13.2172, +Internal Node(3),09.10.2003 17:27:02,459358,-7.326e+06,2740.46,3.048e-07,365.605,10.0566,367.107,999.405,0.318,0.045672,2.39161,0.0651232,352.043,10.0892,5.85329,13.1869,15.0644,-1.50226,13.5621, +Internal Node(3),16.06.2004 10:41:46,459358,-7.326e+06,2740.46,3.048e-07,366.307,10.0559,367.857,999.342,0.318,0.0444019,2.39161,0.0514364,351.955,10.0872,6.03286,13.3928,15.9018,-1.54976,14.352, +Internal Node(3),19.10.2004 19:19:08,459358,-7.326e+06,2740.46,3.048e-07,366.378,10.0547,368.668,999.347,0.318,0.0420732,2.39161,0.0512134,350.91,10.0844,6.39491,14.1482,17.7575,-2.2901,15.4674, +Internal Node(3),27.06.2005 12:33:53,459358,-7.326e+06,2740.46,3.048e-07,366.442,10.0536,369.145,999.35,0.318,0.0409375,2.39161,0.0512939,350.557,10.0814,6.58551,15.4316,18.5879,-2.70238,15.8855, +Internal Node(3),10.11.2006 23:03:22,459358,-7.326e+06,2740.47,3.048e-07,366.25,10.0523,369.639,999.341,0.318,0.0388269,2.39161,0.0480579,349.512,10.0785,6.97207,16.1185,20.1262,-3.38872,16.7375, +Internal Node(3),01.12.2006,459358,-7.326e+06,2740.48,3.048e-07,365.343,10.0511,370.472,999.558,0.318,0.0353239,2.39161,0.0641843,347.393,10.0771,7.70754,16.8,23.0796,-5.12944,17.9501, +Internal Node(3),01.12.2006,459358,-7.326e+06,2740.48,3.048e-07,365.343,10.0511,370.472,999.558,0.318,0.0353239,2.39161,0.0641843,347.393,10.0771,7.70754,16.8,23.0796,-5.12944,17.9501, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Internal Node(4),09.12.1997 22:12:00,459355,-7.32599e+06,2735.5,0.192545,386.115,10.0776,371.449,1000.27,0.318,0.237456,602.9,0.0983409,334.378,12.3434,0.811538,59.0405,37.0713,14.6652,51.7365, +Internal Node(4),05.02.1998 14:35:11,459356,-7.32599e+06,2735.66,0.02272,386.431,10.0603,381.775,1000.09,0.318,0.128699,2.39161,0.0911803,347.496,10.2669,1.59119,48.0086,34.2797,4.65553,38.9353, +Internal Node(4),12.04.1998 23:29:05,459357,-7.32599e+06,2735.84,0.00197639,386.87,10.0582,382.871,1000.21,0.318,0.0661678,2.39161,0.124015,348.346,10.1068,1.94946,39.5625,34.525,3.99878,38.5238, +Internal Node(4),16.08.1998 08:06:27,459357,-7.326e+06,2736.12,3.048e-07,369.36,10.0526,383.614,999.891,0.318,0.05734,2.39161,0.0841332,354.701,10.0909,2.69284,38.9637,28.9136,-14.2545,14.6592, +Internal Node(4),18.10.1998 00:25:09,459357,-7.326e+06,2736.13,0.0307914,358.601,10.0741,353.38,999.011,0.318,0.0626429,2.46566,0.0904544,327.96,10.1803,3.15611,16.8344,25.4196,5.22108,30.6407, +Internal Node(4),19.12.1998 16:43:50,459358,-7.326e+06,2736.32,3.048e-07,359.255,10.061,362.71,999.394,0.318,0.0566078,2.39161,0.0717935,345.09,10.1179,3.50461,31.3589,17.62,-3.45534,14.1647, +Internal Node(4),20.02.1999 09:02:31,459358,-7.326e+06,2736.33,0.0730936,356.185,10.0673,350.116,998.869,0.318,0.0544967,32.9825,0.112585,331.952,10.1602,3.70127,17.2517,18.1641,6.0689,24.233, +Internal Node(4),25.06.1999 17:39:53,459360,-7.326e+06,2736.62,3.048e-07,356.625,10.061,356.881,999.279,0.318,0.0525426,2.39161,0.0511655,344.569,10.1257,3.86795,25.2239,12.3111,-0.256004,12.0551, +Internal Node(4),27.08.1999 09:58:34,459360,-7.326e+06,2736.51,0.0741946,348.958,10.0703,343.448,998.539,0.318,0.0499715,34.4956,0.109535,331.798,10.1963,4.1492,12.4416,11.6499,5.50982,17.1597, +Internal Node(4),30.12.1999 18:35:56,459360,-7.326e+06,2736.76,3.048e-07,346.018,10.0651,348.365,998.805,0.318,0.0490832,2.39161,0.0413177,341.053,10.1478,4.25311,18.1392,7.31209,-2.34662,4.96546, +Internal Node(4),06.09.2000 11:50:41,459361,-7.326e+06,2736.85,0.228583,352.636,10.0729,343.839,998.532,0.318,0.0481416,1008.73,0.0296422,337.183,10.1959,4.35412,9.74625,6.65534,8.79729,15.4526, +Internal Node(4),09.01.2001 20:28:03,459363,-7.32601e+06,2737.08,0.00892447,356.993,10.0657,355.088,999.064,0.318,0.0440726,2.39161,0.0321559,350.082,10.1442,4.81548,15.2465,5.00656,1.90415,6.91071, +Internal Node(4),13.03.2001 12:46:44,459363,-7.32601e+06,2737.02,0.0419611,356.623,10.0666,354.178,998.893,0.318,0.0426621,6.24004,0.0398281,345.428,10.1977,4.9691,10.7039,8.74917,2.44572,11.1949, +Internal Node(4),15.05.2001 05:05:26,459364,-7.32601e+06,2737.25,3.048e-07,357.811,10.0635,357.763,999.035,0.318,0.0432646,2.39161,0.0332223,349.57,10.1676,4.93648,11.694,8.19294,0.0483311,8.24127, +Internal Node(4),17.09.2001 13:42:48,459364,-7.32601e+06,2737.21,0.013426,359.554,10.0628,358.439,999.024,0.318,0.0423155,2.39161,0.0274629,349.004,10.1767,5.04144,9.95026,9.43565,1.11484,10.5505, +Internal Node(4),20.01.2002 22:20:10,459364,-7.32601e+06,2737.25,3.048e-07,361.31,10.0595,360.967,999.108,0.318,0.0407612,2.39161,0.0294011,350.766,10.1563,5.24714,11.7097,10.2009,0.343146,10.544, +Internal Node(4),26.05.2002 06:57:32,459364,-7.32601e+06,2737.42,3.048e-07,362.809,10.0579,363.23,999.177,0.318,0.0398343,2.39161,0.0322318,351.713,10.1489,5.41698,12.1267,11.5166,-0.42086,11.0957, +Internal Node(4),28.09.2002 15:34:55,459364,-7.32601e+06,2737.57,3.048e-07,363.8,10.0585,364.576,999.227,0.318,0.0389984,2.39161,0.0339383,351.281,10.1525,5.58158,12.2188,13.2951,-0.776392,12.5187, +Internal Node(4),30.11.2002 07:53:36,459364,-7.32601e+06,2737.68,3.048e-07,364.304,10.0576,366.229,999.251,0.318,0.0379842,2.39161,0.0540862,351.966,10.1403,5.76867,12.6201,14.2628,-1.92488,12.3379, +Internal Node(4),01.02.2003 00:12:17,459363,-7.32601e+06,2737.81,3.048e-07,363.631,10.0577,366.685,999.319,0.318,0.0377631,2.39161,0.0294872,351.351,10.1408,5.84659,12.8235,15.3345,-3.05427,12.2803, +Internal Node(4),04.04.2003 16:30:58,459363,-7.32601e+06,2737.88,3.048e-07,365.318,10.0574,367.561,999.386,0.318,0.0373753,2.39161,0.068808,351.937,10.1354,5.93416,12.5358,15.6239,-2.24274,13.3812, +Internal Node(4),06.06.2003 08:49:39,459363,-7.32601e+06,2737.94,3.048e-07,365.335,10.0567,367.942,999.306,0.318,0.0369659,2.39161,0.0718806,351.806,10.1306,6.02184,13.4733,16.1358,-2.60627,13.5295, +Internal Node(4),09.10.2003 17:27:02,459363,-7.32601e+06,2737.98,3.048e-07,365.096,10.0566,368.283,999.39,0.318,0.0365171,2.39161,0.073512,351.259,10.1306,6.11169,13.7089,17.0242,-3.18702,13.8372, +Internal Node(4),16.06.2004 10:41:46,459363,-7.32601e+06,2738,3.048e-07,365.864,10.0559,369.141,999.321,0.318,0.035493,2.39161,0.0642729,351.164,10.1261,6.30163,13.8826,17.9768,-3.27652,14.7003, +Internal Node(4),19.10.2004 19:19:08,459363,-7.32601e+06,2738.02,3.048e-07,365.948,10.0547,370.208,999.327,0.318,0.0335219,2.39161,0.0625966,350.129,10.121,6.689,14.7097,20.0791,-4.25951,15.8196, +Internal Node(4),27.06.2005 12:33:53,459363,-7.32601e+06,2738.03,3.048e-07,366.017,10.0536,370.793,999.33,0.318,0.0325819,2.39161,0.0616975,349.763,10.1155,6.89193,16.0156,21.0305,-4.77578,16.2547, +Internal Node(4),10.11.2006 23:03:22,459363,-7.32601e+06,2738.05,3.048e-07,365.842,10.0523,371.505,999.322,0.318,0.030819,2.39161,0.0576362,348.715,10.1105,7.30399,16.706,22.7899,-5.66361,17.1263, +Internal Node(4),01.12.2006,459363,-7.32601e+06,2738.07,3.048e-07,364.893,10.0511,372.755,999.545,0.318,0.0279481,2.39161,0.0734599,346.638,10.1073,8.0842,17.3529,26.1167,-7.86203,18.2547, +Internal Node(4),01.12.2006,459363,-7.32601e+06,2738.07,3.048e-07,364.893,10.0511,372.755,999.545,0.318,0.0279481,2.39161,0.0734599,346.638,10.1073,8.0842,17.3529,26.1167,-7.86203,18.2547, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Internal Node(5),09.12.1997 22:12:00,459354,-7.32599e+06,2734.43,0.166322,386.012,10.0776,376.769,1000.26,0.318,0.216141,388.591,0.256963,336.985,15.2943,0.896786,53.104,39.7842,9.24309,49.0273, +Internal Node(5),05.02.1998 14:35:11,459354,-7.32599e+06,2734.49,3.048e-07,386.388,10.0603,385.635,1000.09,0.318,0.125687,2.39161,0.148841,348.346,12.4205,1.63775,43.0819,37.2892,0.752643,38.0418, +Internal Node(5),12.04.1998 23:29:05,459354,-7.32599e+06,2734.6,3.048e-07,386.844,10.0582,386.179,1000.21,0.318,0.102802,2.39161,0.185283,348.992,11.8432,2.00468,35.7204,37.1873,0.665468,37.8527, +Internal Node(5),16.08.1998 08:06:27,459355,-7.32599e+06,2734.48,3.048e-07,369.278,10.0526,386.68,999.891,0.318,0.07735,2.39161,0.153141,355.213,11.6135,2.67071,35.0333,31.4667,-17.4021,14.0646, +Internal Node(5),18.10.1998 00:25:09,459355,-7.32599e+06,2734.49,0.0116454,358.53,10.0741,356.283,999.006,0.318,0.0676123,2.39161,0.138103,328.158,11.3881,3.07209,15.3268,28.1252,2.24705,30.3723, +Internal Node(5),19.12.1998 16:43:50,459355,-7.32599e+06,2734.47,3.048e-07,359.144,10.061,365.559,999.394,0.318,0.0609033,2.39161,0.128417,345.748,11.1805,3.42327,28.4765,19.8108,-6.41464,13.3962, +Internal Node(5),20.02.1999 09:02:31,459355,-7.32599e+06,2734.5,0.0519309,356.038,10.0673,352.913,998.863,0.318,0.0580272,11.8284,0.152547,332.102,11.2767,3.59739,15.7489,20.8113,3.12539,23.9367, +Internal Node(5),25.06.1999 17:39:53,459356,-7.32599e+06,2734.44,3.048e-07,356.469,10.061,359.898,999.279,0.318,0.0552618,2.39161,0.10291,344.914,11.397,3.78155,22.7498,14.9842,-3.42884,11.5553, +Internal Node(5),27.08.1999 09:58:34,459356,-7.32599e+06,2734.44,0.0447786,348.793,10.0703,346.482,998.531,0.318,0.0524533,7.58327,0.123876,331.666,11.5706,3.99095,11.3916,14.8161,2.31136,17.1275, +Internal Node(5),30.12.1999 18:35:56,459356,-7.32599e+06,2734.47,3.048e-07,345.838,10.0651,351.264,998.798,0.318,0.0501237,2.39161,0.09064,341.125,11.4262,4.16247,16.5019,10.139,-5.42572,4.71333, +Internal Node(5),06.09.2000 11:50:41,459356,-7.32599e+06,2734.48,0.191409,352.404,10.0729,346.728,998.523,0.318,0.0482355,592.289,0.0285657,337.05,11.577,4.33324,8.84592,9.67785,5.67594,15.3538, +Internal Node(5),09.01.2001 20:28:03,459357,-7.326e+06,2734.36,3.048e-07,356.772,10.0657,357.326,999.051,0.318,0.0442821,2.39161,0.0730324,349.778,11.6704,4.73159,13.6849,7.54806,-0.553645,6.99441, +Internal Node(5),13.03.2001 12:46:44,459357,-7.326e+06,2734.38,0.000399742,356.397,10.0666,356.462,998.882,0.318,0.0432184,2.39161,0.0475765,345.184,11.6939,4.85146,9.61481,11.2783,-0.0648443,11.2135, +Internal Node(5),15.05.2001 05:05:26,459358,-7.326e+06,2734.47,3.048e-07,357.588,10.0635,359.785,999.023,0.318,0.0423678,2.39161,0.0741314,349.304,11.6026,4.93274,10.5805,10.4802,-2.19704,8.2832, +Internal Node(5),17.09.2001 13:42:48,459358,-7.326e+06,2734.47,3.048e-07,359.328,10.0628,360.374,999.013,0.318,0.0417146,2.39161,0.0593903,348.711,11.5567,5.0128,9.06511,11.6633,-1.04563,10.6177, +Internal Node(5),20.01.2002 22:20:10,459358,-7.326e+06,2734.51,3.048e-07,361.086,10.0595,362.901,999.098,0.318,0.0402626,2.39161,0.0688252,350.535,11.4318,5.19014,10.6475,12.3656,-1.81517,10.5504, +Internal Node(5),26.05.2002 06:57:32,459358,-7.326e+06,2734.52,3.048e-07,362.578,10.0579,365.281,999.166,0.318,0.0389914,2.39161,0.0753108,351.486,11.3061,5.36254,11.0792,13.7947,-2.70312,11.0916, +Internal Node(5),28.09.2002 15:34:55,459358,-7.326e+06,2734.49,3.048e-07,363.563,10.0585,366.769,999.216,0.318,0.0379676,2.39161,0.0747325,351.01,11.2482,5.51907,11.2643,15.759,-3.20634,12.5527, +Internal Node(5),30.11.2002 07:53:36,459358,-7.326e+06,2734.51,3.048e-07,364.102,10.0576,368.483,999.242,0.318,0.0368683,2.39161,0.115331,351.675,11.1771,5.68531,11.7034,16.8076,-4.38084,12.4267, +Internal Node(5),01.02.2003 00:12:17,459358,-7.326e+06,2734.47,3.048e-07,363.353,10.0577,369.08,999.309,0.318,0.0364107,2.39161,0.0668593,351.032,11.1535,5.76891,11.9695,18.0481,-5.72774,12.3203, +Internal Node(5),04.04.2003 16:30:58,459358,-7.326e+06,2734.47,3.048e-07,365.151,10.0574,369.992,999.373,0.318,0.0359263,2.39161,0.13685,351.608,11.1235,5.8517,11.7353,18.3834,-4.84054,13.5428, +Internal Node(5),06.06.2003 08:49:39,459358,-7.326e+06,2734.47,3.048e-07,365.174,10.0567,370.421,999.298,0.318,0.035432,2.39161,0.136837,351.473,11.0991,5.93585,12.6589,18.9478,-5.24662,13.7012, +Internal Node(5),09.10.2003 17:27:02,459358,-7.326e+06,2734.46,3.048e-07,364.928,10.0566,370.845,999.378,0.318,0.0349705,2.39161,0.145103,350.92,11.088,6.01791,12.9048,19.9247,-5.91618,14.0085, +Internal Node(5),16.06.2004 10:41:46,459358,-7.326e+06,2734.46,3.048e-07,365.684,10.0559,371.753,999.313,0.318,0.0340456,2.39161,0.109362,350.826,11.0568,6.18552,13.1231,20.9271,-6.06918,14.858, +Internal Node(5),19.10.2004 19:19:08,459358,-7.326e+06,2734.46,3.048e-07,365.763,10.0547,372.939,999.318,0.318,0.0323146,2.39161,0.102837,349.785,11.0108,6.52704,13.9495,23.1546,-7.17597,15.9786, +Internal Node(5),27.06.2005 12:33:53,459358,-7.326e+06,2734.46,3.048e-07,365.83,10.0536,373.598,999.321,0.318,0.0314678,2.39161,0.100581,349.426,10.9818,6.70707,15.2057,24.1713,-7.76797,16.4034, +Internal Node(5),10.11.2006 23:03:22,459358,-7.326e+06,2734.46,3.048e-07,365.645,10.0523,374.404,999.313,0.318,0.029872,2.39161,0.0912202,348.376,10.9415,7.07283,15.9249,26.0276,-8.75875,17.2688, +Internal Node(5),01.12.2006,459358,-7.326e+06,2734.45,3.048e-07,364.724,10.0511,375.826,999.53,0.318,0.0272418,2.39161,0.133795,346.253,10.9051,7.77124,16.6853,29.5732,-11.1021,18.4711, +Internal Node(5),01.12.2006,459358,-7.326e+06,2734.45,3.048e-07,364.724,10.0511,375.826,999.53,0.318,0.0272418,2.39161,0.133795,346.253,10.9051,7.77124,16.6853,29.5732,-11.1021,18.4711, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Internal Node(6),09.12.1997 22:12:00,459352,-7.32599e+06,2733.44,0.131962,385.931,10.0776,380.455,1000.26,0.318,0.20373,194.084,1.1129,339.527,16.9676,0.957057,48.0199,40.9281,5.47616,46.4042, +Internal Node(6),05.02.1998 14:35:11,459352,-7.32599e+06,2733.44,3.048e-07,386.591,10.0603,388.055,1000.09,0.318,0.124586,2.39161,0.326516,349.205,13.399,1.66268,39.1807,38.8508,-1.46418,37.3866, +Internal Node(6),12.04.1998 23:29:05,459352,-7.32599e+06,2733.44,3.048e-07,386.967,10.0582,388.42,1000.22,0.318,0.10303,2.39161,0.316736,349.667,12.5356,2.01578,32.5085,38.7521,-1.45284,37.2993, +Internal Node(6),16.08.1998 08:06:27,459352,-7.32599e+06,2733.44,3.048e-07,369.407,10.0526,388.142,999.891,0.318,0.0784578,2.39161,0.244117,355.849,11.6582,2.65701,32.8009,32.2924,-18.7346,13.5578, +Internal Node(6),18.10.1998 00:25:09,459352,-7.32599e+06,2733.44,3.048e-07,358.657,10.0741,357.468,999.011,0.318,0.0699181,2.39161,0.234622,328.555,10.9328,3.02237,14.6196,28.9129,1.18877,30.1017, +Internal Node(6),19.12.1998 16:43:50,459352,-7.32599e+06,2733.44,3.048e-07,359.262,10.061,366.625,999.394,0.318,0.062961,2.39161,0.198897,346.752,10.5119,3.39146,27.643,19.8731,-7.36273,12.5104, +Internal Node(6),20.02.1999 09:02:31,459352,-7.32599e+06,2733.44,0.0385865,356.08,10.0673,353.954,998.865,0.318,0.0602972,4.85236,0.361373,332.536,10.6235,3.55929,15.3729,21.4184,2.12533,23.5437, +Internal Node(6),25.06.1999 17:39:53,459352,-7.32599e+06,2733.44,3.048e-07,356.521,10.061,360.63,999.279,0.318,0.0564725,2.39161,0.183992,345.743,10.4732,3.82594,22.6293,14.8869,-4.10957,10.7773, +Internal Node(6),27.08.1999 09:58:34,459352,-7.32599e+06,2733.44,0.0340385,348.866,10.0703,347.101,998.534,0.318,0.0538056,3.33088,0.292387,331.833,10.733,4.03815,11.5882,15.2686,1.7646,17.0332, +Internal Node(6),30.12.1999 18:35:56,459352,-7.32599e+06,2733.44,3.048e-07,345.854,10.0651,351.94,998.795,0.318,0.0517575,2.39161,0.140443,341.643,10.5845,4.2149,16.6787,10.2974,-6.08595,4.21143, +Internal Node(6),06.09.2000 11:50:41,459352,-7.32599e+06,2733.44,0.183483,352.305,10.0729,347.305,998.524,0.318,0.0496679,521.716,0.126389,337.27,10.7373,4.41392,9.08941,10.0349,4.99995,15.0348, +Internal Node(6),09.01.2001 20:28:03,459352,-7.32599e+06,2733.21,3.048e-07,356.745,10.0657,357.563,999.046,0.318,0.0459263,2.39161,0.12174,350.023,10.6112,4.87431,14.3367,7.54031,-0.817887,6.72242, +Internal Node(6),13.03.2001 12:46:44,459352,-7.32599e+06,2733.24,3.048e-07,356.391,10.0666,357.049,998.882,0.318,0.0447553,2.39161,0.104841,345.349,10.7207,5.01095,10.1907,11.7002,-0.658168,11.0421, +Internal Node(6),15.05.2001 05:05:26,459352,-7.32599e+06,2733.24,3.048e-07,357.55,10.0635,360.634,999.022,0.318,0.04402,2.39161,0.116518,349.534,10.5951,5.10484,11.1575,11.0992,-3.08391,8.01534, +Internal Node(6),17.09.2001 13:42:48,459352,-7.32599e+06,2733.24,3.048e-07,359.304,10.0628,361.311,999.012,0.318,0.0434073,2.39161,0.108514,348.862,10.5789,5.18564,9.60371,12.4491,-2.00668,10.4425, +Internal Node(6),20.01.2002 22:20:10,459352,-7.32599e+06,2733.24,3.048e-07,361.044,10.0595,363.881,999.096,0.318,0.0420907,2.39161,0.1098,350.773,10.5094,5.36619,11.1408,13.1086,-2.83695,10.2716, +Internal Node(6),26.05.2002 06:57:32,459352,-7.32599e+06,2733.24,3.048e-07,362.531,10.0579,366.257,999.164,0.318,0.040906,2.39161,0.114274,351.741,10.4891,5.5383,11.5276,14.5156,-3.72539,10.7902, +Internal Node(6),28.09.2002 15:34:55,459352,-7.32599e+06,2733.24,3.048e-07,363.54,10.0585,367.685,999.214,0.318,0.0399151,2.39161,0.122142,351.203,10.5195,5.68983,11.7388,16.4817,-4.14529,12.3364, +Internal Node(6),30.11.2002 07:53:36,459352,-7.32599e+06,2733.24,3.048e-07,364.127,10.0576,369.384,999.243,0.318,0.038874,2.39161,0.176848,351.882,10.4975,5.85626,12.1314,17.502,-5.25723,12.2448, +Internal Node(6),01.02.2003 00:12:17,459352,-7.32599e+06,2733.24,3.048e-07,363.3,10.0577,369.954,999.313,0.318,0.0384073,2.39161,0.100743,351.21,10.5118,5.9336,12.4474,18.7441,-6.65451,12.0896, +Internal Node(6),04.04.2003 16:30:58,459352,-7.32599e+06,2733.24,3.048e-07,365.257,10.0574,370.851,999.376,0.318,0.0379291,2.39161,0.214924,351.801,10.5003,6.01494,12.1681,19.0497,-5.59393,13.4558, +Internal Node(6),06.06.2003 08:49:39,459352,-7.32599e+06,2733.24,3.048e-07,365.293,10.0567,371.268,999.304,0.318,0.0374417,2.39161,0.217446,351.673,10.492,6.09937,13.1196,19.5952,-5.97503,13.6201, +Internal Node(6),09.10.2003 17:27:02,459352,-7.32599e+06,2733.24,3.048e-07,365.044,10.0566,371.68,999.381,0.318,0.0369825,2.39161,0.224977,351.11,10.4976,6.1808,13.3538,20.57,-6.6361,13.9339, +Internal Node(6),16.06.2004 10:41:46,459352,-7.32599e+06,2733.24,3.048e-07,365.794,10.0559,372.564,999.319,0.318,0.036066,2.39161,0.190501,351.028,10.4843,6.34946,13.5612,21.5365,-6.76971,14.7668, +Internal Node(6),19.10.2004 19:19:08,459352,-7.32599e+06,2733.24,3.048e-07,365.872,10.0547,373.693,999.324,0.318,0.0343375,2.39161,0.183495,349.981,10.4694,6.69087,14.3063,23.7122,-7.82059,15.8916, +Internal Node(6),27.06.2005 12:33:53,459352,-7.32599e+06,2733.24,3.048e-07,365.938,10.0536,374.33,999.327,0.318,0.0334869,2.39161,0.181398,349.637,10.4518,6.87124,15.5585,24.6929,-8.39198,16.3009, +Internal Node(6),10.11.2006 23:03:22,459352,-7.32599e+06,2733.24,3.048e-07,365.744,10.0523,375.086,999.317,0.318,0.0318783,2.39161,0.16972,348.591,10.4324,7.23824,16.2418,26.4945,-9.34177,17.1527, +Internal Node(6),01.12.2006,459352,-7.32599e+06,2733.24,3.048e-07,364.843,10.0511,376.403,999.529,0.318,0.0291921,2.39161,0.214326,346.426,10.4284,7.94039,16.9757,29.977,-11.5601,18.4169, +Internal Node(6),01.12.2006,459352,-7.32599e+06,2733.24,3.048e-07,364.843,10.0511,376.403,999.529,0.318,0.0291921,2.39161,0.214326,346.426,10.4284,7.94039,16.9757,29.977,-11.5601,18.4169, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Internal Node(7),09.12.1997 22:12:00,459351,-7.32598e+06,2734.17,0.169464,385.987,10.0776,376.53,1000.26,0.318,0.220516,411.033,0.226949,337.087,15.3397,0.87916,51.7342,39.4436,9.45675,48.9003, +Internal Node(7),05.02.1998 14:35:11,459350,-7.32598e+06,2734.21,0.0206445,386.38,10.0603,384.541,1000.09,0.318,0.125307,2.39161,0.130001,348.275,12.482,1.64086,43.232,36.2659,1.8384,38.1043, +Internal Node(7),12.04.1998 23:29:05,459349,-7.32598e+06,2734.04,3.048e-07,386.776,10.0582,386.219,1000.21,0.318,0.103608,2.39161,0.14921,350.144,12.34,1.98878,34.0057,36.0751,0.556448,36.6315, +Internal Node(7),16.08.1998 08:06:27,459349,-7.32598e+06,2733.74,3.048e-07,369.196,10.0526,386.44,999.891,0.318,0.0805228,2.39161,0.127789,355.773,12.2175,2.56489,33.3523,30.6678,-17.2443,13.4235, +Internal Node(7),18.10.1998 00:25:09,459348,-7.32598e+06,2733.71,0.00472588,358.444,10.0741,356.851,999.002,0.318,0.0715,2.39161,0.112042,328.641,11.9588,2.90109,14.1143,28.2107,1.59262,29.8033, +Internal Node(7),19.12.1998 16:43:50,459348,-7.32598e+06,2733.58,3.048e-07,359.047,10.061,366.003,999.394,0.318,0.0650923,2.39161,0.102699,346.636,11.7486,3.19542,26.3857,19.3676,-6.95646,12.4112, +Internal Node(7),20.02.1999 09:02:31,459347,-7.32597e+06,2733.56,0.0453814,355.945,10.0673,353.684,998.858,0.318,0.0624211,7.89371,0.105345,332.493,11.8605,3.33453,14.5161,21.1916,2.26047,23.452, +Internal Node(7),25.06.1999 17:39:53,459347,-7.32597e+06,2733.39,3.048e-07,356.36,10.061,360.505,999.279,0.318,0.0595382,2.39161,0.0905616,345.528,11.8876,3.49597,20.9943,14.9774,-4.14531,10.8321, +Internal Node(7),27.08.1999 09:58:34,459346,-7.32597e+06,2733.38,0.0332827,348.686,10.0703,347.238,998.526,0.318,0.0563898,3.11389,0.0630204,331.611,11.9471,3.69395,10.7375,15.627,1.44873,17.0757, +Internal Node(7),30.12.1999 18:35:56,459346,-7.32597e+06,2733.36,3.048e-07,345.73,10.0651,351.971,998.793,0.318,0.0543666,2.39161,0.0838693,341.348,11.8543,3.81704,15.2874,10.6235,-6.24064,4.38282, +Internal Node(7),06.09.2000 11:50:41,459345,-7.32597e+06,2733.36,0.188308,352.295,10.0729,347.346,998.518,0.318,0.0521772,563.966,0.0241813,337.037,11.9445,3.95314,8.25614,10.3089,4.9495,15.2584, +Internal Node(7),09.01.2001 20:28:03,459345,-7.32597e+06,2733.21,3.048e-07,356.659,10.0657,356.676,999.046,0.318,0.0467915,2.39161,0.0692254,349.661,10.9927,4.4636,14.2304,7.01536,-0.0168571,6.9985, +Internal Node(7),13.03.2001 12:46:44,459345,-7.32597e+06,2733.21,0.00578402,356.29,10.0666,356.237,998.877,0.318,0.0455981,2.39161,0.043811,345.372,10.7287,4.60995,9.82988,10.8653,0.0526207,10.9179, +Internal Node(7),15.05.2001 05:05:26,459344,-7.32597e+06,2733.22,3.048e-07,357.461,10.0635,359.706,999.018,0.318,0.0447675,2.39161,0.0678343,349.475,10.5701,4.69466,10.792,10.231,-2.24518,7.98582, +Internal Node(7),17.09.2001 13:42:48,459344,-7.32597e+06,2733.22,3.048e-07,359.212,10.0628,360.326,999.008,0.318,0.0440663,2.39161,0.0536857,348.805,10.5433,4.78375,9.21885,11.5207,-1.11395,10.4067, +Internal Node(7),20.01.2002 22:20:10,459344,-7.32597e+06,2733.22,3.048e-07,360.962,10.0595,362.831,999.092,0.318,0.0424928,2.39161,0.0624018,350.734,10.484,4.98601,10.8178,12.0968,-1.86905,10.2277, +Internal Node(7),26.05.2002 06:57:32,459344,-7.32597e+06,2733.22,3.048e-07,362.449,10.0579,365.106,999.16,0.318,0.0411077,2.39161,0.068035,351.725,10.4828,5.17473,11.1749,13.3807,-2.65723,10.7235, +Internal Node(7),28.09.2002 15:34:55,459344,-7.32597e+06,2733.23,3.048e-07,363.442,10.0585,366.406,999.21,0.318,0.0400255,2.39161,0.0685913,351.166,10.4987,5.3371,11.4475,15.2398,-2.96394,12.2759, +Internal Node(7),30.11.2002 07:53:36,459344,-7.32597e+06,2733.23,3.048e-07,363.977,10.0576,367.98,999.236,0.318,0.0388425,2.39161,0.106529,351.823,10.4884,5.51653,11.9199,16.1564,-4.00216,12.1542, +Internal Node(7),01.02.2003 00:12:17,459344,-7.32597e+06,2733.24,3.048e-07,363.23,10.0577,368.498,999.304,0.318,0.0383642,2.39161,0.0615243,351.146,10.487,5.59952,12.2355,17.3517,-5.26811,12.0836, +Internal Node(7),04.04.2003 16:30:58,459344,-7.32597e+06,2733.24,3.048e-07,365.039,10.0574,369.359,999.368,0.318,0.0378439,2.39161,0.129662,351.735,10.4739,5.68651,11.9909,17.6245,-4.32006,13.3045, +Internal Node(7),06.06.2003 08:49:39,459344,-7.32597e+06,2733.24,3.048e-07,365.064,10.0567,369.709,999.294,0.318,0.0372855,2.39161,0.130549,351.605,10.4739,5.77733,12.9244,18.1037,-4.64509,13.4586, +Internal Node(7),09.10.2003 17:27:02,459344,-7.32597e+06,2733.24,3.048e-07,364.814,10.0566,370.069,999.373,0.318,0.0367953,2.39161,0.137094,351.055,10.4749,5.86423,13.1767,19.0141,-5.25465,13.7594, +Internal Node(7),16.06.2004 10:41:46,459344,-7.32597e+06,2733.24,3.048e-07,365.589,10.0559,370.841,999.309,0.318,0.0357885,2.39161,0.107144,350.963,10.4676,6.04346,13.3778,19.8782,-5.25211,14.6261, +Internal Node(7),19.10.2004 19:19:08,459344,-7.32597e+06,2733.24,3.048e-07,365.673,10.0547,371.747,999.314,0.318,0.0339184,2.39161,0.101794,349.911,10.4564,6.40604,14.201,21.8354,-6.07379,15.7616, +Internal Node(7),27.06.2005 12:33:53,459344,-7.32597e+06,2733.24,3.048e-07,365.741,10.0536,372.254,999.317,0.318,0.0330049,2.39161,0.100071,349.556,10.4445,6.5969,15.4855,22.6979,-6.51224,16.1857, +Internal Node(7),10.11.2006 23:03:22,459344,-7.32597e+06,2733.24,3.048e-07,365.557,10.0523,372.741,999.308,0.318,0.0312509,2.39161,0.0909793,348.494,10.4372,6.98515,16.1783,24.2462,-7.1833,17.0629, +Internal Node(7),01.12.2006,459344,-7.32597e+06,2733.25,3.048e-07,364.612,10.0511,373.718,999.525,0.318,0.0284346,2.39161,0.130425,346.302,10.4249,7.72891,16.983,27.4164,-9.10629,18.3101, +Internal Node(7),01.12.2006,459344,-7.32597e+06,2733.25,3.048e-07,364.612,10.0511,373.718,999.525,0.318,0.0284346,2.39161,0.130425,346.302,10.4249,7.72891,16.983,27.4164,-9.10629,18.3101, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Internal Node(8),09.12.1997 22:12:00,459350,-7.32598e+06,2735.3,0.207334,386.095,10.0776,369.644,1000.26,0.318,0.249486,752.757,0.108061,334.324,11.5588,0.771705,57.195,35.32,16.4506,51.7705, +Internal Node(8),05.02.1998 14:35:11,459348,-7.32597e+06,2735.11,0.065619,386.418,10.0603,379.434,1000.09,0.318,0.0781112,23.8636,0.27663,347.434,10.1114,1.59876,48.2663,32,6.98385,38.9839, +Internal Node(8),12.04.1998 23:29:05,459347,-7.32597e+06,2735.45,0.0267018,386.789,10.0582,381.785,1000.21,0.318,0.0859317,2.39161,0.0977124,350.598,10.14,1.92412,37.0356,31.1871,5.00322,36.1903, +Internal Node(8),16.08.1998 08:06:27,459345,-7.32597e+06,2735.55,3.048e-07,369.284,10.0526,381.529,999.891,0.318,0.0719084,2.39161,0.0673825,356.011,10.1051,2.56552,37.3445,25.5181,-12.2445,13.2736, +Internal Node(8),18.10.1998 00:25:09,459345,-7.32597e+06,2735.48,0.0360707,358.508,10.0741,352.848,999.007,0.318,0.0711332,3.96379,0.0946795,329.102,10.159,2.93941,15.1658,23.7452,5.66069,29.4059, +Internal Node(8),19.12.1998 16:43:50,459344,-7.32597e+06,2735.54,3.048e-07,359.155,10.061,361.781,999.394,0.318,0.0635138,2.39161,0.0600427,347.026,10.1009,3.32328,29.1604,14.755,-2.62579,12.1292, +Internal Node(8),20.02.1999 09:02:31,459343,-7.32597e+06,2735.27,0.0843104,356.074,10.0673,349.557,998.864,0.318,0.0590981,50.6162,0.107326,332.834,10.1511,3.5441,16.0674,16.7234,6.51736,23.2407, +Internal Node(8),25.06.1999 17:39:53,459342,-7.32596e+06,2735.42,3.048e-07,356.49,10.061,356.196,999.279,0.318,0.055543,2.39161,0.0447897,345.829,10.1127,3.81432,23.7829,10.3678,0.29328,10.6611, +Internal Node(8),27.08.1999 09:58:34,459341,-7.32596e+06,2734.53,0.0613963,348.741,10.0703,343.295,998.529,0.318,0.0495116,19.5467,0.106391,331.699,10.2763,4.15068,12.1566,11.5968,5.44605,17.0429, +Internal Node(8),30.12.1999 18:35:56,459340,-7.32596e+06,2734.91,3.048e-07,345.832,10.0651,348.226,998.8,0.318,0.0483649,2.39161,0.0371152,341.498,10.134,4.32927,17.5153,6.7287,-2.39404,4.33467, +Internal Node(8),06.09.2000 11:50:41,459339,-7.32596e+06,2734.54,0.229516,352.41,10.0729,344.136,998.521,0.318,0.0449619,1021.15,0.0363531,337.229,10.1885,4.6006,9.43402,6.90707,8.27414,15.1812, +Internal Node(8),09.01.2001 20:28:03,459338,-7.32595e+06,2734.99,0.0335974,356.794,10.0657,354.581,999.054,0.318,0.0409562,3.20303,0.033715,349.369,10.1453,5.18081,15.7926,5.21284,2.21248,7.42532, +Internal Node(8),13.03.2001 12:46:44,459338,-7.32595e+06,2735.41,0.0684282,356.472,10.0666,353.56,998.886,0.318,0.0411503,27.0614,0.0845605,345.11,10.1687,5.2631,10.8732,8.45021,2.91122,11.3614, +Internal Node(8),15.05.2001 05:05:26,459337,-7.32595e+06,2735.6,3.048e-07,357.635,10.0635,356.913,999.027,0.318,0.0411262,2.39161,0.0298617,349.061,10.137,5.34276,11.8732,7.85191,0.722097,8.57401, +Internal Node(8),17.09.2001 13:42:48,459337,-7.32595e+06,2735.78,0.0545449,359.431,10.0628,357.439,999.018,0.318,0.0410501,13.7059,0.0615988,348.581,10.1372,5.40534,10.0435,8.85847,1.99219,10.8507, +Internal Node(8),20.01.2002 22:20:10,459337,-7.32595e+06,2735.91,0.0437939,361.199,10.0595,359.79,999.103,0.318,0.0401158,7.09395,0.044211,350.555,10.12,5.57315,11.639,9.23546,1.40869,10.6441, +Internal Node(8),26.05.2002 06:57:32,459337,-7.32595e+06,2736.06,0.0261326,362.703,10.0579,361.874,999.172,0.318,0.0392884,2.39161,0.0226808,351.709,10.1133,5.73901,11.8298,10.1647,0.829151,10.9939, +Internal Node(8),28.09.2002 15:34:55,459337,-7.32595e+06,2736.21,0.0420487,363.708,10.0585,362.813,999.222,0.318,0.0386421,6.27919,0.0434886,351.218,10.1159,5.8868,11.9676,11.5954,0.895095,12.4904, +Internal Node(8),30.11.2002 07:53:36,459337,-7.32595e+06,2736.34,0.0178287,364.243,10.0576,364.1,999.248,0.318,0.0378957,2.39161,0.0347597,351.885,10.1091,6.0492,12.429,12.2148,0.142973,12.3578, +Internal Node(8),01.02.2003 00:12:17,459337,-7.32595e+06,2736.46,3.048e-07,363.524,10.0577,364.33,999.316,0.318,0.0377551,2.39161,0.0197981,351.23,10.1111,6.11334,12.6912,13.0998,-0.80645,12.2934, +Internal Node(8),04.04.2003 16:30:58,459337,-7.32595e+06,2736.54,0.0350552,365.301,10.0574,365.047,999.381,0.318,0.0374495,3.63835,0.0566438,351.801,10.1083,6.18946,12.4371,13.2457,0.25394,13.4997, +Internal Node(8),06.06.2003 08:49:39,459337,-7.32595e+06,2736.59,0.0352698,365.329,10.0567,365.255,999.306,0.318,0.0370835,3.70556,0.0570175,351.693,10.1049,6.27219,13.3861,13.5627,0.0738967,13.6366, +Internal Node(8),09.10.2003 17:27:02,459337,-7.32595e+06,2736.63,0.0161457,365.086,10.0566,365.4,999.387,0.318,0.036714,2.39161,0.0452594,351.163,10.1052,6.35253,13.618,14.2366,-0.314004,13.9226, +Internal Node(8),16.06.2004 10:41:46,459337,-7.32595e+06,2736.67,0.0477479,365.862,10.0559,365.913,999.321,0.318,0.0358128,9.1941,0.083418,351.066,10.1023,6.52829,13.7932,14.847,-0.051424,14.7956, +Internal Node(8),19.10.2004 19:19:08,459337,-7.32595e+06,2736.7,0.0516298,365.949,10.0547,366.285,999.327,0.318,0.0340163,11.6238,0.090694,350.022,10.0985,6.89254,14.6552,16.2634,-0.335496,15.9279, +Internal Node(8),27.06.2005 12:33:53,459337,-7.32595e+06,2736.72,0.0537688,366.02,10.0536,366.523,999.33,0.318,0.0331624,13.1292,0.095316,349.655,10.0944,7.08356,15.973,16.8677,-0.503468,16.3642, +Internal Node(8),10.11.2006 23:03:22,459337,-7.32595e+06,2736.73,0.0571202,365.842,10.0523,366.616,999.322,0.318,0.0314701,15.7404,0.0948669,348.6,10.0908,7.4784,16.6764,18.016,-0.774094,17.2419, +Internal Node(8),01.12.2006,459337,-7.32595e+06,2736.76,0.0069666,364.907,10.0511,366.734,999.54,0.318,0.0286778,2.39161,0.0403045,346.387,10.0895,8.23393,17.4637,20.3475,-1.82764,18.5199, +Internal Node(8),01.12.2006,459337,-7.32595e+06,2736.76,0.0069666,364.907,10.0511,366.734,999.54,0.318,0.0286778,2.39161,0.0403045,346.387,10.0895,8.23393,17.4637,20.3475,-1.82764,18.5199, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Internal Node(9),09.12.1997 22:12:00,459351,-7.32598e+06,2736.55,0.221549,386.22,10.0776,372.792,1000.27,0.318,0.222499,918.453,0.235087,336.022,12.5144,0.870789,54.8679,36.7693,13.4287,50.198, +Internal Node(9),05.02.1998 14:35:11,459350,-7.32598e+06,2737.1,0.0530061,386.639,10.0603,382.506,1000.09,0.318,0.137315,12.5784,0.456343,347.507,10.4396,1.5071,45.9194,34.9988,4.13277,39.1316, +Internal Node(9),12.04.1998 23:29:05,459350,-7.32598e+06,2737.74,0.0087455,387.098,10.0582,384.748,1000.23,0.318,0.120095,2.39161,0.184355,349.897,10.223,1.74716,36.8014,34.8515,2.35026,37.2017, +Internal Node(9),16.08.1998 08:06:27,459349,-7.32598e+06,2738.55,3.048e-07,369.68,10.0526,385.509,999.891,0.318,0.0985657,2.39161,0.152126,356.452,10.0972,2.26202,36.8676,29.0569,-15.829,13.2279, +Internal Node(9),18.10.1998 00:25:09,459349,-7.32598e+06,2738.38,0.0139745,358.869,10.0741,356.317,999.023,0.318,0.0843366,2.39161,0.148867,329.424,10.1347,2.70503,15.3447,26.8933,2.55223,29.4456, +Internal Node(9),19.12.1998 16:43:50,459348,-7.32598e+06,2738.43,3.048e-07,359.527,10.061,365.162,999.394,0.318,0.0760459,2.39161,0.132001,347.495,10.0898,3.06869,29.1205,17.667,-5.63477,12.0322, +Internal Node(9),20.02.1999 09:02:31,459348,-7.32597e+06,2738.36,0.075995,356.411,10.0673,352.54,998.88,0.318,0.0723101,37.0682,0.235001,333.174,10.1183,3.24622,16.2362,19.3656,3.87133,23.237, +Internal Node(9),25.06.1999 17:39:53,459347,-7.32597e+06,2738.77,3.048e-07,356.894,10.061,359.148,999.279,0.318,0.0709648,2.39161,0.113231,346.425,10.0904,3.4311,23.606,12.7227,-2.25391,10.4688, +Internal Node(9),27.08.1999 09:58:34,459347,-7.32597e+06,2738.72,0.0761697,349.204,10.0703,345.397,998.55,0.318,0.0664459,37.3244,0.185229,332.504,10.1236,3.69422,12.1561,12.8927,3.80728,16.6999, +Internal Node(9),30.12.1999 18:35:56,459347,-7.32597e+06,2738.56,3.048e-07,346.26,10.0651,350.038,998.805,0.318,0.062874,2.39161,0.110721,342.36,10.1003,3.90596,17.1971,7.67766,-3.77813,3.89954, +Internal Node(9),06.09.2000 11:50:41,459345,-7.32597e+06,2738.39,0.285347,352.788,10.0729,345.038,998.54,0.318,0.060171,1962.29,0.043403,337.856,10.1277,4.11181,9.46312,7.18154,7.74989,14.9314, +Internal Node(9),09.01.2001 20:28:03,459345,-7.32597e+06,2739.59,0.0472878,357.288,10.0657,355.116,999.075,0.318,0.0597687,8.93085,0.169867,350.529,10.1281,4.57539,15.1003,4.58761,2.17118,6.75879, +Internal Node(9),13.03.2001 12:46:44,459346,-7.32597e+06,2739.79,0.0702965,356.925,10.0666,354.017,998.907,0.318,0.0591922,29.3391,0.211388,346.599,10.1431,4.68639,10.0314,7.41788,2.90807,10.326, +Internal Node(9),15.05.2001 05:05:26,459345,-7.32597e+06,2740.08,3.048e-07,358.134,10.0635,357.408,999.049,0.318,0.0603161,2.39161,0.0884524,350.634,10.1172,4.73409,10.321,6.77395,0.725388,7.49934, +Internal Node(9),17.09.2001 13:42:48,459345,-7.32597e+06,2740.08,0.0570879,359.878,10.0628,357.711,999.039,0.318,0.0593806,15.7137,0.17534,349.87,10.1122,4.81254,8.87871,7.84046,2.1671,10.0076, +Internal Node(9),20.01.2002 22:20:10,459345,-7.32597e+06,2740.38,0.042276,361.656,10.0595,360.021,999.124,0.318,0.0201279,6.38159,0.119182,351.937,10.095,4.95129,10.4451,8.08395,1.63476,9.7187, +Internal Node(9),26.05.2002 06:57:32,459345,-7.32597e+06,2740.81,0.0287715,363.187,10.0579,361.893,999.194,0.318,0.0205419,2.39161,0.0668699,353.068,10.0854,5.06034,10.7029,8.8248,1.29469,10.1195, +Internal Node(9),28.09.2002 15:34:55,459345,-7.32597e+06,2741.06,0.0465175,364.2,10.0585,362.675,999.245,0.318,0.0205775,8.50149,0.0869465,352.502,10.0843,5.17559,10.9753,10.173,1.52561,11.6987, +Internal Node(9),30.11.2002 07:53:36,459345,-7.32597e+06,2741.44,0.0240284,364.767,10.0576,363.863,999.273,0.318,0.0209793,2.39161,0.0539611,353.212,10.0783,5.28673,11.4243,10.6507,0.903968,11.5546, +Internal Node(9),01.02.2003 00:12:17,459345,-7.32597e+06,2741.54,3.048e-07,364.034,10.0577,364.057,999.34,0.318,0.0209195,2.39161,0.0756616,352.514,10.0782,5.35096,11.8221,11.5429,-0.0226979,11.5202, +Internal Node(9),04.04.2003 16:30:58,459345,-7.32597e+06,2741.55,0.0387507,365.815,10.0574,364.822,999.405,0.318,0.0206563,4.91456,0.0685886,353.097,10.0777,5.43025,11.5909,11.7254,0.992757,12.7182, +Internal Node(9),06.06.2003 08:49:39,459345,-7.32597e+06,2741.75,0.0401634,365.854,10.0567,364.97,999.33,0.318,0.0209137,5.4719,0.0690805,353.023,10.0744,5.48577,12.4782,11.9474,0.883627,12.831, +Internal Node(9),09.10.2003 17:27:02,459345,-7.32597e+06,2741.78,0.0176101,365.613,10.0566,365.092,999.411,0.318,0.0207147,2.39161,0.0453838,352.461,10.0742,5.56169,12.7368,12.6312,0.521259,13.1525, +Internal Node(9),16.06.2004 10:41:46,459345,-7.32597e+06,2741.87,0.0515656,366.383,10.0559,365.598,999.346,0.318,0.0203762,11.5805,0.0958121,352.393,10.0724,5.71705,12.9217,13.2044,0.785588,13.9899, +Internal Node(9),19.10.2004 19:19:08,459345,-7.32597e+06,2741.95,0.0520401,366.472,10.0547,365.962,999.351,0.318,0.01947,11.9031,0.0941348,351.357,10.07,6.04772,13.7207,14.605,0.509872,15.1149, +Internal Node(9),27.06.2005 12:33:53,459345,-7.32597e+06,2742.01,0.0517078,366.544,10.0536,366.201,999.355,0.318,0.0190793,11.6765,0.0917788,351.022,10.0674,6.21945,15.0058,15.1793,0.342969,15.5223, +Internal Node(9),10.11.2006 23:03:22,459345,-7.32597e+06,2742.28,0.0565718,366.39,10.0523,366.12,999.347,0.318,0.0188032,15.2913,0.0989928,350.03,10.0634,6.54212,15.6722,16.0892,0.270663,16.3599, +Internal Node(9),01.12.2006,459345,-7.32597e+06,2742.34,3.048e-07,365.459,10.0511,366.243,999.566,0.318,0.0171634,2.39161,0.0391359,347.821,10.062,7.23544,16.4591,18.4227,-0.78478,17.6379, +Internal Node(9),01.12.2006,459345,-7.32597e+06,2742.34,3.048e-07,365.459,10.0511,366.243,999.566,0.318,0.0171634,2.39161,0.0391359,347.821,10.062,7.23544,16.4591,18.4227,-0.78478,17.6379, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Internal Node(10),09.12.1997 22:12:00,459353,-7.32599e+06,2740.51,0.161352,386.634,10.0895,379.018,1000.29,0.318,0.318088,354.791,1.17106,334.038,15.7196,0.622336,49.2388,44.98,7.61542,52.5954, +Internal Node(10),05.02.1998 14:35:11,459353,-7.32599e+06,2740.72,0.0232669,388.238,10.0655,386.432,1000.09,0.318,0.00934614,2.39161,0.703806,346.858,10.6169,1.09687,44.4064,39.5742,1.80564,41.3798, +Internal Node(10),12.04.1998 23:29:05,459353,-7.32599e+06,2741.05,3.048e-07,388.765,10.0646,388.396,1000.3,0.318,0.0122335,2.39161,0.620286,349.13,10.2312,1.31068,37.0376,39.2664,0.369449,39.6358, +Internal Node(10),16.08.1998 08:06:27,459353,-7.32599e+06,2741.59,3.048e-07,371.236,10.0568,389.162,999.891,0.318,0.0151829,2.39161,0.53406,356.494,10.0881,1.79603,36.8802,32.668,-17.9266,14.7414, +Internal Node(10),18.10.1998 00:25:09,459353,-7.32599e+06,2741.59,3.048e-07,360.476,10.0994,359.859,999.096,0.318,0.0252105,2.39161,0.510532,329.5,10.1077,2.18743,15.6661,30.3585,0.617175,30.9757, +Internal Node(10),19.12.1998 16:43:50,459353,-7.32599e+06,2741.66,3.048e-07,361.087,10.075,368.418,999.394,0.318,0.0224825,2.39161,0.478762,347.411,10.077,2.52893,29.7355,21.0071,-7.3304,13.6767, +Internal Node(10),20.02.1999 09:02:31,459353,-7.32599e+06,2741.66,0.0489735,357.465,10.0872,355.54,998.932,0.318,0.0261814,9.92038,1.26399,333.382,10.0883,2.7015,16.5479,22.1579,1.92447,24.0824, +Internal Node(10),25.06.1999 17:39:53,459353,-7.32599e+06,2742.83,3.048e-07,358.556,10.0755,362.392,999.279,0.318,0.0299478,2.39161,0.394905,346.743,10.0683,2.68078,23.9397,15.6485,-3.83587,11.8127, +Internal Node(10),27.08.1999 09:58:34,459353,-7.32599e+06,2742.63,0.0628677,350.127,10.093,347.637,998.591,0.318,0.0348085,20.986,1.43001,333.266,10.0817,3.01491,12.0546,14.3718,2.48923,16.861, +Internal Node(10),30.12.1999 18:35:56,459354,-7.32598e+06,2743.79,3.048e-07,348.025,10.0833,352.63,998.805,0.318,0.0418072,2.39161,0.34171,343.493,10.0648,2.96499,16.9177,9.13792,-4.60592,4.532, +Internal Node(10),06.09.2000 11:50:41,459354,-7.32598e+06,2744.59,0.24694,353.404,10.0982,347.077,998.588,0.318,0.0474907,1271.81,0.269256,339.027,10.0631,3.05732,9.46115,8.04995,6.32699,14.3769, +Internal Node(10),09.01.2001 20:28:03,459354,-7.32598e+06,2748.19,0.0315339,359.442,10.0855,357.111,999.115,0.318,0.0750963,2.64838,0.284416,351.929,10.0799,2.74023,12.5253,5.18175,2.3312,7.51296, +Internal Node(10),13.03.2001 12:46:44,459354,-7.32598e+06,2748.19,0.032169,358.958,10.0874,356.472,999.002,0.318,0.0713853,2.81165,0.337966,350.082,10.0595,2.9442,8.03916,6.38923,2.48614,8.87537, +Internal Node(10),15.05.2001 05:05:26,459354,-7.32598e+06,2748.19,3.048e-07,360.306,10.0819,359.454,999.135,0.318,0.0693025,2.39161,0.251099,353.821,10.0526,3.05905,8.33326,5.63349,0.852048,6.48554, +Internal Node(10),17.09.2001 13:42:48,459354,-7.32598e+06,2748.19,0.0458575,361.793,10.0809,359.156,999.136,0.318,0.0675764,8.14472,0.557788,352.601,10.0505,3.15766,7.60309,6.55506,2.63674,9.1918, +Internal Node(10),20.01.2002 22:20:10,459354,-7.32598e+06,2749.87,0.038509,363.947,10.0749,362.072,999.234,0.318,0.0774373,4.82319,0.395935,355.585,10.0484,2.93514,8.34499,6.48792,1.87491,8.36282, +Internal Node(10),26.05.2002 06:57:32,459354,-7.32598e+06,2751.45,0.0406985,365.566,10.0724,364.164,999.309,0.318,0.0335972,5.69354,0.376148,357.291,10.0451,2.7725,8.30755,6.87261,1.40184,8.27445, +Internal Node(10),28.09.2002 15:34:55,459354,-7.32598e+06,2751.47,0.0549603,366.03,10.0738,364.266,999.332,0.318,0.0320277,14.0215,0.483762,356.219,10.0434,2.96934,9.04749,8.0468,1.7637,9.81049, +Internal Node(10),30.11.2002 07:53:36,459355,-7.32598e+06,2752.74,0.0476972,366.635,10.0723,365.407,999.36,0.318,0.0370448,9.16482,0.169818,357.187,10.0426,2.87216,9.19558,8.21961,1.22843,9.44804, +Internal Node(10),01.02.2003 00:12:17,459355,-7.32598e+06,2752.74,3.048e-07,366.505,10.0727,365.211,999.393,0.318,0.0361588,2.39161,0.211428,356.264,10.0423,2.96386,9.7629,8.94732,1.29423,10.2415, +Internal Node(10),04.04.2003 16:30:58,459355,-7.32598e+06,2752.74,0.0616791,367.364,10.0723,365.764,999.455,0.318,0.0352848,19.818,0.259515,356.85,10.0421,3.05771,9.67812,8.91396,1.60056,10.5145, +Internal Node(10),06.06.2003 08:49:39,459355,-7.32598e+06,2753.01,0.0640748,367.23,10.0711,365.784,999.392,0.318,0.0360555,22.2182,0.227066,356.762,10.0419,3.08854,10.282,9.02258,1.44599,10.4686, +Internal Node(10),09.10.2003 17:27:02,459355,-7.32598e+06,2753.01,0.0523319,367.119,10.071,365.575,999.461,0.318,0.035248,12.1045,0.228464,356.066,10.0417,3.17686,10.5627,9.50882,1.54486,11.0537, +Internal Node(10),16.06.2004 10:41:46,459355,-7.32598e+06,2753.01,0.0839571,367.581,10.07,365.737,999.402,0.318,0.0336988,49.9826,0.168205,355.982,10.0415,3.35684,10.8406,9.75489,1.8439,11.5988, +Internal Node(10),19.10.2004 19:19:08,459355,-7.32598e+06,2753.01,0.0957065,367.618,10.0682,365.422,999.405,0.318,0.0310176,74.0406,0.142745,354.844,10.0412,3.70804,11.5389,10.5779,2.19623,12.7741, +Internal Node(10),27.06.2005 12:33:53,459355,-7.32598e+06,2753.01,0.100787,367.67,10.0665,365.405,999.407,0.318,0.029803,86.4687,0.129207,354.437,10.0406,3.8855,12.8314,10.968,2.26494,13.233, +Internal Node(10),10.11.2006 23:03:22,459355,-7.32598e+06,2753.01,0.103807,367.476,10.0645,365.122,999.398,0.318,0.0276242,94.4767,0.087062,353.37,10.0401,4.2411,13.5431,11.7521,2.35428,14.1064, +Internal Node(10),01.12.2006,459355,-7.32598e+06,2753.01,0.0379535,366.588,10.0632,364.6,999.611,0.318,0.0242923,4.61745,0.0569815,351.111,10.0395,4.90258,14.3762,13.4889,1.9882,15.4771, +Internal Node(10),01.12.2006,459355,-7.32598e+06,2753.01,0.0379535,366.588,10.0632,364.6,999.611,0.318,0.0242923,4.61745,0.0569815,351.111,10.0395,4.90258,14.3762,13.4889,1.9882,15.4771, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Internal Node(11),09.12.1997 22:12:00,459354,-7.32599e+06,2740.33,0.162178,386.605,10.0895,379.599,1000.29,0.318,0.319352,360.264,0.689354,333.668,16.4046,0.617624,48.8293,45.9311,7.00526,52.9364, +Internal Node(11),05.02.1998 14:35:11,459354,-7.32599e+06,2740.44,0.0189981,387.422,10.0655,386.416,1000.09,0.318,0.193647,2.39161,0.590091,346.692,10.7833,1.10718,44.4901,39.7236,1.00642,40.7301, +Internal Node(11),12.04.1998 23:29:05,459355,-7.32599e+06,2740.82,3.048e-07,387.872,10.0646,388.206,1000.26,0.318,0.0120829,2.39161,0.487322,348.707,10.31,1.31017,36.9141,39.4991,-0.334299,39.1648, +Internal Node(11),16.08.1998 08:06:27,459355,-7.32599e+06,2741.29,3.048e-07,370.324,10.0568,388.833,999.891,0.318,0.0146686,2.39161,0.406159,355.885,10.1102,1.79152,37.0245,32.948,-18.5086,14.4394, +Internal Node(11),18.10.1998 00:25:09,459355,-7.32599e+06,2741.3,3.048e-07,359.567,10.0994,359.431,999.054,0.318,0.0242771,2.39161,0.392238,329.168,10.1187,2.18045,15.8419,30.2626,0.135654,30.3983, +Internal Node(11),19.12.1998 16:43:50,459355,-7.32599e+06,2741.9,3.048e-07,360.239,10.075,368.461,999.394,0.318,0.0236893,2.39161,0.358323,346.901,10.0795,2.37833,30.0953,21.5603,-8.22206,13.3382, +Internal Node(11),20.02.1999 09:02:31,459355,-7.32599e+06,2741.9,0.0423912,356.975,10.0872,355.657,998.907,0.318,0.0275048,6.43388,0.573685,333.245,10.0909,2.553,16.6404,22.4127,1.31805,23.7308, +Internal Node(11),25.06.1999 17:39:53,459356,-7.32599e+06,2742.8,3.048e-07,357.659,10.0755,362.325,999.279,0.318,0.0298048,2.39161,0.29583,346.426,10.0714,2.59108,24.1417,15.8983,-4.66535,11.233, +Internal Node(11),27.08.1999 09:58:34,459356,-7.32599e+06,2742.78,0.0584385,349.753,10.093,347.684,998.575,0.318,0.0358347,16.8556,0.610096,333.238,10.087,2.88102,12.0529,14.4467,2.06875,16.5154, +Internal Node(11),30.12.1999 18:35:56,459356,-7.32599e+06,2743.98,3.048e-07,347.204,10.0833,352.688,998.805,0.318,0.0433869,2.39161,0.289478,343.336,10.0663,2.82131,17.0036,9.35173,-5.48353,3.8682, +Internal Node(11),06.09.2000 11:50:41,459356,-7.32599e+06,2744.6,0.247797,353.399,10.0982,347.089,998.576,0.318,0.0469089,1285.09,0.165731,338.975,10.0673,2.95027,9.44541,8.11389,6.30941,14.4233, +Internal Node(11),09.01.2001 20:28:03,459357,-7.32599e+06,2747.26,0.0249676,358.501,10.0855,356.71,999.111,0.318,0.0688658,2.39161,0.212231,352.184,10.0667,2.98488,13.2249,4.52557,1.79184,6.31741, +Internal Node(11),13.03.2001 12:46:44,459357,-7.32599e+06,2747.24,0.0435319,357.938,10.0874,355.336,998.954,0.318,0.0655871,6.96739,0.438774,348.974,10.0615,3.16351,9.01105,6.36254,2.60169,8.96423, +Internal Node(11),15.05.2001 05:05:26,459358,-7.32599e+06,2747.17,3.048e-07,359.272,10.0819,358.4,999.092,0.318,0.0633634,2.39161,0.194772,352.79,10.0542,3.28292,9.13571,5.60997,0.872368,6.48234, +Internal Node(11),17.09.2001 13:42:48,459358,-7.32599e+06,2747.17,0.0483713,360.87,10.0809,358.292,999.088,0.318,0.0618184,9.55892,0.431405,351.771,10.0518,3.37371,8.18966,6.52137,2.57794,9.09932, +Internal Node(11),20.01.2002 22:20:10,459358,-7.32599e+06,2747.17,0.044655,362.706,10.0749,360.307,999.175,0.318,0.0585923,7.52064,0.394748,353.755,10.0488,3.57709,9.72216,6.55252,2.39873,8.95125, +Internal Node(11),26.05.2002 06:57:32,459358,-7.32599e+06,2747.87,0.0406978,364.407,10.0724,362.25,999.252,0.318,0.0595162,5.69323,0.319504,354.98,10.046,3.60156,10.0308,7.27024,2.15685,9.42709, +Internal Node(11),28.09.2002 15:34:55,459357,-7.32599e+06,2747.99,0.0525862,365.265,10.0738,362.872,999.296,0.318,0.0577319,12.2818,0.369306,354.344,10.044,3.7475,10.3696,8.52814,2.39291,10.921, +Internal Node(11),30.11.2002 07:53:36,459358,-7.32599e+06,2749.2,0.0342017,366.331,10.0723,364.375,999.346,0.318,0.0622284,3.379,0.178833,355.435,10.043,3.6531,10.3907,8.94004,1.95653,10.8966, +Internal Node(11),01.02.2003 00:12:17,459358,-7.32599e+06,2749.34,3.048e-07,365.452,10.0727,364.447,999.377,0.318,0.0618878,2.39161,0.184197,354.77,10.0425,3.71094,10.7869,9.67694,1.00455,10.6815, +Internal Node(11),04.04.2003 16:30:58,459358,-7.32599e+06,2749.37,0.043147,367.242,10.0723,365.13,999.44,0.318,0.0607904,6.78421,0.270503,355.384,10.0423,3.79656,10.6301,9.74568,2.11283,11.8585, +Internal Node(11),06.06.2003 08:49:39,459358,-7.32599e+06,2750.03,0.0400588,367.174,10.0711,365.371,999.385,0.318,0.0638257,5.42924,0.192953,355.465,10.042,3.74238,11.1718,9.90618,1.80251,11.7087, +Internal Node(11),09.10.2003 17:27:02,459358,-7.32599e+06,2750.01,0.0260259,367.176,10.071,365.295,999.447,0.318,0.0624619,2.39161,0.164508,354.823,10.0419,3.83544,11.4115,10.4721,1.88126,12.3534, +Internal Node(11),16.06.2004 10:41:46,459358,-7.32599e+06,2750.36,0.0493134,367.42,10.07,365.688,999.395,0.318,0.0623665,10.1284,0.130094,354.872,10.0417,3.94113,11.6037,10.8161,1.73155,12.5477, +Internal Node(11),19.10.2004 19:19:08,459358,-7.32599e+06,2750.62,0.0517021,367.446,10.0682,365.678,999.397,0.318,0.0594475,11.6727,0.0979664,353.872,10.0413,4.25024,12.2006,11.8054,1.76889,13.5743, +Internal Node(11),27.06.2005 12:33:53,459358,-7.32599e+06,2750.82,0.0528831,367.505,10.0665,365.767,999.4,0.318,0.0585201,12.491,0.0855444,353.559,10.0406,4.39507,13.4344,12.2086,1.73751,13.9461, +Internal Node(11),10.11.2006 23:03:22,459358,-7.32599e+06,2752.47,0.0662299,367.446,10.0645,365.549,999.397,0.318,0.0247946,24.5363,0.08431,353.093,10.0401,4.42214,13.7475,12.4561,1.89616,14.3522, +Internal Node(11),01.12.2006,459358,-7.32599e+06,2752.48,3.048e-07,366.746,10.0632,365.206,999.61,0.318,0.0217829,2.39161,0.0884647,350.969,10.0395,5.13362,14.4511,14.2367,1.54019,15.7769, +Internal Node(11),01.12.2006,459358,-7.32599e+06,2752.48,3.048e-07,366.746,10.0632,365.206,999.61,0.318,0.0217829,2.39161,0.0884647,350.969,10.0395,5.13362,14.4511,14.2367,1.54019,15.7769, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Internal Node(12),09.12.1997 22:12:00,459355,-7.32599e+06,2739.07,0.181202,386.468,10.0895,378.353,1000.28,0.318,0.291374,502.502,0.267699,333.61,16.2008,0.669782,50.3201,44.7428,8.11483,52.8576, +Internal Node(12),05.02.1998 14:35:11,459355,-7.32599e+06,2739.91,0.0172296,386.901,10.0655,386.041,1000.09,0.318,0.191234,2.39161,0.261466,346.35,10.996,1.10871,44.6532,39.6909,0.860516,40.5514, +Internal Node(12),12.04.1998 23:29:05,459356,-7.32599e+06,2740.49,3.048e-07,387.383,10.0646,387.789,1000.24,0.318,0.170129,2.39161,0.230233,348.175,10.4187,1.27595,36.7084,39.6141,-0.405401,39.2087, +Internal Node(12),16.08.1998 08:06:27,459357,-7.32599e+06,2741.46,3.048e-07,369.964,10.0568,388.775,999.891,0.318,0.0157913,2.39161,0.173153,355.201,10.1418,1.64013,37.0548,33.5739,-18.8107,14.7631, +Internal Node(12),18.10.1998 00:25:09,459357,-7.32599e+06,2741.44,3.048e-07,359.2,10.0994,359.392,999.037,0.318,0.0256261,2.39161,0.171701,328.915,10.1271,2.03924,15.9345,30.4771,-0.192175,30.2849, +Internal Node(12),19.12.1998 16:43:50,459357,-7.32599e+06,2741.95,3.048e-07,359.879,10.075,368.278,999.394,0.318,0.0245382,2.39161,0.144212,346.323,10.0835,2.24309,30.4501,21.955,-8.39816,13.5568, +Internal Node(12),20.02.1999 09:02:31,459357,-7.32599e+06,2741.93,0.0414791,356.769,10.0872,355.553,998.897,0.318,0.0282236,6.02746,0.150713,333.069,10.0965,2.43035,16.7273,22.4844,1.21653,23.7009, +Internal Node(12),25.06.1999 17:39:53,459358,-7.32599e+06,2742.55,3.048e-07,357.265,10.0755,362.02,999.279,0.318,0.0251007,2.39161,0.120488,346.051,10.0766,2.53614,24.3452,15.9687,-4.75529,11.2134, +Internal Node(12),27.08.1999 09:58:34,459358,-7.326e+06,2742.5,0.0609214,349.571,10.093,347.438,998.567,0.318,0.0336405,19.0966,0.19883,333.109,10.0996,2.83241,12.075,14.3289,2.13289,16.4618, +Internal Node(12),30.12.1999 18:35:56,459358,-7.32599e+06,2742.61,3.048e-07,346.659,10.0833,351.926,998.805,0.318,0.0322275,2.39161,0.123022,342.81,10.0817,3.05573,17.2376,9.11627,-5.26724,3.84903, +Internal Node(12),06.09.2000 11:50:41,459359,-7.326e+06,2743.94,0.254908,353.331,10.0982,346.835,998.566,0.318,0.0398893,1398.93,0.0630525,338.77,10.0819,2.98078,9.4425,8.06471,6.49685,14.5616, +Internal Node(12),09.01.2001 20:28:03,459361,-7.326e+06,2746.44,0.0197868,357.974,10.0855,356.335,999.107,0.318,0.0648073,2.39161,0.0884578,352.45,10.0479,3.16919,13.8787,3.88527,1.63924,5.52451, +Internal Node(12),13.03.2001 12:46:44,459361,-7.326e+06,2746.4,0.0581561,357.574,10.0874,354.317,998.937,0.318,0.0613431,16.6124,0.199993,348.055,10.0638,3.32884,9.75321,6.26206,3.25634,9.51841, +Internal Node(12),15.05.2001 05:05:26,459361,-7.326e+06,2746.24,3.048e-07,358.736,10.0819,357.606,999.077,0.318,0.0557834,2.39161,0.088487,352.019,10.0582,3.44931,9.65473,5.58747,1.12976,6.71723, +Internal Node(12),17.09.2001 13:42:48,459361,-7.326e+06,2746.23,0.0524375,360.477,10.0809,357.648,999.067,0.318,0.0544025,12.1779,0.171713,351.149,10.0556,3.5373,8.47965,6.49897,2.82906,9.32803, +Internal Node(12),20.01.2002 22:20:10,459361,-7.326e+06,2746.2,0.0453429,362.227,10.0749,359.762,999.151,0.318,0.0509626,7.87361,0.158878,353.066,10.0522,3.74166,10.1256,6.69675,2.46452,9.16127, +Internal Node(12),26.05.2002 06:57:32,459361,-7.326e+06,2746.26,0.0359463,363.733,10.0724,361.445,999.22,0.318,0.0497697,3.92291,0.125105,353.965,10.0484,3.9235,10.6357,7.4807,2.2871,9.7678, +Internal Node(12),28.09.2002 15:34:55,459361,-7.326e+06,2746.3,0.0443402,364.737,10.0738,362.217,999.27,0.318,0.0483711,7.36275,0.135161,353.412,10.046,4.08299,10.8736,8.80536,2.52005,11.3254, +Internal Node(12),30.11.2002 07:53:36,459361,-7.326e+06,2746.37,0.0100449,365.307,10.0723,363.498,999.298,0.318,0.0476007,2.39161,0.12362,354.106,10.0439,4.24788,11.196,9.39204,1.80847,11.2005, +Internal Node(12),01.02.2003 00:12:17,459361,-7.326e+06,2746.49,3.048e-07,364.551,10.0727,363.66,999.362,0.318,0.0479199,2.39161,0.102101,353.472,10.0428,4.30693,11.5341,10.1874,0.891393,11.0788, +Internal Node(12),04.04.2003 16:30:58,459361,-7.326e+06,2746.54,0.0141303,366.385,10.0723,364.45,999.427,0.318,0.0471781,2.39161,0.105957,354.092,10.0425,4.3822,11.2148,10.358,1.93577,12.2938, +Internal Node(12),06.06.2003 08:49:39,459361,-7.326e+06,2746.57,0.00433796,366.361,10.0711,364.684,999.353,0.318,0.0463964,2.39161,0.0827817,353.97,10.0423,4.46267,12.0817,10.7137,1.67725,12.391, +Internal Node(12),09.10.2003 17:27:02,459361,-7.326e+06,2746.61,3.048e-07,366.151,10.071,364.765,999.432,0.318,0.045657,2.39161,0.115272,353.389,10.0421,4.541,12.3128,11.3757,1.38578,12.7615, +Internal Node(12),16.06.2004 10:41:46,459361,-7.326e+06,2746.69,0.00142477,366.838,10.07,365.333,999.367,0.318,0.0442708,2.39161,0.0482176,353.34,10.0419,4.69861,12.5155,11.9927,1.50502,13.4977, +Internal Node(12),19.10.2004 19:19:08,459361,-7.326e+06,2746.82,3.048e-07,366.917,10.0682,365.729,999.372,0.318,0.0416408,2.39161,0.0417641,352.337,10.0415,5.02572,13.2043,13.3922,1.18786,14.5801, +Internal Node(12),27.06.2005 12:33:53,459361,-7.326e+06,2746.93,3.048e-07,366.991,10.0665,365.994,999.375,0.318,0.0405494,2.39161,0.0394201,352.026,10.0408,5.18724,14.4527,13.9678,0.996523,14.9643, +Internal Node(12),10.11.2006 23:03:22,459361,-7.326e+06,2748.24,3.048e-07,366.94,10.0645,366.063,999.373,0.318,0.0420305,2.39161,0.0316877,351.454,10.0403,5.30411,14.8411,14.6094,0.876746,15.4861, +Internal Node(12),01.12.2006,459361,-7.326e+06,2748.39,3.048e-07,365.997,10.0632,366.139,999.592,0.318,0.0377279,2.39161,0.0637974,349.447,10.0396,6.00223,15.4419,16.6923,-0.141791,16.5505, +Internal Node(12),01.12.2006,459361,-7.326e+06,2748.39,3.048e-07,365.997,10.0632,366.139,999.592,0.318,0.0377279,2.39161,0.0637974,349.447,10.0396,6.00223,15.4419,16.6923,-0.141791,16.5505, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Internal Node(13),09.12.1997 22:12:00,459356,-7.32599e+06,2738.31,0.183603,386.391,10.0895,377.405,1000.28,0.318,0.298597,522.739,0.108384,332.754,16.2287,0.649364,51.6553,44.6516,8.9856,53.6372, +Internal Node(13),05.02.1998 14:35:11,459356,-7.32599e+06,2739.51,0.0183924,386.79,10.0655,385.654,1000.09,0.318,0.195733,2.39161,0.0607427,345.917,11.1614,1.07434,44.9471,39.7375,1.13625,40.8737, +Internal Node(13),12.04.1998 23:29:05,459357,-7.32599e+06,2740.44,3.048e-07,387.324,10.0646,387.639,1000.24,0.318,0.113973,2.39161,0.0564688,347.645,10.5229,1.18723,36.4886,39.9938,-0.31469,39.6791, +Internal Node(13),16.08.1998 08:06:27,459358,-7.326e+06,2741.06,3.048e-07,369.876,10.0568,388.18,999.891,0.318,0.104911,2.39161,0.0398743,354.51,10.1662,1.61177,37.2746,33.6696,-18.3038,15.3657, +Internal Node(13),18.10.1998 00:25:09,459358,-7.326e+06,2741.04,3.048e-07,359.099,10.0994,358.759,999.033,0.318,0.11174,2.39161,0.0416186,328.586,10.1402,2.01984,16.1095,30.1729,0.339944,30.5128, +Internal Node(13),19.12.1998 16:43:50,459359,-7.326e+06,2741.66,3.048e-07,359.818,10.075,367.741,999.394,0.318,0.0140454,2.39161,0.0268854,345.691,10.0896,2.19401,30.8521,22.0492,-7.92306,14.1261, +Internal Node(13),20.02.1999 09:02:31,459359,-7.326e+06,2741.63,0.0437048,356.705,10.0872,355.116,998.894,0.318,0.0238831,7.05072,0.061552,332.832,10.106,2.38806,16.8499,22.2834,1.58975,23.8731, +Internal Node(13),25.06.1999 17:39:53,459360,-7.326e+06,2742.2,3.048e-07,357.201,10.0755,361.598,999.279,0.318,0.0240356,2.39161,0.0214699,345.654,10.0829,2.49871,24.5814,15.944,-4.39642,11.5476, +Internal Node(13),27.08.1999 09:58:34,459361,-7.326e+06,2742.13,0.0612208,349.513,10.093,347.095,998.565,0.318,0.0320798,19.3795,0.0871975,332.963,10.1152,2.79903,12.1128,14.1319,2.41848,16.5504, +Internal Node(13),30.12.1999 18:35:56,459361,-7.326e+06,2743.08,3.048e-07,346.663,10.0833,352.015,998.805,0.318,0.0355436,2.39161,0.0180082,342.629,10.0832,2.79932,17.3368,9.38557,-5.35129,4.03428, +Internal Node(13),06.09.2000 11:50:41,459362,-7.326e+06,2743.44,0.251601,353.281,10.0982,346.596,998.562,0.318,0.0362353,1345.18,0.0366238,338.59,10.0964,2.96557,9.4523,8.0054,6.68515,14.6905, +Internal Node(13),09.01.2001 20:28:03,459364,-7.32601e+06,2745.39,0.0178136,357.82,10.0855,356.351,999.102,0.318,0.0462631,2.39161,0.0163064,352.265,10.0604,3.23645,13.9627,4.08623,1.46875,5.55498, +Internal Node(13),13.03.2001 12:46:44,459364,-7.32601e+06,2745.39,0.0699489,357.456,10.0874,354.286,998.931,0.318,0.0442675,28.9061,0.0430388,347.522,10.0815,3.40141,10.0398,6.76412,3.16948,9.9336, +Internal Node(13),15.05.2001 05:05:26,459365,-7.32601e+06,2745.08,3.048e-07,358.586,10.0819,357.607,999.071,0.318,0.040141,2.39161,0.0158183,351.495,10.0737,3.52705,10.2499,6.11181,0.97958,7.09139, +Internal Node(13),17.09.2001 13:42:48,459365,-7.32601e+06,2745.07,0.0559459,360.342,10.0809,357.76,999.06,0.318,0.0391316,14.7894,0.0325126,350.724,10.073,3.62374,8.87829,7.03572,2.58172,9.61744, +Internal Node(13),20.01.2002 22:20:10,459365,-7.32601e+06,2745.09,0.0485792,362.097,10.0749,359.867,999.145,0.318,0.0372467,9.68273,0.0247503,352.562,10.0672,3.82898,10.6058,7.30473,2.22947,9.5342, +Internal Node(13),26.05.2002 06:57:32,459365,-7.32601e+06,2745.55,0.0373194,363.621,10.0724,361.543,999.214,0.318,0.0394359,4.38986,0.0212359,353.53,10.0591,3.9586,11.0554,8.01267,2.07834,10.091, +Internal Node(13),28.09.2002 15:34:55,459365,-7.32601e+06,2745.62,0.0426482,364.624,10.0738,362.381,999.265,0.318,0.0385505,6.55159,0.0248654,353.025,10.0575,4.1307,11.217,9.35601,2.24349,11.5995, +Internal Node(13),30.11.2002 07:53:36,459365,-7.32601e+06,2745.84,0.00362287,365.133,10.0723,363.671,999.29,0.318,0.0389463,2.39161,0.0301161,353.75,10.0529,4.28336,11.5428,9.92162,1.46132,11.3829, +Internal Node(13),01.02.2003 00:12:17,459364,-7.32601e+06,2745.88,3.048e-07,364.435,10.0727,363.87,999.359,0.318,0.0387763,2.39161,0.0171476,353.112,10.0518,4.36883,11.7824,10.7584,0.564795,11.3232, +Internal Node(13),04.04.2003 16:30:58,459364,-7.32601e+06,2745.9,0.00389694,366.152,10.0723,364.659,999.424,0.318,0.0382117,2.39161,0.0431101,353.711,10.0508,4.45741,11.4368,10.9473,1.49312,12.4404, +Internal Node(13),06.06.2003 08:49:39,459364,-7.32601e+06,2745.9,3.048e-07,366.147,10.0711,364.907,999.344,0.318,0.0375792,2.39161,0.0395433,353.578,10.05,4.54898,12.3543,11.3297,1.23984,12.5696, +Internal Node(13),09.10.2003 17:27:02,459364,-7.32601e+06,2745.91,3.048e-07,365.915,10.071,365.02,999.429,0.318,0.036999,2.39161,0.0435616,352.996,10.0497,4.63666,12.6011,12.0239,0.895513,12.9194, +Internal Node(13),16.06.2004 10:41:46,459364,-7.32601e+06,2745.91,3.048e-07,366.647,10.07,365.625,999.358,0.318,0.0356457,2.39161,0.0334417,352.907,10.0492,4.81943,12.7865,12.7178,1.02265,13.7404, +Internal Node(13),19.10.2004 19:19:08,459364,-7.32601e+06,2745.92,3.048e-07,366.725,10.0682,366.129,999.363,0.318,0.0333555,2.39161,0.0319706,351.872,10.0482,5.18511,13.5743,14.2568,0.596105,14.8529, +Internal Node(13),27.06.2005 12:33:53,459364,-7.32601e+06,2745.93,3.048e-07,366.792,10.0665,366.447,999.366,0.318,0.0322643,2.39161,0.0313661,351.519,10.0471,5.37556,14.8619,14.928,0.345747,15.2737, +Internal Node(13),10.11.2006 23:03:22,459364,-7.32601e+06,2745.95,3.048e-07,366.612,10.0645,366.674,999.358,0.318,0.0303345,2.39161,0.0301483,350.484,10.0461,5.75876,15.5501,16.19,-0.0617828,16.1282, +Internal Node(13),01.12.2006,459364,-7.32601e+06,2745.96,3.048e-07,365.655,10.0632,367.057,999.582,0.318,0.0271611,2.39161,0.0435165,348.439,10.0451,6.4798,16.1716,18.6177,-1.40213,17.2156, +Internal Node(13),01.12.2006,459364,-7.32601e+06,2745.96,3.048e-07,365.655,10.0632,367.057,999.582,0.318,0.0271611,2.39161,0.0435165,348.439,10.0451,6.4798,16.1716,18.6177,-1.40213,17.2156, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Internal Node(14),09.12.1997 22:12:00,459357,-7.32599e+06,2737.77,0.173008,386.336,10.0895,376.478,1000.28,0.318,0.333213,437.364,0.102493,331.244,16.3884,0.578148,53.1302,45.2339,9.85836,55.0922, +Internal Node(14),05.02.1998 14:35:11,459358,-7.32599e+06,2738.29,0.026047,386.663,10.0655,384.171,1000.09,0.318,0.076935,2.39161,0.0441191,345.779,10.9807,1.12803,46.2964,38.3925,2.49199,40.8845, +Internal Node(14),12.04.1998 23:29:05,459359,-7.326e+06,2739.44,3.048e-07,387.181,10.0646,386.41,1000.23,0.318,0.106983,2.39161,0.0376471,347.234,10.5178,1.23626,37.1167,39.1765,0.770615,39.9471, +Internal Node(14),16.08.1998 08:06:27,459360,-7.326e+06,2740.87,3.048e-07,369.817,10.0568,387.754,999.891,0.318,0.107082,2.39161,0.0300112,353.85,10.1896,1.53433,37.4926,33.903,-17.9362,15.9668, +Internal Node(14),18.10.1998 00:25:09,459360,-7.326e+06,2740.73,0.00416427,359.018,10.0994,358.17,999.03,0.318,0.110258,2.39161,0.0317371,328.277,10.1523,1.97925,16.2966,29.8926,0.848758,30.7414, +Internal Node(14),19.12.1998 16:43:50,459361,-7.326e+06,2741.45,3.048e-07,359.762,10.075,367.263,999.394,0.318,0.0139658,2.39161,0.026236,345.093,10.095,2.12317,31.2541,22.17,-7.5009,14.6691, +Internal Node(14),20.02.1999 09:02:31,459361,-7.326e+06,2741.29,0.0450142,356.651,10.0872,354.597,998.891,0.318,0.0992656,7.70363,0.0687803,332.587,10.1165,2.35472,17.0022,22.01,2.05338,24.0634, +Internal Node(14),25.06.1999 17:39:53,459363,-7.32601e+06,2741.81,3.048e-07,357.132,10.0755,361.157,999.279,0.318,0.0242684,2.39161,0.0202289,344.909,10.0937,2.33865,25.0633,16.2477,-4.02465,12.223, +Internal Node(14),27.08.1999 09:58:34,459363,-7.32601e+06,2741.66,0.0588232,349.452,10.093,346.862,998.562,0.318,0.0319496,17.1907,0.0882525,332.721,10.1289,2.65102,12.1755,14.1412,2.59017,16.7313, +Internal Node(14),30.12.1999 18:35:56,459364,-7.32601e+06,2742.34,3.048e-07,346.565,10.0833,351.635,998.805,0.318,0.0335003,2.39161,0.0133688,341.958,10.0946,2.69648,17.8033,9.67636,-5.06914,4.60722, +Internal Node(14),06.09.2000 11:50:41,459365,-7.32601e+06,2742.67,0.235204,353.206,10.0982,346.53,998.558,0.318,0.0338877,1098.95,0.0460646,338.333,10.1105,2.85263,9.52217,8.19719,6.67541,14.8726, +Internal Node(14),09.01.2001 20:28:03,459367,-7.32601e+06,2743.95,0.0163013,357.653,10.0855,356.183,999.095,0.318,0.0353379,2.39161,0.0156146,351.89,10.0768,3.27911,14.1811,4.29348,1.47011,5.76359, +Internal Node(14),13.03.2001 12:46:44,459367,-7.32601e+06,2743.96,0.0728179,357.304,10.0874,354.168,998.924,0.318,0.0337896,32.6107,0.0457976,346.897,10.105,3.45894,10.4235,7.27085,3.13583,10.4067, +Internal Node(14),15.05.2001 05:05:26,459368,-7.32602e+06,2743.6,3.048e-07,358.417,10.0819,357.542,999.064,0.318,0.0313081,2.39161,0.0160247,350.915,10.0941,3.56756,10.9189,6.62712,0.874853,7.50197, +Internal Node(14),17.09.2001 13:42:48,459368,-7.32602e+06,2743.6,0.0528492,360.184,10.0809,357.834,999.053,0.318,0.0305159,12.467,0.0300924,350.259,10.0964,3.67374,9.35165,7.57534,2.34964,9.92498, +Internal Node(14),20.01.2002 22:20:10,459369,-7.32602e+06,2743.84,0.0477237,361.962,10.0749,359.931,999.138,0.318,0.0300999,9.1801,0.0230358,352.053,10.0857,3.85382,11.121,7.87763,2.03132,9.90895, +Internal Node(14),26.05.2002 06:57:32,459369,-7.32602e+06,2744.29,0.0339691,363.476,10.0724,361.693,999.208,0.318,0.0307391,3.31053,0.0149302,352.999,10.0784,4.02029,11.5959,8.69449,1.78294,10.4774, +Internal Node(14),28.09.2002 15:34:55,459368,-7.32602e+06,2744.43,0.0367606,364.479,10.0738,362.601,999.258,0.318,0.030136,4.1956,0.0130243,352.516,10.0786,4.20624,11.7173,10.0848,1.87816,11.963, +Internal Node(14),30.11.2002 07:53:36,459368,-7.32602e+06,2744.68,3.048e-07,364.949,10.0723,363.94,999.281,0.318,0.0301174,2.39161,0.0233345,353.232,10.0717,4.37474,12.0601,10.7082,1.00928,11.7174, +Internal Node(14),01.02.2003 00:12:17,459368,-7.32601e+06,2744.83,3.048e-07,364.301,10.0727,364.154,999.353,0.318,0.0303541,2.39161,0.0142799,352.609,10.0697,4.46088,12.2296,11.545,0.146836,11.6919, +Internal Node(14),04.04.2003 16:30:58,459368,-7.32601e+06,2744.87,3.048e-07,365.946,10.0723,364.953,999.419,0.318,0.029959,2.39161,0.0317511,353.204,10.0677,4.55583,11.9258,11.7486,0.992801,12.7414, +Internal Node(14),06.06.2003 08:49:39,459368,-7.32601e+06,2744.88,3.048e-07,365.948,10.0711,365.224,999.335,0.318,0.029458,2.39161,0.0352904,353.063,10.0661,4.65407,12.8017,12.1614,0.723473,12.8849, +Internal Node(14),09.10.2003 17:27:02,459368,-7.32601e+06,2744.9,3.048e-07,365.707,10.071,365.379,999.424,0.318,0.0290126,2.39161,0.0381554,352.488,10.0658,4.74789,13.045,12.891,0.328396,13.2194, +Internal Node(14),16.06.2004 10:41:46,459368,-7.32601e+06,2744.9,3.048e-07,366.47,10.07,366.033,999.35,0.318,0.0279491,2.39161,0.033009,352.39,10.0645,4.943,13.214,13.6433,0.436276,14.0795, +Internal Node(14),19.10.2004 19:19:08,459368,-7.32601e+06,2744.92,3.048e-07,366.555,10.0682,366.652,999.355,0.318,0.0261195,2.39161,0.0324039,351.361,10.0625,5.33417,14.0402,15.2904,-0.0966753,15.1937, +Internal Node(14),27.06.2005 12:33:53,459368,-7.32601e+06,2744.93,3.048e-07,366.625,10.0665,367.015,999.358,0.318,0.0252499,2.39161,0.0319621,350.996,10.0605,5.53706,15.3404,16.0193,-0.39069,15.6286, +Internal Node(14),10.11.2006 23:03:22,459368,-7.32601e+06,2744.94,3.048e-07,366.454,10.0645,367.343,999.35,0.318,0.0236708,2.39161,0.028677,349.956,10.0587,5.94591,16.0319,17.3873,-0.889073,16.4983, +Internal Node(14),01.12.2006,459367,-7.32601e+06,2744.95,3.048e-07,365.49,10.0632,367.94,999.578,0.318,0.021148,2.39161,0.0445283,347.963,10.057,6.70893,16.6082,19.9771,-2.45043,17.5267, +Internal Node(14),01.12.2006,459367,-7.32601e+06,2744.95,3.048e-07,365.49,10.0632,367.94,999.578,0.318,0.021148,2.39161,0.0445283,347.963,10.057,6.70893,16.6082,19.9771,-2.45043,17.5267, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Internal Node(15),09.12.1997 22:12:00,459358,-7.326e+06,2737.02,0.170409,386.263,10.0895,374.131,1000.27,0.318,0.0323585,417.953,0.136296,329.939,15.4535,0.517829,56.3427,44.192,12.132,56.324, +Internal Node(15),05.02.1998 14:35:11,459359,-7.326e+06,2737.44,0.0332334,386.603,10.0655,382.842,1000.09,0.318,0.077833,3.10005,0.0613642,345.44,10.7702,1.10531,47.7096,37.4029,3.76021,41.1631, +Internal Node(15),12.04.1998 23:29:05,459360,-7.326e+06,2738.17,0.00571834,387.054,10.0646,384.724,1000.22,0.318,0.100778,2.39161,0.0423575,346.861,10.4209,1.28889,38.4444,37.8633,2.33006,40.1934, +Internal Node(15),16.08.1998 08:06:27,459361,-7.326e+06,2739.71,3.048e-07,369.692,10.0568,386.39,999.891,0.318,0.0977625,2.39161,0.0141787,353.207,10.2234,1.62011,38.1949,33.1828,-16.698,16.4848, +Internal Node(15),18.10.1998 00:25:09,459362,-7.326e+06,2739.41,0.021961,358.879,10.0994,356.465,999.025,0.318,0.0977489,2.39161,0.0267479,327.848,10.1815,2.12119,16.6362,28.6174,2.41377,31.0312, +Internal Node(15),19.12.1998 16:43:50,459363,-7.32601e+06,2740.45,3.048e-07,359.635,10.075,366.085,999.394,0.318,0.102702,2.39161,0.0160146,344.149,10.1239,2.09731,31.769,21.9358,-6.44993,15.4859, +Internal Node(15),20.02.1999 09:02:31,459363,-7.32601e+06,2740.08,0.0571019,356.531,10.0872,353.348,998.886,0.318,0.0924235,15.7252,0.115006,331.995,10.1415,2.37056,17.3045,21.3535,3.18259,24.5361, +Internal Node(15),25.06.1999 17:39:53,459366,-7.32601e+06,2740.55,3.048e-07,357.004,10.0755,359.908,999.279,0.318,0.0705426,2.39161,0.024022,343.826,10.1132,2.23305,25.8838,16.0824,-2.9047,13.1777, +Internal Node(15),27.08.1999 09:58:34,459366,-7.32601e+06,2740.65,0.0621528,349.347,10.093,346.216,998.557,0.318,0.0849091,20.2782,0.100751,332.379,10.1489,2.55379,12.3219,13.8362,3.13189,16.9681, +Internal Node(15),30.12.1999 18:35:56,459366,-7.32601e+06,2741.57,3.048e-07,346.48,10.0833,351.168,998.805,0.318,0.0907258,2.39161,0.00678974,341.284,10.1065,2.55588,18.3092,9.88376,-4.68756,5.1962, +Internal Node(15),06.09.2000 11:50:41,459367,-7.32601e+06,2741.92,0.219973,353.131,10.0982,346.352,998.554,0.318,0.0321463,898.991,0.114282,338.068,10.1245,2.71244,9.6424,8.28359,6.77938,15.063, +Internal Node(15),09.01.2001 20:28:03,459371,-7.32602e+06,2742.71,0.02393,357.529,10.0855,355.836,999.089,0.318,0.0312594,2.39161,0.0146648,351.378,10.0907,3.17952,14.5701,4.45833,1.69233,6.15066, +Internal Node(15),13.03.2001 12:46:44,459370,-7.32602e+06,2742.79,0.0785155,357.19,10.0874,354.018,998.919,0.318,0.0298694,40.8801,0.0343299,346.423,10.1262,3.38857,10.7021,7.59503,3.17193,10.767, +Internal Node(15),15.05.2001 05:05:26,459373,-7.32603e+06,2742.34,3.048e-07,358.292,10.0819,357.318,999.058,0.318,0.0287471,2.39161,0.0155838,350.387,10.1132,3.38086,11.4588,6.93097,0.973776,7.90475, +Internal Node(15),17.09.2001 13:42:48,459372,-7.32602e+06,2742.61,0.0555723,360.09,10.0809,357.799,999.049,0.318,0.0282092,14.4951,0.0186675,349.959,10.1144,3.55029,9.64428,7.84001,2.29103,10.131, +Internal Node(15),20.01.2002 22:20:10,459372,-7.32603e+06,2742.73,0.0530803,361.857,10.0749,359.855,999.133,0.318,0.0270988,12.6313,0.00947031,351.602,10.1038,3.76367,11.5254,8.25331,2.00259,10.2559, +Internal Node(15),26.05.2002 06:57:32,459372,-7.32602e+06,2743.06,0.0383666,363.366,10.0724,361.723,999.202,0.318,0.0266224,4.76988,0.0052085,352.509,10.0988,3.98377,12.0467,9.21379,1.64335,10.8571, +Internal Node(15),28.09.2002 15:34:55,459372,-7.32602e+06,2743.18,0.0374644,364.361,10.0738,362.74,999.253,0.318,0.0256942,4.44123,0.00350542,352.026,10.1021,4.20114,12.1588,10.714,1.62142,12.3354, +Internal Node(15),30.11.2002 07:53:36,459372,-7.32602e+06,2743.29,3.048e-07,364.819,10.0723,364.16,999.275,0.318,0.0248469,2.39161,0.0192403,352.683,10.0954,4.41202,12.5458,11.4772,0.658453,12.1356, +Internal Node(15),01.02.2003 00:12:17,459371,-7.32602e+06,2743.5,3.048e-07,364.166,10.0727,364.439,999.347,0.318,0.024902,2.39161,0.0111663,352.065,10.0939,4.51281,12.6876,12.374,-0.272907,12.1011, +Internal Node(15),04.04.2003 16:30:58,459371,-7.32602e+06,2743.55,3.048e-07,365.812,10.0723,365.257,999.414,0.318,0.0245462,2.39161,0.0260387,352.649,10.0908,4.61646,12.4145,12.6073,0.555902,13.1632, +Internal Node(15),06.06.2003 08:49:39,459371,-7.32602e+06,2743.57,3.048e-07,365.805,10.0711,365.557,999.329,0.318,0.0240976,2.39161,0.0347049,352.495,10.0883,4.72219,13.275,13.062,0.247962,13.31, +Internal Node(15),09.10.2003 17:27:02,459371,-7.32602e+06,2743.6,3.048e-07,365.558,10.071,365.766,999.418,0.318,0.0237136,2.39161,0.0379574,351.93,10.0882,4.82291,13.5056,13.8361,-0.207248,13.6288, +Internal Node(15),16.06.2004 10:41:46,459371,-7.32602e+06,2743.59,3.048e-07,366.321,10.07,366.484,999.343,0.318,0.0227661,2.39161,0.0362454,351.815,10.0863,5.03157,13.6708,14.6683,-0.163028,14.5053, +Internal Node(15),19.10.2004 19:19:08,459371,-7.32602e+06,2743.63,3.048e-07,366.405,10.0682,367.233,999.348,0.318,0.021232,2.39161,0.0369701,350.792,10.0828,5.44734,14.5182,16.4407,-0.828264,15.6125, +Internal Node(15),27.06.2005 12:33:53,459371,-7.32602e+06,2743.64,3.048e-07,366.475,10.0665,367.649,999.351,0.318,0.0204993,2.39161,0.0365403,350.411,10.0798,5.66195,15.8336,17.238,-1.17375,16.0643, +Internal Node(15),10.11.2006 23:03:22,459371,-7.32602e+06,2743.66,3.048e-07,366.307,10.0645,368.09,999.343,0.318,0.0191661,2.39161,0.0327496,349.364,10.0769,6.09389,16.5305,18.7261,-1.78288,16.9432, +Internal Node(15),01.12.2006,459371,-7.32602e+06,2743.68,3.048e-07,365.356,10.0632,368.904,999.572,0.318,0.0170768,2.39161,0.04601,347.379,10.0741,6.89658,17.1025,21.5244,-3.54805,17.9764, +Internal Node(15),01.12.2006,459371,-7.32602e+06,2743.68,3.048e-07,365.356,10.0632,368.904,999.572,0.318,0.0170768,2.39161,0.04601,347.379,10.0741,6.89658,17.1025,21.5244,-3.54805,17.9764, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Internal Node(16),09.12.1997 22:12:00,459358,-7.326e+06,2736,0.159139,386.163,10.0895,369.98,1000.27,0.318,0.0357426,340.39,0.197762,328.793,13.1718,0.465768,61.7896,41.1863,16.1832,57.3695, +Internal Node(16),05.02.1998 14:35:11,459359,-7.326e+06,2736.32,0.0342978,386.511,10.0655,381.015,1000.09,0.318,0.0762107,3.40757,0.0777076,345.323,10.3055,1.12007,49.6866,35.6916,5.49586,41.1875, +Internal Node(16),12.04.1998 23:29:05,459361,-7.326e+06,2736.67,0.0124435,386.924,10.0646,382.693,1000.22,0.318,0.0951701,2.39161,0.0755095,346.536,10.2497,1.35038,40.0864,36.1569,4.23041,40.3873, +Internal Node(16),16.08.1998 08:06:27,459362,-7.32601e+06,2737.25,3.048e-07,369.462,10.0568,383.588,999.891,0.318,0.0852242,2.39161,0.0296932,352.518,10.1978,1.81202,39.7238,31.0699,-14.1258,16.9441, +Internal Node(16),18.10.1998 00:25:09,459362,-7.32601e+06,2737.27,0.0358148,358.699,10.0994,353.849,999.016,0.318,0.084258,3.88003,0.0681922,327.406,10.2017,2.36018,17.0976,26.4432,4.84994,31.2931, +Internal Node(16),19.12.1998 16:43:50,459364,-7.32601e+06,2737.64,3.048e-07,359.367,10.075,363.008,999.394,0.318,0.0821925,2.39161,0.0444392,343.34,10.1427,2.43557,32.7523,19.6685,-3.64132,16.0272, +Internal Node(16),20.02.1999 09:02:31,459364,-7.32601e+06,2737.66,0.0680984,356.302,10.0872,350.736,998.875,0.318,0.0764569,26.6721,0.112683,331.4,10.1714,2.67077,17.7994,19.3357,5.56571,24.9014, +Internal Node(16),25.06.1999 17:39:53,459367,-7.32602e+06,2738.24,3.048e-07,356.793,10.0755,357.566,999.279,0.318,0.0597086,2.39161,0.089068,343.069,10.1353,2.43761,26.6962,14.4967,-0.772876,13.7238, +Internal Node(16),27.08.1999 09:58:34,459367,-7.32601e+06,2738.03,0.0679356,349.095,10.093,344.14,998.545,0.318,0.0677824,26.4812,0.119304,331.852,10.191,2.88185,12.6661,12.2883,4.9548,17.2431, +Internal Node(16),30.12.1999 18:35:56,459369,-7.32602e+06,2738.53,3.048e-07,346.183,10.0833,348.973,998.805,0.318,0.0708703,2.39161,0.0222082,340.246,10.1425,2.80593,19.0944,8.72678,-2.78998,5.93681, +Internal Node(16),06.09.2000 11:50:41,459370,-7.32602e+06,2738.7,0.181931,352.814,10.0982,344.761,998.538,0.318,0.0724997,508.59,0.225068,337.092,10.174,2.82355,10.1451,7.6699,8.05278,15.7227, +Internal Node(16),09.01.2001 20:28:03,459373,-7.32603e+06,2739.15,0.0273431,357.191,10.0855,354.642,999.073,0.318,0.0516663,2.39161,0.0289819,350.047,10.1248,3.37774,15.5947,4.59466,2.54908,7.14374, +Internal Node(16),13.03.2001 12:46:44,459373,-7.32603e+06,2739.03,0.0651682,356.814,10.0874,353.538,998.902,0.318,0.0602831,23.3751,0.034069,345.477,10.1847,3.58812,11.0296,8.06112,3.27617,11.3373, +Internal Node(16),15.05.2001 05:05:26,459375,-7.32603e+06,2739.49,3.048e-07,358.019,10.0819,356.906,999.045,0.318,0.0643156,2.39161,0.0192915,349.587,10.15,3.47458,11.9701,7.31975,1.11232,8.43206, +Internal Node(16),17.09.2001 13:42:48,459375,-7.32603e+06,2739.42,0.0438388,359.77,10.0809,357.599,999.034,0.318,0.0614776,7.11577,0.0220498,349.202,10.1627,3.61449,10.0647,8.39718,2.17053,10.5677, +Internal Node(16),20.01.2002 22:20:10,459375,-7.32603e+06,2739.49,0.0427777,361.537,10.0749,359.817,999.118,0.318,0.0577405,6.61146,0.00744372,350.708,10.1469,3.88402,12.0596,9.10914,1.72041,10.8296, +Internal Node(16),26.05.2002 06:57:32,459375,-7.32603e+06,2739.84,0.0278159,363.05,10.0724,361.896,999.188,0.318,0.0559246,2.39161,0.00546269,351.606,10.1438,4.10124,12.599,10.2899,1.15404,11.4439, +Internal Node(16),28.09.2002 15:34:55,459375,-7.32603e+06,2740.15,0.0237623,364.06,10.0738,363.125,999.239,0.318,0.0542616,2.39161,0.00691115,351.187,10.1505,4.31638,12.6811,11.9384,0.934726,12.8731, +Internal Node(16),30.11.2002 07:53:36,459375,-7.32603e+06,2740.36,3.048e-07,364.546,10.0723,364.67,999.262,0.318,0.0522118,2.39161,0.0272156,351.841,10.139,4.55183,13.0993,12.8288,-0.123887,12.7049, +Internal Node(16),01.02.2003 00:12:17,459374,-7.32603e+06,2740.62,3.048e-07,363.882,10.0727,365.038,999.329,0.318,0.0520178,2.39161,0.0187076,351.215,10.1402,4.65196,13.2662,13.8227,-1.15566,12.6671, +Internal Node(16),04.04.2003 16:30:58,459374,-7.32603e+06,2740.77,3.048e-07,365.544,10.0723,365.873,999.397,0.318,0.0512434,2.39161,0.0407191,351.788,10.1343,4.75982,13.0217,14.0849,-0.329666,13.7552, +Internal Node(16),06.06.2003 08:49:39,459374,-7.32603e+06,2740.89,3.048e-07,365.543,10.0711,366.199,999.317,0.318,0.0505989,2.39161,0.050886,351.633,10.1295,4.86287,13.8936,14.5656,-0.655352,13.9102, +Internal Node(16),09.10.2003 17:27:02,459374,-7.32603e+06,2740.96,3.048e-07,365.293,10.071,366.491,999.402,0.318,0.0498384,2.39161,0.0571118,351.088,10.1297,4.96856,14.102,15.4029,-1.19789,14.205, +Internal Node(16),16.06.2004 10:41:46,459374,-7.32603e+06,2741.01,3.048e-07,366.062,10.07,367.301,999.331,0.318,0.047987,2.39161,0.0522519,350.975,10.1254,5.18727,14.2633,16.3257,-1.23897,15.0867, +Internal Node(16),19.10.2004 19:19:08,459374,-7.32603e+06,2741.04,3.048e-07,366.142,10.0682,368.283,999.336,0.318,0.0444995,2.39161,0.0556869,349.936,10.1204,5.62702,15.1296,18.3462,-2.14033,16.2059, +Internal Node(16),27.06.2005 12:33:53,459374,-7.32603e+06,2741.06,3.048e-07,366.213,10.0665,368.79,999.339,0.318,0.04291,2.39161,0.0549816,349.529,10.1157,5.85206,16.4664,19.2606,-2.57699,16.6836, +Internal Node(16),10.11.2006 23:03:22,459374,-7.32603e+06,2741.1,3.048e-07,366.044,10.0645,369.41,999.331,0.318,0.0400285,2.39161,0.0537052,348.471,10.1109,6.30463,17.174,20.9392,-3.36681,17.5724, +Internal Node(16),01.12.2006,459374,-7.32603e+06,2741.15,3.048e-07,365.114,10.0632,370.529,999.556,0.318,0.0355805,2.39161,0.0555546,346.43,10.107,7.14612,17.7994,24.0995,-5.41519,18.6843, +Internal Node(16),01.12.2006,459374,-7.32603e+06,2741.15,3.048e-07,365.114,10.0632,370.529,999.556,0.318,0.0355805,2.39161,0.0555546,346.43,10.107,7.14612,17.7994,24.0995,-5.41519,18.6843, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Internal Node(17),09.12.1997 22:12:00,459357,-7.326e+06,2734.74,0.131353,386.04,10.0895,377.46,1000.26,0.318,0.0324245,191.409,0.0790588,330.335,18.2675,0.516794,55.3502,47.1248,8.58022,55.705, +Internal Node(17),05.02.1998 14:35:11,459358,-7.326e+06,2735.19,0.0180269,386.414,10.0655,384.135,1000.09,0.318,0.0740929,2.39161,0.0307237,345.69,12.6118,1.15249,46.4765,38.4446,2.27922,40.7239, +Internal Node(17),12.04.1998 23:29:05,459359,-7.326e+06,2734.95,3.048e-07,386.813,10.0646,386.638,1000.21,0.318,0.0903569,2.39161,0.0721898,347.005,13.2389,1.42138,36.7005,39.6329,0.174615,39.8075, +Internal Node(17),16.08.1998 08:06:27,459361,-7.326e+06,2735.03,3.048e-07,369.272,10.0568,386.83,999.891,0.318,0.0750244,2.39161,0.0260677,353.205,12.8598,2.04431,35.9124,33.6253,-17.5582,16.0671, +Internal Node(17),18.10.1998 00:25:09,459361,-7.326e+06,2735.3,0.0201596,358.544,10.0994,355.841,999.007,0.318,0.0764189,2.39161,0.0411997,327.381,12.2473,2.56692,15.9152,28.4598,2.70339,31.1632, +Internal Node(17),19.12.1998 16:43:50,459362,-7.32601e+06,2735.13,3.048e-07,359.155,10.075,365.653,999.394,0.318,0.0731615,2.39161,0.0306176,343.642,12.5531,2.68292,29.1943,22.0115,-6.49824,15.5133, +Internal Node(17),20.02.1999 09:02:31,459362,-7.32601e+06,2735.5,0.0516161,356.101,10.0872,351.993,998.866,0.318,0.0672016,11.6145,0.0356041,331.294,11.8115,2.96675,16.5942,20.6989,4.10767,24.8066, +Internal Node(17),25.06.1999 17:39:53,459364,-7.32601e+06,2735.29,3.048e-07,356.516,10.0755,359.8,999.279,0.318,0.049984,2.39161,0.0191616,343.216,12.4839,2.82346,23.6867,16.5842,-3.28497,13.2992, +Internal Node(17),27.08.1999 09:58:34,459365,-7.32601e+06,2735.83,0.0525323,348.888,10.093,344.868,998.536,0.318,0.0583111,12.2441,0.0358122,331.539,11.4367,3.22861,12.0465,13.3289,4.02036,17.3493, +Internal Node(17),30.12.1999 18:35:56,459367,-7.32602e+06,2735.25,3.048e-07,345.882,10.0833,351.755,998.801,0.318,0.064306,2.39161,0.0136212,339.888,12.8002,2.94072,16.7346,11.8666,-5.87341,5.99317, +Internal Node(17),06.09.2000 11:50:41,459367,-7.32602e+06,2735.28,0.132123,352.481,10.0982,347.282,998.524,0.318,0.0599041,194.797,0.0748809,336.707,12.6935,3.20445,8.90746,10.5755,5.19865,15.7742, +Internal Node(17),09.01.2001 20:28:03,459372,-7.32603e+06,2735.8,7.61816e-05,356.88,10.0855,356.525,999.058,0.318,0.0590685,2.39161,0.0137272,349.331,12.139,3.32874,14.2026,7.19385,0.355226,7.54908, +Internal Node(17),13.03.2001 12:46:44,459369,-7.32602e+06,2735.31,0.0155828,356.455,10.0874,356.337,998.885,0.318,0.0571115,2.39161,0.00684143,344.885,12.6877,3.60508,9.4604,11.4523,0.117287,11.5696, +Internal Node(17),15.05.2001 05:05:26,459373,-7.32603e+06,2736.66,3.048e-07,357.761,10.0819,357.444,999.032,0.318,0.0518968,2.39161,0.0132317,349.012,10.7517,3.79631,11.8182,8.43204,0.316548,8.74859, +Internal Node(17),17.09.2001 13:42:48,459371,-7.32602e+06,2736,0.00624001,359.442,10.0809,359.293,999.019,0.318,0.0529284,2.39161,0.00896739,348.627,11.636,3.90956,9.33552,10.6667,0.149142,10.8158, +Internal Node(17),20.01.2002 22:20:10,459372,-7.32603e+06,2736.39,0.00767974,361.236,10.0749,361.023,999.105,0.318,0.0491021,2.39161,0.00534973,350.214,11.029,4.22571,11.5322,10.809,0.21258,11.0216, +Internal Node(17),26.05.2002 06:57:32,459372,-7.32603e+06,2736.69,3.048e-07,362.751,10.0724,362.944,999.174,0.318,0.0456127,2.39161,0.0100441,351.105,10.5764,4.55545,12.362,11.8386,-0.192854,11.6458, +Internal Node(17),28.09.2002 15:34:55,459371,-7.32603e+06,2736.41,3.048e-07,363.703,10.0738,364.788,999.222,0.318,0.0439788,2.39161,0.012632,350.647,10.9129,4.71457,12.1386,14.1416,-1.08576,13.0558, +Internal Node(17),30.11.2002 07:53:36,459372,-7.32603e+06,2736.68,3.048e-07,364.229,10.0723,366.201,999.248,0.318,0.0412383,2.39161,0.0292739,351.278,10.5274,5.03303,12.9141,14.9228,-1.972,12.9508, +Internal Node(17),01.02.2003 00:12:17,459371,-7.32602e+06,2736.36,3.048e-07,363.498,10.0727,367.181,999.314,0.318,0.0408969,2.39161,0.0190172,350.619,10.8933,5.0626,12.7302,16.5616,-3.68301,12.8786, +Internal Node(17),04.04.2003 16:30:58,459371,-7.32602e+06,2736.29,3.048e-07,365.195,10.0723,368.189,999.38,0.318,0.040193,2.39161,0.0503266,351.156,10.9515,5.14866,12.4478,17.0334,-2.99356,14.0399, +Internal Node(17),06.06.2003 08:49:39,459371,-7.32602e+06,2736.32,3.048e-07,365.208,10.0711,368.592,999.3,0.318,0.0393131,2.39161,0.0583566,350.986,10.8968,5.26471,13.3574,17.6056,-3.38327,14.2223, +Internal Node(17),09.10.2003 17:27:02,459371,-7.32602e+06,2736.26,3.048e-07,364.956,10.071,369.1,999.383,0.318,0.0386694,2.39161,0.0614974,350.437,10.9467,5.35036,13.5083,18.6629,-4.14365,14.5193, +Internal Node(17),16.06.2004 10:41:46,459371,-7.32602e+06,2736.31,3.048e-07,365.725,10.07,370.003,999.315,0.318,0.0371346,2.39161,0.0620069,350.319,10.8689,5.5728,13.7423,19.6839,-4.27792,15.4059, +Internal Node(17),19.10.2004 19:19:08,459370,-7.32602e+06,2736.26,3.048e-07,365.803,10.0682,371.34,999.32,0.318,0.0346866,2.39161,0.0638162,349.277,10.8784,5.96516,14.4884,22.0627,-5.53699,16.5257, +Internal Node(17),27.06.2005 12:33:53,459370,-7.32602e+06,2736.25,3.048e-07,365.87,10.0665,372.007,999.323,0.318,0.0335226,2.39161,0.0634775,348.875,10.862,6.17253,15.7412,23.132,-6.13629,16.9957, +Internal Node(17),10.11.2006 23:03:22,459370,-7.32602e+06,2736.28,3.048e-07,365.696,10.0645,372.855,999.315,0.318,0.0312928,2.39161,0.0617145,347.811,10.7938,6.61413,16.4573,25.0438,-7.15903,17.8848, +Internal Node(17),01.12.2006,459370,-7.32602e+06,2736.25,3.048e-07,364.757,10.0632,374.507,999.537,0.318,0.0279818,2.39161,0.0617688,345.736,10.7757,7.39694,17.017,28.7704,-9.74969,19.0207, +Internal Node(17),01.12.2006,459370,-7.32602e+06,2736.25,3.048e-07,364.757,10.0632,374.507,999.537,0.318,0.0279818,2.39161,0.0617688,345.736,10.7757,7.39694,17.017,28.7704,-9.74969,19.0207, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Internal Node(18),09.12.1997 22:12:00,459356,-7.32599e+06,2734.24,0.120839,385.991,10.0895,380.068,1000.26,0.318,0.0290433,149.029,0.0795286,331.835,19.6541,0.579934,52.49,48.233,5.92322,54.1562, +Internal Node(18),05.02.1998 14:35:11,459357,-7.32599e+06,2734.43,3.048e-07,386.341,10.0655,386.952,1000.09,0.318,0.0681488,2.39161,0.0383899,346.536,14.1728,1.25893,42.9761,40.4155,-0.610736,39.8047, +Internal Node(18),12.04.1998 23:29:05,459358,-7.326e+06,2734.45,3.048e-07,386.781,10.0646,388.016,1000.21,0.318,0.0844629,2.39161,0.0636833,347.526,13.8512,1.52664,34.9843,40.49,-1.23588,39.2542, +Internal Node(18),16.08.1998 08:06:27,459359,-7.326e+06,2734.39,3.048e-07,369.215,10.0568,388.488,999.891,0.318,0.0707447,2.39161,0.0351578,353.886,13.5825,2.17423,33.8585,34.6015,-19.2724,15.3291, +Internal Node(18),18.10.1998 00:25:09,459359,-7.326e+06,2734.46,0.00487374,358.477,10.0994,358.305,999.004,0.318,0.075692,2.39161,0.0422577,327.55,13.5374,2.59991,14.7511,30.755,0.172036,30.9271, +Internal Node(18),19.12.1998 16:43:50,459360,-7.326e+06,2734.42,3.048e-07,359.092,10.075,367.531,999.394,0.318,0.0679819,2.39161,0.0312627,344.331,13.4689,2.88859,26.878,23.2001,-8.43862,14.7615, +Internal Node(18),20.02.1999 09:02:31,459360,-7.326e+06,2734.53,0.0342624,356.009,10.0872,354.81,998.861,0.318,0.0655741,3.39702,0.0151749,331.46,13.4188,3.041,14.9796,23.3505,1.19889,24.5494, +Internal Node(18),25.06.1999 17:39:53,459362,-7.32601e+06,2734.51,3.048e-07,356.44,10.0755,361.75,999.279,0.318,0.0665826,2.39161,0.0195394,343.665,13.508,3.00396,21.6702,18.0842,-5.30963,12.7745, +Internal Node(18),27.08.1999 09:58:34,459362,-7.32601e+06,2734.63,0.0303068,348.771,10.093,348.091,998.53,0.318,0.0633346,2.39161,0.0139006,331.443,13.4097,3.22237,10.689,16.6484,0.679584,17.328, +Internal Node(18),30.12.1999 18:35:56,459363,-7.32601e+06,2734.36,3.048e-07,345.798,10.0833,353.489,998.797,0.318,0.0629388,2.39161,0.0172318,340.28,13.6944,3.24474,15.2118,13.2096,-7.69136,5.51822, +Internal Node(18),06.09.2000 11:50:41,459364,-7.32601e+06,2734.41,0.12816,352.397,10.0982,348.978,998.521,0.318,0.06102,177.787,0.0214512,336.712,13.7184,3.3523,8.13153,12.266,3.41921,15.6852, +Internal Node(18),09.01.2001 20:28:03,459366,-7.32601e+06,2734.41,3.048e-07,356.747,10.0855,358.695,999.052,0.318,0.0543446,2.39161,0.0136022,349.518,13.516,3.57985,12.3714,9.17691,-1.94793,7.22898, +Internal Node(18),13.03.2001 12:46:44,459366,-7.32601e+06,2734.44,0.00139862,356.374,10.0874,357.52,998.881,0.318,0.0553255,2.39161,0.00918707,344.887,13.5133,3.70703,8.73314,12.6332,-1.14656,11.4867, +Internal Node(18),15.05.2001 05:05:26,459367,-7.32602e+06,2734.73,3.048e-07,357.582,10.0819,360.321,999.023,0.318,0.0542382,2.39161,0.015188,349.016,13.0888,3.78095,9.83847,11.3051,-2.73851,8.56656, +Internal Node(18),17.09.2001 13:42:48,459367,-7.32602e+06,2734.73,3.048e-07,359.325,10.0809,360.904,999.013,0.318,0.0530449,2.39161,0.012964,348.545,13.0472,3.86643,8.32665,12.3596,-1.57978,10.7798, +Internal Node(18),20.01.2002 22:20:10,459368,-7.32602e+06,2734.89,3.048e-07,361.094,10.0749,362.819,999.098,0.318,0.0503424,2.39161,0.0126352,350.219,12.7186,4.07428,9.99248,12.5999,-1.7251,10.8748, +Internal Node(18),26.05.2002 06:57:32,459368,-7.32602e+06,2734.97,3.048e-07,362.591,10.0724,365.112,999.167,0.318,0.0480061,2.39161,0.0156471,351.114,12.5395,4.27291,10.45,13.998,-2.52032,11.4777, +Internal Node(18),28.09.2002 15:34:55,459367,-7.32602e+06,2734.86,3.048e-07,363.563,10.0738,366.759,999.216,0.318,0.0462069,2.39161,0.0193539,350.66,12.5566,4.44114,10.467,16.0988,-3.19654,12.9022, +Internal Node(18),30.11.2002 07:53:36,459368,-7.32602e+06,2734.93,3.048e-07,364.08,10.0723,368.426,999.241,0.318,0.0443094,2.39161,0.0319719,351.3,12.3988,4.6315,10.9032,17.1264,-4.34633,12.78, +Internal Node(18),01.02.2003 00:12:17,459367,-7.32602e+06,2734.81,3.048e-07,363.36,10.0727,369.177,999.308,0.318,0.0435622,2.39161,0.0157948,350.654,12.4482,4.71327,11.0031,18.5234,-5.81757,12.7058, +Internal Node(18),04.04.2003 16:30:58,459367,-7.32602e+06,2734.78,3.048e-07,365.082,10.0723,370.121,999.373,0.318,0.04281,2.39161,0.0484683,351.206,12.4208,4.79702,10.7975,18.9147,-5.03868,13.876, +Internal Node(18),06.06.2003 08:49:39,459367,-7.32602e+06,2734.78,3.048e-07,365.098,10.0711,370.56,999.295,0.318,0.0420617,2.39161,0.0521682,351.048,12.3789,4.88283,11.5784,19.5119,-5.46143,14.0505, +Internal Node(18),09.10.2003 17:27:02,459367,-7.32602e+06,2734.76,3.048e-07,364.851,10.071,371.039,999.378,0.318,0.0413742,2.39161,0.052217,350.498,12.3646,4.96485,11.7715,20.5414,-6.18825,14.3532, +Internal Node(18),16.06.2004 10:41:46,459367,-7.32602e+06,2734.76,3.048e-07,365.62,10.07,371.98,999.31,0.318,0.0400028,2.39161,0.0505974,350.386,12.2962,5.13589,11.9414,21.5941,-6.35991,15.2342, +Internal Node(18),19.10.2004 19:19:08,459367,-7.32602e+06,2734.74,3.048e-07,365.701,10.0682,373.271,999.316,0.318,0.0375298,2.39161,0.0505715,349.347,12.2014,5.47676,12.6593,23.9242,-7.56955,16.3547, +Internal Node(18),27.06.2005 12:33:53,459367,-7.32602e+06,2734.74,3.048e-07,365.769,10.0665,373.941,999.318,0.318,0.0363541,2.39161,0.0502009,348.961,12.1443,5.65493,13.7771,24.9805,-8.17218,16.8083, +Internal Node(18),10.11.2006 23:03:22,459367,-7.32602e+06,2734.75,3.048e-07,365.591,10.0645,374.819,999.31,0.318,0.0341688,2.39161,0.0485051,347.901,12.0493,6.01829,14.3887,26.9183,-9.22792,17.6904, +Internal Node(18),01.12.2006,459367,-7.32602e+06,2734.73,3.048e-07,364.649,10.0632,376.45,999.531,0.318,0.0307218,2.39161,0.053228,345.824,11.9305,6.69743,14.96,30.6265,-11.8011,18.8254, +Internal Node(18),01.12.2006,459367,-7.32602e+06,2734.73,3.048e-07,364.649,10.0632,376.45,999.531,0.318,0.0307218,2.39161,0.053228,345.824,11.9305,6.69743,14.96,30.6265,-11.8011,18.8254, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Internal Node(19),09.12.1997 22:12:00,459355,-7.32599e+06,2733.86,0.121935,385.953,10.0895,381.266,1000.26,0.318,0.283486,153.119,0.134756,334.044,19.6996,0.682377,50.3289,47.2225,4.68707,51.9096, +Internal Node(19),05.02.1998 14:35:11,459356,-7.32599e+06,2733.97,3.048e-07,386.307,10.0655,388.157,1000.09,0.318,0.153703,2.39161,0.0407476,347.175,14.6469,1.33824,41.109,40.9822,-1.85024,39.1319, +Internal Node(19),12.04.1998 23:29:05,459356,-7.32599e+06,2734.2,3.048e-07,386.769,10.0646,388.263,1000.21,0.318,0.0780621,2.39161,0.0601645,348.067,13.6575,1.6577,34.2792,40.1961,-1.49335,38.7027, +Internal Node(19),16.08.1998 08:06:27,459357,-7.326e+06,2733.96,3.048e-07,369.185,10.0568,389.13,999.891,0.318,0.0687828,2.39161,0.0474645,354.336,13.5872,2.24672,32.8356,34.7937,-19.9453,14.8484, +Internal Node(19),18.10.1998 00:25:09,459357,-7.326e+06,2733.99,3.048e-07,358.445,10.0994,358.947,999.002,0.318,0.0749986,2.39161,0.0380706,327.774,13.4217,2.64458,14.3522,31.1733,-0.501807,30.6715, +Internal Node(19),19.12.1998 16:43:50,459358,-7.326e+06,2733.93,3.048e-07,359.056,10.075,368.131,999.394,0.318,0.0675868,2.39161,0.0411572,344.905,13.2307,2.93869,26.3155,23.226,-9.07528,14.1508, +Internal Node(19),20.02.1999 09:02:31,459358,-7.326e+06,2733.99,0.0311167,355.965,10.0872,355.591,998.859,0.318,0.0649739,2.54463,0.0305099,331.694,13.3802,3.10259,14.551,23.8969,0.373808,24.2707, +Internal Node(19),25.06.1999 17:39:53,459360,-7.326e+06,2733.88,3.048e-07,356.388,10.0755,362.991,999.279,0.318,0.0632849,2.39161,0.0262516,344.124,13.9924,3.16825,20.2379,18.8669,-6.60299,12.2639, +Internal Node(19),27.08.1999 09:58:34,459360,-7.326e+06,2733.88,0.0214338,348.705,10.093,349.616,998.527,0.318,0.0610092,2.39161,0.0321501,331.421,14.2136,3.35052,9.94324,18.196,-0.911164,17.2848, +Internal Node(19),30.12.1999 18:35:56,459360,-7.326e+06,2733.93,3.048e-07,345.763,10.0833,354.05,998.796,0.318,0.0584487,2.39161,0.0267513,340.582,13.8728,3.49562,14.5206,13.4682,-8.2875,5.18069, +Internal Node(19),06.09.2000 11:50:41,459361,-7.326e+06,2733.95,0.137937,352.352,10.0982,349.506,998.519,0.318,0.0569498,221.662,0.0195507,336.765,13.9587,3.59358,7.75356,12.7404,2.84669,15.5871, +Internal Node(19),09.01.2001 20:28:03,459362,-7.32601e+06,2733.73,3.048e-07,356.689,10.0855,359.459,999.048,0.318,0.0545684,2.39161,0.018661,349.518,13.9751,3.75663,11.7103,9.94162,-2.77065,7.17097, +Internal Node(19),13.03.2001 12:46:44,459362,-7.32601e+06,2733.77,3.048e-07,356.315,10.0874,358.227,998.878,0.318,0.0531437,2.39161,0.0190652,344.918,13.9098,3.86236,8.28644,13.3091,-1.91223,11.3969, +Internal Node(19),15.05.2001 05:05:26,459363,-7.32601e+06,2733.94,3.048e-07,357.513,10.0819,361.077,999.02,0.318,0.0524127,2.39161,0.0175473,349.036,13.5991,3.91696,9.26707,12.0409,-3.5633,8.4776, +Internal Node(19),17.09.2001 13:42:48,459363,-7.32601e+06,2733.94,3.048e-07,359.255,10.0809,361.571,999.01,0.318,0.051433,2.39161,0.0166512,348.517,13.5179,3.99326,7.9068,13.0539,-2.31604,10.7379, +Internal Node(19),20.01.2002 22:20:10,459364,-7.32601e+06,2734.02,3.048e-07,361.016,10.0749,363.73,999.094,0.318,0.0494403,2.39161,0.015836,350.251,13.2367,4.15692,9.42951,13.4792,-2.71328,10.7659, +Internal Node(19),26.05.2002 06:57:32,459364,-7.32601e+06,2734.04,3.048e-07,362.51,10.0724,366.104,999.163,0.318,0.0475884,2.39161,0.0150089,351.169,13.0213,4.32196,9.86562,14.9352,-3.59482,11.3404, +Internal Node(19),28.09.2002 15:34:55,459363,-7.32601e+06,2733.99,3.048e-07,363.489,10.0738,367.7,999.212,0.318,0.0459735,2.39161,0.0169198,350.714,12.9293,4.47785,10.0042,16.9854,-4.21065,12.7748, +Internal Node(19),30.11.2002 07:53:36,459364,-7.32601e+06,2734.01,3.048e-07,364.012,10.0723,369.415,999.237,0.318,0.044439,2.39161,0.0279158,351.364,12.7839,4.63513,10.4249,18.0513,-5.40382,12.6475, +Internal Node(19),01.02.2003 00:12:17,459363,-7.32601e+06,2733.95,3.048e-07,363.284,10.0727,370.11,999.305,0.318,0.0436706,2.39161,0.0122495,350.727,12.7522,4.72004,10.6262,19.3837,-6.82592,12.5578, +Internal Node(19),04.04.2003 16:30:58,459363,-7.32601e+06,2733.93,3.048e-07,365.034,10.0723,371.034,999.37,0.318,0.0429743,2.39161,0.0414963,351.292,12.6971,4.79876,10.4576,19.7426,-5.99994,13.7427, +Internal Node(19),06.06.2003 08:49:39,459363,-7.32601e+06,2733.93,3.048e-07,365.054,10.0711,371.475,999.293,0.318,0.0423017,2.39161,0.0425885,351.144,12.6461,4.87679,11.2499,20.3308,-6.42114,13.9097, +Internal Node(19),09.10.2003 17:27:02,459363,-7.32601e+06,2733.92,3.048e-07,364.807,10.071,371.946,999.375,0.318,0.0416645,2.39161,0.0438464,350.594,12.6176,4.95334,11.4739,21.3523,-7.13957,14.2127, +Internal Node(19),16.06.2004 10:41:46,459363,-7.32601e+06,2733.93,3.048e-07,365.574,10.07,372.883,999.308,0.318,0.0404295,2.39161,0.0347025,350.489,12.545,5.10787,11.6863,22.394,-7.3097,15.0843, +Internal Node(19),19.10.2004 19:19:08,459363,-7.32601e+06,2733.92,3.048e-07,365.656,10.0682,374.154,999.313,0.318,0.038132,2.39161,0.0331916,349.451,12.4319,5.42239,12.4775,24.7036,-8.49888,16.2047, +Internal Node(19),27.06.2005 12:33:53,459363,-7.32601e+06,2733.91,3.048e-07,365.723,10.0665,374.834,999.316,0.318,0.0370296,2.39161,0.0326382,349.077,12.3675,5.58699,13.6225,25.7569,-9.11116,16.6458, +Internal Node(19),10.11.2006 23:03:22,459363,-7.32601e+06,2733.92,3.048e-07,365.543,10.0645,375.701,999.308,0.318,0.0349773,2.39161,0.0298609,348.021,12.2683,5.92064,14.3024,27.6795,-10.1578,17.5217, +Internal Node(19),01.12.2006,459363,-7.32601e+06,2733.91,3.048e-07,364.606,10.0632,377.285,999.527,0.318,0.0316552,2.39161,0.0401728,345.928,12.1506,6.55301,15.0218,31.3574,-12.6794,18.678, +Internal Node(19),01.12.2006,459363,-7.32601e+06,2733.91,3.048e-07,364.606,10.0632,377.285,999.527,0.318,0.0316552,2.39161,0.0401728,345.928,12.1506,6.55301,15.0218,31.3574,-12.6794,18.678, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Internal Node(20),09.12.1997 22:12:00,459354,-7.32599e+06,2733.48,0.118194,385.915,10.0895,382.286,1000.26,0.318,0.254163,139.456,0.245048,336.014,19.6788,0.764357,48.2837,46.2714,3.62896,49.9004, +Internal Node(20),05.02.1998 14:35:11,459354,-7.32599e+06,2733.57,3.048e-07,386.264,10.0655,388.891,1000.09,0.318,0.144877,2.39161,0.142682,347.874,14.7207,1.4249,39.5694,41.0177,-2.62719,38.3905, +Internal Node(20),12.04.1998 23:29:05,459355,-7.32599e+06,2733.78,3.048e-07,386.722,10.0646,388.897,1000.21,0.318,0.117776,2.39161,0.131823,348.587,13.6669,1.75367,33.1255,40.3099,-2.1744,38.1355, +Internal Node(20),16.08.1998 08:06:27,459356,-7.32599e+06,2733.48,3.048e-07,369.134,10.0568,389.672,999.891,0.318,0.0900839,2.39161,0.103087,354.786,13.4449,2.29996,31.8671,34.8865,-20.5378,14.3486, +Internal Node(20),18.10.1998 00:25:09,459356,-7.32599e+06,2733.49,3.048e-07,358.395,10.0994,359.345,999,0.318,0.0780832,2.39161,0.0990122,328.026,13.0308,2.67859,14.0533,31.3194,-0.950895,30.3685, +Internal Node(20),19.12.1998 16:43:50,459356,-7.32599e+06,2733.56,3.048e-07,359.018,10.075,368.107,999.394,0.318,0.0692608,2.39161,0.0913888,345.566,12.4988,3.03368,26.3536,22.5411,-9.08896,13.4521, +Internal Node(20),20.02.1999 09:02:31,459356,-7.32599e+06,2733.63,0.0311639,355.928,10.0872,355.562,998.858,0.318,0.0641165,2.55625,0.0651024,331.968,12.71,3.1905,14.5916,23.594,0.36543,23.9594, +Internal Node(20),25.06.1999 17:39:53,459357,-7.326e+06,2733.52,3.048e-07,356.352,10.0755,362.6,999.279,0.318,0.0615327,2.39161,0.0681015,344.737,12.8817,3.33757,20.8004,17.8634,-6.24789,11.6155, +Internal Node(20),27.08.1999 09:58:34,459357,-7.326e+06,2733.56,0.0232333,348.676,10.093,349.18,998.526,0.318,0.0595751,2.39161,0.0763878,331.553,13.2269,3.51512,10.3654,17.6272,-0.504011,17.1232, +Internal Node(20),30.12.1999 18:35:56,459357,-7.326e+06,2733.54,3.048e-07,345.723,10.0833,353.758,998.794,0.318,0.0570818,2.39161,0.0498316,340.974,12.8943,3.68164,15.0444,12.7839,-8.03436,4.74953, +Internal Node(20),06.09.2000 11:50:41,459358,-7.326e+06,2733.63,0.151148,352.321,10.0982,349.192,998.518,0.318,0.0548129,291.641,0.0247432,336.913,13.1929,3.82035,8.00419,12.2797,3.12835,15.408, +Internal Node(20),09.01.2001 20:28:03,459359,-7.326e+06,2733.23,3.048e-07,356.639,10.0855,359.659,999.046,0.318,0.0524695,2.39161,0.050236,349.598,13.7421,3.97441,11.6937,10.061,-3.02035,7.04066, +Internal Node(20),13.03.2001 12:46:44,459359,-7.326e+06,2733.25,3.048e-07,356.264,10.0874,358.547,998.876,0.318,0.0511833,2.39161,0.0558745,344.995,13.7322,4.07192,8.24698,13.5516,-2.28341,11.2682, +Internal Node(20),15.05.2001 05:05:26,459360,-7.326e+06,2733.34,3.048e-07,357.455,10.0819,361.495,999.017,0.318,0.0502276,2.39161,0.0460251,349.1,13.6524,4.11373,9.02171,12.3951,-4.04075,8.35434, +Internal Node(20),17.09.2001 13:42:48,459360,-7.326e+06,2733.34,3.048e-07,359.197,10.0809,361.93,999.007,0.318,0.0494245,2.39161,0.0500257,348.533,13.5359,4.18399,7.76637,13.3974,-2.73381,10.6636, +Internal Node(20),20.01.2002 22:20:10,459360,-7.326e+06,2733.38,3.048e-07,360.954,10.0749,364.381,999.091,0.318,0.0476786,2.39161,0.0445007,350.325,13.3032,4.32571,9.2134,14.0558,-3.42686,10.629, +Internal Node(20),26.05.2002 06:57:32,459360,-7.326e+06,2733.38,3.048e-07,362.446,10.0724,366.788,999.16,0.318,0.0461307,2.39161,0.0422258,351.271,13.0025,4.47495,9.7056,15.5176,-4.34194,11.1757, +Internal Node(20),28.09.2002 15:34:55,459360,-7.326e+06,2733.36,3.048e-07,363.429,10.0738,368.342,999.209,0.318,0.0448498,2.39161,0.0498472,350.812,12.8233,4.62341,9.96799,17.5302,-4.91276,12.6175, +Internal Node(20),30.11.2002 07:53:36,459360,-7.326e+06,2733.37,3.048e-07,363.952,10.0723,370.074,999.235,0.318,0.0435242,2.39161,0.0733202,351.475,12.6689,4.76534,10.4301,18.5997,-6.12202,12.4777, +Internal Node(20),01.02.2003 00:12:17,459359,-7.326e+06,2733.34,3.048e-07,363.225,10.0727,370.723,999.303,0.318,0.0429409,2.39161,0.0344762,350.842,12.5843,4.85356,10.7161,19.8808,-7.49751,12.3833, +Internal Node(20),04.04.2003 16:30:58,459359,-7.326e+06,2733.33,3.048e-07,364.984,10.0723,371.631,999.368,0.318,0.0423485,2.39161,0.10109,351.42,12.5124,4.93036,10.5734,20.2113,-6.64791,13.5634, +Internal Node(20),06.06.2003 08:49:39,459359,-7.326e+06,2733.33,3.048e-07,365.005,10.0711,372.068,999.291,0.318,0.041751,2.39161,0.104623,351.282,12.4572,5.00497,11.4079,20.786,-7.06377,13.7222, +Internal Node(20),09.10.2003 17:27:02,459359,-7.326e+06,2733.32,3.048e-07,364.757,10.071,372.53,999.372,0.318,0.0411921,2.39161,0.104712,350.731,12.4245,5.07903,11.6622,21.7989,-7.77221,14.0267, +Internal Node(20),16.06.2004 10:41:46,459359,-7.326e+06,2733.33,3.048e-07,365.525,10.07,373.456,999.306,0.318,0.0400787,2.39161,0.0956458,350.634,12.3551,5.22615,11.928,22.8222,-7.93153,14.8907, +Internal Node(20),19.10.2004 19:19:08,459359,-7.326e+06,2733.32,3.048e-07,365.607,10.0682,374.7,999.311,0.318,0.0379946,2.39161,0.0932365,349.595,12.2474,5.52866,12.8031,25.1046,-9.09243,16.0122, +Internal Node(20),27.06.2005 12:33:53,459359,-7.326e+06,2733.32,3.048e-07,365.674,10.0665,375.382,999.314,0.318,0.0369784,2.39161,0.0925677,349.234,12.1862,5.68725,14.0134,26.148,-9.70712,16.4409, +Internal Node(20),10.11.2006 23:03:22,459359,-7.326e+06,2733.32,3.048e-07,365.494,10.0645,376.228,999.305,0.318,0.035068,2.39161,0.0874237,348.182,12.0972,6.00787,14.784,28.0456,-10.7335,17.3121, +Internal Node(20),01.12.2006,459359,-7.326e+06,2733.32,3.048e-07,364.558,10.0632,377.752,999.525,0.318,0.0319301,2.39161,0.101415,346.07,12.0069,6.62179,15.6521,31.6822,-13.1945,18.4877, +Internal Node(20),01.12.2006,459359,-7.326e+06,2733.32,3.048e-07,364.558,10.0632,377.752,999.525,0.318,0.0319301,2.39161,0.101415,346.07,12.0069,6.62179,15.6521,31.6822,-13.1945,18.4877, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Internal Node(21),09.12.1997 22:12:00,459353,-7.32599e+06,2732.8,0.0903794,385.854,10.0895,384.754,1000.25,0.318,0.246558,62.3526,0.795372,337.581,20.8363,0.791729,44.8504,47.1733,1.10019,48.2735, +Internal Node(21),05.02.1998 14:35:11,459353,-7.32599e+06,2732.87,3.048e-07,386.264,10.0655,390.457,1000.09,0.318,0.145252,2.39161,0.357027,348.408,15.3355,1.42845,36.9859,42.0489,-4.19283,37.856, +Internal Node(21),12.04.1998 23:29:05,459353,-7.32599e+06,2733.07,3.048e-07,386.706,10.0646,390.165,1000.21,0.318,0.117281,2.39161,0.288803,349.052,13.9699,1.77135,31.1882,41.1136,-3.45897,37.6547, +Internal Node(21),16.08.1998 08:06:27,459354,-7.32599e+06,2732.77,3.048e-07,369.123,10.0568,390.498,999.891,0.318,0.0914691,2.39161,0.221485,355.221,13.3087,2.2832,30.4917,35.2767,-21.3752,13.9015, +Internal Node(21),18.10.1998 00:25:09,459354,-7.32599e+06,2732.78,3.048e-07,358.379,10.0994,359.937,998.999,0.318,0.08037,2.39161,0.21491,328.312,12.519,2.64128,13.6641,31.6244,-1.55762,30.0668, +Internal Node(21),19.12.1998 16:43:50,459354,-7.32599e+06,2732.82,3.048e-07,358.997,10.075,368.826,999.394,0.318,0.0719615,2.39161,0.182537,346.243,11.9772,2.98076,25.8333,22.5825,-9.82921,12.7533, +Internal Node(21),20.02.1999 09:02:31,459354,-7.32599e+06,2732.84,0.0205494,355.903,10.0872,356.233,998.856,0.318,0.0685669,2.39161,0.260584,332.285,12.1372,3.14375,14.3887,23.9475,-0.329787,23.6177, +Internal Node(21),25.06.1999 17:39:53,459354,-7.32599e+06,2732.92,3.048e-07,356.331,10.0755,362.708,999.279,0.318,0.0638175,2.39161,0.147748,345.314,11.9852,3.38866,21.0538,17.3937,-6.37689,11.0168, +Internal Node(21),27.08.1999 09:58:34,459354,-7.32599e+06,2732.93,0.01764,348.678,10.093,349.179,998.526,0.318,0.0606,2.39161,0.271249,331.701,12.2765,3.58846,10.7131,17.4775,-0.500811,16.9767, +Internal Node(21),30.12.1999 18:35:56,459355,-7.32599e+06,2732.89,3.048e-07,345.687,10.0833,354.063,998.791,0.318,0.0588998,2.39161,0.102367,341.309,12.2374,3.69982,15.269,12.7536,-8.37574,4.37783, +Internal Node(21),06.09.2000 11:50:41,459355,-7.32599e+06,2732.87,0.140831,352.248,10.0982,349.541,998.516,0.318,0.0567778,235.906,0.0927969,337.078,12.5022,3.85062,8.22698,12.4631,2.70627,15.1694, +Internal Node(21),09.01.2001 20:28:03,459355,-7.32599e+06,2732.83,3.048e-07,356.624,10.0855,359.066,999.044,0.318,0.0514478,2.39161,0.0951866,349.842,12.3024,4.28244,12.8251,9.22421,-2.44188,6.78233, +Internal Node(21),13.03.2001 12:46:44,459355,-7.32599e+06,2732.84,3.048e-07,356.255,10.0874,358.313,998.875,0.318,0.050264,2.39161,0.111693,345.167,12.3982,4.38666,9.10543,13.1469,-2.05838,11.0885, +Internal Node(21),15.05.2001 05:05:26,459356,-7.32599e+06,2732.88,3.048e-07,357.432,10.0819,361.569,999.016,0.318,0.0494395,2.39161,0.0837012,349.326,12.2955,4.44728,9.9343,12.2433,-4.13683,8.10644, +Internal Node(21),17.09.2001 13:42:48,459356,-7.32599e+06,2732.88,3.048e-07,359.179,10.0809,362.121,999.006,0.318,0.0487029,2.39161,0.0966905,348.699,12.2266,4.52101,8.56071,13.4222,-2.9418,10.4804, +Internal Node(21),20.01.2002 22:20:10,459356,-7.32599e+06,2732.89,3.048e-07,360.93,10.0749,364.637,999.09,0.318,0.0472137,2.39161,0.0812117,350.552,12.0852,4.66854,10.0143,14.0853,-3.70758,10.3777, +Internal Node(21),26.05.2002 06:57:32,459356,-7.32599e+06,2732.89,3.048e-07,362.419,10.0724,367.041,999.159,0.318,0.0458128,2.39161,0.0744935,351.508,11.9035,4.82759,10.4677,15.5323,-4.6214,10.9109, +Internal Node(21),28.09.2002 15:34:55,459356,-7.32599e+06,2732.87,3.048e-07,363.409,10.0738,368.541,999.208,0.318,0.0446264,2.39161,0.0906948,351.002,11.8303,4.97411,10.7142,17.5393,-5.13182,12.4075, +Internal Node(21),30.11.2002 07:53:36,459356,-7.32599e+06,2732.87,3.048e-07,363.95,10.0723,370.262,999.235,0.318,0.0433918,2.39161,0.123782,351.676,11.7322,5.12595,11.1378,18.5861,-6.31154,12.2746, +Internal Node(21),01.02.2003 00:12:17,459356,-7.32599e+06,2732.83,3.048e-07,363.193,10.0727,370.913,999.304,0.318,0.0429768,2.39161,0.0598639,351.018,11.7108,5.19524,11.4281,19.895,-7.72039,12.1747, +Internal Node(21),04.04.2003 16:30:58,459356,-7.32599e+06,2732.82,3.048e-07,365.011,10.0723,371.824,999.368,0.318,0.0424539,2.39161,0.169386,351.606,11.6679,5.26966,11.2292,20.2185,-6.81289,13.4056, +Internal Node(21),06.06.2003 08:49:39,459356,-7.32599e+06,2732.82,3.048e-07,365.038,10.0711,372.255,999.292,0.318,0.0418906,2.39161,0.175518,351.473,11.6332,5.34709,12.0979,20.7819,-7.21636,13.5655, +Internal Node(21),09.10.2003 17:27:02,459356,-7.32599e+06,2732.81,3.048e-07,364.789,10.071,372.704,999.373,0.318,0.0413707,2.39161,0.172613,350.913,11.621,5.42162,12.339,21.7914,-7.91586,13.8756, +Internal Node(21),16.06.2004 10:41:46,459356,-7.32599e+06,2732.81,3.048e-07,365.555,10.07,373.614,999.307,0.318,0.0403006,2.39161,0.170837,350.825,11.5746,5.5763,12.582,22.7887,-8.05929,14.7294, +Internal Node(21),19.10.2004 19:19:08,459356,-7.32599e+06,2732.81,3.048e-07,365.636,10.0682,374.816,999.312,0.318,0.0383059,2.39161,0.169207,349.782,11.5089,5.88935,13.3879,25.0344,-9.18021,15.8542, +Internal Node(21),27.06.2005 12:33:53,459356,-7.32599e+06,2732.8,3.048e-07,365.703,10.0665,375.482,999.315,0.318,0.0373238,2.39161,0.168955,349.431,11.4652,6.05458,14.6096,26.0516,-9.77971,16.2719, +Internal Node(21),10.11.2006 23:03:22,459356,-7.32599e+06,2732.8,3.048e-07,365.519,10.0645,376.291,999.307,0.318,0.0354639,2.39161,0.162309,348.383,11.4046,6.39055,15.341,27.9079,-10.7716,17.1363, +Internal Node(21),01.12.2006,459356,-7.32599e+06,2732.8,3.048e-07,364.589,10.0632,377.735,999.525,0.318,0.0323952,2.39161,0.170445,346.241,11.3544,7.03173,16.1553,31.4939,-13.1455,18.3483, +Internal Node(21),01.12.2006,459356,-7.32599e+06,2732.8,3.048e-07,364.589,10.0632,377.735,999.525,0.318,0.0323952,2.39161,0.170445,346.241,11.3544,7.03173,16.1553,31.4939,-13.1455,18.3483, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Internal Node(22),09.12.1997 22:12:00,459352,-7.32599e+06,2731.88,0.0524768,385.892,10.0895,387.819,1000.26,0.318,0.250916,12.2053,1.44941,339.12,22.3751,0.783221,40.4383,48.6987,-1.92668,46.772, +Internal Node(22),05.02.1998 14:35:11,459352,-7.32599e+06,2731.88,3.048e-07,386.731,10.0655,392.375,1000.09,0.318,0.15317,2.39161,0.462563,348.9,16.048,1.36566,33.6257,43.4747,-5.64373,37.831, +Internal Node(22),12.04.1998 23:29:05,459352,-7.32599e+06,2731.88,3.048e-07,387.061,10.0646,392.168,1000.22,0.318,0.126551,2.39161,0.343339,349.434,14.5025,1.65937,28.1918,42.7344,-5.10661,37.6278, +Internal Node(22),16.08.1998 08:06:27,459352,-7.32599e+06,2731.88,3.048e-07,369.433,10.0568,391.306,999.891,0.318,0.0962456,2.39161,0.266309,355.635,12.9472,2.19561,29.0089,35.6709,-21.8728,13.7981, +Internal Node(22),18.10.1998 00:25:09,459352,-7.32599e+06,2731.88,3.048e-07,358.676,10.0994,360.414,999.013,0.318,0.0856828,2.39161,0.249149,328.66,11.6003,2.53591,13.3113,31.7541,-1.73808,30.016, +Internal Node(22),19.12.1998 16:43:50,459352,-7.32599e+06,2731.88,3.048e-07,359.245,10.075,369.332,999.394,0.318,0.0771039,2.39161,0.202619,347.133,10.8888,2.87849,25.6412,22.1993,-10.0877,12.1116, +Internal Node(22),20.02.1999 09:02:31,459352,-7.32599e+06,2731.88,0.00590218,356.325,10.0872,356.71,998.875,0.318,0.0738187,2.39161,0.428467,332.691,11.0646,3.03767,14.399,24.0188,-0.384479,23.6344, +Internal Node(22),25.06.1999 17:39:53,459352,-7.32599e+06,2731.88,3.048e-07,356.494,10.0755,363.234,999.279,0.318,0.0691089,2.39161,0.162909,346.062,10.8126,3.28881,21.2732,17.172,-6.74052,10.4315, +Internal Node(22),27.08.1999 09:58:34,459352,-7.32599e+06,2731.88,0.00183961,349.097,10.093,349.653,998.546,0.318,0.0658253,2.39161,0.409357,331.887,11.2402,3.4919,11.0431,17.7663,-0.556193,17.2101, +Internal Node(22),30.12.1999 18:35:56,459352,-7.32599e+06,2731.88,3.048e-07,345.787,10.0833,354.336,998.795,0.318,0.063306,2.39161,0.114243,341.831,10.9907,3.66014,15.8313,12.5045,-8.54852,3.95595, +Internal Node(22),06.09.2000 11:50:41,459352,-7.32599e+06,2731.88,0.123956,352.16,10.0982,349.692,998.529,0.318,0.0607347,160.861,0.260696,337.334,11.2322,3.85261,8.70817,12.3585,2.46745,14.8259, +Internal Node(22),09.01.2001 20:28:03,459352,-7.32599e+06,2731.43,3.048e-07,356.65,10.0855,359.63,999.039,0.318,0.05845,2.39161,0.0825832,350.205,11.0488,4.20591,13.5767,9.42447,-2.97941,6.44506, +Internal Node(22),13.03.2001 12:46:44,459352,-7.32599e+06,2731.49,3.048e-07,356.321,10.0874,359.264,998.878,0.318,0.056637,2.39161,0.102987,345.353,11.2336,4.35164,9.86456,13.911,-2.94242,10.9686, +Internal Node(22),15.05.2001 05:05:26,459352,-7.32599e+06,2731.49,3.048e-07,357.44,10.0819,362.795,999.019,0.318,0.0557002,2.39161,0.0682715,349.622,11.016,4.44267,10.7239,13.1721,-5.35442,7.81768, +Internal Node(22),17.09.2001 13:42:48,459352,-7.32599e+06,2731.49,3.048e-07,359.214,10.0809,363.489,999.007,0.318,0.0549197,2.39161,0.0844311,348.913,10.9868,4.52114,9.27441,14.5759,-4.27493,10.301, +Internal Node(22),20.01.2002 22:20:10,459352,-7.32599e+06,2731.49,3.048e-07,360.933,10.0749,366.002,999.09,0.318,0.0532435,2.39161,0.0657024,350.843,10.8687,4.69562,10.7486,15.1585,-5.06932,10.0892, +Internal Node(22),26.05.2002 06:57:32,459352,-7.32599e+06,2731.49,3.048e-07,362.409,10.0724,368.386,999.158,0.318,0.0517359,2.39161,0.0568553,351.795,10.8314,4.86173,11.1671,16.5909,-5.97703,10.6138, +Internal Node(22),28.09.2002 15:34:55,459352,-7.32599e+06,2731.49,3.048e-07,363.433,10.0738,369.86,999.209,0.318,0.0504757,2.39161,0.0723641,351.225,10.8798,5.00772,11.4142,18.6357,-6.42737,12.2083, +Internal Node(22),30.11.2002 07:53:36,459352,-7.32599e+06,2731.49,3.048e-07,364.028,10.0723,371.574,999.238,0.318,0.0491524,2.39161,0.0880127,351.917,10.8403,5.16714,11.7753,19.6564,-7.54618,12.1103, +Internal Node(22),01.02.2003 00:12:17,459352,-7.32599e+06,2731.49,3.048e-07,363.165,10.0727,372.193,999.313,0.318,0.0485594,2.39161,0.0455891,351.225,10.8644,5.24103,12.0925,20.9674,-9.02722,11.9402, +Internal Node(22),04.04.2003 16:30:58,459352,-7.32599e+06,2731.49,3.048e-07,365.183,10.0723,373.088,999.378,0.318,0.047952,2.39161,0.121805,351.83,10.8436,5.31888,11.8609,21.2573,-7.9041,13.3532, +Internal Node(22),06.06.2003 08:49:39,459352,-7.32599e+06,2731.49,3.048e-07,365.223,10.0711,373.51,999.301,0.318,0.0473331,2.39161,0.125817,351.701,10.83,5.39913,12.7198,21.8083,-8.28659,13.5217, +Internal Node(22),09.10.2003 17:27:02,459352,-7.32599e+06,2731.49,3.048e-07,364.966,10.071,373.956,999.382,0.318,0.0467503,2.39161,0.120887,351.128,10.8393,5.47642,12.9449,22.8279,-8.98936,13.8386, +Internal Node(22),16.06.2004 10:41:46,459352,-7.32599e+06,2731.49,3.048e-07,365.739,10.07,374.855,999.316,0.318,0.0455871,2.39161,0.133792,351.053,10.8161,5.63643,13.1647,23.802,-9.11593,14.686, +Internal Node(22),19.10.2004 19:19:08,459352,-7.32599e+06,2731.49,3.048e-07,365.82,10.0682,376.026,999.321,0.318,0.0433944,2.39161,0.135851,350.004,10.7903,5.9593,13.8897,26.0228,-10.2068,15.8161, +Internal Node(22),27.06.2005 12:33:53,459352,-7.32599e+06,2731.49,3.048e-07,365.887,10.0665,376.686,999.324,0.318,0.0423159,2.39161,0.136919,349.668,10.7609,6.12936,15.1154,27.0177,-10.7988,16.219, +Internal Node(22),10.11.2006 23:03:22,459352,-7.32599e+06,2731.49,3.048e-07,365.693,10.0645,377.469,999.315,0.318,0.040277,2.39161,0.134318,348.625,10.7276,6.47504,15.8039,28.8445,-11.7764,17.0681, +Internal Node(22),01.12.2006,459352,-7.32599e+06,2731.49,3.048e-07,364.768,10.0632,378.859,999.533,0.318,0.036874,2.39161,0.123462,346.447,10.7202,7.13561,16.57,32.4123,-14.0912,18.3211, +Internal Node(22),01.12.2006,459352,-7.32599e+06,2731.49,3.048e-07,364.768,10.0632,378.859,999.533,0.318,0.036874,2.39161,0.123462,346.447,10.7202,7.13561,16.57,32.4123,-14.0912,18.3211, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Internal Node(23),09.12.1997 22:12:00,459351,-7.32598e+06,2732.64,0.0931612,385.848,10.0895,384.353,1000.25,0.318,0.243549,68.2891,0.728293,338.02,20.5051,0.802098,44.1609,46.3326,1.49517,47.8278, +Internal Node(23),05.02.1998 14:35:11,459350,-7.32598e+06,2732.93,3.048e-07,386.299,10.0655,389.167,1000.09,0.318,0.138974,2.39161,0.327053,348.504,14.922,1.48977,37.8452,40.6628,-2.8673,37.7955, +Internal Node(23),12.04.1998 23:29:05,459350,-7.32598e+06,2732.99,3.048e-07,386.719,10.0646,389.479,1000.21,0.318,0.113232,2.39161,0.293376,349.857,13.8523,1.83152,31.0017,39.6218,-2.75999,36.8618, +Internal Node(23),16.08.1998 08:06:27,459350,-7.32598e+06,2732.41,3.048e-07,369.101,10.0568,390.14,999.891,0.318,0.0921077,2.39161,0.210416,355.632,13.5699,2.26512,29.7682,34.5087,-21.0393,13.4694, +Internal Node(23),18.10.1998 00:25:09,459349,-7.32598e+06,2732.43,3.048e-07,358.355,10.0994,360.027,998.998,0.318,0.0816198,2.39161,0.206845,328.613,12.7883,2.59267,13.0518,31.4141,-1.67161,29.7425, +Internal Node(23),19.12.1998 16:43:50,459349,-7.32598e+06,2732.38,3.048e-07,358.96,10.075,368.893,999.394,0.318,0.0738468,2.39161,0.173999,346.78,12.3061,2.88939,24.62,22.113,-9.93299,12.18, +Internal Node(23),20.02.1999 09:02:31,459349,-7.32598e+06,2732.39,0.0179662,355.868,10.0872,356.436,998.855,0.318,0.0705036,2.39161,0.25328,332.513,12.4234,3.03744,13.6674,23.9232,-0.568294,23.3549, +Internal Node(23),25.06.1999 17:39:53,459348,-7.32598e+06,2732.37,3.048e-07,356.281,10.0755,362.85,999.279,0.318,0.0660982,2.39161,0.150547,345.657,12.1966,3.25132,20.0087,17.1926,-6.56847,10.6241, +Internal Node(23),27.08.1999 09:58:34,459348,-7.32598e+06,2732.3,0.0106842,348.624,10.093,349.533,998.523,0.318,0.0633044,2.39161,0.259439,331.638,12.4737,3.40716,10.2011,17.8954,-0.90856,16.9869, +Internal Node(23),30.12.1999 18:35:56,459348,-7.32598e+06,2732.25,3.048e-07,345.628,10.0833,354.273,998.789,0.318,0.0612185,2.39161,0.111829,341.414,12.4071,3.51097,14.4008,12.8588,-8.64436,4.21442, +Internal Node(23),06.09.2000 11:50:41,459347,-7.32598e+06,2732.05,0.1302,352.167,10.0982,350.044,998.513,0.318,0.0601869,186.415,0.0735459,337.032,12.7506,3.57395,7.68049,13.012,2.12388,15.1359, +Internal Node(23),09.01.2001 20:28:03,459347,-7.32598e+06,2731.89,3.048e-07,356.533,10.0855,358.479,999.04,0.318,0.0545788,2.39161,0.0782486,349.906,11.3417,4.07538,13.4177,8.57369,-1.94658,6.62712, +Internal Node(23),13.03.2001 12:46:44,459347,-7.32597e+06,2731.89,3.048e-07,356.161,10.0874,358.221,998.871,0.318,0.0533328,2.39161,0.0938039,345.48,11.1034,4.18601,9.47483,12.7412,-2.06042,10.6808, +Internal Node(23),15.05.2001 05:05:26,459347,-7.32597e+06,2731.88,3.048e-07,357.335,10.0819,361.726,999.012,0.318,0.0524281,2.39161,0.0695446,349.698,10.8621,4.26414,10.3668,12.0277,-4.39103,7.63671, +Internal Node(23),17.09.2001 13:42:48,459347,-7.32597e+06,2731.88,3.048e-07,359.081,10.0809,362.372,999.002,0.318,0.051637,2.39161,0.0813832,348.977,10.8261,4.35223,8.9407,13.395,-3.29119,10.1039, +Internal Node(23),20.01.2002 22:20:10,459346,-7.32597e+06,2731.88,3.048e-07,360.83,10.0749,364.867,999.086,0.318,0.0499554,2.39161,0.0680108,350.927,10.7099,4.53835,10.4837,13.9406,-4.03698,9.90357, +Internal Node(23),26.05.2002 06:57:32,459346,-7.32597e+06,2731.88,3.048e-07,362.32,10.0724,367.182,999.154,0.318,0.048447,2.39161,0.0623723,351.884,10.6931,4.71665,10.9133,15.2974,-4.86185,10.4355, +Internal Node(23),28.09.2002 15:34:55,459347,-7.32597e+06,2731.87,3.048e-07,363.311,10.0738,368.549,999.204,0.318,0.0472162,2.39161,0.0770351,351.278,10.75,4.87741,11.2189,17.2706,-5.23734,12.0333, +Internal Node(23),30.11.2002 07:53:36,459346,-7.32597e+06,2731.87,3.048e-07,363.851,10.0723,370.181,999.23,0.318,0.045893,2.39161,0.104458,351.953,10.7255,5.0486,11.6517,18.2276,-6.32975,11.8979, +Internal Node(23),01.02.2003 00:12:17,459347,-7.32597e+06,2731.87,3.048e-07,363.098,10.0727,370.743,999.3,0.318,0.0453457,2.39161,0.0511601,351.242,10.7585,5.13025,11.9759,19.5015,-7.64531,11.8562, +Internal Node(23),04.04.2003 16:30:58,459347,-7.32597e+06,2731.86,3.048e-07,364.915,10.0723,371.617,999.364,0.318,0.0447528,2.39161,0.146303,351.844,10.7422,5.21453,11.751,19.7733,-6.70189,13.0714, +Internal Node(23),06.06.2003 08:49:39,459347,-7.32597e+06,2731.86,3.048e-07,364.942,10.0711,371.999,999.288,0.318,0.044141,2.39161,0.152061,351.715,10.7347,5.2987,12.6315,20.2834,-7.05652,13.2269, +Internal Node(23),09.10.2003 17:27:02,459347,-7.32597e+06,2731.86,3.048e-07,364.693,10.071,372.399,999.369,0.318,0.0435801,2.39161,0.149119,351.146,10.7469,5.38238,12.8712,21.2528,-7.70658,13.5462, +Internal Node(23),16.06.2004 10:41:46,459347,-7.32597e+06,2731.86,3.048e-07,365.46,10.07,373.223,999.303,0.318,0.0424324,2.39161,0.148525,351.065,10.7304,5.55287,13.0926,22.1581,-7.76283,14.3953, +Internal Node(23),19.10.2004 19:19:08,459347,-7.32597e+06,2731.86,3.048e-07,365.542,10.0682,374.237,999.308,0.318,0.0402776,2.39161,0.147534,350.009,10.7142,5.89854,13.8777,24.2276,-8.6943,15.5333, +Internal Node(23),27.06.2005 12:33:53,459347,-7.32597e+06,2731.86,3.048e-07,365.61,10.0665,374.805,999.311,0.318,0.0392216,2.39161,0.147642,349.66,10.6947,6.07974,15.1344,25.1451,-9.19553,15.9496, +Internal Node(23),10.11.2006 23:03:22,459347,-7.32597e+06,2731.86,3.048e-07,365.426,10.0645,375.423,999.302,0.318,0.0372304,2.39161,0.143006,348.61,10.6702,6.44364,15.8396,26.8135,-9.9973,16.8162, +Internal Node(23),01.12.2006,459347,-7.32597e+06,2731.85,3.048e-07,364.494,10.0632,376.571,999.521,0.318,0.0339628,2.39161,0.149083,346.407,10.6672,7.14622,16.6453,30.1637,-12.0766,18.0871, +Internal Node(23),01.12.2006,459347,-7.32597e+06,2731.85,3.048e-07,364.494,10.0632,376.571,999.521,0.318,0.0339628,2.39161,0.149083,346.407,10.6672,7.14622,16.6453,30.1637,-12.0766,18.0871, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Internal Node(24),09.12.1997 22:12:00,459350,-7.32598e+06,2733.08,0.117949,385.877,10.0895,382.3,1000.25,0.318,0.261891,138.59,0.216483,336.206,19.9307,0.742403,46.3644,46.0934,3.57754,49.671, +Internal Node(24),05.02.1998 14:35:11,459349,-7.32598e+06,2733.33,0.00486856,386.249,10.0655,387.312,1000.09,0.318,0.142214,2.39161,0.158507,347.795,14.7111,1.44771,40.0837,39.517,-1.06277,38.4543, +Internal Node(24),12.04.1998 23:29:05,459348,-7.32598e+06,2733.25,3.048e-07,386.673,10.0646,388.534,1000.21,0.318,0.116138,2.39161,0.147994,350.137,14.0992,1.77556,31.5333,38.397,-1.86165,36.5354, +Internal Node(24),16.08.1998 08:06:27,459347,-7.32598e+06,2732.58,3.048e-07,369.047,10.0568,389.422,999.891,0.318,0.0836192,2.39161,0.104399,355.535,14.3879,2.19293,29.782,33.8863,-20.3748,13.5115, +Internal Node(24),18.10.1998 00:25:09,459347,-7.32597e+06,2732.56,3.048e-07,358.304,10.0994,360.168,998.996,0.318,0.0833167,2.39161,0.10133,328.613,13.972,2.495,12.5048,31.5556,-1.86404,29.6915, +Internal Node(24),19.12.1998 16:43:50,459346,-7.32597e+06,2732.54,3.048e-07,358.918,10.075,368.673,999.394,0.318,0.0744648,2.39161,0.0879708,346.601,13.2987,2.79914,23.7139,22.0719,-9.7547,12.3172, +Internal Node(24),20.02.1999 09:02:31,459345,-7.32597e+06,2732.45,0.0224207,355.813,10.0872,356.705,998.852,0.318,0.0723494,2.39161,0.0606014,332.409,13.711,2.8699,12.8,24.296,-0.891885,23.4041, +Internal Node(24),25.06.1999 17:39:53,459345,-7.32597e+06,2732.2,3.048e-07,356.223,10.0755,363.486,999.279,0.318,0.069554,2.39161,0.0734914,345.374,13.7282,2.97567,18.2068,18.112,-7.26363,10.8483, +Internal Node(24),27.08.1999 09:58:34,459344,-7.32597e+06,2732.16,0.00850231,348.539,10.093,350.26,998.519,0.318,0.0662189,2.39161,0.0672733,331.415,13.8486,3.11409,9.21524,18.8455,-1.7211,17.1244, +Internal Node(24),30.12.1999 18:35:56,459343,-7.32597e+06,2732.01,3.048e-07,345.573,10.0833,354.989,998.787,0.318,0.0640342,2.39161,0.0591207,341.114,13.7727,3.20714,12.9891,13.8746,-9.4158,4.45885, +Internal Node(24),06.09.2000 11:50:41,459342,-7.32596e+06,2731.88,0.13192,352.149,10.0982,350.579,998.51,0.318,0.0610658,193.9,0.0190336,336.862,13.8629,3.36643,7.0505,13.7176,1.56991,15.2875, +Internal Node(24),09.01.2001 20:28:03,459342,-7.32596e+06,2731.81,3.048e-07,356.501,10.0855,358.27,999.039,0.318,0.0543382,2.39161,0.0361758,349.496,12.1506,3.85708,12.8305,8.77393,-1.76829,7.00563, +Internal Node(24),13.03.2001 12:46:44,459342,-7.32596e+06,2731.82,3.048e-07,356.126,10.0874,357.779,998.869,0.318,0.0528115,2.39161,0.0422583,345.244,11.7203,4.00596,8.96946,12.5357,-1.65283,10.8828, +Internal Node(24),15.05.2001 05:05:26,459341,-7.32596e+06,2731.77,3.048e-07,357.301,10.0819,361.023,999.01,0.318,0.0517417,2.39161,0.0349705,349.254,11.6677,4.09638,9.78233,11.7684,-3.72142,8.047, +Internal Node(24),17.09.2001 13:42:48,459341,-7.32596e+06,2731.77,3.048e-07,359.045,10.0809,361.555,999,0.318,0.0509175,2.39161,0.0392753,348.612,11.5929,4.18007,8.39093,12.9425,-2.51009,10.4324, +Internal Node(24),20.01.2002 22:20:10,459341,-7.32596e+06,2731.75,3.048e-07,360.796,10.0749,363.954,999.084,0.318,0.0491125,2.39161,0.035181,350.527,11.4661,4.3612,9.82292,13.4264,-3.15743,10.2689, +Internal Node(24),26.05.2002 06:57:32,459341,-7.32596e+06,2731.75,3.048e-07,362.287,10.0724,366.21,999.152,0.318,0.0475352,2.39161,0.0334353,351.53,11.4104,4.53016,10.1585,14.6805,-3.9236,10.7569, +Internal Node(24),28.09.2002 15:34:55,459341,-7.32596e+06,2731.75,3.048e-07,363.273,10.0738,367.495,999.202,0.318,0.0463098,2.39161,0.041017,350.971,11.3811,4.68021,10.4515,16.5238,-4.22206,12.3018, +Internal Node(24),30.11.2002 07:53:36,459341,-7.32596e+06,2731.75,3.048e-07,363.795,10.0723,369.008,999.227,0.318,0.0449517,2.39161,0.061229,351.625,11.3346,4.84212,10.8865,17.3831,-5.21329,12.1698, +Internal Node(24),01.02.2003 00:12:17,459341,-7.32596e+06,2731.75,3.048e-07,363.07,10.0727,369.535,999.296,0.318,0.0444312,2.39161,0.0282607,350.947,11.313,4.91991,11.2076,18.588,-6.46503,12.123, +Internal Node(24),04.04.2003 16:30:58,459341,-7.32596e+06,2731.75,3.048e-07,364.832,10.0723,370.365,999.361,0.318,0.0438381,2.39161,0.0906655,351.54,11.2768,5.00053,11.0284,18.8251,-5.53338,13.2917, +Internal Node(24),06.06.2003 08:49:39,459341,-7.32596e+06,2731.75,3.048e-07,364.853,10.0711,370.682,999.284,0.318,0.0432022,2.39161,0.0953472,351.406,11.27,5.08053,11.8588,19.2756,-5.8285,13.4471, +Internal Node(24),09.10.2003 17:27:02,459341,-7.32596e+06,2731.75,3.048e-07,364.605,10.071,371.037,999.365,0.318,0.0426481,2.39161,0.0937224,350.859,11.2581,5.16103,12.1108,20.1775,-6.43153,13.746, +Internal Node(24),16.06.2004 10:41:46,459341,-7.32596e+06,2731.75,3.048e-07,365.377,10.07,371.749,999.299,0.318,0.0414856,2.39161,0.0898837,350.764,11.2327,5.32346,12.3293,20.9844,-6.37153,14.6129, +Internal Node(24),19.10.2004 19:19:08,459341,-7.32596e+06,2731.75,3.048e-07,365.461,10.0682,372.562,999.304,0.318,0.0393215,2.39161,0.0890672,349.711,11.1877,5.65474,13.1603,22.8508,-7.10047,15.7504, +Internal Node(24),27.06.2005 12:33:53,459341,-7.32596e+06,2731.75,3.048e-07,365.529,10.0665,373.02,999.307,0.318,0.0382633,2.39161,0.0888309,349.349,11.1575,5.82852,14.3855,23.6706,-7.49088,16.1797, +Internal Node(24),10.11.2006 23:03:22,459341,-7.32596e+06,2731.74,3.048e-07,365.349,10.0645,373.409,999.299,0.318,0.0362442,2.39161,0.0844219,348.278,11.1355,6.17214,15.0711,25.1306,-8.06018,17.0704, +Internal Node(24),01.12.2006,459341,-7.32596e+06,2731.75,3.048e-07,364.407,10.0632,374.274,999.519,0.318,0.0330038,2.39161,0.0948982,346.082,11.0779,6.85214,15.97,28.1919,-9.86694,18.3249, +Internal Node(24),01.12.2006,459341,-7.32596e+06,2731.75,3.048e-07,364.407,10.0632,374.274,999.519,0.318,0.0330038,2.39161,0.0948982,346.082,11.0779,6.85214,15.97,28.1919,-9.86694,18.3249, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Internal Node(25),09.12.1997 22:12:00,459349,-7.32598e+06,2733.34,0.127454,385.903,10.0895,380.799,1000.26,0.318,0.297599,174.865,0.0995307,334.24,19.7948,0.650312,47.7677,46.5595,5.10351,51.663, +Internal Node(25),05.02.1998 14:35:11,459347,-7.32597e+06,2733.42,0.0208005,386.266,10.0655,386.122,1000.09,0.318,0.0931954,2.39161,0.0644117,347.012,14.9015,1.34234,41.3475,39.11,0.143488,39.2535, +Internal Node(25),12.04.1998 23:29:05,459346,-7.32597e+06,2733.08,3.048e-07,386.656,10.0646,388.794,1000.2,0.318,0.101271,2.39161,0.0417198,350.353,15.0343,1.63189,30.8322,38.4408,-2.13792,36.3029, +Internal Node(25),16.08.1998 08:06:27,459345,-7.32597e+06,2732.48,3.048e-07,369.039,10.0568,389.326,999.891,0.318,0.0887176,2.39161,0.042149,355.414,15.3827,2.05175,29.1371,33.9123,-20.2876,13.6247, +Internal Node(25),18.10.1998 00:25:09,459344,-7.32597e+06,2732.42,3.048e-07,358.291,10.0994,360.887,998.995,0.318,0.0884855,2.39161,0.0312305,328.626,15.3195,2.31469,11.7117,32.2613,-2.59664,29.6646, +Internal Node(25),19.12.1998 16:43:50,459343,-7.32597e+06,2732.16,3.048e-07,358.882,10.075,369.252,999.394,0.318,0.07924,2.39161,0.0328227,346.355,14.7282,2.58703,22.1151,22.8975,-10.3707,12.5267, +Internal Node(25),20.02.1999 09:02:31,459342,-7.32596e+06,2732.12,0.0179523,355.779,10.0872,357.296,998.851,0.318,0.0751118,2.39161,0.0261673,332.391,14.7582,2.7309,12.1333,24.9044,-1.51666,23.3878, +Internal Node(25),25.06.1999 17:39:53,459341,-7.32596e+06,2731.77,3.048e-07,356.18,10.0755,363.803,999.279,0.318,0.0715013,2.39161,0.0223656,345.203,14.7079,2.87029,17.4746,18.5998,-7.62312,10.9766, +Internal Node(25),27.08.1999 09:58:34,459341,-7.32596e+06,2731.76,0.000164131,348.493,10.093,350.895,998.517,0.318,0.0672009,2.39161,0.0252112,331.34,14.6194,3.05516,8.96194,19.5556,-2.40223,17.1534, +Internal Node(25),30.12.1999 18:35:56,459339,-7.32596e+06,2731.72,3.048e-07,345.545,10.0833,355.088,998.785,0.318,0.0633199,2.39161,0.0236595,341.003,14.2288,3.24398,13.0171,14.0851,-9.5435,4.54159, +Internal Node(25),06.09.2000 11:50:41,459337,-7.32595e+06,2731.73,0.126815,352.134,10.0982,350.556,998.509,0.318,0.0588615,172.248,0.023793,336.865,14.1006,3.49137,7.12919,13.6916,1.57796,15.2696, +Internal Node(25),09.01.2001 20:28:03,459337,-7.32595e+06,2731.42,3.048e-07,356.463,10.0855,358.971,999.038,0.318,0.0536608,2.39161,0.0171751,348.909,13.5528,3.84263,11.7674,10.062,-2.50786,7.55416, +Internal Node(25),13.03.2001 12:46:44,459337,-7.32595e+06,2731.43,3.048e-07,356.087,10.0874,357.721,998.868,0.318,0.0522641,2.39161,0.0226861,344.535,13.2769,3.9537,8.24514,13.1863,-1.63387,11.5525, +Internal Node(25),15.05.2001 05:05:26,459336,-7.32595e+06,2731.44,3.048e-07,357.269,10.0819,360.294,999.009,0.318,0.0505686,2.39161,0.0140219,348.344,13.2321,4.06649,9.05781,11.95,-3.02564,8.92435, +Internal Node(25),17.09.2001 13:42:48,459336,-7.32595e+06,2731.44,3.048e-07,359.012,10.0809,360.655,998.998,0.318,0.0497464,2.39161,0.0205854,347.869,13.0904,4.1349,7.70968,12.786,-1.64225,11.1437, +Internal Node(25),20.01.2002 22:20:10,459336,-7.32595e+06,2731.44,3.048e-07,360.765,10.0749,362.916,999.083,0.318,0.0479634,2.39161,0.017673,349.776,12.7797,4.2858,9.00515,13.1405,-2.15086,10.9896, +Internal Node(25),26.05.2002 06:57:32,459335,-7.32595e+06,2731.44,3.048e-07,362.256,10.0724,365.099,999.151,0.318,0.0463748,2.39161,0.0143243,350.879,12.5799,4.43063,9.2492,14.22,-2.84266,11.3774, +Internal Node(25),28.09.2002 15:34:55,459336,-7.32595e+06,2731.45,3.048e-07,363.244,10.0738,366.289,999.201,0.318,0.0450721,2.39161,0.0200739,350.396,12.4745,4.5651,9.39712,15.8926,-3.04518,12.8474, +Internal Node(25),30.11.2002 07:53:36,459336,-7.32595e+06,2731.45,3.048e-07,363.765,10.0723,367.629,999.226,0.318,0.0437229,2.39161,0.0298631,351.033,12.3586,4.7059,9.8149,16.5959,-3.86403,12.7318, +Internal Node(25),01.02.2003 00:12:17,459336,-7.32595e+06,2731.47,3.048e-07,363.043,10.0727,368.137,999.294,0.318,0.0431151,2.39161,0.0115903,350.398,12.3158,4.78089,10.0151,17.7392,-5.09436,12.6448, +Internal Node(25),04.04.2003 16:30:58,459336,-7.32595e+06,2731.48,3.048e-07,364.804,10.0723,368.9,999.36,0.318,0.0425148,2.39161,0.0496604,350.965,12.2647,4.85164,9.87123,17.9352,-4.09585,13.8394, +Internal Node(25),06.06.2003 08:49:39,459336,-7.32595e+06,2731.48,3.048e-07,364.826,10.0711,369.12,999.283,0.318,0.0418849,2.39161,0.0522666,350.833,12.2218,4.92375,10.66,18.2875,-4.29433,13.9932, +Internal Node(25),09.10.2003 17:27:02,459336,-7.32595e+06,2731.48,3.048e-07,364.578,10.071,369.422,999.364,0.318,0.041321,2.39161,0.0499177,350.311,12.1931,4.99508,10.8781,19.1112,-4.8448,14.2664, +Internal Node(25),16.06.2004 10:41:46,459336,-7.32595e+06,2731.48,3.048e-07,365.352,10.07,369.979,999.298,0.318,0.0401926,2.39161,0.0534288,350.201,12.1349,5.13733,11.1093,19.7778,-4.6264,15.1514, +Internal Node(25),19.10.2004 19:19:08,459336,-7.32595e+06,2731.48,3.048e-07,365.437,10.0682,370.533,999.303,0.318,0.0380978,2.39161,0.0540294,349.152,12.0412,5.4266,11.9595,21.381,-5.0957,16.2853, +Internal Node(25),27.06.2005 12:33:53,459336,-7.32595e+06,2731.48,3.048e-07,365.506,10.0665,370.859,999.306,0.318,0.0370768,2.39161,0.0545266,348.776,11.9873,5.57928,13.1021,22.0826,-5.353,16.7296, +Internal Node(25),10.11.2006 23:03:22,459336,-7.32595e+06,2731.48,3.048e-07,365.327,10.0645,370.949,999.298,0.318,0.0350923,2.39161,0.0522819,347.702,11.9037,5.89434,13.8341,23.2473,-5.62173,17.6256, +Internal Node(25),01.12.2006,459336,-7.32595e+06,2731.5,3.048e-07,364.387,10.0632,371.481,999.518,0.318,0.031947,2.39161,0.0496439,345.513,11.7992,6.49269,14.7767,25.9682,-7.09391,18.8743, +Internal Node(25),01.12.2006,459336,-7.32595e+06,2731.5,3.048e-07,364.387,10.0632,371.481,999.518,0.318,0.031947,2.39161,0.0496439,345.513,11.7992,6.49269,14.7767,25.9682,-7.09391,18.8743, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Internal Node(26),09.12.1997 22:12:00,459348,-7.32598e+06,2733.55,0.129693,385.923,10.0895,379.173,1000.26,0.318,0.0317984,184.245,0.0890409,331.956,19.6916,0.528378,49.0397,47.2169,6.75031,53.9672, +Internal Node(26),05.02.1998 14:35:11,459345,-7.32597e+06,2733.46,0.0346028,386.263,10.0655,385.054,1000.09,0.318,0.101347,3.4993,0.03656,346.272,15.0767,1.22925,42.3789,38.7816,1.20987,39.9915, +Internal Node(26),12.04.1998 23:29:05,459344,-7.32597e+06,2733.08,3.048e-07,386.638,10.0646,388.297,1000.2,0.318,0.10872,2.39161,0.0651229,350.615,15.4908,1.51213,30.7169,37.6815,-1.6584,36.0231, +Internal Node(26),16.08.1998 08:06:27,459342,-7.32596e+06,2732.3,3.048e-07,369.01,10.0568,388.253,999.891,0.318,0.0913934,2.39161,0.0369124,354.85,15.8595,1.98689,29.3369,33.4031,-19.2433,14.1598, +Internal Node(26),18.10.1998 00:25:09,459341,-7.32596e+06,2732.29,3.048e-07,358.259,10.0994,360.103,998.994,0.318,0.0875931,2.39161,0.0425527,328.685,15.4283,2.33904,11.8599,31.4183,-1.84399,29.5743, +Internal Node(26),19.12.1998 16:43:50,459340,-7.32596e+06,2731.96,3.048e-07,358.851,10.075,368.397,999.394,0.318,0.0775545,2.39161,0.0335188,346.089,14.9894,2.61275,22.3977,22.3075,-9.54594,12.7616, +Internal Node(26),20.02.1999 09:02:31,459339,-7.32596e+06,2731.97,0.0193916,355.755,10.0872,356.737,998.849,0.318,0.0733678,2.39161,0.0127039,332.471,14.9667,2.7868,12.2539,24.266,-0.982412,23.2836, +Internal Node(26),25.06.1999 17:39:53,459337,-7.32595e+06,2731.64,3.048e-07,356.155,10.0755,362.966,999.279,0.318,0.0693238,2.39161,0.025063,345.117,14.92,2.95267,17.8719,17.8486,-6.81037,11.0383, +Internal Node(26),27.08.1999 09:58:34,459337,-7.32595e+06,2731.65,3.048e-07,348.464,10.093,350.628,998.516,0.318,0.0651831,2.39161,0.0223837,331.321,14.8146,3.15108,9.15837,19.3075,-2.16455,17.143, +Internal Node(26),30.12.1999 18:35:56,459335,-7.32595e+06,2731.73,3.048e-07,345.537,10.0833,354.19,998.785,0.318,0.0617747,2.39161,0.0162201,340.889,14.0898,3.3076,13.6157,13.3016,-8.65316,4.64841, +Internal Node(26),06.09.2000 11:50:41,459332,-7.32594e+06,2731.74,0.124239,352.136,10.0982,349.851,998.508,0.318,0.0593317,161.964,0.0297002,336.934,13.7775,3.41301,7.39983,12.9174,2.28448,15.2019, +Internal Node(26),09.01.2001 20:28:03,459332,-7.32594e+06,2731.46,3.048e-07,356.459,10.0855,358.279,999.038,0.318,0.0548641,2.39161,0.0115037,348.601,13.4284,3.82553,12.3433,9.67813,-1.8198,7.85833, +Internal Node(26),13.03.2001 12:46:44,459332,-7.32594e+06,2731.47,0.0160625,356.085,10.0874,356.826,998.868,0.318,0.0533041,2.39161,0.00918656,344.096,13.3001,3.9463,8.75829,12.7302,-0.741132,11.989, +Internal Node(26),15.05.2001 05:05:26,459331,-7.32594e+06,2731.45,3.048e-07,357.263,10.0819,359.328,999.008,0.318,0.0516668,2.39161,0.0166605,347.915,12.9782,4.05428,9.92397,11.4126,-2.06437,9.34823, +Internal Node(26),17.09.2001 13:42:48,459331,-7.32594e+06,2731.44,0.0134038,359.006,10.0809,359.582,998.998,0.318,0.0503578,2.39161,0.00759775,347.517,12.8054,4.14647,8.53048,12.0644,-0.575657,11.4888, +Internal Node(26),20.01.2002 22:20:10,459330,-7.32594e+06,2731.49,0.00946411,360.765,10.0749,361.451,999.083,0.318,0.0478762,2.39161,0.0067052,349.404,12.4986,4.35714,9.94283,12.0465,-0.686299,11.3602, +Internal Node(26),26.05.2002 06:57:32,459330,-7.32594e+06,2731.51,3.048e-07,362.257,10.0724,363.454,999.151,0.318,0.0459295,2.39161,0.00628195,350.57,12.3122,4.53935,10.1444,12.8841,-1.19796,11.6862, +Internal Node(26),28.09.2002 15:34:55,459330,-7.32594e+06,2731.5,0.00301378,363.242,10.0738,364.468,999.201,0.318,0.0446732,2.39161,0.00808486,350.108,12.2644,4.67296,10.1887,14.3608,-1.22616,13.1346, +Internal Node(26),30.11.2002 07:53:36,459330,-7.32594e+06,2731.51,3.048e-07,363.759,10.0723,365.583,999.226,0.318,0.0431174,2.39161,0.013442,350.735,12.1439,4.84027,10.5999,14.8478,-1.82375,13.0241, +Internal Node(26),01.02.2003 00:12:17,459331,-7.32594e+06,2731.5,3.048e-07,363.04,10.0727,366.04,999.294,0.318,0.0427692,2.39161,0.00537027,350.107,12.166,4.88976,10.697,15.9328,-3.00025,12.9326, +Internal Node(26),04.04.2003 16:30:58,459331,-7.32594e+06,2731.5,3.048e-07,364.792,10.0723,366.722,999.36,0.318,0.0421797,2.39161,0.0202078,350.65,12.1333,4.96092,10.5012,16.0724,-1.93058,14.1418, +Internal Node(26),06.06.2003 08:49:39,459331,-7.32594e+06,2731.51,3.048e-07,364.815,10.0711,366.793,999.282,0.318,0.0414035,2.39161,0.0209468,350.506,12.0735,5.05098,11.3217,16.2866,-1.97815,14.3084, +Internal Node(26),09.10.2003 17:27:02,459331,-7.32594e+06,2731.51,3.048e-07,364.563,10.071,367,999.365,0.318,0.0408913,2.39161,0.0225075,349.998,12.0624,5.11832,11.4734,17.0017,-2.43713,14.5646, +Internal Node(26),16.06.2004 10:41:46,459331,-7.32594e+06,2731.51,3.048e-07,365.344,10.07,367.327,999.297,0.318,0.0396454,2.39161,0.020063,349.874,11.9957,5.27867,11.6601,17.453,-1.98335,15.4697, +Internal Node(26),19.10.2004 19:19:08,459331,-7.32594e+06,2731.5,0.00172874,365.431,10.0682,367.473,999.303,0.318,0.0374359,2.39161,0.0192716,348.818,11.9042,5.59304,12.3962,18.6556,-2.04238,16.6132, +Internal Node(26),27.06.2005 12:33:53,459331,-7.32594e+06,2731.5,0.0029678,365.5,10.0665,367.586,999.306,0.318,0.0363647,2.39161,0.0189802,348.42,11.8522,5.75908,13.4998,19.1667,-2.08631,17.0804, +Internal Node(26),10.11.2006 23:03:22,459330,-7.32594e+06,2731.44,0.00888029,365.317,10.0645,367.262,999.297,0.318,0.0343848,2.39161,0.0175949,347.32,11.7875,6.08204,14.086,19.9412,-1.94436,17.9968, +Internal Node(26),01.12.2006,459331,-7.32594e+06,2731.44,3.048e-07,364.375,10.0632,367.286,999.517,0.318,0.0312876,2.39161,0.0173849,345.133,11.7077,6.69947,14.739,22.1528,-2.91024,19.2426, +Internal Node(26),01.12.2006,459331,-7.32594e+06,2731.44,3.048e-07,364.375,10.0632,367.286,999.517,0.318,0.0312876,2.39161,0.0173849,345.133,11.7077,6.69947,14.739,22.1528,-2.91024,19.2426, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Internal Node(27),09.12.1997 22:12:00,459347,-7.32597e+06,2734.1,0.147551,385.976,10.0895,374.736,1000.26,0.318,0.0437735,271.312,0.220262,329.233,17.6725,0.378856,52.1135,45.5033,11.2401,56.7435, +Internal Node(27),05.02.1998 14:35:11,459343,-7.32597e+06,2733.6,0.0551887,386.281,10.0655,382.919,1000.09,0.318,0.1155,14.197,0.0210949,344.908,14.7144,1.07485,43.781,38.0113,3.36173,41.373, +Internal Node(27),12.04.1998 23:29:05,459343,-7.32596e+06,2733.24,0.0109569,386.641,10.0646,386.231,1000.2,0.318,0.110019,2.39161,0.052472,350.928,14.7029,1.494,31.3789,35.3029,0.409962,35.7129, +Internal Node(27),16.08.1998 08:06:27,459340,-7.32596e+06,2732.27,3.048e-07,368.999,10.0568,385.907,999.891,0.318,0.0768364,2.39161,0.0473983,354.054,15.6606,2.00357,30.6685,31.8532,-16.9079,14.9453, +Internal Node(27),18.10.1998 00:25:09,459338,-7.32596e+06,2732.77,0.0150285,358.289,10.0994,356.971,998.996,0.318,0.0799907,2.39161,0.0278471,328.832,14.054,2.53886,12.8987,28.1394,1.31802,29.4574, +Internal Node(27),19.12.1998 16:43:50,459337,-7.32595e+06,2732.01,3.048e-07,358.843,10.075,366.59,999.394,0.318,0.0743978,2.39161,0.0487932,345.848,14.7362,2.7251,23.4309,20.7421,-7.74765,12.9944, +Internal Node(27),20.02.1999 09:02:31,459336,-7.32595e+06,2732.5,0.0402661,355.805,10.0872,354.09,998.852,0.318,0.0670429,5.51396,0.0246437,332.626,13.7858,3.05176,13.3107,21.4643,1.71478,23.179, +Internal Node(27),25.06.1999 17:39:53,459332,-7.32594e+06,2731.88,3.048e-07,356.163,10.0755,360.144,999.279,0.318,0.0705537,2.39161,0.0319913,344.836,14.0393,2.85848,19.4603,15.3079,-3.98052,11.3273, +Internal Node(27),27.08.1999 09:58:34,459332,-7.32594e+06,2731.88,0.00784842,348.459,10.093,348.906,998.516,0.318,0.0655228,2.39161,0.0402632,331.369,14.0336,3.08896,9.83893,17.5371,-0.447079,17.09, +Internal Node(27),30.12.1999 18:35:56,459327,-7.32593e+06,2731.75,3.048e-07,345.537,10.0833,351.172,998.785,0.318,0.0688574,2.39161,0.016103,340.424,12.3763,2.99493,15.7579,10.7486,-5.63484,5.11373, +Internal Node(27),06.09.2000 11:50:41,459330,-7.32594e+06,2731.63,0.112869,352.124,10.0982,349.102,998.508,0.318,0.0620725,121.442,0.0982865,336.974,13.3528,3.34447,7.65232,12.1278,3.02195,15.1498, +Internal Node(27),09.01.2001 20:28:03,459325,-7.32593e+06,2731.35,0.00700578,356.445,10.0855,356.503,999.038,0.318,0.0561853,2.39161,0.00571538,348.098,12.0464,3.66874,14.4559,8.40537,-0.0581746,8.34719, +Internal Node(27),13.03.2001 12:46:44,459327,-7.32593e+06,2731.38,0.0306954,356.078,10.0874,355.476,998.867,0.318,0.0523087,2.44268,0.00441774,343.682,12.5375,3.94951,9.88771,11.7947,0.601272,12.3959, +Internal Node(27),15.05.2001 05:05:26,459328,-7.32593e+06,2731.38,3.048e-07,357.253,10.0819,358.422,999.008,0.318,0.0507263,2.39161,0.0154335,347.573,12.4668,4.07312,10.8557,10.8485,-1.16864,9.67984, +Internal Node(27),17.09.2001 13:42:48,459325,-7.32593e+06,2732.55,0.0617207,359.119,10.0809,356.804,999.003,0.318,0.0450033,19.8582,0.00748178,347.272,10.4246,4.59228,11.0096,9.53206,2.31569,11.8477, +Internal Node(27),20.01.2002 22:20:10,459325,-7.32593e+06,2732.27,0.0588604,360.846,10.0749,359.064,999.086,0.318,0.0441472,17.2233,0.0062346,349.029,10.5982,4.68156,12.4699,10.0353,1.78199,11.8173, +Internal Node(27),26.05.2002 06:57:32,459325,-7.32593e+06,2732.03,0.0410708,362.313,10.0724,361.316,999.154,0.318,0.0431252,5.85119,0.00318468,350.228,10.8444,4.79268,12.2795,11.0888,0.996663,12.0854, +Internal Node(27),28.09.2002 15:34:55,459325,-7.32593e+06,2731.91,0.0487197,363.289,10.0738,362.355,999.203,0.318,0.0419111,9.76697,0.0086757,349.805,11.0569,4.93183,12.0407,12.5496,0.93436,13.484, +Internal Node(27),30.11.2002 07:53:36,459325,-7.32593e+06,2731.79,0.0362209,363.799,10.0723,363.4,999.228,0.318,0.0408263,4.0135,0.00906607,350.386,11.0937,5.06328,12.3902,13.0143,0.398952,13.4132, +Internal Node(27),01.02.2003 00:12:17,459326,-7.32593e+06,2731.76,3.048e-07,363.067,10.0727,363.781,999.296,0.318,0.0402048,2.39161,0.0017472,349.797,11.2223,5.14177,12.3585,13.9844,-0.713916,13.2705, +Internal Node(27),04.04.2003 16:30:58,459326,-7.32593e+06,2731.75,0.0451485,364.833,10.0723,364.37,999.361,0.318,0.0395166,7.77276,0.019964,350.319,11.2234,5.23155,12.1228,14.0504,0.463619,14.514, +Internal Node(27),06.06.2003 08:49:39,459326,-7.32593e+06,2731.7,0.0484474,364.851,10.0711,364.373,999.284,0.318,0.0390426,9.60409,0.0226152,350.137,11.2061,5.29521,13.0192,14.236,0.477725,14.7137, +Internal Node(27),09.10.2003 17:27:02,459326,-7.32593e+06,2731.69,0.0349136,364.602,10.071,364.511,999.365,0.318,0.0384177,3.59443,0.0156227,349.66,11.2455,5.38156,13.0933,14.8507,0.0908385,14.9416, +Internal Node(27),16.06.2004 10:41:46,459326,-7.32593e+06,2731.67,0.0610498,365.373,10.07,364.696,999.299,0.318,0.0372244,19.2175,0.0256641,349.515,11.213,5.55456,13.2734,15.1818,0.676145,15.8579, +Internal Node(27),19.10.2004 19:19:08,459326,-7.32593e+06,2731.65,0.0723729,365.455,10.0682,364.556,999.304,0.318,0.0349366,32.0165,0.0271031,348.449,11.1724,5.91906,14.0208,16.1065,0.899585,17.0061, +Internal Node(27),27.06.2005 12:33:53,459326,-7.32593e+06,2731.64,0.0779455,365.522,10.0665,364.525,999.307,0.318,0.0338651,39.9962,0.0270794,348.026,11.1504,6.10683,15.2117,16.4992,0.997398,17.4966, +Internal Node(27),10.11.2006 23:03:22,459325,-7.32593e+06,2731.54,0.0933495,365.333,10.0645,364.007,999.298,0.318,0.0320881,68.7039,0.0266993,346.887,11.1185,6.4457,15.8573,17.1199,1.32559,18.4455, +Internal Node(27),01.12.2006,459326,-7.32593e+06,2731.53,0.0699558,364.393,10.0632,363.574,999.518,0.318,0.0288838,28.9146,0.023732,344.722,11.1184,7.16202,16.3399,18.8512,0.819806,19.671, +Internal Node(27),01.12.2006,459326,-7.32593e+06,2731.53,0.0699558,364.393,10.0632,363.574,999.518,0.318,0.0288838,28.9146,0.023732,344.722,11.1184,7.16202,16.3399,18.8512,0.819806,19.671, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Internal Node(28),09.12.1997 22:12:00,459347,-7.32597e+06,2735.6,0.177857,386.122,10.0895,370.137,1000.27,0.318,0.0470098,475.185,0.454974,328.503,14.3281,0.351242,54.4506,41.6342,15.9847,57.6189, +Internal Node(28),05.02.1998 14:35:11,459343,-7.32596e+06,2735.22,0.103092,386.439,10.0655,376.579,1000.09,0.318,0.125223,92.5389,0.0816502,343.626,10.6405,0.991845,47.9373,32.9535,9.85976,42.8133, +Internal Node(28),12.04.1998 23:29:05,459341,-7.32596e+06,2735.91,0.0625753,386.883,10.0646,380.367,1000.21,0.318,0.112415,20.6945,0.0897109,351.051,10.3642,1.47173,35.0963,29.3153,6.51615,35.8314, +Internal Node(28),16.08.1998 08:06:27,459339,-7.32596e+06,2736.11,3.048e-07,369.321,10.0568,377.973,999.891,0.318,0.07168,2.39161,0.150981,354.079,10.1419,2.21917,39.075,23.894,-8.65251,15.2415, +Internal Node(28),18.10.1998 00:25:09,459337,-7.32595e+06,2735.97,0.061953,358.592,10.0994,352.368,999.01,0.318,0.0779601,20.0832,0.0518267,329.651,10.149,2.75042,14.9002,22.7168,6.22466,28.9414, +Internal Node(28),19.12.1998 16:43:50,459335,-7.32595e+06,2736.07,3.048e-07,359.167,10.075,359.981,999.394,0.318,0.0745467,2.39161,0.122249,346.143,10.0988,2.90469,30.2515,13.8379,-0.814574,13.0234, +Internal Node(28),20.02.1999 09:02:31,459334,-7.32595e+06,2735.53,0.0951849,356.092,10.0872,349.11,998.865,0.318,0.0693715,72.8367,0.192098,333.31,10.144,3.08673,15.6459,15.8006,6.98186,22.7825, +Internal Node(28),25.06.1999 17:39:53,459332,-7.32594e+06,2735.84,3.048e-07,356.501,10.0755,355.248,999.279,0.318,0.0715561,2.39161,0.0397219,345.695,10.1024,3.11783,23.8607,9.55291,1.25331,10.8062, +Internal Node(28),27.08.1999 09:58:34,459330,-7.32594e+06,2734.07,0.0442115,348.613,10.093,343.027,998.523,0.318,0.0609629,7.29879,0.181916,331.751,10.1712,3.48506,12.2408,11.2762,5.58596,16.8622, +Internal Node(28),30.12.1999 18:35:56,459327,-7.32593e+06,2734.81,3.048e-07,345.818,10.0833,348.8,998.799,0.318,0.0712426,2.39161,0.036383,341.079,10.1161,3.15624,17.6379,7.72107,-2.98162,4.73945, +Internal Node(28),06.09.2000 11:50:41,459325,-7.32593e+06,2734.08,0.154331,352.362,10.0982,346.37,998.516,0.318,0.0688633,310.462,0.129725,337.539,10.1653,3.21111,9.21453,8.83083,5.99171,14.8225, +Internal Node(28),09.01.2001 20:28:03,459323,-7.32592e+06,2734.98,0.0536775,356.795,10.0855,354.042,999.054,0.318,0.0577982,13.0624,0.0122545,348.755,10.1082,3.74892,16.3519,5.28675,2.75338,8.04013, +Internal Node(28),13.03.2001 12:46:44,459324,-7.32592e+06,2735.82,0.113948,356.515,10.0874,352.242,998.888,0.318,0.0632112,124.96,0.0160394,344.212,10.1396,3.93233,12.0033,8.02973,4.27358,12.3033, +Internal Node(28),15.05.2001 05:05:26,459322,-7.32592e+06,2736.19,0.0500251,357.717,10.0819,355.167,999.03,0.318,0.0697416,10.5733,0.0141462,347.855,10.1117,3.81589,13.2495,7.31172,2.55021,9.86193, +Internal Node(28),17.09.2001 13:42:48,459322,-7.32592e+06,2736.56,0.127292,359.514,10.0809,355.83,999.022,0.318,0.0694168,174.202,0.0117644,348.034,10.1087,3.92035,10.8371,7.79579,3.68416,11.48, +Internal Node(28),20.01.2002 22:20:10,459321,-7.32592e+06,2736.83,0.142219,361.294,10.0749,357.624,999.107,0.318,0.0677328,242.949,0.00910836,349.882,10.0975,4.12872,12.3124,7.74254,3.67008,11.4126, +Internal Node(28),26.05.2002 06:57:32,459322,-7.32592e+06,2737.12,0.134376,362.814,10.0724,359.357,999.177,0.318,0.0657265,204.931,0.00975099,351.283,10.0925,4.34661,12.2974,8.07412,3.45744,11.5316, +Internal Node(28),28.09.2002 15:34:55,459322,-7.32592e+06,2737.43,0.165555,363.832,10.0738,359.791,999.228,0.318,0.0228183,383.241,0.0148154,350.897,10.0924,4.54391,12.2252,8.89365,4.04121,12.9349, +Internal Node(28),30.11.2002 07:53:36,459322,-7.32592e+06,2737.68,0.164964,364.381,10.0723,360.559,999.255,0.318,0.022344,379.153,0.0204237,351.568,10.0858,4.7419,12.6406,8.9909,3.82174,12.8126, +Internal Node(28),01.02.2003 00:12:17,459322,-7.32592e+06,2737.93,0.122626,363.677,10.0727,360.467,999.322,0.318,0.0223341,155.739,0.011491,350.939,10.0861,4.83391,12.896,9.52763,3.20989,12.7375, +Internal Node(28),04.04.2003 16:30:58,459322,-7.32592e+06,2738.07,0.202067,365.457,10.0723,360.935,999.387,0.318,0.0221426,696.838,0.0279832,351.486,10.0833,4.93115,12.6954,9.4495,4.5215,13.971, +Internal Node(28),06.06.2003 08:49:39,459322,-7.32592e+06,2738.18,0.217085,365.489,10.0711,360.858,999.313,0.318,0.021985,864.043,0.0281498,351.344,10.0807,5.02243,13.6847,9.51357,4.63149,14.1451, +Internal Node(28),09.10.2003 17:27:02,459322,-7.32592e+06,2738.27,0.208117,365.251,10.071,360.719,999.393,0.318,0.0217178,761.324,0.0298177,350.847,10.0806,5.11908,13.9041,9.87212,4.53149,14.4036, +Internal Node(28),16.06.2004 10:41:46,459322,-7.32592e+06,2738.33,0.259573,366.028,10.07,360.735,999.329,0.318,0.0210396,1477.15,0.0261813,350.722,10.0782,5.31577,14.121,10.0133,5.29283,15.3061, +Internal Node(28),19.10.2004 19:19:08,459322,-7.32592e+06,2738.39,0.299213,366.118,10.0682,360.167,999.335,0.318,0.0196799,2262.5,0.0237365,349.644,10.0754,5.71613,15.0284,10.5235,5.9507,16.4742, +Internal Node(28),27.06.2005 12:33:53,459323,-7.32592e+06,2738.44,0.32031,366.19,10.0665,359.916,999.338,0.318,0.0190731,2775.6,0.0225047,349.204,10.0728,5.9241,16.4381,10.7121,6.2744,16.9865, +Internal Node(28),10.11.2006 23:03:22,459322,-7.32592e+06,2738.47,0.360707,366.013,10.0645,359.216,999.33,0.318,0.0178731,3963.78,0.0195866,348.119,10.0703,6.34522,17.192,11.0971,6.79695,17.8941, +Internal Node(28),01.12.2006,459323,-7.32592e+06,2738.53,0.364068,365.081,10.0632,357.957,999.547,0.318,0.0159636,4075.63,0.0198169,345.873,10.0688,7.14552,18.0238,12.084,7.12386,19.2078, +Internal Node(28),01.12.2006,459323,-7.32592e+06,2738.53,0.364068,365.081,10.0632,357.957,999.547,0.318,0.0159636,4075.63,0.0198169,345.873,10.0688,7.14552,18.0238,12.084,7.12386,19.2078, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Internal Node(29),09.12.1997 22:12:00,459348,-7.32597e+06,2736.67,0.18295,386.228,10.0895,373.978,1000.27,0.318,0.0400738,517.182,0.259507,329.497,16.2947,0.416055,50.8256,44.4813,12.2499,56.7312, +Internal Node(29),05.02.1998 14:35:11,459344,-7.32597e+06,2737.13,0.0979317,386.624,10.0655,380.006,1000.09,0.318,0.133661,79.326,0.0992086,344.068,11.3865,0.934712,44.497,35.9386,6.61758,42.5562, +Internal Node(29),12.04.1998 23:29:05,459343,-7.32596e+06,2738.81,0.0416419,387.141,10.0646,384.037,1000.22,0.318,0.153762,6.09871,0.040182,350.078,10.7391,1.09893,33.596,33.9594,3.10376,37.0632, +Internal Node(29),16.08.1998 08:06:27,459341,-7.32596e+06,2739.98,3.048e-07,369.73,10.0568,383.463,999.891,0.318,0.012086,2.39161,0.0365049,355.257,10.1929,1.60723,37.2106,28.2062,-13.7325,14.4736, +Internal Node(29),18.10.1998 00:25:09,459340,-7.32596e+06,2738.57,0.0361609,358.821,10.0994,355.771,999.022,0.318,0.100423,3.99359,0.0708512,330.354,10.1272,2.38387,14.3997,25.4163,3.05056,28.4668, +Internal Node(29),19.12.1998 16:43:50,459338,-7.32595e+06,2740.05,3.048e-07,359.586,10.075,365.027,999.394,0.318,0.0355658,2.39161,0.0334638,348.174,10.078,2.6003,28.6902,16.8538,-5.44096,11.4128, +Internal Node(29),20.02.1999 09:02:31,459337,-7.32595e+06,2738.75,0.079212,356.408,10.0872,352.377,998.88,0.318,0.0867038,41.9778,0.171743,333.956,10.1185,2.93185,15.6071,18.4206,4.03101,22.4516, +Internal Node(29),25.06.1999 17:39:53,459334,-7.32595e+06,2739.4,3.048e-07,356.862,10.0755,358.458,999.279,0.318,0.0317851,2.39161,0.0176169,346.843,10.0838,2.8658,23.1257,11.6147,-1.59569,10.019, +Internal Node(29),27.08.1999 09:58:34,459334,-7.32594e+06,2739.12,0.0438037,349.118,10.093,345.98,998.547,0.318,0.0841369,7.0987,0.107471,332.792,10.1204,3.19319,12.0068,13.1873,3.1385,16.3258, +Internal Node(29),30.12.1999 18:35:56,459331,-7.32594e+06,2739.15,3.048e-07,346.247,10.0833,350.483,998.805,0.318,0.0315215,2.39161,0.00899195,342.474,10.0896,3.13469,16.9371,8.00918,-4.23632,3.77286, +Internal Node(29),06.09.2000 11:50:41,459328,-7.32593e+06,2738.23,0.191016,352.769,10.0982,346.923,998.534,0.318,0.0890846,588.647,0.140579,338.296,10.1193,3.15571,9.14916,8.62787,5.84544,14.4733, +Internal Node(29),09.01.2001 20:28:03,459327,-7.32593e+06,2739.87,0.0687032,357.277,10.0855,354.517,999.077,0.318,0.0317681,27.3891,0.0204127,350.118,10.076,3.71338,15.5521,4.39847,2.75999,7.15846, +Internal Node(29),13.03.2001 12:46:44,459329,-7.32593e+06,2740.41,0.132363,356.966,10.0874,352.58,998.909,0.318,0.0305143,195.86,0.0209169,345.842,10.0947,3.96121,11.0268,6.73791,4.3858,11.1237, +Internal Node(29),15.05.2001 05:05:26,459327,-7.32593e+06,2740.76,0.0442622,358.148,10.0819,355.525,999.051,0.318,0.0337059,7.32396,0.0209586,349.532,10.0766,3.91714,11.6522,5.99328,2.62312,8.6164, +Internal Node(29),17.09.2001 13:42:48,459327,-7.32593e+06,2740.7,0.129936,359.919,10.0809,355.942,999.041,0.318,0.0326969,185.282,0.0256005,349.335,10.0769,4.0166,9.65552,6.60729,3.97629,10.5836, +Internal Node(29),20.01.2002 22:20:10,459326,-7.32593e+06,2741.17,0.148303,361.719,10.0749,357.656,999.127,0.318,0.0347842,275.486,0.0172435,351.301,10.0655,4.1351,11.0971,6.35446,4.06362,10.4181, +Internal Node(29),26.05.2002 06:57:32,459326,-7.32593e+06,2741.89,0.145691,363.281,10.0724,359.198,999.199,0.318,0.0375537,261.181,0.0170882,352.781,10.0571,4.2711,11.0269,6.41716,4.08326,10.5004, +Internal Node(29),28.09.2002 15:34:55,459327,-7.32593e+06,2742.4,0.186099,364.32,10.0738,359.464,999.251,0.318,0.0389624,544.351,0.0166067,352.356,10.0526,4.41296,10.9848,7.10827,4.85506,11.9633, +Internal Node(29),30.11.2002 07:53:36,459327,-7.32593e+06,2742.86,0.19192,364.888,10.0723,360.1,999.278,0.318,0.0415725,597.041,0.0220707,353.067,10.0468,4.54179,11.397,7.03272,4.78805,11.8208, +Internal Node(29),01.02.2003 00:12:17,459327,-7.32593e+06,2743.17,0.141071,364.191,10.0727,359.944,999.347,0.318,0.0427062,237.115,0.0153165,352.393,10.0447,4.61205,11.7463,7.55088,4.24631,11.7972, +Internal Node(29),04.04.2003 16:30:58,459328,-7.32593e+06,2743.23,0.234769,365.962,10.0723,360.439,999.413,0.318,0.0422936,1092.86,0.0260275,352.94,10.0441,4.69619,11.5754,7.49823,5.52379,13.022, +Internal Node(29),06.06.2003 08:49:39,459327,-7.32593e+06,2743.42,0.255763,366.003,10.0711,360.318,999.337,0.318,0.0436157,1413.06,0.0239634,352.838,10.0422,4.75367,12.5424,7.48025,5.68434,13.1646, +Internal Node(29),09.10.2003 17:27:02,459328,-7.32593e+06,2743.55,0.244621,365.769,10.071,360.184,999.419,0.318,0.0431116,1236.3,0.024008,352.337,10.042,4.8222,12.7859,7.84614,5.58498,13.4311, +Internal Node(29),16.06.2004 10:41:46,459328,-7.32593e+06,2743.64,0.306462,366.548,10.07,360.211,999.354,0.318,0.0419351,2430.96,0.0227045,352.252,10.0418,4.97679,12.9857,7.95934,6.33685,14.2962, +Internal Node(29),19.10.2004 19:19:08,459328,-7.32593e+06,2743.76,0.352921,366.644,10.0682,359.639,999.359,0.318,0.039446,3712.61,0.0209986,351.206,10.0414,5.31697,13.8721,8.43326,7.0046,15.4379, +Internal Node(29),27.06.2005 12:33:53,459328,-7.32593e+06,2743.84,0.37802,366.72,10.0665,359.403,999.363,0.318,0.0383421,4562.35,0.0201569,350.81,10.0408,5.48953,15.2512,8.59269,7.31688,15.9096, +Internal Node(29),10.11.2006 23:03:22,459327,-7.32593e+06,2744.09,0.433637,366.564,10.0645,358.628,999.355,0.318,0.0367591,6886.9,0.0177514,349.815,10.0403,5.80505,15.9557,8.81269,7.93678,16.7495, +Internal Node(29),01.12.2006,459328,-7.32593e+06,2744.3,0.431364,365.646,10.0632,357.407,999.575,0.318,0.0330713,6779.17,0.0154794,347.594,10.0396,6.50682,16.7894,9.81332,8.23905,18.0524, +Internal Node(29),01.12.2006,459328,-7.32593e+06,2744.3,0.431364,365.646,10.0632,357.407,999.575,0.318,0.0330713,6779.17,0.0154794,347.594,10.0396,6.50682,16.7894,9.81332,8.23905,18.0524, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Internal Node(30),09.12.1997 22:12:00,459349,-7.32598e+06,2737.48,0.181006,386.309,10.0895,376.23,1000.27,0.318,0.0344742,500.867,0.157299,330.672,17.0522,0.487695,49.0842,45.5572,10.079,55.6362, +Internal Node(30),05.02.1998 14:35:11,459346,-7.32597e+06,2738.28,0.0782601,386.732,10.0655,381.985,1000.09,0.318,0.129413,40.4825,0.0875361,344.966,11.2634,0.973206,43.8608,37.0187,4.74707,41.7658, +Internal Node(30),12.04.1998 23:29:05,459345,-7.32597e+06,2739.88,0.0189188,387.211,10.0646,385.608,1000.23,0.318,0.170097,2.39161,0.0321894,349.817,10.6202,1.00918,33.8885,35.7909,1.60326,37.3942, +Internal Node(30),16.08.1998 08:06:27,459344,-7.32596e+06,2740.93,3.048e-07,369.827,10.0568,385.732,999.891,0.318,0.0206761,2.39161,0.0214134,356.373,10.1617,1.54673,36.2171,29.359,-15.905,13.454, +Internal Node(30),18.10.1998 00:25:09,459343,-7.32596e+06,2740.48,3.048e-07,358.972,10.0994,358.209,999.029,0.318,0.0414916,2.39161,0.044946,330.755,10.1105,2.14087,14.1918,27.4543,0.7631,28.2174, +Internal Node(30),19.12.1998 16:43:50,459341,-7.32596e+06,2741.24,3.048e-07,359.723,10.075,366.777,999.394,0.318,0.0411663,2.39161,0.021685,348.699,10.0717,2.46257,28.2611,18.0778,-7.05348,11.0243, +Internal Node(30),20.02.1999 09:02:31,459340,-7.32596e+06,2740.91,0.0510918,356.616,10.0872,354.485,998.89,0.318,0.0375408,11.2642,0.0978857,334.263,10.0955,2.69416,15.6753,20.2218,2.13147,22.3533, +Internal Node(30),25.06.1999 17:39:53,459339,-7.32595e+06,2741.43,3.048e-07,357.078,10.0755,360.467,999.279,0.318,0.0376945,2.39161,0.0149532,347.487,10.0737,2.89736,22.7375,12.9793,-3.38877,9.5905, +Internal Node(30),27.08.1999 09:58:34,459338,-7.32595e+06,2741.17,0.0386449,349.364,10.093,346.975,998.558,0.318,0.0338382,4.87442,0.0462654,333.112,10.1,3.21184,11.9935,13.863,2.3888,16.2518, +Internal Node(30),30.12.1999 18:35:56,459336,-7.32595e+06,2740.88,3.048e-07,346.422,10.0833,351.23,998.805,0.318,0.032359,2.39161,0.00971294,342.962,10.0819,3.31277,16.7587,8.26875,-4.80823,3.46052, +Internal Node(30),06.09.2000 11:50:41,459334,-7.32594e+06,2740.01,0.229886,352.944,10.0982,346.501,998.545,0.318,0.0301413,1026.08,0.0519215,338.403,10.1106,3.49613,9.2299,8.09845,6.44328,14.5417, +Internal Node(30),09.01.2001 20:28:03,459333,-7.32594e+06,2741.81,0.0644492,357.465,10.0855,354.817,999.085,0.318,0.0336647,22.6099,0.0375561,350.673,10.0698,3.9351,15.2165,4.14425,2.64806,6.79231, +Internal Node(30),13.03.2001 12:46:44,459334,-7.32594e+06,2742.16,0.112729,357.136,10.0874,353.074,998.917,0.318,0.0336856,120.991,0.0474191,346.689,10.084,4.08299,10.3655,6.38516,4.06136,10.4465, +Internal Node(30),15.05.2001 05:05:26,459332,-7.32594e+06,2743.01,0.0131134,358.349,10.0819,356.057,999.061,0.318,0.0406273,2.39161,0.0167784,350.623,10.0634,3.98556,10.4472,5.43426,2.29231,7.72657, +Internal Node(30),17.09.2001 13:42:48,459332,-7.32594e+06,2743.01,0.111015,360.143,10.0809,356.261,999.051,0.318,0.0398209,115.555,0.0465161,350.124,10.0622,4.06993,8.7906,6.13677,3.88183,10.0186, +Internal Node(30),20.01.2002 22:20:10,459332,-7.32594e+06,2743.66,0.123627,361.961,10.0749,358.017,999.139,0.318,0.045447,159.583,0.0404232,352.243,10.0513,4.13162,10.2527,5.77445,3.94437,9.71882, +Internal Node(30),26.05.2002 06:57:32,459332,-7.32594e+06,2744.4,0.120693,363.526,10.0724,359.7,999.21,0.318,0.0501426,148.489,0.0348991,353.747,10.0454,4.17548,10.1923,5.95265,3.8258,9.77845, +Internal Node(30),28.09.2002 15:34:55,459332,-7.32594e+06,2744.86,0.161515,364.56,10.0738,360.174,999.262,0.318,0.0500844,355.862,0.0378216,353.328,10.0438,4.23868,10.2713,6.84576,4.38571,11.2315, +Internal Node(30),30.11.2002 07:53:36,459332,-7.32594e+06,2745.44,0.164485,365.139,10.0723,361.119,999.29,0.318,0.0508327,375.858,0.0531006,354.197,10.0429,4.25784,10.6646,6.92281,4.02012,10.9429, +Internal Node(30),01.02.2003 00:12:17,459333,-7.32594e+06,2745.69,0.107507,364.435,10.0727,361.037,999.359,0.318,0.0507163,104.943,0.0211224,353.448,10.0425,4.31009,11.1105,7.58936,3.39852,10.9879, +Internal Node(30),04.04.2003 16:30:58,459333,-7.32594e+06,2745.73,0.205781,366.207,10.0723,361.553,999.424,0.318,0.0499451,735.975,0.0707846,353.99,10.0423,4.38972,10.9277,7.56255,4.65375,12.2163, +Internal Node(30),06.06.2003 08:49:39,459333,-7.32594e+06,2746,0.226331,366.255,10.0711,361.542,999.349,0.318,0.0504106,979.213,0.0704015,353.977,10.0421,4.39829,11.8255,7.56576,4.71302,12.2788, +Internal Node(30),09.10.2003 17:27:02,459333,-7.32594e+06,2746.11,0.212785,366.019,10.071,361.393,999.43,0.318,0.0498585,813.712,0.0732185,353.415,10.0419,4.47143,12.0975,7.97799,4.62545,12.6034, +Internal Node(30),16.06.2004 10:41:46,459333,-7.32594e+06,2746.24,0.275302,366.802,10.07,361.447,999.365,0.318,0.048724,1762.28,0.0617155,353.351,10.0417,4.61186,12.2831,8.09535,5.35572,13.4511, +Internal Node(30),19.10.2004 19:19:08,459333,-7.32594e+06,2746.37,0.317374,366.899,10.0682,360.951,999.371,0.318,0.0460228,2699.99,0.054785,352.296,10.0413,4.93503,13.1452,8.65437,5.94836,14.6027, +Internal Node(30),27.06.2005 12:33:53,459333,-7.32594e+06,2746.47,0.340131,366.976,10.0665,360.764,999.375,0.318,0.0448666,3323.4,0.0518965,351.912,10.0407,5.09584,14.4925,8.85192,6.21242,15.0643, +Internal Node(30),10.11.2006 23:03:22,459333,-7.32594e+06,2746.85,0.391616,366.834,10.0645,360.045,999.368,0.318,0.0436686,5072.54,0.0475203,350.973,10.0402,5.36044,15.1459,9.07121,6.78943,15.8606, +Internal Node(30),01.12.2006,459333,-7.32594e+06,2747.01,0.373762,365.912,10.0632,358.999,999.587,0.318,0.0393555,4409.94,0.0488466,348.7,10.0396,6.03622,16.0243,10.2991,6.91328,17.2124, +Internal Node(30),01.12.2006,459333,-7.32594e+06,2747.01,0.373762,365.912,10.0632,358.999,999.587,0.318,0.0393555,4409.94,0.0488466,348.7,10.0396,6.03622,16.0243,10.2991,6.91328,17.2124, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Internal Node(31),09.12.1997 22:12:00,459350,-7.32598e+06,2738.1,0.186915,386.369,10.0895,377.234,1000.28,0.318,0.339596,551.542,0.147616,332.077,16.8195,0.570674,48.8583,45.157,9.13531,54.2923, +Internal Node(31),05.02.1998 14:35:11,459348,-7.32597e+06,2739.2,0.0603538,386.817,10.0655,383.586,1000.09,0.318,0.13015,18.5677,0.120821,345.315,11.2752,0.979319,43.166,38.2711,3.23111,41.5022, +Internal Node(31),12.04.1998 23:29:05,459347,-7.32597e+06,2740.48,0.0031903,387.326,10.0646,386.649,1000.24,0.318,0.0116594,2.39161,0.0257523,349.584,10.5297,1.03793,34.5411,37.0653,0.676804,37.7421, +Internal Node(31),16.08.1998 08:06:27,459346,-7.32597e+06,2742.09,3.048e-07,369.955,10.0568,388.034,999.891,0.318,0.0243848,2.39161,0.0267372,357.435,10.1265,1.44883,35.3073,30.5992,-18.079,12.5202, +Internal Node(31),18.10.1998 00:25:09,459345,-7.32597e+06,2741.75,3.048e-07,359.111,10.0994,359.805,999.034,0.318,0.0490368,2.39161,0.046824,330.896,10.0986,2.00667,14.2183,28.9082,-0.693773,28.2145, +Internal Node(31),19.12.1998 16:43:50,459344,-7.32597e+06,2741.85,3.048e-07,359.8,10.075,367.879,999.394,0.318,0.0427787,2.39161,0.0262349,349.026,10.0688,2.41851,27.9435,18.8529,-8.07828,10.7746, +Internal Node(31),20.02.1999 09:02:31,459344,-7.32596e+06,2741.73,0.0429978,356.701,10.0872,355.275,998.894,0.318,0.0394127,6.71404,0.0956688,334.213,10.0869,2.61782,15.8365,21.0627,1.42521,22.4879, +Internal Node(31),25.06.1999 17:39:53,459342,-7.32596e+06,2742.54,3.048e-07,357.203,10.0755,361.53,999.279,0.318,0.041751,2.39161,0.0192165,347.641,10.066,2.77573,22.7373,13.8887,-4.32711,9.5616, +Internal Node(31),27.08.1999 09:58:34,459342,-7.32596e+06,2742.44,0.0411277,349.509,10.093,347.535,998.565,0.318,0.0399899,5.87554,0.0502943,333.333,10.0827,3.06937,12.0126,14.2016,1.97446,16.1761, +Internal Node(31),30.12.1999 18:35:56,459341,-7.32596e+06,2742.12,3.048e-07,346.555,10.0833,351.739,998.805,0.318,0.0360841,2.39161,0.0172007,343.29,10.0728,3.31996,16.6816,8.44864,-5.18358,3.26506, +Internal Node(31),06.09.2000 11:50:41,459339,-7.32595e+06,2741.79,0.254223,353.119,10.0982,346.685,998.554,0.318,0.0330627,1387.69,0.0319652,338.586,10.0918,3.58285,9.27627,8.09821,6.43473,14.5329, +Internal Node(31),09.01.2001 20:28:03,459338,-7.32595e+06,2744.18,0.0604395,357.701,10.0855,355.094,999.096,0.318,0.0454842,18.647,0.0575405,351.269,10.0532,3.89436,14.8778,3.8251,2.60691,6.43201, +Internal Node(31),13.03.2001 12:46:44,459339,-7.32595e+06,2744.57,0.09217,357.373,10.0874,353.492,998.928,0.318,0.048075,66.1324,0.0824802,347.735,10.0619,3.98536,9.63858,5.75703,3.88136,9.63839, +Internal Node(31),15.05.2001 05:05:26,459338,-7.32595e+06,2745.15,3.048e-07,358.56,10.0819,356.866,999.071,0.318,0.0529156,2.39161,0.0242023,351.777,10.0521,3.89198,9.30996,5.08906,1.69356,6.78262, +Internal Node(31),17.09.2001 13:42:48,459338,-7.32595e+06,2745.16,0.0927207,360.354,10.0809,356.868,999.061,0.318,0.0519826,67.325,0.0763795,350.986,10.0499,3.96528,7.96984,5.88217,3.48603,9.36821, +Internal Node(31),20.01.2002 22:20:10,459338,-7.32595e+06,2745.76,0.0940564,362.167,10.0749,359.178,999.148,0.318,0.052744,70.2766,0.0599185,353.366,10.0475,3.94994,9.39385,5.81261,2.98828,8.80089, +Internal Node(31),26.05.2002 06:57:32,459337,-7.32595e+06,2746.62,0.0912715,363.742,10.0724,361.136,999.22,0.318,0.0551144,64.2173,0.0452097,355.004,10.0453,3.87232,9.31875,6.13196,2.6063,8.73826, +Internal Node(31),28.09.2002 15:34:55,459338,-7.32595e+06,2747.12,0.130893,364.782,10.0738,361.551,999.272,0.318,0.0557371,189.406,0.0422022,354.465,10.0436,3.91645,9.58334,7.08624,3.23084,10.3171, +Internal Node(31),30.11.2002 07:53:36,459338,-7.32595e+06,2747.88,0.132068,365.38,10.0723,362.501,999.301,0.318,0.058055,194.553,0.0479153,355.297,10.0428,3.88965,10.0343,7.20425,2.87896,10.0832, +Internal Node(31),01.02.2003 00:12:17,459338,-7.32595e+06,2748.07,0.0700481,364.665,10.0727,362.366,999.369,0.318,0.0580446,29.0292,0.0164878,354.454,10.0424,3.93684,10.5516,7.91217,2.29946,10.2116, +Internal Node(31),04.04.2003 16:30:58,459338,-7.32595e+06,2748.1,0.170462,366.441,10.0723,362.88,999.434,0.318,0.0571717,418.338,0.064129,354.982,10.0422,4.01502,10.3005,7.89801,3.56125,11.4593, +Internal Node(31),06.06.2003 08:49:39,459338,-7.32595e+06,2748.49,0.188973,366.501,10.0711,362.914,999.36,0.318,0.0586119,569.964,0.0629012,355.023,10.042,3.99674,11.1686,7.89115,3.58735,11.4785, +Internal Node(31),09.10.2003 17:27:02,459338,-7.32595e+06,2748.57,0.173601,366.262,10.071,362.748,999.441,0.318,0.0580074,441.878,0.0646535,354.425,10.0418,4.06701,11.4687,8.32394,3.51313,11.8371, +Internal Node(31),16.06.2004 10:41:46,459338,-7.32595e+06,2748.74,0.234009,367.049,10.07,362.843,999.377,0.318,0.0570798,1082.28,0.0555652,354.378,10.0416,4.19288,11.6131,8.46547,4.20581,12.6713, +Internal Node(31),19.10.2004 19:19:08,459338,-7.32595e+06,2748.89,0.269996,367.147,10.0682,362.433,999.383,0.318,0.0541793,1662.34,0.0485706,353.329,10.0412,4.49966,12.4686,9.10401,4.71429,13.8183, +Internal Node(31),27.06.2005 12:33:53,459338,-7.32595e+06,2749.01,0.2891,367.226,10.0665,362.302,999.387,0.318,0.0530318,2040.76,0.0454453,352.958,10.0406,4.64832,13.7832,9.34334,4.92448,14.2678, +Internal Node(31),10.11.2006 23:03:22,459338,-7.32595e+06,2749.57,0.333552,367.101,10.0645,361.707,999.38,0.318,0.0529067,3134.26,0.0404594,352.075,10.0402,4.86339,14.3945,9.63178,5.39421,15.026, +Internal Node(31),01.12.2006,459338,-7.32595e+06,2749.69,0.300434,366.175,10.0632,360.814,999.599,0.318,0.0476533,2290.31,0.0426483,349.766,10.0395,5.51445,15.3011,11.0484,5.36048,16.4088, +Internal Node(31),01.12.2006,459338,-7.32595e+06,2749.69,0.300434,366.175,10.0632,360.814,999.599,0.318,0.0476533,2290.31,0.0426483,349.766,10.0395,5.51445,15.3011,11.0484,5.36048,16.4088, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Internal Node(32),09.12.1997 22:12:00,459351,-7.32598e+06,2738.75,0.185123,386.434,10.0895,377.989,1000.28,0.318,0.314535,535.834,0.20677,333.061,16.5458,0.619759,48.8009,44.9278,8.44561,53.3734, +Internal Node(32),05.02.1998 14:35:11,459350,-7.32598e+06,2740.06,0.0408749,386.873,10.0655,384.978,1000.09,0.318,0.217589,5.76787,0.273492,345.673,11.1796,0.974026,42.9965,39.3054,1.89486,41.2002, +Internal Node(32),12.04.1998 23:29:05,459349,-7.32598e+06,2740.79,3.048e-07,387.376,10.0646,387.355,1000.24,0.318,0.0110698,2.39161,0.178367,349.406,10.4385,1.10834,35.3224,37.9493,0.0209892,37.9703, +Internal Node(32),16.08.1998 08:06:27,459349,-7.32597e+06,2742.16,3.048e-07,369.967,10.0568,388.602,999.891,0.318,0.0226298,2.39161,0.145124,357.119,10.1142,1.50579,35.8237,31.4824,-18.6353,12.8471, +Internal Node(32),18.10.1998 00:25:09,459348,-7.32597e+06,2742.15,3.048e-07,359.172,10.0994,360.296,999.036,0.318,0.0494364,2.39161,0.146782,330.557,10.097,1.97752,14.6195,29.7385,-1.12356,28.6149, +Internal Node(32),19.12.1998 16:43:50,459348,-7.32597e+06,2742.09,3.048e-07,359.829,10.075,368.475,999.394,0.318,0.0420936,2.39161,0.127935,348.755,10.0693,2.40202,28.2635,19.7195,-8.64602,11.0735, +Internal Node(32),20.02.1999 09:02:31,459347,-7.32597e+06,2742.03,0.039643,356.731,10.0872,355.61,998.895,0.318,0.0396341,5.26194,0.0889275,334.025,10.084,2.59848,16.0443,21.5848,1.12161,22.7064, +Internal Node(32),25.06.1999 17:39:53,459346,-7.32597e+06,2742.82,3.048e-07,357.232,10.0755,361.979,999.279,0.318,0.0417045,2.39161,0.10928,347.523,10.0645,2.77521,22.9336,14.4551,-4.74632,9.70882, +Internal Node(32),27.08.1999 09:58:34,459346,-7.32597e+06,2742.78,0.0473041,349.563,10.093,347.544,998.567,0.318,0.0404934,8.9401,0.0796925,333.358,10.0784,3.06426,12.0648,14.1867,2.01858,16.2053, +Internal Node(32),30.12.1999 18:35:56,459346,-7.32597e+06,2742.76,3.048e-07,346.611,10.0833,351.944,998.805,0.318,0.0381552,2.39161,0.100182,343.436,10.0675,3.27755,16.704,8.50743,-5.33335,3.17408, +Internal Node(32),06.09.2000 11:50:41,459344,-7.32596e+06,2743.3,0.258247,353.267,10.0982,346.805,998.561,0.318,0.0405569,1454.62,0.0370846,338.803,10.0721,3.42761,9.36817,8.0013,6.46254,14.4638, +Internal Node(32),09.01.2001 20:28:03,459343,-7.32596e+06,2746.47,0.0424627,357.907,10.0855,356.017,999.107,0.318,0.0613363,6.46648,0.127753,351.499,10.068,3.35825,13.5971,4.51789,1.89043,6.40832, +Internal Node(32),13.03.2001 12:46:44,459344,-7.32596e+06,2746.61,0.0516106,357.554,10.0874,355.142,998.936,0.318,0.0596268,11.6108,0.1257,349.182,10.0601,3.49146,8.51844,5.95976,2.41206,8.37183, +Internal Node(32),15.05.2001 05:05:26,459343,-7.32596e+06,2746.5,3.048e-07,358.686,10.0819,358.088,999.077,0.318,0.0579375,2.39161,0.0830277,352.827,10.0527,3.60751,8.55313,5.2612,0.597619,5.85882, +Internal Node(32),17.09.2001 13:42:48,459343,-7.32596e+06,2746.51,0.0658099,360.473,10.0809,357.923,999.066,0.318,0.0568559,24.0724,0.226524,351.795,10.0504,3.6885,7.50471,6.12783,2.55018,8.67801, +Internal Node(32),20.01.2002 22:20:10,459343,-7.32596e+06,2747.43,0.0600065,362.318,10.0749,360.404,999.155,0.318,0.0598529,18.249,0.238338,354.404,10.0479,3.59779,8.7212,5.99993,1.91411,7.91404, +Internal Node(32),26.05.2002 06:57:32,459343,-7.32596e+06,2748.65,0.0590617,363.929,10.0724,362.442,999.229,0.318,0.0655822,17.4006,0.230871,356.141,10.0452,3.44624,8.63077,6.30181,1.48697,7.78879, +Internal Node(32),28.09.2002 15:34:55,459343,-7.32596e+06,2749.2,0.0940128,364.983,10.0738,362.782,999.282,0.318,0.0673095,70.1791,0.319588,355.458,10.0434,3.47392,9.08857,7.32445,2.20108,9.52553, +Internal Node(32),30.11.2002 07:53:36,459343,-7.32596e+06,2750.2,0.0953886,365.606,10.0723,363.759,999.312,0.318,0.0731833,73.3054,0.478079,356.285,10.0427,3.3962,9.5186,7.47382,1.84714,9.32096, +Internal Node(32),01.02.2003 00:12:17,459344,-7.32596e+06,2750.29,0.0296695,364.875,10.0727,363.56,999.379,0.318,0.072623,2.39161,0.0694497,355.344,10.0423,3.45677,10.1109,8.21664,1.31434,9.53097, +Internal Node(32),04.04.2003 16:30:58,459344,-7.32596e+06,2750.3,0.126706,366.657,10.0723,364.077,999.444,0.318,0.0713131,171.806,0.551901,355.873,10.0422,3.5393,9.85258,8.20393,2.57964,10.7836, +Internal Node(32),06.06.2003 08:49:39,459344,-7.32596e+06,2750.85,0.142268,366.733,10.0711,364.148,999.371,0.318,0.0280717,243.2,0.509261,355.971,10.0419,3.48313,10.616,8.17742,2.58431,10.7617, +Internal Node(32),09.10.2003 17:27:02,459344,-7.32596e+06,2750.88,0.125875,366.488,10.071,363.952,999.451,0.318,0.0275135,168.446,0.586799,355.314,10.0417,3.56822,10.9405,8.63801,2.53628,11.1743, +Internal Node(32),16.06.2004 10:41:46,459344,-7.32596e+06,2751.11,0.181229,367.281,10.07,364.055,999.388,0.318,0.0273833,502.726,0.390369,355.298,10.0416,3.67902,11.0718,8.75684,3.2264,11.9832, +Internal Node(32),19.10.2004 19:19:08,459344,-7.32596e+06,2751.29,0.210373,367.382,10.0682,363.664,999.394,0.318,0.0260791,786.347,0.343671,354.247,10.0412,3.97615,11.881,9.41755,3.71772,13.1353, +Internal Node(32),27.06.2005 12:33:53,459344,-7.32596e+06,2751.43,0.225368,367.463,10.0665,363.559,999.398,0.318,0.025638,966.763,0.326733,353.885,10.0406,4.11647,13.1673,9.67387,3.90373,13.5776, +Internal Node(32),10.11.2006 23:03:22,459344,-7.32596e+06,2752.16,0.255931,367.355,10.0645,363.02,999.392,0.318,0.0267509,1415.83,0.311422,353.072,10.0401,4.27824,13.7237,9.94823,4.33474,14.283, +Internal Node(32),01.12.2006,459344,-7.32596e+06,2752.18,0.210608,366.419,10.0632,362.183,999.61,0.318,0.0235734,788.986,0.478851,350.71,10.0394,4.93921,14.668,11.473,4.23569,15.7087, +Internal Node(32),01.12.2006,459344,-7.32596e+06,2752.18,0.210608,366.419,10.0632,362.183,999.61,0.318,0.0235734,788.986,0.478851,350.71,10.0394,4.93921,14.668,11.473,4.23569,15.7087, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Internal Node(33),09.12.1997 22:12:00,459352,-7.32598e+06,2739.82,0.169527,386.545,10.0895,379.247,1000.29,0.318,0.323215,411.493,0.416704,333.371,16.6889,0.608009,48.1558,45.8762,7.29826,53.1745, +Internal Node(33),05.02.1998 14:35:11,459351,-7.32598e+06,2740.3,0.0299151,387.052,10.0655,385.641,1000.09,0.318,0.203594,2.39161,0.431734,346.292,10.9038,1.04928,43.68,39.3493,1.4106,40.7599, +Internal Node(33),12.04.1998 23:29:05,459351,-7.32598e+06,2740.69,3.048e-07,387.592,10.0646,387.658,1000.25,0.318,0.0125781,2.39161,0.425691,349.31,10.3226,1.25813,36.2602,38.3474,-0.0659572,38.2814, +Internal Node(33),16.08.1998 08:06:27,459351,-7.32598e+06,2741.9,3.048e-07,370.16,10.0568,388.876,999.891,0.318,0.0174965,2.39161,0.355024,356.783,10.1011,1.63702,36.3809,32.0927,-18.7164,13.3763, +Internal Node(33),18.10.1998 00:25:09,459351,-7.32598e+06,2741.93,3.048e-07,359.371,10.0994,360.113,999.045,0.318,0.0287459,2.39161,0.341568,330.02,10.1019,2.05736,15.148,30.093,-0.742488,29.3505, +Internal Node(33),19.12.1998 16:43:50,459351,-7.32598e+06,2741.94,3.048e-07,360.022,10.075,368.482,999.394,0.318,0.0251259,2.39161,0.319475,348.07,10.0727,2.43767,29.022,20.4125,-8.4604,11.9521, +Internal Node(33),20.02.1999 09:02:31,459350,-7.32598e+06,2741.97,0.0384813,356.829,10.0872,355.661,998.9,0.318,0.0295111,4.81278,0.277434,333.717,10.0854,2.6093,16.2994,21.9441,1.16802,23.1121, +Internal Node(33),25.06.1999 17:39:53,459350,-7.32598e+06,2742.88,3.048e-07,357.439,10.0755,362.223,999.279,0.318,0.0398937,2.39161,0.268893,347.137,10.066,2.70369,23.4451,15.086,-4.7838,10.3022, +Internal Node(33),27.08.1999 09:58:34,459350,-7.32598e+06,2742.87,0.0503951,349.673,10.093,347.675,998.572,0.318,0.0389256,10.8097,0.293442,333.348,10.0784,2.99193,12.056,14.3273,1.99857,16.3258, +Internal Node(33),30.12.1999 18:35:56,459350,-7.32598e+06,2743.42,3.048e-07,346.875,10.0833,352.343,998.805,0.318,0.0409756,2.39161,0.234952,343.506,10.0649,3.11341,16.7881,8.83645,-5.46758,3.36887, +Internal Node(33),06.09.2000 11:50:41,459349,-7.32597e+06,2744.1,0.253354,353.348,10.0982,346.884,998.569,0.318,0.0449268,1373.51,0.0997304,338.926,10.065,3.27686,9.43701,7.95775,6.46391,14.4217, +Internal Node(33),09.01.2001 20:28:03,459349,-7.32597e+06,2747.77,0.0282358,358.221,10.0855,356.767,999.113,0.318,0.0696082,2.39161,0.171232,351.67,10.0817,2.95797,12.6918,5.09733,1.45428,6.5516, +Internal Node(33),13.03.2001 12:46:44,459349,-7.32597e+06,2747.79,0.0257844,357.787,10.0874,356.213,998.947,0.318,0.0667538,2.39161,0.175445,350.006,10.0605,3.1429,7.93078,6.20677,1.57404,7.78081, +Internal Node(33),15.05.2001 05:05:26,459349,-7.32597e+06,2747.71,3.048e-07,359.022,10.0819,359.128,999.087,0.318,0.0643786,2.39161,0.18327,353.672,10.053,3.28171,8.08877,5.45576,-0.105901,5.34986, +Internal Node(33),17.09.2001 13:42:48,459349,-7.32597e+06,2747.71,0.0448639,360.721,10.0809,358.828,999.079,0.318,0.0629995,7.6267,0.330586,352.457,10.0507,3.37287,7.27853,6.37046,1.89396,8.26442, +Internal Node(33),20.01.2002 22:20:10,459349,-7.32597e+06,2748.47,0.0394089,362.565,10.0749,361.187,999.167,0.318,0.0651784,5.16927,0.298836,354.979,10.0481,3.35964,8.46426,6.20833,1.37731,7.58564, +Internal Node(33),26.05.2002 06:57:32,459349,-7.32597e+06,2750.31,0.042786,364.239,10.0724,363.499,999.244,0.318,0.0778366,6.61532,0.307733,356.964,10.045,3.06197,8.22759,6.53485,0.739559,7.27441, +Internal Node(33),28.09.2002 15:34:55,459349,-7.32597e+06,2750.65,0.0667525,365.209,10.0738,363.696,999.292,0.318,0.0779296,25.1217,0.454462,356.028,10.0433,3.16137,8.90323,7.66797,1.51335,9.18132, +Internal Node(33),30.11.2002 07:53:36,459349,-7.32597e+06,2751.69,0.0671964,365.857,10.0723,364.704,999.324,0.318,0.0322896,25.6262,0.457644,356.839,10.0427,3.0773,9.27844,7.86455,1.15287,9.01742, +Internal Node(33),01.02.2003 00:12:17,459349,-7.32597e+06,2751.72,0.00275917,365.128,10.0727,364.487,999.385,0.318,0.0317315,2.39161,0.166284,355.873,10.0423,3.15676,9.88721,8.61447,0.64023,9.2547, +Internal Node(33),04.04.2003 16:30:58,459349,-7.32597e+06,2751.72,0.0913172,366.876,10.0723,365.026,999.45,0.318,0.0310787,64.3138,0.521047,356.43,10.0421,3.24304,9.68377,8.59621,1.84944,10.4456, +Internal Node(33),06.06.2003 08:49:39,459349,-7.32597e+06,2752.5,0.102346,366.947,10.0711,365.15,999.381,0.318,0.0345463,90.5448,0.437883,356.591,10.0419,3.13237,10.2939,8.55955,1.79644,10.356, +Internal Node(33),09.10.2003 17:27:02,459349,-7.32597e+06,2752.48,0.0872408,366.716,10.071,364.924,999.458,0.318,0.0336406,56.0797,0.474921,355.897,10.0417,3.22559,10.6081,9.02704,1.79239,10.8194, +Internal Node(33),16.06.2004 10:41:46,459349,-7.32597e+06,2752.79,0.134395,367.469,10.07,365.059,999.397,0.318,0.0340676,205.021,0.342059,355.923,10.0415,3.31827,10.7495,9.13653,2.40937,11.5459, +Internal Node(33),19.10.2004 19:19:08,459349,-7.32597e+06,2752.94,0.155891,367.557,10.0682,364.696,999.402,0.318,0.0322516,319.969,0.297441,354.849,10.0411,3.62311,11.5019,9.84708,2.86147,12.7086, +Internal Node(33),27.06.2005 12:33:53,459349,-7.32597e+06,2752.94,0.16619,367.622,10.0665,364.628,999.405,0.318,0.0310038,387.668,0.277673,354.443,10.0405,3.79692,12.8013,10.1851,2.99402,13.1792, +Internal Node(33),10.11.2006 23:03:22,459349,-7.32597e+06,2752.93,0.177781,367.438,10.0645,364.245,999.396,0.318,0.0287165,474.569,0.233972,353.368,10.0401,4.14758,13.5234,10.8773,3.1933,14.0706, +Internal Node(33),01.12.2006,459349,-7.32597e+06,2752.93,0.122266,366.507,10.0632,363.544,999.611,0.318,0.0252528,154.37,0.254231,351.037,10.0394,4.80296,14.4327,12.5067,2.96248,15.4692, +Internal Node(33),01.12.2006,459349,-7.32597e+06,2752.93,0.122266,366.507,10.0632,363.544,999.611,0.318,0.0252528,154.37,0.254231,351.037,10.0394,4.80296,14.4327,12.5067,2.96248,15.4692, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Internal Node(34),09.12.1997 22:12:00,459353,-7.32598e+06,2743.26,0.0849392,386.977,10.1014,383.964,1000.31,0.318,0.0271092,51.7571,1.13173,330.879,19.244,0.330193,43.8276,53.0856,3.01271,56.0983, +Internal Node(34),05.02.1998 14:35:11,459354,-7.32598e+06,2743.58,0.00634084,388.702,10.0707,388.604,1000.09,0.318,0.0192749,2.39161,0.708619,345.364,10.9697,0.586758,43.0843,43.2397,0.0976986,43.3374, +Internal Node(34),12.04.1998 23:29:05,459354,-7.32598e+06,2744.08,3.048e-07,389.163,10.0711,390.983,1000.32,0.318,0.0280045,2.39161,0.626787,348.668,10.3291,0.685921,36.3807,42.3145,-1.81988,40.4946, +Internal Node(34),16.08.1998 08:06:27,459354,-7.32598e+06,2744.89,3.048e-07,371.685,10.0611,391.909,999.891,0.318,0.0399765,2.39161,0.561604,356.744,10.0991,1.02945,36.4092,35.1648,-20.2241,14.9407, +Internal Node(34),18.10.1998 00:25:09,459354,-7.32598e+06,2744.89,3.048e-07,360.897,10.1248,363.17,999.118,0.318,0.0602484,2.39161,0.54914,330.123,10.0761,1.42332,15.3167,33.047,-2.27305,30.774, +Internal Node(34),19.12.1998 16:43:50,459354,-7.32598e+06,2744.99,3.048e-07,361.531,10.0891,371.248,999.394,0.318,0.0524997,2.39161,0.515836,348.09,10.0582,1.73677,29.4617,23.1586,-9.71742,13.4412, +Internal Node(34),20.02.1999 09:02:31,459354,-7.32598e+06,2744.99,0.0213785,358.564,10.1073,358.274,998.981,0.318,0.0596179,2.39161,0.629338,333.964,10.0601,1.90669,16.5196,24.3102,0.28917,24.5994, +Internal Node(34),25.06.1999 17:39:53,459354,-7.32598e+06,2746.75,3.048e-07,359.048,10.0902,365.589,999.279,0.318,0.0871974,2.39161,0.431456,347.231,10.0911,1.79049,21.8878,18.3577,-6.54161,11.8161, +Internal Node(34),27.08.1999 09:58:34,459354,-7.32598e+06,2746.44,0.0351272,351.242,10.1158,350.063,998.642,0.318,0.0953377,3.6608,0.708017,333.925,10.0688,2.14226,11.382,16.138,1.17869,17.3167, +Internal Node(34),30.12.1999 18:35:56,459354,-7.32598e+06,2748.18,3.048e-07,348.59,10.1015,356.288,998.805,0.318,0.104304,2.39161,0.413644,343.709,10.1132,1.95454,13.1165,12.5792,-7.6981,4.88112, +Internal Node(34),06.09.2000 11:50:41,459354,-7.32598e+06,2749.39,0.15476,353.884,10.1237,351.38,998.646,0.318,0.109316,313.054,0.302573,339.114,10.1373,1.86616,6.72477,12.2663,2.50442,14.7707, +Internal Node(34),09.01.2001 20:28:03,459355,-7.32598e+06,2754.78,3.048e-07,360.234,10.1053,360.701,999.147,0.318,0.0129891,2.39161,0.280143,351.384,10.1764,0.60562,7.60157,9.3169,-0.466578,8.85032, +Internal Node(34),13.03.2001 12:46:44,459355,-7.32598e+06,2754.78,3.048e-07,359.869,10.1084,362.951,999.044,0.318,0.101183,2.39161,0.26052,355.151,10.0656,0.99881,3.40716,7.79999,-3.08258,4.7174, +Internal Node(34),15.05.2001 05:05:26,459355,-7.32598e+06,2754.78,3.048e-07,360.917,10.1004,364.994,999.185,0.318,0.0919815,2.39161,0.233684,358.197,10.0553,1.18216,5.09299,6.79757,-4.07715,2.72043, +Internal Node(34),17.09.2001 13:42:48,459355,-7.32598e+06,2754.78,0.00472102,362.671,10.099,363.826,999.169,0.318,0.0855989,2.39161,0.246054,356.172,10.0533,1.33082,5.03682,7.65399,-1.15433,6.49966, +Internal Node(34),20.01.2002 22:20:10,459355,-7.32598e+06,2757.31,0.010582,364.601,10.0904,365.76,999.261,0.318,0.172826,2.39161,0.198781,357.996,10.1463,1.10889,5.16348,7.76461,-1.15911,6.6055, +Internal Node(34),26.05.2002 06:57:32,459356,-7.32598e+06,2759.68,0.032422,366.179,10.0868,365.89,999.336,0.318,0.143319,2.87849,0.19917,356.18,10.1292,1.15208,8.6157,9.70992,0.288593,9.99851, +Internal Node(34),28.09.2002 15:34:55,459356,-7.32598e+06,2759.71,0.042746,367.182,10.0892,366.412,999.385,0.318,0.0998027,6.59679,0.413148,357.328,10.0517,1.46904,8.19971,9.08425,0.76971,9.85396, +Internal Node(34),30.11.2002 07:53:36,459356,-7.32598e+06,2761.61,0.0609139,367.415,10.0872,365.726,999.396,0.318,0.0716838,19.0895,0.315242,356.362,10.0446,1.5965,10.7744,9.36408,1.68923,11.0533, +Internal Node(34),01.02.2003 00:12:17,459356,-7.32598e+06,2761.61,0.0178493,367.383,10.0877,366.264,999.433,0.318,0.062274,2.39161,0.205239,357.367,10.0425,1.77332,9.28839,8.89733,1.11895,10.0163, +Internal Node(34),04.04.2003 16:30:58,459356,-7.32598e+06,2761.61,0.0718006,368.219,10.0872,366.368,999.494,0.318,0.0549594,31.263,0.325032,357.834,10.042,1.95238,9.76515,8.5337,1.85102,10.3847, +Internal Node(34),06.06.2003 08:49:39,459356,-7.32598e+06,2762.02,0.0872013,368.08,10.0855,365.779,999.432,0.318,0.130916,56.0035,0.292032,357.253,10.0418,2.10661,10.7876,8.52531,2.30144,10.8267, +Internal Node(34),09.10.2003 17:27:02,459356,-7.32598e+06,2762.02,0.0801149,367.941,10.0855,365.63,999.5,0.318,0.131382,43.4295,0.345583,357.061,10.0415,2.2692,10.5188,8.56852,2.31129,10.8798, +Internal Node(34),16.06.2004 10:41:46,459356,-7.32598e+06,2762.02,0.119416,368.447,10.0841,365.235,999.442,0.318,0.112331,143.824,0.201537,356.765,10.0414,2.59137,11.0673,8.47012,3.21135,11.6815, +Internal Node(34),19.10.2004 19:19:08,459356,-7.32598e+06,2762.02,0.145867,368.487,10.0818,364.41,999.446,0.318,0.0904379,262.132,0.167378,355.552,10.041,3.18476,11.8286,8.85779,4.07718,12.935, +Internal Node(34),27.06.2005 12:33:53,459356,-7.32598e+06,2762.02,0.161573,368.541,10.0794,363.96,999.448,0.318,0.0829452,356.248,0.149332,354.721,10.0404,3.46364,13.5276,9.2387,4.58108,13.8198, +Internal Node(34),10.11.2006 23:03:22,459356,-7.32598e+06,2762.02,0.17936,368.35,10.0768,363.36,999.439,0.318,0.070974,487.33,0.116796,353.506,10.04,4.00822,14.3231,9.85409,4.98991,14.844, +Internal Node(34),01.12.2006,459356,-7.32598e+06,2762.02,0.131964,367.444,10.0754,362.886,999.611,0.318,0.0560767,194.096,0.179406,351.804,10.0393,5.00604,14.6754,11.0818,4.55803,15.6399, +Internal Node(34),01.12.2006,459356,-7.32598e+06,2762.02,0.131964,367.444,10.0754,362.886,999.611,0.318,0.0560767,194.096,0.179406,351.804,10.0393,5.00604,14.6754,11.0818,4.55803,15.6399, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Internal Node(35),09.12.1997 22:12:00,459355,-7.32599e+06,2743,0.0818318,386.901,10.1014,385.327,1000.3,0.318,0.025571,46.2819,0.663486,330.657,20.5308,0.345201,42.4598,54.6699,1.57357,56.2435, +Internal Node(35),05.02.1998 14:35:11,459355,-7.32599e+06,2743.17,0.000320573,387.825,10.0707,388.843,1000.09,0.318,0.0171464,2.39161,0.614319,345.239,11.3276,0.638898,42.9581,43.6041,-1.01837,42.5857, +Internal Node(35),12.04.1998 23:29:05,459356,-7.32599e+06,2743.73,3.048e-07,388.175,10.0711,390.872,1000.28,0.318,0.0247878,2.39161,0.469719,348.061,10.5008,0.726458,35.7493,42.8108,-2.69735,40.1134, +Internal Node(35),16.08.1998 08:06:27,459356,-7.32599e+06,2744.44,3.048e-07,370.645,10.0611,391.491,999.891,0.318,0.0333622,2.39161,0.41684,355.681,10.1464,1.03042,36.4037,35.8098,-20.8462,14.9636, +Internal Node(35),18.10.1998 00:25:09,459356,-7.32599e+06,2744.45,3.048e-07,359.864,10.1248,362.629,999.069,0.318,0.0514721,2.39161,0.391648,329.546,10.094,1.40436,15.5247,33.0827,-2.76507,30.3176, +Internal Node(35),19.12.1998 16:43:50,459357,-7.32599e+06,2745.35,3.048e-07,360.555,10.0891,371.421,999.394,0.318,0.0619403,2.39161,0.358848,347.197,10.0623,1.48729,29.9909,24.2235,-10.8657,13.3578, +Internal Node(35),20.02.1999 09:02:31,459357,-7.32599e+06,2745.35,0.00494239,357.487,10.1073,358.622,998.93,0.318,0.069312,2.39161,0.420454,333.753,10.0614,1.66145,16.5559,24.8691,-1.13504,23.7341, +Internal Node(35),25.06.1999 17:39:53,459357,-7.32599e+06,2746.7,3.048e-07,358.003,10.0902,365.511,999.279,0.318,0.0960587,2.39161,0.292838,346.852,10.0864,1.62152,22.8062,18.6591,-7.50817,11.1509, +Internal Node(35),27.08.1999 09:58:34,459358,-7.32599e+06,2746.67,0.0194184,350.236,10.1158,350.299,998.598,0.318,0.105724,2.39161,0.30287,333.894,10.0748,1.92771,11.3828,16.4052,-0.063075,16.3422, +Internal Node(35),30.12.1999 18:35:56,459358,-7.32599e+06,2748.46,3.048e-07,347.657,10.1015,356.591,998.805,0.318,0.114835,2.39161,0.305562,343.472,10.1369,1.77147,13.1974,13.1191,-8.93409,4.18498, +Internal Node(35),06.09.2000 11:50:41,459358,-7.32599e+06,2749.39,0.152747,353.871,10.1237,351.39,998.607,0.318,0.114665,300.997,0.155264,339.105,10.159,1.77707,6.93412,12.2853,2.48098,14.7663, +Internal Node(35),09.01.2001 20:28:03,459360,-7.32599e+06,2753.38,3.048e-07,359.124,10.1053,360.303,999.139,0.318,0.00712809,2.39161,0.213304,351.669,10.1875,1.09276,8.48863,8.63462,-1.17947,7.45515, +Internal Node(35),13.03.2001 12:46:44,459360,-7.32599e+06,2753.36,3.048e-07,358.687,10.1084,361.189,998.989,0.318,0.0610833,2.39161,0.208937,352.857,10.0737,1.43723,5.40128,8.33218,-2.50192,5.83026, +Internal Node(35),15.05.2001 05:05:26,459360,-7.326e+06,2753.26,3.048e-07,359.813,10.1004,363.283,999.125,0.318,0.0414061,2.39161,0.175326,355.858,10.0618,1.62276,6.94789,7.42531,-3.47027,3.95504, +Internal Node(35),17.09.2001 13:42:48,459360,-7.326e+06,2753.26,0.00302639,361.504,10.099,362.478,999.115,0.318,0.0392861,2.39161,0.176338,354.272,10.0593,1.74648,6.50948,8.20642,-0.974091,7.23233, +Internal Node(35),20.01.2002 22:20:10,459360,-7.326e+06,2753.25,0.0133707,363.317,10.0904,363.75,999.202,0.318,0.0358265,2.39161,0.170465,356.284,10.0542,2.01059,7.96652,7.46542,-0.433056,7.03237, +Internal Node(35),26.05.2002 06:57:32,459360,-7.326e+06,2754.31,0.0219894,365.043,10.0868,365.245,999.281,0.318,0.0435199,2.39161,0.170786,357.573,10.0489,2.00144,8.29333,7.67245,-0.201708,7.47074, +Internal Node(35),28.09.2002 15:34:55,459360,-7.326e+06,2754.49,0.0405833,365.993,10.0892,365.446,999.329,0.318,0.0549266,5.64533,0.271721,356.931,10.0446,2.18236,8.67119,8.51491,0.546743,9.06165, +Internal Node(35),30.11.2002 07:53:36,459360,-7.326e+06,2756.3,0.036617,367.018,10.0872,366.621,999.378,0.318,0.0868122,4.14663,0.165714,358.117,10.043,1.9879,8.72102,8.50447,0.39748,8.90195, +Internal Node(35),01.02.2003 00:12:17,459360,-7.32599e+06,2756.52,3.048e-07,366.183,10.0877,366.517,999.409,0.318,0.0903218,2.39161,0.192463,357.533,10.0423,2.05265,8.92402,8.98392,-0.333404,8.65051, +Internal Node(35),04.04.2003 16:30:58,459360,-7.32599e+06,2756.56,0.0512149,367.941,10.0872,366.984,999.471,0.318,0.087636,11.3458,0.285418,358.153,10.042,2.15492,8.88111,8.83157,0.956354,9.78793, +Internal Node(35),06.06.2003 08:49:39,459360,-7.32599e+06,2757.54,0.0566106,367.804,10.0855,366.73,999.416,0.318,0.0877356,15.3228,0.254331,357.749,10.0419,2.12974,9.56608,8.98057,1.07411,10.0547, +Internal Node(35),09.10.2003 17:27:02,459360,-7.32599e+06,2757.52,0.0499883,367.734,10.0855,366.447,999.48,0.318,0.0832103,10.55,0.275221,357.137,10.0416,2.24108,9.794,9.31067,1.28706,10.5977, +Internal Node(35),16.06.2004 10:41:46,459360,-7.32599e+06,2758.05,0.0801958,368.111,10.0841,366.278,999.427,0.318,0.0733839,43.5613,0.216235,356.881,10.0414,2.39631,10.2305,9.39729,1.83239,11.2297, +Internal Node(35),19.10.2004 19:19:08,459361,-7.32599e+06,2758.43,0.0996635,368.165,10.0818,365.517,999.431,0.318,0.0598293,83.6093,0.204979,355.648,10.041,2.77789,11.0527,9.86925,2.64795,12.5172, +Internal Node(35),27.06.2005 12:33:53,459361,-7.32599e+06,2758.73,0.111247,368.239,10.0794,365.197,999.434,0.318,0.0541155,116.283,0.198653,355.024,10.0404,2.95426,12.5391,10.1734,3.04172,13.2151, +Internal Node(35),10.11.2006 23:03:22,459361,-7.326e+06,2761.2,0.138675,368.278,10.0768,363.908,999.435,0.318,0.0390143,225.239,0.187042,353.093,10.04,3.10026,13.9664,10.8152,4.37018,15.1854, +Internal Node(35),01.12.2006,459361,-7.326e+06,2761.21,0.0862254,367.415,10.0754,363.635,999.611,0.318,0.0275704,54.1441,0.354862,351.68,10.0393,4.11794,14.374,11.955,3.78052,15.7356, +Internal Node(35),01.12.2006,459361,-7.326e+06,2761.21,0.0862254,367.415,10.0754,363.635,999.611,0.318,0.0275704,54.1441,0.354862,351.68,10.0393,4.11794,14.374,11.955,3.78052,15.7356, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Internal Node(36),09.12.1997 22:12:00,459356,-7.32599e+06,2741.1,0.10909,386.666,10.1014,384.445,1000.29,0.318,0.0191863,109.647,0.256643,330.781,20.9374,0.444542,43.3927,53.6645,2.22103,55.8855, +Internal Node(36),05.02.1998 14:35:11,459357,-7.32599e+06,2742.37,3.048e-07,387.159,10.0707,388.686,1000.09,0.318,0.0153351,2.39161,0.247271,344.809,11.8677,0.685398,42.5587,43.8772,-1.52776,42.3495, +Internal Node(36),12.04.1998 23:29:05,459358,-7.32599e+06,2743.23,3.048e-07,387.656,10.0711,390.497,1000.25,0.318,0.0231751,2.39161,0.183889,347.263,10.7534,0.725943,34.7484,43.2338,-2.84105,40.3928, +Internal Node(36),16.08.1998 08:06:27,459359,-7.326e+06,2744.7,3.048e-07,370.254,10.0611,391.535,999.891,0.318,0.0166676,2.39161,0.150986,354.487,10.2143,0.829787,36.0855,37.0475,-21.2812,15.7663, +Internal Node(36),18.10.1998 00:25:09,459359,-7.326e+06,2744.66,3.048e-07,359.469,10.1248,362.722,999.05,0.318,0.0339131,2.39161,0.15297,329.098,10.109,1.20521,15.567,33.6239,-3.2526,30.3713, +Internal Node(36),19.12.1998 16:43:50,459360,-7.326e+06,2745.43,3.048e-07,360.181,10.0891,371.3,999.394,0.318,0.0391332,2.39161,0.123771,346.2,10.069,1.28184,30.4617,25.0994,-11.1187,13.9807, +Internal Node(36),20.02.1999 09:02:31,459360,-7.326e+06,2745.39,3.048e-07,357.026,10.1073,358.681,998.909,0.318,0.0626882,2.39161,0.150462,333.49,10.0666,1.47729,16.5526,25.1909,-1.6549,23.536, +Internal Node(36),25.06.1999 17:39:53,459361,-7.326e+06,2746.32,3.048e-07,357.584,10.0902,365.025,999.279,0.318,0.0857406,2.39161,0.105197,346.465,10.0518,1.49151,24.1269,18.5603,-7.44169,11.1187, +Internal Node(36),27.08.1999 09:58:34,459361,-7.326e+06,2746.25,0.0199433,349.856,10.1158,349.792,998.581,0.318,0.0989417,2.39161,0.106828,333.83,10.0536,1.83343,11.8678,15.9616,0.0638696,16.0254, +Internal Node(36),30.12.1999 18:35:56,459361,-7.326e+06,2746.41,3.048e-07,347,10.1015,353.908,998.805,0.318,0.0956696,2.39161,0.108852,343.565,10.0486,2.07663,16.8841,10.3425,-6.90751,3.43503, +Internal Node(36),06.09.2000 11:50:41,459363,-7.326e+06,2748.41,0.16731,353.768,10.1237,350.208,998.584,0.318,0.107923,395.561,0.0607573,339.132,10.1388,1.88402,7.87668,11.0761,3.56015,14.6363, +Internal Node(36),09.01.2001 20:28:03,459365,-7.32601e+06,2752.16,3.048e-07,358.476,10.1053,359.962,999.133,0.318,0.00411453,2.39161,0.0898385,351.943,10.1939,1.45611,8.99749,8.01947,-1.4861,6.53337, +Internal Node(36),13.03.2001 12:46:44,459365,-7.32601e+06,2752.1,3.048e-07,358.08,10.1084,359.444,998.961,0.318,0.0348916,2.39161,0.0816878,350.546,10.0916,1.73311,6.96708,8.89786,-1.36376,7.5341, +Internal Node(36),15.05.2001 05:05:26,459366,-7.32601e+06,2751.85,3.048e-07,359.227,10.1004,361.611,999.1,0.318,0.116867,2.39161,0.0746836,353.657,10.0804,1.89105,8.09347,7.95433,-2.38399,5.57034, +Internal Node(36),17.09.2001 13:42:48,459366,-7.32601e+06,2751.85,0.0152075,360.955,10.099,361.161,999.089,0.318,0.112606,2.39161,0.0692075,352.515,10.0762,1.98921,7.31496,8.64647,-0.206591,8.43988, +Internal Node(36),20.01.2002 22:20:10,459366,-7.32601e+06,2751.8,0.0242713,362.716,10.0904,362.446,999.173,0.318,0.103598,2.39161,0.0743984,354.344,10.0672,2.20662,8.99552,8.10248,0.270061,8.37254, +Internal Node(36),26.05.2002 06:57:32,459365,-7.32601e+06,2751.9,0.0261307,364.214,10.0868,363.648,999.242,0.318,0.0980205,2.39161,0.0871084,355.242,10.0579,2.40002,9.66971,8.40601,0.566414,8.97242, +Internal Node(36),28.09.2002 15:34:55,459365,-7.32601e+06,2751.95,0.0405778,365.24,10.0892,364.182,999.294,0.318,0.0323523,5.64304,0.123604,354.925,10.0498,2.57971,9.78576,9.25713,1.05831,10.3154, +Internal Node(36),30.11.2002 07:53:36,459365,-7.32601e+06,2752.06,0.017078,365.741,10.0872,365.121,999.318,0.318,0.0314802,2.39161,0.11307,355.641,10.0455,2.76288,10.1776,9.48008,0.620831,10.1009, +Internal Node(36),01.02.2003 00:12:17,459365,-7.32601e+06,2752.23,3.048e-07,365.062,10.0877,365.287,999.386,0.318,0.0329913,2.39161,0.0902226,355.25,10.0438,2.83808,10.2524,10.0373,-0.224806,9.81249, +Internal Node(36),04.04.2003 16:30:58,459365,-7.32601e+06,2752.31,0.0257916,366.823,10.0872,365.921,999.452,0.318,0.0324479,2.39161,0.095792,355.905,10.0429,2.92914,10.0506,10.0156,0.902802,10.9184, +Internal Node(36),06.06.2003 08:49:39,459365,-7.32601e+06,2752.36,0.0216956,366.813,10.0855,365.96,999.375,0.318,0.0318469,2.39161,0.076033,355.758,10.0423,3.02398,10.8314,10.202,0.853543,11.0555, +Internal Node(36),09.10.2003 17:27:02,459365,-7.32601e+06,2752.41,0.00740322,366.578,10.0855,365.871,999.457,0.318,0.0313486,2.39161,0.100641,355.187,10.042,3.11626,11.0493,10.6841,0.706926,11.391, +Internal Node(36),16.06.2004 10:41:46,459365,-7.32601e+06,2752.53,0.030744,367.363,10.0841,366.134,999.391,0.318,0.0303765,2.4543,0.0515156,355.129,10.0417,3.28666,11.288,11.0053,1.22895,12.2343, +Internal Node(36),19.10.2004 19:19:08,459365,-7.32601e+06,2752.72,0.0311118,367.481,10.0818,366.016,999.398,0.318,0.0284567,2.54344,0.0487477,354.156,10.0412,3.6506,11.9813,11.8592,1.46503,13.3242, +Internal Node(36),27.06.2005 12:33:53,459365,-7.32601e+06,2752.89,0.0322538,367.571,10.0794,366.035,999.403,0.318,0.0278911,2.83393,0.0502435,353.823,10.0406,3.81586,13.2454,12.2121,1.53647,13.7485, +Internal Node(36),10.11.2006 23:03:22,459365,-7.32601e+06,2754.86,0.0489496,367.597,10.0768,365.743,999.404,0.318,0.0353388,9.90586,0.0848632,353.422,10.04,3.77255,13.5158,12.3205,1.85467,14.1752, +Internal Node(36),01.12.2006,459365,-7.32601e+06,2755.08,3.048e-07,366.599,10.0754,365.524,999.611,0.318,0.0307831,2.39161,0.0647213,351.857,10.0393,4.63135,13.8137,13.6673,1.07437,14.7417, +Internal Node(36),01.12.2006,459365,-7.32601e+06,2755.08,3.048e-07,366.599,10.0754,365.524,999.611,0.318,0.0307831,2.39161,0.0647213,351.857,10.0393,4.63135,13.8137,13.6673,1.07437,14.7417, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Internal Node(37),09.12.1997 22:12:00,459357,-7.32599e+06,2739.97,0.114533,386.549,10.1014,383.64,1000.29,0.318,0.0396687,126.892,0.129748,329.624,21.4266,0.427042,44.5827,54.0158,2.90835,56.9241, +Internal Node(37),05.02.1998 14:35:11,459359,-7.326e+06,2741.76,3.048e-07,387.018,10.0707,388.42,1000.09,0.318,0.0154786,2.39161,0.0522351,344.229,12.2927,0.670751,42.4933,44.1908,-1.40175,42.789, +Internal Node(37),12.04.1998 23:29:05,459360,-7.326e+06,2743.16,3.048e-07,387.597,10.0711,390.46,1000.25,0.318,0.00920391,2.39161,0.0481648,346.445,10.9968,0.641842,33.7834,44.0147,-2.86337,41.1514, +Internal Node(37),16.08.1998 08:06:27,459361,-7.326e+06,2744.09,3.048e-07,370.147,10.0611,390.757,999.891,0.318,0.0143415,2.39161,0.0303536,353.328,10.2668,0.807781,36.1233,37.4289,-20.6097,16.8192, +Internal Node(37),18.10.1998 00:25:09,459361,-7.326e+06,2744.07,3.048e-07,359.357,10.1248,361.902,999.045,0.318,0.0292999,2.39161,0.0468769,328.555,10.1302,1.18523,15.7509,33.347,-2.54444,30.8026, +Internal Node(37),19.12.1998 16:43:50,459363,-7.326e+06,2744.99,3.048e-07,360.104,10.0891,370.685,999.394,0.318,0.034252,2.39161,0.024338,345.095,10.0853,1.19402,30.9473,25.5908,-10.5812,15.0095, +Internal Node(37),20.02.1999 09:02:31,459363,-7.326e+06,2744.95,0.00256675,356.926,10.1073,358.305,998.904,0.318,0.0555091,2.39161,0.0820232,333.022,10.0826,1.38534,16.6254,25.283,-1.37894,23.9041, +Internal Node(37),25.06.1999 17:39:53,459364,-7.32601e+06,2745.81,3.048e-07,357.509,10.0902,364.726,999.279,0.318,0.0701801,2.39161,0.0213804,345.326,10.0664,1.3407,24.6481,19.3995,-7.21665,12.1829, +Internal Node(37),27.08.1999 09:58:34,459365,-7.32601e+06,2745.7,0.0192187,349.783,10.1158,349.881,998.577,0.318,0.0835733,2.39161,0.0705685,333.426,10.0696,1.65396,11.8332,16.4546,-0.0972787,16.3574, +Internal Node(37),30.12.1999 18:35:56,459366,-7.32601e+06,2747.12,3.048e-07,347.025,10.1015,354.953,998.805,0.318,0.125394,2.39161,0.0135914,342.675,10.0768,1.58187,16.861,12.2775,-7.92759,4.34993, +Internal Node(37),06.09.2000 11:50:41,459367,-7.32601e+06,2747.65,0.164479,353.691,10.1237,349.762,998.578,0.318,0.113184,375.816,0.051552,339.133,10.1003,1.76153,8.5621,10.6293,3.92901,14.5583, +Internal Node(37),09.01.2001 20:28:03,459370,-7.32602e+06,2750.58,3.048e-07,358.272,10.1053,359.277,999.125,0.318,0.114327,2.39161,0.0163731,352.244,10.1597,1.78221,9.63361,7.03291,-1.00438,6.02853, +Internal Node(37),13.03.2001 12:46:44,459370,-7.32602e+06,2750.58,0.0313717,357.928,10.1084,357.359,998.954,0.318,0.105914,2.60771,0.0169638,348.246,10.1131,1.95297,8.10476,9.11252,0.568819,9.68134, +Internal Node(37),15.05.2001 05:05:26,459371,-7.32602e+06,2750.12,3.048e-07,359.026,10.1004,359.757,999.093,0.318,0.0965004,2.39161,0.0136388,351.93,10.0916,2.13499,9.01276,7.82685,-0.730416,7.09643, +Internal Node(37),17.09.2001 13:42:48,459371,-7.32602e+06,2750.11,0.0354772,360.794,10.099,359.634,999.081,0.318,0.0928329,3.77132,0.022079,351.183,10.0862,2.22501,7.89789,8.45147,1.15983,9.61131, +Internal Node(37),20.01.2002 22:20:10,459371,-7.32602e+06,2750.13,0.0431761,362.561,10.0904,361.076,999.166,0.318,0.0862166,6.79791,0.0228312,352.905,10.0769,2.40803,9.68777,8.17094,1.48539,9.65633, +Internal Node(37),26.05.2002 06:57:32,459371,-7.32602e+06,2750.83,0.0376769,364.099,10.0868,362.682,999.236,0.318,0.0880198,4.51721,0.0179337,353.805,10.0708,2.3803,10.1788,8.87672,1.41719,10.2939, +Internal Node(37),28.09.2002 15:34:55,459371,-7.32602e+06,2750.93,0.0473414,365.11,10.0892,363.278,999.288,0.318,0.0842337,8.96126,0.0233576,353.449,10.0585,2.51328,10.3869,9.82912,1.83244,11.6616, +Internal Node(37),30.11.2002 07:53:36,459371,-7.32602e+06,2751.25,0.0176564,365.551,10.0872,364.344,999.309,0.318,0.0832641,2.39161,0.0248588,354.153,10.0508,2.57109,10.8091,10.1908,1.20661,11.3974, +Internal Node(37),01.02.2003 00:12:17,459370,-7.32602e+06,2751.32,3.048e-07,364.913,10.0877,364.507,999.382,0.318,0.0817393,2.39161,0.0137226,353.672,10.0473,2.65598,10.9176,10.8344,0.406284,11.2407, +Internal Node(37),04.04.2003 16:30:58,459370,-7.32602e+06,2751.34,0.0207944,366.517,10.0872,365.159,999.448,0.318,0.0798662,2.39161,0.0390479,354.301,10.0451,2.73628,10.7211,10.8574,1.35848,12.2159, +Internal Node(37),06.06.2003 08:49:39,459370,-7.32602e+06,2751.36,0.0135817,366.507,10.0855,365.244,999.362,0.318,0.0779762,2.39161,0.0373356,354.162,10.0437,2.81766,11.5524,11.0821,1.2627,12.3448, +Internal Node(37),09.10.2003 17:27:02,459370,-7.32602e+06,2751.37,3.048e-07,366.258,10.0855,365.214,999.453,0.318,0.076258,2.39161,0.0403953,353.598,10.0429,2.89592,11.8142,11.6168,1.04328,12.6601, +Internal Node(37),16.06.2004 10:41:46,459370,-7.32602e+06,2751.37,0.0143843,367.034,10.0841,365.518,999.376,0.318,0.0727365,2.39161,0.0363743,353.49,10.0422,3.05437,12.064,12.0277,1.51609,13.5438, +Internal Node(37),19.10.2004 19:19:08,459370,-7.32602e+06,2751.39,0.00510771,367.123,10.0818,365.567,999.382,0.318,0.0667078,2.39161,0.0378939,352.49,10.0415,3.37771,12.9661,13.0776,1.55577,14.6333, +Internal Node(37),27.06.2005 12:33:53,459370,-7.32602e+06,2751.39,3.048e-07,367.196,10.0794,365.659,999.385,0.318,0.063959,2.39161,0.0381341,352.129,10.0409,3.54522,14.2793,13.5299,1.53678,15.0666, +Internal Node(37),10.11.2006 23:03:22,459370,-7.32602e+06,2751.42,3.048e-07,367.057,10.0768,365.606,999.378,0.318,0.0591148,2.39161,0.0320454,351.137,10.0404,3.88841,15.0119,14.4684,1.45135,15.9198, +Internal Node(37),01.12.2006,459370,-7.32602e+06,2751.44,3.048e-07,365.994,10.0754,365.878,999.606,0.318,0.0509791,2.39161,0.0513931,349.702,10.0396,4.68505,15.327,16.1759,0.116251,16.2921, +Internal Node(37),01.12.2006,459370,-7.32602e+06,2751.44,3.048e-07,365.994,10.0754,365.878,999.606,0.318,0.0509791,2.39161,0.0513931,349.702,10.0396,4.68505,15.327,16.1759,0.116251,16.2921, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Internal Node(38),09.12.1997 22:12:00,459359,-7.326e+06,2739.16,0.0986367,386.466,10.1014,382.66,1000.28,0.318,0.050113,81.0515,0.168276,327.49,21.95,0.331836,46.2447,55.1706,3.80624,58.9769, +Internal Node(38),05.02.1998 14:35:11,459360,-7.326e+06,2739.93,0.0150889,386.777,10.0707,386.147,1000.09,0.318,0.117472,2.39161,0.0626351,343.986,12.0081,0.742553,44.5924,42.1608,0.629317,42.7902, +Internal Node(38),12.04.1998 23:29:05,459362,-7.326e+06,2741.66,3.048e-07,387.378,10.0711,388.898,1000.24,0.318,0.00772454,2.39161,0.0577111,345.73,11.2037,0.716173,33.7808,43.1686,-1.52002,41.6486, +Internal Node(38),16.08.1998 08:06:27,459364,-7.32601e+06,2743.8,3.048e-07,370.082,10.0611,390.671,999.891,0.318,0.0157097,2.39161,0.0373564,351.983,10.6341,0.699945,35.819,38.6883,-20.589,18.0993, +Internal Node(38),18.10.1998 00:25:09,459364,-7.32601e+06,2743.59,3.048e-07,359.249,10.1248,361.478,999.041,0.318,0.0295848,2.39161,0.0465987,327.856,10.2383,1.07959,15.7516,33.6224,-2.22974,31.3927, +Internal Node(38),19.12.1998 16:43:50,459365,-7.32601e+06,2744.67,3.048e-07,360.035,10.0891,370.366,999.394,0.318,0.0358688,2.39161,0.0315852,343.67,10.1451,1.01324,31.0832,26.6963,-10.3313,16.365, +Internal Node(38),20.02.1999 09:02:31,459366,-7.32601e+06,2744.43,0.00285976,356.831,10.1073,357.99,998.9,0.318,0.0549469,2.39161,0.111045,332.195,10.1139,1.20881,16.7815,25.795,-1.159,24.636, +Internal Node(38),25.06.1999 17:39:53,459368,-7.32602e+06,2745.22,3.048e-07,357.407,10.0902,364.329,999.279,0.318,0.0264497,2.39161,0.058326,343.749,10.0874,1.06369,25.4839,20.5795,-6.92176,13.6578, +Internal Node(38),27.08.1999 09:58:34,459369,-7.32602e+06,2744.98,0.0117628,349.671,10.1158,349.818,998.572,0.318,0.0505995,2.39161,0.0976907,332.975,10.0884,1.42863,11.8587,16.8428,-0.147316,16.6955, +Internal Node(38),30.12.1999 18:35:56,459370,-7.32602e+06,2746.02,3.048e-07,346.898,10.1015,354.323,998.805,0.318,0.0620614,2.39161,0.0162399,341.647,10.0635,1.4223,18.1401,12.6757,-7.42508,5.2506, +Internal Node(38),06.09.2000 11:50:41,459371,-7.32602e+06,2746.51,0.143957,353.576,10.1237,349.179,998.568,0.318,0.0985221,251.965,0.122405,338.903,10.0605,1.62258,9.2313,10.277,4.39644,14.6734, +Internal Node(38),09.01.2001 20:28:03,459375,-7.32603e+06,2748.43,3.048e-07,358.026,10.1053,357.716,999.115,0.318,0.0994318,2.39161,0.0326228,352.149,10.1024,2.06863,12.7268,5.56684,0.310192,5.87703, +Internal Node(38),13.03.2001 12:46:44,459375,-7.32603e+06,2748.43,0.0579632,357.721,10.1084,355.335,998.944,0.318,0.0899848,16.4477,0.0724241,347.43,10.0908,2.29293,9.71098,7.90526,2.386,10.2913, +Internal Node(38),15.05.2001 05:05:26,459376,-7.32603e+06,2747.89,3.048e-07,358.774,10.1004,357.963,999.083,0.318,0.0817908,2.39161,0.0279518,351.511,10.0626,2.48356,10.6128,6.45159,0.810954,7.26255, +Internal Node(38),17.09.2001 13:42:48,459376,-7.32603e+06,2747.89,0.0520246,360.586,10.099,358.056,999.072,0.318,0.077785,11.8925,0.0538264,350.94,10.0603,2.61397,9.05251,7.11592,2.53066,9.64658, +Internal Node(38),20.01.2002 22:20:10,459377,-7.32603e+06,2748.27,0.0597245,362.389,10.0904,359.815,999.158,0.318,0.0734062,17.993,0.0412189,352.489,10.0648,2.77886,10.6691,7.32523,2.57439,9.89962, +Internal Node(38),26.05.2002 06:57:32,459377,-7.32603e+06,2748.94,0.0513398,363.935,10.0868,361.61,999.229,0.318,0.0718483,11.429,0.0248234,353.279,10.0714,2.84337,10.852,8.33082,2.32519,10.656, +Internal Node(38),28.09.2002 15:34:55,459376,-7.32603e+06,2749.15,0.0581697,364.941,10.0892,362.313,999.28,0.318,0.0683797,16.6241,0.0233539,352.773,10.0647,2.9911,10.9775,9.5396,2.62797,12.1676, +Internal Node(38),30.11.2002 07:53:36,459376,-7.32603e+06,2749.52,0.0275311,365.359,10.0872,363.482,999.3,0.318,0.0667752,2.39161,0.0244983,353.393,10.0586,3.07082,11.2149,10.0891,1.87655,11.9657, +Internal Node(38),01.02.2003 00:12:17,459376,-7.32603e+06,2749.75,3.048e-07,364.726,10.0877,363.694,999.374,0.318,0.0663235,2.39161,0.0184945,352.777,10.0544,3.09529,11.3273,10.9168,1.03191,11.9487, +Internal Node(38),04.04.2003 16:30:58,459375,-7.32603e+06,2749.8,0.0272965,366.316,10.0872,364.381,999.441,0.318,0.0648375,2.39161,0.0381987,353.354,10.0507,3.17005,11.14,11.0268,1.93525,12.9621, +Internal Node(38),06.06.2003 08:49:39,459375,-7.32603e+06,2749.82,0.0180861,366.267,10.0855,364.519,999.352,0.318,0.0632365,2.39161,0.0435455,353.185,10.0479,3.2541,11.9513,11.334,1.74762,13.0817, +Internal Node(38),09.10.2003 17:27:02,459375,-7.32603e+06,2749.85,0.00142288,365.997,10.0855,364.557,999.446,0.318,0.0618234,2.39161,0.0477632,352.613,10.046,3.33226,12.1955,11.9442,1.44014,13.3843, +Internal Node(38),16.06.2004 10:41:46,459375,-7.32603e+06,2749.85,0.0136887,366.771,10.0841,364.967,999.364,0.318,0.05883,2.39161,0.0436205,352.492,10.044,3.50849,12.4265,12.4755,1.80375,14.2792, +Internal Node(38),19.10.2004 19:19:08,459375,-7.32603e+06,2749.88,3.048e-07,366.85,10.0818,365.199,999.369,0.318,0.0537875,2.39161,0.0451669,351.467,10.0424,3.85199,13.3841,13.732,1.65117,15.3832, +Internal Node(38),27.06.2005 12:33:53,459375,-7.32603e+06,2749.89,3.048e-07,366.921,10.0794,365.363,999.372,0.318,0.051518,2.39161,0.0448946,351.069,10.0414,4.0289,14.6916,14.2935,1.55839,15.8519, +Internal Node(38),10.11.2006 23:03:22,459375,-7.32603e+06,2749.91,3.048e-07,366.776,10.0768,365.401,999.365,0.318,0.0475148,2.39161,0.0394486,350.031,10.0407,4.38411,15.468,15.37,1.37522,16.7452, +Internal Node(38),01.12.2006,459375,-7.32603e+06,2749.93,3.048e-07,365.767,10.0754,365.703,999.6,0.318,0.0413232,2.39161,0.0646217,348.25,10.0399,5.10249,16.0545,17.4532,0.0637642,17.517, +Internal Node(38),01.12.2006,459375,-7.32603e+06,2749.93,3.048e-07,365.767,10.0754,365.703,999.6,0.318,0.0413232,2.39161,0.0646217,348.25,10.0399,5.10249,16.0545,17.4532,0.0637642,17.517, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Internal Node(39),09.12.1997 22:12:00,459360,-7.326e+06,2738.04,0.0983077,386.35,10.1014,378.632,1000.28,0.318,0.0709014,80.2433,0.27453,325.382,20.2003,0.228281,51.7443,53.2493,7.71821,60.9675, +Internal Node(39),05.02.1998 14:35:11,459362,-7.326e+06,2738.65,0.023936,386.625,10.0707,384.42,1000.09,0.318,0.122955,2.39161,0.140314,343.188,11.9996,0.697622,42.1204,41.2319,2.2055,43.4374, +Internal Node(39),12.04.1998 23:29:05,459364,-7.32601e+06,2739.76,3.048e-07,387.056,10.0711,386.958,1000.22,0.318,0.185446,2.39161,0.118545,344.6,11.6505,0.69906,32.8911,42.3586,0.0974572,42.4561, +Internal Node(39),16.08.1998 08:06:27,459366,-7.32601e+06,2742.07,3.048e-07,369.865,10.0611,388.844,999.891,0.318,0.0191609,2.39161,0.0537053,350.549,10.9034,0.696239,36.6263,38.2953,-18.9789,19.3164, +Internal Node(39),18.10.1998 00:25:09,459366,-7.32601e+06,2741.61,0.00115672,359.002,10.1248,359.117,999.031,0.318,0.0898255,2.39161,0.0653472,327.099,10.3135,1.15228,16.1324,32.0178,-0.115478,31.9023, +Internal Node(39),19.12.1998 16:43:50,459368,-7.32602e+06,2743.17,3.048e-07,359.837,10.0891,368.662,999.394,0.318,0.00785562,2.39161,0.0818032,342.16,10.1968,0.955343,31.7898,26.5019,-8.82496,17.677, +Internal Node(39),20.02.1999 09:02:31,459368,-7.32602e+06,2742.62,0.0205688,356.67,10.1073,356.087,998.892,0.318,0.0185648,2.39161,0.0957787,331.317,10.1507,1.21427,17.2553,24.7699,0.582725,25.3526, +Internal Node(39),25.06.1999 17:39:53,459372,-7.32603e+06,2743.33,3.048e-07,357.1,10.0902,362.898,999.279,0.318,0.0250293,2.39161,0.29008,341.853,10.2109,0.863474,24.1219,21.0456,-5.79817,15.2474, +Internal Node(39),27.08.1999 09:58:34,459372,-7.32603e+06,2743.47,0.0132339,349.471,10.1158,349.229,998.563,0.318,0.0457403,2.39161,0.10622,332.18,10.1352,1.26572,10.9254,17.0489,0.242664,17.2916, +Internal Node(39),30.12.1999 18:35:56,459373,-7.32603e+06,2744.85,3.048e-07,346.751,10.1015,354.074,998.805,0.318,0.0560749,2.39161,0.0440432,340.036,10.1048,1.17876,18.7595,14.0383,-7.32346,6.71486, +Internal Node(39),06.09.2000 11:50:41,459375,-7.32603e+06,2745.38,0.116633,353.45,10.1237,349.375,998.553,0.318,0.0423736,134,0.273845,337.867,10.0866,1.32193,9.56226,11.5078,4.07588,15.5837, +Internal Node(39),09.01.2001 20:28:03,459380,-7.32604e+06,2746.56,0.0194685,357.806,10.1053,356.123,999.107,0.318,0.0704877,2.39161,0.0629942,350.78,10.067,1.76006,15.0259,5.34316,1.6826,7.02577, +Internal Node(39),13.03.2001 12:46:44,459379,-7.32604e+06,2746.68,0.0628224,357.516,10.1084,354.483,998.934,0.318,0.0760846,20.9406,0.0980359,347.102,10.0635,2.15158,10.4628,7.3804,3.03363,10.414, +Internal Node(39),15.05.2001 05:05:26,459383,-7.32605e+06,2746,0.0125809,358.545,10.1004,357.454,999.074,0.318,0.0764433,2.39161,0.0402459,350.574,10.0685,1.80796,11.8546,6.88035,1.09059,7.97095, +Internal Node(39),17.09.2001 13:42:48,459382,-7.32604e+06,2746.42,0.0505765,360.411,10.099,357.875,999.063,0.318,0.0703078,10.9268,0.0834249,350.613,10.0652,2.2056,9.66284,7.26156,2.53616,9.79772, +Internal Node(39),20.01.2002 22:20:10,459382,-7.32605e+06,2746.6,0.0659461,362.214,10.0904,359.249,999.15,0.318,0.0651172,24.2222,0.0513882,351.827,10.0605,2.45781,11.8093,7.42161,2.96544,10.3871, +Internal Node(39),26.05.2002 06:57:32,459382,-7.32604e+06,2747.1,0.0624671,363.752,10.0868,360.719,999.22,0.318,0.0637964,20.5873,0.03554,352.768,10.0537,2.80748,12.495,7.95095,3.03282,10.9838, +Internal Node(39),28.09.2002 15:34:55,459382,-7.32604e+06,2747.28,0.0658863,364.75,10.0892,361.401,999.271,0.318,0.0596031,24.1564,0.0669578,352.274,10.0514,3.14039,12.6115,9.12681,3.34901,12.4758, +Internal Node(39),30.11.2002 07:53:36,459382,-7.32604e+06,2747.43,0.0379271,365.148,10.0872,362.485,999.291,0.318,0.0567218,4.60781,0.0645489,352.829,10.048,3.41688,13.0297,9.65611,2.66297,12.3191, +Internal Node(39),01.02.2003 00:12:17,459381,-7.32604e+06,2747.74,0.00179377,364.498,10.0877,362.597,999.364,0.318,0.0574111,2.39161,0.0392199,352.18,10.0445,3.57841,13.0552,10.4174,1.90053,12.3179, +Internal Node(39),04.04.2003 16:30:58,459381,-7.32604e+06,2747.83,0.0362015,366.085,10.0872,363.35,999.432,0.318,0.0556867,4.00706,0.0849649,352.708,10.0446,3.69088,12.7289,10.6421,2.7353,13.3774, +Internal Node(39),06.06.2003 08:49:39,459381,-7.32604e+06,2747.86,0.0269727,366.005,10.0855,363.546,999.342,0.318,0.0539729,2.39161,0.0706873,352.501,10.0441,3.80957,13.5111,11.0445,2.45976,13.5043, +Internal Node(39),09.10.2003 17:27:02,459380,-7.32604e+06,2747.9,0.00906585,365.704,10.0855,363.658,999.437,0.318,0.052508,2.39161,0.0809836,351.917,10.0438,3.9173,13.6616,11.7411,2.04555,13.7867, +Internal Node(39),16.06.2004 10:41:46,459381,-7.32604e+06,2747.89,0.0199202,366.496,10.0841,364.203,999.351,0.318,0.0494935,2.39161,0.0685214,351.769,10.043,4.15834,13.8103,12.4334,2.29306,14.7265, +Internal Node(39),19.10.2004 19:19:08,459380,-7.32604e+06,2747.94,0.00152148,366.563,10.0818,364.705,999.356,0.318,0.0447046,2.39161,0.076043,350.73,10.0422,4.60887,14.6988,13.9753,1.85773,15.8331, +Internal Node(39),27.06.2005 12:33:53,459380,-7.32604e+06,2747.96,3.048e-07,366.637,10.0794,364.97,999.359,0.318,0.0426144,2.39161,0.0747558,350.289,10.0414,4.83721,16.0124,14.6805,1.66683,16.3473, +Internal Node(39),10.11.2006 23:03:22,459380,-7.32604e+06,2747.99,3.048e-07,366.471,10.0768,365.183,999.351,0.318,0.0389908,2.39161,0.0733892,349.216,10.0409,5.29116,16.7335,15.967,1.28757,17.2546, +Internal Node(39),01.12.2006,459380,-7.32604e+06,2748.02,3.048e-07,365.541,10.0754,365.59,999.591,0.318,0.0337183,2.39161,0.0763349,347.147,10.0401,6.1259,17.4021,18.4424,-0.0489296,18.3934, +Internal Node(39),01.12.2006,459380,-7.32604e+06,2748.02,3.048e-07,365.541,10.0754,365.59,999.591,0.318,0.0337183,2.39161,0.0763349,347.147,10.0401,6.1259,17.4021,18.4424,-0.0489296,18.3934, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Internal Node(40),09.12.1997 22:12:00,459361,-7.326e+06,2736.5,0.090237,386.182,10.1014,373.447,1000.27,0.318,0.0830249,62.0584,0.457061,324.145,17.4817,0.192392,54.4368,49.3016,12.7352,62.0368, +Internal Node(40),05.02.1998 14:35:11,459363,-7.32601e+06,2736.98,0.0301763,386.383,10.0707,381.387,1000.09,0.318,0.125252,2.39161,0.280691,342.388,11.2377,0.676825,36.0322,38.9987,4.99545,43.9941, +Internal Node(40),12.04.1998 23:29:05,459365,-7.32601e+06,2737.51,0.0126666,386.824,10.0711,383.171,1000.21,0.318,0.0367122,2.39161,0.220352,343.598,10.9668,0.630492,36.2344,39.5732,3.65291,43.2261, +Internal Node(40),16.08.1998 08:06:27,459368,-7.32602e+06,2738.37,3.048e-07,369.485,10.0611,383.835,999.891,0.318,0.0332464,2.39161,0.0818604,349.321,10.5313,0.669944,39.8111,34.5139,-14.3501,20.1638, +Internal Node(40),18.10.1998 00:25:09,459367,-7.32602e+06,2738.4,0.0270717,358.66,10.1248,354.863,999.015,0.318,0.0726065,2.39161,0.135861,326.573,10.2699,1.31548,17.0025,28.2899,3.79696,32.0869, +Internal Node(40),19.12.1998 16:43:50,459370,-7.32602e+06,2738.96,3.048e-07,359.258,10.0891,363.885,999.394,0.318,0.0748924,2.39161,0.20909,341.074,10.2545,1.21269,29.0876,22.8108,-4.62712,18.1837, +Internal Node(40),20.02.1999 09:02:31,459370,-7.32602e+06,2739,0.0472156,356.298,10.1073,351.993,998.875,0.318,0.103853,8.89001,0.188215,330.433,10.2372,1.44416,17.3543,21.5609,4.3047,25.8656, +Internal Node(40),25.06.1999 17:39:53,459374,-7.32603e+06,2739.86,3.048e-07,356.25,10.0902,359.331,999.279,0.318,0.0232753,2.39161,0.756136,340.426,10.3046,0.689577,24.8847,18.905,-3.081,15.824, +Internal Node(40),27.08.1999 09:58:34,459374,-7.32603e+06,2739.54,0.0381884,349.072,10.1158,345.848,998.544,0.318,0.0576117,4.70372,0.191743,331.487,10.1752,1.46132,10.2223,14.3617,3.22372,17.5854, +Internal Node(40),30.12.1999 18:35:56,459377,-7.32604e+06,2740.29,3.048e-07,346.184,10.1015,350.63,998.805,0.318,0.0688644,2.39161,0.11059,338.105,10.1863,1.11553,20.3611,12.525,-4.44626,8.07876, +Internal Node(40),06.09.2000 11:50:41,459379,-7.32604e+06,2740.55,0.0986488,352.915,10.1237,346.874,998.494,0.318,0.144425,81.0813,0.503449,335.939,10.2219,1.14362,9.93633,10.9342,6.04082,16.975, +Internal Node(40),09.01.2001 20:28:03,459383,-7.32605e+06,2741.23,0.0477942,357.118,10.1053,353.503,999.081,0.318,0.028809,9.22084,0.337717,347.961,10.1594,1.33117,16.8065,5.54261,3.61475,9.15736, +Internal Node(40),13.03.2001 12:46:44,459383,-7.32605e+06,2741.05,0.0640334,356.918,10.1084,353.311,998.906,0.318,0.0954108,22.1751,0.110734,345.499,10.1406,1.71917,10.6263,7.81152,3.60736,11.4189, +Internal Node(40),15.05.2001 05:05:26,459386,-7.32606e+06,2741.74,0.03306,358.147,10.1004,356.263,999.055,0.318,0.124935,3.05178,0.0379088,348.71,10.134,1.37379,12.6335,7.55261,1.88397,9.43658, +Internal Node(40),17.09.2001 13:42:48,459386,-7.32605e+06,2741.63,0.0472852,359.868,10.099,357.231,999.038,0.318,0.103635,8.92937,0.16435,349.093,10.1345,1.58388,10.3979,8.13856,2.63735,10.7759, +Internal Node(40),20.01.2002 22:20:10,459386,-7.32606e+06,2741.74,0.0654661,361.729,10.0904,358.767,999.127,0.318,0.0882671,23.6971,0.0598045,349.903,10.133,1.9197,12.8104,8.86462,2.96201,11.8266, +Internal Node(40),26.05.2002 06:57:32,459387,-7.32606e+06,2742.26,0.0576514,363.257,10.0868,360.648,999.197,0.318,0.0793546,16.1836,0.0546048,350.866,10.1316,2.18827,13.5512,9.78173,2.60887,12.3906, +Internal Node(40),28.09.2002 15:34:55,459386,-7.32605e+06,2742.72,0.0548503,364.259,10.0892,361.765,999.248,0.318,0.0406904,13.9374,0.118855,350.66,10.1338,2.53542,13.4924,11.105,2.49325,13.5983, +Internal Node(40),30.11.2002 07:53:36,459386,-7.32605e+06,2743.04,0.0286987,364.631,10.0872,363.053,999.266,0.318,0.0372591,2.39161,0.0802998,351.232,10.1236,2.88846,13.9563,11.8214,1.57726,13.3987, +Internal Node(40),01.02.2003 00:12:17,459386,-7.32605e+06,2743.43,3.048e-07,364.008,10.0877,363.308,999.338,0.318,0.0360655,2.39161,0.0765736,350.692,10.1205,3.11735,13.9517,12.6154,0.700126,13.3155, +Internal Node(40),04.04.2003 16:30:58,459385,-7.32605e+06,2743.65,0.0242588,365.495,10.0872,364.006,999.407,0.318,0.0350889,2.39161,0.101414,351.206,10.1151,3.28769,13.7659,12.8006,1.48853,14.2891, +Internal Node(40),06.06.2003 08:49:39,459385,-7.32605e+06,2743.83,0.0165909,365.421,10.0855,364.208,999.315,0.318,0.0344361,2.39161,0.11088,350.996,10.1109,3.42532,14.5113,13.2121,1.21325,14.4254, +Internal Node(40),09.10.2003 17:27:02,459385,-7.32605e+06,2743.94,3.048e-07,365.101,10.0855,364.418,999.412,0.318,0.0335704,2.39161,0.127647,350.47,10.1106,3.56541,14.6371,13.9476,0.682862,14.6305, +Internal Node(40),16.06.2004 10:41:46,459385,-7.32605e+06,2744.01,0.00748986,365.95,10.0841,365.107,999.325,0.318,0.0317582,2.39161,0.102464,350.318,10.1075,3.81813,14.7387,14.7884,0.843284,15.6317, +Internal Node(40),19.10.2004 19:19:08,459385,-7.32605e+06,2744.06,3.048e-07,365.978,10.0818,365.912,999.328,0.318,0.0286027,2.39161,0.118131,349.266,10.1036,4.30421,15.7342,16.6454,0.0665214,16.7119, +Internal Node(40),27.06.2005 12:33:53,459385,-7.32605e+06,2744.09,3.048e-07,366.056,10.0794,366.298,999.332,0.318,0.0272724,2.39161,0.115311,348.791,10.1005,4.54903,17.0633,17.5079,-0.242818,17.2651, +Internal Node(40),10.11.2006 23:03:22,459385,-7.32605e+06,2744.14,3.048e-07,365.879,10.0768,366.758,999.323,0.318,0.0249505,2.39161,0.115018,347.711,10.0966,5.0339,17.8065,19.0478,-0.87938,18.1685, +Internal Node(40),01.12.2006,459385,-7.32605e+06,2744.22,3.048e-07,364.962,10.0754,367.597,999.568,0.318,0.0215996,2.39161,0.10939,345.625,10.0943,5.91787,18.4799,21.9722,-2.63477,19.3374, +Internal Node(40),01.12.2006,459385,-7.32605e+06,2744.22,3.048e-07,364.962,10.0754,367.597,999.568,0.318,0.0215996,2.39161,0.10939,345.625,10.0943,5.91787,18.4799,21.9722,-2.63477,19.3374, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Internal Node(41),09.12.1997 22:12:00,459360,-7.326e+06,2734.61,0.0713993,386.017,10.1014,380.671,1000.26,0.318,0.0684129,30.7417,0.146114,325.578,22.4515,0.236862,54.8724,55.0926,5.34625,60.4389, +Internal Node(41),05.02.1998 14:35:11,459361,-7.326e+06,2735.29,0.0148714,386.353,10.0707,384.772,1000.09,0.318,0.109565,2.39161,0.132875,343.334,13.9589,0.772768,39.3488,41.4376,1.58087,43.0185, +Internal Node(41),12.04.1998 23:29:05,459363,-7.32601e+06,2734.93,3.048e-07,386.757,10.0711,388.288,1000.21,0.318,0.148552,2.39161,0.116527,344.624,15.2459,0.858222,34.5928,43.6638,-1.53154,42.1323, +Internal Node(41),16.08.1998 08:06:27,459365,-7.32601e+06,2735.04,3.048e-07,369.264,10.0611,388.186,999.891,0.318,0.0207619,2.39161,0.0464923,350.318,14.7299,1.05728,35.517,37.8684,-18.922,18.9464, +Internal Node(41),18.10.1998 00:25:09,459365,-7.32601e+06,2735.45,0.0128685,358.52,10.1248,356.853,999.006,0.318,0.0555581,2.39161,0.0838822,326.635,13.1315,1.68494,15.76,30.2176,1.66674,31.8843, +Internal Node(41),19.12.1998 16:43:50,459367,-7.32602e+06,2735.19,3.048e-07,359.131,10.0891,366.952,999.394,0.318,0.0534751,2.39161,0.107625,341.692,13.9394,1.66163,29.684,25.2597,-7.82076,17.4389, +Internal Node(41),20.02.1999 09:02:31,459367,-7.32602e+06,2735.75,0.033975,356.068,10.1073,352.673,998.864,0.318,0.073392,3.31226,0.0546606,330.554,12.4612,1.98265,16.9552,22.1188,3.39475,25.5135, +Internal Node(41),25.06.1999 17:39:53,459370,-7.32602e+06,2735.44,3.048e-07,356.492,10.0902,361.503,999.279,0.318,0.0929194,2.39161,0.30825,341.291,13.9193,1.51334,23.5473,20.2114,-5.01054,15.2009, +Internal Node(41),27.08.1999 09:58:34,459371,-7.32602e+06,2736.25,0.0335544,348.861,10.1158,345.519,998.534,0.318,0.0907804,3.19075,0.0830569,331.309,11.7489,2.08053,10.7249,14.2098,3.34225,17.5521, +Internal Node(41),30.12.1999 18:35:56,459374,-7.32603e+06,2735.38,3.048e-07,345.862,10.1015,353.634,998.796,0.318,0.0457266,2.39161,0.0539966,338.098,14.2064,1.55857,17.4256,15.5361,-7.77187,7.76424, +Internal Node(41),06.09.2000 11:50:41,459374,-7.32603e+06,2735.41,0.0642521,352.474,10.1237,349.193,998.516,0.318,0.0754647,22.4031,0.0911629,336.101,13.8047,1.97555,8.96815,13.0919,3.28041,16.3723, +Internal Node(41),09.01.2001 20:28:03,459381,-7.32605e+06,2736.2,0.0219497,356.805,10.1053,355.197,999.059,0.318,0.0198491,2.39161,0.0871397,347.451,12.4503,1.66468,15.6011,7.74661,1.60798,9.35458, +Internal Node(41),13.03.2001 12:46:44,459378,-7.32604e+06,2735.46,0.0157165,356.436,10.1084,356.433,998.884,0.318,0.082517,2.39161,0.0171514,344.531,13.4621,2.41791,9.4651,11.902,0.00361059,11.9056, +Internal Node(41),15.05.2001 05:05:26,459383,-7.32605e+06,2737.5,0.0240897,357.8,10.1004,355.563,999.036,0.318,0.0685314,2.39161,0.0205926,348.121,10.1643,2.00252,13.1166,7.4424,2.23673,9.67913, +Internal Node(41),17.09.2001 13:42:48,459380,-7.32604e+06,2736.49,0.0193559,359.466,10.099,358.336,999.02,0.318,0.0500892,2.39161,0.0304943,348.302,11.5415,2.58268,9.81652,10.0335,1.13024,11.1637, +Internal Node(41),20.01.2002 22:20:10,459381,-7.32605e+06,2737.08,0.0356036,361.296,10.0904,359.361,999.107,0.318,0.0453253,3.81178,0.0101012,349.45,10.5289,2.85543,12.6108,9.91059,1.93487,11.8455, +Internal Node(41),26.05.2002 06:57:32,459382,-7.32605e+06,2737.53,0.0292468,362.821,10.0868,361.286,999.177,0.318,0.0407948,2.39161,0.0101742,350.327,10.1822,3.09643,13.5322,10.9598,1.53402,12.4938, +Internal Node(41),28.09.2002 15:34:55,459381,-7.32605e+06,2737.11,0.0179952,363.756,10.0892,363.118,999.225,0.318,0.0352202,2.39161,0.0184688,349.944,10.449,3.47487,13.2768,13.1738,0.637677,13.8115, +Internal Node(41),30.11.2002 07:53:36,459381,-7.32605e+06,2737.51,3.048e-07,364.257,10.0872,364.537,999.249,0.318,0.0326805,2.39161,0.0476505,350.475,10.1953,3.68614,14.0307,14.0618,-0.280075,13.7818, +Internal Node(41),01.02.2003 00:12:17,459380,-7.32604e+06,2737.03,3.048e-07,363.533,10.0877,365.537,999.315,0.318,0.0503712,2.39161,0.0344474,349.854,10.5284,3.93015,13.7946,15.6833,-2.00429,13.679, +Internal Node(41),04.04.2003 16:30:58,459380,-7.32604e+06,2736.93,3.048e-07,365.144,10.0872,366.579,999.382,0.318,0.0487945,2.39161,0.0673052,350.337,10.663,4.04448,13.5246,16.2426,-1.4357,14.8069, +Internal Node(41),06.06.2003 08:49:39,459380,-7.32604e+06,2736.98,3.048e-07,365.132,10.0855,366.957,999.298,0.318,0.0473863,2.39161,0.0783323,350.121,10.5872,4.16107,14.4116,16.8362,-1.82532,15.0109, +Internal Node(41),09.10.2003 17:27:02,459380,-7.32604e+06,2736.9,3.048e-07,364.867,10.0855,367.531,999.385,0.318,0.0462083,2.39161,0.0900163,349.598,10.695,4.26753,14.4661,17.9329,-2.66385,15.269, +Internal Node(41),16.06.2004 10:41:46,459380,-7.32604e+06,2736.96,3.048e-07,365.641,10.0841,368.429,999.311,0.318,0.0439361,2.39161,0.0777423,349.444,10.587,4.48891,14.7325,18.9841,-2.78769,16.1964, +Internal Node(41),19.10.2004 19:19:08,459380,-7.32604e+06,2736.89,3.048e-07,365.712,10.0818,369.888,999.316,0.318,0.0402782,2.39161,0.0863834,348.401,10.6559,4.89783,15.5056,21.4874,-4.17614,17.3112, +Internal Node(41),27.06.2005 12:33:53,459380,-7.32604e+06,2736.88,3.048e-07,365.78,10.0794,370.577,999.319,0.318,0.0386412,2.39161,0.0852903,347.948,10.6555,5.10343,16.7986,22.629,-4.79668,17.8324, +Internal Node(41),10.11.2006 23:03:22,459380,-7.32604e+06,2736.92,3.048e-07,365.604,10.0768,371.443,999.311,0.318,0.035639,2.39161,0.0857761,346.863,10.574,5.53178,17.5832,24.5801,-5.83928,18.7408, +Internal Node(41),01.12.2006,459379,-7.32604e+06,2736.87,3.048e-07,364.67,10.0754,373.209,999.539,0.318,0.0313067,2.39161,0.0842639,344.79,10.6031,6.29608,18.124,28.4198,-8.53908,19.8807, +Internal Node(41),01.12.2006,459379,-7.32604e+06,2736.87,3.048e-07,364.67,10.0754,373.209,999.539,0.318,0.0313067,2.39161,0.0842639,344.79,10.6031,6.29608,18.124,28.4198,-8.53908,19.8807, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Internal Node(42),09.12.1997 22:12:00,459358,-7.326e+06,2733.87,0.0617774,385.951,10.1014,385.015,1000.26,0.318,0.0484492,19.9129,0.0809618,327.832,24.8852,0.341959,50.4356,57.1829,0.935473,58.1184, +Internal Node(42),05.02.1998 14:35:11,459359,-7.326e+06,2734.14,3.048e-07,386.305,10.0707,389.517,1000.09,0.318,0.0901115,2.39161,0.0276654,345.048,16.7356,0.945712,41.6034,44.4682,-3.21205,41.2562, +Internal Node(42),12.04.1998 23:29:05,459361,-7.326e+06,2734.18,3.048e-07,386.746,10.0711,390.686,1000.21,0.318,0.113919,2.39161,0.049253,346.115,16.4399,1.12314,33.1735,44.5704,-3.94,40.6304, +Internal Node(42),16.08.1998 08:06:27,459362,-7.32601e+06,2734.09,3.048e-07,369.186,10.0611,391.133,999.891,0.318,0.103038,2.39161,0.016178,351.924,16.1714,1.48489,32.1279,39.2088,-21.9476,17.2611, +Internal Node(42),18.10.1998 00:25:09,459363,-7.32601e+06,2734.19,3.048e-07,358.44,10.1248,361.002,999.002,0.318,0.101488,2.39161,0.0323423,326.921,15.69,1.92946,13.9157,34.0808,-2.56129,31.5195, +Internal Node(42),19.12.1998 16:43:50,459364,-7.32601e+06,2734.13,3.048e-07,359.064,10.0891,369.992,999.394,0.318,0.0441055,2.39161,0.0297746,342.724,15.538,2.01796,26.122,27.2673,-10.9277,16.3396, +Internal Node(42),20.02.1999 09:02:31,459364,-7.32601e+06,2734.29,0.0157889,355.969,10.1073,357.241,998.859,0.318,0.0666863,2.39161,0.0224958,330.795,15.2282,2.18394,14.4674,26.4462,-1.27223,25.1739, +Internal Node(42),25.06.1999 17:39:53,459367,-7.32602e+06,2734.26,3.048e-07,356.419,10.0902,364.275,999.279,0.318,0.0683423,2.39161,0.0726627,342.418,15.5213,2.061,21.0724,21.8568,-7.85606,14.0008, +Internal Node(42),27.08.1999 09:58:34,459367,-7.32602e+06,2734.45,0.0120482,348.731,10.1158,350.378,998.528,0.318,0.0810823,2.39161,0.0272743,331.28,15.089,2.31758,10.2117,19.098,-1.6473,17.4507, +Internal Node(42),30.12.1999 18:35:56,459368,-7.32602e+06,2734.04,3.048e-07,345.766,10.1015,356.003,998.795,0.318,0.0814349,2.39161,0.0115325,339.479,15.6588,2.31975,14.4657,16.5241,-10.2367,6.28738, +Internal Node(42),06.09.2000 11:50:41,459369,-7.32602e+06,2734.11,0.0543995,352.364,10.1237,351.649,998.518,0.318,0.0806615,13.5966,0.0234195,336.365,15.6013,2.38348,7.70561,15.2845,0.714713,15.9992, +Internal Node(42),09.01.2001 20:28:03,459373,-7.32603e+06,2734.11,3.048e-07,356.716,10.1053,360.203,999.05,0.318,0.0615792,2.39161,0.0163551,348.956,15.3358,2.57446,11.6287,11.2475,-3.48678,7.76068, +Internal Node(42),13.03.2001 12:46:44,459373,-7.32603e+06,2734.16,3.048e-07,356.338,10.1084,358.879,998.879,0.318,0.0723814,2.39161,0.0108327,344.607,15.2805,2.72154,8.13233,14.2719,-2.54091,11.731, +Internal Node(42),15.05.2001 05:05:26,459375,-7.32603e+06,2734.59,3.048e-07,357.562,10.1004,361.043,999.023,0.318,0.070588,2.39161,0.00912515,348.618,14.5188,2.81056,9.38419,12.4242,-3.48027,8.94395, +Internal Node(42),17.09.2001 13:42:48,459375,-7.32603e+06,2734.59,3.048e-07,359.305,10.099,361.632,999.012,0.318,0.068021,2.39161,0.0123346,348.337,14.4516,2.90706,7.85225,13.2948,-2.3266,10.9682, +Internal Node(42),20.01.2002 22:20:10,459375,-7.32603e+06,2734.84,3.048e-07,361.085,10.0904,362.871,999.097,0.318,0.0629927,2.39161,0.0062259,349.78,13.8925,3.1505,9.70189,13.0903,-1.78597,11.3044, +Internal Node(42),26.05.2002 06:57:32,459376,-7.32604e+06,2734.96,3.048e-07,362.584,10.0868,364.521,999.166,0.318,0.0586769,2.39161,0.00852563,350.625,13.5997,3.37806,10.2687,13.8959,-1.93691,11.959, +Internal Node(42),28.09.2002 15:34:55,459375,-7.32603e+06,2734.8,3.048e-07,363.55,10.0892,366.313,999.215,0.318,0.0555885,2.39161,0.0127274,350.192,13.7124,3.55289,10.1423,16.1209,-2.76289,13.358, +Internal Node(42),30.11.2002 07:53:36,459375,-7.32603e+06,2734.9,3.048e-07,364.064,10.0872,367.899,999.24,0.318,0.0524261,2.39161,0.0246878,350.763,13.4563,3.76562,10.6688,17.1361,-3.83504,13.301, +Internal Node(42),01.02.2003 00:12:17,459374,-7.32603e+06,2734.71,3.048e-07,363.344,10.0877,368.842,999.306,0.318,0.0512919,2.39161,0.0148635,350.122,13.6337,3.83448,10.5759,18.7203,-5.49839,13.2219, +Internal Node(42),04.04.2003 16:30:58,459374,-7.32603e+06,2734.66,3.048e-07,365.049,10.0872,369.819,999.372,0.318,0.0500105,2.39161,0.0418344,350.642,13.6234,3.91735,10.3721,19.1772,-4.76975,14.4074, +Internal Node(42),06.06.2003 08:49:39,459374,-7.32603e+06,2734.67,3.048e-07,365.061,10.0855,370.263,999.294,0.318,0.0488614,2.39161,0.0482506,350.452,13.5675,4.00615,11.0781,19.8109,-5.20268,14.6082, +Internal Node(42),09.10.2003 17:27:02,459374,-7.32603e+06,2734.64,3.048e-07,364.812,10.0855,370.806,999.376,0.318,0.0478782,2.39161,0.0521686,349.91,13.5633,4.08662,11.2052,20.8955,-5.99431,14.9012, +Internal Node(42),16.06.2004 10:41:46,459374,-7.32603e+06,2734.65,3.048e-07,365.578,10.0841,371.776,999.308,0.318,0.0459179,2.39161,0.050327,349.775,13.4627,4.26233,11.3675,22.0015,-6.19871,15.8028, +Internal Node(42),19.10.2004 19:19:08,459374,-7.32603e+06,2734.62,3.048e-07,365.658,10.0818,373.203,999.313,0.318,0.0425193,2.39161,0.0529732,348.731,13.3392,4.60212,11.991,24.4716,-7.54472,16.9269, +Internal Node(42),27.06.2005 12:33:53,459374,-7.32603e+06,2734.61,3.048e-07,365.726,10.0794,373.909,999.316,0.318,0.0409407,2.39161,0.0526216,348.307,13.2641,4.7775,13.0236,25.6026,-8.18367,17.419, +Internal Node(42),10.11.2006 23:03:22,459374,-7.32603e+06,2734.62,3.048e-07,365.548,10.0768,374.848,999.308,0.318,0.0380727,2.39161,0.0523187,347.231,13.1233,5.13664,13.5883,27.6172,-9.30009,18.3171, +Internal Node(42),01.12.2006,459374,-7.32603e+06,2734.6,3.048e-07,364.612,10.0754,376.642,999.529,0.318,0.0337442,2.39161,0.0516043,345.153,12.9506,5.79287,14.055,31.4886,-12.0299,19.4587, +Internal Node(42),01.12.2006,459374,-7.32603e+06,2734.6,3.048e-07,364.612,10.0754,376.642,999.529,0.318,0.0337442,2.39161,0.0516043,345.153,12.9506,5.79287,14.055,31.4886,-12.0299,19.4587, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Internal Node(43),09.12.1997 22:12:00,459356,-7.32599e+06,2733.29,0.0713946,385.894,10.1014,386.777,1000.25,0.318,0.0344602,30.7356,0.116456,331.09,24.9367,0.48882,47.1857,55.6867,-0.882889,54.8038, +Internal Node(43),05.02.1998 14:35:11,459357,-7.326e+06,2733.46,3.048e-07,386.252,10.0707,391.427,1000.09,0.318,0.0807921,2.39161,0.0278019,345.991,17.5341,1.06237,38.7365,45.436,-5.17517,40.2608, +Internal Node(43),12.04.1998 23:29:05,459358,-7.326e+06,2733.8,3.048e-07,386.723,10.0711,390.944,1000.21,0.318,0.0961682,2.39161,0.0313983,347.137,16.0393,1.33909,32.4976,43.8073,-4.22063,39.5867, +Internal Node(43),16.08.1998 08:06:27,459360,-7.326e+06,2733.44,3.048e-07,369.127,10.0611,392.338,999.891,0.318,0.0827512,2.39161,0.0165925,353.438,16.3138,1.85337,29.9953,38.9004,-23.2109,15.6896, +Internal Node(43),18.10.1998 00:25:09,459360,-7.326e+06,2733.48,3.048e-07,358.388,10.1248,362.533,998.999,0.318,0.0878385,2.39161,0.0231492,327.295,16.4001,2.23157,12.9963,35.2376,-4.14509,31.0926, +Internal Node(43),19.12.1998 16:43:50,459361,-7.326e+06,2733.4,3.048e-07,359,10.0891,371.371,999.394,0.318,0.0826327,2.39161,0.0138413,343.799,15.9381,2.37403,23.8048,27.572,-12.3717,15.2003, +Internal Node(43),20.02.1999 09:02:31,459361,-7.326e+06,2733.49,0.0105629,355.903,10.1073,358.848,998.856,0.318,0.0795996,2.39161,0.0199777,331.168,15.9444,2.50274,13.2035,27.6796,-2.94419,24.7354, +Internal Node(43),25.06.1999 17:39:53,459363,-7.32601e+06,2733.33,3.048e-07,356.329,10.0902,366.211,999.279,0.318,0.0851577,2.39161,0.0115573,343.113,16.381,2.34563,18.7422,23.0981,-9.88139,13.2167, +Internal Node(43),27.08.1999 09:58:34,459364,-7.32601e+06,2733.33,0.0011446,348.637,10.1158,352.73,998.524,0.318,0.0802097,2.39161,0.0174589,331.238,16.4001,2.54144,9.04368,21.4924,-4.0933,17.3991, +Internal Node(43),30.12.1999 18:35:56,459364,-7.32601e+06,2733.4,3.048e-07,345.707,10.1015,356.764,998.793,0.318,0.0705567,2.39161,0.00809283,339.959,15.8546,2.67965,13.4353,16.8047,-11.0564,5.74834, +Internal Node(43),06.09.2000 11:50:41,459365,-7.32601e+06,2733.43,0.0780809,352.3,10.1237,352.224,998.516,0.318,0.0694355,40.2051,0.0131557,336.525,15.8768,2.76323,7.15228,15.6991,0.0758285,15.7749, +Internal Node(43),09.01.2001 20:28:03,459367,-7.32602e+06,2733.09,3.048e-07,356.623,10.1053,361.409,999.045,0.318,0.0687392,2.39161,0.00688015,349.288,15.9291,2.827,10.266,12.1211,-4.78605,7.33506, +Internal Node(43),13.03.2001 12:46:44,459367,-7.32602e+06,2733.15,3.048e-07,356.25,10.1084,359.992,998.875,0.318,0.070001,2.39161,0.00839651,344.658,15.9279,2.92621,7.27213,15.3341,-3.74226,11.5918, +Internal Node(43),15.05.2001 05:05:26,459369,-7.32602e+06,2733.4,3.048e-07,357.458,10.1004,362.535,999.017,0.318,0.0692683,2.39161,0.00820022,348.746,15.5481,2.96718,8.18463,13.7891,-5.07746,8.71166, +Internal Node(43),17.09.2001 13:42:48,459369,-7.32602e+06,2733.4,3.048e-07,359.199,10.099,362.99,999.007,0.318,0.0675847,2.39161,0.00787215,348.322,15.4707,3.04144,6.90379,14.6687,-3.79144,10.8773, +Internal Node(43),20.01.2002 22:20:10,459369,-7.32602e+06,2733.52,3.048e-07,360.964,10.0904,364.477,999.092,0.318,0.0643713,2.39161,0.00716669,349.923,15.1113,3.20018,8.29484,14.5542,-3.51264,11.0415, +Internal Node(43),26.05.2002 06:57:32,459369,-7.32602e+06,2733.56,3.048e-07,362.458,10.0868,366.647,999.16,0.318,0.0613314,2.39161,0.00779684,350.801,14.9004,3.36127,8.65307,15.8461,-4.18839,11.6577, +Internal Node(43),28.09.2002 15:34:55,459369,-7.32602e+06,2733.48,3.048e-07,363.435,10.0892,368.344,999.21,0.318,0.0586174,2.39161,0.00966682,350.366,14.8235,3.51241,8.65549,17.9775,-4.90913,13.0684, +Internal Node(43),30.11.2002 07:53:36,459369,-7.32602e+06,2733.52,3.048e-07,363.954,10.0872,370.038,999.235,0.318,0.0562397,2.39161,0.015765,350.982,14.6311,3.66362,9.00432,19.056,-6.08414,12.9719, +Internal Node(43),01.02.2003 00:12:17,459369,-7.32602e+06,2733.42,3.048e-07,363.23,10.0877,370.849,999.302,0.318,0.0549485,2.39161,0.0076589,350.354,14.6177,3.74295,9.05755,20.4947,-7.61926,12.8755, +Internal Node(43),04.04.2003 16:30:58,459368,-7.32602e+06,2733.4,3.048e-07,364.966,10.0872,371.786,999.367,0.318,0.0538737,2.39161,0.0251492,350.903,14.5512,3.81603,8.88352,20.8835,-6.82018,14.0634, +Internal Node(43),06.06.2003 08:49:39,459368,-7.32602e+06,2733.4,3.048e-07,364.984,10.0855,372.235,999.29,0.318,0.0528755,2.39161,0.0276047,350.738,14.4803,3.88822,9.51006,21.4966,-7.25128,14.2453, +Internal Node(43),09.10.2003 17:27:02,459368,-7.32602e+06,2733.39,3.048e-07,364.737,10.0855,372.754,999.372,0.318,0.0519264,2.39161,0.027758,350.193,14.4382,3.95847,9.65679,22.5612,-8.01765,14.5436, +Internal Node(43),16.06.2004 10:41:46,459368,-7.32602e+06,2733.39,3.048e-07,365.505,10.0841,373.715,999.305,0.318,0.050133,2.39161,0.0272125,350.075,14.3221,4.10076,9.78444,23.6404,-8.21058,15.4298, +Internal Node(43),19.10.2004 19:19:08,459368,-7.32602e+06,2733.37,3.048e-07,365.586,10.0818,375.066,999.31,0.318,0.046849,2.39161,0.0271445,349.038,14.1312,4.38794,10.349,26.0279,-9.47946,16.5485, +Internal Node(43),27.06.2005 12:33:53,459368,-7.32602e+06,2733.37,3.048e-07,365.654,10.0794,375.758,999.313,0.318,0.0453115,2.39161,0.0269364,348.644,14.0258,4.53705,11.2514,27.1143,-10.1041,17.0102, +Internal Node(43),10.11.2006 23:03:22,459368,-7.32602e+06,2733.37,3.048e-07,365.475,10.0768,376.677,999.305,0.318,0.0424947,2.39161,0.0261974,347.58,13.8542,4.83897,11.7334,29.0969,-11.2016,17.8954, +Internal Node(43),01.12.2006,459368,-7.32602e+06,2733.36,3.048e-07,364.536,10.0754,378.409,999.525,0.318,0.0380478,2.39161,0.0274949,345.511,13.611,5.405,12.1581,32.8977,-13.8726,19.0251, +Internal Node(43),01.12.2006,459368,-7.32602e+06,2733.36,3.048e-07,364.536,10.0754,378.409,999.525,0.318,0.0380478,2.39161,0.0274949,345.511,13.611,5.405,12.1581,32.8977,-13.8726,19.0251, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Internal Node(44),09.12.1997 22:12:00,459355,-7.32599e+06,2732.71,0.0636547,385.829,10.1014,387.926,1000.25,0.318,0.320448,21.784,0.31746,334.065,24.5923,0.606161,44.2715,53.8614,-2.09707,51.7644, +Internal Node(44),05.02.1998 14:35:11,459355,-7.32599e+06,2732.86,3.048e-07,386.186,10.0707,392.274,1000.09,0.318,0.1741,2.39161,0.0696601,347.046,17.4247,1.1865,36.5739,45.2283,-6.08774,39.1406, +Internal Node(44),12.04.1998 23:29:05,459356,-7.32599e+06,2733.18,3.048e-07,386.657,10.0711,391.807,1000.2,0.318,0.0881912,2.39161,0.0617038,347.907,15.9621,1.47186,30.8083,43.9004,-5.1506,38.7498, +Internal Node(44),16.08.1998 08:06:27,459357,-7.326e+06,2732.71,3.048e-07,369.055,10.0611,393.023,999.891,0.318,0.0807162,2.39161,0.0391034,354.109,15.959,1.92096,28.6469,38.9137,-23.9684,14.9453, +Internal Node(44),18.10.1998 00:25:09,459357,-7.326e+06,2732.73,3.048e-07,358.314,10.1248,362.969,998.996,0.318,0.0878616,2.39161,0.0486085,327.693,15.6308,2.27431,12.6157,35.2763,-4.65524,30.6211, +Internal Node(44),19.12.1998 16:43:50,459358,-7.326e+06,2732.84,3.048e-07,358.944,10.0891,371.291,999.394,0.318,0.0772345,2.39161,0.0334487,344.907,14.851,2.59259,23.55,26.384,-12.3473,14.0366, +Internal Node(44),20.02.1999 09:02:31,459358,-7.326e+06,2732.94,0.00683951,355.848,10.1073,358.857,998.854,0.318,0.0741485,2.39161,0.0509085,331.61,15.1548,2.73606,13.0152,27.247,-3.0091,24.2379, +Internal Node(44),25.06.1999 17:39:53,459359,-7.326e+06,2732.77,3.048e-07,356.277,10.0902,366.148,999.279,0.318,0.0721947,2.39161,0.0269771,344.097,15.6476,2.79465,17.8804,22.0503,-9.87094,12.1794, +Internal Node(44),27.08.1999 09:58:34,459360,-7.326e+06,2732.84,3.048e-07,348.594,10.1158,352.786,998.522,0.318,0.0697323,2.39161,0.0514997,331.295,16.1359,2.93253,8.7165,21.4907,-4.19215,17.2986, +Internal Node(44),30.12.1999 18:35:56,459359,-7.326e+06,2732.81,3.048e-07,345.65,10.1015,357.032,998.79,0.318,0.0666587,2.39161,0.0176995,340.504,15.5754,3.07771,12.7315,16.5279,-11.3822,5.14566, +Internal Node(44),06.09.2000 11:50:41,459360,-7.326e+06,2732.94,0.0929224,352.253,10.1237,352.295,998.514,0.318,0.0648378,67.7653,0.0256385,336.639,15.7106,3.1549,6.81362,15.6556,-0.041595,15.614, +Internal Node(44),09.01.2001 20:28:03,459362,-7.32601e+06,2732.34,3.048e-07,356.551,10.1053,361.959,999.042,0.318,0.0661662,2.39161,0.0158672,349.331,16.0937,3.09616,9.67703,12.628,-5.4081,7.21992, +Internal Node(44),13.03.2001 12:46:44,459362,-7.32601e+06,2732.37,3.048e-07,356.175,10.1084,360.527,998.872,0.318,0.0644904,2.39161,0.0227132,344.744,15.9974,3.18205,6.88512,15.7829,-4.35198,11.4309, +Internal Node(44),15.05.2001 05:05:26,459363,-7.32601e+06,2732.5,3.048e-07,357.372,10.1004,363.073,999.013,0.318,0.0637881,2.39161,0.015717,348.854,15.6649,3.21838,7.69796,14.2194,-5.70181,8.51764, +Internal Node(44),17.09.2001 13:42:48,459363,-7.32601e+06,2732.5,3.048e-07,359.113,10.099,363.422,999.003,0.318,0.062594,2.39161,0.0194102,348.343,15.5292,3.28231,6.59926,15.0789,-4.30902,10.7699, +Internal Node(44),20.01.2002 22:20:10,459363,-7.32601e+06,2732.56,3.048e-07,360.873,10.0904,365.391,999.088,0.318,0.0602584,2.39161,0.0165301,350.07,15.1588,3.4137,7.90827,15.3208,-4.51792,10.8029, +Internal Node(44),26.05.2002 06:57:32,459364,-7.32601e+06,2732.58,3.048e-07,362.365,10.0868,367.796,999.156,0.318,0.0580136,2.39161,0.0156405,350.991,14.8305,3.55094,8.32931,16.8048,-5.43033,11.3745, +Internal Node(44),28.09.2002 15:34:55,459363,-7.32601e+06,2732.54,3.048e-07,363.346,10.0892,369.429,999.205,0.318,0.0559956,2.39161,0.0199871,350.539,14.645,3.68483,8.52205,18.8906,-6.08304,12.8076, +Internal Node(44),30.11.2002 07:53:36,459363,-7.32601e+06,2732.56,3.048e-07,363.867,10.0872,371.16,999.231,0.318,0.0541537,2.39161,0.0299666,351.187,14.4361,3.81436,8.91317,19.9725,-7.29267,12.6798, +Internal Node(44),01.02.2003 00:12:17,459363,-7.32601e+06,2732.51,3.048e-07,363.143,10.0877,371.889,999.299,0.318,0.053163,2.39161,0.0128571,350.553,14.347,3.89021,9.14587,21.336,-8.74608,12.5899, +Internal Node(44),04.04.2003 16:30:58,459363,-7.32601e+06,2732.5,3.048e-07,364.89,10.0872,372.802,999.364,0.318,0.0523028,2.39161,0.0453104,351.12,14.253,3.95751,9.04205,21.6818,-7.91134,13.7704, +Internal Node(44),06.06.2003 08:49:39,459363,-7.32601e+06,2732.49,3.048e-07,364.91,10.0855,373.246,999.286,0.318,0.0514801,2.39161,0.0480809,350.972,14.1727,4.02343,9.73836,22.2738,-8.33608,13.9377, +Internal Node(44),09.10.2003 17:27:02,459363,-7.32601e+06,2732.49,3.048e-07,364.663,10.0855,373.749,999.368,0.318,0.0507008,2.39161,0.0470837,350.423,14.1225,4.08816,9.95616,23.3264,-9.08591,14.2405, +Internal Node(44),16.06.2004 10:41:46,459363,-7.32601e+06,2732.49,3.048e-07,365.432,10.0841,374.695,999.301,0.318,0.0491971,2.39161,0.0462963,350.318,14.0098,4.21804,10.1866,24.3774,-9.26382,15.1136, +Internal Node(44),19.10.2004 19:19:08,459363,-7.32601e+06,2732.48,3.048e-07,365.514,10.0818,376.002,999.307,0.318,0.0463939,2.39161,0.0457307,349.279,13.8274,4.48305,10.9521,26.7226,-10.4878,16.2348, +Internal Node(44),27.06.2005 12:33:53,459363,-7.32601e+06,2732.48,3.048e-07,365.581,10.0794,376.698,999.31,0.318,0.0450499,2.39161,0.0455422,348.905,13.7268,4.62156,11.9936,27.7924,-11.1162,16.6763, +Internal Node(44),10.11.2006 23:03:22,459363,-7.32601e+06,2732.48,3.048e-07,365.402,10.0768,377.587,999.301,0.318,0.0425515,2.39161,0.0437772,347.849,13.5717,4.90171,12.6601,29.7377,-12.1847,17.553, +Internal Node(44),01.12.2006,459363,-7.32601e+06,2732.47,3.048e-07,364.463,10.0754,379.235,999.521,0.318,0.0385036,2.39161,0.0467972,345.756,13.3813,5.43358,13.4155,33.4791,-14.7713,18.7078, +Internal Node(44),01.12.2006,459363,-7.32601e+06,2732.47,3.048e-07,364.463,10.0754,379.235,999.521,0.318,0.0385036,2.39161,0.0467972,345.756,13.3813,5.43358,13.4155,33.4791,-14.7713,18.7078, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Internal Node(45),09.12.1997 22:12:00,459353,-7.32599e+06,2731.7,0.0355888,385.699,10.1014,391.346,1000.25,0.318,0.30617,3.80702,0.572507,336.411,26.0969,0.640422,39.2173,54.9341,-5.64633,49.2878, +Internal Node(45),05.02.1998 14:35:11,459353,-7.32599e+06,2731.8,3.048e-07,386.085,10.0707,394.408,1000.09,0.318,0.176165,2.39161,0.292128,347.85,18.1557,1.1841,32.8083,46.5581,-8.32347,38.2347, +Internal Node(45),12.04.1998 23:29:05,459354,-7.32599e+06,2732.1,3.048e-07,386.546,10.0711,393.457,1000.2,0.318,0.139756,2.39161,0.214896,348.615,16.1862,1.49305,28.0578,44.8421,-6.91071,37.9313, +Internal Node(45),16.08.1998 08:06:27,459354,-7.32599e+06,2731.65,3.048e-07,368.961,10.0611,393.905,999.891,0.318,0.111244,2.39161,0.15838,354.777,15.4173,1.88851,26.8921,39.1279,-24.944,14.1839, +Internal Node(45),18.10.1998 00:25:09,459354,-7.32599e+06,2731.68,3.048e-07,358.214,10.1248,363.436,998.991,0.318,0.0969292,2.39161,0.158515,328.162,14.4533,2.21767,12.205,35.274,-5.22155,30.0524, +Internal Node(45),19.12.1998 16:43:50,459355,-7.32599e+06,2731.73,3.048e-07,358.843,10.0891,372.035,999.394,0.318,0.0864607,2.39161,0.126015,345.997,13.7226,2.51772,23.1199,26.0378,-13.1913,12.8466, +Internal Node(45),20.02.1999 09:02:31,459355,-7.32599e+06,2731.77,0.000445007,355.736,10.1073,359.535,998.849,0.318,0.0821052,2.39161,0.214767,332.13,13.9466,2.66727,12.9181,27.4048,-3.79895,23.6059, +Internal Node(45),25.06.1999 17:39:53,459355,-7.32599e+06,2731.88,3.048e-07,356.195,10.0902,365.832,999.279,0.318,0.076044,2.39161,0.0961014,345.075,13.7748,2.88155,18.7646,20.7569,-9.63666,11.1203, +Internal Node(45),27.08.1999 09:58:34,459355,-7.32599e+06,2731.89,3.048e-07,348.513,10.1158,352.253,998.518,0.318,0.0720713,2.39161,0.204503,331.578,14.1303,3.0612,9.55327,20.6757,-3.74094,16.9348, +Internal Node(45),30.12.1999 18:35:56,459356,-7.32599e+06,2731.83,3.048e-07,345.559,10.1015,357.189,998.785,0.318,0.0704872,2.39161,0.068173,341.072,14.2258,3.1133,13.3598,16.1166,-11.63,4.48664, +Internal Node(45),06.09.2000 11:50:41,459356,-7.32599e+06,2731.81,0.0870991,352.142,10.1237,352.729,998.509,0.318,0.0682913,55.8068,0.0866362,336.898,14.6238,3.22074,7.11932,15.8311,-0.587884,15.2432, +Internal Node(45),09.01.2001 20:28:03,459357,-7.326e+06,2731.74,3.048e-07,356.497,10.1053,361.357,999.039,0.318,0.062356,2.39161,0.0480041,349.657,14.3721,3.53977,10.8447,11.6999,-4.8599,6.83996, +Internal Node(45),13.03.2001 12:46:44,459357,-7.326e+06,2731.76,3.048e-07,356.122,10.1084,360.351,998.869,0.318,0.0609239,2.39161,0.0605782,344.976,14.4516,3.6195,7.7265,15.3753,-4.2286,11.1467, +Internal Node(45),15.05.2001 05:05:26,459357,-7.326e+06,2731.81,3.048e-07,357.309,10.1004,363.211,999.01,0.318,0.0599052,2.39161,0.0425533,349.117,14.3518,3.64702,8.37514,14.0938,-5.90166,8.19214, +Internal Node(45),17.09.2001 13:42:48,459357,-7.326e+06,2731.81,3.048e-07,359.051,10.099,363.605,999,0.318,0.0589796,2.39161,0.0511628,348.517,14.2157,3.71027,7.2581,15.0878,-4.55347,10.5343, +Internal Node(45),20.01.2002 22:20:10,459358,-7.326e+06,2731.84,3.048e-07,360.806,10.0904,366.023,999.085,0.318,0.0570106,2.39161,0.041833,350.338,13.9485,3.83276,8.59179,15.6849,-5.21617,10.4687, +Internal Node(45),26.05.2002 06:57:32,459358,-7.326e+06,2731.83,3.048e-07,362.297,10.0868,368.453,999.153,0.318,0.0552813,2.39161,0.0378767,351.291,13.5807,3.97153,9.11302,17.1617,-6.15637,11.0054, +Internal Node(45),28.09.2002 15:34:55,459357,-7.326e+06,2731.8,3.048e-07,363.28,10.0892,370.047,999.202,0.318,0.0539649,2.39161,0.0478211,350.8,13.4213,4.09257,9.40555,19.2475,-6.76714,12.4803, +Internal Node(45),30.11.2002 07:53:36,459358,-7.326e+06,2731.8,3.048e-07,363.806,10.0872,371.783,999.228,0.318,0.052424,2.39161,0.0640013,351.472,13.2335,4.22251,9.85888,20.311,-7.9764,12.3346, +Internal Node(45),01.02.2003 00:12:17,459357,-7.326e+06,2731.75,3.048e-07,363.071,10.0877,372.507,999.296,0.318,0.0520434,2.39161,0.0312129,350.822,13.1726,4.2837,10.1493,21.6844,-9.43554,12.2489, +Internal Node(45),04.04.2003 16:30:58,459357,-7.326e+06,2731.73,3.048e-07,364.841,10.0872,373.421,999.361,0.318,0.0514338,2.39161,0.0915638,351.41,13.092,4.3488,10.0381,22.0105,-8.58003,13.4305, +Internal Node(45),06.06.2003 08:49:39,459357,-7.326e+06,2731.72,3.048e-07,364.864,10.0855,373.86,999.284,0.318,0.0507429,2.39161,0.0953776,351.275,13.026,4.41602,10.8188,22.5852,-8.99673,13.5885, +Internal Node(45),09.10.2003 17:27:02,459357,-7.326e+06,2731.72,3.048e-07,364.615,10.0855,374.35,999.366,0.318,0.0501158,2.39161,0.0931535,350.717,12.9938,4.48081,11.0665,23.6332,-9.73514,13.898, +Internal Node(45),16.06.2004 10:41:46,459357,-7.326e+06,2731.72,3.048e-07,365.384,10.0841,375.278,999.299,0.318,0.0487901,2.39161,0.0955133,350.627,12.9077,4.61479,11.3591,24.651,-9.89446,14.7565, +Internal Node(45),19.10.2004 19:19:08,459357,-7.326e+06,2731.71,3.048e-07,365.465,10.0818,376.539,999.305,0.318,0.046341,2.39161,0.0956065,349.585,12.7811,4.88609,12.2136,26.9547,-11.0742,15.8806, +Internal Node(45),27.06.2005 12:33:53,459357,-7.326e+06,2731.71,3.048e-07,365.532,10.0794,377.23,999.307,0.318,0.0451329,2.39161,0.0957743,349.23,12.7049,5.029,13.388,27.9995,-11.6974,16.3021, +Internal Node(45),10.11.2006 23:03:22,459357,-7.326e+06,2731.71,3.048e-07,365.352,10.0768,378.078,999.299,0.318,0.0428399,2.39161,0.0926833,348.181,12.5939,5.31908,14.1728,29.8966,-12.7259,17.1707, +Internal Node(45),01.12.2006,459357,-7.326e+06,2731.7,3.048e-07,364.415,10.0754,379.626,999.518,0.318,0.0390858,2.39161,0.0936343,346.051,12.4896,5.87229,15.0964,33.5754,-15.2109,18.3645, +Internal Node(45),01.12.2006,459357,-7.326e+06,2731.7,3.048e-07,364.415,10.0754,379.626,999.518,0.318,0.0390858,2.39161,0.0936343,346.051,12.4896,5.87229,15.0964,33.5754,-15.2109,18.3645, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Internal Node(46),09.12.1997 22:12:00,459352,-7.32599e+06,2730.33,3.048e-07,386.455,10.1014,395.298,1000.28,0.318,0.32496,2.39161,0.974368,338.714,27.8774,0.612169,32.8175,56.584,-8.844,47.74, +Internal Node(46),05.02.1998 14:35:11,459352,-7.32599e+06,2730.33,3.048e-07,386.67,10.0707,396.775,1000.09,0.318,0.198165,2.39161,0.555568,348.594,18.7698,1.07158,28.0289,48.1813,-10.1058,38.0755, +Internal Node(46),12.04.1998 23:29:05,459352,-7.32599e+06,2730.33,3.048e-07,386.979,10.0711,395.981,1000.22,0.318,0.163601,2.39161,0.415108,349.198,16.5311,1.3056,23.8378,46.7833,-9.00255,37.7807, +Internal Node(46),16.08.1998 08:06:27,459352,-7.32599e+06,2730.33,3.048e-07,369.343,10.0611,394.523,999.891,0.318,0.124284,2.39161,0.332907,355.418,14.289,1.73611,25.1715,39.1046,-25.1801,13.9245, +Internal Node(46),18.10.1998 00:25:09,459352,-7.32599e+06,2730.33,3.048e-07,358.579,10.1248,363.425,999.009,0.318,0.110507,2.39161,0.307383,328.759,12.3335,2.05028,11.9764,34.6664,-4.84565,29.8207, +Internal Node(46),19.12.1998 16:43:50,459352,-7.32599e+06,2730.33,3.048e-07,359.141,10.0891,372.094,999.394,0.318,0.0993564,2.39161,0.259764,347.501,11.325,2.36544,23.5812,24.5928,-12.9532,11.6397, +Internal Node(46),20.02.1999 09:02:31,459352,-7.32599e+06,2730.33,3.048e-07,356.325,10.1073,359.521,998.874,0.318,0.0950846,2.39161,0.372393,332.838,11.5644,2.51549,13.3903,26.6823,-3.19558,23.4867, +Internal Node(46),25.06.1999 17:39:53,459352,-7.32599e+06,2730.33,3.048e-07,356.39,10.0902,365.887,999.279,0.318,0.0889719,2.39161,0.215997,346.369,11.2059,2.75044,19.8657,19.5176,-9.49718,10.0204, +Internal Node(46),27.08.1999 09:58:34,459352,-7.32599e+06,2730.33,3.048e-07,349.09,10.1158,352.253,998.546,0.318,0.0847099,2.39161,0.347293,331.936,11.7989,2.94382,10.4702,20.3165,-3.16265,17.1539, +Internal Node(46),30.12.1999 18:35:56,459352,-7.32599e+06,2730.33,3.048e-07,345.67,10.1015,356.775,998.804,0.318,0.0814439,2.39161,0.160471,342.011,11.4457,3.10309,14.9443,14.7632,-11.1045,3.65871, +Internal Node(46),06.09.2000 11:50:41,459352,-7.32599e+06,2730.33,0.0604125,352.027,10.1237,352.119,998.528,0.318,0.0781085,18.622,0.190466,337.392,11.7734,3.28846,8.30432,14.7275,-0.0923569,14.6351, +Internal Node(46),09.01.2001 20:28:03,459352,-7.32599e+06,2729.64,3.048e-07,356.497,10.1053,367.411,999.036,0.318,0.0717001,2.39161,0.104158,348.071,13.6636,1.80659,12.8185,19.3405,-10.914,8.42654, +Internal Node(46),13.03.2001 12:46:44,459352,-7.32599e+06,2729.73,3.048e-07,356.179,10.1084,368.124,998.872,0.318,0.0844278,2.39161,0.115285,345.273,13.3465,1.91726,8.89651,22.8507,-11.9454,10.9054, +Internal Node(46),15.05.2001 05:05:26,459352,-7.32599e+06,2729.73,3.048e-07,357.288,10.1004,371.336,999.012,0.318,0.0816787,2.39161,0.0921509,349.79,12.775,1.9962,9.45016,21.5461,-14.0483,7.49781, +Internal Node(46),17.09.2001 13:42:48,459352,-7.32599e+06,2729.73,3.048e-07,359.066,10.099,372.078,999,0.318,0.0794372,2.39161,0.102008,348.978,12.6855,2.06471,8.33315,23.1,-13.0116,10.0883, +Internal Node(46),20.01.2002 22:20:10,459352,-7.32599e+06,2729.73,3.048e-07,360.78,10.0904,374.349,999.083,0.318,0.0749642,2.39161,0.0865737,350.965,12.373,2.21374,9.60385,23.384,-13.5695,9.81444, +Internal Node(46),26.05.2002 06:57:32,459352,-7.32599e+06,2729.73,3.048e-07,362.253,10.0868,376.775,999.151,0.318,0.0711518,2.39161,0.0787439,351.866,12.2596,2.35502,10.1379,24.909,-14.5218,10.3872, +Internal Node(46),28.09.2002 15:34:55,459352,-7.32599e+06,2729.73,3.048e-07,363.283,10.0892,378.44,999.202,0.318,0.0681374,2.39161,0.0909452,351.202,12.3699,2.4782,10.4985,27.2379,-15.1571,12.0808, +Internal Node(46),30.11.2002 07:53:36,459352,-7.32599e+06,2729.73,3.048e-07,363.883,10.0872,380.195,999.231,0.318,0.0651955,2.39161,0.104507,351.939,12.2604,2.60925,10.7675,28.2562,-16.3119,11.9443, +Internal Node(46),01.02.2003 00:12:17,459352,-7.32599e+06,2729.73,3.048e-07,363.006,10.0877,381.012,999.309,0.318,0.0639316,2.39161,0.0681655,351.191,12.3187,2.66931,11.0756,29.8214,-18.006,11.8153, +Internal Node(46),04.04.2003 16:30:58,459352,-7.32599e+06,2729.73,3.048e-07,365.052,10.0872,381.891,999.374,0.318,0.0626418,2.39161,0.131454,351.839,12.262,2.73306,11.0255,30.0518,-16.839,13.2128, +Internal Node(46),06.06.2003 08:49:39,459352,-7.32599e+06,2729.73,3.048e-07,365.093,10.0855,382.328,999.295,0.318,0.061404,2.39161,0.133583,351.707,12.2265,2.79677,11.5577,30.6208,-17.2349,13.3859, +Internal Node(46),09.10.2003 17:27:02,459352,-7.32599e+06,2729.73,3.048e-07,364.834,10.0855,382.91,999.378,0.318,0.060267,2.39161,0.131928,351.105,12.2483,2.85763,11.744,31.8053,-18.076,13.7294, +Internal Node(46),16.06.2004 10:41:46,459352,-7.32599e+06,2729.73,3.048e-07,365.612,10.0841,383.856,999.31,0.318,0.0580462,2.39161,0.134795,351.051,12.1854,2.98337,12.0169,32.8045,-18.2431,14.5614, +Internal Node(46),19.10.2004 19:19:08,459352,-7.32599e+06,2729.73,3.048e-07,365.695,10.0818,385.183,999.315,0.318,0.0540891,2.39161,0.1354,349.995,12.1141,3.23314,12.672,35.1887,-19.4887,15.7, +Internal Node(46),27.06.2005 12:33:53,459352,-7.32599e+06,2729.73,3.048e-07,365.763,10.0794,385.921,999.318,0.318,0.0522431,2.39161,0.135968,349.682,12.0387,3.36273,13.8067,36.2392,-20.1587,16.0805, +Internal Node(46),10.11.2006 23:03:22,459352,-7.32599e+06,2729.73,3.048e-07,365.568,10.0768,386.806,999.309,0.318,0.0488731,2.39161,0.131677,348.645,11.9498,3.62471,14.5159,38.1608,-21.2378,16.923, +Internal Node(46),01.12.2006,459352,-7.32599e+06,2729.73,3.048e-07,364.638,10.0754,388.476,999.53,0.318,0.0435446,2.39161,0.132459,346.43,11.9241,4.12219,15.3962,42.0466,-23.8377,18.2088, +Internal Node(46),01.12.2006,459352,-7.32599e+06,2729.73,3.048e-07,364.638,10.0754,388.476,999.53,0.318,0.0435446,2.39161,0.132459,346.43,11.9241,4.12219,15.3962,42.0466,-23.8377,18.2088, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Internal Node(47),09.12.1997 22:12:00,459350,-7.32598e+06,2731.46,0.0397318,385.734,10.1014,390.564,1000.25,0.318,0.30043,5.29736,0.593801,337.065,25.4497,0.653702,38.3667,53.4992,-4.82933,48.6699, +Internal Node(47),05.02.1998 14:35:11,459349,-7.32598e+06,2731.89,3.048e-07,386.135,10.0707,392.486,1000.09,0.318,0.163565,2.39161,0.209942,347.98,17.5387,1.2698,34.0934,44.506,-6.3511,38.1549, +Internal Node(47),12.04.1998 23:29:05,459349,-7.32598e+06,2731.99,3.048e-07,386.568,10.0711,392.514,1000.2,0.318,0.131912,2.39161,0.16794,349.815,16.0577,1.57636,27.8629,42.6994,-5.94673,36.7527, +Internal Node(47),16.08.1998 08:06:27,459348,-7.32598e+06,2731.12,3.048e-07,368.931,10.0611,393.571,999.891,0.318,0.112601,2.39161,0.133657,355.376,15.9533,1.86059,25.767,38.1958,-24.6409,13.5549, +Internal Node(47),18.10.1998 00:25:09,459348,-7.32598e+06,2731.15,3.048e-07,358.178,10.1248,363.774,998.99,0.318,0.0993271,2.39161,0.130582,328.575,15.0293,2.14633,11.2665,35.1993,-5.59617,29.6032, +Internal Node(47),19.12.1998 16:43:50,459347,-7.32598e+06,2731.07,3.048e-07,358.79,10.0891,372.325,999.394,0.318,0.0899086,2.39161,0.10919,346.696,14.4247,2.38415,21.0973,25.629,-13.5355,12.0935, +Internal Node(47),20.02.1999 09:02:31,459347,-7.32598e+06,2731.09,3.048e-07,355.686,10.1073,359.992,998.846,0.318,0.0856579,2.39161,0.191843,332.41,14.5527,2.50966,11.6911,27.582,-4.30602,23.276, +Internal Node(47),25.06.1999 17:39:53,459346,-7.32597e+06,2731.05,3.048e-07,356.121,10.0902,366.129,999.279,0.318,0.0803582,2.39161,0.0869601,345.491,14.2203,2.67444,16.9381,20.6377,-10.0077,10.6299, +Internal Node(47),27.08.1999 09:58:34,459346,-7.32597e+06,2730.95,3.048e-07,348.439,10.1158,352.849,998.515,0.318,0.0772836,2.39161,0.184172,331.427,14.5329,2.78118,8.54957,21.4221,-4.41001,17.012, +Internal Node(47),30.12.1999 18:35:56,459345,-7.32597e+06,2730.88,3.048e-07,345.471,10.1015,357.524,998.782,0.318,0.0751274,2.39161,0.0632689,341.139,14.5501,2.82065,11.753,16.3849,-12.0532,4.33175, +Internal Node(47),06.09.2000 11:50:41,459344,-7.32597e+06,2730.58,0.0663508,352.021,10.1237,353.536,998.504,0.318,0.0752607,24.6708,0.0497262,336.756,15.1049,2.78185,6.06241,16.7808,-1.51495,15.2658, +Internal Node(47),09.01.2001 20:28:03,459345,-7.32597e+06,2730.34,3.048e-07,356.356,10.1053,359.928,999.033,0.318,0.0689938,2.39161,0.0482896,349.881,12.2479,3.23736,12.1141,10.0467,-3.57242,6.4743, +Internal Node(47),13.03.2001 12:46:44,459344,-7.32597e+06,2730.33,3.048e-07,355.975,10.1084,359.991,998.862,0.318,0.0673025,2.39161,0.0617858,345.693,11.6107,3.33952,8.5935,14.2984,-4.01655,10.2818, +Internal Node(47),15.05.2001 05:05:26,459344,-7.32597e+06,2730.32,3.048e-07,357.16,10.1004,363.443,999.003,0.318,0.0660817,2.39161,0.0426921,349.988,11.2337,3.40656,9.41581,13.4549,-6.28373,7.17116, +Internal Node(47),17.09.2001 13:42:48,459344,-7.32597e+06,2730.32,3.048e-07,358.9,10.099,364.068,998.993,0.318,0.0650327,2.39161,0.0520278,349.2,11.1749,3.50143,8.19273,14.8681,-5.16796,9.70018, +Internal Node(47),20.01.2002 22:20:10,459344,-7.32597e+06,2730.32,3.048e-07,360.654,10.0904,366.483,999.077,0.318,0.0627615,2.39161,0.0422432,351.165,11.0223,3.69613,9.7117,15.3182,-5.8292,9.48898, +Internal Node(47),26.05.2002 06:57:32,459344,-7.32597e+06,2730.32,3.048e-07,362.145,10.0868,368.739,999.146,0.318,0.060711,2.39161,0.0381179,352.068,11.0359,3.88311,10.2008,16.6712,-6.59422,10.077, +Internal Node(47),28.09.2002 15:34:55,459344,-7.32597e+06,2730.31,3.048e-07,363.129,10.0892,370.099,999.195,0.318,0.0592206,2.39161,0.0481194,351.408,11.0833,4.04602,10.6352,18.6914,-6.96991,11.7215, +Internal Node(47),30.11.2002 07:53:36,459344,-7.32597e+06,2730.31,3.048e-07,363.653,10.0872,371.694,999.221,0.318,0.0574633,2.39161,0.0635366,352.078,11.0633,4.22021,11.0728,19.6157,-8.04079,11.5749, +Internal Node(47),01.02.2003 00:12:17,459344,-7.32597e+06,2730.3,3.048e-07,362.927,10.0877,372.28,999.29,0.318,0.0568461,2.39161,0.0312047,351.334,11.0973,4.30341,11.4455,20.9454,-9.35287,11.5925, +Internal Node(47),04.04.2003 16:30:58,459344,-7.32597e+06,2730.3,3.048e-07,364.691,10.0872,373.142,999.355,0.318,0.0560869,2.39161,0.0893866,351.953,11.0733,4.38934,11.2705,21.1895,-8.45156,12.738, +Internal Node(47),06.06.2003 08:49:39,459344,-7.32597e+06,2730.29,3.048e-07,364.713,10.0855,373.506,999.277,0.318,0.0552878,2.39161,0.093113,351.821,11.0661,4.47238,12.0798,21.6849,-8.79286,12.892, +Internal Node(47),09.10.2003 17:27:02,459344,-7.32597e+06,2730.29,3.048e-07,364.465,10.0855,373.915,999.36,0.318,0.0545785,2.39161,0.0905273,351.24,11.0857,4.55696,12.3244,22.6742,-9.44916,13.2251, +Internal Node(47),16.06.2004 10:41:46,459344,-7.32597e+06,2730.29,3.048e-07,365.234,10.0841,374.714,999.292,0.318,0.0530871,2.39161,0.0933065,351.163,11.0637,4.72671,12.5694,23.5509,-9.47998,14.0709, +Internal Node(47),19.10.2004 19:19:08,459344,-7.32597e+06,2730.29,3.048e-07,365.317,10.0818,375.689,999.298,0.318,0.050301,2.39161,0.0933173,350.097,11.0442,5.07016,13.3737,25.5925,-10.3721,15.2203, +Internal Node(47),27.06.2005 12:33:53,459344,-7.32597e+06,2730.29,3.048e-07,365.385,10.0794,376.235,999.301,0.318,0.0489387,2.39161,0.0937827,349.744,11.0212,5.24856,14.6237,26.4909,-10.8502,15.6407, +Internal Node(47),10.11.2006 23:03:22,459344,-7.32597e+06,2730.29,3.048e-07,365.204,10.0768,376.802,999.292,0.318,0.0463676,2.39161,0.0913192,348.691,10.9891,5.60282,15.3512,28.1111,-11.5979,16.5132, +Internal Node(47),01.12.2006,459344,-7.32597e+06,2730.28,3.048e-07,364.268,10.0754,377.904,999.513,0.318,0.0422176,2.39161,0.0923281,346.458,10.9853,6.2912,16.2241,31.4461,-13.6363,17.8098, +Internal Node(47),01.12.2006,459344,-7.32597e+06,2730.28,3.048e-07,364.268,10.0754,377.904,999.513,0.318,0.0422176,2.39161,0.0923281,346.458,10.9853,6.2912,16.2241,31.4461,-13.6363,17.8098, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Internal Node(48),09.12.1997 22:12:00,459349,-7.32598e+06,2732.11,0.0626132,385.772,10.1014,387.951,1000.25,0.318,0.337177,20.7322,0.22823,334.348,24.967,0.577012,41.6033,53.6034,-2.17891,51.4245, +Internal Node(48),05.02.1998 14:35:11,459347,-7.32597e+06,2732.49,3.048e-07,386.16,10.0707,390.036,1000.09,0.318,0.102994,2.39161,0.0716151,346.902,17.5277,1.21722,37.3037,43.1344,-3.87639,39.258, +Internal Node(48),12.04.1998 23:29:05,459346,-7.32597e+06,2732.37,3.048e-07,386.585,10.0711,391.485,1000.2,0.318,0.109965,2.39161,0.0577847,350.223,16.7866,1.50471,28.5334,41.2622,-4.89998,36.3623, +Internal Node(48),16.08.1998 08:06:27,459345,-7.32597e+06,2731.37,3.048e-07,368.924,10.0611,393.193,999.891,0.318,0.102769,2.39161,0.0417679,355.199,17.8164,1.77126,25.3032,37.9935,-24.2685,13.725, +Internal Node(48),18.10.1998 00:25:09,459344,-7.32597e+06,2731.34,3.048e-07,358.18,10.1248,364.767,998.99,0.318,0.101894,2.39161,0.0478272,328.481,17.5685,2.00979,10.1749,36.2863,-6.58751,29.6988, +Internal Node(48),19.12.1998 16:43:50,459343,-7.32597e+06,2731.31,3.048e-07,358.795,10.0891,372.276,999.394,0.318,0.0894644,2.39161,0.0368626,346.273,16.2391,2.2898,19.5685,26.0033,-13.481,12.5223, +Internal Node(48),20.02.1999 09:02:31,459342,-7.32596e+06,2731.17,3.048e-07,355.678,10.1073,360.323,998.846,0.318,0.0852522,2.39161,0.0503735,332.265,16.4353,2.40461,10.6895,28.0576,-4.64481,23.4128, +Internal Node(48),25.06.1999 17:39:53,459341,-7.32596e+06,2730.81,3.048e-07,356.084,10.0902,366.72,999.279,0.318,0.0820974,2.39161,0.0281927,345.068,16.2395,2.49819,15.2276,21.6525,-10.6358,11.0167, +Internal Node(48),27.08.1999 09:58:34,459340,-7.32596e+06,2730.74,3.048e-07,348.389,10.1158,353.711,998.512,0.318,0.0774772,2.39161,0.0480449,331.207,16.2229,2.64845,7.77693,22.5034,-5.32122,17.1822, +Internal Node(48),30.12.1999 18:35:56,459339,-7.32596e+06,2730.52,3.048e-07,345.425,10.1015,358.129,998.78,0.318,0.07453,2.39161,0.0201748,340.83,16.0119,2.75451,11.0673,17.2988,-12.7037,4.59506, +Internal Node(48),06.09.2000 11:50:41,459337,-7.32595e+06,2730.32,0.0658232,351.995,10.1237,354.031,998.502,0.318,0.0712164,24.087,0.0222712,336.681,16.2272,2.88373,5.89176,17.3495,-2.03569,15.3138, +Internal Node(48),09.01.2001 20:28:03,459337,-7.32595e+06,2730.21,3.048e-07,356.343,10.1053,360.8,999.032,0.318,0.0638405,2.39161,0.0158392,348.807,14.9048,3.23897,10.1034,11.9935,-4.45748,7.53599, +Internal Node(48),13.03.2001 12:46:44,459337,-7.32595e+06,2730.23,3.048e-07,355.966,10.1084,359.451,998.862,0.318,0.0619105,2.39161,0.0223885,344.439,14.5356,3.34904,7.10302,15.0125,-3.48512,11.5274, +Internal Node(48),15.05.2001 05:05:26,459336,-7.32595e+06,2730.15,3.048e-07,357.141,10.1004,361.855,999.002,0.318,0.0606093,2.39161,0.0168319,348.21,14.6218,3.39482,7.59799,13.6456,-4.71458,8.93098, +Internal Node(48),17.09.2001 13:42:48,459336,-7.32595e+06,2730.15,3.048e-07,358.882,10.099,362.099,998.992,0.318,0.0596255,2.39161,0.0210177,347.734,14.4157,3.45262,6.48297,14.3649,-3.21658,11.1483, +Internal Node(48),20.01.2002 22:20:10,459336,-7.32595e+06,2730.13,3.048e-07,360.634,10.0904,364.321,999.076,0.318,0.0576019,2.39161,0.0173789,349.628,14.0192,3.57094,7.57927,14.6932,-3.68748,11.0058, +Internal Node(48),26.05.2002 06:57:32,459335,-7.32595e+06,2730.12,3.048e-07,362.124,10.0868,366.553,999.145,0.318,0.0557894,2.39161,0.0162325,350.73,13.7442,3.68725,7.8043,15.8237,-4.42904,11.3947, +Internal Node(48),28.09.2002 15:34:55,459336,-7.32595e+06,2730.12,3.048e-07,363.109,10.0892,367.793,999.194,0.318,0.0542922,2.39161,0.0210912,350.245,13.5915,3.7952,7.95906,17.5476,-4.68368,12.8639, +Internal Node(48),30.11.2002 07:53:36,459336,-7.32595e+06,2730.12,3.048e-07,363.628,10.0872,369.148,999.22,0.318,0.0527097,2.39161,0.0303649,350.884,13.4294,3.91079,8.34233,18.2645,-5.52035,12.7441, +Internal Node(48),01.02.2003 00:12:17,459336,-7.32595e+06,2730.13,3.048e-07,362.909,10.0877,369.686,999.288,0.318,0.0520621,2.39161,0.0135803,350.243,13.3755,3.96594,8.52853,19.4434,-6.77704,12.6664, +Internal Node(48),04.04.2003 16:30:58,459336,-7.32595e+06,2730.13,3.048e-07,364.658,10.0872,370.444,999.353,0.318,0.0513715,2.39161,0.0458372,350.818,13.2945,4.02546,8.45097,19.6258,-5.78551,13.8403, +Internal Node(48),06.06.2003 08:49:39,459336,-7.32595e+06,2730.12,3.048e-07,364.678,10.0855,370.676,999.276,0.318,0.0506357,2.39161,0.0489486,350.683,13.2474,4.08194,9.13135,19.9925,-5.99801,13.9944, +Internal Node(48),09.10.2003 17:27:02,459336,-7.32595e+06,2730.13,3.048e-07,364.431,10.0855,371.002,999.358,0.318,0.0499942,2.39161,0.0471639,350.163,13.1986,4.14157,9.36192,20.8391,-6.57126,14.2679, +Internal Node(48),16.06.2004 10:41:46,459336,-7.32595e+06,2730.12,3.048e-07,365.201,10.0841,371.568,999.291,0.318,0.0486344,2.39161,0.0475777,350.051,13.1239,4.25835,9.60027,21.5177,-6.36746,15.1503, +Internal Node(48),19.10.2004 19:19:08,459336,-7.32595e+06,2730.12,3.048e-07,365.285,10.0818,372.15,999.296,0.318,0.0461151,2.39161,0.0478069,349.004,12.9817,4.50314,10.4546,23.1461,-6.86503,16.2811, +Internal Node(48),27.06.2005 12:33:53,459336,-7.32595e+06,2730.12,3.048e-07,365.353,10.0794,372.487,999.299,0.318,0.0448822,2.39161,0.0473365,348.628,12.903,4.632,11.5121,23.859,-7.13347,16.7255, +Internal Node(48),10.11.2006 23:03:22,459336,-7.32595e+06,2730.11,3.048e-07,365.175,10.0768,372.603,999.291,0.318,0.0425292,2.39161,0.0450513,347.549,12.8002,4.88731,12.2213,25.0547,-7.42866,17.626, +Internal Node(48),01.12.2006,459336,-7.32595e+06,2730.12,3.048e-07,364.235,10.0754,373.194,999.512,0.318,0.0387627,2.39161,0.0489117,345.361,12.6402,5.38947,13.2622,27.8331,-8.95913,18.874, +Internal Node(48),01.12.2006,459336,-7.32595e+06,2730.12,3.048e-07,364.235,10.0754,373.194,999.512,0.318,0.0387627,2.39161,0.0489117,345.361,12.6402,5.38947,13.2622,27.8331,-8.95913,18.874, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Internal Node(49),09.12.1997 22:12:00,459348,-7.32598e+06,2732.5,0.0793676,385.817,10.1014,385.953,1000.25,0.318,0.0376654,42.2256,0.121838,331.373,24.9873,0.44655,43.7117,54.5806,-0.136074,54.4445, +Internal Node(49),05.02.1998 14:35:11,459344,-7.32597e+06,2732.63,0.0171716,386.18,10.0707,388.605,1000.09,0.318,0.116408,2.39161,0.0308895,345.728,18.0991,1.06701,38.9921,42.8774,-2.42489,40.4525, +Internal Node(49),12.04.1998 23:29:05,459343,-7.32597e+06,2732.11,3.048e-07,386.558,10.0711,392.017,1000.2,0.318,0.123689,2.39161,0.0279678,350.543,18.3551,1.3273,27.3872,41.4739,-5.45893,36.015, +Internal Node(49),16.08.1998 08:06:27,459341,-7.32596e+06,2731.21,3.048e-07,368.91,10.0611,391.246,999.891,0.318,0.104735,2.39161,0.016943,354.284,18.3772,1.73235,25.994,36.9628,-22.3363,14.6265, +Internal Node(49),18.10.1998 00:25:09,459340,-7.32596e+06,2731.13,3.048e-07,358.159,10.1248,363.963,998.989,0.318,0.100711,2.39161,0.0249279,328.549,17.9888,2.03292,10.3161,35.4146,-5.80467,29.6099, +Internal Node(49),19.12.1998 16:43:50,459338,-7.32596e+06,2730.74,3.048e-07,358.739,10.0891,371.687,999.394,0.318,0.089587,2.39161,0.0154156,345.765,17.3138,2.26047,19.4075,25.9221,-12.9477,12.9744, +Internal Node(49),20.02.1999 09:02:31,459337,-7.32595e+06,2730.68,3.048e-07,355.627,10.1073,360.623,998.844,0.318,0.0855468,2.39161,0.0193359,332.337,17.5142,2.38858,10.4549,28.2857,-4.99593,23.2897, +Internal Node(49),25.06.1999 17:39:53,459335,-7.32595e+06,2730.16,3.048e-07,356.018,10.0902,366.897,999.279,0.318,0.08489,2.39161,0.0138867,344.806,17.5637,2.40277,14.844,22.0912,-10.8789,11.2123, +Internal Node(49),27.08.1999 09:58:34,459335,-7.32595e+06,2730.14,3.048e-07,348.321,10.1158,354.62,998.509,0.318,0.0803343,2.39161,0.0238963,331.123,17.4141,2.54376,7.58505,23.497,-6.2992,17.1978, +Internal Node(49),30.12.1999 18:35:56,459333,-7.32594e+06,2730.08,3.048e-07,345.382,10.1015,358.097,998.777,0.318,0.0781271,2.39161,0.00695193,340.561,16.684,2.59331,11.1353,17.536,-12.7158,4.82026, +Internal Node(49),06.09.2000 11:50:41,459330,-7.32594e+06,2730.09,0.0613408,351.972,10.1237,353.045,998.501,0.318,0.0754065,19.4937,0.0168747,336.764,15.9386,2.75303,6.27796,16.2802,-1.07242,15.2078, +Internal Node(49),09.01.2001 20:28:03,459329,-7.32594e+06,2729.64,3.048e-07,356.285,10.1053,360.392,999.03,0.318,0.068204,2.39161,0.00611062,348.222,15.4592,3.04109,10.2593,12.1702,-4.10695,8.06322, +Internal Node(49),13.03.2001 12:46:44,459330,-7.32594e+06,2729.64,3.048e-07,355.907,10.1084,358.779,998.859,0.318,0.0661241,2.39161,0.00765081,343.678,15.3004,3.14472,7.33462,15.1008,-2.87202,12.2288, +Internal Node(49),15.05.2001 05:05:26,459328,-7.32593e+06,2729.66,3.048e-07,357.092,10.1004,360.694,999,0.318,0.0629484,2.39161,0.0070441,347.407,14.8003,3.27983,8.55011,13.2869,-3.60217,9.68478, +Internal Node(49),17.09.2001 13:42:48,459328,-7.32593e+06,2729.66,3.048e-07,358.833,10.099,361.053,998.99,0.318,0.0616515,2.39161,0.007965,347.137,14.6779,3.34885,7.20465,13.916,-2.21997,11.696, +Internal Node(49),20.01.2002 22:20:10,459328,-7.32593e+06,2729.66,3.048e-07,360.587,10.0904,362.709,999.074,0.318,0.0589619,2.39161,0.00647381,348.977,14.2755,3.5022,8.38937,13.7317,-2.1219,11.6098, +Internal Node(49),26.05.2002 06:57:32,459327,-7.32593e+06,2729.66,3.048e-07,362.079,10.0868,364.659,999.143,0.318,0.0565803,2.39161,0.0063218,350.148,13.9793,3.65006,8.57567,14.511,-2.58012,11.9309, +Internal Node(49),28.09.2002 15:34:55,459328,-7.32593e+06,2729.68,3.048e-07,363.065,10.0892,365.496,999.192,0.318,0.0546052,2.39161,0.00782695,349.718,13.8694,3.78252,8.57874,15.7783,-2.43046,13.3478, +Internal Node(49),30.11.2002 07:53:36,459327,-7.32593e+06,2729.68,3.048e-07,363.585,10.0872,366.471,999.218,0.318,0.0526552,2.39161,0.0113271,350.33,13.6702,3.92314,8.93071,16.1406,-2.88547,13.2552, +Internal Node(49),01.02.2003 00:12:17,459328,-7.32593e+06,2729.71,3.048e-07,362.867,10.0877,366.797,999.286,0.318,0.0517572,2.39161,0.0059378,349.734,13.6651,3.99146,8.97827,17.0634,-3.92986,13.1335, +Internal Node(49),04.04.2003 16:30:58,459328,-7.32594e+06,2729.71,3.048e-07,364.62,10.0872,367.381,999.352,0.318,0.050914,2.39161,0.0161023,350.269,13.6027,4.05783,8.80736,17.1122,-2.76058,14.3516, +Internal Node(49),06.06.2003 08:49:39,459328,-7.32593e+06,2729.71,3.048e-07,364.642,10.0855,367.406,999.274,0.318,0.0500232,2.39161,0.0164207,350.113,13.5114,4.13028,9.49736,17.2925,-2.76381,14.5287, +Internal Node(49),09.10.2003 17:27:02,459328,-7.32594e+06,2729.72,3.048e-07,364.394,10.0855,367.54,999.356,0.318,0.0492494,2.39161,0.017139,349.619,13.4763,4.19553,9.60197,17.9208,-3.14593,14.7749, +Internal Node(49),16.06.2004 10:41:46,459328,-7.32593e+06,2729.72,3.048e-07,365.169,10.0841,367.746,999.289,0.318,0.0476979,2.39161,0.016177,349.486,13.3596,4.33234,9.75201,18.2592,-2.5762,15.683, +Internal Node(49),19.10.2004 19:19:08,459328,-7.32594e+06,2729.73,3.048e-07,365.256,10.0818,367.658,999.295,0.318,0.0448856,2.39161,0.0158792,348.427,13.1894,4.60454,10.3314,19.2313,-2.40259,16.8287, +Internal Node(49),27.06.2005 12:33:53,459328,-7.32594e+06,2729.73,0.0004898,365.325,10.0794,367.657,999.298,0.318,0.0435416,2.39161,0.0153085,348.018,13.099,4.74715,11.2296,19.6396,-2.33261,17.307, +Internal Node(49),10.11.2006 23:03:22,459328,-7.32593e+06,2729.73,0.00616808,365.148,10.0768,367.185,999.289,0.318,0.0409,2.39161,0.0142896,346.916,12.9213,5.05457,11.8121,20.2682,-2.03651,18.2317, +Internal Node(49),01.12.2006,459328,-7.32594e+06,2729.74,3.048e-07,364.21,10.0754,366.782,999.51,0.318,0.036926,2.39161,0.0134899,344.736,12.7583,5.59982,12.2547,22.0456,-2.57222,19.4733, +Internal Node(49),01.12.2006,459328,-7.32594e+06,2729.74,3.048e-07,364.21,10.0754,366.782,999.51,0.318,0.036926,2.39161,0.0134899,344.736,12.7583,5.59982,12.2547,22.0456,-2.57222,19.4733, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Internal Node(50),09.12.1997 22:12:00,459346,-7.32597e+06,2732.83,0.0768904,385.845,10.1014,383.751,1000.25,0.318,0.0606697,38.3939,0.148917,328.008,24.9903,0.271074,45.5391,55.743,2.09387,57.8368, +Internal Node(50),05.02.1998 14:35:11,459342,-7.32596e+06,2732.68,0.0310803,386.187,10.0707,386.323,1000.09,0.318,0.157047,2.53573,0.0259071,342.826,18.5055,0.78705,39.8608,43.4965,-0.135761,43.3607, +Internal Node(50),12.04.1998 23:29:05,459340,-7.32596e+06,2732.12,0.00149779,386.545,10.0711,389.667,1000.2,0.318,0.129384,2.39161,0.0356312,351.008,17.8535,1.26871,27.662,38.6587,-3.12182,35.5369, +Internal Node(50),16.08.1998 08:06:27,459337,-7.32596e+06,2730.96,3.048e-07,368.879,10.0611,388.895,999.891,0.318,0.0899449,2.39161,0.124754,353.143,18.7318,1.7101,26.9631,35.7527,-20.0163,15.7365, +Internal Node(50),18.10.1998 00:25:09,459336,-7.32595e+06,2730.93,3.048e-07,358.117,10.1248,362.835,998.987,0.318,0.0998625,2.39161,0.0330231,328.595,18.2559,2.0297,10.3528,34.2395,-4.71756,29.522, +Internal Node(50),19.12.1998 16:43:50,459334,-7.32595e+06,2730.44,3.048e-07,358.7,10.0891,370.216,999.394,0.318,0.0967841,2.39161,0.096449,344.886,17.7775,2.07534,20.1926,25.3298,-11.516,13.8138, +Internal Node(50),20.02.1999 09:02:31,459332,-7.32594e+06,2730.46,0.00175325,355.584,10.1073,359.556,998.842,0.318,0.0939386,2.39161,0.0400496,332.428,17.6442,2.14441,10.5781,27.1286,-3.97195,23.1566, +Internal Node(50),25.06.1999 17:39:53,459329,-7.32594e+06,2729.96,3.048e-07,355.982,10.0902,364.153,999.279,0.318,0.0935048,2.39161,0.0249339,344.326,17.0156,2.17318,16.158,19.8271,-8.17084,11.6563, +Internal Node(50),27.08.1999 09:58:34,459329,-7.32594e+06,2729.97,3.048e-07,348.261,10.1158,352.915,998.506,0.318,0.0870853,2.39161,0.0479094,331.134,16.8321,2.37876,8.22857,21.7802,-4.6532,17.127, +Internal Node(50),30.12.1999 18:35:56,459326,-7.32593e+06,2730.09,3.048e-07,345.383,10.1015,355.662,998.777,0.318,0.0848639,2.39161,0.0421377,340.116,15.1982,2.42765,13.1054,15.5469,-10.2798,5.2671, +Internal Node(50),06.09.2000 11:50:41,459323,-7.32592e+06,2730.12,0.0402626,351.971,10.1237,352.751,998.502,0.318,0.0776629,5.51255,0.0328583,336.935,14.1696,2.39548,7.25067,15.8166,-0.780313,15.0363, +Internal Node(50),09.01.2001 20:28:03,459322,-7.32592e+06,2729.7,3.048e-07,356.286,10.1053,359.267,999.03,0.318,0.0634206,2.39161,0.00387433,347.664,13.8795,2.92171,12.6111,11.6031,-2.98118,8.62187, +Internal Node(50),13.03.2001 12:46:44,459322,-7.32592e+06,2729.7,0.00539099,355.909,10.1084,357.658,998.859,0.318,0.0654986,2.39161,0.00840996,342.979,13.8689,3.07567,9.27526,14.6796,-1.74905,12.9305, +Internal Node(50),15.05.2001 05:05:26,459321,-7.32592e+06,2729.68,3.048e-07,357.091,10.1004,360.111,999,0.318,0.0644083,2.39161,0.012581,346.573,13.4187,3.12686,10.7366,13.5383,-3.02008,10.5182, +Internal Node(50),17.09.2001 13:42:48,459320,-7.32592e+06,2729.66,0.0150487,358.834,10.099,360.626,998.99,0.318,0.0628909,2.39161,0.00559062,346.438,13.194,3.18047,9.22071,14.1889,-1.7921,12.3968, +Internal Node(50),20.01.2002 22:20:10,459320,-7.32592e+06,2729.73,0.0237531,360.597,10.0904,361.874,999.075,0.318,0.0585739,2.39161,0.00457924,348.185,12.851,3.41588,10.7564,13.6887,-1.27683,12.4119, +Internal Node(50),26.05.2002 06:57:32,459319,-7.32592e+06,2729.76,0.02057,362.091,10.0868,363.371,999.143,0.318,0.0551201,2.39161,0.00447942,349.437,12.6446,3.62044,10.9176,13.9336,-1.28045,12.6531, +Internal Node(50),28.09.2002 15:34:55,459320,-7.32592e+06,2729.75,0.0295111,363.077,10.0892,363.885,999.193,0.318,0.052482,2.39161,0.00642828,349.074,12.6081,3.79817,10.8216,14.8115,-0.808774,14.0027, +Internal Node(50),30.11.2002 07:53:36,459320,-7.32592e+06,2729.76,0.0263236,363.599,10.0872,364.492,999.218,0.318,0.0500236,2.39161,0.0094923,349.65,12.4669,3.98205,11.2703,14.8419,-0.89277,13.9491, +Internal Node(50),01.02.2003 00:12:17,459320,-7.32592e+06,2729.76,0.00401428,362.871,10.0877,364.586,999.287,0.318,0.0488179,2.39161,0.00470294,349.125,12.5105,4.07699,11.2125,15.4612,-1.7149,13.7463, +Internal Node(50),04.04.2003 16:30:58,459320,-7.32592e+06,2729.76,0.035247,364.636,10.0872,364.943,999.352,0.318,0.0477558,3.6984,0.0161585,349.632,12.4768,4.16606,11.012,15.3107,-0.30697,15.0037, +Internal Node(50),06.06.2003 08:49:39,459320,-7.32592e+06,2729.76,0.0393743,364.66,10.0855,364.82,999.275,0.318,0.0467515,5.15565,0.0189103,349.437,12.401,4.25398,11.8833,15.383,-0.160018,15.223, +Internal Node(50),09.10.2003 17:27:02,459320,-7.32592e+06,2729.76,0.0330116,364.41,10.0855,364.745,999.357,0.318,0.0457831,3.03842,0.0172704,348.985,12.3917,4.34224,11.9512,15.7598,-0.335234,15.4246, +Internal Node(50),16.06.2004 10:41:46,459320,-7.32592e+06,2729.76,0.0514409,365.185,10.0841,364.757,999.29,0.318,0.0440464,11.4967,0.0248843,348.821,12.3076,4.51396,12.1555,15.9363,0.427641,16.364, +Internal Node(50),19.10.2004 19:19:08,459320,-7.32592e+06,2729.76,0.0626569,365.269,10.0818,364.359,999.295,0.318,0.040888,20.7756,0.0278463,347.751,12.1948,4.86142,12.8359,16.6084,0.910411,17.5188, +Internal Node(50),27.06.2005 12:33:53,459320,-7.32592e+06,2729.76,0.0684121,365.337,10.0794,364.185,999.298,0.318,0.0394319,27.0424,0.027593,347.298,12.134,5.0414,13.9334,16.8868,1.15228,18.0391, +Internal Node(50),10.11.2006 23:03:22,459320,-7.32592e+06,2729.66,0.0796585,365.149,10.0768,363.646,999.289,0.318,0.0372419,42.6916,0.0258833,346.123,12.0721,5.33877,14.5504,17.5232,1.50335,19.0266, +Internal Node(50),01.12.2006,459320,-7.32592e+06,2729.67,0.0727713,364.211,10.0754,362.724,999.509,0.318,0.0329511,32.5481,0.025738,343.995,11.9716,6.02714,14.9559,18.7294,1.48681,20.2162, +Internal Node(50),01.12.2006,459320,-7.32592e+06,2729.67,0.0727713,364.211,10.0754,362.724,999.509,0.318,0.0329511,32.5481,0.025738,343.995,11.9716,6.02714,14.9559,18.7294,1.48681,20.2162, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Internal Node(51),09.12.1997 22:12:00,459344,-7.32597e+06,2733.65,0.0787097,385.889,10.1014,376.963,1000.25,0.318,0.234908,41.1843,0.481357,324.182,21.7757,0.0594392,48.6296,52.7813,8.9259,61.7072, +Internal Node(51),05.02.1998 14:35:11,459339,-7.32596e+06,2732.9,0.0460482,386.203,10.0707,382.453,1000.09,0.318,0.0614977,8.24678,0.0359008,339.609,17.8708,0.469475,41.4847,42.8444,3.74966,46.594, +Internal Node(51),12.04.1998 23:29:05,459338,-7.32595e+06,2732.37,0.0168057,386.539,10.0711,386.444,1000.2,0.318,0.0737399,2.39161,0.0353729,351.486,16.5771,1.24724,28.6892,34.9587,0.0945178,35.0532, +Internal Node(51),16.08.1998 08:06:27,459334,-7.32595e+06,2730.9,3.048e-07,368.787,10.0611,385.989,999.891,0.318,0.120887,2.39161,0.539336,350.689,19.5007,1.26774,28.4209,35.3004,-17.2028,18.0977, +Internal Node(51),18.10.1998 00:25:09,459332,-7.32594e+06,2731.65,0.0194635,358.145,10.1248,357.577,998.989,0.318,0.0940419,2.39161,0.0346688,328.421,15.8355,1.76022,9.30367,29.1561,0.568276,29.7244, +Internal Node(51),19.12.1998 16:43:50,459329,-7.32594e+06,2730.51,3.048e-07,358.615,10.0891,365.733,999.394,0.318,0.0980033,2.39161,0.389484,343.574,16.5683,1.82214,23.6116,22.1584,-7.11789,15.0405, +Internal Node(51),20.02.1999 09:02:31,459329,-7.32594e+06,2731.26,0.0299791,355.609,10.1073,354.016,998.843,0.318,0.0924466,2.39161,0.0796574,332.656,14.7358,2.19345,12.5779,21.3598,1.59327,22.9531, +Internal Node(51),25.06.1999 17:39:53,459323,-7.32592e+06,2730.32,3.048e-07,355.922,10.0902,359.516,999.279,0.318,0.0679009,2.39161,0.0945043,342.466,14.522,1.46125,20.8356,17.05,-3.59453,13.4555, +Internal Node(51),27.08.1999 09:58:34,459323,-7.32592e+06,2730.32,3.048e-07,348.095,10.1158,350.648,998.498,0.318,0.0987752,2.39161,0.141009,331.118,14.2577,1.91743,9.89236,19.5303,-2.55316,16.9771, +Internal Node(51),30.12.1999 18:35:56,459314,-7.3259e+06,2730.13,3.048e-07,345.256,10.1015,353.319,998.775,0.318,0.0696472,2.39161,0.122854,337.233,12.1209,1.39769,17.6407,16.0859,-8.06231,8.02356, +Internal Node(51),06.09.2000 11:50:41,459319,-7.32591e+06,2729.94,0.0281676,351.944,10.1237,353.522,998.498,0.318,0.0914284,2.39161,0.0323476,337.005,13.5443,2.03304,7.61928,16.5167,-1.57803,14.9387, +Internal Node(51),09.01.2001 20:28:03,459312,-7.3259e+06,2729.53,0.00256502,356.27,10.1053,357.293,999.029,0.318,0.0494354,2.39161,0.0031546,345.54,11.9694,2.42578,17.1453,11.7526,-1.02317,10.7295, +Internal Node(51),13.03.2001 12:46:44,459315,-7.32591e+06,2729.57,0.00810223,355.897,10.1084,357.848,998.859,0.318,0.0565366,2.39161,0.0061282,342.026,12.8188,2.68559,11.2854,15.8215,-1.95099,13.8705, +Internal Node(51),15.05.2001 05:05:26,459316,-7.32591e+06,2729.58,3.048e-07,357.072,10.1004,359.884,999,0.318,0.053209,2.39161,0.0200942,345.618,12.7614,2.85422,12.573,14.2665,-2.81267,11.4538, +Internal Node(51),17.09.2001 13:42:48,459312,-7.3259e+06,2731.32,0.0866209,359.001,10.099,355.807,998.998,0.318,0.0514942,54.8926,0.0176133,345.605,10.1671,3.13644,12.7105,10.2027,3.19311,13.3958, +Internal Node(51),20.01.2002 22:20:10,459311,-7.3259e+06,2730.9,0.101118,360.714,10.0904,356.569,999.08,0.318,0.0472787,87.3244,0.01217,346.981,10.1615,3.37813,14.7083,9.58823,4.14497,13.7332, +Internal Node(51),26.05.2002 06:57:32,459311,-7.3259e+06,2730.55,0.0870657,362.17,10.0868,358.576,999.147,0.318,0.0426822,55.7425,0.00818308,348.284,10.1594,3.59098,14.725,10.2915,3.59393,13.8854, +Internal Node(51),28.09.2002 15:34:55,459312,-7.3259e+06,2730.37,0.086278,363.139,10.0892,359.892,999.196,0.318,0.0402812,54.2433,0.0112306,348.08,10.4156,3.74403,14.2982,11.811,3.24708,15.0581, +Internal Node(51),30.11.2002 07:53:36,459312,-7.3259e+06,2730.19,0.0803672,363.644,10.0872,360.893,999.22,0.318,0.03865,43.8413,0.0140975,348.518,10.5637,3.88018,14.7377,12.3743,2.75125,15.1255, +Internal Node(51),01.02.2003 00:12:17,459313,-7.3259e+06,2730.14,0.050771,362.912,10.0877,361.765,999.288,0.318,0.0379356,11.0533,0.00619309,348.169,10.8438,3.93951,14.373,13.596,1.14672,14.7428, +Internal Node(51),04.04.2003 16:30:58,459313,-7.3259e+06,2730.13,0.0806229,364.676,10.0872,362.338,999.354,0.318,0.0367615,44.261,0.0157576,348.632,10.8779,4.02869,14.1658,13.7057,2.33779,16.0435, +Internal Node(51),06.06.2003 08:49:39,459312,-7.3259e+06,2730.05,0.0858362,364.691,10.0855,362.156,999.276,0.318,0.0360762,53.4142,0.0149744,348.338,10.8697,4.094,15.2108,13.8182,2.53475,16.353, +Internal Node(51),09.10.2003 17:27:02,459313,-7.3259e+06,2730.03,0.0769157,364.442,10.0855,362.468,999.358,0.318,0.0353487,38.4319,0.0183157,347.996,10.9703,4.17747,15.118,14.4721,1.97313,16.4453, +Internal Node(51),16.06.2004 10:41:46,459313,-7.3259e+06,2730,0.0965134,365.21,10.0841,362.429,999.291,0.318,0.0339624,75.9291,0.0119011,347.777,10.9492,4.34884,15.3724,14.6526,2.78086,17.4334, +Internal Node(51),19.10.2004 19:19:08,459313,-7.3259e+06,2729.98,0.110857,365.292,10.0818,361.986,999.296,0.318,0.0313754,115.062,0.00971939,346.703,10.9402,4.70825,16.1464,15.2825,3.30648,18.589, +Internal Node(51),27.06.2005 12:33:53,459313,-7.3259e+06,2729.96,0.118295,365.358,10.0794,361.769,999.299,0.318,0.0302066,139.814,0.00867118,346.205,10.9375,4.89084,17.4567,15.5637,3.58925,19.1529, +Internal Node(51),10.11.2006 23:03:22,459312,-7.3259e+06,2729.81,0.132295,365.164,10.0768,360.938,999.29,0.318,0.0285877,195.556,0.00689853,344.937,10.9271,5.17051,18.2266,16.0004,4.22588,20.2262, +Internal Node(51),01.12.2006,459313,-7.3259e+06,2729.79,0.126515,364.224,10.0754,360.427,999.51,0.318,0.0256716,171.029,0.00765689,342.929,11.0024,5.90546,18.5047,17.4979,3.79644,21.2943, +Internal Node(51),01.12.2006,459313,-7.3259e+06,2729.79,0.126515,364.224,10.0754,360.427,999.51,0.318,0.0256716,171.029,0.00765689,342.929,11.0024,5.90546,18.5047,17.4979,3.79644,21.2943, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Internal Node(52),09.12.1997 22:12:00,459344,-7.32597e+06,2735.89,0.105614,386.095,10.1014,373.689,1000.26,0.318,0.245466,99.4971,1.35436,323.696,19.2543,0.0563186,46.0765,49.9931,12.4061,62.3991, +Internal Node(52),05.02.1998 14:35:11,459338,-7.32595e+06,2735.34,0.111613,386.421,10.0707,373.911,1000.09,0.318,0.106197,117.433,0.330637,337.719,12.1198,0.266908,44.2048,36.192,12.51,48.702, +Internal Node(52),12.04.1998 23:29:05,459336,-7.32595e+06,2736.36,0.0857757,386.857,10.0711,378.866,1000.2,0.318,0.0918731,53.3015,0.328808,349.794,11.1758,1.00658,27.9449,29.0722,7.99094,37.0631, +Internal Node(52),16.08.1998 08:06:27,459332,-7.32594e+06,2736.66,3.048e-07,367.89,10.0611,373.777,999.891,0.318,0.0220866,2.39161,0.976643,348.969,10.6639,0.781409,38.6377,24.8081,-5.88657,18.9215, +Internal Node(52),18.10.1998 00:25:09,459330,-7.32594e+06,2736.45,0.0834645,358.585,10.1248,352.046,999.011,0.318,0.120219,49.1078,0.216301,328.972,10.158,1.5004,9.82355,23.0743,6.5394,29.6137, +Internal Node(52),19.12.1998 16:43:50,459326,-7.32593e+06,2736.61,3.048e-07,357.913,10.0891,358.473,999.394,0.318,0.169807,2.39161,0.706626,341.836,10.1877,1.18602,30.5658,16.6363,-0.559781,16.0765, +Internal Node(52),20.02.1999 09:02:31,459325,-7.32593e+06,2735.8,0.0745745,355.888,10.1073,350.51,998.856,0.318,0.080963,35.0281,0.860365,333.422,10.1183,1.39761,11.7822,17.089,5.37743,22.4664, +Internal Node(52),25.06.1999 17:39:53,459322,-7.32592e+06,2736.26,3.048e-07,356.193,10.0902,356.059,999.279,0.318,0.10738,2.39161,0.141202,342.889,10.0952,1.16702,25.8742,13.1694,0.134892,13.3043, +Internal Node(52),27.08.1999 09:58:34,459319,-7.32591e+06,2733.6,3.048e-07,347.786,10.1158,346.424,998.483,0.318,0.130625,2.39161,0.249732,331.329,10.1258,1.60626,11.8816,15.095,1.36145,16.4565, +Internal Node(52),30.12.1999 18:35:56,459315,-7.3259e+06,2734.72,3.048e-07,345.471,10.1015,351.774,998.794,0.318,0.0921644,2.39161,0.237006,337.81,10.1155,1.29785,18.8453,13.9637,-6.30232,7.66143, +Internal Node(52),06.09.2000 11:50:41,459312,-7.3259e+06,2733.63,0.0637938,352.244,10.1237,349.797,998.483,0.318,0.0830645,21.9272,0.0850146,338.068,10.1321,1.68416,7.96321,11.7286,2.44749,14.1761, +Internal Node(52),09.01.2001 20:28:03,459309,-7.32589e+06,2734.97,0.0780688,356.793,10.1053,352.769,999.054,0.318,0.0281134,40.1863,0.0281871,346.336,10.1085,2.62571,18.7988,6.43281,4.02423,10.457, +Internal Node(52),13.03.2001 12:46:44,459310,-7.32589e+06,2736.23,0.121581,356.543,10.1084,351.316,998.889,0.318,0.0401359,151.789,0.0851891,342.793,10.1198,2.8607,13.6862,8.5232,5.22648,13.7497, +Internal Node(52),15.05.2001 05:05:26,459307,-7.32588e+06,2736.79,0.108624,357.742,10.1004,352.405,999.033,0.318,0.043067,108.248,0.378386,345.456,10.093,3.02907,15.9587,6.94907,5.33686,12.2859, +Internal Node(52),17.09.2001 13:42:48,459307,-7.32588e+06,2737.34,0.16677,359.587,10.099,353.343,999.025,0.318,0.0439978,391.745,0.103069,346.349,10.0858,3.1841,13.0156,6.99427,6.24341,13.2377, +Internal Node(52),20.01.2002 22:20:10,459306,-7.32588e+06,2737.74,0.197685,361.382,10.0904,354.701,999.111,0.318,0.0443028,652.477,0.0559507,348.003,10.0768,3.42588,14.6743,6.69792,6.68093,13.3788, +Internal Node(52),26.05.2002 06:57:32,459307,-7.32588e+06,2738.18,0.203612,362.916,10.0868,356.309,999.182,0.318,0.0431795,712.946,0.04906,349.671,10.0707,3.74334,14.4638,6.63867,6.60702,13.2457, +Internal Node(52),28.09.2002 15:34:55,459307,-7.32588e+06,2738.64,0.229976,363.947,10.0892,356.648,999.233,0.318,0.0421327,1027.29,0.0620579,349.598,10.064,4.04042,13.8637,7.04966,7.29916,14.3488, +Internal Node(52),30.11.2002 07:53:36,459307,-7.32588e+06,2739.02,0.245,364.508,10.0872,357.124,999.261,0.318,0.0416364,1242.06,0.0500624,350.198,10.0566,4.30588,14.1033,6.92646,7.38364,14.3101, +Internal Node(52),01.02.2003 00:12:17,459307,-7.32589e+06,2739.39,0.213381,363.818,10.0877,357.024,999.327,0.318,0.0422737,820.566,0.0324128,349.835,10.0522,4.42876,14.0973,7.18847,6.79377,13.9822, +Internal Node(52),04.04.2003 16:30:58,459308,-7.32589e+06,2739.61,0.277686,365.603,10.0872,357.335,999.393,0.318,0.0422504,1808.46,0.049025,350.297,10.0492,4.55088,13.8736,7.03797,8.26811,15.3061, +Internal Node(52),06.06.2003 08:49:39,459308,-7.32589e+06,2739.77,0.299216,365.642,10.0855,357.1,999.321,0.318,0.0420903,2262.56,0.0454689,350.088,10.0467,4.68296,14.9692,7.0118,8.54216,15.554, +Internal Node(52),09.10.2003 17:27:02,459308,-7.32589e+06,2739.9,0.293828,365.407,10.0855,356.936,999.399,0.318,0.041744,2142.53,0.0473947,349.77,10.0451,4.79853,15.0387,7.16577,8.47103,15.6368, +Internal Node(52),16.06.2004 10:41:46,459308,-7.32589e+06,2740,0.343391,366.189,10.0841,356.725,999.337,0.318,0.040355,3419.88,0.038076,349.57,10.0437,5.03342,15.2674,7.15542,9.46418,16.6196, +Internal Node(52),19.10.2004 19:19:08,459308,-7.32589e+06,2740.09,0.389713,366.283,10.0818,355.819,999.343,0.318,0.0374416,4998.97,0.0310481,348.49,10.0422,5.49806,16.2082,7.32887,10.4638,17.7926, +Internal Node(52),27.06.2005 12:33:53,459308,-7.32589e+06,2740.16,0.414771,366.358,10.0794,355.343,999.346,0.318,0.0362226,6026.59,0.0286618,347.95,10.0408,5.73803,17.7193,7.39289,11.0152,18.4081, +Internal Node(52),10.11.2006 23:03:22,459308,-7.32589e+06,2740.2,0.468479,366.183,10.0768,354.371,999.338,0.318,0.033603,8683.94,0.024739,346.838,10.0404,6.20072,18.5273,7.53292,11.8116,19.3445, +Internal Node(52),01.12.2006,459308,-7.32589e+06,2740.29,0.486954,365.253,10.0754,352.73,999.554,0.318,0.029652,9752.38,0.0223327,344.686,10.0397,7.05642,19.2821,8.04384,12.5228,20.5666, +Internal Node(52),01.12.2006,459308,-7.32589e+06,2740.29,0.486954,365.253,10.0754,352.73,999.554,0.318,0.029652,9752.38,0.0223327,344.686,10.0397,7.05642,19.2821,8.04384,12.5228,20.5666, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Internal Node(53),09.12.1997 22:12:00,459345,-7.32597e+06,2737.5,0.107977,386.287,10.1014,378.946,1000.27,0.318,0.144938,106.326,0.637072,324.873,21.8389,0.105354,43.3326,54.0726,7.34125,61.4138, +Internal Node(53),05.02.1998 14:35:11,459340,-7.32596e+06,2738.2,0.0855507,386.703,10.0707,381.37,1000.09,0.318,0.0853058,52.883,0.386008,338.97,14.8077,0.339245,34.9401,42.4001,5.33309,47.7332, +Internal Node(53),12.04.1998 23:29:05,459339,-7.32595e+06,2740.72,0.0408481,387.307,10.0711,385.362,1000.22,0.318,0.00886236,5.75652,0.123667,349.155,11.97,0.640244,29.2093,36.2072,1.94484,38.1521, +Internal Node(53),16.08.1998 08:06:27,459336,-7.32595e+06,2742.47,3.048e-07,369.687,10.0611,383.442,999.891,0.318,0.0333951,2.39161,0.379797,351.79,10.8914,0.704303,36.0331,31.6521,-13.7545,17.8975, +Internal Node(53),18.10.1998 00:25:09,459334,-7.32594e+06,2740.36,0.036133,358.992,10.1248,357.288,999.029,0.318,0.0270292,3.98437,0.10914,330.192,10.1567,1.51687,11.4505,27.0962,1.7041,28.8003, +Internal Node(53),19.12.1998 16:43:50,459331,-7.32594e+06,2742.58,3.048e-07,359.512,10.0891,365.517,999.394,0.318,0.0465947,2.39161,0.291811,344.765,10.0842,1.19862,31.4103,20.7519,-6.00428,14.7476, +Internal Node(53),20.02.1999 09:02:31,459329,-7.32593e+06,2740.63,0.036882,356.472,10.1073,354.851,998.883,0.318,0.0665272,4.2373,0.206788,335.086,10.083,1.61823,13.4465,19.7656,1.62089,21.3865, +Internal Node(53),25.06.1999 17:39:53,459326,-7.32593e+06,2741.6,3.048e-07,356.873,10.0902,360.442,999.279,0.318,0.0514672,2.39161,0.0783992,345.343,10.063,1.35945,24.3241,15.0983,-3.56842,11.5298, +Internal Node(53),27.08.1999 09:58:34,459325,-7.32592e+06,2741.18,3.048e-07,348.737,10.1158,349.488,998.529,0.318,0.0748584,2.39161,0.154868,333.704,10.0668,1.88594,11.2025,15.7843,-0.751868,15.0325, +Internal Node(53),30.12.1999 18:35:56,459321,-7.32591e+06,2741.22,3.048e-07,346.344,10.1015,353.881,998.805,0.318,0.0957158,2.39161,0.125018,341.474,10.0578,1.71427,17.1719,12.407,-7.53721,4.8698, +Internal Node(53),06.09.2000 11:50:41,459316,-7.3259e+06,2739.84,0.0506611,352.875,10.1237,351.708,998.521,0.318,0.093421,10.9817,0.051353,339.355,10.0715,1.59751,7.42776,12.353,1.16721,13.5202, +Internal Node(53),09.01.2001 20:28:03,459315,-7.3259e+06,2742.31,0.0470661,357.489,10.1053,355.715,999.087,0.318,0.0865288,8.80586,0.0295334,349.537,10.0731,2.37796,14.5791,6.17796,1.77412,7.95207, +Internal Node(53),13.03.2001 12:46:44,459317,-7.32591e+06,2743.12,0.120886,357.227,10.1084,352.991,998.921,0.318,0.0781995,149.201,0.0382379,344.861,10.0704,2.64527,11.3915,8.13015,4.23532,12.3655, +Internal Node(53),15.05.2001 05:05:26,459315,-7.3259e+06,2743.64,0.0819649,358.439,10.1004,355.165,999.064,0.318,0.0864033,46.5083,0.110315,347.934,10.0768,2.38947,11.5563,7.23079,3.27377,10.5046, +Internal Node(53),17.09.2001 13:42:48,459315,-7.3259e+06,2743.55,0.143426,360.196,10.099,355.965,999.054,0.318,0.0816466,249.189,0.0620337,349.171,10.0621,2.55021,9.88925,6.79468,4.23069,11.0254, +Internal Node(53),20.01.2002 22:20:10,459313,-7.3259e+06,2744.25,0.18039,362.021,10.0904,357.271,999.141,0.318,0.0831891,495.771,0.0337756,350.635,10.0567,2.54999,11.4217,6.63618,4.75032,11.3865, +Internal Node(53),26.05.2002 06:57:32,459314,-7.3259e+06,2745.33,0.174968,363.618,10.0868,359.668,999.214,0.318,0.0880781,452.403,0.032077,353.716,10.0489,2.53503,10.6214,5.9523,3.94962,9.90192, +Internal Node(53),28.09.2002 15:34:55,459315,-7.3259e+06,2746.1,0.208035,364.68,10.0892,360.232,999.268,0.318,0.0898304,760.419,0.0377725,354.256,10.0448,2.64225,9.96896,5.97597,4.44783,10.4238, +Internal Node(53),30.11.2002 07:53:36,459314,-7.3259e+06,2746.79,0.231506,365.271,10.0872,360.716,999.296,0.318,0.0308471,1047.93,0.0392238,355.151,10.0433,2.72563,10.1974,5.56451,4.5551,10.1196, +Internal Node(53),01.02.2003 00:12:17,459315,-7.3259e+06,2747.26,0.194684,364.59,10.0877,360.591,999.366,0.318,0.0314273,623.212,0.0248376,354.76,10.0425,2.79098,10.2774,5.83149,3.99927,9.83076, +Internal Node(53),04.04.2003 16:30:58,459316,-7.3259e+06,2747.35,0.275429,366.364,10.0872,360.832,999.431,0.318,0.0306961,1764.71,0.0392948,355.24,10.0421,2.91302,10.2803,5.59162,5.53218,11.1238, +Internal Node(53),06.06.2003 08:49:39,459315,-7.3259e+06,2747.62,0.305381,366.414,10.0855,360.491,999.357,0.318,0.031384,2405.31,0.0343526,355.02,10.0419,2.95644,11.1554,5.47112,5.92318,11.3943, +Internal Node(53),09.10.2003 17:27:02,459316,-7.3259e+06,2747.83,0.302327,366.187,10.0855,360.152,999.438,0.318,0.031129,2333.87,0.0356035,354.559,10.0417,3.05788,11.2962,5.59289,6.03456,11.6274, +Internal Node(53),16.06.2004 10:41:46,459316,-7.3259e+06,2747.96,0.368499,366.971,10.0841,359.699,999.373,0.318,0.0300604,4226.25,0.03082,354.387,10.0415,3.27376,11.6571,5.31178,7.2722,12.584, +Internal Node(53),19.10.2004 19:19:08,459316,-7.3259e+06,2748.14,0.431516,367.072,10.0818,358.423,999.379,0.318,0.0276729,6786.37,0.0260293,353.184,10.0411,3.72744,12.5672,5.23917,8.64908,13.8883, +Internal Node(53),27.06.2005 12:33:53,459316,-7.3259e+06,2748.27,0.466536,367.153,10.0794,357.765,999.383,0.318,0.0268236,8576.35,0.0247199,352.53,10.0405,3.93999,14.1495,5.23524,9.38765,14.6229, +Internal Node(53),10.11.2006 23:03:22,459315,-7.3259e+06,2748.64,0.541332,367.01,10.0768,356.487,999.376,0.318,0.0262485,13397.9,0.0220644,351.483,10.04,4.31888,14.9209,5.00422,10.5229,15.5271, +Internal Node(53),01.12.2006,459316,-7.3259e+06,2748.95,0.571092,366.102,10.0754,354.469,999.596,0.318,0.0232891,15731.3,0.0200646,349.176,10.0394,5.13253,15.862,5.29315,11.6335,16.9266, +Internal Node(53),01.12.2006,459316,-7.3259e+06,2748.95,0.571092,366.102,10.0754,354.469,999.596,0.318,0.0232891,15731.3,0.0200646,349.176,10.0394,5.13253,15.862,5.29315,11.6335,16.9266, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Internal Node(54),09.12.1997 22:12:00,459347,-7.32597e+06,2738.73,0.104198,386.42,10.1014,382.657,1000.28,0.318,0.0735903,95.5477,0.340827,326.726,23.2113,0.222832,40.3343,55.9316,3.76255,59.6941, +Internal Node(54),05.02.1998 14:35:11,459343,-7.32596e+06,2739.92,0.0609608,386.872,10.0707,384.562,1000.09,0.318,0.27021,19.1337,0.180773,341.076,14.4557,0.464388,34.4441,43.4854,2.31063,45.7961, +Internal Node(54),12.04.1998 23:29:05,459342,-7.32596e+06,2742.32,0.0110267,387.466,10.0711,387.697,1000.24,0.318,0.0119271,2.39161,0.0702258,348.771,11.7911,0.501089,29.6297,38.926,-0.23139,38.6946, +Internal Node(54),16.08.1998 08:06:27,459339,-7.32595e+06,2743.89,3.048e-07,370.049,10.0611,386.606,999.891,0.318,0.0375636,2.39161,0.0850564,354.508,10.3363,0.795036,36.6761,32.0986,-16.5573,15.5414, +Internal Node(54),18.10.1998 00:25:09,459338,-7.32595e+06,2743.22,3.048e-07,359.098,10.1248,361.338,999.038,0.318,0.0845665,2.39161,0.1191,331.874,10.0986,1.5471,12.7742,29.4641,-2.23952,27.2246, +Internal Node(54),19.12.1998 16:43:50,459335,-7.32595e+06,2744.36,3.048e-07,359.917,10.0891,368.599,999.394,0.318,0.116094,2.39161,0.0825315,347.702,10.0651,1.55362,29.2356,20.8968,-8.68183,12.215, +Internal Node(54),20.02.1999 09:02:31,459334,-7.32594e+06,2743.86,0.00212654,356.773,10.1073,357.595,998.897,0.318,0.0996141,2.39161,0.140673,335.608,10.0597,1.73196,14.2327,21.9865,-0.82212,21.1644, +Internal Node(54),25.06.1999 17:39:53,459332,-7.32594e+06,2744.65,3.048e-07,357.298,10.0902,363.265,999.279,0.318,0.116589,2.39161,0.0399071,348.147,10.0971,1.74488,21.0285,15.1175,-5.96666,9.15086, +Internal Node(54),27.08.1999 09:58:34,459331,-7.32594e+06,2744.25,3.048e-07,349.394,10.1158,349.96,998.559,0.318,0.0970937,2.39161,0.0924428,334.106,10.0645,2.11385,11.326,15.8547,-0.566753,15.2879, +Internal Node(54),30.12.1999 18:35:56,459328,-7.32593e+06,2743.83,3.048e-07,346.673,10.1015,354.158,998.805,0.318,0.0955665,2.39161,0.0302432,343.317,10.0649,2.14566,15.8094,10.841,-7.48443,3.35654, +Internal Node(54),06.09.2000 11:50:41,459324,-7.32592e+06,2742.51,0.10987,353.18,10.1237,350.052,998.546,0.318,0.0802418,112.016,0.130436,339.484,10.053,2.36256,8.83997,10.5686,3.12821,13.6968, +Internal Node(54),09.01.2001 20:28:03,459324,-7.32592e+06,2745.21,0.0440243,357.778,10.1053,356.263,999.101,0.318,0.0829294,7.20648,0.0508994,350.451,10.0929,2.48749,12.0299,5.81185,1.51497,7.32682, +Internal Node(54),13.03.2001 12:46:44,459325,-7.32592e+06,2745.74,0.113185,357.484,10.1084,354.196,998.933,0.318,0.0804934,122.464,0.102206,346.933,10.0691,2.60943,9.88602,7.26274,3.28808,10.5508, +Internal Node(54),15.05.2001 05:05:26,459323,-7.32592e+06,2747.01,0.0382975,358.73,10.1004,357.534,999.08,0.318,0.0995579,4.74413,0.0737155,350.342,10.0674,2.14744,10.2342,7.19179,1.19556,8.38735, +Internal Node(54),17.09.2001 13:42:48,459323,-7.32592e+06,2747.02,0.100953,360.531,10.099,358.537,999.069,0.318,0.0955638,86.896,0.110408,351.915,10.0556,2.28831,7.79658,6.62148,1.99426,8.61574, +Internal Node(54),20.01.2002 22:20:10,459322,-7.32591e+06,2747.99,0.133357,362.385,10.0904,360.04,999.158,0.318,0.0323923,200.306,0.0612957,353.838,10.051,2.16844,9.29127,6.20212,2.34454,8.54666, +Internal Node(54),26.05.2002 06:57:32,459322,-7.32591e+06,2749.1,0.13402,363.986,10.0868,362.134,999.232,0.318,0.0403693,203.308,0.0462035,356.681,10.0471,2.15385,8.40153,5.45312,1.85158,7.3047, +Internal Node(54),28.09.2002 15:34:55,459323,-7.32592e+06,2749.8,0.178926,365.043,10.0892,362.255,999.285,0.318,0.0420047,483.801,0.0250913,356.661,10.0442,2.28842,8.21359,5.59365,2.78852,8.38217, +Internal Node(54),30.11.2002 07:53:36,459323,-7.32591e+06,2750.66,0.206143,365.651,10.0872,362.68,999.314,0.318,0.0480372,739.859,0.0295602,357.556,10.0428,2.31804,8.50089,5.12402,2.9719,8.09592, +Internal Node(54),01.02.2003 00:12:17,459323,-7.32592e+06,2751.04,0.167229,364.96,10.0877,362.152,999.383,0.318,0.0488576,394.985,0.024341,356.545,10.0422,2.40526,9.14744,5.60671,2.80891,8.41562, +Internal Node(54),04.04.2003 16:30:58,459324,-7.32592e+06,2751.1,0.258712,366.733,10.0872,362.356,999.448,0.318,0.0475936,1462.49,0.0327287,357.01,10.042,2.51963,9.22561,5.34566,4.37743,9.72308, +Internal Node(54),06.06.2003 08:49:39,459323,-7.32592e+06,2751.5,0.29127,366.795,10.0855,362.061,999.374,0.318,0.0522293,2087.05,0.0252286,356.913,10.0417,2.51593,9.89245,5.14738,4.73457,9.88196, +Internal Node(54),09.10.2003 17:27:02,459324,-7.32592e+06,2751.67,0.286844,366.564,10.0855,361.552,999.455,0.318,0.0517755,1993.36,0.0278112,356.221,10.0415,2.61279,10.2061,5.33021,5.01233,10.3425, +Internal Node(54),16.06.2004 10:41:46,459324,-7.32592e+06,2751.86,0.35947,367.353,10.0841,361.109,999.391,0.318,0.0514261,3923.13,0.0199638,356.114,10.0414,2.7851,10.5356,4.99506,6.24419,11.2393, +Internal Node(54),19.10.2004 19:19:08,459324,-7.32592e+06,2752.05,0.424415,367.456,10.0818,359.795,999.397,0.318,0.0481069,6456.82,0.0159382,354.866,10.041,3.16776,11.4128,4.92915,7.66146,12.5906, +Internal Node(54),27.06.2005 12:33:53,459324,-7.32592e+06,2752.2,0.461058,367.538,10.0794,359.14,999.401,0.318,0.0474464,8277.73,0.0151679,354.239,10.0404,3.34023,12.9388,4.90016,8.39863,13.2988, +Internal Node(54),10.11.2006 23:03:22,459323,-7.32592e+06,2752.77,0.536576,367.415,10.0768,357.903,999.395,0.318,0.0523651,13047.9,0.0127968,353.319,10.0399,3.60272,13.5912,4.58498,9.51114,14.0961, +Internal Node(54),01.12.2006,459324,-7.32592e+06,2753.02,0.558127,366.501,10.0754,355.789,999.611,0.318,0.0465154,14684,0.0146793,350.848,10.0393,4.29061,14.6773,4.94088,10.7122,15.6531, +Internal Node(54),01.12.2006,459324,-7.32592e+06,2753.02,0.558127,366.501,10.0754,355.789,999.611,0.318,0.0465154,14684,0.0146793,350.848,10.0393,4.29061,14.6773,4.94088,10.7122,15.6531, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Internal Node(55),09.12.1997 22:12:00,459349,-7.32598e+06,2739.65,0.115518,386.515,10.1014,383.638,1000.28,0.318,0.0501815,130.194,0.223095,328.745,22.4778,0.33591,40.6135,54.8933,2.87722,57.7705, +Internal Node(55),05.02.1998 14:35:11,459345,-7.32597e+06,2741.29,0.0429477,387.015,10.0707,385.689,1000.09,0.318,0.0114739,6.69062,0.0670266,343.011,12.8272,0.530887,37.5578,42.6783,1.32606,44.0043, +Internal Node(55),12.04.1998 23:29:05,459345,-7.32597e+06,2743.22,3.048e-07,387.566,10.0711,388.996,1000.25,0.318,0.0288804,2.39161,0.0503298,348.881,11.216,0.457623,31.1556,40.1146,-1.42913,38.6854, +Internal Node(55),16.08.1998 08:06:27,459343,-7.32596e+06,2745.64,3.048e-07,370.258,10.0611,390.551,999.891,0.318,0.100827,2.39161,0.0310464,356.081,10.722,0.715477,33.7072,34.4697,-20.2925,14.1772, +Internal Node(55),18.10.1998 00:25:09,459342,-7.32596e+06,2745.13,3.048e-07,359.307,10.1248,363.726,999.042,0.318,0.142372,2.39161,0.0952624,332.295,10.0862,1.41061,13.0519,31.4311,-4.41888,27.0122, +Internal Node(55),19.12.1998 16:43:50,459340,-7.32596e+06,2745.28,3.048e-07,360.084,10.0891,370.85,999.394,0.318,0.109638,2.39161,0.037016,349.737,10.0979,1.82702,26.774,21.1134,-10.7665,10.347, +Internal Node(55),20.02.1999 09:02:31,459339,-7.32595e+06,2745.09,3.048e-07,356.9,10.1073,358.558,998.903,0.318,0.0998378,2.39161,0.116685,335.286,10.0726,2.03861,15.0157,23.2722,-1.6581,21.6141, +Internal Node(55),25.06.1999 17:39:53,459337,-7.32595e+06,2746.3,3.048e-07,357.534,10.0902,365.147,999.279,0.318,0.105521,2.39161,0.0200982,348.054,10.1527,1.90684,18.8281,17.0935,-7.61265,9.48082, +Internal Node(55),27.08.1999 09:58:34,459337,-7.32595e+06,2746.16,3.048e-07,349.767,10.1158,351.291,998.577,0.318,0.0922597,2.39161,0.04233,333.846,10.1198,2.1935,10.3035,17.4457,-1.52479,15.9209, +Internal Node(55),30.12.1999 18:35:56,459335,-7.32595e+06,2745.68,3.048e-07,346.893,10.1015,354.568,998.805,0.318,0.0829761,2.39161,0.0070187,343.743,10.0859,2.42242,14.832,10.8247,-7.67538,3.14934, +Internal Node(55),06.09.2000 11:50:41,459332,-7.32594e+06,2745.18,0.154241,353.45,10.1237,349.718,998.565,0.318,0.083718,309.915,0.0279798,339.255,10.0857,2.46529,8.24131,10.4623,3.73203,14.1944, +Internal Node(55),09.01.2001 20:28:03,459331,-7.32594e+06,2748.78,0.0283177,358.113,10.1053,357.45,999.117,0.318,0.108263,2.39161,0.0283051,350.623,10.1317,1.9002,10.1157,6.82763,0.662029,7.48966, +Internal Node(55),13.03.2001 12:46:44,459332,-7.32594e+06,2749.36,0.0517595,357.831,10.1084,357.786,998.949,0.318,0.0339396,11.7116,0.0745157,350.913,10.0639,2.08954,6.84738,6.87272,0.0448182,6.91754, +Internal Node(55),15.05.2001 05:05:26,459331,-7.32593e+06,2750.23,3.048e-07,358.986,10.1004,360.502,999.094,0.318,0.0402495,2.39161,0.0523653,353.976,10.0572,1.85895,8.08656,6.52582,-1.51552,5.0103, +Internal Node(55),17.09.2001 13:42:48,459331,-7.32593e+06,2750.24,0.0605866,360.841,10.099,360.399,999.084,0.318,0.0404147,18.7834,0.0815621,353.707,10.0535,1.98071,6.55373,6.69162,0.442181,7.13381, +Internal Node(55),20.01.2002 22:20:10,459330,-7.32593e+06,2751.14,0.0842912,362.689,10.0904,361.998,999.172,0.318,0.0460612,50.5816,0.0752965,356.154,10.0498,1.96471,7.73218,5.84396,0.690944,6.53491, +Internal Node(55),26.05.2002 06:57:32,459330,-7.32593e+06,2752.44,0.0904318,364.308,10.0868,363.865,999.247,0.318,0.0618069,62.461,0.0496069,358.643,10.0468,1.86493,7.03508,5.22192,0.443884,5.6658, +Internal Node(55),28.09.2002 15:34:55,459331,-7.32593e+06,2753.18,0.140518,365.374,10.0892,363.711,999.3,0.318,0.0700017,234.336,0.0294291,358.13,10.0437,1.97004,7.37288,5.58093,1.6627,7.24362, +Internal Node(55),30.11.2002 07:53:36,459331,-7.32593e+06,2754.32,0.16817,366.009,10.0872,364.038,999.331,0.318,0.102541,401.689,0.0292832,358.862,10.0427,1.93411,7.80563,5.17631,1.97108,7.14739, +Internal Node(55),01.02.2003 00:12:17,459331,-7.32593e+06,2754.61,0.122222,365.308,10.0877,363.328,999.398,0.318,0.0960592,154.205,0.0276314,357.527,10.0421,2.03709,8.68262,5.80093,1.97994,7.78086, +Internal Node(55),04.04.2003 16:30:58,459332,-7.32593e+06,2754.65,0.220111,367.08,10.0872,363.482,999.464,0.318,0.0907109,900.683,0.042338,357.918,10.0419,2.14575,8.66532,5.56416,3.59839,9.16256, +Internal Node(55),06.06.2003 08:49:39,459331,-7.32593e+06,2755.23,0.255057,367.16,10.0855,362.962,999.391,0.318,0.0827491,1401.39,0.0385002,357.477,10.0417,2.1851,9.72943,5.48446,4.19823,9.68269, +Internal Node(55),09.10.2003 17:27:02,459332,-7.32593e+06,2755.35,0.24646,366.924,10.0855,362.51,999.472,0.318,0.0771882,1264.41,0.042315,356.889,10.0415,2.29629,9.92703,5.62158,4.41391,10.0355, +Internal Node(55),16.06.2004 10:41:46,459332,-7.32593e+06,2755.61,0.320819,367.721,10.0841,362.004,999.408,0.318,0.0672043,2788.86,0.0297002,356.646,10.0413,2.4954,10.3812,5.35795,5.71722,11.0752, +Internal Node(55),19.10.2004 19:19:08,459332,-7.32593e+06,2755.84,0.379736,367.827,10.0818,360.81,999.415,0.318,0.0538552,4624.8,0.0249985,355.372,10.0409,2.91808,11.2919,5.43786,7.01758,12.4554, +Internal Node(55),27.06.2005 12:33:53,459332,-7.32593e+06,2756.02,0.413597,367.912,10.0794,360.185,999.419,0.318,0.0483654,5975.58,0.023075,354.679,10.0403,3.12697,12.8849,5.50526,7.72767,13.2329, +Internal Node(55),10.11.2006 23:03:22,459331,-7.32593e+06,2756.85,0.483625,367.815,10.0768,358.866,999.414,0.318,0.0365151,9553.71,0.0204943,353.322,10.0399,3.56225,13.9264,5.54367,8.94879,14.4925, +Internal Node(55),01.12.2006,459332,-7.32593e+06,2757.03,0.481241,366.894,10.0754,357.333,999.611,0.318,0.0278613,9413.12,0.0271524,351.185,10.0393,4.42667,14.7138,6.14858,9.56086,15.7094, +Internal Node(55),01.12.2006,459332,-7.32593e+06,2757.03,0.481241,366.894,10.0754,357.333,999.611,0.318,0.0278613,9413.12,0.0271524,351.185,10.0393,4.42667,14.7138,6.14858,9.56086,15.7094, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Internal Node(56),09.12.1997 22:12:00,459350,-7.32598e+06,2740.62,0.112574,386.613,10.1014,384.156,1000.29,0.318,0.0216492,120.492,0.290377,330.079,21.6236,0.392774,41.2454,54.0769,2.45705,56.534, +Internal Node(56),05.02.1998 14:35:11,459348,-7.32597e+06,2742.59,0.0195669,387.119,10.0707,387.289,1000.09,0.318,0.0126573,2.39161,0.0734821,343.72,12.2642,0.50533,38.6662,43.5688,-0.170381,43.3984, +Internal Node(56),12.04.1998 23:29:05,459348,-7.32597e+06,2743.69,3.048e-07,387.621,10.0711,389.802,1000.25,0.318,0.0285333,2.39161,0.116729,348.916,10.793,0.49127,32.8653,40.8856,-2.18105,38.7045, +Internal Node(56),16.08.1998 08:06:27,459347,-7.32597e+06,2745.74,3.048e-07,370.289,10.0611,392.039,999.891,0.318,0.0823045,2.39161,0.0724215,358.047,10.3691,0.88509,33.1903,33.9921,-21.7503,12.2418, +Internal Node(56),18.10.1998 00:25:09,459346,-7.32597e+06,2745.72,3.048e-07,359.418,10.1248,364.455,999.047,0.318,0.136634,2.39161,0.131136,331.873,10.163,1.4281,13.1876,32.5819,-5.03665,27.5453, +Internal Node(56),19.12.1998 16:43:50,459345,-7.32597e+06,2745.64,3.048e-07,360.141,10.0891,371.785,999.394,0.318,0.104479,2.39161,0.0733999,350.051,10.089,1.87281,26.4097,21.7342,-11.6447,10.0896, +Internal Node(56),20.02.1999 09:02:31,459344,-7.32596e+06,2745.55,3.048e-07,356.952,10.1073,358.896,998.905,0.318,0.0952218,2.39161,0.116128,334.93,10.0804,2.04885,15.2225,23.9652,-1.94316,22.022, +Internal Node(56),25.06.1999 17:39:53,459343,-7.32596e+06,2746.72,3.048e-07,357.595,10.0902,365.615,999.279,0.318,0.0950173,2.39161,0.0517647,347.97,10.136,2.04058,19.0364,17.6456,-8.01996,9.62563, +Internal Node(56),27.08.1999 09:58:34,459342,-7.32596e+06,2746.68,3.048e-07,349.877,10.1158,351.192,998.582,0.318,0.0892164,2.39161,0.0423774,333.782,10.1184,2.29382,10.2463,17.4098,-1.31552,16.0943, +Internal Node(56),30.12.1999 18:35:56,459342,-7.32596e+06,2746.65,3.048e-07,346.987,10.1015,355.067,998.805,0.318,0.0825459,2.39161,0.0375235,343.799,10.0983,2.48281,14.1547,11.268,-8.07936,3.1886, +Internal Node(56),06.09.2000 11:50:41,459339,-7.32595e+06,2747.45,0.155818,353.672,10.1237,350.683,998.577,0.318,0.0859569,319.522,0.0284108,339.037,10.1248,2.3859,7.34445,11.6464,2.98903,14.6354, +Internal Node(56),09.01.2001 20:28:03,459339,-7.32595e+06,2752.21,3.048e-07,358.411,10.1053,358.997,999.133,0.318,0.00568414,2.39161,0.0533321,350.766,10.1671,1.17608,8.6208,8.2316,-0.585714,7.64588, +Internal Node(56),13.03.2001 12:46:44,459340,-7.32595e+06,2752.41,3.048e-07,358.004,10.1084,360.748,998.957,0.318,0.0597386,2.39161,0.118195,353.743,10.0654,1.48208,4.46425,7.00475,-2.74423,4.26052, +Internal Node(56),15.05.2001 05:05:26,459339,-7.32595e+06,2752.25,3.048e-07,359.162,10.1004,362.578,999.101,0.318,0.0552774,2.39161,0.0848406,356.409,10.0548,1.66593,6.25912,6.16937,-3.41623,2.75314, +Internal Node(56),17.09.2001 13:42:48,459339,-7.32595e+06,2752.26,0.0244591,360.974,10.099,361.775,999.089,0.318,0.0530529,2.39161,0.0979022,354.931,10.0525,1.79376,5.66516,6.84401,-0.800438,6.04357, +Internal Node(56),20.01.2002 22:20:10,459339,-7.32595e+06,2753.64,0.0364024,362.889,10.0904,363.723,999.181,0.318,0.0717744,4.07416,0.0857292,357.814,10.0495,1.65877,6.55735,5.90919,-0.833478,5.07572, +Internal Node(56),26.05.2002 06:57:32,459338,-7.32595e+06,2755.47,0.0501597,364.581,10.0868,365.421,999.259,0.318,0.136582,10.6589,0.0727217,359.881,10.0527,1.46162,6.13725,5.53949,-0.84012,4.69937, +Internal Node(56),28.09.2002 15:34:55,459339,-7.32595e+06,2756.31,0.0962136,365.673,10.0892,364.809,999.314,0.318,0.115816,75.2238,0.10449,358.324,10.0473,1.63373,7.18784,6.48511,0.864261,7.34937, +Internal Node(56),30.11.2002 07:53:36,459339,-7.32595e+06,2757.8,0.130283,366.346,10.0872,364.387,999.346,0.318,0.0913897,186.769,0.191866,357.665,10.0437,1.74701,8.86973,6.72207,1.95937,8.68144, +Internal Node(56),01.02.2003 00:12:17,459340,-7.32595e+06,2757.93,0.0703349,365.624,10.0877,364.367,999.413,0.318,0.081239,29.3872,0.0843064,357.481,10.0422,1.87658,8.80126,6.88692,1.25705,8.14397, +Internal Node(56),04.04.2003 16:30:58,459340,-7.32595e+06,2757.95,0.164483,367.401,10.0872,364.495,999.478,0.318,0.074057,375.843,0.23527,357.842,10.0419,2.00575,8.77215,6.65333,2.90559,9.55892, +Internal Node(56),06.06.2003 08:49:39,459339,-7.32595e+06,2758.78,0.196903,367.505,10.0855,363.966,999.407,0.318,0.0636899,644.766,0.211993,357.439,10.0417,2.08656,10.0383,6.52784,3.53876,10.0666, +Internal Node(56),09.10.2003 17:27:02,459340,-7.32595e+06,2758.82,0.183478,367.261,10.0855,363.785,999.487,0.318,0.058365,521.671,0.250803,357.219,10.0415,2.22233,9.95935,6.56599,3.47616,10.0421, +Internal Node(56),16.06.2004 10:41:46,459340,-7.32595e+06,2759.17,0.25196,368.069,10.0841,363.282,999.425,0.318,0.0488346,1350.96,0.15183,356.937,10.0413,2.47875,10.3985,6.34521,4.78665,11.1319, +Internal Node(56),19.10.2004 19:19:08,459340,-7.32595e+06,2759.43,0.299856,368.179,10.0818,362.297,999.431,0.318,0.0375507,2277.12,0.129467,355.78,10.0409,3.00842,11.3372,6.51701,5.88225,12.3993, +Internal Node(56),27.06.2005 12:33:53,459340,-7.32595e+06,2759.64,0.327826,368.267,10.0794,361.705,999.435,0.318,0.0333811,2975.62,0.121921,354.995,10.0403,3.27079,13.047,6.71029,6.56163,13.2719, +Internal Node(56),10.11.2006 23:03:22,459340,-7.32595e+06,2760.74,0.372493,368.195,10.0768,360.564,999.432,0.318,0.0777559,4365.16,0.114461,353.647,10.0399,3.85073,14.1078,6.91664,7.63112,14.5478, +Internal Node(56),01.12.2006,459340,-7.32595e+06,2760.77,0.350742,367.26,10.0754,359.547,999.611,0.318,0.0612388,3644.25,0.184274,351.673,10.0392,4.8032,14.6717,7.87377,7.71294,15.5867, +Internal Node(56),01.12.2006,459340,-7.32595e+06,2760.77,0.350742,367.26,10.0754,359.547,999.611,0.318,0.0612388,3644.25,0.184274,351.673,10.0392,4.8032,14.6717,7.87377,7.71294,15.5867, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Internal Node(57),09.12.1997 22:12:00,459352,-7.32598e+06,2742.23,0.0902372,386.781,10.1014,385.538,1000.3,0.318,0.0247193,62.0586,0.344613,330.299,21.5281,0.352126,40.8185,55.2394,1.24335,56.4827, +Internal Node(57),05.02.1998 14:35:11,459351,-7.32598e+06,2742.95,0.0103299,387.219,10.0707,387.866,1000.09,0.318,0.0189179,2.39161,0.360719,344.597,11.6286,0.570987,40.8162,43.2696,-0.64664,42.623, +Internal Node(57),12.04.1998 23:29:05,459351,-7.32598e+06,2743.53,3.048e-07,387.697,10.0711,390.063,1000.25,0.318,0.0274613,2.39161,0.349436,348.858,10.5376,0.65687,34.7764,41.2048,-2.36611,38.8387, +Internal Node(57),16.08.1998 08:06:27,459350,-7.32598e+06,2745.35,3.048e-07,370.338,10.0611,391.819,999.891,0.318,0.0673326,2.39161,0.284445,357.454,10.1182,0.914578,35.3344,34.3653,-21.4809,12.8844, +Internal Node(57),18.10.1998 00:25:09,459350,-7.32598e+06,2745.39,3.048e-07,359.476,10.1248,363.778,999.05,0.318,0.125689,2.39161,0.307124,331.103,10.0672,1.39838,14.4463,32.6745,-4.30152,28.373, +Internal Node(57),19.12.1998 16:43:50,459350,-7.32598e+06,2745.41,3.048e-07,360.194,10.0891,371.591,999.394,0.318,0.100326,2.39161,0.25324,349.359,10.0529,1.80299,28.1005,22.2316,-11.3965,10.8351, +Internal Node(57),20.02.1999 09:02:31,459349,-7.32597e+06,2745.45,3.048e-07,357.007,10.1073,358.576,998.908,0.318,0.0927381,2.39161,0.293615,334.542,10.0527,2.00866,16.1031,24.0336,-1.56854,22.4651, +Internal Node(57),25.06.1999 17:39:53,459349,-7.32597e+06,2746.82,3.048e-07,357.662,10.0902,365.69,999.279,0.318,0.0960075,2.39161,0.204362,347.719,10.116,2.01846,20.1093,17.9712,-8.02855,9.94268, +Internal Node(57),27.08.1999 09:58:34,459348,-7.32597e+06,2746.81,0.00299136,349.949,10.1158,350.793,998.585,0.318,0.0891161,2.39161,0.199764,333.821,10.1038,2.2951,10.5321,16.9719,-0.843521,16.1284, +Internal Node(57),30.12.1999 18:35:56,459348,-7.32597e+06,2747.63,3.048e-07,347.143,10.1015,355.801,998.805,0.318,0.089702,2.39161,0.177664,343.772,10.115,2.27988,13.1514,12.0296,-8.65837,3.37122, +Internal Node(57),06.09.2000 11:50:41,459347,-7.32597e+06,2748.66,0.158917,353.792,10.1237,350.99,998.585,0.318,0.0932226,338.966,0.0735031,339.02,10.1428,2.19458,6.76521,11.97,2.80143,14.7714, +Internal Node(57),09.01.2001 20:28:03,459347,-7.32597e+06,2754.16,3.048e-07,358.648,10.1053,360.079,999.142,0.318,0.0110606,2.39161,0.155691,351.03,10.1875,0.686391,7.41556,9.04878,-1.43076,7.61802, +Internal Node(57),13.03.2001 12:46:44,459347,-7.32597e+06,2754.18,3.048e-07,358.012,10.1084,362.473,998.958,0.318,0.0918537,2.39161,0.242692,355.176,10.0669,1.06162,3.2958,7.29686,-4.46061,2.83625, +Internal Node(57),15.05.2001 05:05:26,459347,-7.32597e+06,2754.06,3.048e-07,359.355,10.1004,364.397,999.101,0.318,0.0815462,2.39161,0.175159,358.122,10.0551,1.26899,4.98724,6.27524,-5.04234,1.2329, +Internal Node(57),17.09.2001 13:42:48,459347,-7.32597e+06,2754.06,3.048e-07,361.041,10.099,363.239,999.093,0.318,0.0766959,2.39161,0.194454,356.098,10.0529,1.41062,4.90669,7.14111,-2.19846,4.94265, +Internal Node(57),20.01.2002 22:20:10,459347,-7.32597e+06,2755.2,3.048e-07,362.89,10.0904,365.065,999.181,0.318,0.107567,2.39161,0.176173,358.946,10.0497,1.37281,5.74293,6.1191,-2.1749,3.94419, +Internal Node(57),26.05.2002 06:57:32,459347,-7.32597e+06,2757.97,0.0343369,364.786,10.0868,365.477,999.268,0.318,0.145322,3.41925,0.149238,357.65,10.1002,1.23592,7.12744,7.82635,-0.690927,7.13542, +Internal Node(57),28.09.2002 15:34:55,459347,-7.32597e+06,2758.47,0.0523583,365.886,10.0892,365.787,999.324,0.318,0.0961646,12.1228,0.276885,358.064,10.0472,1.55256,7.37223,7.72378,0.0985561,7.82234, +Internal Node(57),30.11.2002 07:53:36,459348,-7.32597e+06,2760.03,0.086033,366.588,10.0872,365.25,999.358,0.318,0.0652227,53.7826,0.48507,357.35,10.0431,1.80411,9.72529,7.89999,1.33802,9.23801, +Internal Node(57),01.02.2003 00:12:17,459348,-7.32597e+06,2760.08,0.0223297,365.805,10.0877,365.457,999.421,0.318,0.0588194,2.39161,0.126071,357.619,10.0422,1.95154,9.0293,7.83847,0.347436,8.18591, +Internal Node(57),04.04.2003 16:30:58,459348,-7.32597e+06,2760.08,0.110946,367.633,10.0872,365.598,999.486,0.318,0.0538492,115.34,0.512109,358.039,10.0419,2.09519,9.08452,7.55867,2.03563,9.5943, +Internal Node(57),06.06.2003 08:49:39,459348,-7.32597e+06,2761.25,0.136151,367.762,10.0855,365.036,999.419,0.318,0.137703,213.161,0.444363,357.573,10.0417,2.2344,10.2986,7.4625,2.72628,10.1888, +Internal Node(57),09.10.2003 17:27:02,459348,-7.32597e+06,2761.21,0.122774,367.516,10.0855,364.938,999.496,0.318,0.128175,156.302,0.535255,357.471,10.0415,2.38578,10.043,7.46669,2.57765,10.0443, +Internal Node(57),16.06.2004 10:41:46,459348,-7.32597e+06,2761.69,0.181299,368.322,10.0841,364.427,999.436,0.318,0.10625,503.304,0.314044,357.163,10.0413,2.69556,10.5639,7.26427,3.89446,11.1587, +Internal Node(57),19.10.2004 19:19:08,459348,-7.32597e+06,2761.91,0.217018,368.425,10.0818,363.564,999.443,0.318,0.0838541,863.238,0.266889,356.002,10.0409,3.28251,11.4476,7.56266,4.86039,12.4231, +Internal Node(57),27.06.2005 12:33:53,459348,-7.32597e+06,2761.91,0.239208,368.492,10.0794,363.007,999.446,0.318,0.0770469,1156.03,0.24642,355.094,10.0403,3.55419,13.239,7.91266,5.48524,13.3979, +Internal Node(57),10.11.2006 23:03:22,459348,-7.32597e+06,2761.89,0.26423,368.31,10.0768,362.256,999.437,0.318,0.0667798,1558.08,0.21662,353.824,10.0399,4.07779,14.0778,8.4321,6.05477,14.4869, +Internal Node(57),01.12.2006,459348,-7.32597e+06,2761.89,0.229339,367.374,10.0754,361.473,999.611,0.318,0.0544084,1018.78,0.374344,351.84,10.0393,4.98082,14.6089,9.63332,5.90114,15.5345, +Internal Node(57),01.12.2006,459348,-7.32597e+06,2761.89,0.229339,367.374,10.0754,361.473,999.611,0.318,0.0544084,1018.78,0.374344,351.84,10.0393,4.98082,14.6089,9.63332,5.90114,15.5345, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Bottom Node(1),09.12.1997 22:12:00,459354,-7.32598e+06,2746.01,0.0236986,387.492,10.1155,389.666,1000.33,0.318,0.257525,2.39161,0.236777,327.882,23.3463,0.0587573,37.7031,61.7835,-2.17341,59.6101, +Bottom Node(1),05.02.1998 14:35:11,459354,-7.32598e+06,2746.44,3.048e-07,389.813,10.0768,392.212,1000.09,0.318,0.142761,2.39161,0.889303,343.964,12.4407,0.164826,39.7532,48.2479,-2.39892,45.849, +Bottom Node(1),12.04.1998 23:29:05,459354,-7.32598e+06,2747.11,3.048e-07,390.219,10.0788,395.597,1000.37,0.318,0.141504,2.39161,0.807271,348.115,11.9471,0.271705,31.8514,47.4818,-5.37836,42.1034, +Bottom Node(1),16.08.1998 08:06:27,459354,-7.32598e+06,2748.19,3.048e-07,372.783,10.0662,396.53,999.891,0.318,0.102373,2.39161,0.744082,356.142,11.2062,0.622584,28.3995,40.3882,-23.7468,16.6414, +Bottom Node(1),18.10.1998 00:25:09,459354,-7.32598e+06,2748.19,3.048e-07,362.032,10.1549,367.824,999.172,0.318,0.133826,2.39161,0.769159,330.132,10.5698,0.936005,11.8999,37.692,-5.7922,31.8998, +Bottom Node(1),19.12.1998 16:43:50,459354,-7.32598e+06,2748.33,3.048e-07,362.611,10.1058,375.278,999.394,0.318,0.106965,2.39161,0.706445,347.766,10.3133,1.17873,22.62,27.5116,-12.6668,14.8449, +Bottom Node(1),20.02.1999 09:02:31,459354,-7.32598e+06,2748.32,0.00515615,359.663,10.131,362.51,999.032,0.318,0.118609,2.39161,0.723141,333.953,10.2467,1.30966,12.7266,28.5565,-2.84662,25.7098, +Bottom Node(1),25.06.1999 17:39:53,459354,-7.32598e+06,2750.67,3.048e-07,360.232,10.1076,370.664,999.279,0.318,0.143321,2.39161,0.607522,346.604,10.2928,1.07407,12.9769,24.0594,-10.4316,13.6278, +Bottom Node(1),27.08.1999 09:58:34,459354,-7.32598e+06,2750.26,0.0110134,352.51,10.1429,355.188,998.699,0.318,0.151649,2.39161,0.670774,333.66,10.2215,1.3323,7.02399,21.5271,-2.67763,18.8495, +Bottom Node(1),30.12.1999 18:35:56,459355,-7.32598e+06,2752.57,3.048e-07,349.948,10.1232,361.553,998.805,0.318,0.0604769,2.39161,0.597162,343.074,10.2418,0.918463,6.11556,18.4786,-11.6048,6.87384, +Bottom Node(1),06.09.2000 11:50:41,459355,-7.32598e+06,2754.18,0.0480887,354.395,10.1539,356.774,998.717,0.318,0.00932695,9.39237,0.0543057,338.864,10.2622,0.605491,2.94041,17.9103,-2.37963,15.5307, +Bottom Node(1),09.01.2001 20:28:03,459356,-7.32598e+06,2761.37,3.048e-07,361.712,10.1289,365.08,999.181,0.318,0.148344,2.39161,0.38254,346.906,12.2348,0.0380395,3.3474,18.1738,-3.36822,14.8056, +Bottom Node(1),13.03.2001 12:46:44,459356,-7.32598e+06,2761.37,3.048e-07,360.859,10.1332,364.052,999.09,0.318,0.559216,2.39161,0.27173,348.75,11.3074,0.26946,1.18523,15.3019,-3.19343,12.1085, +Bottom Node(1),15.05.2001 05:05:26,459356,-7.32598e+06,2761.37,3.048e-07,362.139,10.1224,365.193,999.239,0.318,0.436565,2.39161,0.296564,351.554,11.0017,0.374946,2.25462,13.6387,-3.05333,10.5853, +Bottom Node(1),17.09.2001 13:42:48,459356,-7.32598e+06,2761.37,0.00472405,363.871,10.1205,364.502,999.224,0.318,0.371161,2.39161,0.299204,350.537,10.8282,0.459704,2.31582,13.9649,-0.630735,13.3342, +Bottom Node(1),20.01.2002 22:20:10,459356,-7.32598e+06,2764.74,0.0333059,365.73,10.1087,363.634,999.314,0.318,0.327542,3.12039,0.253743,346.827,11.0001,0.184071,0.856655,16.8067,2.09656,18.9033, +Bottom Node(1),26.05.2002 06:57:32,459357,-7.32598e+06,2767.9,0.036456,367.53,10.104,364.981,999.402,0.318,0.0668982,4.09215,0.284128,347.806,10.5991,0.252357,10.7548,17.175,2.54946,19.7244, +Bottom Node(1),28.09.2002 15:34:55,459357,-7.32598e+06,2767.95,0.0279941,368.854,10.1074,367.27,999.464,0.318,0.0968896,2.39161,0.289675,354.796,10.1212,0.655664,7.66209,12.4741,1.58387,14.0579, +Bottom Node(1),30.11.2002 07:53:36,459357,-7.32598e+06,2770.48,0.0417766,368.47,10.1048,365.66,999.446,0.318,0.107399,6.15808,0.161473,354.147,10.0914,0.620399,6.71985,11.5132,2.80986,14.323, +Bottom Node(1),01.02.2003 00:12:17,459357,-7.32598e+06,2770.48,0.0304621,368.933,10.1056,366.822,999.475,0.318,0.238796,2.39161,0.233216,357.042,10.0612,0.747918,4.93675,9.78009,2.11094,11.891, +Bottom Node(1),04.04.2003 16:30:58,459357,-7.32598e+06,2770.48,0.0415087,369.187,10.1049,366.407,999.534,0.318,0.204901,6.04035,0.115335,357.394,10.0512,0.877311,5.43432,9.01309,2.78015,11.7932, +Bottom Node(1),06.06.2003 08:49:39,459357,-7.32598e+06,2771.02,0.0579857,369.026,10.1026,365.37,999.475,0.318,0.0541759,16.4668,0.137631,356.509,10.0493,0.543729,3.26586,8.86126,3.65577,12.517, +Bottom Node(1),09.10.2003 17:27:02,459357,-7.32598e+06,2771.02,0.0552292,368.9,10.1027,365.337,999.54,0.318,0.0616885,14.2283,0.168952,356.854,10.0455,0.63064,7.56021,8.48258,3.56292,12.0455, +Bottom Node(1),16.06.2004 10:41:46,459357,-7.32598e+06,2771.02,0.0812454,369.353,10.1009,364.541,999.485,0.318,0.0475816,45.2942,0.100069,356.382,10.0429,0.795523,9.91198,8.15916,4.81242,12.9716, +Bottom Node(1),19.10.2004 19:19:08,459357,-7.32598e+06,2771.02,0.101159,369.382,10.098,363.555,999.487,0.318,0.032731,87.4311,0.0846902,355.214,10.0414,1.17352,11.6764,8.34176,5.82707,14.1688, +Bottom Node(1),27.06.2005 12:33:53,459357,-7.32598e+06,2771.02,0.114992,369.432,10.0948,362.842,999.49,0.318,0.0302564,128.426,0.0772134,354.066,10.0406,1.34774,13.7692,8.77536,6.59014,15.3655, +Bottom Node(1),10.11.2006 23:03:22,459357,-7.32598e+06,2771.02,0.137722,369.239,10.0914,362.121,999.48,0.318,0.0256352,220.626,0.0668799,352.731,10.04,1.67562,14.9787,9.39026,7.11802,16.5083, +Bottom Node(1),01.12.2006,459357,-7.32598e+06,2771.02,0.110246,368.337,10.0899,361.953,999.611,0.318,0.106353,113.17,0.112441,351.521,10.0393,2.33475,15.3956,10.4327,6.38366,16.8164, +Bottom Node(1),01.12.2006,459357,-7.32598e+06,2771.02,0.110246,368.337,10.0899,361.953,999.611,0.318,0.106353,113.17,0.112441,351.521,10.0393,2.33475,15.3956,10.4327,6.38366,16.8164, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Perimeter Node(2),09.12.1997 22:12:00,459356,-7.32599e+06,2745.66,0.00640863,387.35,10.1155,391.783,1000.32,0.318,0.120259,2.39161,0.197101,327.843,25.172,0.0913131,35.1216,63.9404,-4.43316,59.5072, +Perimeter Node(2),05.02.1998 14:35:11,459356,-7.32599e+06,2745.89,3.048e-07,388.629,10.0768,391.475,1000.09,0.318,0.0952508,2.39161,0.806795,343.83,11.9876,0.194366,41.0965,47.645,-2.84589,44.7991, +Perimeter Node(2),12.04.1998 23:29:05,459357,-7.32599e+06,2746.63,3.048e-07,388.761,10.0788,394.614,1000.3,0.318,0.152488,2.39161,0.633538,347.39,11.4997,0.24931,32.8017,47.2235,-5.8524,41.3711, +Perimeter Node(2),16.08.1998 08:06:27,459357,-7.32599e+06,2747.59,3.048e-07,371.231,10.0662,395.675,999.891,0.318,0.120656,2.39161,0.579887,355.035,11.1556,0.522291,31.0904,40.6395,-24.4433,16.1962, +Perimeter Node(2),18.10.1998 00:25:09,459357,-7.32599e+06,2747.6,3.048e-07,360.409,10.1549,366.84,999.094,0.318,0.149275,2.39161,0.569658,329.567,10.5391,0.835004,13.2599,37.2725,-6.43132,30.8412, +Perimeter Node(2),19.12.1998 16:43:50,459358,-7.32599e+06,2748.8,3.048e-07,361.109,10.1058,375.886,999.394,0.318,0.134582,2.39161,0.5297,346.559,10.4977,0.928719,22.6161,29.3275,-14.7772,14.5503, +Perimeter Node(2),20.02.1999 09:02:31,459358,-7.32599e+06,2748.8,3.048e-07,358.032,10.131,363.303,998.955,0.318,0.145457,2.39161,0.563299,333.617,10.3694,1.06059,12.4445,29.6859,-5.27111,24.4147, +Perimeter Node(2),25.06.1999 17:39:53,459359,-7.32599e+06,2750.6,3.048e-07,358.589,10.1076,370.786,999.279,0.318,0.158844,2.39161,0.444617,346.108,10.3882,0.965134,14.0918,24.6772,-12.197,12.4803, +Perimeter Node(2),27.08.1999 09:58:34,459359,-7.326e+06,2750.56,3.048e-07,350.844,10.1429,355.759,998.626,0.318,0.170195,2.39161,0.47932,333.599,10.3055,1.15671,7.03141,22.1599,-4.91525,17.2446, +Perimeter Node(2),30.12.1999 18:35:56,459360,-7.326e+06,2752.95,3.048e-07,348.477,10.1232,362.259,998.805,0.318,0.0919561,2.39161,0.469006,342.752,10.3342,0.80188,6.14561,19.5066,-13.7814,5.72522, +Perimeter Node(2),06.09.2000 11:50:41,459360,-7.326e+06,2754.19,0.0361441,354.357,10.1539,357.139,998.656,0.318,0.0186278,3.98802,0.0208958,338.819,10.3489,0.626313,3.24452,18.3194,-2.78229,15.5371, +Perimeter Node(2),09.01.2001 20:28:03,459362,-7.326e+06,2759.51,3.048e-07,360.033,10.1289,364.938,999.168,0.318,0.108611,2.39161,0.300697,349.06,11.8405,0.0461747,4.24393,15.8773,-4.90439,10.973, +Perimeter Node(2),13.03.2001 12:46:44,459362,-7.326e+06,2759.48,3.048e-07,359.447,10.1332,364.859,999.024,0.318,0.331809,2.39161,0.217485,351.073,11.0751,0.362222,2.76912,13.7866,-5.41228,8.37431, +Perimeter Node(2),15.05.2001 05:05:26,459363,-7.326e+06,2759.34,3.048e-07,360.575,10.1224,366.003,999.161,0.318,0.256358,2.39161,0.22196,353.936,10.8195,0.500026,4.61908,12.0673,-5.42791,6.63935, +Perimeter Node(2),17.09.2001 13:42:48,459363,-7.326e+06,2759.34,3.048e-07,362.27,10.1205,365.117,999.15,0.318,0.216987,2.39161,0.225236,352.603,10.6934,0.604735,4.4838,12.5145,-2.84761,9.66687, +Perimeter Node(2),20.01.2002 22:20:10,459363,-7.326e+06,2759.34,3.048e-07,364.118,10.1087,365.541,999.239,0.318,0.166009,2.39161,0.181197,354.464,10.5024,0.822981,5.58821,11.0774,-1.42384,9.65357, +Perimeter Node(2),26.05.2002 06:57:32,459363,-7.326e+06,2760.74,0.00552644,366.022,10.104,366.018,999.326,0.318,0.15071,2.39161,0.189442,354.215,10.3691,0.886286,6.66218,11.8031,0.00432896,11.8074, +Perimeter Node(2),28.09.2002 15:34:55,459363,-7.326e+06,2760.99,0.019851,367.04,10.1074,366.61,999.378,0.318,0.143019,2.39161,0.232264,355.62,10.1195,1.0617,6.36815,10.9902,0.429779,11.42, +Perimeter Node(2),30.11.2002 07:53:36,459363,-7.326e+06,2763.4,0.0412266,368.009,10.1048,365.652,999.424,0.318,0.123124,5.91804,0.234462,354.193,10.0767,0.873339,6.06498,11.4587,2.35701,13.8157, +Perimeter Node(2),01.02.2003 00:12:17,459363,-7.326e+06,2763.69,0.00524309,367.493,10.1056,366.296,999.444,0.318,0.0304594,2.39161,0.239422,355.556,10.0533,0.965467,7.13207,10.74,1.19716,11.9372, +Perimeter Node(2),04.04.2003 16:30:58,459363,-7.326e+06,2763.75,0.0519422,368.827,10.1049,366.163,999.504,0.318,0.0258951,11.8361,0.282319,355.993,10.0459,1.07932,8.52824,10.17,2.66385,12.8338, +Perimeter Node(2),06.06.2003 08:49:39,459363,-7.326e+06,2765.05,0.0627478,368.646,10.1026,365.14,999.455,0.318,0.0232659,20.8661,0.262276,354.875,10.0438,0.960712,9.78674,10.2646,3.50646,13.7711, +Perimeter Node(2),09.10.2003 17:27:02,459363,-7.326e+06,2765.02,0.0607611,368.596,10.1027,365.052,999.513,0.318,0.0190339,18.9463,0.322064,354.943,10.0425,1.08137,9.87232,10.1086,3.54423,13.6528, +Perimeter Node(2),16.06.2004 10:41:46,459363,-7.326e+06,2765.73,0.0839663,368.905,10.1009,364.213,999.464,0.318,0.0158243,49.999,0.186047,354.293,10.0417,1.14463,11.0848,9.91997,4.69276,14.6127, +Perimeter Node(2),19.10.2004 19:19:08,459363,-7.326e+06,2766.24,0.104987,368.953,10.098,362.973,999.468,0.318,0.0123478,97.736,0.162503,352.927,10.0411,1.42515,12.423,10.0459,5.97996,16.0259, +Perimeter Node(2),27.06.2005 12:33:53,459363,-7.326e+06,2766.64,0.117283,369.03,10.0948,362.266,999.471,0.318,0.0120158,136.253,0.148117,351.824,10.0405,1.52092,14.2832,10.4418,6.7642,17.206, +Perimeter Node(2),10.11.2006 23:03:22,459364,-7.326e+06,2769.93,0.122633,369.145,10.0914,361.831,999.476,0.318,0.0171655,155.765,0.102041,350.757,10.0402,1.13407,11.497,11.0743,7.31364,18.3879, +Perimeter Node(2),01.12.2006,459364,-7.326e+06,2769.95,0.0953817,368.295,10.0899,362.108,999.611,0.318,0.0431792,73.2893,0.202102,350.303,10.0393,2.00083,11.7891,11.8049,6.18669,17.9916, +Perimeter Node(2),01.12.2006,459364,-7.326e+06,2769.95,0.0953817,368.295,10.0899,362.108,999.611,0.318,0.0431792,73.2893,0.202102,350.303,10.0393,2.00083,11.7891,11.8049,6.18669,17.9916, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Perimeter Node(3),09.12.1997 22:12:00,459357,-7.32599e+06,2743.14,0.032873,386.855,10.1155,391.862,1000.3,0.318,0.033865,3.00031,0.0900914,328.342,26.5993,0.255101,34.697,63.5201,-5.00675,58.5134, +Perimeter Node(3),05.02.1998 14:35:11,459358,-7.32599e+06,2744.82,3.048e-07,387.345,10.0768,391.791,1000.09,0.318,0.0384996,2.39161,0.409564,343.371,13.0011,0.316959,39.7196,48.42,-4.44562,43.9743, +Perimeter Node(3),12.04.1998 23:29:05,459360,-7.326e+06,2745.97,3.048e-07,387.85,10.0788,393.465,1000.26,0.318,0.0393979,2.39161,0.267447,346.32,11.2012,0.236567,31.9583,47.145,-5.61567,41.5293, +Perimeter Node(3),16.08.1998 08:06:27,459361,-7.326e+06,2747.93,3.048e-07,370.49,10.0662,396.48,999.891,0.318,0.0797814,2.39161,0.242954,353.395,11.7883,0.319249,30.1771,43.085,-25.9907,17.0943, +Perimeter Node(3),18.10.1998 00:25:09,459361,-7.326e+06,2747.88,3.048e-07,359.635,10.1549,367.346,999.057,0.318,0.117147,2.39161,0.234264,328.931,10.7717,0.613927,13.1985,38.4144,-7.71013,30.7043, +Perimeter Node(3),19.12.1998 16:43:50,459362,-7.326e+06,2748.91,3.048e-07,360.43,10.1058,376.004,999.394,0.318,0.103141,2.39161,0.187011,345.326,10.673,0.70256,23.5392,30.6786,-15.5743,15.1043, +Perimeter Node(3),20.02.1999 09:02:31,459362,-7.326e+06,2748.86,3.048e-07,357.124,10.131,363.529,998.914,0.318,0.156085,2.39161,0.225039,333.312,10.4697,0.853609,12.758,30.2168,-6.40423,23.8126, +Perimeter Node(3),25.06.1999 17:39:53,459364,-7.326e+06,2750.1,3.048e-07,357.845,10.1076,370.429,999.279,0.318,0.154283,2.39161,0.157148,345.495,10.4891,0.862512,16.1666,24.9334,-12.5834,12.35, +Perimeter Node(3),27.08.1999 09:58:34,459364,-7.32601e+06,2750,3.048e-07,349.989,10.1429,355.364,998.587,0.318,0.182161,2.39161,0.171325,333.502,10.3671,1.07792,8.01733,21.8618,-5.3748,16.487, +Perimeter Node(3),30.12.1999 18:35:56,459364,-7.326e+06,2750.22,3.048e-07,347.331,10.1232,358.925,998.805,0.318,0.155898,2.39161,0.179523,342.839,10.2621,1.26492,11.0687,16.0863,-11.5942,4.49212, +Perimeter Node(3),06.09.2000 11:50:41,459366,-7.32601e+06,2752.89,0.0488822,354.201,10.1539,356.379,998.599,0.318,0.0137539,9.865,0.0127188,338.793,10.3951,0.856544,4.30186,17.5855,-2.17785,15.4076, +Perimeter Node(3),09.01.2001 20:28:03,459369,-7.32601e+06,2757.88,3.048e-07,358.867,10.1289,364.334,999.158,0.318,0.22239,2.39161,0.144893,350.825,10.8147,0.0297994,3.01777,13.509,-5.46661,8.0424, +Perimeter Node(3),13.03.2001 12:46:44,459369,-7.32601e+06,2757.8,3.048e-07,358.469,10.1332,364.052,998.979,0.318,0.135122,2.39161,0.119815,350.604,10.4496,0.239652,3.78986,13.4483,-5.58383,7.86444, +Perimeter Node(3),15.05.2001 05:05:26,459370,-7.32602e+06,2757.47,3.048e-07,359.658,10.1224,365.535,999.119,0.318,0.124739,2.39161,0.101327,353.736,10.1985,0.268552,5.56533,11.7989,-5.87708,5.92184, +Perimeter Node(3),17.09.2001 13:42:48,459370,-7.32602e+06,2757.47,3.048e-07,361.363,10.1205,364.801,999.108,0.318,0.105993,2.39161,0.104082,352.656,10.1806,0.326551,5.32799,12.1449,-3.43792,8.70697, +Perimeter Node(3),20.01.2002 22:20:10,459370,-7.32602e+06,2757.4,3.048e-07,363.149,10.1087,365.158,999.194,0.318,0.0844743,2.39161,0.111357,354.42,10.1223,0.434048,7.20834,10.7381,-2.00888,8.72927, +Perimeter Node(3),26.05.2002 06:57:32,459370,-7.32601e+06,2757.53,0.000310272,364.66,10.104,365.777,999.263,0.318,0.0664366,2.39161,0.139092,355.288,10.1261,0.597344,8.06989,10.4895,-1.11727,9.37219, +Perimeter Node(3),28.09.2002 15:34:55,459370,-7.32601e+06,2757.59,0.012411,365.696,10.1074,365.99,999.315,0.318,0.0630941,2.39161,0.131338,355.179,10.0861,0.73505,8.25112,10.8108,-0.294035,10.5167, +Perimeter Node(3),30.11.2002 07:53:36,459369,-7.32601e+06,2757.74,3.048e-07,366.151,10.1048,366.372,999.337,0.318,0.0542295,2.39161,0.148861,355.782,10.0654,0.891813,8.76103,10.5905,-0.221173,10.3693, +Perimeter Node(3),01.02.2003 00:12:17,459369,-7.32601e+06,2757.98,3.048e-07,365.535,10.1056,366.422,999.411,0.318,0.0546483,2.39161,0.155628,355.501,10.0566,0.994464,8.68836,10.921,-0.886872,10.0342, +Perimeter Node(3),04.04.2003 16:30:58,459369,-7.32601e+06,2758.07,0.00718498,367.261,10.1049,366.797,999.477,0.318,0.0534287,2.39161,0.114365,356.11,10.0498,1.07792,8.67639,10.6868,0.464177,11.151, +Perimeter Node(3),06.06.2003 08:49:39,459369,-7.32601e+06,2758.15,0.00708846,367.284,10.1026,366.572,999.398,0.318,0.051024,2.39161,0.0817972,355.895,10.0461,1.15958,9.39811,10.6766,0.712585,11.3892, +Perimeter Node(3),09.10.2003 17:27:02,459369,-7.32601e+06,2758.21,3.048e-07,367.04,10.1027,366.318,999.482,0.318,0.0487346,2.39161,0.104542,355.365,10.0439,1.23558,9.62091,10.9535,0.722414,11.6759, +Perimeter Node(3),16.06.2004 10:41:46,459369,-7.32601e+06,2758.38,0.0197526,367.883,10.1009,366.15,999.416,0.318,0.0451686,2.39161,0.0499857,355.173,10.0424,1.35705,9.92448,10.9772,1.733,12.7102, +Perimeter Node(3),19.10.2004 19:19:08,459369,-7.32601e+06,2758.63,0.02634,368.031,10.098,365.424,999.424,0.318,0.0400182,2.39161,0.0429432,354.071,10.0413,1.62015,10.6611,11.3524,2.60775,13.9601, +Perimeter Node(3),27.06.2005 12:33:53,459369,-7.32601e+06,2758.86,0.0307103,368.134,10.0948,365.09,999.429,0.318,0.0402864,2.44623,0.04044,353.53,10.0406,1.72441,11.8157,11.5608,3.0436,14.6044, +Perimeter Node(3),10.11.2006 23:03:22,459369,-7.32601e+06,2761.48,0.0626152,368.221,10.0914,363.617,999.433,0.318,0.047007,20.7342,0.111121,351.39,10.0401,1.45843,11.0232,12.227,4.60427,16.8313, +Perimeter Node(3),01.12.2006,459369,-7.32601e+06,2761.77,0.019481,367.197,10.0899,363.59,999.611,0.318,0.0685671,2.39161,0.0529233,350.482,10.0393,2.21615,11.1912,13.1081,3.60678,16.7148, +Perimeter Node(3),01.12.2006,459369,-7.32601e+06,2761.77,0.019481,367.197,10.0899,363.59,999.611,0.318,0.0685671,2.39161,0.0529233,350.482,10.0393,2.21615,11.1912,13.1081,3.60678,16.7148, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Perimeter Node(4),09.12.1997 22:12:00,459359,-7.326e+06,2741.63,0.0309243,386.688,10.1155,391.56,1000.29,0.318,0.272023,2.49774,0.0202934,327.011,27.799,0.251861,35.258,64.5486,-4.87174,59.6768, +Perimeter Node(4),05.02.1998 14:35:11,459361,-7.326e+06,2744.02,3.048e-07,387.159,10.0768,391.886,1000.09,0.318,0.032042,2.39161,0.0525178,342.673,13.8152,0.342729,38.9233,49.2123,-4.72705,44.4852, +Perimeter Node(4),12.04.1998 23:29:05,459362,-7.326e+06,2745.88,3.048e-07,387.793,10.0788,393.796,1000.26,0.318,0.0386157,2.39161,0.052244,345.205,11.7069,0.186545,29.5761,48.5909,-6.0033,42.5876, +Perimeter Node(4),16.08.1998 08:06:27,459364,-7.32601e+06,2747.12,3.048e-07,370.365,10.0662,394.93,999.891,0.318,0.115891,2.39161,0.0422459,351.838,11.4012,0.207572,32.7329,43.0918,-24.5648,18.527, +Perimeter Node(4),18.10.1998 00:25:09,459364,-7.32601e+06,2747.09,3.048e-07,359.503,10.1549,366.039,999.051,0.318,0.147791,2.39161,0.0743943,328.181,10.522,0.478464,14.5307,37.8573,-6.53572,31.3216, +Perimeter Node(4),19.12.1998 16:43:50,459366,-7.32601e+06,2748.32,3.048e-07,360.339,10.1058,375.432,999.394,0.318,0.137584,2.39161,0.0441382,343.748,10.8563,0.516833,26.0599,31.6839,-15.0928,16.5911, +Perimeter Node(4),20.02.1999 09:02:31,459366,-7.32601e+06,2748.27,3.048e-07,356.954,10.131,363.161,998.906,0.318,0.204058,2.39161,0.153015,332.489,10.5718,0.643647,14.1134,30.6716,-6.20725,24.4643, +Perimeter Node(4),25.06.1999 17:39:53,459369,-7.32601e+06,2749.41,3.048e-07,357.775,10.1076,370.088,999.279,0.318,0.0840935,2.39161,0.0576747,343.964,10.6694,0.602413,19.1447,26.1245,-12.3129,13.8116, +Perimeter Node(4),27.08.1999 09:58:34,459369,-7.32602e+06,2749.26,3.048e-07,349.857,10.1429,355.16,998.58,0.318,0.153201,2.39161,0.138698,333.181,10.3996,0.836065,9.11473,21.9785,-5.30243,16.676, +Perimeter Node(4),30.12.1999 18:35:56,459370,-7.32602e+06,2751.16,3.048e-07,347.363,10.1232,361.287,998.805,0.318,0.163363,2.39161,0.019617,341.476,10.4844,0.762072,10.8914,19.8105,-13.9234,5.88711, +Perimeter Node(4),06.09.2000 11:50:41,459372,-7.32602e+06,2751.87,0.0373378,354.094,10.1539,356.293,998.581,0.318,0.229897,4.39636,0.00662653,338.717,10.42,0.847144,4.98979,17.5755,-2.19843,15.3771, +Perimeter Node(4),09.01.2001 20:28:03,459376,-7.32603e+06,2755.77,3.048e-07,358.68,10.1289,364.018,999.149,0.318,0.0228678,2.39161,0.0380462,351.115,10.4668,0.452901,3.25431,12.903,-5.33748,7.56555, +Perimeter Node(4),13.03.2001 12:46:44,459376,-7.32603e+06,2755.77,3.048e-07,358.359,10.1332,362.08,998.974,0.318,0.0315903,2.39161,0.0407531,347.981,10.3348,0.531413,3.89245,14.0984,-3.72107,10.3774, +Perimeter Node(4),15.05.2001 05:05:26,459377,-7.32603e+06,2755.16,3.048e-07,359.441,10.1224,363.969,999.115,0.318,0.00761529,2.39161,0.0278433,351.512,10.299,0.71539,4.75324,12.457,-4.52838,7.92865, +Perimeter Node(4),17.09.2001 13:42:48,459377,-7.32603e+06,2755.15,0.00226766,361.235,10.1205,363.716,999.102,0.318,0.00729154,2.39161,0.0343424,351.01,10.2739,0.762483,4.29414,12.706,-2.48019,10.2258, +Perimeter Node(4),20.01.2002 22:20:10,459378,-7.32603e+06,2755.18,0.0171154,363.028,10.1087,364.15,999.188,0.318,0.00665211,2.39161,0.0251692,352.465,10.2242,0.845885,5.55669,11.6843,-1.1217,10.5626, +Perimeter Node(4),26.05.2002 06:57:32,459377,-7.32603e+06,2756.1,0.0153691,364.598,10.104,365.249,999.26,0.318,0.00931977,2.39161,0.0215394,353.394,10.1908,0.658133,5.87532,11.8546,-0.651105,11.2035, +Perimeter Node(4),28.09.2002 15:34:55,459377,-7.32603e+06,2756.25,0.0243495,365.607,10.1074,365.436,999.311,0.318,0.0113565,2.39161,0.01812,353.203,10.14,0.684754,6.59031,12.2327,0.171462,12.4041, +Perimeter Node(4),30.11.2002 07:53:36,459377,-7.32603e+06,2756.67,0.0132544,365.988,10.1048,365.946,999.33,0.318,0.0136898,2.39161,0.0304553,353.816,10.1027,0.606268,7.23069,12.1292,0.0422219,12.1714, +Perimeter Node(4),01.02.2003 00:12:17,459376,-7.32603e+06,2756.76,3.048e-07,365.367,10.1056,365.911,999.405,0.318,0.0431547,2.39161,0.0207636,353.433,10.0819,0.620668,7.73612,12.4783,-0.543754,11.9345, +Perimeter Node(4),04.04.2003 16:30:58,459376,-7.32603e+06,2756.79,0.0162867,366.876,10.1049,366.292,999.472,0.318,0.0448724,2.39161,0.0431328,354.034,10.0687,0.646246,7.90434,12.2578,0.58381,12.8416, +Perimeter Node(4),06.06.2003 08:49:39,459376,-7.32603e+06,2756.81,0.0129189,366.846,10.1026,366.149,999.379,0.318,0.0448784,2.39161,0.044085,353.874,10.0596,0.675768,8.71629,12.275,0.696574,12.9715, +Perimeter Node(4),09.10.2003 17:27:02,459376,-7.32603e+06,2756.83,0.00613112,366.582,10.1027,365.955,999.476,0.318,0.0446346,2.39161,0.0463265,353.342,10.0536,0.704053,9.07466,12.6128,0.627708,13.2405, +Perimeter Node(4),16.06.2004 10:41:46,459376,-7.32603e+06,2756.82,0.0158903,367.365,10.1009,365.864,999.391,0.318,0.0423081,2.39161,0.048084,353.208,10.0477,0.771478,9.53682,12.6559,1.50096,14.1569, +Perimeter Node(4),19.10.2004 19:19:08,459376,-7.32603e+06,2756.85,0.0139425,367.449,10.098,365.277,999.397,0.318,0.0401665,2.39161,0.0528185,352.22,10.0433,0.90516,10.7609,13.057,2.17204,15.229, +Perimeter Node(4),27.06.2005 12:33:53,459376,-7.32603e+06,2756.86,0.0129852,367.52,10.0948,365.066,999.4,0.318,0.0409285,2.39161,0.0536433,351.835,10.0418,0.976788,12.062,13.2311,2.45427,15.6853, +Perimeter Node(4),10.11.2006 23:03:22,459376,-7.32603e+06,2756.89,0.00697791,367.449,10.0914,364.555,999.396,0.318,0.0400392,2.39161,0.0416702,350.859,10.0406,1.12725,13.0491,13.6961,2.89438,16.5905, +Perimeter Node(4),01.12.2006,459376,-7.32603e+06,2756.93,3.048e-07,366.24,10.0899,364.511,999.611,0.318,0.0604492,2.39161,0.0713868,349.796,10.0395,1.66451,13.5158,14.7141,1.72948,16.4435, +Perimeter Node(4),01.12.2006,459376,-7.32603e+06,2756.93,3.048e-07,366.24,10.0899,364.511,999.611,0.318,0.0604492,2.39161,0.0713868,349.796,10.0395,1.66451,13.5158,14.7141,1.72948,16.4435, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Perimeter Node(5),09.12.1997 22:12:00,459361,-7.326e+06,2740.55,0.0155133,386.562,10.1155,390.9,1000.29,0.318,0.114142,2.39161,0.0342895,324.273,28.9712,0.13667,36.6253,66.6266,-4.33855,62.2881, +Perimeter Node(5),05.02.1998 14:35:11,459363,-7.326e+06,2741.58,3.048e-07,386.766,10.0768,389.919,1000.09,0.318,0.0229634,2.39161,0.140073,341.999,14.4433,0.438945,35.6514,47.9194,-3.15257,44.7668, +Perimeter Node(5),12.04.1998 23:29:05,459365,-7.32601e+06,2743.88,3.048e-07,387.326,10.0788,393.677,1000.24,0.318,0.0187312,2.39161,0.117325,343.954,13.5962,0.302446,23.5801,49.7232,-6.3509,43.3723, +Perimeter Node(5),16.08.1998 08:06:27,459368,-7.32601e+06,2746.74,3.048e-07,370.16,10.0662,394.751,999.891,0.318,0.146341,2.39161,0.075386,350.082,11.6322,0.174819,32.8671,44.6691,-24.5911,20.078, +Perimeter Node(5),18.10.1998 00:25:09,459368,-7.32601e+06,2746.46,3.048e-07,359.329,10.1549,365.384,999.045,0.318,0.0339079,2.39161,0.0800626,327.165,10.4539,0.383786,14.8618,38.2192,-6.05487,32.1643, +Perimeter Node(5),19.12.1998 16:43:50,459370,-7.32602e+06,2747.89,3.048e-07,360.181,10.1058,374.828,999.394,0.318,0.0593372,2.39161,0.0908625,341.974,10.8232,0.285635,27.9282,32.8539,-14.6466,18.2073, +Perimeter Node(5),20.02.1999 09:02:31,459370,-7.32602e+06,2747.58,3.048e-07,356.763,10.131,362.261,998.897,0.318,0.139807,2.39161,0.170298,331.535,10.3625,0.375975,15.6211,30.7265,-5.49889,25.2276, +Perimeter Node(5),25.06.1999 17:39:53,459374,-7.32603e+06,2748.62,3.048e-07,357.264,10.1076,370.015,999.279,0.318,0.154469,2.39161,0.284914,342.008,10.9593,0.310413,19.175,28.0076,-12.751,15.2566, +Perimeter Node(5),27.08.1999 09:58:34,459374,-7.32603e+06,2748.31,3.048e-07,349.511,10.1429,354.931,998.564,0.318,0.225938,2.39161,0.174764,332.384,10.4332,0.556546,9.33015,22.5467,-5.41954,17.1271, +Perimeter Node(5),30.12.1999 18:35:56,459375,-7.32603e+06,2749.69,3.048e-07,347.146,10.1232,360.521,998.805,0.318,0.057818,2.39161,0.0477993,339.903,10.6789,0.547035,14.3887,20.6182,-13.3754,7.24284, +Perimeter Node(5),06.09.2000 11:50:41,459377,-7.32603e+06,2750.35,0.0247125,353.903,10.1539,355.972,998.554,0.318,0.141739,2.39161,0.0193448,337.869,10.5744,0.66116,6.79247,18.1035,-2.06892,16.0346, +Perimeter Node(5),09.01.2001 20:28:03,459382,-7.32604e+06,2752.91,3.048e-07,358.199,10.1289,363.003,999.135,0.318,0.213201,2.39161,0.0746791,350.101,10.7529,0.737249,7.47683,12.9024,-4.80446,8.09795, +Perimeter Node(5),13.03.2001 12:46:44,459382,-7.32604e+06,2752.91,0.00530312,358.011,10.1332,360.396,998.957,0.318,0.214578,2.39161,0.0360221,347.087,10.4566,0.929839,5.25125,13.3092,-2.38524,10.924, +Perimeter Node(5),15.05.2001 05:05:26,459384,-7.32605e+06,2752.19,3.048e-07,358.983,10.1224,362.086,999.101,0.318,0.196398,2.39161,0.0539086,350.662,10.3596,0.994395,6.93809,11.4245,-3.10292,8.32155, +Perimeter Node(5),17.09.2001 13:42:48,459384,-7.32605e+06,2752.19,0.00993512,360.868,10.1205,362.219,999.084,0.318,0.179826,2.39161,0.0370676,350.621,10.3019,1.10562,5.76303,11.5974,-1.35058,10.2469, +Perimeter Node(5),20.01.2002 22:20:10,459385,-7.32605e+06,2752.69,0.0240942,362.753,10.1087,363.077,999.175,0.318,0.16831,2.39161,0.0182504,351.647,10.2562,1.18442,6.63431,11.4299,-0.323549,11.1063, +Perimeter Node(5),26.05.2002 06:57:32,459385,-7.32605e+06,2753.59,0.0241684,364.361,10.104,364.455,999.249,0.318,0.0110382,2.39161,0.012128,352.507,10.2329,1.17414,6.18696,11.9488,-0.0941814,11.8546, +Perimeter Node(5),28.09.2002 15:34:55,459384,-7.32605e+06,2753.87,0.0304633,365.363,10.1074,364.754,999.3,0.318,0.00574825,2.39161,0.0159854,352.204,10.1893,1.25787,6.35137,12.5501,0.609153,13.1593, +Perimeter Node(5),30.11.2002 07:53:36,459384,-7.32605e+06,2754.36,0.0174464,365.719,10.1048,365.356,999.317,0.318,0.00570588,2.39161,0.0413302,352.67,10.1507,1.23565,6.42734,12.6855,0.363457,13.0489, +Perimeter Node(5),01.02.2003 00:12:17,459384,-7.32604e+06,2754.66,3.048e-07,365.071,10.1056,365.375,999.394,0.318,0.00687416,2.39161,0.0385886,352.165,10.1257,1.21942,6.65853,13.21,-0.303756,12.9062, +Perimeter Node(5),04.04.2003 16:30:58,459383,-7.32604e+06,2754.73,0.0206931,366.604,10.1049,365.741,999.462,0.318,0.0066187,2.39161,0.0624408,352.675,10.1051,1.24784,6.76603,13.0662,0.862926,13.9292, +Perimeter Node(5),06.06.2003 08:49:39,459383,-7.32604e+06,2754.76,0.0180558,366.494,10.1026,365.604,999.366,0.318,0.00644319,2.39161,0.0676476,352.461,10.0887,1.2857,7.38518,13.1437,0.889237,14.033, +Perimeter Node(5),09.10.2003 17:27:02,459383,-7.32604e+06,2754.8,0.0095841,366.167,10.1027,365.462,999.467,0.318,0.00630142,2.39161,0.0761072,351.929,10.0766,1.3184,7.65644,13.533,0.705932,14.2389, +Perimeter Node(5),16.06.2004 10:41:46,459383,-7.32604e+06,2754.8,0.0212413,366.988,10.1009,365.451,999.373,0.318,0.00589926,2.39161,0.0638009,351.768,10.062,1.40659,8.06265,13.6838,1.53618,15.22, +Perimeter Node(5),19.10.2004 19:19:08,459383,-7.32604e+06,2754.84,0.0188632,367.037,10.098,364.996,999.378,0.318,0.00533949,2.39161,0.0709206,350.733,10.0496,1.56677,9.19818,14.2627,2.04128,16.304, +Perimeter Node(5),27.06.2005 12:33:53,459383,-7.32604e+06,2754.85,0.0185868,367.113,10.0948,364.818,999.381,0.318,0.00508743,2.39161,0.0698597,350.279,10.0456,1.64794,10.3098,14.5388,2.29588,16.8347, +Perimeter Node(5),10.11.2006 23:03:22,459383,-7.32604e+06,2754.88,0.0167861,366.95,10.0914,364.31,999.373,0.318,0.00466466,2.39161,0.0695507,349.217,10.0424,1.80633,11.2843,15.0926,2.64029,17.7329, +Perimeter Node(5),01.12.2006,459383,-7.32604e+06,2754.91,3.048e-07,366.017,10.0899,363.99,999.611,0.318,0.00403785,2.39161,0.0786514,347.353,10.0403,2.10503,12.3579,16.6376,2.02721,18.6648, +Perimeter Node(5),01.12.2006,459383,-7.32604e+06,2754.91,3.048e-07,366.017,10.0899,363.99,999.611,0.318,0.00403785,2.39161,0.0786514,347.353,10.0403,2.10503,12.3579,16.6376,2.02721,18.6648, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Perimeter Node(6),09.12.1997 22:12:00,459363,-7.32601e+06,2739.05,0.0184043,386.342,10.1155,388.955,1000.28,0.318,0.125562,2.39161,0.0629654,322.851,29.1364,0.122776,34.739,66.1043,-2.6127,63.4916, +Perimeter Node(6),05.02.1998 14:35:11,459365,-7.32601e+06,2739.87,0.00249854,386.068,10.0768,388.157,1000.09,0.318,0.23152,2.39161,0.321618,340.443,15.0209,0.367453,24.1775,47.714,-2.08894,45.6251, +Perimeter Node(6),12.04.1998 23:29:05,459368,-7.32602e+06,2741.35,3.048e-07,386.646,10.0788,390.639,1000.21,0.318,0.101864,2.39161,0.247732,342.352,13.8891,0.223987,23.4365,48.2874,-3.99339,44.294, +Perimeter Node(6),16.08.1998 08:06:27,459371,-7.32602e+06,2744.42,3.048e-07,369.767,10.0662,392.947,999.891,0.318,0.0802571,2.39161,0.0999155,348.302,12.4381,0.190505,30.9651,44.6451,-23.1802,21.4649, +Perimeter Node(6),18.10.1998 00:25:09,459371,-7.32602e+06,2743.81,3.048e-07,358.792,10.1549,362.626,999.024,0.318,0.0163126,2.39161,0.144882,326.157,10.8093,0.472113,13.2964,36.4693,-3.83415,32.6352, +Perimeter Node(6),19.12.1998 16:43:50,459374,-7.32603e+06,2745.89,3.048e-07,359.31,10.1058,372.903,999.394,0.318,0.0341211,2.39161,0.232932,340.279,10.7692,0.25657,17.4411,32.6235,-13.5924,19.0311, +Perimeter Node(6),20.02.1999 09:02:31,459374,-7.32603e+06,2745.16,3.048e-07,356.471,10.131,360.138,998.883,0.318,0.0662159,2.39161,0.130142,330.12,10.4608,0.387604,12.4062,30.0182,-3.66786,26.3503, +Perimeter Node(6),25.06.1999 17:39:53,459379,-7.32604e+06,2746.11,3.048e-07,353.742,10.1076,367.586,999.279,0.318,0.18083,2.39161,0.916427,339.622,10.6313,0.0542457,15.6529,27.9637,-13.8432,14.1205, +Perimeter Node(6),27.08.1999 09:58:34,459379,-7.32604e+06,2746.29,3.048e-07,348.956,10.1429,353.663,998.539,0.318,0.0538065,2.39161,0.170791,331.19,10.2603,0.328365,7.79809,22.4731,-4.70665,17.7664, +Perimeter Node(6),30.12.1999 18:35:56,459380,-7.32604e+06,2748.13,3.048e-07,346.559,10.1232,359.203,998.805,0.318,0.120799,2.39161,0.117642,338.09,10.4985,0.245074,13.585,21.113,-12.6437,8.46929, +Perimeter Node(6),06.09.2000 11:50:41,459383,-7.32604e+06,2748.83,0.00378973,353.562,10.1539,355.247,998.476,0.318,0.264169,2.39161,0.05502,336.39,10.6787,0.339527,6.64,18.857,-1.68484,17.1722, +Perimeter Node(6),09.01.2001 20:28:03,459389,-7.32606e+06,2750.41,3.048e-07,357.332,10.1289,360.942,999.12,0.318,0.105664,2.39161,0.140531,347.396,11.193,0.199443,9.1032,13.5458,-3.60971,9.93614, +Perimeter Node(6),13.03.2001 12:46:44,459389,-7.32606e+06,2750.58,0.0066981,357.651,10.1332,358.995,998.94,0.318,0.329247,2.39161,0.0371309,346.432,10.602,0.577262,6.3421,12.5625,-1.34417,11.2184, +Perimeter Node(6),15.05.2001 05:05:26,459394,-7.32607e+06,2749.67,0.0122732,358.713,10.1224,359.53,999.089,0.318,0.0658349,2.39161,0.0464996,347.608,10.571,0.23083,8.35307,11.9225,-0.817145,11.1054, +Perimeter Node(6),17.09.2001 13:42:48,459392,-7.32606e+06,2750.23,0.00340548,360.365,10.1205,361.06,999.06,0.318,0.119303,2.39161,0.0752449,349.892,10.4083,0.654555,7.56361,11.1682,-0.695529,10.4727, +Perimeter Node(6),20.01.2002 22:20:10,459393,-7.32606e+06,2750.46,0.0316163,362.486,10.1087,361.211,999.162,0.318,0.0762464,2.66918,0.0194243,349.872,10.3371,0.760772,10.0727,11.3392,1.27502,12.6142, +Perimeter Node(6),26.05.2002 06:57:32,459392,-7.32606e+06,2751.13,0.0281718,364.018,10.104,362.889,999.232,0.318,0.0899285,2.39161,0.018004,351.1,10.2947,0.979942,9.6917,11.789,1.12937,12.9184, +Perimeter Node(6),28.09.2002 15:34:55,459392,-7.32606e+06,2751.37,0.0305918,364.923,10.1074,363.462,999.279,0.318,0.0918937,2.41803,0.0409046,351.072,10.2331,1.25005,9.36882,12.3905,1.46105,13.8515, +Perimeter Node(6),30.11.2002 07:53:36,459392,-7.32606e+06,2751.58,0.0202032,364.995,10.1048,364.026,999.283,0.318,0.076501,2.39161,0.0887645,351.379,10.1932,1.39817,9.57554,12.6466,0.969244,13.6159, +Perimeter Node(6),01.02.2003 00:12:17,459391,-7.32606e+06,2751.99,0.00434874,364.386,10.1056,364.292,999.373,0.318,0.13246,2.39161,0.0908393,350.974,10.1713,1.52964,8.86997,13.3174,0.0941076,13.4115, +Perimeter Node(6),04.04.2003 16:30:58,459390,-7.32606e+06,2752.1,0.0186474,365.725,10.1049,364.702,999.447,0.318,0.125516,2.39161,0.117803,351.407,10.1502,1.61685,8.69059,13.2949,1.02309,14.318, +Perimeter Node(6),06.06.2003 08:49:39,459390,-7.32606e+06,2752.15,0.0162381,365.58,10.1026,364.602,999.329,0.318,0.120038,2.39161,0.127175,351.143,10.1317,1.69278,9.13292,13.4599,0.977648,14.4375, +Perimeter Node(6),09.10.2003 17:27:02,459390,-7.32606e+06,2752.21,0.00748263,365.165,10.1027,364.557,999.451,0.318,0.115164,2.39161,0.145495,350.649,10.1157,1.76647,9.16747,13.908,0.608184,14.5162, +Perimeter Node(6),16.06.2004 10:41:46,459390,-7.32606e+06,2752.18,0.0192703,366.145,10.1009,364.652,999.333,0.318,0.107211,2.39161,0.115685,350.438,10.0928,1.9009,9.35408,14.2141,1.49265,15.7068, +Perimeter Node(6),19.10.2004 19:19:08,459390,-7.32606e+06,2752.26,0.012825,366.098,10.098,364.5,999.334,0.318,0.0940026,2.39161,0.134204,349.419,10.0667,2.17474,10.1517,15.0815,1.59733,16.6788, +Perimeter Node(6),27.06.2005 12:33:53,459390,-7.32606e+06,2752.28,0.0120475,366.191,10.0948,364.427,999.338,0.318,0.0886789,2.39161,0.130934,348.923,10.0578,2.30818,11.0761,15.5039,1.7636,17.2675, +Perimeter Node(6),10.11.2006 23:03:22,459390,-7.32606e+06,2752.31,0.00799028,366.019,10.0914,364.122,999.33,0.318,0.0797303,2.39161,0.130541,347.841,10.049,2.57271,11.7371,16.2812,1.89688,18.1781, +Perimeter Node(6),01.12.2006,459390,-7.32606e+06,2752.36,3.048e-07,365.14,10.0899,363.901,999.609,0.318,0.0673908,2.39161,0.122817,345.814,10.0432,3.05272,12.4839,18.087,1.2389,19.3259, +Perimeter Node(6),01.12.2006,459390,-7.32606e+06,2752.36,3.048e-07,365.14,10.0899,363.901,999.609,0.318,0.0673908,2.39161,0.122817,345.814,10.0432,3.05272,12.4839,18.087,1.2389,19.3259, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Right Node(7),09.12.1997 22:12:00,459364,-7.32601e+06,2737,0.0204903,385.988,10.1155,383.054,1000.26,0.318,0.139923,2.39161,0.0870045,321.589,26.0864,0.10883,30.7933,61.4646,2.93393,64.3985, +Right Node(7),05.02.1998 14:35:11,459366,-7.32601e+06,2737.64,0.0195072,385.115,10.0768,382.66,1000.09,0.318,0.44728,2.39161,0.44374,339.126,12.9126,0.271245,14.8225,43.5334,2.45482,45.9882, +Right Node(7),12.04.1998 23:29:05,459369,-7.32602e+06,2738.34,0.0159466,385.558,10.0788,384.86,1000.16,0.318,0.239031,2.39161,0.357158,340.999,12.4475,0.0852523,28.6353,43.8616,0.697367,44.5589, +Right Node(7),16.08.1998 08:06:27,459373,-7.32603e+06,2739.5,3.048e-07,369.028,10.0662,386.419,999.891,0.318,0.102757,2.39161,0.126425,346.948,11.9941,0.212468,20.8174,39.4707,-17.3909,22.0797, +Right Node(7),18.10.1998 00:25:09,459373,-7.32603e+06,2739.53,0.016208,357.812,10.1549,357.031,998.985,0.318,0.174674,2.39161,0.218705,325.259,10.8292,0.543941,8.96219,31.7719,0.781277,32.5532, +Right Node(7),19.12.1998 16:43:50,459376,-7.32603e+06,2740.28,3.048e-07,357.557,10.1058,366.164,999.394,0.318,0.426054,2.39161,0.367114,338.69,10.7094,0.200547,5.28061,27.4747,-8.60697,18.8678, +Right Node(7),20.02.1999 09:02:31,459376,-7.32603e+06,2740.33,0.0233086,355.866,10.131,354.359,998.855,0.318,0.0592217,2.39161,0.111901,328.803,10.5426,0.264501,12.8831,25.5563,1.50715,27.0634, +Right Node(7),25.06.1999 17:39:53,459382,-7.32605e+06,2741.48,3.048e-07,347.942,10.1076,363.046,999.279,0.318,3.93954,2.39161,1.4121,338.279,11.0321,0.0444,9.73498,24.7665,-15.1035,9.663, +Right Node(7),27.08.1999 09:58:34,459381,-7.32604e+06,2741.06,3.048e-07,348.08,10.1429,348.645,998.499,0.318,0.187665,2.39161,0.178533,330.005,10.4251,0.453442,6.18364,18.6396,-0.564902,18.0747, +Right Node(7),30.12.1999 18:35:56,459385,-7.32605e+06,2742.06,3.048e-07,345.06,10.1232,353.853,998.71,0.318,0.351005,2.39161,0.187624,335.847,10.5313,0.116892,11.948,18.0063,-8.79274,9.21356, +Right Node(7),06.09.2000 11:50:41,459389,-7.32606e+06,2742.4,0.0350186,352.359,10.1539,350.311,998.315,0.318,0.195384,3.62694,0.117407,333.875,10.714,0.0924182,4.99038,16.4365,2.04732,18.4838, +Right Node(7),09.01.2001 20:28:03,459394,-7.32607e+06,2743.31,0.0372686,355.491,10.1289,354.515,999.084,0.318,2.17542,4.37194,0.337892,345.13,10.4795,0.00966309,0.224209,9.38527,0.975388,10.3607, +Right Node(7),13.03.2001 12:46:44,459394,-7.32607e+06,2743.06,0.076661,356.818,10.1332,353.098,998.902,0.318,0.0469593,38.0512,0.218496,343.06,10.2728,0.12982,8.46108,10.0379,3.72026,13.7582, +Right Node(7),15.05.2001 05:05:26,459398,-7.32608e+06,2743.99,0.0401706,358.079,10.1224,355.983,999.062,0.318,0.0806803,5.47485,0.0592468,345.482,10.4512,0.0750995,5.60874,10.5013,2.09587,12.5972, +Right Node(7),17.09.2001 13:42:48,459398,-7.32608e+06,2743.83,0.0219862,358.951,10.1205,357.354,998.993,0.318,0.182241,2.39161,0.121283,347.077,10.2819,0.20394,5.17982,10.2776,1.59696,11.8746, +Right Node(7),20.01.2002 22:20:10,459398,-7.32608e+06,2743.99,0.0503085,361.774,10.1087,358.097,999.129,0.318,0.0585089,10.754,0.0540646,347.329,10.2619,0.294446,6.52146,10.7686,3.67621,14.4448, +Right Node(7),26.05.2002 06:57:32,459398,-7.32608e+06,2744.68,0.0462436,363.293,10.104,359.876,999.198,0.318,0.0422204,8.35221,0.0531761,348.545,10.226,0.380488,6.46423,11.3311,3.41654,14.7476, +Right Node(7),28.09.2002 15:34:55,459398,-7.32608e+06,2745.29,0.0402158,363.909,10.1074,360.914,999.232,0.318,0.134519,5.49332,0.110542,348.793,10.1965,0.560259,7.46347,12.1211,2.99574,15.1168, +Right Node(7),30.11.2002 07:53:36,459397,-7.32608e+06,2745.72,0.0273545,363.713,10.1048,361.785,999.224,0.318,0.10256,2.39161,0.125375,349.245,10.1715,0.741115,8.73027,12.5394,1.92785,14.4672, +Right Node(7),01.02.2003 00:12:17,459397,-7.32608e+06,2746.24,0.0187789,363.09,10.1056,361.994,999.341,0.318,0.0962514,2.39161,0.129779,348.915,10.1502,0.900168,9.59215,13.0789,1.09693,14.1758, +Right Node(7),04.04.2003 16:30:58,459397,-7.32607e+06,2746.54,0.0300363,364.338,10.1049,362.454,999.414,0.318,0.0721384,2.39161,0.14736,349.3,10.1371,1.01534,10.2806,13.1544,1.88417,15.0386, +Right Node(7),06.06.2003 08:49:39,459397,-7.32607e+06,2746.77,0.0287761,364.242,10.1026,362.481,999.274,0.318,0.0615435,2.39161,0.151625,349.023,10.1282,1.07786,10.9057,13.4581,1.76149,15.2195, +Right Node(7),09.10.2003 17:27:02,459396,-7.32607e+06,2746.92,0.0199715,363.716,10.1027,362.624,999.419,0.318,0.0581725,2.39161,0.172855,348.612,10.121,1.1564,11.2923,14.0119,1.09192,15.1038, +Right Node(7),16.06.2004 10:41:46,459396,-7.32607e+06,2747.01,0.0311716,364.958,10.1009,363.057,999.276,0.318,0.050095,2.55814,0.139844,348.408,10.1139,1.24785,11.5828,14.6487,1.90117,16.5499, +Right Node(7),19.10.2004 19:19:08,459396,-7.32607e+06,2747.07,0.021415,364.747,10.098,363.551,999.271,0.318,0.0438826,2.39161,0.157772,347.359,10.1047,1.39511,12.6707,16.1922,1.19536,17.3876, +Right Node(7),27.06.2005 12:33:53,459396,-7.32607e+06,2747.12,0.0211357,364.876,10.0948,363.776,999.276,0.318,0.0395217,2.39161,0.152824,346.846,10.0991,1.47347,13.7789,16.9292,1.10006,18.0292, +Right Node(7),10.11.2006 23:03:22,459396,-7.32607e+06,2747.19,0.0168235,364.721,10.0914,363.997,999.269,0.318,0.0355857,2.39161,0.150746,345.752,10.0913,1.61847,14.6304,18.2445,0.723778,18.9683, +Right Node(7),01.12.2006,459396,-7.32607e+06,2747.29,8.94018e-05,363.899,10.0899,364.528,999.577,0.318,0.0298203,2.39161,0.140781,343.758,10.084,1.87486,15.4812,20.7701,-0.628813,20.1413, +Right Node(7),01.12.2006,459396,-7.32607e+06,2747.29,8.94018e-05,363.899,10.0899,364.528,999.577,0.318,0.0298203,2.39161,0.140781,343.758,10.084,1.87486,15.4812,20.7701,-0.628813,20.1413, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Perimeter Node(8),09.12.1997 22:12:00,459362,-7.32601e+06,2734.48,0.0158785,385.911,10.1155,388.458,1000.26,0.318,0.112818,2.39161,0.0603191,322.955,29.6702,0.138125,39.0821,65.5027,-2.54653,62.9562, +Perimeter Node(8),05.02.1998 14:35:11,459364,-7.32601e+06,2735.39,0.010632,385.648,10.0768,385.763,1000.09,0.318,0.29541,2.39161,0.341322,340.321,15.6559,0.415006,21.1319,45.4414,-0.114738,45.3266, +Perimeter Node(8),12.04.1998 23:29:05,459367,-7.32602e+06,2734.91,3.048e-07,386.216,10.0788,390.414,1000.19,0.318,0.0750372,2.39161,0.240644,342.035,17.6818,0.300327,32.1378,48.3791,-4.19848,44.1806, +Perimeter Node(8),16.08.1998 08:06:27,459369,-7.32602e+06,2735.06,3.048e-07,369.007,10.0662,390.289,999.891,0.318,0.0624633,2.39161,0.0924075,347.717,16.9829,0.342522,28.9174,42.572,-21.282,21.29, +Perimeter Node(8),18.10.1998 00:25:09,459370,-7.32602e+06,2735.6,0.0096439,358.023,10.1549,358.304,998.989,0.318,0.102577,2.39161,0.16379,325.641,14.2532,0.906297,12.3361,32.6627,-0.281084,32.3816, +Perimeter Node(8),19.12.1998 16:43:50,459372,-7.32603e+06,2735.25,3.048e-07,358.373,10.1058,369.295,999.394,0.318,0.12186,2.39161,0.253797,339.475,15.7887,0.705673,14.2427,29.8202,-10.9223,18.8979, +Perimeter Node(8),20.02.1999 09:02:31,459373,-7.32603e+06,2736,0.0226587,355.789,10.131,354.07,998.851,0.318,0.0181187,2.39161,0.0809214,329.109,13.3961,0.842368,14.8943,24.9612,1.71904,26.6802, +Perimeter Node(8),25.06.1999 17:39:53,459377,-7.32604e+06,2735.58,3.048e-07,354.042,10.1076,363.26,999.279,0.318,0.127921,2.39161,0.87666,338.793,15.2926,0.111042,21.3912,24.4668,-9.21794,15.2488, +Perimeter Node(8),27.08.1999 09:58:34,459377,-7.32604e+06,2736.67,0.0253395,348.3,10.1429,345.7,998.505,0.318,0.0853836,2.39161,0.144408,330.625,11.5408,0.944263,7.98757,15.0745,2.60038,17.6748, +Perimeter Node(8),30.12.1999 18:35:56,459381,-7.32605e+06,2735.51,3.048e-07,345.198,10.1232,355.31,998.731,0.318,0.0874595,2.39161,0.1357,335.97,15.3183,0.490396,17.4065,19.34,-10.1121,9.22787, +Perimeter Node(8),06.09.2000 11:50:41,459381,-7.32605e+06,2735.55,0.0233805,352.295,10.1539,350.732,998.445,0.318,0.0264939,2.39161,0.0544738,334.522,14.7445,0.72012,9.01124,16.2096,1.56291,17.7725, +Perimeter Node(8),09.01.2001 20:28:03,459391,-7.32607e+06,2736.6,0.0186718,355.565,10.1289,353.887,999.055,0.318,0.756209,2.39161,0.201604,344.736,12.8317,0.14168,2.19002,9.15116,1.67733,10.8285, +Perimeter Node(8),13.03.2001 12:46:44,459387,-7.32606e+06,2735.61,0.0142492,356.296,10.1332,356.436,998.877,0.318,0.149918,2.39161,0.0238941,343.451,14.0424,0.90405,9.27336,12.9852,-0.140105,12.8451, +Perimeter Node(8),15.05.2001 05:05:26,459394,-7.32607e+06,2738.33,0.0332073,357.66,10.1224,354.105,999.038,0.318,0.0771349,3.09276,0.036237,345.396,10.3874,0.208913,11.4994,8.70928,3.55556,12.2648, +Perimeter Node(8),17.09.2001 13:42:48,459390,-7.32606e+06,2736.99,0.0228363,359.182,10.1205,357.356,999.006,0.318,0.0456234,2.39161,0.0790999,347.31,11.3077,0.898471,10.6658,10.0463,1.82603,11.8723, +Perimeter Node(8),20.01.2002 22:20:10,459391,-7.32607e+06,2737.77,0.0380242,361.292,10.1087,357.757,999.107,0.318,0.030818,4.64328,0.0211349,347.63,10.2585,0.923617,13.8245,10.1265,3.53473,13.6612, +Perimeter Node(8),26.05.2002 06:57:32,459392,-7.32607e+06,2738.38,0.0357134,362.816,10.104,360.093,999.177,0.318,0.0318127,3.84715,0.0221779,348.648,10.2596,0.974345,14.7748,11.4448,2.72338,14.1682, +Perimeter Node(8),28.09.2002 15:34:55,459391,-7.32606e+06,2737.82,0.0257358,363.622,10.1074,361.878,999.219,0.318,0.0200572,2.39161,0.0415546,348.608,10.2852,1.38783,14.4444,13.27,1.74353,15.0135, +Perimeter Node(8),30.11.2002 07:53:36,459391,-7.32607e+06,2738.35,0.0133561,363.791,10.1048,363.345,999.227,0.318,0.0170973,2.39161,0.0911061,348.98,10.2885,1.40877,14.9476,14.3652,0.445527,14.8107, +Perimeter Node(8),01.02.2003 00:12:17,459390,-7.32606e+06,2737.71,3.048e-07,363.218,10.1056,364.221,999.311,0.318,0.0116892,2.39161,0.0831098,348.545,10.3085,1.79547,14.6513,15.6767,-1.0032,14.6735, +Perimeter Node(8),04.04.2003 16:30:58,459389,-7.32606e+06,2737.57,0.00372199,364.523,10.1049,365.133,999.382,0.318,0.00923114,2.39161,0.109491,348.948,10.3166,1.92598,14.62,16.1847,-0.609629,15.575, +Perimeter Node(8),06.06.2003 08:49:39,459389,-7.32606e+06,2737.63,0.000381361,364.414,10.1026,365.532,999.272,0.318,0.00870328,2.39161,0.117604,348.689,10.321,1.96516,15.2862,16.8435,-1.11769,15.7258, +Perimeter Node(8),09.10.2003 17:27:02,459389,-7.32606e+06,2737.53,3.048e-07,364.023,10.1027,366.099,999.384,0.318,0.00809811,2.39161,0.136326,348.231,10.347,2.0767,15.3435,17.8676,-2.07596,15.7917, +Perimeter Node(8),16.06.2004 10:41:46,459389,-7.32606e+06,2737.62,3.048e-07,364.961,10.1009,367.033,999.278,0.318,0.00765342,2.39161,0.107909,348.039,10.3246,2.15994,15.482,18.9936,-2.07165,16.9219, +Perimeter Node(8),19.10.2004 19:19:08,459389,-7.32606e+06,2737.52,3.048e-07,364.926,10.098,368.497,999.279,0.318,0.00677601,2.39161,0.125824,347.001,10.3375,2.4139,16.5001,21.4963,-3.57133,17.925, +Perimeter Node(8),27.06.2005 12:33:53,459389,-7.32606e+06,2737.5,3.048e-07,365.008,10.0948,369.186,999.283,0.318,0.00641013,2.39161,0.122804,346.506,10.3517,2.51992,17.7729,22.6794,-4.17782,18.5016, +Perimeter Node(8),10.11.2006 23:03:22,459389,-7.32606e+06,2737.56,3.048e-07,364.812,10.0914,370.081,999.273,0.318,0.00595729,2.39161,0.123126,345.406,10.2939,2.70931,18.584,24.6746,-5.2687,19.4059, +Perimeter Node(8),01.12.2006,459389,-7.32606e+06,2737.49,3.048e-07,363.901,10.0899,371.943,999.541,0.318,0.00515451,2.39161,0.117637,343.38,10.3371,3.11667,19.1204,28.5627,-8.04158,20.5211, +Perimeter Node(8),01.12.2006,459389,-7.32606e+06,2737.49,3.048e-07,363.901,10.0899,371.943,999.541,0.318,0.00515451,2.39161,0.117637,343.38,10.3371,3.11667,19.1204,28.5627,-8.04158,20.5211, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Perimeter Node(9),09.12.1997 22:12:00,459360,-7.326e+06,2733.49,0.00961297,385.88,10.1155,391.536,1000.25,0.318,0.0986783,2.39161,0.0377728,324.286,31.2649,0.159794,45.2133,67.25,-5.65605,61.5939, +Perimeter Node(9),05.02.1998 14:35:11,459361,-7.326e+06,2733.85,3.048e-07,386.196,10.0768,392.659,1000.09,0.318,0.12692,2.39161,0.117258,343.15,19.8285,0.665306,33.8769,49.5091,-6.46288,43.0462, +Perimeter Node(9),12.04.1998 23:29:05,459363,-7.32601e+06,2733.91,3.048e-07,386.609,10.0788,393.858,1000.2,0.318,0.18783,2.39161,0.0973164,344.033,19.4976,0.676006,30.3224,49.8249,-7.24842,42.5765, +Perimeter Node(9),16.08.1998 08:06:27,459366,-7.32601e+06,2733.79,3.048e-07,369.123,10.0662,394.41,999.891,0.318,0.0288198,2.39161,0.0384484,349.598,19.372,0.757961,30.4709,44.8115,-25.2866,19.5249, +Perimeter Node(9),18.10.1998 00:25:09,459366,-7.32601e+06,2733.92,3.048e-07,358.314,10.1549,363.963,998.997,0.318,0.0748263,2.39161,0.0769453,326.263,18.0003,1.24757,13.1119,37.6999,-5.64965,32.0503, +Perimeter Node(9),19.12.1998 16:43:50,459368,-7.32602e+06,2733.83,3.048e-07,358.944,10.1058,372.86,999.394,0.318,0.0710632,2.39161,0.102675,341.115,18.0329,1.24697,25.1678,31.7452,-13.9163,17.829, +Perimeter Node(9),20.02.1999 09:02:31,459368,-7.32602e+06,2734.06,0.000460517,355.837,10.131,360.105,998.853,0.318,0.104052,2.39161,0.0496939,330.025,17.42,1.39457,13.6143,30.0802,-4.26829,25.8119, +Perimeter Node(9),25.06.1999 17:39:53,459372,-7.32603e+06,2734.01,3.048e-07,356.109,10.1076,368.068,999.279,0.318,0.149008,2.39161,0.350064,340.446,18.417,0.939565,19.4615,27.6224,-11.9597,15.6627, +Perimeter Node(9),27.08.1999 09:58:34,459372,-7.32603e+06,2734.26,3.048e-07,348.558,10.1429,353.5,998.521,0.318,0.0582645,2.39161,0.0751246,330.909,16.9916,1.36326,7.78952,22.5912,-4.94163,17.6495, +Perimeter Node(9),30.12.1999 18:35:56,459373,-7.32603e+06,2733.72,3.048e-07,345.717,10.1232,359.439,998.791,0.318,0.0539088,2.39161,0.0441765,337.961,18.116,1.31787,14.105,21.4784,-13.7218,7.75665, +Perimeter Node(9),06.09.2000 11:50:41,459375,-7.32603e+06,2733.82,0.0138403,352.297,10.1539,354.729,998.503,0.318,0.102921,2.39161,0.0197726,335.762,17.6018,1.45403,7.35772,18.9672,-2.43138,16.5359, +Perimeter Node(9),09.01.2001 20:28:03,459379,-7.32604e+06,2733.81,3.048e-07,356.633,10.1289,361.482,999.048,0.318,0.10694,2.39161,0.0913271,347.55,17.144,1.49819,11.5067,13.9318,-4.84888,9.08288, +Perimeter Node(9),13.03.2001 12:46:44,459380,-7.32604e+06,2733.87,0.000429009,356.253,10.1332,360.087,998.875,0.318,0.118229,2.39161,0.0172883,344.174,16.6754,1.6834,7.67854,15.9131,-3.83439,12.0788, +Perimeter Node(9),15.05.2001 05:05:26,459382,-7.32605e+06,2734.46,0.00369878,357.5,10.1224,361.518,999.022,0.318,0.0855334,2.39161,0.0158107,347.765,15.473,1.59179,9.48942,13.7536,-4.01826,9.73536, +Perimeter Node(9),17.09.2001 13:42:48,459382,-7.32605e+06,2734.46,0.00364986,359.226,10.1205,362.226,999.009,0.318,0.0756297,2.39161,0.0292251,347.882,15.3662,1.70579,7.79333,14.3441,-3.00009,11.344, +Perimeter Node(9),20.01.2002 22:20:10,459383,-7.32605e+06,2734.78,0.0117981,361.054,10.1087,362.909,999.096,0.318,0.0685674,2.39161,0.0083105,348.88,14.608,1.88277,9.86569,14.0298,-1.85586,12.174, +Perimeter Node(9),26.05.2002 06:57:32,459383,-7.32605e+06,2734.94,0.00944592,362.543,10.104,364.37,999.164,0.318,0.0600085,2.39161,0.0102517,349.7,14.2267,2.07447,10.6033,14.6697,-1.82701,12.8427, +Perimeter Node(9),28.09.2002 15:34:55,459383,-7.32605e+06,2734.73,0.00604627,363.487,10.1074,365.817,999.212,0.318,0.0523695,2.39161,0.0176812,349.393,14.4323,2.33232,10.283,16.4244,-2.32991,14.0945, +Perimeter Node(9),30.11.2002 07:53:36,459383,-7.32605e+06,2734.87,3.048e-07,363.93,10.1048,367.242,999.234,0.318,0.0476175,2.39161,0.0413804,349.832,14.1084,2.49218,10.9066,17.4107,-3.31227,14.0984, +Perimeter Node(9),01.02.2003 00:12:17,459382,-7.32605e+06,2734.61,3.048e-07,363.26,10.1056,368.293,999.302,0.318,0.0434884,2.39161,0.0296504,349.277,14.4027,2.66006,10.5944,19.0161,-5.03291,13.9832, +Perimeter Node(9),04.04.2003 16:30:58,459381,-7.32605e+06,2734.55,3.048e-07,364.828,10.1049,369.254,999.369,0.318,0.0401899,2.39161,0.0568274,349.746,14.4181,2.75695,10.4373,19.5084,-4.42629,15.0821, +Perimeter Node(9),06.06.2003 08:49:39,459381,-7.32605e+06,2734.55,3.048e-07,364.801,10.1026,369.687,999.283,0.318,0.0387605,2.39161,0.0646119,349.515,14.3601,2.8319,11.0401,20.1711,-4.88531,15.2858, +Perimeter Node(9),09.10.2003 17:27:02,459381,-7.32605e+06,2734.51,3.048e-07,364.526,10.1027,370.275,999.373,0.318,0.0375557,2.39161,0.0753991,349.006,14.3706,2.9176,11.0967,21.2687,-5.74863,15.5201, +Perimeter Node(9),16.06.2004 10:41:46,459381,-7.32605e+06,2734.53,3.048e-07,365.312,10.1009,371.249,999.296,0.318,0.035396,2.39161,0.0628202,348.835,14.2542,3.06096,11.2416,22.414,-5.9378,16.4762, +Perimeter Node(9),19.10.2004 19:19:08,459381,-7.32605e+06,2734.49,3.048e-07,365.374,10.098,372.753,999.3,0.318,0.0319923,2.39161,0.0714432,347.794,14.1217,3.36205,11.8698,24.9593,-7.37893,17.5804, +Perimeter Node(9),27.06.2005 12:33:53,459381,-7.32605e+06,2734.48,3.048e-07,365.445,10.0948,373.474,999.303,0.318,0.0304151,2.39161,0.0703981,347.33,14.0402,3.50986,12.8506,26.1441,-8.0291,18.115, +Perimeter Node(9),10.11.2006 23:03:22,459381,-7.32605e+06,2734.49,3.048e-07,365.262,10.0914,374.455,999.295,0.318,0.0280957,2.39161,0.0717412,346.236,13.8729,3.80073,13.4116,28.2195,-9.1938,19.0257, +Perimeter Node(9),01.12.2006,459381,-7.32605e+06,2734.46,3.048e-07,364.332,10.0899,376.377,999.527,0.318,0.0244795,2.39161,0.0701311,344.172,13.6773,4.34734,13.8359,32.2054,-12.0453,20.1601, +Perimeter Node(9),01.12.2006,459381,-7.32605e+06,2734.46,3.048e-07,364.332,10.0899,376.377,999.527,0.318,0.0244795,2.39161,0.0701311,344.172,13.6773,4.34734,13.8359,32.2054,-12.0453,20.1601, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Perimeter Node(10),09.12.1997 22:12:00,459358,-7.326e+06,2732.71,0.016857,385.827,10.1155,393.16,1000.25,0.318,0.0518874,2.39161,0.0605066,328.181,30.8803,0.320204,43.7605,64.9786,-7.33296,57.6457, +Perimeter Node(10),05.02.1998 14:35:11,459359,-7.326e+06,2732.95,3.048e-07,386.183,10.0768,395.366,1000.09,0.318,0.10459,2.39161,0.0415402,344.808,21.021,0.814583,36.0306,50.5578,-9.18301,41.3747, +Perimeter Node(10),12.04.1998 23:29:05,459360,-7.326e+06,2733.4,3.048e-07,386.67,10.0788,394.176,1000.21,0.318,0.124858,2.39161,0.0354184,345.997,18.9406,1.02359,30.1735,48.179,-7.50552,40.6735, +Perimeter Node(10),16.08.1998 08:06:27,459362,-7.32601e+06,2732.92,3.048e-07,369.068,10.0662,395.939,999.891,0.318,0.12074,2.39161,0.0152327,351.691,19.4952,1.26527,27.5998,44.2477,-26.8708,17.3769, +Perimeter Node(10),18.10.1998 00:25:09,459362,-7.32601e+06,2732.98,3.048e-07,358.318,10.1549,365.952,998.996,0.318,0.118519,2.39161,0.0293953,326.763,18.9086,1.65031,11.9024,39.1883,-7.63317,31.5552, +Perimeter Node(10),19.12.1998 16:43:50,459364,-7.32601e+06,2732.87,3.048e-07,358.942,10.1058,374.71,999.394,0.318,0.0520085,2.39161,0.0148453,342.548,18.5586,1.70933,22.1105,32.1618,-15.7675,16.3943, +Perimeter Node(10),20.02.1999 09:02:31,459364,-7.32601e+06,2732.99,0.000881066,355.837,10.131,362.162,998.853,0.318,0.0791003,2.39161,0.0298404,330.621,18.3487,1.83913,12.2003,31.5417,-6.325,25.2167, +Perimeter Node(10),25.06.1999 17:39:53,459367,-7.32602e+06,2732.77,3.048e-07,356.265,10.1076,369.834,999.279,0.318,0.0868836,2.39161,0.0268187,342.084,19.145,1.61829,17.1817,27.7503,-13.5691,14.1812, +Perimeter Node(10),27.08.1999 09:58:34,459367,-7.32602e+06,2732.77,3.048e-07,348.561,10.1429,356.162,998.52,0.318,0.102618,2.39161,0.0272802,331.051,18.8761,1.82843,8.12614,25.1107,-7.60063,17.5101, +Perimeter Node(10),30.12.1999 18:35:56,459368,-7.32602e+06,2732.87,3.048e-07,345.652,10.1232,359.753,998.79,0.318,0.0961976,2.39161,0.00493172,339.295,18.1215,1.96192,12.2859,20.4582,-14.1007,6.35746, +Perimeter Node(10),06.09.2000 11:50:41,459369,-7.32602e+06,2732.91,0.0137023,352.246,10.1539,355.335,998.513,0.318,0.0957853,2.39161,0.00430112,336.195,18.0749,2.00534,6.50606,19.1399,-3.08869,16.0512, +Perimeter Node(10),09.01.2001 20:28:03,459372,-7.32603e+06,2732.45,3.048e-07,356.555,10.1289,363.752,999.042,0.318,0.0780905,2.39161,0.00586257,348.724,18.2726,2.02589,9.07896,15.0276,-7.19683,7.83081, +Perimeter Node(10),13.03.2001 12:46:44,459372,-7.32603e+06,2732.54,3.048e-07,356.178,10.1332,362.092,998.872,0.318,0.0921761,2.39161,0.00983376,344.385,18.1674,2.13503,6.40242,17.707,-5.91415,11.7929, +Perimeter Node(10),15.05.2001 05:05:26,459374,-7.32603e+06,2732.87,3.048e-07,357.396,10.1224,364.133,999.014,0.318,0.090235,2.39161,0.00682528,348.366,17.55,2.19667,7.36148,15.7667,-6.73693,9.0298, +Perimeter Node(10),17.09.2001 13:42:48,459374,-7.32603e+06,2732.87,3.048e-07,359.136,10.1205,364.527,999.004,0.318,0.0869328,2.39161,0.00817396,348.096,17.4279,2.27264,6.15717,16.4316,-5.39138,11.0403, +Perimeter Node(10),20.01.2002 22:20:10,459375,-7.32603e+06,2733.03,3.048e-07,360.906,10.1087,365.343,999.089,0.318,0.0811033,2.39161,0.00616251,349.517,16.8944,2.44554,7.56471,15.8263,-4.43704,11.3893, +Perimeter Node(10),26.05.2002 06:57:32,459375,-7.32603e+06,2733.07,3.048e-07,362.4,10.104,366.667,999.158,0.318,0.0758185,2.39161,0.00625275,350.361,16.6033,2.61151,7.94329,16.3062,-4.26683,12.0394, +Perimeter Node(10),28.09.2002 15:34:55,459375,-7.32603e+06,2732.97,3.048e-07,363.372,10.1074,368.429,999.207,0.318,0.0716775,2.39161,0.00806684,349.939,16.5334,2.75358,7.88172,18.4903,-5.05713,13.4332, +Perimeter Node(10),30.11.2002 07:53:36,459375,-7.32603e+06,2733.02,3.048e-07,363.886,10.1048,370.087,999.232,0.318,0.0678664,2.39161,0.0137757,350.503,16.2719,2.90664,8.24844,19.5845,-6.20117,13.3834, +Perimeter Node(10),01.02.2003 00:12:17,459374,-7.32603e+06,2732.9,3.048e-07,363.169,10.1056,371.014,999.299,0.318,0.0661837,2.39161,0.00751417,349.871,16.2981,2.97009,8.21455,21.1428,-7.84506,13.2977, +Perimeter Node(10),04.04.2003 16:30:58,459374,-7.32603e+06,2732.87,3.048e-07,364.885,10.1049,371.964,999.364,0.318,0.0644792,2.39161,0.02248,350.391,16.2233,3.03674,8.06254,21.573,-7.0796,14.4934, +Perimeter Node(10),06.06.2003 08:49:39,459374,-7.32603e+06,2732.86,3.048e-07,364.899,10.1026,372.421,999.286,0.318,0.0630007,2.39161,0.025662,350.202,16.1346,3.10522,8.60501,22.2193,-7.52285,14.6965, +Perimeter Node(10),09.10.2003 17:27:02,459374,-7.32603e+06,2732.85,3.048e-07,364.651,10.1027,372.991,999.368,0.318,0.0617021,2.39161,0.0268293,349.662,16.0843,3.16951,8.71223,23.329,-8.3398,14.9892, +Perimeter Node(10),16.06.2004 10:41:46,459374,-7.32603e+06,2732.85,3.048e-07,365.417,10.1009,373.983,999.301,0.318,0.0592027,2.39161,0.027023,349.525,15.9317,3.30427,8.83138,24.4582,-8.56597,15.8923, +Perimeter Node(10),19.10.2004 19:19:08,459374,-7.32603e+06,2732.83,3.048e-07,365.499,10.098,375.454,999.306,0.318,0.0547855,2.39161,0.0277722,348.482,15.6845,3.57035,9.32232,26.972,-9.95506,17.017, +Perimeter Node(10),27.06.2005 12:33:53,459374,-7.32603e+06,2732.83,3.048e-07,365.567,10.0948,376.187,999.309,0.318,0.0527436,2.39161,0.027603,348.056,15.5523,3.70708,10.1258,28.1308,-10.6205,17.5103, +Perimeter Node(10),10.11.2006 23:03:22,459374,-7.32603e+06,2732.83,3.048e-07,365.388,10.0914,377.176,999.301,0.318,0.0490641,2.39161,0.0275162,346.98,15.3255,3.98465,10.5594,30.1962,-11.7874,18.4088, +Perimeter Node(10),01.12.2006,459374,-7.32603e+06,2732.82,3.048e-07,364.452,10.0899,379.071,999.521,0.318,0.0434641,2.39161,0.0263195,344.904,15.0057,4.49641,10.9268,34.1668,-14.6186,19.5482, +Perimeter Node(10),01.12.2006,459374,-7.32603e+06,2732.82,3.048e-07,364.452,10.0899,379.071,999.521,0.318,0.0434641,2.39161,0.0263195,344.904,15.0057,4.49641,10.9268,34.1668,-14.6186,19.5482, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Perimeter Node(11),09.12.1997 22:12:00,459356,-7.32599e+06,2731.95,0.0164591,385.71,10.1155,394.301,1000.25,0.318,0.416397,2.39161,0.224624,332.122,30.1069,0.465608,40.0106,62.1784,-8.59099,53.5874, +Perimeter Node(11),05.02.1998 14:35:11,459356,-7.32599e+06,2732.15,3.048e-07,386.096,10.0768,396.299,1000.09,0.318,0.0895471,2.39161,0.0810504,346.197,20.6942,0.964714,33.2265,50.1017,-10.2029,39.8989, +Perimeter Node(11),12.04.1998 23:29:05,459358,-7.326e+06,2732.57,3.048e-07,386.581,10.0788,395.209,1000.2,0.318,0.106466,2.39161,0.0780855,347.224,18.7276,1.21507,28.216,47.9844,-8.62792,39.3565, +Perimeter Node(11),16.08.1998 08:06:27,459359,-7.326e+06,2731.95,3.048e-07,368.97,10.0662,396.998,999.891,0.318,0.0981068,2.39161,0.0404767,353.415,19.099,1.56921,24.9003,43.5824,-28.0282,15.5542, +Perimeter Node(11),18.10.1998 00:25:09,459359,-7.326e+06,2731.98,3.048e-07,358.221,10.1549,367.355,998.992,0.318,0.104845,2.39161,0.0581469,327.279,19.0224,1.88441,10.8616,40.0767,-9.13458,30.9421, +Perimeter Node(11),19.12.1998 16:43:50,459359,-7.326e+06,2732.12,3.048e-07,358.866,10.1058,375.165,999.394,0.318,0.0911913,2.39161,0.034405,344.077,17.9706,2.15441,20.0008,31.0876,-16.2985,14.7891, +Perimeter Node(11),20.02.1999 09:02:31,459360,-7.326e+06,2732.25,3.048e-07,355.765,10.131,362.733,998.85,0.318,0.0882617,2.39161,0.0715671,331.165,18.1697,2.25594,11.1508,31.5674,-6.96825,24.5991, +Perimeter Node(11),25.06.1999 17:39:53,459361,-7.32601e+06,2732.03,3.048e-07,356.198,10.1076,369.744,999.279,0.318,0.0912791,2.39161,0.0272225,343.379,18.2865,2.1877,15.5613,26.3652,-13.5469,12.8183, +Perimeter Node(11),27.08.1999 09:58:34,459362,-7.32601e+06,2732.12,3.048e-07,348.507,10.1429,356.087,998.518,0.318,0.0886468,2.39161,0.0611233,331.121,18.4183,2.29855,7.65644,24.9653,-7.57938,17.3859, +Perimeter Node(11),30.12.1999 18:35:56,459362,-7.32601e+06,2732.08,3.048e-07,345.575,10.1232,360.045,998.786,0.318,0.0834529,2.39161,0.0192469,340.042,17.7469,2.44409,11.1848,20.0033,-14.4701,5.53324, +Perimeter Node(11),06.09.2000 11:50:41,459363,-7.32601e+06,2732.26,0.0275797,352.184,10.1539,355.098,998.511,0.318,0.0816609,2.39161,0.00599126,336.433,17.6594,2.50176,6.08599,18.6649,-2.9138,15.7511, +Perimeter Node(11),09.01.2001 20:28:03,459365,-7.32601e+06,2731.45,3.048e-07,356.46,10.1289,364.213,999.038,0.318,0.0838273,2.39161,0.0127632,349.105,18.2271,2.31644,8.00075,15.1079,-7.75335,7.35453, +Perimeter Node(11),13.03.2001 12:46:44,459365,-7.32601e+06,2731.5,3.048e-07,356.082,10.1332,362.606,998.867,0.318,0.0856529,2.39161,0.0193749,344.504,18.196,2.39087,5.68759,18.1021,-6.52445,11.5777, +Perimeter Node(11),15.05.2001 05:05:26,459367,-7.32602e+06,2731.67,3.048e-07,357.285,10.1224,364.87,999.009,0.318,0.0846856,2.39161,0.0125032,348.597,17.8493,2.4175,6.33797,16.2732,-7.58502,8.68822, +Perimeter Node(11),17.09.2001 13:42:48,459367,-7.32602e+06,2731.67,3.048e-07,359.025,10.1205,365.151,998.999,0.318,0.0828122,2.39161,0.0164436,348.14,17.724,2.47289,5.37237,17.0109,-6.12624,10.8846, +Perimeter Node(11),20.01.2002 22:20:10,459367,-7.32602e+06,2731.75,3.048e-07,360.787,10.1087,366.4,999.084,0.318,0.0792007,2.39161,0.0137946,349.789,17.3264,2.58528,6.38068,16.6106,-5.61305,10.9976, +Perimeter Node(11),26.05.2002 06:57:32,459367,-7.32602e+06,2731.77,3.048e-07,362.28,10.104,368.804,999.152,0.318,0.0757572,2.39161,0.0125672,350.682,17.0451,2.70319,6.63056,18.1213,-6.52365,11.5976, +Perimeter Node(11),28.09.2002 15:34:55,459367,-7.32602e+06,2731.72,3.048e-07,363.258,10.1074,370.504,999.201,0.318,0.0726758,2.39161,0.0162963,350.245,16.8366,2.82102,6.72753,20.2595,-7.24638,13.0132, +Perimeter Node(11),30.11.2002 07:53:36,459367,-7.32602e+06,2731.74,3.048e-07,363.776,10.1048,372.235,999.226,0.318,0.0699407,2.39161,0.0211151,350.875,16.6011,2.93132,6.96594,21.3601,-8.45983,12.9003, +Perimeter Node(11),01.02.2003 00:12:17,459367,-7.32602e+06,2731.68,3.048e-07,363.056,10.1056,373.026,999.294,0.318,0.0684613,2.39161,0.0105469,350.244,16.4652,2.99958,7.15645,22.7819,-9.96948,12.8124, +Perimeter Node(11),04.04.2003 16:30:58,459366,-7.32602e+06,2731.66,3.048e-07,364.79,10.1049,373.935,999.359,0.318,0.0672103,2.39161,0.0297843,350.797,16.3413,3.05742,7.06543,23.1377,-9.1445,13.9932, +Perimeter Node(11),06.06.2003 08:49:39,459366,-7.32602e+06,2731.66,3.048e-07,364.808,10.1026,374.385,999.282,0.318,0.0660293,2.39161,0.0309812,350.639,16.2363,3.11312,7.58262,23.7461,-9.57669,14.1694, +Perimeter Node(11),09.10.2003 17:27:02,459366,-7.32602e+06,2731.65,3.048e-07,364.562,10.1027,374.926,999.364,0.318,0.0649172,2.39161,0.0301235,350.092,16.1612,3.16803,7.73661,24.8343,-10.3645,14.4698, +Perimeter Node(11),16.06.2004 10:41:46,459366,-7.32602e+06,2731.65,3.048e-07,365.329,10.1009,375.891,999.297,0.318,0.0627849,2.39161,0.0308868,349.978,16.0005,3.27719,7.86395,25.9128,-10.5615,15.3512, +Perimeter Node(11),19.10.2004 19:19:08,459366,-7.32602e+06,2731.64,3.048e-07,365.412,10.098,377.257,999.302,0.318,0.0588625,2.39161,0.0309277,348.94,15.7209,3.50003,8.39376,28.3169,-11.8452,16.4717, +Perimeter Node(11),27.06.2005 12:33:53,459366,-7.32602e+06,2731.64,3.048e-07,365.479,10.0948,377.966,999.305,0.318,0.057008,2.39161,0.0309326,348.552,15.5718,3.6158,9.15774,29.4138,-12.4868,16.927, +Perimeter Node(11),10.11.2006 23:03:22,459366,-7.32602e+06,2731.64,3.048e-07,365.3,10.0914,378.898,999.296,0.318,0.0535919,2.39161,0.0300259,347.491,15.3366,3.84927,9.59162,31.4068,-13.5974,17.8094, +Perimeter Node(11),01.12.2006,459366,-7.32602e+06,2731.63,3.048e-07,364.362,10.0899,380.663,999.517,0.318,0.048157,2.39161,0.0303317,345.416,15.0007,4.29079,10.0546,35.247,-16.3014,18.9457, +Perimeter Node(11),01.12.2006,459366,-7.32602e+06,2731.63,3.048e-07,364.362,10.0899,380.663,999.517,0.318,0.048157,2.39161,0.0303317,345.416,15.0007,4.29079,10.0546,35.247,-16.3014,18.9457, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Perimeter Node(12),09.12.1997 22:12:00,459354,-7.32599e+06,2730.6,0.0095517,385.388,10.1155,398.483,1000.23,0.318,0.392633,2.39161,0.735749,335.247,31.8043,0.502225,33.3995,63.2352,-13.0941,50.141, +Perimeter Node(12),05.02.1998 14:35:11,459354,-7.32599e+06,2730.74,3.048e-07,385.904,10.0768,398.78,1000.09,0.318,0.219871,2.39161,0.505486,347.287,21.3517,0.954918,28.4151,51.4938,-12.8767,38.6171, +Perimeter Node(12),12.04.1998 23:29:05,459355,-7.32599e+06,2731.13,3.048e-07,386.385,10.0788,397.133,1000.19,0.318,0.170381,2.39161,0.386802,348.17,18.7669,1.23038,24.7071,48.9637,-10.7486,38.215, +Perimeter Node(12),16.08.1998 08:06:27,459355,-7.32599e+06,2730.54,3.048e-07,368.804,10.0662,397.762,999.891,0.318,0.139982,2.39161,0.301279,354.318,17.9693,1.50972,22.9115,43.444,-28.9574,14.4866, +Perimeter Node(12),18.10.1998 00:25:09,459355,-7.32599e+06,2730.57,3.048e-07,358.048,10.1549,367.484,998.983,0.318,0.120854,2.39161,0.290587,327.955,16.9478,1.80111,10.5189,39.5294,-9.43586,30.0936, +Perimeter Node(12),19.12.1998 16:43:50,459356,-7.32599e+06,2730.64,3.048e-07,358.694,10.1058,375.849,999.394,0.318,0.103289,2.39161,0.243398,345.612,16.0971,2.04466,19.7744,30.2368,-17.1546,13.0822, +Perimeter Node(12),20.02.1999 09:02:31,459356,-7.32599e+06,2730.69,0.00163571,355.553,10.131,363.464,998.84,0.318,0.0991528,2.39161,0.331595,331.895,16.3894,2.17588,11.0674,31.5691,-7.91035,23.6587, +Perimeter Node(12),25.06.1999 17:39:53,459356,-7.326e+06,2730.84,3.048e-07,356.062,10.1076,369.567,999.279,0.318,0.0914568,2.39161,0.202348,344.703,16.2067,2.35141,15.8534,24.8641,-13.505,11.3591, +Perimeter Node(12),27.08.1999 09:58:34,459356,-7.326e+06,2730.85,4.11251e-05,348.343,10.1429,355.921,998.51,0.318,0.0882375,2.39161,0.307949,331.393,16.6019,2.50395,8.0553,24.5278,-7.57773,16.9501, +Perimeter Node(12),30.12.1999 18:35:56,459357,-7.326e+06,2730.78,3.048e-07,345.432,10.1232,360.841,998.777,0.318,0.087346,2.39161,0.151678,340.728,16.8249,2.50408,10.9585,20.1124,-15.4089,4.70343, +Perimeter Node(12),06.09.2000 11:50:41,459358,-7.326e+06,2730.74,0.0375442,352.031,10.1539,356.449,998.501,0.318,0.085067,4.46968,0.0635287,336.642,17.3781,2.55758,5.70285,19.8076,-4.41798,15.3897, +Perimeter Node(12),09.01.2001 20:28:03,459358,-7.326e+06,2730.66,3.048e-07,356.376,10.1289,365.553,999.034,0.318,0.000253119,2.39161,0.101617,349.348,18.2345,2.31034,7.17217,16.2047,-9.17744,7.02724, +Perimeter Node(12),13.03.2001 12:46:44,459359,-7.326e+06,2730.69,3.048e-07,355.996,10.1332,363.892,998.863,0.318,0.000531069,2.39161,0.113701,344.71,18.1431,2.39059,5.20933,19.1813,-7.89621,11.2851, +Perimeter Node(12),15.05.2001 05:05:26,459359,-7.326e+06,2730.75,3.048e-07,357.19,10.1224,365.713,999.005,0.318,0.000533032,2.39161,0.0910739,348.8,17.7921,2.47105,5.76105,16.9137,-8.52303,8.39065, +Perimeter Node(12),17.09.2001 13:42:48,459359,-7.326e+06,2730.75,3.048e-07,358.929,10.1205,365.815,998.995,0.318,0.000609018,2.39161,0.100968,348.246,17.532,2.51962,5.08328,17.5695,-6.88618,10.6833, +Perimeter Node(12),20.01.2002 22:20:10,459359,-7.326e+06,2730.78,3.048e-07,360.688,10.1087,367.959,999.079,0.318,0.000576366,2.39161,0.0861145,350.025,16.9381,2.65094,6.30336,17.9346,-7.27135,10.6633, +Perimeter Node(12),26.05.2002 06:57:32,459359,-7.326e+06,2730.77,3.048e-07,362.179,10.104,370.575,999.147,0.318,0.00061566,2.39161,0.0785686,350.982,16.3986,2.69046,6.81107,19.5936,-8.39603,11.1975, +Perimeter Node(12),28.09.2002 15:34:55,459359,-7.326e+06,2730.73,3.048e-07,363.157,10.1074,372.696,999.197,0.318,0.000656529,2.39161,0.0905739,350.514,16.3731,2.60466,6.94246,22.1823,-9.53923,12.6431, +Perimeter Node(12),30.11.2002 07:53:36,459359,-7.326e+06,2730.74,3.048e-07,363.676,10.1048,374.423,999.222,0.318,0.000667146,2.39161,0.104359,351.18,16.0031,2.7023,7.47305,23.2426,-10.7473,12.4952, +Perimeter Node(12),01.02.2003 00:12:17,459359,-7.326e+06,2730.66,3.048e-07,362.953,10.1056,376.091,999.289,0.318,0.000779017,2.39161,0.0679592,350.544,16.4039,2.40012,7.30242,25.5466,-13.1376,12.4091, +Perimeter Node(12),04.04.2003 16:30:58,459359,-7.326e+06,2730.64,3.048e-07,364.693,10.1049,377.257,999.354,0.318,0.000896138,2.39161,0.130672,351.135,16.3998,2.336,7.23016,26.1224,-12.564,13.5585, +Perimeter Node(12),06.06.2003 08:49:39,459359,-7.326e+06,2730.63,3.048e-07,364.713,10.1026,377.765,999.277,0.318,0.000919725,2.39161,0.132761,350.998,16.295,2.35469,7.80902,26.7674,-13.0518,13.7157, +Perimeter Node(12),09.10.2003 17:27:02,459359,-7.326e+06,2730.62,3.048e-07,364.466,10.1027,378.451,999.359,0.318,0.000942563,2.39161,0.131305,350.444,16.2834,2.34687,8.00951,28.0072,-13.9855,14.0217, +Perimeter Node(12),16.06.2004 10:41:46,459359,-7.326e+06,2730.62,3.048e-07,365.233,10.1009,379.412,999.292,0.318,0.000931107,2.39161,0.132655,350.351,16.1058,2.42582,8.42407,29.0616,-14.1791,14.8824, +Perimeter Node(12),19.10.2004 19:19:08,459359,-7.326e+06,2730.61,3.048e-07,365.315,10.098,380.914,999.297,0.318,0.000910544,2.39161,0.132727,349.31,15.9063,2.53071,9.30658,31.6039,-15.5993,16.0046, +Perimeter Node(12),27.06.2005 12:33:53,459359,-7.326e+06,2730.61,3.048e-07,365.382,10.0948,381.68,999.3,0.318,0.000903839,2.39161,0.132985,348.951,15.7682,2.60053,10.3399,32.7297,-16.2983,16.4314, +Perimeter Node(12),10.11.2006 23:03:22,459359,-7.326e+06,2730.61,3.048e-07,365.203,10.0914,382.591,999.292,0.318,0.000861713,2.39161,0.128507,347.899,15.5319,2.77204,11.2541,34.692,-17.3885,17.3035, +Perimeter Node(12),01.12.2006,459359,-7.326e+06,2730.6,3.048e-07,364.265,10.0899,384.441,999.511,0.318,0.000806401,2.39161,0.130486,345.782,15.3451,3.04216,12.4079,38.6592,-20.1759,18.4832, +Perimeter Node(12),01.12.2006,459359,-7.326e+06,2730.6,3.048e-07,364.265,10.0899,384.441,999.511,0.318,0.000806401,2.39161,0.130486,345.782,15.3451,3.04216,12.4079,38.6592,-20.1759,18.4832, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Top Node(13),09.12.1997 22:12:00,459352,-7.32599e+06,2728.77,3.048e-07,386.958,10.1155,416.673,1000.31,0.318,0.185839,2.39161,1.14776,311.779,55.4118,0.187665,40.1203,104.894,-29.7152,75.179, +Top Node(13),05.02.1998 14:35:11,459352,-7.32599e+06,2728.77,3.048e-07,387.058,10.0768,411.261,1000.09,0.318,0.114516,2.39161,0.884797,324.89,37.1947,0.484026,39.7482,86.3714,-24.2033,62.1681, +Top Node(13),12.04.1998 23:29:05,459352,-7.32599e+06,2728.77,3.048e-07,387.259,10.0788,409.821,1000.23,0.318,0.0894045,2.39161,0.692308,328.774,31.5057,0.599023,32.0653,81.0477,-22.5623,58.4854, +Top Node(13),16.08.1998 08:06:27,459352,-7.32599e+06,2728.77,3.048e-07,369.532,10.0662,405.425,999.891,0.318,0.066596,2.39161,0.554439,334.725,25.3722,0.81426,35.1044,70.6998,-35.8928,34.807, +Top Node(13),18.10.1998 00:25:09,459352,-7.32599e+06,2728.77,3.048e-07,358.748,10.1549,379.309,999.017,0.318,0.0360401,2.39161,0.52165,316.148,21.9379,0.951567,14.3213,63.1614,-20.5609,42.6006, +Top Node(13),19.12.1998 16:43:50,459352,-7.32599e+06,2728.77,3.048e-07,359.266,10.1058,382.653,999.394,0.318,0.0322166,2.39161,0.445536,328.563,19.4608,1.10408,34.3427,54.0901,-23.387,30.703, +Top Node(13),20.02.1999 09:02:31,459352,-7.32599e+06,2728.77,3.048e-07,356.479,10.131,373.615,998.881,0.318,0.0275455,2.39161,0.507669,319.757,19.3977,1.17332,16.2453,53.858,-17.136,36.7219, +Top Node(13),25.06.1999 17:39:53,459352,-7.32599e+06,2728.77,3.048e-07,356.482,10.1076,376.252,999.279,0.318,0.0257359,2.39161,0.38807,329.025,18.33,1.29002,29.1892,47.2267,-19.7704,27.4563, +Top Node(13),27.08.1999 09:58:34,459352,-7.32599e+06,2728.77,3.048e-07,349.217,10.1429,365.373,998.552,0.318,0.0233531,2.39161,0.457858,319.515,19.2965,1.38042,13.5582,45.8581,-16.1563,29.7019, +Top Node(13),30.12.1999 18:35:56,459352,-7.32599e+06,2728.77,3.048e-07,345.705,10.1232,367.141,998.805,0.318,0.0214172,2.39161,0.296392,326.374,18.6527,1.45685,23.352,40.7663,-21.4357,19.3306, +Top Node(13),06.09.2000 11:50:41,459352,-7.32599e+06,2728.77,3.048e-07,351.941,10.1539,363.756,998.529,0.318,0.0185483,2.39161,0.104659,324.473,19.15,1.54716,12.7726,39.283,-11.8143,27.4687, +Top Node(13),09.01.2001 20:28:03,459351,-7.32599e+06,2727.85,3.048e-07,356.464,10.1289,364.885,999.037,0.318,0.0126491,2.39161,0.195111,329.584,19.3831,1.80607,24.0423,35.3007,-8.42143,26.8793, +Top Node(13),13.03.2001 12:46:44,459351,-7.32599e+06,2727.97,3.048e-07,356.15,10.1332,365.023,998.871,0.318,0.00981935,2.39161,0.202339,328.003,18.3622,1.87586,17.4673,37.0199,-8.87251,28.1474, +Top Node(13),15.05.2001 05:05:26,459351,-7.32599e+06,2727.97,3.048e-07,357.241,10.1224,364.983,999.011,0.318,0.00964308,2.39161,0.175364,330.64,17.3919,1.92668,20.7858,34.3424,-7.74163,26.6007, +Top Node(13),17.09.2001 13:42:48,459351,-7.32599e+06,2727.97,3.048e-07,359.026,10.1205,365.496,998.998,0.318,0.00953482,2.39161,0.185135,330.885,17.008,1.96966,17.7955,34.6101,-6.46913,28.141, +Top Node(13),20.01.2002 22:20:10,459351,-7.32599e+06,2727.97,3.048e-07,360.724,10.1087,366.783,999.08,0.318,0.00917407,2.39161,0.162217,332.304,16.3557,2.06262,20.1019,34.4796,-6.05984,28.4198, +Top Node(13),26.05.2002 06:57:32,459351,-7.32599e+06,2727.97,3.048e-07,362.188,10.104,369.438,999.147,0.318,0.00883379,2.39161,0.149259,333.455,15.9805,2.15823,20.7888,35.9838,-7.25033,28.7334, +Top Node(13),28.09.2002 15:34:55,459351,-7.32599e+06,2727.97,3.048e-07,363.226,10.1074,371.768,999.199,0.318,0.00856067,2.39161,0.161912,333.669,16.0316,2.23846,20.4875,38.0991,-8.54205,29.5571, +Top Node(13),30.11.2002 07:53:36,459351,-7.32599e+06,2727.97,3.048e-07,363.827,10.1048,373.196,999.229,0.318,0.00828101,2.39161,0.163928,334.188,15.8269,2.32549,21.4627,39.0078,-9.36913,29.6387, +Top Node(13),01.02.2003 00:12:17,459351,-7.32599e+06,2727.97,3.048e-07,362.929,10.1056,374.588,999.308,0.318,0.0081657,2.39161,0.133125,334.004,15.857,2.36472,21.269,40.5832,-11.6582,28.925, +Top Node(13),04.04.2003 16:30:58,459351,-7.32599e+06,2727.97,3.048e-07,365,10.1049,375.192,999.373,0.318,0.00804093,2.39161,0.175855,334.398,15.7724,2.40677,21.3906,40.7941,-10.1921,30.6021, +Top Node(13),06.06.2003 08:49:39,459351,-7.32599e+06,2727.97,3.048e-07,365.039,10.1026,375.587,999.292,0.318,0.00792033,2.39161,0.172891,334.264,15.6973,2.4487,22.3168,41.3234,-10.5488,30.7747, +Top Node(13),09.10.2003 17:27:02,459351,-7.32599e+06,2727.97,3.048e-07,364.781,10.1027,376.46,999.377,0.318,0.00780992,2.39161,0.174075,333.947,15.6909,2.48837,22.336,42.5126,-11.6789,30.8337, +Top Node(13),16.06.2004 10:41:46,459351,-7.32599e+06,2727.97,3.048e-07,365.558,10.1009,377.21,999.307,0.318,0.00759103,2.39161,0.172869,333.735,15.5689,2.57039,22.7799,43.475,-11.652,31.823, +Top Node(13),19.10.2004 19:19:08,459351,-7.32599e+06,2727.97,3.048e-07,365.641,10.098,378.511,999.313,0.318,0.00719503,2.39161,0.173008,332.682,15.3837,2.73196,23.5726,45.8289,-12.8709,32.9581, +Top Node(13),27.06.2005 12:33:53,459351,-7.32599e+06,2727.97,3.048e-07,365.709,10.0948,379.199,999.316,0.318,0.0070095,2.39161,0.173368,332.169,15.2584,2.81444,24.9885,47.0295,-13.4899,33.5396, +Top Node(13),10.11.2006 23:03:22,459351,-7.32599e+06,2727.97,3.048e-07,365.51,10.0914,380.132,999.306,0.318,0.00666722,2.39161,0.167426,331.055,15.0607,2.97934,25.6995,49.0765,-14.6221,34.4544, +Top Node(13),01.12.2006,459351,-7.32599e+06,2727.97,3.048e-07,364.582,10.0899,382.252,999.528,0.318,0.00611391,2.39161,0.17013,329.062,14.9085,3.28704,26.304,53.1903,-17.6702,35.5201, +Top Node(13),01.12.2006,459351,-7.32599e+06,2727.97,3.048e-07,364.582,10.0899,382.252,999.528,0.318,0.00611391,2.39161,0.17013,329.062,14.9085,3.28704,26.304,53.1903,-17.6702,35.5201, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Perimeter Node(14),09.12.1997 22:12:00,459350,-7.32598e+06,2730.28,0.0150406,385.63,10.1155,397.201,1000.24,0.318,0.382589,2.39161,0.617681,336.112,30.7401,0.517036,32.5099,61.0884,-11.5712,49.5172, +Perimeter Node(14),05.02.1998 14:35:11,459349,-7.32598e+06,2730.86,3.048e-07,385.998,10.0768,396.235,1000.09,0.318,0.196358,2.39161,0.432584,347.442,20.5332,1.06092,30.1227,48.7934,-10.2374,38.556, +Perimeter Node(14),12.04.1998 23:29:05,459348,-7.32598e+06,2730.99,3.048e-07,386.436,10.0788,395.992,1000.19,0.318,0.156383,2.39161,0.349122,349.759,18.6594,1.33231,24.5601,46.2336,-9.55633,36.6772, +Perimeter Node(14),16.08.1998 08:06:27,459347,-7.32598e+06,2729.83,3.048e-07,368.784,10.0662,398.045,999.891,0.318,0.00505271,2.39161,0.277857,355.081,19.1386,1.43247,20.9024,42.9635,-29.2608,13.7027, +Perimeter Node(14),18.10.1998 00:25:09,459346,-7.32597e+06,2729.86,3.048e-07,358.011,10.1549,368.165,998.982,0.318,0.124656,2.39161,0.270309,328.452,17.9424,1.7126,9.25286,39.7126,-10.1534,29.5592, +Perimeter Node(14),19.12.1998 16:43:50,459345,-7.32597e+06,2729.76,3.048e-07,358.63,10.1058,376.444,999.394,0.318,0.113547,2.39161,0.230492,346.424,17.2431,1.87615,16.8705,30.02,-17.8138,12.2062, +Perimeter Node(14),20.02.1999 09:02:31,459345,-7.32597e+06,2729.78,3.048e-07,355.495,10.131,364.229,998.837,0.318,0.107836,2.39161,0.310844,332.196,17.369,1.97329,9.27395,32.0324,-8.73396,23.2984, +Perimeter Node(14),25.06.1999 17:39:53,459344,-7.32597e+06,2729.73,3.048e-07,355.969,10.1076,370.042,999.279,0.318,0.10126,2.39161,0.195615,345.14,16.9214,2.07827,13.1186,24.9015,-14.0723,10.8292, +Perimeter Node(14),27.08.1999 09:58:34,459344,-7.32597e+06,2729.6,3.048e-07,348.251,10.1429,357.094,998.506,0.318,0.000285445,2.39161,0.290104,331.121,17.3962,2.07742,6.29481,25.9722,-8.84301,17.1292, +Perimeter Node(14),30.12.1999 18:35:56,459343,-7.32597e+06,2729.5,3.048e-07,345.321,10.1232,361.618,998.774,0.318,0.000400583,2.39161,0.146788,340.774,17.3216,2.08819,8.56534,20.8444,-16.2972,4.54713, +Perimeter Node(14),06.09.2000 11:50:41,459342,-7.32596e+06,2729.11,3.048e-07,351.873,10.1539,365.482,998.495,0.318,0.00210785,2.39161,0.0406202,336.455,21.791,0.694479,1.78132,29.0266,-13.6089,15.4177, +Perimeter Node(14),09.01.2001 20:28:03,459343,-7.32597e+06,2728.78,3.048e-07,356.175,10.1289,368.494,999.024,0.318,0.272273,2.39161,0.104394,343.419,19.6813,0.249747,4.68911,25.075,-12.3188,12.7562, +Perimeter Node(14),13.03.2001 12:46:44,459342,-7.32596e+06,2728.77,3.048e-07,355.783,10.1332,368.822,998.853,0.318,0.251695,2.39161,0.11818,341.532,17.6898,0.382321,5.42386,27.2902,-13.0387,14.2515, +Perimeter Node(14),15.05.2001 05:05:26,459341,-7.32596e+06,2728.76,3.048e-07,356.982,10.1224,370.926,998.995,0.318,0.234562,2.39161,0.0931658,346.488,16.9378,0.437221,5.67346,24.4379,-13.944,10.4939, +Perimeter Node(14),17.09.2001 13:42:48,459341,-7.32596e+06,2728.76,3.048e-07,358.716,10.1205,371.178,998.985,0.318,0.212687,2.39161,0.103954,345.827,16.5428,0.507652,5.25091,25.3505,-12.4619,12.8886, +Perimeter Node(14),20.01.2002 22:20:10,459341,-7.32596e+06,2728.76,3.048e-07,360.476,10.1087,372.761,999.069,0.318,0.183905,2.39161,0.0884608,347.978,15.902,0.633926,6.23183,24.7833,-12.2852,12.498, +Perimeter Node(14),26.05.2002 06:57:32,459341,-7.32596e+06,2728.75,3.048e-07,361.969,10.104,374.974,999.138,0.318,0.164497,2.39161,0.0808189,349.021,15.6041,0.747222,6.66349,25.9526,-13.0044,12.9482, +Perimeter Node(14),28.09.2002 15:34:55,459341,-7.32596e+06,2728.74,3.048e-07,362.947,10.1074,376.246,999.187,0.318,0.145621,2.39161,0.0931632,347.93,15.5989,0.860039,7.43518,28.3157,-13.2986,15.017, +Perimeter Node(14),30.11.2002 07:53:36,459341,-7.32596e+06,2728.74,3.048e-07,363.462,10.1048,377.644,999.212,0.318,0.133991,2.39161,0.107215,348.63,15.4011,0.961568,7.81111,29.0136,-14.1817,14.8319, +Perimeter Node(14),01.02.2003 00:12:17,459341,-7.32596e+06,2728.73,3.048e-07,362.755,10.1056,378.206,999.282,0.318,0.124331,2.39161,0.0695324,347.327,15.4818,1.02306,8.52166,30.8789,-15.4516,15.4273, +Perimeter Node(14),04.04.2003 16:30:58,459341,-7.32596e+06,2728.73,3.048e-07,364.483,10.1049,378.886,999.347,0.318,0.118321,2.39161,0.133513,347.747,15.3973,1.0787,8.72775,31.1388,-14.4024,16.7364, +Perimeter Node(14),06.06.2003 08:49:39,459341,-7.32596e+06,2728.73,3.048e-07,364.503,10.1026,379.225,999.267,0.318,0.11522,2.39161,0.135714,347.685,15.3505,1.12045,9.11265,31.5403,-14.722,16.8183, +Perimeter Node(14),09.10.2003 17:27:02,459341,-7.32596e+06,2728.72,3.048e-07,364.257,10.1027,379.693,999.351,0.318,0.10979,2.39161,0.133904,346.925,15.3596,1.17456,9.4826,32.7675,-15.4358,17.3316, +Perimeter Node(14),16.06.2004 10:41:46,459341,-7.32596e+06,2728.72,3.048e-07,365.025,10.1009,380.405,999.282,0.318,0.103214,2.39161,0.135584,346.849,15.2486,1.26991,9.79829,33.5558,-15.3802,18.1756, +Perimeter Node(14),19.10.2004 19:19:08,459341,-7.32596e+06,2728.72,3.048e-07,365.109,10.098,381.359,999.288,0.318,0.0913404,2.39161,0.135377,345.706,15.0783,1.4663,10.6229,35.6525,-16.2498,19.4027, +Perimeter Node(14),27.06.2005 12:33:53,459341,-7.32596e+06,2728.72,3.048e-07,365.178,10.0948,381.89,999.291,0.318,0.0864373,2.39161,0.135672,345.293,14.9688,1.56472,11.6612,36.597,-16.7126,19.8844, +Perimeter Node(14),10.11.2006 23:03:22,459341,-7.32596e+06,2728.72,3.048e-07,364.999,10.0914,382.479,999.282,0.318,0.080257,2.39161,0.131556,344.395,14.8202,1.7276,12.1311,38.0838,-17.4798,20.604, +Perimeter Node(14),01.12.2006,459341,-7.32596e+06,2728.71,3.048e-07,364.063,10.0899,383.598,999.505,0.318,0.0660479,2.39161,0.132789,341.701,14.6824,2.10747,13.5398,41.8963,-19.5349,22.3613, +Perimeter Node(14),01.12.2006,459341,-7.32596e+06,2728.71,3.048e-07,364.063,10.0899,383.598,999.505,0.318,0.0660479,2.39161,0.132789,341.701,14.6824,2.10747,13.5398,41.8963,-19.5349,22.3613, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Perimeter Node(15),09.12.1997 22:12:00,459348,-7.32598e+06,2731.15,0.0127743,385.625,10.1155,394.339,1000.24,0.318,0.450137,2.39161,0.0955937,332.495,30.6016,0.431921,36.7339,61.8444,-8.7138,53.1306, +Perimeter Node(15),05.02.1998 14:35:11,459345,-7.32597e+06,2731.66,3.048e-07,386.058,10.0768,393.467,1000.09,0.318,0.124201,2.39161,0.0482695,345.993,20.9481,1.00409,34.1462,47.4732,-7.4082,40.065, +Perimeter Node(15),12.04.1998 23:29:05,459344,-7.32597e+06,2731.5,3.048e-07,386.486,10.0788,395.183,1000.2,0.318,0.13131,2.39161,0.0401889,350.284,20.1296,1.25133,25.2463,44.8994,-8.69674,36.2026, +Perimeter Node(15),16.08.1998 08:06:27,459342,-7.32596e+06,2730.15,3.048e-07,368.796,10.0662,396.165,999.891,0.318,0.123895,2.39161,0.0237944,354.411,20.9575,1.46223,21.6058,41.7541,-27.3687,14.3855, +Perimeter Node(15),18.10.1998 00:25:09,459341,-7.32596e+06,2730.12,3.048e-07,358.043,10.1549,368.287,998.983,0.318,0.119349,2.39161,0.0414172,328.372,20.283,1.71317,8.68604,39.9156,-10.2442,29.6714, +Perimeter Node(15),19.12.1998 16:43:50,459340,-7.32596e+06,2730.08,3.048e-07,358.667,10.1058,374.998,999.394,0.318,0.103971,2.39161,0.0283677,345.847,18.5539,1.96912,16.8751,29.1505,-16.3304,12.82, +Perimeter Node(15),20.02.1999 09:02:31,459339,-7.32596e+06,2729.9,3.048e-07,355.535,10.131,363.645,998.839,0.318,0.098685,2.39161,0.059577,332.183,18.9601,2.06857,9.10482,31.462,-8.10944,23.3526, +Perimeter Node(15),25.06.1999 17:39:53,459337,-7.32596e+06,2729.41,3.048e-07,355.941,10.1076,369.926,999.279,0.318,0.0973984,2.39161,0.0198789,344.782,18.8346,2.09776,12.7172,25.1431,-13.9847,11.1584, +Perimeter Node(15),27.08.1999 09:58:34,459336,-7.32595e+06,2729.32,3.048e-07,348.231,10.1429,357.35,998.505,0.318,0.0923078,2.39161,0.0451285,331.01,18.8686,2.22136,6.46064,26.3393,-9.11904,17.2203, +Perimeter Node(15),30.12.1999 18:35:56,459334,-7.32595e+06,2729.03,3.048e-07,345.276,10.1232,361.382,998.772,0.318,0.0919795,2.39161,0.0146455,340.491,18.5087,2.21756,9.11867,20.8906,-16.1059,4.7847, +Perimeter Node(15),06.09.2000 11:50:41,459331,-7.32594e+06,2728.75,0.0140682,351.838,10.1539,357.235,998.494,0.318,0.0952698,2.39161,0.00607706,336.544,18.5358,2.19792,4.8067,20.6914,-5.39735,15.294, +Perimeter Node(15),09.01.2001 20:28:03,459332,-7.32594e+06,2728.62,3.048e-07,356.182,10.1289,363.581,999.024,0.318,0.000305367,2.39161,0.0216225,348.208,17.7834,2.28107,7.33018,15.3724,-7.39884,7.97359, +Perimeter Node(15),13.03.2001 12:46:44,459332,-7.32594e+06,2728.64,3.048e-07,355.804,10.1332,361.175,998.854,0.318,0.000729925,2.39161,0.0317824,343.747,16.964,2.53561,5.63658,17.4284,-5.37083,12.0575, +Perimeter Node(15),15.05.2001 05:05:26,459330,-7.32594e+06,2728.53,3.048e-07,356.976,10.1224,362.861,998.995,0.318,0.0792451,2.39161,0.0216731,347.511,16.4893,2.63694,6.50945,15.35,-5.88521,9.4648, +Perimeter Node(15),17.09.2001 13:42:48,459330,-7.32594e+06,2728.53,0.00134699,358.716,10.1205,363.064,998.985,0.318,0.0777377,2.39161,0.0286336,347.174,16.2808,2.68861,5.51498,15.8909,-4.34863,11.5423, +Perimeter Node(15),20.01.2002 22:20:10,459330,-7.32594e+06,2728.51,0.00224547,360.468,10.1087,364.643,999.069,0.318,0.0742188,2.39161,0.0232836,349.032,15.7922,2.81168,6.44378,15.611,-4.17508,11.4359, +Perimeter Node(15),26.05.2002 06:57:32,459330,-7.32594e+06,2728.49,3.048e-07,361.959,10.104,366.684,999.137,0.318,0.0712952,2.39161,0.0214082,350.185,15.4419,2.92489,6.59099,16.4991,-4.72515,11.7739, +Perimeter Node(15),28.09.2002 15:34:55,459330,-7.32594e+06,2728.5,3.70934e-05,362.942,10.1074,367.775,999.187,0.318,0.0694863,2.39161,0.0269229,349.732,15.2442,3.00643,6.64043,18.0428,-4.8325,13.2103, +Perimeter Node(15),30.11.2002 07:53:36,459330,-7.32594e+06,2728.49,3.048e-07,363.459,10.1048,368.866,999.212,0.318,0.0671208,2.39161,0.033085,350.356,15.0049,3.11219,6.92488,18.5098,-5.40676,13.1031, +Perimeter Node(15),01.02.2003 00:12:17,459330,-7.32594e+06,2728.5,3.048e-07,362.744,10.1056,369.37,999.28,0.318,0.0666538,2.39161,0.0174179,349.732,14.9415,3.14074,7.01937,19.6373,-6.6256,13.0117, +Perimeter Node(15),04.04.2003 16:30:58,459330,-7.32594e+06,2728.5,3.048e-07,364.487,10.1049,370.017,999.346,0.318,0.065778,2.39161,0.0437817,350.28,14.8449,3.18534,6.91732,19.738,-5.5306,14.2074, +Perimeter Node(15),06.06.2003 08:49:39,459330,-7.32594e+06,2728.5,3.048e-07,364.507,10.1026,370.088,999.268,0.318,0.0646142,2.39161,0.0460912,350.134,14.7552,3.24145,7.46359,19.9544,-5.58168,14.3728, +Perimeter Node(15),09.10.2003 17:27:02,459330,-7.32594e+06,2728.5,3.048e-07,364.259,10.1027,370.332,999.35,0.318,0.0638602,2.39161,0.0439729,349.628,14.6939,3.28326,7.59391,20.7046,-6.07297,14.6317, +Perimeter Node(15),16.06.2004 10:41:46,459330,-7.32594e+06,2728.5,0.000482376,365.031,10.1009,370.639,999.283,0.318,0.0619189,2.39161,0.0464196,349.503,14.5554,3.38729,7.75493,21.1362,-5.60828,15.5279, +Perimeter Node(15),19.10.2004 19:19:08,459330,-7.32594e+06,2728.5,0.0023192,365.116,10.098,370.786,999.288,0.318,0.058472,2.39161,0.0464838,348.447,14.3319,3.59188,8.33515,22.3381,-5.66955,16.6685, +Perimeter Node(15),27.06.2005 12:33:53,459330,-7.32594e+06,2728.5,0.00320914,365.186,10.0948,370.899,999.291,0.318,0.0567967,2.39161,0.0456604,348.049,14.2122,3.70009,9.12435,22.8504,-5.71291,17.1375, +Perimeter Node(15),10.11.2006 23:03:22,459330,-7.32594e+06,2728.48,0.00632046,365.01,10.0914,370.543,999.283,0.318,0.0533471,2.39161,0.0429515,346.957,14.025,3.93564,9.60277,23.5858,-5.53316,18.0526, +Perimeter Node(15),01.12.2006,459330,-7.32594e+06,2728.49,3.048e-07,364.071,10.0899,370.58,999.504,0.318,0.0486067,2.39161,0.0437233,344.77,13.7858,4.33507,10.2479,25.8104,-6.50932,19.3011, +Perimeter Node(15),01.12.2006,459330,-7.32594e+06,2728.49,3.048e-07,364.071,10.0899,370.58,999.504,0.318,0.0486067,2.39161,0.0437233,344.77,13.7858,4.33507,10.2479,25.8104,-6.50932,19.3011, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Perimeter Node(16),09.12.1997 22:12:00,459346,-7.32597e+06,2731.67,0.0279007,385.723,10.1155,392.091,1000.25,0.318,0.0612416,2.39161,0.0621144,328.553,30.9553,0.270482,39.4807,63.5383,-6.36789,57.1704, +Perimeter Node(16),05.02.1998 14:35:11,459342,-7.32596e+06,2731.85,0.0137006,386.09,10.0768,391.004,1000.09,0.318,0.172616,2.39161,0.0510028,342.71,21.9271,0.71488,35.9467,48.2942,-4.91444,43.3798, +Perimeter Node(16),12.04.1998 23:29:05,459340,-7.32596e+06,2731.15,3.048e-07,386.45,10.0788,394.204,1000.19,0.318,0.146251,2.39161,0.025808,350.759,20.9562,1.12085,24.3302,43.4448,-7.75365,35.6912, +Perimeter Node(16),16.08.1998 08:06:27,459337,-7.32596e+06,2729.95,3.048e-07,368.779,10.0662,392.801,999.891,0.318,0.104483,2.39161,0.0315366,352.959,21.2787,1.47032,23.17,39.8421,-24.0219,15.8202, +Perimeter Node(16),18.10.1998 00:25:09,459336,-7.32595e+06,2729.84,3.048e-07,358.014,10.1549,367.253,998.982,0.318,0.115397,2.39161,0.0258647,328.458,20.9451,1.75629,8.93686,38.7946,-9.23833,29.5563, +Perimeter Node(16),19.12.1998 16:43:50,459333,-7.32595e+06,2729.32,3.048e-07,358.592,10.1058,374.049,999.394,0.318,0.115162,2.39161,0.0253024,344.684,20.1341,1.74194,16.9669,29.3654,-15.4577,13.9077, +Perimeter Node(16),20.02.1999 09:02:31,459332,-7.32594e+06,2729.24,3.048e-07,355.464,10.131,363.824,998.836,0.318,0.11292,2.39161,0.0327316,332.247,20.2616,1.78293,8.74669,31.577,-8.35996,23.217, +Perimeter Node(16),25.06.1999 17:39:53,459329,-7.32594e+06,2728.54,3.048e-07,355.849,10.1076,368.715,999.275,0.318,0.116935,2.39161,0.0143165,344.111,19.8109,1.73742,12.8009,24.6041,-12.8653,11.7387, +Perimeter Node(16),27.08.1999 09:58:34,459329,-7.32594e+06,2728.52,3.048e-07,348.13,10.1429,357.212,998.5,0.318,0.109304,2.39161,0.033872,330.935,19.6081,1.89337,6.53482,26.2766,-9.08158,17.195, +Perimeter Node(16),30.12.1999 18:35:56,459326,-7.32593e+06,2728.44,3.048e-07,345.218,10.1232,360.214,998.769,0.318,0.106496,2.39161,0.00581604,339.917,18.2335,1.93195,10.1787,20.2972,-14.9961,5.30107, +Perimeter Node(16),06.09.2000 11:50:41,459322,-7.32592e+06,2728.45,3.048e-07,351.804,10.1539,357.288,998.493,0.318,0.097801,2.39161,0.00750541,336.714,17.0005,1.89961,5.84378,20.5735,-5.48412,15.0894, +Perimeter Node(16),09.01.2001 20:28:03,459322,-7.32592e+06,2727.85,3.048e-07,356.104,10.1289,363.099,999.021,0.318,0.0823842,2.39161,0.00431447,347.395,16.5181,2.24625,9.69519,15.7048,-6.99494,8.70983, +Perimeter Node(16),13.03.2001 12:46:44,459322,-7.32592e+06,2727.86,3.048e-07,355.723,10.1332,361.426,998.851,0.318,0.0850262,2.39161,0.00949446,342.74,16.4752,2.36639,7.11528,18.6856,-5.70315,12.9825, +Perimeter Node(16),15.05.2001 05:05:26,459320,-7.32592e+06,2727.87,3.048e-07,356.911,10.1224,363.631,998.992,0.318,0.0827732,2.39161,0.0074527,346.243,15.7614,2.43029,8.56498,17.3875,-6.72017,10.6674, +Perimeter Node(16),17.09.2001 13:42:48,459320,-7.32592e+06,2727.87,3.048e-07,358.652,10.1205,364.063,998.982,0.318,0.0796624,2.39161,0.0123655,346.253,15.6006,2.50815,7.14187,17.8101,-5.41169,12.3984, +Perimeter Node(16),20.01.2002 22:20:10,459320,-7.32592e+06,2727.87,3.048e-07,360.408,10.1087,365.204,999.066,0.318,0.0748002,2.39161,0.0102543,347.959,15.2267,2.6721,8.3422,17.2454,-4.79652,12.4489, +Perimeter Node(16),26.05.2002 06:57:32,459319,-7.32592e+06,2727.88,3.048e-07,361.9,10.104,366.509,999.134,0.318,0.0705647,2.39161,0.00919549,349.174,14.9348,2.82525,8.52177,17.3352,-4.6089,12.7263, +Perimeter Node(16),28.09.2002 15:34:55,459320,-7.32592e+06,2727.9,0.00608892,362.886,10.1074,366.655,999.184,0.318,0.067023,2.39161,0.0127726,348.832,14.7559,2.97137,8.44298,17.8228,-3.76884,14.0539, +Perimeter Node(16),30.11.2002 07:53:36,459319,-7.32592e+06,2727.91,0.00628128,363.406,10.1048,367.052,999.209,0.318,0.0639052,2.39161,0.0155397,349.396,14.5363,3.1143,8.81219,17.6561,-3.64645,14.0096, +Perimeter Node(16),01.02.2003 00:12:17,459320,-7.32592e+06,2727.94,3.048e-07,362.689,10.1056,366.846,999.278,0.318,0.062168,2.39161,0.00774559,348.893,14.4613,3.19875,8.77047,17.9529,-4.15702,13.7959, +Perimeter Node(16),04.04.2003 16:30:58,459320,-7.32592e+06,2727.95,0.013529,364.444,10.1049,367.015,999.344,0.318,0.0607906,2.39161,0.0207867,349.401,14.3719,3.27004,8.61798,17.6148,-2.57138,15.0435, +Perimeter Node(16),06.06.2003 08:49:39,459320,-7.32592e+06,2727.95,0.0158838,364.469,10.1026,366.856,999.266,0.318,0.05949,2.39161,0.0202197,349.204,14.2805,3.34035,9.3051,17.6526,-2.3875,15.2651, +Perimeter Node(16),09.10.2003 17:27:02,459320,-7.32592e+06,2727.97,0.0142194,364.218,10.1027,366.659,999.349,0.318,0.0582227,2.39161,0.0215583,348.755,14.219,3.41177,9.36427,17.9036,-2.44145,15.4622, +Perimeter Node(16),16.06.2004 10:41:46,459320,-7.32592e+06,2727.97,0.0234498,364.999,10.1009,366.605,999.281,0.318,0.0559795,2.39161,0.018177,348.591,14.0794,3.54901,9.53191,18.0146,-1.60588,16.4087, +Perimeter Node(16),19.10.2004 19:19:08,459320,-7.32592e+06,2727.97,0.0302366,365.087,10.098,366.151,999.287,0.318,0.0519355,2.39161,0.0167366,347.52,13.8606,3.82461,10.0767,18.6316,-1.06401,17.5676, +Perimeter Node(16),27.06.2005 12:33:53,459320,-7.32592e+06,2727.97,0.0336105,365.157,10.0948,365.955,999.29,0.318,0.050075,3.20679,0.0181558,347.068,13.7492,3.96718,10.9409,18.8873,-0.798033,18.0893, +Perimeter Node(16),10.11.2006 23:03:22,459320,-7.32592e+06,2727.97,0.040444,364.98,10.0914,365.387,999.281,0.318,0.0466465,5.58736,0.0214397,345.919,13.5545,4.25979,11.5503,19.4686,-0.40696,19.0616, +Perimeter Node(16),01.12.2006,459320,-7.32592e+06,2727.99,0.0405706,364.043,10.0899,364.352,999.502,0.318,0.0412726,5.64003,0.0214578,343.782,13.3133,4.80936,11.9072,20.57,-0.30896,20.261, +Perimeter Node(16),01.12.2006,459320,-7.32592e+06,2727.99,0.0405706,364.043,10.0899,364.352,999.502,0.318,0.0412726,5.64003,0.0214578,343.782,13.3133,4.80936,11.9072,20.57,-0.30896,20.261, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Perimeter Node(17),09.12.1997 22:12:00,459344,-7.32597e+06,2732.1,0.0150641,385.715,10.1155,389.462,1000.25,0.318,0.267037,2.39161,0.0846691,324.148,31.1885,0.0507098,41.4878,65.3145,-3.74673,61.5677, +Perimeter Node(17),05.02.1998 14:35:11,459338,-7.32596e+06,2731.91,0.0124256,386.09,10.0768,388.017,1000.09,0.318,0.0835201,2.39161,0.0327902,338.649,22.602,0.342245,37.1057,49.3678,-1.92747,47.4404, +Perimeter Node(17),12.04.1998 23:29:05,459336,-7.32595e+06,2731.16,0.000483242,386.397,10.0788,391.061,1000.19,0.318,0.0873185,2.39161,0.0278474,351.367,20.3096,1.05141,24.7753,39.6937,-4.6643,35.0294, +Perimeter Node(17),16.08.1998 08:06:27,459332,-7.32594e+06,2729.61,3.048e-07,368.376,10.0662,391.139,999.891,0.318,0.167253,2.39161,0.635783,349.756,23.7261,0.912036,23.7787,41.3836,-22.7637,18.6199, +Perimeter Node(17),18.10.1998 00:25:09,459330,-7.32594e+06,2729.57,3.048e-07,357.869,10.1549,364.869,998.977,0.318,0.132104,2.39161,0.0464293,328.014,20.8683,1.24239,6.6597,36.8553,-7.00019,29.8551, +Perimeter Node(17),19.12.1998 16:43:50,459327,-7.32593e+06,2728.92,3.048e-07,358.2,10.1058,370.556,999.394,0.318,0.131089,2.39161,0.448275,342.773,20.026,1.35364,19.4577,27.7829,-12.3554,15.4275, +Perimeter Node(17),20.02.1999 09:02:31,459326,-7.32593e+06,2728.95,3.048e-07,355.186,10.131,361.252,998.823,0.318,0.151827,2.39161,0.0975768,332.092,19.3377,1.32878,8.73346,29.1596,-6.06554,23.094, +Perimeter Node(17),25.06.1999 17:39:53,459322,-7.32592e+06,2728.27,3.048e-07,355.699,10.1076,366.433,999.273,0.318,0.0911073,2.39161,0.0745117,342.061,18.9184,1.08581,15.9975,24.3721,-10.7336,13.6385, +Perimeter Node(17),27.08.1999 09:58:34,459322,-7.32592e+06,2728.3,3.048e-07,347.809,10.1429,356.893,998.484,0.318,0.135341,2.39161,0.11078,330.813,18.0487,1.39595,7.72082,26.0801,-9.08394,16.9962, +Perimeter Node(17),30.12.1999 18:35:56,459318,-7.32591e+06,2728.45,3.048e-07,345.266,10.1232,359.91,998.767,0.318,0.135094,2.39161,0.141884,338.198,16.6141,1.39355,13.2485,21.7117,-14.6442,7.06748, +Perimeter Node(17),06.09.2000 11:50:41,459313,-7.3259e+06,2728.49,3.048e-07,351.753,10.1539,358.663,998.474,0.318,0.0847214,2.39161,0.0472388,336.895,15.5317,1.40106,6.98253,21.7672,-6.9093,14.8579, +Perimeter Node(17),09.01.2001 20:28:03,459313,-7.3259e+06,2727.93,3.048e-07,356.112,10.1289,364.277,999.022,0.318,0.061368,2.39161,0.00116735,345.707,15.4915,1.94994,13.5206,18.5702,-8.16477,10.4055, +Perimeter Node(17),13.03.2001 12:46:44,459313,-7.3259e+06,2727.94,3.048e-07,355.727,10.1332,362.697,998.851,0.318,0.0720065,2.39161,0.00905989,341.493,15.3253,2.1063,9.93334,21.2039,-6.96992,14.234, +Perimeter Node(17),15.05.2001 05:05:26,459311,-7.3259e+06,2727.9,3.048e-07,356.888,10.1224,361.738,998.992,0.318,0.0658465,2.39161,0.0253199,344.42,14.5956,2.30723,12.0356,17.318,-4.85023,12.4678, +Perimeter Node(17),17.09.2001 13:42:48,459309,-7.32589e+06,2727.88,0.027321,358.658,10.1205,360.626,998.982,0.318,0.0625518,2.39161,0.00551095,344.552,14.1091,2.45636,10.3857,16.074,-1.96856,14.1054, +Perimeter Node(17),20.01.2002 22:20:10,459309,-7.32589e+06,2727.97,0.0410555,360.424,10.1087,360.736,999.067,0.318,0.0576884,5.84466,0.00761674,346.085,13.5652,2.67674,12.1642,14.6509,-0.311421,14.3394, +Perimeter Node(17),26.05.2002 06:57:32,459309,-7.32589e+06,2728.01,0.0395135,361.92,10.104,361.97,999.135,0.318,0.0249016,5.21055,0.00619567,347.451,13.2376,2.84979,12.2774,14.5189,-0.0504134,14.4685, +Perimeter Node(17),28.09.2002 15:34:55,459309,-7.32589e+06,2728.01,0.0377057,362.905,10.1074,362.898,999.185,0.318,0.0509075,4.52759,0.00832906,347.274,13.2293,2.96439,12.009,15.624,0.00620647,15.6302, +Perimeter Node(17),30.11.2002 07:53:36,459309,-7.32589e+06,2728.02,0.0377696,363.429,10.1048,363.351,999.21,0.318,0.0481926,4.55064,0.0105917,347.745,13.0206,3.11378,12.5753,15.6057,0.0783137,15.684, +Perimeter Node(17),01.02.2003 00:12:17,459310,-7.32589e+06,2728.01,0.0230149,362.7,10.1056,364.24,999.279,0.318,0.0473164,2.39161,0.00492179,347.424,13.1689,3.16055,12.2907,16.816,-1.5403,15.2757, +Perimeter Node(17),04.04.2003 16:30:58,459310,-7.3259e+06,2728.01,0.0335496,364.465,10.1049,364.758,999.344,0.318,0.0459355,3.1894,0.0105977,347.863,13.1471,3.22618,12.1363,16.8949,-0.29232,16.6026, +Perimeter Node(17),06.06.2003 08:49:39,459310,-7.32589e+06,2728.02,0.0374638,364.49,10.1026,364.375,999.267,0.318,0.0447206,4.44101,0.0118781,347.603,13.0104,3.30464,13.0884,16.7717,0.115204,16.8869, +Perimeter Node(17),09.10.2003 17:27:02,459310,-7.3259e+06,2728.02,0.0327193,364.241,10.1027,364.594,999.349,0.318,0.043878,2.95841,0.0111905,347.261,13.0243,3.36774,13.0473,17.3329,-0.352874,16.98, +Perimeter Node(17),16.06.2004 10:41:46,459310,-7.32589e+06,2728.02,0.0411359,365.014,10.1009,364.385,999.282,0.318,0.0421426,5.87907,0.010235,347.036,12.8972,3.50715,13.3104,17.3496,0.628869,17.9785, +Perimeter Node(17),19.10.2004 19:19:08,459310,-7.32589e+06,2728.01,0.0472843,365.098,10.098,363.801,999.287,0.318,0.0390866,8.92887,0.0092584,345.966,12.7521,3.78212,13.9837,17.835,1.29701,19.132, +Perimeter Node(17),27.06.2005 12:33:53,459310,-7.3259e+06,2728.01,0.0506711,365.166,10.0948,363.5,999.29,0.318,0.0376743,10.9882,0.0083286,345.453,12.6776,3.9243,15.1268,18.0464,1.6663,19.7127, +Perimeter Node(17),10.11.2006 23:03:22,459309,-7.32589e+06,2727.88,0.054525,364.975,10.0914,362.423,999.281,0.318,0.0357263,13.6909,0.00612721,344.2,12.5578,4.14055,15.7983,18.2235,2.55149,20.775, +Perimeter Node(17),01.12.2006,459310,-7.3259e+06,2727.89,0.0507605,364.037,10.0899,361.82,999.501,0.318,0.0322234,11.0465,0.0061315,342.208,12.4729,4.70855,16.0419,19.6113,2.2167,21.828, +Perimeter Node(17),01.12.2006,459310,-7.3259e+06,2727.89,0.0507605,364.037,10.0899,361.82,999.501,0.318,0.0322234,11.0465,0.0061315,342.208,12.4729,4.70855,16.0419,19.6113,2.2167,21.828, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Perimeter Node(18),09.12.1997 22:12:00,459341,-7.32596e+06,2733.2,0.0150918,385.422,10.1155,384.32,1000.23,0.318,0.337699,2.39161,0.169745,321.582,29.3366,0.0373547,30.5614,62.7378,1.10173,63.8395, +Perimeter Node(18),05.02.1998 14:35:11,459335,-7.32595e+06,2732.2,0.0231186,386.05,10.0768,383.668,1000.09,0.318,0.30174,2.39161,0.0258266,335.228,22.0446,0.0853069,31.5423,48.4401,2.3823,50.8224, +Perimeter Node(18),12.04.1998 23:29:05,459333,-7.32594e+06,2731.49,0.0161165,386.307,10.0788,386.63,1000.17,0.318,0.14151,2.39161,0.0458599,347.439,20.2156,0.643763,15.2496,39.1913,-0.323512,38.8678, +Perimeter Node(18),16.08.1998 08:06:27,459328,-7.32593e+06,2729.53,3.048e-07,363.875,10.0662,386.182,999.891,0.318,0.116427,2.39161,1.30833,345.639,24.424,0.125055,25.0777,40.5431,-22.3071,18.236, +Perimeter Node(18),18.10.1998 00:25:09,459325,-7.32593e+06,2730.53,0.0274952,357.818,10.1549,357.075,998.978,0.318,0.219062,2.39161,0.0440667,326.117,17.0661,0.733863,4.07193,30.9577,0.743244,31.701, +Perimeter Node(18),19.12.1998 16:43:50,459321,-7.32592e+06,2729.02,3.048e-07,354.39,10.1058,366.939,999.394,0.318,0.0581345,2.39161,0.921741,338.194,19.8025,0.264222,23.0359,28.7455,-12.5495,16.196, +Perimeter Node(18),20.02.1999 09:02:31,459321,-7.32592e+06,2730.01,0.0182515,354.778,10.131,355.227,998.804,0.318,0.145933,2.39161,0.166256,331.77,15.3571,0.669678,8.2062,23.4579,-0.449329,23.0086, +Perimeter Node(18),25.06.1999 17:39:53,459313,-7.3259e+06,2728.76,3.048e-07,354.124,10.1076,361.107,999.274,0.318,0.153411,2.39161,0.180468,337.032,16.6343,0.12708,20.6759,24.0754,-6.98316,17.0922, +Perimeter Node(18),27.08.1999 09:58:34,459313,-7.3259e+06,2728.75,3.048e-07,346.245,10.1429,354.795,998.41,0.318,0.0846892,2.39161,0.273675,329.236,15.6823,0.820327,9.73176,25.5588,-8.55002,17.0088, +Perimeter Node(18),30.12.1999 18:35:56,459302,-7.32588e+06,2728.5,0.0801071,343.837,10.1232,340.736,998.763,0.318,0.444442,43.4169,1.71874,331.736,11.4627,0.0261277,8.75733,8.99952,3.1008,12.1003, +Perimeter Node(18),06.09.2000 11:50:41,459308,-7.32589e+06,2728.25,0.0212412,351.649,10.1539,350.939,998.425,0.318,0.0337305,2.39161,0.036863,337.3,13.7112,1.80782,6.74178,13.639,0.710049,14.3491, +Perimeter Node(18),09.01.2001 20:28:03,459298,-7.32587e+06,2727.71,0.0818727,356.084,10.1289,348.688,999.021,0.318,0.0333681,46.3514,0.0175503,340.657,11.4018,0.490927,20.5896,8.03105,7.39566,15.4267, +Perimeter Node(18),13.03.2001 12:46:44,459303,-7.32588e+06,2727.75,0.0466146,355.674,10.1332,351.863,998.848,0.318,0.0430036,8.55484,0.0154355,339.969,12.6432,1.98542,13.0553,11.8945,3.81108,15.7055, +Perimeter Node(18),15.05.2001 05:05:26,459304,-7.32588e+06,2727.77,0.0295684,356.793,10.1224,354.42,998.991,0.318,0.0386929,2.39161,0.0426973,342.621,12.7455,2.24457,14.8609,11.7993,2.37242,14.1717, +Perimeter Node(18),17.09.2001 13:42:48,459299,-7.32587e+06,2730.1,0.0980937,358.856,10.1205,352.18,998.991,0.318,0.0190379,79.7205,0.0415406,342.984,10.1892,1.1657,14.1259,9.19638,6.67579,15.8722, +Perimeter Node(18),20.01.2002 22:20:10,459298,-7.32587e+06,2729.54,0.0819983,360.568,10.1087,353.566,999.073,0.318,0.0279556,46.5651,0.0116738,344.072,10.1834,0.904649,16.4575,9.49439,7.00189,16.4963, +Perimeter Node(18),26.05.2002 06:57:32,459298,-7.32587e+06,2729.06,0.0674404,362.014,10.104,355.521,999.14,0.318,0.0304442,25.9063,0.00632751,345.346,10.1843,0.99618,16.7202,10.1752,6.49284,16.668, +Perimeter Node(18),28.09.2002 15:34:55,459299,-7.32587e+06,2728.82,0.0671628,362.977,10.1074,356.554,999.188,0.318,0.0224855,25.5877,0.00617905,345.288,10.1972,1.39096,16.5304,11.266,6.42268,17.6887, +Perimeter Node(18),30.11.2002 07:53:36,459298,-7.32587e+06,2728.58,0.0586337,363.478,10.1048,357.154,999.213,0.318,0.0225619,17.025,0.00424555,345.466,10.1964,1.28501,17.2925,11.6881,6.32419,18.0123, +Perimeter Node(18),01.02.2003 00:12:17,459300,-7.32587e+06,2728.52,0.0521739,362.748,10.1056,357.764,999.281,0.318,0.0182974,11.9952,0.00504525,345.413,10.1987,1.70581,17.089,12.3506,4.98422,17.3349, +Perimeter Node(18),04.04.2003 16:30:58,459300,-7.32587e+06,2728.5,0.0624489,364.51,10.1049,358.171,999.346,0.318,0.0138692,20.5693,0.00468343,345.732,10.1987,1.81825,17.0035,12.4394,6.3394,18.7789, +Perimeter Node(18),06.06.2003 08:49:39,459299,-7.32587e+06,2728.4,0.0580418,364.524,10.1026,357.95,999.268,0.318,0.0145007,16.5146,0.00341727,345.324,10.1996,1.63647,18.1395,12.626,6.57349,19.1995, +Perimeter Node(18),09.10.2003 17:27:02,459300,-7.32587e+06,2728.38,0.0569736,364.274,10.1027,358.288,999.35,0.318,0.0144395,15.6195,0.00409014,345.191,10.345,1.87691,17.9012,13.0976,5.98582,19.0834, +Perimeter Node(18),16.06.2004 10:41:46,459300,-7.32587e+06,2728.34,0.0603821,365.044,10.1009,358.24,999.283,0.318,0.0129113,18.5939,0.00258765,344.868,10.3514,1.87354,18.2006,13.3716,6.80427,20.1758, +Perimeter Node(18),19.10.2004 19:19:08,459300,-7.32587e+06,2728.3,0.0632288,365.126,10.098,357.877,999.289,0.318,0.0124032,21.3496,0.00189593,343.818,10.3902,2.04924,18.9978,14.0592,7.24891,21.3081, +Perimeter Node(18),27.06.2005 12:33:53,459300,-7.32587e+06,2728.28,0.0641294,365.192,10.0948,357.662,999.292,0.318,0.0116835,22.275,0.00160061,343.258,10.4133,2.13519,20.4085,14.4047,7.5295,21.9343, +Perimeter Node(18),10.11.2006 23:03:22,459299,-7.32587e+06,2728.07,0.0656959,364.993,10.0914,356.869,999.282,0.318,0.0133741,23.9475,0.00121951,341.874,10.4416,1.85119,21.2128,14.9951,8.12408,23.1192, +Perimeter Node(18),01.12.2006,459300,-7.32587e+06,2728.06,0.0667347,364.053,10.0899,356.328,999.502,0.318,0.0126359,25.1016,0.00130566,340.108,10.5917,2.59104,21.3686,16.2205,7.7245,23.945, +Perimeter Node(18),01.12.2006,459300,-7.32587e+06,2728.06,0.0667347,364.053,10.0899,356.328,999.502,0.318,0.0126359,25.1016,0.00130566,340.108,10.5917,2.59104,21.3686,16.2205,7.7245,23.945, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Left Node(19),09.12.1997 22:12:00,459341,-7.32596e+06,2736.19,0.0286339,385.64,10.1155,383.187,1000.24,0.318,0.37812,2.39161,0.178977,321.012,28.4489,0.0319595,26.1473,62.1744,2.45377,64.6281, +Left Node(19),05.02.1998 14:35:11,459333,-7.32594e+06,2735.45,0.11545,386.283,10.0768,376.102,1000.09,0.318,0.418804,129.964,0.497661,334.041,16.6816,0.0577927,21.3689,42.061,10.181,52.242, +Left Node(19),12.04.1998 23:29:05,459330,-7.32594e+06,2736.82,0.127173,386.602,10.0788,377.966,1000.15,0.318,0.521033,173.713,1.04177,343.274,14.1513,0.137387,4.22646,34.6925,8.63623,43.3288, +Left Node(19),16.08.1998 08:06:27,459325,-7.32593e+06,2737.22,3.048e-07,356.957,10.0662,374.348,999.891,0.318,2.90638,2.39161,1.74645,344.388,13.3449,0.0710047,16.5807,29.9602,-17.3911,12.5691, +Left Node(19),18.10.1998 00:25:09,459323,-7.32592e+06,2736.93,0.0827961,358.316,10.1549,353.451,999.005,0.318,0.253857,47.9376,0.329141,324.909,10.9036,0.175799,1.34297,28.5422,4.86534,33.4075, +Left Node(19),19.12.1998 16:43:50,459318,-7.32591e+06,2737.15,3.048e-07,348.21,10.1058,359.564,999.394,0.318,1.72815,2.39161,1.24092,336.426,11.0957,0.0361412,12.3155,23.1382,-11.3537,11.7845, +Left Node(19),20.02.1999 09:02:31,459316,-7.32591e+06,2736.06,0.031855,353.849,10.131,352.377,998.76,0.318,0.505104,2.73009,0.262116,329.633,10.4241,0.179437,2.38591,22.7435,1.47204,24.2155, +Left Node(19),25.06.1999 17:39:53,459312,-7.3259e+06,2736.68,3.048e-07,354.369,10.1076,355.877,999.279,0.318,0.14283,2.39161,0.188648,336.772,10.5493,0.043011,11.097,19.1052,-1.50789,17.5973, +Left Node(19),27.08.1999 09:58:34,459308,-7.32589e+06,2733.14,0.0520543,344.448,10.1429,344.056,998.328,0.318,0.888815,11.9128,1.06493,327.471,10.3072,0.264958,3.42531,16.5853,0.392566,16.9778, +Left Node(19),30.12.1999 18:35:56,459302,-7.32588e+06,2734.63,0.00818562,343.529,10.1232,345.64,998.79,0.318,3.10808,2.39161,0.375131,332.103,10.5508,0.0102378,3.43145,13.5377,-2.1112,11.4265, +Left Node(19),06.09.2000 11:50:41,459299,-7.32587e+06,2733.17,0.167474,351.861,10.1539,343.023,998.315,0.318,0.331679,396.726,0.793732,333.344,10.229,0.0478513,0.190399,9.67826,8.83837,18.5166, +Left Node(19),09.01.2001 20:28:03,459295,-7.32586e+06,2734.96,0.212048,356.786,10.1289,349.692,999.053,0.318,0.111313,805.282,0.105664,340.238,10.2404,0.0974431,9.60625,9.45419,7.09379,16.548, +Left Node(19),13.03.2001 12:46:44,459296,-7.32586e+06,2736.64,0.152543,356.463,10.1332,350.059,998.885,0.318,0.274899,299.796,0.233857,340.961,10.0972,0.610974,7.77222,9.0977,6.40401,15.5017, +Left Node(19),15.05.2001 05:05:26,459292,-7.32585e+06,2737.39,0.0940233,356.933,10.1224,352.19,999.031,0.318,0.617817,70.2025,0.598444,339.731,10.0916,0.0145091,0.204048,12.4583,4.74385,17.2022, +Left Node(19),17.09.2001 13:42:48,459292,-7.32585e+06,2738.13,0.103291,359.586,10.1205,353.261,999.025,0.318,0.235349,93.0751,0.0715592,341.444,10.0992,0.0907214,10.4222,11.8168,6.32512,18.142, +Left Node(19),20.01.2002 22:20:10,459291,-7.32585e+06,2738.65,0.149089,361.441,10.1087,354.386,999.114,0.318,0.179684,279.887,0.0568266,342.712,10.1272,0.176289,13.4554,11.6735,7.0552,18.7287, +Left Node(19),26.05.2002 06:57:32,459291,-7.32585e+06,2739.24,0.18316,362.994,10.104,355.249,999.185,0.318,0.182327,518.966,0.0682424,344.708,10.1066,0.396359,13.7041,10.5415,7.74498,18.2865, +Left Node(19),28.09.2002 15:34:55,459292,-7.32585e+06,2739.85,0.219331,364.04,10.1074,354.885,999.238,0.318,0.144732,891.146,0.0902902,344.744,10.08,0.545523,13.9548,10.1416,9.15506,19.2966, +Left Node(19),30.11.2002 07:53:36,459292,-7.32585e+06,2740.37,0.26361,364.623,10.1048,354.681,999.266,0.318,0.0845647,1547.15,0.0836334,344.953,10.0665,0.621887,14.0173,9.72766,9.94215,19.6698, +Left Node(19),01.02.2003 00:12:17,459293,-7.32585e+06,2740.85,0.230077,363.946,10.1056,354.795,999.332,0.318,0.0727539,1028.64,0.0617809,345.161,10.0598,0.74307,13.1583,9.63351,9.15092,18.7844, +Left Node(19),04.04.2003 16:30:58,459293,-7.32585e+06,2741.14,0.271578,365.742,10.1049,354.777,999.399,0.318,0.0417771,1691.72,0.0641184,345.412,10.0544,0.824647,12.7982,9.36467,10.9649,20.3296, +Left Node(19),06.06.2003 08:49:39,459293,-7.32585e+06,2741.35,0.298846,365.788,10.1026,354.399,999.327,0.318,0.035999,2254.18,0.0590471,345.082,10.0509,0.793075,13.2829,9.31764,11.3891,20.7067, +Left Node(19),09.10.2003 17:27:02,459293,-7.32585e+06,2741.53,0.290479,365.557,10.1027,354.212,999.405,0.318,0.0367796,2070.09,0.0609889,345.138,10.0477,0.867015,13.1017,9.07446,11.3454,20.4198, +Left Node(19),16.06.2004 10:41:46,459293,-7.32585e+06,2741.66,0.335736,366.347,10.1009,353.506,999.344,0.318,0.0293633,3196.24,0.0469302,344.821,10.045,0.922288,13.212,8.68492,12.8409,21.5259, +Left Node(19),19.10.2004 19:19:08,459293,-7.32585e+06,2741.79,0.377604,366.445,10.098,351.987,999.35,0.318,0.0265805,4547.33,0.0374066,343.82,10.0431,1.02839,13.9531,8.16701,14.4589,22.6259, +Left Node(19),27.06.2005 12:33:53,459293,-7.32585e+06,2741.89,0.397358,366.524,10.0948,351.361,999.354,0.318,0.0242595,5298.99,0.0337572,343.24,10.0422,1.09363,15.0319,8.12023,15.163,23.2832, +Left Node(19),10.11.2006 23:03:22,459293,-7.32585e+06,2741.94,0.467747,366.351,10.0914,350.131,999.345,0.318,0.0222261,8643.28,0.0306821,342.083,10.0414,1.15262,15.7468,8.04779,16.2201,24.2679, +Left Node(19),01.12.2006,459293,-7.32585e+06,2742.06,0.465844,365.424,10.0899,348.322,999.56,0.318,0.0228094,8538.21,0.0262227,340.271,10.0405,1.39041,16.4928,8.05064,17.1025,25.1532, +Left Node(19),01.12.2006,459293,-7.32585e+06,2742.06,0.465844,365.424,10.0899,348.322,999.56,0.318,0.0228094,8538.21,0.0262227,340.271,10.0405,1.39041,16.4928,8.05064,17.1025,25.1532, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Perimeter Node(20),09.12.1997 22:12:00,459343,-7.32596e+06,2738.34,0.0222634,386.174,10.1155,389.3,1000.27,0.318,0.360941,2.39161,0.125041,322.185,31.3492,0.0341048,27.9026,67.1154,-3.12585,63.9896, +Perimeter Node(20),05.02.1998 14:35:11,459336,-7.32595e+06,2739.27,0.0359299,386.703,10.0768,387.429,1000.09,0.318,0.464182,3.91755,0.0856201,335.21,21.5726,0.0508595,18.8054,52.2191,-0.726176,51.4929, +Perimeter Node(20),12.04.1998 23:29:05,459334,-7.32594e+06,2742.62,0.00658002,387.27,10.0788,390.166,1000.2,0.318,0.525471,2.39161,0.0908863,344.718,17.1437,0.143513,12.033,45.4482,-2.89629,42.5519, +Perimeter Node(20),16.08.1998 08:06:27,459330,-7.32593e+06,2744.96,3.048e-07,365.635,10.0662,389.476,999.891,0.318,0.17116,2.39161,1.11082,346.789,16.2022,0.0775001,25.2053,42.6868,-23.8405,18.8462, +Perimeter Node(20),18.10.1998 00:25:09,459328,-7.32593e+06,2742.14,0.0333364,359.029,10.1549,360.303,999.033,0.318,0.109272,3.12898,0.0882481,327.729,10.7659,0.513913,6.01474,32.5741,-1.274,31.3001, +Perimeter Node(20),19.12.1998 16:43:50,459324,-7.32592e+06,2745.1,3.048e-07,355.76,10.1058,371.781,999.394,0.318,0.165847,2.39161,0.799722,339.091,13.0265,0.0767128,15.7714,32.6905,-16.021,16.6694, +Perimeter Node(20),20.02.1999 09:02:31,459322,-7.32592e+06,2742.51,0.00378047,355.743,10.131,359.034,998.849,0.318,0.233523,2.39161,0.23072,334.503,10.1856,0.518536,6.92985,24.5305,-3.29103,21.2395, +Perimeter Node(20),25.06.1999 17:39:53,459317,-7.32591e+06,2743.8,3.048e-07,355.982,10.1076,365.926,999.279,0.318,0.10774,2.39161,0.156051,339.377,11.8001,0.157179,10.4299,26.5491,-9.944,16.6051, +Perimeter Node(20),27.08.1999 09:58:34,459317,-7.3259e+06,2743.24,3.048e-07,347.394,10.1429,355.25,998.464,0.318,0.127607,2.39161,0.25432,331.991,10.5169,0.708445,8.66341,23.2586,-7.85629,15.4023, +Perimeter Node(20),30.12.1999 18:35:56,459311,-7.32589e+06,2743.3,3.048e-07,344.287,10.1232,358.692,998.805,0.318,0.109749,2.39161,0.317223,335.704,11.343,0.264298,5.4296,22.9883,-14.4054,8.58291, +Perimeter Node(20),06.09.2000 11:50:41,459304,-7.32588e+06,2741.45,0.0418531,352.781,10.1539,353.548,998.321,0.318,0.21073,6.19198,0.0528199,336.743,10.8937,0.423822,2.74995,16.8052,-0.767909,16.0372, +Perimeter Node(20),09.01.2001 20:28:03,459303,-7.32587e+06,2744.75,0.0315709,357.739,10.1289,359.101,999.098,0.318,0.156226,2.65771,0.0125079,343.608,10.9411,0.405329,8.23688,15.4931,-1.36152,14.1316, +Perimeter Node(20),13.03.2001 12:46:44,459306,-7.32588e+06,2745.82,0.0337735,357.452,10.1332,357.206,998.931,0.318,0.00534356,3.25368,0.00718249,343.147,10.312,0.981706,6.08354,14.0589,0.245982,14.3049, +Perimeter Node(20),15.05.2001 05:05:26,459303,-7.32587e+06,2746.52,0.0263145,358.529,10.1224,359.091,999.076,0.318,0.0227012,2.39161,0.0372359,344.067,10.3589,0.538582,6.00686,15.0244,-0.562309,14.4621, +Perimeter Node(20),17.09.2001 13:42:48,459302,-7.32587e+06,2746.4,0.0668216,360.456,10.1205,358.941,999.066,0.318,0.00828559,25.1998,0.0219318,346.008,10.2345,0.655177,5.10137,12.9327,1.51549,14.4482, +Perimeter Node(20),20.01.2002 22:20:10,459301,-7.32587e+06,2747.34,0.107418,362.314,10.1087,358.568,999.155,0.318,0.0111944,104.685,0.0212788,346.836,10.1751,0.482059,4.94422,11.7319,3.74543,15.4774, +Perimeter Node(20),26.05.2002 06:57:32,459301,-7.32587e+06,2748.78,0.14109,363.946,10.104,358.712,999.23,0.318,0.048985,237.211,0.0340497,348.893,10.1163,0.225071,5.75869,9.81976,5.23377,15.0535, +Perimeter Node(20),28.09.2002 15:34:55,459302,-7.32587e+06,2749.8,0.15422,365.031,10.1074,359.322,999.284,0.318,0.199664,309.788,0.0373952,350.578,10.0901,0.232946,8.08636,8.74359,5.70917,14.4528, +Perimeter Node(20),30.11.2002 07:53:36,459302,-7.32587e+06,2750.72,0.181886,365.646,10.1048,358.616,999.314,0.318,0.20025,508.207,0.0388387,350.23,10.1086,0.312834,9.15748,8.3859,7.02944,15.4153, +Perimeter Node(20),01.02.2003 00:12:17,459303,-7.32587e+06,2751.35,0.152276,364.983,10.1056,359.132,999.384,0.318,0.241091,298.224,0.0250504,351.796,10.083,0.52237,8.56768,7.33613,5.8503,13.1864, +Perimeter Node(20),04.04.2003 16:30:58,459303,-7.32587e+06,2751.46,0.200928,366.76,10.1049,358.693,999.45,0.318,0.184639,685.122,0.0334769,351.7,10.064,0.636897,9.35928,6.99306,8.06668,15.0597, +Perimeter Node(20),06.06.2003 08:49:39,459303,-7.32587e+06,2751.83,0.226966,366.82,10.1026,357.584,999.375,0.318,0.182042,987.475,0.0322225,350.604,10.0573,0.630742,9.95418,6.98005,9.23544,16.2155, +Perimeter Node(20),09.10.2003 17:27:02,459304,-7.32587e+06,2752.11,0.219513,366.599,10.1027,357.591,999.457,0.318,0.198321,893.359,0.0324998,351.38,10.0492,0.782519,9.38038,6.21045,9.00798,15.2184, +Perimeter Node(20),16.06.2004 10:41:46,459303,-7.32587e+06,2752.28,0.263787,367.39,10.1009,356.378,999.393,0.318,0.164178,1550.27,0.0272179,350.602,10.0442,0.930215,10.1835,5.77627,11.0125,16.7888, +Perimeter Node(20),19.10.2004 19:19:08,459304,-7.32587e+06,2752.52,0.305104,367.499,10.098,354.603,999.399,0.318,0.132243,2398.77,0.0225184,349.528,10.0416,1.28727,10.9693,5.07506,12.8955,17.9706, +Perimeter Node(20),27.06.2005 12:33:53,459304,-7.32587e+06,2752.69,0.327312,367.584,10.0948,353.631,999.403,0.318,0.122559,2961.62,0.0210646,348.659,10.0406,1.43936,12.3071,4.97164,13.9531,18.9247, +Perimeter Node(20),10.11.2006 23:03:22,459303,-7.32587e+06,2753.19,0.375638,367.454,10.0914,351.674,999.397,0.318,0.117326,4476.66,0.0188864,346.825,10.04,1.5349,12.1751,4.84831,15.7802,20.6285, +Perimeter Node(20),01.12.2006,459304,-7.32587e+06,2753.6,0.392588,366.557,10.0899,349.903,999.611,0.318,0.0865112,5110.44,0.0166044,345.455,10.0393,2.22963,12.7172,4.44842,16.6536,21.102, +Perimeter Node(20),01.12.2006,459304,-7.32587e+06,2753.6,0.392588,366.557,10.0899,349.903,999.611,0.318,0.0865112,5110.44,0.0166044,345.455,10.0393,2.22963,12.7172,4.44842,16.6536,21.102, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Perimeter Node(21),09.12.1997 22:12:00,459345,-7.32597e+06,2739.97,0.0186127,386.46,10.1155,391.545,1000.28,0.318,0.352914,2.39161,0.0662242,323.465,31.1156,0.0351789,28.7812,68.08,-5.08508,62.9949, +Perimeter Node(21),05.02.1998 14:35:11,459339,-7.32596e+06,2741.56,0.0176231,386.862,10.0768,390.081,1000.09,0.318,0.568509,2.39161,0.0967746,337.397,19.8942,0.114378,19.1389,52.6835,-3.21898,49.4645, +Perimeter Node(21),12.04.1998 23:29:05,459338,-7.32595e+06,2744.77,0.000118748,387.419,10.0788,391.169,1000.23,0.318,0.144942,2.39161,0.140538,346.701,14.1777,0.0657704,22.7005,44.4681,-3.75016,40.718, +Perimeter Node(21),16.08.1998 08:06:27,459335,-7.32594e+06,2746.86,3.048e-07,369.677,10.0662,393.267,999.891,0.318,0.0686158,2.39161,0.398309,350.315,15.6622,0.259672,26.4797,42.9524,-23.5905,19.362, +Perimeter Node(21),18.10.1998 00:25:09,459333,-7.32594e+06,2745.96,3.048e-07,359.196,10.1549,366.202,999.046,0.318,0.118704,2.39161,0.151137,330.052,11.4918,0.707338,8.57909,36.1501,-7.00663,29.1434, +Perimeter Node(21),19.12.1998 16:43:50,459330,-7.32593e+06,2747.48,3.048e-07,359.474,10.1058,374.277,999.394,0.318,0.159275,2.39161,0.310576,342.983,12.135,0.505165,18.6338,31.294,-14.803,16.491, +Perimeter Node(21),20.02.1999 09:02:31,459328,-7.32593e+06,2746.81,3.048e-07,356.213,10.131,364.826,998.87,0.318,0.287721,2.39161,0.259689,335.018,11.1552,0.682845,7.47861,29.8086,-8.61341,21.1952, +Perimeter Node(21),25.06.1999 17:39:53,459325,-7.32592e+06,2747.87,3.048e-07,357.207,10.1076,369.967,999.279,0.318,0.163236,2.39161,0.0957039,343.989,11.0774,0.580681,13.1349,25.9781,-12.7601,13.218, +Perimeter Node(21),27.08.1999 09:58:34,459324,-7.32592e+06,2747.33,3.048e-07,348.671,10.1429,358.318,998.525,0.318,0.225487,2.39161,0.188023,333.476,10.492,0.890446,6.05882,24.842,-9.64665,15.1953, +Perimeter Node(21),30.12.1999 18:35:56,459320,-7.32591e+06,2746.77,3.048e-07,346.611,10.1232,361.462,998.805,0.318,0.255386,2.39161,0.122927,339.961,10.5709,0.781966,9.69187,21.5009,-14.851,6.64988, +Perimeter Node(21),06.09.2000 11:50:41,459315,-7.3259e+06,2745.01,3.048e-07,353.299,10.1539,357.37,998.521,0.318,0.228175,2.39161,0.0263432,339.232,10.3565,0.878591,4.35121,18.1384,-4.07187,14.0665, +Perimeter Node(21),09.01.2001 20:28:03,459314,-7.3259e+06,2748.61,3.048e-07,358.041,10.1289,361.163,999.116,0.318,0.0375333,2.39161,0.0327879,347.996,10.2853,0.741587,4.75594,13.1667,-3.1216,10.0451, +Perimeter Node(21),13.03.2001 12:46:44,459316,-7.3259e+06,2749.32,0.0472449,357.825,10.1332,358.214,998.949,0.318,0.0124949,8.90657,0.0189195,344.653,10.1946,0.708658,4.39314,13.5611,-0.388932,13.1722, +Perimeter Node(21),15.05.2001 05:05:26,459313,-7.32589e+06,2751.02,0.0223625,359.101,10.1224,360.324,999.098,0.318,0.0627802,2.39161,0.0461952,347.071,10.2186,0.130993,2.98381,13.2533,-1.2234,12.0299, +Perimeter Node(21),17.09.2001 13:42:48,459313,-7.32589e+06,2751.02,0.0614188,360.912,10.1205,360.884,999.087,0.318,0.193069,19.5681,0.0447331,350.077,10.1366,0.222105,4.2907,10.807,0.0283346,10.8353, +Perimeter Node(21),20.01.2002 22:20:10,459312,-7.32589e+06,2752.31,0.0960453,362.805,10.1087,360.401,999.178,0.318,0.134721,74.8299,0.0324236,349.589,10.3401,0.179562,6.14179,10.8114,2.40403,13.2155, +Perimeter Node(21),26.05.2002 06:57:32,459312,-7.32589e+06,2753.8,0.0993383,364.441,10.104,361.75,999.253,0.318,0.209898,82.7936,0.029114,352.233,10.3613,0.390124,5.99647,9.5168,2.69098,12.2078, +Perimeter Node(21),28.09.2002 15:34:55,459313,-7.32589e+06,2754.73,0.125685,365.519,10.1074,361.485,999.307,0.318,0.253757,167.687,0.0215411,353.394,10.21,0.633003,5.3412,8.0903,4.03489,12.1252, +Perimeter Node(21),30.11.2002 07:53:36,459313,-7.32589e+06,2755.88,0.160394,366.157,10.1048,360.056,999.338,0.318,0.248125,348.508,0.0295183,352.484,10.1304,0.711686,5.36541,7.57208,6.10068,13.6728, +Perimeter Node(21),01.02.2003 00:12:17,459314,-7.32589e+06,2756.38,0.14007,365.479,10.1056,360.109,999.407,0.318,0.224379,232.102,0.0238384,353.001,10.0784,0.795874,6.32517,7.10869,5.37023,12.4789, +Perimeter Node(21),04.04.2003 16:30:58,459314,-7.32589e+06,2756.47,0.192283,367.255,10.1049,359.848,999.472,0.318,0.199717,600.437,0.0276263,353.257,10.0571,0.887171,7.14748,6.5915,7.40681,13.9983, +Perimeter Node(21),06.06.2003 08:49:39,459314,-7.32589e+06,2757.01,0.221885,367.332,10.1026,358.624,999.399,0.318,0.0818881,922.629,0.023053,352.068,10.0501,0.846808,7.45767,6.5559,8.70771,15.2636, +Perimeter Node(21),09.10.2003 17:27:02,459314,-7.32589e+06,2757.23,0.221556,367.106,10.1027,358.466,999.48,0.318,0.0797855,918.542,0.0252784,352.36,10.0446,0.925325,8.22135,6.10679,8.63975,14.7465, +Perimeter Node(21),16.06.2004 10:41:46,459314,-7.32589e+06,2757.47,0.271598,367.902,10.1009,357.262,999.417,0.318,0.0682939,1692.1,0.0199906,351.678,10.0423,1.02582,9.41735,5.58443,10.6403,16.2247, +Perimeter Node(21),19.10.2004 19:19:08,459314,-7.32589e+06,2757.74,0.320058,368.012,10.098,355.544,999.423,0.318,0.0604517,2769.06,0.0163786,350.404,10.0411,1.28371,11.3239,5.14075,12.468,17.6087, +Perimeter Node(21),27.06.2005 12:33:53,459314,-7.32589e+06,2757.93,0.348045,368.099,10.0948,354.538,999.427,0.318,0.0615047,3560.85,0.0157782,349.427,10.0404,1.38066,13.5036,5.11047,13.5618,18.6723, +Perimeter Node(21),10.11.2006 23:03:22,459314,-7.32589e+06,2758.69,0.410967,367.995,10.0914,352.531,999.422,0.318,0.0237498,5862.29,0.0141908,347.419,10.04,1.32336,15.0143,5.11218,15.4634,20.5756, +Perimeter Node(21),01.12.2006,459314,-7.32589e+06,2759.03,0.431575,367.089,10.0899,351.159,999.611,0.318,0.0714104,6789.12,0.0141433,346.319,10.0393,2.05981,16.85,4.84035,15.9305,20.7708, +Perimeter Node(21),01.12.2006,459314,-7.32589e+06,2759.03,0.431575,367.089,10.0899,351.159,999.611,0.318,0.0714104,6789.12,0.0141433,346.319,10.0393,2.05981,16.85,4.84035,15.9305,20.7708, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Perimeter Node(22),09.12.1997 22:12:00,459348,-7.32597e+06,2741.2,0.0283015,386.631,10.1155,392.166,1000.29,0.318,0.424077,2.39161,0.0405853,325.909,29.6523,0.158716,29.9037,66.2569,-5.53541,60.7215, +Perimeter Node(22),05.02.1998 14:35:11,459343,-7.32596e+06,2743.39,0.00749677,387.138,10.0768,391.191,1000.09,0.318,0.0356386,2.39161,0.0678339,339.862,17.4625,0.174175,23.9688,51.329,-4.0528,47.2762, +Perimeter Node(22),12.04.1998 23:29:05,459342,-7.32596e+06,2745.96,3.048e-07,387.686,10.0788,394.42,1000.25,0.318,0.122295,2.39161,0.111396,347.538,14.6681,0.0953118,25.1269,46.882,-6.73459,40.1475, +Perimeter Node(22),16.08.1998 08:06:27,459340,-7.32595e+06,2749.19,3.048e-07,370.472,10.0662,398.075,999.891,0.318,0.128583,2.39161,0.0765688,353.067,15.416,0.34452,21.6483,45.0076,-27.6023,17.4053, +Perimeter Node(22),18.10.1998 00:25:09,459338,-7.32595e+06,2748.51,3.048e-07,359.276,10.1549,370.002,999.042,0.318,0.236049,2.39161,0.159054,331.392,11.657,0.832605,7.97023,38.6094,-10.7261,27.8832, +Perimeter Node(22),19.12.1998 16:43:50,459336,-7.32595e+06,2748.7,3.048e-07,360.262,10.1058,375.262,999.394,0.318,0.213302,2.39161,0.0779102,346.427,11.0668,0.906911,17.9857,28.8356,-15.0006,13.8351, +Perimeter Node(22),20.02.1999 09:02:31,459335,-7.32594e+06,2748.46,3.048e-07,356.873,10.131,364.667,998.902,0.318,0.202844,2.39161,0.185229,335.132,10.6843,1.00908,8.77086,29.5351,-7.79426,21.7408, +Perimeter Node(22),25.06.1999 17:39:53,459332,-7.32594e+06,2750.07,3.048e-07,357.797,10.1076,371.161,999.279,0.318,0.0868174,2.39161,0.0375467,346.559,10.6113,0.758345,9.45908,24.6022,-13.3642,11.238, +Perimeter Node(22),27.08.1999 09:58:34,459332,-7.32594e+06,2749.88,3.048e-07,349.929,10.1429,358.25,998.584,0.318,0.00596394,2.39161,0.0706508,333.522,10.3997,0.945252,5.50631,24.728,-8.32088,16.4071, +Perimeter Node(22),30.12.1999 18:35:56,459330,-7.32593e+06,2749.24,3.048e-07,347.217,10.1232,360.819,998.805,0.318,0.0053167,2.39161,0.0175307,342.496,10.2917,1.08406,8.49086,18.323,-13.6027,4.72022, +Perimeter Node(22),06.09.2000 11:50:41,459325,-7.32592e+06,2748.58,0.0152967,353.775,10.1539,357.186,998.572,0.318,0.00735556,2.39161,0.00452639,339.065,10.2737,1.05614,4.10791,18.1217,-3.41144,14.7103, +Perimeter Node(22),09.01.2001 20:28:03,459324,-7.32592e+06,2753.37,3.048e-07,358.416,10.1289,361.765,999.138,0.318,0.14504,2.39161,0.0543368,349.131,10.3227,0.0110023,1.48762,12.6344,-3.34912,9.28528, +Perimeter Node(22),13.03.2001 12:46:44,459326,-7.32592e+06,2754.14,0.0336618,358.248,10.1332,360.395,998.968,0.318,0.269222,3.22151,0.0932131,348.736,10.3271,0.230793,5.10271,11.6586,-2.14674,9.51184, +Perimeter Node(22),15.05.2001 05:05:26,459324,-7.32592e+06,2755.3,3.048e-07,359.203,10.1224,361.958,999.116,0.318,0.303196,2.39161,0.103528,349.204,10.6641,0.214022,5.5723,12.7533,-2.75487,9.99845, +Perimeter Node(22),17.09.2001 13:42:48,459324,-7.32592e+06,2755.32,0.0240318,361.265,10.1205,362.828,999.103,0.318,0.404641,2.39161,0.0718579,351.971,10.4958,0.355094,3.86953,10.8566,-1.5629,9.2937, +Perimeter Node(22),20.01.2002 22:20:10,459323,-7.32591e+06,2756.51,0.065868,363.197,10.1087,361.916,999.196,0.318,0.306494,24.1362,0.116955,351.576,10.4872,0.506643,4.93456,10.34,1.28081,11.6208, +Perimeter Node(22),26.05.2002 06:57:32,459323,-7.32591e+06,2758.25,0.0868265,364.865,10.104,361.782,999.273,0.318,0.224372,55.2844,0.0745945,351.49,10.4398,0.527147,3.30987,10.2915,3.08275,13.3742, +Perimeter Node(22),28.09.2002 15:34:55,459324,-7.32591e+06,2759.24,0.120694,365.965,10.1074,361.669,999.328,0.318,0.0740467,148.491,0.0317319,352.393,10.1867,0.58908,5.94607,9.27574,4.29659,13.5723, +Perimeter Node(22),30.11.2002 07:53:36,459324,-7.32591e+06,2760.76,0.167469,366.638,10.1048,359.8,999.36,0.318,0.0845011,396.687,0.0434249,351.042,10.0919,0.4902,8.52449,8.75753,6.83832,15.5958, +Perimeter Node(22),01.02.2003 00:12:17,459324,-7.32592e+06,2761.14,0.134561,365.946,10.1056,360.814,999.428,0.318,0.151266,205.782,0.0508213,353.234,10.0535,0.604988,9.11675,7.58032,5.13199,12.7123, +Perimeter Node(22),04.04.2003 16:30:58,459325,-7.32592e+06,2761.2,0.198507,367.721,10.1049,360.417,999.493,0.318,0.11479,660.653,0.0501889,353.414,10.0451,0.730801,10.7375,7.00339,7.30331,14.3067, +Perimeter Node(22),06.06.2003 08:49:39,459324,-7.32592e+06,2761.98,0.234969,367.82,10.1026,358.985,999.422,0.318,0.102468,1095.67,0.0431603,352.012,10.0432,0.664512,12.4116,6.97376,8.83484,15.8086, +Perimeter Node(22),09.10.2003 17:27:02,459325,-7.32592e+06,2762.14,0.224681,367.588,10.1027,359.413,999.502,0.318,0.144019,957.96,0.0481333,353.398,10.0419,0.847752,11.5614,6.01466,8.17499,14.1896, +Perimeter Node(22),16.06.2004 10:41:46,459325,-7.32592e+06,2762.48,0.283095,368.394,10.1009,358.119,999.44,0.318,0.102676,1916.21,0.0311714,352.586,10.0414,1.08752,13.121,5.53348,10.2745,15.808, +Perimeter Node(22),19.10.2004 19:19:08,459325,-7.32592e+06,2762.79,0.33106,368.508,10.098,356.68,999.447,0.318,0.0803303,3064.55,0.0249683,351.583,10.041,1.70698,14.1265,5.09689,11.8276,16.9245, +Perimeter Node(22),27.06.2005 12:33:53,459325,-7.32592e+06,2763.02,0.36114,368.599,10.0948,355.733,999.451,0.318,0.0803144,3978.08,0.0232918,350.594,10.0403,1.96825,15.9137,5.13957,12.8655,18.005, +Perimeter Node(22),10.11.2006 23:03:22,459324,-7.32591e+06,2764.13,0.42115,368.528,10.0914,354.43,999.447,0.318,0.0827065,6308.94,0.0188989,349.31,10.0399,2.0974,14.4698,5.1206,14.098,19.2186, +Perimeter Node(22),01.12.2006,459325,-7.32592e+06,2764.37,0.425294,367.614,10.0899,353.732,999.611,0.318,0.0638071,6497.03,0.0307806,348.807,10.0392,3.26845,13.8789,4.92513,13.882,18.8071, +Perimeter Node(22),01.12.2006,459325,-7.32592e+06,2764.37,0.425294,367.614,10.0899,353.732,999.611,0.318,0.0638071,6497.03,0.0307806,348.807,10.0392,3.26845,13.8789,4.92513,13.882,18.8071, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Perimeter Node(23),09.12.1997 22:12:00,459350,-7.32598e+06,2742.5,0.0341774,386.758,10.1155,392.179,1000.3,0.318,0.339827,3.37182,0.0406795,327.416,28.0751,0.207844,31.4912,64.7631,-5.421,59.3421, +Perimeter Node(23),05.02.1998 14:35:11,459347,-7.32597e+06,2745.11,3.048e-07,387.28,10.0768,390.232,1000.09,0.318,0.0781228,2.39161,0.0856161,341.81,13.7167,0.105203,32.5128,48.422,-2.95219,45.4698, +Perimeter Node(23),12.04.1998 23:29:05,459346,-7.32597e+06,2746.58,3.048e-07,387.734,10.0788,395.573,1000.26,0.318,0.202988,2.39161,0.13509,348.161,13.9058,0.129228,26.9048,47.4128,-7.83889,39.5739, +Perimeter Node(23),16.08.1998 08:06:27,459345,-7.32596e+06,2749.32,3.048e-07,370.547,10.0662,398.576,999.891,0.318,0.144619,2.39161,0.0629433,355.288,13.8063,0.486962,21.4577,43.2886,-28.0293,15.2592, +Perimeter Node(23),18.10.1998 00:25:09,459344,-7.32596e+06,2749.29,3.048e-07,359.498,10.1549,370.638,999.05,0.318,0.220327,2.39161,0.162641,331.364,11.3514,0.870975,8.05474,39.2742,-11.14,28.1341, +Perimeter Node(23),19.12.1998 16:43:50,459343,-7.32596e+06,2749.18,3.048e-07,360.389,10.1058,376.344,999.394,0.318,0.169116,2.39161,0.0682545,348.566,10.5861,1.17053,16.8882,27.7781,-15.9549,11.8231, +Perimeter Node(23),20.02.1999 09:02:31,459341,-7.32596e+06,2749.07,3.048e-07,357.052,10.131,364.382,998.91,0.318,0.156831,2.39161,0.158376,334.728,10.4472,1.28344,9.4763,29.654,-7.32956,22.3244, +Perimeter Node(23),25.06.1999 17:39:53,459340,-7.32595e+06,2750.63,3.048e-07,357.917,10.1076,370.842,999.279,0.318,0.0686351,2.39161,0.0461405,347.164,10.3809,1.08871,10.119,23.6779,-12.9255,10.7525, +Perimeter Node(23),27.08.1999 09:58:34,459339,-7.32595e+06,2750.57,3.048e-07,350.161,10.1429,357.111,998.595,0.318,0.00572339,2.39161,0.0578719,333.492,10.3137,1.21788,5.94227,23.6194,-6.94988,16.6695, +Perimeter Node(23),30.12.1999 18:35:56,459339,-7.32595e+06,2750.53,3.048e-07,347.351,10.1232,360.243,998.805,0.318,0.00534277,2.39161,0.0302479,343.109,10.2389,1.31648,8.79715,17.1343,-12.8927,4.2416, +Perimeter Node(23),06.09.2000 11:50:41,459335,-7.32594e+06,2751.6,0.0260656,354.075,10.1539,356.529,998.592,0.318,0.00669381,2.39161,0.00157366,338.878,10.2769,0.939907,3.8348,17.6507,-2.4534,15.1973, +Perimeter Node(23),09.01.2001 20:28:03,459335,-7.32594e+06,2757.94,3.048e-07,358.791,10.1289,362.876,999.159,0.318,0.111781,2.39161,0.079303,347.417,11.5411,0.0333802,3.40485,15.4591,-4.08444,11.3746, +Perimeter Node(23),13.03.2001 12:46:44,459336,-7.32594e+06,2758.22,3.048e-07,358.136,10.1332,363.104,998.963,0.318,0.423251,2.39161,0.245913,350.264,10.8717,0.356271,2.14362,12.8404,-4.96815,7.87226, +Perimeter Node(23),15.05.2001 05:05:26,459334,-7.32594e+06,2758,3.048e-07,359.428,10.1224,363.488,999.116,0.318,0.329048,2.39161,0.134157,352.34,10.6695,0.490602,4.16058,11.1486,-4.06068,7.08787, +Perimeter Node(23),17.09.2001 13:42:48,459334,-7.32594e+06,2758.01,0.0082573,361.16,10.1205,362.748,999.099,0.318,0.292804,2.39161,0.200665,351.82,10.5329,0.59244,3.48349,10.928,-1.58783,9.34013, +Perimeter Node(23),20.01.2002 22:20:10,459334,-7.32594e+06,2759.86,0.0421197,363.364,10.1087,362.196,999.203,0.318,0.294195,6.31106,0.22377,350.938,10.548,0.592133,3.28308,11.2584,1.16768,12.426, +Perimeter Node(23),26.05.2002 06:57:32,459334,-7.32594e+06,2762.3,0.0680897,365.213,10.104,361.504,999.289,0.318,0.129835,26.6619,0.131605,348.833,10.4845,0.335638,1.42407,12.6708,3.70939,16.3802, +Perimeter Node(23),28.09.2002 15:34:55,459335,-7.32594e+06,2763.41,0.095502,366.362,10.1074,362.751,999.346,0.318,0.0910134,73.5671,0.105641,352.461,10.1156,0.445668,8.19376,10.29,3.61041,13.9004, +Perimeter Node(23),30.11.2002 07:53:36,459335,-7.32594e+06,2765.4,0.133601,367.085,10.1048,361.316,999.381,0.318,0.0904049,201.405,0.124223,352.174,10.065,0.539108,10.6357,9.14212,5.76827,14.9104, +Perimeter Node(23),01.02.2003 00:12:17,459335,-7.32594e+06,2765.58,0.0837617,366.363,10.1056,363.33,999.447,0.318,0.201802,49.6343,0.143909,356.223,10.0477,0.809143,7.85331,7.10682,3.03335,10.1402, +Perimeter Node(23),04.04.2003 16:30:58,459335,-7.32594e+06,2765.61,0.139347,368.145,10.1049,362.869,999.512,0.318,0.156244,228.527,0.123285,356.306,10.0441,1.03853,9.09435,6.56277,5.27557,11.8383, +Perimeter Node(23),06.06.2003 08:49:39,459335,-7.32594e+06,2766.7,0.172037,368.278,10.1026,361.772,999.443,0.318,0.155166,430.039,0.09946,355.387,10.044,1.04447,8.99355,6.38505,6.50558,12.8906, +Perimeter Node(23),09.10.2003 17:27:02,459336,-7.32594e+06,2766.76,0.158249,368.035,10.1027,362.202,999.522,0.318,0.167587,334.708,0.113964,356.574,10.0426,1.231,7.99201,5.62742,5.83275,11.4602, +Perimeter Node(23),16.06.2004 10:41:46,459335,-7.32594e+06,2767.22,0.208068,368.856,10.1009,361.211,999.461,0.318,0.143157,760.785,0.0681143,355.968,10.0418,1.44606,8.1233,5.24317,7.64534,12.8885, +Perimeter Node(23),19.10.2004 19:19:08,459336,-7.32594e+06,2767.58,0.245129,368.976,10.098,360.046,999.468,0.318,0.109562,1244.02,0.0635739,354.866,10.0411,1.90376,8.56331,5.1801,8.93051,14.1106, +Perimeter Node(23),27.06.2005 12:33:53,459336,-7.32594e+06,2767.85,0.267544,369.071,10.0948,359.123,999.473,0.318,0.101551,1617.45,0.0573311,353.686,10.0404,2.05227,9.62288,5.43729,9.94795,15.3852, +Perimeter Node(23),10.11.2006 23:03:22,459335,-7.32594e+06,2769.32,0.293493,369.035,10.0914,357.874,999.471,0.318,0.0331333,2135.21,0.0457134,352.264,10.0399,1.20988,4.93423,5.60984,11.1614,16.7712, +Perimeter Node(23),01.12.2006,459336,-7.32594e+06,2769.36,0.28395,368.101,10.0899,357.353,999.611,0.318,0.166395,1933.61,0.0713882,351.206,10.0392,2.11628,15.5492,6.14747,10.7472,16.8947, +Perimeter Node(23),01.12.2006,459336,-7.32594e+06,2769.36,0.28395,368.101,10.0899,357.353,999.611,0.318,0.166395,1933.61,0.0713882,351.206,10.0392,2.11628,15.5492,6.14747,10.7472,16.8947, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Perimeter Node(24),09.12.1997 22:12:00,459352,-7.32598e+06,2744.64,0.0102125,386.999,10.1155,393.237,1000.31,0.318,0.0711367,2.39161,0.114786,327.525,27.3904,0.132515,31.8304,65.7115,-6.2385,59.473, +Perimeter Node(24),05.02.1998 14:35:11,459350,-7.32598e+06,2745.6,3.048e-07,387.324,10.0768,390.462,1000.09,0.318,0.0920537,2.39161,0.5614,342.917,12.5674,0.129855,36.895,47.5452,-3.13821,44.407, +Perimeter Node(24),12.04.1998 23:29:05,459350,-7.32598e+06,2746.37,3.048e-07,387.767,10.0788,394.104,1000.26,0.318,0.137793,2.39161,0.515951,348.314,12.0104,0.208803,30.9499,45.7902,-6.33719,39.453, +Perimeter Node(24),16.08.1998 08:06:27,459349,-7.32597e+06,2748.8,3.048e-07,370.521,10.0662,397.699,999.891,0.318,0.117453,2.39161,0.455121,356.534,12.1922,0.608487,24.193,41.1649,-27.1787,13.9862, +Perimeter Node(24),18.10.1998 00:25:09,459349,-7.32597e+06,2748.86,3.048e-07,359.514,10.1549,369.357,999.051,0.318,0.198118,2.39161,0.476449,330.989,10.9095,0.972673,9.66451,38.3681,-9.84247,28.5256, +Perimeter Node(24),19.12.1998 16:43:50,459349,-7.32597e+06,2748.89,3.048e-07,360.365,10.1058,376.176,999.394,0.318,0.152835,2.39161,0.411972,348.81,10.433,1.26774,18.7452,27.3669,-15.811,11.5559, +Perimeter Node(24),20.02.1999 09:02:31,459348,-7.32597e+06,2748.93,3.048e-07,357.046,10.131,363.633,998.91,0.318,0.137248,2.39161,0.439873,334.394,10.3498,1.40923,10.6829,29.2386,-6.58684,22.6517, +Perimeter Node(24),25.06.1999 17:39:53,459347,-7.32597e+06,2750.76,3.048e-07,357.894,10.1076,370.82,999.279,0.318,0.0630991,2.39161,0.34536,347.106,10.3363,1.18701,11.1086,23.7138,-12.9255,10.7883, +Perimeter Node(24),27.08.1999 09:58:34,459347,-7.32597e+06,2750.75,3.048e-07,350.156,10.1429,356.294,998.595,0.318,0.0070705,2.39161,0.359438,333.537,10.2835,1.32638,5.92927,22.7572,-6.13781,16.6194, +Perimeter Node(24),30.12.1999 18:35:56,459347,-7.32597e+06,2751.84,3.048e-07,347.44,10.1232,361.029,998.805,0.318,0.00848693,2.39161,0.32126,343.138,10.2563,1.12486,6.54839,17.8912,-13.5891,4.3021, +Perimeter Node(24),06.09.2000 11:50:41,459345,-7.32596e+06,2753.21,0.0407531,354.232,10.1539,356.509,998.598,0.318,0.00735472,5.71646,0.016371,338.801,10.2814,0.778909,3.12682,17.7081,-2.2773,15.4308, +Perimeter Node(24),09.01.2001 20:28:03,459345,-7.32596e+06,2760.54,3.048e-07,358.957,10.1289,364.214,999.17,0.318,0.147364,2.39161,0.244407,346.565,12.1176,0.0350289,3.29316,17.6491,-5.25744,12.3917, +Perimeter Node(24),13.03.2001 12:46:44,459346,-7.32596e+06,2760.58,3.048e-07,357.825,10.1332,363.475,998.949,0.318,0.562656,2.39161,0.309294,348.8,11.2114,0.267859,1.19116,14.6754,-5.64975,9.02569, +Perimeter Node(24),15.05.2001 05:05:26,459345,-7.32596e+06,2760.41,3.048e-07,359.475,10.1224,364.154,999.099,0.318,0.429392,2.39161,0.236746,351.705,10.8857,0.384106,2.42049,12.4495,-4.679,7.77049, +Perimeter Node(24),17.09.2001 13:42:48,459345,-7.32596e+06,2760.41,3.048e-07,361.037,10.1205,363.438,999.095,0.318,0.365135,2.39161,0.263578,350.679,10.7145,0.470411,2.44337,12.7594,-2.40118,10.3582, +Perimeter Node(24),20.01.2002 22:20:10,459345,-7.32596e+06,2761.93,3.048e-07,363.069,10.1087,363.04,999.189,0.318,0.239232,2.39161,0.217471,350.062,10.6527,0.460197,2.20881,12.9781,0.0292121,13.0073, +Perimeter Node(24),26.05.2002 06:57:32,459345,-7.32596e+06,2765.63,0.0493722,365.414,10.104,362.309,999.297,0.318,0.0854395,10.1647,0.385375,346.885,10.4201,0.156511,9.70426,15.424,3.10534,18.5294, +Perimeter Node(24),28.09.2002 15:34:55,459346,-7.32596e+06,2766.3,0.0298721,366.577,10.1074,365.759,999.356,0.318,0.0939079,2.39161,0.171795,355.267,10.0864,0.751686,7.0507,10.4921,0.818178,11.3103, +Perimeter Node(24),30.11.2002 07:53:36,459346,-7.32596e+06,2768.38,0.0739596,367.36,10.1048,364.285,999.394,0.318,0.118834,34.1688,0.401839,354.774,10.0642,0.901344,7.96543,9.51089,3.07466,12.5856, +Perimeter Node(24),01.02.2003 00:12:17,459346,-7.32596e+06,2768.44,0.0165687,366.501,10.1056,365.583,999.457,0.318,0.193617,2.39161,0.174025,357.574,10.0519,1.0573,5.9854,8.00937,0.917713,8.92708, +Perimeter Node(24),04.04.2003 16:30:58,459346,-7.32596e+06,2768.45,0.0863975,368.413,10.1049,365.241,999.523,0.318,0.170423,54.469,0.358973,357.825,10.0469,1.20564,6.4235,7.41556,3.17181,10.5874, +Perimeter Node(24),06.06.2003 08:49:39,459346,-7.32596e+06,2770,0.10889,368.598,10.1026,364.305,999.458,0.318,0.0760219,109.046,0.32089,357.051,10.0461,0.898239,4.96828,7.25374,4.29284,11.5466, +Perimeter Node(24),09.10.2003 17:27:02,459346,-7.32596e+06,2769.95,0.0969269,368.343,10.1027,364.494,999.535,0.318,0.0836816,76.9093,0.357011,357.719,10.0437,1.08439,7.21829,6.77521,3.84903,10.6242, +Perimeter Node(24),16.06.2004 10:41:46,459346,-7.32596e+06,2770.58,0.142011,369.183,10.1009,363.484,999.477,0.318,0.129079,241.887,0.21588,357.061,10.0425,0.591406,6.26075,6.4227,5.69937,12.1221, +Perimeter Node(24),19.10.2004 19:19:08,459347,-7.32596e+06,2770.88,0.167806,369.296,10.098,362.506,999.483,0.318,0.264147,399.087,0.174938,356.012,10.0413,0.687592,11.6842,6.49401,6.79017,13.2842, +Perimeter Node(24),27.06.2005 12:33:53,459347,-7.32596e+06,2770.88,0.187138,369.366,10.0948,361.71,999.486,0.318,0.239231,553.52,0.159127,354.851,10.0404,0.92738,13.9977,6.85965,7.65524,14.5149, +Perimeter Node(24),10.11.2006 23:03:22,459346,-7.32596e+06,2770.86,0.207907,369.185,10.0914,360.809,999.478,0.318,0.165394,759.022,0.137962,353.462,10.04,1.37789,15.1908,7.34676,8.37628,15.723, +Perimeter Node(24),01.12.2006,459347,-7.32596e+06,2770.86,0.19327,368.248,10.0899,360.255,999.611,0.318,0.0987703,609.731,0.235833,351.917,10.0393,2.33425,15.512,8.33746,7.99287,16.3303, +Perimeter Node(24),01.12.2006,459347,-7.32596e+06,2770.86,0.19327,368.248,10.0899,360.255,999.611,0.318,0.0987703,609.731,0.235833,351.917,10.0393,2.33425,15.512,8.33746,7.99287,16.3303, From 26c88ccee5eedfe6f760eedec27381f908ae561a Mon Sep 17 00:00:00 2001 From: Kristian Bendiksen Date: Fri, 17 Jun 2022 22:22:44 +0200 Subject: [PATCH 006/129] Refactor: Introduce MeshFractureTemplate, and convert StimPlanFractureTemplate to it. --- .../RicNewStimPlanFractureTemplateFeature.cpp | 2 +- .../Completions/CMakeLists_files.cmake | 2 + .../Completions/RimMeshFractureTemplate.cpp | 539 ++++++++++++++++++ .../Completions/RimMeshFractureTemplate.h | 108 ++++ .../RimStimPlanFractureTemplate.cpp | 422 +------------- .../Completions/RimStimPlanFractureTemplate.h | 95 ++- 6 files changed, 705 insertions(+), 463 deletions(-) create mode 100644 ApplicationLibCode/ProjectDataModel/Completions/RimMeshFractureTemplate.cpp create mode 100644 ApplicationLibCode/ProjectDataModel/Completions/RimMeshFractureTemplate.h diff --git a/ApplicationLibCode/Commands/FractureCommands/RicNewStimPlanFractureTemplateFeature.cpp b/ApplicationLibCode/Commands/FractureCommands/RicNewStimPlanFractureTemplateFeature.cpp index 5bb0726c7d..a1c93f796f 100644 --- a/ApplicationLibCode/Commands/FractureCommands/RicNewStimPlanFractureTemplateFeature.cpp +++ b/ApplicationLibCode/Commands/FractureCommands/RicNewStimPlanFractureTemplateFeature.cpp @@ -145,7 +145,7 @@ std::vector fractureDef->setFileName( fileName ); fractureDef->loadDataAndUpdate(); - fractureDef->setDefaultsBasedOnXMLfile(); + fractureDef->setDefaultsBasedOnFile(); fractureDef->setDefaultWellDiameterFromUnit(); newFractures.push_back( fractureDef ); } diff --git a/ApplicationLibCode/ProjectDataModel/Completions/CMakeLists_files.cmake b/ApplicationLibCode/ProjectDataModel/Completions/CMakeLists_files.cmake index 954be3b55a..d682b35963 100644 --- a/ApplicationLibCode/ProjectDataModel/Completions/CMakeLists_files.cmake +++ b/ApplicationLibCode/ProjectDataModel/Completions/CMakeLists_files.cmake @@ -21,6 +21,7 @@ set(SOURCE_GROUP_HEADER_FILES ${CMAKE_CURRENT_LIST_DIR}/RimValveTemplate.h ${CMAKE_CURRENT_LIST_DIR}/RimSimWellFracture.h ${CMAKE_CURRENT_LIST_DIR}/RimSimWellFractureCollection.h + ${CMAKE_CURRENT_LIST_DIR}/RimMeshFractureTemplate.h ${CMAKE_CURRENT_LIST_DIR}/RimStimPlanFractureTemplate.h ${CMAKE_CURRENT_LIST_DIR}/RimWellPathFracture.h ${CMAKE_CURRENT_LIST_DIR}/RimWellPathFractureCollection.h @@ -56,6 +57,7 @@ set(SOURCE_GROUP_SOURCE_FILES ${CMAKE_CURRENT_LIST_DIR}/RimValveTemplate.cpp ${CMAKE_CURRENT_LIST_DIR}/RimSimWellFracture.cpp ${CMAKE_CURRENT_LIST_DIR}/RimSimWellFractureCollection.cpp + ${CMAKE_CURRENT_LIST_DIR}/RimMeshFractureTemplate.cpp ${CMAKE_CURRENT_LIST_DIR}/RimStimPlanFractureTemplate.cpp ${CMAKE_CURRENT_LIST_DIR}/RimWellPathFracture.cpp ${CMAKE_CURRENT_LIST_DIR}/RimWellPathFractureCollection.cpp diff --git a/ApplicationLibCode/ProjectDataModel/Completions/RimMeshFractureTemplate.cpp b/ApplicationLibCode/ProjectDataModel/Completions/RimMeshFractureTemplate.cpp new file mode 100644 index 0000000000..fbaefc9a4c --- /dev/null +++ b/ApplicationLibCode/ProjectDataModel/Completions/RimMeshFractureTemplate.cpp @@ -0,0 +1,539 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2022 - Equinor ASA +// +// ResInsight is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU General Public License at +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#include "RimMeshFractureTemplate.h" + +#include "RiaApplication.h" +#include "RiaCompletionTypeCalculationScheduler.h" +#include "RiaEclipseUnitTools.h" +#include "RiaFractureDefines.h" +#include "RiaWeightedGeometricMeanCalculator.h" +#include "RiaWeightedMeanCalculator.h" + +#include "RigFractureCell.h" +#include "RigFractureGrid.h" +#include "RigTransmissibilityEquations.h" +#include "RigWellPathStimplanIntersector.h" + +#include "RimEclipseView.h" +#include "RimFracture.h" +#include "RimFractureContainment.h" +#include "RimProject.h" +#include "RimTools.h" +#include "RimWellPath.h" + +#include "cafPdmFieldScriptingCapability.h" +#include "cafPdmObject.h" +#include "cafPdmObjectScriptingCapability.h" +#include "cafPdmUiFilePathEditor.h" + +#include +#include +#include + +CAF_PDM_ABSTRACT_SOURCE_INIT( RimMeshFractureTemplate, "MeshFractureTemplate", "RimMeshFractureTemplate" ); + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RimMeshFractureTemplate::RimMeshFractureTemplate() +{ + CAF_PDM_InitScriptableObject( "Fracture Template", ":/FractureTemplate16x16.png" ); + + CAF_PDM_InitFieldNoDefault( &m_stimPlanFileName, "StimFileName", "File Name" ); + m_stimPlanFileName.uiCapability()->setUiEditorTypeName( caf::PdmUiFilePathEditor::uiEditorTypeName() ); + + CAF_PDM_InitField( &m_userDefinedWellPathDepthAtFracture, + "UserDefinedWellPathDepthAtFracture", + false, + "User-Defined Well/Fracture Intersection Depth" ); + + CAF_PDM_InitField( &m_borderPolygonResultName, "BorderPolygonResultName", QString( "" ), "Parameter" ); + m_borderPolygonResultName.uiCapability()->setUiHidden( true ); + + CAF_PDM_InitField( &m_activeTimeStepIndex, "ActiveTimeStepIndex", 0, "Active TimeStep Index" ); + CAF_PDM_InitField( &m_conductivityResultNameOnFile, + "ConductivityResultName", + QString( "" ), + "Active Conductivity Result Name" ); + + m_readError = false; + + setDeletable( true ); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RimMeshFractureTemplate::~RimMeshFractureTemplate() +{ +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +int RimMeshFractureTemplate::activeTimeStepIndex() +{ + return m_activeTimeStepIndex; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimMeshFractureTemplate::fieldChangedByUi( const caf::PdmFieldHandle* changedField, + const QVariant& oldValue, + const QVariant& newValue ) +{ + RimFractureTemplate::fieldChangedByUi( changedField, oldValue, newValue ); + + if ( &m_stimPlanFileName == changedField ) + { + m_readError = false; + loadDataAndUpdate(); + setDefaultsBasedOnFile(); + } + + if ( &m_userDefinedWellPathDepthAtFracture == changedField ) + { + if ( !m_userDefinedWellPathDepthAtFracture ) + { + m_readError = false; + loadDataAndUpdate(); + RimProject::current()->scheduleCreateDisplayModelAndRedrawAllViews(); + } + } + + if ( &m_activeTimeStepIndex == changedField ) + { + // Changes to this parameters should change all fractures with this fracture template attached. + RimProject* proj = RimProject::current(); + for ( RimFracture* fracture : fracturesUsingThisTemplate() ) + { + fracture->setStimPlanTimeIndexToPlot( m_activeTimeStepIndex ); + } + proj->scheduleCreateDisplayModelAndRedrawAllViews(); + } + + if ( &m_borderPolygonResultName == changedField || &m_activeTimeStepIndex == changedField || + &m_stimPlanFileName == changedField || &m_conductivityResultNameOnFile == changedField ) + { + // Update fracture grid for all fractures using this template + RimProject* proj = RimProject::current(); + for ( RimFracture* fracture : fracturesUsingThisTemplate() ) + { + fracture->updateFractureGrid(); + } + proj->scheduleCreateDisplayModelAndRedrawAllViews(); + } + + if ( changedField == &m_scaleApplyButton ) + { + m_scaleApplyButton = false; + onLoadDataAndUpdateGeometryHasChanged(); + } +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimMeshFractureTemplate::setFileName( const QString& fileName ) +{ + m_stimPlanFileName = fileName; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QString RimMeshFractureTemplate::fileName() +{ + return m_stimPlanFileName().path(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QList RimMeshFractureTemplate::calculateValueOptions( const caf::PdmFieldHandle* fieldNeedingOptions ) +{ + QList options; + + if ( fieldNeedingOptions == &m_fractureWidthType ) + { + options.push_back( + caf::PdmOptionItemInfo( caf::AppEnum::uiText( USER_DEFINED_WIDTH ), USER_DEFINED_WIDTH ) ); + + if ( !widthResultValues().empty() ) + { + options.push_back( + caf::PdmOptionItemInfo( caf::AppEnum::uiText( WIDTH_FROM_FRACTURE ), WIDTH_FROM_FRACTURE ) ); + } + } + + if ( fieldNeedingOptions == &m_betaFactorType ) + { + options.push_back( caf::PdmOptionItemInfo( caf::AppEnum::uiText( USER_DEFINED_BETA_FACTOR ), + USER_DEFINED_BETA_FACTOR ) ); + + if ( isBetaFactorAvailableOnFile() ) + { + options.push_back( caf::PdmOptionItemInfo( caf::AppEnum::uiText( BETA_FACTOR_FROM_FRACTURE ), + BETA_FACTOR_FROM_FRACTURE ) ); + } + } + + if ( fieldNeedingOptions == &m_borderPolygonResultName ) + { + for ( std::pair nameUnit : uiResultNamesWithUnit() ) + { + options.push_back( caf::PdmOptionItemInfo( nameUnit.first, nameUnit.first ) ); + } + } + else if ( fieldNeedingOptions == &m_activeTimeStepIndex ) + { + std::vector timeValues = timeSteps(); + int index = 0; + for ( double value : timeValues ) + { + options.push_back( caf::PdmOptionItemInfo( QString::number( value ), index ) ); + index++; + } + } + else if ( fieldNeedingOptions == &m_conductivityResultNameOnFile ) + { + QStringList resultNames = conductivityResultNames(); + for ( const auto& resultName : resultNames ) + { + options.push_back( caf::PdmOptionItemInfo( resultName, resultName ) ); + } + } + + return options; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +WellFractureIntersectionData RimMeshFractureTemplate::wellFractureIntersectionData( const RimFracture* fractureInstance ) const +{ + if ( !fractureInstance || !fractureInstance->fractureGrid() ) return {}; + + WellFractureIntersectionData values; + + const RigFractureGrid* fractureGrid = fractureInstance->fractureGrid(); + if ( orientationType() == ALONG_WELL_PATH ) + { + RimWellPath* rimWellPath = nullptr; + fractureInstance->firstAncestorOrThisOfType( rimWellPath ); + + if ( rimWellPath && rimWellPath->wellPathGeometry() ) + { + double totalLength = 0.0; + double weightedConductivity = 0.0; + double weightedWidth = 0.0; + double weightedBetaFactorOnFile = 0.0; + + { + std::vector widthResultValues; + { + auto nameUnit = widthParameterNameAndUnit(); + widthResultValues = fractureGridResultsForUnitSystem( nameUnit.first, + nameUnit.second, + m_activeTimeStepIndex, + fractureTemplateUnit() ); + } + + std::vector conductivityResultValues; + { + auto nameUnit = conductivityParameterNameAndUnit(); + conductivityResultValues = fractureGridResultsForUnitSystem( nameUnit.first, + nameUnit.second, + m_activeTimeStepIndex, + fractureTemplateUnit() ); + } + + std::vector betaFactorResultValues; + { + auto nameUnit = betaFactorParameterNameAndUnit(); + betaFactorResultValues = fractureGridResults( nameUnit.first, nameUnit.second, m_activeTimeStepIndex ); + } + + RiaWeightedMeanCalculator widthCalc; + RiaWeightedMeanCalculator conductivityCalc; + RiaWeightedGeometricMeanCalculator betaFactorCalc; + + RigWellPathStimplanIntersector intersector( rimWellPath->wellPathGeometry(), fractureInstance ); + for ( const auto& v : intersector.intersections() ) + { + size_t fractureGlobalCellIndex = v.first; + double intersectionLength = v.second.computeLength(); + + if ( fractureGlobalCellIndex < widthResultValues.size() ) + { + widthCalc.addValueAndWeight( widthResultValues[fractureGlobalCellIndex], intersectionLength ); + } + + if ( fractureGlobalCellIndex < conductivityResultValues.size() ) + { + conductivityCalc.addValueAndWeight( conductivityResultValues[fractureGlobalCellIndex], + intersectionLength ); + } + + if ( fractureGlobalCellIndex < betaFactorResultValues.size() ) + { + double nativeBetaFactor = betaFactorResultValues[fractureGlobalCellIndex]; + + // Guard against zero beta values, as these values will set the geometric mean to zero + // Consider using the conductivity threshold instead of a local beta threshold + const double threshold = 1e-6; + if ( fabs( nativeBetaFactor ) > threshold ) + { + betaFactorCalc.addValueAndWeight( nativeBetaFactor, intersectionLength ); + } + } + } + if ( conductivityCalc.validAggregatedWeight() ) + { + weightedConductivity = conductivityCalc.weightedMean(); + } + if ( widthCalc.validAggregatedWeight() ) + { + weightedWidth = widthCalc.weightedMean(); + totalLength = widthCalc.aggregatedWeight(); + } + if ( betaFactorCalc.validAggregatedWeight() ) + { + weightedBetaFactorOnFile = betaFactorCalc.weightedMean(); + } + } + + if ( totalLength > 1e-7 ) + { + values.m_width = weightedWidth; + values.m_conductivity = weightedConductivity; + + double conversionFactorForBeta = conversionFactorForBetaValues(); + double betaFactorForcheimer = weightedBetaFactorOnFile / conversionFactorForBeta; + + values.m_betaFactorInForcheimerUnits = betaFactorForcheimer; + } + + values.m_permeability = RigTransmissibilityEquations::permeability( weightedConductivity, weightedWidth ); + } + } + else + { + std::pair wellCellIJ = fractureGrid->fractureCellAtWellCenter(); + size_t wellCellIndex = fractureGrid->getGlobalIndexFromIJ( wellCellIJ.first, wellCellIJ.second ); + const RigFractureCell& wellCell = fractureGrid->cellFromIndex( wellCellIndex ); + + double conductivity = wellCell.getConductivityValue(); + values.m_conductivity = conductivity; + + { + auto nameUnit = widthParameterNameAndUnit(); + if ( !nameUnit.first.isEmpty() ) + { + double widthInRequiredUnit = HUGE_VAL; + { + auto resultValues = fractureGridResultsForUnitSystem( nameUnit.first, + nameUnit.second, + m_activeTimeStepIndex, + fractureTemplateUnit() ); + + if ( wellCellIndex < resultValues.size() ) + { + widthInRequiredUnit = resultValues[wellCellIndex]; + } + } + + if ( widthInRequiredUnit != HUGE_VAL && fabs( widthInRequiredUnit ) > 1e-20 ) + { + values.m_width = widthInRequiredUnit; + values.m_permeability = RigTransmissibilityEquations::permeability( conductivity, widthInRequiredUnit ); + } + } + } + + { + auto nameUnit = betaFactorParameterNameAndUnit(); + std::vector betaFactorResultValues = + fractureGridResults( nameUnit.first, nameUnit.second, m_activeTimeStepIndex ); + + if ( wellCellIndex < betaFactorResultValues.size() ) + { + double nativeBetaValue = betaFactorResultValues[wellCellIndex]; + + double conversionFactorForBeta = conversionFactorForBetaValues(); + double betaFactorForcheimer = nativeBetaValue / conversionFactorForBeta; + + values.m_betaFactorInForcheimerUnits = betaFactorForcheimer; + } + } + } + + return values; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +double RimMeshFractureTemplate::conversionFactorForBetaValues() const +{ + auto nameUnit = betaFactorParameterNameAndUnit(); + + double conversionFactorForBeta = 1.0; + + QString trimmedUnit = nameUnit.second.trimmed().toLower(); + if ( trimmedUnit == "/m" ) + { + conversionFactorForBeta = 1.01325E+08; + } + else if ( trimmedUnit == "/cm" ) + { + conversionFactorForBeta = 1.01325E+06; + } + else if ( trimmedUnit == "/ft" ) + { + conversionFactorForBeta = 3.088386E+07; + } + + return conversionFactorForBeta; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QString RimMeshFractureTemplate::mapUiResultNameToFileResultName( const QString& uiResultName ) const +{ + QString fileResultName; + + if ( uiResultName == RiaDefines::conductivityResultName() ) + { + fileResultName = m_conductivityResultNameOnFile(); + } + else + { + fileResultName = uiResultName; + } + + return fileResultName; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimMeshFractureTemplate::onLoadDataAndUpdateGeometryHasChanged() +{ + loadDataAndUpdate(); + + RimProject::current()->scheduleCreateDisplayModelAndRedrawAllViews(); + RiaCompletionTypeCalculationScheduler::instance()->scheduleRecalculateCompletionTypeAndRedrawAllViews(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::vector RimMeshFractureTemplate::widthResultValues() const +{ + std::vector resultValues; + + auto nameUnit = widthParameterNameAndUnit(); + if ( !nameUnit.first.isEmpty() ) + { + resultValues = fractureGridResultsForUnitSystem( nameUnit.first, + nameUnit.second, + m_activeTimeStepIndex, + fractureTemplateUnit() ); + } + + return resultValues; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimMeshFractureTemplate::defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) +{ + uiOrdering.add( &m_name ); + uiOrdering.add( &m_id ); + + { + caf::PdmUiGroup* group = uiOrdering.addNewGroup( "Input" ); + group->add( &m_stimPlanFileName ); + group->add( &m_activeTimeStepIndex ); + group->add( &m_userDefinedWellPathDepthAtFracture ); + group->add( &m_wellPathDepthAtFracture ); + + m_wellPathDepthAtFracture.uiCapability()->setUiReadOnly( !m_userDefinedWellPathDepthAtFracture() ); + } + + { + caf::PdmUiGroup* group = uiOrdering.addNewGroup( "Geometry" ); + group->add( &m_orientationType ); + group->add( &m_azimuthAngle ); + } + + { + caf::PdmUiGroup* group = uiOrdering.addNewGroup( "Fracture Truncation" ); + group->setCollapsedByDefault( true ); + m_fractureContainment()->uiOrdering( uiConfigName, *group ); + } + + { + caf::PdmUiGroup* group = uiOrdering.addNewGroup( "Properties" ); + group->add( &m_conductivityResultNameOnFile ); + group->add( &m_conductivityType ); + group->add( &m_skinFactor ); + group->add( &m_perforationLength ); + group->add( &m_perforationEfficiency ); + group->add( &m_wellDiameter ); + } + + if ( widthResultValues().empty() ) + { + m_fractureWidthType = USER_DEFINED_WIDTH; + } + + RimFractureTemplate::defineUiOrdering( uiConfigName, uiOrdering ); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimMeshFractureTemplate::defineEditorAttribute( const caf::PdmFieldHandle* field, + QString uiConfigName, + caf::PdmUiEditorAttribute* attribute ) +{ + RimFractureTemplate::defineEditorAttribute( field, uiConfigName, attribute ); + + if ( field == &m_stimPlanFileName ) + { + caf::PdmUiFilePathEditorAttribute* myAttr = dynamic_cast( attribute ); + if ( myAttr ) + { + myAttr->m_fileSelectionFilter = getFileSelectionFilter(); + } + } +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QString RimMeshFractureTemplate::wellPathDepthAtFractureUiName() const +{ + return "Well/Fracture Intersection Depth"; +} diff --git a/ApplicationLibCode/ProjectDataModel/Completions/RimMeshFractureTemplate.h b/ApplicationLibCode/ProjectDataModel/Completions/RimMeshFractureTemplate.h new file mode 100644 index 0000000000..a9645f9447 --- /dev/null +++ b/ApplicationLibCode/ProjectDataModel/Completions/RimMeshFractureTemplate.h @@ -0,0 +1,108 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2017 - Statoil ASA +// +// ResInsight is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU General Public License at +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// +#pragma once + +#include "RimFractureTemplate.h" + +#include "cafPdmChildArrayField.h" +#include "cafPdmField.h" +#include "cafPdmFieldCvfVec3d.h" +#include "cafPdmFieldHandle.h" +#include "cafPdmObject.h" +#include "cafPdmPtrField.h" + +#include "cvfObject.h" +#include "cvfVector3.h" + +#include + +//================================================================================================== +/// +/// +//================================================================================================== +class RimMeshFractureTemplate : public RimFractureTemplate +{ + CAF_PDM_HEADER_INIT; + +public: + RimMeshFractureTemplate(); + ~RimMeshFractureTemplate() override; + + int activeTimeStepIndex(); + + virtual void setDefaultsBasedOnFile() = 0; + + void setFileName( const QString& fileName ); + QString fileName(); + + QString wellPathDepthAtFractureUiName() const override; + + // Result Access + virtual std::vector timeSteps() = 0; + virtual QStringList conductivityResultNames() const = 0; + virtual std::vector> + resultValues( const QString& uiResultName, const QString& unitName, size_t timeStepIndex ) const = 0; + virtual std::vector + fractureGridResults( const QString& resultName, const QString& unitName, size_t timeStepIndex ) const = 0; + virtual bool hasConductivity() const = 0; + virtual double resultValueAtIJ( const RigFractureGrid* fractureGrid, + const QString& uiResultName, + const QString& unitName, + size_t timeStepIndex, + size_t i, + size_t j ) = 0; + + virtual QString getFileSelectionFilter() const = 0; + + virtual std::vector widthResultValues() const; + + QString mapUiResultNameToFileResultName( const QString& uiResultName ) const; + +protected: + void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) override; + QList calculateValueOptions( const caf::PdmFieldHandle* fieldNeedingOptions ) override; + void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) override; + void defineEditorAttribute( const caf::PdmFieldHandle* field, + QString uiConfigName, + caf::PdmUiEditorAttribute* attribute ) override; + void onLoadDataAndUpdateGeometryHasChanged() override; + + virtual std::vector + fractureGridResultsForUnitSystem( const QString& resultName, + const QString& unitName, + size_t timeStepIndex, + RiaDefines::EclipseUnitSystem requiredUnitSystem ) const = 0; + + WellFractureIntersectionData wellFractureIntersectionData( const RimFracture* fractureInstance ) const override; + + virtual std::pair widthParameterNameAndUnit() const = 0; + virtual std::pair conductivityParameterNameAndUnit() const = 0; + virtual std::pair betaFactorParameterNameAndUnit() const = 0; + + double conversionFactorForBetaValues() const; + +protected: + caf::PdmField m_stimPlanFileName; + bool m_readError; + + caf::PdmField m_activeTimeStepIndex; + caf::PdmField m_conductivityResultNameOnFile; + + caf::PdmField m_userDefinedWellPathDepthAtFracture; + caf::PdmField m_borderPolygonResultName; +}; diff --git a/ApplicationLibCode/ProjectDataModel/Completions/RimStimPlanFractureTemplate.cpp b/ApplicationLibCode/ProjectDataModel/Completions/RimStimPlanFractureTemplate.cpp index bca9c76949..5388cae47c 100644 --- a/ApplicationLibCode/ProjectDataModel/Completions/RimStimPlanFractureTemplate.cpp +++ b/ApplicationLibCode/ProjectDataModel/Completions/RimStimPlanFractureTemplate.cpp @@ -63,8 +63,6 @@ #include #include -static std::vector EMPTY_DOUBLE_VECTOR; - CAF_PDM_SOURCE_INIT( RimStimPlanFractureTemplate, "StimPlanFractureTemplate", "RimStimPlanFractureTemplate" ); //-------------------------------------------------------------------------------------------------- @@ -74,23 +72,6 @@ RimStimPlanFractureTemplate::RimStimPlanFractureTemplate() { CAF_PDM_InitScriptableObject( "Fracture Template", ":/FractureTemplate16x16.png" ); - CAF_PDM_InitFieldNoDefault( &m_stimPlanFileName, "StimPlanFileName", "File Name" ); - m_stimPlanFileName.uiCapability()->setUiEditorTypeName( caf::PdmUiFilePathEditor::uiEditorTypeName() ); - - CAF_PDM_InitField( &m_userDefinedWellPathDepthAtFracture, - "UserDefinedWellPathDepthAtFracture", - false, - "User-Defined Well/Fracture Intersection Depth" ); - - CAF_PDM_InitField( &m_borderPolygonResultName, "BorderPolygonResultName", QString( "" ), "Parameter" ); - m_borderPolygonResultName.uiCapability()->setUiHidden( true ); - - CAF_PDM_InitField( &m_activeTimeStepIndex, "ActiveTimeStepIndex", 0, "Active TimeStep Index" ); - CAF_PDM_InitField( &m_conductivityResultNameOnFile, - "ConductivityResultName", - QString( "" ), - "Active Conductivity Result Name" ); - CAF_PDM_InitFieldNoDefault( &m_propertiesTable, "PropertiesTable", "Properties Table" ); m_propertiesTable.uiCapability()->setUiEditorTypeName( caf::PdmUiTextEditor::uiEditorTypeName() ); m_propertiesTable.uiCapability()->setUiLabelPosition( caf::PdmUiItemInfo::HIDDEN ); @@ -116,87 +97,7 @@ RimStimPlanFractureTemplate::~RimStimPlanFractureTemplate() //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -int RimStimPlanFractureTemplate::activeTimeStepIndex() -{ - return m_activeTimeStepIndex; -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimStimPlanFractureTemplate::fieldChangedByUi( const caf::PdmFieldHandle* changedField, - const QVariant& oldValue, - const QVariant& newValue ) -{ - RimFractureTemplate::fieldChangedByUi( changedField, oldValue, newValue ); - - if ( &m_stimPlanFileName == changedField ) - { - m_readError = false; - loadDataAndUpdate(); - setDefaultsBasedOnXMLfile(); - } - - if ( &m_userDefinedWellPathDepthAtFracture == changedField ) - { - if ( !m_userDefinedWellPathDepthAtFracture ) - { - m_readError = false; - loadDataAndUpdate(); - RimProject::current()->scheduleCreateDisplayModelAndRedrawAllViews(); - } - } - - if ( &m_activeTimeStepIndex == changedField ) - { - // Changes to this parameters should change all fractures with this fracture template attached. - RimProject* proj = RimProject::current(); - for ( RimFracture* fracture : fracturesUsingThisTemplate() ) - { - fracture->setStimPlanTimeIndexToPlot( m_activeTimeStepIndex ); - } - proj->scheduleCreateDisplayModelAndRedrawAllViews(); - } - - if ( &m_borderPolygonResultName == changedField || &m_activeTimeStepIndex == changedField || - &m_stimPlanFileName == changedField || &m_conductivityResultNameOnFile == changedField ) - { - // Update fracture grid for all fractures using this template - RimProject* proj = RimProject::current(); - for ( RimFracture* fracture : fracturesUsingThisTemplate() ) - { - fracture->updateFractureGrid(); - } - proj->scheduleCreateDisplayModelAndRedrawAllViews(); - } - - if ( changedField == &m_scaleApplyButton ) - { - m_scaleApplyButton = false; - onLoadDataAndUpdateGeometryHasChanged(); - } -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimStimPlanFractureTemplate::setFileName( const QString& fileName ) -{ - m_stimPlanFileName = fileName; -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -QString RimStimPlanFractureTemplate::fileName() -{ - return m_stimPlanFileName().path(); -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimStimPlanFractureTemplate::setDefaultsBasedOnXMLfile() +void RimStimPlanFractureTemplate::setDefaultsBasedOnFile() { if ( m_stimPlanFractureDefinitionData.isNull() ) return; @@ -324,65 +225,9 @@ void RimStimPlanFractureTemplate::loadDataAndUpdate() //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -QList - RimStimPlanFractureTemplate::calculateValueOptions( const caf::PdmFieldHandle* fieldNeedingOptions ) +QStringList RimStimPlanFractureTemplate::conductivityResultNames() const { - QList options; - - if ( fieldNeedingOptions == &m_fractureWidthType ) - { - options.push_back( - caf::PdmOptionItemInfo( caf::AppEnum::uiText( USER_DEFINED_WIDTH ), USER_DEFINED_WIDTH ) ); - - if ( !widthResultValues().empty() ) - { - options.push_back( - caf::PdmOptionItemInfo( caf::AppEnum::uiText( WIDTH_FROM_FRACTURE ), WIDTH_FROM_FRACTURE ) ); - } - } - - if ( fieldNeedingOptions == &m_betaFactorType ) - { - options.push_back( caf::PdmOptionItemInfo( caf::AppEnum::uiText( USER_DEFINED_BETA_FACTOR ), - USER_DEFINED_BETA_FACTOR ) ); - - if ( isBetaFactorAvailableOnFile() ) - { - options.push_back( caf::PdmOptionItemInfo( caf::AppEnum::uiText( BETA_FACTOR_FROM_FRACTURE ), - BETA_FACTOR_FROM_FRACTURE ) ); - } - } - - if ( fieldNeedingOptions == &m_borderPolygonResultName ) - { - for ( std::pair nameUnit : uiResultNamesWithUnit() ) - { - options.push_back( caf::PdmOptionItemInfo( nameUnit.first, nameUnit.first ) ); - } - } - else if ( fieldNeedingOptions == &m_activeTimeStepIndex ) - { - std::vector timeValues = timeSteps(); - int index = 0; - for ( double value : timeValues ) - { - options.push_back( caf::PdmOptionItemInfo( QString::number( value ), index ) ); - index++; - } - } - else if ( fieldNeedingOptions == &m_conductivityResultNameOnFile ) - { - if ( m_stimPlanFractureDefinitionData.notNull() ) - { - QStringList conductivityResultNames = m_stimPlanFractureDefinitionData->conductivityResultNames(); - for ( const auto& resultName : conductivityResultNames ) - { - options.push_back( caf::PdmOptionItemInfo( resultName, resultName ) ); - } - } - } - - return options; + return m_stimPlanFractureDefinitionData->conductivityResultNames(); } //-------------------------------------------------------------------------------------------------- @@ -465,175 +310,6 @@ std::vector return resultValues; } -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -WellFractureIntersectionData - RimStimPlanFractureTemplate::wellFractureIntersectionData( const RimFracture* fractureInstance ) const -{ - if ( !fractureInstance || !fractureInstance->fractureGrid() ) return {}; - - WellFractureIntersectionData values; - - const RigFractureGrid* fractureGrid = fractureInstance->fractureGrid(); - if ( orientationType() == ALONG_WELL_PATH ) - { - RimWellPath* rimWellPath = nullptr; - fractureInstance->firstAncestorOrThisOfType( rimWellPath ); - - if ( rimWellPath && rimWellPath->wellPathGeometry() ) - { - double totalLength = 0.0; - double weightedConductivity = 0.0; - double weightedWidth = 0.0; - double weightedBetaFactorOnFile = 0.0; - - { - std::vector widthResultValues; - { - auto nameUnit = widthParameterNameAndUnit(); - widthResultValues = fractureGridResultsForUnitSystem( nameUnit.first, - nameUnit.second, - m_activeTimeStepIndex, - fractureTemplateUnit() ); - } - - std::vector conductivityResultValues; - { - auto nameUnit = conductivityParameterNameAndUnit(); - conductivityResultValues = fractureGridResultsForUnitSystem( nameUnit.first, - nameUnit.second, - m_activeTimeStepIndex, - fractureTemplateUnit() ); - } - - std::vector betaFactorResultValues; - { - auto nameUnit = betaFactorParameterNameAndUnit(); - betaFactorResultValues = m_stimPlanFractureDefinitionData->fractureGridResults( nameUnit.first, - nameUnit.second, - m_activeTimeStepIndex ); - } - - RiaWeightedMeanCalculator widthCalc; - RiaWeightedMeanCalculator conductivityCalc; - RiaWeightedGeometricMeanCalculator betaFactorCalc; - - RigWellPathStimplanIntersector intersector( rimWellPath->wellPathGeometry(), fractureInstance ); - for ( const auto& v : intersector.intersections() ) - { - size_t fractureGlobalCellIndex = v.first; - double intersectionLength = v.second.computeLength(); - - if ( fractureGlobalCellIndex < widthResultValues.size() ) - { - widthCalc.addValueAndWeight( widthResultValues[fractureGlobalCellIndex], intersectionLength ); - } - - if ( fractureGlobalCellIndex < conductivityResultValues.size() ) - { - conductivityCalc.addValueAndWeight( conductivityResultValues[fractureGlobalCellIndex], - intersectionLength ); - } - - if ( fractureGlobalCellIndex < betaFactorResultValues.size() ) - { - double nativeBetaFactor = betaFactorResultValues[fractureGlobalCellIndex]; - - // Guard against zero beta values, as these values will set the geometric mean to zero - // Consider using the conductivity threshold instead of a local beta threshold - const double threshold = 1e-6; - if ( fabs( nativeBetaFactor ) > threshold ) - { - betaFactorCalc.addValueAndWeight( nativeBetaFactor, intersectionLength ); - } - } - } - if ( conductivityCalc.validAggregatedWeight() ) - { - weightedConductivity = conductivityCalc.weightedMean(); - } - if ( widthCalc.validAggregatedWeight() ) - { - weightedWidth = widthCalc.weightedMean(); - totalLength = widthCalc.aggregatedWeight(); - } - if ( betaFactorCalc.validAggregatedWeight() ) - { - weightedBetaFactorOnFile = betaFactorCalc.weightedMean(); - } - } - - if ( totalLength > 1e-7 ) - { - values.m_width = weightedWidth; - values.m_conductivity = weightedConductivity; - - double conversionFactorForBeta = conversionFactorForBetaValues(); - double betaFactorForcheimer = weightedBetaFactorOnFile / conversionFactorForBeta; - - values.m_betaFactorInForcheimerUnits = betaFactorForcheimer; - } - - values.m_permeability = RigTransmissibilityEquations::permeability( weightedConductivity, weightedWidth ); - } - } - else - { - std::pair wellCellIJ = fractureGrid->fractureCellAtWellCenter(); - size_t wellCellIndex = fractureGrid->getGlobalIndexFromIJ( wellCellIJ.first, wellCellIJ.second ); - const RigFractureCell& wellCell = fractureGrid->cellFromIndex( wellCellIndex ); - - double conductivity = wellCell.getConductivityValue(); - values.m_conductivity = conductivity; - - { - auto nameUnit = widthParameterNameAndUnit(); - if ( !nameUnit.first.isEmpty() ) - { - double widthInRequiredUnit = HUGE_VAL; - { - auto resultValues = fractureGridResultsForUnitSystem( nameUnit.first, - nameUnit.second, - m_activeTimeStepIndex, - fractureTemplateUnit() ); - - if ( wellCellIndex < resultValues.size() ) - { - widthInRequiredUnit = resultValues[wellCellIndex]; - } - } - - if ( widthInRequiredUnit != HUGE_VAL && fabs( widthInRequiredUnit ) > 1e-20 ) - { - values.m_width = widthInRequiredUnit; - values.m_permeability = RigTransmissibilityEquations::permeability( conductivity, widthInRequiredUnit ); - } - } - } - - { - auto nameUnit = betaFactorParameterNameAndUnit(); - std::vector betaFactorResultValues = - m_stimPlanFractureDefinitionData->fractureGridResults( nameUnit.first, - nameUnit.second, - m_activeTimeStepIndex ); - - if ( wellCellIndex < betaFactorResultValues.size() ) - { - double nativeBetaValue = betaFactorResultValues[wellCellIndex]; - - double conversionFactorForBeta = conversionFactorForBetaValues(); - double betaFactorForcheimer = nativeBetaValue / conversionFactorForBeta; - - values.m_betaFactorInForcheimerUnits = betaFactorForcheimer; - } - } - } - - return values; -} - //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -829,17 +505,6 @@ void RimStimPlanFractureTemplate::convertToUnitSystem( RiaDefines::EclipseUnitSy } } -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimStimPlanFractureTemplate::onLoadDataAndUpdateGeometryHasChanged() -{ - loadDataAndUpdate(); - - RimProject::current()->scheduleCreateDisplayModelAndRedrawAllViews(); - RiaCompletionTypeCalculationScheduler::instance()->scheduleRecalculateCompletionTypeAndRedrawAllViews(); -} - //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -964,25 +629,6 @@ double RimStimPlanFractureTemplate::resultValueAtIJ( const RigFractureGrid* frac return values[adjustedJ][adjustedI]; } -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -std::vector RimStimPlanFractureTemplate::widthResultValues() const -{ - std::vector resultValues; - - auto nameUnit = widthParameterNameAndUnit(); - if ( !nameUnit.first.isEmpty() ) - { - resultValues = fractureGridResultsForUnitSystem( nameUnit.first, - nameUnit.second, - m_activeTimeStepIndex, - fractureTemplateUnit() ); - } - - return resultValues; -} - //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -1025,49 +671,22 @@ void RimStimPlanFractureTemplate::fractureTriangleGeometry( std::vectoradd( &m_stimPlanFileName ); - group->add( &m_activeTimeStepIndex ); - group->add( &m_userDefinedWellPathDepthAtFracture ); - group->add( &m_wellPathDepthAtFracture ); - - m_wellPathDepthAtFracture.uiCapability()->setUiReadOnly( !m_userDefinedWellPathDepthAtFracture() ); - } - - { - caf::PdmUiGroup* group = uiOrdering.addNewGroup( "Geometry" ); - group->add( &m_orientationType ); - group->add( &m_azimuthAngle ); - } - - { - caf::PdmUiGroup* group = uiOrdering.addNewGroup( "Fracture Truncation" ); - group->setCollapsedByDefault( true ); - m_fractureContainment()->uiOrdering( uiConfigName, *group ); - } - - { - caf::PdmUiGroup* group = uiOrdering.addNewGroup( "Properties" ); - group->add( &m_conductivityResultNameOnFile ); - group->add( &m_conductivityType ); - group->add( &m_skinFactor ); - group->add( &m_perforationLength ); - group->add( &m_perforationEfficiency ); - group->add( &m_wellDiameter ); - } + RimMeshFractureTemplate::defineUiOrdering( uiConfigName, uiOrdering ); uiOrdering.add( &m_propertiesTable ); - if ( widthResultValues().empty() ) - { - m_fractureWidthType = USER_DEFINED_WIDTH; - } + // if ( widthResultValues().empty() ) + // { + // m_fractureWidthType = USER_DEFINED_WIDTH; + // } +} - RimFractureTemplate::defineUiOrdering( uiConfigName, uiOrdering ); +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QString RimStimPlanFractureTemplate::getFileSelectionFilter() const +{ + return "StimPlan Xml Files(*.xml);;All Files (*.*)"; } //-------------------------------------------------------------------------------------------------- @@ -1077,16 +696,7 @@ void RimStimPlanFractureTemplate::defineEditorAttribute( const caf::PdmFieldHand QString uiConfigName, caf::PdmUiEditorAttribute* attribute ) { - RimFractureTemplate::defineEditorAttribute( field, uiConfigName, attribute ); - - if ( field == &m_stimPlanFileName ) - { - caf::PdmUiFilePathEditorAttribute* myAttr = dynamic_cast( attribute ); - if ( myAttr ) - { - myAttr->m_fileSelectionFilter = "StimPlan Xml Files(*.xml);;All Files (*.*)"; - } - } + RimMeshFractureTemplate::defineEditorAttribute( field, uiConfigName, attribute ); if ( field == &m_propertiesTable ) { diff --git a/ApplicationLibCode/ProjectDataModel/Completions/RimStimPlanFractureTemplate.h b/ApplicationLibCode/ProjectDataModel/Completions/RimStimPlanFractureTemplate.h index f1290b2e62..6208eff167 100644 --- a/ApplicationLibCode/ProjectDataModel/Completions/RimStimPlanFractureTemplate.h +++ b/ApplicationLibCode/ProjectDataModel/Completions/RimStimPlanFractureTemplate.h @@ -7,8 +7,8 @@ // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // -// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY -// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// ResInsight is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or // FITNESS FOR A PARTICULAR PURPOSE. // // See the GNU General Public License at @@ -17,7 +17,7 @@ ///////////////////////////////////////////////////////////////////////////////// #pragma once -#include "RimFractureTemplate.h" +#include "RimMeshFractureTemplate.h" #include "cafAppEnum.h" #include "cafPdmChildArrayField.h" @@ -45,7 +45,7 @@ class RigFractureGrid; /// /// //================================================================================================== -class RimStimPlanFractureTemplate : public RimFractureTemplate +class RimStimPlanFractureTemplate : public RimMeshFractureTemplate { CAF_PDM_HEADER_INIT; @@ -53,13 +53,8 @@ public: RimStimPlanFractureTemplate(); ~RimStimPlanFractureTemplate() override; - int activeTimeStepIndex(); - void loadDataAndUpdate() override; - void setDefaultsBasedOnXMLfile(); - - void setFileName( const QString& fileName ); - QString fileName(); + void setDefaultsBasedOnFile() override; std::pair wellPathDepthAtFractureRange() const override; QString wellPathDepthAtFractureUiName() const override; @@ -73,61 +68,39 @@ public: // Result Access - std::vector timeSteps(); + std::vector timeSteps() override; std::vector> uiResultNamesWithUnit() const override; std::vector> - resultValues( const QString& uiResultName, const QString& unitName, size_t timeStepIndex ) const; - std::vector fractureGridResults( const QString& resultName, const QString& unitName, size_t timeStepIndex ) const; - bool hasConductivity() const; - double resultValueAtIJ( const RigFractureGrid* fractureGrid, - const QString& uiResultName, - const QString& unitName, - size_t timeStepIndex, - size_t i, - size_t j ); - - std::vector widthResultValues() const; + resultValues( const QString& uiResultName, const QString& unitName, size_t timeStepIndex ) const override; + std::vector + fractureGridResults( const QString& resultName, const QString& unitName, size_t timeStepIndex ) const override; + bool hasConductivity() const override; + double resultValueAtIJ( const RigFractureGrid* fractureGrid, + const QString& uiResultName, + const QString& unitName, + size_t timeStepIndex, + size_t i, + size_t j ) override; void appendDataToResultStatistics( const QString& uiResultName, const QString& unit, MinMaxAccumulator& minMaxAccumulator, PosNegAccumulator& posNegAccumulator ) const override; - QString mapUiResultNameToFileResultName( const QString& uiResultName ) const; - - void convertToUnitSystem( RiaDefines::EclipseUnitSystem neededUnit ) override; - - double formationDip() const; - - static std::pair widthParameterNameAndUnit( cvf::ref def ); - -protected: - void initAfterRead() override; - -private: - void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) override; - QList calculateValueOptions( const caf::PdmFieldHandle* fieldNeedingOptions ) override; - void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) override; - void defineEditorAttribute( const caf::PdmFieldHandle* field, - QString uiConfigName, - caf::PdmUiEditorAttribute* attribute ) override; - void onLoadDataAndUpdateGeometryHasChanged() override; - void setDefaultConductivityResultIfEmpty(); bool setBorderPolygonResultNameToDefault(); + void computeDepthOfWellPathAtFracture(); void computePerforationLength(); std::vector fractureGridResultsForUnitSystem( const QString& resultName, const QString& unitName, size_t timeStepIndex, - RiaDefines::EclipseUnitSystem requiredUnitSystem ) const; + RiaDefines::EclipseUnitSystem requiredUnitSystem ) const override; - WellFractureIntersectionData wellFractureIntersectionData( const RimFracture* fractureInstance ) const override; - - std::pair widthParameterNameAndUnit() const; - std::pair conductivityParameterNameAndUnit() const; - std::pair betaFactorParameterNameAndUnit() const; + std::pair widthParameterNameAndUnit() const override; + std::pair conductivityParameterNameAndUnit() const override; + std::pair betaFactorParameterNameAndUnit() const override; bool isBetaFactorAvailableOnFile() const override; double conversionFactorForBetaValues() const; @@ -138,16 +111,26 @@ private: double value, RigEnsembleFractureStatisticsCalculator::PropertyType propertyType ); + QString mapUiResultNameToFileResultName( const QString& uiResultName ) const; + void convertToUnitSystem( RiaDefines::EclipseUnitSystem neededUnit ) override; + + double formationDip() const; + + static std::pair widthParameterNameAndUnit( cvf::ref def ); + +protected: + void initAfterRead() override; + + void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) override; + void defineEditorAttribute( const caf::PdmFieldHandle* field, + QString uiConfigName, + caf::PdmUiEditorAttribute* attribute ) override; + + QString getFileSelectionFilter() const override; + QStringList conductivityResultNames() const override; + private: - caf::PdmField m_activeTimeStepIndex; - caf::PdmField m_conductivityResultNameOnFile; - - caf::PdmField m_userDefinedWellPathDepthAtFracture; - caf::PdmField m_borderPolygonResultName; - - caf::PdmField m_stimPlanFileName; cvf::ref m_stimPlanFractureDefinitionData; - bool m_readError; caf::PdmField m_propertiesTable; From 51c4fb07a7535af55b132b9ac4c9747113c5c363 Mon Sep 17 00:00:00 2001 From: Kristian Bendiksen Date: Mon, 20 Jun 2022 13:08:45 +0200 Subject: [PATCH 007/129] Thermal Fracture: add thermal fracture template --- .../Completions/CMakeLists_files.cmake | 2 + .../RimThermalFractureTemplate.cpp | 704 ++++++++++++++++++ .../Completions/RimThermalFractureTemplate.h | 109 +++ .../ReservoirDataModel/CMakeLists_files.cmake | 2 + .../RigThermalFractureResultUtil.cpp | 95 +++ .../RigThermalFractureResultUtil.h | 69 ++ 6 files changed, 981 insertions(+) create mode 100644 ApplicationLibCode/ProjectDataModel/Completions/RimThermalFractureTemplate.cpp create mode 100644 ApplicationLibCode/ProjectDataModel/Completions/RimThermalFractureTemplate.h create mode 100644 ApplicationLibCode/ReservoirDataModel/RigThermalFractureResultUtil.cpp create mode 100644 ApplicationLibCode/ReservoirDataModel/RigThermalFractureResultUtil.h diff --git a/ApplicationLibCode/ProjectDataModel/Completions/CMakeLists_files.cmake b/ApplicationLibCode/ProjectDataModel/Completions/CMakeLists_files.cmake index d682b35963..5d7c8edb1c 100644 --- a/ApplicationLibCode/ProjectDataModel/Completions/CMakeLists_files.cmake +++ b/ApplicationLibCode/ProjectDataModel/Completions/CMakeLists_files.cmake @@ -22,6 +22,7 @@ set(SOURCE_GROUP_HEADER_FILES ${CMAKE_CURRENT_LIST_DIR}/RimSimWellFracture.h ${CMAKE_CURRENT_LIST_DIR}/RimSimWellFractureCollection.h ${CMAKE_CURRENT_LIST_DIR}/RimMeshFractureTemplate.h + ${CMAKE_CURRENT_LIST_DIR}/RimThermalFractureTemplate.h ${CMAKE_CURRENT_LIST_DIR}/RimStimPlanFractureTemplate.h ${CMAKE_CURRENT_LIST_DIR}/RimWellPathFracture.h ${CMAKE_CURRENT_LIST_DIR}/RimWellPathFractureCollection.h @@ -58,6 +59,7 @@ set(SOURCE_GROUP_SOURCE_FILES ${CMAKE_CURRENT_LIST_DIR}/RimSimWellFracture.cpp ${CMAKE_CURRENT_LIST_DIR}/RimSimWellFractureCollection.cpp ${CMAKE_CURRENT_LIST_DIR}/RimMeshFractureTemplate.cpp + ${CMAKE_CURRENT_LIST_DIR}/RimThermalFractureTemplate.cpp ${CMAKE_CURRENT_LIST_DIR}/RimStimPlanFractureTemplate.cpp ${CMAKE_CURRENT_LIST_DIR}/RimWellPathFracture.cpp ${CMAKE_CURRENT_LIST_DIR}/RimWellPathFractureCollection.cpp diff --git a/ApplicationLibCode/ProjectDataModel/Completions/RimThermalFractureTemplate.cpp b/ApplicationLibCode/ProjectDataModel/Completions/RimThermalFractureTemplate.cpp new file mode 100644 index 0000000000..41ffa0cc48 --- /dev/null +++ b/ApplicationLibCode/ProjectDataModel/Completions/RimThermalFractureTemplate.cpp @@ -0,0 +1,704 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2022 - Equinor ASA +// +// ResInsight is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU General Public License at +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#include "RimThermalFractureTemplate.h" + +#include "RiaApplication.h" +#include "RiaCompletionTypeCalculationScheduler.h" +#include "RiaEclipseUnitTools.h" +#include "RiaFractureDefines.h" +#include "RiaLogging.h" + +#include "RifThermalFractureReader.h" + +#include "RigFractureCell.h" +#include "RigFractureGrid.h" +#include "RigThermalFractureDefinition.h" +#include "RigThermalFractureResultUtil.h" + +#include "RimEclipseView.h" +#include "RimFracture.h" +#include "RimFractureContainment.h" +#include "RimProject.h" +#include "RimStimPlanColors.h" +#include "RimWellPath.h" + +#include "cafPdmFieldScriptingCapability.h" +#include "cafPdmObject.h" +#include "cafPdmObjectScriptingCapability.h" +#include "cafPdmUiFilePathEditor.h" +#include "cafPdmUiTextEditor.h" + +#include "cvfMath.h" +#include "cvfVector3.h" + +#include + +#include +#include +#include + +CAF_PDM_SOURCE_INIT( RimThermalFractureTemplate, "ThermalFractureTemplate", "RimThermalFractureTemplate" ); + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RimThermalFractureTemplate::RimThermalFractureTemplate() +{ + CAF_PDM_InitScriptableObject( "Fracture Template", ":/FractureTemplate16x16.png" ); + + m_readError = false; + + setDeletable( true ); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RimThermalFractureTemplate::~RimThermalFractureTemplate() +{ +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimThermalFractureTemplate::setDefaultsBasedOnFile() +{ + if ( m_fractureDefinitionData ) return; + + computeDepthOfWellPathAtFracture(); + computePerforationLength(); + + RiaLogging::info( QString( "Setting well/fracture intersection depth at %1" ).arg( m_wellPathDepthAtFracture ) ); + + m_activeTimeStepIndex = static_cast( m_fractureDefinitionData->numTimeSteps() - 1 ); + + bool polygonPropertySet = setBorderPolygonResultNameToDefault(); + if ( polygonPropertySet ) + RiaLogging::info( QString( "Calculating polygon outline based on %1 at timestep %2" ) + .arg( m_borderPolygonResultName ) + .arg( m_fractureDefinitionData->timeSteps()[m_activeTimeStepIndex] ) ); + else + RiaLogging::info( QString( "Property for polygon calculation not set." ) ); + + // if ( m_fractureDefinitionData->orientation() == RigStimPlanFractureDefinition::Orientation::TRANSVERSE ) + // { + // m_orientationType = TRANSVERSE_WELL_PATH; + // } + // else if ( m_fractureDefinitionData->orientation() == RigStimPlanFractureDefinition::Orientation::LONGITUDINAL ) + // { + // m_orientationType = ALONG_WELL_PATH; + // } + + QStringList resultNames = conductivityResultNames(); + if ( !resultNames.isEmpty() ) + { + m_conductivityResultNameOnFile = resultNames.front(); + } +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +bool RimThermalFractureTemplate::setBorderPolygonResultNameToDefault() +{ + // first option: Width + for ( std::pair property : uiResultNamesWithUnit() ) + { + if ( property.first == "WIDTH" ) + { + m_borderPolygonResultName = property.first; + return true; + } + } + + // if width not found, use conductivity + if ( hasConductivity() ) + { + m_borderPolygonResultName = conductivityResultNames().first(); + return true; + } + + // else: Set to first property + if ( !uiResultNamesWithUnit().empty() ) + { + m_borderPolygonResultName = uiResultNamesWithUnit()[0].first; + return true; + } + return false; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimThermalFractureTemplate::loadDataAndUpdate() +{ + if ( m_readError ) return; + + auto [fractureDefinitionData, errorMessage] = + RifThermalFractureReader::readFractureCsvFile( m_stimPlanFileName().path() ); + if ( errorMessage.size() > 0 ) RiaLogging::error( errorMessage ); + + m_fractureDefinitionData = fractureDefinitionData; + if ( m_fractureDefinitionData ) + { + setDefaultConductivityResultIfEmpty(); + + // if ( fractureTemplateUnit() == RiaDefines::EclipseUnitSystem::UNITS_UNKNOWN ) + // { + // setUnitSystem( m_fractureDefinitionData->unitSet() ); + // } + + if ( !m_userDefinedWellPathDepthAtFracture ) + { + computeDepthOfWellPathAtFracture(); + } + + m_readError = false; + } + else + { + m_readError = true; + } + + for ( RimFracture* fracture : fracturesUsingThisTemplate() ) + { + fracture->updateFractureGrid(); + fracture->clearCachedNonDarcyProperties(); + } + + if ( widthResultValues().empty() ) + { + m_fractureWidthType = USER_DEFINED_WIDTH; + } + + // Todo: Must update all views using this fracture template + RimEclipseView* activeView = dynamic_cast( RiaApplication::instance()->activeReservoirView() ); + if ( activeView ) activeView->fractureColors()->loadDataAndUpdate(); + + updateConnectedEditors(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QStringList RimThermalFractureTemplate::conductivityResultNames() const +{ + QStringList resultNames; + for ( auto [name, unit] : m_fractureDefinitionData->getPropertyNamesUnits() ) + { + resultNames.append( name ); + } + + return resultNames; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimThermalFractureTemplate::computeDepthOfWellPathAtFracture() +{ + // if ( !m_fractureDefinitionData.isNull() ) + // { + // double firstTvd = m_fractureDefinitionData->topPerfTvd(); + // double lastTvd = m_fractureDefinitionData->bottomPerfTvd(); + + // if ( firstTvd != HUGE_VAL && lastTvd != HUGE_VAL ) + // { + // m_wellPathDepthAtFracture.setValueWithFieldChanged( ( firstTvd + lastTvd ) / 2 ); + // } + // else + // { + // firstTvd = m_fractureDefinitionData->minDepth(); + // lastTvd = m_fractureDefinitionData->maxDepth(); + // m_wellPathDepthAtFracture.setValueWithFieldChanged( ( firstTvd + lastTvd ) / 2 ); + // } + // } +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimThermalFractureTemplate::computePerforationLength() +{ + // if ( !m_fractureDefinitionData.isNull() ) + // { + // double firstTvd = m_fractureDefinitionData->topPerfTvd(); + // double lastTvd = m_fractureDefinitionData->bottomPerfTvd(); + + // if ( firstTvd != HUGE_VAL && lastTvd != HUGE_VAL ) + // { + // m_perforationLength = cvf::Math::abs( firstTvd - lastTvd ); + // } + // } + + // if ( fractureTemplateUnit() == RiaDefines::EclipseUnitSystem::UNITS_METRIC && m_perforationLength < 10 ) + // { + // m_perforationLength = 10; + // } + // else if ( fractureTemplateUnit() == RiaDefines::EclipseUnitSystem::UNITS_FIELD && + // m_perforationLength < RiaEclipseUnitTools::meterToFeet( 10 ) ) + // { + // m_perforationLength = std::round( RiaEclipseUnitTools::meterToFeet( 10 ) ); + // } +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::vector + RimThermalFractureTemplate::fractureGridResultsForUnitSystem( const QString& resultName, + const QString& unitName, + size_t timeStepIndex, + RiaDefines::EclipseUnitSystem requiredUnitSystem ) const +{ + auto resultValues = fractureGridResults( resultName, unitName, m_activeTimeStepIndex ); + + if ( fractureTemplateUnit() == RiaDefines::EclipseUnitSystem::UNITS_METRIC ) + { + for ( auto& v : resultValues ) + { + v = RiaEclipseUnitTools::convertToMeter( v, unitName ); + } + } + else if ( fractureTemplateUnit() == RiaDefines::EclipseUnitSystem::UNITS_FIELD ) + { + for ( auto& v : resultValues ) + { + v = RiaEclipseUnitTools::convertToFeet( v, unitName ); + } + } + + return resultValues; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::pair RimThermalFractureTemplate::widthParameterNameAndUnit() const +{ + return widthParameterNameAndUnit( m_fractureDefinitionData ); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::pair + RimThermalFractureTemplate::widthParameterNameAndUnit( std::shared_ptr fractureDefinitionData ) +{ + if ( fractureDefinitionData ) + { + std::vector> propertyNamesUnitsOnFile = + fractureDefinitionData->getPropertyNamesUnits(); + + for ( const auto& nameUnit : propertyNamesUnitsOnFile ) + { + if ( nameUnit.first.contains( "effective width", Qt::CaseInsensitive ) ) + { + return nameUnit; + } + + if ( nameUnit.first.contains( "width", Qt::CaseInsensitive ) ) + { + return nameUnit; + } + } + } + + return std::pair(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::pair RimThermalFractureTemplate::conductivityParameterNameAndUnit() const +{ + if ( m_fractureDefinitionData ) + { + std::vector> propertyNamesUnitsOnFile = + m_fractureDefinitionData->getPropertyNamesUnits(); + + for ( const auto& nameUnit : propertyNamesUnitsOnFile ) + { + if ( nameUnit.first.contains( m_conductivityResultNameOnFile, Qt::CaseInsensitive ) ) + { + return nameUnit; + } + } + } + + return std::pair(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::pair RimThermalFractureTemplate::betaFactorParameterNameAndUnit() const +{ + if ( m_fractureDefinitionData ) + { + std::vector> propertyNamesUnitsOnFile = + m_fractureDefinitionData->getPropertyNamesUnits(); + + for ( const auto& nameUnit : propertyNamesUnitsOnFile ) + { + if ( nameUnit.first.contains( "beta", Qt::CaseInsensitive ) ) + { + return nameUnit; + } + } + } + + return std::pair(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +bool RimThermalFractureTemplate::isBetaFactorAvailableOnFile() const +{ + auto nameAndUnit = betaFactorParameterNameAndUnit(); + + return !nameAndUnit.first.isEmpty(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +double RimThermalFractureTemplate::conversionFactorForBetaValues() const +{ + auto nameUnit = betaFactorParameterNameAndUnit(); + + double conversionFactorForBeta = 1.0; + + QString trimmedUnit = nameUnit.second.trimmed().toLower(); + if ( trimmedUnit == "/m" ) + { + conversionFactorForBeta = 1.01325E+08; + } + else if ( trimmedUnit == "/cm" ) + { + conversionFactorForBeta = 1.01325E+06; + } + else if ( trimmedUnit == "/ft" ) + { + conversionFactorForBeta = 3.088386E+07; + } + + return conversionFactorForBeta; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimThermalFractureTemplate::setDefaultConductivityResultIfEmpty() +{ + if ( m_conductivityResultNameOnFile().isEmpty() ) + { + if ( !conductivityResultNames().isEmpty() ) + { + m_conductivityResultNameOnFile = conductivityResultNames().front(); + } + } +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QString RimThermalFractureTemplate::mapUiResultNameToFileResultName( const QString& uiResultName ) const +{ + QString fileResultName; + + if ( uiResultName == RiaDefines::conductivityResultName() ) + { + fileResultName = m_conductivityResultNameOnFile(); + } + else + { + fileResultName = uiResultName; + } + + return fileResultName; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimThermalFractureTemplate::convertToUnitSystem( RiaDefines::EclipseUnitSystem neededUnit ) +{ + if ( m_fractureTemplateUnit() == neededUnit ) return; + + setUnitSystem( neededUnit ); + RimFractureTemplate::convertToUnitSystem( neededUnit ); + + m_readError = false; + loadDataAndUpdate(); + + if ( !m_fractureDefinitionData ) + { + m_readError = true; + // Force needed unit system when file reading fails to be able to open the project. + setUnitSystem( neededUnit ); + return; + } + + if ( neededUnit == RiaDefines::EclipseUnitSystem::UNITS_FIELD ) + { + m_wellPathDepthAtFracture = RiaEclipseUnitTools::meterToFeet( m_wellPathDepthAtFracture ); + } + else if ( neededUnit == RiaDefines::EclipseUnitSystem::UNITS_METRIC ) + { + m_wellPathDepthAtFracture = RiaEclipseUnitTools::feetToMeter( m_wellPathDepthAtFracture ); + } + + m_activeTimeStepIndex = static_cast( m_fractureDefinitionData->numTimeSteps() - 1 ); + bool polygonPropertySet = setBorderPolygonResultNameToDefault(); + + if ( polygonPropertySet ) + RiaLogging::info( QString( "Calculating polygon outline based on %1 at timestep %2" ) + .arg( m_borderPolygonResultName ) + .arg( m_fractureDefinitionData->timeSteps()[m_activeTimeStepIndex] ) ); + else + RiaLogging::info( QString( "Property for polygon calculation not set." ) ); + + if ( !conductivityResultNames().isEmpty() ) + { + m_conductivityResultNameOnFile = conductivityResultNames().front(); + } +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::vector RimThermalFractureTemplate::timeSteps() +{ + if ( m_fractureDefinitionData ) + { + return m_fractureDefinitionData->timeSteps(); + } + + return std::vector(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::vector> RimThermalFractureTemplate::uiResultNamesWithUnit() const +{ + std::vector> propertyNamesAndUnits; + + if ( m_fractureDefinitionData ) + { + QString conductivityUnit = "mD/s"; + + std::vector> tmp; + + std::vector> propertyNamesUnitsOnFile = + m_fractureDefinitionData->getPropertyNamesUnits(); + for ( const auto& nameUnitPair : propertyNamesUnitsOnFile ) + { + if ( nameUnitPair.first.contains( RiaDefines::conductivityResultName(), Qt::CaseInsensitive ) ) + { + conductivityUnit = nameUnitPair.second; + } + else + { + tmp.push_back( nameUnitPair ); + } + } + + propertyNamesAndUnits.push_back( std::make_pair( RiaDefines::conductivityResultName(), conductivityUnit ) ); + + for ( const auto& nameUnitPair : tmp ) + { + propertyNamesAndUnits.push_back( nameUnitPair ); + } + } + + return propertyNamesAndUnits; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::vector> RimThermalFractureTemplate::resultValues( const QString& uiResultName, + const QString& unitName, + size_t timeStepIndex ) const +{ + if ( m_fractureDefinitionData ) + { + QString fileResultName = mapUiResultNameToFileResultName( uiResultName ); + + return RigThermalFractureResultUtil::getDataAtTimeIndex( m_fractureDefinitionData, + fileResultName, + unitName, + timeStepIndex ); + } + + return std::vector>(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::vector RimThermalFractureTemplate::fractureGridResults( const QString& uiResultName, + const QString& unitName, + size_t timeStepIndex ) const +{ + if ( m_fractureDefinitionData ) + { + QString fileResultName = mapUiResultNameToFileResultName( uiResultName ); + + return RigThermalFractureResultUtil::fractureGridResults( m_fractureDefinitionData, + fileResultName, + unitName, + timeStepIndex ); + } + + return std::vector(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +bool RimThermalFractureTemplate::hasConductivity() const +{ + return ( m_fractureDefinitionData && !conductivityResultNames().isEmpty() ); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +double RimThermalFractureTemplate::resultValueAtIJ( const RigFractureGrid* fractureGrid, + const QString& uiResultName, + const QString& unitName, + size_t timeStepIndex, + size_t i, + size_t j ) +{ + auto values = resultValues( uiResultName, unitName, timeStepIndex ); + + if ( values.empty() ) return HUGE_VAL; + + size_t adjustedI = i + 1; + size_t adjustedJ = j + 1; + + if ( adjustedI >= fractureGrid->iCellCount() || adjustedJ >= fractureGrid->jCellCount() ) + { + return HUGE_VAL; + } + + return values[adjustedJ][adjustedI]; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimThermalFractureTemplate::appendDataToResultStatistics( const QString& uiResultName, + const QString& unit, + MinMaxAccumulator& minMaxAccumulator, + PosNegAccumulator& posNegAccumulator ) const +{ + if ( m_fractureDefinitionData ) + { + // QString fileResultName = mapUiResultNameToFileResultName( uiResultName ); + + // m_fractureDefinitionData->appendDataToResultStatistics( fileResultName, unit, minMaxAccumulator, + // posNegAccumulator ); + } +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimThermalFractureTemplate::fractureTriangleGeometry( std::vector* nodeCoords, + std::vector* triangleIndices, + double wellPathDepthAtFracture ) const +{ + if ( m_fractureDefinitionData ) + { + RigThermalFractureResultUtil::createFractureTriangleGeometry( m_fractureDefinitionData, + m_halfLengthScaleFactor(), + m_heightScaleFactor(), + wellPathDepthAtFracture, + nodeCoords, + triangleIndices ); + } +} + +// //-------------------------------------------------------------------------------------------------- +// /// +// //-------------------------------------------------------------------------------------------------- +// void RimThermalFractureTemplate::defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) +// { +// RimMeshFractureTemplate::defineUiOrdering( uiConfigName, uiOrdering ); + +// uiOrdering.add( &m_propertiesTable ); + +// // if ( widthResultValues().empty() ) +// // { +// // m_fractureWidthType = USER_DEFINED_WIDTH; +// // } +// } + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QString RimThermalFractureTemplate::getFileSelectionFilter() const +{ + return "Reveal Open-Server Files (*.csv);;All Files (*.*)"; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::pair RimThermalFractureTemplate::wellPathDepthAtFractureRange() const +{ + // if ( !m_fractureDefinitionData ) return std::make_pair( 0.0, 1.0 ); + + // return std::make_pair( m_fractureDefinitionData->minDepth(), m_fractureDefinitionData->maxDepth() ); + + return std::make_pair( 0.0, 1.0 ); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +cvf::cref RimThermalFractureTemplate::createFractureGrid( double wellPathDepthAtFracture ) const +{ + if ( m_fractureDefinitionData ) + { + return RigThermalFractureResultUtil::createFractureGrid( m_fractureDefinitionData, + m_conductivityResultNameOnFile, + m_activeTimeStepIndex, + m_halfLengthScaleFactor(), + m_heightScaleFactor(), + wellPathDepthAtFracture, + m_fractureTemplateUnit() ); + } + + return cvf::cref(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QString RimThermalFractureTemplate::wellPathDepthAtFractureUiName() const +{ + return "Well/Fracture Intersection Depth"; +} diff --git a/ApplicationLibCode/ProjectDataModel/Completions/RimThermalFractureTemplate.h b/ApplicationLibCode/ProjectDataModel/Completions/RimThermalFractureTemplate.h new file mode 100644 index 0000000000..4a1a0e7c2f --- /dev/null +++ b/ApplicationLibCode/ProjectDataModel/Completions/RimThermalFractureTemplate.h @@ -0,0 +1,109 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2022 - Equinor ASA +// +// ResInsight is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// ResInsight is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU General Public License at +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// +#pragma once + +#include "RimMeshFractureTemplate.h" + +#include "cafPdmField.h" +#include "cafPdmObject.h" + +#include "cvfVector3.h" + +#include + +class RigThermalFractureDefinition; +class RigFractureCell; +class RigFractureGrid; + +//================================================================================================== +/// +/// +//================================================================================================== +class RimThermalFractureTemplate : public RimMeshFractureTemplate +{ + CAF_PDM_HEADER_INIT; + +public: + RimThermalFractureTemplate(); + ~RimThermalFractureTemplate() override; + + void loadDataAndUpdate() override; + void setDefaultsBasedOnFile() override; + + std::pair wellPathDepthAtFractureRange() const override; + QString wellPathDepthAtFractureUiName() const override; + + // Fracture geometry + cvf::cref createFractureGrid( double wellPathDepthAtFracture ) const override; + + void fractureTriangleGeometry( std::vector* nodeCoords, + std::vector* triangleIndices, + double wellPathDepthAtFracture ) const override; + + // Result Access + + std::vector timeSteps() override; + std::vector> uiResultNamesWithUnit() const override; + std::vector> + resultValues( const QString& uiResultName, const QString& unitName, size_t timeStepIndex ) const override; + std::vector + fractureGridResults( const QString& resultName, const QString& unitName, size_t timeStepIndex ) const override; + bool hasConductivity() const override; + double resultValueAtIJ( const RigFractureGrid* fractureGrid, + const QString& uiResultName, + const QString& unitName, + size_t timeStepIndex, + size_t i, + size_t j ) override; + + void appendDataToResultStatistics( const QString& uiResultName, + const QString& unit, + MinMaxAccumulator& minMaxAccumulator, + PosNegAccumulator& posNegAccumulator ) const override; + + void setDefaultConductivityResultIfEmpty(); + bool setBorderPolygonResultNameToDefault(); + + void computeDepthOfWellPathAtFracture(); + void computePerforationLength(); + + std::vector fractureGridResultsForUnitSystem( const QString& resultName, + const QString& unitName, + size_t timeStepIndex, + RiaDefines::EclipseUnitSystem requiredUnitSystem ) const override; + + std::pair widthParameterNameAndUnit() const override; + std::pair conductivityParameterNameAndUnit() const override; + std::pair betaFactorParameterNameAndUnit() const override; + bool isBetaFactorAvailableOnFile() const override; + + double conversionFactorForBetaValues() const; + + QString mapUiResultNameToFileResultName( const QString& uiResultName ) const; + void convertToUnitSystem( RiaDefines::EclipseUnitSystem neededUnit ) override; + + static std::pair + widthParameterNameAndUnit( std::shared_ptr fractureDefinitionData ); + +protected: + QString getFileSelectionFilter() const override; + QStringList conductivityResultNames() const override; + +private: + std::shared_ptr m_fractureDefinitionData; +}; diff --git a/ApplicationLibCode/ReservoirDataModel/CMakeLists_files.cmake b/ApplicationLibCode/ReservoirDataModel/CMakeLists_files.cmake index 85f9b358ce..f66ae9f408 100644 --- a/ApplicationLibCode/ReservoirDataModel/CMakeLists_files.cmake +++ b/ApplicationLibCode/ReservoirDataModel/CMakeLists_files.cmake @@ -61,6 +61,7 @@ set(SOURCE_GROUP_HEADER_FILES ${CMAKE_CURRENT_LIST_DIR}/RigWellPathFormations.h ${CMAKE_CURRENT_LIST_DIR}/RigStimPlanFractureDefinition.h ${CMAKE_CURRENT_LIST_DIR}/RigThermalFractureDefinition.h + ${CMAKE_CURRENT_LIST_DIR}/RigThermalFractureResultUtil.h ${CMAKE_CURRENT_LIST_DIR}/RigFractureGrid.h ${CMAKE_CURRENT_LIST_DIR}/RigFractureCell.h ${CMAKE_CURRENT_LIST_DIR}/RigWellResultPoint.h @@ -151,6 +152,7 @@ set(SOURCE_GROUP_SOURCE_FILES ${CMAKE_CURRENT_LIST_DIR}/RigWellPathFormations.cpp ${CMAKE_CURRENT_LIST_DIR}/RigStimPlanFractureDefinition.cpp ${CMAKE_CURRENT_LIST_DIR}/RigThermalFractureDefinition.cpp + ${CMAKE_CURRENT_LIST_DIR}/RigThermalFractureResultUtil.cpp ${CMAKE_CURRENT_LIST_DIR}/RigFractureGrid.cpp ${CMAKE_CURRENT_LIST_DIR}/RigFractureCell.cpp ${CMAKE_CURRENT_LIST_DIR}/RigWellResultPoint.cpp diff --git a/ApplicationLibCode/ReservoirDataModel/RigThermalFractureResultUtil.cpp b/ApplicationLibCode/ReservoirDataModel/RigThermalFractureResultUtil.cpp new file mode 100644 index 0000000000..6dec60f8f1 --- /dev/null +++ b/ApplicationLibCode/ReservoirDataModel/RigThermalFractureResultUtil.cpp @@ -0,0 +1,95 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2022 - Equinor ASA +// +// ResInsight is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU General Public License at +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#include "RigThermalFractureResultUtil.h" + +#include "RigFractureGrid.h" + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RigThermalFractureResultUtil::RigThermalFractureResultUtil() +{ +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RigThermalFractureResultUtil::~RigThermalFractureResultUtil() +{ +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::vector> + RigThermalFractureResultUtil::getDataAtTimeIndex( std::shared_ptr fractureDefinition, + const QString& resultName, + const QString& unitName, + size_t timeStepIndex ) +{ + return std::vector>(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RigThermalFractureResultUtil::createFractureTriangleGeometry( + std::shared_ptr fractureDefinition, + double xScaleFactor, + double yScaleFactor, + double wellPathIntersectionAtFractureDepth, + std::vector* vertices, + std::vector* triangleIndices ) +{ +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::vector + RigThermalFractureResultUtil::fractureGridResults( std::shared_ptr fractureDefinition, + const QString& resultName, + const QString& unitName, + size_t timeStepIndex ) +{ + return std::vector(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +cvf::cref + RigThermalFractureResultUtil::createFractureGrid( std::shared_ptr fractureDefinition, + const QString& resultName, + int activeTimeStepIndex, + double xScaleFactor, + double yScaleFactor, + double wellPathIntersectionAtFractureDepth, + RiaDefines::EclipseUnitSystem requiredUnitSet ) +{ + cvf::ref fractureGrid = new RigFractureGrid; + std::vector stimPlanCells; + fractureGrid->setFractureCells( stimPlanCells ); + // fractureGrid->setWellCenterFractureCellIJ( wellCenterStimPlanCellIJ ); + // fractureGrid->setICellCount( this->m_Xs.size() - 2 ); + // fractureGrid->setJCellCount( this->m_Ys.size() - 2 ); + // fractureGrid->ensureCellSearchTreeIsBuilt(); + + return cvf::cref( fractureGrid.p() ); +} diff --git a/ApplicationLibCode/ReservoirDataModel/RigThermalFractureResultUtil.h b/ApplicationLibCode/ReservoirDataModel/RigThermalFractureResultUtil.h new file mode 100644 index 0000000000..e9f9b719a5 --- /dev/null +++ b/ApplicationLibCode/ReservoirDataModel/RigThermalFractureResultUtil.h @@ -0,0 +1,69 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2022 - Equinor ASA +// +// ResInsight is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU General Public License at +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#pragma once + +#include "RiaDefines.h" + +#include "cvfObject.h" +#include "cvfVector3.h" + +#include + +#include +#include + +class RigThermalFractureDefinition; +class RigFractureGrid; + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +class RigThermalFractureResultUtil +{ +public: + RigThermalFractureResultUtil(); + ~RigThermalFractureResultUtil(); + + static std::vector> + getDataAtTimeIndex( std::shared_ptr fractureDefinition, + const QString& resultName, + const QString& unitName, + size_t timeStepIndex ); + + static void createFractureTriangleGeometry( std::shared_ptr fractureDefinition, + double xScaleFactor, + double yScaleFactor, + double wellPathIntersectionAtFractureDepth, + std::vector* vertices, + std::vector* triangleIndices ); + + static std::vector fractureGridResults( std::shared_ptr fractureDefinition, + const QString& resultName, + const QString& unitName, + size_t timeStepIndex ); + + static cvf::cref + createFractureGrid( std::shared_ptr fractureDefinition, + const QString& resultName, + int activeTimeStepIndex, + double xScaleFactor, + double yScaleFactor, + double wellPathIntersectionAtFractureDepth, + RiaDefines::EclipseUnitSystem requiredUnitSet ); +}; From 74cc1e305d196df7302d0f07705d2fcd4660b108 Mon Sep 17 00:00:00 2001 From: Kristian Bendiksen Date: Mon, 20 Jun 2022 13:55:55 +0200 Subject: [PATCH 008/129] Thermal Fracture: Add action to import Reveal csv --- .../FractureCommands/CMakeLists_files.cmake | 2 + .../RicMeshFractureTemplateHelper.h | 52 ++++++ .../RicMeshFractureTemplateHelper.inl | 157 ++++++++++++++++++ .../RicNewStimPlanFractureTemplateFeature.cpp | 143 +++++----------- .../RicNewStimPlanFractureTemplateFeature.h | 5 + .../RicNewThermalFractureTemplateFeature.cpp | 131 +++++++++++++++ .../RicNewThermalFractureTemplateFeature.h | 51 ++++++ .../RimContextCommandBuilder.cpp | 3 + 8 files changed, 447 insertions(+), 97 deletions(-) create mode 100644 ApplicationLibCode/Commands/FractureCommands/RicMeshFractureTemplateHelper.h create mode 100644 ApplicationLibCode/Commands/FractureCommands/RicMeshFractureTemplateHelper.inl create mode 100644 ApplicationLibCode/Commands/FractureCommands/RicNewThermalFractureTemplateFeature.cpp create mode 100644 ApplicationLibCode/Commands/FractureCommands/RicNewThermalFractureTemplateFeature.h diff --git a/ApplicationLibCode/Commands/FractureCommands/CMakeLists_files.cmake b/ApplicationLibCode/Commands/FractureCommands/CMakeLists_files.cmake index 02cd25ab68..44b3c832ed 100644 --- a/ApplicationLibCode/Commands/FractureCommands/CMakeLists_files.cmake +++ b/ApplicationLibCode/Commands/FractureCommands/CMakeLists_files.cmake @@ -9,6 +9,7 @@ set(SOURCE_GROUP_HEADER_FILES ${CMAKE_CURRENT_LIST_DIR}/RicNewSimWellFractureAtPosFeature.h ${CMAKE_CURRENT_LIST_DIR}/RicNewSimWellFractureFeature.h ${CMAKE_CURRENT_LIST_DIR}/RicNewStimPlanFractureTemplateFeature.h + ${CMAKE_CURRENT_LIST_DIR}/RicNewThermalFractureTemplateFeature.h ${CMAKE_CURRENT_LIST_DIR}/RicNewWellPathFractureAtPosFeature.h ${CMAKE_CURRENT_LIST_DIR}/RicNewWellPathFractureFeature.h ${CMAKE_CURRENT_LIST_DIR}/RicNewStimPlanModelFeature.h @@ -33,6 +34,7 @@ set(SOURCE_GROUP_SOURCE_FILES ${CMAKE_CURRENT_LIST_DIR}/RicNewSimWellFractureAtPosFeature.cpp ${CMAKE_CURRENT_LIST_DIR}/RicNewSimWellFractureFeature.cpp ${CMAKE_CURRENT_LIST_DIR}/RicNewStimPlanFractureTemplateFeature.cpp + ${CMAKE_CURRENT_LIST_DIR}/RicNewThermalFractureTemplateFeature.cpp ${CMAKE_CURRENT_LIST_DIR}/RicNewWellPathFractureAtPosFeature.cpp ${CMAKE_CURRENT_LIST_DIR}/RicNewWellPathFractureFeature.cpp ${CMAKE_CURRENT_LIST_DIR}/RicNewStimPlanModelFeature.cpp diff --git a/ApplicationLibCode/Commands/FractureCommands/RicMeshFractureTemplateHelper.h b/ApplicationLibCode/Commands/FractureCommands/RicMeshFractureTemplateHelper.h new file mode 100644 index 0000000000..3659f41780 --- /dev/null +++ b/ApplicationLibCode/Commands/FractureCommands/RicMeshFractureTemplateHelper.h @@ -0,0 +1,52 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2022- Equinor ASA +// +// ResInsight is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU General Public License at +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#pragma once + +#include + +#include + +class RimFracture; +class RimFractureTemplate; +class RimThermalFractureTemplate; + +//================================================================================================== +/// +//================================================================================================== +template +class RicMeshFractureTemplateHelper +{ +public: + static void createNewTemplateForFractureAndUpdate( RimFracture* fracture, + const QString& title, + const QString& lastUsedDialogFallback, + const QString& fileFilter, + const QString& defaultTemplateName ); + + static void selectFractureTemplateAndUpdate( RimFractureTemplate* fractureTemplate ); + static std::vector createNewTemplatesFromFiles( const std::vector& fileNames, + const QString& defaultTemplateName, + bool reuseExistingTemplatesWithMatchingNames = false ); + static std::vector createNewTemplates( const QString& title, + const QString& lastUsedDialogFallback, + const QString& fileFilter, + const QString& defaultTemplateName ); +}; + +#include "RicMeshFractureTemplateHelper.inl" diff --git a/ApplicationLibCode/Commands/FractureCommands/RicMeshFractureTemplateHelper.inl b/ApplicationLibCode/Commands/FractureCommands/RicMeshFractureTemplateHelper.inl new file mode 100644 index 0000000000..990245c210 --- /dev/null +++ b/ApplicationLibCode/Commands/FractureCommands/RicMeshFractureTemplateHelper.inl @@ -0,0 +1,157 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2022- Equinor ASA +// +// ResInsight is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU General Public License at +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#include "RiaApplication.h" + +#include "RimEclipseView.h" +#include "RimFractureTemplateCollection.h" +#include "RimOilField.h" +#include "RimProject.h" +#include "RimThermalFractureTemplate.h" +#include "RimWellPathFracture.h" + +#include "Riu3DMainWindowTools.h" +#include "RiuFileDialogTools.h" + +#include "cafSelectionManager.h" + +#include "cvfAssert.h" + +#include +#include +#include + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +template +void RicMeshFractureTemplateHelper::createNewTemplateForFractureAndUpdate( RimFracture* fracture, + const QString& title, + const QString& lastUsedDialogFallback, + const QString& fileFilter, + const QString& defaultTemplateName ) +{ + std::vector newTemplates = createNewTemplates( title, lastUsedDialogFallback, fileFilter, defaultTemplateName ); + if ( !newTemplates.empty() ) + { + T* lastTemplateCreated = newTemplates.back(); + fracture->setFractureTemplate( lastTemplateCreated ); + + selectFractureTemplateAndUpdate( lastTemplateCreated ); + } +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +template +void RicMeshFractureTemplateHelper::selectFractureTemplateAndUpdate( RimFractureTemplate* fractureTemplate ) +{ + fractureTemplate->loadDataAndUpdate(); + + RimFractureTemplateCollection* templateCollection = nullptr; + fractureTemplate->firstAncestorOrThisOfTypeAsserted( templateCollection ); + templateCollection->updateConnectedEditors(); + + RimProject* project = RimProject::current(); + + project->scheduleCreateDisplayModelAndRedrawAllViews(); + Riu3DMainWindowTools::selectAsCurrentItem( fractureTemplate ); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +template +std::vector RicMeshFractureTemplateHelper::createNewTemplates( const QString& title, + const QString& lastUsedDialogFallback, + const QString& fileFilter, + const QString& defaultTemplateName ) +{ + RiaApplication* app = RiaApplication::instance(); + QString defaultDir = app->lastUsedDialogDirectoryWithFallbackToProjectFolder( lastUsedDialogFallback ); + QStringList fileNames = RiuFileDialogTools::getOpenFileNames( nullptr, title, defaultDir, fileFilter ); + + auto templates = + createNewTemplatesFromFiles( std::vector( fileNames.begin(), fileNames.end() ), defaultTemplateName ); + + if ( !fileNames.isEmpty() ) + { + app->setLastUsedDialogDirectory( lastUsedDialogFallback, QFileInfo( fileNames.last() ).absolutePath() ); + } + + return templates; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +template +std::vector RicMeshFractureTemplateHelper::createNewTemplatesFromFiles( const std::vector& fileNames, + const QString& defaultTemplateName, + bool reuseExistingTemplatesWithMatchingNames ) +{ + if ( fileNames.empty() ) return std::vector(); + + RimProject* project = RimProject::current(); + CVF_ASSERT( project ); + + RimOilField* oilfield = project->activeOilField(); + if ( oilfield == nullptr ) return std::vector(); + + RimFractureTemplateCollection* fracDefColl = oilfield->fractureDefinitionCollection(); + if ( !fracDefColl ) return std::vector(); + + auto findTemplateByName = []( RimFractureTemplateCollection* coll, const QString& name ) -> T* { + for ( auto t : coll->fractureTemplates() ) + if ( t->name() == name ) return dynamic_cast( t ); + + return nullptr; + }; + + std::vector newFractures; + for ( auto fileName : fileNames ) + { + if ( fileName.isEmpty() ) continue; + + QFileInfo stimplanfileFileInfo( fileName ); + QString name = stimplanfileFileInfo.baseName(); + if ( name.isEmpty() ) + { + name = defaultTemplateName; + } + + T* fractureDef = nullptr; + if ( reuseExistingTemplatesWithMatchingNames ) fractureDef = findTemplateByName( fracDefColl, name ); + + if ( fractureDef == nullptr ) + { + fractureDef = new T(); + fracDefColl->addFractureTemplate( fractureDef ); + fractureDef->setName( name ); + } + + fractureDef->setFileName( fileName ); + fractureDef->loadDataAndUpdate(); + fractureDef->setDefaultsBasedOnFile(); + fractureDef->setDefaultWellDiameterFromUnit(); + newFractures.push_back( fractureDef ); + } + + return newFractures; +} diff --git a/ApplicationLibCode/Commands/FractureCommands/RicNewStimPlanFractureTemplateFeature.cpp b/ApplicationLibCode/Commands/FractureCommands/RicNewStimPlanFractureTemplateFeature.cpp index a1c93f796f..c632fc890e 100644 --- a/ApplicationLibCode/Commands/FractureCommands/RicNewStimPlanFractureTemplateFeature.cpp +++ b/ApplicationLibCode/Commands/FractureCommands/RicNewStimPlanFractureTemplateFeature.cpp @@ -19,24 +19,10 @@ #include "RicNewStimPlanFractureTemplateFeature.h" -#include "RiaApplication.h" +#include "RicMeshFractureTemplateHelper.h" -#include "RimEclipseView.h" -#include "RimFractureTemplateCollection.h" -#include "RimOilField.h" -#include "RimProject.h" #include "RimStimPlanFractureTemplate.h" -#include "RimWellPathFracture.h" -#include "Riu3DMainWindowTools.h" -#include "RiuFileDialogTools.h" - -#include "cafSelectionManager.h" - -#include "cvfAssert.h" - -#include -#include #include CAF_CMD_SOURCE_INIT( RicNewStimPlanFractureTemplateFeature, "RicNewStimPlanFractureTemplateFeature" ); @@ -46,14 +32,11 @@ CAF_CMD_SOURCE_INIT( RicNewStimPlanFractureTemplateFeature, "RicNewStimPlanFract //-------------------------------------------------------------------------------------------------- void RicNewStimPlanFractureTemplateFeature::createNewTemplateForFractureAndUpdate( RimFracture* fracture ) { - std::vector newTemplates = createNewTemplates(); - if ( !newTemplates.empty() ) - { - RimStimPlanFractureTemplate* lastTemplateCreated = newTemplates.back(); - fracture->setFractureTemplate( lastTemplateCreated ); - - selectFractureTemplateAndUpdate( lastTemplateCreated ); - } + RicMeshFractureTemplateHelper::createNewTemplateForFractureAndUpdate( fracture, + title(), + lastUsedDialogFallback(), + fileFilter(), + defaultTemplateName() ); } //-------------------------------------------------------------------------------------------------- @@ -61,16 +44,7 @@ void RicNewStimPlanFractureTemplateFeature::createNewTemplateForFractureAndUpdat //-------------------------------------------------------------------------------------------------- void RicNewStimPlanFractureTemplateFeature::selectFractureTemplateAndUpdate( RimFractureTemplate* fractureTemplate ) { - fractureTemplate->loadDataAndUpdate(); - - RimFractureTemplateCollection* templateCollection = nullptr; - fractureTemplate->firstAncestorOrThisOfTypeAsserted( templateCollection ); - templateCollection->updateConnectedEditors(); - - RimProject* project = RimProject::current(); - - project->scheduleCreateDisplayModelAndRedrawAllViews(); - Riu3DMainWindowTools::selectAsCurrentItem( fractureTemplate ); + RicMeshFractureTemplateHelper::selectFractureTemplateAndUpdate( fractureTemplate ); } //-------------------------------------------------------------------------------------------------- @@ -78,21 +52,10 @@ void RicNewStimPlanFractureTemplateFeature::selectFractureTemplateAndUpdate( Rim //-------------------------------------------------------------------------------------------------- std::vector RicNewStimPlanFractureTemplateFeature::createNewTemplates() { - RiaApplication* app = RiaApplication::instance(); - QString defaultDir = app->lastUsedDialogDirectoryWithFallbackToProjectFolder( "STIMPLAN_XML_DIR" ); - QStringList fileNames = RiuFileDialogTools::getOpenFileNames( nullptr, - "Open StimPlan XML File", - defaultDir, - "StimPlan XML File (*.xml);;All files(*.*)" ); - - auto templates = createNewTemplatesFromFiles( std::vector( fileNames.begin(), fileNames.end() ) ); - - if ( !fileNames.isEmpty() ) - { - app->setLastUsedDialogDirectory( "STIMPLAN_XML_DIR", QFileInfo( fileNames.last() ).absolutePath() ); - } - - return templates; + return RicMeshFractureTemplateHelper::createNewTemplates( title(), + lastUsedDialogFallback(), + fileFilter(), + defaultTemplateName() ); } //-------------------------------------------------------------------------------------------------- @@ -102,55 +65,9 @@ std::vector RicNewStimPlanFractureTemplateFeature::createNewTemplatesFromFiles( const std::vector& fileNames, bool reuseExistingTemplatesWithMatchingNames ) { - if ( fileNames.empty() ) return std::vector(); - - RimProject* project = RimProject::current(); - CVF_ASSERT( project ); - - RimOilField* oilfield = project->activeOilField(); - if ( oilfield == nullptr ) return std::vector(); - - RimFractureTemplateCollection* fracDefColl = oilfield->fractureDefinitionCollection(); - if ( !fracDefColl ) return std::vector(); - - auto findTemplateByName = []( RimFractureTemplateCollection* coll, - const QString& name ) -> RimStimPlanFractureTemplate* { - for ( auto t : coll->fractureTemplates() ) - if ( t->name() == name ) return dynamic_cast( t ); - - return nullptr; - }; - - std::vector newFractures; - for ( auto fileName : fileNames ) - { - if ( fileName.isEmpty() ) continue; - - QFileInfo stimplanfileFileInfo( fileName ); - QString name = stimplanfileFileInfo.baseName(); - if ( name.isEmpty() ) - { - name = "StimPlan Fracture Template"; - } - - RimStimPlanFractureTemplate* fractureDef = nullptr; - if ( reuseExistingTemplatesWithMatchingNames ) fractureDef = findTemplateByName( fracDefColl, name ); - - if ( fractureDef == nullptr ) - { - fractureDef = new RimStimPlanFractureTemplate(); - fracDefColl->addFractureTemplate( fractureDef ); - fractureDef->setName( name ); - } - - fractureDef->setFileName( fileName ); - fractureDef->loadDataAndUpdate(); - fractureDef->setDefaultsBasedOnFile(); - fractureDef->setDefaultWellDiameterFromUnit(); - newFractures.push_back( fractureDef ); - } - - return newFractures; + return RicMeshFractureTemplateHelper::createNewTemplatesFromFiles( fileNames, + defaultTemplateName(), + reuseExistingTemplatesWithMatchingNames ); } //-------------------------------------------------------------------------------------------------- @@ -181,3 +98,35 @@ bool RicNewStimPlanFractureTemplateFeature::isCommandEnabled() { return true; } + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QString RicNewStimPlanFractureTemplateFeature::fileFilter() +{ + return "StimPlan XML File (*.xml);;All files(*.*)"; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QString RicNewStimPlanFractureTemplateFeature::title() +{ + return "Open StimPlan XML File"; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QString RicNewStimPlanFractureTemplateFeature::lastUsedDialogFallback() +{ + return "STIMPLAN_XML_DIR"; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QString RicNewStimPlanFractureTemplateFeature::defaultTemplateName() +{ + return "StimPlan Fracture Template"; +} diff --git a/ApplicationLibCode/Commands/FractureCommands/RicNewStimPlanFractureTemplateFeature.h b/ApplicationLibCode/Commands/FractureCommands/RicNewStimPlanFractureTemplateFeature.h index 80b4d33ace..f2482a5d8f 100644 --- a/ApplicationLibCode/Commands/FractureCommands/RicNewStimPlanFractureTemplateFeature.h +++ b/ApplicationLibCode/Commands/FractureCommands/RicNewStimPlanFractureTemplateFeature.h @@ -44,4 +44,9 @@ protected: void onActionTriggered( bool isChecked ) override; void setupActionLook( QAction* actionToSetup ) override; bool isCommandEnabled() override; + + static QString fileFilter(); + static QString title(); + static QString defaultTemplateName(); + static QString lastUsedDialogFallback(); }; diff --git a/ApplicationLibCode/Commands/FractureCommands/RicNewThermalFractureTemplateFeature.cpp b/ApplicationLibCode/Commands/FractureCommands/RicNewThermalFractureTemplateFeature.cpp new file mode 100644 index 0000000000..689766406e --- /dev/null +++ b/ApplicationLibCode/Commands/FractureCommands/RicNewThermalFractureTemplateFeature.cpp @@ -0,0 +1,131 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2022- Equinor ASA +// +// ResInsight is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU General Public License at +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#include "RicNewThermalFractureTemplateFeature.h" + +#include "RicMeshFractureTemplateHelper.h" + +#include "RimThermalFractureTemplate.h" + +#include + +CAF_CMD_SOURCE_INIT( RicNewThermalFractureTemplateFeature, "RicNewThermalFractureTemplateFeature" ); + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RicNewThermalFractureTemplateFeature::createNewTemplateForFractureAndUpdate( RimFracture* fracture ) +{ + RicMeshFractureTemplateHelper::createNewTemplateForFractureAndUpdate( fracture, + title(), + lastUsedDialogFallback(), + fileFilter(), + defaultTemplateName() ); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RicNewThermalFractureTemplateFeature::selectFractureTemplateAndUpdate( RimFractureTemplate* fractureTemplate ) +{ + RicMeshFractureTemplateHelper::selectFractureTemplateAndUpdate( fractureTemplate ); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::vector RicNewThermalFractureTemplateFeature::createNewTemplates() +{ + return RicMeshFractureTemplateHelper::createNewTemplates( title(), + lastUsedDialogFallback(), + fileFilter(), + defaultTemplateName() ); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::vector + RicNewThermalFractureTemplateFeature::createNewTemplatesFromFiles( const std::vector& fileNames, + bool reuseExistingTemplatesWithMatchingNames ) +{ + return RicMeshFractureTemplateHelper::createNewTemplatesFromFiles( fileNames, + defaultTemplateName(), + reuseExistingTemplatesWithMatchingNames ); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RicNewThermalFractureTemplateFeature::onActionTriggered( bool isChecked ) +{ + std::vector newFractures = createNewTemplates(); + if ( !newFractures.empty() ) + { + selectFractureTemplateAndUpdate( newFractures.back() ); + } +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RicNewThermalFractureTemplateFeature::setupActionLook( QAction* actionToSetup ) +{ + actionToSetup->setIcon( QIcon( ":/FractureTemplate16x16.png" ) ); + actionToSetup->setText( "New Thermal Fracture Template" ); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +bool RicNewThermalFractureTemplateFeature::isCommandEnabled() +{ + return true; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QString RicNewThermalFractureTemplateFeature::fileFilter() +{ + return "Reveal Open-Server Files (*.csv);;All files (*.*)"; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QString RicNewThermalFractureTemplateFeature::title() +{ + return "Open Thermal Fracture File"; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QString RicNewThermalFractureTemplateFeature::lastUsedDialogFallback() +{ + return "REVEAL_CSV_DIR"; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QString RicNewThermalFractureTemplateFeature::defaultTemplateName() +{ + return "Thermal Fracture Template"; +} diff --git a/ApplicationLibCode/Commands/FractureCommands/RicNewThermalFractureTemplateFeature.h b/ApplicationLibCode/Commands/FractureCommands/RicNewThermalFractureTemplateFeature.h new file mode 100644 index 0000000000..d2790d9b5f --- /dev/null +++ b/ApplicationLibCode/Commands/FractureCommands/RicNewThermalFractureTemplateFeature.h @@ -0,0 +1,51 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2022- Equinor ASA +// +// ResInsight is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU General Public License at +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#pragma once + +#include "cafCmdFeature.h" + +#include + +class RimFracture; +class RimFractureTemplate; +class RimThermalFractureTemplate; + +//================================================================================================== +/// +//================================================================================================== +class RicNewThermalFractureTemplateFeature : public caf::CmdFeature +{ + CAF_CMD_HEADER_INIT; + static void createNewTemplateForFractureAndUpdate( RimFracture* fracture ); + static void selectFractureTemplateAndUpdate( RimFractureTemplate* fractureTemplate ); + static std::vector + createNewTemplatesFromFiles( const std::vector& fileNames, + bool reuseExistingTemplatesWithMatchingNames = false ); + +protected: + static std::vector createNewTemplates(); + void onActionTriggered( bool isChecked ) override; + void setupActionLook( QAction* actionToSetup ) override; + bool isCommandEnabled() override; + + static QString fileFilter(); + static QString title(); + static QString defaultTemplateName(); + static QString lastUsedDialogFallback(); +}; diff --git a/ApplicationLibCode/ProjectDataModel/RimContextCommandBuilder.cpp b/ApplicationLibCode/ProjectDataModel/RimContextCommandBuilder.cpp index 2663b6a066..7a979e476e 100644 --- a/ApplicationLibCode/ProjectDataModel/RimContextCommandBuilder.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimContextCommandBuilder.cpp @@ -954,6 +954,7 @@ caf::CmdFeatureMenuBuilder RimContextCommandBuilder::commandsFromSelection() menuBuilder.addSeparator(); menuBuilder << "RicNewEllipseFractureTemplateFeature"; menuBuilder << "RicNewStimPlanFractureTemplateFeature"; + menuBuilder << "RicNewThermalFractureTemplateFeature"; menuBuilder << "Separator"; menuBuilder << "RicConvertAllFractureTemplatesToMetricFeature"; menuBuilder << "RicConvertAllFractureTemplatesToFieldFeature"; @@ -965,6 +966,7 @@ caf::CmdFeatureMenuBuilder RimContextCommandBuilder::commandsFromSelection() menuBuilder.addSeparator(); menuBuilder << "RicNewEllipseFractureTemplateFeature"; menuBuilder << "RicNewStimPlanFractureTemplateFeature"; + menuBuilder << "RicNewThermalFractureTemplateFeature"; menuBuilder << "Separator"; menuBuilder << "RicConvertFractureTemplateUnitFeature"; } @@ -975,6 +977,7 @@ caf::CmdFeatureMenuBuilder RimContextCommandBuilder::commandsFromSelection() menuBuilder.addSeparator(); menuBuilder << "RicNewEllipseFractureTemplateFeature"; menuBuilder << "RicNewStimPlanFractureTemplateFeature"; + menuBuilder << "RicNewThermalFractureTemplateFeature"; menuBuilder << "Separator"; menuBuilder << "RicConvertFractureTemplateUnitFeature"; } From c155fbcfe0051b60f3dfad94bde70eb9e590402b Mon Sep 17 00:00:00 2001 From: Kristian Bendiksen Date: Mon, 27 Jun 2022 14:10:28 +0200 Subject: [PATCH 009/129] Thermal Fracture: Add visualization of results --- .../RivWellFracturePartMgr.cpp | 33 +- .../RivWellFracturePartMgr.h | 9 +- .../Completions/RimFracture.cpp | 11 +- .../RimThermalFractureTemplate.cpp | 15 +- .../RigThermalFractureDefinition.cpp | 43 +++ .../RigThermalFractureDefinition.h | 10 +- .../RigThermalFractureResultUtil.cpp | 306 +++++++++++++++++- .../RigThermalFractureResultUtil.h | 21 ++ .../UserInterface/RiuViewerCommands.cpp | 4 +- 9 files changed, 409 insertions(+), 43 deletions(-) diff --git a/ApplicationLibCode/ModelVisualization/RivWellFracturePartMgr.cpp b/ApplicationLibCode/ModelVisualization/RivWellFracturePartMgr.cpp index 6727c7b6db..d222405714 100644 --- a/ApplicationLibCode/ModelVisualization/RivWellFracturePartMgr.cpp +++ b/ApplicationLibCode/ModelVisualization/RivWellFracturePartMgr.cpp @@ -34,10 +34,10 @@ #include "RimFractureContainment.h" #include "RimFractureContainmentTools.h" #include "RimFractureTemplate.h" +#include "RimMeshFractureTemplate.h" #include "RimRegularLegendConfig.h" #include "RimSimWellInView.h" #include "RimStimPlanColors.h" -#include "RimStimPlanFractureTemplate.h" #include "RimWellPath.h" #include "RimWellPathCollection.h" @@ -93,9 +93,9 @@ void RivWellFracturePartMgr::appendGeometryPartsToModel( cvf::ModelBasicList* mo double characteristicCellSize = eclView.ownerCase()->characteristicCellSize(); - cvf::Collection parts; - RimStimPlanFractureTemplate* stimPlanFracTemplate = - dynamic_cast( m_rimFracture->fractureTemplate() ); + cvf::Collection parts; + RimMeshFractureTemplate* stimPlanFracTemplate = + dynamic_cast( m_rimFracture->fractureTemplate() ); if ( stimPlanFracTemplate ) { @@ -228,7 +228,7 @@ const QString RivWellFracturePartMgr::resultInfoText( const RimEclipseView& acti if ( m_rimFracture.isNull() ) return text; auto* ellipseFractureTemplate = dynamic_cast( m_rimFracture->fractureTemplate() ); - auto* stimPlanTemplate = dynamic_cast( m_rimFracture->fractureTemplate() ); + auto* stimPlanTemplate = dynamic_cast( m_rimFracture->fractureTemplate() ); if ( ellipseFractureTemplate ) { @@ -285,7 +285,7 @@ const RigFractureCell* RivWellFracturePartMgr::getFractureCellAtDomainCoord( cvf cvf::Mat4d toFractureXf = m_rimFracture->transformMatrix().getInverted(); cvf::Vec3d fractureCoord = domainCoord.getTransformedPoint( toFractureXf ); - auto* stimPlanTempl = dynamic_cast( m_rimFracture->fractureTemplate() ); + auto* stimPlanTempl = dynamic_cast( m_rimFracture->fractureTemplate() ); if ( !stimPlanTempl ) return nullptr; const RigFractureGrid* grid = m_rimFracture->fractureGrid(); @@ -403,8 +403,8 @@ cvf::ref RivWellFracturePartMgr::createEllipseSurfacePart( const RimE cvf::ref RivWellFracturePartMgr::createStimPlanColorInterpolatedSurfacePart( const RimEclipseView& activeView ) { CVF_ASSERT( m_rimFracture ); - RimStimPlanFractureTemplate* stimPlanFracTemplate = - dynamic_cast( m_rimFracture->fractureTemplate() ); + RimMeshFractureTemplate* stimPlanFracTemplate = + dynamic_cast( m_rimFracture->fractureTemplate() ); CVF_ASSERT( stimPlanFracTemplate ); auto displayCoordTransform = activeView.displayCoordTransform(); @@ -542,8 +542,8 @@ cvf::ref RivWellFracturePartMgr::createSingleColorSurfacePart( const cvf::ref RivWellFracturePartMgr::createStimPlanElementColorSurfacePart( const RimEclipseView& activeView ) { CVF_ASSERT( m_rimFracture ); - RimStimPlanFractureTemplate* stimPlanFracTemplate = - dynamic_cast( m_rimFracture->fractureTemplate() ); + RimMeshFractureTemplate* stimPlanFracTemplate = + dynamic_cast( m_rimFracture->fractureTemplate() ); CVF_ASSERT( stimPlanFracTemplate ); if ( !m_rimFracture->fractureGrid() ) return nullptr; @@ -1002,8 +1002,8 @@ cvf::ref RivWellFracturePartMgr::createStimPlanMeshPart( const RimEcl { if ( !m_rimFracture->fractureTemplate() ) return nullptr; - RimStimPlanFractureTemplate* stimPlanFracTemplate = - dynamic_cast( m_rimFracture->fractureTemplate() ); + RimMeshFractureTemplate* stimPlanFracTemplate = + dynamic_cast( m_rimFracture->fractureTemplate() ); if ( !stimPlanFracTemplate ) return nullptr; cvf::ref stimPlanMeshGeo = createStimPlanMeshDrawable( stimPlanFracTemplate, activeView ); @@ -1030,8 +1030,8 @@ cvf::ref RivWellFracturePartMgr::createStimPlanMeshPart( const RimEcl //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RivWellFracturePartMgr::createVisibleFracturePolygons( RimStimPlanFractureTemplate* stimPlanFracTemplate, - const RimEclipseView& activeView ) +void RivWellFracturePartMgr::createVisibleFracturePolygons( RimMeshFractureTemplate* stimPlanFracTemplate, + const RimEclipseView& activeView ) { if ( !m_rimFracture->fractureGrid() ) return; @@ -1060,9 +1060,8 @@ void RivWellFracturePartMgr::createVisibleFracturePolygons( RimStimPlanFractureT //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -cvf::ref - RivWellFracturePartMgr::createStimPlanMeshDrawable( RimStimPlanFractureTemplate* stimPlanFracTemplate, - const RimEclipseView& activeView ) +cvf::ref RivWellFracturePartMgr::createStimPlanMeshDrawable( RimMeshFractureTemplate* stimPlanFracTemplate, + const RimEclipseView& activeView ) { if ( !m_rimFracture->fractureGrid() ) return nullptr; diff --git a/ApplicationLibCode/ModelVisualization/RivWellFracturePartMgr.h b/ApplicationLibCode/ModelVisualization/RivWellFracturePartMgr.h index ac9206c4ce..043a4ba4a1 100644 --- a/ApplicationLibCode/ModelVisualization/RivWellFracturePartMgr.h +++ b/ApplicationLibCode/ModelVisualization/RivWellFracturePartMgr.h @@ -44,7 +44,7 @@ class DisplayCoordTransform; class RimFracture; class RimFractureTemplate; -class RimStimPlanFractureTemplate; +class RimMeshFractureTemplate; class RimEclipseView; class RigFractureCell; @@ -79,11 +79,10 @@ private: void appendFracturePerforationLengthParts( const RimEclipseView& activeView, cvf::ModelBasicList* model ); cvf::ref createStimPlanMeshPart( const RimEclipseView& activeView ); - cvf::ref createStimPlanMeshDrawable( RimStimPlanFractureTemplate* stimPlanFracTemplate, - const RimEclipseView& activeView ); + cvf::ref createStimPlanMeshDrawable( RimMeshFractureTemplate* stimPlanFracTemplate, + const RimEclipseView& activeView ); - void createVisibleFracturePolygons( RimStimPlanFractureTemplate* stimPlanFracTemplate, - const RimEclipseView& activeView ); + void createVisibleFracturePolygons( RimMeshFractureTemplate* stimPlanFracTemplate, const RimEclipseView& activeView ); std::vector fractureBorderPolygon(); diff --git a/ApplicationLibCode/ProjectDataModel/Completions/RimFracture.cpp b/ApplicationLibCode/ProjectDataModel/Completions/RimFracture.cpp index 56219f337a..b0374dc1f8 100644 --- a/ApplicationLibCode/ProjectDataModel/Completions/RimFracture.cpp +++ b/ApplicationLibCode/ProjectDataModel/Completions/RimFracture.cpp @@ -658,12 +658,11 @@ QList RimFracture::calculateValueOptions( const caf::Pdm if ( fractureTemplate() ) { RimFractureTemplate* fracTemplate = fractureTemplate(); - if ( dynamic_cast( fracTemplate ) ) + if ( dynamic_cast( fracTemplate ) ) { - RimStimPlanFractureTemplate* fracTemplateStimPlan = - dynamic_cast( fracTemplate ); - std::vector timeValues = fracTemplateStimPlan->timeSteps(); - int index = 0; + RimMeshFractureTemplate* fracTemplateStimPlan = dynamic_cast( fracTemplate ); + std::vector timeValues = fracTemplateStimPlan->timeSteps(); + int index = 0; for ( double value : timeValues ) { options.push_back( caf::PdmOptionItemInfo( QString::number( value ), index ) ); @@ -750,7 +749,7 @@ void RimFracture::defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& ui } RimFractureTemplate* fracTemplate = fractureTemplate(); - if ( dynamic_cast( fracTemplate ) ) + if ( dynamic_cast( fracTemplate ) ) { m_stimPlanTimeIndexToPlot.uiCapability()->setUiHidden( false ); diff --git a/ApplicationLibCode/ProjectDataModel/Completions/RimThermalFractureTemplate.cpp b/ApplicationLibCode/ProjectDataModel/Completions/RimThermalFractureTemplate.cpp index 41ffa0cc48..b992795c23 100644 --- a/ApplicationLibCode/ProjectDataModel/Completions/RimThermalFractureTemplate.cpp +++ b/ApplicationLibCode/ProjectDataModel/Completions/RimThermalFractureTemplate.cpp @@ -163,6 +163,8 @@ void RimThermalFractureTemplate::loadDataAndUpdate() // { // setUnitSystem( m_fractureDefinitionData->unitSet() ); // } + // TODO: handle other units + setUnitSystem( RiaDefines::EclipseUnitSystem::UNITS_METRIC ); if ( !m_userDefinedWellPathDepthAtFracture ) { @@ -200,6 +202,8 @@ void RimThermalFractureTemplate::loadDataAndUpdate() QStringList RimThermalFractureTemplate::conductivityResultNames() const { QStringList resultNames; + if ( !m_fractureDefinitionData ) return resultNames; + for ( auto [name, unit] : m_fractureDefinitionData->getPropertyNamesUnits() ) { resultNames.append( name ); @@ -616,10 +620,12 @@ void RimThermalFractureTemplate::appendDataToResultStatistics( const QString& { if ( m_fractureDefinitionData ) { - // QString fileResultName = mapUiResultNameToFileResultName( uiResultName ); - - // m_fractureDefinitionData->appendDataToResultStatistics( fileResultName, unit, minMaxAccumulator, - // posNegAccumulator ); + QString fileResultName = mapUiResultNameToFileResultName( uiResultName ); + RigThermalFractureResultUtil::appendDataToResultStatistics( m_fractureDefinitionData, + fileResultName, + unit, + minMaxAccumulator, + posNegAccumulator ); } } @@ -633,6 +639,7 @@ void RimThermalFractureTemplate::fractureTriangleGeometry( std::vector( i ); + + return -1; +}; + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::vector RigThermalFractureDefinition::relativeCoordinates( int timeStepIndex ) const +{ + std::vector relCoords; + + int xIndex = getPropertyIndex( "XCoord" ); + int yIndex = getPropertyIndex( "YCoord" ); + int zIndex = getPropertyIndex( "ZCoord" ); + if ( xIndex == -1 || yIndex == -1 || zIndex == -1 ) + { + return relCoords; + } + + // The first node is the center node + int centerNodeIndex = 0; + cvf::Vec3d centerNode( getPropertyValue( xIndex, centerNodeIndex, timeStepIndex ), + getPropertyValue( yIndex, centerNodeIndex, timeStepIndex ), + getPropertyValue( zIndex, centerNodeIndex, timeStepIndex ) ); + + for ( size_t nodeIndex = 0; nodeIndex < numNodes(); nodeIndex++ ) + { + cvf::Vec3d nodePos( getPropertyValue( xIndex, static_cast( nodeIndex ), timeStepIndex ), + getPropertyValue( yIndex, static_cast( nodeIndex ), timeStepIndex ), + getPropertyValue( zIndex, static_cast( nodeIndex ), timeStepIndex ) ); + relCoords.push_back( nodePos - centerNode ); + } + + return relCoords; +} diff --git a/ApplicationLibCode/ReservoirDataModel/RigThermalFractureDefinition.h b/ApplicationLibCode/ReservoirDataModel/RigThermalFractureDefinition.h index af58c3113d..106fda121f 100644 --- a/ApplicationLibCode/ReservoirDataModel/RigThermalFractureDefinition.h +++ b/ApplicationLibCode/ReservoirDataModel/RigThermalFractureDefinition.h @@ -20,6 +20,8 @@ #include "RiaDefines.h" +#include "cvfVector3.h" + #include #include @@ -36,8 +38,8 @@ public: { } - QString name() { return m_name; } - QString unit() { return m_unit; } + QString name() const { return m_name; } + QString unit() const { return m_unit; } void appendValue( int nodeIndex, int timeStepIndex, double value ) { @@ -85,6 +87,10 @@ public: double getPropertyValue( int propertyIndex, int nodeIndex, int timeStepIndex ) const; + int getPropertyIndex( const QString& name ) const; + + std::vector relativeCoordinates( int timeStepIndex ) const; + private: QString m_name; diff --git a/ApplicationLibCode/ReservoirDataModel/RigThermalFractureResultUtil.cpp b/ApplicationLibCode/ReservoirDataModel/RigThermalFractureResultUtil.cpp index 6dec60f8f1..87c01a73d5 100644 --- a/ApplicationLibCode/ReservoirDataModel/RigThermalFractureResultUtil.cpp +++ b/ApplicationLibCode/ReservoirDataModel/RigThermalFractureResultUtil.cpp @@ -18,7 +18,20 @@ #include "RigThermalFractureResultUtil.h" +#include "RiaLogging.h" + +#include "RigCellGeometryTools.h" #include "RigFractureGrid.h" +#include "RigStatisticsMath.h" +#include "RigThermalFractureDefinition.h" + +#include "cafAssert.h" +#include "cvfBoundingBox.h" + +#include + +int numSamplesX = 40; +int numSamplesY = 40; //-------------------------------------------------------------------------------------------------- /// @@ -43,7 +56,60 @@ std::vector> const QString& unitName, size_t timeStepIndex ) { - return std::vector>(); + int propertyIndex = fractureDefinition->getPropertyIndex( resultName ); + + std::vector relativePos = fractureDefinition->relativeCoordinates( timeStepIndex ); + CAF_ASSERT( relativePos.size() == fractureDefinition->numNodes() ); + + // Create bounding box + cvf::BoundingBox boundingBox; + for ( auto p : relativePos ) + boundingBox.add( p ); + + // Generate a uniform mesh + auto [xCoordsAtNodes, yCoordsAtNodes] = generateUniformMesh( boundingBox, numSamplesX, numSamplesY ); + + // Find center points + std::vector xCoords; + for ( int i = 0; i < static_cast( xCoordsAtNodes.size() ) - 1; i++ ) + xCoords.push_back( ( xCoordsAtNodes[i] + xCoordsAtNodes[i + 1] ) / 2 ); + std::vector depthCoords; + for ( int i = 0; i < static_cast( yCoordsAtNodes.size() ) - 1; i++ ) + depthCoords.push_back( ( yCoordsAtNodes[i] + yCoordsAtNodes[i + 1] ) / 2 ); + + std::vector> vec; + + // Fill with invalid value + for ( int i = 0; i < numSamplesY; i++ ) + { + std::vector junk( numSamplesX, HUGE_VAL ); + vec.push_back( junk ); + } + + // Loop through each polygon and check if point is inside. + for ( int i = 0; i < static_cast( xCoords.size() ) - 1; i++ ) + { + for ( int j = 0; j < static_cast( depthCoords.size() ) - 1; j++ ) + { + std::vector cellPolygon; + cellPolygon.push_back( cvf::Vec3d( xCoords[i], depthCoords[j], 0.0 ) ); + cellPolygon.push_back( cvf::Vec3d( xCoords[i + 1], depthCoords[j], 0.0 ) ); + cellPolygon.push_back( cvf::Vec3d( xCoords[i + 1], depthCoords[j + 1], 0.0 ) ); + cellPolygon.push_back( cvf::Vec3d( xCoords[i], depthCoords[j + 1], 0.0 ) ); + + for ( size_t nodeIndex = 0; nodeIndex < fractureDefinition->numNodes(); nodeIndex++ ) + { + if ( RigCellGeometryTools::pointInsidePolygon2D( relativePos[nodeIndex], cellPolygon ) ) + { + double value = fractureDefinition->getPropertyValue( propertyIndex, nodeIndex, timeStepIndex ); + + vec[j][i] = value; + } + } + } + } + + return vec; } //-------------------------------------------------------------------------------------------------- @@ -51,12 +117,64 @@ std::vector> //-------------------------------------------------------------------------------------------------- void RigThermalFractureResultUtil::createFractureTriangleGeometry( std::shared_ptr fractureDefinition, + int activeTimeStepIndex, double xScaleFactor, double yScaleFactor, double wellPathIntersectionAtFractureDepth, std::vector* vertices, std::vector* triangleIndices ) { + // Convert to coordinates relative to center node + std::vector points = fractureDefinition->relativeCoordinates( activeTimeStepIndex ); + + // Create bounding box + cvf::BoundingBox boundingBox; + for ( auto p : points ) + boundingBox.add( p ); + + // Generate a uniform mesh + auto [xCoords, depthCoords] = generateUniformMesh( boundingBox, numSamplesX, numSamplesY ); + + // Code adapted from RigStimPlanFractureDefinition + std::vector adjustedYs = depthCoords; + cvf::uint lenXcoords = static_cast( xCoords.size() ); + + for ( cvf::uint k = 0; k < adjustedYs.size(); k++ ) + { + for ( cvf::uint i = 0; i < lenXcoords; i++ ) + { + cvf::Vec3f node = cvf::Vec3f( xCoords[i], adjustedYs[k], 0 ); + vertices->push_back( node ); + + if ( i < lenXcoords - 1 && k < adjustedYs.size() - 1 ) + { + double THRESHOLD_VALUE = 1e-5; + + if ( xCoords[i] < THRESHOLD_VALUE ) + { + // Upper triangle + triangleIndices->push_back( i + k * lenXcoords ); + triangleIndices->push_back( ( i + 1 ) + k * lenXcoords ); + triangleIndices->push_back( ( i + 1 ) + ( k + 1 ) * lenXcoords ); + // Lower triangle + triangleIndices->push_back( i + k * lenXcoords ); + triangleIndices->push_back( ( i + 1 ) + ( k + 1 ) * lenXcoords ); + triangleIndices->push_back( ( i ) + ( k + 1 ) * lenXcoords ); + } + else + { + // Upper triangle + triangleIndices->push_back( i + k * lenXcoords ); + triangleIndices->push_back( ( i + 1 ) + k * lenXcoords ); + triangleIndices->push_back( ( i ) + ( k + 1 ) * lenXcoords ); + // Lower triangle + triangleIndices->push_back( ( i + 1 ) + k * lenXcoords ); + triangleIndices->push_back( ( i + 1 ) + ( k + 1 ) * lenXcoords ); + triangleIndices->push_back( ( i ) + ( k + 1 ) * lenXcoords ); + } + } + } + } } //-------------------------------------------------------------------------------------------------- @@ -68,7 +186,27 @@ std::vector const QString& unitName, size_t timeStepIndex ) { - return std::vector(); + std::vector fractureGridResults; + const std::vector>& resultValuesAtTimeStep = + getDataAtTimeIndex( fractureDefinition, resultName, unitName, timeStepIndex ); + + for ( int i = 0; i < static_cast( numSamplesX ) - 2; i++ ) + { + for ( int j = 0; j < static_cast( numSamplesY ) - 2; j++ ) + { + if ( j + 1 < static_cast( resultValuesAtTimeStep.size() ) && + i + 1 < static_cast( resultValuesAtTimeStep[j + 1].size() ) ) + { + fractureGridResults.push_back( resultValuesAtTimeStep[j + 1][i + 1] ); + } + else + { + fractureGridResults.push_back( HUGE_VAL ); + } + } + } + + return fractureGridResults; } //-------------------------------------------------------------------------------------------------- @@ -83,13 +221,167 @@ cvf::cref double wellPathIntersectionAtFractureDepth, RiaDefines::EclipseUnitSystem requiredUnitSet ) { - cvf::ref fractureGrid = new RigFractureGrid; + // Convert to coordinates relative to center node + std::vector points = fractureDefinition->relativeCoordinates( activeTimeStepIndex ); + + QString conductivityUnitTextOnFile; + + std::vector> propertyNamesUnitsOnFile = fractureDefinition->getPropertyNamesUnits(); + for ( auto properyNameUnit : propertyNamesUnitsOnFile ) + { + if ( resultName == properyNameUnit.first ) + { + conductivityUnitTextOnFile = properyNameUnit.second; + } + } + + CAF_ASSERT( !conductivityUnitTextOnFile.isEmpty() ); + if ( conductivityUnitTextOnFile.isEmpty() ) + { + RiaLogging::error( "Did not find unit for conductivity on file" ); + return nullptr; + } + + std::vector> conductivityValues = + getDataAtTimeIndex( fractureDefinition, resultName, conductivityUnitTextOnFile, activeTimeStepIndex ); + if ( conductivityValues.empty() ) + { + RiaLogging::error( QString( "No conductivity values found for result: %1" ).arg( resultName ) ); + return nullptr; + } + + // Create bounding box + cvf::BoundingBox boundingBox; + for ( auto p : points ) + boundingBox.add( p ); + + // Generate a uniform mesh + auto [xCoordsAtNodes, yCoordsAtNodes] = generateUniformMesh( boundingBox, numSamplesX, numSamplesY ); + + // Find center points + std::vector xCoords; + for ( int i = 0; i < static_cast( xCoordsAtNodes.size() ) - 1; i++ ) + xCoords.push_back( ( xCoordsAtNodes[i] + xCoordsAtNodes[i + 1] ) / 2 ); + std::vector depthCoords; + for ( int i = 0; i < static_cast( yCoordsAtNodes.size() ) - 1; i++ ) + depthCoords.push_back( ( yCoordsAtNodes[i] + yCoordsAtNodes[i + 1] ) / 2 ); + + std::pair wellCenterStimPlanCellIJ = std::make_pair( 0, 0 ); std::vector stimPlanCells; + for ( int i = 0; i < static_cast( xCoords.size() ) - 1; i++ ) + { + for ( int j = 0; j < static_cast( depthCoords.size() ) - 1; j++ ) + { + std::vector cellPolygon; + cellPolygon.push_back( cvf::Vec3d( xCoords[i], depthCoords[j], 0.0 ) ); + cellPolygon.push_back( cvf::Vec3d( xCoords[i + 1], depthCoords[j], 0.0 ) ); + cellPolygon.push_back( cvf::Vec3d( xCoords[i + 1], depthCoords[j + 1], 0.0 ) ); + cellPolygon.push_back( cvf::Vec3d( xCoords[i], depthCoords[j + 1], 0.0 ) ); + + RigFractureCell stimPlanCell( cellPolygon, i, j ); + if ( !conductivityValues.empty() ) // Assuming vector to be of correct length, or no values + { + stimPlanCell.setConductivityValue( conductivityValues[j + 1][i + 1] ); + } + else + { + stimPlanCell.setConductivityValue( cvf::UNDEFINED_DOUBLE ); + } + + // The well path is intersecting the fracture at origo in the fracture coordinate system + // Find the Stimplan cell where the well path is intersecting + + if ( cellPolygon[0].x() <= 0.0 && cellPolygon[1].x() >= 0.0 ) + { + if ( cellPolygon[1].y() >= 0.0 && cellPolygon[2].y() <= 0.0 ) + { + wellCenterStimPlanCellIJ = std::make_pair( stimPlanCell.getI(), stimPlanCell.getJ() ); + } + } + + stimPlanCells.push_back( stimPlanCell ); + } + } + + cvf::ref fractureGrid = new RigFractureGrid; fractureGrid->setFractureCells( stimPlanCells ); - // fractureGrid->setWellCenterFractureCellIJ( wellCenterStimPlanCellIJ ); - // fractureGrid->setICellCount( this->m_Xs.size() - 2 ); - // fractureGrid->setJCellCount( this->m_Ys.size() - 2 ); - // fractureGrid->ensureCellSearchTreeIsBuilt(); + fractureGrid->setWellCenterFractureCellIJ( wellCenterStimPlanCellIJ ); + fractureGrid->setICellCount( numSamplesX - 2 ); + fractureGrid->setJCellCount( numSamplesY - 2 ); + fractureGrid->ensureCellSearchTreeIsBuilt(); return cvf::cref( fractureGrid.p() ); } + +//-------------------------------------------------------------------------------------------------- +/// TODO: adapted from RimEnsembleFractureStatistics. Maybe extract? +//-------------------------------------------------------------------------------------------------- +std::pair, std::vector> + RigThermalFractureResultUtil::generateUniformMesh( const cvf::BoundingBox& bb, int numSamplesX, int numSamplesY ) +{ + CAF_ASSERT( numSamplesX > 0 ); + CAF_ASSERT( numSamplesY > 0 ); + + double minX = bb.min().x(); + double maxX = bb.max().x(); + + double minY = bb.min().y(); + double maxY = bb.max().y(); + + std::vector gridXs; + double sampleDistanceX = linearSampling( minX, maxX, numSamplesX, gridXs ); + + std::vector gridYs; + double sampleDistanceY = linearSampling( minY, maxY, numSamplesY, gridYs ); + + RiaLogging::info( QString( "Uniform Mesh. Output size: %1x%2. Sampling Distance X = %3 Sampling Distance Y = %4" ) + .arg( numSamplesX ) + .arg( numSamplesY ) + .arg( sampleDistanceX ) + .arg( sampleDistanceY ) ); + + return std::make_pair( gridXs, gridYs ); +} + +//-------------------------------------------------------------------------------------------------- +/// TODO: duplicated from RimEnsembleFractureStatistics. Extract to util. +//-------------------------------------------------------------------------------------------------- +double RigThermalFractureResultUtil::linearSampling( double minValue, + double maxValue, + int numSamples, + std::vector& samples ) +{ + CAF_ASSERT( numSamples > 0 ); + double sampleDistance = ( maxValue - minValue ) / numSamples; + + for ( int s = 0; s < numSamples; s++ ) + { + double pos = minValue + s * sampleDistance + sampleDistance * 0.5; + samples.push_back( pos ); + } + + return sampleDistance; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RigThermalFractureResultUtil::appendDataToResultStatistics( std::shared_ptr fractureDefinition, + const QString& resultName, + const QString& unit, + MinMaxAccumulator& minMaxAccumulator, + PosNegAccumulator& posNegAccumulator ) +{ + int propertyIndex = fractureDefinition->getPropertyIndex( resultName ); + + size_t maxTs = fractureDefinition->timeSteps().size(); + for ( size_t ts = 0; ts < maxTs; ts++ ) + { + for ( size_t nodeIndex = 0; nodeIndex < fractureDefinition->numNodes(); nodeIndex++ ) + { + double value = fractureDefinition->getPropertyValue( propertyIndex, nodeIndex, ts ); + minMaxAccumulator.addValue( value ); + posNegAccumulator.addValue( value ); + } + } +} diff --git a/ApplicationLibCode/ReservoirDataModel/RigThermalFractureResultUtil.h b/ApplicationLibCode/ReservoirDataModel/RigThermalFractureResultUtil.h index e9f9b719a5..51c17eb53b 100644 --- a/ApplicationLibCode/ReservoirDataModel/RigThermalFractureResultUtil.h +++ b/ApplicationLibCode/ReservoirDataModel/RigThermalFractureResultUtil.h @@ -31,6 +31,14 @@ class RigThermalFractureDefinition; class RigFractureGrid; +class MinMaxAccumulator; +class PosNegAccumulator; + +namespace cvf +{ +class BoundingBox; +}; + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -47,6 +55,7 @@ public: size_t timeStepIndex ); static void createFractureTriangleGeometry( std::shared_ptr fractureDefinition, + int activeTimeStepIndex, double xScaleFactor, double yScaleFactor, double wellPathIntersectionAtFractureDepth, @@ -66,4 +75,16 @@ public: double yScaleFactor, double wellPathIntersectionAtFractureDepth, RiaDefines::EclipseUnitSystem requiredUnitSet ); + + static void appendDataToResultStatistics( std::shared_ptr fractureDefinition, + const QString& resultName, + const QString& unit, + MinMaxAccumulator& minMaxAccumulator, + PosNegAccumulator& posNegAccumulator ); + +private: + static std::pair, std::vector> + generateUniformMesh( const cvf::BoundingBox& bb, int numSamplesX, int numSamplesY ); + + static double linearSampling( double minValue, double maxValue, int numSamples, std::vector& samples ); }; diff --git a/ApplicationLibCode/UserInterface/RiuViewerCommands.cpp b/ApplicationLibCode/UserInterface/RiuViewerCommands.cpp index 2d67366dc6..1c08a703ea 100644 --- a/ApplicationLibCode/UserInterface/RiuViewerCommands.cpp +++ b/ApplicationLibCode/UserInterface/RiuViewerCommands.cpp @@ -789,8 +789,8 @@ void RiuViewerCommands::handlePickAction( int winPosX, int winPosY, Qt::Keyboard } } - RimStimPlanFractureTemplate* stimPlanTempl = - fracture ? dynamic_cast( fracture->fractureTemplate() ) : nullptr; + RimMeshFractureTemplate* stimPlanTempl = + fracture ? dynamic_cast( fracture->fractureTemplate() ) : nullptr; RimEllipseFractureTemplate* ellipseTempl = fracture ? dynamic_cast( fracture->fractureTemplate() ) : nullptr; if ( stimPlanTempl || ellipseTempl ) From 2b17c9d9afbe2d6768b3adc98e3b24c288d72f1f Mon Sep 17 00:00:00 2001 From: Kristian Bendiksen Date: Wed, 29 Jun 2022 14:47:28 +0200 Subject: [PATCH 010/129] Rotate fracture plane to align with x-y plane --- .../RigThermalFractureResultUtil.cpp | 98 +++++++++++++++---- .../RigThermalFractureResultUtil.h | 9 +- 2 files changed, 88 insertions(+), 19 deletions(-) diff --git a/ApplicationLibCode/ReservoirDataModel/RigThermalFractureResultUtil.cpp b/ApplicationLibCode/ReservoirDataModel/RigThermalFractureResultUtil.cpp index 87c01a73d5..3543fe2d41 100644 --- a/ApplicationLibCode/ReservoirDataModel/RigThermalFractureResultUtil.cpp +++ b/ApplicationLibCode/ReservoirDataModel/RigThermalFractureResultUtil.cpp @@ -30,8 +30,8 @@ #include -int numSamplesX = 40; -int numSamplesY = 40; +int numSamplesX = 60; +int numSamplesY = 60; //-------------------------------------------------------------------------------------------------- /// @@ -58,14 +58,15 @@ std::vector> { int propertyIndex = fractureDefinition->getPropertyIndex( resultName ); - std::vector relativePos = fractureDefinition->relativeCoordinates( timeStepIndex ); - CAF_ASSERT( relativePos.size() == fractureDefinition->numNodes() ); + std::vector relativePos = getRelativeCoordinates( fractureDefinition, timeStepIndex ); // Create bounding box cvf::BoundingBox boundingBox; for ( auto p : relativePos ) boundingBox.add( p ); + boundingBox.expand( 1.0 ); + // Generate a uniform mesh auto [xCoordsAtNodes, yCoordsAtNodes] = generateUniformMesh( boundingBox, numSamplesX, numSamplesY ); @@ -82,31 +83,44 @@ std::vector> // Fill with invalid value for ( int i = 0; i < numSamplesY; i++ ) { - std::vector junk( numSamplesX, HUGE_VAL ); + std::vector junk( numSamplesX, std::numeric_limits::infinity() ); vec.push_back( junk ); } // Loop through each polygon and check if point is inside. - for ( int i = 0; i < static_cast( xCoords.size() ) - 1; i++ ) + for ( size_t nodeIndex = 0; nodeIndex < fractureDefinition->numNodes(); nodeIndex++ ) { - for ( int j = 0; j < static_cast( depthCoords.size() ) - 1; j++ ) - { - std::vector cellPolygon; - cellPolygon.push_back( cvf::Vec3d( xCoords[i], depthCoords[j], 0.0 ) ); - cellPolygon.push_back( cvf::Vec3d( xCoords[i + 1], depthCoords[j], 0.0 ) ); - cellPolygon.push_back( cvf::Vec3d( xCoords[i + 1], depthCoords[j + 1], 0.0 ) ); - cellPolygon.push_back( cvf::Vec3d( xCoords[i], depthCoords[j + 1], 0.0 ) ); + bool placed = false; - for ( size_t nodeIndex = 0; nodeIndex < fractureDefinition->numNodes(); nodeIndex++ ) + for ( int i = 0; i < static_cast( xCoords.size() ) - 1; i++ ) + { + for ( int j = 0; j < static_cast( depthCoords.size() ) - 1; j++ ) { + std::vector cellPolygon; + cellPolygon.push_back( cvf::Vec3d( xCoords[i], depthCoords[j], 0.0 ) ); + cellPolygon.push_back( cvf::Vec3d( xCoords[i + 1], depthCoords[j], 0.0 ) ); + cellPolygon.push_back( cvf::Vec3d( xCoords[i + 1], depthCoords[j + 1], 0.0 ) ); + cellPolygon.push_back( cvf::Vec3d( xCoords[i], depthCoords[j + 1], 0.0 ) ); + // First and last polygon must match + cellPolygon.push_back( cvf::Vec3d( xCoords[i], depthCoords[j], 0.0 ) ); + if ( RigCellGeometryTools::pointInsidePolygon2D( relativePos[nodeIndex], cellPolygon ) ) { double value = fractureDefinition->getPropertyValue( propertyIndex, nodeIndex, timeStepIndex ); - - vec[j][i] = value; + vec[j][i] = value; + placed = true; } } } + + if ( !placed ) + { + RiaLogging::error( QString( "Unable to place point: %1 [%2 %3 %4]" ) + .arg( nodeIndex ) + .arg( relativePos[nodeIndex].x() ) + .arg( relativePos[nodeIndex].y() ) + .arg( relativePos[nodeIndex].z() ) ); + } } return vec; @@ -125,13 +139,15 @@ void RigThermalFractureResultUtil::createFractureTriangleGeometry( std::vector* triangleIndices ) { // Convert to coordinates relative to center node - std::vector points = fractureDefinition->relativeCoordinates( activeTimeStepIndex ); + std::vector points = getRelativeCoordinates( fractureDefinition, activeTimeStepIndex ); // Create bounding box cvf::BoundingBox boundingBox; for ( auto p : points ) boundingBox.add( p ); + boundingBox.expand( 1.0 ); + // Generate a uniform mesh auto [xCoords, depthCoords] = generateUniformMesh( boundingBox, numSamplesX, numSamplesY ); @@ -222,7 +238,7 @@ cvf::cref RiaDefines::EclipseUnitSystem requiredUnitSet ) { // Convert to coordinates relative to center node - std::vector points = fractureDefinition->relativeCoordinates( activeTimeStepIndex ); + std::vector points = getRelativeCoordinates( fractureDefinition, activeTimeStepIndex ); QString conductivityUnitTextOnFile; @@ -255,6 +271,8 @@ cvf::cref for ( auto p : points ) boundingBox.add( p ); + boundingBox.expand( 1.0 ); + // Generate a uniform mesh auto [xCoordsAtNodes, yCoordsAtNodes] = generateUniformMesh( boundingBox, numSamplesX, numSamplesY ); @@ -385,3 +403,47 @@ void RigThermalFractureResultUtil::appendDataToResultStatistics( std::shared_ptr } } } + +//-------------------------------------------------------------------------------------------------- +/// Taken from OverlayNavigationCube::computeNewUpVector +/// Consider move to geometry util class +//-------------------------------------------------------------------------------------------------- +cvf::Mat4d RigThermalFractureResultUtil::rotationMatrixBetweenVectors( const cvf::Vec3d& v1, const cvf::Vec3d& v2 ) +{ + using namespace cvf; + + Vec3d rotAxis = v1 ^ v2; + rotAxis.normalize(); + + // Guard acos against out-of-domain input + const double dotProduct = Math::clamp( v1 * v2, -1.0, 1.0 ); + const double angle = Math::acos( dotProduct ); + Mat4d rotMat = Mat4d::fromRotation( rotAxis, angle ); + return rotMat; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::vector + RigThermalFractureResultUtil::getRelativeCoordinates( std::shared_ptr fractureDefinition, + size_t timeStepIndex ) +{ + std::vector relativePos = fractureDefinition->relativeCoordinates( timeStepIndex ); + CAF_ASSERT( relativePos.size() == fractureDefinition->numNodes() ); + + cvf::Plane plane; + plane.setFromPoints( relativePos[0], relativePos[1], relativePos[2] ); + + cvf::Vec3d planeNormal = plane.normal().getNormalized(); + RiaLogging::info( + QString( "Plane normal: [%1 %2 %3]" ).arg( planeNormal.x() ).arg( planeNormal.y() ).arg( planeNormal.z() ) ); + auto rotMat = rotationMatrixBetweenVectors( planeNormal, cvf::Vec3d::Z_AXIS.getNormalized() ); + + for ( auto& r : relativePos ) + { + r.transformVector( rotMat ); + } + + return relativePos; +} diff --git a/ApplicationLibCode/ReservoirDataModel/RigThermalFractureResultUtil.h b/ApplicationLibCode/ReservoirDataModel/RigThermalFractureResultUtil.h index 51c17eb53b..7333fc6db7 100644 --- a/ApplicationLibCode/ReservoirDataModel/RigThermalFractureResultUtil.h +++ b/ApplicationLibCode/ReservoirDataModel/RigThermalFractureResultUtil.h @@ -20,6 +20,7 @@ #include "RiaDefines.h" +#include "cvfMatrix4.h" #include "cvfObject.h" #include "cvfVector3.h" @@ -37,7 +38,7 @@ class PosNegAccumulator; namespace cvf { class BoundingBox; -}; +}; // namespace cvf //-------------------------------------------------------------------------------------------------- /// @@ -87,4 +88,10 @@ private: generateUniformMesh( const cvf::BoundingBox& bb, int numSamplesX, int numSamplesY ); static double linearSampling( double minValue, double maxValue, int numSamples, std::vector& samples ); + + static cvf::Mat4d rotationMatrixBetweenVectors( const cvf::Vec3d& v1, const cvf::Vec3d& v2 ); + + static std::vector + getRelativeCoordinates( std::shared_ptr fractureDefinition, + size_t timeStepIndex ); }; From 037de2829c5f722fa2af164dd87b96e39a78d18d Mon Sep 17 00:00:00 2001 From: Kristian Bendiksen Date: Wed, 29 Jun 2022 15:29:21 +0200 Subject: [PATCH 011/129] Thermal Fracture: improve import and display of timestamps --- .../FileInterface/RifThermalFractureReader.cpp | 9 ++++++++- .../Completions/RimMeshFractureTemplate.cpp | 8 ++++---- .../Completions/RimMeshFractureTemplate.h | 5 +++-- .../RimStimPlanFractureTemplate.cpp | 15 +++++++++++++++ .../Completions/RimStimPlanFractureTemplate.h | 2 +- .../Completions/RimThermalFractureTemplate.cpp | 18 ++++++++++++++++++ .../Completions/RimThermalFractureTemplate.h | 2 +- 7 files changed, 50 insertions(+), 9 deletions(-) diff --git a/ApplicationLibCode/FileInterface/RifThermalFractureReader.cpp b/ApplicationLibCode/FileInterface/RifThermalFractureReader.cpp index 0b81a2e5c0..f4fa8ec9f7 100644 --- a/ApplicationLibCode/FileInterface/RifThermalFractureReader.cpp +++ b/ApplicationLibCode/FileInterface/RifThermalFractureReader.cpp @@ -97,8 +97,15 @@ std::pair, QString> // Second is the timestamp QString dateString = values[1]; - QString dateFormat = "DD.MMMM.yy hh:mm:ss"; + QString dateFormat = "dd.MM.yyyy hh:mm:ss"; QDateTime dateTime = QDateTime::fromString( dateString, dateFormat ); + // Sometimes the datetime field is missing time + if ( !dateTime.isValid() ) + { + QString dateFormat = "dd.MM.yyyy"; + dateTime = QDateTime::fromString( dateString, dateFormat ); + } + def->addTimeStep( dateTime.toSecsSinceEpoch() ); // diff --git a/ApplicationLibCode/ProjectDataModel/Completions/RimMeshFractureTemplate.cpp b/ApplicationLibCode/ProjectDataModel/Completions/RimMeshFractureTemplate.cpp index fbaefc9a4c..0999df58b6 100644 --- a/ApplicationLibCode/ProjectDataModel/Completions/RimMeshFractureTemplate.cpp +++ b/ApplicationLibCode/ProjectDataModel/Completions/RimMeshFractureTemplate.cpp @@ -204,11 +204,11 @@ QList RimMeshFractureTemplate::calculateValueOptions( co } else if ( fieldNeedingOptions == &m_activeTimeStepIndex ) { - std::vector timeValues = timeSteps(); - int index = 0; - for ( double value : timeValues ) + std::vector timeValues = timeStepsStrings(); + int index = 0; + for ( QString value : timeValues ) { - options.push_back( caf::PdmOptionItemInfo( QString::number( value ), index ) ); + options.push_back( caf::PdmOptionItemInfo( value, index ) ); index++; } } diff --git a/ApplicationLibCode/ProjectDataModel/Completions/RimMeshFractureTemplate.h b/ApplicationLibCode/ProjectDataModel/Completions/RimMeshFractureTemplate.h index a9645f9447..c6bbc5566c 100644 --- a/ApplicationLibCode/ProjectDataModel/Completions/RimMeshFractureTemplate.h +++ b/ApplicationLibCode/ProjectDataModel/Completions/RimMeshFractureTemplate.h @@ -53,8 +53,9 @@ public: QString wellPathDepthAtFractureUiName() const override; // Result Access - virtual std::vector timeSteps() = 0; - virtual QStringList conductivityResultNames() const = 0; + virtual std::vector timeSteps() = 0; + virtual std::vector timeStepsStrings() = 0; + virtual QStringList conductivityResultNames() const = 0; virtual std::vector> resultValues( const QString& uiResultName, const QString& unitName, size_t timeStepIndex ) const = 0; virtual std::vector diff --git a/ApplicationLibCode/ProjectDataModel/Completions/RimStimPlanFractureTemplate.cpp b/ApplicationLibCode/ProjectDataModel/Completions/RimStimPlanFractureTemplate.cpp index 5388cae47c..888884f0ef 100644 --- a/ApplicationLibCode/ProjectDataModel/Completions/RimStimPlanFractureTemplate.cpp +++ b/ApplicationLibCode/ProjectDataModel/Completions/RimStimPlanFractureTemplate.cpp @@ -518,6 +518,21 @@ std::vector RimStimPlanFractureTemplate::timeSteps() return std::vector(); } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::vector RimStimPlanFractureTemplate::timeStepsStrings() +{ + std::vector steps; + std::vector timeStepsAsDouble = timeSteps(); + for ( auto d : timeStepsAsDouble ) + { + steps.push_back( QString::number( d ) ); + } + + return steps; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/Completions/RimStimPlanFractureTemplate.h b/ApplicationLibCode/ProjectDataModel/Completions/RimStimPlanFractureTemplate.h index 6208eff167..bc358163d5 100644 --- a/ApplicationLibCode/ProjectDataModel/Completions/RimStimPlanFractureTemplate.h +++ b/ApplicationLibCode/ProjectDataModel/Completions/RimStimPlanFractureTemplate.h @@ -67,7 +67,7 @@ public: double wellPathDepthAtFracture ) const override; // Result Access - + std::vector timeStepsStrings() override; std::vector timeSteps() override; std::vector> uiResultNamesWithUnit() const override; std::vector> diff --git a/ApplicationLibCode/ProjectDataModel/Completions/RimThermalFractureTemplate.cpp b/ApplicationLibCode/ProjectDataModel/Completions/RimThermalFractureTemplate.cpp index b992795c23..66463f6889 100644 --- a/ApplicationLibCode/ProjectDataModel/Completions/RimThermalFractureTemplate.cpp +++ b/ApplicationLibCode/ProjectDataModel/Completions/RimThermalFractureTemplate.cpp @@ -47,6 +47,7 @@ #include "cvfMath.h" #include "cvfVector3.h" +#include #include #include @@ -499,6 +500,23 @@ std::vector RimThermalFractureTemplate::timeSteps() return std::vector(); } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::vector RimThermalFractureTemplate::timeStepsStrings() +{ + std::vector steps; + std::vector timeStepsAsDouble = timeSteps(); + for ( auto d : timeStepsAsDouble ) + { + QDateTime dateTime; + dateTime.setSecsSinceEpoch( d ); + steps.push_back( dateTime.toString() ); + } + + return steps; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/Completions/RimThermalFractureTemplate.h b/ApplicationLibCode/ProjectDataModel/Completions/RimThermalFractureTemplate.h index 4a1a0e7c2f..f2d5fd46d4 100644 --- a/ApplicationLibCode/ProjectDataModel/Completions/RimThermalFractureTemplate.h +++ b/ApplicationLibCode/ProjectDataModel/Completions/RimThermalFractureTemplate.h @@ -56,7 +56,7 @@ public: double wellPathDepthAtFracture ) const override; // Result Access - + std::vector timeStepsStrings() override; std::vector timeSteps() override; std::vector> uiResultNamesWithUnit() const override; std::vector> From 74efaa43853ff3a1d0bf17bd3d940001063da5ca Mon Sep 17 00:00:00 2001 From: Kristian Bendiksen Date: Thu, 30 Jun 2022 15:29:42 +0200 Subject: [PATCH 012/129] #9098 Thermal Fracture: interpolate missing values inside convex hull of points. --- .../ReservoirDataModel/CMakeLists_files.cmake | 2 + .../ReservoirDataModel/RigConvexHull.cpp | 89 +++++++++++++++++++ .../ReservoirDataModel/RigConvexHull.h | 37 ++++++++ .../RigThermalFractureResultUtil.cpp | 84 +++++++++++------ .../RigThermalFractureResultUtil.h | 6 ++ .../UnitTests/CMakeLists_files.cmake | 1 + .../UnitTests/RigConvexHull-Test.cpp | 56 ++++++++++++ 7 files changed, 246 insertions(+), 29 deletions(-) create mode 100644 ApplicationLibCode/ReservoirDataModel/RigConvexHull.cpp create mode 100644 ApplicationLibCode/ReservoirDataModel/RigConvexHull.h create mode 100644 ApplicationLibCode/UnitTests/RigConvexHull-Test.cpp diff --git a/ApplicationLibCode/ReservoirDataModel/CMakeLists_files.cmake b/ApplicationLibCode/ReservoirDataModel/CMakeLists_files.cmake index f66ae9f408..d732b87996 100644 --- a/ApplicationLibCode/ReservoirDataModel/CMakeLists_files.cmake +++ b/ApplicationLibCode/ReservoirDataModel/CMakeLists_files.cmake @@ -64,6 +64,7 @@ set(SOURCE_GROUP_HEADER_FILES ${CMAKE_CURRENT_LIST_DIR}/RigThermalFractureResultUtil.h ${CMAKE_CURRENT_LIST_DIR}/RigFractureGrid.h ${CMAKE_CURRENT_LIST_DIR}/RigFractureCell.h + ${CMAKE_CURRENT_LIST_DIR}/RigConvexHull.h ${CMAKE_CURRENT_LIST_DIR}/RigWellResultPoint.h ${CMAKE_CURRENT_LIST_DIR}/RigWellPathGeometryTools.h ${CMAKE_CURRENT_LIST_DIR}/RigWellPathGeometryExporter.h @@ -155,6 +156,7 @@ set(SOURCE_GROUP_SOURCE_FILES ${CMAKE_CURRENT_LIST_DIR}/RigThermalFractureResultUtil.cpp ${CMAKE_CURRENT_LIST_DIR}/RigFractureGrid.cpp ${CMAKE_CURRENT_LIST_DIR}/RigFractureCell.cpp + ${CMAKE_CURRENT_LIST_DIR}/RigConvexHull.cpp ${CMAKE_CURRENT_LIST_DIR}/RigWellResultPoint.cpp ${CMAKE_CURRENT_LIST_DIR}/RigWellPathGeometryTools.cpp ${CMAKE_CURRENT_LIST_DIR}/RigWellPathGeometryExporter.cpp diff --git a/ApplicationLibCode/ReservoirDataModel/RigConvexHull.cpp b/ApplicationLibCode/ReservoirDataModel/RigConvexHull.cpp new file mode 100644 index 0000000000..88e21c7da2 --- /dev/null +++ b/ApplicationLibCode/ReservoirDataModel/RigConvexHull.cpp @@ -0,0 +1,89 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2022 - Equinor ASA +// +// ResInsight is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU General Public License at +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#include "RigConvexHull.h" + +#include + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::vector RigConvexHull::compute2d( const std::vector& points ) +{ + // Sort our points from left to right + std::vector sortedPoints = sortPoints( points ); + + // Find the lower half of the convex hull. + std::vector lower; + for ( auto it = sortedPoints.begin(); it != sortedPoints.end(); ++it ) + { + // Remove any points that does not make a convex angle with the current point + removePointsWithoutConvexAngle( lower, *it ); + lower.push_back( *it ); + } + + // Find the upper half of the convex hull. + std::vector upper; + for ( auto it = sortedPoints.rbegin(); it != sortedPoints.rend(); ++it ) + { + // Remove any points that does not make a convex angle with the current point + removePointsWithoutConvexAngle( upper, *it ); + upper.push_back( *it ); + } + + // Concatenation of the lower and upper hulls gives the convex hull. + // Last point of each list is omitted because it is repeated at the beginning of the other list. + std::vector hull; + hull.insert( hull.end(), lower.begin(), lower.end() - 1 ); + hull.insert( hull.end(), upper.begin(), upper.end() - 1 ); + return hull; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::vector RigConvexHull::sortPoints( const std::vector& unsorted ) +{ + // Returns true if a is left of b + auto isLeftOf = []( const cvf::Vec3d& a, const cvf::Vec3d& b ) { + return ( a.x() < b.x() || ( a.x() == b.x() && a.y() < b.y() ) ); + }; + + std::vector sorted = unsorted; + std::sort( sorted.begin(), sorted.end(), isLeftOf ); + return sorted; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RigConvexHull::removePointsWithoutConvexAngle( std::vector& points, const cvf::Vec3d& current ) +{ + // 2D cross product of (a, b) and (a, c) vectors, i.e. z-component of their 3D cross product. + // Returns a positive value, if c->(a,b) makes a counter-clockwise turn, + // negative for clockwise turn, and zero if the points are collinear. + auto counterClockWise = []( const cvf::Vec3d& a, const cvf::Vec3d& b, const cvf::Vec3d& c ) { + return ( b.x() - a.x() ) * ( c.y() - a.y() ) - ( b.y() - a.y() ) * ( c.x() - a.x() ); + }; + + // Remove all points that is not a counter-clockwise turn from current point + while ( points.size() >= 2 && counterClockWise( *( points.rbegin() + 1 ), *( points.rbegin() ), current ) >= 0 ) + { + points.pop_back(); + } +} diff --git a/ApplicationLibCode/ReservoirDataModel/RigConvexHull.h b/ApplicationLibCode/ReservoirDataModel/RigConvexHull.h new file mode 100644 index 0000000000..c3804b5733 --- /dev/null +++ b/ApplicationLibCode/ReservoirDataModel/RigConvexHull.h @@ -0,0 +1,37 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2022 - Equinor ASA +// +// ResInsight is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU General Public License at +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#pragma once + +#include "cvfVector3.h" + +#include + +//================================================================================================== +/// +/// +//================================================================================================== +class RigConvexHull +{ +public: + static std::vector compute2d( const std::vector& points ); + +private: + static std::vector sortPoints( const std::vector& unsorted ); + static void removePointsWithoutConvexAngle( std::vector& points, const cvf::Vec3d& current ); +}; diff --git a/ApplicationLibCode/ReservoirDataModel/RigThermalFractureResultUtil.cpp b/ApplicationLibCode/ReservoirDataModel/RigThermalFractureResultUtil.cpp index 3543fe2d41..87df13fa9d 100644 --- a/ApplicationLibCode/ReservoirDataModel/RigThermalFractureResultUtil.cpp +++ b/ApplicationLibCode/ReservoirDataModel/RigThermalFractureResultUtil.cpp @@ -20,7 +20,9 @@ #include "RiaLogging.h" +#include "RiaWeightedMeanCalculator.h" #include "RigCellGeometryTools.h" +#include "RigConvexHull.h" #include "RigFractureGrid.h" #include "RigStatisticsMath.h" #include "RigThermalFractureDefinition.h" @@ -87,40 +89,27 @@ std::vector> vec.push_back( junk ); } - // Loop through each polygon and check if point is inside. - for ( size_t nodeIndex = 0; nodeIndex < fractureDefinition->numNodes(); nodeIndex++ ) + // Find the boundary of the fracture (i.e. convex hull around the points) + std::vector fractureBoundary = RigConvexHull::compute2d( relativePos ); + fractureBoundary.push_back( fractureBoundary.front() ); + + for ( int i = 0; i < static_cast( xCoords.size() ) - 1; i++ ) { - bool placed = false; - - for ( int i = 0; i < static_cast( xCoords.size() ) - 1; i++ ) + for ( int j = 0; j < static_cast( depthCoords.size() ) - 1; j++ ) { - for ( int j = 0; j < static_cast( depthCoords.size() ) - 1; j++ ) + cvf::BoundingBox bb; + bb.add( cvf::Vec3d( xCoords[i], depthCoords[j], 0.0 ) ); + bb.add( cvf::Vec3d( xCoords[i + 1], depthCoords[j], 0.0 ) ); + bb.add( cvf::Vec3d( xCoords[i + 1], depthCoords[j + 1], 0.0 ) ); + bb.add( cvf::Vec3d( xCoords[i], depthCoords[j + 1], 0.0 ) ); + + if ( RigCellGeometryTools::pointInsidePolygon2D( bb.center(), fractureBoundary ) ) { - std::vector cellPolygon; - cellPolygon.push_back( cvf::Vec3d( xCoords[i], depthCoords[j], 0.0 ) ); - cellPolygon.push_back( cvf::Vec3d( xCoords[i + 1], depthCoords[j], 0.0 ) ); - cellPolygon.push_back( cvf::Vec3d( xCoords[i + 1], depthCoords[j + 1], 0.0 ) ); - cellPolygon.push_back( cvf::Vec3d( xCoords[i], depthCoords[j + 1], 0.0 ) ); - // First and last polygon must match - cellPolygon.push_back( cvf::Vec3d( xCoords[i], depthCoords[j], 0.0 ) ); - - if ( RigCellGeometryTools::pointInsidePolygon2D( relativePos[nodeIndex], cellPolygon ) ) - { - double value = fractureDefinition->getPropertyValue( propertyIndex, nodeIndex, timeStepIndex ); - vec[j][i] = value; - placed = true; - } + double value = + interpolateProperty( bb.center(), relativePos, fractureDefinition, propertyIndex, timeStepIndex ); + vec[j][i] = value; } } - - if ( !placed ) - { - RiaLogging::error( QString( "Unable to place point: %1 [%2 %3 %4]" ) - .arg( nodeIndex ) - .arg( relativePos[nodeIndex].x() ) - .arg( relativePos[nodeIndex].y() ) - .arg( relativePos[nodeIndex].z() ) ); - } } return vec; @@ -443,7 +432,44 @@ std::vector for ( auto& r : relativePos ) { r.transformVector( rotMat ); + r.z() = 0.0; } return relativePos; } + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +double RigThermalFractureResultUtil::interpolateProperty( const cvf::Vec3d& position, + const std::vector& points, + std::shared_ptr fractureDefinition, + int propertyIndex, + size_t timeStepIndex ) +{ + // Compute the distance to the other points + std::vector> distances; + + int index = 0; + for ( auto p : points ) + { + double distance = position.pointDistance( p ); + distances.push_back( std::make_pair( distance, index ) ); + index++; + } + + // Sort by distance + std::sort( distances.begin(), distances.end() ); + + // Create distance-weighthed mean of first few points + size_t numPoints = 3; + RiaWeightedMeanCalculator calc; + for ( size_t i = 0; i < numPoints; i++ ) + { + auto [distance, nodeIndex] = distances[i]; + double value = fractureDefinition->getPropertyValue( propertyIndex, nodeIndex, timeStepIndex ); + calc.addValueAndWeight( value, distance ); + } + + return calc.weightedMean(); +} diff --git a/ApplicationLibCode/ReservoirDataModel/RigThermalFractureResultUtil.h b/ApplicationLibCode/ReservoirDataModel/RigThermalFractureResultUtil.h index 7333fc6db7..cc71bf9ca5 100644 --- a/ApplicationLibCode/ReservoirDataModel/RigThermalFractureResultUtil.h +++ b/ApplicationLibCode/ReservoirDataModel/RigThermalFractureResultUtil.h @@ -94,4 +94,10 @@ private: static std::vector getRelativeCoordinates( std::shared_ptr fractureDefinition, size_t timeStepIndex ); + + static double interpolateProperty( const cvf::Vec3d& position, + const std::vector& points, + std::shared_ptr fractureDefinition, + int propertyIndex, + size_t timeStepIndex ); }; diff --git a/ApplicationLibCode/UnitTests/CMakeLists_files.cmake b/ApplicationLibCode/UnitTests/CMakeLists_files.cmake index b6cb8bb1b6..c08b76929a 100644 --- a/ApplicationLibCode/UnitTests/CMakeLists_files.cmake +++ b/ApplicationLibCode/UnitTests/CMakeLists_files.cmake @@ -77,6 +77,7 @@ set(SOURCE_GROUP_SOURCE_FILES ${CMAKE_CURRENT_LIST_DIR}/RifStimPlanModelDeviationFrkExporter-Test.cpp ${CMAKE_CURRENT_LIST_DIR}/RifSummaryDataReader-Test.cpp ${CMAKE_CURRENT_LIST_DIR}/RigSlice2D-Test.cpp + ${CMAKE_CURRENT_LIST_DIR}/RigConvexHull-Test.cpp ${CMAKE_CURRENT_LIST_DIR}/RigSurfaceResampler-Test.cpp ${CMAKE_CURRENT_LIST_DIR}/RigSurfaceStatisticsCalculator-Test.cpp ${CMAKE_CURRENT_LIST_DIR}/StructGridInterface-Test.cpp diff --git a/ApplicationLibCode/UnitTests/RigConvexHull-Test.cpp b/ApplicationLibCode/UnitTests/RigConvexHull-Test.cpp new file mode 100644 index 0000000000..f78989703f --- /dev/null +++ b/ApplicationLibCode/UnitTests/RigConvexHull-Test.cpp @@ -0,0 +1,56 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2022 Equinor ASA +// +// ResInsight is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU General Public License at +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#include "gtest/gtest.h" + +#include "RigConvexHull.h" + +#include "cvfVector3.h" + +#include + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +TEST( RigConvexHullTests, SimpleExample ) +{ + std::vector points = { cvf::Vec3d( 0.0, 0.0, 0.0 ), + cvf::Vec3d( 0.0, 1.0, 0.0 ), + cvf::Vec3d( 1.0, 1.0, 0.0 ), + cvf::Vec3d( 1.0, 0.0, 0.0 ), + cvf::Vec3d( 1.0, 1.0, 0.0 ), + cvf::Vec3d( 0.5, 0.5, 0.0 ), + cvf::Vec3d( 0.25, 0.25, 0.0 ), + cvf::Vec3d( 0.5, 1.25, 0.0 ), + cvf::Vec3d( 0.5, 0.75, 0.0 ) }; + + std::vector convexHull = RigConvexHull::compute2d( points ); + + std::vector expectedPoints = { cvf::Vec3d( 0, 0, 0 ), + cvf::Vec3d( 0, 1, 0 ), + cvf::Vec3d( 0.5, 1.25, 0 ), + cvf::Vec3d( 1, 1, 0 ), + cvf::Vec3d( 1, 0, 0 ) }; + + EXPECT_EQ( 5u, convexHull.size() ); + for ( size_t i = 0; i < convexHull.size(); i++ ) + { + EXPECT_EQ( expectedPoints[i].x(), convexHull[i].x() ); + EXPECT_EQ( expectedPoints[i].y(), convexHull[i].y() ); + } +} From 089a02f6ce1aeeccda66ca4f4cab680d5f25b9b5 Mon Sep 17 00:00:00 2001 From: Kristian Bendiksen Date: Thu, 30 Jun 2022 15:48:01 +0200 Subject: [PATCH 013/129] More tweaks to fix windows build --- .../RigThermalFractureResultUtil.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/ApplicationLibCode/ReservoirDataModel/RigThermalFractureResultUtil.cpp b/ApplicationLibCode/ReservoirDataModel/RigThermalFractureResultUtil.cpp index 87df13fa9d..d420013fd2 100644 --- a/ApplicationLibCode/ReservoirDataModel/RigThermalFractureResultUtil.cpp +++ b/ApplicationLibCode/ReservoirDataModel/RigThermalFractureResultUtil.cpp @@ -381,10 +381,10 @@ void RigThermalFractureResultUtil::appendDataToResultStatistics( std::shared_ptr { int propertyIndex = fractureDefinition->getPropertyIndex( resultName ); - size_t maxTs = fractureDefinition->timeSteps().size(); - for ( size_t ts = 0; ts < maxTs; ts++ ) + int maxTs = static_cast( fractureDefinition->timeSteps().size() ); + for ( int ts = 0; ts < maxTs; ts++ ) { - for ( size_t nodeIndex = 0; nodeIndex < fractureDefinition->numNodes(); nodeIndex++ ) + for ( int nodeIndex = 0; nodeIndex < static_cast( fractureDefinition->numNodes() ); nodeIndex++ ) { double value = fractureDefinition->getPropertyValue( propertyIndex, nodeIndex, ts ); minMaxAccumulator.addValue( value ); @@ -418,7 +418,7 @@ std::vector RigThermalFractureResultUtil::getRelativeCoordinates( std::shared_ptr fractureDefinition, size_t timeStepIndex ) { - std::vector relativePos = fractureDefinition->relativeCoordinates( timeStepIndex ); + std::vector relativePos = fractureDefinition->relativeCoordinates( static_cast( timeStepIndex ) ); CAF_ASSERT( relativePos.size() == fractureDefinition->numNodes() ); cvf::Plane plane; @@ -467,7 +467,7 @@ double RigThermalFractureResultUtil::interpolateProperty( const cvf::Vec3d& for ( size_t i = 0; i < numPoints; i++ ) { auto [distance, nodeIndex] = distances[i]; - double value = fractureDefinition->getPropertyValue( propertyIndex, nodeIndex, timeStepIndex ); + double value = fractureDefinition->getPropertyValue( propertyIndex, nodeIndex, static_cast( timeStepIndex ) ); calc.addValueAndWeight( value, distance ); } From 4e6e3ecd31f97a7a415de4f04723bcfdf16745f7 Mon Sep 17 00:00:00 2001 From: Kristian Bendiksen Date: Wed, 6 Jul 2022 10:42:35 +0200 Subject: [PATCH 014/129] #9099 Thermal Fracture Import: include perimter nodes. --- .../RifThermalFractureReader.cpp | 65 +++++++++++------ .../FileInterface/RifThermalFractureReader.h | 7 ++ .../ReservoirDataModel/CMakeLists_files.cmake | 2 + .../RigThermalFractureDefinition.cpp | 4 +- .../RigThermalFractureDefinition.h | 39 +--------- .../RigThermalFractureResult.cpp | 71 +++++++++++++++++++ .../RigThermalFractureResult.h | 51 +++++++++++++ .../RifThermalFractureReader-Test.cpp | 38 +++++++++- 8 files changed, 218 insertions(+), 59 deletions(-) create mode 100644 ApplicationLibCode/ReservoirDataModel/RigThermalFractureResult.cpp create mode 100644 ApplicationLibCode/ReservoirDataModel/RigThermalFractureResult.h diff --git a/ApplicationLibCode/FileInterface/RifThermalFractureReader.cpp b/ApplicationLibCode/FileInterface/RifThermalFractureReader.cpp index f4fa8ec9f7..54f0718112 100644 --- a/ApplicationLibCode/FileInterface/RifThermalFractureReader.cpp +++ b/ApplicationLibCode/FileInterface/RifThermalFractureReader.cpp @@ -44,12 +44,12 @@ std::pair, QString> QString separator = ","; - auto appendPropertyValues = [def]( int nodeIndex, int timeStepIndex, int valueOffset, const QStringList& values ) { + auto appendPropertyValues = [def]( int nodeIndex, int valueOffset, const QStringList& values ) { for ( int i = valueOffset; i < values.size() - 1; i++ ) { double value = values[i].toDouble(); int propertyIndex = i - valueOffset; - def->appendPropertyValue( propertyIndex, nodeIndex, timeStepIndex, value ); + def->appendPropertyValue( propertyIndex, nodeIndex, value ); } }; @@ -60,8 +60,8 @@ std::pair, QString> // The two items in the csv is name and timestep const int valueOffset = 2; int nodeIndex = 0; - int timeStepIndex = 0; bool isFirstHeader = true; + bool isValidNode = false; while ( !in.atEnd() ) { QString line = in.readLine(); @@ -84,10 +84,9 @@ std::pair, QString> isFirstHeader = false; } - else + else if ( isValidNode ) { nodeIndex++; - timeStepIndex = 0; } } else if ( isCenterNodeLine( line ) ) @@ -96,27 +95,22 @@ std::pair, QString> auto values = RifFileParseTools::splitLineAndTrim( line, separator ); // Second is the timestamp - QString dateString = values[1]; - QString dateFormat = "dd.MM.yyyy hh:mm:ss"; - QDateTime dateTime = QDateTime::fromString( dateString, dateFormat ); - // Sometimes the datetime field is missing time - if ( !dateTime.isValid() ) - { - QString dateFormat = "dd.MM.yyyy"; - dateTime = QDateTime::fromString( dateString, dateFormat ); - } - + QDateTime dateTime = parseDateTime( values[1] ); def->addTimeStep( dateTime.toSecsSinceEpoch() ); // - appendPropertyValues( nodeIndex, timeStepIndex, valueOffset, values ); - timeStepIndex = 0; + appendPropertyValues( nodeIndex, valueOffset, values ); + isValidNode = true; } - else if ( isInternalNodeLine( line ) ) + else if ( isInternalNodeLine( line ) || isPerimeterNodeLine( line ) ) { auto values = RifFileParseTools::splitLineAndTrim( line, separator ); - appendPropertyValues( nodeIndex, timeStepIndex, valueOffset, values ); - timeStepIndex = 0; + appendPropertyValues( nodeIndex, valueOffset, values ); + isValidNode = true; + } + else + { + isValidNode = false; } lineNumber++; @@ -125,6 +119,23 @@ std::pair, QString> return std::make_pair( def, "" ); } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QDateTime RifThermalFractureReader::parseDateTime( const QString& dateString ) +{ + QString dateFormat = "dd.MM.yyyy hh:mm:ss"; + QDateTime dateTime = QDateTime::fromString( dateString, dateFormat ); + // Sometimes the datetime field is missing time + if ( !dateTime.isValid() ) + { + QString dateFormat = "dd.MM.yyyy"; + dateTime = QDateTime::fromString( dateString, dateFormat ); + } + + return dateTime; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -149,6 +160,20 @@ bool RifThermalFractureReader::isInternalNodeLine( const QString& line ) return line.contains( "Internal Node" ); } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +bool RifThermalFractureReader::isPerimeterNodeLine( const QString& line ) +{ + std::vector validPerimeterNames = { "Perimeter Node", "Bottom Node", "Top Node", "Right Node", "Left Node" }; + + bool result = std::any_of( validPerimeterNames.begin(), validPerimeterNames.end(), [line]( const QString& str ) { + return line.contains( str ); + } ); + + return result; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/FileInterface/RifThermalFractureReader.h b/ApplicationLibCode/FileInterface/RifThermalFractureReader.h index ed72b859aa..37b9a58bab 100644 --- a/ApplicationLibCode/FileInterface/RifThermalFractureReader.h +++ b/ApplicationLibCode/FileInterface/RifThermalFractureReader.h @@ -18,12 +18,16 @@ #pragma once +#include #include #include class RigThermalFractureDefinition; +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- class RifThermalFractureReader { public: @@ -33,6 +37,9 @@ private: static bool isHeaderLine( const QString& line ); static bool isCenterNodeLine( const QString& line ); static bool isInternalNodeLine( const QString& line ); + static bool isPerimeterNodeLine( const QString& line ); + + static QDateTime parseDateTime( const QString& dateString ); static std::pair parseNameAndUnit( const QString& value ); }; diff --git a/ApplicationLibCode/ReservoirDataModel/CMakeLists_files.cmake b/ApplicationLibCode/ReservoirDataModel/CMakeLists_files.cmake index d732b87996..6094b83499 100644 --- a/ApplicationLibCode/ReservoirDataModel/CMakeLists_files.cmake +++ b/ApplicationLibCode/ReservoirDataModel/CMakeLists_files.cmake @@ -62,6 +62,7 @@ set(SOURCE_GROUP_HEADER_FILES ${CMAKE_CURRENT_LIST_DIR}/RigStimPlanFractureDefinition.h ${CMAKE_CURRENT_LIST_DIR}/RigThermalFractureDefinition.h ${CMAKE_CURRENT_LIST_DIR}/RigThermalFractureResultUtil.h + ${CMAKE_CURRENT_LIST_DIR}/RigThermalFractureResult.h ${CMAKE_CURRENT_LIST_DIR}/RigFractureGrid.h ${CMAKE_CURRENT_LIST_DIR}/RigFractureCell.h ${CMAKE_CURRENT_LIST_DIR}/RigConvexHull.h @@ -154,6 +155,7 @@ set(SOURCE_GROUP_SOURCE_FILES ${CMAKE_CURRENT_LIST_DIR}/RigStimPlanFractureDefinition.cpp ${CMAKE_CURRENT_LIST_DIR}/RigThermalFractureDefinition.cpp ${CMAKE_CURRENT_LIST_DIR}/RigThermalFractureResultUtil.cpp + ${CMAKE_CURRENT_LIST_DIR}/RigThermalFractureResult.cpp ${CMAKE_CURRENT_LIST_DIR}/RigFractureGrid.cpp ${CMAKE_CURRENT_LIST_DIR}/RigFractureCell.cpp ${CMAKE_CURRENT_LIST_DIR}/RigConvexHull.cpp diff --git a/ApplicationLibCode/ReservoirDataModel/RigThermalFractureDefinition.cpp b/ApplicationLibCode/ReservoirDataModel/RigThermalFractureDefinition.cpp index 676fe59580..c2896480c6 100644 --- a/ApplicationLibCode/ReservoirDataModel/RigThermalFractureDefinition.cpp +++ b/ApplicationLibCode/ReservoirDataModel/RigThermalFractureDefinition.cpp @@ -110,12 +110,12 @@ std::vector> RigThermalFractureDefinition::getProper //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RigThermalFractureDefinition::appendPropertyValue( int propertyIndex, int nodeIndex, int timeStepIndex, double value ) +void RigThermalFractureDefinition::appendPropertyValue( int propertyIndex, int nodeIndex, double value ) { CAF_ASSERT( propertyIndex >= 0 ); CAF_ASSERT( propertyIndex < static_cast( m_results.size() ) ); - m_results[propertyIndex].appendValue( nodeIndex, timeStepIndex, value ); + m_results[propertyIndex].appendValue( nodeIndex, value ); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ReservoirDataModel/RigThermalFractureDefinition.h b/ApplicationLibCode/ReservoirDataModel/RigThermalFractureDefinition.h index 106fda121f..baec2f9b9a 100644 --- a/ApplicationLibCode/ReservoirDataModel/RigThermalFractureDefinition.h +++ b/ApplicationLibCode/ReservoirDataModel/RigThermalFractureDefinition.h @@ -20,47 +20,14 @@ #include "RiaDefines.h" +#include "RigThermalFractureResult.h" + #include "cvfVector3.h" #include #include -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -class RigThermalFractureResult -{ -public: - RigThermalFractureResult( const QString& name, const QString& unit ) - : m_name( name ) - , m_unit( unit ) - { - } - - QString name() const { return m_name; } - QString unit() const { return m_unit; } - - void appendValue( int nodeIndex, int timeStepIndex, double value ) - { - if ( nodeIndex >= static_cast( parameterValues.size() ) ) - parameterValues.push_back( { value } ); - else - parameterValues[nodeIndex].push_back( value ); - } - - double getValue( int nodeIndex, int timeStepIndex ) const { return parameterValues[nodeIndex][timeStepIndex]; } - - size_t numNodes() const { return parameterValues.size(); } - -private: - QString m_name; - QString m_unit; - - // Vector for each time step for each node - std::vector> parameterValues; -}; - //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -83,7 +50,7 @@ public: std::vector> getPropertyNamesUnits() const; - void appendPropertyValue( int propertyIndex, int nodeIndex, int timeStepIndex, double value ); + void appendPropertyValue( int propertyIndex, int nodeIndex, double value ); double getPropertyValue( int propertyIndex, int nodeIndex, int timeStepIndex ) const; diff --git a/ApplicationLibCode/ReservoirDataModel/RigThermalFractureResult.cpp b/ApplicationLibCode/ReservoirDataModel/RigThermalFractureResult.cpp new file mode 100644 index 0000000000..8fcfb661ce --- /dev/null +++ b/ApplicationLibCode/ReservoirDataModel/RigThermalFractureResult.cpp @@ -0,0 +1,71 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2022 - Equinor ASA +// +// ResInsight is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU General Public License at +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#include "RigThermalFractureResult.h" + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RigThermalFractureResult::RigThermalFractureResult( const QString& name, const QString& unit ) + : m_name( name ) + , m_unit( unit ) +{ +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QString RigThermalFractureResult::name() const +{ + return m_name; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QString RigThermalFractureResult::unit() const +{ + return m_unit; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RigThermalFractureResult::appendValue( int nodeIndex, double value ) +{ + if ( nodeIndex >= static_cast( m_parameterValues.size() ) ) + m_parameterValues.push_back( { value } ); + else + m_parameterValues[nodeIndex].push_back( value ); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +double RigThermalFractureResult::getValue( int nodeIndex, int timeStepIndex ) const +{ + return m_parameterValues[nodeIndex][timeStepIndex]; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +size_t RigThermalFractureResult::numNodes() const +{ + return m_parameterValues.size(); +} diff --git a/ApplicationLibCode/ReservoirDataModel/RigThermalFractureResult.h b/ApplicationLibCode/ReservoirDataModel/RigThermalFractureResult.h new file mode 100644 index 0000000000..d6a6e776c5 --- /dev/null +++ b/ApplicationLibCode/ReservoirDataModel/RigThermalFractureResult.h @@ -0,0 +1,51 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2022 - Equinor ASA +// +// ResInsight is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU General Public License at +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#pragma once + +#include "RiaDefines.h" + +#include "cvfVector3.h" + +#include + +#include + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +class RigThermalFractureResult +{ +public: + RigThermalFractureResult( const QString& name, const QString& unit ); + + QString name() const; + QString unit() const; + + void appendValue( int nodeIndex, double value ); + double getValue( int nodeIndex, int timeStepIndex ) const; + + size_t numNodes() const; + +private: + QString m_name; + QString m_unit; + + // Vector for each time step for each node + std::vector> m_parameterValues; +}; diff --git a/ApplicationLibCode/UnitTests/RifThermalFractureReader-Test.cpp b/ApplicationLibCode/UnitTests/RifThermalFractureReader-Test.cpp index 31c23ea9f8..6dfe0debe3 100644 --- a/ApplicationLibCode/UnitTests/RifThermalFractureReader-Test.cpp +++ b/ApplicationLibCode/UnitTests/RifThermalFractureReader-Test.cpp @@ -21,7 +21,7 @@ TEST( RifThermalFractureReaderTest, LoadFile ) EXPECT_EQ( "frac01", fractureData->name().toStdString() ); - EXPECT_EQ( fractureData->numNodes(), 57u ); + EXPECT_EQ( fractureData->numNodes(), 81u ); EXPECT_EQ( fractureData->numTimeSteps(), 29u ); @@ -42,4 +42,40 @@ TEST( RifThermalFractureReaderTest, LoadFile ) EXPECT_DOUBLE_EQ( centerNodeY, fractureData->getPropertyValue( 1, nodeIndex, static_cast( timeStepIndex ) ) ); EXPECT_DOUBLE_EQ( centerNodeZ, fractureData->getPropertyValue( 2, nodeIndex, static_cast( timeStepIndex ) ) ); } + + { + // Sample from center node: LeakoffPressureDrop from last time step + double expectedValue = 18.8747; + int propertyIndex = 18; + int nodeIndex = 0; + int timeStepIndex = 28; + EXPECT_DOUBLE_EQ( expectedValue, fractureData->getPropertyValue( propertyIndex, nodeIndex, timeStepIndex ) ); + } + + { + // Sample from internal node: EffectiveFracStress from tenth time step + double expectedValue = 7.72785; + int propertyIndex = 17; + int nodeIndex = 2; + int timeStepIndex = 10; + EXPECT_DOUBLE_EQ( expectedValue, fractureData->getPropertyValue( propertyIndex, nodeIndex, timeStepIndex ) ); + } + + { + // Sample from bottom node: EffectiveResStress from fifth time step + double expectedValue = 28.5565; + int propertyIndex = 16; + int nodeIndex = 57; + int timeStepIndex = 6; + EXPECT_DOUBLE_EQ( expectedValue, fractureData->getPropertyValue( propertyIndex, nodeIndex, timeStepIndex ) ); + } + + { + // Sample from perimeter node: ResTemperature from eight time step + double expectedValue = 10.3882; + int propertyIndex = 13; + int nodeIndex = 58; + int timeStepIndex = 7; + EXPECT_DOUBLE_EQ( expectedValue, fractureData->getPropertyValue( propertyIndex, nodeIndex, timeStepIndex ) ); + } } From 72590d05656500f2c4736c332275ed1c0cc9744e Mon Sep 17 00:00:00 2001 From: Kristian Bendiksen Date: Wed, 6 Jul 2022 12:23:09 +0200 Subject: [PATCH 015/129] Thermal Fracture: load and update on project reload. --- .../Completions/RimFractureTemplateCollection.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ApplicationLibCode/ProjectDataModel/Completions/RimFractureTemplateCollection.cpp b/ApplicationLibCode/ProjectDataModel/Completions/RimFractureTemplateCollection.cpp index ab2084eea7..4854c69c94 100644 --- a/ApplicationLibCode/ProjectDataModel/Completions/RimFractureTemplateCollection.cpp +++ b/ApplicationLibCode/ProjectDataModel/Completions/RimFractureTemplateCollection.cpp @@ -28,8 +28,8 @@ #include "RimEllipseFractureTemplate.h" #include "RimFracture.h" #include "RimFractureTemplate.h" +#include "RimMeshFractureTemplate.h" #include "RimProject.h" -#include "RimStimPlanFractureTemplate.h" #include "cafPdmObject.h" #include "cafPdmObjectScriptingCapability.h" @@ -272,7 +272,7 @@ void RimFractureTemplateCollection::loadAndUpdateData() { for ( RimFractureTemplate* f : m_fractureDefinitions() ) { - RimStimPlanFractureTemplate* stimPlanFracture = dynamic_cast( f ); + RimMeshFractureTemplate* stimPlanFracture = dynamic_cast( f ); if ( stimPlanFracture ) { stimPlanFracture->loadDataAndUpdate(); From a0f87e2ae92da5fb79e0672169e811f508bba250 Mon Sep 17 00:00:00 2001 From: Kristian Bendiksen Date: Wed, 6 Jul 2022 12:56:41 +0200 Subject: [PATCH 016/129] Thermal Fracture: show mesh options for thermal fractures. --- .../ProjectDataModel/RimStimPlanColors.cpp | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/ApplicationLibCode/ProjectDataModel/RimStimPlanColors.cpp b/ApplicationLibCode/ProjectDataModel/RimStimPlanColors.cpp index df1592856a..956895a0de 100644 --- a/ApplicationLibCode/ProjectDataModel/RimStimPlanColors.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimStimPlanColors.cpp @@ -398,23 +398,23 @@ void RimStimPlanColors::defineUiOrdering( QString uiConfigName, caf::PdmUiOrderi colorGroup->add( &m_resultNameAndUnit ); colorGroup->add( &m_defaultColor ); - bool stimPlanExists = false; - std::vector fracTemplates = RimProject::current()->allFractureTemplates(); - - for ( auto fractemplate : fracTemplates ) - { - if ( dynamic_cast( fractemplate ) ) + auto hasMeshTemplate = []() { + std::vector fracTemplates = RimProject::current()->allFractureTemplates(); + for ( auto fractemplate : fracTemplates ) { - stimPlanExists = true; - break; + if ( dynamic_cast( fractemplate ) ) + { + return true; + } } - } + return false; + }; - if ( stimPlanExists ) + if ( hasMeshTemplate() ) { - caf::PdmUiGroup* stimPlanGroup = uiOrdering.addNewGroup( "StimPlan" ); - stimPlanGroup->add( &m_showStimPlanMesh ); - stimPlanGroup->add( &m_stimPlanCellVizMode ); + caf::PdmUiGroup* meshGroup = uiOrdering.addNewGroup( "Mesh" ); + meshGroup->add( &m_showStimPlanMesh ); + meshGroup->add( &m_stimPlanCellVizMode ); } uiOrdering.skipRemainingFields( true ); From b064599e283e0f2bf4745f1b2b191c1a44e9ae24 Mon Sep 17 00:00:00 2001 From: Kristian Bendiksen Date: Wed, 6 Jul 2022 12:57:12 +0200 Subject: [PATCH 017/129] Thermal Fracture: fix crash for none-existing results. --- .../ReservoirDataModel/RigThermalFractureResultUtil.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/ApplicationLibCode/ReservoirDataModel/RigThermalFractureResultUtil.cpp b/ApplicationLibCode/ReservoirDataModel/RigThermalFractureResultUtil.cpp index d420013fd2..e4c4ae303f 100644 --- a/ApplicationLibCode/ReservoirDataModel/RigThermalFractureResultUtil.cpp +++ b/ApplicationLibCode/ReservoirDataModel/RigThermalFractureResultUtil.cpp @@ -58,7 +58,10 @@ std::vector> const QString& unitName, size_t timeStepIndex ) { + std::vector> vec; + int propertyIndex = fractureDefinition->getPropertyIndex( resultName ); + if ( propertyIndex < 0 ) return vec; std::vector relativePos = getRelativeCoordinates( fractureDefinition, timeStepIndex ); @@ -80,8 +83,6 @@ std::vector> for ( int i = 0; i < static_cast( yCoordsAtNodes.size() ) - 1; i++ ) depthCoords.push_back( ( yCoordsAtNodes[i] + yCoordsAtNodes[i + 1] ) / 2 ); - std::vector> vec; - // Fill with invalid value for ( int i = 0; i < numSamplesY; i++ ) { @@ -380,6 +381,7 @@ void RigThermalFractureResultUtil::appendDataToResultStatistics( std::shared_ptr PosNegAccumulator& posNegAccumulator ) { int propertyIndex = fractureDefinition->getPropertyIndex( resultName ); + if ( propertyIndex < 0 ) return; int maxTs = static_cast( fractureDefinition->timeSteps().size() ); for ( int ts = 0; ts < maxTs; ts++ ) From a3a71d63791d940932940aa0f902b0c4fc06709a Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Thu, 7 Jul 2022 09:06:54 +0200 Subject: [PATCH 018/129] Update actions to latest and remove artifact upload for Linux Artifact upload failed for Linux -> remove as these are not used --- .github/workflows/ResInsightWithCache.yml | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/.github/workflows/ResInsightWithCache.yml b/.github/workflows/ResInsightWithCache.yml index 6c7baa128e..6f0714d7be 100644 --- a/.github/workflows/ResInsightWithCache.yml +++ b/.github/workflows/ResInsightWithCache.yml @@ -67,7 +67,6 @@ jobs: uses: lukka/get-cmake@latest - name: Use MSVC (Windows) - if: matrix.config.os == 'windows-latest' uses: ilammy/msvc-dev-cmd@v1 - name: Download buildcache @@ -101,7 +100,7 @@ jobs: message("::set-output name=timestamp::${current_date}") - name: Cache Buildcache id: cache-buildcache - uses: actions/cache@v2 + uses: actions/cache@v3 with: path: ${{ env.BUILDCACHE_DIR }} key: ${{ matrix.config.os }}-${{ matrix.config.cc }}-cache-v02-${{ steps.cache_timestamp_string.outputs.timestamp }} @@ -114,7 +113,7 @@ jobs: - name: Cache Qt id: cache-qt - uses: actions/cache@v2 + uses: actions/cache@v3 with: path: ${{ github.workspace }}/Qt/ key: ${{ matrix.config.os }}-QtCache-5-12-12 @@ -152,7 +151,7 @@ jobs: - name: Cache dynamic version of OpenSSL (Linux) if: "contains( matrix.config.os, 'ubuntu_disabled')" - uses: actions/cache@v2 + uses: actions/cache@v3 with: path: ${{ github.workspace }}/ThirdParty/vcpkg/installed/x64-linux-dynamic key: ${{ matrix.config.os }}-vcpkg-x64-linux-dynamic_v05 @@ -216,8 +215,8 @@ jobs: ${{ steps.python-path.outputs.PYTHON_EXECUTABLE }} -m pytest --console - name: Upload artifact - uses: actions/upload-artifact@v2 - if: "matrix.config.name != 'Ubuntu Latest clang'" + if: matrix.config.os == 'windows-latest' + uses: actions/upload-artifact@v3 with: name: ResInsight-${{ matrix.config.name }} path: ${{ runner.workspace }}/ResInsight/cmakebuild/install From 09f9269cfaf52a7f7d4e03185d16a1aa3559e72b Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Thu, 7 Jul 2022 10:01:03 +0200 Subject: [PATCH 019/129] Unity build requires global unique variable names --- .../RifCaseRealizationParametersReader-Test.cpp | 10 +++++----- .../UnitTests/RifStimPlanXmlReader-Test.cpp | 8 ++++---- .../UnitTests/RifThermalFractureReader-Test.cpp | 4 ++-- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/ApplicationLibCode/UnitTests/RifCaseRealizationParametersReader-Test.cpp b/ApplicationLibCode/UnitTests/RifCaseRealizationParametersReader-Test.cpp index 57715c9501..9a89f87fbb 100644 --- a/ApplicationLibCode/UnitTests/RifCaseRealizationParametersReader-Test.cpp +++ b/ApplicationLibCode/UnitTests/RifCaseRealizationParametersReader-Test.cpp @@ -8,7 +8,7 @@ #include #include -static const QString CASE_REAL_TEST_DATA_DIRECTORY = +static const QString CASE_REAL_TEST_DATA_DIRECTORY_01 = QString( "%1/RifCaseRealizationParametersReader/" ).arg( TEST_DATA_DIR ); //-------------------------------------------------------------------------------------------------- @@ -16,8 +16,8 @@ static const QString CASE_REAL_TEST_DATA_DIRECTORY = //-------------------------------------------------------------------------------------------------- TEST( RifCaseRealizationParametersReaderTest, LocatorTestSuccess ) { - QString file = RifCaseRealizationParametersFileLocator::locate( CASE_REAL_TEST_DATA_DIRECTORY + "4/3/2" ); - QString expected = CASE_REAL_TEST_DATA_DIRECTORY + "parameters.txt"; + QString file = RifCaseRealizationParametersFileLocator::locate( CASE_REAL_TEST_DATA_DIRECTORY_01 + "4/3/2" ); + QString expected = CASE_REAL_TEST_DATA_DIRECTORY_01 + "parameters.txt"; EXPECT_EQ( expected.toStdString(), file.toStdString() ); } @@ -26,7 +26,7 @@ TEST( RifCaseRealizationParametersReaderTest, LocatorTestSuccess ) //-------------------------------------------------------------------------------------------------- TEST( RifCaseRealizationParametersReaderTest, LocatorTestFailure ) { - QString file = RifCaseRealizationParametersFileLocator::locate( CASE_REAL_TEST_DATA_DIRECTORY + "4/3/2/1" ); + QString file = RifCaseRealizationParametersFileLocator::locate( CASE_REAL_TEST_DATA_DIRECTORY_01 + "4/3/2/1" ); QString expected = ""; EXPECT_EQ( expected.toStdString(), file.toStdString() ); } @@ -36,7 +36,7 @@ TEST( RifCaseRealizationParametersReaderTest, LocatorTestFailure ) //-------------------------------------------------------------------------------------------------- TEST( RifCaseRealizationParametersReaderTest, SuccessfulParsing ) { - RifCaseRealizationParametersReader reader( CASE_REAL_TEST_DATA_DIRECTORY + "parameters.txt" ); + RifCaseRealizationParametersReader reader( CASE_REAL_TEST_DATA_DIRECTORY_01 + "parameters.txt" ); try { diff --git a/ApplicationLibCode/UnitTests/RifStimPlanXmlReader-Test.cpp b/ApplicationLibCode/UnitTests/RifStimPlanXmlReader-Test.cpp index 4a91e3f5f0..e5a26064cc 100644 --- a/ApplicationLibCode/UnitTests/RifStimPlanXmlReader-Test.cpp +++ b/ApplicationLibCode/UnitTests/RifStimPlanXmlReader-Test.cpp @@ -5,14 +5,14 @@ #include "RifStimPlanXmlReader.h" #include "RigStimPlanFractureDefinition.h" -static const QString CASE_REAL_TEST_DATA_DIRECTORY = QString( "%1/RifStimPlanXmlReader/" ).arg( TEST_DATA_DIR ); +static const QString CASE_REAL_TEST_DATA_DIRECTORY_02 = QString( "%1/RifStimPlanXmlReader/" ).arg( TEST_DATA_DIR ); //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- TEST( RifStimPlanXmlReaderTest, LoadFile ) { - QString fileName = CASE_REAL_TEST_DATA_DIRECTORY + "small_fracture.xml"; + QString fileName = CASE_REAL_TEST_DATA_DIRECTORY_02 + "small_fracture.xml"; double conductivityScaleFactor = 1.0; RiaDefines::EclipseUnitSystem unit = RiaDefines::EclipseUnitSystem::UNITS_METRIC; @@ -38,7 +38,7 @@ TEST( RifStimPlanXmlReaderTest, LoadFile ) //-------------------------------------------------------------------------------------------------- TEST( RifStimPlanXmlReaderTest, LoadFileNewFormat ) { - QString fileName = CASE_REAL_TEST_DATA_DIRECTORY + "contour_Metric.xml"; + QString fileName = CASE_REAL_TEST_DATA_DIRECTORY_02 + "contour_Metric.xml"; double conductivityScaleFactor = 1.0; RiaDefines::EclipseUnitSystem unit = RiaDefines::EclipseUnitSystem::UNITS_METRIC; @@ -69,7 +69,7 @@ TEST( RifStimPlanXmlReaderTest, LoadFileNewFormat ) //-------------------------------------------------------------------------------------------------- TEST( RifStimPlanXmlReaderTest, LoadFileNewFormatExtraParameters ) { - QString fileName = CASE_REAL_TEST_DATA_DIRECTORY + "contour_with_extra_parameters.xml"; + QString fileName = CASE_REAL_TEST_DATA_DIRECTORY_02 + "contour_with_extra_parameters.xml"; double conductivityScaleFactor = 1.0; RiaDefines::EclipseUnitSystem unit = RiaDefines::EclipseUnitSystem::UNITS_METRIC; diff --git a/ApplicationLibCode/UnitTests/RifThermalFractureReader-Test.cpp b/ApplicationLibCode/UnitTests/RifThermalFractureReader-Test.cpp index 6dfe0debe3..c06fe988bd 100644 --- a/ApplicationLibCode/UnitTests/RifThermalFractureReader-Test.cpp +++ b/ApplicationLibCode/UnitTests/RifThermalFractureReader-Test.cpp @@ -5,14 +5,14 @@ #include "RifThermalFractureReader.h" #include "RigThermalFractureDefinition.h" -static const QString CASE_REAL_TEST_DATA_DIRECTORY = QString( "%1/RifThermalFractureReader/" ).arg( TEST_DATA_DIR ); +static const QString CASE_REAL_TEST_DATA_DIRECTORY_03 = QString( "%1/RifThermalFractureReader/" ).arg( TEST_DATA_DIR ); //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- TEST( RifThermalFractureReaderTest, LoadFile ) { - QString fileName = CASE_REAL_TEST_DATA_DIRECTORY + "fracture_metric.csv"; + QString fileName = CASE_REAL_TEST_DATA_DIRECTORY_03 + "fracture_metric.csv"; auto [fractureData, errorMessage] = RifThermalFractureReader::readFractureCsvFile( fileName ); From 66896f8330768f27475f54615bec5ad67ad376f0 Mon Sep 17 00:00:00 2001 From: jonjenssen <69144954+jonjenssen@users.noreply.github.com> Date: Thu, 7 Jul 2022 12:03:02 +0200 Subject: [PATCH 020/129] New dockingsystem (#9116) * Use Qt Advanced Docking as forked submodule * Use new docking system in code --- .gitmodules | 2 +- ApplicationExeCode/CMakeLists.txt | 4 + .../Application/RiaGuiApplication.cpp | 1 - ApplicationLibCode/Commands/CMakeLists.txt | 4 +- .../ProjectDataModel/RimMainPlotCollection.h | 1 - .../Summary/RimSummaryPlotManager.h | 2 +- .../UserInterface/RiuDockWidgetTools.cpp | 61 ++--- .../UserInterface/RiuDockWidgetTools.h | 19 +- .../UserInterface/RiuMainWindow.cpp | 236 ++++++------------ .../UserInterface/RiuMainWindow.h | 10 +- .../UserInterface/RiuMainWindowBase.cpp | 169 ++++++++++++- .../UserInterface/RiuMainWindowBase.h | 25 +- .../UserInterface/RiuMessagePanel.cpp | 11 +- .../UserInterface/RiuMessagePanel.h | 3 +- .../UserInterface/RiuPlotMainWindow.cpp | 149 +++++------ .../UserInterface/RiuPlotMainWindow.h | 4 +- .../UserInterface/RiuProcessMonitor.cpp | 2 +- .../UserInterface/RiuProcessMonitor.h | 3 +- .../UserInterface/RiuPvtPlotPanel.cpp | 4 +- .../UserInterface/RiuPvtPlotPanel.h | 3 +- .../RiuRelativePermeabilityPlotPanel.cpp | 3 +- .../RiuRelativePermeabilityPlotPanel.h | 3 +- .../UserInterface/RiuResultInfoPanel.cpp | 4 +- .../UserInterface/RiuResultInfoPanel.h | 3 +- CMakeLists.txt | 28 +-- ThirdParty/qtadvanceddocking | 2 +- 26 files changed, 408 insertions(+), 348 deletions(-) diff --git a/.gitmodules b/.gitmodules index c212beaf20..7b2b5f8413 100644 --- a/.gitmodules +++ b/.gitmodules @@ -9,4 +9,4 @@ url = https://github.com/fastfloat/fast_float [submodule "ThirdParty/qtadvanceddocking"] path = ThirdParty/qtadvanceddocking - url = https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System.git + url = https://github.com/CeetronSolutions/qtadvanceddocking.git diff --git a/ApplicationExeCode/CMakeLists.txt b/ApplicationExeCode/CMakeLists.txt index 443e6c5b40..6212817d17 100644 --- a/ApplicationExeCode/CMakeLists.txt +++ b/ApplicationExeCode/CMakeLists.txt @@ -287,6 +287,10 @@ endif() target_link_libraries(ResInsight ${LINK_LIBRARIES}) +if(UNIX AND NOT APPLE) + target_link_libraries(ResInsight xcb) +endif() + # ############################################################################## # Unity builds # ############################################################################## diff --git a/ApplicationLibCode/Application/RiaGuiApplication.cpp b/ApplicationLibCode/Application/RiaGuiApplication.cpp index 86d1d0f1a7..6fefcf5d8c 100644 --- a/ApplicationLibCode/Application/RiaGuiApplication.cpp +++ b/ApplicationLibCode/Application/RiaGuiApplication.cpp @@ -989,7 +989,6 @@ void RiaGuiApplication::createMainPlotWindow() m_mainPlotWindow->setWindowTitle( "Plots - ResInsight" ); m_mainPlotWindow->setDefaultWindowSize(); m_mainPlotWindow->loadWinGeoAndDockToolBarLayout(); - m_mainPlotWindow->hideAllDockWidgets(); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/Commands/CMakeLists.txt b/ApplicationLibCode/Commands/CMakeLists.txt index 238341ac98..7297fa3543 100644 --- a/ApplicationLibCode/Commands/CMakeLists.txt +++ b/ApplicationLibCode/Commands/CMakeLists.txt @@ -62,9 +62,11 @@ add_library( target_include_directories( ${PROJECT_NAME} - PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/ThirdParty + PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_SOURCE_DIR}/ThirdParty ${CMAKE_SOURCE_DIR}/ThirdParty/custom-opm-common/generated-opm-common ${CMAKE_SOURCE_DIR}/ThirdParty/custom-opm-common/opm-common + ${CMAKE_SOURCE_DIR}/ThirdParty/qtadvanceddocking/src ) if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") diff --git a/ApplicationLibCode/ProjectDataModel/RimMainPlotCollection.h b/ApplicationLibCode/ProjectDataModel/RimMainPlotCollection.h index 9114c8da08..0dd87c344c 100644 --- a/ApplicationLibCode/ProjectDataModel/RimMainPlotCollection.h +++ b/ApplicationLibCode/ProjectDataModel/RimMainPlotCollection.h @@ -23,7 +23,6 @@ #include "cafPdmField.h" #include "cafPdmObject.h" -#include #include class RimAnalysisPlotCollection; diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlotManager.h b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlotManager.h index 913f3d7dda..83b0bd4488 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlotManager.h +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlotManager.h @@ -61,7 +61,7 @@ private: void onSelectionManagerSelectionChanged( const std::set& changedSelectionLevels ) override; - // Override eventFilter to be able to track key events from QDockWidget + // Override eventFilter to be able to track key events from QWidget bool eventFilter( QObject* obj, QEvent* event ) override; void updateCurveCandidates(); diff --git a/ApplicationLibCode/UserInterface/RiuDockWidgetTools.cpp b/ApplicationLibCode/UserInterface/RiuDockWidgetTools.cpp index 2b759b319e..f8c8009759 100644 --- a/ApplicationLibCode/UserInterface/RiuDockWidgetTools.cpp +++ b/ApplicationLibCode/UserInterface/RiuDockWidgetTools.cpp @@ -25,7 +25,9 @@ #include "cvfAssert.h" -#include +#include "DockManager.h" +#include "DockWidget.h" + #include //-------------------------------------------------------------------------------------------------- @@ -243,27 +245,17 @@ QMap RiuDockWidgetTools::widgetVisibilitiesForGeoMech() //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -QDockWidget* RiuDockWidgetTools::findDockWidget( const QObject* parent, const QString& dockWidgetName ) +ads::CDockWidget* RiuDockWidgetTools::findDockWidget( const ads::CDockManager* dockManager, const QString& dockWidgetName ) { - QList dockWidgets = parent->findChildren(); - - for ( QDockWidget* dock : dockWidgets ) - { - if ( dock->objectName() == dockWidgetName ) - { - return dock; - } - } - - return nullptr; + return dockManager->findDockWidget( dockWidgetName ); } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -QAction* RiuDockWidgetTools::toggleActionForWidget( const QObject* parent, const QString& dockWidgetName ) +QAction* RiuDockWidgetTools::toggleActionForWidget( const ads::CDockManager* dockManager, const QString& dockWidgetName ) { - auto w = RiuDockWidgetTools::findDockWidget( parent, dockWidgetName ); + auto w = findDockWidget( dockManager, dockWidgetName ); if ( w ) { return w->toggleViewAction(); @@ -282,7 +274,7 @@ void RiuDockWidgetTools::setVisibleDockingWindowsForEclipse() RiuMainWindow* mainWindow = RiuMainWindow::instance(); auto widgetVisibilities = widgetVisibilitiesForEclipse(); - applyDockWidgetVisibilities( mainWindow, widgetVisibilities ); + applyDockWidgetVisibilities( mainWindow->dockManager(), widgetVisibilities ); } //-------------------------------------------------------------------------------------------------- @@ -295,15 +287,17 @@ void RiuDockWidgetTools::setVisibleDockingWindowsForGeoMech() RiuMainWindow* mainWindow = RiuMainWindow::instance(); auto widgetVisibilities = widgetVisibilitiesForGeoMech(); - applyDockWidgetVisibilities( mainWindow, widgetVisibilities ); + applyDockWidgetVisibilities( mainWindow->dockManager(), widgetVisibilities ); } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RiuDockWidgetTools::setDockWidgetVisibility( const QObject* parent, const QString& dockWidgetName, bool isVisible ) +void RiuDockWidgetTools::setDockWidgetVisibility( const ads::CDockManager* dockManager, + const QString& dockWidgetName, + bool isVisible ) { - QDockWidget* dockWidget = findDockWidget( parent, dockWidgetName ); + ads::CDockWidget* dockWidget = findDockWidget( dockManager, dockWidgetName ); if ( dockWidget ) { dockWidget->setVisible( isVisible ); @@ -313,20 +307,18 @@ void RiuDockWidgetTools::setDockWidgetVisibility( const QObject* parent, const Q //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -QVariant RiuDockWidgetTools::dockWidgetsVisibility( const QObject* parent ) +QVariant RiuDockWidgetTools::dockWidgetsVisibility( const ads::CDockManager* dockManager ) { QMap widgetVisibility; - QList dockWidgets = parent->findChildren(); + auto dockWidgets = dockManager->dockWidgetsMap(); - for ( QDockWidget* dock : dockWidgets ) + for ( auto dock : dockWidgets ) { if ( dock ) { bool isVisible = dock->isVisible(); widgetVisibility[dock->objectName()] = isVisible; - - // qDebug() << "Store " << dock->objectName() << " : " << (isVisible ? "visible" : "not visible"); } } @@ -356,17 +348,16 @@ void RiuDockWidgetTools::workaroundForQwtDockWidgets() RiuMainWindow* mainWindow = RiuMainWindow::instance(); - QList dockWidgets = mainWindow->findChildren(); - dockWidgets.removeAll( nullptr ); + auto dockWidgets = mainWindow->dockManager()->dockWidgetsMap(); - for ( QDockWidget* dock : dockWidgets ) + for ( auto dock : dockWidgets ) { - dock->setVisible( false ); + if ( dock ) dock->setVisible( false ); } QApplication::processEvents(); { - auto dock = findDockWidget( mainWindow, relPermPlotName() ); + auto dock = mainWindow->dockManager()->findDockWidget( relPermPlotName() ); if ( dock ) { dock->setVisible( true ); @@ -374,7 +365,7 @@ void RiuDockWidgetTools::workaroundForQwtDockWidgets() } { - auto dock = findDockWidget( mainWindow, pvtPlotName() ); + auto dock = mainWindow->dockManager()->findDockWidget( pvtPlotName() ); if ( dock ) { dock->setVisible( true ); @@ -383,19 +374,19 @@ void RiuDockWidgetTools::workaroundForQwtDockWidgets() QApplication::processEvents(); - mainWindow->restoreDockWidgetVisibilities(); mainWindow->loadWinGeoAndDockToolBarLayout(); + mainWindow->restoreDockWidgetVisibilities(); } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RiuDockWidgetTools::applyDockWidgetVisibilities( const QObject* parent, +void RiuDockWidgetTools::applyDockWidgetVisibilities( const ads::CDockManager* dockManager, const QMap& widgetVisibilities ) { - QList dockWidgets = parent->findChildren(); + auto dockWidgets = dockManager->dockWidgetsMap(); - for ( QDockWidget* dock : dockWidgets ) + for ( auto dock : dockWidgets ) { if ( dock ) { @@ -408,8 +399,6 @@ void RiuDockWidgetTools::applyDockWidgetVisibilities( const QObject* } dock->setVisible( isVisible ); - - // qDebug() << "Restore " << dock->objectName() << " : " << (isVisible ? "visible" : "not visible"); } } } diff --git a/ApplicationLibCode/UserInterface/RiuDockWidgetTools.h b/ApplicationLibCode/UserInterface/RiuDockWidgetTools.h index dc96e9114b..b0da92517d 100644 --- a/ApplicationLibCode/UserInterface/RiuDockWidgetTools.h +++ b/ApplicationLibCode/UserInterface/RiuDockWidgetTools.h @@ -22,12 +22,17 @@ #include #include -class QDockWidget; class QObject; class QAction; class Rim3dView; +namespace ads +{ +class CDockWidget; +class CDockManager; +}; // namespace ads + //================================================================================================== // // @@ -61,9 +66,9 @@ public: static QString plotMainWindowMessagesName(); static QString plotMainWindowUndoStackName(); - static QAction* toggleActionForWidget( const QObject* parent, const QString& dockWidgetName ); + static QAction* toggleActionForWidget( const ads::CDockManager* dockManager, const QString& dockWidgetName ); - static QVariant dockWidgetsVisibility( const QObject* parent ); + static QVariant dockWidgetsVisibility( const ads::CDockManager* dockManager ); static QVariant defaultDockWidgetVisibilities(); static void workaroundForQwtDockWidgets(); @@ -71,10 +76,12 @@ public: static void setVisibleDockingWindowsForEclipse(); static void setVisibleDockingWindowsForGeoMech(); - static void setDockWidgetVisibility( const QObject* parent, const QString& dockWidgetName, bool isVisible ); - static void applyDockWidgetVisibilities( const QObject* parent, const QMap& visibilityMap ); + static void + setDockWidgetVisibility( const ads::CDockManager* dockManager, const QString& dockWidgetName, bool isVisible ); + static void applyDockWidgetVisibilities( const ads::CDockManager* dockManager, + const QMap& visibilityMap ); - static QDockWidget* findDockWidget( const QObject* parent, const QString& dockWidgetName ); + static ads::CDockWidget* findDockWidget( const ads::CDockManager*, const QString& dockWidgetName ); private: static QMap widgetVisibilitiesForEclipse(); diff --git a/ApplicationLibCode/UserInterface/RiuMainWindow.cpp b/ApplicationLibCode/UserInterface/RiuMainWindow.cpp index d5f071a79f..c2cb5e5cb1 100644 --- a/ApplicationLibCode/UserInterface/RiuMainWindow.cpp +++ b/ApplicationLibCode/UserInterface/RiuMainWindow.cpp @@ -82,11 +82,12 @@ #include "cvfTimer.h" +#include "DockAreaWidget.h" + #include #include #include #include -#include #include #include #include @@ -120,16 +121,16 @@ RiuMainWindow::RiuMainWindow() , m_relPermPlotPanel( nullptr ) , m_pvtPlotPanel( nullptr ) , m_mohrsCirclePlot( nullptr ) - , m_windowMenu( nullptr ) , m_holoLensToolBar( nullptr ) { setAttribute( Qt::WA_DeleteOnClose ); m_mdiArea = new RiuMdiArea( this ); connect( m_mdiArea, SIGNAL( subWindowActivated( QMdiSubWindow* ) ), SLOT( slotSubWindowActivated( QMdiSubWindow* ) ) ); - setCentralWidget( m_mdiArea ); - // m_mainViewer = createViewer(); + ads::CDockWidget* widget = new ads::CDockWidget( "3D Views", this ); + widget->setWidget( m_mdiArea ); + dockManager()->setCentralWidget( widget ); createActions(); createMenus(); @@ -741,22 +742,27 @@ void RiuMainWindow::createDockPanels() RiuDockWidgetTools::mainWindowDataSourceTreeName(), RiuDockWidgetTools::mainWindowScriptsTreeName() }; + const std::vector defaultDockWidgetArea{ ads::DockWidgetArea::LeftDockWidgetArea, + ads::DockWidgetArea::LeftDockWidgetArea, + ads::DockWidgetArea::LeftDockWidgetArea }; + createTreeViews( nTreeViews ); - QDockWidget* dockOntopOfWidget = nullptr; + std::vector rightWidgets; + std::vector leftWidgets; + std::vector bottomWidgets; for ( int i = 0; i < nTreeViews; i++ ) { - QDockWidget* dockWidget = new QDockWidget( treeViewTitles[i], this ); + ads::CDockWidget* dockWidget = new ads::CDockWidget( treeViewTitles[i], this ); dockWidget->setObjectName( treeViewDockNames[i] ); - dockWidget->setAllowedAreas( Qt::AllDockWidgetAreas ); caf::PdmUiTreeView* projectTree = projectTreeView( i ); projectTree->enableSelectionManagerUpdating( true ); - projectTree->enableAppendOfClassNameToUiItemText( RiaPreferencesSystem::current()->appendClassNameToUiText() ); dockWidget->setWidget( projectTree ); + dockWidget->hide(); projectTree->treeView()->setHeaderHidden( true ); projectTree->treeView()->setSelectionMode( QAbstractItemView::ExtendedSelection ); @@ -771,19 +777,11 @@ void RiuMainWindow::createDockPanels() RiuTreeViewEventFilter* treeViewEventFilter = new RiuTreeViewEventFilter( this, projectTree ); projectTree->treeView()->installEventFilter( treeViewEventFilter ); - addDockWidget( Qt::LeftDockWidgetArea, dockWidget ); - - if ( dockOntopOfWidget ) - { - tabifyDockWidget( dockOntopOfWidget, dockWidget ); - } - else - { - dockOntopOfWidget = dockWidget; - } + if ( defaultDockWidgetArea[i] == ads::DockWidgetArea::LeftDockWidgetArea ) leftWidgets.push_back( dockWidget ); + if ( defaultDockWidgetArea[i] == ads::DockWidgetArea::RightDockWidgetArea ) + rightWidgets.push_back( dockWidget ); connect( dockWidget, SIGNAL( visibilityChanged( bool ) ), projectTree, SLOT( treeVisibilityChanged( bool ) ) ); - connect( projectTree, SIGNAL( selectionChanged() ), this, SLOT( selectedObjectsChanged() ) ); projectTree->treeView()->setContextMenuPolicy( Qt::CustomContextMenu ); @@ -794,129 +792,102 @@ void RiuMainWindow::createDockPanels() projectTree->setUiConfigurationName( treeViewConfigs[i] ); } - QDockWidget* resultPlotDock = nullptr; - QDockWidget* relPermPlotDock = nullptr; - QDockWidget* pvtPlotDock = nullptr; -#ifdef USE_ODB_API - QDockWidget* mohrsCirclePlotDock = nullptr; -#endif + // undo/redo view + if ( m_undoView && RiaPreferences::current()->useUndoRedo() ) + { + ads::CDockWidget* dockWidget = new ads::CDockWidget( "Undo Stack", this ); + dockWidget->setObjectName( RiuDockWidgetTools::undoStackName() ); + dockWidget->setWidget( m_undoView ); + rightWidgets.push_back( dockWidget ); + } { - QDockWidget* dockWidget = new QDockWidget( "Property Editor", this ); + ads::CDockWidget* dockWidget = new ads::CDockWidget( "Result Plot", this ); + dockWidget->setObjectName( RiuDockWidgetTools::resultPlotName() ); + m_resultQwtPlot = new RiuResultQwtPlot( dockWidget ); + dockWidget->setWidget( m_resultQwtPlot ); + bottomWidgets.push_back( dockWidget ); + } + + ads::CDockAreaWidget* leftArea = addTabbedWidgets( leftWidgets, ads::DockWidgetArea::LeftDockWidgetArea ); + ads::CDockAreaWidget* rightArea = addTabbedWidgets( rightWidgets, ads::DockWidgetArea::RightDockWidgetArea ); + ads::CDockAreaWidget* bottomArea = addTabbedWidgets( bottomWidgets, + ads::DockWidgetArea::BottomDockWidgetArea, + dockManager()->centralWidget()->dockAreaWidget() ); + + { + ads::CDockWidget* dockWidget = new ads::CDockWidget( "Property Editor", this ); dockWidget->setObjectName( RiuDockWidgetTools::propertyEditorName() ); - dockWidget->setAllowedAreas( Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea ); m_pdmUiPropertyView = new caf::PdmUiPropertyView( dockWidget ); dockWidget->setWidget( m_pdmUiPropertyView ); - - addDockWidget( Qt::LeftDockWidgetArea, dockWidget ); - } - - { - QDockWidget* dockWidget = new QDockWidget( "Result Info", this ); - dockWidget->setObjectName( RiuDockWidgetTools::resultInfoName() ); - dockWidget->setAllowedAreas( Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea | Qt::BottomDockWidgetArea ); - m_resultInfoPanel = new RiuResultInfoPanel( dockWidget ); - dockWidget->setWidget( m_resultInfoPanel ); - - addDockWidget( Qt::BottomDockWidgetArea, dockWidget ); - } - - { - QDockWidget* dockWidget = new QDockWidget( "Process Monitor", this ); - dockWidget->setObjectName( RiuDockWidgetTools::processMonitorName() ); - dockWidget->setAllowedAreas( Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea | Qt::BottomDockWidgetArea ); - m_processMonitor = new RiuProcessMonitor( dockWidget ); - dockWidget->setWidget( m_processMonitor ); - - addDockWidget( Qt::BottomDockWidgetArea, dockWidget ); - dockWidget->hide(); - } - - { - QDockWidget* dockWidget = new QDockWidget( "Result Plot", this ); - dockWidget->setObjectName( RiuDockWidgetTools::resultPlotName() ); - dockWidget->setAllowedAreas( Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea | Qt::BottomDockWidgetArea ); - m_resultQwtPlot = new RiuResultQwtPlot( dockWidget ); - dockWidget->setWidget( m_resultQwtPlot ); - - addDockWidget( Qt::BottomDockWidgetArea, dockWidget ); - resultPlotDock = dockWidget; + dockManager()->addDockWidget( ads::DockWidgetArea::BottomDockWidgetArea, dockWidget, leftArea ); } #ifdef USE_ODB_API { - QDockWidget* dockWidget = new QDockWidget( "Mohr's Circle Plot", this ); + ads::CDockWidget* dockWidget = new ads::CDockWidget( "Mohr's Circle Plot", this ); dockWidget->setObjectName( RiuDockWidgetTools::mohrsCirclePlotName() ); - dockWidget->setAllowedAreas( Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea | Qt::BottomDockWidgetArea ); m_mohrsCirclePlot = new RiuMohrsCirclePlot( dockWidget ); dockWidget->setWidget( m_mohrsCirclePlot ); - - addDockWidget( Qt::BottomDockWidgetArea, dockWidget ); - mohrsCirclePlotDock = dockWidget; - - dockWidget->hide(); + dockManager()->addDockWidgetTabToArea( dockWidget, bottomArea ); } #endif { - QDockWidget* dockWidget = new QDockWidget( "Relative Permeability Plot", this ); + ads::CDockWidget* dockWidget = new ads::CDockWidget( "Relative Permeability Plot", this ); dockWidget->setObjectName( RiuDockWidgetTools::relPermPlotName() ); - dockWidget->setAllowedAreas( Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea | Qt::BottomDockWidgetArea ); m_relPermPlotPanel = new RiuRelativePermeabilityPlotPanel( dockWidget ); dockWidget->setWidget( m_relPermPlotPanel ); - - addDockWidget( Qt::BottomDockWidgetArea, dockWidget ); - relPermPlotDock = dockWidget; + dockManager()->addDockWidgetTabToArea( dockWidget, bottomArea ); } { - QDockWidget* dockWidget = new QDockWidget( "PVT Plot", this ); + ads::CDockWidget* dockWidget = new ads::CDockWidget( "PVT Plot", this ); dockWidget->setObjectName( RiuDockWidgetTools::pvtPlotName() ); - dockWidget->setAllowedAreas( Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea | Qt::BottomDockWidgetArea ); m_pvtPlotPanel = new RiuPvtPlotPanel( dockWidget ); dockWidget->setWidget( m_pvtPlotPanel ); + dockManager()->addDockWidgetTabToArea( dockWidget, bottomArea ); + } - addDockWidget( Qt::BottomDockWidgetArea, dockWidget ); - pvtPlotDock = dockWidget; + // result info + { + ads::CDockWidget* dockWidget = new ads::CDockWidget( "Result Info", this ); + dockWidget->setObjectName( RiuDockWidgetTools::resultInfoName() ); + m_resultInfoPanel = new RiuResultInfoPanel( dockWidget ); + dockWidget->setWidget( m_resultInfoPanel ); + dockManager()->addDockWidget( ads::DockWidgetArea::LeftDockWidgetArea, dockWidget, bottomArea ); + } + + ads::CDockAreaWidget* procAndMsgTabs = nullptr; + // process monitor + { + ads::CDockWidget* dockWidget = new ads::CDockWidget( "Process Monitor", this ); + dockWidget->setObjectName( RiuDockWidgetTools::processMonitorName() ); + m_processMonitor = new RiuProcessMonitor( dockWidget ); + dockWidget->setWidget( m_processMonitor ); + procAndMsgTabs = dockManager()->addDockWidget( ads::DockWidgetArea::RightDockWidgetArea, dockWidget, bottomArea ); } { - QDockWidget* dockWidget = new QDockWidget( "Messages", this ); + ads::CDockWidget* dockWidget = new ads::CDockWidget( "Messages", this ); dockWidget->setObjectName( RiuDockWidgetTools::messagesName() ); m_messagePanel = new RiuMessagePanel( dockWidget ); dockWidget->setWidget( m_messagePanel ); - addDockWidget( Qt::BottomDockWidgetArea, dockWidget ); - dockWidget->hide(); + dockManager()->addDockWidgetTabToArea( dockWidget, procAndMsgTabs ); } - if ( m_undoView && RiaPreferences::current()->useUndoRedo() ) - { - QDockWidget* dockWidget = new QDockWidget( "Undo Stack", this ); - dockWidget->setObjectName( RiuDockWidgetTools::undoStackName() ); - dockWidget->setAllowedAreas( Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea ); - dockWidget->setWidget( m_undoView ); + if ( leftArea ) leftArea->setCurrentIndex( 0 ); + if ( rightArea ) rightArea->setCurrentIndex( 0 ); + if ( bottomArea ) bottomArea->setCurrentIndex( 0 ); - addDockWidget( Qt::RightDockWidgetArea, dockWidget ); - dockWidget->hide(); - } - - setCorner( Qt::BottomLeftCorner, Qt::LeftDockWidgetArea ); - setCorner( Qt::BottomRightCorner, Qt::BottomDockWidgetArea ); - - // Tabify docks - tabifyDockWidget( pvtPlotDock, relPermPlotDock ); -#ifdef USE_ODB_API - tabifyDockWidget( relPermPlotDock, mohrsCirclePlotDock ); - tabifyDockWidget( mohrsCirclePlotDock, resultPlotDock ); -#else - tabifyDockWidget( relPermPlotDock, resultPlotDock ); -#endif - - QList dockWidgets = findChildren(); - for ( QDockWidget* dock : dockWidgets ) + auto widgets = dockManager()->dockWidgetsMap().values(); + std::reverse( widgets.begin(), widgets.end() ); + for ( ads::CDockWidget* dock : widgets ) { connect( dock->toggleViewAction(), SIGNAL( triggered() ), SLOT( slotDockWidgetToggleViewActionTriggered() ) ); + dock->setVisible( true ); + dock->raise(); } } @@ -1423,22 +1394,6 @@ RiuProcessMonitor* RiuMainWindow::processMonitor() return m_processMonitor; } -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void appendToggleActionForDockingWidget( QMenu* menu, QWidget* parent, const QString& dockWidgetName ) -{ - if ( menu ) - { - QAction* action = RiuDockWidgetTools::toggleActionForWidget( parent, dockWidgetName ); - if ( action ) - { - // Some dock windows are depending on configuration (mohrs circle plot), so do not assert they exist - menu->addAction( action ); - } - } -} - //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -1451,38 +1406,10 @@ void RiuMainWindow::slotBuildWindowActions() m_windowMenu->addAction( cmdFeatureMgr->action( "RicShowPlotWindowFeature" ) ); m_windowMenu->addSeparator(); - m_windowMenu->addAction( cmdFeatureMgr->action( "RicDefaultDockConfigEclipseFeature" ) ); -#ifdef USE_ODB_API - m_windowMenu->addAction( cmdFeatureMgr->action( "RicDefaultDockConfigGeoMechFeature" ) ); -#endif m_windowMenu->addSeparator(); } - appendToggleActionForDockingWidget( m_windowMenu, this, RiuDockWidgetTools::projectTreeName() ); - appendToggleActionForDockingWidget( m_windowMenu, this, RiuDockWidgetTools::propertyEditorName() ); - appendToggleActionForDockingWidget( m_windowMenu, this, RiuDockWidgetTools::messagesName() ); - appendToggleActionForDockingWidget( m_windowMenu, this, RiuDockWidgetTools::processMonitorName() ); - appendToggleActionForDockingWidget( m_windowMenu, this, RiuDockWidgetTools::undoStackName() ); - - m_windowMenu->addSeparator(); - - appendToggleActionForDockingWidget( m_windowMenu, this, RiuDockWidgetTools::resultInfoName() ); - appendToggleActionForDockingWidget( m_windowMenu, this, RiuDockWidgetTools::resultPlotName() ); - appendToggleActionForDockingWidget( m_windowMenu, this, RiuDockWidgetTools::relPermPlotName() ); - appendToggleActionForDockingWidget( m_windowMenu, this, RiuDockWidgetTools::pvtPlotName() ); - appendToggleActionForDockingWidget( m_windowMenu, this, RiuDockWidgetTools::mohrsCirclePlotName() ); - - m_windowMenu->addSeparator(); - QAction* cascadeWindowsAction = new QAction( "Cascade Windows", this ); - cascadeWindowsAction->setIcon( QIcon( ":/CascadeWindows.svg" ) ); - connect( cascadeWindowsAction, SIGNAL( triggered() ), m_mdiArea, SLOT( cascadeSubWindows() ) ); - - QAction* closeAllSubWindowsAction = new QAction( "Close All Windows", this ); - connect( closeAllSubWindowsAction, SIGNAL( triggered() ), m_mdiArea, SLOT( closeAllSubWindows() ) ); - - m_windowMenu->addAction( caf::CmdFeatureManager::instance()->action( "RicTileWindowsFeature" ) ); - m_windowMenu->addAction( cascadeWindowsAction ); - m_windowMenu->addAction( closeAllSubWindowsAction ); + addDefaultEntriesToWindowsMenu(); m_windowMenu->addSeparator(); m_windowMenu->addAction( m_newPropertyView ); @@ -1565,16 +1492,15 @@ void RiuMainWindow::selectedObjectsChanged() //-------------------------------------------------------------------------------------------------- void RiuMainWindow::slotNewObjectPropertyView() { - QDockWidget* dockWidget = - new QDockWidget( QString( "Additional Project Tree (%1)" ).arg( m_additionalProjectViews.size() + 1 ), this ); - dockWidget->setObjectName( "dockWidget" ); - dockWidget->setAllowedAreas( Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea ); + ads::CDockWidget* dockWidget = + new ads::CDockWidget( QString( "Additional Project Tree (%1)" ).arg( m_additionalProjectViews.size() + 1 ), this ); + dockWidget->setObjectName( "AdditionalDockWidget" ); RiuProjectAndPropertyView* projPropView = new RiuProjectAndPropertyView( dockWidget ); dockWidget->setWidget( projPropView ); projPropView->setPdmItem( m_pdmRoot ); - addDockWidget( Qt::RightDockWidgetArea, dockWidget ); + dockManager()->addDockWidget( ads::DockWidgetArea::RightDockWidgetArea, dockWidget ); m_additionalProjectViews.push_back( dockWidget ); } @@ -1835,7 +1761,7 @@ void RiuMainWindow::updateMemoryUsage() //-------------------------------------------------------------------------------------------------- void RiuMainWindow::showProcessMonitorDockPanel() { - RiuDockWidgetTools::setDockWidgetVisibility( this, RiuDockWidgetTools::processMonitorName(), true ); + RiuDockWidgetTools::setDockWidgetVisibility( this->dockManager(), RiuDockWidgetTools::processMonitorName(), true ); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/UserInterface/RiuMainWindow.h b/ApplicationLibCode/UserInterface/RiuMainWindow.h index 3b4ae0e2d2..9de3fcb70d 100644 --- a/ApplicationLibCode/UserInterface/RiuMainWindow.h +++ b/ApplicationLibCode/UserInterface/RiuMainWindow.h @@ -28,6 +28,7 @@ #include #include #include +#include #include #include @@ -69,6 +70,11 @@ namespace ssihub class Interface; } +namespace ads +{ +class CDockWidget; +}; + //================================================================================================== // // @@ -171,7 +177,6 @@ private: caf::AnimationToolBar* m_animationToolBar; - RiuMdiArea* m_mdiArea; RiuResultInfoPanel* m_resultInfoPanel; RiuProcessMonitor* m_processMonitor; QPointer m_messagePanel; @@ -182,7 +187,6 @@ private: RiuPvtPlotPanel* m_pvtPlotPanel; std::unique_ptr m_gridCalculatorDialog; - QMenu* m_windowMenu; QLabel* m_memoryCriticalWarning; QToolButton* m_memoryUsedButton; QLabel* m_memoryTotalStatus; @@ -269,5 +273,5 @@ private: QToolBar* m_holoLensToolBar; - std::vector> m_additionalProjectViews; + std::vector> m_additionalProjectViews; }; diff --git a/ApplicationLibCode/UserInterface/RiuMainWindowBase.cpp b/ApplicationLibCode/UserInterface/RiuMainWindowBase.cpp index 46dc29bb68..057530167a 100644 --- a/ApplicationLibCode/UserInterface/RiuMainWindowBase.cpp +++ b/ApplicationLibCode/UserInterface/RiuMainWindowBase.cpp @@ -25,6 +25,7 @@ #include "RiuDockWidgetTools.h" #include "RiuDragDrop.h" +#include "RiuMdiArea.h" #include "RiuMdiSubWindow.h" #include "RimProject.h" @@ -35,10 +36,14 @@ #include "cafPdmUiTreeView.h" #include "cafQTreeViewStateSerializer.h" +#include "DockWidget.h" + #include -#include +#include #include #include +#include +#include #include #include #include @@ -52,8 +57,10 @@ RiuMainWindowBase::RiuMainWindowBase() , m_showFirstVisibleWindowMaximized( true ) , m_blockSubWindowActivation( false ) , m_blockSubWindowProjectTreeSelection( false ) + , m_windowMenu( nullptr ) + , m_mdiArea( nullptr ) { - setDockNestingEnabled( true ); + m_dockManager = new ads::CDockManager( this ); if ( RiaPreferences::current()->useUndoRedo() && RiaApplication::enableDevelopmentFeatures() ) { @@ -86,6 +93,14 @@ RiuMainWindowBase::~RiuMainWindowBase() m_projectTreeViews.clear(); } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +ads::CDockManager* RiuMainWindowBase::dockManager() const +{ + return m_dockManager; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -122,8 +137,9 @@ void RiuMainWindowBase::loadWinGeoAndDockToolBarLayout() // Company and appname set through QCoreApplication QSettings settings; - QVariant winGeo = settings.value( QString( "%1/winGeometry" ).arg( registryFolderName() ) ); - QVariant layout = settings.value( QString( "%1/dockAndToolBarLayout" ).arg( registryFolderName() ) ); + QVariant winGeo = settings.value( QString( "%1/winGeometry" ).arg( registryFolderName() ) ); + QVariant layout = settings.value( QString( "%1/toolBarLayout" ).arg( registryFolderName() ) ); + QVariant dockState = settings.value( QString( "%1/dockLayout" ).arg( registryFolderName() ) ); if ( winGeo.isValid() ) { @@ -135,6 +151,13 @@ void RiuMainWindowBase::loadWinGeoAndDockToolBarLayout() } } } + if ( dockState.isValid() ) + { + m_dockManager->restoreState( dockState.toByteArray(), 1 ); + } + + settings.beginGroup( registryFolderName() ); + m_dockManager->loadPerspectives( settings ); restoreDockWidgetVisibilities(); } @@ -161,13 +184,15 @@ void RiuMainWindowBase::saveWinGeoAndDockToolBarLayout() settings.setValue( QString( "%1/winGeometry" ).arg( registryFolderName() ), winGeo ); QByteArray layout = saveState( 0 ); - settings.setValue( QString( "%1/dockAndToolBarLayout" ).arg( registryFolderName() ), layout ); + settings.setValue( QString( "%1/toolBarLayout" ).arg( registryFolderName() ), layout ); settings.setValue( QString( "%1/isMaximized" ).arg( registryFolderName() ), isMaximized() ); + settings.setValue( QString( "%1/dockLayout" ).arg( registryFolderName() ), m_dockManager->saveState( 1 ) ); + if ( this->isVisible() ) { - QVariant dockWindowVisibilities = RiuDockWidgetTools::dockWidgetsVisibility( this ); + QVariant dockWindowVisibilities = RiuDockWidgetTools::dockWidgetsVisibility( this->dockManager() ); QString key = mainWindowDockWidgetSettingsKey( registryFolderName() ); settings.setValue( key, dockWindowVisibilities ); @@ -201,7 +226,7 @@ void RiuMainWindowBase::restoreDockWidgetVisibilities() QString key = mainWindowDockWidgetSettingsKey( registryFolderName() ); QVariant dockWindowVisibilities = settings.value( key ); - RiuDockWidgetTools::applyDockWidgetVisibilities( this, dockWindowVisibilities.toMap() ); + RiuDockWidgetTools::applyDockWidgetVisibilities( this->dockManager(), dockWindowVisibilities.toMap() ); } //-------------------------------------------------------------------------------------------------- @@ -226,9 +251,7 @@ void RiuMainWindowBase::showWindow() //-------------------------------------------------------------------------------------------------- void RiuMainWindowBase::hideAllDockWidgets() { - QList dockWidgets = findChildren(); - - for ( QDockWidget* dock : dockWidgets ) + for ( auto dock : dockManager()->dockWidgetsMap() ) { if ( dock ) { @@ -258,7 +281,7 @@ void RiuMainWindowBase::selectAsCurrentItem( const caf::PdmObject* object, bool if ( tv ) { tv->selectAsCurrentItem( object ); - QDockWidget* dw = dynamic_cast( tv->parentWidget() ); + ads::CDockWidget* dw = dynamic_cast( tv->parentWidget() ); if ( dw ) { dw->show(); @@ -405,7 +428,7 @@ void RiuMainWindowBase::slotDockWidgetToggleViewActionTriggered() { if ( !sender() ) return; - auto dockWidget = dynamic_cast( sender()->parent() ); + auto dockWidget = dynamic_cast( sender()->parent() ); if ( dockWidget ) { if ( dockWidget->isVisible() ) @@ -585,3 +608,125 @@ void RiuMainWindowBase::restoreTreeViewStates( QString treeStateString, QString } } } + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +ads::CDockAreaWidget* RiuMainWindowBase::addTabbedWidgets( std::vector widgets, + ads::DockWidgetArea whereToDock, + ads::CDockAreaWidget* dockInside ) +{ + ads::CDockAreaWidget* areaToDockIn = nullptr; + + for ( auto widget : widgets ) + { + if ( areaToDockIn ) + { + m_dockManager->addDockWidgetTabToArea( widget, areaToDockIn ); + } + else + { + areaToDockIn = m_dockManager->addDockWidget( whereToDock, widget, dockInside ); + } + } + return areaToDockIn; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RiuMainWindowBase::setDockLayout() +{ + QAction* action = dynamic_cast( this->sender() ); + if ( action ) + { + QString layoutName = action->text(); + dockManager()->openPerspective( layoutName ); + } +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RiuMainWindowBase::deleteDockLayout() +{ + QAction* action = dynamic_cast( this->sender() ); + if ( action ) + { + QString name = action->text(); + + QString questionStr = "Are you sure you want to delete the window layout \"" + name + "\"?"; + auto reply = QMessageBox::question( this, + "Delete Window Layout", + questionStr, + QMessageBox::Yes | QMessageBox::No, + QMessageBox::No ); + if ( reply == QMessageBox::Yes ) + { + dockManager()->removePerspective( name ); + QSettings settings; + settings.beginGroup( registryFolderName() ); + dockManager()->savePerspectives( settings ); + } + } +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RiuMainWindowBase::saveDockLayout() +{ + bool ok = false; + QString name = + QInputDialog::getText( this, "Save Window Layout", "Give the window layout a name:", QLineEdit::Normal, "", &ok ); + if ( ok && !name.isEmpty() ) + { + dockManager()->addPerspective( name ); + QSettings settings; + settings.beginGroup( registryFolderName() ); + dockManager()->savePerspectives( settings ); + } +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RiuMainWindowBase::addDefaultEntriesToWindowsMenu() +{ + QMenu* showHideMenu = m_windowMenu->addMenu( "Show/Hide Windows" ); + + for ( auto dock : dockManager()->dockWidgetsMap() ) + { + showHideMenu->addAction( dock->toggleViewAction() ); + } + m_windowMenu->addSeparator(); + + QAction* saveLayoutAction = m_windowMenu->addAction( "Save Window Layout..." ); + connect( saveLayoutAction, SIGNAL( triggered() ), this, SLOT( saveDockLayout() ) ); + + QStringList names = dockManager()->perspectiveNames(); + if ( names.size() > 0 ) + { + QMenu* layoutsMenu = m_windowMenu->addMenu( "Use Window Layout" ); + QMenu* deleteLayoutMenu = m_windowMenu->addMenu( "Delete Window Layout" ); + + for ( auto& layout : names ) + { + QAction* chooseLayoutAction = layoutsMenu->addAction( layout ); + connect( chooseLayoutAction, SIGNAL( triggered() ), this, SLOT( setDockLayout() ) ); + QAction* deleteLayoutAction = deleteLayoutMenu->addAction( layout ); + connect( deleteLayoutAction, SIGNAL( triggered() ), this, SLOT( deleteDockLayout() ) ); + } + } + + m_windowMenu->addSeparator(); + QAction* cascadeWindowsAction = new QAction( "Cascade Windows", this ); + connect( cascadeWindowsAction, SIGNAL( triggered() ), m_mdiArea, SLOT( cascadeSubWindows() ) ); + + QAction* closeAllSubWindowsAction = new QAction( "Close All Windows", this ); + connect( closeAllSubWindowsAction, SIGNAL( triggered() ), m_mdiArea, SLOT( closeAllSubWindows() ) ); + + m_windowMenu->addAction( caf::CmdFeatureManager::instance()->action( "RicTilePlotWindowsFeature" ) ); + m_windowMenu->addAction( cascadeWindowsAction ); + m_windowMenu->addAction( closeAllSubWindowsAction ); +} diff --git a/ApplicationLibCode/UserInterface/RiuMainWindowBase.h b/ApplicationLibCode/UserInterface/RiuMainWindowBase.h index 8f10db2864..1c4cfa5800 100644 --- a/ApplicationLibCode/UserInterface/RiuMainWindowBase.h +++ b/ApplicationLibCode/UserInterface/RiuMainWindowBase.h @@ -22,12 +22,16 @@ #include "cafPdmUiDragDropInterface.h" +#include "DockManager.h" + #include #include class QMdiArea; struct RimMdiWindowGeometry; +class RiuMdiArea; + namespace caf { class PdmObject; @@ -47,8 +51,8 @@ class RiuMainWindowBase : public QMainWindow Q_OBJECT public: - RiuMainWindowBase(); - ~RiuMainWindowBase() override; + RiuMainWindowBase(); + ~RiuMainWindowBase() override; virtual QString mainWindowName() = 0; @@ -93,6 +97,8 @@ public: void setBlockViewSelectionOnSubWindowActivated( bool block ); bool isBlockingViewSelectionOnSubWindowActivated() const; + ads::CDockManager* dockManager() const; + protected: void createTreeViews( int numberOfTrees ); void removeViewerFromMdiArea( QMdiArea* mdiArea, QWidget* viewer ); @@ -103,6 +109,12 @@ protected: void restoreTreeViewStates( QString treeStateString, QString treeIndexString ); + ads::CDockAreaWidget* addTabbedWidgets( std::vector widgets, + ads::DockWidgetArea whereToDock, + ads::CDockAreaWidget* dockInside = nullptr ); + + void addDefaultEntriesToWindowsMenu(); + protected slots: void slotDockWidgetToggleViewActionTriggered(); void slotRefreshHelpActions(); @@ -111,6 +123,10 @@ protected slots: void slotUndo(); void slotRefreshUndoRedoActions(); + void setDockLayout(); + void deleteDockLayout(); + void saveDockLayout(); + protected: bool m_allowActiveViewChangeFromSelection; // To be used in selectedObjectsChanged() to control // whether to select the corresponding active view or not @@ -119,6 +135,9 @@ protected: QAction* m_redoAction; QUndoView* m_undoView; + RiuMdiArea* m_mdiArea; + QMenu* m_windowMenu; + private: QString registryFolderName(); @@ -129,4 +148,6 @@ private: bool m_showFirstVisibleWindowMaximized; bool m_blockSubWindowActivation; bool m_blockSubWindowProjectTreeSelection; + + ads::CDockManager* m_dockManager; }; diff --git a/ApplicationLibCode/UserInterface/RiuMessagePanel.cpp b/ApplicationLibCode/UserInterface/RiuMessagePanel.cpp index 4f07cd7d12..a6597c744d 100644 --- a/ApplicationLibCode/UserInterface/RiuMessagePanel.cpp +++ b/ApplicationLibCode/UserInterface/RiuMessagePanel.cpp @@ -22,7 +22,8 @@ #include "RiuGuiTheme.h" -#include +#include "DockWidget.h" + #include #include #include @@ -37,7 +38,7 @@ //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -RiuMessagePanel::RiuMessagePanel( QDockWidget* parent ) +RiuMessagePanel::RiuMessagePanel( QWidget* parent ) : QWidget( parent ) { QVBoxLayout* layout = new QVBoxLayout( this ); @@ -80,7 +81,7 @@ void RiuMessagePanel::addMessage( RILogLevel messageLevel, const QString& msg ) { if ( messageLevel == RILogLevel::RI_LL_ERROR || messageLevel == RILogLevel::RI_LL_WARNING ) { - QDockWidget* parentDockWidget = dynamic_cast( this->parent() ); + ads::CDockWidget* parentDockWidget = dynamic_cast( this->parent() ); if ( parentDockWidget && !parentDockWidget->isVisible() ) { parentDockWidget->toggleViewAction()->trigger(); @@ -104,7 +105,7 @@ void RiuMessagePanel::slotShowContextMenu( const QPoint& pos ) { QMenu menu; - // Reworked from implemenmtation in QTextControl::createStandardContextMenu() + // Reworked from implementation in QTextControl::createStandardContextMenu() { QAction* a = menu.addAction( "&Copy", m_textEdit, SLOT( copy() ), QKeySequence::Copy ); a->setEnabled( m_textEdit->textCursor().hasSelection() ); @@ -211,7 +212,7 @@ void RiuMessagePanelLogger::writeToMessagePanel( RILogLevel messageLevel, const return; } - for ( auto panel : m_messagePanel ) + for ( auto& panel : m_messagePanel ) { if ( panel ) { diff --git a/ApplicationLibCode/UserInterface/RiuMessagePanel.h b/ApplicationLibCode/UserInterface/RiuMessagePanel.h index 53264fd3e6..2103eab6cd 100644 --- a/ApplicationLibCode/UserInterface/RiuMessagePanel.h +++ b/ApplicationLibCode/UserInterface/RiuMessagePanel.h @@ -23,7 +23,6 @@ #include #include -class QDockWidget; class QPlainTextEdit; //================================================================================================== @@ -36,7 +35,7 @@ class RiuMessagePanel : public QWidget Q_OBJECT public: - explicit RiuMessagePanel( QDockWidget* parent ); + explicit RiuMessagePanel( QWidget* parent ); void addMessage( RILogLevel messageLevel, const QString& msg ); QSize sizeHint() const override; diff --git a/ApplicationLibCode/UserInterface/RiuPlotMainWindow.cpp b/ApplicationLibCode/UserInterface/RiuPlotMainWindow.cpp index 77f3473fe6..cf7efc51f8 100644 --- a/ApplicationLibCode/UserInterface/RiuPlotMainWindow.cpp +++ b/ApplicationLibCode/UserInterface/RiuPlotMainWindow.cpp @@ -65,11 +65,14 @@ #include "cafPdmUiTreeView.h" #include "cafSelectionManager.h" +#include "DockAreaWidget.h" + #include -#include #include #include #include +#include +#include #include #include #include @@ -80,11 +83,14 @@ //-------------------------------------------------------------------------------------------------- RiuPlotMainWindow::RiuPlotMainWindow() : m_activePlotViewWindow( nullptr ) - , m_windowMenu( nullptr ) { m_mdiArea = new RiuMdiArea( this ); connect( m_mdiArea, SIGNAL( subWindowActivated( QMdiSubWindow* ) ), SLOT( slotSubWindowActivated( QMdiSubWindow* ) ) ); - setCentralWidget( m_mdiArea ); + + ads::CDockWidget* widget = new ads::CDockWidget( "Plots", this ); + widget->setWidget( m_mdiArea ); + auto dockArea = dockManager()->setCentralWidget( widget ); + dockArea->setVisible( true ); createMenus(); createToolBars(); @@ -483,21 +489,22 @@ void RiuPlotMainWindow::createDockPanels() RiuDockWidgetTools::plotMainWindowTemplateTreeName(), RiuDockWidgetTools::plotMainWindowScriptsTreeName() }; - const std::vector defaultDockWidgetArea{ Qt::LeftDockWidgetArea, - Qt::RightDockWidgetArea, - Qt::LeftDockWidgetArea, - Qt::LeftDockWidgetArea }; + const std::vector defaultDockWidgetArea{ ads::DockWidgetArea::LeftDockWidgetArea, + ads::DockWidgetArea::RightDockWidgetArea, + ads::DockWidgetArea::LeftDockWidgetArea, + ads::DockWidgetArea::LeftDockWidgetArea }; createTreeViews( nTreeViews ); - std::vector rightTabbedWidgets; - std::vector leftTabbedWidgets; + std::vector rightWidgets; + std::vector leftWidgets; + std::vector bottomWidgets; + // the project trees for ( int i = 0; i < nTreeViews; i++ ) { - QDockWidget* dockWidget = new QDockWidget( treeViewTitles[i], this ); + ads::CDockWidget* dockWidget = new ads::CDockWidget( treeViewTitles[i], this ); dockWidget->setObjectName( treeViewDockNames[i] ); - dockWidget->setAllowedAreas( Qt::AllDockWidgetAreas ); caf::PdmUiTreeView* projectTree = projectTreeView( i ); projectTree->enableSelectionManagerUpdating( true ); @@ -519,10 +526,9 @@ void RiuPlotMainWindow::createDockPanels() RiuTreeViewEventFilter* treeViewEventFilter = new RiuTreeViewEventFilter( this, projectTree ); projectTree->treeView()->installEventFilter( treeViewEventFilter ); - addDockWidget( defaultDockWidgetArea[i], dockWidget ); - - if ( defaultDockWidgetArea[i] == Qt::LeftDockWidgetArea ) leftTabbedWidgets.push_back( dockWidget ); - if ( defaultDockWidgetArea[i] == Qt::RightDockWidgetArea ) rightTabbedWidgets.push_back( dockWidget ); + if ( defaultDockWidgetArea[i] == ads::DockWidgetArea::LeftDockWidgetArea ) leftWidgets.push_back( dockWidget ); + if ( defaultDockWidgetArea[i] == ads::DockWidgetArea::RightDockWidgetArea ) + rightWidgets.push_back( dockWidget ); connect( dockWidget, SIGNAL( visibilityChanged( bool ) ), projectTree, SLOT( treeVisibilityChanged( bool ) ) ); connect( projectTree, SIGNAL( selectionChanged() ), this, SLOT( selectedObjectsChanged() ) ); @@ -535,28 +541,9 @@ void RiuPlotMainWindow::createDockPanels() projectTree->setUiConfigurationName( treeViewConfigs[i] ); } + // the plot manager { - QDockWidget* dockWidget = new QDockWidget( "Property Editor", this ); - dockWidget->setObjectName( RiuDockWidgetTools::plotMainWindowPropertyEditorName() ); - dockWidget->setAllowedAreas( Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea ); - - m_pdmUiPropertyView = std::make_unique( dockWidget ); - dockWidget->setWidget( m_pdmUiPropertyView.get() ); - - addDockWidget( Qt::LeftDockWidgetArea, dockWidget ); - } - - { - QDockWidget* dockWidget = new QDockWidget( "Messages", this ); - dockWidget->setObjectName( RiuDockWidgetTools::plotMainWindowMessagesName() ); - m_messagePanel = new RiuMessagePanel( dockWidget ); - dockWidget->setWidget( m_messagePanel ); - splitDockWidget( rightTabbedWidgets.front(), dockWidget, Qt::Vertical ); - dockWidget->hide(); - } - - { - QDockWidget* dockWidget = new QDockWidget( "Plot Manager", this ); + ads::CDockWidget* dockWidget = new ads::CDockWidget( "Plot Manager", this ); dockWidget->setObjectName( RiuDockWidgetTools::summaryPlotManagerName() ); m_summaryPlotManagerView = std::make_unique( dockWidget ); @@ -567,54 +554,56 @@ void RiuPlotMainWindow::createDockPanels() m_summaryPlotManager = std::move( plotManager ); dockWidget->setWidget( m_summaryPlotManagerView.get() ); - addDockWidget( Qt::RightDockWidgetArea, dockWidget ); - rightTabbedWidgets.push_back( dockWidget ); - - dockWidget->hide(); + rightWidgets.push_back( dockWidget ); } + // the undo stack if ( m_undoView && RiaPreferences::current()->useUndoRedo() ) { - QDockWidget* dockWidget = new QDockWidget( "Undo Stack", this ); + ads::CDockWidget* dockWidget = new ads::CDockWidget( "Undo Stack", this ); dockWidget->setObjectName( RiuDockWidgetTools::plotMainWindowUndoStackName() ); - dockWidget->setAllowedAreas( Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea ); - dockWidget->setWidget( m_undoView ); - addDockWidget( Qt::RightDockWidgetArea, dockWidget ); - rightTabbedWidgets.push_back( dockWidget ); - - dockWidget->hide(); + rightWidgets.push_back( dockWidget ); } + ads::CDockAreaWidget* leftArea = addTabbedWidgets( leftWidgets, ads::DockWidgetArea::LeftDockWidgetArea ); + ads::CDockAreaWidget* rightArea = addTabbedWidgets( rightWidgets, ads::DockWidgetArea::RightDockWidgetArea ); + ads::CDockAreaWidget* bottomArea = addTabbedWidgets( bottomWidgets, + ads::DockWidgetArea::BottomDockWidgetArea, + dockManager()->centralWidget()->dockAreaWidget() ); + + // the property editor { - QDockWidget* topDock = nullptr; - for ( auto d : leftTabbedWidgets ) - { - if ( !topDock ) - topDock = d; - else - tabifyDockWidget( topDock, d ); - } + ads::CDockWidget* dockWidget = new ads::CDockWidget( "Property Editor", this ); + dockWidget->setObjectName( RiuDockWidgetTools::plotMainWindowPropertyEditorName() ); + + m_pdmUiPropertyView = std::make_unique( dockWidget ); + dockWidget->setWidget( m_pdmUiPropertyView.get() ); + dockManager()->addDockWidget( ads::DockWidgetArea::BottomDockWidgetArea, dockWidget, leftArea ); } + + // the log message view { - QDockWidget* topDock = nullptr; - for ( auto d : rightTabbedWidgets ) - { - if ( !topDock ) - topDock = d; - else - tabifyDockWidget( topDock, d ); - } + ads::CDockWidget* dockWidget = new ads::CDockWidget( "Messages", this ); + dockWidget->setObjectName( RiuDockWidgetTools::plotMainWindowMessagesName() ); + m_messagePanel = new RiuMessagePanel( dockWidget ); + dockWidget->setWidget( m_messagePanel ); + dockManager()->addDockWidget( ads::DockWidgetArea::BottomDockWidgetArea, dockWidget, rightArea ); } - setCorner( Qt::BottomLeftCorner, Qt::LeftDockWidgetArea ); - setCorner( Qt::BottomRightCorner, Qt::BottomDockWidgetArea ); + if ( leftArea ) leftArea->setCurrentIndex( 0 ); + if ( rightArea ) rightArea->setCurrentIndex( 0 ); + if ( bottomArea ) bottomArea->setCurrentIndex( 0 ); - QList dockWidgets = findChildren(); - for ( QDockWidget* dock : dockWidgets ) + auto widgets = dockManager()->dockWidgetsMap().values(); + std::reverse( widgets.begin(), widgets.end() ); + + for ( ads::CDockWidget* dock : widgets ) { connect( dock->toggleViewAction(), SIGNAL( triggered() ), SLOT( slotDockWidgetToggleViewActionTriggered() ) ); + dock->setVisible( true ); + dock->raise(); } } @@ -799,7 +788,8 @@ RiuMessagePanel* RiuPlotMainWindow::messagePanel() //-------------------------------------------------------------------------------------------------- void RiuPlotMainWindow::showAndSetKeyboardFocusToSummaryPlotManager() { - auto dockWidget = RiuDockWidgetTools::findDockWidget( this, RiuDockWidgetTools::summaryPlotManagerName() ); + auto dockWidget = + RiuDockWidgetTools::findDockWidget( this->dockManager(), RiuDockWidgetTools::summaryPlotManagerName() ); if ( dockWidget ) { dockWidget->setVisible( true ); @@ -919,28 +909,11 @@ void RiuPlotMainWindow::slotBuildWindowActions() { m_windowMenu->clear(); - { - caf::CmdFeatureManager* cmdFeatureMgr = caf::CmdFeatureManager::instance(); - m_windowMenu->addAction( cmdFeatureMgr->action( "RicShowMainWindowFeature" ) ); - m_windowMenu->addSeparator(); - } - - QList dockWidgets = findChildren(); - for ( QDockWidget* dock : dockWidgets ) - { - m_windowMenu->addAction( dock->toggleViewAction() ); - } - + caf::CmdFeatureManager* cmdFeatureMgr = caf::CmdFeatureManager::instance(); + m_windowMenu->addAction( cmdFeatureMgr->action( "RicShowMainWindowFeature" ) ); m_windowMenu->addSeparator(); - QAction* cascadeWindowsAction = new QAction( "Cascade Windows", this ); - connect( cascadeWindowsAction, SIGNAL( triggered() ), m_mdiArea, SLOT( cascadeSubWindows() ) ); - QAction* closeAllSubWindowsAction = new QAction( "Close All Windows", this ); - connect( closeAllSubWindowsAction, SIGNAL( triggered() ), m_mdiArea, SLOT( closeAllSubWindows() ) ); - - m_windowMenu->addAction( caf::CmdFeatureManager::instance()->action( "RicTilePlotWindowsFeature" ) ); - m_windowMenu->addAction( cascadeWindowsAction ); - m_windowMenu->addAction( closeAllSubWindowsAction ); + addDefaultEntriesToWindowsMenu(); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/UserInterface/RiuPlotMainWindow.h b/ApplicationLibCode/UserInterface/RiuPlotMainWindow.h index 53759b548e..fd19fd3e3f 100644 --- a/ApplicationLibCode/UserInterface/RiuPlotMainWindow.h +++ b/ApplicationLibCode/UserInterface/RiuPlotMainWindow.h @@ -24,6 +24,7 @@ #include "cafPdmPointer.h" #include +#include #include @@ -128,12 +129,9 @@ private slots: private: QByteArray m_initialDockAndToolbarLayout; // Initial dock window and toolbar layout, used to reset GUI - RiuMdiArea* m_mdiArea; caf::PdmPointer m_activePlotViewWindow; QPointer m_messagePanel; - QMenu* m_windowMenu; - std::unique_ptr m_wellLogPlotToolBarEditor; std::unique_ptr m_multiPlotToolBarEditor; std::unique_ptr m_multiPlotLayoutToolBarEditor; diff --git a/ApplicationLibCode/UserInterface/RiuProcessMonitor.cpp b/ApplicationLibCode/UserInterface/RiuProcessMonitor.cpp index 46451c9f3a..3a8421c4d6 100644 --- a/ApplicationLibCode/UserInterface/RiuProcessMonitor.cpp +++ b/ApplicationLibCode/UserInterface/RiuProcessMonitor.cpp @@ -35,7 +35,7 @@ //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -RiuProcessMonitor::RiuProcessMonitor( QDockWidget* pParent ) +RiuProcessMonitor::RiuProcessMonitor( QWidget* pParent ) : QWidget( pParent ) { m_monitoredProcess = nullptr; diff --git a/ApplicationLibCode/UserInterface/RiuProcessMonitor.h b/ApplicationLibCode/UserInterface/RiuProcessMonitor.h index ea876d4caf..71fb5fe946 100644 --- a/ApplicationLibCode/UserInterface/RiuProcessMonitor.h +++ b/ApplicationLibCode/UserInterface/RiuProcessMonitor.h @@ -20,7 +20,6 @@ #include -class QDockWidget; class QLabel; class QPlainTextEdit; class QPushButton; @@ -45,7 +44,7 @@ private: caf::UiProcess* m_monitoredProcess; // Pointer to the process we're monitoring. Needed to fetch text public: - explicit RiuProcessMonitor( QDockWidget* pParent ); + explicit RiuProcessMonitor( QWidget* pParent ); ~RiuProcessMonitor() override; void startMonitorWorkProcess( caf::UiProcess* process ); diff --git a/ApplicationLibCode/UserInterface/RiuPvtPlotPanel.cpp b/ApplicationLibCode/UserInterface/RiuPvtPlotPanel.cpp index d3e19c9daa..ceef455511 100644 --- a/ApplicationLibCode/UserInterface/RiuPvtPlotPanel.cpp +++ b/ApplicationLibCode/UserInterface/RiuPvtPlotPanel.cpp @@ -41,10 +41,10 @@ #include "qwt_text.h" #include -#include #include #include #include +#include //================================================================================================== // @@ -511,7 +511,7 @@ void RiuPvtPlotWidget::slotPickerActivated( bool on ) //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -RiuPvtPlotPanel::RiuPvtPlotPanel( QDockWidget* parent ) +RiuPvtPlotPanel::RiuPvtPlotPanel( QWidget* parent ) : QWidget( parent ) , m_unitSystem( RiaDefines::EclipseUnitSystem::UNITS_UNKNOWN ) , m_plotUpdater( new RiuPvtPlotUpdater( this ) ) diff --git a/ApplicationLibCode/UserInterface/RiuPvtPlotPanel.h b/ApplicationLibCode/UserInterface/RiuPvtPlotPanel.h index d6ee920f10..bfc4ab0615 100644 --- a/ApplicationLibCode/UserInterface/RiuPvtPlotPanel.h +++ b/ApplicationLibCode/UserInterface/RiuPvtPlotPanel.h @@ -32,7 +32,6 @@ class RiuPvtPlotUpdater; class RiuPvtQwtPicker; class RiuPvtPlotPanel; -class QDockWidget; class QComboBox; class QLabel; @@ -121,7 +120,7 @@ public: }; public: - RiuPvtPlotPanel( QDockWidget* parent ); + RiuPvtPlotPanel( QWidget* parent ); ~RiuPvtPlotPanel() override; void setPlotData( RiaDefines::EclipseUnitSystem unitSystem, diff --git a/ApplicationLibCode/UserInterface/RiuRelativePermeabilityPlotPanel.cpp b/ApplicationLibCode/UserInterface/RiuRelativePermeabilityPlotPanel.cpp index bd40c5bf8f..43a2d073fc 100644 --- a/ApplicationLibCode/UserInterface/RiuRelativePermeabilityPlotPanel.cpp +++ b/ApplicationLibCode/UserInterface/RiuRelativePermeabilityPlotPanel.cpp @@ -46,7 +46,6 @@ #include #include #include -#include #include #include #include @@ -84,7 +83,7 @@ public: //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -RiuRelativePermeabilityPlotPanel::RiuRelativePermeabilityPlotPanel( QDockWidget* parent ) +RiuRelativePermeabilityPlotPanel::RiuRelativePermeabilityPlotPanel( QWidget* parent ) : QWidget( parent ) , m_unitSystem( RiaDefines::EclipseUnitSystem::UNITS_UNKNOWN ) , m_swat( HUGE_VAL ) diff --git a/ApplicationLibCode/UserInterface/RiuRelativePermeabilityPlotPanel.h b/ApplicationLibCode/UserInterface/RiuRelativePermeabilityPlotPanel.h index 548c222cbe..35c2d8dfb3 100644 --- a/ApplicationLibCode/UserInterface/RiuRelativePermeabilityPlotPanel.h +++ b/ApplicationLibCode/UserInterface/RiuRelativePermeabilityPlotPanel.h @@ -28,7 +28,6 @@ class RiuDockedQwtPlot; class RiuRelativePermeabilityPlotUpdater; -class QDockWidget; class QButtonGroup; class QCheckBox; class QwtPlot; @@ -46,7 +45,7 @@ class RiuRelativePermeabilityPlotPanel : public QWidget Q_OBJECT public: - RiuRelativePermeabilityPlotPanel( QDockWidget* parent ); + RiuRelativePermeabilityPlotPanel( QWidget* parent ); ~RiuRelativePermeabilityPlotPanel() override; void setPlotData( RiaDefines::EclipseUnitSystem unitSystem, diff --git a/ApplicationLibCode/UserInterface/RiuResultInfoPanel.cpp b/ApplicationLibCode/UserInterface/RiuResultInfoPanel.cpp index f96fecbe38..99fe053705 100644 --- a/ApplicationLibCode/UserInterface/RiuResultInfoPanel.cpp +++ b/ApplicationLibCode/UserInterface/RiuResultInfoPanel.cpp @@ -18,10 +18,8 @@ #include "RiuResultInfoPanel.h" -#include #include #include -#include //================================================================================================== /// @@ -35,7 +33,7 @@ //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -RiuResultInfoPanel::RiuResultInfoPanel( QDockWidget* parent ) +RiuResultInfoPanel::RiuResultInfoPanel( QWidget* parent ) : QWidget( parent ) { m_textEdit = new QTextEdit( this ); diff --git a/ApplicationLibCode/UserInterface/RiuResultInfoPanel.h b/ApplicationLibCode/UserInterface/RiuResultInfoPanel.h index 0dacd120cf..b50777f3f5 100644 --- a/ApplicationLibCode/UserInterface/RiuResultInfoPanel.h +++ b/ApplicationLibCode/UserInterface/RiuResultInfoPanel.h @@ -20,7 +20,6 @@ #include -class QDockWidget; class QTextEdit; //================================================================================================== @@ -33,7 +32,7 @@ class RiuResultInfoPanel : public QWidget Q_OBJECT public: - explicit RiuResultInfoPanel( QDockWidget* parent ); + explicit RiuResultInfoPanel( QWidget* parent ); void setInfo( const QString& info ); diff --git a/CMakeLists.txt b/CMakeLists.txt index 0923db7e45..26b0757b38 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -444,15 +444,6 @@ elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") target_compile_options(qwt PRIVATE -Wno-deprecated) endif() -if(RESINSIGHT_ENABLE_UNITY_BUILD) - message("Cmake Unity build is enabled on : qwt") - set_property(TARGET qwt PROPERTY UNITY_BUILD true) - message("Cmake Unity build is enabled on : custom-opm-flowdiagnostics") - set_property(TARGET custom-opm-flowdiagnostics PROPERTY UNITY_BUILD true) - message("Cmake Unity build is enabled on : custom-opm-common") - set_property(TARGET custom-opm-common PROPERTY UNITY_BUILD true) -endif() - list(APPEND THIRD_PARTY_LIBRARIES qwt) # ############################################################################## @@ -470,11 +461,6 @@ elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") target_compile_options(qtadvanceddocking PRIVATE -Wno-deprecated) endif() -if(RESINSIGHT_ENABLE_UNITY_BUILD) - message("Cmake Unity build is enabled on : QtADS") - set_property(TARGET qtadvanceddocking PROPERTY UNITY_BUILD true) -endif() - list(APPEND THIRD_PARTY_LIBRARIES qtadvanceddocking) # ############################################################################## @@ -519,6 +505,20 @@ list(APPEND THIRD_PARTY_LIBRARIES clipper) # ############################################################################## set_property(TARGET ${THIRD_PARTY_LIBRARIES} PROPERTY FOLDER "Thirdparty") +# ############################################################################## +# Unity Build +# ############################################################################## +if(RESINSIGHT_ENABLE_UNITY_BUILD) + message("Cmake Unity build is enabled on : qwt") + set_property(TARGET qwt PROPERTY UNITY_BUILD true) + message("Cmake Unity build is enabled on : custom-opm-flowdiagnostics") + set_property(TARGET custom-opm-flowdiagnostics PROPERTY UNITY_BUILD true) + message("Cmake Unity build is enabled on : custom-opm-common") + set_property(TARGET custom-opm-common PROPERTY UNITY_BUILD true) + message("Cmake Unity build is enabled on : qtadvanceddocking") + set_property(TARGET qtadvanceddocking PROPERTY UNITY_BUILD true) +endif() + # ############################################################################## # Vizualization Framework # ############################################################################## diff --git a/ThirdParty/qtadvanceddocking b/ThirdParty/qtadvanceddocking index 75d58b3ea3..3d365a0b84 160000 --- a/ThirdParty/qtadvanceddocking +++ b/ThirdParty/qtadvanceddocking @@ -1 +1 @@ -Subproject commit 75d58b3ea310a609ecaee695ef8d0f065413bc86 +Subproject commit 3d365a0b84e4ae87481e5545c30abd002676812c From 614bb147f2eaf5c0d9fb3ce5d52c881d8e6df755 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Thu, 7 Jul 2022 16:42:06 +0200 Subject: [PATCH 021/129] Use updated version of opm-common as submodule * Adjustments to build system for opm-common * Add opm-common as submodule * Disable use of unity build for opm-common --- .gitmodules | 3 + .../FileInterface/RifHdf5SummaryExporter.cpp | 59 +- .../FileInterface/RifOpmCommonSummary.cpp | 128 +- .../FileInterface/RifOpmCommonSummary.h | 13 +- .../FileInterface/RifOpmHdf5Summary.cpp | 40 +- .../FileInterface/RifOpmHdf5Summary.h | 7 +- .../RifProjectSummaryDataWriter.cpp | 9 +- .../ProjectDataModel/RimVfpPlot.cpp | 24 +- .../ProjectDataModel/RimVfpPlot.h | 4 +- .../ProjectDataModel/RimVfpTableExtractor.cpp | 26 +- .../ProjectDataModel/RimVfpTableExtractor.h | 4 +- .../UnitTests/HDF5FileReader-Test.cpp | 7 +- .../UnitTests/HDF5FileWriter-Test.cpp | 5 + .../UnitTests/opm-summary-Test.cpp | 4 + CMakeLists.txt | 4 +- ThirdParty/custom-opm-common/CMakeLists.txt | 11 +- .../opm-parser-BasicTest.cpp | 26 +- .../generated-opm-common/ParserInit.cpp | 2271 +- .../generated-opm-common/ParserKeywords/A.cpp | 301 +- .../generated-opm-common/ParserKeywords/B.cpp | 329 +- .../generated-opm-common/ParserKeywords/C.cpp | 448 +- .../generated-opm-common/ParserKeywords/D.cpp | 391 +- .../generated-opm-common/ParserKeywords/E.cpp | 591 +- .../generated-opm-common/ParserKeywords/F.cpp | 682 +- .../generated-opm-common/ParserKeywords/G.cpp | 992 +- .../generated-opm-common/ParserKeywords/H.cpp | 235 +- .../generated-opm-common/ParserKeywords/I.cpp | 159 +- .../generated-opm-common/ParserKeywords/J.cpp | 26 +- .../generated-opm-common/ParserKeywords/K.cpp | 30 +- .../generated-opm-common/ParserKeywords/L.cpp | 257 +- .../generated-opm-common/ParserKeywords/M.cpp | 487 +- .../generated-opm-common/ParserKeywords/N.cpp | 283 +- .../generated-opm-common/ParserKeywords/O.cpp | 1002 +- .../generated-opm-common/ParserKeywords/P.cpp | 611 +- .../generated-opm-common/ParserKeywords/Q.cpp | 24 +- .../generated-opm-common/ParserKeywords/R.cpp | 686 +- .../generated-opm-common/ParserKeywords/S.cpp | 1284 +- .../generated-opm-common/ParserKeywords/T.cpp | 323 +- .../generated-opm-common/ParserKeywords/U.cpp | 69 +- .../generated-opm-common/ParserKeywords/V.cpp | 117 +- .../generated-opm-common/ParserKeywords/W.cpp | 1357 +- .../generated-opm-common/ParserKeywords/X.cpp | 11 +- .../generated-opm-common/ParserKeywords/Y.cpp | 11 +- .../generated-opm-common/ParserKeywords/Z.cpp | 46 +- .../eclipse/Parser/ParserKeywords/A.hpp | 24 +- .../eclipse/Parser/ParserKeywords/B.hpp | 7 +- .../eclipse/Parser/ParserKeywords/Builtin.hpp | 3415 ++ .../eclipse/Parser/ParserKeywords/C.hpp | 22 +- .../eclipse/Parser/ParserKeywords/D.hpp | 27 +- .../eclipse/Parser/ParserKeywords/E.hpp | 22 +- .../eclipse/Parser/ParserKeywords/F.hpp | 14 +- .../eclipse/Parser/ParserKeywords/G.hpp | 44 +- .../eclipse/Parser/ParserKeywords/H.hpp | 2 +- .../eclipse/Parser/ParserKeywords/I.hpp | 2 +- .../eclipse/Parser/ParserKeywords/J.hpp | 2 +- .../eclipse/Parser/ParserKeywords/K.hpp | 2 +- .../eclipse/Parser/ParserKeywords/L.hpp | 8 +- .../eclipse/Parser/ParserKeywords/M.hpp | 169 +- .../eclipse/Parser/ParserKeywords/N.hpp | 46 +- .../eclipse/Parser/ParserKeywords/O.hpp | 756 +- .../eclipse/Parser/ParserKeywords/P.hpp | 34 +- .../eclipse/Parser/ParserKeywords/Q.hpp | 2 +- .../eclipse/Parser/ParserKeywords/R.hpp | 131 +- .../eclipse/Parser/ParserKeywords/S.hpp | 449 +- .../eclipse/Parser/ParserKeywords/T.hpp | 36 +- .../eclipse/Parser/ParserKeywords/U.hpp | 2 +- .../eclipse/Parser/ParserKeywords/V.hpp | 9 +- .../eclipse/Parser/ParserKeywords/W.hpp | 181 +- .../eclipse/Parser/ParserKeywords/X.hpp | 2 +- .../eclipse/Parser/ParserKeywords/Y.hpp | 2 +- .../eclipse/Parser/ParserKeywords/Z.hpp | 2 +- ThirdParty/custom-opm-common/opm-common | 1 + .../opm-common/.clang-format | 20 - .../custom-opm-common/opm-common/.gitignore | 75 - .../custom-opm-common/opm-common/.gitmodules | 0 .../opm-common/CMakeLists.txt | 368 - .../opm-common/CMakeLists_files.cmake | 815 - .../opm-common/CopyHeaders.cmake | 24 - .../opm-common/ExtraTests.cmake | 127 - .../opm-common/GenerateKeywords.cmake | 119 - .../custom-opm-common/opm-common/LICENSE | 675 - .../custom-opm-common/opm-common/README.md | 3 - .../custom-opm-common/opm-common/changelog.md | 63 - .../opm-common/cmake/Modules/AddOptions.cmake | 102 - .../cmake/Modules/BoostTargets.cmake | 49 - .../CheckCaseSensitiveFileSystem.cmake | 29 - .../opm-common/cmake/Modules/ConfigVars.cmake | 120 - .../opm-common/cmake/Modules/Duplicates.cmake | 38 - .../cmake/Modules/FindAlberta.cmake | 46 - .../opm-common/cmake/Modules/FindC99.cmake | 25 - .../cmake/Modules/FindClangCheck.cmake | 11 - .../cmake/Modules/FindCppCheck.cmake | 11 - .../opm-common/cmake/Modules/FindCwrap.cmake | 49 - .../cmake/Modules/FindCxaDemangle.cmake | 23 - .../opm-common/cmake/Modules/FindEigen3.cmake | 125 - .../opm-common/cmake/Modules/FindMETIS.cmake | 49 - .../opm-common/cmake/Modules/FindPETSc.cmake | 166 - .../cmake/Modules/FindPTScotch.cmake | 80 - .../cmake/Modules/FindParMETIS.cmake | 97 - .../cmake/Modules/FindQuadmath.cmake | 49 - .../cmake/Modules/FindSuiteSparse.cmake | 294 - .../cmake/Modules/FindSuperLU.cmake | 185 - .../opm-common/cmake/Modules/FindUG.cmake | 112 - .../cmake/Modules/FindValgrind.cmake | 25 - .../opm-common/cmake/Modules/FindZOLTAN.cmake | 64 - .../opm-common/cmake/Modules/Findcjson.cmake | 90 - .../cmake/Modules/Finddune-alugrid.cmake | 85 - .../cmake/Modules/Finddune-common.cmake | 82 - .../cmake/Modules/Finddune-fem.cmake | 56 - .../cmake/Modules/Finddune-geometry.cmake | 50 - .../cmake/Modules/Finddune-grid.cmake | 66 - .../cmake/Modules/Finddune-istl.cmake | 69 - .../Modules/Finddune-localfunctions.cmake | 42 - .../cmake/Modules/Finddune-uggrid.cmake | 33 - .../opm-common/cmake/Modules/Findlibrt.cmake | 51 - .../Modules/Findopm-flowdiagnostics.cmake | 48 - .../cmake/Modules/Findopm-tests.cmake | 27 - .../cmake/Modules/Findopm-upscaling.cmake | 41 - .../cmake/Modules/Findopm-verteq.cmake | 41 - .../cmake/Modules/LibtoolArchives.cmake | 169 - .../opm-common/cmake/Modules/OpmAliases.cmake | 27 - .../cmake/Modules/OpmBashCompletion.cmake | 6 - .../opm-common/cmake/Modules/OpmCompile.cmake | 97 - .../cmake/Modules/OpmCompilerChecks.cmake | 104 - .../cmake/Modules/OpmDefaults.cmake | 101 - .../cmake/Modules/OpmDistClean.cmake | 89 - .../opm-common/cmake/Modules/OpmDoc.cmake | 91 - .../opm-common/cmake/Modules/OpmFiles.cmake | 106 - .../opm-common/cmake/Modules/OpmFind.cmake | 215 - .../opm-common/cmake/Modules/OpmGrid.cmake | 81 - .../opm-common/cmake/Modules/OpmInit.cmake | 143 - .../opm-common/cmake/Modules/OpmInstall.cmake | 74 - .../opm-common/cmake/Modules/OpmKnown.cmake | 58 - .../opm-common/cmake/Modules/OpmLibMain.cmake | 287 - .../opm-common/cmake/Modules/OpmPackage.cmake | 238 - .../opm-common/cmake/Modules/OpmProject.cmake | 168 - .../cmake/Modules/OpmPythonTest.cmake | 7 - .../cmake/Modules/OpmSatellites.cmake | 385 - .../cmake/Modules/OpmSiblingSearch.cmake | 32 - .../cmake/Modules/OpmStaticTargets.cmake | 103 - .../opm-common/cmake/Modules/UseCompVer.cmake | 108 - .../cmake/Modules/UseDebugSymbols.cmake | 132 - .../opm-common/cmake/Modules/UseDuneVer.cmake | 32 - .../cmake/Modules/UseDynamicBoost.cmake | 36 - .../cmake/Modules/UseFastBuilds.cmake | 11 - .../cmake/Modules/UseFortranWrappers.cmake | 90 - .../cmake/Modules/UseOnlyNeeded.cmake | 50 - .../opm-common/cmake/Modules/UseOpenMP.cmake | 76 - .../cmake/Modules/UseOptimization.cmake | 86 - .../cmake/Modules/UsePrecompHeaders.cmake | 171 - .../cmake/Modules/UseStaticAnalysis.cmake | 63 - .../cmake/Modules/UseSystemInfo.cmake | 198 - .../opm-common/cmake/Modules/UseThreads.cmake | 53 - .../opm-common/cmake/Modules/UseVCSInfo.cmake | 102 - .../opm-common/cmake/Modules/UseVersion.cmake | 107 - .../cmake/Modules/UseWarnings.cmake | 19 - .../compat-2.8.3/CMakeParseArguments.cmake | 138 - .../cmake/Modules/compat-2.8.5/FindGit.cmake | 47 - .../compat-2.8.7/CMakePushCheckState.cmake | 61 - .../cmake/Modules/compat-2.8.7/FindBLAS.cmake | 624 - .../Modules/compat-2.8.7/FindLAPACK.cmake | 307 - .../cmake/Modules/opm-verteq-prereqs.cmake | 20 - .../opm-common/cmake/OPM-CMake.md | 739 - .../cmake/Scripts/CheckCommits.cmake | 84 - .../cmake/Scripts/DuneCompat2.cmake | 25 - .../cmake/Scripts/RemoveEmptyDir.cmake | 15 - .../cmake/Scripts/WriteVerSHA.cmake | 68 - .../cmake/Scripts/clang-check-test.sh.in | 23 - .../opm-common/cmake/Scripts/cppcheck-test.sh | 30 - .../cmake/Templates/DoxygenLayout.xml | 185 - .../opm-common/cmake/Templates/la.in | 41 - .../opm-project-config-version.cmake.in | 28 - .../Templates/opm-project-config.cmake.in | 109 - .../cmake/Templates/opm-project.pc.in | 13 - .../opm-common/cmake/Templates/style.css | 11 - .../cross-platform/PortableEndian.hpp | 16 - .../cross-platform/windows/PortableEndian.hpp | 16 - .../cross-platform/windows/Substitutes.cpp | 32 - .../cross-platform/windows/Substitutes.hpp | 19 - .../opm-common/debian/changelog | 5 - .../opm-common/debian/compat | 1 - .../opm-common/debian/control | 64 - .../opm-common/debian/copyright | 13 - .../custom-opm-common/opm-common/debian/docs | 2 - .../debian/libopm-common1-bin.install | 1 - .../debian/libopm-common1-dev.install | 6 - .../debian/libopm-common1-doc.install | 1 - .../opm-common/debian/libopm-common1.install | 1 - .../debian/python3-opm-common.install | 1 - .../custom-opm-common/opm-common/debian/rules | 29 - .../opm-common/debian/source/format | 1 - .../opm-common/docs/keywords.txt | 336 - .../opm-common/etc/opm_bash_completion.sh.in | 60 - .../opm-common/examples/msim.cpp | 55 - .../opm-common/examples/opmhash.cpp | 159 - .../opm-common/examples/opmi.cpp | 90 - .../opm-common/examples/opmpack.cpp | 181 - .../opm-common/external/cjson/README | 247 - .../opm-common/external/cjson/README.opm | 2 - .../opm-common/external/cjson/cJSON.c | 2936 -- .../opm-common/external/cjson/cJSON.h | 285 - .../opm-common/jenkins/README.md | 11 - .../opm-common/jenkins/build-opm-module.sh | 248 - .../opm-common/jenkins/build.sh | 35 - .../opm-common/jenkins/conv.xsl | 116 - .../opm-common/jenkins/convert.py | 74 - .../opm-common/jenkins/setup-opm-tests.sh | 34 - .../opm-common/jenkins/update-opm-tests.sh | 96 - .../opm-common/msim/include/opm/msim/msim.hpp | 52 - .../opm-common/msim/src/msim.cpp | 177 - .../opm-common/opm-common-prereqs.cmake | 28 - .../opm-common/opm/common/ErrorMacros.hpp | 73 - .../opm-common/opm/common/Exceptions.hpp | 70 - .../opm/common/OpmLog/CounterLog.hpp | 53 - .../opm/common/OpmLog/EclipsePRTLog.hpp | 65 - .../opm-common/opm/common/OpmLog/Location.hpp | 60 - .../opm/common/OpmLog/LogBackend.hpp | 86 - .../opm-common/opm/common/OpmLog/LogUtil.hpp | 70 - .../opm-common/opm/common/OpmLog/Logger.hpp | 82 - .../opm/common/OpmLog/MessageFormatter.hpp | 95 - .../opm/common/OpmLog/MessageLimiter.hpp | 189 - .../opm-common/opm/common/OpmLog/OpmLog.hpp | 102 - .../opm/common/OpmLog/StreamLog.hpp | 50 - .../opm-common/opm/common/OpmLog/TimerLog.hpp | 61 - .../common/data/SimulationDataContainer.hpp | 191 - .../opm/common/utility/ActiveGridCells.hpp | 79 - .../opm/common/utility/FileSystem.hpp | 50 - .../opm/common/utility/OpmInputError.hpp | 121 - .../opm/common/utility/Serializer.hpp | 136 - .../opm-common/opm/common/utility/String.hpp | 108 - .../opm/common/utility/TimeService.hpp | 121 - .../numeric/MonotCubicInterpolator.hpp | 583 - .../utility/numeric/NonuniformTableLinear.hpp | 208 - .../common/utility/numeric/RootFinders.hpp | 450 - .../common/utility/numeric/SparseVector.hpp | 198 - .../utility/numeric/UniformTableLinear.hpp | 268 - .../opm/common/utility/numeric/blas_lapack.h | 148 - .../numeric/buildUniformMonotoneTable.hpp | 50 - .../utility/numeric/calculateCellVol.hpp | 29 - .../opm/common/utility/numeric/cmp.hpp | 133 - .../utility/numeric/linearInterpolation.hpp | 107 - .../common/utility/parameters/Parameter.hpp | 215 - .../utility/parameters/ParameterGroup.hpp | 272 - .../parameters/ParameterGroup_impl.hpp | 311 - .../utility/parameters/ParameterMapItem.hpp | 71 - .../parameters/ParameterRequirement.hpp | 241 - .../utility/parameters/ParameterStrings.hpp | 63 - .../utility/parameters/ParameterTools.hpp | 46 - .../platform_dependent/disable_warnings.h | 79 - .../platform_dependent/reenable_warnings.h | 57 - .../opm-common/opm/io/eclipse/EGrid.hpp | 115 - .../opm-common/opm/io/eclipse/EInit.hpp | 74 - .../opm-common/opm/io/eclipse/ERft.hpp | 94 - .../opm-common/opm/io/eclipse/ERsm.hpp | 79 - .../opm-common/opm/io/eclipse/ERst.hpp | 103 - .../opm-common/opm/io/eclipse/ESmry.hpp | 159 - .../opm-common/opm/io/eclipse/EclFile.hpp | 118 - .../opm-common/opm/io/eclipse/EclIOdata.hpp | 71 - .../opm-common/opm/io/eclipse/EclOutput.hpp | 130 - .../opm-common/opm/io/eclipse/EclUtil.hpp | 86 - .../opm-common/opm/io/eclipse/ExtESmry.hpp | 106 - .../opm/io/eclipse/OutputStream.hpp | 456 - .../opm/io/eclipse/PaddedOutputString.hpp | 103 - .../opm/io/eclipse/RestartFileView.hpp | 70 - .../opm-common/opm/io/eclipse/SummaryNode.hpp | 100 - .../opm/io/eclipse/rst/connection.hpp | 70 - .../opm-common/opm/io/eclipse/rst/group.hpp | 93 - .../opm-common/opm/io/eclipse/rst/header.hpp | 130 - .../opm-common/opm/io/eclipse/rst/segment.hpp | 78 - .../opm-common/opm/io/eclipse/rst/state.hpp | 103 - .../opm-common/opm/io/eclipse/rst/well.hpp | 133 - .../opm-common/opm/json/JsonObject.hpp | 70 - .../opm-common/opm/output/OutputWriter.hpp | 103 - .../opm-common/opm/output/data/Aquifer.hpp | 59 - .../opm-common/opm/output/data/Cells.hpp | 84 - .../opm-common/opm/output/data/Groups.hpp | 112 - .../opm-common/opm/output/data/Solution.hpp | 65 - .../opm-common/opm/output/data/Wells.hpp | 636 - .../output/eclipse/AggregateActionxData.hpp | 122 - .../eclipse/AggregateConnectionData.hpp | 75 - .../opm/output/eclipse/AggregateGroupData.hpp | 171 - .../opm/output/eclipse/AggregateMSWData.hpp | 115 - .../opm/output/eclipse/AggregateUDQData.hpp | 142 - .../opm/output/eclipse/AggregateWellData.hpp | 110 - .../opm/output/eclipse/DoubHEAD.hpp | 87 - .../output/eclipse/EclipseGridInspector.hpp | 103 - .../opm/output/eclipse/EclipseIO.hpp | 238 - .../opm/output/eclipse/EclipseIOUtil.hpp | 35 - .../opm/output/eclipse/InteHEAD.hpp | 165 - .../output/eclipse/LinearisedOutputTable.hpp | 198 - .../opm/output/eclipse/LogiHEAD.hpp | 115 - .../opm/output/eclipse/RegionCache.hpp | 44 - .../opm/output/eclipse/RestartIO.hpp | 94 - .../opm/output/eclipse/RestartValue.hpp | 98 - .../opm-common/opm/output/eclipse/Summary.hpp | 83 - .../opm-common/opm/output/eclipse/Tables.hpp | 134 - .../output/eclipse/VectorItems/aquifer.hpp | 70 - .../output/eclipse/VectorItems/connection.hpp | 77 - .../output/eclipse/VectorItems/doubhead.hpp | 69 - .../opm/output/eclipse/VectorItems/group.hpp | 92 - .../output/eclipse/VectorItems/intehead.hpp | 137 - .../output/eclipse/VectorItems/logihead.hpp | 48 - .../opm/output/eclipse/VectorItems/msw.hpp | 90 - .../output/eclipse/VectorItems/tabdims.hpp | 76 - .../opm/output/eclipse/VectorItems/well.hpp | 185 - .../opm/output/eclipse/WindowedArray.hpp | 270 - .../opm/output/eclipse/WriteInit.hpp | 60 - .../opm/output/eclipse/WriteRFT.hpp | 89 - .../opm/output/eclipse/WriteRPT.hpp | 46 - .../output/eclipse/WriteRestartHelpers.hpp | 72 - .../opm/parser/eclipse/Deck/Deck.hpp | 182 - .../opm/parser/eclipse/Deck/DeckItem.hpp | 176 - .../opm/parser/eclipse/Deck/DeckKeyword.hpp | 118 - .../opm/parser/eclipse/Deck/DeckOutput.hpp | 64 - .../opm/parser/eclipse/Deck/DeckRecord.hpp | 88 - .../opm/parser/eclipse/Deck/DeckSection.hpp | 122 - .../opm/parser/eclipse/Deck/DeckValue.hpp | 58 - .../opm/parser/eclipse/Deck/UDAValue.hpp | 93 - .../opm/parser/eclipse/Deck/value_status.hpp | 56 - .../parser/eclipse/EclipseState/Aquancon.hpp | 108 - .../parser/eclipse/EclipseState/AquiferCT.hpp | 133 - .../eclipse/EclipseState/AquiferConfig.hpp | 63 - .../parser/eclipse/EclipseState/Aquifetp.hpp | 91 - .../eclipse/EclipseState/EclipseConfig.hpp | 61 - .../eclipse/EclipseState/EclipseState.hpp | 168 - .../eclipse/EclipseState/Edit/EDITNNC.hpp | 60 - .../eclipse/EclipseState/EndpointScaling.hpp | 72 - .../parser/eclipse/EclipseState/Grid/Box.hpp | 85 - .../eclipse/EclipseState/Grid/BoxManager.hpp | 78 - .../eclipse/EclipseState/Grid/EclipseGrid.hpp | 312 - .../eclipse/EclipseState/Grid/FaceDir.hpp | 49 - .../eclipse/EclipseState/Grid/Fault.hpp | 66 - .../EclipseState/Grid/FaultCollection.hpp | 70 - .../eclipse/EclipseState/Grid/FaultFace.hpp | 64 - .../EclipseState/Grid/FieldPropsManager.hpp | 232 - .../eclipse/EclipseState/Grid/GridDims.hpp | 82 - .../EclipseState/Grid/MULTREGTScanner.hpp | 136 - .../eclipse/EclipseState/Grid/MinpvMode.hpp | 35 - .../parser/eclipse/EclipseState/Grid/NNC.hpp | 92 - .../eclipse/EclipseState/Grid/PinchMode.hpp | 40 - .../Grid/SatfuncPropertyInitializers.hpp | 245 - .../eclipse/EclipseState/Grid/TransMult.hpp | 91 - .../EclipseState/IOConfig/IOConfig.hpp | 231 - .../EclipseState/IOConfig/RestartConfig.hpp | 394 - .../eclipse/EclipseState/InitConfig/Equil.hpp | 86 - .../EclipseState/InitConfig/FoamConfig.hpp | 115 - .../EclipseState/InitConfig/InitConfig.hpp | 85 - .../parser/eclipse/EclipseState/Runspec.hpp | 313 - .../EclipseState/Schedule/Action/ASTNode.hpp | 57 - .../EclipseState/Schedule/Action/Actdims.hpp | 59 - .../Schedule/Action/ActionAST.hpp | 71 - .../Schedule/Action/ActionContext.hpp | 60 - .../Schedule/Action/ActionResult.hpp | 121 - .../Schedule/Action/ActionValue.hpp | 60 - .../EclipseState/Schedule/Action/ActionX.hpp | 124 - .../EclipseState/Schedule/Action/Actions.hpp | 75 - .../Schedule/Action/Condition.hpp | 106 - .../EclipseState/Schedule/Action/PyAction.hpp | 79 - .../EclipseState/Schedule/ArrayDimChecker.hpp | 42 - .../EclipseState/Schedule/DynamicState.hpp | 280 - .../EclipseState/Schedule/DynamicVector.hpp | 82 - .../eclipse/EclipseState/Schedule/Events.hpp | 145 - .../EclipseState/Schedule/Group/GConSale.hpp | 99 - .../EclipseState/Schedule/Group/GConSump.hpp | 88 - .../EclipseState/Schedule/Group/GTNode.hpp | 59 - .../EclipseState/Schedule/Group/Group.hpp | 309 - .../EclipseState/Schedule/Group/GuideRate.hpp | 106 - .../Schedule/Group/GuideRateConfig.hpp | 104 - .../Schedule/Group/GuideRateModel.hpp | 123 - .../EclipseState/Schedule/MSW/Segment.hpp | 187 - .../EclipseState/Schedule/MSW/SpiralICD.hpp | 112 - .../EclipseState/Schedule/MSW/Valve.hpp | 109 - .../Schedule/MSW/WellSegments.hpp | 133 - .../eclipse/EclipseState/Schedule/MSW/icd.hpp | 40 - .../MSW/updatingConnectionsWithSegments.hpp | 35 - .../EclipseState/Schedule/MessageLimits.hpp | 158 - .../Schedule/OilVaporizationProperties.hpp | 91 - .../EclipseState/Schedule/RFTConfig.hpp | 119 - .../EclipseState/Schedule/RPTConfig.hpp | 43 - .../EclipseState/Schedule/Schedule.hpp | 484 - .../EclipseState/Schedule/ScheduleTypes.hpp | 94 - .../EclipseState/Schedule/SummaryState.hpp | 118 - .../eclipse/EclipseState/Schedule/TimeMap.hpp | 130 - .../eclipse/EclipseState/Schedule/Tuning.hpp | 206 - .../EclipseState/Schedule/UDQ/UDQASTNode.hpp | 86 - .../EclipseState/Schedule/UDQ/UDQActive.hpp | 166 - .../EclipseState/Schedule/UDQ/UDQAssign.hpp | 88 - .../EclipseState/Schedule/UDQ/UDQConfig.hpp | 118 - .../EclipseState/Schedule/UDQ/UDQContext.hpp | 56 - .../EclipseState/Schedule/UDQ/UDQDefine.hpp | 94 - .../EclipseState/Schedule/UDQ/UDQEnums.hpp | 185 - .../Schedule/UDQ/UDQExpression.hpp | 50 - .../EclipseState/Schedule/UDQ/UDQFunction.hpp | 122 - .../Schedule/UDQ/UDQFunctionTable.hpp | 53 - .../EclipseState/Schedule/UDQ/UDQInput.hpp | 105 - .../EclipseState/Schedule/UDQ/UDQParams.hpp | 79 - .../EclipseState/Schedule/UDQ/UDQSet.hpp | 144 - .../EclipseState/Schedule/VFPInjTable.hpp | 133 - .../EclipseState/Schedule/VFPProdTable.hpp | 215 - .../EclipseState/Schedule/Well/Connection.hpp | 252 - .../Schedule/Well/InjectionControls.hpp | 26 - .../Schedule/Well/ProductionControls.hpp | 26 - .../EclipseState/Schedule/Well/WList.hpp | 53 - .../Schedule/Well/WListManager.hpp | 52 - .../EclipseState/Schedule/Well/Well.hpp | 654 - .../Schedule/Well/WellBrineProperties.hpp | 47 - .../Schedule/Well/WellConnections.hpp | 144 - .../Well/WellEconProductionLimits.hpp | 140 - .../Schedule/Well/WellFoamProperties.hpp | 46 - .../Schedule/Well/WellInjectionProperties.hpp | 34 - .../Schedule/Well/WellPolymerProperties.hpp | 55 - .../Well/WellProductionProperties.hpp | 32 - .../Schedule/Well/WellTestConfig.hpp | 103 - .../Schedule/Well/WellTestState.hpp | 141 - .../Schedule/Well/WellTracerProperties.hpp | 51 - .../SimulationConfig/BCConfig.hpp | 109 - .../SimulationConfig/RockConfig.hpp | 98 - .../SimulationConfig/SimulationConfig.hpp | 80 - .../SimulationConfig/ThresholdPressure.hpp | 100 - .../SummaryConfig/SummaryConfig.hpp | 221 - .../eclipse/EclipseState/Tables/Aqudims.hpp | 152 - .../EclipseState/Tables/AqutabTable.hpp | 37 - .../EclipseState/Tables/BrineDensityTable.hpp | 59 - .../EclipseState/Tables/ColumnSchema.hpp | 68 - .../eclipse/EclipseState/Tables/DenT.hpp | 72 - .../EclipseState/Tables/EnkrvdTable.hpp | 81 - .../EclipseState/Tables/EnptvdTable.hpp | 81 - .../eclipse/EclipseState/Tables/Eqldims.hpp | 108 - .../eclipse/EclipseState/Tables/FlatTable.hpp | 354 - .../EclipseState/Tables/FoamadsTable.hpp | 38 - .../EclipseState/Tables/FoammobTable.hpp | 39 - .../EclipseState/Tables/GasvisctTable.hpp | 39 - .../EclipseState/Tables/ImkrvdTable.hpp | 74 - .../EclipseState/Tables/ImptvdTable.hpp | 80 - .../eclipse/EclipseState/Tables/JFunc.hpp | 70 - .../eclipse/EclipseState/Tables/MiscTable.hpp | 39 - .../eclipse/EclipseState/Tables/MsfnTable.hpp | 40 - .../EclipseState/Tables/OilvisctTable.hpp | 37 - .../EclipseState/Tables/OverburdTable.hpp | 38 - .../eclipse/EclipseState/Tables/PbvdTable.hpp | 37 - .../eclipse/EclipseState/Tables/PdvdTable.hpp | 37 - .../EclipseState/Tables/PlyadsTable.hpp | 37 - .../EclipseState/Tables/PlydhflfTable.hpp | 38 - .../EclipseState/Tables/PlymaxTable.hpp | 38 - .../EclipseState/Tables/PlymwinjTable.hpp | 41 - .../EclipseState/Tables/PlyrockTable.hpp | 54 - .../EclipseState/Tables/PlyshlogTable.hpp | 76 - .../EclipseState/Tables/PlyviscTable.hpp | 37 - .../EclipseState/Tables/PmiscTable.hpp | 40 - .../EclipseState/Tables/PolyInjTable.hpp | 79 - .../eclipse/EclipseState/Tables/PvdgTable.hpp | 38 - .../eclipse/EclipseState/Tables/PvdoTable.hpp | 39 - .../eclipse/EclipseState/Tables/PvdsTable.hpp | 39 - .../eclipse/EclipseState/Tables/PvtgTable.hpp | 39 - .../eclipse/EclipseState/Tables/PvtoTable.hpp | 39 - .../EclipseState/Tables/PvtwsaltTable.hpp | 65 - .../eclipse/EclipseState/Tables/PvtxTable.hpp | 159 - .../eclipse/EclipseState/Tables/Regdims.hpp | 109 - .../EclipseState/Tables/Rock2dTable.hpp | 57 - .../EclipseState/Tables/Rock2dtrTable.hpp | 57 - .../EclipseState/Tables/RocktabTable.hpp | 58 - .../EclipseState/Tables/RockwnodTable.hpp | 36 - .../eclipse/EclipseState/Tables/RsvdTable.hpp | 37 - .../EclipseState/Tables/RtempvdTable.hpp | 37 - .../eclipse/EclipseState/Tables/RvvdTable.hpp | 37 - .../EclipseState/Tables/SaltvdTable.hpp | 37 - .../EclipseState/Tables/SgcwmisTable.hpp | 39 - .../eclipse/EclipseState/Tables/SgfnTable.hpp | 42 - .../eclipse/EclipseState/Tables/SgofTable.hpp | 46 - .../EclipseState/Tables/SgwfnTable.hpp | 43 - .../EclipseState/Tables/SimpleTable.hpp | 87 - .../EclipseState/Tables/SkprpolyTable.hpp | 55 - .../EclipseState/Tables/SkprwatTable.hpp | 42 - .../EclipseState/Tables/SlgofTable.hpp | 46 - .../eclipse/EclipseState/Tables/Sof2Table.hpp | 37 - .../eclipse/EclipseState/Tables/Sof3Table.hpp | 39 - .../Tables/SolventDensityTable.hpp | 58 - .../EclipseState/Tables/SorwmisTable.hpp | 40 - .../EclipseState/Tables/SpecheatTable.hpp | 41 - .../EclipseState/Tables/SpecrockTable.hpp | 38 - .../eclipse/EclipseState/Tables/SsfnTable.hpp | 40 - .../EclipseState/Tables/StandardCond.hpp | 46 - .../eclipse/EclipseState/Tables/SwfnTable.hpp | 43 - .../eclipse/EclipseState/Tables/SwofTable.hpp | 45 - .../eclipse/EclipseState/Tables/Tabdims.hpp | 129 - .../EclipseState/Tables/TableColumn.hpp | 96 - .../EclipseState/Tables/TableContainer.hpp | 116 - .../EclipseState/Tables/TableEnums.hpp | 45 - .../EclipseState/Tables/TableIndex.hpp | 51 - .../EclipseState/Tables/TableManager.hpp | 519 - .../EclipseState/Tables/TableSchema.hpp | 57 - .../EclipseState/Tables/TlpmixpaTable.hpp | 39 - .../EclipseState/Tables/TracerVdTable.hpp | 55 - .../EclipseState/Tables/WatvisctTable.hpp | 35 - .../eclipse/EclipseState/TracerConfig.hpp | 93 - .../eclipse/EclipseState/Util/IOrderSet.hpp | 130 - .../eclipse/EclipseState/Util/OrderedMap.hpp | 205 - .../eclipse/EclipseState/Util/Value.hpp | 111 - .../parser/eclipse/EclipseState/checkDeck.hpp | 49 - .../eclipse/Generator/KeywordGenerator.hpp | 50 - .../eclipse/Generator/KeywordLoader.hpp | 47 - .../opm/parser/eclipse/Parser/ErrorGuard.hpp | 54 - .../eclipse/Parser/InputErrorAction.hpp | 48 - .../parser/eclipse/Parser/ParseContext.hpp | 370 - .../opm/parser/eclipse/Parser/Parser.hpp | 156 - .../opm/parser/eclipse/Parser/ParserConst.hpp | 32 - .../opm/parser/eclipse/Parser/ParserEnums.hpp | 51 - .../opm/parser/eclipse/Parser/ParserItem.hpp | 131 - .../parser/eclipse/Parser/ParserKeyword.hpp | 178 - .../parser/eclipse/Parser/ParserRecord.hpp | 72 - .../opm/parser/eclipse/Python/Python.hpp | 150 - .../opm/parser/eclipse/Units/Dimension.hpp | 62 - .../opm/parser/eclipse/Units/UnitSystem.hpp | 167 - .../opm/parser/eclipse/Units/Units.hpp | 374 - .../opm/parser/eclipse/Utility/Functional.hpp | 239 - .../opm/parser/eclipse/Utility/Stringview.hpp | 289 - .../opm/parser/eclipse/Utility/Typetools.hpp | 85 - .../opm-common/redhat/opm-common.spec | 208 - .../src/opm/common/OpmLog/CounterLog.cpp | 63 - .../src/opm/common/OpmLog/EclipsePRTLog.cpp | 77 - .../src/opm/common/OpmLog/LogBackend.cpp | 98 - .../src/opm/common/OpmLog/LogUtil.cpp | 99 - .../src/opm/common/OpmLog/Logger.cpp | 124 - .../src/opm/common/OpmLog/OpmLog.cpp | 222 - .../src/opm/common/OpmLog/StreamLog.cpp | 67 - .../src/opm/common/OpmLog/TimerLog.cpp | 62 - .../common/data/SimulationDataContainer.cpp | 247 - .../opm/common/utility/ActiveGridCells.cpp | 70 - .../src/opm/common/utility/FileSystem.cpp | 180 - .../src/opm/common/utility/OpmInputError.cpp | 87 - .../src/opm/common/utility/TimeService.cpp | 209 - .../numeric/MonotCubicInterpolator.cpp | 732 - .../utility/numeric/calculateCellVol.cpp | 144 - .../common/utility/parameters/Parameter.cpp | 72 - .../utility/parameters/ParameterGroup.cpp | 331 - .../utility/parameters/ParameterTools.cpp | 53 - .../opm-common/src/opm/io/eclipse/EGrid.cpp | 581 - .../opm-common/src/opm/io/eclipse/EInit.cpp | 196 - .../opm-common/src/opm/io/eclipse/ERft.cpp | 438 - .../opm-common/src/opm/io/eclipse/ERsm.cpp | 338 - .../opm-common/src/opm/io/eclipse/ERst.cpp | 430 - .../opm-common/src/opm/io/eclipse/ESmry.cpp | 1300 - .../src/opm/io/eclipse/ESmry_write_rsm.cpp | 256 - .../opm-common/src/opm/io/eclipse/EclFile.cpp | 646 - .../src/opm/io/eclipse/EclOutput.cpp | 725 - .../opm-common/src/opm/io/eclipse/EclUtil.cpp | 680 - .../src/opm/io/eclipse/ExtESmry.cpp | 478 - .../src/opm/io/eclipse/OutputStream.cpp | 814 - .../src/opm/io/eclipse/SummaryNode.cpp | 249 - .../src/opm/io/eclipse/rst/connection.cpp | 113 - .../src/opm/io/eclipse/rst/group.cpp | 98 - .../src/opm/io/eclipse/rst/header.cpp | 130 - .../src/opm/io/eclipse/rst/segment.cpp | 93 - .../src/opm/io/eclipse/rst/state.cpp | 258 - .../src/opm/io/eclipse/rst/well.cpp | 173 - .../opm-common/src/opm/json/JsonObject.cpp | 210 - .../src/opm/output/data/Solution.cpp | 77 - .../output/eclipse/AggregateActionxData.cpp | 681 - .../eclipse/AggregateConnectionData.cpp | 285 - .../opm/output/eclipse/AggregateGroupData.cpp | 564 - .../opm/output/eclipse/AggregateMSWData.cpp | 931 - .../opm/output/eclipse/AggregateUDQData.cpp | 614 - .../opm/output/eclipse/AggregateWellData.cpp | 857 - .../opm/output/eclipse/CreateActionxDims.cpp | 139 - .../src/opm/output/eclipse/CreateDoubHead.cpp | 143 - .../src/opm/output/eclipse/CreateInteHead.cpp | 471 - .../src/opm/output/eclipse/CreateLogiHead.cpp | 62 - .../src/opm/output/eclipse/CreateUdqDims.cpp | 110 - .../src/opm/output/eclipse/DoubHEAD.cpp | 643 - .../output/eclipse/EclipseGridInspector.cpp | 350 - .../src/opm/output/eclipse/EclipseIO.cpp | 309 - .../src/opm/output/eclipse/InteHEAD.cpp | 800 - .../output/eclipse/LinearisedOutputTable.cpp | 134 - .../src/opm/output/eclipse/LoadRestart.cpp | 1477 - .../src/opm/output/eclipse/LogiHEAD.cpp | 220 - .../src/opm/output/eclipse/RegionCache.cpp | 58 - .../src/opm/output/eclipse/RestartIO.cpp | 636 - .../src/opm/output/eclipse/RestartValue.cpp | 105 - .../src/opm/output/eclipse/Summary.cpp | 2706 -- .../src/opm/output/eclipse/Tables.cpp | 2405 -- .../src/opm/output/eclipse/WriteInit.cpp | 593 - .../src/opm/output/eclipse/WriteRFT.cpp | 413 - .../src/opm/output/eclipse/WriteRPT.cpp | 46 - .../opm/output/eclipse/report/WELSPECS.cpp | 690 - .../src/opm/parser/eclipse/Deck/Deck.cpp | 316 - .../src/opm/parser/eclipse/Deck/DeckItem.cpp | 534 - .../opm/parser/eclipse/Deck/DeckKeyword.cpp | 347 - .../opm/parser/eclipse/Deck/DeckOutput.cpp | 154 - .../opm/parser/eclipse/Deck/DeckRecord.cpp | 184 - .../opm/parser/eclipse/Deck/DeckSection.cpp | 85 - .../src/opm/parser/eclipse/Deck/DeckValue.cpp | 99 - .../src/opm/parser/eclipse/Deck/UDAValue.cpp | 169 - .../parser/eclipse/EclipseState/Aquancon.cpp | 175 - .../parser/eclipse/EclipseState/AquiferCT.cpp | 178 - .../eclipse/EclipseState/AquiferConfig.cpp | 73 - .../parser/eclipse/EclipseState/Aquifetp.cpp | 116 - .../eclipse/EclipseState/EclipseConfig.cpp | 75 - .../eclipse/EclipseState/EclipseState.cpp | 276 - .../eclipse/EclipseState/Edit/EDITNNC.cpp | 101 - .../eclipse/EclipseState/EndpointScaling.cpp | 131 - .../parser/eclipse/EclipseState/Grid/Box.cpp | 233 - .../eclipse/EclipseState/Grid/BoxManager.cpp | 70 - .../eclipse/EclipseState/Grid/EclipseGrid.cpp | 1843 - .../eclipse/EclipseState/Grid/FaceDir.cpp | 77 - .../eclipse/EclipseState/Grid/Fault.cpp | 80 - .../EclipseState/Grid/FaultCollection.cpp | 127 - .../eclipse/EclipseState/Grid/FaultFace.cpp | 100 - .../eclipse/EclipseState/Grid/FieldProps.cpp | 1159 - .../eclipse/EclipseState/Grid/FieldProps.hpp | 371 - .../EclipseState/Grid/FieldPropsManager.cpp | 137 - .../eclipse/EclipseState/Grid/GridDims.cpp | 164 - .../EclipseState/Grid/MULTREGTScanner.cpp | 347 - .../parser/eclipse/EclipseState/Grid/NNC.cpp | 87 - .../eclipse/EclipseState/Grid/Operate.cpp | 139 - .../eclipse/EclipseState/Grid/Operate.hpp | 34 - .../eclipse/EclipseState/Grid/PinchMode.cpp | 63 - .../Grid/SatfuncPropertyInitializers.cpp | 1457 - .../eclipse/EclipseState/Grid/TransMult.cpp | 162 - .../EclipseState/Grid/setKeywordBox.cpp | 43 - .../EclipseState/Grid/setKeywordBox.hpp | 31 - .../EclipseState/IOConfig/IOConfig.cpp | 306 - .../EclipseState/IOConfig/RestartConfig.cpp | 752 - .../eclipse/EclipseState/InitConfig/Equil.cpp | 123 - .../EclipseState/InitConfig/FoamConfig.cpp | 233 - .../EclipseState/InitConfig/InitConfig.cpp | 150 - .../parser/eclipse/EclipseState/Runspec.cpp | 399 - .../EclipseState/Schedule/Action/ASTNode.cpp | 170 - .../EclipseState/Schedule/Action/Actdims.cpp | 82 - .../Schedule/Action/ActionAST.cpp | 67 - .../Schedule/Action/ActionContext.cpp | 61 - .../Schedule/Action/ActionParser.cpp | 285 - .../Schedule/Action/ActionParser.hpp | 81 - .../Schedule/Action/ActionResult.cpp | 156 - .../Schedule/Action/ActionValue.cpp | 140 - .../EclipseState/Schedule/Action/ActionX.cpp | 200 - .../EclipseState/Schedule/Action/Actions.cpp | 135 - .../Schedule/Action/Condition.cpp | 140 - .../EclipseState/Schedule/Action/PyAction.cpp | 137 - .../EclipseState/Schedule/ArrayDimChecker.cpp | 169 - .../eclipse/EclipseState/Schedule/Events.cpp | 57 - .../EclipseState/Schedule/Group/GConSale.cpp | 95 - .../EclipseState/Schedule/Group/GConSump.cpp | 80 - .../EclipseState/Schedule/Group/GTNode.cpp | 64 - .../EclipseState/Schedule/Group/Group.cpp | 649 - .../EclipseState/Schedule/Group/GuideRate.cpp | 242 - .../Schedule/Group/GuideRateConfig.cpp | 115 - .../Schedule/Group/GuideRateModel.cpp | 308 - .../EclipseState/Schedule/MSW/Compsegs.cpp | 290 - .../EclipseState/Schedule/MSW/Compsegs.hpp | 77 - .../EclipseState/Schedule/MSW/Segment.cpp | 350 - .../EclipseState/Schedule/MSW/SpiralICD.cpp | 229 - .../EclipseState/Schedule/MSW/Valve.cpp | 193 - .../Schedule/MSW/WellSegments.cpp | 616 - .../eclipse/EclipseState/Schedule/MSW/icd.cpp | 50 - .../MSW/updatingConnectionsWithSegments.cpp | 39 - .../EclipseState/Schedule/MessageLimits.cpp | 222 - .../Schedule/OilVaporizationProperties.cpp | 137 - .../EclipseState/Schedule/RFTConfig.cpp | 356 - .../EclipseState/Schedule/RPTConfig.cpp | 61 - .../EclipseState/Schedule/Schedule.cpp | 3359 -- .../EclipseState/Schedule/ScheduleTypes.cpp | 261 - .../EclipseState/Schedule/SummaryState.cpp | 357 - .../eclipse/EclipseState/Schedule/TimeMap.cpp | 469 - .../EclipseState/Schedule/UDQ/UDQASTNode.cpp | 320 - .../EclipseState/Schedule/UDQ/UDQActive.cpp | 196 - .../EclipseState/Schedule/UDQ/UDQAssign.cpp | 83 - .../EclipseState/Schedule/UDQ/UDQConfig.cpp | 293 - .../EclipseState/Schedule/UDQ/UDQContext.cpp | 89 - .../EclipseState/Schedule/UDQ/UDQDefine.cpp | 263 - .../EclipseState/Schedule/UDQ/UDQEnums.cpp | 375 - .../EclipseState/Schedule/UDQ/UDQFunction.cpp | 541 - .../Schedule/UDQ/UDQFunctionTable.cpp | 163 - .../EclipseState/Schedule/UDQ/UDQInput.cpp | 96 - .../EclipseState/Schedule/UDQ/UDQParams.cpp | 139 - .../EclipseState/Schedule/UDQ/UDQParser.cpp | 328 - .../EclipseState/Schedule/UDQ/UDQParser.hpp | 100 - .../EclipseState/Schedule/UDQ/UDQSet.cpp | 505 - .../EclipseState/Schedule/VFPInjTable.cpp | 332 - .../EclipseState/Schedule/VFPProdTable.cpp | 574 - .../EclipseState/Schedule/Well/Connection.cpp | 420 - .../EclipseState/Schedule/Well/WList.cpp | 63 - .../Schedule/Well/WListManager.cpp | 69 - .../EclipseState/Schedule/Well/Well.cpp | 1548 - .../Schedule/Well/WellBrineProperties.cpp | 46 - .../Schedule/Well/WellConnections.cpp | 579 - .../Well/WellEconProductionLimits.cpp | 295 - .../Schedule/Well/WellFoamProperties.cpp | 46 - .../Schedule/Well/WellInjectionProperties.cpp | 324 - .../Schedule/Well/WellPolymerProperties.cpp | 80 - .../Well/WellProductionProperties.cpp | 371 - .../Schedule/Well/WellTestConfig.cpp | 166 - .../Schedule/Well/WellTestState.cpp | 237 - .../Schedule/Well/WellTracerProperties.cpp | 58 - .../EclipseState/Schedule/Well/injection.cpp | 72 - .../EclipseState/Schedule/Well/injection.hpp | 36 - .../EclipseState/Schedule/eval_uda.cpp | 79 - .../EclipseState/Schedule/eval_uda.hpp | 45 - .../SimulationConfig/BCConfig.cpp | 149 - .../SimulationConfig/RockConfig.cpp | 159 - .../SimulationConfig/SimulationConfig.cpp | 146 - .../SimulationConfig/ThresholdPressure.cpp | 226 - .../SummaryConfig/SummaryConfig.cpp | 1178 - .../eclipse/EclipseState/Tables/Bdensity.cpp | 117 - .../EclipseState/Tables/BrineDensityTable.cpp | 52 - .../EclipseState/Tables/ColumnSchema.cpp | 139 - .../eclipse/EclipseState/Tables/DenT.cpp | 71 - .../eclipse/EclipseState/Tables/JFunc.cpp | 122 - .../EclipseState/Tables/PolyInjTables.cpp | 267 - .../EclipseState/Tables/PvtwsaltTable.cpp | 139 - .../eclipse/EclipseState/Tables/PvtxTable.cpp | 172 - .../EclipseState/Tables/Rock2dTable.cpp | 74 - .../EclipseState/Tables/Rock2dtrTable.cpp | 75 - .../EclipseState/Tables/SimpleTable.cpp | 202 - .../Tables/SolventDensityTable.cpp | 52 - .../EclipseState/Tables/StandardCond.cpp | 47 - .../EclipseState/Tables/TableColumn.cpp | 354 - .../EclipseState/Tables/TableContainer.cpp | 121 - .../EclipseState/Tables/TableIndex.cpp | 60 - .../EclipseState/Tables/TableManager.cpp | 1192 - .../EclipseState/Tables/TableSchema.cpp | 56 - .../eclipse/EclipseState/Tables/Tables.cpp | 1389 - .../eclipse/EclipseState/TracerConfig.cpp | 108 - .../parser/eclipse/EclipseState/checkDeck.cpp | 72 - .../eclipse/Generator/KeywordGenerator.cpp | 206 - .../eclipse/Generator/KeywordLoader.cpp | 94 - .../opm/parser/eclipse/Parser/ErrorGuard.cpp | 79 - .../parser/eclipse/Parser/ParseContext.cpp | 361 - .../src/opm/parser/eclipse/Parser/Parser.cpp | 1331 - .../opm/parser/eclipse/Parser/ParserEnums.cpp | 105 - .../opm/parser/eclipse/Parser/ParserItem.cpp | 741 - .../parser/eclipse/Parser/ParserKeyword.cpp | 849 - .../parser/eclipse/Parser/ParserRecord.cpp | 186 - .../Parser/createDefaultKeywordList.cpp | 65 - .../parser/eclipse/Parser/raw/RawConsts.hpp | 97 - .../parser/eclipse/Parser/raw/RawEnums.hpp | 39 - .../parser/eclipse/Parser/raw/RawKeyword.cpp | 176 - .../parser/eclipse/Parser/raw/RawKeyword.hpp | 82 - .../parser/eclipse/Parser/raw/RawRecord.cpp | 116 - .../parser/eclipse/Parser/raw/RawRecord.hpp | 81 - .../parser/eclipse/Parser/raw/StarToken.cpp | 162 - .../parser/eclipse/Parser/raw/StarToken.hpp | 89 - .../opm/parser/eclipse/Python/EmbedModule.hpp | 58 - .../opm/parser/eclipse/Python/PyRunModule.cpp | 81 - .../opm/parser/eclipse/Python/PyRunModule.hpp | 56 - .../src/opm/parser/eclipse/Python/Python.cpp | 60 - .../parser/eclipse/Python/PythonInterp.cpp | 89 - .../parser/eclipse/Python/PythonInterp.hpp | 95 - .../opm/parser/eclipse/Units/Dimension.cpp | 96 - .../opm/parser/eclipse/Units/UnitSystem.cpp | 1306 - .../opm/parser/eclipse/Utility/Functional.cpp | 67 - .../opm/parser/eclipse/Utility/Stringview.cpp | 9 - .../opm/parser/eclipse/keyword_list.argv.in | 1 - .../share/keywords/000_Eclipse100/A/ACTDIMS | 29 - .../share/keywords/000_Eclipse100/A/ACTION | 25 - .../share/keywords/000_Eclipse100/A/ACTIONG | 39 - .../share/keywords/000_Eclipse100/A/ACTIONR | 43 - .../share/keywords/000_Eclipse100/A/ACTIONS | 43 - .../share/keywords/000_Eclipse100/A/ACTIONW | 39 - .../share/keywords/000_Eclipse100/A/ACTIONX | 32 - .../share/keywords/000_Eclipse100/A/ACTNUM | 9 - .../share/keywords/000_Eclipse100/A/ACTPARAM | 11 - .../share/keywords/000_Eclipse100/A/ADD | 44 - .../share/keywords/000_Eclipse100/A/ADDREG | 34 - .../share/keywords/000_Eclipse100/A/ADDZCORN | 57 - .../share/keywords/000_Eclipse100/A/ADSALNOD | 18 - .../share/keywords/000_Eclipse100/A/ADSORP | 54 - .../share/keywords/000_Eclipse100/A/AITS | 7 - .../share/keywords/000_Eclipse100/A/AITSOFF | 7 - .../share/keywords/000_Eclipse100/A/ALKADS | 21 - .../share/keywords/000_Eclipse100/A/ALKALINE | 6 - .../share/keywords/000_Eclipse100/A/ALKROCK | 16 - .../share/keywords/000_Eclipse100/A/ALL | 6 - .../share/keywords/000_Eclipse100/A/ALPOLADS | 21 - .../share/keywords/000_Eclipse100/A/ALSURFAD | 21 - .../share/keywords/000_Eclipse100/A/ALSURFST | 21 - .../share/keywords/000_Eclipse100/A/AMALGAM | 13 - .../share/keywords/000_Eclipse100/A/API | 6 - .../share/keywords/000_Eclipse100/A/APIGROUP | 14 - .../share/keywords/000_Eclipse100/A/APILIM | 32 - .../share/keywords/000_Eclipse100/A/APIVD | 21 - .../share/keywords/000_Eclipse100/A/AQANCONL | 59 - .../share/keywords/000_Eclipse100/A/AQANNC | 30 - .../share/keywords/000_Eclipse100/A/AQANTRC | 20 - .../share/keywords/000_Eclipse100/A/AQUALIST | 17 - .../share/keywords/000_Eclipse100/A/AQUANCON | 57 - .../share/keywords/000_Eclipse100/A/AQUCHGAS | 38 - .../share/keywords/000_Eclipse100/A/AQUCHWAT | 84 - .../share/keywords/000_Eclipse100/A/AQUCON | 65 - .../share/keywords/000_Eclipse100/A/AQUCT | 78 - .../share/keywords/000_Eclipse100/A/AQUCWFAC | 20 - .../share/keywords/000_Eclipse100/A/AQUDIMS | 49 - .../share/keywords/000_Eclipse100/A/AQUFET | 76 - .../share/keywords/000_Eclipse100/A/AQUFETP | 54 - .../share/keywords/000_Eclipse100/A/AQUFLUX | 38 - .../000_Eclipse100/A/AQUIFER_PROBE_ANALYTIC | 20 - .../000_Eclipse100/A/AQUIFER_PROBE_NUMERIC | 16 - .../share/keywords/000_Eclipse100/A/AQUNNC | 72 - .../share/keywords/000_Eclipse100/A/AQUNUM | 62 - .../share/keywords/000_Eclipse100/A/AQUTAB | 22 - .../share/keywords/000_Eclipse100/A/AUTOCOAR | 44 - .../share/keywords/000_Eclipse100/A/AUTOREF | 28 - .../share/keywords/000_Eclipse100/B/BDENSITY | 18 - .../share/keywords/000_Eclipse100/B/BGGI | 23 - .../share/keywords/000_Eclipse100/B/BIGMODEL | 6 - .../share/keywords/000_Eclipse100/B/BLACKOIL | 6 - .../keywords/000_Eclipse100/B/BLOCK_PROBE | 152 - .../share/keywords/000_Eclipse100/B/BOGI | 23 - .../share/keywords/000_Eclipse100/B/BOUNDARY | 47 - .../share/keywords/000_Eclipse100/B/BOX | 38 - .../share/keywords/000_Eclipse100/B/BPARA | 6 - .../share/keywords/000_Eclipse100/B/BPIDIMS | 19 - .../share/keywords/000_Eclipse100/B/BRANPROP | 30 - .../share/keywords/000_Eclipse100/B/BRINE | 7 - .../share/keywords/000_Eclipse100/B/BTOBALFA | 14 - .../share/keywords/000_Eclipse100/B/BTOBALFV | 10 - .../share/keywords/000_Eclipse100/C/CALTRAC | 13 - .../share/keywords/000_Eclipse100/C/CARFIN | 58 - .../share/keywords/000_Eclipse100/C/CART | 6 - .../share/keywords/000_Eclipse100/C/CBMOPTS | 54 - .../share/keywords/000_Eclipse100/C/CECON | 72 - .../share/keywords/000_Eclipse100/C/CECONT | 80 - .../share/keywords/000_Eclipse100/C/COAL | 6 - .../share/keywords/000_Eclipse100/C/COALADS | 22 - .../share/keywords/000_Eclipse100/C/COALNUM | 9 - .../share/keywords/000_Eclipse100/C/COALPP | 22 - .../share/keywords/000_Eclipse100/C/COARSEN | 45 - .../share/keywords/000_Eclipse100/C/COLLAPSE | 13 - .../share/keywords/000_Eclipse100/C/COLUMNS | 26 - .../share/keywords/000_Eclipse100/C/COMPDAT | 77 - .../share/keywords/000_Eclipse100/C/COMPDATX | 85 - .../share/keywords/000_Eclipse100/C/COMPFLSH | 49 - .../share/keywords/000_Eclipse100/C/COMPIMB | 35 - .../share/keywords/000_Eclipse100/C/COMPINJK | 38 - .../share/keywords/000_Eclipse100/C/COMPLMPL | 41 - .../share/keywords/000_Eclipse100/C/COMPLUMP | 32 - .../share/keywords/000_Eclipse100/C/COMPOFF | 6 - .../share/keywords/000_Eclipse100/C/COMPORD | 17 - .../share/keywords/000_Eclipse100/C/COMPRIV | 24 - .../share/keywords/000_Eclipse100/C/COMPRP | 56 - .../share/keywords/000_Eclipse100/C/COMPRPL | 60 - .../share/keywords/000_Eclipse100/C/COMPSEGL | 69 - .../share/keywords/000_Eclipse100/C/COMPSEGS | 65 - .../share/keywords/000_Eclipse100/C/COMPVE | 71 - .../share/keywords/000_Eclipse100/C/COMPVEL | 75 - .../000_Eclipse100/C/CONNECTION_PROBE | 150 - .../share/keywords/000_Eclipse100/C/COORD | 10 - .../share/keywords/000_Eclipse100/C/COORDSYS | 40 - .../share/keywords/000_Eclipse100/C/COPY | 44 - .../share/keywords/000_Eclipse100/C/COPYBOX | 62 - .../share/keywords/000_Eclipse100/C/COPYREG | 33 - .../share/keywords/000_Eclipse100/C/CPIFACT | 11 - .../share/keywords/000_Eclipse100/C/CPIFACTL | 12 - .../share/keywords/000_Eclipse100/C/CPR | 26 - .../share/keywords/000_Eclipse100/C/CRITPERM | 14 - .../share/keywords/000_Eclipse100/C/CSKIN | 38 - .../share/keywords/000_Eclipse100/D/DATE | 6 - .../share/keywords/000_Eclipse100/D/DATES | 25 - .../share/keywords/000_Eclipse100/D/DATUM | 14 - .../share/keywords/000_Eclipse100/D/DATUMR | 12 - .../share/keywords/000_Eclipse100/D/DATUMRX | 17 - .../share/keywords/000_Eclipse100/D/DCQDEFN | 14 - .../share/keywords/000_Eclipse100/D/DEBUG | 454 - .../share/keywords/000_Eclipse100/D/DELAYACT | 33 - .../share/keywords/000_Eclipse100/D/DENSITY | 30 - .../share/keywords/000_Eclipse100/D/DEPTH | 9 - .../share/keywords/000_Eclipse100/D/DEPTHTAB | 17 - .../share/keywords/000_Eclipse100/D/DEPTHZ | 11 - .../share/keywords/000_Eclipse100/D/DIAGDISP | 6 - .../share/keywords/000_Eclipse100/D/DIFF | 18 - .../share/keywords/000_Eclipse100/D/DIFFC | 50 - .../share/keywords/000_Eclipse100/D/DIFFCOAL | 28 - .../share/keywords/000_Eclipse100/D/DIFFDP | 6 - .../share/keywords/000_Eclipse100/D/DIFFMMF | 12 - .../share/keywords/000_Eclipse100/D/DIFFMR | 11 - .../share/keywords/000_Eclipse100/D/DIFFMTHT | 11 - .../share/keywords/000_Eclipse100/D/DIFFMX | 11 - .../share/keywords/000_Eclipse100/D/DIFFMY | 11 - .../share/keywords/000_Eclipse100/D/DIFFMZ | 11 - .../share/keywords/000_Eclipse100/D/DIFFR | 10 - .../share/keywords/000_Eclipse100/D/DIFFTHT | 10 - .../share/keywords/000_Eclipse100/D/DIFFUSE | 6 - .../share/keywords/000_Eclipse100/D/DIFFX | 10 - .../share/keywords/000_Eclipse100/D/DIFFY | 10 - .../share/keywords/000_Eclipse100/D/DIFFZ | 10 - .../share/keywords/000_Eclipse100/D/DIMENS | 21 - .../share/keywords/000_Eclipse100/D/DIMPES | 27 - .../share/keywords/000_Eclipse100/D/DIMPLICT | 6 - .../share/keywords/000_Eclipse100/D/DISGAS | 6 - .../share/keywords/000_Eclipse100/D/DISPDIMS | 24 - .../share/keywords/000_Eclipse100/D/DISPERSE | 26 - .../share/keywords/000_Eclipse100/D/DOMAINS | 10 - .../share/keywords/000_Eclipse100/D/DPGRID | 6 - .../share/keywords/000_Eclipse100/D/DPKRMOD | 29 - .../share/keywords/000_Eclipse100/D/DPNUM | 14 - .../share/keywords/000_Eclipse100/D/DR | 10 - .../share/keywords/000_Eclipse100/D/DRILPRI | 66 - .../share/keywords/000_Eclipse100/D/DRSDT | 19 - .../share/keywords/000_Eclipse100/D/DRSDTR | 22 - .../share/keywords/000_Eclipse100/D/DRV | 10 - .../share/keywords/000_Eclipse100/D/DRVDT | 14 - .../share/keywords/000_Eclipse100/D/DRVDTR | 17 - .../share/keywords/000_Eclipse100/D/DSPDEINT | 6 - .../share/keywords/000_Eclipse100/D/DTHETA | 11 - .../share/keywords/000_Eclipse100/D/DTHETAV | 11 - .../share/keywords/000_Eclipse100/D/DUALPERM | 6 - .../share/keywords/000_Eclipse100/D/DUALPORO | 6 - .../share/keywords/000_Eclipse100/D/DUMPCUPL | 13 - .../share/keywords/000_Eclipse100/D/DUMPFLUX | 6 - .../share/keywords/000_Eclipse100/D/DX | 10 - .../share/keywords/000_Eclipse100/D/DXV | 10 - .../share/keywords/000_Eclipse100/D/DY | 10 - .../share/keywords/000_Eclipse100/D/DYNAMICR | 11 - .../share/keywords/000_Eclipse100/D/DYNRDIMS | 24 - .../share/keywords/000_Eclipse100/D/DYV | 10 - .../share/keywords/000_Eclipse100/D/DZ | 10 - .../share/keywords/000_Eclipse100/D/DZMATRIX | 11 - .../share/keywords/000_Eclipse100/D/DZMTRX | 11 - .../share/keywords/000_Eclipse100/D/DZMTRXV | 11 - .../share/keywords/000_Eclipse100/D/DZNET | 10 - .../share/keywords/000_Eclipse100/E/ECHO | 13 - .../share/keywords/000_Eclipse100/E/ECLMC | 6 - .../share/keywords/000_Eclipse100/E/EDIT | 4 - .../share/keywords/000_Eclipse100/E/EDITNNC | 70 - .../share/keywords/000_Eclipse100/E/EDITNNCR | 70 - .../share/keywords/000_Eclipse100/E/EHYSTR | 70 - .../share/keywords/000_Eclipse100/E/EHYSTRR | 27 - .../share/keywords/000_Eclipse100/E/END | 13 - .../share/keywords/000_Eclipse100/E/ENDACTIO | 7 - .../share/keywords/000_Eclipse100/E/ENDBOX | 11 - .../share/keywords/000_Eclipse100/E/ENDDYN | 7 - .../share/keywords/000_Eclipse100/E/ENDFIN | 11 - .../share/keywords/000_Eclipse100/E/ENDINC | 13 - .../share/keywords/000_Eclipse100/E/ENDNUM | 9 - .../000_Eclipse100/E/ENDPOINT_SPECIFIERS | 205 - .../share/keywords/000_Eclipse100/E/ENDSCALE | 34 - .../share/keywords/000_Eclipse100/E/ENDSKIP | 14 - .../share/keywords/000_Eclipse100/E/ENKRVD | 28 - .../share/keywords/000_Eclipse100/E/ENPCVD | 23 - .../share/keywords/000_Eclipse100/E/ENPTVD | 29 - .../share/keywords/000_Eclipse100/E/ENSPCVD | 23 - .../share/keywords/000_Eclipse100/E/EPSDBGS | 52 - .../share/keywords/000_Eclipse100/E/EPSDEBUG | 49 - .../share/keywords/000_Eclipse100/E/EQLDIMS | 34 - .../share/keywords/000_Eclipse100/E/EQLNUM | 9 - .../share/keywords/000_Eclipse100/E/EQLOPTS | 25 - .../share/keywords/000_Eclipse100/E/EQLZCORN | 58 - .../share/keywords/000_Eclipse100/E/EQUALREG | 34 - .../share/keywords/000_Eclipse100/E/EQUALS | 44 - .../share/keywords/000_Eclipse100/E/EQUIL | 65 - .../share/keywords/000_Eclipse100/E/ESSNODE | 20 - .../share/keywords/000_Eclipse100/E/EXCAVATE | 14 - .../share/keywords/000_Eclipse100/E/EXCEL | 6 - .../share/keywords/000_Eclipse100/E/EXTFIN | 49 - .../share/keywords/000_Eclipse100/E/EXTHOST | 9 - .../share/keywords/000_Eclipse100/E/EXTRAPMS | 21 - .../share/keywords/000_Eclipse100/E/EXTREPGL | 9 - .../share/keywords/000_Eclipse100/F/FAULTDIM | 14 - .../share/keywords/000_Eclipse100/F/FAULTS | 40 - .../share/keywords/000_Eclipse100/F/FBHPDEF | 19 - .../share/keywords/000_Eclipse100/F/FHERCHBL | 23 - .../share/keywords/000_Eclipse100/F/FIELD | 6 - .../keywords/000_Eclipse100/F/FIELD_PROBE | 287 - .../share/keywords/000_Eclipse100/F/FILEUNIT | 18 - .../share/keywords/000_Eclipse100/F/FILLEPS | 6 - .../share/keywords/000_Eclipse100/F/FIPNUM | 9 - .../share/keywords/000_Eclipse100/F/FIPOWG | 6 - .../share/keywords/000_Eclipse100/F/FIPSEP | 62 - .../share/keywords/000_Eclipse100/F/FIP_PROBE | 10 - .../share/keywords/000_Eclipse100/F/FLUXNUM | 9 - .../share/keywords/000_Eclipse100/F/FLUXREG | 9 - .../share/keywords/000_Eclipse100/F/FLUXTYPE | 7 - .../share/keywords/000_Eclipse100/F/FMTHMD | 6 - .../share/keywords/000_Eclipse100/F/FMTIN | 6 - .../share/keywords/000_Eclipse100/F/FMTOUT | 6 - .../share/keywords/000_Eclipse100/F/FMWSET | 6 - .../share/keywords/000_Eclipse100/F/FOAM | 6 - .../share/keywords/000_Eclipse100/F/FOAMADS | 21 - .../share/keywords/000_Eclipse100/F/FOAMDCYO | 21 - .../share/keywords/000_Eclipse100/F/FOAMDCYW | 21 - .../share/keywords/000_Eclipse100/F/FOAMFCN | 22 - .../share/keywords/000_Eclipse100/F/FOAMFRM | 20 - .../share/keywords/000_Eclipse100/F/FOAMFSC | 29 - .../share/keywords/000_Eclipse100/F/FOAMFSO | 21 - .../share/keywords/000_Eclipse100/F/FOAMFST | 21 - .../share/keywords/000_Eclipse100/F/FOAMFSW | 21 - .../share/keywords/000_Eclipse100/F/FOAMMOB | 21 - .../share/keywords/000_Eclipse100/F/FOAMMOBP | 21 - .../share/keywords/000_Eclipse100/F/FOAMMOBS | 21 - .../share/keywords/000_Eclipse100/F/FOAMOPTS | 18 - .../share/keywords/000_Eclipse100/F/FOAMROCK | 22 - .../share/keywords/000_Eclipse100/F/FORMFEED | 21 - .../share/keywords/000_Eclipse100/F/FRICTION | 19 - .../share/keywords/000_Eclipse100/F/FULLIMP | 6 - .../share/keywords/000_Eclipse100/G/GAS | 6 - .../share/keywords/000_Eclipse100/G/GASBEGIN | 6 - .../share/keywords/000_Eclipse100/G/GASCONC | 10 - .../share/keywords/000_Eclipse100/G/GASEND | 6 - .../share/keywords/000_Eclipse100/G/GASFCOMP | 38 - .../share/keywords/000_Eclipse100/G/GASFDECR | 69 - .../share/keywords/000_Eclipse100/G/GASFDELC | 13 - .../share/keywords/000_Eclipse100/G/GASFIELD | 19 - .../share/keywords/000_Eclipse100/G/GASFTARG | 69 - .../share/keywords/000_Eclipse100/G/GASMONTH | 18 - .../share/keywords/000_Eclipse100/G/GASPERIO | 55 - .../share/keywords/000_Eclipse100/G/GASSATC | 10 - .../share/keywords/000_Eclipse100/G/GASYEAR | 50 - .../share/keywords/000_Eclipse100/G/GCALECON | 29 - .../share/keywords/000_Eclipse100/G/GCONCAL | 28 - .../share/keywords/000_Eclipse100/G/GCONENG | 18 - .../share/keywords/000_Eclipse100/G/GCONINJE | 72 - .../share/keywords/000_Eclipse100/G/GCONPRI | 101 - .../share/keywords/000_Eclipse100/G/GCONPROD | 91 - .../share/keywords/000_Eclipse100/G/GCONSALE | 34 - .../share/keywords/000_Eclipse100/G/GCONSUMP | 26 - .../share/keywords/000_Eclipse100/G/GCONTOL | 27 - .../share/keywords/000_Eclipse100/G/GCUTBACK | 41 - .../share/keywords/000_Eclipse100/G/GCUTBACT | 53 - .../share/keywords/000_Eclipse100/G/GCVD | 21 - .../share/keywords/000_Eclipse100/G/GDCQ | 21 - .../share/keywords/000_Eclipse100/G/GDCQECON | 16 - .../share/keywords/000_Eclipse100/G/GDFILE | 18 - .../share/keywords/000_Eclipse100/G/GDIMS | 14 - .../share/keywords/000_Eclipse100/G/GDORIENT | 34 - .../share/keywords/000_Eclipse100/G/GDRILPOT | 21 - .../share/keywords/000_Eclipse100/G/GECON | 52 - .../share/keywords/000_Eclipse100/G/GECONT | 71 - .../share/keywords/000_Eclipse100/G/GEFAC | 22 - .../share/keywords/000_Eclipse100/G/GETDATA | 8 - .../share/keywords/000_Eclipse100/G/GETGLOB | 6 - .../share/keywords/000_Eclipse100/G/GI | 9 - .../share/keywords/000_Eclipse100/G/GIALL | 28 - .../share/keywords/000_Eclipse100/G/GIMODEL | 6 - .../share/keywords/000_Eclipse100/G/GINODE | 20 - .../share/keywords/000_Eclipse100/G/GLIFTLIM | 22 - .../share/keywords/000_Eclipse100/G/GLIFTOPT | 22 - .../share/keywords/000_Eclipse100/G/GMWSET | 6 - .../share/keywords/000_Eclipse100/G/GNETDP | 51 - .../share/keywords/000_Eclipse100/G/GNETINJE | 26 - .../share/keywords/000_Eclipse100/G/GNETPUMP | 38 - .../share/keywords/000_Eclipse100/G/GPMAINT | 39 - .../share/keywords/000_Eclipse100/G/GRADGRUP | 12 - .../share/keywords/000_Eclipse100/G/GRADRESV | 12 - .../share/keywords/000_Eclipse100/G/GRADRFT | 12 - .../share/keywords/000_Eclipse100/G/GRADWELL | 12 - .../share/keywords/000_Eclipse100/G/GRAVCONS | 13 - .../share/keywords/000_Eclipse100/G/GRAVDR | 6 - .../share/keywords/000_Eclipse100/G/GRAVDRB | 6 - .../share/keywords/000_Eclipse100/G/GRAVDRM | 14 - .../share/keywords/000_Eclipse100/G/GRAVITY | 28 - .../share/keywords/000_Eclipse100/G/GRDREACH | 106 - .../share/keywords/000_Eclipse100/G/GRID | 4 - .../share/keywords/000_Eclipse100/G/GRIDFILE | 19 - .../share/keywords/000_Eclipse100/G/GRIDOPTS | 24 - .../share/keywords/000_Eclipse100/G/GRIDUNIT | 18 - .../keywords/000_Eclipse100/G/GROUP_PROBE | 270 - .../share/keywords/000_Eclipse100/G/GRUPMAST | 25 - .../share/keywords/000_Eclipse100/G/GRUPNET | 42 - .../share/keywords/000_Eclipse100/G/GRUPRIG | 27 - .../share/keywords/000_Eclipse100/G/GRUPSLAV | 51 - .../share/keywords/000_Eclipse100/G/GRUPTARG | 21 - .../share/keywords/000_Eclipse100/G/GRUPTREE | 17 - .../share/keywords/000_Eclipse100/G/GSATINJE | 32 - .../share/keywords/000_Eclipse100/G/GSATPROD | 42 - .../share/keywords/000_Eclipse100/G/GSEPCOND | 16 - .../share/keywords/000_Eclipse100/G/GSSCPTST | 49 - .../share/keywords/000_Eclipse100/G/GSWINGF | 132 - .../share/keywords/000_Eclipse100/G/GTADD | 25 - .../share/keywords/000_Eclipse100/G/GTMULT | 25 - .../share/keywords/000_Eclipse100/G/GUIDECAL | 17 - .../share/keywords/000_Eclipse100/G/GUIDERAT | 70 - .../share/keywords/000_Eclipse100/G/GUPFREQ | 14 - .../share/keywords/000_Eclipse100/G/GWRTWCV | 13 - .../share/keywords/000_Eclipse100/H/HALFTRAN | 6 - .../share/keywords/000_Eclipse100/H/HAxxxxxx | 18 - .../share/keywords/000_Eclipse100/H/HBNUM | 9 - .../share/keywords/000_Eclipse100/H/HDISP | 21 - .../share/keywords/000_Eclipse100/H/HMAQUCT | 27 - .../share/keywords/000_Eclipse100/H/HMAQUFET | 27 - .../share/keywords/000_Eclipse100/H/HMAQUNUM | 26 - .../share/keywords/000_Eclipse100/H/HMDIMS | 54 - .../share/keywords/000_Eclipse100/H/HMFAULTS | 12 - .../share/keywords/000_Eclipse100/H/HMMLAQUN | 30 - .../share/keywords/000_Eclipse100/H/HMMLCTAQ | 30 - .../share/keywords/000_Eclipse100/H/HMMLFTAQ | 30 - .../share/keywords/000_Eclipse100/H/HMMLTWCN | 41 - .../share/keywords/000_Eclipse100/H/HMMULTFT | 24 - .../share/keywords/000_Eclipse100/H/HMMULTSG | 10 - .../share/keywords/000_Eclipse100/H/HMMULTxx | 20 - .../share/keywords/000_Eclipse100/H/HMPROPS | 7 - .../share/keywords/000_Eclipse100/H/HMROCK | 17 - .../share/keywords/000_Eclipse100/H/HMROCKT | 20 - .../share/keywords/000_Eclipse100/H/HMRREF | 22 - .../share/keywords/000_Eclipse100/H/HMWELCON | 39 - .../share/keywords/000_Eclipse100/H/HMWPIMLT | 12 - .../share/keywords/000_Eclipse100/H/HMxxxxxx | 35 - .../share/keywords/000_Eclipse100/H/HRFIN | 10 - .../share/keywords/000_Eclipse100/H/HWKRO | 10 - .../share/keywords/000_Eclipse100/H/HWKRORG | 10 - .../share/keywords/000_Eclipse100/H/HWKRORW | 10 - .../share/keywords/000_Eclipse100/H/HWKRW | 10 - .../share/keywords/000_Eclipse100/H/HWKRWR | 10 - .../share/keywords/000_Eclipse100/H/HWPCW | 10 - .../share/keywords/000_Eclipse100/H/HWSNUM | 9 - .../share/keywords/000_Eclipse100/H/HWSOGCR | 10 - .../share/keywords/000_Eclipse100/H/HWSOWCR | 10 - .../share/keywords/000_Eclipse100/H/HWSWCR | 10 - .../share/keywords/000_Eclipse100/H/HWSWL | 10 - .../share/keywords/000_Eclipse100/H/HWSWLPC | 10 - .../share/keywords/000_Eclipse100/H/HWSWU | 10 - .../share/keywords/000_Eclipse100/H/HXFIN | 10 - .../share/keywords/000_Eclipse100/H/HYDRHEAD | 24 - .../share/keywords/000_Eclipse100/H/HYFIN | 10 - .../share/keywords/000_Eclipse100/H/HYMOBGDR | 6 - .../share/keywords/000_Eclipse100/H/HYST | 6 - .../share/keywords/000_Eclipse100/H/HYSTCHCK | 8 - .../share/keywords/000_Eclipse100/H/HZFIN | 10 - .../share/keywords/000_Eclipse100/I/IHOST | 17 - .../share/keywords/000_Eclipse100/I/IMBNUM | 9 - .../share/keywords/000_Eclipse100/I/IMBNUMMF | 9 - .../share/keywords/000_Eclipse100/I/IMKRVD | 27 - .../share/keywords/000_Eclipse100/I/IMPCVD | 22 - .../share/keywords/000_Eclipse100/I/IMPES | 6 - .../share/keywords/000_Eclipse100/I/IMPLICIT | 6 - .../share/keywords/000_Eclipse100/I/IMPORT | 22 - .../share/keywords/000_Eclipse100/I/IMPTVD | 28 - .../share/keywords/000_Eclipse100/I/IMSPCVD | 22 - .../share/keywords/000_Eclipse100/I/INCLUDE | 20 - .../share/keywords/000_Eclipse100/I/INIT | 6 - .../share/keywords/000_Eclipse100/I/INRAD | 14 - .../share/keywords/000_Eclipse100/I/INSPEC | 6 - .../share/keywords/000_Eclipse100/I/INTPC | 14 - .../share/keywords/000_Eclipse100/I/IONROCK | 9 - .../share/keywords/000_Eclipse100/I/IONXROCK | 17 - .../share/keywords/000_Eclipse100/I/IONXSURF | 21 - .../share/keywords/000_Eclipse100/I/IPCG | 10 - .../share/keywords/000_Eclipse100/I/IPCW | 10 - .../share/keywords/000_Eclipse100/I/ISGCR | 10 - .../share/keywords/000_Eclipse100/I/ISGL | 10 - .../share/keywords/000_Eclipse100/I/ISGLPC | 10 - .../share/keywords/000_Eclipse100/I/ISGU | 10 - .../share/keywords/000_Eclipse100/I/ISOGCR | 10 - .../share/keywords/000_Eclipse100/I/ISOLNUM | 9 - .../share/keywords/000_Eclipse100/I/ISOWCR | 10 - .../share/keywords/000_Eclipse100/I/ISWCR | 10 - .../share/keywords/000_Eclipse100/I/ISWL | 10 - .../share/keywords/000_Eclipse100/I/ISWLPC | 10 - .../share/keywords/000_Eclipse100/I/ISWU | 10 - .../share/keywords/000_Eclipse100/J/JFUNC | 41 - .../share/keywords/000_Eclipse100/J/JFUNCR | 42 - .../share/keywords/000_Eclipse100/K/KRNUM | 21 - .../share/keywords/000_Eclipse100/K/KRNUMMF | 9 - .../share/keywords/000_Eclipse100/L/LAB | 6 - .../share/keywords/000_Eclipse100/L/LANGMPL | 10 - .../share/keywords/000_Eclipse100/L/LANGMUIR | 22 - .../share/keywords/000_Eclipse100/L/LANGSOLV | 21 - .../share/keywords/000_Eclipse100/L/LCUNIT | 14 - .../share/keywords/000_Eclipse100/L/LGR | 49 - .../share/keywords/000_Eclipse100/L/LGRCOPY | 8 - .../share/keywords/000_Eclipse100/L/LGRFREE | 12 - .../share/keywords/000_Eclipse100/L/LGRLOCK | 12 - .../share/keywords/000_Eclipse100/L/LGROFF | 18 - .../share/keywords/000_Eclipse100/L/LGRON | 18 - .../share/keywords/000_Eclipse100/L/LICENSES | 12 - .../share/keywords/000_Eclipse100/L/LIFTOPT | 27 - .../share/keywords/000_Eclipse100/L/LINCOM | 24 - .../share/keywords/000_Eclipse100/L/LINKPERM | 9 - .../share/keywords/000_Eclipse100/L/LKRO | 10 - .../share/keywords/000_Eclipse100/L/LKRORG | 10 - .../share/keywords/000_Eclipse100/L/LKRORW | 10 - .../share/keywords/000_Eclipse100/L/LKRW | 10 - .../share/keywords/000_Eclipse100/L/LKRWR | 10 - .../share/keywords/000_Eclipse100/L/LOAD | 32 - .../share/keywords/000_Eclipse100/L/LOWSALT | 6 - .../share/keywords/000_Eclipse100/L/LPCW | 10 - .../share/keywords/000_Eclipse100/L/LSALTFNC | 22 - .../share/keywords/000_Eclipse100/L/LSLTWNUM | 9 - .../share/keywords/000_Eclipse100/L/LSNUM | 9 - .../share/keywords/000_Eclipse100/L/LSOGCR | 10 - .../share/keywords/000_Eclipse100/L/LSOWCR | 10 - .../share/keywords/000_Eclipse100/L/LSWCR | 10 - .../share/keywords/000_Eclipse100/L/LSWL | 10 - .../share/keywords/000_Eclipse100/L/LSWLPC | 10 - .../share/keywords/000_Eclipse100/L/LSWU | 10 - .../share/keywords/000_Eclipse100/L/LTOSIGMA | 38 - .../share/keywords/000_Eclipse100/L/LWKRO | 10 - .../share/keywords/000_Eclipse100/L/LWKRORG | 10 - .../share/keywords/000_Eclipse100/L/LWKRORW | 10 - .../share/keywords/000_Eclipse100/L/LWKRW | 10 - .../share/keywords/000_Eclipse100/L/LWKRWR | 10 - .../share/keywords/000_Eclipse100/L/LWPCW | 10 - .../share/keywords/000_Eclipse100/L/LWSLTNUM | 9 - .../share/keywords/000_Eclipse100/L/LWSNUM | 9 - .../share/keywords/000_Eclipse100/L/LWSOGCR | 10 - .../share/keywords/000_Eclipse100/L/LWSOWCR | 10 - .../share/keywords/000_Eclipse100/L/LWSWCR | 10 - .../share/keywords/000_Eclipse100/L/LWSWL | 10 - .../share/keywords/000_Eclipse100/L/LWSWLPC | 10 - .../share/keywords/000_Eclipse100/L/LWSWU | 10 - .../share/keywords/000_Eclipse100/L/LX | 10 - .../share/keywords/000_Eclipse100/L/LXFIN | 6 - .../share/keywords/000_Eclipse100/L/LY | 10 - .../share/keywords/000_Eclipse100/L/LYFIN | 6 - .../share/keywords/000_Eclipse100/L/LZ | 10 - .../share/keywords/000_Eclipse100/L/LZFIN | 6 - .../share/keywords/000_Eclipse100/M/MAPAXES | 39 - .../share/keywords/000_Eclipse100/M/MAPUNITS | 14 - .../share/keywords/000_Eclipse100/M/MASSFLOW | 13 - .../share/keywords/000_Eclipse100/M/MATCORR | 26 - .../share/keywords/000_Eclipse100/M/MAXVALUE | 42 - .../share/keywords/000_Eclipse100/M/MEMORY | 17 - .../share/keywords/000_Eclipse100/M/MESSAGE | 21 - .../share/keywords/000_Eclipse100/M/MESSAGES | 81 - .../share/keywords/000_Eclipse100/M/MESSOPTS | 17 - .../share/keywords/000_Eclipse100/M/MESSSRVC | 14 - .../share/keywords/000_Eclipse100/M/METRIC | 6 - .../share/keywords/000_Eclipse100/M/MINNNCT | 27 - .../share/keywords/000_Eclipse100/M/MINPORV | 15 - .../share/keywords/000_Eclipse100/M/MINPV | 15 - .../share/keywords/000_Eclipse100/M/MINPVV | 11 - .../share/keywords/000_Eclipse100/M/MINVALUE | 42 - .../share/keywords/000_Eclipse100/M/MISC | 21 - .../share/keywords/000_Eclipse100/M/MISCIBLE | 24 - .../share/keywords/000_Eclipse100/M/MISCNUM | 9 - .../share/keywords/000_Eclipse100/M/MLANG | 10 - .../share/keywords/000_Eclipse100/M/MLANGSLV | 10 - .../share/keywords/000_Eclipse100/M/MONITOR | 7 - .../share/keywords/000_Eclipse100/M/MPFANUM | 9 - .../share/keywords/000_Eclipse100/M/MPFNNC | 58 - .../share/keywords/000_Eclipse100/M/MSFN | 22 - .../share/keywords/000_Eclipse100/M/MSGFILE | 13 - .../share/keywords/000_Eclipse100/M/MULSGGD | 10 - .../share/keywords/000_Eclipse100/M/MULSGGDV | 10 - .../share/keywords/000_Eclipse100/M/MULTFLT | 18 - .../share/keywords/000_Eclipse100/M/MULTIN | 6 - .../share/keywords/000_Eclipse100/M/MULTIPLY | 45 - .../share/keywords/000_Eclipse100/M/MULTIREG | 34 - .../share/keywords/000_Eclipse100/M/MULTNUM | 9 - .../share/keywords/000_Eclipse100/M/MULTOUT | 6 - .../share/keywords/000_Eclipse100/M/MULTOUTS | 6 - .../share/keywords/000_Eclipse100/M/MULTPV | 11 - .../share/keywords/000_Eclipse100/M/MULTREAL | 18 - .../share/keywords/000_Eclipse100/M/MULTREGD | 37 - .../share/keywords/000_Eclipse100/M/MULTREGH | 37 - .../share/keywords/000_Eclipse100/M/MULTREGP | 22 - .../share/keywords/000_Eclipse100/M/MULTREGT | 37 - .../share/keywords/000_Eclipse100/M/MULTSIG | 14 - .../share/keywords/000_Eclipse100/M/MULTSIGV | 10 - .../share/keywords/000_Eclipse100/M/MULT_XYZ | 23 - .../share/keywords/000_Eclipse100/N/NARROW | 6 - .../share/keywords/000_Eclipse100/N/NCONSUMP | 22 - .../share/keywords/000_Eclipse100/N/NEFAC | 18 - .../share/keywords/000_Eclipse100/N/NETBALAN | 49 - .../share/keywords/000_Eclipse100/N/NETCOMPA | 63 - .../share/keywords/000_Eclipse100/N/NETWORK | 22 - .../share/keywords/000_Eclipse100/N/NEWTRAN | 6 - .../share/keywords/000_Eclipse100/N/NEXT | 19 - .../share/keywords/000_Eclipse100/N/NEXTSTEP | 19 - .../share/keywords/000_Eclipse100/N/NEXTSTPL | 19 - .../share/keywords/000_Eclipse100/N/NINENUM | 9 - .../share/keywords/000_Eclipse100/N/NINEPOIN | 6 - .../share/keywords/000_Eclipse100/N/NMATOPTS | 25 - .../share/keywords/000_Eclipse100/N/NMATRIX | 13 - .../share/keywords/000_Eclipse100/N/NNC | 94 - .../share/keywords/000_Eclipse100/N/NNEWTF | 17 - .../share/keywords/000_Eclipse100/N/NOCASC | 6 - .../share/keywords/000_Eclipse100/N/NODEPROP | 35 - .../share/keywords/000_Eclipse100/N/NODPPM | 7 - .../share/keywords/000_Eclipse100/N/NOECHO | 13 - .../share/keywords/000_Eclipse100/N/NOGGF | 6 - .../share/keywords/000_Eclipse100/N/NOHMD | 15 - .../share/keywords/000_Eclipse100/N/NOHMO | 15 - .../share/keywords/000_Eclipse100/N/NOHYST | 6 - .../share/keywords/000_Eclipse100/N/NOINSPEC | 6 - .../share/keywords/000_Eclipse100/N/NOMONITO | 7 - .../share/keywords/000_Eclipse100/N/NONNC | 6 - .../share/keywords/000_Eclipse100/N/NORSSPEC | 6 - .../share/keywords/000_Eclipse100/N/NOSIM | 7 - .../share/keywords/000_Eclipse100/N/NOWARN | 14 - .../share/keywords/000_Eclipse100/N/NOWARNEP | 6 - .../share/keywords/000_Eclipse100/N/NRSOUT | 14 - .../share/keywords/000_Eclipse100/N/NSTACK | 15 - .../share/keywords/000_Eclipse100/N/NTG | 10 - .../share/keywords/000_Eclipse100/N/NUMRES | 14 - .../share/keywords/000_Eclipse100/N/NUPCOL | 16 - .../share/keywords/000_Eclipse100/N/NWATREM | 24 - .../share/keywords/000_Eclipse100/N/NXFIN | 9 - .../share/keywords/000_Eclipse100/N/NYFIN | 9 - .../share/keywords/000_Eclipse100/N/NZFIN | 9 - .../share/keywords/000_Eclipse100/O/OFM | 6 - .../share/keywords/000_Eclipse100/O/OIL | 7 - .../share/keywords/000_Eclipse100/O/OILAPI | 9 - .../share/keywords/000_Eclipse100/O/OILVISCT | 21 - .../share/keywords/000_Eclipse100/O/OLDTRAN | 6 - .../share/keywords/000_Eclipse100/O/OLDTRANR | 6 - .../share/keywords/000_Eclipse100/O/OPERATE | 58 - .../share/keywords/000_Eclipse100/O/OPERATER | 43 - .../share/keywords/000_Eclipse100/O/OPERNUM | 10 - .../share/keywords/000_Eclipse100/O/OPTIONS | 995 - .../share/keywords/000_Eclipse100/O/OUTRAD | 14 - .../share/keywords/000_Eclipse100/O/OUTSOL | 1 - .../share/keywords/000_Eclipse100/O/OVERBURD | 21 - .../share/keywords/000_Eclipse100/P/PARALLEL | 19 - .../share/keywords/000_Eclipse100/P/PARAOPTS | 53 - .../share/keywords/000_Eclipse100/P/PARTTRAC | 24 - .../share/keywords/000_Eclipse100/P/PATHS | 16 - .../share/keywords/000_Eclipse100/P/PBUB | 10 - .../share/keywords/000_Eclipse100/P/PBVD | 21 - .../share/keywords/000_Eclipse100/P/PCG | 10 - .../share/keywords/000_Eclipse100/P/PCG32D | 17 - .../share/keywords/000_Eclipse100/P/PCW | 10 - .../share/keywords/000_Eclipse100/P/PCW32D | 17 - .../share/keywords/000_Eclipse100/P/PDEW | 10 - .../share/keywords/000_Eclipse100/P/PDVD | 21 - .../share/keywords/000_Eclipse100/P/PEBI | 19 - .../share/keywords/000_Eclipse100/P/PECOEFS | 65 - .../share/keywords/000_Eclipse100/P/PEDIMS | 19 - .../share/keywords/000_Eclipse100/P/PEGTABX | 31 - .../share/keywords/000_Eclipse100/P/PEKTABX | 31 - .../share/keywords/000_Eclipse100/P/PENUM | 9 - .../000_Eclipse100/P/PERFORMANCE_PROBE | 41 - .../share/keywords/000_Eclipse100/P/PERMAVE | 24 - .../share/keywords/000_Eclipse100/P/PERMJFUN | 10 - .../share/keywords/000_Eclipse100/P/PERMR | 10 - .../share/keywords/000_Eclipse100/P/PERMTHT | 10 - .../share/keywords/000_Eclipse100/P/PERMX | 10 - .../share/keywords/000_Eclipse100/P/PERMXY | 10 - .../share/keywords/000_Eclipse100/P/PERMY | 11 - .../share/keywords/000_Eclipse100/P/PERMYZ | 10 - .../share/keywords/000_Eclipse100/P/PERMZ | 11 - .../share/keywords/000_Eclipse100/P/PERMZX | 10 - .../share/keywords/000_Eclipse100/P/PETGRID | 13 - .../share/keywords/000_Eclipse100/P/PETOPTS | 14 - .../share/keywords/000_Eclipse100/P/PICOND | 73 - .../share/keywords/000_Eclipse100/P/PIMTDIMS | 19 - .../share/keywords/000_Eclipse100/P/PIMULTAB | 17 - .../share/keywords/000_Eclipse100/P/PINCH | 36 - .../share/keywords/000_Eclipse100/P/PINCHNUM | 9 - .../share/keywords/000_Eclipse100/P/PINCHOUT | 6 - .../share/keywords/000_Eclipse100/P/PINCHREG | 35 - .../share/keywords/000_Eclipse100/P/PINCHXY | 21 - .../share/keywords/000_Eclipse100/P/PLMIXNUM | 9 - .../share/keywords/000_Eclipse100/P/PLMIXPAR | 18 - .../share/keywords/000_Eclipse100/P/PLYADS | 22 - .../share/keywords/000_Eclipse100/P/PLYADSS | 27 - .../share/keywords/000_Eclipse100/P/PLYATEMP | 10 - .../share/keywords/000_Eclipse100/P/PLYCAMAX | 10 - .../share/keywords/000_Eclipse100/P/PLYDHFLF | 23 - .../share/keywords/000_Eclipse100/P/PLYESAL | 6 - .../share/keywords/000_Eclipse100/P/PLYKRRF | 7 - .../share/keywords/000_Eclipse100/P/PLYMAX | 23 - .../share/keywords/000_Eclipse100/P/PLYOPTS | 14 - .../share/keywords/000_Eclipse100/P/PLYRMDEN | 10 - .../share/keywords/000_Eclipse100/P/PLYROCK | 38 - .../share/keywords/000_Eclipse100/P/PLYROCKM | 38 - .../share/keywords/000_Eclipse100/P/PLYSHEAR | 23 - .../share/keywords/000_Eclipse100/P/PLYSHLOG | 39 - .../share/keywords/000_Eclipse100/P/PLYTRRF | 21 - .../share/keywords/000_Eclipse100/P/PLYTRRFA | 13 - .../share/keywords/000_Eclipse100/P/PLYVISC | 23 - .../share/keywords/000_Eclipse100/P/PLYVISCS | 23 - .../share/keywords/000_Eclipse100/P/PLYVISCT | 23 - .../share/keywords/000_Eclipse100/P/PLYVSCST | 23 - .../share/keywords/000_Eclipse100/P/PMAX | 31 - .../share/keywords/000_Eclipse100/P/PMISC | 21 - .../share/keywords/000_Eclipse100/P/POLYMER | 6 - .../share/keywords/000_Eclipse100/P/PORO | 11 - .../share/keywords/000_Eclipse100/P/PORV | 10 - .../share/keywords/000_Eclipse100/P/PPCWMAX | 22 - .../share/keywords/000_Eclipse100/P/PRESSURE | 10 - .../share/keywords/000_Eclipse100/P/PRIORITY | 94 - .../share/keywords/000_Eclipse100/P/PROPS | 4 - .../share/keywords/000_Eclipse100/P/PRORDER | 58 - .../share/keywords/000_Eclipse100/P/PRVD | 21 - .../share/keywords/000_Eclipse100/P/PSTEADY | 60 - .../share/keywords/000_Eclipse100/P/PSWRG | 9 - .../share/keywords/000_Eclipse100/P/PSWRO | 9 - .../share/keywords/000_Eclipse100/P/PVCDO | 37 - .../share/keywords/000_Eclipse100/P/PVCO | 25 - .../share/keywords/000_Eclipse100/P/PVDG | 22 - .../share/keywords/000_Eclipse100/P/PVDO | 22 - .../share/keywords/000_Eclipse100/P/PVDS | 22 - .../share/keywords/000_Eclipse100/P/PVTG | 27 - .../share/keywords/000_Eclipse100/P/PVTNUM | 9 - .../share/keywords/000_Eclipse100/P/PVTO | 27 - .../share/keywords/000_Eclipse100/P/PVTW | 42 - .../share/keywords/000_Eclipse100/P/PVTWSALT | 39 - .../share/keywords/000_Eclipse100/P/PVT_M | 9 - .../share/keywords/000_Eclipse100/P/PVZG | 31 - .../share/keywords/000_Eclipse100/Q/QDRILL | 14 - .../share/keywords/000_Eclipse100/Q/QHRATING | 21 - .../share/keywords/000_Eclipse100/Q/QMOBIL | 13 - .../share/keywords/000_Eclipse100/R/RADFIN | 54 - .../share/keywords/000_Eclipse100/R/RADFIN4 | 55 - .../share/keywords/000_Eclipse100/R/RADIAL | 6 - .../share/keywords/000_Eclipse100/R/RAINFALL | 74 - .../share/keywords/000_Eclipse100/R/RBEDCONT | 21 - .../share/keywords/000_Eclipse100/R/RCMASTS | 14 - .../share/keywords/000_Eclipse100/R/REACACT | 0 .../share/keywords/000_Eclipse100/R/REACHES | 101 - .../share/keywords/000_Eclipse100/R/READDATA | 14 - .../share/keywords/000_Eclipse100/R/REFINE | 18 - .../share/keywords/000_Eclipse100/R/REGDIMS | 60 - .../000_Eclipse100/R/REGION2REGION_PROBE | 21 - .../share/keywords/000_Eclipse100/R/REGIONS | 4 - .../keywords/000_Eclipse100/R/REGION_PROBE | 112 - .../share/keywords/000_Eclipse100/R/RESIDNUM | 9 - .../share/keywords/000_Eclipse100/R/RESTART | 27 - .../share/keywords/000_Eclipse100/R/RESVNUM | 13 - .../share/keywords/000_Eclipse100/R/RIVDEBUG | 16 - .../share/keywords/000_Eclipse100/R/RIVERSYS | 34 - .../share/keywords/000_Eclipse100/R/RIVRDIMS | 74 - .../share/keywords/000_Eclipse100/R/RIVRPROP | 24 - .../share/keywords/000_Eclipse100/R/RIVRXSEC | 27 - .../share/keywords/000_Eclipse100/R/RIVSALT | 25 - .../share/keywords/000_Eclipse100/R/RIVTRACE | 33 - .../share/keywords/000_Eclipse100/R/RKTRMDIR | 7 - .../share/keywords/000_Eclipse100/R/ROCK | 21 - .../share/keywords/000_Eclipse100/R/ROCK2D | 23 - .../share/keywords/000_Eclipse100/R/ROCK2DTR | 23 - .../share/keywords/000_Eclipse100/R/ROCKCOMP | 24 - .../share/keywords/000_Eclipse100/R/ROCKFRAC | 9 - .../share/keywords/000_Eclipse100/R/ROCKNUM | 9 - .../share/keywords/000_Eclipse100/R/ROCKOPTS | 29 - .../share/keywords/000_Eclipse100/R/ROCKPAMA | 61 - .../share/keywords/000_Eclipse100/R/ROCKTAB | 24 - .../share/keywords/000_Eclipse100/R/ROCKTABH | 17 - .../share/keywords/000_Eclipse100/R/ROCKTABW | 17 - .../share/keywords/000_Eclipse100/R/ROCKTHSG | 21 - .../share/keywords/000_Eclipse100/R/ROCKTSIG | 21 - .../share/keywords/000_Eclipse100/R/ROCKV | 10 - .../share/keywords/000_Eclipse100/R/ROCKWNOD | 18 - .../share/keywords/000_Eclipse100/R/RPTCPL | 7 - .../share/keywords/000_Eclipse100/R/RPTGRID | 14 - .../share/keywords/000_Eclipse100/R/RPTGRIDL | 14 - .../share/keywords/000_Eclipse100/R/RPTHMD | 39 - .../share/keywords/000_Eclipse100/R/RPTHMG | 16 - .../share/keywords/000_Eclipse100/R/RPTHMW | 22 - .../share/keywords/000_Eclipse100/R/RPTINIT | 14 - .../share/keywords/000_Eclipse100/R/RPTISOL | 6 - .../share/keywords/000_Eclipse100/R/RPTONLY | 7 - .../share/keywords/000_Eclipse100/R/RPTONLYO | 7 - .../share/keywords/000_Eclipse100/R/RPTPROPS | 14 - .../share/keywords/000_Eclipse100/R/RPTREGS | 14 - .../share/keywords/000_Eclipse100/R/RPTRST | 18 - .../share/keywords/000_Eclipse100/R/RPTRUNSP | 7 - .../share/keywords/000_Eclipse100/R/RPTSCHED | 14 - .../share/keywords/000_Eclipse100/R/RPTSMRY | 13 - .../share/keywords/000_Eclipse100/R/RPTSOL | 14 - .../share/keywords/000_Eclipse100/R/RS | 10 - .../share/keywords/000_Eclipse100/R/RSCONST | 19 - .../share/keywords/000_Eclipse100/R/RSCONSTT | 22 - .../share/keywords/000_Eclipse100/R/RSGI | 21 - .../share/keywords/000_Eclipse100/R/RSSPEC | 6 - .../share/keywords/000_Eclipse100/R/RSSSPEC | 6 - .../share/keywords/000_Eclipse100/R/RSVD | 21 - .../share/keywords/000_Eclipse100/R/RTEMP | 15 - .../share/keywords/000_Eclipse100/R/RTEMPA | 15 - .../share/keywords/000_Eclipse100/R/RTEMPVD | 22 - .../share/keywords/000_Eclipse100/R/RUNSPEC | 4 - .../share/keywords/000_Eclipse100/R/RUNSUM | 6 - .../share/keywords/000_Eclipse100/R/RV | 10 - .../share/keywords/000_Eclipse100/R/RVCONST | 19 - .../share/keywords/000_Eclipse100/R/RVCONSTT | 21 - .../share/keywords/000_Eclipse100/R/RVGI | 21 - .../share/keywords/000_Eclipse100/R/RVVD | 21 - .../share/keywords/000_Eclipse100/S/SALT | 15 - .../share/keywords/000_Eclipse100/S/SALTNODE | 18 - .../share/keywords/000_Eclipse100/S/SALTREST | 15 - .../share/keywords/000_Eclipse100/S/SALTVD | 22 - .../share/keywords/000_Eclipse100/S/SAMG | 6 - .../share/keywords/000_Eclipse100/S/SATNUM | 9 - .../share/keywords/000_Eclipse100/S/SATOPTS | 14 - .../share/keywords/000_Eclipse100/S/SAVE | 15 - .../share/keywords/000_Eclipse100/S/SCALECRS | 14 - .../share/keywords/000_Eclipse100/S/SCALELIM | 17 - .../share/keywords/000_Eclipse100/S/SCDATAB | 22 - .../share/keywords/000_Eclipse100/S/SCDETAB | 23 - .../share/keywords/000_Eclipse100/S/SCDPDIMS | 44 - .../share/keywords/000_Eclipse100/S/SCDPTAB | 21 - .../share/keywords/000_Eclipse100/S/SCDPTRAC | 13 - .../share/keywords/000_Eclipse100/S/SCHEDULE | 4 - .../share/keywords/000_Eclipse100/S/SCVD | 21 - .../share/keywords/000_Eclipse100/S/SDENSITY | 18 - .../keywords/000_Eclipse100/S/SEGMENT_PROBE | 27 - .../share/keywords/000_Eclipse100/S/SEPARATE | 6 - .../share/keywords/000_Eclipse100/S/SEPVALS | 22 - .../share/keywords/000_Eclipse100/S/SFOAM | 10 - .../share/keywords/000_Eclipse100/S/SGAS | 10 - .../share/keywords/000_Eclipse100/S/SGCR | 10 - .../share/keywords/000_Eclipse100/S/SGCWMIS | 21 - .../share/keywords/000_Eclipse100/S/SGF32D | 28 - .../share/keywords/000_Eclipse100/S/SGFN | 22 - .../share/keywords/000_Eclipse100/S/SGL | 10 - .../share/keywords/000_Eclipse100/S/SGLPC | 10 - .../share/keywords/000_Eclipse100/S/SGOF | 23 - .../share/keywords/000_Eclipse100/S/SGU | 10 - .../share/keywords/000_Eclipse100/S/SGWFN | 23 - .../share/keywords/000_Eclipse100/S/SHRATE | 18 - .../share/keywords/000_Eclipse100/S/SIGMA | 13 - .../share/keywords/000_Eclipse100/S/SIGMAGD | 13 - .../share/keywords/000_Eclipse100/S/SIGMAGDV | 9 - .../share/keywords/000_Eclipse100/S/SIGMATH | 9 - .../share/keywords/000_Eclipse100/S/SIGMAV | 9 - .../share/keywords/000_Eclipse100/S/SIMULATE | 6 - .../share/keywords/000_Eclipse100/S/SKIP | 14 - .../share/keywords/000_Eclipse100/S/SKIP100 | 14 - .../share/keywords/000_Eclipse100/S/SKIP300 | 14 - .../share/keywords/000_Eclipse100/S/SKIPREST | 6 - .../share/keywords/000_Eclipse100/S/SKRO | 9 - .../share/keywords/000_Eclipse100/S/SKRORG | 9 - .../share/keywords/000_Eclipse100/S/SKRORW | 9 - .../share/keywords/000_Eclipse100/S/SKRW | 9 - .../share/keywords/000_Eclipse100/S/SKRWR | 9 - .../share/keywords/000_Eclipse100/S/SLAVES | 29 - .../share/keywords/000_Eclipse100/S/SLGOF | 23 - .../share/keywords/000_Eclipse100/S/SMRYDIMS | 14 - .../share/keywords/000_Eclipse100/S/SMULTX | 9 - .../share/keywords/000_Eclipse100/S/SMULTY | 9 - .../share/keywords/000_Eclipse100/S/SMULTZ | 9 - .../share/keywords/000_Eclipse100/S/SOCRS | 9 - .../share/keywords/000_Eclipse100/S/SOF2 | 21 - .../share/keywords/000_Eclipse100/S/SOF3 | 22 - .../share/keywords/000_Eclipse100/S/SOF32D | 28 - .../share/keywords/000_Eclipse100/S/SOGCR | 10 - .../share/keywords/000_Eclipse100/S/SOIL | 10 - .../share/keywords/000_Eclipse100/S/SOLUTION | 4 - .../share/keywords/000_Eclipse100/S/SOLVCONC | 10 - .../share/keywords/000_Eclipse100/S/SOLVDIMS | 10 - .../share/keywords/000_Eclipse100/S/SOLVDIRS | 12 - .../share/keywords/000_Eclipse100/S/SOLVENT | 6 - .../share/keywords/000_Eclipse100/S/SOLVFRAC | 9 - .../share/keywords/000_Eclipse100/S/SOLVNUM | 9 - .../share/keywords/000_Eclipse100/S/SOLWNUM | 9 - .../share/keywords/000_Eclipse100/S/SOMGAS | 21 - .../share/keywords/000_Eclipse100/S/SOMWAT | 21 - .../share/keywords/000_Eclipse100/S/SORWMIS | 21 - .../share/keywords/000_Eclipse100/S/SOWCR | 10 - .../share/keywords/000_Eclipse100/S/SPECGRID | 34 - .../share/keywords/000_Eclipse100/S/SPECHEAT | 23 - .../share/keywords/000_Eclipse100/S/SPECROCK | 21 - .../share/keywords/000_Eclipse100/S/SPOLY | 11 - .../share/keywords/000_Eclipse100/S/SSFN | 22 - .../share/keywords/000_Eclipse100/S/SSGCR | 9 - .../share/keywords/000_Eclipse100/S/SSGL | 9 - .../share/keywords/000_Eclipse100/S/SSOGCR | 9 - .../share/keywords/000_Eclipse100/S/SSOL | 10 - .../share/keywords/000_Eclipse100/S/SSOWCR | 9 - .../share/keywords/000_Eclipse100/S/SSWCR | 9 - .../share/keywords/000_Eclipse100/S/SSWL | 9 - .../share/keywords/000_Eclipse100/S/SSWU | 9 - .../share/keywords/000_Eclipse100/S/START | 29 - .../share/keywords/000_Eclipse100/S/STOG | 30 - .../share/keywords/000_Eclipse100/S/STONE | 6 - .../share/keywords/000_Eclipse100/S/STONE1 | 6 - .../share/keywords/000_Eclipse100/S/STONE1EX | 18 - .../share/keywords/000_Eclipse100/S/STONE2 | 6 - .../share/keywords/000_Eclipse100/S/STOW | 30 - .../share/keywords/000_Eclipse100/S/STWG | 30 - .../share/keywords/000_Eclipse100/S/SUMMARY | 4 - .../share/keywords/000_Eclipse100/S/SUMTHIN | 15 - .../share/keywords/000_Eclipse100/S/SURF | 10 - .../share/keywords/000_Eclipse100/S/SURFACT | 6 - .../share/keywords/000_Eclipse100/S/SURFACTW | 6 - .../share/keywords/000_Eclipse100/S/SURFADDW | 21 - .../share/keywords/000_Eclipse100/S/SURFADS | 21 - .../share/keywords/000_Eclipse100/S/SURFCAPD | 21 - .../share/keywords/000_Eclipse100/S/SURFESAL | 17 - .../share/keywords/000_Eclipse100/S/SURFNUM | 9 - .../share/keywords/000_Eclipse100/S/SURFOPTS | 19 - .../share/keywords/000_Eclipse100/S/SURFROCK | 21 - .../share/keywords/000_Eclipse100/S/SURFST | 17 - .../share/keywords/000_Eclipse100/S/SURFSTES | 17 - .../share/keywords/000_Eclipse100/S/SURFVISC | 21 - .../share/keywords/000_Eclipse100/S/SURFWNUM | 9 - .../share/keywords/000_Eclipse100/S/SWAT | 10 - .../share/keywords/000_Eclipse100/S/SWATINIT | 10 - .../share/keywords/000_Eclipse100/S/SWCR | 10 - .../share/keywords/000_Eclipse100/S/SWF32D | 28 - .../share/keywords/000_Eclipse100/S/SWFN | 22 - .../share/keywords/000_Eclipse100/S/SWINGFAC | 105 - .../share/keywords/000_Eclipse100/S/SWL | 10 - .../share/keywords/000_Eclipse100/S/SWLPC | 10 - .../share/keywords/000_Eclipse100/S/SWOF | 23 - .../share/keywords/000_Eclipse100/S/SWU | 10 - .../share/keywords/000_Eclipse100/T/TABDIMS | 135 - .../share/keywords/000_Eclipse100/T/TBLK | 10 - .../share/keywords/000_Eclipse100/T/TEMP | 6 - .../share/keywords/000_Eclipse100/T/TEMPNODE | 17 - .../share/keywords/000_Eclipse100/T/TEMPTVD | 6 - .../share/keywords/000_Eclipse100/T/TEMPVD | 18 - .../share/keywords/000_Eclipse100/T/THCONR | 10 - .../share/keywords/000_Eclipse100/T/THERMAL | 6 - .../share/keywords/000_Eclipse100/T/THPRES | 21 - .../share/keywords/000_Eclipse100/T/THPRESFT | 17 - .../share/keywords/000_Eclipse100/T/TIGHTEN | 13 - .../share/keywords/000_Eclipse100/T/TIGHTENP | 27 - .../share/keywords/000_Eclipse100/T/TIME | 15 - .../share/keywords/000_Eclipse100/T/TITLE | 14 - .../share/keywords/000_Eclipse100/T/TLMIXPAR | 22 - .../share/keywords/000_Eclipse100/T/TNUM | 10 - .../share/keywords/000_Eclipse100/T/TOLCRIT | 15 - .../share/keywords/000_Eclipse100/T/TOPS | 10 - .../share/keywords/000_Eclipse100/T/TPAMEPS | 17 - .../share/keywords/000_Eclipse100/T/TPAMEPSS | 17 - .../share/keywords/000_Eclipse100/T/TRACER | 32 - .../share/keywords/000_Eclipse100/T/TRACERKM | 38 - .../share/keywords/000_Eclipse100/T/TRACERKP | 21 - .../share/keywords/000_Eclipse100/T/TRACERS | 67 - .../share/keywords/000_Eclipse100/T/TRACITVD | 19 - .../share/keywords/000_Eclipse100/T/TRACTVD | 6 - .../share/keywords/000_Eclipse100/T/TRADS | 17 - .../share/keywords/000_Eclipse100/T/TRANGL | 37 - .../share/keywords/000_Eclipse100/T/TRANR | 10 - .../share/keywords/000_Eclipse100/T/TRANTHT | 10 - .../share/keywords/000_Eclipse100/T/TRANX | 10 - .../share/keywords/000_Eclipse100/T/TRANY | 10 - .../share/keywords/000_Eclipse100/T/TRANZ | 10 - .../share/keywords/000_Eclipse100/T/TRDCY | 19 - .../share/keywords/000_Eclipse100/T/TRDIF | 19 - .../share/keywords/000_Eclipse100/T/TRDIS | 49 - .../share/keywords/000_Eclipse100/T/TRKPF | 10 - .../share/keywords/000_Eclipse100/T/TRNHD | 7 - .../share/keywords/000_Eclipse100/T/TRPLPORO | 12 - .../share/keywords/000_Eclipse100/T/TRROCK | 26 - .../share/keywords/000_Eclipse100/T/TSTEP | 15 - .../share/keywords/000_Eclipse100/T/TUNING | 185 - .../share/keywords/000_Eclipse100/T/TUNINGDP | 25 - .../share/keywords/000_Eclipse100/T/TUNINGH | 34 - .../share/keywords/000_Eclipse100/T/TUNINGL | 185 - .../share/keywords/000_Eclipse100/T/TUNINGS | 191 - .../share/keywords/000_Eclipse100/T/TVDP | 22 - .../share/keywords/000_Eclipse100/T/TZONE | 21 - .../share/keywords/000_Eclipse100/U/UDADIMS | 24 - .../share/keywords/000_Eclipse100/U/UDQ | 21 - .../share/keywords/000_Eclipse100/U/UDQDIMS | 64 - .../share/keywords/000_Eclipse100/U/UDQPARAM | 29 - .../share/keywords/000_Eclipse100/U/UDT | 8 - .../share/keywords/000_Eclipse100/U/UDTDIMS | 29 - .../share/keywords/000_Eclipse100/U/UNCODHMD | 6 - .../share/keywords/000_Eclipse100/U/UNIFIN | 6 - .../share/keywords/000_Eclipse100/U/UNIFOUT | 6 - .../share/keywords/000_Eclipse100/U/UNIFOUTS | 6 - .../share/keywords/000_Eclipse100/U/UNIFSAVE | 6 - .../share/keywords/000_Eclipse100/U/USECUPL | 16 - .../share/keywords/000_Eclipse100/U/USEFLUX | 6 - .../share/keywords/000_Eclipse100/U/USENOFLO | 6 - .../share/keywords/000_Eclipse100/V/DFLOWR | 16 - .../share/keywords/000_Eclipse100/V/VAPOIL | 6 - .../share/keywords/000_Eclipse100/V/VAPPARS | 18 - .../share/keywords/000_Eclipse100/V/VDFLOW | 13 - .../share/keywords/000_Eclipse100/V/VDFLOWR | 16 - .../share/keywords/000_Eclipse100/V/VE | 14 - .../share/keywords/000_Eclipse100/V/VEDEBUG | 43 - .../share/keywords/000_Eclipse100/V/VEFIN | 19 - .../share/keywords/000_Eclipse100/V/VEFRAC | 14 - .../share/keywords/000_Eclipse100/V/VEFRACP | 14 - .../share/keywords/000_Eclipse100/V/VEFRACPV | 9 - .../share/keywords/000_Eclipse100/V/VEFRACV | 9 - .../share/keywords/000_Eclipse100/V/VFPCHK | 15 - .../share/keywords/000_Eclipse100/V/VFPIDIMS | 24 - .../share/keywords/000_Eclipse100/V/VFPINJ | 63 - .../share/keywords/000_Eclipse100/V/VFPPDIMS | 39 - .../share/keywords/000_Eclipse100/V/VFPPROD | 108 - .../share/keywords/000_Eclipse100/V/VFPTABL | 13 - .../share/keywords/000_Eclipse100/V/VISAGE | 6 - .../share/keywords/000_Eclipse100/V/VISCD | 6 - .../share/keywords/000_Eclipse100/V/VISCREF | 22 - .../share/keywords/000_Eclipse100/V/VISDATES | 25 - .../share/keywords/000_Eclipse100/V/VISOPTS | 47 - .../share/keywords/000_Eclipse100/W/WAGHYSTR | 52 - .../share/keywords/000_Eclipse100/W/WAITBAL | 14 - .../share/keywords/000_Eclipse100/W/WALKALIN | 17 - .../share/keywords/000_Eclipse100/W/WALQCALC | 17 - .../share/keywords/000_Eclipse100/W/WAPI | 16 - .../share/keywords/000_Eclipse100/W/WARN | 14 - .../share/keywords/000_Eclipse100/W/WATER | 6 - .../share/keywords/000_Eclipse100/W/WATVISCT | 21 - .../share/keywords/000_Eclipse100/W/WBHGLR | 50 - .../share/keywords/000_Eclipse100/W/WBOREVOL | 23 - .../share/keywords/000_Eclipse100/W/WCALCVAL | 17 - .../share/keywords/000_Eclipse100/W/WCONHIST | 69 - .../share/keywords/000_Eclipse100/W/WCONINJ | 6 - .../share/keywords/000_Eclipse100/W/WCONINJE | 80 - .../share/keywords/000_Eclipse100/W/WCONINJH | 66 - .../share/keywords/000_Eclipse100/W/WCONINJP | 74 - .../share/keywords/000_Eclipse100/W/WCONPROD | 105 - .../share/keywords/000_Eclipse100/W/WCUTBACK | 70 - .../share/keywords/000_Eclipse100/W/WCUTBACT | 26 - .../share/keywords/000_Eclipse100/W/WCYCLE | 41 - .../share/keywords/000_Eclipse100/W/WDFAC | 18 - .../share/keywords/000_Eclipse100/W/WDFACCOR | 27 - .../share/keywords/000_Eclipse100/W/WDRILPRI | 22 - .../share/keywords/000_Eclipse100/W/WDRILRES | 6 - .../share/keywords/000_Eclipse100/W/WDRILTIM | 28 - .../share/keywords/000_Eclipse100/W/WECON | 90 - .../share/keywords/000_Eclipse100/W/WECONINJ | 22 - .../share/keywords/000_Eclipse100/W/WECONT | 26 - .../share/keywords/000_Eclipse100/W/WEFAC | 22 - .../share/keywords/000_Eclipse100/W/WELCNTL | 20 - .../share/keywords/000_Eclipse100/W/WELDEBUG | 16 - .../share/keywords/000_Eclipse100/W/WELDRAW | 31 - .../share/keywords/000_Eclipse100/W/WELEVNT | 16 - .../share/keywords/000_Eclipse100/W/WELLDIMS | 74 - .../000_Eclipse100/W/WELL_COMPLETION_PROBE | 41 - .../keywords/000_Eclipse100/W/WELL_PROBE | 238 - .../share/keywords/000_Eclipse100/W/WELMOVEL | 9 - .../share/keywords/000_Eclipse100/W/WELOPEN | 37 - .../share/keywords/000_Eclipse100/W/WELOPENL | 41 - .../share/keywords/000_Eclipse100/W/WELPI | 16 - .../share/keywords/000_Eclipse100/W/WELPRI | 32 - .../share/keywords/000_Eclipse100/W/WELSEGS | 117 - .../share/keywords/000_Eclipse100/W/WELSOMIN | 12 - .../share/keywords/000_Eclipse100/W/WELSPECL | 91 - .../share/keywords/000_Eclipse100/W/WELSPECS | 87 - .../share/keywords/000_Eclipse100/W/WELTARG | 20 - .../share/keywords/000_Eclipse100/W/WFOAM | 17 - .../share/keywords/000_Eclipse100/W/WFRICSEG | 27 - .../share/keywords/000_Eclipse100/W/WFRICSGL | 27 - .../share/keywords/000_Eclipse100/W/WFRICTN | 27 - .../share/keywords/000_Eclipse100/W/WFRICTNL | 27 - .../share/keywords/000_Eclipse100/W/WGASPROD | 20 - .../share/keywords/000_Eclipse100/W/WGORPEN | 25 - .../share/keywords/000_Eclipse100/W/WGRUPCON | 31 - .../share/keywords/000_Eclipse100/W/WH2NUM | 9 - .../share/keywords/000_Eclipse100/W/WH3NUM | 9 - .../share/keywords/000_Eclipse100/W/WHEDREFD | 17 - .../share/keywords/000_Eclipse100/W/WHISTCTL | 19 - .../share/keywords/000_Eclipse100/W/WHTEMP | 21 - .../share/keywords/000_Eclipse100/W/WINJMULT | 41 - .../share/keywords/000_Eclipse100/W/WLIFT | 66 - .../share/keywords/000_Eclipse100/W/WLIFTOPT | 42 - .../share/keywords/000_Eclipse100/W/WLIMTOL | 13 - .../share/keywords/000_Eclipse100/W/WLIST | 21 - .../share/keywords/000_Eclipse100/W/WLISTARG | 21 - .../share/keywords/000_Eclipse100/W/WLISTNAM | 17 - .../share/keywords/000_Eclipse100/W/WNETCTRL | 17 - .../share/keywords/000_Eclipse100/W/WNETDP | 18 - .../share/keywords/000_Eclipse100/W/WORKLIM | 13 - .../share/keywords/000_Eclipse100/W/WORKTHP | 17 - .../share/keywords/000_Eclipse100/W/WPAVE | 29 - .../share/keywords/000_Eclipse100/W/WPAVEDEP | 18 - .../share/keywords/000_Eclipse100/W/WPIMULT | 37 - .../share/keywords/000_Eclipse100/W/WPIMULTL | 42 - .../share/keywords/000_Eclipse100/W/WPITAB | 17 - .../share/keywords/000_Eclipse100/W/WPLUG | 27 - .../share/keywords/000_Eclipse100/W/WPOLYMER | 31 - .../share/keywords/000_Eclipse100/W/WPOLYRED | 17 - .../share/keywords/000_Eclipse100/W/WPOTCALC | 19 - .../share/keywords/000_Eclipse100/W/WREGROUP | 35 - .../share/keywords/000_Eclipse100/W/WRFT | 12 - .../share/keywords/000_Eclipse100/W/WRFTPLT | 27 - .../share/keywords/000_Eclipse100/W/WSALT | 17 - .../share/keywords/000_Eclipse100/W/WSCCLEAN | 42 - .../share/keywords/000_Eclipse100/W/WSCCLENL | 46 - .../share/keywords/000_Eclipse100/W/WSCTAB | 31 - .../share/keywords/000_Eclipse100/W/WSEGAICD | 113 - .../share/keywords/000_Eclipse100/W/WSEGDFIN | 14 - .../share/keywords/000_Eclipse100/W/WSEGDFMD | 24 - .../share/keywords/000_Eclipse100/W/WSEGDFPA | 57 - .../share/keywords/000_Eclipse100/W/WSEGDIMS | 29 - .../share/keywords/000_Eclipse100/W/WSEGEXSS | 38 - .../share/keywords/000_Eclipse100/W/WSEGFLIM | 53 - .../share/keywords/000_Eclipse100/W/WSEGFMOD | 49 - .../share/keywords/000_Eclipse100/W/WSEGINIT | 55 - .../share/keywords/000_Eclipse100/W/WSEGITER | 29 - .../share/keywords/000_Eclipse100/W/WSEGLABY | 79 - .../share/keywords/000_Eclipse100/W/WSEGLINK | 20 - .../share/keywords/000_Eclipse100/W/WSEGMULT | 50 - .../share/keywords/000_Eclipse100/W/WSEGPROP | 53 - .../share/keywords/000_Eclipse100/W/WSEGPULL | 41 - .../share/keywords/000_Eclipse100/W/WSEGSEP | 35 - .../share/keywords/000_Eclipse100/W/WSEGSICD | 76 - .../share/keywords/000_Eclipse100/W/WSEGSOLV | 49 - .../share/keywords/000_Eclipse100/W/WSEGTABL | 49 - .../share/keywords/000_Eclipse100/W/WSEGVALV | 55 - .../share/keywords/000_Eclipse100/W/WSOLVENT | 17 - .../share/keywords/000_Eclipse100/W/WSURFACT | 17 - .../share/keywords/000_Eclipse100/W/WTADD | 26 - .../share/keywords/000_Eclipse100/W/WTEMP | 17 - .../share/keywords/000_Eclipse100/W/WTEMPQ | 16 - .../share/keywords/000_Eclipse100/W/WTEST | 33 - .../share/keywords/000_Eclipse100/W/WTHPMAX | 31 - .../share/keywords/000_Eclipse100/W/WTMULT | 26 - .../share/keywords/000_Eclipse100/W/WTRACER | 29 - .../share/keywords/000_Eclipse100/W/WVFPDP | 22 - .../share/keywords/000_Eclipse100/W/WVFPEXP | 32 - .../share/keywords/000_Eclipse100/W/WWPAVE | 32 - .../share/keywords/000_Eclipse100/Z/ZCORN | 10 - .../share/keywords/000_Eclipse100/Z/ZIPP2OFF | 6 - .../share/keywords/000_Eclipse100/Z/ZIPPY2 | 14 - .../keywords/001_Eclipse300/B/BLOCK_PROBE300 | 24 - .../share/keywords/001_Eclipse300/C/CIRCLE | 6 - .../share/keywords/001_Eclipse300/C/COMPS | 13 - .../share/keywords/001_Eclipse300/C/CREF | 21 - .../share/keywords/001_Eclipse300/C/CREFS | 21 - .../share/keywords/001_Eclipse300/D/DREF | 21 - .../share/keywords/001_Eclipse300/D/DREFS | 21 - .../share/keywords/001_Eclipse300/D/DZV | 10 - .../share/keywords/001_Eclipse300/G/GASVISCT | 21 - .../share/keywords/001_Eclipse300/G/GCONPROD | 111 - .../share/keywords/001_Eclipse300/H/HEATCR | 10 - .../share/keywords/001_Eclipse300/H/HEATCRT | 10 - .../share/keywords/001_Eclipse300/L/LIVEOIL | 6 - .../share/keywords/001_Eclipse300/M/MW | 18 - .../share/keywords/001_Eclipse300/M/MWS | 18 - .../share/keywords/001_Eclipse300/O/OILCOMPR | 29 - .../share/keywords/001_Eclipse300/O/OILMW | 16 - .../share/keywords/001_Eclipse300/O/OILVTIM | 12 - .../share/keywords/001_Eclipse300/O/OPTIONS3 | 1450 - .../share/keywords/001_Eclipse300/P/PREF | 21 - .../share/keywords/001_Eclipse300/P/PREFS | 21 - .../share/keywords/001_Eclipse300/S/STCOND | 21 - .../share/keywords/001_Eclipse300/T/TEMPI | 10 - .../share/keywords/001_Eclipse300/T/TEMPVD | 22 - .../share/keywords/001_Eclipse300/T/THCGAS | 10 - .../share/keywords/001_Eclipse300/T/THCOIL | 10 - .../share/keywords/001_Eclipse300/T/THCONSF | 10 - .../share/keywords/001_Eclipse300/T/THCROCK | 10 - .../share/keywords/001_Eclipse300/T/THCWATER | 10 - .../share/keywords/001_Eclipse300/T/THERMAL | 6 - .../share/keywords/001_Eclipse300/T/TREF | 21 - .../share/keywords/001_Eclipse300/T/TREFS | 21 - .../share/keywords/001_Eclipse300/W/WATDENT | 31 - .../share/keywords/001_Eclipse300/W/WINJTEMP | 35 - .../share/keywords/001_Eclipse300/Z/ZFACT1 | 21 - .../share/keywords/001_Eclipse300/Z/ZFACT1S | 21 - .../share/keywords/001_Eclipse300/Z/ZFACTOR | 21 - .../share/keywords/001_Eclipse300/Z/ZFACTORS | 21 - .../share/keywords/002_Frontsim/N/NOGRAV | 6 - .../eclipse/share/keywords/900_OPM/B/BC | 51 - .../eclipse/share/keywords/900_OPM/E/EXIT | 7 - .../eclipse/share/keywords/900_OPM/G/GASDENT | 30 - .../eclipse/share/keywords/900_OPM/G/GCOMPIDX | 13 - .../eclipse/share/keywords/900_OPM/G/GRUPRIG | 27 - .../eclipse/share/keywords/900_OPM/M/MINPVFIL | 15 - .../eclipse/share/keywords/900_OPM/O/OCOMPIDX | 13 - .../eclipse/share/keywords/900_OPM/O/OILDENT | 30 - .../eclipse/share/keywords/900_OPM/P/PERMFACT | 18 - .../eclipse/share/keywords/900_OPM/P/PINTDIMS | 24 - .../eclipse/share/keywords/900_OPM/P/PLYMWINJ | 38 - .../eclipse/share/keywords/900_OPM/P/PLYVMH | 32 - .../eclipse/share/keywords/900_OPM/P/POLYMW | 6 - .../eclipse/share/keywords/900_OPM/P/PRECSALT | 6 - .../eclipse/share/keywords/900_OPM/P/PVTGW | 27 - .../eclipse/share/keywords/900_OPM/P/PVTGWO | 28 - .../eclipse/share/keywords/900_OPM/P/PYACTION | 26 - .../eclipse/share/keywords/900_OPM/P/PYINPUT | 16 - .../eclipse/share/keywords/900_OPM/R/RHO | 11 - .../eclipse/share/keywords/900_OPM/R/RWGSALT | 29 - .../eclipse/share/keywords/900_OPM/S/SALTPVD | 22 - .../eclipse/share/keywords/900_OPM/S/SALTSOL | 10 - .../eclipse/share/keywords/900_OPM/S/SKPRPOLY | 43 - .../eclipse/share/keywords/900_OPM/S/SKPRWAT | 38 - .../eclipse/share/keywords/900_OPM/S/SPOLYMW | 10 - .../eclipse/share/keywords/900_OPM/T/TLPMIXPA | 21 - .../eclipse/share/keywords/900_OPM/V/VAPWAT | 6 - .../eclipse/share/keywords/900_OPM/W/WPMITAB | 16 - .../eclipse/share/keywords/900_OPM/W/WSKPTAB | 20 - .../eclipse/share/keywords/keyword_list.cmake | 1115 - .../opm-common/test_util/Deviation.hpp | 32 - .../test_util/EclFilesComparator.cpp | 143 - .../test_util/EclFilesComparator.hpp | 93 - .../test_util/EclRegressionTest.cpp | 1267 - .../test_util/EclRegressionTest.hpp | 192 - .../opm-common/test_util/compareECL.cpp | 262 - .../opm-common/test_util/convertECL.cpp | 252 - .../opm-common/test_util/summary.cpp | 147 - .../opm-common/test_util/test_esmry_lod.cpp | 230 - .../opm-common/tests/BASE_SIM.DATA | 128 - .../opm-common/tests/BASE_SIM_THPRES.DATA | 165 - .../opm-common/tests/ECLFILE.FINIT | 1737 - .../opm-common/tests/ECLFILE.INIT | Bin 37224 -> 0 bytes .../opm-common/tests/EMBEDDED_PYTHON.DATA | 70 - .../opm-common/tests/EXIT_TEST.DATA | 550 - .../opm-common/tests/FIRST_SIM_THPRES.DATA | 166 - .../opm-common/tests/MODEL2_RESTART.DATA | 28892 ---------------- .../opm-common/tests/MSW.DATA | 2485 -- .../opm-common/tests/MSW_RESTART.DATA | 2359 -- .../opm-common/tests/PYACTION.DATA | 5 - .../opm-common/tests/RESTART_SIM.DATA | 131 - .../opm-common/tests/SOFR_TEST.DATA | 266 - .../opm-common/tests/SPE1CASE1.DATA | 458 - .../opm-common/tests/SPE1CASE1.EGRID | Bin 14824 -> 0 bytes .../opm-common/tests/SPE1CASE1.RFT | Bin 3652 -> 0 bytes .../opm-common/tests/SPE1CASE1.SMSPEC | Bin 1260 -> 0 bytes .../opm-common/tests/SPE1CASE1.UNSMRY | Bin 28428 -> 0 bytes .../opm-common/tests/SPE1CASE1A.SMSPEC | Bin 1260 -> 0 bytes .../opm-common/tests/SPE1CASE1A.UNSMRY | Bin 28232 -> 0 bytes .../opm-common/tests/SPE1CASE1_RST60.SMSPEC | Bin 1204 -> 0 bytes .../opm-common/tests/SPE1CASE1_RST60.UNSMRY | Bin 13440 -> 0 bytes .../opm-common/tests/SPE1CASE2.DATA | 442 - .../opm-common/tests/SPE1CASE2.X0060 | Bin 19832 -> 0 bytes .../opm-common/tests/SPE1CASE2_RESTART.DATA | 426 - .../opm-common/tests/SPE1_TESTCASE.F0025 | 951 - .../opm-common/tests/SPE1_TESTCASE.FUNRST | 8577 ----- .../opm-common/tests/SPE1_TESTCASE.UNRST | Bin 178740 -> 0 bytes .../opm-common/tests/SPE1_TESTCASE.X0025 | Bin 19824 -> 0 bytes .../opm-common/tests/SPE9_CP_PACKED.DATA | 6758 ---- .../opm-common/tests/SUMMARY_EFF_FAC.DATA | 164 - .../opm-common/tests/UDQ_ACTIONX_TEST1.DATA | 515 - .../opm-common/tests/UDQ_ACTIONX_TEST1_U.DATA | 526 - .../tests/UDQ_TEST_WCONPROD_IUAD-2.DATA | 386 - .../opm-common/tests/WorkArea.cpp | 72 - .../opm-common/tests/act1.py | 15 - .../opm-common/tests/action_missing_run.py | 1 - .../opm-common/tests/action_syntax_error.py | 7 - .../tests/expect-wdims.chldg.err.out | 6 - .../opm-common/tests/expect-wdims.err.out | 8 - .../opm-common/tests/group_group.DATA | 537 - .../opm-common/tests/include_example_pvt.txt | 224 - .../tests/include_example_summary.txt | 152 - .../tests/include_grid_3x5x4.grdecl | 121 - .../opm-common/tests/include_sgof.txt | 60 - .../opm-common/tests/include_swof.txt | 64 - .../opm-common/tests/json/example1.json | 6 - .../opm-common/tests/json/jsonTests.cpp | 283 - .../opm-common/tests/msim/MSIM_PYACTION.DATA | 549 - .../opm-common/tests/msim/action1.py | 4 - .../opm-common/tests/msim/action2.py | 9 - .../opm-common/tests/msim/actionx1.include | 551 - .../opm-common/tests/msim/actionx2.include | 530 - .../opm-common/tests/msim/test_msim.cpp | 137 - .../tests/msim/test_msim_ACTIONX.cpp | 433 - .../opm-common/tests/msim/test_msim_EXIT.cpp | 107 - .../opm-common/tests/msim/uda.include | 385 - .../opm-common/tests/parser/ACTIONX.cpp | 811 - .../opm-common/tests/parser/ADDREGTests.cpp | 167 - .../opm-common/tests/parser/AquiferTests.cpp | 556 - .../opm-common/tests/parser/BoxTests.cpp | 205 - .../opm-common/tests/parser/COMPSEGUnits.cpp | 54 - .../tests/parser/ColumnSchemaTests.cpp | 84 - .../tests/parser/ConnectionTests.cpp | 336 - .../opm-common/tests/parser/CopyRegTests.cpp | 175 - .../opm-common/tests/parser/DeckTests.cpp | 691 - .../tests/parser/DeckValueTests.cpp | 214 - .../tests/parser/DynamicStateTests.cpp | 298 - .../tests/parser/DynamicVectorTests.cpp | 93 - .../tests/parser/EclipseGridTests.cpp | 2806 -- .../tests/parser/EclipseStateTests.cpp | 689 - .../tests/parser/EmbeddedPython.cpp | 167 - .../opm-common/tests/parser/EqualRegTests.cpp | 136 - .../opm-common/tests/parser/EventTests.cpp | 77 - .../opm-common/tests/parser/FaceDirTests.cpp | 80 - .../opm-common/tests/parser/FaultTests.cpp | 140 - .../opm-common/tests/parser/FaultsTests.cpp | 34 - .../tests/parser/FieldPropsTests.cpp | 587 - .../opm-common/tests/parser/FoamTests.cpp | 199 - .../tests/parser/FunctionalTests.cpp | 123 - .../tests/parser/GeomodifierTests.cpp | 116 - .../opm-common/tests/parser/GroupTests.cpp | 539 - .../opm-common/tests/parser/IOConfigTests.cpp | 280 - .../tests/parser/InitConfigTest.cpp | 537 - .../tests/parser/MULTREGTScannerTests.cpp | 311 - .../tests/parser/MessageLimitTests.cpp | 97 - .../opm-common/tests/parser/MultiRegTests.cpp | 246 - .../tests/parser/MultisegmentWellTests.cpp | 501 - .../tests/parser/OrderedMapTests.cpp | 172 - .../opm-common/tests/parser/PYACTION.cpp | 72 - .../tests/parser/ParseContextTests.cpp | 814 - .../tests/parser/ParseContext_EXIT1.cpp | 58 - .../tests/parser/ParseDATAWithDefault.cpp | 106 - .../tests/parser/ParserIncludeTests.cpp | 141 - .../opm-common/tests/parser/ParserTests.cpp | 2320 -- .../tests/parser/PvtxTableTests.cpp | 219 - .../tests/parser/RFTConfigTests.cpp | 877 - .../tests/parser/RawKeywordTests.cpp | 101 - .../tests/parser/ResinsightTest.cpp | 109 - .../tests/parser/RestartConfigTests.cpp | 1085 - .../tests/parser/RockTableTests.cpp | 141 - .../opm-common/tests/parser/RunspecTests.cpp | 643 - .../tests/parser/SaltTableTests.cpp | 111 - .../tests/parser/ScheduleRestartTests.cpp | 107 - .../opm-common/tests/parser/ScheduleTests.cpp | 3875 --- .../opm-common/tests/parser/SectionTests.cpp | 391 - .../tests/parser/SimpleTableTests.cpp | 87 - .../tests/parser/SimulationConfigTest.cpp | 297 - .../tests/parser/StarTokenTests.cpp | 127 - .../opm-common/tests/parser/StringTests.cpp | 244 - .../tests/parser/SummaryConfigTests.cpp | 1036 - .../opm-common/tests/parser/TabdimsTests.cpp | 28 - .../tests/parser/TableColumnTests.cpp | 324 - .../tests/parser/TableContainerTests.cpp | 67 - .../tests/parser/TableManagerTests.cpp | 1793 - .../tests/parser/TableSchemaTests.cpp | 47 - .../tests/parser/ThresholdPressureTest.cpp | 315 - .../opm-common/tests/parser/TimeMapTest.cpp | 720 - .../opm-common/tests/parser/TracerTests.cpp | 90 - .../tests/parser/TransMultTests.cpp | 78 - .../opm-common/tests/parser/TuningTests.cpp | 328 - .../opm-common/tests/parser/UDQTests.cpp | 1560 - .../opm-common/tests/parser/UnitTests.cpp | 652 - .../opm-common/tests/parser/ValueTests.cpp | 80 - .../opm-common/tests/parser/WLIST.cpp | 257 - .../opm-common/tests/parser/WTEST.cpp | 215 - .../tests/parser/WellSolventTests.cpp | 237 - .../opm-common/tests/parser/WellTests.cpp | 1222 - .../tests/parser/WellTracerTests.cpp | 178 - .../tests/parser/data/config/directory1/Bpr | 8 - .../tests/parser/data/config/directory1/WWCT | 5 - .../data/config/directory1/subdir/DIMENS | 9 - .../data/integration_tests/ACTION/ACTION.txt | 15 - .../ACTION/ACTION_EXCEPTION.txt | 8 - .../data/integration_tests/BOX/BOXTEST1 | 225 - .../data/integration_tests/DEBUG/DEBUG.DATA | 39 - .../data/integration_tests/DENSITY/DENSITY1 | 9 - .../integration_tests/EDITNNC/EDITNNC.DATA | 43 - .../data/integration_tests/END/END1.txt | 14 - .../data/integration_tests/END/ENDINC1.txt | 14 - .../data/integration_tests/EQUIL/EQUIL1 | 8 - .../integration_tests/GRID/CORNERPOINT.DATA | 1199 - .../GRID/CORNERPOINT_ACTNUM.DATA | 1213 - .../data/integration_tests/GRID/TOPS.DATA | 434 - .../IOConfig/RPTRST_DECK.DATA | 1001 - .../integration_tests/IOConfig/RPT_TEST2.DATA | 814 - .../integration_tests/IOConfig/SPE1CASE2.DATA | 156 - .../integration_tests/IOConfig/SPE9_END.DATA | 174 - .../data/integration_tests/LGR/LGR.DATA | 13 - .../data/integration_tests/MULTREGT/MULTREGT | 192 - .../integration_tests/MULTREGT/MULTREGT.DATA | 57 - .../data/integration_tests/NNC/NNC.DATA | 40 - .../data/integration_tests/NNC/noNNC.DATA | 30 - .../data/integration_tests/POLYMER/POLY.inc | 55 - .../integration_tests/POLYMER/plyads.data | 16 - .../integration_tests/POLYMER/plyadss.data | 18 - .../integration_tests/POLYMER/plydhflf.data | 10 - .../integration_tests/POLYMER/plyshlog.data | 14 - .../integration_tests/POLYMER/plyvisc.data | 8 - .../parser/data/integration_tests/PORO/PORO1 | 95 - .../data/integration_tests/RSVD/RSVD.txt | 28 - .../data/integration_tests/SCHEDULE/SCHEDULE1 | 48 - .../SCHEDULE/SCHEDULE_CMODE_MISSING_DATA | 43 - .../SCHEDULE/SCHEDULE_COMMENTS_AFTER_KEYWORDS | 42 - .../SCHEDULE/SCHEDULE_COMPDAT1 | 103 - .../SCHEDULE/SCHEDULE_EVENTS | 92 - .../integration_tests/SCHEDULE/SCHEDULE_FOAM | 70 - .../SCHEDULE/SCHEDULE_GROUPS | 86 - .../SCHEDULE/SCHEDULE_GROUPS_REPARENT | 36 - .../SCHEDULE_GRUPTREE_EXPLICIT_PARENTING | 31 - .../SCHEDULE/SCHEDULE_MISSING_CMODE | 31 - .../SCHEDULE/SCHEDULE_MULTISEGMENT_WELL | 84 - .../SCHEDULE/SCHEDULE_POLYMER | 69 - .../SCHEDULE/SCHEDULE_SHUT_WELL | 93 - .../integration_tests/SCHEDULE/SCHEDULE_WECON | 59 - .../SCHEDULE/SCHEDULE_WELLS2 | 181 - .../SCHEDULE/SCHEDULE_WELLS_AND_GROUPS | 34 - .../SCHEDULE/SCHEDULE_WELOPEN | 60 - .../SCHEDULE/SCHEDULE_WELOPEN_INVALID | 27 - .../SCHEDULE/SCHEDULE_WELSPECS_GROUPS | 40 - .../SCHEDULE/SCHEDULE_WELSPECS_GRUPTREE | 31 - .../SCHEDULE/SCHEDULE_WGRUPCON | 39 - .../SCHEDULE/wells_group.data | 69 - .../data/integration_tests/TABLES/PVTO2.DATA | 296 - .../data/integration_tests/TABLES/PVTX1.DATA | 55 - .../data/integration_tests/TITLE/TITLE1.txt | 5 - .../parser/data/integration_tests/TRANS/Deck1 | 64 - .../parser/data/integration_tests/TVDP/TVDP1 | 22 - .../data/integration_tests/VFPPROD/VFPPROD1 | 2310 -- .../data/integration_tests/VFPPROD/VFPPROD2 | 2301 -- .../data/integration_tests/WCONHIST/WCONHIST1 | 14 - .../WellWithWildcards/WCONINJE1 | 26 - .../WellWithWildcards/WCONPROD1 | 26 - .../parser/data/integration_tests/bpr.data | 8 - .../include path/readthis.sch | 9 - .../parser/data/integration_tests/mini.data | 3 - .../parser/data/integration_tests/small.data | 17 - .../someobscureelements.data | 15 - .../integration_tests/truncated_records.data | 10 - .../parser/data/integration_tests/udq.data | 718 - .../parser/data/integration_tests/udq2.data | 318 - .../parser/data/integration_tests/wwct.data | 7 - .../opm-common/tests/parser/data/json/BPR | 7 - .../parser/data/json/example_invalid_json | 2 - .../data/json/example_missing_keyword.json | 2 - .../data/json/example_missing_name.json | 4 - .../tests/parser/data/parser/EQLDIMS2 | 7 - .../parser/data/parser/PATHSInInclude.data | 7 - .../data/parser/PATHSInIncludeInvalid.data | 7 - .../data/parser/PATHSWithBackslashes.data | 7 - .../tests/parser/data/parser/include/foo.inc | 3 - .../data/parser/include/foo_invalid.inc | 3 - .../data/parser/include/foobackslash.inc | 3 - .../parser/include/foopath/foo_target.inc | 1 - .../parser/data/parser/include/some_flags.inc | 1 - .../parser/data/parser/includeInvalid.data | 3 - .../symlink1/actual_file_dir/case.data | 3 - .../actual_file_dir/include/include.inc | 1 - .../symlink1/case_symlink.data | 3 - .../symlink2/actual_inlude_file/include.inc | 1 - .../symlink2/caseWithIncludedSymlink.data | 3 - .../actual_include_file/include_oil.inc | 1 - .../includeSymlinkTestdata/symlink3/case.data | 3 - .../symlink3/include.inc | 4 - .../symlink3/include/incl_symlink.inc | 1 - .../includeSymlinkTestdata/symlink4/case.data | 3 - .../includeSymlinkTestdata/symlink4/oil.inc | 1 - .../symlink4/path/case.data | 3 - .../parser/data/parser/includeValid.data | 3 - .../parser/data/parser/includeWrongCase1.data | 3 - .../parser/data/parser/includeWrongCase2.data | 3 - .../parser/data/parser/includeWrongCase3.data | 3 - .../parser/keyword-generator/PORO-invalid | 3 - .../data/parser/keyword-generator/PORO.json | 3 - .../parser/keyword-generator/invalid.json | 3 - .../loader/001_ECLIPSE100/A/2ADDREG | 5 - .../loader/001_ECLIPSE100/A/ACTNUM | 1 - .../loader/001_ECLIPSE100/A/ADDREG | 5 - .../loader/001_ECLIPSE100/B/BLOCK_PROBE | 145 - .../loader/001_ECLIPSE100/B/BOX | 7 - .../loader/002_ECLIPSE300/ADDREG | 6 - .../loader/002_ECLIPSE300/EQUIL | 13 - .../parser/keyword-generator/loader/ZCORN | 1 - .../tests/parser/integration/BoxTest.cpp | 170 - .../parser/integration/CheckDeckValidity.cpp | 106 - .../tests/parser/integration/EDITNNCTests.cpp | 69 - .../integration/EclipseGridCreateFromDeck.cpp | 118 - .../integration/IOConfigIntegrationTest.cpp | 371 - .../tests/parser/integration/IncludeTest.cpp | 192 - .../parser/integration/IntegrationTests.cpp | 240 - .../tests/parser/integration/NNCTests.cpp | 96 - .../tests/parser/integration/ParseKEYWORD.cpp | 1505 - .../tests/parser/integration/Polymer.cpp | 78 - .../integration/ScheduleCreateFromDeck.cpp | 912 - .../integration/TransMultIntegrationTests.cpp | 55 - .../tests/parser/integration/parse_write.cpp | 68 - .../tests/parser/test_ReportConfig.cpp | 162 - .../opm-common/tests/restart/MODEL2.UNRST | Bin 135624 -> 0 bytes .../opm-common/tests/restart/MSW.UNRST | Bin 453632 -> 0 bytes .../opm-common/tests/restart/README | 3 - .../opm-common/tests/rst_test.cpp | 111 - .../opm-common/tests/summary_deck.DATA | 788 - .../summary_deck_non_constant_porosity.DATA | 582 - .../opm-common/tests/table_deck.DATA | 81 - .../opm-common/tests/test_ActiveGridCells.cpp | 88 - .../tests/test_AggregateActionxData.cpp | 553 - .../tests/test_AggregateActionxData_2.cpp | 564 - .../tests/test_AggregateConnectionData.cpp | 815 - .../tests/test_AggregateGroupData.cpp | 584 - .../tests/test_AggregateMSWData.cpp | 854 - .../tests/test_AggregateUDQData.cpp | 455 - .../tests/test_AggregateWellData.cpp | 867 - .../opm-common/tests/test_ArrayDimChecker.cpp | 487 - .../opm-common/tests/test_DoubHEAD.cpp | 94 - .../opm-common/tests/test_EGrid.cpp | 187 - .../opm-common/tests/test_ERft.cpp | 226 - .../opm-common/tests/test_ERsm.cpp | 212 - .../opm-common/tests/test_ERst.cpp | 971 - .../opm-common/tests/test_ESmry.cpp | 388 - .../tests/test_EclFilesComparator.cpp | 69 - .../opm-common/tests/test_EclIO.cpp | 416 - .../tests/test_EclRegressionTest.cpp | 1383 - .../opm-common/tests/test_EclipseIO.cpp | 383 - .../opm-common/tests/test_InteHEAD.cpp | 631 - .../tests/test_LinearisedOutputTable.cpp | 646 - .../opm-common/tests/test_LogiHEAD.cpp | 253 - .../opm-common/tests/test_OpmLog.cpp | 426 - .../opm-common/tests/test_OutputStream.cpp | 2428 -- .../tests/test_PaddedOutputString.cpp | 107 - .../opm-common/tests/test_RFT.cpp | 2427 -- .../opm-common/tests/test_Restart.cpp | 943 - .../opm-common/tests/test_RootFinders.cpp | 62 - .../tests/test_SimulationDataContainer.cpp | 207 - .../opm-common/tests/test_Solution.cpp | 97 - .../opm-common/tests/test_Summary.cpp | 3382 -- .../opm-common/tests/test_SummaryNode.cpp | 76 - .../opm-common/tests/test_Summary_Group.cpp | 282 - .../opm-common/tests/test_Tables.cpp | 3198 -- .../opm-common/tests/test_Wells.cpp | 131 - .../opm-common/tests/test_WindowedArray.cpp | 158 - .../tests/test_calculateCellVol.cpp | 63 - .../opm-common/tests/test_cmp.cpp | 123 - .../opm-common/tests/test_compareSummary.cpp | 95 - .../opm-common/tests/test_cubic.cpp | 68 - .../opm-common/tests/test_messagelimiter.cpp | 160 - .../tests/test_nonuniformtablelinear.cpp | 88 - .../opm-common/tests/test_param.cpp | 121 - .../opm-common/tests/test_regionCache.cpp | 64 - .../opm-common/tests/test_restartwellinfo.cpp | 240 - .../opm-common/tests/test_rst.cpp | 319 - .../opm-common/tests/test_sparsevector.cpp | 106 - .../tests/test_uniformtablelinear.cpp | 70 - .../opm-common/tests/testblackoilstate3.DATA | 144 - .../opm-common/tests/testdata.param | 6 - .../opm-common/tests/testrft.DATA | 62 - .../opm-common/tests/wclose.py | 24 - 2184 files changed, 11860 insertions(+), 302420 deletions(-) rename ThirdParty/custom-opm-common/generated-opm-common/include/opm/{parser => input}/eclipse/Parser/ParserKeywords/A.hpp (98%) rename ThirdParty/custom-opm-common/generated-opm-common/include/opm/{parser => input}/eclipse/Parser/ParserKeywords/B.hpp (97%) create mode 100644 ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/Builtin.hpp rename ThirdParty/custom-opm-common/generated-opm-common/include/opm/{parser => input}/eclipse/Parser/ParserKeywords/C.hpp (98%) rename ThirdParty/custom-opm-common/generated-opm-common/include/opm/{parser => input}/eclipse/Parser/ParserKeywords/D.hpp (98%) rename ThirdParty/custom-opm-common/generated-opm-common/include/opm/{parser => input}/eclipse/Parser/ParserKeywords/E.hpp (97%) rename ThirdParty/custom-opm-common/generated-opm-common/include/opm/{parser => input}/eclipse/Parser/ParserKeywords/F.hpp (96%) rename ThirdParty/custom-opm-common/generated-opm-common/include/opm/{parser => input}/eclipse/Parser/ParserKeywords/G.hpp (98%) rename ThirdParty/custom-opm-common/generated-opm-common/include/opm/{parser => input}/eclipse/Parser/ParserKeywords/H.hpp (99%) rename ThirdParty/custom-opm-common/generated-opm-common/include/opm/{parser => input}/eclipse/Parser/ParserKeywords/I.hpp (99%) rename ThirdParty/custom-opm-common/generated-opm-common/include/opm/{parser => input}/eclipse/Parser/ParserKeywords/J.hpp (97%) rename ThirdParty/custom-opm-common/generated-opm-common/include/opm/{parser => input}/eclipse/Parser/ParserKeywords/K.hpp (90%) rename ThirdParty/custom-opm-common/generated-opm-common/include/opm/{parser => input}/eclipse/Parser/ParserKeywords/L.hpp (98%) rename ThirdParty/custom-opm-common/generated-opm-common/include/opm/{parser => input}/eclipse/Parser/ParserKeywords/M.hpp (86%) rename ThirdParty/custom-opm-common/generated-opm-common/include/opm/{parser => input}/eclipse/Parser/ParserKeywords/N.hpp (96%) rename ThirdParty/custom-opm-common/generated-opm-common/include/opm/{parser => input}/eclipse/Parser/ParserKeywords/O.hpp (80%) rename ThirdParty/custom-opm-common/generated-opm-common/include/opm/{parser => input}/eclipse/Parser/ParserKeywords/P.hpp (99%) rename ThirdParty/custom-opm-common/generated-opm-common/include/opm/{parser => input}/eclipse/Parser/ParserKeywords/Q.hpp (93%) rename ThirdParty/custom-opm-common/generated-opm-common/include/opm/{parser => input}/eclipse/Parser/ParserKeywords/R.hpp (92%) rename ThirdParty/custom-opm-common/generated-opm-common/include/opm/{parser => input}/eclipse/Parser/ParserKeywords/S.hpp (80%) rename ThirdParty/custom-opm-common/generated-opm-common/include/opm/{parser => input}/eclipse/Parser/ParserKeywords/T.hpp (98%) rename ThirdParty/custom-opm-common/generated-opm-common/include/opm/{parser => input}/eclipse/Parser/ParserKeywords/U.hpp (99%) rename ThirdParty/custom-opm-common/generated-opm-common/include/opm/{parser => input}/eclipse/Parser/ParserKeywords/V.hpp (98%) rename ThirdParty/custom-opm-common/generated-opm-common/include/opm/{parser => input}/eclipse/Parser/ParserKeywords/W.hpp (96%) rename ThirdParty/custom-opm-common/generated-opm-common/include/opm/{parser => input}/eclipse/Parser/ParserKeywords/X.hpp (67%) rename ThirdParty/custom-opm-common/generated-opm-common/include/opm/{parser => input}/eclipse/Parser/ParserKeywords/Y.hpp (67%) rename ThirdParty/custom-opm-common/generated-opm-common/include/opm/{parser => input}/eclipse/Parser/ParserKeywords/Z.hpp (96%) create mode 160000 ThirdParty/custom-opm-common/opm-common delete mode 100644 ThirdParty/custom-opm-common/opm-common/.clang-format delete mode 100644 ThirdParty/custom-opm-common/opm-common/.gitignore delete mode 100644 ThirdParty/custom-opm-common/opm-common/.gitmodules delete mode 100644 ThirdParty/custom-opm-common/opm-common/CMakeLists.txt delete mode 100644 ThirdParty/custom-opm-common/opm-common/CMakeLists_files.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/CopyHeaders.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/ExtraTests.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/GenerateKeywords.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/LICENSE delete mode 100644 ThirdParty/custom-opm-common/opm-common/README.md delete mode 100644 ThirdParty/custom-opm-common/opm-common/changelog.md delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Modules/AddOptions.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Modules/BoostTargets.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Modules/CheckCaseSensitiveFileSystem.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Modules/ConfigVars.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Modules/Duplicates.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Modules/FindAlberta.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Modules/FindC99.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Modules/FindClangCheck.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Modules/FindCppCheck.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Modules/FindCwrap.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Modules/FindCxaDemangle.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Modules/FindEigen3.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Modules/FindMETIS.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Modules/FindPETSc.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Modules/FindPTScotch.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Modules/FindParMETIS.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Modules/FindQuadmath.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Modules/FindSuiteSparse.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Modules/FindSuperLU.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Modules/FindUG.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Modules/FindValgrind.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Modules/FindZOLTAN.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Modules/Findcjson.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Modules/Finddune-alugrid.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Modules/Finddune-common.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Modules/Finddune-fem.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Modules/Finddune-geometry.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Modules/Finddune-grid.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Modules/Finddune-istl.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Modules/Finddune-localfunctions.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Modules/Finddune-uggrid.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Modules/Findlibrt.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Modules/Findopm-flowdiagnostics.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Modules/Findopm-tests.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Modules/Findopm-upscaling.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Modules/Findopm-verteq.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Modules/LibtoolArchives.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmAliases.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmBashCompletion.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmCompile.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmCompilerChecks.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmDefaults.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmDistClean.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmDoc.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmFiles.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmFind.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmGrid.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmInit.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmInstall.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmKnown.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmLibMain.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmPackage.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmProject.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmPythonTest.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmSatellites.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmSiblingSearch.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmStaticTargets.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Modules/UseCompVer.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Modules/UseDebugSymbols.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Modules/UseDuneVer.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Modules/UseDynamicBoost.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Modules/UseFastBuilds.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Modules/UseFortranWrappers.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Modules/UseOnlyNeeded.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Modules/UseOpenMP.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Modules/UseOptimization.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Modules/UsePrecompHeaders.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Modules/UseStaticAnalysis.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Modules/UseSystemInfo.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Modules/UseThreads.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Modules/UseVCSInfo.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Modules/UseVersion.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Modules/UseWarnings.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Modules/compat-2.8.3/CMakeParseArguments.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Modules/compat-2.8.5/FindGit.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Modules/compat-2.8.7/CMakePushCheckState.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Modules/compat-2.8.7/FindBLAS.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Modules/compat-2.8.7/FindLAPACK.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Modules/opm-verteq-prereqs.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/OPM-CMake.md delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Scripts/CheckCommits.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Scripts/DuneCompat2.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Scripts/RemoveEmptyDir.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Scripts/WriteVerSHA.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Scripts/clang-check-test.sh.in delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Scripts/cppcheck-test.sh delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Templates/DoxygenLayout.xml delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Templates/la.in delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Templates/opm-project-config-version.cmake.in delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Templates/opm-project-config.cmake.in delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Templates/opm-project.pc.in delete mode 100644 ThirdParty/custom-opm-common/opm-common/cmake/Templates/style.css delete mode 100644 ThirdParty/custom-opm-common/opm-common/cross-platform/PortableEndian.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/cross-platform/windows/PortableEndian.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/cross-platform/windows/Substitutes.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/cross-platform/windows/Substitutes.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/debian/changelog delete mode 100644 ThirdParty/custom-opm-common/opm-common/debian/compat delete mode 100644 ThirdParty/custom-opm-common/opm-common/debian/control delete mode 100644 ThirdParty/custom-opm-common/opm-common/debian/copyright delete mode 100644 ThirdParty/custom-opm-common/opm-common/debian/docs delete mode 100644 ThirdParty/custom-opm-common/opm-common/debian/libopm-common1-bin.install delete mode 100644 ThirdParty/custom-opm-common/opm-common/debian/libopm-common1-dev.install delete mode 100644 ThirdParty/custom-opm-common/opm-common/debian/libopm-common1-doc.install delete mode 100644 ThirdParty/custom-opm-common/opm-common/debian/libopm-common1.install delete mode 100644 ThirdParty/custom-opm-common/opm-common/debian/python3-opm-common.install delete mode 100644 ThirdParty/custom-opm-common/opm-common/debian/rules delete mode 100644 ThirdParty/custom-opm-common/opm-common/debian/source/format delete mode 100644 ThirdParty/custom-opm-common/opm-common/docs/keywords.txt delete mode 100644 ThirdParty/custom-opm-common/opm-common/etc/opm_bash_completion.sh.in delete mode 100644 ThirdParty/custom-opm-common/opm-common/examples/msim.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/examples/opmhash.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/examples/opmi.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/examples/opmpack.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/external/cjson/README delete mode 100644 ThirdParty/custom-opm-common/opm-common/external/cjson/README.opm delete mode 100644 ThirdParty/custom-opm-common/opm-common/external/cjson/cJSON.c delete mode 100644 ThirdParty/custom-opm-common/opm-common/external/cjson/cJSON.h delete mode 100644 ThirdParty/custom-opm-common/opm-common/jenkins/README.md delete mode 100644 ThirdParty/custom-opm-common/opm-common/jenkins/build-opm-module.sh delete mode 100644 ThirdParty/custom-opm-common/opm-common/jenkins/build.sh delete mode 100644 ThirdParty/custom-opm-common/opm-common/jenkins/conv.xsl delete mode 100644 ThirdParty/custom-opm-common/opm-common/jenkins/convert.py delete mode 100644 ThirdParty/custom-opm-common/opm-common/jenkins/setup-opm-tests.sh delete mode 100644 ThirdParty/custom-opm-common/opm-common/jenkins/update-opm-tests.sh delete mode 100644 ThirdParty/custom-opm-common/opm-common/msim/include/opm/msim/msim.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/msim/src/msim.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm-common-prereqs.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/common/ErrorMacros.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/common/Exceptions.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/common/OpmLog/CounterLog.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/common/OpmLog/EclipsePRTLog.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/common/OpmLog/Location.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/common/OpmLog/LogBackend.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/common/OpmLog/LogUtil.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/common/OpmLog/Logger.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/common/OpmLog/MessageFormatter.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/common/OpmLog/MessageLimiter.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/common/OpmLog/OpmLog.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/common/OpmLog/StreamLog.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/common/OpmLog/TimerLog.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/common/data/SimulationDataContainer.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/common/utility/ActiveGridCells.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/common/utility/FileSystem.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/common/utility/OpmInputError.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/common/utility/Serializer.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/common/utility/String.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/common/utility/TimeService.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/common/utility/numeric/MonotCubicInterpolator.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/common/utility/numeric/NonuniformTableLinear.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/common/utility/numeric/RootFinders.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/common/utility/numeric/SparseVector.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/common/utility/numeric/UniformTableLinear.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/common/utility/numeric/blas_lapack.h delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/common/utility/numeric/buildUniformMonotoneTable.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/common/utility/numeric/calculateCellVol.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/common/utility/numeric/cmp.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/common/utility/numeric/linearInterpolation.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/common/utility/parameters/Parameter.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/common/utility/parameters/ParameterGroup.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/common/utility/parameters/ParameterGroup_impl.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/common/utility/parameters/ParameterMapItem.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/common/utility/parameters/ParameterRequirement.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/common/utility/parameters/ParameterStrings.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/common/utility/parameters/ParameterTools.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/common/utility/platform_dependent/disable_warnings.h delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/common/utility/platform_dependent/reenable_warnings.h delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/EGrid.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/EInit.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/ERft.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/ERsm.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/ERst.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/ESmry.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/EclFile.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/EclIOdata.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/EclOutput.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/EclUtil.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/ExtESmry.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/OutputStream.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/PaddedOutputString.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/RestartFileView.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/SummaryNode.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/rst/connection.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/rst/group.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/rst/header.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/rst/segment.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/rst/state.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/rst/well.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/json/JsonObject.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/output/OutputWriter.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/output/data/Aquifer.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/output/data/Cells.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/output/data/Groups.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/output/data/Solution.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/output/data/Wells.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/AggregateActionxData.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/AggregateConnectionData.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/AggregateGroupData.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/AggregateMSWData.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/AggregateUDQData.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/AggregateWellData.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/DoubHEAD.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/EclipseGridInspector.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/EclipseIO.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/EclipseIOUtil.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/InteHEAD.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/LinearisedOutputTable.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/LogiHEAD.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/RegionCache.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/RestartIO.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/RestartValue.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/Summary.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/Tables.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/VectorItems/aquifer.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/VectorItems/connection.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/VectorItems/doubhead.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/VectorItems/group.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/VectorItems/intehead.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/VectorItems/logihead.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/VectorItems/msw.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/VectorItems/tabdims.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/VectorItems/well.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/WindowedArray.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/WriteInit.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/WriteRFT.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/WriteRPT.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/WriteRestartHelpers.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Deck/Deck.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Deck/DeckItem.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Deck/DeckKeyword.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Deck/DeckOutput.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Deck/DeckRecord.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Deck/DeckSection.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Deck/DeckValue.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Deck/UDAValue.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Deck/value_status.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Aquancon.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/AquiferCT.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/AquiferConfig.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Aquifetp.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/EclipseConfig.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/EclipseState.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Edit/EDITNNC.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/EndpointScaling.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Grid/Box.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Grid/BoxManager.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Grid/EclipseGrid.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Grid/FaceDir.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Grid/Fault.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Grid/FaultCollection.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Grid/FaultFace.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Grid/FieldPropsManager.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Grid/GridDims.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Grid/MULTREGTScanner.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Grid/MinpvMode.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Grid/NNC.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Grid/PinchMode.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Grid/SatfuncPropertyInitializers.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Grid/TransMult.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/IOConfig/IOConfig.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/IOConfig/RestartConfig.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/InitConfig/Equil.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/InitConfig/FoamConfig.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/InitConfig/InitConfig.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Runspec.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Action/ASTNode.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Action/Actdims.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Action/ActionAST.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Action/ActionContext.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Action/ActionResult.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Action/ActionValue.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Action/ActionX.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Action/Actions.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Action/Condition.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Action/PyAction.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/ArrayDimChecker.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/DynamicState.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/DynamicVector.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Events.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Group/GConSale.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Group/GConSump.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Group/GTNode.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Group/Group.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Group/GuideRate.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Group/GuideRateConfig.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Group/GuideRateModel.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/MSW/Segment.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/MSW/SpiralICD.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/MSW/Valve.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/MSW/WellSegments.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/MSW/icd.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/MSW/updatingConnectionsWithSegments.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/MessageLimits.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/OilVaporizationProperties.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/RFTConfig.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/RPTConfig.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Schedule.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/ScheduleTypes.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/SummaryState.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/TimeMap.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Tuning.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQASTNode.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQActive.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQAssign.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQConfig.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQContext.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQDefine.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQEnums.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQExpression.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQFunction.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQFunctionTable.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQInput.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQParams.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQSet.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/VFPInjTable.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/VFPProdTable.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Well/Connection.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Well/InjectionControls.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Well/ProductionControls.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Well/WList.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Well/WListManager.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Well/Well.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Well/WellBrineProperties.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Well/WellConnections.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Well/WellEconProductionLimits.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Well/WellFoamProperties.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Well/WellInjectionProperties.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Well/WellPolymerProperties.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Well/WellProductionProperties.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Well/WellTestConfig.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Well/WellTestState.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Well/WellTracerProperties.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/SimulationConfig/BCConfig.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/SimulationConfig/RockConfig.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/SimulationConfig/SimulationConfig.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/SimulationConfig/ThresholdPressure.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/SummaryConfig/SummaryConfig.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/Aqudims.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/AqutabTable.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/BrineDensityTable.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/ColumnSchema.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/DenT.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/EnkrvdTable.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/EnptvdTable.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/Eqldims.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/FlatTable.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/FoamadsTable.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/FoammobTable.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/GasvisctTable.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/ImkrvdTable.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/ImptvdTable.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/JFunc.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/MiscTable.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/MsfnTable.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/OilvisctTable.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/OverburdTable.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/PbvdTable.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/PdvdTable.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/PlyadsTable.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/PlydhflfTable.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/PlymaxTable.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/PlymwinjTable.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/PlyrockTable.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/PlyshlogTable.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/PlyviscTable.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/PmiscTable.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/PolyInjTable.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/PvdgTable.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/PvdoTable.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/PvdsTable.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/PvtgTable.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/PvtoTable.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/PvtwsaltTable.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/PvtxTable.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/Regdims.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/Rock2dTable.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/Rock2dtrTable.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/RocktabTable.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/RockwnodTable.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/RsvdTable.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/RtempvdTable.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/RvvdTable.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/SaltvdTable.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/SgcwmisTable.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/SgfnTable.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/SgofTable.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/SgwfnTable.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/SimpleTable.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/SkprpolyTable.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/SkprwatTable.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/SlgofTable.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/Sof2Table.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/Sof3Table.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/SolventDensityTable.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/SorwmisTable.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/SpecheatTable.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/SpecrockTable.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/SsfnTable.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/StandardCond.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/SwfnTable.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/SwofTable.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/Tabdims.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/TableColumn.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/TableContainer.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/TableEnums.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/TableIndex.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/TableManager.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/TableSchema.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/TlpmixpaTable.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/TracerVdTable.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/WatvisctTable.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/TracerConfig.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Util/IOrderSet.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Util/OrderedMap.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Util/Value.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/checkDeck.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Generator/KeywordGenerator.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Generator/KeywordLoader.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Parser/ErrorGuard.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Parser/InputErrorAction.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Parser/ParseContext.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Parser/Parser.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Parser/ParserConst.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Parser/ParserEnums.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Parser/ParserItem.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Parser/ParserKeyword.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Parser/ParserRecord.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Python/Python.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Units/Dimension.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Units/UnitSystem.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Units/Units.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Utility/Functional.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Utility/Stringview.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Utility/Typetools.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/redhat/opm-common.spec delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/common/OpmLog/CounterLog.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/common/OpmLog/EclipsePRTLog.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/common/OpmLog/LogBackend.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/common/OpmLog/LogUtil.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/common/OpmLog/Logger.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/common/OpmLog/OpmLog.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/common/OpmLog/StreamLog.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/common/OpmLog/TimerLog.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/common/data/SimulationDataContainer.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/common/utility/ActiveGridCells.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/common/utility/FileSystem.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/common/utility/OpmInputError.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/common/utility/TimeService.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/common/utility/numeric/MonotCubicInterpolator.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/common/utility/numeric/calculateCellVol.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/common/utility/parameters/Parameter.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/common/utility/parameters/ParameterGroup.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/common/utility/parameters/ParameterTools.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/io/eclipse/EGrid.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/io/eclipse/EInit.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/io/eclipse/ERft.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/io/eclipse/ERsm.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/io/eclipse/ERst.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/io/eclipse/ESmry.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/io/eclipse/ESmry_write_rsm.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/io/eclipse/EclFile.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/io/eclipse/EclOutput.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/io/eclipse/EclUtil.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/io/eclipse/ExtESmry.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/io/eclipse/OutputStream.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/io/eclipse/SummaryNode.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/io/eclipse/rst/connection.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/io/eclipse/rst/group.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/io/eclipse/rst/header.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/io/eclipse/rst/segment.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/io/eclipse/rst/state.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/io/eclipse/rst/well.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/json/JsonObject.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/output/data/Solution.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/AggregateActionxData.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/AggregateConnectionData.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/AggregateGroupData.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/AggregateMSWData.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/AggregateUDQData.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/AggregateWellData.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/CreateActionxDims.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/CreateDoubHead.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/CreateInteHead.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/CreateLogiHead.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/CreateUdqDims.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/DoubHEAD.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/EclipseGridInspector.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/EclipseIO.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/InteHEAD.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/LinearisedOutputTable.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/LoadRestart.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/LogiHEAD.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/RegionCache.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/RestartIO.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/RestartValue.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/Summary.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/Tables.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/WriteInit.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/WriteRFT.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/WriteRPT.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/report/WELSPECS.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Deck/Deck.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Deck/DeckItem.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Deck/DeckKeyword.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Deck/DeckOutput.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Deck/DeckRecord.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Deck/DeckSection.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Deck/DeckValue.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Deck/UDAValue.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Aquancon.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/AquiferCT.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/AquiferConfig.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Aquifetp.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/EclipseConfig.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/EclipseState.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Edit/EDITNNC.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/EndpointScaling.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/Box.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/BoxManager.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/EclipseGrid.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/FaceDir.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/Fault.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/FaultCollection.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/FaultFace.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/FieldProps.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/FieldProps.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/FieldPropsManager.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/GridDims.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/MULTREGTScanner.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/NNC.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/Operate.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/Operate.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/PinchMode.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/SatfuncPropertyInitializers.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/TransMult.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/setKeywordBox.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/setKeywordBox.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/IOConfig/IOConfig.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/IOConfig/RestartConfig.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/InitConfig/Equil.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/InitConfig/FoamConfig.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/InitConfig/InitConfig.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Runspec.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Action/ASTNode.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Action/Actdims.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Action/ActionAST.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Action/ActionContext.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Action/ActionParser.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Action/ActionParser.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Action/ActionResult.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Action/ActionValue.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Action/ActionX.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Action/Actions.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Action/Condition.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Action/PyAction.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/ArrayDimChecker.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Events.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Group/GConSale.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Group/GConSump.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Group/GTNode.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Group/Group.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Group/GuideRate.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Group/GuideRateConfig.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Group/GuideRateModel.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/MSW/Compsegs.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/MSW/Compsegs.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/MSW/Segment.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/MSW/SpiralICD.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/MSW/Valve.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/MSW/WellSegments.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/MSW/icd.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/MSW/updatingConnectionsWithSegments.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/MessageLimits.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/OilVaporizationProperties.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/RFTConfig.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/RPTConfig.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Schedule.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/ScheduleTypes.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/SummaryState.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/TimeMap.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQASTNode.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQActive.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQAssign.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQConfig.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQContext.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQDefine.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQEnums.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQFunction.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQFunctionTable.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQInput.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQParams.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQParser.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQParser.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQSet.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/VFPInjTable.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/VFPProdTable.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Well/Connection.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Well/WList.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Well/WListManager.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Well/Well.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Well/WellBrineProperties.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Well/WellConnections.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Well/WellEconProductionLimits.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Well/WellFoamProperties.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Well/WellInjectionProperties.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Well/WellPolymerProperties.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Well/WellProductionProperties.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Well/WellTestConfig.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Well/WellTestState.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Well/WellTracerProperties.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Well/injection.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Well/injection.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/eval_uda.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/eval_uda.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/SimulationConfig/BCConfig.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/SimulationConfig/RockConfig.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/SimulationConfig/SimulationConfig.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/SimulationConfig/ThresholdPressure.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/SummaryConfig/SummaryConfig.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Tables/Bdensity.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Tables/BrineDensityTable.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Tables/ColumnSchema.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Tables/DenT.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Tables/JFunc.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Tables/PolyInjTables.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Tables/PvtwsaltTable.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Tables/PvtxTable.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Tables/Rock2dTable.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Tables/Rock2dtrTable.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Tables/SimpleTable.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Tables/SolventDensityTable.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Tables/StandardCond.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Tables/TableColumn.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Tables/TableContainer.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Tables/TableIndex.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Tables/TableManager.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Tables/TableSchema.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Tables/Tables.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/TracerConfig.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/checkDeck.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Generator/KeywordGenerator.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Generator/KeywordLoader.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Parser/ErrorGuard.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Parser/ParseContext.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Parser/Parser.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Parser/ParserEnums.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Parser/ParserItem.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Parser/ParserKeyword.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Parser/ParserRecord.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Parser/createDefaultKeywordList.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Parser/raw/RawConsts.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Parser/raw/RawEnums.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Parser/raw/RawKeyword.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Parser/raw/RawKeyword.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Parser/raw/RawRecord.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Parser/raw/RawRecord.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Parser/raw/StarToken.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Parser/raw/StarToken.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Python/EmbedModule.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Python/PyRunModule.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Python/PyRunModule.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Python/Python.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Python/PythonInterp.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Python/PythonInterp.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Units/Dimension.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Units/UnitSystem.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Utility/Functional.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Utility/Stringview.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/keyword_list.argv.in delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ACTDIMS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ACTION delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ACTIONG delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ACTIONR delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ACTIONS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ACTIONW delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ACTIONX delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ACTNUM delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ACTPARAM delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ADD delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ADDREG delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ADDZCORN delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ADSALNOD delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ADSORP delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AITS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AITSOFF delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ALKADS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ALKALINE delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ALKROCK delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ALL delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ALPOLADS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ALSURFAD delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ALSURFST delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AMALGAM delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/API delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/APIGROUP delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/APILIM delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/APIVD delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AQANCONL delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AQANNC delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AQANTRC delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AQUALIST delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AQUANCON delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AQUCHGAS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AQUCHWAT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AQUCON delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AQUCT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AQUCWFAC delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AQUDIMS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AQUFET delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AQUFETP delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AQUFLUX delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AQUIFER_PROBE_ANALYTIC delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AQUIFER_PROBE_NUMERIC delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AQUNNC delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AQUNUM delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AQUTAB delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AUTOCOAR delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AUTOREF delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/B/BDENSITY delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/B/BGGI delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/B/BIGMODEL delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/B/BLACKOIL delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/B/BLOCK_PROBE delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/B/BOGI delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/B/BOUNDARY delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/B/BOX delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/B/BPARA delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/B/BPIDIMS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/B/BRANPROP delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/B/BRINE delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/B/BTOBALFA delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/B/BTOBALFV delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/CALTRAC delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/CARFIN delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/CART delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/CBMOPTS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/CECON delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/CECONT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COAL delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COALADS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COALNUM delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COALPP delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COARSEN delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COLLAPSE delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COLUMNS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COMPDAT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COMPDATX delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COMPFLSH delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COMPIMB delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COMPINJK delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COMPLMPL delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COMPLUMP delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COMPOFF delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COMPORD delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COMPRIV delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COMPRP delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COMPRPL delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COMPSEGL delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COMPSEGS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COMPVE delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COMPVEL delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/CONNECTION_PROBE delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COORD delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COORDSYS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COPY delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COPYBOX delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COPYREG delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/CPIFACT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/CPIFACTL delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/CPR delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/CRITPERM delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/CSKIN delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DATE delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DATES delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DATUM delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DATUMR delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DATUMRX delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DCQDEFN delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DEBUG delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DELAYACT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DENSITY delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DEPTH delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DEPTHTAB delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DEPTHZ delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIAGDISP delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIFF delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIFFC delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIFFCOAL delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIFFDP delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIFFMMF delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIFFMR delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIFFMTHT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIFFMX delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIFFMY delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIFFMZ delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIFFR delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIFFTHT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIFFUSE delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIFFX delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIFFY delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIFFZ delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIMENS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIMPES delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIMPLICT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DISGAS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DISPDIMS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DISPERSE delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DOMAINS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DPGRID delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DPKRMOD delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DPNUM delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DR delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DRILPRI delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DRSDT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DRSDTR delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DRV delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DRVDT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DRVDTR delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DSPDEINT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DTHETA delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DTHETAV delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DUALPERM delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DUALPORO delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DUMPCUPL delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DUMPFLUX delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DX delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DXV delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DY delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DYNAMICR delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DYNRDIMS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DYV delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DZ delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DZMATRIX delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DZMTRX delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DZMTRXV delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DZNET delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/ECHO delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/ECLMC delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EDIT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EDITNNC delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EDITNNCR delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EHYSTR delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EHYSTRR delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/END delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/ENDACTIO delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/ENDBOX delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/ENDDYN delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/ENDFIN delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/ENDINC delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/ENDNUM delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/ENDPOINT_SPECIFIERS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/ENDSCALE delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/ENDSKIP delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/ENKRVD delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/ENPCVD delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/ENPTVD delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/ENSPCVD delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EPSDBGS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EPSDEBUG delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EQLDIMS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EQLNUM delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EQLOPTS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EQLZCORN delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EQUALREG delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EQUALS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EQUIL delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/ESSNODE delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EXCAVATE delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EXCEL delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EXTFIN delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EXTHOST delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EXTRAPMS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EXTREPGL delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FAULTDIM delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FAULTS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FBHPDEF delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FHERCHBL delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FIELD delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FIELD_PROBE delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FILEUNIT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FILLEPS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FIPNUM delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FIPOWG delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FIPSEP delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FIP_PROBE delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FLUXNUM delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FLUXREG delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FLUXTYPE delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FMTHMD delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FMTIN delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FMTOUT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FMWSET delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FOAM delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FOAMADS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FOAMDCYO delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FOAMDCYW delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FOAMFCN delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FOAMFRM delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FOAMFSC delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FOAMFSO delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FOAMFST delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FOAMFSW delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FOAMMOB delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FOAMMOBP delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FOAMMOBS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FOAMOPTS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FOAMROCK delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FORMFEED delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FRICTION delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FULLIMP delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GAS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GASBEGIN delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GASCONC delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GASEND delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GASFCOMP delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GASFDECR delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GASFDELC delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GASFIELD delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GASFTARG delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GASMONTH delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GASPERIO delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GASSATC delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GASYEAR delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GCALECON delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GCONCAL delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GCONENG delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GCONINJE delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GCONPRI delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GCONPROD delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GCONSALE delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GCONSUMP delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GCONTOL delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GCUTBACK delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GCUTBACT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GCVD delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GDCQ delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GDCQECON delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GDFILE delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GDIMS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GDORIENT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GDRILPOT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GECON delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GECONT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GEFAC delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GETDATA delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GETGLOB delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GI delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GIALL delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GIMODEL delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GINODE delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GLIFTLIM delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GLIFTOPT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GMWSET delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GNETDP delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GNETINJE delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GNETPUMP delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GPMAINT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRADGRUP delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRADRESV delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRADRFT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRADWELL delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRAVCONS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRAVDR delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRAVDRB delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRAVDRM delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRAVITY delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRDREACH delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRID delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRIDFILE delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRIDOPTS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRIDUNIT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GROUP_PROBE delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRUPMAST delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRUPNET delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRUPRIG delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRUPSLAV delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRUPTARG delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRUPTREE delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GSATINJE delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GSATPROD delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GSEPCOND delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GSSCPTST delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GSWINGF delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GTADD delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GTMULT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GUIDECAL delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GUIDERAT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GUPFREQ delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GWRTWCV delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HALFTRAN delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HAxxxxxx delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HBNUM delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HDISP delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HMAQUCT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HMAQUFET delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HMAQUNUM delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HMDIMS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HMFAULTS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HMMLAQUN delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HMMLCTAQ delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HMMLFTAQ delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HMMLTWCN delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HMMULTFT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HMMULTSG delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HMMULTxx delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HMPROPS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HMROCK delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HMROCKT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HMRREF delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HMWELCON delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HMWPIMLT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HMxxxxxx delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HRFIN delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HWKRO delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HWKRORG delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HWKRORW delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HWKRW delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HWKRWR delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HWPCW delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HWSNUM delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HWSOGCR delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HWSOWCR delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HWSWCR delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HWSWL delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HWSWLPC delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HWSWU delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HXFIN delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HYDRHEAD delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HYFIN delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HYMOBGDR delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HYST delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HYSTCHCK delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HZFIN delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/IHOST delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/IMBNUM delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/IMBNUMMF delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/IMKRVD delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/IMPCVD delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/IMPES delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/IMPLICIT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/IMPORT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/IMPTVD delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/IMSPCVD delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/INCLUDE delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/INIT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/INRAD delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/INSPEC delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/INTPC delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/IONROCK delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/IONXROCK delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/IONXSURF delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/IPCG delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/IPCW delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/ISGCR delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/ISGL delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/ISGLPC delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/ISGU delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/ISOGCR delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/ISOLNUM delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/ISOWCR delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/ISWCR delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/ISWL delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/ISWLPC delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/ISWU delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/J/JFUNC delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/J/JFUNCR delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/K/KRNUM delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/K/KRNUMMF delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LAB delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LANGMPL delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LANGMUIR delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LANGSOLV delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LCUNIT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LGR delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LGRCOPY delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LGRFREE delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LGRLOCK delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LGROFF delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LGRON delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LICENSES delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LIFTOPT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LINCOM delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LINKPERM delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LKRO delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LKRORG delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LKRORW delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LKRW delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LKRWR delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LOAD delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LOWSALT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LPCW delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LSALTFNC delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LSLTWNUM delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LSNUM delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LSOGCR delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LSOWCR delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LSWCR delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LSWL delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LSWLPC delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LSWU delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LTOSIGMA delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LWKRO delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LWKRORG delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LWKRORW delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LWKRW delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LWKRWR delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LWPCW delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LWSLTNUM delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LWSNUM delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LWSOGCR delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LWSOWCR delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LWSWCR delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LWSWL delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LWSWLPC delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LWSWU delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LX delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LXFIN delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LY delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LYFIN delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LZ delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LZFIN delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MAPAXES delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MAPUNITS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MASSFLOW delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MATCORR delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MAXVALUE delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MEMORY delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MESSAGE delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MESSAGES delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MESSOPTS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MESSSRVC delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/METRIC delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MINNNCT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MINPORV delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MINPV delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MINPVV delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MINVALUE delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MISC delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MISCIBLE delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MISCNUM delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MLANG delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MLANGSLV delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MONITOR delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MPFANUM delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MPFNNC delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MSFN delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MSGFILE delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MULSGGD delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MULSGGDV delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MULTFLT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MULTIN delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MULTIPLY delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MULTIREG delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MULTNUM delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MULTOUT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MULTOUTS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MULTPV delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MULTREAL delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MULTREGD delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MULTREGH delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MULTREGP delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MULTREGT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MULTSIG delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MULTSIGV delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MULT_XYZ delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NARROW delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NCONSUMP delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NEFAC delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NETBALAN delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NETCOMPA delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NETWORK delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NEWTRAN delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NEXT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NEXTSTEP delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NEXTSTPL delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NINENUM delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NINEPOIN delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NMATOPTS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NMATRIX delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NNC delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NNEWTF delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NOCASC delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NODEPROP delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NODPPM delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NOECHO delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NOGGF delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NOHMD delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NOHMO delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NOHYST delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NOINSPEC delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NOMONITO delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NONNC delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NORSSPEC delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NOSIM delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NOWARN delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NOWARNEP delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NRSOUT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NSTACK delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NTG delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NUMRES delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NUPCOL delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NWATREM delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NXFIN delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NYFIN delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NZFIN delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/O/OFM delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/O/OIL delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/O/OILAPI delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/O/OILVISCT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/O/OLDTRAN delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/O/OLDTRANR delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/O/OPERATE delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/O/OPERATER delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/O/OPERNUM delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/O/OPTIONS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/O/OUTRAD delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/O/OUTSOL delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/O/OVERBURD delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PARALLEL delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PARAOPTS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PARTTRAC delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PATHS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PBUB delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PBVD delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PCG delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PCG32D delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PCW delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PCW32D delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PDEW delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PDVD delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PEBI delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PECOEFS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PEDIMS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PEGTABX delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PEKTABX delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PENUM delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PERFORMANCE_PROBE delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PERMAVE delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PERMJFUN delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PERMR delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PERMTHT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PERMX delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PERMXY delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PERMY delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PERMYZ delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PERMZ delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PERMZX delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PETGRID delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PETOPTS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PICOND delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PIMTDIMS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PIMULTAB delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PINCH delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PINCHNUM delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PINCHOUT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PINCHREG delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PINCHXY delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLMIXNUM delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLMIXPAR delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYADS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYADSS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYATEMP delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYCAMAX delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYDHFLF delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYESAL delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYKRRF delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYMAX delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYOPTS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYRMDEN delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYROCK delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYROCKM delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYSHEAR delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYSHLOG delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYTRRF delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYTRRFA delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYVISC delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYVISCS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYVISCT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYVSCST delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PMAX delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PMISC delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/POLYMER delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PORO delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PORV delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PPCWMAX delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PRESSURE delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PRIORITY delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PROPS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PRORDER delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PRVD delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PSTEADY delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PSWRG delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PSWRO delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PVCDO delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PVCO delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PVDG delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PVDO delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PVDS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PVTG delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PVTNUM delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PVTO delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PVTW delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PVTWSALT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PVT_M delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PVZG delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/Q/QDRILL delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/Q/QHRATING delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/Q/QMOBIL delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RADFIN delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RADFIN4 delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RADIAL delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RAINFALL delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RBEDCONT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RCMASTS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/REACACT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/REACHES delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/READDATA delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/REFINE delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/REGDIMS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/REGION2REGION_PROBE delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/REGIONS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/REGION_PROBE delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RESIDNUM delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RESTART delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RESVNUM delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RIVDEBUG delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RIVERSYS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RIVRDIMS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RIVRPROP delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RIVRXSEC delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RIVSALT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RIVTRACE delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RKTRMDIR delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/ROCK delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/ROCK2D delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/ROCK2DTR delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/ROCKCOMP delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/ROCKFRAC delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/ROCKNUM delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/ROCKOPTS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/ROCKPAMA delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/ROCKTAB delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/ROCKTABH delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/ROCKTABW delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/ROCKTHSG delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/ROCKTSIG delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/ROCKV delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/ROCKWNOD delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RPTCPL delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RPTGRID delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RPTGRIDL delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RPTHMD delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RPTHMG delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RPTHMW delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RPTINIT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RPTISOL delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RPTONLY delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RPTONLYO delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RPTPROPS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RPTREGS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RPTRST delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RPTRUNSP delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RPTSCHED delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RPTSMRY delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RPTSOL delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RSCONST delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RSCONSTT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RSGI delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RSSPEC delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RSSSPEC delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RSVD delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RTEMP delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RTEMPA delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RTEMPVD delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RUNSPEC delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RUNSUM delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RV delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RVCONST delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RVCONSTT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RVGI delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RVVD delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SALT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SALTNODE delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SALTREST delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SALTVD delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SAMG delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SATNUM delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SATOPTS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SAVE delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SCALECRS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SCALELIM delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SCDATAB delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SCDETAB delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SCDPDIMS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SCDPTAB delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SCDPTRAC delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SCHEDULE delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SCVD delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SDENSITY delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SEGMENT_PROBE delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SEPARATE delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SEPVALS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SFOAM delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SGAS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SGCR delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SGCWMIS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SGF32D delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SGFN delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SGL delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SGLPC delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SGOF delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SGU delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SGWFN delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SHRATE delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SIGMA delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SIGMAGD delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SIGMAGDV delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SIGMATH delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SIGMAV delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SIMULATE delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SKIP delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SKIP100 delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SKIP300 delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SKIPREST delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SKRO delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SKRORG delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SKRORW delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SKRW delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SKRWR delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SLAVES delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SLGOF delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SMRYDIMS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SMULTX delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SMULTY delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SMULTZ delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SOCRS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SOF2 delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SOF3 delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SOF32D delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SOGCR delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SOIL delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SOLUTION delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SOLVCONC delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SOLVDIMS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SOLVDIRS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SOLVENT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SOLVFRAC delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SOLVNUM delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SOLWNUM delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SOMGAS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SOMWAT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SORWMIS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SOWCR delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SPECGRID delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SPECHEAT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SPECROCK delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SPOLY delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SSFN delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SSGCR delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SSGL delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SSOGCR delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SSOL delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SSOWCR delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SSWCR delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SSWL delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SSWU delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/START delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/STOG delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/STONE delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/STONE1 delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/STONE1EX delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/STONE2 delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/STOW delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/STWG delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SUMMARY delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SUMTHIN delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SURF delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SURFACT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SURFACTW delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SURFADDW delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SURFADS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SURFCAPD delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SURFESAL delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SURFNUM delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SURFOPTS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SURFROCK delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SURFST delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SURFSTES delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SURFVISC delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SURFWNUM delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SWAT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SWATINIT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SWCR delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SWF32D delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SWFN delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SWINGFAC delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SWL delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SWLPC delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SWOF delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SWU delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TABDIMS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TBLK delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TEMP delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TEMPNODE delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TEMPTVD delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TEMPVD delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/THCONR delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/THERMAL delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/THPRES delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/THPRESFT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TIGHTEN delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TIGHTENP delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TIME delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TITLE delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TLMIXPAR delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TNUM delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TOLCRIT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TOPS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TPAMEPS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TPAMEPSS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRACER delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRACERKM delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRACERKP delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRACERS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRACITVD delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRACTVD delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRADS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRANGL delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRANR delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRANTHT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRANX delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRANY delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRANZ delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRDCY delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRDIF delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRDIS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRKPF delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRNHD delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRPLPORO delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRROCK delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TSTEP delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TUNING delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TUNINGDP delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TUNINGH delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TUNINGL delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TUNINGS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TVDP delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TZONE delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/U/UDADIMS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/U/UDQ delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/U/UDQDIMS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/U/UDQPARAM delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/U/UDT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/U/UDTDIMS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/U/UNCODHMD delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/U/UNIFIN delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/U/UNIFOUT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/U/UNIFOUTS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/U/UNIFSAVE delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/U/USECUPL delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/U/USEFLUX delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/U/USENOFLO delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/DFLOWR delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VAPOIL delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VAPPARS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VDFLOW delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VDFLOWR delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VE delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VEDEBUG delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VEFIN delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VEFRAC delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VEFRACP delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VEFRACPV delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VEFRACV delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VFPCHK delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VFPIDIMS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VFPINJ delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VFPPDIMS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VFPPROD delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VFPTABL delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VISAGE delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VISCD delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VISCREF delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VISDATES delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VISOPTS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WAGHYSTR delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WAITBAL delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WALKALIN delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WALQCALC delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WAPI delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WARN delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WATER delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WATVISCT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WBHGLR delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WBOREVOL delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WCALCVAL delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WCONHIST delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WCONINJ delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WCONINJE delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WCONINJH delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WCONINJP delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WCONPROD delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WCUTBACK delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WCUTBACT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WCYCLE delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WDFAC delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WDFACCOR delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WDRILPRI delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WDRILRES delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WDRILTIM delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WECON delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WECONINJ delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WECONT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WEFAC delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WELCNTL delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WELDEBUG delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WELDRAW delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WELEVNT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WELLDIMS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WELL_COMPLETION_PROBE delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WELL_PROBE delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WELMOVEL delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WELOPEN delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WELOPENL delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WELPI delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WELPRI delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WELSEGS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WELSOMIN delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WELSPECL delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WELSPECS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WELTARG delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WFOAM delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WFRICSEG delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WFRICSGL delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WFRICTN delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WFRICTNL delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WGASPROD delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WGORPEN delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WGRUPCON delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WH2NUM delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WH3NUM delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WHEDREFD delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WHISTCTL delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WHTEMP delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WINJMULT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WLIFT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WLIFTOPT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WLIMTOL delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WLIST delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WLISTARG delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WLISTNAM delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WNETCTRL delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WNETDP delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WORKLIM delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WORKTHP delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WPAVE delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WPAVEDEP delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WPIMULT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WPIMULTL delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WPITAB delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WPLUG delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WPOLYMER delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WPOLYRED delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WPOTCALC delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WREGROUP delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WRFT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WRFTPLT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSALT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSCCLEAN delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSCCLENL delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSCTAB delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGAICD delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGDFIN delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGDFMD delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGDFPA delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGDIMS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGEXSS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGFLIM delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGFMOD delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGINIT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGITER delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGLABY delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGLINK delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGMULT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGPROP delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGPULL delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGSEP delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGSICD delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGSOLV delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGTABL delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGVALV delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSOLVENT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSURFACT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WTADD delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WTEMP delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WTEMPQ delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WTEST delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WTHPMAX delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WTMULT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WTRACER delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WVFPDP delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WVFPEXP delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WWPAVE delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/Z/ZCORN delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/Z/ZIPP2OFF delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/Z/ZIPPY2 delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/B/BLOCK_PROBE300 delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/C/CIRCLE delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/C/COMPS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/C/CREF delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/C/CREFS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/D/DREF delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/D/DREFS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/D/DZV delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/G/GASVISCT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/G/GCONPROD delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/H/HEATCR delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/H/HEATCRT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/L/LIVEOIL delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/M/MW delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/M/MWS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/O/OILCOMPR delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/O/OILMW delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/O/OILVTIM delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/O/OPTIONS3 delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/P/PREF delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/P/PREFS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/S/STCOND delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/T/TEMPI delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/T/TEMPVD delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/T/THCGAS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/T/THCOIL delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/T/THCONSF delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/T/THCROCK delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/T/THCWATER delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/T/THERMAL delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/T/TREF delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/T/TREFS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/W/WATDENT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/W/WINJTEMP delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/Z/ZFACT1 delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/Z/ZFACT1S delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/Z/ZFACTOR delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/Z/ZFACTORS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/002_Frontsim/N/NOGRAV delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/B/BC delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/E/EXIT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/G/GASDENT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/G/GCOMPIDX delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/G/GRUPRIG delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/M/MINPVFIL delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/O/OCOMPIDX delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/O/OILDENT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/P/PERMFACT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/P/PINTDIMS delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/P/PLYMWINJ delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/P/PLYVMH delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/P/POLYMW delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/P/PRECSALT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/P/PVTGW delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/P/PVTGWO delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/P/PYACTION delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/P/PYINPUT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/R/RHO delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/R/RWGSALT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/S/SALTPVD delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/S/SALTSOL delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/S/SKPRPOLY delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/S/SKPRWAT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/S/SPOLYMW delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/T/TLPMIXPA delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/V/VAPWAT delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/W/WPMITAB delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/W/WSKPTAB delete mode 100644 ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/keyword_list.cmake delete mode 100644 ThirdParty/custom-opm-common/opm-common/test_util/Deviation.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/test_util/EclFilesComparator.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/test_util/EclFilesComparator.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/test_util/EclRegressionTest.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/test_util/EclRegressionTest.hpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/test_util/compareECL.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/test_util/convertECL.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/test_util/summary.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/test_util/test_esmry_lod.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/BASE_SIM.DATA delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/BASE_SIM_THPRES.DATA delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/ECLFILE.FINIT delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/ECLFILE.INIT delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/EMBEDDED_PYTHON.DATA delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/EXIT_TEST.DATA delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/FIRST_SIM_THPRES.DATA delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/MODEL2_RESTART.DATA delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/MSW.DATA delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/MSW_RESTART.DATA delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/PYACTION.DATA delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/RESTART_SIM.DATA delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/SOFR_TEST.DATA delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/SPE1CASE1.DATA delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/SPE1CASE1.EGRID delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/SPE1CASE1.RFT delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/SPE1CASE1.SMSPEC delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/SPE1CASE1.UNSMRY delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/SPE1CASE1A.SMSPEC delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/SPE1CASE1A.UNSMRY delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/SPE1CASE1_RST60.SMSPEC delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/SPE1CASE1_RST60.UNSMRY delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/SPE1CASE2.DATA delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/SPE1CASE2.X0060 delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/SPE1CASE2_RESTART.DATA delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/SPE1_TESTCASE.F0025 delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/SPE1_TESTCASE.FUNRST delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/SPE1_TESTCASE.UNRST delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/SPE1_TESTCASE.X0025 delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/SPE9_CP_PACKED.DATA delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/SUMMARY_EFF_FAC.DATA delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/UDQ_ACTIONX_TEST1.DATA delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/UDQ_ACTIONX_TEST1_U.DATA delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/UDQ_TEST_WCONPROD_IUAD-2.DATA delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/WorkArea.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/act1.py delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/action_missing_run.py delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/action_syntax_error.py delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/expect-wdims.chldg.err.out delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/expect-wdims.err.out delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/group_group.DATA delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/include_example_pvt.txt delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/include_example_summary.txt delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/include_grid_3x5x4.grdecl delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/include_sgof.txt delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/include_swof.txt delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/json/example1.json delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/json/jsonTests.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/msim/MSIM_PYACTION.DATA delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/msim/action1.py delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/msim/action2.py delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/msim/actionx1.include delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/msim/actionx2.include delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/msim/test_msim.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/msim/test_msim_ACTIONX.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/msim/test_msim_EXIT.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/msim/uda.include delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/ACTIONX.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/ADDREGTests.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/AquiferTests.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/BoxTests.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/COMPSEGUnits.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/ColumnSchemaTests.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/ConnectionTests.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/CopyRegTests.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/DeckTests.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/DeckValueTests.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/DynamicStateTests.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/DynamicVectorTests.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/EclipseGridTests.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/EclipseStateTests.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/EmbeddedPython.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/EqualRegTests.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/EventTests.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/FaceDirTests.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/FaultTests.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/FaultsTests.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/FieldPropsTests.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/FoamTests.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/FunctionalTests.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/GeomodifierTests.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/GroupTests.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/IOConfigTests.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/InitConfigTest.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/MULTREGTScannerTests.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/MessageLimitTests.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/MultiRegTests.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/MultisegmentWellTests.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/OrderedMapTests.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/PYACTION.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/ParseContextTests.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/ParseContext_EXIT1.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/ParseDATAWithDefault.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/ParserIncludeTests.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/ParserTests.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/PvtxTableTests.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/RFTConfigTests.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/RawKeywordTests.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/ResinsightTest.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/RestartConfigTests.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/RockTableTests.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/RunspecTests.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/SaltTableTests.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/ScheduleRestartTests.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/ScheduleTests.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/SectionTests.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/SimpleTableTests.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/SimulationConfigTest.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/StarTokenTests.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/StringTests.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/SummaryConfigTests.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/TabdimsTests.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/TableColumnTests.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/TableContainerTests.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/TableManagerTests.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/TableSchemaTests.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/ThresholdPressureTest.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/TimeMapTest.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/TracerTests.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/TransMultTests.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/TuningTests.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/UDQTests.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/UnitTests.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/ValueTests.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/WLIST.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/WTEST.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/WellSolventTests.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/WellTests.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/WellTracerTests.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/config/directory1/Bpr delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/config/directory1/WWCT delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/config/directory1/subdir/DIMENS delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/ACTION/ACTION.txt delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/ACTION/ACTION_EXCEPTION.txt delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/BOX/BOXTEST1 delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/DEBUG/DEBUG.DATA delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/DENSITY/DENSITY1 delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/EDITNNC/EDITNNC.DATA delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/END/END1.txt delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/END/ENDINC1.txt delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/EQUIL/EQUIL1 delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/GRID/CORNERPOINT.DATA delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/GRID/CORNERPOINT_ACTNUM.DATA delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/GRID/TOPS.DATA delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/IOConfig/RPTRST_DECK.DATA delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/IOConfig/RPT_TEST2.DATA delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/IOConfig/SPE1CASE2.DATA delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/IOConfig/SPE9_END.DATA delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/LGR/LGR.DATA delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/MULTREGT/MULTREGT delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/MULTREGT/MULTREGT.DATA delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/NNC/NNC.DATA delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/NNC/noNNC.DATA delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/POLYMER/POLY.inc delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/POLYMER/plyads.data delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/POLYMER/plyadss.data delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/POLYMER/plydhflf.data delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/POLYMER/plyshlog.data delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/POLYMER/plyvisc.data delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/PORO/PORO1 delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/RSVD/RSVD.txt delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE1 delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_CMODE_MISSING_DATA delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_COMMENTS_AFTER_KEYWORDS delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_COMPDAT1 delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_EVENTS delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_FOAM delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_GROUPS delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_GROUPS_REPARENT delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_GRUPTREE_EXPLICIT_PARENTING delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_MISSING_CMODE delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_MULTISEGMENT_WELL delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_POLYMER delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_SHUT_WELL delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_WECON delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_WELLS2 delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_WELLS_AND_GROUPS delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_WELOPEN delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_WELOPEN_INVALID delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_WELSPECS_GROUPS delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_WELSPECS_GRUPTREE delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_WGRUPCON delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/wells_group.data delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/TABLES/PVTO2.DATA delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/TABLES/PVTX1.DATA delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/TITLE/TITLE1.txt delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/TRANS/Deck1 delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/TVDP/TVDP1 delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/VFPPROD/VFPPROD1 delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/VFPPROD/VFPPROD2 delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/WCONHIST/WCONHIST1 delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/WellWithWildcards/WCONINJE1 delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/WellWithWildcards/WCONPROD1 delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/bpr.data delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/include path/readthis.sch delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/mini.data delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/small.data delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/someobscureelements.data delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/truncated_records.data delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/udq.data delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/udq2.data delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/wwct.data delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/json/BPR delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/json/example_invalid_json delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/json/example_missing_keyword.json delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/json/example_missing_name.json delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/EQLDIMS2 delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/PATHSInInclude.data delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/PATHSInIncludeInvalid.data delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/PATHSWithBackslashes.data delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/include/foo.inc delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/include/foo_invalid.inc delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/include/foobackslash.inc delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/include/foopath/foo_target.inc delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/include/some_flags.inc delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/includeInvalid.data delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/includeSymlinkTestdata/symlink1/actual_file_dir/case.data delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/includeSymlinkTestdata/symlink1/actual_file_dir/include/include.inc delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/includeSymlinkTestdata/symlink1/case_symlink.data delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/includeSymlinkTestdata/symlink2/actual_inlude_file/include.inc delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/includeSymlinkTestdata/symlink2/caseWithIncludedSymlink.data delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/includeSymlinkTestdata/symlink3/actual_include_file/include_oil.inc delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/includeSymlinkTestdata/symlink3/case.data delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/includeSymlinkTestdata/symlink3/include.inc delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/includeSymlinkTestdata/symlink3/include/incl_symlink.inc delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/includeSymlinkTestdata/symlink4/case.data delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/includeSymlinkTestdata/symlink4/oil.inc delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/includeSymlinkTestdata/symlink4/path/case.data delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/includeValid.data delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/includeWrongCase1.data delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/includeWrongCase2.data delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/includeWrongCase3.data delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/keyword-generator/PORO-invalid delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/keyword-generator/PORO.json delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/keyword-generator/invalid.json delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/keyword-generator/loader/001_ECLIPSE100/A/2ADDREG delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/keyword-generator/loader/001_ECLIPSE100/A/ACTNUM delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/keyword-generator/loader/001_ECLIPSE100/A/ADDREG delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/keyword-generator/loader/001_ECLIPSE100/B/BLOCK_PROBE delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/keyword-generator/loader/001_ECLIPSE100/B/BOX delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/keyword-generator/loader/002_ECLIPSE300/ADDREG delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/keyword-generator/loader/002_ECLIPSE300/EQUIL delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/keyword-generator/loader/ZCORN delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/integration/BoxTest.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/integration/CheckDeckValidity.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/integration/EDITNNCTests.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/integration/EclipseGridCreateFromDeck.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/integration/IOConfigIntegrationTest.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/integration/IncludeTest.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/integration/IntegrationTests.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/integration/NNCTests.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/integration/ParseKEYWORD.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/integration/Polymer.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/integration/ScheduleCreateFromDeck.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/integration/TransMultIntegrationTests.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/integration/parse_write.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/parser/test_ReportConfig.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/restart/MODEL2.UNRST delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/restart/MSW.UNRST delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/restart/README delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/rst_test.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/summary_deck.DATA delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/summary_deck_non_constant_porosity.DATA delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/table_deck.DATA delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/test_ActiveGridCells.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/test_AggregateActionxData.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/test_AggregateActionxData_2.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/test_AggregateConnectionData.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/test_AggregateGroupData.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/test_AggregateMSWData.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/test_AggregateUDQData.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/test_AggregateWellData.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/test_ArrayDimChecker.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/test_DoubHEAD.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/test_EGrid.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/test_ERft.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/test_ERsm.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/test_ERst.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/test_ESmry.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/test_EclFilesComparator.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/test_EclIO.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/test_EclRegressionTest.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/test_EclipseIO.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/test_InteHEAD.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/test_LinearisedOutputTable.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/test_LogiHEAD.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/test_OpmLog.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/test_OutputStream.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/test_PaddedOutputString.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/test_RFT.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/test_Restart.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/test_RootFinders.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/test_SimulationDataContainer.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/test_Solution.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/test_Summary.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/test_SummaryNode.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/test_Summary_Group.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/test_Tables.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/test_Wells.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/test_WindowedArray.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/test_calculateCellVol.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/test_cmp.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/test_compareSummary.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/test_cubic.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/test_messagelimiter.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/test_nonuniformtablelinear.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/test_param.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/test_regionCache.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/test_restartwellinfo.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/test_rst.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/test_sparsevector.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/test_uniformtablelinear.cpp delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/testblackoilstate3.DATA delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/testdata.param delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/testrft.DATA delete mode 100644 ThirdParty/custom-opm-common/opm-common/tests/wclose.py diff --git a/.gitmodules b/.gitmodules index 7b2b5f8413..199a9aa3d9 100644 --- a/.gitmodules +++ b/.gitmodules @@ -10,3 +10,6 @@ [submodule "ThirdParty/qtadvanceddocking"] path = ThirdParty/qtadvanceddocking url = https://github.com/CeetronSolutions/qtadvanceddocking.git +[submodule "ThirdParty/custom-opm-common/opm-common"] + path = ThirdParty/custom-opm-common/opm-common + url = https://github.com/CeetronSolutions/opm-common diff --git a/ApplicationLibCode/FileInterface/RifHdf5SummaryExporter.cpp b/ApplicationLibCode/FileInterface/RifHdf5SummaryExporter.cpp index 2842b10b2c..0f82a43b07 100644 --- a/ApplicationLibCode/FileInterface/RifHdf5SummaryExporter.cpp +++ b/ApplicationLibCode/FileInterface/RifHdf5SummaryExporter.cpp @@ -23,8 +23,13 @@ #include "RiaStdStringTools.h" #include "RifHdf5Exporter.h" +#include "RifOpmCommonSummary.h" #include "RifSummaryReaderInterface.h" +#ifdef _MSC_VER +// Disable warning from external library to make sure treat warnings as error works +#pragma warning( disable : 4267 ) +#endif #include "opm/common/utility/FileSystem.hpp" #include "opm/common/utility/TimeService.hpp" #include "opm/io/eclipse/ESmry.hpp" @@ -76,7 +81,7 @@ bool RifHdf5SummaryExporter::ensureHdf5FileIsCreated( const std::string& smspecF const std::string& h5FileName, size_t& hdfFilesCreatedCount ) { - if ( !Opm::filesystem::exists( smspecFileName ) ) return false; + if ( !std::filesystem::exists( smspecFileName ) ) return false; { // Check if we have write permission in the folder @@ -88,7 +93,7 @@ bool RifHdf5SummaryExporter::ensureHdf5FileIsCreated( const std::string& smspecF bool exportIsRequired = false; { - bool h5FileExists = Opm::filesystem::exists( h5FileName ); + bool h5FileExists = std::filesystem::exists( h5FileName ); if ( !h5FileExists ) { exportIsRequired = true; @@ -107,7 +112,7 @@ bool RifHdf5SummaryExporter::ensureHdf5FileIsCreated( const std::string& smspecF // Read all data summary data before starting export to HDF. Loading one and one summary vector causes huge // performance penalty - sourceSummaryData.LoadData(); + sourceSummaryData.loadData(); #pragma omp critical( critical_section_HDF5_export ) { @@ -194,53 +199,47 @@ bool RifHdf5SummaryExporter::writeGeneralSection( RifHdf5Exporter& exporter, Opm //-------------------------------------------------------------------------------------------------- bool RifHdf5SummaryExporter::writeSummaryVectors( RifHdf5Exporter& exporter, Opm::EclIO::ESmry& sourceSummaryData ) { - using SumNodeVector = std::vector; - size_t valueCount = sourceSummaryData.numberOfTimeSteps(); if ( valueCount == 0 ) return false; const std::string datasetName( "values" ); - const SumNodeVector& summaryNodeList = sourceSummaryData.summaryNodeList(); - - auto summaryVectorsGroup = exporter.createGroup( nullptr, "summary_vectors" ); - - std::map> mapKeywordToSummaryNodeIndex; - - for ( size_t i = 0; i < summaryNodeList.size(); i++ ) + std::map> mapVectorNameToSummaryAddresses; + auto [addresses, addressToKeywordMap] = + RifOpmCommonSummaryTools::buildAddressesAndKeywordMap( sourceSummaryData.keywordList() ); + for ( const auto& adr : addresses ) { - const auto summaryNode = summaryNodeList[i]; - const std::string keyword = summaryNode.keyword; + auto vectorName = adr.vectorName(); - if ( mapKeywordToSummaryNodeIndex.find( keyword ) == mapKeywordToSummaryNodeIndex.end() ) + if ( mapVectorNameToSummaryAddresses.find( vectorName ) == mapVectorNameToSummaryAddresses.end() ) { - mapKeywordToSummaryNodeIndex[keyword] = std::vector(); + mapVectorNameToSummaryAddresses[vectorName] = {}; } - auto it = mapKeywordToSummaryNodeIndex.find( keyword ); - if ( it != mapKeywordToSummaryNodeIndex.end() ) + auto it = mapVectorNameToSummaryAddresses.find( vectorName ); + if ( it != mapVectorNameToSummaryAddresses.end() ) { - it->second.push_back( i ); + it->second.push_back( adr ); } } + auto summaryVectorsGroup = exporter.createGroup( nullptr, "summary_vectors" ); + std::set exportErrorKeywords; - for ( const auto& nodesForKeyword : mapKeywordToSummaryNodeIndex ) + for ( const auto& [vectorName, addresses] : mapVectorNameToSummaryAddresses ) { - std::string keyword = nodesForKeyword.first; + auto keywordGroup = exporter.createGroup( &summaryVectorsGroup, vectorName ); - auto keywordGroup = exporter.createGroup( &summaryVectorsGroup, keyword ); - - for ( auto nodeIndex : nodesForKeyword.second ) + for ( const auto& address : addresses ) { - const auto& summaryNode = summaryNodeList[nodeIndex]; - auto smspecKeywordIndex = summaryNode.smspecKeywordIndex; + auto keyword = addressToKeywordMap[address]; + auto smspecKeywordIndex = sourceSummaryData.getSmspecIndexForKeyword( keyword ); const QString& smspecKeywordText = QString( "%1" ).arg( smspecKeywordIndex ); try { - const std::vector& values = sourceSummaryData.get( summaryNode ); + const std::vector& values = sourceSummaryData.get( keyword ); auto dataValuesGroup = exporter.createGroup( &keywordGroup, smspecKeywordText.toStdString() ); exporter.writeDataset( dataValuesGroup, datasetName, values ); @@ -278,10 +277,10 @@ bool RifHdf5SummaryExporter::isFirstOlderThanSecond( const std::string& firstFil { // Use Opm namespace to make sure the code compiles on older compilers - if ( !Opm::filesystem::exists( firstFileName ) || !Opm::filesystem::exists( secondFileName ) ) return false; + if ( !std::filesystem::exists( firstFileName ) || !std::filesystem::exists( secondFileName ) ) return false; - auto timeA = Opm::filesystem::last_write_time( firstFileName ); - auto timeB = Opm::filesystem::last_write_time( secondFileName ); + auto timeA = std::filesystem::last_write_time( firstFileName ); + auto timeB = std::filesystem::last_write_time( secondFileName ); return ( timeA < timeB ); } diff --git a/ApplicationLibCode/FileInterface/RifOpmCommonSummary.cpp b/ApplicationLibCode/FileInterface/RifOpmCommonSummary.cpp index f4548c79e0..6374024d68 100644 --- a/ApplicationLibCode/FileInterface/RifOpmCommonSummary.cpp +++ b/ApplicationLibCode/FileInterface/RifOpmCommonSummary.cpp @@ -21,6 +21,10 @@ #include "RiaLogging.h" #include "RiaStdStringTools.h" +#ifdef _MSC_VER +// Disable warning from external library to make sure treat warnings as error works +#pragma warning( disable : 4267 ) +#endif #include "opm/io/eclipse/ESmry.hpp" #include "opm/io/eclipse/ExtESmry.hpp" @@ -209,7 +213,7 @@ void RifOpmCommonEclipseSummary::buildMetaData() m_timeSteps.push_back( timeAsTimeT ); } - auto [addresses, addressMap] = RifOpmCommonSummaryTools::buildMetaDataKeyword( keywords ); + auto [addresses, addressMap] = RifOpmCommonSummaryTools::buildAddressesAndKeywordMap( keywords ); m_allResultAddresses = addresses; m_summaryAddressToKeywordMap = addressMap; @@ -276,129 +280,53 @@ QString RifOpmCommonEclipseSummary::enhancedSummaryFilename( const QString& head //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -RifEclipseSummaryAddress RifOpmCommonSummaryTools::createAddressFromSummaryNode( const Opm::EclIO::SummaryNode& summaryNode, - const Opm::EclIO::ESmry* summaryFile ) +std::tuple, std::map, std::map> + RifOpmCommonSummaryTools::buildAddressesSmspecAndKeywordMap( const Opm::EclIO::ESmry* summaryFile ) { - int i = -1; - int j = -1; - int k = -1; - - switch ( summaryNode.category ) - { - case Opm::EclIO::SummaryNode::Category::Aquifer: - return RifEclipseSummaryAddress::aquiferAddress( summaryNode.keyword, summaryNode.number ); - break; - case Opm::EclIO::SummaryNode::Category::Well: - return RifEclipseSummaryAddress::wellAddress( summaryNode.keyword, summaryNode.wgname ); - break; - case Opm::EclIO::SummaryNode::Category::Group: - return RifEclipseSummaryAddress::groupAddress( summaryNode.keyword, summaryNode.wgname ); - break; - case Opm::EclIO::SummaryNode::Category::Field: - return RifEclipseSummaryAddress::fieldAddress( summaryNode.keyword ); - break; - case Opm::EclIO::SummaryNode::Category::Region: - { - if ( summaryNode.isRegionToRegion() ) - { - auto [r1, r2] = summaryNode.regionToRegionNumbers(); - return RifEclipseSummaryAddress::regionToRegionAddress( summaryNode.keyword, r1, r2 ); - } - - return RifEclipseSummaryAddress::regionAddress( summaryNode.keyword, summaryNode.number ); - } - break; - case Opm::EclIO::SummaryNode::Category::Block: - summaryFile->ijk_from_global_index( summaryNode.number, i, j, k ); - return RifEclipseSummaryAddress::blockAddress( summaryNode.keyword, i, j, k ); - break; - case Opm::EclIO::SummaryNode::Category::Connection: - summaryFile->ijk_from_global_index( summaryNode.number, i, j, k ); - return RifEclipseSummaryAddress::wellCompletionAddress( summaryNode.keyword, summaryNode.wgname, i, j, k ); - break; - case Opm::EclIO::SummaryNode::Category::Segment: - return RifEclipseSummaryAddress::wellSegmentAddress( summaryNode.keyword, summaryNode.wgname, summaryNode.number ); - break; - case Opm::EclIO::SummaryNode::Category::Miscellaneous: - return RifEclipseSummaryAddress::miscAddress( summaryNode.keyword ); - break; - default: - break; - case Opm::EclIO::SummaryNode::Category::Node: - // The vector "GPR" is defined as Node - // The behavior in libecl is to use the category Group - // https://github.com/OPM/ResInsight/issues/7838 - return RifEclipseSummaryAddress::groupAddress( summaryNode.keyword, summaryNode.wgname ); - break; - case Opm::EclIO::SummaryNode::Category::Network: - return RifEclipseSummaryAddress::networkAddress( summaryNode.keyword ); - break; - case Opm::EclIO::SummaryNode::Category::Well_Lgr: - return RifEclipseSummaryAddress::wellLgrAddress( summaryNode.keyword, summaryNode.lgrname, summaryNode.wgname ); - break; - case Opm::EclIO::SummaryNode::Category::Block_Lgr: - return RifEclipseSummaryAddress::blockLgrAddress( summaryNode.keyword, - summaryNode.lgrname, - summaryNode.lgri, - summaryNode.lgrj, - summaryNode.lgrk ); - break; - case Opm::EclIO::SummaryNode::Category::Connection_Lgr: - return RifEclipseSummaryAddress::wellCompletionLgrAddress( summaryNode.keyword, - summaryNode.lgrname, - summaryNode.wgname, - summaryNode.lgri, - summaryNode.lgrj, - summaryNode.lgrk ); - break; - } - - return RifEclipseSummaryAddress(); -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -std::pair, std::map> - RifOpmCommonSummaryTools::buildMetaData( const Opm::EclIO::ESmry* summaryFile ) -{ - std::set addresses; - std::map addressToNodeIndexMap; + std::set addresses; + std::map addressToSmspecIndexMap; + std::map addressToKeywordMap; if ( summaryFile ) { - auto nodes = summaryFile->summaryNodeList(); - for ( size_t i = 0; i < nodes.size(); i++ ) + auto keywords = summaryFile->keywordList(); + for ( const auto& keyword : keywords ) { - auto summaryNode = nodes[i]; - auto eclAdr = createAddressFromSummaryNode( summaryNode, summaryFile ); + auto eclAdr = RifEclipseSummaryAddress::fromEclipseTextAddress( keyword ); + if ( !eclAdr.isValid() ) + { + // If a category is not found, use the MISC category + eclAdr = RifEclipseSummaryAddress::miscAddress( keyword ); + } if ( eclAdr.isValid() ) { addresses.insert( eclAdr ); - addressToNodeIndexMap[eclAdr] = i; + size_t smspecIndex = summaryFile->getSmspecIndexForKeyword( keyword ); + addressToSmspecIndexMap[eclAdr] = smspecIndex; + addressToKeywordMap[eclAdr] = keyword; } } } - return { addresses, addressToNodeIndexMap }; + return { addresses, addressToSmspecIndexMap, addressToKeywordMap }; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- std::pair, std::map> - RifOpmCommonSummaryTools::buildMetaDataKeyword( const std::vector& keywords ) + RifOpmCommonSummaryTools::buildAddressesAndKeywordMap( const std::vector& keywords ) { std::set addresses; - std::map addressToNodeIndexMap; + std::map addressToKeywordMap; std::vector invalidKeywords; #pragma omp parallel { std::set threadAddresses; - std::map threadAddressToNodeIndexMap; + std::map threadAddressToKeywordMap; std::vector threadInvalidKeywords; #pragma omp for @@ -418,14 +346,14 @@ std::pair, std::map, std::map #include #include +#include #include namespace Opm @@ -38,7 +39,6 @@ namespace EclIO { class ESmry; class ExtESmry; - struct SummaryNode; } // namespace EclIO } // namespace Opm @@ -47,14 +47,13 @@ class RiaThreadSafeLogger; class RifOpmCommonSummaryTools { public: - static RifEclipseSummaryAddress createAddressFromSummaryNode( const Opm::EclIO::SummaryNode& summaryNode, - const Opm::EclIO::ESmry* summaryFile ); - - static std::pair, std::map> - buildMetaData( const Opm::EclIO::ESmry* summaryFile ); + static std::tuple, + std::map, + std::map> + buildAddressesSmspecAndKeywordMap( const Opm::EclIO::ESmry* summaryFile ); static std::pair, std::map> - buildMetaDataKeyword( const std::vector& keywords ); + buildAddressesAndKeywordMap( const std::vector& keywords ); }; //================================================================================================== diff --git a/ApplicationLibCode/FileInterface/RifOpmHdf5Summary.cpp b/ApplicationLibCode/FileInterface/RifOpmHdf5Summary.cpp index 216e6291c4..4ff202e7cb 100644 --- a/ApplicationLibCode/FileInterface/RifOpmHdf5Summary.cpp +++ b/ApplicationLibCode/FileInterface/RifOpmHdf5Summary.cpp @@ -24,6 +24,10 @@ #include "RifHdf5SummaryReader.h" #include "RifOpmCommonSummary.h" +#ifdef _MSC_VER +// Disable warning from external library to make sure treat warnings as error works +#pragma warning( disable : 4267 ) +#endif #include "opm/io/eclipse/ESmry.hpp" #include @@ -95,18 +99,18 @@ bool RifOpmHdf5Summary::values( const RifEclipseSummaryAddress& resultAddress, s { if ( m_eSmry && m_hdf5Reader ) { - auto it = m_adrToSummaryNodeIndex.find( resultAddress ); - if ( it != m_adrToSummaryNodeIndex.end() ) + auto it = m_adrToSmspecIndices.find( resultAddress ); + if ( it != m_adrToSmspecIndices.end() ) { - size_t index = it->second; - auto node = m_eSmry->summaryNodeList()[index]; - - int smspecIndex = static_cast( node.smspecKeywordIndex ); const auto& vectorName = resultAddress.vectorName(); + size_t smspecIndex = it->second; - *values = m_hdf5Reader->values( vectorName, smspecIndex ); + if ( smspecIndex != std::numeric_limits::max() ) + { + *values = m_hdf5Reader->values( vectorName, static_cast( smspecIndex ) ); - return true; + return true; + } } } @@ -120,13 +124,12 @@ std::string RifOpmHdf5Summary::unitName( const RifEclipseSummaryAddress& resultA { if ( m_eSmry ) { - auto it = m_adrToSummaryNodeIndex.find( resultAddress ); - if ( it != m_adrToSummaryNodeIndex.end() ) + auto it = m_summaryAddressToKeywordMap.find( resultAddress ); + if ( it != m_summaryAddressToKeywordMap.end() ) { - auto index = it->second; - auto node = m_eSmry->summaryNodeList()[index]; + auto keyword = it->second; + auto stringFromFileReader = m_eSmry->get_unit( keyword ); - auto stringFromFileReader = m_eSmry->get_unit( node ); return RiaStdStringTools::trimString( stringFromFileReader ); } } @@ -167,10 +170,13 @@ void RifOpmHdf5Summary::buildMetaData() } } - auto [addresses, addressMap] = RifOpmCommonSummaryTools::buildMetaData( m_eSmry.get() ); - - m_allResultAddresses = addresses; - m_adrToSummaryNodeIndex = addressMap; + { + auto [addresses, smspecIndices, addressToKeywordMap] = + RifOpmCommonSummaryTools::buildAddressesSmspecAndKeywordMap( m_eSmry.get() ); + m_allResultAddresses = addresses; + m_adrToSmspecIndices = smspecIndices; + m_summaryAddressToKeywordMap = addressToKeywordMap; + } } } diff --git a/ApplicationLibCode/FileInterface/RifOpmHdf5Summary.h b/ApplicationLibCode/FileInterface/RifOpmHdf5Summary.h index 0e819d0756..031b2bdd64 100644 --- a/ApplicationLibCode/FileInterface/RifOpmHdf5Summary.h +++ b/ApplicationLibCode/FileInterface/RifOpmHdf5Summary.h @@ -66,9 +66,10 @@ private: bool openESmryFile( const QString& headerFileName, bool includeRestartFiles, RiaThreadSafeLogger* threadSafeLogger ); private: - std::unique_ptr m_eSmry; - std::map m_adrToSummaryNodeIndex; - std::vector m_timeSteps; + std::unique_ptr m_eSmry; + std::map m_summaryAddressToKeywordMap; + std::map m_adrToSmspecIndices; + std::vector m_timeSteps; std::unique_ptr m_hdf5Reader; }; diff --git a/ApplicationLibCode/FileInterface/RifProjectSummaryDataWriter.cpp b/ApplicationLibCode/FileInterface/RifProjectSummaryDataWriter.cpp index 967c78fca2..4da7c7696a 100644 --- a/ApplicationLibCode/FileInterface/RifProjectSummaryDataWriter.cpp +++ b/ApplicationLibCode/FileInterface/RifProjectSummaryDataWriter.cpp @@ -20,12 +20,17 @@ #include "RifSummaryReaderInterface.h" +#include "cafAssert.h" + +#ifdef _MSC_VER +// Disable warning from external library to make sure treat warnings as error works +#pragma warning( disable : 4267 ) +#endif + #include "opm/common/utility/TimeService.hpp" #include "opm/io/eclipse/EclOutput.hpp" #include "opm/io/eclipse/ExtESmry.hpp" -#include "cafAssert.h" - #include //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/RimVfpPlot.cpp b/ApplicationLibCode/ProjectDataModel/RimVfpPlot.cpp index ccf8afe931..45313e556e 100644 --- a/ApplicationLibCode/ProjectDataModel/RimVfpPlot.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimVfpPlot.cpp @@ -883,11 +883,11 @@ RimVfpDefines::FlowingPhaseType RimVfpPlot::getFlowingPhaseType( const Opm::VFPP { switch ( table.getFloType() ) { - case Opm::VFPProdTable::FLO_OIL: + case Opm::VFPProdTable::FLO_TYPE::FLO_OIL: return RimVfpDefines::FlowingPhaseType::OIL; - case Opm::VFPProdTable::FLO_GAS: + case Opm::VFPProdTable::FLO_TYPE::FLO_GAS: return RimVfpDefines::FlowingPhaseType::GAS; - case Opm::VFPProdTable::FLO_LIQ: + case Opm::VFPProdTable::FLO_TYPE::FLO_LIQ: return RimVfpDefines::FlowingPhaseType::LIQUID; default: return RimVfpDefines::FlowingPhaseType::INVALID; @@ -901,11 +901,11 @@ RimVfpDefines::FlowingPhaseType RimVfpPlot::getFlowingPhaseType( const Opm::VFPI { switch ( table.getFloType() ) { - case Opm::VFPInjTable::FLO_OIL: + case Opm::VFPInjTable::FLO_TYPE::FLO_OIL: return RimVfpDefines::FlowingPhaseType::OIL; - case Opm::VFPInjTable::FLO_GAS: + case Opm::VFPInjTable::FLO_TYPE::FLO_GAS: return RimVfpDefines::FlowingPhaseType::GAS; - case Opm::VFPInjTable::FLO_WAT: + case Opm::VFPInjTable::FLO_TYPE::FLO_WAT: return RimVfpDefines::FlowingPhaseType::WATER; default: return RimVfpDefines::FlowingPhaseType::INVALID; @@ -919,11 +919,11 @@ RimVfpDefines::FlowingGasFractionType RimVfpPlot::getFlowingGasFractionType( con { switch ( table.getGFRType() ) { - case Opm::VFPProdTable::GFR_GOR: + case Opm::VFPProdTable::GFR_TYPE::GFR_GOR: return RimVfpDefines::FlowingGasFractionType::GOR; - case Opm::VFPProdTable::GFR_GLR: + case Opm::VFPProdTable::GFR_TYPE::GFR_GLR: return RimVfpDefines::FlowingGasFractionType::GLR; - case Opm::VFPProdTable::GFR_OGR: + case Opm::VFPProdTable::GFR_TYPE::GFR_OGR: return RimVfpDefines::FlowingGasFractionType::OGR; default: return RimVfpDefines::FlowingGasFractionType::INVALID; @@ -937,11 +937,11 @@ RimVfpDefines::FlowingWaterFractionType RimVfpPlot::getFlowingWaterFractionType( { switch ( table.getWFRType() ) { - case Opm::VFPProdTable::WFR_WOR: + case Opm::VFPProdTable::WFR_TYPE::WFR_WOR: return RimVfpDefines::FlowingWaterFractionType::WOR; - case Opm::VFPProdTable::WFR_WCT: + case Opm::VFPProdTable::WFR_TYPE::WFR_WCT: return RimVfpDefines::FlowingWaterFractionType::WCT; - case Opm::VFPProdTable::WFR_WGR: + case Opm::VFPProdTable::WFR_TYPE::WFR_WGR: return RimVfpDefines::FlowingWaterFractionType::WGR; default: return RimVfpDefines::FlowingWaterFractionType::INVALID; diff --git a/ApplicationLibCode/ProjectDataModel/RimVfpPlot.h b/ApplicationLibCode/ProjectDataModel/RimVfpPlot.h index 981623ac0c..c760a44802 100644 --- a/ApplicationLibCode/ProjectDataModel/RimVfpPlot.h +++ b/ApplicationLibCode/ProjectDataModel/RimVfpPlot.h @@ -26,8 +26,8 @@ #include -#include "opm/parser/eclipse/EclipseState/Schedule/VFPInjTable.hpp" -#include "opm/parser/eclipse/EclipseState/Schedule/VFPProdTable.hpp" +#include "opm/input/eclipse/Schedule/VFPInjTable.hpp" +#include "opm/input/eclipse/Schedule/VFPProdTable.hpp" class RiuPlotWidget; class VfpPlotData; diff --git a/ApplicationLibCode/ProjectDataModel/RimVfpTableExtractor.cpp b/ApplicationLibCode/ProjectDataModel/RimVfpTableExtractor.cpp index 6f3255b3f5..40a82b7334 100644 --- a/ApplicationLibCode/ProjectDataModel/RimVfpTableExtractor.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimVfpTableExtractor.cpp @@ -21,8 +21,9 @@ #include "cafPdmUiItem.h" #include "cafUtils.h" -#include "opm/parser/eclipse/Parser/Parser.hpp" -#include "opm/parser/eclipse/Parser/ParserKeywords/V.hpp" +#include "opm/input/eclipse/Deck/Deck.hpp" +#include "opm/input/eclipse/Parser/Parser.hpp" +#include "opm/input/eclipse/Parser/ParserKeywords/V.hpp" //-------------------------------------------------------------------------------------------------- /// @@ -33,8 +34,14 @@ std::vector RimVfpTableExtractor::extractVfpInjectionTables( c try { - Opm::Parser parser; - auto deck = parser.parseFile( filename ); + Opm::Parser parser( false ); + const ::Opm::ParserKeywords::VFPINJ kw1; + const ::Opm::ParserKeywords::VFPIDIMS kw2; + + parser.addParserKeyword( kw1 ); + parser.addParserKeyword( kw2 ); + + auto deck = parser.parseFile( filename ); std::string myKeyword = "VFPINJ"; auto keywordList = deck.getKeywordList( myKeyword ); @@ -75,8 +82,12 @@ std::vector RimVfpTableExtractor::extractVfpProductionTables( try { - Opm::Parser parser; - auto deck = parser.parseFile( filename ); + Opm::Parser parser( false ); + const ::Opm::ParserKeywords::VFPPROD kw1; + + parser.addParserKeyword( kw1 ); + + auto deck = parser.parseFile( filename ); std::string myKeyword = "VFPPROD"; auto keywordList = deck.getKeywordList( myKeyword ); @@ -97,7 +108,8 @@ std::vector RimVfpTableExtractor::extractVfpProductionTables( } } - Opm::VFPProdTable table( *kw, unitSystem ); + bool gaslift_opt_active = false; + Opm::VFPProdTable table( *kw, gaslift_opt_active, unitSystem ); tables.push_back( table ); } } diff --git a/ApplicationLibCode/ProjectDataModel/RimVfpTableExtractor.h b/ApplicationLibCode/ProjectDataModel/RimVfpTableExtractor.h index b89e09dcba..cba4ebf1f7 100644 --- a/ApplicationLibCode/ProjectDataModel/RimVfpTableExtractor.h +++ b/ApplicationLibCode/ProjectDataModel/RimVfpTableExtractor.h @@ -21,8 +21,8 @@ #include #include -#include "opm/parser/eclipse/EclipseState/Schedule/VFPInjTable.hpp" -#include "opm/parser/eclipse/EclipseState/Schedule/VFPProdTable.hpp" +#include "opm/input/eclipse/Schedule/VFPInjTable.hpp" +#include "opm/input/eclipse/Schedule/VFPProdTable.hpp" //-------------------------------------------------------------------------------------------------- /// diff --git a/ApplicationLibCode/UnitTests/HDF5FileReader-Test.cpp b/ApplicationLibCode/UnitTests/HDF5FileReader-Test.cpp index 62f54824b3..e9e17ab497 100644 --- a/ApplicationLibCode/UnitTests/HDF5FileReader-Test.cpp +++ b/ApplicationLibCode/UnitTests/HDF5FileReader-Test.cpp @@ -10,6 +10,10 @@ #include +#ifdef _MSC_VER +// Disable warning from external library to make sure treat warnings as error works +#pragma warning( disable : 4267 ) +#endif #include "opm/io/eclipse/ESmry.hpp" static const QString H5_TEST_DATA_DIRECTORY = QString( "%1/h5-file/" ).arg( TEST_DATA_DIR ); @@ -122,8 +126,7 @@ TEST( DISABLED_HDFTests, ReadOpmSummaryDataListContent ) for ( size_t i = 0; i < nodes.size(); i++ ) { Opm::EclIO::SummaryNode n = nodes[i]; - std::cout << n.keyword << " number: " << n.number << " msjNumber: " << n.smspecKeywordIndex << " " - << n.unique_key() << "\n"; + std::cout << n.keyword << " number: " << n.number << " msjNumber: " << n.unique_key() << "\n"; } } diff --git a/ApplicationLibCode/UnitTests/HDF5FileWriter-Test.cpp b/ApplicationLibCode/UnitTests/HDF5FileWriter-Test.cpp index 6885c9d12c..cb59ffdd20 100644 --- a/ApplicationLibCode/UnitTests/HDF5FileWriter-Test.cpp +++ b/ApplicationLibCode/UnitTests/HDF5FileWriter-Test.cpp @@ -13,6 +13,11 @@ #include #include "RifHdf5SummaryExporter.h" + +#ifdef _MSC_VER +// Disable warning from external library to make sure treat warnings as error works +#pragma warning( disable : 4267 ) +#endif #include "opm/io/eclipse/ESmry.hpp" #include diff --git a/ApplicationLibCode/UnitTests/opm-summary-Test.cpp b/ApplicationLibCode/UnitTests/opm-summary-Test.cpp index 8e38300d4d..c6085ba807 100644 --- a/ApplicationLibCode/UnitTests/opm-summary-Test.cpp +++ b/ApplicationLibCode/UnitTests/opm-summary-Test.cpp @@ -6,6 +6,10 @@ #include "RifOpmCommonSummary.h" #include "RifReaderOpmRft.h" +#ifdef _MSC_VER +// Disable warning from external library to make sure treat warnings as error works +#pragma warning( disable : 4267 ) +#endif #include "opm/io/eclipse/ERft.hpp" #include "opm/io/eclipse/ESmry.hpp" #include "opm/io/eclipse/ExtESmry.hpp" diff --git a/CMakeLists.txt b/CMakeLists.txt index 26b0757b38..0d9adc73f8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -513,8 +513,8 @@ if(RESINSIGHT_ENABLE_UNITY_BUILD) set_property(TARGET qwt PROPERTY UNITY_BUILD true) message("Cmake Unity build is enabled on : custom-opm-flowdiagnostics") set_property(TARGET custom-opm-flowdiagnostics PROPERTY UNITY_BUILD true) - message("Cmake Unity build is enabled on : custom-opm-common") - set_property(TARGET custom-opm-common PROPERTY UNITY_BUILD true) + # message("Cmake Unity build is enabled on : custom-opm-common") + # set_property(TARGET custom-opm-common PROPERTY UNITY_BUILD true) message("Cmake Unity build is enabled on : qtadvanceddocking") set_property(TARGET qtadvanceddocking PROPERTY UNITY_BUILD true) endif() diff --git a/ThirdParty/custom-opm-common/CMakeLists.txt b/ThirdParty/custom-opm-common/CMakeLists.txt index 5956aa84d0..c8f935dddc 100644 --- a/ThirdParty/custom-opm-common/CMakeLists.txt +++ b/ThirdParty/custom-opm-common/CMakeLists.txt @@ -42,9 +42,7 @@ set(ENABLE_ECL_INPUT true) #set(ENABLE_ECL_OUTPUT true) -# TODO: opm-parser should hold a cmake file with source code files only -#include(opm-parser/CMakeLists_files.cmake) -include ( CMakeLists_files.cmake ) +include(opm-common/CMakeLists_files.cmake) set(opm_parser_source_files_short_path ${MAIN_SOURCE_FILES} @@ -95,6 +93,13 @@ add_library(${PROJECT_NAME} # Required for use of RstHeader::restart_info opm-common/src/opm/io/eclipse/rst/header.cpp + + # 2022.06 additional includes + opm-common/src/opm/io/eclipse/rst/aquifer.cpp + opm-common/src/opm/io/eclipse/ERst.cpp + opm-common/src/opm/io/eclipse/RestartFileView.cpp + opm-common/cross-platform/windows/Substitutes.cpp + ) if(RESINSIGHT_ENABLE_UNITY_BUILD) diff --git a/ThirdParty/custom-opm-common/custom-opm-parser-tests/opm-parser-BasicTest.cpp b/ThirdParty/custom-opm-common/custom-opm-parser-tests/opm-parser-BasicTest.cpp index 6c9b213171..952a1f70ad 100644 --- a/ThirdParty/custom-opm-common/custom-opm-parser-tests/opm-parser-BasicTest.cpp +++ b/ThirdParty/custom-opm-common/custom-opm-parser-tests/opm-parser-BasicTest.cpp @@ -2,9 +2,14 @@ #include #include "gtest/gtest.h" -#include "opm/parser/eclipse/Parser/Parser.hpp" -#include "opm/parser/eclipse/EclipseState/Schedule/VFPInjTable.hpp" -#include "opm/parser/eclipse/EclipseState/Schedule/VFPProdTable.hpp" + +#include "opm/input/eclipse/Parser/ParseContext.hpp" +#include "opm/input/eclipse/Parser/ParseContext.hpp" +#include "opm/input/eclipse/Schedule/VFPInjTable.hpp" +#include "opm/input/eclipse/Schedule/VFPProdTable.hpp" +#include "opm/input/eclipse/Parser/Parser.hpp" +#include "opm/input/eclipse/Deck/Deck.hpp" +#include #include "OpmTestDataDirectory.h" @@ -18,7 +23,10 @@ TEST(OpmParserTest, ReadFromFile) ParseContext parseContext; { - Parser parser; + Parser parser(false); + const ::Opm::ParserKeywords::VFPPROD kw1; + + parser.addParserKeyword(kw1); std::stringstream ss; ss << TEST_DATA_DIR << "/B1BH.Ecl"; @@ -36,12 +44,18 @@ TEST(OpmParserTest, ReadFromFile) { auto name = kw->name(); - VFPProdTable table(*kw, unitSystem); + bool gaslift_opt_active = false; + VFPProdTable table(*kw, gaslift_opt_active, unitSystem); std::cout << table.getDatumDepth() << std::endl; } } { - Parser parser; + Parser parser(false); + const ::Opm::ParserKeywords::VFPINJ kw1; + const ::Opm::ParserKeywords::VFPIDIMS kw2; + + parser.addParserKeyword(kw1); + parser.addParserKeyword(kw2); std::stringstream ss; ss << TEST_DATA_DIR << "/C1H.Ecl"; diff --git a/ThirdParty/custom-opm-common/generated-opm-common/ParserInit.cpp b/ThirdParty/custom-opm-common/generated-opm-common/ParserInit.cpp index a2a4036d17..90f419eb34 100644 --- a/ThirdParty/custom-opm-common/generated-opm-common/ParserInit.cpp +++ b/ThirdParty/custom-opm-common/generated-opm-common/ParserInit.cpp @@ -1,1126 +1,1163 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + namespace Opm { namespace ParserKeywords { void addDefaultKeywords(Parser& p); void addDefaultKeywords(Parser& p) { - p.addKeyword< ParserKeywords::ACTDIMS >(); - p.addKeyword< ParserKeywords::ACTION >(); - p.addKeyword< ParserKeywords::ACTIONG >(); - p.addKeyword< ParserKeywords::ACTIONR >(); - p.addKeyword< ParserKeywords::ACTIONS >(); - p.addKeyword< ParserKeywords::ACTIONW >(); - p.addKeyword< ParserKeywords::ACTIONX >(); - p.addKeyword< ParserKeywords::ACTNUM >(); - p.addKeyword< ParserKeywords::ACTPARAM >(); - p.addKeyword< ParserKeywords::ADD >(); - p.addKeyword< ParserKeywords::ADDREG >(); - p.addKeyword< ParserKeywords::ADDZCORN >(); - p.addKeyword< ParserKeywords::ADSALNOD >(); - p.addKeyword< ParserKeywords::ADSORP >(); - p.addKeyword< ParserKeywords::AITS >(); - p.addKeyword< ParserKeywords::AITSOFF >(); - p.addKeyword< ParserKeywords::ALKADS >(); - p.addKeyword< ParserKeywords::ALKALINE >(); - p.addKeyword< ParserKeywords::ALKROCK >(); - p.addKeyword< ParserKeywords::ALL >(); - p.addKeyword< ParserKeywords::ALPOLADS >(); - p.addKeyword< ParserKeywords::ALSURFAD >(); - p.addKeyword< ParserKeywords::ALSURFST >(); - p.addKeyword< ParserKeywords::AMALGAM >(); - p.addKeyword< ParserKeywords::API >(); - p.addKeyword< ParserKeywords::APIGROUP >(); - p.addKeyword< ParserKeywords::APILIM >(); - p.addKeyword< ParserKeywords::APIVID >(); - p.addKeyword< ParserKeywords::AQANCONL >(); - p.addKeyword< ParserKeywords::AQANNC >(); - p.addKeyword< ParserKeywords::AQANTRC >(); - p.addKeyword< ParserKeywords::AQUALIST >(); - p.addKeyword< ParserKeywords::AQUANCON >(); - p.addKeyword< ParserKeywords::AQUCHGAS >(); - p.addKeyword< ParserKeywords::AQUCHWAT >(); - p.addKeyword< ParserKeywords::AQUCON >(); - p.addKeyword< ParserKeywords::AQUCT >(); - p.addKeyword< ParserKeywords::AQUCWFAC >(); - p.addKeyword< ParserKeywords::AQUDIMS >(); - p.addKeyword< ParserKeywords::AQUFET >(); - p.addKeyword< ParserKeywords::AQUFETP >(); - p.addKeyword< ParserKeywords::AQUFLUX >(); - p.addKeyword< ParserKeywords::AQUIFER_PROBE_ANALYTIC >(); - p.addKeyword< ParserKeywords::AQUIFER_PROBE_NUMERIC >(); - p.addKeyword< ParserKeywords::AQUNNC >(); - p.addKeyword< ParserKeywords::AQUNUM >(); - p.addKeyword< ParserKeywords::AQUTAB >(); - p.addKeyword< ParserKeywords::AUTOCOAR >(); - p.addKeyword< ParserKeywords::AUTOREF >(); - p.addKeyword< ParserKeywords::BC >(); - p.addKeyword< ParserKeywords::BDENSITY >(); - p.addKeyword< ParserKeywords::BGGI >(); - p.addKeyword< ParserKeywords::BIGMODEL >(); - p.addKeyword< ParserKeywords::BLACKOIL >(); - p.addKeyword< ParserKeywords::BLOCK_PROBE >(); - p.addKeyword< ParserKeywords::BLOCK_PROBE300 >(); - p.addKeyword< ParserKeywords::BOGI >(); - p.addKeyword< ParserKeywords::BOUNDARY >(); - p.addKeyword< ParserKeywords::BOX >(); - p.addKeyword< ParserKeywords::BPARA >(); - p.addKeyword< ParserKeywords::BPIDIMS >(); - p.addKeyword< ParserKeywords::BRANPROP >(); - p.addKeyword< ParserKeywords::BRINE >(); - p.addKeyword< ParserKeywords::BTOBALFA >(); - p.addKeyword< ParserKeywords::BTOBALFV >(); - p.addKeyword< ParserKeywords::CALTRAC >(); - p.addKeyword< ParserKeywords::CARFIN >(); - p.addKeyword< ParserKeywords::CART >(); - p.addKeyword< ParserKeywords::CBMOPTS >(); - p.addKeyword< ParserKeywords::CECON >(); - p.addKeyword< ParserKeywords::CECONT >(); - p.addKeyword< ParserKeywords::CIRCLE >(); - p.addKeyword< ParserKeywords::COAL >(); - p.addKeyword< ParserKeywords::COALADS >(); - p.addKeyword< ParserKeywords::COALNUM >(); - p.addKeyword< ParserKeywords::COALPP >(); - p.addKeyword< ParserKeywords::COARSEN >(); - p.addKeyword< ParserKeywords::COLLAPSE >(); - p.addKeyword< ParserKeywords::COLUMNS >(); - p.addKeyword< ParserKeywords::COMPDAT >(); - p.addKeyword< ParserKeywords::COMPDATX >(); - p.addKeyword< ParserKeywords::COMPFLSH >(); - p.addKeyword< ParserKeywords::COMPIMB >(); - p.addKeyword< ParserKeywords::COMPINJK >(); - p.addKeyword< ParserKeywords::COMPLMPL >(); - p.addKeyword< ParserKeywords::COMPLUMP >(); - p.addKeyword< ParserKeywords::COMPOFF >(); - p.addKeyword< ParserKeywords::COMPORD >(); - p.addKeyword< ParserKeywords::COMPRIV >(); - p.addKeyword< ParserKeywords::COMPRP >(); - p.addKeyword< ParserKeywords::COMPRPL >(); - p.addKeyword< ParserKeywords::COMPS >(); - p.addKeyword< ParserKeywords::COMPSEGL >(); - p.addKeyword< ParserKeywords::COMPSEGS >(); - p.addKeyword< ParserKeywords::COMPVE >(); - p.addKeyword< ParserKeywords::COMPVEL >(); - p.addKeyword< ParserKeywords::CONNECTION_PROBE >(); - p.addKeyword< ParserKeywords::COORD >(); - p.addKeyword< ParserKeywords::COORDSYS >(); - p.addKeyword< ParserKeywords::COPY >(); - p.addKeyword< ParserKeywords::COPYBOX >(); - p.addKeyword< ParserKeywords::COPYREG >(); - p.addKeyword< ParserKeywords::CPIFACT >(); - p.addKeyword< ParserKeywords::CPIFACTL >(); - p.addKeyword< ParserKeywords::CPR >(); - p.addKeyword< ParserKeywords::CREF >(); - p.addKeyword< ParserKeywords::CREFS >(); - p.addKeyword< ParserKeywords::CRITPERM >(); - p.addKeyword< ParserKeywords::CSKIN >(); - p.addKeyword< ParserKeywords::DATE >(); - p.addKeyword< ParserKeywords::DATES >(); - p.addKeyword< ParserKeywords::DATUM >(); - p.addKeyword< ParserKeywords::DATUMR >(); - p.addKeyword< ParserKeywords::DATUMRX >(); - p.addKeyword< ParserKeywords::DCQDEFN >(); - p.addKeyword< ParserKeywords::DEBUG_ >(); - p.addKeyword< ParserKeywords::DELAYACT >(); - p.addKeyword< ParserKeywords::DENSITY >(); - p.addKeyword< ParserKeywords::DEPTH >(); - p.addKeyword< ParserKeywords::DEPTHTAB >(); - p.addKeyword< ParserKeywords::DEPTHZ >(); - p.addKeyword< ParserKeywords::DIAGDISP >(); - p.addKeyword< ParserKeywords::DIFF >(); - p.addKeyword< ParserKeywords::DIFFC >(); - p.addKeyword< ParserKeywords::DIFFCOAL >(); - p.addKeyword< ParserKeywords::DIFFDP >(); - p.addKeyword< ParserKeywords::DIFFMMF >(); - p.addKeyword< ParserKeywords::DIFFMR >(); - p.addKeyword< ParserKeywords::DIFFMTHT >(); - p.addKeyword< ParserKeywords::DIFFMX >(); - p.addKeyword< ParserKeywords::DIFFMY >(); - p.addKeyword< ParserKeywords::DIFFMZ >(); - p.addKeyword< ParserKeywords::DIFFR >(); - p.addKeyword< ParserKeywords::DIFFTHT >(); - p.addKeyword< ParserKeywords::DIFFUSE >(); - p.addKeyword< ParserKeywords::DIFFX >(); - p.addKeyword< ParserKeywords::DIFFY >(); - p.addKeyword< ParserKeywords::DIFFZ >(); - p.addKeyword< ParserKeywords::DIMENS >(); - p.addKeyword< ParserKeywords::DIMPES >(); - p.addKeyword< ParserKeywords::DIMPLICT >(); - p.addKeyword< ParserKeywords::DISGAS >(); - p.addKeyword< ParserKeywords::DISPDIMS >(); - p.addKeyword< ParserKeywords::DISPERSE >(); - p.addKeyword< ParserKeywords::DOMAINS >(); - p.addKeyword< ParserKeywords::DPGRID >(); - p.addKeyword< ParserKeywords::DPKRMOD >(); - p.addKeyword< ParserKeywords::DPNUM >(); - p.addKeyword< ParserKeywords::DR >(); - p.addKeyword< ParserKeywords::DREF >(); - p.addKeyword< ParserKeywords::DREFS >(); - p.addKeyword< ParserKeywords::DRILPRI >(); - p.addKeyword< ParserKeywords::DRSDT >(); - p.addKeyword< ParserKeywords::DRSDTR >(); - p.addKeyword< ParserKeywords::DRV >(); - p.addKeyword< ParserKeywords::DRVDT >(); - p.addKeyword< ParserKeywords::DRVDTR >(); - p.addKeyword< ParserKeywords::DSPDEINT >(); - p.addKeyword< ParserKeywords::DTHETA >(); - p.addKeyword< ParserKeywords::DTHETAV >(); - p.addKeyword< ParserKeywords::DUALPERM >(); - p.addKeyword< ParserKeywords::DUALPORO >(); - p.addKeyword< ParserKeywords::DUMPCUPL >(); - p.addKeyword< ParserKeywords::DUMPFLUX >(); - p.addKeyword< ParserKeywords::DX >(); - p.addKeyword< ParserKeywords::DXV >(); - p.addKeyword< ParserKeywords::DY >(); - p.addKeyword< ParserKeywords::DYNAMICR >(); - p.addKeyword< ParserKeywords::DYNRDIMS >(); - p.addKeyword< ParserKeywords::DYV >(); - p.addKeyword< ParserKeywords::DZ >(); - p.addKeyword< ParserKeywords::DZMATRIX >(); - p.addKeyword< ParserKeywords::DZMTRX >(); - p.addKeyword< ParserKeywords::DZMTRXV >(); - p.addKeyword< ParserKeywords::DZNET >(); - p.addKeyword< ParserKeywords::DZV >(); - p.addKeyword< ParserKeywords::ECHO >(); - p.addKeyword< ParserKeywords::ECLMC >(); - p.addKeyword< ParserKeywords::EDIT >(); - p.addKeyword< ParserKeywords::EDITNNC >(); - p.addKeyword< ParserKeywords::EDITNNCR >(); - p.addKeyword< ParserKeywords::EHYSTR >(); - p.addKeyword< ParserKeywords::EHYSTRR >(); - p.addKeyword< ParserKeywords::END >(); - p.addKeyword< ParserKeywords::ENDACTIO >(); - p.addKeyword< ParserKeywords::ENDBOX >(); - p.addKeyword< ParserKeywords::ENDDYN >(); - p.addKeyword< ParserKeywords::ENDFIN >(); - p.addKeyword< ParserKeywords::ENDINC >(); - p.addKeyword< ParserKeywords::ENDNUM >(); - p.addKeyword< ParserKeywords::ENDPOINT_SPECIFIERS >(); - p.addKeyword< ParserKeywords::ENDSCALE >(); - p.addKeyword< ParserKeywords::ENDSKIP >(); - p.addKeyword< ParserKeywords::ENKRVD >(); - p.addKeyword< ParserKeywords::ENPCVD >(); - p.addKeyword< ParserKeywords::ENPTVD >(); - p.addKeyword< ParserKeywords::ENSPCVD >(); - p.addKeyword< ParserKeywords::EPSDBGS >(); - p.addKeyword< ParserKeywords::EPSDEBUG >(); - p.addKeyword< ParserKeywords::EQLDIMS >(); - p.addKeyword< ParserKeywords::EQLNUM >(); - p.addKeyword< ParserKeywords::EQLOPTS >(); - p.addKeyword< ParserKeywords::EQLZCORN >(); - p.addKeyword< ParserKeywords::EQUALREG >(); - p.addKeyword< ParserKeywords::EQUALS >(); - p.addKeyword< ParserKeywords::EQUIL >(); - p.addKeyword< ParserKeywords::ESSNODE >(); - p.addKeyword< ParserKeywords::EXCAVATE >(); - p.addKeyword< ParserKeywords::EXCEL >(); - p.addKeyword< ParserKeywords::EXIT >(); - p.addKeyword< ParserKeywords::EXTFIN >(); - p.addKeyword< ParserKeywords::EXTHOST >(); - p.addKeyword< ParserKeywords::EXTRAPMS >(); - p.addKeyword< ParserKeywords::EXTREPGL >(); - p.addKeyword< ParserKeywords::FAULTDIM >(); - p.addKeyword< ParserKeywords::FAULTS >(); - p.addKeyword< ParserKeywords::FBHPDEF >(); - p.addKeyword< ParserKeywords::FHERCHBL >(); - p.addKeyword< ParserKeywords::FIELD >(); - p.addKeyword< ParserKeywords::FIELD_PROBE >(); - p.addKeyword< ParserKeywords::FILEUNIT >(); - p.addKeyword< ParserKeywords::FILLEPS >(); - p.addKeyword< ParserKeywords::FIPNUM >(); - p.addKeyword< ParserKeywords::FIPOWG >(); - p.addKeyword< ParserKeywords::FIPSEP >(); - p.addKeyword< ParserKeywords::FIP_PROBE >(); - p.addKeyword< ParserKeywords::FLUXNUM >(); - p.addKeyword< ParserKeywords::FLUXREG >(); - p.addKeyword< ParserKeywords::FLUXTYPE >(); - p.addKeyword< ParserKeywords::FMTHMD >(); - p.addKeyword< ParserKeywords::FMTIN >(); - p.addKeyword< ParserKeywords::FMTOUT >(); - p.addKeyword< ParserKeywords::FMWSET >(); - p.addKeyword< ParserKeywords::FOAM >(); - p.addKeyword< ParserKeywords::FOAMADS >(); - p.addKeyword< ParserKeywords::FOAMDCYO >(); - p.addKeyword< ParserKeywords::FOAMDCYW >(); - p.addKeyword< ParserKeywords::FOAMFCN >(); - p.addKeyword< ParserKeywords::FOAMFRM >(); - p.addKeyword< ParserKeywords::FOAMFSC >(); - p.addKeyword< ParserKeywords::FOAMFSO >(); - p.addKeyword< ParserKeywords::FOAMFST >(); - p.addKeyword< ParserKeywords::FOAMFSW >(); - p.addKeyword< ParserKeywords::FOAMMOB >(); - p.addKeyword< ParserKeywords::FOAMMOBP >(); - p.addKeyword< ParserKeywords::FOAMMOBS >(); - p.addKeyword< ParserKeywords::FOAMOPTS >(); - p.addKeyword< ParserKeywords::FOAMROCK >(); - p.addKeyword< ParserKeywords::FORMFEED >(); - p.addKeyword< ParserKeywords::FRICTION >(); - p.addKeyword< ParserKeywords::FULLIMP >(); - p.addKeyword< ParserKeywords::GAS >(); - p.addKeyword< ParserKeywords::GASBEGIN >(); - p.addKeyword< ParserKeywords::GASCONC >(); - p.addKeyword< ParserKeywords::GASDENT >(); - p.addKeyword< ParserKeywords::GASEND >(); - p.addKeyword< ParserKeywords::GASFCOMP >(); - p.addKeyword< ParserKeywords::GASFDECR >(); - p.addKeyword< ParserKeywords::GASFDELC >(); - p.addKeyword< ParserKeywords::GASFIELD >(); - p.addKeyword< ParserKeywords::GASFTARG >(); - p.addKeyword< ParserKeywords::GASMONTH >(); - p.addKeyword< ParserKeywords::GASPERIO >(); - p.addKeyword< ParserKeywords::GASSATC >(); - p.addKeyword< ParserKeywords::GASVISCT >(); - p.addKeyword< ParserKeywords::GASYEAR >(); - p.addKeyword< ParserKeywords::GCALECON >(); - p.addKeyword< ParserKeywords::GCOMPIDX >(); - p.addKeyword< ParserKeywords::GCONCAL >(); - p.addKeyword< ParserKeywords::GCONENG >(); - p.addKeyword< ParserKeywords::GCONINJE >(); - p.addKeyword< ParserKeywords::GCONPRI >(); - p.addKeyword< ParserKeywords::GCONPROD >(); - p.addKeyword< ParserKeywords::GCONSALE >(); - p.addKeyword< ParserKeywords::GCONSUMP >(); - p.addKeyword< ParserKeywords::GCONTOL >(); - p.addKeyword< ParserKeywords::GCUTBACK >(); - p.addKeyword< ParserKeywords::GCUTBACT >(); - p.addKeyword< ParserKeywords::GCVD >(); - p.addKeyword< ParserKeywords::GDCQ >(); - p.addKeyword< ParserKeywords::GDCQECON >(); - p.addKeyword< ParserKeywords::GDFILE >(); - p.addKeyword< ParserKeywords::GDIMS >(); - p.addKeyword< ParserKeywords::GDORIENT >(); - p.addKeyword< ParserKeywords::GDRILPOT >(); - p.addKeyword< ParserKeywords::GECON >(); - p.addKeyword< ParserKeywords::GECONT >(); - p.addKeyword< ParserKeywords::GEFAC >(); - p.addKeyword< ParserKeywords::GETDATA >(); - p.addKeyword< ParserKeywords::GETGLOB >(); - p.addKeyword< ParserKeywords::GI >(); - p.addKeyword< ParserKeywords::GIALL >(); - p.addKeyword< ParserKeywords::GIMODEL >(); - p.addKeyword< ParserKeywords::GINODE >(); - p.addKeyword< ParserKeywords::GLIFTLIM >(); - p.addKeyword< ParserKeywords::GLIFTOPT >(); - p.addKeyword< ParserKeywords::GMWSET >(); - p.addKeyword< ParserKeywords::GNETDP >(); - p.addKeyword< ParserKeywords::GNETINJE >(); - p.addKeyword< ParserKeywords::GNETPUMP >(); - p.addKeyword< ParserKeywords::GPMAINT >(); - p.addKeyword< ParserKeywords::GRADGRUP >(); - p.addKeyword< ParserKeywords::GRADRESV >(); - p.addKeyword< ParserKeywords::GRADRFT >(); - p.addKeyword< ParserKeywords::GRADWELL >(); - p.addKeyword< ParserKeywords::GRAVCONS >(); - p.addKeyword< ParserKeywords::GRAVDR >(); - p.addKeyword< ParserKeywords::GRAVDRB >(); - p.addKeyword< ParserKeywords::GRAVDRM >(); - p.addKeyword< ParserKeywords::GRAVITY >(); - p.addKeyword< ParserKeywords::GRDREACH >(); - p.addKeyword< ParserKeywords::GRID >(); - p.addKeyword< ParserKeywords::GRIDFILE >(); - p.addKeyword< ParserKeywords::GRIDOPTS >(); - p.addKeyword< ParserKeywords::GRIDUNIT >(); - p.addKeyword< ParserKeywords::GROUP_PROBE >(); - p.addKeyword< ParserKeywords::GRUPMAST >(); - p.addKeyword< ParserKeywords::GRUPNET >(); - p.addKeyword< ParserKeywords::GRUPRIG >(); - p.addKeyword< ParserKeywords::GRUPSLAV >(); - p.addKeyword< ParserKeywords::GRUPTARG >(); - p.addKeyword< ParserKeywords::GRUPTREE >(); - p.addKeyword< ParserKeywords::GSATINJE >(); - p.addKeyword< ParserKeywords::GSATPROD >(); - p.addKeyword< ParserKeywords::GSEPCOND >(); - p.addKeyword< ParserKeywords::GSSCPTST >(); - p.addKeyword< ParserKeywords::GSWINGF >(); - p.addKeyword< ParserKeywords::GTADD >(); - p.addKeyword< ParserKeywords::GTMULT >(); - p.addKeyword< ParserKeywords::GUIDECAL >(); - p.addKeyword< ParserKeywords::GUIDERAT >(); - p.addKeyword< ParserKeywords::GUPFREQ >(); - p.addKeyword< ParserKeywords::GWRTWCV >(); - p.addKeyword< ParserKeywords::HALFTRAN >(); - p.addKeyword< ParserKeywords::HAxxxxxx >(); - p.addKeyword< ParserKeywords::HBNUM >(); - p.addKeyword< ParserKeywords::HDISP >(); - p.addKeyword< ParserKeywords::HEATCR >(); - p.addKeyword< ParserKeywords::HEATCRT >(); - p.addKeyword< ParserKeywords::HMAQUCT >(); - p.addKeyword< ParserKeywords::HMAQUFET >(); - p.addKeyword< ParserKeywords::HMAQUNUM >(); - p.addKeyword< ParserKeywords::HMDIMS >(); - p.addKeyword< ParserKeywords::HMFAULTS >(); - p.addKeyword< ParserKeywords::HMMLAQUN >(); - p.addKeyword< ParserKeywords::HMMLCTAQ >(); - p.addKeyword< ParserKeywords::HMMLFTAQ >(); - p.addKeyword< ParserKeywords::HMMLTWCN >(); - p.addKeyword< ParserKeywords::HMMULTFT >(); - p.addKeyword< ParserKeywords::HMMULTSG >(); - p.addKeyword< ParserKeywords::HMMULTxx >(); - p.addKeyword< ParserKeywords::HMPROPS >(); - p.addKeyword< ParserKeywords::HMROCK >(); - p.addKeyword< ParserKeywords::HMROCKT >(); - p.addKeyword< ParserKeywords::HMRREF >(); - p.addKeyword< ParserKeywords::HMWELCON >(); - p.addKeyword< ParserKeywords::HMWPIMLT >(); - p.addKeyword< ParserKeywords::HMxxxxxx >(); - p.addKeyword< ParserKeywords::HRFIN >(); - p.addKeyword< ParserKeywords::HWKRO >(); - p.addKeyword< ParserKeywords::HWKRORG >(); - p.addKeyword< ParserKeywords::HWKRORW >(); - p.addKeyword< ParserKeywords::HWKRW >(); - p.addKeyword< ParserKeywords::HWKRWR >(); - p.addKeyword< ParserKeywords::HWPCW >(); - p.addKeyword< ParserKeywords::HWSNUM >(); - p.addKeyword< ParserKeywords::HWSOGCR >(); - p.addKeyword< ParserKeywords::HWSOWCR >(); - p.addKeyword< ParserKeywords::HWSWCR >(); - p.addKeyword< ParserKeywords::HWSWL >(); - p.addKeyword< ParserKeywords::HWSWLPC >(); - p.addKeyword< ParserKeywords::HWSWU >(); - p.addKeyword< ParserKeywords::HXFIN >(); - p.addKeyword< ParserKeywords::HYDRHEAD >(); - p.addKeyword< ParserKeywords::HYFIN >(); - p.addKeyword< ParserKeywords::HYMOBGDR >(); - p.addKeyword< ParserKeywords::HYST >(); - p.addKeyword< ParserKeywords::HYSTCHCK >(); - p.addKeyword< ParserKeywords::HZFIN >(); - p.addKeyword< ParserKeywords::IHOST >(); - p.addKeyword< ParserKeywords::IMBNUM >(); - p.addKeyword< ParserKeywords::IMBNUMMF >(); - p.addKeyword< ParserKeywords::IMKRVD >(); - p.addKeyword< ParserKeywords::IMPCVD >(); - p.addKeyword< ParserKeywords::IMPES >(); - p.addKeyword< ParserKeywords::IMPLICIT >(); - p.addKeyword< ParserKeywords::IMPORT >(); - p.addKeyword< ParserKeywords::IMPTVD >(); - p.addKeyword< ParserKeywords::IMSPCVD >(); - p.addKeyword< ParserKeywords::INCLUDE >(); - p.addKeyword< ParserKeywords::INIT >(); - p.addKeyword< ParserKeywords::INRAD >(); - p.addKeyword< ParserKeywords::INSPEC >(); - p.addKeyword< ParserKeywords::INTPC >(); - p.addKeyword< ParserKeywords::IONROCK >(); - p.addKeyword< ParserKeywords::IONXROCK >(); - p.addKeyword< ParserKeywords::IONXSURF >(); - p.addKeyword< ParserKeywords::IPCG >(); - p.addKeyword< ParserKeywords::IPCW >(); - p.addKeyword< ParserKeywords::ISGCR >(); - p.addKeyword< ParserKeywords::ISGL >(); - p.addKeyword< ParserKeywords::ISGLPC >(); - p.addKeyword< ParserKeywords::ISGU >(); - p.addKeyword< ParserKeywords::ISOGCR >(); - p.addKeyword< ParserKeywords::ISOLNUM >(); - p.addKeyword< ParserKeywords::ISOWCR >(); - p.addKeyword< ParserKeywords::ISWCR >(); - p.addKeyword< ParserKeywords::ISWL >(); - p.addKeyword< ParserKeywords::ISWLPC >(); - p.addKeyword< ParserKeywords::ISWU >(); - p.addKeyword< ParserKeywords::JFUNC >(); - p.addKeyword< ParserKeywords::JFUNCR >(); - p.addKeyword< ParserKeywords::KRNUM >(); - p.addKeyword< ParserKeywords::KRNUMMF >(); - p.addKeyword< ParserKeywords::LAB >(); - p.addKeyword< ParserKeywords::LANGMPL >(); - p.addKeyword< ParserKeywords::LANGMUIR >(); - p.addKeyword< ParserKeywords::LANGSOLV >(); - p.addKeyword< ParserKeywords::LCUNIT >(); - p.addKeyword< ParserKeywords::LGR >(); - p.addKeyword< ParserKeywords::LGRCOPY >(); - p.addKeyword< ParserKeywords::LGRFREE >(); - p.addKeyword< ParserKeywords::LGRLOCK >(); - p.addKeyword< ParserKeywords::LGROFF >(); - p.addKeyword< ParserKeywords::LGRON >(); - p.addKeyword< ParserKeywords::LICENSE >(); - p.addKeyword< ParserKeywords::LIFTOPT >(); - p.addKeyword< ParserKeywords::LINCOM >(); - p.addKeyword< ParserKeywords::LINKPERM >(); - p.addKeyword< ParserKeywords::LIVEOIL >(); - p.addKeyword< ParserKeywords::LKRO >(); - p.addKeyword< ParserKeywords::LKRORG >(); - p.addKeyword< ParserKeywords::LKRORW >(); - p.addKeyword< ParserKeywords::LKRW >(); - p.addKeyword< ParserKeywords::LKRWR >(); - p.addKeyword< ParserKeywords::LOAD >(); - p.addKeyword< ParserKeywords::LOWSALT >(); - p.addKeyword< ParserKeywords::LPCW >(); - p.addKeyword< ParserKeywords::LSALTFNC >(); - p.addKeyword< ParserKeywords::LSLTWNUM >(); - p.addKeyword< ParserKeywords::LSNUM >(); - p.addKeyword< ParserKeywords::LSOGCR >(); - p.addKeyword< ParserKeywords::LSOWCR >(); - p.addKeyword< ParserKeywords::LSWCR >(); - p.addKeyword< ParserKeywords::LSWL >(); - p.addKeyword< ParserKeywords::LSWLPC >(); - p.addKeyword< ParserKeywords::LSWU >(); - p.addKeyword< ParserKeywords::LTOSIGMA >(); - p.addKeyword< ParserKeywords::LWKRO >(); - p.addKeyword< ParserKeywords::LWKRORG >(); - p.addKeyword< ParserKeywords::LWKRORW >(); - p.addKeyword< ParserKeywords::LWKRW >(); - p.addKeyword< ParserKeywords::LWKRWR >(); - p.addKeyword< ParserKeywords::LWPCW >(); - p.addKeyword< ParserKeywords::LWSLTNUM >(); - p.addKeyword< ParserKeywords::LWSNUM >(); - p.addKeyword< ParserKeywords::LWSOGCR >(); - p.addKeyword< ParserKeywords::LWSOWCR >(); - p.addKeyword< ParserKeywords::LWSWCR >(); - p.addKeyword< ParserKeywords::LWSWL >(); - p.addKeyword< ParserKeywords::LWSWLPC >(); - p.addKeyword< ParserKeywords::LWSWU >(); - p.addKeyword< ParserKeywords::LX >(); - p.addKeyword< ParserKeywords::LXFIN >(); - p.addKeyword< ParserKeywords::LY >(); - p.addKeyword< ParserKeywords::LYFIN >(); - p.addKeyword< ParserKeywords::LZ >(); - p.addKeyword< ParserKeywords::LZFIN >(); - p.addKeyword< ParserKeywords::MAPAXES >(); - p.addKeyword< ParserKeywords::MAPUNITS >(); - p.addKeyword< ParserKeywords::MASSFLOW >(); - p.addKeyword< ParserKeywords::MATCORR >(); - p.addKeyword< ParserKeywords::MAXVALUE >(); - p.addKeyword< ParserKeywords::MEMORY >(); - p.addKeyword< ParserKeywords::MESSAGE >(); - p.addKeyword< ParserKeywords::MESSAGES >(); - p.addKeyword< ParserKeywords::MESSOPTS >(); - p.addKeyword< ParserKeywords::MESSSRVC >(); - p.addKeyword< ParserKeywords::METRIC >(); - p.addKeyword< ParserKeywords::MINNNCT >(); - p.addKeyword< ParserKeywords::MINPORV >(); - p.addKeyword< ParserKeywords::MINPV >(); - p.addKeyword< ParserKeywords::MINPVFIL >(); - p.addKeyword< ParserKeywords::MINPVV >(); - p.addKeyword< ParserKeywords::MINVALUE >(); - p.addKeyword< ParserKeywords::MISC >(); - p.addKeyword< ParserKeywords::MISCIBLE >(); - p.addKeyword< ParserKeywords::MISCNUM >(); - p.addKeyword< ParserKeywords::MLANG >(); - p.addKeyword< ParserKeywords::MLANGSLV >(); - p.addKeyword< ParserKeywords::MONITOR >(); - p.addKeyword< ParserKeywords::MPFANUM >(); - p.addKeyword< ParserKeywords::MPFNNC >(); - p.addKeyword< ParserKeywords::MSFN >(); - p.addKeyword< ParserKeywords::MSGFILE >(); - p.addKeyword< ParserKeywords::MULSGGD >(); - p.addKeyword< ParserKeywords::MULSGGDV >(); - p.addKeyword< ParserKeywords::MULTFLT >(); - p.addKeyword< ParserKeywords::MULTIN >(); - p.addKeyword< ParserKeywords::MULTIPLY >(); - p.addKeyword< ParserKeywords::MULTIREG >(); - p.addKeyword< ParserKeywords::MULTNUM >(); - p.addKeyword< ParserKeywords::MULTOUT >(); - p.addKeyword< ParserKeywords::MULTOUTS >(); - p.addKeyword< ParserKeywords::MULTPV >(); - p.addKeyword< ParserKeywords::MULTREAL >(); - p.addKeyword< ParserKeywords::MULTREGD >(); - p.addKeyword< ParserKeywords::MULTREGH >(); - p.addKeyword< ParserKeywords::MULTREGP >(); - p.addKeyword< ParserKeywords::MULTREGT >(); - p.addKeyword< ParserKeywords::MULTSIG >(); - p.addKeyword< ParserKeywords::MULTSIGV >(); - p.addKeyword< ParserKeywords::MULT_XYZ >(); - p.addKeyword< ParserKeywords::MW >(); - p.addKeyword< ParserKeywords::MWS >(); - p.addKeyword< ParserKeywords::NARROW >(); - p.addKeyword< ParserKeywords::NCONSUMP >(); - p.addKeyword< ParserKeywords::NEFAC >(); - p.addKeyword< ParserKeywords::NETBALAN >(); - p.addKeyword< ParserKeywords::NETCOMPA >(); - p.addKeyword< ParserKeywords::NETWORK >(); - p.addKeyword< ParserKeywords::NEWTRAN >(); - p.addKeyword< ParserKeywords::NEXT >(); - p.addKeyword< ParserKeywords::NEXTSTEP >(); - p.addKeyword< ParserKeywords::NEXTSTPL >(); - p.addKeyword< ParserKeywords::NINENUM >(); - p.addKeyword< ParserKeywords::NINEPOIN >(); - p.addKeyword< ParserKeywords::NMATOPTS >(); - p.addKeyword< ParserKeywords::NMATRIX >(); - p.addKeyword< ParserKeywords::NNC >(); - p.addKeyword< ParserKeywords::NNEWTF >(); - p.addKeyword< ParserKeywords::NOCASC >(); - p.addKeyword< ParserKeywords::NODEPROP >(); - p.addKeyword< ParserKeywords::NODPPM >(); - p.addKeyword< ParserKeywords::NOECHO >(); - p.addKeyword< ParserKeywords::NOGGF >(); - p.addKeyword< ParserKeywords::NOGRAV >(); - p.addKeyword< ParserKeywords::NOHMD >(); - p.addKeyword< ParserKeywords::NOHMO >(); - p.addKeyword< ParserKeywords::NOHYST >(); - p.addKeyword< ParserKeywords::NOINSPEC >(); - p.addKeyword< ParserKeywords::NOMONITO >(); - p.addKeyword< ParserKeywords::NONNC >(); - p.addKeyword< ParserKeywords::NORSSPEC >(); - p.addKeyword< ParserKeywords::NOSIM >(); - p.addKeyword< ParserKeywords::NOWARN >(); - p.addKeyword< ParserKeywords::NOWARNEP >(); - p.addKeyword< ParserKeywords::NRSOUT >(); - p.addKeyword< ParserKeywords::NSTACK >(); - p.addKeyword< ParserKeywords::NTG >(); - p.addKeyword< ParserKeywords::NUMRES >(); - p.addKeyword< ParserKeywords::NUPCOL >(); - p.addKeyword< ParserKeywords::NWATREM >(); - p.addKeyword< ParserKeywords::NXFIN >(); - p.addKeyword< ParserKeywords::NYFIN >(); - p.addKeyword< ParserKeywords::NZFIN >(); - p.addKeyword< ParserKeywords::OCOMPIDX >(); - p.addKeyword< ParserKeywords::OFM >(); - p.addKeyword< ParserKeywords::OIL >(); - p.addKeyword< ParserKeywords::OILAPI >(); - p.addKeyword< ParserKeywords::OILCOMPR >(); - p.addKeyword< ParserKeywords::OILDENT >(); - p.addKeyword< ParserKeywords::OILMW >(); - p.addKeyword< ParserKeywords::OILVISCT >(); - p.addKeyword< ParserKeywords::OILVTIM >(); - p.addKeyword< ParserKeywords::OLDTRAN >(); - p.addKeyword< ParserKeywords::OLDTRANR >(); - p.addKeyword< ParserKeywords::OPERATE >(); - p.addKeyword< ParserKeywords::OPERATER >(); - p.addKeyword< ParserKeywords::OPERNUM >(); - p.addKeyword< ParserKeywords::OPTIONS >(); - p.addKeyword< ParserKeywords::OPTIONS3 >(); - p.addKeyword< ParserKeywords::OUTRAD >(); - p.addKeyword< ParserKeywords::OUTSOL >(); - p.addKeyword< ParserKeywords::OVERBURD >(); - p.addKeyword< ParserKeywords::PARALLEL >(); - p.addKeyword< ParserKeywords::PARAOPTS >(); - p.addKeyword< ParserKeywords::PARTTRAC >(); - p.addKeyword< ParserKeywords::PATHS >(); - p.addKeyword< ParserKeywords::PBUB >(); - p.addKeyword< ParserKeywords::PBVD >(); - p.addKeyword< ParserKeywords::PCG >(); - p.addKeyword< ParserKeywords::PCG32D >(); - p.addKeyword< ParserKeywords::PCW >(); - p.addKeyword< ParserKeywords::PCW32D >(); - p.addKeyword< ParserKeywords::PDEW >(); - p.addKeyword< ParserKeywords::PDVD >(); - p.addKeyword< ParserKeywords::PEBI >(); - p.addKeyword< ParserKeywords::PECOEFS >(); - p.addKeyword< ParserKeywords::PEDIMS >(); - p.addKeyword< ParserKeywords::PEGTABX >(); - p.addKeyword< ParserKeywords::PEKTABX >(); - p.addKeyword< ParserKeywords::PENUM >(); - p.addKeyword< ParserKeywords::PERFORMANCE_PROBE >(); - p.addKeyword< ParserKeywords::PERMAVE >(); - p.addKeyword< ParserKeywords::PERMFACT >(); - p.addKeyword< ParserKeywords::PERMJFUN >(); - p.addKeyword< ParserKeywords::PERMR >(); - p.addKeyword< ParserKeywords::PERMTHT >(); - p.addKeyword< ParserKeywords::PERMX >(); - p.addKeyword< ParserKeywords::PERMXY >(); - p.addKeyword< ParserKeywords::PERMY >(); - p.addKeyword< ParserKeywords::PERMYZ >(); - p.addKeyword< ParserKeywords::PERMZ >(); - p.addKeyword< ParserKeywords::PERMZX >(); - p.addKeyword< ParserKeywords::PETGRID >(); - p.addKeyword< ParserKeywords::PETOPTS >(); - p.addKeyword< ParserKeywords::PICOND >(); - p.addKeyword< ParserKeywords::PIMTDIMS >(); - p.addKeyword< ParserKeywords::PIMULTAB >(); - p.addKeyword< ParserKeywords::PINCH >(); - p.addKeyword< ParserKeywords::PINCHNUM >(); - p.addKeyword< ParserKeywords::PINCHOUT >(); - p.addKeyword< ParserKeywords::PINCHREG >(); - p.addKeyword< ParserKeywords::PINCHXY >(); - p.addKeyword< ParserKeywords::PINTDIMS >(); - p.addKeyword< ParserKeywords::PLMIXNUM >(); - p.addKeyword< ParserKeywords::PLMIXPAR >(); - p.addKeyword< ParserKeywords::PLYADS >(); - p.addKeyword< ParserKeywords::PLYADSS >(); - p.addKeyword< ParserKeywords::PLYATEMP >(); - p.addKeyword< ParserKeywords::PLYCAMAX >(); - p.addKeyword< ParserKeywords::PLYDHFLF >(); - p.addKeyword< ParserKeywords::PLYESAL >(); - p.addKeyword< ParserKeywords::PLYKRRF >(); - p.addKeyword< ParserKeywords::PLYMAX >(); - p.addKeyword< ParserKeywords::PLYMWINJ >(); - p.addKeyword< ParserKeywords::PLYOPTS >(); - p.addKeyword< ParserKeywords::PLYRMDEN >(); - p.addKeyword< ParserKeywords::PLYROCK >(); - p.addKeyword< ParserKeywords::PLYROCKM >(); - p.addKeyword< ParserKeywords::PLYSHEAR >(); - p.addKeyword< ParserKeywords::PLYSHLOG >(); - p.addKeyword< ParserKeywords::PLYTRRF >(); - p.addKeyword< ParserKeywords::PLYTRRFA >(); - p.addKeyword< ParserKeywords::PLYVISC >(); - p.addKeyword< ParserKeywords::PLYVISCS >(); - p.addKeyword< ParserKeywords::PLYVISCT >(); - p.addKeyword< ParserKeywords::PLYVMH >(); - p.addKeyword< ParserKeywords::PLYVSCST >(); - p.addKeyword< ParserKeywords::PMAX >(); - p.addKeyword< ParserKeywords::PMISC >(); - p.addKeyword< ParserKeywords::POLYMER >(); - p.addKeyword< ParserKeywords::POLYMW >(); - p.addKeyword< ParserKeywords::PORO >(); - p.addKeyword< ParserKeywords::PORV >(); - p.addKeyword< ParserKeywords::PPCWMAX >(); - p.addKeyword< ParserKeywords::PRECSALT >(); - p.addKeyword< ParserKeywords::PREF >(); - p.addKeyword< ParserKeywords::PREFS >(); - p.addKeyword< ParserKeywords::PRESSURE >(); - p.addKeyword< ParserKeywords::PRIORITY >(); - p.addKeyword< ParserKeywords::PROPS >(); - p.addKeyword< ParserKeywords::PRORDER >(); - p.addKeyword< ParserKeywords::PRVD >(); - p.addKeyword< ParserKeywords::PSTEADY >(); - p.addKeyword< ParserKeywords::PSWRG >(); - p.addKeyword< ParserKeywords::PSWRO >(); - p.addKeyword< ParserKeywords::PVCDO >(); - p.addKeyword< ParserKeywords::PVCO >(); - p.addKeyword< ParserKeywords::PVDG >(); - p.addKeyword< ParserKeywords::PVDO >(); - p.addKeyword< ParserKeywords::PVDS >(); - p.addKeyword< ParserKeywords::PVTG >(); - p.addKeyword< ParserKeywords::PVTGW >(); - p.addKeyword< ParserKeywords::PVTGWO >(); - p.addKeyword< ParserKeywords::PVTNUM >(); - p.addKeyword< ParserKeywords::PVTO >(); - p.addKeyword< ParserKeywords::PVTW >(); - p.addKeyword< ParserKeywords::PVTWSALT >(); - p.addKeyword< ParserKeywords::PVT_M >(); - p.addKeyword< ParserKeywords::PVZG >(); - p.addKeyword< ParserKeywords::PYACTION >(); - p.addKeyword< ParserKeywords::PYINPUT >(); - p.addKeyword< ParserKeywords::QDRILL >(); - p.addKeyword< ParserKeywords::QHRATING >(); - p.addKeyword< ParserKeywords::QMOBIL >(); - p.addKeyword< ParserKeywords::RADFIN4 >(); - p.addKeyword< ParserKeywords::RADIAL >(); - p.addKeyword< ParserKeywords::RAINFALL >(); - p.addKeyword< ParserKeywords::RBEDCONT >(); - p.addKeyword< ParserKeywords::RCMASTS >(); - p.addKeyword< ParserKeywords::REACHES >(); - p.addKeyword< ParserKeywords::READDATA >(); - p.addKeyword< ParserKeywords::REFINE >(); - p.addKeyword< ParserKeywords::REGDIMS >(); - p.addKeyword< ParserKeywords::REGION2REGION_PROBE >(); - p.addKeyword< ParserKeywords::REGIONS >(); - p.addKeyword< ParserKeywords::REGION_PROBE >(); - p.addKeyword< ParserKeywords::RESIDNUM >(); - p.addKeyword< ParserKeywords::RESTART >(); - p.addKeyword< ParserKeywords::RESVNUM >(); - p.addKeyword< ParserKeywords::RHO >(); - p.addKeyword< ParserKeywords::RIVDEBUG >(); - p.addKeyword< ParserKeywords::RIVERSYS >(); - p.addKeyword< ParserKeywords::RIVRDIMS >(); - p.addKeyword< ParserKeywords::RIVRPROP >(); - p.addKeyword< ParserKeywords::RIVRXSEC >(); - p.addKeyword< ParserKeywords::RIVSALT >(); - p.addKeyword< ParserKeywords::RIVTRACE >(); - p.addKeyword< ParserKeywords::RKTRMDIR >(); - p.addKeyword< ParserKeywords::ROCK >(); - p.addKeyword< ParserKeywords::ROCK2D >(); - p.addKeyword< ParserKeywords::ROCK2DTR >(); - p.addKeyword< ParserKeywords::ROCKCOMP >(); - p.addKeyword< ParserKeywords::ROCKFRAC >(); - p.addKeyword< ParserKeywords::ROCKNUM >(); - p.addKeyword< ParserKeywords::ROCKOPTS >(); - p.addKeyword< ParserKeywords::ROCKPAMA >(); - p.addKeyword< ParserKeywords::ROCKTAB >(); - p.addKeyword< ParserKeywords::ROCKTABH >(); - p.addKeyword< ParserKeywords::ROCKTABW >(); - p.addKeyword< ParserKeywords::ROCKTHSG >(); - p.addKeyword< ParserKeywords::ROCKTSIG >(); - p.addKeyword< ParserKeywords::ROCKV >(); - p.addKeyword< ParserKeywords::ROCKWNOD >(); - p.addKeyword< ParserKeywords::RPTCPL >(); - p.addKeyword< ParserKeywords::RPTGRID >(); - p.addKeyword< ParserKeywords::RPTGRIDL >(); - p.addKeyword< ParserKeywords::RPTHMD >(); - p.addKeyword< ParserKeywords::RPTHMG >(); - p.addKeyword< ParserKeywords::RPTHMW >(); - p.addKeyword< ParserKeywords::RPTINIT >(); - p.addKeyword< ParserKeywords::RPTISOL >(); - p.addKeyword< ParserKeywords::RPTONLY >(); - p.addKeyword< ParserKeywords::RPTONLYO >(); - p.addKeyword< ParserKeywords::RPTPROPS >(); - p.addKeyword< ParserKeywords::RPTREGS >(); - p.addKeyword< ParserKeywords::RPTRST >(); - p.addKeyword< ParserKeywords::RPTRUNSP >(); - p.addKeyword< ParserKeywords::RPTSCHED >(); - p.addKeyword< ParserKeywords::RPTSMRY >(); - p.addKeyword< ParserKeywords::RPTSOL >(); - p.addKeyword< ParserKeywords::RS >(); - p.addKeyword< ParserKeywords::RSCONST >(); - p.addKeyword< ParserKeywords::RSCONSTT >(); - p.addKeyword< ParserKeywords::RSGI >(); - p.addKeyword< ParserKeywords::RSSPEC >(); - p.addKeyword< ParserKeywords::RSVD >(); - p.addKeyword< ParserKeywords::RTEMP >(); - p.addKeyword< ParserKeywords::RTEMPA >(); - p.addKeyword< ParserKeywords::RTEMPVD >(); - p.addKeyword< ParserKeywords::RUNSPEC >(); - p.addKeyword< ParserKeywords::RUNSUM >(); - p.addKeyword< ParserKeywords::RV >(); - p.addKeyword< ParserKeywords::RVCONST >(); - p.addKeyword< ParserKeywords::RVCONSTT >(); - p.addKeyword< ParserKeywords::RVGI >(); - p.addKeyword< ParserKeywords::RVVD >(); - p.addKeyword< ParserKeywords::RWGSALT >(); - p.addKeyword< ParserKeywords::SALT >(); - p.addKeyword< ParserKeywords::SALTNODE >(); - p.addKeyword< ParserKeywords::SALTPVD >(); - p.addKeyword< ParserKeywords::SALTREST >(); - p.addKeyword< ParserKeywords::SALTSOL >(); - p.addKeyword< ParserKeywords::SALTVD >(); - p.addKeyword< ParserKeywords::SAMG >(); - p.addKeyword< ParserKeywords::SATNUM >(); - p.addKeyword< ParserKeywords::SATOPTS >(); - p.addKeyword< ParserKeywords::SAVE >(); - p.addKeyword< ParserKeywords::SCALECRS >(); - p.addKeyword< ParserKeywords::SCALELIM >(); - p.addKeyword< ParserKeywords::SCDATAB >(); - p.addKeyword< ParserKeywords::SCDETAB >(); - p.addKeyword< ParserKeywords::SCDPTAB >(); - p.addKeyword< ParserKeywords::SCDPTRAC >(); - p.addKeyword< ParserKeywords::SCHEDULE >(); - p.addKeyword< ParserKeywords::SCPDIMS >(); - p.addKeyword< ParserKeywords::SCVD >(); - p.addKeyword< ParserKeywords::SDENSITY >(); - p.addKeyword< ParserKeywords::SEGMENT_PROBE >(); - p.addKeyword< ParserKeywords::SEPARATE >(); - p.addKeyword< ParserKeywords::SEPVALS >(); - p.addKeyword< ParserKeywords::SFOAM >(); - p.addKeyword< ParserKeywords::SGAS >(); - p.addKeyword< ParserKeywords::SGCR >(); - p.addKeyword< ParserKeywords::SGCWMIS >(); - p.addKeyword< ParserKeywords::SGF32D >(); - p.addKeyword< ParserKeywords::SGFN >(); - p.addKeyword< ParserKeywords::SGL >(); - p.addKeyword< ParserKeywords::SGLPC >(); - p.addKeyword< ParserKeywords::SGOF >(); - p.addKeyword< ParserKeywords::SGU >(); - p.addKeyword< ParserKeywords::SGWFN >(); - p.addKeyword< ParserKeywords::SHRATE >(); - p.addKeyword< ParserKeywords::SIGMA >(); - p.addKeyword< ParserKeywords::SIGMAGDV >(); - p.addKeyword< ParserKeywords::SIGMATH >(); - p.addKeyword< ParserKeywords::SIGMAV >(); - p.addKeyword< ParserKeywords::SIMULATE >(); - p.addKeyword< ParserKeywords::SKIP >(); - p.addKeyword< ParserKeywords::SKIP100 >(); - p.addKeyword< ParserKeywords::SKIP300 >(); - p.addKeyword< ParserKeywords::SKIPREST >(); - p.addKeyword< ParserKeywords::SKPRPOLY >(); - p.addKeyword< ParserKeywords::SKPRWAT >(); - p.addKeyword< ParserKeywords::SKRO >(); - p.addKeyword< ParserKeywords::SKRORG >(); - p.addKeyword< ParserKeywords::SKRORW >(); - p.addKeyword< ParserKeywords::SKRW >(); - p.addKeyword< ParserKeywords::SKRWR >(); - p.addKeyword< ParserKeywords::SLAVES >(); - p.addKeyword< ParserKeywords::SLGOF >(); - p.addKeyword< ParserKeywords::SMRYDIMS >(); - p.addKeyword< ParserKeywords::SMULTX >(); - p.addKeyword< ParserKeywords::SMULTY >(); - p.addKeyword< ParserKeywords::SMULTZ >(); - p.addKeyword< ParserKeywords::SOCRS >(); - p.addKeyword< ParserKeywords::SOF2 >(); - p.addKeyword< ParserKeywords::SOF3 >(); - p.addKeyword< ParserKeywords::SOF32D >(); - p.addKeyword< ParserKeywords::SOGCR >(); - p.addKeyword< ParserKeywords::SOIL >(); - p.addKeyword< ParserKeywords::SOLUTION >(); - p.addKeyword< ParserKeywords::SOLVCONC >(); - p.addKeyword< ParserKeywords::SOLVDIMS >(); - p.addKeyword< ParserKeywords::SOLVDIRS >(); - p.addKeyword< ParserKeywords::SOLVENT >(); - p.addKeyword< ParserKeywords::SOLVFRAC >(); - p.addKeyword< ParserKeywords::SOLVNUM >(); - p.addKeyword< ParserKeywords::SOMGAS >(); - p.addKeyword< ParserKeywords::SOMWAT >(); - p.addKeyword< ParserKeywords::SORWMIS >(); - p.addKeyword< ParserKeywords::SOWCR >(); - p.addKeyword< ParserKeywords::SPECGRID >(); - p.addKeyword< ParserKeywords::SPECHEAT >(); - p.addKeyword< ParserKeywords::SPECROCK >(); - p.addKeyword< ParserKeywords::SPOLY >(); - p.addKeyword< ParserKeywords::SPOLYMW >(); - p.addKeyword< ParserKeywords::SSFN >(); - p.addKeyword< ParserKeywords::SSGCR >(); - p.addKeyword< ParserKeywords::SSGL >(); - p.addKeyword< ParserKeywords::SSOGCR >(); - p.addKeyword< ParserKeywords::SSOL >(); - p.addKeyword< ParserKeywords::SSOWCR >(); - p.addKeyword< ParserKeywords::SSWL >(); - p.addKeyword< ParserKeywords::SSWU >(); - p.addKeyword< ParserKeywords::START >(); - p.addKeyword< ParserKeywords::STCOND >(); - p.addKeyword< ParserKeywords::STOG >(); - p.addKeyword< ParserKeywords::STONE >(); - p.addKeyword< ParserKeywords::STONE1 >(); - p.addKeyword< ParserKeywords::STONE1EX >(); - p.addKeyword< ParserKeywords::STONE2 >(); - p.addKeyword< ParserKeywords::STOW >(); - p.addKeyword< ParserKeywords::STWG >(); - p.addKeyword< ParserKeywords::SUMMARY >(); - p.addKeyword< ParserKeywords::SUMTHIN >(); - p.addKeyword< ParserKeywords::SURF >(); - p.addKeyword< ParserKeywords::SURFACT >(); - p.addKeyword< ParserKeywords::SURFACTW >(); - p.addKeyword< ParserKeywords::SURFADDW >(); - p.addKeyword< ParserKeywords::SURFADS >(); - p.addKeyword< ParserKeywords::SURFESAL >(); - p.addKeyword< ParserKeywords::SURFNUM >(); - p.addKeyword< ParserKeywords::SURFOPTS >(); - p.addKeyword< ParserKeywords::SURFROCK >(); - p.addKeyword< ParserKeywords::SURFST >(); - p.addKeyword< ParserKeywords::SURFSTES >(); - p.addKeyword< ParserKeywords::SURFVISC >(); - p.addKeyword< ParserKeywords::SURFWNUM >(); - p.addKeyword< ParserKeywords::SWAT >(); - p.addKeyword< ParserKeywords::SWATINIT >(); - p.addKeyword< ParserKeywords::SWCR >(); - p.addKeyword< ParserKeywords::SWFN >(); - p.addKeyword< ParserKeywords::SWINGFAC >(); - p.addKeyword< ParserKeywords::SWL >(); - p.addKeyword< ParserKeywords::SWLPC >(); - p.addKeyword< ParserKeywords::SWOF >(); - p.addKeyword< ParserKeywords::SWU >(); - p.addKeyword< ParserKeywords::TABDIMS >(); - p.addKeyword< ParserKeywords::TBLK >(); - p.addKeyword< ParserKeywords::TEMP >(); - p.addKeyword< ParserKeywords::TEMPI >(); - p.addKeyword< ParserKeywords::TEMPNODE >(); - p.addKeyword< ParserKeywords::TEMPTVD >(); - p.addKeyword< ParserKeywords::TEMPVD >(); - p.addKeyword< ParserKeywords::THCGAS >(); - p.addKeyword< ParserKeywords::THCOIL >(); - p.addKeyword< ParserKeywords::THCONR >(); - p.addKeyword< ParserKeywords::THCONSF >(); - p.addKeyword< ParserKeywords::THCROCK >(); - p.addKeyword< ParserKeywords::THCWATER >(); - p.addKeyword< ParserKeywords::THERMAL >(); - p.addKeyword< ParserKeywords::THPRES >(); - p.addKeyword< ParserKeywords::THPRESFT >(); - p.addKeyword< ParserKeywords::TIGHTEN >(); - p.addKeyword< ParserKeywords::TIME >(); - p.addKeyword< ParserKeywords::TITLE >(); - p.addKeyword< ParserKeywords::TLMIXPAR >(); - p.addKeyword< ParserKeywords::TLPMIXPA >(); - p.addKeyword< ParserKeywords::TNUM >(); - p.addKeyword< ParserKeywords::TOLCRIT >(); - p.addKeyword< ParserKeywords::TOPS >(); - p.addKeyword< ParserKeywords::TPAMEPS >(); - p.addKeyword< ParserKeywords::TRACER >(); - p.addKeyword< ParserKeywords::TRACERKM >(); - p.addKeyword< ParserKeywords::TRACERKP >(); - p.addKeyword< ParserKeywords::TRACERS >(); - p.addKeyword< ParserKeywords::TRACITVD >(); - p.addKeyword< ParserKeywords::TRACTVD >(); - p.addKeyword< ParserKeywords::TRADS >(); - p.addKeyword< ParserKeywords::TRANGL >(); - p.addKeyword< ParserKeywords::TRANR >(); - p.addKeyword< ParserKeywords::TRANTHT >(); - p.addKeyword< ParserKeywords::TRANX >(); - p.addKeyword< ParserKeywords::TRANY >(); - p.addKeyword< ParserKeywords::TRANZ >(); - p.addKeyword< ParserKeywords::TRDCY >(); - p.addKeyword< ParserKeywords::TRDIF >(); - p.addKeyword< ParserKeywords::TRDIS >(); - p.addKeyword< ParserKeywords::TREF >(); - p.addKeyword< ParserKeywords::TREFS >(); - p.addKeyword< ParserKeywords::TRKPF >(); - p.addKeyword< ParserKeywords::TRNHD >(); - p.addKeyword< ParserKeywords::TRPLPORO >(); - p.addKeyword< ParserKeywords::TRROCK >(); - p.addKeyword< ParserKeywords::TSTEP >(); - p.addKeyword< ParserKeywords::TUNING >(); - p.addKeyword< ParserKeywords::TUNINGDP >(); - p.addKeyword< ParserKeywords::TUNINGH >(); - p.addKeyword< ParserKeywords::TUNINGL >(); - p.addKeyword< ParserKeywords::TUNINGS >(); - p.addKeyword< ParserKeywords::TVDP >(); - p.addKeyword< ParserKeywords::TZONE >(); - p.addKeyword< ParserKeywords::UDADIMS >(); - p.addKeyword< ParserKeywords::UDQ >(); - p.addKeyword< ParserKeywords::UDQDIMS >(); - p.addKeyword< ParserKeywords::UDQPARAM >(); - p.addKeyword< ParserKeywords::UDT >(); - p.addKeyword< ParserKeywords::UDTDIMS >(); - p.addKeyword< ParserKeywords::UNCODHMD >(); - p.addKeyword< ParserKeywords::UNIFIN >(); - p.addKeyword< ParserKeywords::UNIFOUT >(); - p.addKeyword< ParserKeywords::UNIFOUTS >(); - p.addKeyword< ParserKeywords::UNIFSAVE >(); - p.addKeyword< ParserKeywords::USECUPL >(); - p.addKeyword< ParserKeywords::USEFLUX >(); - p.addKeyword< ParserKeywords::USENOFLO >(); - p.addKeyword< ParserKeywords::VAPOIL >(); - p.addKeyword< ParserKeywords::VAPPARS >(); - p.addKeyword< ParserKeywords::VAPWAT >(); - p.addKeyword< ParserKeywords::VDFLOW >(); - p.addKeyword< ParserKeywords::VDFLOWR >(); - p.addKeyword< ParserKeywords::VE >(); - p.addKeyword< ParserKeywords::VEDEBUG >(); - p.addKeyword< ParserKeywords::VEFIN >(); - p.addKeyword< ParserKeywords::VEFRAC >(); - p.addKeyword< ParserKeywords::VEFRACP >(); - p.addKeyword< ParserKeywords::VEFRACPV >(); - p.addKeyword< ParserKeywords::VEFRACV >(); - p.addKeyword< ParserKeywords::VFPCHK >(); - p.addKeyword< ParserKeywords::VFPIDIMS >(); - p.addKeyword< ParserKeywords::VFPINJ >(); - p.addKeyword< ParserKeywords::VFPPDIMS >(); - p.addKeyword< ParserKeywords::VFPPROD >(); - p.addKeyword< ParserKeywords::VFPTABL >(); - p.addKeyword< ParserKeywords::VISAGE >(); - p.addKeyword< ParserKeywords::VISCD >(); - p.addKeyword< ParserKeywords::VISCREF >(); - p.addKeyword< ParserKeywords::VISDATES >(); - p.addKeyword< ParserKeywords::VISOPTS >(); - p.addKeyword< ParserKeywords::WAGHYSTR >(); - p.addKeyword< ParserKeywords::WAITBAL >(); - p.addKeyword< ParserKeywords::WALKALIN >(); - p.addKeyword< ParserKeywords::WALQCALC >(); - p.addKeyword< ParserKeywords::WAPI >(); - p.addKeyword< ParserKeywords::WARN >(); - p.addKeyword< ParserKeywords::WATDENT >(); - p.addKeyword< ParserKeywords::WATER >(); - p.addKeyword< ParserKeywords::WATVISCT >(); - p.addKeyword< ParserKeywords::WBHGLR >(); - p.addKeyword< ParserKeywords::WBOREVOL >(); - p.addKeyword< ParserKeywords::WCALCVAL >(); - p.addKeyword< ParserKeywords::WCONHIST >(); - p.addKeyword< ParserKeywords::WCONINJ >(); - p.addKeyword< ParserKeywords::WCONINJE >(); - p.addKeyword< ParserKeywords::WCONINJH >(); - p.addKeyword< ParserKeywords::WCONINJP >(); - p.addKeyword< ParserKeywords::WCONPROD >(); - p.addKeyword< ParserKeywords::WCUTBACK >(); - p.addKeyword< ParserKeywords::WCUTBACT >(); - p.addKeyword< ParserKeywords::WCYCLE >(); - p.addKeyword< ParserKeywords::WDFAC >(); - p.addKeyword< ParserKeywords::WDFACCOR >(); - p.addKeyword< ParserKeywords::WDRILPRI >(); - p.addKeyword< ParserKeywords::WDRILRES >(); - p.addKeyword< ParserKeywords::WDRILTIM >(); - p.addKeyword< ParserKeywords::WECON >(); - p.addKeyword< ParserKeywords::WECONINJ >(); - p.addKeyword< ParserKeywords::WECONT >(); - p.addKeyword< ParserKeywords::WEFAC >(); - p.addKeyword< ParserKeywords::WELCNTL >(); - p.addKeyword< ParserKeywords::WELDEBUG >(); - p.addKeyword< ParserKeywords::WELDRAW >(); - p.addKeyword< ParserKeywords::WELEVNT >(); - p.addKeyword< ParserKeywords::WELLDIMS >(); - p.addKeyword< ParserKeywords::WELL_COMPLETION_PROBE >(); - p.addKeyword< ParserKeywords::WELL_PROBE >(); - p.addKeyword< ParserKeywords::WELMOVEL >(); - p.addKeyword< ParserKeywords::WELOPEN >(); - p.addKeyword< ParserKeywords::WELOPENL >(); - p.addKeyword< ParserKeywords::WELPI >(); - p.addKeyword< ParserKeywords::WELPRI >(); - p.addKeyword< ParserKeywords::WELSEGS >(); - p.addKeyword< ParserKeywords::WELSOMIN >(); - p.addKeyword< ParserKeywords::WELSPECL >(); - p.addKeyword< ParserKeywords::WELSPECS >(); - p.addKeyword< ParserKeywords::WELTARG >(); - p.addKeyword< ParserKeywords::WFOAM >(); - p.addKeyword< ParserKeywords::WFRICSEG >(); - p.addKeyword< ParserKeywords::WFRICSGL >(); - p.addKeyword< ParserKeywords::WFRICTN >(); - p.addKeyword< ParserKeywords::WFRICTNL >(); - p.addKeyword< ParserKeywords::WGASPROD >(); - p.addKeyword< ParserKeywords::WGORPEN >(); - p.addKeyword< ParserKeywords::WGRUPCON >(); - p.addKeyword< ParserKeywords::WH2NUM >(); - p.addKeyword< ParserKeywords::WH3NUM >(); - p.addKeyword< ParserKeywords::WHEDREFD >(); - p.addKeyword< ParserKeywords::WHISTCTL >(); - p.addKeyword< ParserKeywords::WHTEMP >(); - p.addKeyword< ParserKeywords::WINJMULT >(); - p.addKeyword< ParserKeywords::WINJTEMP >(); - p.addKeyword< ParserKeywords::WLIFT >(); - p.addKeyword< ParserKeywords::WLIFTOPT >(); - p.addKeyword< ParserKeywords::WLIMTOL >(); - p.addKeyword< ParserKeywords::WLIST >(); - p.addKeyword< ParserKeywords::WLISTARG >(); - p.addKeyword< ParserKeywords::WLISTNAM >(); - p.addKeyword< ParserKeywords::WNETCTRL >(); - p.addKeyword< ParserKeywords::WNETDP >(); - p.addKeyword< ParserKeywords::WORKLIM >(); - p.addKeyword< ParserKeywords::WORKTHP >(); - p.addKeyword< ParserKeywords::WPAVE >(); - p.addKeyword< ParserKeywords::WPAVEDEP >(); - p.addKeyword< ParserKeywords::WPIMULT >(); - p.addKeyword< ParserKeywords::WPIMULTL >(); - p.addKeyword< ParserKeywords::WPITAB >(); - p.addKeyword< ParserKeywords::WPLUG >(); - p.addKeyword< ParserKeywords::WPMITAB >(); - p.addKeyword< ParserKeywords::WPOLYMER >(); - p.addKeyword< ParserKeywords::WPOLYRED >(); - p.addKeyword< ParserKeywords::WPOTCALC >(); - p.addKeyword< ParserKeywords::WREGROUP >(); - p.addKeyword< ParserKeywords::WRFT >(); - p.addKeyword< ParserKeywords::WRFTPLT >(); - p.addKeyword< ParserKeywords::WSALT >(); - p.addKeyword< ParserKeywords::WSCCLEAN >(); - p.addKeyword< ParserKeywords::WSCCLENL >(); - p.addKeyword< ParserKeywords::WSCTAB >(); - p.addKeyword< ParserKeywords::WSEGAICD >(); - p.addKeyword< ParserKeywords::WSEGDFIN >(); - p.addKeyword< ParserKeywords::WSEGDFMD >(); - p.addKeyword< ParserKeywords::WSEGDFPA >(); - p.addKeyword< ParserKeywords::WSEGDIMS >(); - p.addKeyword< ParserKeywords::WSEGEXSS >(); - p.addKeyword< ParserKeywords::WSEGFLIM >(); - p.addKeyword< ParserKeywords::WSEGFMOD >(); - p.addKeyword< ParserKeywords::WSEGINIT >(); - p.addKeyword< ParserKeywords::WSEGITER >(); - p.addKeyword< ParserKeywords::WSEGLABY >(); - p.addKeyword< ParserKeywords::WSEGLINK >(); - p.addKeyword< ParserKeywords::WSEGMULT >(); - p.addKeyword< ParserKeywords::WSEGPROP >(); - p.addKeyword< ParserKeywords::WSEGSEP >(); - p.addKeyword< ParserKeywords::WSEGSICD >(); - p.addKeyword< ParserKeywords::WSEGSOLV >(); - p.addKeyword< ParserKeywords::WSEGTABL >(); - p.addKeyword< ParserKeywords::WSEGVALV >(); - p.addKeyword< ParserKeywords::WSKPTAB >(); - p.addKeyword< ParserKeywords::WSOLVENT >(); - p.addKeyword< ParserKeywords::WTADD >(); - p.addKeyword< ParserKeywords::WTEMP >(); - p.addKeyword< ParserKeywords::WTEMPQ >(); - p.addKeyword< ParserKeywords::WTEST >(); - p.addKeyword< ParserKeywords::WTHPMAX >(); - p.addKeyword< ParserKeywords::WTMULT >(); - p.addKeyword< ParserKeywords::WTRACER >(); - p.addKeyword< ParserKeywords::WVFPDP >(); - p.addKeyword< ParserKeywords::WVFPEXP >(); - p.addKeyword< ParserKeywords::WWPAVE >(); - p.addKeyword< ParserKeywords::ZCORN >(); - p.addKeyword< ParserKeywords::ZFACT1 >(); - p.addKeyword< ParserKeywords::ZFACT1S >(); - p.addKeyword< ParserKeywords::ZFACTOR >(); - p.addKeyword< ParserKeywords::ZFACTORS >(); - p.addKeyword< ParserKeywords::ZIPP2OFF >(); - p.addKeyword< ParserKeywords::ZIPPY2 >(); + Builtin keywords; + p.addParserKeyword( keywords.ACTDIMS ); + p.addParserKeyword( keywords.ACTION ); + p.addParserKeyword( keywords.ACTIONG ); + p.addParserKeyword( keywords.ACTIONR ); + p.addParserKeyword( keywords.ACTIONS ); + p.addParserKeyword( keywords.ACTIONW ); + p.addParserKeyword( keywords.ACTIONX ); + p.addParserKeyword( keywords.ACTNUM ); + p.addParserKeyword( keywords.ACTPARAM ); + p.addParserKeyword( keywords.ADD ); + p.addParserKeyword( keywords.ADDREG ); + p.addParserKeyword( keywords.ADDZCORN ); + p.addParserKeyword( keywords.ADSALNOD ); + p.addParserKeyword( keywords.ADSORP ); + p.addParserKeyword( keywords.AITS ); + p.addParserKeyword( keywords.AITSOFF ); + p.addParserKeyword( keywords.ALKADS ); + p.addParserKeyword( keywords.ALKALINE ); + p.addParserKeyword( keywords.ALKROCK ); + p.addParserKeyword( keywords.ALL ); + p.addParserKeyword( keywords.ALPOLADS ); + p.addParserKeyword( keywords.ALSURFAD ); + p.addParserKeyword( keywords.ALSURFST ); + p.addParserKeyword( keywords.AMALGAM ); + p.addParserKeyword( keywords.API ); + p.addParserKeyword( keywords.APIGROUP ); + p.addParserKeyword( keywords.APILIM ); + p.addParserKeyword( keywords.APIVD ); + p.addParserKeyword( keywords.AQANCONL ); + p.addParserKeyword( keywords.AQANNC ); + p.addParserKeyword( keywords.AQANTRC ); + p.addParserKeyword( keywords.AQUALIST ); + p.addParserKeyword( keywords.AQUANCON ); + p.addParserKeyword( keywords.AQUCHGAS ); + p.addParserKeyword( keywords.AQUCHWAT ); + p.addParserKeyword( keywords.AQUCON ); + p.addParserKeyword( keywords.AQUCT ); + p.addParserKeyword( keywords.AQUCWFAC ); + p.addParserKeyword( keywords.AQUDIMS ); + p.addParserKeyword( keywords.AQUFET ); + p.addParserKeyword( keywords.AQUFETP ); + p.addParserKeyword( keywords.AQUFLUX ); + p.addParserKeyword( keywords.AQUIFER_PROBE_ANALYTIC ); + p.addParserKeyword( keywords.AQUIFER_PROBE_ANALYTIC_NAMED ); + p.addParserKeyword( keywords.AQUIFER_PROBE_NUMERIC ); + p.addParserKeyword( keywords.AQUNNC ); + p.addParserKeyword( keywords.AQUNUM ); + p.addParserKeyword( keywords.AQUTAB ); + p.addParserKeyword( keywords.AUTOCOAR ); + p.addParserKeyword( keywords.AUTOREF ); + p.addParserKeyword( keywords.BC ); + p.addParserKeyword( keywords.BDENSITY ); + p.addParserKeyword( keywords.BGGI ); + p.addParserKeyword( keywords.BIGMODEL ); + p.addParserKeyword( keywords.BLACKOIL ); + p.addParserKeyword( keywords.BLOCK_PROBE ); + p.addParserKeyword( keywords.BLOCK_PROBE300 ); + p.addParserKeyword( keywords.BOGI ); + p.addParserKeyword( keywords.BOUNDARY ); + p.addParserKeyword( keywords.BOX ); + p.addParserKeyword( keywords.BPARA ); + p.addParserKeyword( keywords.BPIDIMS ); + p.addParserKeyword( keywords.BRANPROP ); + p.addParserKeyword( keywords.BRINE ); + p.addParserKeyword( keywords.BTOBALFA ); + p.addParserKeyword( keywords.BTOBALFV ); + p.addParserKeyword( keywords.CALTRAC ); + p.addParserKeyword( keywords.CARFIN ); + p.addParserKeyword( keywords.CART ); + p.addParserKeyword( keywords.CBMOPTS ); + p.addParserKeyword( keywords.CECON ); + p.addParserKeyword( keywords.CECONT ); + p.addParserKeyword( keywords.CIRCLE ); + p.addParserKeyword( keywords.CO2STOR ); + p.addParserKeyword( keywords.CO2STORE ); + p.addParserKeyword( keywords.COAL ); + p.addParserKeyword( keywords.COALADS ); + p.addParserKeyword( keywords.COALNUM ); + p.addParserKeyword( keywords.COALPP ); + p.addParserKeyword( keywords.COARSEN ); + p.addParserKeyword( keywords.COLLAPSE ); + p.addParserKeyword( keywords.COLUMNS ); + p.addParserKeyword( keywords.COMPDAT ); + p.addParserKeyword( keywords.COMPDATX ); + p.addParserKeyword( keywords.COMPFLSH ); + p.addParserKeyword( keywords.COMPIMB ); + p.addParserKeyword( keywords.COMPINJK ); + p.addParserKeyword( keywords.COMPLMPL ); + p.addParserKeyword( keywords.COMPLUMP ); + p.addParserKeyword( keywords.COMPOFF ); + p.addParserKeyword( keywords.COMPORD ); + p.addParserKeyword( keywords.COMPRIV ); + p.addParserKeyword( keywords.COMPRP ); + p.addParserKeyword( keywords.COMPRPL ); + p.addParserKeyword( keywords.COMPS ); + p.addParserKeyword( keywords.COMPSEGL ); + p.addParserKeyword( keywords.COMPSEGS ); + p.addParserKeyword( keywords.COMPVE ); + p.addParserKeyword( keywords.COMPVEL ); + p.addParserKeyword( keywords.CONNECTION_PROBE ); + p.addParserKeyword( keywords.COORD ); + p.addParserKeyword( keywords.COORDSYS ); + p.addParserKeyword( keywords.COPY ); + p.addParserKeyword( keywords.COPYBOX ); + p.addParserKeyword( keywords.COPYREG ); + p.addParserKeyword( keywords.CPIFACT ); + p.addParserKeyword( keywords.CPIFACTL ); + p.addParserKeyword( keywords.CPR ); + p.addParserKeyword( keywords.CREF ); + p.addParserKeyword( keywords.CREFS ); + p.addParserKeyword( keywords.CRITPERM ); + p.addParserKeyword( keywords.CSKIN ); + p.addParserKeyword( keywords.DATE ); + p.addParserKeyword( keywords.DATES ); + p.addParserKeyword( keywords.DATUM ); + p.addParserKeyword( keywords.DATUMR ); + p.addParserKeyword( keywords.DATUMRX ); + p.addParserKeyword( keywords.DCQDEFN ); + p.addParserKeyword( keywords.DEBUG_ ); + p.addParserKeyword( keywords.DELAYACT ); + p.addParserKeyword( keywords.DENSITY ); + p.addParserKeyword( keywords.DEPTH ); + p.addParserKeyword( keywords.DEPTHTAB ); + p.addParserKeyword( keywords.DEPTHZ ); + p.addParserKeyword( keywords.DIAGDISP ); + p.addParserKeyword( keywords.DIFF ); + p.addParserKeyword( keywords.DIFFC ); + p.addParserKeyword( keywords.DIFFCOAL ); + p.addParserKeyword( keywords.DIFFDP ); + p.addParserKeyword( keywords.DIFFMMF ); + p.addParserKeyword( keywords.DIFFMR ); + p.addParserKeyword( keywords.DIFFMTHT ); + p.addParserKeyword( keywords.DIFFMX ); + p.addParserKeyword( keywords.DIFFMY ); + p.addParserKeyword( keywords.DIFFMZ ); + p.addParserKeyword( keywords.DIFFR ); + p.addParserKeyword( keywords.DIFFTHT ); + p.addParserKeyword( keywords.DIFFUSE ); + p.addParserKeyword( keywords.DIFFX ); + p.addParserKeyword( keywords.DIFFY ); + p.addParserKeyword( keywords.DIFFZ ); + p.addParserKeyword( keywords.DIMENS ); + p.addParserKeyword( keywords.DIMPES ); + p.addParserKeyword( keywords.DIMPLICT ); + p.addParserKeyword( keywords.DISGAS ); + p.addParserKeyword( keywords.DISPDIMS ); + p.addParserKeyword( keywords.DISPERSE ); + p.addParserKeyword( keywords.DOMAINS ); + p.addParserKeyword( keywords.DPGRID ); + p.addParserKeyword( keywords.DPKRMOD ); + p.addParserKeyword( keywords.DPNUM ); + p.addParserKeyword( keywords.DR ); + p.addParserKeyword( keywords.DREF ); + p.addParserKeyword( keywords.DREFS ); + p.addParserKeyword( keywords.DRILPRI ); + p.addParserKeyword( keywords.DRSDT ); + p.addParserKeyword( keywords.DRSDTCON ); + p.addParserKeyword( keywords.DRSDTR ); + p.addParserKeyword( keywords.DRV ); + p.addParserKeyword( keywords.DRVDT ); + p.addParserKeyword( keywords.DRVDTR ); + p.addParserKeyword( keywords.DSPDEINT ); + p.addParserKeyword( keywords.DTHETA ); + p.addParserKeyword( keywords.DTHETAV ); + p.addParserKeyword( keywords.DUALPERM ); + p.addParserKeyword( keywords.DUALPORO ); + p.addParserKeyword( keywords.DUMPCUPL ); + p.addParserKeyword( keywords.DUMPFLUX ); + p.addParserKeyword( keywords.DX ); + p.addParserKeyword( keywords.DXV ); + p.addParserKeyword( keywords.DY ); + p.addParserKeyword( keywords.DYNAMICR ); + p.addParserKeyword( keywords.DYNRDIMS ); + p.addParserKeyword( keywords.DYV ); + p.addParserKeyword( keywords.DZ ); + p.addParserKeyword( keywords.DZMATRIX ); + p.addParserKeyword( keywords.DZMTRX ); + p.addParserKeyword( keywords.DZMTRXV ); + p.addParserKeyword( keywords.DZNET ); + p.addParserKeyword( keywords.DZV ); + p.addParserKeyword( keywords.ECHO ); + p.addParserKeyword( keywords.ECLMC ); + p.addParserKeyword( keywords.EDIT ); + p.addParserKeyword( keywords.EDITNNC ); + p.addParserKeyword( keywords.EDITNNCR ); + p.addParserKeyword( keywords.EHYSTR ); + p.addParserKeyword( keywords.EHYSTRR ); + p.addParserKeyword( keywords.END ); + p.addParserKeyword( keywords.ENDACTIO ); + p.addParserKeyword( keywords.ENDBOX ); + p.addParserKeyword( keywords.ENDDYN ); + p.addParserKeyword( keywords.ENDFIN ); + p.addParserKeyword( keywords.ENDINC ); + p.addParserKeyword( keywords.ENDNUM ); + p.addParserKeyword( keywords.ENDPOINT_SPECIFIERS ); + p.addParserKeyword( keywords.ENDSCALE ); + p.addParserKeyword( keywords.ENDSKIP ); + p.addParserKeyword( keywords.ENKRVD ); + p.addParserKeyword( keywords.ENPCVD ); + p.addParserKeyword( keywords.ENPTVD ); + p.addParserKeyword( keywords.ENSPCVD ); + p.addParserKeyword( keywords.EPSDBGS ); + p.addParserKeyword( keywords.EPSDEBUG ); + p.addParserKeyword( keywords.EQLDIMS ); + p.addParserKeyword( keywords.EQLNUM ); + p.addParserKeyword( keywords.EQLOPTS ); + p.addParserKeyword( keywords.EQLZCORN ); + p.addParserKeyword( keywords.EQUALREG ); + p.addParserKeyword( keywords.EQUALS ); + p.addParserKeyword( keywords.EQUIL ); + p.addParserKeyword( keywords.ESSNODE ); + p.addParserKeyword( keywords.EXCAVATE ); + p.addParserKeyword( keywords.EXCEL ); + p.addParserKeyword( keywords.EXIT ); + p.addParserKeyword( keywords.EXTFIN ); + p.addParserKeyword( keywords.EXTHOST ); + p.addParserKeyword( keywords.EXTRAPMS ); + p.addParserKeyword( keywords.EXTREPGL ); + p.addParserKeyword( keywords.FAULTDIM ); + p.addParserKeyword( keywords.FAULTS ); + p.addParserKeyword( keywords.FBHPDEF ); + p.addParserKeyword( keywords.FHERCHBL ); + p.addParserKeyword( keywords.FIELD ); + p.addParserKeyword( keywords.FIELD_PROBE ); + p.addParserKeyword( keywords.FILEUNIT ); + p.addParserKeyword( keywords.FILLEPS ); + p.addParserKeyword( keywords.FIPNUM ); + p.addParserKeyword( keywords.FIPOWG ); + p.addParserKeyword( keywords.FIPSEP ); + p.addParserKeyword( keywords.FIP_PROBE ); + p.addParserKeyword( keywords.FLUXNUM ); + p.addParserKeyword( keywords.FLUXREG ); + p.addParserKeyword( keywords.FLUXTYPE ); + p.addParserKeyword( keywords.FMTHMD ); + p.addParserKeyword( keywords.FMTIN ); + p.addParserKeyword( keywords.FMTOUT ); + p.addParserKeyword( keywords.FMWSET ); + p.addParserKeyword( keywords.FOAM ); + p.addParserKeyword( keywords.FOAMADS ); + p.addParserKeyword( keywords.FOAMDCYO ); + p.addParserKeyword( keywords.FOAMDCYW ); + p.addParserKeyword( keywords.FOAMFCN ); + p.addParserKeyword( keywords.FOAMFRM ); + p.addParserKeyword( keywords.FOAMFSC ); + p.addParserKeyword( keywords.FOAMFSO ); + p.addParserKeyword( keywords.FOAMFST ); + p.addParserKeyword( keywords.FOAMFSW ); + p.addParserKeyword( keywords.FOAMMOB ); + p.addParserKeyword( keywords.FOAMMOBP ); + p.addParserKeyword( keywords.FOAMMOBS ); + p.addParserKeyword( keywords.FOAMOPTS ); + p.addParserKeyword( keywords.FOAMROCK ); + p.addParserKeyword( keywords.FORMFEED ); + p.addParserKeyword( keywords.FRICTION ); + p.addParserKeyword( keywords.FULLIMP ); + p.addParserKeyword( keywords.GAS ); + p.addParserKeyword( keywords.GASBEGIN ); + p.addParserKeyword( keywords.GASCONC ); + p.addParserKeyword( keywords.GASDENT ); + p.addParserKeyword( keywords.GASEND ); + p.addParserKeyword( keywords.GASFCOMP ); + p.addParserKeyword( keywords.GASFDECR ); + p.addParserKeyword( keywords.GASFDELC ); + p.addParserKeyword( keywords.GASFIELD ); + p.addParserKeyword( keywords.GASFTARG ); + p.addParserKeyword( keywords.GASJT ); + p.addParserKeyword( keywords.GASMONTH ); + p.addParserKeyword( keywords.GASPERIO ); + p.addParserKeyword( keywords.GASSATC ); + p.addParserKeyword( keywords.GASVISCT ); + p.addParserKeyword( keywords.GASYEAR ); + p.addParserKeyword( keywords.GCALECON ); + p.addParserKeyword( keywords.GCOMPIDX ); + p.addParserKeyword( keywords.GCONCAL ); + p.addParserKeyword( keywords.GCONENG ); + p.addParserKeyword( keywords.GCONINJE ); + p.addParserKeyword( keywords.GCONPRI ); + p.addParserKeyword( keywords.GCONPROD ); + p.addParserKeyword( keywords.GCONSALE ); + p.addParserKeyword( keywords.GCONSUMP ); + p.addParserKeyword( keywords.GCONTOL ); + p.addParserKeyword( keywords.GCUTBACK ); + p.addParserKeyword( keywords.GCUTBACT ); + p.addParserKeyword( keywords.GCVD ); + p.addParserKeyword( keywords.GDCQ ); + p.addParserKeyword( keywords.GDCQECON ); + p.addParserKeyword( keywords.GDFILE ); + p.addParserKeyword( keywords.GDIMS ); + p.addParserKeyword( keywords.GDORIENT ); + p.addParserKeyword( keywords.GDRILPOT ); + p.addParserKeyword( keywords.GECON ); + p.addParserKeyword( keywords.GECONT ); + p.addParserKeyword( keywords.GEFAC ); + p.addParserKeyword( keywords.GETDATA ); + p.addParserKeyword( keywords.GETGLOB ); + p.addParserKeyword( keywords.GI ); + p.addParserKeyword( keywords.GIALL ); + p.addParserKeyword( keywords.GIMODEL ); + p.addParserKeyword( keywords.GINODE ); + p.addParserKeyword( keywords.GLIFTLIM ); + p.addParserKeyword( keywords.GLIFTOPT ); + p.addParserKeyword( keywords.GMWSET ); + p.addParserKeyword( keywords.GNETDP ); + p.addParserKeyword( keywords.GNETINJE ); + p.addParserKeyword( keywords.GNETPUMP ); + p.addParserKeyword( keywords.GPMAINT ); + p.addParserKeyword( keywords.GRADGRUP ); + p.addParserKeyword( keywords.GRADRESV ); + p.addParserKeyword( keywords.GRADRFT ); + p.addParserKeyword( keywords.GRADWELL ); + p.addParserKeyword( keywords.GRAVCONS ); + p.addParserKeyword( keywords.GRAVDR ); + p.addParserKeyword( keywords.GRAVDRB ); + p.addParserKeyword( keywords.GRAVDRM ); + p.addParserKeyword( keywords.GRAVITY ); + p.addParserKeyword( keywords.GRDREACH ); + p.addParserKeyword( keywords.GRID ); + p.addParserKeyword( keywords.GRIDFILE ); + p.addParserKeyword( keywords.GRIDOPTS ); + p.addParserKeyword( keywords.GRIDUNIT ); + p.addParserKeyword( keywords.GROUP_PROBE ); + p.addParserKeyword( keywords.GRUPMAST ); + p.addParserKeyword( keywords.GRUPNET ); + p.addParserKeyword( keywords.GRUPRIG ); + p.addParserKeyword( keywords.GRUPSLAV ); + p.addParserKeyword( keywords.GRUPTARG ); + p.addParserKeyword( keywords.GRUPTREE ); + p.addParserKeyword( keywords.GSATINJE ); + p.addParserKeyword( keywords.GSATPROD ); + p.addParserKeyword( keywords.GSEPCOND ); + p.addParserKeyword( keywords.GSSCPTST ); + p.addParserKeyword( keywords.GSWINGF ); + p.addParserKeyword( keywords.GTADD ); + p.addParserKeyword( keywords.GTMULT ); + p.addParserKeyword( keywords.GUIDECAL ); + p.addParserKeyword( keywords.GUIDERAT ); + p.addParserKeyword( keywords.GUPFREQ ); + p.addParserKeyword( keywords.GWRTWCV ); + p.addParserKeyword( keywords.HALFTRAN ); + p.addParserKeyword( keywords.HAxxxxxx ); + p.addParserKeyword( keywords.HBNUM ); + p.addParserKeyword( keywords.HDISP ); + p.addParserKeyword( keywords.HEATCR ); + p.addParserKeyword( keywords.HEATCRT ); + p.addParserKeyword( keywords.HMAQUCT ); + p.addParserKeyword( keywords.HMAQUFET ); + p.addParserKeyword( keywords.HMAQUNUM ); + p.addParserKeyword( keywords.HMDIMS ); + p.addParserKeyword( keywords.HMFAULTS ); + p.addParserKeyword( keywords.HMMLAQUN ); + p.addParserKeyword( keywords.HMMLCTAQ ); + p.addParserKeyword( keywords.HMMLFTAQ ); + p.addParserKeyword( keywords.HMMLTWCN ); + p.addParserKeyword( keywords.HMMULTFT ); + p.addParserKeyword( keywords.HMMULTSG ); + p.addParserKeyword( keywords.HMMULTxx ); + p.addParserKeyword( keywords.HMPROPS ); + p.addParserKeyword( keywords.HMROCK ); + p.addParserKeyword( keywords.HMROCKT ); + p.addParserKeyword( keywords.HMRREF ); + p.addParserKeyword( keywords.HMWELCON ); + p.addParserKeyword( keywords.HMWPIMLT ); + p.addParserKeyword( keywords.HMxxxxxx ); + p.addParserKeyword( keywords.HRFIN ); + p.addParserKeyword( keywords.HWKRO ); + p.addParserKeyword( keywords.HWKRORG ); + p.addParserKeyword( keywords.HWKRORW ); + p.addParserKeyword( keywords.HWKRW ); + p.addParserKeyword( keywords.HWKRWR ); + p.addParserKeyword( keywords.HWPCW ); + p.addParserKeyword( keywords.HWSNUM ); + p.addParserKeyword( keywords.HWSOGCR ); + p.addParserKeyword( keywords.HWSOWCR ); + p.addParserKeyword( keywords.HWSWCR ); + p.addParserKeyword( keywords.HWSWL ); + p.addParserKeyword( keywords.HWSWLPC ); + p.addParserKeyword( keywords.HWSWU ); + p.addParserKeyword( keywords.HXFIN ); + p.addParserKeyword( keywords.HYDRHEAD ); + p.addParserKeyword( keywords.HYFIN ); + p.addParserKeyword( keywords.HYMOBGDR ); + p.addParserKeyword( keywords.HYST ); + p.addParserKeyword( keywords.HYSTCHCK ); + p.addParserKeyword( keywords.HZFIN ); + p.addParserKeyword( keywords.IHOST ); + p.addParserKeyword( keywords.IMBNUM ); + p.addParserKeyword( keywords.IMBNUMMF ); + p.addParserKeyword( keywords.IMKRVD ); + p.addParserKeyword( keywords.IMPCVD ); + p.addParserKeyword( keywords.IMPES ); + p.addParserKeyword( keywords.IMPLICIT ); + p.addParserKeyword( keywords.IMPORT ); + p.addParserKeyword( keywords.IMPTVD ); + p.addParserKeyword( keywords.IMSPCVD ); + p.addParserKeyword( keywords.INCLUDE ); + p.addParserKeyword( keywords.INIT ); + p.addParserKeyword( keywords.INRAD ); + p.addParserKeyword( keywords.INSPEC ); + p.addParserKeyword( keywords.INTPC ); + p.addParserKeyword( keywords.IONROCK ); + p.addParserKeyword( keywords.IONXROCK ); + p.addParserKeyword( keywords.IONXSURF ); + p.addParserKeyword( keywords.IPCG ); + p.addParserKeyword( keywords.IPCW ); + p.addParserKeyword( keywords.ISGCR ); + p.addParserKeyword( keywords.ISGL ); + p.addParserKeyword( keywords.ISGLPC ); + p.addParserKeyword( keywords.ISGU ); + p.addParserKeyword( keywords.ISOGCR ); + p.addParserKeyword( keywords.ISOLNUM ); + p.addParserKeyword( keywords.ISOWCR ); + p.addParserKeyword( keywords.ISWCR ); + p.addParserKeyword( keywords.ISWL ); + p.addParserKeyword( keywords.ISWLPC ); + p.addParserKeyword( keywords.ISWU ); + p.addParserKeyword( keywords.JFUNC ); + p.addParserKeyword( keywords.JFUNCR ); + p.addParserKeyword( keywords.KRNUM ); + p.addParserKeyword( keywords.KRNUMMF ); + p.addParserKeyword( keywords.LAB ); + p.addParserKeyword( keywords.LANGMPL ); + p.addParserKeyword( keywords.LANGMUIR ); + p.addParserKeyword( keywords.LANGSOLV ); + p.addParserKeyword( keywords.LCUNIT ); + p.addParserKeyword( keywords.LGR ); + p.addParserKeyword( keywords.LGRCOPY ); + p.addParserKeyword( keywords.LGRFREE ); + p.addParserKeyword( keywords.LGRLOCK ); + p.addParserKeyword( keywords.LGROFF ); + p.addParserKeyword( keywords.LGRON ); + p.addParserKeyword( keywords.LICENSES ); + p.addParserKeyword( keywords.LIFTOPT ); + p.addParserKeyword( keywords.LINCOM ); + p.addParserKeyword( keywords.LINKPERM ); + p.addParserKeyword( keywords.LIVEOIL ); + p.addParserKeyword( keywords.LKRO ); + p.addParserKeyword( keywords.LKRORG ); + p.addParserKeyword( keywords.LKRORW ); + p.addParserKeyword( keywords.LKRW ); + p.addParserKeyword( keywords.LKRWR ); + p.addParserKeyword( keywords.LOAD ); + p.addParserKeyword( keywords.LOWSALT ); + p.addParserKeyword( keywords.LPCW ); + p.addParserKeyword( keywords.LSALTFNC ); + p.addParserKeyword( keywords.LSLTWNUM ); + p.addParserKeyword( keywords.LSNUM ); + p.addParserKeyword( keywords.LSOGCR ); + p.addParserKeyword( keywords.LSOWCR ); + p.addParserKeyword( keywords.LSWCR ); + p.addParserKeyword( keywords.LSWL ); + p.addParserKeyword( keywords.LSWLPC ); + p.addParserKeyword( keywords.LSWU ); + p.addParserKeyword( keywords.LTOSIGMA ); + p.addParserKeyword( keywords.LWKRO ); + p.addParserKeyword( keywords.LWKRORG ); + p.addParserKeyword( keywords.LWKRORW ); + p.addParserKeyword( keywords.LWKRW ); + p.addParserKeyword( keywords.LWKRWR ); + p.addParserKeyword( keywords.LWPCW ); + p.addParserKeyword( keywords.LWSLTNUM ); + p.addParserKeyword( keywords.LWSNUM ); + p.addParserKeyword( keywords.LWSOGCR ); + p.addParserKeyword( keywords.LWSOWCR ); + p.addParserKeyword( keywords.LWSWCR ); + p.addParserKeyword( keywords.LWSWL ); + p.addParserKeyword( keywords.LWSWLPC ); + p.addParserKeyword( keywords.LWSWU ); + p.addParserKeyword( keywords.LX ); + p.addParserKeyword( keywords.LXFIN ); + p.addParserKeyword( keywords.LY ); + p.addParserKeyword( keywords.LYFIN ); + p.addParserKeyword( keywords.LZ ); + p.addParserKeyword( keywords.LZFIN ); + p.addParserKeyword( keywords.MAPAXES ); + p.addParserKeyword( keywords.MAPUNITS ); + p.addParserKeyword( keywords.MASSFLOW ); + p.addParserKeyword( keywords.MATCORR ); + p.addParserKeyword( keywords.MAXVALUE ); + p.addParserKeyword( keywords.MEMORY ); + p.addParserKeyword( keywords.MESSAGE ); + p.addParserKeyword( keywords.MESSAGES ); + p.addParserKeyword( keywords.MESSOPTS ); + p.addParserKeyword( keywords.MESSSRVC ); + p.addParserKeyword( keywords.METRIC ); + p.addParserKeyword( keywords.MICP ); + p.addParserKeyword( keywords.MICPPARA ); + p.addParserKeyword( keywords.MINNNCT ); + p.addParserKeyword( keywords.MINNPCOL ); + p.addParserKeyword( keywords.MINPORV ); + p.addParserKeyword( keywords.MINPV ); + p.addParserKeyword( keywords.MINPVFIL ); + p.addParserKeyword( keywords.MINPVV ); + p.addParserKeyword( keywords.MINVALUE ); + p.addParserKeyword( keywords.MISC ); + p.addParserKeyword( keywords.MISCIBLE ); + p.addParserKeyword( keywords.MISCNUM ); + p.addParserKeyword( keywords.MLANG ); + p.addParserKeyword( keywords.MLANGSLV ); + p.addParserKeyword( keywords.MONITOR ); + p.addParserKeyword( keywords.MPFANUM ); + p.addParserKeyword( keywords.MPFNNC ); + p.addParserKeyword( keywords.MSFN ); + p.addParserKeyword( keywords.MSGFILE ); + p.addParserKeyword( keywords.MSUM_PROBE ); + p.addParserKeyword( keywords.MULSGGD ); + p.addParserKeyword( keywords.MULSGGDV ); + p.addParserKeyword( keywords.MULTFLT ); + p.addParserKeyword( keywords.MULTIN ); + p.addParserKeyword( keywords.MULTIPLY ); + p.addParserKeyword( keywords.MULTIREG ); + p.addParserKeyword( keywords.MULTNUM ); + p.addParserKeyword( keywords.MULTOUT ); + p.addParserKeyword( keywords.MULTOUTS ); + p.addParserKeyword( keywords.MULTPV ); + p.addParserKeyword( keywords.MULTREAL ); + p.addParserKeyword( keywords.MULTREGD ); + p.addParserKeyword( keywords.MULTREGH ); + p.addParserKeyword( keywords.MULTREGP ); + p.addParserKeyword( keywords.MULTREGT ); + p.addParserKeyword( keywords.MULTSIG ); + p.addParserKeyword( keywords.MULTSIGV ); + p.addParserKeyword( keywords.MULT_XYZ ); + p.addParserKeyword( keywords.MW ); + p.addParserKeyword( keywords.MWS ); + p.addParserKeyword( keywords.NARROW ); + p.addParserKeyword( keywords.NCONSUMP ); + p.addParserKeyword( keywords.NEFAC ); + p.addParserKeyword( keywords.NETBALAN ); + p.addParserKeyword( keywords.NETCOMPA ); + p.addParserKeyword( keywords.NETWORK ); + p.addParserKeyword( keywords.NEWTRAN ); + p.addParserKeyword( keywords.NEXTSTEP ); + p.addParserKeyword( keywords.NEXTSTPL ); + p.addParserKeyword( keywords.NINENUM ); + p.addParserKeyword( keywords.NINEPOIN ); + p.addParserKeyword( keywords.NMATOPTS ); + p.addParserKeyword( keywords.NMATRIX ); + p.addParserKeyword( keywords.NMESSAGE ); + p.addParserKeyword( keywords.NNC ); + p.addParserKeyword( keywords.NNEWTF ); + p.addParserKeyword( keywords.NOCASC ); + p.addParserKeyword( keywords.NODEPROP ); + p.addParserKeyword( keywords.NODPPM ); + p.addParserKeyword( keywords.NOECHO ); + p.addParserKeyword( keywords.NOGGF ); + p.addParserKeyword( keywords.NOGRAV ); + p.addParserKeyword( keywords.NOHMD ); + p.addParserKeyword( keywords.NOHMO ); + p.addParserKeyword( keywords.NOHYST ); + p.addParserKeyword( keywords.NOINSPEC ); + p.addParserKeyword( keywords.NOMONITO ); + p.addParserKeyword( keywords.NONNC ); + p.addParserKeyword( keywords.NORSSPEC ); + p.addParserKeyword( keywords.NOSIM ); + p.addParserKeyword( keywords.NOWARN ); + p.addParserKeyword( keywords.NOWARNEP ); + p.addParserKeyword( keywords.NRSOUT ); + p.addParserKeyword( keywords.NSTACK ); + p.addParserKeyword( keywords.NTG ); + p.addParserKeyword( keywords.NUMRES ); + p.addParserKeyword( keywords.NUPCOL ); + p.addParserKeyword( keywords.NWATREM ); + p.addParserKeyword( keywords.NXFIN ); + p.addParserKeyword( keywords.NYFIN ); + p.addParserKeyword( keywords.NZFIN ); + p.addParserKeyword( keywords.OCOMPIDX ); + p.addParserKeyword( keywords.OFM ); + p.addParserKeyword( keywords.OIL ); + p.addParserKeyword( keywords.OILAPI ); + p.addParserKeyword( keywords.OILCOMPR ); + p.addParserKeyword( keywords.OILDENT ); + p.addParserKeyword( keywords.OILJT ); + p.addParserKeyword( keywords.OILMW ); + p.addParserKeyword( keywords.OILVISCT ); + p.addParserKeyword( keywords.OILVTIM ); + p.addParserKeyword( keywords.OLDTRAN ); + p.addParserKeyword( keywords.OLDTRANR ); + p.addParserKeyword( keywords.OPERATE ); + p.addParserKeyword( keywords.OPERATER ); + p.addParserKeyword( keywords.OPERNUM ); + p.addParserKeyword( keywords.OPTIONS ); + p.addParserKeyword( keywords.OPTIONS3 ); + p.addParserKeyword( keywords.OUTRAD ); + p.addParserKeyword( keywords.OUTSOL ); + p.addParserKeyword( keywords.OVERBURD ); + p.addParserKeyword( keywords.PARALLEL ); + p.addParserKeyword( keywords.PARAOPTS ); + p.addParserKeyword( keywords.PARTTRAC ); + p.addParserKeyword( keywords.PATHS ); + p.addParserKeyword( keywords.PBUB ); + p.addParserKeyword( keywords.PBVD ); + p.addParserKeyword( keywords.PCG ); + p.addParserKeyword( keywords.PCG32D ); + p.addParserKeyword( keywords.PCW ); + p.addParserKeyword( keywords.PCW32D ); + p.addParserKeyword( keywords.PDEW ); + p.addParserKeyword( keywords.PDVD ); + p.addParserKeyword( keywords.PEBI ); + p.addParserKeyword( keywords.PECOEFS ); + p.addParserKeyword( keywords.PEDIMS ); + p.addParserKeyword( keywords.PEGTABX ); + p.addParserKeyword( keywords.PEKTABX ); + p.addParserKeyword( keywords.PENUM ); + p.addParserKeyword( keywords.PERFORMANCE_PROBE ); + p.addParserKeyword( keywords.PERMAVE ); + p.addParserKeyword( keywords.PERMFACT ); + p.addParserKeyword( keywords.PERMJFUN ); + p.addParserKeyword( keywords.PERMR ); + p.addParserKeyword( keywords.PERMTHT ); + p.addParserKeyword( keywords.PERMX ); + p.addParserKeyword( keywords.PERMXY ); + p.addParserKeyword( keywords.PERMY ); + p.addParserKeyword( keywords.PERMYZ ); + p.addParserKeyword( keywords.PERMZ ); + p.addParserKeyword( keywords.PERMZX ); + p.addParserKeyword( keywords.PETGRID ); + p.addParserKeyword( keywords.PETOPTS ); + p.addParserKeyword( keywords.PICOND ); + p.addParserKeyword( keywords.PIMTDIMS ); + p.addParserKeyword( keywords.PIMULTAB ); + p.addParserKeyword( keywords.PINCH ); + p.addParserKeyword( keywords.PINCHNUM ); + p.addParserKeyword( keywords.PINCHOUT ); + p.addParserKeyword( keywords.PINCHREG ); + p.addParserKeyword( keywords.PINCHXY ); + p.addParserKeyword( keywords.PINTDIMS ); + p.addParserKeyword( keywords.PLMIXNUM ); + p.addParserKeyword( keywords.PLMIXPAR ); + p.addParserKeyword( keywords.PLYADS ); + p.addParserKeyword( keywords.PLYADSS ); + p.addParserKeyword( keywords.PLYATEMP ); + p.addParserKeyword( keywords.PLYCAMAX ); + p.addParserKeyword( keywords.PLYDHFLF ); + p.addParserKeyword( keywords.PLYESAL ); + p.addParserKeyword( keywords.PLYKRRF ); + p.addParserKeyword( keywords.PLYMAX ); + p.addParserKeyword( keywords.PLYMWINJ ); + p.addParserKeyword( keywords.PLYOPTS ); + p.addParserKeyword( keywords.PLYRMDEN ); + p.addParserKeyword( keywords.PLYROCK ); + p.addParserKeyword( keywords.PLYROCKM ); + p.addParserKeyword( keywords.PLYSHEAR ); + p.addParserKeyword( keywords.PLYSHLOG ); + p.addParserKeyword( keywords.PLYTRRF ); + p.addParserKeyword( keywords.PLYTRRFA ); + p.addParserKeyword( keywords.PLYVISC ); + p.addParserKeyword( keywords.PLYVISCS ); + p.addParserKeyword( keywords.PLYVISCT ); + p.addParserKeyword( keywords.PLYVMH ); + p.addParserKeyword( keywords.PLYVSCST ); + p.addParserKeyword( keywords.PMAX ); + p.addParserKeyword( keywords.PMISC ); + p.addParserKeyword( keywords.POLYMER ); + p.addParserKeyword( keywords.POLYMW ); + p.addParserKeyword( keywords.PORO ); + p.addParserKeyword( keywords.PORV ); + p.addParserKeyword( keywords.PPCWMAX ); + p.addParserKeyword( keywords.PRECSALT ); + p.addParserKeyword( keywords.PREF ); + p.addParserKeyword( keywords.PREFS ); + p.addParserKeyword( keywords.PRESSURE ); + p.addParserKeyword( keywords.PRIORITY ); + p.addParserKeyword( keywords.PROPS ); + p.addParserKeyword( keywords.PRORDER ); + p.addParserKeyword( keywords.PRVD ); + p.addParserKeyword( keywords.PSTEADY ); + p.addParserKeyword( keywords.PSWRG ); + p.addParserKeyword( keywords.PSWRO ); + p.addParserKeyword( keywords.PVCDO ); + p.addParserKeyword( keywords.PVCO ); + p.addParserKeyword( keywords.PVDG ); + p.addParserKeyword( keywords.PVDO ); + p.addParserKeyword( keywords.PVDS ); + p.addParserKeyword( keywords.PVTG ); + p.addParserKeyword( keywords.PVTGW ); + p.addParserKeyword( keywords.PVTGWO ); + p.addParserKeyword( keywords.PVTNUM ); + p.addParserKeyword( keywords.PVTO ); + p.addParserKeyword( keywords.PVTSOL ); + p.addParserKeyword( keywords.PVTW ); + p.addParserKeyword( keywords.PVTWSALT ); + p.addParserKeyword( keywords.PVT_M ); + p.addParserKeyword( keywords.PVZG ); + p.addParserKeyword( keywords.PYACTION ); + p.addParserKeyword( keywords.PYINPUT ); + p.addParserKeyword( keywords.QDRILL ); + p.addParserKeyword( keywords.QHRATING ); + p.addParserKeyword( keywords.QMOBIL ); + p.addParserKeyword( keywords.RADFIN ); + p.addParserKeyword( keywords.RADFIN4 ); + p.addParserKeyword( keywords.RADIAL ); + p.addParserKeyword( keywords.RAINFALL ); + p.addParserKeyword( keywords.RBEDCONT ); + p.addParserKeyword( keywords.RCMASTS ); + p.addParserKeyword( keywords.REACHES ); + p.addParserKeyword( keywords.READDATA ); + p.addParserKeyword( keywords.REFINE ); + p.addParserKeyword( keywords.REGDIMS ); + p.addParserKeyword( keywords.REGION2REGION_PROBE ); + p.addParserKeyword( keywords.REGION2REGION_PROBE_E300 ); + p.addParserKeyword( keywords.REGIONS ); + p.addParserKeyword( keywords.REGION_PROBE ); + p.addParserKeyword( keywords.RESIDNUM ); + p.addParserKeyword( keywords.RESTART ); + p.addParserKeyword( keywords.RESVNUM ); + p.addParserKeyword( keywords.RHO ); + p.addParserKeyword( keywords.RIVDEBUG ); + p.addParserKeyword( keywords.RIVERSYS ); + p.addParserKeyword( keywords.RIVRDIMS ); + p.addParserKeyword( keywords.RIVRPROP ); + p.addParserKeyword( keywords.RIVRXSEC ); + p.addParserKeyword( keywords.RIVSALT ); + p.addParserKeyword( keywords.RIVTRACE ); + p.addParserKeyword( keywords.RKTRMDIR ); + p.addParserKeyword( keywords.ROCK ); + p.addParserKeyword( keywords.ROCK2D ); + p.addParserKeyword( keywords.ROCK2DTR ); + p.addParserKeyword( keywords.ROCKCOMP ); + p.addParserKeyword( keywords.ROCKFRAC ); + p.addParserKeyword( keywords.ROCKNUM ); + p.addParserKeyword( keywords.ROCKOPTS ); + p.addParserKeyword( keywords.ROCKPAMA ); + p.addParserKeyword( keywords.ROCKTAB ); + p.addParserKeyword( keywords.ROCKTABH ); + p.addParserKeyword( keywords.ROCKTABW ); + p.addParserKeyword( keywords.ROCKTHSG ); + p.addParserKeyword( keywords.ROCKTSIG ); + p.addParserKeyword( keywords.ROCKV ); + p.addParserKeyword( keywords.ROCKWNOD ); + p.addParserKeyword( keywords.RPTCPL ); + p.addParserKeyword( keywords.RPTGRID ); + p.addParserKeyword( keywords.RPTGRIDL ); + p.addParserKeyword( keywords.RPTHMD ); + p.addParserKeyword( keywords.RPTHMG ); + p.addParserKeyword( keywords.RPTHMW ); + p.addParserKeyword( keywords.RPTINIT ); + p.addParserKeyword( keywords.RPTISOL ); + p.addParserKeyword( keywords.RPTONLY ); + p.addParserKeyword( keywords.RPTONLYO ); + p.addParserKeyword( keywords.RPTPROPS ); + p.addParserKeyword( keywords.RPTREGS ); + p.addParserKeyword( keywords.RPTRST ); + p.addParserKeyword( keywords.RPTRUNSP ); + p.addParserKeyword( keywords.RPTSCHED ); + p.addParserKeyword( keywords.RPTSMRY ); + p.addParserKeyword( keywords.RPTSOL ); + p.addParserKeyword( keywords.RS ); + p.addParserKeyword( keywords.RSCONST ); + p.addParserKeyword( keywords.RSCONSTT ); + p.addParserKeyword( keywords.RSGI ); + p.addParserKeyword( keywords.RSSPEC ); + p.addParserKeyword( keywords.RSVD ); + p.addParserKeyword( keywords.RTEMP ); + p.addParserKeyword( keywords.RTEMPA ); + p.addParserKeyword( keywords.RTEMPVD ); + p.addParserKeyword( keywords.RUNSPEC ); + p.addParserKeyword( keywords.RUNSUM ); + p.addParserKeyword( keywords.RV ); + p.addParserKeyword( keywords.RVCONST ); + p.addParserKeyword( keywords.RVCONSTT ); + p.addParserKeyword( keywords.RVGI ); + p.addParserKeyword( keywords.RVVD ); + p.addParserKeyword( keywords.RVW ); + p.addParserKeyword( keywords.RWGSALT ); + p.addParserKeyword( keywords.SALINITY ); + p.addParserKeyword( keywords.SALT ); + p.addParserKeyword( keywords.SALTNODE ); + p.addParserKeyword( keywords.SALTP ); + p.addParserKeyword( keywords.SALTPVD ); + p.addParserKeyword( keywords.SALTREST ); + p.addParserKeyword( keywords.SALTSOL ); + p.addParserKeyword( keywords.SALTVD ); + p.addParserKeyword( keywords.SAMG ); + p.addParserKeyword( keywords.SATNUM ); + p.addParserKeyword( keywords.SATOPTS ); + p.addParserKeyword( keywords.SAVE ); + p.addParserKeyword( keywords.SBIOF ); + p.addParserKeyword( keywords.SCALC ); + p.addParserKeyword( keywords.SCALECRS ); + p.addParserKeyword( keywords.SCALELIM ); + p.addParserKeyword( keywords.SCDATAB ); + p.addParserKeyword( keywords.SCDETAB ); + p.addParserKeyword( keywords.SCDPDIMS ); + p.addParserKeyword( keywords.SCDPTAB ); + p.addParserKeyword( keywords.SCDPTRAC ); + p.addParserKeyword( keywords.SCHEDULE ); + p.addParserKeyword( keywords.SCVD ); + p.addParserKeyword( keywords.SDENSITY ); + p.addParserKeyword( keywords.SEGMENT_PROBE ); + p.addParserKeyword( keywords.SEPARATE ); + p.addParserKeyword( keywords.SEPVALS ); + p.addParserKeyword( keywords.SFOAM ); + p.addParserKeyword( keywords.SGAS ); + p.addParserKeyword( keywords.SGCR ); + p.addParserKeyword( keywords.SGCWMIS ); + p.addParserKeyword( keywords.SGF32D ); + p.addParserKeyword( keywords.SGFN ); + p.addParserKeyword( keywords.SGL ); + p.addParserKeyword( keywords.SGLPC ); + p.addParserKeyword( keywords.SGOF ); + p.addParserKeyword( keywords.SGOFLET ); + p.addParserKeyword( keywords.SGU ); + p.addParserKeyword( keywords.SGWFN ); + p.addParserKeyword( keywords.SHRATE ); + p.addParserKeyword( keywords.SIGMA ); + p.addParserKeyword( keywords.SIGMAGDV ); + p.addParserKeyword( keywords.SIGMATH ); + p.addParserKeyword( keywords.SIGMAV ); + p.addParserKeyword( keywords.SIMULATE ); + p.addParserKeyword( keywords.SKIP ); + p.addParserKeyword( keywords.SKIP100 ); + p.addParserKeyword( keywords.SKIP300 ); + p.addParserKeyword( keywords.SKIPREST ); + p.addParserKeyword( keywords.SKPRPOLY ); + p.addParserKeyword( keywords.SKPRWAT ); + p.addParserKeyword( keywords.SKRO ); + p.addParserKeyword( keywords.SKRORG ); + p.addParserKeyword( keywords.SKRORW ); + p.addParserKeyword( keywords.SKRW ); + p.addParserKeyword( keywords.SKRWR ); + p.addParserKeyword( keywords.SLAVES ); + p.addParserKeyword( keywords.SLGOF ); + p.addParserKeyword( keywords.SMICR ); + p.addParserKeyword( keywords.SMRYDIMS ); + p.addParserKeyword( keywords.SMULTX ); + p.addParserKeyword( keywords.SMULTY ); + p.addParserKeyword( keywords.SMULTZ ); + p.addParserKeyword( keywords.SOCRS ); + p.addParserKeyword( keywords.SOF2 ); + p.addParserKeyword( keywords.SOF3 ); + p.addParserKeyword( keywords.SOF32D ); + p.addParserKeyword( keywords.SOGCR ); + p.addParserKeyword( keywords.SOIL ); + p.addParserKeyword( keywords.SOLUTION ); + p.addParserKeyword( keywords.SOLVCONC ); + p.addParserKeyword( keywords.SOLVDIMS ); + p.addParserKeyword( keywords.SOLVDIRS ); + p.addParserKeyword( keywords.SOLVENT ); + p.addParserKeyword( keywords.SOLVFRAC ); + p.addParserKeyword( keywords.SOLVNUM ); + p.addParserKeyword( keywords.SOMGAS ); + p.addParserKeyword( keywords.SOMWAT ); + p.addParserKeyword( keywords.SORWMIS ); + p.addParserKeyword( keywords.SOWCR ); + p.addParserKeyword( keywords.SOXYG ); + p.addParserKeyword( keywords.SPECGRID ); + p.addParserKeyword( keywords.SPECHEAT ); + p.addParserKeyword( keywords.SPECROCK ); + p.addParserKeyword( keywords.SPIDER ); + p.addParserKeyword( keywords.SPOLY ); + p.addParserKeyword( keywords.SPOLYMW ); + p.addParserKeyword( keywords.SSFN ); + p.addParserKeyword( keywords.SSGCR ); + p.addParserKeyword( keywords.SSGL ); + p.addParserKeyword( keywords.SSOGCR ); + p.addParserKeyword( keywords.SSOL ); + p.addParserKeyword( keywords.SSOWCR ); + p.addParserKeyword( keywords.SSWCR ); + p.addParserKeyword( keywords.SSWL ); + p.addParserKeyword( keywords.SSWU ); + p.addParserKeyword( keywords.START ); + p.addParserKeyword( keywords.STCOND ); + p.addParserKeyword( keywords.STOG ); + p.addParserKeyword( keywords.STONE ); + p.addParserKeyword( keywords.STONE1 ); + p.addParserKeyword( keywords.STONE1EX ); + p.addParserKeyword( keywords.STONE2 ); + p.addParserKeyword( keywords.STOW ); + p.addParserKeyword( keywords.STWG ); + p.addParserKeyword( keywords.SUMMARY ); + p.addParserKeyword( keywords.SUMTHIN ); + p.addParserKeyword( keywords.SUREA ); + p.addParserKeyword( keywords.SURF ); + p.addParserKeyword( keywords.SURFACT ); + p.addParserKeyword( keywords.SURFACTW ); + p.addParserKeyword( keywords.SURFADDW ); + p.addParserKeyword( keywords.SURFADS ); + p.addParserKeyword( keywords.SURFCAPD ); + p.addParserKeyword( keywords.SURFESAL ); + p.addParserKeyword( keywords.SURFNUM ); + p.addParserKeyword( keywords.SURFOPTS ); + p.addParserKeyword( keywords.SURFROCK ); + p.addParserKeyword( keywords.SURFST ); + p.addParserKeyword( keywords.SURFSTES ); + p.addParserKeyword( keywords.SURFVISC ); + p.addParserKeyword( keywords.SURFWNUM ); + p.addParserKeyword( keywords.SWAT ); + p.addParserKeyword( keywords.SWATINIT ); + p.addParserKeyword( keywords.SWCR ); + p.addParserKeyword( keywords.SWF32D ); + p.addParserKeyword( keywords.SWFN ); + p.addParserKeyword( keywords.SWINGFAC ); + p.addParserKeyword( keywords.SWL ); + p.addParserKeyword( keywords.SWLPC ); + p.addParserKeyword( keywords.SWOF ); + p.addParserKeyword( keywords.SWOFLET ); + p.addParserKeyword( keywords.SWU ); + p.addParserKeyword( keywords.TABDIMS ); + p.addParserKeyword( keywords.TBLK ); + p.addParserKeyword( keywords.TEMP ); + p.addParserKeyword( keywords.TEMPI ); + p.addParserKeyword( keywords.TEMPNODE ); + p.addParserKeyword( keywords.TEMPTVD ); + p.addParserKeyword( keywords.TEMPVD ); + p.addParserKeyword( keywords.THCGAS ); + p.addParserKeyword( keywords.THCOIL ); + p.addParserKeyword( keywords.THCONR ); + p.addParserKeyword( keywords.THCONSF ); + p.addParserKeyword( keywords.THCROCK ); + p.addParserKeyword( keywords.THCWATER ); + p.addParserKeyword( keywords.THERMAL ); + p.addParserKeyword( keywords.THPRES ); + p.addParserKeyword( keywords.THPRESFT ); + p.addParserKeyword( keywords.TIGHTEN ); + p.addParserKeyword( keywords.TIGHTENP ); + p.addParserKeyword( keywords.TIME ); + p.addParserKeyword( keywords.TITLE ); + p.addParserKeyword( keywords.TLMIXPAR ); + p.addParserKeyword( keywords.TLPMIXPA ); + p.addParserKeyword( keywords.TNUM ); + p.addParserKeyword( keywords.TOLCRIT ); + p.addParserKeyword( keywords.TOPS ); + p.addParserKeyword( keywords.TPAMEPS ); + p.addParserKeyword( keywords.TPAMEPSS ); + p.addParserKeyword( keywords.TRACER ); + p.addParserKeyword( keywords.TRACERKM ); + p.addParserKeyword( keywords.TRACERKP ); + p.addParserKeyword( keywords.TRACERS ); + p.addParserKeyword( keywords.TRACITVD ); + p.addParserKeyword( keywords.TRACTVD ); + p.addParserKeyword( keywords.TRADS ); + p.addParserKeyword( keywords.TRANGL ); + p.addParserKeyword( keywords.TRANR ); + p.addParserKeyword( keywords.TRANTHT ); + p.addParserKeyword( keywords.TRANX ); + p.addParserKeyword( keywords.TRANY ); + p.addParserKeyword( keywords.TRANZ ); + p.addParserKeyword( keywords.TRDCY ); + p.addParserKeyword( keywords.TRDIF ); + p.addParserKeyword( keywords.TRDIS ); + p.addParserKeyword( keywords.TREF ); + p.addParserKeyword( keywords.TREFS ); + p.addParserKeyword( keywords.TRKPF ); + p.addParserKeyword( keywords.TRNHD ); + p.addParserKeyword( keywords.TRPLPORO ); + p.addParserKeyword( keywords.TRROCK ); + p.addParserKeyword( keywords.TSTEP ); + p.addParserKeyword( keywords.TUNING ); + p.addParserKeyword( keywords.TUNINGDP ); + p.addParserKeyword( keywords.TUNINGH ); + p.addParserKeyword( keywords.TUNINGL ); + p.addParserKeyword( keywords.TUNINGS ); + p.addParserKeyword( keywords.TVDP ); + p.addParserKeyword( keywords.TZONE ); + p.addParserKeyword( keywords.UDADIMS ); + p.addParserKeyword( keywords.UDQ ); + p.addParserKeyword( keywords.UDQDIMS ); + p.addParserKeyword( keywords.UDQPARAM ); + p.addParserKeyword( keywords.UDT ); + p.addParserKeyword( keywords.UDTDIMS ); + p.addParserKeyword( keywords.UNCODHMD ); + p.addParserKeyword( keywords.UNIFIN ); + p.addParserKeyword( keywords.UNIFOUT ); + p.addParserKeyword( keywords.UNIFOUTS ); + p.addParserKeyword( keywords.UNIFSAVE ); + p.addParserKeyword( keywords.USECUPL ); + p.addParserKeyword( keywords.USEFLUX ); + p.addParserKeyword( keywords.USENOFLO ); + p.addParserKeyword( keywords.VAPOIL ); + p.addParserKeyword( keywords.VAPPARS ); + p.addParserKeyword( keywords.VAPWAT ); + p.addParserKeyword( keywords.VDFLOW ); + p.addParserKeyword( keywords.VDFLOWR ); + p.addParserKeyword( keywords.VE ); + p.addParserKeyword( keywords.VEDEBUG ); + p.addParserKeyword( keywords.VEFIN ); + p.addParserKeyword( keywords.VEFRAC ); + p.addParserKeyword( keywords.VEFRACP ); + p.addParserKeyword( keywords.VEFRACPV ); + p.addParserKeyword( keywords.VEFRACV ); + p.addParserKeyword( keywords.VFPCHK ); + p.addParserKeyword( keywords.VFPIDIMS ); + p.addParserKeyword( keywords.VFPINJ ); + p.addParserKeyword( keywords.VFPPDIMS ); + p.addParserKeyword( keywords.VFPPROD ); + p.addParserKeyword( keywords.VFPTABL ); + p.addParserKeyword( keywords.VISAGE ); + p.addParserKeyword( keywords.VISCD ); + p.addParserKeyword( keywords.VISCREF ); + p.addParserKeyword( keywords.VISDATES ); + p.addParserKeyword( keywords.VISOPTS ); + p.addParserKeyword( keywords.WAGHYSTR ); + p.addParserKeyword( keywords.WAITBAL ); + p.addParserKeyword( keywords.WALKALIN ); + p.addParserKeyword( keywords.WALQCALC ); + p.addParserKeyword( keywords.WAPI ); + p.addParserKeyword( keywords.WARN ); + p.addParserKeyword( keywords.WATDENT ); + p.addParserKeyword( keywords.WATER ); + p.addParserKeyword( keywords.WATJT ); + p.addParserKeyword( keywords.WATVISCT ); + p.addParserKeyword( keywords.WBHGLR ); + p.addParserKeyword( keywords.WBOREVOL ); + p.addParserKeyword( keywords.WCALCVAL ); + p.addParserKeyword( keywords.WCONHIST ); + p.addParserKeyword( keywords.WCONINJ ); + p.addParserKeyword( keywords.WCONINJE ); + p.addParserKeyword( keywords.WCONINJH ); + p.addParserKeyword( keywords.WCONINJP ); + p.addParserKeyword( keywords.WCONPROD ); + p.addParserKeyword( keywords.WCUTBACK ); + p.addParserKeyword( keywords.WCUTBACT ); + p.addParserKeyword( keywords.WCYCLE ); + p.addParserKeyword( keywords.WDFAC ); + p.addParserKeyword( keywords.WDFACCOR ); + p.addParserKeyword( keywords.WDRILPRI ); + p.addParserKeyword( keywords.WDRILRES ); + p.addParserKeyword( keywords.WDRILTIM ); + p.addParserKeyword( keywords.WECON ); + p.addParserKeyword( keywords.WECONINJ ); + p.addParserKeyword( keywords.WECONT ); + p.addParserKeyword( keywords.WEFAC ); + p.addParserKeyword( keywords.WELCNTL ); + p.addParserKeyword( keywords.WELDEBUG ); + p.addParserKeyword( keywords.WELDRAW ); + p.addParserKeyword( keywords.WELEVNT ); + p.addParserKeyword( keywords.WELLDIMS ); + p.addParserKeyword( keywords.WELL_COMPLETION_PROBE ); + p.addParserKeyword( keywords.WELL_PROBE ); + p.addParserKeyword( keywords.WELMOVEL ); + p.addParserKeyword( keywords.WELOPEN ); + p.addParserKeyword( keywords.WELOPENL ); + p.addParserKeyword( keywords.WELPI ); + p.addParserKeyword( keywords.WELPRI ); + p.addParserKeyword( keywords.WELSEGS ); + p.addParserKeyword( keywords.WELSOMIN ); + p.addParserKeyword( keywords.WELSPECL ); + p.addParserKeyword( keywords.WELSPECS ); + p.addParserKeyword( keywords.WELTARG ); + p.addParserKeyword( keywords.WFOAM ); + p.addParserKeyword( keywords.WFRICSEG ); + p.addParserKeyword( keywords.WFRICSGL ); + p.addParserKeyword( keywords.WFRICTN ); + p.addParserKeyword( keywords.WFRICTNL ); + p.addParserKeyword( keywords.WGASPROD ); + p.addParserKeyword( keywords.WGORPEN ); + p.addParserKeyword( keywords.WGRUPCON ); + p.addParserKeyword( keywords.WH2NUM ); + p.addParserKeyword( keywords.WH3NUM ); + p.addParserKeyword( keywords.WHEDREFD ); + p.addParserKeyword( keywords.WHISTCTL ); + p.addParserKeyword( keywords.WHTEMP ); + p.addParserKeyword( keywords.WINJMULT ); + p.addParserKeyword( keywords.WINJTEMP ); + p.addParserKeyword( keywords.WLIFT ); + p.addParserKeyword( keywords.WLIFTOPT ); + p.addParserKeyword( keywords.WLIMTOL ); + p.addParserKeyword( keywords.WLIST ); + p.addParserKeyword( keywords.WLISTARG ); + p.addParserKeyword( keywords.WLISTNAM ); + p.addParserKeyword( keywords.WMICP ); + p.addParserKeyword( keywords.WNETCTRL ); + p.addParserKeyword( keywords.WNETDP ); + p.addParserKeyword( keywords.WORKLIM ); + p.addParserKeyword( keywords.WORKTHP ); + p.addParserKeyword( keywords.WPAVE ); + p.addParserKeyword( keywords.WPAVEDEP ); + p.addParserKeyword( keywords.WPIMULT ); + p.addParserKeyword( keywords.WPIMULTL ); + p.addParserKeyword( keywords.WPITAB ); + p.addParserKeyword( keywords.WPLUG ); + p.addParserKeyword( keywords.WPMITAB ); + p.addParserKeyword( keywords.WPOLYMER ); + p.addParserKeyword( keywords.WPOLYRED ); + p.addParserKeyword( keywords.WPOTCALC ); + p.addParserKeyword( keywords.WREGROUP ); + p.addParserKeyword( keywords.WRFT ); + p.addParserKeyword( keywords.WRFTPLT ); + p.addParserKeyword( keywords.WSALT ); + p.addParserKeyword( keywords.WSCCLEAN ); + p.addParserKeyword( keywords.WSCCLENL ); + p.addParserKeyword( keywords.WSCTAB ); + p.addParserKeyword( keywords.WSEGAICD ); + p.addParserKeyword( keywords.WSEGDFIN ); + p.addParserKeyword( keywords.WSEGDFMD ); + p.addParserKeyword( keywords.WSEGDFPA ); + p.addParserKeyword( keywords.WSEGDIMS ); + p.addParserKeyword( keywords.WSEGEXSS ); + p.addParserKeyword( keywords.WSEGFLIM ); + p.addParserKeyword( keywords.WSEGFMOD ); + p.addParserKeyword( keywords.WSEGINIT ); + p.addParserKeyword( keywords.WSEGITER ); + p.addParserKeyword( keywords.WSEGLABY ); + p.addParserKeyword( keywords.WSEGLINK ); + p.addParserKeyword( keywords.WSEGMULT ); + p.addParserKeyword( keywords.WSEGPROP ); + p.addParserKeyword( keywords.WSEGSEP ); + p.addParserKeyword( keywords.WSEGSICD ); + p.addParserKeyword( keywords.WSEGSOLV ); + p.addParserKeyword( keywords.WSEGTABL ); + p.addParserKeyword( keywords.WSEGVALV ); + p.addParserKeyword( keywords.WSKPTAB ); + p.addParserKeyword( keywords.WSOLVENT ); + p.addParserKeyword( keywords.WSURFACT ); + p.addParserKeyword( keywords.WTADD ); + p.addParserKeyword( keywords.WTEMP ); + p.addParserKeyword( keywords.WTEMPQ ); + p.addParserKeyword( keywords.WTEST ); + p.addParserKeyword( keywords.WTHPMAX ); + p.addParserKeyword( keywords.WTMULT ); + p.addParserKeyword( keywords.WTRACER ); + p.addParserKeyword( keywords.WVFPDP ); + p.addParserKeyword( keywords.WVFPEXP ); + p.addParserKeyword( keywords.WWPAVE ); + p.addParserKeyword( keywords.ZCORN ); + p.addParserKeyword( keywords.ZFACT1 ); + p.addParserKeyword( keywords.ZFACT1S ); + p.addParserKeyword( keywords.ZFACTOR ); + p.addParserKeyword( keywords.ZFACTORS ); + p.addParserKeyword( keywords.ZIPP2OFF ); + p.addParserKeyword( keywords.ZIPPY2 ); + } } void Parser::addDefaultKeywords() { - ParserKeywords::addDefaultKeywords(*this); + ParserKeywords::addDefaultKeywords(*this); } } diff --git a/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/A.cpp b/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/A.cpp index 9edaa74a35..014c1df2ed 100644 --- a/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/A.cpp +++ b/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/A.cpp @@ -1,18 +1,17 @@ -#include -#include -#include -#include + +#include +#include +#include +#include -#include +#include namespace Opm { namespace ParserKeywords { -ACTDIMS::ACTDIMS( ) : ParserKeyword("ACTDIMS") -{ - setFixedSize( (size_t) 1); +ACTDIMS::ACTDIMS() : ParserKeyword("ACTDIMS", KeywordSize(1, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("ACTDIMS"); @@ -52,9 +51,7 @@ const std::string ACTDIMS::MAX_ACTION_COND::itemName = "MAX_ACTION_COND"; const int ACTDIMS::MAX_ACTION_COND::defaultValue = 3; -ACTION::ACTION( ) : ParserKeyword("ACTION") -{ - setFixedSize( (size_t) 1); +ACTION::ACTION() : ParserKeyword("ACTION", KeywordSize(1, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("ACTION"); @@ -86,9 +83,7 @@ const std::string ACTION::OPERATOR::itemName = "OPERATOR"; const std::string ACTION::TRIGGER_VALUE::itemName = "TRIGGER_VALUE"; -ACTIONG::ACTIONG( ) : ParserKeyword("ACTIONG") -{ - setFixedSize( (size_t) 1); +ACTIONG::ACTIONG() : ParserKeyword("ACTIONG", KeywordSize(1, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("ACTIONG"); @@ -136,12 +131,10 @@ const std::string ACTIONG::TRIGGER_VALUE::itemName = "TRIGGER_VALUE"; const std::string ACTIONG::REPETITIONS::itemName = "REPETITIONS"; const int ACTIONG::REPETITIONS::defaultValue = 1; const std::string ACTIONG::INCREMENT::itemName = "INCREMENT"; -const double ACTIONG::INCREMENT::defaultValue = 0.000000; +const double ACTIONG::INCREMENT::defaultValue = 0; -ACTIONR::ACTIONR( ) : ParserKeyword("ACTIONR") -{ - setFixedSize( (size_t) 1); +ACTIONR::ACTIONR() : ParserKeyword("ACTIONR", KeywordSize(1, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("ACTIONR"); @@ -194,12 +187,10 @@ const std::string ACTIONR::TRIGGER_VALUE::itemName = "TRIGGER_VALUE"; const std::string ACTIONR::REPETITIONS::itemName = "REPETITIONS"; const int ACTIONR::REPETITIONS::defaultValue = 1; const std::string ACTIONR::INCREMENT::itemName = "INCREMENT"; -const double ACTIONR::INCREMENT::defaultValue = 0.000000; +const double ACTIONR::INCREMENT::defaultValue = 0; -ACTIONS::ACTIONS( ) : ParserKeyword("ACTIONS") -{ - setFixedSize( (size_t) 1); +ACTIONS::ACTIONS() : ParserKeyword("ACTIONS", KeywordSize(1, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("ACTIONS"); @@ -252,12 +243,10 @@ const std::string ACTIONS::TRIGGER_VALUE::itemName = "TRIGGER_VALUE"; const std::string ACTIONS::REPETITIONS::itemName = "REPETITIONS"; const int ACTIONS::REPETITIONS::defaultValue = 1; const std::string ACTIONS::INCREMENT::itemName = "INCREMENT"; -const double ACTIONS::INCREMENT::defaultValue = 0.000000; +const double ACTIONS::INCREMENT::defaultValue = 0; -ACTIONW::ACTIONW( ) : ParserKeyword("ACTIONW") -{ - setFixedSize( (size_t) 1); +ACTIONW::ACTIONW() : ParserKeyword("ACTIONW", KeywordSize(1, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("ACTIONW"); @@ -305,12 +294,10 @@ const std::string ACTIONW::TRIGGER_VALUE::itemName = "TRIGGER_VALUE"; const std::string ACTIONW::REPETITIONS::itemName = "REPETITIONS"; const int ACTIONW::REPETITIONS::defaultValue = 1; const std::string ACTIONW::INCREMENT::itemName = "INCREMENT"; -const double ACTIONW::INCREMENT::defaultValue = 0.000000; +const double ACTIONW::INCREMENT::defaultValue = 0; -ACTIONX::ACTIONX( ) : ParserKeyword("ACTIONX") -{ - setSizeType(SLASH_TERMINATED); +ACTIONX::ACTIONX() : ParserKeyword("ACTIONX", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("ACTIONX"); @@ -348,13 +335,11 @@ const std::string ACTIONX::NAME::itemName = "NAME"; const std::string ACTIONX::NUM::itemName = "NUM"; const int ACTIONX::NUM::defaultValue = 1; const std::string ACTIONX::MIN_WAIT::itemName = "MIN_WAIT"; -const double ACTIONX::MIN_WAIT::defaultValue = 0.000000; +const double ACTIONX::MIN_WAIT::defaultValue = 0; const std::string ACTIONX::CONDITION::itemName = "CONDITION"; -ACTNUM::ACTNUM( ) : ParserKeyword("ACTNUM") -{ - setFixedSize( (size_t) 1); +ACTNUM::ACTNUM() : ParserKeyword("ACTNUM", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("ACTNUM"); @@ -372,9 +357,7 @@ const std::string ACTNUM::keywordName = "ACTNUM"; const std::string ACTNUM::data::itemName = "data"; -ACTPARAM::ACTPARAM( ) : ParserKeyword("ACTPARAM") -{ - setFixedSize( (size_t) 1); +ACTPARAM::ACTPARAM() : ParserKeyword("ACTPARAM", KeywordSize(1, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("ACTPARAM"); @@ -394,11 +377,9 @@ const std::string ACTPARAM::data::itemName = "data"; const double ACTPARAM::data::defaultValue = 0.000100; -ADD::ADD( ) : ParserKeyword("ADD") -{ - setSizeType(SLASH_TERMINATED); - addValidSectionName("EDIT"); +ADD::ADD() : ParserKeyword("ADD", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("GRID"); + addValidSectionName("EDIT"); addValidSectionName("PROPS"); addValidSectionName("REGIONS"); addValidSectionName("SOLUTION"); @@ -452,11 +433,9 @@ const std::string ADD::K1::itemName = "K1"; const std::string ADD::K2::itemName = "K2"; -ADDREG::ADDREG( ) : ParserKeyword("ADDREG") -{ - setSizeType(SLASH_TERMINATED); - addValidSectionName("EDIT"); +ADDREG::ADDREG() : ParserKeyword("ADDREG", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("GRID"); + addValidSectionName("EDIT"); addValidSectionName("PROPS"); addValidSectionName("REGIONS"); addValidSectionName("SOLUTION"); @@ -492,15 +471,13 @@ ADDREG::ADDREG( ) : ParserKeyword("ADDREG") const std::string ADDREG::keywordName = "ADDREG"; const std::string ADDREG::ARRAY::itemName = "ARRAY"; const std::string ADDREG::SHIFT::itemName = "SHIFT"; -const double ADDREG::SHIFT::defaultValue = 0.000000; +const double ADDREG::SHIFT::defaultValue = 0; const std::string ADDREG::REGION_NUMBER::itemName = "REGION_NUMBER"; const std::string ADDREG::REGION_NAME::itemName = "REGION_NAME"; const std::string ADDREG::REGION_NAME::defaultValue = "M"; -ADDZCORN::ADDZCORN( ) : ParserKeyword("ADDZCORN") -{ - setSizeType(SLASH_TERMINATED); +ADDZCORN::ADDZCORN() : ParserKeyword("ADDZCORN", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("ADDZCORN"); @@ -573,10 +550,7 @@ const std::string ADDZCORN::JY2A::itemName = "JY2A"; const std::string ADDZCORN::ACTION::itemName = "ACTION"; -ADSALNOD::ADSALNOD( ) : ParserKeyword("ADSALNOD") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTSFUN",0); +ADSALNOD::ADSALNOD() : ParserKeyword("ADSALNOD", KeywordSize("TABDIMS", "NTSFUN", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("ADSALNOD"); @@ -595,10 +569,7 @@ const std::string ADSALNOD::keywordName = "ADSALNOD"; const std::string ADSALNOD::DATA::itemName = "DATA"; -ADSORP::ADSORP( ) : ParserKeyword("ADSORP") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTSFUN",1); +ADSORP::ADSORP() : ParserKeyword("ADSORP", KeywordSize("TABDIMS", "NTSFUN", false, 1)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("ADSORP"); @@ -662,9 +633,7 @@ const double ADSORP::N::defaultValue = 0.500000; const std::string ADSORP::K_REF::itemName = "K_REF"; -AITS::AITS( ) : ParserKeyword("AITS") -{ - setFixedSize( (size_t) 0); +AITS::AITS() : ParserKeyword("AITS", KeywordSize(0, false)) { addValidSectionName("RUNSPEC"); addValidSectionName("SCHEDULE"); clearDeckNames(); @@ -673,9 +642,7 @@ AITS::AITS( ) : ParserKeyword("AITS") const std::string AITS::keywordName = "AITS"; -AITSOFF::AITSOFF( ) : ParserKeyword("AITSOFF") -{ - setFixedSize( (size_t) 0); +AITSOFF::AITSOFF() : ParserKeyword("AITSOFF", KeywordSize(0, false)) { addValidSectionName("RUNSPEC"); addValidSectionName("SCHEDULE"); clearDeckNames(); @@ -684,10 +651,7 @@ AITSOFF::AITSOFF( ) : ParserKeyword("AITSOFF") const std::string AITSOFF::keywordName = "AITSOFF"; -ALKADS::ALKADS( ) : ParserKeyword("ALKADS") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTSFUN",0); +ALKADS::ALKADS() : ParserKeyword("ALKADS", KeywordSize("TABDIMS", "NTSFUN", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("ALKADS"); @@ -707,9 +671,7 @@ const std::string ALKADS::keywordName = "ALKADS"; const std::string ALKADS::DATA::itemName = "DATA"; -ALKALINE::ALKALINE( ) : ParserKeyword("ALKALINE") -{ - setFixedSize( (size_t) 0); +ALKALINE::ALKALINE() : ParserKeyword("ALKALINE", KeywordSize(0, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("ALKALINE"); @@ -717,10 +679,7 @@ ALKALINE::ALKALINE( ) : ParserKeyword("ALKALINE") const std::string ALKALINE::keywordName = "ALKALINE"; -ALKROCK::ALKROCK( ) : ParserKeyword("ALKROCK") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTSFUN",0); +ALKROCK::ALKROCK() : ParserKeyword("ALKROCK", KeywordSize("TABDIMS", "NTSFUN", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("ALKROCK"); @@ -737,9 +696,7 @@ const std::string ALKROCK::keywordName = "ALKROCK"; const std::string ALKROCK::ROCK_ADS_INDEX::itemName = "ROCK_ADS_INDEX"; -ALL::ALL( ) : ParserKeyword("ALL") -{ - setFixedSize( (size_t) 0); +ALL::ALL() : ParserKeyword("ALL", KeywordSize(0, false)) { addValidSectionName("SUMMARY"); clearDeckNames(); addDeckName("ALL"); @@ -747,10 +704,7 @@ ALL::ALL( ) : ParserKeyword("ALL") const std::string ALL::keywordName = "ALL"; -ALPOLADS::ALPOLADS( ) : ParserKeyword("ALPOLADS") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTSFUN",0); +ALPOLADS::ALPOLADS() : ParserKeyword("ALPOLADS", KeywordSize("TABDIMS", "NTSFUN", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("ALPOLADS"); @@ -770,10 +724,7 @@ const std::string ALPOLADS::keywordName = "ALPOLADS"; const std::string ALPOLADS::DATA::itemName = "DATA"; -ALSURFAD::ALSURFAD( ) : ParserKeyword("ALSURFAD") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTSFUN",0); +ALSURFAD::ALSURFAD() : ParserKeyword("ALSURFAD", KeywordSize("TABDIMS", "NTSFUN", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("ALSURFAD"); @@ -793,10 +744,7 @@ const std::string ALSURFAD::keywordName = "ALSURFAD"; const std::string ALSURFAD::DATA::itemName = "DATA"; -ALSURFST::ALSURFST( ) : ParserKeyword("ALSURFST") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTPVT",0); +ALSURFST::ALSURFST() : ParserKeyword("ALSURFST", KeywordSize("TABDIMS", "NTPVT", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("ALSURFST"); @@ -816,9 +764,7 @@ const std::string ALSURFST::keywordName = "ALSURFST"; const std::string ALSURFST::DATA::itemName = "DATA"; -AMALGAM::AMALGAM( ) : ParserKeyword("AMALGAM") -{ - setSizeType(SLASH_TERMINATED); +AMALGAM::AMALGAM() : ParserKeyword("AMALGAM", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("AMALGAM"); @@ -836,9 +782,7 @@ const std::string AMALGAM::keywordName = "AMALGAM"; const std::string AMALGAM::LGR_GROUPS::itemName = "LGR_GROUPS"; -API::API( ) : ParserKeyword("API") -{ - setFixedSize( (size_t) 0); +API::API() : ParserKeyword("API", KeywordSize(0, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("API"); @@ -846,9 +790,7 @@ API::API( ) : ParserKeyword("API") const std::string API::keywordName = "API"; -APIGROUP::APIGROUP( ) : ParserKeyword("APIGROUP") -{ - setFixedSize( (size_t) 1); +APIGROUP::APIGROUP() : ParserKeyword("APIGROUP", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("APIGROUP"); @@ -867,9 +809,7 @@ const std::string APIGROUP::MAX_OIL_PVT_GROUP_COUNT::itemName = "MAX_OIL_PVT_GRO const int APIGROUP::MAX_OIL_PVT_GROUP_COUNT::defaultValue = 1; -APILIM::APILIM( ) : ParserKeyword("APILIM") -{ - setFixedSize( (size_t) 1); +APILIM::APILIM() : ParserKeyword("APILIM", KeywordSize(1, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("APILIM"); @@ -912,13 +852,10 @@ const std::string APILIM::NUM_ROWS::itemName = "NUM_ROWS"; const int APILIM::NUM_ROWS::defaultValue = 10; -APIVID::APIVID( ) : ParserKeyword("APIVID") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("EQLDIMS","NTEQUL",0); +APIVD::APIVD() : ParserKeyword("APIVD", KeywordSize("EQLDIMS", "NTEQUL", false, 0)) { addValidSectionName("SOLUTION"); clearDeckNames(); - addDeckName("APIVID"); + addDeckName("APIVD"); { ParserRecord record; { @@ -931,13 +868,11 @@ APIVID::APIVID( ) : ParserKeyword("APIVID") addRecord( record ); } } -const std::string APIVID::keywordName = "APIVID"; -const std::string APIVID::DATA::itemName = "DATA"; +const std::string APIVD::keywordName = "APIVD"; +const std::string APIVD::DATA::itemName = "DATA"; -AQANCONL::AQANCONL( ) : ParserKeyword("AQANCONL") -{ - setSizeType(SLASH_TERMINATED); +AQANCONL::AQANCONL() : ParserKeyword("AQANCONL", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SOLUTION"); clearDeckNames(); addDeckName("AQANCONL"); @@ -1013,9 +948,7 @@ const double AQANCONL::AQUIFER_INFLUX_MULT::defaultValue = 1.000000; const std::string AQANCONL::ALLOW::itemName = "ALLOW"; -AQANNC::AQANNC( ) : ParserKeyword("AQANNC") -{ - setSizeType(SLASH_TERMINATED); +AQANNC::AQANNC() : ParserKeyword("AQANNC", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SOLUTION"); clearDeckNames(); addDeckName("AQANNC"); @@ -1052,12 +985,10 @@ const std::string AQANNC::IX::itemName = "IX"; const std::string AQANNC::IY::itemName = "IY"; const std::string AQANNC::IZ::itemName = "IZ"; const std::string AQANNC::AREA::itemName = "AREA"; -const double AQANNC::AREA::defaultValue = 0.000000; +const double AQANNC::AREA::defaultValue = 0; -AQANTRC::AQANTRC( ) : ParserKeyword("AQANTRC") -{ - setSizeType(SLASH_TERMINATED); +AQANTRC::AQANTRC() : ParserKeyword("AQANTRC", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SOLUTION"); clearDeckNames(); addDeckName("AQANTRC"); @@ -1084,9 +1015,7 @@ const std::string AQANTRC::TRACER::itemName = "TRACER"; const std::string AQANTRC::VALUE::itemName = "VALUE"; -AQUALIST::AQUALIST( ) : ParserKeyword("AQUALIST") -{ - setSizeType(SLASH_TERMINATED); +AQUALIST::AQUALIST() : ParserKeyword("AQUALIST", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SOLUTION"); clearDeckNames(); addDeckName("AQUALIST"); @@ -1109,9 +1038,7 @@ const std::string AQUALIST::AQUIFER_LIST::itemName = "AQUIFER_LIST"; const std::string AQUALIST::LIST::itemName = "LIST"; -AQUANCON::AQUANCON( ) : ParserKeyword("AQUANCON") -{ - setSizeType(SLASH_TERMINATED); +AQUANCON::AQUANCON() : ParserKeyword("AQUANCON", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("GRID"); addValidSectionName("SOLUTION"); clearDeckNames(); @@ -1185,11 +1112,9 @@ const std::string AQUANCON::CONNECT_ADJOINING_ACTIVE_CELL::itemName = "CONNECT_A const std::string AQUANCON::CONNECT_ADJOINING_ACTIVE_CELL::defaultValue = "NO"; -AQUCHGAS::AQUCHGAS( ) : ParserKeyword("AQUCHGAS") -{ - setSizeType(SLASH_TERMINATED); - addValidSectionName("SCHEDULE"); +AQUCHGAS::AQUCHGAS() : ParserKeyword("AQUCHGAS", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SOLUTION"); + addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("AQUCHGAS"); { @@ -1236,11 +1161,9 @@ const int AQUCHGAS::TABLE_NUM::defaultValue = 1; const std::string AQUCHGAS::TEMPERATURE::itemName = "TEMPERATURE"; -AQUCHWAT::AQUCHWAT( ) : ParserKeyword("AQUCHWAT") -{ - setSizeType(SLASH_TERMINATED); - addValidSectionName("SCHEDULE"); +AQUCHWAT::AQUCHWAT() : ParserKeyword("AQUCHWAT", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SOLUTION"); + addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("AQUCHWAT"); { @@ -1350,9 +1273,7 @@ const int AQUCHWAT::IMPORT_MAX_MIN_FLOW_RATE::defaultValue = 0; const std::string AQUCHWAT::TEMPERATURE::itemName = "TEMPERATURE"; -AQUCON::AQUCON( ) : ParserKeyword("AQUCON") -{ - setSizeType(SLASH_TERMINATED); +AQUCON::AQUCON() : ParserKeyword("AQUCON", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("AQUCON"); @@ -1392,22 +1313,27 @@ AQUCON::AQUCON( ) : ParserKeyword("AQUCON") } { ParserItem item("TRANS_MULT", ParserItem::itype::DOUBLE); + item.setDefault( double(1.000000) ); record.addItem(item); } { ParserItem item("TRANS_OPTION", ParserItem::itype::INT); + item.setDefault( 0 ); record.addItem(item); } { ParserItem item("ALLOW_INTERNAL_CELLS", ParserItem::itype::STRING); + item.setDefault( std::string("NO") ); record.addItem(item); } { ParserItem item("VEFRAC", ParserItem::itype::DOUBLE); + item.setDefault( double(1.000000) ); record.addItem(item); } { ParserItem item("VEFRACP", ParserItem::itype::DOUBLE); + item.setDefault( double(1.000000) ); record.addItem(item); } addRecord( record ); @@ -1423,19 +1349,25 @@ const std::string AQUCON::K1::itemName = "K1"; const std::string AQUCON::K2::itemName = "K2"; const std::string AQUCON::CONNECT_FACE::itemName = "CONNECT_FACE"; const std::string AQUCON::TRANS_MULT::itemName = "TRANS_MULT"; +const double AQUCON::TRANS_MULT::defaultValue = 1.000000; const std::string AQUCON::TRANS_OPTION::itemName = "TRANS_OPTION"; +const int AQUCON::TRANS_OPTION::defaultValue = 0; const std::string AQUCON::ALLOW_INTERNAL_CELLS::itemName = "ALLOW_INTERNAL_CELLS"; +const std::string AQUCON::ALLOW_INTERNAL_CELLS::defaultValue = "NO"; const std::string AQUCON::VEFRAC::itemName = "VEFRAC"; +const double AQUCON::VEFRAC::defaultValue = 1.000000; const std::string AQUCON::VEFRACP::itemName = "VEFRACP"; +const double AQUCON::VEFRACP::defaultValue = 1.000000; -AQUCT::AQUCT( ) : ParserKeyword("AQUCT") -{ - setSizeType(SLASH_TERMINATED); - addValidSectionName("GRID"); +AQUCT::AQUCT() : ParserKeyword("AQUCT", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("PROPS"); - addValidSectionName("SCHEDULE"); + addValidSectionName("GRID"); addValidSectionName("SOLUTION"); + addValidSectionName("SCHEDULE"); + setRequiredKeywords({ + "AQUDIMS", + }); clearDeckNames(); addDeckName("AQUCT"); { @@ -1527,13 +1459,11 @@ const int AQUCT::TABLE_NUM_WATER_PRESS::defaultValue = 1; const std::string AQUCT::TABLE_NUM_INFLUENCE_FN::itemName = "TABLE_NUM_INFLUENCE_FN"; const int AQUCT::TABLE_NUM_INFLUENCE_FN::defaultValue = 1; const std::string AQUCT::INI_SALT::itemName = "INI_SALT"; -const double AQUCT::INI_SALT::defaultValue = 0.000000; +const double AQUCT::INI_SALT::defaultValue = 0; const std::string AQUCT::TEMP_AQUIFER::itemName = "TEMP_AQUIFER"; -AQUCWFAC::AQUCWFAC( ) : ParserKeyword("AQUCWFAC") -{ - setSizeType(SLASH_TERMINATED); +AQUCWFAC::AQUCWFAC() : ParserKeyword("AQUCWFAC", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("AQUCWFAC"); @@ -1556,14 +1486,12 @@ AQUCWFAC::AQUCWFAC( ) : ParserKeyword("AQUCWFAC") } const std::string AQUCWFAC::keywordName = "AQUCWFAC"; const std::string AQUCWFAC::ADD_TO_DEPTH::itemName = "ADD_TO_DEPTH"; -const double AQUCWFAC::ADD_TO_DEPTH::defaultValue = 0.000000; +const double AQUCWFAC::ADD_TO_DEPTH::defaultValue = 0; const std::string AQUCWFAC::MULTIPLY::itemName = "MULTIPLY"; const double AQUCWFAC::MULTIPLY::defaultValue = 1.000000; -AQUDIMS::AQUDIMS( ) : ParserKeyword("AQUDIMS") -{ - setFixedSize( (size_t) 1); +AQUDIMS::AQUDIMS() : ParserKeyword("AQUDIMS", KeywordSize(1, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("AQUDIMS"); @@ -1631,10 +1559,7 @@ const std::string AQUDIMS::MXAAQL::itemName = "MXAAQL"; const int AQUDIMS::MXAAQL::defaultValue = 0; -AQUFET::AQUFET( ) : ParserKeyword("AQUFET") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("AQUDIMS","NANAQU",0); +AQUFET::AQUFET() : ParserKeyword("AQUFET", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SOLUTION"); clearDeckNames(); addDeckName("AQUFET"); @@ -1721,14 +1646,12 @@ const std::string AQUFET::LOWER_K::itemName = "LOWER_K"; const std::string AQUFET::UPPER_K::itemName = "UPPER_K"; const std::string AQUFET::FACE_INDX::itemName = "FACE_INDX"; const std::string AQUFET::SC_0::itemName = "SC_0"; -const double AQUFET::SC_0::defaultValue = 0.000000; +const double AQUFET::SC_0::defaultValue = 0; -AQUFETP::AQUFETP( ) : ParserKeyword("AQUFETP") -{ - setSizeType(SLASH_TERMINATED); - addValidSectionName("SCHEDULE"); +AQUFETP::AQUFETP() : ParserKeyword("AQUFETP", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SOLUTION"); + addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("AQUFETP"); { @@ -1791,16 +1714,13 @@ const std::string AQUFETP::PI::itemName = "PI"; const std::string AQUFETP::TABLE_NUM_WATER_PRESS::itemName = "TABLE_NUM_WATER_PRESS"; const int AQUFETP::TABLE_NUM_WATER_PRESS::defaultValue = 1; const std::string AQUFETP::SALINITY::itemName = "SALINITY"; -const double AQUFETP::SALINITY::defaultValue = 0.000000; +const double AQUFETP::SALINITY::defaultValue = 0; const std::string AQUFETP::TEMP::itemName = "TEMP"; -AQUFLUX::AQUFLUX( ) : ParserKeyword("AQUFLUX") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("AQUDIMS","NANAQU",0); - addValidSectionName("SCHEDULE"); +AQUFLUX::AQUFLUX() : ParserKeyword("AQUFLUX", KeywordSize("AQUDIMS", "NANAQU", false, 0)) { addValidSectionName("SOLUTION"); + addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("AQUFLUX"); { @@ -1837,22 +1757,20 @@ const std::string AQUFLUX::keywordName = "AQUFLUX"; const std::string AQUFLUX::AQUIFER_ID::itemName = "AQUIFER_ID"; const std::string AQUFLUX::DAT_DEPTH::itemName = "DAT_DEPTH"; const std::string AQUFLUX::SC_0::itemName = "SC_0"; -const double AQUFLUX::SC_0::defaultValue = 0.000000; +const double AQUFLUX::SC_0::defaultValue = 0; const std::string AQUFLUX::TEMP::itemName = "TEMP"; const std::string AQUFLUX::PRESSURE::itemName = "PRESSURE"; -AQUIFER_PROBE_ANALYTIC::AQUIFER_PROBE_ANALYTIC( ) : ParserKeyword("AQUIFER_PROBE_ANALYTIC") -{ - setFixedSize( (size_t) 1); +AQUIFER_PROBE_ANALYTIC::AQUIFER_PROBE_ANALYTIC() : ParserKeyword("AQUIFER_PROBE_ANALYTIC", KeywordSize(1, false)) { addValidSectionName("SUMMARY"); clearDeckNames(); addDeckName("AAQP"); addDeckName("AAQPD"); addDeckName("AAQR"); - addDeckName("AAQRG"); addDeckName("AAQT"); addDeckName("AAQTD"); + addDeckName("AAQRG"); addDeckName("AAQTG"); setMatchRegex("AA.+"); { @@ -1869,9 +1787,25 @@ const std::string AQUIFER_PROBE_ANALYTIC::keywordName = "AQUIFER_PROBE_ANALYTIC" const std::string AQUIFER_PROBE_ANALYTIC::data::itemName = "data"; -AQUIFER_PROBE_NUMERIC::AQUIFER_PROBE_NUMERIC( ) : ParserKeyword("AQUIFER_PROBE_NUMERIC") -{ - setFixedSize( (size_t) 1); +AQUIFER_PROBE_ANALYTIC_NAMED::AQUIFER_PROBE_ANALYTIC_NAMED() : ParserKeyword("AQUIFER_PROBE_ANALYTIC_NAMED", KeywordSize(1, false)) { + addValidSectionName("SUMMARY"); + clearDeckNames(); + setMatchRegex("AL.+"); + { + ParserRecord record; + { + ParserItem item("data", ParserItem::itype::STRING); + item.setSizeType(ParserItem::item_size::ALL); + record.addDataItem(item); + } + addDataRecord( record ); + } +} +const std::string AQUIFER_PROBE_ANALYTIC_NAMED::keywordName = "AQUIFER_PROBE_ANALYTIC_NAMED"; +const std::string AQUIFER_PROBE_ANALYTIC_NAMED::data::itemName = "data"; + + +AQUIFER_PROBE_NUMERIC::AQUIFER_PROBE_NUMERIC() : ParserKeyword("AQUIFER_PROBE_NUMERIC", KeywordSize(1, false)) { addValidSectionName("SUMMARY"); clearDeckNames(); addDeckName("ANQP"); @@ -1892,9 +1826,7 @@ const std::string AQUIFER_PROBE_NUMERIC::keywordName = "AQUIFER_PROBE_NUMERIC"; const std::string AQUIFER_PROBE_NUMERIC::data::itemName = "data"; -AQUNNC::AQUNNC( ) : ParserKeyword("AQUNNC") -{ - setSizeType(SLASH_TERMINATED); +AQUNNC::AQUNNC() : ParserKeyword("AQUNNC", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("AQUNNC"); @@ -1975,7 +1907,7 @@ const std::string AQUNNC::JX::itemName = "JX"; const std::string AQUNNC::JY::itemName = "JY"; const std::string AQUNNC::JZ::itemName = "JZ"; const std::string AQUNNC::TRAN::itemName = "TRAN"; -const double AQUNNC::TRAN::defaultValue = 0.000000; +const double AQUNNC::TRAN::defaultValue = 0; const std::string AQUNNC::IST1::itemName = "IST1"; const std::string AQUNNC::IST2::itemName = "IST2"; const std::string AQUNNC::IPT1::itemName = "IPT1"; @@ -1985,9 +1917,7 @@ const std::string AQUNNC::ZF2::itemName = "ZF2"; const std::string AQUNNC::DIFF::itemName = "DIFF"; -AQUNUM::AQUNUM( ) : ParserKeyword("AQUNUM") -{ - setSizeType(SLASH_TERMINATED); +AQUNUM::AQUNUM() : ParserKeyword("AQUNUM", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("AQUNUM"); @@ -2065,10 +1995,7 @@ const std::string AQUNUM::PVT_TABLE_NUM::itemName = "PVT_TABLE_NUM"; const std::string AQUNUM::SAT_TABLE_NUM::itemName = "SAT_TABLE_NUM"; -AQUTAB::AQUTAB( ) : ParserKeyword("AQUTAB") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("AQUDIMS","NIFTBL",-1); +AQUTAB::AQUTAB() : ParserKeyword("AQUTAB", KeywordSize("AQUDIMS", "NIFTBL", false, -1)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("AQUTAB"); @@ -2088,9 +2015,7 @@ const std::string AQUTAB::keywordName = "AQUTAB"; const std::string AQUTAB::DATA::itemName = "DATA"; -AUTOCOAR::AUTOCOAR( ) : ParserKeyword("AUTOCOAR") -{ - setSizeType(SLASH_TERMINATED); +AUTOCOAR::AUTOCOAR() : ParserKeyword("AUTOCOAR", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("AUTOCOAR"); @@ -2147,9 +2072,7 @@ const std::string AUTOCOAR::NY::itemName = "NY"; const std::string AUTOCOAR::NZ::itemName = "NZ"; -AUTOREF::AUTOREF( ) : ParserKeyword("AUTOREF") -{ - setSizeType(SLASH_TERMINATED); +AUTOREF::AUTOREF() : ParserKeyword("AUTOREF", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("AUTOREF"); @@ -2186,7 +2109,7 @@ const int AUTOREF::NY::defaultValue = 1; const std::string AUTOREF::NZ::itemName = "NZ"; const int AUTOREF::NZ::defaultValue = 1; const std::string AUTOREF::OPTION_TRANS_MULT::itemName = "OPTION_TRANS_MULT"; -const double AUTOREF::OPTION_TRANS_MULT::defaultValue = 0.000000; +const double AUTOREF::OPTION_TRANS_MULT::defaultValue = 0; } diff --git a/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/B.cpp b/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/B.cpp index c35b1b2d0d..5e25a580a3 100644 --- a/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/B.cpp +++ b/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/B.cpp @@ -1,18 +1,17 @@ -#include -#include -#include -#include + +#include +#include +#include +#include -#include +#include namespace Opm { namespace ParserKeywords { -BC::BC( ) : ParserKeyword("BC") -{ - setSizeType(SLASH_TERMINATED); +BC::BC() : ParserKeyword("BC", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SOLUTION"); clearDeckNames(); addDeckName("BC"); @@ -76,13 +75,10 @@ const std::string BC::DIRECTION::itemName = "DIRECTION"; const std::string BC::COMPONENT::itemName = "COMPONENT"; const std::string BC::COMPONENT::defaultValue = "NONE"; const std::string BC::RATE::itemName = "RATE"; -const double BC::RATE::defaultValue = 0.000000; +const double BC::RATE::defaultValue = 0; -BDENSITY::BDENSITY( ) : ParserKeyword("BDENSITY") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTPVT",0); +BDENSITY::BDENSITY() : ParserKeyword("BDENSITY", KeywordSize("TABDIMS", "NTPVT", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("BDENSITY"); @@ -101,10 +97,7 @@ const std::string BDENSITY::keywordName = "BDENSITY"; const std::string BDENSITY::BRINE_DENSITY::itemName = "BRINE_DENSITY"; -BGGI::BGGI( ) : ParserKeyword("BGGI") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTPVT",0); +BGGI::BGGI() : ParserKeyword("BGGI", KeywordSize("TABDIMS", "NTPVT", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("BGGI"); @@ -129,9 +122,7 @@ const std::string BGGI::GAS_PRESSURE::itemName = "GAS_PRESSURE"; const std::string BGGI::DATA::itemName = "DATA"; -BIGMODEL::BIGMODEL( ) : ParserKeyword("BIGMODEL") -{ - setFixedSize( (size_t) 0); +BIGMODEL::BIGMODEL() : ParserKeyword("BIGMODEL", KeywordSize(0, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("BIGMODEL"); @@ -139,9 +130,7 @@ BIGMODEL::BIGMODEL( ) : ParserKeyword("BIGMODEL") const std::string BIGMODEL::keywordName = "BIGMODEL"; -BLACKOIL::BLACKOIL( ) : ParserKeyword("BLACKOIL") -{ - setFixedSize( (size_t) 0); +BLACKOIL::BLACKOIL() : ParserKeyword("BLACKOIL", KeywordSize(0, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("BLACKOIL"); @@ -149,136 +138,137 @@ BLACKOIL::BLACKOIL( ) : ParserKeyword("BLACKOIL") const std::string BLACKOIL::keywordName = "BLACKOIL"; -BLOCK_PROBE::BLOCK_PROBE( ) : ParserKeyword("BLOCK_PROBE") -{ - setSizeType(SLASH_TERMINATED); +BLOCK_PROBE::BLOCK_PROBE() : ParserKeyword("BLOCK_PROBE", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SUMMARY"); clearDeckNames(); - addDeckName("BAPI"); - addDeckName("BCGC"); - addDeckName("BCSC"); - addDeckName("BCTRA_X"); - addDeckName("BDENG"); - addDeckName("BDENO"); - addDeckName("BDENW"); - addDeckName("BESALPLY"); - addDeckName("BESALSUR"); - addDeckName("BEWV_SAL"); - addDeckName("BEWV_SUR"); - addDeckName("BFLOGI"); - addDeckName("BFLOGJ"); - addDeckName("BFLOGK"); - addDeckName("BFLOOI"); - addDeckName("BFLOOJ"); + addDeckName("BVELWK"); addDeckName("BFLOOK"); - addDeckName("BFLOWI"); - addDeckName("BGDEN"); - addDeckName("BGI"); - addDeckName("BGIP"); - addDeckName("BGIPG"); - addDeckName("BGIPL"); - addDeckName("BGKR"); - addDeckName("BGPC"); - addDeckName("BGPR"); - addDeckName("BGPV"); - addDeckName("BGSAT"); - addDeckName("BGSHY"); - addDeckName("BGSTRP"); - addDeckName("BGTPD"); - addDeckName("BGTRP"); - addDeckName("BGVIS"); - addDeckName("BHD"); - addDeckName("BHDF"); - addDeckName("BHDF_X"); - addDeckName("BHD_X"); - addDeckName("BHPV"); - addDeckName("BKRG"); - addDeckName("BKRO"); - addDeckName("BKRW"); - addDeckName("BNIP"); - addDeckName("BNKR"); - addDeckName("BNSAT"); - addDeckName("BODEN"); - addDeckName("BOIP"); - addDeckName("BOIPG"); - addDeckName("BOIPL"); - addDeckName("BOKR"); - addDeckName("BOPV"); + addDeckName("BSOIL"); addDeckName("BOSAT"); + addDeckName("BGIP"); + addDeckName("BVOIL"); + addDeckName("BGKR"); + addDeckName("BOIP"); + addDeckName("BOIPL"); + addDeckName("BGPR"); + addDeckName("BSCN_X"); + addDeckName("BGIPG"); addDeckName("BOVIS"); - addDeckName("BPBUB"); - addDeckName("BPDEW"); - addDeckName("BPERMMOD"); - addDeckName("BPORVMOD"); - addDeckName("BPPC"); - addDeckName("BPPG"); - addDeckName("BPPO"); - addDeckName("BPPW"); - addDeckName("BPR"); - addDeckName("BPR_X"); - addDeckName("BRPV"); - addDeckName("BRS"); + addDeckName("BOIPG"); + addDeckName("BWVIS"); addDeckName("BRSSAT"); - addDeckName("BRTM"); + addDeckName("BPPO"); + addDeckName("BPDEW"); + addDeckName("BDENO"); + addDeckName("BVELOJ"); + addDeckName("BODEN"); + addDeckName("BVELWI"); + addDeckName("BFLOOI"); + addDeckName("BGDEN"); + addDeckName("BVELWJ"); + addDeckName("BFLOOJ"); + addDeckName("BFLOWI"); + addDeckName("LBHDF_X"); + addDeckName("BVELOI"); + addDeckName("BVELOK"); + addDeckName("BPPC"); + addDeckName("BTRADCAT"); + addDeckName("BFLOGK"); + addDeckName("BWSAT"); + addDeckName("BSWAT"); + addDeckName("BGSAT"); + addDeckName("BPR"); + addDeckName("BWIP"); + addDeckName("BEWV_SAL"); + addDeckName("BPPW"); + addDeckName("BWKR"); + addDeckName("BVWAT"); + addDeckName("BDENW"); + addDeckName("BKRO"); + addDeckName("BVELGJ"); + addDeckName("BWDEN"); + addDeckName("BSGAS"); + addDeckName("BGIPL"); + addDeckName("BPPG"); + addDeckName("BKROG"); + addDeckName("BVGAS"); + addDeckName("BGVIS"); + addDeckName("BDENG"); + addDeckName("BFLOGI"); + addDeckName("BKRG"); + addDeckName("BFLOGJ"); + addDeckName("BPBUB"); + addDeckName("BVELGI"); + addDeckName("BRS"); + addDeckName("BVELGK"); + addDeckName("BWPR"); addDeckName("BRV"); addDeckName("BRVSAT"); - addDeckName("BSCN"); - addDeckName("BSCN_X"); - addDeckName("BSGAS"); - addDeckName("BSIP"); - addDeckName("BSOIL"); addDeckName("BSTATE"); - addDeckName("BSWAT"); - addDeckName("BTADSALK"); - addDeckName("BTADSFOA"); - addDeckName("BTADSUR"); - addDeckName("BTCASUR"); - addDeckName("BTCNFALK"); - addDeckName("BTCNFANI"); - addDeckName("BTCNFCAT"); - addDeckName("BTCNFFOA"); - addDeckName("BTCNFHEA"); - addDeckName("BTCNFSUR"); - addDeckName("BTCNMFOA"); - addDeckName("BTDCYFOA"); - addDeckName("BTHLFFOA"); - addDeckName("BTIPTFOA"); - addDeckName("BTIPTHEA"); - addDeckName("BTIPTSUR"); - addDeckName("BTMOBFOA"); - addDeckName("BTPADALK"); - addDeckName("BTRADCAT"); - addDeckName("BTSADALK"); - addDeckName("BTSADCAT"); - addDeckName("BTSTMALK"); - addDeckName("BTSTSUR"); - addDeckName("BVELGI"); - addDeckName("BVELGJ"); - addDeckName("BVELGK"); - addDeckName("BVELOI"); - addDeckName("BVELOJ"); - addDeckName("BVELOK"); - addDeckName("BVELWI"); - addDeckName("BVELWJ"); - addDeckName("BVELWK"); - addDeckName("BVGAS"); - addDeckName("BVOIL"); - addDeckName("BVWAT"); - addDeckName("BWDEN"); - addDeckName("BWIP"); - addDeckName("BWKR"); + addDeckName("BOKR"); + addDeckName("BKROW"); + addDeckName("BKRW"); addDeckName("BWPC"); - addDeckName("BWPR"); - addDeckName("BWPV"); - addDeckName("BWSAT"); + addDeckName("BGPC"); + addDeckName("BGTRP"); + addDeckName("BGTPD"); + addDeckName("BOPV"); + addDeckName("BGSHY"); + addDeckName("BGSTRP"); addDeckName("BWSHY"); addDeckName("BWSMA"); - addDeckName("BWVIS"); - addDeckName("LBCTRA_X"); - addDeckName("LBHDF_X"); - addDeckName("LBHD_X"); + addDeckName("BHD"); + addDeckName("BHDF"); + addDeckName("BPR_X"); + addDeckName("BHD_X"); + addDeckName("BHDF_X"); + addDeckName("BCTRA_X"); addDeckName("LBPR_X"); + addDeckName("LBHD_X"); addDeckName("LBSCN_X"); + addDeckName("LBCTRA_X"); + addDeckName("BRPV"); + addDeckName("BWPV"); + addDeckName("BGPV"); + addDeckName("BHPV"); + addDeckName("BRTM"); + addDeckName("BPORVMOD"); + addDeckName("BPERMMOD"); + addDeckName("BSCN"); + addDeckName("BAPI"); + addDeckName("BSIP"); + addDeckName("BCAD"); + addDeckName("BTCNFANI"); + addDeckName("BTCNFCAT"); + addDeckName("BTCASUR"); + addDeckName("BTSADCAT"); + addDeckName("BESALSUR"); + addDeckName("BESALPLY"); + addDeckName("BTCNFHEA"); + addDeckName("BTIPTHEA"); + addDeckName("BCGC"); + addDeckName("BCSC"); + addDeckName("BTCNFFOA"); + addDeckName("BTCNMFOA"); + addDeckName("BTIPTFOA"); + addDeckName("BTADSFOA"); + addDeckName("BTDCYFOA"); + addDeckName("BTMOBFOA"); + addDeckName("BTHLFFOA"); + addDeckName("BGI"); + addDeckName("BNSAT"); + addDeckName("BNIP"); + addDeckName("BNKR"); + addDeckName("BTPADALK"); + addDeckName("BTCNFSUR"); + addDeckName("BTIPTSUR"); + addDeckName("BTADSUR"); + addDeckName("BTSTSUR"); + addDeckName("BEWV_SUR"); + addDeckName("BTCNFALK"); + addDeckName("BTADSALK"); + addDeckName("BTSTMALK"); + addDeckName("BTSADALK"); setMatchRegex("BU.+|BTIPF.+|BTIPS.+|BTCNF.+|BTCNS.+|BTCN[1-9][0-9]*.+|BTIPT.+|BTIPF.+|BTIPS.+|BTIP[1-9][0-9]*.+|BTADS.+|BTDCY"); { ParserRecord record; @@ -303,9 +293,7 @@ const std::string BLOCK_PROBE::J::itemName = "J"; const std::string BLOCK_PROBE::K::itemName = "K"; -BLOCK_PROBE300::BLOCK_PROBE300( ) : ParserKeyword("BLOCK_PROBE300") -{ - setSizeType(SLASH_TERMINATED); +BLOCK_PROBE300::BLOCK_PROBE300() : ParserKeyword("BLOCK_PROBE300", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SUMMARY"); clearDeckNames(); addDeckName("BTEMP"); @@ -332,10 +320,7 @@ const std::string BLOCK_PROBE300::J::itemName = "J"; const std::string BLOCK_PROBE300::K::itemName = "K"; -BOGI::BOGI( ) : ParserKeyword("BOGI") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTPVT",0); +BOGI::BOGI() : ParserKeyword("BOGI", KeywordSize("TABDIMS", "NTPVT", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("BOGI"); @@ -360,14 +345,12 @@ const std::string BOGI::OIL_PRESSURE::itemName = "OIL_PRESSURE"; const std::string BOGI::DATA::itemName = "DATA"; -BOUNDARY::BOUNDARY( ) : ParserKeyword("BOUNDARY") -{ - setFixedSize( (size_t) 1); - addValidSectionName("EDIT"); +BOUNDARY::BOUNDARY() : ParserKeyword("BOUNDARY", KeywordSize(1, false)) { addValidSectionName("GRID"); + addValidSectionName("EDIT"); addValidSectionName("REGIONS"); - addValidSectionName("SCHEDULE"); addValidSectionName("SOLUTION"); + addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("BOUNDARY"); { @@ -422,15 +405,13 @@ const std::string BOUNDARY::DUAL_PORO_FLAG::itemName = "DUAL_PORO_FLAG"; const std::string BOUNDARY::DUAL_PORO_FLAG::defaultValue = "BOTH"; -BOX::BOX( ) : ParserKeyword("BOX") -{ - setFixedSize( (size_t) 1); +BOX::BOX() : ParserKeyword("BOX", KeywordSize(1, false)) { + addValidSectionName("PROPS"); addValidSectionName("EDIT"); addValidSectionName("GRID"); - addValidSectionName("PROPS"); addValidSectionName("REGIONS"); - addValidSectionName("SCHEDULE"); addValidSectionName("SOLUTION"); + addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("BOX"); { @@ -471,9 +452,7 @@ const std::string BOX::K1::itemName = "K1"; const std::string BOX::K2::itemName = "K2"; -BPARA::BPARA( ) : ParserKeyword("BPARA") -{ - setFixedSize( (size_t) 0); +BPARA::BPARA() : ParserKeyword("BPARA", KeywordSize(0, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("BPARA"); @@ -481,9 +460,7 @@ BPARA::BPARA( ) : ParserKeyword("BPARA") const std::string BPARA::keywordName = "BPARA"; -BPIDIMS::BPIDIMS( ) : ParserKeyword("BPIDIMS") -{ - setFixedSize( (size_t) 1); +BPIDIMS::BPIDIMS() : ParserKeyword("BPIDIMS", KeywordSize(1, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("BPIDIMS"); @@ -509,9 +486,7 @@ const std::string BPIDIMS::MXNLBI::itemName = "MXNLBI"; const int BPIDIMS::MXNLBI::defaultValue = 1; -BRANPROP::BRANPROP( ) : ParserKeyword("BRANPROP") -{ - setSizeType(SLASH_TERMINATED); +BRANPROP::BRANPROP() : ParserKeyword("BRANPROP", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("BRANPROP"); @@ -547,24 +522,30 @@ const std::string BRANPROP::DOWNTREE_NODE::itemName = "DOWNTREE_NODE"; const std::string BRANPROP::UPTREE_NODE::itemName = "UPTREE_NODE"; const std::string BRANPROP::VFP_TABLE::itemName = "VFP_TABLE"; const std::string BRANPROP::ALQ::itemName = "ALQ"; -const double BRANPROP::ALQ::defaultValue = 0.000000; +const double BRANPROP::ALQ::defaultValue = 0; const std::string BRANPROP::ALQ_SURFACE_DENSITY::itemName = "ALQ_SURFACE_DENSITY"; const std::string BRANPROP::ALQ_SURFACE_DENSITY::defaultValue = "NONE"; -BRINE::BRINE( ) : ParserKeyword("BRINE") -{ - setFixedSize( (size_t) 0); +BRINE::BRINE() : ParserKeyword("BRINE", KeywordSize(0, 1, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("BRINE"); + { + ParserRecord record; + { + ParserItem item("SALTS", ParserItem::itype::STRING); + item.setSizeType(ParserItem::item_size::ALL); + record.addItem(item); + } + addRecord( record ); + } } const std::string BRINE::keywordName = "BRINE"; +const std::string BRINE::SALTS::itemName = "SALTS"; -BTOBALFA::BTOBALFA( ) : ParserKeyword("BTOBALFA") -{ - setFixedSize( (size_t) 1); +BTOBALFA::BTOBALFA() : ParserKeyword("BTOBALFA", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("BTOBALFA"); @@ -582,9 +563,7 @@ const std::string BTOBALFA::keywordName = "BTOBALFA"; const std::string BTOBALFA::VALUE::itemName = "VALUE"; -BTOBALFV::BTOBALFV( ) : ParserKeyword("BTOBALFV") -{ - setFixedSize( (size_t) 1); +BTOBALFV::BTOBALFV() : ParserKeyword("BTOBALFV", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("BTOBALFV"); diff --git a/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/C.cpp b/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/C.cpp index 3a5a68c2f5..7772a2420c 100644 --- a/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/C.cpp +++ b/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/C.cpp @@ -1,18 +1,17 @@ -#include -#include -#include -#include + +#include +#include +#include +#include -#include +#include namespace Opm { namespace ParserKeywords { -CALTRAC::CALTRAC( ) : ParserKeyword("CALTRAC") -{ - setFixedSize( (size_t) 1); +CALTRAC::CALTRAC() : ParserKeyword("CALTRAC", KeywordSize(1, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("CALTRAC"); @@ -29,9 +28,7 @@ const std::string CALTRAC::keywordName = "CALTRAC"; const std::string CALTRAC::IX1::itemName = "IX1"; -CARFIN::CARFIN( ) : ParserKeyword("CARFIN") -{ - setFixedSize( (size_t) 1); +CARFIN::CARFIN() : ParserKeyword("CARFIN", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("CARFIN"); @@ -105,9 +102,7 @@ const std::string CARFIN::PARENT::itemName = "PARENT"; const std::string CARFIN::PARENT::defaultValue = "GLOBAL"; -CART::CART( ) : ParserKeyword("CART") -{ - setFixedSize( (size_t) 0); +CART::CART() : ParserKeyword("CART", KeywordSize(0, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("CART"); @@ -115,9 +110,7 @@ CART::CART( ) : ParserKeyword("CART") const std::string CART::keywordName = "CART"; -CBMOPTS::CBMOPTS( ) : ParserKeyword("CBMOPTS") -{ - setFixedSize( (size_t) 1); +CBMOPTS::CBMOPTS() : ParserKeyword("CBMOPTS", KeywordSize(1, false)) { addValidSectionName("SRUNSPEC"); clearDeckNames(); addDeckName("CBMOPTS"); @@ -189,12 +182,10 @@ const std::string CBMOPTS::APPLICATION::defaultValue = "PMPVK"; const std::string CBMOPTS::PRESSURE_CHOP::itemName = "PRESSURE_CHOP"; const std::string CBMOPTS::PRESSURE_CHOP::defaultValue = "NOPMPCHP"; const std::string CBMOPTS::MIN_PORE_VOLUME::itemName = "MIN_PORE_VOLUME"; -const double CBMOPTS::MIN_PORE_VOLUME::defaultValue = 0.000005; +const double CBMOPTS::MIN_PORE_VOLUME::defaultValue = 5e-06; -CECON::CECON( ) : ParserKeyword("CECON") -{ - setSizeType(SLASH_TERMINATED); +CECON::CECON() : ParserKeyword("CECON", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("CECON"); @@ -278,11 +269,11 @@ const int CECON::K1::defaultValue = 0; const std::string CECON::K2::itemName = "K2"; const int CECON::K2::defaultValue = 0; const std::string CECON::MAX_WCUT::itemName = "MAX_WCUT"; -const double CECON::MAX_WCUT::defaultValue = 0.000000; +const double CECON::MAX_WCUT::defaultValue = 0; const std::string CECON::MAX_GOR::itemName = "MAX_GOR"; -const double CECON::MAX_GOR::defaultValue = 0.000000; +const double CECON::MAX_GOR::defaultValue = 0; const std::string CECON::MAX_WGR::itemName = "MAX_WGR"; -const double CECON::MAX_WGR::defaultValue = 0.000000; +const double CECON::MAX_WGR::defaultValue = 0; const std::string CECON::WORKOVER_PROCEDURE::itemName = "WORKOVER_PROCEDURE"; const std::string CECON::WORKOVER_PROCEDURE::defaultValue = "CON"; const std::string CECON::CHECK_STOPPED::itemName = "CHECK_STOPPED"; @@ -295,9 +286,7 @@ const std::string CECON::FOLLOW_ON_WELL::itemName = "FOLLOW_ON_WELL"; const std::string CECON::FOLLOW_ON_WELL::defaultValue = ""; -CECONT::CECONT( ) : ParserKeyword("CECONT") -{ - setSizeType(DOUBLE_SLASH_TERMINATED); +CECONT::CECONT() : ParserKeyword("CECONT", KeywordSize(DOUBLE_SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("CECONT"); @@ -408,9 +397,7 @@ const std::string CECONT::MAX_SOL_TRACER_CONC::itemName = "MAX_SOL_TRACER_CONC"; const double CECONT::MAX_SOL_TRACER_CONC::defaultValue = 99999999999999996973312221251036165947450327545502362648241750950346848435554075534196338404706251868027512415973882408182135734368278484639385041047239877871023591066789981811181813306167128854888448.000000; -CIRCLE::CIRCLE( ) : ParserKeyword("CIRCLE") -{ - setFixedSize( (size_t) 0); +CIRCLE::CIRCLE() : ParserKeyword("CIRCLE", KeywordSize(0, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("CIRCLE"); @@ -418,9 +405,23 @@ CIRCLE::CIRCLE( ) : ParserKeyword("CIRCLE") const std::string CIRCLE::keywordName = "CIRCLE"; -COAL::COAL( ) : ParserKeyword("COAL") -{ - setFixedSize( (size_t) 0); +CO2STOR::CO2STOR() : ParserKeyword("CO2STOR", KeywordSize(0, false)) { + addValidSectionName("RUNSPEC"); + clearDeckNames(); + addDeckName("CO2STOR"); +} +const std::string CO2STOR::keywordName = "CO2STOR"; + + +CO2STORE::CO2STORE() : ParserKeyword("CO2STORE", KeywordSize(0, false)) { + addValidSectionName("RUNSPEC"); + clearDeckNames(); + addDeckName("CO2STORE"); +} +const std::string CO2STORE::keywordName = "CO2STORE"; + + +COAL::COAL() : ParserKeyword("COAL", KeywordSize(0, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("COAL"); @@ -428,10 +429,7 @@ COAL::COAL( ) : ParserKeyword("COAL") const std::string COAL::keywordName = "COAL"; -COALADS::COALADS( ) : ParserKeyword("COALADS") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("REGDIMS","NTCREG",0); +COALADS::COALADS() : ParserKeyword("COALADS", KeywordSize("REGDIMS", "NTCREG", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("COALADS"); @@ -452,9 +450,7 @@ const std::string COALADS::keywordName = "COALADS"; const std::string COALADS::DATA::itemName = "DATA"; -COALNUM::COALNUM( ) : ParserKeyword("COALNUM") -{ - setFixedSize( (size_t) 1); +COALNUM::COALNUM() : ParserKeyword("COALNUM", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("COALNUM"); @@ -472,10 +468,7 @@ const std::string COALNUM::keywordName = "COALNUM"; const std::string COALNUM::data::itemName = "data"; -COALPP::COALPP( ) : ParserKeyword("COALPP") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("REGDIMS","NTCREG",0); +COALPP::COALPP() : ParserKeyword("COALPP", KeywordSize("REGDIMS", "NTCREG", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("COALPP"); @@ -496,9 +489,7 @@ const std::string COALPP::keywordName = "COALPP"; const std::string COALPP::DATA::itemName = "DATA"; -COARSEN::COARSEN( ) : ParserKeyword("COARSEN") -{ - setFixedSize( (size_t) 1); +COARSEN::COARSEN() : ParserKeyword("COARSEN", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("COARSEN"); @@ -555,9 +546,7 @@ const std::string COARSEN::NY::itemName = "NY"; const std::string COARSEN::NZ::itemName = "NZ"; -COLLAPSE::COLLAPSE( ) : ParserKeyword("COLLAPSE") -{ - setSizeType(SLASH_TERMINATED); +COLLAPSE::COLLAPSE() : ParserKeyword("COLLAPSE", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("COLLAPSE"); @@ -576,17 +565,15 @@ const std::string COLLAPSE::VALUE::itemName = "VALUE"; const int COLLAPSE::VALUE::defaultValue = 1; -COLUMNS::COLUMNS( ) : ParserKeyword("COLUMNS") -{ - setFixedSize( (size_t) 1); +COLUMNS::COLUMNS() : ParserKeyword("COLUMNS", KeywordSize(1, false)) { + addValidSectionName("RUNSPEC"); + addValidSectionName("PROPS"); addValidSectionName("EDIT"); addValidSectionName("GRID"); - addValidSectionName("PROPS"); addValidSectionName("REGIONS"); - addValidSectionName("RUNSPEC"); - addValidSectionName("SCHEDULE"); addValidSectionName("SOLUTION"); addValidSectionName("SUMMARY"); + addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("COLUMNS"); { @@ -611,9 +598,7 @@ const std::string COLUMNS::RIGHT_MARGIN::itemName = "RIGHT_MARGIN"; const int COLUMNS::RIGHT_MARGIN::defaultValue = 132; -COMPDAT::COMPDAT( ) : ParserKeyword("COMPDAT") -{ - setSizeType(SLASH_TERMINATED); +COMPDAT::COMPDAT() : ParserKeyword("COMPDAT", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("COMPDAT"); @@ -708,20 +693,18 @@ const std::string COMPDAT::DIAMETER::itemName = "DIAMETER"; const std::string COMPDAT::Kh::itemName = "Kh"; const double COMPDAT::Kh::defaultValue = -1.000000; const std::string COMPDAT::SKIN::itemName = "SKIN"; -const double COMPDAT::SKIN::defaultValue = 0.000000; +const double COMPDAT::SKIN::defaultValue = 0; const std::string COMPDAT::D_FACTOR::itemName = "D_FACTOR"; const std::string COMPDAT::DIR::itemName = "DIR"; const std::string COMPDAT::DIR::defaultValue = "Z"; const std::string COMPDAT::PR::itemName = "PR"; -COMPDATX::COMPDATX( ) : ParserKeyword("COMPDATX") -{ - setSizeType(SLASH_TERMINATED); +COMPDATX::COMPDATX() : ParserKeyword("COMPDATX", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); - addDeckName("COMPDATL"); addDeckName("COMPDATM"); + addDeckName("COMPDATL"); { ParserRecord record; { @@ -818,16 +801,14 @@ const std::string COMPDATX::DIAMETER::itemName = "DIAMETER"; const std::string COMPDATX::Kh::itemName = "Kh"; const double COMPDATX::Kh::defaultValue = -1.000000; const std::string COMPDATX::SKIN::itemName = "SKIN"; -const double COMPDATX::SKIN::defaultValue = 0.000000; +const double COMPDATX::SKIN::defaultValue = 0; const std::string COMPDATX::D_FACTOR::itemName = "D_FACTOR"; const std::string COMPDATX::DIR::itemName = "DIR"; const std::string COMPDATX::DIR::defaultValue = "Z"; const std::string COMPDATX::PR::itemName = "PR"; -COMPFLSH::COMPFLSH( ) : ParserKeyword("COMPFLSH") -{ - setSizeType(SLASH_TERMINATED); +COMPFLSH::COMPFLSH() : ParserKeyword("COMPFLSH", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("COMPFLSH"); @@ -895,9 +876,7 @@ const std::string COMPFLSH::FLASH_PVTNUM::itemName = "FLASH_PVTNUM"; const int COMPFLSH::FLASH_PVTNUM::defaultValue = 0; -COMPIMB::COMPIMB( ) : ParserKeyword("COMPIMB") -{ - setSizeType(SLASH_TERMINATED); +COMPIMB::COMPIMB() : ParserKeyword("COMPIMB", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("COMPIMB"); @@ -945,9 +924,7 @@ const std::string COMPIMB::SAT_TABLE::itemName = "SAT_TABLE"; const int COMPIMB::SAT_TABLE::defaultValue = 0; -COMPINJK::COMPINJK( ) : ParserKeyword("COMPINJK") -{ - setSizeType(SLASH_TERMINATED); +COMPINJK::COMPINJK() : ParserKeyword("COMPINJK", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("COMPINJK"); @@ -997,12 +974,10 @@ const int COMPINJK::K_UPPER::defaultValue = 0; const std::string COMPINJK::K_LOWER::itemName = "K_LOWER"; const int COMPINJK::K_LOWER::defaultValue = 0; const std::string COMPINJK::REL_PERM::itemName = "REL_PERM"; -const double COMPINJK::REL_PERM::defaultValue = 0.000000; +const double COMPINJK::REL_PERM::defaultValue = 0; -COMPLMPL::COMPLMPL( ) : ParserKeyword("COMPLMPL") -{ - setSizeType(SLASH_TERMINATED); +COMPLMPL::COMPLMPL() : ParserKeyword("COMPLMPL", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("COMPLMPL"); @@ -1059,9 +1034,7 @@ const int COMPLMPL::LOWER_K::defaultValue = 0; const std::string COMPLMPL::COMPLETION_NUMBER::itemName = "COMPLETION_NUMBER"; -COMPLUMP::COMPLUMP( ) : ParserKeyword("COMPLUMP") -{ - setSizeType(SLASH_TERMINATED); +COMPLUMP::COMPLUMP() : ParserKeyword("COMPLUMP", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("COMPLUMP"); @@ -1073,18 +1046,22 @@ COMPLUMP::COMPLUMP( ) : ParserKeyword("COMPLUMP") } { ParserItem item("I", ParserItem::itype::INT); + item.setDefault( 0 ); record.addItem(item); } { ParserItem item("J", ParserItem::itype::INT); + item.setDefault( 0 ); record.addItem(item); } { ParserItem item("K1", ParserItem::itype::INT); + item.setDefault( 0 ); record.addItem(item); } { ParserItem item("K2", ParserItem::itype::INT); + item.setDefault( 0 ); record.addItem(item); } { @@ -1097,15 +1074,17 @@ COMPLUMP::COMPLUMP( ) : ParserKeyword("COMPLUMP") const std::string COMPLUMP::keywordName = "COMPLUMP"; const std::string COMPLUMP::WELL::itemName = "WELL"; const std::string COMPLUMP::I::itemName = "I"; +const int COMPLUMP::I::defaultValue = 0; const std::string COMPLUMP::J::itemName = "J"; +const int COMPLUMP::J::defaultValue = 0; const std::string COMPLUMP::K1::itemName = "K1"; +const int COMPLUMP::K1::defaultValue = 0; const std::string COMPLUMP::K2::itemName = "K2"; +const int COMPLUMP::K2::defaultValue = 0; const std::string COMPLUMP::N::itemName = "N"; -COMPOFF::COMPOFF( ) : ParserKeyword("COMPOFF") -{ - setFixedSize( (size_t) 0); +COMPOFF::COMPOFF() : ParserKeyword("COMPOFF", KeywordSize(0, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("COMPOFF"); @@ -1113,9 +1092,7 @@ COMPOFF::COMPOFF( ) : ParserKeyword("COMPOFF") const std::string COMPOFF::keywordName = "COMPOFF"; -COMPORD::COMPORD( ) : ParserKeyword("COMPORD") -{ - setSizeType(SLASH_TERMINATED); +COMPORD::COMPORD() : ParserKeyword("COMPORD", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("COMPORD"); @@ -1139,9 +1116,7 @@ const std::string COMPORD::ORDER_TYPE::itemName = "ORDER_TYPE"; const std::string COMPORD::ORDER_TYPE::defaultValue = "TRACK"; -COMPRIV::COMPRIV( ) : ParserKeyword("COMPRIV") -{ - setSizeType(SLASH_TERMINATED); +COMPRIV::COMPRIV() : ParserKeyword("COMPRIV", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("COMPRIV"); @@ -1173,9 +1148,7 @@ const std::string COMPRIV::J::itemName = "J"; const std::string COMPRIV::K::itemName = "K"; -COMPRP::COMPRP( ) : ParserKeyword("COMPRP") -{ - setSizeType(SLASH_TERMINATED); +COMPRP::COMPRP() : ParserKeyword("COMPRP", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("COMPRP"); @@ -1249,9 +1222,7 @@ const std::string COMPRP::SGMIN::itemName = "SGMIN"; const std::string COMPRP::SGMAX::itemName = "SGMAX"; -COMPRPL::COMPRPL( ) : ParserKeyword("COMPRPL") -{ - setSizeType(SLASH_TERMINATED); +COMPRPL::COMPRPL() : ParserKeyword("COMPRPL", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("COMPRPL"); @@ -1330,9 +1301,7 @@ const std::string COMPRPL::SGMIN::itemName = "SGMIN"; const std::string COMPRPL::SGMAX::itemName = "SGMAX"; -COMPS::COMPS( ) : ParserKeyword("COMPS") -{ - setFixedSize( (size_t) 1); +COMPS::COMPS() : ParserKeyword("COMPS", KeywordSize(1, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("COMPS"); @@ -1349,9 +1318,7 @@ const std::string COMPS::keywordName = "COMPS"; const std::string COMPS::NUM_COMPS::itemName = "NUM_COMPS"; -COMPSEGL::COMPSEGL( ) : ParserKeyword("COMPSEGL") -{ - setSizeType(SLASH_TERMINATED); +COMPSEGL::COMPSEGL() : ParserKeyword("COMPSEGL", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("COMPSEGL"); @@ -1433,14 +1400,12 @@ const std::string COMPSEGL::DISTANCE_END::itemName = "DISTANCE_END"; const std::string COMPSEGL::DIRECTION::itemName = "DIRECTION"; const std::string COMPSEGL::END_IJK::itemName = "END_IJK"; const std::string COMPSEGL::CENTER_DEPTH::itemName = "CENTER_DEPTH"; -const double COMPSEGL::CENTER_DEPTH::defaultValue = 0.000000; +const double COMPSEGL::CENTER_DEPTH::defaultValue = 0; const std::string COMPSEGL::THERMAL_LENGTH::itemName = "THERMAL_LENGTH"; const std::string COMPSEGL::SEGMENT_NUMBER::itemName = "SEGMENT_NUMBER"; -COMPSEGS::COMPSEGS( ) : ParserKeyword("COMPSEGS") -{ - setSizeType(SLASH_TERMINATED); +COMPSEGS::COMPSEGS() : ParserKeyword("COMPSEGS", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("COMPSEGS"); @@ -1517,14 +1482,12 @@ const std::string COMPSEGS::DISTANCE_END::itemName = "DISTANCE_END"; const std::string COMPSEGS::DIRECTION::itemName = "DIRECTION"; const std::string COMPSEGS::END_IJK::itemName = "END_IJK"; const std::string COMPSEGS::CENTER_DEPTH::itemName = "CENTER_DEPTH"; -const double COMPSEGS::CENTER_DEPTH::defaultValue = 0.000000; +const double COMPSEGS::CENTER_DEPTH::defaultValue = 0; const std::string COMPSEGS::THERMAL_LENGTH::itemName = "THERMAL_LENGTH"; const std::string COMPSEGS::SEGMENT_NUMBER::itemName = "SEGMENT_NUMBER"; -COMPVE::COMPVE( ) : ParserKeyword("COMPVE") -{ - setSizeType(SLASH_TERMINATED); +COMPVE::COMPVE() : ParserKeyword("COMPVE", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("COMPVE"); @@ -1613,14 +1576,12 @@ const std::string COMPVE::DBOT::itemName = "DBOT"; const std::string COMPVE::FLAG::itemName = "FLAG"; const std::string COMPVE::FLAG::defaultValue = "NO"; const std::string COMPVE::S_D::itemName = "S_D"; -const double COMPVE::S_D::defaultValue = 0.000000; +const double COMPVE::S_D::defaultValue = 0; const std::string COMPVE::GTOP::itemName = "GTOP"; const std::string COMPVE::GBOT::itemName = "GBOT"; -COMPVEL::COMPVEL( ) : ParserKeyword("COMPVEL") -{ - setSizeType(SLASH_TERMINATED); +COMPVEL::COMPVEL() : ParserKeyword("COMPVEL", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("COMPVEL"); @@ -1714,129 +1675,128 @@ const std::string COMPVEL::DBOT::itemName = "DBOT"; const std::string COMPVEL::FLAG::itemName = "FLAG"; const std::string COMPVEL::FLAG::defaultValue = "NO"; const std::string COMPVEL::S_D::itemName = "S_D"; -const double COMPVEL::S_D::defaultValue = 0.000000; +const double COMPVEL::S_D::defaultValue = 0; const std::string COMPVEL::GTOP::itemName = "GTOP"; const std::string COMPVEL::GBOT::itemName = "GBOT"; -CONNECTION_PROBE::CONNECTION_PROBE( ) : ParserKeyword("CONNECTION_PROBE") -{ - setSizeType(SLASH_TERMINATED); +CONNECTION_PROBE::CONNECTION_PROBE() : ParserKeyword("CONNECTION_PROBE", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SUMMARY"); clearDeckNames(); - addDeckName("CAPI"); - addDeckName("CCFR"); - addDeckName("CCIC"); - addDeckName("CCIR"); - addDeckName("CCIT"); - addDeckName("CCPC"); - addDeckName("CCPT"); - addDeckName("CDBF"); - addDeckName("CDFAC"); - addDeckName("CDSF"); - addDeckName("CDSM"); - addDeckName("CDSML"); - addDeckName("CGFR"); - addDeckName("CGFRF"); - addDeckName("CGFRL"); - addDeckName("CGFRS"); - addDeckName("CGFRU"); + addDeckName("COPT"); + addDeckName("COPRL"); + addDeckName("COFR"); + addDeckName("CGPRL"); + addDeckName("COFRF"); + addDeckName("CVPT"); addDeckName("CGIR"); - addDeckName("CGIRL"); + addDeckName("COFRS"); + addDeckName("CWPTL"); + addDeckName("CWFRL"); + addDeckName("COPR"); + addDeckName("COFRL"); + addDeckName("CGPR"); + addDeckName("CVPR"); + addDeckName("CDSML"); addDeckName("CGIT"); + addDeckName("COFRU"); + addDeckName("COPTL"); + addDeckName("COPTF"); + addDeckName("CWCT"); + addDeckName("COPTS"); + addDeckName("CLFRL"); + addDeckName("COIT"); + addDeckName("CWFRU"); + addDeckName("COITL"); + addDeckName("COPP"); + addDeckName("COPI"); + addDeckName("CWPT"); + addDeckName("CWFR"); + addDeckName("CWPRL"); + addDeckName("CWPR"); + addDeckName("CWIR"); + addDeckName("CWIT"); + addDeckName("CWIRL"); + addDeckName("CWITL"); + addDeckName("CSIC"); + addDeckName("CWPP"); + addDeckName("CWPI"); + addDeckName("CGFR"); + addDeckName("CVITL"); + addDeckName("CGFRF"); + addDeckName("CGPP"); + addDeckName("CVFRL"); + addDeckName("WGIRL"); + addDeckName("CGFRS"); + addDeckName("CGFRL"); + addDeckName("CDSM"); + addDeckName("CGFRU"); + addDeckName("CTITALK"); + addDeckName("CGPT"); + addDeckName("CGPTL"); + addDeckName("CGPTF"); + addDeckName("CGPTS"); + addDeckName("CCIR"); + addDeckName("CTPTSUR"); + addDeckName("CVPTL"); + addDeckName("CGIRL"); + addDeckName("CGQ"); addDeckName("CGITL"); - addDeckName("CGLR"); - addDeckName("CGLRL"); + addDeckName("WGITL"); + addDeckName("CGPI"); + addDeckName("CDBF"); + addDeckName("CLFR"); + addDeckName("CLPT"); + addDeckName("CCIT"); + addDeckName("CAPI"); + addDeckName("CLPTL"); + addDeckName("CVFR"); + addDeckName("CVIRL"); + addDeckName("CVIR"); + addDeckName("CVIT"); + addDeckName("LCGFRU"); + addDeckName("CWCTL"); addDeckName("CGOR"); addDeckName("CGORL"); - addDeckName("CGPI"); - addDeckName("CGPP"); - addDeckName("CGPR"); - addDeckName("CGPRL"); - addDeckName("CGPT"); - addDeckName("CGPTF"); - addDeckName("CGPTL"); - addDeckName("CGPTS"); - addDeckName("CGQ"); - addDeckName("CLFR"); - addDeckName("CLFRL"); - addDeckName("CLPT"); - addDeckName("CLPTL"); - addDeckName("CNFR"); - addDeckName("CNIT"); - addDeckName("CNPT"); - addDeckName("COFR"); - addDeckName("COFRF"); - addDeckName("COFRL"); - addDeckName("COFRS"); - addDeckName("COFRU"); addDeckName("COGR"); addDeckName("COGRL"); - addDeckName("COIT"); - addDeckName("COITL"); - addDeckName("COPI"); - addDeckName("COPP"); - addDeckName("COPR"); - addDeckName("COPRL"); - addDeckName("COPT"); - addDeckName("COPTF"); - addDeckName("COPTL"); - addDeckName("COPTS"); + addDeckName("CWGR"); + addDeckName("CWGRL"); + addDeckName("CSPR"); + addDeckName("CGLR"); + addDeckName("CSFR"); + addDeckName("CGLRL"); addDeckName("CPI"); addDeckName("CPRL"); - addDeckName("CSFR"); - addDeckName("CSIC"); + addDeckName("CTFAC"); + addDeckName("CDSF"); + addDeckName("CDFAC"); + addDeckName("CSPT"); addDeckName("CSIR"); addDeckName("CSIT"); addDeckName("CSPC"); - addDeckName("CSPR"); - addDeckName("CSPT"); - addDeckName("CTFAC"); - addDeckName("CTFRALK"); addDeckName("CTFRANI"); - addDeckName("CTFRCAT"); - addDeckName("CTFRFOA"); - addDeckName("CTFRSUR"); - addDeckName("CTITALK"); - addDeckName("CTITANI"); - addDeckName("CTITCAT"); - addDeckName("CTITFOA"); - addDeckName("CTITSUR"); - addDeckName("CTPTALK"); addDeckName("CTPTANI"); + addDeckName("CTITANI"); + addDeckName("CTFRCAT"); addDeckName("CTPTCAT"); + addDeckName("CTITCAT"); + addDeckName("CTFRFOA"); addDeckName("CTPTFOA"); - addDeckName("CTPTSUR"); - addDeckName("CVFR"); - addDeckName("CVFRL"); - addDeckName("CVIR"); - addDeckName("CVIRL"); - addDeckName("CVIT"); - addDeckName("CVITL"); - addDeckName("CVPT"); - addDeckName("CVPTL"); - addDeckName("CWCT"); - addDeckName("CWCTL"); - addDeckName("CWFR"); - addDeckName("CWFRL"); - addDeckName("CWFRU"); - addDeckName("CWGR"); - addDeckName("CWGRL"); - addDeckName("CWIR"); - addDeckName("CWIRL"); - addDeckName("CWIT"); - addDeckName("CWITL"); - addDeckName("CWPI"); - addDeckName("CWPP"); - addDeckName("CWPR"); - addDeckName("CWPRL"); - addDeckName("CWPT"); - addDeckName("CWPTL"); - addDeckName("LCGFRU"); + addDeckName("CTITFOA"); + addDeckName("CCFR"); + addDeckName("CCPC"); + addDeckName("CCPT"); + addDeckName("CCIC"); + addDeckName("CNFR"); + addDeckName("CNPT"); + addDeckName("CNIT"); + addDeckName("CTFRSUR"); + addDeckName("CTITSUR"); + addDeckName("CTFRALK"); + addDeckName("CTPTALK"); addDeckName("LCOFRU"); addDeckName("LCWFRU"); - addDeckName("WGIRL"); - addDeckName("WGITL"); setMatchRegex("CU.+|CTFR.+|CTPR.+|CTPT.+|CTPC.+|CTIR.+|CTIT.+|CTIC.+|CTFR.+|CTPR.+|CTPT.+|CTPC.+|CTIR.+|CTIT.+|CTIC.+|CTIRF.+|CTIRS.+|CTPRF.+|CTPRS.+|CTITF.+|CTITS.+|CTPTF.+|CTPTS.+|CTICF.+|CTICS.+|CTPCF.+|CTPCS"); { ParserRecord record; @@ -1866,10 +1826,11 @@ const std::string CONNECTION_PROBE::J::itemName = "J"; const std::string CONNECTION_PROBE::K::itemName = "K"; -COORD::COORD( ) : ParserKeyword("COORD") -{ - setFixedSize( (size_t) 1); +COORD::COORD() : ParserKeyword("COORD", KeywordSize(1, false)) { addValidSectionName("GRID"); + setProhibitedKeywords({ + "GDFILE", + }); clearDeckNames(); addDeckName("COORD"); { @@ -1887,10 +1848,7 @@ const std::string COORD::keywordName = "COORD"; const std::string COORD::data::itemName = "data"; -COORDSYS::COORDSYS( ) : ParserKeyword("COORDSYS") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("NUMRES","num",0); +COORDSYS::COORDSYS() : ParserKeyword("COORDSYS", KeywordSize("NUMRES", "num", false, 0)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("COORDSYS"); @@ -1940,12 +1898,10 @@ const std::string COORDSYS::R2::itemName = "R2"; const int COORDSYS::R2::defaultValue = 0; -COPY::COPY( ) : ParserKeyword("COPY") -{ - setSizeType(SLASH_TERMINATED); +COPY::COPY() : ParserKeyword("COPY", KeywordSize(SLASH_TERMINATED)) { + addValidSectionName("PROPS"); addValidSectionName("EDIT"); addValidSectionName("GRID"); - addValidSectionName("PROPS"); addValidSectionName("REGIONS"); addValidSectionName("SOLUTION"); clearDeckNames(); @@ -1998,11 +1954,9 @@ const std::string COPY::K1::itemName = "K1"; const std::string COPY::K2::itemName = "K2"; -COPYBOX::COPYBOX( ) : ParserKeyword("COPYBOX") -{ - setSizeType(SLASH_TERMINATED); - addValidSectionName("GRID"); +COPYBOX::COPYBOX() : ParserKeyword("COPYBOX", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("PROPS"); + addValidSectionName("GRID"); addValidSectionName("REGIONS"); clearDeckNames(); addDeckName("COPYBOX"); @@ -2079,12 +2033,10 @@ const std::string COPYBOX::KY1D::itemName = "KY1D"; const std::string COPYBOX::KY2D::itemName = "KY2D"; -COPYREG::COPYREG( ) : ParserKeyword("COPYREG") -{ - setSizeType(SLASH_TERMINATED); +COPYREG::COPYREG() : ParserKeyword("COPYREG", KeywordSize(SLASH_TERMINATED)) { + addValidSectionName("PROPS"); addValidSectionName("EDIT"); addValidSectionName("GRID"); - addValidSectionName("PROPS"); addValidSectionName("REGIONS"); addValidSectionName("SOLUTION"); clearDeckNames(); @@ -2123,9 +2075,7 @@ const std::string COPYREG::REGION_NAME::itemName = "REGION_NAME"; const std::string COPYREG::REGION_NAME::defaultValue = "M"; -CPIFACT::CPIFACT( ) : ParserKeyword("CPIFACT") -{ - setSizeType(SLASH_TERMINATED); +CPIFACT::CPIFACT() : ParserKeyword("CPIFACT", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("CPIFACT"); @@ -2172,9 +2122,7 @@ const std::string CPIFACT::C1::itemName = "C1"; const std::string CPIFACT::C2::itemName = "C2"; -CPIFACTL::CPIFACTL( ) : ParserKeyword("CPIFACTL") -{ - setSizeType(SLASH_TERMINATED); +CPIFACTL::CPIFACTL() : ParserKeyword("CPIFACTL", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("CPIFACTL"); @@ -2226,9 +2174,7 @@ const std::string CPIFACTL::C1::itemName = "C1"; const std::string CPIFACTL::C2::itemName = "C2"; -CPR::CPR( ) : ParserKeyword("CPR") -{ - setSizeType(SLASH_TERMINATED); +CPR::CPR() : ParserKeyword("CPR", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("RUNSPEC"); addValidSectionName("SUMMARY"); clearDeckNames(); @@ -2261,10 +2207,7 @@ const std::string CPR::J::itemName = "J"; const std::string CPR::K::itemName = "K"; -CREF::CREF( ) : ParserKeyword("CREF") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NUM_STATE_EQ",0); +CREF::CREF() : ParserKeyword("CREF", KeywordSize("TABDIMS", "NUM_STATE_EQ", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("CREF"); @@ -2283,10 +2226,7 @@ const std::string CREF::keywordName = "CREF"; const std::string CREF::COMPRESSIBILITY::itemName = "COMPRESSIBILITY"; -CREFS::CREFS( ) : ParserKeyword("CREFS") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NUM_STATE_EQ",0); +CREFS::CREFS() : ParserKeyword("CREFS", KeywordSize("TABDIMS", "NUM_STATE_EQ", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("CREFS"); @@ -2305,9 +2245,7 @@ const std::string CREFS::keywordName = "CREFS"; const std::string CREFS::COMPRESSIBILITY::itemName = "COMPRESSIBILITY"; -CRITPERM::CRITPERM( ) : ParserKeyword("CRITPERM") -{ - setFixedSize( (size_t) 1); +CRITPERM::CRITPERM() : ParserKeyword("CRITPERM", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("CRITPERM"); @@ -2325,9 +2263,7 @@ const std::string CRITPERM::keywordName = "CRITPERM"; const std::string CRITPERM::VALUE::itemName = "VALUE"; -CSKIN::CSKIN( ) : ParserKeyword("CSKIN") -{ - setSizeType(SLASH_TERMINATED); +CSKIN::CSKIN() : ParserKeyword("CSKIN", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("CSKIN"); @@ -2377,7 +2313,7 @@ const int CSKIN::K_UPPER::defaultValue = 0; const std::string CSKIN::K_LOWER::itemName = "K_LOWER"; const int CSKIN::K_LOWER::defaultValue = 0; const std::string CSKIN::CONNECTION_SKIN_FACTOR::itemName = "CONNECTION_SKIN_FACTOR"; -const double CSKIN::CONNECTION_SKIN_FACTOR::defaultValue = 0.000000; +const double CSKIN::CONNECTION_SKIN_FACTOR::defaultValue = 0; } diff --git a/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/D.cpp b/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/D.cpp index 40feca6204..336957ce5c 100644 --- a/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/D.cpp +++ b/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/D.cpp @@ -1,18 +1,17 @@ -#include -#include -#include -#include + +#include +#include +#include +#include -#include +#include namespace Opm { namespace ParserKeywords { -DATE::DATE( ) : ParserKeyword("DATE") -{ - setFixedSize( (size_t) 0); +DATE::DATE() : ParserKeyword("DATE", KeywordSize(0, false)) { addValidSectionName("SUMMARY"); clearDeckNames(); addDeckName("DATE"); @@ -20,9 +19,7 @@ DATE::DATE( ) : ParserKeyword("DATE") const std::string DATE::keywordName = "DATE"; -DATES::DATES( ) : ParserKeyword("DATES") -{ - setSizeType(SLASH_TERMINATED); +DATES::DATES() : ParserKeyword("DATES", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("DATES"); @@ -56,9 +53,7 @@ const std::string DATES::TIME::itemName = "TIME"; const std::string DATES::TIME::defaultValue = "00:00:00.000"; -DATUM::DATUM( ) : ParserKeyword("DATUM") -{ - setFixedSize( (size_t) 1); +DATUM::DATUM() : ParserKeyword("DATUM", KeywordSize(1, false)) { addValidSectionName("SOLUTION"); clearDeckNames(); addDeckName("DATUM"); @@ -76,9 +71,7 @@ const std::string DATUM::keywordName = "DATUM"; const std::string DATUM::DEPTH::itemName = "DEPTH"; -DATUMR::DATUMR( ) : ParserKeyword("DATUMR") -{ - setFixedSize( (size_t) 1); +DATUMR::DATUMR() : ParserKeyword("DATUMR", KeywordSize(1, false)) { addValidSectionName("SOLUTION"); clearDeckNames(); addDeckName("DATUMR"); @@ -97,9 +90,7 @@ const std::string DATUMR::keywordName = "DATUMR"; const std::string DATUMR::data::itemName = "data"; -DATUMRX::DATUMRX( ) : ParserKeyword("DATUMRX") -{ - setSizeType(SLASH_TERMINATED); +DATUMRX::DATUMRX() : ParserKeyword("DATUMRX", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SOLUTION"); clearDeckNames(); addDeckName("DATUMRX"); @@ -122,9 +113,7 @@ const std::string DATUMRX::REGION_FAMILY::itemName = "REGION_FAMILY"; const std::string DATUMRX::DEPTH::itemName = "DEPTH"; -DCQDEFN::DCQDEFN( ) : ParserKeyword("DCQDEFN") -{ - setFixedSize( (size_t) 1); +DCQDEFN::DCQDEFN() : ParserKeyword("DCQDEFN", KeywordSize(1, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("DCQDEFN"); @@ -143,17 +132,15 @@ const std::string DCQDEFN::QUANTITY::itemName = "QUANTITY"; const std::string DCQDEFN::QUANTITY::defaultValue = "GAS"; -DEBUG_::DEBUG_( ) : ParserKeyword("DEBUG_") -{ - setFixedSize( (size_t) 1); - addValidSectionName("EDIT"); +DEBUG_::DEBUG_() : ParserKeyword("DEBUG_", KeywordSize(1, false)) { + addValidSectionName("RUNSPEC"); addValidSectionName("GRID"); + addValidSectionName("EDIT"); addValidSectionName("PROPS"); addValidSectionName("REGIONS"); - addValidSectionName("RUNSPEC"); - addValidSectionName("SCHEDULE"); addValidSectionName("SOLUTION"); addValidSectionName("SUMMARY"); + addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("DEBUG"); { @@ -773,9 +760,7 @@ const std::string DEBUG_::Item87::itemName = "Item87"; const int DEBUG_::Item87::defaultValue = 0; -DELAYACT::DELAYACT( ) : ParserKeyword("DELAYACT") -{ - setFixedSize( (size_t) 1); +DELAYACT::DELAYACT() : ParserKeyword("DELAYACT", KeywordSize(1, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("DELAYACT"); @@ -815,13 +800,10 @@ const std::string DELAYACT::DELAY::itemName = "DELAY"; const std::string DELAYACT::NUM_TIMES::itemName = "NUM_TIMES"; const int DELAYACT::NUM_TIMES::defaultValue = 1; const std::string DELAYACT::INCREMENT::itemName = "INCREMENT"; -const double DELAYACT::INCREMENT::defaultValue = 0.000000; +const double DELAYACT::INCREMENT::defaultValue = 0; -DENSITY::DENSITY( ) : ParserKeyword("DENSITY") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTPVT",0); +DENSITY::DENSITY() : ParserKeyword("DENSITY", KeywordSize("TABDIMS", "NTPVT", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("DENSITY"); @@ -857,9 +839,7 @@ const std::string DENSITY::GAS::itemName = "GAS"; const double DENSITY::GAS::defaultValue = 1.000000; -DEPTH::DEPTH( ) : ParserKeyword("DEPTH") -{ - setFixedSize( (size_t) 1); +DEPTH::DEPTH() : ParserKeyword("DEPTH", KeywordSize(1, false)) { addValidSectionName("EDIT"); clearDeckNames(); addDeckName("DEPTH"); @@ -877,10 +857,7 @@ const std::string DEPTH::keywordName = "DEPTH"; const std::string DEPTH::data::itemName = "data"; -DEPTHTAB::DEPTHTAB( ) : ParserKeyword("DEPTHTAB") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("RIVRDIMS","NMDEPT",0); +DEPTHTAB::DEPTHTAB() : ParserKeyword("DEPTHTAB", KeywordSize("RIVRDIMS", "NMDEPT", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("DEPTHTAB"); @@ -898,9 +875,7 @@ const std::string DEPTHTAB::keywordName = "DEPTHTAB"; const std::string DEPTHTAB::DATA::itemName = "DATA"; -DEPTHZ::DEPTHZ( ) : ParserKeyword("DEPTHZ") -{ - setFixedSize( (size_t) 1); +DEPTHZ::DEPTHZ() : ParserKeyword("DEPTHZ", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("DEPTHZ"); @@ -919,9 +894,7 @@ const std::string DEPTHZ::keywordName = "DEPTHZ"; const std::string DEPTHZ::data::itemName = "data"; -DIAGDISP::DIAGDISP( ) : ParserKeyword("DIAGDISP") -{ - setFixedSize( (size_t) 0); +DIAGDISP::DIAGDISP() : ParserKeyword("DIAGDISP", KeywordSize(0, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("DIAGDISP"); @@ -929,12 +902,14 @@ DIAGDISP::DIAGDISP( ) : ParserKeyword("DIAGDISP") const std::string DIAGDISP::keywordName = "DIAGDISP"; -DIFF::DIFF( ) : ParserKeyword("DIFF") -{ - setFixedSize( (size_t) 1); +DIFF::DIFF() : ParserKeyword("DIFF", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); - addDeckName("DIFF"); + addDeckName("DIFFMR-"); + addDeckName("DIFFMZ-"); + addDeckName("DIFFMTH-"); + addDeckName("DIFFMX-"); + addDeckName("DIFFMY-"); { ParserRecord record; { @@ -952,10 +927,7 @@ const std::string DIFF::data::itemName = "data"; const double DIFF::data::defaultValue = 1.000000; -DIFFC::DIFFC( ) : ParserKeyword("DIFFC") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTPVT",0); +DIFFC::DIFFC() : ParserKeyword("DIFFC", KeywordSize("TABDIMS", "NTPVT", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("DIFFC"); @@ -963,10 +935,12 @@ DIFFC::DIFFC( ) : ParserKeyword("DIFFC") ParserRecord record; { ParserItem item("OIL_MOL_WEIGHT", ParserItem::itype::DOUBLE); + item.push_backDimension("1"); record.addItem(item); } { ParserItem item("GAS_MOL_WEIGHT", ParserItem::itype::DOUBLE); + item.push_backDimension("1"); record.addItem(item); } { @@ -991,11 +965,13 @@ DIFFC::DIFFC( ) : ParserKeyword("DIFFC") } { ParserItem item("GAS_OIL_CROSS_DIFF_COEFF", ParserItem::itype::DOUBLE); + item.setDefault( double(0) ); item.push_backDimension("Length*Length/Time"); record.addItem(item); } { ParserItem item("OIL_OIL_CROSS_DIFF_COEFF", ParserItem::itype::DOUBLE); + item.setDefault( double(0) ); item.push_backDimension("Length*Length/Time"); record.addItem(item); } @@ -1010,13 +986,12 @@ const std::string DIFFC::OIL_GAS_DIFF_COEFF::itemName = "OIL_GAS_DIFF_COEFF"; const std::string DIFFC::GAS_OIL_DIFF_COEFF::itemName = "GAS_OIL_DIFF_COEFF"; const std::string DIFFC::OIL_OIL_DIFF_COEFF::itemName = "OIL_OIL_DIFF_COEFF"; const std::string DIFFC::GAS_OIL_CROSS_DIFF_COEFF::itemName = "GAS_OIL_CROSS_DIFF_COEFF"; +const double DIFFC::GAS_OIL_CROSS_DIFF_COEFF::defaultValue = 0; const std::string DIFFC::OIL_OIL_CROSS_DIFF_COEFF::itemName = "OIL_OIL_CROSS_DIFF_COEFF"; +const double DIFFC::OIL_OIL_CROSS_DIFF_COEFF::defaultValue = 0; -DIFFCOAL::DIFFCOAL( ) : ParserKeyword("DIFFCOAL") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("REGDIMS","NTCREG",0); +DIFFCOAL::DIFFCOAL() : ParserKeyword("DIFFCOAL", KeywordSize("REGDIMS", "NTCREG", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("DIFFCOAL"); @@ -1048,9 +1023,7 @@ const double DIFFCOAL::RE_ADSORB_FRACTION::defaultValue = 1.000000; const std::string DIFFCOAL::SOL_DIFF_COEFF::itemName = "SOL_DIFF_COEFF"; -DIFFDP::DIFFDP( ) : ParserKeyword("DIFFDP") -{ - setFixedSize( (size_t) 0); +DIFFDP::DIFFDP() : ParserKeyword("DIFFDP", KeywordSize(0, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("DIFFDP"); @@ -1058,9 +1031,7 @@ DIFFDP::DIFFDP( ) : ParserKeyword("DIFFDP") const std::string DIFFDP::keywordName = "DIFFDP"; -DIFFMMF::DIFFMMF( ) : ParserKeyword("DIFFMMF") -{ - setFixedSize( (size_t) 1); +DIFFMMF::DIFFMMF() : ParserKeyword("DIFFMMF", KeywordSize(1, false)) { addValidSectionName("GRID"); addValidSectionName("SCHEDULE"); clearDeckNames(); @@ -1082,9 +1053,7 @@ const std::string DIFFMMF::data::itemName = "data"; const double DIFFMMF::data::defaultValue = 1.000000; -DIFFMR::DIFFMR( ) : ParserKeyword("DIFFMR") -{ - setFixedSize( (size_t) 1); +DIFFMR::DIFFMR() : ParserKeyword("DIFFMR", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("DIFFMR"); @@ -1105,9 +1074,7 @@ const std::string DIFFMR::data::itemName = "data"; const double DIFFMR::data::defaultValue = 1.000000; -DIFFMTHT::DIFFMTHT( ) : ParserKeyword("DIFFMTHT") -{ - setFixedSize( (size_t) 1); +DIFFMTHT::DIFFMTHT() : ParserKeyword("DIFFMTHT", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("DIFFMTHT"); @@ -1128,9 +1095,7 @@ const std::string DIFFMTHT::data::itemName = "data"; const double DIFFMTHT::data::defaultValue = 1.000000; -DIFFMX::DIFFMX( ) : ParserKeyword("DIFFMX") -{ - setFixedSize( (size_t) 1); +DIFFMX::DIFFMX() : ParserKeyword("DIFFMX", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("DIFFMX"); @@ -1151,9 +1116,7 @@ const std::string DIFFMX::data::itemName = "data"; const double DIFFMX::data::defaultValue = 1.000000; -DIFFMY::DIFFMY( ) : ParserKeyword("DIFFMY") -{ - setFixedSize( (size_t) 1); +DIFFMY::DIFFMY() : ParserKeyword("DIFFMY", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("DIFFMY"); @@ -1174,9 +1137,7 @@ const std::string DIFFMY::data::itemName = "data"; const double DIFFMY::data::defaultValue = 1.000000; -DIFFMZ::DIFFMZ( ) : ParserKeyword("DIFFMZ") -{ - setFixedSize( (size_t) 1); +DIFFMZ::DIFFMZ() : ParserKeyword("DIFFMZ", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("DIFFMZ"); @@ -1197,9 +1158,7 @@ const std::string DIFFMZ::data::itemName = "data"; const double DIFFMZ::data::defaultValue = 1.000000; -DIFFR::DIFFR( ) : ParserKeyword("DIFFR") -{ - setFixedSize( (size_t) 1); +DIFFR::DIFFR() : ParserKeyword("DIFFR", KeywordSize(1, false)) { addValidSectionName("EDIT"); clearDeckNames(); addDeckName("DIFFR"); @@ -1218,9 +1177,7 @@ const std::string DIFFR::keywordName = "DIFFR"; const std::string DIFFR::data::itemName = "data"; -DIFFTHT::DIFFTHT( ) : ParserKeyword("DIFFTHT") -{ - setFixedSize( (size_t) 1); +DIFFTHT::DIFFTHT() : ParserKeyword("DIFFTHT", KeywordSize(1, false)) { addValidSectionName("EDIT"); clearDeckNames(); addDeckName("DIFFTHT"); @@ -1239,9 +1196,7 @@ const std::string DIFFTHT::keywordName = "DIFFTHT"; const std::string DIFFTHT::data::itemName = "data"; -DIFFUSE::DIFFUSE( ) : ParserKeyword("DIFFUSE") -{ - setFixedSize( (size_t) 0); +DIFFUSE::DIFFUSE() : ParserKeyword("DIFFUSE", KeywordSize(0, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("DIFFUSE"); @@ -1249,9 +1204,7 @@ DIFFUSE::DIFFUSE( ) : ParserKeyword("DIFFUSE") const std::string DIFFUSE::keywordName = "DIFFUSE"; -DIFFX::DIFFX( ) : ParserKeyword("DIFFX") -{ - setFixedSize( (size_t) 1); +DIFFX::DIFFX() : ParserKeyword("DIFFX", KeywordSize(1, false)) { addValidSectionName("EDIT"); clearDeckNames(); addDeckName("DIFFX"); @@ -1270,9 +1223,7 @@ const std::string DIFFX::keywordName = "DIFFX"; const std::string DIFFX::data::itemName = "data"; -DIFFY::DIFFY( ) : ParserKeyword("DIFFY") -{ - setFixedSize( (size_t) 1); +DIFFY::DIFFY() : ParserKeyword("DIFFY", KeywordSize(1, false)) { addValidSectionName("EDIT"); clearDeckNames(); addDeckName("DIFFY"); @@ -1291,9 +1242,7 @@ const std::string DIFFY::keywordName = "DIFFY"; const std::string DIFFY::data::itemName = "data"; -DIFFZ::DIFFZ( ) : ParserKeyword("DIFFZ") -{ - setFixedSize( (size_t) 1); +DIFFZ::DIFFZ() : ParserKeyword("DIFFZ", KeywordSize(1, false)) { addValidSectionName("EDIT"); clearDeckNames(); addDeckName("DIFFZ"); @@ -1312,9 +1261,7 @@ const std::string DIFFZ::keywordName = "DIFFZ"; const std::string DIFFZ::data::itemName = "data"; -DIMENS::DIMENS( ) : ParserKeyword("DIMENS") -{ - setFixedSize( (size_t) 1); +DIMENS::DIMENS() : ParserKeyword("DIMENS", KeywordSize(1, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("DIMENS"); @@ -1341,9 +1288,7 @@ const std::string DIMENS::NY::itemName = "NY"; const std::string DIMENS::NZ::itemName = "NZ"; -DIMPES::DIMPES( ) : ParserKeyword("DIMPES") -{ - setFixedSize( (size_t) 1); +DIMPES::DIMPES() : ParserKeyword("DIMPES", KeywordSize(1, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("DIMPES"); @@ -1379,9 +1324,7 @@ const std::string DIMPES::DPMAX::itemName = "DPMAX"; const double DIMPES::DPMAX::defaultValue = 13.790000; -DIMPLICT::DIMPLICT( ) : ParserKeyword("DIMPLICT") -{ - setFixedSize( (size_t) 0); +DIMPLICT::DIMPLICT() : ParserKeyword("DIMPLICT", KeywordSize(0, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("DIMPLICT"); @@ -1389,9 +1332,7 @@ DIMPLICT::DIMPLICT( ) : ParserKeyword("DIMPLICT") const std::string DIMPLICT::keywordName = "DIMPLICT"; -DISGAS::DISGAS( ) : ParserKeyword("DISGAS") -{ - setFixedSize( (size_t) 0); +DISGAS::DISGAS() : ParserKeyword("DISGAS", KeywordSize(0, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("DISGAS"); @@ -1399,9 +1340,7 @@ DISGAS::DISGAS( ) : ParserKeyword("DISGAS") const std::string DISGAS::keywordName = "DISGAS"; -DISPDIMS::DISPDIMS( ) : ParserKeyword("DISPDIMS") -{ - setFixedSize( (size_t) 1); +DISPDIMS::DISPDIMS() : ParserKeyword("DISPDIMS", KeywordSize(1, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("DISPDIMS"); @@ -1434,11 +1373,7 @@ const std::string DISPDIMS::MAX_CONCENTRATION_NODES::itemName = "MAX_CONCENTRATI const int DISPDIMS::MAX_CONCENTRATION_NODES::defaultValue = 1; -DISPERSE::DISPERSE( ) : ParserKeyword("DISPERSE") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("DISPDIMS","MXDIST",0); - setTableCollection( true ); +DISPERSE::DISPERSE() : ParserKeyword("DISPERSE", KeywordSize("DISPDIMS", "MXDIST", true, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("DISPERSE"); @@ -1464,9 +1399,7 @@ const std::string DISPERSE::VELOCITY::itemName = "VELOCITY"; const std::string DISPERSE::DATA::itemName = "DATA"; -DOMAINS::DOMAINS( ) : ParserKeyword("DOMAINS") -{ - setFixedSize( (size_t) 1); +DOMAINS::DOMAINS() : ParserKeyword("DOMAINS", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("DOMAINS"); @@ -1485,9 +1418,7 @@ const std::string DOMAINS::keywordName = "DOMAINS"; const std::string DOMAINS::data::itemName = "data"; -DPGRID::DPGRID( ) : ParserKeyword("DPGRID") -{ - setFixedSize( (size_t) 0); +DPGRID::DPGRID() : ParserKeyword("DPGRID", KeywordSize(0, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("DPGRID"); @@ -1495,10 +1426,7 @@ DPGRID::DPGRID( ) : ParserKeyword("DPGRID") const std::string DPGRID::keywordName = "DPGRID"; -DPKRMOD::DPKRMOD( ) : ParserKeyword("DPKRMOD") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTSFUN",0); +DPKRMOD::DPKRMOD() : ParserKeyword("DPKRMOD", KeywordSize("TABDIMS", "NTSFUN", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("DPKRMOD"); @@ -1526,16 +1454,14 @@ DPKRMOD::DPKRMOD( ) : ParserKeyword("DPKRMOD") } const std::string DPKRMOD::keywordName = "DPKRMOD"; const std::string DPKRMOD::MOD_OIL_WAT_PERM::itemName = "MOD_OIL_WAT_PERM"; -const double DPKRMOD::MOD_OIL_WAT_PERM::defaultValue = 0.000000; +const double DPKRMOD::MOD_OIL_WAT_PERM::defaultValue = 0; const std::string DPKRMOD::MOD_OIL_GAS_PERM::itemName = "MOD_OIL_GAS_PERM"; -const double DPKRMOD::MOD_OIL_GAS_PERM::defaultValue = 0.000000; +const double DPKRMOD::MOD_OIL_GAS_PERM::defaultValue = 0; const std::string DPKRMOD::SCALE_PERM_FRACTURE::itemName = "SCALE_PERM_FRACTURE"; const std::string DPKRMOD::SCALE_PERM_FRACTURE::defaultValue = "YES"; -DPNUM::DPNUM( ) : ParserKeyword("DPNUM") -{ - setFixedSize( (size_t) 1); +DPNUM::DPNUM() : ParserKeyword("DPNUM", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("DPNUM"); @@ -1553,9 +1479,7 @@ const std::string DPNUM::keywordName = "DPNUM"; const std::string DPNUM::VALUE::itemName = "VALUE"; -DR::DR( ) : ParserKeyword("DR") -{ - setFixedSize( (size_t) 1); +DR::DR() : ParserKeyword("DR", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("DR"); @@ -1574,10 +1498,7 @@ const std::string DR::keywordName = "DR"; const std::string DR::data::itemName = "data"; -DREF::DREF( ) : ParserKeyword("DREF") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NUM_STATE_EQ",0); +DREF::DREF() : ParserKeyword("DREF", KeywordSize("TABDIMS", "NUM_STATE_EQ", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("DREF"); @@ -1596,10 +1517,7 @@ const std::string DREF::keywordName = "DREF"; const std::string DREF::DENSITY::itemName = "DENSITY"; -DREFS::DREFS( ) : ParserKeyword("DREFS") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NUM_STATE_EQ",0); +DREFS::DREFS() : ParserKeyword("DREFS", KeywordSize("TABDIMS", "NUM_STATE_EQ", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("DREFS"); @@ -1618,9 +1536,7 @@ const std::string DREFS::keywordName = "DREFS"; const std::string DREFS::DENSITY::itemName = "DENSITY"; -DRILPRI::DRILPRI( ) : ParserKeyword("DRILPRI") -{ - setFixedSize( (size_t) 1); +DRILPRI::DRILPRI() : ParserKeyword("DRILPRI", KeywordSize(1, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("DRILPRI"); @@ -1688,32 +1604,30 @@ DRILPRI::DRILPRI( ) : ParserKeyword("DRILPRI") } const std::string DRILPRI::keywordName = "DRILPRI"; const std::string DRILPRI::INTERVAL::itemName = "INTERVAL"; -const double DRILPRI::INTERVAL::defaultValue = 0.000000; +const double DRILPRI::INTERVAL::defaultValue = 0; const std::string DRILPRI::A::itemName = "A"; -const double DRILPRI::A::defaultValue = 0.000000; +const double DRILPRI::A::defaultValue = 0; const std::string DRILPRI::B::itemName = "B"; -const double DRILPRI::B::defaultValue = 0.000000; +const double DRILPRI::B::defaultValue = 0; const std::string DRILPRI::C::itemName = "C"; -const double DRILPRI::C::defaultValue = 0.000000; +const double DRILPRI::C::defaultValue = 0; const std::string DRILPRI::D::itemName = "D"; -const double DRILPRI::D::defaultValue = 0.000000; +const double DRILPRI::D::defaultValue = 0; const std::string DRILPRI::E::itemName = "E"; -const double DRILPRI::E::defaultValue = 0.000000; +const double DRILPRI::E::defaultValue = 0; const std::string DRILPRI::F::itemName = "F"; -const double DRILPRI::F::defaultValue = 0.000000; +const double DRILPRI::F::defaultValue = 0; const std::string DRILPRI::G::itemName = "G"; -const double DRILPRI::G::defaultValue = 0.000000; +const double DRILPRI::G::defaultValue = 0; const std::string DRILPRI::H::itemName = "H"; -const double DRILPRI::H::defaultValue = 0.000000; +const double DRILPRI::H::defaultValue = 0; const std::string DRILPRI::LOOK_AHEAD::itemName = "LOOK_AHEAD"; -const double DRILPRI::LOOK_AHEAD::defaultValue = 0.000000; +const double DRILPRI::LOOK_AHEAD::defaultValue = 0; const std::string DRILPRI::CALCULATION::itemName = "CALCULATION"; const std::string DRILPRI::CALCULATION::defaultValue = "SINGLE"; -DRSDT::DRSDT( ) : ParserKeyword("DRSDT") -{ - setFixedSize( (size_t) 1); +DRSDT::DRSDT() : ParserKeyword("DRSDT", KeywordSize(1, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("DRSDT"); @@ -1725,7 +1639,7 @@ DRSDT::DRSDT( ) : ParserKeyword("DRSDT") record.addItem(item); } { - ParserItem item("Option", ParserItem::itype::STRING); + ParserItem item("OPTION", ParserItem::itype::STRING); item.setDefault( std::string("ALL") ); record.addItem(item); } @@ -1734,14 +1648,36 @@ DRSDT::DRSDT( ) : ParserKeyword("DRSDT") } const std::string DRSDT::keywordName = "DRSDT"; const std::string DRSDT::DRSDT_MAX::itemName = "DRSDT_MAX"; -const std::string DRSDT::Option::itemName = "Option"; -const std::string DRSDT::Option::defaultValue = "ALL"; +const std::string DRSDT::OPTION::itemName = "OPTION"; +const std::string DRSDT::OPTION::defaultValue = "ALL"; -DRSDTR::DRSDTR( ) : ParserKeyword("DRSDTR") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTPVT",0); +DRSDTCON::DRSDTCON() : ParserKeyword("DRSDTCON", KeywordSize(1, false)) { + addValidSectionName("SCHEDULE"); + clearDeckNames(); + addDeckName("DRSDTCON"); + { + ParserRecord record; + { + ParserItem item("DRSDT_MAX", ParserItem::itype::DOUBLE); + item.push_backDimension("1"); + record.addItem(item); + } + { + ParserItem item("OPTION", ParserItem::itype::STRING); + item.setDefault( std::string("ALL") ); + record.addItem(item); + } + addRecord( record ); + } +} +const std::string DRSDTCON::keywordName = "DRSDTCON"; +const std::string DRSDTCON::DRSDT_MAX::itemName = "DRSDT_MAX"; +const std::string DRSDTCON::OPTION::itemName = "OPTION"; +const std::string DRSDTCON::OPTION::defaultValue = "ALL"; + + +DRSDTR::DRSDTR() : ParserKeyword("DRSDTR", KeywordSize("TABDIMS", "NTPVT", false, 0)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("DRSDTR"); @@ -1753,7 +1689,7 @@ DRSDTR::DRSDTR( ) : ParserKeyword("DRSDTR") record.addItem(item); } { - ParserItem item("Option", ParserItem::itype::STRING); + ParserItem item("OPTION", ParserItem::itype::STRING); item.setDefault( std::string("ALL") ); record.addItem(item); } @@ -1762,13 +1698,11 @@ DRSDTR::DRSDTR( ) : ParserKeyword("DRSDTR") } const std::string DRSDTR::keywordName = "DRSDTR"; const std::string DRSDTR::DRSDT_MAX::itemName = "DRSDT_MAX"; -const std::string DRSDTR::Option::itemName = "Option"; -const std::string DRSDTR::Option::defaultValue = "ALL"; +const std::string DRSDTR::OPTION::itemName = "OPTION"; +const std::string DRSDTR::OPTION::defaultValue = "ALL"; -DRV::DRV( ) : ParserKeyword("DRV") -{ - setFixedSize( (size_t) 1); +DRV::DRV() : ParserKeyword("DRV", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("DRV"); @@ -1787,9 +1721,7 @@ const std::string DRV::keywordName = "DRV"; const std::string DRV::data::itemName = "data"; -DRVDT::DRVDT( ) : ParserKeyword("DRVDT") -{ - setFixedSize( (size_t) 1); +DRVDT::DRVDT() : ParserKeyword("DRVDT", KeywordSize(1, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("DRVDT"); @@ -1807,10 +1739,7 @@ const std::string DRVDT::keywordName = "DRVDT"; const std::string DRVDT::DRVDT_MAX::itemName = "DRVDT_MAX"; -DRVDTR::DRVDTR( ) : ParserKeyword("DRVDTR") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTPVT",0); +DRVDTR::DRVDTR() : ParserKeyword("DRVDTR", KeywordSize("TABDIMS", "NTPVT", false, 0)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("DRVDTR"); @@ -1828,9 +1757,7 @@ const std::string DRVDTR::keywordName = "DRVDTR"; const std::string DRVDTR::DRVDT_MAX::itemName = "DRVDT_MAX"; -DSPDEINT::DSPDEINT( ) : ParserKeyword("DSPDEINT") -{ - setFixedSize( (size_t) 0); +DSPDEINT::DSPDEINT() : ParserKeyword("DSPDEINT", KeywordSize(0, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("DSPDEINT"); @@ -1838,9 +1765,7 @@ DSPDEINT::DSPDEINT( ) : ParserKeyword("DSPDEINT") const std::string DSPDEINT::keywordName = "DSPDEINT"; -DTHETA::DTHETA( ) : ParserKeyword("DTHETA") -{ - setFixedSize( (size_t) 1); +DTHETA::DTHETA() : ParserKeyword("DTHETA", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("DTHETA"); @@ -1859,9 +1784,7 @@ const std::string DTHETA::keywordName = "DTHETA"; const std::string DTHETA::data::itemName = "data"; -DTHETAV::DTHETAV( ) : ParserKeyword("DTHETAV") -{ - setFixedSize( (size_t) 1); +DTHETAV::DTHETAV() : ParserKeyword("DTHETAV", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("DTHETAV"); @@ -1880,9 +1803,7 @@ const std::string DTHETAV::keywordName = "DTHETAV"; const std::string DTHETAV::data::itemName = "data"; -DUALPERM::DUALPERM( ) : ParserKeyword("DUALPERM") -{ - setFixedSize( (size_t) 0); +DUALPERM::DUALPERM() : ParserKeyword("DUALPERM", KeywordSize(0, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("DUALPERM"); @@ -1890,9 +1811,7 @@ DUALPERM::DUALPERM( ) : ParserKeyword("DUALPERM") const std::string DUALPERM::keywordName = "DUALPERM"; -DUALPORO::DUALPORO( ) : ParserKeyword("DUALPORO") -{ - setFixedSize( (size_t) 0); +DUALPORO::DUALPORO() : ParserKeyword("DUALPORO", KeywordSize(0, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("DUALPORO"); @@ -1900,9 +1819,7 @@ DUALPORO::DUALPORO( ) : ParserKeyword("DUALPORO") const std::string DUALPORO::keywordName = "DUALPORO"; -DUMPCUPL::DUMPCUPL( ) : ParserKeyword("DUMPCUPL") -{ - setFixedSize( (size_t) 1); +DUMPCUPL::DUMPCUPL() : ParserKeyword("DUMPCUPL", KeywordSize(1, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("DUMPCUPL"); @@ -1919,9 +1836,7 @@ const std::string DUMPCUPL::keywordName = "DUMPCUPL"; const std::string DUMPCUPL::VALUE::itemName = "VALUE"; -DUMPFLUX::DUMPFLUX( ) : ParserKeyword("DUMPFLUX") -{ - setFixedSize( (size_t) 0); +DUMPFLUX::DUMPFLUX() : ParserKeyword("DUMPFLUX", KeywordSize(0, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("DUMPFLUX"); @@ -1929,10 +1844,11 @@ DUMPFLUX::DUMPFLUX( ) : ParserKeyword("DUMPFLUX") const std::string DUMPFLUX::keywordName = "DUMPFLUX"; -DX::DX( ) : ParserKeyword("DX") -{ - setFixedSize( (size_t) 1); +DX::DX() : ParserKeyword("DX", KeywordSize(1, false)) { addValidSectionName("GRID"); + setProhibitedKeywords({ + "DXV", + }); clearDeckNames(); addDeckName("DX"); { @@ -1950,10 +1866,11 @@ const std::string DX::keywordName = "DX"; const std::string DX::data::itemName = "data"; -DXV::DXV( ) : ParserKeyword("DXV") -{ - setFixedSize( (size_t) 1); +DXV::DXV() : ParserKeyword("DXV", KeywordSize(1, false)) { addValidSectionName("GRID"); + setProhibitedKeywords({ + "DX", + }); clearDeckNames(); addDeckName("DXV"); { @@ -1971,10 +1888,11 @@ const std::string DXV::keywordName = "DXV"; const std::string DXV::data::itemName = "data"; -DY::DY( ) : ParserKeyword("DY") -{ - setFixedSize( (size_t) 1); +DY::DY() : ParserKeyword("DY", KeywordSize(1, false)) { addValidSectionName("GRID"); + setProhibitedKeywords({ + "DYV", + }); clearDeckNames(); addDeckName("DY"); { @@ -1992,11 +1910,9 @@ const std::string DY::keywordName = "DY"; const std::string DY::data::itemName = "data"; -DYNAMICR::DYNAMICR( ) : ParserKeyword("DYNAMICR") -{ - setSizeType(FIXED_CODE); - addValidSectionName("SCHEDULE"); +DYNAMICR::DYNAMICR() : ParserKeyword("DYNAMICR", KeywordSize(1, true)) { addValidSectionName("SOLUTION"); + addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("DYNAMICR"); setCodeEnd("ENDDYN"); @@ -2014,9 +1930,7 @@ const std::string DYNAMICR::keywordName = "DYNAMICR"; const std::string DYNAMICR::code::itemName = "code"; -DYNRDIMS::DYNRDIMS( ) : ParserKeyword("DYNRDIMS") -{ - setFixedSize( (size_t) 1); +DYNRDIMS::DYNRDIMS() : ParserKeyword("DYNRDIMS", KeywordSize(1, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("DYNRDIMS"); @@ -2049,10 +1963,11 @@ const std::string DYNRDIMS::MXDYNR::itemName = "MXDYNR"; const int DYNRDIMS::MXDYNR::defaultValue = 0; -DYV::DYV( ) : ParserKeyword("DYV") -{ - setFixedSize( (size_t) 1); +DYV::DYV() : ParserKeyword("DYV", KeywordSize(1, false)) { addValidSectionName("GRID"); + setProhibitedKeywords({ + "DY", + }); clearDeckNames(); addDeckName("DYV"); { @@ -2070,9 +1985,7 @@ const std::string DYV::keywordName = "DYV"; const std::string DYV::data::itemName = "data"; -DZ::DZ( ) : ParserKeyword("DZ") -{ - setFixedSize( (size_t) 1); +DZ::DZ() : ParserKeyword("DZ", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("DZ"); @@ -2091,9 +2004,7 @@ const std::string DZ::keywordName = "DZ"; const std::string DZ::data::itemName = "data"; -DZMATRIX::DZMATRIX( ) : ParserKeyword("DZMATRIX") -{ - setFixedSize( (size_t) 1); +DZMATRIX::DZMATRIX() : ParserKeyword("DZMATRIX", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("DZMATRIX"); @@ -2111,12 +2022,10 @@ DZMATRIX::DZMATRIX( ) : ParserKeyword("DZMATRIX") } const std::string DZMATRIX::keywordName = "DZMATRIX"; const std::string DZMATRIX::data::itemName = "data"; -const double DZMATRIX::data::defaultValue = 0.000000; +const double DZMATRIX::data::defaultValue = 0; -DZMTRX::DZMTRX( ) : ParserKeyword("DZMTRX") -{ - setFixedSize( (size_t) 1); +DZMTRX::DZMTRX() : ParserKeyword("DZMTRX", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("DZMTRX"); @@ -2134,12 +2043,10 @@ DZMTRX::DZMTRX( ) : ParserKeyword("DZMTRX") } const std::string DZMTRX::keywordName = "DZMTRX"; const std::string DZMTRX::data::itemName = "data"; -const double DZMTRX::data::defaultValue = 0.000000; +const double DZMTRX::data::defaultValue = 0; -DZMTRXV::DZMTRXV( ) : ParserKeyword("DZMTRXV") -{ - setFixedSize( (size_t) 1); +DZMTRXV::DZMTRXV() : ParserKeyword("DZMTRXV", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("DZMTRXV"); @@ -2157,12 +2064,10 @@ DZMTRXV::DZMTRXV( ) : ParserKeyword("DZMTRXV") } const std::string DZMTRXV::keywordName = "DZMTRXV"; const std::string DZMTRXV::data::itemName = "data"; -const double DZMTRXV::data::defaultValue = 0.000000; +const double DZMTRXV::data::defaultValue = 0; -DZNET::DZNET( ) : ParserKeyword("DZNET") -{ - setFixedSize( (size_t) 1); +DZNET::DZNET() : ParserKeyword("DZNET", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("DZNET"); @@ -2181,9 +2086,7 @@ const std::string DZNET::keywordName = "DZNET"; const std::string DZNET::data::itemName = "data"; -DZV::DZV( ) : ParserKeyword("DZV") -{ - setFixedSize( (size_t) 1); +DZV::DZV() : ParserKeyword("DZV", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("DZV"); diff --git a/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/E.cpp b/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/E.cpp index 1d632a35d2..d087fcb9e4 100644 --- a/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/E.cpp +++ b/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/E.cpp @@ -1,35 +1,32 @@ -#include -#include -#include -#include + +#include +#include +#include +#include -#include +#include namespace Opm { namespace ParserKeywords { -ECHO::ECHO( ) : ParserKeyword("ECHO") -{ - setFixedSize( (size_t) 0); +ECHO::ECHO() : ParserKeyword("ECHO", KeywordSize(0, false)) { + addValidSectionName("RUNSPEC"); + addValidSectionName("PROPS"); addValidSectionName("EDIT"); addValidSectionName("GRID"); - addValidSectionName("PROPS"); addValidSectionName("REGIONS"); - addValidSectionName("RUNSPEC"); - addValidSectionName("SCHEDULE"); addValidSectionName("SOLUTION"); addValidSectionName("SUMMARY"); + addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("ECHO"); } const std::string ECHO::keywordName = "ECHO"; -ECLMC::ECLMC( ) : ParserKeyword("ECLMC") -{ - setFixedSize( (size_t) 0); +ECLMC::ECLMC() : ParserKeyword("ECLMC", KeywordSize(0, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("ECLMC"); @@ -37,18 +34,14 @@ ECLMC::ECLMC( ) : ParserKeyword("ECLMC") const std::string ECLMC::keywordName = "ECLMC"; -EDIT::EDIT( ) : ParserKeyword("EDIT") -{ - setFixedSize( (size_t) 0); +EDIT::EDIT() : ParserKeyword("EDIT", KeywordSize(0, false)) { clearDeckNames(); addDeckName("EDIT"); } const std::string EDIT::keywordName = "EDIT"; -EDITNNC::EDITNNC( ) : ParserKeyword("EDITNNC") -{ - setSizeType(SLASH_TERMINATED); +EDITNNC::EDITNNC() : ParserKeyword("EDITNNC", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("EDIT"); clearDeckNames(); addDeckName("EDITNNC"); @@ -130,9 +123,7 @@ const std::string EDITNNC::FACE_FLOW21::itemName = "FACE_FLOW21"; const std::string EDITNNC::DIFFM::itemName = "DIFFM"; -EDITNNCR::EDITNNCR( ) : ParserKeyword("EDITNNCR") -{ - setSizeType(SLASH_TERMINATED); +EDITNNCR::EDITNNCR() : ParserKeyword("EDITNNCR", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("EDIT"); clearDeckNames(); addDeckName("EDITNNCR"); @@ -215,9 +206,7 @@ const std::string EDITNNCR::FACE_FLOW21::itemName = "FACE_FLOW21"; const std::string EDITNNCR::DIFF::itemName = "DIFF"; -EHYSTR::EHYSTR( ) : ParserKeyword("EHYSTR") -{ - setFixedSize( (size_t) 1); +EHYSTR::EHYSTR() : ParserKeyword("EHYSTR", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("EHYSTR"); @@ -283,6 +272,11 @@ EHYSTR::EHYSTR( ) : ParserKeyword("EHYSTR") item.setDefault( double(0) ); record.addItem(item); } + { + ParserItem item("FLAG_SOMETHING", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } addRecord( record ); } } @@ -310,13 +304,12 @@ const std::string EHYSTR::baker_flag_gas::defaultValue = "NO"; const std::string EHYSTR::baker_flag_water::itemName = "baker_flag_water"; const std::string EHYSTR::baker_flag_water::defaultValue = "NO"; const std::string EHYSTR::threshold_saturation::itemName = "threshold_saturation"; -const double EHYSTR::threshold_saturation::defaultValue = 0.000000; +const double EHYSTR::threshold_saturation::defaultValue = 0; +const std::string EHYSTR::FLAG_SOMETHING::itemName = "FLAG_SOMETHING"; +const int EHYSTR::FLAG_SOMETHING::defaultValue = 0; -EHYSTRR::EHYSTRR( ) : ParserKeyword("EHYSTRR") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTSFUN",0); +EHYSTRR::EHYSTRR() : ParserKeyword("EHYSTRR", KeywordSize("TABDIMS", "NTSFUN", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("EHYSTRR"); @@ -349,26 +342,22 @@ const std::string EHYSTRR::mod_param_non_wet_phase_sat::itemName = "mod_param_no const double EHYSTRR::mod_param_non_wet_phase_sat::defaultValue = 0.100000; -END::END( ) : ParserKeyword("END") -{ - setFixedSize( (size_t) 0); - addValidSectionName("EDIT"); +END::END() : ParserKeyword("END", KeywordSize(0, false)) { + addValidSectionName("RUNSPEC"); addValidSectionName("GRID"); + addValidSectionName("EDIT"); addValidSectionName("PROPS"); addValidSectionName("REGIONS"); - addValidSectionName("RUNSPEC"); - addValidSectionName("SCHEDULE"); addValidSectionName("SOLUTION"); addValidSectionName("SUMMARY"); + addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("END"); } const std::string END::keywordName = "END"; -ENDACTIO::ENDACTIO( ) : ParserKeyword("ENDACTIO") -{ - setFixedSize( (size_t) 0); +ENDACTIO::ENDACTIO() : ParserKeyword("ENDACTIO", KeywordSize(0, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("ENDACTIO"); @@ -376,67 +365,57 @@ ENDACTIO::ENDACTIO( ) : ParserKeyword("ENDACTIO") const std::string ENDACTIO::keywordName = "ENDACTIO"; -ENDBOX::ENDBOX( ) : ParserKeyword("ENDBOX") -{ - setFixedSize( (size_t) 0); +ENDBOX::ENDBOX() : ParserKeyword("ENDBOX", KeywordSize(0, false)) { + addValidSectionName("PROPS"); addValidSectionName("EDIT"); addValidSectionName("GRID"); - addValidSectionName("PROPS"); addValidSectionName("REGIONS"); - addValidSectionName("SCHEDULE"); addValidSectionName("SOLUTION"); + addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("ENDBOX"); } const std::string ENDBOX::keywordName = "ENDBOX"; -ENDDYN::ENDDYN( ) : ParserKeyword("ENDDYN") -{ - setFixedSize( (size_t) 0); - addValidSectionName("SCHEDULE"); +ENDDYN::ENDDYN() : ParserKeyword("ENDDYN", KeywordSize(0, false)) { addValidSectionName("SOLUTION"); + addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("ENDDYN"); } const std::string ENDDYN::keywordName = "ENDDYN"; -ENDFIN::ENDFIN( ) : ParserKeyword("ENDFIN") -{ - setFixedSize( (size_t) 0); +ENDFIN::ENDFIN() : ParserKeyword("ENDFIN", KeywordSize(0, false)) { + addValidSectionName("PROPS"); addValidSectionName("EDIT"); addValidSectionName("GRID"); - addValidSectionName("PROPS"); addValidSectionName("REGIONS"); - addValidSectionName("SCHEDULE"); addValidSectionName("SOLUTION"); + addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("ENDFIN"); } const std::string ENDFIN::keywordName = "ENDFIN"; -ENDINC::ENDINC( ) : ParserKeyword("ENDINC") -{ - setFixedSize( (size_t) 0); +ENDINC::ENDINC() : ParserKeyword("ENDINC", KeywordSize(0, false)) { + addValidSectionName("RUNSPEC"); + addValidSectionName("PROPS"); addValidSectionName("EDIT"); addValidSectionName("GRID"); - addValidSectionName("PROPS"); addValidSectionName("REGIONS"); - addValidSectionName("RUNSPEC"); - addValidSectionName("SCHEDULE"); addValidSectionName("SOLUTION"); addValidSectionName("SUMMARY"); + addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("ENDINC"); } const std::string ENDINC::keywordName = "ENDINC"; -ENDNUM::ENDNUM( ) : ParserKeyword("ENDNUM") -{ - setFixedSize( (size_t) 1); +ENDNUM::ENDNUM() : ParserKeyword("ENDNUM", KeywordSize(1, false)) { addValidSectionName("REGIONS"); clearDeckNames(); addDeckName("ENDNUM"); @@ -454,202 +433,200 @@ const std::string ENDNUM::keywordName = "ENDNUM"; const std::string ENDNUM::data::itemName = "data"; -ENDPOINT_SPECIFIERS::ENDPOINT_SPECIFIERS( ) : ParserKeyword("ENDPOINT_SPECIFIERS") -{ - setFixedSize( (size_t) 1); +ENDPOINT_SPECIFIERS::ENDPOINT_SPECIFIERS() : ParserKeyword("ENDPOINT_SPECIFIERS", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); - addDeckName("IKRG"); - addDeckName("IKRGR"); - addDeckName("IKRGRX"); - addDeckName("IKRGRX-"); - addDeckName("IKRGRY"); - addDeckName("IKRGRY-"); - addDeckName("IKRGRZ"); - addDeckName("IKRGRZ-"); - addDeckName("IKRGX"); - addDeckName("IKRGX-"); - addDeckName("IKRGY"); - addDeckName("IKRGY-"); - addDeckName("IKRGZ"); - addDeckName("IKRGZ-"); - addDeckName("IKRO"); - addDeckName("IKRORG"); - addDeckName("IKRORGX"); - addDeckName("IKRORGX-"); - addDeckName("IKRORGY"); - addDeckName("IKRORGY-"); - addDeckName("IKRORGZ"); - addDeckName("IKRORGZ-"); - addDeckName("IKRORW"); - addDeckName("IKRORWX"); - addDeckName("IKRORWX-"); - addDeckName("IKRORWY"); - addDeckName("IKRORWY-"); - addDeckName("IKRORWZ"); - addDeckName("IKRORWZ-"); - addDeckName("IKROX-"); - addDeckName("IKROY-"); - addDeckName("IKROZ-"); - addDeckName("IKRW"); - addDeckName("IKRWR"); - addDeckName("IKRWRX"); - addDeckName("IKRWRX-"); - addDeckName("IKRWRY"); - addDeckName("IKRWRY-"); - addDeckName("IKRWRZ"); - addDeckName("IKRWRZ-"); - addDeckName("IKRWX"); - addDeckName("IKRWX-"); - addDeckName("IKRWY"); - addDeckName("IKRWY-"); - addDeckName("IKRWZ"); - addDeckName("IKRWZ-"); - addDeckName("ISGCR"); - addDeckName("ISGCRX"); - addDeckName("ISGCRX-"); - addDeckName("ISGCRY"); - addDeckName("ISGCRY-"); - addDeckName("ISGCRZ"); - addDeckName("ISGCRZ-"); - addDeckName("ISGU"); - addDeckName("ISGUX"); - addDeckName("ISGUX-"); - addDeckName("ISGUY"); - addDeckName("ISGUY-"); - addDeckName("ISGUZ"); - addDeckName("ISGUZ-"); - addDeckName("ISOGCR"); - addDeckName("ISOGCRX"); - addDeckName("ISOGCRX-"); - addDeckName("ISOGCRY"); - addDeckName("ISOGCRY-"); - addDeckName("ISOGCRZ"); - addDeckName("ISOGCRZ-"); - addDeckName("ISOWCR"); - addDeckName("ISOWCRX"); - addDeckName("ISOWCRX-"); - addDeckName("ISOWCRY"); - addDeckName("ISOWCRY-"); - addDeckName("ISOWCRZ"); - addDeckName("ISOWCRZ-"); - addDeckName("ISWCR"); - addDeckName("ISWCRX"); - addDeckName("ISWCRX-"); - addDeckName("ISWCRZ"); - addDeckName("ISWCRZ-"); - addDeckName("ISWL"); - addDeckName("ISWLX"); - addDeckName("ISWLX-"); - addDeckName("ISWLY"); - addDeckName("ISWLY-"); - addDeckName("ISWLZ"); - addDeckName("ISWLZ-"); - addDeckName("ISWU"); - addDeckName("ISWUX"); - addDeckName("ISWUX-"); - addDeckName("ISWUY"); - addDeckName("ISWUY-"); - addDeckName("ISWUZ"); - addDeckName("ISWUZ-"); - addDeckName("KRG"); - addDeckName("KRGR"); - addDeckName("KRGRX"); - addDeckName("KRGRX-"); - addDeckName("KRGRY"); - addDeckName("KRGRY-"); - addDeckName("KRGRZ"); - addDeckName("KRGRZ-"); - addDeckName("KRGX"); - addDeckName("KRGX-"); - addDeckName("KRGY"); - addDeckName("KRGY-"); - addDeckName("KRGZ"); - addDeckName("KRGZ-"); - addDeckName("KRO"); - addDeckName("KRORG"); - addDeckName("KRORGX"); - addDeckName("KRORGX-"); addDeckName("KRORGY"); - addDeckName("KRORGY-"); - addDeckName("KRORGZ"); - addDeckName("KRORGZ-"); + addDeckName("KRGR"); + addDeckName("IKRGRZ-"); + addDeckName("KRGZ"); + addDeckName("IKRGX-"); + addDeckName("ISOWCRX-"); + addDeckName("KRG"); + addDeckName("IKRORWY-"); + addDeckName("SWCRZ-"); + addDeckName("KRGX"); + addDeckName("KRGY"); + addDeckName("IKRO"); + addDeckName("KRORG"); + addDeckName("KRGX-"); + addDeckName("KRGY-"); + addDeckName("SWLX"); + addDeckName("KRGZ-"); + addDeckName("KRGRX"); + addDeckName("KRGRY"); + addDeckName("IKROX-"); + addDeckName("KRO"); + addDeckName("KRORGX-"); + addDeckName("KRGRZ"); + addDeckName("KRGRX-"); + addDeckName("KRGRY-"); + addDeckName("IKRORGY"); + addDeckName("SOWCRY"); + addDeckName("KRGRZ-"); + addDeckName("IKRGRY-"); + addDeckName("IKRG"); + addDeckName("ISOWCR"); + addDeckName("IKRORWX-"); + addDeckName("IKRGX"); + addDeckName("ISOWCRX"); + addDeckName("KRORWX-"); + addDeckName("IKRGY"); + addDeckName("ISOWCRY"); + addDeckName("IKRGZ"); + addDeckName("ISOWCRZ"); + addDeckName("IKRGY-"); + addDeckName("ISOWCRY-"); + addDeckName("IKRGZ-"); + addDeckName("ISWUX"); + addDeckName("ISOWCRZ-"); + addDeckName("KRORWZ"); + addDeckName("IKRGR"); + addDeckName("IKRORWZ-"); + addDeckName("SWCRY-"); + addDeckName("IKRGRX"); + addDeckName("IKRGRY"); + addDeckName("ISGUY-"); + addDeckName("IKRGRZ"); + addDeckName("IKRORGX"); + addDeckName("SOWCRX"); + addDeckName("IKRGRX-"); + addDeckName("KROX"); + addDeckName("KROY"); + addDeckName("KROZ"); + addDeckName("KROX-"); + addDeckName("ISOGCR"); + addDeckName("IKRORWX"); + addDeckName("KROY-"); + addDeckName("KROZ-"); addDeckName("KRORW"); addDeckName("KRORWX"); - addDeckName("KRORWX-"); addDeckName("KRORWY"); addDeckName("KRORWY-"); - addDeckName("KRORWZ"); addDeckName("KRORWZ-"); - addDeckName("KROX"); - addDeckName("KROX-"); - addDeckName("KROY"); - addDeckName("KROY-"); - addDeckName("KROZ"); - addDeckName("KROZ-"); + addDeckName("KRORGX"); + addDeckName("KRORGZ"); + addDeckName("SOGCRZ-"); + addDeckName("IKROY-"); + addDeckName("KRORGY-"); + addDeckName("IKROZ-"); + addDeckName("KRORGZ-"); + addDeckName("IKRORW"); + addDeckName("IKRORWY"); + addDeckName("KRWZ-"); + addDeckName("SWCRZ"); + addDeckName("IKRORWZ"); + addDeckName("SOGCR"); + addDeckName("SWCRY"); + addDeckName("IKRORG"); + addDeckName("SOWCR"); + addDeckName("IKRORGZ"); + addDeckName("SOWCRZ"); + addDeckName("IKRORGX-"); + addDeckName("SOWCRX-"); + addDeckName("IKRORGY-"); + addDeckName("SOWCRY-"); + addDeckName("IKRORGZ-"); + addDeckName("SOWCRZ-"); addDeckName("KRW"); + addDeckName("KRWX"); + addDeckName("KRWY"); + addDeckName("KRWZ"); + addDeckName("KRWX-"); + addDeckName("KRWY-"); addDeckName("KRWR"); addDeckName("KRWRX"); - addDeckName("KRWRX-"); addDeckName("KRWRY"); - addDeckName("KRWRY-"); addDeckName("KRWRZ"); + addDeckName("KRWRX-"); + addDeckName("KRWRY-"); addDeckName("KRWRZ-"); - addDeckName("KRWX"); - addDeckName("KRWX-"); - addDeckName("KRWY"); - addDeckName("KRWY-"); - addDeckName("KRWZ"); - addDeckName("KRWZ-"); - addDeckName("SGCR"); - addDeckName("SGCRX"); - addDeckName("SGCRX-"); - addDeckName("SGCRY"); - addDeckName("SGCRY-"); - addDeckName("SGCRZ"); - addDeckName("SGCRZ-"); - addDeckName("SGU"); - addDeckName("SGUX"); - addDeckName("SGUX-"); - addDeckName("SGUY"); - addDeckName("SGUY-"); - addDeckName("SGUZ"); - addDeckName("SGUZ-"); - addDeckName("SOGCR"); - addDeckName("SOGCRX"); - addDeckName("SOGCRX-"); - addDeckName("SOGCRY"); - addDeckName("SOGCRY-"); - addDeckName("SOGCRZ"); - addDeckName("SOGCRZ-"); - addDeckName("SOWCR"); - addDeckName("SOWCRX"); - addDeckName("SOWCRX-"); - addDeckName("SOWCRY"); - addDeckName("SOWCRY-"); - addDeckName("SOWCRZ"); - addDeckName("SOWCRZ-"); - addDeckName("SWCR"); - addDeckName("SWCRX"); - addDeckName("SWCRX-"); - addDeckName("SWCRY"); - addDeckName("SWCRY-"); - addDeckName("SWCRZ"); - addDeckName("SWCRZ-"); + addDeckName("IKRW"); + addDeckName("ISGCRZ-"); + addDeckName("IKRWX"); + addDeckName("IKRWY"); + addDeckName("IKRWZ"); + addDeckName("IKRWX-"); + addDeckName("IKRWY-"); + addDeckName("IKRWZ-"); + addDeckName("IKRWR"); + addDeckName("IKRWRX"); + addDeckName("IKRWRY"); + addDeckName("IKRWRZ"); + addDeckName("IKRWRX-"); + addDeckName("IKRWRY-"); + addDeckName("IKRWRZ-"); addDeckName("SWL"); - addDeckName("SWLX"); + addDeckName("SWLZ"); + addDeckName("ISWL"); addDeckName("SWLX-"); + addDeckName("ISWLX"); + addDeckName("ISWLX-"); addDeckName("SWLY"); addDeckName("SWLY-"); - addDeckName("SWLZ"); + addDeckName("ISWCRZ"); + addDeckName("ISWLY"); + addDeckName("ISWLY-"); addDeckName("SWLZ-"); + addDeckName("ISWLZ"); + addDeckName("ISWLZ-"); + addDeckName("SGU"); + addDeckName("ISGU"); + addDeckName("SGUX"); + addDeckName("SGUX-"); + addDeckName("ISGUX"); + addDeckName("ISGUX-"); + addDeckName("SGUY"); + addDeckName("SGUY-"); + addDeckName("SGCRZ"); + addDeckName("ISGUY"); + addDeckName("SGUZ"); + addDeckName("ISWUZ-"); + addDeckName("SGUZ-"); + addDeckName("ISGUZ"); + addDeckName("ISGUZ-"); addDeckName("SWU"); + addDeckName("ISWU"); addDeckName("SWUX"); addDeckName("SWUX-"); + addDeckName("ISWUX-"); addDeckName("SWUY"); addDeckName("SWUY-"); + addDeckName("ISWUY"); + addDeckName("ISWUY-"); addDeckName("SWUZ"); addDeckName("SWUZ-"); + addDeckName("ISWUZ"); + addDeckName("SGCR"); + addDeckName("ISGCR"); + addDeckName("SGCRX"); + addDeckName("SGCRX-"); + addDeckName("ISGCRX"); + addDeckName("ISGCRX-"); + addDeckName("SGCRY"); + addDeckName("SGCRY-"); + addDeckName("ISGCRY"); + addDeckName("ISGCRY-"); + addDeckName("SGCRZ-"); + addDeckName("ISGCRZ"); + addDeckName("SOGCRX"); + addDeckName("SOGCRX-"); + addDeckName("ISOGCRX"); + addDeckName("ISOGCRX-"); + addDeckName("SOGCRY"); + addDeckName("SOGCRY-"); + addDeckName("ISOGCRY"); + addDeckName("ISOGCRY-"); + addDeckName("SOGCRZ"); + addDeckName("ISOGCRZ"); + addDeckName("ISOGCRZ-"); + addDeckName("SWCR"); + addDeckName("ISWCR"); + addDeckName("SWCRX"); + addDeckName("SWCRX-"); + addDeckName("ISWCRX"); + addDeckName("ISWCRX-"); + addDeckName("ISWCRZ-"); { ParserRecord record; { @@ -665,9 +642,7 @@ const std::string ENDPOINT_SPECIFIERS::keywordName = "ENDPOINT_SPECIFIERS"; const std::string ENDPOINT_SPECIFIERS::data::itemName = "data"; -ENDSCALE::ENDSCALE( ) : ParserKeyword("ENDSCALE") -{ - setFixedSize( (size_t) 1); +ENDSCALE::ENDSCALE() : ParserKeyword("ENDSCALE", KeywordSize(1, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("ENDSCALE"); @@ -684,12 +659,12 @@ ENDSCALE::ENDSCALE( ) : ParserKeyword("ENDSCALE") record.addItem(item); } { - ParserItem item("NUM_TABLES", ParserItem::itype::INT); + ParserItem item("NTENDP", ParserItem::itype::INT); item.setDefault( 1 ); record.addItem(item); } { - ParserItem item("NUM_NODES", ParserItem::itype::INT); + ParserItem item("NSENDP", ParserItem::itype::INT); item.setDefault( 20 ); record.addItem(item); } @@ -706,35 +681,30 @@ const std::string ENDSCALE::DIRECT::itemName = "DIRECT"; const std::string ENDSCALE::DIRECT::defaultValue = "NODIR"; const std::string ENDSCALE::IRREVERS::itemName = "IRREVERS"; const std::string ENDSCALE::IRREVERS::defaultValue = "REVERS"; -const std::string ENDSCALE::NUM_TABLES::itemName = "NUM_TABLES"; -const int ENDSCALE::NUM_TABLES::defaultValue = 1; -const std::string ENDSCALE::NUM_NODES::itemName = "NUM_NODES"; -const int ENDSCALE::NUM_NODES::defaultValue = 20; +const std::string ENDSCALE::NTENDP::itemName = "NTENDP"; +const int ENDSCALE::NTENDP::defaultValue = 1; +const std::string ENDSCALE::NSENDP::itemName = "NSENDP"; +const int ENDSCALE::NSENDP::defaultValue = 20; const std::string ENDSCALE::COMB_MODE::itemName = "COMB_MODE"; const int ENDSCALE::COMB_MODE::defaultValue = 0; -ENDSKIP::ENDSKIP( ) : ParserKeyword("ENDSKIP") -{ - setFixedSize( (size_t) 0); - addValidSectionName("EDIT"); +ENDSKIP::ENDSKIP() : ParserKeyword("ENDSKIP", KeywordSize(0, false)) { + addValidSectionName("RUNSPEC"); addValidSectionName("GRID"); + addValidSectionName("EDIT"); addValidSectionName("PROPS"); addValidSectionName("REGIONS"); - addValidSectionName("RUNSPEC"); - addValidSectionName("SCHEDULE"); addValidSectionName("SOLUTION"); addValidSectionName("SUMMARY"); + addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("ENDSKIP"); } const std::string ENDSKIP::keywordName = "ENDSKIP"; -ENKRVD::ENKRVD( ) : ParserKeyword("ENKRVD") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("ENDSCALE","NUM_TABLES",0); +ENKRVD::ENKRVD() : ParserKeyword("ENKRVD", KeywordSize("ENDSCALE", "NTENDP", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("ENKRVD"); @@ -762,10 +732,7 @@ const std::string ENKRVD::DATA::itemName = "DATA"; const double ENKRVD::DATA::defaultValue = -1.000000; -ENPCVD::ENPCVD( ) : ParserKeyword("ENPCVD") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("ENDSCALE","NUM_TABLES",0); +ENPCVD::ENPCVD() : ParserKeyword("ENPCVD", KeywordSize("ENDSCALE", "NTENDP", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("ENPCVD"); @@ -788,10 +755,7 @@ const std::string ENPCVD::DATA::itemName = "DATA"; const double ENPCVD::DATA::defaultValue = -1.000000; -ENPTVD::ENPTVD( ) : ParserKeyword("ENPTVD") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("ENDSCALE","NUM_TABLES",0); +ENPTVD::ENPTVD() : ParserKeyword("ENPTVD", KeywordSize("ENDSCALE", "NTENDP", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("ENPTVD"); @@ -820,10 +784,7 @@ const std::string ENPTVD::DATA::itemName = "DATA"; const double ENPTVD::DATA::defaultValue = -1.000000; -ENSPCVD::ENSPCVD( ) : ParserKeyword("ENSPCVD") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("ENDSCALE","NUM_TABLES",0); +ENSPCVD::ENSPCVD() : ParserKeyword("ENSPCVD", KeywordSize("ENDSCALE", "NTENDP", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("ENSPCVD"); @@ -846,9 +807,7 @@ const std::string ENSPCVD::DATA::itemName = "DATA"; const double ENSPCVD::DATA::defaultValue = -1.000000; -EPSDBGS::EPSDBGS( ) : ParserKeyword("EPSDBGS") -{ - setSizeType(SLASH_TERMINATED); +EPSDBGS::EPSDBGS() : ParserKeyword("EPSDBGS", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("PROPS"); addValidSectionName("SCHEDULE"); clearDeckNames(); @@ -916,9 +875,7 @@ const std::string EPSDBGS::GRID_NAME::itemName = "GRID_NAME"; const std::string EPSDBGS::GRID_NAME::defaultValue = ""; -EPSDEBUG::EPSDEBUG( ) : ParserKeyword("EPSDEBUG") -{ - setFixedSize( (size_t) 1); +EPSDEBUG::EPSDEBUG() : ParserKeyword("EPSDEBUG", KeywordSize(1, false)) { addValidSectionName("PROPS"); addValidSectionName("SCHEDULE"); clearDeckNames(); @@ -982,9 +939,7 @@ const std::string EPSDEBUG::CHECK_DRAIN_HYST::itemName = "CHECK_DRAIN_HYST"; const int EPSDEBUG::CHECK_DRAIN_HYST::defaultValue = 0; -EQLDIMS::EQLDIMS( ) : ParserKeyword("EQLDIMS") -{ - setFixedSize( (size_t) 1); +EQLDIMS::EQLDIMS() : ParserKeyword("EQLDIMS", KeywordSize(1, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("EQLDIMS"); @@ -1031,9 +986,7 @@ const std::string EQLDIMS::NSTRVD::itemName = "NSTRVD"; const int EQLDIMS::NSTRVD::defaultValue = 20; -EQLNUM::EQLNUM( ) : ParserKeyword("EQLNUM") -{ - setFixedSize( (size_t) 1); +EQLNUM::EQLNUM() : ParserKeyword("EQLNUM", KeywordSize(1, false)) { addValidSectionName("REGIONS"); clearDeckNames(); addDeckName("EQLNUM"); @@ -1051,9 +1004,7 @@ const std::string EQLNUM::keywordName = "EQLNUM"; const std::string EQLNUM::data::itemName = "data"; -EQLOPTS::EQLOPTS( ) : ParserKeyword("EQLOPTS") -{ - setFixedSize( (size_t) 1); +EQLOPTS::EQLOPTS() : ParserKeyword("EQLOPTS", KeywordSize(1, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("EQLOPTS"); @@ -1085,9 +1036,7 @@ const std::string EQLOPTS::OPTION3::itemName = "OPTION3"; const std::string EQLOPTS::OPTION4::itemName = "OPTION4"; -EQLZCORN::EQLZCORN( ) : ParserKeyword("EQLZCORN") -{ - setSizeType(SLASH_TERMINATED); +EQLZCORN::EQLZCORN() : ParserKeyword("EQLZCORN", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("EQLZCORN"); @@ -1162,12 +1111,10 @@ const std::string EQLZCORN::ACTION_REQ::itemName = "ACTION_REQ"; const std::string EQLZCORN::ACTION_REQ::defaultValue = "TOP"; -EQUALREG::EQUALREG( ) : ParserKeyword("EQUALREG") -{ - setSizeType(SLASH_TERMINATED); +EQUALREG::EQUALREG() : ParserKeyword("EQUALREG", KeywordSize(SLASH_TERMINATED)) { + addValidSectionName("PROPS"); addValidSectionName("EDIT"); addValidSectionName("GRID"); - addValidSectionName("PROPS"); addValidSectionName("REGIONS"); addValidSectionName("SOLUTION"); clearDeckNames(); @@ -1202,17 +1149,15 @@ EQUALREG::EQUALREG( ) : ParserKeyword("EQUALREG") const std::string EQUALREG::keywordName = "EQUALREG"; const std::string EQUALREG::ARRAY::itemName = "ARRAY"; const std::string EQUALREG::VALUE::itemName = "VALUE"; -const double EQUALREG::VALUE::defaultValue = 0.000000; +const double EQUALREG::VALUE::defaultValue = 0; const std::string EQUALREG::REGION_NUMBER::itemName = "REGION_NUMBER"; const std::string EQUALREG::REGION_NAME::itemName = "REGION_NAME"; const std::string EQUALREG::REGION_NAME::defaultValue = "M"; -EQUALS::EQUALS( ) : ParserKeyword("EQUALS") -{ - setSizeType(SLASH_TERMINATED); - addValidSectionName("EDIT"); +EQUALS::EQUALS() : ParserKeyword("EQUALS", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("GRID"); + addValidSectionName("EDIT"); addValidSectionName("PROPS"); addValidSectionName("REGIONS"); addValidSectionName("SOLUTION"); @@ -1266,10 +1211,7 @@ const std::string EQUALS::K1::itemName = "K1"; const std::string EQUALS::K2::itemName = "K2"; -EQUIL::EQUIL( ) : ParserKeyword("EQUIL") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("EQLDIMS","NTEQUL",0); +EQUIL::EQUIL() : ParserKeyword("EQUIL", KeywordSize("EQLDIMS", "NTEQUL", false, 0)) { addValidSectionName("SOLUTION"); clearDeckNames(); addDeckName("EQUIL"); @@ -1326,33 +1268,40 @@ EQUIL::EQUIL( ) : ParserKeyword("EQUIL") item.setDefault( -5 ); record.addItem(item); } + { + ParserItem item("EQLOPT04", ParserItem::itype::INT); + record.addItem(item); + } + { + ParserItem item("EQLOPT5", ParserItem::itype::INT); + record.addItem(item); + } addRecord( record ); } } const std::string EQUIL::keywordName = "EQUIL"; const std::string EQUIL::DATUM_DEPTH::itemName = "DATUM_DEPTH"; -const double EQUIL::DATUM_DEPTH::defaultValue = 0.000000; +const double EQUIL::DATUM_DEPTH::defaultValue = 0; const std::string EQUIL::DATUM_PRESSURE::itemName = "DATUM_PRESSURE"; const std::string EQUIL::OWC::itemName = "OWC"; -const double EQUIL::OWC::defaultValue = 0.000000; +const double EQUIL::OWC::defaultValue = 0; const std::string EQUIL::PC_OWC::itemName = "PC_OWC"; -const double EQUIL::PC_OWC::defaultValue = 0.000000; +const double EQUIL::PC_OWC::defaultValue = 0; const std::string EQUIL::GOC::itemName = "GOC"; -const double EQUIL::GOC::defaultValue = 0.000000; +const double EQUIL::GOC::defaultValue = 0; const std::string EQUIL::PC_GOC::itemName = "PC_GOC"; -const double EQUIL::PC_GOC::defaultValue = 0.000000; +const double EQUIL::PC_GOC::defaultValue = 0; const std::string EQUIL::BLACK_OIL_INIT::itemName = "BLACK_OIL_INIT"; const int EQUIL::BLACK_OIL_INIT::defaultValue = 0; const std::string EQUIL::BLACK_OIL_INIT_WG::itemName = "BLACK_OIL_INIT_WG"; const int EQUIL::BLACK_OIL_INIT_WG::defaultValue = 0; const std::string EQUIL::OIP_INIT::itemName = "OIP_INIT"; const int EQUIL::OIP_INIT::defaultValue = -5; +const std::string EQUIL::EQLOPT04::itemName = "EQLOPT04"; +const std::string EQUIL::EQLOPT5::itemName = "EQLOPT5"; -ESSNODE::ESSNODE( ) : ParserKeyword("ESSNODE") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTPVT",0); +ESSNODE::ESSNODE() : ParserKeyword("ESSNODE", KeywordSize("TABDIMS", "NTPVT", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("ESSNODE"); @@ -1371,9 +1320,7 @@ const std::string ESSNODE::keywordName = "ESSNODE"; const std::string ESSNODE::DATA::itemName = "DATA"; -EXCAVATE::EXCAVATE( ) : ParserKeyword("EXCAVATE") -{ - setFixedSize( (size_t) 1); +EXCAVATE::EXCAVATE() : ParserKeyword("EXCAVATE", KeywordSize(1, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("EXCAVATE"); @@ -1391,9 +1338,7 @@ const std::string EXCAVATE::keywordName = "EXCAVATE"; const std::string EXCAVATE::DATA::itemName = "DATA"; -EXCEL::EXCEL( ) : ParserKeyword("EXCEL") -{ - setFixedSize( (size_t) 0); +EXCEL::EXCEL() : ParserKeyword("EXCEL", KeywordSize(0, false)) { addValidSectionName("SUMMARY"); clearDeckNames(); addDeckName("EXCEL"); @@ -1401,9 +1346,7 @@ EXCEL::EXCEL( ) : ParserKeyword("EXCEL") const std::string EXCEL::keywordName = "EXCEL"; -EXIT::EXIT( ) : ParserKeyword("EXIT") -{ - setFixedSize( (size_t) 1); +EXIT::EXIT() : ParserKeyword("EXIT", KeywordSize(1, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("EXIT"); @@ -1422,9 +1365,7 @@ const std::string EXIT::STATUS_CODE::itemName = "STATUS_CODE"; const int EXIT::STATUS_CODE::defaultValue = 0; -EXTFIN::EXTFIN( ) : ParserKeyword("EXTFIN") -{ - setFixedSize( (size_t) 1); +EXTFIN::EXTFIN() : ParserKeyword("EXTFIN", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("EXTFIN"); @@ -1486,9 +1427,7 @@ const std::string EXTFIN::NUMCON::itemName = "NUMCON"; const std::string EXTFIN::NWMAX::itemName = "NWMAX"; -EXTHOST::EXTHOST( ) : ParserKeyword("EXTHOST") -{ - setFixedSize( (size_t) 1); +EXTHOST::EXTHOST() : ParserKeyword("EXTHOST", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("EXTHOST"); @@ -1506,17 +1445,15 @@ const std::string EXTHOST::keywordName = "EXTHOST"; const std::string EXTHOST::data::itemName = "data"; -EXTRAPMS::EXTRAPMS( ) : ParserKeyword("EXTRAPMS") -{ - setFixedSize( (size_t) 1); - addValidSectionName("EDIT"); +EXTRAPMS::EXTRAPMS() : ParserKeyword("EXTRAPMS", KeywordSize(1, false)) { + addValidSectionName("RUNSPEC"); addValidSectionName("GRID"); addValidSectionName("PROPS"); + addValidSectionName("EDIT"); addValidSectionName("REGIONS"); - addValidSectionName("RUNSPEC"); - addValidSectionName("SCHEDULE"); addValidSectionName("SOLUTION"); addValidSectionName("SUMMARY"); + addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("EXTRAPMS"); { @@ -1534,9 +1471,7 @@ const std::string EXTRAPMS::LEVEL::itemName = "LEVEL"; const int EXTRAPMS::LEVEL::defaultValue = 0; -EXTREPGL::EXTREPGL( ) : ParserKeyword("EXTREPGL") -{ - setFixedSize( (size_t) 1); +EXTREPGL::EXTREPGL() : ParserKeyword("EXTREPGL", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("EXTREPGL"); diff --git a/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/F.cpp b/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/F.cpp index 42643c141c..eab4042c71 100644 --- a/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/F.cpp +++ b/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/F.cpp @@ -1,18 +1,17 @@ -#include -#include -#include -#include + +#include +#include +#include +#include -#include +#include namespace Opm { namespace ParserKeywords { -FAULTDIM::FAULTDIM( ) : ParserKeyword("FAULTDIM") -{ - setFixedSize( (size_t) 1); +FAULTDIM::FAULTDIM() : ParserKeyword("FAULTDIM", KeywordSize(1, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("FAULTDIM"); @@ -31,9 +30,7 @@ const std::string FAULTDIM::MFSEGS::itemName = "MFSEGS"; const int FAULTDIM::MFSEGS::defaultValue = 0; -FAULTS::FAULTS( ) : ParserKeyword("FAULTS") -{ - setSizeType(SLASH_TERMINATED); +FAULTS::FAULTS() : ParserKeyword("FAULTS", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("FAULTS"); @@ -85,9 +82,7 @@ const std::string FAULTS::IZ2::itemName = "IZ2"; const std::string FAULTS::FACE::itemName = "FACE"; -FBHPDEF::FBHPDEF( ) : ParserKeyword("FBHPDEF") -{ - setFixedSize( (size_t) 1); +FBHPDEF::FBHPDEF() : ParserKeyword("FBHPDEF", KeywordSize(1, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("FBHPDEF"); @@ -111,10 +106,7 @@ const std::string FBHPDEF::TARGET_BHP::itemName = "TARGET_BHP"; const std::string FBHPDEF::LIMIT_BHP::itemName = "LIMIT_BHP"; -FHERCHBL::FHERCHBL( ) : ParserKeyword("FHERCHBL") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("NNEWTF","NTHRBL",0); +FHERCHBL::FHERCHBL() : ParserKeyword("FHERCHBL", KeywordSize("NNEWTF", "NTHRBL", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("FHERCHBL"); @@ -136,9 +128,7 @@ const std::string FHERCHBL::keywordName = "FHERCHBL"; const std::string FHERCHBL::DATA::itemName = "DATA"; -FIELD::FIELD( ) : ParserKeyword("FIELD") -{ - setFixedSize( (size_t) 0); +FIELD::FIELD() : ParserKeyword("FIELD", KeywordSize(0, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("FIELD"); @@ -146,285 +136,286 @@ FIELD::FIELD( ) : ParserKeyword("FIELD") const std::string FIELD::keywordName = "FIELD"; -FIELD_PROBE::FIELD_PROBE( ) : ParserKeyword("FIELD_PROBE") -{ - setFixedSize( (size_t) 0); +FIELD_PROBE::FIELD_PROBE() : ParserKeyword("FIELD_PROBE", KeywordSize(0, false)) { addValidSectionName("SUMMARY"); clearDeckNames(); - addDeckName("FAPI"); - addDeckName("FAQR"); - addDeckName("FAQRG"); - addDeckName("FAQT"); - addDeckName("FAQTG"); - addDeckName("FCAD"); - addDeckName("FCGC"); - addDeckName("FCIC"); - addDeckName("FCIP"); - addDeckName("FCIR"); - addDeckName("FCIT"); - addDeckName("FCPC"); - addDeckName("FCPR"); - addDeckName("FCPT"); + addDeckName("FORFF"); + addDeckName("FOPR"); addDeckName("FCSC"); - addDeckName("FEPR"); - addDeckName("FEPT"); - addDeckName("FGCR"); - addDeckName("FGCT"); - addDeckName("FGDC"); - addDeckName("FGDCQ"); - addDeckName("FGDEN"); - addDeckName("FGIMR"); - addDeckName("FGIMT"); - addDeckName("FGIP"); - addDeckName("FGIPG"); - addDeckName("FGIPL"); - addDeckName("FGIR"); - addDeckName("FGIRH"); - addDeckName("FGIRT"); - addDeckName("FGIT"); - addDeckName("FGITH"); - addDeckName("FGLIR"); - addDeckName("FGLR"); - addDeckName("FGLRH"); - addDeckName("FGOR"); - addDeckName("FGORH"); - addDeckName("FGPI"); - addDeckName("FGPI2"); - addDeckName("FGPP"); - addDeckName("FGPP2"); - addDeckName("FGPPF"); - addDeckName("FGPPF2"); - addDeckName("FGPPS"); - addDeckName("FGPPS2"); - addDeckName("FGPR"); - addDeckName("FGPRF"); - addDeckName("FGPRH"); - addDeckName("FGPRS"); - addDeckName("FGPRT"); - addDeckName("FGPT"); + addDeckName("FOPRH"); + addDeckName("FOPTF"); + addDeckName("FSPR"); addDeckName("FGPTF"); + addDeckName("FGIMT"); + addDeckName("FGPP2"); + addDeckName("FGLRH"); + addDeckName("FOPRT"); + addDeckName("FGPRF"); + addDeckName("FOPT"); + addDeckName("FOPRF"); + addDeckName("FMWPL"); + addDeckName("FGST"); + addDeckName("FOPRS"); + addDeckName("FOPI2"); + addDeckName("FOPI"); + addDeckName("FGPP"); + addDeckName("FOPTH"); + addDeckName("FGIRT"); + addDeckName("FCIP"); + addDeckName("FOPTS"); + addDeckName("FOIR"); + addDeckName("FCIT"); + addDeckName("FOIRH"); + addDeckName("FOIRT"); + addDeckName("FWIT"); + addDeckName("FOIT"); + addDeckName("FGPRS"); + addDeckName("FWPI2"); + addDeckName("FOITH"); + addDeckName("FOPP"); + addDeckName("FWPRT"); + addDeckName("FOPP2"); + addDeckName("FWPRH"); + addDeckName("FMWPO"); + addDeckName("FWPR"); + addDeckName("FWPT"); + addDeckName("FCIC"); + addDeckName("FWPTH"); + addDeckName("FWIR"); + addDeckName("FGSR"); + addDeckName("FWIRH"); + addDeckName("FWIRT"); + addDeckName("FWITH"); + addDeckName("FSPT"); + addDeckName("FGIMR"); + addDeckName("FWPP"); + addDeckName("FWPP2"); + addDeckName("FORFE"); + addDeckName("FGPI2"); + addDeckName("FMWPT"); + addDeckName("FWPI"); + addDeckName("FGPI"); + addDeckName("FWPIR"); + addDeckName("FGPPF"); + addDeckName("FGPR"); + addDeckName("FGPRH"); + addDeckName("FGPRT"); + addDeckName("FGSAT"); + addDeckName("FGPT"); addDeckName("FGPTH"); addDeckName("FGPTS"); - addDeckName("FGPV"); - addDeckName("FGQ"); - addDeckName("FGSAT"); - addDeckName("FGSPR"); - addDeckName("FGSR"); - addDeckName("FGSRL"); - addDeckName("FGSRU"); - addDeckName("FGSSP"); - addDeckName("FGST"); - addDeckName("FGSTP"); - addDeckName("FGVIS"); - addDeckName("FHPV"); - addDeckName("FJPR"); + addDeckName("FGIR"); + addDeckName("FMWIA"); + addDeckName("FSGR"); + addDeckName("FGCR"); + addDeckName("FGIRH"); + addDeckName("FGPPS2"); + addDeckName("FGIT"); + addDeckName("FOSRL"); + addDeckName("FGITH"); + addDeckName("FGPPS"); + addDeckName("FGPPF2"); + addDeckName("FMWIG"); + addDeckName("FSGT"); + addDeckName("FGCT"); addDeckName("FJPRH"); - addDeckName("FJPRT"); - addDeckName("FJPT"); - addDeckName("FJPTH"); + addDeckName("FGLIR"); + addDeckName("FGQ"); addDeckName("FLPR"); + addDeckName("FTICHEA"); + addDeckName("FSIP"); addDeckName("FLPRH"); addDeckName("FLPRT"); addDeckName("FLPT"); - addDeckName("FLPTH"); - addDeckName("FMCTG"); - addDeckName("FMCTP"); - addDeckName("FMCTW"); - addDeckName("FMIR"); - addDeckName("FMIT"); - addDeckName("FMPR"); - addDeckName("FMPT"); - addDeckName("FMWDR"); - addDeckName("FMWDT"); - addDeckName("FMWIA"); - addDeckName("FMWIG"); - addDeckName("FMWIN"); - addDeckName("FMWIP"); - addDeckName("FMWIS"); - addDeckName("FMWIT"); - addDeckName("FMWIU"); - addDeckName("FMWIV"); - addDeckName("FMWPA"); - addDeckName("FMWPG"); - addDeckName("FMWPL"); - addDeckName("FMWPO"); - addDeckName("FMWPP"); - addDeckName("FMWPR"); - addDeckName("FMWPS"); - addDeckName("FMWPT"); - addDeckName("FMWPU"); - addDeckName("FMWPV"); - addDeckName("FMWWO"); - addDeckName("FMWWT"); - addDeckName("FNIP"); - addDeckName("FNIR"); - addDeckName("FNIT"); - addDeckName("FNPR"); - addDeckName("FNPT"); - addDeckName("FNQR"); - addDeckName("FNQT"); - addDeckName("FODEN"); - addDeckName("FOE"); - addDeckName("FOEIG"); addDeckName("FOEIW"); - addDeckName("FOEW"); - addDeckName("FOEWG"); - addDeckName("FOEWW"); - addDeckName("FOGR"); - addDeckName("FOGRH"); - addDeckName("FOIP"); - addDeckName("FOIPG"); - addDeckName("FOIPL"); - addDeckName("FOIR"); - addDeckName("FOIRH"); - addDeckName("FOIRT"); - addDeckName("FOIT"); - addDeckName("FOITH"); - addDeckName("FOPI"); - addDeckName("FOPI2"); - addDeckName("FOPP"); - addDeckName("FOPP2"); - addDeckName("FOPR"); - addDeckName("FOPRF"); - addDeckName("FOPRH"); - addDeckName("FOPRS"); - addDeckName("FOPRT"); - addDeckName("FOPT"); - addDeckName("FOPTF"); - addDeckName("FOPTH"); - addDeckName("FOPTS"); - addDeckName("FOPV"); - addDeckName("FORFE"); - addDeckName("FORFF"); - addDeckName("FORFG"); - addDeckName("FORFR"); - addDeckName("FORFS"); - addDeckName("FORFW"); - addDeckName("FORFX"); - addDeckName("FORFY"); - addDeckName("FORME"); - addDeckName("FORMF"); - addDeckName("FORMG"); - addDeckName("FORMR"); - addDeckName("FORMS"); - addDeckName("FORMW"); - addDeckName("FORMX"); - addDeckName("FORMY"); - addDeckName("FOSAT"); - addDeckName("FOSPR"); - addDeckName("FOSRL"); - addDeckName("FOSRU"); - addDeckName("FOSSP"); - addDeckName("FOSTP"); - addDeckName("FOVIS"); - addDeckName("FPPC"); - addDeckName("FPPG"); - addDeckName("FPPO"); - addDeckName("FPPW"); - addDeckName("FPR"); - addDeckName("FPRGZ"); - addDeckName("FPRH"); - addDeckName("FPRP"); - addDeckName("FRPV"); - addDeckName("FRS"); - addDeckName("FRTM"); - addDeckName("FRV"); - addDeckName("FSGR"); - addDeckName("FSGT"); - addDeckName("FSIC"); - addDeckName("FSIP"); - addDeckName("FSIR"); - addDeckName("FSIT"); - addDeckName("FSPC"); - addDeckName("FSPR"); - addDeckName("FSPT"); - addDeckName("FTADSFOA"); - addDeckName("FTADSUR"); - addDeckName("FTDCYFOA"); - addDeckName("FTICHEA"); - addDeckName("FTIPTFOA"); - addDeckName("FTIPTHEA"); - addDeckName("FTIPTSUR"); - addDeckName("FTIRALK"); - addDeckName("FTIRANI"); - addDeckName("FTIRCAT"); - addDeckName("FTIRFOA"); - addDeckName("FTIRHEA"); - addDeckName("FTIRSUR"); - addDeckName("FTITALK"); - addDeckName("FTITANI"); - addDeckName("FTITCAT"); - addDeckName("FTITFOA"); - addDeckName("FTITHEA"); - addDeckName("FTITSUR"); - addDeckName("FTMOBFOA"); - addDeckName("FTPCHEA"); - addDeckName("FTPRALK"); - addDeckName("FTPRANI"); - addDeckName("FTPRCAT"); - addDeckName("FTPRFOA"); - addDeckName("FTPRHEA"); - addDeckName("FTPRSUR"); - addDeckName("FTPTALK"); - addDeckName("FTPTANI"); - addDeckName("FTPTCAT"); - addDeckName("FTPTFOA"); - addDeckName("FTPTHEA"); - addDeckName("FTPTSUR"); + addDeckName("FLPTH"); + addDeckName("FJPR"); + addDeckName("FJPRT"); + addDeckName("FJPT"); + addDeckName("FEIR"); + addDeckName("FJPTH"); + addDeckName("FVPR"); + addDeckName("FVPRT"); + addDeckName("FGDEN"); + addDeckName("FVPT"); addDeckName("FVIR"); addDeckName("FVIRT"); addDeckName("FVIT"); - addDeckName("FVPR"); - addDeckName("FVPRT"); - addDeckName("FVPT"); addDeckName("FWCT"); + addDeckName("FORFG"); addDeckName("FWCTH"); - addDeckName("FWDEN"); + addDeckName("FGOR"); + addDeckName("FGORH"); + addDeckName("FOGR"); + addDeckName("FORMX"); + addDeckName("FOGRH"); addDeckName("FWGR"); addDeckName("FWGRH"); - addDeckName("FWIP"); - addDeckName("FWIR"); - addDeckName("FWIRH"); - addDeckName("FWIRT"); - addDeckName("FWIT"); - addDeckName("FWITH"); - addDeckName("FWPI"); - addDeckName("FWPI2"); - addDeckName("FWPIR"); - addDeckName("FWPP"); - addDeckName("FWPP2"); - addDeckName("FWPR"); - addDeckName("FWPRH"); - addDeckName("FWPRT"); - addDeckName("FWPT"); - addDeckName("FWPTH"); - addDeckName("FWPV"); - addDeckName("FWSAT"); + addDeckName("FMPT"); + addDeckName("FGLR"); + addDeckName("FPRP"); + addDeckName("FMCTP"); + addDeckName("FMCTW"); + addDeckName("FOVIS"); + addDeckName("FMCTG"); + addDeckName("FMWPR"); + addDeckName("FMWPA"); + addDeckName("FMWPU"); + addDeckName("FMWPG"); + addDeckName("FMWPS"); + addDeckName("FMWPV"); + addDeckName("FMWPP"); + addDeckName("FMWIT"); + addDeckName("FMWIN"); + addDeckName("FMWIU"); + addDeckName("FMWIS"); + addDeckName("FMWIV"); + addDeckName("FMWIP"); + addDeckName("FMWDR"); + addDeckName("FMWDT"); + addDeckName("FMWWO"); + addDeckName("FMWWT"); + addDeckName("FEPR"); + addDeckName("FTITSUR"); + addDeckName("FEPT"); + addDeckName("FGSPR"); + addDeckName("FGSRL"); + addDeckName("FGSRU"); + addDeckName("FGSSP"); + addDeckName("FMIR"); + addDeckName("FGSTP"); + addDeckName("FOSPR"); + addDeckName("FOSRU"); + addDeckName("FOSSP"); + addDeckName("FOSTP"); addDeckName("FWSPR"); + addDeckName("FTPTCAT"); addDeckName("FWSRL"); addDeckName("FWSRU"); addDeckName("FWSSP"); addDeckName("FWSTP"); + addDeckName("FOSAT"); + addDeckName("FOIP"); + addDeckName("FOIPR"); + addDeckName("FOIPL"); + addDeckName("FOIPG"); + addDeckName("FPPO"); + addDeckName("FMIT"); + addDeckName("FODEN"); + addDeckName("FWSAT"); + addDeckName("FWIP"); + addDeckName("FWIPR"); + addDeckName("FPPW"); + addDeckName("FORMS"); addDeckName("FWVIS"); + addDeckName("FWDEN"); + addDeckName("FGIP"); + addDeckName("FGIPR"); + addDeckName("FGIPL"); + addDeckName("FGIPG"); + addDeckName("FPPG"); + addDeckName("FGVIS"); + addDeckName("FCAD"); + addDeckName("FPR"); + addDeckName("FPRH"); + addDeckName("FPRGZ"); + addDeckName("FRS"); + addDeckName("FSIR"); + addDeckName("FRV"); + addDeckName("FPPC"); + addDeckName("FRPV"); + addDeckName("FOPV"); + addDeckName("FWPV"); + addDeckName("FGPV"); + addDeckName("FHPV"); + addDeckName("FRTM"); + addDeckName("FOE"); + addDeckName("FOEW"); + addDeckName("FAPI"); + addDeckName("FOEWW"); + addDeckName("FOEIG"); + addDeckName("FOEWG"); + addDeckName("FTPTALK"); + addDeckName("FORMR"); + addDeckName("FORMW"); + addDeckName("FNIT"); + addDeckName("FORMG"); + addDeckName("FORME"); + addDeckName("FORMF"); + addDeckName("FORMY"); + addDeckName("FORFR"); + addDeckName("FORFW"); + addDeckName("FORFS"); + addDeckName("FORFX"); + addDeckName("FORFY"); + addDeckName("FAQR"); + addDeckName("FAQT"); + addDeckName("FAQRG"); + addDeckName("FAQTG"); + addDeckName("FNQR"); + addDeckName("FNQT"); + addDeckName("FSIT"); + addDeckName("FSPC"); + addDeckName("FSIC"); + addDeckName("FTPRANI"); + addDeckName("FTPTANI"); + addDeckName("FTIRANI"); + addDeckName("FTITANI"); + addDeckName("FTPTSUR"); + addDeckName("FTPRCAT"); + addDeckName("FTIRCAT"); + addDeckName("FTITCAT"); + addDeckName("FTPCHEA"); + addDeckName("FTPRHEA"); + addDeckName("FTPTHEA"); + addDeckName("FTIRHEA"); + addDeckName("FTITHEA"); + addDeckName("FTIPTHEA"); + addDeckName("FMPR"); + addDeckName("FCGC"); + addDeckName("FTPRFOA"); + addDeckName("FTPTFOA"); + addDeckName("FTIRFOA"); + addDeckName("FTITFOA"); + addDeckName("FNIP"); + addDeckName("FTIPTFOA"); + addDeckName("FTADSFOA"); + addDeckName("FTDCYFOA"); + addDeckName("FTMOBFOA"); + addDeckName("FGDC"); + addDeckName("FGDCQ"); + addDeckName("FEIT"); + addDeckName("FCPR"); + addDeckName("FCPC"); + addDeckName("FCPT"); + addDeckName("FCIR"); addDeckName("PSSPR"); - addDeckName("PSSSC"); - addDeckName("PSSSG"); addDeckName("PSSSO"); addDeckName("PSSSW"); + addDeckName("PSSSG"); + addDeckName("PSSSC"); + addDeckName("FNPR"); + addDeckName("FNPT"); + addDeckName("FNIR"); + addDeckName("FTPRSUR"); + addDeckName("FTIRALK"); + addDeckName("FTIRSUR"); + addDeckName("FTIPTSUR"); + addDeckName("FTADSUR"); + addDeckName("FTPRALK"); + addDeckName("FTITALK"); setMatchRegex("FU.+|FTPR.+|FTPT.+|FTPC.+|FTIR.+|FTIT.+|FTIC.+|FTIPT.+|FTIPF.+|FTIPS|FTIP[1-9][0-9]*.+|FTPR.+|FTPT.+|FTPC.+|FTIR.+|FTIT.+|FTIC.+|FTADS.+|FTDCY.+|FTIRF.+|FTIRS.+|FTPRF.+|FTPRS.+|FTITF.+|FTITS.+|FTPTF.+|FTPTS.+|FTICF.+|FTICS.+|FTPCF.+|FTPCS.+"); } const std::string FIELD_PROBE::keywordName = "FIELD_PROBE"; -FILEUNIT::FILEUNIT( ) : ParserKeyword("FILEUNIT") -{ - setFixedSize( (size_t) 1); - addValidSectionName("EDIT"); +FILEUNIT::FILEUNIT() : ParserKeyword("FILEUNIT", KeywordSize(1, false)) { addValidSectionName("GRID"); + addValidSectionName("EDIT"); addValidSectionName("PROPS"); addValidSectionName("REGIONS"); - addValidSectionName("SCHEDULE"); addValidSectionName("SOLUTION"); + addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("FILEUNIT"); { @@ -440,9 +431,7 @@ const std::string FILEUNIT::keywordName = "FILEUNIT"; const std::string FILEUNIT::FILE_UNIT_SYSTEM::itemName = "FILE_UNIT_SYSTEM"; -FILLEPS::FILLEPS( ) : ParserKeyword("FILLEPS") -{ - setFixedSize( (size_t) 0); +FILLEPS::FILLEPS() : ParserKeyword("FILLEPS", KeywordSize(0, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("FILLEPS"); @@ -450,9 +439,7 @@ FILLEPS::FILLEPS( ) : ParserKeyword("FILLEPS") const std::string FILLEPS::keywordName = "FILLEPS"; -FIPNUM::FIPNUM( ) : ParserKeyword("FIPNUM") -{ - setFixedSize( (size_t) 1); +FIPNUM::FIPNUM() : ParserKeyword("FIPNUM", KeywordSize(1, false)) { addValidSectionName("REGIONS"); clearDeckNames(); addDeckName("FIPNUM"); @@ -470,9 +457,7 @@ const std::string FIPNUM::keywordName = "FIPNUM"; const std::string FIPNUM::data::itemName = "data"; -FIPOWG::FIPOWG( ) : ParserKeyword("FIPOWG") -{ - setFixedSize( (size_t) 0); +FIPOWG::FIPOWG() : ParserKeyword("FIPOWG", KeywordSize(0, false)) { addValidSectionName("REGIONS"); clearDeckNames(); addDeckName("FIPOWG"); @@ -480,9 +465,7 @@ FIPOWG::FIPOWG( ) : ParserKeyword("FIPOWG") const std::string FIPOWG::keywordName = "FIPOWG"; -FIPSEP::FIPSEP( ) : ParserKeyword("FIPSEP") -{ - setSizeType(SLASH_TERMINATED); +FIPSEP::FIPSEP() : ParserKeyword("FIPSEP", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SOLUTION"); clearDeckNames(); addDeckName("FIPSEP"); @@ -565,9 +548,7 @@ const std::string FIPSEP::DENSITY_EVAL_GAS_TEMP::itemName = "DENSITY_EVAL_GAS_TE const std::string FIPSEP::DENSITY_EVAL_PRESSURE_TEMP::itemName = "DENSITY_EVAL_PRESSURE_TEMP"; -FIP_PROBE::FIP_PROBE( ) : ParserKeyword("FIP_PROBE") -{ - setFixedSize( (size_t) 1); +FIP_PROBE::FIP_PROBE() : ParserKeyword("FIP_PROBE", KeywordSize(1, false)) { addValidSectionName("REGIONS"); clearDeckNames(); setMatchRegex("FIP.+"); @@ -585,9 +566,7 @@ const std::string FIP_PROBE::keywordName = "FIP_PROBE"; const std::string FIP_PROBE::data::itemName = "data"; -FLUXNUM::FLUXNUM( ) : ParserKeyword("FLUXNUM") -{ - setFixedSize( (size_t) 1); +FLUXNUM::FLUXNUM() : ParserKeyword("FLUXNUM", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("FLUXNUM"); @@ -605,9 +584,7 @@ const std::string FLUXNUM::keywordName = "FLUXNUM"; const std::string FLUXNUM::data::itemName = "data"; -FLUXREG::FLUXREG( ) : ParserKeyword("FLUXREG") -{ - setFixedSize( (size_t) 1); +FLUXREG::FLUXREG() : ParserKeyword("FLUXREG", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("FLUXREG"); @@ -625,19 +602,24 @@ const std::string FLUXREG::keywordName = "FLUXREG"; const std::string FLUXREG::data::itemName = "data"; -FLUXTYPE::FLUXTYPE( ) : ParserKeyword("FLUXTYPE") -{ - setFixedSize( (size_t) 1); +FLUXTYPE::FLUXTYPE() : ParserKeyword("FLUXTYPE", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("FLUXTYPE"); + { + ParserRecord record; + { + ParserItem item("BC_TYPE", ParserItem::itype::STRING); + record.addItem(item); + } + addRecord( record ); + } } const std::string FLUXTYPE::keywordName = "FLUXTYPE"; +const std::string FLUXTYPE::BC_TYPE::itemName = "BC_TYPE"; -FMTHMD::FMTHMD( ) : ParserKeyword("FMTHMD") -{ - setFixedSize( (size_t) 0); +FMTHMD::FMTHMD() : ParserKeyword("FMTHMD", KeywordSize(0, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("FMTHMD"); @@ -645,9 +627,7 @@ FMTHMD::FMTHMD( ) : ParserKeyword("FMTHMD") const std::string FMTHMD::keywordName = "FMTHMD"; -FMTIN::FMTIN( ) : ParserKeyword("FMTIN") -{ - setFixedSize( (size_t) 0); +FMTIN::FMTIN() : ParserKeyword("FMTIN", KeywordSize(0, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("FMTIN"); @@ -655,9 +635,7 @@ FMTIN::FMTIN( ) : ParserKeyword("FMTIN") const std::string FMTIN::keywordName = "FMTIN"; -FMTOUT::FMTOUT( ) : ParserKeyword("FMTOUT") -{ - setFixedSize( (size_t) 0); +FMTOUT::FMTOUT() : ParserKeyword("FMTOUT", KeywordSize(0, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("FMTOUT"); @@ -665,9 +643,7 @@ FMTOUT::FMTOUT( ) : ParserKeyword("FMTOUT") const std::string FMTOUT::keywordName = "FMTOUT"; -FMWSET::FMWSET( ) : ParserKeyword("FMWSET") -{ - setFixedSize( (size_t) 0); +FMWSET::FMWSET() : ParserKeyword("FMWSET", KeywordSize(0, false)) { addValidSectionName("SUMMARY"); clearDeckNames(); addDeckName("FMWSET"); @@ -675,9 +651,7 @@ FMWSET::FMWSET( ) : ParserKeyword("FMWSET") const std::string FMWSET::keywordName = "FMWSET"; -FOAM::FOAM( ) : ParserKeyword("FOAM") -{ - setFixedSize( (size_t) 0); +FOAM::FOAM() : ParserKeyword("FOAM", KeywordSize(0, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("FOAM"); @@ -685,10 +659,7 @@ FOAM::FOAM( ) : ParserKeyword("FOAM") const std::string FOAM::keywordName = "FOAM"; -FOAMADS::FOAMADS( ) : ParserKeyword("FOAMADS") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTSFUN",0); +FOAMADS::FOAMADS() : ParserKeyword("FOAMADS", KeywordSize("TABDIMS", "NTSFUN", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("FOAMADS"); @@ -708,10 +679,7 @@ const std::string FOAMADS::keywordName = "FOAMADS"; const std::string FOAMADS::DATA::itemName = "DATA"; -FOAMDCYO::FOAMDCYO( ) : ParserKeyword("FOAMDCYO") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTSFUN",0); +FOAMDCYO::FOAMDCYO() : ParserKeyword("FOAMDCYO", KeywordSize("TABDIMS", "NTSFUN", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("FOAMDCYO"); @@ -731,10 +699,7 @@ const std::string FOAMDCYO::keywordName = "FOAMDCYO"; const std::string FOAMDCYO::DATA::itemName = "DATA"; -FOAMDCYW::FOAMDCYW( ) : ParserKeyword("FOAMDCYW") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTSFUN",0); +FOAMDCYW::FOAMDCYW() : ParserKeyword("FOAMDCYW", KeywordSize("TABDIMS", "NTSFUN", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("FOAMDCYW"); @@ -754,17 +719,14 @@ const std::string FOAMDCYW::keywordName = "FOAMDCYW"; const std::string FOAMDCYW::DATA::itemName = "DATA"; -FOAMFCN::FOAMFCN( ) : ParserKeyword("FOAMFCN") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTSFUN",0); +FOAMFCN::FOAMFCN() : ParserKeyword("FOAMFCN", KeywordSize("TABDIMS", "NTSFUN", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("FOAMFCN"); { ParserRecord record; { - ParserItem item("CAPILLARY_NUMBER", ParserItem::itype::INT); + ParserItem item("CAPILLARY_NUMBER", ParserItem::itype::DOUBLE); record.addItem(item); } { @@ -782,10 +744,7 @@ const std::string FOAMFCN::EXP::itemName = "EXP"; const double FOAMFCN::EXP::defaultValue = 1.000000; -FOAMFRM::FOAMFRM( ) : ParserKeyword("FOAMFRM") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTSFUN",0); +FOAMFRM::FOAMFRM() : ParserKeyword("FOAMFRM", KeywordSize("TABDIMS", "NTSFUN", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("FOAMFRM"); @@ -804,11 +763,11 @@ const std::string FOAMFRM::keywordName = "FOAMFRM"; const std::string FOAMFRM::DATA::itemName = "DATA"; -FOAMFSC::FOAMFSC( ) : ParserKeyword("FOAMFSC") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTSFUN",0); +FOAMFSC::FOAMFSC() : ParserKeyword("FOAMFSC", KeywordSize("TABDIMS", "NTSFUN", false, 0)) { addValidSectionName("PROPS"); + setRequiredKeywords({ + "FOAMROCK", + }); clearDeckNames(); addDeckName("FOAMFSC"); { @@ -830,6 +789,12 @@ FOAMFSC::FOAMFSC( ) : ParserKeyword("FOAMFSC") item.push_backDimension("FoamSurfactantConcentration"); record.addItem(item); } + { + ParserItem item("MIN_WAT_SAT", ParserItem::itype::DOUBLE); + item.setDefault( double(1e-06) ); + item.push_backDimension("1"); + record.addItem(item); + } addRecord( record ); } } @@ -838,13 +803,12 @@ const std::string FOAMFSC::REF_SURF_CONC::itemName = "REF_SURF_CONC"; const std::string FOAMFSC::EXPONENT::itemName = "EXPONENT"; const double FOAMFSC::EXPONENT::defaultValue = 1.000000; const std::string FOAMFSC::MIN_SURF_CONC::itemName = "MIN_SURF_CONC"; -const double FOAMFSC::MIN_SURF_CONC::defaultValue = 0.000000; +const double FOAMFSC::MIN_SURF_CONC::defaultValue = 1e-20; +const std::string FOAMFSC::MIN_WAT_SAT::itemName = "MIN_WAT_SAT"; +const double FOAMFSC::MIN_WAT_SAT::defaultValue = 1e-06; -FOAMFSO::FOAMFSO( ) : ParserKeyword("FOAMFSO") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTSFUN",0); +FOAMFSO::FOAMFSO() : ParserKeyword("FOAMFSO", KeywordSize("TABDIMS", "NTSFUN", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("FOAMFSO"); @@ -864,10 +828,7 @@ const std::string FOAMFSO::keywordName = "FOAMFSO"; const std::string FOAMFSO::DATA::itemName = "DATA"; -FOAMFST::FOAMFST( ) : ParserKeyword("FOAMFST") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTSFUN",0); +FOAMFST::FOAMFST() : ParserKeyword("FOAMFST", KeywordSize("TABDIMS", "NTSFUN", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("FOAMFST"); @@ -887,10 +848,7 @@ const std::string FOAMFST::keywordName = "FOAMFST"; const std::string FOAMFST::DATA::itemName = "DATA"; -FOAMFSW::FOAMFSW( ) : ParserKeyword("FOAMFSW") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTSFUN",0); +FOAMFSW::FOAMFSW() : ParserKeyword("FOAMFSW", KeywordSize("TABDIMS", "NTSFUN", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("FOAMFSW"); @@ -910,10 +868,7 @@ const std::string FOAMFSW::keywordName = "FOAMFSW"; const std::string FOAMFSW::DATA::itemName = "DATA"; -FOAMMOB::FOAMMOB( ) : ParserKeyword("FOAMMOB") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTPVT",0); +FOAMMOB::FOAMMOB() : ParserKeyword("FOAMMOB", KeywordSize("TABDIMS", "NTPVT", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("FOAMMOB"); @@ -933,10 +888,7 @@ const std::string FOAMMOB::keywordName = "FOAMMOB"; const std::string FOAMMOB::DATA::itemName = "DATA"; -FOAMMOBP::FOAMMOBP( ) : ParserKeyword("FOAMMOBP") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTPVT",0); +FOAMMOBP::FOAMMOBP() : ParserKeyword("FOAMMOBP", KeywordSize("TABDIMS", "NTPVT", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("FOAMMOBP"); @@ -956,10 +908,7 @@ const std::string FOAMMOBP::keywordName = "FOAMMOBP"; const std::string FOAMMOBP::DATA::itemName = "DATA"; -FOAMMOBS::FOAMMOBS( ) : ParserKeyword("FOAMMOBS") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTPVT",0); +FOAMMOBS::FOAMMOBS() : ParserKeyword("FOAMMOBS", KeywordSize("TABDIMS", "NTPVT", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("FOAMMOBS"); @@ -979,9 +928,7 @@ const std::string FOAMMOBS::keywordName = "FOAMMOBS"; const std::string FOAMMOBS::DATA::itemName = "DATA"; -FOAMOPTS::FOAMOPTS( ) : ParserKeyword("FOAMOPTS") -{ - setFixedSize( (size_t) 1); +FOAMOPTS::FOAMOPTS() : ParserKeyword("FOAMOPTS", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("FOAMOPTS"); @@ -994,6 +941,7 @@ FOAMOPTS::FOAMOPTS( ) : ParserKeyword("FOAMOPTS") } { ParserItem item("MODEL", ParserItem::itype::STRING); + item.setDefault( std::string("TAB") ); record.addItem(item); } addRecord( record ); @@ -1003,12 +951,10 @@ const std::string FOAMOPTS::keywordName = "FOAMOPTS"; const std::string FOAMOPTS::TRANSPORT_PHASE::itemName = "TRANSPORT_PHASE"; const std::string FOAMOPTS::TRANSPORT_PHASE::defaultValue = "GAS"; const std::string FOAMOPTS::MODEL::itemName = "MODEL"; +const std::string FOAMOPTS::MODEL::defaultValue = "TAB"; -FOAMROCK::FOAMROCK( ) : ParserKeyword("FOAMROCK") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTSFUN",0); +FOAMROCK::FOAMROCK() : ParserKeyword("FOAMROCK", KeywordSize("TABDIMS", "NTSFUN", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("FOAMROCK"); @@ -1033,17 +979,15 @@ const int FOAMROCK::ADSORPTION_INDEX::defaultValue = 1; const std::string FOAMROCK::ROCK_DENSITY::itemName = "ROCK_DENSITY"; -FORMFEED::FORMFEED( ) : ParserKeyword("FORMFEED") -{ - setFixedSize( (size_t) 1); - addValidSectionName("EDIT"); +FORMFEED::FORMFEED() : ParserKeyword("FORMFEED", KeywordSize(1, false)) { + addValidSectionName("RUNSPEC"); addValidSectionName("GRID"); + addValidSectionName("EDIT"); addValidSectionName("PROPS"); addValidSectionName("REGIONS"); - addValidSectionName("RUNSPEC"); - addValidSectionName("SCHEDULE"); addValidSectionName("SOLUTION"); addValidSectionName("SUMMARY"); + addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("FORMFEED"); { @@ -1061,9 +1005,7 @@ const std::string FORMFEED::VALUE::itemName = "VALUE"; const int FORMFEED::VALUE::defaultValue = 1; -FRICTION::FRICTION( ) : ParserKeyword("FRICTION") -{ - setFixedSize( (size_t) 1); +FRICTION::FRICTION() : ParserKeyword("FRICTION", KeywordSize(1, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("FRICTION"); @@ -1089,9 +1031,7 @@ const std::string FRICTION::NWFRIB::itemName = "NWFRIB"; const int FRICTION::NWFRIB::defaultValue = 1; -FULLIMP::FULLIMP( ) : ParserKeyword("FULLIMP") -{ - setFixedSize( (size_t) 0); +FULLIMP::FULLIMP() : ParserKeyword("FULLIMP", KeywordSize(0, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("FULLIMP"); diff --git a/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/G.cpp b/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/G.cpp index 04475902c3..f946f9d7e0 100644 --- a/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/G.cpp +++ b/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/G.cpp @@ -1,18 +1,17 @@ -#include -#include -#include -#include + +#include +#include +#include +#include -#include +#include namespace Opm { namespace ParserKeywords { -GAS::GAS( ) : ParserKeyword("GAS") -{ - setFixedSize( (size_t) 0); +GAS::GAS() : ParserKeyword("GAS", KeywordSize(0, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("GAS"); @@ -20,9 +19,7 @@ GAS::GAS( ) : ParserKeyword("GAS") const std::string GAS::keywordName = "GAS"; -GASBEGIN::GASBEGIN( ) : ParserKeyword("GASBEGIN") -{ - setFixedSize( (size_t) 0); +GASBEGIN::GASBEGIN() : ParserKeyword("GASBEGIN", KeywordSize(0, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("GASBEGIN"); @@ -30,9 +27,7 @@ GASBEGIN::GASBEGIN( ) : ParserKeyword("GASBEGIN") const std::string GASBEGIN::keywordName = "GASBEGIN"; -GASCONC::GASCONC( ) : ParserKeyword("GASCONC") -{ - setFixedSize( (size_t) 1); +GASCONC::GASCONC() : ParserKeyword("GASCONC", KeywordSize(1, false)) { addValidSectionName("SOLUTION"); clearDeckNames(); addDeckName("GASCONC"); @@ -51,10 +46,7 @@ const std::string GASCONC::keywordName = "GASCONC"; const std::string GASCONC::data::itemName = "data"; -GASDENT::GASDENT( ) : ParserKeyword("GASDENT") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTPVT",0); +GASDENT::GASDENT() : ParserKeyword("GASDENT", KeywordSize("TABDIMS", "NTPVT", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("GASDENT"); @@ -85,14 +77,12 @@ const std::string GASDENT::keywordName = "GASDENT"; const std::string GASDENT::REFERENCE_TEMPERATURE::itemName = "REFERENCE_TEMPERATURE"; const double GASDENT::REFERENCE_TEMPERATURE::defaultValue = 293.150000; const std::string GASDENT::EXPANSION_COEFF_LINEAR::itemName = "EXPANSION_COEFF_LINEAR"; -const double GASDENT::EXPANSION_COEFF_LINEAR::defaultValue = 0.000000; +const double GASDENT::EXPANSION_COEFF_LINEAR::defaultValue = 0; const std::string GASDENT::EXPANSION_COEFF_QUADRATIC::itemName = "EXPANSION_COEFF_QUADRATIC"; -const double GASDENT::EXPANSION_COEFF_QUADRATIC::defaultValue = 0.000000; +const double GASDENT::EXPANSION_COEFF_QUADRATIC::defaultValue = 0; -GASEND::GASEND( ) : ParserKeyword("GASEND") -{ - setFixedSize( (size_t) 0); +GASEND::GASEND() : ParserKeyword("GASEND", KeywordSize(0, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("GASEND"); @@ -100,9 +90,7 @@ GASEND::GASEND( ) : ParserKeyword("GASEND") const std::string GASEND::keywordName = "GASEND"; -GASFCOMP::GASFCOMP( ) : ParserKeyword("GASFCOMP") -{ - setSizeType(SLASH_TERMINATED); +GASFCOMP::GASFCOMP() : ParserKeyword("GASFCOMP", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("GASFCOMP"); @@ -146,18 +134,16 @@ const std::string GASFCOMP::GROUP::itemName = "GROUP"; const std::string GASFCOMP::VFP_TABLE_NUM::itemName = "VFP_TABLE_NUM"; const int GASFCOMP::VFP_TABLE_NUM::defaultValue = 0; const std::string GASFCOMP::ARTFICIAL_LIFT_QNTY::itemName = "ARTFICIAL_LIFT_QNTY"; -const double GASFCOMP::ARTFICIAL_LIFT_QNTY::defaultValue = 0.000000; +const double GASFCOMP::ARTFICIAL_LIFT_QNTY::defaultValue = 0; const std::string GASFCOMP::GAS_CONSUMPTION_RATE::itemName = "GAS_CONSUMPTION_RATE"; -const double GASFCOMP::GAS_CONSUMPTION_RATE::defaultValue = 0.000000; +const double GASFCOMP::GAS_CONSUMPTION_RATE::defaultValue = 0; const std::string GASFCOMP::COMPRESSION_LVL::itemName = "COMPRESSION_LVL"; const int GASFCOMP::COMPRESSION_LVL::defaultValue = 1; const std::string GASFCOMP::ACTION_SEQ_NUM::itemName = "ACTION_SEQ_NUM"; const int GASFCOMP::ACTION_SEQ_NUM::defaultValue = 1; -GASFDECR::GASFDECR( ) : ParserKeyword("GASFDECR") -{ - setFixedSize( (size_t) 1); +GASFDECR::GASFDECR() : ParserKeyword("GASFDECR", KeywordSize(1, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("GASFDECR"); @@ -228,34 +214,32 @@ GASFDECR::GASFDECR( ) : ParserKeyword("GASFDECR") } const std::string GASFDECR::keywordName = "GASFDECR"; const std::string GASFDECR::JAN::itemName = "JAN"; -const double GASFDECR::JAN::defaultValue = 0.000000; +const double GASFDECR::JAN::defaultValue = 0; const std::string GASFDECR::FEB::itemName = "FEB"; -const double GASFDECR::FEB::defaultValue = 0.000000; +const double GASFDECR::FEB::defaultValue = 0; const std::string GASFDECR::MAR::itemName = "MAR"; -const double GASFDECR::MAR::defaultValue = 0.000000; +const double GASFDECR::MAR::defaultValue = 0; const std::string GASFDECR::APR::itemName = "APR"; -const double GASFDECR::APR::defaultValue = 0.000000; +const double GASFDECR::APR::defaultValue = 0; const std::string GASFDECR::MAY::itemName = "MAY"; -const double GASFDECR::MAY::defaultValue = 0.000000; +const double GASFDECR::MAY::defaultValue = 0; const std::string GASFDECR::JUN::itemName = "JUN"; -const double GASFDECR::JUN::defaultValue = 0.000000; +const double GASFDECR::JUN::defaultValue = 0; const std::string GASFDECR::JUL::itemName = "JUL"; -const double GASFDECR::JUL::defaultValue = 0.000000; +const double GASFDECR::JUL::defaultValue = 0; const std::string GASFDECR::AUG::itemName = "AUG"; -const double GASFDECR::AUG::defaultValue = 0.000000; +const double GASFDECR::AUG::defaultValue = 0; const std::string GASFDECR::SEP::itemName = "SEP"; -const double GASFDECR::SEP::defaultValue = 0.000000; +const double GASFDECR::SEP::defaultValue = 0; const std::string GASFDECR::OCT::itemName = "OCT"; -const double GASFDECR::OCT::defaultValue = 0.000000; +const double GASFDECR::OCT::defaultValue = 0; const std::string GASFDECR::NOV::itemName = "NOV"; -const double GASFDECR::NOV::defaultValue = 0.000000; +const double GASFDECR::NOV::defaultValue = 0; const std::string GASFDECR::DEC::itemName = "DEC"; -const double GASFDECR::DEC::defaultValue = 0.000000; +const double GASFDECR::DEC::defaultValue = 0; -GASFDELC::GASFDELC( ) : ParserKeyword("GASFDELC") -{ - setFixedSize( (size_t) 1); +GASFDELC::GASFDELC() : ParserKeyword("GASFDELC", KeywordSize(1, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("GASFDELC"); @@ -272,9 +256,7 @@ const std::string GASFDELC::keywordName = "GASFDELC"; const std::string GASFDELC::VALUE::itemName = "VALUE"; -GASFIELD::GASFIELD( ) : ParserKeyword("GASFIELD") -{ - setFixedSize( (size_t) 1); +GASFIELD::GASFIELD() : ParserKeyword("GASFIELD", KeywordSize(1, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("GASFIELD"); @@ -300,9 +282,7 @@ const std::string GASFIELD::FLAG_IT::itemName = "FLAG_IT"; const std::string GASFIELD::FLAG_IT::defaultValue = "NO"; -GASFTARG::GASFTARG( ) : ParserKeyword("GASFTARG") -{ - setFixedSize( (size_t) 1); +GASFTARG::GASFTARG() : ParserKeyword("GASFTARG", KeywordSize(1, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("GASFTARG"); @@ -386,9 +366,35 @@ const std::string GASFTARG::NOV::itemName = "NOV"; const std::string GASFTARG::DEC::itemName = "DEC"; -GASMONTH::GASMONTH( ) : ParserKeyword("GASMONTH") -{ - setFixedSize( (size_t) 1); +GASJT::GASJT() : ParserKeyword("GASJT", KeywordSize("TABDIMS", "NTPVT", false, 0)) { + addValidSectionName("PROPS"); + clearDeckNames(); + addDeckName("GASJT"); + { + ParserRecord record; + { + ParserItem item("PREF", ParserItem::itype::DOUBLE); + item.setDefault( double(1.013200) ); + item.push_backDimension("Pressure"); + record.addItem(item); + } + { + ParserItem item("JOULE_THOMSON_COEFFICIENT", ParserItem::itype::DOUBLE); + item.setDefault( double(0) ); + item.push_backDimension("Temperature/Pressure"); + record.addItem(item); + } + addRecord( record ); + } +} +const std::string GASJT::keywordName = "GASJT"; +const std::string GASJT::PREF::itemName = "PREF"; +const double GASJT::PREF::defaultValue = 1.013200; +const std::string GASJT::JOULE_THOMSON_COEFFICIENT::itemName = "JOULE_THOMSON_COEFFICIENT"; +const double GASJT::JOULE_THOMSON_COEFFICIENT::defaultValue = 0; + + +GASMONTH::GASMONTH() : ParserKeyword("GASMONTH", KeywordSize(1, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("GASMONTH"); @@ -412,9 +418,7 @@ const std::string GASMONTH::WRITE_REPORT::itemName = "WRITE_REPORT"; const std::string GASMONTH::WRITE_REPORT::defaultValue = "NO"; -GASPERIO::GASPERIO( ) : ParserKeyword("GASPERIO") -{ - setFixedSize( (size_t) 1); +GASPERIO::GASPERIO() : ParserKeyword("GASPERIO", KeywordSize(1, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("GASPERIO"); @@ -479,7 +483,7 @@ const std::string GASPERIO::SWING_REQ::defaultValue = "PER"; const std::string GASPERIO::LIMIT_TIMESTEPS::itemName = "LIMIT_TIMESTEPS"; const std::string GASPERIO::LIMIT_TIMESTEPS::defaultValue = "YES"; const std::string GASPERIO::LIMIT_DCQ_RED_FACTOR::itemName = "LIMIT_DCQ_RED_FACTOR"; -const double GASPERIO::LIMIT_DCQ_RED_FACTOR::defaultValue = 0.000000; +const double GASPERIO::LIMIT_DCQ_RED_FACTOR::defaultValue = 0; const std::string GASPERIO::ANTICIPATED_DCQ_RED_FACTOR::itemName = "ANTICIPATED_DCQ_RED_FACTOR"; const double GASPERIO::ANTICIPATED_DCQ_RED_FACTOR::defaultValue = 1.000000; const std::string GASPERIO::MAX_ITERATIONS::itemName = "MAX_ITERATIONS"; @@ -488,9 +492,7 @@ const std::string GASPERIO::DCQ_CONV_TOLERANCE::itemName = "DCQ_CONV_TOLERANCE"; const double GASPERIO::DCQ_CONV_TOLERANCE::defaultValue = 0.100000; -GASSATC::GASSATC( ) : ParserKeyword("GASSATC") -{ - setFixedSize( (size_t) 1); +GASSATC::GASSATC() : ParserKeyword("GASSATC", KeywordSize(1, false)) { addValidSectionName("SOLUTION"); clearDeckNames(); addDeckName("GASSATC"); @@ -509,10 +511,7 @@ const std::string GASSATC::keywordName = "GASSATC"; const std::string GASSATC::data::itemName = "data"; -GASVISCT::GASVISCT( ) : ParserKeyword("GASVISCT") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTPVT",0); +GASVISCT::GASVISCT() : ParserKeyword("GASVISCT", KeywordSize("TABDIMS", "NTPVT", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("GASVISCT"); @@ -531,9 +530,7 @@ const std::string GASVISCT::keywordName = "GASVISCT"; const std::string GASVISCT::DATA::itemName = "DATA"; -GASYEAR::GASYEAR( ) : ParserKeyword("GASYEAR") -{ - setFixedSize( (size_t) 1); +GASYEAR::GASYEAR() : ParserKeyword("GASYEAR", KeywordSize(1, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("GASYEAR"); @@ -591,7 +588,7 @@ const std::string GASYEAR::SWING_REQ::defaultValue = "YEAR"; const std::string GASYEAR::LIMIT_TIMESTEPS::itemName = "LIMIT_TIMESTEPS"; const std::string GASYEAR::LIMIT_TIMESTEPS::defaultValue = "YES"; const std::string GASYEAR::LIMIT_DCQ_RED_FACTOR::itemName = "LIMIT_DCQ_RED_FACTOR"; -const double GASYEAR::LIMIT_DCQ_RED_FACTOR::defaultValue = 0.000000; +const double GASYEAR::LIMIT_DCQ_RED_FACTOR::defaultValue = 0; const std::string GASYEAR::ANTICIPATED_DCQ_RED_FACTOR::itemName = "ANTICIPATED_DCQ_RED_FACTOR"; const double GASYEAR::ANTICIPATED_DCQ_RED_FACTOR::defaultValue = 1.000000; const std::string GASYEAR::MAX_ITERATIONS::itemName = "MAX_ITERATIONS"; @@ -600,9 +597,7 @@ const std::string GASYEAR::DCQ_CONV_TOLERANCE::itemName = "DCQ_CONV_TOLERANCE"; const double GASYEAR::DCQ_CONV_TOLERANCE::defaultValue = 0.100000; -GCALECON::GCALECON( ) : ParserKeyword("GCALECON") -{ - setSizeType(SLASH_TERMINATED); +GCALECON::GCALECON() : ParserKeyword("GCALECON", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("GCALECON"); @@ -635,16 +630,14 @@ GCALECON::GCALECON( ) : ParserKeyword("GCALECON") const std::string GCALECON::keywordName = "GCALECON"; const std::string GCALECON::GROUP::itemName = "GROUP"; const std::string GCALECON::MIN_ENERGY_PROD_RATE::itemName = "MIN_ENERGY_PROD_RATE"; -const double GCALECON::MIN_ENERGY_PROD_RATE::defaultValue = 0.000000; +const double GCALECON::MIN_ENERGY_PROD_RATE::defaultValue = 0; const std::string GCALECON::MIN_CALORIFIC_VAL::itemName = "MIN_CALORIFIC_VAL"; -const double GCALECON::MIN_CALORIFIC_VAL::defaultValue = 0.000000; +const double GCALECON::MIN_CALORIFIC_VAL::defaultValue = 0; const std::string GCALECON::FLAG_END_RUN::itemName = "FLAG_END_RUN"; const std::string GCALECON::FLAG_END_RUN::defaultValue = "NO"; -GCOMPIDX::GCOMPIDX( ) : ParserKeyword("GCOMPIDX") -{ - setFixedSize( (size_t) 1); +GCOMPIDX::GCOMPIDX() : ParserKeyword("GCOMPIDX", KeywordSize(1, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("GCOMPIDX"); @@ -661,9 +654,7 @@ const std::string GCOMPIDX::keywordName = "GCOMPIDX"; const std::string GCOMPIDX::GAS_COMPONENT_INDEX::itemName = "GAS_COMPONENT_INDEX"; -GCONCAL::GCONCAL( ) : ParserKeyword("GCONCAL") -{ - setSizeType(SLASH_TERMINATED); +GCONCAL::GCONCAL() : ParserKeyword("GCONCAL", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("GCONCAL"); @@ -701,9 +692,7 @@ const std::string GCONCAL::RATE_RED_FACTOR::itemName = "RATE_RED_FACTOR"; const double GCONCAL::RATE_RED_FACTOR::defaultValue = 0.900000; -GCONENG::GCONENG( ) : ParserKeyword("GCONENG") -{ - setSizeType(SLASH_TERMINATED); +GCONENG::GCONENG() : ParserKeyword("GCONENG", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("GCONENG"); @@ -728,9 +717,7 @@ const std::string GCONENG::ENERGY_PROD_RATE::itemName = "ENERGY_PROD_RATE"; const double GCONENG::ENERGY_PROD_RATE::defaultValue = 100000000000000000000.000000; -GCONINJE::GCONINJE( ) : ParserKeyword("GCONINJE") -{ - setSizeType(SLASH_TERMINATED); +GCONINJE::GCONINJE() : ParserKeyword("GCONINJE", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("GCONINJE"); @@ -773,18 +760,18 @@ GCONINJE::GCONINJE( ) : ParserKeyword("GCONINJE") record.addItem(item); } { - ParserItem item("FREE", ParserItem::itype::STRING); + ParserItem item("RESPOND_TO_PARENT", ParserItem::itype::STRING); item.setDefault( std::string("YES") ); record.addItem(item); } { - ParserItem item("GUIDE_FRACTION", ParserItem::itype::DOUBLE); + ParserItem item("GUIDE_RATE", ParserItem::itype::DOUBLE); item.setDefault( double(0) ); item.push_backDimension("1"); record.addItem(item); } { - ParserItem item("GUIDE_DEF", ParserItem::itype::STRING); + ParserItem item("GUIDE_RATE_DEF", ParserItem::itype::STRING); record.addItem(item); } { @@ -809,26 +796,24 @@ const std::string GCONINJE::PHASE::itemName = "PHASE"; const std::string GCONINJE::CONTROL_MODE::itemName = "CONTROL_MODE"; const std::string GCONINJE::CONTROL_MODE::defaultValue = "NONE"; const std::string GCONINJE::SURFACE_TARGET::itemName = "SURFACE_TARGET"; -const UDAValue GCONINJE::SURFACE_TARGET::defaultValue = UDAValue(0.000000); +const UDAValue GCONINJE::SURFACE_TARGET::defaultValue = UDAValue(0); const std::string GCONINJE::RESV_TARGET::itemName = "RESV_TARGET"; -const UDAValue GCONINJE::RESV_TARGET::defaultValue = UDAValue(0.000000); +const UDAValue GCONINJE::RESV_TARGET::defaultValue = UDAValue(0); const std::string GCONINJE::REINJ_TARGET::itemName = "REINJ_TARGET"; -const UDAValue GCONINJE::REINJ_TARGET::defaultValue = UDAValue(0.000000); +const UDAValue GCONINJE::REINJ_TARGET::defaultValue = UDAValue(0); const std::string GCONINJE::VOIDAGE_TARGET::itemName = "VOIDAGE_TARGET"; -const UDAValue GCONINJE::VOIDAGE_TARGET::defaultValue = UDAValue(0.000000); -const std::string GCONINJE::FREE::itemName = "FREE"; -const std::string GCONINJE::FREE::defaultValue = "YES"; -const std::string GCONINJE::GUIDE_FRACTION::itemName = "GUIDE_FRACTION"; -const double GCONINJE::GUIDE_FRACTION::defaultValue = 0.000000; -const std::string GCONINJE::GUIDE_DEF::itemName = "GUIDE_DEF"; +const UDAValue GCONINJE::VOIDAGE_TARGET::defaultValue = UDAValue(0); +const std::string GCONINJE::RESPOND_TO_PARENT::itemName = "RESPOND_TO_PARENT"; +const std::string GCONINJE::RESPOND_TO_PARENT::defaultValue = "YES"; +const std::string GCONINJE::GUIDE_RATE::itemName = "GUIDE_RATE"; +const double GCONINJE::GUIDE_RATE::defaultValue = 0; +const std::string GCONINJE::GUIDE_RATE_DEF::itemName = "GUIDE_RATE_DEF"; const std::string GCONINJE::REINJECT_GROUP::itemName = "REINJECT_GROUP"; const std::string GCONINJE::VOIDAGE_GROUP::itemName = "VOIDAGE_GROUP"; const std::string GCONINJE::WETGAS_TARGET::itemName = "WETGAS_TARGET"; -GCONPRI::GCONPRI( ) : ParserKeyword("GCONPRI") -{ - setSizeType(SLASH_TERMINATED); +GCONPRI::GCONPRI() : ParserKeyword("GCONPRI", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("GCONPRI"); @@ -966,9 +951,7 @@ const std::string GCONPRI::PROCEDURE_LIMIT::itemName = "PROCEDURE_LIMIT"; const std::string GCONPRI::PROCEDURE_LIMIT::defaultValue = "NONE"; -GCONPROD::GCONPROD( ) : ParserKeyword("GCONPROD") -{ - setSizeType(SLASH_TERMINATED); +GCONPROD::GCONPROD() : ParserKeyword("GCONPROD", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("GCONPROD"); @@ -985,25 +968,21 @@ GCONPROD::GCONPROD( ) : ParserKeyword("GCONPROD") } { ParserItem item("OIL_TARGET", ParserItem::itype::UDA); - item.setDefault( UDAValue(-9989999999999999764508097064678579891241680670206998059982957902605768119280291502755086619213633159168.000000) ); item.push_backDimension("LiquidSurfaceVolume/Time"); record.addItem(item); } { ParserItem item("WATER_TARGET", ParserItem::itype::UDA); - item.setDefault( UDAValue(-9989999999999999764508097064678579891241680670206998059982957902605768119280291502755086619213633159168.000000) ); item.push_backDimension("LiquidSurfaceVolume/Time"); record.addItem(item); } { ParserItem item("GAS_TARGET", ParserItem::itype::UDA); - item.setDefault( UDAValue(-9989999999999999764508097064678579891241680670206998059982957902605768119280291502755086619213633159168.000000) ); item.push_backDimension("GasSurfaceVolume/Time"); record.addItem(item); } { ParserItem item("LIQUID_TARGET", ParserItem::itype::UDA); - item.setDefault( UDAValue(-9989999999999999764508097064678579891241680670206998059982957902605768119280291502755086619213633159168.000000) ); item.push_backDimension("LiquidSurfaceVolume/Time"); record.addItem(item); } @@ -1039,7 +1018,6 @@ GCONPROD::GCONPROD( ) : ParserKeyword("GCONPROD") } { ParserItem item("RESERVOIR_FLUID_TARGET", ParserItem::itype::DOUBLE); - item.setDefault( double(-9989999999999999764508097064678579891241680670206998059982957902605768119280291502755086619213633159168.000000) ); item.push_backDimension("ReservoirVolume/Time"); record.addItem(item); } @@ -1085,13 +1063,9 @@ const std::string GCONPROD::GROUP::itemName = "GROUP"; const std::string GCONPROD::CONTROL_MODE::itemName = "CONTROL_MODE"; const std::string GCONPROD::CONTROL_MODE::defaultValue = "NONE"; const std::string GCONPROD::OIL_TARGET::itemName = "OIL_TARGET"; -const UDAValue GCONPROD::OIL_TARGET::defaultValue = UDAValue(-9989999999999999764508097064678579891241680670206998059982957902605768119280291502755086619213633159168.000000); const std::string GCONPROD::WATER_TARGET::itemName = "WATER_TARGET"; -const UDAValue GCONPROD::WATER_TARGET::defaultValue = UDAValue(-9989999999999999764508097064678579891241680670206998059982957902605768119280291502755086619213633159168.000000); const std::string GCONPROD::GAS_TARGET::itemName = "GAS_TARGET"; -const UDAValue GCONPROD::GAS_TARGET::defaultValue = UDAValue(-9989999999999999764508097064678579891241680670206998059982957902605768119280291502755086619213633159168.000000); const std::string GCONPROD::LIQUID_TARGET::itemName = "LIQUID_TARGET"; -const UDAValue GCONPROD::LIQUID_TARGET::defaultValue = UDAValue(-9989999999999999764508097064678579891241680670206998059982957902605768119280291502755086619213633159168.000000); const std::string GCONPROD::EXCEED_PROC::itemName = "EXCEED_PROC"; const std::string GCONPROD::EXCEED_PROC::defaultValue = "NONE"; const std::string GCONPROD::RESPOND_TO_PARENT::itemName = "RESPOND_TO_PARENT"; @@ -1102,7 +1076,6 @@ const std::string GCONPROD::WATER_EXCEED_PROCEDURE::itemName = "WATER_EXCEED_PRO const std::string GCONPROD::GAS_EXCEED_PROCEDURE::itemName = "GAS_EXCEED_PROCEDURE"; const std::string GCONPROD::LIQUID_EXCEED_PROCEDURE::itemName = "LIQUID_EXCEED_PROCEDURE"; const std::string GCONPROD::RESERVOIR_FLUID_TARGET::itemName = "RESERVOIR_FLUID_TARGET"; -const double GCONPROD::RESERVOIR_FLUID_TARGET::defaultValue = -9989999999999999764508097064678579891241680670206998059982957902605768119280291502755086619213633159168.000000; const std::string GCONPROD::RESERVOIR_VOLUME_BALANCE::itemName = "RESERVOIR_VOLUME_BALANCE"; const std::string GCONPROD::WET_GAS_TARGET::itemName = "WET_GAS_TARGET"; const std::string GCONPROD::CALORIFIC_TARGET::itemName = "CALORIFIC_TARGET"; @@ -1112,9 +1085,7 @@ const std::string GCONPROD::LINEAR_COMBINED_TARGET::itemName = "LINEAR_COMBINED_ const std::string GCONPROD::LIN_TARGET_EXCEED_PROCEDURE::itemName = "LIN_TARGET_EXCEED_PROCEDURE"; -GCONSALE::GCONSALE( ) : ParserKeyword("GCONSALE") -{ - setSizeType(SLASH_TERMINATED); +GCONSALE::GCONSALE() : ParserKeyword("GCONSALE", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("GCONSALE"); @@ -1160,9 +1131,7 @@ const std::string GCONSALE::MAX_PROC::itemName = "MAX_PROC"; const std::string GCONSALE::MAX_PROC::defaultValue = "NONE"; -GCONSUMP::GCONSUMP( ) : ParserKeyword("GCONSUMP") -{ - setSizeType(SLASH_TERMINATED); +GCONSUMP::GCONSUMP() : ParserKeyword("GCONSUMP", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("GCONSUMP"); @@ -1174,11 +1143,13 @@ GCONSUMP::GCONSUMP( ) : ParserKeyword("GCONSUMP") } { ParserItem item("GAS_CONSUMP_RATE", ParserItem::itype::UDA); + item.setDefault( UDAValue(0) ); item.push_backDimension("GasSurfaceVolume/Time"); record.addItem(item); } { ParserItem item("GAS_IMPORT_RATE", ParserItem::itype::UDA); + item.setDefault( UDAValue(0) ); item.push_backDimension("GasSurfaceVolume/Time"); record.addItem(item); } @@ -1192,13 +1163,13 @@ GCONSUMP::GCONSUMP( ) : ParserKeyword("GCONSUMP") const std::string GCONSUMP::keywordName = "GCONSUMP"; const std::string GCONSUMP::GROUP::itemName = "GROUP"; const std::string GCONSUMP::GAS_CONSUMP_RATE::itemName = "GAS_CONSUMP_RATE"; +const UDAValue GCONSUMP::GAS_CONSUMP_RATE::defaultValue = UDAValue(0); const std::string GCONSUMP::GAS_IMPORT_RATE::itemName = "GAS_IMPORT_RATE"; +const UDAValue GCONSUMP::GAS_IMPORT_RATE::defaultValue = UDAValue(0); const std::string GCONSUMP::NETWORK_NODE::itemName = "NETWORK_NODE"; -GCONTOL::GCONTOL( ) : ParserKeyword("GCONTOL") -{ - setFixedSize( (size_t) 1); +GCONTOL::GCONTOL() : ParserKeyword("GCONTOL", KeywordSize(1, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("GCONTOL"); @@ -1234,9 +1205,7 @@ const std::string GCONTOL::MAX_IT_INJ::itemName = "MAX_IT_INJ"; const int GCONTOL::MAX_IT_INJ::defaultValue = 5; -GCUTBACK::GCUTBACK( ) : ParserKeyword("GCUTBACK") -{ - setSizeType(SLASH_TERMINATED); +GCUTBACK::GCUTBACK() : ParserKeyword("GCUTBACK", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("GCUTBACK"); @@ -1288,9 +1257,7 @@ const std::string GCUTBACK::RATE_CUTBACK_FACTOR::itemName = "RATE_CUTBACK_FACTOR const std::string GCUTBACK::CONTROL_PHASE::itemName = "CONTROL_PHASE"; -GCUTBACT::GCUTBACT( ) : ParserKeyword("GCUTBACT") -{ - setSizeType(DOUBLE_SLASH_TERMINATED); +GCUTBACT::GCUTBACT() : ParserKeyword("GCUTBACT", KeywordSize(DOUBLE_SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("GCUTBACT"); @@ -1360,10 +1327,7 @@ const std::string GCUTBACT::LOWER_CONC_LIM::itemName = "LOWER_CONC_LIM"; const double GCUTBACT::LOWER_CONC_LIM::defaultValue = 99999999999999996973312221251036165947450327545502362648241750950346848435554075534196338404706251868027512415973882408182135734368278484639385041047239877871023591066789981811181813306167128854888448.000000; -GCVD::GCVD( ) : ParserKeyword("GCVD") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("EQLDIMS","NTEQUL",0); +GCVD::GCVD() : ParserKeyword("GCVD", KeywordSize("EQLDIMS", "NTEQUL", false, 0)) { addValidSectionName("SOLUTION"); clearDeckNames(); addDeckName("GCVD"); @@ -1383,9 +1347,7 @@ const std::string GCVD::keywordName = "GCVD"; const std::string GCVD::DATA::itemName = "DATA"; -GDCQ::GDCQ( ) : ParserKeyword("GDCQ") -{ - setSizeType(SLASH_TERMINATED); +GDCQ::GDCQ() : ParserKeyword("GDCQ", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("GDCQ"); @@ -1414,9 +1376,7 @@ const std::string GDCQ::DCQ_TYPE::itemName = "DCQ_TYPE"; const std::string GDCQ::DCQ_TYPE::defaultValue = "VAR"; -GDCQECON::GDCQECON( ) : ParserKeyword("GDCQECON") -{ - setSizeType(SLASH_TERMINATED); +GDCQECON::GDCQECON() : ParserKeyword("GDCQECON", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("GDCQECON"); @@ -1438,10 +1398,12 @@ const std::string GDCQECON::GROUP_NAME::itemName = "GROUP_NAME"; const std::string GDCQECON::MIN_DCQ::itemName = "MIN_DCQ"; -GDFILE::GDFILE( ) : ParserKeyword("GDFILE") -{ - setFixedSize( (size_t) 1); +GDFILE::GDFILE() : ParserKeyword("GDFILE", KeywordSize(1, false)) { addValidSectionName("GRID"); + setProhibitedKeywords({ + "COORD", + "ZCORN", + }); clearDeckNames(); addDeckName("GDFILE"); { @@ -1464,9 +1426,7 @@ const std::string GDFILE::formatted::itemName = "formatted"; const std::string GDFILE::formatted::defaultValue = "U"; -GDIMS::GDIMS( ) : ParserKeyword("GDIMS") -{ - setFixedSize( (size_t) 1); +GDIMS::GDIMS() : ParserKeyword("GDIMS", KeywordSize(1, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("GDIMS"); @@ -1485,9 +1445,7 @@ const std::string GDIMS::MAX_NUM_GRAD_PARAMS::itemName = "MAX_NUM_GRAD_PARAMS"; const int GDIMS::MAX_NUM_GRAD_PARAMS::defaultValue = 0; -GDORIENT::GDORIENT( ) : ParserKeyword("GDORIENT") -{ - setFixedSize( (size_t) 1); +GDORIENT::GDORIENT() : ParserKeyword("GDORIENT", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("GDORIENT"); @@ -1534,9 +1492,7 @@ const std::string GDORIENT::HAND::itemName = "HAND"; const std::string GDORIENT::HAND::defaultValue = "RIGHT"; -GDRILPOT::GDRILPOT( ) : ParserKeyword("GDRILPOT") -{ - setSizeType(SLASH_TERMINATED); +GDRILPOT::GDRILPOT() : ParserKeyword("GDRILPOT", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("GDRILPOT"); @@ -1562,12 +1518,10 @@ const std::string GDRILPOT::keywordName = "GDRILPOT"; const std::string GDRILPOT::GROUP_NAME::itemName = "GROUP_NAME"; const std::string GDRILPOT::QNTY_TYPE::itemName = "QNTY_TYPE"; const std::string GDRILPOT::MIN_POTENTIAL_RATE::itemName = "MIN_POTENTIAL_RATE"; -const double GDRILPOT::MIN_POTENTIAL_RATE::defaultValue = 0.000000; +const double GDRILPOT::MIN_POTENTIAL_RATE::defaultValue = 0; -GECON::GECON( ) : ParserKeyword("GECON") -{ - setSizeType(SLASH_TERMINATED); +GECON::GECON() : ParserKeyword("GECON", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("GECON"); @@ -1623,15 +1577,15 @@ GECON::GECON( ) : ParserKeyword("GECON") const std::string GECON::keywordName = "GECON"; const std::string GECON::GROUP::itemName = "GROUP"; const std::string GECON::MIN_OIL_RATE::itemName = "MIN_OIL_RATE"; -const UDAValue GECON::MIN_OIL_RATE::defaultValue = UDAValue(0.000000); +const UDAValue GECON::MIN_OIL_RATE::defaultValue = UDAValue(0); const std::string GECON::MIN_GAS_RATE::itemName = "MIN_GAS_RATE"; -const UDAValue GECON::MIN_GAS_RATE::defaultValue = UDAValue(0.000000); +const UDAValue GECON::MIN_GAS_RATE::defaultValue = UDAValue(0); const std::string GECON::MAX_WCT::itemName = "MAX_WCT"; -const UDAValue GECON::MAX_WCT::defaultValue = UDAValue(0.000000); +const UDAValue GECON::MAX_WCT::defaultValue = UDAValue(0); const std::string GECON::MAX_GOR::itemName = "MAX_GOR"; -const UDAValue GECON::MAX_GOR::defaultValue = UDAValue(0.000000); +const UDAValue GECON::MAX_GOR::defaultValue = UDAValue(0); const std::string GECON::MAX_WATER_GAS_RATIO::itemName = "MAX_WATER_GAS_RATIO"; -const UDAValue GECON::MAX_WATER_GAS_RATIO::defaultValue = UDAValue(0.000000); +const UDAValue GECON::MAX_WATER_GAS_RATIO::defaultValue = UDAValue(0); const std::string GECON::WORKOVER::itemName = "WORKOVER"; const std::string GECON::WORKOVER::defaultValue = "NONE"; const std::string GECON::END_RUN::itemName = "END_RUN"; @@ -1640,9 +1594,7 @@ const std::string GECON::MAX_OPEN_WELLS::itemName = "MAX_OPEN_WELLS"; const int GECON::MAX_OPEN_WELLS::defaultValue = 0; -GECONT::GECONT( ) : ParserKeyword("GECONT") -{ - setSizeType(DOUBLE_SLASH_TERMINATED); +GECONT::GECONT() : ParserKeyword("GECONT", KeywordSize(DOUBLE_SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("GECONT"); @@ -1738,9 +1690,7 @@ const std::string GECONT::MAX_SOL_TRACER_CONC::itemName = "MAX_SOL_TRACER_CONC"; const double GECONT::MAX_SOL_TRACER_CONC::defaultValue = 99999999999999996973312221251036165947450327545502362648241750950346848435554075534196338404706251868027512415973882408182135734368278484639385041047239877871023591066789981811181813306167128854888448.000000; -GEFAC::GEFAC( ) : ParserKeyword("GEFAC") -{ - setSizeType(SLASH_TERMINATED); +GEFAC::GEFAC() : ParserKeyword("GEFAC", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("GEFAC"); @@ -1771,11 +1721,9 @@ const std::string GEFAC::TRANSFER_EXT_NET::itemName = "TRANSFER_EXT_NET"; const std::string GEFAC::TRANSFER_EXT_NET::defaultValue = "YES"; -GETDATA::GETDATA( ) : ParserKeyword("GETDATA") -{ - setFixedSize( (size_t) 1); - addValidSectionName("EDIT"); +GETDATA::GETDATA() : ParserKeyword("GETDATA", KeywordSize(1, false)) { addValidSectionName("GRID"); + addValidSectionName("EDIT"); addValidSectionName("PROPS"); addValidSectionName("REGIONS"); addValidSectionName("SOLUTION"); @@ -1811,9 +1759,7 @@ const std::string GETDATA::ZNAME::itemName = "ZNAME"; const std::string GETDATA::ZALT::itemName = "ZALT"; -GETGLOB::GETGLOB( ) : ParserKeyword("GETGLOB") -{ - setFixedSize( (size_t) 0); +GETGLOB::GETGLOB() : ParserKeyword("GETGLOB", KeywordSize(0, false)) { addValidSectionName("SOLUTION"); clearDeckNames(); addDeckName("GETGLOB"); @@ -1821,9 +1767,7 @@ GETGLOB::GETGLOB( ) : ParserKeyword("GETGLOB") const std::string GETGLOB::keywordName = "GETGLOB"; -GI::GI( ) : ParserKeyword("GI") -{ - setFixedSize( (size_t) 1); +GI::GI() : ParserKeyword("GI", KeywordSize(1, false)) { addValidSectionName("SOLUTION"); clearDeckNames(); addDeckName("GI"); @@ -1841,10 +1785,7 @@ const std::string GI::keywordName = "GI"; const std::string GI::data::itemName = "data"; -GIALL::GIALL( ) : ParserKeyword("GIALL") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTPVT",0); +GIALL::GIALL() : ParserKeyword("GIALL", KeywordSize("TABDIMS", "NTPVT", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("GIALL"); @@ -1872,9 +1813,7 @@ const std::string GIALL::PRESSURE::itemName = "PRESSURE"; const std::string GIALL::TABLE::itemName = "TABLE"; -GIMODEL::GIMODEL( ) : ParserKeyword("GIMODEL") -{ - setFixedSize( (size_t) 0); +GIMODEL::GIMODEL() : ParserKeyword("GIMODEL", KeywordSize(0, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("GIMODEL"); @@ -1882,10 +1821,7 @@ GIMODEL::GIMODEL( ) : ParserKeyword("GIMODEL") const std::string GIMODEL::keywordName = "GIMODEL"; -GINODE::GINODE( ) : ParserKeyword("GINODE") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTPVT",0); +GINODE::GINODE() : ParserKeyword("GINODE", KeywordSize("TABDIMS", "NTPVT", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("GINODE"); @@ -1904,9 +1840,7 @@ const std::string GINODE::keywordName = "GINODE"; const std::string GINODE::DATA::itemName = "DATA"; -GLIFTLIM::GLIFTLIM( ) : ParserKeyword("GLIFTLIM") -{ - setSizeType(SLASH_TERMINATED); +GLIFTLIM::GLIFTLIM() : ParserKeyword("GLIFTLIM", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("GLIFTLIM"); @@ -1932,15 +1866,16 @@ GLIFTLIM::GLIFTLIM( ) : ParserKeyword("GLIFTLIM") const std::string GLIFTLIM::keywordName = "GLIFTLIM"; const std::string GLIFTLIM::GROUP_NAME::itemName = "GROUP_NAME"; const std::string GLIFTLIM::MAX_LIFT_CAPACITY::itemName = "MAX_LIFT_CAPACITY"; -const double GLIFTLIM::MAX_LIFT_CAPACITY::defaultValue = 0.000000; +const double GLIFTLIM::MAX_LIFT_CAPACITY::defaultValue = 0; const std::string GLIFTLIM::MAX_NUM_WELL::itemName = "MAX_NUM_WELL"; const int GLIFTLIM::MAX_NUM_WELL::defaultValue = 0; -GLIFTOPT::GLIFTOPT( ) : ParserKeyword("GLIFTOPT") -{ - setSizeType(SLASH_TERMINATED); +GLIFTOPT::GLIFTOPT() : ParserKeyword("GLIFTOPT", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); + setRequiredKeywords({ + "LIFTOPT", + }); clearDeckNames(); addDeckName("GLIFTOPT"); { @@ -1952,11 +1887,13 @@ GLIFTOPT::GLIFTOPT( ) : ParserKeyword("GLIFTOPT") { ParserItem item("MAX_LIFT_GAS_SUPPLY", ParserItem::itype::DOUBLE); item.setDefault( double(-100000000000000000000.000000) ); + item.push_backDimension("GasSurfaceVolume/Time"); record.addItem(item); } { ParserItem item("MAX_TOTAL_GAS_RATE", ParserItem::itype::DOUBLE); item.setDefault( double(-100000000000000000000.000000) ); + item.push_backDimension("GasSurfaceVolume/Time"); record.addItem(item); } addRecord( record ); @@ -1970,9 +1907,7 @@ const std::string GLIFTOPT::MAX_TOTAL_GAS_RATE::itemName = "MAX_TOTAL_GAS_RATE"; const double GLIFTOPT::MAX_TOTAL_GAS_RATE::defaultValue = -100000000000000000000.000000; -GMWSET::GMWSET( ) : ParserKeyword("GMWSET") -{ - setFixedSize( (size_t) 0); +GMWSET::GMWSET() : ParserKeyword("GMWSET", KeywordSize(0, false)) { addValidSectionName("SUMMARY"); clearDeckNames(); addDeckName("GMWSET"); @@ -1980,9 +1915,7 @@ GMWSET::GMWSET( ) : ParserKeyword("GMWSET") const std::string GMWSET::keywordName = "GMWSET"; -GNETDP::GNETDP( ) : ParserKeyword("GNETDP") -{ - setSizeType(SLASH_TERMINATED); +GNETDP::GNETDP() : ParserKeyword("GNETDP", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("GNETDP"); @@ -2039,22 +1972,20 @@ const std::string GNETDP::FIXED_PRESSURE_GROUP::itemName = "FIXED_PRESSURE_GROUP const std::string GNETDP::PHASE_TYPE::itemName = "PHASE_TYPE"; const std::string GNETDP::PHASE_TYPE::defaultValue = "GA"; const std::string GNETDP::MIN_RATE_TRIGGER::itemName = "MIN_RATE_TRIGGER"; -const double GNETDP::MIN_RATE_TRIGGER::defaultValue = 0.000000; +const double GNETDP::MIN_RATE_TRIGGER::defaultValue = 0; const std::string GNETDP::MAX_RATE_TRIGGER::itemName = "MAX_RATE_TRIGGER"; const double GNETDP::MAX_RATE_TRIGGER::defaultValue = 100000000000000000000.000000; const std::string GNETDP::PRESSURE_INCR_SUBTRACT::itemName = "PRESSURE_INCR_SUBTRACT"; -const double GNETDP::PRESSURE_INCR_SUBTRACT::defaultValue = 0.000000; +const double GNETDP::PRESSURE_INCR_SUBTRACT::defaultValue = 0; const std::string GNETDP::PRESSURE_INCR_ADD::itemName = "PRESSURE_INCR_ADD"; -const double GNETDP::PRESSURE_INCR_ADD::defaultValue = 0.000000; +const double GNETDP::PRESSURE_INCR_ADD::defaultValue = 0; const std::string GNETDP::MIN_ALLOW_PRESSURE::itemName = "MIN_ALLOW_PRESSURE"; -const double GNETDP::MIN_ALLOW_PRESSURE::defaultValue = 0.000000; +const double GNETDP::MIN_ALLOW_PRESSURE::defaultValue = 0; const std::string GNETDP::MAX_ALLOW_PRESSURE::itemName = "MAX_ALLOW_PRESSURE"; const double GNETDP::MAX_ALLOW_PRESSURE::defaultValue = 100000000000000000000.000000; -GNETINJE::GNETINJE( ) : ParserKeyword("GNETINJE") -{ - setSizeType(SLASH_TERMINATED); +GNETINJE::GNETINJE() : ParserKeyword("GNETINJE", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("GNETINJE"); @@ -2089,9 +2020,7 @@ const std::string GNETINJE::VFP_TABLE::itemName = "VFP_TABLE"; const int GNETINJE::VFP_TABLE::defaultValue = 0; -GNETPUMP::GNETPUMP( ) : ParserKeyword("GNETPUMP") -{ - setSizeType(SLASH_TERMINATED); +GNETPUMP::GNETPUMP() : ParserKeyword("GNETPUMP", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("GNETPUMP"); @@ -2133,20 +2062,18 @@ GNETPUMP::GNETPUMP( ) : ParserKeyword("GNETPUMP") const std::string GNETPUMP::keywordName = "GNETPUMP"; const std::string GNETPUMP::GROUP::itemName = "GROUP"; const std::string GNETPUMP::PROD_RATE_SWITCH::itemName = "PROD_RATE_SWITCH"; -const double GNETPUMP::PROD_RATE_SWITCH::defaultValue = 0.000000; +const double GNETPUMP::PROD_RATE_SWITCH::defaultValue = 0; const std::string GNETPUMP::PHASE_TYPE::itemName = "PHASE_TYPE"; const std::string GNETPUMP::PHASE_TYPE::defaultValue = "OIL"; const std::string GNETPUMP::NEW_VFT_TABLE_NUM::itemName = "NEW_VFT_TABLE_NUM"; const int GNETPUMP::NEW_VFT_TABLE_NUM::defaultValue = 4; const std::string GNETPUMP::NEW_ARTIFICIAL_LIFT_QNTY::itemName = "NEW_ARTIFICIAL_LIFT_QNTY"; -const double GNETPUMP::NEW_ARTIFICIAL_LIFT_QNTY::defaultValue = 0.000000; +const double GNETPUMP::NEW_ARTIFICIAL_LIFT_QNTY::defaultValue = 0; const std::string GNETPUMP::NEW_GAS_CONUMPTION_RATE::itemName = "NEW_GAS_CONUMPTION_RATE"; -const double GNETPUMP::NEW_GAS_CONUMPTION_RATE::defaultValue = 0.000000; +const double GNETPUMP::NEW_GAS_CONUMPTION_RATE::defaultValue = 0; -GPMAINT::GPMAINT( ) : ParserKeyword("GPMAINT") -{ - setSizeType(SLASH_TERMINATED); +GPMAINT::GPMAINT() : ParserKeyword("GPMAINT", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("GPMAINT"); @@ -2166,6 +2093,7 @@ GPMAINT::GPMAINT( ) : ParserKeyword("GPMAINT") } { ParserItem item("FIP_FAMILY", ParserItem::itype::STRING); + item.setDefault( std::string("FIPNUM") ); record.addItem(item); } { @@ -2191,14 +2119,13 @@ const std::string GPMAINT::GROUP::itemName = "GROUP"; const std::string GPMAINT::FLOW_TARGET::itemName = "FLOW_TARGET"; const std::string GPMAINT::REGION::itemName = "REGION"; const std::string GPMAINT::FIP_FAMILY::itemName = "FIP_FAMILY"; +const std::string GPMAINT::FIP_FAMILY::defaultValue = "FIPNUM"; const std::string GPMAINT::PRESSURE_TARGET::itemName = "PRESSURE_TARGET"; const std::string GPMAINT::PROP_CONSTANT::itemName = "PROP_CONSTANT"; const std::string GPMAINT::TIME_CONSTANT::itemName = "TIME_CONSTANT"; -GRADGRUP::GRADGRUP( ) : ParserKeyword("GRADGRUP") -{ - setSizeType(SLASH_TERMINATED); +GRADGRUP::GRADGRUP() : ParserKeyword("GRADGRUP", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("GRADGRUP"); @@ -2215,9 +2142,7 @@ const std::string GRADGRUP::keywordName = "GRADGRUP"; const std::string GRADGRUP::MNENONIC::itemName = "MNENONIC"; -GRADRESV::GRADRESV( ) : ParserKeyword("GRADRESV") -{ - setSizeType(SLASH_TERMINATED); +GRADRESV::GRADRESV() : ParserKeyword("GRADRESV", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("GRADRESV"); @@ -2234,9 +2159,7 @@ const std::string GRADRESV::keywordName = "GRADRESV"; const std::string GRADRESV::MNENONIC::itemName = "MNENONIC"; -GRADRFT::GRADRFT( ) : ParserKeyword("GRADRFT") -{ - setSizeType(SLASH_TERMINATED); +GRADRFT::GRADRFT() : ParserKeyword("GRADRFT", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("GRADRFT"); @@ -2253,9 +2176,7 @@ const std::string GRADRFT::keywordName = "GRADRFT"; const std::string GRADRFT::MNENONIC::itemName = "MNENONIC"; -GRADWELL::GRADWELL( ) : ParserKeyword("GRADWELL") -{ - setSizeType(SLASH_TERMINATED); +GRADWELL::GRADWELL() : ParserKeyword("GRADWELL", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("GRADWELL"); @@ -2272,9 +2193,7 @@ const std::string GRADWELL::keywordName = "GRADWELL"; const std::string GRADWELL::MNENONIC::itemName = "MNENONIC"; -GRAVCONS::GRAVCONS( ) : ParserKeyword("GRAVCONS") -{ - setSizeType(SLASH_TERMINATED); +GRAVCONS::GRAVCONS() : ParserKeyword("GRAVCONS", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("GRAVCONS"); @@ -2292,9 +2211,7 @@ const std::string GRAVCONS::keywordName = "GRAVCONS"; const std::string GRAVCONS::MNENONIC::itemName = "MNENONIC"; -GRAVDR::GRAVDR( ) : ParserKeyword("GRAVDR") -{ - setFixedSize( (size_t) 0); +GRAVDR::GRAVDR() : ParserKeyword("GRAVDR", KeywordSize(0, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("GRAVDR"); @@ -2302,9 +2219,7 @@ GRAVDR::GRAVDR( ) : ParserKeyword("GRAVDR") const std::string GRAVDR::keywordName = "GRAVDR"; -GRAVDRB::GRAVDRB( ) : ParserKeyword("GRAVDRB") -{ - setFixedSize( (size_t) 0); +GRAVDRB::GRAVDRB() : ParserKeyword("GRAVDRB", KeywordSize(0, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("GRAVDRB"); @@ -2312,9 +2227,7 @@ GRAVDRB::GRAVDRB( ) : ParserKeyword("GRAVDRB") const std::string GRAVDRB::keywordName = "GRAVDRB"; -GRAVDRM::GRAVDRM( ) : ParserKeyword("GRAVDRM") -{ - setFixedSize( (size_t) 1); +GRAVDRM::GRAVDRM() : ParserKeyword("GRAVDRM", KeywordSize(1, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("GRAVDRM"); @@ -2333,10 +2246,7 @@ const std::string GRAVDRM::ALLOW_RE_INFL::itemName = "ALLOW_RE_INFL"; const std::string GRAVDRM::ALLOW_RE_INFL::defaultValue = "YES"; -GRAVITY::GRAVITY( ) : ParserKeyword("GRAVITY") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTPVT",0); +GRAVITY::GRAVITY() : ParserKeyword("GRAVITY", KeywordSize("TABDIMS", "NTPVT", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("GRAVITY"); @@ -2350,11 +2260,13 @@ GRAVITY::GRAVITY( ) : ParserKeyword("GRAVITY") { ParserItem item("WATER_SP_GRAVITY", ParserItem::itype::DOUBLE); item.setDefault( double(1.000000) ); + item.push_backDimension("1"); record.addItem(item); } { ParserItem item("GAS_SP_GRAVITY", ParserItem::itype::DOUBLE); item.setDefault( double(0.777300) ); + item.push_backDimension("1"); record.addItem(item); } addRecord( record ); @@ -2368,9 +2280,7 @@ const std::string GRAVITY::GAS_SP_GRAVITY::itemName = "GAS_SP_GRAVITY"; const double GRAVITY::GAS_SP_GRAVITY::defaultValue = 0.777300; -GRDREACH::GRDREACH( ) : ParserKeyword("GRDREACH") -{ - setSizeType(SLASH_TERMINATED); +GRDREACH::GRDREACH() : ParserKeyword("GRDREACH", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("GRDREACH"); @@ -2491,7 +2401,7 @@ const std::string GRDREACH::GRID_BLOCK_COORD::itemName = "GRID_BLOCK_COORD"; const std::string GRDREACH::CONTACT_AREA::itemName = "CONTACT_AREA"; const std::string GRDREACH::TABLE_NUM::itemName = "TABLE_NUM"; const std::string GRDREACH::PRODUCTIVITY_INDEX::itemName = "PRODUCTIVITY_INDEX"; -const double GRDREACH::PRODUCTIVITY_INDEX::defaultValue = 0.000000; +const double GRDREACH::PRODUCTIVITY_INDEX::defaultValue = 0; const std::string GRDREACH::LENGTH_DEAD_GRID_BLOCK::itemName = "LENGTH_DEAD_GRID_BLOCK"; const std::string GRDREACH::OPTION_CONNECT_REACH::itemName = "OPTION_CONNECT_REACH"; const int GRDREACH::OPTION_CONNECT_REACH::defaultValue = 0; @@ -2502,23 +2412,19 @@ const std::string GRDREACH::REMOVE_CAP_PRESSURE::defaultValue = "NO"; const std::string GRDREACH::INFILTR_EQ::itemName = "INFILTR_EQ"; const int GRDREACH::INFILTR_EQ::defaultValue = 0; const std::string GRDREACH::HYDRAULIC_CONDUCTIVITY::itemName = "HYDRAULIC_CONDUCTIVITY"; -const double GRDREACH::HYDRAULIC_CONDUCTIVITY::defaultValue = 0.000000; +const double GRDREACH::HYDRAULIC_CONDUCTIVITY::defaultValue = 0; const std::string GRDREACH::RIVER_BED_THICKNESS::itemName = "RIVER_BED_THICKNESS"; -const double GRDREACH::RIVER_BED_THICKNESS::defaultValue = 0.000000; +const double GRDREACH::RIVER_BED_THICKNESS::defaultValue = 0; -GRID::GRID( ) : ParserKeyword("GRID") -{ - setFixedSize( (size_t) 0); +GRID::GRID() : ParserKeyword("GRID", KeywordSize(0, false)) { clearDeckNames(); addDeckName("GRID"); } const std::string GRID::keywordName = "GRID"; -GRIDFILE::GRIDFILE( ) : ParserKeyword("GRIDFILE") -{ - setFixedSize( (size_t) 1); +GRIDFILE::GRIDFILE() : ParserKeyword("GRIDFILE", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("GRIDFILE"); @@ -2544,9 +2450,7 @@ const std::string GRIDFILE::EGRID::itemName = "EGRID"; const int GRIDFILE::EGRID::defaultValue = 1; -GRIDOPTS::GRIDOPTS( ) : ParserKeyword("GRIDOPTS") -{ - setFixedSize( (size_t) 1); +GRIDOPTS::GRIDOPTS() : ParserKeyword("GRIDOPTS", KeywordSize(1, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("GRIDOPTS"); @@ -2579,9 +2483,7 @@ const std::string GRIDOPTS::NRPINC::itemName = "NRPINC"; const int GRIDOPTS::NRPINC::defaultValue = 0; -GRIDUNIT::GRIDUNIT( ) : ParserKeyword("GRIDUNIT") -{ - setFixedSize( (size_t) 1); +GRIDUNIT::GRIDUNIT() : ParserKeyword("GRIDUNIT", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("GRIDUNIT"); @@ -2605,237 +2507,237 @@ const std::string GRIDUNIT::LengthUnit::defaultValue = "METRES"; const std::string GRIDUNIT::MAP::itemName = "MAP"; -GROUP_PROBE::GROUP_PROBE( ) : ParserKeyword("GROUP_PROBE") -{ - setFixedSize( (size_t) 1); +GROUP_PROBE::GROUP_PROBE() : ParserKeyword("GROUP_PROBE", KeywordSize(1, false)) { addValidSectionName("SUMMARY"); clearDeckNames(); - addDeckName("GALQ"); - addDeckName("GAPI"); - addDeckName("GCIC"); - addDeckName("GCIR"); - addDeckName("GCIT"); - addDeckName("GCPC"); - addDeckName("GCPR"); - addDeckName("GCPT"); - addDeckName("GEDC"); - addDeckName("GEDCQ"); - addDeckName("GEFF"); - addDeckName("GEPR"); - addDeckName("GEPT"); - addDeckName("GESR"); - addDeckName("GEST"); - addDeckName("GFGR"); - addDeckName("GFGT"); - addDeckName("GFMF"); - addDeckName("GGCR"); - addDeckName("GGCT"); - addDeckName("GGCV"); - addDeckName("GGDC"); - addDeckName("GGDCQ"); - addDeckName("GGIGR"); - addDeckName("GGIMR"); - addDeckName("GGIMT"); - addDeckName("GGIR"); - addDeckName("GGIRH"); - addDeckName("GGIRL"); - addDeckName("GGIRNB"); - addDeckName("GGIRT"); - addDeckName("GGIT"); - addDeckName("GGITH"); - addDeckName("GGLIR"); - addDeckName("GGLR"); - addDeckName("GGLRH"); - addDeckName("GGOR"); - addDeckName("GGORH"); - addDeckName("GGPGR"); - addDeckName("GGPI"); - addDeckName("GGPI2"); - addDeckName("GGPP"); - addDeckName("GGPP2"); - addDeckName("GGPPF"); - addDeckName("GGPPF2"); - addDeckName("GGPPS"); - addDeckName("GGPPS2"); - addDeckName("GGPR"); - addDeckName("GGPRF"); - addDeckName("GGPRH"); - addDeckName("GGPRL"); - addDeckName("GGPRNB"); - addDeckName("GGPRNBFP"); - addDeckName("GGPRS"); - addDeckName("GGPRT"); - addDeckName("GGPT"); - addDeckName("GGPTF"); - addDeckName("GGPTH"); - addDeckName("GGPTS"); - addDeckName("GGQ"); - addDeckName("GGSPR"); - addDeckName("GGSR"); - addDeckName("GGSRL"); - addDeckName("GGSRU"); - addDeckName("GGSSP"); - addDeckName("GGST"); - addDeckName("GGSTP"); - addDeckName("GJPR"); - addDeckName("GJPRH"); - addDeckName("GJPRL"); - addDeckName("GJPRT"); - addDeckName("GJPT"); - addDeckName("GJPTH"); - addDeckName("GLPR"); - addDeckName("GLPRH"); - addDeckName("GLPRL"); - addDeckName("GLPRNB"); - addDeckName("GLPRT"); - addDeckName("GLPT"); - addDeckName("GLPTH"); - addDeckName("GMCPL"); - addDeckName("GMCTG"); - addDeckName("GMCTP"); - addDeckName("GMCTW"); - addDeckName("GMIR"); - addDeckName("GMIT"); - addDeckName("GMPR"); - addDeckName("GMPT"); - addDeckName("GMWDR"); - addDeckName("GMWDT"); - addDeckName("GMWIA"); - addDeckName("GMWIG"); - addDeckName("GMWIN"); - addDeckName("GMWIP"); - addDeckName("GMWIS"); - addDeckName("GMWIT"); - addDeckName("GMWIU"); - addDeckName("GMWIV"); - addDeckName("GMWPA"); - addDeckName("GMWPG"); - addDeckName("GMWPL"); - addDeckName("GMWPO"); - addDeckName("GMWPP"); - addDeckName("GMWPR"); - addDeckName("GMWPS"); - addDeckName("GMWPT"); - addDeckName("GMWPU"); - addDeckName("GMWPV"); - addDeckName("GMWWO"); - addDeckName("GMWWT"); - addDeckName("GNIR"); - addDeckName("GNIT"); - addDeckName("GNPR"); - addDeckName("GNPT"); - addDeckName("GOGR"); - addDeckName("GOGRH"); - addDeckName("GOIGR"); - addDeckName("GOIR"); - addDeckName("GOIRH"); - addDeckName("GOIRL"); - addDeckName("GOIRT"); - addDeckName("GOIT"); - addDeckName("GOITH"); - addDeckName("GOPGR"); - addDeckName("GOPI"); - addDeckName("GOPI2"); - addDeckName("GOPP"); - addDeckName("GOPP2"); addDeckName("GOPR"); - addDeckName("GOPRF"); addDeckName("GOPRH"); - addDeckName("GOPRL"); - addDeckName("GOPRNB"); - addDeckName("GOPRS"); - addDeckName("GOPRT"); addDeckName("GOPT"); - addDeckName("GOPTF"); + addDeckName("GOPRL"); + addDeckName("GWPT"); + addDeckName("GOPRT"); addDeckName("GOPTH"); - addDeckName("GOPTS"); - addDeckName("GOSPR"); - addDeckName("GOSRL"); - addDeckName("GOSRU"); - addDeckName("GOSSP"); - addDeckName("GOSTP"); - addDeckName("GPR"); - addDeckName("GPRB"); - addDeckName("GPRBG"); - addDeckName("GPRBW"); - addDeckName("GPRDC"); - addDeckName("GPRFP"); - addDeckName("GPRG"); - addDeckName("GPRW"); - addDeckName("GSGR"); - addDeckName("GSGT"); - addDeckName("GSIC"); - addDeckName("GSIR"); - addDeckName("GSIT"); - addDeckName("GSMF"); - addDeckName("GSPC"); - addDeckName("GSPR"); - addDeckName("GSPT"); - addDeckName("GTICHEA"); - addDeckName("GTIRALK"); - addDeckName("GTIRANI"); - addDeckName("GTIRCAT"); - addDeckName("GTIRFOA"); - addDeckName("GTIRHEA"); - addDeckName("GTIRSUR"); - addDeckName("GTITALK"); - addDeckName("GTITANI"); - addDeckName("GTITCAT"); - addDeckName("GTITFOA"); - addDeckName("GTITHEA"); - addDeckName("GTITSUR"); - addDeckName("GTPCHEA"); - addDeckName("GTPRALK"); - addDeckName("GTPRANI"); - addDeckName("GTPRCAT"); - addDeckName("GTPRFOA"); - addDeckName("GTPRHEA"); - addDeckName("GTPRSUR"); - addDeckName("GTPTALK"); - addDeckName("GTPTANI"); - addDeckName("GTPTCAT"); - addDeckName("GTPTFOA"); - addDeckName("GTPTHEA"); - addDeckName("GTPTSUR"); - addDeckName("GVIR"); addDeckName("GVIRL"); - addDeckName("GVIRT"); - addDeckName("GVIT"); - addDeckName("GVPGR"); - addDeckName("GVPR"); - addDeckName("GVPRL"); - addDeckName("GVPRT"); - addDeckName("GVPT"); - addDeckName("GWCT"); - addDeckName("GWCTH"); - addDeckName("GWGR"); - addDeckName("GWGRH"); - addDeckName("GWIGR"); + addDeckName("GWPTH"); + addDeckName("GOPRF"); + addDeckName("GOPRS"); + addDeckName("GGSRL"); + addDeckName("GALQ"); + addDeckName("GWPRH"); + addDeckName("GOPTF"); + addDeckName("GVIR"); + addDeckName("GGIRH"); + addDeckName("GGIR"); + addDeckName("GOPTS"); + addDeckName("GWSTP"); + addDeckName("GOIR"); + addDeckName("GMWIU"); + addDeckName("GOIRH"); + addDeckName("GOIRT"); + addDeckName("GJPT"); + addDeckName("GOIRL"); + addDeckName("GWPIR"); + addDeckName("GOIT"); + addDeckName("GMWIS"); + addDeckName("GOITH"); + addDeckName("GGPTF"); + addDeckName("GOPP2"); + addDeckName("GNIR"); + addDeckName("GOPP"); + addDeckName("GWIRL"); + addDeckName("GOPI"); + addDeckName("GWIT"); + addDeckName("GOGRH"); + addDeckName("GOPI2"); + addDeckName("GGIRT"); + addDeckName("GTPTSUR"); + addDeckName("GOPGR"); + addDeckName("GSMF"); + addDeckName("GOIGR"); + addDeckName("GWPR"); + addDeckName("GWPRT"); + addDeckName("GWPRL"); addDeckName("GWIR"); addDeckName("GWIRH"); - addDeckName("GWIRL"); - addDeckName("GWIRNB"); + addDeckName("GGPI"); addDeckName("GWIRT"); - addDeckName("GWIT"); + addDeckName("GMWPV"); + addDeckName("GMWDR"); addDeckName("GWITH"); - addDeckName("GWPGR"); + addDeckName("GWPP"); + addDeckName("GGPP"); + addDeckName("GWIGR"); + addDeckName("GMWPO"); + addDeckName("GWPP2"); addDeckName("GWPI"); addDeckName("GWPI2"); - addDeckName("GWPIR"); - addDeckName("GWPP"); - addDeckName("GWPP2"); - addDeckName("GWPR"); - addDeckName("GWPRH"); - addDeckName("GWPRL"); - addDeckName("GWPRNB"); - addDeckName("GWPRT"); - addDeckName("GWPT"); - addDeckName("GWPTH"); - addDeckName("GWSPR"); + addDeckName("GGPPS"); + addDeckName("GWPGR"); + addDeckName("GGPR"); + addDeckName("GGPP2"); + addDeckName("GEPR"); + addDeckName("GGPRH"); + addDeckName("GSPT"); + addDeckName("GGPPF2"); + addDeckName("GGPRT"); + addDeckName("GTITSUR"); + addDeckName("GGPRL"); + addDeckName("GGPRF"); + addDeckName("GGPRS"); + addDeckName("GGPPF"); + addDeckName("GGPT"); + addDeckName("GGPTH"); + addDeckName("GGPTS"); + addDeckName("GGIRL"); + addDeckName("GGPPS2"); + addDeckName("GOSPR"); + addDeckName("GGIT"); + addDeckName("GGITH"); + addDeckName("GGPI2"); + addDeckName("GGPGR"); + addDeckName("GGIGR"); + addDeckName("GSGR"); addDeckName("GWSRL"); + addDeckName("GGSR"); + addDeckName("GPRFP"); + addDeckName("GSGT"); + addDeckName("GGST"); + addDeckName("GFGR"); + addDeckName("GFGT"); + addDeckName("GGPRNBFP"); + addDeckName("GFMF"); + addDeckName("GPRBG"); + addDeckName("GGCR"); + addDeckName("GJPRH"); + addDeckName("GGCT"); + addDeckName("GGIMR"); + addDeckName("GGIMT"); + addDeckName("GTITALK"); + addDeckName("GGLIR"); + addDeckName("GJPRT"); + addDeckName("GCPC"); + addDeckName("GGQ"); + addDeckName("GVPRT"); + addDeckName("GLPR"); + addDeckName("GLPRH"); + addDeckName("GLPRT"); + addDeckName("GLPRL"); + addDeckName("GLPT"); + addDeckName("GLPTH"); + addDeckName("GJPR"); + addDeckName("GJPRL"); + addDeckName("GGCV"); + addDeckName("GJPTH"); + addDeckName("GLPRNB"); + addDeckName("GVPR"); + addDeckName("GVPRL"); + addDeckName("GVPT"); + addDeckName("GVPGR"); + addDeckName("GVIRT"); + addDeckName("GVIT"); + addDeckName("GWCT"); + addDeckName("GMWPR"); + addDeckName("GWCTH"); + addDeckName("GGOR"); + addDeckName("GTPRSUR"); + addDeckName("GGORH"); + addDeckName("GOGR"); + addDeckName("GWGR"); + addDeckName("GWGRH"); + addDeckName("GTPTCAT"); + addDeckName("GPRB"); + addDeckName("GGLR"); + addDeckName("GSPR"); + addDeckName("GGLRH"); + addDeckName("GMCTP"); + addDeckName("GMCTW"); + addDeckName("GMCTG"); + addDeckName("GMWPT"); + addDeckName("GMWPA"); + addDeckName("GMWPU"); + addDeckName("GMWPG"); + addDeckName("GMWPS"); + addDeckName("GMWPP"); + addDeckName("GMWDT"); + addDeckName("GMWPL"); + addDeckName("GMWIT"); + addDeckName("GMWIN"); + addDeckName("GMWIA"); + addDeckName("GMWIG"); + addDeckName("GMWIV"); + addDeckName("GMWIP"); + addDeckName("GOSSP"); + addDeckName("GMWWO"); + addDeckName("GMWWT"); + addDeckName("GEPT"); + addDeckName("GEFF"); + addDeckName("GGSPR"); + addDeckName("GGSRU"); + addDeckName("GGSSP"); + addDeckName("GGSTP"); + addDeckName("GOSRL"); + addDeckName("GOSRU"); + addDeckName("GOSTP"); + addDeckName("GEDC"); + addDeckName("GWSPR"); addDeckName("GWSRU"); addDeckName("GWSSP"); - addDeckName("GWSTP"); + addDeckName("GCPT"); + addDeckName("GAPI"); + addDeckName("GSIR"); + addDeckName("GSIT"); + addDeckName("GSPC"); + addDeckName("GSIC"); + addDeckName("GTPRANI"); + addDeckName("GTPTANI"); + addDeckName("GTIRANI"); + addDeckName("GPRG"); + addDeckName("GTITANI"); + addDeckName("GTPRCAT"); + addDeckName("GTIRCAT"); + addDeckName("GTITCAT"); + addDeckName("GTPCHEA"); + addDeckName("GTICHEA"); + addDeckName("GTPRHEA"); + addDeckName("GTPTHEA"); + addDeckName("GTIRHEA"); + addDeckName("GCPR"); + addDeckName("GTITHEA"); + addDeckName("GMPR"); + addDeckName("GMPT"); + addDeckName("GMIR"); + addDeckName("GMIT"); + addDeckName("GTPRFOA"); + addDeckName("GTPTFOA"); + addDeckName("GTIRFOA"); + addDeckName("GTITFOA"); + addDeckName("GGDC"); + addDeckName("GGDCQ"); + addDeckName("GMCPL"); + addDeckName("GPR"); + addDeckName("GPRDC"); + addDeckName("GWPRNB"); + addDeckName("GEIR"); + addDeckName("GEIT"); + addDeckName("GESR"); + addDeckName("GEST"); + addDeckName("GEDCQ"); + addDeckName("GPRW"); + addDeckName("GPRBW"); + addDeckName("GCIC"); + addDeckName("GOPRNB"); + addDeckName("GGPRNB"); + addDeckName("GWIRNB"); + addDeckName("GGIRNB"); + addDeckName("GCIR"); + addDeckName("GCIT"); + addDeckName("GNPR"); + addDeckName("GNPT"); + addDeckName("GNIT"); + addDeckName("GTIRSUR"); + addDeckName("GTPRALK"); + addDeckName("GTPTALK"); + addDeckName("GTIRALK"); setMatchRegex("GU.+|GTPR.+|GTPT.+|GTPC.+|GTIR.+|GTIT.+|GTIC.+|GTIRF.+|GTIRS.+|GTPRF.+|GTPRS.+|GTITF.+|GTITS.+|GTPTF.+|GTPTS.+|GTICF.+|GTICS.+|GTPCF.+|GTPCS.+"); { ParserRecord record; @@ -2851,9 +2753,7 @@ const std::string GROUP_PROBE::keywordName = "GROUP_PROBE"; const std::string GROUP_PROBE::GROUPS::itemName = "GROUPS"; -GRUPMAST::GRUPMAST( ) : ParserKeyword("GRUPMAST") -{ - setSizeType(SLASH_TERMINATED); +GRUPMAST::GRUPMAST() : ParserKeyword("GRUPMAST", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("GRUPMAST"); @@ -2886,11 +2786,9 @@ const std::string GRUPMAST::SLAVE_GROUP::itemName = "SLAVE_GROUP"; const std::string GRUPMAST::LIMITING_FRACTION::itemName = "LIMITING_FRACTION"; -GRUPNET::GRUPNET( ) : ParserKeyword("GRUPNET") -{ - setSizeType(SLASH_TERMINATED); - addValidSectionName("SCHEDULE"); +GRUPNET::GRUPNET() : ParserKeyword("GRUPNET", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SPECIAL"); + addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("GRUPNET"); { @@ -2937,7 +2835,7 @@ const std::string GRUPNET::TERMINAL_PRESSURE::itemName = "TERMINAL_PRESSURE"; const std::string GRUPNET::VFP_TABLE::itemName = "VFP_TABLE"; const int GRUPNET::VFP_TABLE::defaultValue = 0; const std::string GRUPNET::ALQ::itemName = "ALQ"; -const double GRUPNET::ALQ::defaultValue = 0.000000; +const double GRUPNET::ALQ::defaultValue = 0; const std::string GRUPNET::SUB_SEA_MANIFOLD::itemName = "SUB_SEA_MANIFOLD"; const std::string GRUPNET::SUB_SEA_MANIFOLD::defaultValue = "NO"; const std::string GRUPNET::LIFT_GAS_FLOW_THROUGH::itemName = "LIFT_GAS_FLOW_THROUGH"; @@ -2946,30 +2844,28 @@ const std::string GRUPNET::ALQ_SURFACE_EQV::itemName = "ALQ_SURFACE_EQV"; const std::string GRUPNET::ALQ_SURFACE_EQV::defaultValue = "NONE"; -GRUPRIG::GRUPRIG( ) : ParserKeyword("GRUPRIG") -{ - setSizeType(SLASH_TERMINATED); +GRUPRIG::GRUPRIG() : ParserKeyword("GRUPRIG", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("GRUPRIG"); { ParserRecord record; { - ParserItem item("GROUP_NAME", ParserItem::itype::STRING); + ParserItem item("GROUP", ParserItem::itype::STRING); record.addItem(item); } { - ParserItem item("WORKRIGNUM", ParserItem::itype::INT); + ParserItem item("WORKOVER_RIG_NUM", ParserItem::itype::INT); item.setDefault( 0 ); record.addItem(item); } { - ParserItem item("DRILRIGNUM", ParserItem::itype::INT); + ParserItem item("DRILLING_RIG_NUM", ParserItem::itype::INT); item.setDefault( 0 ); record.addItem(item); } { - ParserItem item("ADD", ParserItem::itype::STRING); + ParserItem item("ADD_OR_REMOVE", ParserItem::itype::STRING); item.setDefault( std::string("ADD") ); record.addItem(item); } @@ -2977,18 +2873,16 @@ GRUPRIG::GRUPRIG( ) : ParserKeyword("GRUPRIG") } } const std::string GRUPRIG::keywordName = "GRUPRIG"; -const std::string GRUPRIG::GROUP_NAME::itemName = "GROUP_NAME"; -const std::string GRUPRIG::WORKRIGNUM::itemName = "WORKRIGNUM"; -const int GRUPRIG::WORKRIGNUM::defaultValue = 0; -const std::string GRUPRIG::DRILRIGNUM::itemName = "DRILRIGNUM"; -const int GRUPRIG::DRILRIGNUM::defaultValue = 0; -const std::string GRUPRIG::ADD::itemName = "ADD"; -const std::string GRUPRIG::ADD::defaultValue = "ADD"; +const std::string GRUPRIG::GROUP::itemName = "GROUP"; +const std::string GRUPRIG::WORKOVER_RIG_NUM::itemName = "WORKOVER_RIG_NUM"; +const int GRUPRIG::WORKOVER_RIG_NUM::defaultValue = 0; +const std::string GRUPRIG::DRILLING_RIG_NUM::itemName = "DRILLING_RIG_NUM"; +const int GRUPRIG::DRILLING_RIG_NUM::defaultValue = 0; +const std::string GRUPRIG::ADD_OR_REMOVE::itemName = "ADD_OR_REMOVE"; +const std::string GRUPRIG::ADD_OR_REMOVE::defaultValue = "ADD"; -GRUPSLAV::GRUPSLAV( ) : ParserKeyword("GRUPSLAV") -{ - setSizeType(SLASH_TERMINATED); +GRUPSLAV::GRUPSLAV() : ParserKeyword("GRUPSLAV", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("GRUPSLAV"); @@ -3059,9 +2953,7 @@ const std::string GRUPSLAV::GAS_INJ_PROD_CONSTRAINTS::itemName = "GAS_INJ_PROD_C const std::string GRUPSLAV::GAS_INJ_PROD_CONSTRAINTS::defaultValue = "MAST"; -GRUPTARG::GRUPTARG( ) : ParserKeyword("GRUPTARG") -{ - setSizeType(SLASH_TERMINATED); +GRUPTARG::GRUPTARG() : ParserKeyword("GRUPTARG", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("GRUPTARG"); @@ -3090,9 +2982,7 @@ const std::string GRUPTARG::NEW_VALUE::itemName = "NEW_VALUE"; const double GRUPTARG::NEW_VALUE::defaultValue = 999999999999999949387135297074018866963645011013410073083904.000000; -GRUPTREE::GRUPTREE( ) : ParserKeyword("GRUPTREE") -{ - setSizeType(SLASH_TERMINATED); +GRUPTREE::GRUPTREE() : ParserKeyword("GRUPTREE", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("GRUPTREE"); @@ -3116,9 +3006,7 @@ const std::string GRUPTREE::PARENT_GROUP::itemName = "PARENT_GROUP"; const std::string GRUPTREE::PARENT_GROUP::defaultValue = "FIELD"; -GSATINJE::GSATINJE( ) : ParserKeyword("GSATINJE") -{ - setSizeType(SLASH_TERMINATED); +GSATINJE::GSATINJE() : ParserKeyword("GSATINJE", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("GSATINJE"); @@ -3155,16 +3043,14 @@ const std::string GSATINJE::keywordName = "GSATINJE"; const std::string GSATINJE::GROUP::itemName = "GROUP"; const std::string GSATINJE::PHASE::itemName = "PHASE"; const std::string GSATINJE::SURF_INJ_RATE::itemName = "SURF_INJ_RATE"; -const double GSATINJE::SURF_INJ_RATE::defaultValue = 0.000000; +const double GSATINJE::SURF_INJ_RATE::defaultValue = 0; const std::string GSATINJE::RES_INJ_RATE::itemName = "RES_INJ_RATE"; -const double GSATINJE::RES_INJ_RATE::defaultValue = 0.000000; +const double GSATINJE::RES_INJ_RATE::defaultValue = 0; const std::string GSATINJE::MEAN_CALORIFIC::itemName = "MEAN_CALORIFIC"; -const double GSATINJE::MEAN_CALORIFIC::defaultValue = 0.000000; +const double GSATINJE::MEAN_CALORIFIC::defaultValue = 0; -GSATPROD::GSATPROD( ) : ParserKeyword("GSATPROD") -{ - setSizeType(SLASH_TERMINATED); +GSATPROD::GSATPROD() : ParserKeyword("GSATPROD", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("GSATPROD"); @@ -3210,22 +3096,20 @@ GSATPROD::GSATPROD( ) : ParserKeyword("GSATPROD") const std::string GSATPROD::keywordName = "GSATPROD"; const std::string GSATPROD::SATELLITE_GROUP_NAME_OR_GROUP_NAME_ROOT::itemName = "SATELLITE_GROUP_NAME_OR_GROUP_NAME_ROOT"; const std::string GSATPROD::OIL_PRODUCTION_RATE::itemName = "OIL_PRODUCTION_RATE"; -const double GSATPROD::OIL_PRODUCTION_RATE::defaultValue = 0.000000; +const double GSATPROD::OIL_PRODUCTION_RATE::defaultValue = 0; const std::string GSATPROD::WATER_PRODUCTION_RATE::itemName = "WATER_PRODUCTION_RATE"; -const double GSATPROD::WATER_PRODUCTION_RATE::defaultValue = 0.000000; +const double GSATPROD::WATER_PRODUCTION_RATE::defaultValue = 0; const std::string GSATPROD::GAS_PRODUCTION_RATE::itemName = "GAS_PRODUCTION_RATE"; -const double GSATPROD::GAS_PRODUCTION_RATE::defaultValue = 0.000000; +const double GSATPROD::GAS_PRODUCTION_RATE::defaultValue = 0; const std::string GSATPROD::RES_FLUID_VOL_PRODUCTION_RATE::itemName = "RES_FLUID_VOL_PRODUCTION_RATE"; -const double GSATPROD::RES_FLUID_VOL_PRODUCTION_RATE::defaultValue = 0.000000; +const double GSATPROD::RES_FLUID_VOL_PRODUCTION_RATE::defaultValue = 0; const std::string GSATPROD::LIFT_GAS_SUPPLY_RATE::itemName = "LIFT_GAS_SUPPLY_RATE"; -const double GSATPROD::LIFT_GAS_SUPPLY_RATE::defaultValue = 0.000000; +const double GSATPROD::LIFT_GAS_SUPPLY_RATE::defaultValue = 0; const std::string GSATPROD::MEAN_CALORIFIC_VALUE::itemName = "MEAN_CALORIFIC_VALUE"; -const double GSATPROD::MEAN_CALORIFIC_VALUE::defaultValue = 0.000000; +const double GSATPROD::MEAN_CALORIFIC_VALUE::defaultValue = 0; -GSEPCOND::GSEPCOND( ) : ParserKeyword("GSEPCOND") -{ - setSizeType(SLASH_TERMINATED); +GSEPCOND::GSEPCOND() : ParserKeyword("GSEPCOND", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("GSEPCOND"); @@ -3247,9 +3131,7 @@ const std::string GSEPCOND::GROUP::itemName = "GROUP"; const std::string GSEPCOND::SEPARATOR::itemName = "SEPARATOR"; -GSSCPTST::GSSCPTST( ) : ParserKeyword("GSSCPTST") -{ - setFixedSize( (size_t) 1); +GSSCPTST::GSSCPTST() : ParserKeyword("GSSCPTST", KeywordSize(1, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("GSSCPTST"); @@ -3303,22 +3185,20 @@ const std::string GSSCPTST::GROUP::itemName = "GROUP"; const std::string GSSCPTST::CONTROL_MODE::itemName = "CONTROL_MODE"; const std::string GSSCPTST::CONTROL_MODE::defaultValue = "GRAT"; const std::string GSSCPTST::TARGET_PROD_RATE::itemName = "TARGET_PROD_RATE"; -const double GSSCPTST::TARGET_PROD_RATE::defaultValue = 0.000000; +const double GSSCPTST::TARGET_PROD_RATE::defaultValue = 0; const std::string GSSCPTST::TARGET_PROD_PERIOD::itemName = "TARGET_PROD_PERIOD"; -const double GSSCPTST::TARGET_PROD_PERIOD::defaultValue = 0.000000; +const double GSSCPTST::TARGET_PROD_PERIOD::defaultValue = 0; const std::string GSSCPTST::MAX_PROD_RATE_FLAG::itemName = "MAX_PROD_RATE_FLAG"; const int GSSCPTST::MAX_PROD_RATE_FLAG::defaultValue = 1; const std::string GSSCPTST::CONV_TOLERANCE::itemName = "CONV_TOLERANCE"; -const double GSSCPTST::CONV_TOLERANCE::defaultValue = 0.000000; +const double GSSCPTST::CONV_TOLERANCE::defaultValue = 0; const std::string GSSCPTST::MAT_IT::itemName = "MAT_IT"; const int GSSCPTST::MAT_IT::defaultValue = 6; const std::string GSSCPTST::SUB_GRP_CONTROL_FLAG::itemName = "SUB_GRP_CONTROL_FLAG"; const int GSSCPTST::SUB_GRP_CONTROL_FLAG::defaultValue = 1; -GSWINGF::GSWINGF( ) : ParserKeyword("GSWINGF") -{ - setSizeType(SLASH_TERMINATED); +GSWINGF::GSWINGF() : ParserKeyword("GSWINGF", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("GSWINGF"); @@ -3479,9 +3359,7 @@ const std::string GSWINGF::PROFILE_NOV::itemName = "PROFILE_NOV"; const std::string GSWINGF::PROFILE_DEC::itemName = "PROFILE_DEC"; -GTADD::GTADD( ) : ParserKeyword("GTADD") -{ - setSizeType(SLASH_TERMINATED); +GTADD::GTADD() : ParserKeyword("GTADD", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("GTADD"); @@ -3515,9 +3393,7 @@ const std::string GTADD::NUM_ADDITIONS::itemName = "NUM_ADDITIONS"; const int GTADD::NUM_ADDITIONS::defaultValue = 1; -GTMULT::GTMULT( ) : ParserKeyword("GTMULT") -{ - setSizeType(SLASH_TERMINATED); +GTMULT::GTMULT() : ParserKeyword("GTMULT", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("GTMULT"); @@ -3551,9 +3427,7 @@ const std::string GTMULT::NUM_MULT::itemName = "NUM_MULT"; const int GTMULT::NUM_MULT::defaultValue = 1; -GUIDECAL::GUIDECAL( ) : ParserKeyword("GUIDECAL") -{ - setFixedSize( (size_t) 1); +GUIDECAL::GUIDECAL() : ParserKeyword("GUIDECAL", KeywordSize(1, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("GUIDECAL"); @@ -3575,9 +3449,7 @@ const std::string GUIDECAL::COEFF_A::itemName = "COEFF_A"; const std::string GUIDECAL::COEFF_B::itemName = "COEFF_B"; -GUIDERAT::GUIDERAT( ) : ParserKeyword("GUIDERAT") -{ - setFixedSize( (size_t) 1); +GUIDERAT::GUIDERAT() : ParserKeyword("GUIDERAT", KeywordSize(1, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("GUIDERAT"); @@ -3649,21 +3521,21 @@ GUIDERAT::GUIDERAT( ) : ParserKeyword("GUIDERAT") } const std::string GUIDERAT::keywordName = "GUIDERAT"; const std::string GUIDERAT::MIN_CALC_TIME::itemName = "MIN_CALC_TIME"; -const double GUIDERAT::MIN_CALC_TIME::defaultValue = 0.000000; +const double GUIDERAT::MIN_CALC_TIME::defaultValue = 0; const std::string GUIDERAT::NOMINATED_PHASE::itemName = "NOMINATED_PHASE"; const std::string GUIDERAT::NOMINATED_PHASE::defaultValue = "NONE"; const std::string GUIDERAT::A::itemName = "A"; -const double GUIDERAT::A::defaultValue = 0.000000; +const double GUIDERAT::A::defaultValue = 0; const std::string GUIDERAT::B::itemName = "B"; -const double GUIDERAT::B::defaultValue = 0.000000; +const double GUIDERAT::B::defaultValue = 0; const std::string GUIDERAT::C::itemName = "C"; -const double GUIDERAT::C::defaultValue = 0.000000; +const double GUIDERAT::C::defaultValue = 0; const std::string GUIDERAT::D::itemName = "D"; -const double GUIDERAT::D::defaultValue = 0.000000; +const double GUIDERAT::D::defaultValue = 0; const std::string GUIDERAT::E::itemName = "E"; -const double GUIDERAT::E::defaultValue = 0.000000; +const double GUIDERAT::E::defaultValue = 0; const std::string GUIDERAT::F::itemName = "F"; -const double GUIDERAT::F::defaultValue = 0.000000; +const double GUIDERAT::F::defaultValue = 0; const std::string GUIDERAT::ALLOW_INCREASE::itemName = "ALLOW_INCREASE"; const std::string GUIDERAT::ALLOW_INCREASE::defaultValue = "YES"; const std::string GUIDERAT::DAMPING_FACTOR::itemName = "DAMPING_FACTOR"; @@ -3671,12 +3543,10 @@ const double GUIDERAT::DAMPING_FACTOR::defaultValue = 1.000000; const std::string GUIDERAT::USE_FREE_GAS::itemName = "USE_FREE_GAS"; const std::string GUIDERAT::USE_FREE_GAS::defaultValue = "NO"; const std::string GUIDERAT::MIN_GUIDE_RATE::itemName = "MIN_GUIDE_RATE"; -const double GUIDERAT::MIN_GUIDE_RATE::defaultValue = 0.000001; +const double GUIDERAT::MIN_GUIDE_RATE::defaultValue = 1e-06; -GUPFREQ::GUPFREQ( ) : ParserKeyword("GUPFREQ") -{ - setFixedSize( (size_t) 1); +GUPFREQ::GUPFREQ() : ParserKeyword("GUPFREQ", KeywordSize(1, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("GUPFREQ"); @@ -3695,9 +3565,7 @@ const std::string GUPFREQ::UPDATE_FREQ_TYPE::itemName = "UPDATE_FREQ_TYPE"; const std::string GUPFREQ::UPDATE_FREQ_TYPE::defaultValue = "ALL"; -GWRTWCV::GWRTWCV( ) : ParserKeyword("GWRTWCV") -{ - setSizeType(SLASH_TERMINATED); +GWRTWCV::GWRTWCV() : ParserKeyword("GWRTWCV", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("GWRTWCV"); diff --git a/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/H.cpp b/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/H.cpp index 12c9f5be16..14765cd9d0 100644 --- a/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/H.cpp +++ b/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/H.cpp @@ -1,18 +1,17 @@ -#include -#include -#include -#include + +#include +#include +#include +#include -#include +#include namespace Opm { namespace ParserKeywords { -HALFTRAN::HALFTRAN( ) : ParserKeyword("HALFTRAN") -{ - setFixedSize( (size_t) 0); +HALFTRAN::HALFTRAN() : ParserKeyword("HALFTRAN", KeywordSize(0, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("HALFTRAN"); @@ -20,13 +19,15 @@ HALFTRAN::HALFTRAN( ) : ParserKeyword("HALFTRAN") const std::string HALFTRAN::keywordName = "HALFTRAN"; -HAxxxxxx::HAxxxxxx( ) : ParserKeyword("HAxxxxxx") -{ - setFixedSize( (size_t) 1); +HAxxxxxx::HAxxxxxx() : ParserKeyword("HAxxxxxx", KeywordSize(1, false)) { addValidSectionName("PROPS"); addValidSectionName("REGIONS"); clearDeckNames(); - addDeckName("HAxxxxxx"); + addDeckName("HASOGCR"); + addDeckName("HASOWCR"); + addDeckName("HASWL"); + addDeckName("HASGLPC"); + addDeckName("HASWLPC"); { ParserRecord record; { @@ -42,9 +43,7 @@ const std::string HAxxxxxx::keywordName = "HAxxxxxx"; const std::string HAxxxxxx::data::itemName = "data"; -HBNUM::HBNUM( ) : ParserKeyword("HBNUM") -{ - setFixedSize( (size_t) 1); +HBNUM::HBNUM() : ParserKeyword("HBNUM", KeywordSize(1, false)) { addValidSectionName("REGIONS"); clearDeckNames(); addDeckName("HBNUM"); @@ -62,10 +61,7 @@ const std::string HBNUM::keywordName = "HBNUM"; const std::string HBNUM::data::itemName = "data"; -HDISP::HDISP( ) : ParserKeyword("HDISP") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTPVT",0); +HDISP::HDISP() : ParserKeyword("HDISP", KeywordSize("TABDIMS", "NTPVT", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("HDISP"); @@ -85,9 +81,7 @@ const std::string HDISP::keywordName = "HDISP"; const std::string HDISP::DATA::itemName = "DATA"; -HEATCR::HEATCR( ) : ParserKeyword("HEATCR") -{ - setFixedSize( (size_t) 1); +HEATCR::HEATCR() : ParserKeyword("HEATCR", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("HEATCR"); @@ -106,9 +100,7 @@ const std::string HEATCR::keywordName = "HEATCR"; const std::string HEATCR::data::itemName = "data"; -HEATCRT::HEATCRT( ) : ParserKeyword("HEATCRT") -{ - setFixedSize( (size_t) 1); +HEATCRT::HEATCRT() : ParserKeyword("HEATCRT", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("HEATCRT"); @@ -127,9 +119,7 @@ const std::string HEATCRT::keywordName = "HEATCRT"; const std::string HEATCRT::data::itemName = "data"; -HMAQUCT::HMAQUCT( ) : ParserKeyword("HMAQUCT") -{ - setSizeType(SLASH_TERMINATED); +HMAQUCT::HMAQUCT() : ParserKeyword("HMAQUCT", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SOLUTION"); clearDeckNames(); addDeckName("HMAQUCT"); @@ -167,9 +157,7 @@ const std::string HMAQUCT::DERIVATIES_RESP_AQUIFER_DEPTH::itemName = "DERIVATIES const std::string HMAQUCT::DERIVATIES_RESP_AQUIFER_DEPTH::defaultValue = "NO"; -HMAQUFET::HMAQUFET( ) : ParserKeyword("HMAQUFET") -{ - setSizeType(SLASH_TERMINATED); +HMAQUFET::HMAQUFET() : ParserKeyword("HMAQUFET", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SOLUTION"); clearDeckNames(); addDeckName("HMAQUFET"); @@ -207,9 +195,7 @@ const std::string HMAQUFET::DERIVATIES_RESP_AQUIFER_DEPTH::itemName = "DERIVATIE const std::string HMAQUFET::DERIVATIES_RESP_AQUIFER_DEPTH::defaultValue = "NO"; -HMAQUNUM::HMAQUNUM( ) : ParserKeyword("HMAQUNUM") -{ - setSizeType(SLASH_TERMINATED); +HMAQUNUM::HMAQUNUM() : ParserKeyword("HMAQUNUM", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("HMAQUNUM"); @@ -245,9 +231,7 @@ const std::string HMAQUNUM::DERIVATIES_RESP_AQUIFER_GRID_CON_TRANS::itemName = " const std::string HMAQUNUM::DERIVATIES_RESP_AQUIFER_GRID_CON_TRANS::defaultValue = "NO"; -HMDIMS::HMDIMS( ) : ParserKeyword("HMDIMS") -{ - setFixedSize( (size_t) 1); +HMDIMS::HMDIMS() : ParserKeyword("HMDIMS", KeywordSize(1, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("HMDIMS"); @@ -322,9 +306,7 @@ const std::string HMDIMS::MAX_WELL_CONN_PARAMS::itemName = "MAX_WELL_CONN_PARAMS const int HMDIMS::MAX_WELL_CONN_PARAMS::defaultValue = 0; -HMFAULTS::HMFAULTS( ) : ParserKeyword("HMFAULTS") -{ - setSizeType(SLASH_TERMINATED); +HMFAULTS::HMFAULTS() : ParserKeyword("HMFAULTS", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("HMFAULTS"); @@ -341,9 +323,7 @@ const std::string HMFAULTS::keywordName = "HMFAULTS"; const std::string HMFAULTS::FAULT_SEGMENT::itemName = "FAULT_SEGMENT"; -HMMLAQUN::HMMLAQUN( ) : ParserKeyword("HMMLAQUN") -{ - setSizeType(SLASH_TERMINATED); +HMMLAQUN::HMMLAQUN() : ParserKeyword("HMMLAQUN", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("HMMLAQUN"); @@ -384,9 +364,7 @@ const std::string HMMLAQUN::AQUIFER_GRID_CONN_MULT::itemName = "AQUIFER_GRID_CON const double HMMLAQUN::AQUIFER_GRID_CONN_MULT::defaultValue = 1.000000; -HMMLCTAQ::HMMLCTAQ( ) : ParserKeyword("HMMLCTAQ") -{ - setSizeType(SLASH_TERMINATED); +HMMLCTAQ::HMMLCTAQ() : ParserKeyword("HMMLCTAQ", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SOLUTION"); clearDeckNames(); addDeckName("HMMLCTAQ"); @@ -427,9 +405,7 @@ const std::string HMMLCTAQ::AQUIFER_DEPTH_MULT::itemName = "AQUIFER_DEPTH_MULT"; const double HMMLCTAQ::AQUIFER_DEPTH_MULT::defaultValue = 1.000000; -HMMLFTAQ::HMMLFTAQ( ) : ParserKeyword("HMMLFTAQ") -{ - setSizeType(SLASH_TERMINATED); +HMMLFTAQ::HMMLFTAQ() : ParserKeyword("HMMLFTAQ", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SOLUTION"); clearDeckNames(); addDeckName("HMMLFTAQ"); @@ -470,9 +446,7 @@ const std::string HMMLFTAQ::AQUIFER_DEPTH_MULT::itemName = "AQUIFER_DEPTH_MULT"; const double HMMLFTAQ::AQUIFER_DEPTH_MULT::defaultValue = 1.000000; -HMMLTWCN::HMMLTWCN( ) : ParserKeyword("HMMLTWCN") -{ - setSizeType(SLASH_TERMINATED); +HMMLTWCN::HMMLTWCN() : ParserKeyword("HMMLTWCN", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SOLUTION"); clearDeckNames(); addDeckName("HMMLTWCN"); @@ -527,9 +501,7 @@ const std::string HMMLTWCN::SKIN::itemName = "SKIN"; const double HMMLTWCN::SKIN::defaultValue = 1.000000; -HMMULTFT::HMMULTFT( ) : ParserKeyword("HMMULTFT") -{ - setSizeType(SLASH_TERMINATED); +HMMULTFT::HMMULTFT() : ParserKeyword("HMMULTFT", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("HMMULTFT"); @@ -562,9 +534,7 @@ const std::string HMMULTFT::DIFF_MULT::itemName = "DIFF_MULT"; const double HMMULTFT::DIFF_MULT::defaultValue = 1.000000; -HMMULTSG::HMMULTSG( ) : ParserKeyword("HMMULTSG") -{ - setFixedSize( (size_t) 1); +HMMULTSG::HMMULTSG() : ParserKeyword("HMMULTSG", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("HMMULTSG"); @@ -583,13 +553,16 @@ const std::string HMMULTSG::keywordName = "HMMULTSG"; const std::string HMMULTSG::data::itemName = "data"; -HMMULTxx::HMMULTxx( ) : ParserKeyword("HMMULTxx") -{ - setFixedSize( (size_t) 1); +HMMULTxx::HMMULTxx() : ParserKeyword("HMMULTxx", KeywordSize(1, false)) { addValidSectionName("EDIT"); addValidSectionName("GRID"); clearDeckNames(); - addDeckName("HMMULTxx"); + addDeckName("HMMULTX"); + addDeckName("HMMULTY"); + addDeckName("HMMULTR"); + addDeckName("HMMULTZ"); + addDeckName("HMMULTPV"); + addDeckName("HMMULTTH"); { ParserRecord record; { @@ -605,9 +578,7 @@ const std::string HMMULTxx::keywordName = "HMMULTxx"; const std::string HMMULTxx::data::itemName = "data"; -HMPROPS::HMPROPS( ) : ParserKeyword("HMPROPS") -{ - setFixedSize( (size_t) 0); +HMPROPS::HMPROPS() : ParserKeyword("HMPROPS", KeywordSize(0, false)) { addValidSectionName("PROPS"); addValidSectionName("REGIONS"); clearDeckNames(); @@ -616,9 +587,7 @@ HMPROPS::HMPROPS( ) : ParserKeyword("HMPROPS") const std::string HMPROPS::keywordName = "HMPROPS"; -HMROCK::HMROCK( ) : ParserKeyword("HMROCK") -{ - setSizeType(SLASH_TERMINATED); +HMROCK::HMROCK() : ParserKeyword("HMROCK", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("HMROCK"); @@ -642,9 +611,7 @@ const std::string HMROCK::CALCULATE_GRADIENTS::itemName = "CALCULATE_GRADIENTS"; const int HMROCK::CALCULATE_GRADIENTS::defaultValue = 0; -HMROCKT::HMROCKT( ) : ParserKeyword("HMROCKT") -{ - setSizeType(SLASH_TERMINATED); +HMROCKT::HMROCKT() : ParserKeyword("HMROCKT", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("HMROCKT"); @@ -671,10 +638,7 @@ const std::string HMROCKT::CALCULATE_GRADIENTS_1::itemName = "CALCULATE_GRADIENT const std::string HMROCKT::CALCULATE_GRADIENTS_2::itemName = "CALCULATE_GRADIENTS_2"; -HMRREF::HMRREF( ) : ParserKeyword("HMRREF") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("ROCKCOMP","NTROCC",0); +HMRREF::HMRREF() : ParserKeyword("HMRREF", KeywordSize("ROCKCOMP", "NTROCC", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("HMRREF"); @@ -698,9 +662,7 @@ const std::string HMRREF::P_REF::itemName = "P_REF"; const std::string HMRREF::P_DIM::itemName = "P_DIM"; -HMWELCON::HMWELCON( ) : ParserKeyword("HMWELCON") -{ - setSizeType(SLASH_TERMINATED); +HMWELCON::HMWELCON() : ParserKeyword("HMWELCON", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SOLUTION"); clearDeckNames(); addDeckName("HMWELCON"); @@ -753,9 +715,7 @@ const std::string HMWELCON::REQ_SKIN_FACTOR_GRAD::itemName = "REQ_SKIN_FACTOR_GR const std::string HMWELCON::REQ_SKIN_FACTOR_GRAD::defaultValue = "NO"; -HMWPIMLT::HMWPIMLT( ) : ParserKeyword("HMWPIMLT") -{ - setSizeType(SLASH_TERMINATED); +HMWPIMLT::HMWPIMLT() : ParserKeyword("HMWPIMLT", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("HMWPIMLT"); @@ -772,12 +732,33 @@ const std::string HMWPIMLT::keywordName = "HMWPIMLT"; const std::string HMWPIMLT::WELL::itemName = "WELL"; -HMxxxxxx::HMxxxxxx( ) : ParserKeyword("HMxxxxxx") -{ - setFixedSize( (size_t) 1); +HMxxxxxx::HMxxxxxx() : ParserKeyword("HMxxxxxx", KeywordSize(1, false)) { addValidSectionName("REGIONS"); clearDeckNames(); - addDeckName("HMxxxxxx"); + addDeckName("HMTRNXY"); + addDeckName("HMSWCR"); + addDeckName("HMTRANX"); + addDeckName("HMTRANY"); + addDeckName("HMPERMY"); + addDeckName("HMTRANZ"); + addDeckName("HMPORVM"); + addDeckName("HMSIGMA"); + addDeckName("HMPERMX"); + addDeckName("HMSOGCR"); + addDeckName("HMKRO"); + addDeckName("HMPRMXY"); + addDeckName("HMPCW"); + addDeckName("HMPERMZ"); + addDeckName("HMSGCR"); + addDeckName("HMSOWCR"); + addDeckName("HMSWL"); + addDeckName("HMKRW"); + addDeckName("HMKRG"); + addDeckName("HMKRWR"); + addDeckName("HMKRGR"); + addDeckName("HMKRORW"); + addDeckName("HMKRORG"); + addDeckName("HMPCG"); { ParserRecord record; { @@ -792,9 +773,7 @@ const std::string HMxxxxxx::keywordName = "HMxxxxxx"; const std::string HMxxxxxx::data::itemName = "data"; -HRFIN::HRFIN( ) : ParserKeyword("HRFIN") -{ - setFixedSize( (size_t) 1); +HRFIN::HRFIN() : ParserKeyword("HRFIN", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("HRFIN"); @@ -813,9 +792,7 @@ const std::string HRFIN::keywordName = "HRFIN"; const std::string HRFIN::data::itemName = "data"; -HWKRO::HWKRO( ) : ParserKeyword("HWKRO") -{ - setFixedSize( (size_t) 1); +HWKRO::HWKRO() : ParserKeyword("HWKRO", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("HWKRO"); @@ -834,9 +811,7 @@ const std::string HWKRO::keywordName = "HWKRO"; const std::string HWKRO::data::itemName = "data"; -HWKRORG::HWKRORG( ) : ParserKeyword("HWKRORG") -{ - setFixedSize( (size_t) 1); +HWKRORG::HWKRORG() : ParserKeyword("HWKRORG", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("HWKRORG"); @@ -855,9 +830,7 @@ const std::string HWKRORG::keywordName = "HWKRORG"; const std::string HWKRORG::data::itemName = "data"; -HWKRORW::HWKRORW( ) : ParserKeyword("HWKRORW") -{ - setFixedSize( (size_t) 1); +HWKRORW::HWKRORW() : ParserKeyword("HWKRORW", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("HWKRORW"); @@ -876,9 +849,7 @@ const std::string HWKRORW::keywordName = "HWKRORW"; const std::string HWKRORW::data::itemName = "data"; -HWKRW::HWKRW( ) : ParserKeyword("HWKRW") -{ - setFixedSize( (size_t) 1); +HWKRW::HWKRW() : ParserKeyword("HWKRW", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("HWKRW"); @@ -897,9 +868,7 @@ const std::string HWKRW::keywordName = "HWKRW"; const std::string HWKRW::data::itemName = "data"; -HWKRWR::HWKRWR( ) : ParserKeyword("HWKRWR") -{ - setFixedSize( (size_t) 1); +HWKRWR::HWKRWR() : ParserKeyword("HWKRWR", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("HWKRWR"); @@ -918,9 +887,7 @@ const std::string HWKRWR::keywordName = "HWKRWR"; const std::string HWKRWR::data::itemName = "data"; -HWPCW::HWPCW( ) : ParserKeyword("HWPCW") -{ - setFixedSize( (size_t) 1); +HWPCW::HWPCW() : ParserKeyword("HWPCW", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("HWPCW"); @@ -939,9 +906,7 @@ const std::string HWPCW::keywordName = "HWPCW"; const std::string HWPCW::data::itemName = "data"; -HWSNUM::HWSNUM( ) : ParserKeyword("HWSNUM") -{ - setFixedSize( (size_t) 1); +HWSNUM::HWSNUM() : ParserKeyword("HWSNUM", KeywordSize(1, false)) { addValidSectionName("REGIONS"); clearDeckNames(); addDeckName("HWSNUM"); @@ -959,9 +924,7 @@ const std::string HWSNUM::keywordName = "HWSNUM"; const std::string HWSNUM::data::itemName = "data"; -HWSOGCR::HWSOGCR( ) : ParserKeyword("HWSOGCR") -{ - setFixedSize( (size_t) 1); +HWSOGCR::HWSOGCR() : ParserKeyword("HWSOGCR", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("HWSOGCR"); @@ -980,9 +943,7 @@ const std::string HWSOGCR::keywordName = "HWSOGCR"; const std::string HWSOGCR::data::itemName = "data"; -HWSOWCR::HWSOWCR( ) : ParserKeyword("HWSOWCR") -{ - setFixedSize( (size_t) 1); +HWSOWCR::HWSOWCR() : ParserKeyword("HWSOWCR", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("HWSOWCR"); @@ -1001,9 +962,7 @@ const std::string HWSOWCR::keywordName = "HWSOWCR"; const std::string HWSOWCR::data::itemName = "data"; -HWSWCR::HWSWCR( ) : ParserKeyword("HWSWCR") -{ - setFixedSize( (size_t) 1); +HWSWCR::HWSWCR() : ParserKeyword("HWSWCR", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("HWSWCR"); @@ -1022,9 +981,7 @@ const std::string HWSWCR::keywordName = "HWSWCR"; const std::string HWSWCR::data::itemName = "data"; -HWSWL::HWSWL( ) : ParserKeyword("HWSWL") -{ - setFixedSize( (size_t) 1); +HWSWL::HWSWL() : ParserKeyword("HWSWL", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("HWSWL"); @@ -1043,9 +1000,7 @@ const std::string HWSWL::keywordName = "HWSWL"; const std::string HWSWL::data::itemName = "data"; -HWSWLPC::HWSWLPC( ) : ParserKeyword("HWSWLPC") -{ - setFixedSize( (size_t) 1); +HWSWLPC::HWSWLPC() : ParserKeyword("HWSWLPC", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("HWSWLPC"); @@ -1064,9 +1019,7 @@ const std::string HWSWLPC::keywordName = "HWSWLPC"; const std::string HWSWLPC::data::itemName = "data"; -HWSWU::HWSWU( ) : ParserKeyword("HWSWU") -{ - setFixedSize( (size_t) 1); +HWSWU::HWSWU() : ParserKeyword("HWSWU", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("HWSWU"); @@ -1085,9 +1038,7 @@ const std::string HWSWU::keywordName = "HWSWU"; const std::string HWSWU::data::itemName = "data"; -HXFIN::HXFIN( ) : ParserKeyword("HXFIN") -{ - setFixedSize( (size_t) 1); +HXFIN::HXFIN() : ParserKeyword("HXFIN", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("HXFIN"); @@ -1106,9 +1057,7 @@ const std::string HXFIN::keywordName = "HXFIN"; const std::string HXFIN::data::itemName = "data"; -HYDRHEAD::HYDRHEAD( ) : ParserKeyword("HYDRHEAD") -{ - setFixedSize( (size_t) 1); +HYDRHEAD::HYDRHEAD() : ParserKeyword("HYDRHEAD", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("HYDRHEAD"); @@ -1139,9 +1088,7 @@ const std::string HYDRHEAD::REMOVE_DEPTH_TERMS::itemName = "REMOVE_DEPTH_TERMS"; const std::string HYDRHEAD::REMOVE_DEPTH_TERMS::defaultValue = "NO"; -HYFIN::HYFIN( ) : ParserKeyword("HYFIN") -{ - setFixedSize( (size_t) 1); +HYFIN::HYFIN() : ParserKeyword("HYFIN", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("HYFIN"); @@ -1160,9 +1107,7 @@ const std::string HYFIN::keywordName = "HYFIN"; const std::string HYFIN::data::itemName = "data"; -HYMOBGDR::HYMOBGDR( ) : ParserKeyword("HYMOBGDR") -{ - setFixedSize( (size_t) 0); +HYMOBGDR::HYMOBGDR() : ParserKeyword("HYMOBGDR", KeywordSize(0, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("HYMOBGDR"); @@ -1170,9 +1115,7 @@ HYMOBGDR::HYMOBGDR( ) : ParserKeyword("HYMOBGDR") const std::string HYMOBGDR::keywordName = "HYMOBGDR"; -HYST::HYST( ) : ParserKeyword("HYST") -{ - setFixedSize( (size_t) 0); +HYST::HYST() : ParserKeyword("HYST", KeywordSize(0, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("HYST"); @@ -1180,9 +1123,7 @@ HYST::HYST( ) : ParserKeyword("HYST") const std::string HYST::keywordName = "HYST"; -HYSTCHCK::HYSTCHCK( ) : ParserKeyword("HYSTCHCK") -{ - setFixedSize( (size_t) 1); +HYSTCHCK::HYSTCHCK() : ParserKeyword("HYSTCHCK", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("HYSTCHCK"); @@ -1194,9 +1135,7 @@ HYSTCHCK::HYSTCHCK( ) : ParserKeyword("HYSTCHCK") const std::string HYSTCHCK::keywordName = "HYSTCHCK"; -HZFIN::HZFIN( ) : ParserKeyword("HZFIN") -{ - setFixedSize( (size_t) 1); +HZFIN::HZFIN() : ParserKeyword("HZFIN", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("HZFIN"); diff --git a/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/I.cpp b/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/I.cpp index 858e37feab..1e1e9003c4 100644 --- a/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/I.cpp +++ b/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/I.cpp @@ -1,18 +1,17 @@ -#include -#include -#include -#include + +#include +#include +#include +#include -#include +#include namespace Opm { namespace ParserKeywords { -IHOST::IHOST( ) : ParserKeyword("IHOST") -{ - setSizeType(SLASH_TERMINATED); +IHOST::IHOST() : ParserKeyword("IHOST", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("IHOST"); @@ -36,9 +35,7 @@ const std::string IHOST::PROCESS::itemName = "PROCESS"; const int IHOST::PROCESS::defaultValue = 0; -IMBNUM::IMBNUM( ) : ParserKeyword("IMBNUM") -{ - setFixedSize( (size_t) 1); +IMBNUM::IMBNUM() : ParserKeyword("IMBNUM", KeywordSize(1, false)) { addValidSectionName("REGIONS"); clearDeckNames(); addDeckName("IMBNUM"); @@ -56,9 +53,7 @@ const std::string IMBNUM::keywordName = "IMBNUM"; const std::string IMBNUM::data::itemName = "data"; -IMBNUMMF::IMBNUMMF( ) : ParserKeyword("IMBNUMMF") -{ - setFixedSize( (size_t) 1); +IMBNUMMF::IMBNUMMF() : ParserKeyword("IMBNUMMF", KeywordSize(1, false)) { addValidSectionName("REGIONS"); clearDeckNames(); addDeckName("IMBNUMMF"); @@ -76,10 +71,7 @@ const std::string IMBNUMMF::keywordName = "IMBNUMMF"; const std::string IMBNUMMF::data::itemName = "data"; -IMKRVD::IMKRVD( ) : ParserKeyword("IMKRVD") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("ENDSCALE","NUM_TABLES",0); +IMKRVD::IMKRVD() : ParserKeyword("IMKRVD", KeywordSize("ENDSCALE", "NTENDP", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("IMKRVD"); @@ -105,10 +97,7 @@ const std::string IMKRVD::keywordName = "IMKRVD"; const std::string IMKRVD::DATA::itemName = "DATA"; -IMPCVD::IMPCVD( ) : ParserKeyword("IMPCVD") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("ENDSCALE","NTENDP",0); +IMPCVD::IMPCVD() : ParserKeyword("IMPCVD", KeywordSize("ENDSCALE", "NTENDP", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("IMPCVD"); @@ -129,9 +118,7 @@ const std::string IMPCVD::keywordName = "IMPCVD"; const std::string IMPCVD::DATA::itemName = "DATA"; -IMPES::IMPES( ) : ParserKeyword("IMPES") -{ - setFixedSize( (size_t) 0); +IMPES::IMPES() : ParserKeyword("IMPES", KeywordSize(0, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("IMPES"); @@ -139,9 +126,7 @@ IMPES::IMPES( ) : ParserKeyword("IMPES") const std::string IMPES::keywordName = "IMPES"; -IMPLICIT::IMPLICIT( ) : ParserKeyword("IMPLICIT") -{ - setFixedSize( (size_t) 0); +IMPLICIT::IMPLICIT() : ParserKeyword("IMPLICIT", KeywordSize(0, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("IMPLICIT"); @@ -149,11 +134,9 @@ IMPLICIT::IMPLICIT( ) : ParserKeyword("IMPLICIT") const std::string IMPLICIT::keywordName = "IMPLICIT"; -IMPORT::IMPORT( ) : ParserKeyword("IMPORT") -{ - setFixedSize( (size_t) 1); - addValidSectionName("EDIT"); +IMPORT::IMPORT() : ParserKeyword("IMPORT", KeywordSize(1, false)) { addValidSectionName("GRID"); + addValidSectionName("EDIT"); addValidSectionName("PROPS"); addValidSectionName("REGIONS"); addValidSectionName("SOLUTION"); @@ -179,10 +162,7 @@ const std::string IMPORT::FORMATTED::itemName = "FORMATTED"; const std::string IMPORT::FORMATTED::defaultValue = "UNFORMATTED"; -IMPTVD::IMPTVD( ) : ParserKeyword("IMPTVD") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("ENDSCALE","NUM_TABLES",0); +IMPTVD::IMPTVD() : ParserKeyword("IMPTVD", KeywordSize("ENDSCALE", "NTENDP", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("IMPTVD"); @@ -209,10 +189,7 @@ const std::string IMPTVD::keywordName = "IMPTVD"; const std::string IMPTVD::DATA::itemName = "DATA"; -IMSPCVD::IMSPCVD( ) : ParserKeyword("IMSPCVD") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("ENDSCALE","NTENDP",0); +IMSPCVD::IMSPCVD() : ParserKeyword("IMSPCVD", KeywordSize("ENDSCALE", "NTENDP", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("IMSPCVD"); @@ -233,17 +210,15 @@ const std::string IMSPCVD::keywordName = "IMSPCVD"; const std::string IMSPCVD::DATA::itemName = "DATA"; -INCLUDE::INCLUDE( ) : ParserKeyword("INCLUDE") -{ - setFixedSize( (size_t) 1); +INCLUDE::INCLUDE() : ParserKeyword("INCLUDE", KeywordSize(1, false)) { + addValidSectionName("RUNSPEC"); + addValidSectionName("PROPS"); addValidSectionName("EDIT"); addValidSectionName("GRID"); - addValidSectionName("PROPS"); addValidSectionName("REGIONS"); - addValidSectionName("RUNSPEC"); - addValidSectionName("SCHEDULE"); addValidSectionName("SOLUTION"); addValidSectionName("SUMMARY"); + addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("INCLUDE"); { @@ -259,9 +234,7 @@ const std::string INCLUDE::keywordName = "INCLUDE"; const std::string INCLUDE::IncludeFile::itemName = "IncludeFile"; -INIT::INIT( ) : ParserKeyword("INIT") -{ - setFixedSize( (size_t) 0); +INIT::INIT() : ParserKeyword("INIT", KeywordSize(0, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("INIT"); @@ -269,9 +242,7 @@ INIT::INIT( ) : ParserKeyword("INIT") const std::string INIT::keywordName = "INIT"; -INRAD::INRAD( ) : ParserKeyword("INRAD") -{ - setFixedSize( (size_t) 1); +INRAD::INRAD() : ParserKeyword("INRAD", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("INRAD"); @@ -289,9 +260,7 @@ const std::string INRAD::keywordName = "INRAD"; const std::string INRAD::RADIUS::itemName = "RADIUS"; -INSPEC::INSPEC( ) : ParserKeyword("INSPEC") -{ - setFixedSize( (size_t) 0); +INSPEC::INSPEC() : ParserKeyword("INSPEC", KeywordSize(0, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("INSPEC"); @@ -299,9 +268,7 @@ INSPEC::INSPEC( ) : ParserKeyword("INSPEC") const std::string INSPEC::keywordName = "INSPEC"; -INTPC::INTPC( ) : ParserKeyword("INTPC") -{ - setFixedSize( (size_t) 1); +INTPC::INTPC() : ParserKeyword("INTPC", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("INTPC"); @@ -320,9 +287,7 @@ const std::string INTPC::PHASE::itemName = "PHASE"; const std::string INTPC::PHASE::defaultValue = "BOTH"; -IONROCK::IONROCK( ) : ParserKeyword("IONROCK") -{ - setFixedSize( (size_t) 1); +IONROCK::IONROCK() : ParserKeyword("IONROCK", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("IONROCK"); @@ -340,10 +305,7 @@ const std::string IONROCK::keywordName = "IONROCK"; const std::string IONROCK::data::itemName = "data"; -IONXROCK::IONXROCK( ) : ParserKeyword("IONXROCK") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTSFUN",0); +IONXROCK::IONXROCK() : ParserKeyword("IONXROCK", KeywordSize("TABDIMS", "NTSFUN", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("IONXROCK"); @@ -359,13 +321,10 @@ IONXROCK::IONXROCK( ) : ParserKeyword("IONXROCK") } const std::string IONXROCK::keywordName = "IONXROCK"; const std::string IONXROCK::VALUE::itemName = "VALUE"; -const double IONXROCK::VALUE::defaultValue = 0.000000; +const double IONXROCK::VALUE::defaultValue = 0; -IONXSURF::IONXSURF( ) : ParserKeyword("IONXSURF") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTSFUN",0); +IONXSURF::IONXSURF() : ParserKeyword("IONXSURF", KeywordSize("TABDIMS", "NTSFUN", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("IONXSURF"); @@ -386,13 +345,14 @@ IONXSURF::IONXSURF( ) : ParserKeyword("IONXSURF") const std::string IONXSURF::keywordName = "IONXSURF"; const std::string IONXSURF::MOLECULAR_WEIGHT::itemName = "MOLECULAR_WEIGHT"; const std::string IONXSURF::ION_EXCH_CONST::itemName = "ION_EXCH_CONST"; -const double IONXSURF::ION_EXCH_CONST::defaultValue = 0.000000; +const double IONXSURF::ION_EXCH_CONST::defaultValue = 0; -IPCG::IPCG( ) : ParserKeyword("IPCG") -{ - setFixedSize( (size_t) 1); +IPCG::IPCG() : ParserKeyword("IPCG", KeywordSize(1, false)) { addValidSectionName("PROPS"); + setRequiredKeywords({ + "ENDSCALE", + }); clearDeckNames(); addDeckName("IPCG"); { @@ -410,10 +370,11 @@ const std::string IPCG::keywordName = "IPCG"; const std::string IPCG::data::itemName = "data"; -IPCW::IPCW( ) : ParserKeyword("IPCW") -{ - setFixedSize( (size_t) 1); +IPCW::IPCW() : ParserKeyword("IPCW", KeywordSize(1, false)) { addValidSectionName("PROPS"); + setRequiredKeywords({ + "ENDSCALE", + }); clearDeckNames(); addDeckName("IPCW"); { @@ -431,9 +392,7 @@ const std::string IPCW::keywordName = "IPCW"; const std::string IPCW::data::itemName = "data"; -ISGCR::ISGCR( ) : ParserKeyword("ISGCR") -{ - setFixedSize( (size_t) 1); +ISGCR::ISGCR() : ParserKeyword("ISGCR", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("ISGCR"); @@ -452,9 +411,7 @@ const std::string ISGCR::keywordName = "ISGCR"; const std::string ISGCR::data::itemName = "data"; -ISGL::ISGL( ) : ParserKeyword("ISGL") -{ - setFixedSize( (size_t) 1); +ISGL::ISGL() : ParserKeyword("ISGL", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("ISGL"); @@ -473,9 +430,7 @@ const std::string ISGL::keywordName = "ISGL"; const std::string ISGL::data::itemName = "data"; -ISGLPC::ISGLPC( ) : ParserKeyword("ISGLPC") -{ - setFixedSize( (size_t) 1); +ISGLPC::ISGLPC() : ParserKeyword("ISGLPC", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("ISGLPC"); @@ -494,9 +449,7 @@ const std::string ISGLPC::keywordName = "ISGLPC"; const std::string ISGLPC::data::itemName = "data"; -ISGU::ISGU( ) : ParserKeyword("ISGU") -{ - setFixedSize( (size_t) 1); +ISGU::ISGU() : ParserKeyword("ISGU", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("ISGU"); @@ -515,9 +468,7 @@ const std::string ISGU::keywordName = "ISGU"; const std::string ISGU::data::itemName = "data"; -ISOGCR::ISOGCR( ) : ParserKeyword("ISOGCR") -{ - setFixedSize( (size_t) 1); +ISOGCR::ISOGCR() : ParserKeyword("ISOGCR", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("ISOGCR"); @@ -536,9 +487,7 @@ const std::string ISOGCR::keywordName = "ISOGCR"; const std::string ISOGCR::data::itemName = "data"; -ISOLNUM::ISOLNUM( ) : ParserKeyword("ISOLNUM") -{ - setFixedSize( (size_t) 1); +ISOLNUM::ISOLNUM() : ParserKeyword("ISOLNUM", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("ISOLNUM"); @@ -556,9 +505,7 @@ const std::string ISOLNUM::keywordName = "ISOLNUM"; const std::string ISOLNUM::data::itemName = "data"; -ISOWCR::ISOWCR( ) : ParserKeyword("ISOWCR") -{ - setFixedSize( (size_t) 1); +ISOWCR::ISOWCR() : ParserKeyword("ISOWCR", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("ISOWCR"); @@ -577,9 +524,7 @@ const std::string ISOWCR::keywordName = "ISOWCR"; const std::string ISOWCR::data::itemName = "data"; -ISWCR::ISWCR( ) : ParserKeyword("ISWCR") -{ - setFixedSize( (size_t) 1); +ISWCR::ISWCR() : ParserKeyword("ISWCR", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("ISWCR"); @@ -598,9 +543,7 @@ const std::string ISWCR::keywordName = "ISWCR"; const std::string ISWCR::data::itemName = "data"; -ISWL::ISWL( ) : ParserKeyword("ISWL") -{ - setFixedSize( (size_t) 1); +ISWL::ISWL() : ParserKeyword("ISWL", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("ISWL"); @@ -619,9 +562,7 @@ const std::string ISWL::keywordName = "ISWL"; const std::string ISWL::data::itemName = "data"; -ISWLPC::ISWLPC( ) : ParserKeyword("ISWLPC") -{ - setFixedSize( (size_t) 1); +ISWLPC::ISWLPC() : ParserKeyword("ISWLPC", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("ISWLPC"); @@ -640,9 +581,7 @@ const std::string ISWLPC::keywordName = "ISWLPC"; const std::string ISWLPC::data::itemName = "data"; -ISWU::ISWU( ) : ParserKeyword("ISWU") -{ - setFixedSize( (size_t) 1); +ISWU::ISWU() : ParserKeyword("ISWU", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("ISWU"); diff --git a/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/J.cpp b/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/J.cpp index 76b3d0141b..58f2d2afaf 100644 --- a/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/J.cpp +++ b/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/J.cpp @@ -1,19 +1,21 @@ -#include -#include -#include -#include + +#include +#include +#include +#include -#include +#include namespace Opm { namespace ParserKeywords { -JFUNC::JFUNC( ) : ParserKeyword("JFUNC") -{ - setFixedSize( (size_t) 1); +JFUNC::JFUNC() : ParserKeyword("JFUNC", KeywordSize(1, false)) { addValidSectionName("GRID"); + setRequiredKeywords({ + "ENDSCALE", + }); clearDeckNames(); addDeckName("JFUNC"); { @@ -68,11 +70,11 @@ const std::string JFUNC::DIRECTION::itemName = "DIRECTION"; const std::string JFUNC::DIRECTION::defaultValue = "XY"; -JFUNCR::JFUNCR( ) : ParserKeyword("JFUNCR") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTSFUN",0); +JFUNCR::JFUNCR() : ParserKeyword("JFUNCR", KeywordSize("TABDIMS", "NTSFUN", false, 0)) { addValidSectionName("GRID"); + setRequiredKeywords({ + "ENDSCALE", + }); clearDeckNames(); addDeckName("JFUNCR"); { diff --git a/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/K.cpp b/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/K.cpp index 362a8eee8a..c6cb7e4b00 100644 --- a/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/K.cpp +++ b/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/K.cpp @@ -1,21 +1,29 @@ -#include -#include -#include -#include + +#include +#include +#include +#include -#include +#include namespace Opm { namespace ParserKeywords { -KRNUM::KRNUM( ) : ParserKeyword("KRNUM") -{ - setFixedSize( (size_t) 1); +KRNUM::KRNUM() : ParserKeyword("KRNUM", KeywordSize(1, false)) { addValidSectionName("REGIONS"); clearDeckNames(); - addDeckName("KRNUM"); + addDeckName("KRNUMX"); + addDeckName("KRNUMX-"); + addDeckName("KRNUMY"); + addDeckName("KRNUMY-"); + addDeckName("KRNUMR"); + addDeckName("KRNUMZ"); + addDeckName("KRNUMR-"); + addDeckName("KRNUMZ-"); + addDeckName("KRNUMT"); + addDeckName("KRNUMT-"); { ParserRecord record; { @@ -30,9 +38,7 @@ const std::string KRNUM::keywordName = "KRNUM"; const std::string KRNUM::data::itemName = "data"; -KRNUMMF::KRNUMMF( ) : ParserKeyword("KRNUMMF") -{ - setFixedSize( (size_t) 1); +KRNUMMF::KRNUMMF() : ParserKeyword("KRNUMMF", KeywordSize(1, false)) { addValidSectionName("REGIONS"); clearDeckNames(); addDeckName("KRNUMMF"); diff --git a/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/L.cpp b/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/L.cpp index 0ce74c8eff..649f364148 100644 --- a/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/L.cpp +++ b/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/L.cpp @@ -1,18 +1,17 @@ -#include -#include -#include -#include + +#include +#include +#include +#include -#include +#include namespace Opm { namespace ParserKeywords { -LAB::LAB( ) : ParserKeyword("LAB") -{ - setFixedSize( (size_t) 0); +LAB::LAB() : ParserKeyword("LAB", KeywordSize(0, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("LAB"); @@ -20,9 +19,7 @@ LAB::LAB( ) : ParserKeyword("LAB") const std::string LAB::keywordName = "LAB"; -LANGMPL::LANGMPL( ) : ParserKeyword("LANGMPL") -{ - setFixedSize( (size_t) 1); +LANGMPL::LANGMPL() : ParserKeyword("LANGMPL", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("LANGMPL"); @@ -41,10 +38,7 @@ const std::string LANGMPL::keywordName = "LANGMPL"; const std::string LANGMPL::data::itemName = "data"; -LANGMUIR::LANGMUIR( ) : ParserKeyword("LANGMUIR") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("REGDIMS","NTCREG",0); +LANGMUIR::LANGMUIR() : ParserKeyword("LANGMUIR", KeywordSize("REGDIMS", "NTCREG", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("LANGMUIR"); @@ -65,10 +59,7 @@ const std::string LANGMUIR::keywordName = "LANGMUIR"; const std::string LANGMUIR::DATA::itemName = "DATA"; -LANGSOLV::LANGSOLV( ) : ParserKeyword("LANGSOLV") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("REGDIMS","NTCREG",0); +LANGSOLV::LANGSOLV() : ParserKeyword("LANGSOLV", KeywordSize("REGDIMS", "NTCREG", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("LANGSOLV"); @@ -88,9 +79,7 @@ const std::string LANGSOLV::keywordName = "LANGSOLV"; const std::string LANGSOLV::DATA::itemName = "DATA"; -LCUNIT::LCUNIT( ) : ParserKeyword("LCUNIT") -{ - setFixedSize( (size_t) 1); +LCUNIT::LCUNIT() : ParserKeyword("LCUNIT", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("LCUNIT"); @@ -109,9 +98,7 @@ const std::string LCUNIT::UNIT::itemName = "UNIT"; const std::string LCUNIT::UNIT::defaultValue = "UNIT"; -LGR::LGR( ) : ParserKeyword("LGR") -{ - setFixedSize( (size_t) 1); +LGR::LGR() : ParserKeyword("LGR", KeywordSize(1, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("LGR"); @@ -179,21 +166,17 @@ const std::string LGR::NCHCOR::itemName = "NCHCOR"; const int LGR::NCHCOR::defaultValue = 0; -LGRCOPY::LGRCOPY( ) : ParserKeyword("LGRCOPY") -{ - setFixedSize( (size_t) 0); +LGRCOPY::LGRCOPY() : ParserKeyword("LGRCOPY", KeywordSize(0, false)) { + addValidSectionName("RUNSPEC"); addValidSectionName("EDIT"); addValidSectionName("GRID"); - addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("LGRCOPY"); } const std::string LGRCOPY::keywordName = "LGRCOPY"; -LGRFREE::LGRFREE( ) : ParserKeyword("LGRFREE") -{ - setSizeType(SLASH_TERMINATED); +LGRFREE::LGRFREE() : ParserKeyword("LGRFREE", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("LGRFREE"); @@ -210,9 +193,7 @@ const std::string LGRFREE::keywordName = "LGRFREE"; const std::string LGRFREE::LOCAL_GRID_REFINMENT::itemName = "LOCAL_GRID_REFINMENT"; -LGRLOCK::LGRLOCK( ) : ParserKeyword("LGRLOCK") -{ - setSizeType(SLASH_TERMINATED); +LGRLOCK::LGRLOCK() : ParserKeyword("LGRLOCK", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("LGRLOCK"); @@ -229,9 +210,7 @@ const std::string LGRLOCK::keywordName = "LGRLOCK"; const std::string LGRLOCK::LOCAL_GRID_REFINMENT::itemName = "LOCAL_GRID_REFINMENT"; -LGROFF::LGROFF( ) : ParserKeyword("LGROFF") -{ - setFixedSize( (size_t) 1); +LGROFF::LGROFF() : ParserKeyword("LGROFF", KeywordSize(1, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("LGROFF"); @@ -255,9 +234,7 @@ const std::string LGROFF::ACTIVE_WELLS::itemName = "ACTIVE_WELLS"; const int LGROFF::ACTIVE_WELLS::defaultValue = 0; -LGRON::LGRON( ) : ParserKeyword("LGRON") -{ - setFixedSize( (size_t) 1); +LGRON::LGRON() : ParserKeyword("LGRON", KeywordSize(1, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("LGRON"); @@ -281,12 +258,10 @@ const std::string LGRON::ACTIVE_WELLS::itemName = "ACTIVE_WELLS"; const int LGRON::ACTIVE_WELLS::defaultValue = 0; -LICENSE::LICENSE( ) : ParserKeyword("LICENSE") -{ - setSizeType(SLASH_TERMINATED); +LICENSES::LICENSES() : ParserKeyword("LICENSES", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("RUNSPEC"); clearDeckNames(); - addDeckName("LICENSE"); + addDeckName("LICENSES"); { ParserRecord record; { @@ -296,13 +271,11 @@ LICENSE::LICENSE( ) : ParserKeyword("LICENSE") addRecord( record ); } } -const std::string LICENSE::keywordName = "LICENSE"; -const std::string LICENSE::FEATURE::itemName = "FEATURE"; +const std::string LICENSES::keywordName = "LICENSES"; +const std::string LICENSES::FEATURE::itemName = "FEATURE"; -LIFTOPT::LIFTOPT( ) : ParserKeyword("LIFTOPT") -{ - setFixedSize( (size_t) 1); +LIFTOPT::LIFTOPT() : ParserKeyword("LIFTOPT", KeywordSize(1, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("LIFTOPT"); @@ -310,19 +283,22 @@ LIFTOPT::LIFTOPT( ) : ParserKeyword("LIFTOPT") ParserRecord record; { ParserItem item("INCREMENT_SIZE", ParserItem::itype::DOUBLE); + item.push_backDimension("GasSurfaceVolume/Time"); record.addItem(item); } { ParserItem item("MIN_ECONOMIC_GRADIENT", ParserItem::itype::DOUBLE); + item.push_backDimension("LiquidSurfaceVolume/GasSurfaceVolume"); record.addItem(item); } { ParserItem item("MIN_INTERVAL_BETWEEN_GAS_LIFT_OPTIMIZATIONS", ParserItem::itype::DOUBLE); item.setDefault( double(0) ); + item.push_backDimension("Time"); record.addItem(item); } { - ParserItem item("OPTIMISE_GAS_LIFT", ParserItem::itype::STRING); + ParserItem item("OPTIMISE_ALL_ITERATIONS", ParserItem::itype::STRING); item.setDefault( std::string("YES") ); record.addItem(item); } @@ -333,14 +309,12 @@ const std::string LIFTOPT::keywordName = "LIFTOPT"; const std::string LIFTOPT::INCREMENT_SIZE::itemName = "INCREMENT_SIZE"; const std::string LIFTOPT::MIN_ECONOMIC_GRADIENT::itemName = "MIN_ECONOMIC_GRADIENT"; const std::string LIFTOPT::MIN_INTERVAL_BETWEEN_GAS_LIFT_OPTIMIZATIONS::itemName = "MIN_INTERVAL_BETWEEN_GAS_LIFT_OPTIMIZATIONS"; -const double LIFTOPT::MIN_INTERVAL_BETWEEN_GAS_LIFT_OPTIMIZATIONS::defaultValue = 0.000000; -const std::string LIFTOPT::OPTIMISE_GAS_LIFT::itemName = "OPTIMISE_GAS_LIFT"; -const std::string LIFTOPT::OPTIMISE_GAS_LIFT::defaultValue = "YES"; +const double LIFTOPT::MIN_INTERVAL_BETWEEN_GAS_LIFT_OPTIMIZATIONS::defaultValue = 0; +const std::string LIFTOPT::OPTIMISE_ALL_ITERATIONS::itemName = "OPTIMISE_ALL_ITERATIONS"; +const std::string LIFTOPT::OPTIMISE_ALL_ITERATIONS::defaultValue = "YES"; -LINCOM::LINCOM( ) : ParserKeyword("LINCOM") -{ - setFixedSize( (size_t) 1); +LINCOM::LINCOM() : ParserKeyword("LINCOM", KeywordSize(1, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("LINCOM"); @@ -366,16 +340,14 @@ LINCOM::LINCOM( ) : ParserKeyword("LINCOM") } const std::string LINCOM::keywordName = "LINCOM"; const std::string LINCOM::ALPHA::itemName = "ALPHA"; -const UDAValue LINCOM::ALPHA::defaultValue = UDAValue(0.000000); +const UDAValue LINCOM::ALPHA::defaultValue = UDAValue(0); const std::string LINCOM::BETA::itemName = "BETA"; -const UDAValue LINCOM::BETA::defaultValue = UDAValue(0.000000); +const UDAValue LINCOM::BETA::defaultValue = UDAValue(0); const std::string LINCOM::GAMMA::itemName = "GAMMA"; -const UDAValue LINCOM::GAMMA::defaultValue = UDAValue(0.000000); +const UDAValue LINCOM::GAMMA::defaultValue = UDAValue(0); -LINKPERM::LINKPERM( ) : ParserKeyword("LINKPERM") -{ - setFixedSize( (size_t) 1); +LINKPERM::LINKPERM() : ParserKeyword("LINKPERM", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("LINKPERM"); @@ -393,9 +365,7 @@ const std::string LINKPERM::keywordName = "LINKPERM"; const std::string LINKPERM::data::itemName = "data"; -LIVEOIL::LIVEOIL( ) : ParserKeyword("LIVEOIL") -{ - setFixedSize( (size_t) 0); +LIVEOIL::LIVEOIL() : ParserKeyword("LIVEOIL", KeywordSize(0, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("LIVEOIL"); @@ -403,9 +373,7 @@ LIVEOIL::LIVEOIL( ) : ParserKeyword("LIVEOIL") const std::string LIVEOIL::keywordName = "LIVEOIL"; -LKRO::LKRO( ) : ParserKeyword("LKRO") -{ - setFixedSize( (size_t) 1); +LKRO::LKRO() : ParserKeyword("LKRO", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("LKRO"); @@ -424,9 +392,7 @@ const std::string LKRO::keywordName = "LKRO"; const std::string LKRO::data::itemName = "data"; -LKRORG::LKRORG( ) : ParserKeyword("LKRORG") -{ - setFixedSize( (size_t) 1); +LKRORG::LKRORG() : ParserKeyword("LKRORG", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("LKRORG"); @@ -445,9 +411,7 @@ const std::string LKRORG::keywordName = "LKRORG"; const std::string LKRORG::data::itemName = "data"; -LKRORW::LKRORW( ) : ParserKeyword("LKRORW") -{ - setFixedSize( (size_t) 1); +LKRORW::LKRORW() : ParserKeyword("LKRORW", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("LKRORW"); @@ -466,9 +430,7 @@ const std::string LKRORW::keywordName = "LKRORW"; const std::string LKRORW::data::itemName = "data"; -LKRW::LKRW( ) : ParserKeyword("LKRW") -{ - setFixedSize( (size_t) 1); +LKRW::LKRW() : ParserKeyword("LKRW", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("LKRW"); @@ -487,9 +449,7 @@ const std::string LKRW::keywordName = "LKRW"; const std::string LKRW::data::itemName = "data"; -LKRWR::LKRWR( ) : ParserKeyword("LKRWR") -{ - setFixedSize( (size_t) 1); +LKRWR::LKRWR() : ParserKeyword("LKRWR", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("LKRWR"); @@ -508,9 +468,7 @@ const std::string LKRWR::keywordName = "LKRWR"; const std::string LKRWR::data::itemName = "data"; -LOAD::LOAD( ) : ParserKeyword("LOAD") -{ - setFixedSize( (size_t) 1); +LOAD::LOAD() : ParserKeyword("LOAD", KeywordSize(1, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("LOAD"); @@ -553,9 +511,7 @@ const std::string LOAD::REQUEST_SAVE_OUTPUT::itemName = "REQUEST_SAVE_OUTPUT"; const std::string LOAD::REQUEST_SAVE_OUTPUT::defaultValue = "NO"; -LOWSALT::LOWSALT( ) : ParserKeyword("LOWSALT") -{ - setFixedSize( (size_t) 0); +LOWSALT::LOWSALT() : ParserKeyword("LOWSALT", KeywordSize(0, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("LOWSALT"); @@ -563,9 +519,7 @@ LOWSALT::LOWSALT( ) : ParserKeyword("LOWSALT") const std::string LOWSALT::keywordName = "LOWSALT"; -LPCW::LPCW( ) : ParserKeyword("LPCW") -{ - setFixedSize( (size_t) 1); +LPCW::LPCW() : ParserKeyword("LPCW", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("LPCW"); @@ -584,10 +538,7 @@ const std::string LPCW::keywordName = "LPCW"; const std::string LPCW::data::itemName = "data"; -LSALTFNC::LSALTFNC( ) : ParserKeyword("LSALTFNC") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTSFUN",0); +LSALTFNC::LSALTFNC() : ParserKeyword("LSALTFNC", KeywordSize("TABDIMS", "NTSFUN", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("LSALTFNC"); @@ -608,9 +559,7 @@ const std::string LSALTFNC::keywordName = "LSALTFNC"; const std::string LSALTFNC::DATA::itemName = "DATA"; -LSLTWNUM::LSLTWNUM( ) : ParserKeyword("LSLTWNUM") -{ - setFixedSize( (size_t) 1); +LSLTWNUM::LSLTWNUM() : ParserKeyword("LSLTWNUM", KeywordSize(1, false)) { addValidSectionName("REGIONS"); clearDeckNames(); addDeckName("LSLTWNUM"); @@ -628,9 +577,7 @@ const std::string LSLTWNUM::keywordName = "LSLTWNUM"; const std::string LSLTWNUM::data::itemName = "data"; -LSNUM::LSNUM( ) : ParserKeyword("LSNUM") -{ - setFixedSize( (size_t) 1); +LSNUM::LSNUM() : ParserKeyword("LSNUM", KeywordSize(1, false)) { addValidSectionName("REGIONS"); clearDeckNames(); addDeckName("LSNUM"); @@ -648,9 +595,7 @@ const std::string LSNUM::keywordName = "LSNUM"; const std::string LSNUM::data::itemName = "data"; -LSOGCR::LSOGCR( ) : ParserKeyword("LSOGCR") -{ - setFixedSize( (size_t) 1); +LSOGCR::LSOGCR() : ParserKeyword("LSOGCR", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("LSOGCR"); @@ -669,9 +614,7 @@ const std::string LSOGCR::keywordName = "LSOGCR"; const std::string LSOGCR::data::itemName = "data"; -LSOWCR::LSOWCR( ) : ParserKeyword("LSOWCR") -{ - setFixedSize( (size_t) 1); +LSOWCR::LSOWCR() : ParserKeyword("LSOWCR", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("LSOWCR"); @@ -690,9 +633,7 @@ const std::string LSOWCR::keywordName = "LSOWCR"; const std::string LSOWCR::data::itemName = "data"; -LSWCR::LSWCR( ) : ParserKeyword("LSWCR") -{ - setFixedSize( (size_t) 1); +LSWCR::LSWCR() : ParserKeyword("LSWCR", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("LSWCR"); @@ -711,9 +652,7 @@ const std::string LSWCR::keywordName = "LSWCR"; const std::string LSWCR::data::itemName = "data"; -LSWL::LSWL( ) : ParserKeyword("LSWL") -{ - setFixedSize( (size_t) 1); +LSWL::LSWL() : ParserKeyword("LSWL", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("LSWL"); @@ -732,9 +671,7 @@ const std::string LSWL::keywordName = "LSWL"; const std::string LSWL::data::itemName = "data"; -LSWLPC::LSWLPC( ) : ParserKeyword("LSWLPC") -{ - setFixedSize( (size_t) 1); +LSWLPC::LSWLPC() : ParserKeyword("LSWLPC", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("LSWLPC"); @@ -753,9 +690,7 @@ const std::string LSWLPC::keywordName = "LSWLPC"; const std::string LSWLPC::data::itemName = "data"; -LSWU::LSWU( ) : ParserKeyword("LSWU") -{ - setFixedSize( (size_t) 1); +LSWU::LSWU() : ParserKeyword("LSWU", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("LSWU"); @@ -774,9 +709,7 @@ const std::string LSWU::keywordName = "LSWU"; const std::string LSWU::data::itemName = "data"; -LTOSIGMA::LTOSIGMA( ) : ParserKeyword("LTOSIGMA") -{ - setFixedSize( (size_t) 1); +LTOSIGMA::LTOSIGMA() : ParserKeyword("LTOSIGMA", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("LTOSIGMA"); @@ -822,14 +755,12 @@ const double LTOSIGMA::FY::defaultValue = 4.000000; const std::string LTOSIGMA::FZ::itemName = "FZ"; const double LTOSIGMA::FZ::defaultValue = 4.000000; const std::string LTOSIGMA::FGD::itemName = "FGD"; -const double LTOSIGMA::FGD::defaultValue = 0.000000; +const double LTOSIGMA::FGD::defaultValue = 0; const std::string LTOSIGMA::OPTION::itemName = "OPTION"; const std::string LTOSIGMA::OPTION::defaultValue = "XONLY"; -LWKRO::LWKRO( ) : ParserKeyword("LWKRO") -{ - setFixedSize( (size_t) 1); +LWKRO::LWKRO() : ParserKeyword("LWKRO", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("LWKRO"); @@ -848,9 +779,7 @@ const std::string LWKRO::keywordName = "LWKRO"; const std::string LWKRO::data::itemName = "data"; -LWKRORG::LWKRORG( ) : ParserKeyword("LWKRORG") -{ - setFixedSize( (size_t) 1); +LWKRORG::LWKRORG() : ParserKeyword("LWKRORG", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("LWKRORG"); @@ -869,9 +798,7 @@ const std::string LWKRORG::keywordName = "LWKRORG"; const std::string LWKRORG::data::itemName = "data"; -LWKRORW::LWKRORW( ) : ParserKeyword("LWKRORW") -{ - setFixedSize( (size_t) 1); +LWKRORW::LWKRORW() : ParserKeyword("LWKRORW", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("LWKRORW"); @@ -890,9 +817,7 @@ const std::string LWKRORW::keywordName = "LWKRORW"; const std::string LWKRORW::data::itemName = "data"; -LWKRW::LWKRW( ) : ParserKeyword("LWKRW") -{ - setFixedSize( (size_t) 1); +LWKRW::LWKRW() : ParserKeyword("LWKRW", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("LWKRW"); @@ -911,9 +836,7 @@ const std::string LWKRW::keywordName = "LWKRW"; const std::string LWKRW::data::itemName = "data"; -LWKRWR::LWKRWR( ) : ParserKeyword("LWKRWR") -{ - setFixedSize( (size_t) 1); +LWKRWR::LWKRWR() : ParserKeyword("LWKRWR", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("LWKRWR"); @@ -932,9 +855,7 @@ const std::string LWKRWR::keywordName = "LWKRWR"; const std::string LWKRWR::data::itemName = "data"; -LWPCW::LWPCW( ) : ParserKeyword("LWPCW") -{ - setFixedSize( (size_t) 1); +LWPCW::LWPCW() : ParserKeyword("LWPCW", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("LWPCW"); @@ -953,9 +874,7 @@ const std::string LWPCW::keywordName = "LWPCW"; const std::string LWPCW::data::itemName = "data"; -LWSLTNUM::LWSLTNUM( ) : ParserKeyword("LWSLTNUM") -{ - setFixedSize( (size_t) 1); +LWSLTNUM::LWSLTNUM() : ParserKeyword("LWSLTNUM", KeywordSize(1, false)) { addValidSectionName("REGIONS"); clearDeckNames(); addDeckName("LWSLTNUM"); @@ -973,9 +892,7 @@ const std::string LWSLTNUM::keywordName = "LWSLTNUM"; const std::string LWSLTNUM::data::itemName = "data"; -LWSNUM::LWSNUM( ) : ParserKeyword("LWSNUM") -{ - setFixedSize( (size_t) 1); +LWSNUM::LWSNUM() : ParserKeyword("LWSNUM", KeywordSize(1, false)) { addValidSectionName("REGIONS"); clearDeckNames(); addDeckName("LWSNUM"); @@ -993,9 +910,7 @@ const std::string LWSNUM::keywordName = "LWSNUM"; const std::string LWSNUM::data::itemName = "data"; -LWSOGCR::LWSOGCR( ) : ParserKeyword("LWSOGCR") -{ - setFixedSize( (size_t) 1); +LWSOGCR::LWSOGCR() : ParserKeyword("LWSOGCR", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("LWSOGCR"); @@ -1014,9 +929,7 @@ const std::string LWSOGCR::keywordName = "LWSOGCR"; const std::string LWSOGCR::data::itemName = "data"; -LWSOWCR::LWSOWCR( ) : ParserKeyword("LWSOWCR") -{ - setFixedSize( (size_t) 1); +LWSOWCR::LWSOWCR() : ParserKeyword("LWSOWCR", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("LWSOWCR"); @@ -1035,9 +948,7 @@ const std::string LWSOWCR::keywordName = "LWSOWCR"; const std::string LWSOWCR::data::itemName = "data"; -LWSWCR::LWSWCR( ) : ParserKeyword("LWSWCR") -{ - setFixedSize( (size_t) 1); +LWSWCR::LWSWCR() : ParserKeyword("LWSWCR", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("LWSWCR"); @@ -1056,9 +967,7 @@ const std::string LWSWCR::keywordName = "LWSWCR"; const std::string LWSWCR::data::itemName = "data"; -LWSWL::LWSWL( ) : ParserKeyword("LWSWL") -{ - setFixedSize( (size_t) 1); +LWSWL::LWSWL() : ParserKeyword("LWSWL", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("LWSWL"); @@ -1077,9 +986,7 @@ const std::string LWSWL::keywordName = "LWSWL"; const std::string LWSWL::data::itemName = "data"; -LWSWLPC::LWSWLPC( ) : ParserKeyword("LWSWLPC") -{ - setFixedSize( (size_t) 1); +LWSWLPC::LWSWLPC() : ParserKeyword("LWSWLPC", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("LWSWLPC"); @@ -1098,9 +1005,7 @@ const std::string LWSWLPC::keywordName = "LWSWLPC"; const std::string LWSWLPC::data::itemName = "data"; -LWSWU::LWSWU( ) : ParserKeyword("LWSWU") -{ - setFixedSize( (size_t) 1); +LWSWU::LWSWU() : ParserKeyword("LWSWU", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("LWSWU"); @@ -1119,9 +1024,7 @@ const std::string LWSWU::keywordName = "LWSWU"; const std::string LWSWU::data::itemName = "data"; -LX::LX( ) : ParserKeyword("LX") -{ - setFixedSize( (size_t) 1); +LX::LX() : ParserKeyword("LX", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("LX"); @@ -1140,9 +1043,7 @@ const std::string LX::keywordName = "LX"; const std::string LX::data::itemName = "data"; -LXFIN::LXFIN( ) : ParserKeyword("LXFIN") -{ - setFixedSize( (size_t) 1); +LXFIN::LXFIN() : ParserKeyword("LXFIN", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("LXFIN"); @@ -1165,9 +1066,7 @@ const std::string LXFIN::CELL_THICKNESS::itemName = "CELL_THICKNESS"; const std::string LXFIN::SIZE_OPTION::itemName = "SIZE_OPTION"; -LY::LY( ) : ParserKeyword("LY") -{ - setFixedSize( (size_t) 1); +LY::LY() : ParserKeyword("LY", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("LY"); @@ -1186,9 +1085,7 @@ const std::string LY::keywordName = "LY"; const std::string LY::data::itemName = "data"; -LYFIN::LYFIN( ) : ParserKeyword("LYFIN") -{ - setFixedSize( (size_t) 1); +LYFIN::LYFIN() : ParserKeyword("LYFIN", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("LYFIN"); @@ -1211,9 +1108,7 @@ const std::string LYFIN::CELL_THICKNESS::itemName = "CELL_THICKNESS"; const std::string LYFIN::SIZE_OPTION::itemName = "SIZE_OPTION"; -LZ::LZ( ) : ParserKeyword("LZ") -{ - setFixedSize( (size_t) 1); +LZ::LZ() : ParserKeyword("LZ", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("LZ"); @@ -1232,9 +1127,7 @@ const std::string LZ::keywordName = "LZ"; const std::string LZ::data::itemName = "data"; -LZFIN::LZFIN( ) : ParserKeyword("LZFIN") -{ - setFixedSize( (size_t) 1); +LZFIN::LZFIN() : ParserKeyword("LZFIN", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("LZFIN"); diff --git a/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/M.cpp b/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/M.cpp index 01f9eecc93..9ee6ef106d 100644 --- a/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/M.cpp +++ b/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/M.cpp @@ -1,68 +1,36 @@ -#include -#include -#include -#include + +#include +#include +#include +#include -#include +#include namespace Opm { namespace ParserKeywords { -MAPAXES::MAPAXES( ) : ParserKeyword("MAPAXES") -{ - setFixedSize( (size_t) 1); +MAPAXES::MAPAXES() : ParserKeyword("MAPAXES", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("MAPAXES"); { ParserRecord record; { - ParserItem item("X1", ParserItem::itype::DOUBLE); + ParserItem item("data", ParserItem::itype::DOUBLE); + item.setSizeType(ParserItem::item_size::ALL); item.push_backDimension("Length"); - record.addItem(item); + record.addDataItem(item); } - { - ParserItem item("Y1", ParserItem::itype::DOUBLE); - item.push_backDimension("Length"); - record.addItem(item); - } - { - ParserItem item("X2", ParserItem::itype::DOUBLE); - item.push_backDimension("Length"); - record.addItem(item); - } - { - ParserItem item("Y2", ParserItem::itype::DOUBLE); - item.push_backDimension("Length"); - record.addItem(item); - } - { - ParserItem item("X3", ParserItem::itype::DOUBLE); - item.push_backDimension("Length"); - record.addItem(item); - } - { - ParserItem item("Y3", ParserItem::itype::DOUBLE); - item.push_backDimension("Length"); - record.addItem(item); - } - addRecord( record ); + addDataRecord( record ); } } const std::string MAPAXES::keywordName = "MAPAXES"; -const std::string MAPAXES::X1::itemName = "X1"; -const std::string MAPAXES::Y1::itemName = "Y1"; -const std::string MAPAXES::X2::itemName = "X2"; -const std::string MAPAXES::Y2::itemName = "Y2"; -const std::string MAPAXES::X3::itemName = "X3"; -const std::string MAPAXES::Y3::itemName = "Y3"; +const std::string MAPAXES::data::itemName = "data"; -MAPUNITS::MAPUNITS( ) : ParserKeyword("MAPUNITS") -{ - setFixedSize( (size_t) 1); +MAPUNITS::MAPUNITS() : ParserKeyword("MAPUNITS", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("MAPUNITS"); @@ -81,9 +49,7 @@ const std::string MAPUNITS::UNIT::itemName = "UNIT"; const std::string MAPUNITS::UNIT::defaultValue = "METRES"; -MASSFLOW::MASSFLOW( ) : ParserKeyword("MASSFLOW") -{ - setSizeType(SLASH_TERMINATED); +MASSFLOW::MASSFLOW() : ParserKeyword("MASSFLOW", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("MASSFLOW"); @@ -101,9 +67,7 @@ const std::string MASSFLOW::keywordName = "MASSFLOW"; const std::string MASSFLOW::WORD::itemName = "WORD"; -MATCORR::MATCORR( ) : ParserKeyword("MATCORR") -{ - setFixedSize( (size_t) 1); +MATCORR::MATCORR() : ParserKeyword("MATCORR", KeywordSize(1, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("MATCORR"); @@ -135,14 +99,12 @@ const int MATCORR::NEWTON_IT_NUM::defaultValue = 12; const std::string MATCORR::NON_LIN_CONV_ERR::itemName = "NON_LIN_CONV_ERR"; const double MATCORR::NON_LIN_CONV_ERR::defaultValue = 0.010000; const std::string MATCORR::MATERIAL_BALANCE_ERR::itemName = "MATERIAL_BALANCE_ERR"; -const double MATCORR::MATERIAL_BALANCE_ERR::defaultValue = 0.000001; +const double MATCORR::MATERIAL_BALANCE_ERR::defaultValue = 1e-06; -MAXVALUE::MAXVALUE( ) : ParserKeyword("MAXVALUE") -{ - setSizeType(SLASH_TERMINATED); - addValidSectionName("EDIT"); +MAXVALUE::MAXVALUE() : ParserKeyword("MAXVALUE", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("GRID"); + addValidSectionName("EDIT"); addValidSectionName("PROPS"); clearDeckNames(); addDeckName("MAXVALUE"); @@ -194,9 +156,7 @@ const std::string MAXVALUE::K1::itemName = "K1"; const std::string MAXVALUE::K2::itemName = "K2"; -MEMORY::MEMORY( ) : ParserKeyword("MEMORY") -{ - setFixedSize( (size_t) 1); +MEMORY::MEMORY() : ParserKeyword("MEMORY", KeywordSize(1, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("MEMORY"); @@ -218,17 +178,15 @@ const std::string MEMORY::UNUSED::itemName = "UNUSED"; const std::string MEMORY::THOUSANDS_CHAR8::itemName = "THOUSANDS_CHAR8"; -MESSAGE::MESSAGE( ) : ParserKeyword("MESSAGE") -{ - setFixedSize( (size_t) 1); +MESSAGE::MESSAGE() : ParserKeyword("MESSAGE", KeywordSize(1, false)) { + addValidSectionName("RUNSPEC"); + addValidSectionName("PROPS"); addValidSectionName("EDIT"); addValidSectionName("GRID"); - addValidSectionName("PROPS"); addValidSectionName("REGIONS"); - addValidSectionName("RUNSPEC"); - addValidSectionName("SCHEDULE"); addValidSectionName("SOLUTION"); addValidSectionName("SUMMARY"); + addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("MESSAGE"); { @@ -245,17 +203,15 @@ const std::string MESSAGE::keywordName = "MESSAGE"; const std::string MESSAGE::MessageText::itemName = "MessageText"; -MESSAGES::MESSAGES( ) : ParserKeyword("MESSAGES") -{ - setFixedSize( (size_t) 1); +MESSAGES::MESSAGES() : ParserKeyword("MESSAGES", KeywordSize(1, false)) { + addValidSectionName("RUNSPEC"); + addValidSectionName("PROPS"); addValidSectionName("EDIT"); addValidSectionName("GRID"); - addValidSectionName("PROPS"); addValidSectionName("REGIONS"); - addValidSectionName("RUNSPEC"); - addValidSectionName("SCHEDULE"); addValidSectionName("SOLUTION"); addValidSectionName("SUMMARY"); + addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("MESSAGES"); { @@ -357,9 +313,7 @@ const std::string MESSAGES::GROUP_PRINT_LIMIT::itemName = "GROUP_PRINT_LIMIT"; const int MESSAGES::GROUP_PRINT_LIMIT::defaultValue = 10; -MESSOPTS::MESSOPTS( ) : ParserKeyword("MESSOPTS") -{ - setFixedSize( (size_t) 1); +MESSOPTS::MESSOPTS() : ParserKeyword("MESSOPTS", KeywordSize(1, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("MESSOPTS"); @@ -381,9 +335,7 @@ const std::string MESSOPTS::MNEMONIC::itemName = "MNEMONIC"; const std::string MESSOPTS::SEVERITY::itemName = "SEVERITY"; -MESSSRVC::MESSSRVC( ) : ParserKeyword("MESSSRVC") -{ - setFixedSize( (size_t) 1); +MESSSRVC::MESSSRVC() : ParserKeyword("MESSSRVC", KeywordSize(1, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("MESSSRVC"); @@ -402,9 +354,7 @@ const std::string MESSSRVC::PRODUCE_MESSAGE::itemName = "PRODUCE_MESSAGE"; const std::string MESSSRVC::PRODUCE_MESSAGE::defaultValue = "ON"; -METRIC::METRIC( ) : ParserKeyword("METRIC") -{ - setFixedSize( (size_t) 0); +METRIC::METRIC() : ParserKeyword("METRIC", KeywordSize(0, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("METRIC"); @@ -412,9 +362,158 @@ METRIC::METRIC( ) : ParserKeyword("METRIC") const std::string METRIC::keywordName = "METRIC"; -MINNNCT::MINNNCT( ) : ParserKeyword("MINNNCT") -{ - setFixedSize( (size_t) 1); +MICP::MICP() : ParserKeyword("MICP", KeywordSize(0, false)) { + addValidSectionName("RUNSPEC"); + clearDeckNames(); + addDeckName("MICP"); +} +const std::string MICP::keywordName = "MICP"; + + +MICPPARA::MICPPARA() : ParserKeyword("MICPPARA", KeywordSize(1, false)) { + addValidSectionName("PROPS"); + clearDeckNames(); + addDeckName("MICPPARA"); + { + ParserRecord record; + { + ParserItem item("DENSITY_BIOFILM", ParserItem::itype::DOUBLE); + item.setDefault( double(35.000000) ); + item.push_backDimension("Density"); + record.addItem(item); + } + { + ParserItem item("DENSITY_CALCITE", ParserItem::itype::DOUBLE); + item.setDefault( double(2710.000000) ); + item.push_backDimension("Density"); + record.addItem(item); + } + { + ParserItem item("DETACHMENT_RATE", ParserItem::itype::DOUBLE); + item.setDefault( double(2.6e-10) ); + item.push_backDimension("Length/Viscosity"); + record.addItem(item); + } + { + ParserItem item("CRITICAL_POROSITY", ParserItem::itype::DOUBLE); + item.setDefault( double(0.100000) ); + record.addItem(item); + } + { + ParserItem item("FITTING_FACTOR", ParserItem::itype::DOUBLE); + item.setDefault( double(3.000000) ); + record.addItem(item); + } + { + ParserItem item("HALF_VELOCITY_OXYGEN", ParserItem::itype::DOUBLE); + item.setDefault( double(2e-05) ); + item.push_backDimension("Density"); + record.addItem(item); + } + { + ParserItem item("HALF_VELOCITY_UREA", ParserItem::itype::DOUBLE); + item.setDefault( double(21.300000) ); + item.push_backDimension("Density"); + record.addItem(item); + } + { + ParserItem item("MAXIMUM_GROWTH_RATE", ParserItem::itype::DOUBLE); + item.setDefault( double(4.17e-05) ); + item.push_backDimension("1/Time"); + record.addItem(item); + } + { + ParserItem item("MAXIMUM_OXYGEN_CONCENTRATION", ParserItem::itype::DOUBLE); + item.setDefault( double(0.040000) ); + item.push_backDimension("Density"); + record.addItem(item); + } + { + ParserItem item("MAXIMUM_UREA_CONCENTRATION", ParserItem::itype::DOUBLE); + item.setDefault( double(60.000000) ); + item.push_backDimension("Density"); + record.addItem(item); + } + { + ParserItem item("MAXIMUM_UREA_UTILIZATION", ParserItem::itype::DOUBLE); + item.setDefault( double(0.016100) ); + item.push_backDimension("1/Time"); + record.addItem(item); + } + { + ParserItem item("MICROBIAL_ATTACHMENT_RATE", ParserItem::itype::DOUBLE); + item.setDefault( double(8.51e-07) ); + item.push_backDimension("1/Time"); + record.addItem(item); + } + { + ParserItem item("MICROBIAL_DEATH_RATE", ParserItem::itype::DOUBLE); + item.setDefault( double(3.18e-07) ); + item.push_backDimension("1/Time"); + record.addItem(item); + } + { + ParserItem item("MINIMUM_PERMEABILITY", ParserItem::itype::DOUBLE); + item.setDefault( double(1e-20) ); + item.push_backDimension("Permeability"); + record.addItem(item); + } + { + ParserItem item("OXYGEN_CONSUMPTION_FACTOR", ParserItem::itype::DOUBLE); + item.setDefault( double(0.500000) ); + record.addItem(item); + } + { + ParserItem item("TOLERANCE_BEFORE_CLOGGING", ParserItem::itype::DOUBLE); + item.setDefault( double(0.000100) ); + record.addItem(item); + } + { + ParserItem item("YIELD_GROWTH_COEFFICIENT", ParserItem::itype::DOUBLE); + item.setDefault( double(0.500000) ); + record.addItem(item); + } + addRecord( record ); + } +} +const std::string MICPPARA::keywordName = "MICPPARA"; +const std::string MICPPARA::DENSITY_BIOFILM::itemName = "DENSITY_BIOFILM"; +const double MICPPARA::DENSITY_BIOFILM::defaultValue = 35.000000; +const std::string MICPPARA::DENSITY_CALCITE::itemName = "DENSITY_CALCITE"; +const double MICPPARA::DENSITY_CALCITE::defaultValue = 2710.000000; +const std::string MICPPARA::DETACHMENT_RATE::itemName = "DETACHMENT_RATE"; +const double MICPPARA::DETACHMENT_RATE::defaultValue = 2.6e-10; +const std::string MICPPARA::CRITICAL_POROSITY::itemName = "CRITICAL_POROSITY"; +const double MICPPARA::CRITICAL_POROSITY::defaultValue = 0.100000; +const std::string MICPPARA::FITTING_FACTOR::itemName = "FITTING_FACTOR"; +const double MICPPARA::FITTING_FACTOR::defaultValue = 3.000000; +const std::string MICPPARA::HALF_VELOCITY_OXYGEN::itemName = "HALF_VELOCITY_OXYGEN"; +const double MICPPARA::HALF_VELOCITY_OXYGEN::defaultValue = 2e-05; +const std::string MICPPARA::HALF_VELOCITY_UREA::itemName = "HALF_VELOCITY_UREA"; +const double MICPPARA::HALF_VELOCITY_UREA::defaultValue = 21.300000; +const std::string MICPPARA::MAXIMUM_GROWTH_RATE::itemName = "MAXIMUM_GROWTH_RATE"; +const double MICPPARA::MAXIMUM_GROWTH_RATE::defaultValue = 4.17e-05; +const std::string MICPPARA::MAXIMUM_OXYGEN_CONCENTRATION::itemName = "MAXIMUM_OXYGEN_CONCENTRATION"; +const double MICPPARA::MAXIMUM_OXYGEN_CONCENTRATION::defaultValue = 0.040000; +const std::string MICPPARA::MAXIMUM_UREA_CONCENTRATION::itemName = "MAXIMUM_UREA_CONCENTRATION"; +const double MICPPARA::MAXIMUM_UREA_CONCENTRATION::defaultValue = 60.000000; +const std::string MICPPARA::MAXIMUM_UREA_UTILIZATION::itemName = "MAXIMUM_UREA_UTILIZATION"; +const double MICPPARA::MAXIMUM_UREA_UTILIZATION::defaultValue = 0.016100; +const std::string MICPPARA::MICROBIAL_ATTACHMENT_RATE::itemName = "MICROBIAL_ATTACHMENT_RATE"; +const double MICPPARA::MICROBIAL_ATTACHMENT_RATE::defaultValue = 8.51e-07; +const std::string MICPPARA::MICROBIAL_DEATH_RATE::itemName = "MICROBIAL_DEATH_RATE"; +const double MICPPARA::MICROBIAL_DEATH_RATE::defaultValue = 3.18e-07; +const std::string MICPPARA::MINIMUM_PERMEABILITY::itemName = "MINIMUM_PERMEABILITY"; +const double MICPPARA::MINIMUM_PERMEABILITY::defaultValue = 1e-20; +const std::string MICPPARA::OXYGEN_CONSUMPTION_FACTOR::itemName = "OXYGEN_CONSUMPTION_FACTOR"; +const double MICPPARA::OXYGEN_CONSUMPTION_FACTOR::defaultValue = 0.500000; +const std::string MICPPARA::TOLERANCE_BEFORE_CLOGGING::itemName = "TOLERANCE_BEFORE_CLOGGING"; +const double MICPPARA::TOLERANCE_BEFORE_CLOGGING::defaultValue = 0.000100; +const std::string MICPPARA::YIELD_GROWTH_COEFFICIENT::itemName = "YIELD_GROWTH_COEFFICIENT"; +const double MICPPARA::YIELD_GROWTH_COEFFICIENT::defaultValue = 0.500000; + + +MINNNCT::MINNNCT() : ParserKeyword("MINNNCT", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("MINNNCT"); @@ -443,16 +542,33 @@ MINNNCT::MINNNCT( ) : ParserKeyword("MINNNCT") } const std::string MINNNCT::keywordName = "MINNNCT"; const std::string MINNNCT::CUTOFF_TRANSMISSIBILITY::itemName = "CUTOFF_TRANSMISSIBILITY"; -const double MINNNCT::CUTOFF_TRANSMISSIBILITY::defaultValue = 0.000000; +const double MINNNCT::CUTOFF_TRANSMISSIBILITY::defaultValue = 0; const std::string MINNNCT::DIFFUSIVITY::itemName = "DIFFUSIVITY"; -const double MINNNCT::DIFFUSIVITY::defaultValue = 0.000000; +const double MINNNCT::DIFFUSIVITY::defaultValue = 0; const std::string MINNNCT::CUTOFF_THERMAL_TRANSMISSIBILITY::itemName = "CUTOFF_THERMAL_TRANSMISSIBILITY"; -const double MINNNCT::CUTOFF_THERMAL_TRANSMISSIBILITY::defaultValue = 0.000000; +const double MINNNCT::CUTOFF_THERMAL_TRANSMISSIBILITY::defaultValue = 0; -MINPORV::MINPORV( ) : ParserKeyword("MINPORV") -{ - setFixedSize( (size_t) 1); +MINNPCOL::MINNPCOL() : ParserKeyword("MINNPCOL", KeywordSize(1, false)) { + addValidSectionName("RUNSPEC"); + clearDeckNames(); + addDeckName("MINNPCOL"); + { + ParserRecord record; + { + ParserItem item("VALUE", ParserItem::itype::INT); + item.setDefault( 6 ); + record.addItem(item); + } + addRecord( record ); + } +} +const std::string MINNPCOL::keywordName = "MINNPCOL"; +const std::string MINNPCOL::VALUE::itemName = "VALUE"; +const int MINNPCOL::VALUE::defaultValue = 6; + + +MINPORV::MINPORV() : ParserKeyword("MINPORV", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("MINPORV"); @@ -469,12 +585,10 @@ MINPORV::MINPORV( ) : ParserKeyword("MINPORV") } const std::string MINPORV::keywordName = "MINPORV"; const std::string MINPORV::MIN_PORE_VOL::itemName = "MIN_PORE_VOL"; -const double MINPORV::MIN_PORE_VOL::defaultValue = 0.000001; +const double MINPORV::MIN_PORE_VOL::defaultValue = 1e-06; -MINPV::MINPV( ) : ParserKeyword("MINPV") -{ - setFixedSize( (size_t) 1); +MINPV::MINPV() : ParserKeyword("MINPV", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("MINPV"); @@ -491,12 +605,10 @@ MINPV::MINPV( ) : ParserKeyword("MINPV") } const std::string MINPV::keywordName = "MINPV"; const std::string MINPV::VALUE::itemName = "VALUE"; -const double MINPV::VALUE::defaultValue = 0.000001; +const double MINPV::VALUE::defaultValue = 1e-06; -MINPVFIL::MINPVFIL( ) : ParserKeyword("MINPVFIL") -{ - setFixedSize( (size_t) 1); +MINPVFIL::MINPVFIL() : ParserKeyword("MINPVFIL", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("MINPVFIL"); @@ -513,12 +625,10 @@ MINPVFIL::MINPVFIL( ) : ParserKeyword("MINPVFIL") } const std::string MINPVFIL::keywordName = "MINPVFIL"; const std::string MINPVFIL::VALUE::itemName = "VALUE"; -const double MINPVFIL::VALUE::defaultValue = 0.000001; +const double MINPVFIL::VALUE::defaultValue = 1e-06; -MINPVV::MINPVV( ) : ParserKeyword("MINPVV") -{ - setFixedSize( (size_t) 1); +MINPVV::MINPVV() : ParserKeyword("MINPVV", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("MINPVV"); @@ -536,14 +646,12 @@ MINPVV::MINPVV( ) : ParserKeyword("MINPVV") } const std::string MINPVV::keywordName = "MINPVV"; const std::string MINPVV::data::itemName = "data"; -const double MINPVV::data::defaultValue = 0.000001; +const double MINPVV::data::defaultValue = 1e-06; -MINVALUE::MINVALUE( ) : ParserKeyword("MINVALUE") -{ - setSizeType(SLASH_TERMINATED); - addValidSectionName("EDIT"); +MINVALUE::MINVALUE() : ParserKeyword("MINVALUE", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("GRID"); + addValidSectionName("EDIT"); addValidSectionName("PROPS"); clearDeckNames(); addDeckName("MINVALUE"); @@ -595,10 +703,7 @@ const std::string MINVALUE::K1::itemName = "K1"; const std::string MINVALUE::K2::itemName = "K2"; -MISC::MISC( ) : ParserKeyword("MISC") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("MISCIBLE","NTMISC",0); +MISC::MISC() : ParserKeyword("MISC", KeywordSize("MISCIBLE", "NTMISC", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("MISC"); @@ -618,9 +723,7 @@ const std::string MISC::keywordName = "MISC"; const std::string MISC::DATA::itemName = "DATA"; -MISCIBLE::MISCIBLE( ) : ParserKeyword("MISCIBLE") -{ - setFixedSize( (size_t) 1); +MISCIBLE::MISCIBLE() : ParserKeyword("MISCIBLE", KeywordSize(1, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("MISCIBLE"); @@ -653,9 +756,7 @@ const std::string MISCIBLE::TWOPOINT::itemName = "TWOPOINT"; const std::string MISCIBLE::TWOPOINT::defaultValue = "NONE"; -MISCNUM::MISCNUM( ) : ParserKeyword("MISCNUM") -{ - setFixedSize( (size_t) 1); +MISCNUM::MISCNUM() : ParserKeyword("MISCNUM", KeywordSize(1, false)) { addValidSectionName("REGIONS"); clearDeckNames(); addDeckName("MISCNUM"); @@ -673,9 +774,7 @@ const std::string MISCNUM::keywordName = "MISCNUM"; const std::string MISCNUM::data::itemName = "data"; -MLANG::MLANG( ) : ParserKeyword("MLANG") -{ - setFixedSize( (size_t) 1); +MLANG::MLANG() : ParserKeyword("MLANG", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("MLANG"); @@ -694,9 +793,7 @@ const std::string MLANG::keywordName = "MLANG"; const std::string MLANG::data::itemName = "data"; -MLANGSLV::MLANGSLV( ) : ParserKeyword("MLANGSLV") -{ - setFixedSize( (size_t) 1); +MLANGSLV::MLANGSLV() : ParserKeyword("MLANGSLV", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("MLANGSLV"); @@ -715,9 +812,7 @@ const std::string MLANGSLV::keywordName = "MLANGSLV"; const std::string MLANGSLV::data::itemName = "data"; -MONITOR::MONITOR( ) : ParserKeyword("MONITOR") -{ - setFixedSize( (size_t) 0); +MONITOR::MONITOR() : ParserKeyword("MONITOR", KeywordSize(0, false)) { addValidSectionName("RUNSPEC"); addValidSectionName("SUMMARY"); clearDeckNames(); @@ -726,9 +821,7 @@ MONITOR::MONITOR( ) : ParserKeyword("MONITOR") const std::string MONITOR::keywordName = "MONITOR"; -MPFANUM::MPFANUM( ) : ParserKeyword("MPFANUM") -{ - setFixedSize( (size_t) 1); +MPFANUM::MPFANUM() : ParserKeyword("MPFANUM", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("MPFANUM"); @@ -746,9 +839,7 @@ const std::string MPFANUM::keywordName = "MPFANUM"; const std::string MPFANUM::data::itemName = "data"; -MPFNNC::MPFNNC( ) : ParserKeyword("MPFNNC") -{ - setSizeType(DOUBLE_SLASH_TERMINATED); +MPFNNC::MPFNNC() : ParserKeyword("MPFNNC", KeywordSize(DOUBLE_SLASH_TERMINATED)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("MPFNNC"); @@ -822,10 +913,7 @@ const std::string MPFNNC::KZ::itemName = "KZ"; const std::string MPFNNC::TRANS::itemName = "TRANS"; -MSFN::MSFN( ) : ParserKeyword("MSFN") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTSFUN",0); +MSFN::MSFN() : ParserKeyword("MSFN", KeywordSize("TABDIMS", "NTSFUN", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("MSFN"); @@ -846,9 +934,7 @@ const std::string MSFN::keywordName = "MSFN"; const std::string MSFN::DATA::itemName = "DATA"; -MSGFILE::MSGFILE( ) : ParserKeyword("MSGFILE") -{ - setFixedSize( (size_t) 1); +MSGFILE::MSGFILE() : ParserKeyword("MSGFILE", KeywordSize(1, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("MSGFILE"); @@ -865,9 +951,23 @@ const std::string MSGFILE::keywordName = "MSGFILE"; const std::string MSGFILE::ENABLE_FLAG::itemName = "ENABLE_FLAG"; -MULSGGD::MULSGGD( ) : ParserKeyword("MULSGGD") -{ - setFixedSize( (size_t) 1); +MSUM_PROBE::MSUM_PROBE() : ParserKeyword("MSUM_PROBE", KeywordSize(0, false)) { + addValidSectionName("SUMMARY"); + clearDeckNames(); + addDeckName("MSUMLINP"); + addDeckName("MSUMLINS"); + addDeckName("MSUMCOMM"); + addDeckName("MSUMBUG"); + addDeckName("MSUMERR"); + addDeckName("MSUMMESS"); + addDeckName("MSUMNEWT"); + addDeckName("MSUMPROB"); + addDeckName("MSUMWARN"); +} +const std::string MSUM_PROBE::keywordName = "MSUM_PROBE"; + + +MULSGGD::MULSGGD() : ParserKeyword("MULSGGD", KeywordSize(1, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("MULSGGD"); @@ -886,9 +986,7 @@ const std::string MULSGGD::keywordName = "MULSGGD"; const std::string MULSGGD::data::itemName = "data"; -MULSGGDV::MULSGGDV( ) : ParserKeyword("MULSGGDV") -{ - setFixedSize( (size_t) 1); +MULSGGDV::MULSGGDV() : ParserKeyword("MULSGGDV", KeywordSize(1, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("MULSGGDV"); @@ -907,9 +1005,7 @@ const std::string MULSGGDV::keywordName = "MULSGGDV"; const std::string MULSGGDV::data::itemName = "data"; -MULTFLT::MULTFLT( ) : ParserKeyword("MULTFLT") -{ - setSizeType(SLASH_TERMINATED); +MULTFLT::MULTFLT() : ParserKeyword("MULTFLT", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("EDIT"); addValidSectionName("GRID"); addValidSectionName("SCHEDULE"); @@ -933,9 +1029,7 @@ const std::string MULTFLT::fault::itemName = "fault"; const std::string MULTFLT::factor::itemName = "factor"; -MULTIN::MULTIN( ) : ParserKeyword("MULTIN") -{ - setFixedSize( (size_t) 0); +MULTIN::MULTIN() : ParserKeyword("MULTIN", KeywordSize(0, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("MULTIN"); @@ -943,12 +1037,10 @@ MULTIN::MULTIN( ) : ParserKeyword("MULTIN") const std::string MULTIN::keywordName = "MULTIN"; -MULTIPLY::MULTIPLY( ) : ParserKeyword("MULTIPLY") -{ - setSizeType(SLASH_TERMINATED); +MULTIPLY::MULTIPLY() : ParserKeyword("MULTIPLY", KeywordSize(SLASH_TERMINATED)) { + addValidSectionName("PROPS"); addValidSectionName("EDIT"); addValidSectionName("GRID"); - addValidSectionName("PROPS"); addValidSectionName("REGIONS"); addValidSectionName("SOLUTION"); clearDeckNames(); @@ -1002,12 +1094,10 @@ const std::string MULTIPLY::K1::itemName = "K1"; const std::string MULTIPLY::K2::itemName = "K2"; -MULTIREG::MULTIREG( ) : ParserKeyword("MULTIREG") -{ - setSizeType(SLASH_TERMINATED); +MULTIREG::MULTIREG() : ParserKeyword("MULTIREG", KeywordSize(SLASH_TERMINATED)) { + addValidSectionName("PROPS"); addValidSectionName("EDIT"); addValidSectionName("GRID"); - addValidSectionName("PROPS"); addValidSectionName("REGIONS"); addValidSectionName("SOLUTION"); clearDeckNames(); @@ -1042,15 +1132,13 @@ MULTIREG::MULTIREG( ) : ParserKeyword("MULTIREG") const std::string MULTIREG::keywordName = "MULTIREG"; const std::string MULTIREG::ARRAY::itemName = "ARRAY"; const std::string MULTIREG::FACTOR::itemName = "FACTOR"; -const double MULTIREG::FACTOR::defaultValue = 0.000000; +const double MULTIREG::FACTOR::defaultValue = 0; const std::string MULTIREG::REGION_NUMBER::itemName = "REGION_NUMBER"; const std::string MULTIREG::REGION_NAME::itemName = "REGION_NAME"; const std::string MULTIREG::REGION_NAME::defaultValue = "M"; -MULTNUM::MULTNUM( ) : ParserKeyword("MULTNUM") -{ - setFixedSize( (size_t) 1); +MULTNUM::MULTNUM() : ParserKeyword("MULTNUM", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("MULTNUM"); @@ -1068,9 +1156,7 @@ const std::string MULTNUM::keywordName = "MULTNUM"; const std::string MULTNUM::data::itemName = "data"; -MULTOUT::MULTOUT( ) : ParserKeyword("MULTOUT") -{ - setFixedSize( (size_t) 0); +MULTOUT::MULTOUT() : ParserKeyword("MULTOUT", KeywordSize(0, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("MULTOUT"); @@ -1078,9 +1164,7 @@ MULTOUT::MULTOUT( ) : ParserKeyword("MULTOUT") const std::string MULTOUT::keywordName = "MULTOUT"; -MULTOUTS::MULTOUTS( ) : ParserKeyword("MULTOUTS") -{ - setFixedSize( (size_t) 0); +MULTOUTS::MULTOUTS() : ParserKeyword("MULTOUTS", KeywordSize(0, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("MULTOUTS"); @@ -1088,9 +1172,7 @@ MULTOUTS::MULTOUTS( ) : ParserKeyword("MULTOUTS") const std::string MULTOUTS::keywordName = "MULTOUTS"; -MULTPV::MULTPV( ) : ParserKeyword("MULTPV") -{ - setFixedSize( (size_t) 1); +MULTPV::MULTPV() : ParserKeyword("MULTPV", KeywordSize(1, false)) { addValidSectionName("EDIT"); addValidSectionName("GRID"); clearDeckNames(); @@ -1110,9 +1192,7 @@ const std::string MULTPV::keywordName = "MULTPV"; const std::string MULTPV::data::itemName = "data"; -MULTREAL::MULTREAL( ) : ParserKeyword("MULTREAL") -{ - setFixedSize( (size_t) 1); +MULTREAL::MULTREAL() : ParserKeyword("MULTREAL", KeywordSize(1, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("MULTREAL"); @@ -1136,11 +1216,9 @@ const std::string MULTREAL::STANDARD_LICENCE::itemName = "STANDARD_LICENCE"; const std::string MULTREAL::STANDARD_LICENCE::defaultValue = "YES"; -MULTREGD::MULTREGD( ) : ParserKeyword("MULTREGD") -{ - setSizeType(SLASH_TERMINATED); - addValidSectionName("EDIT"); +MULTREGD::MULTREGD() : ParserKeyword("MULTREGD", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("GRID"); + addValidSectionName("EDIT"); clearDeckNames(); addDeckName("MULTREGD"); { @@ -1188,11 +1266,9 @@ const std::string MULTREGD::CHOICE::itemName = "CHOICE"; const std::string MULTREGD::CHOICE::defaultValue = "M"; -MULTREGH::MULTREGH( ) : ParserKeyword("MULTREGH") -{ - setSizeType(SLASH_TERMINATED); - addValidSectionName("EDIT"); +MULTREGH::MULTREGH() : ParserKeyword("MULTREGH", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("GRID"); + addValidSectionName("EDIT"); clearDeckNames(); addDeckName("MULTREGH"); { @@ -1240,11 +1316,9 @@ const std::string MULTREGH::CHOICE::itemName = "CHOICE"; const std::string MULTREGH::CHOICE::defaultValue = "M"; -MULTREGP::MULTREGP( ) : ParserKeyword("MULTREGP") -{ - setSizeType(SLASH_TERMINATED); - addValidSectionName("EDIT"); +MULTREGP::MULTREGP() : ParserKeyword("MULTREGP", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("GRID"); + addValidSectionName("EDIT"); clearDeckNames(); addDeckName("MULTREGP"); { @@ -1272,11 +1346,9 @@ const std::string MULTREGP::REGION_TYPE::itemName = "REGION_TYPE"; const std::string MULTREGP::REGION_TYPE::defaultValue = "M"; -MULTREGT::MULTREGT( ) : ParserKeyword("MULTREGT") -{ - setSizeType(SLASH_TERMINATED); - addValidSectionName("EDIT"); +MULTREGT::MULTREGT() : ParserKeyword("MULTREGT", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("GRID"); + addValidSectionName("EDIT"); addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("MULTREGT"); @@ -1324,9 +1396,7 @@ const std::string MULTREGT::REGION_DEF::itemName = "REGION_DEF"; const std::string MULTREGT::REGION_DEF::defaultValue = "M"; -MULTSIG::MULTSIG( ) : ParserKeyword("MULTSIG") -{ - setFixedSize( (size_t) 1); +MULTSIG::MULTSIG() : ParserKeyword("MULTSIG", KeywordSize(1, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("MULTSIG"); @@ -1344,9 +1414,7 @@ const std::string MULTSIG::keywordName = "MULTSIG"; const std::string MULTSIG::VALUE::itemName = "VALUE"; -MULTSIGV::MULTSIGV( ) : ParserKeyword("MULTSIGV") -{ - setFixedSize( (size_t) 1); +MULTSIGV::MULTSIGV() : ParserKeyword("MULTSIGV", KeywordSize(1, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("MULTSIGV"); @@ -1365,20 +1433,19 @@ const std::string MULTSIGV::keywordName = "MULTSIGV"; const std::string MULTSIGV::data::itemName = "data"; -MULT_XYZ::MULT_XYZ( ) : ParserKeyword("MULT_XYZ") -{ - setFixedSize( (size_t) 1); - addValidSectionName("EDIT"); +MULT_XYZ::MULT_XYZ() : ParserKeyword("MULT_XYZ", KeywordSize(1, false)) { addValidSectionName("GRID"); + addValidSectionName("EDIT"); + addValidSectionName("SCHEDULE"); clearDeckNames(); + addDeckName("MULTY-"); + addDeckName("MULTX"); + addDeckName("MULTTHT"); + addDeckName("MULTX-"); + addDeckName("MULTTHT-"); addDeckName("MULTR"); addDeckName("MULTR-"); - addDeckName("MULTTHT"); - addDeckName("MULTTHT-"); - addDeckName("MULTX"); - addDeckName("MULTX-"); addDeckName("MULTY"); - addDeckName("MULTY-"); addDeckName("MULTZ"); addDeckName("MULTZ-"); { @@ -1396,10 +1463,7 @@ const std::string MULT_XYZ::keywordName = "MULT_XYZ"; const std::string MULT_XYZ::data::itemName = "data"; -MW::MW( ) : ParserKeyword("MW") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NUM_STATE_EQ",0); +MW::MW() : ParserKeyword("MW", KeywordSize("TABDIMS", "NUM_STATE_EQ", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("MW"); @@ -1417,10 +1481,7 @@ const std::string MW::keywordName = "MW"; const std::string MW::MOLAR_WEIGHT::itemName = "MOLAR_WEIGHT"; -MWS::MWS( ) : ParserKeyword("MWS") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NUM_STATE_EQ",0); +MWS::MWS() : ParserKeyword("MWS", KeywordSize("TABDIMS", "NUM_STATE_EQ", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("MWS"); diff --git a/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/N.cpp b/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/N.cpp index 9eb512731e..d579a009a0 100644 --- a/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/N.cpp +++ b/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/N.cpp @@ -1,18 +1,17 @@ -#include -#include -#include -#include + +#include +#include +#include +#include -#include +#include namespace Opm { namespace ParserKeywords { -NARROW::NARROW( ) : ParserKeyword("NARROW") -{ - setFixedSize( (size_t) 0); +NARROW::NARROW() : ParserKeyword("NARROW", KeywordSize(0, false)) { addValidSectionName("SUMMARY"); clearDeckNames(); addDeckName("NARROW"); @@ -20,9 +19,7 @@ NARROW::NARROW( ) : ParserKeyword("NARROW") const std::string NARROW::keywordName = "NARROW"; -NCONSUMP::NCONSUMP( ) : ParserKeyword("NCONSUMP") -{ - setSizeType(SLASH_TERMINATED); +NCONSUMP::NCONSUMP() : ParserKeyword("NCONSUMP", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("NCONSUMP"); @@ -48,13 +45,11 @@ NCONSUMP::NCONSUMP( ) : ParserKeyword("NCONSUMP") const std::string NCONSUMP::keywordName = "NCONSUMP"; const std::string NCONSUMP::NODE::itemName = "NODE"; const std::string NCONSUMP::GAS_CONSUMPTION_RATE::itemName = "GAS_CONSUMPTION_RATE"; -const double NCONSUMP::GAS_CONSUMPTION_RATE::defaultValue = 0.000000; +const double NCONSUMP::GAS_CONSUMPTION_RATE::defaultValue = 0; const std::string NCONSUMP::REMOVAL_GROUP::itemName = "REMOVAL_GROUP"; -NEFAC::NEFAC( ) : ParserKeyword("NEFAC") -{ - setSizeType(SLASH_TERMINATED); +NEFAC::NEFAC() : ParserKeyword("NEFAC", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("NEFAC"); @@ -79,11 +74,9 @@ const std::string NEFAC::EFF_FACTOR::itemName = "EFF_FACTOR"; const double NEFAC::EFF_FACTOR::defaultValue = 1.000000; -NETBALAN::NETBALAN( ) : ParserKeyword("NETBALAN") -{ - setFixedSize( (size_t) 1); - addValidSectionName("SCHEDULE"); +NETBALAN::NETBALAN() : ParserKeyword("NETBALAN", KeywordSize(1, false)) { addValidSectionName("SPECIAL"); + addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("NETBALAN"); { @@ -91,11 +84,13 @@ NETBALAN::NETBALAN( ) : ParserKeyword("NETBALAN") { ParserItem item("TIME_INTERVAL", ParserItem::itype::DOUBLE); item.setDefault( double(0) ); + item.push_backDimension("Time"); record.addItem(item); } { - ParserItem item("PRESSURE_CONVERGENCE_LIMT", ParserItem::itype::DOUBLE); - item.setDefault( double(1e-05) ); + ParserItem item("PRESSURE_CONVERGENCE_LIMIT", ParserItem::itype::DOUBLE); + item.setDefault( double(0.100000) ); + item.push_backDimension("Pressure"); record.addItem(item); } { @@ -116,15 +111,18 @@ NETBALAN::NETBALAN( ) : ParserKeyword("NETBALAN") { ParserItem item("TARGET_BALANCE_ERROR", ParserItem::itype::DOUBLE); item.setDefault( double(100000000000000000000.000000) ); + item.push_backDimension("Pressure"); record.addItem(item); } { ParserItem item("MAX_BALANCE_ERROR", ParserItem::itype::DOUBLE); item.setDefault( double(100000000000000000000.000000) ); + item.push_backDimension("Pressure"); record.addItem(item); } { ParserItem item("MIN_TIME_STEP", ParserItem::itype::DOUBLE); + item.push_backDimension("Time"); record.addItem(item); } addRecord( record ); @@ -132,9 +130,9 @@ NETBALAN::NETBALAN( ) : ParserKeyword("NETBALAN") } const std::string NETBALAN::keywordName = "NETBALAN"; const std::string NETBALAN::TIME_INTERVAL::itemName = "TIME_INTERVAL"; -const double NETBALAN::TIME_INTERVAL::defaultValue = 0.000000; -const std::string NETBALAN::PRESSURE_CONVERGENCE_LIMT::itemName = "PRESSURE_CONVERGENCE_LIMT"; -const double NETBALAN::PRESSURE_CONVERGENCE_LIMT::defaultValue = 0.000010; +const double NETBALAN::TIME_INTERVAL::defaultValue = 0; +const std::string NETBALAN::PRESSURE_CONVERGENCE_LIMIT::itemName = "PRESSURE_CONVERGENCE_LIMIT"; +const double NETBALAN::PRESSURE_CONVERGENCE_LIMIT::defaultValue = 0.100000; const std::string NETBALAN::MAX_ITER::itemName = "MAX_ITER"; const int NETBALAN::MAX_ITER::defaultValue = 10; const std::string NETBALAN::THP_CONVERGENCE_LIMIT::itemName = "THP_CONVERGENCE_LIMIT"; @@ -148,9 +146,7 @@ const double NETBALAN::MAX_BALANCE_ERROR::defaultValue = 100000000000000000000.0 const std::string NETBALAN::MIN_TIME_STEP::itemName = "MIN_TIME_STEP"; -NETCOMPA::NETCOMPA( ) : ParserKeyword("NETCOMPA") -{ - setSizeType(SLASH_TERMINATED); +NETCOMPA::NETCOMPA() : ParserKeyword("NETCOMPA", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("NETCOMPA"); @@ -224,9 +220,9 @@ const std::string NETCOMPA::PHASE::defaultValue = "GAS"; const std::string NETCOMPA::VFT_TABLE_NUM::itemName = "VFT_TABLE_NUM"; const int NETCOMPA::VFT_TABLE_NUM::defaultValue = 0; const std::string NETCOMPA::ALQ::itemName = "ALQ"; -const double NETCOMPA::ALQ::defaultValue = 0.000000; +const double NETCOMPA::ALQ::defaultValue = 0; const std::string NETCOMPA::GAS_CONSUMPTION_RATE::itemName = "GAS_CONSUMPTION_RATE"; -const double NETCOMPA::GAS_CONSUMPTION_RATE::defaultValue = 0.000000; +const double NETCOMPA::GAS_CONSUMPTION_RATE::defaultValue = 0; const std::string NETCOMPA::EXTRACTION_GROUP::itemName = "EXTRACTION_GROUP"; const std::string NETCOMPA::EXTRACTION_GROUP::defaultValue = ""; const std::string NETCOMPA::COMPRESSOR_TYPE::itemName = "COMPRESSOR_TYPE"; @@ -235,9 +231,7 @@ const std::string NETCOMPA::ALQ_LEVEL1::itemName = "ALQ_LEVEL1"; const std::string NETCOMPA::COMP_SWITCH_SEQ_NUM::itemName = "COMP_SWITCH_SEQ_NUM"; -NETWORK::NETWORK( ) : ParserKeyword("NETWORK") -{ - setFixedSize( (size_t) 1); +NETWORK::NETWORK() : ParserKeyword("NETWORK", KeywordSize(1, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("NETWORK"); @@ -266,9 +260,7 @@ const std::string NETWORK::NBCMAX::itemName = "NBCMAX"; const int NETWORK::NBCMAX::defaultValue = 20; -NEWTRAN::NEWTRAN( ) : ParserKeyword("NEWTRAN") -{ - setFixedSize( (size_t) 0); +NEWTRAN::NEWTRAN() : ParserKeyword("NEWTRAN", KeywordSize(0, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("NEWTRAN"); @@ -276,38 +268,10 @@ NEWTRAN::NEWTRAN( ) : ParserKeyword("NEWTRAN") const std::string NEWTRAN::keywordName = "NEWTRAN"; -NEXT::NEXT( ) : ParserKeyword("NEXT") -{ - setFixedSize( (size_t) 1); +NEXTSTEP::NEXTSTEP() : ParserKeyword("NEXTSTEP", KeywordSize(1, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("NEXT"); - { - ParserRecord record; - { - ParserItem item("MAX_STEP", ParserItem::itype::DOUBLE); - item.push_backDimension("Time"); - record.addItem(item); - } - { - ParserItem item("APPLY_TO_ALL", ParserItem::itype::STRING); - item.setDefault( std::string("NO") ); - record.addItem(item); - } - addRecord( record ); - } -} -const std::string NEXT::keywordName = "NEXT"; -const std::string NEXT::MAX_STEP::itemName = "MAX_STEP"; -const std::string NEXT::APPLY_TO_ALL::itemName = "APPLY_TO_ALL"; -const std::string NEXT::APPLY_TO_ALL::defaultValue = "NO"; - - -NEXTSTEP::NEXTSTEP( ) : ParserKeyword("NEXTSTEP") -{ - setFixedSize( (size_t) 1); - addValidSectionName("SCHEDULE"); - clearDeckNames(); addDeckName("NEXTSTEP"); { ParserRecord record; @@ -330,9 +294,7 @@ const std::string NEXTSTEP::APPLY_TO_ALL::itemName = "APPLY_TO_ALL"; const std::string NEXTSTEP::APPLY_TO_ALL::defaultValue = "NO"; -NEXTSTPL::NEXTSTPL( ) : ParserKeyword("NEXTSTPL") -{ - setFixedSize( (size_t) 1); +NEXTSTPL::NEXTSTPL() : ParserKeyword("NEXTSTPL", KeywordSize(1, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("NEXTSTPL"); @@ -357,9 +319,7 @@ const std::string NEXTSTPL::APPLY_TO_ALL::itemName = "APPLY_TO_ALL"; const std::string NEXTSTPL::APPLY_TO_ALL::defaultValue = "NO"; -NINENUM::NINENUM( ) : ParserKeyword("NINENUM") -{ - setFixedSize( (size_t) 1); +NINENUM::NINENUM() : ParserKeyword("NINENUM", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("NINENUM"); @@ -377,9 +337,7 @@ const std::string NINENUM::keywordName = "NINENUM"; const std::string NINENUM::data::itemName = "data"; -NINEPOIN::NINEPOIN( ) : ParserKeyword("NINEPOIN") -{ - setFixedSize( (size_t) 0); +NINEPOIN::NINEPOIN() : ParserKeyword("NINEPOIN", KeywordSize(0, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("NINEPOIN"); @@ -387,9 +345,7 @@ NINEPOIN::NINEPOIN( ) : ParserKeyword("NINEPOIN") const std::string NINEPOIN::keywordName = "NINEPOIN"; -NMATOPTS::NMATOPTS( ) : ParserKeyword("NMATOPTS") -{ - setFixedSize( (size_t) 1); +NMATOPTS::NMATOPTS() : ParserKeyword("NMATOPTS", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("NMATOPTS"); @@ -423,9 +379,7 @@ const std::string NMATOPTS::METHOD::itemName = "METHOD"; const std::string NMATOPTS::METHOD::defaultValue = "FPORV"; -NMATRIX::NMATRIX( ) : ParserKeyword("NMATRIX") -{ - setFixedSize( (size_t) 1); +NMATRIX::NMATRIX() : ParserKeyword("NMATRIX", KeywordSize(1, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("NMATRIX"); @@ -442,9 +396,15 @@ const std::string NMATRIX::keywordName = "NMATRIX"; const std::string NMATRIX::NUM_SUB_CELLS::itemName = "NUM_SUB_CELLS"; -NNC::NNC( ) : ParserKeyword("NNC") -{ - setSizeType(SLASH_TERMINATED); +NMESSAGE::NMESSAGE() : ParserKeyword("NMESSAGE", KeywordSize(0, false)) { + addValidSectionName("SUMMARY"); + clearDeckNames(); + addDeckName("NMESSAGE"); +} +const std::string NMESSAGE::keywordName = "NMESSAGE"; + + +NNC::NNC() : ParserKeyword("NNC", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("NNC"); @@ -481,15 +441,13 @@ NNC::NNC( ) : ParserKeyword("NNC") record.addItem(item); } { - ParserItem item("SIM_DEPENDENT1", ParserItem::itype::DOUBLE); - item.setDefault( double(0) ); - item.push_backDimension("ContextDependent"); + ParserItem item("IST1", ParserItem::itype::INT); + item.setDefault( 0 ); record.addItem(item); } { - ParserItem item("SIM_DEPENDENT2", ParserItem::itype::DOUBLE); - item.setDefault( double(0) ); - item.push_backDimension("ContextDependent"); + ParserItem item("IST2", ParserItem::itype::INT); + item.setDefault( 0 ); record.addItem(item); } { @@ -546,11 +504,11 @@ const std::string NNC::I2::itemName = "I2"; const std::string NNC::J2::itemName = "J2"; const std::string NNC::K2::itemName = "K2"; const std::string NNC::TRAN::itemName = "TRAN"; -const double NNC::TRAN::defaultValue = 0.000000; -const std::string NNC::SIM_DEPENDENT1::itemName = "SIM_DEPENDENT1"; -const double NNC::SIM_DEPENDENT1::defaultValue = 0.000000; -const std::string NNC::SIM_DEPENDENT2::itemName = "SIM_DEPENDENT2"; -const double NNC::SIM_DEPENDENT2::defaultValue = 0.000000; +const double NNC::TRAN::defaultValue = 0; +const std::string NNC::IST1::itemName = "IST1"; +const int NNC::IST1::defaultValue = 0; +const std::string NNC::IST2::itemName = "IST2"; +const int NNC::IST2::defaultValue = 0; const std::string NNC::PRESSURE_TABLE1::itemName = "PRESSURE_TABLE1"; const int NNC::PRESSURE_TABLE1::defaultValue = 0; const std::string NNC::PRESSURE_TABLE2::itemName = "PRESSURE_TABLE2"; @@ -560,18 +518,16 @@ const std::string NNC::VE_FACE1::defaultValue = ""; const std::string NNC::VE_FACE2::itemName = "VE_FACE2"; const std::string NNC::VE_FACE2::defaultValue = ""; const std::string NNC::DIFFUSIVITY::itemName = "DIFFUSIVITY"; -const double NNC::DIFFUSIVITY::defaultValue = 0.000000; +const double NNC::DIFFUSIVITY::defaultValue = 0; const std::string NNC::SIM_DEPENDENT3::itemName = "SIM_DEPENDENT3"; -const double NNC::SIM_DEPENDENT3::defaultValue = 0.000000; +const double NNC::SIM_DEPENDENT3::defaultValue = 0; const std::string NNC::VDFLOW_AREA::itemName = "VDFLOW_AREA"; -const double NNC::VDFLOW_AREA::defaultValue = 0.000000; +const double NNC::VDFLOW_AREA::defaultValue = 0; const std::string NNC::VDFLOW_PERM::itemName = "VDFLOW_PERM"; -const double NNC::VDFLOW_PERM::defaultValue = 0.000000; +const double NNC::VDFLOW_PERM::defaultValue = 0; -NNEWTF::NNEWTF( ) : ParserKeyword("NNEWTF") -{ - setFixedSize( (size_t) 1); +NNEWTF::NNEWTF() : ParserKeyword("NNEWTF", KeywordSize(1, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("NNEWTF"); @@ -593,9 +549,7 @@ const std::string NNEWTF::NTHRBL::itemName = "NTHRBL"; const std::string NNEWTF::NLNHBL::itemName = "NLNHBL"; -NOCASC::NOCASC( ) : ParserKeyword("NOCASC") -{ - setFixedSize( (size_t) 0); +NOCASC::NOCASC() : ParserKeyword("NOCASC", KeywordSize(0, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("NOCASC"); @@ -603,9 +557,7 @@ NOCASC::NOCASC( ) : ParserKeyword("NOCASC") const std::string NOCASC::keywordName = "NOCASC"; -NODEPROP::NODEPROP( ) : ParserKeyword("NODEPROP") -{ - setSizeType(SLASH_TERMINATED); +NODEPROP::NODEPROP() : ParserKeyword("NODEPROP", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("NODEPROP"); @@ -625,6 +577,11 @@ NODEPROP::NODEPROP( ) : ParserKeyword("NODEPROP") item.setDefault( std::string("NO") ); record.addItem(item); } + { + ParserItem item("ADD_GAS_LIFT_GAS", ParserItem::itype::STRING); + item.setDefault( std::string("NO") ); + record.addItem(item); + } { ParserItem item("CHOKE_GROUP", ParserItem::itype::STRING); record.addItem(item); @@ -635,7 +592,6 @@ NODEPROP::NODEPROP( ) : ParserKeyword("NODEPROP") } { ParserItem item("NETWORK_VALUE_TYPE", ParserItem::itype::STRING); - item.setDefault( std::string("PROD") ); record.addItem(item); } addRecord( record ); @@ -646,43 +602,38 @@ const std::string NODEPROP::NAME::itemName = "NAME"; const std::string NODEPROP::PRESSURE::itemName = "PRESSURE"; const std::string NODEPROP::AS_CHOKE::itemName = "AS_CHOKE"; const std::string NODEPROP::AS_CHOKE::defaultValue = "NO"; +const std::string NODEPROP::ADD_GAS_LIFT_GAS::itemName = "ADD_GAS_LIFT_GAS"; +const std::string NODEPROP::ADD_GAS_LIFT_GAS::defaultValue = "NO"; const std::string NODEPROP::CHOKE_GROUP::itemName = "CHOKE_GROUP"; const std::string NODEPROP::SOURCE_SINK_GROUP::itemName = "SOURCE_SINK_GROUP"; const std::string NODEPROP::NETWORK_VALUE_TYPE::itemName = "NETWORK_VALUE_TYPE"; -const std::string NODEPROP::NETWORK_VALUE_TYPE::defaultValue = "PROD"; -NODPPM::NODPPM( ) : ParserKeyword("NODPPM") -{ - setFixedSize( (size_t) 0); - addValidSectionName("GRID"); +NODPPM::NODPPM() : ParserKeyword("NODPPM", KeywordSize(0, false)) { addValidSectionName("RUNSPEC"); + addValidSectionName("GRID"); clearDeckNames(); addDeckName("NODPPM"); } const std::string NODPPM::keywordName = "NODPPM"; -NOECHO::NOECHO( ) : ParserKeyword("NOECHO") -{ - setFixedSize( (size_t) 0); +NOECHO::NOECHO() : ParserKeyword("NOECHO", KeywordSize(0, false)) { + addValidSectionName("RUNSPEC"); + addValidSectionName("PROPS"); addValidSectionName("EDIT"); addValidSectionName("GRID"); - addValidSectionName("PROPS"); addValidSectionName("REGIONS"); - addValidSectionName("RUNSPEC"); - addValidSectionName("SCHEDULE"); addValidSectionName("SOLUTION"); addValidSectionName("SUMMARY"); + addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("NOECHO"); } const std::string NOECHO::keywordName = "NOECHO"; -NOGGF::NOGGF( ) : ParserKeyword("NOGGF") -{ - setFixedSize( (size_t) 0); +NOGGF::NOGGF() : ParserKeyword("NOGGF", KeywordSize(0, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("NOGGF"); @@ -690,9 +641,7 @@ NOGGF::NOGGF( ) : ParserKeyword("NOGGF") const std::string NOGGF::keywordName = "NOGGF"; -NOGRAV::NOGRAV( ) : ParserKeyword("NOGRAV") -{ - setFixedSize( (size_t) 0); +NOGRAV::NOGRAV() : ParserKeyword("NOGRAV", KeywordSize(0, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("NOGRAV"); @@ -700,11 +649,9 @@ NOGRAV::NOGRAV( ) : ParserKeyword("NOGRAV") const std::string NOGRAV::keywordName = "NOGRAV"; -NOHMD::NOHMD( ) : ParserKeyword("NOHMD") -{ - setFixedSize( (size_t) 1); - addValidSectionName("SCHEDULE"); +NOHMD::NOHMD() : ParserKeyword("NOHMD", KeywordSize(1, false)) { addValidSectionName("SOLUTION"); + addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("NOHMD"); { @@ -721,11 +668,9 @@ const std::string NOHMD::keywordName = "NOHMD"; const std::string NOHMD::GRAD_PARAMS::itemName = "GRAD_PARAMS"; -NOHMO::NOHMO( ) : ParserKeyword("NOHMO") -{ - setFixedSize( (size_t) 1); - addValidSectionName("SCHEDULE"); +NOHMO::NOHMO() : ParserKeyword("NOHMO", KeywordSize(1, false)) { addValidSectionName("SOLUTION"); + addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("NOHMO"); { @@ -742,9 +687,7 @@ const std::string NOHMO::keywordName = "NOHMO"; const std::string NOHMO::GRAD_PARAMS::itemName = "GRAD_PARAMS"; -NOHYST::NOHYST( ) : ParserKeyword("NOHYST") -{ - setFixedSize( (size_t) 0); +NOHYST::NOHYST() : ParserKeyword("NOHYST", KeywordSize(0, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("NOHYST"); @@ -752,9 +695,7 @@ NOHYST::NOHYST( ) : ParserKeyword("NOHYST") const std::string NOHYST::keywordName = "NOHYST"; -NOINSPEC::NOINSPEC( ) : ParserKeyword("NOINSPEC") -{ - setFixedSize( (size_t) 0); +NOINSPEC::NOINSPEC() : ParserKeyword("NOINSPEC", KeywordSize(0, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("NOINSPEC"); @@ -762,9 +703,7 @@ NOINSPEC::NOINSPEC( ) : ParserKeyword("NOINSPEC") const std::string NOINSPEC::keywordName = "NOINSPEC"; -NOMONITO::NOMONITO( ) : ParserKeyword("NOMONITO") -{ - setFixedSize( (size_t) 0); +NOMONITO::NOMONITO() : ParserKeyword("NOMONITO", KeywordSize(0, false)) { addValidSectionName("RUNSPEC"); addValidSectionName("SUMMARY"); clearDeckNames(); @@ -773,9 +712,7 @@ NOMONITO::NOMONITO( ) : ParserKeyword("NOMONITO") const std::string NOMONITO::keywordName = "NOMONITO"; -NONNC::NONNC( ) : ParserKeyword("NONNC") -{ - setFixedSize( (size_t) 0); +NONNC::NONNC() : ParserKeyword("NONNC", KeywordSize(0, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("NONNC"); @@ -783,9 +720,7 @@ NONNC::NONNC( ) : ParserKeyword("NONNC") const std::string NONNC::keywordName = "NONNC"; -NORSSPEC::NORSSPEC( ) : ParserKeyword("NORSSPEC") -{ - setFixedSize( (size_t) 0); +NORSSPEC::NORSSPEC() : ParserKeyword("NORSSPEC", KeywordSize(0, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("NORSSPEC"); @@ -793,9 +728,7 @@ NORSSPEC::NORSSPEC( ) : ParserKeyword("NORSSPEC") const std::string NORSSPEC::keywordName = "NORSSPEC"; -NOSIM::NOSIM( ) : ParserKeyword("NOSIM") -{ - setFixedSize( (size_t) 0); +NOSIM::NOSIM() : ParserKeyword("NOSIM", KeywordSize(0, false)) { addValidSectionName("RUNSPEC"); addValidSectionName("SCHEDULE"); clearDeckNames(); @@ -804,26 +737,22 @@ NOSIM::NOSIM( ) : ParserKeyword("NOSIM") const std::string NOSIM::keywordName = "NOSIM"; -NOWARN::NOWARN( ) : ParserKeyword("NOWARN") -{ - setFixedSize( (size_t) 0); - addValidSectionName("EDIT"); +NOWARN::NOWARN() : ParserKeyword("NOWARN", KeywordSize(0, false)) { + addValidSectionName("RUNSPEC"); addValidSectionName("GRID"); + addValidSectionName("EDIT"); addValidSectionName("PROPS"); addValidSectionName("REGIONS"); - addValidSectionName("RUNSPEC"); - addValidSectionName("SCHEDULE"); addValidSectionName("SOLUTION"); addValidSectionName("SUMMARY"); + addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("NOWARN"); } const std::string NOWARN::keywordName = "NOWARN"; -NOWARNEP::NOWARNEP( ) : ParserKeyword("NOWARNEP") -{ - setFixedSize( (size_t) 0); +NOWARNEP::NOWARNEP() : ParserKeyword("NOWARNEP", KeywordSize(0, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("NOWARNEP"); @@ -831,9 +760,7 @@ NOWARNEP::NOWARNEP( ) : ParserKeyword("NOWARNEP") const std::string NOWARNEP::keywordName = "NOWARNEP"; -NRSOUT::NRSOUT( ) : ParserKeyword("NRSOUT") -{ - setFixedSize( (size_t) 1); +NRSOUT::NRSOUT() : ParserKeyword("NRSOUT", KeywordSize(1, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("NRSOUT"); @@ -852,9 +779,7 @@ const std::string NRSOUT::MAX_NUM::itemName = "MAX_NUM"; const int NRSOUT::MAX_NUM::defaultValue = 3600; -NSTACK::NSTACK( ) : ParserKeyword("NSTACK") -{ - setFixedSize( (size_t) 1); +NSTACK::NSTACK() : ParserKeyword("NSTACK", KeywordSize(1, false)) { addValidSectionName("RUNSPEC"); addValidSectionName("SCHEDULE"); clearDeckNames(); @@ -874,9 +799,7 @@ const std::string NSTACK::LINEAR_SOLVER_SIZE::itemName = "LINEAR_SOLVER_SIZE"; const int NSTACK::LINEAR_SOLVER_SIZE::defaultValue = 10; -NTG::NTG( ) : ParserKeyword("NTG") -{ - setFixedSize( (size_t) 1); +NTG::NTG() : ParserKeyword("NTG", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("NTG"); @@ -895,9 +818,7 @@ const std::string NTG::keywordName = "NTG"; const std::string NTG::data::itemName = "data"; -NUMRES::NUMRES( ) : ParserKeyword("NUMRES") -{ - setFixedSize( (size_t) 1); +NUMRES::NUMRES() : ParserKeyword("NUMRES", KeywordSize(1, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("NUMRES"); @@ -916,9 +837,7 @@ const std::string NUMRES::num::itemName = "num"; const int NUMRES::num::defaultValue = 1; -NUPCOL::NUPCOL( ) : ParserKeyword("NUPCOL") -{ - setFixedSize( (size_t) 1); +NUPCOL::NUPCOL() : ParserKeyword("NUPCOL", KeywordSize(1, false)) { addValidSectionName("RUNSPEC"); addValidSectionName("SCHEDULE"); clearDeckNames(); @@ -938,9 +857,7 @@ const std::string NUPCOL::NUM_ITER::itemName = "NUM_ITER"; const int NUPCOL::NUM_ITER::defaultValue = 12; -NWATREM::NWATREM( ) : ParserKeyword("NWATREM") -{ - setSizeType(SLASH_TERMINATED); +NWATREM::NWATREM() : ParserKeyword("NWATREM", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("NWATREM"); @@ -973,9 +890,7 @@ const std::string NWATREM::MAX_FRAC_REMOVAL::itemName = "MAX_FRAC_REMOVAL"; const double NWATREM::MAX_FRAC_REMOVAL::defaultValue = 1.000000; -NXFIN::NXFIN( ) : ParserKeyword("NXFIN") -{ - setFixedSize( (size_t) 1); +NXFIN::NXFIN() : ParserKeyword("NXFIN", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("NXFIN"); @@ -993,9 +908,7 @@ const std::string NXFIN::keywordName = "NXFIN"; const std::string NXFIN::data::itemName = "data"; -NYFIN::NYFIN( ) : ParserKeyword("NYFIN") -{ - setFixedSize( (size_t) 1); +NYFIN::NYFIN() : ParserKeyword("NYFIN", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("NYFIN"); @@ -1013,9 +926,7 @@ const std::string NYFIN::keywordName = "NYFIN"; const std::string NYFIN::data::itemName = "data"; -NZFIN::NZFIN( ) : ParserKeyword("NZFIN") -{ - setFixedSize( (size_t) 1); +NZFIN::NZFIN() : ParserKeyword("NZFIN", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("NZFIN"); diff --git a/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/O.cpp b/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/O.cpp index 14a51924de..6d7b856efe 100644 --- a/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/O.cpp +++ b/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/O.cpp @@ -1,18 +1,17 @@ -#include -#include -#include -#include + +#include +#include +#include +#include -#include +#include namespace Opm { namespace ParserKeywords { -OCOMPIDX::OCOMPIDX( ) : ParserKeyword("OCOMPIDX") -{ - setFixedSize( (size_t) 1); +OCOMPIDX::OCOMPIDX() : ParserKeyword("OCOMPIDX", KeywordSize(1, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("OCOMPIDX"); @@ -29,9 +28,7 @@ const std::string OCOMPIDX::keywordName = "OCOMPIDX"; const std::string OCOMPIDX::OIL_COMPONENT_INDEX::itemName = "OIL_COMPONENT_INDEX"; -OFM::OFM( ) : ParserKeyword("OFM") -{ - setFixedSize( (size_t) 0); +OFM::OFM() : ParserKeyword("OFM", KeywordSize(0, false)) { addValidSectionName("SUMMARY"); clearDeckNames(); addDeckName("OFM"); @@ -39,9 +36,7 @@ OFM::OFM( ) : ParserKeyword("OFM") const std::string OFM::keywordName = "OFM"; -OIL::OIL( ) : ParserKeyword("OIL") -{ - setFixedSize( (size_t) 0); +OIL::OIL() : ParserKeyword("OIL", KeywordSize(0, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("OIL"); @@ -49,9 +44,7 @@ OIL::OIL( ) : ParserKeyword("OIL") const std::string OIL::keywordName = "OIL"; -OILAPI::OILAPI( ) : ParserKeyword("OILAPI") -{ - setFixedSize( (size_t) 1); +OILAPI::OILAPI() : ParserKeyword("OILAPI", KeywordSize(1, false)) { addValidSectionName("SOLUTION"); clearDeckNames(); addDeckName("OILAPI"); @@ -69,10 +62,7 @@ const std::string OILAPI::keywordName = "OILAPI"; const std::string OILAPI::data::itemName = "data"; -OILCOMPR::OILCOMPR( ) : ParserKeyword("OILCOMPR") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTPVT",0); +OILCOMPR::OILCOMPR() : ParserKeyword("OILCOMPR", KeywordSize("TABDIMS", "NTPVT", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("OILCOMPR"); @@ -100,17 +90,14 @@ OILCOMPR::OILCOMPR( ) : ParserKeyword("OILCOMPR") } const std::string OILCOMPR::keywordName = "OILCOMPR"; const std::string OILCOMPR::COMPRESSIBILITY::itemName = "COMPRESSIBILITY"; -const double OILCOMPR::COMPRESSIBILITY::defaultValue = 0.000000; +const double OILCOMPR::COMPRESSIBILITY::defaultValue = 0; const std::string OILCOMPR::EXPANSION_COEFF_LINEAR::itemName = "EXPANSION_COEFF_LINEAR"; -const double OILCOMPR::EXPANSION_COEFF_LINEAR::defaultValue = 0.000000; +const double OILCOMPR::EXPANSION_COEFF_LINEAR::defaultValue = 0; const std::string OILCOMPR::EXPANSION_COEFF_QUADRATIC::itemName = "EXPANSION_COEFF_QUADRATIC"; -const double OILCOMPR::EXPANSION_COEFF_QUADRATIC::defaultValue = 0.000000; +const double OILCOMPR::EXPANSION_COEFF_QUADRATIC::defaultValue = 0; -OILDENT::OILDENT( ) : ParserKeyword("OILDENT") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTPVT",0); +OILDENT::OILDENT() : ParserKeyword("OILDENT", KeywordSize("TABDIMS", "NTPVT", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("OILDENT"); @@ -141,15 +128,40 @@ const std::string OILDENT::keywordName = "OILDENT"; const std::string OILDENT::REFERENCE_TEMPERATURE::itemName = "REFERENCE_TEMPERATURE"; const double OILDENT::REFERENCE_TEMPERATURE::defaultValue = 293.150000; const std::string OILDENT::EXPANSION_COEFF_LINEAR::itemName = "EXPANSION_COEFF_LINEAR"; -const double OILDENT::EXPANSION_COEFF_LINEAR::defaultValue = 0.000000; +const double OILDENT::EXPANSION_COEFF_LINEAR::defaultValue = 0; const std::string OILDENT::EXPANSION_COEFF_QUADRATIC::itemName = "EXPANSION_COEFF_QUADRATIC"; -const double OILDENT::EXPANSION_COEFF_QUADRATIC::defaultValue = 0.000000; +const double OILDENT::EXPANSION_COEFF_QUADRATIC::defaultValue = 0; -OILMW::OILMW( ) : ParserKeyword("OILMW") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTPVT",0); +OILJT::OILJT() : ParserKeyword("OILJT", KeywordSize("TABDIMS", "NTPVT", false, 0)) { + addValidSectionName("PROPS"); + clearDeckNames(); + addDeckName("OILJT"); + { + ParserRecord record; + { + ParserItem item("PREF", ParserItem::itype::DOUBLE); + item.setDefault( double(1.013200) ); + item.push_backDimension("Pressure"); + record.addItem(item); + } + { + ParserItem item("JOULE_THOMSON_COEFFICIENT", ParserItem::itype::DOUBLE); + item.setDefault( double(0) ); + item.push_backDimension("Temperature/Pressure"); + record.addItem(item); + } + addRecord( record ); + } +} +const std::string OILJT::keywordName = "OILJT"; +const std::string OILJT::PREF::itemName = "PREF"; +const double OILJT::PREF::defaultValue = 1.013200; +const std::string OILJT::JOULE_THOMSON_COEFFICIENT::itemName = "JOULE_THOMSON_COEFFICIENT"; +const double OILJT::JOULE_THOMSON_COEFFICIENT::defaultValue = 0; + + +OILMW::OILMW() : ParserKeyword("OILMW", KeywordSize("TABDIMS", "NTPVT", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("OILMW"); @@ -166,10 +178,7 @@ const std::string OILMW::keywordName = "OILMW"; const std::string OILMW::MOLAR_WEIGHT::itemName = "MOLAR_WEIGHT"; -OILVISCT::OILVISCT( ) : ParserKeyword("OILVISCT") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTPVT",0); +OILVISCT::OILVISCT() : ParserKeyword("OILVISCT", KeywordSize("TABDIMS", "NTPVT", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("OILVISCT"); @@ -189,9 +198,7 @@ const std::string OILVISCT::keywordName = "OILVISCT"; const std::string OILVISCT::DATA::itemName = "DATA"; -OILVTIM::OILVTIM( ) : ParserKeyword("OILVTIM") -{ - setSizeType(SLASH_TERMINATED); +OILVTIM::OILVTIM() : ParserKeyword("OILVTIM", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("OILVTIM"); @@ -208,9 +215,7 @@ const std::string OILVTIM::keywordName = "OILVTIM"; const std::string OILVTIM::INTERPOLATION_METHOD::itemName = "INTERPOLATION_METHOD"; -OLDTRAN::OLDTRAN( ) : ParserKeyword("OLDTRAN") -{ - setFixedSize( (size_t) 0); +OLDTRAN::OLDTRAN() : ParserKeyword("OLDTRAN", KeywordSize(0, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("OLDTRAN"); @@ -218,9 +223,7 @@ OLDTRAN::OLDTRAN( ) : ParserKeyword("OLDTRAN") const std::string OLDTRAN::keywordName = "OLDTRAN"; -OLDTRANR::OLDTRANR( ) : ParserKeyword("OLDTRANR") -{ - setFixedSize( (size_t) 0); +OLDTRANR::OLDTRANR() : ParserKeyword("OLDTRANR", KeywordSize(0, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("OLDTRANR"); @@ -228,11 +231,9 @@ OLDTRANR::OLDTRANR( ) : ParserKeyword("OLDTRANR") const std::string OLDTRANR::keywordName = "OLDTRANR"; -OPERATE::OPERATE( ) : ParserKeyword("OPERATE") -{ - setSizeType(SLASH_TERMINATED); - addValidSectionName("EDIT"); +OPERATE::OPERATE() : ParserKeyword("OPERATE", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("GRID"); + addValidSectionName("EDIT"); addValidSectionName("PROPS"); addValidSectionName("REGIONS"); addValidSectionName("SOLUTION"); @@ -300,17 +301,15 @@ const std::string OPERATE::K2::itemName = "K2"; const std::string OPERATE::OPERATION::itemName = "OPERATION"; const std::string OPERATE::ARRAY::itemName = "ARRAY"; const std::string OPERATE::PARAM1::itemName = "PARAM1"; -const double OPERATE::PARAM1::defaultValue = 0.000000; +const double OPERATE::PARAM1::defaultValue = 0; const std::string OPERATE::PARAM2::itemName = "PARAM2"; -const double OPERATE::PARAM2::defaultValue = 0.000000; +const double OPERATE::PARAM2::defaultValue = 0; -OPERATER::OPERATER( ) : ParserKeyword("OPERATER") -{ - setSizeType(SLASH_TERMINATED); +OPERATER::OPERATER() : ParserKeyword("OPERATER", KeywordSize(SLASH_TERMINATED)) { + addValidSectionName("PROPS"); addValidSectionName("EDIT"); addValidSectionName("GRID"); - addValidSectionName("PROPS"); addValidSectionName("REGIONS"); addValidSectionName("SOLUTION"); clearDeckNames(); @@ -318,7 +317,7 @@ OPERATER::OPERATER( ) : ParserKeyword("OPERATER") { ParserRecord record; { - ParserItem item("RESULT_ARRAY", ParserItem::itype::STRING); + ParserItem item("TARGET_ARRAY", ParserItem::itype::STRING); record.addItem(item); } { @@ -352,21 +351,19 @@ OPERATER::OPERATER( ) : ParserKeyword("OPERATER") } } const std::string OPERATER::keywordName = "OPERATER"; -const std::string OPERATER::RESULT_ARRAY::itemName = "RESULT_ARRAY"; +const std::string OPERATER::TARGET_ARRAY::itemName = "TARGET_ARRAY"; const std::string OPERATER::REGION_NUMBER::itemName = "REGION_NUMBER"; const std::string OPERATER::OPERATION::itemName = "OPERATION"; const std::string OPERATER::ARRAY_PARAMETER::itemName = "ARRAY_PARAMETER"; const std::string OPERATER::PARAM1::itemName = "PARAM1"; -const double OPERATER::PARAM1::defaultValue = 0.000000; +const double OPERATER::PARAM1::defaultValue = 0; const std::string OPERATER::PARAM2::itemName = "PARAM2"; -const double OPERATER::PARAM2::defaultValue = 0.000000; +const double OPERATER::PARAM2::defaultValue = 0; const std::string OPERATER::REGION_NAME::itemName = "REGION_NAME"; const std::string OPERATER::REGION_NAME::defaultValue = "OPERNUM"; -OPERNUM::OPERNUM( ) : ParserKeyword("OPERNUM") -{ - setFixedSize( (size_t) 1); +OPERNUM::OPERNUM() : ParserKeyword("OPERNUM", KeywordSize(1, false)) { addValidSectionName("GRID"); addValidSectionName("REGIONS"); clearDeckNames(); @@ -385,9 +382,7 @@ const std::string OPERNUM::keywordName = "OPERNUM"; const std::string OPERNUM::data::itemName = "data"; -OPTIONS::OPTIONS( ) : ParserKeyword("OPTIONS") -{ - setFixedSize( (size_t) 1); +OPTIONS::OPTIONS() : ParserKeyword("OPTIONS", KeywordSize(1, false)) { addValidSectionName("RUNSPEC"); addValidSectionName("SCHEDULE"); clearDeckNames(); @@ -1379,6 +1374,616 @@ OPTIONS::OPTIONS( ) : ParserKeyword("OPTIONS") item.setDefault( 0 ); record.addItem(item); } + { + ParserItem item("ITEM198", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM199", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM200", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM201", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM202", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM203", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM204", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM205", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM206", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM207", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM208", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM209", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM210", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM211", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM212", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM213", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM214", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM215", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM216", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM217", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM218", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM219", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM220", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM221", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM222", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM223", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM224", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM225", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM226", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM227", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM228", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM229", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM230", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM231", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM232", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM233", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM234", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM235", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM236", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM237", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM238", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM239", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM240", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM241", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM242", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM243", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM244", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM245", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM246", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM247", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM248", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM249", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM250", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM251", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM252", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM253", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM254", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM255", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM256", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM257", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM258", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM259", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM260", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM261", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM262", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM263", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM264", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM265", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM266", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM267", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM268", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM269", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM270", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM271", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM272", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM273", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM274", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM275", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM276", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM277", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM278", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM279", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM280", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM281", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM282", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM283", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM284", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM285", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM286", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM287", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM288", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM289", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM290", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM291", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM292", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM293", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM294", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM295", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM296", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM297", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM298", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM299", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM300", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM301", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM302", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM303", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM304", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM305", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM306", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM307", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM308", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM309", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM310", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM311", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM312", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM313", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM314", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM315", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM316", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM317", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM318", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("ITEM319", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } addRecord( record ); } } @@ -1777,11 +2382,253 @@ const std::string OPTIONS::ITEM196::itemName = "ITEM196"; const int OPTIONS::ITEM196::defaultValue = 0; const std::string OPTIONS::ITEM197::itemName = "ITEM197"; const int OPTIONS::ITEM197::defaultValue = 0; +const std::string OPTIONS::ITEM198::itemName = "ITEM198"; +const int OPTIONS::ITEM198::defaultValue = 0; +const std::string OPTIONS::ITEM199::itemName = "ITEM199"; +const int OPTIONS::ITEM199::defaultValue = 0; +const std::string OPTIONS::ITEM200::itemName = "ITEM200"; +const int OPTIONS::ITEM200::defaultValue = 0; +const std::string OPTIONS::ITEM201::itemName = "ITEM201"; +const int OPTIONS::ITEM201::defaultValue = 0; +const std::string OPTIONS::ITEM202::itemName = "ITEM202"; +const int OPTIONS::ITEM202::defaultValue = 0; +const std::string OPTIONS::ITEM203::itemName = "ITEM203"; +const int OPTIONS::ITEM203::defaultValue = 0; +const std::string OPTIONS::ITEM204::itemName = "ITEM204"; +const int OPTIONS::ITEM204::defaultValue = 0; +const std::string OPTIONS::ITEM205::itemName = "ITEM205"; +const int OPTIONS::ITEM205::defaultValue = 0; +const std::string OPTIONS::ITEM206::itemName = "ITEM206"; +const int OPTIONS::ITEM206::defaultValue = 0; +const std::string OPTIONS::ITEM207::itemName = "ITEM207"; +const int OPTIONS::ITEM207::defaultValue = 0; +const std::string OPTIONS::ITEM208::itemName = "ITEM208"; +const int OPTIONS::ITEM208::defaultValue = 0; +const std::string OPTIONS::ITEM209::itemName = "ITEM209"; +const int OPTIONS::ITEM209::defaultValue = 0; +const std::string OPTIONS::ITEM210::itemName = "ITEM210"; +const int OPTIONS::ITEM210::defaultValue = 0; +const std::string OPTIONS::ITEM211::itemName = "ITEM211"; +const int OPTIONS::ITEM211::defaultValue = 0; +const std::string OPTIONS::ITEM212::itemName = "ITEM212"; +const int OPTIONS::ITEM212::defaultValue = 0; +const std::string OPTIONS::ITEM213::itemName = "ITEM213"; +const int OPTIONS::ITEM213::defaultValue = 0; +const std::string OPTIONS::ITEM214::itemName = "ITEM214"; +const int OPTIONS::ITEM214::defaultValue = 0; +const std::string OPTIONS::ITEM215::itemName = "ITEM215"; +const int OPTIONS::ITEM215::defaultValue = 0; +const std::string OPTIONS::ITEM216::itemName = "ITEM216"; +const int OPTIONS::ITEM216::defaultValue = 0; +const std::string OPTIONS::ITEM217::itemName = "ITEM217"; +const int OPTIONS::ITEM217::defaultValue = 0; +const std::string OPTIONS::ITEM218::itemName = "ITEM218"; +const int OPTIONS::ITEM218::defaultValue = 0; +const std::string OPTIONS::ITEM219::itemName = "ITEM219"; +const int OPTIONS::ITEM219::defaultValue = 0; +const std::string OPTIONS::ITEM220::itemName = "ITEM220"; +const int OPTIONS::ITEM220::defaultValue = 0; +const std::string OPTIONS::ITEM221::itemName = "ITEM221"; +const int OPTIONS::ITEM221::defaultValue = 0; +const std::string OPTIONS::ITEM222::itemName = "ITEM222"; +const int OPTIONS::ITEM222::defaultValue = 0; +const std::string OPTIONS::ITEM223::itemName = "ITEM223"; +const int OPTIONS::ITEM223::defaultValue = 0; +const std::string OPTIONS::ITEM224::itemName = "ITEM224"; +const int OPTIONS::ITEM224::defaultValue = 0; +const std::string OPTIONS::ITEM225::itemName = "ITEM225"; +const int OPTIONS::ITEM225::defaultValue = 0; +const std::string OPTIONS::ITEM226::itemName = "ITEM226"; +const int OPTIONS::ITEM226::defaultValue = 0; +const std::string OPTIONS::ITEM227::itemName = "ITEM227"; +const int OPTIONS::ITEM227::defaultValue = 0; +const std::string OPTIONS::ITEM228::itemName = "ITEM228"; +const int OPTIONS::ITEM228::defaultValue = 0; +const std::string OPTIONS::ITEM229::itemName = "ITEM229"; +const int OPTIONS::ITEM229::defaultValue = 0; +const std::string OPTIONS::ITEM230::itemName = "ITEM230"; +const int OPTIONS::ITEM230::defaultValue = 0; +const std::string OPTIONS::ITEM231::itemName = "ITEM231"; +const int OPTIONS::ITEM231::defaultValue = 0; +const std::string OPTIONS::ITEM232::itemName = "ITEM232"; +const int OPTIONS::ITEM232::defaultValue = 0; +const std::string OPTIONS::ITEM233::itemName = "ITEM233"; +const int OPTIONS::ITEM233::defaultValue = 0; +const std::string OPTIONS::ITEM234::itemName = "ITEM234"; +const int OPTIONS::ITEM234::defaultValue = 0; +const std::string OPTIONS::ITEM235::itemName = "ITEM235"; +const int OPTIONS::ITEM235::defaultValue = 0; +const std::string OPTIONS::ITEM236::itemName = "ITEM236"; +const int OPTIONS::ITEM236::defaultValue = 0; +const std::string OPTIONS::ITEM237::itemName = "ITEM237"; +const int OPTIONS::ITEM237::defaultValue = 0; +const std::string OPTIONS::ITEM238::itemName = "ITEM238"; +const int OPTIONS::ITEM238::defaultValue = 0; +const std::string OPTIONS::ITEM239::itemName = "ITEM239"; +const int OPTIONS::ITEM239::defaultValue = 0; +const std::string OPTIONS::ITEM240::itemName = "ITEM240"; +const int OPTIONS::ITEM240::defaultValue = 0; +const std::string OPTIONS::ITEM241::itemName = "ITEM241"; +const int OPTIONS::ITEM241::defaultValue = 0; +const std::string OPTIONS::ITEM242::itemName = "ITEM242"; +const int OPTIONS::ITEM242::defaultValue = 0; +const std::string OPTIONS::ITEM243::itemName = "ITEM243"; +const int OPTIONS::ITEM243::defaultValue = 0; +const std::string OPTIONS::ITEM244::itemName = "ITEM244"; +const int OPTIONS::ITEM244::defaultValue = 0; +const std::string OPTIONS::ITEM245::itemName = "ITEM245"; +const int OPTIONS::ITEM245::defaultValue = 0; +const std::string OPTIONS::ITEM246::itemName = "ITEM246"; +const int OPTIONS::ITEM246::defaultValue = 0; +const std::string OPTIONS::ITEM247::itemName = "ITEM247"; +const int OPTIONS::ITEM247::defaultValue = 0; +const std::string OPTIONS::ITEM248::itemName = "ITEM248"; +const int OPTIONS::ITEM248::defaultValue = 0; +const std::string OPTIONS::ITEM249::itemName = "ITEM249"; +const int OPTIONS::ITEM249::defaultValue = 0; +const std::string OPTIONS::ITEM250::itemName = "ITEM250"; +const int OPTIONS::ITEM250::defaultValue = 0; +const std::string OPTIONS::ITEM251::itemName = "ITEM251"; +const int OPTIONS::ITEM251::defaultValue = 0; +const std::string OPTIONS::ITEM252::itemName = "ITEM252"; +const int OPTIONS::ITEM252::defaultValue = 0; +const std::string OPTIONS::ITEM253::itemName = "ITEM253"; +const int OPTIONS::ITEM253::defaultValue = 0; +const std::string OPTIONS::ITEM254::itemName = "ITEM254"; +const int OPTIONS::ITEM254::defaultValue = 0; +const std::string OPTIONS::ITEM255::itemName = "ITEM255"; +const int OPTIONS::ITEM255::defaultValue = 0; +const std::string OPTIONS::ITEM256::itemName = "ITEM256"; +const int OPTIONS::ITEM256::defaultValue = 0; +const std::string OPTIONS::ITEM257::itemName = "ITEM257"; +const int OPTIONS::ITEM257::defaultValue = 0; +const std::string OPTIONS::ITEM258::itemName = "ITEM258"; +const int OPTIONS::ITEM258::defaultValue = 0; +const std::string OPTIONS::ITEM259::itemName = "ITEM259"; +const int OPTIONS::ITEM259::defaultValue = 0; +const std::string OPTIONS::ITEM260::itemName = "ITEM260"; +const int OPTIONS::ITEM260::defaultValue = 0; +const std::string OPTIONS::ITEM261::itemName = "ITEM261"; +const int OPTIONS::ITEM261::defaultValue = 0; +const std::string OPTIONS::ITEM262::itemName = "ITEM262"; +const int OPTIONS::ITEM262::defaultValue = 0; +const std::string OPTIONS::ITEM263::itemName = "ITEM263"; +const int OPTIONS::ITEM263::defaultValue = 0; +const std::string OPTIONS::ITEM264::itemName = "ITEM264"; +const int OPTIONS::ITEM264::defaultValue = 0; +const std::string OPTIONS::ITEM265::itemName = "ITEM265"; +const int OPTIONS::ITEM265::defaultValue = 0; +const std::string OPTIONS::ITEM266::itemName = "ITEM266"; +const int OPTIONS::ITEM266::defaultValue = 0; +const std::string OPTIONS::ITEM267::itemName = "ITEM267"; +const int OPTIONS::ITEM267::defaultValue = 0; +const std::string OPTIONS::ITEM268::itemName = "ITEM268"; +const int OPTIONS::ITEM268::defaultValue = 0; +const std::string OPTIONS::ITEM269::itemName = "ITEM269"; +const int OPTIONS::ITEM269::defaultValue = 0; +const std::string OPTIONS::ITEM270::itemName = "ITEM270"; +const int OPTIONS::ITEM270::defaultValue = 0; +const std::string OPTIONS::ITEM271::itemName = "ITEM271"; +const int OPTIONS::ITEM271::defaultValue = 0; +const std::string OPTIONS::ITEM272::itemName = "ITEM272"; +const int OPTIONS::ITEM272::defaultValue = 0; +const std::string OPTIONS::ITEM273::itemName = "ITEM273"; +const int OPTIONS::ITEM273::defaultValue = 0; +const std::string OPTIONS::ITEM274::itemName = "ITEM274"; +const int OPTIONS::ITEM274::defaultValue = 0; +const std::string OPTIONS::ITEM275::itemName = "ITEM275"; +const int OPTIONS::ITEM275::defaultValue = 0; +const std::string OPTIONS::ITEM276::itemName = "ITEM276"; +const int OPTIONS::ITEM276::defaultValue = 0; +const std::string OPTIONS::ITEM277::itemName = "ITEM277"; +const int OPTIONS::ITEM277::defaultValue = 0; +const std::string OPTIONS::ITEM278::itemName = "ITEM278"; +const int OPTIONS::ITEM278::defaultValue = 0; +const std::string OPTIONS::ITEM279::itemName = "ITEM279"; +const int OPTIONS::ITEM279::defaultValue = 0; +const std::string OPTIONS::ITEM280::itemName = "ITEM280"; +const int OPTIONS::ITEM280::defaultValue = 0; +const std::string OPTIONS::ITEM281::itemName = "ITEM281"; +const int OPTIONS::ITEM281::defaultValue = 0; +const std::string OPTIONS::ITEM282::itemName = "ITEM282"; +const int OPTIONS::ITEM282::defaultValue = 0; +const std::string OPTIONS::ITEM283::itemName = "ITEM283"; +const int OPTIONS::ITEM283::defaultValue = 0; +const std::string OPTIONS::ITEM284::itemName = "ITEM284"; +const int OPTIONS::ITEM284::defaultValue = 0; +const std::string OPTIONS::ITEM285::itemName = "ITEM285"; +const int OPTIONS::ITEM285::defaultValue = 0; +const std::string OPTIONS::ITEM286::itemName = "ITEM286"; +const int OPTIONS::ITEM286::defaultValue = 0; +const std::string OPTIONS::ITEM287::itemName = "ITEM287"; +const int OPTIONS::ITEM287::defaultValue = 0; +const std::string OPTIONS::ITEM288::itemName = "ITEM288"; +const int OPTIONS::ITEM288::defaultValue = 0; +const std::string OPTIONS::ITEM289::itemName = "ITEM289"; +const int OPTIONS::ITEM289::defaultValue = 0; +const std::string OPTIONS::ITEM290::itemName = "ITEM290"; +const int OPTIONS::ITEM290::defaultValue = 0; +const std::string OPTIONS::ITEM291::itemName = "ITEM291"; +const int OPTIONS::ITEM291::defaultValue = 0; +const std::string OPTIONS::ITEM292::itemName = "ITEM292"; +const int OPTIONS::ITEM292::defaultValue = 0; +const std::string OPTIONS::ITEM293::itemName = "ITEM293"; +const int OPTIONS::ITEM293::defaultValue = 0; +const std::string OPTIONS::ITEM294::itemName = "ITEM294"; +const int OPTIONS::ITEM294::defaultValue = 0; +const std::string OPTIONS::ITEM295::itemName = "ITEM295"; +const int OPTIONS::ITEM295::defaultValue = 0; +const std::string OPTIONS::ITEM296::itemName = "ITEM296"; +const int OPTIONS::ITEM296::defaultValue = 0; +const std::string OPTIONS::ITEM297::itemName = "ITEM297"; +const int OPTIONS::ITEM297::defaultValue = 0; +const std::string OPTIONS::ITEM298::itemName = "ITEM298"; +const int OPTIONS::ITEM298::defaultValue = 0; +const std::string OPTIONS::ITEM299::itemName = "ITEM299"; +const int OPTIONS::ITEM299::defaultValue = 0; +const std::string OPTIONS::ITEM300::itemName = "ITEM300"; +const int OPTIONS::ITEM300::defaultValue = 0; +const std::string OPTIONS::ITEM301::itemName = "ITEM301"; +const int OPTIONS::ITEM301::defaultValue = 0; +const std::string OPTIONS::ITEM302::itemName = "ITEM302"; +const int OPTIONS::ITEM302::defaultValue = 0; +const std::string OPTIONS::ITEM303::itemName = "ITEM303"; +const int OPTIONS::ITEM303::defaultValue = 0; +const std::string OPTIONS::ITEM304::itemName = "ITEM304"; +const int OPTIONS::ITEM304::defaultValue = 0; +const std::string OPTIONS::ITEM305::itemName = "ITEM305"; +const int OPTIONS::ITEM305::defaultValue = 0; +const std::string OPTIONS::ITEM306::itemName = "ITEM306"; +const int OPTIONS::ITEM306::defaultValue = 0; +const std::string OPTIONS::ITEM307::itemName = "ITEM307"; +const int OPTIONS::ITEM307::defaultValue = 0; +const std::string OPTIONS::ITEM308::itemName = "ITEM308"; +const int OPTIONS::ITEM308::defaultValue = 0; +const std::string OPTIONS::ITEM309::itemName = "ITEM309"; +const int OPTIONS::ITEM309::defaultValue = 0; +const std::string OPTIONS::ITEM310::itemName = "ITEM310"; +const int OPTIONS::ITEM310::defaultValue = 0; +const std::string OPTIONS::ITEM311::itemName = "ITEM311"; +const int OPTIONS::ITEM311::defaultValue = 0; +const std::string OPTIONS::ITEM312::itemName = "ITEM312"; +const int OPTIONS::ITEM312::defaultValue = 0; +const std::string OPTIONS::ITEM313::itemName = "ITEM313"; +const int OPTIONS::ITEM313::defaultValue = 0; +const std::string OPTIONS::ITEM314::itemName = "ITEM314"; +const int OPTIONS::ITEM314::defaultValue = 0; +const std::string OPTIONS::ITEM315::itemName = "ITEM315"; +const int OPTIONS::ITEM315::defaultValue = 0; +const std::string OPTIONS::ITEM316::itemName = "ITEM316"; +const int OPTIONS::ITEM316::defaultValue = 0; +const std::string OPTIONS::ITEM317::itemName = "ITEM317"; +const int OPTIONS::ITEM317::defaultValue = 0; +const std::string OPTIONS::ITEM318::itemName = "ITEM318"; +const int OPTIONS::ITEM318::defaultValue = 0; +const std::string OPTIONS::ITEM319::itemName = "ITEM319"; +const int OPTIONS::ITEM319::defaultValue = 0; -OPTIONS3::OPTIONS3( ) : ParserKeyword("OPTIONS3") -{ - setFixedSize( (size_t) 1); +OPTIONS3::OPTIONS3() : ParserKeyword("OPTIONS3", KeywordSize(1, false)) { addValidSectionName("RUNSPEC"); addValidSectionName("SCHEDULE"); clearDeckNames(); @@ -3810,9 +4657,7 @@ const std::string OPTIONS3::ITEM288::itemName = "ITEM288"; const int OPTIONS3::ITEM288::defaultValue = 0; -OUTRAD::OUTRAD( ) : ParserKeyword("OUTRAD") -{ - setFixedSize( (size_t) 1); +OUTRAD::OUTRAD() : ParserKeyword("OUTRAD", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("OUTRAD"); @@ -3830,21 +4675,16 @@ const std::string OUTRAD::keywordName = "OUTRAD"; const std::string OUTRAD::RADIUS::itemName = "RADIUS"; -OUTSOL::OUTSOL( ) : ParserKeyword("OUTSOL") -{ - setFixedSize( (size_t) 0); - addValidSectionName("SCHEDULE"); +OUTSOL::OUTSOL() : ParserKeyword("OUTSOL", KeywordSize(0, false)) { addValidSectionName("SOLUTION"); + addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("OUTSOL"); } const std::string OUTSOL::keywordName = "OUTSOL"; -OVERBURD::OVERBURD( ) : ParserKeyword("OVERBURD") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("ROCKCOMP","NTROCC",0); +OVERBURD::OVERBURD() : ParserKeyword("OVERBURD", KeywordSize("ROCKCOMP", "NTROCC", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("OVERBURD"); diff --git a/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/P.cpp b/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/P.cpp index 6a4b11349e..a7f5522ac3 100644 --- a/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/P.cpp +++ b/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/P.cpp @@ -1,18 +1,17 @@ -#include -#include -#include -#include + +#include +#include +#include +#include -#include +#include namespace Opm { namespace ParserKeywords { -PARALLEL::PARALLEL( ) : ParserKeyword("PARALLEL") -{ - setFixedSize( (size_t) 1); +PARALLEL::PARALLEL() : ParserKeyword("PARALLEL", KeywordSize(1, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("PARALLEL"); @@ -38,9 +37,7 @@ const std::string PARALLEL::MACHINE_TYPE::itemName = "MACHINE_TYPE"; const std::string PARALLEL::MACHINE_TYPE::defaultValue = "DISTRIBUTED"; -PARAOPTS::PARAOPTS( ) : ParserKeyword("PARAOPTS") -{ - setFixedSize( (size_t) 1); +PARAOPTS::PARAOPTS() : ParserKeyword("PARAOPTS", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("PARAOPTS"); @@ -113,9 +110,7 @@ const int PARAOPTS::VALUE_PRT_FILE::defaultValue = 1; const std::string PARAOPTS::RESERVED::itemName = "RESERVED"; -PARTTRAC::PARTTRAC( ) : ParserKeyword("PARTTRAC") -{ - setFixedSize( (size_t) 1); +PARTTRAC::PARTTRAC() : ParserKeyword("PARTTRAC", KeywordSize(1, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("PARTTRAC"); @@ -148,9 +143,7 @@ const std::string PARTTRAC::NPKPMX::itemName = "NPKPMX"; const int PARTTRAC::NPKPMX::defaultValue = 0; -PATHS::PATHS( ) : ParserKeyword("PATHS") -{ - setSizeType(SLASH_TERMINATED); +PATHS::PATHS() : ParserKeyword("PATHS", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("PATHS"); @@ -172,9 +165,7 @@ const std::string PATHS::PathName::itemName = "PathName"; const std::string PATHS::PathValue::itemName = "PathValue"; -PBUB::PBUB( ) : ParserKeyword("PBUB") -{ - setFixedSize( (size_t) 1); +PBUB::PBUB() : ParserKeyword("PBUB", KeywordSize(1, false)) { addValidSectionName("SOLUTION"); clearDeckNames(); addDeckName("PBUB"); @@ -193,10 +184,7 @@ const std::string PBUB::keywordName = "PBUB"; const std::string PBUB::data::itemName = "data"; -PBVD::PBVD( ) : ParserKeyword("PBVD") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("EQLDIMS","NTEQUL",0); +PBVD::PBVD() : ParserKeyword("PBVD", KeywordSize("EQLDIMS", "NTEQUL", false, 0)) { addValidSectionName("SOLUTION"); clearDeckNames(); addDeckName("PBVD"); @@ -216,10 +204,11 @@ const std::string PBVD::keywordName = "PBVD"; const std::string PBVD::DATA::itemName = "DATA"; -PCG::PCG( ) : ParserKeyword("PCG") -{ - setFixedSize( (size_t) 1); +PCG::PCG() : ParserKeyword("PCG", KeywordSize(1, false)) { addValidSectionName("PROPS"); + setRequiredKeywords({ + "ENDSCALE", + }); clearDeckNames(); addDeckName("PCG"); { @@ -237,11 +226,7 @@ const std::string PCG::keywordName = "PCG"; const std::string PCG::data::itemName = "data"; -PCG32D::PCG32D( ) : ParserKeyword("PCG32D") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTSFUN",0); - setTableCollection( true ); +PCG32D::PCG32D() : ParserKeyword("PCG32D", KeywordSize("TABDIMS", "NTSFUN", true, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("PCG32D"); @@ -259,10 +244,11 @@ const std::string PCG32D::keywordName = "PCG32D"; const std::string PCG32D::SOME_DATA::itemName = "SOME_DATA"; -PCW::PCW( ) : ParserKeyword("PCW") -{ - setFixedSize( (size_t) 1); +PCW::PCW() : ParserKeyword("PCW", KeywordSize(1, false)) { addValidSectionName("PROPS"); + setRequiredKeywords({ + "ENDSCALE", + }); clearDeckNames(); addDeckName("PCW"); { @@ -280,11 +266,7 @@ const std::string PCW::keywordName = "PCW"; const std::string PCW::data::itemName = "data"; -PCW32D::PCW32D( ) : ParserKeyword("PCW32D") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTSFUN",0); - setTableCollection( true ); +PCW32D::PCW32D() : ParserKeyword("PCW32D", KeywordSize("TABDIMS", "NTSFUN", true, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("PCW32D"); @@ -302,9 +284,7 @@ const std::string PCW32D::keywordName = "PCW32D"; const std::string PCW32D::SOME_DATA::itemName = "SOME_DATA"; -PDEW::PDEW( ) : ParserKeyword("PDEW") -{ - setFixedSize( (size_t) 1); +PDEW::PDEW() : ParserKeyword("PDEW", KeywordSize(1, false)) { addValidSectionName("SOLUTION"); clearDeckNames(); addDeckName("PDEW"); @@ -323,10 +303,7 @@ const std::string PDEW::keywordName = "PDEW"; const std::string PDEW::data::itemName = "data"; -PDVD::PDVD( ) : ParserKeyword("PDVD") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("EQLDIMS","NTEQUL",0); +PDVD::PDVD() : ParserKeyword("PDVD", KeywordSize("EQLDIMS", "NTEQUL", false, 0)) { addValidSectionName("SOLUTION"); clearDeckNames(); addDeckName("PDVD"); @@ -346,9 +323,7 @@ const std::string PDVD::keywordName = "PDVD"; const std::string PDVD::DATA::itemName = "DATA"; -PEBI::PEBI( ) : ParserKeyword("PEBI") -{ - setFixedSize( (size_t) 1); +PEBI::PEBI() : ParserKeyword("PEBI", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("PEBI"); @@ -374,9 +349,7 @@ const std::string PEBI::AVOID_GRID_CALC::itemName = "AVOID_GRID_CALC"; const std::string PEBI::AVOID_GRID_CALC::defaultValue = "No"; -PECOEFS::PECOEFS( ) : ParserKeyword("PECOEFS") -{ - setSizeType(SLASH_TERMINATED); +PECOEFS::PECOEFS() : ParserKeyword("PECOEFS", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("PECOEFS"); @@ -459,9 +432,7 @@ const std::string PECOEFS::METHOD::itemName = "METHOD"; const int PECOEFS::METHOD::defaultValue = 0; -PEDIMS::PEDIMS( ) : ParserKeyword("PEDIMS") -{ - setFixedSize( (size_t) 1); +PEDIMS::PEDIMS() : ParserKeyword("PEDIMS", KeywordSize(1, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("PEDIMS"); @@ -487,10 +458,7 @@ const std::string PEDIMS::MAX_PRESSURE_POINTS::itemName = "MAX_PRESSURE_POINTS"; const int PEDIMS::MAX_PRESSURE_POINTS::defaultValue = 0; -PEGTABX::PEGTABX( ) : ParserKeyword("PEGTABX") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("PEDIMS","NUM_REGIONS",0); +PEGTABX::PEGTABX() : ParserKeyword("PEGTABX", KeywordSize("PEDIMS", "NUM_REGIONS", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("PEGTAB0"); @@ -517,10 +485,7 @@ const std::string PEGTABX::keywordName = "PEGTABX"; const std::string PEGTABX::DATA::itemName = "DATA"; -PEKTABX::PEKTABX( ) : ParserKeyword("PEKTABX") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("PEDIMS","NUM_REGIONS",0); +PEKTABX::PEKTABX() : ParserKeyword("PEKTABX", KeywordSize("PEDIMS", "NUM_REGIONS", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("PEKTAB0"); @@ -547,9 +512,7 @@ const std::string PEKTABX::keywordName = "PEKTABX"; const std::string PEKTABX::DATA::itemName = "DATA"; -PENUM::PENUM( ) : ParserKeyword("PENUM") -{ - setFixedSize( (size_t) 1); +PENUM::PENUM() : ParserKeyword("PENUM", KeywordSize(1, false)) { addValidSectionName("REGIONS"); clearDeckNames(); addDeckName("PENUM"); @@ -567,51 +530,47 @@ const std::string PENUM::keywordName = "PENUM"; const std::string PENUM::data::itemName = "data"; -PERFORMANCE_PROBE::PERFORMANCE_PROBE( ) : ParserKeyword("PERFORMANCE_PROBE") -{ - setFixedSize( (size_t) 0); +PERFORMANCE_PROBE::PERFORMANCE_PROBE() : ParserKeyword("PERFORMANCE_PROBE", KeywordSize(0, false)) { addValidSectionName("SUMMARY"); clearDeckNames(); - addDeckName("ELAPSED"); addDeckName("HLINEARS"); + addDeckName("TCPUDAY"); + addDeckName("ELAPSED"); addDeckName("HSUMLINS"); + addDeckName("WNEWTON"); addDeckName("MAXDPR"); - addDeckName("MAXDSG"); - addDeckName("MAXDSO"); addDeckName("MAXDSW"); + addDeckName("MAXDSO"); + addDeckName("MAXDSG"); addDeckName("MEMORYTS"); addDeckName("MLINEARS"); + addDeckName("TELAPDAY"); addDeckName("MSUMLINS"); addDeckName("MSUMNEWT"); addDeckName("NBYTOT"); + addDeckName("TCPUTSHT"); addDeckName("NEWTON"); - addDeckName("NLINEARS"); - addDeckName("NLINSMAX"); - addDeckName("NLINSMIN"); - addDeckName("PERFORMA"); - addDeckName("STEPTYPE"); - addDeckName("TCPU"); - addDeckName("TCPUDAY"); addDeckName("TCPUH"); - addDeckName("TCPUHT"); + addDeckName("NLINEARS"); + addDeckName("TCPU"); + addDeckName("NLINSMIN"); + addDeckName("NLINSMAX"); + addDeckName("PERFORMA"); addDeckName("TCPUSCH"); + addDeckName("STEPTYPE"); + addDeckName("TCPUHT"); addDeckName("TCPUTS"); addDeckName("TCPUTSH"); - addDeckName("TCPUTSHT"); - addDeckName("TELAPDAY"); + addDeckName("TIMESTEP"); addDeckName("TELAPLIN"); addDeckName("TELAPTS"); - addDeckName("TIMESTEP"); - addDeckName("WNEWTON"); addDeckName("ZIPEFF"); addDeckName("ZIPEFFC"); } const std::string PERFORMANCE_PROBE::keywordName = "PERFORMANCE_PROBE"; -PERMAVE::PERMAVE( ) : ParserKeyword("PERMAVE") -{ - setFixedSize( (size_t) 1); +PERMAVE::PERMAVE() : ParserKeyword("PERMAVE", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("PERMAVE"); @@ -644,21 +603,16 @@ const std::string PERMAVE::EXPO_2::itemName = "EXPO_2"; const int PERMAVE::EXPO_2::defaultValue = -1; -PERMFACT::PERMFACT( ) : ParserKeyword("PERMFACT") -{ - setSizeType(SLASH_TERMINATED); +PERMFACT::PERMFACT() : ParserKeyword("PERMFACT", KeywordSize("EQLDIMS", "NTEQUL", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("PERMFACT"); { ParserRecord record; { - ParserItem item("POROSITY", ParserItem::itype::DOUBLE); + ParserItem item("DATA", ParserItem::itype::DOUBLE); + item.setSizeType(ParserItem::item_size::ALL); item.push_backDimension("1"); - record.addItem(item); - } - { - ParserItem item("PERMFACTMULT", ParserItem::itype::DOUBLE); item.push_backDimension("1"); record.addItem(item); } @@ -666,13 +620,10 @@ PERMFACT::PERMFACT( ) : ParserKeyword("PERMFACT") } } const std::string PERMFACT::keywordName = "PERMFACT"; -const std::string PERMFACT::POROSITY::itemName = "POROSITY"; -const std::string PERMFACT::PERMFACTMULT::itemName = "PERMFACTMULT"; +const std::string PERMFACT::DATA::itemName = "DATA"; -PERMJFUN::PERMJFUN( ) : ParserKeyword("PERMJFUN") -{ - setFixedSize( (size_t) 1); +PERMJFUN::PERMJFUN() : ParserKeyword("PERMJFUN", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("PERMJFUN"); @@ -691,9 +642,7 @@ const std::string PERMJFUN::keywordName = "PERMJFUN"; const std::string PERMJFUN::data::itemName = "data"; -PERMR::PERMR( ) : ParserKeyword("PERMR") -{ - setFixedSize( (size_t) 1); +PERMR::PERMR() : ParserKeyword("PERMR", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("PERMR"); @@ -712,9 +661,7 @@ const std::string PERMR::keywordName = "PERMR"; const std::string PERMR::data::itemName = "data"; -PERMTHT::PERMTHT( ) : ParserKeyword("PERMTHT") -{ - setFixedSize( (size_t) 1); +PERMTHT::PERMTHT() : ParserKeyword("PERMTHT", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("PERMTHT"); @@ -733,9 +680,7 @@ const std::string PERMTHT::keywordName = "PERMTHT"; const std::string PERMTHT::data::itemName = "data"; -PERMX::PERMX( ) : ParserKeyword("PERMX") -{ - setFixedSize( (size_t) 1); +PERMX::PERMX() : ParserKeyword("PERMX", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("PERMX"); @@ -754,9 +699,7 @@ const std::string PERMX::keywordName = "PERMX"; const std::string PERMX::data::itemName = "data"; -PERMXY::PERMXY( ) : ParserKeyword("PERMXY") -{ - setFixedSize( (size_t) 1); +PERMXY::PERMXY() : ParserKeyword("PERMXY", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("PERMXY"); @@ -775,9 +718,7 @@ const std::string PERMXY::keywordName = "PERMXY"; const std::string PERMXY::data::itemName = "data"; -PERMY::PERMY( ) : ParserKeyword("PERMY") -{ - setFixedSize( (size_t) 1); +PERMY::PERMY() : ParserKeyword("PERMY", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("PERMY"); @@ -795,12 +736,10 @@ PERMY::PERMY( ) : ParserKeyword("PERMY") } const std::string PERMY::keywordName = "PERMY"; const std::string PERMY::data::itemName = "data"; -const double PERMY::data::defaultValue = 0.000000; +const double PERMY::data::defaultValue = 0; -PERMYZ::PERMYZ( ) : ParserKeyword("PERMYZ") -{ - setFixedSize( (size_t) 1); +PERMYZ::PERMYZ() : ParserKeyword("PERMYZ", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("PERMYZ"); @@ -819,9 +758,7 @@ const std::string PERMYZ::keywordName = "PERMYZ"; const std::string PERMYZ::data::itemName = "data"; -PERMZ::PERMZ( ) : ParserKeyword("PERMZ") -{ - setFixedSize( (size_t) 1); +PERMZ::PERMZ() : ParserKeyword("PERMZ", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("PERMZ"); @@ -839,12 +776,10 @@ PERMZ::PERMZ( ) : ParserKeyword("PERMZ") } const std::string PERMZ::keywordName = "PERMZ"; const std::string PERMZ::data::itemName = "data"; -const double PERMZ::data::defaultValue = 0.000000; +const double PERMZ::data::defaultValue = 0; -PERMZX::PERMZX( ) : ParserKeyword("PERMZX") -{ - setFixedSize( (size_t) 1); +PERMZX::PERMZX() : ParserKeyword("PERMZX", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("PERMZX"); @@ -863,9 +798,7 @@ const std::string PERMZX::keywordName = "PERMZX"; const std::string PERMZX::data::itemName = "data"; -PETGRID::PETGRID( ) : ParserKeyword("PETGRID") -{ - setFixedSize( (size_t) 1); +PETGRID::PETGRID() : ParserKeyword("PETGRID", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("PETGRID"); @@ -882,9 +815,7 @@ const std::string PETGRID::keywordName = "PETGRID"; const std::string PETGRID::FILE_NAME::itemName = "FILE_NAME"; -PETOPTS::PETOPTS( ) : ParserKeyword("PETOPTS") -{ - setFixedSize( (size_t) 1); +PETOPTS::PETOPTS() : ParserKeyword("PETOPTS", KeywordSize(1, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("PETOPTS"); @@ -902,9 +833,7 @@ const std::string PETOPTS::keywordName = "PETOPTS"; const std::string PETOPTS::OPTIONS::itemName = "OPTIONS"; -PICOND::PICOND( ) : ParserKeyword("PICOND") -{ - setFixedSize( (size_t) 1); +PICOND::PICOND() : ParserKeyword("PICOND", KeywordSize(1, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("PICOND"); @@ -985,7 +914,7 @@ const double PICOND::D_F::defaultValue = 1.000000; const std::string PICOND::INCLUDE::itemName = "INCLUDE"; const std::string PICOND::INCLUDE::defaultValue = "NO"; const std::string PICOND::F_L::itemName = "F_L"; -const double PICOND::F_L::defaultValue = 0.000000; +const double PICOND::F_L::defaultValue = 0; const std::string PICOND::F_U::itemName = "F_U"; const double PICOND::F_U::defaultValue = 1.100000; const std::string PICOND::DELTA_WAT_SAT::itemName = "DELTA_WAT_SAT"; @@ -999,9 +928,7 @@ const double PICOND::ADAPTIVE_ORD_CONTROL::defaultValue = -1.000000; const std::string PICOND::ADAPTIVE_ORD_MIN_SPACING::itemName = "ADAPTIVE_ORD_MIN_SPACING"; -PIMTDIMS::PIMTDIMS( ) : ParserKeyword("PIMTDIMS") -{ - setFixedSize( (size_t) 1); +PIMTDIMS::PIMTDIMS() : ParserKeyword("PIMTDIMS", KeywordSize(1, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("PIMTDIMS"); @@ -1027,10 +954,7 @@ const std::string PIMTDIMS::NPPIMT::itemName = "NPPIMT"; const int PIMTDIMS::NPPIMT::defaultValue = 0; -PIMULTAB::PIMULTAB( ) : ParserKeyword("PIMULTAB") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("PIMTDIMS","NTPIMT",0); +PIMULTAB::PIMULTAB() : ParserKeyword("PIMULTAB", KeywordSize("PIMTDIMS", "NTPIMT", false, 0)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("PIMULTAB"); @@ -1048,9 +972,7 @@ const std::string PIMULTAB::keywordName = "PIMULTAB"; const std::string PIMULTAB::TABLE::itemName = "TABLE"; -PINCH::PINCH( ) : ParserKeyword("PINCH") -{ - setFixedSize( (size_t) 1); +PINCH::PINCH() : ParserKeyword("PINCH", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("PINCH"); @@ -1099,9 +1021,7 @@ const std::string PINCH::MULTZ_OPTION::itemName = "MULTZ_OPTION"; const std::string PINCH::MULTZ_OPTION::defaultValue = "TOP"; -PINCHNUM::PINCHNUM( ) : ParserKeyword("PINCHNUM") -{ - setFixedSize( (size_t) 1); +PINCHNUM::PINCHNUM() : ParserKeyword("PINCHNUM", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("PINCHNUM"); @@ -1119,9 +1039,7 @@ const std::string PINCHNUM::keywordName = "PINCHNUM"; const std::string PINCHNUM::data::itemName = "data"; -PINCHOUT::PINCHOUT( ) : ParserKeyword("PINCHOUT") -{ - setFixedSize( (size_t) 0); +PINCHOUT::PINCHOUT() : ParserKeyword("PINCHOUT", KeywordSize(0, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("PINCHOUT"); @@ -1129,9 +1047,7 @@ PINCHOUT::PINCHOUT( ) : ParserKeyword("PINCHOUT") const std::string PINCHOUT::keywordName = "PINCHOUT"; -PINCHREG::PINCHREG( ) : ParserKeyword("PINCHREG") -{ - setSizeType(SLASH_TERMINATED); +PINCHREG::PINCHREG() : ParserKeyword("PINCHREG", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("PINCHREG"); @@ -1180,9 +1096,7 @@ const std::string PINCHREG::OPTION3::itemName = "OPTION3"; const std::string PINCHREG::OPTION3::defaultValue = "TOP"; -PINCHXY::PINCHXY( ) : ParserKeyword("PINCHXY") -{ - setFixedSize( (size_t) 1); +PINCHXY::PINCHXY() : ParserKeyword("PINCHXY", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("PINCHXY"); @@ -1210,9 +1124,7 @@ const std::string PINCHXY::THRESHOLD_YTHETA::itemName = "THRESHOLD_YTHETA"; const double PINCHXY::THRESHOLD_YTHETA::defaultValue = 0.001000; -PINTDIMS::PINTDIMS( ) : ParserKeyword("PINTDIMS") -{ - setFixedSize( (size_t) 1); +PINTDIMS::PINTDIMS() : ParserKeyword("PINTDIMS", KeywordSize(1, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("PINTDIMS"); @@ -1245,9 +1157,7 @@ const std::string PINTDIMS::NTPMWINJ::itemName = "NTPMWINJ"; const int PINTDIMS::NTPMWINJ::defaultValue = 1; -PLMIXNUM::PLMIXNUM( ) : ParserKeyword("PLMIXNUM") -{ - setFixedSize( (size_t) 1); +PLMIXNUM::PLMIXNUM() : ParserKeyword("PLMIXNUM", KeywordSize(1, false)) { addValidSectionName("REGIONS"); clearDeckNames(); addDeckName("PLMIXNUM"); @@ -1265,10 +1175,7 @@ const std::string PLMIXNUM::keywordName = "PLMIXNUM"; const std::string PLMIXNUM::data::itemName = "data"; -PLMIXPAR::PLMIXPAR( ) : ParserKeyword("PLMIXPAR") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("REGDIMS","NPLMIX",0); +PLMIXPAR::PLMIXPAR() : ParserKeyword("PLMIXPAR", KeywordSize("REGDIMS", "NPLMIX", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("PLMIXPAR"); @@ -1287,12 +1194,9 @@ const std::string PLMIXPAR::keywordName = "PLMIXPAR"; const std::string PLMIXPAR::TODD_LONGSTAFF::itemName = "TODD_LONGSTAFF"; -PLYADS::PLYADS( ) : ParserKeyword("PLYADS") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTSFUN",0); - addValidSectionName("PROPS"); +PLYADS::PLYADS() : ParserKeyword("PLYADS", KeywordSize("TABDIMS", "NTSFUN", false, 0)) { addValidSectionName("SPECIAL"); + addValidSectionName("PROPS"); clearDeckNames(); addDeckName("PLYADS"); { @@ -1311,11 +1215,7 @@ const std::string PLYADS::keywordName = "PLYADS"; const std::string PLYADS::DATA::itemName = "DATA"; -PLYADSS::PLYADSS( ) : ParserKeyword("PLYADSS") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTSFUN",0); - setTableCollection( true ); +PLYADSS::PLYADSS() : ParserKeyword("PLYADSS", KeywordSize("TABDIMS", "NTSFUN", true, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("PLYADSS"); @@ -1345,9 +1245,7 @@ const std::string PLYADSS::POLYMER_ADS_C::itemName = "POLYMER_ADS_C"; const std::string PLYADSS::DATA::itemName = "DATA"; -PLYATEMP::PLYATEMP( ) : ParserKeyword("PLYATEMP") -{ - setFixedSize( (size_t) 1); +PLYATEMP::PLYATEMP() : ParserKeyword("PLYATEMP", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("PLYATEMP"); @@ -1366,9 +1264,7 @@ const std::string PLYATEMP::keywordName = "PLYATEMP"; const std::string PLYATEMP::data::itemName = "data"; -PLYCAMAX::PLYCAMAX( ) : ParserKeyword("PLYCAMAX") -{ - setFixedSize( (size_t) 1); +PLYCAMAX::PLYCAMAX() : ParserKeyword("PLYCAMAX", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("PLYCAMAX"); @@ -1387,13 +1283,10 @@ const std::string PLYCAMAX::keywordName = "PLYCAMAX"; const std::string PLYCAMAX::data::itemName = "data"; -PLYDHFLF::PLYDHFLF( ) : ParserKeyword("PLYDHFLF") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTPVT",0); +PLYDHFLF::PLYDHFLF() : ParserKeyword("PLYDHFLF", KeywordSize("TABDIMS", "NTPVT", false, 0)) { + addValidSectionName("SPECIAL"); addValidSectionName("PROPS"); addValidSectionName("SCHEDULE"); - addValidSectionName("SPECIAL"); clearDeckNames(); addDeckName("PLYDHFLF"); { @@ -1412,10 +1305,7 @@ const std::string PLYDHFLF::keywordName = "PLYDHFLF"; const std::string PLYDHFLF::DATA::itemName = "DATA"; -PLYESAL::PLYESAL( ) : ParserKeyword("PLYESAL") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTSFUN",0); +PLYESAL::PLYESAL() : ParserKeyword("PLYESAL", KeywordSize("TABDIMS", "NTSFUN", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("PLYESAL"); @@ -1432,9 +1322,7 @@ const std::string PLYESAL::keywordName = "PLYESAL"; const std::string PLYESAL::ALPHAP::itemName = "ALPHAP"; -PLYKRRF::PLYKRRF( ) : ParserKeyword("PLYKRRF") -{ - setFixedSize( (size_t) 1); +PLYKRRF::PLYKRRF() : ParserKeyword("PLYKRRF", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("PLYKRRF"); @@ -1453,12 +1341,9 @@ const std::string PLYKRRF::keywordName = "PLYKRRF"; const std::string PLYKRRF::data::itemName = "data"; -PLYMAX::PLYMAX( ) : ParserKeyword("PLYMAX") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("REGDIMS","NPLMIX",0); - addValidSectionName("PROPS"); +PLYMAX::PLYMAX() : ParserKeyword("PLYMAX", KeywordSize("REGDIMS", "NPLMIX", false, 0)) { addValidSectionName("SPECIAL"); + addValidSectionName("PROPS"); clearDeckNames(); addDeckName("PLYMAX"); { @@ -1481,9 +1366,7 @@ const std::string PLYMAX::MAX_POLYMER_CONCENTRATION::itemName = "MAX_POLYMER_CON const std::string PLYMAX::MAX_SALT_CONCENTRATION::itemName = "MAX_SALT_CONCENTRATION"; -PLYMWINJ::PLYMWINJ( ) : ParserKeyword("PLYMWINJ") -{ - setSizeType(SLASH_TERMINATED); +PLYMWINJ::PLYMWINJ() : ParserKeyword("PLYMWINJ", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("PLYMWINJ"); @@ -1533,9 +1416,7 @@ const std::string PLYMWINJ::VELOCITY::itemName = "VELOCITY"; const std::string PLYMWINJ::MOLECULARWEIGHT::itemName = "MOLECULARWEIGHT"; -PLYOPTS::PLYOPTS( ) : ParserKeyword("PLYOPTS") -{ - setFixedSize( (size_t) 1); +PLYOPTS::PLYOPTS() : ParserKeyword("PLYOPTS", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("PLYOPTS"); @@ -1551,12 +1432,10 @@ PLYOPTS::PLYOPTS( ) : ParserKeyword("PLYOPTS") } const std::string PLYOPTS::keywordName = "PLYOPTS"; const std::string PLYOPTS::MIN_SWAT::itemName = "MIN_SWAT"; -const double PLYOPTS::MIN_SWAT::defaultValue = 0.000001; +const double PLYOPTS::MIN_SWAT::defaultValue = 1e-06; -PLYRMDEN::PLYRMDEN( ) : ParserKeyword("PLYRMDEN") -{ - setFixedSize( (size_t) 1); +PLYRMDEN::PLYRMDEN() : ParserKeyword("PLYRMDEN", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("PLYRMDEN"); @@ -1575,10 +1454,7 @@ const std::string PLYRMDEN::keywordName = "PLYRMDEN"; const std::string PLYRMDEN::data::itemName = "data"; -PLYROCK::PLYROCK( ) : ParserKeyword("PLYROCK") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTSFUN",0); +PLYROCK::PLYROCK() : ParserKeyword("PLYROCK", KeywordSize("TABDIMS", "NTSFUN", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("PLYROCK"); @@ -1622,10 +1498,7 @@ const double PLYROCK::AI::defaultValue = 1.000000; const std::string PLYROCK::MAX_ADSORPTION::itemName = "MAX_ADSORPTION"; -PLYROCKM::PLYROCKM( ) : ParserKeyword("PLYROCKM") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTSFUN",0); +PLYROCKM::PLYROCKM() : ParserKeyword("PLYROCKM", KeywordSize("TABDIMS", "NTSFUN", false, 0)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("PLYROCKM"); @@ -1669,23 +1542,17 @@ const double PLYROCKM::AI::defaultValue = 1.000000; const std::string PLYROCKM::MAX_ADSORPTION::itemName = "MAX_ADSORPTION"; -PLYSHEAR::PLYSHEAR( ) : ParserKeyword("PLYSHEAR") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTPVT",0); - addValidSectionName("PROPS"); +PLYSHEAR::PLYSHEAR() : ParserKeyword("PLYSHEAR", KeywordSize("TABDIMS", "NTPVT", false, 0)) { addValidSectionName("SPECIAL"); + addValidSectionName("PROPS"); clearDeckNames(); addDeckName("PLYSHEAR"); { ParserRecord record; { - ParserItem item("WATER_VELOCITY", ParserItem::itype::DOUBLE); + ParserItem item("DATA", ParserItem::itype::DOUBLE); + item.setSizeType(ParserItem::item_size::ALL); item.push_backDimension("Length/Time"); - record.addItem(item); - } - { - ParserItem item("VRF", ParserItem::itype::DOUBLE); item.push_backDimension("1"); record.addItem(item); } @@ -1693,16 +1560,13 @@ PLYSHEAR::PLYSHEAR( ) : ParserKeyword("PLYSHEAR") } } const std::string PLYSHEAR::keywordName = "PLYSHEAR"; -const std::string PLYSHEAR::WATER_VELOCITY::itemName = "WATER_VELOCITY"; -const std::string PLYSHEAR::VRF::itemName = "VRF"; +const std::string PLYSHEAR::DATA::itemName = "DATA"; -PLYSHLOG::PLYSHLOG( ) : ParserKeyword("PLYSHLOG") -{ - setFixedSize( (size_t) 2); +PLYSHLOG::PLYSHLOG() : ParserKeyword("PLYSHLOG", KeywordSize(2, false)) { + addValidSectionName("SPECIAL"); addValidSectionName("PROPS"); addValidSectionName("SCHEDULE"); - addValidSectionName("SPECIAL"); clearDeckNames(); addDeckName("PLYSHLOG"); { @@ -1743,10 +1607,7 @@ const std::string PLYSHLOG::REF_TEMPERATURE::itemName = "REF_TEMPERATURE"; const std::string PLYSHLOG::DATA::itemName = "DATA"; -PLYTRRF::PLYTRRF( ) : ParserKeyword("PLYTRRF") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTSFUN",0); +PLYTRRF::PLYTRRF() : ParserKeyword("PLYTRRF", KeywordSize("TABDIMS", "NTSFUN", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("PLYTRRF"); @@ -1766,9 +1627,7 @@ const std::string PLYTRRF::keywordName = "PLYTRRF"; const std::string PLYTRRF::DATA::itemName = "DATA"; -PLYTRRFA::PLYTRRFA( ) : ParserKeyword("PLYTRRFA") -{ - setFixedSize( (size_t) 1); +PLYTRRFA::PLYTRRFA() : ParserKeyword("PLYTRRFA", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("PLYTRRFA"); @@ -1785,13 +1644,10 @@ const std::string PLYTRRFA::keywordName = "PLYTRRFA"; const std::string PLYTRRFA::NBTRRF::itemName = "NBTRRF"; -PLYVISC::PLYVISC( ) : ParserKeyword("PLYVISC") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTPVT",0); +PLYVISC::PLYVISC() : ParserKeyword("PLYVISC", KeywordSize("TABDIMS", "NTPVT", false, 0)) { + addValidSectionName("SPECIAL"); addValidSectionName("PROPS"); addValidSectionName("SCHEDULE"); - addValidSectionName("SPECIAL"); clearDeckNames(); addDeckName("PLYVISC"); { @@ -1810,10 +1666,7 @@ const std::string PLYVISC::keywordName = "PLYVISC"; const std::string PLYVISC::DATA::itemName = "DATA"; -PLYVISCS::PLYVISCS( ) : ParserKeyword("PLYVISCS") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTPVT",0); +PLYVISCS::PLYVISCS() : ParserKeyword("PLYVISCS", KeywordSize("TABDIMS", "NTPVT", false, 0)) { addValidSectionName("PROPS"); addValidSectionName("SCHEDULE"); clearDeckNames(); @@ -1838,10 +1691,7 @@ const std::string PLYVISCS::PC::itemName = "PC"; const std::string PLYVISCS::DATA::itemName = "DATA"; -PLYVISCT::PLYVISCT( ) : ParserKeyword("PLYVISCT") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTPVT",0); +PLYVISCT::PLYVISCT() : ParserKeyword("PLYVISCT", KeywordSize("TABDIMS", "NTPVT", false, 0)) { addValidSectionName("PROPS"); addValidSectionName("SCHEDULE"); clearDeckNames(); @@ -1866,10 +1716,7 @@ const std::string PLYVISCT::PC::itemName = "PC"; const std::string PLYVISCT::DATA::itemName = "DATA"; -PLYVMH::PLYVMH( ) : ParserKeyword("PLYVMH") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("REGDIMS","NPLMIX",0); +PLYVMH::PLYVMH() : ParserKeyword("PLYVMH", KeywordSize("REGDIMS", "NPLMIX", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("PLYVMH"); @@ -1905,11 +1752,7 @@ const std::string PLYVMH::GAMMA::itemName = "GAMMA"; const std::string PLYVMH::KAPPA::itemName = "KAPPA"; -PLYVSCST::PLYVSCST( ) : ParserKeyword("PLYVSCST") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTPVT",0); - setTableCollection( true ); +PLYVSCST::PLYVSCST() : ParserKeyword("PLYVSCST", KeywordSize("TABDIMS", "NTPVT", true, 0)) { addValidSectionName("PROPS"); addValidSectionName("SCHEDULE"); clearDeckNames(); @@ -1934,9 +1777,7 @@ const std::string PLYVSCST::PC1::itemName = "PC1"; const std::string PLYVSCST::MULT::itemName = "MULT"; -PMAX::PMAX( ) : ParserKeyword("PMAX") -{ - setFixedSize( (size_t) 1); +PMAX::PMAX() : ParserKeyword("PMAX", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("PMAX"); @@ -1970,17 +1811,14 @@ PMAX::PMAX( ) : ParserKeyword("PMAX") const std::string PMAX::keywordName = "PMAX"; const std::string PMAX::MAX_PRESSURE::itemName = "MAX_PRESSURE"; const std::string PMAX::MAX_PRESSURE_CHECK::itemName = "MAX_PRESSURE_CHECK"; -const double PMAX::MAX_PRESSURE_CHECK::defaultValue = 0.000000; +const double PMAX::MAX_PRESSURE_CHECK::defaultValue = 0; const std::string PMAX::MIN_PRESSURE_CHECK::itemName = "MIN_PRESSURE_CHECK"; const double PMAX::MIN_PRESSURE_CHECK::defaultValue = 100000000000000000000.000000; const std::string PMAX::NUM_NODES::itemName = "NUM_NODES"; const int PMAX::NUM_NODES::defaultValue = 30; -PMISC::PMISC( ) : ParserKeyword("PMISC") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("MISCIBLE","NTMISC",0); +PMISC::PMISC() : ParserKeyword("PMISC", KeywordSize("MISCIBLE", "NTMISC", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("PMISC"); @@ -2000,9 +1838,7 @@ const std::string PMISC::keywordName = "PMISC"; const std::string PMISC::DATA::itemName = "DATA"; -POLYMER::POLYMER( ) : ParserKeyword("POLYMER") -{ - setFixedSize( (size_t) 0); +POLYMER::POLYMER() : ParserKeyword("POLYMER", KeywordSize(0, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("POLYMER"); @@ -2010,9 +1846,7 @@ POLYMER::POLYMER( ) : ParserKeyword("POLYMER") const std::string POLYMER::keywordName = "POLYMER"; -POLYMW::POLYMW( ) : ParserKeyword("POLYMW") -{ - setFixedSize( (size_t) 0); +POLYMW::POLYMW() : ParserKeyword("POLYMW", KeywordSize(0, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("POLYMW"); @@ -2020,9 +1854,7 @@ POLYMW::POLYMW( ) : ParserKeyword("POLYMW") const std::string POLYMW::keywordName = "POLYMW"; -PORO::PORO( ) : ParserKeyword("PORO") -{ - setFixedSize( (size_t) 1); +PORO::PORO() : ParserKeyword("PORO", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("PORO"); @@ -2040,12 +1872,10 @@ PORO::PORO( ) : ParserKeyword("PORO") } const std::string PORO::keywordName = "PORO"; const std::string PORO::data::itemName = "data"; -const double PORO::data::defaultValue = 0.000000; +const double PORO::data::defaultValue = 0; -PORV::PORV( ) : ParserKeyword("PORV") -{ - setFixedSize( (size_t) 1); +PORV::PORV() : ParserKeyword("PORV", KeywordSize(1, false)) { addValidSectionName("EDIT"); clearDeckNames(); addDeckName("PORV"); @@ -2064,10 +1894,7 @@ const std::string PORV::keywordName = "PORV"; const std::string PORV::data::itemName = "data"; -PPCWMAX::PPCWMAX( ) : ParserKeyword("PPCWMAX") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTSFUN",0); +PPCWMAX::PPCWMAX() : ParserKeyword("PPCWMAX", KeywordSize("TABDIMS", "NTSFUN", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("PPCWMAX"); @@ -2093,9 +1920,7 @@ const std::string PPCWMAX::MODIFY_CONNATE_SATURATION::itemName = "MODIFY_CONNATE const std::string PPCWMAX::MODIFY_CONNATE_SATURATION::defaultValue = "NO"; -PRECSALT::PRECSALT( ) : ParserKeyword("PRECSALT") -{ - setFixedSize( (size_t) 0); +PRECSALT::PRECSALT() : ParserKeyword("PRECSALT", KeywordSize(0, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("PRECSALT"); @@ -2103,10 +1928,7 @@ PRECSALT::PRECSALT( ) : ParserKeyword("PRECSALT") const std::string PRECSALT::keywordName = "PRECSALT"; -PREF::PREF( ) : ParserKeyword("PREF") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NUM_STATE_EQ",0); +PREF::PREF() : ParserKeyword("PREF", KeywordSize("TABDIMS", "NUM_STATE_EQ", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("PREF"); @@ -2125,10 +1947,7 @@ const std::string PREF::keywordName = "PREF"; const std::string PREF::PRESSURE::itemName = "PRESSURE"; -PREFS::PREFS( ) : ParserKeyword("PREFS") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NUM_STATE_EQ",0); +PREFS::PREFS() : ParserKeyword("PREFS", KeywordSize("TABDIMS", "NUM_STATE_EQ", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("PREFS"); @@ -2147,9 +1966,7 @@ const std::string PREFS::keywordName = "PREFS"; const std::string PREFS::PRESSURE::itemName = "PRESSURE"; -PRESSURE::PRESSURE( ) : ParserKeyword("PRESSURE") -{ - setFixedSize( (size_t) 1); +PRESSURE::PRESSURE() : ParserKeyword("PRESSURE", KeywordSize(1, false)) { addValidSectionName("SOLUTION"); clearDeckNames(); addDeckName("PRESSURE"); @@ -2168,9 +1985,7 @@ const std::string PRESSURE::keywordName = "PRESSURE"; const std::string PRESSURE::data::itemName = "data"; -PRIORITY::PRIORITY( ) : ParserKeyword("PRIORITY") -{ - setFixedSize( (size_t) 1); +PRIORITY::PRIORITY() : ParserKeyword("PRIORITY", KeywordSize(1, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("PRIORITY"); @@ -2267,51 +2082,47 @@ PRIORITY::PRIORITY( ) : ParserKeyword("PRIORITY") const std::string PRIORITY::keywordName = "PRIORITY"; const std::string PRIORITY::MIN_CALC_TIME::itemName = "MIN_CALC_TIME"; const std::string PRIORITY::A1::itemName = "A1"; -const double PRIORITY::A1::defaultValue = 0.000000; +const double PRIORITY::A1::defaultValue = 0; const std::string PRIORITY::B1::itemName = "B1"; -const double PRIORITY::B1::defaultValue = 0.000000; +const double PRIORITY::B1::defaultValue = 0; const std::string PRIORITY::C1::itemName = "C1"; -const double PRIORITY::C1::defaultValue = 0.000000; +const double PRIORITY::C1::defaultValue = 0; const std::string PRIORITY::D1::itemName = "D1"; -const double PRIORITY::D1::defaultValue = 0.000000; +const double PRIORITY::D1::defaultValue = 0; const std::string PRIORITY::E1::itemName = "E1"; -const double PRIORITY::E1::defaultValue = 0.000000; +const double PRIORITY::E1::defaultValue = 0; const std::string PRIORITY::F1::itemName = "F1"; -const double PRIORITY::F1::defaultValue = 0.000000; +const double PRIORITY::F1::defaultValue = 0; const std::string PRIORITY::G1::itemName = "G1"; -const double PRIORITY::G1::defaultValue = 0.000000; +const double PRIORITY::G1::defaultValue = 0; const std::string PRIORITY::H1::itemName = "H1"; -const double PRIORITY::H1::defaultValue = 0.000000; +const double PRIORITY::H1::defaultValue = 0; const std::string PRIORITY::A2::itemName = "A2"; -const double PRIORITY::A2::defaultValue = 0.000000; +const double PRIORITY::A2::defaultValue = 0; const std::string PRIORITY::B2::itemName = "B2"; -const double PRIORITY::B2::defaultValue = 0.000000; +const double PRIORITY::B2::defaultValue = 0; const std::string PRIORITY::C2::itemName = "C2"; -const double PRIORITY::C2::defaultValue = 0.000000; +const double PRIORITY::C2::defaultValue = 0; const std::string PRIORITY::D2::itemName = "D2"; -const double PRIORITY::D2::defaultValue = 0.000000; +const double PRIORITY::D2::defaultValue = 0; const std::string PRIORITY::E2::itemName = "E2"; -const double PRIORITY::E2::defaultValue = 0.000000; +const double PRIORITY::E2::defaultValue = 0; const std::string PRIORITY::F2::itemName = "F2"; -const double PRIORITY::F2::defaultValue = 0.000000; +const double PRIORITY::F2::defaultValue = 0; const std::string PRIORITY::G2::itemName = "G2"; -const double PRIORITY::G2::defaultValue = 0.000000; +const double PRIORITY::G2::defaultValue = 0; const std::string PRIORITY::H2::itemName = "H2"; -const double PRIORITY::H2::defaultValue = 0.000000; +const double PRIORITY::H2::defaultValue = 0; -PROPS::PROPS( ) : ParserKeyword("PROPS") -{ - setFixedSize( (size_t) 0); +PROPS::PROPS() : ParserKeyword("PROPS", KeywordSize(0, false)) { clearDeckNames(); addDeckName("PROPS"); } const std::string PROPS::keywordName = "PROPS"; -PRORDER::PRORDER( ) : ParserKeyword("PRORDER") -{ - setFixedSize( (size_t) 2); +PRORDER::PRORDER() : ParserKeyword("PRORDER", KeywordSize(2, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("PRORDER"); @@ -2387,10 +2198,7 @@ const std::string PRORDER::OPT5::itemName = "OPT5"; const std::string PRORDER::OPT5::defaultValue = "YES"; -PRVD::PRVD( ) : ParserKeyword("PRVD") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("EQLDIMS","NTEQUL",0); +PRVD::PRVD() : ParserKeyword("PRVD", KeywordSize("EQLDIMS", "NTEQUL", false, 0)) { addValidSectionName("SOLUTION"); clearDeckNames(); addDeckName("PRVD"); @@ -2410,9 +2218,7 @@ const std::string PRVD::keywordName = "PRVD"; const std::string PRVD::DATA::itemName = "DATA"; -PSTEADY::PSTEADY( ) : ParserKeyword("PSTEADY") -{ - setFixedSize( (size_t) 1); +PSTEADY::PSTEADY() : ParserKeyword("PSTEADY", KeywordSize(1, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("PSTEADY"); @@ -2488,9 +2294,7 @@ const std::string PSTEADY::PIM_AQUIFERS::itemName = "PIM_AQUIFERS"; const std::string PSTEADY::PIM_AQUIFERS::defaultValue = "NO"; -PSWRG::PSWRG( ) : ParserKeyword("PSWRG") -{ - setFixedSize( (size_t) 1); +PSWRG::PSWRG() : ParserKeyword("PSWRG", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("PSWRG"); @@ -2508,9 +2312,7 @@ const std::string PSWRG::keywordName = "PSWRG"; const std::string PSWRG::data::itemName = "data"; -PSWRO::PSWRO( ) : ParserKeyword("PSWRO") -{ - setFixedSize( (size_t) 1); +PSWRO::PSWRO() : ParserKeyword("PSWRO", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("PSWRO"); @@ -2528,10 +2330,7 @@ const std::string PSWRO::keywordName = "PSWRO"; const std::string PSWRO::data::itemName = "data"; -PVCDO::PVCDO( ) : ParserKeyword("PVCDO") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTPVT",0); +PVCDO::PVCDO() : ParserKeyword("PVCDO", KeywordSize("TABDIMS", "NTPVT", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("PVCDO"); @@ -2573,10 +2372,7 @@ const std::string PVCDO::OIL_VISCOSITY::itemName = "OIL_VISCOSITY"; const std::string PVCDO::OIL_VISCOSIBILITY::itemName = "OIL_VISCOSIBILITY"; -PVCO::PVCO( ) : ParserKeyword("PVCO") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTPVT",0); +PVCO::PVCO() : ParserKeyword("PVCO", KeywordSize("TABDIMS", "NTPVT", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("PVCO"); @@ -2600,10 +2396,7 @@ const std::string PVCO::keywordName = "PVCO"; const std::string PVCO::DATA::itemName = "DATA"; -PVDG::PVDG( ) : ParserKeyword("PVDG") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTPVT",0); +PVDG::PVDG() : ParserKeyword("PVDG", KeywordSize("TABDIMS", "NTPVT", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("PVDG"); @@ -2624,10 +2417,7 @@ const std::string PVDG::keywordName = "PVDG"; const std::string PVDG::DATA::itemName = "DATA"; -PVDO::PVDO( ) : ParserKeyword("PVDO") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTPVT",0); +PVDO::PVDO() : ParserKeyword("PVDO", KeywordSize("TABDIMS", "NTPVT", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("PVDO"); @@ -2648,10 +2438,7 @@ const std::string PVDO::keywordName = "PVDO"; const std::string PVDO::DATA::itemName = "DATA"; -PVDS::PVDS( ) : ParserKeyword("PVDS") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTPVT",0); +PVDS::PVDS() : ParserKeyword("PVDS", KeywordSize("TABDIMS", "NTPVT", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("PVDS"); @@ -2672,11 +2459,7 @@ const std::string PVDS::keywordName = "PVDS"; const std::string PVDS::DATA::itemName = "DATA"; -PVTG::PVTG( ) : ParserKeyword("PVTG") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTPVT",0); - setTableCollection( true ); +PVTG::PVTG() : ParserKeyword("PVTG", KeywordSize("TABDIMS", "NTPVT", true, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("PVTG"); @@ -2703,11 +2486,7 @@ const std::string PVTG::GAS_PRESSURE::itemName = "GAS_PRESSURE"; const std::string PVTG::DATA::itemName = "DATA"; -PVTGW::PVTGW( ) : ParserKeyword("PVTGW") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTPVT",0); - setTableCollection( true ); +PVTGW::PVTGW() : ParserKeyword("PVTGW", KeywordSize("TABDIMS", "NTPVT", true, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("PVTGW"); @@ -2734,11 +2513,7 @@ const std::string PVTGW::GAS_PRESSURE::itemName = "GAS_PRESSURE"; const std::string PVTGW::DATA::itemName = "DATA"; -PVTGWO::PVTGWO( ) : ParserKeyword("PVTGWO") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTPVT",0); - setTableCollection( true ); +PVTGWO::PVTGWO() : ParserKeyword("PVTGWO", KeywordSize("TABDIMS", "NTPVT", true, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("PVTGWO"); @@ -2766,9 +2541,7 @@ const std::string PVTGWO::GAS_PRESSURE::itemName = "GAS_PRESSURE"; const std::string PVTGWO::DATA::itemName = "DATA"; -PVTNUM::PVTNUM( ) : ParserKeyword("PVTNUM") -{ - setFixedSize( (size_t) 1); +PVTNUM::PVTNUM() : ParserKeyword("PVTNUM", KeywordSize(1, false)) { addValidSectionName("REGIONS"); clearDeckNames(); addDeckName("PVTNUM"); @@ -2786,11 +2559,7 @@ const std::string PVTNUM::keywordName = "PVTNUM"; const std::string PVTNUM::data::itemName = "data"; -PVTO::PVTO( ) : ParserKeyword("PVTO") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTPVT",0); - setTableCollection( true ); +PVTO::PVTO() : ParserKeyword("PVTO", KeywordSize("TABDIMS", "NTPVT", true, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("PVTO"); @@ -2817,10 +2586,40 @@ const std::string PVTO::RS::itemName = "RS"; const std::string PVTO::DATA::itemName = "DATA"; -PVTW::PVTW( ) : ParserKeyword("PVTW") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTPVT",0); +PVTSOL::PVTSOL() : ParserKeyword("PVTSOL", KeywordSize("TABDIMS", "NTPVT", true, 0)) { + addValidSectionName("PROPS"); + clearDeckNames(); + addDeckName("PVTSOL"); + { + ParserRecord record; + { + ParserItem item("ZCO2", ParserItem::itype::DOUBLE); + item.push_backDimension("1"); + record.addItem(item); + } + { + ParserItem item("DATA", ParserItem::itype::DOUBLE); + item.setSizeType(ParserItem::item_size::ALL); + item.push_backDimension("Pressure"); + item.push_backDimension("1"); + item.push_backDimension("OilDissolutionFactor"); + item.push_backDimension("GasDissolutionFactor"); + item.push_backDimension("OilDissolutionFactor"); + item.push_backDimension("1"); + item.push_backDimension("1"); + item.push_backDimension("Viscosity"); + item.push_backDimension("Viscosity"); + record.addItem(item); + } + addRecord( record ); + } +} +const std::string PVTSOL::keywordName = "PVTSOL"; +const std::string PVTSOL::ZCO2::itemName = "ZCO2"; +const std::string PVTSOL::DATA::itemName = "DATA"; + + +PVTW::PVTW() : ParserKeyword("PVTW", KeywordSize("TABDIMS", "NTPVT", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("PVTW"); @@ -2863,17 +2662,14 @@ const std::string PVTW::P_REF::itemName = "P_REF"; const std::string PVTW::WATER_VOL_FACTOR::itemName = "WATER_VOL_FACTOR"; const double PVTW::WATER_VOL_FACTOR::defaultValue = 1.000000; const std::string PVTW::WATER_COMPRESSIBILITY::itemName = "WATER_COMPRESSIBILITY"; -const double PVTW::WATER_COMPRESSIBILITY::defaultValue = 0.000040; +const double PVTW::WATER_COMPRESSIBILITY::defaultValue = 4e-05; const std::string PVTW::WATER_VISCOSITY::itemName = "WATER_VISCOSITY"; const double PVTW::WATER_VISCOSITY::defaultValue = 0.500000; const std::string PVTW::WATER_VISCOSIBILITY::itemName = "WATER_VISCOSIBILITY"; -const double PVTW::WATER_VISCOSIBILITY::defaultValue = 0.000000; +const double PVTW::WATER_VISCOSIBILITY::defaultValue = 0; -PVTWSALT::PVTWSALT( ) : ParserKeyword("PVTWSALT") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTPVT",0); +PVTWSALT::PVTWSALT() : ParserKeyword("PVTWSALT", KeywordSize("TABDIMS", "NTPVT", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("PVTWSALT"); @@ -2911,13 +2707,11 @@ PVTWSALT::PVTWSALT( ) : ParserKeyword("PVTWSALT") const std::string PVTWSALT::keywordName = "PVTWSALT"; const std::string PVTWSALT::P_REF::itemName = "P_REF"; const std::string PVTWSALT::SALT_CONCENTRATION_REF::itemName = "SALT_CONCENTRATION_REF"; -const double PVTWSALT::SALT_CONCENTRATION_REF::defaultValue = 0.000000; +const double PVTWSALT::SALT_CONCENTRATION_REF::defaultValue = 0; const std::string PVTWSALT::DATA::itemName = "DATA"; -PVT_M::PVT_M( ) : ParserKeyword("PVT_M") -{ - setFixedSize( (size_t) 0); +PVT_M::PVT_M() : ParserKeyword("PVT_M", KeywordSize(0, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("PVT-M"); @@ -2925,10 +2719,7 @@ PVT_M::PVT_M( ) : ParserKeyword("PVT_M") const std::string PVT_M::keywordName = "PVT_M"; -PVZG::PVZG( ) : ParserKeyword("PVZG") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTPVT",0); +PVZG::PVZG() : ParserKeyword("PVZG", KeywordSize("TABDIMS", "NTPVT", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("PVZG"); @@ -2960,9 +2751,7 @@ const std::string PVZG::REF_TEMP::itemName = "REF_TEMP"; const std::string PVZG::table::itemName = "table"; -PYACTION::PYACTION( ) : ParserKeyword("PYACTION") -{ - setFixedSize( (size_t) 2); +PYACTION::PYACTION() : ParserKeyword("PYACTION", KeywordSize(2, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("PYACTION"); @@ -2995,17 +2784,15 @@ const std::string PYACTION::RUN_COUNT::defaultValue = "SINGLE"; const std::string PYACTION::FILENAME::itemName = "FILENAME"; -PYINPUT::PYINPUT( ) : ParserKeyword("PYINPUT") -{ - setSizeType(FIXED_CODE); - addValidSectionName("EDIT"); +PYINPUT::PYINPUT() : ParserKeyword("PYINPUT", KeywordSize(1, true)) { + addValidSectionName("RUNSPEC"); addValidSectionName("GRID"); + addValidSectionName("EDIT"); addValidSectionName("PROPS"); addValidSectionName("REGIONS"); - addValidSectionName("RUNSPEC"); - addValidSectionName("SCHEDULE"); addValidSectionName("SOLUTION"); addValidSectionName("SUMMARY"); + addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("PYINPUT"); setCodeEnd("PYEND"); diff --git a/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/Q.cpp b/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/Q.cpp index 4bf72e8c06..4e7ea681dd 100644 --- a/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/Q.cpp +++ b/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/Q.cpp @@ -1,18 +1,17 @@ -#include -#include -#include -#include + +#include +#include +#include +#include -#include +#include namespace Opm { namespace ParserKeywords { -QDRILL::QDRILL( ) : ParserKeyword("QDRILL") -{ - setFixedSize( (size_t) 1); +QDRILL::QDRILL() : ParserKeyword("QDRILL", KeywordSize(1, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("QDRILL"); @@ -30,10 +29,7 @@ const std::string QDRILL::keywordName = "QDRILL"; const std::string QDRILL::WELL_NAME::itemName = "WELL_NAME"; -QHRATING::QHRATING( ) : ParserKeyword("QHRATING") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("RIVRDIMS","NRATTA",0); +QHRATING::QHRATING() : ParserKeyword("QHRATING", KeywordSize("RIVRDIMS", "NRATTA", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("QHRATING"); @@ -53,9 +49,7 @@ const std::string QHRATING::keywordName = "QHRATING"; const std::string QHRATING::DATA::itemName = "DATA"; -QMOBIL::QMOBIL( ) : ParserKeyword("QMOBIL") -{ - setFixedSize( (size_t) 1); +QMOBIL::QMOBIL() : ParserKeyword("QMOBIL", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("QMOBIL"); diff --git a/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/R.cpp b/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/R.cpp index f5d5bea5a0..21d26adfe6 100644 --- a/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/R.cpp +++ b/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/R.cpp @@ -1,20 +1,107 @@ -#include -#include -#include -#include + +#include +#include +#include +#include -#include +#include namespace Opm { namespace ParserKeywords { -RADFIN4::RADFIN4( ) : ParserKeyword("RADFIN4") -{ - setFixedSize( (size_t) 1); +RADFIN::RADFIN() : ParserKeyword("RADFIN", KeywordSize(1, false)) { addValidSectionName("GRID"); + clearDeckNames(); + addDeckName("RADFIN"); + { + ParserRecord record; + { + ParserItem item("NAME", ParserItem::itype::STRING); + record.addItem(item); + } + { + ParserItem item("I", ParserItem::itype::INT); + record.addItem(item); + } + { + ParserItem item("J", ParserItem::itype::INT); + record.addItem(item); + } + { + ParserItem item("K1", ParserItem::itype::INT); + record.addItem(item); + } + { + ParserItem item("K2", ParserItem::itype::INT); + record.addItem(item); + } + { + ParserItem item("NR", ParserItem::itype::INT); + record.addItem(item); + } + { + ParserItem item("NTHETA", ParserItem::itype::INT); + record.addItem(item); + } + { + ParserItem item("NZ", ParserItem::itype::INT); + record.addItem(item); + } + { + ParserItem item("NWMAX", ParserItem::itype::INT); + item.setDefault( 1 ); + record.addItem(item); + } + { + ParserItem item("INNER_RADIUS", ParserItem::itype::DOUBLE); + item.setDefault( double(0.152400) ); + item.push_backDimension("Length"); + record.addItem(item); + } + { + ParserItem item("OUTER_RADIUS", ParserItem::itype::DOUBLE); + item.push_backDimension("Length"); + record.addItem(item); + } + { + ParserItem item("MINIMUM_RADIUS_REFINEMENT", ParserItem::itype::DOUBLE); + item.setDefault( double(1.524000) ); + item.push_backDimension("Length"); + record.addItem(item); + } + { + ParserItem item("PARENT_LGR", ParserItem::itype::STRING); + item.setDefault( std::string("GLOBAL") ); + record.addItem(item); + } + addRecord( record ); + } +} +const std::string RADFIN::keywordName = "RADFIN"; +const std::string RADFIN::NAME::itemName = "NAME"; +const std::string RADFIN::I::itemName = "I"; +const std::string RADFIN::J::itemName = "J"; +const std::string RADFIN::K1::itemName = "K1"; +const std::string RADFIN::K2::itemName = "K2"; +const std::string RADFIN::NR::itemName = "NR"; +const std::string RADFIN::NTHETA::itemName = "NTHETA"; +const std::string RADFIN::NZ::itemName = "NZ"; +const std::string RADFIN::NWMAX::itemName = "NWMAX"; +const int RADFIN::NWMAX::defaultValue = 1; +const std::string RADFIN::INNER_RADIUS::itemName = "INNER_RADIUS"; +const double RADFIN::INNER_RADIUS::defaultValue = 0.152400; +const std::string RADFIN::OUTER_RADIUS::itemName = "OUTER_RADIUS"; +const std::string RADFIN::MINIMUM_RADIUS_REFINEMENT::itemName = "MINIMUM_RADIUS_REFINEMENT"; +const double RADFIN::MINIMUM_RADIUS_REFINEMENT::defaultValue = 1.524000; +const std::string RADFIN::PARENT_LGR::itemName = "PARENT_LGR"; +const std::string RADFIN::PARENT_LGR::defaultValue = "GLOBAL"; + + +RADFIN4::RADFIN4() : ParserKeyword("RADFIN4", KeywordSize(1, false)) { addValidSectionName("SPECIAL"); + addValidSectionName("GRID"); clearDeckNames(); addDeckName("RADFIN4"); { @@ -82,9 +169,7 @@ const std::string RADFIN4::NWMAX::itemName = "NWMAX"; const int RADFIN4::NWMAX::defaultValue = 1; -RADIAL::RADIAL( ) : ParserKeyword("RADIAL") -{ - setFixedSize( (size_t) 0); +RADIAL::RADIAL() : ParserKeyword("RADIAL", KeywordSize(0, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("RADIAL"); @@ -92,11 +177,9 @@ RADIAL::RADIAL( ) : ParserKeyword("RADIAL") const std::string RADIAL::keywordName = "RADIAL"; -RAINFALL::RAINFALL( ) : ParserKeyword("RAINFALL") -{ - setFixedSize( (size_t) 1); - addValidSectionName("SCHEDULE"); +RAINFALL::RAINFALL() : ParserKeyword("RAINFALL", KeywordSize(1, false)) { addValidSectionName("SOLUTION"); + addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("RAINFALL"); { @@ -184,10 +267,7 @@ const std::string RAINFALL::NOV_FLUX::itemName = "NOV_FLUX"; const std::string RAINFALL::DES_FLUX::itemName = "DES_FLUX"; -RBEDCONT::RBEDCONT( ) : ParserKeyword("RBEDCONT") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("RIVRDIMS","MXTBGR",0); +RBEDCONT::RBEDCONT() : ParserKeyword("RBEDCONT", KeywordSize("RIVRDIMS", "MXTBGR", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("RBEDCONT"); @@ -207,9 +287,7 @@ const std::string RBEDCONT::keywordName = "RBEDCONT"; const std::string RBEDCONT::DATA::itemName = "DATA"; -RCMASTS::RCMASTS( ) : ParserKeyword("RCMASTS") -{ - setFixedSize( (size_t) 1); +RCMASTS::RCMASTS() : ParserKeyword("RCMASTS", KeywordSize(1, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("RCMASTS"); @@ -227,9 +305,7 @@ const std::string RCMASTS::keywordName = "RCMASTS"; const std::string RCMASTS::MIN_TSTEP::itemName = "MIN_TSTEP"; -REACHES::REACHES( ) : ParserKeyword("REACHES") -{ - setSizeType(SLASH_TERMINATED); +REACHES::REACHES() : ParserKeyword("REACHES", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("REACHES"); @@ -350,16 +426,14 @@ const std::string REACHES::ROUGHNESS::itemName = "ROUGHNESS"; const std::string REACHES::XLENGTH::itemName = "XLENGTH"; const std::string REACHES::YLENGTH::itemName = "YLENGTH"; const std::string REACHES::REACH_LENGTH::itemName = "REACH_LENGTH"; -const double REACHES::REACH_LENGTH::defaultValue = 0.000000; +const double REACHES::REACH_LENGTH::defaultValue = 0; const std::string REACHES::NUM_REACHES::itemName = "NUM_REACHES"; const int REACHES::NUM_REACHES::defaultValue = 1; const std::string REACHES::DEPTH_SOMETHING::itemName = "DEPTH_SOMETHING"; const int REACHES::DEPTH_SOMETHING::defaultValue = 1; -READDATA::READDATA( ) : ParserKeyword("READDATA") -{ - setFixedSize( (size_t) 1); +READDATA::READDATA() : ParserKeyword("READDATA", KeywordSize(1, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("READDATA"); @@ -378,15 +452,13 @@ const std::string READDATA::INPUT_METHOD::itemName = "INPUT_METHOD"; const std::string READDATA::INPUT_METHOD::defaultValue = "FILE"; -REFINE::REFINE( ) : ParserKeyword("REFINE") -{ - setFixedSize( (size_t) 1); - addValidSectionName("EDIT"); +REFINE::REFINE() : ParserKeyword("REFINE", KeywordSize(1, false)) { addValidSectionName("GRID"); + addValidSectionName("EDIT"); addValidSectionName("PROPS"); addValidSectionName("REGIONS"); - addValidSectionName("SCHEDULE"); addValidSectionName("SOLUTION"); + addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("REFINE"); { @@ -402,9 +474,7 @@ const std::string REFINE::keywordName = "REFINE"; const std::string REFINE::LGR::itemName = "LGR"; -REGDIMS::REGDIMS( ) : ParserKeyword("REGDIMS") -{ - setFixedSize( (size_t) 1); +REGDIMS::REGDIMS() : ParserKeyword("REGDIMS", KeywordSize(1, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("REGDIMS"); @@ -486,14 +556,10 @@ const std::string REGDIMS::NPLMIX::itemName = "NPLMIX"; const int REGDIMS::NPLMIX::defaultValue = 1; -REGION2REGION_PROBE::REGION2REGION_PROBE( ) : ParserKeyword("REGION2REGION_PROBE") -{ - setSizeType(SLASH_TERMINATED); +REGION2REGION_PROBE::REGION2REGION_PROBE() : ParserKeyword("REGION2REGION_PROBE", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SUMMARY"); clearDeckNames(); - addDeckName("RGFT"); - addDeckName("ROFT"); - addDeckName("RWFT"); + setMatchRegex("(R[OG]FT[GL]?|RWFT)(_?[A-Z0-9_]{3})?"); { ParserRecord record; { @@ -512,115 +578,134 @@ const std::string REGION2REGION_PROBE::REGION1::itemName = "REGION1"; const std::string REGION2REGION_PROBE::REGION2::itemName = "REGION2"; -REGIONS::REGIONS( ) : ParserKeyword("REGIONS") -{ - setFixedSize( (size_t) 0); +REGION2REGION_PROBE_E300::REGION2REGION_PROBE_E300() : ParserKeyword("REGION2REGION_PROBE_E300", KeywordSize(SLASH_TERMINATED)) { + addValidSectionName("SUMMARY"); + clearDeckNames(); + setMatchRegex("R[OGWEK]F(R[-+]?|T[-+])([A-Z0-9_]{3})?"); + { + ParserRecord record; + { + ParserItem item("REGION1", ParserItem::itype::INT); + record.addItem(item); + } + { + ParserItem item("REGION2", ParserItem::itype::INT); + record.addItem(item); + } + addRecord( record ); + } +} +const std::string REGION2REGION_PROBE_E300::keywordName = "REGION2REGION_PROBE_E300"; +const std::string REGION2REGION_PROBE_E300::REGION1::itemName = "REGION1"; +const std::string REGION2REGION_PROBE_E300::REGION2::itemName = "REGION2"; + + +REGIONS::REGIONS() : ParserKeyword("REGIONS", KeywordSize(0, false)) { clearDeckNames(); addDeckName("REGIONS"); } const std::string REGIONS::keywordName = "REGIONS"; -REGION_PROBE::REGION_PROBE( ) : ParserKeyword("REGION_PROBE") -{ - setFixedSize( (size_t) 1); +REGION_PROBE::REGION_PROBE() : ParserKeyword("REGION_PROBE", KeywordSize(1, false)) { addValidSectionName("SUMMARY"); clearDeckNames(); - addDeckName("RAPI"); - addDeckName("RCAD"); - addDeckName("RCFT"); - addDeckName("RCGC"); - addDeckName("RCIP"); - addDeckName("RCSC"); - addDeckName("RGDEN"); - addDeckName("RGFTG"); - addDeckName("RGFTL"); - addDeckName("RGIP"); - addDeckName("RGIPG"); - addDeckName("RGIPL"); - addDeckName("RGIR"); - addDeckName("RGIT"); - addDeckName("RGP"); - addDeckName("RGPR"); - addDeckName("RGPRF"); - addDeckName("RGPRS"); - addDeckName("RGPT"); - addDeckName("RGPTF"); - addDeckName("RGPTS"); - addDeckName("RGPV"); - addDeckName("RGSAT"); - addDeckName("RGVIS"); - addDeckName("RHPV"); - addDeckName("RNFT"); - addDeckName("RNIP"); - addDeckName("RODEN"); - addDeckName("ROE"); + addDeckName("RRPV_[0-9A-Z][0-9A-Z][0-9A-Z]"); addDeckName("ROEIG"); - addDeckName("ROEIW"); + addDeckName("ROEW_[0-9A-Z][0-9A-Z][0-9A-Z]"); + addDeckName("RWIR"); + addDeckName("RGPV"); + addDeckName("RHPV_[0-9A-Z][0-9A-Z][0-9A-Z]"); + addDeckName("RORFR"); + addDeckName("ROP"); addDeckName("ROEW"); - addDeckName("ROEWG"); - addDeckName("ROEWW"); + addDeckName("RGP"); + addDeckName("ROSAT"); addDeckName("ROIP"); - addDeckName("ROIPG"); addDeckName("ROIPL"); + addDeckName("RWVIS"); + addDeckName("ROIPG"); + addDeckName("RPPO"); + addDeckName("ROVIS"); + addDeckName("RODEN"); + addDeckName("RORFY"); + addDeckName("ROPR"); + addDeckName("RRTM"); + addDeckName("RGSAT"); + addDeckName("ROPT"); + addDeckName("RWDEN"); addDeckName("ROIR"); addDeckName("ROIT"); - addDeckName("ROP"); - addDeckName("ROPR"); - addDeckName("ROPT"); - addDeckName("ROPV"); - addDeckName("RORFE"); - addDeckName("RORFF"); - addDeckName("RORFG"); - addDeckName("RORFR"); - addDeckName("RORFS"); - addDeckName("RORFW"); - addDeckName("RORFX"); - addDeckName("RORFY"); - addDeckName("RORME"); - addDeckName("RORMF"); - addDeckName("RORMG"); - addDeckName("RORMR"); - addDeckName("RORMS"); - addDeckName("RORMW"); - addDeckName("RORMX"); - addDeckName("RORMY"); - addDeckName("ROSAT"); - addDeckName("ROVIS"); - addDeckName("RPPC"); - addDeckName("RPPG"); - addDeckName("RPPO"); - addDeckName("RPPW"); - addDeckName("RPR"); - addDeckName("RPRGZ"); - addDeckName("RPRH"); - addDeckName("RPRP"); - addDeckName("RRPV"); - addDeckName("RRS"); - addDeckName("RRTM"); - addDeckName("RRV"); - addDeckName("RSFT"); addDeckName("RSIP"); - addDeckName("RTADSFOA"); - addDeckName("RTADSUR"); - addDeckName("RTDCYFOA"); - addDeckName("RTFTTFOA"); - addDeckName("RTFTTSUR"); - addDeckName("RTIPT"); - addDeckName("RTIPTFOA"); - addDeckName("RTIPTHEA"); - addDeckName("RTIPTSUR"); - addDeckName("RTMOBFOA"); - addDeckName("RWDEN"); + addDeckName("RORME"); + addDeckName("RPPC"); + addDeckName("RWSAT"); addDeckName("RWIP"); - addDeckName("RWIR"); - addDeckName("RWIT"); + addDeckName("RRS"); addDeckName("RWP"); + addDeckName("RPRGZ"); + addDeckName("RPPW"); addDeckName("RWPR"); addDeckName("RWPT"); + addDeckName("RORMR"); + addDeckName("RWIT"); + addDeckName("RGIP"); + addDeckName("ROE"); + addDeckName("RGIPL"); + addDeckName("RGPR"); + addDeckName("RGIPG"); + addDeckName("RPPG"); + addDeckName("RGVIS"); + addDeckName("RGDEN"); + addDeckName("RGPT"); + addDeckName("RGPRF"); + addDeckName("RRV"); + addDeckName("RGPRS"); addDeckName("RWPV"); - addDeckName("RWSAT"); - addDeckName("RWVIS"); + addDeckName("RGPTF"); + addDeckName("RGPTS"); + addDeckName("RPRH"); + addDeckName("RGIR"); + addDeckName("RGIT"); + addDeckName("RPR"); + addDeckName("RPRP"); + addDeckName("RRPV"); + addDeckName("RORMW"); + addDeckName("ROPV"); + addDeckName("RHPV"); + addDeckName("ROEIW"); + addDeckName("ROEWW"); + addDeckName("ROEWG"); + addDeckName("RORMG"); + addDeckName("RCGC"); + addDeckName("RORMS"); + addDeckName("RORMF"); + addDeckName("RORMX"); + addDeckName("RORMY"); + addDeckName("RORFW"); + addDeckName("RORFG"); + addDeckName("RORFE"); + addDeckName("RORFS"); + addDeckName("RTMOBFOA"); + addDeckName("RORFF"); + addDeckName("RTIPTFOA"); + addDeckName("RORFX"); + addDeckName("RTIPT"); + addDeckName("RAPI"); + addDeckName("RSFT"); + addDeckName("RTIPTHEA"); + addDeckName("RCSC"); + addDeckName("RTFTTFOA"); + addDeckName("RTADSFOA"); + addDeckName("RTDCYFOA"); + addDeckName("RCIP"); + addDeckName("RCFT"); + addDeckName("RCAD"); + addDeckName("RNIP"); + addDeckName("RNFT"); + addDeckName("RTIPTSUR"); + addDeckName("RTFTTSUR"); + addDeckName("RTADSUR"); setMatchRegex("R[OGW]?[OIP][EPRT]_.+|RU.+|RTIPF.+|RTIPS.+|RTFTF.+|RTFTS.+|RTFTT.+|RTIPT.+|RTIPF.+|RTIPS.+|RTIP[1-9][0-9]*.+|RTFTT.+|RTFTF.+|RTFTS.+|RTFT[1-9][0-9]*.+|RTADS.+|RTDCY.+"); { ParserRecord record; @@ -636,9 +721,7 @@ const std::string REGION_PROBE::keywordName = "REGION_PROBE"; const std::string REGION_PROBE::data::itemName = "data"; -RESIDNUM::RESIDNUM( ) : ParserKeyword("RESIDNUM") -{ - setFixedSize( (size_t) 1); +RESIDNUM::RESIDNUM() : ParserKeyword("RESIDNUM", KeywordSize(1, false)) { addValidSectionName("REGIONS"); clearDeckNames(); addDeckName("RESIDNUM"); @@ -656,9 +739,7 @@ const std::string RESIDNUM::keywordName = "RESIDNUM"; const std::string RESIDNUM::data::itemName = "data"; -RESTART::RESTART( ) : ParserKeyword("RESTART") -{ - setFixedSize( (size_t) 1); +RESTART::RESTART() : ParserKeyword("RESTART", KeywordSize(1, false)) { addValidSectionName("SOLUTION"); clearDeckNames(); addDeckName("RESTART"); @@ -694,9 +775,7 @@ const std::string RESTART::SAVEFILE_FORMAT::itemName = "SAVEFILE_FORMAT"; const std::string RESTART::SAVEFILE_FORMAT::defaultValue = "UNFORMATTED"; -RESVNUM::RESVNUM( ) : ParserKeyword("RESVNUM") -{ - setFixedSize( (size_t) 1); +RESVNUM::RESVNUM() : ParserKeyword("RESVNUM", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("RESVNUM"); @@ -713,9 +792,7 @@ const std::string RESVNUM::keywordName = "RESVNUM"; const std::string RESVNUM::NEXT_RES::itemName = "NEXT_RES"; -RHO::RHO( ) : ParserKeyword("RHO") -{ - setFixedSize( (size_t) 1); +RHO::RHO() : ParserKeyword("RHO", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("RHO"); @@ -733,12 +810,10 @@ RHO::RHO( ) : ParserKeyword("RHO") } const std::string RHO::keywordName = "RHO"; const std::string RHO::data::itemName = "data"; -const double RHO::data::defaultValue = 0.000000; +const double RHO::data::defaultValue = 0; -RIVDEBUG::RIVDEBUG( ) : ParserKeyword("RIVDEBUG") -{ - setSizeType(SLASH_TERMINATED); +RIVDEBUG::RIVDEBUG() : ParserKeyword("RIVDEBUG", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("RIVDEBUG"); @@ -760,11 +835,9 @@ const std::string RIVDEBUG::RIVER::itemName = "RIVER"; const std::string RIVDEBUG::DEBUG_CONTROL::itemName = "DEBUG_CONTROL"; -RIVERSYS::RIVERSYS( ) : ParserKeyword("RIVERSYS") -{ - setSizeType(SLASH_TERMINATED); - addValidSectionName("SCHEDULE"); +RIVERSYS::RIVERSYS() : ParserKeyword("RIVERSYS", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SOLUTION"); + addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("RIVERSYS"); { @@ -805,9 +878,7 @@ const std::string RIVERSYS::BRANCH_NAME::itemName = "BRANCH_NAME"; const std::string RIVERSYS::DOWNSTREAM_BC::itemName = "DOWNSTREAM_BC"; -RIVRDIMS::RIVRDIMS( ) : ParserKeyword("RIVRDIMS") -{ - setFixedSize( (size_t) 1); +RIVRDIMS::RIVRDIMS() : ParserKeyword("RIVRDIMS", KeywordSize(1, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("RIVRDIMS"); @@ -910,9 +981,7 @@ const std::string RIVRDIMS::MXRATE::itemName = "MXRATE"; const int RIVRDIMS::MXRATE::defaultValue = 2; -RIVRPROP::RIVRPROP( ) : ParserKeyword("RIVRPROP") -{ - setSizeType(SLASH_TERMINATED); +RIVRPROP::RIVRPROP() : ParserKeyword("RIVRPROP", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("RIVRPROP"); @@ -944,10 +1013,7 @@ const std::string RIVRPROP::REACH2::itemName = "REACH2"; const std::string RIVRPROP::ROUGHNESS::itemName = "ROUGHNESS"; -RIVRXSEC::RIVRXSEC( ) : ParserKeyword("RIVRXSEC") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("RIVRDIMS","MXDPTB",0); +RIVRXSEC::RIVRXSEC() : ParserKeyword("RIVRXSEC", KeywordSize("RIVRDIMS", "MXDPTB", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("RIVRXSEC"); @@ -977,9 +1043,7 @@ const std::string RIVRXSEC::WET_PERIMTER::itemName = "WET_PERIMTER"; const std::string RIVRXSEC::AREA::itemName = "AREA"; -RIVSALT::RIVSALT( ) : ParserKeyword("RIVSALT") -{ - setSizeType(SLASH_TERMINATED); +RIVSALT::RIVSALT() : ParserKeyword("RIVSALT", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("RIVSALT"); @@ -1012,9 +1076,7 @@ const std::string RIVSALT::BRANCH::itemName = "BRANCH"; const std::string RIVSALT::REACH::itemName = "REACH"; -RIVTRACE::RIVTRACE( ) : ParserKeyword("RIVTRACE") -{ - setSizeType(SLASH_TERMINATED); +RIVTRACE::RIVTRACE() : ParserKeyword("RIVTRACE", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("RIVTRACE"); @@ -1057,9 +1119,7 @@ const std::string RIVTRACE::BRANCH::itemName = "BRANCH"; const std::string RIVTRACE::REACH::itemName = "REACH"; -RKTRMDIR::RKTRMDIR( ) : ParserKeyword("RKTRMDIR") -{ - setFixedSize( (size_t) 0); +RKTRMDIR::RKTRMDIR() : ParserKeyword("RKTRMDIR", KeywordSize(0, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("RKTRMDIR"); @@ -1067,9 +1127,7 @@ RKTRMDIR::RKTRMDIR( ) : ParserKeyword("RKTRMDIR") const std::string RKTRMDIR::keywordName = "RKTRMDIR"; -ROCK::ROCK( ) : ParserKeyword("ROCK") -{ - setSizeType(UNKNOWN); +ROCK::ROCK() : ParserKeyword("ROCK", KeywordSize(UNKNOWN)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("ROCK"); @@ -1094,14 +1152,10 @@ const std::string ROCK::keywordName = "ROCK"; const std::string ROCK::PREF::itemName = "PREF"; const double ROCK::PREF::defaultValue = 1.013200; const std::string ROCK::COMPRESSIBILITY::itemName = "COMPRESSIBILITY"; -const double ROCK::COMPRESSIBILITY::defaultValue = 0.000000; +const double ROCK::COMPRESSIBILITY::defaultValue = 0; -ROCK2D::ROCK2D( ) : ParserKeyword("ROCK2D") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("ROCKCOMP","NTROCC",0); - setTableCollection( true ); +ROCK2D::ROCK2D() : ParserKeyword("ROCK2D", KeywordSize("ROCKCOMP", "NTROCC", true, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("ROCK2D"); @@ -1126,11 +1180,7 @@ const std::string ROCK2D::PRESSURE::itemName = "PRESSURE"; const std::string ROCK2D::PVMULT::itemName = "PVMULT"; -ROCK2DTR::ROCK2DTR( ) : ParserKeyword("ROCK2DTR") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("ROCKCOMP","NTROCC",0); - setTableCollection( true ); +ROCK2DTR::ROCK2DTR() : ParserKeyword("ROCK2DTR", KeywordSize("ROCKCOMP", "NTROCC", true, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("ROCK2DTR"); @@ -1155,9 +1205,7 @@ const std::string ROCK2DTR::PRESSURE::itemName = "PRESSURE"; const std::string ROCK2DTR::TRANSMULT::itemName = "TRANSMULT"; -ROCKCOMP::ROCKCOMP( ) : ParserKeyword("ROCKCOMP") -{ - setFixedSize( (size_t) 1); +ROCKCOMP::ROCKCOMP() : ParserKeyword("ROCKCOMP", KeywordSize(1, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("ROCKCOMP"); @@ -1178,6 +1226,15 @@ ROCKCOMP::ROCKCOMP( ) : ParserKeyword("ROCKCOMP") item.setDefault( std::string("NO") ); record.addItem(item); } + { + ParserItem item("PORTXROP", ParserItem::itype::STRING); + record.addItem(item); + } + { + ParserItem item("CARKZEXP", ParserItem::itype::DOUBLE); + item.setDefault( double(0) ); + record.addItem(item); + } addRecord( record ); } } @@ -1188,11 +1245,12 @@ const std::string ROCKCOMP::NTROCC::itemName = "NTROCC"; const int ROCKCOMP::NTROCC::defaultValue = 1; const std::string ROCKCOMP::WATER_COMPACTION::itemName = "WATER_COMPACTION"; const std::string ROCKCOMP::WATER_COMPACTION::defaultValue = "NO"; +const std::string ROCKCOMP::PORTXROP::itemName = "PORTXROP"; +const std::string ROCKCOMP::CARKZEXP::itemName = "CARKZEXP"; +const double ROCKCOMP::CARKZEXP::defaultValue = 0; -ROCKFRAC::ROCKFRAC( ) : ParserKeyword("ROCKFRAC") -{ - setFixedSize( (size_t) 1); +ROCKFRAC::ROCKFRAC() : ParserKeyword("ROCKFRAC", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("ROCKFRAC"); @@ -1210,9 +1268,7 @@ const std::string ROCKFRAC::keywordName = "ROCKFRAC"; const std::string ROCKFRAC::data::itemName = "data"; -ROCKNUM::ROCKNUM( ) : ParserKeyword("ROCKNUM") -{ - setFixedSize( (size_t) 1); +ROCKNUM::ROCKNUM() : ParserKeyword("ROCKNUM", KeywordSize(1, false)) { addValidSectionName("REGIONS"); clearDeckNames(); addDeckName("ROCKNUM"); @@ -1230,9 +1286,7 @@ const std::string ROCKNUM::keywordName = "ROCKNUM"; const std::string ROCKNUM::data::itemName = "data"; -ROCKOPTS::ROCKOPTS( ) : ParserKeyword("ROCKOPTS") -{ - setFixedSize( (size_t) 1); +ROCKOPTS::ROCKOPTS() : ParserKeyword("ROCKOPTS", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("ROCKOPTS"); @@ -1272,9 +1326,7 @@ const std::string ROCKOPTS::HYST_TYPE::itemName = "HYST_TYPE"; const std::string ROCKOPTS::HYST_TYPE::defaultValue = "DEFLATION"; -ROCKPAMA::ROCKPAMA( ) : ParserKeyword("ROCKPAMA") -{ - setSizeType(SLASH_TERMINATED); +ROCKPAMA::ROCKPAMA() : ParserKeyword("ROCKPAMA", KeywordSize("ROCKCOMP", "NTROCC", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("ROCKPAMA"); @@ -1335,11 +1387,11 @@ const std::string ROCKPAMA::keywordName = "ROCKPAMA"; const std::string ROCKPAMA::K::itemName = "K"; const std::string ROCKPAMA::M::itemName = "M"; const std::string ROCKPAMA::G::itemName = "G"; -const double ROCKPAMA::G::defaultValue = 0.000000; +const double ROCKPAMA::G::defaultValue = 0; const std::string ROCKPAMA::B::itemName = "B"; -const double ROCKPAMA::B::defaultValue = 0.000000; +const double ROCKPAMA::B::defaultValue = 0; const std::string ROCKPAMA::E1::itemName = "E1"; -const double ROCKPAMA::E1::defaultValue = 0.000000; +const double ROCKPAMA::E1::defaultValue = 0; const std::string ROCKPAMA::f::itemName = "f"; const double ROCKPAMA::f::defaultValue = 0.500000; const std::string ROCKPAMA::n::itemName = "n"; @@ -1347,15 +1399,12 @@ const double ROCKPAMA::n::defaultValue = 3.000000; const std::string ROCKPAMA::g::itemName = "g"; const double ROCKPAMA::g::defaultValue = 1.000000; const std::string ROCKPAMA::Bs::itemName = "Bs"; -const double ROCKPAMA::Bs::defaultValue = 0.000000; +const double ROCKPAMA::Bs::defaultValue = 0; const std::string ROCKPAMA::Es::itemName = "Es"; -const double ROCKPAMA::Es::defaultValue = 0.000000; +const double ROCKPAMA::Es::defaultValue = 0; -ROCKTAB::ROCKTAB( ) : ParserKeyword("ROCKTAB") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("ROCKCOMP","NTROCC",0); +ROCKTAB::ROCKTAB() : ParserKeyword("ROCKTAB", KeywordSize("ROCKCOMP", "NTROCC", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("ROCKTAB"); @@ -1367,8 +1416,6 @@ ROCKTAB::ROCKTAB( ) : ParserKeyword("ROCKTAB") item.push_backDimension("Pressure"); item.push_backDimension("1"); item.push_backDimension("1"); - item.push_backDimension("1"); - item.push_backDimension("1"); record.addItem(item); } addRecord( record ); @@ -1378,10 +1425,7 @@ const std::string ROCKTAB::keywordName = "ROCKTAB"; const std::string ROCKTAB::DATA::itemName = "DATA"; -ROCKTABH::ROCKTABH( ) : ParserKeyword("ROCKTABH") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("ROCKCOMP","NTROCC",0); +ROCKTABH::ROCKTABH() : ParserKeyword("ROCKTABH", KeywordSize("ROCKCOMP", "NTROCC", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("ROCKTABH"); @@ -1399,10 +1443,7 @@ const std::string ROCKTABH::keywordName = "ROCKTABH"; const std::string ROCKTABH::DATA::itemName = "DATA"; -ROCKTABW::ROCKTABW( ) : ParserKeyword("ROCKTABW") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("ROCKCOMP","NTROCC",0); +ROCKTABW::ROCKTABW() : ParserKeyword("ROCKTABW", KeywordSize("ROCKCOMP", "NTROCC", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("ROCKTABW"); @@ -1420,10 +1461,7 @@ const std::string ROCKTABW::keywordName = "ROCKTABW"; const std::string ROCKTABW::DATA::itemName = "DATA"; -ROCKTHSG::ROCKTHSG( ) : ParserKeyword("ROCKTHSG") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("ROCKCOMP","NTROCC",0); +ROCKTHSG::ROCKTHSG() : ParserKeyword("ROCKTHSG", KeywordSize("ROCKCOMP", "NTROCC", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("ROCKTHSG"); @@ -1443,10 +1481,7 @@ const std::string ROCKTHSG::keywordName = "ROCKTHSG"; const std::string ROCKTHSG::DATA::itemName = "DATA"; -ROCKTSIG::ROCKTSIG( ) : ParserKeyword("ROCKTSIG") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("ROCKCOMP","NTROCC",0); +ROCKTSIG::ROCKTSIG() : ParserKeyword("ROCKTSIG", KeywordSize("ROCKCOMP", "NTROCC", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("ROCKTSIG"); @@ -1466,9 +1501,7 @@ const std::string ROCKTSIG::keywordName = "ROCKTSIG"; const std::string ROCKTSIG::DATA::itemName = "DATA"; -ROCKV::ROCKV( ) : ParserKeyword("ROCKV") -{ - setFixedSize( (size_t) 1); +ROCKV::ROCKV() : ParserKeyword("ROCKV", KeywordSize(1, false)) { addValidSectionName("EDIT"); clearDeckNames(); addDeckName("ROCKV"); @@ -1487,10 +1520,7 @@ const std::string ROCKV::keywordName = "ROCKV"; const std::string ROCKV::data::itemName = "data"; -ROCKWNOD::ROCKWNOD( ) : ParserKeyword("ROCKWNOD") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("ROCKCOMP","NTROCC",0); +ROCKWNOD::ROCKWNOD() : ParserKeyword("ROCKWNOD", KeywordSize("ROCKCOMP", "NTROCC", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("ROCKWNOD"); @@ -1509,9 +1539,7 @@ const std::string ROCKWNOD::keywordName = "ROCKWNOD"; const std::string ROCKWNOD::DATA::itemName = "DATA"; -RPTCPL::RPTCPL( ) : ParserKeyword("RPTCPL") -{ - setFixedSize( (size_t) 1); +RPTCPL::RPTCPL() : ParserKeyword("RPTCPL", KeywordSize(1, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("RPTCPL"); @@ -1519,9 +1547,7 @@ RPTCPL::RPTCPL( ) : ParserKeyword("RPTCPL") const std::string RPTCPL::keywordName = "RPTCPL"; -RPTGRID::RPTGRID( ) : ParserKeyword("RPTGRID") -{ - setFixedSize( (size_t) 1); +RPTGRID::RPTGRID() : ParserKeyword("RPTGRID", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("RPTGRID"); @@ -1539,9 +1565,7 @@ const std::string RPTGRID::keywordName = "RPTGRID"; const std::string RPTGRID::DATA::itemName = "DATA"; -RPTGRIDL::RPTGRIDL( ) : ParserKeyword("RPTGRIDL") -{ - setFixedSize( (size_t) 1); +RPTGRIDL::RPTGRIDL() : ParserKeyword("RPTGRIDL", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("RPTGRIDL"); @@ -1559,9 +1583,7 @@ const std::string RPTGRIDL::keywordName = "RPTGRIDL"; const std::string RPTGRIDL::DATA::itemName = "DATA"; -RPTHMD::RPTHMD( ) : ParserKeyword("RPTHMD") -{ - setFixedSize( (size_t) 1); +RPTHMD::RPTHMD() : ParserKeyword("RPTHMD", KeywordSize(1, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("RPTHMD"); @@ -1615,9 +1637,7 @@ const std::string RPTHMD::ITEM6::itemName = "ITEM6"; const int RPTHMD::ITEM6::defaultValue = 0; -RPTHMG::RPTHMG( ) : ParserKeyword("RPTHMG") -{ - setSizeType(SLASH_TERMINATED); +RPTHMG::RPTHMG() : ParserKeyword("RPTHMG", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("RPTHMG"); @@ -1639,9 +1659,7 @@ const std::string RPTHMG::GROUP::itemName = "GROUP"; const std::string RPTHMG::INCLUDE::itemName = "INCLUDE"; -RPTHMW::RPTHMW( ) : ParserKeyword("RPTHMW") -{ - setSizeType(SLASH_TERMINATED); +RPTHMW::RPTHMW() : ParserKeyword("RPTHMW", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("RPTHMW"); @@ -1672,9 +1690,7 @@ const std::string RPTHMW::INCLUDE_RFT::itemName = "INCLUDE_RFT"; const std::string RPTHMW::INCLUDE_RFT::defaultValue = "OFF"; -RPTINIT::RPTINIT( ) : ParserKeyword("RPTINIT") -{ - setFixedSize( (size_t) 1); +RPTINIT::RPTINIT() : ParserKeyword("RPTINIT", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("RPTINIT"); @@ -1692,9 +1708,7 @@ const std::string RPTINIT::keywordName = "RPTINIT"; const std::string RPTINIT::MNEMONICS_LIST::itemName = "MNEMONICS_LIST"; -RPTISOL::RPTISOL( ) : ParserKeyword("RPTISOL") -{ - setFixedSize( (size_t) 0); +RPTISOL::RPTISOL() : ParserKeyword("RPTISOL", KeywordSize(0, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("RPTISOL"); @@ -1702,31 +1716,25 @@ RPTISOL::RPTISOL( ) : ParserKeyword("RPTISOL") const std::string RPTISOL::keywordName = "RPTISOL"; -RPTONLY::RPTONLY( ) : ParserKeyword("RPTONLY") -{ - setFixedSize( (size_t) 0); - addValidSectionName("SCHEDULE"); +RPTONLY::RPTONLY() : ParserKeyword("RPTONLY", KeywordSize(0, false)) { addValidSectionName("SUMMARY"); + addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("RPTONLY"); } const std::string RPTONLY::keywordName = "RPTONLY"; -RPTONLYO::RPTONLYO( ) : ParserKeyword("RPTONLYO") -{ - setFixedSize( (size_t) 0); - addValidSectionName("SCHEDULE"); +RPTONLYO::RPTONLYO() : ParserKeyword("RPTONLYO", KeywordSize(0, false)) { addValidSectionName("SUMMARY"); + addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("RPTONLYO"); } const std::string RPTONLYO::keywordName = "RPTONLYO"; -RPTPROPS::RPTPROPS( ) : ParserKeyword("RPTPROPS") -{ - setFixedSize( (size_t) 1); +RPTPROPS::RPTPROPS() : ParserKeyword("RPTPROPS", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("RPTPROPS"); @@ -1744,9 +1752,7 @@ const std::string RPTPROPS::keywordName = "RPTPROPS"; const std::string RPTPROPS::mnemonics::itemName = "mnemonics"; -RPTREGS::RPTREGS( ) : ParserKeyword("RPTREGS") -{ - setFixedSize( (size_t) 1); +RPTREGS::RPTREGS() : ParserKeyword("RPTREGS", KeywordSize(1, false)) { addValidSectionName("REGIONS"); clearDeckNames(); addDeckName("RPTREGS"); @@ -1764,11 +1770,9 @@ const std::string RPTREGS::keywordName = "RPTREGS"; const std::string RPTREGS::MNEMONIC_LIST::itemName = "MNEMONIC_LIST"; -RPTRST::RPTRST( ) : ParserKeyword("RPTRST") -{ - setFixedSize( (size_t) 1); - addValidSectionName("SCHEDULE"); +RPTRST::RPTRST() : ParserKeyword("RPTRST", KeywordSize(1, false)) { addValidSectionName("SOLUTION"); + addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("RPTRST"); { @@ -1785,9 +1789,7 @@ const std::string RPTRST::keywordName = "RPTRST"; const std::string RPTRST::MNEMONIC_LIST::itemName = "MNEMONIC_LIST"; -RPTRUNSP::RPTRUNSP( ) : ParserKeyword("RPTRUNSP") -{ - setFixedSize( (size_t) 0); +RPTRUNSP::RPTRUNSP() : ParserKeyword("RPTRUNSP", KeywordSize(0, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("RPTRUNSP"); @@ -1795,9 +1797,7 @@ RPTRUNSP::RPTRUNSP( ) : ParserKeyword("RPTRUNSP") const std::string RPTRUNSP::keywordName = "RPTRUNSP"; -RPTSCHED::RPTSCHED( ) : ParserKeyword("RPTSCHED") -{ - setFixedSize( (size_t) 1); +RPTSCHED::RPTSCHED() : ParserKeyword("RPTSCHED", KeywordSize(1, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("RPTSCHED"); @@ -1815,9 +1815,7 @@ const std::string RPTSCHED::keywordName = "RPTSCHED"; const std::string RPTSCHED::MNEMONIC_LIST::itemName = "MNEMONIC_LIST"; -RPTSMRY::RPTSMRY( ) : ParserKeyword("RPTSMRY") -{ - setFixedSize( (size_t) 1); +RPTSMRY::RPTSMRY() : ParserKeyword("RPTSMRY", KeywordSize(1, false)) { addValidSectionName("SUMMARY"); clearDeckNames(); addDeckName("RPTSMRY"); @@ -1834,9 +1832,7 @@ const std::string RPTSMRY::keywordName = "RPTSMRY"; const std::string RPTSMRY::WRITE::itemName = "WRITE"; -RPTSOL::RPTSOL( ) : ParserKeyword("RPTSOL") -{ - setFixedSize( (size_t) 1); +RPTSOL::RPTSOL() : ParserKeyword("RPTSOL", KeywordSize(1, false)) { addValidSectionName("SOLUTION"); clearDeckNames(); addDeckName("RPTSOL"); @@ -1854,9 +1850,7 @@ const std::string RPTSOL::keywordName = "RPTSOL"; const std::string RPTSOL::mnemonics::itemName = "mnemonics"; -RS::RS( ) : ParserKeyword("RS") -{ - setFixedSize( (size_t) 1); +RS::RS() : ParserKeyword("RS", KeywordSize(1, false)) { addValidSectionName("SOLUTION"); clearDeckNames(); addDeckName("RS"); @@ -1875,9 +1869,7 @@ const std::string RS::keywordName = "RS"; const std::string RS::data::itemName = "data"; -RSCONST::RSCONST( ) : ParserKeyword("RSCONST") -{ - setFixedSize( (size_t) 1); +RSCONST::RSCONST() : ParserKeyword("RSCONST", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("RSCONST"); @@ -1901,10 +1893,7 @@ const std::string RSCONST::RS::itemName = "RS"; const std::string RSCONST::PB::itemName = "PB"; -RSCONSTT::RSCONSTT( ) : ParserKeyword("RSCONSTT") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTPVT",0); +RSCONSTT::RSCONSTT() : ParserKeyword("RSCONSTT", KeywordSize("TABDIMS", "NTPVT", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("RSCONSTT"); @@ -1928,10 +1917,7 @@ const std::string RSCONSTT::RS_CONSTT::itemName = "RS_CONSTT"; const std::string RSCONSTT::PB_CONSTT::itemName = "PB_CONSTT"; -RSGI::RSGI( ) : ParserKeyword("RSGI") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTPVT",0); +RSGI::RSGI() : ParserKeyword("RSGI", KeywordSize("TABDIMS", "NTPVT", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("RSGI"); @@ -1951,9 +1937,7 @@ const std::string RSGI::keywordName = "RSGI"; const std::string RSGI::DATA::itemName = "DATA"; -RSSPEC::RSSPEC( ) : ParserKeyword("RSSPEC") -{ - setFixedSize( (size_t) 0); +RSSPEC::RSSPEC() : ParserKeyword("RSSPEC", KeywordSize(0, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("RSSPEC"); @@ -1961,10 +1945,7 @@ RSSPEC::RSSPEC( ) : ParserKeyword("RSSPEC") const std::string RSSPEC::keywordName = "RSSPEC"; -RSVD::RSVD( ) : ParserKeyword("RSVD") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("EQLDIMS","NTEQUL",0); +RSVD::RSVD() : ParserKeyword("RSVD", KeywordSize("EQLDIMS", "NTEQUL", false, 0)) { addValidSectionName("SOLUTION"); clearDeckNames(); addDeckName("RSVD"); @@ -1984,9 +1965,7 @@ const std::string RSVD::keywordName = "RSVD"; const std::string RSVD::DATA::itemName = "DATA"; -RTEMP::RTEMP( ) : ParserKeyword("RTEMP") -{ - setSizeType(SLASH_TERMINATED); +RTEMP::RTEMP() : ParserKeyword("RTEMP", KeywordSize(1, false)) { addValidSectionName("PROPS"); addValidSectionName("SOLUTION"); clearDeckNames(); @@ -2007,9 +1986,7 @@ const std::string RTEMP::TEMP::itemName = "TEMP"; const double RTEMP::TEMP::defaultValue = 15.555000; -RTEMPA::RTEMPA( ) : ParserKeyword("RTEMPA") -{ - setSizeType(SLASH_TERMINATED); +RTEMPA::RTEMPA() : ParserKeyword("RTEMPA", KeywordSize(1, false)) { addValidSectionName("PROPS"); addValidSectionName("SOLUTION"); clearDeckNames(); @@ -2030,12 +2007,12 @@ const std::string RTEMPA::TEMP::itemName = "TEMP"; const double RTEMPA::TEMP::defaultValue = 15.555000; -RTEMPVD::RTEMPVD( ) : ParserKeyword("RTEMPVD") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("EQLDIMS","NTEQUL",0); +RTEMPVD::RTEMPVD() : ParserKeyword("RTEMPVD", KeywordSize("EQLDIMS", "NTEQUL", false, 0)) { addValidSectionName("PROPS"); addValidSectionName("SOLUTION"); + setProhibitedKeywords({ + "TEMPVD", + }); clearDeckNames(); addDeckName("RTEMPVD"); { @@ -2054,18 +2031,14 @@ const std::string RTEMPVD::keywordName = "RTEMPVD"; const std::string RTEMPVD::DATA::itemName = "DATA"; -RUNSPEC::RUNSPEC( ) : ParserKeyword("RUNSPEC") -{ - setFixedSize( (size_t) 0); +RUNSPEC::RUNSPEC() : ParserKeyword("RUNSPEC", KeywordSize(0, false)) { clearDeckNames(); addDeckName("RUNSPEC"); } const std::string RUNSPEC::keywordName = "RUNSPEC"; -RUNSUM::RUNSUM( ) : ParserKeyword("RUNSUM") -{ - setFixedSize( (size_t) 0); +RUNSUM::RUNSUM() : ParserKeyword("RUNSUM", KeywordSize(0, false)) { addValidSectionName("SUMMARY"); clearDeckNames(); addDeckName("RUNSUM"); @@ -2073,9 +2046,7 @@ RUNSUM::RUNSUM( ) : ParserKeyword("RUNSUM") const std::string RUNSUM::keywordName = "RUNSUM"; -RV::RV( ) : ParserKeyword("RV") -{ - setFixedSize( (size_t) 1); +RV::RV() : ParserKeyword("RV", KeywordSize(1, false)) { addValidSectionName("SOLUTION"); clearDeckNames(); addDeckName("RV"); @@ -2094,9 +2065,7 @@ const std::string RV::keywordName = "RV"; const std::string RV::data::itemName = "data"; -RVCONST::RVCONST( ) : ParserKeyword("RVCONST") -{ - setFixedSize( (size_t) 1); +RVCONST::RVCONST() : ParserKeyword("RVCONST", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("RVCONST"); @@ -2120,10 +2089,7 @@ const std::string RVCONST::RV::itemName = "RV"; const std::string RVCONST::DEWP::itemName = "DEWP"; -RVCONSTT::RVCONSTT( ) : ParserKeyword("RVCONSTT") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTPVT",0); +RVCONSTT::RVCONSTT() : ParserKeyword("RVCONSTT", KeywordSize("TABDIMS", "NTPVT", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("RVCONSTT"); @@ -2143,10 +2109,7 @@ const std::string RVCONSTT::keywordName = "RVCONSTT"; const std::string RVCONSTT::DATA::itemName = "DATA"; -RVGI::RVGI( ) : ParserKeyword("RVGI") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTPVT",0); +RVGI::RVGI() : ParserKeyword("RVGI", KeywordSize("TABDIMS", "NTPVT", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("RVGI"); @@ -2166,10 +2129,7 @@ const std::string RVGI::keywordName = "RVGI"; const std::string RVGI::DATA::itemName = "DATA"; -RVVD::RVVD( ) : ParserKeyword("RVVD") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("EQLDIMS","NTEQUL",0); +RVVD::RVVD() : ParserKeyword("RVVD", KeywordSize("EQLDIMS", "NTEQUL", false, 0)) { addValidSectionName("SOLUTION"); clearDeckNames(); addDeckName("RVVD"); @@ -2189,30 +2149,36 @@ const std::string RVVD::keywordName = "RVVD"; const std::string RVVD::DATA::itemName = "DATA"; -RWGSALT::RWGSALT( ) : ParserKeyword("RWGSALT") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTPVT",0); - setTableCollection( true ); +RVW::RVW() : ParserKeyword("RVW", KeywordSize(1, false)) { + addValidSectionName("SOLUTION"); + clearDeckNames(); + addDeckName("RVW"); + { + ParserRecord record; + { + ParserItem item("data", ParserItem::itype::DOUBLE); + item.setSizeType(ParserItem::item_size::ALL); + item.push_backDimension("OilDissolutionFactor"); + record.addDataItem(item); + } + addDataRecord( record ); + } +} +const std::string RVW::keywordName = "RVW"; +const std::string RVW::data::itemName = "data"; + + +RWGSALT::RWGSALT() : ParserKeyword("RWGSALT", KeywordSize("TABDIMS", "NTPVT", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("RWGSALT"); { ParserRecord record; - { - ParserItem item("RESERVOIR_PRESSURE", ParserItem::itype::DOUBLE); - item.push_backDimension("Pressure"); - record.addItem(item); - } - { - ParserItem item("SALT_CONCENTRATION", ParserItem::itype::DOUBLE); - item.setSizeType(ParserItem::item_size::ALL); - item.push_backDimension("Mass/Length*Length*Length"); - record.addItem(item); - } { ParserItem item("DATA", ParserItem::itype::DOUBLE); item.setSizeType(ParserItem::item_size::ALL); + item.push_backDimension("Pressure"); + item.push_backDimension("Mass/Length*Length*Length"); item.push_backDimension("OilDissolutionFactor"); record.addItem(item); } @@ -2220,8 +2186,6 @@ RWGSALT::RWGSALT( ) : ParserKeyword("RWGSALT") } } const std::string RWGSALT::keywordName = "RWGSALT"; -const std::string RWGSALT::RESERVOIR_PRESSURE::itemName = "RESERVOIR_PRESSURE"; -const std::string RWGSALT::SALT_CONCENTRATION::itemName = "SALT_CONCENTRATION"; const std::string RWGSALT::DATA::itemName = "DATA"; diff --git a/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/S.cpp b/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/S.cpp index 017701514b..e13f0b3804 100644 --- a/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/S.cpp +++ b/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/S.cpp @@ -1,18 +1,36 @@ -#include -#include -#include -#include + +#include +#include +#include +#include -#include +#include namespace Opm { namespace ParserKeywords { -SALT::SALT( ) : ParserKeyword("SALT") -{ - setFixedSize( (size_t) 1); +SALINITY::SALINITY() : ParserKeyword("SALINITY", KeywordSize(1, false)) { + addValidSectionName("PROPS"); + clearDeckNames(); + addDeckName("SALINITY"); + { + ParserRecord record; + { + ParserItem item("MOLALITY", ParserItem::itype::DOUBLE); + item.setDefault( double(0) ); + record.addItem(item); + } + addRecord( record ); + } +} +const std::string SALINITY::keywordName = "SALINITY"; +const std::string SALINITY::MOLALITY::itemName = "MOLALITY"; +const double SALINITY::MOLALITY::defaultValue = 0; + + +SALT::SALT() : ParserKeyword("SALT", KeywordSize(1, false)) { addValidSectionName("SOLUTION"); clearDeckNames(); addDeckName("SALT"); @@ -21,7 +39,7 @@ SALT::SALT( ) : ParserKeyword("SALT") { ParserItem item("SALT_CONCENTRATION", ParserItem::itype::DOUBLE); item.setSizeType(ParserItem::item_size::ALL); - item.push_backDimension("Mass/Length*Length*Length"); + item.push_backDimension("Salinity"); record.addItem(item); } addRecord( record ); @@ -31,10 +49,7 @@ const std::string SALT::keywordName = "SALT"; const std::string SALT::SALT_CONCENTRATION::itemName = "SALT_CONCENTRATION"; -SALTNODE::SALTNODE( ) : ParserKeyword("SALTNODE") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTPVT",0); +SALTNODE::SALTNODE() : ParserKeyword("SALTNODE", KeywordSize("TABDIMS", "NTPVT", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("SALTNODE"); @@ -53,10 +68,26 @@ const std::string SALTNODE::keywordName = "SALTNODE"; const std::string SALTNODE::SALT_CONCENTRATION::itemName = "SALT_CONCENTRATION"; -SALTPVD::SALTPVD( ) : ParserKeyword("SALTPVD") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("EQLDIMS","NTEQUL",0); +SALTP::SALTP() : ParserKeyword("SALTP", KeywordSize(1, false)) { + addValidSectionName("SOLUTION"); + clearDeckNames(); + addDeckName("SALTP"); + { + ParserRecord record; + { + ParserItem item("SALT_SATURATION", ParserItem::itype::DOUBLE); + item.setSizeType(ParserItem::item_size::ALL); + item.push_backDimension("1"); + record.addItem(item); + } + addRecord( record ); + } +} +const std::string SALTP::keywordName = "SALTP"; +const std::string SALTP::SALT_SATURATION::itemName = "SALT_SATURATION"; + + +SALTPVD::SALTPVD() : ParserKeyword("SALTPVD", KeywordSize("EQLDIMS", "NTEQUL", false, 0)) { addValidSectionName("SOLUTION"); clearDeckNames(); addDeckName("SALTPVD"); @@ -66,7 +97,6 @@ SALTPVD::SALTPVD( ) : ParserKeyword("SALTPVD") ParserItem item("DATA", ParserItem::itype::DOUBLE); item.setSizeType(ParserItem::item_size::ALL); item.push_backDimension("Length"); - item.push_backDimension("Density"); item.push_backDimension("1"); record.addItem(item); } @@ -77,9 +107,7 @@ const std::string SALTPVD::keywordName = "SALTPVD"; const std::string SALTPVD::DATA::itemName = "DATA"; -SALTREST::SALTREST( ) : ParserKeyword("SALTREST") -{ - setFixedSize( (size_t) 1); +SALTREST::SALTREST() : ParserKeyword("SALTREST", KeywordSize(1, false)) { addValidSectionName("SOLUTION"); clearDeckNames(); addDeckName("SALTREST"); @@ -98,31 +126,26 @@ const std::string SALTREST::keywordName = "SALTREST"; const std::string SALTREST::SALT_CONCENTRATION::itemName = "SALT_CONCENTRATION"; -SALTSOL::SALTSOL( ) : ParserKeyword("SALTSOL") -{ - setFixedSize( (size_t) 1); +SALTSOL::SALTSOL() : ParserKeyword("SALTSOL", KeywordSize("TABDIMS", "NTPVT", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("SALTSOL"); { ParserRecord record; { - ParserItem item("data", ParserItem::itype::DOUBLE); + ParserItem item("DATA", ParserItem::itype::DOUBLE); item.setSizeType(ParserItem::item_size::ALL); item.push_backDimension("Density"); - record.addDataItem(item); + record.addItem(item); } - addDataRecord( record ); + addRecord( record ); } } const std::string SALTSOL::keywordName = "SALTSOL"; -const std::string SALTSOL::data::itemName = "data"; +const std::string SALTSOL::DATA::itemName = "DATA"; -SALTVD::SALTVD( ) : ParserKeyword("SALTVD") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("EQLDIMS","NTEQUL",0); +SALTVD::SALTVD() : ParserKeyword("SALTVD", KeywordSize("EQLDIMS", "NTEQUL", false, 0)) { addValidSectionName("SOLUTION"); clearDeckNames(); addDeckName("SALTVD"); @@ -132,7 +155,7 @@ SALTVD::SALTVD( ) : ParserKeyword("SALTVD") ParserItem item("DATA", ParserItem::itype::DOUBLE); item.setSizeType(ParserItem::item_size::ALL); item.push_backDimension("Length"); - item.push_backDimension("Density"); + item.push_backDimension("Salinity"); record.addItem(item); } addRecord( record ); @@ -142,9 +165,7 @@ const std::string SALTVD::keywordName = "SALTVD"; const std::string SALTVD::DATA::itemName = "DATA"; -SAMG::SAMG( ) : ParserKeyword("SAMG") -{ - setFixedSize( (size_t) 1); +SAMG::SAMG() : ParserKeyword("SAMG", KeywordSize(1, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("SAMG"); @@ -166,9 +187,7 @@ const std::string SAMG::EPS::itemName = "EPS"; const std::string SAMG::REUSE::itemName = "REUSE"; -SATNUM::SATNUM( ) : ParserKeyword("SATNUM") -{ - setFixedSize( (size_t) 1); +SATNUM::SATNUM() : ParserKeyword("SATNUM", KeywordSize(1, false)) { addValidSectionName("REGIONS"); clearDeckNames(); addDeckName("SATNUM"); @@ -186,9 +205,7 @@ const std::string SATNUM::keywordName = "SATNUM"; const std::string SATNUM::data::itemName = "data"; -SATOPTS::SATOPTS( ) : ParserKeyword("SATOPTS") -{ - setFixedSize( (size_t) 1); +SATOPTS::SATOPTS() : ParserKeyword("SATOPTS", KeywordSize(1, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("SATOPTS"); @@ -206,9 +223,7 @@ const std::string SATOPTS::keywordName = "SATOPTS"; const std::string SATOPTS::options::itemName = "options"; -SAVE::SAVE( ) : ParserKeyword("SAVE") -{ - setSizeType(UNKNOWN); +SAVE::SAVE() : ParserKeyword("SAVE", KeywordSize(0, 1, false)) { addValidSectionName("RUNSPEC"); addValidSectionName("SCHEDULE"); clearDeckNames(); @@ -228,9 +243,45 @@ const std::string SAVE::FILE_TYPE::itemName = "FILE_TYPE"; const std::string SAVE::FILE_TYPE::defaultValue = "UNFORMATTED"; -SCALECRS::SCALECRS( ) : ParserKeyword("SCALECRS") -{ - setFixedSize( (size_t) 1); +SBIOF::SBIOF() : ParserKeyword("SBIOF", KeywordSize(1, false)) { + addValidSectionName("SOLUTION"); + clearDeckNames(); + addDeckName("SBIOF"); + { + ParserRecord record; + { + ParserItem item("data", ParserItem::itype::DOUBLE); + item.setSizeType(ParserItem::item_size::ALL); + item.push_backDimension("1"); + record.addDataItem(item); + } + addDataRecord( record ); + } +} +const std::string SBIOF::keywordName = "SBIOF"; +const std::string SBIOF::data::itemName = "data"; + + +SCALC::SCALC() : ParserKeyword("SCALC", KeywordSize(1, false)) { + addValidSectionName("SOLUTION"); + clearDeckNames(); + addDeckName("SCALC"); + { + ParserRecord record; + { + ParserItem item("data", ParserItem::itype::DOUBLE); + item.setSizeType(ParserItem::item_size::ALL); + item.push_backDimension("1"); + record.addDataItem(item); + } + addDataRecord( record ); + } +} +const std::string SCALC::keywordName = "SCALC"; +const std::string SCALC::data::itemName = "data"; + + +SCALECRS::SCALECRS() : ParserKeyword("SCALECRS", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("SCALECRS"); @@ -249,10 +300,7 @@ const std::string SCALECRS::VALUE::itemName = "VALUE"; const std::string SCALECRS::VALUE::defaultValue = "NO"; -SCALELIM::SCALELIM( ) : ParserKeyword("SCALELIM") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("ENDSCALE","NTENDP",0); +SCALELIM::SCALELIM() : ParserKeyword("SCALELIM", KeywordSize("ENDSCALE", "NTENDP", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("SCALELIM"); @@ -268,13 +316,10 @@ SCALELIM::SCALELIM( ) : ParserKeyword("SCALELIM") } const std::string SCALELIM::keywordName = "SCALELIM"; const std::string SCALELIM::SAT_LIMIT::itemName = "SAT_LIMIT"; -const double SCALELIM::SAT_LIMIT::defaultValue = 0.000000; +const double SCALELIM::SAT_LIMIT::defaultValue = 0; -SCDATAB::SCDATAB( ) : ParserKeyword("SCDATAB") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("SCDPDIMS","NTSCDA",0); +SCDATAB::SCDATAB() : ParserKeyword("SCDATAB", KeywordSize("SCDPDIMS", "NTSCDA", false, 0)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("SCDATAB"); @@ -293,13 +338,10 @@ SCDATAB::SCDATAB( ) : ParserKeyword("SCDATAB") } const std::string SCDATAB::keywordName = "SCDATAB"; const std::string SCDATAB::SCALE_DATA::itemName = "SCALE_DATA"; -const double SCDATAB::SCALE_DATA::defaultValue = 0.000000; +const double SCDATAB::SCALE_DATA::defaultValue = 0; -SCDETAB::SCDETAB( ) : ParserKeyword("SCDETAB") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("SCDPDIMS","NTSCDE",0); +SCDETAB::SCDETAB() : ParserKeyword("SCDETAB", KeywordSize("SCDPDIMS", "NTSCDE", false, 0)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("SCDETAB"); @@ -318,66 +360,13 @@ SCDETAB::SCDETAB( ) : ParserKeyword("SCDETAB") } const std::string SCDETAB::keywordName = "SCDETAB"; const std::string SCDETAB::SCALE_DATA::itemName = "SCALE_DATA"; -const double SCDETAB::SCALE_DATA::defaultValue = 0.000000; +const double SCDETAB::SCALE_DATA::defaultValue = 0; -SCDPTAB::SCDPTAB( ) : ParserKeyword("SCDPTAB") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("SCDPDIMS","NTSCDP",0); - addValidSectionName("SCHEDULE"); - clearDeckNames(); - addDeckName("SCDPTAB"); - { - ParserRecord record; - { - ParserItem item("DATA", ParserItem::itype::DOUBLE); - item.setSizeType(ParserItem::item_size::ALL); - item.push_backDimension("1"); - item.push_backDimension("1"); - record.addItem(item); - } - addRecord( record ); - } -} -const std::string SCDPTAB::keywordName = "SCDPTAB"; -const std::string SCDPTAB::DATA::itemName = "DATA"; - - -SCDPTRAC::SCDPTRAC( ) : ParserKeyword("SCDPTRAC") -{ - setFixedSize( (size_t) 1); - addValidSectionName("SCHEDULE"); - clearDeckNames(); - addDeckName("SCDPTRAC"); - { - ParserRecord record; - { - ParserItem item("TRACER", ParserItem::itype::STRING); - record.addItem(item); - } - addRecord( record ); - } -} -const std::string SCDPTRAC::keywordName = "SCDPTRAC"; -const std::string SCDPTRAC::TRACER::itemName = "TRACER"; - - -SCHEDULE::SCHEDULE( ) : ParserKeyword("SCHEDULE") -{ - setFixedSize( (size_t) 0); - clearDeckNames(); - addDeckName("SCHEDULE"); -} -const std::string SCHEDULE::keywordName = "SCHEDULE"; - - -SCPDIMS::SCPDIMS( ) : ParserKeyword("SCPDIMS") -{ - setFixedSize( (size_t) 1); +SCDPDIMS::SCDPDIMS() : ParserKeyword("SCDPDIMS", KeywordSize(1, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); - addDeckName("SCPDIMS"); + addDeckName("SCDPDIMS"); { ParserRecord record; { @@ -418,27 +407,68 @@ SCPDIMS::SCPDIMS( ) : ParserKeyword("SCPDIMS") addRecord( record ); } } -const std::string SCPDIMS::keywordName = "SCPDIMS"; -const std::string SCPDIMS::NTSCDP::itemName = "NTSCDP"; -const int SCPDIMS::NTSCDP::defaultValue = 0; -const std::string SCPDIMS::NPSCDP::itemName = "NPSCDP"; -const int SCPDIMS::NPSCDP::defaultValue = 0; -const std::string SCPDIMS::NTSCDA::itemName = "NTSCDA"; -const int SCPDIMS::NTSCDA::defaultValue = 0; -const std::string SCPDIMS::PSCDA::itemName = "PSCDA"; -const int SCPDIMS::PSCDA::defaultValue = 0; -const std::string SCPDIMS::UNUSED1::itemName = "UNUSED1"; -const int SCPDIMS::UNUSED1::defaultValue = 0; -const std::string SCPDIMS::UNUSED2::itemName = "UNUSED2"; -const int SCPDIMS::UNUSED2::defaultValue = 0; -const std::string SCPDIMS::NTSCDE::itemName = "NTSCDE"; -const int SCPDIMS::NTSCDE::defaultValue = 0; +const std::string SCDPDIMS::keywordName = "SCDPDIMS"; +const std::string SCDPDIMS::NTSCDP::itemName = "NTSCDP"; +const int SCDPDIMS::NTSCDP::defaultValue = 0; +const std::string SCDPDIMS::NPSCDP::itemName = "NPSCDP"; +const int SCDPDIMS::NPSCDP::defaultValue = 0; +const std::string SCDPDIMS::NTSCDA::itemName = "NTSCDA"; +const int SCDPDIMS::NTSCDA::defaultValue = 0; +const std::string SCDPDIMS::PSCDA::itemName = "PSCDA"; +const int SCDPDIMS::PSCDA::defaultValue = 0; +const std::string SCDPDIMS::UNUSED1::itemName = "UNUSED1"; +const int SCDPDIMS::UNUSED1::defaultValue = 0; +const std::string SCDPDIMS::UNUSED2::itemName = "UNUSED2"; +const int SCDPDIMS::UNUSED2::defaultValue = 0; +const std::string SCDPDIMS::NTSCDE::itemName = "NTSCDE"; +const int SCDPDIMS::NTSCDE::defaultValue = 0; -SCVD::SCVD( ) : ParserKeyword("SCVD") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("EQLDIMS","NTEQUL",0); +SCDPTAB::SCDPTAB() : ParserKeyword("SCDPTAB", KeywordSize("SCDPDIMS", "NTSCDP", false, 0)) { + addValidSectionName("SCHEDULE"); + clearDeckNames(); + addDeckName("SCDPTAB"); + { + ParserRecord record; + { + ParserItem item("DATA", ParserItem::itype::DOUBLE); + item.setSizeType(ParserItem::item_size::ALL); + item.push_backDimension("1"); + item.push_backDimension("1"); + record.addItem(item); + } + addRecord( record ); + } +} +const std::string SCDPTAB::keywordName = "SCDPTAB"; +const std::string SCDPTAB::DATA::itemName = "DATA"; + + +SCDPTRAC::SCDPTRAC() : ParserKeyword("SCDPTRAC", KeywordSize(1, false)) { + addValidSectionName("SCHEDULE"); + clearDeckNames(); + addDeckName("SCDPTRAC"); + { + ParserRecord record; + { + ParserItem item("TRACER", ParserItem::itype::STRING); + record.addItem(item); + } + addRecord( record ); + } +} +const std::string SCDPTRAC::keywordName = "SCDPTRAC"; +const std::string SCDPTRAC::TRACER::itemName = "TRACER"; + + +SCHEDULE::SCHEDULE() : ParserKeyword("SCHEDULE", KeywordSize(0, false)) { + clearDeckNames(); + addDeckName("SCHEDULE"); +} +const std::string SCHEDULE::keywordName = "SCHEDULE"; + + +SCVD::SCVD() : ParserKeyword("SCVD", KeywordSize("EQLDIMS", "NTEQUL", false, 0)) { addValidSectionName("SOLUTION"); clearDeckNames(); addDeckName("SCVD"); @@ -458,10 +488,7 @@ const std::string SCVD::keywordName = "SCVD"; const std::string SCVD::DATA::itemName = "DATA"; -SDENSITY::SDENSITY( ) : ParserKeyword("SDENSITY") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTPVT",0); +SDENSITY::SDENSITY() : ParserKeyword("SDENSITY", KeywordSize("TABDIMS", "NTPVT", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("SDENSITY"); @@ -481,19 +508,18 @@ const std::string SDENSITY::SOLVENT_DENSITY::itemName = "SOLVENT_DENSITY"; const double SDENSITY::SOLVENT_DENSITY::defaultValue = 1.000000; -SEGMENT_PROBE::SEGMENT_PROBE( ) : ParserKeyword("SEGMENT_PROBE") -{ - setSizeType(SLASH_TERMINATED); +SEGMENT_PROBE::SEGMENT_PROBE() : ParserKeyword("SEGMENT_PROBE", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SUMMARY"); clearDeckNames(); - addDeckName("SGFR"); - addDeckName("SOFR"); - addDeckName("SPR"); - addDeckName("SPRD"); - addDeckName("SPRDA"); - addDeckName("SPRDF"); - addDeckName("SPRDH"); addDeckName("SWFR"); + addDeckName("SOFR"); + addDeckName("SGFR"); + addDeckName("SPR"); + addDeckName("SPRDH"); + addDeckName("SWCT"); + addDeckName("SPRD"); + addDeckName("SPRDF"); + addDeckName("SPRDA"); { ParserRecord record; { @@ -512,9 +538,7 @@ const std::string SEGMENT_PROBE::Well::itemName = "Well"; const std::string SEGMENT_PROBE::Segment::itemName = "Segment"; -SEPARATE::SEPARATE( ) : ParserKeyword("SEPARATE") -{ - setFixedSize( (size_t) 0); +SEPARATE::SEPARATE() : ParserKeyword("SEPARATE", KeywordSize(0, false)) { addValidSectionName("SUMMARY"); clearDeckNames(); addDeckName("SEPARATE"); @@ -522,9 +546,7 @@ SEPARATE::SEPARATE( ) : ParserKeyword("SEPARATE") const std::string SEPARATE::keywordName = "SEPARATE"; -SEPVALS::SEPVALS( ) : ParserKeyword("SEPVALS") -{ - setSizeType(SLASH_TERMINATED); +SEPVALS::SEPVALS() : ParserKeyword("SEPVALS", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("SEPVALS"); @@ -553,9 +575,7 @@ const std::string SEPVALS::BO::itemName = "BO"; const std::string SEPVALS::RS::itemName = "RS"; -SFOAM::SFOAM( ) : ParserKeyword("SFOAM") -{ - setFixedSize( (size_t) 1); +SFOAM::SFOAM() : ParserKeyword("SFOAM", KeywordSize(1, false)) { addValidSectionName("SOLUTION"); clearDeckNames(); addDeckName("SFOAM"); @@ -574,9 +594,7 @@ const std::string SFOAM::keywordName = "SFOAM"; const std::string SFOAM::data::itemName = "data"; -SGAS::SGAS( ) : ParserKeyword("SGAS") -{ - setFixedSize( (size_t) 1); +SGAS::SGAS() : ParserKeyword("SGAS", KeywordSize(1, false)) { addValidSectionName("SOLUTION"); clearDeckNames(); addDeckName("SGAS"); @@ -595,10 +613,11 @@ const std::string SGAS::keywordName = "SGAS"; const std::string SGAS::data::itemName = "data"; -SGCR::SGCR( ) : ParserKeyword("SGCR") -{ - setFixedSize( (size_t) 1); +SGCR::SGCR() : ParserKeyword("SGCR", KeywordSize(1, false)) { addValidSectionName("PROPS"); + setRequiredKeywords({ + "GAS", + }); clearDeckNames(); addDeckName("SGCR"); { @@ -616,10 +635,7 @@ const std::string SGCR::keywordName = "SGCR"; const std::string SGCR::data::itemName = "data"; -SGCWMIS::SGCWMIS( ) : ParserKeyword("SGCWMIS") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("MISCIBLE","NTMISC",0); +SGCWMIS::SGCWMIS() : ParserKeyword("SGCWMIS", KeywordSize("MISCIBLE", "NTMISC", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("SGCWMIS"); @@ -639,9 +655,7 @@ const std::string SGCWMIS::keywordName = "SGCWMIS"; const std::string SGCWMIS::DATA::itemName = "DATA"; -SGF32D::SGF32D( ) : ParserKeyword("SGF32D") -{ - setSizeType(SLASH_TERMINATED); +SGF32D::SGF32D() : ParserKeyword("SGF32D", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("SGF32D"); @@ -676,11 +690,11 @@ const std::string SGF32D::SWAT::itemName = "SWAT"; const std::string SGF32D::KRG::itemName = "KRG"; -SGFN::SGFN( ) : ParserKeyword("SGFN") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTSFUN",0); +SGFN::SGFN() : ParserKeyword("SGFN", KeywordSize("TABDIMS", "NTSFUN", false, 0)) { addValidSectionName("PROPS"); + setRequiredKeywords({ + "GAS", + }); clearDeckNames(); addDeckName("SGFN"); { @@ -700,10 +714,11 @@ const std::string SGFN::keywordName = "SGFN"; const std::string SGFN::DATA::itemName = "DATA"; -SGL::SGL( ) : ParserKeyword("SGL") -{ - setFixedSize( (size_t) 1); +SGL::SGL() : ParserKeyword("SGL", KeywordSize(1, false)) { addValidSectionName("PROPS"); + setRequiredKeywords({ + "GAS", + }); clearDeckNames(); addDeckName("SGL"); { @@ -721,10 +736,11 @@ const std::string SGL::keywordName = "SGL"; const std::string SGL::data::itemName = "data"; -SGLPC::SGLPC( ) : ParserKeyword("SGLPC") -{ - setFixedSize( (size_t) 1); +SGLPC::SGLPC() : ParserKeyword("SGLPC", KeywordSize(1, false)) { addValidSectionName("PROPS"); + setRequiredKeywords({ + "GAS", + }); clearDeckNames(); addDeckName("SGLPC"); { @@ -742,11 +758,15 @@ const std::string SGLPC::keywordName = "SGLPC"; const std::string SGLPC::data::itemName = "data"; -SGOF::SGOF( ) : ParserKeyword("SGOF") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTSFUN",0); +SGOF::SGOF() : ParserKeyword("SGOF", KeywordSize("TABDIMS", "NTSFUN", false, 0)) { addValidSectionName("PROPS"); + setProhibitedKeywords({ + "SLGOF", + }); + setRequiredKeywords({ + "GAS", + "OIL", + }); clearDeckNames(); addDeckName("SGOF"); { @@ -767,10 +787,163 @@ const std::string SGOF::keywordName = "SGOF"; const std::string SGOF::DATA::itemName = "DATA"; -SGU::SGU( ) : ParserKeyword("SGU") -{ - setFixedSize( (size_t) 1); +SGOFLET::SGOFLET() : ParserKeyword("SGOFLET", KeywordSize("TABDIMS", "NTSFUN", false, 0)) { addValidSectionName("PROPS"); + setRequiredKeywords({ + "GAS", + "OIL", + }); + clearDeckNames(); + addDeckName("SGOFLET"); + { + ParserRecord record; + { + ParserItem item("SG_0", ParserItem::itype::DOUBLE); + item.setDefault( double(0) ); + item.push_backDimension("1"); + record.addItem(item); + } + { + ParserItem item("SG_CRITICAL", ParserItem::itype::DOUBLE); + item.setDefault( double(0) ); + item.push_backDimension("1"); + record.addItem(item); + } + { + ParserItem item("L_GAS", ParserItem::itype::DOUBLE); + item.setDefault( double(1.000000) ); + item.push_backDimension("1"); + record.addItem(item); + } + { + ParserItem item("E_GAS", ParserItem::itype::DOUBLE); + item.setDefault( double(1.000000) ); + item.push_backDimension("1"); + record.addItem(item); + } + { + ParserItem item("T_GAS", ParserItem::itype::DOUBLE); + item.setDefault( double(1.000000) ); + item.push_backDimension("1"); + record.addItem(item); + } + { + ParserItem item("KRT_GAS", ParserItem::itype::DOUBLE); + item.setDefault( double(1.000000) ); + item.push_backDimension("1"); + record.addItem(item); + } + { + ParserItem item("SO_0", ParserItem::itype::DOUBLE); + item.setDefault( double(0) ); + item.push_backDimension("1"); + record.addItem(item); + } + { + ParserItem item("SO_CRITICAL", ParserItem::itype::DOUBLE); + item.setDefault( double(0) ); + item.push_backDimension("1"); + record.addItem(item); + } + { + ParserItem item("L_OIL", ParserItem::itype::DOUBLE); + item.setDefault( double(1.000000) ); + item.push_backDimension("1"); + record.addItem(item); + } + { + ParserItem item("E_OIL", ParserItem::itype::DOUBLE); + item.setDefault( double(1.000000) ); + item.push_backDimension("1"); + record.addItem(item); + } + { + ParserItem item("T_OIL", ParserItem::itype::DOUBLE); + item.setDefault( double(1.000000) ); + item.push_backDimension("1"); + record.addItem(item); + } + { + ParserItem item("KRT_OIL", ParserItem::itype::DOUBLE); + item.setDefault( double(1.000000) ); + item.push_backDimension("1"); + record.addItem(item); + } + { + ParserItem item("L_PC", ParserItem::itype::DOUBLE); + item.setDefault( double(1.000000) ); + item.push_backDimension("1"); + record.addItem(item); + } + { + ParserItem item("E_PC", ParserItem::itype::DOUBLE); + item.setDefault( double(1.000000) ); + item.push_backDimension("1"); + record.addItem(item); + } + { + ParserItem item("T_PC", ParserItem::itype::DOUBLE); + item.setDefault( double(1.000000) ); + item.push_backDimension("1"); + record.addItem(item); + } + { + ParserItem item("PCIR", ParserItem::itype::DOUBLE); + item.setDefault( double(0) ); + item.push_backDimension("Pressure"); + record.addItem(item); + } + { + ParserItem item("PCT", ParserItem::itype::DOUBLE); + item.setDefault( double(0) ); + item.push_backDimension("Pressure"); + record.addItem(item); + } + addRecord( record ); + } +} +const std::string SGOFLET::keywordName = "SGOFLET"; +const std::string SGOFLET::SG_0::itemName = "SG_0"; +const double SGOFLET::SG_0::defaultValue = 0; +const std::string SGOFLET::SG_CRITICAL::itemName = "SG_CRITICAL"; +const double SGOFLET::SG_CRITICAL::defaultValue = 0; +const std::string SGOFLET::L_GAS::itemName = "L_GAS"; +const double SGOFLET::L_GAS::defaultValue = 1.000000; +const std::string SGOFLET::E_GAS::itemName = "E_GAS"; +const double SGOFLET::E_GAS::defaultValue = 1.000000; +const std::string SGOFLET::T_GAS::itemName = "T_GAS"; +const double SGOFLET::T_GAS::defaultValue = 1.000000; +const std::string SGOFLET::KRT_GAS::itemName = "KRT_GAS"; +const double SGOFLET::KRT_GAS::defaultValue = 1.000000; +const std::string SGOFLET::SO_0::itemName = "SO_0"; +const double SGOFLET::SO_0::defaultValue = 0; +const std::string SGOFLET::SO_CRITICAL::itemName = "SO_CRITICAL"; +const double SGOFLET::SO_CRITICAL::defaultValue = 0; +const std::string SGOFLET::L_OIL::itemName = "L_OIL"; +const double SGOFLET::L_OIL::defaultValue = 1.000000; +const std::string SGOFLET::E_OIL::itemName = "E_OIL"; +const double SGOFLET::E_OIL::defaultValue = 1.000000; +const std::string SGOFLET::T_OIL::itemName = "T_OIL"; +const double SGOFLET::T_OIL::defaultValue = 1.000000; +const std::string SGOFLET::KRT_OIL::itemName = "KRT_OIL"; +const double SGOFLET::KRT_OIL::defaultValue = 1.000000; +const std::string SGOFLET::L_PC::itemName = "L_PC"; +const double SGOFLET::L_PC::defaultValue = 1.000000; +const std::string SGOFLET::E_PC::itemName = "E_PC"; +const double SGOFLET::E_PC::defaultValue = 1.000000; +const std::string SGOFLET::T_PC::itemName = "T_PC"; +const double SGOFLET::T_PC::defaultValue = 1.000000; +const std::string SGOFLET::PCIR::itemName = "PCIR"; +const double SGOFLET::PCIR::defaultValue = 0; +const std::string SGOFLET::PCT::itemName = "PCT"; +const double SGOFLET::PCT::defaultValue = 0; + + +SGU::SGU() : ParserKeyword("SGU", KeywordSize(1, false)) { + addValidSectionName("PROPS"); + setRequiredKeywords({ + "GAS", + }); clearDeckNames(); addDeckName("SGU"); { @@ -788,10 +961,7 @@ const std::string SGU::keywordName = "SGU"; const std::string SGU::data::itemName = "data"; -SGWFN::SGWFN( ) : ParserKeyword("SGWFN") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTSFUN",0); +SGWFN::SGWFN() : ParserKeyword("SGWFN", KeywordSize("TABDIMS", "NTSFUN", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("SGWFN"); @@ -813,10 +983,7 @@ const std::string SGWFN::keywordName = "SGWFN"; const std::string SGWFN::DATA::itemName = "DATA"; -SHRATE::SHRATE( ) : ParserKeyword("SHRATE") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTPVT",0); +SHRATE::SHRATE() : ParserKeyword("SHRATE", KeywordSize("TABDIMS", "NTPVT", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("SHRATE"); @@ -835,9 +1002,7 @@ const std::string SHRATE::keywordName = "SHRATE"; const std::string SHRATE::SHEAR_RATE::itemName = "SHEAR_RATE"; -SIGMA::SIGMA( ) : ParserKeyword("SIGMA") -{ - setSizeType(SLASH_TERMINATED); +SIGMA::SIGMA() : ParserKeyword("SIGMA", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("SIGMA"); @@ -855,9 +1020,7 @@ const std::string SIGMA::keywordName = "SIGMA"; const std::string SIGMA::COUPLING::itemName = "COUPLING"; -SIGMAGDV::SIGMAGDV( ) : ParserKeyword("SIGMAGDV") -{ - setFixedSize( (size_t) 1); +SIGMAGDV::SIGMAGDV() : ParserKeyword("SIGMAGDV", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("SIGMAGDV"); @@ -875,9 +1038,7 @@ const std::string SIGMAGDV::keywordName = "SIGMAGDV"; const std::string SIGMAGDV::data::itemName = "data"; -SIGMATH::SIGMATH( ) : ParserKeyword("SIGMATH") -{ - setFixedSize( (size_t) 1); +SIGMATH::SIGMATH() : ParserKeyword("SIGMATH", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("SIGMATH"); @@ -895,9 +1056,7 @@ const std::string SIGMATH::keywordName = "SIGMATH"; const std::string SIGMATH::data::itemName = "data"; -SIGMAV::SIGMAV( ) : ParserKeyword("SIGMAV") -{ - setFixedSize( (size_t) 1); +SIGMAV::SIGMAV() : ParserKeyword("SIGMAV", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("SIGMAV"); @@ -915,9 +1074,7 @@ const std::string SIGMAV::keywordName = "SIGMAV"; const std::string SIGMAV::data::itemName = "data"; -SIMULATE::SIMULATE( ) : ParserKeyword("SIMULATE") -{ - setFixedSize( (size_t) 0); +SIMULATE::SIMULATE() : ParserKeyword("SIMULATE", KeywordSize(0, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("SIMULATE"); @@ -925,60 +1082,52 @@ SIMULATE::SIMULATE( ) : ParserKeyword("SIMULATE") const std::string SIMULATE::keywordName = "SIMULATE"; -SKIP::SKIP( ) : ParserKeyword("SKIP") -{ - setFixedSize( (size_t) 0); - addValidSectionName("EDIT"); +SKIP::SKIP() : ParserKeyword("SKIP", KeywordSize(0, false)) { + addValidSectionName("RUNSPEC"); addValidSectionName("GRID"); + addValidSectionName("EDIT"); addValidSectionName("PROPS"); addValidSectionName("REGIONS"); - addValidSectionName("RUNSPEC"); - addValidSectionName("SCHEDULE"); addValidSectionName("SOLUTION"); addValidSectionName("SUMMARY"); + addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("SKIP"); } const std::string SKIP::keywordName = "SKIP"; -SKIP100::SKIP100( ) : ParserKeyword("SKIP100") -{ - setFixedSize( (size_t) 0); - addValidSectionName("EDIT"); +SKIP100::SKIP100() : ParserKeyword("SKIP100", KeywordSize(0, false)) { + addValidSectionName("RUNSPEC"); addValidSectionName("GRID"); + addValidSectionName("EDIT"); addValidSectionName("PROPS"); addValidSectionName("REGIONS"); - addValidSectionName("RUNSPEC"); - addValidSectionName("SCHEDULE"); addValidSectionName("SOLUTION"); addValidSectionName("SUMMARY"); + addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("SKIP100"); } const std::string SKIP100::keywordName = "SKIP100"; -SKIP300::SKIP300( ) : ParserKeyword("SKIP300") -{ - setFixedSize( (size_t) 0); - addValidSectionName("EDIT"); +SKIP300::SKIP300() : ParserKeyword("SKIP300", KeywordSize(0, false)) { + addValidSectionName("RUNSPEC"); addValidSectionName("GRID"); + addValidSectionName("EDIT"); addValidSectionName("PROPS"); addValidSectionName("REGIONS"); - addValidSectionName("RUNSPEC"); - addValidSectionName("SCHEDULE"); addValidSectionName("SOLUTION"); addValidSectionName("SUMMARY"); + addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("SKIP300"); } const std::string SKIP300::keywordName = "SKIP300"; -SKIPREST::SKIPREST( ) : ParserKeyword("SKIPREST") -{ - setFixedSize( (size_t) 0); +SKIPREST::SKIPREST() : ParserKeyword("SKIPREST", KeywordSize(0, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("SKIPREST"); @@ -986,9 +1135,7 @@ SKIPREST::SKIPREST( ) : ParserKeyword("SKIPREST") const std::string SKIPREST::keywordName = "SKIPREST"; -SKPRPOLY::SKPRPOLY( ) : ParserKeyword("SKPRPOLY") -{ - setSizeType(SLASH_TERMINATED); +SKPRPOLY::SKPRPOLY() : ParserKeyword("SKPRPOLY", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("SKPRPOLY"); @@ -1044,9 +1191,7 @@ const std::string SKPRPOLY::VELOCITY::itemName = "VELOCITY"; const std::string SKPRPOLY::SKINPRESSURE::itemName = "SKINPRESSURE"; -SKPRWAT::SKPRWAT( ) : ParserKeyword("SKPRWAT") -{ - setSizeType(SLASH_TERMINATED); +SKPRWAT::SKPRWAT() : ParserKeyword("SKPRWAT", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("SKPRWAT"); @@ -1096,9 +1241,7 @@ const std::string SKPRWAT::VELOCITY::itemName = "VELOCITY"; const std::string SKPRWAT::SKINPRESSURE::itemName = "SKINPRESSURE"; -SKRO::SKRO( ) : ParserKeyword("SKRO") -{ - setFixedSize( (size_t) 1); +SKRO::SKRO() : ParserKeyword("SKRO", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("SKRO"); @@ -1116,9 +1259,7 @@ const std::string SKRO::keywordName = "SKRO"; const std::string SKRO::data::itemName = "data"; -SKRORG::SKRORG( ) : ParserKeyword("SKRORG") -{ - setFixedSize( (size_t) 1); +SKRORG::SKRORG() : ParserKeyword("SKRORG", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("SKRORG"); @@ -1136,9 +1277,7 @@ const std::string SKRORG::keywordName = "SKRORG"; const std::string SKRORG::data::itemName = "data"; -SKRORW::SKRORW( ) : ParserKeyword("SKRORW") -{ - setFixedSize( (size_t) 1); +SKRORW::SKRORW() : ParserKeyword("SKRORW", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("SKRORW"); @@ -1156,9 +1295,7 @@ const std::string SKRORW::keywordName = "SKRORW"; const std::string SKRORW::data::itemName = "data"; -SKRW::SKRW( ) : ParserKeyword("SKRW") -{ - setFixedSize( (size_t) 1); +SKRW::SKRW() : ParserKeyword("SKRW", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("SKRW"); @@ -1176,9 +1313,7 @@ const std::string SKRW::keywordName = "SKRW"; const std::string SKRW::data::itemName = "data"; -SKRWR::SKRWR( ) : ParserKeyword("SKRWR") -{ - setFixedSize( (size_t) 1); +SKRWR::SKRWR() : ParserKeyword("SKRWR", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("SKRWR"); @@ -1196,9 +1331,7 @@ const std::string SKRWR::keywordName = "SKRWR"; const std::string SKRWR::data::itemName = "data"; -SLAVES::SLAVES( ) : ParserKeyword("SLAVES") -{ - setSizeType(SLASH_TERMINATED); +SLAVES::SLAVES() : ParserKeyword("SLAVES", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("SLAVES"); @@ -1237,11 +1370,14 @@ const std::string SLAVES::NUM_PE::itemName = "NUM_PE"; const int SLAVES::NUM_PE::defaultValue = 1; -SLGOF::SLGOF( ) : ParserKeyword("SLGOF") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTSFUN",0); +SLGOF::SLGOF() : ParserKeyword("SLGOF", KeywordSize("TABDIMS", "NTSFUN", false, 0)) { addValidSectionName("PROPS"); + setProhibitedKeywords({ + "SGOF", + }); + setRequiredKeywords({ + "GAS", + }); clearDeckNames(); addDeckName("SLGOF"); { @@ -1262,9 +1398,26 @@ const std::string SLGOF::keywordName = "SLGOF"; const std::string SLGOF::DATA::itemName = "DATA"; -SMRYDIMS::SMRYDIMS( ) : ParserKeyword("SMRYDIMS") -{ - setFixedSize( (size_t) 1); +SMICR::SMICR() : ParserKeyword("SMICR", KeywordSize(1, false)) { + addValidSectionName("SOLUTION"); + clearDeckNames(); + addDeckName("SMICR"); + { + ParserRecord record; + { + ParserItem item("data", ParserItem::itype::DOUBLE); + item.setSizeType(ParserItem::item_size::ALL); + item.push_backDimension("Density"); + record.addDataItem(item); + } + addDataRecord( record ); + } +} +const std::string SMICR::keywordName = "SMICR"; +const std::string SMICR::data::itemName = "data"; + + +SMRYDIMS::SMRYDIMS() : ParserKeyword("SMRYDIMS", KeywordSize(1, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("SMRYDIMS"); @@ -1283,9 +1436,7 @@ const std::string SMRYDIMS::DIMS::itemName = "DIMS"; const int SMRYDIMS::DIMS::defaultValue = 10000; -SMULTX::SMULTX( ) : ParserKeyword("SMULTX") -{ - setFixedSize( (size_t) 1); +SMULTX::SMULTX() : ParserKeyword("SMULTX", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("SMULTX"); @@ -1303,9 +1454,7 @@ const std::string SMULTX::keywordName = "SMULTX"; const std::string SMULTX::data::itemName = "data"; -SMULTY::SMULTY( ) : ParserKeyword("SMULTY") -{ - setFixedSize( (size_t) 1); +SMULTY::SMULTY() : ParserKeyword("SMULTY", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("SMULTY"); @@ -1323,9 +1472,7 @@ const std::string SMULTY::keywordName = "SMULTY"; const std::string SMULTY::data::itemName = "data"; -SMULTZ::SMULTZ( ) : ParserKeyword("SMULTZ") -{ - setFixedSize( (size_t) 1); +SMULTZ::SMULTZ() : ParserKeyword("SMULTZ", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("SMULTZ"); @@ -1343,9 +1490,7 @@ const std::string SMULTZ::keywordName = "SMULTZ"; const std::string SMULTZ::data::itemName = "data"; -SOCRS::SOCRS( ) : ParserKeyword("SOCRS") -{ - setFixedSize( (size_t) 1); +SOCRS::SOCRS() : ParserKeyword("SOCRS", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("SOCRS"); @@ -1363,11 +1508,11 @@ const std::string SOCRS::keywordName = "SOCRS"; const std::string SOCRS::data::itemName = "data"; -SOF2::SOF2( ) : ParserKeyword("SOF2") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTSFUN",0); +SOF2::SOF2() : ParserKeyword("SOF2", KeywordSize("TABDIMS", "NTSFUN", false, 0)) { addValidSectionName("PROPS"); + setRequiredKeywords({ + "OIL", + }); clearDeckNames(); addDeckName("SOF2"); { @@ -1386,11 +1531,13 @@ const std::string SOF2::keywordName = "SOF2"; const std::string SOF2::DATA::itemName = "DATA"; -SOF3::SOF3( ) : ParserKeyword("SOF3") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTSFUN",0); +SOF3::SOF3() : ParserKeyword("SOF3", KeywordSize("TABDIMS", "NTSFUN", false, 0)) { addValidSectionName("PROPS"); + setRequiredKeywords({ + "OIL", + "GAS", + "WATER", + }); clearDeckNames(); addDeckName("SOF3"); { @@ -1410,16 +1557,14 @@ const std::string SOF3::keywordName = "SOF3"; const std::string SOF3::DATA::itemName = "DATA"; -SOF32D::SOF32D( ) : ParserKeyword("SOF32D") -{ - setSizeType(SLASH_TERMINATED); +SOF32D::SOF32D() : ParserKeyword("SOF32D", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("SOF32D"); { ParserRecord record; { - ParserItem item("SOIL", ParserItem::itype::DOUBLE); + ParserItem item("SWAT", ParserItem::itype::DOUBLE); item.setSizeType(ParserItem::item_size::ALL); item.push_backDimension("1"); record.addItem(item); @@ -1434,7 +1579,7 @@ SOF32D::SOF32D( ) : ParserKeyword("SOF32D") record.addItem(item); } { - ParserItem item("KRW", ParserItem::itype::DOUBLE); + ParserItem item("KRO", ParserItem::itype::DOUBLE); item.push_backDimension("1"); record.addItem(item); } @@ -1442,15 +1587,18 @@ SOF32D::SOF32D( ) : ParserKeyword("SOF32D") } } const std::string SOF32D::keywordName = "SOF32D"; -const std::string SOF32D::SOIL::itemName = "SOIL"; +const std::string SOF32D::SWAT::itemName = "SWAT"; const std::string SOF32D::SGAS::itemName = "SGAS"; -const std::string SOF32D::KRW::itemName = "KRW"; +const std::string SOF32D::KRO::itemName = "KRO"; -SOGCR::SOGCR( ) : ParserKeyword("SOGCR") -{ - setFixedSize( (size_t) 1); +SOGCR::SOGCR() : ParserKeyword("SOGCR", KeywordSize(1, false)) { addValidSectionName("PROPS"); + setRequiredKeywords({ + "GAS", + "OIL", + "ENDSCALE", + }); clearDeckNames(); addDeckName("SOGCR"); { @@ -1468,9 +1616,7 @@ const std::string SOGCR::keywordName = "SOGCR"; const std::string SOGCR::data::itemName = "data"; -SOIL::SOIL( ) : ParserKeyword("SOIL") -{ - setFixedSize( (size_t) 1); +SOIL::SOIL() : ParserKeyword("SOIL", KeywordSize(1, false)) { addValidSectionName("SOLUTION"); clearDeckNames(); addDeckName("SOIL"); @@ -1489,18 +1635,14 @@ const std::string SOIL::keywordName = "SOIL"; const std::string SOIL::data::itemName = "data"; -SOLUTION::SOLUTION( ) : ParserKeyword("SOLUTION") -{ - setFixedSize( (size_t) 0); +SOLUTION::SOLUTION() : ParserKeyword("SOLUTION", KeywordSize(0, false)) { clearDeckNames(); addDeckName("SOLUTION"); } const std::string SOLUTION::keywordName = "SOLUTION"; -SOLVCONC::SOLVCONC( ) : ParserKeyword("SOLVCONC") -{ - setFixedSize( (size_t) 1); +SOLVCONC::SOLVCONC() : ParserKeyword("SOLVCONC", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("SOLVCONC"); @@ -1519,11 +1661,9 @@ const std::string SOLVCONC::keywordName = "SOLVCONC"; const std::string SOLVCONC::data::itemName = "data"; -SOLVDIMS::SOLVDIMS( ) : ParserKeyword("SOLVDIMS") -{ - setFixedSize( (size_t) 1); - addValidSectionName("GRID"); +SOLVDIMS::SOLVDIMS() : ParserKeyword("SOLVDIMS", KeywordSize(1, false)) { addValidSectionName("RUNSPEC"); + addValidSectionName("GRID"); clearDeckNames(); addDeckName("SOLVDIMS"); { @@ -1540,9 +1680,7 @@ const std::string SOLVDIMS::keywordName = "SOLVDIMS"; const std::string SOLVDIMS::data::itemName = "data"; -SOLVDIRS::SOLVDIRS( ) : ParserKeyword("SOLVDIRS") -{ - setSizeType(SLASH_TERMINATED); +SOLVDIRS::SOLVDIRS() : ParserKeyword("SOLVDIRS", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("SOLVDIRS"); @@ -1559,9 +1697,7 @@ const std::string SOLVDIRS::keywordName = "SOLVDIRS"; const std::string SOLVDIRS::DIRECTION::itemName = "DIRECTION"; -SOLVENT::SOLVENT( ) : ParserKeyword("SOLVENT") -{ - setFixedSize( (size_t) 0); +SOLVENT::SOLVENT() : ParserKeyword("SOLVENT", KeywordSize(0, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("SOLVENT"); @@ -1569,9 +1705,7 @@ SOLVENT::SOLVENT( ) : ParserKeyword("SOLVENT") const std::string SOLVENT::keywordName = "SOLVENT"; -SOLVFRAC::SOLVFRAC( ) : ParserKeyword("SOLVFRAC") -{ - setFixedSize( (size_t) 1); +SOLVFRAC::SOLVFRAC() : ParserKeyword("SOLVFRAC", KeywordSize(1, false)) { addValidSectionName("SOLUTION"); clearDeckNames(); addDeckName("SOLVFRAC"); @@ -1589,9 +1723,7 @@ const std::string SOLVFRAC::keywordName = "SOLVFRAC"; const std::string SOLVFRAC::data::itemName = "data"; -SOLVNUM::SOLVNUM( ) : ParserKeyword("SOLVNUM") -{ - setFixedSize( (size_t) 1); +SOLVNUM::SOLVNUM() : ParserKeyword("SOLVNUM", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("SOLVNUM"); @@ -1609,10 +1741,7 @@ const std::string SOLVNUM::keywordName = "SOLVNUM"; const std::string SOLVNUM::data::itemName = "data"; -SOMGAS::SOMGAS( ) : ParserKeyword("SOMGAS") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTSFUN",0); +SOMGAS::SOMGAS() : ParserKeyword("SOMGAS", KeywordSize("TABDIMS", "NTSFUN", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("SOMGAS"); @@ -1632,10 +1761,7 @@ const std::string SOMGAS::keywordName = "SOMGAS"; const std::string SOMGAS::DATA::itemName = "DATA"; -SOMWAT::SOMWAT( ) : ParserKeyword("SOMWAT") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTSFUN",0); +SOMWAT::SOMWAT() : ParserKeyword("SOMWAT", KeywordSize("TABDIMS", "NTSFUN", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("SOMWAT"); @@ -1655,10 +1781,7 @@ const std::string SOMWAT::keywordName = "SOMWAT"; const std::string SOMWAT::DATA::itemName = "DATA"; -SORWMIS::SORWMIS( ) : ParserKeyword("SORWMIS") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("MISCIBLE","NTMISC",0); +SORWMIS::SORWMIS() : ParserKeyword("SORWMIS", KeywordSize("MISCIBLE", "NTMISC", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("SORWMIS"); @@ -1678,10 +1801,13 @@ const std::string SORWMIS::keywordName = "SORWMIS"; const std::string SORWMIS::DATA::itemName = "DATA"; -SOWCR::SOWCR( ) : ParserKeyword("SOWCR") -{ - setFixedSize( (size_t) 1); +SOWCR::SOWCR() : ParserKeyword("SOWCR", KeywordSize(1, false)) { addValidSectionName("PROPS"); + setRequiredKeywords({ + "OIL", + "WATER", + "ENDSCALE", + }); clearDeckNames(); addDeckName("SOWCR"); { @@ -1699,9 +1825,26 @@ const std::string SOWCR::keywordName = "SOWCR"; const std::string SOWCR::data::itemName = "data"; -SPECGRID::SPECGRID( ) : ParserKeyword("SPECGRID") -{ - setFixedSize( (size_t) 1); +SOXYG::SOXYG() : ParserKeyword("SOXYG", KeywordSize(1, false)) { + addValidSectionName("SOLUTION"); + clearDeckNames(); + addDeckName("SOXYG"); + { + ParserRecord record; + { + ParserItem item("data", ParserItem::itype::DOUBLE); + item.setSizeType(ParserItem::item_size::ALL); + item.push_backDimension("Density"); + record.addDataItem(item); + } + addDataRecord( record ); + } +} +const std::string SOXYG::keywordName = "SOXYG"; +const std::string SOXYG::data::itemName = "data"; + + +SPECGRID::SPECGRID() : ParserKeyword("SPECGRID", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("SPECGRID"); @@ -1748,10 +1891,7 @@ const std::string SPECGRID::COORD_TYPE::itemName = "COORD_TYPE"; const std::string SPECGRID::COORD_TYPE::defaultValue = "F"; -SPECHEAT::SPECHEAT( ) : ParserKeyword("SPECHEAT") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTPVT",0); +SPECHEAT::SPECHEAT() : ParserKeyword("SPECHEAT", KeywordSize("TABDIMS", "NTPVT", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("SPECHEAT"); @@ -1773,10 +1913,7 @@ const std::string SPECHEAT::keywordName = "SPECHEAT"; const std::string SPECHEAT::DATA::itemName = "DATA"; -SPECROCK::SPECROCK( ) : ParserKeyword("SPECROCK") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTSFUN",0); +SPECROCK::SPECROCK() : ParserKeyword("SPECROCK", KeywordSize("TABDIMS", "NTSFUN", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("SPECROCK"); @@ -1796,9 +1933,15 @@ const std::string SPECROCK::keywordName = "SPECROCK"; const std::string SPECROCK::DATA::itemName = "DATA"; -SPOLY::SPOLY( ) : ParserKeyword("SPOLY") -{ - setFixedSize( (size_t) 1); +SPIDER::SPIDER() : ParserKeyword("SPIDER", KeywordSize(0, false)) { + addValidSectionName("RUNSPEC"); + clearDeckNames(); + addDeckName("SPIDER"); +} +const std::string SPIDER::keywordName = "SPIDER"; + + +SPOLY::SPOLY() : ParserKeyword("SPOLY", KeywordSize(1, false)) { addValidSectionName("SOLUTION"); addValidSectionName("SPECIAL"); clearDeckNames(); @@ -1818,9 +1961,7 @@ const std::string SPOLY::keywordName = "SPOLY"; const std::string SPOLY::data::itemName = "data"; -SPOLYMW::SPOLYMW( ) : ParserKeyword("SPOLYMW") -{ - setFixedSize( (size_t) 1); +SPOLYMW::SPOLYMW() : ParserKeyword("SPOLYMW", KeywordSize(1, false)) { addValidSectionName("SOLUTION"); clearDeckNames(); addDeckName("SPOLYMW"); @@ -1839,10 +1980,7 @@ const std::string SPOLYMW::keywordName = "SPOLYMW"; const std::string SPOLYMW::data::itemName = "data"; -SSFN::SSFN( ) : ParserKeyword("SSFN") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTSFUN",0); +SSFN::SSFN() : ParserKeyword("SSFN", KeywordSize("TABDIMS", "NTSFUN", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("SSFN"); @@ -1863,9 +2001,7 @@ const std::string SSFN::keywordName = "SSFN"; const std::string SSFN::DATA::itemName = "DATA"; -SSGCR::SSGCR( ) : ParserKeyword("SSGCR") -{ - setFixedSize( (size_t) 1); +SSGCR::SSGCR() : ParserKeyword("SSGCR", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("SSGCR"); @@ -1883,9 +2019,7 @@ const std::string SSGCR::keywordName = "SSGCR"; const std::string SSGCR::data::itemName = "data"; -SSGL::SSGL( ) : ParserKeyword("SSGL") -{ - setFixedSize( (size_t) 1); +SSGL::SSGL() : ParserKeyword("SSGL", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("SSGL"); @@ -1903,9 +2037,7 @@ const std::string SSGL::keywordName = "SSGL"; const std::string SSGL::data::itemName = "data"; -SSOGCR::SSOGCR( ) : ParserKeyword("SSOGCR") -{ - setFixedSize( (size_t) 1); +SSOGCR::SSOGCR() : ParserKeyword("SSOGCR", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("SSOGCR"); @@ -1923,9 +2055,7 @@ const std::string SSOGCR::keywordName = "SSOGCR"; const std::string SSOGCR::data::itemName = "data"; -SSOL::SSOL( ) : ParserKeyword("SSOL") -{ - setFixedSize( (size_t) 1); +SSOL::SSOL() : ParserKeyword("SSOL", KeywordSize(1, false)) { addValidSectionName("SOLUTION"); clearDeckNames(); addDeckName("SSOL"); @@ -1944,9 +2074,7 @@ const std::string SSOL::keywordName = "SSOL"; const std::string SSOL::data::itemName = "data"; -SSOWCR::SSOWCR( ) : ParserKeyword("SSOWCR") -{ - setFixedSize( (size_t) 1); +SSOWCR::SSOWCR() : ParserKeyword("SSOWCR", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("SSOWCR"); @@ -1964,9 +2092,25 @@ const std::string SSOWCR::keywordName = "SSOWCR"; const std::string SSOWCR::data::itemName = "data"; -SSWL::SSWL( ) : ParserKeyword("SSWL") -{ - setFixedSize( (size_t) 1); +SSWCR::SSWCR() : ParserKeyword("SSWCR", KeywordSize(1, false)) { + addValidSectionName("PROPS"); + clearDeckNames(); + addDeckName("SSWCR"); + { + ParserRecord record; + { + ParserItem item("data", ParserItem::itype::DOUBLE); + item.setSizeType(ParserItem::item_size::ALL); + record.addDataItem(item); + } + addDataRecord( record ); + } +} +const std::string SSWCR::keywordName = "SSWCR"; +const std::string SSWCR::data::itemName = "data"; + + +SSWL::SSWL() : ParserKeyword("SSWL", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("SSWL"); @@ -1984,9 +2128,7 @@ const std::string SSWL::keywordName = "SSWL"; const std::string SSWL::data::itemName = "data"; -SSWU::SSWU( ) : ParserKeyword("SSWU") -{ - setFixedSize( (size_t) 1); +SSWU::SSWU() : ParserKeyword("SSWU", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("SSWU"); @@ -2004,9 +2146,7 @@ const std::string SSWU::keywordName = "SSWU"; const std::string SSWU::data::itemName = "data"; -START::START( ) : ParserKeyword("START") -{ - setFixedSize( (size_t) 1); +START::START() : ParserKeyword("START", KeywordSize(1, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("START"); @@ -2046,9 +2186,7 @@ const std::string START::TIME::itemName = "TIME"; const std::string START::TIME::defaultValue = "00:00:00.000"; -STCOND::STCOND( ) : ParserKeyword("STCOND") -{ - setFixedSize( (size_t) 1); +STCOND::STCOND() : ParserKeyword("STCOND", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("STCOND"); @@ -2076,10 +2214,7 @@ const std::string STCOND::PRESSURE::itemName = "PRESSURE"; const double STCOND::PRESSURE::defaultValue = 1.013250; -STOG::STOG( ) : ParserKeyword("STOG") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTPVT",0); +STOG::STOG() : ParserKeyword("STOG", KeywordSize("TABDIMS", "NTPVT", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("STOG"); @@ -2110,9 +2245,7 @@ const std::string STOG::REF_OIL_PHASE_PRESSURE::itemName = "REF_OIL_PHASE_PRESSU const std::string STOG::table::itemName = "table"; -STONE::STONE( ) : ParserKeyword("STONE") -{ - setFixedSize( (size_t) 0); +STONE::STONE() : ParserKeyword("STONE", KeywordSize(0, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("STONE"); @@ -2120,9 +2253,7 @@ STONE::STONE( ) : ParserKeyword("STONE") const std::string STONE::keywordName = "STONE"; -STONE1::STONE1( ) : ParserKeyword("STONE1") -{ - setFixedSize( (size_t) 0); +STONE1::STONE1() : ParserKeyword("STONE1", KeywordSize(0, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("STONE1"); @@ -2130,10 +2261,7 @@ STONE1::STONE1( ) : ParserKeyword("STONE1") const std::string STONE1::keywordName = "STONE1"; -STONE1EX::STONE1EX( ) : ParserKeyword("STONE1EX") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTSFUN",0); +STONE1EX::STONE1EX() : ParserKeyword("STONE1EX", KeywordSize("TABDIMS", "NTSFUN", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("STONE1EX"); @@ -2153,9 +2281,7 @@ const std::string STONE1EX::EXP_VALUE::itemName = "EXP_VALUE"; const double STONE1EX::EXP_VALUE::defaultValue = 1.000000; -STONE2::STONE2( ) : ParserKeyword("STONE2") -{ - setFixedSize( (size_t) 0); +STONE2::STONE2() : ParserKeyword("STONE2", KeywordSize(0, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("STONE2"); @@ -2163,10 +2289,7 @@ STONE2::STONE2( ) : ParserKeyword("STONE2") const std::string STONE2::keywordName = "STONE2"; -STOW::STOW( ) : ParserKeyword("STOW") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTPVT",0); +STOW::STOW() : ParserKeyword("STOW", KeywordSize("TABDIMS", "NTPVT", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("STOW"); @@ -2197,10 +2320,7 @@ const std::string STOW::REF_OIL_PRESSURE::itemName = "REF_OIL_PRESSURE"; const std::string STOW::table::itemName = "table"; -STWG::STWG( ) : ParserKeyword("STWG") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTPVT",0); +STWG::STWG() : ParserKeyword("STWG", KeywordSize("TABDIMS", "NTPVT", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("STWG"); @@ -2231,20 +2351,16 @@ const std::string STWG::REF_OIL_PRESSURE::itemName = "REF_OIL_PRESSURE"; const std::string STWG::table::itemName = "table"; -SUMMARY::SUMMARY( ) : ParserKeyword("SUMMARY") -{ - setFixedSize( (size_t) 0); +SUMMARY::SUMMARY() : ParserKeyword("SUMMARY", KeywordSize(0, false)) { clearDeckNames(); addDeckName("SUMMARY"); } const std::string SUMMARY::keywordName = "SUMMARY"; -SUMTHIN::SUMTHIN( ) : ParserKeyword("SUMTHIN") -{ - setFixedSize( (size_t) 1); - addValidSectionName("SCHEDULE"); +SUMTHIN::SUMTHIN() : ParserKeyword("SUMTHIN", KeywordSize(1, false)) { addValidSectionName("SUMMARY"); + addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("SUMTHIN"); { @@ -2261,9 +2377,26 @@ const std::string SUMTHIN::keywordName = "SUMTHIN"; const std::string SUMTHIN::TIME::itemName = "TIME"; -SURF::SURF( ) : ParserKeyword("SURF") -{ - setFixedSize( (size_t) 1); +SUREA::SUREA() : ParserKeyword("SUREA", KeywordSize(1, false)) { + addValidSectionName("SOLUTION"); + clearDeckNames(); + addDeckName("SUREA"); + { + ParserRecord record; + { + ParserItem item("data", ParserItem::itype::DOUBLE); + item.setSizeType(ParserItem::item_size::ALL); + item.push_backDimension("Density"); + record.addDataItem(item); + } + addDataRecord( record ); + } +} +const std::string SUREA::keywordName = "SUREA"; +const std::string SUREA::data::itemName = "data"; + + +SURF::SURF() : ParserKeyword("SURF", KeywordSize(1, false)) { addValidSectionName("SOLUTION"); clearDeckNames(); addDeckName("SURF"); @@ -2282,9 +2415,7 @@ const std::string SURF::keywordName = "SURF"; const std::string SURF::data::itemName = "data"; -SURFACT::SURFACT( ) : ParserKeyword("SURFACT") -{ - setFixedSize( (size_t) 0); +SURFACT::SURFACT() : ParserKeyword("SURFACT", KeywordSize(0, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("SURFACT"); @@ -2292,9 +2423,7 @@ SURFACT::SURFACT( ) : ParserKeyword("SURFACT") const std::string SURFACT::keywordName = "SURFACT"; -SURFACTW::SURFACTW( ) : ParserKeyword("SURFACTW") -{ - setFixedSize( (size_t) 0); +SURFACTW::SURFACTW() : ParserKeyword("SURFACTW", KeywordSize(0, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("SURFACTW"); @@ -2302,10 +2431,7 @@ SURFACTW::SURFACTW( ) : ParserKeyword("SURFACTW") const std::string SURFACTW::keywordName = "SURFACTW"; -SURFADDW::SURFADDW( ) : ParserKeyword("SURFADDW") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTSFUN",0); +SURFADDW::SURFADDW() : ParserKeyword("SURFADDW", KeywordSize("TABDIMS", "NTSFUN", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("SURFADDW"); @@ -2325,13 +2451,30 @@ const std::string SURFADDW::keywordName = "SURFADDW"; const std::string SURFADDW::DATA::itemName = "DATA"; -SURFADS::SURFADS( ) : ParserKeyword("SURFADS") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTSFUN",0); +SURFADS::SURFADS() : ParserKeyword("SURFADS", KeywordSize("TABDIMS", "NTSFUN", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("SURFADS"); + { + ParserRecord record; + { + ParserItem item("DATA", ParserItem::itype::DOUBLE); + item.setSizeType(ParserItem::item_size::ALL); + item.push_backDimension("Mass/Length*Length*Length"); + item.push_backDimension("1"); + record.addItem(item); + } + addRecord( record ); + } +} +const std::string SURFADS::keywordName = "SURFADS"; +const std::string SURFADS::DATA::itemName = "DATA"; + + +SURFCAPD::SURFCAPD() : ParserKeyword("SURFCAPD", KeywordSize("TABDIMS", "NTSFUN", false, 0)) { + addValidSectionName("PROPS"); + clearDeckNames(); + addDeckName("SURFCAPD"); { ParserRecord record; { @@ -2344,14 +2487,11 @@ SURFADS::SURFADS( ) : ParserKeyword("SURFADS") addRecord( record ); } } -const std::string SURFADS::keywordName = "SURFADS"; -const std::string SURFADS::DATA::itemName = "DATA"; +const std::string SURFCAPD::keywordName = "SURFCAPD"; +const std::string SURFCAPD::DATA::itemName = "DATA"; -SURFESAL::SURFESAL( ) : ParserKeyword("SURFESAL") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTSFUN",0); +SURFESAL::SURFESAL() : ParserKeyword("SURFESAL", KeywordSize("TABDIMS", "NTSFUN", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("SURFESAL"); @@ -2369,9 +2509,7 @@ const std::string SURFESAL::keywordName = "SURFESAL"; const std::string SURFESAL::COEFF::itemName = "COEFF"; -SURFNUM::SURFNUM( ) : ParserKeyword("SURFNUM") -{ - setFixedSize( (size_t) 1); +SURFNUM::SURFNUM() : ParserKeyword("SURFNUM", KeywordSize(1, false)) { addValidSectionName("REGIONS"); clearDeckNames(); addDeckName("SURFNUM"); @@ -2389,9 +2527,7 @@ const std::string SURFNUM::keywordName = "SURFNUM"; const std::string SURFNUM::data::itemName = "data"; -SURFOPTS::SURFOPTS( ) : ParserKeyword("SURFOPTS") -{ - setFixedSize( (size_t) 1); +SURFOPTS::SURFOPTS() : ParserKeyword("SURFOPTS", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("SURFOPTS"); @@ -2412,15 +2548,12 @@ SURFOPTS::SURFOPTS( ) : ParserKeyword("SURFOPTS") } const std::string SURFOPTS::keywordName = "SURFOPTS"; const std::string SURFOPTS::MIN_SWAT::itemName = "MIN_SWAT"; -const double SURFOPTS::MIN_SWAT::defaultValue = 0.000001; +const double SURFOPTS::MIN_SWAT::defaultValue = 1e-06; const std::string SURFOPTS::SMOOTHING::itemName = "SMOOTHING"; -const double SURFOPTS::SMOOTHING::defaultValue = 0.000001; +const double SURFOPTS::SMOOTHING::defaultValue = 1e-06; -SURFROCK::SURFROCK( ) : ParserKeyword("SURFROCK") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTSFUN",0); +SURFROCK::SURFROCK() : ParserKeyword("SURFROCK", KeywordSize("TABDIMS", "NTSFUN", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("SURFROCK"); @@ -2443,10 +2576,7 @@ const std::string SURFROCK::INDEX::itemName = "INDEX"; const std::string SURFROCK::MASS_DENSITY::itemName = "MASS_DENSITY"; -SURFST::SURFST( ) : ParserKeyword("SURFST") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTPVT",0); +SURFST::SURFST() : ParserKeyword("SURFST", KeywordSize("TABDIMS", "NTPVT", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("SURFST"); @@ -2464,10 +2594,7 @@ const std::string SURFST::keywordName = "SURFST"; const std::string SURFST::DATA::itemName = "DATA"; -SURFSTES::SURFSTES( ) : ParserKeyword("SURFSTES") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTPVT",0); +SURFSTES::SURFSTES() : ParserKeyword("SURFSTES", KeywordSize("TABDIMS", "NTPVT", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("SURFSTES"); @@ -2485,10 +2612,7 @@ const std::string SURFSTES::keywordName = "SURFSTES"; const std::string SURFSTES::DATA::itemName = "DATA"; -SURFVISC::SURFVISC( ) : ParserKeyword("SURFVISC") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTPVT",0); +SURFVISC::SURFVISC() : ParserKeyword("SURFVISC", KeywordSize("TABDIMS", "NTPVT", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("SURFVISC"); @@ -2508,9 +2632,7 @@ const std::string SURFVISC::keywordName = "SURFVISC"; const std::string SURFVISC::DATA::itemName = "DATA"; -SURFWNUM::SURFWNUM( ) : ParserKeyword("SURFWNUM") -{ - setFixedSize( (size_t) 1); +SURFWNUM::SURFWNUM() : ParserKeyword("SURFWNUM", KeywordSize(1, false)) { addValidSectionName("REGIONS"); clearDeckNames(); addDeckName("SURFWNUM"); @@ -2528,9 +2650,7 @@ const std::string SURFWNUM::keywordName = "SURFWNUM"; const std::string SURFWNUM::data::itemName = "data"; -SWAT::SWAT( ) : ParserKeyword("SWAT") -{ - setFixedSize( (size_t) 1); +SWAT::SWAT() : ParserKeyword("SWAT", KeywordSize(1, false)) { addValidSectionName("SOLUTION"); clearDeckNames(); addDeckName("SWAT"); @@ -2549,9 +2669,7 @@ const std::string SWAT::keywordName = "SWAT"; const std::string SWAT::data::itemName = "data"; -SWATINIT::SWATINIT( ) : ParserKeyword("SWATINIT") -{ - setFixedSize( (size_t) 1); +SWATINIT::SWATINIT() : ParserKeyword("SWATINIT", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("SWATINIT"); @@ -2570,9 +2688,7 @@ const std::string SWATINIT::keywordName = "SWATINIT"; const std::string SWATINIT::data::itemName = "data"; -SWCR::SWCR( ) : ParserKeyword("SWCR") -{ - setFixedSize( (size_t) 1); +SWCR::SWCR() : ParserKeyword("SWCR", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("SWCR"); @@ -2591,12 +2707,47 @@ const std::string SWCR::keywordName = "SWCR"; const std::string SWCR::data::itemName = "data"; -SWFN::SWFN( ) : ParserKeyword("SWFN") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTSFUN",0); +SWF32D::SWF32D() : ParserKeyword("SWF32D", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("PROPS"); clearDeckNames(); + addDeckName("SWF32D"); + { + ParserRecord record; + { + ParserItem item("SOIL", ParserItem::itype::DOUBLE); + item.setSizeType(ParserItem::item_size::ALL); + item.push_backDimension("1"); + record.addItem(item); + } + addRecord( record ); + } + { + ParserRecord record; + { + ParserItem item("SGAS", ParserItem::itype::DOUBLE); + item.push_backDimension("1"); + record.addItem(item); + } + { + ParserItem item("KRW", ParserItem::itype::DOUBLE); + item.push_backDimension("1"); + record.addItem(item); + } + addRecord( record ); + } +} +const std::string SWF32D::keywordName = "SWF32D"; +const std::string SWF32D::SOIL::itemName = "SOIL"; +const std::string SWF32D::SGAS::itemName = "SGAS"; +const std::string SWF32D::KRW::itemName = "KRW"; + + +SWFN::SWFN() : ParserKeyword("SWFN", KeywordSize("TABDIMS", "NTSFUN", false, 0)) { + addValidSectionName("PROPS"); + setRequiredKeywords({ + "WATER", + }); + clearDeckNames(); addDeckName("SWFN"); { ParserRecord record; @@ -2615,9 +2766,7 @@ const std::string SWFN::keywordName = "SWFN"; const std::string SWFN::DATA::itemName = "DATA"; -SWINGFAC::SWINGFAC( ) : ParserKeyword("SWINGFAC") -{ - setFixedSize( (size_t) 1); +SWINGFAC::SWINGFAC() : ParserKeyword("SWINGFAC", KeywordSize(1, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("SWINGFAC"); @@ -2749,9 +2898,7 @@ const std::string SWINGFAC::PROFILE_FACTOR11::itemName = "PROFILE_FACTOR11"; const std::string SWINGFAC::PROFILE_FACTOR12::itemName = "PROFILE_FACTOR12"; -SWL::SWL( ) : ParserKeyword("SWL") -{ - setFixedSize( (size_t) 1); +SWL::SWL() : ParserKeyword("SWL", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("SWL"); @@ -2770,9 +2917,7 @@ const std::string SWL::keywordName = "SWL"; const std::string SWL::data::itemName = "data"; -SWLPC::SWLPC( ) : ParserKeyword("SWLPC") -{ - setFixedSize( (size_t) 1); +SWLPC::SWLPC() : ParserKeyword("SWLPC", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("SWLPC"); @@ -2791,11 +2936,12 @@ const std::string SWLPC::keywordName = "SWLPC"; const std::string SWLPC::data::itemName = "data"; -SWOF::SWOF( ) : ParserKeyword("SWOF") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTSFUN",0); +SWOF::SWOF() : ParserKeyword("SWOF", KeywordSize("TABDIMS", "NTSFUN", false, 0)) { addValidSectionName("PROPS"); + setRequiredKeywords({ + "OIL", + "WATER", + }); clearDeckNames(); addDeckName("SWOF"); { @@ -2816,9 +2962,159 @@ const std::string SWOF::keywordName = "SWOF"; const std::string SWOF::DATA::itemName = "DATA"; -SWU::SWU( ) : ParserKeyword("SWU") -{ - setFixedSize( (size_t) 1); +SWOFLET::SWOFLET() : ParserKeyword("SWOFLET", KeywordSize("TABDIMS", "NTSFUN", false, 0)) { + addValidSectionName("PROPS"); + setRequiredKeywords({ + "OIL", + "WATER", + }); + clearDeckNames(); + addDeckName("SWOFLET"); + { + ParserRecord record; + { + ParserItem item("SW_RESIDUAL", ParserItem::itype::DOUBLE); + item.setDefault( double(0) ); + item.push_backDimension("1"); + record.addItem(item); + } + { + ParserItem item("SW_CRITICAL", ParserItem::itype::DOUBLE); + item.setDefault( double(0) ); + item.push_backDimension("1"); + record.addItem(item); + } + { + ParserItem item("L_WATER", ParserItem::itype::DOUBLE); + item.setDefault( double(1.000000) ); + item.push_backDimension("1"); + record.addItem(item); + } + { + ParserItem item("E_WATER", ParserItem::itype::DOUBLE); + item.setDefault( double(1.000000) ); + item.push_backDimension("1"); + record.addItem(item); + } + { + ParserItem item("T_WATER", ParserItem::itype::DOUBLE); + item.setDefault( double(1.000000) ); + item.push_backDimension("1"); + record.addItem(item); + } + { + ParserItem item("KRT_WATER", ParserItem::itype::DOUBLE); + item.setDefault( double(1.000000) ); + item.push_backDimension("1"); + record.addItem(item); + } + { + ParserItem item("SO_RESIDUAL", ParserItem::itype::DOUBLE); + item.setDefault( double(0) ); + item.push_backDimension("1"); + record.addItem(item); + } + { + ParserItem item("SO_CRITICAL", ParserItem::itype::DOUBLE); + item.setDefault( double(0) ); + item.push_backDimension("1"); + record.addItem(item); + } + { + ParserItem item("L_OIL", ParserItem::itype::DOUBLE); + item.setDefault( double(1.000000) ); + item.push_backDimension("1"); + record.addItem(item); + } + { + ParserItem item("E_OIL", ParserItem::itype::DOUBLE); + item.setDefault( double(1.000000) ); + item.push_backDimension("1"); + record.addItem(item); + } + { + ParserItem item("T_OIL", ParserItem::itype::DOUBLE); + item.setDefault( double(1.000000) ); + item.push_backDimension("1"); + record.addItem(item); + } + { + ParserItem item("KRT_OIL", ParserItem::itype::DOUBLE); + item.setDefault( double(1.000000) ); + item.push_backDimension("1"); + record.addItem(item); + } + { + ParserItem item("L_PC", ParserItem::itype::DOUBLE); + item.setDefault( double(1.000000) ); + item.push_backDimension("1"); + record.addItem(item); + } + { + ParserItem item("E_PC", ParserItem::itype::DOUBLE); + item.setDefault( double(1.000000) ); + item.push_backDimension("1"); + record.addItem(item); + } + { + ParserItem item("T_PC", ParserItem::itype::DOUBLE); + item.setDefault( double(1.000000) ); + item.push_backDimension("1"); + record.addItem(item); + } + { + ParserItem item("PCIR", ParserItem::itype::DOUBLE); + item.setDefault( double(0) ); + item.push_backDimension("Pressure"); + record.addItem(item); + } + { + ParserItem item("PCT", ParserItem::itype::DOUBLE); + item.setDefault( double(0) ); + item.push_backDimension("Pressure"); + record.addItem(item); + } + addRecord( record ); + } +} +const std::string SWOFLET::keywordName = "SWOFLET"; +const std::string SWOFLET::SW_RESIDUAL::itemName = "SW_RESIDUAL"; +const double SWOFLET::SW_RESIDUAL::defaultValue = 0; +const std::string SWOFLET::SW_CRITICAL::itemName = "SW_CRITICAL"; +const double SWOFLET::SW_CRITICAL::defaultValue = 0; +const std::string SWOFLET::L_WATER::itemName = "L_WATER"; +const double SWOFLET::L_WATER::defaultValue = 1.000000; +const std::string SWOFLET::E_WATER::itemName = "E_WATER"; +const double SWOFLET::E_WATER::defaultValue = 1.000000; +const std::string SWOFLET::T_WATER::itemName = "T_WATER"; +const double SWOFLET::T_WATER::defaultValue = 1.000000; +const std::string SWOFLET::KRT_WATER::itemName = "KRT_WATER"; +const double SWOFLET::KRT_WATER::defaultValue = 1.000000; +const std::string SWOFLET::SO_RESIDUAL::itemName = "SO_RESIDUAL"; +const double SWOFLET::SO_RESIDUAL::defaultValue = 0; +const std::string SWOFLET::SO_CRITICAL::itemName = "SO_CRITICAL"; +const double SWOFLET::SO_CRITICAL::defaultValue = 0; +const std::string SWOFLET::L_OIL::itemName = "L_OIL"; +const double SWOFLET::L_OIL::defaultValue = 1.000000; +const std::string SWOFLET::E_OIL::itemName = "E_OIL"; +const double SWOFLET::E_OIL::defaultValue = 1.000000; +const std::string SWOFLET::T_OIL::itemName = "T_OIL"; +const double SWOFLET::T_OIL::defaultValue = 1.000000; +const std::string SWOFLET::KRT_OIL::itemName = "KRT_OIL"; +const double SWOFLET::KRT_OIL::defaultValue = 1.000000; +const std::string SWOFLET::L_PC::itemName = "L_PC"; +const double SWOFLET::L_PC::defaultValue = 1.000000; +const std::string SWOFLET::E_PC::itemName = "E_PC"; +const double SWOFLET::E_PC::defaultValue = 1.000000; +const std::string SWOFLET::T_PC::itemName = "T_PC"; +const double SWOFLET::T_PC::defaultValue = 1.000000; +const std::string SWOFLET::PCIR::itemName = "PCIR"; +const double SWOFLET::PCIR::defaultValue = 0; +const std::string SWOFLET::PCT::itemName = "PCT"; +const double SWOFLET::PCT::defaultValue = 0; + + +SWU::SWU() : ParserKeyword("SWU", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("SWU"); diff --git a/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/T.cpp b/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/T.cpp index fe1c88b55a..f18fa5370b 100644 --- a/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/T.cpp +++ b/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/T.cpp @@ -1,18 +1,17 @@ -#include -#include -#include -#include + +#include +#include +#include +#include -#include +#include namespace Opm { namespace ParserKeywords { -TABDIMS::TABDIMS( ) : ParserKeyword("TABDIMS") -{ - setFixedSize( (size_t) 1); +TABDIMS::TABDIMS() : ParserKeyword("TABDIMS", KeywordSize(1, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("TABDIMS"); @@ -50,6 +49,7 @@ TABDIMS::TABDIMS( ) : ParserKeyword("TABDIMS") } { ParserItem item("MAX_RV_NODES", ParserItem::itype::INT); + item.setDefault( 20 ); record.addItem(item); } { @@ -57,11 +57,6 @@ TABDIMS::TABDIMS( ) : ParserKeyword("TABDIMS") item.setDefault( 1 ); record.addItem(item); } - { - ParserItem item("NUM_STATE_EQ", ParserItem::itype::INT); - item.setDefault( 1 ); - record.addItem(item); - } { ParserItem item("NUM_EOS_RES", ParserItem::itype::INT); item.setDefault( 1 ); @@ -69,6 +64,7 @@ TABDIMS::TABDIMS( ) : ParserKeyword("TABDIMS") } { ParserItem item("NUM_EOS_SURFACE", ParserItem::itype::INT); + item.setDefault( 1 ); record.addItem(item); } { @@ -159,13 +155,13 @@ const int TABDIMS::NTFIP::defaultValue = 1; const std::string TABDIMS::NRPVT::itemName = "NRPVT"; const int TABDIMS::NRPVT::defaultValue = 20; const std::string TABDIMS::MAX_RV_NODES::itemName = "MAX_RV_NODES"; +const int TABDIMS::MAX_RV_NODES::defaultValue = 20; const std::string TABDIMS::NTENDP::itemName = "NTENDP"; const int TABDIMS::NTENDP::defaultValue = 1; -const std::string TABDIMS::NUM_STATE_EQ::itemName = "NUM_STATE_EQ"; -const int TABDIMS::NUM_STATE_EQ::defaultValue = 1; const std::string TABDIMS::NUM_EOS_RES::itemName = "NUM_EOS_RES"; const int TABDIMS::NUM_EOS_RES::defaultValue = 1; const std::string TABDIMS::NUM_EOS_SURFACE::itemName = "NUM_EOS_SURFACE"; +const int TABDIMS::NUM_EOS_SURFACE::defaultValue = 1; const std::string TABDIMS::MAX_FLUX_REGIONS::itemName = "MAX_FLUX_REGIONS"; const int TABDIMS::MAX_FLUX_REGIONS::defaultValue = 10; const std::string TABDIMS::MAX_THERMAL_REGIONS::itemName = "MAX_THERMAL_REGIONS"; @@ -194,9 +190,7 @@ const int TABDIMS::NUM_KVALUE_TABLES::defaultValue = 0; const std::string TABDIMS::RESERVED::itemName = "RESERVED"; -TBLK::TBLK( ) : ParserKeyword("TBLK") -{ - setFixedSize( (size_t) 1); +TBLK::TBLK() : ParserKeyword("TBLK", KeywordSize(1, false)) { addValidSectionName("SOLUTION"); clearDeckNames(); setMatchRegex("TBLK(F|S).{1,3}"); @@ -214,9 +208,7 @@ const std::string TBLK::keywordName = "TBLK"; const std::string TBLK::data::itemName = "data"; -TEMP::TEMP( ) : ParserKeyword("TEMP") -{ - setFixedSize( (size_t) 0); +TEMP::TEMP() : ParserKeyword("TEMP", KeywordSize(0, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("TEMP"); @@ -224,9 +216,7 @@ TEMP::TEMP( ) : ParserKeyword("TEMP") const std::string TEMP::keywordName = "TEMP"; -TEMPI::TEMPI( ) : ParserKeyword("TEMPI") -{ - setFixedSize( (size_t) 1); +TEMPI::TEMPI() : ParserKeyword("TEMPI", KeywordSize(1, false)) { addValidSectionName("SOLUTION"); clearDeckNames(); addDeckName("TEMPI"); @@ -245,10 +235,7 @@ const std::string TEMPI::keywordName = "TEMPI"; const std::string TEMPI::data::itemName = "data"; -TEMPNODE::TEMPNODE( ) : ParserKeyword("TEMPNODE") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NPPVT",0); +TEMPNODE::TEMPNODE() : ParserKeyword("TEMPNODE", KeywordSize("TABDIMS", "NTPVT", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("TEMPNODE"); @@ -266,9 +253,7 @@ const std::string TEMPNODE::keywordName = "TEMPNODE"; const std::string TEMPNODE::TABLE_DATA::itemName = "TABLE_DATA"; -TEMPTVD::TEMPTVD( ) : ParserKeyword("TEMPTVD") -{ - setFixedSize( (size_t) 0); +TEMPTVD::TEMPTVD() : ParserKeyword("TEMPTVD", KeywordSize(0, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("TEMPTVD"); @@ -276,12 +261,12 @@ TEMPTVD::TEMPTVD( ) : ParserKeyword("TEMPTVD") const std::string TEMPTVD::keywordName = "TEMPTVD"; -TEMPVD::TEMPVD( ) : ParserKeyword("TEMPVD") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("EQLDIMS","NTEQUL",0); +TEMPVD::TEMPVD() : ParserKeyword("TEMPVD", KeywordSize("EQLDIMS", "NTEQUL", false, 0)) { addValidSectionName("PROPS"); addValidSectionName("SOLUTION"); + setProhibitedKeywords({ + "RTEMPVD", + }); clearDeckNames(); addDeckName("TEMPVD"); { @@ -300,9 +285,7 @@ const std::string TEMPVD::keywordName = "TEMPVD"; const std::string TEMPVD::DATA::itemName = "DATA"; -THCGAS::THCGAS( ) : ParserKeyword("THCGAS") -{ - setFixedSize( (size_t) 1); +THCGAS::THCGAS() : ParserKeyword("THCGAS", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("THCGAS"); @@ -321,9 +304,7 @@ const std::string THCGAS::keywordName = "THCGAS"; const std::string THCGAS::data::itemName = "data"; -THCOIL::THCOIL( ) : ParserKeyword("THCOIL") -{ - setFixedSize( (size_t) 1); +THCOIL::THCOIL() : ParserKeyword("THCOIL", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("THCOIL"); @@ -342,9 +323,7 @@ const std::string THCOIL::keywordName = "THCOIL"; const std::string THCOIL::data::itemName = "data"; -THCONR::THCONR( ) : ParserKeyword("THCONR") -{ - setFixedSize( (size_t) 1); +THCONR::THCONR() : ParserKeyword("THCONR", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("THCONR"); @@ -363,9 +342,7 @@ const std::string THCONR::keywordName = "THCONR"; const std::string THCONR::data::itemName = "data"; -THCONSF::THCONSF( ) : ParserKeyword("THCONSF") -{ - setFixedSize( (size_t) 1); +THCONSF::THCONSF() : ParserKeyword("THCONSF", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("THCONSF"); @@ -384,9 +361,7 @@ const std::string THCONSF::keywordName = "THCONSF"; const std::string THCONSF::data::itemName = "data"; -THCROCK::THCROCK( ) : ParserKeyword("THCROCK") -{ - setFixedSize( (size_t) 1); +THCROCK::THCROCK() : ParserKeyword("THCROCK", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("THCROCK"); @@ -405,9 +380,7 @@ const std::string THCROCK::keywordName = "THCROCK"; const std::string THCROCK::data::itemName = "data"; -THCWATER::THCWATER( ) : ParserKeyword("THCWATER") -{ - setFixedSize( (size_t) 1); +THCWATER::THCWATER() : ParserKeyword("THCWATER", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("THCWATER"); @@ -426,9 +399,7 @@ const std::string THCWATER::keywordName = "THCWATER"; const std::string THCWATER::data::itemName = "data"; -THERMAL::THERMAL( ) : ParserKeyword("THERMAL") -{ - setFixedSize( (size_t) 0); +THERMAL::THERMAL() : ParserKeyword("THERMAL", KeywordSize(0, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("THERMAL"); @@ -436,9 +407,7 @@ THERMAL::THERMAL( ) : ParserKeyword("THERMAL") const std::string THERMAL::keywordName = "THERMAL"; -THPRES::THPRES( ) : ParserKeyword("THPRES") -{ - setSizeType(SLASH_TERMINATED); +THPRES::THPRES() : ParserKeyword("THPRES", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SOLUTION"); clearDeckNames(); addDeckName("THPRES"); @@ -466,9 +435,7 @@ const std::string THPRES::REGION2::itemName = "REGION2"; const std::string THPRES::VALUE::itemName = "VALUE"; -THPRESFT::THPRESFT( ) : ParserKeyword("THPRESFT") -{ - setSizeType(SLASH_TERMINATED); +THPRESFT::THPRESFT() : ParserKeyword("THPRESFT", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("THPRESFT"); @@ -491,12 +458,27 @@ const std::string THPRESFT::FAULT_NAME::itemName = "FAULT_NAME"; const std::string THPRESFT::VALUE::itemName = "VALUE"; -TIGHTEN::TIGHTEN( ) : ParserKeyword("TIGHTEN") -{ - setFixedSize( (size_t) 1); +TIGHTEN::TIGHTEN() : ParserKeyword("TIGHTEN", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("TIGHTEN"); + { + ParserRecord record; + { + ParserItem item("FACTOR", ParserItem::itype::DOUBLE); + record.addItem(item); + } + addRecord( record ); + } +} +const std::string TIGHTEN::keywordName = "TIGHTEN"; +const std::string TIGHTEN::FACTOR::itemName = "FACTOR"; + + +TIGHTENP::TIGHTENP() : ParserKeyword("TIGHTENP", KeywordSize(1, false)) { + addValidSectionName("SCHEDULE"); + clearDeckNames(); + addDeckName("TIGHTENP"); { ParserRecord record; { @@ -518,16 +500,14 @@ TIGHTEN::TIGHTEN( ) : ParserKeyword("TIGHTEN") addRecord( record ); } } -const std::string TIGHTEN::keywordName = "TIGHTEN"; -const std::string TIGHTEN::LINEAR_FACTOR::itemName = "LINEAR_FACTOR"; -const std::string TIGHTEN::MAX_LINEAR::itemName = "MAX_LINEAR"; -const std::string TIGHTEN::NONLINEAR_FACTOR::itemName = "NONLINEAR_FACTOR"; -const std::string TIGHTEN::MAX_NONLINEAR::itemName = "MAX_NONLINEAR"; +const std::string TIGHTENP::keywordName = "TIGHTENP"; +const std::string TIGHTENP::LINEAR_FACTOR::itemName = "LINEAR_FACTOR"; +const std::string TIGHTENP::MAX_LINEAR::itemName = "MAX_LINEAR"; +const std::string TIGHTENP::NONLINEAR_FACTOR::itemName = "NONLINEAR_FACTOR"; +const std::string TIGHTENP::MAX_NONLINEAR::itemName = "MAX_NONLINEAR"; -TIME::TIME( ) : ParserKeyword("TIME") -{ - setFixedSize( (size_t) 1); +TIME::TIME() : ParserKeyword("TIME", KeywordSize(1, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("TIME"); @@ -546,9 +526,7 @@ const std::string TIME::keywordName = "TIME"; const std::string TIME::step_list::itemName = "step_list"; -TITLE::TITLE( ) : ParserKeyword("TITLE") -{ - setFixedSize( (size_t) 1); +TITLE::TITLE() : ParserKeyword("TITLE", KeywordSize(1, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("TITLE"); @@ -566,10 +544,7 @@ const std::string TITLE::keywordName = "TITLE"; const std::string TITLE::TitleText::itemName = "TitleText"; -TLMIXPAR::TLMIXPAR( ) : ParserKeyword("TLMIXPAR") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("MISCIBLE","NTMISC",0); +TLMIXPAR::TLMIXPAR() : ParserKeyword("TLMIXPAR", KeywordSize("MISCIBLE", "NTMISC", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("TLMIXPAR"); @@ -593,10 +568,7 @@ const std::string TLMIXPAR::TL_VISCOSITY_PARAMETER::itemName = "TL_VISCOSITY_PAR const std::string TLMIXPAR::TL_DENSITY_PARAMETER::itemName = "TL_DENSITY_PARAMETER"; -TLPMIXPA::TLPMIXPA( ) : ParserKeyword("TLPMIXPA") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("MISCIBLE","NTMISC",0); +TLPMIXPA::TLPMIXPA() : ParserKeyword("TLPMIXPA", KeywordSize("MISCIBLE", "NTMISC", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("TLPMIXPA"); @@ -616,9 +588,7 @@ const std::string TLPMIXPA::keywordName = "TLPMIXPA"; const std::string TLPMIXPA::DATA::itemName = "DATA"; -TNUM::TNUM( ) : ParserKeyword("TNUM") -{ - setFixedSize( (size_t) 1); +TNUM::TNUM() : ParserKeyword("TNUM", KeywordSize(1, false)) { addValidSectionName("REGIONS"); clearDeckNames(); setMatchRegex("TNUM(F|S).{1,3}"); @@ -636,9 +606,7 @@ const std::string TNUM::keywordName = "TNUM"; const std::string TNUM::data::itemName = "data"; -TOLCRIT::TOLCRIT( ) : ParserKeyword("TOLCRIT") -{ - setFixedSize( (size_t) 1); +TOLCRIT::TOLCRIT() : ParserKeyword("TOLCRIT", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("TOLCRIT"); @@ -655,12 +623,10 @@ TOLCRIT::TOLCRIT( ) : ParserKeyword("TOLCRIT") } const std::string TOLCRIT::keywordName = "TOLCRIT"; const std::string TOLCRIT::VALUE::itemName = "VALUE"; -const double TOLCRIT::VALUE::defaultValue = 0.000001; +const double TOLCRIT::VALUE::defaultValue = 1e-06; -TOPS::TOPS( ) : ParserKeyword("TOPS") -{ - setFixedSize( (size_t) 1); +TOPS::TOPS() : ParserKeyword("TOPS", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("TOPS"); @@ -679,10 +645,7 @@ const std::string TOPS::keywordName = "TOPS"; const std::string TOPS::data::itemName = "data"; -TPAMEPS::TPAMEPS( ) : ParserKeyword("TPAMEPS") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("REGDIMS","NTCREG",0); +TPAMEPS::TPAMEPS() : ParserKeyword("TPAMEPS", KeywordSize("REGDIMS", "NTCREG", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("TPAMEPS"); @@ -700,9 +663,25 @@ const std::string TPAMEPS::keywordName = "TPAMEPS"; const std::string TPAMEPS::DATA::itemName = "DATA"; -TRACER::TRACER( ) : ParserKeyword("TRACER") -{ - setSizeType(SLASH_TERMINATED); +TPAMEPSS::TPAMEPSS() : ParserKeyword("TPAMEPSS", KeywordSize("REGDIMS", "NTCREG", false, 0)) { + addValidSectionName("PROPS"); + clearDeckNames(); + addDeckName("TPAMEPSS"); + { + ParserRecord record; + { + ParserItem item("DATA", ParserItem::itype::DOUBLE); + item.setSizeType(ParserItem::item_size::ALL); + record.addItem(item); + } + addRecord( record ); + } +} +const std::string TPAMEPSS::keywordName = "TPAMEPSS"; +const std::string TPAMEPSS::DATA::itemName = "DATA"; + + +TRACER::TRACER() : ParserKeyword("TRACER", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("TRACER"); @@ -744,10 +723,11 @@ const std::string TRACER::NUM_PART_TABLE::itemName = "NUM_PART_TABLE"; const std::string TRACER::ADSORB_PHASE::itemName = "ADSORB_PHASE"; -TRACERKM::TRACERKM( ) : ParserKeyword("TRACERKM") -{ - setSizeType(UNKNOWN); +TRACERKM::TRACERKM() : ParserKeyword("TRACERKM", KeywordSize("PARTTRAC", "NKPTMX", false, 2)) { addValidSectionName("PROPS"); + setRequiredKeywords({ + "PARTTRAC", + }); clearDeckNames(); addDeckName("TRACERKM"); { @@ -790,10 +770,7 @@ const std::string TRACERKM::PHASES::itemName = "PHASES"; const std::string TRACERKM::TABLE::itemName = "TABLE"; -TRACERKP::TRACERKP( ) : ParserKeyword("TRACERKP") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("PARTTRAC","NKPTMX",0); +TRACERKP::TRACERKP() : ParserKeyword("TRACERKP", KeywordSize("PARTTRAC", "NKPTMX", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("TRACERKP"); @@ -813,9 +790,7 @@ const std::string TRACERKP::keywordName = "TRACERKP"; const std::string TRACERKP::TABLE::itemName = "TABLE"; -TRACERS::TRACERS( ) : ParserKeyword("TRACERS") -{ - setFixedSize( (size_t) 1); +TRACERS::TRACERS() : ParserKeyword("TRACERS", KeywordSize(1, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("TRACERS"); @@ -907,9 +882,7 @@ const std::string TRACERS::NTIGHTFACTORS::itemName = "NTIGHTFACTORS"; const int TRACERS::NTIGHTFACTORS::defaultValue = 0; -TRACITVD::TRACITVD( ) : ParserKeyword("TRACITVD") -{ - setFixedSize( (size_t) 1); +TRACITVD::TRACITVD() : ParserKeyword("TRACITVD", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("TRACITVD"); @@ -935,9 +908,7 @@ const std::string TRACITVD::BOTH_TIMESTEP::itemName = "BOTH_TIMESTEP"; const std::string TRACITVD::BOTH_TIMESTEP::defaultValue = "YES"; -TRACTVD::TRACTVD( ) : ParserKeyword("TRACTVD") -{ - setFixedSize( (size_t) 0); +TRACTVD::TRACTVD() : ParserKeyword("TRACTVD", KeywordSize(0, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("TRACTVD"); @@ -945,10 +916,7 @@ TRACTVD::TRACTVD( ) : ParserKeyword("TRACTVD") const std::string TRACTVD::keywordName = "TRACTVD"; -TRADS::TRADS( ) : ParserKeyword("TRADS") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTSFUN",0); +TRADS::TRADS() : ParserKeyword("TRADS", KeywordSize("TABDIMS", "NTSFUN", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("TRADS"); @@ -966,9 +934,7 @@ const std::string TRADS::keywordName = "TRADS"; const std::string TRADS::DATA::itemName = "DATA"; -TRANGL::TRANGL( ) : ParserKeyword("TRANGL") -{ - setSizeType(SLASH_TERMINATED); +TRANGL::TRANGL() : ParserKeyword("TRANGL", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("TRANGL"); @@ -1016,9 +982,7 @@ const std::string TRANGL::KG::itemName = "KG"; const std::string TRANGL::TRAN::itemName = "TRAN"; -TRANR::TRANR( ) : ParserKeyword("TRANR") -{ - setFixedSize( (size_t) 1); +TRANR::TRANR() : ParserKeyword("TRANR", KeywordSize(1, false)) { addValidSectionName("EDIT"); clearDeckNames(); addDeckName("TRANR"); @@ -1037,9 +1001,7 @@ const std::string TRANR::keywordName = "TRANR"; const std::string TRANR::data::itemName = "data"; -TRANTHT::TRANTHT( ) : ParserKeyword("TRANTHT") -{ - setFixedSize( (size_t) 1); +TRANTHT::TRANTHT() : ParserKeyword("TRANTHT", KeywordSize(1, false)) { addValidSectionName("EDIT"); clearDeckNames(); addDeckName("TRANTHT"); @@ -1058,9 +1020,7 @@ const std::string TRANTHT::keywordName = "TRANTHT"; const std::string TRANTHT::data::itemName = "data"; -TRANX::TRANX( ) : ParserKeyword("TRANX") -{ - setFixedSize( (size_t) 1); +TRANX::TRANX() : ParserKeyword("TRANX", KeywordSize(1, false)) { addValidSectionName("EDIT"); clearDeckNames(); addDeckName("TRANX"); @@ -1079,9 +1039,7 @@ const std::string TRANX::keywordName = "TRANX"; const std::string TRANX::data::itemName = "data"; -TRANY::TRANY( ) : ParserKeyword("TRANY") -{ - setFixedSize( (size_t) 1); +TRANY::TRANY() : ParserKeyword("TRANY", KeywordSize(1, false)) { addValidSectionName("EDIT"); clearDeckNames(); addDeckName("TRANY"); @@ -1100,9 +1058,7 @@ const std::string TRANY::keywordName = "TRANY"; const std::string TRANY::data::itemName = "data"; -TRANZ::TRANZ( ) : ParserKeyword("TRANZ") -{ - setFixedSize( (size_t) 1); +TRANZ::TRANZ() : ParserKeyword("TRANZ", KeywordSize(1, false)) { addValidSectionName("EDIT"); clearDeckNames(); addDeckName("TRANZ"); @@ -1121,10 +1077,7 @@ const std::string TRANZ::keywordName = "TRANZ"; const std::string TRANZ::data::itemName = "data"; -TRDCY::TRDCY( ) : ParserKeyword("TRDCY") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTPVT",0); +TRDCY::TRDCY() : ParserKeyword("TRDCY", KeywordSize("TABDIMS", "NTPVT", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); setMatchRegex("TRDCY.+"); @@ -1144,10 +1097,7 @@ const std::string TRDCY::HALF_TIME::itemName = "HALF_TIME"; const double TRDCY::HALF_TIME::defaultValue = 100000000000000000000.000000; -TRDIF::TRDIF( ) : ParserKeyword("TRDIF") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTPVT",0); +TRDIF::TRDIF() : ParserKeyword("TRDIF", KeywordSize("TABDIMS", "NTPVT", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); setMatchRegex("TRDIF.+"); @@ -1167,10 +1117,7 @@ const std::string TRDIF::HALF_TIME::itemName = "HALF_TIME"; const double TRDIF::HALF_TIME::defaultValue = 100000000000000000000.000000; -TRDIS::TRDIS( ) : ParserKeyword("TRDIS") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTPVT",0); +TRDIS::TRDIS() : ParserKeyword("TRDIS", KeywordSize("TABDIMS", "NTPVT", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); setMatchRegex("TRDIS.+"); @@ -1227,10 +1174,7 @@ const std::string TRDIS::D8TABLE::itemName = "D8TABLE"; const std::string TRDIS::D9TABLE::itemName = "D9TABLE"; -TREF::TREF( ) : ParserKeyword("TREF") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NUM_STATE_EQ",0); +TREF::TREF() : ParserKeyword("TREF", KeywordSize("TABDIMS", "NUM_STATE_EQ", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("TREF"); @@ -1249,10 +1193,7 @@ const std::string TREF::keywordName = "TREF"; const std::string TREF::TEMPERATURE::itemName = "TEMPERATURE"; -TREFS::TREFS( ) : ParserKeyword("TREFS") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NUM_STATE_EQ",0); +TREFS::TREFS() : ParserKeyword("TREFS", KeywordSize("TABDIMS", "NUM_STATE_EQ", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("TREFS"); @@ -1271,9 +1212,7 @@ const std::string TREFS::keywordName = "TREFS"; const std::string TREFS::TEMPERATURE::itemName = "TEMPERATURE"; -TRKPF::TRKPF( ) : ParserKeyword("TRKPF") -{ - setFixedSize( (size_t) 1); +TRKPF::TRKPF() : ParserKeyword("TRKPF", KeywordSize(1, false)) { addValidSectionName("REGIONS"); clearDeckNames(); setMatchRegex("TRKPF.+"); @@ -1291,9 +1230,7 @@ const std::string TRKPF::keywordName = "TRKPF"; const std::string TRKPF::data::itemName = "data"; -TRNHD::TRNHD( ) : ParserKeyword("TRNHD") -{ - setFixedSize( (size_t) 0); +TRNHD::TRNHD() : ParserKeyword("TRNHD", KeywordSize(0, false)) { addValidSectionName("PROPS"); clearDeckNames(); setMatchRegex("TRNHD.+"); @@ -1301,9 +1238,7 @@ TRNHD::TRNHD( ) : ParserKeyword("TRNHD") const std::string TRNHD::keywordName = "TRNHD"; -TRPLPORO::TRPLPORO( ) : ParserKeyword("TRPLPORO") -{ - setSizeType(SLASH_TERMINATED); +TRPLPORO::TRPLPORO() : ParserKeyword("TRPLPORO", KeywordSize(1, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("TRPLPORO"); @@ -1320,10 +1255,7 @@ const std::string TRPLPORO::keywordName = "TRPLPORO"; const std::string TRPLPORO::NUM_MATRIX::itemName = "NUM_MATRIX"; -TRROCK::TRROCK( ) : ParserKeyword("TRROCK") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTSFUN",0); +TRROCK::TRROCK() : ParserKeyword("TRROCK", KeywordSize("TABDIMS", "NTSFUN", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("TRROCK"); @@ -1353,9 +1285,7 @@ const std::string TRROCK::INIT_MODEL::itemName = "INIT_MODEL"; const int TRROCK::INIT_MODEL::defaultValue = 1; -TSTEP::TSTEP( ) : ParserKeyword("TSTEP") -{ - setFixedSize( (size_t) 1); +TSTEP::TSTEP() : ParserKeyword("TSTEP", KeywordSize(1, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("TSTEP"); @@ -1374,9 +1304,7 @@ const std::string TSTEP::keywordName = "TSTEP"; const std::string TSTEP::step_list::itemName = "step_list"; -TUNING::TUNING( ) : ParserKeyword("TUNING") -{ - setFixedSize( (size_t) 3); +TUNING::TUNING() : ParserKeyword("TUNING", KeywordSize(3, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("TUNING"); @@ -1588,7 +1516,7 @@ const double TUNING::TRGTTE::defaultValue = 0.100000; const std::string TUNING::TRGCNV::itemName = "TRGCNV"; const double TUNING::TRGCNV::defaultValue = 0.001000; const std::string TUNING::TRGMBE::itemName = "TRGMBE"; -const double TUNING::TRGMBE::defaultValue = 0.000000; +const double TUNING::TRGMBE::defaultValue = 1e-07; const std::string TUNING::TRGLCV::itemName = "TRGLCV"; const double TUNING::TRGLCV::defaultValue = 0.000100; const std::string TUNING::XXXTTE::itemName = "XXXTTE"; @@ -1596,7 +1524,7 @@ const double TUNING::XXXTTE::defaultValue = 10.000000; const std::string TUNING::XXXCNV::itemName = "XXXCNV"; const double TUNING::XXXCNV::defaultValue = 0.010000; const std::string TUNING::XXXMBE::itemName = "XXXMBE"; -const double TUNING::XXXMBE::defaultValue = 0.000001; +const double TUNING::XXXMBE::defaultValue = 1e-06; const std::string TUNING::XXXLCV::itemName = "XXXLCV"; const double TUNING::XXXLCV::defaultValue = 0.001000; const std::string TUNING::XXXWFL::itemName = "XXXWFL"; @@ -1629,9 +1557,7 @@ const double TUNING::TRGDPR::defaultValue = 1000000.000000; const std::string TUNING::XXXDPR::itemName = "XXXDPR"; -TUNINGDP::TUNINGDP( ) : ParserKeyword("TUNINGDP") -{ - setFixedSize( (size_t) 1); +TUNINGDP::TUNINGDP() : ParserKeyword("TUNINGDP", KeywordSize(1, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("TUNINGDP"); @@ -1663,9 +1589,7 @@ const std::string TUNINGDP::TRGDDP::itemName = "TRGDDP"; const std::string TUNINGDP::TRGDDS::itemName = "TRGDDS"; -TUNINGH::TUNINGH( ) : ParserKeyword("TUNINGH") -{ - setFixedSize( (size_t) 1); +TUNINGH::TUNINGH() : ParserKeyword("TUNINGH", KeywordSize(1, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("TUNINGH"); @@ -1705,16 +1629,14 @@ const double TUNINGH::GRGLCV::defaultValue = 0.000100; const std::string TUNINGH::GXXLCV::itemName = "GXXLCV"; const double TUNINGH::GXXLCV::defaultValue = 0.001000; const std::string TUNINGH::GMSLCV::itemName = "GMSLCV"; -const double TUNINGH::GMSLCV::defaultValue = 0.000000; +const double TUNINGH::GMSLCV::defaultValue = 1e-20; const std::string TUNINGH::LGTMIN::itemName = "LGTMIN"; const int TUNINGH::LGTMIN::defaultValue = 1; const std::string TUNINGH::LGTMAX::itemName = "LGTMAX"; const int TUNINGH::LGTMAX::defaultValue = 25; -TUNINGL::TUNINGL( ) : ParserKeyword("TUNINGL") -{ - setFixedSize( (size_t) 3); +TUNINGL::TUNINGL() : ParserKeyword("TUNINGL", KeywordSize(3, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("TUNINGL"); @@ -1926,7 +1848,7 @@ const double TUNINGL::TRGTTE::defaultValue = 0.100000; const std::string TUNINGL::TRGCNV::itemName = "TRGCNV"; const double TUNINGL::TRGCNV::defaultValue = 0.001000; const std::string TUNINGL::TRGMBE::itemName = "TRGMBE"; -const double TUNINGL::TRGMBE::defaultValue = 0.000000; +const double TUNINGL::TRGMBE::defaultValue = 1e-07; const std::string TUNINGL::TRGLCV::itemName = "TRGLCV"; const double TUNINGL::TRGLCV::defaultValue = 0.000100; const std::string TUNINGL::XXXTTE::itemName = "XXXTTE"; @@ -1934,7 +1856,7 @@ const double TUNINGL::XXXTTE::defaultValue = 10.000000; const std::string TUNINGL::XXXCNV::itemName = "XXXCNV"; const double TUNINGL::XXXCNV::defaultValue = 0.010000; const std::string TUNINGL::XXXMBE::itemName = "XXXMBE"; -const double TUNINGL::XXXMBE::defaultValue = 0.000001; +const double TUNINGL::XXXMBE::defaultValue = 1e-06; const std::string TUNINGL::XXXLCV::itemName = "XXXLCV"; const double TUNINGL::XXXLCV::defaultValue = 0.001000; const std::string TUNINGL::XXXWFL::itemName = "XXXWFL"; @@ -1967,9 +1889,7 @@ const double TUNINGL::TRGDPR::defaultValue = 1000000.000000; const std::string TUNINGL::XXXDPR::itemName = "XXXDPR"; -TUNINGS::TUNINGS( ) : ParserKeyword("TUNINGS") -{ - setFixedSize( (size_t) 4); +TUNINGS::TUNINGS() : ParserKeyword("TUNINGS", KeywordSize(4, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("TUNINGS"); @@ -2190,7 +2110,7 @@ const double TUNINGS::TRGTTE::defaultValue = 0.100000; const std::string TUNINGS::TRGCNV::itemName = "TRGCNV"; const double TUNINGS::TRGCNV::defaultValue = 0.001000; const std::string TUNINGS::TRGMBE::itemName = "TRGMBE"; -const double TUNINGS::TRGMBE::defaultValue = 0.000000; +const double TUNINGS::TRGMBE::defaultValue = 1e-07; const std::string TUNINGS::TRGLCV::itemName = "TRGLCV"; const double TUNINGS::TRGLCV::defaultValue = 0.000100; const std::string TUNINGS::XXXTTE::itemName = "XXXTTE"; @@ -2198,7 +2118,7 @@ const double TUNINGS::XXXTTE::defaultValue = 10.000000; const std::string TUNINGS::XXXCNV::itemName = "XXXCNV"; const double TUNINGS::XXXCNV::defaultValue = 0.010000; const std::string TUNINGS::XXXMBE::itemName = "XXXMBE"; -const double TUNINGS::XXXMBE::defaultValue = 0.000001; +const double TUNINGS::XXXMBE::defaultValue = 1e-06; const std::string TUNINGS::XXXLCV::itemName = "XXXLCV"; const double TUNINGS::XXXLCV::defaultValue = 0.001000; const std::string TUNINGS::XXXWFL::itemName = "XXXWFL"; @@ -2231,10 +2151,7 @@ const double TUNINGS::TRGDPR::defaultValue = 1000000.000000; const std::string TUNINGS::XXXDPR::itemName = "XXXDPR"; -TVDP::TVDP( ) : ParserKeyword("TVDP") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("EQLDIMS","NTTRVD",0); +TVDP::TVDP() : ParserKeyword("TVDP", KeywordSize("EQLDIMS", "NTTRVD", false, 0)) { addValidSectionName("SOLUTION"); clearDeckNames(); setMatchRegex("TVDP.+"); @@ -2254,9 +2171,7 @@ const std::string TVDP::keywordName = "TVDP"; const std::string TVDP::DATA::itemName = "DATA"; -TZONE::TZONE( ) : ParserKeyword("TZONE") -{ - setFixedSize( (size_t) 1); +TZONE::TZONE() : ParserKeyword("TZONE", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("TZONE"); diff --git a/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/U.cpp b/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/U.cpp index 90b4ce54b4..3e08ac6d9a 100644 --- a/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/U.cpp +++ b/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/U.cpp @@ -1,18 +1,17 @@ -#include -#include -#include -#include + +#include +#include +#include +#include -#include +#include namespace Opm { namespace ParserKeywords { -UDADIMS::UDADIMS( ) : ParserKeyword("UDADIMS") -{ - setFixedSize( (size_t) 1); +UDADIMS::UDADIMS() : ParserKeyword("UDADIMS", KeywordSize(1, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("UDADIMS"); @@ -45,9 +44,7 @@ const std::string UDADIMS::TOTAL_UDQ_UNIQUE::itemName = "TOTAL_UDQ_UNIQUE"; const int UDADIMS::TOTAL_UDQ_UNIQUE::defaultValue = 100; -UDQ::UDQ( ) : ParserKeyword("UDQ") -{ - setSizeType(SLASH_TERMINATED); +UDQ::UDQ() : ParserKeyword("UDQ", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("UDQ"); @@ -75,9 +72,7 @@ const std::string UDQ::QUANTITY::itemName = "QUANTITY"; const std::string UDQ::DATA::itemName = "DATA"; -UDQDIMS::UDQDIMS( ) : ParserKeyword("UDQDIMS") -{ - setFixedSize( (size_t) 1); +UDQDIMS::UDQDIMS() : ParserKeyword("UDQDIMS", KeywordSize(1, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("UDQDIMS"); @@ -166,9 +161,7 @@ const std::string UDQDIMS::RESTART_NEW_SEED::itemName = "RESTART_NEW_SEED"; const std::string UDQDIMS::RESTART_NEW_SEED::defaultValue = "N"; -UDQPARAM::UDQPARAM( ) : ParserKeyword("UDQPARAM") -{ - setFixedSize( (size_t) 1); +UDQPARAM::UDQPARAM() : ParserKeyword("UDQPARAM", KeywordSize(1, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("UDQPARAM"); @@ -203,14 +196,12 @@ const int UDQPARAM::RANDOM_SEED::defaultValue = 1; const std::string UDQPARAM::RANGE::itemName = "RANGE"; const double UDQPARAM::RANGE::defaultValue = 100000000000000000000.000000; const std::string UDQPARAM::UNDEFINED_VALUE::itemName = "UNDEFINED_VALUE"; -const double UDQPARAM::UNDEFINED_VALUE::defaultValue = 0.000000; +const double UDQPARAM::UNDEFINED_VALUE::defaultValue = 0; const std::string UDQPARAM::CMP_EPSILON::itemName = "CMP_EPSILON"; const double UDQPARAM::CMP_EPSILON::defaultValue = 0.000100; -UDT::UDT( ) : ParserKeyword("UDT") -{ - setFixedSize( (size_t) 0); +UDT::UDT() : ParserKeyword("UDT", KeywordSize(0, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("UDT"); @@ -218,9 +209,7 @@ UDT::UDT( ) : ParserKeyword("UDT") const std::string UDT::keywordName = "UDT"; -UDTDIMS::UDTDIMS( ) : ParserKeyword("UDTDIMS") -{ - setFixedSize( (size_t) 1); +UDTDIMS::UDTDIMS() : ParserKeyword("UDTDIMS", KeywordSize(1, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("UDTDIMS"); @@ -260,9 +249,7 @@ const std::string UDTDIMS::MAX_DIMENSIONS::itemName = "MAX_DIMENSIONS"; const int UDTDIMS::MAX_DIMENSIONS::defaultValue = 0; -UNCODHMD::UNCODHMD( ) : ParserKeyword("UNCODHMD") -{ - setFixedSize( (size_t) 0); +UNCODHMD::UNCODHMD() : ParserKeyword("UNCODHMD", KeywordSize(0, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("UNCODHMD"); @@ -270,9 +257,7 @@ UNCODHMD::UNCODHMD( ) : ParserKeyword("UNCODHMD") const std::string UNCODHMD::keywordName = "UNCODHMD"; -UNIFIN::UNIFIN( ) : ParserKeyword("UNIFIN") -{ - setFixedSize( (size_t) 0); +UNIFIN::UNIFIN() : ParserKeyword("UNIFIN", KeywordSize(0, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("UNIFIN"); @@ -280,9 +265,7 @@ UNIFIN::UNIFIN( ) : ParserKeyword("UNIFIN") const std::string UNIFIN::keywordName = "UNIFIN"; -UNIFOUT::UNIFOUT( ) : ParserKeyword("UNIFOUT") -{ - setFixedSize( (size_t) 0); +UNIFOUT::UNIFOUT() : ParserKeyword("UNIFOUT", KeywordSize(0, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("UNIFOUT"); @@ -290,9 +273,7 @@ UNIFOUT::UNIFOUT( ) : ParserKeyword("UNIFOUT") const std::string UNIFOUT::keywordName = "UNIFOUT"; -UNIFOUTS::UNIFOUTS( ) : ParserKeyword("UNIFOUTS") -{ - setFixedSize( (size_t) 0); +UNIFOUTS::UNIFOUTS() : ParserKeyword("UNIFOUTS", KeywordSize(0, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("UNIFOUTS"); @@ -300,9 +281,7 @@ UNIFOUTS::UNIFOUTS( ) : ParserKeyword("UNIFOUTS") const std::string UNIFOUTS::keywordName = "UNIFOUTS"; -UNIFSAVE::UNIFSAVE( ) : ParserKeyword("UNIFSAVE") -{ - setFixedSize( (size_t) 0); +UNIFSAVE::UNIFSAVE() : ParserKeyword("UNIFSAVE", KeywordSize(0, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("UNIFSAVE"); @@ -310,9 +289,7 @@ UNIFSAVE::UNIFSAVE( ) : ParserKeyword("UNIFSAVE") const std::string UNIFSAVE::keywordName = "UNIFSAVE"; -USECUPL::USECUPL( ) : ParserKeyword("USECUPL") -{ - setSizeType(SLASH_TERMINATED); +USECUPL::USECUPL() : ParserKeyword("USECUPL", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("USECUPL"); @@ -334,9 +311,7 @@ const std::string USECUPL::BASE::itemName = "BASE"; const std::string USECUPL::FMT::itemName = "FMT"; -USEFLUX::USEFLUX( ) : ParserKeyword("USEFLUX") -{ - setFixedSize( (size_t) 0); +USEFLUX::USEFLUX() : ParserKeyword("USEFLUX", KeywordSize(0, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("USEFLUX"); @@ -344,9 +319,7 @@ USEFLUX::USEFLUX( ) : ParserKeyword("USEFLUX") const std::string USEFLUX::keywordName = "USEFLUX"; -USENOFLO::USENOFLO( ) : ParserKeyword("USENOFLO") -{ - setFixedSize( (size_t) 0); +USENOFLO::USENOFLO() : ParserKeyword("USENOFLO", KeywordSize(0, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("USENOFLO"); diff --git a/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/V.cpp b/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/V.cpp index aeb5e6c010..ed89918565 100644 --- a/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/V.cpp +++ b/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/V.cpp @@ -1,18 +1,17 @@ -#include -#include -#include -#include + +#include +#include +#include +#include -#include +#include namespace Opm { namespace ParserKeywords { -VAPOIL::VAPOIL( ) : ParserKeyword("VAPOIL") -{ - setFixedSize( (size_t) 0); +VAPOIL::VAPOIL() : ParserKeyword("VAPOIL", KeywordSize(0, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("VAPOIL"); @@ -20,11 +19,9 @@ VAPOIL::VAPOIL( ) : ParserKeyword("VAPOIL") const std::string VAPOIL::keywordName = "VAPOIL"; -VAPPARS::VAPPARS( ) : ParserKeyword("VAPPARS") -{ - setFixedSize( (size_t) 1); - addValidSectionName("SCHEDULE"); +VAPPARS::VAPPARS() : ParserKeyword("VAPPARS", KeywordSize(1, false)) { addValidSectionName("SOLUTION"); + addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("VAPPARS"); { @@ -45,9 +42,7 @@ const std::string VAPPARS::OIL_VAP_PROPENSITY::itemName = "OIL_VAP_PROPENSITY"; const std::string VAPPARS::OIL_DENSITY_PROPENSITY::itemName = "OIL_DENSITY_PROPENSITY"; -VAPWAT::VAPWAT( ) : ParserKeyword("VAPWAT") -{ - setFixedSize( (size_t) 0); +VAPWAT::VAPWAT() : ParserKeyword("VAPWAT", KeywordSize(0, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("VAPWAT"); @@ -55,9 +50,7 @@ VAPWAT::VAPWAT( ) : ParserKeyword("VAPWAT") const std::string VAPWAT::keywordName = "VAPWAT"; -VDFLOW::VDFLOW( ) : ParserKeyword("VDFLOW") -{ - setFixedSize( (size_t) 1); +VDFLOW::VDFLOW() : ParserKeyword("VDFLOW", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("VDFLOW"); @@ -74,10 +67,7 @@ const std::string VDFLOW::keywordName = "VDFLOW"; const std::string VDFLOW::BETA::itemName = "BETA"; -VDFLOWR::VDFLOWR( ) : ParserKeyword("VDFLOWR") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTSFUN",0); +VDFLOWR::VDFLOWR() : ParserKeyword("VDFLOWR", KeywordSize("TABDIMS", "NTSFUN", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("VDFLOWR"); @@ -94,9 +84,7 @@ const std::string VDFLOWR::keywordName = "VDFLOWR"; const std::string VDFLOWR::BETA::itemName = "BETA"; -VE::VE( ) : ParserKeyword("VE") -{ - setFixedSize( (size_t) 1); +VE::VE() : ParserKeyword("VE", KeywordSize(1, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("VE"); @@ -115,9 +103,7 @@ const std::string VE::MODEL_TYPE::itemName = "MODEL_TYPE"; const std::string VE::MODEL_TYPE::defaultValue = "NOCOMP"; -VEDEBUG::VEDEBUG( ) : ParserKeyword("VEDEBUG") -{ - setFixedSize( (size_t) 1); +VEDEBUG::VEDEBUG() : ParserKeyword("VEDEBUG", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("VEDEBUG"); @@ -173,9 +159,7 @@ const std::string VEDEBUG::LGR::itemName = "LGR"; const std::string VEDEBUG::LGR::defaultValue = " "; -VEFIN::VEFIN( ) : ParserKeyword("VEFIN") -{ - setFixedSize( (size_t) 1); +VEFIN::VEFIN() : ParserKeyword("VEFIN", KeywordSize(1, false)) { addValidSectionName("GRID"); clearDeckNames(); addDeckName("VEFIN"); @@ -201,9 +185,7 @@ const std::string VEFIN::NVEPT::itemName = "NVEPT"; const int VEFIN::NVEPT::defaultValue = 0; -VEFRAC::VEFRAC( ) : ParserKeyword("VEFRAC") -{ - setFixedSize( (size_t) 1); +VEFRAC::VEFRAC() : ParserKeyword("VEFRAC", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("VEFRAC"); @@ -222,9 +204,7 @@ const std::string VEFRAC::FRAC::itemName = "FRAC"; const double VEFRAC::FRAC::defaultValue = 10.000000; -VEFRACP::VEFRACP( ) : ParserKeyword("VEFRACP") -{ - setFixedSize( (size_t) 1); +VEFRACP::VEFRACP() : ParserKeyword("VEFRACP", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("VEFRACP"); @@ -243,9 +223,7 @@ const std::string VEFRACP::FRAC::itemName = "FRAC"; const double VEFRACP::FRAC::defaultValue = 1.000000; -VEFRACPV::VEFRACPV( ) : ParserKeyword("VEFRACPV") -{ - setFixedSize( (size_t) 1); +VEFRACPV::VEFRACPV() : ParserKeyword("VEFRACPV", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("VEFRACPV"); @@ -263,9 +241,7 @@ const std::string VEFRACPV::keywordName = "VEFRACPV"; const std::string VEFRACPV::data::itemName = "data"; -VEFRACV::VEFRACV( ) : ParserKeyword("VEFRACV") -{ - setFixedSize( (size_t) 1); +VEFRACV::VEFRACV() : ParserKeyword("VEFRACV", KeywordSize(1, false)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("VEFRACV"); @@ -283,9 +259,7 @@ const std::string VEFRACV::keywordName = "VEFRACV"; const std::string VEFRACV::data::itemName = "data"; -VFPCHK::VFPCHK( ) : ParserKeyword("VFPCHK") -{ - setFixedSize( (size_t) 1); +VFPCHK::VFPCHK() : ParserKeyword("VFPCHK", KeywordSize(1, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("VFPCHK"); @@ -305,9 +279,7 @@ const std::string VFPCHK::BHP_LIMIT::itemName = "BHP_LIMIT"; const double VFPCHK::BHP_LIMIT::defaultValue = 10000000000.000000; -VFPIDIMS::VFPIDIMS( ) : ParserKeyword("VFPIDIMS") -{ - setFixedSize( (size_t) 1); +VFPIDIMS::VFPIDIMS() : ParserKeyword("VFPIDIMS", KeywordSize(1, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("VFPIDIMS"); @@ -340,9 +312,7 @@ const std::string VFPIDIMS::MAX_INJ_VFP_TABLE::itemName = "MAX_INJ_VFP_TABLE"; const int VFPIDIMS::MAX_INJ_VFP_TABLE::defaultValue = 0; -VFPINJ::VFPINJ( ) : ParserKeyword("VFPINJ") -{ - setSizeType(UNKNOWN); +VFPINJ::VFPINJ() : ParserKeyword("VFPINJ", KeywordSize(UNKNOWN)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("VFPINJ"); @@ -424,9 +394,7 @@ const std::string VFPINJ::THP_INDEX::itemName = "THP_INDEX"; const std::string VFPINJ::VALUES::itemName = "VALUES"; -VFPPDIMS::VFPPDIMS( ) : ParserKeyword("VFPPDIMS") -{ - setFixedSize( (size_t) 1); +VFPPDIMS::VFPPDIMS() : ParserKeyword("VFPPDIMS", KeywordSize(1, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("VFPPDIMS"); @@ -480,9 +448,7 @@ const std::string VFPPDIMS::MAX_PROD_VFP_TABLE::itemName = "MAX_PROD_VFP_TABLE"; const int VFPPDIMS::MAX_PROD_VFP_TABLE::defaultValue = 0; -VFPPROD::VFPPROD( ) : ParserKeyword("VFPPROD") -{ - setSizeType(UNKNOWN); +VFPPROD::VFPPROD() : ParserKeyword("VFPPROD", KeywordSize(UNKNOWN)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("VFPPROD"); @@ -624,9 +590,7 @@ const std::string VFPPROD::ALQ_INDEX::itemName = "ALQ_INDEX"; const std::string VFPPROD::VALUES::itemName = "VALUES"; -VFPTABL::VFPTABL( ) : ParserKeyword("VFPTABL") -{ - setFixedSize( (size_t) 1); +VFPTABL::VFPTABL() : ParserKeyword("VFPTABL", KeywordSize(1, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("VFPTABL"); @@ -643,9 +607,7 @@ const std::string VFPTABL::keywordName = "VFPTABL"; const std::string VFPTABL::METHOD::itemName = "METHOD"; -VISAGE::VISAGE( ) : ParserKeyword("VISAGE") -{ - setFixedSize( (size_t) 0); +VISAGE::VISAGE() : ParserKeyword("VISAGE", KeywordSize(0, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("VISAGE"); @@ -653,9 +615,7 @@ VISAGE::VISAGE( ) : ParserKeyword("VISAGE") const std::string VISAGE::keywordName = "VISAGE"; -VISCD::VISCD( ) : ParserKeyword("VISCD") -{ - setFixedSize( (size_t) 0); +VISCD::VISCD() : ParserKeyword("VISCD", KeywordSize(0, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("VISCD"); @@ -663,10 +623,7 @@ VISCD::VISCD( ) : ParserKeyword("VISCD") const std::string VISCD::keywordName = "VISCD"; -VISCREF::VISCREF( ) : ParserKeyword("VISCREF") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTPVT",0); +VISCREF::VISCREF() : ParserKeyword("VISCREF", KeywordSize("TABDIMS", "NTPVT", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("VISCREF"); @@ -682,17 +639,21 @@ VISCREF::VISCREF( ) : ParserKeyword("VISCREF") item.push_backDimension("GasDissolutionFactor"); record.addItem(item); } + { + ParserItem item("API_GRAVITY", ParserItem::itype::DOUBLE); + item.push_backDimension("1"); + record.addItem(item); + } addRecord( record ); } } const std::string VISCREF::keywordName = "VISCREF"; const std::string VISCREF::REFERENCE_PRESSURE::itemName = "REFERENCE_PRESSURE"; const std::string VISCREF::REFERENCE_RS::itemName = "REFERENCE_RS"; +const std::string VISCREF::API_GRAVITY::itemName = "API_GRAVITY"; -VISDATES::VISDATES( ) : ParserKeyword("VISDATES") -{ - setSizeType(SLASH_TERMINATED); +VISDATES::VISDATES() : ParserKeyword("VISDATES", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("VISDATES"); @@ -726,9 +687,7 @@ const std::string VISDATES::TIMESTAMP::itemName = "TIMESTAMP"; const std::string VISDATES::TIMESTAMP::defaultValue = "00:00:00"; -VISOPTS::VISOPTS( ) : ParserKeyword("VISOPTS") -{ - setSizeType(SLASH_TERMINATED); +VISOPTS::VISOPTS() : ParserKeyword("VISOPTS", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SOLUTION"); clearDeckNames(); addDeckName("VISOPTS"); @@ -790,8 +749,8 @@ const std::string VISOPTS::RETAIN_RESTART_FREQUENCY::itemName = "RETAIN_RESTART_ const std::string VISOPTS::RETAIN_RESTART_FREQUENCY::defaultValue = "NO"; const std::string VISOPTS::RETAIN_RESTART_CONTENT::itemName = "RETAIN_RESTART_CONTENT"; const std::string VISOPTS::RETAIN_RESTART_CONTENT::defaultValue = "NO"; -const std::string VISOPTS::ERROR::itemName = "ERROR"; -const std::string VISOPTS::ERROR::defaultValue = "ERROR"; +const std::string VISOPTS::msvc_prefix_ERROR::itemName = "ERROR"; +const std::string VISOPTS::msvc_prefix_ERROR::defaultValue = "ERROR"; } diff --git a/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/W.cpp b/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/W.cpp index 2c88319d00..551491c194 100644 --- a/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/W.cpp +++ b/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/W.cpp @@ -1,19 +1,17 @@ -#include -#include -#include -#include + +#include +#include +#include +#include -#include +#include namespace Opm { namespace ParserKeywords { -WAGHYSTR::WAGHYSTR( ) : ParserKeyword("WAGHYSTR") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTSFUN",0); +WAGHYSTR::WAGHYSTR() : ParserKeyword("WAGHYSTR", KeywordSize("TABDIMS", "NTSFUN", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("WAGHYSTR"); @@ -64,7 +62,7 @@ WAGHYSTR::WAGHYSTR( ) : ParserKeyword("WAGHYSTR") const std::string WAGHYSTR::keywordName = "WAGHYSTR"; const std::string WAGHYSTR::LANDS_PARAMETER::itemName = "LANDS_PARAMETER"; const std::string WAGHYSTR::SECONDARY_DRAINAGE_REDUCTION::itemName = "SECONDARY_DRAINAGE_REDUCTION"; -const double WAGHYSTR::SECONDARY_DRAINAGE_REDUCTION::defaultValue = 0.000000; +const double WAGHYSTR::SECONDARY_DRAINAGE_REDUCTION::defaultValue = 0; const std::string WAGHYSTR::GAS_MODEL::itemName = "GAS_MODEL"; const std::string WAGHYSTR::GAS_MODEL::defaultValue = "YES"; const std::string WAGHYSTR::RES_OIL::itemName = "RES_OIL"; @@ -79,9 +77,7 @@ const std::string WAGHYSTR::RES_OIL_MOD_FRACTION::itemName = "RES_OIL_MOD_FRACTI const double WAGHYSTR::RES_OIL_MOD_FRACTION::defaultValue = 1.000000; -WAITBAL::WAITBAL( ) : ParserKeyword("WAITBAL") -{ - setFixedSize( (size_t) 1); +WAITBAL::WAITBAL() : ParserKeyword("WAITBAL", KeywordSize(1, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WAITBAL"); @@ -100,9 +96,7 @@ const std::string WAITBAL::WAIT_NETWORK_BALANCE::itemName = "WAIT_NETWORK_BALANC const std::string WAITBAL::WAIT_NETWORK_BALANCE::defaultValue = "NO"; -WALKALIN::WALKALIN( ) : ParserKeyword("WALKALIN") -{ - setSizeType(SLASH_TERMINATED); +WALKALIN::WALKALIN() : ParserKeyword("WALKALIN", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WALKALIN"); @@ -125,9 +119,7 @@ const std::string WALKALIN::WELL::itemName = "WELL"; const std::string WALKALIN::ALKALINE_CONCENTRAION::itemName = "ALKALINE_CONCENTRAION"; -WALQCALC::WALQCALC( ) : ParserKeyword("WALQCALC") -{ - setSizeType(SLASH_TERMINATED); +WALQCALC::WALQCALC() : ParserKeyword("WALQCALC", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WALQCALC"); @@ -151,9 +143,7 @@ const std::string WALQCALC::ALQ_DEF::itemName = "ALQ_DEF"; const std::string WALQCALC::ALQ_DEF::defaultValue = "NONE"; -WAPI::WAPI( ) : ParserKeyword("WAPI") -{ - setSizeType(SLASH_TERMINATED); +WAPI::WAPI() : ParserKeyword("WAPI", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WAPI"); @@ -175,27 +165,22 @@ const std::string WAPI::WELL::itemName = "WELL"; const std::string WAPI::API::itemName = "API"; -WARN::WARN( ) : ParserKeyword("WARN") -{ - setFixedSize( (size_t) 0); - addValidSectionName("EDIT"); +WARN::WARN() : ParserKeyword("WARN", KeywordSize(0, false)) { + addValidSectionName("RUNSPEC"); addValidSectionName("GRID"); + addValidSectionName("EDIT"); addValidSectionName("PROPS"); addValidSectionName("REGIONS"); - addValidSectionName("RUNSPEC"); - addValidSectionName("SCHEDULE"); addValidSectionName("SOLUTION"); addValidSectionName("SUMMARY"); + addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WARN"); } const std::string WARN::keywordName = "WARN"; -WATDENT::WATDENT( ) : ParserKeyword("WATDENT") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTPVT",0); +WATDENT::WATDENT() : ParserKeyword("WATDENT", KeywordSize("TABDIMS", "NTPVT", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("WATDENT"); @@ -228,12 +213,10 @@ const double WATDENT::REFERENCE_TEMPERATURE::defaultValue = 293.150000; const std::string WATDENT::EXPANSION_COEFF_LINEAR::itemName = "EXPANSION_COEFF_LINEAR"; const double WATDENT::EXPANSION_COEFF_LINEAR::defaultValue = 0.000300; const std::string WATDENT::EXPANSION_COEFF_QUADRATIC::itemName = "EXPANSION_COEFF_QUADRATIC"; -const double WATDENT::EXPANSION_COEFF_QUADRATIC::defaultValue = 0.000003; +const double WATDENT::EXPANSION_COEFF_QUADRATIC::defaultValue = 3e-06; -WATER::WATER( ) : ParserKeyword("WATER") -{ - setFixedSize( (size_t) 0); +WATER::WATER() : ParserKeyword("WATER", KeywordSize(0, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("WATER"); @@ -241,10 +224,35 @@ WATER::WATER( ) : ParserKeyword("WATER") const std::string WATER::keywordName = "WATER"; -WATVISCT::WATVISCT( ) : ParserKeyword("WATVISCT") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NTPVT",0); +WATJT::WATJT() : ParserKeyword("WATJT", KeywordSize("TABDIMS", "NTPVT", false, 0)) { + addValidSectionName("PROPS"); + clearDeckNames(); + addDeckName("WATJT"); + { + ParserRecord record; + { + ParserItem item("PREF", ParserItem::itype::DOUBLE); + item.setDefault( double(1.013200) ); + item.push_backDimension("Pressure"); + record.addItem(item); + } + { + ParserItem item("JOULE_THOMSON_COEFFICIENT", ParserItem::itype::DOUBLE); + item.setDefault( double(0) ); + item.push_backDimension("Temperature/Pressure"); + record.addItem(item); + } + addRecord( record ); + } +} +const std::string WATJT::keywordName = "WATJT"; +const std::string WATJT::PREF::itemName = "PREF"; +const double WATJT::PREF::defaultValue = 1.013200; +const std::string WATJT::JOULE_THOMSON_COEFFICIENT::itemName = "JOULE_THOMSON_COEFFICIENT"; +const double WATJT::JOULE_THOMSON_COEFFICIENT::defaultValue = 0; + + +WATVISCT::WATVISCT() : ParserKeyword("WATVISCT", KeywordSize("TABDIMS", "NTPVT", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("WATVISCT"); @@ -264,9 +272,7 @@ const std::string WATVISCT::keywordName = "WATVISCT"; const std::string WATVISCT::DATA::itemName = "DATA"; -WBHGLR::WBHGLR( ) : ParserKeyword("WBHGLR") -{ - setSizeType(SLASH_TERMINATED); +WBHGLR::WBHGLR() : ParserKeyword("WBHGLR", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WBHGLR"); @@ -335,9 +341,7 @@ const std::string WBHGLR::WORKOVER_REMOVE_CUTBACKS::itemName = "WORKOVER_REMOVE_ const std::string WBHGLR::WORKOVER_REMOVE_CUTBACKS::defaultValue = "NO"; -WBOREVOL::WBOREVOL( ) : ParserKeyword("WBOREVOL") -{ - setSizeType(SLASH_TERMINATED); +WBOREVOL::WBOREVOL() : ParserKeyword("WBOREVOL", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WBOREVOL"); @@ -364,13 +368,11 @@ WBOREVOL::WBOREVOL( ) : ParserKeyword("WBOREVOL") const std::string WBOREVOL::keywordName = "WBOREVOL"; const std::string WBOREVOL::WELL::itemName = "WELL"; const std::string WBOREVOL::WELLBORE_VOL::itemName = "WELLBORE_VOL"; -const double WBOREVOL::WELLBORE_VOL::defaultValue = 0.000010; +const double WBOREVOL::WELLBORE_VOL::defaultValue = 1e-05; const std::string WBOREVOL::START_BHP::itemName = "START_BHP"; -WCALCVAL::WCALCVAL( ) : ParserKeyword("WCALCVAL") -{ - setSizeType(SLASH_TERMINATED); +WCALCVAL::WCALCVAL() : ParserKeyword("WCALCVAL", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WCALCVAL"); @@ -393,9 +395,7 @@ const std::string WCALCVAL::WELL::itemName = "WELL"; const std::string WCALCVAL::CALORIFIC_GAS_VALUE::itemName = "CALORIFIC_GAS_VALUE"; -WCONHIST::WCONHIST( ) : ParserKeyword("WCONHIST") -{ - setSizeType(SLASH_TERMINATED); +WCONHIST::WCONHIST() : ParserKeyword("WCONHIST", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WCONHIST"); @@ -438,8 +438,8 @@ WCONHIST::WCONHIST( ) : ParserKeyword("WCONHIST") record.addItem(item); } { - ParserItem item("LIFT", ParserItem::itype::DOUBLE); - item.setDefault( double(0) ); + ParserItem item("ALQ", ParserItem::itype::UDA); + item.setDefault( UDAValue(0) ); record.addItem(item); } { @@ -455,7 +455,13 @@ WCONHIST::WCONHIST( ) : ParserKeyword("WCONHIST") record.addItem(item); } { - ParserItem item("NGLRAT", ParserItem::itype::DOUBLE); + ParserItem item("WGASRAT_HIS", ParserItem::itype::DOUBLE); + item.setDefault( double(0) ); + item.push_backDimension("GasSurfaceVolume/Time"); + record.addItem(item); + } + { + ParserItem item("NGLRAT_HIS", ParserItem::itype::DOUBLE); item.setDefault( double(0) ); item.push_backDimension("LiquidSurfaceVolume/Time"); record.addItem(item); @@ -469,26 +475,26 @@ const std::string WCONHIST::STATUS::itemName = "STATUS"; const std::string WCONHIST::STATUS::defaultValue = "OPEN"; const std::string WCONHIST::CMODE::itemName = "CMODE"; const std::string WCONHIST::ORAT::itemName = "ORAT"; -const UDAValue WCONHIST::ORAT::defaultValue = UDAValue(0.000000); +const UDAValue WCONHIST::ORAT::defaultValue = UDAValue(0); const std::string WCONHIST::WRAT::itemName = "WRAT"; -const UDAValue WCONHIST::WRAT::defaultValue = UDAValue(0.000000); +const UDAValue WCONHIST::WRAT::defaultValue = UDAValue(0); const std::string WCONHIST::GRAT::itemName = "GRAT"; -const UDAValue WCONHIST::GRAT::defaultValue = UDAValue(0.000000); +const UDAValue WCONHIST::GRAT::defaultValue = UDAValue(0); const std::string WCONHIST::VFP_TABLE::itemName = "VFP_TABLE"; const int WCONHIST::VFP_TABLE::defaultValue = 0; -const std::string WCONHIST::LIFT::itemName = "LIFT"; -const double WCONHIST::LIFT::defaultValue = 0.000000; +const std::string WCONHIST::ALQ::itemName = "ALQ"; +const UDAValue WCONHIST::ALQ::defaultValue = UDAValue(0); const std::string WCONHIST::THP::itemName = "THP"; -const UDAValue WCONHIST::THP::defaultValue = UDAValue(0.000000); +const UDAValue WCONHIST::THP::defaultValue = UDAValue(0); const std::string WCONHIST::BHP::itemName = "BHP"; -const UDAValue WCONHIST::BHP::defaultValue = UDAValue(0.000000); -const std::string WCONHIST::NGLRAT::itemName = "NGLRAT"; -const double WCONHIST::NGLRAT::defaultValue = 0.000000; +const UDAValue WCONHIST::BHP::defaultValue = UDAValue(0); +const std::string WCONHIST::WGASRAT_HIS::itemName = "WGASRAT_HIS"; +const double WCONHIST::WGASRAT_HIS::defaultValue = 0; +const std::string WCONHIST::NGLRAT_HIS::itemName = "NGLRAT_HIS"; +const double WCONHIST::NGLRAT_HIS::defaultValue = 0; -WCONINJ::WCONINJ( ) : ParserKeyword("WCONINJ") -{ - setFixedSize( (size_t) 0); +WCONINJ::WCONINJ() : ParserKeyword("WCONINJ", KeywordSize(0, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WCONINJ"); @@ -496,9 +502,7 @@ WCONINJ::WCONINJ( ) : ParserKeyword("WCONINJ") const std::string WCONINJ::keywordName = "WCONINJ"; -WCONINJE::WCONINJE( ) : ParserKeyword("WCONINJE") -{ - setSizeType(SLASH_TERMINATED); +WCONINJE::WCONINJE() : ParserKeyword("WCONINJE", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WCONINJE"); @@ -549,6 +553,7 @@ WCONINJE::WCONINJE( ) : ParserKeyword("WCONINJE") { ParserItem item("VAPOIL_C", ParserItem::itype::DOUBLE); item.setDefault( double(0) ); + item.push_backDimension("OilDissolutionFactor"); record.addItem(item); } { @@ -593,22 +598,20 @@ const std::string WCONINJE::THP::itemName = "THP"; const std::string WCONINJE::VFP_TABLE::itemName = "VFP_TABLE"; const int WCONINJE::VFP_TABLE::defaultValue = 0; const std::string WCONINJE::VAPOIL_C::itemName = "VAPOIL_C"; -const double WCONINJE::VAPOIL_C::defaultValue = 0.000000; +const double WCONINJE::VAPOIL_C::defaultValue = 0; const std::string WCONINJE::GAS_STEAM_RATIO::itemName = "GAS_STEAM_RATIO"; -const double WCONINJE::GAS_STEAM_RATIO::defaultValue = 0.000000; +const double WCONINJE::GAS_STEAM_RATIO::defaultValue = 0; const std::string WCONINJE::SURFACE_OIL_FRACTION::itemName = "SURFACE_OIL_FRACTION"; -const double WCONINJE::SURFACE_OIL_FRACTION::defaultValue = 0.000000; +const double WCONINJE::SURFACE_OIL_FRACTION::defaultValue = 0; const std::string WCONINJE::SURFACE_WATER_FRACTION::itemName = "SURFACE_WATER_FRACTION"; -const double WCONINJE::SURFACE_WATER_FRACTION::defaultValue = 0.000000; +const double WCONINJE::SURFACE_WATER_FRACTION::defaultValue = 0; const std::string WCONINJE::SURFACE_GAS_FRACTION::itemName = "SURFACE_GAS_FRACTION"; -const double WCONINJE::SURFACE_GAS_FRACTION::defaultValue = 0.000000; +const double WCONINJE::SURFACE_GAS_FRACTION::defaultValue = 0; const std::string WCONINJE::OIL_STEAM_RATIO::itemName = "OIL_STEAM_RATIO"; -const double WCONINJE::OIL_STEAM_RATIO::defaultValue = 0.000000; +const double WCONINJE::OIL_STEAM_RATIO::defaultValue = 0; -WCONINJH::WCONINJH( ) : ParserKeyword("WCONINJH") -{ - setSizeType(SLASH_TERMINATED); +WCONINJH::WCONINJH() : ParserKeyword("WCONINJH", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WCONINJH"); @@ -650,6 +653,7 @@ WCONINJH::WCONINJH( ) : ParserKeyword("WCONINJH") { ParserItem item("VAPOIL_C", ParserItem::itype::DOUBLE); item.setDefault( double(0) ); + item.push_backDimension("OilDissolutionFactor"); record.addItem(item); } { @@ -686,20 +690,18 @@ const std::string WCONINJH::THP::itemName = "THP"; const std::string WCONINJH::VFP_TABLE::itemName = "VFP_TABLE"; const int WCONINJH::VFP_TABLE::defaultValue = 0; const std::string WCONINJH::VAPOIL_C::itemName = "VAPOIL_C"; -const double WCONINJH::VAPOIL_C::defaultValue = 0.000000; +const double WCONINJH::VAPOIL_C::defaultValue = 0; const std::string WCONINJH::SURFACE_OIL_FRACTION::itemName = "SURFACE_OIL_FRACTION"; -const double WCONINJH::SURFACE_OIL_FRACTION::defaultValue = 0.000000; +const double WCONINJH::SURFACE_OIL_FRACTION::defaultValue = 0; const std::string WCONINJH::SURFACE_WATER_FRACTION::itemName = "SURFACE_WATER_FRACTION"; -const double WCONINJH::SURFACE_WATER_FRACTION::defaultValue = 0.000000; +const double WCONINJH::SURFACE_WATER_FRACTION::defaultValue = 0; const std::string WCONINJH::SURFACE_GAS_FRACTION::itemName = "SURFACE_GAS_FRACTION"; -const double WCONINJH::SURFACE_GAS_FRACTION::defaultValue = 0.000000; +const double WCONINJH::SURFACE_GAS_FRACTION::defaultValue = 0; const std::string WCONINJH::CMODE::itemName = "CMODE"; const std::string WCONINJH::CMODE::defaultValue = "RATE"; -WCONINJP::WCONINJP( ) : ParserKeyword("WCONINJP") -{ - setSizeType(SLASH_TERMINATED); +WCONINJP::WCONINJP() : ParserKeyword("WCONINJP", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WCONINJP"); @@ -786,20 +788,18 @@ const int WCONINJP::VFP_TABLE::defaultValue = 0; const std::string WCONINJP::VOIDAGE_TARGET_MULTIPLIER::itemName = "VOIDAGE_TARGET_MULTIPLIER"; const double WCONINJP::VOIDAGE_TARGET_MULTIPLIER::defaultValue = 1.000000; const std::string WCONINJP::OIL_FRACTION::itemName = "OIL_FRACTION"; -const double WCONINJP::OIL_FRACTION::defaultValue = 0.000000; +const double WCONINJP::OIL_FRACTION::defaultValue = 0; const std::string WCONINJP::WATER_FRACTION::itemName = "WATER_FRACTION"; -const double WCONINJP::WATER_FRACTION::defaultValue = 0.000000; +const double WCONINJP::WATER_FRACTION::defaultValue = 0; const std::string WCONINJP::GAS_FRACTION::itemName = "GAS_FRACTION"; -const double WCONINJP::GAS_FRACTION::defaultValue = 0.000000; +const double WCONINJP::GAS_FRACTION::defaultValue = 0; const std::string WCONINJP::WELL::itemName = "WELL"; const std::string WCONINJP::PROD_FRACTION::itemName = "PROD_FRACTION"; const std::string WCONINJP::FIPNUM_VALUE::itemName = "FIPNUM_VALUE"; const int WCONINJP::FIPNUM_VALUE::defaultValue = 0; -WCONPROD::WCONPROD( ) : ParserKeyword("WCONPROD") -{ - setSizeType(SLASH_TERMINATED); +WCONPROD::WCONPROD() : ParserKeyword("WCONPROD", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WCONPROD"); @@ -866,8 +866,8 @@ WCONPROD::WCONPROD( ) : ParserKeyword("WCONPROD") record.addItem(item); } { - ParserItem item("ALQ", ParserItem::itype::DOUBLE); - item.setDefault( double(0) ); + ParserItem item("ALQ", ParserItem::itype::UDA); + item.setDefault( UDAValue(0) ); record.addItem(item); } { @@ -911,23 +911,23 @@ const std::string WCONPROD::STATUS::itemName = "STATUS"; const std::string WCONPROD::STATUS::defaultValue = "OPEN"; const std::string WCONPROD::CMODE::itemName = "CMODE"; const std::string WCONPROD::ORAT::itemName = "ORAT"; -const UDAValue WCONPROD::ORAT::defaultValue = UDAValue(0.000000); +const UDAValue WCONPROD::ORAT::defaultValue = UDAValue(0); const std::string WCONPROD::WRAT::itemName = "WRAT"; -const UDAValue WCONPROD::WRAT::defaultValue = UDAValue(0.000000); +const UDAValue WCONPROD::WRAT::defaultValue = UDAValue(0); const std::string WCONPROD::GRAT::itemName = "GRAT"; -const UDAValue WCONPROD::GRAT::defaultValue = UDAValue(0.000000); +const UDAValue WCONPROD::GRAT::defaultValue = UDAValue(0); const std::string WCONPROD::LRAT::itemName = "LRAT"; -const UDAValue WCONPROD::LRAT::defaultValue = UDAValue(0.000000); +const UDAValue WCONPROD::LRAT::defaultValue = UDAValue(0); const std::string WCONPROD::RESV::itemName = "RESV"; -const UDAValue WCONPROD::RESV::defaultValue = UDAValue(0.000000); +const UDAValue WCONPROD::RESV::defaultValue = UDAValue(0); const std::string WCONPROD::BHP::itemName = "BHP"; const UDAValue WCONPROD::BHP::defaultValue = UDAValue(1.013250); const std::string WCONPROD::THP::itemName = "THP"; -const UDAValue WCONPROD::THP::defaultValue = UDAValue(0.000000); +const UDAValue WCONPROD::THP::defaultValue = UDAValue(0); const std::string WCONPROD::VFP_TABLE::itemName = "VFP_TABLE"; const int WCONPROD::VFP_TABLE::defaultValue = 0; const std::string WCONPROD::ALQ::itemName = "ALQ"; -const double WCONPROD::ALQ::defaultValue = 0.000000; +const UDAValue WCONPROD::ALQ::defaultValue = UDAValue(0); const std::string WCONPROD::E300_ITEM13::itemName = "E300_ITEM13"; const std::string WCONPROD::E300_ITEM14::itemName = "E300_ITEM14"; const std::string WCONPROD::E300_ITEM15::itemName = "E300_ITEM15"; @@ -938,9 +938,7 @@ const std::string WCONPROD::E300_ITEM19::itemName = "E300_ITEM19"; const std::string WCONPROD::E300_ITEM20::itemName = "E300_ITEM20"; -WCUTBACK::WCUTBACK( ) : ParserKeyword("WCUTBACK") -{ - setSizeType(SLASH_TERMINATED); +WCUTBACK::WCUTBACK() : ParserKeyword("WCUTBACK", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WCUTBACK"); @@ -952,14 +950,22 @@ WCUTBACK::WCUTBACK( ) : ParserKeyword("WCUTBACK") } { ParserItem item("WCT_LIMIT", ParserItem::itype::DOUBLE); + item.push_backDimension("LiquidSurfaceVolume/LiquidSurfaceVolume"); record.addItem(item); } { ParserItem item("GOR_LIMIT", ParserItem::itype::DOUBLE); + item.push_backDimension("GasDissolutionFactor"); + record.addItem(item); + } + { + ParserItem item("GLR_LIMIT", ParserItem::itype::DOUBLE); + item.push_backDimension("GasDissolutionFactor"); record.addItem(item); } { ParserItem item("WGR_LIMIT", ParserItem::itype::DOUBLE); + item.push_backDimension("OilDissolutionFactor"); record.addItem(item); } { @@ -986,21 +992,25 @@ WCUTBACK::WCUTBACK( ) : ParserKeyword("WCUTBACK") { ParserItem item("WCT_LIMIT_REVERSE", ParserItem::itype::DOUBLE); item.setDefault( double(0) ); + item.push_backDimension("LiquidSurfaceVolume/LiquidSurfaceVolume"); record.addItem(item); } { ParserItem item("GOR_LIMIT_REVERSE", ParserItem::itype::DOUBLE); item.setDefault( double(0) ); + item.push_backDimension("GasDissolutionFactor"); record.addItem(item); } { ParserItem item("GLR_LIMIT_REVERSE", ParserItem::itype::DOUBLE); item.setDefault( double(0) ); + item.push_backDimension("GasDissolutionFactor"); record.addItem(item); } { ParserItem item("WGR_LIMIT_REVERSE", ParserItem::itype::DOUBLE); item.setDefault( double(0) ); + item.push_backDimension("OilDissolutionFactor"); record.addItem(item); } { @@ -1015,29 +1025,28 @@ const std::string WCUTBACK::keywordName = "WCUTBACK"; const std::string WCUTBACK::WELL::itemName = "WELL"; const std::string WCUTBACK::WCT_LIMIT::itemName = "WCT_LIMIT"; const std::string WCUTBACK::GOR_LIMIT::itemName = "GOR_LIMIT"; +const std::string WCUTBACK::GLR_LIMIT::itemName = "GLR_LIMIT"; const std::string WCUTBACK::WGR_LIMIT::itemName = "WGR_LIMIT"; const std::string WCUTBACK::RATE_CUTBACK::itemName = "RATE_CUTBACK"; const double WCUTBACK::RATE_CUTBACK::defaultValue = 1.000000; const std::string WCUTBACK::PHASE::itemName = "PHASE"; const std::string WCUTBACK::PRESSURE_LIMIT::itemName = "PRESSURE_LIMIT"; -const double WCUTBACK::PRESSURE_LIMIT::defaultValue = 0.000000; +const double WCUTBACK::PRESSURE_LIMIT::defaultValue = 0; const std::string WCUTBACK::PRESSURE_LIMIT_REVERSE::itemName = "PRESSURE_LIMIT_REVERSE"; -const double WCUTBACK::PRESSURE_LIMIT_REVERSE::defaultValue = 0.000000; +const double WCUTBACK::PRESSURE_LIMIT_REVERSE::defaultValue = 0; const std::string WCUTBACK::WCT_LIMIT_REVERSE::itemName = "WCT_LIMIT_REVERSE"; -const double WCUTBACK::WCT_LIMIT_REVERSE::defaultValue = 0.000000; +const double WCUTBACK::WCT_LIMIT_REVERSE::defaultValue = 0; const std::string WCUTBACK::GOR_LIMIT_REVERSE::itemName = "GOR_LIMIT_REVERSE"; -const double WCUTBACK::GOR_LIMIT_REVERSE::defaultValue = 0.000000; +const double WCUTBACK::GOR_LIMIT_REVERSE::defaultValue = 0; const std::string WCUTBACK::GLR_LIMIT_REVERSE::itemName = "GLR_LIMIT_REVERSE"; -const double WCUTBACK::GLR_LIMIT_REVERSE::defaultValue = 0.000000; +const double WCUTBACK::GLR_LIMIT_REVERSE::defaultValue = 0; const std::string WCUTBACK::WGR_LIMIT_REVERSE::itemName = "WGR_LIMIT_REVERSE"; -const double WCUTBACK::WGR_LIMIT_REVERSE::defaultValue = 0.000000; +const double WCUTBACK::WGR_LIMIT_REVERSE::defaultValue = 0; const std::string WCUTBACK::WORKOVER_REMOVE::itemName = "WORKOVER_REMOVE"; const std::string WCUTBACK::WORKOVER_REMOVE::defaultValue = "NO"; -WCUTBACT::WCUTBACT( ) : ParserKeyword("WCUTBACT") -{ - setSizeType(SLASH_TERMINATED); +WCUTBACT::WCUTBACT() : ParserKeyword("WCUTBACT", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WCUTBACT"); @@ -1073,9 +1082,7 @@ const std::string WCUTBACT::WORKOVER_REMOVE::itemName = "WORKOVER_REMOVE"; const std::string WCUTBACT::WORKOVER_REMOVE::defaultValue = "NO"; -WCYCLE::WCYCLE( ) : ParserKeyword("WCYCLE") -{ - setSizeType(SLASH_TERMINATED); +WCYCLE::WCYCLE() : ParserKeyword("WCYCLE", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WCYCLE"); @@ -1120,20 +1127,18 @@ WCYCLE::WCYCLE( ) : ParserKeyword("WCYCLE") const std::string WCYCLE::keywordName = "WCYCLE"; const std::string WCYCLE::WELL::itemName = "WELL"; const std::string WCYCLE::ON_TIME::itemName = "ON_TIME"; -const double WCYCLE::ON_TIME::defaultValue = 0.000000; +const double WCYCLE::ON_TIME::defaultValue = 0; const std::string WCYCLE::OFF_TIME::itemName = "OFF_TIME"; -const double WCYCLE::OFF_TIME::defaultValue = 0.000000; +const double WCYCLE::OFF_TIME::defaultValue = 0; const std::string WCYCLE::START_TIME::itemName = "START_TIME"; -const double WCYCLE::START_TIME::defaultValue = 0.000000; +const double WCYCLE::START_TIME::defaultValue = 0; const std::string WCYCLE::MAX_TIMESTEP::itemName = "MAX_TIMESTEP"; -const double WCYCLE::MAX_TIMESTEP::defaultValue = 0.000000; +const double WCYCLE::MAX_TIMESTEP::defaultValue = 0; const std::string WCYCLE::CONTROLLED_TIMESTEP::itemName = "CONTROLLED_TIMESTEP"; const std::string WCYCLE::CONTROLLED_TIMESTEP::defaultValue = "NO"; -WDFAC::WDFAC( ) : ParserKeyword("WDFAC") -{ - setSizeType(SLASH_TERMINATED); +WDFAC::WDFAC() : ParserKeyword("WDFAC", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WDFAC"); @@ -1155,12 +1160,10 @@ WDFAC::WDFAC( ) : ParserKeyword("WDFAC") const std::string WDFAC::keywordName = "WDFAC"; const std::string WDFAC::WELL::itemName = "WELL"; const std::string WDFAC::DFACTOR::itemName = "DFACTOR"; -const double WDFAC::DFACTOR::defaultValue = 0.000000; +const double WDFAC::DFACTOR::defaultValue = 0; -WDFACCOR::WDFACCOR( ) : ParserKeyword("WDFACCOR") -{ - setSizeType(SLASH_TERMINATED); +WDFACCOR::WDFACCOR() : ParserKeyword("WDFACCOR", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WDFACCOR"); @@ -1191,16 +1194,14 @@ WDFACCOR::WDFACCOR( ) : ParserKeyword("WDFACCOR") const std::string WDFACCOR::keywordName = "WDFACCOR"; const std::string WDFACCOR::WELLNAME::itemName = "WELLNAME"; const std::string WDFACCOR::A::itemName = "A"; -const double WDFACCOR::A::defaultValue = 0.000000; +const double WDFACCOR::A::defaultValue = 0; const std::string WDFACCOR::B::itemName = "B"; -const double WDFACCOR::B::defaultValue = 0.000000; +const double WDFACCOR::B::defaultValue = 0; const std::string WDFACCOR::C::itemName = "C"; -const double WDFACCOR::C::defaultValue = 0.000000; +const double WDFACCOR::C::defaultValue = 0; -WDRILPRI::WDRILPRI( ) : ParserKeyword("WDRILPRI") -{ - setSizeType(SLASH_TERMINATED); +WDRILPRI::WDRILPRI() : ParserKeyword("WDRILPRI", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WDRILPRI"); @@ -1231,9 +1232,7 @@ const std::string WDRILPRI::DRILLING_UNIT::itemName = "DRILLING_UNIT"; const int WDRILPRI::DRILLING_UNIT::defaultValue = 0; -WDRILRES::WDRILRES( ) : ParserKeyword("WDRILRES") -{ - setFixedSize( (size_t) 0); +WDRILRES::WDRILRES() : ParserKeyword("WDRILRES", KeywordSize(0, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WDRILRES"); @@ -1241,9 +1240,7 @@ WDRILRES::WDRILRES( ) : ParserKeyword("WDRILRES") const std::string WDRILRES::keywordName = "WDRILRES"; -WDRILTIM::WDRILTIM( ) : ParserKeyword("WDRILTIM") -{ - setSizeType(SLASH_TERMINATED); +WDRILTIM::WDRILTIM() : ParserKeyword("WDRILTIM", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WDRILTIM"); @@ -1276,9 +1273,7 @@ const std::string WDRILTIM::WORKOVER_CLOSE::itemName = "WORKOVER_CLOSE"; const std::string WDRILTIM::COMPARTMENT::itemName = "COMPARTMENT"; -WECON::WECON( ) : ParserKeyword("WECON") -{ - setSizeType(SLASH_TERMINATED); +WECON::WECON() : ParserKeyword("WECON", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WECON"); @@ -1308,11 +1303,13 @@ WECON::WECON( ) : ParserKeyword("WECON") { ParserItem item("MAX_GAS_OIL_RATIO", ParserItem::itype::UDA); item.setDefault( UDAValue(0) ); + item.push_backDimension("GasSurfaceVolume/LiquidSurfaceVolume"); record.addItem(item); } { ParserItem item("MAX_WATER_GAS_RATIO", ParserItem::itype::UDA); item.setDefault( UDAValue(0) ); + item.push_backDimension("LiquidSurfaceVolume/GasSurfaceVolume"); record.addItem(item); } { @@ -1372,15 +1369,15 @@ WECON::WECON( ) : ParserKeyword("WECON") const std::string WECON::keywordName = "WECON"; const std::string WECON::WELL::itemName = "WELL"; const std::string WECON::MIN_OIL_PRODUCTION::itemName = "MIN_OIL_PRODUCTION"; -const UDAValue WECON::MIN_OIL_PRODUCTION::defaultValue = UDAValue(0.000000); +const UDAValue WECON::MIN_OIL_PRODUCTION::defaultValue = UDAValue(0); const std::string WECON::MIN_GAS_PRODUCTION::itemName = "MIN_GAS_PRODUCTION"; -const UDAValue WECON::MIN_GAS_PRODUCTION::defaultValue = UDAValue(0.000000); +const UDAValue WECON::MIN_GAS_PRODUCTION::defaultValue = UDAValue(0); const std::string WECON::MAX_WATER_CUT::itemName = "MAX_WATER_CUT"; -const UDAValue WECON::MAX_WATER_CUT::defaultValue = UDAValue(0.000000); +const UDAValue WECON::MAX_WATER_CUT::defaultValue = UDAValue(0); const std::string WECON::MAX_GAS_OIL_RATIO::itemName = "MAX_GAS_OIL_RATIO"; -const UDAValue WECON::MAX_GAS_OIL_RATIO::defaultValue = UDAValue(0.000000); +const UDAValue WECON::MAX_GAS_OIL_RATIO::defaultValue = UDAValue(0); const std::string WECON::MAX_WATER_GAS_RATIO::itemName = "MAX_WATER_GAS_RATIO"; -const UDAValue WECON::MAX_WATER_GAS_RATIO::defaultValue = UDAValue(0.000000); +const UDAValue WECON::MAX_WATER_GAS_RATIO::defaultValue = UDAValue(0); const std::string WECON::WORKOVER_RATIO_LIMIT::itemName = "WORKOVER_RATIO_LIMIT"; const std::string WECON::WORKOVER_RATIO_LIMIT::defaultValue = "NONE"; const std::string WECON::END_RUN_FLAG::itemName = "END_RUN_FLAG"; @@ -1390,20 +1387,18 @@ const std::string WECON::FOLLOW_ON_WELL::defaultValue = "'"; const std::string WECON::LIMITED_QUANTITY::itemName = "LIMITED_QUANTITY"; const std::string WECON::LIMITED_QUANTITY::defaultValue = "RATE"; const std::string WECON::SECOND_MAX_WATER_CUT::itemName = "SECOND_MAX_WATER_CUT"; -const double WECON::SECOND_MAX_WATER_CUT::defaultValue = 0.000000; +const double WECON::SECOND_MAX_WATER_CUT::defaultValue = 0; const std::string WECON::WORKOVER_SECOND_WATER_CUT_LIMIT::itemName = "WORKOVER_SECOND_WATER_CUT_LIMIT"; const std::string WECON::MAX_GAS_LIQUID_RATIO::itemName = "MAX_GAS_LIQUID_RATIO"; -const double WECON::MAX_GAS_LIQUID_RATIO::defaultValue = 0.000000; +const double WECON::MAX_GAS_LIQUID_RATIO::defaultValue = 0; const std::string WECON::MIN_LIQUID_PRODCUTION_RATE::itemName = "MIN_LIQUID_PRODCUTION_RATE"; -const double WECON::MIN_LIQUID_PRODCUTION_RATE::defaultValue = 0.000000; +const double WECON::MIN_LIQUID_PRODCUTION_RATE::defaultValue = 0; const std::string WECON::MAX_TEMP::itemName = "MAX_TEMP"; const std::string WECON::MIN_RES_FLUID_RATE::itemName = "MIN_RES_FLUID_RATE"; -const double WECON::MIN_RES_FLUID_RATE::defaultValue = 0.000000; +const double WECON::MIN_RES_FLUID_RATE::defaultValue = 0; -WECONINJ::WECONINJ( ) : ParserKeyword("WECONINJ") -{ - setSizeType(SLASH_TERMINATED); +WECONINJ::WECONINJ() : ParserKeyword("WECONINJ", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WECONINJ"); @@ -1429,14 +1424,12 @@ WECONINJ::WECONINJ( ) : ParserKeyword("WECONINJ") const std::string WECONINJ::keywordName = "WECONINJ"; const std::string WECONINJ::WELL::itemName = "WELL"; const std::string WECONINJ::MIN_RATE::itemName = "MIN_RATE"; -const double WECONINJ::MIN_RATE::defaultValue = 0.000000; +const double WECONINJ::MIN_RATE::defaultValue = 0; const std::string WECONINJ::QUANTITY::itemName = "QUANTITY"; const std::string WECONINJ::QUANTITY::defaultValue = "RATE"; -WECONT::WECONT( ) : ParserKeyword("WECONT") -{ - setSizeType(SLASH_TERMINATED); +WECONT::WECONT() : ParserKeyword("WECONT", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WECONT"); @@ -1472,9 +1465,7 @@ const std::string WECONT::END_RUN_FLAG::defaultValue = "NO"; const std::string WECONT::FOLLOW_ON_WELL::itemName = "FOLLOW_ON_WELL"; -WEFAC::WEFAC( ) : ParserKeyword("WEFAC") -{ - setSizeType(SLASH_TERMINATED); +WEFAC::WEFAC() : ParserKeyword("WEFAC", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WEFAC"); @@ -1505,9 +1496,7 @@ const std::string WEFAC::EXTENDED_NETWORK_OPT::itemName = "EXTENDED_NETWORK_OPT" const std::string WEFAC::EXTENDED_NETWORK_OPT::defaultValue = "YES"; -WELCNTL::WELCNTL( ) : ParserKeyword("WELCNTL") -{ - setSizeType(SLASH_TERMINATED); +WELCNTL::WELCNTL() : ParserKeyword("WELCNTL", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WELCNTL"); @@ -1534,9 +1523,7 @@ const std::string WELCNTL::CMODE::itemName = "CMODE"; const std::string WELCNTL::NEW_VALUE::itemName = "NEW_VALUE"; -WELDEBUG::WELDEBUG( ) : ParserKeyword("WELDEBUG") -{ - setSizeType(SLASH_TERMINATED); +WELDEBUG::WELDEBUG() : ParserKeyword("WELDEBUG", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WELDEBUG"); @@ -1558,9 +1545,7 @@ const std::string WELDEBUG::WELL::itemName = "WELL"; const std::string WELDEBUG::DEBUG_FLAG::itemName = "DEBUG_FLAG"; -WELDRAW::WELDRAW( ) : ParserKeyword("WELDRAW") -{ - setSizeType(SLASH_TERMINATED); +WELDRAW::WELDRAW() : ParserKeyword("WELDRAW", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WELDRAW"); @@ -1602,9 +1587,7 @@ const std::string WELDRAW::GRID_BLOCKS::itemName = "GRID_BLOCKS"; const std::string WELDRAW::GRID_BLOCKS::defaultValue = "AVG"; -WELEVNT::WELEVNT( ) : ParserKeyword("WELEVNT") -{ - setSizeType(SLASH_TERMINATED); +WELEVNT::WELEVNT() : ParserKeyword("WELEVNT", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WELEVNT"); @@ -1626,9 +1609,7 @@ const std::string WELEVNT::WELL::itemName = "WELL"; const std::string WELEVNT::WPWEM_VALUE::itemName = "WPWEM_VALUE"; -WELLDIMS::WELLDIMS( ) : ParserKeyword("WELLDIMS") -{ - setFixedSize( (size_t) 1); +WELLDIMS::WELLDIMS() : ParserKeyword("WELLDIMS", KeywordSize(1, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("WELLDIMS"); @@ -1696,7 +1677,12 @@ WELLDIMS::WELLDIMS( ) : ParserKeyword("WELLDIMS") } { ParserItem item("MAX_SECONDARY_WELLS", ParserItem::itype::INT); - item.setDefault( 1 ); + item.setDefault( 10 ); + record.addItem(item); + } + { + ParserItem item("MAX_GPP_ROWS", ParserItem::itype::INT); + item.setDefault( 201 ); record.addItem(item); } addRecord( record ); @@ -1728,37 +1714,37 @@ const int WELLDIMS::MAX_WELLIST_PR_WELL::defaultValue = 1; const std::string WELLDIMS::MAX_DYNAMIC_WELLIST::itemName = "MAX_DYNAMIC_WELLIST"; const int WELLDIMS::MAX_DYNAMIC_WELLIST::defaultValue = 1; const std::string WELLDIMS::MAX_SECONDARY_WELLS::itemName = "MAX_SECONDARY_WELLS"; -const int WELLDIMS::MAX_SECONDARY_WELLS::defaultValue = 1; +const int WELLDIMS::MAX_SECONDARY_WELLS::defaultValue = 10; +const std::string WELLDIMS::MAX_GPP_ROWS::itemName = "MAX_GPP_ROWS"; +const int WELLDIMS::MAX_GPP_ROWS::defaultValue = 201; -WELL_COMPLETION_PROBE::WELL_COMPLETION_PROBE( ) : ParserKeyword("WELL_COMPLETION_PROBE") -{ - setSizeType(SLASH_TERMINATED); +WELL_COMPLETION_PROBE::WELL_COMPLETION_PROBE() : ParserKeyword("WELL_COMPLETION_PROBE", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SUMMARY"); clearDeckNames(); + addDeckName("WWPTL"); + addDeckName("WWFRL"); + addDeckName("WOPTL"); + addDeckName("WOFRL"); + addDeckName("WWPRL"); + addDeckName("WOPRL"); + addDeckName("WOITL"); + addDeckName("WWIRL"); + addDeckName("WWITL"); addDeckName("WGFRL"); - addDeckName("WGLRL"); - addDeckName("WGORL"); addDeckName("WGPRL"); addDeckName("WGPTL"); addDeckName("WLFRL"); + addDeckName("WWGRL"); addDeckName("WLPTL"); - addDeckName("WOFRL"); - addDeckName("WOGRL"); - addDeckName("WOITL"); - addDeckName("WOPRL"); - addDeckName("WOPTL"); addDeckName("WVFRL"); addDeckName("WVIRL"); - addDeckName("WVITL"); addDeckName("WVPTL"); + addDeckName("WVITL"); addDeckName("WWCTL"); - addDeckName("WWFRL"); - addDeckName("WWGRL"); - addDeckName("WWIRL"); - addDeckName("WWITL"); - addDeckName("WWPRL"); - addDeckName("WWPTL"); + addDeckName("WGORL"); + addDeckName("WOGRL"); + addDeckName("WGLRL"); { ParserRecord record; { @@ -1777,223 +1763,222 @@ const std::string WELL_COMPLETION_PROBE::WELL::itemName = "WELL"; const std::string WELL_COMPLETION_PROBE::COMPLETION::itemName = "COMPLETION"; -WELL_PROBE::WELL_PROBE( ) : ParserKeyword("WELL_PROBE") -{ - setFixedSize( (size_t) 1); +WELL_PROBE::WELL_PROBE() : ParserKeyword("WELL_PROBE", KeywordSize(1, false)) { addValidSectionName("SUMMARY"); clearDeckNames(); - addDeckName("NGOPAS"); - addDeckName("WALQ"); - addDeckName("WAPI"); - addDeckName("WBGLR"); - addDeckName("WBHP"); - addDeckName("WBHPFP"); - addDeckName("WBHPH"); - addDeckName("WBP"); - addDeckName("WBP4"); - addDeckName("WBP5"); - addDeckName("WBP9"); - addDeckName("WCIC"); - addDeckName("WCIR"); - addDeckName("WCIT"); - addDeckName("WCPC"); - addDeckName("WCPR"); - addDeckName("WCPT"); - addDeckName("WDRPR"); - addDeckName("WEDC"); - addDeckName("WEFF"); - addDeckName("WEFFG"); - addDeckName("WEPR"); - addDeckName("WEPT"); - addDeckName("WGCV"); - addDeckName("WGDC"); - addDeckName("WGIGR"); - addDeckName("WGIP"); - addDeckName("WGIP2"); - addDeckName("WGIR"); - addDeckName("WGIRH"); - addDeckName("WGIRT"); - addDeckName("WGIT"); - addDeckName("WGITH"); - addDeckName("WGLIR"); - addDeckName("WGLR"); - addDeckName("WGLRH"); - addDeckName("WGOR"); - addDeckName("WGORH"); - addDeckName("WGORL"); - addDeckName("WGPGR"); - addDeckName("WGPI"); - addDeckName("WGPI2"); + addDeckName("WOPR"); addDeckName("WGPP"); + addDeckName("WOPTF"); + addDeckName("WOIGR"); + addDeckName("WOPRH"); + addDeckName("WOPT"); + addDeckName("WWPRT"); + addDeckName("WPIL"); + addDeckName("WOPRT"); + addDeckName("WOPTH"); + addDeckName("WTIRSUR"); + addDeckName("WPWE1"); + addDeckName("WOPRF"); + addDeckName("WGIT"); + addDeckName("WOPRS"); + addDeckName("WTPRCAT"); + addDeckName("WBHPH"); + addDeckName("WGIRH"); + addDeckName("WOPTS"); + addDeckName("WOIRH"); + addDeckName("WOIR"); + addDeckName("WPI9"); + addDeckName("WGPGR"); + addDeckName("WGIP2"); + addDeckName("WTPTFOA"); + addDeckName("WOIRT"); + addDeckName("WWPI2"); + addDeckName("WOIT"); + addDeckName("WGIP"); + addDeckName("WPIO"); + addDeckName("WOITH"); + addDeckName("WOPP"); + addDeckName("WOPP2"); + addDeckName("WTITS"); + addDeckName("WOPI"); + addDeckName("WOPI2"); + addDeckName("WTPTSUR"); + addDeckName("WGIRT"); + addDeckName("WPI1"); + addDeckName("WWPI"); + addDeckName("WWVIR"); + addDeckName("WOPGR"); + addDeckName("WWPR"); + addDeckName("WWPRH"); + addDeckName("WWIGR"); + addDeckName("WPWE7"); + addDeckName("WWPP2"); + addDeckName("WWPT"); + addDeckName("WTIRHEA"); + addDeckName("WWPTH"); + addDeckName("WWIRH"); + addDeckName("WNPT"); + addDeckName("WHDF"); + addDeckName("WWIR"); + addDeckName("WWIRT"); + addDeckName("WNPR"); + addDeckName("WMCTL"); + addDeckName("WWIT"); + addDeckName("WOGR"); + addDeckName("WWITH"); addDeckName("WGPP2"); + addDeckName("WWPP"); + addDeckName("WTIC"); + addDeckName("WWIP"); + addDeckName("WGPPS"); + addDeckName("WWPGR"); + addDeckName("WLPR"); + addDeckName("WWIP2"); + addDeckName("WWPIR"); + addDeckName("WGPR"); + addDeckName("WTITFOA"); + addDeckName("WSPT"); + addDeckName("WGPRH"); + addDeckName("WGPRT"); + addDeckName("WGPRF"); + addDeckName("WGPRS"); + addDeckName("WGPI2"); + addDeckName("WTITALK"); + addDeckName("WGPT"); + addDeckName("WGPTH"); + addDeckName("WGPTF"); + addDeckName("WGPTS"); + addDeckName("WBHP"); + addDeckName("WGIR"); + addDeckName("WAPI"); + addDeckName("WGITH"); + addDeckName("WGPPS2"); addDeckName("WGPPF"); addDeckName("WGPPF2"); - addDeckName("WGPPS"); - addDeckName("WGPPS2"); - addDeckName("WGPR"); - addDeckName("WGPRF"); - addDeckName("WGPRFP"); - addDeckName("WGPRH"); - addDeckName("WGPRS"); - addDeckName("WGPRT"); - addDeckName("WGPT"); - addDeckName("WGPTF"); - addDeckName("WGPTH"); - addDeckName("WGPTS"); + addDeckName("WGPI"); + addDeckName("WGIGR"); + addDeckName("WTIRS"); + addDeckName("WGLIR"); addDeckName("WGQ"); - addDeckName("WGVIR"); - addDeckName("WGVPR"); - addDeckName("WHD"); - addDeckName("WHDF"); + addDeckName("WLPRH"); + addDeckName("WLPRT"); + addDeckName("WLPT"); + addDeckName("WLPTH"); + addDeckName("WTPRANI"); addDeckName("WJPR"); addDeckName("WJPRH"); addDeckName("WJPRT"); addDeckName("WJPT"); addDeckName("WJPTH"); - addDeckName("WLPR"); - addDeckName("WLPRH"); - addDeckName("WLPRT"); - addDeckName("WLPT"); - addDeckName("WLPTH"); - addDeckName("WMCON"); - addDeckName("WMCTL"); - addDeckName("WMIR"); - addDeckName("WMIT"); - addDeckName("WMMW"); - addDeckName("WMPR"); - addDeckName("WMPT"); - addDeckName("WMVFP"); - addDeckName("WNIR"); - addDeckName("WNIT"); - addDeckName("WNPR"); - addDeckName("WNPT"); - addDeckName("WOGLR"); - addDeckName("WOGR"); + addDeckName("WVPR"); + addDeckName("WEIR"); + addDeckName("WVPRT"); + addDeckName("WVPT"); + addDeckName("WVPGR"); + addDeckName("WVIR"); + addDeckName("WTITCAT"); + addDeckName("WVIRT"); + addDeckName("WVIT"); + addDeckName("WWCT"); + addDeckName("WWCTH"); + addDeckName("WGOR"); + addDeckName("WGORH"); addDeckName("WOGRH"); - addDeckName("WOIGR"); - addDeckName("WOIR"); - addDeckName("WOIRH"); - addDeckName("WOIRT"); - addDeckName("WOIT"); - addDeckName("WOITH"); - addDeckName("WOPGR"); - addDeckName("WOPI"); - addDeckName("WOPI2"); - addDeckName("WOPP"); - addDeckName("WOPP2"); - addDeckName("WOPR"); - addDeckName("WOPRF"); - addDeckName("WOPRH"); - addDeckName("WOPRS"); - addDeckName("WOPRT"); - addDeckName("WOPT"); - addDeckName("WOPTF"); - addDeckName("WOPTH"); - addDeckName("WOPTS"); + addDeckName("WWGR"); + addDeckName("WWGRH"); + addDeckName("WGLR"); + addDeckName("WGPRFP"); + addDeckName("WTIRCAT"); + addDeckName("WGLRH"); + addDeckName("WBGLR"); + addDeckName("WTHP"); + addDeckName("WTHPH"); addDeckName("WPI"); - addDeckName("WPI1"); + addDeckName("WBP"); + addDeckName("WBP4"); + addDeckName("WBP5"); + addDeckName("WBP9"); addDeckName("WPI4"); addDeckName("WPI5"); - addDeckName("WPI9"); - addDeckName("WPIG"); - addDeckName("WPIL"); - addDeckName("WPIO"); - addDeckName("WPIW"); + addDeckName("WHD"); + addDeckName("WSTAT"); + addDeckName("WMCON"); + addDeckName("WGVPR"); + addDeckName("WTPTHEA"); + addDeckName("WGVIR"); + addDeckName("WEDC"); + addDeckName("WEIT"); + addDeckName("WEPR"); + addDeckName("WEPT"); + addDeckName("WEFF"); + addDeckName("WEFFG"); + addDeckName("WALQ"); + addDeckName("WMVFP"); + addDeckName("WTHT"); + addDeckName("WMMW"); addDeckName("WPWE0"); - addDeckName("WPWE1"); addDeckName("WPWE2"); addDeckName("WPWE3"); addDeckName("WPWE4"); addDeckName("WPWE5"); addDeckName("WPWE6"); - addDeckName("WPWE7"); addDeckName("WPWEM"); - addDeckName("WSIC"); + addDeckName("WPIG"); + addDeckName("WDRPR"); + addDeckName("WSPR"); addDeckName("WSIR"); addDeckName("WSIT"); addDeckName("WSPC"); - addDeckName("WSPR"); - addDeckName("WSPT"); - addDeckName("WSTAT"); - addDeckName("WTHP"); - addDeckName("WTHPFP"); - addDeckName("WTHPH"); - addDeckName("WTHT"); - addDeckName("WTIC"); + addDeckName("WSIC"); addDeckName("WTICF"); - addDeckName("WTICHEA"); - addDeckName("WTICS"); - addDeckName("WTIR"); - addDeckName("WTIRALK"); + addDeckName("WTPTANI"); addDeckName("WTIRANI"); - addDeckName("WTIRCAT"); - addDeckName("WTIRF"); - addDeckName("WTIRFOA"); - addDeckName("WTIRHEA"); - addDeckName("WTIRS"); - addDeckName("WTIRSUR"); - addDeckName("WTIT"); - addDeckName("WTITALK"); addDeckName("WTITANI"); - addDeckName("WTITCAT"); - addDeckName("WTITF"); - addDeckName("WTITFOA"); - addDeckName("WTITHEA"); - addDeckName("WTITS"); - addDeckName("WTITSUR"); - addDeckName("WTPC"); - addDeckName("WTPCF"); + addDeckName("WTPTCAT"); addDeckName("WTPCHEA"); - addDeckName("WTPCS"); - addDeckName("WTPR"); - addDeckName("WTPRALK"); - addDeckName("WTPRANI"); - addDeckName("WTPRCAT"); - addDeckName("WTPRF"); - addDeckName("WTPRFOA"); + addDeckName("WTICHEA"); addDeckName("WTPRHEA"); - addDeckName("WTPRS"); + addDeckName("WTITHEA"); + addDeckName("WTPR"); addDeckName("WTPRSUR"); addDeckName("WTPT"); - addDeckName("WTPTALK"); - addDeckName("WTPTANI"); - addDeckName("WTPTCAT"); + addDeckName("WTPC"); + addDeckName("WTIR"); + addDeckName("WTIT"); + addDeckName("WTIRF"); + addDeckName("WTPRF"); + addDeckName("WTPRS"); + addDeckName("WTITF"); addDeckName("WTPTF"); - addDeckName("WTPTFOA"); - addDeckName("WTPTHEA"); addDeckName("WTPTS"); - addDeckName("WTPTSUR"); - addDeckName("WVIR"); - addDeckName("WVIRT"); - addDeckName("WVIT"); - addDeckName("WVPGR"); - addDeckName("WVPR"); - addDeckName("WVPRT"); - addDeckName("WVPT"); - addDeckName("WWCT"); - addDeckName("WWCTH"); - addDeckName("WWGR"); - addDeckName("WWGRH"); - addDeckName("WWIGR"); - addDeckName("WWIP"); - addDeckName("WWIP2"); - addDeckName("WWIR"); - addDeckName("WWIRH"); - addDeckName("WWIRT"); - addDeckName("WWIT"); - addDeckName("WWITH"); - addDeckName("WWPGR"); - addDeckName("WWPI"); - addDeckName("WWPI2"); - addDeckName("WWPIR"); - addDeckName("WWPP"); - addDeckName("WWPP2"); - addDeckName("WWPR"); - addDeckName("WWPRH"); - addDeckName("WWPRT"); - addDeckName("WWPT"); - addDeckName("WWPTH"); - addDeckName("WWVIR"); + addDeckName("WTICS"); + addDeckName("WTPCF"); + addDeckName("WTPCS"); + addDeckName("WMPR"); + addDeckName("WMPT"); + addDeckName("WMIR"); + addDeckName("WMIT"); + addDeckName("WPIW"); + addDeckName("WTPRFOA"); + addDeckName("WTIRFOA"); + addDeckName("WGDC"); + addDeckName("NGOPAS"); + addDeckName("WTHPFP"); + addDeckName("WBHPFP"); + addDeckName("WOGLR"); + addDeckName("WTPRALK"); + addDeckName("WGCV"); + addDeckName("WCPR"); + addDeckName("WCPC"); + addDeckName("WCPT"); + addDeckName("WCIR"); + addDeckName("WCIC"); + addDeckName("WCIT"); + addDeckName("WNIR"); + addDeckName("WNIT"); + addDeckName("WTITSUR"); + addDeckName("WTPTALK"); + addDeckName("WTIRALK"); setMatchRegex("WU.+|(WBHWC|WGFWC|WOFWC|WWFWC)[1-9][0-9]?|WTPR.+|WTPT.+|WTPC.+|WTIR.+|WTIT.+|WTIC.+"); { ParserRecord record; @@ -2009,9 +1994,7 @@ const std::string WELL_PROBE::keywordName = "WELL_PROBE"; const std::string WELL_PROBE::WELLS::itemName = "WELLS"; -WELMOVEL::WELMOVEL( ) : ParserKeyword("WELMOVEL") -{ - setSizeType(SLASH_TERMINATED); +WELMOVEL::WELMOVEL() : ParserKeyword("WELMOVEL", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WELMOVEL"); @@ -2043,9 +2026,7 @@ const std::string WELMOVEL::WELLHEAD_I::itemName = "WELLHEAD_I"; const std::string WELMOVEL::WELLHEAD_J::itemName = "WELLHEAD_J"; -WELOPEN::WELOPEN( ) : ParserKeyword("WELOPEN") -{ - setSizeType(SLASH_TERMINATED); +WELOPEN::WELOPEN() : ParserKeyword("WELOPEN", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WELOPEN"); @@ -2094,9 +2075,7 @@ const std::string WELOPEN::C1::itemName = "C1"; const std::string WELOPEN::C2::itemName = "C2"; -WELOPENL::WELOPENL( ) : ParserKeyword("WELOPENL") -{ - setSizeType(SLASH_TERMINATED); +WELOPENL::WELOPENL() : ParserKeyword("WELOPENL", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WELOPENL"); @@ -2150,9 +2129,7 @@ const std::string WELOPENL::C1::itemName = "C1"; const std::string WELOPENL::C2::itemName = "C2"; -WELPI::WELPI( ) : ParserKeyword("WELPI") -{ - setSizeType(SLASH_TERMINATED); +WELPI::WELPI() : ParserKeyword("WELPI", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WELPI"); @@ -2174,9 +2151,7 @@ const std::string WELPI::WELL_NAME::itemName = "WELL_NAME"; const std::string WELPI::STEADY_STATE_PRODUCTIVITY_OR_INJECTIVITY_INDEX_VALUE::itemName = "STEADY_STATE_PRODUCTIVITY_OR_INJECTIVITY_INDEX_VALUE"; -WELPRI::WELPRI( ) : ParserKeyword("WELPRI") -{ - setSizeType(SLASH_TERMINATED); +WELPRI::WELPRI() : ParserKeyword("WELPRI", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WELPRI"); @@ -2221,9 +2196,7 @@ const std::string WELPRI::SCALING2::itemName = "SCALING2"; const double WELPRI::SCALING2::defaultValue = 1.000000; -WELSEGS::WELSEGS( ) : ParserKeyword("WELSEGS") -{ - setSizeType(SLASH_TERMINATED); +WELSEGS::WELSEGS() : ParserKeyword("WELSEGS", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WELSEGS"); @@ -2345,18 +2318,18 @@ const std::string WELSEGS::keywordName = "WELSEGS"; const std::string WELSEGS::WELL::itemName = "WELL"; const std::string WELSEGS::DEPTH::itemName = "DEPTH"; const std::string WELSEGS::LENGTH::itemName = "LENGTH"; -const double WELSEGS::LENGTH::defaultValue = 0.000000; +const double WELSEGS::LENGTH::defaultValue = 0; const std::string WELSEGS::WELLBORE_VOLUME::itemName = "WELLBORE_VOLUME"; -const double WELSEGS::WELLBORE_VOLUME::defaultValue = 0.000010; +const double WELSEGS::WELLBORE_VOLUME::defaultValue = 1e-05; const std::string WELSEGS::INFO_TYPE::itemName = "INFO_TYPE"; const std::string WELSEGS::PRESSURE_COMPONENTS::itemName = "PRESSURE_COMPONENTS"; const std::string WELSEGS::PRESSURE_COMPONENTS::defaultValue = "HFA"; const std::string WELSEGS::FLOW_MODEL::itemName = "FLOW_MODEL"; const std::string WELSEGS::FLOW_MODEL::defaultValue = "HO"; const std::string WELSEGS::TOP_X::itemName = "TOP_X"; -const double WELSEGS::TOP_X::defaultValue = 0.000000; +const double WELSEGS::TOP_X::defaultValue = 0; const std::string WELSEGS::TOP_Y::itemName = "TOP_Y"; -const double WELSEGS::TOP_Y::defaultValue = 0.000000; +const double WELSEGS::TOP_Y::defaultValue = 0; const std::string WELSEGS::SEGMENT1::itemName = "SEGMENT1"; const std::string WELSEGS::SEGMENT2::itemName = "SEGMENT2"; const std::string WELSEGS::BRANCH::itemName = "BRANCH"; @@ -2368,14 +2341,12 @@ const std::string WELSEGS::ROUGHNESS::itemName = "ROUGHNESS"; const std::string WELSEGS::AREA::itemName = "AREA"; const std::string WELSEGS::VOLUME::itemName = "VOLUME"; const std::string WELSEGS::LENGTH_X::itemName = "LENGTH_X"; -const double WELSEGS::LENGTH_X::defaultValue = 0.000000; +const double WELSEGS::LENGTH_X::defaultValue = 0; const std::string WELSEGS::LENGTH_Y::itemName = "LENGTH_Y"; -const double WELSEGS::LENGTH_Y::defaultValue = 0.000000; +const double WELSEGS::LENGTH_Y::defaultValue = 0; -WELSOMIN::WELSOMIN( ) : ParserKeyword("WELSOMIN") -{ - setSizeType(SLASH_TERMINATED); +WELSOMIN::WELSOMIN() : ParserKeyword("WELSOMIN", KeywordSize(1, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WELSOMIN"); @@ -2392,9 +2363,7 @@ const std::string WELSOMIN::keywordName = "WELSOMIN"; const std::string WELSOMIN::SOMIN::itemName = "SOMIN"; -WELSPECL::WELSPECL( ) : ParserKeyword("WELSPECL") -{ - setSizeType(SLASH_TERMINATED); +WELSPECL::WELSPECL() : ParserKeyword("WELSPECL", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WELSPECL"); @@ -2495,7 +2464,7 @@ const std::string WELSPECL::HEAD_J::itemName = "HEAD_J"; const std::string WELSPECL::REF_DEPTH::itemName = "REF_DEPTH"; const std::string WELSPECL::PHASE::itemName = "PHASE"; const std::string WELSPECL::D_RADIUS::itemName = "D_RADIUS"; -const double WELSPECL::D_RADIUS::defaultValue = 0.000000; +const double WELSPECL::D_RADIUS::defaultValue = 0; const std::string WELSPECL::INFLOW_EQ::itemName = "INFLOW_EQ"; const std::string WELSPECL::INFLOW_EQ::defaultValue = "STD"; const std::string WELSPECL::AUTO_SHUTIN::itemName = "AUTO_SHUTIN"; @@ -2516,9 +2485,7 @@ const std::string WELSPECL::POLYMER_TABLE::itemName = "POLYMER_TABLE"; const int WELSPECL::POLYMER_TABLE::defaultValue = 0; -WELSPECS::WELSPECS( ) : ParserKeyword("WELSPECS") -{ - setSizeType(SLASH_TERMINATED); +WELSPECS::WELSPECS() : ParserKeyword("WELSPECS", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WELSPECS"); @@ -2614,7 +2581,7 @@ const std::string WELSPECS::HEAD_J::itemName = "HEAD_J"; const std::string WELSPECS::REF_DEPTH::itemName = "REF_DEPTH"; const std::string WELSPECS::PHASE::itemName = "PHASE"; const std::string WELSPECS::D_RADIUS::itemName = "D_RADIUS"; -const double WELSPECS::D_RADIUS::defaultValue = 0.000000; +const double WELSPECS::D_RADIUS::defaultValue = 0; const std::string WELSPECS::INFLOW_EQ::itemName = "INFLOW_EQ"; const std::string WELSPECS::INFLOW_EQ::defaultValue = "STD"; const std::string WELSPECS::AUTO_SHUTIN::itemName = "AUTO_SHUTIN"; @@ -2635,9 +2602,7 @@ const std::string WELSPECS::POLYMER_TABLE::itemName = "POLYMER_TABLE"; const int WELSPECS::POLYMER_TABLE::defaultValue = 0; -WELTARG::WELTARG( ) : ParserKeyword("WELTARG") -{ - setSizeType(SLASH_TERMINATED); +WELTARG::WELTARG() : ParserKeyword("WELTARG", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WELTARG"); @@ -2652,7 +2617,7 @@ WELTARG::WELTARG( ) : ParserKeyword("WELTARG") record.addItem(item); } { - ParserItem item("NEW_VALUE", ParserItem::itype::DOUBLE); + ParserItem item("NEW_VALUE", ParserItem::itype::UDA); record.addItem(item); } addRecord( record ); @@ -2664,9 +2629,7 @@ const std::string WELTARG::CMODE::itemName = "CMODE"; const std::string WELTARG::NEW_VALUE::itemName = "NEW_VALUE"; -WFOAM::WFOAM( ) : ParserKeyword("WFOAM") -{ - setSizeType(SLASH_TERMINATED); +WFOAM::WFOAM() : ParserKeyword("WFOAM", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WFOAM"); @@ -2689,9 +2652,7 @@ const std::string WFOAM::WELL::itemName = "WELL"; const std::string WFOAM::FOAM_CONCENTRATION::itemName = "FOAM_CONCENTRATION"; -WFRICSEG::WFRICSEG( ) : ParserKeyword("WFRICSEG") -{ - setSizeType(SLASH_TERMINATED); +WFRICSEG::WFRICSEG() : ParserKeyword("WFRICSEG", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WFRICSEG"); @@ -2727,9 +2688,7 @@ const std::string WFRICSEG::FLOW_SCALING::itemName = "FLOW_SCALING"; const double WFRICSEG::FLOW_SCALING::defaultValue = 1.000000; -WFRICSGL::WFRICSGL( ) : ParserKeyword("WFRICSGL") -{ - setSizeType(SLASH_TERMINATED); +WFRICSGL::WFRICSGL() : ParserKeyword("WFRICSGL", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WFRICSGL"); @@ -2765,9 +2724,7 @@ const std::string WFRICSGL::FLOW_SCALING::itemName = "FLOW_SCALING"; const double WFRICSGL::FLOW_SCALING::defaultValue = 1.000000; -WFRICTN::WFRICTN( ) : ParserKeyword("WFRICTN") -{ - setSizeType(SLASH_TERMINATED); +WFRICTN::WFRICTN() : ParserKeyword("WFRICTN", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WFRICTN"); @@ -2803,9 +2760,7 @@ const std::string WFRICTN::FLOW_SCALING::itemName = "FLOW_SCALING"; const double WFRICTN::FLOW_SCALING::defaultValue = 1.000000; -WFRICTNL::WFRICTNL( ) : ParserKeyword("WFRICTNL") -{ - setSizeType(SLASH_TERMINATED); +WFRICTNL::WFRICTNL() : ParserKeyword("WFRICTNL", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WFRICTNL"); @@ -2841,9 +2796,7 @@ const std::string WFRICTNL::FLOW_SCALING::itemName = "FLOW_SCALING"; const double WFRICTNL::FLOW_SCALING::defaultValue = 1.000000; -WGASPROD::WGASPROD( ) : ParserKeyword("WGASPROD") -{ - setSizeType(SLASH_TERMINATED); +WGASPROD::WGASPROD() : ParserKeyword("WGASPROD", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WGASPROD"); @@ -2870,9 +2823,7 @@ const std::string WGASPROD::INCREMENTAL_GAS_PRODUCTION_RATE::itemName = "INCREME const std::string WGASPROD::MAX_INCREMENTS::itemName = "MAX_INCREMENTS"; -WGORPEN::WGORPEN( ) : ParserKeyword("WGORPEN") -{ - setSizeType(SLASH_TERMINATED); +WGORPEN::WGORPEN() : ParserKeyword("WGORPEN", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WGORPEN"); @@ -2905,9 +2856,7 @@ const std::string WGORPEN::MAX_OIL_RATE::itemName = "MAX_OIL_RATE"; const std::string WGORPEN::AVG_GOR0::itemName = "AVG_GOR0"; -WGRUPCON::WGRUPCON( ) : ParserKeyword("WGRUPCON") -{ - setSizeType(SLASH_TERMINATED); +WGRUPCON::WGRUPCON() : ParserKeyword("WGRUPCON", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WGRUPCON"); @@ -2950,9 +2899,7 @@ const std::string WGRUPCON::SCALING_FACTOR::itemName = "SCALING_FACTOR"; const double WGRUPCON::SCALING_FACTOR::defaultValue = 1.000000; -WH2NUM::WH2NUM( ) : ParserKeyword("WH2NUM") -{ - setFixedSize( (size_t) 1); +WH2NUM::WH2NUM() : ParserKeyword("WH2NUM", KeywordSize(1, false)) { addValidSectionName("REGIONS"); clearDeckNames(); addDeckName("WH2NUM"); @@ -2970,9 +2917,7 @@ const std::string WH2NUM::keywordName = "WH2NUM"; const std::string WH2NUM::data::itemName = "data"; -WH3NUM::WH3NUM( ) : ParserKeyword("WH3NUM") -{ - setFixedSize( (size_t) 1); +WH3NUM::WH3NUM() : ParserKeyword("WH3NUM", KeywordSize(1, false)) { addValidSectionName("REGIONS"); clearDeckNames(); addDeckName("WH3NUM"); @@ -2990,9 +2935,7 @@ const std::string WH3NUM::keywordName = "WH3NUM"; const std::string WH3NUM::data::itemName = "data"; -WHEDREFD::WHEDREFD( ) : ParserKeyword("WHEDREFD") -{ - setSizeType(SLASH_TERMINATED); +WHEDREFD::WHEDREFD() : ParserKeyword("WHEDREFD", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WHEDREFD"); @@ -3015,9 +2958,7 @@ const std::string WHEDREFD::WELL::itemName = "WELL"; const std::string WHEDREFD::DEPTH::itemName = "DEPTH"; -WHISTCTL::WHISTCTL( ) : ParserKeyword("WHISTCTL") -{ - setFixedSize( (size_t) 1); +WHISTCTL::WHISTCTL() : ParserKeyword("WHISTCTL", KeywordSize(1, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WHISTCTL"); @@ -3043,9 +2984,7 @@ const std::string WHISTCTL::BPH_TERMINATE::itemName = "BPH_TERMINATE"; const std::string WHISTCTL::BPH_TERMINATE::defaultValue = "NO"; -WHTEMP::WHTEMP( ) : ParserKeyword("WHTEMP") -{ - setSizeType(SLASH_TERMINATED); +WHTEMP::WHTEMP() : ParserKeyword("WHTEMP", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WHTEMP"); @@ -3073,9 +3012,7 @@ const std::string WHTEMP::VFP_TABLE::itemName = "VFP_TABLE"; const std::string WHTEMP::THP_TEMP::itemName = "THP_TEMP"; -WINJMULT::WINJMULT( ) : ParserKeyword("WINJMULT") -{ - setSizeType(SLASH_TERMINATED); +WINJMULT::WINJMULT() : ParserKeyword("WINJMULT", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WINJMULT"); @@ -3121,7 +3058,7 @@ const std::string WINJMULT::keywordName = "WINJMULT"; const std::string WINJMULT::WELL_NAME::itemName = "WELL_NAME"; const std::string WINJMULT::FRACTURING_PRESSURE::itemName = "FRACTURING_PRESSURE"; const std::string WINJMULT::MULTIPLIER_GRADIENT::itemName = "MULTIPLIER_GRADIENT"; -const double WINJMULT::MULTIPLIER_GRADIENT::defaultValue = 0.000000; +const double WINJMULT::MULTIPLIER_GRADIENT::defaultValue = 0; const std::string WINJMULT::MODE::itemName = "MODE"; const std::string WINJMULT::MODE::defaultValue = "WREV"; const std::string WINJMULT::I::itemName = "I"; @@ -3132,9 +3069,7 @@ const std::string WINJMULT::K::itemName = "K"; const int WINJMULT::K::defaultValue = -1; -WINJTEMP::WINJTEMP( ) : ParserKeyword("WINJTEMP") -{ - setSizeType(SLASH_TERMINATED); +WINJTEMP::WINJTEMP() : ParserKeyword("WINJTEMP", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WINJTEMP"); @@ -3177,14 +3112,12 @@ const double WINJTEMP::STEAM_QUALITY::defaultValue = 1.000000; const std::string WINJTEMP::TEMPERATURE::itemName = "TEMPERATURE"; const double WINJTEMP::TEMPERATURE::defaultValue = 15.560000; const std::string WINJTEMP::PRESSURE::itemName = "PRESSURE"; -const double WINJTEMP::PRESSURE::defaultValue = 0.000000; +const double WINJTEMP::PRESSURE::defaultValue = 0; const std::string WINJTEMP::ENTHALPY::itemName = "ENTHALPY"; -const double WINJTEMP::ENTHALPY::defaultValue = 0.000000; +const double WINJTEMP::ENTHALPY::defaultValue = 0; -WLIFT::WLIFT( ) : ParserKeyword("WLIFT") -{ - setSizeType(SLASH_TERMINATED); +WLIFT::WLIFT() : ParserKeyword("WLIFT", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WLIFT"); @@ -3253,9 +3186,7 @@ const std::string WLIFT::ALQ_SHIFT::itemName = "ALQ_SHIFT"; const std::string WLIFT::THP_SHIFT::itemName = "THP_SHIFT"; -WLIFTOPT::WLIFTOPT( ) : ParserKeyword("WLIFTOPT") -{ - setSizeType(SLASH_TERMINATED); +WLIFTOPT::WLIFTOPT() : ParserKeyword("WLIFTOPT", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WLIFTOPT"); @@ -3305,16 +3236,14 @@ const std::string WLIFTOPT::MAX_LIFT_GAS_RATE::itemName = "MAX_LIFT_GAS_RATE"; const std::string WLIFTOPT::WEIGHT_FACTOR::itemName = "WEIGHT_FACTOR"; const double WLIFTOPT::WEIGHT_FACTOR::defaultValue = 1.000000; const std::string WLIFTOPT::MIN_LIFT_GAS_RATE::itemName = "MIN_LIFT_GAS_RATE"; -const double WLIFTOPT::MIN_LIFT_GAS_RATE::defaultValue = 0.000000; +const double WLIFTOPT::MIN_LIFT_GAS_RATE::defaultValue = 0; const std::string WLIFTOPT::DELTA_GAS_RATE_WEIGHT_FACTOR::itemName = "DELTA_GAS_RATE_WEIGHT_FACTOR"; -const double WLIFTOPT::DELTA_GAS_RATE_WEIGHT_FACTOR::defaultValue = 0.000000; +const double WLIFTOPT::DELTA_GAS_RATE_WEIGHT_FACTOR::defaultValue = 0; const std::string WLIFTOPT::ALLOCATE_EXTRA_LIFT_GAS::itemName = "ALLOCATE_EXTRA_LIFT_GAS"; const std::string WLIFTOPT::ALLOCATE_EXTRA_LIFT_GAS::defaultValue = "NO"; -WLIMTOL::WLIMTOL( ) : ParserKeyword("WLIMTOL") -{ - setFixedSize( (size_t) 1); +WLIMTOL::WLIMTOL() : ParserKeyword("WLIMTOL", KeywordSize(1, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WLIMTOL"); @@ -3331,9 +3260,7 @@ const std::string WLIMTOL::keywordName = "WLIMTOL"; const std::string WLIMTOL::TOLERANCE_FRACTION::itemName = "TOLERANCE_FRACTION"; -WLIST::WLIST( ) : ParserKeyword("WLIST") -{ - setSizeType(SLASH_TERMINATED); +WLIST::WLIST() : ParserKeyword("WLIST", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WLIST"); @@ -3361,9 +3288,7 @@ const std::string WLIST::ACTION::itemName = "ACTION"; const std::string WLIST::WELLS::itemName = "WELLS"; -WLISTARG::WLISTARG( ) : ParserKeyword("WLISTARG") -{ - setSizeType(SLASH_TERMINATED); +WLISTARG::WLISTARG() : ParserKeyword("WLISTARG", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WLISTARG"); @@ -3391,9 +3316,7 @@ const std::string WLISTARG::CONTROL::itemName = "CONTROL"; const std::string WLISTARG::VALUES::itemName = "VALUES"; -WLISTNAM::WLISTNAM( ) : ParserKeyword("WLISTNAM") -{ - setSizeType(SLASH_TERMINATED); +WLISTNAM::WLISTNAM() : ParserKeyword("WLISTNAM", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WLISTNAM"); @@ -3416,9 +3339,42 @@ const std::string WLISTNAM::LIST_NAME::itemName = "LIST_NAME"; const std::string WLISTNAM::WELLS::itemName = "WELLS"; -WNETCTRL::WNETCTRL( ) : ParserKeyword("WNETCTRL") -{ - setSizeType(SLASH_TERMINATED); +WMICP::WMICP() : ParserKeyword("WMICP", KeywordSize(SLASH_TERMINATED)) { + addValidSectionName("SCHEDULE"); + clearDeckNames(); + addDeckName("WMICP"); + { + ParserRecord record; + { + ParserItem item("WELL", ParserItem::itype::STRING); + record.addItem(item); + } + { + ParserItem item("MICROBIAL_CONCENTRATION", ParserItem::itype::DOUBLE); + item.push_backDimension("Density"); + record.addItem(item); + } + { + ParserItem item("OXYGEN_CONCENTRATION", ParserItem::itype::DOUBLE); + item.push_backDimension("Density"); + record.addItem(item); + } + { + ParserItem item("UREA_CONCENTRATION", ParserItem::itype::DOUBLE); + item.push_backDimension("Density"); + record.addItem(item); + } + addRecord( record ); + } +} +const std::string WMICP::keywordName = "WMICP"; +const std::string WMICP::WELL::itemName = "WELL"; +const std::string WMICP::MICROBIAL_CONCENTRATION::itemName = "MICROBIAL_CONCENTRATION"; +const std::string WMICP::OXYGEN_CONCENTRATION::itemName = "OXYGEN_CONCENTRATION"; +const std::string WMICP::UREA_CONCENTRATION::itemName = "UREA_CONCENTRATION"; + + +WNETCTRL::WNETCTRL() : ParserKeyword("WNETCTRL", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WNETCTRL"); @@ -3442,9 +3398,7 @@ const std::string WNETCTRL::CONTROL::itemName = "CONTROL"; const std::string WNETCTRL::CONTROL::defaultValue = "THP"; -WNETDP::WNETDP( ) : ParserKeyword("WNETDP") -{ - setSizeType(SLASH_TERMINATED); +WNETDP::WNETDP() : ParserKeyword("WNETDP", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WNETDP"); @@ -3466,12 +3420,10 @@ WNETDP::WNETDP( ) : ParserKeyword("WNETDP") const std::string WNETDP::keywordName = "WNETDP"; const std::string WNETDP::WELL::itemName = "WELL"; const std::string WNETDP::DP::itemName = "DP"; -const double WNETDP::DP::defaultValue = 0.000000; +const double WNETDP::DP::defaultValue = 0; -WORKLIM::WORKLIM( ) : ParserKeyword("WORKLIM") -{ - setFixedSize( (size_t) 1); +WORKLIM::WORKLIM() : ParserKeyword("WORKLIM", KeywordSize(1, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WORKLIM"); @@ -3488,9 +3440,7 @@ const std::string WORKLIM::keywordName = "WORKLIM"; const std::string WORKLIM::LIMIT::itemName = "LIMIT"; -WORKTHP::WORKTHP( ) : ParserKeyword("WORKTHP") -{ - setSizeType(SLASH_TERMINATED); +WORKTHP::WORKTHP() : ParserKeyword("WORKTHP", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WORKTHP"); @@ -3514,21 +3464,19 @@ const std::string WORKTHP::WORK_OVER_PROCEDURE::itemName = "WORK_OVER_PROCEDURE" const std::string WORKTHP::WORK_OVER_PROCEDURE::defaultValue = "NONE"; -WPAVE::WPAVE( ) : ParserKeyword("WPAVE") -{ - setFixedSize( (size_t) 1); +WPAVE::WPAVE() : ParserKeyword("WPAVE", KeywordSize(1, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WPAVE"); { ParserRecord record; { - ParserItem item("WEIGTH_FACTOR1", ParserItem::itype::DOUBLE); + ParserItem item("F1", ParserItem::itype::DOUBLE); item.setDefault( double(0.500000) ); record.addItem(item); } { - ParserItem item("WEIGTH_FACTOR2", ParserItem::itype::DOUBLE); + ParserItem item("F2", ParserItem::itype::DOUBLE); item.setDefault( double(1.000000) ); record.addItem(item); } @@ -3546,45 +3494,40 @@ WPAVE::WPAVE( ) : ParserKeyword("WPAVE") } } const std::string WPAVE::keywordName = "WPAVE"; -const std::string WPAVE::WEIGTH_FACTOR1::itemName = "WEIGTH_FACTOR1"; -const double WPAVE::WEIGTH_FACTOR1::defaultValue = 0.500000; -const std::string WPAVE::WEIGTH_FACTOR2::itemName = "WEIGTH_FACTOR2"; -const double WPAVE::WEIGTH_FACTOR2::defaultValue = 1.000000; +const std::string WPAVE::F1::itemName = "F1"; +const double WPAVE::F1::defaultValue = 0.500000; +const std::string WPAVE::F2::itemName = "F2"; +const double WPAVE::F2::defaultValue = 1.000000; const std::string WPAVE::DEPTH_CORRECTION::itemName = "DEPTH_CORRECTION"; const std::string WPAVE::DEPTH_CORRECTION::defaultValue = "WELL"; const std::string WPAVE::CONNECTION::itemName = "CONNECTION"; const std::string WPAVE::CONNECTION::defaultValue = "OPEN"; -WPAVEDEP::WPAVEDEP( ) : ParserKeyword("WPAVEDEP") -{ - setFixedSize( (size_t) 1); +WPAVEDEP::WPAVEDEP() : ParserKeyword("WPAVEDEP", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WPAVEDEP"); { ParserRecord record; { - ParserItem item("WELLNAME", ParserItem::itype::STRING); + ParserItem item("WELL", ParserItem::itype::STRING); record.addItem(item); } { ParserItem item("REFDEPTH", ParserItem::itype::DOUBLE); - item.setDefault( double(0) ); + item.push_backDimension("Length"); record.addItem(item); } addRecord( record ); } } const std::string WPAVEDEP::keywordName = "WPAVEDEP"; -const std::string WPAVEDEP::WELLNAME::itemName = "WELLNAME"; +const std::string WPAVEDEP::WELL::itemName = "WELL"; const std::string WPAVEDEP::REFDEPTH::itemName = "REFDEPTH"; -const double WPAVEDEP::REFDEPTH::defaultValue = 0.000000; -WPIMULT::WPIMULT( ) : ParserKeyword("WPIMULT") -{ - setSizeType(SLASH_TERMINATED); +WPIMULT::WPIMULT() : ParserKeyword("WPIMULT", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WPIMULT"); @@ -3633,9 +3576,7 @@ const std::string WPIMULT::FIRST::itemName = "FIRST"; const std::string WPIMULT::LAST::itemName = "LAST"; -WPIMULTL::WPIMULTL( ) : ParserKeyword("WPIMULTL") -{ - setSizeType(SLASH_TERMINATED); +WPIMULTL::WPIMULTL() : ParserKeyword("WPIMULTL", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WPIMULTL"); @@ -3691,9 +3632,7 @@ const std::string WPIMULTL::FIRST::itemName = "FIRST"; const std::string WPIMULTL::LAST::itemName = "LAST"; -WPITAB::WPITAB( ) : ParserKeyword("WPITAB") -{ - setSizeType(SLASH_TERMINATED); +WPITAB::WPITAB() : ParserKeyword("WPITAB", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WPITAB"); @@ -3714,12 +3653,10 @@ WPITAB::WPITAB( ) : ParserKeyword("WPITAB") const std::string WPITAB::keywordName = "WPITAB"; const std::string WPITAB::WELL::itemName = "WELL"; const std::string WPITAB::PI::itemName = "PI"; -const double WPITAB::PI::defaultValue = 0.000000; +const double WPITAB::PI::defaultValue = 0; -WPLUG::WPLUG( ) : ParserKeyword("WPLUG") -{ - setSizeType(SLASH_TERMINATED); +WPLUG::WPLUG() : ParserKeyword("WPLUG", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WPLUG"); @@ -3755,9 +3692,7 @@ const std::string WPLUG::SOURCE::itemName = "SOURCE"; const std::string WPLUG::SOURCE::defaultValue = "WELL"; -WPMITAB::WPMITAB( ) : ParserKeyword("WPMITAB") -{ - setSizeType(SLASH_TERMINATED); +WPMITAB::WPMITAB() : ParserKeyword("WPMITAB", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WPMITAB"); @@ -3779,11 +3714,9 @@ const std::string WPMITAB::WELL::itemName = "WELL"; const std::string WPMITAB::TABLE_NUMBER::itemName = "TABLE_NUMBER"; -WPOLYMER::WPOLYMER( ) : ParserKeyword("WPOLYMER") -{ - setSizeType(SLASH_TERMINATED); - addValidSectionName("SCHEDULE"); +WPOLYMER::WPOLYMER() : ParserKeyword("WPOLYMER", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SPECIAL"); + addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WPOLYMER"); { @@ -3821,9 +3754,7 @@ const std::string WPOLYMER::GROUP_POLYMER_CONCENTRATION::itemName = "GROUP_POLYM const std::string WPOLYMER::GROUP_SALT_CONCENTRATION::itemName = "GROUP_SALT_CONCENTRATION"; -WPOLYRED::WPOLYRED( ) : ParserKeyword("WPOLYRED") -{ - setSizeType(SLASH_TERMINATED); +WPOLYRED::WPOLYRED() : ParserKeyword("WPOLYRED", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WPOLYRED"); @@ -3847,9 +3778,7 @@ const std::string WPOLYRED::POLYMER_VISCOSITY_RED::itemName = "POLYMER_VISCOSITY const double WPOLYRED::POLYMER_VISCOSITY_RED::defaultValue = 1.000000; -WPOTCALC::WPOTCALC( ) : ParserKeyword("WPOTCALC") -{ - setFixedSize( (size_t) 1); +WPOTCALC::WPOTCALC() : ParserKeyword("WPOTCALC", KeywordSize(1, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("WPOTCALC"); @@ -3875,9 +3804,7 @@ const std::string WPOTCALC::USE_SEGMENT_VOLUMES::itemName = "USE_SEGMENT_VOLUMES const std::string WPOTCALC::USE_SEGMENT_VOLUMES::defaultValue = "NO"; -WREGROUP::WREGROUP( ) : ParserKeyword("WREGROUP") -{ - setSizeType(SLASH_TERMINATED); +WREGROUP::WREGROUP() : ParserKeyword("WREGROUP", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WREGROUP"); @@ -3922,12 +3849,10 @@ const std::string WREGROUP::UPPER_LIMIT::itemName = "UPPER_LIMIT"; const double WREGROUP::UPPER_LIMIT::defaultValue = 100000000000000000000.000000; const std::string WREGROUP::GROUP_LOWER::itemName = "GROUP_LOWER"; const std::string WREGROUP::LOWER_LIMIT::itemName = "LOWER_LIMIT"; -const double WREGROUP::LOWER_LIMIT::defaultValue = 0.000000; +const double WREGROUP::LOWER_LIMIT::defaultValue = 0; -WRFT::WRFT( ) : ParserKeyword("WRFT") -{ - setSizeType(SLASH_TERMINATED); +WRFT::WRFT() : ParserKeyword("WRFT", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WRFT"); @@ -3944,9 +3869,7 @@ const std::string WRFT::keywordName = "WRFT"; const std::string WRFT::WELL::itemName = "WELL"; -WRFTPLT::WRFTPLT( ) : ParserKeyword("WRFTPLT") -{ - setSizeType(SLASH_TERMINATED); +WRFTPLT::WRFTPLT() : ParserKeyword("WRFTPLT", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WRFTPLT"); @@ -3984,9 +3907,7 @@ const std::string WRFTPLT::OUTPUT_SEGMENT::itemName = "OUTPUT_SEGMENT"; const std::string WRFTPLT::OUTPUT_SEGMENT::defaultValue = "NO"; -WSALT::WSALT( ) : ParserKeyword("WSALT") -{ - setSizeType(SLASH_TERMINATED); +WSALT::WSALT() : ParserKeyword("WSALT", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WSALT"); @@ -3998,6 +3919,7 @@ WSALT::WSALT( ) : ParserKeyword("WSALT") } { ParserItem item("CONCENTRATION", ParserItem::itype::UDA); + item.push_backDimension("Salinity"); record.addItem(item); } addRecord( record ); @@ -4008,9 +3930,7 @@ const std::string WSALT::WELL::itemName = "WELL"; const std::string WSALT::CONCENTRATION::itemName = "CONCENTRATION"; -WSCCLEAN::WSCCLEAN( ) : ParserKeyword("WSCCLEAN") -{ - setSizeType(SLASH_TERMINATED); +WSCCLEAN::WSCCLEAN() : ParserKeyword("WSCCLEAN", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WSCCLEAN"); @@ -4069,9 +3989,7 @@ const std::string WSCCLEAN::C2::itemName = "C2"; const int WSCCLEAN::C2::defaultValue = -1; -WSCCLENL::WSCCLENL( ) : ParserKeyword("WSCCLENL") -{ - setSizeType(SLASH_TERMINATED); +WSCCLENL::WSCCLENL() : ParserKeyword("WSCCLENL", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WSCCLENL"); @@ -4135,9 +4053,7 @@ const std::string WSCCLENL::C2::itemName = "C2"; const int WSCCLENL::C2::defaultValue = -1; -WSCTAB::WSCTAB( ) : ParserKeyword("WSCTAB") -{ - setSizeType(SLASH_TERMINATED); +WSCTAB::WSCTAB() : ParserKeyword("WSCTAB", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WSCTAB"); @@ -4180,9 +4096,7 @@ const std::string WSCTAB::SCALE_DISSOLUTION_TABLE::itemName = "SCALE_DISSOLUTION const int WSCTAB::SCALE_DISSOLUTION_TABLE::defaultValue = 0; -WSEGAICD::WSEGAICD( ) : ParserKeyword("WSEGAICD") -{ - setSizeType(SLASH_TERMINATED); +WSEGAICD::WSEGAICD() : ParserKeyword("WSEGAICD", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WSEGAICD"); @@ -4194,60 +4108,61 @@ WSEGAICD::WSEGAICD( ) : ParserKeyword("WSEGAICD") } { ParserItem item("SEGMENT1", ParserItem::itype::INT); - item.setDefault( 0 ); record.addItem(item); } { ParserItem item("SEGMENT2", ParserItem::itype::INT); - item.setDefault( 0 ); record.addItem(item); } { - ParserItem item("AICD_STRENGTH", ParserItem::itype::DOUBLE); - item.setDefault( double(0) ); + ParserItem item("STRENGTH", ParserItem::itype::DOUBLE); + item.push_backDimension("Pressure*Time*Time/GeometricVolume*GeometricVolume*Density"); record.addItem(item); } { - ParserItem item("ICD_LENGTH", ParserItem::itype::DOUBLE); + ParserItem item("LENGTH", ParserItem::itype::DOUBLE); item.setDefault( double(12.000000) ); item.push_backDimension("Length"); record.addItem(item); } { - ParserItem item("RHO", ParserItem::itype::DOUBLE); + ParserItem item("DENSITY_CALI", ParserItem::itype::DOUBLE); item.setDefault( double(1000.250000) ); - item.push_backDimension("Mass/Length*Length*Length"); + item.push_backDimension("Density"); record.addItem(item); } { - ParserItem item("VISCOSITY", ParserItem::itype::DOUBLE); + ParserItem item("VISCOSITY_CALI", ParserItem::itype::DOUBLE); item.setDefault( double(1.450000) ); item.push_backDimension("Viscosity"); record.addItem(item); } { - ParserItem item("WATER_LIMIT", ParserItem::itype::DOUBLE); + ParserItem item("CRITICAL_VALUE", ParserItem::itype::DOUBLE); item.setDefault( double(0.500000) ); + item.push_backDimension("1"); record.addItem(item); } { - ParserItem item("TRANSITION_WIDTH", ParserItem::itype::DOUBLE); + ParserItem item("WIDTH_TRANS", ParserItem::itype::DOUBLE); item.setDefault( double(0.050000) ); + item.push_backDimension("1"); record.addItem(item); } { - ParserItem item("MAX_SOMETHING", ParserItem::itype::DOUBLE); + ParserItem item("MAX_VISC_RATIO", ParserItem::itype::DOUBLE); item.setDefault( double(5.000000) ); + item.push_backDimension("1"); record.addItem(item); } { - ParserItem item("SCALING_METHOD", ParserItem::itype::INT); + ParserItem item("METHOD_SCALING_FACTOR", ParserItem::itype::INT); item.setDefault( -1 ); record.addItem(item); } { - ParserItem item("MAX_QICD", ParserItem::itype::DOUBLE); - item.push_backDimension("ReservoirVolume/Time"); + ParserItem item("MAX_ABS_RATE", ParserItem::itype::DOUBLE); + item.push_backDimension("GeometricVolume/Time"); record.addItem(item); } { @@ -4259,7 +4174,7 @@ WSEGAICD::WSEGAICD( ) : ParserKeyword("WSEGAICD") record.addItem(item); } { - ParserItem item("ICD_FLAG", ParserItem::itype::STRING); + ParserItem item("STATUS", ParserItem::itype::STRING); item.setDefault( std::string("OPEN") ); record.addItem(item); } @@ -4279,7 +4194,7 @@ WSEGAICD::WSEGAICD( ) : ParserKeyword("WSEGAICD") record.addItem(item); } { - ParserItem item("OIL_VSIC_FRACTION", ParserItem::itype::DOUBLE); + ParserItem item("OIL_VISC_FRACTION", ParserItem::itype::DOUBLE); item.setDefault( double(1.000000) ); record.addItem(item); } @@ -4299,47 +4214,42 @@ WSEGAICD::WSEGAICD( ) : ParserKeyword("WSEGAICD") const std::string WSEGAICD::keywordName = "WSEGAICD"; const std::string WSEGAICD::WELL::itemName = "WELL"; const std::string WSEGAICD::SEGMENT1::itemName = "SEGMENT1"; -const int WSEGAICD::SEGMENT1::defaultValue = 0; const std::string WSEGAICD::SEGMENT2::itemName = "SEGMENT2"; -const int WSEGAICD::SEGMENT2::defaultValue = 0; -const std::string WSEGAICD::AICD_STRENGTH::itemName = "AICD_STRENGTH"; -const double WSEGAICD::AICD_STRENGTH::defaultValue = 0.000000; -const std::string WSEGAICD::ICD_LENGTH::itemName = "ICD_LENGTH"; -const double WSEGAICD::ICD_LENGTH::defaultValue = 12.000000; -const std::string WSEGAICD::RHO::itemName = "RHO"; -const double WSEGAICD::RHO::defaultValue = 1000.250000; -const std::string WSEGAICD::VISCOSITY::itemName = "VISCOSITY"; -const double WSEGAICD::VISCOSITY::defaultValue = 1.450000; -const std::string WSEGAICD::WATER_LIMIT::itemName = "WATER_LIMIT"; -const double WSEGAICD::WATER_LIMIT::defaultValue = 0.500000; -const std::string WSEGAICD::TRANSITION_WIDTH::itemName = "TRANSITION_WIDTH"; -const double WSEGAICD::TRANSITION_WIDTH::defaultValue = 0.050000; -const std::string WSEGAICD::MAX_SOMETHING::itemName = "MAX_SOMETHING"; -const double WSEGAICD::MAX_SOMETHING::defaultValue = 5.000000; -const std::string WSEGAICD::SCALING_METHOD::itemName = "SCALING_METHOD"; -const int WSEGAICD::SCALING_METHOD::defaultValue = -1; -const std::string WSEGAICD::MAX_QICD::itemName = "MAX_QICD"; +const std::string WSEGAICD::STRENGTH::itemName = "STRENGTH"; +const std::string WSEGAICD::LENGTH::itemName = "LENGTH"; +const double WSEGAICD::LENGTH::defaultValue = 12.000000; +const std::string WSEGAICD::DENSITY_CALI::itemName = "DENSITY_CALI"; +const double WSEGAICD::DENSITY_CALI::defaultValue = 1000.250000; +const std::string WSEGAICD::VISCOSITY_CALI::itemName = "VISCOSITY_CALI"; +const double WSEGAICD::VISCOSITY_CALI::defaultValue = 1.450000; +const std::string WSEGAICD::CRITICAL_VALUE::itemName = "CRITICAL_VALUE"; +const double WSEGAICD::CRITICAL_VALUE::defaultValue = 0.500000; +const std::string WSEGAICD::WIDTH_TRANS::itemName = "WIDTH_TRANS"; +const double WSEGAICD::WIDTH_TRANS::defaultValue = 0.050000; +const std::string WSEGAICD::MAX_VISC_RATIO::itemName = "MAX_VISC_RATIO"; +const double WSEGAICD::MAX_VISC_RATIO::defaultValue = 5.000000; +const std::string WSEGAICD::METHOD_SCALING_FACTOR::itemName = "METHOD_SCALING_FACTOR"; +const int WSEGAICD::METHOD_SCALING_FACTOR::defaultValue = -1; +const std::string WSEGAICD::MAX_ABS_RATE::itemName = "MAX_ABS_RATE"; const std::string WSEGAICD::FLOW_RATE_EXPONENT::itemName = "FLOW_RATE_EXPONENT"; const std::string WSEGAICD::VISC_EXPONENT::itemName = "VISC_EXPONENT"; -const std::string WSEGAICD::ICD_FLAG::itemName = "ICD_FLAG"; -const std::string WSEGAICD::ICD_FLAG::defaultValue = "OPEN"; +const std::string WSEGAICD::STATUS::itemName = "STATUS"; +const std::string WSEGAICD::STATUS::defaultValue = "OPEN"; const std::string WSEGAICD::OIL_FLOW_FRACTION::itemName = "OIL_FLOW_FRACTION"; const double WSEGAICD::OIL_FLOW_FRACTION::defaultValue = 1.000000; const std::string WSEGAICD::WATER_FLOW_FRACTION::itemName = "WATER_FLOW_FRACTION"; const double WSEGAICD::WATER_FLOW_FRACTION::defaultValue = 1.000000; const std::string WSEGAICD::GAS_FLOW_FRACTION::itemName = "GAS_FLOW_FRACTION"; const double WSEGAICD::GAS_FLOW_FRACTION::defaultValue = 1.000000; -const std::string WSEGAICD::OIL_VSIC_FRACTION::itemName = "OIL_VSIC_FRACTION"; -const double WSEGAICD::OIL_VSIC_FRACTION::defaultValue = 1.000000; +const std::string WSEGAICD::OIL_VISC_FRACTION::itemName = "OIL_VISC_FRACTION"; +const double WSEGAICD::OIL_VISC_FRACTION::defaultValue = 1.000000; const std::string WSEGAICD::WATER_VISC_FRACTION::itemName = "WATER_VISC_FRACTION"; const double WSEGAICD::WATER_VISC_FRACTION::defaultValue = 1.000000; const std::string WSEGAICD::GAS_VISC_FRACTION::itemName = "GAS_VISC_FRACTION"; const double WSEGAICD::GAS_VISC_FRACTION::defaultValue = 1.000000; -WSEGDFIN::WSEGDFIN( ) : ParserKeyword("WSEGDFIN") -{ - setFixedSize( (size_t) 1); +WSEGDFIN::WSEGDFIN() : ParserKeyword("WSEGDFIN", KeywordSize(1, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WSEGDFIN"); @@ -4357,9 +4267,7 @@ const std::string WSEGDFIN::keywordName = "WSEGDFIN"; const std::string WSEGDFIN::DATA::itemName = "DATA"; -WSEGDFMD::WSEGDFMD( ) : ParserKeyword("WSEGDFMD") -{ - setFixedSize( (size_t) 1); +WSEGDFMD::WSEGDFMD() : ParserKeyword("WSEGDFMD", KeywordSize(1, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WSEGDFMD"); @@ -4392,9 +4300,7 @@ const std::string WSEGDFMD::GAS_EFFECT::itemName = "GAS_EFFECT"; const std::string WSEGDFMD::GAS_EFFECT::defaultValue = "NO"; -WSEGDFPA::WSEGDFPA( ) : ParserKeyword("WSEGDFPA") -{ - setFixedSize( (size_t) 1); +WSEGDFPA::WSEGDFPA() : ParserKeyword("WSEGDFPA", KeywordSize(1, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WSEGDFPA"); @@ -4469,9 +4375,7 @@ const std::string WSEGDFPA::B2::itemName = "B2"; const std::string WSEGDFPA::N::itemName = "N"; -WSEGDIMS::WSEGDIMS( ) : ParserKeyword("WSEGDIMS") -{ - setFixedSize( (size_t) 1); +WSEGDIMS::WSEGDIMS() : ParserKeyword("WSEGDIMS", KeywordSize(1, false)) { addValidSectionName("RUNSPEC"); clearDeckNames(); addDeckName("WSEGDIMS"); @@ -4511,9 +4415,7 @@ const std::string WSEGDIMS::NCRDMX::itemName = "NCRDMX"; const int WSEGDIMS::NCRDMX::defaultValue = 0; -WSEGEXSS::WSEGEXSS( ) : ParserKeyword("WSEGEXSS") -{ - setSizeType(SLASH_TERMINATED); +WSEGEXSS::WSEGEXSS() : ParserKeyword("WSEGEXSS", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WSEGEXSS"); @@ -4559,14 +4461,12 @@ const std::string WSEGEXSS::TYPE::itemName = "TYPE"; const std::string WSEGEXSS::TYPE::defaultValue = "NONE"; const std::string WSEGEXSS::GAS_IMPORT_RATE::itemName = "GAS_IMPORT_RATE"; const std::string WSEGEXSS::R::itemName = "R"; -const double WSEGEXSS::R::defaultValue = 0.000000; +const double WSEGEXSS::R::defaultValue = 0; const std::string WSEGEXSS::PEXT::itemName = "PEXT"; -const double WSEGEXSS::PEXT::defaultValue = 0.000000; +const double WSEGEXSS::PEXT::defaultValue = 0; -WSEGFLIM::WSEGFLIM( ) : ParserKeyword("WSEGFLIM") -{ - setSizeType(SLASH_TERMINATED); +WSEGFLIM::WSEGFLIM() : ParserKeyword("WSEGFLIM", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WSEGFLIM"); @@ -4636,9 +4536,7 @@ const std::string WSEGFLIM::STATUS::itemName = "STATUS"; const std::string WSEGFLIM::STATUS::defaultValue = "OPEN"; -WSEGFMOD::WSEGFMOD( ) : ParserKeyword("WSEGFMOD") -{ - setSizeType(SLASH_TERMINATED); +WSEGFMOD::WSEGFMOD() : ParserKeyword("WSEGFMOD", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WSEGFMOD"); @@ -4702,9 +4600,7 @@ const std::string WSEGFMOD::B1::itemName = "B1"; const std::string WSEGFMOD::B2::itemName = "B2"; -WSEGINIT::WSEGINIT( ) : ParserKeyword("WSEGINIT") -{ - setSizeType(SLASH_TERMINATED); +WSEGINIT::WSEGINIT() : ParserKeyword("WSEGINIT", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WSEGINIT"); @@ -4774,9 +4670,7 @@ const std::string WSEGINIT::POLYMER::itemName = "POLYMER"; const std::string WSEGINIT::BRINE::itemName = "BRINE"; -WSEGITER::WSEGITER( ) : ParserKeyword("WSEGITER") -{ - setFixedSize( (size_t) 1); +WSEGITER::WSEGITER() : ParserKeyword("WSEGITER", KeywordSize(1, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WSEGITER"); @@ -4784,7 +4678,7 @@ WSEGITER::WSEGITER( ) : ParserKeyword("WSEGITER") ParserRecord record; { ParserItem item("MAX_WELL_ITERATIONS", ParserItem::itype::INT); - item.setDefault( 20 ); + item.setDefault( 40 ); record.addItem(item); } { @@ -4807,7 +4701,7 @@ WSEGITER::WSEGITER( ) : ParserKeyword("WSEGITER") } const std::string WSEGITER::keywordName = "WSEGITER"; const std::string WSEGITER::MAX_WELL_ITERATIONS::itemName = "MAX_WELL_ITERATIONS"; -const int WSEGITER::MAX_WELL_ITERATIONS::defaultValue = 20; +const int WSEGITER::MAX_WELL_ITERATIONS::defaultValue = 40; const std::string WSEGITER::MAX_TIMES_REDUCED::itemName = "MAX_TIMES_REDUCED"; const int WSEGITER::MAX_TIMES_REDUCED::defaultValue = 5; const std::string WSEGITER::REDUCTION_FACTOR::itemName = "REDUCTION_FACTOR"; @@ -4816,9 +4710,7 @@ const std::string WSEGITER::INCREASING_FACTOR::itemName = "INCREASING_FACTOR"; const double WSEGITER::INCREASING_FACTOR::defaultValue = 2.000000; -WSEGLABY::WSEGLABY( ) : ParserKeyword("WSEGLABY") -{ - setSizeType(SLASH_TERMINATED); +WSEGLABY::WSEGLABY() : ParserKeyword("WSEGLABY", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WSEGLABY"); @@ -4906,7 +4798,7 @@ const std::string WSEGLABY::NCONFIG::itemName = "NCONFIG"; const std::string WSEGLABY::CHANNELS::itemName = "CHANNELS"; const int WSEGLABY::CHANNELS::defaultValue = 2; const std::string WSEGLABY::A::itemName = "A"; -const double WSEGLABY::A::defaultValue = 0.000060; +const double WSEGLABY::A::defaultValue = 6e-05; const std::string WSEGLABY::L1::itemName = "L1"; const double WSEGLABY::L1::defaultValue = 0.186300; const std::string WSEGLABY::L2::itemName = "L2"; @@ -4914,7 +4806,7 @@ const double WSEGLABY::L2::defaultValue = 0.283200; const std::string WSEGLABY::D::itemName = "D"; const double WSEGLABY::D::defaultValue = 0.006316; const std::string WSEGLABY::R::itemName = "R"; -const double WSEGLABY::R::defaultValue = 0.000010; +const double WSEGLABY::R::defaultValue = 1e-05; const std::string WSEGLABY::GAMMA_INLET::itemName = "GAMMA_INLET"; const double WSEGLABY::GAMMA_INLET::defaultValue = 0.350000; const std::string WSEGLABY::GAMMA_OUTLET::itemName = "GAMMA_OUTLET"; @@ -4925,9 +4817,7 @@ const std::string WSEGLABY::STATUS::itemName = "STATUS"; const std::string WSEGLABY::STATUS::defaultValue = "OPEN"; -WSEGLINK::WSEGLINK( ) : ParserKeyword("WSEGLINK") -{ - setSizeType(SLASH_TERMINATED); +WSEGLINK::WSEGLINK() : ParserKeyword("WSEGLINK", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WSEGLINK"); @@ -4954,9 +4844,7 @@ const std::string WSEGLINK::SEGMENT1::itemName = "SEGMENT1"; const std::string WSEGLINK::SEGMENT2::itemName = "SEGMENT2"; -WSEGMULT::WSEGMULT( ) : ParserKeyword("WSEGMULT") -{ - setSizeType(SLASH_TERMINATED); +WSEGMULT::WSEGMULT() : ParserKeyword("WSEGMULT", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WSEGMULT"); @@ -5014,20 +4902,18 @@ const std::string WSEGMULT::SEGMENT2::itemName = "SEGMENT2"; const std::string WSEGMULT::A::itemName = "A"; const double WSEGMULT::A::defaultValue = 1.000000; const std::string WSEGMULT::B::itemName = "B"; -const double WSEGMULT::B::defaultValue = 0.000000; +const double WSEGMULT::B::defaultValue = 0; const std::string WSEGMULT::C::itemName = "C"; -const double WSEGMULT::C::defaultValue = 0.000000; +const double WSEGMULT::C::defaultValue = 0; const std::string WSEGMULT::D::itemName = "D"; -const double WSEGMULT::D::defaultValue = 0.000000; +const double WSEGMULT::D::defaultValue = 0; const std::string WSEGMULT::E::itemName = "E"; -const double WSEGMULT::E::defaultValue = 0.000000; +const double WSEGMULT::E::defaultValue = 0; const std::string WSEGMULT::GOR::itemName = "GOR"; -const double WSEGMULT::GOR::defaultValue = 0.000000; +const double WSEGMULT::GOR::defaultValue = 0; -WSEGPROP::WSEGPROP( ) : ParserKeyword("WSEGPROP") -{ - setSizeType(SLASH_TERMINATED); +WSEGPROP::WSEGPROP() : ParserKeyword("WSEGPROP", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WSEGPROP"); @@ -5094,9 +4980,7 @@ const std::string WSEGPROP::CV::itemName = "CV"; const std::string WSEGPROP::K::itemName = "K"; -WSEGSEP::WSEGSEP( ) : ParserKeyword("WSEGSEP") -{ - setSizeType(SLASH_TERMINATED); +WSEGSEP::WSEGSEP() : ParserKeyword("WSEGSEP", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WSEGSEP"); @@ -5144,9 +5028,7 @@ const std::string WSEGSEP::HOLDUP_FRACTION::itemName = "HOLDUP_FRACTION"; const double WSEGSEP::HOLDUP_FRACTION::defaultValue = 0.010000; -WSEGSICD::WSEGSICD( ) : ParserKeyword("WSEGSICD") -{ - setSizeType(SLASH_TERMINATED); +WSEGSICD::WSEGSICD() : ParserKeyword("WSEGSICD", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WSEGSICD"); @@ -5157,11 +5039,11 @@ WSEGSICD::WSEGSICD( ) : ParserKeyword("WSEGSICD") record.addItem(item); } { - ParserItem item("SEG1", ParserItem::itype::INT); + ParserItem item("SEGMENT1", ParserItem::itype::INT); record.addItem(item); } { - ParserItem item("SEG2", ParserItem::itype::INT); + ParserItem item("SEGMENT2", ParserItem::itype::INT); record.addItem(item); } { @@ -5225,8 +5107,8 @@ WSEGSICD::WSEGSICD( ) : ParserKeyword("WSEGSICD") } const std::string WSEGSICD::keywordName = "WSEGSICD"; const std::string WSEGSICD::WELL::itemName = "WELL"; -const std::string WSEGSICD::SEG1::itemName = "SEG1"; -const std::string WSEGSICD::SEG2::itemName = "SEG2"; +const std::string WSEGSICD::SEGMENT1::itemName = "SEGMENT1"; +const std::string WSEGSICD::SEGMENT2::itemName = "SEGMENT2"; const std::string WSEGSICD::STRENGTH::itemName = "STRENGTH"; const std::string WSEGSICD::LENGTH::itemName = "LENGTH"; const double WSEGSICD::LENGTH::defaultValue = 12.000000; @@ -5247,9 +5129,7 @@ const std::string WSEGSICD::STATUS::itemName = "STATUS"; const std::string WSEGSICD::STATUS::defaultValue = "OPEN"; -WSEGSOLV::WSEGSOLV( ) : ParserKeyword("WSEGSOLV") -{ - setSizeType(SLASH_TERMINATED); +WSEGSOLV::WSEGSOLV() : ParserKeyword("WSEGSOLV", KeywordSize(1, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WSEGSOLV"); @@ -5305,22 +5185,20 @@ const std::string WSEGSOLV::USE_ITERATIVE_SOLVER::defaultValue = "NO"; const std::string WSEGSOLV::MAX_LINEAR_ITER::itemName = "MAX_LINEAR_ITER"; const int WSEGSOLV::MAX_LINEAR_ITER::defaultValue = 30; const std::string WSEGSOLV::CONVERGENCE_TARGET::itemName = "CONVERGENCE_TARGET"; -const double WSEGSOLV::CONVERGENCE_TARGET::defaultValue = 0.000000; +const double WSEGSOLV::CONVERGENCE_TARGET::defaultValue = 1e-10; const std::string WSEGSOLV::PC_FILL::itemName = "PC_FILL"; const int WSEGSOLV::PC_FILL::defaultValue = 2; const std::string WSEGSOLV::DROP_TOL::itemName = "DROP_TOL"; -const double WSEGSOLV::DROP_TOL::defaultValue = 0.000000; +const double WSEGSOLV::DROP_TOL::defaultValue = 0; const std::string WSEGSOLV::P_LIMIT::itemName = "P_LIMIT"; -const double WSEGSOLV::P_LIMIT::defaultValue = 0.000000; +const double WSEGSOLV::P_LIMIT::defaultValue = 1e-08; const std::string WSEGSOLV::LOOP_THRESHOLD::itemName = "LOOP_THRESHOLD"; const double WSEGSOLV::LOOP_THRESHOLD::defaultValue = -1.000000; const std::string WSEGSOLV::LOOP_MULTIPLIER::itemName = "LOOP_MULTIPLIER"; const double WSEGSOLV::LOOP_MULTIPLIER::defaultValue = -1.000000; -WSEGTABL::WSEGTABL( ) : ParserKeyword("WSEGTABL") -{ - setSizeType(SLASH_TERMINATED); +WSEGTABL::WSEGTABL() : ParserKeyword("WSEGTABL", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WSEGTABL"); @@ -5331,8 +5209,40 @@ WSEGTABL::WSEGTABL( ) : ParserKeyword("WSEGTABL") record.addItem(item); } { - ParserItem item("SURFACT", ParserItem::itype::UDA); - item.push_backDimension("Mass/Length*Length*Length"); + ParserItem item("SEGMENT1", ParserItem::itype::INT); + record.addItem(item); + } + { + ParserItem item("SEGMENT2", ParserItem::itype::INT); + record.addItem(item); + } + { + ParserItem item("VFP", ParserItem::itype::INT); + item.setDefault( 0 ); + record.addItem(item); + } + { + ParserItem item("VFP_COMPONENTS", ParserItem::itype::STRING); + item.setDefault( std::string("FH") ); + record.addItem(item); + } + { + ParserItem item("VFP_OUTLIER", ParserItem::itype::STRING); + record.addItem(item); + } + { + ParserItem item("DP_SCALING", ParserItem::itype::STRING); + item.setDefault( std::string("LEN") ); + record.addItem(item); + } + { + ParserItem item("ALQ_VALUE", ParserItem::itype::DOUBLE); + item.setDefault( double(0) ); + record.addItem(item); + } + { + ParserItem item("STATUS", ParserItem::itype::STRING); + item.setDefault( std::string("OPEN") ); record.addItem(item); } addRecord( record ); @@ -5340,12 +5250,22 @@ WSEGTABL::WSEGTABL( ) : ParserKeyword("WSEGTABL") } const std::string WSEGTABL::keywordName = "WSEGTABL"; const std::string WSEGTABL::WELL::itemName = "WELL"; -const std::string WSEGTABL::SURFACT::itemName = "SURFACT"; +const std::string WSEGTABL::SEGMENT1::itemName = "SEGMENT1"; +const std::string WSEGTABL::SEGMENT2::itemName = "SEGMENT2"; +const std::string WSEGTABL::VFP::itemName = "VFP"; +const int WSEGTABL::VFP::defaultValue = 0; +const std::string WSEGTABL::VFP_COMPONENTS::itemName = "VFP_COMPONENTS"; +const std::string WSEGTABL::VFP_COMPONENTS::defaultValue = "FH"; +const std::string WSEGTABL::VFP_OUTLIER::itemName = "VFP_OUTLIER"; +const std::string WSEGTABL::DP_SCALING::itemName = "DP_SCALING"; +const std::string WSEGTABL::DP_SCALING::defaultValue = "LEN"; +const std::string WSEGTABL::ALQ_VALUE::itemName = "ALQ_VALUE"; +const double WSEGTABL::ALQ_VALUE::defaultValue = 0; +const std::string WSEGTABL::STATUS::itemName = "STATUS"; +const std::string WSEGTABL::STATUS::defaultValue = "OPEN"; -WSEGVALV::WSEGVALV( ) : ParserKeyword("WSEGVALV") -{ - setSizeType(SLASH_TERMINATED); +WSEGVALV::WSEGVALV() : ParserKeyword("WSEGVALV", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WSEGVALV"); @@ -5415,9 +5335,7 @@ const std::string WSEGVALV::STATUS::defaultValue = "OPEN"; const std::string WSEGVALV::MAX_A::itemName = "MAX_A"; -WSKPTAB::WSKPTAB( ) : ParserKeyword("WSKPTAB") -{ - setSizeType(SLASH_TERMINATED); +WSKPTAB::WSKPTAB() : ParserKeyword("WSKPTAB", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WSKPTAB"); @@ -5444,9 +5362,7 @@ const std::string WSKPTAB::TABLE_NUMBER_WATER::itemName = "TABLE_NUMBER_WATER"; const std::string WSKPTAB::TABLE_NUMBER_POLYMER::itemName = "TABLE_NUMBER_POLYMER"; -WSOLVENT::WSOLVENT( ) : ParserKeyword("WSOLVENT") -{ - setSizeType(SLASH_TERMINATED); +WSOLVENT::WSOLVENT() : ParserKeyword("WSOLVENT", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WSOLVENT"); @@ -5469,9 +5385,30 @@ const std::string WSOLVENT::WELL::itemName = "WELL"; const std::string WSOLVENT::SOLVENT_FRACTION::itemName = "SOLVENT_FRACTION"; -WTADD::WTADD( ) : ParserKeyword("WTADD") -{ - setSizeType(SLASH_TERMINATED); +WSURFACT::WSURFACT() : ParserKeyword("WSURFACT", KeywordSize(SLASH_TERMINATED)) { + addValidSectionName("SCHEDULE"); + clearDeckNames(); + addDeckName("WSURFACT"); + { + ParserRecord record; + { + ParserItem item("WELL", ParserItem::itype::STRING); + record.addItem(item); + } + { + ParserItem item("SURFACT", ParserItem::itype::UDA); + item.push_backDimension("Mass/Length*Length*Length"); + record.addItem(item); + } + addRecord( record ); + } +} +const std::string WSURFACT::keywordName = "WSURFACT"; +const std::string WSURFACT::WELL::itemName = "WELL"; +const std::string WSURFACT::SURFACT::itemName = "SURFACT"; + + +WTADD::WTADD() : ParserKeyword("WTADD", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WTADD"); @@ -5505,9 +5442,7 @@ const std::string WTADD::NUM::itemName = "NUM"; const int WTADD::NUM::defaultValue = 1; -WTEMP::WTEMP( ) : ParserKeyword("WTEMP") -{ - setSizeType(SLASH_TERMINATED); +WTEMP::WTEMP() : ParserKeyword("WTEMP", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WTEMP"); @@ -5530,9 +5465,7 @@ const std::string WTEMP::WELL::itemName = "WELL"; const std::string WTEMP::TEMP::itemName = "TEMP"; -WTEMPQ::WTEMPQ( ) : ParserKeyword("WTEMPQ") -{ - setSizeType(SLASH_TERMINATED); +WTEMPQ::WTEMPQ() : ParserKeyword("WTEMPQ", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WTEMPQ"); @@ -5554,9 +5487,7 @@ const std::string WTEMPQ::WELL::itemName = "WELL"; const std::string WTEMPQ::LGR::itemName = "LGR"; -WTEST::WTEST( ) : ParserKeyword("WTEST") -{ - setSizeType(SLASH_TERMINATED); +WTEST::WTEST() : ParserKeyword("WTEST", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WTEST"); @@ -5598,12 +5529,10 @@ const std::string WTEST::REASON::defaultValue = ""; const std::string WTEST::TEST_NUM::itemName = "TEST_NUM"; const int WTEST::TEST_NUM::defaultValue = 0; const std::string WTEST::START_TIME::itemName = "START_TIME"; -const double WTEST::START_TIME::defaultValue = 0.000000; +const double WTEST::START_TIME::defaultValue = 0; -WTHPMAX::WTHPMAX( ) : ParserKeyword("WTHPMAX") -{ - setSizeType(SLASH_TERMINATED); +WTHPMAX::WTHPMAX() : ParserKeyword("WTHPMAX", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WTHPMAX"); @@ -5644,9 +5573,7 @@ const std::string WTHPMAX::CONTROL_LIMIT::itemName = "CONTROL_LIMIT"; const std::string WTHPMAX::THP_OPEN_LIMIT::itemName = "THP_OPEN_LIMIT"; -WTMULT::WTMULT( ) : ParserKeyword("WTMULT") -{ - setSizeType(SLASH_TERMINATED); +WTMULT::WTMULT() : ParserKeyword("WTMULT", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WTMULT"); @@ -5680,9 +5607,7 @@ const std::string WTMULT::NUM::itemName = "NUM"; const int WTMULT::NUM::defaultValue = 1; -WTRACER::WTRACER( ) : ParserKeyword("WTRACER") -{ - setSizeType(SLASH_TERMINATED); +WTRACER::WTRACER() : ParserKeyword("WTRACER", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WTRACER"); @@ -5719,9 +5644,7 @@ const std::string WTRACER::CUM_TRACER_FACTOR::itemName = "CUM_TRACER_FACTOR"; const std::string WTRACER::PRODUCTION_GROUP::itemName = "PRODUCTION_GROUP"; -WVFPDP::WVFPDP( ) : ParserKeyword("WVFPDP") -{ - setSizeType(SLASH_TERMINATED); +WVFPDP::WVFPDP() : ParserKeyword("WVFPDP", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WVFPDP"); @@ -5751,9 +5674,7 @@ const std::string WVFPDP::LOSS_SCALING_FACTOR::itemName = "LOSS_SCALING_FACTOR"; const double WVFPDP::LOSS_SCALING_FACTOR::defaultValue = 1.000000; -WVFPEXP::WVFPEXP( ) : ParserKeyword("WVFPEXP") -{ - setSizeType(SLASH_TERMINATED); +WVFPEXP::WVFPEXP() : ParserKeyword("WVFPEXP", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WVFPEXP"); @@ -5798,9 +5719,7 @@ const std::string WVFPEXP::EXTRAPOLATION_CONTROL::itemName = "EXTRAPOLATION_CONT const std::string WVFPEXP::EXTRAPOLATION_CONTROL::defaultValue = "WG"; -WWPAVE::WWPAVE( ) : ParserKeyword("WWPAVE") -{ - setSizeType(SLASH_TERMINATED); +WWPAVE::WWPAVE() : ParserKeyword("WWPAVE", KeywordSize(SLASH_TERMINATED)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("WWPAVE"); @@ -5826,7 +5745,7 @@ WWPAVE::WWPAVE( ) : ParserKeyword("WWPAVE") record.addItem(item); } { - ParserItem item("WELL_CONNECTION", ParserItem::itype::STRING); + ParserItem item("CONNECTION", ParserItem::itype::STRING); item.setDefault( std::string("OPEN") ); record.addItem(item); } @@ -5841,8 +5760,8 @@ const std::string WWPAVE::F2::itemName = "F2"; const double WWPAVE::F2::defaultValue = 0.500000; const std::string WWPAVE::DEPTH_CORRECTION::itemName = "DEPTH_CORRECTION"; const std::string WWPAVE::DEPTH_CORRECTION::defaultValue = "WELL"; -const std::string WWPAVE::WELL_CONNECTION::itemName = "WELL_CONNECTION"; -const std::string WWPAVE::WELL_CONNECTION::defaultValue = "OPEN"; +const std::string WWPAVE::CONNECTION::itemName = "CONNECTION"; +const std::string WWPAVE::CONNECTION::defaultValue = "OPEN"; } diff --git a/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/X.cpp b/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/X.cpp index 704a89938d..b1d5460521 100644 --- a/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/X.cpp +++ b/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/X.cpp @@ -1,13 +1,14 @@ -#include -#include -#include -#include + +#include +#include +#include +#include -#include +#include namespace Opm { namespace ParserKeywords { } diff --git a/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/Y.cpp b/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/Y.cpp index e99b0378db..76fb95f4b0 100644 --- a/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/Y.cpp +++ b/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/Y.cpp @@ -1,13 +1,14 @@ -#include -#include -#include -#include + +#include +#include +#include +#include -#include +#include namespace Opm { namespace ParserKeywords { } diff --git a/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/Z.cpp b/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/Z.cpp index 2e3f5e9d1a..0cdde0a604 100644 --- a/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/Z.cpp +++ b/ThirdParty/custom-opm-common/generated-opm-common/ParserKeywords/Z.cpp @@ -1,19 +1,21 @@ -#include -#include -#include -#include + +#include +#include +#include +#include -#include +#include namespace Opm { namespace ParserKeywords { -ZCORN::ZCORN( ) : ParserKeyword("ZCORN") -{ - setFixedSize( (size_t) 1); +ZCORN::ZCORN() : ParserKeyword("ZCORN", KeywordSize(1, false)) { addValidSectionName("GRID"); + setProhibitedKeywords({ + "GDFILE", + }); clearDeckNames(); addDeckName("ZCORN"); { @@ -31,10 +33,7 @@ const std::string ZCORN::keywordName = "ZCORN"; const std::string ZCORN::data::itemName = "data"; -ZFACT1::ZFACT1( ) : ParserKeyword("ZFACT1") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NUM_STATE_EQ",0); +ZFACT1::ZFACT1() : ParserKeyword("ZFACT1", KeywordSize("TABDIMS", "NUM_STATE_EQ", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("ZFACT1"); @@ -53,10 +52,7 @@ const std::string ZFACT1::keywordName = "ZFACT1"; const std::string ZFACT1::Z0::itemName = "Z0"; -ZFACT1S::ZFACT1S( ) : ParserKeyword("ZFACT1S") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NUM_STATE_EQ",0); +ZFACT1S::ZFACT1S() : ParserKeyword("ZFACT1S", KeywordSize("TABDIMS", "NUM_STATE_EQ", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("ZFACT1S"); @@ -75,10 +71,7 @@ const std::string ZFACT1S::keywordName = "ZFACT1S"; const std::string ZFACT1S::Z0::itemName = "Z0"; -ZFACTOR::ZFACTOR( ) : ParserKeyword("ZFACTOR") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NUM_STATE_EQ",0); +ZFACTOR::ZFACTOR() : ParserKeyword("ZFACTOR", KeywordSize("TABDIMS", "NUM_STATE_EQ", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("ZFACTOR"); @@ -97,10 +90,7 @@ const std::string ZFACTOR::keywordName = "ZFACTOR"; const std::string ZFACTOR::Z0::itemName = "Z0"; -ZFACTORS::ZFACTORS( ) : ParserKeyword("ZFACTORS") -{ - setSizeType(OTHER_KEYWORD_IN_DECK); - initSizeKeyword("TABDIMS","NUM_STATE_EQ",0); +ZFACTORS::ZFACTORS() : ParserKeyword("ZFACTORS", KeywordSize("TABDIMS", "NUM_STATE_EQ", false, 0)) { addValidSectionName("PROPS"); clearDeckNames(); addDeckName("ZFACTORS"); @@ -119,9 +109,7 @@ const std::string ZFACTORS::keywordName = "ZFACTORS"; const std::string ZFACTORS::Z0::itemName = "Z0"; -ZIPP2OFF::ZIPP2OFF( ) : ParserKeyword("ZIPP2OFF") -{ - setFixedSize( (size_t) 0); +ZIPP2OFF::ZIPP2OFF() : ParserKeyword("ZIPP2OFF", KeywordSize(0, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("ZIPP2OFF"); @@ -129,9 +117,7 @@ ZIPP2OFF::ZIPP2OFF( ) : ParserKeyword("ZIPP2OFF") const std::string ZIPP2OFF::keywordName = "ZIPP2OFF"; -ZIPPY2::ZIPPY2( ) : ParserKeyword("ZIPPY2") -{ - setFixedSize( (size_t) 1); +ZIPPY2::ZIPPY2() : ParserKeyword("ZIPPY2", KeywordSize(1, false)) { addValidSectionName("SCHEDULE"); clearDeckNames(); addDeckName("ZIPPY2"); diff --git a/ThirdParty/custom-opm-common/generated-opm-common/include/opm/parser/eclipse/Parser/ParserKeywords/A.hpp b/ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/A.hpp similarity index 98% rename from ThirdParty/custom-opm-common/generated-opm-common/include/opm/parser/eclipse/Parser/ParserKeywords/A.hpp rename to ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/A.hpp index bf729c429f..ce5f730ff5 100644 --- a/ThirdParty/custom-opm-common/generated-opm-common/include/opm/parser/eclipse/Parser/ParserKeywords/A.hpp +++ b/ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/A.hpp @@ -1,6 +1,6 @@ #ifndef PARSER_KEYWORDS_A_HPP #define PARSER_KEYWORDS_A_HPP -#include +#include namespace Opm { namespace ParserKeywords { @@ -689,9 +689,9 @@ namespace ParserKeywords { - class APIVID : public ParserKeyword { + class APIVD : public ParserKeyword { public: - APIVID(); + APIVD(); static const std::string keywordName; class DATA { @@ -1090,26 +1090,31 @@ namespace ParserKeywords { class TRANS_MULT { public: static const std::string itemName; + static const double defaultValue; }; class TRANS_OPTION { public: static const std::string itemName; + static const int defaultValue; }; class ALLOW_INTERNAL_CELLS { public: static const std::string itemName; + static const std::string defaultValue; }; class VEFRAC { public: static const std::string itemName; + static const double defaultValue; }; class VEFRACP { public: static const std::string itemName; + static const double defaultValue; }; }; @@ -1450,6 +1455,19 @@ namespace ParserKeywords { + class AQUIFER_PROBE_ANALYTIC_NAMED : public ParserKeyword { + public: + AQUIFER_PROBE_ANALYTIC_NAMED(); + static const std::string keywordName; + + class data { + public: + static const std::string itemName; + }; + }; + + + class AQUIFER_PROBE_NUMERIC : public ParserKeyword { public: AQUIFER_PROBE_NUMERIC(); diff --git a/ThirdParty/custom-opm-common/generated-opm-common/include/opm/parser/eclipse/Parser/ParserKeywords/B.hpp b/ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/B.hpp similarity index 97% rename from ThirdParty/custom-opm-common/generated-opm-common/include/opm/parser/eclipse/Parser/ParserKeywords/B.hpp rename to ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/B.hpp index b5fddaef68..6814a43011 100644 --- a/ThirdParty/custom-opm-common/generated-opm-common/include/opm/parser/eclipse/Parser/ParserKeywords/B.hpp +++ b/ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/B.hpp @@ -1,6 +1,6 @@ #ifndef PARSER_KEYWORDS_B_HPP #define PARSER_KEYWORDS_B_HPP -#include +#include namespace Opm { namespace ParserKeywords { @@ -330,6 +330,11 @@ namespace ParserKeywords { public: BRINE(); static const std::string keywordName; + + class SALTS { + public: + static const std::string itemName; + }; }; diff --git a/ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/Builtin.hpp b/ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/Builtin.hpp new file mode 100644 index 0000000000..162d8f7002 --- /dev/null +++ b/ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/Builtin.hpp @@ -0,0 +1,3415 @@ +#ifndef PARSER_KEYWORDS_BUILTIN_HPP +#define PARSER_KEYWORDS_BUILTIN_HPP +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace Opm { +namespace ParserKeywords { +struct Builtin { + const ::Opm::ParserKeywords::ACTDIMS ACTDIMS; + const ::Opm::ParserKeywords::ACTION ACTION; + const ::Opm::ParserKeywords::ACTIONG ACTIONG; + const ::Opm::ParserKeywords::ACTIONR ACTIONR; + const ::Opm::ParserKeywords::ACTIONS ACTIONS; + const ::Opm::ParserKeywords::ACTIONW ACTIONW; + const ::Opm::ParserKeywords::ACTIONX ACTIONX; + const ::Opm::ParserKeywords::ACTNUM ACTNUM; + const ::Opm::ParserKeywords::ACTPARAM ACTPARAM; + const ::Opm::ParserKeywords::ADD ADD; + const ::Opm::ParserKeywords::ADDREG ADDREG; + const ::Opm::ParserKeywords::ADDZCORN ADDZCORN; + const ::Opm::ParserKeywords::ADSALNOD ADSALNOD; + const ::Opm::ParserKeywords::ADSORP ADSORP; + const ::Opm::ParserKeywords::AITS AITS; + const ::Opm::ParserKeywords::AITSOFF AITSOFF; + const ::Opm::ParserKeywords::ALKADS ALKADS; + const ::Opm::ParserKeywords::ALKALINE ALKALINE; + const ::Opm::ParserKeywords::ALKROCK ALKROCK; + const ::Opm::ParserKeywords::ALL ALL; + const ::Opm::ParserKeywords::ALPOLADS ALPOLADS; + const ::Opm::ParserKeywords::ALSURFAD ALSURFAD; + const ::Opm::ParserKeywords::ALSURFST ALSURFST; + const ::Opm::ParserKeywords::AMALGAM AMALGAM; + const ::Opm::ParserKeywords::API API; + const ::Opm::ParserKeywords::APIGROUP APIGROUP; + const ::Opm::ParserKeywords::APILIM APILIM; + const ::Opm::ParserKeywords::APIVD APIVD; + const ::Opm::ParserKeywords::AQANCONL AQANCONL; + const ::Opm::ParserKeywords::AQANNC AQANNC; + const ::Opm::ParserKeywords::AQANTRC AQANTRC; + const ::Opm::ParserKeywords::AQUALIST AQUALIST; + const ::Opm::ParserKeywords::AQUANCON AQUANCON; + const ::Opm::ParserKeywords::AQUCHGAS AQUCHGAS; + const ::Opm::ParserKeywords::AQUCHWAT AQUCHWAT; + const ::Opm::ParserKeywords::AQUCON AQUCON; + const ::Opm::ParserKeywords::AQUCT AQUCT; + const ::Opm::ParserKeywords::AQUCWFAC AQUCWFAC; + const ::Opm::ParserKeywords::AQUDIMS AQUDIMS; + const ::Opm::ParserKeywords::AQUFET AQUFET; + const ::Opm::ParserKeywords::AQUFETP AQUFETP; + const ::Opm::ParserKeywords::AQUFLUX AQUFLUX; + const ::Opm::ParserKeywords::AQUIFER_PROBE_ANALYTIC AQUIFER_PROBE_ANALYTIC; + const ::Opm::ParserKeywords::AQUIFER_PROBE_ANALYTIC_NAMED AQUIFER_PROBE_ANALYTIC_NAMED; + const ::Opm::ParserKeywords::AQUIFER_PROBE_NUMERIC AQUIFER_PROBE_NUMERIC; + const ::Opm::ParserKeywords::AQUNNC AQUNNC; + const ::Opm::ParserKeywords::AQUNUM AQUNUM; + const ::Opm::ParserKeywords::AQUTAB AQUTAB; + const ::Opm::ParserKeywords::AUTOCOAR AUTOCOAR; + const ::Opm::ParserKeywords::AUTOREF AUTOREF; + const ::Opm::ParserKeywords::BC BC; + const ::Opm::ParserKeywords::BDENSITY BDENSITY; + const ::Opm::ParserKeywords::BGGI BGGI; + const ::Opm::ParserKeywords::BIGMODEL BIGMODEL; + const ::Opm::ParserKeywords::BLACKOIL BLACKOIL; + const ::Opm::ParserKeywords::BLOCK_PROBE BLOCK_PROBE; + const ::Opm::ParserKeywords::BLOCK_PROBE300 BLOCK_PROBE300; + const ::Opm::ParserKeywords::BOGI BOGI; + const ::Opm::ParserKeywords::BOUNDARY BOUNDARY; + const ::Opm::ParserKeywords::BOX BOX; + const ::Opm::ParserKeywords::BPARA BPARA; + const ::Opm::ParserKeywords::BPIDIMS BPIDIMS; + const ::Opm::ParserKeywords::BRANPROP BRANPROP; + const ::Opm::ParserKeywords::BRINE BRINE; + const ::Opm::ParserKeywords::BTOBALFA BTOBALFA; + const ::Opm::ParserKeywords::BTOBALFV BTOBALFV; + const ::Opm::ParserKeywords::CALTRAC CALTRAC; + const ::Opm::ParserKeywords::CARFIN CARFIN; + const ::Opm::ParserKeywords::CART CART; + const ::Opm::ParserKeywords::CBMOPTS CBMOPTS; + const ::Opm::ParserKeywords::CECON CECON; + const ::Opm::ParserKeywords::CECONT CECONT; + const ::Opm::ParserKeywords::CIRCLE CIRCLE; + const ::Opm::ParserKeywords::CO2STOR CO2STOR; + const ::Opm::ParserKeywords::CO2STORE CO2STORE; + const ::Opm::ParserKeywords::COAL COAL; + const ::Opm::ParserKeywords::COALADS COALADS; + const ::Opm::ParserKeywords::COALNUM COALNUM; + const ::Opm::ParserKeywords::COALPP COALPP; + const ::Opm::ParserKeywords::COARSEN COARSEN; + const ::Opm::ParserKeywords::COLLAPSE COLLAPSE; + const ::Opm::ParserKeywords::COLUMNS COLUMNS; + const ::Opm::ParserKeywords::COMPDAT COMPDAT; + const ::Opm::ParserKeywords::COMPDATX COMPDATX; + const ::Opm::ParserKeywords::COMPFLSH COMPFLSH; + const ::Opm::ParserKeywords::COMPIMB COMPIMB; + const ::Opm::ParserKeywords::COMPINJK COMPINJK; + const ::Opm::ParserKeywords::COMPLMPL COMPLMPL; + const ::Opm::ParserKeywords::COMPLUMP COMPLUMP; + const ::Opm::ParserKeywords::COMPOFF COMPOFF; + const ::Opm::ParserKeywords::COMPORD COMPORD; + const ::Opm::ParserKeywords::COMPRIV COMPRIV; + const ::Opm::ParserKeywords::COMPRP COMPRP; + const ::Opm::ParserKeywords::COMPRPL COMPRPL; + const ::Opm::ParserKeywords::COMPS COMPS; + const ::Opm::ParserKeywords::COMPSEGL COMPSEGL; + const ::Opm::ParserKeywords::COMPSEGS COMPSEGS; + const ::Opm::ParserKeywords::COMPVE COMPVE; + const ::Opm::ParserKeywords::COMPVEL COMPVEL; + const ::Opm::ParserKeywords::CONNECTION_PROBE CONNECTION_PROBE; + const ::Opm::ParserKeywords::COORD COORD; + const ::Opm::ParserKeywords::COORDSYS COORDSYS; + const ::Opm::ParserKeywords::COPY COPY; + const ::Opm::ParserKeywords::COPYBOX COPYBOX; + const ::Opm::ParserKeywords::COPYREG COPYREG; + const ::Opm::ParserKeywords::CPIFACT CPIFACT; + const ::Opm::ParserKeywords::CPIFACTL CPIFACTL; + const ::Opm::ParserKeywords::CPR CPR; + const ::Opm::ParserKeywords::CREF CREF; + const ::Opm::ParserKeywords::CREFS CREFS; + const ::Opm::ParserKeywords::CRITPERM CRITPERM; + const ::Opm::ParserKeywords::CSKIN CSKIN; + const ::Opm::ParserKeywords::DATE DATE; + const ::Opm::ParserKeywords::DATES DATES; + const ::Opm::ParserKeywords::DATUM DATUM; + const ::Opm::ParserKeywords::DATUMR DATUMR; + const ::Opm::ParserKeywords::DATUMRX DATUMRX; + const ::Opm::ParserKeywords::DCQDEFN DCQDEFN; + const ::Opm::ParserKeywords::DEBUG_ DEBUG_; + const ::Opm::ParserKeywords::DELAYACT DELAYACT; + const ::Opm::ParserKeywords::DENSITY DENSITY; + const ::Opm::ParserKeywords::DEPTH DEPTH; + const ::Opm::ParserKeywords::DEPTHTAB DEPTHTAB; + const ::Opm::ParserKeywords::DEPTHZ DEPTHZ; + const ::Opm::ParserKeywords::DIAGDISP DIAGDISP; + const ::Opm::ParserKeywords::DIFF DIFF; + const ::Opm::ParserKeywords::DIFFC DIFFC; + const ::Opm::ParserKeywords::DIFFCOAL DIFFCOAL; + const ::Opm::ParserKeywords::DIFFDP DIFFDP; + const ::Opm::ParserKeywords::DIFFMMF DIFFMMF; + const ::Opm::ParserKeywords::DIFFMR DIFFMR; + const ::Opm::ParserKeywords::DIFFMTHT DIFFMTHT; + const ::Opm::ParserKeywords::DIFFMX DIFFMX; + const ::Opm::ParserKeywords::DIFFMY DIFFMY; + const ::Opm::ParserKeywords::DIFFMZ DIFFMZ; + const ::Opm::ParserKeywords::DIFFR DIFFR; + const ::Opm::ParserKeywords::DIFFTHT DIFFTHT; + const ::Opm::ParserKeywords::DIFFUSE DIFFUSE; + const ::Opm::ParserKeywords::DIFFX DIFFX; + const ::Opm::ParserKeywords::DIFFY DIFFY; + const ::Opm::ParserKeywords::DIFFZ DIFFZ; + const ::Opm::ParserKeywords::DIMENS DIMENS; + const ::Opm::ParserKeywords::DIMPES DIMPES; + const ::Opm::ParserKeywords::DIMPLICT DIMPLICT; + const ::Opm::ParserKeywords::DISGAS DISGAS; + const ::Opm::ParserKeywords::DISPDIMS DISPDIMS; + const ::Opm::ParserKeywords::DISPERSE DISPERSE; + const ::Opm::ParserKeywords::DOMAINS DOMAINS; + const ::Opm::ParserKeywords::DPGRID DPGRID; + const ::Opm::ParserKeywords::DPKRMOD DPKRMOD; + const ::Opm::ParserKeywords::DPNUM DPNUM; + const ::Opm::ParserKeywords::DR DR; + const ::Opm::ParserKeywords::DREF DREF; + const ::Opm::ParserKeywords::DREFS DREFS; + const ::Opm::ParserKeywords::DRILPRI DRILPRI; + const ::Opm::ParserKeywords::DRSDT DRSDT; + const ::Opm::ParserKeywords::DRSDTCON DRSDTCON; + const ::Opm::ParserKeywords::DRSDTR DRSDTR; + const ::Opm::ParserKeywords::DRV DRV; + const ::Opm::ParserKeywords::DRVDT DRVDT; + const ::Opm::ParserKeywords::DRVDTR DRVDTR; + const ::Opm::ParserKeywords::DSPDEINT DSPDEINT; + const ::Opm::ParserKeywords::DTHETA DTHETA; + const ::Opm::ParserKeywords::DTHETAV DTHETAV; + const ::Opm::ParserKeywords::DUALPERM DUALPERM; + const ::Opm::ParserKeywords::DUALPORO DUALPORO; + const ::Opm::ParserKeywords::DUMPCUPL DUMPCUPL; + const ::Opm::ParserKeywords::DUMPFLUX DUMPFLUX; + const ::Opm::ParserKeywords::DX DX; + const ::Opm::ParserKeywords::DXV DXV; + const ::Opm::ParserKeywords::DY DY; + const ::Opm::ParserKeywords::DYNAMICR DYNAMICR; + const ::Opm::ParserKeywords::DYNRDIMS DYNRDIMS; + const ::Opm::ParserKeywords::DYV DYV; + const ::Opm::ParserKeywords::DZ DZ; + const ::Opm::ParserKeywords::DZMATRIX DZMATRIX; + const ::Opm::ParserKeywords::DZMTRX DZMTRX; + const ::Opm::ParserKeywords::DZMTRXV DZMTRXV; + const ::Opm::ParserKeywords::DZNET DZNET; + const ::Opm::ParserKeywords::DZV DZV; + const ::Opm::ParserKeywords::ECHO ECHO; + const ::Opm::ParserKeywords::ECLMC ECLMC; + const ::Opm::ParserKeywords::EDIT EDIT; + const ::Opm::ParserKeywords::EDITNNC EDITNNC; + const ::Opm::ParserKeywords::EDITNNCR EDITNNCR; + const ::Opm::ParserKeywords::EHYSTR EHYSTR; + const ::Opm::ParserKeywords::EHYSTRR EHYSTRR; + const ::Opm::ParserKeywords::END END; + const ::Opm::ParserKeywords::ENDACTIO ENDACTIO; + const ::Opm::ParserKeywords::ENDBOX ENDBOX; + const ::Opm::ParserKeywords::ENDDYN ENDDYN; + const ::Opm::ParserKeywords::ENDFIN ENDFIN; + const ::Opm::ParserKeywords::ENDINC ENDINC; + const ::Opm::ParserKeywords::ENDNUM ENDNUM; + const ::Opm::ParserKeywords::ENDPOINT_SPECIFIERS ENDPOINT_SPECIFIERS; + const ::Opm::ParserKeywords::ENDSCALE ENDSCALE; + const ::Opm::ParserKeywords::ENDSKIP ENDSKIP; + const ::Opm::ParserKeywords::ENKRVD ENKRVD; + const ::Opm::ParserKeywords::ENPCVD ENPCVD; + const ::Opm::ParserKeywords::ENPTVD ENPTVD; + const ::Opm::ParserKeywords::ENSPCVD ENSPCVD; + const ::Opm::ParserKeywords::EPSDBGS EPSDBGS; + const ::Opm::ParserKeywords::EPSDEBUG EPSDEBUG; + const ::Opm::ParserKeywords::EQLDIMS EQLDIMS; + const ::Opm::ParserKeywords::EQLNUM EQLNUM; + const ::Opm::ParserKeywords::EQLOPTS EQLOPTS; + const ::Opm::ParserKeywords::EQLZCORN EQLZCORN; + const ::Opm::ParserKeywords::EQUALREG EQUALREG; + const ::Opm::ParserKeywords::EQUALS EQUALS; + const ::Opm::ParserKeywords::EQUIL EQUIL; + const ::Opm::ParserKeywords::ESSNODE ESSNODE; + const ::Opm::ParserKeywords::EXCAVATE EXCAVATE; + const ::Opm::ParserKeywords::EXCEL EXCEL; + const ::Opm::ParserKeywords::EXIT EXIT; + const ::Opm::ParserKeywords::EXTFIN EXTFIN; + const ::Opm::ParserKeywords::EXTHOST EXTHOST; + const ::Opm::ParserKeywords::EXTRAPMS EXTRAPMS; + const ::Opm::ParserKeywords::EXTREPGL EXTREPGL; + const ::Opm::ParserKeywords::FAULTDIM FAULTDIM; + const ::Opm::ParserKeywords::FAULTS FAULTS; + const ::Opm::ParserKeywords::FBHPDEF FBHPDEF; + const ::Opm::ParserKeywords::FHERCHBL FHERCHBL; + const ::Opm::ParserKeywords::FIELD FIELD; + const ::Opm::ParserKeywords::FIELD_PROBE FIELD_PROBE; + const ::Opm::ParserKeywords::FILEUNIT FILEUNIT; + const ::Opm::ParserKeywords::FILLEPS FILLEPS; + const ::Opm::ParserKeywords::FIPNUM FIPNUM; + const ::Opm::ParserKeywords::FIPOWG FIPOWG; + const ::Opm::ParserKeywords::FIPSEP FIPSEP; + const ::Opm::ParserKeywords::FIP_PROBE FIP_PROBE; + const ::Opm::ParserKeywords::FLUXNUM FLUXNUM; + const ::Opm::ParserKeywords::FLUXREG FLUXREG; + const ::Opm::ParserKeywords::FLUXTYPE FLUXTYPE; + const ::Opm::ParserKeywords::FMTHMD FMTHMD; + const ::Opm::ParserKeywords::FMTIN FMTIN; + const ::Opm::ParserKeywords::FMTOUT FMTOUT; + const ::Opm::ParserKeywords::FMWSET FMWSET; + const ::Opm::ParserKeywords::FOAM FOAM; + const ::Opm::ParserKeywords::FOAMADS FOAMADS; + const ::Opm::ParserKeywords::FOAMDCYO FOAMDCYO; + const ::Opm::ParserKeywords::FOAMDCYW FOAMDCYW; + const ::Opm::ParserKeywords::FOAMFCN FOAMFCN; + const ::Opm::ParserKeywords::FOAMFRM FOAMFRM; + const ::Opm::ParserKeywords::FOAMFSC FOAMFSC; + const ::Opm::ParserKeywords::FOAMFSO FOAMFSO; + const ::Opm::ParserKeywords::FOAMFST FOAMFST; + const ::Opm::ParserKeywords::FOAMFSW FOAMFSW; + const ::Opm::ParserKeywords::FOAMMOB FOAMMOB; + const ::Opm::ParserKeywords::FOAMMOBP FOAMMOBP; + const ::Opm::ParserKeywords::FOAMMOBS FOAMMOBS; + const ::Opm::ParserKeywords::FOAMOPTS FOAMOPTS; + const ::Opm::ParserKeywords::FOAMROCK FOAMROCK; + const ::Opm::ParserKeywords::FORMFEED FORMFEED; + const ::Opm::ParserKeywords::FRICTION FRICTION; + const ::Opm::ParserKeywords::FULLIMP FULLIMP; + const ::Opm::ParserKeywords::GAS GAS; + const ::Opm::ParserKeywords::GASBEGIN GASBEGIN; + const ::Opm::ParserKeywords::GASCONC GASCONC; + const ::Opm::ParserKeywords::GASDENT GASDENT; + const ::Opm::ParserKeywords::GASEND GASEND; + const ::Opm::ParserKeywords::GASFCOMP GASFCOMP; + const ::Opm::ParserKeywords::GASFDECR GASFDECR; + const ::Opm::ParserKeywords::GASFDELC GASFDELC; + const ::Opm::ParserKeywords::GASFIELD GASFIELD; + const ::Opm::ParserKeywords::GASFTARG GASFTARG; + const ::Opm::ParserKeywords::GASJT GASJT; + const ::Opm::ParserKeywords::GASMONTH GASMONTH; + const ::Opm::ParserKeywords::GASPERIO GASPERIO; + const ::Opm::ParserKeywords::GASSATC GASSATC; + const ::Opm::ParserKeywords::GASVISCT GASVISCT; + const ::Opm::ParserKeywords::GASYEAR GASYEAR; + const ::Opm::ParserKeywords::GCALECON GCALECON; + const ::Opm::ParserKeywords::GCOMPIDX GCOMPIDX; + const ::Opm::ParserKeywords::GCONCAL GCONCAL; + const ::Opm::ParserKeywords::GCONENG GCONENG; + const ::Opm::ParserKeywords::GCONINJE GCONINJE; + const ::Opm::ParserKeywords::GCONPRI GCONPRI; + const ::Opm::ParserKeywords::GCONPROD GCONPROD; + const ::Opm::ParserKeywords::GCONSALE GCONSALE; + const ::Opm::ParserKeywords::GCONSUMP GCONSUMP; + const ::Opm::ParserKeywords::GCONTOL GCONTOL; + const ::Opm::ParserKeywords::GCUTBACK GCUTBACK; + const ::Opm::ParserKeywords::GCUTBACT GCUTBACT; + const ::Opm::ParserKeywords::GCVD GCVD; + const ::Opm::ParserKeywords::GDCQ GDCQ; + const ::Opm::ParserKeywords::GDCQECON GDCQECON; + const ::Opm::ParserKeywords::GDFILE GDFILE; + const ::Opm::ParserKeywords::GDIMS GDIMS; + const ::Opm::ParserKeywords::GDORIENT GDORIENT; + const ::Opm::ParserKeywords::GDRILPOT GDRILPOT; + const ::Opm::ParserKeywords::GECON GECON; + const ::Opm::ParserKeywords::GECONT GECONT; + const ::Opm::ParserKeywords::GEFAC GEFAC; + const ::Opm::ParserKeywords::GETDATA GETDATA; + const ::Opm::ParserKeywords::GETGLOB GETGLOB; + const ::Opm::ParserKeywords::GI GI; + const ::Opm::ParserKeywords::GIALL GIALL; + const ::Opm::ParserKeywords::GIMODEL GIMODEL; + const ::Opm::ParserKeywords::GINODE GINODE; + const ::Opm::ParserKeywords::GLIFTLIM GLIFTLIM; + const ::Opm::ParserKeywords::GLIFTOPT GLIFTOPT; + const ::Opm::ParserKeywords::GMWSET GMWSET; + const ::Opm::ParserKeywords::GNETDP GNETDP; + const ::Opm::ParserKeywords::GNETINJE GNETINJE; + const ::Opm::ParserKeywords::GNETPUMP GNETPUMP; + const ::Opm::ParserKeywords::GPMAINT GPMAINT; + const ::Opm::ParserKeywords::GRADGRUP GRADGRUP; + const ::Opm::ParserKeywords::GRADRESV GRADRESV; + const ::Opm::ParserKeywords::GRADRFT GRADRFT; + const ::Opm::ParserKeywords::GRADWELL GRADWELL; + const ::Opm::ParserKeywords::GRAVCONS GRAVCONS; + const ::Opm::ParserKeywords::GRAVDR GRAVDR; + const ::Opm::ParserKeywords::GRAVDRB GRAVDRB; + const ::Opm::ParserKeywords::GRAVDRM GRAVDRM; + const ::Opm::ParserKeywords::GRAVITY GRAVITY; + const ::Opm::ParserKeywords::GRDREACH GRDREACH; + const ::Opm::ParserKeywords::GRID GRID; + const ::Opm::ParserKeywords::GRIDFILE GRIDFILE; + const ::Opm::ParserKeywords::GRIDOPTS GRIDOPTS; + const ::Opm::ParserKeywords::GRIDUNIT GRIDUNIT; + const ::Opm::ParserKeywords::GROUP_PROBE GROUP_PROBE; + const ::Opm::ParserKeywords::GRUPMAST GRUPMAST; + const ::Opm::ParserKeywords::GRUPNET GRUPNET; + const ::Opm::ParserKeywords::GRUPRIG GRUPRIG; + const ::Opm::ParserKeywords::GRUPSLAV GRUPSLAV; + const ::Opm::ParserKeywords::GRUPTARG GRUPTARG; + const ::Opm::ParserKeywords::GRUPTREE GRUPTREE; + const ::Opm::ParserKeywords::GSATINJE GSATINJE; + const ::Opm::ParserKeywords::GSATPROD GSATPROD; + const ::Opm::ParserKeywords::GSEPCOND GSEPCOND; + const ::Opm::ParserKeywords::GSSCPTST GSSCPTST; + const ::Opm::ParserKeywords::GSWINGF GSWINGF; + const ::Opm::ParserKeywords::GTADD GTADD; + const ::Opm::ParserKeywords::GTMULT GTMULT; + const ::Opm::ParserKeywords::GUIDECAL GUIDECAL; + const ::Opm::ParserKeywords::GUIDERAT GUIDERAT; + const ::Opm::ParserKeywords::GUPFREQ GUPFREQ; + const ::Opm::ParserKeywords::GWRTWCV GWRTWCV; + const ::Opm::ParserKeywords::HALFTRAN HALFTRAN; + const ::Opm::ParserKeywords::HAxxxxxx HAxxxxxx; + const ::Opm::ParserKeywords::HBNUM HBNUM; + const ::Opm::ParserKeywords::HDISP HDISP; + const ::Opm::ParserKeywords::HEATCR HEATCR; + const ::Opm::ParserKeywords::HEATCRT HEATCRT; + const ::Opm::ParserKeywords::HMAQUCT HMAQUCT; + const ::Opm::ParserKeywords::HMAQUFET HMAQUFET; + const ::Opm::ParserKeywords::HMAQUNUM HMAQUNUM; + const ::Opm::ParserKeywords::HMDIMS HMDIMS; + const ::Opm::ParserKeywords::HMFAULTS HMFAULTS; + const ::Opm::ParserKeywords::HMMLAQUN HMMLAQUN; + const ::Opm::ParserKeywords::HMMLCTAQ HMMLCTAQ; + const ::Opm::ParserKeywords::HMMLFTAQ HMMLFTAQ; + const ::Opm::ParserKeywords::HMMLTWCN HMMLTWCN; + const ::Opm::ParserKeywords::HMMULTFT HMMULTFT; + const ::Opm::ParserKeywords::HMMULTSG HMMULTSG; + const ::Opm::ParserKeywords::HMMULTxx HMMULTxx; + const ::Opm::ParserKeywords::HMPROPS HMPROPS; + const ::Opm::ParserKeywords::HMROCK HMROCK; + const ::Opm::ParserKeywords::HMROCKT HMROCKT; + const ::Opm::ParserKeywords::HMRREF HMRREF; + const ::Opm::ParserKeywords::HMWELCON HMWELCON; + const ::Opm::ParserKeywords::HMWPIMLT HMWPIMLT; + const ::Opm::ParserKeywords::HMxxxxxx HMxxxxxx; + const ::Opm::ParserKeywords::HRFIN HRFIN; + const ::Opm::ParserKeywords::HWKRO HWKRO; + const ::Opm::ParserKeywords::HWKRORG HWKRORG; + const ::Opm::ParserKeywords::HWKRORW HWKRORW; + const ::Opm::ParserKeywords::HWKRW HWKRW; + const ::Opm::ParserKeywords::HWKRWR HWKRWR; + const ::Opm::ParserKeywords::HWPCW HWPCW; + const ::Opm::ParserKeywords::HWSNUM HWSNUM; + const ::Opm::ParserKeywords::HWSOGCR HWSOGCR; + const ::Opm::ParserKeywords::HWSOWCR HWSOWCR; + const ::Opm::ParserKeywords::HWSWCR HWSWCR; + const ::Opm::ParserKeywords::HWSWL HWSWL; + const ::Opm::ParserKeywords::HWSWLPC HWSWLPC; + const ::Opm::ParserKeywords::HWSWU HWSWU; + const ::Opm::ParserKeywords::HXFIN HXFIN; + const ::Opm::ParserKeywords::HYDRHEAD HYDRHEAD; + const ::Opm::ParserKeywords::HYFIN HYFIN; + const ::Opm::ParserKeywords::HYMOBGDR HYMOBGDR; + const ::Opm::ParserKeywords::HYST HYST; + const ::Opm::ParserKeywords::HYSTCHCK HYSTCHCK; + const ::Opm::ParserKeywords::HZFIN HZFIN; + const ::Opm::ParserKeywords::IHOST IHOST; + const ::Opm::ParserKeywords::IMBNUM IMBNUM; + const ::Opm::ParserKeywords::IMBNUMMF IMBNUMMF; + const ::Opm::ParserKeywords::IMKRVD IMKRVD; + const ::Opm::ParserKeywords::IMPCVD IMPCVD; + const ::Opm::ParserKeywords::IMPES IMPES; + const ::Opm::ParserKeywords::IMPLICIT IMPLICIT; + const ::Opm::ParserKeywords::IMPORT IMPORT; + const ::Opm::ParserKeywords::IMPTVD IMPTVD; + const ::Opm::ParserKeywords::IMSPCVD IMSPCVD; + const ::Opm::ParserKeywords::INCLUDE INCLUDE; + const ::Opm::ParserKeywords::INIT INIT; + const ::Opm::ParserKeywords::INRAD INRAD; + const ::Opm::ParserKeywords::INSPEC INSPEC; + const ::Opm::ParserKeywords::INTPC INTPC; + const ::Opm::ParserKeywords::IONROCK IONROCK; + const ::Opm::ParserKeywords::IONXROCK IONXROCK; + const ::Opm::ParserKeywords::IONXSURF IONXSURF; + const ::Opm::ParserKeywords::IPCG IPCG; + const ::Opm::ParserKeywords::IPCW IPCW; + const ::Opm::ParserKeywords::ISGCR ISGCR; + const ::Opm::ParserKeywords::ISGL ISGL; + const ::Opm::ParserKeywords::ISGLPC ISGLPC; + const ::Opm::ParserKeywords::ISGU ISGU; + const ::Opm::ParserKeywords::ISOGCR ISOGCR; + const ::Opm::ParserKeywords::ISOLNUM ISOLNUM; + const ::Opm::ParserKeywords::ISOWCR ISOWCR; + const ::Opm::ParserKeywords::ISWCR ISWCR; + const ::Opm::ParserKeywords::ISWL ISWL; + const ::Opm::ParserKeywords::ISWLPC ISWLPC; + const ::Opm::ParserKeywords::ISWU ISWU; + const ::Opm::ParserKeywords::JFUNC JFUNC; + const ::Opm::ParserKeywords::JFUNCR JFUNCR; + const ::Opm::ParserKeywords::KRNUM KRNUM; + const ::Opm::ParserKeywords::KRNUMMF KRNUMMF; + const ::Opm::ParserKeywords::LAB LAB; + const ::Opm::ParserKeywords::LANGMPL LANGMPL; + const ::Opm::ParserKeywords::LANGMUIR LANGMUIR; + const ::Opm::ParserKeywords::LANGSOLV LANGSOLV; + const ::Opm::ParserKeywords::LCUNIT LCUNIT; + const ::Opm::ParserKeywords::LGR LGR; + const ::Opm::ParserKeywords::LGRCOPY LGRCOPY; + const ::Opm::ParserKeywords::LGRFREE LGRFREE; + const ::Opm::ParserKeywords::LGRLOCK LGRLOCK; + const ::Opm::ParserKeywords::LGROFF LGROFF; + const ::Opm::ParserKeywords::LGRON LGRON; + const ::Opm::ParserKeywords::LICENSES LICENSES; + const ::Opm::ParserKeywords::LIFTOPT LIFTOPT; + const ::Opm::ParserKeywords::LINCOM LINCOM; + const ::Opm::ParserKeywords::LINKPERM LINKPERM; + const ::Opm::ParserKeywords::LIVEOIL LIVEOIL; + const ::Opm::ParserKeywords::LKRO LKRO; + const ::Opm::ParserKeywords::LKRORG LKRORG; + const ::Opm::ParserKeywords::LKRORW LKRORW; + const ::Opm::ParserKeywords::LKRW LKRW; + const ::Opm::ParserKeywords::LKRWR LKRWR; + const ::Opm::ParserKeywords::LOAD LOAD; + const ::Opm::ParserKeywords::LOWSALT LOWSALT; + const ::Opm::ParserKeywords::LPCW LPCW; + const ::Opm::ParserKeywords::LSALTFNC LSALTFNC; + const ::Opm::ParserKeywords::LSLTWNUM LSLTWNUM; + const ::Opm::ParserKeywords::LSNUM LSNUM; + const ::Opm::ParserKeywords::LSOGCR LSOGCR; + const ::Opm::ParserKeywords::LSOWCR LSOWCR; + const ::Opm::ParserKeywords::LSWCR LSWCR; + const ::Opm::ParserKeywords::LSWL LSWL; + const ::Opm::ParserKeywords::LSWLPC LSWLPC; + const ::Opm::ParserKeywords::LSWU LSWU; + const ::Opm::ParserKeywords::LTOSIGMA LTOSIGMA; + const ::Opm::ParserKeywords::LWKRO LWKRO; + const ::Opm::ParserKeywords::LWKRORG LWKRORG; + const ::Opm::ParserKeywords::LWKRORW LWKRORW; + const ::Opm::ParserKeywords::LWKRW LWKRW; + const ::Opm::ParserKeywords::LWKRWR LWKRWR; + const ::Opm::ParserKeywords::LWPCW LWPCW; + const ::Opm::ParserKeywords::LWSLTNUM LWSLTNUM; + const ::Opm::ParserKeywords::LWSNUM LWSNUM; + const ::Opm::ParserKeywords::LWSOGCR LWSOGCR; + const ::Opm::ParserKeywords::LWSOWCR LWSOWCR; + const ::Opm::ParserKeywords::LWSWCR LWSWCR; + const ::Opm::ParserKeywords::LWSWL LWSWL; + const ::Opm::ParserKeywords::LWSWLPC LWSWLPC; + const ::Opm::ParserKeywords::LWSWU LWSWU; + const ::Opm::ParserKeywords::LX LX; + const ::Opm::ParserKeywords::LXFIN LXFIN; + const ::Opm::ParserKeywords::LY LY; + const ::Opm::ParserKeywords::LYFIN LYFIN; + const ::Opm::ParserKeywords::LZ LZ; + const ::Opm::ParserKeywords::LZFIN LZFIN; + const ::Opm::ParserKeywords::MAPAXES MAPAXES; + const ::Opm::ParserKeywords::MAPUNITS MAPUNITS; + const ::Opm::ParserKeywords::MASSFLOW MASSFLOW; + const ::Opm::ParserKeywords::MATCORR MATCORR; + const ::Opm::ParserKeywords::MAXVALUE MAXVALUE; + const ::Opm::ParserKeywords::MEMORY MEMORY; + const ::Opm::ParserKeywords::MESSAGE MESSAGE; + const ::Opm::ParserKeywords::MESSAGES MESSAGES; + const ::Opm::ParserKeywords::MESSOPTS MESSOPTS; + const ::Opm::ParserKeywords::MESSSRVC MESSSRVC; + const ::Opm::ParserKeywords::METRIC METRIC; + const ::Opm::ParserKeywords::MICP MICP; + const ::Opm::ParserKeywords::MICPPARA MICPPARA; + const ::Opm::ParserKeywords::MINNNCT MINNNCT; + const ::Opm::ParserKeywords::MINNPCOL MINNPCOL; + const ::Opm::ParserKeywords::MINPORV MINPORV; + const ::Opm::ParserKeywords::MINPV MINPV; + const ::Opm::ParserKeywords::MINPVFIL MINPVFIL; + const ::Opm::ParserKeywords::MINPVV MINPVV; + const ::Opm::ParserKeywords::MINVALUE MINVALUE; + const ::Opm::ParserKeywords::MISC MISC; + const ::Opm::ParserKeywords::MISCIBLE MISCIBLE; + const ::Opm::ParserKeywords::MISCNUM MISCNUM; + const ::Opm::ParserKeywords::MLANG MLANG; + const ::Opm::ParserKeywords::MLANGSLV MLANGSLV; + const ::Opm::ParserKeywords::MONITOR MONITOR; + const ::Opm::ParserKeywords::MPFANUM MPFANUM; + const ::Opm::ParserKeywords::MPFNNC MPFNNC; + const ::Opm::ParserKeywords::MSFN MSFN; + const ::Opm::ParserKeywords::MSGFILE MSGFILE; + const ::Opm::ParserKeywords::MSUM_PROBE MSUM_PROBE; + const ::Opm::ParserKeywords::MULSGGD MULSGGD; + const ::Opm::ParserKeywords::MULSGGDV MULSGGDV; + const ::Opm::ParserKeywords::MULTFLT MULTFLT; + const ::Opm::ParserKeywords::MULTIN MULTIN; + const ::Opm::ParserKeywords::MULTIPLY MULTIPLY; + const ::Opm::ParserKeywords::MULTIREG MULTIREG; + const ::Opm::ParserKeywords::MULTNUM MULTNUM; + const ::Opm::ParserKeywords::MULTOUT MULTOUT; + const ::Opm::ParserKeywords::MULTOUTS MULTOUTS; + const ::Opm::ParserKeywords::MULTPV MULTPV; + const ::Opm::ParserKeywords::MULTREAL MULTREAL; + const ::Opm::ParserKeywords::MULTREGD MULTREGD; + const ::Opm::ParserKeywords::MULTREGH MULTREGH; + const ::Opm::ParserKeywords::MULTREGP MULTREGP; + const ::Opm::ParserKeywords::MULTREGT MULTREGT; + const ::Opm::ParserKeywords::MULTSIG MULTSIG; + const ::Opm::ParserKeywords::MULTSIGV MULTSIGV; + const ::Opm::ParserKeywords::MULT_XYZ MULT_XYZ; + const ::Opm::ParserKeywords::MW MW; + const ::Opm::ParserKeywords::MWS MWS; + const ::Opm::ParserKeywords::NARROW NARROW; + const ::Opm::ParserKeywords::NCONSUMP NCONSUMP; + const ::Opm::ParserKeywords::NEFAC NEFAC; + const ::Opm::ParserKeywords::NETBALAN NETBALAN; + const ::Opm::ParserKeywords::NETCOMPA NETCOMPA; + const ::Opm::ParserKeywords::NETWORK NETWORK; + const ::Opm::ParserKeywords::NEWTRAN NEWTRAN; + const ::Opm::ParserKeywords::NEXTSTEP NEXTSTEP; + const ::Opm::ParserKeywords::NEXTSTPL NEXTSTPL; + const ::Opm::ParserKeywords::NINENUM NINENUM; + const ::Opm::ParserKeywords::NINEPOIN NINEPOIN; + const ::Opm::ParserKeywords::NMATOPTS NMATOPTS; + const ::Opm::ParserKeywords::NMATRIX NMATRIX; + const ::Opm::ParserKeywords::NMESSAGE NMESSAGE; + const ::Opm::ParserKeywords::NNC NNC; + const ::Opm::ParserKeywords::NNEWTF NNEWTF; + const ::Opm::ParserKeywords::NOCASC NOCASC; + const ::Opm::ParserKeywords::NODEPROP NODEPROP; + const ::Opm::ParserKeywords::NODPPM NODPPM; + const ::Opm::ParserKeywords::NOECHO NOECHO; + const ::Opm::ParserKeywords::NOGGF NOGGF; + const ::Opm::ParserKeywords::NOGRAV NOGRAV; + const ::Opm::ParserKeywords::NOHMD NOHMD; + const ::Opm::ParserKeywords::NOHMO NOHMO; + const ::Opm::ParserKeywords::NOHYST NOHYST; + const ::Opm::ParserKeywords::NOINSPEC NOINSPEC; + const ::Opm::ParserKeywords::NOMONITO NOMONITO; + const ::Opm::ParserKeywords::NONNC NONNC; + const ::Opm::ParserKeywords::NORSSPEC NORSSPEC; + const ::Opm::ParserKeywords::NOSIM NOSIM; + const ::Opm::ParserKeywords::NOWARN NOWARN; + const ::Opm::ParserKeywords::NOWARNEP NOWARNEP; + const ::Opm::ParserKeywords::NRSOUT NRSOUT; + const ::Opm::ParserKeywords::NSTACK NSTACK; + const ::Opm::ParserKeywords::NTG NTG; + const ::Opm::ParserKeywords::NUMRES NUMRES; + const ::Opm::ParserKeywords::NUPCOL NUPCOL; + const ::Opm::ParserKeywords::NWATREM NWATREM; + const ::Opm::ParserKeywords::NXFIN NXFIN; + const ::Opm::ParserKeywords::NYFIN NYFIN; + const ::Opm::ParserKeywords::NZFIN NZFIN; + const ::Opm::ParserKeywords::OCOMPIDX OCOMPIDX; + const ::Opm::ParserKeywords::OFM OFM; + const ::Opm::ParserKeywords::OIL OIL; + const ::Opm::ParserKeywords::OILAPI OILAPI; + const ::Opm::ParserKeywords::OILCOMPR OILCOMPR; + const ::Opm::ParserKeywords::OILDENT OILDENT; + const ::Opm::ParserKeywords::OILJT OILJT; + const ::Opm::ParserKeywords::OILMW OILMW; + const ::Opm::ParserKeywords::OILVISCT OILVISCT; + const ::Opm::ParserKeywords::OILVTIM OILVTIM; + const ::Opm::ParserKeywords::OLDTRAN OLDTRAN; + const ::Opm::ParserKeywords::OLDTRANR OLDTRANR; + const ::Opm::ParserKeywords::OPERATE OPERATE; + const ::Opm::ParserKeywords::OPERATER OPERATER; + const ::Opm::ParserKeywords::OPERNUM OPERNUM; + const ::Opm::ParserKeywords::OPTIONS OPTIONS; + const ::Opm::ParserKeywords::OPTIONS3 OPTIONS3; + const ::Opm::ParserKeywords::OUTRAD OUTRAD; + const ::Opm::ParserKeywords::OUTSOL OUTSOL; + const ::Opm::ParserKeywords::OVERBURD OVERBURD; + const ::Opm::ParserKeywords::PARALLEL PARALLEL; + const ::Opm::ParserKeywords::PARAOPTS PARAOPTS; + const ::Opm::ParserKeywords::PARTTRAC PARTTRAC; + const ::Opm::ParserKeywords::PATHS PATHS; + const ::Opm::ParserKeywords::PBUB PBUB; + const ::Opm::ParserKeywords::PBVD PBVD; + const ::Opm::ParserKeywords::PCG PCG; + const ::Opm::ParserKeywords::PCG32D PCG32D; + const ::Opm::ParserKeywords::PCW PCW; + const ::Opm::ParserKeywords::PCW32D PCW32D; + const ::Opm::ParserKeywords::PDEW PDEW; + const ::Opm::ParserKeywords::PDVD PDVD; + const ::Opm::ParserKeywords::PEBI PEBI; + const ::Opm::ParserKeywords::PECOEFS PECOEFS; + const ::Opm::ParserKeywords::PEDIMS PEDIMS; + const ::Opm::ParserKeywords::PEGTABX PEGTABX; + const ::Opm::ParserKeywords::PEKTABX PEKTABX; + const ::Opm::ParserKeywords::PENUM PENUM; + const ::Opm::ParserKeywords::PERFORMANCE_PROBE PERFORMANCE_PROBE; + const ::Opm::ParserKeywords::PERMAVE PERMAVE; + const ::Opm::ParserKeywords::PERMFACT PERMFACT; + const ::Opm::ParserKeywords::PERMJFUN PERMJFUN; + const ::Opm::ParserKeywords::PERMR PERMR; + const ::Opm::ParserKeywords::PERMTHT PERMTHT; + const ::Opm::ParserKeywords::PERMX PERMX; + const ::Opm::ParserKeywords::PERMXY PERMXY; + const ::Opm::ParserKeywords::PERMY PERMY; + const ::Opm::ParserKeywords::PERMYZ PERMYZ; + const ::Opm::ParserKeywords::PERMZ PERMZ; + const ::Opm::ParserKeywords::PERMZX PERMZX; + const ::Opm::ParserKeywords::PETGRID PETGRID; + const ::Opm::ParserKeywords::PETOPTS PETOPTS; + const ::Opm::ParserKeywords::PICOND PICOND; + const ::Opm::ParserKeywords::PIMTDIMS PIMTDIMS; + const ::Opm::ParserKeywords::PIMULTAB PIMULTAB; + const ::Opm::ParserKeywords::PINCH PINCH; + const ::Opm::ParserKeywords::PINCHNUM PINCHNUM; + const ::Opm::ParserKeywords::PINCHOUT PINCHOUT; + const ::Opm::ParserKeywords::PINCHREG PINCHREG; + const ::Opm::ParserKeywords::PINCHXY PINCHXY; + const ::Opm::ParserKeywords::PINTDIMS PINTDIMS; + const ::Opm::ParserKeywords::PLMIXNUM PLMIXNUM; + const ::Opm::ParserKeywords::PLMIXPAR PLMIXPAR; + const ::Opm::ParserKeywords::PLYADS PLYADS; + const ::Opm::ParserKeywords::PLYADSS PLYADSS; + const ::Opm::ParserKeywords::PLYATEMP PLYATEMP; + const ::Opm::ParserKeywords::PLYCAMAX PLYCAMAX; + const ::Opm::ParserKeywords::PLYDHFLF PLYDHFLF; + const ::Opm::ParserKeywords::PLYESAL PLYESAL; + const ::Opm::ParserKeywords::PLYKRRF PLYKRRF; + const ::Opm::ParserKeywords::PLYMAX PLYMAX; + const ::Opm::ParserKeywords::PLYMWINJ PLYMWINJ; + const ::Opm::ParserKeywords::PLYOPTS PLYOPTS; + const ::Opm::ParserKeywords::PLYRMDEN PLYRMDEN; + const ::Opm::ParserKeywords::PLYROCK PLYROCK; + const ::Opm::ParserKeywords::PLYROCKM PLYROCKM; + const ::Opm::ParserKeywords::PLYSHEAR PLYSHEAR; + const ::Opm::ParserKeywords::PLYSHLOG PLYSHLOG; + const ::Opm::ParserKeywords::PLYTRRF PLYTRRF; + const ::Opm::ParserKeywords::PLYTRRFA PLYTRRFA; + const ::Opm::ParserKeywords::PLYVISC PLYVISC; + const ::Opm::ParserKeywords::PLYVISCS PLYVISCS; + const ::Opm::ParserKeywords::PLYVISCT PLYVISCT; + const ::Opm::ParserKeywords::PLYVMH PLYVMH; + const ::Opm::ParserKeywords::PLYVSCST PLYVSCST; + const ::Opm::ParserKeywords::PMAX PMAX; + const ::Opm::ParserKeywords::PMISC PMISC; + const ::Opm::ParserKeywords::POLYMER POLYMER; + const ::Opm::ParserKeywords::POLYMW POLYMW; + const ::Opm::ParserKeywords::PORO PORO; + const ::Opm::ParserKeywords::PORV PORV; + const ::Opm::ParserKeywords::PPCWMAX PPCWMAX; + const ::Opm::ParserKeywords::PRECSALT PRECSALT; + const ::Opm::ParserKeywords::PREF PREF; + const ::Opm::ParserKeywords::PREFS PREFS; + const ::Opm::ParserKeywords::PRESSURE PRESSURE; + const ::Opm::ParserKeywords::PRIORITY PRIORITY; + const ::Opm::ParserKeywords::PROPS PROPS; + const ::Opm::ParserKeywords::PRORDER PRORDER; + const ::Opm::ParserKeywords::PRVD PRVD; + const ::Opm::ParserKeywords::PSTEADY PSTEADY; + const ::Opm::ParserKeywords::PSWRG PSWRG; + const ::Opm::ParserKeywords::PSWRO PSWRO; + const ::Opm::ParserKeywords::PVCDO PVCDO; + const ::Opm::ParserKeywords::PVCO PVCO; + const ::Opm::ParserKeywords::PVDG PVDG; + const ::Opm::ParserKeywords::PVDO PVDO; + const ::Opm::ParserKeywords::PVDS PVDS; + const ::Opm::ParserKeywords::PVTG PVTG; + const ::Opm::ParserKeywords::PVTGW PVTGW; + const ::Opm::ParserKeywords::PVTGWO PVTGWO; + const ::Opm::ParserKeywords::PVTNUM PVTNUM; + const ::Opm::ParserKeywords::PVTO PVTO; + const ::Opm::ParserKeywords::PVTSOL PVTSOL; + const ::Opm::ParserKeywords::PVTW PVTW; + const ::Opm::ParserKeywords::PVTWSALT PVTWSALT; + const ::Opm::ParserKeywords::PVT_M PVT_M; + const ::Opm::ParserKeywords::PVZG PVZG; + const ::Opm::ParserKeywords::PYACTION PYACTION; + const ::Opm::ParserKeywords::PYINPUT PYINPUT; + const ::Opm::ParserKeywords::QDRILL QDRILL; + const ::Opm::ParserKeywords::QHRATING QHRATING; + const ::Opm::ParserKeywords::QMOBIL QMOBIL; + const ::Opm::ParserKeywords::RADFIN RADFIN; + const ::Opm::ParserKeywords::RADFIN4 RADFIN4; + const ::Opm::ParserKeywords::RADIAL RADIAL; + const ::Opm::ParserKeywords::RAINFALL RAINFALL; + const ::Opm::ParserKeywords::RBEDCONT RBEDCONT; + const ::Opm::ParserKeywords::RCMASTS RCMASTS; + const ::Opm::ParserKeywords::REACHES REACHES; + const ::Opm::ParserKeywords::READDATA READDATA; + const ::Opm::ParserKeywords::REFINE REFINE; + const ::Opm::ParserKeywords::REGDIMS REGDIMS; + const ::Opm::ParserKeywords::REGION2REGION_PROBE REGION2REGION_PROBE; + const ::Opm::ParserKeywords::REGION2REGION_PROBE_E300 REGION2REGION_PROBE_E300; + const ::Opm::ParserKeywords::REGIONS REGIONS; + const ::Opm::ParserKeywords::REGION_PROBE REGION_PROBE; + const ::Opm::ParserKeywords::RESIDNUM RESIDNUM; + const ::Opm::ParserKeywords::RESTART RESTART; + const ::Opm::ParserKeywords::RESVNUM RESVNUM; + const ::Opm::ParserKeywords::RHO RHO; + const ::Opm::ParserKeywords::RIVDEBUG RIVDEBUG; + const ::Opm::ParserKeywords::RIVERSYS RIVERSYS; + const ::Opm::ParserKeywords::RIVRDIMS RIVRDIMS; + const ::Opm::ParserKeywords::RIVRPROP RIVRPROP; + const ::Opm::ParserKeywords::RIVRXSEC RIVRXSEC; + const ::Opm::ParserKeywords::RIVSALT RIVSALT; + const ::Opm::ParserKeywords::RIVTRACE RIVTRACE; + const ::Opm::ParserKeywords::RKTRMDIR RKTRMDIR; + const ::Opm::ParserKeywords::ROCK ROCK; + const ::Opm::ParserKeywords::ROCK2D ROCK2D; + const ::Opm::ParserKeywords::ROCK2DTR ROCK2DTR; + const ::Opm::ParserKeywords::ROCKCOMP ROCKCOMP; + const ::Opm::ParserKeywords::ROCKFRAC ROCKFRAC; + const ::Opm::ParserKeywords::ROCKNUM ROCKNUM; + const ::Opm::ParserKeywords::ROCKOPTS ROCKOPTS; + const ::Opm::ParserKeywords::ROCKPAMA ROCKPAMA; + const ::Opm::ParserKeywords::ROCKTAB ROCKTAB; + const ::Opm::ParserKeywords::ROCKTABH ROCKTABH; + const ::Opm::ParserKeywords::ROCKTABW ROCKTABW; + const ::Opm::ParserKeywords::ROCKTHSG ROCKTHSG; + const ::Opm::ParserKeywords::ROCKTSIG ROCKTSIG; + const ::Opm::ParserKeywords::ROCKV ROCKV; + const ::Opm::ParserKeywords::ROCKWNOD ROCKWNOD; + const ::Opm::ParserKeywords::RPTCPL RPTCPL; + const ::Opm::ParserKeywords::RPTGRID RPTGRID; + const ::Opm::ParserKeywords::RPTGRIDL RPTGRIDL; + const ::Opm::ParserKeywords::RPTHMD RPTHMD; + const ::Opm::ParserKeywords::RPTHMG RPTHMG; + const ::Opm::ParserKeywords::RPTHMW RPTHMW; + const ::Opm::ParserKeywords::RPTINIT RPTINIT; + const ::Opm::ParserKeywords::RPTISOL RPTISOL; + const ::Opm::ParserKeywords::RPTONLY RPTONLY; + const ::Opm::ParserKeywords::RPTONLYO RPTONLYO; + const ::Opm::ParserKeywords::RPTPROPS RPTPROPS; + const ::Opm::ParserKeywords::RPTREGS RPTREGS; + const ::Opm::ParserKeywords::RPTRST RPTRST; + const ::Opm::ParserKeywords::RPTRUNSP RPTRUNSP; + const ::Opm::ParserKeywords::RPTSCHED RPTSCHED; + const ::Opm::ParserKeywords::RPTSMRY RPTSMRY; + const ::Opm::ParserKeywords::RPTSOL RPTSOL; + const ::Opm::ParserKeywords::RS RS; + const ::Opm::ParserKeywords::RSCONST RSCONST; + const ::Opm::ParserKeywords::RSCONSTT RSCONSTT; + const ::Opm::ParserKeywords::RSGI RSGI; + const ::Opm::ParserKeywords::RSSPEC RSSPEC; + const ::Opm::ParserKeywords::RSVD RSVD; + const ::Opm::ParserKeywords::RTEMP RTEMP; + const ::Opm::ParserKeywords::RTEMPA RTEMPA; + const ::Opm::ParserKeywords::RTEMPVD RTEMPVD; + const ::Opm::ParserKeywords::RUNSPEC RUNSPEC; + const ::Opm::ParserKeywords::RUNSUM RUNSUM; + const ::Opm::ParserKeywords::RV RV; + const ::Opm::ParserKeywords::RVCONST RVCONST; + const ::Opm::ParserKeywords::RVCONSTT RVCONSTT; + const ::Opm::ParserKeywords::RVGI RVGI; + const ::Opm::ParserKeywords::RVVD RVVD; + const ::Opm::ParserKeywords::RVW RVW; + const ::Opm::ParserKeywords::RWGSALT RWGSALT; + const ::Opm::ParserKeywords::SALINITY SALINITY; + const ::Opm::ParserKeywords::SALT SALT; + const ::Opm::ParserKeywords::SALTNODE SALTNODE; + const ::Opm::ParserKeywords::SALTP SALTP; + const ::Opm::ParserKeywords::SALTPVD SALTPVD; + const ::Opm::ParserKeywords::SALTREST SALTREST; + const ::Opm::ParserKeywords::SALTSOL SALTSOL; + const ::Opm::ParserKeywords::SALTVD SALTVD; + const ::Opm::ParserKeywords::SAMG SAMG; + const ::Opm::ParserKeywords::SATNUM SATNUM; + const ::Opm::ParserKeywords::SATOPTS SATOPTS; + const ::Opm::ParserKeywords::SAVE SAVE; + const ::Opm::ParserKeywords::SBIOF SBIOF; + const ::Opm::ParserKeywords::SCALC SCALC; + const ::Opm::ParserKeywords::SCALECRS SCALECRS; + const ::Opm::ParserKeywords::SCALELIM SCALELIM; + const ::Opm::ParserKeywords::SCDATAB SCDATAB; + const ::Opm::ParserKeywords::SCDETAB SCDETAB; + const ::Opm::ParserKeywords::SCDPDIMS SCDPDIMS; + const ::Opm::ParserKeywords::SCDPTAB SCDPTAB; + const ::Opm::ParserKeywords::SCDPTRAC SCDPTRAC; + const ::Opm::ParserKeywords::SCHEDULE SCHEDULE; + const ::Opm::ParserKeywords::SCVD SCVD; + const ::Opm::ParserKeywords::SDENSITY SDENSITY; + const ::Opm::ParserKeywords::SEGMENT_PROBE SEGMENT_PROBE; + const ::Opm::ParserKeywords::SEPARATE SEPARATE; + const ::Opm::ParserKeywords::SEPVALS SEPVALS; + const ::Opm::ParserKeywords::SFOAM SFOAM; + const ::Opm::ParserKeywords::SGAS SGAS; + const ::Opm::ParserKeywords::SGCR SGCR; + const ::Opm::ParserKeywords::SGCWMIS SGCWMIS; + const ::Opm::ParserKeywords::SGF32D SGF32D; + const ::Opm::ParserKeywords::SGFN SGFN; + const ::Opm::ParserKeywords::SGL SGL; + const ::Opm::ParserKeywords::SGLPC SGLPC; + const ::Opm::ParserKeywords::SGOF SGOF; + const ::Opm::ParserKeywords::SGOFLET SGOFLET; + const ::Opm::ParserKeywords::SGU SGU; + const ::Opm::ParserKeywords::SGWFN SGWFN; + const ::Opm::ParserKeywords::SHRATE SHRATE; + const ::Opm::ParserKeywords::SIGMA SIGMA; + const ::Opm::ParserKeywords::SIGMAGDV SIGMAGDV; + const ::Opm::ParserKeywords::SIGMATH SIGMATH; + const ::Opm::ParserKeywords::SIGMAV SIGMAV; + const ::Opm::ParserKeywords::SIMULATE SIMULATE; + const ::Opm::ParserKeywords::SKIP SKIP; + const ::Opm::ParserKeywords::SKIP100 SKIP100; + const ::Opm::ParserKeywords::SKIP300 SKIP300; + const ::Opm::ParserKeywords::SKIPREST SKIPREST; + const ::Opm::ParserKeywords::SKPRPOLY SKPRPOLY; + const ::Opm::ParserKeywords::SKPRWAT SKPRWAT; + const ::Opm::ParserKeywords::SKRO SKRO; + const ::Opm::ParserKeywords::SKRORG SKRORG; + const ::Opm::ParserKeywords::SKRORW SKRORW; + const ::Opm::ParserKeywords::SKRW SKRW; + const ::Opm::ParserKeywords::SKRWR SKRWR; + const ::Opm::ParserKeywords::SLAVES SLAVES; + const ::Opm::ParserKeywords::SLGOF SLGOF; + const ::Opm::ParserKeywords::SMICR SMICR; + const ::Opm::ParserKeywords::SMRYDIMS SMRYDIMS; + const ::Opm::ParserKeywords::SMULTX SMULTX; + const ::Opm::ParserKeywords::SMULTY SMULTY; + const ::Opm::ParserKeywords::SMULTZ SMULTZ; + const ::Opm::ParserKeywords::SOCRS SOCRS; + const ::Opm::ParserKeywords::SOF2 SOF2; + const ::Opm::ParserKeywords::SOF3 SOF3; + const ::Opm::ParserKeywords::SOF32D SOF32D; + const ::Opm::ParserKeywords::SOGCR SOGCR; + const ::Opm::ParserKeywords::SOIL SOIL; + const ::Opm::ParserKeywords::SOLUTION SOLUTION; + const ::Opm::ParserKeywords::SOLVCONC SOLVCONC; + const ::Opm::ParserKeywords::SOLVDIMS SOLVDIMS; + const ::Opm::ParserKeywords::SOLVDIRS SOLVDIRS; + const ::Opm::ParserKeywords::SOLVENT SOLVENT; + const ::Opm::ParserKeywords::SOLVFRAC SOLVFRAC; + const ::Opm::ParserKeywords::SOLVNUM SOLVNUM; + const ::Opm::ParserKeywords::SOMGAS SOMGAS; + const ::Opm::ParserKeywords::SOMWAT SOMWAT; + const ::Opm::ParserKeywords::SORWMIS SORWMIS; + const ::Opm::ParserKeywords::SOWCR SOWCR; + const ::Opm::ParserKeywords::SOXYG SOXYG; + const ::Opm::ParserKeywords::SPECGRID SPECGRID; + const ::Opm::ParserKeywords::SPECHEAT SPECHEAT; + const ::Opm::ParserKeywords::SPECROCK SPECROCK; + const ::Opm::ParserKeywords::SPIDER SPIDER; + const ::Opm::ParserKeywords::SPOLY SPOLY; + const ::Opm::ParserKeywords::SPOLYMW SPOLYMW; + const ::Opm::ParserKeywords::SSFN SSFN; + const ::Opm::ParserKeywords::SSGCR SSGCR; + const ::Opm::ParserKeywords::SSGL SSGL; + const ::Opm::ParserKeywords::SSOGCR SSOGCR; + const ::Opm::ParserKeywords::SSOL SSOL; + const ::Opm::ParserKeywords::SSOWCR SSOWCR; + const ::Opm::ParserKeywords::SSWCR SSWCR; + const ::Opm::ParserKeywords::SSWL SSWL; + const ::Opm::ParserKeywords::SSWU SSWU; + const ::Opm::ParserKeywords::START START; + const ::Opm::ParserKeywords::STCOND STCOND; + const ::Opm::ParserKeywords::STOG STOG; + const ::Opm::ParserKeywords::STONE STONE; + const ::Opm::ParserKeywords::STONE1 STONE1; + const ::Opm::ParserKeywords::STONE1EX STONE1EX; + const ::Opm::ParserKeywords::STONE2 STONE2; + const ::Opm::ParserKeywords::STOW STOW; + const ::Opm::ParserKeywords::STWG STWG; + const ::Opm::ParserKeywords::SUMMARY SUMMARY; + const ::Opm::ParserKeywords::SUMTHIN SUMTHIN; + const ::Opm::ParserKeywords::SUREA SUREA; + const ::Opm::ParserKeywords::SURF SURF; + const ::Opm::ParserKeywords::SURFACT SURFACT; + const ::Opm::ParserKeywords::SURFACTW SURFACTW; + const ::Opm::ParserKeywords::SURFADDW SURFADDW; + const ::Opm::ParserKeywords::SURFADS SURFADS; + const ::Opm::ParserKeywords::SURFCAPD SURFCAPD; + const ::Opm::ParserKeywords::SURFESAL SURFESAL; + const ::Opm::ParserKeywords::SURFNUM SURFNUM; + const ::Opm::ParserKeywords::SURFOPTS SURFOPTS; + const ::Opm::ParserKeywords::SURFROCK SURFROCK; + const ::Opm::ParserKeywords::SURFST SURFST; + const ::Opm::ParserKeywords::SURFSTES SURFSTES; + const ::Opm::ParserKeywords::SURFVISC SURFVISC; + const ::Opm::ParserKeywords::SURFWNUM SURFWNUM; + const ::Opm::ParserKeywords::SWAT SWAT; + const ::Opm::ParserKeywords::SWATINIT SWATINIT; + const ::Opm::ParserKeywords::SWCR SWCR; + const ::Opm::ParserKeywords::SWF32D SWF32D; + const ::Opm::ParserKeywords::SWFN SWFN; + const ::Opm::ParserKeywords::SWINGFAC SWINGFAC; + const ::Opm::ParserKeywords::SWL SWL; + const ::Opm::ParserKeywords::SWLPC SWLPC; + const ::Opm::ParserKeywords::SWOF SWOF; + const ::Opm::ParserKeywords::SWOFLET SWOFLET; + const ::Opm::ParserKeywords::SWU SWU; + const ::Opm::ParserKeywords::TABDIMS TABDIMS; + const ::Opm::ParserKeywords::TBLK TBLK; + const ::Opm::ParserKeywords::TEMP TEMP; + const ::Opm::ParserKeywords::TEMPI TEMPI; + const ::Opm::ParserKeywords::TEMPNODE TEMPNODE; + const ::Opm::ParserKeywords::TEMPTVD TEMPTVD; + const ::Opm::ParserKeywords::TEMPVD TEMPVD; + const ::Opm::ParserKeywords::THCGAS THCGAS; + const ::Opm::ParserKeywords::THCOIL THCOIL; + const ::Opm::ParserKeywords::THCONR THCONR; + const ::Opm::ParserKeywords::THCONSF THCONSF; + const ::Opm::ParserKeywords::THCROCK THCROCK; + const ::Opm::ParserKeywords::THCWATER THCWATER; + const ::Opm::ParserKeywords::THERMAL THERMAL; + const ::Opm::ParserKeywords::THPRES THPRES; + const ::Opm::ParserKeywords::THPRESFT THPRESFT; + const ::Opm::ParserKeywords::TIGHTEN TIGHTEN; + const ::Opm::ParserKeywords::TIGHTENP TIGHTENP; + const ::Opm::ParserKeywords::TIME TIME; + const ::Opm::ParserKeywords::TITLE TITLE; + const ::Opm::ParserKeywords::TLMIXPAR TLMIXPAR; + const ::Opm::ParserKeywords::TLPMIXPA TLPMIXPA; + const ::Opm::ParserKeywords::TNUM TNUM; + const ::Opm::ParserKeywords::TOLCRIT TOLCRIT; + const ::Opm::ParserKeywords::TOPS TOPS; + const ::Opm::ParserKeywords::TPAMEPS TPAMEPS; + const ::Opm::ParserKeywords::TPAMEPSS TPAMEPSS; + const ::Opm::ParserKeywords::TRACER TRACER; + const ::Opm::ParserKeywords::TRACERKM TRACERKM; + const ::Opm::ParserKeywords::TRACERKP TRACERKP; + const ::Opm::ParserKeywords::TRACERS TRACERS; + const ::Opm::ParserKeywords::TRACITVD TRACITVD; + const ::Opm::ParserKeywords::TRACTVD TRACTVD; + const ::Opm::ParserKeywords::TRADS TRADS; + const ::Opm::ParserKeywords::TRANGL TRANGL; + const ::Opm::ParserKeywords::TRANR TRANR; + const ::Opm::ParserKeywords::TRANTHT TRANTHT; + const ::Opm::ParserKeywords::TRANX TRANX; + const ::Opm::ParserKeywords::TRANY TRANY; + const ::Opm::ParserKeywords::TRANZ TRANZ; + const ::Opm::ParserKeywords::TRDCY TRDCY; + const ::Opm::ParserKeywords::TRDIF TRDIF; + const ::Opm::ParserKeywords::TRDIS TRDIS; + const ::Opm::ParserKeywords::TREF TREF; + const ::Opm::ParserKeywords::TREFS TREFS; + const ::Opm::ParserKeywords::TRKPF TRKPF; + const ::Opm::ParserKeywords::TRNHD TRNHD; + const ::Opm::ParserKeywords::TRPLPORO TRPLPORO; + const ::Opm::ParserKeywords::TRROCK TRROCK; + const ::Opm::ParserKeywords::TSTEP TSTEP; + const ::Opm::ParserKeywords::TUNING TUNING; + const ::Opm::ParserKeywords::TUNINGDP TUNINGDP; + const ::Opm::ParserKeywords::TUNINGH TUNINGH; + const ::Opm::ParserKeywords::TUNINGL TUNINGL; + const ::Opm::ParserKeywords::TUNINGS TUNINGS; + const ::Opm::ParserKeywords::TVDP TVDP; + const ::Opm::ParserKeywords::TZONE TZONE; + const ::Opm::ParserKeywords::UDADIMS UDADIMS; + const ::Opm::ParserKeywords::UDQ UDQ; + const ::Opm::ParserKeywords::UDQDIMS UDQDIMS; + const ::Opm::ParserKeywords::UDQPARAM UDQPARAM; + const ::Opm::ParserKeywords::UDT UDT; + const ::Opm::ParserKeywords::UDTDIMS UDTDIMS; + const ::Opm::ParserKeywords::UNCODHMD UNCODHMD; + const ::Opm::ParserKeywords::UNIFIN UNIFIN; + const ::Opm::ParserKeywords::UNIFOUT UNIFOUT; + const ::Opm::ParserKeywords::UNIFOUTS UNIFOUTS; + const ::Opm::ParserKeywords::UNIFSAVE UNIFSAVE; + const ::Opm::ParserKeywords::USECUPL USECUPL; + const ::Opm::ParserKeywords::USEFLUX USEFLUX; + const ::Opm::ParserKeywords::USENOFLO USENOFLO; + const ::Opm::ParserKeywords::VAPOIL VAPOIL; + const ::Opm::ParserKeywords::VAPPARS VAPPARS; + const ::Opm::ParserKeywords::VAPWAT VAPWAT; + const ::Opm::ParserKeywords::VDFLOW VDFLOW; + const ::Opm::ParserKeywords::VDFLOWR VDFLOWR; + const ::Opm::ParserKeywords::VE VE; + const ::Opm::ParserKeywords::VEDEBUG VEDEBUG; + const ::Opm::ParserKeywords::VEFIN VEFIN; + const ::Opm::ParserKeywords::VEFRAC VEFRAC; + const ::Opm::ParserKeywords::VEFRACP VEFRACP; + const ::Opm::ParserKeywords::VEFRACPV VEFRACPV; + const ::Opm::ParserKeywords::VEFRACV VEFRACV; + const ::Opm::ParserKeywords::VFPCHK VFPCHK; + const ::Opm::ParserKeywords::VFPIDIMS VFPIDIMS; + const ::Opm::ParserKeywords::VFPINJ VFPINJ; + const ::Opm::ParserKeywords::VFPPDIMS VFPPDIMS; + const ::Opm::ParserKeywords::VFPPROD VFPPROD; + const ::Opm::ParserKeywords::VFPTABL VFPTABL; + const ::Opm::ParserKeywords::VISAGE VISAGE; + const ::Opm::ParserKeywords::VISCD VISCD; + const ::Opm::ParserKeywords::VISCREF VISCREF; + const ::Opm::ParserKeywords::VISDATES VISDATES; + const ::Opm::ParserKeywords::VISOPTS VISOPTS; + const ::Opm::ParserKeywords::WAGHYSTR WAGHYSTR; + const ::Opm::ParserKeywords::WAITBAL WAITBAL; + const ::Opm::ParserKeywords::WALKALIN WALKALIN; + const ::Opm::ParserKeywords::WALQCALC WALQCALC; + const ::Opm::ParserKeywords::WAPI WAPI; + const ::Opm::ParserKeywords::WARN WARN; + const ::Opm::ParserKeywords::WATDENT WATDENT; + const ::Opm::ParserKeywords::WATER WATER; + const ::Opm::ParserKeywords::WATJT WATJT; + const ::Opm::ParserKeywords::WATVISCT WATVISCT; + const ::Opm::ParserKeywords::WBHGLR WBHGLR; + const ::Opm::ParserKeywords::WBOREVOL WBOREVOL; + const ::Opm::ParserKeywords::WCALCVAL WCALCVAL; + const ::Opm::ParserKeywords::WCONHIST WCONHIST; + const ::Opm::ParserKeywords::WCONINJ WCONINJ; + const ::Opm::ParserKeywords::WCONINJE WCONINJE; + const ::Opm::ParserKeywords::WCONINJH WCONINJH; + const ::Opm::ParserKeywords::WCONINJP WCONINJP; + const ::Opm::ParserKeywords::WCONPROD WCONPROD; + const ::Opm::ParserKeywords::WCUTBACK WCUTBACK; + const ::Opm::ParserKeywords::WCUTBACT WCUTBACT; + const ::Opm::ParserKeywords::WCYCLE WCYCLE; + const ::Opm::ParserKeywords::WDFAC WDFAC; + const ::Opm::ParserKeywords::WDFACCOR WDFACCOR; + const ::Opm::ParserKeywords::WDRILPRI WDRILPRI; + const ::Opm::ParserKeywords::WDRILRES WDRILRES; + const ::Opm::ParserKeywords::WDRILTIM WDRILTIM; + const ::Opm::ParserKeywords::WECON WECON; + const ::Opm::ParserKeywords::WECONINJ WECONINJ; + const ::Opm::ParserKeywords::WECONT WECONT; + const ::Opm::ParserKeywords::WEFAC WEFAC; + const ::Opm::ParserKeywords::WELCNTL WELCNTL; + const ::Opm::ParserKeywords::WELDEBUG WELDEBUG; + const ::Opm::ParserKeywords::WELDRAW WELDRAW; + const ::Opm::ParserKeywords::WELEVNT WELEVNT; + const ::Opm::ParserKeywords::WELLDIMS WELLDIMS; + const ::Opm::ParserKeywords::WELL_COMPLETION_PROBE WELL_COMPLETION_PROBE; + const ::Opm::ParserKeywords::WELL_PROBE WELL_PROBE; + const ::Opm::ParserKeywords::WELMOVEL WELMOVEL; + const ::Opm::ParserKeywords::WELOPEN WELOPEN; + const ::Opm::ParserKeywords::WELOPENL WELOPENL; + const ::Opm::ParserKeywords::WELPI WELPI; + const ::Opm::ParserKeywords::WELPRI WELPRI; + const ::Opm::ParserKeywords::WELSEGS WELSEGS; + const ::Opm::ParserKeywords::WELSOMIN WELSOMIN; + const ::Opm::ParserKeywords::WELSPECL WELSPECL; + const ::Opm::ParserKeywords::WELSPECS WELSPECS; + const ::Opm::ParserKeywords::WELTARG WELTARG; + const ::Opm::ParserKeywords::WFOAM WFOAM; + const ::Opm::ParserKeywords::WFRICSEG WFRICSEG; + const ::Opm::ParserKeywords::WFRICSGL WFRICSGL; + const ::Opm::ParserKeywords::WFRICTN WFRICTN; + const ::Opm::ParserKeywords::WFRICTNL WFRICTNL; + const ::Opm::ParserKeywords::WGASPROD WGASPROD; + const ::Opm::ParserKeywords::WGORPEN WGORPEN; + const ::Opm::ParserKeywords::WGRUPCON WGRUPCON; + const ::Opm::ParserKeywords::WH2NUM WH2NUM; + const ::Opm::ParserKeywords::WH3NUM WH3NUM; + const ::Opm::ParserKeywords::WHEDREFD WHEDREFD; + const ::Opm::ParserKeywords::WHISTCTL WHISTCTL; + const ::Opm::ParserKeywords::WHTEMP WHTEMP; + const ::Opm::ParserKeywords::WINJMULT WINJMULT; + const ::Opm::ParserKeywords::WINJTEMP WINJTEMP; + const ::Opm::ParserKeywords::WLIFT WLIFT; + const ::Opm::ParserKeywords::WLIFTOPT WLIFTOPT; + const ::Opm::ParserKeywords::WLIMTOL WLIMTOL; + const ::Opm::ParserKeywords::WLIST WLIST; + const ::Opm::ParserKeywords::WLISTARG WLISTARG; + const ::Opm::ParserKeywords::WLISTNAM WLISTNAM; + const ::Opm::ParserKeywords::WMICP WMICP; + const ::Opm::ParserKeywords::WNETCTRL WNETCTRL; + const ::Opm::ParserKeywords::WNETDP WNETDP; + const ::Opm::ParserKeywords::WORKLIM WORKLIM; + const ::Opm::ParserKeywords::WORKTHP WORKTHP; + const ::Opm::ParserKeywords::WPAVE WPAVE; + const ::Opm::ParserKeywords::WPAVEDEP WPAVEDEP; + const ::Opm::ParserKeywords::WPIMULT WPIMULT; + const ::Opm::ParserKeywords::WPIMULTL WPIMULTL; + const ::Opm::ParserKeywords::WPITAB WPITAB; + const ::Opm::ParserKeywords::WPLUG WPLUG; + const ::Opm::ParserKeywords::WPMITAB WPMITAB; + const ::Opm::ParserKeywords::WPOLYMER WPOLYMER; + const ::Opm::ParserKeywords::WPOLYRED WPOLYRED; + const ::Opm::ParserKeywords::WPOTCALC WPOTCALC; + const ::Opm::ParserKeywords::WREGROUP WREGROUP; + const ::Opm::ParserKeywords::WRFT WRFT; + const ::Opm::ParserKeywords::WRFTPLT WRFTPLT; + const ::Opm::ParserKeywords::WSALT WSALT; + const ::Opm::ParserKeywords::WSCCLEAN WSCCLEAN; + const ::Opm::ParserKeywords::WSCCLENL WSCCLENL; + const ::Opm::ParserKeywords::WSCTAB WSCTAB; + const ::Opm::ParserKeywords::WSEGAICD WSEGAICD; + const ::Opm::ParserKeywords::WSEGDFIN WSEGDFIN; + const ::Opm::ParserKeywords::WSEGDFMD WSEGDFMD; + const ::Opm::ParserKeywords::WSEGDFPA WSEGDFPA; + const ::Opm::ParserKeywords::WSEGDIMS WSEGDIMS; + const ::Opm::ParserKeywords::WSEGEXSS WSEGEXSS; + const ::Opm::ParserKeywords::WSEGFLIM WSEGFLIM; + const ::Opm::ParserKeywords::WSEGFMOD WSEGFMOD; + const ::Opm::ParserKeywords::WSEGINIT WSEGINIT; + const ::Opm::ParserKeywords::WSEGITER WSEGITER; + const ::Opm::ParserKeywords::WSEGLABY WSEGLABY; + const ::Opm::ParserKeywords::WSEGLINK WSEGLINK; + const ::Opm::ParserKeywords::WSEGMULT WSEGMULT; + const ::Opm::ParserKeywords::WSEGPROP WSEGPROP; + const ::Opm::ParserKeywords::WSEGSEP WSEGSEP; + const ::Opm::ParserKeywords::WSEGSICD WSEGSICD; + const ::Opm::ParserKeywords::WSEGSOLV WSEGSOLV; + const ::Opm::ParserKeywords::WSEGTABL WSEGTABL; + const ::Opm::ParserKeywords::WSEGVALV WSEGVALV; + const ::Opm::ParserKeywords::WSKPTAB WSKPTAB; + const ::Opm::ParserKeywords::WSOLVENT WSOLVENT; + const ::Opm::ParserKeywords::WSURFACT WSURFACT; + const ::Opm::ParserKeywords::WTADD WTADD; + const ::Opm::ParserKeywords::WTEMP WTEMP; + const ::Opm::ParserKeywords::WTEMPQ WTEMPQ; + const ::Opm::ParserKeywords::WTEST WTEST; + const ::Opm::ParserKeywords::WTHPMAX WTHPMAX; + const ::Opm::ParserKeywords::WTMULT WTMULT; + const ::Opm::ParserKeywords::WTRACER WTRACER; + const ::Opm::ParserKeywords::WVFPDP WVFPDP; + const ::Opm::ParserKeywords::WVFPEXP WVFPEXP; + const ::Opm::ParserKeywords::WWPAVE WWPAVE; + const ::Opm::ParserKeywords::ZCORN ZCORN; + const ::Opm::ParserKeywords::ZFACT1 ZFACT1; + const ::Opm::ParserKeywords::ZFACT1S ZFACT1S; + const ::Opm::ParserKeywords::ZFACTOR ZFACTOR; + const ::Opm::ParserKeywords::ZFACTORS ZFACTORS; + const ::Opm::ParserKeywords::ZIPP2OFF ZIPP2OFF; + const ::Opm::ParserKeywords::ZIPPY2 ZIPPY2; + const ::Opm::ParserKeyword& get_ACTDIMS() { return this->ACTDIMS; }; + const ::Opm::ParserKeyword& get_ACTION() { return this->ACTION; }; + const ::Opm::ParserKeyword& get_ACTIONG() { return this->ACTIONG; }; + const ::Opm::ParserKeyword& get_ACTIONR() { return this->ACTIONR; }; + const ::Opm::ParserKeyword& get_ACTIONS() { return this->ACTIONS; }; + const ::Opm::ParserKeyword& get_ACTIONW() { return this->ACTIONW; }; + const ::Opm::ParserKeyword& get_ACTIONX() { return this->ACTIONX; }; + const ::Opm::ParserKeyword& get_ACTNUM() { return this->ACTNUM; }; + const ::Opm::ParserKeyword& get_ACTPARAM() { return this->ACTPARAM; }; + const ::Opm::ParserKeyword& get_ADD() { return this->ADD; }; + const ::Opm::ParserKeyword& get_ADDREG() { return this->ADDREG; }; + const ::Opm::ParserKeyword& get_ADDZCORN() { return this->ADDZCORN; }; + const ::Opm::ParserKeyword& get_ADSALNOD() { return this->ADSALNOD; }; + const ::Opm::ParserKeyword& get_ADSORP() { return this->ADSORP; }; + const ::Opm::ParserKeyword& get_AITS() { return this->AITS; }; + const ::Opm::ParserKeyword& get_AITSOFF() { return this->AITSOFF; }; + const ::Opm::ParserKeyword& get_ALKADS() { return this->ALKADS; }; + const ::Opm::ParserKeyword& get_ALKALINE() { return this->ALKALINE; }; + const ::Opm::ParserKeyword& get_ALKROCK() { return this->ALKROCK; }; + const ::Opm::ParserKeyword& get_ALL() { return this->ALL; }; + const ::Opm::ParserKeyword& get_ALPOLADS() { return this->ALPOLADS; }; + const ::Opm::ParserKeyword& get_ALSURFAD() { return this->ALSURFAD; }; + const ::Opm::ParserKeyword& get_ALSURFST() { return this->ALSURFST; }; + const ::Opm::ParserKeyword& get_AMALGAM() { return this->AMALGAM; }; + const ::Opm::ParserKeyword& get_API() { return this->API; }; + const ::Opm::ParserKeyword& get_APIGROUP() { return this->APIGROUP; }; + const ::Opm::ParserKeyword& get_APILIM() { return this->APILIM; }; + const ::Opm::ParserKeyword& get_APIVD() { return this->APIVD; }; + const ::Opm::ParserKeyword& get_AQANCONL() { return this->AQANCONL; }; + const ::Opm::ParserKeyword& get_AQANNC() { return this->AQANNC; }; + const ::Opm::ParserKeyword& get_AQANTRC() { return this->AQANTRC; }; + const ::Opm::ParserKeyword& get_AQUALIST() { return this->AQUALIST; }; + const ::Opm::ParserKeyword& get_AQUANCON() { return this->AQUANCON; }; + const ::Opm::ParserKeyword& get_AQUCHGAS() { return this->AQUCHGAS; }; + const ::Opm::ParserKeyword& get_AQUCHWAT() { return this->AQUCHWAT; }; + const ::Opm::ParserKeyword& get_AQUCON() { return this->AQUCON; }; + const ::Opm::ParserKeyword& get_AQUCT() { return this->AQUCT; }; + const ::Opm::ParserKeyword& get_AQUCWFAC() { return this->AQUCWFAC; }; + const ::Opm::ParserKeyword& get_AQUDIMS() { return this->AQUDIMS; }; + const ::Opm::ParserKeyword& get_AQUFET() { return this->AQUFET; }; + const ::Opm::ParserKeyword& get_AQUFETP() { return this->AQUFETP; }; + const ::Opm::ParserKeyword& get_AQUFLUX() { return this->AQUFLUX; }; + const ::Opm::ParserKeyword& get_AQUIFER_PROBE_ANALYTIC() { return this->AQUIFER_PROBE_ANALYTIC; }; + const ::Opm::ParserKeyword& get_AQUIFER_PROBE_ANALYTIC_NAMED() { return this->AQUIFER_PROBE_ANALYTIC_NAMED; }; + const ::Opm::ParserKeyword& get_AQUIFER_PROBE_NUMERIC() { return this->AQUIFER_PROBE_NUMERIC; }; + const ::Opm::ParserKeyword& get_AQUNNC() { return this->AQUNNC; }; + const ::Opm::ParserKeyword& get_AQUNUM() { return this->AQUNUM; }; + const ::Opm::ParserKeyword& get_AQUTAB() { return this->AQUTAB; }; + const ::Opm::ParserKeyword& get_AUTOCOAR() { return this->AUTOCOAR; }; + const ::Opm::ParserKeyword& get_AUTOREF() { return this->AUTOREF; }; + const ::Opm::ParserKeyword& get_BC() { return this->BC; }; + const ::Opm::ParserKeyword& get_BDENSITY() { return this->BDENSITY; }; + const ::Opm::ParserKeyword& get_BGGI() { return this->BGGI; }; + const ::Opm::ParserKeyword& get_BIGMODEL() { return this->BIGMODEL; }; + const ::Opm::ParserKeyword& get_BLACKOIL() { return this->BLACKOIL; }; + const ::Opm::ParserKeyword& get_BLOCK_PROBE() { return this->BLOCK_PROBE; }; + const ::Opm::ParserKeyword& get_BLOCK_PROBE300() { return this->BLOCK_PROBE300; }; + const ::Opm::ParserKeyword& get_BOGI() { return this->BOGI; }; + const ::Opm::ParserKeyword& get_BOUNDARY() { return this->BOUNDARY; }; + const ::Opm::ParserKeyword& get_BOX() { return this->BOX; }; + const ::Opm::ParserKeyword& get_BPARA() { return this->BPARA; }; + const ::Opm::ParserKeyword& get_BPIDIMS() { return this->BPIDIMS; }; + const ::Opm::ParserKeyword& get_BRANPROP() { return this->BRANPROP; }; + const ::Opm::ParserKeyword& get_BRINE() { return this->BRINE; }; + const ::Opm::ParserKeyword& get_BTOBALFA() { return this->BTOBALFA; }; + const ::Opm::ParserKeyword& get_BTOBALFV() { return this->BTOBALFV; }; + const ::Opm::ParserKeyword& get_CALTRAC() { return this->CALTRAC; }; + const ::Opm::ParserKeyword& get_CARFIN() { return this->CARFIN; }; + const ::Opm::ParserKeyword& get_CART() { return this->CART; }; + const ::Opm::ParserKeyword& get_CBMOPTS() { return this->CBMOPTS; }; + const ::Opm::ParserKeyword& get_CECON() { return this->CECON; }; + const ::Opm::ParserKeyword& get_CECONT() { return this->CECONT; }; + const ::Opm::ParserKeyword& get_CIRCLE() { return this->CIRCLE; }; + const ::Opm::ParserKeyword& get_CO2STOR() { return this->CO2STOR; }; + const ::Opm::ParserKeyword& get_CO2STORE() { return this->CO2STORE; }; + const ::Opm::ParserKeyword& get_COAL() { return this->COAL; }; + const ::Opm::ParserKeyword& get_COALADS() { return this->COALADS; }; + const ::Opm::ParserKeyword& get_COALNUM() { return this->COALNUM; }; + const ::Opm::ParserKeyword& get_COALPP() { return this->COALPP; }; + const ::Opm::ParserKeyword& get_COARSEN() { return this->COARSEN; }; + const ::Opm::ParserKeyword& get_COLLAPSE() { return this->COLLAPSE; }; + const ::Opm::ParserKeyword& get_COLUMNS() { return this->COLUMNS; }; + const ::Opm::ParserKeyword& get_COMPDAT() { return this->COMPDAT; }; + const ::Opm::ParserKeyword& get_COMPDATX() { return this->COMPDATX; }; + const ::Opm::ParserKeyword& get_COMPFLSH() { return this->COMPFLSH; }; + const ::Opm::ParserKeyword& get_COMPIMB() { return this->COMPIMB; }; + const ::Opm::ParserKeyword& get_COMPINJK() { return this->COMPINJK; }; + const ::Opm::ParserKeyword& get_COMPLMPL() { return this->COMPLMPL; }; + const ::Opm::ParserKeyword& get_COMPLUMP() { return this->COMPLUMP; }; + const ::Opm::ParserKeyword& get_COMPOFF() { return this->COMPOFF; }; + const ::Opm::ParserKeyword& get_COMPORD() { return this->COMPORD; }; + const ::Opm::ParserKeyword& get_COMPRIV() { return this->COMPRIV; }; + const ::Opm::ParserKeyword& get_COMPRP() { return this->COMPRP; }; + const ::Opm::ParserKeyword& get_COMPRPL() { return this->COMPRPL; }; + const ::Opm::ParserKeyword& get_COMPS() { return this->COMPS; }; + const ::Opm::ParserKeyword& get_COMPSEGL() { return this->COMPSEGL; }; + const ::Opm::ParserKeyword& get_COMPSEGS() { return this->COMPSEGS; }; + const ::Opm::ParserKeyword& get_COMPVE() { return this->COMPVE; }; + const ::Opm::ParserKeyword& get_COMPVEL() { return this->COMPVEL; }; + const ::Opm::ParserKeyword& get_CONNECTION_PROBE() { return this->CONNECTION_PROBE; }; + const ::Opm::ParserKeyword& get_COORD() { return this->COORD; }; + const ::Opm::ParserKeyword& get_COORDSYS() { return this->COORDSYS; }; + const ::Opm::ParserKeyword& get_COPY() { return this->COPY; }; + const ::Opm::ParserKeyword& get_COPYBOX() { return this->COPYBOX; }; + const ::Opm::ParserKeyword& get_COPYREG() { return this->COPYREG; }; + const ::Opm::ParserKeyword& get_CPIFACT() { return this->CPIFACT; }; + const ::Opm::ParserKeyword& get_CPIFACTL() { return this->CPIFACTL; }; + const ::Opm::ParserKeyword& get_CPR() { return this->CPR; }; + const ::Opm::ParserKeyword& get_CREF() { return this->CREF; }; + const ::Opm::ParserKeyword& get_CREFS() { return this->CREFS; }; + const ::Opm::ParserKeyword& get_CRITPERM() { return this->CRITPERM; }; + const ::Opm::ParserKeyword& get_CSKIN() { return this->CSKIN; }; + const ::Opm::ParserKeyword& get_DATE() { return this->DATE; }; + const ::Opm::ParserKeyword& get_DATES() { return this->DATES; }; + const ::Opm::ParserKeyword& get_DATUM() { return this->DATUM; }; + const ::Opm::ParserKeyword& get_DATUMR() { return this->DATUMR; }; + const ::Opm::ParserKeyword& get_DATUMRX() { return this->DATUMRX; }; + const ::Opm::ParserKeyword& get_DCQDEFN() { return this->DCQDEFN; }; + const ::Opm::ParserKeyword& get_DEBUG_() { return this->DEBUG_; }; + const ::Opm::ParserKeyword& get_DELAYACT() { return this->DELAYACT; }; + const ::Opm::ParserKeyword& get_DENSITY() { return this->DENSITY; }; + const ::Opm::ParserKeyword& get_DEPTH() { return this->DEPTH; }; + const ::Opm::ParserKeyword& get_DEPTHTAB() { return this->DEPTHTAB; }; + const ::Opm::ParserKeyword& get_DEPTHZ() { return this->DEPTHZ; }; + const ::Opm::ParserKeyword& get_DIAGDISP() { return this->DIAGDISP; }; + const ::Opm::ParserKeyword& get_DIFF() { return this->DIFF; }; + const ::Opm::ParserKeyword& get_DIFFC() { return this->DIFFC; }; + const ::Opm::ParserKeyword& get_DIFFCOAL() { return this->DIFFCOAL; }; + const ::Opm::ParserKeyword& get_DIFFDP() { return this->DIFFDP; }; + const ::Opm::ParserKeyword& get_DIFFMMF() { return this->DIFFMMF; }; + const ::Opm::ParserKeyword& get_DIFFMR() { return this->DIFFMR; }; + const ::Opm::ParserKeyword& get_DIFFMTHT() { return this->DIFFMTHT; }; + const ::Opm::ParserKeyword& get_DIFFMX() { return this->DIFFMX; }; + const ::Opm::ParserKeyword& get_DIFFMY() { return this->DIFFMY; }; + const ::Opm::ParserKeyword& get_DIFFMZ() { return this->DIFFMZ; }; + const ::Opm::ParserKeyword& get_DIFFR() { return this->DIFFR; }; + const ::Opm::ParserKeyword& get_DIFFTHT() { return this->DIFFTHT; }; + const ::Opm::ParserKeyword& get_DIFFUSE() { return this->DIFFUSE; }; + const ::Opm::ParserKeyword& get_DIFFX() { return this->DIFFX; }; + const ::Opm::ParserKeyword& get_DIFFY() { return this->DIFFY; }; + const ::Opm::ParserKeyword& get_DIFFZ() { return this->DIFFZ; }; + const ::Opm::ParserKeyword& get_DIMENS() { return this->DIMENS; }; + const ::Opm::ParserKeyword& get_DIMPES() { return this->DIMPES; }; + const ::Opm::ParserKeyword& get_DIMPLICT() { return this->DIMPLICT; }; + const ::Opm::ParserKeyword& get_DISGAS() { return this->DISGAS; }; + const ::Opm::ParserKeyword& get_DISPDIMS() { return this->DISPDIMS; }; + const ::Opm::ParserKeyword& get_DISPERSE() { return this->DISPERSE; }; + const ::Opm::ParserKeyword& get_DOMAINS() { return this->DOMAINS; }; + const ::Opm::ParserKeyword& get_DPGRID() { return this->DPGRID; }; + const ::Opm::ParserKeyword& get_DPKRMOD() { return this->DPKRMOD; }; + const ::Opm::ParserKeyword& get_DPNUM() { return this->DPNUM; }; + const ::Opm::ParserKeyword& get_DR() { return this->DR; }; + const ::Opm::ParserKeyword& get_DREF() { return this->DREF; }; + const ::Opm::ParserKeyword& get_DREFS() { return this->DREFS; }; + const ::Opm::ParserKeyword& get_DRILPRI() { return this->DRILPRI; }; + const ::Opm::ParserKeyword& get_DRSDT() { return this->DRSDT; }; + const ::Opm::ParserKeyword& get_DRSDTCON() { return this->DRSDTCON; }; + const ::Opm::ParserKeyword& get_DRSDTR() { return this->DRSDTR; }; + const ::Opm::ParserKeyword& get_DRV() { return this->DRV; }; + const ::Opm::ParserKeyword& get_DRVDT() { return this->DRVDT; }; + const ::Opm::ParserKeyword& get_DRVDTR() { return this->DRVDTR; }; + const ::Opm::ParserKeyword& get_DSPDEINT() { return this->DSPDEINT; }; + const ::Opm::ParserKeyword& get_DTHETA() { return this->DTHETA; }; + const ::Opm::ParserKeyword& get_DTHETAV() { return this->DTHETAV; }; + const ::Opm::ParserKeyword& get_DUALPERM() { return this->DUALPERM; }; + const ::Opm::ParserKeyword& get_DUALPORO() { return this->DUALPORO; }; + const ::Opm::ParserKeyword& get_DUMPCUPL() { return this->DUMPCUPL; }; + const ::Opm::ParserKeyword& get_DUMPFLUX() { return this->DUMPFLUX; }; + const ::Opm::ParserKeyword& get_DX() { return this->DX; }; + const ::Opm::ParserKeyword& get_DXV() { return this->DXV; }; + const ::Opm::ParserKeyword& get_DY() { return this->DY; }; + const ::Opm::ParserKeyword& get_DYNAMICR() { return this->DYNAMICR; }; + const ::Opm::ParserKeyword& get_DYNRDIMS() { return this->DYNRDIMS; }; + const ::Opm::ParserKeyword& get_DYV() { return this->DYV; }; + const ::Opm::ParserKeyword& get_DZ() { return this->DZ; }; + const ::Opm::ParserKeyword& get_DZMATRIX() { return this->DZMATRIX; }; + const ::Opm::ParserKeyword& get_DZMTRX() { return this->DZMTRX; }; + const ::Opm::ParserKeyword& get_DZMTRXV() { return this->DZMTRXV; }; + const ::Opm::ParserKeyword& get_DZNET() { return this->DZNET; }; + const ::Opm::ParserKeyword& get_DZV() { return this->DZV; }; + const ::Opm::ParserKeyword& get_ECHO() { return this->ECHO; }; + const ::Opm::ParserKeyword& get_ECLMC() { return this->ECLMC; }; + const ::Opm::ParserKeyword& get_EDIT() { return this->EDIT; }; + const ::Opm::ParserKeyword& get_EDITNNC() { return this->EDITNNC; }; + const ::Opm::ParserKeyword& get_EDITNNCR() { return this->EDITNNCR; }; + const ::Opm::ParserKeyword& get_EHYSTR() { return this->EHYSTR; }; + const ::Opm::ParserKeyword& get_EHYSTRR() { return this->EHYSTRR; }; + const ::Opm::ParserKeyword& get_END() { return this->END; }; + const ::Opm::ParserKeyword& get_ENDACTIO() { return this->ENDACTIO; }; + const ::Opm::ParserKeyword& get_ENDBOX() { return this->ENDBOX; }; + const ::Opm::ParserKeyword& get_ENDDYN() { return this->ENDDYN; }; + const ::Opm::ParserKeyword& get_ENDFIN() { return this->ENDFIN; }; + const ::Opm::ParserKeyword& get_ENDINC() { return this->ENDINC; }; + const ::Opm::ParserKeyword& get_ENDNUM() { return this->ENDNUM; }; + const ::Opm::ParserKeyword& get_ENDPOINT_SPECIFIERS() { return this->ENDPOINT_SPECIFIERS; }; + const ::Opm::ParserKeyword& get_ENDSCALE() { return this->ENDSCALE; }; + const ::Opm::ParserKeyword& get_ENDSKIP() { return this->ENDSKIP; }; + const ::Opm::ParserKeyword& get_ENKRVD() { return this->ENKRVD; }; + const ::Opm::ParserKeyword& get_ENPCVD() { return this->ENPCVD; }; + const ::Opm::ParserKeyword& get_ENPTVD() { return this->ENPTVD; }; + const ::Opm::ParserKeyword& get_ENSPCVD() { return this->ENSPCVD; }; + const ::Opm::ParserKeyword& get_EPSDBGS() { return this->EPSDBGS; }; + const ::Opm::ParserKeyword& get_EPSDEBUG() { return this->EPSDEBUG; }; + const ::Opm::ParserKeyword& get_EQLDIMS() { return this->EQLDIMS; }; + const ::Opm::ParserKeyword& get_EQLNUM() { return this->EQLNUM; }; + const ::Opm::ParserKeyword& get_EQLOPTS() { return this->EQLOPTS; }; + const ::Opm::ParserKeyword& get_EQLZCORN() { return this->EQLZCORN; }; + const ::Opm::ParserKeyword& get_EQUALREG() { return this->EQUALREG; }; + const ::Opm::ParserKeyword& get_EQUALS() { return this->EQUALS; }; + const ::Opm::ParserKeyword& get_EQUIL() { return this->EQUIL; }; + const ::Opm::ParserKeyword& get_ESSNODE() { return this->ESSNODE; }; + const ::Opm::ParserKeyword& get_EXCAVATE() { return this->EXCAVATE; }; + const ::Opm::ParserKeyword& get_EXCEL() { return this->EXCEL; }; + const ::Opm::ParserKeyword& get_EXIT() { return this->EXIT; }; + const ::Opm::ParserKeyword& get_EXTFIN() { return this->EXTFIN; }; + const ::Opm::ParserKeyword& get_EXTHOST() { return this->EXTHOST; }; + const ::Opm::ParserKeyword& get_EXTRAPMS() { return this->EXTRAPMS; }; + const ::Opm::ParserKeyword& get_EXTREPGL() { return this->EXTREPGL; }; + const ::Opm::ParserKeyword& get_FAULTDIM() { return this->FAULTDIM; }; + const ::Opm::ParserKeyword& get_FAULTS() { return this->FAULTS; }; + const ::Opm::ParserKeyword& get_FBHPDEF() { return this->FBHPDEF; }; + const ::Opm::ParserKeyword& get_FHERCHBL() { return this->FHERCHBL; }; + const ::Opm::ParserKeyword& get_FIELD() { return this->FIELD; }; + const ::Opm::ParserKeyword& get_FIELD_PROBE() { return this->FIELD_PROBE; }; + const ::Opm::ParserKeyword& get_FILEUNIT() { return this->FILEUNIT; }; + const ::Opm::ParserKeyword& get_FILLEPS() { return this->FILLEPS; }; + const ::Opm::ParserKeyword& get_FIPNUM() { return this->FIPNUM; }; + const ::Opm::ParserKeyword& get_FIPOWG() { return this->FIPOWG; }; + const ::Opm::ParserKeyword& get_FIPSEP() { return this->FIPSEP; }; + const ::Opm::ParserKeyword& get_FIP_PROBE() { return this->FIP_PROBE; }; + const ::Opm::ParserKeyword& get_FLUXNUM() { return this->FLUXNUM; }; + const ::Opm::ParserKeyword& get_FLUXREG() { return this->FLUXREG; }; + const ::Opm::ParserKeyword& get_FLUXTYPE() { return this->FLUXTYPE; }; + const ::Opm::ParserKeyword& get_FMTHMD() { return this->FMTHMD; }; + const ::Opm::ParserKeyword& get_FMTIN() { return this->FMTIN; }; + const ::Opm::ParserKeyword& get_FMTOUT() { return this->FMTOUT; }; + const ::Opm::ParserKeyword& get_FMWSET() { return this->FMWSET; }; + const ::Opm::ParserKeyword& get_FOAM() { return this->FOAM; }; + const ::Opm::ParserKeyword& get_FOAMADS() { return this->FOAMADS; }; + const ::Opm::ParserKeyword& get_FOAMDCYO() { return this->FOAMDCYO; }; + const ::Opm::ParserKeyword& get_FOAMDCYW() { return this->FOAMDCYW; }; + const ::Opm::ParserKeyword& get_FOAMFCN() { return this->FOAMFCN; }; + const ::Opm::ParserKeyword& get_FOAMFRM() { return this->FOAMFRM; }; + const ::Opm::ParserKeyword& get_FOAMFSC() { return this->FOAMFSC; }; + const ::Opm::ParserKeyword& get_FOAMFSO() { return this->FOAMFSO; }; + const ::Opm::ParserKeyword& get_FOAMFST() { return this->FOAMFST; }; + const ::Opm::ParserKeyword& get_FOAMFSW() { return this->FOAMFSW; }; + const ::Opm::ParserKeyword& get_FOAMMOB() { return this->FOAMMOB; }; + const ::Opm::ParserKeyword& get_FOAMMOBP() { return this->FOAMMOBP; }; + const ::Opm::ParserKeyword& get_FOAMMOBS() { return this->FOAMMOBS; }; + const ::Opm::ParserKeyword& get_FOAMOPTS() { return this->FOAMOPTS; }; + const ::Opm::ParserKeyword& get_FOAMROCK() { return this->FOAMROCK; }; + const ::Opm::ParserKeyword& get_FORMFEED() { return this->FORMFEED; }; + const ::Opm::ParserKeyword& get_FRICTION() { return this->FRICTION; }; + const ::Opm::ParserKeyword& get_FULLIMP() { return this->FULLIMP; }; + const ::Opm::ParserKeyword& get_GAS() { return this->GAS; }; + const ::Opm::ParserKeyword& get_GASBEGIN() { return this->GASBEGIN; }; + const ::Opm::ParserKeyword& get_GASCONC() { return this->GASCONC; }; + const ::Opm::ParserKeyword& get_GASDENT() { return this->GASDENT; }; + const ::Opm::ParserKeyword& get_GASEND() { return this->GASEND; }; + const ::Opm::ParserKeyword& get_GASFCOMP() { return this->GASFCOMP; }; + const ::Opm::ParserKeyword& get_GASFDECR() { return this->GASFDECR; }; + const ::Opm::ParserKeyword& get_GASFDELC() { return this->GASFDELC; }; + const ::Opm::ParserKeyword& get_GASFIELD() { return this->GASFIELD; }; + const ::Opm::ParserKeyword& get_GASFTARG() { return this->GASFTARG; }; + const ::Opm::ParserKeyword& get_GASJT() { return this->GASJT; }; + const ::Opm::ParserKeyword& get_GASMONTH() { return this->GASMONTH; }; + const ::Opm::ParserKeyword& get_GASPERIO() { return this->GASPERIO; }; + const ::Opm::ParserKeyword& get_GASSATC() { return this->GASSATC; }; + const ::Opm::ParserKeyword& get_GASVISCT() { return this->GASVISCT; }; + const ::Opm::ParserKeyword& get_GASYEAR() { return this->GASYEAR; }; + const ::Opm::ParserKeyword& get_GCALECON() { return this->GCALECON; }; + const ::Opm::ParserKeyword& get_GCOMPIDX() { return this->GCOMPIDX; }; + const ::Opm::ParserKeyword& get_GCONCAL() { return this->GCONCAL; }; + const ::Opm::ParserKeyword& get_GCONENG() { return this->GCONENG; }; + const ::Opm::ParserKeyword& get_GCONINJE() { return this->GCONINJE; }; + const ::Opm::ParserKeyword& get_GCONPRI() { return this->GCONPRI; }; + const ::Opm::ParserKeyword& get_GCONPROD() { return this->GCONPROD; }; + const ::Opm::ParserKeyword& get_GCONSALE() { return this->GCONSALE; }; + const ::Opm::ParserKeyword& get_GCONSUMP() { return this->GCONSUMP; }; + const ::Opm::ParserKeyword& get_GCONTOL() { return this->GCONTOL; }; + const ::Opm::ParserKeyword& get_GCUTBACK() { return this->GCUTBACK; }; + const ::Opm::ParserKeyword& get_GCUTBACT() { return this->GCUTBACT; }; + const ::Opm::ParserKeyword& get_GCVD() { return this->GCVD; }; + const ::Opm::ParserKeyword& get_GDCQ() { return this->GDCQ; }; + const ::Opm::ParserKeyword& get_GDCQECON() { return this->GDCQECON; }; + const ::Opm::ParserKeyword& get_GDFILE() { return this->GDFILE; }; + const ::Opm::ParserKeyword& get_GDIMS() { return this->GDIMS; }; + const ::Opm::ParserKeyword& get_GDORIENT() { return this->GDORIENT; }; + const ::Opm::ParserKeyword& get_GDRILPOT() { return this->GDRILPOT; }; + const ::Opm::ParserKeyword& get_GECON() { return this->GECON; }; + const ::Opm::ParserKeyword& get_GECONT() { return this->GECONT; }; + const ::Opm::ParserKeyword& get_GEFAC() { return this->GEFAC; }; + const ::Opm::ParserKeyword& get_GETDATA() { return this->GETDATA; }; + const ::Opm::ParserKeyword& get_GETGLOB() { return this->GETGLOB; }; + const ::Opm::ParserKeyword& get_GI() { return this->GI; }; + const ::Opm::ParserKeyword& get_GIALL() { return this->GIALL; }; + const ::Opm::ParserKeyword& get_GIMODEL() { return this->GIMODEL; }; + const ::Opm::ParserKeyword& get_GINODE() { return this->GINODE; }; + const ::Opm::ParserKeyword& get_GLIFTLIM() { return this->GLIFTLIM; }; + const ::Opm::ParserKeyword& get_GLIFTOPT() { return this->GLIFTOPT; }; + const ::Opm::ParserKeyword& get_GMWSET() { return this->GMWSET; }; + const ::Opm::ParserKeyword& get_GNETDP() { return this->GNETDP; }; + const ::Opm::ParserKeyword& get_GNETINJE() { return this->GNETINJE; }; + const ::Opm::ParserKeyword& get_GNETPUMP() { return this->GNETPUMP; }; + const ::Opm::ParserKeyword& get_GPMAINT() { return this->GPMAINT; }; + const ::Opm::ParserKeyword& get_GRADGRUP() { return this->GRADGRUP; }; + const ::Opm::ParserKeyword& get_GRADRESV() { return this->GRADRESV; }; + const ::Opm::ParserKeyword& get_GRADRFT() { return this->GRADRFT; }; + const ::Opm::ParserKeyword& get_GRADWELL() { return this->GRADWELL; }; + const ::Opm::ParserKeyword& get_GRAVCONS() { return this->GRAVCONS; }; + const ::Opm::ParserKeyword& get_GRAVDR() { return this->GRAVDR; }; + const ::Opm::ParserKeyword& get_GRAVDRB() { return this->GRAVDRB; }; + const ::Opm::ParserKeyword& get_GRAVDRM() { return this->GRAVDRM; }; + const ::Opm::ParserKeyword& get_GRAVITY() { return this->GRAVITY; }; + const ::Opm::ParserKeyword& get_GRDREACH() { return this->GRDREACH; }; + const ::Opm::ParserKeyword& get_GRID() { return this->GRID; }; + const ::Opm::ParserKeyword& get_GRIDFILE() { return this->GRIDFILE; }; + const ::Opm::ParserKeyword& get_GRIDOPTS() { return this->GRIDOPTS; }; + const ::Opm::ParserKeyword& get_GRIDUNIT() { return this->GRIDUNIT; }; + const ::Opm::ParserKeyword& get_GROUP_PROBE() { return this->GROUP_PROBE; }; + const ::Opm::ParserKeyword& get_GRUPMAST() { return this->GRUPMAST; }; + const ::Opm::ParserKeyword& get_GRUPNET() { return this->GRUPNET; }; + const ::Opm::ParserKeyword& get_GRUPRIG() { return this->GRUPRIG; }; + const ::Opm::ParserKeyword& get_GRUPSLAV() { return this->GRUPSLAV; }; + const ::Opm::ParserKeyword& get_GRUPTARG() { return this->GRUPTARG; }; + const ::Opm::ParserKeyword& get_GRUPTREE() { return this->GRUPTREE; }; + const ::Opm::ParserKeyword& get_GSATINJE() { return this->GSATINJE; }; + const ::Opm::ParserKeyword& get_GSATPROD() { return this->GSATPROD; }; + const ::Opm::ParserKeyword& get_GSEPCOND() { return this->GSEPCOND; }; + const ::Opm::ParserKeyword& get_GSSCPTST() { return this->GSSCPTST; }; + const ::Opm::ParserKeyword& get_GSWINGF() { return this->GSWINGF; }; + const ::Opm::ParserKeyword& get_GTADD() { return this->GTADD; }; + const ::Opm::ParserKeyword& get_GTMULT() { return this->GTMULT; }; + const ::Opm::ParserKeyword& get_GUIDECAL() { return this->GUIDECAL; }; + const ::Opm::ParserKeyword& get_GUIDERAT() { return this->GUIDERAT; }; + const ::Opm::ParserKeyword& get_GUPFREQ() { return this->GUPFREQ; }; + const ::Opm::ParserKeyword& get_GWRTWCV() { return this->GWRTWCV; }; + const ::Opm::ParserKeyword& get_HALFTRAN() { return this->HALFTRAN; }; + const ::Opm::ParserKeyword& get_HAxxxxxx() { return this->HAxxxxxx; }; + const ::Opm::ParserKeyword& get_HBNUM() { return this->HBNUM; }; + const ::Opm::ParserKeyword& get_HDISP() { return this->HDISP; }; + const ::Opm::ParserKeyword& get_HEATCR() { return this->HEATCR; }; + const ::Opm::ParserKeyword& get_HEATCRT() { return this->HEATCRT; }; + const ::Opm::ParserKeyword& get_HMAQUCT() { return this->HMAQUCT; }; + const ::Opm::ParserKeyword& get_HMAQUFET() { return this->HMAQUFET; }; + const ::Opm::ParserKeyword& get_HMAQUNUM() { return this->HMAQUNUM; }; + const ::Opm::ParserKeyword& get_HMDIMS() { return this->HMDIMS; }; + const ::Opm::ParserKeyword& get_HMFAULTS() { return this->HMFAULTS; }; + const ::Opm::ParserKeyword& get_HMMLAQUN() { return this->HMMLAQUN; }; + const ::Opm::ParserKeyword& get_HMMLCTAQ() { return this->HMMLCTAQ; }; + const ::Opm::ParserKeyword& get_HMMLFTAQ() { return this->HMMLFTAQ; }; + const ::Opm::ParserKeyword& get_HMMLTWCN() { return this->HMMLTWCN; }; + const ::Opm::ParserKeyword& get_HMMULTFT() { return this->HMMULTFT; }; + const ::Opm::ParserKeyword& get_HMMULTSG() { return this->HMMULTSG; }; + const ::Opm::ParserKeyword& get_HMMULTxx() { return this->HMMULTxx; }; + const ::Opm::ParserKeyword& get_HMPROPS() { return this->HMPROPS; }; + const ::Opm::ParserKeyword& get_HMROCK() { return this->HMROCK; }; + const ::Opm::ParserKeyword& get_HMROCKT() { return this->HMROCKT; }; + const ::Opm::ParserKeyword& get_HMRREF() { return this->HMRREF; }; + const ::Opm::ParserKeyword& get_HMWELCON() { return this->HMWELCON; }; + const ::Opm::ParserKeyword& get_HMWPIMLT() { return this->HMWPIMLT; }; + const ::Opm::ParserKeyword& get_HMxxxxxx() { return this->HMxxxxxx; }; + const ::Opm::ParserKeyword& get_HRFIN() { return this->HRFIN; }; + const ::Opm::ParserKeyword& get_HWKRO() { return this->HWKRO; }; + const ::Opm::ParserKeyword& get_HWKRORG() { return this->HWKRORG; }; + const ::Opm::ParserKeyword& get_HWKRORW() { return this->HWKRORW; }; + const ::Opm::ParserKeyword& get_HWKRW() { return this->HWKRW; }; + const ::Opm::ParserKeyword& get_HWKRWR() { return this->HWKRWR; }; + const ::Opm::ParserKeyword& get_HWPCW() { return this->HWPCW; }; + const ::Opm::ParserKeyword& get_HWSNUM() { return this->HWSNUM; }; + const ::Opm::ParserKeyword& get_HWSOGCR() { return this->HWSOGCR; }; + const ::Opm::ParserKeyword& get_HWSOWCR() { return this->HWSOWCR; }; + const ::Opm::ParserKeyword& get_HWSWCR() { return this->HWSWCR; }; + const ::Opm::ParserKeyword& get_HWSWL() { return this->HWSWL; }; + const ::Opm::ParserKeyword& get_HWSWLPC() { return this->HWSWLPC; }; + const ::Opm::ParserKeyword& get_HWSWU() { return this->HWSWU; }; + const ::Opm::ParserKeyword& get_HXFIN() { return this->HXFIN; }; + const ::Opm::ParserKeyword& get_HYDRHEAD() { return this->HYDRHEAD; }; + const ::Opm::ParserKeyword& get_HYFIN() { return this->HYFIN; }; + const ::Opm::ParserKeyword& get_HYMOBGDR() { return this->HYMOBGDR; }; + const ::Opm::ParserKeyword& get_HYST() { return this->HYST; }; + const ::Opm::ParserKeyword& get_HYSTCHCK() { return this->HYSTCHCK; }; + const ::Opm::ParserKeyword& get_HZFIN() { return this->HZFIN; }; + const ::Opm::ParserKeyword& get_IHOST() { return this->IHOST; }; + const ::Opm::ParserKeyword& get_IMBNUM() { return this->IMBNUM; }; + const ::Opm::ParserKeyword& get_IMBNUMMF() { return this->IMBNUMMF; }; + const ::Opm::ParserKeyword& get_IMKRVD() { return this->IMKRVD; }; + const ::Opm::ParserKeyword& get_IMPCVD() { return this->IMPCVD; }; + const ::Opm::ParserKeyword& get_IMPES() { return this->IMPES; }; + const ::Opm::ParserKeyword& get_IMPLICIT() { return this->IMPLICIT; }; + const ::Opm::ParserKeyword& get_IMPORT() { return this->IMPORT; }; + const ::Opm::ParserKeyword& get_IMPTVD() { return this->IMPTVD; }; + const ::Opm::ParserKeyword& get_IMSPCVD() { return this->IMSPCVD; }; + const ::Opm::ParserKeyword& get_INCLUDE() { return this->INCLUDE; }; + const ::Opm::ParserKeyword& get_INIT() { return this->INIT; }; + const ::Opm::ParserKeyword& get_INRAD() { return this->INRAD; }; + const ::Opm::ParserKeyword& get_INSPEC() { return this->INSPEC; }; + const ::Opm::ParserKeyword& get_INTPC() { return this->INTPC; }; + const ::Opm::ParserKeyword& get_IONROCK() { return this->IONROCK; }; + const ::Opm::ParserKeyword& get_IONXROCK() { return this->IONXROCK; }; + const ::Opm::ParserKeyword& get_IONXSURF() { return this->IONXSURF; }; + const ::Opm::ParserKeyword& get_IPCG() { return this->IPCG; }; + const ::Opm::ParserKeyword& get_IPCW() { return this->IPCW; }; + const ::Opm::ParserKeyword& get_ISGCR() { return this->ISGCR; }; + const ::Opm::ParserKeyword& get_ISGL() { return this->ISGL; }; + const ::Opm::ParserKeyword& get_ISGLPC() { return this->ISGLPC; }; + const ::Opm::ParserKeyword& get_ISGU() { return this->ISGU; }; + const ::Opm::ParserKeyword& get_ISOGCR() { return this->ISOGCR; }; + const ::Opm::ParserKeyword& get_ISOLNUM() { return this->ISOLNUM; }; + const ::Opm::ParserKeyword& get_ISOWCR() { return this->ISOWCR; }; + const ::Opm::ParserKeyword& get_ISWCR() { return this->ISWCR; }; + const ::Opm::ParserKeyword& get_ISWL() { return this->ISWL; }; + const ::Opm::ParserKeyword& get_ISWLPC() { return this->ISWLPC; }; + const ::Opm::ParserKeyword& get_ISWU() { return this->ISWU; }; + const ::Opm::ParserKeyword& get_JFUNC() { return this->JFUNC; }; + const ::Opm::ParserKeyword& get_JFUNCR() { return this->JFUNCR; }; + const ::Opm::ParserKeyword& get_KRNUM() { return this->KRNUM; }; + const ::Opm::ParserKeyword& get_KRNUMMF() { return this->KRNUMMF; }; + const ::Opm::ParserKeyword& get_LAB() { return this->LAB; }; + const ::Opm::ParserKeyword& get_LANGMPL() { return this->LANGMPL; }; + const ::Opm::ParserKeyword& get_LANGMUIR() { return this->LANGMUIR; }; + const ::Opm::ParserKeyword& get_LANGSOLV() { return this->LANGSOLV; }; + const ::Opm::ParserKeyword& get_LCUNIT() { return this->LCUNIT; }; + const ::Opm::ParserKeyword& get_LGR() { return this->LGR; }; + const ::Opm::ParserKeyword& get_LGRCOPY() { return this->LGRCOPY; }; + const ::Opm::ParserKeyword& get_LGRFREE() { return this->LGRFREE; }; + const ::Opm::ParserKeyword& get_LGRLOCK() { return this->LGRLOCK; }; + const ::Opm::ParserKeyword& get_LGROFF() { return this->LGROFF; }; + const ::Opm::ParserKeyword& get_LGRON() { return this->LGRON; }; + const ::Opm::ParserKeyword& get_LICENSES() { return this->LICENSES; }; + const ::Opm::ParserKeyword& get_LIFTOPT() { return this->LIFTOPT; }; + const ::Opm::ParserKeyword& get_LINCOM() { return this->LINCOM; }; + const ::Opm::ParserKeyword& get_LINKPERM() { return this->LINKPERM; }; + const ::Opm::ParserKeyword& get_LIVEOIL() { return this->LIVEOIL; }; + const ::Opm::ParserKeyword& get_LKRO() { return this->LKRO; }; + const ::Opm::ParserKeyword& get_LKRORG() { return this->LKRORG; }; + const ::Opm::ParserKeyword& get_LKRORW() { return this->LKRORW; }; + const ::Opm::ParserKeyword& get_LKRW() { return this->LKRW; }; + const ::Opm::ParserKeyword& get_LKRWR() { return this->LKRWR; }; + const ::Opm::ParserKeyword& get_LOAD() { return this->LOAD; }; + const ::Opm::ParserKeyword& get_LOWSALT() { return this->LOWSALT; }; + const ::Opm::ParserKeyword& get_LPCW() { return this->LPCW; }; + const ::Opm::ParserKeyword& get_LSALTFNC() { return this->LSALTFNC; }; + const ::Opm::ParserKeyword& get_LSLTWNUM() { return this->LSLTWNUM; }; + const ::Opm::ParserKeyword& get_LSNUM() { return this->LSNUM; }; + const ::Opm::ParserKeyword& get_LSOGCR() { return this->LSOGCR; }; + const ::Opm::ParserKeyword& get_LSOWCR() { return this->LSOWCR; }; + const ::Opm::ParserKeyword& get_LSWCR() { return this->LSWCR; }; + const ::Opm::ParserKeyword& get_LSWL() { return this->LSWL; }; + const ::Opm::ParserKeyword& get_LSWLPC() { return this->LSWLPC; }; + const ::Opm::ParserKeyword& get_LSWU() { return this->LSWU; }; + const ::Opm::ParserKeyword& get_LTOSIGMA() { return this->LTOSIGMA; }; + const ::Opm::ParserKeyword& get_LWKRO() { return this->LWKRO; }; + const ::Opm::ParserKeyword& get_LWKRORG() { return this->LWKRORG; }; + const ::Opm::ParserKeyword& get_LWKRORW() { return this->LWKRORW; }; + const ::Opm::ParserKeyword& get_LWKRW() { return this->LWKRW; }; + const ::Opm::ParserKeyword& get_LWKRWR() { return this->LWKRWR; }; + const ::Opm::ParserKeyword& get_LWPCW() { return this->LWPCW; }; + const ::Opm::ParserKeyword& get_LWSLTNUM() { return this->LWSLTNUM; }; + const ::Opm::ParserKeyword& get_LWSNUM() { return this->LWSNUM; }; + const ::Opm::ParserKeyword& get_LWSOGCR() { return this->LWSOGCR; }; + const ::Opm::ParserKeyword& get_LWSOWCR() { return this->LWSOWCR; }; + const ::Opm::ParserKeyword& get_LWSWCR() { return this->LWSWCR; }; + const ::Opm::ParserKeyword& get_LWSWL() { return this->LWSWL; }; + const ::Opm::ParserKeyword& get_LWSWLPC() { return this->LWSWLPC; }; + const ::Opm::ParserKeyword& get_LWSWU() { return this->LWSWU; }; + const ::Opm::ParserKeyword& get_LX() { return this->LX; }; + const ::Opm::ParserKeyword& get_LXFIN() { return this->LXFIN; }; + const ::Opm::ParserKeyword& get_LY() { return this->LY; }; + const ::Opm::ParserKeyword& get_LYFIN() { return this->LYFIN; }; + const ::Opm::ParserKeyword& get_LZ() { return this->LZ; }; + const ::Opm::ParserKeyword& get_LZFIN() { return this->LZFIN; }; + const ::Opm::ParserKeyword& get_MAPAXES() { return this->MAPAXES; }; + const ::Opm::ParserKeyword& get_MAPUNITS() { return this->MAPUNITS; }; + const ::Opm::ParserKeyword& get_MASSFLOW() { return this->MASSFLOW; }; + const ::Opm::ParserKeyword& get_MATCORR() { return this->MATCORR; }; + const ::Opm::ParserKeyword& get_MAXVALUE() { return this->MAXVALUE; }; + const ::Opm::ParserKeyword& get_MEMORY() { return this->MEMORY; }; + const ::Opm::ParserKeyword& get_MESSAGE() { return this->MESSAGE; }; + const ::Opm::ParserKeyword& get_MESSAGES() { return this->MESSAGES; }; + const ::Opm::ParserKeyword& get_MESSOPTS() { return this->MESSOPTS; }; + const ::Opm::ParserKeyword& get_MESSSRVC() { return this->MESSSRVC; }; + const ::Opm::ParserKeyword& get_METRIC() { return this->METRIC; }; + const ::Opm::ParserKeyword& get_MICP() { return this->MICP; }; + const ::Opm::ParserKeyword& get_MICPPARA() { return this->MICPPARA; }; + const ::Opm::ParserKeyword& get_MINNNCT() { return this->MINNNCT; }; + const ::Opm::ParserKeyword& get_MINNPCOL() { return this->MINNPCOL; }; + const ::Opm::ParserKeyword& get_MINPORV() { return this->MINPORV; }; + const ::Opm::ParserKeyword& get_MINPV() { return this->MINPV; }; + const ::Opm::ParserKeyword& get_MINPVFIL() { return this->MINPVFIL; }; + const ::Opm::ParserKeyword& get_MINPVV() { return this->MINPVV; }; + const ::Opm::ParserKeyword& get_MINVALUE() { return this->MINVALUE; }; + const ::Opm::ParserKeyword& get_MISC() { return this->MISC; }; + const ::Opm::ParserKeyword& get_MISCIBLE() { return this->MISCIBLE; }; + const ::Opm::ParserKeyword& get_MISCNUM() { return this->MISCNUM; }; + const ::Opm::ParserKeyword& get_MLANG() { return this->MLANG; }; + const ::Opm::ParserKeyword& get_MLANGSLV() { return this->MLANGSLV; }; + const ::Opm::ParserKeyword& get_MONITOR() { return this->MONITOR; }; + const ::Opm::ParserKeyword& get_MPFANUM() { return this->MPFANUM; }; + const ::Opm::ParserKeyword& get_MPFNNC() { return this->MPFNNC; }; + const ::Opm::ParserKeyword& get_MSFN() { return this->MSFN; }; + const ::Opm::ParserKeyword& get_MSGFILE() { return this->MSGFILE; }; + const ::Opm::ParserKeyword& get_MSUM_PROBE() { return this->MSUM_PROBE; }; + const ::Opm::ParserKeyword& get_MULSGGD() { return this->MULSGGD; }; + const ::Opm::ParserKeyword& get_MULSGGDV() { return this->MULSGGDV; }; + const ::Opm::ParserKeyword& get_MULTFLT() { return this->MULTFLT; }; + const ::Opm::ParserKeyword& get_MULTIN() { return this->MULTIN; }; + const ::Opm::ParserKeyword& get_MULTIPLY() { return this->MULTIPLY; }; + const ::Opm::ParserKeyword& get_MULTIREG() { return this->MULTIREG; }; + const ::Opm::ParserKeyword& get_MULTNUM() { return this->MULTNUM; }; + const ::Opm::ParserKeyword& get_MULTOUT() { return this->MULTOUT; }; + const ::Opm::ParserKeyword& get_MULTOUTS() { return this->MULTOUTS; }; + const ::Opm::ParserKeyword& get_MULTPV() { return this->MULTPV; }; + const ::Opm::ParserKeyword& get_MULTREAL() { return this->MULTREAL; }; + const ::Opm::ParserKeyword& get_MULTREGD() { return this->MULTREGD; }; + const ::Opm::ParserKeyword& get_MULTREGH() { return this->MULTREGH; }; + const ::Opm::ParserKeyword& get_MULTREGP() { return this->MULTREGP; }; + const ::Opm::ParserKeyword& get_MULTREGT() { return this->MULTREGT; }; + const ::Opm::ParserKeyword& get_MULTSIG() { return this->MULTSIG; }; + const ::Opm::ParserKeyword& get_MULTSIGV() { return this->MULTSIGV; }; + const ::Opm::ParserKeyword& get_MULT_XYZ() { return this->MULT_XYZ; }; + const ::Opm::ParserKeyword& get_MW() { return this->MW; }; + const ::Opm::ParserKeyword& get_MWS() { return this->MWS; }; + const ::Opm::ParserKeyword& get_NARROW() { return this->NARROW; }; + const ::Opm::ParserKeyword& get_NCONSUMP() { return this->NCONSUMP; }; + const ::Opm::ParserKeyword& get_NEFAC() { return this->NEFAC; }; + const ::Opm::ParserKeyword& get_NETBALAN() { return this->NETBALAN; }; + const ::Opm::ParserKeyword& get_NETCOMPA() { return this->NETCOMPA; }; + const ::Opm::ParserKeyword& get_NETWORK() { return this->NETWORK; }; + const ::Opm::ParserKeyword& get_NEWTRAN() { return this->NEWTRAN; }; + const ::Opm::ParserKeyword& get_NEXTSTEP() { return this->NEXTSTEP; }; + const ::Opm::ParserKeyword& get_NEXTSTPL() { return this->NEXTSTPL; }; + const ::Opm::ParserKeyword& get_NINENUM() { return this->NINENUM; }; + const ::Opm::ParserKeyword& get_NINEPOIN() { return this->NINEPOIN; }; + const ::Opm::ParserKeyword& get_NMATOPTS() { return this->NMATOPTS; }; + const ::Opm::ParserKeyword& get_NMATRIX() { return this->NMATRIX; }; + const ::Opm::ParserKeyword& get_NMESSAGE() { return this->NMESSAGE; }; + const ::Opm::ParserKeyword& get_NNC() { return this->NNC; }; + const ::Opm::ParserKeyword& get_NNEWTF() { return this->NNEWTF; }; + const ::Opm::ParserKeyword& get_NOCASC() { return this->NOCASC; }; + const ::Opm::ParserKeyword& get_NODEPROP() { return this->NODEPROP; }; + const ::Opm::ParserKeyword& get_NODPPM() { return this->NODPPM; }; + const ::Opm::ParserKeyword& get_NOECHO() { return this->NOECHO; }; + const ::Opm::ParserKeyword& get_NOGGF() { return this->NOGGF; }; + const ::Opm::ParserKeyword& get_NOGRAV() { return this->NOGRAV; }; + const ::Opm::ParserKeyword& get_NOHMD() { return this->NOHMD; }; + const ::Opm::ParserKeyword& get_NOHMO() { return this->NOHMO; }; + const ::Opm::ParserKeyword& get_NOHYST() { return this->NOHYST; }; + const ::Opm::ParserKeyword& get_NOINSPEC() { return this->NOINSPEC; }; + const ::Opm::ParserKeyword& get_NOMONITO() { return this->NOMONITO; }; + const ::Opm::ParserKeyword& get_NONNC() { return this->NONNC; }; + const ::Opm::ParserKeyword& get_NORSSPEC() { return this->NORSSPEC; }; + const ::Opm::ParserKeyword& get_NOSIM() { return this->NOSIM; }; + const ::Opm::ParserKeyword& get_NOWARN() { return this->NOWARN; }; + const ::Opm::ParserKeyword& get_NOWARNEP() { return this->NOWARNEP; }; + const ::Opm::ParserKeyword& get_NRSOUT() { return this->NRSOUT; }; + const ::Opm::ParserKeyword& get_NSTACK() { return this->NSTACK; }; + const ::Opm::ParserKeyword& get_NTG() { return this->NTG; }; + const ::Opm::ParserKeyword& get_NUMRES() { return this->NUMRES; }; + const ::Opm::ParserKeyword& get_NUPCOL() { return this->NUPCOL; }; + const ::Opm::ParserKeyword& get_NWATREM() { return this->NWATREM; }; + const ::Opm::ParserKeyword& get_NXFIN() { return this->NXFIN; }; + const ::Opm::ParserKeyword& get_NYFIN() { return this->NYFIN; }; + const ::Opm::ParserKeyword& get_NZFIN() { return this->NZFIN; }; + const ::Opm::ParserKeyword& get_OCOMPIDX() { return this->OCOMPIDX; }; + const ::Opm::ParserKeyword& get_OFM() { return this->OFM; }; + const ::Opm::ParserKeyword& get_OIL() { return this->OIL; }; + const ::Opm::ParserKeyword& get_OILAPI() { return this->OILAPI; }; + const ::Opm::ParserKeyword& get_OILCOMPR() { return this->OILCOMPR; }; + const ::Opm::ParserKeyword& get_OILDENT() { return this->OILDENT; }; + const ::Opm::ParserKeyword& get_OILJT() { return this->OILJT; }; + const ::Opm::ParserKeyword& get_OILMW() { return this->OILMW; }; + const ::Opm::ParserKeyword& get_OILVISCT() { return this->OILVISCT; }; + const ::Opm::ParserKeyword& get_OILVTIM() { return this->OILVTIM; }; + const ::Opm::ParserKeyword& get_OLDTRAN() { return this->OLDTRAN; }; + const ::Opm::ParserKeyword& get_OLDTRANR() { return this->OLDTRANR; }; + const ::Opm::ParserKeyword& get_OPERATE() { return this->OPERATE; }; + const ::Opm::ParserKeyword& get_OPERATER() { return this->OPERATER; }; + const ::Opm::ParserKeyword& get_OPERNUM() { return this->OPERNUM; }; + const ::Opm::ParserKeyword& get_OPTIONS() { return this->OPTIONS; }; + const ::Opm::ParserKeyword& get_OPTIONS3() { return this->OPTIONS3; }; + const ::Opm::ParserKeyword& get_OUTRAD() { return this->OUTRAD; }; + const ::Opm::ParserKeyword& get_OUTSOL() { return this->OUTSOL; }; + const ::Opm::ParserKeyword& get_OVERBURD() { return this->OVERBURD; }; + const ::Opm::ParserKeyword& get_PARALLEL() { return this->PARALLEL; }; + const ::Opm::ParserKeyword& get_PARAOPTS() { return this->PARAOPTS; }; + const ::Opm::ParserKeyword& get_PARTTRAC() { return this->PARTTRAC; }; + const ::Opm::ParserKeyword& get_PATHS() { return this->PATHS; }; + const ::Opm::ParserKeyword& get_PBUB() { return this->PBUB; }; + const ::Opm::ParserKeyword& get_PBVD() { return this->PBVD; }; + const ::Opm::ParserKeyword& get_PCG() { return this->PCG; }; + const ::Opm::ParserKeyword& get_PCG32D() { return this->PCG32D; }; + const ::Opm::ParserKeyword& get_PCW() { return this->PCW; }; + const ::Opm::ParserKeyword& get_PCW32D() { return this->PCW32D; }; + const ::Opm::ParserKeyword& get_PDEW() { return this->PDEW; }; + const ::Opm::ParserKeyword& get_PDVD() { return this->PDVD; }; + const ::Opm::ParserKeyword& get_PEBI() { return this->PEBI; }; + const ::Opm::ParserKeyword& get_PECOEFS() { return this->PECOEFS; }; + const ::Opm::ParserKeyword& get_PEDIMS() { return this->PEDIMS; }; + const ::Opm::ParserKeyword& get_PEGTABX() { return this->PEGTABX; }; + const ::Opm::ParserKeyword& get_PEKTABX() { return this->PEKTABX; }; + const ::Opm::ParserKeyword& get_PENUM() { return this->PENUM; }; + const ::Opm::ParserKeyword& get_PERFORMANCE_PROBE() { return this->PERFORMANCE_PROBE; }; + const ::Opm::ParserKeyword& get_PERMAVE() { return this->PERMAVE; }; + const ::Opm::ParserKeyword& get_PERMFACT() { return this->PERMFACT; }; + const ::Opm::ParserKeyword& get_PERMJFUN() { return this->PERMJFUN; }; + const ::Opm::ParserKeyword& get_PERMR() { return this->PERMR; }; + const ::Opm::ParserKeyword& get_PERMTHT() { return this->PERMTHT; }; + const ::Opm::ParserKeyword& get_PERMX() { return this->PERMX; }; + const ::Opm::ParserKeyword& get_PERMXY() { return this->PERMXY; }; + const ::Opm::ParserKeyword& get_PERMY() { return this->PERMY; }; + const ::Opm::ParserKeyword& get_PERMYZ() { return this->PERMYZ; }; + const ::Opm::ParserKeyword& get_PERMZ() { return this->PERMZ; }; + const ::Opm::ParserKeyword& get_PERMZX() { return this->PERMZX; }; + const ::Opm::ParserKeyword& get_PETGRID() { return this->PETGRID; }; + const ::Opm::ParserKeyword& get_PETOPTS() { return this->PETOPTS; }; + const ::Opm::ParserKeyword& get_PICOND() { return this->PICOND; }; + const ::Opm::ParserKeyword& get_PIMTDIMS() { return this->PIMTDIMS; }; + const ::Opm::ParserKeyword& get_PIMULTAB() { return this->PIMULTAB; }; + const ::Opm::ParserKeyword& get_PINCH() { return this->PINCH; }; + const ::Opm::ParserKeyword& get_PINCHNUM() { return this->PINCHNUM; }; + const ::Opm::ParserKeyword& get_PINCHOUT() { return this->PINCHOUT; }; + const ::Opm::ParserKeyword& get_PINCHREG() { return this->PINCHREG; }; + const ::Opm::ParserKeyword& get_PINCHXY() { return this->PINCHXY; }; + const ::Opm::ParserKeyword& get_PINTDIMS() { return this->PINTDIMS; }; + const ::Opm::ParserKeyword& get_PLMIXNUM() { return this->PLMIXNUM; }; + const ::Opm::ParserKeyword& get_PLMIXPAR() { return this->PLMIXPAR; }; + const ::Opm::ParserKeyword& get_PLYADS() { return this->PLYADS; }; + const ::Opm::ParserKeyword& get_PLYADSS() { return this->PLYADSS; }; + const ::Opm::ParserKeyword& get_PLYATEMP() { return this->PLYATEMP; }; + const ::Opm::ParserKeyword& get_PLYCAMAX() { return this->PLYCAMAX; }; + const ::Opm::ParserKeyword& get_PLYDHFLF() { return this->PLYDHFLF; }; + const ::Opm::ParserKeyword& get_PLYESAL() { return this->PLYESAL; }; + const ::Opm::ParserKeyword& get_PLYKRRF() { return this->PLYKRRF; }; + const ::Opm::ParserKeyword& get_PLYMAX() { return this->PLYMAX; }; + const ::Opm::ParserKeyword& get_PLYMWINJ() { return this->PLYMWINJ; }; + const ::Opm::ParserKeyword& get_PLYOPTS() { return this->PLYOPTS; }; + const ::Opm::ParserKeyword& get_PLYRMDEN() { return this->PLYRMDEN; }; + const ::Opm::ParserKeyword& get_PLYROCK() { return this->PLYROCK; }; + const ::Opm::ParserKeyword& get_PLYROCKM() { return this->PLYROCKM; }; + const ::Opm::ParserKeyword& get_PLYSHEAR() { return this->PLYSHEAR; }; + const ::Opm::ParserKeyword& get_PLYSHLOG() { return this->PLYSHLOG; }; + const ::Opm::ParserKeyword& get_PLYTRRF() { return this->PLYTRRF; }; + const ::Opm::ParserKeyword& get_PLYTRRFA() { return this->PLYTRRFA; }; + const ::Opm::ParserKeyword& get_PLYVISC() { return this->PLYVISC; }; + const ::Opm::ParserKeyword& get_PLYVISCS() { return this->PLYVISCS; }; + const ::Opm::ParserKeyword& get_PLYVISCT() { return this->PLYVISCT; }; + const ::Opm::ParserKeyword& get_PLYVMH() { return this->PLYVMH; }; + const ::Opm::ParserKeyword& get_PLYVSCST() { return this->PLYVSCST; }; + const ::Opm::ParserKeyword& get_PMAX() { return this->PMAX; }; + const ::Opm::ParserKeyword& get_PMISC() { return this->PMISC; }; + const ::Opm::ParserKeyword& get_POLYMER() { return this->POLYMER; }; + const ::Opm::ParserKeyword& get_POLYMW() { return this->POLYMW; }; + const ::Opm::ParserKeyword& get_PORO() { return this->PORO; }; + const ::Opm::ParserKeyword& get_PORV() { return this->PORV; }; + const ::Opm::ParserKeyword& get_PPCWMAX() { return this->PPCWMAX; }; + const ::Opm::ParserKeyword& get_PRECSALT() { return this->PRECSALT; }; + const ::Opm::ParserKeyword& get_PREF() { return this->PREF; }; + const ::Opm::ParserKeyword& get_PREFS() { return this->PREFS; }; + const ::Opm::ParserKeyword& get_PRESSURE() { return this->PRESSURE; }; + const ::Opm::ParserKeyword& get_PRIORITY() { return this->PRIORITY; }; + const ::Opm::ParserKeyword& get_PROPS() { return this->PROPS; }; + const ::Opm::ParserKeyword& get_PRORDER() { return this->PRORDER; }; + const ::Opm::ParserKeyword& get_PRVD() { return this->PRVD; }; + const ::Opm::ParserKeyword& get_PSTEADY() { return this->PSTEADY; }; + const ::Opm::ParserKeyword& get_PSWRG() { return this->PSWRG; }; + const ::Opm::ParserKeyword& get_PSWRO() { return this->PSWRO; }; + const ::Opm::ParserKeyword& get_PVCDO() { return this->PVCDO; }; + const ::Opm::ParserKeyword& get_PVCO() { return this->PVCO; }; + const ::Opm::ParserKeyword& get_PVDG() { return this->PVDG; }; + const ::Opm::ParserKeyword& get_PVDO() { return this->PVDO; }; + const ::Opm::ParserKeyword& get_PVDS() { return this->PVDS; }; + const ::Opm::ParserKeyword& get_PVTG() { return this->PVTG; }; + const ::Opm::ParserKeyword& get_PVTGW() { return this->PVTGW; }; + const ::Opm::ParserKeyword& get_PVTGWO() { return this->PVTGWO; }; + const ::Opm::ParserKeyword& get_PVTNUM() { return this->PVTNUM; }; + const ::Opm::ParserKeyword& get_PVTO() { return this->PVTO; }; + const ::Opm::ParserKeyword& get_PVTSOL() { return this->PVTSOL; }; + const ::Opm::ParserKeyword& get_PVTW() { return this->PVTW; }; + const ::Opm::ParserKeyword& get_PVTWSALT() { return this->PVTWSALT; }; + const ::Opm::ParserKeyword& get_PVT_M() { return this->PVT_M; }; + const ::Opm::ParserKeyword& get_PVZG() { return this->PVZG; }; + const ::Opm::ParserKeyword& get_PYACTION() { return this->PYACTION; }; + const ::Opm::ParserKeyword& get_PYINPUT() { return this->PYINPUT; }; + const ::Opm::ParserKeyword& get_QDRILL() { return this->QDRILL; }; + const ::Opm::ParserKeyword& get_QHRATING() { return this->QHRATING; }; + const ::Opm::ParserKeyword& get_QMOBIL() { return this->QMOBIL; }; + const ::Opm::ParserKeyword& get_RADFIN() { return this->RADFIN; }; + const ::Opm::ParserKeyword& get_RADFIN4() { return this->RADFIN4; }; + const ::Opm::ParserKeyword& get_RADIAL() { return this->RADIAL; }; + const ::Opm::ParserKeyword& get_RAINFALL() { return this->RAINFALL; }; + const ::Opm::ParserKeyword& get_RBEDCONT() { return this->RBEDCONT; }; + const ::Opm::ParserKeyword& get_RCMASTS() { return this->RCMASTS; }; + const ::Opm::ParserKeyword& get_REACHES() { return this->REACHES; }; + const ::Opm::ParserKeyword& get_READDATA() { return this->READDATA; }; + const ::Opm::ParserKeyword& get_REFINE() { return this->REFINE; }; + const ::Opm::ParserKeyword& get_REGDIMS() { return this->REGDIMS; }; + const ::Opm::ParserKeyword& get_REGION2REGION_PROBE() { return this->REGION2REGION_PROBE; }; + const ::Opm::ParserKeyword& get_REGION2REGION_PROBE_E300() { return this->REGION2REGION_PROBE_E300; }; + const ::Opm::ParserKeyword& get_REGIONS() { return this->REGIONS; }; + const ::Opm::ParserKeyword& get_REGION_PROBE() { return this->REGION_PROBE; }; + const ::Opm::ParserKeyword& get_RESIDNUM() { return this->RESIDNUM; }; + const ::Opm::ParserKeyword& get_RESTART() { return this->RESTART; }; + const ::Opm::ParserKeyword& get_RESVNUM() { return this->RESVNUM; }; + const ::Opm::ParserKeyword& get_RHO() { return this->RHO; }; + const ::Opm::ParserKeyword& get_RIVDEBUG() { return this->RIVDEBUG; }; + const ::Opm::ParserKeyword& get_RIVERSYS() { return this->RIVERSYS; }; + const ::Opm::ParserKeyword& get_RIVRDIMS() { return this->RIVRDIMS; }; + const ::Opm::ParserKeyword& get_RIVRPROP() { return this->RIVRPROP; }; + const ::Opm::ParserKeyword& get_RIVRXSEC() { return this->RIVRXSEC; }; + const ::Opm::ParserKeyword& get_RIVSALT() { return this->RIVSALT; }; + const ::Opm::ParserKeyword& get_RIVTRACE() { return this->RIVTRACE; }; + const ::Opm::ParserKeyword& get_RKTRMDIR() { return this->RKTRMDIR; }; + const ::Opm::ParserKeyword& get_ROCK() { return this->ROCK; }; + const ::Opm::ParserKeyword& get_ROCK2D() { return this->ROCK2D; }; + const ::Opm::ParserKeyword& get_ROCK2DTR() { return this->ROCK2DTR; }; + const ::Opm::ParserKeyword& get_ROCKCOMP() { return this->ROCKCOMP; }; + const ::Opm::ParserKeyword& get_ROCKFRAC() { return this->ROCKFRAC; }; + const ::Opm::ParserKeyword& get_ROCKNUM() { return this->ROCKNUM; }; + const ::Opm::ParserKeyword& get_ROCKOPTS() { return this->ROCKOPTS; }; + const ::Opm::ParserKeyword& get_ROCKPAMA() { return this->ROCKPAMA; }; + const ::Opm::ParserKeyword& get_ROCKTAB() { return this->ROCKTAB; }; + const ::Opm::ParserKeyword& get_ROCKTABH() { return this->ROCKTABH; }; + const ::Opm::ParserKeyword& get_ROCKTABW() { return this->ROCKTABW; }; + const ::Opm::ParserKeyword& get_ROCKTHSG() { return this->ROCKTHSG; }; + const ::Opm::ParserKeyword& get_ROCKTSIG() { return this->ROCKTSIG; }; + const ::Opm::ParserKeyword& get_ROCKV() { return this->ROCKV; }; + const ::Opm::ParserKeyword& get_ROCKWNOD() { return this->ROCKWNOD; }; + const ::Opm::ParserKeyword& get_RPTCPL() { return this->RPTCPL; }; + const ::Opm::ParserKeyword& get_RPTGRID() { return this->RPTGRID; }; + const ::Opm::ParserKeyword& get_RPTGRIDL() { return this->RPTGRIDL; }; + const ::Opm::ParserKeyword& get_RPTHMD() { return this->RPTHMD; }; + const ::Opm::ParserKeyword& get_RPTHMG() { return this->RPTHMG; }; + const ::Opm::ParserKeyword& get_RPTHMW() { return this->RPTHMW; }; + const ::Opm::ParserKeyword& get_RPTINIT() { return this->RPTINIT; }; + const ::Opm::ParserKeyword& get_RPTISOL() { return this->RPTISOL; }; + const ::Opm::ParserKeyword& get_RPTONLY() { return this->RPTONLY; }; + const ::Opm::ParserKeyword& get_RPTONLYO() { return this->RPTONLYO; }; + const ::Opm::ParserKeyword& get_RPTPROPS() { return this->RPTPROPS; }; + const ::Opm::ParserKeyword& get_RPTREGS() { return this->RPTREGS; }; + const ::Opm::ParserKeyword& get_RPTRST() { return this->RPTRST; }; + const ::Opm::ParserKeyword& get_RPTRUNSP() { return this->RPTRUNSP; }; + const ::Opm::ParserKeyword& get_RPTSCHED() { return this->RPTSCHED; }; + const ::Opm::ParserKeyword& get_RPTSMRY() { return this->RPTSMRY; }; + const ::Opm::ParserKeyword& get_RPTSOL() { return this->RPTSOL; }; + const ::Opm::ParserKeyword& get_RS() { return this->RS; }; + const ::Opm::ParserKeyword& get_RSCONST() { return this->RSCONST; }; + const ::Opm::ParserKeyword& get_RSCONSTT() { return this->RSCONSTT; }; + const ::Opm::ParserKeyword& get_RSGI() { return this->RSGI; }; + const ::Opm::ParserKeyword& get_RSSPEC() { return this->RSSPEC; }; + const ::Opm::ParserKeyword& get_RSVD() { return this->RSVD; }; + const ::Opm::ParserKeyword& get_RTEMP() { return this->RTEMP; }; + const ::Opm::ParserKeyword& get_RTEMPA() { return this->RTEMPA; }; + const ::Opm::ParserKeyword& get_RTEMPVD() { return this->RTEMPVD; }; + const ::Opm::ParserKeyword& get_RUNSPEC() { return this->RUNSPEC; }; + const ::Opm::ParserKeyword& get_RUNSUM() { return this->RUNSUM; }; + const ::Opm::ParserKeyword& get_RV() { return this->RV; }; + const ::Opm::ParserKeyword& get_RVCONST() { return this->RVCONST; }; + const ::Opm::ParserKeyword& get_RVCONSTT() { return this->RVCONSTT; }; + const ::Opm::ParserKeyword& get_RVGI() { return this->RVGI; }; + const ::Opm::ParserKeyword& get_RVVD() { return this->RVVD; }; + const ::Opm::ParserKeyword& get_RVW() { return this->RVW; }; + const ::Opm::ParserKeyword& get_RWGSALT() { return this->RWGSALT; }; + const ::Opm::ParserKeyword& get_SALINITY() { return this->SALINITY; }; + const ::Opm::ParserKeyword& get_SALT() { return this->SALT; }; + const ::Opm::ParserKeyword& get_SALTNODE() { return this->SALTNODE; }; + const ::Opm::ParserKeyword& get_SALTP() { return this->SALTP; }; + const ::Opm::ParserKeyword& get_SALTPVD() { return this->SALTPVD; }; + const ::Opm::ParserKeyword& get_SALTREST() { return this->SALTREST; }; + const ::Opm::ParserKeyword& get_SALTSOL() { return this->SALTSOL; }; + const ::Opm::ParserKeyword& get_SALTVD() { return this->SALTVD; }; + const ::Opm::ParserKeyword& get_SAMG() { return this->SAMG; }; + const ::Opm::ParserKeyword& get_SATNUM() { return this->SATNUM; }; + const ::Opm::ParserKeyword& get_SATOPTS() { return this->SATOPTS; }; + const ::Opm::ParserKeyword& get_SAVE() { return this->SAVE; }; + const ::Opm::ParserKeyword& get_SBIOF() { return this->SBIOF; }; + const ::Opm::ParserKeyword& get_SCALC() { return this->SCALC; }; + const ::Opm::ParserKeyword& get_SCALECRS() { return this->SCALECRS; }; + const ::Opm::ParserKeyword& get_SCALELIM() { return this->SCALELIM; }; + const ::Opm::ParserKeyword& get_SCDATAB() { return this->SCDATAB; }; + const ::Opm::ParserKeyword& get_SCDETAB() { return this->SCDETAB; }; + const ::Opm::ParserKeyword& get_SCDPDIMS() { return this->SCDPDIMS; }; + const ::Opm::ParserKeyword& get_SCDPTAB() { return this->SCDPTAB; }; + const ::Opm::ParserKeyword& get_SCDPTRAC() { return this->SCDPTRAC; }; + const ::Opm::ParserKeyword& get_SCHEDULE() { return this->SCHEDULE; }; + const ::Opm::ParserKeyword& get_SCVD() { return this->SCVD; }; + const ::Opm::ParserKeyword& get_SDENSITY() { return this->SDENSITY; }; + const ::Opm::ParserKeyword& get_SEGMENT_PROBE() { return this->SEGMENT_PROBE; }; + const ::Opm::ParserKeyword& get_SEPARATE() { return this->SEPARATE; }; + const ::Opm::ParserKeyword& get_SEPVALS() { return this->SEPVALS; }; + const ::Opm::ParserKeyword& get_SFOAM() { return this->SFOAM; }; + const ::Opm::ParserKeyword& get_SGAS() { return this->SGAS; }; + const ::Opm::ParserKeyword& get_SGCR() { return this->SGCR; }; + const ::Opm::ParserKeyword& get_SGCWMIS() { return this->SGCWMIS; }; + const ::Opm::ParserKeyword& get_SGF32D() { return this->SGF32D; }; + const ::Opm::ParserKeyword& get_SGFN() { return this->SGFN; }; + const ::Opm::ParserKeyword& get_SGL() { return this->SGL; }; + const ::Opm::ParserKeyword& get_SGLPC() { return this->SGLPC; }; + const ::Opm::ParserKeyword& get_SGOF() { return this->SGOF; }; + const ::Opm::ParserKeyword& get_SGOFLET() { return this->SGOFLET; }; + const ::Opm::ParserKeyword& get_SGU() { return this->SGU; }; + const ::Opm::ParserKeyword& get_SGWFN() { return this->SGWFN; }; + const ::Opm::ParserKeyword& get_SHRATE() { return this->SHRATE; }; + const ::Opm::ParserKeyword& get_SIGMA() { return this->SIGMA; }; + const ::Opm::ParserKeyword& get_SIGMAGDV() { return this->SIGMAGDV; }; + const ::Opm::ParserKeyword& get_SIGMATH() { return this->SIGMATH; }; + const ::Opm::ParserKeyword& get_SIGMAV() { return this->SIGMAV; }; + const ::Opm::ParserKeyword& get_SIMULATE() { return this->SIMULATE; }; + const ::Opm::ParserKeyword& get_SKIP() { return this->SKIP; }; + const ::Opm::ParserKeyword& get_SKIP100() { return this->SKIP100; }; + const ::Opm::ParserKeyword& get_SKIP300() { return this->SKIP300; }; + const ::Opm::ParserKeyword& get_SKIPREST() { return this->SKIPREST; }; + const ::Opm::ParserKeyword& get_SKPRPOLY() { return this->SKPRPOLY; }; + const ::Opm::ParserKeyword& get_SKPRWAT() { return this->SKPRWAT; }; + const ::Opm::ParserKeyword& get_SKRO() { return this->SKRO; }; + const ::Opm::ParserKeyword& get_SKRORG() { return this->SKRORG; }; + const ::Opm::ParserKeyword& get_SKRORW() { return this->SKRORW; }; + const ::Opm::ParserKeyword& get_SKRW() { return this->SKRW; }; + const ::Opm::ParserKeyword& get_SKRWR() { return this->SKRWR; }; + const ::Opm::ParserKeyword& get_SLAVES() { return this->SLAVES; }; + const ::Opm::ParserKeyword& get_SLGOF() { return this->SLGOF; }; + const ::Opm::ParserKeyword& get_SMICR() { return this->SMICR; }; + const ::Opm::ParserKeyword& get_SMRYDIMS() { return this->SMRYDIMS; }; + const ::Opm::ParserKeyword& get_SMULTX() { return this->SMULTX; }; + const ::Opm::ParserKeyword& get_SMULTY() { return this->SMULTY; }; + const ::Opm::ParserKeyword& get_SMULTZ() { return this->SMULTZ; }; + const ::Opm::ParserKeyword& get_SOCRS() { return this->SOCRS; }; + const ::Opm::ParserKeyword& get_SOF2() { return this->SOF2; }; + const ::Opm::ParserKeyword& get_SOF3() { return this->SOF3; }; + const ::Opm::ParserKeyword& get_SOF32D() { return this->SOF32D; }; + const ::Opm::ParserKeyword& get_SOGCR() { return this->SOGCR; }; + const ::Opm::ParserKeyword& get_SOIL() { return this->SOIL; }; + const ::Opm::ParserKeyword& get_SOLUTION() { return this->SOLUTION; }; + const ::Opm::ParserKeyword& get_SOLVCONC() { return this->SOLVCONC; }; + const ::Opm::ParserKeyword& get_SOLVDIMS() { return this->SOLVDIMS; }; + const ::Opm::ParserKeyword& get_SOLVDIRS() { return this->SOLVDIRS; }; + const ::Opm::ParserKeyword& get_SOLVENT() { return this->SOLVENT; }; + const ::Opm::ParserKeyword& get_SOLVFRAC() { return this->SOLVFRAC; }; + const ::Opm::ParserKeyword& get_SOLVNUM() { return this->SOLVNUM; }; + const ::Opm::ParserKeyword& get_SOMGAS() { return this->SOMGAS; }; + const ::Opm::ParserKeyword& get_SOMWAT() { return this->SOMWAT; }; + const ::Opm::ParserKeyword& get_SORWMIS() { return this->SORWMIS; }; + const ::Opm::ParserKeyword& get_SOWCR() { return this->SOWCR; }; + const ::Opm::ParserKeyword& get_SOXYG() { return this->SOXYG; }; + const ::Opm::ParserKeyword& get_SPECGRID() { return this->SPECGRID; }; + const ::Opm::ParserKeyword& get_SPECHEAT() { return this->SPECHEAT; }; + const ::Opm::ParserKeyword& get_SPECROCK() { return this->SPECROCK; }; + const ::Opm::ParserKeyword& get_SPIDER() { return this->SPIDER; }; + const ::Opm::ParserKeyword& get_SPOLY() { return this->SPOLY; }; + const ::Opm::ParserKeyword& get_SPOLYMW() { return this->SPOLYMW; }; + const ::Opm::ParserKeyword& get_SSFN() { return this->SSFN; }; + const ::Opm::ParserKeyword& get_SSGCR() { return this->SSGCR; }; + const ::Opm::ParserKeyword& get_SSGL() { return this->SSGL; }; + const ::Opm::ParserKeyword& get_SSOGCR() { return this->SSOGCR; }; + const ::Opm::ParserKeyword& get_SSOL() { return this->SSOL; }; + const ::Opm::ParserKeyword& get_SSOWCR() { return this->SSOWCR; }; + const ::Opm::ParserKeyword& get_SSWCR() { return this->SSWCR; }; + const ::Opm::ParserKeyword& get_SSWL() { return this->SSWL; }; + const ::Opm::ParserKeyword& get_SSWU() { return this->SSWU; }; + const ::Opm::ParserKeyword& get_START() { return this->START; }; + const ::Opm::ParserKeyword& get_STCOND() { return this->STCOND; }; + const ::Opm::ParserKeyword& get_STOG() { return this->STOG; }; + const ::Opm::ParserKeyword& get_STONE() { return this->STONE; }; + const ::Opm::ParserKeyword& get_STONE1() { return this->STONE1; }; + const ::Opm::ParserKeyword& get_STONE1EX() { return this->STONE1EX; }; + const ::Opm::ParserKeyword& get_STONE2() { return this->STONE2; }; + const ::Opm::ParserKeyword& get_STOW() { return this->STOW; }; + const ::Opm::ParserKeyword& get_STWG() { return this->STWG; }; + const ::Opm::ParserKeyword& get_SUMMARY() { return this->SUMMARY; }; + const ::Opm::ParserKeyword& get_SUMTHIN() { return this->SUMTHIN; }; + const ::Opm::ParserKeyword& get_SUREA() { return this->SUREA; }; + const ::Opm::ParserKeyword& get_SURF() { return this->SURF; }; + const ::Opm::ParserKeyword& get_SURFACT() { return this->SURFACT; }; + const ::Opm::ParserKeyword& get_SURFACTW() { return this->SURFACTW; }; + const ::Opm::ParserKeyword& get_SURFADDW() { return this->SURFADDW; }; + const ::Opm::ParserKeyword& get_SURFADS() { return this->SURFADS; }; + const ::Opm::ParserKeyword& get_SURFCAPD() { return this->SURFCAPD; }; + const ::Opm::ParserKeyword& get_SURFESAL() { return this->SURFESAL; }; + const ::Opm::ParserKeyword& get_SURFNUM() { return this->SURFNUM; }; + const ::Opm::ParserKeyword& get_SURFOPTS() { return this->SURFOPTS; }; + const ::Opm::ParserKeyword& get_SURFROCK() { return this->SURFROCK; }; + const ::Opm::ParserKeyword& get_SURFST() { return this->SURFST; }; + const ::Opm::ParserKeyword& get_SURFSTES() { return this->SURFSTES; }; + const ::Opm::ParserKeyword& get_SURFVISC() { return this->SURFVISC; }; + const ::Opm::ParserKeyword& get_SURFWNUM() { return this->SURFWNUM; }; + const ::Opm::ParserKeyword& get_SWAT() { return this->SWAT; }; + const ::Opm::ParserKeyword& get_SWATINIT() { return this->SWATINIT; }; + const ::Opm::ParserKeyword& get_SWCR() { return this->SWCR; }; + const ::Opm::ParserKeyword& get_SWF32D() { return this->SWF32D; }; + const ::Opm::ParserKeyword& get_SWFN() { return this->SWFN; }; + const ::Opm::ParserKeyword& get_SWINGFAC() { return this->SWINGFAC; }; + const ::Opm::ParserKeyword& get_SWL() { return this->SWL; }; + const ::Opm::ParserKeyword& get_SWLPC() { return this->SWLPC; }; + const ::Opm::ParserKeyword& get_SWOF() { return this->SWOF; }; + const ::Opm::ParserKeyword& get_SWOFLET() { return this->SWOFLET; }; + const ::Opm::ParserKeyword& get_SWU() { return this->SWU; }; + const ::Opm::ParserKeyword& get_TABDIMS() { return this->TABDIMS; }; + const ::Opm::ParserKeyword& get_TBLK() { return this->TBLK; }; + const ::Opm::ParserKeyword& get_TEMP() { return this->TEMP; }; + const ::Opm::ParserKeyword& get_TEMPI() { return this->TEMPI; }; + const ::Opm::ParserKeyword& get_TEMPNODE() { return this->TEMPNODE; }; + const ::Opm::ParserKeyword& get_TEMPTVD() { return this->TEMPTVD; }; + const ::Opm::ParserKeyword& get_TEMPVD() { return this->TEMPVD; }; + const ::Opm::ParserKeyword& get_THCGAS() { return this->THCGAS; }; + const ::Opm::ParserKeyword& get_THCOIL() { return this->THCOIL; }; + const ::Opm::ParserKeyword& get_THCONR() { return this->THCONR; }; + const ::Opm::ParserKeyword& get_THCONSF() { return this->THCONSF; }; + const ::Opm::ParserKeyword& get_THCROCK() { return this->THCROCK; }; + const ::Opm::ParserKeyword& get_THCWATER() { return this->THCWATER; }; + const ::Opm::ParserKeyword& get_THERMAL() { return this->THERMAL; }; + const ::Opm::ParserKeyword& get_THPRES() { return this->THPRES; }; + const ::Opm::ParserKeyword& get_THPRESFT() { return this->THPRESFT; }; + const ::Opm::ParserKeyword& get_TIGHTEN() { return this->TIGHTEN; }; + const ::Opm::ParserKeyword& get_TIGHTENP() { return this->TIGHTENP; }; + const ::Opm::ParserKeyword& get_TIME() { return this->TIME; }; + const ::Opm::ParserKeyword& get_TITLE() { return this->TITLE; }; + const ::Opm::ParserKeyword& get_TLMIXPAR() { return this->TLMIXPAR; }; + const ::Opm::ParserKeyword& get_TLPMIXPA() { return this->TLPMIXPA; }; + const ::Opm::ParserKeyword& get_TNUM() { return this->TNUM; }; + const ::Opm::ParserKeyword& get_TOLCRIT() { return this->TOLCRIT; }; + const ::Opm::ParserKeyword& get_TOPS() { return this->TOPS; }; + const ::Opm::ParserKeyword& get_TPAMEPS() { return this->TPAMEPS; }; + const ::Opm::ParserKeyword& get_TPAMEPSS() { return this->TPAMEPSS; }; + const ::Opm::ParserKeyword& get_TRACER() { return this->TRACER; }; + const ::Opm::ParserKeyword& get_TRACERKM() { return this->TRACERKM; }; + const ::Opm::ParserKeyword& get_TRACERKP() { return this->TRACERKP; }; + const ::Opm::ParserKeyword& get_TRACERS() { return this->TRACERS; }; + const ::Opm::ParserKeyword& get_TRACITVD() { return this->TRACITVD; }; + const ::Opm::ParserKeyword& get_TRACTVD() { return this->TRACTVD; }; + const ::Opm::ParserKeyword& get_TRADS() { return this->TRADS; }; + const ::Opm::ParserKeyword& get_TRANGL() { return this->TRANGL; }; + const ::Opm::ParserKeyword& get_TRANR() { return this->TRANR; }; + const ::Opm::ParserKeyword& get_TRANTHT() { return this->TRANTHT; }; + const ::Opm::ParserKeyword& get_TRANX() { return this->TRANX; }; + const ::Opm::ParserKeyword& get_TRANY() { return this->TRANY; }; + const ::Opm::ParserKeyword& get_TRANZ() { return this->TRANZ; }; + const ::Opm::ParserKeyword& get_TRDCY() { return this->TRDCY; }; + const ::Opm::ParserKeyword& get_TRDIF() { return this->TRDIF; }; + const ::Opm::ParserKeyword& get_TRDIS() { return this->TRDIS; }; + const ::Opm::ParserKeyword& get_TREF() { return this->TREF; }; + const ::Opm::ParserKeyword& get_TREFS() { return this->TREFS; }; + const ::Opm::ParserKeyword& get_TRKPF() { return this->TRKPF; }; + const ::Opm::ParserKeyword& get_TRNHD() { return this->TRNHD; }; + const ::Opm::ParserKeyword& get_TRPLPORO() { return this->TRPLPORO; }; + const ::Opm::ParserKeyword& get_TRROCK() { return this->TRROCK; }; + const ::Opm::ParserKeyword& get_TSTEP() { return this->TSTEP; }; + const ::Opm::ParserKeyword& get_TUNING() { return this->TUNING; }; + const ::Opm::ParserKeyword& get_TUNINGDP() { return this->TUNINGDP; }; + const ::Opm::ParserKeyword& get_TUNINGH() { return this->TUNINGH; }; + const ::Opm::ParserKeyword& get_TUNINGL() { return this->TUNINGL; }; + const ::Opm::ParserKeyword& get_TUNINGS() { return this->TUNINGS; }; + const ::Opm::ParserKeyword& get_TVDP() { return this->TVDP; }; + const ::Opm::ParserKeyword& get_TZONE() { return this->TZONE; }; + const ::Opm::ParserKeyword& get_UDADIMS() { return this->UDADIMS; }; + const ::Opm::ParserKeyword& get_UDQ() { return this->UDQ; }; + const ::Opm::ParserKeyword& get_UDQDIMS() { return this->UDQDIMS; }; + const ::Opm::ParserKeyword& get_UDQPARAM() { return this->UDQPARAM; }; + const ::Opm::ParserKeyword& get_UDT() { return this->UDT; }; + const ::Opm::ParserKeyword& get_UDTDIMS() { return this->UDTDIMS; }; + const ::Opm::ParserKeyword& get_UNCODHMD() { return this->UNCODHMD; }; + const ::Opm::ParserKeyword& get_UNIFIN() { return this->UNIFIN; }; + const ::Opm::ParserKeyword& get_UNIFOUT() { return this->UNIFOUT; }; + const ::Opm::ParserKeyword& get_UNIFOUTS() { return this->UNIFOUTS; }; + const ::Opm::ParserKeyword& get_UNIFSAVE() { return this->UNIFSAVE; }; + const ::Opm::ParserKeyword& get_USECUPL() { return this->USECUPL; }; + const ::Opm::ParserKeyword& get_USEFLUX() { return this->USEFLUX; }; + const ::Opm::ParserKeyword& get_USENOFLO() { return this->USENOFLO; }; + const ::Opm::ParserKeyword& get_VAPOIL() { return this->VAPOIL; }; + const ::Opm::ParserKeyword& get_VAPPARS() { return this->VAPPARS; }; + const ::Opm::ParserKeyword& get_VAPWAT() { return this->VAPWAT; }; + const ::Opm::ParserKeyword& get_VDFLOW() { return this->VDFLOW; }; + const ::Opm::ParserKeyword& get_VDFLOWR() { return this->VDFLOWR; }; + const ::Opm::ParserKeyword& get_VE() { return this->VE; }; + const ::Opm::ParserKeyword& get_VEDEBUG() { return this->VEDEBUG; }; + const ::Opm::ParserKeyword& get_VEFIN() { return this->VEFIN; }; + const ::Opm::ParserKeyword& get_VEFRAC() { return this->VEFRAC; }; + const ::Opm::ParserKeyword& get_VEFRACP() { return this->VEFRACP; }; + const ::Opm::ParserKeyword& get_VEFRACPV() { return this->VEFRACPV; }; + const ::Opm::ParserKeyword& get_VEFRACV() { return this->VEFRACV; }; + const ::Opm::ParserKeyword& get_VFPCHK() { return this->VFPCHK; }; + const ::Opm::ParserKeyword& get_VFPIDIMS() { return this->VFPIDIMS; }; + const ::Opm::ParserKeyword& get_VFPINJ() { return this->VFPINJ; }; + const ::Opm::ParserKeyword& get_VFPPDIMS() { return this->VFPPDIMS; }; + const ::Opm::ParserKeyword& get_VFPPROD() { return this->VFPPROD; }; + const ::Opm::ParserKeyword& get_VFPTABL() { return this->VFPTABL; }; + const ::Opm::ParserKeyword& get_VISAGE() { return this->VISAGE; }; + const ::Opm::ParserKeyword& get_VISCD() { return this->VISCD; }; + const ::Opm::ParserKeyword& get_VISCREF() { return this->VISCREF; }; + const ::Opm::ParserKeyword& get_VISDATES() { return this->VISDATES; }; + const ::Opm::ParserKeyword& get_VISOPTS() { return this->VISOPTS; }; + const ::Opm::ParserKeyword& get_WAGHYSTR() { return this->WAGHYSTR; }; + const ::Opm::ParserKeyword& get_WAITBAL() { return this->WAITBAL; }; + const ::Opm::ParserKeyword& get_WALKALIN() { return this->WALKALIN; }; + const ::Opm::ParserKeyword& get_WALQCALC() { return this->WALQCALC; }; + const ::Opm::ParserKeyword& get_WAPI() { return this->WAPI; }; + const ::Opm::ParserKeyword& get_WARN() { return this->WARN; }; + const ::Opm::ParserKeyword& get_WATDENT() { return this->WATDENT; }; + const ::Opm::ParserKeyword& get_WATER() { return this->WATER; }; + const ::Opm::ParserKeyword& get_WATJT() { return this->WATJT; }; + const ::Opm::ParserKeyword& get_WATVISCT() { return this->WATVISCT; }; + const ::Opm::ParserKeyword& get_WBHGLR() { return this->WBHGLR; }; + const ::Opm::ParserKeyword& get_WBOREVOL() { return this->WBOREVOL; }; + const ::Opm::ParserKeyword& get_WCALCVAL() { return this->WCALCVAL; }; + const ::Opm::ParserKeyword& get_WCONHIST() { return this->WCONHIST; }; + const ::Opm::ParserKeyword& get_WCONINJ() { return this->WCONINJ; }; + const ::Opm::ParserKeyword& get_WCONINJE() { return this->WCONINJE; }; + const ::Opm::ParserKeyword& get_WCONINJH() { return this->WCONINJH; }; + const ::Opm::ParserKeyword& get_WCONINJP() { return this->WCONINJP; }; + const ::Opm::ParserKeyword& get_WCONPROD() { return this->WCONPROD; }; + const ::Opm::ParserKeyword& get_WCUTBACK() { return this->WCUTBACK; }; + const ::Opm::ParserKeyword& get_WCUTBACT() { return this->WCUTBACT; }; + const ::Opm::ParserKeyword& get_WCYCLE() { return this->WCYCLE; }; + const ::Opm::ParserKeyword& get_WDFAC() { return this->WDFAC; }; + const ::Opm::ParserKeyword& get_WDFACCOR() { return this->WDFACCOR; }; + const ::Opm::ParserKeyword& get_WDRILPRI() { return this->WDRILPRI; }; + const ::Opm::ParserKeyword& get_WDRILRES() { return this->WDRILRES; }; + const ::Opm::ParserKeyword& get_WDRILTIM() { return this->WDRILTIM; }; + const ::Opm::ParserKeyword& get_WECON() { return this->WECON; }; + const ::Opm::ParserKeyword& get_WECONINJ() { return this->WECONINJ; }; + const ::Opm::ParserKeyword& get_WECONT() { return this->WECONT; }; + const ::Opm::ParserKeyword& get_WEFAC() { return this->WEFAC; }; + const ::Opm::ParserKeyword& get_WELCNTL() { return this->WELCNTL; }; + const ::Opm::ParserKeyword& get_WELDEBUG() { return this->WELDEBUG; }; + const ::Opm::ParserKeyword& get_WELDRAW() { return this->WELDRAW; }; + const ::Opm::ParserKeyword& get_WELEVNT() { return this->WELEVNT; }; + const ::Opm::ParserKeyword& get_WELLDIMS() { return this->WELLDIMS; }; + const ::Opm::ParserKeyword& get_WELL_COMPLETION_PROBE() { return this->WELL_COMPLETION_PROBE; }; + const ::Opm::ParserKeyword& get_WELL_PROBE() { return this->WELL_PROBE; }; + const ::Opm::ParserKeyword& get_WELMOVEL() { return this->WELMOVEL; }; + const ::Opm::ParserKeyword& get_WELOPEN() { return this->WELOPEN; }; + const ::Opm::ParserKeyword& get_WELOPENL() { return this->WELOPENL; }; + const ::Opm::ParserKeyword& get_WELPI() { return this->WELPI; }; + const ::Opm::ParserKeyword& get_WELPRI() { return this->WELPRI; }; + const ::Opm::ParserKeyword& get_WELSEGS() { return this->WELSEGS; }; + const ::Opm::ParserKeyword& get_WELSOMIN() { return this->WELSOMIN; }; + const ::Opm::ParserKeyword& get_WELSPECL() { return this->WELSPECL; }; + const ::Opm::ParserKeyword& get_WELSPECS() { return this->WELSPECS; }; + const ::Opm::ParserKeyword& get_WELTARG() { return this->WELTARG; }; + const ::Opm::ParserKeyword& get_WFOAM() { return this->WFOAM; }; + const ::Opm::ParserKeyword& get_WFRICSEG() { return this->WFRICSEG; }; + const ::Opm::ParserKeyword& get_WFRICSGL() { return this->WFRICSGL; }; + const ::Opm::ParserKeyword& get_WFRICTN() { return this->WFRICTN; }; + const ::Opm::ParserKeyword& get_WFRICTNL() { return this->WFRICTNL; }; + const ::Opm::ParserKeyword& get_WGASPROD() { return this->WGASPROD; }; + const ::Opm::ParserKeyword& get_WGORPEN() { return this->WGORPEN; }; + const ::Opm::ParserKeyword& get_WGRUPCON() { return this->WGRUPCON; }; + const ::Opm::ParserKeyword& get_WH2NUM() { return this->WH2NUM; }; + const ::Opm::ParserKeyword& get_WH3NUM() { return this->WH3NUM; }; + const ::Opm::ParserKeyword& get_WHEDREFD() { return this->WHEDREFD; }; + const ::Opm::ParserKeyword& get_WHISTCTL() { return this->WHISTCTL; }; + const ::Opm::ParserKeyword& get_WHTEMP() { return this->WHTEMP; }; + const ::Opm::ParserKeyword& get_WINJMULT() { return this->WINJMULT; }; + const ::Opm::ParserKeyword& get_WINJTEMP() { return this->WINJTEMP; }; + const ::Opm::ParserKeyword& get_WLIFT() { return this->WLIFT; }; + const ::Opm::ParserKeyword& get_WLIFTOPT() { return this->WLIFTOPT; }; + const ::Opm::ParserKeyword& get_WLIMTOL() { return this->WLIMTOL; }; + const ::Opm::ParserKeyword& get_WLIST() { return this->WLIST; }; + const ::Opm::ParserKeyword& get_WLISTARG() { return this->WLISTARG; }; + const ::Opm::ParserKeyword& get_WLISTNAM() { return this->WLISTNAM; }; + const ::Opm::ParserKeyword& get_WMICP() { return this->WMICP; }; + const ::Opm::ParserKeyword& get_WNETCTRL() { return this->WNETCTRL; }; + const ::Opm::ParserKeyword& get_WNETDP() { return this->WNETDP; }; + const ::Opm::ParserKeyword& get_WORKLIM() { return this->WORKLIM; }; + const ::Opm::ParserKeyword& get_WORKTHP() { return this->WORKTHP; }; + const ::Opm::ParserKeyword& get_WPAVE() { return this->WPAVE; }; + const ::Opm::ParserKeyword& get_WPAVEDEP() { return this->WPAVEDEP; }; + const ::Opm::ParserKeyword& get_WPIMULT() { return this->WPIMULT; }; + const ::Opm::ParserKeyword& get_WPIMULTL() { return this->WPIMULTL; }; + const ::Opm::ParserKeyword& get_WPITAB() { return this->WPITAB; }; + const ::Opm::ParserKeyword& get_WPLUG() { return this->WPLUG; }; + const ::Opm::ParserKeyword& get_WPMITAB() { return this->WPMITAB; }; + const ::Opm::ParserKeyword& get_WPOLYMER() { return this->WPOLYMER; }; + const ::Opm::ParserKeyword& get_WPOLYRED() { return this->WPOLYRED; }; + const ::Opm::ParserKeyword& get_WPOTCALC() { return this->WPOTCALC; }; + const ::Opm::ParserKeyword& get_WREGROUP() { return this->WREGROUP; }; + const ::Opm::ParserKeyword& get_WRFT() { return this->WRFT; }; + const ::Opm::ParserKeyword& get_WRFTPLT() { return this->WRFTPLT; }; + const ::Opm::ParserKeyword& get_WSALT() { return this->WSALT; }; + const ::Opm::ParserKeyword& get_WSCCLEAN() { return this->WSCCLEAN; }; + const ::Opm::ParserKeyword& get_WSCCLENL() { return this->WSCCLENL; }; + const ::Opm::ParserKeyword& get_WSCTAB() { return this->WSCTAB; }; + const ::Opm::ParserKeyword& get_WSEGAICD() { return this->WSEGAICD; }; + const ::Opm::ParserKeyword& get_WSEGDFIN() { return this->WSEGDFIN; }; + const ::Opm::ParserKeyword& get_WSEGDFMD() { return this->WSEGDFMD; }; + const ::Opm::ParserKeyword& get_WSEGDFPA() { return this->WSEGDFPA; }; + const ::Opm::ParserKeyword& get_WSEGDIMS() { return this->WSEGDIMS; }; + const ::Opm::ParserKeyword& get_WSEGEXSS() { return this->WSEGEXSS; }; + const ::Opm::ParserKeyword& get_WSEGFLIM() { return this->WSEGFLIM; }; + const ::Opm::ParserKeyword& get_WSEGFMOD() { return this->WSEGFMOD; }; + const ::Opm::ParserKeyword& get_WSEGINIT() { return this->WSEGINIT; }; + const ::Opm::ParserKeyword& get_WSEGITER() { return this->WSEGITER; }; + const ::Opm::ParserKeyword& get_WSEGLABY() { return this->WSEGLABY; }; + const ::Opm::ParserKeyword& get_WSEGLINK() { return this->WSEGLINK; }; + const ::Opm::ParserKeyword& get_WSEGMULT() { return this->WSEGMULT; }; + const ::Opm::ParserKeyword& get_WSEGPROP() { return this->WSEGPROP; }; + const ::Opm::ParserKeyword& get_WSEGSEP() { return this->WSEGSEP; }; + const ::Opm::ParserKeyword& get_WSEGSICD() { return this->WSEGSICD; }; + const ::Opm::ParserKeyword& get_WSEGSOLV() { return this->WSEGSOLV; }; + const ::Opm::ParserKeyword& get_WSEGTABL() { return this->WSEGTABL; }; + const ::Opm::ParserKeyword& get_WSEGVALV() { return this->WSEGVALV; }; + const ::Opm::ParserKeyword& get_WSKPTAB() { return this->WSKPTAB; }; + const ::Opm::ParserKeyword& get_WSOLVENT() { return this->WSOLVENT; }; + const ::Opm::ParserKeyword& get_WSURFACT() { return this->WSURFACT; }; + const ::Opm::ParserKeyword& get_WTADD() { return this->WTADD; }; + const ::Opm::ParserKeyword& get_WTEMP() { return this->WTEMP; }; + const ::Opm::ParserKeyword& get_WTEMPQ() { return this->WTEMPQ; }; + const ::Opm::ParserKeyword& get_WTEST() { return this->WTEST; }; + const ::Opm::ParserKeyword& get_WTHPMAX() { return this->WTHPMAX; }; + const ::Opm::ParserKeyword& get_WTMULT() { return this->WTMULT; }; + const ::Opm::ParserKeyword& get_WTRACER() { return this->WTRACER; }; + const ::Opm::ParserKeyword& get_WVFPDP() { return this->WVFPDP; }; + const ::Opm::ParserKeyword& get_WVFPEXP() { return this->WVFPEXP; }; + const ::Opm::ParserKeyword& get_WWPAVE() { return this->WWPAVE; }; + const ::Opm::ParserKeyword& get_ZCORN() { return this->ZCORN; }; + const ::Opm::ParserKeyword& get_ZFACT1() { return this->ZFACT1; }; + const ::Opm::ParserKeyword& get_ZFACT1S() { return this->ZFACT1S; }; + const ::Opm::ParserKeyword& get_ZFACTOR() { return this->ZFACTOR; }; + const ::Opm::ParserKeyword& get_ZFACTORS() { return this->ZFACTORS; }; + const ::Opm::ParserKeyword& get_ZIPP2OFF() { return this->ZIPP2OFF; }; + const ::Opm::ParserKeyword& get_ZIPPY2() { return this->ZIPPY2; }; + + const ::Opm::ParserKeyword& operator[](const std::string& keyword) const { + if (this->keywords.empty()) { + this->keywords.emplace("ACTDIMS", this->ACTDIMS); + this->keywords.emplace("ACTION", this->ACTION); + this->keywords.emplace("ACTIONG", this->ACTIONG); + this->keywords.emplace("ACTIONR", this->ACTIONR); + this->keywords.emplace("ACTIONS", this->ACTIONS); + this->keywords.emplace("ACTIONW", this->ACTIONW); + this->keywords.emplace("ACTIONX", this->ACTIONX); + this->keywords.emplace("ACTNUM", this->ACTNUM); + this->keywords.emplace("ACTPARAM", this->ACTPARAM); + this->keywords.emplace("ADD", this->ADD); + this->keywords.emplace("ADDREG", this->ADDREG); + this->keywords.emplace("ADDZCORN", this->ADDZCORN); + this->keywords.emplace("ADSALNOD", this->ADSALNOD); + this->keywords.emplace("ADSORP", this->ADSORP); + this->keywords.emplace("AITS", this->AITS); + this->keywords.emplace("AITSOFF", this->AITSOFF); + this->keywords.emplace("ALKADS", this->ALKADS); + this->keywords.emplace("ALKALINE", this->ALKALINE); + this->keywords.emplace("ALKROCK", this->ALKROCK); + this->keywords.emplace("ALL", this->ALL); + this->keywords.emplace("ALPOLADS", this->ALPOLADS); + this->keywords.emplace("ALSURFAD", this->ALSURFAD); + this->keywords.emplace("ALSURFST", this->ALSURFST); + this->keywords.emplace("AMALGAM", this->AMALGAM); + this->keywords.emplace("API", this->API); + this->keywords.emplace("APIGROUP", this->APIGROUP); + this->keywords.emplace("APILIM", this->APILIM); + this->keywords.emplace("APIVD", this->APIVD); + this->keywords.emplace("AQANCONL", this->AQANCONL); + this->keywords.emplace("AQANNC", this->AQANNC); + this->keywords.emplace("AQANTRC", this->AQANTRC); + this->keywords.emplace("AQUALIST", this->AQUALIST); + this->keywords.emplace("AQUANCON", this->AQUANCON); + this->keywords.emplace("AQUCHGAS", this->AQUCHGAS); + this->keywords.emplace("AQUCHWAT", this->AQUCHWAT); + this->keywords.emplace("AQUCON", this->AQUCON); + this->keywords.emplace("AQUCT", this->AQUCT); + this->keywords.emplace("AQUCWFAC", this->AQUCWFAC); + this->keywords.emplace("AQUDIMS", this->AQUDIMS); + this->keywords.emplace("AQUFET", this->AQUFET); + this->keywords.emplace("AQUFETP", this->AQUFETP); + this->keywords.emplace("AQUFLUX", this->AQUFLUX); + this->keywords.emplace("AQUIFER_PROBE_ANALYTIC", this->AQUIFER_PROBE_ANALYTIC); + this->keywords.emplace("AQUIFER_PROBE_ANALYTIC_NAMED", this->AQUIFER_PROBE_ANALYTIC_NAMED); + this->keywords.emplace("AQUIFER_PROBE_NUMERIC", this->AQUIFER_PROBE_NUMERIC); + this->keywords.emplace("AQUNNC", this->AQUNNC); + this->keywords.emplace("AQUNUM", this->AQUNUM); + this->keywords.emplace("AQUTAB", this->AQUTAB); + this->keywords.emplace("AUTOCOAR", this->AUTOCOAR); + this->keywords.emplace("AUTOREF", this->AUTOREF); + this->keywords.emplace("BC", this->BC); + this->keywords.emplace("BDENSITY", this->BDENSITY); + this->keywords.emplace("BGGI", this->BGGI); + this->keywords.emplace("BIGMODEL", this->BIGMODEL); + this->keywords.emplace("BLACKOIL", this->BLACKOIL); + this->keywords.emplace("BLOCK_PROBE", this->BLOCK_PROBE); + this->keywords.emplace("BLOCK_PROBE300", this->BLOCK_PROBE300); + this->keywords.emplace("BOGI", this->BOGI); + this->keywords.emplace("BOUNDARY", this->BOUNDARY); + this->keywords.emplace("BOX", this->BOX); + this->keywords.emplace("BPARA", this->BPARA); + this->keywords.emplace("BPIDIMS", this->BPIDIMS); + this->keywords.emplace("BRANPROP", this->BRANPROP); + this->keywords.emplace("BRINE", this->BRINE); + this->keywords.emplace("BTOBALFA", this->BTOBALFA); + this->keywords.emplace("BTOBALFV", this->BTOBALFV); + this->keywords.emplace("CALTRAC", this->CALTRAC); + this->keywords.emplace("CARFIN", this->CARFIN); + this->keywords.emplace("CART", this->CART); + this->keywords.emplace("CBMOPTS", this->CBMOPTS); + this->keywords.emplace("CECON", this->CECON); + this->keywords.emplace("CECONT", this->CECONT); + this->keywords.emplace("CIRCLE", this->CIRCLE); + this->keywords.emplace("CO2STOR", this->CO2STOR); + this->keywords.emplace("CO2STORE", this->CO2STORE); + this->keywords.emplace("COAL", this->COAL); + this->keywords.emplace("COALADS", this->COALADS); + this->keywords.emplace("COALNUM", this->COALNUM); + this->keywords.emplace("COALPP", this->COALPP); + this->keywords.emplace("COARSEN", this->COARSEN); + this->keywords.emplace("COLLAPSE", this->COLLAPSE); + this->keywords.emplace("COLUMNS", this->COLUMNS); + this->keywords.emplace("COMPDAT", this->COMPDAT); + this->keywords.emplace("COMPDATX", this->COMPDATX); + this->keywords.emplace("COMPFLSH", this->COMPFLSH); + this->keywords.emplace("COMPIMB", this->COMPIMB); + this->keywords.emplace("COMPINJK", this->COMPINJK); + this->keywords.emplace("COMPLMPL", this->COMPLMPL); + this->keywords.emplace("COMPLUMP", this->COMPLUMP); + this->keywords.emplace("COMPOFF", this->COMPOFF); + this->keywords.emplace("COMPORD", this->COMPORD); + this->keywords.emplace("COMPRIV", this->COMPRIV); + this->keywords.emplace("COMPRP", this->COMPRP); + this->keywords.emplace("COMPRPL", this->COMPRPL); + this->keywords.emplace("COMPS", this->COMPS); + this->keywords.emplace("COMPSEGL", this->COMPSEGL); + this->keywords.emplace("COMPSEGS", this->COMPSEGS); + this->keywords.emplace("COMPVE", this->COMPVE); + this->keywords.emplace("COMPVEL", this->COMPVEL); + this->keywords.emplace("CONNECTION_PROBE", this->CONNECTION_PROBE); + this->keywords.emplace("COORD", this->COORD); + this->keywords.emplace("COORDSYS", this->COORDSYS); + this->keywords.emplace("COPY", this->COPY); + this->keywords.emplace("COPYBOX", this->COPYBOX); + this->keywords.emplace("COPYREG", this->COPYREG); + this->keywords.emplace("CPIFACT", this->CPIFACT); + this->keywords.emplace("CPIFACTL", this->CPIFACTL); + this->keywords.emplace("CPR", this->CPR); + this->keywords.emplace("CREF", this->CREF); + this->keywords.emplace("CREFS", this->CREFS); + this->keywords.emplace("CRITPERM", this->CRITPERM); + this->keywords.emplace("CSKIN", this->CSKIN); + this->keywords.emplace("DATE", this->DATE); + this->keywords.emplace("DATES", this->DATES); + this->keywords.emplace("DATUM", this->DATUM); + this->keywords.emplace("DATUMR", this->DATUMR); + this->keywords.emplace("DATUMRX", this->DATUMRX); + this->keywords.emplace("DCQDEFN", this->DCQDEFN); + this->keywords.emplace("DEBUG_", this->DEBUG_); + this->keywords.emplace("DELAYACT", this->DELAYACT); + this->keywords.emplace("DENSITY", this->DENSITY); + this->keywords.emplace("DEPTH", this->DEPTH); + this->keywords.emplace("DEPTHTAB", this->DEPTHTAB); + this->keywords.emplace("DEPTHZ", this->DEPTHZ); + this->keywords.emplace("DIAGDISP", this->DIAGDISP); + this->keywords.emplace("DIFF", this->DIFF); + this->keywords.emplace("DIFFC", this->DIFFC); + this->keywords.emplace("DIFFCOAL", this->DIFFCOAL); + this->keywords.emplace("DIFFDP", this->DIFFDP); + this->keywords.emplace("DIFFMMF", this->DIFFMMF); + this->keywords.emplace("DIFFMR", this->DIFFMR); + this->keywords.emplace("DIFFMTHT", this->DIFFMTHT); + this->keywords.emplace("DIFFMX", this->DIFFMX); + this->keywords.emplace("DIFFMY", this->DIFFMY); + this->keywords.emplace("DIFFMZ", this->DIFFMZ); + this->keywords.emplace("DIFFR", this->DIFFR); + this->keywords.emplace("DIFFTHT", this->DIFFTHT); + this->keywords.emplace("DIFFUSE", this->DIFFUSE); + this->keywords.emplace("DIFFX", this->DIFFX); + this->keywords.emplace("DIFFY", this->DIFFY); + this->keywords.emplace("DIFFZ", this->DIFFZ); + this->keywords.emplace("DIMENS", this->DIMENS); + this->keywords.emplace("DIMPES", this->DIMPES); + this->keywords.emplace("DIMPLICT", this->DIMPLICT); + this->keywords.emplace("DISGAS", this->DISGAS); + this->keywords.emplace("DISPDIMS", this->DISPDIMS); + this->keywords.emplace("DISPERSE", this->DISPERSE); + this->keywords.emplace("DOMAINS", this->DOMAINS); + this->keywords.emplace("DPGRID", this->DPGRID); + this->keywords.emplace("DPKRMOD", this->DPKRMOD); + this->keywords.emplace("DPNUM", this->DPNUM); + this->keywords.emplace("DR", this->DR); + this->keywords.emplace("DREF", this->DREF); + this->keywords.emplace("DREFS", this->DREFS); + this->keywords.emplace("DRILPRI", this->DRILPRI); + this->keywords.emplace("DRSDT", this->DRSDT); + this->keywords.emplace("DRSDTCON", this->DRSDTCON); + this->keywords.emplace("DRSDTR", this->DRSDTR); + this->keywords.emplace("DRV", this->DRV); + this->keywords.emplace("DRVDT", this->DRVDT); + this->keywords.emplace("DRVDTR", this->DRVDTR); + this->keywords.emplace("DSPDEINT", this->DSPDEINT); + this->keywords.emplace("DTHETA", this->DTHETA); + this->keywords.emplace("DTHETAV", this->DTHETAV); + this->keywords.emplace("DUALPERM", this->DUALPERM); + this->keywords.emplace("DUALPORO", this->DUALPORO); + this->keywords.emplace("DUMPCUPL", this->DUMPCUPL); + this->keywords.emplace("DUMPFLUX", this->DUMPFLUX); + this->keywords.emplace("DX", this->DX); + this->keywords.emplace("DXV", this->DXV); + this->keywords.emplace("DY", this->DY); + this->keywords.emplace("DYNAMICR", this->DYNAMICR); + this->keywords.emplace("DYNRDIMS", this->DYNRDIMS); + this->keywords.emplace("DYV", this->DYV); + this->keywords.emplace("DZ", this->DZ); + this->keywords.emplace("DZMATRIX", this->DZMATRIX); + this->keywords.emplace("DZMTRX", this->DZMTRX); + this->keywords.emplace("DZMTRXV", this->DZMTRXV); + this->keywords.emplace("DZNET", this->DZNET); + this->keywords.emplace("DZV", this->DZV); + this->keywords.emplace("ECHO", this->ECHO); + this->keywords.emplace("ECLMC", this->ECLMC); + this->keywords.emplace("EDIT", this->EDIT); + this->keywords.emplace("EDITNNC", this->EDITNNC); + this->keywords.emplace("EDITNNCR", this->EDITNNCR); + this->keywords.emplace("EHYSTR", this->EHYSTR); + this->keywords.emplace("EHYSTRR", this->EHYSTRR); + this->keywords.emplace("END", this->END); + this->keywords.emplace("ENDACTIO", this->ENDACTIO); + this->keywords.emplace("ENDBOX", this->ENDBOX); + this->keywords.emplace("ENDDYN", this->ENDDYN); + this->keywords.emplace("ENDFIN", this->ENDFIN); + this->keywords.emplace("ENDINC", this->ENDINC); + this->keywords.emplace("ENDNUM", this->ENDNUM); + this->keywords.emplace("ENDPOINT_SPECIFIERS", this->ENDPOINT_SPECIFIERS); + this->keywords.emplace("ENDSCALE", this->ENDSCALE); + this->keywords.emplace("ENDSKIP", this->ENDSKIP); + this->keywords.emplace("ENKRVD", this->ENKRVD); + this->keywords.emplace("ENPCVD", this->ENPCVD); + this->keywords.emplace("ENPTVD", this->ENPTVD); + this->keywords.emplace("ENSPCVD", this->ENSPCVD); + this->keywords.emplace("EPSDBGS", this->EPSDBGS); + this->keywords.emplace("EPSDEBUG", this->EPSDEBUG); + this->keywords.emplace("EQLDIMS", this->EQLDIMS); + this->keywords.emplace("EQLNUM", this->EQLNUM); + this->keywords.emplace("EQLOPTS", this->EQLOPTS); + this->keywords.emplace("EQLZCORN", this->EQLZCORN); + this->keywords.emplace("EQUALREG", this->EQUALREG); + this->keywords.emplace("EQUALS", this->EQUALS); + this->keywords.emplace("EQUIL", this->EQUIL); + this->keywords.emplace("ESSNODE", this->ESSNODE); + this->keywords.emplace("EXCAVATE", this->EXCAVATE); + this->keywords.emplace("EXCEL", this->EXCEL); + this->keywords.emplace("EXIT", this->EXIT); + this->keywords.emplace("EXTFIN", this->EXTFIN); + this->keywords.emplace("EXTHOST", this->EXTHOST); + this->keywords.emplace("EXTRAPMS", this->EXTRAPMS); + this->keywords.emplace("EXTREPGL", this->EXTREPGL); + this->keywords.emplace("FAULTDIM", this->FAULTDIM); + this->keywords.emplace("FAULTS", this->FAULTS); + this->keywords.emplace("FBHPDEF", this->FBHPDEF); + this->keywords.emplace("FHERCHBL", this->FHERCHBL); + this->keywords.emplace("FIELD", this->FIELD); + this->keywords.emplace("FIELD_PROBE", this->FIELD_PROBE); + this->keywords.emplace("FILEUNIT", this->FILEUNIT); + this->keywords.emplace("FILLEPS", this->FILLEPS); + this->keywords.emplace("FIPNUM", this->FIPNUM); + this->keywords.emplace("FIPOWG", this->FIPOWG); + this->keywords.emplace("FIPSEP", this->FIPSEP); + this->keywords.emplace("FIP_PROBE", this->FIP_PROBE); + this->keywords.emplace("FLUXNUM", this->FLUXNUM); + this->keywords.emplace("FLUXREG", this->FLUXREG); + this->keywords.emplace("FLUXTYPE", this->FLUXTYPE); + this->keywords.emplace("FMTHMD", this->FMTHMD); + this->keywords.emplace("FMTIN", this->FMTIN); + this->keywords.emplace("FMTOUT", this->FMTOUT); + this->keywords.emplace("FMWSET", this->FMWSET); + this->keywords.emplace("FOAM", this->FOAM); + this->keywords.emplace("FOAMADS", this->FOAMADS); + this->keywords.emplace("FOAMDCYO", this->FOAMDCYO); + this->keywords.emplace("FOAMDCYW", this->FOAMDCYW); + this->keywords.emplace("FOAMFCN", this->FOAMFCN); + this->keywords.emplace("FOAMFRM", this->FOAMFRM); + this->keywords.emplace("FOAMFSC", this->FOAMFSC); + this->keywords.emplace("FOAMFSO", this->FOAMFSO); + this->keywords.emplace("FOAMFST", this->FOAMFST); + this->keywords.emplace("FOAMFSW", this->FOAMFSW); + this->keywords.emplace("FOAMMOB", this->FOAMMOB); + this->keywords.emplace("FOAMMOBP", this->FOAMMOBP); + this->keywords.emplace("FOAMMOBS", this->FOAMMOBS); + this->keywords.emplace("FOAMOPTS", this->FOAMOPTS); + this->keywords.emplace("FOAMROCK", this->FOAMROCK); + this->keywords.emplace("FORMFEED", this->FORMFEED); + this->keywords.emplace("FRICTION", this->FRICTION); + this->keywords.emplace("FULLIMP", this->FULLIMP); + this->keywords.emplace("GAS", this->GAS); + this->keywords.emplace("GASBEGIN", this->GASBEGIN); + this->keywords.emplace("GASCONC", this->GASCONC); + this->keywords.emplace("GASDENT", this->GASDENT); + this->keywords.emplace("GASEND", this->GASEND); + this->keywords.emplace("GASFCOMP", this->GASFCOMP); + this->keywords.emplace("GASFDECR", this->GASFDECR); + this->keywords.emplace("GASFDELC", this->GASFDELC); + this->keywords.emplace("GASFIELD", this->GASFIELD); + this->keywords.emplace("GASFTARG", this->GASFTARG); + this->keywords.emplace("GASJT", this->GASJT); + this->keywords.emplace("GASMONTH", this->GASMONTH); + this->keywords.emplace("GASPERIO", this->GASPERIO); + this->keywords.emplace("GASSATC", this->GASSATC); + this->keywords.emplace("GASVISCT", this->GASVISCT); + this->keywords.emplace("GASYEAR", this->GASYEAR); + this->keywords.emplace("GCALECON", this->GCALECON); + this->keywords.emplace("GCOMPIDX", this->GCOMPIDX); + this->keywords.emplace("GCONCAL", this->GCONCAL); + this->keywords.emplace("GCONENG", this->GCONENG); + this->keywords.emplace("GCONINJE", this->GCONINJE); + this->keywords.emplace("GCONPRI", this->GCONPRI); + this->keywords.emplace("GCONPROD", this->GCONPROD); + this->keywords.emplace("GCONSALE", this->GCONSALE); + this->keywords.emplace("GCONSUMP", this->GCONSUMP); + this->keywords.emplace("GCONTOL", this->GCONTOL); + this->keywords.emplace("GCUTBACK", this->GCUTBACK); + this->keywords.emplace("GCUTBACT", this->GCUTBACT); + this->keywords.emplace("GCVD", this->GCVD); + this->keywords.emplace("GDCQ", this->GDCQ); + this->keywords.emplace("GDCQECON", this->GDCQECON); + this->keywords.emplace("GDFILE", this->GDFILE); + this->keywords.emplace("GDIMS", this->GDIMS); + this->keywords.emplace("GDORIENT", this->GDORIENT); + this->keywords.emplace("GDRILPOT", this->GDRILPOT); + this->keywords.emplace("GECON", this->GECON); + this->keywords.emplace("GECONT", this->GECONT); + this->keywords.emplace("GEFAC", this->GEFAC); + this->keywords.emplace("GETDATA", this->GETDATA); + this->keywords.emplace("GETGLOB", this->GETGLOB); + this->keywords.emplace("GI", this->GI); + this->keywords.emplace("GIALL", this->GIALL); + this->keywords.emplace("GIMODEL", this->GIMODEL); + this->keywords.emplace("GINODE", this->GINODE); + this->keywords.emplace("GLIFTLIM", this->GLIFTLIM); + this->keywords.emplace("GLIFTOPT", this->GLIFTOPT); + this->keywords.emplace("GMWSET", this->GMWSET); + this->keywords.emplace("GNETDP", this->GNETDP); + this->keywords.emplace("GNETINJE", this->GNETINJE); + this->keywords.emplace("GNETPUMP", this->GNETPUMP); + this->keywords.emplace("GPMAINT", this->GPMAINT); + this->keywords.emplace("GRADGRUP", this->GRADGRUP); + this->keywords.emplace("GRADRESV", this->GRADRESV); + this->keywords.emplace("GRADRFT", this->GRADRFT); + this->keywords.emplace("GRADWELL", this->GRADWELL); + this->keywords.emplace("GRAVCONS", this->GRAVCONS); + this->keywords.emplace("GRAVDR", this->GRAVDR); + this->keywords.emplace("GRAVDRB", this->GRAVDRB); + this->keywords.emplace("GRAVDRM", this->GRAVDRM); + this->keywords.emplace("GRAVITY", this->GRAVITY); + this->keywords.emplace("GRDREACH", this->GRDREACH); + this->keywords.emplace("GRID", this->GRID); + this->keywords.emplace("GRIDFILE", this->GRIDFILE); + this->keywords.emplace("GRIDOPTS", this->GRIDOPTS); + this->keywords.emplace("GRIDUNIT", this->GRIDUNIT); + this->keywords.emplace("GROUP_PROBE", this->GROUP_PROBE); + this->keywords.emplace("GRUPMAST", this->GRUPMAST); + this->keywords.emplace("GRUPNET", this->GRUPNET); + this->keywords.emplace("GRUPRIG", this->GRUPRIG); + this->keywords.emplace("GRUPSLAV", this->GRUPSLAV); + this->keywords.emplace("GRUPTARG", this->GRUPTARG); + this->keywords.emplace("GRUPTREE", this->GRUPTREE); + this->keywords.emplace("GSATINJE", this->GSATINJE); + this->keywords.emplace("GSATPROD", this->GSATPROD); + this->keywords.emplace("GSEPCOND", this->GSEPCOND); + this->keywords.emplace("GSSCPTST", this->GSSCPTST); + this->keywords.emplace("GSWINGF", this->GSWINGF); + this->keywords.emplace("GTADD", this->GTADD); + this->keywords.emplace("GTMULT", this->GTMULT); + this->keywords.emplace("GUIDECAL", this->GUIDECAL); + this->keywords.emplace("GUIDERAT", this->GUIDERAT); + this->keywords.emplace("GUPFREQ", this->GUPFREQ); + this->keywords.emplace("GWRTWCV", this->GWRTWCV); + this->keywords.emplace("HALFTRAN", this->HALFTRAN); + this->keywords.emplace("HAxxxxxx", this->HAxxxxxx); + this->keywords.emplace("HBNUM", this->HBNUM); + this->keywords.emplace("HDISP", this->HDISP); + this->keywords.emplace("HEATCR", this->HEATCR); + this->keywords.emplace("HEATCRT", this->HEATCRT); + this->keywords.emplace("HMAQUCT", this->HMAQUCT); + this->keywords.emplace("HMAQUFET", this->HMAQUFET); + this->keywords.emplace("HMAQUNUM", this->HMAQUNUM); + this->keywords.emplace("HMDIMS", this->HMDIMS); + this->keywords.emplace("HMFAULTS", this->HMFAULTS); + this->keywords.emplace("HMMLAQUN", this->HMMLAQUN); + this->keywords.emplace("HMMLCTAQ", this->HMMLCTAQ); + this->keywords.emplace("HMMLFTAQ", this->HMMLFTAQ); + this->keywords.emplace("HMMLTWCN", this->HMMLTWCN); + this->keywords.emplace("HMMULTFT", this->HMMULTFT); + this->keywords.emplace("HMMULTSG", this->HMMULTSG); + this->keywords.emplace("HMMULTxx", this->HMMULTxx); + this->keywords.emplace("HMPROPS", this->HMPROPS); + this->keywords.emplace("HMROCK", this->HMROCK); + this->keywords.emplace("HMROCKT", this->HMROCKT); + this->keywords.emplace("HMRREF", this->HMRREF); + this->keywords.emplace("HMWELCON", this->HMWELCON); + this->keywords.emplace("HMWPIMLT", this->HMWPIMLT); + this->keywords.emplace("HMxxxxxx", this->HMxxxxxx); + this->keywords.emplace("HRFIN", this->HRFIN); + this->keywords.emplace("HWKRO", this->HWKRO); + this->keywords.emplace("HWKRORG", this->HWKRORG); + this->keywords.emplace("HWKRORW", this->HWKRORW); + this->keywords.emplace("HWKRW", this->HWKRW); + this->keywords.emplace("HWKRWR", this->HWKRWR); + this->keywords.emplace("HWPCW", this->HWPCW); + this->keywords.emplace("HWSNUM", this->HWSNUM); + this->keywords.emplace("HWSOGCR", this->HWSOGCR); + this->keywords.emplace("HWSOWCR", this->HWSOWCR); + this->keywords.emplace("HWSWCR", this->HWSWCR); + this->keywords.emplace("HWSWL", this->HWSWL); + this->keywords.emplace("HWSWLPC", this->HWSWLPC); + this->keywords.emplace("HWSWU", this->HWSWU); + this->keywords.emplace("HXFIN", this->HXFIN); + this->keywords.emplace("HYDRHEAD", this->HYDRHEAD); + this->keywords.emplace("HYFIN", this->HYFIN); + this->keywords.emplace("HYMOBGDR", this->HYMOBGDR); + this->keywords.emplace("HYST", this->HYST); + this->keywords.emplace("HYSTCHCK", this->HYSTCHCK); + this->keywords.emplace("HZFIN", this->HZFIN); + this->keywords.emplace("IHOST", this->IHOST); + this->keywords.emplace("IMBNUM", this->IMBNUM); + this->keywords.emplace("IMBNUMMF", this->IMBNUMMF); + this->keywords.emplace("IMKRVD", this->IMKRVD); + this->keywords.emplace("IMPCVD", this->IMPCVD); + this->keywords.emplace("IMPES", this->IMPES); + this->keywords.emplace("IMPLICIT", this->IMPLICIT); + this->keywords.emplace("IMPORT", this->IMPORT); + this->keywords.emplace("IMPTVD", this->IMPTVD); + this->keywords.emplace("IMSPCVD", this->IMSPCVD); + this->keywords.emplace("INCLUDE", this->INCLUDE); + this->keywords.emplace("INIT", this->INIT); + this->keywords.emplace("INRAD", this->INRAD); + this->keywords.emplace("INSPEC", this->INSPEC); + this->keywords.emplace("INTPC", this->INTPC); + this->keywords.emplace("IONROCK", this->IONROCK); + this->keywords.emplace("IONXROCK", this->IONXROCK); + this->keywords.emplace("IONXSURF", this->IONXSURF); + this->keywords.emplace("IPCG", this->IPCG); + this->keywords.emplace("IPCW", this->IPCW); + this->keywords.emplace("ISGCR", this->ISGCR); + this->keywords.emplace("ISGL", this->ISGL); + this->keywords.emplace("ISGLPC", this->ISGLPC); + this->keywords.emplace("ISGU", this->ISGU); + this->keywords.emplace("ISOGCR", this->ISOGCR); + this->keywords.emplace("ISOLNUM", this->ISOLNUM); + this->keywords.emplace("ISOWCR", this->ISOWCR); + this->keywords.emplace("ISWCR", this->ISWCR); + this->keywords.emplace("ISWL", this->ISWL); + this->keywords.emplace("ISWLPC", this->ISWLPC); + this->keywords.emplace("ISWU", this->ISWU); + this->keywords.emplace("JFUNC", this->JFUNC); + this->keywords.emplace("JFUNCR", this->JFUNCR); + this->keywords.emplace("KRNUM", this->KRNUM); + this->keywords.emplace("KRNUMMF", this->KRNUMMF); + this->keywords.emplace("LAB", this->LAB); + this->keywords.emplace("LANGMPL", this->LANGMPL); + this->keywords.emplace("LANGMUIR", this->LANGMUIR); + this->keywords.emplace("LANGSOLV", this->LANGSOLV); + this->keywords.emplace("LCUNIT", this->LCUNIT); + this->keywords.emplace("LGR", this->LGR); + this->keywords.emplace("LGRCOPY", this->LGRCOPY); + this->keywords.emplace("LGRFREE", this->LGRFREE); + this->keywords.emplace("LGRLOCK", this->LGRLOCK); + this->keywords.emplace("LGROFF", this->LGROFF); + this->keywords.emplace("LGRON", this->LGRON); + this->keywords.emplace("LICENSES", this->LICENSES); + this->keywords.emplace("LIFTOPT", this->LIFTOPT); + this->keywords.emplace("LINCOM", this->LINCOM); + this->keywords.emplace("LINKPERM", this->LINKPERM); + this->keywords.emplace("LIVEOIL", this->LIVEOIL); + this->keywords.emplace("LKRO", this->LKRO); + this->keywords.emplace("LKRORG", this->LKRORG); + this->keywords.emplace("LKRORW", this->LKRORW); + this->keywords.emplace("LKRW", this->LKRW); + this->keywords.emplace("LKRWR", this->LKRWR); + this->keywords.emplace("LOAD", this->LOAD); + this->keywords.emplace("LOWSALT", this->LOWSALT); + this->keywords.emplace("LPCW", this->LPCW); + this->keywords.emplace("LSALTFNC", this->LSALTFNC); + this->keywords.emplace("LSLTWNUM", this->LSLTWNUM); + this->keywords.emplace("LSNUM", this->LSNUM); + this->keywords.emplace("LSOGCR", this->LSOGCR); + this->keywords.emplace("LSOWCR", this->LSOWCR); + this->keywords.emplace("LSWCR", this->LSWCR); + this->keywords.emplace("LSWL", this->LSWL); + this->keywords.emplace("LSWLPC", this->LSWLPC); + this->keywords.emplace("LSWU", this->LSWU); + this->keywords.emplace("LTOSIGMA", this->LTOSIGMA); + this->keywords.emplace("LWKRO", this->LWKRO); + this->keywords.emplace("LWKRORG", this->LWKRORG); + this->keywords.emplace("LWKRORW", this->LWKRORW); + this->keywords.emplace("LWKRW", this->LWKRW); + this->keywords.emplace("LWKRWR", this->LWKRWR); + this->keywords.emplace("LWPCW", this->LWPCW); + this->keywords.emplace("LWSLTNUM", this->LWSLTNUM); + this->keywords.emplace("LWSNUM", this->LWSNUM); + this->keywords.emplace("LWSOGCR", this->LWSOGCR); + this->keywords.emplace("LWSOWCR", this->LWSOWCR); + this->keywords.emplace("LWSWCR", this->LWSWCR); + this->keywords.emplace("LWSWL", this->LWSWL); + this->keywords.emplace("LWSWLPC", this->LWSWLPC); + this->keywords.emplace("LWSWU", this->LWSWU); + this->keywords.emplace("LX", this->LX); + this->keywords.emplace("LXFIN", this->LXFIN); + this->keywords.emplace("LY", this->LY); + this->keywords.emplace("LYFIN", this->LYFIN); + this->keywords.emplace("LZ", this->LZ); + this->keywords.emplace("LZFIN", this->LZFIN); + this->keywords.emplace("MAPAXES", this->MAPAXES); + this->keywords.emplace("MAPUNITS", this->MAPUNITS); + this->keywords.emplace("MASSFLOW", this->MASSFLOW); + this->keywords.emplace("MATCORR", this->MATCORR); + this->keywords.emplace("MAXVALUE", this->MAXVALUE); + this->keywords.emplace("MEMORY", this->MEMORY); + this->keywords.emplace("MESSAGE", this->MESSAGE); + this->keywords.emplace("MESSAGES", this->MESSAGES); + this->keywords.emplace("MESSOPTS", this->MESSOPTS); + this->keywords.emplace("MESSSRVC", this->MESSSRVC); + this->keywords.emplace("METRIC", this->METRIC); + this->keywords.emplace("MICP", this->MICP); + this->keywords.emplace("MICPPARA", this->MICPPARA); + this->keywords.emplace("MINNNCT", this->MINNNCT); + this->keywords.emplace("MINNPCOL", this->MINNPCOL); + this->keywords.emplace("MINPORV", this->MINPORV); + this->keywords.emplace("MINPV", this->MINPV); + this->keywords.emplace("MINPVFIL", this->MINPVFIL); + this->keywords.emplace("MINPVV", this->MINPVV); + this->keywords.emplace("MINVALUE", this->MINVALUE); + this->keywords.emplace("MISC", this->MISC); + this->keywords.emplace("MISCIBLE", this->MISCIBLE); + this->keywords.emplace("MISCNUM", this->MISCNUM); + this->keywords.emplace("MLANG", this->MLANG); + this->keywords.emplace("MLANGSLV", this->MLANGSLV); + this->keywords.emplace("MONITOR", this->MONITOR); + this->keywords.emplace("MPFANUM", this->MPFANUM); + this->keywords.emplace("MPFNNC", this->MPFNNC); + this->keywords.emplace("MSFN", this->MSFN); + this->keywords.emplace("MSGFILE", this->MSGFILE); + this->keywords.emplace("MSUM_PROBE", this->MSUM_PROBE); + this->keywords.emplace("MULSGGD", this->MULSGGD); + this->keywords.emplace("MULSGGDV", this->MULSGGDV); + this->keywords.emplace("MULTFLT", this->MULTFLT); + this->keywords.emplace("MULTIN", this->MULTIN); + this->keywords.emplace("MULTIPLY", this->MULTIPLY); + this->keywords.emplace("MULTIREG", this->MULTIREG); + this->keywords.emplace("MULTNUM", this->MULTNUM); + this->keywords.emplace("MULTOUT", this->MULTOUT); + this->keywords.emplace("MULTOUTS", this->MULTOUTS); + this->keywords.emplace("MULTPV", this->MULTPV); + this->keywords.emplace("MULTREAL", this->MULTREAL); + this->keywords.emplace("MULTREGD", this->MULTREGD); + this->keywords.emplace("MULTREGH", this->MULTREGH); + this->keywords.emplace("MULTREGP", this->MULTREGP); + this->keywords.emplace("MULTREGT", this->MULTREGT); + this->keywords.emplace("MULTSIG", this->MULTSIG); + this->keywords.emplace("MULTSIGV", this->MULTSIGV); + this->keywords.emplace("MULT_XYZ", this->MULT_XYZ); + this->keywords.emplace("MW", this->MW); + this->keywords.emplace("MWS", this->MWS); + this->keywords.emplace("NARROW", this->NARROW); + this->keywords.emplace("NCONSUMP", this->NCONSUMP); + this->keywords.emplace("NEFAC", this->NEFAC); + this->keywords.emplace("NETBALAN", this->NETBALAN); + this->keywords.emplace("NETCOMPA", this->NETCOMPA); + this->keywords.emplace("NETWORK", this->NETWORK); + this->keywords.emplace("NEWTRAN", this->NEWTRAN); + this->keywords.emplace("NEXTSTEP", this->NEXTSTEP); + this->keywords.emplace("NEXTSTPL", this->NEXTSTPL); + this->keywords.emplace("NINENUM", this->NINENUM); + this->keywords.emplace("NINEPOIN", this->NINEPOIN); + this->keywords.emplace("NMATOPTS", this->NMATOPTS); + this->keywords.emplace("NMATRIX", this->NMATRIX); + this->keywords.emplace("NMESSAGE", this->NMESSAGE); + this->keywords.emplace("NNC", this->NNC); + this->keywords.emplace("NNEWTF", this->NNEWTF); + this->keywords.emplace("NOCASC", this->NOCASC); + this->keywords.emplace("NODEPROP", this->NODEPROP); + this->keywords.emplace("NODPPM", this->NODPPM); + this->keywords.emplace("NOECHO", this->NOECHO); + this->keywords.emplace("NOGGF", this->NOGGF); + this->keywords.emplace("NOGRAV", this->NOGRAV); + this->keywords.emplace("NOHMD", this->NOHMD); + this->keywords.emplace("NOHMO", this->NOHMO); + this->keywords.emplace("NOHYST", this->NOHYST); + this->keywords.emplace("NOINSPEC", this->NOINSPEC); + this->keywords.emplace("NOMONITO", this->NOMONITO); + this->keywords.emplace("NONNC", this->NONNC); + this->keywords.emplace("NORSSPEC", this->NORSSPEC); + this->keywords.emplace("NOSIM", this->NOSIM); + this->keywords.emplace("NOWARN", this->NOWARN); + this->keywords.emplace("NOWARNEP", this->NOWARNEP); + this->keywords.emplace("NRSOUT", this->NRSOUT); + this->keywords.emplace("NSTACK", this->NSTACK); + this->keywords.emplace("NTG", this->NTG); + this->keywords.emplace("NUMRES", this->NUMRES); + this->keywords.emplace("NUPCOL", this->NUPCOL); + this->keywords.emplace("NWATREM", this->NWATREM); + this->keywords.emplace("NXFIN", this->NXFIN); + this->keywords.emplace("NYFIN", this->NYFIN); + this->keywords.emplace("NZFIN", this->NZFIN); + this->keywords.emplace("OCOMPIDX", this->OCOMPIDX); + this->keywords.emplace("OFM", this->OFM); + this->keywords.emplace("OIL", this->OIL); + this->keywords.emplace("OILAPI", this->OILAPI); + this->keywords.emplace("OILCOMPR", this->OILCOMPR); + this->keywords.emplace("OILDENT", this->OILDENT); + this->keywords.emplace("OILJT", this->OILJT); + this->keywords.emplace("OILMW", this->OILMW); + this->keywords.emplace("OILVISCT", this->OILVISCT); + this->keywords.emplace("OILVTIM", this->OILVTIM); + this->keywords.emplace("OLDTRAN", this->OLDTRAN); + this->keywords.emplace("OLDTRANR", this->OLDTRANR); + this->keywords.emplace("OPERATE", this->OPERATE); + this->keywords.emplace("OPERATER", this->OPERATER); + this->keywords.emplace("OPERNUM", this->OPERNUM); + this->keywords.emplace("OPTIONS", this->OPTIONS); + this->keywords.emplace("OPTIONS3", this->OPTIONS3); + this->keywords.emplace("OUTRAD", this->OUTRAD); + this->keywords.emplace("OUTSOL", this->OUTSOL); + this->keywords.emplace("OVERBURD", this->OVERBURD); + this->keywords.emplace("PARALLEL", this->PARALLEL); + this->keywords.emplace("PARAOPTS", this->PARAOPTS); + this->keywords.emplace("PARTTRAC", this->PARTTRAC); + this->keywords.emplace("PATHS", this->PATHS); + this->keywords.emplace("PBUB", this->PBUB); + this->keywords.emplace("PBVD", this->PBVD); + this->keywords.emplace("PCG", this->PCG); + this->keywords.emplace("PCG32D", this->PCG32D); + this->keywords.emplace("PCW", this->PCW); + this->keywords.emplace("PCW32D", this->PCW32D); + this->keywords.emplace("PDEW", this->PDEW); + this->keywords.emplace("PDVD", this->PDVD); + this->keywords.emplace("PEBI", this->PEBI); + this->keywords.emplace("PECOEFS", this->PECOEFS); + this->keywords.emplace("PEDIMS", this->PEDIMS); + this->keywords.emplace("PEGTABX", this->PEGTABX); + this->keywords.emplace("PEKTABX", this->PEKTABX); + this->keywords.emplace("PENUM", this->PENUM); + this->keywords.emplace("PERFORMANCE_PROBE", this->PERFORMANCE_PROBE); + this->keywords.emplace("PERMAVE", this->PERMAVE); + this->keywords.emplace("PERMFACT", this->PERMFACT); + this->keywords.emplace("PERMJFUN", this->PERMJFUN); + this->keywords.emplace("PERMR", this->PERMR); + this->keywords.emplace("PERMTHT", this->PERMTHT); + this->keywords.emplace("PERMX", this->PERMX); + this->keywords.emplace("PERMXY", this->PERMXY); + this->keywords.emplace("PERMY", this->PERMY); + this->keywords.emplace("PERMYZ", this->PERMYZ); + this->keywords.emplace("PERMZ", this->PERMZ); + this->keywords.emplace("PERMZX", this->PERMZX); + this->keywords.emplace("PETGRID", this->PETGRID); + this->keywords.emplace("PETOPTS", this->PETOPTS); + this->keywords.emplace("PICOND", this->PICOND); + this->keywords.emplace("PIMTDIMS", this->PIMTDIMS); + this->keywords.emplace("PIMULTAB", this->PIMULTAB); + this->keywords.emplace("PINCH", this->PINCH); + this->keywords.emplace("PINCHNUM", this->PINCHNUM); + this->keywords.emplace("PINCHOUT", this->PINCHOUT); + this->keywords.emplace("PINCHREG", this->PINCHREG); + this->keywords.emplace("PINCHXY", this->PINCHXY); + this->keywords.emplace("PINTDIMS", this->PINTDIMS); + this->keywords.emplace("PLMIXNUM", this->PLMIXNUM); + this->keywords.emplace("PLMIXPAR", this->PLMIXPAR); + this->keywords.emplace("PLYADS", this->PLYADS); + this->keywords.emplace("PLYADSS", this->PLYADSS); + this->keywords.emplace("PLYATEMP", this->PLYATEMP); + this->keywords.emplace("PLYCAMAX", this->PLYCAMAX); + this->keywords.emplace("PLYDHFLF", this->PLYDHFLF); + this->keywords.emplace("PLYESAL", this->PLYESAL); + this->keywords.emplace("PLYKRRF", this->PLYKRRF); + this->keywords.emplace("PLYMAX", this->PLYMAX); + this->keywords.emplace("PLYMWINJ", this->PLYMWINJ); + this->keywords.emplace("PLYOPTS", this->PLYOPTS); + this->keywords.emplace("PLYRMDEN", this->PLYRMDEN); + this->keywords.emplace("PLYROCK", this->PLYROCK); + this->keywords.emplace("PLYROCKM", this->PLYROCKM); + this->keywords.emplace("PLYSHEAR", this->PLYSHEAR); + this->keywords.emplace("PLYSHLOG", this->PLYSHLOG); + this->keywords.emplace("PLYTRRF", this->PLYTRRF); + this->keywords.emplace("PLYTRRFA", this->PLYTRRFA); + this->keywords.emplace("PLYVISC", this->PLYVISC); + this->keywords.emplace("PLYVISCS", this->PLYVISCS); + this->keywords.emplace("PLYVISCT", this->PLYVISCT); + this->keywords.emplace("PLYVMH", this->PLYVMH); + this->keywords.emplace("PLYVSCST", this->PLYVSCST); + this->keywords.emplace("PMAX", this->PMAX); + this->keywords.emplace("PMISC", this->PMISC); + this->keywords.emplace("POLYMER", this->POLYMER); + this->keywords.emplace("POLYMW", this->POLYMW); + this->keywords.emplace("PORO", this->PORO); + this->keywords.emplace("PORV", this->PORV); + this->keywords.emplace("PPCWMAX", this->PPCWMAX); + this->keywords.emplace("PRECSALT", this->PRECSALT); + this->keywords.emplace("PREF", this->PREF); + this->keywords.emplace("PREFS", this->PREFS); + this->keywords.emplace("PRESSURE", this->PRESSURE); + this->keywords.emplace("PRIORITY", this->PRIORITY); + this->keywords.emplace("PROPS", this->PROPS); + this->keywords.emplace("PRORDER", this->PRORDER); + this->keywords.emplace("PRVD", this->PRVD); + this->keywords.emplace("PSTEADY", this->PSTEADY); + this->keywords.emplace("PSWRG", this->PSWRG); + this->keywords.emplace("PSWRO", this->PSWRO); + this->keywords.emplace("PVCDO", this->PVCDO); + this->keywords.emplace("PVCO", this->PVCO); + this->keywords.emplace("PVDG", this->PVDG); + this->keywords.emplace("PVDO", this->PVDO); + this->keywords.emplace("PVDS", this->PVDS); + this->keywords.emplace("PVTG", this->PVTG); + this->keywords.emplace("PVTGW", this->PVTGW); + this->keywords.emplace("PVTGWO", this->PVTGWO); + this->keywords.emplace("PVTNUM", this->PVTNUM); + this->keywords.emplace("PVTO", this->PVTO); + this->keywords.emplace("PVTSOL", this->PVTSOL); + this->keywords.emplace("PVTW", this->PVTW); + this->keywords.emplace("PVTWSALT", this->PVTWSALT); + this->keywords.emplace("PVT_M", this->PVT_M); + this->keywords.emplace("PVZG", this->PVZG); + this->keywords.emplace("PYACTION", this->PYACTION); + this->keywords.emplace("PYINPUT", this->PYINPUT); + this->keywords.emplace("QDRILL", this->QDRILL); + this->keywords.emplace("QHRATING", this->QHRATING); + this->keywords.emplace("QMOBIL", this->QMOBIL); + this->keywords.emplace("RADFIN", this->RADFIN); + this->keywords.emplace("RADFIN4", this->RADFIN4); + this->keywords.emplace("RADIAL", this->RADIAL); + this->keywords.emplace("RAINFALL", this->RAINFALL); + this->keywords.emplace("RBEDCONT", this->RBEDCONT); + this->keywords.emplace("RCMASTS", this->RCMASTS); + this->keywords.emplace("REACHES", this->REACHES); + this->keywords.emplace("READDATA", this->READDATA); + this->keywords.emplace("REFINE", this->REFINE); + this->keywords.emplace("REGDIMS", this->REGDIMS); + this->keywords.emplace("REGION2REGION_PROBE", this->REGION2REGION_PROBE); + this->keywords.emplace("REGION2REGION_PROBE_E300", this->REGION2REGION_PROBE_E300); + this->keywords.emplace("REGIONS", this->REGIONS); + this->keywords.emplace("REGION_PROBE", this->REGION_PROBE); + this->keywords.emplace("RESIDNUM", this->RESIDNUM); + this->keywords.emplace("RESTART", this->RESTART); + this->keywords.emplace("RESVNUM", this->RESVNUM); + this->keywords.emplace("RHO", this->RHO); + this->keywords.emplace("RIVDEBUG", this->RIVDEBUG); + this->keywords.emplace("RIVERSYS", this->RIVERSYS); + this->keywords.emplace("RIVRDIMS", this->RIVRDIMS); + this->keywords.emplace("RIVRPROP", this->RIVRPROP); + this->keywords.emplace("RIVRXSEC", this->RIVRXSEC); + this->keywords.emplace("RIVSALT", this->RIVSALT); + this->keywords.emplace("RIVTRACE", this->RIVTRACE); + this->keywords.emplace("RKTRMDIR", this->RKTRMDIR); + this->keywords.emplace("ROCK", this->ROCK); + this->keywords.emplace("ROCK2D", this->ROCK2D); + this->keywords.emplace("ROCK2DTR", this->ROCK2DTR); + this->keywords.emplace("ROCKCOMP", this->ROCKCOMP); + this->keywords.emplace("ROCKFRAC", this->ROCKFRAC); + this->keywords.emplace("ROCKNUM", this->ROCKNUM); + this->keywords.emplace("ROCKOPTS", this->ROCKOPTS); + this->keywords.emplace("ROCKPAMA", this->ROCKPAMA); + this->keywords.emplace("ROCKTAB", this->ROCKTAB); + this->keywords.emplace("ROCKTABH", this->ROCKTABH); + this->keywords.emplace("ROCKTABW", this->ROCKTABW); + this->keywords.emplace("ROCKTHSG", this->ROCKTHSG); + this->keywords.emplace("ROCKTSIG", this->ROCKTSIG); + this->keywords.emplace("ROCKV", this->ROCKV); + this->keywords.emplace("ROCKWNOD", this->ROCKWNOD); + this->keywords.emplace("RPTCPL", this->RPTCPL); + this->keywords.emplace("RPTGRID", this->RPTGRID); + this->keywords.emplace("RPTGRIDL", this->RPTGRIDL); + this->keywords.emplace("RPTHMD", this->RPTHMD); + this->keywords.emplace("RPTHMG", this->RPTHMG); + this->keywords.emplace("RPTHMW", this->RPTHMW); + this->keywords.emplace("RPTINIT", this->RPTINIT); + this->keywords.emplace("RPTISOL", this->RPTISOL); + this->keywords.emplace("RPTONLY", this->RPTONLY); + this->keywords.emplace("RPTONLYO", this->RPTONLYO); + this->keywords.emplace("RPTPROPS", this->RPTPROPS); + this->keywords.emplace("RPTREGS", this->RPTREGS); + this->keywords.emplace("RPTRST", this->RPTRST); + this->keywords.emplace("RPTRUNSP", this->RPTRUNSP); + this->keywords.emplace("RPTSCHED", this->RPTSCHED); + this->keywords.emplace("RPTSMRY", this->RPTSMRY); + this->keywords.emplace("RPTSOL", this->RPTSOL); + this->keywords.emplace("RS", this->RS); + this->keywords.emplace("RSCONST", this->RSCONST); + this->keywords.emplace("RSCONSTT", this->RSCONSTT); + this->keywords.emplace("RSGI", this->RSGI); + this->keywords.emplace("RSSPEC", this->RSSPEC); + this->keywords.emplace("RSVD", this->RSVD); + this->keywords.emplace("RTEMP", this->RTEMP); + this->keywords.emplace("RTEMPA", this->RTEMPA); + this->keywords.emplace("RTEMPVD", this->RTEMPVD); + this->keywords.emplace("RUNSPEC", this->RUNSPEC); + this->keywords.emplace("RUNSUM", this->RUNSUM); + this->keywords.emplace("RV", this->RV); + this->keywords.emplace("RVCONST", this->RVCONST); + this->keywords.emplace("RVCONSTT", this->RVCONSTT); + this->keywords.emplace("RVGI", this->RVGI); + this->keywords.emplace("RVVD", this->RVVD); + this->keywords.emplace("RVW", this->RVW); + this->keywords.emplace("RWGSALT", this->RWGSALT); + this->keywords.emplace("SALINITY", this->SALINITY); + this->keywords.emplace("SALT", this->SALT); + this->keywords.emplace("SALTNODE", this->SALTNODE); + this->keywords.emplace("SALTP", this->SALTP); + this->keywords.emplace("SALTPVD", this->SALTPVD); + this->keywords.emplace("SALTREST", this->SALTREST); + this->keywords.emplace("SALTSOL", this->SALTSOL); + this->keywords.emplace("SALTVD", this->SALTVD); + this->keywords.emplace("SAMG", this->SAMG); + this->keywords.emplace("SATNUM", this->SATNUM); + this->keywords.emplace("SATOPTS", this->SATOPTS); + this->keywords.emplace("SAVE", this->SAVE); + this->keywords.emplace("SBIOF", this->SBIOF); + this->keywords.emplace("SCALC", this->SCALC); + this->keywords.emplace("SCALECRS", this->SCALECRS); + this->keywords.emplace("SCALELIM", this->SCALELIM); + this->keywords.emplace("SCDATAB", this->SCDATAB); + this->keywords.emplace("SCDETAB", this->SCDETAB); + this->keywords.emplace("SCDPDIMS", this->SCDPDIMS); + this->keywords.emplace("SCDPTAB", this->SCDPTAB); + this->keywords.emplace("SCDPTRAC", this->SCDPTRAC); + this->keywords.emplace("SCHEDULE", this->SCHEDULE); + this->keywords.emplace("SCVD", this->SCVD); + this->keywords.emplace("SDENSITY", this->SDENSITY); + this->keywords.emplace("SEGMENT_PROBE", this->SEGMENT_PROBE); + this->keywords.emplace("SEPARATE", this->SEPARATE); + this->keywords.emplace("SEPVALS", this->SEPVALS); + this->keywords.emplace("SFOAM", this->SFOAM); + this->keywords.emplace("SGAS", this->SGAS); + this->keywords.emplace("SGCR", this->SGCR); + this->keywords.emplace("SGCWMIS", this->SGCWMIS); + this->keywords.emplace("SGF32D", this->SGF32D); + this->keywords.emplace("SGFN", this->SGFN); + this->keywords.emplace("SGL", this->SGL); + this->keywords.emplace("SGLPC", this->SGLPC); + this->keywords.emplace("SGOF", this->SGOF); + this->keywords.emplace("SGOFLET", this->SGOFLET); + this->keywords.emplace("SGU", this->SGU); + this->keywords.emplace("SGWFN", this->SGWFN); + this->keywords.emplace("SHRATE", this->SHRATE); + this->keywords.emplace("SIGMA", this->SIGMA); + this->keywords.emplace("SIGMAGDV", this->SIGMAGDV); + this->keywords.emplace("SIGMATH", this->SIGMATH); + this->keywords.emplace("SIGMAV", this->SIGMAV); + this->keywords.emplace("SIMULATE", this->SIMULATE); + this->keywords.emplace("SKIP", this->SKIP); + this->keywords.emplace("SKIP100", this->SKIP100); + this->keywords.emplace("SKIP300", this->SKIP300); + this->keywords.emplace("SKIPREST", this->SKIPREST); + this->keywords.emplace("SKPRPOLY", this->SKPRPOLY); + this->keywords.emplace("SKPRWAT", this->SKPRWAT); + this->keywords.emplace("SKRO", this->SKRO); + this->keywords.emplace("SKRORG", this->SKRORG); + this->keywords.emplace("SKRORW", this->SKRORW); + this->keywords.emplace("SKRW", this->SKRW); + this->keywords.emplace("SKRWR", this->SKRWR); + this->keywords.emplace("SLAVES", this->SLAVES); + this->keywords.emplace("SLGOF", this->SLGOF); + this->keywords.emplace("SMICR", this->SMICR); + this->keywords.emplace("SMRYDIMS", this->SMRYDIMS); + this->keywords.emplace("SMULTX", this->SMULTX); + this->keywords.emplace("SMULTY", this->SMULTY); + this->keywords.emplace("SMULTZ", this->SMULTZ); + this->keywords.emplace("SOCRS", this->SOCRS); + this->keywords.emplace("SOF2", this->SOF2); + this->keywords.emplace("SOF3", this->SOF3); + this->keywords.emplace("SOF32D", this->SOF32D); + this->keywords.emplace("SOGCR", this->SOGCR); + this->keywords.emplace("SOIL", this->SOIL); + this->keywords.emplace("SOLUTION", this->SOLUTION); + this->keywords.emplace("SOLVCONC", this->SOLVCONC); + this->keywords.emplace("SOLVDIMS", this->SOLVDIMS); + this->keywords.emplace("SOLVDIRS", this->SOLVDIRS); + this->keywords.emplace("SOLVENT", this->SOLVENT); + this->keywords.emplace("SOLVFRAC", this->SOLVFRAC); + this->keywords.emplace("SOLVNUM", this->SOLVNUM); + this->keywords.emplace("SOMGAS", this->SOMGAS); + this->keywords.emplace("SOMWAT", this->SOMWAT); + this->keywords.emplace("SORWMIS", this->SORWMIS); + this->keywords.emplace("SOWCR", this->SOWCR); + this->keywords.emplace("SOXYG", this->SOXYG); + this->keywords.emplace("SPECGRID", this->SPECGRID); + this->keywords.emplace("SPECHEAT", this->SPECHEAT); + this->keywords.emplace("SPECROCK", this->SPECROCK); + this->keywords.emplace("SPIDER", this->SPIDER); + this->keywords.emplace("SPOLY", this->SPOLY); + this->keywords.emplace("SPOLYMW", this->SPOLYMW); + this->keywords.emplace("SSFN", this->SSFN); + this->keywords.emplace("SSGCR", this->SSGCR); + this->keywords.emplace("SSGL", this->SSGL); + this->keywords.emplace("SSOGCR", this->SSOGCR); + this->keywords.emplace("SSOL", this->SSOL); + this->keywords.emplace("SSOWCR", this->SSOWCR); + this->keywords.emplace("SSWCR", this->SSWCR); + this->keywords.emplace("SSWL", this->SSWL); + this->keywords.emplace("SSWU", this->SSWU); + this->keywords.emplace("START", this->START); + this->keywords.emplace("STCOND", this->STCOND); + this->keywords.emplace("STOG", this->STOG); + this->keywords.emplace("STONE", this->STONE); + this->keywords.emplace("STONE1", this->STONE1); + this->keywords.emplace("STONE1EX", this->STONE1EX); + this->keywords.emplace("STONE2", this->STONE2); + this->keywords.emplace("STOW", this->STOW); + this->keywords.emplace("STWG", this->STWG); + this->keywords.emplace("SUMMARY", this->SUMMARY); + this->keywords.emplace("SUMTHIN", this->SUMTHIN); + this->keywords.emplace("SUREA", this->SUREA); + this->keywords.emplace("SURF", this->SURF); + this->keywords.emplace("SURFACT", this->SURFACT); + this->keywords.emplace("SURFACTW", this->SURFACTW); + this->keywords.emplace("SURFADDW", this->SURFADDW); + this->keywords.emplace("SURFADS", this->SURFADS); + this->keywords.emplace("SURFCAPD", this->SURFCAPD); + this->keywords.emplace("SURFESAL", this->SURFESAL); + this->keywords.emplace("SURFNUM", this->SURFNUM); + this->keywords.emplace("SURFOPTS", this->SURFOPTS); + this->keywords.emplace("SURFROCK", this->SURFROCK); + this->keywords.emplace("SURFST", this->SURFST); + this->keywords.emplace("SURFSTES", this->SURFSTES); + this->keywords.emplace("SURFVISC", this->SURFVISC); + this->keywords.emplace("SURFWNUM", this->SURFWNUM); + this->keywords.emplace("SWAT", this->SWAT); + this->keywords.emplace("SWATINIT", this->SWATINIT); + this->keywords.emplace("SWCR", this->SWCR); + this->keywords.emplace("SWF32D", this->SWF32D); + this->keywords.emplace("SWFN", this->SWFN); + this->keywords.emplace("SWINGFAC", this->SWINGFAC); + this->keywords.emplace("SWL", this->SWL); + this->keywords.emplace("SWLPC", this->SWLPC); + this->keywords.emplace("SWOF", this->SWOF); + this->keywords.emplace("SWOFLET", this->SWOFLET); + this->keywords.emplace("SWU", this->SWU); + this->keywords.emplace("TABDIMS", this->TABDIMS); + this->keywords.emplace("TBLK", this->TBLK); + this->keywords.emplace("TEMP", this->TEMP); + this->keywords.emplace("TEMPI", this->TEMPI); + this->keywords.emplace("TEMPNODE", this->TEMPNODE); + this->keywords.emplace("TEMPTVD", this->TEMPTVD); + this->keywords.emplace("TEMPVD", this->TEMPVD); + this->keywords.emplace("THCGAS", this->THCGAS); + this->keywords.emplace("THCOIL", this->THCOIL); + this->keywords.emplace("THCONR", this->THCONR); + this->keywords.emplace("THCONSF", this->THCONSF); + this->keywords.emplace("THCROCK", this->THCROCK); + this->keywords.emplace("THCWATER", this->THCWATER); + this->keywords.emplace("THERMAL", this->THERMAL); + this->keywords.emplace("THPRES", this->THPRES); + this->keywords.emplace("THPRESFT", this->THPRESFT); + this->keywords.emplace("TIGHTEN", this->TIGHTEN); + this->keywords.emplace("TIGHTENP", this->TIGHTENP); + this->keywords.emplace("TIME", this->TIME); + this->keywords.emplace("TITLE", this->TITLE); + this->keywords.emplace("TLMIXPAR", this->TLMIXPAR); + this->keywords.emplace("TLPMIXPA", this->TLPMIXPA); + this->keywords.emplace("TNUM", this->TNUM); + this->keywords.emplace("TOLCRIT", this->TOLCRIT); + this->keywords.emplace("TOPS", this->TOPS); + this->keywords.emplace("TPAMEPS", this->TPAMEPS); + this->keywords.emplace("TPAMEPSS", this->TPAMEPSS); + this->keywords.emplace("TRACER", this->TRACER); + this->keywords.emplace("TRACERKM", this->TRACERKM); + this->keywords.emplace("TRACERKP", this->TRACERKP); + this->keywords.emplace("TRACERS", this->TRACERS); + this->keywords.emplace("TRACITVD", this->TRACITVD); + this->keywords.emplace("TRACTVD", this->TRACTVD); + this->keywords.emplace("TRADS", this->TRADS); + this->keywords.emplace("TRANGL", this->TRANGL); + this->keywords.emplace("TRANR", this->TRANR); + this->keywords.emplace("TRANTHT", this->TRANTHT); + this->keywords.emplace("TRANX", this->TRANX); + this->keywords.emplace("TRANY", this->TRANY); + this->keywords.emplace("TRANZ", this->TRANZ); + this->keywords.emplace("TRDCY", this->TRDCY); + this->keywords.emplace("TRDIF", this->TRDIF); + this->keywords.emplace("TRDIS", this->TRDIS); + this->keywords.emplace("TREF", this->TREF); + this->keywords.emplace("TREFS", this->TREFS); + this->keywords.emplace("TRKPF", this->TRKPF); + this->keywords.emplace("TRNHD", this->TRNHD); + this->keywords.emplace("TRPLPORO", this->TRPLPORO); + this->keywords.emplace("TRROCK", this->TRROCK); + this->keywords.emplace("TSTEP", this->TSTEP); + this->keywords.emplace("TUNING", this->TUNING); + this->keywords.emplace("TUNINGDP", this->TUNINGDP); + this->keywords.emplace("TUNINGH", this->TUNINGH); + this->keywords.emplace("TUNINGL", this->TUNINGL); + this->keywords.emplace("TUNINGS", this->TUNINGS); + this->keywords.emplace("TVDP", this->TVDP); + this->keywords.emplace("TZONE", this->TZONE); + this->keywords.emplace("UDADIMS", this->UDADIMS); + this->keywords.emplace("UDQ", this->UDQ); + this->keywords.emplace("UDQDIMS", this->UDQDIMS); + this->keywords.emplace("UDQPARAM", this->UDQPARAM); + this->keywords.emplace("UDT", this->UDT); + this->keywords.emplace("UDTDIMS", this->UDTDIMS); + this->keywords.emplace("UNCODHMD", this->UNCODHMD); + this->keywords.emplace("UNIFIN", this->UNIFIN); + this->keywords.emplace("UNIFOUT", this->UNIFOUT); + this->keywords.emplace("UNIFOUTS", this->UNIFOUTS); + this->keywords.emplace("UNIFSAVE", this->UNIFSAVE); + this->keywords.emplace("USECUPL", this->USECUPL); + this->keywords.emplace("USEFLUX", this->USEFLUX); + this->keywords.emplace("USENOFLO", this->USENOFLO); + this->keywords.emplace("VAPOIL", this->VAPOIL); + this->keywords.emplace("VAPPARS", this->VAPPARS); + this->keywords.emplace("VAPWAT", this->VAPWAT); + this->keywords.emplace("VDFLOW", this->VDFLOW); + this->keywords.emplace("VDFLOWR", this->VDFLOWR); + this->keywords.emplace("VE", this->VE); + this->keywords.emplace("VEDEBUG", this->VEDEBUG); + this->keywords.emplace("VEFIN", this->VEFIN); + this->keywords.emplace("VEFRAC", this->VEFRAC); + this->keywords.emplace("VEFRACP", this->VEFRACP); + this->keywords.emplace("VEFRACPV", this->VEFRACPV); + this->keywords.emplace("VEFRACV", this->VEFRACV); + this->keywords.emplace("VFPCHK", this->VFPCHK); + this->keywords.emplace("VFPIDIMS", this->VFPIDIMS); + this->keywords.emplace("VFPINJ", this->VFPINJ); + this->keywords.emplace("VFPPDIMS", this->VFPPDIMS); + this->keywords.emplace("VFPPROD", this->VFPPROD); + this->keywords.emplace("VFPTABL", this->VFPTABL); + this->keywords.emplace("VISAGE", this->VISAGE); + this->keywords.emplace("VISCD", this->VISCD); + this->keywords.emplace("VISCREF", this->VISCREF); + this->keywords.emplace("VISDATES", this->VISDATES); + this->keywords.emplace("VISOPTS", this->VISOPTS); + this->keywords.emplace("WAGHYSTR", this->WAGHYSTR); + this->keywords.emplace("WAITBAL", this->WAITBAL); + this->keywords.emplace("WALKALIN", this->WALKALIN); + this->keywords.emplace("WALQCALC", this->WALQCALC); + this->keywords.emplace("WAPI", this->WAPI); + this->keywords.emplace("WARN", this->WARN); + this->keywords.emplace("WATDENT", this->WATDENT); + this->keywords.emplace("WATER", this->WATER); + this->keywords.emplace("WATJT", this->WATJT); + this->keywords.emplace("WATVISCT", this->WATVISCT); + this->keywords.emplace("WBHGLR", this->WBHGLR); + this->keywords.emplace("WBOREVOL", this->WBOREVOL); + this->keywords.emplace("WCALCVAL", this->WCALCVAL); + this->keywords.emplace("WCONHIST", this->WCONHIST); + this->keywords.emplace("WCONINJ", this->WCONINJ); + this->keywords.emplace("WCONINJE", this->WCONINJE); + this->keywords.emplace("WCONINJH", this->WCONINJH); + this->keywords.emplace("WCONINJP", this->WCONINJP); + this->keywords.emplace("WCONPROD", this->WCONPROD); + this->keywords.emplace("WCUTBACK", this->WCUTBACK); + this->keywords.emplace("WCUTBACT", this->WCUTBACT); + this->keywords.emplace("WCYCLE", this->WCYCLE); + this->keywords.emplace("WDFAC", this->WDFAC); + this->keywords.emplace("WDFACCOR", this->WDFACCOR); + this->keywords.emplace("WDRILPRI", this->WDRILPRI); + this->keywords.emplace("WDRILRES", this->WDRILRES); + this->keywords.emplace("WDRILTIM", this->WDRILTIM); + this->keywords.emplace("WECON", this->WECON); + this->keywords.emplace("WECONINJ", this->WECONINJ); + this->keywords.emplace("WECONT", this->WECONT); + this->keywords.emplace("WEFAC", this->WEFAC); + this->keywords.emplace("WELCNTL", this->WELCNTL); + this->keywords.emplace("WELDEBUG", this->WELDEBUG); + this->keywords.emplace("WELDRAW", this->WELDRAW); + this->keywords.emplace("WELEVNT", this->WELEVNT); + this->keywords.emplace("WELLDIMS", this->WELLDIMS); + this->keywords.emplace("WELL_COMPLETION_PROBE", this->WELL_COMPLETION_PROBE); + this->keywords.emplace("WELL_PROBE", this->WELL_PROBE); + this->keywords.emplace("WELMOVEL", this->WELMOVEL); + this->keywords.emplace("WELOPEN", this->WELOPEN); + this->keywords.emplace("WELOPENL", this->WELOPENL); + this->keywords.emplace("WELPI", this->WELPI); + this->keywords.emplace("WELPRI", this->WELPRI); + this->keywords.emplace("WELSEGS", this->WELSEGS); + this->keywords.emplace("WELSOMIN", this->WELSOMIN); + this->keywords.emplace("WELSPECL", this->WELSPECL); + this->keywords.emplace("WELSPECS", this->WELSPECS); + this->keywords.emplace("WELTARG", this->WELTARG); + this->keywords.emplace("WFOAM", this->WFOAM); + this->keywords.emplace("WFRICSEG", this->WFRICSEG); + this->keywords.emplace("WFRICSGL", this->WFRICSGL); + this->keywords.emplace("WFRICTN", this->WFRICTN); + this->keywords.emplace("WFRICTNL", this->WFRICTNL); + this->keywords.emplace("WGASPROD", this->WGASPROD); + this->keywords.emplace("WGORPEN", this->WGORPEN); + this->keywords.emplace("WGRUPCON", this->WGRUPCON); + this->keywords.emplace("WH2NUM", this->WH2NUM); + this->keywords.emplace("WH3NUM", this->WH3NUM); + this->keywords.emplace("WHEDREFD", this->WHEDREFD); + this->keywords.emplace("WHISTCTL", this->WHISTCTL); + this->keywords.emplace("WHTEMP", this->WHTEMP); + this->keywords.emplace("WINJMULT", this->WINJMULT); + this->keywords.emplace("WINJTEMP", this->WINJTEMP); + this->keywords.emplace("WLIFT", this->WLIFT); + this->keywords.emplace("WLIFTOPT", this->WLIFTOPT); + this->keywords.emplace("WLIMTOL", this->WLIMTOL); + this->keywords.emplace("WLIST", this->WLIST); + this->keywords.emplace("WLISTARG", this->WLISTARG); + this->keywords.emplace("WLISTNAM", this->WLISTNAM); + this->keywords.emplace("WMICP", this->WMICP); + this->keywords.emplace("WNETCTRL", this->WNETCTRL); + this->keywords.emplace("WNETDP", this->WNETDP); + this->keywords.emplace("WORKLIM", this->WORKLIM); + this->keywords.emplace("WORKTHP", this->WORKTHP); + this->keywords.emplace("WPAVE", this->WPAVE); + this->keywords.emplace("WPAVEDEP", this->WPAVEDEP); + this->keywords.emplace("WPIMULT", this->WPIMULT); + this->keywords.emplace("WPIMULTL", this->WPIMULTL); + this->keywords.emplace("WPITAB", this->WPITAB); + this->keywords.emplace("WPLUG", this->WPLUG); + this->keywords.emplace("WPMITAB", this->WPMITAB); + this->keywords.emplace("WPOLYMER", this->WPOLYMER); + this->keywords.emplace("WPOLYRED", this->WPOLYRED); + this->keywords.emplace("WPOTCALC", this->WPOTCALC); + this->keywords.emplace("WREGROUP", this->WREGROUP); + this->keywords.emplace("WRFT", this->WRFT); + this->keywords.emplace("WRFTPLT", this->WRFTPLT); + this->keywords.emplace("WSALT", this->WSALT); + this->keywords.emplace("WSCCLEAN", this->WSCCLEAN); + this->keywords.emplace("WSCCLENL", this->WSCCLENL); + this->keywords.emplace("WSCTAB", this->WSCTAB); + this->keywords.emplace("WSEGAICD", this->WSEGAICD); + this->keywords.emplace("WSEGDFIN", this->WSEGDFIN); + this->keywords.emplace("WSEGDFMD", this->WSEGDFMD); + this->keywords.emplace("WSEGDFPA", this->WSEGDFPA); + this->keywords.emplace("WSEGDIMS", this->WSEGDIMS); + this->keywords.emplace("WSEGEXSS", this->WSEGEXSS); + this->keywords.emplace("WSEGFLIM", this->WSEGFLIM); + this->keywords.emplace("WSEGFMOD", this->WSEGFMOD); + this->keywords.emplace("WSEGINIT", this->WSEGINIT); + this->keywords.emplace("WSEGITER", this->WSEGITER); + this->keywords.emplace("WSEGLABY", this->WSEGLABY); + this->keywords.emplace("WSEGLINK", this->WSEGLINK); + this->keywords.emplace("WSEGMULT", this->WSEGMULT); + this->keywords.emplace("WSEGPROP", this->WSEGPROP); + this->keywords.emplace("WSEGSEP", this->WSEGSEP); + this->keywords.emplace("WSEGSICD", this->WSEGSICD); + this->keywords.emplace("WSEGSOLV", this->WSEGSOLV); + this->keywords.emplace("WSEGTABL", this->WSEGTABL); + this->keywords.emplace("WSEGVALV", this->WSEGVALV); + this->keywords.emplace("WSKPTAB", this->WSKPTAB); + this->keywords.emplace("WSOLVENT", this->WSOLVENT); + this->keywords.emplace("WSURFACT", this->WSURFACT); + this->keywords.emplace("WTADD", this->WTADD); + this->keywords.emplace("WTEMP", this->WTEMP); + this->keywords.emplace("WTEMPQ", this->WTEMPQ); + this->keywords.emplace("WTEST", this->WTEST); + this->keywords.emplace("WTHPMAX", this->WTHPMAX); + this->keywords.emplace("WTMULT", this->WTMULT); + this->keywords.emplace("WTRACER", this->WTRACER); + this->keywords.emplace("WVFPDP", this->WVFPDP); + this->keywords.emplace("WVFPEXP", this->WVFPEXP); + this->keywords.emplace("WWPAVE", this->WWPAVE); + this->keywords.emplace("ZCORN", this->ZCORN); + this->keywords.emplace("ZFACT1", this->ZFACT1); + this->keywords.emplace("ZFACT1S", this->ZFACT1S); + this->keywords.emplace("ZFACTOR", this->ZFACTOR); + this->keywords.emplace("ZFACTORS", this->ZFACTORS); + this->keywords.emplace("ZIPP2OFF", this->ZIPP2OFF); + this->keywords.emplace("ZIPPY2", this->ZIPPY2); + } + const auto kw_iter = this->keywords.find(keyword); + if (kw_iter == this->keywords.end()) + throw std::invalid_argument(fmt::format("No builtin keyword: {}", keyword)); + return kw_iter->second; +} + + const ::Opm::ParserKeyword& getKeyword(const std::string& keyword) const { return this->operator[](keyword); } + +private: + mutable std::unordered_map keywords; +}; +} +} +#endif diff --git a/ThirdParty/custom-opm-common/generated-opm-common/include/opm/parser/eclipse/Parser/ParserKeywords/C.hpp b/ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/C.hpp similarity index 98% rename from ThirdParty/custom-opm-common/generated-opm-common/include/opm/parser/eclipse/Parser/ParserKeywords/C.hpp rename to ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/C.hpp index 7e0e798f65..c615d72d88 100644 --- a/ThirdParty/custom-opm-common/generated-opm-common/include/opm/parser/eclipse/Parser/ParserKeywords/C.hpp +++ b/ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/C.hpp @@ -1,6 +1,6 @@ #ifndef PARSER_KEYWORDS_C_HPP #define PARSER_KEYWORDS_C_HPP -#include +#include namespace Opm { namespace ParserKeywords { @@ -339,6 +339,22 @@ namespace ParserKeywords { + class CO2STOR : public ParserKeyword { + public: + CO2STOR(); + static const std::string keywordName; + }; + + + + class CO2STORE : public ParserKeyword { + public: + CO2STORE(); + static const std::string keywordName; + }; + + + class COAL : public ParserKeyword { public: COAL(); @@ -848,21 +864,25 @@ namespace ParserKeywords { class I { public: static const std::string itemName; + static const int defaultValue; }; class J { public: static const std::string itemName; + static const int defaultValue; }; class K1 { public: static const std::string itemName; + static const int defaultValue; }; class K2 { public: static const std::string itemName; + static const int defaultValue; }; class N { diff --git a/ThirdParty/custom-opm-common/generated-opm-common/include/opm/parser/eclipse/Parser/ParserKeywords/D.hpp b/ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/D.hpp similarity index 98% rename from ThirdParty/custom-opm-common/generated-opm-common/include/opm/parser/eclipse/Parser/ParserKeywords/D.hpp rename to ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/D.hpp index 05a5f11841..757be0df92 100644 --- a/ThirdParty/custom-opm-common/generated-opm-common/include/opm/parser/eclipse/Parser/ParserKeywords/D.hpp +++ b/ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/D.hpp @@ -1,6 +1,6 @@ #ifndef PARSER_KEYWORDS_D_HPP #define PARSER_KEYWORDS_D_HPP -#include +#include namespace Opm { namespace ParserKeywords { @@ -789,11 +789,13 @@ namespace ParserKeywords { class GAS_OIL_CROSS_DIFF_COEFF { public: static const std::string itemName; + static const double defaultValue; }; class OIL_OIL_CROSS_DIFF_COEFF { public: static const std::string itemName; + static const double defaultValue; }; }; @@ -1280,7 +1282,26 @@ namespace ParserKeywords { static const std::string itemName; }; - class Option { + class OPTION { + public: + static const std::string itemName; + static const std::string defaultValue; + }; + }; + + + + class DRSDTCON : public ParserKeyword { + public: + DRSDTCON(); + static const std::string keywordName; + + class DRSDT_MAX { + public: + static const std::string itemName; + }; + + class OPTION { public: static const std::string itemName; static const std::string defaultValue; @@ -1299,7 +1320,7 @@ namespace ParserKeywords { static const std::string itemName; }; - class Option { + class OPTION { public: static const std::string itemName; static const std::string defaultValue; diff --git a/ThirdParty/custom-opm-common/generated-opm-common/include/opm/parser/eclipse/Parser/ParserKeywords/E.hpp b/ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/E.hpp similarity index 97% rename from ThirdParty/custom-opm-common/generated-opm-common/include/opm/parser/eclipse/Parser/ParserKeywords/E.hpp rename to ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/E.hpp index a18d373bd7..5190ff7bcd 100644 --- a/ThirdParty/custom-opm-common/generated-opm-common/include/opm/parser/eclipse/Parser/ParserKeywords/E.hpp +++ b/ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/E.hpp @@ -1,6 +1,6 @@ #ifndef PARSER_KEYWORDS_E_HPP #define PARSER_KEYWORDS_E_HPP -#include +#include namespace Opm { namespace ParserKeywords { @@ -260,6 +260,12 @@ namespace ParserKeywords { static const std::string itemName; static const double defaultValue; }; + + class FLAG_SOMETHING { + public: + static const std::string itemName; + static const int defaultValue; + }; }; @@ -381,13 +387,13 @@ namespace ParserKeywords { static const std::string defaultValue; }; - class NUM_TABLES { + class NTENDP { public: static const std::string itemName; static const int defaultValue; }; - class NUM_NODES { + class NSENDP { public: static const std::string itemName; static const int defaultValue; @@ -861,6 +867,16 @@ namespace ParserKeywords { static const std::string itemName; static const int defaultValue; }; + + class EQLOPT04 { + public: + static const std::string itemName; + }; + + class EQLOPT5 { + public: + static const std::string itemName; + }; }; diff --git a/ThirdParty/custom-opm-common/generated-opm-common/include/opm/parser/eclipse/Parser/ParserKeywords/F.hpp b/ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/F.hpp similarity index 96% rename from ThirdParty/custom-opm-common/generated-opm-common/include/opm/parser/eclipse/Parser/ParserKeywords/F.hpp rename to ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/F.hpp index 2082a7896c..1e8e20d618 100644 --- a/ThirdParty/custom-opm-common/generated-opm-common/include/opm/parser/eclipse/Parser/ParserKeywords/F.hpp +++ b/ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/F.hpp @@ -1,6 +1,6 @@ #ifndef PARSER_KEYWORDS_F_HPP #define PARSER_KEYWORDS_F_HPP -#include +#include namespace Opm { namespace ParserKeywords { @@ -267,6 +267,11 @@ namespace ParserKeywords { public: FLUXTYPE(); static const std::string keywordName; + + class BC_TYPE { + public: + static const std::string itemName; + }; }; @@ -403,6 +408,12 @@ namespace ParserKeywords { static const std::string itemName; static const double defaultValue; }; + + class MIN_WAT_SAT { + public: + static const std::string itemName; + static const double defaultValue; + }; }; @@ -499,6 +510,7 @@ namespace ParserKeywords { class MODEL { public: static const std::string itemName; + static const std::string defaultValue; }; }; diff --git a/ThirdParty/custom-opm-common/generated-opm-common/include/opm/parser/eclipse/Parser/ParserKeywords/G.hpp b/ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/G.hpp similarity index 98% rename from ThirdParty/custom-opm-common/generated-opm-common/include/opm/parser/eclipse/Parser/ParserKeywords/G.hpp rename to ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/G.hpp index 6cf3f61a5c..a5a55a34ff 100644 --- a/ThirdParty/custom-opm-common/generated-opm-common/include/opm/parser/eclipse/Parser/ParserKeywords/G.hpp +++ b/ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/G.hpp @@ -1,6 +1,6 @@ #ifndef PARSER_KEYWORDS_G_HPP #define PARSER_KEYWORDS_G_HPP -#include +#include namespace Opm { namespace ParserKeywords { @@ -291,6 +291,26 @@ namespace ParserKeywords { + class GASJT : public ParserKeyword { + public: + GASJT(); + static const std::string keywordName; + + class PREF { + public: + static const std::string itemName; + static const double defaultValue; + }; + + class JOULE_THOMSON_COEFFICIENT { + public: + static const std::string itemName; + static const double defaultValue; + }; + }; + + + class GASMONTH : public ParserKeyword { public: GASMONTH(); @@ -588,19 +608,19 @@ namespace ParserKeywords { static const UDAValue defaultValue; }; - class FREE { + class RESPOND_TO_PARENT { public: static const std::string itemName; static const std::string defaultValue; }; - class GUIDE_FRACTION { + class GUIDE_RATE { public: static const std::string itemName; static const double defaultValue; }; - class GUIDE_DEF { + class GUIDE_RATE_DEF { public: static const std::string itemName; }; @@ -751,25 +771,21 @@ namespace ParserKeywords { class OIL_TARGET { public: static const std::string itemName; - static const UDAValue defaultValue; }; class WATER_TARGET { public: static const std::string itemName; - static const UDAValue defaultValue; }; class GAS_TARGET { public: static const std::string itemName; - static const UDAValue defaultValue; }; class LIQUID_TARGET { public: static const std::string itemName; - static const UDAValue defaultValue; }; class EXCEED_PROC { @@ -812,7 +828,6 @@ namespace ParserKeywords { class RESERVOIR_FLUID_TARGET { public: static const std::string itemName; - static const double defaultValue; }; class RESERVOIR_VOLUME_BALANCE { @@ -902,11 +917,13 @@ namespace ParserKeywords { class GAS_CONSUMP_RATE { public: static const std::string itemName; + static const UDAValue defaultValue; }; class GAS_IMPORT_RATE { public: static const std::string itemName; + static const UDAValue defaultValue; }; class NETWORK_NODE { @@ -1647,6 +1664,7 @@ namespace ParserKeywords { class FIP_FAMILY { public: static const std::string itemName; + static const std::string defaultValue; }; class PRESSURE_TARGET { @@ -2069,24 +2087,24 @@ namespace ParserKeywords { GRUPRIG(); static const std::string keywordName; - class GROUP_NAME { + class GROUP { public: static const std::string itemName; }; - class WORKRIGNUM { + class WORKOVER_RIG_NUM { public: static const std::string itemName; static const int defaultValue; }; - class DRILRIGNUM { + class DRILLING_RIG_NUM { public: static const std::string itemName; static const int defaultValue; }; - class ADD { + class ADD_OR_REMOVE { public: static const std::string itemName; static const std::string defaultValue; diff --git a/ThirdParty/custom-opm-common/generated-opm-common/include/opm/parser/eclipse/Parser/ParserKeywords/H.hpp b/ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/H.hpp similarity index 99% rename from ThirdParty/custom-opm-common/generated-opm-common/include/opm/parser/eclipse/Parser/ParserKeywords/H.hpp rename to ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/H.hpp index b96f191dcf..6c86edb015 100644 --- a/ThirdParty/custom-opm-common/generated-opm-common/include/opm/parser/eclipse/Parser/ParserKeywords/H.hpp +++ b/ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/H.hpp @@ -1,6 +1,6 @@ #ifndef PARSER_KEYWORDS_H_HPP #define PARSER_KEYWORDS_H_HPP -#include +#include namespace Opm { namespace ParserKeywords { diff --git a/ThirdParty/custom-opm-common/generated-opm-common/include/opm/parser/eclipse/Parser/ParserKeywords/I.hpp b/ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/I.hpp similarity index 99% rename from ThirdParty/custom-opm-common/generated-opm-common/include/opm/parser/eclipse/Parser/ParserKeywords/I.hpp rename to ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/I.hpp index e149b59630..ad500462cb 100644 --- a/ThirdParty/custom-opm-common/generated-opm-common/include/opm/parser/eclipse/Parser/ParserKeywords/I.hpp +++ b/ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/I.hpp @@ -1,6 +1,6 @@ #ifndef PARSER_KEYWORDS_I_HPP #define PARSER_KEYWORDS_I_HPP -#include +#include namespace Opm { namespace ParserKeywords { diff --git a/ThirdParty/custom-opm-common/generated-opm-common/include/opm/parser/eclipse/Parser/ParserKeywords/J.hpp b/ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/J.hpp similarity index 97% rename from ThirdParty/custom-opm-common/generated-opm-common/include/opm/parser/eclipse/Parser/ParserKeywords/J.hpp rename to ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/J.hpp index ec71717e55..8c6560ccbd 100644 --- a/ThirdParty/custom-opm-common/generated-opm-common/include/opm/parser/eclipse/Parser/ParserKeywords/J.hpp +++ b/ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/J.hpp @@ -1,6 +1,6 @@ #ifndef PARSER_KEYWORDS_J_HPP #define PARSER_KEYWORDS_J_HPP -#include +#include namespace Opm { namespace ParserKeywords { diff --git a/ThirdParty/custom-opm-common/generated-opm-common/include/opm/parser/eclipse/Parser/ParserKeywords/K.hpp b/ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/K.hpp similarity index 90% rename from ThirdParty/custom-opm-common/generated-opm-common/include/opm/parser/eclipse/Parser/ParserKeywords/K.hpp rename to ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/K.hpp index ccb1f05502..4b265c7f75 100644 --- a/ThirdParty/custom-opm-common/generated-opm-common/include/opm/parser/eclipse/Parser/ParserKeywords/K.hpp +++ b/ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/K.hpp @@ -1,6 +1,6 @@ #ifndef PARSER_KEYWORDS_K_HPP #define PARSER_KEYWORDS_K_HPP -#include +#include namespace Opm { namespace ParserKeywords { diff --git a/ThirdParty/custom-opm-common/generated-opm-common/include/opm/parser/eclipse/Parser/ParserKeywords/L.hpp b/ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/L.hpp similarity index 98% rename from ThirdParty/custom-opm-common/generated-opm-common/include/opm/parser/eclipse/Parser/ParserKeywords/L.hpp rename to ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/L.hpp index b2c983df46..752beb6022 100644 --- a/ThirdParty/custom-opm-common/generated-opm-common/include/opm/parser/eclipse/Parser/ParserKeywords/L.hpp +++ b/ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/L.hpp @@ -1,6 +1,6 @@ #ifndef PARSER_KEYWORDS_L_HPP #define PARSER_KEYWORDS_L_HPP -#include +#include namespace Opm { namespace ParserKeywords { @@ -193,9 +193,9 @@ namespace ParserKeywords { - class LICENSE : public ParserKeyword { + class LICENSES : public ParserKeyword { public: - LICENSE(); + LICENSES(); static const std::string keywordName; class FEATURE { @@ -227,7 +227,7 @@ namespace ParserKeywords { static const double defaultValue; }; - class OPTIMISE_GAS_LIFT { + class OPTIMISE_ALL_ITERATIONS { public: static const std::string itemName; static const std::string defaultValue; diff --git a/ThirdParty/custom-opm-common/generated-opm-common/include/opm/parser/eclipse/Parser/ParserKeywords/M.hpp b/ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/M.hpp similarity index 86% rename from ThirdParty/custom-opm-common/generated-opm-common/include/opm/parser/eclipse/Parser/ParserKeywords/M.hpp rename to ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/M.hpp index 1f2b72f95e..0eabf2eabe 100644 --- a/ThirdParty/custom-opm-common/generated-opm-common/include/opm/parser/eclipse/Parser/ParserKeywords/M.hpp +++ b/ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/M.hpp @@ -1,6 +1,6 @@ #ifndef PARSER_KEYWORDS_M_HPP #define PARSER_KEYWORDS_M_HPP -#include +#include namespace Opm { namespace ParserKeywords { @@ -9,32 +9,7 @@ namespace ParserKeywords { MAPAXES(); static const std::string keywordName; - class X1 { - public: - static const std::string itemName; - }; - - class Y1 { - public: - static const std::string itemName; - }; - - class X2 { - public: - static const std::string itemName; - }; - - class Y2 { - public: - static const std::string itemName; - }; - - class X3 { - public: - static const std::string itemName; - }; - - class Y3 { + class data { public: static const std::string itemName; }; @@ -300,6 +275,124 @@ namespace ParserKeywords { + class MICP : public ParserKeyword { + public: + MICP(); + static const std::string keywordName; + }; + + + + class MICPPARA : public ParserKeyword { + public: + MICPPARA(); + static const std::string keywordName; + + class DENSITY_BIOFILM { + public: + static const std::string itemName; + static const double defaultValue; + }; + + class DENSITY_CALCITE { + public: + static const std::string itemName; + static const double defaultValue; + }; + + class DETACHMENT_RATE { + public: + static const std::string itemName; + static const double defaultValue; + }; + + class CRITICAL_POROSITY { + public: + static const std::string itemName; + static const double defaultValue; + }; + + class FITTING_FACTOR { + public: + static const std::string itemName; + static const double defaultValue; + }; + + class HALF_VELOCITY_OXYGEN { + public: + static const std::string itemName; + static const double defaultValue; + }; + + class HALF_VELOCITY_UREA { + public: + static const std::string itemName; + static const double defaultValue; + }; + + class MAXIMUM_GROWTH_RATE { + public: + static const std::string itemName; + static const double defaultValue; + }; + + class MAXIMUM_OXYGEN_CONCENTRATION { + public: + static const std::string itemName; + static const double defaultValue; + }; + + class MAXIMUM_UREA_CONCENTRATION { + public: + static const std::string itemName; + static const double defaultValue; + }; + + class MAXIMUM_UREA_UTILIZATION { + public: + static const std::string itemName; + static const double defaultValue; + }; + + class MICROBIAL_ATTACHMENT_RATE { + public: + static const std::string itemName; + static const double defaultValue; + }; + + class MICROBIAL_DEATH_RATE { + public: + static const std::string itemName; + static const double defaultValue; + }; + + class MINIMUM_PERMEABILITY { + public: + static const std::string itemName; + static const double defaultValue; + }; + + class OXYGEN_CONSUMPTION_FACTOR { + public: + static const std::string itemName; + static const double defaultValue; + }; + + class TOLERANCE_BEFORE_CLOGGING { + public: + static const std::string itemName; + static const double defaultValue; + }; + + class YIELD_GROWTH_COEFFICIENT { + public: + static const std::string itemName; + static const double defaultValue; + }; + }; + + + class MINNNCT : public ParserKeyword { public: MINNNCT(); @@ -326,6 +419,20 @@ namespace ParserKeywords { + class MINNPCOL : public ParserKeyword { + public: + MINNPCOL(); + static const std::string keywordName; + + class VALUE { + public: + static const std::string itemName; + static const int defaultValue; + }; + }; + + + class MINPORV : public ParserKeyword { public: MINPORV(); @@ -618,6 +725,14 @@ namespace ParserKeywords { + class MSUM_PROBE : public ParserKeyword { + public: + MSUM_PROBE(); + static const std::string keywordName; + }; + + + class MULSGGD : public ParserKeyword { public: MULSGGD(); diff --git a/ThirdParty/custom-opm-common/generated-opm-common/include/opm/parser/eclipse/Parser/ParserKeywords/N.hpp b/ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/N.hpp similarity index 96% rename from ThirdParty/custom-opm-common/generated-opm-common/include/opm/parser/eclipse/Parser/ParserKeywords/N.hpp rename to ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/N.hpp index 2de8397b91..4a5a33b84a 100644 --- a/ThirdParty/custom-opm-common/generated-opm-common/include/opm/parser/eclipse/Parser/ParserKeywords/N.hpp +++ b/ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/N.hpp @@ -1,6 +1,6 @@ #ifndef PARSER_KEYWORDS_N_HPP #define PARSER_KEYWORDS_N_HPP -#include +#include namespace Opm { namespace ParserKeywords { @@ -66,7 +66,7 @@ namespace ParserKeywords { static const double defaultValue; }; - class PRESSURE_CONVERGENCE_LIMT { + class PRESSURE_CONVERGENCE_LIMIT { public: static const std::string itemName; static const double defaultValue; @@ -216,25 +216,6 @@ namespace ParserKeywords { - class NEXT : public ParserKeyword { - public: - NEXT(); - static const std::string keywordName; - - class MAX_STEP { - public: - static const std::string itemName; - }; - - class APPLY_TO_ALL { - public: - static const std::string itemName; - static const std::string defaultValue; - }; - }; - - - class NEXTSTEP : public ParserKeyword { public: NEXTSTEP(); @@ -333,6 +314,14 @@ namespace ParserKeywords { + class NMESSAGE : public ParserKeyword { + public: + NMESSAGE(); + static const std::string keywordName; + }; + + + class NNC : public ParserKeyword { public: NNC(); @@ -374,16 +363,16 @@ namespace ParserKeywords { static const double defaultValue; }; - class SIM_DEPENDENT1 { + class IST1 { public: static const std::string itemName; - static const double defaultValue; + static const int defaultValue; }; - class SIM_DEPENDENT2 { + class IST2 { public: static const std::string itemName; - static const double defaultValue; + static const int defaultValue; }; class PRESSURE_TABLE1 { @@ -484,6 +473,12 @@ namespace ParserKeywords { static const std::string defaultValue; }; + class ADD_GAS_LIFT_GAS { + public: + static const std::string itemName; + static const std::string defaultValue; + }; + class CHOKE_GROUP { public: static const std::string itemName; @@ -497,7 +492,6 @@ namespace ParserKeywords { class NETWORK_VALUE_TYPE { public: static const std::string itemName; - static const std::string defaultValue; }; }; diff --git a/ThirdParty/custom-opm-common/generated-opm-common/include/opm/parser/eclipse/Parser/ParserKeywords/O.hpp b/ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/O.hpp similarity index 80% rename from ThirdParty/custom-opm-common/generated-opm-common/include/opm/parser/eclipse/Parser/ParserKeywords/O.hpp rename to ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/O.hpp index 2bba6d1c03..90b14bb503 100644 --- a/ThirdParty/custom-opm-common/generated-opm-common/include/opm/parser/eclipse/Parser/ParserKeywords/O.hpp +++ b/ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/O.hpp @@ -1,6 +1,6 @@ #ifndef PARSER_KEYWORDS_O_HPP #define PARSER_KEYWORDS_O_HPP -#include +#include namespace Opm { namespace ParserKeywords { @@ -98,6 +98,26 @@ namespace ParserKeywords { + class OILJT : public ParserKeyword { + public: + OILJT(); + static const std::string keywordName; + + class PREF { + public: + static const std::string itemName; + static const double defaultValue; + }; + + class JOULE_THOMSON_COEFFICIENT { + public: + static const std::string itemName; + static const double defaultValue; + }; + }; + + + class OILMW : public ParserKeyword { public: OILMW(); @@ -223,7 +243,7 @@ namespace ParserKeywords { OPERATER(); static const std::string keywordName; - class RESULT_ARRAY { + class TARGET_ARRAY { public: static const std::string itemName; }; @@ -1463,6 +1483,738 @@ namespace ParserKeywords { static const std::string itemName; static const int defaultValue; }; + + class ITEM198 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM199 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM200 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM201 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM202 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM203 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM204 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM205 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM206 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM207 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM208 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM209 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM210 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM211 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM212 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM213 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM214 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM215 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM216 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM217 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM218 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM219 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM220 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM221 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM222 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM223 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM224 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM225 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM226 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM227 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM228 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM229 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM230 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM231 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM232 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM233 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM234 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM235 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM236 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM237 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM238 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM239 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM240 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM241 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM242 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM243 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM244 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM245 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM246 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM247 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM248 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM249 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM250 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM251 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM252 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM253 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM254 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM255 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM256 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM257 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM258 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM259 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM260 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM261 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM262 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM263 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM264 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM265 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM266 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM267 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM268 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM269 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM270 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM271 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM272 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM273 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM274 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM275 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM276 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM277 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM278 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM279 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM280 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM281 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM282 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM283 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM284 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM285 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM286 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM287 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM288 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM289 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM290 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM291 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM292 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM293 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM294 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM295 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM296 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM297 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM298 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM299 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM300 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM301 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM302 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM303 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM304 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM305 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM306 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM307 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM308 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM309 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM310 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM311 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM312 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM313 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM314 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM315 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM316 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM317 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM318 { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class ITEM319 { + public: + static const std::string itemName; + static const int defaultValue; + }; }; diff --git a/ThirdParty/custom-opm-common/generated-opm-common/include/opm/parser/eclipse/Parser/ParserKeywords/P.hpp b/ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/P.hpp similarity index 99% rename from ThirdParty/custom-opm-common/generated-opm-common/include/opm/parser/eclipse/Parser/ParserKeywords/P.hpp rename to ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/P.hpp index 3019b47300..dbacbdaf79 100644 --- a/ThirdParty/custom-opm-common/generated-opm-common/include/opm/parser/eclipse/Parser/ParserKeywords/P.hpp +++ b/ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/P.hpp @@ -1,6 +1,6 @@ #ifndef PARSER_KEYWORDS_P_HPP #define PARSER_KEYWORDS_P_HPP -#include +#include namespace Opm { namespace ParserKeywords { @@ -417,12 +417,7 @@ namespace ParserKeywords { PERMFACT(); static const std::string keywordName; - class POROSITY { - public: - static const std::string itemName; - }; - - class PERMFACTMULT { + class DATA { public: static const std::string itemName; }; @@ -1099,12 +1094,7 @@ namespace ParserKeywords { PLYSHEAR(); static const std::string keywordName; - class WATER_VELOCITY { - public: - static const std::string itemName; - }; - - class VRF { + class DATA { public: static const std::string itemName; }; @@ -1873,6 +1863,24 @@ namespace ParserKeywords { + class PVTSOL : public ParserKeyword { + public: + PVTSOL(); + static const std::string keywordName; + + class ZCO2 { + public: + static const std::string itemName; + }; + + class DATA { + public: + static const std::string itemName; + }; + }; + + + class PVTW : public ParserKeyword { public: PVTW(); diff --git a/ThirdParty/custom-opm-common/generated-opm-common/include/opm/parser/eclipse/Parser/ParserKeywords/Q.hpp b/ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/Q.hpp similarity index 93% rename from ThirdParty/custom-opm-common/generated-opm-common/include/opm/parser/eclipse/Parser/ParserKeywords/Q.hpp rename to ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/Q.hpp index 6ae8631941..0cbc555cea 100644 --- a/ThirdParty/custom-opm-common/generated-opm-common/include/opm/parser/eclipse/Parser/ParserKeywords/Q.hpp +++ b/ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/Q.hpp @@ -1,6 +1,6 @@ #ifndef PARSER_KEYWORDS_Q_HPP #define PARSER_KEYWORDS_Q_HPP -#include +#include namespace Opm { namespace ParserKeywords { diff --git a/ThirdParty/custom-opm-common/generated-opm-common/include/opm/parser/eclipse/Parser/ParserKeywords/R.hpp b/ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/R.hpp similarity index 92% rename from ThirdParty/custom-opm-common/generated-opm-common/include/opm/parser/eclipse/Parser/ParserKeywords/R.hpp rename to ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/R.hpp index 3b150cdd63..5582623ea2 100644 --- a/ThirdParty/custom-opm-common/generated-opm-common/include/opm/parser/eclipse/Parser/ParserKeywords/R.hpp +++ b/ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/R.hpp @@ -1,9 +1,86 @@ #ifndef PARSER_KEYWORDS_R_HPP #define PARSER_KEYWORDS_R_HPP -#include +#include namespace Opm { namespace ParserKeywords { + class RADFIN : public ParserKeyword { + public: + RADFIN(); + static const std::string keywordName; + + class NAME { + public: + static const std::string itemName; + }; + + class I { + public: + static const std::string itemName; + }; + + class J { + public: + static const std::string itemName; + }; + + class K1 { + public: + static const std::string itemName; + }; + + class K2 { + public: + static const std::string itemName; + }; + + class NR { + public: + static const std::string itemName; + }; + + class NTHETA { + public: + static const std::string itemName; + }; + + class NZ { + public: + static const std::string itemName; + }; + + class NWMAX { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class INNER_RADIUS { + public: + static const std::string itemName; + static const double defaultValue; + }; + + class OUTER_RADIUS { + public: + static const std::string itemName; + }; + + class MINIMUM_RADIUS_REFINEMENT { + public: + static const std::string itemName; + static const double defaultValue; + }; + + class PARENT_LGR { + public: + static const std::string itemName; + static const std::string defaultValue; + }; + }; + + + class RADFIN4 : public ParserKeyword { public: RADFIN4(); @@ -395,6 +472,24 @@ namespace ParserKeywords { + class REGION2REGION_PROBE_E300 : public ParserKeyword { + public: + REGION2REGION_PROBE_E300(); + static const std::string keywordName; + + class REGION1 { + public: + static const std::string itemName; + }; + + class REGION2 { + public: + static const std::string itemName; + }; + }; + + + class REGIONS : public ParserKeyword { public: REGIONS(); @@ -826,6 +921,17 @@ namespace ParserKeywords { static const std::string itemName; static const std::string defaultValue; }; + + class PORTXROP { + public: + static const std::string itemName; + }; + + class CARKZEXP { + public: + static const std::string itemName; + static const double defaultValue; + }; }; @@ -1499,21 +1605,24 @@ namespace ParserKeywords { + class RVW : public ParserKeyword { + public: + RVW(); + static const std::string keywordName; + + class data { + public: + static const std::string itemName; + }; + }; + + + class RWGSALT : public ParserKeyword { public: RWGSALT(); static const std::string keywordName; - class RESERVOIR_PRESSURE { - public: - static const std::string itemName; - }; - - class SALT_CONCENTRATION { - public: - static const std::string itemName; - }; - class DATA { public: static const std::string itemName; diff --git a/ThirdParty/custom-opm-common/generated-opm-common/include/opm/parser/eclipse/Parser/ParserKeywords/S.hpp b/ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/S.hpp similarity index 80% rename from ThirdParty/custom-opm-common/generated-opm-common/include/opm/parser/eclipse/Parser/ParserKeywords/S.hpp rename to ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/S.hpp index 9c2ad62cbc..3a263a3b91 100644 --- a/ThirdParty/custom-opm-common/generated-opm-common/include/opm/parser/eclipse/Parser/ParserKeywords/S.hpp +++ b/ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/S.hpp @@ -1,9 +1,23 @@ #ifndef PARSER_KEYWORDS_S_HPP #define PARSER_KEYWORDS_S_HPP -#include +#include namespace Opm { namespace ParserKeywords { + class SALINITY : public ParserKeyword { + public: + SALINITY(); + static const std::string keywordName; + + class MOLALITY { + public: + static const std::string itemName; + static const double defaultValue; + }; + }; + + + class SALT : public ParserKeyword { public: SALT(); @@ -30,6 +44,19 @@ namespace ParserKeywords { + class SALTP : public ParserKeyword { + public: + SALTP(); + static const std::string keywordName; + + class SALT_SATURATION { + public: + static const std::string itemName; + }; + }; + + + class SALTPVD : public ParserKeyword { public: SALTPVD(); @@ -61,7 +88,7 @@ namespace ParserKeywords { SALTSOL(); static const std::string keywordName; - class data { + class DATA { public: static const std::string itemName; }; @@ -140,6 +167,32 @@ namespace ParserKeywords { + class SBIOF : public ParserKeyword { + public: + SBIOF(); + static const std::string keywordName; + + class data { + public: + static const std::string itemName; + }; + }; + + + + class SCALC : public ParserKeyword { + public: + SCALC(); + static const std::string keywordName; + + class data { + public: + static const std::string itemName; + }; + }; + + + class SCALECRS : public ParserKeyword { public: SCALECRS(); @@ -196,43 +249,9 @@ namespace ParserKeywords { - class SCDPTAB : public ParserKeyword { + class SCDPDIMS : public ParserKeyword { public: - SCDPTAB(); - static const std::string keywordName; - - class DATA { - public: - static const std::string itemName; - }; - }; - - - - class SCDPTRAC : public ParserKeyword { - public: - SCDPTRAC(); - static const std::string keywordName; - - class TRACER { - public: - static const std::string itemName; - }; - }; - - - - class SCHEDULE : public ParserKeyword { - public: - SCHEDULE(); - static const std::string keywordName; - }; - - - - class SCPDIMS : public ParserKeyword { - public: - SCPDIMS(); + SCDPDIMS(); static const std::string keywordName; class NTSCDP { @@ -280,6 +299,40 @@ namespace ParserKeywords { + class SCDPTAB : public ParserKeyword { + public: + SCDPTAB(); + static const std::string keywordName; + + class DATA { + public: + static const std::string itemName; + }; + }; + + + + class SCDPTRAC : public ParserKeyword { + public: + SCDPTRAC(); + static const std::string keywordName; + + class TRACER { + public: + static const std::string itemName; + }; + }; + + + + class SCHEDULE : public ParserKeyword { + public: + SCHEDULE(); + static const std::string keywordName; + }; + + + class SCVD : public ParserKeyword { public: SCVD(); @@ -483,6 +536,116 @@ namespace ParserKeywords { + class SGOFLET : public ParserKeyword { + public: + SGOFLET(); + static const std::string keywordName; + + class SG_0 { + public: + static const std::string itemName; + static const double defaultValue; + }; + + class SG_CRITICAL { + public: + static const std::string itemName; + static const double defaultValue; + }; + + class L_GAS { + public: + static const std::string itemName; + static const double defaultValue; + }; + + class E_GAS { + public: + static const std::string itemName; + static const double defaultValue; + }; + + class T_GAS { + public: + static const std::string itemName; + static const double defaultValue; + }; + + class KRT_GAS { + public: + static const std::string itemName; + static const double defaultValue; + }; + + class SO_0 { + public: + static const std::string itemName; + static const double defaultValue; + }; + + class SO_CRITICAL { + public: + static const std::string itemName; + static const double defaultValue; + }; + + class L_OIL { + public: + static const std::string itemName; + static const double defaultValue; + }; + + class E_OIL { + public: + static const std::string itemName; + static const double defaultValue; + }; + + class T_OIL { + public: + static const std::string itemName; + static const double defaultValue; + }; + + class KRT_OIL { + public: + static const std::string itemName; + static const double defaultValue; + }; + + class L_PC { + public: + static const std::string itemName; + static const double defaultValue; + }; + + class E_PC { + public: + static const std::string itemName; + static const double defaultValue; + }; + + class T_PC { + public: + static const std::string itemName; + static const double defaultValue; + }; + + class PCIR { + public: + static const std::string itemName; + static const double defaultValue; + }; + + class PCT { + public: + static const std::string itemName; + static const double defaultValue; + }; + }; + + + class SGU : public ParserKeyword { public: SGU(); @@ -787,6 +950,19 @@ namespace ParserKeywords { + class SMICR : public ParserKeyword { + public: + SMICR(); + static const std::string keywordName; + + class data { + public: + static const std::string itemName; + }; + }; + + + class SMRYDIMS : public ParserKeyword { public: SMRYDIMS(); @@ -884,7 +1060,7 @@ namespace ParserKeywords { SOF32D(); static const std::string keywordName; - class SOIL { + class SWAT { public: static const std::string itemName; }; @@ -894,7 +1070,7 @@ namespace ParserKeywords { static const std::string itemName; }; - class KRW { + class KRO { public: static const std::string itemName; }; @@ -1061,6 +1237,19 @@ namespace ParserKeywords { + class SOXYG : public ParserKeyword { + public: + SOXYG(); + static const std::string keywordName; + + class data { + public: + static const std::string itemName; + }; + }; + + + class SPECGRID : public ParserKeyword { public: SPECGRID(); @@ -1125,6 +1314,14 @@ namespace ParserKeywords { + class SPIDER : public ParserKeyword { + public: + SPIDER(); + static const std::string keywordName; + }; + + + class SPOLY : public ParserKeyword { public: SPOLY(); @@ -1229,6 +1426,19 @@ namespace ParserKeywords { + class SSWCR : public ParserKeyword { + public: + SSWCR(); + static const std::string keywordName; + + class data { + public: + static const std::string itemName; + }; + }; + + + class SSWL : public ParserKeyword { public: SSWL(); @@ -1420,6 +1630,19 @@ namespace ParserKeywords { + class SUREA : public ParserKeyword { + public: + SUREA(); + static const std::string keywordName; + + class data { + public: + static const std::string itemName; + }; + }; + + + class SURF : public ParserKeyword { public: SURF(); @@ -1475,6 +1698,19 @@ namespace ParserKeywords { + class SURFCAPD : public ParserKeyword { + public: + SURFCAPD(); + static const std::string keywordName; + + class DATA { + public: + static const std::string itemName; + }; + }; + + + class SURFESAL : public ParserKeyword { public: SURFESAL(); @@ -1630,6 +1866,29 @@ namespace ParserKeywords { + class SWF32D : public ParserKeyword { + public: + SWF32D(); + static const std::string keywordName; + + class SOIL { + public: + static const std::string itemName; + }; + + class SGAS { + public: + static const std::string itemName; + }; + + class KRW { + public: + static const std::string itemName; + }; + }; + + + class SWFN : public ParserKeyword { public: SWFN(); @@ -1810,6 +2069,116 @@ namespace ParserKeywords { + class SWOFLET : public ParserKeyword { + public: + SWOFLET(); + static const std::string keywordName; + + class SW_RESIDUAL { + public: + static const std::string itemName; + static const double defaultValue; + }; + + class SW_CRITICAL { + public: + static const std::string itemName; + static const double defaultValue; + }; + + class L_WATER { + public: + static const std::string itemName; + static const double defaultValue; + }; + + class E_WATER { + public: + static const std::string itemName; + static const double defaultValue; + }; + + class T_WATER { + public: + static const std::string itemName; + static const double defaultValue; + }; + + class KRT_WATER { + public: + static const std::string itemName; + static const double defaultValue; + }; + + class SO_RESIDUAL { + public: + static const std::string itemName; + static const double defaultValue; + }; + + class SO_CRITICAL { + public: + static const std::string itemName; + static const double defaultValue; + }; + + class L_OIL { + public: + static const std::string itemName; + static const double defaultValue; + }; + + class E_OIL { + public: + static const std::string itemName; + static const double defaultValue; + }; + + class T_OIL { + public: + static const std::string itemName; + static const double defaultValue; + }; + + class KRT_OIL { + public: + static const std::string itemName; + static const double defaultValue; + }; + + class L_PC { + public: + static const std::string itemName; + static const double defaultValue; + }; + + class E_PC { + public: + static const std::string itemName; + static const double defaultValue; + }; + + class T_PC { + public: + static const std::string itemName; + static const double defaultValue; + }; + + class PCIR { + public: + static const std::string itemName; + static const double defaultValue; + }; + + class PCT { + public: + static const std::string itemName; + static const double defaultValue; + }; + }; + + + class SWU : public ParserKeyword { public: SWU(); diff --git a/ThirdParty/custom-opm-common/generated-opm-common/include/opm/parser/eclipse/Parser/ParserKeywords/T.hpp b/ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/T.hpp similarity index 98% rename from ThirdParty/custom-opm-common/generated-opm-common/include/opm/parser/eclipse/Parser/ParserKeywords/T.hpp rename to ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/T.hpp index 45e9704726..58fd907a18 100644 --- a/ThirdParty/custom-opm-common/generated-opm-common/include/opm/parser/eclipse/Parser/ParserKeywords/T.hpp +++ b/ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/T.hpp @@ -1,6 +1,6 @@ #ifndef PARSER_KEYWORDS_T_HPP #define PARSER_KEYWORDS_T_HPP -#include +#include namespace Opm { namespace ParserKeywords { @@ -46,17 +46,12 @@ namespace ParserKeywords { }; class MAX_RV_NODES { - public: - static const std::string itemName; - }; - - class NTENDP { public: static const std::string itemName; static const int defaultValue; }; - class NUM_STATE_EQ { + class NTENDP { public: static const std::string itemName; static const int defaultValue; @@ -71,6 +66,7 @@ namespace ParserKeywords { class NUM_EOS_SURFACE { public: static const std::string itemName; + static const int defaultValue; }; class MAX_FLUX_REGIONS { @@ -362,6 +358,19 @@ namespace ParserKeywords { TIGHTEN(); static const std::string keywordName; + class FACTOR { + public: + static const std::string itemName; + }; + }; + + + + class TIGHTENP : public ParserKeyword { + public: + TIGHTENP(); + static const std::string keywordName; + class LINEAR_FACTOR { public: static const std::string itemName; @@ -495,6 +504,19 @@ namespace ParserKeywords { + class TPAMEPSS : public ParserKeyword { + public: + TPAMEPSS(); + static const std::string keywordName; + + class DATA { + public: + static const std::string itemName; + }; + }; + + + class TRACER : public ParserKeyword { public: TRACER(); diff --git a/ThirdParty/custom-opm-common/generated-opm-common/include/opm/parser/eclipse/Parser/ParserKeywords/U.hpp b/ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/U.hpp similarity index 99% rename from ThirdParty/custom-opm-common/generated-opm-common/include/opm/parser/eclipse/Parser/ParserKeywords/U.hpp rename to ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/U.hpp index 8e56f60e50..9c4fa846d4 100644 --- a/ThirdParty/custom-opm-common/generated-opm-common/include/opm/parser/eclipse/Parser/ParserKeywords/U.hpp +++ b/ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/U.hpp @@ -1,6 +1,6 @@ #ifndef PARSER_KEYWORDS_U_HPP #define PARSER_KEYWORDS_U_HPP -#include +#include namespace Opm { namespace ParserKeywords { diff --git a/ThirdParty/custom-opm-common/generated-opm-common/include/opm/parser/eclipse/Parser/ParserKeywords/V.hpp b/ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/V.hpp similarity index 98% rename from ThirdParty/custom-opm-common/generated-opm-common/include/opm/parser/eclipse/Parser/ParserKeywords/V.hpp rename to ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/V.hpp index 33128bc851..c498e3b4a0 100644 --- a/ThirdParty/custom-opm-common/generated-opm-common/include/opm/parser/eclipse/Parser/ParserKeywords/V.hpp +++ b/ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/V.hpp @@ -1,6 +1,6 @@ #ifndef PARSER_KEYWORDS_V_HPP #define PARSER_KEYWORDS_V_HPP -#include +#include namespace Opm { namespace ParserKeywords { @@ -494,6 +494,11 @@ namespace ParserKeywords { public: static const std::string itemName; }; + + class API_GRAVITY { + public: + static const std::string itemName; + }; }; @@ -573,7 +578,7 @@ namespace ParserKeywords { static const std::string defaultValue; }; - class ERROR { + class msvc_prefix_ERROR { public: static const std::string itemName; static const std::string defaultValue; diff --git a/ThirdParty/custom-opm-common/generated-opm-common/include/opm/parser/eclipse/Parser/ParserKeywords/W.hpp b/ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/W.hpp similarity index 96% rename from ThirdParty/custom-opm-common/generated-opm-common/include/opm/parser/eclipse/Parser/ParserKeywords/W.hpp rename to ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/W.hpp index 384dcf3907..13f0b6f960 100644 --- a/ThirdParty/custom-opm-common/generated-opm-common/include/opm/parser/eclipse/Parser/ParserKeywords/W.hpp +++ b/ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/W.hpp @@ -1,6 +1,6 @@ #ifndef PARSER_KEYWORDS_W_HPP #define PARSER_KEYWORDS_W_HPP -#include +#include namespace Opm { namespace ParserKeywords { @@ -170,6 +170,26 @@ namespace ParserKeywords { + class WATJT : public ParserKeyword { + public: + WATJT(); + static const std::string keywordName; + + class PREF { + public: + static const std::string itemName; + static const double defaultValue; + }; + + class JOULE_THOMSON_COEFFICIENT { + public: + static const std::string itemName; + static const double defaultValue; + }; + }; + + + class WATVISCT : public ParserKeyword { public: WATVISCT(); @@ -325,10 +345,10 @@ namespace ParserKeywords { static const int defaultValue; }; - class LIFT { + class ALQ { public: static const std::string itemName; - static const double defaultValue; + static const UDAValue defaultValue; }; class THP { @@ -343,7 +363,13 @@ namespace ParserKeywords { static const UDAValue defaultValue; }; - class NGLRAT { + class WGASRAT_HIS { + public: + static const std::string itemName; + static const double defaultValue; + }; + + class NGLRAT_HIS { public: static const std::string itemName; static const double defaultValue; @@ -680,7 +706,7 @@ namespace ParserKeywords { class ALQ { public: static const std::string itemName; - static const double defaultValue; + static const UDAValue defaultValue; }; class E300_ITEM13 { @@ -746,6 +772,11 @@ namespace ParserKeywords { static const std::string itemName; }; + class GLR_LIMIT { + public: + static const std::string itemName; + }; + class WGR_LIMIT { public: static const std::string itemName; @@ -1348,6 +1379,12 @@ namespace ParserKeywords { static const std::string itemName; static const int defaultValue; }; + + class MAX_GPP_ROWS { + public: + static const std::string itemName; + static const int defaultValue; + }; }; @@ -2505,6 +2542,34 @@ namespace ParserKeywords { + class WMICP : public ParserKeyword { + public: + WMICP(); + static const std::string keywordName; + + class WELL { + public: + static const std::string itemName; + }; + + class MICROBIAL_CONCENTRATION { + public: + static const std::string itemName; + }; + + class OXYGEN_CONCENTRATION { + public: + static const std::string itemName; + }; + + class UREA_CONCENTRATION { + public: + static const std::string itemName; + }; + }; + + + class WNETCTRL : public ParserKeyword { public: WNETCTRL(); @@ -2580,13 +2645,13 @@ namespace ParserKeywords { WPAVE(); static const std::string keywordName; - class WEIGTH_FACTOR1 { + class F1 { public: static const std::string itemName; static const double defaultValue; }; - class WEIGTH_FACTOR2 { + class F2 { public: static const std::string itemName; static const double defaultValue; @@ -2612,7 +2677,7 @@ namespace ParserKeywords { WPAVEDEP(); static const std::string keywordName; - class WELLNAME { + class WELL { public: static const std::string itemName; }; @@ -2620,7 +2685,6 @@ namespace ParserKeywords { class REFDEPTH { public: static const std::string itemName; - static const double defaultValue; }; }; @@ -3113,64 +3177,61 @@ namespace ParserKeywords { class SEGMENT1 { public: static const std::string itemName; - static const int defaultValue; }; class SEGMENT2 { public: static const std::string itemName; - static const int defaultValue; }; - class AICD_STRENGTH { + class STRENGTH { + public: + static const std::string itemName; + }; + + class LENGTH { public: static const std::string itemName; static const double defaultValue; }; - class ICD_LENGTH { + class DENSITY_CALI { public: static const std::string itemName; static const double defaultValue; }; - class RHO { + class VISCOSITY_CALI { public: static const std::string itemName; static const double defaultValue; }; - class VISCOSITY { + class CRITICAL_VALUE { public: static const std::string itemName; static const double defaultValue; }; - class WATER_LIMIT { + class WIDTH_TRANS { public: static const std::string itemName; static const double defaultValue; }; - class TRANSITION_WIDTH { + class MAX_VISC_RATIO { public: static const std::string itemName; static const double defaultValue; }; - class MAX_SOMETHING { - public: - static const std::string itemName; - static const double defaultValue; - }; - - class SCALING_METHOD { + class METHOD_SCALING_FACTOR { public: static const std::string itemName; static const int defaultValue; }; - class MAX_QICD { + class MAX_ABS_RATE { public: static const std::string itemName; }; @@ -3185,7 +3246,7 @@ namespace ParserKeywords { static const std::string itemName; }; - class ICD_FLAG { + class STATUS { public: static const std::string itemName; static const std::string defaultValue; @@ -3209,7 +3270,7 @@ namespace ParserKeywords { static const double defaultValue; }; - class OIL_VSIC_FRACTION { + class OIL_VISC_FRACTION { public: static const std::string itemName; static const double defaultValue; @@ -3903,12 +3964,12 @@ namespace ParserKeywords { static const std::string itemName; }; - class SEG1 { + class SEGMENT1 { public: static const std::string itemName; }; - class SEG2 { + class SEGMENT2 { public: static const std::string itemName; }; @@ -4040,10 +4101,50 @@ namespace ParserKeywords { static const std::string itemName; }; - class SURFACT { + class SEGMENT1 { public: static const std::string itemName; }; + + class SEGMENT2 { + public: + static const std::string itemName; + }; + + class VFP { + public: + static const std::string itemName; + static const int defaultValue; + }; + + class VFP_COMPONENTS { + public: + static const std::string itemName; + static const std::string defaultValue; + }; + + class VFP_OUTLIER { + public: + static const std::string itemName; + }; + + class DP_SCALING { + public: + static const std::string itemName; + static const std::string defaultValue; + }; + + class ALQ_VALUE { + public: + static const std::string itemName; + static const double defaultValue; + }; + + class STATUS { + public: + static const std::string itemName; + static const std::string defaultValue; + }; }; @@ -4148,6 +4249,24 @@ namespace ParserKeywords { + class WSURFACT : public ParserKeyword { + public: + WSURFACT(); + static const std::string keywordName; + + class WELL { + public: + static const std::string itemName; + }; + + class SURFACT { + public: + static const std::string itemName; + }; + }; + + + class WTADD : public ParserKeyword { public: WTADD(); @@ -4434,7 +4553,7 @@ namespace ParserKeywords { static const std::string defaultValue; }; - class WELL_CONNECTION { + class CONNECTION { public: static const std::string itemName; static const std::string defaultValue; diff --git a/ThirdParty/custom-opm-common/generated-opm-common/include/opm/parser/eclipse/Parser/ParserKeywords/X.hpp b/ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/X.hpp similarity index 67% rename from ThirdParty/custom-opm-common/generated-opm-common/include/opm/parser/eclipse/Parser/ParserKeywords/X.hpp rename to ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/X.hpp index 1d4101b131..9b476432d2 100644 --- a/ThirdParty/custom-opm-common/generated-opm-common/include/opm/parser/eclipse/Parser/ParserKeywords/X.hpp +++ b/ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/X.hpp @@ -1,6 +1,6 @@ #ifndef PARSER_KEYWORDS_X_HPP #define PARSER_KEYWORDS_X_HPP -#include +#include namespace Opm { namespace ParserKeywords { diff --git a/ThirdParty/custom-opm-common/generated-opm-common/include/opm/parser/eclipse/Parser/ParserKeywords/Y.hpp b/ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/Y.hpp similarity index 67% rename from ThirdParty/custom-opm-common/generated-opm-common/include/opm/parser/eclipse/Parser/ParserKeywords/Y.hpp rename to ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/Y.hpp index bccf7186c3..1163bddd0f 100644 --- a/ThirdParty/custom-opm-common/generated-opm-common/include/opm/parser/eclipse/Parser/ParserKeywords/Y.hpp +++ b/ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/Y.hpp @@ -1,6 +1,6 @@ #ifndef PARSER_KEYWORDS_Y_HPP #define PARSER_KEYWORDS_Y_HPP -#include +#include namespace Opm { namespace ParserKeywords { diff --git a/ThirdParty/custom-opm-common/generated-opm-common/include/opm/parser/eclipse/Parser/ParserKeywords/Z.hpp b/ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/Z.hpp similarity index 96% rename from ThirdParty/custom-opm-common/generated-opm-common/include/opm/parser/eclipse/Parser/ParserKeywords/Z.hpp rename to ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/Z.hpp index 22c8526d3c..f38f1e7e2a 100644 --- a/ThirdParty/custom-opm-common/generated-opm-common/include/opm/parser/eclipse/Parser/ParserKeywords/Z.hpp +++ b/ThirdParty/custom-opm-common/generated-opm-common/include/opm/input/eclipse/Parser/ParserKeywords/Z.hpp @@ -1,6 +1,6 @@ #ifndef PARSER_KEYWORDS_Z_HPP #define PARSER_KEYWORDS_Z_HPP -#include +#include namespace Opm { namespace ParserKeywords { diff --git a/ThirdParty/custom-opm-common/opm-common b/ThirdParty/custom-opm-common/opm-common new file mode 160000 index 0000000000..212cc35c43 --- /dev/null +++ b/ThirdParty/custom-opm-common/opm-common @@ -0,0 +1 @@ +Subproject commit 212cc35c4354e501570b4b07577d6f224418849b diff --git a/ThirdParty/custom-opm-common/opm-common/.clang-format b/ThirdParty/custom-opm-common/opm-common/.clang-format deleted file mode 100644 index b77dab9475..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/.clang-format +++ /dev/null @@ -1,20 +0,0 @@ -{ - BasedOnStyle: WebKit, - AlignAfterOpenBracket: AlwaysBreak, - AlignConsecutiveAssignments: false, - AlignConsecutiveDeclarations: false, - AlignAfterOpenBracket: Align, - AllowShortBlocksOnASingleLine: false, - AllowShortFunctionsOnASingleLine: None, - AlwaysBreakAfterReturnType: TopLevelDefinitions, - AlwaysBreakTemplateDeclarations: Yes, - BinPackArguments: false, - BinPackParameters: false, - BreakBeforeBraces: Linux, - BreakConstructorInitializers: BeforeComma, - ColumnLimit: 120, - Cpp11BracedListStyle: true, - FixNamespaceComments: true, - MaxEmptyLinesToKeep: 5, - NamespaceIndentation: Inner, -} diff --git a/ThirdParty/custom-opm-common/opm-common/.gitignore b/ThirdParty/custom-opm-common/opm-common/.gitignore deleted file mode 100644 index a0eb3bc864..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/.gitignore +++ /dev/null @@ -1,75 +0,0 @@ -# editor backup files -*~ -.\#* -\#*\# -.\#*\# - -# compiler output -*.o -*.mod - -# libtool compatible files -*.lo -*.la - -# Eclipse project settings -.cproject -.project -.settings/* - -# QtCreator project settings -CMakeLists.txt.user* - -# in-tree build with CMake -CMakeCache.txt -CMakeFiles/ -cmake_install.cmake -config.h -opm-core-config.cmake -opm-core-config-version.cmake -opm-core-install.cmake -Makefile -bin/ -lib/ -Doxyfile -Documentation/html -dune.module -*.pc -install_manifest.txt - -# testing framework -CTestTestfile.cmake -DartConfiguration.tcl -Testing/ - -# Build directory in source. -build/ - -gmon.out -log.log -build -install -.cproject -.project -/testdata/statoil -.idea -/Debug/ - -# Compiled Dynamic libraries -*.so -*.dylib - -# Compiled Static libraries -*.lai -*.la -*.a - -# Mac OS X debug info -*.dSYM - -# emacs directory setting: -.dir-locals.el - -*.pyc -*.eggs -*.egg-info diff --git a/ThirdParty/custom-opm-common/opm-common/.gitmodules b/ThirdParty/custom-opm-common/opm-common/.gitmodules deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/ThirdParty/custom-opm-common/opm-common/CMakeLists.txt b/ThirdParty/custom-opm-common/opm-common/CMakeLists.txt deleted file mode 100644 index 3807817e66..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/CMakeLists.txt +++ /dev/null @@ -1,368 +0,0 @@ -project(opm-common C CXX) -cmake_minimum_required (VERSION 2.8) - -option(SIBLING_SEARCH "Search for other modules in sibling directories?" ON) -list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake/Modules) -set(OPM_MACROS_ROOT ${PROJECT_SOURCE_DIR}) - -option(BUILD_TEST_FRAMEWORK "Create test framework?" ON) -option(ENABLE_ECL_INPUT "Enable eclipse input support?" ON) -option(ENABLE_ECL_OUTPUT "Enable eclipse output support?" ON) -option(ENABLE_MOCKSIM "Build the mock simulator for io testing" ON) -option(OPM_ENABLE_PYTHON "Enable python bindings?" OFF) -option(OPM_INSTALL_PYTHON "Enable python bindings?" OFF) -option(OPM_ENABLE_EMBEDDED_PYTHON "Enable python bindings?" OFF) - -# Output implies input -if(ENABLE_ECL_OUTPUT) - set(ENABLE_ECL_INPUT ON) -endif() - -# And likewise, no input means no output -if(NOT ENABLE_ECL_INPUT) - set(ENABLE_ECL_OUTPUT OFF) -endif() - - -# not the same location as most of the other projects; this hook overrides -macro (dir_hook) -endmacro (dir_hook) - -# We need to define this variable in the installed cmake config file. -set(OPM_PROJECT_EXTRA_CODE_INSTALLED "#ENABLE_ECL_INPUT is needed by opm-common-prereq.cmake - set(ENABLE_ECL_INPUT ${ENABLE_ECL_INPUT}) - set(OPM_MACROS_ROOT ${CMAKE_INSTALL_PREFIX}/share/opm) - list(APPEND CMAKE_MODULE_PATH \${OPM_MACROS_ROOT}/cmake/Modules) - include(OpmPackage) #Make macros availabe after find_package(opm-common)") - -set(OPM_PROJECT_EXTRA_CODE_INTREE "#ENABLE_ECL_INPUT is needed by opm-common-prereq.cmake - set(ENABLE_ECL_INPUT ${ENABLE_ECL_INPUT}) - set(OPM_MACROS_ROOT ${OPM_MACROS_ROOT}) - list(APPEND CMAKE_MODULE_PATH \${OPM_MACROS_ROOT}/cmake/Modules) - include(OpmPackage) #Make macros availabe after find_package(opm-common)") -if(ENABLE_ECL_OUTPUT) - set(OPM_PROJECT_EXTRA_CODE_INSTALLED "${OPM_PROJECT_EXTRA_CODE_INSTALLED} - set(COMPARE_ECL_COMMAND ${CMAKE_INSTALL_PREFIX}/bin${${name}_VER_DIR}/compareECL) - set(OPM_PACK_COMMAND ${CMAKE_INSTALL_PREFIX}/bin${${name}_VER_DIR}/opmpack)") - - set(OPM_PROJECT_EXTRA_CODE_INTREE "${OPM_PROJECT_EXTRA_CODE_INTREE} - set(COMPARE_ECL_COMMAND ${PROJECT_BINARY_DIR}/bin/compareECL) - set(OPM_PACK_COMMAND ${PROJECT_BINARY_DIR}/bin/opmpack)") -endif() - -# project information is in dune.module. Read this file and set variables. -# we cannot generate dune.module since it is read by dunecontrol before -# the build starts, so it makes sense to keep the data there then. -include (OpmInit) -OpmSetPolicies() - -# Look for the opm-tests repository; if found the variable -# HAVE_OPM_TESTS will be set to true. -include(Findopm-tests) - -# list of prerequisites for this particular project; this is in a -# separate file (in cmake/Modules sub-directory) because it is shared -# with the find module -include (${project}-prereqs) - -# read the list of components from this file (in the project directory); -# it should set various lists with the names of the files to include -include (CMakeLists_files.cmake) - -macro (config_hook) - if(ENABLE_ECL_INPUT) - if(NOT cjson_FOUND) - list(APPEND EXTRA_INCLUDES ${PROJECT_SOURCE_DIR}/external/cjson) - endif() - # For this project - include_directories(${EXTRA_INCLUDES} ${PROJECT_BINARY_DIR}/include) - - # For downstreams - list(APPEND EXTRA_INCLUDES ${PROJECT_BINARY_DIR}/include) - set(OPM_PROJECT_EXTRA_CODE_INTREE "${OPM_PROJECT_EXTRA_CODE_INTREE} - list(APPEND opm-common_INCLUDE_DIRS ${EXTRA_INCLUDES})") - if(ENABLE_ECL_INPUT) - set(OPM_PROJECT_EXTRA_CODE_INTREE "${OPM_PROJECT_EXTRA_CODE_INTREE} - set(HAVE_ECL_INPUT 1)") - set(OPM_PROJECT_EXTRA_CODE_INSTALLED "${OPM_PROJECT_EXTRA_CODE_INSTALLED} - set(HAVE_ECL_INPUT 1)") - endif() - if(ENABLE_ECL_OUTPUT) - set(OPM_PROJECT_EXTRA_CODE_INTREE "${OPM_PROJECT_EXTRA_CODE_INTREE} - set(HAVE_ECL_OUTPUT 1)") - set(OPM_PROJECT_EXTRA_CODE_INSTALLED "${OPM_PROJECT_EXTRA_CODE_INSTALLED} - set(HAVE_ECL_OUTPUT 1)") - endif() - - # Configure boost targets for old cmake - include(cmake/Modules/BoostTargets.cmake) - - if (HAVE_DYNAMIC_BOOST_TEST) - set_target_properties(Boost::unit_test_framework PROPERTIES INTERFACE_COMPILE_DEFINITIONS BOOST_TEST_DYN_LINK=1) - endif() - endif() -endmacro (config_hook) - -macro (prereqs_hook) -endmacro (prereqs_hook) - -macro (sources_hook) - if(ENABLE_ECL_INPUT) - # Keyword generation - include(GenerateKeywords.cmake) - - # Append generated sources - list(INSERT opm-common_SOURCES 0 ${PROJECT_BINARY_DIR}/ParserInit.cpp) - foreach (name A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) - list(INSERT opm-common_SOURCES 0 ${PROJECT_BINARY_DIR}/ParserKeywords/${name}.cpp) - endforeach() - endif() - #set_source_files_properties(src/opm/parser/eclipse/Python/Python.cpp - # PROPERTIES COMPILE_FLAGS -Wno-shadow) -endmacro (sources_hook) - -macro (fortran_hook) -endmacro (fortran_hook) - -macro (files_hook) -endmacro (files_hook) - -macro (tests_hook) - if(ENABLE_ECL_INPUT) - include(ExtraTests.cmake) - endif() -endmacro (tests_hook) - -macro (install_hook) - install(DIRECTORY ${PROJECT_BINARY_DIR}/include/ - DESTINATION include - PATTERN *.hpp) -endmacro (install_hook) - -# If opm-common is configured to embed the python interpreter we must make sure -# that all downstream modules link libpython transitively. Due to the required -# integration with Python+cmake machinery provided by pybind11 this is done by -# manually adding to the opm-common_LIBRARIES variable here, and not in the -# OpmnLibMain function. Here only the library dependency is implemented, the -# bulk of the python configuration is further down in the file. -if (OPM_ENABLE_PYTHON) - find_package(PythonInterp REQUIRED) - if (OPM_ENABLE_EMBEDDED_PYTHON) - find_package(PythonLibs REQUIRED) - list(APPEND opm-common_LIBRARIES ${PYTHON_LIBRARY}) - endif() -endif() - -# all setup common to the OPM library modules is done here -include (OpmLibMain) - -if (ENABLE_MOCKSIM) - add_library(mocksim - msim/src/msim.cpp) - target_link_libraries(mocksim opmcommon) - target_include_directories(mocksim PUBLIC msim/include) - add_executable(msim examples/msim.cpp) - target_link_libraries(msim mocksim) - - if (Boost_UNIT_TEST_FRAMEWORK_FOUND) - set(_libs mocksim opmcommon - ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY}) - - foreach( test test_msim test_msim_ACTIONX test_msim_EXIT) - opm_add_test(${test} SOURCES tests/msim/${test}.cpp - LIBRARIES ${_libs} - WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/tests - CONDITION ${HAVE_ECL_INPUT}) - endforeach() - endif() -endif() - -# Build the compare utilities -if(ENABLE_ECL_INPUT) - #add_executable(compareECL - # test_util/EclFilesComparator.cpp - # test_util/EclRegressionTest.cpp - # test_util/compareECL.cpp - # ) - - #add_executable(convertECL - # test_util/convertECL.cpp - # ) - - #add_executable(summary - # test_util/summary.cpp - # ) - - #add_executable(test_esmry_lod - # test_util/test_esmry_lod.cpp - # ) - - #foreach(target compareECL convertECL summary test_esmry_lod) - # target_link_libraries(${target} opmcommon) - # install(TARGETS ${target} DESTINATION bin) - #endforeach() - - # Add the tests - set(_libs opmcommon - ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY}) - - opm_add_test(test_EclFilesComparator - CONDITION - ENABLE_ECL_INPUT AND Boost_UNIT_TEST_FRAMEWORK_FOUND - SOURCES - tests/test_EclFilesComparator.cpp - test_util/EclFilesComparator.cpp - LIBRARIES - ${_libs} - WORKING_DIRECTORY - ${PROJECT_BINARY_DIR}/tests - ) - - opm_add_test(test_EclRegressionTest - CONDITION - ENABLE_ECL_INPUT AND Boost_UNIT_TEST_FRAMEWORK_FOUND - SOURCES - tests/test_EclRegressionTest.cpp - test_util/EclFilesComparator.cpp - test_util/EclRegressionTest.cpp - LIBRARIES - ${_libs} - WORKING_DIRECTORY - ${PROJECT_BINARY_DIR}/tests - ) - - foreach(test test_EclIO test_EGrid test_ERft test_ERst test_ESmry) - opm_add_test(${test} CONDITION ENABLE_ECL_INPUT AND Boost_UNIT_TEST_FRAMEWORK_FOUND - LIBRARIES ${_libs} - WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/tests) - endforeach() -endif() - -# Install build system files -install(DIRECTORY cmake DESTINATION share/opm) - -# Install tab completion skeleton -install(FILES etc/opm_bash_completion.sh.in DESTINATION share/opm/etc) - -if (OPM_ENABLE_PYTHON) - # ------------------------------------------------------------------------- - # 1: Wrap C++ functionality in Python - if (EXISTS "/etc/debian_version") - set(PYTHON_PACKAGE_PATH "dist-packages") - else() - set(PYTHON_PACKAGE_PATH "site-packages") - endif() - set(PYTHON_INSTALL_PREFIX "lib/python${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}/${PYTHON_PACKAGE_PATH}" CACHE STRING "Subdirectory to install Python modules in") - - make_directory(${PROJECT_BINARY_DIR}/python) - get_target_property(_opmcommon_include_dirs opmcommon INCLUDE_DIRECTORIES) - list(APPEND _opmcommon_include_dirs ${_ecl_include_dirs}) - string(REPLACE ";" ":" _setup_include_dirs "${_opmcommon_include_dirs}") - - if (CMAKE_PREFIX_PATH) - set(_opmcommon_lib_dirs ${PROJECT_BINARY_DIR}/lib ${CMAKE_PREFIX_PATH}/${CMAKE_INSTALL_LIBDIR}) - else() - set(_opmcommon_lib_dirs ${PROJECT_BINARY_DIR}/lib) - endif() - string(REPLACE ";" ":" _setup_lib_dirs "${_opmcommon_lib_dirs}") - - if (USE_RUNPATH) - set (_python_rpath_list) - if (CMAKE_PREFIX_PATH) - foreach(path ${CMAKE_PREFIX_PATH}) - list(APPEND _python_rpath_list "${path}/${CMAKE_INSTALL_LIBDIR}") - endforeach() - endif() - - if (BUILD_SHARED_LIBS) - list(APPEND _python_rpath_list "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}") - endif() - - if (_python_rpath_list) - string(REPLACE ";" ":" _rpath "${_python_rpath_list}") - set( _rpath_arg "--rpath=${_rpath}") - else() - set(_rpath_arg "") - endif() - else() - set( _rpath_arg "") - endif() - - execute_process(COMMAND ${PYTHON_EXECUTABLE} target_name.py - WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/python - OUTPUT_VARIABLE python_lib_target) - - add_custom_target(copy_python ALL - COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/python/install.py ${PROJECT_SOURCE_DIR}/python ${PROJECT_BINARY_DIR} 0) - - add_custom_command(OUTPUT python/python/opm/${python_lib_target} - DEPENDS ${PYTHON_CXX_DEPENDS} - DEPENDS copy_python - COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_BINARY_DIR}/python/setup.py - build - build_ext - --build-lib=${PROJECT_BINARY_DIR}/python/python/opm - --library-dirs=${_setup_lib_dirs} - ${_rpath_arg} - --include-dirs=${_setup_include_dirs} - WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/python - COMMENT "Building python bindings") - add_custom_target(opmcommon_python ALL DEPENDS python/python/opm/${python_lib_target}) - add_dependencies(opmcommon_python opmcommon) - - # The install target is based on manually copying the python file tree to the - # installation area with a small installation script 'install.py'. Would have - # preferred to use standard setup.py install, but the setup.py based solution - # refuses to install to a location which the current python executable can not - # load from, and the use of eggs in the setup.py based installation makes - # debugging quite difficult. - # - # Since the installation of Python code is nonstandard it is protected by an - # extra cmake switch, OPM_INSTALL_PYTHON. If you prefer you can still invoke - # setup.py install manually - optionally with the generated script - # setup-install.sh - and completely bypass cmake in the installation phase. - if (OPM_INSTALL_PYTHON) - install( CODE "execute_process(COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_BINARY_DIR}/python/install.py ${PROJECT_BINARY_DIR}/python/python/opm ${DEST_PREFIX}${CMAKE_INSTALL_PREFIX}/${PYTHON_INSTALL_PREFIX} 1)") - endif() - - # Observe that if the opmcommon library has been built as a shared library the - # python library opmcommon_python will in general not find it runtime while - # testing. - add_test(NAME python_tests - WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/python - COMMAND ${CMAKE_COMMAND} -E env LD_LIBRARY_PATH=${PROJECT_BINARY_DIR}/lib ${PYTHON_EXECUTABLE} setup.py build_ext --dry-run --build-lib ${PROJECT_BINARY_DIR}/python/python/opm test - ) - - set_target_properties(opmcommon PROPERTIES POSITION_INDEPENDENT_CODE ON) - set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES ${PROJECT_BINARY_DIR}/python/python) - - # ------------------------------------------------------------------------- - # Let cmake configure some small shell scripts which can be used to simplify - # building, testing and installation of the Python extensions. - configure_file(python/setup-build.sh.in tmp/setup-build.sh) - file( COPY ${PROJECT_BINARY_DIR}/tmp/setup-build.sh - DESTINATION ${PROJECT_BINARY_DIR} - FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE ) - - configure_file(python/setup-test.sh.in tmp/setup-test.sh) - file( COPY ${PROJECT_BINARY_DIR}/tmp/setup-test.sh - DESTINATION ${PROJECT_BINARY_DIR} - FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE ) - - configure_file(python/setup-install.sh.in tmp/setup-install.sh) - file( COPY ${PROJECT_BINARY_DIR}/tmp/setup-install.sh - DESTINATION ${PROJECT_BINARY_DIR} - FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE ) - - configure_file(python/enable-python.sh.in enable-python.sh) - - # ------------------------------------------------------------------------- - # 2: Embed the Python interpreter for keywords like PYACTION and PYINPUT - if (OPM_ENABLE_EMBEDDED_PYTHON) - add_subdirectory(python/pybind11) - target_include_directories(opmcommon SYSTEM PRIVATE "python/pybind11/include;${PYTHON_INCLUDE_DIRS}") - target_link_libraries(opmcommon PUBLIC ${PYTHON_LIBRARY}) - - add_definitions(-DEMBEDDED_PYTHON) - endif() -endif() diff --git a/ThirdParty/custom-opm-common/opm-common/CMakeLists_files.cmake b/ThirdParty/custom-opm-common/opm-common/CMakeLists_files.cmake deleted file mode 100644 index 5a2cdda979..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/CMakeLists_files.cmake +++ /dev/null @@ -1,815 +0,0 @@ -# This file sets up five lists: -# MAIN_SOURCE_FILES List of compilation units which will be included in -# the library. If it isn't on this list, it won't be -# part of the library. Please try to keep it sorted to -# maintain sanity. -# -# TEST_SOURCE_FILES List of programs that will be run as unit tests. -# -# TEST_DATA_FILES Files from the source three that should be made -# available in the corresponding location in the build -# tree in order to run tests there. -# -# EXAMPLE_SOURCE_FILES Other programs that will be compiled as part of the -# build, but which is not part of the library nor is -# run as tests. -# -# PUBLIC_HEADER_FILES List of public header files that should be -# distributed together with the library. The source -# files can of course include other files than these; -# you should only add to this list if the *user* of -# the library needs it. -# -# CROSS_COMPILE_FILES List of header files providing substitutes for -# functions exclusively available on Linux build -# systems. - -list (APPEND MAIN_SOURCE_FILES - src/opm/common/data/SimulationDataContainer.cpp - src/opm/common/OpmLog/CounterLog.cpp - src/opm/common/OpmLog/EclipsePRTLog.cpp - src/opm/common/OpmLog/LogBackend.cpp - src/opm/common/OpmLog/Logger.cpp - src/opm/common/OpmLog/LogUtil.cpp - src/opm/common/OpmLog/OpmLog.cpp - src/opm/common/OpmLog/StreamLog.cpp - src/opm/common/OpmLog/TimerLog.cpp - src/opm/common/utility/ActiveGridCells.cpp - src/opm/common/utility/FileSystem.cpp - src/opm/common/utility/numeric/MonotCubicInterpolator.cpp - src/opm/common/utility/parameters/Parameter.cpp - src/opm/common/utility/parameters/ParameterGroup.cpp - src/opm/common/utility/parameters/ParameterTools.cpp - src/opm/common/utility/numeric/calculateCellVol.cpp - src/opm/common/utility/TimeService.cpp -) -if(ENABLE_ECL_INPUT) - list(APPEND MAIN_SOURCE_FILES - src/opm/io/eclipse/SummaryNode.cpp - src/opm/json/JsonObject.cpp - src/opm/parser/eclipse/Deck/Deck.cpp - src/opm/parser/eclipse/Deck/DeckItem.cpp - src/opm/parser/eclipse/Deck/DeckValue.cpp - src/opm/parser/eclipse/Deck/DeckKeyword.cpp - src/opm/parser/eclipse/Deck/DeckRecord.cpp - src/opm/parser/eclipse/Deck/DeckOutput.cpp - src/opm/parser/eclipse/Deck/DeckSection.cpp - src/opm/parser/eclipse/Deck/UDAValue.cpp - src/opm/parser/eclipse/Python/Python.cpp - src/opm/parser/eclipse/EclipseState/Schedule/Action/PyAction.cpp - src/opm/parser/eclipse/EclipseState/AquiferConfig.cpp - src/opm/parser/eclipse/EclipseState/AquiferCT.cpp - src/opm/parser/eclipse/EclipseState/Aquifetp.cpp - src/opm/parser/eclipse/EclipseState/Aquancon.cpp - src/opm/parser/eclipse/EclipseState/checkDeck.cpp - src/opm/parser/eclipse/EclipseState/EclipseConfig.cpp - src/opm/parser/eclipse/EclipseState/EclipseState.cpp - src/opm/parser/eclipse/EclipseState/EndpointScaling.cpp - src/opm/parser/eclipse/EclipseState/Edit/EDITNNC.cpp - src/opm/parser/eclipse/EclipseState/Grid/FieldProps.cpp - src/opm/parser/eclipse/EclipseState/Grid/FieldPropsManager.cpp - src/opm/parser/eclipse/EclipseState/Grid/Box.cpp - src/opm/parser/eclipse/EclipseState/Grid/BoxManager.cpp - src/opm/parser/eclipse/EclipseState/Grid/EclipseGrid.cpp - src/opm/parser/eclipse/EclipseState/Grid/FaceDir.cpp - src/opm/parser/eclipse/EclipseState/Grid/FaultCollection.cpp - src/opm/parser/eclipse/EclipseState/Grid/Fault.cpp - src/opm/parser/eclipse/EclipseState/Grid/FaultFace.cpp - src/opm/parser/eclipse/EclipseState/Grid/GridDims.cpp - src/opm/parser/eclipse/EclipseState/Grid/MULTREGTScanner.cpp - src/opm/parser/eclipse/EclipseState/Grid/NNC.cpp - src/opm/parser/eclipse/EclipseState/Grid/Operate.cpp - src/opm/parser/eclipse/EclipseState/Grid/PinchMode.cpp - src/opm/parser/eclipse/EclipseState/Grid/SatfuncPropertyInitializers.cpp - src/opm/parser/eclipse/EclipseState/Grid/setKeywordBox.cpp - src/opm/parser/eclipse/EclipseState/Grid/TransMult.cpp - src/opm/parser/eclipse/EclipseState/InitConfig/Equil.cpp - src/opm/parser/eclipse/EclipseState/InitConfig/FoamConfig.cpp - src/opm/parser/eclipse/EclipseState/InitConfig/InitConfig.cpp - src/opm/parser/eclipse/EclipseState/IOConfig/IOConfig.cpp - src/opm/parser/eclipse/EclipseState/IOConfig/RestartConfig.cpp - src/opm/parser/eclipse/EclipseState/Runspec.cpp - src/opm/parser/eclipse/EclipseState/TracerConfig.cpp - src/opm/parser/eclipse/EclipseState/Schedule/Action/ActionAST.cpp - src/opm/parser/eclipse/EclipseState/Schedule/Action/ActionContext.cpp - src/opm/parser/eclipse/EclipseState/Schedule/Action/ActionResult.cpp - src/opm/parser/eclipse/EclipseState/Schedule/Action/Actdims.cpp - src/opm/parser/eclipse/EclipseState/Schedule/Action/Actions.cpp - src/opm/parser/eclipse/EclipseState/Schedule/Action/ActionX.cpp - src/opm/parser/eclipse/EclipseState/Schedule/Action/ActionParser.cpp - src/opm/parser/eclipse/EclipseState/Schedule/Action/ActionValue.cpp - src/opm/parser/eclipse/EclipseState/Schedule/Action/ASTNode.cpp - src/opm/parser/eclipse/EclipseState/Schedule/Action/Condition.cpp - src/opm/parser/eclipse/EclipseState/Schedule/ArrayDimChecker.cpp - src/opm/parser/eclipse/EclipseState/Schedule/Events.cpp - src/opm/parser/eclipse/EclipseState/Schedule/Group/Group.cpp - src/opm/parser/eclipse/EclipseState/Schedule/Group/GuideRate.cpp - src/opm/parser/eclipse/EclipseState/Schedule/Group/GuideRateConfig.cpp - src/opm/parser/eclipse/EclipseState/Schedule/Group/GuideRateModel.cpp - src/opm/parser/eclipse/EclipseState/Schedule/Group/GConSale.cpp - src/opm/parser/eclipse/EclipseState/Schedule/Group/GConSump.cpp - src/opm/parser/eclipse/EclipseState/Schedule/Group/GTNode.cpp - src/opm/parser/eclipse/EclipseState/Schedule/Well/injection.cpp - src/opm/parser/eclipse/EclipseState/Schedule/MessageLimits.cpp - src/opm/parser/eclipse/EclipseState/Schedule/MSW/icd.cpp - src/opm/parser/eclipse/EclipseState/Schedule/MSW/Compsegs.cpp - src/opm/parser/eclipse/EclipseState/Schedule/MSW/Segment.cpp - src/opm/parser/eclipse/EclipseState/Schedule/MSW/WellSegments.cpp - src/opm/parser/eclipse/EclipseState/Schedule/MSW/updatingConnectionsWithSegments.cpp - src/opm/parser/eclipse/EclipseState/Schedule/MSW/SpiralICD.cpp - src/opm/parser/eclipse/EclipseState/Schedule/MSW/Valve.cpp - src/opm/parser/eclipse/EclipseState/Schedule/OilVaporizationProperties.cpp - src/opm/parser/eclipse/EclipseState/Schedule/RFTConfig.cpp - src/opm/parser/eclipse/EclipseState/Schedule/RPTConfig.cpp - src/opm/parser/eclipse/EclipseState/Schedule/Schedule.cpp - src/opm/parser/eclipse/EclipseState/Schedule/ScheduleTypes.cpp - src/opm/parser/eclipse/EclipseState/Schedule/SummaryState.cpp - src/opm/parser/eclipse/EclipseState/Schedule/TimeMap.cpp - src/opm/parser/eclipse/EclipseState/Schedule/Well/Connection.cpp - src/opm/parser/eclipse/EclipseState/Schedule/eval_uda.cpp - src/opm/parser/eclipse/EclipseState/Schedule/Well/Well.cpp - src/opm/parser/eclipse/EclipseState/Schedule/Well/WellConnections.cpp - src/opm/parser/eclipse/EclipseState/Schedule/Well/WList.cpp - src/opm/parser/eclipse/EclipseState/Schedule/Well/WListManager.cpp - src/opm/parser/eclipse/EclipseState/Schedule/Well/WellEconProductionLimits.cpp - src/opm/parser/eclipse/EclipseState/Schedule/Well/WellFoamProperties.cpp - src/opm/parser/eclipse/EclipseState/Schedule/Well/WellInjectionProperties.cpp - src/opm/parser/eclipse/EclipseState/Schedule/Well/WellPolymerProperties.cpp - src/opm/parser/eclipse/EclipseState/Schedule/Well/WellBrineProperties.cpp - src/opm/parser/eclipse/EclipseState/Schedule/Well/WellTracerProperties.cpp - src/opm/parser/eclipse/EclipseState/Schedule/Well/WellProductionProperties.cpp - src/opm/parser/eclipse/EclipseState/Schedule/Well/WellTestConfig.cpp - src/opm/parser/eclipse/EclipseState/Schedule/Well/WellTestState.cpp - src/opm/parser/eclipse/EclipseState/SimulationConfig/BCConfig.cpp - src/opm/parser/eclipse/EclipseState/SimulationConfig/RockConfig.cpp - src/opm/parser/eclipse/EclipseState/SimulationConfig/SimulationConfig.cpp - src/opm/parser/eclipse/EclipseState/SimulationConfig/ThresholdPressure.cpp - src/opm/parser/eclipse/EclipseState/SummaryConfig/SummaryConfig.cpp - src/opm/parser/eclipse/EclipseState/Tables/ColumnSchema.cpp - src/opm/parser/eclipse/EclipseState/Tables/DenT.cpp - src/opm/parser/eclipse/EclipseState/Tables/JFunc.cpp - src/opm/parser/eclipse/EclipseState/Tables/PvtxTable.cpp - src/opm/parser/eclipse/EclipseState/Tables/SimpleTable.cpp - src/opm/parser/eclipse/EclipseState/Tables/PolyInjTables.cpp - src/opm/parser/eclipse/EclipseState/Tables/StandardCond.cpp - src/opm/parser/eclipse/EclipseState/Tables/TableColumn.cpp - src/opm/parser/eclipse/EclipseState/Tables/TableContainer.cpp - src/opm/parser/eclipse/EclipseState/Tables/TableIndex.cpp - src/opm/parser/eclipse/EclipseState/Tables/TableManager.cpp - src/opm/parser/eclipse/EclipseState/Tables/TableSchema.cpp - src/opm/parser/eclipse/EclipseState/Tables/Tables.cpp - src/opm/parser/eclipse/EclipseState/Tables/Rock2dTable.cpp - src/opm/parser/eclipse/EclipseState/Tables/Rock2dtrTable.cpp - src/opm/parser/eclipse/EclipseState/Tables/PvtwsaltTable.cpp - src/opm/parser/eclipse/EclipseState/Tables/BrineDensityTable.cpp - src/opm/parser/eclipse/EclipseState/Tables/SolventDensityTable.cpp - src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQASTNode.cpp - src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQParams.cpp - src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQParser.cpp - src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQSet.cpp - src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQActive.cpp - src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQAssign.cpp - src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQDefine.cpp - src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQEnums.cpp - src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQConfig.cpp - src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQContext.cpp - src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQFunction.cpp - src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQFunctionTable.cpp - src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQInput.cpp - src/opm/parser/eclipse/EclipseState/Schedule/VFPInjTable.cpp - src/opm/parser/eclipse/EclipseState/Schedule/VFPProdTable.cpp - src/opm/parser/eclipse/Parser/ErrorGuard.cpp - src/opm/parser/eclipse/Parser/ParseContext.cpp - src/opm/parser/eclipse/Parser/Parser.cpp - src/opm/parser/eclipse/Parser/ParserEnums.cpp - src/opm/parser/eclipse/Parser/ParserItem.cpp - src/opm/parser/eclipse/Parser/ParserKeyword.cpp - src/opm/parser/eclipse/Parser/ParserRecord.cpp - src/opm/parser/eclipse/Parser/raw/RawKeyword.cpp - src/opm/parser/eclipse/Parser/raw/RawRecord.cpp - src/opm/parser/eclipse/Parser/raw/StarToken.cpp - src/opm/parser/eclipse/Units/Dimension.cpp - src/opm/parser/eclipse/Units/UnitSystem.cpp - src/opm/parser/eclipse/Utility/Functional.cpp - src/opm/parser/eclipse/Utility/Stringview.cpp - ) - - -# This list is only used to register a CMake dependency between the the python -# extension and the corresponding C++ wrapper files. The cpp files actually -# listed here are repeated in the actual definition of the extension in the -# setup.py file. - list( APPEND PYTHON_CXX_SOURCE_FILES - python/cxx/connection.cpp - python/cxx/converters.cpp - python/cxx/deck.cpp - python/cxx/deck_keyword.cpp - python/cxx/eclipse_io.cpp - python/cxx/field_props.cpp - python/cxx/eclipse_config.cpp - python/cxx/eclipse_grid.cpp - python/cxx/eclipse_state.cpp - python/cxx/export.cpp - python/cxx/group.cpp - python/cxx/log.cpp - python/cxx/parsecontext.cpp - python/cxx/parser.cpp - python/cxx/schedule.cpp - python/cxx/summary_state.cpp - python/cxx/table_manager.cpp - python/cxx/unit_system.cpp - python/cxx/well.cpp - ) - - if (OPM_ENABLE_EMBEDDED_PYTHON) - set_source_files_properties(${PYTHON_CXX_SOURCE_FILES} PROPERTIES COMPILE_FLAGS -Wno-shadow) - set_source_files_properties(src/opm/parser/eclipse/Python/PythonInterp.cpp PROPERTIES COMPILE_FLAGS -Wno-shadow) - set_source_files_properties(src/opm/parser/eclipse/EclipseState/Schedule/Action/PyAction.cpp PROPERTIES COMPILE_FLAGS -Wno-shadow) - list( APPEND MAIN_SOURCE_FILES - src/opm/parser/eclipse/Python/PythonInterp.cpp - src/opm/parser/eclipse/Python/PyRunModule.cpp - ${PYTHON_CXX_SOURCE_FILES}) - endif() - - list( APPEND PYTHON_CXX_DEPENDS ${PYTHON_CXX_SOURCE_FILES} - python/cxx/converters.hpp - python/cxx/export.hpp) - - if(NOT cjson_FOUND) - list(APPEND MAIN_SOURCE_FILES external/cjson/cJSON.c) - endif() -endif() -if(ENABLE_ECL_OUTPUT) - list( APPEND MAIN_SOURCE_FILES - src/opm/io/eclipse/EclFile.cpp - src/opm/io/eclipse/EclOutput.cpp - src/opm/io/eclipse/EclUtil.cpp - src/opm/io/eclipse/EGrid.cpp - src/opm/io/eclipse/ERft.cpp - src/opm/io/eclipse/ERst.cpp - src/opm/io/eclipse/ERsm.cpp - src/opm/io/eclipse/ESmry.cpp - src/opm/io/eclipse/ESmry_write_rsm.cpp - src/opm/io/eclipse/OutputStream.cpp - src/opm/io/eclipse/SummaryNode.cpp - src/opm/io/eclipse/rst/connection.cpp - src/opm/io/eclipse/rst/group.cpp - src/opm/io/eclipse/rst/header.cpp - src/opm/io/eclipse/rst/segment.cpp - src/opm/io/eclipse/rst/state.cpp - src/opm/io/eclipse/rst/well.cpp - src/opm/output/eclipse/AggregateActionxData.cpp - src/opm/output/eclipse/AggregateConnectionData.cpp - src/opm/output/eclipse/AggregateGroupData.cpp - src/opm/output/eclipse/AggregateMSWData.cpp - src/opm/output/eclipse/AggregateUDQData.cpp - src/opm/output/eclipse/AggregateWellData.cpp - src/opm/output/eclipse/CreateActionxDims.cpp - src/opm/output/eclipse/CreateDoubHead.cpp - src/opm/output/eclipse/CreateInteHead.cpp - src/opm/output/eclipse/CreateLogiHead.cpp - src/opm/output/eclipse/CreateUdqDims.cpp - src/opm/output/eclipse/DoubHEAD.cpp - src/opm/output/eclipse/EclipseGridInspector.cpp - src/opm/output/eclipse/EclipseIO.cpp - src/opm/output/eclipse/InteHEAD.cpp - src/opm/output/eclipse/LinearisedOutputTable.cpp - src/opm/output/eclipse/LoadRestart.cpp - src/opm/output/eclipse/LogiHEAD.cpp - src/opm/output/eclipse/RestartIO.cpp - src/opm/output/eclipse/Summary.cpp - src/opm/output/eclipse/Tables.cpp - src/opm/output/eclipse/RegionCache.cpp - src/opm/output/eclipse/RestartValue.cpp - src/opm/output/eclipse/WriteInit.cpp - src/opm/output/eclipse/WriteRFT.cpp - src/opm/output/eclipse/WriteRPT.cpp - src/opm/output/eclipse/report/WELSPECS.cpp - src/opm/output/data/Solution.cpp - ) -endif() - -list (APPEND TEST_SOURCE_FILES - tests/test_ActiveGridCells.cpp - tests/test_calculateCellVol.cpp - tests/test_cmp.cpp - tests/test_cubic.cpp - tests/test_messagelimiter.cpp - tests/test_nonuniformtablelinear.cpp - tests/test_OpmLog.cpp - tests/test_param.cpp - tests/test_RootFinders.cpp - tests/test_SimulationDataContainer.cpp - tests/test_sparsevector.cpp - tests/test_uniformtablelinear.cpp -) -if(ENABLE_ECL_INPUT) - list(APPEND TEST_SOURCE_FILES - tests/rst_test.cpp - tests/test_ERsm.cpp - tests/parser/ACTIONX.cpp - tests/parser/ADDREGTests.cpp - tests/parser/AquiferTests.cpp - tests/parser/BoxTests.cpp - tests/parser/ColumnSchemaTests.cpp - tests/parser/ConnectionTests.cpp - tests/parser/COMPSEGUnits.cpp - tests/parser/CopyRegTests.cpp - tests/parser/DeckValueTests.cpp - tests/parser/DeckTests.cpp - tests/parser/DynamicStateTests.cpp - tests/parser/DynamicVectorTests.cpp - tests/parser/EclipseGridTests.cpp - tests/parser/EmbeddedPython.cpp - tests/parser/EqualRegTests.cpp - tests/parser/EventTests.cpp - tests/parser/FaceDirTests.cpp - tests/parser/FaultTests.cpp - tests/parser/FieldPropsTests.cpp - tests/parser/FoamTests.cpp - tests/parser/FunctionalTests.cpp - tests/parser/GeomodifierTests.cpp - tests/parser/GroupTests.cpp - tests/parser/InitConfigTest.cpp - tests/parser/IOConfigTests.cpp - tests/parser/MessageLimitTests.cpp - tests/parser/MultiRegTests.cpp - tests/parser/MultisegmentWellTests.cpp - tests/parser/MULTREGTScannerTests.cpp - tests/parser/OrderedMapTests.cpp - tests/parser/ParseContextTests.cpp - tests/parser/ParseContext_EXIT1.cpp - tests/parser/ParseDATAWithDefault.cpp - tests/parser/PYACTION.cpp - tests/parser/RawKeywordTests.cpp - tests/parser/test_ReportConfig.cpp - tests/parser/ResinsightTest.cpp - tests/parser/RestartConfigTests.cpp - tests/parser/RFTConfigTests.cpp - tests/parser/RockTableTests.cpp - tests/parser/RunspecTests.cpp - tests/parser/SaltTableTests.cpp - tests/parser/ScheduleRestartTests.cpp - tests/parser/ScheduleTests.cpp - tests/parser/SectionTests.cpp - tests/parser/SimpleTableTests.cpp - tests/parser/SimulationConfigTest.cpp - tests/parser/StarTokenTests.cpp - tests/parser/StringTests.cpp - tests/parser/SummaryConfigTests.cpp - tests/parser/TabdimsTests.cpp - tests/parser/TableColumnTests.cpp - tests/parser/TableContainerTests.cpp - tests/parser/TableManagerTests.cpp - tests/parser/TableSchemaTests.cpp - tests/parser/ThresholdPressureTest.cpp - tests/parser/TimeMapTest.cpp - tests/parser/TracerTests.cpp - tests/parser/TransMultTests.cpp - tests/parser/TuningTests.cpp - tests/parser/UDQTests.cpp - tests/parser/UnitTests.cpp - tests/parser/ValueTests.cpp - tests/parser/WellSolventTests.cpp - tests/parser/WellTracerTests.cpp - tests/parser/WellTests.cpp - tests/parser/WLIST.cpp - tests/parser/WTEST.cpp) -endif() -if(ENABLE_ECL_OUTPUT) - list (APPEND TEST_SOURCE_FILES - tests/test_AggregateActionxData.cpp - tests/test_AggregateWellData.cpp - tests/test_AggregateGroupData.cpp - tests/test_AggregateMSWData.cpp - tests/test_AggregateConnectionData.cpp - tests/test_AggregateUDQData.cpp - tests/test_ArrayDimChecker.cpp - tests/test_EclipseIO.cpp - tests/test_DoubHEAD.cpp - tests/test_InteHEAD.cpp - tests/test_LinearisedOutputTable.cpp - tests/test_LogiHEAD.cpp - tests/test_OutputStream.cpp - tests/test_regionCache.cpp - tests/test_PaddedOutputString.cpp - tests/test_Restart.cpp - tests/test_RFT.cpp - tests/test_rst.cpp - tests/test_Solution.cpp - tests/test_Summary.cpp - tests/test_Summary_Group.cpp - tests/test_Tables.cpp - tests/test_Wells.cpp - tests/test_WindowedArray.cpp - tests/test_restartwellinfo.cpp - ) -endif() - -list (APPEND TEST_DATA_FILES - tests/testdata.param -) -if(ENABLE_ECL_OUTPUT) - list (APPEND TEST_DATA_FILES - tests/expect-wdims.chldg.err.out - tests/expect-wdims.err.out - tests/BASE_SIM.DATA - tests/BASE_SIM_THPRES.DATA - tests/RESTART_SIM.DATA - tests/summary_deck.DATA - tests/group_group.DATA - tests/testblackoilstate3.DATA - tests/testrft.DATA - tests/table_deck.DATA - tests/summary_deck_non_constant_porosity.DATA - tests/SUMMARY_EFF_FAC.DATA - tests/SPE1CASE1.DATA - tests/SPE1CASE1.SMSPEC - tests/SPE1CASE1A.SMSPEC - tests/SPE9_CP_PACKED.DATA - tests/SOFR_TEST.DATA - tests/UDQ_TEST_WCONPROD_IUAD-2.DATA - tests/UDQ_ACTIONX_TEST1.DATA - tests/UDQ_ACTIONX_TEST1_U.DATA - tests/include_example_pvt.txt - tests/include_example_summary.txt - tests/include_sgof.txt - tests/include_swof.txt - tests/include_grid_3x5x4.grdecl - tests/SPE1CASE2.DATA - tests/SPE1CASE2_RESTART.DATA - tests/SPE1CASE2.X0060 - tests/PYACTION.DATA - tests/act1.py - tests/MSW.DATA - tests/EXIT_TEST.DATA - tests/action_syntax_error.py - tests/action_missing_run.py - tests/EMBEDDED_PYTHON.DATA - tests/wclose.py - tests/msim/MSIM_PYACTION.DATA - tests/msim/action1.py - tests/msim/action2.py - ) -endif() - -list (APPEND EXAMPLE_SOURCE_FILES -) -if(ENABLE_ECL_INPUT) - list (APPEND TEST_DATA_FILES - tests/ECLFILE.INIT - tests/ECLFILE.FINIT - tests/SPE1CASE1.EGRID - tests/SPE1CASE1.RFT - tests/SPE1_TESTCASE.UNRST - tests/SPE1_TESTCASE.FUNRST - tests/SPE1_TESTCASE.F0025 - tests/SPE1_TESTCASE.X0025 - tests/SPE1CASE1.UNSMRY - tests/SPE1CASE1A.UNSMRY - tests/SPE1CASE1_RST60.SMSPEC - tests/SPE1CASE1_RST60.UNSMRY - tests/MODEL2_RESTART.DATA - tests/restart/MODEL2.UNRST - ) - list (APPEND EXAMPLE_SOURCE_FILES - #examples/opmi.cpp - #examples/opmpack.cpp - #examples/opmhash.cpp - ) -endif() - -# programs listed here will not only be compiled, but also marked for -# installation -list (APPEND PROGRAM_SOURCE_FILES -) -if(ENABLE_ECL_INPUT) - list (APPEND PROGRAM_SOURCE_FILES - examples/opmi.cpp - examples/opmpack.cpp - examples/opmhash.cpp - ) -endif() - -list( APPEND PUBLIC_HEADER_FILES - opm/common/ErrorMacros.hpp - opm/common/Exceptions.hpp - opm/common/data/SimulationDataContainer.hpp - opm/common/OpmLog/CounterLog.hpp - opm/common/OpmLog/EclipsePRTLog.hpp - opm/common/OpmLog/LogBackend.hpp - opm/common/OpmLog/Logger.hpp - opm/common/OpmLog/LogUtil.hpp - opm/common/OpmLog/MessageFormatter.hpp - opm/common/OpmLog/MessageLimiter.hpp - opm/common/OpmLog/Location.hpp - opm/common/OpmLog/OpmLog.hpp - opm/common/OpmLog/StreamLog.hpp - opm/common/OpmLog/TimerLog.hpp - opm/common/utility/ActiveGridCells.hpp - opm/common/utility/FileSystem.hpp - opm/common/utility/numeric/cmp.hpp - opm/common/utility/platform_dependent/disable_warnings.h - opm/common/utility/platform_dependent/reenable_warnings.h - opm/common/utility/numeric/blas_lapack.h - opm/common/utility/numeric/buildUniformMonotoneTable.hpp - opm/common/utility/numeric/linearInterpolation.hpp - opm/common/utility/numeric/MonotCubicInterpolator.hpp - opm/common/utility/numeric/NonuniformTableLinear.hpp - opm/common/utility/numeric/RootFinders.hpp - opm/common/utility/numeric/SparseVector.hpp - opm/common/utility/numeric/UniformTableLinear.hpp - opm/common/utility/parameters/ParameterGroup.hpp - opm/common/utility/parameters/ParameterGroup_impl.hpp - opm/common/utility/parameters/Parameter.hpp - opm/common/utility/parameters/ParameterMapItem.hpp - opm/common/utility/parameters/ParameterRequirement.hpp - opm/common/utility/parameters/ParameterStrings.hpp - opm/common/utility/parameters/ParameterTools.hpp - opm/common/utility/numeric/calculateCellVol.hpp - opm/common/utility/String.hpp - opm/common/utility/TimeService.hpp -) -if(ENABLE_ECL_INPUT) - list(APPEND PUBLIC_HEADER_FILES - opm/io/eclipse/SummaryNode.hpp - opm/json/JsonObject.hpp - opm/parser/eclipse/Utility/Stringview.hpp - opm/parser/eclipse/Utility/Functional.hpp - opm/parser/eclipse/Utility/Typetools.hpp - opm/parser/eclipse/Generator/KeywordGenerator.hpp - opm/parser/eclipse/Generator/KeywordLoader.hpp - opm/parser/eclipse/Units/UnitSystem.hpp - opm/parser/eclipse/Units/Units.hpp - opm/parser/eclipse/Units/Dimension.hpp - opm/parser/eclipse/Parser/ErrorGuard.hpp - opm/parser/eclipse/Parser/ParserItem.hpp - opm/parser/eclipse/Parser/Parser.hpp - opm/parser/eclipse/Parser/ParserRecord.hpp - opm/parser/eclipse/Parser/ParserKeyword.hpp - opm/parser/eclipse/Parser/InputErrorAction.hpp - opm/parser/eclipse/Parser/ParserEnums.hpp - opm/parser/eclipse/Parser/ParseContext.hpp - opm/parser/eclipse/Parser/ParserConst.hpp - opm/parser/eclipse/EclipseState/InitConfig/InitConfig.hpp - opm/parser/eclipse/EclipseState/InitConfig/Equil.hpp - opm/parser/eclipse/EclipseState/InitConfig/FoamConfig.hpp - opm/parser/eclipse/EclipseState/Util/Value.hpp - opm/parser/eclipse/EclipseState/Util/IOrderSet.hpp - opm/parser/eclipse/EclipseState/Util/OrderedMap.hpp - opm/parser/eclipse/EclipseState/SummaryConfig/SummaryConfig.hpp - opm/parser/eclipse/EclipseState/Edit/EDITNNC.hpp - opm/parser/eclipse/EclipseState/Grid/GridDims.hpp - opm/parser/eclipse/EclipseState/Grid/TransMult.hpp - opm/parser/eclipse/EclipseState/Grid/PinchMode.hpp - opm/parser/eclipse/EclipseState/Grid/MULTREGTScanner.hpp - opm/parser/eclipse/EclipseState/Grid/FaultCollection.hpp - opm/parser/eclipse/EclipseState/Grid/SatfuncPropertyInitializers.hpp - opm/parser/eclipse/EclipseState/Grid/Fault.hpp - opm/parser/eclipse/EclipseState/Grid/Box.hpp - opm/parser/eclipse/EclipseState/Grid/FieldPropsManager.hpp - opm/parser/eclipse/EclipseState/Grid/FaultFace.hpp - opm/parser/eclipse/EclipseState/Grid/NNC.hpp - opm/parser/eclipse/EclipseState/Grid/EclipseGrid.hpp - opm/parser/eclipse/EclipseState/Grid/BoxManager.hpp - opm/parser/eclipse/EclipseState/Grid/FaceDir.hpp - opm/parser/eclipse/EclipseState/Grid/MinpvMode.hpp - opm/parser/eclipse/EclipseState/EndpointScaling.hpp - opm/parser/eclipse/EclipseState/TracerConfig.hpp - opm/parser/eclipse/EclipseState/Tables/DenT.hpp - opm/parser/eclipse/EclipseState/Tables/SimpleTable.hpp - opm/parser/eclipse/EclipseState/Tables/StandardCond.hpp - opm/parser/eclipse/EclipseState/Tables/PolyInjTable.hpp - opm/parser/eclipse/EclipseState/Tables/PdvdTable.hpp - opm/parser/eclipse/EclipseState/Tables/TlpmixpaTable.hpp - opm/parser/eclipse/EclipseState/Tables/PvdgTable.hpp - opm/parser/eclipse/EclipseState/Tables/MsfnTable.hpp - opm/parser/eclipse/EclipseState/Tables/GasvisctTable.hpp - opm/parser/eclipse/EclipseState/Tables/Regdims.hpp - opm/parser/eclipse/EclipseState/Tables/Eqldims.hpp - opm/parser/eclipse/EclipseState/Tables/SpecrockTable.hpp - opm/parser/eclipse/EclipseState/Tables/PvtwsaltTable.hpp - opm/parser/eclipse/EclipseState/Tables/BrineDensityTable.hpp - opm/parser/eclipse/EclipseState/Tables/SolventDensityTable.hpp - opm/parser/eclipse/EclipseState/Tables/SaltvdTable.hpp - opm/parser/eclipse/EclipseState/Tables/PlydhflfTable.hpp - opm/parser/eclipse/EclipseState/Tables/PlymwinjTable.hpp - opm/parser/eclipse/EclipseState/Tables/PlyshlogTable.hpp - opm/parser/eclipse/EclipseState/Tables/RsvdTable.hpp - opm/parser/eclipse/EclipseState/Tables/SkprwatTable.hpp - opm/parser/eclipse/EclipseState/Tables/SkprpolyTable.hpp - opm/parser/eclipse/EclipseState/Tables/SpecheatTable.hpp - opm/parser/eclipse/EclipseState/Tables/SgcwmisTable.hpp - opm/parser/eclipse/EclipseState/Tables/Sof2Table.hpp - opm/parser/eclipse/EclipseState/Tables/TableManager.hpp - opm/parser/eclipse/EclipseState/Tables/SwfnTable.hpp - opm/parser/eclipse/EclipseState/Tables/EnptvdTable.hpp - opm/parser/eclipse/EclipseState/Tables/SwofTable.hpp - opm/parser/eclipse/EclipseState/Tables/FlatTable.hpp - opm/parser/eclipse/EclipseState/Tables/Aqudims.hpp - opm/parser/eclipse/EclipseState/Tables/JFunc.hpp - opm/parser/eclipse/EclipseState/Tables/TableIndex.hpp - opm/parser/eclipse/EclipseState/Tables/PvtgTable.hpp - opm/parser/eclipse/EclipseState/Tables/Tabdims.hpp - opm/parser/eclipse/EclipseState/Tables/TableSchema.hpp - opm/parser/eclipse/EclipseState/Tables/RocktabTable.hpp - opm/parser/eclipse/EclipseState/Tables/EnkrvdTable.hpp - opm/parser/eclipse/EclipseState/Tables/PlyrockTable.hpp - opm/parser/eclipse/EclipseState/Tables/PvtxTable.hpp - opm/parser/eclipse/EclipseState/Tables/WatvisctTable.hpp - opm/parser/eclipse/EclipseState/Tables/TableEnums.hpp - opm/parser/eclipse/EclipseState/Tables/RvvdTable.hpp - opm/parser/eclipse/EclipseState/Tables/TableContainer.hpp - opm/parser/eclipse/EclipseState/Tables/AqutabTable.hpp - opm/parser/eclipse/EclipseState/Tables/PlyadsTable.hpp - opm/parser/eclipse/EclipseState/Tables/FoamadsTable.hpp - opm/parser/eclipse/EclipseState/Tables/FoammobTable.hpp - opm/parser/eclipse/EclipseState/Tables/PbvdTable.hpp - opm/parser/eclipse/EclipseState/Tables/SorwmisTable.hpp - opm/parser/eclipse/EclipseState/Tables/PlymaxTable.hpp - opm/parser/eclipse/EclipseState/Tables/PlyviscTable.hpp - opm/parser/eclipse/EclipseState/Tables/TableColumn.hpp - opm/parser/eclipse/EclipseState/Tables/SsfnTable.hpp - opm/parser/eclipse/EclipseState/Tables/PvdoTable.hpp - opm/parser/eclipse/EclipseState/Tables/OilvisctTable.hpp - opm/parser/eclipse/EclipseState/Tables/SgfnTable.hpp - opm/parser/eclipse/EclipseState/Tables/MiscTable.hpp - opm/parser/eclipse/EclipseState/Tables/SgwfnTable.hpp - opm/parser/eclipse/EclipseState/Tables/PvdsTable.hpp - opm/parser/eclipse/EclipseState/Tables/PvtoTable.hpp - opm/parser/eclipse/EclipseState/Tables/Rock2dTable.hpp - opm/parser/eclipse/EclipseState/Tables/Rock2dtrTable.hpp - opm/parser/eclipse/EclipseState/Tables/RockwnodTable.hpp - opm/parser/eclipse/EclipseState/Tables/OverburdTable.hpp - opm/parser/eclipse/EclipseState/Tables/ColumnSchema.hpp - opm/parser/eclipse/EclipseState/Tables/PmiscTable.hpp - opm/parser/eclipse/EclipseState/Tables/RtempvdTable.hpp - opm/parser/eclipse/EclipseState/Tables/SlgofTable.hpp - opm/parser/eclipse/EclipseState/Tables/ImptvdTable.hpp - opm/parser/eclipse/EclipseState/Tables/ImkrvdTable.hpp - opm/parser/eclipse/EclipseState/Tables/Sof3Table.hpp - opm/parser/eclipse/EclipseState/Tables/SgofTable.hpp - opm/parser/eclipse/EclipseState/Tables/TracerVdTable.hpp - opm/parser/eclipse/EclipseState/EclipseState.hpp - opm/parser/eclipse/EclipseState/EclipseConfig.hpp - opm/parser/eclipse/EclipseState/Aquancon.hpp - opm/parser/eclipse/EclipseState/AquiferConfig.hpp - opm/parser/eclipse/EclipseState/AquiferCT.hpp - opm/parser/eclipse/EclipseState/Aquifetp.hpp - opm/parser/eclipse/EclipseState/Schedule/Action/ActionAST.hpp - opm/parser/eclipse/EclipseState/Schedule/Action/ActionContext.hpp - opm/parser/eclipse/EclipseState/Schedule/Action/ActionResult.hpp - opm/parser/eclipse/EclipseState/Schedule/Action/ActionValue.hpp - opm/parser/eclipse/EclipseState/Schedule/Action/Actdims.hpp - opm/parser/eclipse/EclipseState/Schedule/Action/Actions.hpp - opm/parser/eclipse/EclipseState/Schedule/Action/ActionX.hpp - opm/parser/eclipse/EclipseState/Schedule/Action/Condition.hpp - opm/parser/eclipse/EclipseState/Schedule/Action/ASTNode.hpp - opm/parser/eclipse/EclipseState/Schedule/Action/PyAction.hpp - opm/parser/eclipse/EclipseState/Schedule/ArrayDimChecker.hpp - opm/parser/eclipse/EclipseState/Schedule/TimeMap.hpp - opm/parser/eclipse/EclipseState/Schedule/VFPInjTable.hpp - opm/parser/eclipse/EclipseState/Schedule/VFPProdTable.hpp - opm/parser/eclipse/EclipseState/Schedule/Well/Connection.hpp - opm/parser/eclipse/EclipseState/Schedule/Well/ProductionControls.hpp - opm/parser/eclipse/EclipseState/Schedule/Well/InjectionControls.hpp - opm/parser/eclipse/EclipseState/Schedule/Well/Well.hpp - opm/parser/eclipse/EclipseState/Schedule/Well/WList.hpp - opm/parser/eclipse/EclipseState/Schedule/Well/WListManager.hpp - opm/parser/eclipse/EclipseState/Schedule/Well/WellEconProductionLimits.hpp - opm/parser/eclipse/EclipseState/Schedule/Well/WellFoamProperties.hpp - opm/parser/eclipse/EclipseState/Schedule/Well/WellBrineProperties.hpp - opm/parser/eclipse/EclipseState/Schedule/Well/WellInjectionProperties.hpp - opm/parser/eclipse/EclipseState/Schedule/Well/WellPolymerProperties.hpp - opm/parser/eclipse/EclipseState/Schedule/Well/WellProductionProperties.hpp - opm/parser/eclipse/EclipseState/Schedule/Well/WellTracerProperties.hpp - opm/parser/eclipse/EclipseState/Schedule/Well/WellTestConfig.hpp - opm/parser/eclipse/EclipseState/Schedule/Well/WellTestState.hpp - opm/parser/eclipse/EclipseState/Schedule/Well/WellConnections.hpp - opm/parser/eclipse/EclipseState/Schedule/DynamicVector.hpp - opm/parser/eclipse/EclipseState/Schedule/SummaryState.hpp - opm/parser/eclipse/EclipseState/Schedule/RFTConfig.hpp - opm/parser/eclipse/EclipseState/Schedule/RPTConfig.hpp - opm/parser/eclipse/EclipseState/Schedule/Schedule.hpp - opm/parser/eclipse/EclipseState/Schedule/ScheduleTypes.hpp - opm/parser/eclipse/EclipseState/Schedule/Tuning.hpp - opm/parser/eclipse/EclipseState/Schedule/Group/GTNode.hpp - opm/parser/eclipse/EclipseState/Schedule/Group/Group.hpp - opm/parser/eclipse/EclipseState/Schedule/Group/GuideRate.hpp - opm/parser/eclipse/EclipseState/Schedule/Group/GConSale.hpp - opm/parser/eclipse/EclipseState/Schedule/Group/GConSump.hpp - opm/parser/eclipse/EclipseState/Schedule/Group/GuideRateConfig.hpp - opm/parser/eclipse/EclipseState/Schedule/Group/GuideRateModel.hpp - opm/parser/eclipse/EclipseState/Schedule/MessageLimits.hpp - opm/parser/eclipse/EclipseState/Schedule/Events.hpp - opm/parser/eclipse/EclipseState/Schedule/OilVaporizationProperties.hpp - opm/parser/eclipse/EclipseState/Schedule/DynamicState.hpp - opm/parser/eclipse/EclipseState/Schedule/MSW/icd.hpp - opm/parser/eclipse/EclipseState/Schedule/MSW/Segment.hpp - opm/parser/eclipse/EclipseState/Schedule/MSW/Segment.hpp - opm/parser/eclipse/EclipseState/Schedule/MSW/WellSegments.hpp - opm/parser/eclipse/EclipseState/Schedule/MSW/updatingConnectionsWithSegments.hpp - opm/parser/eclipse/EclipseState/Schedule/MSW/SpiralICD.hpp - opm/parser/eclipse/EclipseState/SimulationConfig/ThresholdPressure.hpp - opm/parser/eclipse/EclipseState/SimulationConfig/BCConfig.hpp - opm/parser/eclipse/EclipseState/SimulationConfig/RockConfig.hpp - opm/parser/eclipse/EclipseState/SimulationConfig/SimulationConfig.hpp - opm/parser/eclipse/EclipseState/Schedule/MSW/Valve.hpp - opm/parser/eclipse/EclipseState/IOConfig/RestartConfig.hpp - opm/parser/eclipse/EclipseState/IOConfig/IOConfig.hpp - opm/parser/eclipse/EclipseState/checkDeck.hpp - opm/parser/eclipse/EclipseState/Runspec.hpp - opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQAssign.hpp - opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQASTNode.hpp - opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQDefine.hpp - opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQContext.hpp - opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQConfig.hpp - opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQEnums.hpp - opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQParams.hpp - opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQInput.hpp - opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQActive.hpp - opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQSet.hpp - opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQFunction.hpp - opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQFunctionTable.hpp - opm/parser/eclipse/Deck/DeckItem.hpp - opm/parser/eclipse/Deck/Deck.hpp - opm/parser/eclipse/Deck/DeckSection.hpp - opm/parser/eclipse/Deck/DeckOutput.hpp - opm/parser/eclipse/Deck/DeckValue.hpp - opm/parser/eclipse/Deck/DeckKeyword.hpp - opm/parser/eclipse/Deck/DeckRecord.hpp - opm/parser/eclipse/Deck/UDAValue.hpp - opm/parser/eclipse/Deck/value_status.hpp - opm/parser/eclipse/Python/Python.hpp) -endif() -if(ENABLE_ECL_OUTPUT) - list(APPEND PUBLIC_HEADER_FILES - opm/io/eclipse/EclFile.hpp - opm/io/eclipse/EclIOdata.hpp - opm/io/eclipse/EclOutput.hpp - opm/io/eclipse/EclUtil.hpp - opm/io/eclipse/EGrid.hpp - opm/io/eclipse/ERft.hpp - opm/io/eclipse/ERst.hpp - opm/io/eclipse/ERsm.hpp - opm/io/eclipse/ESmry.hpp - opm/io/eclipse/PaddedOutputString.hpp - opm/io/eclipse/OutputStream.hpp - opm/io/eclipse/SummaryNode.hpp - opm/io/eclipse/rst/connection.hpp - opm/io/eclipse/rst/group.hpp - opm/io/eclipse/rst/header.hpp - opm/io/eclipse/rst/segment.hpp - opm/io/eclipse/rst/state.hpp - opm/io/eclipse/rst/well.hpp - opm/output/data/Aquifer.hpp - opm/output/data/Cells.hpp - opm/output/data/Solution.hpp - opm/output/data/Wells.hpp - opm/output/data/Groups.hpp - opm/output/eclipse/VectorItems/aquifer.hpp - opm/output/eclipse/VectorItems/connection.hpp - opm/output/eclipse/VectorItems/group.hpp - opm/output/eclipse/VectorItems/intehead.hpp - opm/output/eclipse/VectorItems/logihead.hpp - opm/output/eclipse/VectorItems/msw.hpp - opm/output/eclipse/VectorItems/tabdims.hpp - opm/output/eclipse/VectorItems/well.hpp - opm/output/eclipse/AggregateActionxData.hpp - opm/output/eclipse/AggregateGroupData.hpp - opm/output/eclipse/AggregateConnectionData.hpp - opm/output/eclipse/AggregateMSWData.hpp - opm/output/eclipse/AggregateUDQData.hpp - opm/output/eclipse/AggregateWellData.hpp - opm/output/eclipse/DoubHEAD.hpp - opm/output/eclipse/EclipseGridInspector.hpp - opm/output/eclipse/EclipseIO.hpp - opm/output/eclipse/EclipseIOUtil.hpp - opm/output/eclipse/InteHEAD.hpp - opm/output/eclipse/LinearisedOutputTable.hpp - opm/output/eclipse/LogiHEAD.hpp - opm/output/eclipse/RegionCache.hpp - opm/output/eclipse/RestartIO.hpp - opm/output/eclipse/RestartValue.hpp - opm/output/eclipse/Summary.hpp - opm/output/eclipse/Tables.hpp - opm/output/eclipse/WindowedArray.hpp - opm/output/eclipse/WriteInit.hpp - opm/output/eclipse/WriteRFT.hpp - opm/output/eclipse/WriteRPT.hpp - opm/output/eclipse/WriteRestartHelpers.hpp - opm/output/OutputWriter.hpp - ) -endif() - -if(ENABLE_ECL_INPUT OR ENABLE_ECL_OUTPUT) - list(APPEND TEST_SOURCE_FILES - tests/test_SummaryNode.cpp -) -endif() - -if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") - list( APPEND PUBLIC_HEADER_FILES - cross-platform/windows/Substitutes.hpp - ) -endif() diff --git a/ThirdParty/custom-opm-common/opm-common/CopyHeaders.cmake b/ThirdParty/custom-opm-common/opm-common/CopyHeaders.cmake deleted file mode 100644 index 25a4ed73f8..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/CopyHeaders.cmake +++ /dev/null @@ -1,24 +0,0 @@ -execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different - ${BASE_DIR}/tmp_gen/ParserInit.cpp - ${BASE_DIR}/ParserInit.cpp) - -execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different - ${BASE_DIR}/tmp_gen/TestKeywords.cpp - ${BASE_DIR}/TestKeywords.cpp) - - -file(GLOB HDRS ${BASE_DIR}/tmp_gen/include/opm/parser/eclipse/Parser/ParserKeywords/*.hpp) - -foreach(HDR ${HDRS}) - file(RELATIVE_PATH hdr ${BASE_DIR}/tmp_gen/include/opm/parser/eclipse/Parser/ParserKeywords ${HDR}) - execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different - ${HDR} - ${BASE_DIR}/include/opm/parser/eclipse/Parser/ParserKeywords/${hdr}) - -endforeach() - -foreach (name A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) - execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different - ${BASE_DIR}/tmp_gen/ParserKeywords/${name}.cpp - ${BASE_DIR}/ParserKeywords/${name}.cpp) -endforeach() diff --git a/ThirdParty/custom-opm-common/opm-common/ExtraTests.cmake b/ThirdParty/custom-opm-common/opm-common/ExtraTests.cmake deleted file mode 100644 index 524e54ed68..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/ExtraTests.cmake +++ /dev/null @@ -1,127 +0,0 @@ -# Libs to link tests against -set(TEST_LIBS opmcommon Boost::unit_test_framework) -set(EXTRA_TESTS) - -if (Boost_UNIT_TEST_FRAMEWORK_FOUND) - -# Generated source, needs to be here -opm_add_test(InlineKeywordTest - EXE_NAME TestKeywords - SOURCES ${PROJECT_BINARY_DIR}/TestKeywords.cpp - LIBRARIES ${TEST_LIBS}) -list(APPEND EXTRA_TESTS TestKeywords) - -# Extra compile definitions and extra parameters -include(cmake/Modules/CheckCaseSensitiveFileSystem.cmake) -set(_testdir ${PROJECT_SOURCE_DIR}/tests/parser/data) - -opm_add_test(ParserTests - SOURCES tests/parser/ParserTests.cpp - LIBRARIES ${TEST_LIBS} - TEST_ARGS ${_testdir}/) -list(APPEND EXTRA_TESTS ParserTests) - -opm_add_test(ParserIncludeTests - SOURCES tests/parser/ParserIncludeTests.cpp - LIBRARIES ${TEST_LIBS} - TEST_ARGS ${_testdir}/parser/) -target_compile_definitions(ParserIncludeTests PRIVATE - -DHAVE_CASE_SENSITIVE_FILESYSTEM=${HAVE_CASE_SENSITIVE_FILESYSTEM}) -list(APPEND EXTRA_TESTS ParserIncludeTests) - -opm_add_test(PvtxTableTests - SOURCES tests/parser/PvtxTableTests.cpp - LIBRARIES ${TEST_LIBS} - TEST_ARGS ${_testdir}/integration_tests/) -list(APPEND EXTRA_TESTS PvtxTableTests) - -opm_add_test(EclipseStateTests - SOURCES tests/parser/EclipseStateTests.cpp - LIBRARIES ${TEST_LIBS} - TEST_ARGS ${_testdir}/integration_tests/) -list(APPEND EXTRA_TESTS EclipseStateTests) - -foreach (test BoxTest - CheckDeckValidity - EclipseGridCreateFromDeck - EDITNNCTests - IncludeTest - IntegrationTests - IOConfigIntegrationTest - NNCTests - ParseKEYWORD - Polymer - ScheduleCreateFromDeck - TransMultIntegrationTests) - - opm_add_test(${test} - SOURCES tests/parser/integration/${test}.cpp - LIBRARIES ${TEST_LIBS} - TEST_ARGS ${_testdir}/integration_tests/) - list(APPEND EXTRA_TESTS ${test}) -endforeach () - -opm_add_test( rst_spe1 - SOURCES tests/rst_test.cpp - LIBRARIES ${TEST_LIBS} - TEST_ARGS tests/SPE1CASE2.DATA tests/SPE1CASE2_RESTART.DATA ) - -opm_add_test( rst_msw - SOURCES tests/rst_test.cpp - LIBRARIES ${TEST_LIBS} - TEST_ARGS tests/MSW.DATA tests/MSW_RESTART.DATA ) - -# opm-tests dependent tests -if(HAVE_OPM_TESTS) - opm_add_test(parse_write ONLY_COMPILE - SOURCES tests/parser/integration/parse_write.cpp - LIBRARIES ${TEST_LIBS}) - list(APPEND EXTRA_TESTS parse_write) - foreach (deck ${OPM_TESTS_ROOT}/norne/NORNE_ATW2013.DATA - ${OPM_TESTS_ROOT}/spe1_solvent/SPE1CASE2_SOLVENT.DATA - ${OPM_TESTS_ROOT}/spe9_solvent/SPE9_CP_SOLVENT_CO2.DATA - ${OPM_TESTS_ROOT}/spe5/SPE5CASE1.DATA - ${OPM_TESTS_ROOT}/polymer_simple2D/2D_THREEPHASE_POLY_HETER.DATA - ${OPM_TESTS_ROOT}/spe1/SPE1CASE1.DATA - ${OPM_TESTS_ROOT}/spe1/SPE1CASE2.DATA - ${OPM_TESTS_ROOT}/spe1/SPE1CASE2_FAMII.DATA - ${OPM_TESTS_ROOT}/spe1/SPE1CASE2_SLGOF.DATA - ${OPM_TESTS_ROOT}/spe3/SPE3CASE1.DATA - ${OPM_TESTS_ROOT}/spe3/SPE3CASE2.DATA - ${OPM_TESTS_ROOT}/spe9/SPE9_CP.DATA - ${OPM_TESTS_ROOT}/spe9/SPE9_CP_GROUP.DATA - ${OPM_TESTS_ROOT}/spe9/SPE9_CP_SHORT.DATA - ${OPM_TESTS_ROOT}/spe9/SPE9_CP_SHORT_RESTART.DATA - ${OPM_TESTS_ROOT}/spe9/SPE9.DATA - ${OPM_TESTS_ROOT}/spe10model1/SPE10_MODEL1.DATA - ${OPM_TESTS_ROOT}/spe10model2/SPE10_MODEL2.DATA - ${OPM_TESTS_ROOT}/msw_2d_h/2D_H__.DATA - ${OPM_TESTS_ROOT}/model2/0_BASE_MODEL2.DATA - ${OPM_TESTS_ROOT}/model2/1_MULTREGT_MODEL2.DATA - ${OPM_TESTS_ROOT}/model2/2_MULTXYZ_MODEL2.DATA - ${OPM_TESTS_ROOT}/model2/3_MULTFLT_MODEL2.DATA - ${OPM_TESTS_ROOT}/model2/4_MINPVV_MODEL2.DATA - ${OPM_TESTS_ROOT}/model2/5_SWATINIT_MODEL2.DATA - ${OPM_TESTS_ROOT}/model2/6_ENDSCALE_MODEL2.DATA - ${OPM_TESTS_ROOT}/model2/7_HYSTERESIS_MODEL2.DATA - ${OPM_TESTS_ROOT}/model2/8_MULTIPLY_TRANXYZ_MODEL2.DATA - ${OPM_TESTS_ROOT}/model2/9_EDITNNC_MODEL2.DATA) - - get_filename_component(test_name ${deck} NAME_WE) - opm_add_test(${test_name} NO_COMPILE - EXE_NAME parse_write - TEST_ARGS ${deck}) - endforeach() - opm_add_test("SPE9_CP_GROUP2" NO_COMPILE EXE_NAME parse_write TEST_ARGS "${OPM_TESTS_ROOT}/spe9group/SPE9_CP_GROUP.DATA") - set_property(TEST NORNE_ATW2013 - PROPERTY ENVIRONMENT "OPM_ERRORS_IGNORE=PARSE_RANDOM_SLASH") -endif() - -# JSON tests -opm_add_test(jsonTests - SOURCES tests/json/jsonTests.cpp - LIBRARIES ${TEST_LIBS} - TEST_ARGS ${PROJECT_SOURCE_DIR}/tests/json/example1.json) -list(APPEND EXTRA_TESTS jsonTests) - -endif() diff --git a/ThirdParty/custom-opm-common/opm-common/GenerateKeywords.cmake b/ThirdParty/custom-opm-common/opm-common/GenerateKeywords.cmake deleted file mode 100644 index ef291e43f8..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/GenerateKeywords.cmake +++ /dev/null @@ -1,119 +0,0 @@ -set(genkw_SOURCES src/opm/json/JsonObject.cpp - src/opm/parser/eclipse/Parser/createDefaultKeywordList.cpp - src/opm/parser/eclipse/Deck/UDAValue.cpp - src/opm/parser/eclipse/Deck/DeckValue.cpp - src/opm/parser/eclipse/Deck/Deck.cpp - src/opm/parser/eclipse/Deck/DeckItem.cpp - src/opm/parser/eclipse/Deck/DeckKeyword.cpp - src/opm/parser/eclipse/Deck/DeckRecord.cpp - src/opm/parser/eclipse/Deck/DeckOutput.cpp - src/opm/parser/eclipse/Generator/KeywordGenerator.cpp - src/opm/parser/eclipse/Generator/KeywordLoader.cpp - src/opm/parser/eclipse/Parser/ErrorGuard.cpp - src/opm/parser/eclipse/Parser/ParseContext.cpp - src/opm/parser/eclipse/Parser/ParserEnums.cpp - src/opm/parser/eclipse/Parser/ParserItem.cpp - src/opm/parser/eclipse/Parser/ParserKeyword.cpp - src/opm/parser/eclipse/Parser/ParserRecord.cpp - src/opm/parser/eclipse/Parser/raw/RawKeyword.cpp - src/opm/parser/eclipse/Parser/raw/RawRecord.cpp - src/opm/parser/eclipse/Parser/raw/StarToken.cpp - src/opm/parser/eclipse/Units/Dimension.cpp - src/opm/parser/eclipse/Units/UnitSystem.cpp - src/opm/parser/eclipse/Utility/Stringview.cpp - src/opm/common/OpmLog/OpmLog.cpp - src/opm/common/OpmLog/Logger.cpp - src/opm/common/OpmLog/StreamLog.cpp - src/opm/common/OpmLog/LogBackend.cpp - src/opm/common/OpmLog/LogUtil.cpp -) -if(NOT cjson_FOUND) - list(APPEND genkw_SOURCES external/cjson/cJSON.c) -endif() - -add_executable(genkw ${genkw_SOURCES}) - -target_link_libraries(genkw ${opm-common_LIBRARIES}) - -# Add dependency of Shlwapi.lib for Windows platforms -if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") - target_link_libraries(genkw "Shlwapi.lib") -endif() - -# Generate keyword list -include(src/opm/parser/eclipse/share/keywords/keyword_list.cmake) -string(REGEX REPLACE "([^;]+)" "${PROJECT_SOURCE_DIR}/src/opm/parser/eclipse/share/keywords/\\1" keyword_files "${keywords}") -configure_file(src/opm/parser/eclipse/keyword_list.argv.in keyword_list.argv) - -# Generate keyword source - -add_custom_command( OUTPUT - ${PROJECT_BINARY_DIR}/tmp_gen/ParserKeywords/A.cpp - ${PROJECT_BINARY_DIR}/tmp_gen/ParserKeywords/B.cpp - ${PROJECT_BINARY_DIR}/tmp_gen/ParserKeywords/C.cpp - ${PROJECT_BINARY_DIR}/tmp_gen/ParserKeywords/D.cpp - ${PROJECT_BINARY_DIR}/tmp_gen/ParserKeywords/E.cpp - ${PROJECT_BINARY_DIR}/tmp_gen/ParserKeywords/F.cpp - ${PROJECT_BINARY_DIR}/tmp_gen/ParserKeywords/G.cpp - ${PROJECT_BINARY_DIR}/tmp_gen/ParserKeywords/H.cpp - ${PROJECT_BINARY_DIR}/tmp_gen/ParserKeywords/I.cpp - ${PROJECT_BINARY_DIR}/tmp_gen/ParserKeywords/J.cpp - ${PROJECT_BINARY_DIR}/tmp_gen/ParserKeywords/K.cpp - ${PROJECT_BINARY_DIR}/tmp_gen/ParserKeywords/L.cpp - ${PROJECT_BINARY_DIR}/tmp_gen/ParserKeywords/M.cpp - ${PROJECT_BINARY_DIR}/tmp_gen/ParserKeywords/N.cpp - ${PROJECT_BINARY_DIR}/tmp_gen/ParserKeywords/O.cpp - ${PROJECT_BINARY_DIR}/tmp_gen/ParserKeywords/P.cpp - ${PROJECT_BINARY_DIR}/tmp_gen/ParserKeywords/Q.cpp - ${PROJECT_BINARY_DIR}/tmp_gen/ParserKeywords/R.cpp - ${PROJECT_BINARY_DIR}/tmp_gen/ParserKeywords/S.cpp - ${PROJECT_BINARY_DIR}/tmp_gen/ParserKeywords/T.cpp - ${PROJECT_BINARY_DIR}/tmp_gen/ParserKeywords/U.cpp - ${PROJECT_BINARY_DIR}/tmp_gen/ParserKeywords/V.cpp - ${PROJECT_BINARY_DIR}/tmp_gen/ParserKeywords/W.cpp - ${PROJECT_BINARY_DIR}/tmp_gen/ParserKeywords/X.cpp - ${PROJECT_BINARY_DIR}/tmp_gen/ParserKeywords/Y.cpp - ${PROJECT_BINARY_DIR}/tmp_gen/ParserKeywords/Z.cpp - ${PROJECT_BINARY_DIR}/tmp_gen/TestKeywords.cpp - COMMAND genkw keyword_list.argv - ${PROJECT_BINARY_DIR}/tmp_gen/ParserKeywords - ${PROJECT_BINARY_DIR}/tmp_gen/ParserInit.cpp - ${PROJECT_BINARY_DIR}/tmp_gen/include/ - opm/parser/eclipse/Parser/ParserKeywords - ${PROJECT_BINARY_DIR}/tmp_gen/TestKeywords.cpp - DEPENDS genkw ${keyword_files} src/opm/parser/eclipse/share/keywords/keyword_list.cmake -) - -# To avoid some rebuilds -add_custom_command(OUTPUT - ${PROJECT_BINARY_DIR}/ParserKeywords/A.cpp - ${PROJECT_BINARY_DIR}/ParserKeywords/B.cpp - ${PROJECT_BINARY_DIR}/ParserKeywords/C.cpp - ${PROJECT_BINARY_DIR}/ParserKeywords/D.cpp - ${PROJECT_BINARY_DIR}/ParserKeywords/E.cpp - ${PROJECT_BINARY_DIR}/ParserKeywords/F.cpp - ${PROJECT_BINARY_DIR}/ParserKeywords/G.cpp - ${PROJECT_BINARY_DIR}/ParserKeywords/H.cpp - ${PROJECT_BINARY_DIR}/ParserKeywords/I.cpp - ${PROJECT_BINARY_DIR}/ParserKeywords/J.cpp - ${PROJECT_BINARY_DIR}/ParserKeywords/K.cpp - ${PROJECT_BINARY_DIR}/ParserKeywords/L.cpp - ${PROJECT_BINARY_DIR}/ParserKeywords/M.cpp - ${PROJECT_BINARY_DIR}/ParserKeywords/N.cpp - ${PROJECT_BINARY_DIR}/ParserKeywords/O.cpp - ${PROJECT_BINARY_DIR}/ParserKeywords/P.cpp - ${PROJECT_BINARY_DIR}/ParserKeywords/Q.cpp - ${PROJECT_BINARY_DIR}/ParserKeywords/R.cpp - ${PROJECT_BINARY_DIR}/ParserKeywords/S.cpp - ${PROJECT_BINARY_DIR}/ParserKeywords/T.cpp - ${PROJECT_BINARY_DIR}/ParserKeywords/U.cpp - ${PROJECT_BINARY_DIR}/ParserKeywords/V.cpp - ${PROJECT_BINARY_DIR}/ParserKeywords/W.cpp - ${PROJECT_BINARY_DIR}/ParserKeywords/X.cpp - ${PROJECT_BINARY_DIR}/ParserKeywords/Y.cpp - ${PROJECT_BINARY_DIR}/ParserKeywords/Z.cpp - ${PROJECT_BINARY_DIR}/TestKeywords.cpp - ${PROJECT_BINARY_DIR}/ParserInit.cpp - DEPENDS ${PROJECT_BINARY_DIR}/tmp_gen/ParserKeywords/A.cpp - COMMAND ${CMAKE_COMMAND} -DBASE_DIR=${PROJECT_BINARY_DIR} - -P ${PROJECT_SOURCE_DIR}/CopyHeaders.cmake) diff --git a/ThirdParty/custom-opm-common/opm-common/LICENSE b/ThirdParty/custom-opm-common/opm-common/LICENSE deleted file mode 100644 index 6b156fe1db..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/LICENSE +++ /dev/null @@ -1,675 +0,0 @@ -GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - {one line to give the program's name and a brief idea of what it does.} - Copyright (C) {year} {name of author} - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - {project} Copyright (C) {year} {fullname} - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. - diff --git a/ThirdParty/custom-opm-common/opm-common/README.md b/ThirdParty/custom-opm-common/opm-common/README.md deleted file mode 100644 index 66f5b7b9c9..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# opm-common -Contains common components used throughout all of OPM, -in particular CMake modules for the build system. diff --git a/ThirdParty/custom-opm-common/opm-common/changelog.md b/ThirdParty/custom-opm-common/opm-common/changelog.md deleted file mode 100644 index bbafea6c70..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/changelog.md +++ /dev/null @@ -1,63 +0,0 @@ -# Changelog - -A short month-by-month synopsis of change highlights. Most bugfixes won't make -it in here, only the bigger features and interface changes. - -# Important changes between release 2019.04 and 2019.10 - -* opm-common and the rest of OPM does not use libecl anymore and - supports reading and writing Eclipse files directly -* Improved Eclipse compatible restart, support for unified and non unified - files, and formatted and unformatted files -* Support for reading and checking various additional keywords was introduced (those - starting with A - M, R, T, V, W, Z). -* ACTIONX support implemented -* NUPCOL support implemented -* UDA, UDQ support implemented -* Implemented writing saturation function scaled end-point arrays (e.g., SWL, SGU, - SOWCR, KRORW, PCG) to INIT file -* Fixes concerning interaction of WELOPEN and WCON* with WECON and - WTEST -* Added support for FOAM keywords (FOAMMOB, FOAMROCK, WFOAM) -* Refactored and reimplemented Well representation in deck - -# 2016.12 -* ZCORN adjustments improved, considers cell-cell relations -* Slightly more robust compilation - won't crash if locales are broken -* Accessing the PVTW table has a richer interface -* FAULTS face direction accepts X+, I+, Y+, J+, Z+ and K+ -* WELOPEN can be controlled with completion numbers (last two parameters) -* COMPLUMP is now supported -* Don't crash on aquifer keywords -* GMWSET and FMWSET are expanded properly -* Don't crash on DEBUG -* Read support for COORDSYS, GRUPRIG, LGR, PRORDER, TRACERS, TUNINGDP, - WDFACCOR, WEFAC, and WORKLIM, no longer crashes. -* RS and RV support. -* Support for DENSITY, PVTW, and ROCK tables -* JFUNC is understood and exposed - -# 2016.11 -* A new class, Runspec, for the RUNSPEC section, has been introduced -* Nodes in the FIELD group are no longer added to the Summary config -* WCONHIST only adds phases present in the deck -* cJSON can now be installed externally -* DeckItem and ParserItem internals refactored -* Build time reduced by only giving necessary source files to the json compiler -* Support for OPERATE, WSEGITER and GCONPROD -* Internal shared_ptrs removed from Schedule and children; interface updated -* Schedule is now copyable with regular C++ copy semantics - no internal refs -* Well head I/J is now time step dependent -* Well reference depth is time step dependent -* Some ZCORN issues fixed -* gas/oil and oil/gas ratio unit fixed for FIELD units - -# 2016.10 -* Significant improvements in overall parser performance -* shared_ptr has largely been removed from all public interfaces -* JFUNC keyword can be parsed -* Boolean conversions are explicit -* The Units.hpp header from core is moved here, replacing ConversionFactors -* The ConstPtr and Ptr shared pointer aliases are removed -* UnitSystem, Eclipse3DProperties, and OilVaporizationProperties are default - constructible diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/AddOptions.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Modules/AddOptions.cmake deleted file mode 100644 index 3255d90c49..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/AddOptions.cmake +++ /dev/null @@ -1,102 +0,0 @@ -# - Add options without repeating them on the command line -# -# Synopsis: -# -# add_options (lang build opts) -# -# where: -# -# lang Name of the language whose compiler should receive the -# options, e.g. CXX. If a comma-separated list is received -# then the option is added for all those languages. Use the -# special value ALL_LANGUAGES for these languages: CXX, C -# and Fortran -# -# build Kind of build to which this options should apply, -# such as DEBUG and RELEASE. This can also be a comma- -# separated list. Use the special value ALL_BUILDS to apply -# to all builds. -# -# opts List of options to add. Each should be quoted. -# -# Example: -# -# add_options (CXX RELEASE "-O3" "-DNDEBUG" "-Wall") - -function (add_options langs builds) - # special handling of empty language specification - if ("${langs}" STREQUAL "ALL_LANGUAGES") - set (langs CXX C Fortran) - endif ("${langs}" STREQUAL "ALL_LANGUAGES") - foreach (lang IN LISTS langs) - # prepend underscore if necessary - foreach (build IN LISTS builds) - if (NOT ("${build}" STREQUAL "ALL_BUILDS")) - set (_bld "_${build}") - string (TOUPPER "${_bld}" _bld) - else (NOT ("${build}" STREQUAL "ALL_BUILDS")) - set (_bld "") - endif (NOT ("${build}" STREQUAL "ALL_BUILDS")) - # if we want everything in the "global" flag, then simply - # ignore the build type here and go add everything to that one - if (CMAKE_NOT_USING_CONFIG_FLAGS) - set (_bld "") - endif () - foreach (_opt IN LISTS ARGN) - set (_var "CMAKE_${lang}_FLAGS${_bld}") - #message (STATUS "Adding \"${_opt}\" to \${${_var}}") - # remove it first - string (REPLACE "${_opt}" "" _without "${${_var}}") - string (STRIP "${_without}" _without) - # we need to strip this one as well, so they are comparable - string (STRIP "${${_var}}" _stripped) - # if it wasn't there, then add it at the end - if ("${_without}" STREQUAL "${_stripped}") - # don't add any extra spaces if no options yet are set - if (NOT ${_stripped} STREQUAL "") - set (${_var} "${_stripped} ${_opt}") - else (NOT ${_stripped} STREQUAL "") - set (${_var} "${_opt}") - endif (NOT ${_stripped} STREQUAL "") - set (${_var} "${${_var}}" PARENT_SCOPE) - endif ("${_without}" STREQUAL "${_stripped}") - endforeach (_opt) - endforeach (build) - endforeach (lang) -endfunction (add_options lang build) - -# set varname to flag unless user has specified something that matches regex -function (set_default_option lang varname flag regex) - # lang is either C, CXX or Fortran - if ("${lang}" STREQUAL "Fortran") - set (letter "F") - else () - set (letter "${lang}") - endif () - string (TOUPPER "${CMAKE_BUILD_TYPE}" _build) - if ((NOT ("$ENV{${letter}FLAGS}" MATCHES "${regex}")) - AND (NOT ("${CMAKE_${lang}_FLAGS}" MATCHES "${regex}")) - AND (NOT ("${CMAKE_${lang}_FLAGS_${_build}}" MATCHES "${regex}"))) - set (${varname} ${flag} PARENT_SCOPE) - else () - set (${varname} PARENT_SCOPE) - endif () -endfunction (set_default_option) - -# clear default options as a proxy for not using any default options -# at all. there is one *huge* problem with this: CMake runs the platform -# initialization before executing any line at all in the project and -# there seems to be no way to disable that behaviour, so we cannot really -# distinguish between a platform default and something that the user has -# passed on the command line. the best thing we can do is to all user- -# defined setting if they are something other than the platform default. -macro (no_default_options) - foreach (lang IN ITEMS C CXX Fortran) - foreach (build IN ITEMS DEBUG RELEASE MINSIZEREL RELWITHDEBINFO) - if ("${CMAKE_${lang}_FLAGS_${build}}" STREQUAL "${CMAKE_${lang}_FLAGS_${build}_INIT}") - # for some strange reason we cannot clear this flag, only set it to empty - set (CMAKE_${lang}_FLAGS_${build} "") - endif () - endforeach (build) - endforeach (lang) -endmacro (no_default_options) diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/BoostTargets.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Modules/BoostTargets.cmake deleted file mode 100644 index abbf8f5fca..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/BoostTargets.cmake +++ /dev/null @@ -1,49 +0,0 @@ -# make targets for boost if find module did not do the job - -if(NOT TARGET Boost::system) - add_library(Boost::system UNKNOWN IMPORTED) - set_target_properties(Boost::system PROPERTIES - INTERFACE_INCLUDE_DIRECTORIES "${Boost_INCLUDE_DIRS}" - INTERFACE_SYSTEM_INCLUDE_DIRECTORIES "${Boost_INCLUDE_DIRS}" - IMPORTED_LOCATION "${Boost_SYSTEM_LIBRARY}" - IMPORTED_LOCATION_DEBUG "${Boost_SYSTEM_LIBRARY_DEBUG}" - IMPORTED_LOCATION_RELEASE "${Boost_SYSTEM_LIBRARY_RELEASE}" - ) -endif() - -if(NOT TARGET Boost::filesystem) - add_library(Boost::filesystem UNKNOWN IMPORTED) - set_target_properties(Boost::filesystem PROPERTIES - INTERFACE_INCLUDE_DIRECTORIES "${Boost_INCLUDE_DIRS}" - INTERFACE_SYSTEM_INCLUDE_DIRECTORIES "${Boost_INCLUDE_DIRS}" - INTERFACE_COMPILE_DEFINITIONS BOOST_FILESYSTEM_VERSION=3 - INTERFACE_LINK_LIBRARIES "${boost_system}" - IMPORTED_LOCATION "${Boost_FILESYSTEM_LIBRARY}" - IMPORTED_LOCATION_DEBUG "${Boost_FILESYSTEM_LIBRARY_DEBUG}" - IMPORTED_LOCATION_RELEASE "${Boost_FILESYSTEM_LIBRARY_RELEASE}" - ) -endif() - -if(NOT TARGET Boost::regex) - add_library(Boost::regex UNKNOWN IMPORTED) - set_target_properties(Boost::regex PROPERTIES - INTERFACE_INCLUDE_DIRECTORIES "${Boost_INCLUDE_DIRS}" - INTERFACE_SYSTEM_INCLUDE_DIRECTORIES "${Boost_INCLUDE_DIRS}" - INTERFACE_LINK_LIBRARIES "${boost_system}" - IMPORTED_LOCATION "${Boost_REGEX_LIBRARY}" - IMPORTED_LOCATION_DEBUG "${Boost_REGEX_LIBRARY_DEBUG}" - IMPORTED_LOCATION_RELEASE "${Boost_REGEX_LIBRARY_RELEASE}" - ) -endif() - -if(NOT TARGET Boost::unit_test_framework) - add_library(Boost::unit_test_framework UNKNOWN IMPORTED) - set_target_properties(Boost::unit_test_framework PROPERTIES - INTERFACE_INCLUDE_DIRECTORIES "${Boost_INCLUDE_DIRS}" - INTERFACE_SYSTEM_INCLUDE_DIRECTORIES "${Boost_INCLUDE_DIRS}" - INTERFACE_LINK_LIBRARIES "${boost_system}" - IMPORTED_LOCATION "${Boost_UNIT_TEST_FRAMEWORK_LIBRARY}" - IMPORTED_LOCATION_DEBUG "${Boost_UNIT_TEST_FRAMEWORK_LIBRARY_DEBUG}" - IMPORTED_LOCATION_RELEASE "${Boost_UNIT_TEST_FRAMEWORK_LIBRARY_RELEASE}" - ) -endif() diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/CheckCaseSensitiveFileSystem.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Modules/CheckCaseSensitiveFileSystem.cmake deleted file mode 100644 index 8e3581a629..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/CheckCaseSensitiveFileSystem.cmake +++ /dev/null @@ -1,29 +0,0 @@ -# -# Module to check whether the file system is case sensitive or not -# -# Sets the following variable: -# -# HAVE_CASE_SENSITIVE_FILESYSTEM True if the file system honors the case of files - -message(STATUS "Checking whether the file system is case-sensitive") -# create a file containing uppercase characters -file(WRITE "${CMAKE_BINARY_DIR}/UPPER" "Foo") - -# check if the all-lowercase file with the same name can be opened -set(FooContents "") -if (EXISTS "${CMAKE_BINARY_DIR}/upper") - file(READ "${CMAKE_BINARY_DIR}/upper" FooContents) -endif() - -# remove the file again in order not to have it dangling around... -file(REMOVE "${CMAKE_BINARY_DIR}/UPPER") - -# check the contents of the file opened with lower-case. If it is -# empty, the file system is case sensitive. -if ("${FooContents}" STREQUAL "Foo") - message(STATUS "File system is not case-sensitive") - set(HAVE_CASE_SENSITIVE_FILESYSTEM 0) -else() - message(STATUS "File system is case-sensitive") - set(HAVE_CASE_SENSITIVE_FILESYSTEM 1) -endif() diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/ConfigVars.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Modules/ConfigVars.cmake deleted file mode 100644 index 5255ca0931..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/ConfigVars.cmake +++ /dev/null @@ -1,120 +0,0 @@ -# - Create config.h based on a list of variables -# -# Synopsis: -# configure_vars (FILE syntax filename verb varlist) -# where -# syntax CXX or CMAKE, depending on target -# filename Full path (including name) of config.h -# verb WRITE or APPEND if truncating or not -# varlist List of variable names that has been defined -# -# In addition, this function will define HAVE_CONFIG_H for the -# following compilations, (only) if the filename is "config.h". -# -# Example: -# list (APPEND FOO_CONFIG_VARS -# "/* bar library */" -# "HAVE_BAR" -# "HAVE_BAR_VERSION_2" -# ) -# configure_vars ( -# FILE CXX ${PROJECT_BINARY_DIR}/config.h -# WRITE ${FOO_CONFIG_VARS} -# ) - -# Copyright (C) 2012 Uni Research AS -# This file is licensed under the GNU General Public License v3.0 - -function (configure_vars obj syntax filename verb) - # this is just to make the syntax look like the build-in commands - if (NOT ("X Y Z ${obj}" STREQUAL "X Y Z FILE" AND - (("${verb}" STREQUAL "WRITE") OR ("${verb}" STREQUAL "APPEND")))) - message (FATAL_ERROR "Syntax error in argument list") - endif () - if (NOT (("${syntax}" STREQUAL "CXX") OR ("${syntax}" STREQUAL "CMAKE"))) - message (FATAL_ERROR "Invalid target syntax \"${syntax}\"") - endif (NOT (("${syntax}" STREQUAL "CXX") OR ("${syntax}" STREQUAL "CMAKE"))) - - # truncate the file if the verb was "WRITE" - if (verb STREQUAL "WRITE") - file (WRITE "${filename}" "") - endif (verb STREQUAL "WRITE") - - # whenever we use this, we also signal to the header files that we - # have "config.h". add this before any other files (known till now) - # to avoid confusion from other configuration files. - get_filename_component (_config_path "${filename}" PATH) - get_filename_component (_config_file "${filename}" NAME) - if ("${_config_file}" MATCHES "config\\.h(\\..+)?") - add_definitions (-DHAVE_CONFIG_H=1) - include_directories (BEFORE "${_config_path}") - endif ("${_config_file}" MATCHES "config\\.h(\\..+)?") - - # only write the current value of each variable once - set (_args ${ARGN}) - if (_args) - list (REMOVE_DUPLICATES _args) - endif (_args) - - # process each variable - set (_prev_verbatim TRUE) - foreach (_var IN LISTS _args) - - # massage the name to remove source code formatting - string (REGEX REPLACE "^[\\n\\t\\ ]+" "" _var "${_var}") - string (REGEX REPLACE "[\\n\\t\\ ]+$" "" _var "${_var}") - - # if the name of a variable has the syntax of a comments, write it - # verbatim to the file; this can be used to create headings - if ("X Y Z ${_var}" MATCHES "^X Y Z /[/*]") - if (NOT _prev_verbatim) - file (APPEND "${filename}" "\n") - endif (NOT _prev_verbatim) - file (APPEND "${filename}" "${_var}\n") - set (_prev_verbatim TRUE) - - else () - - # write a CMake statements that warns if the value has changed - if ("${syntax}" STREQUAL "CMAKE") - set (_db "\${") # to avoid parsing problems - # special case: if we have a truth variable HAVE_ and this is - # either just defined (as is), or set to 1 explicitly, then both - # of these count as "true", so put in a check that also accepts - # both of these values. - if (("${_var}" MATCHES "^HAVE_.*") AND - (("${${_var}}" STREQUAL "") OR ("${${_var}}" STREQUAL "1"))) - set (_cond "(\"${_db}${_var}}\" STREQUAL \"\") OR (\"${_db}${_var}}\" STREQUAL \"1\")") - else () - set (_cond "\"${_db}${_var}}\" STREQUAL \"${${_var}}\"") - endif () - file (APPEND "${filename}" "if (DEFINED ${_var} AND NOT (${_cond}))\n") - file (APPEND "${filename}" "\tmessage (WARNING \"Incompatible value \\\"${_db}${_var}}\\\" of variable \\\"${_var}\\\"\")\n") - file (APPEND "${filename}" "endif ()\n") - endif () - - # check for empty variable; variables that are explicitly set to false - # is not included in this clause - if ((NOT DEFINED ${_var}) OR ("${${_var}}" STREQUAL "")) - if ("${syntax}" STREQUAL "CMAKE") - file (APPEND "${filename}" "set (${_var})\n") - else ("${syntax}" STREQUAL "CMAKE") - file (APPEND "${filename}" "/* #undef ${_var} */\n") - endif ("${syntax}" STREQUAL "CMAKE") - else ((NOT DEFINED ${_var}) OR ("${${_var}}" STREQUAL "")) - # write to file using the correct syntax - if ("${syntax}" STREQUAL "CMAKE") - # escape backslash and double quote characters - string (REPLACE "\\" "\\\\" _quoted "${${_var}}") - string (REPLACE "\"" "\\\"" _quoted "${_quoted}") - - file (APPEND "${filename}" "set (${_var} \"${_quoted}\")\n") - else ("${syntax}" STREQUAL "CMAKE") - file (APPEND "${filename}" "#define ${_var} ${${_var}}\n") - endif ("${syntax}" STREQUAL "CMAKE") - - endif ((NOT DEFINED ${_var}) OR ("${${_var}}" STREQUAL "")) - set (_prev_verbatim FALSE) - endif () - endforeach(_var) -endfunction (configure_vars obj syntax filename verb) diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/Duplicates.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Modules/Duplicates.cmake deleted file mode 100644 index 6b48f35746..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/Duplicates.cmake +++ /dev/null @@ -1,38 +0,0 @@ -# - Remove duplicate library declarations -# -# Synopsis: -# -# remove_duplicate_libraries (module) -# -# where -# module Name of the module whose libraries should be pruned - -# Copyright (C) 2013 Uni Research AS -# This file is licensed under the GNU General Public License v3.0 - -# libraries should always be trimmed from the beginning, so that also -# missing functions in those later in the list will be resolved -macro (remove_duplicate_libraries module) - if (DEFINED ${module}_LIBRARIES) - list (REVERSE ${module}_LIBRARIES) - list (REMOVE_DUPLICATES ${module}_LIBRARIES) - list (REVERSE ${module}_LIBRARIES) - endif (DEFINED ${module}_LIBRARIES) -endmacro (remove_duplicate_libraries module) - -# headers can be trimmed from the end, since adding a directory to -# the list is an idempotent action -macro (remove_duplicate_var module suffix) - if (DEFINED ${module}_${suffix}) - list (REMOVE_DUPLICATES ${module}_${suffix}) - endif (DEFINED ${module}_${suffix}) -endmacro (remove_duplicate_var module suffix) - -# fix up both headers and libraries, in case two dependencies have -# included the same second-level library independently -macro (remove_dup_deps module) - remove_duplicate_var (${module} INCLUDE_DIRS) - remove_duplicate_var (${module} LINKER_FLAGS) - remove_duplicate_var (${module} CONFIG_VARS) - remove_duplicate_libraries (${module}) -endmacro (remove_dup_deps module) diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/FindAlberta.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Modules/FindAlberta.cmake deleted file mode 100644 index e6fcd58531..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/FindAlberta.cmake +++ /dev/null @@ -1,46 +0,0 @@ -find_library(ALBERTA_LTDL_LIB - NAMES ltdl - PATH_SUFFIXES lib lib32 lib64 -) -find_path(ALBERTA_INCLUDE_DIR - NAMES alberta/alberta.h - PATHS ${ALBERTA_ROOT} - PATH_SUFFIXES alberta include NO_DEFAULT_PATH - DOC "Include path of Alberta") -find_path(ALBERTA_INCLUDE_DIR - NAMES - alberta/alberta.h - PATHS /usr/local /opt - PATH_SUFFIXES alberta) -#look for libraries -find_library(ALBERTA_UTIL_LIB - NAMES alberta_util alberta_utilities - PATHS ${ALBERTA_ROOT} - PATH_SUFFIXES lib lib32 lib64 - NO_DEFAULT_PATH) -find_library(ALBERTA_UTIL_LIB - NAMES alberta_util alberta_utilities - PATH_SUFFIXES lib lib32 lib64) - -foreach(dim RANGE 1 9) - find_library(ALBERTA_${dim}D_LIB alberta_${dim}d - PATHS ${ALBERTA_ROOT} - PATH_SUFFIXES lib lib32 lib64 - Cache FILEPATH DOC "Alberta lib for ${dim}D" NO_DEFAULT_PATH) - find_library(ALBERTA_${dim}D_LIB alberta_${dim}d PATH_SUFFIXES lib lib32 lib64) - if(ALBERTA_${dim}D_LIB) - set(ALBERTA_LIBRARIES ${ALBERTA_LIBRARIES} ${ALBERTA_${dim}D_LIB}) - endif() -endforeach(dim RANGE 1 9) - -if(ALBERTA_LIBRARIES AND ALBERTA_INCLUDE_DIR) - set(ALBERTA_INCLUDE_DIRS ${ALBERTA_INCLUDE_DIR}) - set(ALBERTA_LIBRARIES ${ALBERTA_LIBRARIES} ${ALBERTA_UTIL_LIB} ${ALBERTA_LTDL_LIB}) - set(ALBERTA_FOUND ON) - set(Alberta_FOUND ON) - set(HAVE_ALBERTA 1) - set(DUNE_ALBERTA_VERSION 0x300) -else() - set(ALBERTA_FOUND OFF) - set(Alberta_FOUND OFF) -endif() diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/FindC99.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Modules/FindC99.cmake deleted file mode 100644 index 1dcbe1e4d1..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/FindC99.cmake +++ /dev/null @@ -1,25 +0,0 @@ -# - Module that checks for supported C99 features. - -# macro to only add option once -include (AddOptions) - -# try to use compiler flag -std=c99 -set (C_STD99_FLAGS "-std=c99") - -# incidently, the C++ test is so simple that it can be used to compile C as well -include (CheckCCompilerFlag) -check_c_compiler_flag (${C_STD99_FLAGS} HAVE_C99) - -# add option if we are capable -if (HAVE_C99) - add_options (C ALL_BUILDS "${C_STD99_FLAGS}") -else (HAVE_C99) - set (C_STD99_FLAGS) -endif (HAVE_C99) - -# handle quiet and required -include (FindPackageHandleStandardArgs) -find_package_handle_standard_args (C99 - DEFAULT_MSG - C_STD99_FLAGS - ) diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/FindClangCheck.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Modules/FindClangCheck.cmake deleted file mode 100644 index 10a7ac02a9..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/FindClangCheck.cmake +++ /dev/null @@ -1,11 +0,0 @@ -# Find clang-check. -# -# This module defines: -# CLANGCHECK_PROGRAM, the clang-check executable. -# CLANGHCECK_FOUND, If false, do not try to use cppcheck. -# -find_program(CLANGCHECK_PROGRAM NAMES clang-check clang-check-3.8) - -find_package_handle_standard_args(ClangCheck DEFAULT_MSG CLANGCHECK_PROGRAM) - -mark_as_advanced(CLANGCHECK_PROGRAM) diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/FindCppCheck.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Modules/FindCppCheck.cmake deleted file mode 100644 index 6879156006..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/FindCppCheck.cmake +++ /dev/null @@ -1,11 +0,0 @@ -# Find CppCheck. -# -# This module defines: -# CPPCHECK_PROGRAM, the cppcheck executable. -# CPPCHECK_FOUND, If false, do not try to use cppcheck. -# -find_program(CPPCHECK_PROGRAM NAMES cppcheck) - -find_package_handle_standard_args(CppCheck DEFAULT_MSG CPPCHECK_PROGRAM) - -mark_as_advanced(CPPCHECK_PROGRAM) diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/FindCwrap.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Modules/FindCwrap.cmake deleted file mode 100644 index 7d9adbea03..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/FindCwrap.cmake +++ /dev/null @@ -1,49 +0,0 @@ -# Find the Python wrappers for module cwrap from ert -# -# Set the cache variable CWRAP_PYTHON_PATH to the install location of the root -# ert package. - -find_package(PythonInterp) -if(PYTHONINTERP_FOUND) - - # We try to find the cwrap Python distribution. This is done by running Python - # code which tries to 'import cwrap' and prints out the path to the module if - # the import succeeds. - # - # The normal Python import machinery is employed, so if you have installed cwrap - # python in a default location, or alternatively set the PYTHONPATH variable the - # cwrap Python distribution will eventually be found there, independently of the - # alternatives which are tested with the ${PATH_LIST} variable. - - if (EXISTS "/etc/debian_version") - set( PYTHON_PACKAGE_PATH "dist-packages") - else() - set( PYTHON_PACKAGE_PATH "site-packages") - endif() - set(PYTHON_INSTALL_PREFIX "lib/python${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}/${PYTHON_PACKAGE_PATH}" CACHE STRING "Subdirectory to install Python modules in") - - set(PATH_LIST) - if (ERT_ROOT) - list(APPEND PATH_LIST ${ERT_ROOT}) - endif() - list(APPEND PATH_LIST ${CMAKE_PREFIX_PATH}) - - # Add various popular sibling alternatives. - list(APPEND PATH_LIST "${PROJECT_SOURCE_DIR}/../ert/build" - "${PROJECT_BINARY_DIR}/../ert-build") - - foreach( PATH ${PATH_LIST}) - set( python_code "import sys; sys.path.insert(0 , '${PATH}/${PYTHON_INSTALL_PREFIX}'); import os.path; import inspect; import cwrap; print os.path.dirname(os.path.dirname(inspect.getfile(cwrap)))") - execute_process( COMMAND ${PYTHON_EXECUTABLE} -c "${python_code}" - RESULT_VARIABLE import_result - OUTPUT_VARIABLE stdout_output - ERROR_VARIABLE stderr_output - OUTPUT_STRIP_TRAILING_WHITESPACE ) - - if (${import_result} EQUAL 0) - set( CWRAP_PYTHON_PATH ${stdout_output} CACHE PATH "Python path for cwrap" ) - break() - endif() - endforeach() -endif() -find_package_handle_standard_args("Cwrap" DEFAULT_MSG CWRAP_PYTHON_PATH) diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/FindCxaDemangle.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Modules/FindCxaDemangle.cmake deleted file mode 100644 index cf2d4828ce..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/FindCxaDemangle.cmake +++ /dev/null @@ -1,23 +0,0 @@ -# Module that checks whether the compiler supports the -# abi::__cxa_demangle function required to -# make the type names returned by typeid() human-readable -# -# Sets the following variable: -# HAVE_CXA_DEMANGLE -# -# perform tests -include(CheckCXXSourceCompiles) - -CHECK_CXX_SOURCE_COMPILES("#include -int main(void){ - int foobar = 0; - const char *foo = typeid(foobar).name(); - int status; - char *demangled = abi::__cxa_demangle( foo, 0, 0, &status ); -}" HAVE_CXA_DEMANGLE) - -include (FindPackageHandleStandardArgs) -# prevent useless message from being displayed -set (FIND_PACKAGE_MESSAGE_DETAILS_CxaDemangle "[1][v()]" - CACHE INTERNAL "Details about finding CxaDemangle") -find_package_handle_standard_args (CxaDemangle DEFAULT_MSG HAVE_CXA_DEMANGLE) diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/FindEigen3.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Modules/FindEigen3.cmake deleted file mode 100644 index 470bb7a49f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/FindEigen3.cmake +++ /dev/null @@ -1,125 +0,0 @@ -# - Try to find Eigen3 lib -# -# This module supports requiring a minimum version, e.g. you can do -# find_package(Eigen3 3.1.2) -# to require version 3.1.2 or newer of Eigen3. -# -# Once done this will define -# -# EIGEN3_FOUND - system has eigen lib with correct version -# EIGEN3_INCLUDE_DIR - the eigen include directory -# EIGEN3_VERSION - eigen version - -# Copyright (c) 2006, 2007 Montel Laurent, -# Copyright (c) 2008, 2009 Gael Guennebaud, -# Copyright (c) 2009 Benoit Jacob -# Redistribution and use is allowed according to the terms of the 2-clause BSD license. - -if(NOT Eigen3_FIND_VERSION) - if(NOT Eigen3_FIND_VERSION_MAJOR) - set(Eigen3_FIND_VERSION_MAJOR 2) - endif(NOT Eigen3_FIND_VERSION_MAJOR) - if(NOT Eigen3_FIND_VERSION_MINOR) - set(Eigen3_FIND_VERSION_MINOR 91) - endif(NOT Eigen3_FIND_VERSION_MINOR) - if(NOT Eigen3_FIND_VERSION_PATCH) - set(Eigen3_FIND_VERSION_PATCH 0) - endif(NOT Eigen3_FIND_VERSION_PATCH) - - set(Eigen3_FIND_VERSION "${Eigen3_FIND_VERSION_MAJOR}.${Eigen3_FIND_VERSION_MINOR}.${Eigen3_FIND_VERSION_PATCH}") -endif(NOT Eigen3_FIND_VERSION) - -macro(_eigen3_check_version) - file(READ "${EIGEN3_INCLUDE_DIR}/Eigen/src/Core/util/Macros.h" _eigen3_version_header) - - string(REGEX MATCH "define[ \t]+EIGEN_WORLD_VERSION[ \t]+([0-9]+)" _eigen3_world_version_match "${_eigen3_version_header}") - set(EIGEN3_WORLD_VERSION "${CMAKE_MATCH_1}") - string(REGEX MATCH "define[ \t]+EIGEN_MAJOR_VERSION[ \t]+([0-9]+)" _eigen3_major_version_match "${_eigen3_version_header}") - set(EIGEN3_MAJOR_VERSION "${CMAKE_MATCH_1}") - string(REGEX MATCH "define[ \t]+EIGEN_MINOR_VERSION[ \t]+([0-9]+)" _eigen3_minor_version_match "${_eigen3_version_header}") - set(EIGEN3_MINOR_VERSION "${CMAKE_MATCH_1}") - - set(EIGEN3_VERSION ${EIGEN3_WORLD_VERSION}.${EIGEN3_MAJOR_VERSION}.${EIGEN3_MINOR_VERSION}) - if(${EIGEN3_VERSION} VERSION_LESS ${Eigen3_FIND_VERSION}) - set(EIGEN3_VERSION_OK FALSE) - else(${EIGEN3_VERSION} VERSION_LESS ${Eigen3_FIND_VERSION}) - set(EIGEN3_VERSION_OK TRUE) - endif(${EIGEN3_VERSION} VERSION_LESS ${Eigen3_FIND_VERSION}) - - if(NOT EIGEN3_VERSION_OK) - - message(STATUS "Eigen3 version ${EIGEN3_VERSION} found in ${EIGEN3_INCLUDE_DIR}, " - "but at least version ${Eigen3_FIND_VERSION} is required") - endif(NOT EIGEN3_VERSION_OK) -endmacro(_eigen3_check_version) - -# only probe if we haven't a path in our cache -if (NOT EIGEN3_INCLUDE_DIR) - - # allow Eigen3_ROOT to be used in addition to EIGEN3_ROOT - if (Eigen3_ROOT) - set (EIGEN3_ROOT "${Eigen3_ROOT}") - endif (Eigen3_ROOT) - - # if the _ROOT is specified, then look *only* there; don't allow any - # other version to be swapped in to substitute; if not specified, then - # go search usual locations - if (EIGEN3_ROOT) - # if we are given the path to a "build" tree (meaning somewhere Eigen3 - # has been configured), then use the eigen3.pc file to figure out the - # name of the *real* root directory - if (EXISTS "${EIGEN3_ROOT}/CMakeCache.txt") - # get the cache entry that tells use the source tree location - set (_regex "Eigen_SOURCE_DIR:STATIC=\(.*\)") - file (STRINGS - "${EIGEN3_ROOT}/CMakeCache.txt" - EIGEN3_SOURCE_TREE - REGEX "${_regex}" - ) - # trim away the key definition, be left with the value - if (EIGEN3_SOURCE_TREE) - string (REGEX REPLACE - "${_regex}" - "\\1" - EIGEN3_SOURCE_TREE - "${EIGEN3_SOURCE_TREE}" - ) - # if something doesn't look as expected, abort and search in _ROOT - else () - set (EIGEN3_SOURCE_TREE "${EIGEN3_ROOT}") - endif () - else () - set (EIGEN3_SOURCE_TREE "${EIGEN3_ROOT}") - endif () - - find_path (EIGEN3_INCLUDE_DIR - NAMES signature_of_eigen3_matrix_library - PATHS ${EIGEN3_SOURCE_TREE} - PATH_SUFFIXES eigen3 include/eigen3 eigen include/eigen - NO_DEFAULT_PATH - ) - else (EIGEN3_ROOT) - # assume that if there is a sibling directory to our project which - # is called eigen3, there is a newer version located there, or that - # it may have been checked out next to the build directory - find_path(EIGEN3_INCLUDE_DIR - NAMES signature_of_eigen3_matrix_library - HINTS ${CMAKE_SOURCE_DIR}/../ - ${PROJECT_SOURCE_DIR}/../ - ${CMAKE_INSTALL_PREFIX}/include - ${KDE4_INCLUDE_DIR} - PATH_SUFFIXES eigen3 eigen - ) - endif (EIGEN3_ROOT) -endif (NOT EIGEN3_INCLUDE_DIR) - - if(EIGEN3_INCLUDE_DIR) - _eigen3_check_version() - endif(EIGEN3_INCLUDE_DIR) - - include(FindPackageHandleStandardArgs) - find_package_handle_standard_args(Eigen3 DEFAULT_MSG EIGEN3_INCLUDE_DIR EIGEN3_VERSION_OK) - - mark_as_advanced(EIGEN3_INCLUDE_DIR) - - diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/FindMETIS.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Modules/FindMETIS.cmake deleted file mode 100644 index b645e3c6e1..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/FindMETIS.cmake +++ /dev/null @@ -1,49 +0,0 @@ -# -*-cmake-*- -# -# Try to find the libMETIS graph partioning library -# -# Once done, this will define: -# -# METIS_FOUND - system has the libMETIS graph partioning library -# HAVE_METIS - like METIS_FOUND, but for the inclusion in config.h -# METIS_INCLUDE_DIRS - incude paths to use libMETIS -# METIS_LIBRARIES - Link these to use libMETIS - -set(METIS_SEARCH_PATH "/usr" "/usr/local" "/opt" "/opt/local") -set(METIS_NO_DEFAULT_PATH "") -if(METIS_ROOT) - set(METIS_SEARCH_PATH "${METIS_ROOT}") - set(METIS_NO_DEFAULT_PATH "NO_DEFAULT_PATH") -endif() - -# search for files which implements this module -find_path (METIS_INCLUDE_DIRS - NAMES "metis.h" - PATHS ${METIS_SEARCH_PATH} - PATH_SUFFIXES "include" "METISLib" "include/metis" - ${METIS_NO_DEFAULT_PATH}) - -# only search in architecture-relevant directory -if (CMAKE_SIZEOF_VOID_P) - math (EXPR _BITS "8 * ${CMAKE_SIZEOF_VOID_P}") -endif (CMAKE_SIZEOF_VOID_P) - -find_library(METIS_LIBRARIES - NAMES "metis" - PATHS ${METIS_SEARCH_PATH} - PATH_SUFFIXES "lib/.libs" "lib" "lib${_BITS}" "lib/${CMAKE_LIBRARY_ARCHITECTURE}" - ${METIS_NO_DEFAULT_PATH}) - -set (METIS_FOUND FALSE) -if (METIS_INCLUDE_DIRS OR METIS_LIBRARIES) - set(METIS_FOUND TRUE) - set(HAVE_METIS TRUE) -endif() - -# print a message to indicate status of this package -include (FindPackageHandleStandardArgs) -find_package_handle_standard_args(METIS - DEFAULT_MSG - METIS_LIBRARIES - METIS_INCLUDE_DIRS - ) diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/FindPETSc.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Modules/FindPETSc.cmake deleted file mode 100644 index a6d3891c35..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/FindPETSc.cmake +++ /dev/null @@ -1,166 +0,0 @@ -# - Try to find Petsc lib -# -# This module supports requiring a minimum version, e.g. you can do -# find_package(Petsc) -# -# Once done this will define -# -# PETSC_FOUND - system has Petsc lib with correct version -# PETSC_INCLUDE_DIRS - the Petsc include directory -# PETSC_LIBRARIES - the Petsc library. - -# Copyright (c) 2006, 2007 Montel Laurent, -# Copyright (c) 2008, 2009 Gael Guennebaud, -# Copyright (c) 2009 Benoit Jacob -# Redistribution and use is allowed according to the terms of the 2-clause BSD license. - -# find out the size of a pointer. this is required to only search for -# libraries in the directories relevant for the architecture - -if(NOT USE_PETSC) - return() -endif() - -if (CMAKE_SIZEOF_VOID_P) - math (EXPR _BITS "8 * ${CMAKE_SIZEOF_VOID_P}") -endif (CMAKE_SIZEOF_VOID_P) - -# if PETSC_ROOT is set, then this is the only place searched for petsc headers -# and includes -set(_no_default_path "") -if(PETSC_ROOT) - set (_no_default_path "NO_DEFAULT_PATH") -endif() - -# look for a system-wide BLAS library -set(PETSC_BLAS_LIBRARY "") -find_package(BLAS QUIET) -list(APPEND PETSC_BLAS_LIBRARY "${BLAS_LIBRARIES}") - -# if BLAS wasn't found, look for it in PETSC_ROOT. Won't search if -# PETSC_BLAS_LIBRARY is set. -find_library(PETSC_BLAS_LIBRARY - NAME "blas" - PATH ${PETSC_ROOT} - PATH_SUFFIXES "lib" "lib${_BITS}" "lib/${CMAKE_LIBRARY_ARCHITECTURE}" - ${_no_default_path} - ) - -# print message if there was still no blas found! -if(NOT BLAS_FOUND AND NOT PETSC_BLAS_LIBRARY) - message(STATUS "BLAS not found but required for PETSc") - return() -endif() - -set(PETSC_LAPACK_LIBRARY "") -find_package(LAPACK QUIET) -list(APPEND PETSC_LAPACK_LIBRARY "${LAPACK_LIBRARIES}") - -# if LAPACK wasn't found, look for it in PETSC_ROOT -find_library(PETSC_LAPACK_LIBRARY - NAME "lapack" - PATH ${PETSC_ROOT} - PATH_SUFFIXES "lib" "lib${_BITS}" "lib/${CMAKE_LIBRARY_ARCHITECTURE}" - ${_no_default_path} - ) - -# print message if there was still no blas found! -if(NOT LAPACK_FOUND AND NOT PETSC_LAPACK_LIBRARY) - message(STATUS "LAPACK not found but required for PETSc") - return() -endif() - -find_package(X11 QUIET) -if (X11_FOUND) - list(APPEND PETSC_X11_LIBRARY "${X11_LIBRARIES}") -endif() - -# these variables must exist. Since not finding MPI, both the header and the -# object file , may not be an error, we want the option of concatenating the -# empty variable onto the PETSC_LIBRARIES/INCLUDE_DIRS lists -set(PETSC_MPI_LIBRARY "") -set(PETSC_MPI_INCLUDE_DIRS "") - -find_package(MPI) -if(MPI_FOUND) - list(APPEND PETSC_MPI_LIBRARY "${MPI_LIBRARIES}") - set(PETSC_MPI_INCLUDE_DIRS ${MPI_INCLUDE_PATH}) - -else(MPI_FOUND) -# if a system MPI wasn't found, look for PETSc's serial implementation. This -# won't be available if PETSc was compiled with --with-mpi=0, so not finding -# this won't be an error. This only needs to find the header, as the MPI -# implementation should be already be compiled into PETSc. - message(STATUS "Could not find a system provided MPI. Searching for PETSc provided mpiuni fallback implementation.") - find_path(PETSC_MPI_INCLUDE_DIRS - NAMES "mpi.h" - PATHS ${PETSC_ROOT}/include - PATH_SUFFIXES "mpiuni" - ${_no_default_path} - ) -endif(MPI_FOUND) - -if(NOT PETSC_MPI_INCLUDE_DIRS) - message(WARNING "Could not find any MPI implementation. If PETSc is compiled with --with-mpi=0 this is ok. Otherwise you will get linker errors or (possibly subtle) runtime errors. Continuing.") - if(NOT USE_MPI) - message("To build with MPI support, pass -DUSE_MPI=ON to CMake.") - endif(NOT USE_MPI) -endif(NOT PETSC_MPI_INCLUDE_DIRS) - -# only probe if we haven't a path in our cache -if (Petsc_ROOT) - set (PETSC_ROOT "${Petsc_ROOT}") -endif (Petsc_ROOT) - -find_package(PkgConfig) -if(PKG_CONFIG_FOUND) - set(OLD_PKG $ENV{PKG_CONFIG_PATH}) - set(ENV{PKG_CONFIG_PATH} $ENV{PETSC_DIR}/$ENV{PETSC_ARCH}/lib/pkgconfig) - pkg_check_modules(PETSC PETSc>=3.4.0) - set(ENV{PKG_CONFIG_PATH} ${OLD_PKG}) - set(PETSC_LIBRARIES ${PETSC_STATIC_LDFLAGS}) - set(PETSC_LIBRARY ${PETSC_LIBRARIES}) - set(PETSC_INCLUDE_DIR ${PETSC_INCLUDE_DIRS}) -endif() - -if(NOT PETSC_FOUND) - find_path (PETSC_NORMAL_INCLUDE_DIR - NAMES "petsc.h" - PATHS ${PETSC_ROOT} - PATH_SUFFIXES "include" "petsc" - ${_no_default_path} - ) - - list(APPEND PETSC_INCLUDE_DIR ${PETSC_NORMAL_INCLUDE_DIR}) - - # look for actual Petsc library - find_library(PETSC_LIBRARY - NAMES "petsc-3.4.3" "petsc-3.4.4" "petsc" - PATHS ${PETSC_ROOT} - PATH_SUFFIXES "lib" "lib${_BITS}" "lib/${CMAKE_LIBRARY_ARCHITECTURE}" - ${_no_default_path} - ) -endif() - -if(NOT PETSC_LIBRARY) - message(STATUS "Could not find the PETSc library") - return() -endif() - - -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(Petsc DEFAULT_MSG PETSC_INCLUDE_DIR PETSC_LIBRARY) -mark_as_advanced(PETSC_INCLUDE_DIR PETSC_LIBRARY) - -# if both headers and library are found, store results -if(PETSC_FOUND) - set(PETSC_INCLUDE_DIRS ${PETSC_INCLUDE_DIR}) - list(APPEND PETSC_INCLUDE_DIRS ${PETSC_MPI_INCLUDE_DIRS}) - - set(PETSC_LIBRARIES ${PETSC_LIBRARY}) - - list(APPEND PETSC_LIBRARIES ${PETSC_BLAS_LIBRARY}) - list(APPEND PETSC_LIBRARIES ${PETSC_LAPACK_LIBRARY}) - list(APPEND PETSC_LIBRARIES ${PETSC_X11_LIBRARY}) - list(APPEND PETSC_LIBRARIES ${PETSC_MPI_LIBRARY}) -endif() diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/FindPTScotch.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Modules/FindPTScotch.cmake deleted file mode 100644 index e2f9d03c4a..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/FindPTScotch.cmake +++ /dev/null @@ -1,80 +0,0 @@ -# Module that checks whether PT-Scotch is available. -# -# Accepts the following variables: -# -# PTSCOTCH_ROOT: Prefix where PT-Scotch is installed. -# PTSCOTCH_SUFFIX: Scotch might be compiled using different -# integer sizes (int32, int32, long). When -# this is is set the headers and libaries -# are search under the suffix -# include/scotch-${PTSCOTCH_SUFFIX, and -# lib/scotch-${PTSCOTCH_SUFFIX}, respectively. -# Sets the following variables: -# PTSCOTCH_INCLUDE_DIRS: All include directories needed to compile PT-Scotch programs. -# PTSCOTCH_LIBRARIES: Alle libraries needed to link PT-Scotch programs. -# PTSCOTCH_FOUND: True if PT-Scotch was found. -# -# Provides the following macros: -# -# find_package(PTScotch) - -find_package(MPI) -macro(_search_pt_lib libvar libname doc) - find_library(${libvar} ${libname} - PATHS ${PTSCOTCH_ROOT} ${PTSCOTCH_ROOT}/lib PATH_SUFFIXES ${PATH_SUFFIXES} - NO_DEFAULT_PATH - DOC "${doc}") - find_library(${libvar} ${libname}) -endmacro(_search_pt_lib) - -if(PTSCOTCH_SUFFIX) - set(PATH_SUFFIXES "scotch-${PTSCOTCH_SUFFIX}") -else(PTSCOTCH_SUFFIX) - set(PATH_SUFFIXES "scotch") -endif(PTSCOTCH_SUFFIX) - -include(CMakePushCheckState) -cmake_push_check_state() # Save variables -set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} ${MPI_DUNE_INCLUDE_PATH}) -set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} ${MPI_DUNE_COMPILE_FLAGS}") - -find_path(PTSCOTCH_INCLUDE_DIR ptscotch.h - PATHS ${PTSCOTCH_ROOT} ${PTSCOTCH_ROOT}/include - PATH_SUFFIXES ${PATH_SUFFIXES} - NO_DEFAULT_PATH - DOC "Include directory of PT-Scotch") -find_path(PTSCOTCH_INCLUDE_DIR ptscotch.h - PATH_SUFFIXES ${PATH_SUFFIXES}) - -_search_pt_lib(SCOTCH_LIBRARY scotch "The main Scotch library.") -_search_pt_lib(PTSCOTCH_LIBRARY ptscotch "The main PT-Scotch library.") -_search_pt_lib(PTSCOTCHERR_LIBRARY ptscotcherr "The PT-Scotch error library.") - -# behave like a CMake module is supposed to behave -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args( - "PTScotch" - DEFAULT_MSG - PTSCOTCH_INCLUDE_DIR - SCOTCH_LIBRARY - PTSCOTCH_LIBRARY - PTSCOTCHERR_LIBRARY -) -#restore old values -cmake_pop_check_state() - -if(PTSCOTCH_FOUND) - set(PTSCOTCH_INCLUDE_DIRS ${PTSCOTCH_INCLUDE_DIR}) - set(PTSCOTCH_LIBRARIES ${SCOTCH_LIBRARY} ${PTSCOTCH_LIBRARY} ${PTSCOTCHERR_LIBRARY} ${MPI_DUNE_LIBRARIES} - CACHE FILEPATH "All libraries needed to link programs using PT-Scotch") - set(PTSCOCH_LINK_FLAGS "${DUNE_MPI_LINK_FLAGS}" - CACHE STRING "PT-Scotch link flags") - set(HAVE_PTSCOTCH 1) - # log result - file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log - "Determing location of PT-Scotch succeded:\n" - "Include directory: ${PTSCOTCH_INCLUDE_DIRS}\n" - "Library directory: ${PTSCOTCH_LIBRARIES}\n\n") -endif(PTSCOTCH_FOUND) - -mark_as_advanced(PTSCOTCH_INCLUDE_DIRS PTSCOTCH_LIBRARIES HAVE_PTSCOTCH) diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/FindParMETIS.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Modules/FindParMETIS.cmake deleted file mode 100644 index ec52c20384..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/FindParMETIS.cmake +++ /dev/null @@ -1,97 +0,0 @@ -# Module that checks whether ParMETIS or the ParMETIS interface of PT-Scotch -# is available. -# -# Accepts the following variables: -# -# PARMETIS_ROOT: Prefix where ParMETIS is installed. -# PARMETIS_SUFFIX: Scotch might be compiled using different -# integer sizes (int32, int32, long). When -# this is is set the headers and libaries -# are search under the suffix -# include/parmetis-${PARMETIS_SUFFIX}, and -# lib/parmetis-${PARMETIS_SUFFIX}, respectively. -# Sets the following variables: -# PARMETIS_INCLUDE_DIRS: All include directories needed to compile ParMETIS programs. -# PARMETIS_LIBRARIES: Alle libraries needed to link ParMETIS programs. -# PARMETIS_FOUND: True if ParMETIS was found. -# -# Provides the following macros: -# -# find_package(ParMETIS) - -find_package(MPI) - -if(MPI_C_FOUND) -macro(_search_parmetis_lib libvar libname doc) - find_library(${libvar} ${libname} - PATHS ${PARMETIS_ROOT} ${PARMETIS_ROOT}/lib PATH_SUFFIXES ${PATH_SUFFIXES} - NO_DEFAULT_PATH - DOC "${doc}") - find_library(${libvar} ${libname}) -endmacro(_search_parmetis_lib) - -if(PARMETIS_SUFFIX) - set(PATH_SUFFIXES "-${PARMETIS_SUFFIX}") -else(PARMETIS_SUFFIX) - set(PATH_SUFFIXES "") -endif(PARMETIS_SUFFIX) - -include(CMakePushCheckState) -cmake_push_check_state() # Save variables - -find_path(PARMETIS_INCLUDE_DIR parmetis.h - PATHS ${PARMETIS_ROOT} ${PARMETIS_ROOT}/include - PATH_SUFFIXES parmetis${PATH_SUFFIXES} - NO_DEFAULT_PATH - DOC "Include directory of ParMETIS") -find_path(PARMETIS_INCLUDE_DIR parmetis.h - PATH_SUFFIXES parmetis${PATH_SUFFIXES}) - -# find the serial version of METIS -find_package(METIS) -set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} ${MPI_C_INCLUDE_PATH} ) -if(PARMETIS_INCLUDE_DIR) - set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} ${PARMETIS_INCLUDE_DIR}) - if(METIS_INCLUDE_DIRS) - set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} ${METIS_INCLUDE_DIRS}) - endif() -endif() -set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} ${MPI_C_COMPILE_FLAGS}") - -include(CheckIncludeFile) -check_include_file(parmetis.h PARMETIS_FOUND) -_search_parmetis_lib(PARMETIS_LIBRARY parmetis "The main ParMETIS library.") - -# behave like a CMake module is supposed to behave -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args( - "ParMETIS" - DEFAULT_MSG - PARMETIS_INCLUDE_DIR - PARMETIS_LIBRARY - METIS_LIBRARIES - PARMETIS_FOUND - METIS_FOUND -) -#restore old values -cmake_pop_check_state() - -if(PARMETIS_FOUND) - set(PARMETIS_INCLUDE_DIRS ${PARMETIS_INCLUDE_DIR}) - set(PARMETIS_LIBRARIES ${PARMETIS_LIBRARY} ${METIS_LIBRARIES} ${MPI_C_LIBRARIES} - CACHE FILEPATH "All libraries needed to link programs using ParMETIS") - set(PARMETIS_LINK_FLAGS "${DUNE_C_LINK_FLAGS}" - CACHE STRING "ParMETIS link flags") - set(HAVE_PARMETIS 1) - # log result - file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log - "Determining location of ParMETIS succeded:\n" - "Include directory: ${PARMETIS_INCLUDE_DIRS}\n" - "Library directory: ${PARMETIS_LIBRARIES}\n\n") - -endif(PARMETIS_FOUND) - -mark_as_advanced(PARMETIS_INCLUDE_DIRS PARMETIS_LIBRARIES HAVE_PARMETIS) -else(MPI_C_FOUND) - message(WARNING "MPI not found ==> ParMETIS disabled! Plase make sure -DUSE_MPI=ON was set if you need ParMETIS.") -endif(MPI_C_FOUND) diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/FindQuadmath.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Modules/FindQuadmath.cmake deleted file mode 100644 index 47ba2b5898..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/FindQuadmath.cmake +++ /dev/null @@ -1,49 +0,0 @@ -# Module that checks whether the compiler supports the -# quadruple precision floating point math -# -# Sets the following variables: -# HAVE_QUAD -# QUADMATH_LIBRARIES -# -# perform tests -include(CheckCSourceCompiles) -include(CheckCXXSourceCompiles) -include(CMakePushCheckState) -include(CheckCXXCompilerFlag) - -if(NOT DEFINED USE_QUADMATH OR USE_QUADMATH) - if(NOT DEFINED HAVE_EXTENDED_NUMERIC_LITERALS) - check_cxx_compiler_flag("-Werror -fext-numeric-literals" HAVE_EXTENDED_NUMERIC_LITERALS) - endif() - - if (HAVE_EXTENDED_NUMERIC_LITERALS) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fext-numeric-literals") - endif() - - cmake_push_check_state(RESET) - list(APPEND CMAKE_REQUIRED_LIBRARIES "quadmath") - CHECK_CXX_SOURCE_COMPILES(" -#include - -int main(void){ - __float128 foo = sqrtq(123.456); - foo = FLT128_MIN; -}" QUADMATH_FOUND) - cmake_pop_check_state() - - if (QUADMATH_FOUND) - set(QUADMATH_LIBRARIES "quadmath") - set(HAVE_QUAD "${QUADMATH_FOUND}") - endif() -endif() - -if (USE_QUADMATH AND NOT QUADMATH_FOUND) - message(FATAL_ERROR "Quadruple precision math support was explicitly requested but is unavailable!") -endif() - -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(Quadmath - DEFAULT_MSG - QUADMATH_LIBRARIES - HAVE_QUAD - ) diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/FindSuiteSparse.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Modules/FindSuiteSparse.cmake deleted file mode 100644 index 0b77b836cf..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/FindSuiteSparse.cmake +++ /dev/null @@ -1,294 +0,0 @@ -# - Find Tim Davis' SuiteSparse collection of sparse matrix libraries -# -# Synopsis: -# find_package (SuiteSparse COMPONENTS ) -# -# Components are: -# amd Approximate Minimum Degree ordering -# camd Constrained Approximate Minimum Degree ordering -# colamd COLumn Approximate Minimum Degree ordering -# ccolamd Constrained COLumn Approximate Minimum Degree ordering -# cholmod Supernodal sparse Cholesky factorization and update -# umfpack Unsymmetric MultiFrontal sparse LU factorization -# -# The following variables will be set: -# -# SuiteSparse_FOUND True if all dependencies are satisfied -# SuiteSparse_Xxx_FOUND True if module Xxx is found -# HAVE_SUITESPARSE_Xxx_H Binary value indicating presence of header -# SuiteSparse_INCLUDE_DIRS Paths containing the SuiteSparse header files -# SuiteSparse_LIBRARIES Name of the libraries which must be linked -# SuiteSparse_DEFINITIONS Defines that must be passed to the compiler -# SuiteSparse_LINKER_FLAGS Options that must be passed when linking -# -# The following options can be set to configure the module: -# -# SUITESPARSE_USE_STATIC Link with a static library, even if a -# dynamic library is also present. Note that -# setting this to OFF does not ensure that a -# shared library will be used. -# -# See . - -# Copyright (C) 2012 Uni Research AS -# This file is licensed under the GNU General Public License v3.0 - -function (try_compile_umfpack varname) - include (CMakePushCheckState) - include (CheckCSourceCompiles) - cmake_push_check_state () - set (CMAKE_REQUIRED_INCLUDES ${UMFPACK_INCLUDE_DIRS}) - set (CMAKE_REQUIRED_LIBRARIES ${UMFPACK_LIBRARY} ${ARGN} ${SuiteSparse_EXTRA_LIBS}) - check_c_source_compiles ( - "#include -int main (void) { - void *Symbolic, *Numeric; - double Info[UMFPACK_INFO], Control[UMFPACK_CONTROL]; - umfpack_dl_defaults(Control); - umfpack_dl_symbolic(0, 0, 0, 0, 0, - &Symbolic, Control, Info); - umfpack_dl_numeric (0, 0, 0, - Symbolic, &Numeric, Control, Info); - umfpack_dl_free_symbolic(&Symbolic); - umfpack_dl_solve(UMFPACK_A, 0, 0, 0, 0, 0, - Numeric, Control, Info); - umfpack_dl_free_numeric(&Numeric); - umfpack_timer (); - return 0; -}" ${varname}) - cmake_pop_check_state () - set (${varname} "${${varname}}" PARENT_SCOPE) -endfunction (try_compile_umfpack varname) - -# variables to pass on to other packages -if (FIND_QUIETLY) - set (SuiteSparse_QUIET "QUIET") -else (FIND_QUIETLY) - set (SuiteSparse_QUIET "") -endif (FIND_QUIETLY) - -# we need to link to BLAS and LAPACK -if (NOT BLAS_FOUND) - find_package (BLAS ${SuiteSparse_QUIET} REQUIRED) -endif (NOT BLAS_FOUND) -if (NOT LAPACK_FOUND) - find_package (LAPACK ${SuiteSparse_QUIET} REQUIRED) -endif (NOT LAPACK_FOUND) - -# we also need the math part of the runtime library -find_library (MATH_LIBRARY NAMES "m") -set (SuiteSparse_EXTRA_LIBS ${LAPACK_LIBRARIES} ${BLAS_LIBRARIES} ${MATH_LIBRARY}) - -# if we don't get any further clues about where to look, then start -# roaming around the system -set (_no_default_path "") - -# search system directories by default -set (SuiteSparse_SEARCH_PATH) - -# pick up paths from the environment if specified there; these replace the -# pre-defined paths so that we don't accidentially pick up old stuff -if (NOT $ENV{SuiteSparse_DIR} STREQUAL "") - set (SuiteSparse_SEARCH_PATH "$ENV{SuiteSparse_DIR}") -endif (NOT $ENV{SuiteSparse_DIR} STREQUAL "") -if (SuiteSparse_DIR) - set (SuiteSparse_SEARCH_PATH "${SuiteSparse_DIR}") -endif (SuiteSparse_DIR) -# CMake uses _DIR suffix as default for config-mode files; it is unlikely -# that we are building SuiteSparse ourselves; use _ROOT suffix to specify -# location to pre-canned binaries -if (NOT $ENV{SuiteSparse_ROOT} STREQUAL "") - set (SuiteSparse_SEARCH_PATH "$ENV{SuiteSparse_ROOT}") -endif (NOT $ENV{SuiteSparse_ROOT} STREQUAL "") -if (SuiteSparse_ROOT) - set (SuiteSparse_SEARCH_PATH "${SuiteSparse_ROOT}") -endif (SuiteSparse_ROOT) -# most commonly, we use the uppercase version of this variable -if (SUITESPARSE_ROOT) - set (SuiteSparse_SEARCH_PATH "${SUITESPARSE_ROOT}") -endif (SUITESPARSE_ROOT) - -# if we have specified a search path, then confine ourselves to that -if (SuiteSparse_SEARCH_PATH) - set (_no_default_path "NO_DEFAULT_PATH") -endif (SuiteSparse_SEARCH_PATH) - -# transitive closure of dependencies; after this SuiteSparse_MODULES is the -# full list of modules that must be found to satisfy the user's link demands -set (SuiteSparse_MODULES ${SuiteSparse_FIND_COMPONENTS}) -list (FIND SuiteSparse_MODULES "umfpack" UMFPACK_DESIRED) -if (NOT UMFPACK_DESIRED EQUAL -1) - list (APPEND SuiteSparse_MODULES amd cholmod) -endif (NOT UMFPACK_DESIRED EQUAL -1) -list (FIND SuiteSparse_MODULES "cholmod" CHOLMOD_DESIRED) -if (NOT CHOLMOD_DESIRED EQUAL -1) - list (APPEND SuiteSparse_MODULES amd camd colamd) -endif (NOT CHOLMOD_DESIRED EQUAL -1) -if (SuiteSparse_MODULES) - list (REMOVE_DUPLICATES SuiteSparse_MODULES) -endif (SuiteSparse_MODULES) - -# if someone else already have found all the packages for us, then don't do anything -set (SuiteSparse_EVERYTHING_FOUND TRUE) -foreach (module IN LISTS SuiteSparse_MODULES) - string (TOUPPER ${module} MODULE) - if (NOT SuiteSparse_${MODULE}_FOUND) - set (SuiteSparse_EVERYTHING_FOUND FALSE) - break () - endif (NOT SuiteSparse_${MODULE}_FOUND) -endforeach (module) -if (SuiteSparse_EVERYTHING_FOUND) - return () -endif (SuiteSparse_EVERYTHING_FOUND) - -# only search in architecture-relevant directory -if (CMAKE_SIZEOF_VOID_P) - math (EXPR _BITS "8 * ${CMAKE_SIZEOF_VOID_P}") -endif (CMAKE_SIZEOF_VOID_P) - -# if we are told to link SuiteSparse statically, add these parts -# to the name so we always match only that particular type of lib -option (SUITESPARSE_USE_STATIC "Link SuiteSparse statically" OFF) -mark_as_advanced (SUITESPARSE_USE_STATIC) -if (SUITESPARSE_USE_STATIC) - set (_pref_ "${CMAKE_STATIC_LIBRARY_PREFIX}") - set (_suff_ "${CMAKE_STATIC_LIBRARY_SUFFIX}") -else (SUITESPARSE_USE_STATIC) - set (_pref_ "") - set (_suff_ "") -endif (SUITESPARSE_USE_STATIC) - -# if SuiteSparse >= 4.0 we must also link with libsuitesparseconfig -# assume that this is the case if we find the library; otherwise just -# ignore it (older versions don't have a file named like this) -find_library (config_LIBRARY - NAMES "${_pref_}suitesparseconfig${_suff_}" - PATHS ${SuiteSparse_SEARCH_PATH} - PATH_SUFFIXES ".libs" "lib" "lib${_BITS}" "lib/${CMAKE_LIBRARY_ARCHITECTURE}" "lib/ufsparse" - ${_no_default_path} - ) -if (config_LIBRARY) - list (APPEND SuiteSparse_EXTRA_LIBS ${config_LIBRARY}) - # POSIX.1-2001 REALTIME portion require us to link this library too for - # clock_gettime() which is used by suitesparseconfig - if ("${CMAKE_SYSTEM_NAME}" MATCHES "Linux") - list (APPEND SuiteSparse_EXTRA_LIBS "-lrt") - endif ("${CMAKE_SYSTEM_NAME}" MATCHES "Linux") -endif (config_LIBRARY) - -# search filesystem for each of the module individually -foreach (module IN LISTS SuiteSparse_MODULES) - string (TOUPPER ${module} MODULE) - # search for files which implements this module - find_path (${MODULE}_INCLUDE_DIR - NAMES ${module}.h - PATHS ${SuiteSparse_SEARCH_PATH} - PATH_SUFFIXES "include" "include/suitesparse" "include/ufsparse" "${MODULE}/Include" - ${_no_default_path} - ) - - find_library (${MODULE}_LIBRARY - NAMES "${_pref_}${module}${_suff_}" - PATHS ${SuiteSparse_SEARCH_PATH} - PATH_SUFFIXES "lib/.libs" "lib" "lib${_BITS}" "lib/${CMAKE_LIBRARY_ARCHITECTURE}" "lib/ufsparse" "${MODULE}/Lib" - ${_no_default_path} - ) - # start out by including the module itself; other dependencies will be added later - set (${MODULE}_INCLUDE_DIRS ${${MODULE}_INCLUDE_DIR}) - set (${MODULE}_LIBRARIES ${${MODULE}_LIBRARY}) -endforeach (module) - -# insert any inter-modular dependencies here -if (CHOLMOD_LIBRARY) - list (APPEND CHOLMOD_LIBRARIES ${AMD_LIBRARIES} ${COLAMD_LIBRARIES}) - # optional libraries; don't insert any -NOT_FOUND paths - if (CAMD_LIBRARY) - list (APPEND CHOLMOD_LIBRARIES ${CAMD_LIBRARIES}) - endif (CAMD_LIBRARY) - if (CCOLAMD_LIBRARY) - list (APPEND CHOLMOD_LIBRARIES ${CCOLAMD_LIBRARIES}) - endif (CCOLAMD_LIBRARY) - list (REVERSE CHOLMOD_LIBRARIES) - # always remove the *first* library from the list - list (REMOVE_DUPLICATES CHOLMOD_LIBRARIES) - list (REVERSE CHOLMOD_LIBRARIES) -endif (CHOLMOD_LIBRARY) -if (UMFPACK_LIBRARY) - set (UMFPACK_EXTRA_LIBS) - # test if umfpack is usable with only amd and not cholmod - try_compile_umfpack (HAVE_UMFPACK_WITHOUT_CHOLMOD ${AMD_LIBRARIES}) - if (HAVE_UMFPACK_WITHOUT_CHOLMOD) - list (APPEND UMFPACK_EXTRA_LIBS ${AMD_LIBRARIES}) - else (HAVE_UMFPACK_WITHOUT_CHOLMOD) - if (CHOLMOD_LIBRARIES) - try_compile_umfpack (HAVE_UMFPACK_WITH_CHOLMOD ${CHOLMOD_LIBRARIES}) - if (HAVE_UMFPACK_WITH_CHOLMOD) - list (APPEND UMFPACK_EXTRA_LIBS ${CHOLMOD_LIBRARIES}) - else (HAVE_UMFPACK_WITH_CHOLMOD) - set (UMFPACK_EXTRA_LIBS "-NOTFOUND") - endif (HAVE_UMFPACK_WITH_CHOLMOD) - else (CHOLMOD_LIBRARIES) - # if we don't have cholmod, then we certainly cannot have umfpack with cholmod - set (UMFPACK_EXTRA_LIBS "-NOTFOUND") - endif (CHOLMOD_LIBRARIES) - endif (HAVE_UMFPACK_WITHOUT_CHOLMOD) - list (APPEND UMFPACK_LIBRARIES ${UMFPACK_EXTRA_LIBS}) - list (REVERSE UMFPACK_LIBRARIES) - list (REMOVE_DUPLICATES UMFPACK_LIBRARIES) - list (REVERSE UMFPACK_LIBRARIES) -endif (UMFPACK_LIBRARY) - -# don't reset these sets; if two packages request SuiteSparse with -# different modules, we want the sets to be merged -#set (SuiteSparse_LIBRARIES "") -#set (SuiteSparse_INCLUDE_DIRS "") - -# determine which modules were found based on whether all dependencies -# were satisfied; create a list of ALL modules (specified) that was found -# (to be included in one swoop in CMakeLists.txt) -set (SuiteSparse_FOUND TRUE) -foreach (module IN LISTS SuiteSparse_FIND_COMPONENTS) - string (TOUPPER ${module} MODULE) - set (SuiteSparse_${MODULE}_FOUND TRUE) - foreach (file IN LISTS ${MODULE}_INCLUDE_DIRS ${MODULE}_LIBRARIES) - if (NOT EXISTS ${file}) - set (SuiteSparse_${MODULE}_FOUND FALSE) - endif (NOT EXISTS ${file}) - endforeach (file) - if (NOT SuiteSparse_${MODULE}_FOUND) - set (SuiteSparse_FOUND FALSE) - # use empty string instead of zero, so it can be tested with #ifdef - # as well as #if in the source code - set (HAVE_SUITESPARSE_${MODULE}_H "" CACHE INT "Is ${module} header present?") - else (NOT SuiteSparse_${MODULE}_FOUND) - set (HAVE_SUITESPARSE_${MODULE}_H 1 CACHE INT "Is ${module} header present?") - list (APPEND SuiteSparse_LIBRARIES "${${MODULE}_LIBRARIES}") - list (APPEND SuiteSparse_LINKER_FLAGS "${${MODULE}_LINKER_FLAGS}") - list (APPEND SuiteSparse_INCLUDE_DIRS "${${MODULE}_INCLUDE_DIRS}") - endif (NOT SuiteSparse_${MODULE}_FOUND) - mark_as_advanced (HAVE_SUITESPARSE_${MODULE}_H) - mark_as_advanced (${MODULE}_INCLUDE_DIR) - mark_as_advanced (${MODULE}_LIBRARY) -endforeach (module) - -if (SuiteSparse_INCLUDE_DIRS) - list (REMOVE_DUPLICATES SuiteSparse_INCLUDE_DIRS) -endif (SuiteSparse_INCLUDE_DIRS) -if (SuiteSparse_LIBRARIES) - list (REVERSE SuiteSparse_LIBRARIES) - list (REMOVE_DUPLICATES SuiteSparse_LIBRARIES) - list (REVERSE SuiteSparse_LIBRARIES) -endif (SuiteSparse_LIBRARIES) - -# print a message to indicate status of this package -include (FindPackageHandleStandardArgs) -find_package_handle_standard_args (SuiteSparse - DEFAULT_MSG - SuiteSparse_LIBRARIES - SuiteSparse_INCLUDE_DIRS - ) - -# add these after checking to not pollute the message output (checking for -# BLAS and LAPACK is REQUIRED so if they are not found, we'll have failed -# already; suitesparseconfig is "optional" anyway) -list (APPEND SuiteSparse_LIBRARIES ${SuiteSparse_EXTRA_LIBS}) diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/FindSuperLU.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Modules/FindSuperLU.cmake deleted file mode 100644 index 78e7f10ba0..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/FindSuperLU.cmake +++ /dev/null @@ -1,185 +0,0 @@ -# -# Module that checks whether SuperLU is available and usable. -# SuperLU must be a version released after the year 2005. -# -# Variables used by this module which you may want to set: -# SUPERLU_ROOT Path list to search for SuperLU -# -# Sets the follwing variable: -# -# SUPERLU_FOUND True if SuperLU available and usable. -# SUPERLU_MIN_VERSION_4_3 True if SuperLU version >= 4.3. -# SUPERLU_POST_2005_VERSION True if SuperLU is from post-2005 -# SUPERLU_WITH_VERSION Human readable string containing version information. -# SUPERLU_INCLUDE_DIRS Path to the SuperLU include dirs. -# SUPERLU_LIBRARIES Name to the SuperLU library. -# - -if(NOT USE_SUPERLU) - return() -endif() - -include(CheckIncludeFiles) -include(CMakePushCheckState) -include(CheckCSourceCompiles) - -cmake_push_check_state() - -set(SUPERLU_FOUND "FALSE") - -# find out the size of a pointer. this is required to only search for -# libraries in the directories relevant for the architecture -if (CMAKE_SIZEOF_VOID_P) - math (EXPR _BITS "8 * ${CMAKE_SIZEOF_VOID_P}") -endif (CMAKE_SIZEOF_VOID_P) - -# look for files only at the positions given by the user if -# an explicit path is specified -if(SUPERLU_ROOT) - set (_no_default_path "NO_DEFAULT_PATH") -else() - set (_no_default_path "") -endif() - -# look for a system-wide BLAS library -find_package(BLAS QUIET) - -# look for the internal SuperLU blas library (but only if no -# system-wide library was found and a path to the superLU library was -# specified) -set(SUPERLU_BLAS_LIBRARY "") -if (BLAS_FOUND) - list(APPEND SUPERLU_BLAS_LIBRARY "${BLAS_LIBRARIES}") -elseif(SUPERLU_ROOT) - find_library(SUPERLU_BLAS_LIBRARY - NAMES "blas" - PATHS ${SUPERLU_ROOT} - PATH_SUFFIXES "lib" "lib${_BITS}" "lib/${CMAKE_LIBRARY_ARCHITECTURE}" - NO_DEFAULT_PATH) -endif() - -# print message if there was still no blas found! -if(NOT BLAS_FOUND AND NOT SUPERLU_BLAS_LIBRARY) - message(STATUS "BLAS not found but required for SuperLU") - return() -endif() -list(APPEND CMAKE_REQUIRED_LIBRARIES "${SUPERLU_BLAS_LIBRARY}") - -# find the directory containing the SuperLU include files -if (NOT SUPERLU_INCLUDE_DIR) - find_path(SUPERLU_INCLUDE_DIR - NAMES "supermatrix.h" - PATHS ${SUPERLU_ROOT} - PATH_SUFFIXES "superlu" "include/superlu" "include" "SRC" - ${_no_default_path} - ) -endif() -if(NOT SUPERLU_INCLUDE_DIR) - message(STATUS "Directory with the SuperLU include files not found") - return() -endif() -list(APPEND CMAKE_REQUIRED_INCLUDES "${SUPERLU_INCLUDE_DIR}") - -# look for actual SuperLU library -if (NOT SUPERLU_LIBRARY) - find_library(SUPERLU_LIBRARY - NAMES "superlu_4.3" "superlu_4.2" "superlu_4.1" "superlu_4.0" "superlu_3.1" "superlu_3.0" "superlu" - PATHS ${SUPERLU_ROOT} - PATH_SUFFIXES "lib" "lib${_BITS}" "lib/${CMAKE_LIBRARY_ARCHITECTURE}" - ${_no_default_path} - ) -endif() -if(NOT SUPERLU_LIBRARY) - message(STATUS "Directory with the SuperLU library not found") - return() -endif() -list(APPEND CMAKE_REQUIRED_LIBRARIES "${SUPERLU_LIBRARY}") - -# check whether "mem_usage_t.expansions" was found in "slu_ddefs.h" -CHECK_C_SOURCE_COMPILES(" -#include -int main(void) -{ - mem_usage_t mem; - return mem.expansions; -}" -HAVE_MEM_USAGE_T_EXPANSIONS) - -CHECK_C_SOURCE_COMPILES(" -#include -int main(void) -{ - return SLU_DOUBLE; -}" -SUPERLU_MIN_VERSION_4_3) - -# check whether version is at least post-2005 -CHECK_C_SOURCE_COMPILES(" -#include -int main(void) -{ - GlobalLU_t g; - return 0; -}" -SUPERLU_POST_2005_VERSION) - -# check whether version is at least 5.0 -CHECK_C_SOURCE_COMPILES(" -typedef int int_t; -#include -#include -int main(void) -{ - GlobalLU_t glu; - return 0; -}" -SUPERLU_MIN_VERSION_5) - -cmake_pop_check_state() - -if(SUPERLU_MIN_VERSION_4_3) - set(SUPERLU_WITH_VERSION "SuperLU >= 4.3" CACHE STRING - "Human readable string containing SuperLU version information.") -else() - set(SUPERLU_WITH_VERSION "SuperLU <= 4.2, post 2005" CACHE STRING - "Human readable string containing SuperLU version information.") -endif() - -if(SUPERLU_MIN_VERSION_5) - include(UseDuneVer) - find_dune_version("dune" "istl") - set(DUNE_ISTL_VERSION ${DUNE_ISTL_VERSION_MAJOR}.${DUNE_ISTL_VERSION_MINOR}.${DUNE_ISTL_VERSION_REVISION}) - if(DUNE_ISTL_VERSION VERSION_LESS 2.5) - message(STATUS "SuperLU requested, but version found not compatible with dune-istl ${DUNE_ISTL_VERSION}") - set(SUPERLU_LIBRARY "") - set(SUPERLU_INCLUDE_DIR "") - endif() -endif() - -# behave like a CMake module is supposed to behave -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args( - "SuperLU" - DEFAULT_MSG - SUPERLU_INCLUDE_DIR - SUPERLU_LIBRARY) - -mark_as_advanced(SUPERLU_INCLUDE_DIR SUPERLU_LIBRARY) - -# if both headers and library are found, store results -if(SUPERLU_FOUND) - set(SUPERLU_INCLUDE_DIRS ${SUPERLU_INCLUDE_DIR}) - set(SUPERLU_LIBRARIES ${SUPERLU_LIBRARY}) - set(SUPERLU_INT_TYPE int) - if(SUPERLU_MIN_VERSION_4_3) - set(HAVE_SLU_DDEFS_H 1) - check_include_files(slu_sdefs.h HAVE_SLU_SDEFS_H) - check_include_files(slu_cdefs.h HAVE_SLU_CDEFS_H) - check_include_files(slu_zdefs.h HAVE_SLU_ZDEFS_H) - endif() - if (SUPERLU_BLAS_LIBRARY) - list(APPEND SUPERLU_LIBRARIES ${SUPERLU_BLAS_LIBRARY}) - endif() -endif() - -cmake_pop_check_state() diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/FindUG.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Modules/FindUG.cmake deleted file mode 100644 index b1f8ea6ae8..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/FindUG.cmake +++ /dev/null @@ -1,112 +0,0 @@ -# -# This module first tests for UG and then sets the necessary flags -# and config.h defines. If UG is found UG_FOUND will be true. -# - -# this function is required in order not to pollute the global -# namespace with the macros defined in ug-config*.cmake -function(opmFindUg) - if(NOT UG_ROOT) - # check whether UG is in /usr/local - if(EXISTS "/usr/local/include/ug") - set(UG_ROOT "/usr/local") - - # check whether UG is in /usr - elseif(EXISTS "/usr/include/ug") - set(UG_ROOT "/usr") - - # oops - else() - message(STATUS "Could not find UG. It seems to be not installed.") - return() - endif() - endif() - - if(UG_ROOT AND NOT UG_DIR) - # define the directory where the config file resides - if(EXISTS "${UG_ROOT}/lib/cmake/ug/ug-config.cmake") - set(UG_DIR ${UG_ROOT}/lib/cmake/ug) - elseif(EXISTS "${UG_ROOT}/lib64/cmake/ug/ug-config.cmake") - set(UG_DIR ${UG_ROOT}/lib64/cmake/ug) - else() - message(WARNING "Could not find file ug-config.cmake relative to given UG_ROOT") - return() - endif() - endif() - - # include the config mode files kindly provided by UG... - include(${UG_DIR}/ug-config-version.cmake) - include(${UG_DIR}/ug-config.cmake) - - set(UG_FOUND "1") - if(NOT UG_FOR_DUNE STREQUAL "yes") - set(UG_FOUND "0") - message(WARNING "UG was not configured for DUNE. Did pass --enable-dune to its configure?") - return() - endif() - - set(HAVE_UG ${UG_FOUND}) - - # parse version - string(REGEX REPLACE "([0-9]*)\\.[0-9]*\\..*" "\\1" UG_VERSION_MAJOR "${PACKAGE_VERSION}") - string(REGEX REPLACE "[0-9]*\\.([0-9]*)\\..*" "\\1" UG_VERSION_MINOR "${PACKAGE_VERSION}") - string(REGEX REPLACE "[0-9]*\\.[0-9]*\\.([0-9]*).*" "\\1" UG_VERSION_REVISION "${PACKAGE_VERSION}") - - string(REGEX REPLACE ".*-patch([0-9]*)" "\\1" TMP "${PACKAGE_VERSION}") - if(TMP STREQUAL "${PACKAGE_VERSION}") - set(UG_VERSION_PATCHLEVEL "") - else() - set(UG_VERSION_PATCHLEVEL "${TMP}") - endif() - - # Adjust compiler/linker arguments - set(UG_LIBRARY_DIR "${libdir}") - - foreach (UG_RAW_LIB "-lugS2" "-lugS3" "-ldevS") - string(REGEX REPLACE "-l(.*)" "\\1" UG_LIB "${UG_RAW_LIB}") - set(UG_LIB_FILE "${UG_LIBRARY_DIR}/lib${UG_LIB}.a") - if (EXISTS "${UG_LIB_FILE}") - set(UG_LIBS "${UG_LIBS}" ${UG_LIB_FILE}) - else() - set(UG_LIBS "${UG_LIBS}" ${UG_LIB}) - endif() - endforeach() - - set(UG_LIBRARIES "${UG_LIBS}") - - # export all variables which need to be seen globally - set(UG_FOUND "${UG_FOUND}" PARENT_SCOPE) - set(HAVE_UG "${HAVE_UG}" PARENT_SCOPE) - set(UG_INCLUDE_DIRS "${UG_INCLUDES}" PARENT_SCOPE) - set(UG_LIBRARIES "${UG_LIBRARIES}" PARENT_SCOPE) - set(UG_VERSION_MAJOR "${UG_VERSION_MAJOR}" PARENT_SCOPE) - set(UG_VERSION_MINOR "${UG_VERSION_MINOR}" PARENT_SCOPE) - set(UG_VERSION_REVISION "${UG_VERSION_REVISION}" PARENT_SCOPE) - set(UG_VERSION_PATCHLEVEL "${UG_VERSION_PATCHLEVEL}" PARENT_SCOPE) - - set(UG_DEFINITIONS "${UG_COMPILE_FLAGS}" PARENT_SCOPE) -endfunction() - -if (NOT HAVE_UG) - opmFindUg() - - set(HAVE_UG "${HAVE_UG}" CACHE BOOL "UG library is available") - set(UG_INCLUDE_DIRS "${UG_INCLUDE_DIRS}" CACHE STRING "Directory containing the headers of the UG library") - set(UG_LIBRARIES "${UG_LIBRARIES}" CACHE STRING "The libraries which need to be linked to be able to use the UG library") - set(UG_DEFINITIONS "${UG_DEFINITIONS}" CACHE STRING "The compiler flags for the UG library") - set(UG_VERSION_MAJOR "${UG_VERSION_MAJOR}" CACHE INT "Major version of the UG release") - set(UG_VERSION_MINOR "${UG_VERSION_MINOR}" CACHE INT "Minor version of the UG release") - set(UG_VERSION_REVISION "${UG_VERSION_REVISION}" CACHE INT "Revision of the UG release") - set(UG_VERSION_PATCHLEVEL "${UG_VERSION_PATCHLEVEL}" CACHE INT "Patchlevel of the UG release") - - mark_as_advanced(HAVE_UG) - mark_as_advanced(UG_INCLUDE_DIRS) - mark_as_advanced(UG_LIBRARIES) - mark_as_advanced(UG_DEFINITIONS) - mark_as_advanced(UG_VERSION_MAJOR) - mark_as_advanced(UG_VERSION_MINOR) - mark_as_advanced(UG_VERSION_REVISION) - mark_as_advanced(UG_VERSION_PATCHLEVEL) -else() - set(UG_FOUND "0") -endif() diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/FindValgrind.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Modules/FindValgrind.cmake deleted file mode 100644 index ae261507a9..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/FindValgrind.cmake +++ /dev/null @@ -1,25 +0,0 @@ -# Find Valgrind. -# -# This module defines: -# VALGRIND_INCLUDE_DIR, where to find valgrind/memcheck.h, etc. -# VALGRIND_PROGRAM, the valgrind executable. -# VALGRIND_FOUND, If false, do not try to use valgrind. -# -# If you have valgrind installed in a non-standard place, you can define -# VALGRIND_ROOT to tell cmake where it is. -if (VALGRIND_FOUND) - return() -endif() - -find_path(VALGRIND_INCLUDE_DIR valgrind/memcheck.h - /usr/include /usr/local/include ${VALGRIND_ROOT}/include) - -# if VALGRIND_ROOT is empty, we explicitly add /bin to the search -# path, but this does not hurt... -find_program(VALGRIND_PROGRAM NAMES valgrind PATH ${VALGRIND_ROOT}/bin) - -find_package_handle_standard_args(VALGRIND DEFAULT_MSG - VALGRIND_INCLUDE_DIR - VALGRIND_PROGRAM) - -mark_as_advanced(VALGRIND_ROOT VALGRIND_INCLUDE_DIR VALGRIND_PROGRAM) diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/FindZOLTAN.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Modules/FindZOLTAN.cmake deleted file mode 100644 index 2a484d13ed..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/FindZOLTAN.cmake +++ /dev/null @@ -1,64 +0,0 @@ -# -*-cmake-*- -# -# Try to find the libzoltan graph partioning library -# -# Once done, this will define: -# -# ZOLTAN_FOUND - system has the libzoltan graph partioning library -# HAVE_ZOLTAN - like ZOLTAN_FOUND, but for the inclusion in config.h -# ZOLTAN_INCLUDE_DIR - incude paths to use libzoltan -# ZOLTAN_LIBRARIES - Link these to use libzoltan - -set(ZOLTAN_SEARCH_PATH "/usr" "/usr/local" "/opt" "/opt/local") -set(ZOLTAN_NO_DEFAULT_PATH "") -if(ZOLTAN_ROOT) - set(ZOLTAN_SEARCH_PATH "${ZOLTAN_ROOT}") - set(ZOLTAN_NO_DEFAULT_PATH "NO_DEFAULT_PATH") -endif() - -# We only need zoltan with MPI. Otherwise usage of alugrid is broken. -find_package(MPI) - -# Make sure we have checked for the underlying partitioners. -find_package(PTScotch) -#find_package(ParMETIS) - -# search for files which implements this module -find_path (ZOLTAN_INCLUDE_DIRS - NAMES "zoltan.h" - PATHS ${ZOLTAN_SEARCH_PATH} - PATH_SUFFIXES include trilinos - ${ZOLTAN_NO_DEFAULT_PATH}) - -# only search in architecture-relevant directory -if (CMAKE_SIZEOF_VOID_P) - math (EXPR _BITS "8 * ${CMAKE_SIZEOF_VOID_P}") -endif (CMAKE_SIZEOF_VOID_P) - -find_library(ZOLTAN_LIBRARIES - NAMES zoltan trilinos_zoltan - PATHS ${ZOLTAN_SEARCH_PATH} - PATH_SUFFIXES "lib/.libs" "lib" "lib${_BITS}" "lib/${CMAKE_LIBRARY_ARCHITECTURE}" - ${ZOLTAN_NO_DEFAULT_PATH}) - -set (ZOLTAN_FOUND FALSE) - -set (ZOLTAN_CONFIG_VAR HAVE_ZOLTAN) - -# print a message to indicate status of this package -include (FindPackageHandleStandardArgs) - -find_package_handle_standard_args(ZOLTAN - DEFAULT_MSG - ZOLTAN_LIBRARIES - ZOLTAN_INCLUDE_DIRS - MPI_FOUND - ) - -if (ZOLTAN_FOUND) - set(HAVE_ZOLTAN 1) - set(ZOLTAN_LIBRARIES ${ZOLTAN_LIBRARIES} ${PARMETIS_LIBRARIES} ${PTSCOTCH_LIBRARIES}) - set(ZOLTAN_INCLUDE_DIRS ${ZOLTAN_INCLUDE_DIRS} ${PARMETIS_INCLUDE_DIRS} - ${PTSCOTCH_INCLUDE_DIRS}) -endif() - diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/Findcjson.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Modules/Findcjson.cmake deleted file mode 100644 index 61d5a1e902..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/Findcjson.cmake +++ /dev/null @@ -1,90 +0,0 @@ -# Look for the cjson library; will probably newer be found. -# If found, it sets these variables: -# -# CJSON_INCLUDE_DIRS Header file directories -# CJSON_LIBRARIES Archive/shared objects - -include (FindPackageHandleStandardArgs) - -if ((NOT CJSON_ROOT) AND OPM_PARSER_ROOT) - set( CJSON_ROOT ${OPM_PARSER_ROOT}) -endif() - -if (CJSON_ROOT) - set (_no_default_path "NO_DEFAULT_PATH") -else (CJSON_ROOT) - set (_no_default_path "") -endif (CJSON_ROOT) - - -find_path (CJSON_INCLUDE_DIR - NAMES "cjson/cJSON.h" - HINTS "${CJSON_ROOT}" - PATHS "${PROJECT_SOURCE_DIR}" - PATH_SUFFIXES "include" "external" - DOC "Path to cjson library header files" - ${_no_default_path} ) - -# find out the size of a pointer. this is required to only search for -# libraries in the directories relevant for the architecture -if (CMAKE_SIZEOF_VOID_P) - math (EXPR _BITS "8 * ${CMAKE_SIZEOF_VOID_P}") -endif (CMAKE_SIZEOF_VOID_P) - -string(REGEX REPLACE "${PROJECT_SOURCE_DIR}/?(.*)" "\\1" BUILD_DIR_SUFFIX "${PROJECT_BINARY_DIR}") - -find_library (CJSON_LIBRARY - NAMES "cjson" - HINTS "${CJSON_ROOT}" - PATHS "${PROJECT_BINARY_DIR}/../opm-parser" - "${PROJECT_BINARY_DIR}/../opm-parser${BUILD_DIR_SUFFIX}" - "${PROJECT_BINARY_DIR}/../../opm-parser/${BUILD_DIR_SUFFIX}" - PATH_SUFFIXES "lib" "lib${_BITS}" "lib/${CMAKE_LIBRARY_ARCHITECTURE}" - "opm/json" - DOC "Path to cjson library archive/shared object files" - ${_no_default_path} ) - -# setup list of all required libraries to link with cjson -set (CJSON_INCLUDE_DIRS ${CJSON_INCLUDE_DIR}) -set (CJSON_LIBRARIES ${CJSON_LIBRARY}) - -# math library (should exist on all unices; automatically linked on Windows) -if (UNIX) - find_library (MATH_LIBRARY NAMES "m") - list (APPEND CJSON_LIBRARIES ${MATH_LIBRARY}) -endif (UNIX) - -# see if we can compile a minimum example -# CMake logical test doesn't handle lists (sic) -if (NOT (CJSON_INCLUDE_DIRS MATCHES "-NOTFOUND" OR CJSON_LIBRARIES MATCHES "-NOTFOUND")) - include (CMakePushCheckState) - include (CheckCSourceCompiles) - cmake_push_check_state () - set (CMAKE_REQUIRED_INCLUDES ${CJSON_INCLUDE_DIRS}) - set (CMAKE_REQUIRED_LIBRARIES ${CJSON_LIBRARIES}) - - check_c_source_compiles ( -"#include -#include -int main (void) { - cJSON root; - return 0; -}" HAVE_CJSON) - cmake_pop_check_state () -else () - # clear the cache so the find probe is attempted again if files becomes - # available (only upon a unsuccessful *compile* should we disable further - # probing) - set (HAVE_CJSON) - unset (HAVE_CJSON CACHE) -endif () - -# if the test program didn't compile, but was required to do so, bail -# out now and display an error; otherwise limp on -set (CJSON_FIND_REQUIRED ${cjson_FIND_REQUIRED}) -set (CJSON_FIND_QUIETLY ${cjson_FIND_QUIETLY}) -find_package_handle_standard_args (CJSON - DEFAULT_MSG - CJSON_INCLUDE_DIRS CJSON_LIBRARIES HAVE_CJSON - ) -set (cjson_FOUND ${CJSON_FOUND}) diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/Finddune-alugrid.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Modules/Finddune-alugrid.cmake deleted file mode 100644 index 99927bf271..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/Finddune-alugrid.cmake +++ /dev/null @@ -1,85 +0,0 @@ -# - Find DUNE ALUgrid library -# -# Defines the following variables: -# dune-alugrid_INCLUDE_DIRS Directory of header files -# dune-alugrid_LIBRARIES Directory of shared object files -# dune-alugrid_DEFINITIONS Defines that must be set to compile -# dune-alugrid_CONFIG_VARS List of defines that should be in config.h -# HAVE_DUNE_ALUGRID Binary value to use in config.h - -# Copyright (C) 2013 Uni Research AS -# This code is licensed under The GNU General Public License v3.0 - -include (OpmPackage) -# find dune-alugrid when build with autotools (deprecated in dune 2.4 and removed after dune 3.0 -find_opm_package ( - # module name - "dune-alugrid" - - # dependencies - # TODO: we should probe for all the HAVE_* values listed below; - # however, we don't actually use them in our implementation, so - # we just include them to forward here in case anyone else does - "dune-grid REQUIRED; - ZLIB; - ZOLTAN; - METIS - " - # header to search for - "dune/alugrid/grid.hh" - - # library to search for - "dunealugrid;alugrid_parallel;alugrid_serial" - - # defines to be added to compilations - "" - - # test program -"#include -int main (void) { - return 0; -} -" - # config variables - "HAVE_DUNE_ALUGRID - ") - -# find dune-alugrid when build with cmake -find_opm_package ( - # module name - "dune-alugrid" - - # dependencies - # TODO: we should probe for all the HAVE_* values listed below; - # however, we don't actually use them in our implementation, so - # we just include them to forward here in case anyone else does - "CXX11Features REQUIRED; - dune-grid REQUIRED; - ZLIB; - ZOLTAN; - METIS - " - # header to search for - "dune/alugrid/grid.hh" - - # library to search for - "dunealugrid" - - # defines to be added to compilations - "" - - # test program -"#include -int main (void) { - return 0; -} -" - # config variables - "HAVE_DUNE_ALUGRID - ") - -#debug_find_vars ("dune-grid") - -# make version number available in config.h -include (UseDuneVer) -find_dune_version ("dune" "alugrid") diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/Finddune-common.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Modules/Finddune-common.cmake deleted file mode 100644 index ce275490eb..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/Finddune-common.cmake +++ /dev/null @@ -1,82 +0,0 @@ -# - Find DUNE common library -# -# Defines the following variables: -# dune-common_INCLUDE_DIRS Directory of header files -# dune-common_LIBRARIES Directory of shared object files -# dune-common_DEFINITIONS Defines that must be set to compile -# dune-common_CONFIG_VARS List of defines that should be in config.h -# HAVE_DUNE_COMMON Binary value to use in config.h - -# Copyright (C) 2012 Uni Research AS -# This code is licensed under The GNU General Public License v3.0 - -include (OpmPackage) -find_opm_package ( - # module name - "dune-common" - - # dependencies - "BLAS REQUIRED; - LAPACK REQUIRED; - CxaDemangle; - MPI - " - # header to search for - "dune/common/fvector.hh" - - # library to search for - "dunecommon" - - # defines to be added to compilations - "DUNE_COMMON_FIELDVECTOR_SIZE_IS_METHOD=1" - - # test program -"#include -#include -int main (void) { - Dune::FieldVector v; - Dune::FieldMatrix m; - m[0][0] = 1.0; - v[0] = 1.0; - Dune::FieldVector w = m*v; - return 0; -} -" - # config variables - "HAS_ATTRIBUTE_UNUSED; - HAS_ATTRIBUTE_DEPRECATED; - HAS_ATTRIBUTE_DEPRECATED_MSG; - HAVE_ARRAY; - HAVE_BOOST_MAKE_SHARED_HPP; - HAVE_BOOST_SHARED_PTR_HPP; - HAVE_DUNE_BOOST; - HAVE_GMP; - HAVE_MAKE_SHARED; - HAVE_MPI; - HAVE_NULLPTR; - HAVE_STATIC_ASSERT; - HAVE_SHARED_PTR; - MPI_2; - SHARED_PTR_HEADER; - SHARED_PTR_NAMESPACE; - HAVE_TYPE_TRAITS; - HAVE_TR1_TUPLE; - HAVE_TUPLE; - HAVE_CXA_DEMANGLE - ") -#debug_find_vars ("dune-common") - -if(MPI_C_FOUND) - # check for MPI version 2 - include(CMakePushCheckState) - include(CheckFunctionExists) - cmake_push_check_state() - set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES};${MPI_C_LIBRARIES}) - set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES};${MPI_C_INCLUDES}) - check_function_exists(MPI_Finalized MPI_2) - cmake_pop_check_state() -endif(MPI_C_FOUND) - -# make version number available in config.h -include (UseDuneVer) -find_dune_version ("dune" "common") diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/Finddune-fem.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Modules/Finddune-fem.cmake deleted file mode 100644 index 35f8f7cd66..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/Finddune-fem.cmake +++ /dev/null @@ -1,56 +0,0 @@ -# - Find DUNE Fem library -# -# Defines the following variables: -# dune-alugrid_INCLUDE_DIRS Directory of header files -# dune-alugrid_LIBRARIES Directory of shared object files -# dune-alugrid_DEFINITIONS Defines that must be set to compile -# dune-alugrid_CONFIG_VARS List of defines that should be in config.h -# HAVE_DUNE_FEM Binary value to use in config.h - -# Copyright (C) 2015 IRIS AS -# This code is licensed under The GNU General Public License v3.0 - -include (OpmPackage) -find_opm_package ( - # module name - "dune-fem" - - # dependencies - # TODO: we should probe for all the HAVE_* values listed below; - # however, we don't actually use them in our implementation, so - # we just include them to forward here in case anyone else does - "dune-common REQUIRED; - dune-grid REQUIRED; - dune-alugrid; - ZLIB; - ZOLTAN; - METIS - " - # header to search for - "dune/fem/space/shapefunctionset/legendre.hh" - - # library to search for - "dunefem" - - # defines to be added to compilations - "" - - # test program -"#include -int main (void) { - //Dune::Fem::LegendrePolynomials::weight(); - return 0; -} -" - # config variables - "HAVE_DUNE_FEM; - HAVE_METIS; - HAVE_ZLIB; - HAVE_ZOLTAN - ") - -#debug_find_vars ("dune-grid") - -# make version number available in config.h -include (UseDuneVer) -find_dune_version ("dune" "fem") diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/Finddune-geometry.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Modules/Finddune-geometry.cmake deleted file mode 100644 index ff6bd1fb66..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/Finddune-geometry.cmake +++ /dev/null @@ -1,50 +0,0 @@ -# - Find DUNE geometry library -# -# Defines the following variables: -# dune-geometry_INCLUDE_DIRS Directory of header files -# dune-geometry_LIBRARIES Directory of shared object files -# dune-geometry_DEFINITIONS Defines that must be set to compile -# dune-geometry_CONFIG_VARS List of defines that should be in config.h -# HAVE_DUNE_GEOMETRY Binary value to use in config.h - -# Copyright (C) 2013 Uni Research AS -# This code is licensed under The GNU General Public License v3.0 - -include (OpmPackage) -find_opm_package ( - # module name - "dune-geometry" - - # dependencies - # TODO: we should probe for all the HAVE_* values listed below; - # however, we don't actually use them in our implementation, so - # we just include them to forward here in case anyone else does - "dune-common REQUIRED - " - # header to search for - "dune/geometry/quadraturerules.hh" - - # library to search for - "dunegeometry" - - # defines to be added to compilations - "" - - # test program -"#include -int main (void) { - Dune::GeometryType gt; - gt.makeQuadrilateral(); - Dune::QuadratureRules::rule(gt, 2).size(); - return 0; -} -" - # config variables - "HAVE_ALGLIB - ") - -#debug_find_vars ("dune-geometry") - -# make version number available in config.h -include (UseDuneVer) -find_dune_version ("dune" "geometry") diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/Finddune-grid.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Modules/Finddune-grid.cmake deleted file mode 100644 index dc2a03390f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/Finddune-grid.cmake +++ /dev/null @@ -1,66 +0,0 @@ -# - Find DUNE grid library -# -# Defines the following variables: -# dune-grid_INCLUDE_DIRS Directory of header files -# dune-grid_LIBRARIES Directory of shared object files -# dune-grid_DEFINITIONS Defines that must be set to compile -# dune-grid_CONFIG_VARS List of defines that should be in config.h -# HAVE_DUNE_GRID Binary value to use in config.h - -# Copyright (C) 2013 Uni Research AS -# This code is licensed under The GNU General Public License v3.0 - -include (OpmPackage) - -set(DUNE_GRID_EXPERIMENTAL_GRID_EXTENSIONS 1) - -find_opm_package ( - # module name - "dune-grid" - - # dependencies - # TODO: we should probe for all the HAVE_* values listed below; - # however, we don't actually use them in our implementation, so - # we just include them to forward here in case anyone else does - "dune-common REQUIRED; - dune-geometry REQUIRED; - dune-uggrid; - MPI; - UG; - Alberta - " - # header to search for - "dune/grid/onedgrid.hh" - - # library to search for - "dunegrid" - - # defines to be added to compilations - "" - - # test program -"#include -int main (void) { - Dune::OneDGrid grid(1, 0., 1.); - return grid.size(0); -} -" - # config variables - "HAVE_MPI; - HAVE_UG; - HAVE_DUNE_FEM; - HAVE_GRIDTYPE; - HAVE_GRAPE; - HAVE_PSURFACE; - HAVE_AMIRAMESH; - HAVE_ALBERTA; - HAVE_STDINT_H; - DUNE_GRID_EXPERIMENTAL_GRID_EXTENSIONS; - DUNE_ALBERTA_VERSION - ") - -#debug_find_vars ("dune-grid") - -# make version number available in config.h -include (UseDuneVer) -find_dune_version ("dune" "grid") diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/Finddune-istl.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Modules/Finddune-istl.cmake deleted file mode 100644 index 8d9816f6bf..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/Finddune-istl.cmake +++ /dev/null @@ -1,69 +0,0 @@ -# - Find DUNE ISTL library -# -# Defines the following variables: -# dune-istl_INCLUDE_DIRS Directory of header files -# dune-istl_LIBRARIES Directory of shared object files -# dune-istl_DEFINITIONS Defines that must be set to compile -# dune-istl_CONFIG_VARS List of defines that should be in config.h -# HAVE_DUNE_ISTL Binary value to use in config.h - -# Copyright (C) 2012 Uni Research AS -# This code is licensed under The GNU General Public License v3.0 - -include (OpmPackage) -find_opm_package ( - # module name - "dune-istl" - - # required dependencies - "dune-common REQUIRED; - ParMETIS; - SuperLU; - SuiteSparse COMPONENTS umfpack - " - # header to search for - "dune/istl/bcrsmatrix.hh" - - # library to search for - "" - - # defines to be added to compilations - "" - - # test program -"#include -#include -#include - -int main (void) { - typedef Dune::BCRSMatrix > Matrix; - Matrix matrix( 3, 3, Matrix::random ); - for (int i = 0; i < 3; ++i) matrix.setrowsize(i, 2); - matrix.endrowsizes(); - return 0; -} -" - # config variables - "HAVE_BOOST_FUSION; - HAVE_MEM_USAGE_T_EXPANSIONS; - HAVE_PARDISO; - HAVE_BOOST; - HAVE_MPI; - HAVE_PARMETIS; - HAVE_SUPERLU; - HAVE_UMFPACK; - HAVE_SUITESPARSE_UMFPACK; - SUPERLU_INT_TYPE; - HAVE_SLU_CDEFS_H; - HAVE_SLU_DDEFS_H; - HAVE_SLU_SDEFS_H; - HAVE_SLU_ZDEFS_H; - SUPERLU_MIN_VERSION_4_3; - SUPERLU_MIN_VERSION_5; - SUPERLU_POST_2005_VERSION - ") -#debug_find_vars ("dune-istl") - -# make version number available in config.h -include (UseDuneVer) -find_dune_version ("dune" "istl") diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/Finddune-localfunctions.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Modules/Finddune-localfunctions.cmake deleted file mode 100644 index 38bcf805e7..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/Finddune-localfunctions.cmake +++ /dev/null @@ -1,42 +0,0 @@ -# - Find DUNE localfunctions library -# -# Defines the following variables: -# dune-localfunctions_INCLUDE_DIRS Directory of header files -# dune-localfunctions_LIBRARIES Directory of shared object files -# dune-localfunctions_DEFINITIONS Defines that must be set to compile -# dune-localfunctions_CONFIG_VARS List of defines that should be in config.h -# HAVE_DUNE_LOCALFUNCTIONS Binary value to use in config.h - -# Copyright (C) 2012 Uni Research AS -# This code is licensed under The GNU General Public License v3.0 - -include (OpmPackage) -find_opm_package ( - # module name - "dune-localfunctions" - - # required dependencies - "dune-common REQUIRED" - # header to search for - "dune/localfunctions/common/localbasis.hh" - - # library to search for - "" - - # defines to be added to compilations - "" - - # test program -"#include - -int main (void) { - return 0; -} -" - # config variables - "") -#debug_find_vars ("dune-localfunctions") - -# make version number available in config.h -include (UseDuneVer) -find_dune_version ("dune" "localfunctions") diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/Finddune-uggrid.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Modules/Finddune-uggrid.cmake deleted file mode 100644 index e758444c71..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/Finddune-uggrid.cmake +++ /dev/null @@ -1,33 +0,0 @@ -include (OpmPackage) - -find_opm_package ( - # module name - "dune-uggrid" - - # dependencies - # TODO: we should probe for all the HAVE_* values listed below; - # however, we don't actually use them in our implementation, so - "dune-common REQUIRED - " - # header to search for - "" - - # library to search for - "duneuggrid" - - # defines to be added to compilations - "" - - # test program - "" - # config variable - "") - -#debug_find_vars ("dune-uggrid") - -# make version number available in config.h -include (UseDuneVer) -find_dune_version ("dune" "uggrid") - -# deactivate search for UG -set(UG_FOUND ${dune-uggrid_FOUND}) diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/Findlibrt.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Modules/Findlibrt.cmake deleted file mode 100644 index 6d608788c5..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/Findlibrt.cmake +++ /dev/null @@ -1,51 +0,0 @@ -# Module that makes the clock_gettime() function available -# -# Sets the following variables: -# HAVE_LIBRT -# LIBRT_LIBRARIES -# -# perform tests -include(CheckCSourceCompiles) - -# first check if we need to add anything at all to be able to use -# clock_gettime() -CHECK_CXX_SOURCE_COMPILES(" -#include - -int main() -{ - timespec time1; - clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &time1); -}; -" HAVE_LIBRT) -cmake_pop_check_state() - -if (HAVE_LIBRT) - # if this worked, we're already happy - set(LIBRT_LIBRARIES "") -else() - # if not, let's try the same program with linking to librt (required - # on some systems) - cmake_push_check_state() - list(APPEND CMAKE_REQUIRED_LIBRARIES "rt") - CHECK_CXX_SOURCE_COMPILES(" -#include - -int main() -{ - timespec time1; - clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &time1); -}; -" HAVE_LIBRT2) - cmake_pop_check_state() - set(HAVE_LIBRT "${HAVE_LIBRT2}") - if (HAVE_LIBRT) - set(LIBRT_LIBRARIES "rt") - endif() -endif() - -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(LibRT - DEFAULT_MSG - HAVE_LIBRT - ) diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/Findopm-flowdiagnostics.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Modules/Findopm-flowdiagnostics.cmake deleted file mode 100644 index 76716ff90b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/Findopm-flowdiagnostics.cmake +++ /dev/null @@ -1,48 +0,0 @@ -# - Find OPM Flow Diagnostics Library -# -# Defines the following variables: -# opm-flowdiagnostics_INCLUDE_DIRS Directory of header files -# opm-flowdiagnostics_LIBRARIES Directory of shared object files -# opm-flowdiagnostics_DEFINITIONS Defines that must be set to compile -# opm-flowdiagnostics_CONFIG_VARS List of defines that should be in config.h -# HAVE_OPM_FLOWDIAGNOSTICS Binary value to use in config.h - -# Copyright (C) 2012 Uni Research AS -# This code is licensed under The GNU General Public License v3.0 - -# use the generic find routine -include (opm-flowdiagnostics-prereqs) - -include (OpmPackage) - -find_opm_package ( - # module name - "opm-flowdiagnostics" - - # dependencies - "${opm-flowdiagnostics_DEPS}" - - # header to search for - "opm/flowdiagnostics/Toolbox.hpp" - - # library to search for - "opmflowdiagnostics" - - # defines to be added to compilations - "" - - # test program -"#include - -#include - -int main() -{ - using FDT = Opm::FlowDiagnostics::Toolbox; - - const auto pv = std::vector(10, 0.3); -} -" - # config variables - "${opm-flowdiagnostics_CONFIG_VAR}" - ) diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/Findopm-tests.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Modules/Findopm-tests.cmake deleted file mode 100644 index 91ea97dc67..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/Findopm-tests.cmake +++ /dev/null @@ -1,27 +0,0 @@ -# This module searches for the opm-tests repository. Since opm-tests -# has no libraries or header files the find implementation is quite -# naive. -# -# If the opm-tests repository is found, the following variables are set: -# -# HAVE_OPM_TESTS -# OPM_TESTS_ROOT - -if (OPM_TESTS_ROOT) - set( _opm_tests_root ${OPM_TESTS_ROOT}) -else() - set( _opm_tests_root "${PROJECT_SOURCE_DIR}/../opm-tests") -endif() - - -if (EXISTS "${_opm_tests_root}/norne/NORNE_ATW2013.DATA") - set( HAVE_OPM_DATA True ) - set( HAVE_OPM_TESTS True ) - set( OPM_TESTS_ROOT ${_opm_tests_root} ) - set( OPM_DATA_ROOT ${_opm_tests_root} ) - message(STATUS "Setting OPM_TESTS_ROOT: ${OPM_TESTS_ROOT}") -else() - set( HAVE_OPM_TESTS False ) - set( HAVE_OPM_DATA False ) - message(WARNING "opm-tests not found - integration tests using opm-tests will be skipped.") -endif() diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/Findopm-upscaling.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Modules/Findopm-upscaling.cmake deleted file mode 100644 index c802d8fc68..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/Findopm-upscaling.cmake +++ /dev/null @@ -1,41 +0,0 @@ -# - Find OPM upscaling grid library -# -# Defines the following variables: -# opm-upscaling_INCLUDE_DIRS Directory of header files -# opm-upscaling_LIBRARIES Directory of shared object files -# opm-upscaling_DEFINITIONS Defines that must be set to compile -# opm-upscaling_CONFIG_VARS List of defines that should be in config.h -# HAVE_OPM_UPSCALING Binary value to use in config.h - -# Copyright (C) 2013 Uni Research AS -# This code is licensed under The GNU General Public License v3.0 - -include (opm-upscaling-prereqs) -include (OpmPackage) -find_opm_package ( - # module name - "opm-upscaling" - - # dependencies - "${opm-upscaling_DEPS}" - - # header to search for - "opm/upscaling/SinglePhaseUpscaler.hpp" - - # library to search for - "opmupscaling" - - # defines to be added to compilations - "" - - # test program -"#include -int main (void) { - return 0; -} -" - # config variables - "${opm-upscaling_CONFIG_VAR}" - ) - -#debug_find_vars ("opm-upscaling") diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/Findopm-verteq.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Modules/Findopm-verteq.cmake deleted file mode 100644 index 5e11fcc3cd..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/Findopm-verteq.cmake +++ /dev/null @@ -1,41 +0,0 @@ -# - Find OPM vertical equilibrium library -# -# Defines the following variables: -# opm-verteq_INCLUDE_DIRS Directory of header files -# opm-verteq_LIBRARIES Directory of shared object files -# opm-verteq_DEFINITIONS Defines that must be set to compile -# opm-verteq_CONFIG_VARS List of defines that should be in config.h -# HAVE_OPM_VERTEQ Binary value to use in config.h - -# Copyright (C) 2013 Uni Research AS -# This code is licensed under The GNU General Public License v3.0 - -# use the generic find routine -include (opm-verteq-prereqs) -include (OpmPackage) -find_opm_package ( - # module name - "opm-verteq" - - # dependencies - "${opm-verteq_DEPS}" - - # header to search for - "opm/verteq/verteq.hpp" - - # library to search for - "opmverteq" - - # defines to be added to compilations - "" - - # test program -"#include -int main (void) { - return 0; -} -" - # config variables - "") -include (UseDynamicBoost) -#debug_find_vars ("opm-verteq") diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/LibtoolArchives.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Modules/LibtoolArchives.cmake deleted file mode 100644 index c29e77c3db..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/LibtoolArchives.cmake +++ /dev/null @@ -1,169 +0,0 @@ -# translate a list of libraries into a command-line that can be passed to the -# compiler/linker. first parameter is the name of the variable that will -# receive this list, the rest is considered the list of libraries -function (linker_cmdline what INTO outvar FROM) - if (NOT (UNIX OR MSYS OR MINGW)) - return () - endif (NOT (UNIX OR MSYS OR MINGW)) - - # if we are going to put these in regexps, we must escape period - string (REPLACE "." "\\." esc_dl_pref "${CMAKE_SHARED_LIBRARY_PREFIX}") - string (REPLACE "." "\\." esc_dl_suff "${CMAKE_SHARED_LIBRARY_SUFFIX}") - string (REPLACE "." "\\." esc_ar_pref "${CMAKE_STATIC_LIBRARY_PREFIX}") - string (REPLACE "." "\\." esc_ar_suff "${CMAKE_STATIC_LIBRARY_PREFIX}") - - # CMake loves absolute paths, whereas libtool won't have any of it! - # (you get an error message about argument not parsed). translate each - # of the libraries into a linker option - set (deplib_list "") - foreach (deplib IN LISTS ARGN) - # starts with a hyphen already? then just add it - string (SUBSTRING ${deplib} 0 1 dash) - if (${dash} STREQUAL "-") - list (APPEND deplib_list ${deplib}) - else (${dash} STREQUAL "-") - # otherwise, parse the name into a directory and a name - get_filename_component (deplib_dir ${deplib} PATH) - get_filename_component (deplib_orig ${deplib} NAME) - string (REGEX REPLACE - "^${esc_dl_pref}(.*)${esc_dl_suff}$" - "\\1" - deplib_name - ${deplib_orig} - ) - string (REGEX REPLACE - "^${esc_ar_pref}(.*)${esc_ar_suff}$" - "\\1" - deplib_name - ${deplib_name} - ) - # directory and name each on their own; this is somewhat - # unsatisfactory because it may be that a system dir is specified - # by an earlier directory and you start picking up libraries from - # there instead of the "closest" path here. also, the soversion - # is more or less lost. remove system default path, to lessen the - # chance that we pick the wrong library - if (NOT ((deplib_dir STREQUAL "/usr/lib") OR - (deplib_dir STREQUAL "/usr/${CMAKE_INSTALL_LIBDIR}"))) - list (APPEND deplib_list "-L${deplib_dir}") - endif (NOT ((deplib_dir STREQUAL "/usr/lib") OR - (deplib_dir STREQUAL "/usr/${CMAKE_INSTALL_LIBDIR}"))) - # if there was no translation of the name, the library is named - # unconventionally (.so.3gf, I'm looking at you), so pass this - # name unmodified to the linker switch - if (deplib_orig STREQUAL deplib_name) - list (APPEND deplib_list "-l:${deplib_orig}") - else (deplib_orig STREQUAL deplib_name) - list (APPEND deplib_list "-l${deplib_name}") - endif (deplib_orig STREQUAL deplib_name) - endif (${dash} STREQUAL "-") - endforeach (deplib) - # caller determines whether we want it returned as a list or a string - if ("${what}" STREQUAL "LIST") - set (${outvar} ${deplib_list}) - else ("${what}" STREQUAL "LIST") - set (${outvar} "${deplib_list}") - string (REPLACE ";" " " ${outvar} "${${outvar}}") - endif ("${what}" STREQUAL "LIST") - set (${outvar} "${${outvar}}" PARENT_SCOPE) -endfunction (linker_cmdline what INTO outvar FROM) - -function (configure_la name target) - if (NOT (UNIX OR MSYS OR MINGW)) - return () - endif (NOT (UNIX OR MSYS OR MINGW)) - - # these generic variables are initialized from the project info - set (current "${${name}_VERSION_MAJOR}") - set (age "${${name}_VERSION_MINOR}") - set (inherited_linker_flags "${${name}_LINKER_FLAGS}") - set (dependency_libs "${${name}_LIBRARIES}") - - # translate list of libraries to command line - linker_cmdline (LIST INTO dependency_libs FROM ${dependency_libs}) - - # convert from CMake list (i.e. semi-colon separated) - string (REPLACE ";" " " inherited_linker_flags "${inherited_linker_flags}") - string (REPLACE ";" " " dependency_libs "${dependency_libs}") - - # this is the preferred installation path - set (libdir "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}") - - # ${name}_LIBRARY_TYPE is either SHARED or STATIC - if (${name}_LIBRARY_TYPE STREQUAL "SHARED") - set (libprefix "${CMAKE_SHARED_LIBRARY_PREFIX}") - set (libsuffix "${CMAKE_SHARED_LIBRARY_SUFFIX}") - set (libname "${CMAKE_SHARED_LIBRARY_PREFIX}${target}${CMAKE_SHARED_LIBRARY_SUFFIX}") - # only Unix has soversion in library names - if (UNIX) - set (dlname "${libname}.${current}") - set (library_names "${libname}.${current}.${age} ${libname}.${current} ${libname}") - else (UNIX) - set (dlname "${libname}") - set (library_names "${libname}") - endif (UNIX) - set (old_library "") - else (${name}_LIBRARY_TYPE STREQUAL "SHARED") - set (dlname "") - set (library_names "") - set (old_library "${CMAKE_STATIC_LIBRARY_PREFIX}${target}${CMAKE_STATIC_LIBRARY_SUFFIX}") - endif (${name}_LIBRARY_TYPE STREQUAL "SHARED") - - # get the version of libtool installed on the system; this is - # necessary because libtool checks that the file contains its own - # signature(!) - if (NOT libtool_MAIN) - find_file ( - libtool_MAIN - ltmain.sh - PATHS /usr - PATH_SUFFIXES share/libtool/config/ - DOC "Location of libtool" - ) - mark_as_advanced (libtool_MAIN) - # notify the user if it not found after we explicitly searched - if (NOT libtool_MAIN) - message (STATUS "Not generating libtool archive (.la) since libtool was not found") - endif (NOT libtool_MAIN) - endif (NOT libtool_MAIN) - if (libtool_MAIN) - file (STRINGS - ${libtool_MAIN} - ltversion_STRING - REGEX "^VERSION=\".*\"" - ) - endif (libtool_MAIN) - if (ltversion_STRING) - string (REGEX REPLACE - "^VERSION=\"?(.*)\"?" - "\\1" - ltversion - ${ltversion_STRING} - ) - endif (ltversion_STRING) - - # assume that we are in cmake/Modules, and that the template have been - # put in cmake/Templates. we cannot use CMAKE_CURRENT_LIST_DIR because - # this is in a function, and we cannot know who's calling us - set (templ_dir "${OPM_MACROS_ROOT}/cmake/Templates") - - - # only write an .la if libtool is found; otherwise we have no use - # for it. - if (ltversion) - set (la_file "lib${target}.la") - message (STATUS "Writing libtool archive for ${target}") - configure_file ( - ${templ_dir}/la.in - ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}/${la_file} - @ONLY@ - ) - else (ltversion) - set (la_file "") - endif (ltversion) - - # return this variable to the caller - if (ARGV2) - set (${ARGV2} "${la_file}" PARENT_SCOPE) - endif (ARGV2) -endfunction (configure_la target) diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmAliases.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmAliases.cmake deleted file mode 100644 index 67c177c5e1..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmAliases.cmake +++ /dev/null @@ -1,27 +0,0 @@ -# - Alias probed variables for compatibility with DUNE buildsystem -# -# DUNE build system sets some variables which have different names -# in the CMake modules we are using; this module set those variable -# so they can be exported to config.h visible to DUNE headers - -function (set_aliases) - # hardcoded list of "dune-var opm-var" pairs, where the components - # are separated by space - set (aliases - "HAVE_UMFPACK HAVE_SUITESPARSE_UMFPACK_H" - "HAVE_SUITESPARSE_UMFPACK HAVE_SUITESPARSE_UMFPACK_H" - "HAVE_DUNE_BOOST HAVE_BOOST" - ) - foreach (alias IN LISTS aliases) - # convert entry "X Y" into a list "X;Y", then pick apart - string (REGEX REPLACE "\ +" ";" tuple "${alias}") - list (GET tuple 0 var) - list (GET tuple 1 name) - - # write this alias to cache - set (${var} ${${name}} PARENT_SCOPE) - endforeach (alias) -endfunction (set_aliases) - -# always call this when the module is imported -set_aliases () diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmBashCompletion.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmBashCompletion.cmake deleted file mode 100644 index e1b86e2e60..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmBashCompletion.cmake +++ /dev/null @@ -1,6 +0,0 @@ -# Installs bash tab completion for a product -macro(opm_add_bash_completion binary) - set(PRODUCT ${binary}) - configure_file(${OPM_MACROS_ROOT}/etc/opm_bash_completion.sh.in ${binary}_bash_completion.sh @ONLY) - install(FILES ${PROJECT_BINARY_DIR}/${binary}_bash_completion.sh DESTINATION ${CMAKE_INSTALL_SYSCONFDIR}/bash_completion.d) -endmacro() diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmCompile.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmCompile.cmake deleted file mode 100644 index 821c936e64..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmCompile.cmake +++ /dev/null @@ -1,97 +0,0 @@ -# - Compile main library target - -option (STRIP_DEBUGGING_SYMBOLS "use separate files for the executable code and the debugging symbols" OFF) - -macro (opm_compile opm) - # some CMake properties do not do list expansion - string (REPLACE ";" " " ${opm}_LINKER_FLAGS_STR "${${opm}_LINKER_FLAGS}") - - # name of the library should not contain dashes, as CMake will - # define a symbol with that name, and those cannot contain dashes - string (REPLACE "-" "" ${opm}_TARGET "${${opm}_NAME}") - - # all public header files are together with the source. prepend our own - # source path to the one of the dependencies so that our version of any - # ambigious paths are used. - - option(SILENCE_CROSSMODULE_WARNINGS "Disable warnings from cross-module includes" OFF) - if (SILENCE_CROSSMODULE_WARNINGS) - include_directories("${PROJECT_SOURCE_DIR}") - include_directories (SYSTEM ${${opm}_INCLUDE_DIRS}) - set (${opm}_INCLUDE_DIR "${PROJECT_SOURCE_DIR}") - set (${opm}_INCLUDE_DIRS ${${opm}_INCLUDE_DIR} ${${opm}_INCLUDE_DIRS}) - else() - set (${opm}_INCLUDE_DIR "${PROJECT_SOURCE_DIR}") - set (${opm}_INCLUDE_DIRS ${${opm}_INCLUDE_DIR} ${${opm}_INCLUDE_DIRS}) - include_directories (${${opm}_INCLUDE_DIRS}) - endif() - - - # create this library, if there are any compilation units - link_directories (${${opm}_LIBRARY_DIRS}) - add_definitions (${${opm}_DEFINITIONS}) - set (${opm}_VERSION "${${opm}_VERSION_MAJOR}.${${opm}_VERSION_MINOR}") - if (${opm}_SOURCES) - add_library (${${opm}_TARGET} ${${opm}_LIBRARY_TYPE} ${${opm}_SOURCES}) - set_target_properties (${${opm}_TARGET} PROPERTIES - SOVERSION ${${opm}_VERSION_MAJOR} - VERSION ${${opm}_VERSION} - LINK_FLAGS "${${opm}_LINKER_FLAGS_STR}" - POSITION_INDEPENDENT_CODE TRUE - ) - if (${${opm}_LIBRARY_TYPE} STREQUAL "SHARED") - # libs that will be linked with the main lib - string(REGEX REPLACE "([;^])[^;]+\\.a[;$]" "\\1" _public_libs - "${${opm}_LIBRARIES}") - # libs that will not actually linked to the library but - # transitively linked to binaries that link to the main library - string(REGEX REPLACE "([^;]+\\.[^a][a-zA-Z0-9]*|-[a-z]*)[;$]" "" _interface_libs - "${${opm}_LIBRARIES}") - else() - # Use all libs for real and transitive linking - set(_public_libs ${${opm}_LIBRARIES}) - unset(_interface) - endif() - target_link_libraries (${${opm}_TARGET} PUBLIC ${_public_libs} - INTERFACE ${_interface_libs}) - - if (STRIP_DEBUGGING_SYMBOLS) - # queue this executable to be stripped - strip_debug_symbols (${${opm}_TARGET} ${opm}_DEBUG) - endif() - add_static_analysis_tests(${opm}_SOURCES ${opm}_INCLUDE_DIRS) - else (${opm}_SOURCES) - # unset this variable to signal that no library is generated - set (${opm}_TARGET) - endif (${opm}_SOURCES) - - # pre-compile common headers; this is setup *after* the library to pick - # up extra options set there - if (PRECOMPILE_HEADERS) - # if we have no library, then use the static setting as this will - # build the same way as any test programs (no -fPIC option) - if (${opm}_TARGET) - get_target_property (_type ${${opm}_TARGET} TYPE) - else () - set (_type "STATIC") - endif () - precompile_header (CXX ${_type} - HEADER "${${opm}_PRECOMP_CXX_HEADER}" - TARGET ${opm}_CXX_pch - FLAGS ${opm}_PRECOMP_CXX_FLAGS - ) - # must set property on source files instead of entire target, because - # it only applies to C++ modules (and cannot be used for C) - set_source_files_properties (${${opm}_CXX_SOURCES} PROPERTIES - OBJECT_DEPENDS "${${opm}_CXX_pch}" - COMPILE_FLAGS "${${opm}_PRECOMP_CXX_FLAGS}" - ) - message (STATUS "Precompiled headers: ${${opm}_CXX_pch}") - endif (PRECOMPILE_HEADERS) - - # we need to know the name of the library which is generated - if (${opm}_TARGET) - get_target_property (${opm}_LIBRARY ${${opm}_TARGET} LOCATION) - endif (${opm}_TARGET) - -endmacro (opm_compile opm) diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmCompilerChecks.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmCompilerChecks.cmake deleted file mode 100644 index 60586b2136..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmCompilerChecks.cmake +++ /dev/null @@ -1,104 +0,0 @@ -# Check for various compiler extensions - -# HAVE_ATTRIBUTE_ALWAYS_INLINE True if attribute always inline is supported -# HAS_ATTRIBUTE_UNUSED True if attribute unused is supported -# HAS_ATTRIBUTE_DEPRECATED True if attribute deprecated is supported -# HAS_ATTRIBUTE_DEPRECATED_MSG True if attribute deprecated("msg") is supported - -include(CheckCXXSourceCompiles) - -# __attribute__((always_inline)) -CHECK_CXX_SOURCE_COMPILES(" - void __attribute__((always_inline)) foo(void) {} - int main(void) - { - foo(); - return 0; - }; -" HAVE_ATTRIBUTE_ALWAYS_INLINE -) - -# __attribute__((unused)) -CHECK_CXX_SOURCE_COMPILES(" - int main(void) - { - int __attribute__((unused)) foo; - return 0; - }; -" HAS_ATTRIBUTE_UNUSED -) - -# __attribute__((deprecated)) -CHECK_CXX_SOURCE_COMPILES(" -#define DEP __attribute__((deprecated)) - class bar - { - bar() DEP; - }; - - class peng { } DEP; - - template - class t_bar - { - t_bar() DEP; - }; - - template - class t_peng { - t_peng() {}; - } DEP; - - void foo() DEP; - - void foo() {}; - - int main(void) - { - return 0; - }; -" HAS_ATTRIBUTE_DEPRECATED -) - -# __attribute__((deprecated("msg"))) -CHECK_CXX_SOURCE_COMPILES(" -#define DEP __attribute__((deprecated(\"message\"))) - class bar { - bar() DEP; - }; - - class peng { } DEP; - - template - class t_bar - { - t_bar() DEP; - }; - - template - class t_peng - { - t_peng() {}; - } DEP; - - void foo() DEP; - - void foo() {}; - - int main(void) - { - return 0; - }; -" HAS_ATTRIBUTE_DEPRECATED_MSG -) - -if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") - if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 9.0) - list(APPEND ${project}_LIBRARIES stdc++fs) - endif() -endif() - -option(OPM_CLANG_WITH_STDC++FS "Using libstdc++ with clang and we want to link to stdc++fs" OFF) -if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND OPM_CLANG_WITH_STDC++FS) - list(APPEND ${project}_LIBRARIES stdc++fs) -endif() diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmDefaults.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmDefaults.cmake deleted file mode 100644 index 2d77287087..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmDefaults.cmake +++ /dev/null @@ -1,101 +0,0 @@ -# - Default settings for the build - -include (UseCompVer) -is_compiler_gcc_compatible () -include(TestCXXAcceptsFlag) - -macro (opm_defaults opm) - - message("Processing opm_defaults ${opm}") - # if we are installing a development version (default when checking out of - # VCS), then remember which directories were used when configuring. package - # distribution should disable this option. - option (USE_RUNPATH "Embed original dependency paths in installed library" ON) - if (USE_RUNPATH) - if (CXX_COMPAT_GCC) - check_cxx_accepts_flag ("-Wl,--enable-new-dtags" HAVE_RUNPATH) - if (HAVE_RUNPATH) - list (APPEND ${opm}_LINKER_FLAGS "-Wl,--enable-new-dtags") - endif (HAVE_RUNPATH) - endif () - # set this to avoid CMake stripping it off again - set (CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) - endif (USE_RUNPATH) - - # build release by default - if (NOT CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE) - set (CMAKE_BUILD_TYPE "Release") - endif (NOT CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE) - - # default to building a static library, but let user override - if (DEFINED BUILD_SHARED_LIBS) - if (BUILD_SHARED_LIBS) - set (${opm}_LIBRARY_TYPE SHARED) - else (BUILD_SHARED_LIBS) - set (${opm}_LIBRARY_TYPE STATIC) - endif (BUILD_SHARED_LIBS) - else (DEFINED BUILD_SHARED_LIBS) - set (${opm}_LIBRARY_TYPE STATIC) - endif (DEFINED BUILD_SHARED_LIBS) - - # precompile standard headers to speed up compilation - # unfortunately, this functionality is buggy and tends to segfault at - # least up to version 4.7.2, so it should be disabled by default there - set (_precomp_def OFF) - option (PRECOMPILE_HEADERS "Precompile common headers for speed." ${_precomp_def}) - mark_as_advanced (PRECOMPILE_HEADERS) - if (NOT PRECOMPILE_HEADERS) - message (STATUS "Precompiled headers: disabled") - endif(NOT PRECOMPILE_HEADERS) - - # Use of OpenMP is considered experimental - set (USE_OPENMP_DEFAULT ON) - - # if we are on a system where CMake 2.6 is the default (Hi RHEL 6!), - # the configuration files for Boost will trip up the library paths - # (look for /usr/lib64/lib64/ in the log) when used with FindBoost - # module bundled with CMake 2.8. this can be circumvented by turning - # off config mode probing if we have not explicitly specified a - # directory to look for it. for more details, see - # - if (NOT BOOST_ROOT) - set (Boost_NO_BOOST_CMAKE ON) - endif (NOT BOOST_ROOT) -endmacro (opm_defaults opm) - -# overwrite a cache entry's value, but keep docstring and type -# if not already in cache, then does nothing -function (update_cache name) - get_property (_help CACHE "${name}" PROPERTY HELPSTRING) - get_property (_type CACHE "${name}" PROPERTY TYPE) - if (NOT "${_type}" STREQUAL "") - #message ("Setting ${name} to \"${${name}}\" in cache.") - set ("${name}" "${${name}}" CACHE ${_type} "${_help}" FORCE) - endif () -endfunction (update_cache name) - -# put all compiler options currently set back into the cache, so that -# they can be queried from there (using ccmake for instance) -function (write_back_options) - # build type - update_cache (CMAKE_BUILD_TYPE) - - # compilers - set (languages C CXX Fortran) - foreach (language IN LISTS _languages) - if (CMAKE_${language}_COMPILER) - update_cache (CMAKE_${language}_COMPILER) - endif () - endforeach (language) - - # flags (notice use of IN LISTS to get the empty variant) - set (buildtypes "" "_DEBUG" "_RELEASE" "_MINSIZEREL" "_RELWITHDEBINFO") - set (processors "C" "CXX" "Fortran" "EXE_LINKER" "MODULE_LINKER" "SHARED_LINKER") - foreach (processor IN LISTS processors) - foreach (buildtype IN LISTS buildtypes) - if (CMAKE_${processor}_FLAGS${buildtype}) - update_cache (CMAKE_${processor}_FLAGS${buildtype}) - endif () - endforeach (buildtype) - endforeach (processor) -endfunction (write_back_options) diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmDistClean.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmDistClean.cmake deleted file mode 100644 index 78908370c6..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmDistClean.cmake +++ /dev/null @@ -1,89 +0,0 @@ -# - Cleanup configuration files -# -# Remove files generated by the configuration (not by the build); the -# purpose is to get back a clean directory with no build artifacts -# (some empty directories may be left behind, though) -# -# The following suffices are supported: -# _NAME Name of the project -# _STYLESHEET_COPIED Stylesheet that was copied for the documentation -# _LIBTOOL_ARCHIVE Libtool archive file generated for library -# _DEBUG Debug information extracted from library - -macro (opm_dist_clean opm) - # which generator have we been using - string (TOUPPER "${CMAKE_GENERATOR}" _gen) - if (_gen MATCHES "UNIX MAKEFILES") - set (_gen_is_makefiles TRUE) - set (_gen_is_ninja FALSE) - elseif (_gen MATCHES "NINJA") - set (_gen_is_makefiles FALSE) - set (_gen_is_ninja TRUE) - else () - set (_gen_is_makefiles FALSE) - set (_gen_is_ninja FALSE) - endif () - - set (DISTCLEAN_FILES - CMakeCache.txt - cmake_install.cmake - config.h - config.h.tmp - ${${opm}_NAME}-config.cmake - ${${opm}_NAME}-config-version.cmake - ${${opm}_NAME}-install.cmake - ${${opm}_NAME}.pc - ${${opm}_NAME}-install.pc - ${doxy_dir}/Doxyfile - ${doxy_dir}/Doxyfile.in - CTestTestfile.cmake - DartConfiguration.tcl - lib/${${opm}_LIBTOOL_ARCHIVE} - ${${opm}_DEBUG} - ${tests_DEBUG} - ${examples_DEBUG} - ${tutorial_DEBUG} - install_manifest.txt - ${${opm}_STYLESHEET_COPIED} - ${tests_INPUT_FILES} - project-version.h - project-version.tmp - ) - if (_gen_is_makefiles) - list (APPEND DISTCLEAN_FILES - Makefile) - endif () - if (_gen_is_ninja) - list (APPEND DISTCLEAN_FILES - build.ninja - rules.ninja - ) - endif () - - # only remove these files if they were actually copied - if (NOT PROJECT_SOURCE_DIR STREQUAL PROJECT_BINARY_DIR) - list (APPEND DISTCLEAN_FILES - dune.module - dunemod.tmp - ) - endif (NOT PROJECT_SOURCE_DIR STREQUAL PROJECT_BINARY_DIR) - # script to remove empty directories (can't believe this isn't included!) - set (rmdir "${OPM_MACROS_ROOT}/cmake/Scripts/RemoveEmptyDir.cmake") - add_custom_target (distclean - COMMAND ${CMAKE_COMMAND} --build ${PROJECT_BINARY_DIR} -- clean - COMMAND ${CMAKE_COMMAND} -E remove -f ${DISTCLEAN_FILES} - COMMAND ${CMAKE_COMMAND} -E remove_directory CMakeFiles/ - COMMAND ${CMAKE_COMMAND} -E remove_directory Testing/ - COMMAND ${CMAKE_COMMAND} -DDIR=${CMAKE_LIBRARY_OUTPUT_DIRECTORY} -P ${rmdir} - COMMAND ${CMAKE_COMMAND} -DDIR=${CMAKE_RUNTIME_OUTPUT_DIRECTORY} -P ${rmdir} - COMMAND ${CMAKE_COMMAND} -DDIR:LOCATION=${doxy_dir} -P ${rmdir} - COMMAND ${CMAKE_COMMAND} -DDIR:LOCATION=${tests_DIR} -P ${rmdir} -# cannot depend on clean because it is only defined in the master Makefile -# not in CMakeFiles/Makefile where this target will end up -# DEPENDS clean - WORKING_DIRECTORY ${PROJECT_BINARY_DIR} - COMMENT Removing CMake-generated files - VERBATIM - ) - -endmacro (opm_dist_clean opm) diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmDoc.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmDoc.cmake deleted file mode 100644 index 6739046043..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmDoc.cmake +++ /dev/null @@ -1,91 +0,0 @@ -# - Setup documentation -# -# Assumes that a Doxyfile template is located in the project root -# directory, and that all documentation is going to be generated -# into its own Documentation/ directory. It will also generate an -# installation target for the documentation (not built by default) -# -# Requires the following variables to be set: -# ${opm}_NAME Name of the project -# -# Output the following variables: -# ${opm}_STYLESHEET_COPIED Location of stylesheet to be removed in distclean - -macro (opm_doc opm doxy_dir) - # combine the template with local customization - file (READ ${OPM_MACROS_ROOT}/cmake/Templates/Doxyfile _doxy_templ) - string (REPLACE ";" "\\;" _doxy_templ "${_doxy_templ}") - if (EXISTS ${PROJECT_SOURCE_DIR}/${doxy_dir}/Doxylocal) - file (READ ${PROJECT_SOURCE_DIR}/${doxy_dir}/Doxylocal _doxy_local) - string (REPLACE ";" "\\;" _doxy_local "${_doxy_local}") - else (EXISTS ${PROJECT_SOURCE_DIR}/${doxy_dir}/Doxylocal) - set (_doxy_local) - endif (EXISTS ${PROJECT_SOURCE_DIR}/${doxy_dir}/Doxylocal) - file (MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/${doxy_dir}) - file (WRITE ${PROJECT_BINARY_DIR}/${doxy_dir}/Doxyfile.in ${_doxy_templ} ${_doxy_local}) - # set this generically named variable so even the custom file can be shared - set (src_DIR "${${opm}_DIR}") - - # copy the doxygen layout XML file to the build directorie's doxygen - # directory. if the source module ships with such a file it takes - # precedence over the one shipped with the build system. - if (EXISTS ${PROJECT_SOURCE_DIR}/${doxy_dir}/DoxygenLayout.xml) - file(COPY ${PROJECT_SOURCE_DIR}/${doxy_dir}/DoxygenLayout.xml DESTINATION ${PROJECT_BINARY_DIR}/${doxy_dir}) - else() - file(COPY ${OPM_MACROS_ROOT}/cmake/Templates/DoxygenLayout.xml DESTINATION ${PROJECT_BINARY_DIR}/${doxy_dir}) - endif() - - # replace variables in this combined file - configure_file ( - ${PROJECT_BINARY_DIR}/${doxy_dir}/Doxyfile.in - ${PROJECT_BINARY_DIR}/${doxy_dir}/Doxyfile - @ONLY - ) - find_package (Doxygen) - if (DOXYGEN_FOUND) - add_custom_target (doc - COMMAND ${DOXYGEN_EXECUTABLE} ${PROJECT_BINARY_DIR}/${doxy_dir}/Doxyfile - SOURCES ${PROJECT_BINARY_DIR}/${doxy_dir}/Doxyfile - WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/${doxy_dir} - COMMENT "Generating API documentation with Doxygen" - VERBATIM - ) - # distributions have various naming conventions; this enables the packager - # to direct where the install target should put the documentation. the names - # here are taken from GNUInstallDirs.cmake - set (CMAKE_INSTALL_DATAROOTDIR "share" CACHE STRING "Read-only arch.-indep. data root") - set (CMAKE_INSTALL_DOCDIR "${CMAKE_INSTALL_DATAROOTDIR}/doc${${opm}_VER_DIR}/${${opm}_NAME}" CACHE STRING "Documentation root") - set (_formats html) - foreach (format IN LISTS _formats) - string (TOUPPER ${format} FORMAT) - install ( - DIRECTORY ${PROJECT_BINARY_DIR}/${doxy_dir}/${format} - DESTINATION ${CMAKE_INSTALL_DOCDIR} - COMPONENT ${format} - OPTIONAL - ) - # target to install just HTML documentation - add_custom_target (install-${format} - COMMAND ${CMAKE_COMMAND} -DCOMPONENT=${format} -P cmake_install.cmake - COMMENT Installing ${FORMAT} documentation - VERBATIM - ) - # since the documentation is optional, it is not automatically built - add_dependencies (install-${format} doc) - endforeach (format) - endif (DOXYGEN_FOUND) - - # stylesheets must be specified with relative path in Doxyfile, or the - # full path (to the source directory!) will be put in the output HTML. - # thus, we'll need to copy the stylesheet to this path relative to where - # Doxygen will be run (in the output tree) - if ((NOT PROJECT_SOURCE_DIR STREQUAL PROJECT_BINARY_DIR) AND (EXISTS ${PROJECT_SOURCE_DIR}/${doxy_dir}/style.css)) - file (COPY ${PROJECT_SOURCE_DIR}/${doxy_dir}/style.css - DESTINATION ${PROJECT_BINARY_DIR}/${doxy_dir} - ) - set (${opm}_STYLESHEET_COPIED "${doxy_dir}/style.css") - else ((NOT PROJECT_SOURCE_DIR STREQUAL PROJECT_BINARY_DIR) AND (EXISTS ${PROJECT_SOURCE_DIR}/${doxy_dir}/style.css)) - set (${opm}_STYLESHEET_COPIED "") - endif ((NOT PROJECT_SOURCE_DIR STREQUAL PROJECT_BINARY_DIR) AND (EXISTS ${PROJECT_SOURCE_DIR}/${doxy_dir}/style.css)) - -endmacro (opm_doc opm) diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmFiles.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmFiles.cmake deleted file mode 100644 index 6b1d63193a..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmFiles.cmake +++ /dev/null @@ -1,106 +0,0 @@ -# - Identify source code - -macro (opm_out_dirs) - # put libraries in lib/ (no multi-arch support in build tree) - if(MAIN_SOURCE_FILES) - set (CMAKE_LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib") - set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib") - endif() - set (CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/bin") - set (CMAKE_Fortran_MODULE_DIRECTORY "${PROJECT_BINARY_DIR}/CMakeFiles") -endmacro (opm_out_dirs) - -# support for some of the variables that are used in Autotools -# template files -macro (opm_auto_dirs) - set (abs_top_builddir "${PROJECT_BINARY_DIR}") - set (abs_top_srcdir "${PROJECT_SOURCE_DIR}") -endmacro (opm_auto_dirs) - -macro (opm_sources opm) - # this is necessary to set so that we know where we are going to - # execute the test programs (and make datafiles available) - set (tests_DIR "tests") - - # how to retrieve the "fancy" name from the filename - set (tests_REGEXP - "^test_([^/]*)$" - "^([^/]*)_test$" - ) - - # these are the lists that must be defined in CMakeLists_files - # - MAIN_SOURCE_FILES - # - EXAMPLE_SOURCE_FILES - # - TEST_SOURCE_FILES - # - TEST_DATA_FILES - # - PUBLIC_HEADER_FILES - # - PROGRAM_SOURCE_FILES - # - ADDITIONAL_SOURCE_FILES - - # rename from "friendly" names to ones that fit the "almost-structural" - # scheme used in the .cmake modules, converting them to absolute file - # names in the process - foreach (_file IN LISTS MAIN_SOURCE_FILES) - list (APPEND ${opm}_SOURCES ${PROJECT_SOURCE_DIR}/${_file}) - # further classify into language if some other modules need to add props - if (_file MATCHES ".*\\.[cC][a-zA-Z]*$") - if (_file MATCHES ".*\\.c$") - list (APPEND ${opm}_C_SOURCES ${PROJECT_SOURCE_DIR}/${_file}) - else (_file MATCHES ".*\\.c$") - list (APPEND ${opm}_CXX_SOURCES ${PROJECT_SOURCE_DIR}/${_file}) - endif (_file MATCHES ".*\\.c$") - elseif (_file MATCHES ".*\\.[fF][a-zA-Z]*$") - list (APPEND ${opm}_Fortran_SOURCES ${PROJECT_SOURCE_DIR}/${_file}) - endif (_file MATCHES ".*\\.[cC][a-zA-Z]*$") - endforeach (_file) - foreach (_file IN LISTS PUBLIC_HEADER_FILES) - list (APPEND ${opm}_HEADERS ${PROJECT_SOURCE_DIR}/${_file}) - endforeach (_file) - foreach (_file IN LISTS TEST_SOURCE_FILES) - list (APPEND tests_SOURCES ${PROJECT_SOURCE_DIR}/${_file}) - endforeach (_file) - foreach (_file IN LISTS TEST_DATA_FILES) - list (APPEND tests_DATA ${PROJECT_SOURCE_DIR}/${_file}) - endforeach (_file) - foreach (_file IN LISTS EXAMPLE_SOURCE_FILES) - list (APPEND examples_SOURCES ${PROJECT_SOURCE_DIR}/${_file}) - endforeach (_file) - foreach (_file IN LISTS ADDITIONAL_SOURCE_FILES) - list (APPEND additionals_SOURCES ${PROJECT_SOURCE_DIR}/${_file}) - endforeach (_file) - foreach (_file IN LISTS PROGRAM_SOURCE_FILES) - list (APPEND examples_SOURCES_DIST ${PROJECT_SOURCE_DIR}/${_file}) - endforeach (_file) - foreach (_file IN LISTS ATTIC_FILES) - list (APPEND attic_SOURCES ${PROJECT_SOURCE_DIR}/${_file}) - endforeach (_file) - - # identify pre-compile header; if the project is called opm-foobar, - # then it should be in opm/foobar/opm-foobar-pch.hpp - string (REPLACE "-" "/" opm_NAME_AS_DIR ${${opm}_NAME}) - set (${opm}_PRECOMP_CXX_HEADER "${opm_NAME_AS_DIR}/${${opm}_NAME}-pch.hpp") - if (NOT EXISTS ${PROJECT_SOURCE_DIR}/${${opm}_PRECOMP_CXX_HEADER}) - set (${opm}_PRECOMP_CXX_HEADER "") - endif (NOT EXISTS ${PROJECT_SOURCE_DIR}/${${opm}_PRECOMP_CXX_HEADER}) -endmacro (opm_sources opm) - -# disable an entire directory from sources -macro (opm_disable_source opm) - foreach (_exp IN ITEMS ${ARGN}) - # regexp or directory? - if (IS_ABSOLUTE "${_exp}") - set (_prefix "") - else (IS_ABSOLUTE "${_exp}") - set (_prefix "${PROJECT_SOURCE_DIR}/") - endif (IS_ABSOLUTE "${_exp}") - if (IS_DIRECTORY "${_prefix}${_exp}") - set (_glob "/*") - else (IS_DIRECTORY "${_prefix}${_exp}") - set (_glob "") - endif (IS_DIRECTORY "${_prefix}${_exp}") - file (GLOB_RECURSE _disabled RELATIVE ${PROJECT_SOURCE_DIR} "${_prefix}${_exp}${_glob}") - foreach (_file IN ITEMS ${_disabled}) - list (REMOVE_ITEM ${opm}_SOURCES "${PROJECT_SOURCE_DIR}/${_file}") - endforeach (_file) - endforeach (_exp) -endmacro (opm_disable_source opm reldir) diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmFind.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmFind.cmake deleted file mode 100644 index 1cab56d56c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmFind.cmake +++ /dev/null @@ -1,215 +0,0 @@ -# - Generic inclusion of packages -# -# Synopsis: -# -# find_and_append_package (name args) -# -# where -# -# name Name of the package, e.g. Boost -# args Other arguments, e.g. COMPONENTS, REQUIRED, QUIET etc. -# -# This macro will append the list of standard variables found by the -# package to this project's standard variables -# -######################################################################## -# -# - Generic inclusion of a list of packages -# -# Synopsis: -# -# find_and_append_package_list (args) -# -# where -# -# args List of package strings. Each string must be quoted if -# it contains more than one word. -# -# Example: -# -# find_and_append_package_list ( -# "Boost COMPONENTS filesystem REQUIRED" -# SUPERLU -# ) - -include (Duplicates) -include (OpmSiblingSearch) - -# list of suffixes for all the project variables -set (_opm_proj_vars - SOURCES - LINKER_FLAGS - LIBRARIES - DEFINITIONS - INCLUDE_DIRS - LIBRARY_DIRS - CONFIG_VARS - CONFIG_IMPL_VARS - ) - -# ensure that they are at least the empty list after we're done -foreach (name IN LISTS _opm_proj_vars) - if (NOT DEFINED ${CMAKE_PROJECT_NAME}_${name}) - set (${CMAKE_PROJECT_NAME}_${name} "") - endif (NOT DEFINED ${CMAKE_PROJECT_NAME}_${name}) -endforeach (name) - - -# insert this boilerplate whenever we are going to find a new package -macro (find_and_append_package_to prefix name) - # special handling for Boost to avoid inadvertedly picking up system - # libraries when we want our own version. this is done here because - # having a custom Boost is common, but the logic to search only there - # does not follow any particular convention. - if (BOOST_ROOT AND NOT DEFINED Boost_NO_SYSTEM_PATHS) - set (Boost_NO_SYSTEM_PATHS TRUE) - endif (BOOST_ROOT AND NOT DEFINED Boost_NO_SYSTEM_PATHS) - - # if we have specified a directory, don't revert to searching the - # system default paths afterwards - string (TOUPPER "${name}" NAME) - string (REPLACE "-" "_" NAME "${NAME}") - - # only use suite if module-specific variable is not set. this allows - # us to override one dir in a suite - if (NOT (${name}_DIR OR ${name}_ROOT OR ${NAME}_ROOT)) - # module is part of a suite if it has name with the pattern xxx-yyy - if (("${name}" MATCHES "[^-]+-.+") OR ${name}_SUITE) - # allow to override if the module doesn't quite fit the convention - # e.g. dune-cornerpoint (since renamed to opm-grid) - if (NOT DEFINED ${name}_SUITE) - # extract suite name from module - string (REGEX REPLACE "([^-]+)-.+" "\\1" ${name}_SUITE "${name}") - endif (NOT DEFINED ${name}_SUITE) - # assume that each module has its own subdir directly under suite dir - string (TOUPPER "${${name}_SUITE}" ${name}_SUITE_UPPER) - if (DEFINED ${${name}_SUITE_UPPER}_ROOT) - set (${NAME}_ROOT ${${${name}_SUITE_UPPER}_ROOT}/${name}) - endif (DEFINED ${${name}_SUITE_UPPER}_ROOT) - endif (("${name}" MATCHES "[^-]+-.+") OR ${name}_SUITE) - endif (NOT (${name}_DIR OR ${name}_ROOT OR ${NAME}_ROOT)) - - # the documentation says that if *-config.cmake files are not found, - # find_package will revert to doing a full search, but that is not - # true, so unconditionally setting ${name}_DIR is not safe. however, - # if the directory given to us contains a config file, then copy the - # value over to this variable to switch to config mode (CMake will - # always use config mode if *_DIR is defined) - if (NOT DEFINED ${name}_DIR AND (DEFINED ${name}_ROOT OR DEFINED ${NAME}_ROOT)) - if (EXISTS ${${name}_ROOT}/${name}-config.cmake OR EXISTS ${${name}_ROOT}/${name}Config.cmake) - set (${name}_DIR "${${name}_ROOT}") - endif (EXISTS ${${name}_ROOT}/${name}-config.cmake OR EXISTS ${${name}_ROOT}/${name}Config.cmake) - if (EXISTS ${${NAME}_ROOT}/${name}-config.cmake OR EXISTS ${${NAME}_ROOT}/${name}Config.cmake) - set (${name}_DIR "${${NAME}_ROOT}") - endif (EXISTS ${${NAME}_ROOT}/${name}-config.cmake OR EXISTS ${${NAME}_ROOT}/${name}Config.cmake) - endif (NOT DEFINED ${name}_DIR AND (DEFINED ${name}_ROOT OR DEFINED ${NAME}_ROOT)) - - # if we're told not to look for the package, pretend it was never found - if (CMAKE_DISABLE_FIND_PACKAGE_${name}) - set (${name}_FOUND FALSE) - set (${NAME}_FOUND FALSE) - else () - # List of components might differ for every module. Therefore we will - # need to research for a library multiple times. _search_components - # will hold the index of the string COMPONENTS in the list - set(_ARGN_LIST ${ARGN}) # Create a real list to use with list commands - list(FIND _ARGN_LIST "COMPONENTS" _search_components) - - # using config mode is better than using module (aka. find) mode - # because then the package has already done all its probes and - # stored them in the config file for us - # For dune and opm modules and exempted packages we force module mode. - # For dune and opm it will use config mode underneath. - # We even need to repeat the search for opm-common once as this is done - # in the top most CMakeLists.txt without querying defines, setting dependencies - # and the likes which is only done via opm_find_package - if ( (NOT DEFINED ${name}_FOUND AND NOT DEFINED ${NAME}_FOUND ) - OR _search_components GREATER -1) - string(REGEX MATCH "(opm)-.*" _is_opm ${name}) - if(NOT _is_opm) - find_package (${name} ${ARGN}) - else() - if(${name}_DIR) - find_package (${name} ${${prefix}_VERSION_MAJOR}.${${prefix}_VERSION_MINOR} ${ARGN} NO_MODULE PATHS ${${name}_DIR} NO_DEFAULT_PATH) - else() - find_package (${name} ${${prefix}_VERSION_MAJOR}.${${prefix}_VERSION_MINOR} ${ARGN} NO_MODULE) - endif() - include(FindPackageHandleStandardArgs) - if(${name}_FOUND AND ${name}_LIBRARY STREQUAL "") - find_package_handle_standard_args(${name} - REQUIRED_VARS ${name}_INCLUDE_DIRS) - else() - find_package_handle_standard_args(${name} - REQUIRED_VARS ${name}_LIBRARY) - endif() - endif () - endif () - if (NOT DEFINED ${name}_FOUND) - set (${name}_FOUND "${${NAME}_FOUND}") - endif () - if (NOT DEFINED ${NAME}_FOUND) - set (${NAME}_FOUND "${${name}_FOUND}") - endif () - endif () - - # the variable "NAME" may be replaced during find_package (as this is - # now a macro, and not a function anymore), so we must reinitialize - string (TOUPPER "${name}" NAME) - string (REPLACE "-" "_" NAME "${NAME}") - - if (${name}_FOUND OR ${NAME}_FOUND) - foreach (var IN LISTS _opm_proj_vars) - if (DEFINED ${name}_${var}) - list (APPEND ${prefix}_${var} ${${name}_${var}}) - # some packages define an uppercase version of their own name - elseif (DEFINED ${NAME}_${var}) - list (APPEND ${prefix}_${var} ${${NAME}_${var}}) - endif (DEFINED ${name}_${var}) - # some packages define _PATH instead of _DIRS (Hi, MPI!) - if ("${var}" STREQUAL "INCLUDE_DIRS") - if (DEFINED ${name}_INCLUDE_PATH) - list (APPEND ${prefix}_INCLUDE_DIRS ${${name}_INCLUDE_PATH}) - elseif (DEFINED ${NAME}_INCLUDE_PATH) - list (APPEND ${prefix}_INCLUDE_DIRS ${${NAME}_INCLUDE_PATH}) - endif (DEFINED ${name}_INCLUDE_PATH) - # some packages define only _DIR and not _DIRS (Hi, Eigen3!) - if (DEFINED ${name}_INCLUDE_DIR) - list (APPEND ${prefix}_INCLUDE_DIRS ${${name}_INCLUDE_DIR}) - elseif (DEFINED ${NAME}_INCLUDE_DIR) - list (APPEND ${prefix}_INCLUDE_DIRS ${${NAME}_INCLUDE_DIR}) - endif (DEFINED ${name}_INCLUDE_DIR) - endif ("${var}" STREQUAL "INCLUDE_DIRS") - # cleanup lists - if ("${var}" STREQUAL "LIBRARIES") - remove_duplicate_libraries (${prefix}) - else ("${var}" STREQUAL "LIBRARIES") - remove_duplicate_var (${prefix} ${var}) - endif ("${var}" STREQUAL "LIBRARIES") - endforeach (var) - # some libraries only define xxx_FOUND and not a corresponding HAVE_xxx - if (NOT DEFINED HAVE_${NAME}) - set (HAVE_${NAME} 1) - endif (NOT DEFINED HAVE_${NAME}) - endif (${name}_FOUND OR ${NAME}_FOUND) -endmacro (find_and_append_package_to prefix name) - -# append to the list of variables associated with the project -macro (find_and_append_package name) - find_and_append_package_to (${CMAKE_PROJECT_NAME} ${name} ${ARGN}) -endmacro (find_and_append_package name) - -# find a list of dependencies, adding each one of them -macro (find_and_append_package_list_to prefix) - # setting and separating is necessary to work around apparent bugs - # in CMake's parser (sic) - set (_deps ${ARGN}) - foreach (_dep IN LISTS _deps) - separate_arguments (_args UNIX_COMMAND ${_dep}) - find_and_append_package_to (${prefix} ${_args}) - endforeach (_dep) -endmacro (find_and_append_package_list_to prefix) - -# convenience method to supply the project name as prefix -macro (find_and_append_package_list) - find_and_append_package_list_to (${CMAKE_PROJECT_NAME} ${ARGN}) -endmacro (find_and_append_package_list) diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmGrid.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmGrid.cmake deleted file mode 100644 index 5f5350fd22..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmGrid.cmake +++ /dev/null @@ -1,81 +0,0 @@ -# - Recreate grid selection macros from DUNE -# -# If anyone requires Dune::GridSelector::GridType, they must call this -# macro in *their* project, to add this information to config.h. (In -# the autotools version, dunecontrol will automatically include m4 -# scripts that does this). -# -# Example: -# opm_cornerpoint_grid (${CONFIG_H}) - -include (CMakeParseArguments) -function (opm_grid_type) - cmake_parse_arguments (a "" "FILENAME;SYMBOL;TYPE;CONDITION" "HEADERS" ${ARGN}) - - # write prelude of a condition to use this particular grid, an inclusion guard, - # and checks to see if the number of dimensions fits for this type of grid - file (APPEND ${a_FILENAME} -"/* add GRIDTYPE typedef for grid implementation ${a_TYPE}: - defining ${a_SYMBOL} during compilation typedefs this grid implementation as GridType - in namespace Dune::GridSelector; - also integer constants dimgrid and dimworld are set in this namespace. - The required headers for this grid implementation are also included. - */ -#if defined ${a_SYMBOL} && ! defined USED_${a_SYMBOL}_GRIDTYPE - /* someone else has already defined a gridtype */ - #if HAVE_GRIDTYPE - #error \"Ambigious definition of GRIDTYPE\" - #endif - - #ifndef WORLDDIM - #define WORLDDIM GRIDDIM - #endif - #if not (WORLDDIM >= GRIDDIM) - #error \"WORLDDIM < GRIDDIM does not make sense.\" - #endif - - #if ! (${a_CONDITION}) - #error \"Preprocessor assertion ${a_CONDITION} failed.\" - #endif - -") - - # write headers which are capable of defining the type. this should - # really just have consisted of a forward declaration, but the damage - # is done: clients expect to just pull in config.h and have the - # proper type available. - foreach (header IN LISTS a_HEADERS) - file (APPEND ${a_FILENAME} - "#include <${header}>\n" - ) - endforeach (header) - - # main part which does the typedef and then a postlude which marks - # the grid as "taken" and make sure that no one else does the same - file (APPEND ${a_FILENAME} -" - namespace Dune { - namespace GridSelector { - const int dimgrid = GRIDDIM; - const int worldgrid = WORLDDIM; - typedef ${a_TYPE} GridType; - } - } - - #define HAVE_GRIDTYPE 1 - #define USED_${a_SYMBOL}_GRIDTYPE 1 -#endif -") - -endfunction (opm_grid_type) - -# write the grid type for opm-grid -function (opm_cornerpoint_grid config_h) - opm_grid_type ( - FILENAME ${CONFIG_H} - SYMBOL CPGRID - HEADERS "dune/grid/CpGrid.hpp" "dune/grid/cpgrid/dgfparser.hh" - TYPE Dune::CpGrid - CONDITION "(GRIDDIM == 3) && (WORLDDIM == 3)" - ) -endfunction (opm_cornerpoint_grid config_h) diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmInit.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmInit.cmake deleted file mode 100644 index 0bdc2e51f7..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmInit.cmake +++ /dev/null @@ -1,143 +0,0 @@ -# - Initialize project-specific variables -# -# This will read the dune.module file for project information and -# set the following variables: -# -# project From the Module: field -# ${project}_NAME Same as above -# ${project}_DESCRIPTION From the Description: field -# ${project}_VERSION_MAJOR From the Version: field -# ${project}_VERSION_MINOR From the Version: field also -# -# This module should be the first to be included in the project, -# because most of the others (OpmXxx.cmake) use these variables. - -# for CMake >= 3.0, we need to change a few policies: -# -# - CMP0026 to allow access to the LOCATION target property -# - CMP0048 to indicate that we want to deal with the *VERSION* -# variables ourselves -# - CMP0064 to indicate that we want TEST if conditions to be evaluated -# - CMP0074 to indicate that _ROOT can be used to find package -# config files -macro(OpmSetPolicies) - if (POLICY CMP0026) - # Needed as we query LOCATION in OpmCompile.cmake and OpmSatellites.cmake - cmake_policy(SET CMP0026 OLD) - endif() - - if (POLICY CMP0048) - # We do not set version. Hence NEW should work and this can be removed later - cmake_policy(SET CMP0048 NEW) - endif() - - if(POLICY CMP0064) - cmake_policy(SET CMP0064 NEW) - endif() - - # set the behavior of the policy 0054 to NEW. (i.e. do not implicitly - # expand variables in if statements) - if (POLICY CMP0054) - cmake_policy(SET CMP0054 NEW) - endif() - - # set the behavior of policy 0074 to new as we always used _ROOT as the - # root of the installation - if(POLICY CMP0074) - cmake_policy(SET CMP0074 NEW) - endif() - - # include special - if (CMAKE_VERSION VERSION_LESS "2.8.3") - message (STATUS "Enabling compatibility modules for CMake 2.8.3") - list (APPEND CMAKE_MODULE_PATH "${OPM_MACROS_ROOT}/cmake/Modules/compat-2.8.3") - endif (CMAKE_VERSION VERSION_LESS "2.8.3") - - if (CMAKE_VERSION VERSION_LESS "2.8.5") - message (STATUS "Enabling compatibility modules for CMake 2.8.5") - list (APPEND CMAKE_MODULE_PATH "${OPM_MACROS_ROOT}/cmake/Modules/compat-2.8.5") - endif (CMAKE_VERSION VERSION_LESS "2.8.5") - - if (CMAKE_VERSION VERSION_LESS "2.8.7") - message (STATUS "Enabling compatibility modules for CMake 2.8.7") - list (APPEND CMAKE_MODULE_PATH "${OPM_MACROS_ROOT}/cmake/Modules/compat-2.8.7") - endif (CMAKE_VERSION VERSION_LESS "2.8.7") -endmacro() - - -# helper macro to retrieve a single field of a dune.module file -macro(OpmGetDuneModuleDirective field variable contents) - string (REGEX MATCH ".*${field}:[ ]*([^\n]+).*" ${variable} "${contents}") - string (REGEX REPLACE ".*${field}:[ ]*([^\n]+).*" "\\1" "${variable}" "${${variable}}") - string (STRIP "${${variable}}" ${variable}) -endmacro() - -function (OpmInitProjVars) - # locate the "dune.module" file - set (DUNE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/dune.module") - - # read this file into a variable - file (READ "${DUNE_MODULE_PATH}" DUNE_MODULE) - - # read fields from the file - OpmGetDuneModuleDirective ("Module" project "${DUNE_MODULE}") - OpmGetDuneModuleDirective ("Description" description "${DUNE_MODULE}") - OpmGetDuneModuleDirective ("Version" version "${DUNE_MODULE}") - OpmGetDuneModuleDirective ("Label" label "${DUNE_MODULE}") - - # parse the version number - set (verno_regex "^([0-9]*)\\.([0-9]*).*\$") - string (REGEX REPLACE "${verno_regex}" "\\1" major "${version}") - string (REGEX REPLACE "${verno_regex}" "\\2" minor "${version}") - - # return these variables - set (project "${project}" PARENT_SCOPE) - set (${project}_NAME "${project}" PARENT_SCOPE) - set (${project}_DESCRIPTION "${description}" PARENT_SCOPE) - set (${project}_VERSION_MAJOR "${major}" PARENT_SCOPE) - set (${project}_VERSION_MINOR "${minor}" PARENT_SCOPE) - set (${project}_LABEL "${label}" PARENT_SCOPE) -endfunction () - -macro (OpmInitDirVars) - # these are the most common (and desired locations) - set (${project}_DIR "opm") - set (doxy_dir "doc/doxygen") - - # but for backward compatibility we can override it - if (COMMAND dir_hook) - dir_hook () - endif (COMMAND dir_hook) -endmacro () - -OpmInitProjVars () -OpmInitDirVars () - -list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}) -include(OpmPackage) - -# if we are backporting this release to a system which already have an -# earlier version, set this flag to have everything scoped into a directory -# which incorporates the label of the release. this is done by interjecting -# the ${project}_VER_DIR into the installation path. -option (USE_VERSIONED_DIR "Put files in release-specific directories" OFF) -set (${project}_SUITE "opm") -if (USE_VERSIONED_DIR) - set (${project}_VER_DIR "/${${project}_SUITE}-${${project}_LABEL}") -else () - set (${project}_VER_DIR "") -endif () - -# parallel computing must be explicitly enabled -# This needs to be in OpmInit as prereqs is called before OpmLibMain is included. -option (USE_MPI "Use Message Passing Interface for parallel computing" OFF) -if (NOT USE_MPI) - set (CMAKE_DISABLE_FIND_PACKAGE_MPI TRUE) -endif () - -# quadmath must be explicitly enabled -# This needs to be in OpmInit as prereqs is called before OpmLibMain is included. -option (USE_QUADMATH "Use high precision floating point library (slow)" OFF) -if (NOT USE_QUADMATH) - set (CMAKE_DISABLE_FIND_PACKAGE_QuadMath TRUE) -endif () diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmInstall.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmInstall.cmake deleted file mode 100644 index eedfc5430f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmInstall.cmake +++ /dev/null @@ -1,74 +0,0 @@ -# - Installation macro -# -# Set up installation targets for the binary library. The following -# suffices must be defined for the prefix passed as parameter: -# -# _NAME Name of the library -# _HEADERS List of header files to install -# _TARGET CMake target which builds the library -# _LIBRARY_TYPE Static or shared library -# _DEBUG File containing debug symbols -include (GNUInstallDirs) - -macro (opm_install opm) - foreach (_hdr IN LISTS ${opm}_HEADERS) - get_filename_component (_dir ${_hdr} PATH) - file (RELATIVE_PATH _rel_dir "${PROJECT_SOURCE_DIR}" "${_dir}") - install ( - FILES ${_hdr} - DESTINATION include${${opm}_VER_DIR}/${_rel_dir} - ) - endforeach (_hdr) - install ( - TARGETS ${${opm}_TARGET} ${${opm}_EXTRA_TARGETS} - EXPORT ${opm}-targets - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}${${opm}_VER_DIR} - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}${${opm}_VER_DIR} - ) - if(NOT "${${opm}_TARGET}" STREQUAL "") - export(TARGETS ${${opm}_TARGET} ${${opm}_EXTRA_TARGETS} - FILE ${opm}-targets.cmake) - install(EXPORT ${opm}-targets DESTINATION "share/cmake/${opm}") - endif() - # only /usr/lib/debug seems to be searched for debug info; if we have - # write access to that directory (package installation), then default - # to use it; otherwise put the debug files together with the library - # (local installation). everything can be overridden by the option. - if (CMAKE_INSTALL_PREFIX STREQUAL "/usr") - set (_sys_dbg_def ON) - else (CMAKE_INSTALL_PREFIX STREQUAL "/usr") - set (_sys_dbg_def OFF) - endif (CMAKE_INSTALL_PREFIX STREQUAL "/usr") - option (SYSTEM_DEBUG "Put .debug files in GDB debug file directory" ${_sys_dbg_def}) - set (DEBUG_FILE_DIRECTORY /usr/lib/debug CACHE PATH "GDB debug file directory") - mark_as_advanced (DEBUG_FILE_DIRECTORY) - if (SYSTEM_DEBUG AND NOT APPLE) - set (_dbg_prefix "${DEBUG_FILE_DIRECTORY}/") - else (SYSTEM_DEBUG AND NOT APPLE) - set (_dbg_prefix "") - endif (SYSTEM_DEBUG AND NOT APPLE) - # static libraries don't have their debug info stripped, so there is - # only a separate file when we are building shared objects - if (${opm}_LIBRARY_TYPE STREQUAL "SHARED" AND ${opm}_TARGET AND ${opm}_DEBUG) - # on MacOS X, debug files are actually bundles (directories) - if (APPLE) - set (_dbg_type DIRECTORY) - else () - set (_dbg_type FILES) - endif () - install ( - ${_dbg_type} ${PROJECT_BINARY_DIR}/${${opm}_DEBUG} - DESTINATION ${_dbg_prefix}${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}${${opm}_VER_DIR} - ) - endif (${opm}_LIBRARY_TYPE STREQUAL "SHARED" AND ${opm}_TARGET AND ${opm}_DEBUG) - # note that the DUNE parts that looks for dune.module is currently (2013-09) not - # multiarch-aware and will thus put in lib64/ on RHEL and lib/ on Debian - install ( - FILES ${PROJECT_SOURCE_DIR}/dune.module - DESTINATION lib/${${opm}_VER_DIR}/dunecontrol/${${opm}_NAME} - ) - install ( - FILES ${PROJECT_SOURCE_DIR}/${CMAKE_PROJECT_NAME}-prereqs.cmake - DESTINATION ${CMAKE_INSTALL_PREFIX}/share/opm/cmake/Modules - ) -endmacro (opm_install opm) diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmKnown.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmKnown.cmake deleted file mode 100644 index e61414faf2..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmKnown.cmake +++ /dev/null @@ -1,58 +0,0 @@ -# -*- mode: cmake; tab-width: 2; indent-tabs-mode: t; truncate-lines: t; compile-command: "cmake -Wdev" -*- -# vim: set filetype=cmake autoindent tabstop=2 shiftwidth=2 noexpandtab softtabstop=2 nowrap: - -# features that may be used by some packages (Fortran wrappers -# for instance), and this set options for, but which is included -# conditionally and thus does not exist in other packages -set (FEATURE_VARS - USE_UNDERSCORING - ) - -# emulate the with-xxx feature of autotools to not give warnings -# if we specify the directories of packages that are known to the -# family but not necessarily used - -# pick package names from these; opm-xxx, dune-xxx -set (KNOWN_FAMILIES - opm - dune - ) - -# variables to test; xxx_DIR, xxx_ROOT -set (KNOWN_VARS - DIR - ROOT - ) - -set (KNOWN_opm_PKGS - common - parser - material - core - grid - output - simulators - upscaling - verteq - ) - -set (KNOWN_dune_PKGS - common - geometry - grid - istl - localfunctions - ) - -foreach (family IN ITEMS ${KNOWN_FAMILIES}) - foreach (package IN ITEMS ${KNOWN_${family}_PKGS}) - foreach (var IN ITEMS ${KNOWN_VARS}) - # just "use" the variable, so we don't get warnings - set (_dummy ${${family}-${package}_${var}}) - endforeach (var) - endforeach (package) -endforeach (family) - -foreach (feature IN ITEMS ${FEATURE_VARS}) - set (_dummy ${${feature}}) -endforeach (feature) diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmLibMain.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmLibMain.cmake deleted file mode 100644 index cd22b7332a..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmLibMain.cmake +++ /dev/null @@ -1,287 +0,0 @@ -# -*- mode: cmake; tab-width: 2; indent-tabs-mode: t; truncate-lines: t; compile-command: "cmake -Wdev" -*- -# vim: set filetype=cmake autoindent tabstop=2 shiftwidth=2 noexpandtab softtabstop=2 nowrap: - -# - Build an OPM library module -# -# This macro assumes that ${project} contains the name of the project, -# e.g. "opm-core", and that various variables that configures the module -# has been setup in advance. -# -# Customize the module configuration by defining these "callback" macros: -# -# prereqs_hook Do special processing before prerequisites are found -# fortran_hook Determine whether Fortran support is necessary or not -# sources_hook Do special processing before sources are compiled -# tests_hook Do special processing before tests are compiled -# files_hook Do special processing before final targets are added - - -# don't write default flags into the cache, preserve that for user set values -include (AddOptions) -no_default_options () - -# Languages and global compiler settings -if(CMAKE_VERSION VERSION_LESS 3.8) - message(WARNING "CMake version does not support c++17, guessing -std=c++17") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17") -else() - set(CMAKE_CXX_STANDARD 17) - set(CMAKE_CXX_STANDARD_REQUIRED ON) - set(CMAKE_CXX_EXTENSIONS OFF) -endif() - -# Various compiler extension checks -include(OpmCompilerChecks) - -# print system information to better pinpoint issues from log alone -include (UseSystemInfo) -system_info () - -# very early try to print repo id (to pinpoint version if something goes wrong) -include (UseVCSInfo) -vcs_info () - -# print toolchain information to identify compilers with potential bugs -include (UseCompVer) -compiler_info () -linker_info () - -# default settings: build static debug library -include (OpmDefaults) -opm_defaults (${project}) -message (STATUS "Build type: ${CMAKE_BUILD_TYPE}") - -# use tricks to do faster builds -include (UseFastBuilds) - -# precompiled headers -include (UsePrecompHeaders) - -# optimize full if we're not doing a debug build -include (UseOptimization) - -# turn on all warnings; this must be done before adding any -# dependencies, in case they alter the list of warnings -include (UseWarnings) - -# parallel programming -include (UseOpenMP) -find_openmp (${project}) -include (UseThreads) -find_threads (${project}) - -# SuperLU is optional -option (USE_SUPERLU "Use SuperLU direct solvers" OFF) - -# PETSc is optional -option (USE_PETSC "Use PETSc iterative solvers" OFF) - -# static code analysis -include(UseStaticAnalysis) -setup_static_analysis_tools() - -# callback hook to setup additional dependencies -if (COMMAND prereqs_hook) - prereqs_hook () -endif (COMMAND prereqs_hook) - -# macro to set standard variables (INCLUDE_DIRS, LIBRARIES etc.) -include (OpmFind) -find_and_append_package_list_to (${project} ${${project}_DEPS}) - -# set aliases to probed variables -include (OpmAliases) - -# remove the dependency on the testing framework from the main library; -# it is not possible to query for Boost twice with different components. -list (REMOVE_ITEM "${project}_LIBRARIES" "${Boost_UNIT_TEST_FRAMEWORK_LIBRARY}") - -# don't import more libraries than we need to -include (UseOnlyNeeded) - -# put debug information into every executable -include (UseDebugSymbols) - -# detect if Boost is in a shared library -include (UseDynamicBoost) - -# needed for Debian installation scheme -include (GNUInstallDirs) - -# Run conditional file hook -files_hook() - -# this module contains code to figure out which files is where -include (OpmFiles) -opm_auto_dirs () - -# put libraries in lib/ -opm_out_dirs () - -# identify the compilation units in the library; sources in opm/, -# tests files in tests/, examples in tutorials/ and examples/ -opm_sources (${project}) - -# processing after base sources have been identified -if (COMMAND sources_hook) - sources_hook () -endif (COMMAND sources_hook) - -# convenience macro to add version of another suite, e.g. dune-common -macro (opm_need_version_of what) - string (TOUPPER "${what}" _WHAT) - string (REPLACE "-" "_" _WHAT "${_WHAT}") - list (APPEND ${project}_CONFIG_IMPL_VARS - ${_WHAT}_VERSION_MAJOR ${_WHAT}_VERSION_MINOR ${_WHAT}_VERSION_REVISION - ) -endmacro (opm_need_version_of suite module) - -# use this hook to add version macros before we write to config.h -if (COMMAND config_hook) - config_hook () -endif (COMMAND config_hook) - -# create configuration header which describes available features -# necessary to compile this library. singular version is the names that -# is required by this project alone, plural version transitively -# includes the necessary defines by the dependencies -include (ConfigVars) -list (APPEND ${project}_CONFIG_VARS ${${project}_CONFIG_VAR}) - -# write configuration variables to this file. note that it is a temporary. -# _CONFIG_IMPL_VARS are defines that are only written to config.h internal -# to this project; they are not exported to any installed files. -# TESTING_CONFIG_VARS is what's required by the unit tests, and is therefore -# added in an ad-hoc manner to avoid putting dependencies to it in the module -# requirement file. (it should be added if there is .h code that needs it) -message (STATUS "Writing config file \"${PROJECT_BINARY_DIR}/config.h\"...") -set (CONFIG_H "${PROJECT_BINARY_DIR}/config.h.tmp") -configure_vars ( - FILE CXX ${CONFIG_H} - WRITE ${${project}_CONFIG_VARS} - ${${project}_CONFIG_IMPL_VARS} - ${TESTING_CONFIG_VARS} - ) - -# call this hook to let it setup necessary conditions for Fortran support -if (COMMAND fortran_hook) - fortran_hook () -endif (COMMAND fortran_hook) - -if (${project}_FORTRAN_IF) - include (UseFortranWrappers) - define_fc_func ( - APPEND ${CONFIG_H} - IF ${${project}_FORTRAN_IF} - ) -endif (${project}_FORTRAN_IF) - -# overwrite the config.h that is used by the code only if we have some -# real changes. thus, we don't have to recompile if a reconfigure is run -# due to some files being added, for instance -execute_process (COMMAND - ${CMAKE_COMMAND} -E copy_if_different ${CONFIG_H} ${PROJECT_BINARY_DIR}/config.h - ) - -# compile main library; pull in all required includes and libraries -include (OpmCompile) -opm_compile (${project}) - -# installation target: copy the library together with debug and -# configuration files to system directories -include (OpmInstall) -if (COMMAND install_hook) - install_hook () -endif (COMMAND install_hook) -opm_install (${project}) -message (STATUS "This build defaults to installing in ${CMAKE_INSTALL_PREFIX}") - -# installation of CMake modules to help user programs locate the library -include (OpmProject) -opm_cmake_config (${project}) - -# routines to build satellites such as tests, tutorials and samples -include (OpmSatellites) - -# example programs are found in the tutorials/ and examples/ directory -option (BUILD_EXAMPLES "Build the examples/ tree" ON) -if (BUILD_EXAMPLES) - opm_compile_satellites (${project} examples "" "") -endif (BUILD_EXAMPLES) - -opm_compile_satellites (${project} additionals EXCLUDE_FROM_ALL "") - -# attic are programs which are not quite abandoned yet; however, they -# are not actively maintained, so they should not be a part of the -# default compile -opm_compile_satellites (${project} attic EXCLUDE_FROM_ALL "") - -# infrastructure for testing -enable_testing () -include (CTest) - -# conditionally disable tests when features aren't available -macro (cond_disable_test name) - if ((NOT DEFINED HAVE_${name}) OR (NOT HAVE_${name})) - message (STATUS "${name} test disabled, since ${name} is not found.") - string (TOLOWER "${name}" name_lower) - get_filename_component (test_${name}_FILE "tests/test_${name_lower}.cpp" ABSOLUTE) - list (REMOVE_ITEM tests_SOURCES "${test_${name}_FILE}") - endif ((NOT DEFINED HAVE_${name}) OR (NOT HAVE_${name})) -endmacro (cond_disable_test name) - -# use this target to run all tests, with parallel execution -cmake_host_system_information(RESULT TESTJOBS QUERY NUMBER_OF_PHYSICAL_CORES) -if(TESTJOBS EQUAL 0) - set(TESTJOBS 1) -endif() -add_custom_target (check - COMMAND ${CMAKE_CTEST_COMMAND} -j${TESTJOBS} - DEPENDS test-suite - COMMENT "Checking if library is functional" - VERBATIM - ) - -# special processing for tests -if (COMMAND tests_hook) - tests_hook () -endif (COMMAND tests_hook) - -# make datafiles necessary for tests available in output directory -opm_data (tests datafiles "${tests_DIR}") -if(NOT BUILD_TESTING) - set(excl_all EXCLUDE_FROM_ALL) -endif() -opm_compile_satellites (${project} tests "${excl_all}" "${tests_REGEXP}") - -# use this target to check local git commits -add_custom_target(check-commits - COMMAND ${CMAKE_COMMAND} - -DPROJECT_SOURCE_DIR=${PROJECT_SOURCE_DIR} - -DCMAKE_BINARY_DIR=${CMAKE_BINARY_DIR} - -P ${OPM_MACROS_ROOT}/cmake/Scripts/CheckCommits.cmake) - -# generate documentation from source code with Doxygen; -# setup install target for this documentation -include (OpmDoc) -opm_doc (${project} ${doxy_dir}) - -### clean in-source builds ### -include (OpmDistClean) -opm_dist_clean (${project}) - -### emulate the with-xxx feature of autotools; -include (OpmKnown) - -# make sure we rebuild if dune.module changes -configure_file ( - "${CMAKE_CURRENT_SOURCE_DIR}/dune.module" - "${CMAKE_CURRENT_BINARY_DIR}/dunemod.tmp" - COPYONLY - ) - -# make sure updated version information is available in the source code -include (UseVersion) - -# update the cache for next run -write_back_options () diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmPackage.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmPackage.cmake deleted file mode 100644 index b096d403dc..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmPackage.cmake +++ /dev/null @@ -1,238 +0,0 @@ -# - Find routine for OPM-like modules -# -# Synopsis: -# -# find_opm_package (module deps header lib defs prog conf) -# -# where -# -# module Name of the module, e.g. "dune-common"; this will be the -# stem of all variables defined (see below). -# deps Semi-colon-separated list of dependent modules which must -# be present; those that are required must be marked as such -# explicitly. Quote if more than one word is necessary to -# describe the dependency. -# header Name of the header file to probe for, e.g. -# "dune/common/fvector.hh". Note that you should have to same -# relative path here as is used in the header files. -# lib Name of the library to probe for, e.g. "dunecommon" -# defs Symbols that should be passed to compilations -# prog Program that should compile if library is present -# conf Symbols that should be present in config.h -# -# It will provide these standard Find-module variables: -# -# ${module}_INCLUDE_DIRS Directory of header files -# ${module}_LIBRARIES Directory of shared object files -# ${module}_DEFINITIONS Defines that must be set to compile -# ${module}_CONFIG_VARS List of defines that should be in config.h -# HAVE_${MODULE} Binary value to use in config.h -# -# Note: Arguments should be quoted, otherwise a list will spill into the -# next argument! - -# Copyright (C) 2012 Uni Research AS -# This file is licensed under the GNU General Public License v3.0 - -# - -include (OpmFind) -include (OpmSiblingSearch) - -# append all items from src into dst; both must be *names* of lists -macro (append_found src dst) - foreach (_item IN LISTS ${src}) - if (NOT "${_item}" MATCHES "-NOTFOUND$") - list (APPEND ${dst} ${_item}) - endif (NOT "${_item}" MATCHES "-NOTFOUND$") - endforeach (_item) -endmacro (append_found src dst) - -macro (find_opm_package module deps header lib defs prog conf) - # in addition to accepting mod-ule_ROOT, we also accept the somewhat - # more idiomatic MOD_ULE_ROOT variant - string (TOUPPER "${module}" MODULE_UPPER) - string (REPLACE "-" "_" MODULE "${MODULE_UPPER}") - - # if someone else has included this test, don't do it again - # one exception is opm-common which is already found in the - # top most CMakeLists.txt but we still need to search for its - # dependencies - if (${MODULE}_FOUND OR ${module}_FOUND) - return () - endif () - - # variables to pass on to other packages - if (${module}_FIND_QUIETLY) - set (_${module}_quiet "QUIET") - else (${module}_FIND_QUIETLY) - set (_${module}_quiet "") - endif (${module}_FIND_QUIETLY) - if (${module}_FIND_REQUIRED) - set (_${module}_required "REQUIRED") - else (${module}_FIND_REQUIRED) - set (_${module}_required "") - endif (${module}_FIND_REQUIRED) - - create_module_dir_var(${module}) - - # This will also set all the needed variables with the exception of - # ${module}_CONFIG_VARS for dune modules. - find_package(${module} ${_${module}_quiet} ${_${module}_required} CONFIG) - - if(NOT ${module}_DEPS) - # set the dependencies used in find_package_deps - set(${module}_DEPS "${deps}") - endif() - find_package_deps(${module}) - - # since find_and_append_package_to is a macro, this variable have - # probably been overwritten (due to its common name); it is now - # this module's last dependency instead of the name of the module - # itself, so it must be restored - string (TOUPPER "${module}" MODULE_UPPER) - string (REPLACE "-" "_" MODULE "${MODULE_UPPER}") - - # compile with this option to avoid avalanche of warnings - set (${module}_DEFINITIONS "${${module}_DEFINITIONS}") - foreach (_def IN ITEMS ${defs}) - list (APPEND ${module}_DEFINITIONS "-D${_def}") - endforeach (_def) - - # tidy the lists before returning them - remove_dup_deps (${module}) - - # these defines are used in dune/${module} headers, and should be put - # in config.h when we include those - foreach (_var IN ITEMS ${conf}) - # massage the name to remove source code formatting - string (REGEX REPLACE "^[\n\t\ ]+" "" _var "${_var}") - string (REGEX REPLACE "[\n\t\ ]+$" "" _var "${_var}") - list (APPEND ${module}_CONFIG_VARS ${_var}) - endforeach (_var) - - # these are the defines that should be set when compiling - # without config.h - config_cmd_line (${module}_CMD_CONFIG ${module}_CONFIG_VARS) - - # check that we can compile a small test-program - include (CMakePushCheckState) - cmake_push_check_state () - include (CheckCXXSourceCompiles) - # only add these if they are actually found; otherwise it won't - # compile and the variable won't be set - append_found (${module}_INCLUDE_DIRS CMAKE_REQUIRED_INCLUDES) - append_found (${module}_LIBRARIES CMAKE_REQUIRED_LIBRARIES) - # since we don't have any config.h yet - list (APPEND CMAKE_REQUIRED_DEFINITIONS ${${module}_DEFINITIONS}) - list (APPEND CMAKE_REQUIRED_DEFINITIONS ${${module}_CMD_CONFIG}) - check_cxx_source_compiles ("${prog}" HAVE_${MODULE}) - cmake_pop_check_state () - - # write status message in the same manner as everyone else - include (FindPackageHandleStandardArgs) - find_package_handle_standard_args ( - ${module} - DEFAULT_MSG - ${module}_INCLUDE_DIRS ${module}_LIBRARIES ${module}_FOUND ${module}_ALL_PREREQS - ) - - # some genius that coded the FindPackageHandleStandardArgs figured out - # that the module name should be in uppercase (?!) - set (${module}_FOUND "${${MODULE_UPPER}_FOUND}") - set (${MODULE}_FOUND "${${MODULE_UPPER}_FOUND}") - - # This variable is used by UseDuneVer - list(GET ${module}_INCLUDE_DIRS 0 ${module}_INCLUDE_DIR) - # print everything out if we're asked to - if (${module}_DEBUG) - debug_find_vars (${module}) - endif (${module}_DEBUG) -endmacro (find_opm_package module deps header lib defs prog conf) - -macro (find_package_deps module) - # period because it should be something that evaluates to true - # in find_package_handle_standard_args - set (${module}_ALL_PREREQS ".") - foreach (_dep IN ITEMS ${${module}_DEPS}) - separate_arguments (_${module}_args UNIX_COMMAND "${_dep}") - if (_${module}_args) - # keep REQUIRED in the arguments only if we were required ourself - # "required-ness" is not transitive as far as CMake is concerned - # (i.e. if an optional package requests a package to be required, - # the build will fail if it's not found) - string (REPLACE "REQUIRED" "${_${module}_required}" _args_req "${_${module}_args}") - if(_dep MATCHES "opm-") - set(deplist ${_dep}) - string(STRIP "${_dep}" _dep) - string(REPLACE " " ";" deplist "${_dep}") - list(GET deplist 0 depname) - create_module_dir_var(${depname}) - endif() - find_and_append_package_to (${module} ${_${module}_args} ${_${module}_quiet}) - list (GET _${module}_args 0 _name_only) - string (TOUPPER "${_name_only}" _NAME_ONLY) - string (REPLACE "-" "_" _NAME_ONLY "${_NAME_ONLY}") - # check manually if it was found if REQUIRED; otherwise poison the - # dependency list which is checked later (so that it will fail) - if (("${_${module}_args}" MATCHES "REQUIRED") AND NOT (${_name_only}_FOUND OR ${_NAME_ONLY}_FOUND)) - list (APPEND ${module}_ALL_PREREQS "${_name_only}-NOTFOUND") - endif () - else () - message (WARNING "Empty dependency in find module for ${module} (check for trailing semi-colon)") - endif () - endforeach (_dep) - - # tidy the lists before returning them - remove_dup_deps (${module}) - - # these defines are used in dune/${module} headers, and should be put - # in config.h when we include those - foreach (_var IN ITEMS ${conf}) - # massage the name to remove source code formatting - string (REGEX REPLACE "^[\n\t\ ]+" "" _var "${_var}") - string (REGEX REPLACE "[\n\t\ ]+$" "" _var "${_var}") - list (APPEND ${module}_CONFIG_VARS ${_var}) - endforeach (_var) - - # these are the defines that should be set when compiling - # without config.h - config_cmd_line (${module}_CMD_CONFIG ${module}_CONFIG_VARS) - - # This variable is used by UseDuneVer - #list(GET ${module}_INCLUDE_DIRS 0 ${module}_INCLUDE_DIR) - # print everything out if we're asked to - if (${module}_DEBUG) - debug_find_vars (${module}) - endif (${module}_DEBUG) -endmacro () - -# print all variables defined by the above macro -function (debug_find_vars module) - message (STATUS "${module}_FOUND = ${${module}_FOUND}") - message (STATUS "${module}_INCLUDE_DIRS = ${${module}_INCLUDE_DIRS}") - message (STATUS "${module}_LIBRARIES = ${${module}_LIBRARIES}") - message (STATUS "${module}_DEFINITIONS = ${${module}_DEFINITIONS}") - message (STATUS "${module}_CONFIG_VARS = ${${module}_CONFIG_VARS}") - message (STATUS "${module}_LINKER_FLAGS = ${${module}_LINKER_FLAGS}") - string (TOUPPER ${module} MODULE) - string (REPLACE "-" "_" MODULE ${MODULE}) - message (STATUS "HAVE_${MODULE} = ${HAVE_${MODULE}}") -endfunction (debug_find_vars module) - -# generate a command-line that can be used to pass variables before -# config.h is available (such as probe tests). varname is the *name* -# of the variable to receive the result, defs is a list of the *names* -# which should be passed -function (config_cmd_line varname defs) - # process each variable - foreach (_var IN LISTS ${defs}) - # only generate an entry if the define was actually set - if ((DEFINED ${_var}) AND (NOT "${${_var}}" STREQUAL "")) - # add command-line option to define this variable - list (APPEND _cmdline "-D${_var}=${${_var}}") - endif ((DEFINED ${_var}) AND (NOT "${${_var}}" STREQUAL "")) - endforeach (_var) - # return the resulting command-line options for defining vars - set (${varname} "${_cmdline}" PARENT_SCOPE) -endfunction (config_cmd_line) diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmProject.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmProject.cmake deleted file mode 100644 index 68feda085a..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmProject.cmake +++ /dev/null @@ -1,168 +0,0 @@ -# - Helper routines for opm-core like projects - -include (LibtoolArchives) # linker_cmdline - -# convert a list back to a command-line string -function (unseparate_args var_name prefix value) - separate_arguments (value) - foreach (item IN LISTS value) - set (prefixed_item "${prefix}${item}") - if (${var_name}) - set (${var_name} "${${var_name}} ${prefixed_item}") - else (${var_name}) - set (${var_name} "${prefixed_item}") - endif (${var_name}) - endforeach (item) - set (${var_name} "${${var_name}}" PARENT_SCOPE) -endfunction (unseparate_args var_name prefix value) - -# wrapper to set variables in pkg-config file -function (configure_pc_file name source dest prefix libdir includedir) - # escape set of standard strings - unseparate_args (includes "-I" "${${name}_INCLUDE_DIRS}") - unseparate_args (defs "" "${${name}_DEFINITIONS}") - linker_cmdline (STRING INTO libs FROM ${${name}_LIBRARIES}) - - # necessary to make these variables visible to configure_file - set (name "${${name}_NAME}") - set (description "${${name}_DESCRIPTION}") - set (major "${${name}_VERSION_MAJOR}") - set (minor "${${name}_VERSION_MINOR}") - set (target "${${name}_LIBRARY}") - linker_cmdline (STRING INTO target from ${target}) - - configure_file (${source} ${dest} @ONLY) -endfunction (configure_pc_file name source dist prefix libdir includedir) - -function (configure_cmake_file name variant version) - # declarative list of the variable names that are used in the template - # and that must be defined in the project to be exported - set (variable_suffices - DESCRIPTION - VERSION - DEFINITIONS - INCLUDE_DIRS - LIBRARY_DIRS - LINKER_FLAGS - CONFIG_VARS - LIBRARY - LIBRARIES - TARGET - ) - - # set these variables temporarily (this is in a function scope) so - # they are available to the template (only) - foreach (suffix IN LISTS variable_suffices) - set (opm-project_${suffix} "${${name}_${suffix}}") - endforeach (suffix) - set (opm-project_NAME "${${name}_NAME}") - set (opm-project_NAME_UC "${${name}_NAME}") - string(TOUPPER "${opm-project_NAME}" opm-project_NAME_UC) - string(REPLACE "-" "_" opm-project_NAME_UC "${opm-project_NAME_UC}") - - # make the file substitutions - configure_file ( - ${template_dir}/opm-project-config${version}.cmake.in - ${PROJECT_BINARY_DIR}/${${name}_NAME}-${variant}${version}.cmake - @ONLY - ) -endfunction (configure_cmake_file name) - -# installation of CMake modules to help user programs locate the library -function (opm_cmake_config name) - # assume that the template is located in cmake/Templates (cannot use - # the current directory since this is in a function and the directory - # at runtime not at definition will be used - set (template_dir "${OPM_MACROS_ROOT}/cmake/Templates") - - # write configuration file to locate library - set(DUNE_PREFIX ${PROJECT_SOURCE_DIR}) - set(OPM_PROJECT_EXTRA_CODE ${OPM_PROJECT_EXTRA_CODE_INTREE}) - set(PREREQ_LOCATION "${PROJECT_SOURCE_DIR}") - configure_cmake_file (${name} "config" "") - configure_cmake_file (${name} "config" "-version") - configure_vars ( - FILE CMAKE "${PROJECT_BINARY_DIR}/${${name}_NAME}-config.cmake" - APPEND "${${name}_CONFIG_VARS}" - ) - - # config-mode .pc file; use this to find the build tree - configure_pc_file ( - ${name} - ${template_dir}/opm-project.pc.in - ${PROJECT_BINARY_DIR}/${${name}_NAME}.pc - ${PROJECT_BINARY_DIR} - "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}" - ${PROJECT_SOURCE_DIR} - ) - - # The next replace will result in bogus entries if install directory is - # a subdirectory of source tree, - # and we have existing entries pointing to that install directory. - # Since they will yield a duplicate in next replace anyways, we filter them out first - # to get avoid those the bogus entries. - string(REPLACE "${CMAKE_INSTALL_PREFIX}/include${${name}_VER_DIR}" "" ${name}_INCLUDE_DIRS "${${name}_INCLUDE_DIRS}") - - # replace the build directory with the target directory in the - # variables that contains build paths - string (REPLACE - "${PROJECT_SOURCE_DIR}" - "${CMAKE_INSTALL_PREFIX}/include${${name}_VER_DIR}" - ${name}_INCLUDE_DIRS - "${${name}_INCLUDE_DIRS}" - ) - string (REPLACE - "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}" - "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}${${name}_VER_DIR}" - ${name}_LIBRARY - "${${name}_LIBRARY}" - ) - set (CMAKE_LIBRARY_OUTPUT_DIRECTORY - "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}${${name}_VER_DIR}" - ) - # create a config mode file which targets the install directory instead - # of the build directory (using the same input template) - set(OPM_PROJECT_EXTRA_CODE ${OPM_PROJECT_EXTRA_CODE_INSTALLED}) - set(PREREQ_LOCATION "${CMAKE_INSTALL_PREFIX}/share/opm/cmake/Modules") - set(DUNE_PREFIX ${CMAKE_INSTALL_PREFIX}) - configure_cmake_file (${name} "install" "") - configure_vars ( - FILE CMAKE "${PROJECT_BINARY_DIR}/${${name}_NAME}-install.cmake" - APPEND "${${name}_CONFIG_VARS}" - ) - # this file gets copied to the final installation directory - install ( - FILES ${PROJECT_BINARY_DIR}/${${name}_NAME}-install.cmake - DESTINATION share/cmake${${name}_VER_DIR}/${${name}_NAME} - RENAME ${${name}_NAME}-config.cmake - ) - # assume that there exists a version file already - install ( - FILES ${PROJECT_BINARY_DIR}/${${name}_NAME}-config-version.cmake - DESTINATION share/cmake${${name}_VER_DIR}/${${name}_NAME} - ) - - # find-mode .pc file; use this to locate system installation - configure_pc_file ( - ${name} - ${template_dir}/opm-project.pc.in - ${PROJECT_BINARY_DIR}/${${name}_NAME}-install.pc - ${CMAKE_INSTALL_PREFIX} - ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}${${name}_VER_DIR} - ${CMAKE_INSTALL_PREFIX}/include${${name}_VER_DIR} - ) - - # put this in the right system location; if we have binaries then it - # should go in the arch-specific lib/ directory, otherwise use the - # common/noarch lib/ directory (these targets come from UseMultiArch) - if (${name}_TARGET) - set (_pkg_dir ${CMAKE_INSTALL_LIBDIR}) - else () - set (_pkg_dir lib) - endif () - install ( - FILES ${PROJECT_BINARY_DIR}/${${name}_NAME}-install.pc - DESTINATION ${CMAKE_INSTALL_PREFIX}/${_pkg_dir}/pkgconfig${${name}_VER_DIR}/ - RENAME ${${name}_NAME}.pc - ) -endfunction (opm_cmake_config name) diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmPythonTest.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmPythonTest.cmake deleted file mode 100644 index df6579cdf2..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmPythonTest.cmake +++ /dev/null @@ -1,7 +0,0 @@ -function (opm_add_python_test TEST_NAME TEST_SCRIPT) - add_test(NAME ${TEST_NAME} - WORKING_DIRECTORY ${PROJECT_BINARY_DIR} - COMMAND ${TEST_SCRIPT} ${ARGN}) - - set_property(TEST ${TEST_NAME} PROPERTY ENVIRONMENT "PYTHONPATH=${ERT_PYTHON_PATH}:${CWRAP_PYTHON_PATH}:${PYTHONPATH}") -endfunction(opm_add_python_test) diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmSatellites.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmSatellites.cmake deleted file mode 100644 index 7331221bec..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmSatellites.cmake +++ /dev/null @@ -1,385 +0,0 @@ -# - Build satellites that are dependent of main library - -# -# Enumerate all source code in a "satellite" directory such as tests/, -# compile each of them and optionally set them as a test for CTest to -# run. They will be linked to the main library created by the project. -# -# The following suffices must be defined for the opm prefix passed as -# parameter: -# -# _LINKER_FLAGS Necessary flags to link with this library -# _TARGET CMake target which creates the library -# _LIBRARIES Other dependencies that must also be linked - -# Synopsis: -# opm_compile_satellites (opm satellite excl_all test_regexp) -# -# Parameters: -# opm Prefix of the variable which contain information -# about the library these satellites depends on, e.g. -# pass "opm-core" if opm-core_TARGET is the name of -# the target the builds this library. Variables with -# suffixes _TARGET and _LIBRARIES must exist. -# -# satellite Prefix of variable which contain the names of the -# files, e.g. pass "tests" if the files are in the -# variable tests_SOURCES. Variables with suffixes -# _DATAFILES, _SOURCES and _DIR should exist. This -# name is also used as name of the target that builds -# all these files. -# -# excl_all EXCLUDE_FROM_ALL if these targets should not be built by -# default, otherwise empty string. -# -# test_regexp Regular expression which picks the name of a test -# out of the filename, or blank if no test should be -# setup. -# -# Example: -# opm_compile_satellites (opm-core test "" "^test_([^/]*)$") -# -macro (opm_compile_satellites opm satellite excl_all test_regexp) - # if we are going to build the tests always, then make sure that - # the datafiles are present too - if (NOT (${excl_all} MATCHES "EXCLUDE_FROM_ALL")) - set (_incl_all "ALL") - else (NOT (${excl_all} MATCHES "EXCLUDE_FROM_ALL")) - set (_incl_all "") - endif (NOT (${excl_all} MATCHES "EXCLUDE_FROM_ALL")) - - # if a set of datafiles has been setup, pull those in - add_custom_target (${satellite} ${_incl_all}) - if (${satellite}_DATAFILES) - add_dependencies (${satellite} ${${satellite}_DATAFILES}) - endif (${satellite}_DATAFILES) - - # compile each of these separately - foreach (_sat_FILE IN LISTS ${satellite}_SOURCES) - if (NOT "${test_regexp}" STREQUAL "" AND NOT Boost_UNIT_TEST_FRAMEWORK_FOUND) - continue() - endif() - get_filename_component (_sat_NAME "${_sat_FILE}" NAME_WE) - add_executable (${_sat_NAME} ${excl_all} ${_sat_FILE}) - add_dependencies (${satellite} ${_sat_NAME}) - set_target_properties (${_sat_NAME} PROPERTIES - LINK_FLAGS "${${opm}_LINKER_FLAGS_STR}") - if(HAVE_DYNAMIC_BOOST_TEST) - set_target_properties (${_sat_NAME} PROPERTIES - COMPILE_DEFINITIONS BOOST_TEST_DYN_LINK) - endif() - # are we building a test? luckily, the testing framework doesn't - # require anything else, so we don't have to figure out where it - # should go in the library list - if (NOT "${test_regexp}" STREQUAL "") - set (_test_lib "${Boost_UNIT_TEST_FRAMEWORK_LIBRARY}") - else (NOT "${test_regexp}" STREQUAL "") - set (_test_lib "") - add_static_analysis_tests(_sat_FILE ${opm}_INCLUDE_DIRS) - endif (NOT "${test_regexp}" STREQUAL "") - target_link_libraries (${_sat_NAME} ${${opm}_TARGET} ${${opm}_LIBRARIES} ${_test_lib}) - if (STRIP_DEBUGGING_SYMBOLS) - strip_debug_symbols (${_sat_NAME} _sat_DEBUG) - list (APPEND ${satellite}_DEBUG ${_sat_DEBUG}) - endif() - - # variable with regular expression doubles as a flag for - # whether tests should be setup or not - set(_sat_FANCY) - if (NOT "${test_regexp}" STREQUAL "") - foreach (_regexp IN ITEMS ${test_regexp}) - if ("${_sat_NAME}" MATCHES "${_regexp}") - string (REGEX REPLACE "${_regexp}" "\\1" _sat_FANCY "${_sat_NAME}") - elseif(NOT _sat_FANCY) - set(_sat_FANCY ${_sat_NAME}) - endif() - endforeach (_regexp) - get_target_property (_sat_LOC ${_sat_NAME} LOCATION) - # Run tests through mpi-run. Ubuntu 14.04 provided mpi libs will crash - # in the MPI_Finalize() call otherwise. - if(MPI_FOUND) - set(_sat_LOC ${MPIEXEC} ${MPIEXEC_NUMPROC_FLAG} 1 ${_sat_LOC}) - endif() - if (CMAKE_VERSION VERSION_LESS "2.8.4") - add_test (NAME ${_sat_FANCY} - COMMAND ${CMAKE_COMMAND} -E chdir "${PROJECT_BINARY_DIR}/${${satellite}_DIR}" ${_sat_LOC}) - else (CMAKE_VERSION VERSION_LESS "2.8.4") - add_test (${_sat_FANCY} ${_sat_LOC}) - # run the test in the directory where the data files are - set_tests_properties (${_sat_FANCY} PROPERTIES - WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/${${satellite}_DIR}) - endif (CMAKE_VERSION VERSION_LESS "2.8.4") - if(NOT TARGET test-suite) - add_custom_target(test-suite) - endif() - add_dependencies(test-suite "${_sat_NAME}") - endif(NOT "${test_regexp}" STREQUAL "") - - # if this program on the list of files that should be distributed? - # we check by the name of the source file - list (FIND ${satellite}_SOURCES_DIST "${_sat_FILE}" _is_util) - if (NOT (_is_util EQUAL -1)) - install (TARGETS ${_sat_NAME} RUNTIME - DESTINATION bin${${opm}_VER_DIR}/) - endif (NOT (_is_util EQUAL -1)) - endforeach (_sat_FILE) -endmacro (opm_compile_satellites opm prefix) - -# Synopsis: -# opm_data (satellite target dirname files) -# -# provides these output variables: -# -# ${satellite}_INPUT_FILES List of all files that are copied -# ${satellite}_DATAFILES Name of target which copies these files -# -# Example: -# -# opm_data (tests datafiles "tests/") -# -macro (opm_data satellite target dirname) - # even if there are no datafiles, create the directory so the - # satellite programs have a homedir to run in - execute_process (COMMAND ${CMAKE_COMMAND} -E make_directory ${PROJECT_BINARY_DIR}/${dirname}) - - # if ever huge test datafiles are necessary, then change this - # into "create_symlink" (on UNIX only, apparently) - set (make_avail "copy") - - # provide datafiles as inputs for the tests, by copying them - # to a tests/ directory in the output tree (if different) - set (${satellite}_INPUT_FILES) - if (NOT PROJECT_SOURCE_DIR STREQUAL PROJECT_BINARY_DIR) - foreach (input_datafile IN LISTS ${satellite}_DATA) - if (IS_ABSOLUTE ${input_datafile}) - file (RELATIVE_PATH rel_datafile "${PROJECT_SOURCE_DIR}" ${input_datafile}) - else() - set(rel_datafile ${input_datafile}) - endif() - set (output_datafile "${PROJECT_BINARY_DIR}/${rel_datafile}") - add_custom_command (OUTPUT ${output_datafile} - COMMAND ${CMAKE_COMMAND} - ARGS -E ${make_avail} ${input_datafile} ${output_datafile} - DEPENDS ${input_datafile} - VERBATIM) - list (APPEND ${satellite}_INPUT_FILES "${output_datafile}") - endforeach (input_datafile) - endif(NOT PROJECT_SOURCE_DIR STREQUAL PROJECT_BINARY_DIR) - - # setup a target which does all the copying - set (${satellite}_DATAFILES "${target}") - add_custom_target (${${satellite}_DATAFILES} - DEPENDS ${${satellite}_INPUT_FILES} - COMMENT "Making \"${satellite}\" data available in output tree") - if(NOT TARGET test-suite) - add_custom_target(test-suite) - endif() - add_dependencies(test-suite ${${satellite}_DATAFILES}) -endmacro (opm_data satellite target dirname files) - -# Add a single unit test (can be orchestrated by the 'ctest' command) -# -# Synopsis: -# opm_add_test(TestName) -# -# Parameters: -# TestName Name of test -# ONLY_COMPILE Only build test but do not run it (optional) -# DEFAULT_ENABLE_IF Only enable by default if a given condition is true (optional) -# ALWAYS_ENABLE Force enabling test even if -DBUILD_TESTING=OFF was set (optional) -# EXE_NAME Name of test executable (optional, default: ./bin/${TestName}) -# CONDITION Condition to enable test (optional, cmake code) -# DEPENDS Targets which the test depends on (optional) -# DRIVER The script which supervises the test (optional, default: ${OPM_TEST_DRIVER}) -# DRIVER_ARGS The script which supervises the test (optional, default: ${OPM_TEST_DRIVER_ARGS}) -# TEST_ARGS Arguments to pass to test's binary (optional, default: empty) -# SOURCES Source files for the test (optional, default: ${EXE_NAME}.cpp) -# PROCESSORS Number of processors to run test on (optional, default: 1) -# TEST_DEPENDS Other tests which must be run before running this test (optional, default: None) -# LIBRARIES Libraries to link test against (optional) -# WORKING_DIRECTORY Working directory for test (optional, default: ${PROJECT_BINARY_DIR}) -# CONFIGURATION Configuration to add test to -# -# Example: -# -# opm_add_test(funky_test -# ALWAYS_ENABLE -# CONDITION FUNKY_GRID_FOUND -# SOURCES tests/MyFunkyTest.cpp -# LIBRARIES -lgmp -lm) -include(CMakeParseArguments) - -macro(opm_add_test TestName) - cmake_parse_arguments(CURTEST - "NO_COMPILE;ONLY_COMPILE;ALWAYS_ENABLE" # flags - "EXE_NAME;PROCESSORS;WORKING_DIRECTORY;CONFIGURATION" # one value args - "CONDITION;DEFAULT_ENABLE_IF;TEST_DEPENDS;DRIVER;DRIVER_ARGS;DEPENDS;TEST_ARGS;SOURCES;LIBRARIES" # multi-value args - ${ARGN}) - - set(BUILD_TESTING "${BUILD_TESTING}") - - # set the default values for optional parameters - if (NOT CURTEST_EXE_NAME) - set(CURTEST_EXE_NAME ${TestName}) - endif() - - # Strip test_ prefix from name - if ("${TestName}" MATCHES "^test_([^/]*)$") - string (REGEX REPLACE "^test_([^/]*)$" "\\1" _FANCY "${TestName}") - else() - set(_FANCY ${TestName}) - endif() - - # try to auto-detect the name of the source file if SOURCES are not - # explicitly specified. - if (NOT CURTEST_SOURCES) - set(CURTEST_SOURCES "") - set(_SDir "${PROJECT_SOURCE_DIR}") - foreach(CURTEST_CANDIDATE "${CURTEST_EXE_NAME}.cpp" - "${CURTEST_EXE_NAME}.cc" - "tests/${CURTEST_EXE_NAME}.cpp" - "tests/${CURTEST_EXE_NAME}.cc") - if (EXISTS "${_SDir}/${CURTEST_CANDIDATE}") - set(CURTEST_SOURCES "${_SDir}/${CURTEST_CANDIDATE}") - endif() - endforeach() - endif() - - # the default working directory is the content of - # OPM_TEST_DEFAULT_WORKING_DIRECTORY or the source directory if this - # is unspecified - if (NOT CURTEST_WORKING_DIRECTORY) - if (OPM_TEST_DEFAULT_WORKING_DIRECTORY) - set(CURTEST_WORKING_DIRECTORY ${OPM_TEST_DEFAULT_WORKING_DIRECTORY}) - else() - set(CURTEST_WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) - endif() - endif() - - # don't build the tests by _default_ if BUILD_TESTING is false, - # i.e., when typing 'make' the tests are not build in that - # case. They can still be build using 'make test-suite' and they can - # be build and run using 'make check' - set(CURTEST_EXCLUDE_FROM_ALL "") - if (NOT "AND OR ${CURTEST_DEFAULT_ENABLE_IF}" STREQUAL "AND OR ") - if (NOT ${CURTEST_DEFAULT_ENABLE_IF}) - set(CURTEST_EXCLUDE_FROM_ALL "EXCLUDE_FROM_ALL") - endif() - endif() - if (NOT BUILD_TESTING AND NOT CURTEST_ALWAYS_ENABLE) - set(CURTEST_EXCLUDE_FROM_ALL "EXCLUDE_FROM_ALL") - endif() - - # figure out the test driver script and its arguments. (the variable - # for the driver script may be empty. In this case the binary is run - # "bare metal".) - if (NOT CURTEST_DRIVER) - set(CURTEST_DRIVER "${OPM_TEST_DRIVER}") - endif() - if (NOT CURTEST_DRIVER_ARGS) - set(CURTEST_DRIVER_ARGS "${OPM_TEST_DRIVER_ARGS}") - endif() - - # the libraries to link against - if (NOT CURTEST_LIBRARIES) - SET(CURTEST_LIBRARIES "${${project}_LIBRARIES}") - endif() - - # determine if the test should be completely ignored, i.e., the - # CONDITION argument evaluates to false. the "AND OR " is a hack - # which is required to prevent CMake from evaluating the condition - # in the string. (which might evaluate to an empty string even - # though "${CURTEST_CONDITION}" is not empty.) - if ("AND OR ${CURTEST_CONDITION}" STREQUAL "AND OR ") - set(SKIP_CUR_TEST "0") - elseif(${CURTEST_CONDITION}) - set(SKIP_CUR_TEST "0") - else() - set(SKIP_CUR_TEST "1") - endif() - - if (NOT SKIP_CUR_TEST) - if (CURTEST_ONLY_COMPILE) - # only compile the binary but do not run it as a test - add_executable("${CURTEST_EXE_NAME}" ${CURTEST_EXCLUDE_FROM_ALL} ${CURTEST_SOURCES}) - target_link_libraries (${CURTEST_EXE_NAME} ${CURTEST_LIBRARIES}) - get_property(dirs DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY INCLUDE_DIRECTORIES) - add_static_analysis_tests(CURTEST_SOURCES dirs) - - if(TARGET ${project}_prepare) - add_dependencies("${CURTEST_EXE_NAME}" ${project}_prepare) - endif() - if(CURTEST_DEPENDS) - add_dependencies("${CURTEST_EXE_NAME}" ${CURTEST_DEPENDS}) - endif() - else() - if (NOT CURTEST_NO_COMPILE) - # in addition to being run, the test must be compiled. (the - # run-only case occurs if the binary is already compiled by an - # earlier test.) - add_executable("${CURTEST_EXE_NAME}" ${CURTEST_EXCLUDE_FROM_ALL} ${CURTEST_SOURCES}) - if(HAVE_DYNAMIC_BOOST_TEST) - set_target_properties (${CURTEST_EXE_NAME} PROPERTIES - COMPILE_DEFINITIONS BOOST_TEST_DYN_LINK) - endif() - target_link_libraries (${CURTEST_EXE_NAME} ${CURTEST_LIBRARIES}) - get_property(dirs DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY INCLUDE_DIRECTORIES) - add_static_analysis_tests(CURTEST_SOURCES dirs) - - if(CURTEST_DEPENDS) - add_dependencies("${CURTEST_EXE_NAME}" ${CURTEST_DEPENDS}) - endif() - if(TARGET ${project}_prepare) - add_dependencies("${CURTEST_EXE_NAME}" ${project}_prepare) - endif() - endif() - - # figure out how the test should be run. if a test driver script - # has been specified to supervise the test binary, use it else - # run the test binary "naked". - if (CURTEST_DRIVER) - set(CURTEST_COMMAND ${CURTEST_DRIVER} ${CURTEST_DRIVER_ARGS} ${CURTEST_EXE_NAME} ${CURTEST_TEST_ARGS}) - else() - set(CURTEST_COMMAND ${PROJECT_BINARY_DIR}/bin/${CURTEST_EXE_NAME}) - if (CURTEST_TEST_ARGS) - list(APPEND CURTEST_COMMAND ${CURTEST_TEST_ARGS}) - endif() - endif() - - add_test(NAME ${_FANCY} - WORKING_DIRECTORY "${CURTEST_WORKING_DIRECTORY}" - COMMAND ${CURTEST_COMMAND} - CONFIGURATIONS ${CURTEST_CONFIGURATION}) - - # specify the dependencies between the tests - if (CURTEST_TEST_DEPENDS) - set_tests_properties(${_FANCY} PROPERTIES DEPENDS "${CURTEST_TEST_DEPENDS}") - endif() - - # tell ctest how many cores it should reserve to run the test - if (CURTEST_PROCESSORS) - set_tests_properties(${_FANCY} PROPERTIES PROCESSORS "${CURTEST_PROCESSORS}") - endif() - endif() - - if (NOT CURTEST_NO_COMPILE) - if(NOT TARGET test-suite) - add_custom_target(test-suite) - endif() - add_dependencies(test-suite "${CURTEST_EXE_NAME}") - endif() - endif() -endmacro() - -# macro to set the default test driver script and the its default -# arguments -macro(opm_set_test_driver DriverBinary DriverDefaultArgs) - set(OPM_TEST_DRIVER "${DriverBinary}") - set(OPM_TEST_DRIVER_ARGS "${DriverDefaultArgs}") -endmacro() - -# macro to set the default test driver script and the its default -# arguments -macro(opm_set_test_default_working_directory Dir) - set(OPM_TEST_DEFAULT_WORKING_DIRECTORY "${Dir}") -endmacro() diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmSiblingSearch.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmSiblingSearch.cmake deleted file mode 100644 index e8ce216516..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmSiblingSearch.cmake +++ /dev/null @@ -1,32 +0,0 @@ -option (SIBLING_SEARCH "Search sibling directories before system paths" ON) -mark_as_advanced (SIBLING_SEARCH) - -macro(create_module_dir_var module) - if(SIBLING_SEARCH AND NOT ${module}_DIR) - # guess the sibling dir - get_filename_component(_leaf_dir_name ${PROJECT_BINARY_DIR} NAME) - get_filename_component(_parent_full_dir ${PROJECT_BINARY_DIR} DIRECTORY) - get_filename_component(_parent_dir_name ${_parent_full_dir} NAME) - #Try if / is used - get_filename_component(_modules_dir ${_parent_full_dir} DIRECTORY) - set(_clone_dir "${module}") - if(IS_DIRECTORY ${_modules_dir}/${_clone_dir}/${_leaf_dir_name}) - set(${module}_DIR ${_modules_dir}/${_clone_dir}/${_leaf_dir_name}) - else() - string(REPLACE ${PROJECT_NAME} ${_clone_dir} _module_leaf ${_leaf_dir_name}) - if(NOT _leaf_dir_name STREQUAL _module_leaf - AND IS_DIRECTORY ${_parent_full_dir}/${_module_leaf}) - # We are using build directories named - set(${module}_DIR ${_parent_full_dir}/${_module_leaf}) - elseif(IS_DIRECTORY ${_parent_full_dir}/${_clone_dir} AND - EXISTS ${_parent_full_dir}/${_clone_dir}/CMakeCache.txt) - # All modules are in a common build dir - set(${module}_DIR "${_parent_full_dir}/${_clone_dir}") - endif() - endif() - endif() - if(${module}_DIR AND NOT IS_DIRECTORY ${${module}_DIR}) - message(WARNING "Value ${${module}_DIR} passed to variable" - " ${module}_DIR is not a directory") - endif() -endmacro() diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmStaticTargets.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmStaticTargets.cmake deleted file mode 100644 index f80cd90b87..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/OpmStaticTargets.cmake +++ /dev/null @@ -1,103 +0,0 @@ -#################################################################### -# # -# Setup static targets for all submodules. # -# Useful when building a static benchmark executable # -# # -#################################################################### - -# Macros - -# Clone a git and build it statically -# If ARGN is specified installation is skipped, ARGN0 is -# a build-system target name and the rest of ARGN are build tool parameters -function(opm_from_git repo name revision) - if(ARGN) - list(GET ARGN 0 target) - list(REMOVE_AT ARGN 0) - # This is used for top build of benchmarks. - # Clones the local source tree and builds it against the static libraries, - # skipping the install step. Note that in pricinple URL instead of GIT_REPOSITORY - # could have been used, but externalproject cannot handle build directories - # which are a subdirectory of the source tree, and since that is typically the case - # we work-around by re-cloning the local git. - # The ommision of GIT_TAG ensures that we build the tip of the local git. - set(COMMANDS BUILD_COMMAND ${CMAKE_COMMAND} --build --target ${target} -- ${ARGN} - GIT_TAG ${revision} - INSTALL_COMMAND) - else() - # This is used with "normal" static builds. - set(COMMANDS GIT_TAG ${revision}) - endif() - externalproject_add(${name}-static - GIT_REPOSITORY ${repo} - PREFIX static/${name} - CONFIGURE_COMMAND PKG_CONFIG_PATH=${CMAKE_BINARY_DIR}/static/installed/lib/pkgconfig:${CMAKE_BINARY_DIR}/static/installed/${CMAKE_INSTALL_LIBDIR}/pkgconfig:$ENV{PKG_CONFIG_PATH} - ${CMAKE_COMMAND} -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/static/installed - -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} - -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} - -DBUILD_SHARED_LIBS=0 - -DBUILD_TESTING=0 -DBUILD_EXAMPLES=0 - -G ${CMAKE_GENERATOR} - ${COMMANDS} "") - set_target_properties(${name}-static PROPERTIES EXCLUDE_FROM_ALL 1) -endfunction() - -# Convenience macro for adding dependencies without having to include the -static all over -macro(opm_static_add_dependencies target) - foreach(arg ${ARGN}) - add_dependencies(${target}-static ${arg}-static) - endforeach() -endmacro() - -include(ExternalProject) -include(GNUInstallDirs) - -# Defaults to building master -if(NOT OPM_BENCHMARK_VERSION) - set(OPM_BENCHMARK_VERSION "origin/master") -endif() - -# ERT -externalproject_add(ert-static - GIT_REPOSITORY https://github.com/Ensembles/ert - PREFIX static/ert - GIT_TAG ${revision} - CONFIGURE_COMMAND ${CMAKE_COMMAND} - -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/static/installed - -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} - -DBUILD_SHARED_LIBS=0 /devel) -set_target_properties(ert-static PROPERTIES EXCLUDE_FROM_ALL 1) - -# 2015.04 release used dune v2.3.1 -if(OPM_BENCHMARK_VERSION STREQUAL "release/2015.04/final") - set(DUNE_VERSION v2.3.1) -endif() - -# Master currently uses dune v2.3.1 -if(OPM_BENCHMARK_VERSION STREQUAL "origin/master") - set(DUNE_VERSION v2.3.1) -endif() - -# Fallback -if(NOT DUNE_VERSION) - set(DUNE_VERSION v2.3.1) -endif() - -# Dune -foreach(dune_repo dune-common dune-geometry dune-grid dune-istl) - opm_from_git(http://git.dune-project.org/repositories/${dune_repo} ${dune_repo} ${DUNE_VERSION}) -endforeach() -opm_static_add_dependencies(dune-istl dune-common) -opm_static_add_dependencies(dune-geometry dune-common) -opm_static_add_dependencies(dune-grid dune-geometry) - -# OPM -foreach(opm_repo opm-common opm-parser opm-core opm-output opm-grid opm-material - opm-upscaling) - opm_from_git(https://github.com/OPM/${opm_repo} ${opm_repo} ${OPM_BENCHMARK_VERSION}) -endforeach() -opm_static_add_dependencies(opm-parser opm-common ert) -opm_static_add_dependencies(opm-core opm-parser dune-istl) -opm_static_add_dependencies(opm-grid opm-core dune-grid) -opm_static_add_dependencies(opm-material opm-core) -opm_static_add_dependencies(opm-upscaling opm-grid opm-material) diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/UseCompVer.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Modules/UseCompVer.cmake deleted file mode 100644 index e8ac09932b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/UseCompVer.cmake +++ /dev/null @@ -1,108 +0,0 @@ -# - Get compiler version - -# probe the GCC version, returns empty string if GCC is not compiler -function (get_gcc_version language ver_name) - if(CMAKE_${language}_COMPILER_ID STREQUAL GNU) - # exec_program is deprecated, but execute_process does't work :-( - exec_program (${CMAKE_${language}_COMPILER} - ARGS ${CMAKE_${language}_COMPILER_ARG1} -dumpversion - OUTPUT_VARIABLE _version - ) - set (${ver_name} ${_version} PARENT_SCOPE) - else (CMAKE_${language}_COMPILER_ID STREQUAL GNU) - set (${ver_name} "" PARENT_SCOPE) - endif (CMAKE_${language}_COMPILER_ID STREQUAL GNU) -endfunction (get_gcc_version ver_name) - -# less reliable, but includes the patch number -function (get_gcc_patch language ver_name) - if(CMAKE_${language}_COMPILER_ID STREQUAL GNU) - # exec_program is deprecated, but execute_process does't work :-( - exec_program (${CMAKE_${language}_COMPILER} - ARGS ${CMAKE_${language}_COMPILER_ARG1} --version - OUTPUT_VARIABLE _version - ) - # split multi-line string into list - if (WIN32) - string (REPLACE "\r\n" ";" _version "${_version}") - else (WIN32) - string (REPLACE "\n" ";" _version "${_version}") - endif (WIN32) - # only keep first line - list (GET _version 0 _version) - # extract version number from it (this is the fragile part) - string (REGEX REPLACE "^[^\\(]+(\\([^\\)]*\\))?[\ \t]*([0-9]+\\.[0-9]+\\.[0-9]+)(.*\\(.*\\))?" "\\2" _version "${_version}") - # return this to the caller - set (${ver_name} ${_version} PARENT_SCOPE) - else (CMAKE_${language}_COMPILER_ID STREQUAL GNU) - set (${ver_name} "" PARENT_SCOPE) - endif (CMAKE_${language}_COMPILER_ID STREQUAL GNU) -endfunction (get_gcc_patch language ver_name) - -function (compiler_info) - if (CMAKE_COMPILER_IS_GNUCXX) - get_gcc_patch (CXX version) - message (STATUS "GNU C++ compiler version: ${version}") - endif (CMAKE_COMPILER_IS_GNUCXX) -endfunction (compiler_info) - -function (get_ld_version ver_name) - # run linker to get the version number. interestingly, this option works - # (for our purposes) on all major platforms (Linux, Mac OS X and Windows); - # it returns the program version although it may have ended in error - exec_program (${CMAKE_LINKER} - ARGS "-v" - OUTPUT_VARIABLE _version - ) - - # keep only first line, even on Mac OS X there is no line end - list (GET _version 0 _version) - - # format of the version string is platform-specific - if (NOT WIN32) - if (APPLE) - string (REGEX REPLACE ".*, from Apple (.*\)" "\\1" _version "${_version}") - else (APPLE) - # assuming some GNU toolchain now - string (REGEX REPLACE "GNU ([a-zA-Z0-9_]*) (version|\\(.*\\)) ([^\\ ]*).*" "\\1 \\3" _version "${_version}") - endif (APPLE) - endif (NOT WIN32) - - # return the string to the caller - set (${ver_name} "${_version}" PARENT_SCOPE) -endfunction (get_ld_version ver_name) - -function (linker_info) - get_ld_version (version) - message (STATUS "Linker: ${version}") -endfunction (linker_info) - -# sets CXX_COMPAT_GCC if we have either GCC or Clang -macro (is_compiler_gcc_compatible) - # is the C++ compiler clang++? - string (TOUPPER "${CMAKE_CXX_COMPILER_ID}" _comp_id) - if (_comp_id MATCHES "CLANG") - set (CMAKE_COMPILER_IS_CLANGXX TRUE) - else () - set (CMAKE_COMPILER_IS_CLANGXX FALSE) - endif () - # is the C++ compiler g++ or clang++? - if (CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_CLANGXX) - set (CXX_COMPAT_GCC TRUE) - else () - set (CXX_COMPAT_GCC FALSE) - endif () - # is the C compiler clang? - string (TOUPPER "${CMAKE_C_COMPILER_ID}" _comp_id) - if (_comp_id MATCHES "CLANG") - set (CMAKE_COMPILER_IS_CLANG TRUE) - else () - set (CMAKE_COMPILER_IS_CLANG FALSE) - endif () - # is the C compiler gcc or clang? - if (CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_CLANG) - set (C_COMPAT_GCC TRUE) - else () - set (C_COMPAT_GCC FALSE) - endif () -endmacro (is_compiler_gcc_compatible) diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/UseDebugSymbols.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Modules/UseDebugSymbols.cmake deleted file mode 100644 index bbe38530a7..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/UseDebugSymbols.cmake +++ /dev/null @@ -1,132 +0,0 @@ -# - Generate debug symbols in a separate file -# -# (1) Include this file in your CMakeLists.txt; it will setup everything -# to compile WITH debug symbols in any case. -# -# (2) Run the strip_debug_symbols function on every target that you want -# to strip. - -# Copyright (C) 2012 Uni Research AS -# This code is licensed under The GNU General Public License v3.0 - -include (AddOptions) -include (UseCompVer) -is_compiler_gcc_compatible () - -# only debugging using the GNU toolchain is supported for now -if (CXX_COMPAT_GCC) - # default debug level, if not specified by the user - set_default_option (CXX _dbg_flag "-ggdb3" "(^|\ )-g") - - # add debug symbols to *all* targets if the build mode is either "Debug" or "RelWithDebInfo" - if (_dbg_flag) - message (STATUS "Generating debug symbols: ${_dbg_flag}") - add_options (ALL_LANGUAGES "Debug;RelWithDebInfo" "${_dbg_flag}") - endif (_dbg_flag) - - # extracting the debug info is done by a separate utility in the GNU - # toolchain. check that this is actually installed. - message (STATUS "Looking for strip utility") - if (APPLE) - # MacOS X has a duo of utilities; we need both - find_program (OBJCOPY strip) - find_program (DSYMUTIL dsymutil) - mark_as_advanced (DSYMUTIL) - if (NOT DSYMUTIL) - set (OBJCOPY dsymutil-NOTFOUND) - endif (NOT DSYMUTIL) - else (APPLE) - find_program (OBJCOPY - objcopy - ${CYGWIN_INSTALL_PATH}/bin /usr/bin /usr/local/bin - ) - endif (APPLE) - mark_as_advanced (OBJCOPY) - if (OBJCOPY) - message (STATUS "Looking for strip utility - found") - else (OBJCOPY) - message (WARNING "Looking for strip utility - not found") - endif (OBJCOPY) -endif () - -# command to separate the debug information from the executable into -# its own file; this must be called for each target; optionally takes -# the name of a variable to receive the list of .debug files -function (strip_debug_symbols targets) - if (CXX_COMPAT_GCC AND OBJCOPY) - foreach (target IN LISTS targets) - # libraries must retain the symbols in order to link to them, but - # everything can be stripped in an executable - get_target_property (_kind ${target} TYPE) - - # don't strip static libraries - if ("${_kind}" STREQUAL "STATIC_LIBRARY") - return () - endif ("${_kind}" STREQUAL "STATIC_LIBRARY") - - # don't strip public symbols in shared objects - if ("${_kind}" STREQUAL "EXECUTABLE") - set (_strip_args "--strip-all") - else ("${_kind}" STREQUAL "EXECUTABLE") - set (_strip_args "--strip-debug") - endif ("${_kind}" STREQUAL "EXECUTABLE") - - # add_custom_command doesn't support generator expressions in the - # working_directory argument (sic; that's what you get when you do - # ad hoc programming all the time), so we need to extract the - # location up front (the location on the other hand should not be - # used for libraries as it does not include the soversion -- sic - # again) - get_target_property (_full ${target} LOCATION) - get_filename_component (_dir ${_full} PATH) - if (NOT (("${_dir}" STREQUAL "") OR ("${_dir}" MATCHES ".*/$"))) - set (_dir "${_dir}/") - endif (NOT (("${_dir}" STREQUAL "") OR ("${_dir}" MATCHES ".*/$"))) - get_filename_component (_name ${_full} NAME_WE) - get_filename_component (_ext ${_full} EXT) - # only libraries have soversion property attached - get_target_property (_target_soversion ${target} SOVERSION) - get_target_property (_target_version ${target} VERSION) - if (_target_soversion) - # MacOS X puts the version number before the extension - if (APPLE) - set (_target_file_name "${_name}.${_target_version}${_ext}") - else (APPLE) - set (_target_file_name "${_name}${_ext}.${_target_version}") - endif (APPLE) - else (_target_soversion) - set (_target_file_name "${_name}${_ext}") - endif (_target_soversion) - set (_target_file "${_dir}${_target_file_name}") - # do without generator expressions (which doesn't work everywhere) - if (APPLE) - set (_debug_ext ".dSYM") - add_custom_command (TARGET ${target} - POST_BUILD - WORKING_DIRECTORY ${_dir} - COMMAND ${DSYMUTIL} ARGS --out=${_target_file}${_debug_ext} ${_target_file} - COMMAND ${OBJCOPY} ARGS -S ${_target_file} - VERBATIM - ) - else (APPLE) - set (_debug_ext ".debug") - add_custom_command (TARGET ${target} - POST_BUILD - WORKING_DIRECTORY ${_dir} - COMMAND ${OBJCOPY} ARGS --only-keep-debug ${_target_file} ${_target_file}${_debug_ext} - COMMAND ${OBJCOPY} ARGS ${_strip_args} ${_target_file} - COMMAND ${OBJCOPY} ARGS --add-gnu-debuglink=${_target_file_name}${_debug_ext} ${_target_file} - VERBATIM - ) - endif (APPLE) - # add this .debug file to the list - file (RELATIVE_PATH _this_debug_file "${PROJECT_BINARY_DIR}" "${_target_file}${_debug_ext}") - set (_debug_files ${_debug_files} ${_this_debug_file}) - endforeach (target) - # if optional debug list was requested, then copy to output parameter - if (ARGV1) - set (${ARGV1} ${_debug_files} PARENT_SCOPE) - endif (ARGV1) - endif () -endfunction (strip_debug_symbols targets) - diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/UseDuneVer.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Modules/UseDuneVer.cmake deleted file mode 100644 index 6098f31d7e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/UseDuneVer.cmake +++ /dev/null @@ -1,32 +0,0 @@ -# - Find version of a DUNE package -# -# Synopsis: -# -# find_dune_version (suite module) -# -# where: -# suite Name of the suite; this should always be "dune" -# module Name of the module, e.g. "common" -# -# Finds the content of DUNE_${MODULE}_VERSION_{MAJOR,MINOR,REVISION} -# from the installation. -# -# Add these variables to ${project}_CONFIG_IMPL_VARS in CMakeLists.txt -# if you need these in the code. - -function (find_dune_version suite module) - # CMake's find_package will set _VERSION_(MAJOR|MINOR|REVISION) - # we simply rely on that. - # generate variable for what we have found - string (TOUPPER "${suite}" _SUITE) - string (TOUPPER "${module}" _MODULE) - string (REPLACE "-" "_" _MODULE "${_MODULE}") - set (${_SUITE}_${_MODULE}_VERSION_MAJOR "${${suite}-${module}_VERSION_MAJOR}" PARENT_SCOPE) - set (${_SUITE}_${_MODULE}_VERSION_MINOR "${${suite}-${module}_VERSION_MINOR}" PARENT_SCOPE) - set (${_SUITE}_${_MODULE}_VERSION_REVISION "${${suite}-${module}_VERSION_PATCH}" PARENT_SCOPE) - - if( ${suite}-${module}_FOUND ) - # print the version number we detected in the configuration log - message (STATUS "Version ${${suite}-${module}_VERSION_MAJOR}.${${suite}-${module}_VERSION_MINOR}.${${suite}-${module}_VERSION_PATCH} of ${suite}-${module} from ${${suite}-${module}_DIR}") - endif() -endfunction (find_dune_version suite module) diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/UseDynamicBoost.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Modules/UseDynamicBoost.cmake deleted file mode 100644 index 410eae31de..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/UseDynamicBoost.cmake +++ /dev/null @@ -1,36 +0,0 @@ -find_package (Boost 1.44.0 COMPONENTS unit_test_framework QUIET) - -if (Boost_UNIT_TEST_FRAMEWORK_FOUND) - # setup to do a test compile - include (CMakePushCheckState) - cmake_push_check_state () - include (CheckCXXSourceCompiles) - list (APPEND CMAKE_REQUIRED_INCLUDES ${Boost_INCLUDE_DIRS}) - list (APPEND CMAKE_REQUIRED_LIBRARIES ${Boost_LIBRARIES}) - - unset(HAVE_DYNAMIC_BOOST_TEST CACHE) - check_cxx_source_compiles(" -#define BOOST_TEST_DYN_LINK -#define BOOST_TEST_MODULE DYNLINK_TEST -#include - -int f(int x) { return 2 * x; } - -BOOST_AUTO_TEST_CASE(DynlinkConfigureTest) { - BOOST_CHECK_MESSAGE(f(2) == 4, - \"Apparently, multiplication doesn't \" - \"work: f(2) = \" << f(2)); -}" HAVE_DYNAMIC_BOOST_TEST) - cmake_pop_check_state () -else (Boost_UNIT_TEST_FRAMEWORK_FOUND) - # no Boost, no compile - set (HAVE_DYNAMIC_BOOST_TEST 0) -endif (Boost_UNIT_TEST_FRAMEWORK_FOUND) - -# save this for later -set (HAVE_DYNAMIC_BOOST_TEST "${HAVE_DYNAMIC_BOOST_TEST}" - CACHE BOOL "Whether Boost::Test is dynamically linked or not" - ) - -# include in config.h -list (APPEND TESTING_CONFIG_VARS "HAVE_DYNAMIC_BOOST_TEST") diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/UseFastBuilds.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Modules/UseFastBuilds.cmake deleted file mode 100644 index c2817e6c9c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/UseFastBuilds.cmake +++ /dev/null @@ -1,11 +0,0 @@ -# - Try to build faster depending on the compiler - -# faster builds by using a pipe instead of temp files -include (AddOptions) -include (UseCompVer) -is_compiler_gcc_compatible () - -if (CXX_COMPAT_GCC) - add_options (ALL_LANGUAGES ALL_BUILDS "-pipe") -endif () - diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/UseFortranWrappers.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Modules/UseFortranWrappers.cmake deleted file mode 100644 index 81359a02c5..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/UseFortranWrappers.cmake +++ /dev/null @@ -1,90 +0,0 @@ -# - Provide C wrappers for Fortran code -# -# Synopsis: -# define_fc_func (APPEND config.h IF HAVE_BLAS) - -function (define_fc_func verb file) - # check that we are being called correctly - if (NOT (("${verb}" STREQUAL "APPEND") OR - ("${verb}" STREQUAL "WRITE"))) - message (FATAL_ERROR - "Unknown verb \"${verb}\" passed as first argument." - ) - endif (NOT (("${verb}" STREQUAL "APPEND") OR - ("${verb}" STREQUAL "WRITE"))) - - # check under which conditions we should do our work - if (NOT "${ARGN}" STREQUAL "") - set (args ${ARGN}) - list (GET args 0 keyword) - if (NOT "${keyword}" STREQUAL "IF") - message (FATAL_ERROR - "Unknown conditional \"${keyword}\" passed as third argument." - ) - endif (NOT "${keyword}" STREQUAL "IF") - list (REMOVE_AT args 0) - set (needed FALSE) - foreach (condition IN LISTS args) - if (${${condition}}) - set (needed TRUE) - break () - endif (${${condition}}) - endforeach (condition) - else (NOT "${ARGN}" STREQUAL "") - # if called unconditionally, then always include the wrapper - set (needed TRUE) - endif (NOT "${ARGN}" STREQUAL "") - - # only do something if we actually have some components which requires - # the interaction -- don't load the Fortran compiler just to write - # this macro (which apparently nobody uses then) - if (needed) - # if this option is enabled, we skip detecting the Fortran externals - # using a real compiler (which may not be the same that compiled the - # library) and just write a macro that uses a single underscore (which - # is the assumption that FindLAPACK operates on anyway) - option (USE_UNDERSCORING "Assume that Fortran routines have underscore suffix" OFF) - if (USE_UNDERSCORING) - message (STATUS "Assuming Fortran externals have underscore suffix") - set (_str "#define FC_FUNC(name,NAME) name##_\n") - else (USE_UNDERSCORING) - - # enable languages needed - if (NOT CMAKE_C_COMPILER_LOADED) - enable_language (C) - endif (NOT CMAKE_C_COMPILER_LOADED) - if (NOT CMAKE_Fortran_COMPILER_LOADED) - enable_language (Fortran) - endif (NOT CMAKE_Fortran_COMPILER_LOADED) - - # get a temporary file - set (_tmp_hdr ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/config_f.h) - - # write a small config file that contains the proper convention for - # calling Fortran from C - include (FortranCInterface) - fortrancinterface_header (${_tmp_hdr}) - - # read the definition back in from the file - file (STRINGS - ${_tmp_hdr} - _str - REGEX "^#define FortranCInterface_GLOBAL\\(name,NAME\\) .*$" - ) - - # massage it to look like the one AC_FC_WRAPPERS provide - string (REPLACE "FortranCInterface_GLOBAL" "FC_FUNC" _str ${_str}) - - endif (USE_UNDERSCORING) - - # write this definition to the end of our own configuration file - file (${verb} ${file} - "\n/* Define to a macro mangling the given C identifier (in lower and upper - case), which must not contain underscores, for linking with Fortran. */\n" - ${_str} - "\n" - ) - else (needed) - message (STATUS "Fortran/C interface not activated") - endif (needed) -endfunction (define_fc_func) diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/UseOnlyNeeded.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Modules/UseOnlyNeeded.cmake deleted file mode 100644 index 8a195bf483..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/UseOnlyNeeded.cmake +++ /dev/null @@ -1,50 +0,0 @@ -# - Use only needed imports from libraries -# -# Add the -Wl,--as-needed flag to the default linker flags on Linux -# in order to get only the minimal set of dependencies. - -function (prepend var_name value) - # only add the prefix if it is not already at the beginning. this - # prevents the same string to be added at the same place every time - # we check for reconfiguration (e.g. "--as-needed" below) - string (LENGTH "${value}" _val_len) - string (LENGTH "${${var_name}}" _var_len) - if (NOT (${_var_len} LESS ${_val_len})) - string (SUBSTRING "${${var_name}}" 0 ${_val_len} _var_pre) - else (NOT (${_var_len} LESS ${_val_len})) - set (_var_pre) - endif (NOT (${_var_len} LESS ${_val_len})) - if (NOT ("${_var_pre}" STREQUAL "${value}")) - if (${var_name}) - set (${var_name} "${value} ${${var_name}}" PARENT_SCOPE) - else (${var_name}) - set (${var_name} "${value}") - endif (${var_name}) - endif (NOT ("${_var_pre}" STREQUAL "${value}")) -endfunction (prepend var_name value) - -option (ONLY_NEEDED_LIBRARIES "Instruct the linker to not use libraries which are unused" OFF) - -# only ELF shared objects can be underlinked, and only GNU will accept -# these parameters; otherwise just leave it to the defaults -if ((CMAKE_CXX_PLATFORM_ID STREQUAL "Linux") AND CMAKE_COMPILER_IS_GNUCC AND ONLY_NEEDED_LIBRARIES) - # these are the modules whose probes will turn up incompatible - # flags on some systems - set (_maybe_underlinked - SuiteSparse - ) - # check if any modules actually reported problems (by setting an - # appropriate linker flag) - set (_underlinked FALSE) - foreach (_module IN LISTS _maybe_underlinked) - if ("${${_module}_LINKER_FLAGS}" MATCHES "-Wl,--no-as-needed") - set (_underlinked TRUE) - endif ("${${_module}_LINKER_FLAGS}" MATCHES "-Wl,--no-as-needed") - endforeach (_module) - # if we didn't have any problems, then go ahead and add - if (NOT _underlinked) - prepend (CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed") - prepend (CMAKE_MODULE_LINKER_FLAGS "-Wl,--as-needed") - prepend (CMAKE_SHARED_LINKER_FLAGS "-Wl,--as-needed") - endif (NOT _underlinked) -endif ((CMAKE_CXX_PLATFORM_ID STREQUAL "Linux") AND CMAKE_COMPILER_IS_GNUCC AND ONLY_NEEDED_LIBRARIES) diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/UseOpenMP.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Modules/UseOpenMP.cmake deleted file mode 100644 index ca6029c641..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/UseOpenMP.cmake +++ /dev/null @@ -1,76 +0,0 @@ -# - Use OpenMP features -# -# Synopsis: -# -# find_openmp (module) -# -# where: -# -# module Name of the module to which OpenMP libraries -# etc. should be added, e.g. "opm-core". -# -# Note: Compiler flags are always added globally, to avoid ABI -# incompatibility problems. -# -# It is assumed that the following variables are available -# -# ${module}_QUIET Verbosity level of the parent's find module -# ${module}_LIBRARIES List of libraries to which OpenMP will be added -# -# Example: -# find_openmp (opm-core) -# remove_dup_deps (opm-core) - -include (AddOptions) -include (UseCompVer) -is_compiler_gcc_compatible () - -macro (find_openmp opm) - # default is that OpenMP is not considered to be there; if we set this - # to a blank definition, it may be added but it cannot be removed if - # it propagates to other projects (someone declares it to be part of - # _CONFIG_VARS) - set (HAVE_OPENMP) - - # user code can be conservative by setting USE_OPENMP_DEFAULT - if (NOT DEFINED USE_OPENMP_DEFAULT) - set (USE_OPENMP_DEFAULT ON) - endif (NOT DEFINED USE_OPENMP_DEFAULT) - option (USE_OPENMP "Enable OpenMP for parallelization" ${USE_OPENMP_DEFAULT}) - if (USE_OPENMP) - - # enabling OpenMP is supposedly enough to make the compiler link with - # the appropriate libraries - find_package (OpenMP ${${opm}_QUIET}) - - if(OpenMP_CXX_FOUND) - list (APPEND ${opm}_LIBRARIES OpenMP::OpenMP_CXX) - else() - list (APPEND ${opm}_LIBRARIES ${OpenMP_LIBRARIES}) - endif() - - if (OPENMP_FOUND) - add_options (C ALL_BUILDS "${OpenMP_C_FLAGS}") - add_options (CXX ALL_BUILDS "${OpenMP_CXX_FLAGS}") - set (HAVE_OPENMP 1) - endif (OPENMP_FOUND) - - # threading library (search for this *after* OpenMP - set (CMAKE_THREAD_PREFER_PTHREAD TRUE) - find_package (Threads ${${opm}_QUIET}) - if (CMAKE_USE_PTHREADS_INIT) - list (APPEND ${opm}_LIBRARIES ${CMAKE_THREAD_LIBS_INIT}) - endif (CMAKE_USE_PTHREADS_INIT) - - else (USE_OPENMP) - message (STATUS "OpenMP: disabled") - - # if we don't have OpenMP support, then don't show warnings that these - # pragmas are unknown - if (CXX_COMPAT_GCC) - add_options (ALL_LANGUAGES ALL_BUILDS "-Wno-unknown-pragmas") - elseif (MSVC) - add_options (ALL_LANGUAGES ALL_BUILDS "-wd4068") - endif() - endif (USE_OPENMP) -endmacro (find_openmp opm) diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/UseOptimization.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Modules/UseOptimization.cmake deleted file mode 100644 index 7a09605dd1..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/UseOptimization.cmake +++ /dev/null @@ -1,86 +0,0 @@ -# - Turn on optimizations based on build type - -include(TestCXXAcceptsFlag) -include (AddOptions) -include (UseCompVer) -is_compiler_gcc_compatible () - -# mapping from profile name (in CMAKE_BUILD_TYPE) to variable part -set (_prof_DEBUG "Debug") -set (_prof_RELEASE "Release;RelWithDebInfo;MinSizeRel") - -# if we are building a debug target, then disable all optimizations -# otherwise, turn them on. indicate to the code what we have done -# so it can turn on assertions etc. - -if (CXX_COMPAT_GCC) - # extra flags passed for optimization - set (_opt_flags "") - - # link-time (a.k.a. global) optimizations - # disabled due to widespread bugs in the linker plugin - option (WHOLE_PROG_OPTIM "Whole program optimization (lto)" OFF) - if (WHOLE_PROG_OPTIM) - check_cxx_accepts_flag ("-flto" HAVE_LINK_OPTS) - check_cxx_accepts_flag ("-fuse-linker-plugin" HAVE_LINK_PLUGIN) - if (HAVE_LINK_OPTS) - list (APPEND _opt_flags "-flto") - endif (HAVE_LINK_OPTS) - if (HAVE_LINK_PLUGIN) - list (APPEND _opt_flags "-fuse-linker-plugin") - endif (HAVE_LINK_PLUGIN) - if(HAVE_LINK_OPTS AND CMAKE_CXX_COMPILER_ID STREQUAL "GNU") - string(REPLACE "." ";" VERSION_LIST "${CMAKE_C_COMPILER_VERSION}") - list(GET VERSION_LIST 0 VER_MAJOR) - find_program(LTO_AR_COMMAND NAMES ${CMAKE_C_COMPILER}-ar gcc-ar-${VER_MAJOR} gcc-ar) - find_program(LTO_RANLIB_COMMAND NAMES ${CMAKE_C_COMPILER}-ranlib gcc-ranlib-${VER_MAJOR} gcc-ranlib) - if(LTO_AR_COMMAND) - set(CMAKE_AR ${LTO_AR_COMMAND}) - message(STATUS "Using LTO-enabled ar: ${CMAKE_AR}") - endif() - if(LTO_RANLIB_COMMAND) - set(CMAKE_RANLIB ${LTO_RANLIB_COMMAND}) - message(STATUS "Using LTO-enabled ranlib: ${CMAKE_RANLIB}") - endif() - endif() - endif (WHOLE_PROG_OPTIM) - - # native instruction set tuning - option (WITH_NATIVE "Use native instruction set" ON) - if (WITH_NATIVE) - check_cxx_accepts_flag ("-mtune=native" HAVE_MTUNE) - if (HAVE_MTUNE) - list (APPEND _opt_flags "-mtune=native") - endif (HAVE_MTUNE) - endif (WITH_NATIVE) - - # default optimization flags, if not set by user - set_default_option (CXX _opt_dbg "-O0" "(^|\ )-O") - set_default_option (CXX _opt_rel "-O3" "(^|\ )-O") - - # use these options for debug builds - no optimizations - add_options (ALL_LANGUAGES "${_prof_DEBUG}" ${_opt_dbg} "-DDEBUG") - - # use these options for release builds - full optimization - add_options (ALL_LANGUAGES "${_prof_RELEASE}" ${_opt_rel} ${_opt_flags}) - option(WITH_NDEBUG "Disable asserts in release mode" ON) - if(WITH_NDEBUG) - add_options (ALL_LANGUAGES "${_prof_RELEASE}" -DNDEBUG) - endif() - -else () - # default information from system - foreach (lang IN ITEMS C CXX Fortran) - if (lang STREQUAL "Fortran") - set (_lang F) - else (lang STREQUAL "Fortran") - set (_lang ${lang}) - endif (lang STREQUAL "Fortran") - foreach (profile IN ITEMS DEBUG RELEASE) - if (NOT CMAKE_${lang}_FLAGS_${profile}) - add_options (${lang} "${_prof_${profile}}" - "$ENV{${_lang}FLAGS} ${CMAKE_${lang}_FLAGS_${profile}_INIT}") - endif (NOT CMAKE_${lang}_FLAGS_${profile}) - endforeach (profile) - endforeach (lang) -endif () diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/UsePrecompHeaders.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Modules/UsePrecompHeaders.cmake deleted file mode 100644 index 94141ff3fe..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/UsePrecompHeaders.cmake +++ /dev/null @@ -1,171 +0,0 @@ -# - Use precompiled headers -# -# precompile_header takes these parameters -# -# language Language in which the header is written; C or CXX. -# -# type Type of target being build, SHARED_LIBRARY, STATIC_LIBRARY -# or EXECUTABLE. -# -# header Relative path within the source tree to the header -# that contains the list of includes to be precompiled. -# This header should not be added to the installation, -# as it will be specific for this project. -# -# target Name of target to be created. All targets that -# use the precompiled header should depend on this target -# so that it is built before them. A variable with this -# name will also be created which contains the file name. -# -# flags_name Name of variable to receive the flags that should be -# added to the command-line. -# -# Example: -# get_target_property (type opmcore TYPE) -# precompile_header (CXX ${type} -# HEADER "opm/core/opm-core-pch.hpp" -# TARGET opmcore_CXX_pch -# FLAGS opmcore_PRECOMP_CXX_FLAGS -# ) -# set_source_files_properties (${opmcore_CXX_SOURCES} PROPERTIES -# OBJECT_DEPENDS "${opmcore_CXX_pch}" -# COMPILE_FLAGS "${opmcore_PRECOMP_CXX_FLAGS}" -# ) - -# get compiler version -include (UseCompVer) -is_compiler_gcc_compatible () - -# reconstruct the compiler command line; this does NOT include the -# DEFINE_SYMBOL that is added for shared libraries. type is the TYPE -# target property. -# see larsch's PrecompiledHeader.cmake: -# and -function (compiler_cmdline language type cmd_name args_name) - # get the compiler for this particular language - set (${cmd_name} "${CMAKE_${language}_COMPILER}" PARENT_SCOPE) - - # in case someone has overridden the compiler (e.g. ccache) - set (_args "${CMAKE_${language}_COMPILER_ARG1}") - - # macro definitions - get_directory_property (_defs DEFINITIONS) - list (APPEND _args "${_defs}") - - # global flags (such as -std=c++11); notice that there are both - # release-dependent and non-release-dependent ones - string (TOUPPER "CMAKE_${language}_FLAGS" _flags) - list (APPEND _args "${${_flags}}") - string (TOUPPER "CMAKE_${language}_FLAGS_${CMAKE_BUILD_TYPE}" _flags) - list (APPEND _args "${${_flags}}") - - # assume that we are always generating position-independent code - # when compiling for a shared library - if (type STREQUAL "SHARED_LIBRARY") - list (APPEND _args "${CMAKE_SHARED_LIBRARY_${language}_FLAGS}") - endif (type STREQUAL "SHARED_LIBRARY") - - # directories included - get_directory_property (_dirs INCLUDE_DIRECTORIES) - foreach (_dir ${_dirs}) - list (APPEND _args "-I${_dir}") - endforeach (_dir) - - # make arguments a real list, and write to output variable - separate_arguments (_args) - set (${args_name} "${_args}" PARENT_SCOPE) -endfunction (compiler_cmdline language type cmd_name args_name) - -function (precompile_header - language type hdr_kw header tgt_kw target flgs_kw flags_name) - - # check "syntax" - if (NOT hdr_kw STREQUAL "HEADER") - message (FATAL "Third token to precompile_header shoulde be \"HEADER\"") - endif (NOT hdr_kw STREQUAL "HEADER") - if (NOT tgt_kw STREQUAL "TARGET") - message (FATAL "Fifth token to precompile_header should be \"TARGET\"") - endif (NOT tgt_kw STREQUAL "TARGET") - if (NOT flgs_kw STREQUAL "FLAGS") - message (FATAL "Seventh token to precompile_header should be \"FLAGS\"") - endif (NOT flgs_kw STREQUAL "FLAGS") - - # check language - if (language STREQUAL "CXX") - set (gcc_lang "c++-header") - elseif (language STREQUAL "C") - set (gcc_lang "c-header") - else (language STREQUAL "CXX") - message (FATAL "Only C or C++ can have precompiled headers") - endif (language STREQUAL "CXX") - - # if no precompiled header was found, then we shouldn't do anything here - if (NOT header) - return () - endif (NOT header) - - # only support precompiled headers if the compiler is gcc >= 3.4 or clang - if (CXX_COMPAT_GCC) - if (CMAKE_COMPILER_IS_GNUCXX) - # genuine GCC; must test version - get_gcc_version (${language} GCC_VERSION) - if (GCC_VERSION VERSION_EQUAL 3.4 OR GCC_VERSION VERSION_GREATER 3.4) - set (_do_pch TRUE) - else () - set (_do_pch FALSE) - endif () - elseif (CMAKE_COMPILER_IS_CLANGXX) - # any Clang version that is new enough to compile us can do this - set (_do_pch TRUE) - else () - set (_do_pch FALSE) - endif () - if (_do_pch) - # command-line used to compile modules in this kind of target - compiler_cmdline (${language} ${type} _cmd _args) - - # gcc will include any configurations which are in a directory - # with the same name as the header included - set (_pch_dir "CMakeFiles/pch") - set (_pch_file "${_pch_dir}/${header}.gch/${target}") - - # make sure that output directory exists - get_filename_component (_outdir "${PROJECT_BINARY_DIR}/${_pch_file}" PATH) - file (MAKE_DIRECTORY ${_outdir}) - - # we need to generate the precompiled header in the output tree, but - # at the same time prevent the compiler to pick up the header from the - # source tree. getting the order of the include paths right is fragile - # in CMake. by copying the header, we can put the precompile dump - # right next to it and have the compiler pick it up there - add_custom_command ( - OUTPUT "${_pch_dir}/${header}" - COMMAND ${CMAKE_COMMAND} - ARGS -E copy "${PROJECT_SOURCE_DIR}/${header}" "${_pch_dir}/${header}" - DEPENDS "${PROJECT_SOURCE_DIR}/${header}" - ) - - # add a makefile rule to create the precompiled header - add_custom_command ( - OUTPUT ${PROJECT_BINARY_DIR}/${_pch_file} - COMMAND ${_cmd} - ARGS ${_args} "-o" "${_pch_file}" "-x" "${gcc_lang}" "-c" "${_pch_dir}/${header}" - DEPENDS "${_pch_dir}/${header}" - COMMENT "Precompiling headers ${_pch_file}" - ) - - # create a phony target that is always built, but which only checks - # if the header file is OK (i.e. the header only gets rebuilt if - # necessary) - add_custom_target (${target} ALL - DEPENDS ${PROJECT_BINARY_DIR}/${_pch_file} - ) - - # these flags need to be added to the target - set (${target} "${_pch_file}" PARENT_SCOPE) - set (${flags_name} "-Winvalid-pch -include ${_pch_dir}/${header}" PARENT_SCOPE) - endif () - endif () - -endfunction (precompile_header - language type header tgt_kw target flgs_kw flags_name) diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/UseStaticAnalysis.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Modules/UseStaticAnalysis.cmake deleted file mode 100644 index 03651f9d2a..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/UseStaticAnalysis.cmake +++ /dev/null @@ -1,63 +0,0 @@ -# Add static analysis tests for a given source file - -macro(setup_static_analysis_tools) - find_package(CppCheck) - if(CMAKE_EXPORT_COMPILE_COMMANDS) - find_package(ClangCheck) - else() - message(STATUS "Disabling clang-check as CMAKE_EXPORT_COMPILE_COMMANDS is not enabled") - endif() - if(OPM_COMMON_ROOT) - set(DIR ${OPM_COMMON_ROOT}) - elseif(OPM_MACROS_ROOT) - set(DIR ${OPM_MACROS_ROOT}) - else() - set(DIR ${CMAKE_CURRENT_SOURCE_DIR}) - endif() - if(CPPCHECK_FOUND) - file(COPY ${DIR}/cmake/Scripts/cppcheck-test.sh - DESTINATION bin - FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) - endif() - if(CLANGCHECK_FOUND AND CMAKE_EXPORT_COMPILE_COMMANDS) - configure_file(${DIR}/cmake/Scripts/clang-check-test.sh.in - ${CMAKE_BINARY_DIR}/CMakeFiles/clang-check-test.sh) - file(COPY ${CMAKE_BINARY_DIR}/CMakeFiles/clang-check-test.sh - DESTINATION bin - FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) - endif() -endmacro() - -function(add_static_analysis_tests sources includes) - if(CPPCHECK_FOUND OR (CLANGCHECK_FOUND AND CMAKE_EXPORT_COMPILE_COMMANDS)) - foreach(dep ${${includes}}) - list(APPEND IPATHS -I ${dep}) - endforeach() - foreach(src ${${sources}}) - if(src MATCHES "TARGET_OBJECTS:") - string(REGEX REPLACE "\\$" "\\1" TGT ${src}) - get_target_property(src ${TGT} SOURCES) - endif() - if(IS_ABSOLUTE ${src}) - file(RELATIVE_PATH name ${PROJECT_SOURCE_DIR} ${src}) - else() - set(name ${src}) - set(src ${PROJECT_SOURCE_DIR}/${src}) - endif() - if(CPPCHECK_FOUND) - if(NOT TEST cppcheck+${name}) - add_test(NAME cppcheck+${name} - COMMAND bin/cppcheck-test.sh ${CPPCHECK_PROGRAM} ${src} ${IPATHS} - CONFIGURATIONS analyze cppcheck) - endif() - endif() - if(CLANGCHECK_FOUND AND CMAKE_EXPORT_COMPILE_COMMANDS) - if(NOT TEST clang-check+${name}) - add_test(NAME clang-check+${name} - COMMAND bin/clang-check-test.sh ${CLANGCHECK_PROGRAM} ${src} - CONFIGURATIONS analyze clang-check) - endif() - endif() - endforeach() - endif() -endfunction() diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/UseSystemInfo.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Modules/UseSystemInfo.cmake deleted file mode 100644 index b4b3f8af84..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/UseSystemInfo.cmake +++ /dev/null @@ -1,198 +0,0 @@ -# - Print CMake and OS distribution version -# -function (system_info) - message (STATUS "CMake version: ${CMAKE_VERSION}") - if (CMAKE_SYSTEM MATCHES "Linux") - distro_name (DISTRO_NAME) - message (STATUS "Linux distribution: ${DISTRO_NAME}") - elseif (CMAKE_SYSTEM MATCHES "Darwin") - sw_vers (OS_VERSION) - message (STATUS "${OS_VERSION}") - else (CMAKE_SYSTEM MATCHES "Linux") - message (STATUS "Operating system: ${CMAKE_SYSTEM}") - endif (CMAKE_SYSTEM MATCHES "Linux") - - target_architecture (TARGET_CPU) - message (STATUS "Target architecture: ${TARGET_CPU}") -endfunction (system_info) - -function (sw_vers varname) - # query operating system for information - exec_program (sw_vers OUTPUT_VARIABLE _vers) - # split multi-line into various fields - string (REPLACE "\n" ";" _vers "${_vers}") - string (REPLACE ":" ";" _vers "${_vers}") - # get the various fields - list (GET _vers 1 _prod_name) - list (GET _vers 3 _prod_vers) - list (GET _vers 5 _prod_build) - # remove extraneous whitespace - string (STRIP "${_prod_name}" _prod_name) - string (STRIP "${_prod_vers}" _prod_vers) - string (STRIP "${_prod_build}" _prod_build) - # assemble result variable - set (${varname} "${_prod_name} version: ${_prod_vers} (${_prod_build})" PARENT_SCOPE) -endfunction (sw_vers varname) - -# probe various system files that may be found -function (distro_name varname) - file (GLOB has_os_release /etc/os-release) - file (GLOB has_lsb_release /etc/lsb-release) - file (GLOB has_sys_release /etc/system-release) - file (GLOB has_redhat_release /etc/redhat-release) - set (_descr) - # start with /etc/os-release, - # see - if (NOT has_os_release STREQUAL "") - read_release (PRETTY_NAME FROM /etc/os-release INTO _descr) - # previous "standard", used on older Ubuntu and Debian - elseif (NOT has_lsb_release STREQUAL "") - read_release (DISTRIB_DESCRIPTION FROM /etc/lsb-release INTO _descr) - endif (NOT has_os_release STREQUAL "") - # RHEL/CentOS etc. has just a text-file - if (NOT _descr) - if (NOT has_sys_release STREQUAL "") - file (READ /etc/system-release _descr) - elseif (NOT has_redhat_release STREQUAL "") - file (READ /etc/redhat-release _descr) - else (NOT has_sys_release STREQUAL "") - # no yet known release file found - set (_descr "unknown") - endif (NOT has_sys_release STREQUAL "") - endif (NOT _descr) - # return from function (into appropriate variable) - string (STRIP "${_descr}" _descr) - set (${varname} "${_descr}" PARENT_SCOPE) -endfunction (distro_name varname) - -# read property from the newer /etc/os-release -function (read_release valuename FROM filename INTO varname) - file (STRINGS ${filename} _distrib - REGEX "^${valuename}=" - ) - string (REGEX REPLACE - "^${valuename}=\"?\(.*\)" "\\1" ${varname} "${_distrib}" - ) - # remove trailing quote that got globbed by the wildcard (greedy match) - string (REGEX REPLACE - "\"$" "" ${varname} "${${varname}}" - ) - set (${varname} "${${varname}}" PARENT_SCOPE) -endfunction (read_release valuename FROM filename INTO varname) - -# the following code is adapted from commit f7467762 of the code at -# -# which is Copyright (c) 2012 Petroules Corporation, and which at the -# time of download (2013-04-07 12:30 CET) is made available with a BSD license. -# -# it attempts to compile a program which detects the architecture from the -# preprocessor symbols and communicate this back to us through an error message(!) -function (target_architecture output_var) - # OS X is capable of building for *several* architectures at once in - # the Mach-O binary, and there is a variable that tells us which those - # are, but they may be in any order, so they must be normalized - if (APPLE AND CMAKE_OSX_ARCHITECTURES) - # detect each of the possible candidates as a separate flag - set (osx_arch_list i386 x86_64) - foreach (osx_arch IN ITEMS ${CMAKE_OSX_ARCHITECTURES}) - foreach (candidate IN LISTS osx_arch_list) - if ("${osx_arch}" STREQUAL "${candidate}") - set (osx_arch_${candidate} TRUE) - endif ("${osx_arch}" STREQUAL "${candidate}") - endforeach (candidate) - endforeach (osx_arch) - - # add all architectures back in normalized order - foreach (candidate IN LISTS osx_arch_list) - if (osx_arch_${candidate}) - list (APPEND ARCH ${candidate}) - endif (osx_arch_${candidate}) - endforeach (candidate) - - else (APPLE AND CMAKE_OSX_ARCHITECTURES) - # use the preprocessor defines to determine which target architectures - # that are available - set (arch_c_src " - #if defined(__arm__) || defined(__TARGET_ARCH_ARM) - # if defined(__ARM_ARCH_7__) \\ - || defined(__ARM_ARCH_7A__) \\ - || defined(__ARM_ARCH_7R__) \\ - || defined(__ARM_ARCH_7M__) \\ - || (defined(__TARGET_ARCH_ARM) && __TARGET_ARCH_ARM-0 >= 7) - # error cmake_ARCH armv7 - # elif defined(__ARM_ARCH_6__) \\ - || defined(__ARM_ARCH_6J__) \\ - || defined(__ARM_ARCH_6T2__) \\ - || defined(__ARM_ARCH_6Z__) \\ - || defined(__ARM_ARCH_6K__) \\ - || defined(__ARM_ARCH_6ZK__) \\ - || defined(__ARM_ARCH_6M__) \\ - || (defined(__TARGET_ARCH_ARM) && __TARGET_ARCH_ARM-0 >= 6) - # error cmake_ARCH armv6 - # elif defined(__ARM_ARCH_5TEJ__) \\ - || (defined(__TARGET_ARCH_ARM) && __TARGET_ARCH_ARM-0 >= 5) - # error cmake_ARCH armv5 - # else - # error cmake_ARCH arm - # endif - #elif defined(__i386) \\ - || defined(__i386__) \\ - || defined(_M_IX86) - # error cmake_ARCH i386 - #elif defined(__x86_64) \\ - || defined(__x86_64__) \\ - || defined(__amd64) \\ - || defined(_M_X64) - # error cmake_ARCH x86_64 - #elif defined(__ia64) \\ - || defined(__ia64__) \\ - || defined(_M_IA64) - # error cmake_ARCH ia64 - #elif defined(__ppc__) \\ - || defined(__ppc) \\ - || defined(__powerpc__) \\ - || defined(_ARCH_COM) \\ - || defined(_ARCH_PWR) \\ - || defined(_ARCH_PPC) \\ - || defined(_M_MPPC) \\ - || defined(_M_PPC) - # if defined(__ppc64__) \\ - || defined(__powerpc64__) \\ - || defined(__64BIT__) - # error cmake_ARCH ppc64 - # else - # error cmake_ARCH ppc - # endif - #else - # error cmake_ARCH unknown - #endif - ") - - # write a temporary program that can be compiled to get the result - set (tmp_dir "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp") - set (arch_c "${tmp_dir}/arch.c") - file (WRITE "${arch_c}" "${arch_c_src}") - try_compile ( - compile_result_unused - "${tmp_dir}" - "${arch_c}" - CMAKE_FLAGS CMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES} - OUTPUT_VARIABLE ARCH - ) - - # parse the architecture name from the compiler output - string (REGEX MATCH "cmake_ARCH ([a-zA-Z0-9_]+)" ARCH "${ARCH}") - - # get rid of the value marker leaving just the architecture name - string (REPLACE "cmake_ARCH " "" ARCH "${ARCH}") - - # if we are compiling with an unknown architecture this variable should - # already be set to "unknown" but in the case that it's empty (i.e. due - # to a typo in the code), then set it to unknown - if (NOT ARCH) - set (ARCH "unknown") - endif() - endif() - - set (${output_var} "${ARCH}" PARENT_SCOPE) -endfunction() diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/UseThreads.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Modules/UseThreads.cmake deleted file mode 100644 index cf1e97b22b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/UseThreads.cmake +++ /dev/null @@ -1,53 +0,0 @@ -# - Use PThread features -# -# Synopsis: -# -# find_threads (module) -# -# where: -# -# module Name of the module to which Threads support -# etc. should be added, e.g. "opm-core". -# -# Note: Compiler flags are always added globally, to avoid ABI -# incompatibility problems. -# -# It is assumed that the following variables are available -# -# ${module}_QUIET Verbosity level of the parent's find module -# ${module}_LIBRARIES List of libraries to which Thread support will be added -# -# Example: -# find_threads (opm-core) - -include (AddOptions) -include (UseCompVer) -is_compiler_gcc_compatible () - -macro(find_threads opm) -# default is that Threads are added -option(USE_PTHREAD "Use pthreads" ON) - -# if USE_PTHREAD is enabled then check and set HAVE_PTHREAD -if( USE_PTHREAD ) - # threading library - set (CMAKE_THREAD_PREFER_PTHREAD TRUE) - find_package (Threads ${${opm}_QUIET}) - if (CMAKE_USE_PTHREADS_INIT) - list (APPEND ${opm}_LIBRARIES ${CMAKE_THREAD_LIBS_INIT}) - if (CXX_COMPAT_GCC) - check_cxx_accepts_flag ("-pthread" HAVE_PTHREAD) - if(HAVE_PTHREAD) - add_options (ALL_LANGUAGES ALL_BUILDS "-pthread") - set(HAVE_PTHREAD "1") - endif(HAVE_PTHREAD) - endif (CXX_COMPAT_GCC) - else(CMAKE_USE_PTHREADS_INIT) - set(USE_PTHREAD OFF) - endif (CMAKE_USE_PTHREADS_INIT) -else( USE_PTHREAD ) - # reset HAVE_PTHREAD - set(HAVE_PTHREAD "") -endif( USE_PTHREAD ) - -endmacro(find_threads opm) diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/UseVCSInfo.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Modules/UseVCSInfo.cmake deleted file mode 100644 index 642102e94a..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/UseVCSInfo.cmake +++ /dev/null @@ -1,102 +0,0 @@ -# - Get version control information from source tree -# -# Sets the following variables -# -# VCS_SYSTEM Currently, this will only be "git", or empty if -# no source code control system is found. -# -# VCS_SHA1 Hash code of the last commit. If this is empty, -# then no source code repository was found. -# -# VCS_DECOR Characters that denotes any local modifications: -# "*" - Unstaged local changes -# "+" - Staged, but not committed, local changes -# "%" - Untracked local files -function (vcs_info) - # if we haven't located git yet, then do it now - if (NOT GIT_FOUND) - find_package (Git) - endif (NOT GIT_FOUND) - - # if git is not installed (unpacked tarball), then just state that - # the version practically is unknown - set (VCS_DECOR "") - if (GIT_FOUND) - set (VCS_SYSTEM "git") - - # assume that we have a .git subdirectory under the source directory; - # if we have a bare repository, then we won't be able to build in there - # and we won't be able to identify the git dir to use from only a work - # tree, so we handle that like a regular unpacked tarball - - # exec_program is used because execute_process is buggy on common - # platforms (notable CMake 2.8.7 in Ubuntu Precise 12.04) - - # get hash code - exec_program ( - ${GIT_EXECUTABLE} ${PROJECT_SOURCE_DIR} - ARGS rev-parse --short --verify HEAD - OUTPUT_VARIABLE VCS_SHA1 - RETURN_VALUE has_sha - ) - - # exec_program mashes together output and error - if (NOT ${has_sha} EQUAL 0) - set (VCS_SHA1 "") - endif (NOT ${has_sha} EQUAL 0) - - # only proceed if we actually found a source tree in there - if (VCS_SHA1) - # check for unstaged local changes - exec_program ( - ${GIT_EXECUTABLE} ${PROJECT_SOURCE_DIR} - ARGS diff --no-ext-diff --quiet --exit-code - RETURN_VALUE dirty - OUTPUT_VARIABLE _dummy - ) - if (NOT ${dirty} EQUAL 0) - list (APPEND VCS_DECOR "*") - endif (NOT ${dirty} EQUAL 0) - - # check for staged local changes - exec_program ( - ${GIT_EXECUTABLE} ${PROJECT_SOURCE_DIR} - ARGS diff-index --no-ext-diff --cached --quiet --exit-code HEAD -- - RETURN_VALUE staged - OUTPUT_VARIABLE _dummy - ) - if (NOT ${staged} EQUAL 0) - list (APPEND VCS_DECOR "+") - endif (NOT ${staged} EQUAL 0) - - # check for untracked files - exec_program ( - ${GIT_EXECUTABLE} ${PROJECT_SOURCE_DIR} - ARGS ls-files --others --exclude-standard - OUTPUT_VARIABLE untracked - ) - if (untracked) - list (APPEND VCS_DECOR "%") - endif (untracked) - - # convert list to regular string - string (REPLACE ";" "" VCS_DECOR "${VCS_DECOR}") - endif (VCS_SHA1) - else (GIT_FOUND) - set (VCS_SYSTEM "") - set (VCS_SHA1 "") - set (VCS_DECOR "") - endif (GIT_FOUND) - - # diagnostic output - if (VCS_SYSTEM AND VCS_SHA1) - message (STATUS "Source code repository: ${VCS_SYSTEM} ${VCS_SHA1}${VCS_DECOR}") - else (VCS_SYSTEM AND VCS_SHA1) - message (STATUS "Source code repository: not found!") - endif (VCS_SYSTEM AND VCS_SHA1) - - # export to parent context - set (VCS_SYSTEM "${VCS_SYSTEM}" PARENT_SCOPE) - set (VCS_SHA1 "${VCS_SHA1}" PARENT_SCOPE) - set (VCS_DECOR "${VCS_DECOR}" PARENT_SCOPE) -endfunction (vcs_info) diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/UseVersion.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Modules/UseVersion.cmake deleted file mode 100644 index 0d8e0e840a..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/UseVersion.cmake +++ /dev/null @@ -1,107 +0,0 @@ -# - Write version information into the source code -# -# Add an unconditional target to the Makefile which checks the current -# SHA of the source directory and write to a header file if and *only* -# if this has changed (thus we avoid unnecessary rebuilds). By having -# this in the Makefile, we get updated version information even though -# we haven't done any reconfiguring. -# -# The time it takes to probe the VCS for this information and write it -# to the miniature file in negligable. -# -# If the build type is Debug, then we only write a static version -# information as it gets tiresome to rebuild the project everytime one -# makes changes to any of the unit tests. - -message("-- Writing version information to local header project-version.h") -string (TIMESTAMP build_timestamp "%Y-%m-%d at %H:%M:%S hrs") - -string (TOUPPER "${CMAKE_BUILD_TYPE}" cmake_build_type_upper_) -if (cmake_build_type_upper_ MATCHES DEBUG) - file (WRITE "${PROJECT_BINARY_DIR}/project-version.h" - "#ifndef OPM_GENERATED_OPM_VERSION_HEADER_INCLUDED\n" - "#define OPM_GENERATED_OPM_VERSION_HEADER_INCLUDED\n" - "#define PROJECT_VERSION_NAME \"${${project}_LABEL}\"\n" - "#define PROJECT_VERSION_HASH \"debug\"\n" - "#define PROJECT_VERSION \"${${project}_LABEL} (debug)\"\n" - "#define BUILD_TIMESTAMP \"${build_timestamp}\"\n" - "#endif // OPM_GENERATED_OPM_VERSION_HEADER_INCLUDED\n" - ) -else () - if (NOT GIT_FOUND) - find_package (Git) - endif () - - # if git is *still* not found means it is not present on the - # system, so there is "no" way we can update the SHA. notice - # that this is a slightly different version of the label than - # above. - if (NOT GIT_FOUND) - file (WRITE "${PROJECT_BINARY_DIR}/project-version.h" - "#ifndef OPM_GENERATED_OPM_VERSION_HEADER_INCLUDED\n" - "#define OPM_GENERATED_OPM_VERSION_HEADER_INCLUDED\n" - "#define PROJECT_VERSION_NAME \"${${project}_LABEL}\"\n" - "#define PROJECT_VERSION_HASH \"unknown git version\"\n" - "#define PROJECT_VERSION \"${${project}_LABEL} (unknown git version)\"\n" - "#define BUILD_TIMESTAMP \"${build_timestamp}\"\n" - "#endif // OPM_GENERATED_OPM_VERSION_HEADER_INCLUDED\n" - ) - else () - add_custom_target (update-version ALL - COMMAND ${CMAKE_COMMAND} - -DCMAKE_HOME_DIRECTORY=${CMAKE_HOME_DIRECTORY} - -DGIT_EXECUTABLE=${GIT_EXECUTABLE} - -DPROJECT_SOURCE_DIR=${PROJECT_SOURCE_DIR} - -DPROJECT_BINARY_DIR=${PROJECT_BINARY_DIR} - -DPROJECT_LABEL=${${project}_LABEL} - -P ${OPM_MACROS_ROOT}/cmake/Scripts/WriteVerSHA.cmake - COMMENT "Updating version information" - ) - - # the target above gets built every time thanks to the "ALL" modifier, - # but it must also be done before the main library so it can pick up - # any changes it does. - if (${project}_TARGET) - add_dependencies (${${project}_TARGET} update-version) - endif () - endif () -endif () - -# safety precaution: check that we don't have version number mismatch. - -# first get the name of the module (e.g. "core") -set (_module_regexp "([^-]+)-(.*)") -string (REGEX REPLACE "${_module_regexp}" "\\1" _suite_name "${project}") -string (REGEX REPLACE "${_module_regexp}" "\\2" _module_name "${project}") - -# if we have a version number it must be in this file, e.g. opm/core/version.h -set (_rel_ver_h "${${project}_DIR}/${_module_name}/version.h") -set (_version_h "${PROJECT_SOURCE_DIR}/${_rel_ver_h}") - -# not all modules have version files, so only check if they do -if (EXISTS "${_version_h}") - # uppercase versions which is used in the file - string (TOUPPER "${_suite_name}" _suite_upper) - string (TOUPPER "${_module_name}" _module_upper) - - # scan the files for version define for major version - set (_major_regexp "#define[ ]+${_suite_upper}_${_module_upper}_VERSION_MAJOR[ ]+([0-9]*)") - file (STRINGS "${_version_h}" _version_h_major REGEX "${_major_regexp}") - string (REGEX REPLACE "${_major_regexp}" "\\1" _version_h_major "${_version_h_major}") - - # exactly the same, but minor version (making a macro is more lines...) - set (_minor_regexp "#define[ ]+${_suite_upper}_${_module_upper}_VERSION_MINOR[ ]+([0-9]*)") - file (STRINGS "${_version_h}" _version_h_minor REGEX "${_minor_regexp}") - string (REGEX REPLACE "${_minor_regexp}" "\\1" _version_h_minor "${_version_h_minor}") - - # compare what we got from the file with what we have defined here - if (NOT (("${_version_h_major}" EQUAL "${${project}_VERSION_MAJOR}") - AND ("${_version_h_minor}" EQUAL "${${project}_VERSION_MINOR}"))) - set (_proj_ver "${${project}_VERSION_MAJOR}.${${project}_VERSION_MINOR}") - set (_file_ver "${_version_h_major}.${_version_h_minor}") - message (AUTHOR_WARNING - "Version in build system (dune.module) is \"${_proj_ver}\", " - "but version in source (${_rel_ver_h}) is \"${_file_ver}\"" - ) - endif () -endif () diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/UseWarnings.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Modules/UseWarnings.cmake deleted file mode 100644 index 5bece95e2e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/UseWarnings.cmake +++ /dev/null @@ -1,19 +0,0 @@ -# - Turn on warnings when compiling - -include (AddOptions) -include (UseCompVer) -is_compiler_gcc_compatible () - -if (CXX_COMPAT_GCC) - # default warnings flags, if not set by user - set_default_option (CXX _warn_flag "-Wall -Wextra -Wshadow" "(^|\ )-W") - if (_warn_flag) - message (STATUS "All warnings enabled: ${_warn_flag}") - add_options (ALL_LANGUAGES ALL_BUILDS "${_warn_flag}") - endif (_warn_flag) -endif () - -option(SILENCE_EXTERNAL_WARNINGS "Disable some warnings from external packages (requires GCC 4.6 or newer)" OFF) -if(SILENCE_EXTERNAL_WARNINGS AND CXX_COMPAT_GCC) - add_definitions(-DSILENCE_EXTERNAL_WARNINGS) -endif() diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/compat-2.8.3/CMakeParseArguments.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Modules/compat-2.8.3/CMakeParseArguments.cmake deleted file mode 100644 index 7ce4c49ae5..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/compat-2.8.3/CMakeParseArguments.cmake +++ /dev/null @@ -1,138 +0,0 @@ -# CMAKE_PARSE_ARGUMENTS( args...) -# -# CMAKE_PARSE_ARGUMENTS() is intended to be used in macros or functions for -# parsing the arguments given to that macro or function. -# It processes the arguments and defines a set of variables which hold the -# values of the respective options. -# -# The argument contains all options for the respective macro, -# i.e. keywords which can be used when calling the macro without any value -# following, like e.g. the OPTIONAL keyword of the install() command. -# -# The argument contains all keywords for this macro -# which are followed by one value, like e.g. DESTINATION keyword of the -# install() command. -# -# The argument contains all keywords for this macro -# which can be followed by more than one value, like e.g. the TARGETS or -# FILES keywords of the install() command. -# -# When done, CMAKE_PARSE_ARGUMENTS() will have defined for each of the -# keywords listed in , and -# a variable composed of the given -# followed by "_" and the name of the respective keyword. -# These variables will then hold the respective value from the argument list. -# For the keywords this will be TRUE or FALSE. -# -# All remaining arguments are collected in a variable -# _UNPARSED_ARGUMENTS, this can be checked afterwards to see whether -# your macro was called with unrecognized parameters. -# -# As an example here a my_install() macro, which takes similar arguments as the -# real install() command: -# -# function(MY_INSTALL) -# set(options OPTIONAL FAST) -# set(oneValueArgs DESTINATION RENAME) -# set(multiValueArgs TARGETS CONFIGURATIONS) -# cmake_parse_arguments(MY_INSTALL "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} ) -# ... -# -# Assume my_install() has been called like this: -# my_install(TARGETS foo bar DESTINATION bin OPTIONAL blub) -# -# After the cmake_parse_arguments() call the macro will have set the following -# variables: -# MY_INSTALL_OPTIONAL = TRUE -# MY_INSTALL_FAST = FALSE (this option was not used when calling my_install() -# MY_INSTALL_DESTINATION = "bin" -# MY_INSTALL_RENAME = "" (was not used) -# MY_INSTALL_TARGETS = "foo;bar" -# MY_INSTALL_CONFIGURATIONS = "" (was not used) -# MY_INSTALL_UNPARSED_ARGUMENTS = "blub" (no value expected after "OPTIONAL" -# -# You can the continue and process these variables. -# -# Keywords terminate lists of values, e.g. if directly after a one_value_keyword -# another recognized keyword follows, this is interpreted as the beginning of -# the new option. -# E.g. my_install(TARGETS foo DESTINATION OPTIONAL) would result in -# MY_INSTALL_DESTINATION set to "OPTIONAL", but MY_INSTALL_DESTINATION would -# be empty and MY_INSTALL_OPTIONAL would be set to TRUE therefor. - -#============================================================================= -# Copyright 2010 Alexander Neundorf -# -# Distributed under the OSI-approved BSD License (the "License"); -# see accompanying file Copyright.txt for details. -# -# This software is distributed WITHOUT ANY WARRANTY; without even the -# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the License for more information. -#============================================================================= -# (To distribute this file outside of CMake, substitute the full -# License text for the above reference.) - - -if(__CMAKE_PARSE_ARGUMENTS_INCLUDED) - return() -endif() -set(__CMAKE_PARSE_ARGUMENTS_INCLUDED TRUE) - - -function(CMAKE_PARSE_ARGUMENTS prefix _optionNames _singleArgNames _multiArgNames) - # first set all result variables to empty/FALSE - foreach(arg_name ${_singleArgNames} ${_multiArgNames}) - set(${prefix}_${arg_name}) - endforeach(arg_name) - - foreach(option ${_optionNames}) - set(${prefix}_${option} FALSE) - endforeach(option) - - set(${prefix}_UNPARSED_ARGUMENTS) - - set(insideValues FALSE) - set(currentArgName) - - # now iterate over all arguments and fill the result variables - foreach(currentArg ${ARGN}) - list(FIND _optionNames "${currentArg}" optionIndex) # ... then this marks the end of the arguments belonging to this keyword - list(FIND _singleArgNames "${currentArg}" singleArgIndex) # ... then this marks the end of the arguments belonging to this keyword - list(FIND _multiArgNames "${currentArg}" multiArgIndex) # ... then this marks the end of the arguments belonging to this keyword - - if(${optionIndex} EQUAL -1 AND ${singleArgIndex} EQUAL -1 AND ${multiArgIndex} EQUAL -1) - if(insideValues) - if("${insideValues}" STREQUAL "SINGLE") - set(${prefix}_${currentArgName} ${currentArg}) - set(insideValues FALSE) - elseif("${insideValues}" STREQUAL "MULTI") - list(APPEND ${prefix}_${currentArgName} ${currentArg}) - endif() - else(insideValues) - list(APPEND ${prefix}_UNPARSED_ARGUMENTS ${currentArg}) - endif(insideValues) - else() - if(NOT ${optionIndex} EQUAL -1) - set(${prefix}_${currentArg} TRUE) - set(insideValues FALSE) - elseif(NOT ${singleArgIndex} EQUAL -1) - set(currentArgName ${currentArg}) - set(${prefix}_${currentArgName}) - set(insideValues "SINGLE") - elseif(NOT ${multiArgIndex} EQUAL -1) - set(currentArgName ${currentArg}) - set(${prefix}_${currentArgName}) - set(insideValues "MULTI") - endif() - endif() - - endforeach(currentArg) - - # propagate the result variables to the caller: - foreach(arg_name ${_singleArgNames} ${_multiArgNames} ${_optionNames}) - set(${prefix}_${arg_name} ${${prefix}_${arg_name}} PARENT_SCOPE) - endforeach(arg_name) - set(${prefix}_UNPARSED_ARGUMENTS ${${prefix}_UNPARSED_ARGUMENTS} PARENT_SCOPE) - -endfunction(CMAKE_PARSE_ARGUMENTS _options _singleArgs _multiArgs) diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/compat-2.8.5/FindGit.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Modules/compat-2.8.5/FindGit.cmake deleted file mode 100644 index af316d81c5..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/compat-2.8.5/FindGit.cmake +++ /dev/null @@ -1,47 +0,0 @@ -# The module defines the following variables: -# GIT_EXECUTABLE - path to git command line client -# GIT_FOUND - true if the command line client was found -# Example usage: -# find_package(Git) -# if(GIT_FOUND) -# message("git found: ${GIT_EXECUTABLE}") -# endif() - -#============================================================================= -# Copyright 2010 Kitware, Inc. -# -# Distributed under the OSI-approved BSD License (the "License"); -# see accompanying file Copyright.txt for details. -# -# This software is distributed WITHOUT ANY WARRANTY; without even the -# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the License for more information. -#============================================================================= -# (To distribute this file outside of CMake, substitute the full -# License text for the above reference.) - -# Look for 'git' or 'eg' (easy git) -# -set(git_names git eg) - -# Prefer .cmd variants on Windows unless running in a Makefile -# in the MSYS shell. -# -if(WIN32) - if(NOT CMAKE_GENERATOR MATCHES "MSYS") - set(git_names git.cmd git eg.cmd eg) - endif() -endif() - -find_program(GIT_EXECUTABLE - NAMES ${git_names} - PATH_SUFFIXES Git/cmd Git/bin - DOC "git command line client" - ) -mark_as_advanced(GIT_EXECUTABLE) - -# Handle the QUIETLY and REQUIRED arguments and set GIT_FOUND to TRUE if -# all listed variables are TRUE - -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(Git DEFAULT_MSG GIT_EXECUTABLE) diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/compat-2.8.7/CMakePushCheckState.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Modules/compat-2.8.7/CMakePushCheckState.cmake deleted file mode 100644 index 0a42128183..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/compat-2.8.7/CMakePushCheckState.cmake +++ /dev/null @@ -1,61 +0,0 @@ -# This module defines two macros: -# CMAKE_PUSH_CHECK_STATE() -# and -# CMAKE_POP_CHECK_STATE() -# These two macros can be used to save and restore the state of the variables -# CMAKE_REQUIRED_FLAGS, CMAKE_REQUIRED_DEFINITIONS, CMAKE_REQUIRED_LIBRARIES -# and CMAKE_REQUIRED_INCLUDES used by the various Check-files coming with CMake, -# like e.g. check_function_exists() etc. -# The variable contents are pushed on a stack, pushing multiple times is supported. -# This is useful e.g. when executing such tests in a Find-module, where they have to be set, -# but after the Find-module has been executed they should have the same value -# as they had before. -# -# Usage: -# cmake_push_check_state() -# set(CMAKE_REQUIRED_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS} -DSOME_MORE_DEF) -# check_function_exists(...) -# cmake_pop_check_state() - -#============================================================================= -# Copyright 2006-2011 Alexander Neundorf, -# -# Distributed under the OSI-approved BSD License (the "License"); -# see accompanying file Copyright.txt for details. -# -# This software is distributed WITHOUT ANY WARRANTY; without even the -# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the License for more information. -#============================================================================= -# (To distribute this file outside of CMake, substitute the full -# License text for the above reference.) - - -MACRO(CMAKE_PUSH_CHECK_STATE) - - IF(NOT DEFINED _CMAKE_PUSH_CHECK_STATE_COUNTER) - SET(_CMAKE_PUSH_CHECK_STATE_COUNTER 0) - ENDIF() - - MATH(EXPR _CMAKE_PUSH_CHECK_STATE_COUNTER "${_CMAKE_PUSH_CHECK_STATE_COUNTER}+1") - - SET(_CMAKE_REQUIRED_INCLUDES_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER} ${CMAKE_REQUIRED_INCLUDES}) - SET(_CMAKE_REQUIRED_DEFINITIONS_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER} ${CMAKE_REQUIRED_DEFINITIONS}) - SET(_CMAKE_REQUIRED_LIBRARIES_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER} ${CMAKE_REQUIRED_LIBRARIES}) - SET(_CMAKE_REQUIRED_FLAGS_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER} ${CMAKE_REQUIRED_FLAGS}) -ENDMACRO(CMAKE_PUSH_CHECK_STATE) - -MACRO(CMAKE_POP_CHECK_STATE) - -# don't pop more than we pushed - IF("${_CMAKE_PUSH_CHECK_STATE_COUNTER}" GREATER "0") - - SET(CMAKE_REQUIRED_INCLUDES ${_CMAKE_REQUIRED_INCLUDES_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER}}) - SET(CMAKE_REQUIRED_DEFINITIONS ${_CMAKE_REQUIRED_DEFINITIONS_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER}}) - SET(CMAKE_REQUIRED_LIBRARIES ${_CMAKE_REQUIRED_LIBRARIES_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER}}) - SET(CMAKE_REQUIRED_FLAGS ${_CMAKE_REQUIRED_FLAGS_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER}}) - - MATH(EXPR _CMAKE_PUSH_CHECK_STATE_COUNTER "${_CMAKE_PUSH_CHECK_STATE_COUNTER}-1") - ENDIF() - -ENDMACRO(CMAKE_POP_CHECK_STATE) diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/compat-2.8.7/FindBLAS.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Modules/compat-2.8.7/FindBLAS.cmake deleted file mode 100644 index 9b76d909c1..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/compat-2.8.7/FindBLAS.cmake +++ /dev/null @@ -1,624 +0,0 @@ -# - Find BLAS library -# This module finds an installed fortran library that implements the BLAS -# linear-algebra interface (see http://www.netlib.org/blas/). -# The list of libraries searched for is taken -# from the autoconf macro file, acx_blas.m4 (distributed at -# http://ac-archive.sourceforge.net/ac-archive/acx_blas.html). -# -# This module sets the following variables: -# BLAS_FOUND - set to true if a library implementing the BLAS interface -# is found -# BLAS_LINKER_FLAGS - uncached list of required linker flags (excluding -l -# and -L). -# BLAS_LIBRARIES - uncached list of libraries (using full path name) to -# link against to use BLAS -# BLAS95_LIBRARIES - uncached list of libraries (using full path name) -# to link against to use BLAS95 interface -# BLAS95_FOUND - set to true if a library implementing the BLAS f95 interface -# is found -# BLA_STATIC if set on this determines what kind of linkage we do (static) -# BLA_VENDOR if set checks only the specified vendor, if not set checks -# all the possibilities -# BLA_F95 if set on tries to find the f95 interfaces for BLAS/LAPACK -########## -### List of vendors (BLA_VENDOR) valid in this module -## Goto,ATLAS PhiPACK,CXML,DXML,SunPerf,SCSL,SGIMATH,IBMESSL,Intel10_32 (intel mkl v10 32 bit),Intel10_64lp (intel mkl v10 64 bit,lp thread model, lp64 model), -## Intel( older versions of mkl 32 and 64 bit), ACML,ACML_MP,ACML_GPU,Apple, NAS, Generic -# C/CXX should be enabled to use Intel mkl - -#============================================================================= -# Copyright 2007-2009 Kitware, Inc. -# -# Distributed under the OSI-approved BSD License (the "License"); -# see accompanying file Copyright.txt for details. -# -# This software is distributed WITHOUT ANY WARRANTY; without even the -# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the License for more information. -#============================================================================= -# (To distribute this file outside of CMake, substitute the full -# License text for the above reference.) - -include(CheckFunctionExists) -include(CheckFortranFunctionExists) - -set(_blas_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES}) - -# Check the language being used -get_property( _LANGUAGES_ GLOBAL PROPERTY ENABLED_LANGUAGES ) -if( _LANGUAGES_ MATCHES Fortran ) - set( _CHECK_FORTRAN TRUE ) -elseif( (_LANGUAGES_ MATCHES C) OR (_LANGUAGES_ MATCHES CXX) ) - set( _CHECK_FORTRAN FALSE ) -else() - if(BLAS_FIND_REQUIRED) - message(FATAL_ERROR "FindBLAS requires Fortran, C, or C++ to be enabled.") - else(BLAS_FIND_REQUIRED) - message(STATUS "Looking for BLAS... - NOT found (Unsupported languages)") - return() - endif(BLAS_FIND_REQUIRED) -endif( ) - -macro(Check_Fortran_Libraries LIBRARIES _prefix _name _flags _list _thread) -# This macro checks for the existence of the combination of fortran libraries -# given by _list. If the combination is found, this macro checks (using the -# Check_Fortran_Function_Exists macro) whether can link against that library -# combination using the name of a routine given by _name using the linker -# flags given by _flags. If the combination of libraries is found and passes -# the link test, LIBRARIES is set to the list of complete library paths that -# have been found. Otherwise, LIBRARIES is set to FALSE. - -# N.B. _prefix is the prefix applied to the names of all cached variables that -# are generated internally and marked advanced by this macro. - -set(_libdir ${ARGN}) - -set(_libraries_work TRUE) -set(${LIBRARIES}) -set(_combined_name) -if (NOT _libdir) - if (WIN32) - set(_libdir ENV LIB) - elseif (APPLE) - set(_libdir /usr/local/lib /usr/lib /usr/local/lib64 /usr/lib64 ENV DYLD_LIBRARY_PATH) - else () - set(_libdir /usr/local/lib /usr/lib /usr/local/lib64 /usr/lib64 ENV LD_LIBRARY_PATH) - endif () -endif () -foreach(_library ${_list}) - set(_combined_name ${_combined_name}_${_library}) - - if(_libraries_work) - if (BLA_STATIC) - if (WIN32) - set(CMAKE_FIND_LIBRARY_SUFFIXES .lib ${CMAKE_FIND_LIBRARY_SUFFIXES}) - endif ( WIN32 ) - if (APPLE) - set(CMAKE_FIND_LIBRARY_SUFFIXES .lib ${CMAKE_FIND_LIBRARY_SUFFIXES}) - else (APPLE) - set(CMAKE_FIND_LIBRARY_SUFFIXES .a ${CMAKE_FIND_LIBRARY_SUFFIXES}) - endif (APPLE) - else (BLA_STATIC) - if (CMAKE_SYSTEM_NAME STREQUAL "Linux") - # for ubuntu's libblas3gf and liblapack3gf packages - set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES} .so.3gf) - endif () - endif (BLA_STATIC) - find_library(${_prefix}_${_library}_LIBRARY - NAMES ${_library} - PATHS ${_libdir} - ) - mark_as_advanced(${_prefix}_${_library}_LIBRARY) - set(${LIBRARIES} ${${LIBRARIES}} ${${_prefix}_${_library}_LIBRARY}) - set(_libraries_work ${${_prefix}_${_library}_LIBRARY}) - endif(_libraries_work) -endforeach(_library ${_list}) -if(_libraries_work) - # Test this combination of libraries. - set(CMAKE_REQUIRED_LIBRARIES ${_flags} ${${LIBRARIES}} ${_threads}) -# message("DEBUG: CMAKE_REQUIRED_LIBRARIES = ${CMAKE_REQUIRED_LIBRARIES}") - if (_CHECK_FORTRAN) - check_fortran_function_exists("${_name}" ${_prefix}${_combined_name}_WORKS) - else() - check_function_exists("${_name}_" ${_prefix}${_combined_name}_WORKS) - endif() - set(CMAKE_REQUIRED_LIBRARIES) - mark_as_advanced(${_prefix}${_combined_name}_WORKS) - set(_libraries_work ${${_prefix}${_combined_name}_WORKS}) -endif(_libraries_work) -if(NOT _libraries_work) - set(${LIBRARIES} FALSE) -endif(NOT _libraries_work) -#message("DEBUG: ${LIBRARIES} = ${${LIBRARIES}}") -endmacro(Check_Fortran_Libraries) - -set(BLAS_LINKER_FLAGS) -set(BLAS_LIBRARIES) -set(BLAS95_LIBRARIES) -if ($ENV{BLA_VENDOR} MATCHES ".+") - set(BLA_VENDOR $ENV{BLA_VENDOR}) -else ($ENV{BLA_VENDOR} MATCHES ".+") - if(NOT BLA_VENDOR) - set(BLA_VENDOR "All") - endif(NOT BLA_VENDOR) -endif ($ENV{BLA_VENDOR} MATCHES ".+") - -if (BLA_VENDOR STREQUAL "Goto" OR BLA_VENDOR STREQUAL "All") - if(NOT BLAS_LIBRARIES) - # gotoblas (http://www.tacc.utexas.edu/tacc-projects/gotoblas2) - check_fortran_libraries( - BLAS_LIBRARIES - BLAS - sgemm - "" - "goto2" - "" - ) - endif(NOT BLAS_LIBRARIES) -endif (BLA_VENDOR STREQUAL "Goto" OR BLA_VENDOR STREQUAL "All") - -if (BLA_VENDOR STREQUAL "ATLAS" OR BLA_VENDOR STREQUAL "All") - if(NOT BLAS_LIBRARIES) - # BLAS in ATLAS library? (http://math-atlas.sourceforge.net/) - check_fortran_libraries( - BLAS_LIBRARIES - BLAS - dgemm - "" - "f77blas;atlas" - "" - ) - endif(NOT BLAS_LIBRARIES) -endif (BLA_VENDOR STREQUAL "ATLAS" OR BLA_VENDOR STREQUAL "All") - -# BLAS in PhiPACK libraries? (requires generic BLAS lib, too) -if (BLA_VENDOR STREQUAL "PhiPACK" OR BLA_VENDOR STREQUAL "All") - if(NOT BLAS_LIBRARIES) - check_fortran_libraries( - BLAS_LIBRARIES - BLAS - sgemm - "" - "sgemm;dgemm;blas" - "" - ) - endif(NOT BLAS_LIBRARIES) -endif (BLA_VENDOR STREQUAL "PhiPACK" OR BLA_VENDOR STREQUAL "All") - -# BLAS in Alpha CXML library? -if (BLA_VENDOR STREQUAL "CXML" OR BLA_VENDOR STREQUAL "All") - if(NOT BLAS_LIBRARIES) - check_fortran_libraries( - BLAS_LIBRARIES - BLAS - sgemm - "" - "cxml" - "" - ) - endif(NOT BLAS_LIBRARIES) -endif (BLA_VENDOR STREQUAL "CXML" OR BLA_VENDOR STREQUAL "All") - -# BLAS in Alpha DXML library? (now called CXML, see above) -if (BLA_VENDOR STREQUAL "DXML" OR BLA_VENDOR STREQUAL "All") - if(NOT BLAS_LIBRARIES) - check_fortran_libraries( - BLAS_LIBRARIES - BLAS - sgemm - "" - "dxml" - "" - ) - endif(NOT BLAS_LIBRARIES) -endif (BLA_VENDOR STREQUAL "DXML" OR BLA_VENDOR STREQUAL "All") - -# BLAS in Sun Performance library? -if (BLA_VENDOR STREQUAL "SunPerf" OR BLA_VENDOR STREQUAL "All") - if(NOT BLAS_LIBRARIES) - check_fortran_libraries( - BLAS_LIBRARIES - BLAS - sgemm - "-xlic_lib=sunperf" - "sunperf;sunmath" - "" - ) - if(BLAS_LIBRARIES) - set(BLAS_LINKER_FLAGS "-xlic_lib=sunperf") - endif(BLAS_LIBRARIES) - endif(NOT BLAS_LIBRARIES) -endif (BLA_VENDOR STREQUAL "SunPerf" OR BLA_VENDOR STREQUAL "All") - -# BLAS in SCSL library? (SGI/Cray Scientific Library) -if (BLA_VENDOR STREQUAL "SCSL" OR BLA_VENDOR STREQUAL "All") - if(NOT BLAS_LIBRARIES) - check_fortran_libraries( - BLAS_LIBRARIES - BLAS - sgemm - "" - "scsl" - "" - ) - endif(NOT BLAS_LIBRARIES) -endif (BLA_VENDOR STREQUAL "SCSL" OR BLA_VENDOR STREQUAL "All") - -# BLAS in SGIMATH library? -if (BLA_VENDOR STREQUAL "SGIMATH" OR BLA_VENDOR STREQUAL "All") - if(NOT BLAS_LIBRARIES) - check_fortran_libraries( - BLAS_LIBRARIES - BLAS - sgemm - "" - "complib.sgimath" - "" - ) - endif(NOT BLAS_LIBRARIES) -endif (BLA_VENDOR STREQUAL "SGIMATH" OR BLA_VENDOR STREQUAL "All") - -# BLAS in IBM ESSL library? (requires generic BLAS lib, too) -if (BLA_VENDOR STREQUAL "IBMESSL" OR BLA_VENDOR STREQUAL "All") - if(NOT BLAS_LIBRARIES) - check_fortran_libraries( - BLAS_LIBRARIES - BLAS - sgemm - "" - "essl;blas" - "" - ) - endif(NOT BLAS_LIBRARIES) -endif (BLA_VENDOR STREQUAL "IBMESSL" OR BLA_VENDOR STREQUAL "All") - -#BLAS in acml library? -if (BLA_VENDOR MATCHES "ACML.*" OR BLA_VENDOR STREQUAL "All") - if( ((BLA_VENDOR STREQUAL "ACML") AND (NOT BLAS_ACML_LIB_DIRS)) OR - ((BLA_VENDOR STREQUAL "ACML_MP") AND (NOT BLAS_ACML_MP_LIB_DIRS)) OR - ((BLA_VENDOR STREQUAL "ACML_GPU") AND (NOT BLAS_ACML_GPU_LIB_DIRS)) - ) - # try to find acml in "standard" paths - if( WIN32 ) - file( GLOB _ACML_ROOT "C:/AMD/acml*/ACML-EULA.txt" ) - else() - file( GLOB _ACML_ROOT "/opt/acml*/ACML-EULA.txt" ) - endif() - if( WIN32 ) - file( GLOB _ACML_GPU_ROOT "C:/AMD/acml*/GPGPUexamples" ) - else() - file( GLOB _ACML_GPU_ROOT "/opt/acml*/GPGPUexamples" ) - endif() - list(GET _ACML_ROOT 0 _ACML_ROOT) - list(GET _ACML_GPU_ROOT 0 _ACML_GPU_ROOT) - if( _ACML_ROOT ) - get_filename_component( _ACML_ROOT ${_ACML_ROOT} PATH ) - if( SIZEOF_INTEGER EQUAL 8 ) - set( _ACML_PATH_SUFFIX "_int64" ) - else() - set( _ACML_PATH_SUFFIX "" ) - endif() - if( CMAKE_Fortran_COMPILER_ID STREQUAL "Intel" ) - set( _ACML_COMPILER32 "ifort32" ) - set( _ACML_COMPILER64 "ifort64" ) - elseif( CMAKE_Fortran_COMPILER_ID STREQUAL "SunPro" ) - set( _ACML_COMPILER32 "sun32" ) - set( _ACML_COMPILER64 "sun64" ) - elseif( CMAKE_Fortran_COMPILER_ID STREQUAL "PGI" ) - set( _ACML_COMPILER32 "pgi32" ) - if( WIN32 ) - set( _ACML_COMPILER64 "win64" ) - else() - set( _ACML_COMPILER64 "pgi64" ) - endif() - elseif( CMAKE_Fortran_COMPILER_ID STREQUAL "Open64" ) - # 32 bit builds not supported on Open64 but for code simplicity - # We'll just use the same directory twice - set( _ACML_COMPILER32 "open64_64" ) - set( _ACML_COMPILER64 "open64_64" ) - elseif( CMAKE_Fortran_COMPILER_ID STREQUAL "NAG" ) - set( _ACML_COMPILER32 "nag32" ) - set( _ACML_COMPILER64 "nag64" ) - else() #if( CMAKE_Fortran_COMPILER_ID STREQUAL "GNU" ) - set( _ACML_COMPILER32 "gfortran32" ) - set( _ACML_COMPILER64 "gfortran64" ) - endif() - - if( BLA_VENDOR STREQUAL "ACML_MP" ) - set(_ACML_MP_LIB_DIRS - "${_ACML_ROOT}/${_ACML_COMPILER32}_mp${_ACML_PATH_SUFFIX}/lib" - "${_ACML_ROOT}/${_ACML_COMPILER64}_mp${_ACML_PATH_SUFFIX}/lib" ) - else() #if( _BLAS_VENDOR STREQUAL "ACML" ) - set(_ACML_LIB_DIRS - "${_ACML_ROOT}/${_ACML_COMPILER32}${_ACML_PATH_SUFFIX}/lib" - "${_ACML_ROOT}/${_ACML_COMPILER64}${_ACML_PATH_SUFFIX}/lib" ) - endif() - endif() - elseif(BLAS_${BLA_VENDOR}_LIB_DIRS) - set(_${BLA_VENDOR}_LIB_DIRS ${BLAS_${BLA_VENDOR}_LIB_DIRS}) - endif() - - if( BLA_VENDOR STREQUAL "ACML_MP" ) - foreach( BLAS_ACML_MP_LIB_DIRS ${_ACML_MP_LIB_DIRS}) - check_fortran_libraries ( - BLAS_LIBRARIES - BLAS - sgemm - "" "acml_mp;acml_mv" "" ${BLAS_ACML_MP_LIB_DIRS} - ) - if( BLAS_LIBRARIES ) - break() - endif() - endforeach() - elseif( BLA_VENDOR STREQUAL "ACML_GPU" ) - foreach( BLAS_ACML_GPU_LIB_DIRS ${_ACML_GPU_LIB_DIRS}) - check_fortran_libraries ( - BLAS_LIBRARIES - BLAS - sgemm - "" "acml;acml_mv;CALBLAS" "" ${BLAS_ACML_GPU_LIB_DIRS} - ) - if( BLAS_LIBRARIES ) - break() - endif() - endforeach() - else() #if( _BLAS_VENDOR STREQUAL "ACML" ) - foreach( BLAS_ACML_LIB_DIRS ${_ACML_LIB_DIRS} ) - check_fortran_libraries ( - BLAS_LIBRARIES - BLAS - sgemm - "" "acml;acml_mv" "" ${BLAS_ACML_LIB_DIRS} - ) - if( BLAS_LIBRARIES ) - break() - endif() - endforeach() - endif() - - # Either acml or acml_mp should be in LD_LIBRARY_PATH but not both - if(NOT BLAS_LIBRARIES) - check_fortran_libraries( - BLAS_LIBRARIES - BLAS - sgemm - "" - "acml;acml_mv" - "" - ) - endif(NOT BLAS_LIBRARIES) - if(NOT BLAS_LIBRARIES) - check_fortran_libraries( - BLAS_LIBRARIES - BLAS - sgemm - "" - "acml_mp;acml_mv" - "" - ) - endif(NOT BLAS_LIBRARIES) - if(NOT BLAS_LIBRARIES) - check_fortran_libraries( - BLAS_LIBRARIES - BLAS - sgemm - "" - "acml;acml_mv;CALBLAS" - "" - ) - endif(NOT BLAS_LIBRARIES) -endif () # ACML - -# Apple BLAS library? -if (BLA_VENDOR STREQUAL "Apple" OR BLA_VENDOR STREQUAL "All") -if(NOT BLAS_LIBRARIES) - check_fortran_libraries( - BLAS_LIBRARIES - BLAS - dgemm - "" - "Accelerate" - "" - ) - endif(NOT BLAS_LIBRARIES) -endif (BLA_VENDOR STREQUAL "Apple" OR BLA_VENDOR STREQUAL "All") - -if (BLA_VENDOR STREQUAL "NAS" OR BLA_VENDOR STREQUAL "All") - if ( NOT BLAS_LIBRARIES ) - check_fortran_libraries( - BLAS_LIBRARIES - BLAS - dgemm - "" - "vecLib" - "" - ) - endif ( NOT BLAS_LIBRARIES ) -endif (BLA_VENDOR STREQUAL "NAS" OR BLA_VENDOR STREQUAL "All") -# Generic BLAS library? -if (BLA_VENDOR STREQUAL "Generic" OR BLA_VENDOR STREQUAL "All") - if(NOT BLAS_LIBRARIES) - check_fortran_libraries( - BLAS_LIBRARIES - BLAS - sgemm - "" - "blas" - "" - ) - endif(NOT BLAS_LIBRARIES) -endif (BLA_VENDOR STREQUAL "Generic" OR BLA_VENDOR STREQUAL "All") - -#BLAS in intel mkl 10 library? (em64t 64bit) -if (BLA_VENDOR MATCHES "Intel*" OR BLA_VENDOR STREQUAL "All") - if (NOT WIN32) - set(LM "-lm") - endif () - if (_LANGUAGES_ MATCHES C OR _LANGUAGES_ MATCHES CXX) - if(BLAS_FIND_QUIETLY OR NOT BLAS_FIND_REQUIRED) - find_package(Threads) - else(BLAS_FIND_QUIETLY OR NOT BLAS_FIND_REQUIRED) - find_package(Threads REQUIRED) - endif(BLAS_FIND_QUIETLY OR NOT BLAS_FIND_REQUIRED) - if (WIN32) - if(BLA_F95) - if(NOT BLAS95_LIBRARIES) - check_fortran_libraries( - BLAS95_LIBRARIES - BLAS - sgemm - "" - "mkl_blas95;mkl_intel_c;mkl_intel_thread;mkl_core;libguide40" - "" - ) - endif(NOT BLAS95_LIBRARIES) - else(BLA_F95) - if(NOT BLAS_LIBRARIES) - check_fortran_libraries( - BLAS_LIBRARIES - BLAS - SGEMM - "" - "mkl_c_dll;mkl_intel_thread_dll;mkl_core_dll;libguide40" - "" - ) - endif(NOT BLAS_LIBRARIES) - endif(BLA_F95) - else(WIN32) - if (BLA_VENDOR STREQUAL "Intel10_32" OR BLA_VENDOR STREQUAL "All") - if(BLA_F95) - if(NOT BLAS95_LIBRARIES) - check_fortran_libraries( - BLAS95_LIBRARIES - BLAS - sgemm - "" - "mkl_blas95;mkl_intel;mkl_intel_thread;mkl_core;guide" - "${CMAKE_THREAD_LIBS_INIT};${LM}" - ) - endif(NOT BLAS95_LIBRARIES) - else(BLA_F95) - if(NOT BLAS_LIBRARIES) - check_fortran_libraries( - BLAS_LIBRARIES - BLAS - sgemm - "" - "mkl_intel;mkl_intel_thread;mkl_core;guide" - "${CMAKE_THREAD_LIBS_INIT}" - "${LM}" - ) - endif(NOT BLAS_LIBRARIES) - endif(BLA_F95) - endif (BLA_VENDOR STREQUAL "Intel10_32" OR BLA_VENDOR STREQUAL "All") - if (BLA_VENDOR STREQUAL "Intel10_64lp" OR BLA_VENDOR STREQUAL "All") - if(BLA_F95) - if(NOT BLAS95_LIBRARIES) - check_fortran_libraries( - BLAS95_LIBRARIES - BLAS - sgemm - "" - "mkl_blas95;mkl_intel_lp64;mkl_intel_thread;mkl_core;guide" - "${CMAKE_THREAD_LIBS_INIT};${LM}" - ) - endif(NOT BLAS95_LIBRARIES) - else(BLA_F95) - if(NOT BLAS_LIBRARIES) - check_fortran_libraries( - BLAS_LIBRARIES - BLAS - sgemm - "" - "mkl_intel_lp64;mkl_intel_thread;mkl_core;guide" - "${CMAKE_THREAD_LIBS_INIT};${LM}" - ) - endif(NOT BLAS_LIBRARIES) - endif(BLA_F95) - endif (BLA_VENDOR STREQUAL "Intel10_64lp" OR BLA_VENDOR STREQUAL "All") - endif (WIN32) - #older vesions of intel mkl libs - # BLAS in intel mkl library? (shared) - if(NOT BLAS_LIBRARIES) - check_fortran_libraries( - BLAS_LIBRARIES - BLAS - sgemm - "" - "mkl;guide" - "${CMAKE_THREAD_LIBS_INIT};${LM}" - ) - endif(NOT BLAS_LIBRARIES) - #BLAS in intel mkl library? (static, 32bit) - if(NOT BLAS_LIBRARIES) - check_fortran_libraries( - BLAS_LIBRARIES - BLAS - sgemm - "" - "mkl_ia32;guide" - "${CMAKE_THREAD_LIBS_INIT};${LM}" - ) - endif(NOT BLAS_LIBRARIES) - #BLAS in intel mkl library? (static, em64t 64bit) - if(NOT BLAS_LIBRARIES) - check_fortran_libraries( - BLAS_LIBRARIES - BLAS - sgemm - "" - "mkl_em64t;guide" - "${CMAKE_THREAD_LIBS_INIT};${LM}" - ) - endif(NOT BLAS_LIBRARIES) - endif (_LANGUAGES_ MATCHES C OR _LANGUAGES_ MATCHES CXX) -endif (BLA_VENDOR MATCHES "Intel*" OR BLA_VENDOR STREQUAL "All") - - -if(BLA_F95) - if(BLAS95_LIBRARIES) - set(BLAS95_FOUND TRUE) - else(BLAS95_LIBRARIES) - set(BLAS95_FOUND FALSE) - endif(BLAS95_LIBRARIES) - - if(NOT BLAS_FIND_QUIETLY) - if(BLAS95_FOUND) - message(STATUS "A library with BLAS95 API found.") - else(BLAS95_FOUND) - if(BLAS_FIND_REQUIRED) - message(FATAL_ERROR - "A required library with BLAS95 API not found. Please specify library location.") - else(BLAS_FIND_REQUIRED) - message(STATUS - "A library with BLAS95 API not found. Please specify library location.") - endif(BLAS_FIND_REQUIRED) - endif(BLAS95_FOUND) - endif(NOT BLAS_FIND_QUIETLY) - set(BLAS_FOUND TRUE) - set(BLAS_LIBRARIES "${BLAS95_LIBRARIES}") -else(BLA_F95) - if(BLAS_LIBRARIES) - set(BLAS_FOUND TRUE) - else(BLAS_LIBRARIES) - set(BLAS_FOUND FALSE) - endif(BLAS_LIBRARIES) - - if(NOT BLAS_FIND_QUIETLY) - if(BLAS_FOUND) - message(STATUS "A library with BLAS API found.") - else(BLAS_FOUND) - if(BLAS_FIND_REQUIRED) - message(FATAL_ERROR - "A required library with BLAS API not found. Please specify library location." - ) - else(BLAS_FIND_REQUIRED) - message(STATUS - "A library with BLAS API not found. Please specify library location." - ) - endif(BLAS_FIND_REQUIRED) - endif(BLAS_FOUND) - endif(NOT BLAS_FIND_QUIETLY) -endif(BLA_F95) - -set(CMAKE_FIND_LIBRARY_SUFFIXES ${_blas_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES}) diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/compat-2.8.7/FindLAPACK.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Modules/compat-2.8.7/FindLAPACK.cmake deleted file mode 100644 index 884266fc95..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/compat-2.8.7/FindLAPACK.cmake +++ /dev/null @@ -1,307 +0,0 @@ -# - Find LAPACK library -# This module finds an installed fortran library that implements the LAPACK -# linear-algebra interface (see http://www.netlib.org/lapack/). -# -# The approach follows that taken for the autoconf macro file, acx_lapack.m4 -# (distributed at http://ac-archive.sourceforge.net/ac-archive/acx_lapack.html). -# -# This module sets the following variables: -# LAPACK_FOUND - set to true if a library implementing the LAPACK interface -# is found -# LAPACK_LINKER_FLAGS - uncached list of required linker flags (excluding -l -# and -L). -# LAPACK_LIBRARIES - uncached list of libraries (using full path name) to -# link against to use LAPACK -# LAPACK95_LIBRARIES - uncached list of libraries (using full path name) to -# link against to use LAPACK95 -# LAPACK95_FOUND - set to true if a library implementing the LAPACK f95 -# interface is found -# BLA_STATIC if set on this determines what kind of linkage we do (static) -# BLA_VENDOR if set checks only the specified vendor, if not set checks -# all the possibilities -# BLA_F95 if set on tries to find the f95 interfaces for BLAS/LAPACK -### List of vendors (BLA_VENDOR) valid in this module -## Intel(mkl), ACML,Apple, NAS, Generic - -#============================================================================= -# Copyright 2007-2009 Kitware, Inc. -# -# Distributed under the OSI-approved BSD License (the "License"); -# see accompanying file Copyright.txt for details. -# -# This software is distributed WITHOUT ANY WARRANTY; without even the -# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the License for more information. -#============================================================================= -# (To distribute this file outside of CMake, substitute the full -# License text for the above reference.) - -set(_lapack_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES}) - -get_property(_LANGUAGES_ GLOBAL PROPERTY ENABLED_LANGUAGES) -if (NOT _LANGUAGES_ MATCHES Fortran) -include(CheckFunctionExists) -else (NOT _LANGUAGES_ MATCHES Fortran) -include(CheckFortranFunctionExists) -endif (NOT _LANGUAGES_ MATCHES Fortran) - -set(LAPACK_FOUND FALSE) -set(LAPACK95_FOUND FALSE) - -# TODO: move this stuff to separate module - -macro(Check_Lapack_Libraries LIBRARIES _prefix _name _flags _list _blas _threads) -# This macro checks for the existence of the combination of fortran libraries -# given by _list. If the combination is found, this macro checks (using the -# Check_Fortran_Function_Exists macro) whether can link against that library -# combination using the name of a routine given by _name using the linker -# flags given by _flags. If the combination of libraries is found and passes -# the link test, LIBRARIES is set to the list of complete library paths that -# have been found. Otherwise, LIBRARIES is set to FALSE. - -# N.B. _prefix is the prefix applied to the names of all cached variables that -# are generated internally and marked advanced by this macro. - -set(_libraries_work TRUE) -set(${LIBRARIES}) -set(_combined_name) -if (NOT _libdir) - if (WIN32) - set(_libdir ENV LIB) - elseif (APPLE) - set(_libdir /usr/local/lib /usr/lib /usr/local/lib64 /usr/lib64 ENV DYLD_LIBRARY_PATH) - else () - set(_libdir /usr/local/lib /usr/lib /usr/local/lib64 /usr/lib64 ENV LD_LIBRARY_PATH) - endif () -endif () -foreach(_library ${_list}) - set(_combined_name ${_combined_name}_${_library}) - - if(_libraries_work) - if (BLA_STATIC) - if (WIN32) - set(CMAKE_FIND_LIBRARY_SUFFIXES .lib ${CMAKE_FIND_LIBRARY_SUFFIXES}) - endif ( WIN32 ) - if (APPLE) - set(CMAKE_FIND_LIBRARY_SUFFIXES .lib ${CMAKE_FIND_LIBRARY_SUFFIXES}) - else (APPLE) - set(CMAKE_FIND_LIBRARY_SUFFIXES .a ${CMAKE_FIND_LIBRARY_SUFFIXES}) - endif (APPLE) - else (BLA_STATIC) - if (CMAKE_SYSTEM_NAME STREQUAL "Linux") - # for ubuntu's libblas3gf and liblapack3gf packages - set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES} .so.3gf) - endif () - endif (BLA_STATIC) - find_library(${_prefix}_${_library}_LIBRARY - NAMES ${_library} - PATHS ${_libdir} - ) - mark_as_advanced(${_prefix}_${_library}_LIBRARY) - set(${LIBRARIES} ${${LIBRARIES}} ${${_prefix}_${_library}_LIBRARY}) - set(_libraries_work ${${_prefix}_${_library}_LIBRARY}) - endif(_libraries_work) -endforeach(_library ${_list}) - -if(_libraries_work) - # Test this combination of libraries. - if(UNIX AND BLA_STATIC) - set(CMAKE_REQUIRED_LIBRARIES ${_flags} "-Wl,--start-group" ${${LIBRARIES}} ${_blas} "-Wl,--end-group" ${_threads}) - else(UNIX AND BLA_STATIC) - set(CMAKE_REQUIRED_LIBRARIES ${_flags} ${${LIBRARIES}} ${_blas} ${_threads}) - endif(UNIX AND BLA_STATIC) -# message("DEBUG: CMAKE_REQUIRED_LIBRARIES = ${CMAKE_REQUIRED_LIBRARIES}") - if (NOT _LANGUAGES_ MATCHES Fortran) - check_function_exists("${_name}_" ${_prefix}${_combined_name}_WORKS) - else (NOT _LANGUAGES_ MATCHES Fortran) - check_fortran_function_exists(${_name} ${_prefix}${_combined_name}_WORKS) - endif (NOT _LANGUAGES_ MATCHES Fortran) - set(CMAKE_REQUIRED_LIBRARIES) - mark_as_advanced(${_prefix}${_combined_name}_WORKS) - set(_libraries_work ${${_prefix}${_combined_name}_WORKS}) - #message("DEBUG: ${LIBRARIES} = ${${LIBRARIES}}") -endif(_libraries_work) - - if(_libraries_work) - set(${LIBRARIES} ${${LIBRARIES}} ${_blas} ${_threads}) - else(_libraries_work) - set(${LIBRARIES} FALSE) - endif(_libraries_work) - -endmacro(Check_Lapack_Libraries) - - -set(LAPACK_LINKER_FLAGS) -set(LAPACK_LIBRARIES) -set(LAPACK95_LIBRARIES) - - -if(LAPACK_FIND_QUIETLY OR NOT LAPACK_FIND_REQUIRED) - find_package(BLAS) -else(LAPACK_FIND_QUIETLY OR NOT LAPACK_FIND_REQUIRED) - find_package(BLAS REQUIRED) -endif(LAPACK_FIND_QUIETLY OR NOT LAPACK_FIND_REQUIRED) - - -if(BLAS_FOUND) - set(LAPACK_LINKER_FLAGS ${BLAS_LINKER_FLAGS}) - if ($ENV{BLA_VENDOR} MATCHES ".+") - set(BLA_VENDOR $ENV{BLA_VENDOR}) - else ($ENV{BLA_VENDOR} MATCHES ".+") - if(NOT BLA_VENDOR) - set(BLA_VENDOR "All") - endif(NOT BLA_VENDOR) - endif ($ENV{BLA_VENDOR} MATCHES ".+") - -if (BLA_VENDOR STREQUAL "Goto" OR BLA_VENDOR STREQUAL "All") - if(NOT LAPACK_LIBRARIES) - check_lapack_libraries( - LAPACK_LIBRARIES - LAPACK - cheev - "" - "goto2" - "${BLAS_LIBRARIES}" - "" - ) - endif(NOT LAPACK_LIBRARIES) -endif (BLA_VENDOR STREQUAL "Goto" OR BLA_VENDOR STREQUAL "All") - - -#acml lapack - if (BLA_VENDOR MATCHES "ACML.*" OR BLA_VENDOR STREQUAL "All") - if (BLAS_LIBRARIES MATCHES ".+acml.+") - set (LAPACK_LIBRARIES ${BLAS_LIBRARIES}) - endif () - endif () - -# Apple LAPACK library? -if (BLA_VENDOR STREQUAL "Apple" OR BLA_VENDOR STREQUAL "All") - if(NOT LAPACK_LIBRARIES) - check_lapack_libraries( - LAPACK_LIBRARIES - LAPACK - cheev - "" - "Accelerate" - "${BLAS_LIBRARIES}" - "" - ) - endif(NOT LAPACK_LIBRARIES) -endif (BLA_VENDOR STREQUAL "Apple" OR BLA_VENDOR STREQUAL "All") -if (BLA_VENDOR STREQUAL "NAS" OR BLA_VENDOR STREQUAL "All") - if ( NOT LAPACK_LIBRARIES ) - check_lapack_libraries( - LAPACK_LIBRARIES - LAPACK - cheev - "" - "vecLib" - "${BLAS_LIBRARIES}" - "" - ) - endif ( NOT LAPACK_LIBRARIES ) -endif (BLA_VENDOR STREQUAL "NAS" OR BLA_VENDOR STREQUAL "All") -# Generic LAPACK library? -if (BLA_VENDOR STREQUAL "Generic" OR - BLA_VENDOR STREQUAL "ATLAS" OR - BLA_VENDOR STREQUAL "All") - if ( NOT LAPACK_LIBRARIES ) - check_lapack_libraries( - LAPACK_LIBRARIES - LAPACK - cheev - "" - "lapack" - "${BLAS_LIBRARIES}" - "" - ) - endif ( NOT LAPACK_LIBRARIES ) -endif () -#intel lapack - if (BLA_VENDOR MATCHES "Intel*" OR BLA_VENDOR STREQUAL "All") - if (_LANGUAGES_ MATCHES C OR _LANGUAGES_ MATCHES CXX) - if(LAPACK_FIND_QUIETLY OR NOT LAPACK_FIND_REQUIRED) - find_PACKAGE(Threads) - else(LAPACK_FIND_QUIETLY OR NOT LAPACK_FIND_REQUIRED) - find_package(Threads REQUIRED) - endif(LAPACK_FIND_QUIETLY OR NOT LAPACK_FIND_REQUIRED) - if (BLA_F95) - if(NOT LAPACK95_LIBRARIES) - check_lapack_libraries( - LAPACK95_LIBRARIES - LAPACK - cheev - "" - "mkl_lapack95" - "${BLAS95_LIBRARIES}" - "${CMAKE_THREAD_LIBS_INIT}" - ) - endif(NOT LAPACK95_LIBRARIES) - else(BLA_F95) - if(NOT LAPACK_LIBRARIES) - check_lapack_libraries( - LAPACK_LIBRARIES - LAPACK - cheev - "" - "mkl_lapack" - "${BLAS_LIBRARIES}" - "${CMAKE_THREAD_LIBS_INIT}" - ) - endif(NOT LAPACK_LIBRARIES) - endif(BLA_F95) - endif (_LANGUAGES_ MATCHES C OR _LANGUAGES_ MATCHES CXX) - endif(BLA_VENDOR MATCHES "Intel*" OR BLA_VENDOR STREQUAL "All") -else(BLAS_FOUND) - message(STATUS "LAPACK requires BLAS") -endif(BLAS_FOUND) - -if(BLA_F95) - if(LAPACK95_LIBRARIES) - set(LAPACK95_FOUND TRUE) - else(LAPACK95_LIBRARIES) - set(LAPACK95_FOUND FALSE) - endif(LAPACK95_LIBRARIES) - if(NOT LAPACK_FIND_QUIETLY) - if(LAPACK95_FOUND) - message(STATUS "A library with LAPACK95 API found.") - else(LAPACK95_FOUND) - if(LAPACK_FIND_REQUIRED) - message(FATAL_ERROR - "A required library with LAPACK95 API not found. Please specify library location." - ) - else(LAPACK_FIND_REQUIRED) - message(STATUS - "A library with LAPACK95 API not found. Please specify library location." - ) - endif(LAPACK_FIND_REQUIRED) - endif(LAPACK95_FOUND) - endif(NOT LAPACK_FIND_QUIETLY) - set(LAPACK_FOUND "${LAPACK95_FOUND}") - set(LAPACK_LIBRARIES "${LAPACK95_LIBRARIES}") -else(BLA_F95) - if(LAPACK_LIBRARIES) - set(LAPACK_FOUND TRUE) - else(LAPACK_LIBRARIES) - set(LAPACK_FOUND FALSE) - endif(LAPACK_LIBRARIES) - - if(NOT LAPACK_FIND_QUIETLY) - if(LAPACK_FOUND) - message(STATUS "A library with LAPACK API found.") - else(LAPACK_FOUND) - if(LAPACK_FIND_REQUIRED) - message(FATAL_ERROR - "A required library with LAPACK API not found. Please specify library location." - ) - else(LAPACK_FIND_REQUIRED) - message(STATUS - "A library with LAPACK API not found. Please specify library location." - ) - endif(LAPACK_FIND_REQUIRED) - endif(LAPACK_FOUND) - endif(NOT LAPACK_FIND_QUIETLY) -endif(BLA_F95) - -set(CMAKE_FIND_LIBRARY_SUFFIXES ${_lapack_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES}) diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/opm-verteq-prereqs.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Modules/opm-verteq-prereqs.cmake deleted file mode 100644 index 19d687bb93..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Modules/opm-verteq-prereqs.cmake +++ /dev/null @@ -1,20 +0,0 @@ -# -*- mode: cmake; tab-width: 2; indent-tabs-mode: t; truncate-lines: t; compile-command: "cmake -Wdev" -*- -# vim: set filetype=cmake autoindent tabstop=2 shiftwidth=2 noexpandtab softtabstop=2 nowrap: - -# defines that must be present in config.h for our headers -set (opm-verteq_CONFIG_VAR - ) - -# dependencies -set (opm-verteq_DEPS - # compile with C99 support if available - "C99" - # compile with C++0x/11 support if available - "CXX11Features" - # various runtime library enhancements - "Boost 1.44.0 - COMPONENTS date_time filesystem system unit_test_framework REQUIRED" - # OPM dependency - "opm-common; - opm-core REQUIRED" - ) diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/OPM-CMake.md b/ThirdParty/custom-opm-common/opm-common/cmake/OPM-CMake.md deleted file mode 100644 index 76473b7f67..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/OPM-CMake.md +++ /dev/null @@ -1,739 +0,0 @@ -OPM Build System -================ - -This is the documentation for the build system used in various OPM modules. -In the following, `xxx` is used as a placeholder for the project name (e.g. -"core"). - -Unlike traditional CMake files which is highly imperative, OPM projects -sets up declarative lists of prerequisites and content and rely on convention -and pre-made modules to do the build. Its goal is to replace but be -compatible with the old autotools-based system. - -## Terminology - -In the build system to following abstract locations are referred to: - - - - - -
LocationDescription
Source tree - -This is where the source files are located. Usually this directory is created -by a `git clone`. You edit files in this directory. The build system on the -other hand will never touch these files; they could be read-only for that -matter. It should be located on a disk that is backed up. The source trees -for various OPM modules should be siblings to eachother. - -
Build tree - -This is where you do `make` (or `ninja`), and the compiler/linker will put -its output here. It may be the same directory as the source tree (which is -then called an "in-tree build"). However, it is recommended that you keep -it separate. Do `make clean && make distclean` to remove all files that -are created by the build (if you put it in the source directory). -You don't need to backup these files (since they can be generated from the -source); instead this directory should be located somewhere with fast -write access. The build trees for various OPM modules should be siblings -(unless they are subdirectories in their source trees). - -
Installation tree - -This is where the build system will put all the final libraries and headers -when running `make install`. -You can specify another location for the installation tree by setting the -CMake variable `CMAKE_INSTALL_PREFIX` on the command line (or use `--prefix=` -with the configure script). Notice that the portion of this path which -will become the new filesystem root should be specified with the environment -variable `DESTDIR`. - -
- -## Use Cases - -This section lists some common use cases for adding new code to a project -with respect to the build system, and lists the steps that must be undertaken -to do the necessary modifications. - -### Adding a Translation Unit - -1. Put the file in a sub-directory of `opm/xxx`. - -2. Add the file name to the `MAIN_SOURCE_FILES` list in `CMakeLists_files.txt`. - Please keep this list sorted. - -3. If you are adding new interfaces that will be used by client code, add the - header to the `PUBLIC_HEADER_FILES`. Note that any `_impl` headers containing - template implementations must also be included. - -### Adding a Prerequisite - -1. Add the name of the prerequisite module to the `opm-xxx_DEPS` list in the file - `cmake/Modules/opm-xxx-prereqs.cmake`, where xxx is a placeholder for the module - name of your CMake project. - -2. If you need any CMake configuration defines available in your public _headers_, - add these to the `opm-xxx_CONFIG_VAR` list in the same file. Please refrain - from this practice as it imposes a requirement on the clients of your code to - gather the same configuration information and make it available in the units - which uses your headers. - -### Adding a Unit Test - -1. Put the source code in a single translation unit in directory `tests`. The - name of this unit should start with `test_`. - -2. Put any datafiles this code rely on in the same directory. The code should - assume that such datafiles are available in the current directory the program - is running from. The code should not write to these files, but rather make - a copy if it needs to modify them. - -3. Add the file name to the `TEST_SOURCE_FILES` list in `CMakeLists_files.txt`. - -4. Add the datafiles to the `TEST_DATA_FILES` list in the same files. The - files will be copied from the source tree into the target tree. - -### Adding a New Utility Program - -1. Put the source code of the utility in the `examples` directory. - -2. Add the name of the translation unit to the `PROGRAM_SOURCE_FILES` list - in `CMakeLists_files.txt`. - -### Creating a New Module - -1. Copy the directory `cmake/` and all sub-directories from opm-core. This - directory contains the common build system, and should ideally be identical - across OPM projects. Also copy the file `configure` in the project root. - -2. Create project-specific files using those from another project as a template. - The list of project specific files is in the section - [Modules Reference](#project-specific-files) below. - -3. Create a new file `cmake/Modules/opm-xxx-prereqs.cmake`, using one of the - existing ones as a template. - -4. Optionally, create a new file `cmake/Modules/Findopm-xxx.cmake`, using one - of the existing ones as a template. - -## Options - -These options regulate the behaviour of the build system. In addition to these -options, you can also set standard CMake options, or options for the -prerequisites, which is not documented here. If you run the configure script -with the `--help` option, it will print a text of what the options are called -when using the autotools-compatible wrapper. - - - - - - - - - - - - - - - -
OptionDescription
BUILD_EXAMPLES - -Include the examples when doing a build. Whenever you change something -in the library, however small, all the examples will also be rebuilt. -Default is ON. - -
BUILD_TESTING - -Include the unit tests when doing a build. Whenever you change something -in the library, however small, all the unit tests will also be rebuilt. -Default is ON. - -
PRECOMPILE_HEADERS - -Precompile common headers into a binary blob which is loaded on further -compilations. If your compiler supports this, it usually reduces build -time. It does not affect the running time of the code. Default is OFF. - -
SIBLING_SEARCH - -Search for OPM/DUNE prerequisites in sibling directories of the build -tree. Default is ON. - -
SUITESPARSE_USE_STATIC - -Link SuiteSparse/UMFPack statically. Using this option will enable you -to build an executable which has no external dependencies. The default -is to use shared libraries if those are available. - -
SYSTEM_DEBUG - -Put debug symbols in the system debug directory (`/usr/lib/debug`) as -this seems to be the only place which is searched by default by GDB. -Default is OFF, as it requires that you have write access to that -directory. Note that if you are doing a system installation (set -CMAKE_INSTALL_PREFIX=/usr), then the libraries will be put in this -location irregardless of this option. - -
USE_MPI - -Enable the code to use MPI for parallelization. Default is OFF. -Note: It is important that OPM and DUNE modules is either all -compiled with MPI support or that none is. The build system will -attempt to recognize inconsistencies. - -
USE_OPENMP - -Enable the code to use OpenMP for parallelization. Default is ON. - -
USE_RUNPATH - -Remember the directories from where the prerequisites were found -when building. Default is ON, which enables you to run without -setting PATH all over the place in your build directories. When -creating an installation package, this should be set off. - -
USE_UNDERSCORING - -Assume that Fortran externals have an underscore suffix instead -of checking this with an actual compiler. If you set this option, -you can use Fortran libraries (notably BLAS and LAPACK) without -having a Fortran compiler installed. The default is OFF. - -
USE_VERSIONED_DIR - -Put libraries in a directory which includes the label of the project, -e.g. `/usr/lib/opm-core/2013.10`. Default is OFF. - -
WITH_NATIVE - -Optimize for the instruction set of the build machine. This is -a good idea if you are building the library on the same machine -as you will be using the library. Default is ON. - -
WHOLE_PROG_OPTIM - -Perform an extra round of optimization when linking the program. -(Usually the compiler only optimizes within the translation unit). -If your compiler supports this, it usually leads to a faster runtime. -Default is OFF. - -
- -## Modules Reference - -### Project-specific Files - -All of these files are in the project root. - - - - - - -
FileDescription
CMakeLists.txt - -Project-specific customizations to the build, such as filtering out source -files based on the availability of prerequisites, or adding configuration -variables only the implementation depends on. -Prefer to do customizations in the hooks available to this file rather than -adding ad-hoc code to the build system itself, to keep the `cmake/` directory -unified across projects. - -
CMakeLists_files.txt - -List of all compilation modules in the project, test cases and public -headers that should be installed in the distribution package. The contents -of these lists are distributed to project-specific variables by the build -system. - -
CTestConfig.cmake - -Settings for submitting result of tests to CDash. The default is setup -to submit to [the official CDash panel](http://www.opm-project.org/CDash/) -and does not need to be changed if your module has a panel there. - -
dune.module - -Information about the project such as name, release label, link version -and maintainer. Also specify dependencies to other OPM/DUNE-projects so -that dunecontrol can build in correct order. (Note that the full list of -dependencies is taken from opm-xxx-prereqs.cmake and not from here). -Since this file must be present before the build starts (for dunecontrol), -the version information is kept here. - -
- -### Project Modules - -These modules contains the dependency information for this project, so -the build system can set up the prerequisite list correctly and probe -for other modules automatically. (This replaces hard-coded calls to -find_library in the CMakeLists.txt file). - - - - -
File (.cmake)Description
xxx-prereqs - -List prerequisite modules and defines used in public headers. Each module -must have such a "declaration", and this must be made available to every -other projects as well (which is why this is located in `cmake/Modules`). - -
Findxxx - -CMake modules which locates module `xxx` in the system directories. As -the `opm-xxx-config.cmake` is made available together with the libraries -and headers, these modules are not really needed (for OPM modules). - -
- -### Generated Files - -These files are generated by the build system and exists in the _build_ tree, -not in the source tree. They are documented here to make developers aware of -their role in the build system. - - - - - - - - -
FileDescription
config.h - -Settings variables which the build system has configured and make available -to the source code. This file is **not** installed amongst the headers, so -you should never include this in a public header, even if you need the value -in one of these variables. Instead, you must rely on the client code to -configure this variable for you. - -
opm-xxx.pc - -pkg-config information file to locate the **build** tree. This is used by -the autotools build files, but can also be handy when manually building -small test programs for which you don't generate an own build system. - -
opm-xxx-config.cmake - -CMake information file to locate the **build** tree. This file is imported -when this project is set up as a prerequisite. - -
opm-xxx-install.pc - -pkg-config information file to locate the **installation** tree. It is -the same as `opm-xxx.pc` except that the paths are switched. When the -project is installed, this file is installed instead (under `lib/pkgconfig` -relative to the installation root). This directory should hence be put -in the search path to pkg-config to use the installed package. Before -installation, this file is worthless and should not be included, because -it does not refer to the build tree at all. (Be careful not to mix -the build and the installation tree). -Notice that the build system will forward a bunch of public definitions -which should be available to compile code referring to this library. - -
opm-xxx-install.cmake - -CMake information file to locate the **installation** tree. It is the -same as `opm-xxx-config.cmake` except that the paths are switched. When -the project is installed, this file is installed instead (under `share/cmake` -relative to the installation root). - -
opm-xxx-config-version.cmake - -CMake wants to include this into the build _before_ it is determined whether -the library was found successfully (depending on the version number perhaps), -so this information is put in its own file. Since it is the same for the -build tree and the installation tree, it is shared in both those locations. - -
- -### Utility Modules - -These modules consists of useful routines which is not OPM-specific and -that could be used in any projects. They don't depend on any other parts -of the build system. - - - - - - -
File (.cmake)Description
AddOptions - -Functions to add options to compiler command line (e.g. 'CXXFLAGS'). -This macro can add options to more than one language and/or configuration -at a time, and also automatically removes duplicates. - -
ConfigVars - -Functions to write values of selected variables to `config.h`. The -advantage of using this compared to a template file, is that other -modules can add their own variables to be written (a project doesn't -need to know which variables a prerequisite wants to have in config.h). - -
DuneCompat - -Modify `Makefile` so dunecontrol can infer source directory from it. -dunecontrol infers the source location of prerequisites from textual -analysis of the Makefile in their build tree. (dunecontrol cannot build -with Ninja anyway, so that is not a problem). - -
Duplicates - -Functions to remove duplicate values from a list of libraries, which -must always be done from the beginning in order to link correctly. - -
LibtoolArchives - -Write .la file which will make libtool find our library. This enables -users of our library to use libtool even if we did not do so ourselves. - -
- -### Build System Modules - -These are the modules which comprises the OPM-specific parts of the -build system. The overall flow through the stages of the build is best -captured by reading through the `OpmLibMain.cmake` module. - - - - - - - - - - - - - - - - -
File (.cmake)Description
configure - -Wrapper script which emulates an autotools front-end, making the build -system usable with dunecontrol. There is one in the project root directory -which just forwards everything to the main script in `cmake/Scripts`. - -
OpmAliases - -Copy variables which are probed by our find modules to the names which -are expected by DUNE. - -
OpmCompile - -Set up a compilation target for the library itself. It is assumed that -each OPM project build exactly one library file containing all its code. -The files and compiler options are passed through the project variables -(see the section [Variables Reference](#variables-reference) below). - -
OpmDefaults - -If optimization and debugging settings are not given on the command line, -supply a set of reasonable defaults for the detected platform and -compiler. - -
OpmDistClean - -Add a target (`make distclean`) to the build system which can remove the -build files themselves from the build directory tree. - -
OpmDoc - -Add target for building documentation, primarily Doxygen class reference -from the code. - -
OpmFiles - -Load list of files from `CMakeLists_files.txt` and put into the applicable -variables. - -
OpmGrid - -Adds the grid type selection code to config.h which is needed by dune-grid -if you want to set up a default grid. This is currently not needed by any -OPM project, and is provided only for porting client projects which previously -used this functionality from the autotools version. - -
OpmInit - -Read the version information and project name from `dune.module`. - -
OpmInstall - -Setup installation of the main library, public headers and debug symbols. - -
OpmKnown - -Marks as "used" all configuration variables which is used only by some of -the OPM projects, so they don't generate warnings in the rest of them. - -
OpmLibMain - -Driver module for the build process. First reads the list of prerequisites -and options, then set up the compiles and installations. - -
OpmProject - -Set up pkg-config and CMake information files (see [Generated Files] -(#generated-files)) for this project, based on configuration. - -
OpmSatellites - -Build test programs and examples for a library that is bundled in the project. -
- -### Wrapper Modules - -These modules wrap the CMake `find_library` function and adds the information -retrieved from the imported prerequisite to module-specific variables, so that -these can be added to the build in batch afterwards. - - - - -
File (.cmake)Description
OpmFind - -Wrapper around `find_package`. Searches in various locations relative to this -project as well as in the system directories for a CMake module which can -locate the package. If it is found, adds the project variables (see -[Variables Reference](#variables-reference)) for this project into this one, -for instance include and library directories are added to the compile and link -command-line for this project. - -
OpmPackage - -Typical way of finding an OPM package; searches for the header and library, -and tries to compile a test program. This is the general implementation of -a CMake find module, and is used to locate those of the prerequisites that -fits the pattern. - -
- -### Configuration Modules - -These are modules for altering the compiler and/or linker option in some way, -or get information from the system. They are not tied to the OPM projects. - - - - - - - - - - - - - - - - - -
File (.cmake)Description
UseCompVer - -Get the version of GCC that is used to compile the project. This is used in -other modules to enable features that are known to exist/work only in certain -versions of GCC. - -
UseDebugSymbols - -Set up the compile to generate debug symbols for the code. This is done also -if a release build was requested, to be able to do post-mortem debugging of -production code. (The debug symbols does not inhibit optimization). - -
UseDuneVer - -Retrieve the version of DUNE which is available. - -
UseDynamicBoost - -Determine if Boost is linked statically or dynamically (shared). This is -necessary to know for the unit tests. - -
UseFastBuilds - -Enable certain techniques which is known to speed up the build itself. - -
UseFortranWrappers - -Provide a macro for declaration of external symbols which is located in -Fortran libraries. It is not necessary to have a Fortran compiler present -to use this macro. - -
UseMultiArch - -Check if the system uses the multi-arch scheme for organizing libraries -(currently derivatives of Debian do this). - -
UseOnlyNeeded - -Only link to libraries which is actually used by the project. Some -platforms provide "under-linked" libraries (they need other libraries -but doesn't state so explicitly, but rather imply that the executable -must link to these itself), and this is also handled. - -
UseOpenMP - -Add OpenMP features to the build. Since OpenMP is activated by pragmas -in the code, compiler options instead of libraries are needed. - -
UseOptimization - -Compile with more extensive optimization that what is the default in -CMake. - -
UsePrecompHeaders - -Set up precompiled headers if the project has a `opm/xxx/opm-xxx-pch.hpp` -header. Due to problems across various compilers, this is currently an -opt-in feature. - -
UseSystemInfo - -Retrieve information about the system the build is performed on. This is -printed in the configuration log and can be helpful to troubleshoot -problems from error reports. - -
UseVCSInfo - -Retrieve information about which Git revision is compiled. This is useful -to figure out which version an error report refers to. - -
UseVersion - -Add version information for this project into the library binary, making -it available for query at runtime. - -
UseWarnings - -Enable a more extensive set of warnings to be reported by the compiler -than what is the default in CMake. - -
- -## Variables Reference - -The build system will setup variables with names of the pattern `xxx_YYY` -where xxx is the project name (here including the suite; e.g. "opm-core") -and yyy is the suffix in the list below. The project name is used verbatim, -i.e. there is no translation of dashes and case ("opm-core" and not "OPM_CORE"). - - - - - - - - - - - - - - - - - - -
SuffixDescription
_DEFINITIONS - -Macro defines (of the type `-DFOO`) that needs to be added to the compile -of translation units contained in this library. This also includes defines -that must be present to headers which is included by this library. - -
_CONFIG_VARS - -Defines which should be present in `config.h` of the project which -includes this library (client code). Only the names of the variables -are listed here; the actual values must be found by the configuration -script of the client. - -
_CONFIG_IMPL_VARS - -Defines which should be present in `config.h` but is only used by -the internal code of the project itself. Use this list to get -defines without imposing a requirement on client code to also probe -for values. - -
_INCLUDE_DIR - -Directory where the public headers of this project are stored. - -
_INCLUDE_DIRS - -List of include directories that must be on the compiler search -path to compile code which uses this project. In addition to the -headers of this project itself, it also includes the transitive -closure of paths for all prerequisites as well. - -
_LABEL - -Currently for OPM projects, this follows a pattern of `YYYY.MM` -where YYYY is the year of the release and MM is the month. This -gives information to humans about how up to date this instance -of the library is (but doesn't provide a way to check for -compatibility, which is why the VERSION alternatives exist). - -
_LIBRARY - -Name and path of the binary to link with. - -
_LIBRARIES - -Full list of the library of both this project, and all its -prerequisites, that need to be included in the link. I.e. the -client code should only include the transitive list from its -immediate prerequisites and not know about the full dependency -graph. - -
_LIBRARY_DIRS - -Directories that should be added to the linker search path when -including this library. - -
_LINKER_FLAGS - -Flags that must be added to the link when including this library. - -
_SOURCES - -List of source files contained in this project. This enables libraries -to be distributed in source form (e.g. CJSON and TinyXML) and linked -directly into the project. - -
_TARGET - -Name of the library which is generated by this project. CMake and -autotools do not like library names which contains dashes, so they -are stripped out. By using a macro for this we are guaranteed uniform -translation. - -
_VERSION - -Textual concatenation of all components of the version number (see below) -with a dot inbetween. This form of version number can be compared using -CMake VERSION_{LESS|EQUAL|GREATER} operators. - -
_VERSION_MAJOR - -Major version of the library. If the major versions doesn't match, then -compatibility with existing code cannot be reckoned. - -
_VERSION_MINOR - -Minor version of the library. Libraries with newer minor version can -have more features, but should be able to run old code. - -
_VERSION_REVISION - -Micro version of the library. This number is generally incremented -whenever bugfixes or performance improvements are made. -
diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Scripts/CheckCommits.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Scripts/CheckCommits.cmake deleted file mode 100644 index fe1c621fac..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Scripts/CheckCommits.cmake +++ /dev/null @@ -1,84 +0,0 @@ -find_package(Git REQUIRED) - -macro(sanity_check message) - if(status_code) - message(FATAL_ERROR "${message}") - endif() -endmacro() - -# Check that there are no changes in working-tree -execute_process(COMMAND ${GIT_EXECUTABLE} diff --quiet - RESULT_VARIABLE status_code - WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) -sanity_check("Cannot run with working tree changes. Commit, stash or drop them.") - -# Setup base of tests -set(check_base $ENV{CHECK_BASE}) -if(NOT check_base) - set(check_base origin/master) -endif() - -# Setup end of tests -set(check_head $ENV{CHECK_HEAD}) -if(NOT check_head) - set(check_head HEAD) -endif() - -# Setup target to build -set(check_target $ENV{CHECK_TARGET}) -if(NOT check_target) - set(check_target all;test) -endif() - -# Build threads -include(ProcessorCount) -set(build_threads $ENV{CHECK_THREADS}) -if(NOT build_threads) - ProcessorCount(build_threads) - if(build_threads EQUAL 0) - set(build_threads 1) - endif() -endif() - -# Record current HEAD -execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse --abbrev-ref HEAD - OUTPUT_VARIABLE current_branch - WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) - -string(REGEX REPLACE "(\r?\n)+$" "" current_branch "${current_branch}") - -# Grab revision list -execute_process(COMMAND ${GIT_EXECUTABLE} rev-list ${check_base}..${check_head} --reverse - OUTPUT_VARIABLE rev_list - WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) - -string(REPLACE "\n" ";" rev_list ${rev_list}) -foreach(rev ${rev_list}) - # Checkout - message("Testing revision ${rev}") - execute_process(COMMAND ${GIT_EXECUTABLE} checkout ${rev} - RESULT_VARIABLE status_code - WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) - sanity_check("Failed to checkout ${rev}") - - # Build - foreach(tgt ${check_target}) - if(build_threads GREATER 2) - execute_process(COMMAND ${CMAKE_COMMAND} "--build" "${CMAKE_BINARY_DIR}" "--target" "${tgt}" "--use-stderr" "--" "-j${build_threads}" - RESULT_VARIABLE status_code) - else() - execute_process(COMMAND ${CMAKE_COMMAND} "--build" "${CMAKE_BINARY_DIR}" "--target" "${tgt}" "--use-stderr" - RESULT_VARIABLE status_code) - endif() - sanity_check("Failed to build target '${tgt}'") - endforeach() - if(status_code) - execute_process(COMMAND ${GIT_EXECUTABLE} checkout ${current_branch} - WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) - endif() - sanity_check("Failed to build target for revision ${rev}") -endforeach() - -message("Everything checks out fine") -execute_process(COMMAND ${GIT_EXECUTABLE} checkout ${current_branch} - WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Scripts/DuneCompat2.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Scripts/DuneCompat2.cmake deleted file mode 100644 index 8678077628..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Scripts/DuneCompat2.cmake +++ /dev/null @@ -1,25 +0,0 @@ -# - Emulate a rule to patch the Makefile, adding a line to the source -# tree and write a marker file indicating it is done. - -set (base_dir ".") -set (marker_file "${base_dir}/CMakeFiles/marker") -set (makefile "${base_dir}/Makefile") - -# if the Makefile has changed, then update it -if ("${makefile}" IS_NEWER_THAN "${marker_file}") - # only add the string once, so it does not return multiple - # results for the command line (will lead to syntax error) - file (STRINGS "${makefile}" abs_top_srcdir_FOUND - REGEX "^abs_top_srcdir = " - ) - if (NOT abs_top_srcdir_FOUND) - file (APPEND "${makefile}" - "abs_top_srcdir = ${CMAKE_HOME_DIRECTORY}\n" - ) - endif (NOT abs_top_srcdir_FOUND) - # touch the marker so that we won't update the Makefile again - execute_process (COMMAND - ${CMAKE_COMMAND} -E touch "${marker_file}" - ) -endif ("${makefile}" IS_NEWER_THAN "${marker_file}") - diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Scripts/RemoveEmptyDir.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Scripts/RemoveEmptyDir.cmake deleted file mode 100644 index 919146c3f8..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Scripts/RemoveEmptyDir.cmake +++ /dev/null @@ -1,15 +0,0 @@ -# - Remove a directory if and only if it contains no files -# -# Pass the name of the directory as the DIR variable - -if (DIR) - # check if empty - file (GLOB_RECURSE files "${DIR}/*") - - # remove only if - if (NOT files) - execute_process (COMMAND - ${CMAKE_COMMAND} -E remove_directory "${DIR}" - ) - endif (NOT files) -endif (DIR) diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Scripts/WriteVerSHA.cmake b/ThirdParty/custom-opm-common/opm-common/cmake/Scripts/WriteVerSHA.cmake deleted file mode 100644 index b9ae4aa6af..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Scripts/WriteVerSHA.cmake +++ /dev/null @@ -1,68 +0,0 @@ -# - This script must be passed the following information -# -# GIT_EXECUTABLE Path to the Git executable -# PROJECT_SOURCE_DIR Path to the source directory -# PROJECT_BINARY_DIR Path to the build directory -# PROJECT_LABEL String that identifies the minor -# version of the project, e.g. "2013.03" -# - -# get hash code -exec_program ( - ${GIT_EXECUTABLE} ${PROJECT_SOURCE_DIR} - ARGS rev-parse --short --verify HEAD - OUTPUT_VARIABLE sha1 - RETURN_VALUE has_sha - ) - -# exec_program unfortunately mashes together both output -# and error streams, so we must use the return code to make -# sure that we only get the output -if (NOT ${has_sha} EQUAL 0) - set (sha1 "") -endif () - -# check for local changes -if (sha1) - # unstaged - exec_program ( - ${GIT_EXECUTABLE} ${PROJECT_SOURCE_DIR} - ARGS diff --no-ext-diff --quiet --exit-code - RETURN_VALUE dirty - OUTPUT_VARIABLE _dummy - ) - - # staged - exec_program ( - ${GIT_EXECUTABLE} ${PROJECT_SOURCE_DIR} - ARGS diff-index --no-ext-diff --cached --quiet --exit-code HEAD -- - RETURN_VALUE staged - OUTPUT_VARIABLE _dummy - ) - - # if we found any changes, then append an asterisk to - # the SHA1 so we know that it cannot be trusted - if (dirty OR staged) - set (sha1 "${sha1}*") - endif () -endif () - -string (TIMESTAMP build_timestamp "%Y-%m-%d at %H:%M:%S hrs") - -# write the content to a temporary file in a C compatible format -file (WRITE "${PROJECT_BINARY_DIR}/project-version.tmp" - "#ifndef OPM_GENERATED_OPM_VERSION_HEADER_INCLUDED\n" - "#define OPM_GENERATED_OPM_VERSION_HEADER_INCLUDED\n" - "#define PROJECT_VERSION_NAME \"${PROJECT_LABEL}\"\n" - "#define PROJECT_VERSION_HASH \"${sha1}\"\n" - "#define PROJECT_VERSION \"${PROJECT_LABEL} (${sha1})\"\n" - "#define BUILD_TIMESTAMP \"${build_timestamp}\"\n" - "#endif // OPM_GENERATED_OPM_VERSION_HEADER_INCLUDED\n" - ) - -# only commit this to source code if it actually changed. here -# we use execute_process instead of exec_program to avoid having -# it printed on the console every time -execute_process (COMMAND - ${CMAKE_COMMAND} -E copy_if_different "${PROJECT_BINARY_DIR}/project-version.tmp" "${PROJECT_BINARY_DIR}/project-version.h" - ) diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Scripts/clang-check-test.sh.in b/ThirdParty/custom-opm-common/opm-common/cmake/Scripts/clang-check-test.sh.in deleted file mode 100644 index 1dd2cdd3a6..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Scripts/clang-check-test.sh.in +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/bash - -# This script performs a single analysis using clang-check -# It is used by the 'make test' target in the buildsystems -# Usually you should use 'ctest -C clang-check' rather than calling this script directly -# -# Parameters: $1 = Application binary -# $2 = Source file to process - -clangcheck_cmd=$1 -source_file=$2 - -tmpfil=`mktemp` -$clangcheck_cmd -p @CMAKE_BINARY_DIR@ -analyze $source_file &> $tmpfil -cat $tmpfil -if test -s $tmpfil -then - rm $tmpfil - exit 1 -fi - -rm $tmpfil -exit 0 diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Scripts/cppcheck-test.sh b/ThirdParty/custom-opm-common/opm-common/cmake/Scripts/cppcheck-test.sh deleted file mode 100644 index 42233214eb..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Scripts/cppcheck-test.sh +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/bash - -# This script performs a single analysis using cppcheck -# It is used by the 'make test' target in the buildsystems -# Usually you should use 'ctest -C cppcheck' rather than calling this script directly -# -# Parameters: $1 = Application binary -# $2 = Source file to process -# $3..$N = include path parameters (-I dir1 -I dir2 ...) - -cppcheck_cmd=$1 -source_file=$2 -shift 2 - -tmpfil=`mktemp` -$cppcheck_cmd $@ --enable=all --suppress=unusedFunction $source_file &> $tmpfil -nmatch=`cat $tmpfil | grep "\[.*\]" | wc -l` -nsys=`cat $tmpfil | grep "\[/usr.*\]" | wc -l` -nnone=`cat $tmpfil | grep "\[\\*]" | wc -l` -ndef=`cat $tmpfil | grep "\[.*Too many #ifdef" | wc -l` -let "nval=$nmatch-$nsys-$nnone-$ndef" -if test $nval -gt 0 -then - cat $tmpfil - rm $tmpfil - exit 1 -fi - -rm $tmpfil -exit 0 diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Templates/DoxygenLayout.xml b/ThirdParty/custom-opm-common/opm-common/cmake/Templates/DoxygenLayout.xml deleted file mode 100644 index 89e6abd029..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Templates/DoxygenLayout.xml +++ /dev/null @@ -1,185 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Templates/la.in b/ThirdParty/custom-opm-common/opm-common/cmake/Templates/la.in deleted file mode 100644 index 59bb09de09..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Templates/la.in +++ /dev/null @@ -1,41 +0,0 @@ -# lib@target@.la - a libtool library file -# Generated by libtool (GNU libtool) @ltversion@ -# -# Please DO NOT delete this file! -# It is necessary for linking the library. - -# The name that we can dlopen(3). -dlname='@dlname@' - -# Names of this library. -library_names='@library_names@' - -# The name of the static archive. -old_library='@old_library@' - -# Linker flags that can not go in dependency_libs. -inherited_linker_flags='@inherited_linker_flags@' - -# Libraries that this one depends upon. -dependency_libs='@dependency_libs@' - -# Names of additional weak libraries provided by this library -weak_library_names='' - -# Version information for lib@target@. -current=@current@ -age=@age@ -revision=0 - -# Is this an already installed library? -installed=no - -# Should we warn about portability when linking against -modules? -shouldnotlink=no - -# Files to dlopen/dlpreopen -dlopen='' -dlpreopen='' - -# Directory that this library needs to be installed in: -libdir='@libdir@' diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Templates/opm-project-config-version.cmake.in b/ThirdParty/custom-opm-common/opm-common/cmake/Templates/opm-project-config-version.cmake.in deleted file mode 100644 index ba1e1e874b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Templates/opm-project-config-version.cmake.in +++ /dev/null @@ -1,28 +0,0 @@ -# - CMake version file for @opm-project_NAME@ -# -# Determine if requested version matches exactly or is compatible with -# the installed package. It sets the following variables: -# -# PACKAGE_VERSION Full provided version string -# PACKAGE_VERSION_COMPATIBLE True if version is compatible -# PACKAGE_VERSION_EXACT True if version is exact match - -# This file is used by find_package to see if the installed version of a -# package can be used by the client, before the main -config.cmake file -# is loaded. -# see - -# this is the version that is installed -set (PACKAGE_VERSION @opm-project_VERSION@) - -# if we wanted this exact version, then everything's fine -if (PACKAGE_VERSION VERSION_EQUAL PACKAGE_FIND_VERSION) - set (PACKAGE_VERSION_EXACT TRUE) -endif (PACKAGE_VERSION VERSION_EQUAL PACKAGE_FIND_VERSION) - -# in general, we assume that there is going to be API breakage between -# released versions; this will hopefully change in the future -## compatible versions -#if (NOT PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION) -# set (PACKAGE_VERSION_COMPATIBLE TRUE) -#endif (NOT PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION) diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Templates/opm-project-config.cmake.in b/ThirdParty/custom-opm-common/opm-common/cmake/Templates/opm-project-config.cmake.in deleted file mode 100644 index 9791e49b84..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Templates/opm-project-config.cmake.in +++ /dev/null @@ -1,109 +0,0 @@ -# - @opm-project_DESCRIPTION@ config mode -# -# Defines the following variables: -# @opm-project_NAME@_FOUND - true -# @opm-project_NAME@_VERSION - version of the @opm-project_NAME@ library found, e.g. 0.2 -# @opm-project_NAME@_DEFINITIONS - defines to be made on the command line -# @opm-project_NAME@_INCLUDE_DIRS - header directories with which to compile -# @opm-project_NAME@_LINKER_FLAGS - flags that must be passed to the linker -# @opm-project_NAME@_LIBRARIES - names of the libraries with which to link -# @opm-project_NAME@_LIBRARY_DIRS - directories in which the libraries are situated -# -# You should put lines like this in your CMakeLists.txt -# set (@opm-project_NAME@_DIR "${PROJECT_BINARY_DIR}/../@opm-project_NAME@" CACHE LOCATION "Build tree of @opm-project_NAME@") -# find_package (@opm-project_NAME@) -# configure_vars ( -# FILE CXX "${PROJECT_BINARY_DIR}/config.h" -# WRITE ${@opm-project_NAME@_CONFIG_VARS} -# ) - -# - -# Prevent multiple inclusions -if(NOT @opm-project_NAME@_FOUND) - # propagate these properties from one build system to the other - set (@opm-project_NAME@_PREFIX "@DUNE_PREFIX@") - set (@opm-project_NAME@_VERSION "@opm-project_VERSION@") - set (@opm-project_NAME@_DEFINITIONS "@opm-project_DEFINITIONS@") - set (@opm-project_NAME@_INCLUDE_DIRS "@opm-project_INCLUDE_DIRS@") - set (@opm-project_NAME@_LIBRARY_DIRS "@opm-project_LIBRARY_DIRS@" "@CMAKE_LIBRARY_OUTPUT_DIRECTORY@") - set (@opm-project_NAME@_LINKER_FLAGS "@opm-project_LINKER_FLAGS@") - set (@opm-project_NAME@_CONFIG_VARS "@opm-project_CONFIG_VARS@") - - # The flag whether embedded Python is supported or not is passed to downstream modules, - # it is only used to enable/disable regression testing with Python enabled input. The - # actual code is self contained - and can be used downstream without awareness of this. - set (@opm-project_NAME@_EMBEDDED_PYTHON @OPM_ENABLE_EMBEDDED_PYTHON@) - - # libraries come from the build tree where this file was generated - set (@opm-project_NAME@_LIBRARY "@opm-project_LIBRARY@") - set (@opm-project_NAME@_LIBRARIES ${@opm-project_NAME@_LIBRARY} "@opm-project_LIBRARIES@") - - # The purpose of this string replacement operation is to enable use of the - # generated opm-project-config.cmake file also in the situation where 'make - # install' has been invoked with the DESTDIR option: - # - # opm-common/build> cmake .. -DCMAKE_INSTALL_PREFIX=/real/prefix - # opm-common/budil> make install DESTDIR=/tmp/prefix - # - # downstream/build> cmake .. -DDEST_PREFIX=/tmp/prefix -DCMAKE_PREFIX_PATH=/tmp/prefix - # downstream/build> make install - # - # That way the downstream dependency can still use find_package( opm-common ) - # even though the opm-common-config.cmake file is not internally consistent - # with it's own location in the filesystem. - - if(DEST_PREFIX) - set(DEST_PREFIX "${DEST_PREFIX}${@opm-project_NAME@_PREFIX}") - string(REPLACE ${@opm-project_NAME@_PREFIX} ${DEST_PREFIX} @opm-project_NAME@_INCLUDE_DIRS "${@opm-project_NAME@_INCLUDE_DIRS}") - string(REPLACE ${@opm-project_NAME@_PREFIX} ${DEST_PREFIX} @opm-project_NAME@_LIBRARY_DIRS "${@opm-project_NAME@_LIBRARY_DIRS}") - string(REPLACE ${@opm-project_NAME@_PREFIX} ${DEST_PREFIX} @opm-project_NAME@_LIBRARY "${@opm-project_NAME@_LIBRARY}") - endif() - - - set (HAVE_@opm-project_NAME_UC@ 1) - mark_as_advanced (@opm-project_NAME@_LIBRARY) - - # not all projects have targets; conditionally add this part - if (NOT "@opm-project_TARGET@" STREQUAL "") - # add the library as a target, so that other things in the project including - # this file may depend on it and get rebuild if this library changes. - if(NOT TARGET @opm-project_TARGET@) - get_filename_component(_dir "${CMAKE_CURRENT_LIST_FILE}" PATH) - include("${_dir}/@opm-project_NAME@-targets.cmake") - endif() - endif (NOT "@opm-project_TARGET@" STREQUAL "") - - # same as above, but for C99 - string (REPLACE "@C_STD99_FLAGS@" "" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") - string (STRIP "${CMAKE_C_FLAGS}" CMAKE_C_FLAGS) - set (CMAKE_C_FLAG "@C_STD99_FLAGS@ ${CMAKE_C_FLAGS}") - - # build with OpenMP if that was found - if (NOT "@OpenMP_C_FLAGS@" STREQUAL "") - string (REPLACE "@OpenMP_C_FLAGS@" "" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") - string (STRIP "${CMAKE_C_FLAGS}" CMAKE_C_FLAGS) - set (CMAKE_C_FLAG "@OpenMP_C_FLAGS@ ${CMAKE_C_FLAGS}") - endif (NOT "@OpenMP_C_FLAGS@" STREQUAL "") - if (NOT "@OpenMP_CXX_FLAGS@" STREQUAL "") - string (REPLACE "@OpenMP_CXX_FLAGS@" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") - string (STRIP "${CMAKE_CXX_FLAGS}" CMAKE_CXX_FLAGS) - set (CMAKE_C_FLAG "@OpenMP_CXX_FLAGS@ ${CMAKE_CXX_FLAGS}") - endif (NOT "@OpenMP_CXX_FLAGS@" STREQUAL "") - - # this is the contents of config.h as far as our probes can tell: - - - # The settings in this block do not mix well with the DEST_PREFIX - # setting. - if (NOT DEST_PREFIX) - # This is required to include OpmPackage - set(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH}" @PREREQ_LOCATION@) - - # extra code from variable OPM_PROJECT_EXTRA_CODE - @OPM_PROJECT_EXTRA_CODE@ - # end extra code - - include(@opm-project_NAME@-prereqs) - endif() -endif() diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Templates/opm-project.pc.in b/ThirdParty/custom-opm-common/opm-common/cmake/Templates/opm-project.pc.in deleted file mode 100644 index 6581685589..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Templates/opm-project.pc.in +++ /dev/null @@ -1,13 +0,0 @@ -prefix=@prefix@ -libdir=@libdir@ -includedir=@includedir@ -CXX=@CMAKE_CXX_COMPILER@ @CXX_STD0X_FLAGS@@CXX_SPACE@@CXX_STDLIB_FLAGS@ @OpenMP_CXX_FLAGS@ -CC=@CMAKE_C_COMPILER@ @C_STD99_FLAGS@ @OpenMP_C_FLAGS@ -DEPENDENCIES= - -Name: @name@ -Description: @description@ @major@.@minor@ -Version: @major@.@minor@ -URL: http://opm-project.org -Libs: @target@ @libs@ -Cflags: @includes@ @defs@ diff --git a/ThirdParty/custom-opm-common/opm-common/cmake/Templates/style.css b/ThirdParty/custom-opm-common/opm-common/cmake/Templates/style.css deleted file mode 100644 index 0877f33144..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cmake/Templates/style.css +++ /dev/null @@ -1,11 +0,0 @@ -/* Userspesific CSS for doxygen */ -body, table, div, p, dl { - font-family: Lucida Grande, Verdana, Geneva, Arial, sans-serif; - font-size: 16px; -} -h1 { - font-size: 120%; -} - - - diff --git a/ThirdParty/custom-opm-common/opm-common/cross-platform/PortableEndian.hpp b/ThirdParty/custom-opm-common/opm-common/cross-platform/PortableEndian.hpp deleted file mode 100644 index 50838835c5..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cross-platform/PortableEndian.hpp +++ /dev/null @@ -1,16 +0,0 @@ -#ifndef PORTABLE_ENDIAN_H__ -#define PORTABLE_ENDIAN_H__ - -#if (defined(_WIN16) || defined(_WIN32) || defined(_WIN64)) && !defined(__WINDOWS__) - -# define __WINDOWS__ - -#endif - -#if defined(__WINDOWS__) -#define __builtin_bswap16(x) _byteswap_ushort((x)) -#define __builtin_bswap32(x) _byteswap_ulong((x)) -#define __builtin_bswap64(x) _byteswap_uint64((x)) -#endif - -#endif // PORTABLE_ENDIAN_H__ \ No newline at end of file diff --git a/ThirdParty/custom-opm-common/opm-common/cross-platform/windows/PortableEndian.hpp b/ThirdParty/custom-opm-common/opm-common/cross-platform/windows/PortableEndian.hpp deleted file mode 100644 index 50838835c5..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cross-platform/windows/PortableEndian.hpp +++ /dev/null @@ -1,16 +0,0 @@ -#ifndef PORTABLE_ENDIAN_H__ -#define PORTABLE_ENDIAN_H__ - -#if (defined(_WIN16) || defined(_WIN32) || defined(_WIN64)) && !defined(__WINDOWS__) - -# define __WINDOWS__ - -#endif - -#if defined(__WINDOWS__) -#define __builtin_bswap16(x) _byteswap_ushort((x)) -#define __builtin_bswap32(x) _byteswap_ulong((x)) -#define __builtin_bswap64(x) _byteswap_uint64((x)) -#endif - -#endif // PORTABLE_ENDIAN_H__ \ No newline at end of file diff --git a/ThirdParty/custom-opm-common/opm-common/cross-platform/windows/Substitutes.cpp b/ThirdParty/custom-opm-common/opm-common/cross-platform/windows/Substitutes.cpp deleted file mode 100644 index 328e10d8ee..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cross-platform/windows/Substitutes.cpp +++ /dev/null @@ -1,32 +0,0 @@ -#ifdef _WIN32 - -#include "Substitutes.hpp" -#include - -int -fnmatch(const char* pattern, const char* string, int flags) -{ - if (flags != 0) { - std::cerr << __FUNCTION__ << "Warning: flags other than 0 are not supported in Windows."; - } - wchar_t pszFile[1024]; - wchar_t pszSpec[1024]; - - size_t outsize; - mbstowcs_s(&outsize, pszFile, string, strlen(string) + 1); - mbstowcs_s(&outsize, pszSpec, pattern, strlen(pattern) + 1); - - return (!PathMatchSpecW(pszFile, pszSpec)); -} - -struct tm* -gmtime_r(const time_t* timer, struct tm* buf) -{ - if (gmtime_s(buf, timer) == 0) { - return nullptr; - } else { - return buf; - } -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/cross-platform/windows/Substitutes.hpp b/ThirdParty/custom-opm-common/opm-common/cross-platform/windows/Substitutes.hpp deleted file mode 100644 index d9ebdd47c9..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/cross-platform/windows/Substitutes.hpp +++ /dev/null @@ -1,19 +0,0 @@ -#pragma once - -#ifdef _WIN32 - -// IGNORE is used in InputErrorAction.hpp, as an enum value, -// but is defined as a #def in WinBase.h which is included by Shlwapi.h. -// It is not required here, so we can undefine it. -#undef IGNORE -#undef GROUP_NAME -#undef ERROR -#include -#include -#include - -int fnmatch(const char* pattern, const char* string, int flags); - -struct tm* gmtime_r(const time_t* timer, struct tm* buf); - -#endif \ No newline at end of file diff --git a/ThirdParty/custom-opm-common/opm-common/debian/changelog b/ThirdParty/custom-opm-common/opm-common/debian/changelog deleted file mode 100644 index 67930415fe..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/debian/changelog +++ /dev/null @@ -1,5 +0,0 @@ -opm-common (2020.04-1~xenial) xenial; urgency=medium - - * New release - - -- Arne Morten Kvarving Mon, 19 Oct 2015 10:49:00 +0200 diff --git a/ThirdParty/custom-opm-common/opm-common/debian/compat b/ThirdParty/custom-opm-common/opm-common/debian/compat deleted file mode 100644 index ec635144f6..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/debian/compat +++ /dev/null @@ -1 +0,0 @@ -9 diff --git a/ThirdParty/custom-opm-common/opm-common/debian/control b/ThirdParty/custom-opm-common/opm-common/debian/control deleted file mode 100644 index a164678716..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/debian/control +++ /dev/null @@ -1,64 +0,0 @@ -Source: opm-common -Priority: extra -Maintainer: Arne Morten Kvarving -Build-Depends: build-essential, debhelper (>= 9), - pkg-config, cmake, git, libtool, doxygen, graphviz, - texlive-latex-extra, texlive-latex-recommended, - ghostscript, libboost-system-dev, libboost-test-dev, - zlib1g-dev, libpython3-dev, python3-numpy, python3-distutils, - python3-setuptools, python3-setuptools-scm, python3-pytest-runner, - python3-decorator -Standards-Version: 3.9.2 -Section: libs -Homepage: http://opm-project.org -Vcs-Git: git://github.com/OPM/opm-common.git -Vcs-Browser: https://github.com/OPM/opm-common - -Package: libopm-common1 -Section: libs -Pre-Depends: ${misc:Pre-Depends} -Architecture: any -Multi-Arch: same -Depends: ${shlibs:Depends}, ${misc:Depends} -Provides: libopm-common -Description: OPM common library - The OPM common library contains generic code shared across all OPM modules. - -Package: libopm-common1-bin -Section: libs -Pre-Depends: ${misc:Pre-Depends} -Architecture: any -Multi-Arch: same -Depends: ${shlibs:Depends}, ${misc:Depends} -Provides: libopm-common-bin -Description: OPM common binaries - The OPM common binaries. - -Package: libopm-common1-dev -Section: libdevel -Architecture: any -Multi-Arch: foreign -Provides: libopm-common-dev -Suggests: libopm-common1-doc -Depends: libopm-common1 (= ${binary:Version}) -Description: OPM common library -- development files - The OPM common library contains the shared buildsystem - and helpers shared across all OPM modules. - -Package: libopm-common1-doc -Section: doc -Architecture: all -Multi-Arch: foreign -Provides: libopm-common-doc -Description: OPM common library -- documentation - The OPM common library contains the shared buildsystem - and helpers shared across all OPM modules. - -Package: python3-opm-common -Section: libs -Pre-Depends: ${misc:Pre-Depends} -Architecture: any -Multi-Arch: same -Depends: ${shlibs:Depends}, ${misc:Depends}, libopm-common1, python3-numpy, python3-decorator -Description: OPM common python bindings - Python package for opm-common diff --git a/ThirdParty/custom-opm-common/opm-common/debian/copyright b/ThirdParty/custom-opm-common/opm-common/debian/copyright deleted file mode 100644 index 00e820065d..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/debian/copyright +++ /dev/null @@ -1,13 +0,0 @@ -License: GPL-3+ - This package is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This package is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see diff --git a/ThirdParty/custom-opm-common/opm-common/debian/docs b/ThirdParty/custom-opm-common/opm-common/debian/docs deleted file mode 100644 index f0f644ee08..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/debian/docs +++ /dev/null @@ -1,2 +0,0 @@ -LICENSE -README.md diff --git a/ThirdParty/custom-opm-common/opm-common/debian/libopm-common1-bin.install b/ThirdParty/custom-opm-common/opm-common/debian/libopm-common1-bin.install deleted file mode 100644 index 1df36c612f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/debian/libopm-common1-bin.install +++ /dev/null @@ -1 +0,0 @@ -usr/bin/* diff --git a/ThirdParty/custom-opm-common/opm-common/debian/libopm-common1-dev.install b/ThirdParty/custom-opm-common/opm-common/debian/libopm-common1-dev.install deleted file mode 100644 index a863e41c2c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/debian/libopm-common1-dev.install +++ /dev/null @@ -1,6 +0,0 @@ -usr/include/* -usr/lib/dunecontrol/* -usr/lib/*/pkgconfig/* -usr/share/cmake/* -usr/share/opm/* -usr/lib/*/lib*.so diff --git a/ThirdParty/custom-opm-common/opm-common/debian/libopm-common1-doc.install b/ThirdParty/custom-opm-common/opm-common/debian/libopm-common1-doc.install deleted file mode 100644 index d9d4f6f8aa..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/debian/libopm-common1-doc.install +++ /dev/null @@ -1 +0,0 @@ -usr/share/doc/* diff --git a/ThirdParty/custom-opm-common/opm-common/debian/libopm-common1.install b/ThirdParty/custom-opm-common/opm-common/debian/libopm-common1.install deleted file mode 100644 index 3ddde58419..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/debian/libopm-common1.install +++ /dev/null @@ -1 +0,0 @@ -usr/lib/*/lib*.so.* diff --git a/ThirdParty/custom-opm-common/opm-common/debian/python3-opm-common.install b/ThirdParty/custom-opm-common/opm-common/debian/python3-opm-common.install deleted file mode 100644 index 970cf8075b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/debian/python3-opm-common.install +++ /dev/null @@ -1 +0,0 @@ -usr/lib/python*/* diff --git a/ThirdParty/custom-opm-common/opm-common/debian/rules b/ThirdParty/custom-opm-common/opm-common/debian/rules deleted file mode 100644 index ca31001585..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/debian/rules +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/make -f -# -*- makefile -*- -# Sample debian/rules that uses debhelper. -# This file was originally written by Joey Hess and Craig Small. -# As a special exception, when this file is copied by dh-make into a -# dh-make output file, you may use that output file without restriction. -# This special exception was added by Craig Small in version 0.37 of dh-make. - -# Uncomment this to turn on verbose mode. -#export DH_VERBOSE=1 - -%: - dh $@ --parallel - -override_dh_auto_clean: - dh_auto_clean --buildsystem=cmake - -override_dh_auto_build: - dh_auto_build --buildsystem=cmake - -# consider using -DUSE_VERSIONED_DIR=ON if backporting -override_dh_auto_configure: - dh_auto_configure --buildsystem=cmake -- -DCMAKE_BUILD_TYPE=RelWithDebInfo -DSTRIP_DEBUGGING_SYMBOLS=ON -DBUILD_SHARED_LIBS=1 -DCMAKE_INSTALL_DOCDIR=share/doc/libopm-common1 -DWHOLE_PROG_OPTIM=ON -DUSE_RUNPATH=OFF -DWITH_NATIVE=OFF -DOPM_ENABLE_PYTHON=1 -DOPM_INSTALL_PYTHON=1 -DPYTHON_EXECUTABLE=/usr/bin/python3 - -override_dh_auto_install: - dh_auto_install -- install-html - -override_dh_installdocs: - dh_installdocs --link-doc=libopm-common1 diff --git a/ThirdParty/custom-opm-common/opm-common/debian/source/format b/ThirdParty/custom-opm-common/opm-common/debian/source/format deleted file mode 100644 index d3827e75a5..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/debian/source/format +++ /dev/null @@ -1 +0,0 @@ -1.0 diff --git a/ThirdParty/custom-opm-common/opm-common/docs/keywords.txt b/ThirdParty/custom-opm-common/opm-common/docs/keywords.txt deleted file mode 100644 index be70bdbd1f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/docs/keywords.txt +++ /dev/null @@ -1,336 +0,0 @@ -Keywords is the most important aspect of the ECLIPSE datafile -parser. - -1. The structure of a keyword ------------------------------ - -A keyword is the fundamental unit when parsing. Keywords are added to -the parser by schema definitions. The schema definition of the keywords -are given as Json files under the opm/share/keywords directory. Json -can be thought of as a lean alternative to XML, you will find it described -here: http://www.json.org/ -As part of the build process these keyword definitions are compiled -to ParserKeyword instances. - - -1.1 Starting a keyword ----------------------- -The keywords are defined as follows: - - 1. The keyword should start in column 0; everything beyond character - 8 is ignored. - - 2. The keyword should start with a alphabet character, subsequent - characters should be alphanumeric or in the set [-,_,+]. - - 3. We think ECLIPSE is case insensitive. - -This is cehcked by the static method: -ParserKeyword::validDeckName(). An important part of the parsing of -keywords is to detect when the keyword specification is complete. For -most keywords we can detect that either by a terminating '/' or the -keywords have a predefined size, but for some odd keywords we can not -reliably detect the end-of-keyword condition and instead we terminate -keyword1 when we find a string which corresponds to the start of a new -keyword. Examples of such oddball keywords include: VFPPROD and -VFPINJ. - - -1.2 Records ------------ - -The data content of a keyword comes as a collection of -records. Records are a collection of 'data', terminated by a '/'. Here -are three examples of records: - - 'METRES' / - - 1 'OFF' 100 '*' 24.0 / - - 0.26 0.27 0.26 0.78 - 0.82 0.66 0.27 0.78 - 0.76 0.56 0.23 0.67 / - -From these examples we see that: - - 1. One record can contain a mix of integer, float and string values. - 2. Records typically correspond to one line in the data-file, but - that is purely convention; the records can be sprinkled with - newlines. - 3. Each record is terminated with a '/' - - -1.3 How many records in a keyword ---------------------------------- - -One of the first structural elements which must be configured into the -the parser keywords is the number of records in the different -keywords, this is closely related to how the keyboard is -terminated. Here comes some typical examples of keywords: - - - GRID - - - WCONHIST - ... / - ... / - ... / - / - - ---\ - EQLDIMS | - .... / | - | - EQUIL | - .... / | - .... / | - ---/ - - VFPPROD - A .. / - B... / - .... / - .... / - - - PVGO - / - / - - -In the list above here the GRID keyword has zero records, i.e. no data -at all. The WCONHIST keyword has three records of data, the EQLDIMS -keyword has one record, the EQUIL keyword has two records and finally -the VFPPROD keyword has four records. The number of records, or how to -infer it, must be configured with the "size" attribute in the JSON -configuration. When it comes to the number of records and termination -we currently have five different categories: - - 1. Keywords with a fixed number of records. Both the GRID keyword - and the EQLDIMS keyword have a fixed number of records, zero and - one respectively. These keywords are therefor not explicitly - terminated in any way, and the "size" attribute has the numerical - explicitly: - - {"name" : "EQLDIMS" , "size" : 1 , ....} - {"name" : "GRID" , "size" : 0, .... } - - - 2. Keywords with a variable number of records like the - WCONHIST. Becase the number of records is not known in advance - this keyword must be explicitly terminated with a '/'. This is - the most common configuration and for keywords of this type it is - not necessary to specify a size attribute at all: - - {"name" : "WCONHIST" , .... } - - - 3. Keywords where the number of records is inferred from the content - of another keyword; this is the case with EQUIL which reads the - number of records from the xxx item of the EQLDIMS keyword. Since - the number of records is known in advance (indirectly through the - EQLDIMS keyword) the EQUIL keyword is not explicitly terminated - with a '/'. In the json file this is specified with the "size" - attribute being an object containing the name and item of keyword - which should be consulted to infer the size; so for the EQUIL - keyword the size attribute looks like: - - {"name" : "EQUIL" , - "size" : {"keyword" : "EQLDIMS" , "item" : "NTEQUL"} , ... - - When parsing the EQUIL keyword the parser will consult the - already parsed content of the 'EQLDIMS' keyword (i.e. a - DeckKeyword instance) and get the numerical value of the 'NTEQUL' - item. - - - 4. For some keywords the number of records should be calculated - run-time based based on the content of the first records in the - keyword - this at least applies to VFPPROD and VFPINJ. Since the - size of the keyword is deterministic - given the first few - records - the keyword is not slash terminated. - - To infer the number of records in the keyword based on an - internal calculation is not supported, hence for these keywords - size is given as unkown, and the keywords are terminated when the - next valid keyword is found: - - {"name" : "VFPPROD" , "size" : "UNKNOWN", .... - - - - 5. Tables PVTG and PVTO: The two tables PVTG and PVTO are special - cased. The special casing should probably be removed, and the - "size" : "UNKNOWN" could be used for these two keyword. - - - - -1.4 The content of a record: items ----------------------------------- - -A record consist of one or several items. An item can consist of one -or several values from the record, for items with more than one value -it is not possible to specify the exact number of values - the item -will just consume the remaining values in the input stream. An item -has a name, a data type and optionally a default value. For instance -the WCONHIST keyword has the the following items specification: - - "items": - [{"name" : "WELL" , "value_type" : "STRING"}, - {"name" : "STATUS" , "value_type" : "STRING" , "default" : "OPEN"}, - {"name" : "CMODE" , "value_type" : "STRING"}, - {"name" : "ORAT" , "value_type" : "DOUBLE", "default" : 0.0, "dimension" : "LiquidSurfaceVolume/Time"}, - {"name" : "WRAT" , "value_type" : "DOUBLE" , "default" : 0.0, "dimension" : "LiquidSurfaceVolume/Time"}, - {"name" : "GRAT" , "value_type" : "DOUBLE" , "default" : 0.0, "dimension" : "GasSurfaceVolume/Time"}, - {"name" : "VFP_TABLE" , "value_type" : "INT" , "default" : 0.0 , "comment":"The default is a state variable"}, - {"name" : "LIFT" , "value_type" : "DOUBLE" , "default" : 0.0 , "comment":"The default is a state variable"}, - {"name" : "THP" , "value_type" : "DOUBLE" , "default" : 0.0 , "dimension" : "Pressure"}, - {"name" : "BHP" , "value_type" : "DOUBLE" , "default" : 0.0 ,"dimension" : "Pressure"}, - {"name" : "NGLRAT" , "value_type" : "DOUBLE" , "default" : 0.0 ,"dimension" : "LiquidSurfaceVolume/Time"}]} - -Here we can see the following: - - 1. The items can be of types string, integer and float, the type is - specified with the "value_type" attribute which must equal - "STRING", "DOUBLE" or "INT". - - 2. You can optionally specify a default value, see the discussion of - the parsing workflow below for the treatment of defaults. - - 3. For items of type double you can specify a dimension, see XXXX for - the available dimensions. For quantities with a dimension the - parser will convert to SI units, and the DeckDoubleItem class has - a getSIDouble() and getRawDouble() method. - - -Items consuming the rest of the record --------------------------------------- - -Most of the items will consume exactly one value from the input deck, -but it is also possible that the last item consumes the remaining -items in the input deck, these typically correspond to table keywords -or lists of memnonics. In the input deck the PVTG keyword will -typically appear like this: - -PVTG -200 0.15 0.15 10 - 0.20 0.20 12 - 0.25 0.20 15 / -250 0.05 0.05 20 - 0.15 0.10 40 / -... - -In the manual this is described as two tables with three columns, one -with three rows and one with two rows. The leading values of 200 and -250 are the pressure values where the two tables apply. The visual -formatting in the deck, and also the written desciption in the manual, -strongly hints at a table structure - however from a parsing point of -view this corresponds to just two records of different length. Both -records start with a pressure value, and then follows 3n consecutive -values. The item configuration of PVTG looks like this: - - "items" : [ - {"name":"GAS_PRESSURE", "value_type" : "DOUBLE", "dimension":"Pressure" }, - {"name":"DATA", "size_type" : "ALL" , "value_type":"DOUBLE" , - "dimension" : ["OilDissolutionFactor","OilDissolutionFactor","Viscosity"]} - ] - -I.e. first we consume one value from the input deck and assign it to -the GAS_PRESSURE item, then the DATA item has "size_type" : "ALL" - -meaning that this item will consume the the rest of the values in the -input record. Also observe that for the "DATA" item the dimension is a -vector of three elements, when converting to SI the dimension applied -to element i is given as: - - dim[i] = dimension[i % 3] - -In addition to tables the grid property keywords use items which -consume the rest of the record. For instance the PORO keyword will -typcially look like this in the input deck: - -PORO -0.14 0.15 0.0 0.10 -0.16 0.25 0.1 0.11 -0.14 0.15 0.0 0.09 -... -0.21 0.07 0.1 0.13 -/ - -From a parsing point of view this is one single record; which contains -one item consuming all of the values in the input deck. In the -configuration this could have been configured as: - - "items" : [{"name" : "DATA", - "value_type" : "DOUBLE" , - "size_type" : "ALL" , - "default" : 0 , - "dimension" : "1"}] - -However, since keywords containing large data arrays, like e.g. COORD -and PERMX are quite common a shortcut has been created for such -keywords, for instance the PORO keyword is configures as: - - {"name" : "PORO" , "sections" : ["GRID"], - "data" : {"value_type" : "DOUBLE" , "default" : 0 , "dimension":"1"}} - -i.e. the "data" attribute is used as shorthand to configure a keyword -with one record and one item which consumes all the data of the input -deck. - - -Multirecord keyword configuration ---------------------------------- - - -Units and dimensions --------------------- - -The values given in the input dataset are generally dimensionfull, and -before the simulator can start we must convert to internal SI values -based on the unit system used in the input deck. In the input deck the -different physical quantities are generally expressed with -per-quantity units. The unit system is *not* based on selecting a unit -for the fundamental dimensions length, mass and time and then deriving -composite units based on the dimension of the composite quantity. As a -consequence the list of dimensions supported by the parser is long, -and growing. The current list can be found in the source file: - - opm/parser/eclipse/Units/UnitSystem.cpp - - - -Default values --------------- - - - - -Classes: --------- - -The library contains classes along two dimensions: - - +----------------+ +----------------+ +----------------+ - | Parser | | RawDeck | | Deck | - +----------------+ +----------------+ +----------------+ - - +----------------+ +----------------+ +----------------+ - | ParserKeyword | | Rawkeyword | | DeckKeyword | - +----------------+ +----------------+ +----------------+ - - +----------------+ +----------------+ +----------------+ - | ParserRecord | | RawRecord | | DeckRecord | - +----------------+ +----------------+ +----------------+ - - +----------------+ +----------------+ - | ParserItem | | DeckItem | - +----------------+ +----------------+ - - - - - - - diff --git a/ThirdParty/custom-opm-common/opm-common/etc/opm_bash_completion.sh.in b/ThirdParty/custom-opm-common/opm-common/etc/opm_bash_completion.sh.in deleted file mode 100644 index ab8c7b3e0a..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/etc/opm_bash_completion.sh.in +++ /dev/null @@ -1,60 +0,0 @@ -# this snippet enables parameter completion via the tabulator key -# for bash for opm products. - -# this is a bash readline completer for the case where a binary is -# already known to be an eWoms simulator. -_ewoms_parameter_completor() -{ - if test "$COMP_WORDS" == ""; then - return 0 - fi - - cmd="${COMP_WORDS[0]}" - cur="${COMP_WORDS[COMP_CWORD]}" - fullcmd="$(which "$cmd" 2> /dev/null)" - ALL_OPTS=$("$fullcmd" --help 2> /dev/null | grep '^ *--' | sed 's/ *\(--[a-zA-Z0-9\-]*\)=.*/\1=/') - ALL_OPTS=$(echo "$ALL_OPTS" | sed 's/^ *--help.*/--help/') - COMPREPLY=( $(compgen -A file -W "$ALL_OPTS" -- "${cur}") ) -} - -# this is a bash readline default completer which attempts to find out -# if a given binary is an eWoms simulation. this needs to be set as a -# default completer because the name of eWoms binaries cannot be known -# a-priori. -_ewoms_generic_parameter_completor() -{ - if test "$COMP_WORDS" == ""; then - return 0 - fi - - COMPREPLY=() - local cmd cur ALL_OPTS - cmd="${COMP_WORDS[0]}" - cur="${COMP_WORDS[COMP_CWORD]}" - - fullcmd="$(which "$cmd" 2> /dev/null)" - if test -z "$fullcmd" || \ - ! test -x "$fullcmd" || \ - (! test -f "$fullcmd" && ! test -h "$fullcmd" ) || \ - ! test -r "$fullcmd" || \ - ! grep -q "Ewoms[a-zA-Z0-9]*Simulator[a-zA-Z0-0]" "$fullcmd" - then - if test -n "$DEFAULT_COMPLETION_LOADER"; then - "$DEFAULT_COMPLETION_LOADER" $@ - elif type -t _completion_loader 2>&1 > /dev/null; then - # the default DEFAULT_COMPLETION_LOADER variable has not - # been set and the _completion_loader function exists, so - # we use _completion_loader as the default completer. - _completion_loader $@ - else - return 1 - fi - - return $? - fi - - _ewoms_parameter_completor $@ - return 0 -} - -complete -o nospace -F _ewoms_parameter_completor @PRODUCT@ diff --git a/ThirdParty/custom-opm-common/opm-common/examples/msim.cpp b/ThirdParty/custom-opm-common/opm-common/examples/msim.cpp deleted file mode 100644 index 3feff966bb..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/examples/msim.cpp +++ /dev/null @@ -1,55 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include - -#include -#include -#include - -#include -#include -#include -#include - -#include - - -int main(int /* argc */, char** argv) { - std::string deck_file = argv[1]; - Opm::Parser parser; - Opm::ParseContext parse_context; - Opm::ErrorGuard error_guard; - auto python = std::make_shared(); - - Opm::Deck deck = parser.parseFile(deck_file, parse_context, error_guard); - Opm::EclipseState state(deck); - Opm::Schedule schedule(deck, state, parse_context, error_guard, python); - Opm::SummaryConfig summary_config(deck, schedule, state.getTableManager(), parse_context, error_guard); - - if (error_guard) { - error_guard.dump(); - error_guard.terminate(); - } - - Opm::msim msim(state); - Opm::EclipseIO io(state, state.getInputGrid(), schedule, summary_config); - msim.run(schedule, io, false); -} - diff --git a/ThirdParty/custom-opm-common/opm-common/examples/opmhash.cpp b/ThirdParty/custom-opm-common/opm-common/examples/opmhash.cpp deleted file mode 100644 index 39e44c9113..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/examples/opmhash.cpp +++ /dev/null @@ -1,159 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ -#include - -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include - - -struct keyword { - keyword(const std::string& name_arg, const std::string& filename_arg, - std::size_t line_number_arg, std::size_t content_hash_arg) : - name(name_arg), - filename(filename_arg), - line_number(line_number_arg), - content_hash(content_hash_arg) - {} - - - std::string name; - std::string filename; - std::size_t line_number; - std::size_t content_hash; -}; - - -std::vector load_deck(const char * deck_file) { - Opm::ParseContext parseContext; - Opm::ErrorGuard errors; - Opm::Parser parser; - std::vector keywords; - - /* Use the same default ParseContext as flow. */ - parseContext.update(Opm::ParseContext::PARSE_RANDOM_SLASH, Opm::InputError::IGNORE); - parseContext.update(Opm::ParseContext::PARSE_MISSING_DIMS_KEYWORD, Opm::InputError::WARN); - parseContext.update(Opm::ParseContext::SUMMARY_UNKNOWN_WELL, Opm::InputError::WARN); - parseContext.update(Opm::ParseContext::SUMMARY_UNKNOWN_GROUP, Opm::InputError::WARN); - - auto deck = parser.parseFile(deck_file, parseContext, errors); - for (const auto& kw : deck) { - std::stringstream ss; - const auto& location = kw.location(); - ss << kw; - - keywords.emplace_back(kw.name(), location.filename, location.lineno, std::hash{}(ss.str())); - } - return keywords; -} - - -std::size_t deck_hash(const std::vector& keywords) { - std::stringstream ss; - for (const auto& kw : keywords) - ss << kw.content_hash; - - return std::hash{}(ss.str()); -} - - -void print_keywords(const std::vector& keywords, bool location_info) { - for (const auto& kw : keywords) { - if (location_info) - std::cout << std::setw(8) << std::left << kw.name << " : " << kw.filename << ":" << kw.line_number << " " << kw.content_hash << std::endl; - else - std::cout << std::setw(8) << std::left << kw.name << " : " << kw.content_hash << std::endl; - } - std::cout << std::endl; - std::cout << std::setw(8) << std::left << "Total" << " : " << deck_hash(keywords) << std::endl; -} - - -void print_help_and_exit() { - const char * help_text = R"(The purpose of the opmhash program is to load a deck and create a summary, by -diffing two such summaries it is simple to determine if two decks are similar. -For each keyword a hash of the normalized content is calculated. The output of -the program will look like this: - - RUNSPEC : 13167205945009276792 - TITLE : 16047371705964514902 - DIMENS : 1264233216877515756 - NONNC : 10052807539267647959 - OIL : 6013609912232720008 - WATER : 14106203893673265964 - - Total : 7362809723723482303 - -Where the 'random' integer following each keyword is the hash of the content of -that keyword. The hashing is insensitive to changes in white-space and comments -and file location. At the bottom comes a total hash of the complete content. The -hash of each keyword is insensitive to shuffling of keywords, but the total hash -depends on the keyword order. - -Options: - - -l : Add filename and linenumber information to each keyword. - -s : Short form - only print the hash of the complete deck. - -)"; - std::cerr << help_text << std::endl; - exit(1); -} - - -int main(int argc, char** argv) { - int arg_offset = 1; - bool location_info = false; - bool short_form = false; - - while (true) { - int c; - c = getopt(argc, argv, "ls"); - if (c == -1) - break; - - switch(c) { - case 'l': - location_info = true; - break; - case 's': - short_form = true; - break; - } - } - arg_offset = optind; - if (arg_offset >= argc) - print_help_and_exit(); - - auto keywords = load_deck(argv[arg_offset]); - if (short_form) - std::cout << deck_hash(keywords) << std::endl; - else - print_keywords(keywords, location_info); -} - diff --git a/ThirdParty/custom-opm-common/opm-common/examples/opmi.cpp b/ThirdParty/custom-opm-common/opm-common/examples/opmi.cpp deleted file mode 100644 index 2ff185f5c5..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/examples/opmi.cpp +++ /dev/null @@ -1,90 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - - -void initLogging() { - std::shared_ptr cout_log = std::make_shared(std::cout, Opm::Log::DefaultMessageTypes); - Opm::OpmLog::addBackend( "COUT" , cout_log); -} - -inline void loadDeck( const char * deck_file) { - Opm::ParseContext parseContext; - Opm::ErrorGuard errors; - Opm::Parser parser; - auto python = std::make_shared(); - - std::cout << "Loading deck: " << deck_file << " ..... "; std::cout.flush(); - - std::chrono::system_clock::time_point start; - - start = std::chrono::system_clock::now(); - auto deck = parser.parseFile(deck_file, parseContext, errors); - auto deck_time = std::chrono::system_clock::now() - start; - - std::cout << "parse complete - creating EclipseState .... "; std::cout.flush(); - - start = std::chrono::system_clock::now(); - Opm::EclipseState state( deck ); - auto state_time = std::chrono::system_clock::now() - start; - - std::cout << "creating Schedule .... "; std::cout.flush(); - - start = std::chrono::system_clock::now(); - Opm::Schedule schedule( deck, state, python); - auto schedule_time = std::chrono::system_clock::now() - start; - - std::cout << "creating SummaryConfig .... "; std::cout.flush(); - - start = std::chrono::system_clock::now(); - Opm::SummaryConfig summary( deck, schedule, state.getTableManager( ), parseContext, errors ); - auto summary_time = std::chrono::system_clock::now() - start; - - std::cout << "complete." << std::endl << std::endl; - std::cout << "Time: " << std::endl; - std::cout << " deck.....: " << std::chrono::duration(deck_time).count() << " seconds" << std::endl; - std::cout << " state....: " << std::chrono::duration(state_time).count() << " seconds" << std::endl; - std::cout << " schedule.: " << std::chrono::duration(schedule_time).count() << " seconds" << std::endl; - std::cout << " summary..: " << std::chrono::duration(summary_time).count() << " seconds" << std::endl; -} - - -int main(int argc, char** argv) { - initLogging(); - for (int iarg = 1; iarg < argc; iarg++) - loadDeck( argv[iarg] ); -} - diff --git a/ThirdParty/custom-opm-common/opm-common/examples/opmpack.cpp b/ThirdParty/custom-opm-common/opm-common/examples/opmpack.cpp deleted file mode 100644 index 11e165bc32..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/examples/opmpack.cpp +++ /dev/null @@ -1,181 +0,0 @@ -/* - Copyright 2018 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -namespace fs = Opm::filesystem; - -Opm::Deck pack_deck( const char * deck_file, std::ostream& os) { - Opm::ParseContext parseContext(Opm::InputError::WARN); - Opm::ErrorGuard errors; - Opm::Parser parser; - - auto deck = parser.parseFile(deck_file, parseContext, errors); - os << deck; - - return deck; -} - - -void print_help_and_exit() { - const char * help_text = R"( -The opmpack program will load a deck, resolve all include -files and then print it out again on stdout. All comments -will be stripped and the value types will be validated. - -By passing the option -o you can redirect the output to a file -or a directory. - -Print on stdout: - - opmpack /path/to/case/CASE.DATA - - -Print MY_CASE.DATA in /tmp: - - opmpack -o /tmp /path/to/MY_CASE.DATA - - -Print NEW_CASE in cwd: - - opmpack -o NEW_CASE.DATA path/to/MY_CASE.DATA - -As an alternative to the -o option you can use -c; that is equivalent to -o - -but restart and import files referred to in the deck are also copied. The -o and --c options are mutually exclusive. )"; - std::cerr << help_text << std::endl; - exit(1); -} - - -void copy_file(const fs::path& source_dir, fs::path fname, const fs::path& target_dir) { - if (fname.is_absolute()) { - // change when moving to gcc8+ - // fname = fs::relative(fname, source_dir); - auto prefix_len = fs::canonical(source_dir).string().size(); - fname = fs::canonical(fname); - fname = fs::path( fname.string().substr(prefix_len + 1) ); - } - - auto source_file = source_dir / fname; - auto target_file = target_dir / fname; - { - const auto& parent_path = target_file.parent_path(); - if (!parent_path.empty() && !fs::is_directory(parent_path)) - fs::create_directories(parent_path); - } - - fs::copy_file(source_file, target_file, fs::copy_options::overwrite_existing); - std::cerr << "Copying file " << source_file.string() << " -> " << target_file.string() << std::endl; -} - - - -int main(int argc, char** argv) { - int arg_offset = 1; - bool stdout_output = true; - bool copy_binary = false; - const char * coutput_arg; - - while (true) { - int c; - c = getopt(argc, argv, "c:o:"); - if (c == -1) - break; - - switch(c) { - case 'o': - stdout_output = false; - coutput_arg = optarg; - break; - case 'c': - stdout_output = false; - copy_binary = true; - coutput_arg = optarg; - break; - } - } - arg_offset = optind; - if (arg_offset >= argc) - print_help_and_exit(); - - if (stdout_output) - pack_deck(argv[arg_offset], std::cout); - else { - std::ofstream os; - fs::path input_arg(argv[arg_offset]); - fs::path output_arg(coutput_arg); - fs::path output_dir(coutput_arg); - - if (fs::is_directory(output_arg)) { - fs::path output_path = output_arg / input_arg.filename(); - os.open(output_path.string()); - } else { - os.open(output_arg.string()); - output_dir = output_arg.parent_path(); - } - - - const auto& deck = pack_deck(argv[arg_offset], os); - if (copy_binary) { - Opm::InitConfig init_config(deck); - if (init_config.restartRequested()) { - Opm::IOConfig io_config(deck); - fs::path restart_file(io_config.getRestartFileName( init_config.getRestartRootName(), init_config.getRestartStep(), false )); - copy_file(input_arg.parent_path(), restart_file, output_dir); - } - - using IMPORT = Opm::ParserKeywords::IMPORT; - for (std::size_t import_index = 0; import_index < deck.count(); import_index++) { - const auto& import_keyword = deck.getKeyword(import_index); - const auto& fname = import_keyword.getRecord(0).getItem().get(0); - copy_file(input_arg.parent_path(), fname, output_dir); - } - - - using PYACTION = Opm::ParserKeywords::PYACTION; - for (std::size_t pyaction_index = 0; pyaction_index < deck.count(); pyaction_index++) { - const auto& pyaction_keyword = deck.getKeyword(pyaction_index); - const auto& fname = pyaction_keyword.getRecord(1).getItem().get(0); - copy_file(input_arg.parent_path(), fname, output_dir); - } - - - using GDFILE = Opm::ParserKeywords::GDFILE; - if (deck.hasKeyword()) { - const auto& gdfile_keyword = deck.getKeyword(); - const auto& fname = gdfile_keyword.getRecord(0).getItem().get(0); - copy_file(input_arg.parent_path(), fname, output_dir); - } - } - } -} - diff --git a/ThirdParty/custom-opm-common/opm-common/external/cjson/README b/ThirdParty/custom-opm-common/opm-common/external/cjson/README deleted file mode 100644 index 59a8ac88cd..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/external/cjson/README +++ /dev/null @@ -1,247 +0,0 @@ -/* - Copyright (c) 2009 Dave Gamble - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - THE SOFTWARE. -*/ - -Welcome to cJSON. - -cJSON aims to be the dumbest possible parser that you can get your job done with. -It's a single file of C, and a single header file. - -JSON is described best here: http://www.json.org/ -It's like XML, but fat-free. You use it to move data around, store things, or just -generally represent your program's state. - - -First up, how do I build? -Add cJSON.c to your project, and put cJSON.h somewhere in the header search path. -For example, to build the test app: - -gcc cJSON.c test.c -o test -lm -./test - - -As a library, cJSON exists to take away as much legwork as it can, but not get in your way. -As a point of pragmatism (i.e. ignoring the truth), I'm going to say that you can use it -in one of two modes: Auto and Manual. Let's have a quick run-through. - - -I lifted some JSON from this page: http://www.json.org/fatfree.html -That page inspired me to write cJSON, which is a parser that tries to share the same -philosophy as JSON itself. Simple, dumb, out of the way. - -Some JSON: -{ - "name": "Jack (\"Bee\") Nimble", - "format": { - "type": "rect", - "width": 1920, - "height": 1080, - "interlace": false, - "frame rate": 24 - } -} - -Assume that you got this from a file, a webserver, or magic JSON elves, whatever, -you have a char * to it. Everything is a cJSON struct. -Get it parsed: - cJSON *root = cJSON_Parse(my_json_string); - -This is an object. We're in C. We don't have objects. But we do have structs. -What's the framerate? - - cJSON *format = cJSON_GetObjectItem(root,"format"); - int framerate = cJSON_GetObjectItem(format,"frame rate")->valueint; - - -Want to change the framerate? - cJSON_GetObjectItem(format,"frame rate")->valueint=25; - -Back to disk? - char *rendered=cJSON_Print(root); - -Finished? Delete the root (this takes care of everything else). - cJSON_Delete(root); - -That's AUTO mode. If you're going to use Auto mode, you really ought to check pointers -before you dereference them. If you want to see how you'd build this struct in code? - cJSON *root,*fmt; - root=cJSON_CreateObject(); - cJSON_AddItemToObject(root, "name", cJSON_CreateString("Jack (\"Bee\") Nimble")); - cJSON_AddItemToObject(root, "format", fmt=cJSON_CreateObject()); - cJSON_AddStringToObject(fmt,"type", "rect"); - cJSON_AddNumberToObject(fmt,"width", 1920); - cJSON_AddNumberToObject(fmt,"height", 1080); - cJSON_AddFalseToObject (fmt,"interlace"); - cJSON_AddNumberToObject(fmt,"frame rate", 24); - -Hopefully we can agree that's not a lot of code? There's no overhead, no unnecessary setup. -Look at test.c for a bunch of nice examples, mostly all ripped off the json.org site, and -a few from elsewhere. - -What about manual mode? First up you need some detail. -Let's cover how the cJSON objects represent the JSON data. -cJSON doesn't distinguish arrays from objects in handling; just type. -Each cJSON has, potentially, a child, siblings, value, a name. - -The root object has: Object Type and a Child -The Child has name "name", with value "Jack ("Bee") Nimble", and a sibling: -Sibling has type Object, name "format", and a child. -That child has type String, name "type", value "rect", and a sibling: -Sibling has type Number, name "width", value 1920, and a sibling: -Sibling has type Number, name "height", value 1080, and a sibling: -Sibling hs type False, name "interlace", and a sibling: -Sibling has type Number, name "frame rate", value 24 - -Here's the structure: -typedef struct cJSON { - struct cJSON *next,*prev; - struct cJSON *child; - - int type; - - char *valuestring; - int valueint; - double valuedouble; - - char *string; -} cJSON; - -By default all values are 0 unless set by virtue of being meaningful. - -next/prev is a doubly linked list of siblings. next takes you to your sibling, -prev takes you back from your sibling to you. -Only objects and arrays have a "child", and it's the head of the doubly linked list. -A "child" entry will have prev==0, but next potentially points on. The last sibling has next=0. -The type expresses Null/True/False/Number/String/Array/Object, all of which are #defined in -cJSON.h - -A Number has valueint and valuedouble. If you're expecting an int, read valueint, if not read -valuedouble. - -Any entry which is in the linked list which is the child of an object will have a "string" -which is the "name" of the entry. When I said "name" in the above example, that's "string". -"string" is the JSON name for the 'variable name' if you will. - -Now you can trivially walk the lists, recursively, and parse as you please. -You can invoke cJSON_Parse to get cJSON to parse for you, and then you can take -the root object, and traverse the structure (which is, formally, an N-tree), -and tokenise as you please. If you wanted to build a callback style parser, this is how -you'd do it (just an example, since these things are very specific): - -void parse_and_callback(cJSON *item,const char *prefix) -{ - while (item) - { - char *newprefix=malloc(strlen(prefix)+strlen(item->name)+2); - sprintf(newprefix,"%s/%s",prefix,item->name); - int dorecurse=callback(newprefix, item->type, item); - if (item->child && dorecurse) parse_and_callback(item->child,newprefix); - item=item->next; - free(newprefix); - } -} - -The prefix process will build you a separated list, to simplify your callback handling. -The 'dorecurse' flag would let the callback decide to handle sub-arrays on it's own, or -let you invoke it per-item. For the item above, your callback might look like this: - -int callback(const char *name,int type,cJSON *item) -{ - if (!strcmp(name,"name")) { /* populate name */ } - else if (!strcmp(name,"format/type") { /* handle "rect" */ } - else if (!strcmp(name,"format/width") { /* 800 */ } - else if (!strcmp(name,"format/height") { /* 600 */ } - else if (!strcmp(name,"format/interlace") { /* false */ } - else if (!strcmp(name,"format/frame rate") { /* 24 */ } - return 1; -} - -Alternatively, you might like to parse iteratively. -You'd use: - -void parse_object(cJSON *item) -{ - int i; for (i=0;ichild; - while (subitem) - { - // handle subitem - if (subitem->child) parse_object(subitem->child); - - subitem=subitem->next; - } -} - -Of course, this should look familiar, since this is just a stripped-down version -of the callback-parser. - -This should cover most uses you'll find for parsing. The rest should be possible -to infer.. and if in doubt, read the source! There's not a lot of it! ;) - - -In terms of constructing JSON data, the example code above is the right way to do it. -You can, of course, hand your sub-objects to other functions to populate. -Also, if you find a use for it, you can manually build the objects. -For instance, suppose you wanted to build an array of objects? - -cJSON *objects[24]; - -cJSON *Create_array_of_anything(cJSON **items,int num) -{ - int i;cJSON *prev, *root=cJSON_CreateArray(); - for (i=0;i<24;i++) - { - if (!i) root->child=objects[i]; - else prev->next=objects[i], objects[i]->prev=prev; - prev=objects[i]; - } - return root; -} - -and simply: Create_array_of_anything(objects,24); - -cJSON doesn't make any assumptions about what order you create things in. -You can attach the objects, as above, and later add children to each -of those objects. - -As soon as you call cJSON_Print, it renders the structure to text. - - - -The test.c code shows how to handle a bunch of typical cases. If you uncomment -the code, it'll load, parse and print a bunch of test files, also from json.org, -which are more complex than I'd care to try and stash into a const char array[]. - - -Enjoy cJSON! - - -- Dave Gamble, Aug 2009 diff --git a/ThirdParty/custom-opm-common/opm-common/external/cjson/README.opm b/ThirdParty/custom-opm-common/opm-common/external/cjson/README.opm deleted file mode 100644 index 57b50f5480..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/external/cjson/README.opm +++ /dev/null @@ -1,2 +0,0 @@ -This directory contains the the 1.7.10 version of the cJSON package from https://github.com/DaveGamble/cJSON - diff --git a/ThirdParty/custom-opm-common/opm-common/external/cjson/cJSON.c b/ThirdParty/custom-opm-common/opm-common/external/cjson/cJSON.c deleted file mode 100644 index 74df6ec7a1..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/external/cjson/cJSON.c +++ /dev/null @@ -1,2936 +0,0 @@ -/* - Copyright (c) 2009-2017 Dave Gamble and cJSON contributors - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - THE SOFTWARE. -*/ - -/* cJSON */ -/* JSON parser in C. */ - -/* disable warnings about old C89 functions in MSVC */ -#if !defined(_CRT_SECURE_NO_DEPRECATE) && defined(_MSC_VER) -#define _CRT_SECURE_NO_DEPRECATE -#endif - -#ifdef __GNUC__ -#pragma GCC visibility push(default) -#endif -#if defined(_MSC_VER) -#pragma warning (push) -/* disable warning about single line comments in system headers */ -#pragma warning (disable : 4001) -#endif - -#include -#include -#include -#include -#include -#include - -#ifdef ENABLE_LOCALES -#include -#endif - -#if defined(_MSC_VER) -#pragma warning (pop) -#endif -#ifdef __GNUC__ -#pragma GCC visibility pop -#endif - -#include "cJSON.h" - -/* define our own boolean type */ -#define true ((cJSON_bool)1) -#define false ((cJSON_bool)0) - -typedef struct { - const unsigned char *json; - size_t position; -} error; -static error global_error = { NULL, 0 }; - -CJSON_PUBLIC(const char *) cJSON_GetErrorPtr(void) -{ - return (const char*) (global_error.json + global_error.position); -} - -CJSON_PUBLIC(char *) cJSON_GetStringValue(cJSON *item) { - if (!cJSON_IsString(item)) { - return NULL; - } - - return item->valuestring; -} - -/* This is a safeguard to prevent copy-pasters from using incompatible C and header files */ -#if (CJSON_VERSION_MAJOR != 1) || (CJSON_VERSION_MINOR != 7) || (CJSON_VERSION_PATCH != 10) - #error cJSON.h and cJSON.c have different versions. Make sure that both have the same. -#endif - -CJSON_PUBLIC(const char*) cJSON_Version(void) -{ - static char version[15]; - sprintf(version, "%i.%i.%i", CJSON_VERSION_MAJOR, CJSON_VERSION_MINOR, CJSON_VERSION_PATCH); - - return version; -} - -/* Case insensitive string comparison, doesn't consider two NULL pointers equal though */ -static int case_insensitive_strcmp(const unsigned char *string1, const unsigned char *string2) -{ - if ((string1 == NULL) || (string2 == NULL)) - { - return 1; - } - - if (string1 == string2) - { - return 0; - } - - for(; tolower(*string1) == tolower(*string2); (void)string1++, string2++) - { - if (*string1 == '\0') - { - return 0; - } - } - - return tolower(*string1) - tolower(*string2); -} - -typedef struct internal_hooks -{ - void *(CJSON_CDECL *allocate)(size_t size); - void (CJSON_CDECL *deallocate)(void *pointer); - void *(CJSON_CDECL *reallocate)(void *pointer, size_t size); -} internal_hooks; - -#if defined(_MSC_VER) -/* work around MSVC error C2322: '...' address of dillimport '...' is not static */ -static void * CJSON_CDECL internal_malloc(size_t size) -{ - return malloc(size); -} -static void CJSON_CDECL internal_free(void *pointer) -{ - free(pointer); -} -static void * CJSON_CDECL internal_realloc(void *pointer, size_t size) -{ - return realloc(pointer, size); -} -#else -#define internal_malloc malloc -#define internal_free free -#define internal_realloc realloc -#endif - -static internal_hooks global_hooks = { internal_malloc, internal_free, internal_realloc }; - -static unsigned char* cJSON_strdup(const unsigned char* string, const internal_hooks * const hooks) -{ - size_t length = 0; - unsigned char *copy = NULL; - - if (string == NULL) - { - return NULL; - } - - length = strlen((const char*)string) + sizeof(""); - copy = (unsigned char*)hooks->allocate(length); - if (copy == NULL) - { - return NULL; - } - memcpy(copy, string, length); - - return copy; -} - -CJSON_PUBLIC(void) cJSON_InitHooks(cJSON_Hooks* hooks) -{ - if (hooks == NULL) - { - /* Reset hooks */ - global_hooks.allocate = malloc; - global_hooks.deallocate = free; - global_hooks.reallocate = realloc; - return; - } - - global_hooks.allocate = malloc; - if (hooks->malloc_fn != NULL) - { - global_hooks.allocate = hooks->malloc_fn; - } - - global_hooks.deallocate = free; - if (hooks->free_fn != NULL) - { - global_hooks.deallocate = hooks->free_fn; - } - - /* use realloc only if both free and malloc are used */ - global_hooks.reallocate = NULL; - if ((global_hooks.allocate == malloc) && (global_hooks.deallocate == free)) - { - global_hooks.reallocate = realloc; - } -} - -/* Internal constructor. */ -static cJSON *cJSON_New_Item(const internal_hooks * const hooks) -{ - cJSON* node = (cJSON*)hooks->allocate(sizeof(cJSON)); - if (node) - { - memset(node, '\0', sizeof(cJSON)); - } - - return node; -} - -/* Delete a cJSON structure. */ -CJSON_PUBLIC(void) cJSON_Delete(cJSON *item) -{ - cJSON *next = NULL; - while (item != NULL) - { - next = item->next; - if (!(item->type & cJSON_IsReference) && (item->child != NULL)) - { - cJSON_Delete(item->child); - } - if (!(item->type & cJSON_IsReference) && (item->valuestring != NULL)) - { - global_hooks.deallocate(item->valuestring); - } - if (!(item->type & cJSON_StringIsConst) && (item->string != NULL)) - { - global_hooks.deallocate(item->string); - } - global_hooks.deallocate(item); - item = next; - } -} - -/* get the decimal point character of the current locale */ -static unsigned char get_decimal_point(void) -{ -#ifdef ENABLE_LOCALES - struct lconv *lconv = localeconv(); - return (unsigned char) lconv->decimal_point[0]; -#else - return '.'; -#endif -} - -typedef struct -{ - const unsigned char *content; - size_t length; - size_t offset; - size_t depth; /* How deeply nested (in arrays/objects) is the input at the current offset. */ - internal_hooks hooks; -} parse_buffer; - -/* check if the given size is left to read in a given parse buffer (starting with 1) */ -#define can_read(buffer, size) ((buffer != NULL) && (((buffer)->offset + size) <= (buffer)->length)) -/* check if the buffer can be accessed at the given index (starting with 0) */ -#define can_access_at_index(buffer, index) ((buffer != NULL) && (((buffer)->offset + index) < (buffer)->length)) -#define cannot_access_at_index(buffer, index) (!can_access_at_index(buffer, index)) -/* get a pointer to the buffer at the position */ -#define buffer_at_offset(buffer) ((buffer)->content + (buffer)->offset) - -/* Parse the input text to generate a number, and populate the result into item. */ -static cJSON_bool parse_number(cJSON * const item, parse_buffer * const input_buffer) -{ - double number = 0; - unsigned char *after_end = NULL; - unsigned char number_c_string[64]; - unsigned char decimal_point = get_decimal_point(); - size_t i = 0; - - if ((input_buffer == NULL) || (input_buffer->content == NULL)) - { - return false; - } - - /* copy the number into a temporary buffer and replace '.' with the decimal point - * of the current locale (for strtod) - * This also takes care of '\0' not necessarily being available for marking the end of the input */ - for (i = 0; (i < (sizeof(number_c_string) - 1)) && can_access_at_index(input_buffer, i); i++) - { - switch (buffer_at_offset(input_buffer)[i]) - { - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - case '+': - case '-': - case 'e': - case 'E': - number_c_string[i] = buffer_at_offset(input_buffer)[i]; - break; - - case '.': - number_c_string[i] = decimal_point; - break; - - default: - goto loop_end; - } - } -loop_end: - number_c_string[i] = '\0'; - - number = strtod((const char*)number_c_string, (char**)&after_end); - if (number_c_string == after_end) - { - return false; /* parse_error */ - } - - item->valuedouble = number; - - /* use saturation in case of overflow */ - if (number >= INT_MAX) - { - item->valueint = INT_MAX; - } - else if (number <= (double)INT_MIN) - { - item->valueint = INT_MIN; - } - else - { - item->valueint = (int)number; - } - - item->type = cJSON_Number; - - input_buffer->offset += (size_t)(after_end - number_c_string); - return true; -} - -/* don't ask me, but the original cJSON_SetNumberValue returns an integer or double */ -CJSON_PUBLIC(double) cJSON_SetNumberHelper(cJSON *object, double number) -{ - if (number >= INT_MAX) - { - object->valueint = INT_MAX; - } - else if (number <= (double)INT_MIN) - { - object->valueint = INT_MIN; - } - else - { - object->valueint = (int)number; - } - - return object->valuedouble = number; -} - -typedef struct -{ - unsigned char *buffer; - size_t length; - size_t offset; - size_t depth; /* current nesting depth (for formatted printing) */ - cJSON_bool noalloc; - cJSON_bool format; /* is this print a formatted print */ - internal_hooks hooks; -} printbuffer; - -/* realloc printbuffer if necessary to have at least "needed" bytes more */ -static unsigned char* ensure(printbuffer * const p, size_t needed) -{ - unsigned char *newbuffer = NULL; - size_t newsize = 0; - - if ((p == NULL) || (p->buffer == NULL)) - { - return NULL; - } - - if ((p->length > 0) && (p->offset >= p->length)) - { - /* make sure that offset is valid */ - return NULL; - } - - if (needed > INT_MAX) - { - /* sizes bigger than INT_MAX are currently not supported */ - return NULL; - } - - needed += p->offset + 1; - if (needed <= p->length) - { - return p->buffer + p->offset; - } - - if (p->noalloc) { - return NULL; - } - - /* calculate new buffer size */ - if (needed > (INT_MAX / 2)) - { - /* overflow of int, use INT_MAX if possible */ - if (needed <= INT_MAX) - { - newsize = INT_MAX; - } - else - { - return NULL; - } - } - else - { - newsize = needed * 2; - } - - if (p->hooks.reallocate != NULL) - { - /* reallocate with realloc if available */ - newbuffer = (unsigned char*)p->hooks.reallocate(p->buffer, newsize); - if (newbuffer == NULL) - { - p->hooks.deallocate(p->buffer); - p->length = 0; - p->buffer = NULL; - - return NULL; - } - } - else - { - /* otherwise reallocate manually */ - newbuffer = (unsigned char*)p->hooks.allocate(newsize); - if (!newbuffer) - { - p->hooks.deallocate(p->buffer); - p->length = 0; - p->buffer = NULL; - - return NULL; - } - if (newbuffer) - { - memcpy(newbuffer, p->buffer, p->offset + 1); - } - p->hooks.deallocate(p->buffer); - } - p->length = newsize; - p->buffer = newbuffer; - - return newbuffer + p->offset; -} - -/* calculate the new length of the string in a printbuffer and update the offset */ -static void update_offset(printbuffer * const buffer) -{ - const unsigned char *buffer_pointer = NULL; - if ((buffer == NULL) || (buffer->buffer == NULL)) - { - return; - } - buffer_pointer = buffer->buffer + buffer->offset; - - buffer->offset += strlen((const char*)buffer_pointer); -} - -/* Render the number nicely from the given item into a string. */ -static cJSON_bool print_number(const cJSON * const item, printbuffer * const output_buffer) -{ - unsigned char *output_pointer = NULL; - double d = item->valuedouble; - int length = 0; - size_t i = 0; - unsigned char number_buffer[26]; /* temporary buffer to print the number into */ - unsigned char decimal_point = get_decimal_point(); - double test; - - if (output_buffer == NULL) - { - return false; - } - - /* This checks for NaN and Infinity */ - if ((d * 0) != 0) - { - length = sprintf((char*)number_buffer, "null"); - } - else - { - /* Try 15 decimal places of precision to avoid nonsignificant nonzero digits */ - length = sprintf((char*)number_buffer, "%1.15g", d); - - /* Check whether the original double can be recovered */ - if ((sscanf((char*)number_buffer, "%lg", &test) != 1) || ((double)test != d)) - { - /* If not, print with 17 decimal places of precision */ - length = sprintf((char*)number_buffer, "%1.17g", d); - } - } - - /* sprintf failed or buffer overrun occured */ - if ((length < 0) || (length > (int)(sizeof(number_buffer) - 1))) - { - return false; - } - - /* reserve appropriate space in the output */ - output_pointer = ensure(output_buffer, (size_t)length + sizeof("")); - if (output_pointer == NULL) - { - return false; - } - - /* copy the printed number to the output and replace locale - * dependent decimal point with '.' */ - for (i = 0; i < ((size_t)length); i++) - { - if (number_buffer[i] == decimal_point) - { - output_pointer[i] = '.'; - continue; - } - - output_pointer[i] = number_buffer[i]; - } - output_pointer[i] = '\0'; - - output_buffer->offset += (size_t)length; - - return true; -} - -/* parse 4 digit hexadecimal number */ -static unsigned parse_hex4(const unsigned char * const input) -{ - unsigned int h = 0; - size_t i = 0; - - for (i = 0; i < 4; i++) - { - /* parse digit */ - if ((input[i] >= '0') && (input[i] <= '9')) - { - h += (unsigned int) input[i] - '0'; - } - else if ((input[i] >= 'A') && (input[i] <= 'F')) - { - h += (unsigned int) 10 + input[i] - 'A'; - } - else if ((input[i] >= 'a') && (input[i] <= 'f')) - { - h += (unsigned int) 10 + input[i] - 'a'; - } - else /* invalid */ - { - return 0; - } - - if (i < 3) - { - /* shift left to make place for the next nibble */ - h = h << 4; - } - } - - return h; -} - -/* converts a UTF-16 literal to UTF-8 - * A literal can be one or two sequences of the form \uXXXX */ -static unsigned char utf16_literal_to_utf8(const unsigned char * const input_pointer, const unsigned char * const input_end, unsigned char **output_pointer) -{ - long unsigned int codepoint = 0; - unsigned int first_code = 0; - const unsigned char *first_sequence = input_pointer; - unsigned char utf8_length = 0; - unsigned char utf8_position = 0; - unsigned char sequence_length = 0; - unsigned char first_byte_mark = 0; - - if ((input_end - first_sequence) < 6) - { - /* input ends unexpectedly */ - goto fail; - } - - /* get the first utf16 sequence */ - first_code = parse_hex4(first_sequence + 2); - - /* check that the code is valid */ - if (((first_code >= 0xDC00) && (first_code <= 0xDFFF))) - { - goto fail; - } - - /* UTF16 surrogate pair */ - if ((first_code >= 0xD800) && (first_code <= 0xDBFF)) - { - const unsigned char *second_sequence = first_sequence + 6; - unsigned int second_code = 0; - sequence_length = 12; /* \uXXXX\uXXXX */ - - if ((input_end - second_sequence) < 6) - { - /* input ends unexpectedly */ - goto fail; - } - - if ((second_sequence[0] != '\\') || (second_sequence[1] != 'u')) - { - /* missing second half of the surrogate pair */ - goto fail; - } - - /* get the second utf16 sequence */ - second_code = parse_hex4(second_sequence + 2); - /* check that the code is valid */ - if ((second_code < 0xDC00) || (second_code > 0xDFFF)) - { - /* invalid second half of the surrogate pair */ - goto fail; - } - - - /* calculate the unicode codepoint from the surrogate pair */ - codepoint = 0x10000 + (((first_code & 0x3FF) << 10) | (second_code & 0x3FF)); - } - else - { - sequence_length = 6; /* \uXXXX */ - codepoint = first_code; - } - - /* encode as UTF-8 - * takes at maximum 4 bytes to encode: - * 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx */ - if (codepoint < 0x80) - { - /* normal ascii, encoding 0xxxxxxx */ - utf8_length = 1; - } - else if (codepoint < 0x800) - { - /* two bytes, encoding 110xxxxx 10xxxxxx */ - utf8_length = 2; - first_byte_mark = 0xC0; /* 11000000 */ - } - else if (codepoint < 0x10000) - { - /* three bytes, encoding 1110xxxx 10xxxxxx 10xxxxxx */ - utf8_length = 3; - first_byte_mark = 0xE0; /* 11100000 */ - } - else if (codepoint <= 0x10FFFF) - { - /* four bytes, encoding 1110xxxx 10xxxxxx 10xxxxxx 10xxxxxx */ - utf8_length = 4; - first_byte_mark = 0xF0; /* 11110000 */ - } - else - { - /* invalid unicode codepoint */ - goto fail; - } - - /* encode as utf8 */ - for (utf8_position = (unsigned char)(utf8_length - 1); utf8_position > 0; utf8_position--) - { - /* 10xxxxxx */ - (*output_pointer)[utf8_position] = (unsigned char)((codepoint | 0x80) & 0xBF); - codepoint >>= 6; - } - /* encode first byte */ - if (utf8_length > 1) - { - (*output_pointer)[0] = (unsigned char)((codepoint | first_byte_mark) & 0xFF); - } - else - { - (*output_pointer)[0] = (unsigned char)(codepoint & 0x7F); - } - - *output_pointer += utf8_length; - - return sequence_length; - -fail: - return 0; -} - -/* Parse the input text into an unescaped cinput, and populate item. */ -static cJSON_bool parse_string(cJSON * const item, parse_buffer * const input_buffer) -{ - const unsigned char *input_pointer = buffer_at_offset(input_buffer) + 1; - const unsigned char *input_end = buffer_at_offset(input_buffer) + 1; - unsigned char *output_pointer = NULL; - unsigned char *output = NULL; - - /* not a string */ - if (buffer_at_offset(input_buffer)[0] != '\"') - { - goto fail; - } - - { - /* calculate approximate size of the output (overestimate) */ - size_t allocation_length = 0; - size_t skipped_bytes = 0; - while (((size_t)(input_end - input_buffer->content) < input_buffer->length) && (*input_end != '\"')) - { - /* is escape sequence */ - if (input_end[0] == '\\') - { - if ((size_t)(input_end + 1 - input_buffer->content) >= input_buffer->length) - { - /* prevent buffer overflow when last input character is a backslash */ - goto fail; - } - skipped_bytes++; - input_end++; - } - input_end++; - } - if (((size_t)(input_end - input_buffer->content) >= input_buffer->length) || (*input_end != '\"')) - { - goto fail; /* string ended unexpectedly */ - } - - /* This is at most how much we need for the output */ - allocation_length = (size_t) (input_end - buffer_at_offset(input_buffer)) - skipped_bytes; - output = (unsigned char*)input_buffer->hooks.allocate(allocation_length + sizeof("")); - if (output == NULL) - { - goto fail; /* allocation failure */ - } - } - - output_pointer = output; - /* loop through the string literal */ - while (input_pointer < input_end) - { - if (*input_pointer != '\\') - { - *output_pointer++ = *input_pointer++; - } - /* escape sequence */ - else - { - unsigned char sequence_length = 2; - if ((input_end - input_pointer) < 1) - { - goto fail; - } - - switch (input_pointer[1]) - { - case 'b': - *output_pointer++ = '\b'; - break; - case 'f': - *output_pointer++ = '\f'; - break; - case 'n': - *output_pointer++ = '\n'; - break; - case 'r': - *output_pointer++ = '\r'; - break; - case 't': - *output_pointer++ = '\t'; - break; - case '\"': - case '\\': - case '/': - *output_pointer++ = input_pointer[1]; - break; - - /* UTF-16 literal */ - case 'u': - sequence_length = utf16_literal_to_utf8(input_pointer, input_end, &output_pointer); - if (sequence_length == 0) - { - /* failed to convert UTF16-literal to UTF-8 */ - goto fail; - } - break; - - default: - goto fail; - } - input_pointer += sequence_length; - } - } - - /* zero terminate the output */ - *output_pointer = '\0'; - - item->type = cJSON_String; - item->valuestring = (char*)output; - - input_buffer->offset = (size_t) (input_end - input_buffer->content); - input_buffer->offset++; - - return true; - -fail: - if (output != NULL) - { - input_buffer->hooks.deallocate(output); - } - - if (input_pointer != NULL) - { - input_buffer->offset = (size_t)(input_pointer - input_buffer->content); - } - - return false; -} - -/* Render the cstring provided to an escaped version that can be printed. */ -static cJSON_bool print_string_ptr(const unsigned char * const input, printbuffer * const output_buffer) -{ - const unsigned char *input_pointer = NULL; - unsigned char *output = NULL; - unsigned char *output_pointer = NULL; - size_t output_length = 0; - /* numbers of additional characters needed for escaping */ - size_t escape_characters = 0; - - if (output_buffer == NULL) - { - return false; - } - - /* empty string */ - if (input == NULL) - { - output = ensure(output_buffer, sizeof("\"\"")); - if (output == NULL) - { - return false; - } - strcpy((char*)output, "\"\""); - - return true; - } - - /* set "flag" to 1 if something needs to be escaped */ - for (input_pointer = input; *input_pointer; input_pointer++) - { - switch (*input_pointer) - { - case '\"': - case '\\': - case '\b': - case '\f': - case '\n': - case '\r': - case '\t': - /* one character escape sequence */ - escape_characters++; - break; - default: - if (*input_pointer < 32) - { - /* UTF-16 escape sequence uXXXX */ - escape_characters += 5; - } - break; - } - } - output_length = (size_t)(input_pointer - input) + escape_characters; - - output = ensure(output_buffer, output_length + sizeof("\"\"")); - if (output == NULL) - { - return false; - } - - /* no characters have to be escaped */ - if (escape_characters == 0) - { - output[0] = '\"'; - memcpy(output + 1, input, output_length); - output[output_length + 1] = '\"'; - output[output_length + 2] = '\0'; - - return true; - } - - output[0] = '\"'; - output_pointer = output + 1; - /* copy the string */ - for (input_pointer = input; *input_pointer != '\0'; (void)input_pointer++, output_pointer++) - { - if ((*input_pointer > 31) && (*input_pointer != '\"') && (*input_pointer != '\\')) - { - /* normal character, copy */ - *output_pointer = *input_pointer; - } - else - { - /* character needs to be escaped */ - *output_pointer++ = '\\'; - switch (*input_pointer) - { - case '\\': - *output_pointer = '\\'; - break; - case '\"': - *output_pointer = '\"'; - break; - case '\b': - *output_pointer = 'b'; - break; - case '\f': - *output_pointer = 'f'; - break; - case '\n': - *output_pointer = 'n'; - break; - case '\r': - *output_pointer = 'r'; - break; - case '\t': - *output_pointer = 't'; - break; - default: - /* escape and print as unicode codepoint */ - sprintf((char*)output_pointer, "u%04x", *input_pointer); - output_pointer += 4; - break; - } - } - } - output[output_length + 1] = '\"'; - output[output_length + 2] = '\0'; - - return true; -} - -/* Invoke print_string_ptr (which is useful) on an item. */ -static cJSON_bool print_string(const cJSON * const item, printbuffer * const p) -{ - return print_string_ptr((unsigned char*)item->valuestring, p); -} - -/* Predeclare these prototypes. */ -static cJSON_bool parse_value(cJSON * const item, parse_buffer * const input_buffer); -static cJSON_bool print_value(const cJSON * const item, printbuffer * const output_buffer); -static cJSON_bool parse_array(cJSON * const item, parse_buffer * const input_buffer); -static cJSON_bool print_array(const cJSON * const item, printbuffer * const output_buffer); -static cJSON_bool parse_object(cJSON * const item, parse_buffer * const input_buffer); -static cJSON_bool print_object(const cJSON * const item, printbuffer * const output_buffer); - -/* Utility to jump whitespace and cr/lf */ -static parse_buffer *buffer_skip_whitespace(parse_buffer * const buffer) -{ - if ((buffer == NULL) || (buffer->content == NULL)) - { - return NULL; - } - - while (can_access_at_index(buffer, 0) && (buffer_at_offset(buffer)[0] <= 32)) - { - buffer->offset++; - } - - if (buffer->offset == buffer->length) - { - buffer->offset--; - } - - return buffer; -} - -/* skip the UTF-8 BOM (byte order mark) if it is at the beginning of a buffer */ -static parse_buffer *skip_utf8_bom(parse_buffer * const buffer) -{ - if ((buffer == NULL) || (buffer->content == NULL) || (buffer->offset != 0)) - { - return NULL; - } - - if (can_access_at_index(buffer, 4) && (strncmp((const char*)buffer_at_offset(buffer), "\xEF\xBB\xBF", 3) == 0)) - { - buffer->offset += 3; - } - - return buffer; -} - -/* Parse an object - create a new root, and populate. */ -CJSON_PUBLIC(cJSON *) cJSON_ParseWithOpts(const char *value, const char **return_parse_end, cJSON_bool require_null_terminated) -{ - parse_buffer buffer = { 0, 0, 0, 0, { 0, 0, 0 } }; - cJSON *item = NULL; - - /* reset error position */ - global_error.json = NULL; - global_error.position = 0; - - if (value == NULL) - { - goto fail; - } - - buffer.content = (const unsigned char*)value; - buffer.length = strlen((const char*)value) + sizeof(""); - buffer.offset = 0; - buffer.hooks = global_hooks; - - item = cJSON_New_Item(&global_hooks); - if (item == NULL) /* memory fail */ - { - goto fail; - } - - if (!parse_value(item, buffer_skip_whitespace(skip_utf8_bom(&buffer)))) - { - /* parse failure. ep is set. */ - goto fail; - } - - /* if we require null-terminated JSON without appended garbage, skip and then check for a null terminator */ - if (require_null_terminated) - { - buffer_skip_whitespace(&buffer); - if ((buffer.offset >= buffer.length) || buffer_at_offset(&buffer)[0] != '\0') - { - goto fail; - } - } - if (return_parse_end) - { - *return_parse_end = (const char*)buffer_at_offset(&buffer); - } - - return item; - -fail: - if (item != NULL) - { - cJSON_Delete(item); - } - - if (value != NULL) - { - error local_error; - local_error.json = (const unsigned char*)value; - local_error.position = 0; - - if (buffer.offset < buffer.length) - { - local_error.position = buffer.offset; - } - else if (buffer.length > 0) - { - local_error.position = buffer.length - 1; - } - - if (return_parse_end != NULL) - { - *return_parse_end = (const char*)local_error.json + local_error.position; - } - - global_error = local_error; - } - - return NULL; -} - -/* Default options for cJSON_Parse */ -CJSON_PUBLIC(cJSON *) cJSON_Parse(const char *value) -{ - return cJSON_ParseWithOpts(value, 0, 0); -} - -#define cjson_min(a, b) ((a < b) ? a : b) - -static unsigned char *print(const cJSON * const item, cJSON_bool format, const internal_hooks * const hooks) -{ - static const size_t default_buffer_size = 256; - printbuffer buffer[1]; - unsigned char *printed = NULL; - - memset(buffer, 0, sizeof(buffer)); - - /* create buffer */ - buffer->buffer = (unsigned char*) hooks->allocate(default_buffer_size); - buffer->length = default_buffer_size; - buffer->format = format; - buffer->hooks = *hooks; - if (buffer->buffer == NULL) - { - goto fail; - } - - /* print the value */ - if (!print_value(item, buffer)) - { - goto fail; - } - update_offset(buffer); - - /* check if reallocate is available */ - if (hooks->reallocate != NULL) - { - printed = (unsigned char*) hooks->reallocate(buffer->buffer, buffer->offset + 1); - if (printed == NULL) { - goto fail; - } - buffer->buffer = NULL; - } - else /* otherwise copy the JSON over to a new buffer */ - { - printed = (unsigned char*) hooks->allocate(buffer->offset + 1); - if (printed == NULL) - { - goto fail; - } - memcpy(printed, buffer->buffer, cjson_min(buffer->length, buffer->offset + 1)); - printed[buffer->offset] = '\0'; /* just to be sure */ - - /* free the buffer */ - hooks->deallocate(buffer->buffer); - } - - return printed; - -fail: - if (buffer->buffer != NULL) - { - hooks->deallocate(buffer->buffer); - } - - if (printed != NULL) - { - hooks->deallocate(printed); - } - - return NULL; -} - -/* Render a cJSON item/entity/structure to text. */ -CJSON_PUBLIC(char *) cJSON_Print(const cJSON *item) -{ - return (char*)print(item, true, &global_hooks); -} - -CJSON_PUBLIC(char *) cJSON_PrintUnformatted(const cJSON *item) -{ - return (char*)print(item, false, &global_hooks); -} - -CJSON_PUBLIC(char *) cJSON_PrintBuffered(const cJSON *item, int prebuffer, cJSON_bool fmt) -{ - printbuffer p = { 0, 0, 0, 0, 0, 0, { 0, 0, 0 } }; - - if (prebuffer < 0) - { - return NULL; - } - - p.buffer = (unsigned char*)global_hooks.allocate((size_t)prebuffer); - if (!p.buffer) - { - return NULL; - } - - p.length = (size_t)prebuffer; - p.offset = 0; - p.noalloc = false; - p.format = fmt; - p.hooks = global_hooks; - - if (!print_value(item, &p)) - { - global_hooks.deallocate(p.buffer); - return NULL; - } - - return (char*)p.buffer; -} - -CJSON_PUBLIC(cJSON_bool) cJSON_PrintPreallocated(cJSON *item, char *buf, const int len, const cJSON_bool fmt) -{ - printbuffer p = { 0, 0, 0, 0, 0, 0, { 0, 0, 0 } }; - - if ((len < 0) || (buf == NULL)) - { - return false; - } - - p.buffer = (unsigned char*)buf; - p.length = (size_t)len; - p.offset = 0; - p.noalloc = true; - p.format = fmt; - p.hooks = global_hooks; - - return print_value(item, &p); -} - -/* Parser core - when encountering text, process appropriately. */ -static cJSON_bool parse_value(cJSON * const item, parse_buffer * const input_buffer) -{ - if ((input_buffer == NULL) || (input_buffer->content == NULL)) - { - return false; /* no input */ - } - - /* parse the different types of values */ - /* null */ - if (can_read(input_buffer, 4) && (strncmp((const char*)buffer_at_offset(input_buffer), "null", 4) == 0)) - { - item->type = cJSON_NULL; - input_buffer->offset += 4; - return true; - } - /* false */ - if (can_read(input_buffer, 5) && (strncmp((const char*)buffer_at_offset(input_buffer), "false", 5) == 0)) - { - item->type = cJSON_False; - input_buffer->offset += 5; - return true; - } - /* true */ - if (can_read(input_buffer, 4) && (strncmp((const char*)buffer_at_offset(input_buffer), "true", 4) == 0)) - { - item->type = cJSON_True; - item->valueint = 1; - input_buffer->offset += 4; - return true; - } - /* string */ - if (can_access_at_index(input_buffer, 0) && (buffer_at_offset(input_buffer)[0] == '\"')) - { - return parse_string(item, input_buffer); - } - /* number */ - if (can_access_at_index(input_buffer, 0) && ((buffer_at_offset(input_buffer)[0] == '-') || ((buffer_at_offset(input_buffer)[0] >= '0') && (buffer_at_offset(input_buffer)[0] <= '9')))) - { - return parse_number(item, input_buffer); - } - /* array */ - if (can_access_at_index(input_buffer, 0) && (buffer_at_offset(input_buffer)[0] == '[')) - { - return parse_array(item, input_buffer); - } - /* object */ - if (can_access_at_index(input_buffer, 0) && (buffer_at_offset(input_buffer)[0] == '{')) - { - return parse_object(item, input_buffer); - } - - return false; -} - -/* Render a value to text. */ -static cJSON_bool print_value(const cJSON * const item, printbuffer * const output_buffer) -{ - unsigned char *output = NULL; - - if ((item == NULL) || (output_buffer == NULL)) - { - return false; - } - - switch ((item->type) & 0xFF) - { - case cJSON_NULL: - output = ensure(output_buffer, 5); - if (output == NULL) - { - return false; - } - strcpy((char*)output, "null"); - return true; - - case cJSON_False: - output = ensure(output_buffer, 6); - if (output == NULL) - { - return false; - } - strcpy((char*)output, "false"); - return true; - - case cJSON_True: - output = ensure(output_buffer, 5); - if (output == NULL) - { - return false; - } - strcpy((char*)output, "true"); - return true; - - case cJSON_Number: - return print_number(item, output_buffer); - - case cJSON_Raw: - { - size_t raw_length = 0; - if (item->valuestring == NULL) - { - return false; - } - - raw_length = strlen(item->valuestring) + sizeof(""); - output = ensure(output_buffer, raw_length); - if (output == NULL) - { - return false; - } - memcpy(output, item->valuestring, raw_length); - return true; - } - - case cJSON_String: - return print_string(item, output_buffer); - - case cJSON_Array: - return print_array(item, output_buffer); - - case cJSON_Object: - return print_object(item, output_buffer); - - default: - return false; - } -} - -/* Build an array from input text. */ -static cJSON_bool parse_array(cJSON * const item, parse_buffer * const input_buffer) -{ - cJSON *head = NULL; /* head of the linked list */ - cJSON *current_item = NULL; - - if (input_buffer->depth >= CJSON_NESTING_LIMIT) - { - return false; /* to deeply nested */ - } - input_buffer->depth++; - - if (buffer_at_offset(input_buffer)[0] != '[') - { - /* not an array */ - goto fail; - } - - input_buffer->offset++; - buffer_skip_whitespace(input_buffer); - if (can_access_at_index(input_buffer, 0) && (buffer_at_offset(input_buffer)[0] == ']')) - { - /* empty array */ - goto success; - } - - /* check if we skipped to the end of the buffer */ - if (cannot_access_at_index(input_buffer, 0)) - { - input_buffer->offset--; - goto fail; - } - - /* step back to character in front of the first element */ - input_buffer->offset--; - /* loop through the comma separated array elements */ - do - { - /* allocate next item */ - cJSON *new_item = cJSON_New_Item(&(input_buffer->hooks)); - if (new_item == NULL) - { - goto fail; /* allocation failure */ - } - - /* attach next item to list */ - if (head == NULL) - { - /* start the linked list */ - current_item = head = new_item; - } - else - { - /* add to the end and advance */ - current_item->next = new_item; - new_item->prev = current_item; - current_item = new_item; - } - - /* parse next value */ - input_buffer->offset++; - buffer_skip_whitespace(input_buffer); - if (!parse_value(current_item, input_buffer)) - { - goto fail; /* failed to parse value */ - } - buffer_skip_whitespace(input_buffer); - } - while (can_access_at_index(input_buffer, 0) && (buffer_at_offset(input_buffer)[0] == ',')); - - if (cannot_access_at_index(input_buffer, 0) || buffer_at_offset(input_buffer)[0] != ']') - { - goto fail; /* expected end of array */ - } - -success: - input_buffer->depth--; - - item->type = cJSON_Array; - item->child = head; - - input_buffer->offset++; - - return true; - -fail: - if (head != NULL) - { - cJSON_Delete(head); - } - - return false; -} - -/* Render an array to text */ -static cJSON_bool print_array(const cJSON * const item, printbuffer * const output_buffer) -{ - unsigned char *output_pointer = NULL; - size_t length = 0; - cJSON *current_element = item->child; - - if (output_buffer == NULL) - { - return false; - } - - /* Compose the output array. */ - /* opening square bracket */ - output_pointer = ensure(output_buffer, 1); - if (output_pointer == NULL) - { - return false; - } - - *output_pointer = '['; - output_buffer->offset++; - output_buffer->depth++; - - while (current_element != NULL) - { - if (!print_value(current_element, output_buffer)) - { - return false; - } - update_offset(output_buffer); - if (current_element->next) - { - length = (size_t) (output_buffer->format ? 2 : 1); - output_pointer = ensure(output_buffer, length + 1); - if (output_pointer == NULL) - { - return false; - } - *output_pointer++ = ','; - if(output_buffer->format) - { - *output_pointer++ = ' '; - } - *output_pointer = '\0'; - output_buffer->offset += length; - } - current_element = current_element->next; - } - - output_pointer = ensure(output_buffer, 2); - if (output_pointer == NULL) - { - return false; - } - *output_pointer++ = ']'; - *output_pointer = '\0'; - output_buffer->depth--; - - return true; -} - -/* Build an object from the text. */ -static cJSON_bool parse_object(cJSON * const item, parse_buffer * const input_buffer) -{ - cJSON *head = NULL; /* linked list head */ - cJSON *current_item = NULL; - - if (input_buffer->depth >= CJSON_NESTING_LIMIT) - { - return false; /* to deeply nested */ - } - input_buffer->depth++; - - if (cannot_access_at_index(input_buffer, 0) || (buffer_at_offset(input_buffer)[0] != '{')) - { - goto fail; /* not an object */ - } - - input_buffer->offset++; - buffer_skip_whitespace(input_buffer); - if (can_access_at_index(input_buffer, 0) && (buffer_at_offset(input_buffer)[0] == '}')) - { - goto success; /* empty object */ - } - - /* check if we skipped to the end of the buffer */ - if (cannot_access_at_index(input_buffer, 0)) - { - input_buffer->offset--; - goto fail; - } - - /* step back to character in front of the first element */ - input_buffer->offset--; - /* loop through the comma separated array elements */ - do - { - /* allocate next item */ - cJSON *new_item = cJSON_New_Item(&(input_buffer->hooks)); - if (new_item == NULL) - { - goto fail; /* allocation failure */ - } - - /* attach next item to list */ - if (head == NULL) - { - /* start the linked list */ - current_item = head = new_item; - } - else - { - /* add to the end and advance */ - current_item->next = new_item; - new_item->prev = current_item; - current_item = new_item; - } - - /* parse the name of the child */ - input_buffer->offset++; - buffer_skip_whitespace(input_buffer); - if (!parse_string(current_item, input_buffer)) - { - goto fail; /* faile to parse name */ - } - buffer_skip_whitespace(input_buffer); - - /* swap valuestring and string, because we parsed the name */ - current_item->string = current_item->valuestring; - current_item->valuestring = NULL; - - if (cannot_access_at_index(input_buffer, 0) || (buffer_at_offset(input_buffer)[0] != ':')) - { - goto fail; /* invalid object */ - } - - /* parse the value */ - input_buffer->offset++; - buffer_skip_whitespace(input_buffer); - if (!parse_value(current_item, input_buffer)) - { - goto fail; /* failed to parse value */ - } - buffer_skip_whitespace(input_buffer); - } - while (can_access_at_index(input_buffer, 0) && (buffer_at_offset(input_buffer)[0] == ',')); - - if (cannot_access_at_index(input_buffer, 0) || (buffer_at_offset(input_buffer)[0] != '}')) - { - goto fail; /* expected end of object */ - } - -success: - input_buffer->depth--; - - item->type = cJSON_Object; - item->child = head; - - input_buffer->offset++; - return true; - -fail: - if (head != NULL) - { - cJSON_Delete(head); - } - - return false; -} - -/* Render an object to text. */ -static cJSON_bool print_object(const cJSON * const item, printbuffer * const output_buffer) -{ - unsigned char *output_pointer = NULL; - size_t length = 0; - cJSON *current_item = item->child; - - if (output_buffer == NULL) - { - return false; - } - - /* Compose the output: */ - length = (size_t) (output_buffer->format ? 2 : 1); /* fmt: {\n */ - output_pointer = ensure(output_buffer, length + 1); - if (output_pointer == NULL) - { - return false; - } - - *output_pointer++ = '{'; - output_buffer->depth++; - if (output_buffer->format) - { - *output_pointer++ = '\n'; - } - output_buffer->offset += length; - - while (current_item) - { - if (output_buffer->format) - { - size_t i; - output_pointer = ensure(output_buffer, output_buffer->depth); - if (output_pointer == NULL) - { - return false; - } - for (i = 0; i < output_buffer->depth; i++) - { - *output_pointer++ = '\t'; - } - output_buffer->offset += output_buffer->depth; - } - - /* print key */ - if (!print_string_ptr((unsigned char*)current_item->string, output_buffer)) - { - return false; - } - update_offset(output_buffer); - - length = (size_t) (output_buffer->format ? 2 : 1); - output_pointer = ensure(output_buffer, length); - if (output_pointer == NULL) - { - return false; - } - *output_pointer++ = ':'; - if (output_buffer->format) - { - *output_pointer++ = '\t'; - } - output_buffer->offset += length; - - /* print value */ - if (!print_value(current_item, output_buffer)) - { - return false; - } - update_offset(output_buffer); - - /* print comma if not last */ - length = ((size_t)(output_buffer->format ? 1 : 0) + (size_t)(current_item->next ? 1 : 0)); - output_pointer = ensure(output_buffer, length + 1); - if (output_pointer == NULL) - { - return false; - } - if (current_item->next) - { - *output_pointer++ = ','; - } - - if (output_buffer->format) - { - *output_pointer++ = '\n'; - } - *output_pointer = '\0'; - output_buffer->offset += length; - - current_item = current_item->next; - } - - output_pointer = ensure(output_buffer, output_buffer->format ? (output_buffer->depth + 1) : 2); - if (output_pointer == NULL) - { - return false; - } - if (output_buffer->format) - { - size_t i; - for (i = 0; i < (output_buffer->depth - 1); i++) - { - *output_pointer++ = '\t'; - } - } - *output_pointer++ = '}'; - *output_pointer = '\0'; - output_buffer->depth--; - - return true; -} - -/* Get Array size/item / object item. */ -CJSON_PUBLIC(int) cJSON_GetArraySize(const cJSON *array) -{ - cJSON *child = NULL; - size_t size = 0; - - if (array == NULL) - { - return 0; - } - - child = array->child; - - while(child != NULL) - { - size++; - child = child->next; - } - - /* FIXME: Can overflow here. Cannot be fixed without breaking the API */ - - return (int)size; -} - -static cJSON* get_array_item(const cJSON *array, size_t index) -{ - cJSON *current_child = NULL; - - if (array == NULL) - { - return NULL; - } - - current_child = array->child; - while ((current_child != NULL) && (index > 0)) - { - index--; - current_child = current_child->next; - } - - return current_child; -} - -CJSON_PUBLIC(cJSON *) cJSON_GetArrayItem(const cJSON *array, int index) -{ - if (index < 0) - { - return NULL; - } - - return get_array_item(array, (size_t)index); -} - -static cJSON *get_object_item(const cJSON * const object, const char * const name, const cJSON_bool case_sensitive) -{ - cJSON *current_element = NULL; - - if ((object == NULL) || (name == NULL)) - { - return NULL; - } - - current_element = object->child; - if (case_sensitive) - { - while ((current_element != NULL) && (current_element->string != NULL) && (strcmp(name, current_element->string) != 0)) - { - current_element = current_element->next; - } - } - else - { - while ((current_element != NULL) && (case_insensitive_strcmp((const unsigned char*)name, (const unsigned char*)(current_element->string)) != 0)) - { - current_element = current_element->next; - } - } - - if ((current_element == NULL) || (current_element->string == NULL)) { - return NULL; - } - - return current_element; -} - -CJSON_PUBLIC(cJSON *) cJSON_GetObjectItem(const cJSON * const object, const char * const string) -{ - return get_object_item(object, string, false); -} - -CJSON_PUBLIC(cJSON *) cJSON_GetObjectItemCaseSensitive(const cJSON * const object, const char * const string) -{ - return get_object_item(object, string, true); -} - -CJSON_PUBLIC(cJSON_bool) cJSON_HasObjectItem(const cJSON *object, const char *string) -{ - return cJSON_GetObjectItem(object, string) ? 1 : 0; -} - -/* Utility for array list handling. */ -static void suffix_object(cJSON *prev, cJSON *item) -{ - prev->next = item; - item->prev = prev; -} - -/* Utility for handling references. */ -static cJSON *create_reference(const cJSON *item, const internal_hooks * const hooks) -{ - cJSON *reference = NULL; - if (item == NULL) - { - return NULL; - } - - reference = cJSON_New_Item(hooks); - if (reference == NULL) - { - return NULL; - } - - memcpy(reference, item, sizeof(cJSON)); - reference->string = NULL; - reference->type |= cJSON_IsReference; - reference->next = reference->prev = NULL; - return reference; -} - -static cJSON_bool add_item_to_array(cJSON *array, cJSON *item) -{ - cJSON *child = NULL; - - if ((item == NULL) || (array == NULL)) - { - return false; - } - - child = array->child; - - if (child == NULL) - { - /* list is empty, start new one */ - array->child = item; - } - else - { - /* append to the end */ - while (child->next) - { - child = child->next; - } - suffix_object(child, item); - } - - return true; -} - -/* Add item to array/object. */ -CJSON_PUBLIC(void) cJSON_AddItemToArray(cJSON *array, cJSON *item) -{ - add_item_to_array(array, item); -} - -#if defined(__clang__) || (defined(__GNUC__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ > 5)))) - #pragma GCC diagnostic push -#endif -#ifdef __GNUC__ -#pragma GCC diagnostic ignored "-Wcast-qual" -#endif -/* helper function to cast away const */ -static void* cast_away_const(const void* string) -{ - return (void*)string; -} -#if defined(__clang__) || (defined(__GNUC__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ > 5)))) - #pragma GCC diagnostic pop -#endif - - -static cJSON_bool add_item_to_object(cJSON * const object, const char * const string, cJSON * const item, const internal_hooks * const hooks, const cJSON_bool constant_key) -{ - char *new_key = NULL; - int new_type = cJSON_Invalid; - - if ((object == NULL) || (string == NULL) || (item == NULL)) - { - return false; - } - - if (constant_key) - { - new_key = (char*)cast_away_const(string); - new_type = item->type | cJSON_StringIsConst; - } - else - { - new_key = (char*)cJSON_strdup((const unsigned char*)string, hooks); - if (new_key == NULL) - { - return false; - } - - new_type = item->type & ~cJSON_StringIsConst; - } - - if (!(item->type & cJSON_StringIsConst) && (item->string != NULL)) - { - hooks->deallocate(item->string); - } - - item->string = new_key; - item->type = new_type; - - return add_item_to_array(object, item); -} - -CJSON_PUBLIC(void) cJSON_AddItemToObject(cJSON *object, const char *string, cJSON *item) -{ - add_item_to_object(object, string, item, &global_hooks, false); -} - -/* Add an item to an object with constant string as key */ -CJSON_PUBLIC(void) cJSON_AddItemToObjectCS(cJSON *object, const char *string, cJSON *item) -{ - add_item_to_object(object, string, item, &global_hooks, true); -} - -CJSON_PUBLIC(void) cJSON_AddItemReferenceToArray(cJSON *array, cJSON *item) -{ - if (array == NULL) - { - return; - } - - add_item_to_array(array, create_reference(item, &global_hooks)); -} - -CJSON_PUBLIC(void) cJSON_AddItemReferenceToObject(cJSON *object, const char *string, cJSON *item) -{ - if ((object == NULL) || (string == NULL)) - { - return; - } - - add_item_to_object(object, string, create_reference(item, &global_hooks), &global_hooks, false); -} - -CJSON_PUBLIC(cJSON*) cJSON_AddNullToObject(cJSON * const object, const char * const name) -{ - cJSON *null = cJSON_CreateNull(); - if (add_item_to_object(object, name, null, &global_hooks, false)) - { - return null; - } - - cJSON_Delete(null); - return NULL; -} - -CJSON_PUBLIC(cJSON*) cJSON_AddTrueToObject(cJSON * const object, const char * const name) -{ - cJSON *true_item = cJSON_CreateTrue(); - if (add_item_to_object(object, name, true_item, &global_hooks, false)) - { - return true_item; - } - - cJSON_Delete(true_item); - return NULL; -} - -CJSON_PUBLIC(cJSON*) cJSON_AddFalseToObject(cJSON * const object, const char * const name) -{ - cJSON *false_item = cJSON_CreateFalse(); - if (add_item_to_object(object, name, false_item, &global_hooks, false)) - { - return false_item; - } - - cJSON_Delete(false_item); - return NULL; -} - -CJSON_PUBLIC(cJSON*) cJSON_AddBoolToObject(cJSON * const object, const char * const name, const cJSON_bool boolean) -{ - cJSON *bool_item = cJSON_CreateBool(boolean); - if (add_item_to_object(object, name, bool_item, &global_hooks, false)) - { - return bool_item; - } - - cJSON_Delete(bool_item); - return NULL; -} - -CJSON_PUBLIC(cJSON*) cJSON_AddNumberToObject(cJSON * const object, const char * const name, const double number) -{ - cJSON *number_item = cJSON_CreateNumber(number); - if (add_item_to_object(object, name, number_item, &global_hooks, false)) - { - return number_item; - } - - cJSON_Delete(number_item); - return NULL; -} - -CJSON_PUBLIC(cJSON*) cJSON_AddStringToObject(cJSON * const object, const char * const name, const char * const string) -{ - cJSON *string_item = cJSON_CreateString(string); - if (add_item_to_object(object, name, string_item, &global_hooks, false)) - { - return string_item; - } - - cJSON_Delete(string_item); - return NULL; -} - -CJSON_PUBLIC(cJSON*) cJSON_AddRawToObject(cJSON * const object, const char * const name, const char * const raw) -{ - cJSON *raw_item = cJSON_CreateRaw(raw); - if (add_item_to_object(object, name, raw_item, &global_hooks, false)) - { - return raw_item; - } - - cJSON_Delete(raw_item); - return NULL; -} - -CJSON_PUBLIC(cJSON*) cJSON_AddObjectToObject(cJSON * const object, const char * const name) -{ - cJSON *object_item = cJSON_CreateObject(); - if (add_item_to_object(object, name, object_item, &global_hooks, false)) - { - return object_item; - } - - cJSON_Delete(object_item); - return NULL; -} - -CJSON_PUBLIC(cJSON*) cJSON_AddArrayToObject(cJSON * const object, const char * const name) -{ - cJSON *array = cJSON_CreateArray(); - if (add_item_to_object(object, name, array, &global_hooks, false)) - { - return array; - } - - cJSON_Delete(array); - return NULL; -} - -CJSON_PUBLIC(cJSON *) cJSON_DetachItemViaPointer(cJSON *parent, cJSON * const item) -{ - if ((parent == NULL) || (item == NULL)) - { - return NULL; - } - - if (item->prev != NULL) - { - /* not the first element */ - item->prev->next = item->next; - } - if (item->next != NULL) - { - /* not the last element */ - item->next->prev = item->prev; - } - - if (item == parent->child) - { - /* first element */ - parent->child = item->next; - } - /* make sure the detached item doesn't point anywhere anymore */ - item->prev = NULL; - item->next = NULL; - - return item; -} - -CJSON_PUBLIC(cJSON *) cJSON_DetachItemFromArray(cJSON *array, int which) -{ - if (which < 0) - { - return NULL; - } - - return cJSON_DetachItemViaPointer(array, get_array_item(array, (size_t)which)); -} - -CJSON_PUBLIC(void) cJSON_DeleteItemFromArray(cJSON *array, int which) -{ - cJSON_Delete(cJSON_DetachItemFromArray(array, which)); -} - -CJSON_PUBLIC(cJSON *) cJSON_DetachItemFromObject(cJSON *object, const char *string) -{ - cJSON *to_detach = cJSON_GetObjectItem(object, string); - - return cJSON_DetachItemViaPointer(object, to_detach); -} - -CJSON_PUBLIC(cJSON *) cJSON_DetachItemFromObjectCaseSensitive(cJSON *object, const char *string) -{ - cJSON *to_detach = cJSON_GetObjectItemCaseSensitive(object, string); - - return cJSON_DetachItemViaPointer(object, to_detach); -} - -CJSON_PUBLIC(void) cJSON_DeleteItemFromObject(cJSON *object, const char *string) -{ - cJSON_Delete(cJSON_DetachItemFromObject(object, string)); -} - -CJSON_PUBLIC(void) cJSON_DeleteItemFromObjectCaseSensitive(cJSON *object, const char *string) -{ - cJSON_Delete(cJSON_DetachItemFromObjectCaseSensitive(object, string)); -} - -/* Replace array/object items with new ones. */ -CJSON_PUBLIC(void) cJSON_InsertItemInArray(cJSON *array, int which, cJSON *newitem) -{ - cJSON *after_inserted = NULL; - - if (which < 0) - { - return; - } - - after_inserted = get_array_item(array, (size_t)which); - if (after_inserted == NULL) - { - add_item_to_array(array, newitem); - return; - } - - newitem->next = after_inserted; - newitem->prev = after_inserted->prev; - after_inserted->prev = newitem; - if (after_inserted == array->child) - { - array->child = newitem; - } - else - { - newitem->prev->next = newitem; - } -} - -CJSON_PUBLIC(cJSON_bool) cJSON_ReplaceItemViaPointer(cJSON * const parent, cJSON * const item, cJSON * replacement) -{ - if ((parent == NULL) || (replacement == NULL) || (item == NULL)) - { - return false; - } - - if (replacement == item) - { - return true; - } - - replacement->next = item->next; - replacement->prev = item->prev; - - if (replacement->next != NULL) - { - replacement->next->prev = replacement; - } - if (replacement->prev != NULL) - { - replacement->prev->next = replacement; - } - if (parent->child == item) - { - parent->child = replacement; - } - - item->next = NULL; - item->prev = NULL; - cJSON_Delete(item); - - return true; -} - -CJSON_PUBLIC(void) cJSON_ReplaceItemInArray(cJSON *array, int which, cJSON *newitem) -{ - if (which < 0) - { - return; - } - - cJSON_ReplaceItemViaPointer(array, get_array_item(array, (size_t)which), newitem); -} - -static cJSON_bool replace_item_in_object(cJSON *object, const char *string, cJSON *replacement, cJSON_bool case_sensitive) -{ - if ((replacement == NULL) || (string == NULL)) - { - return false; - } - - /* replace the name in the replacement */ - if (!(replacement->type & cJSON_StringIsConst) && (replacement->string != NULL)) - { - cJSON_free(replacement->string); - } - replacement->string = (char*)cJSON_strdup((const unsigned char*)string, &global_hooks); - replacement->type &= ~cJSON_StringIsConst; - - cJSON_ReplaceItemViaPointer(object, get_object_item(object, string, case_sensitive), replacement); - - return true; -} - -CJSON_PUBLIC(void) cJSON_ReplaceItemInObject(cJSON *object, const char *string, cJSON *newitem) -{ - replace_item_in_object(object, string, newitem, false); -} - -CJSON_PUBLIC(void) cJSON_ReplaceItemInObjectCaseSensitive(cJSON *object, const char *string, cJSON *newitem) -{ - replace_item_in_object(object, string, newitem, true); -} - -/* Create basic types: */ -CJSON_PUBLIC(cJSON *) cJSON_CreateNull(void) -{ - cJSON *item = cJSON_New_Item(&global_hooks); - if(item) - { - item->type = cJSON_NULL; - } - - return item; -} - -CJSON_PUBLIC(cJSON *) cJSON_CreateTrue(void) -{ - cJSON *item = cJSON_New_Item(&global_hooks); - if(item) - { - item->type = cJSON_True; - } - - return item; -} - -CJSON_PUBLIC(cJSON *) cJSON_CreateFalse(void) -{ - cJSON *item = cJSON_New_Item(&global_hooks); - if(item) - { - item->type = cJSON_False; - } - - return item; -} - -CJSON_PUBLIC(cJSON *) cJSON_CreateBool(cJSON_bool b) -{ - cJSON *item = cJSON_New_Item(&global_hooks); - if(item) - { - item->type = b ? cJSON_True : cJSON_False; - } - - return item; -} - -CJSON_PUBLIC(cJSON *) cJSON_CreateNumber(double num) -{ - cJSON *item = cJSON_New_Item(&global_hooks); - if(item) - { - item->type = cJSON_Number; - item->valuedouble = num; - - /* use saturation in case of overflow */ - if (num >= INT_MAX) - { - item->valueint = INT_MAX; - } - else if (num <= (double)INT_MIN) - { - item->valueint = INT_MIN; - } - else - { - item->valueint = (int)num; - } - } - - return item; -} - -CJSON_PUBLIC(cJSON *) cJSON_CreateString(const char *string) -{ - cJSON *item = cJSON_New_Item(&global_hooks); - if(item) - { - item->type = cJSON_String; - item->valuestring = (char*)cJSON_strdup((const unsigned char*)string, &global_hooks); - if(!item->valuestring) - { - cJSON_Delete(item); - return NULL; - } - } - - return item; -} - -CJSON_PUBLIC(cJSON *) cJSON_CreateStringReference(const char *string) -{ - cJSON *item = cJSON_New_Item(&global_hooks); - if (item != NULL) - { - item->type = cJSON_String | cJSON_IsReference; - item->valuestring = (char*)cast_away_const(string); - } - - return item; -} - -CJSON_PUBLIC(cJSON *) cJSON_CreateObjectReference(const cJSON *child) -{ - cJSON *item = cJSON_New_Item(&global_hooks); - if (item != NULL) { - item->type = cJSON_Object | cJSON_IsReference; - item->child = (cJSON*)cast_away_const(child); - } - - return item; -} - -CJSON_PUBLIC(cJSON *) cJSON_CreateArrayReference(const cJSON *child) { - cJSON *item = cJSON_New_Item(&global_hooks); - if (item != NULL) { - item->type = cJSON_Array | cJSON_IsReference; - item->child = (cJSON*)cast_away_const(child); - } - - return item; -} - -CJSON_PUBLIC(cJSON *) cJSON_CreateRaw(const char *raw) -{ - cJSON *item = cJSON_New_Item(&global_hooks); - if(item) - { - item->type = cJSON_Raw; - item->valuestring = (char*)cJSON_strdup((const unsigned char*)raw, &global_hooks); - if(!item->valuestring) - { - cJSON_Delete(item); - return NULL; - } - } - - return item; -} - -CJSON_PUBLIC(cJSON *) cJSON_CreateArray(void) -{ - cJSON *item = cJSON_New_Item(&global_hooks); - if(item) - { - item->type=cJSON_Array; - } - - return item; -} - -CJSON_PUBLIC(cJSON *) cJSON_CreateObject(void) -{ - cJSON *item = cJSON_New_Item(&global_hooks); - if (item) - { - item->type = cJSON_Object; - } - - return item; -} - -/* Create Arrays: */ -CJSON_PUBLIC(cJSON *) cJSON_CreateIntArray(const int *numbers, int count) -{ - size_t i = 0; - cJSON *n = NULL; - cJSON *p = NULL; - cJSON *a = NULL; - - if ((count < 0) || (numbers == NULL)) - { - return NULL; - } - - a = cJSON_CreateArray(); - for(i = 0; a && (i < (size_t)count); i++) - { - n = cJSON_CreateNumber(numbers[i]); - if (!n) - { - cJSON_Delete(a); - return NULL; - } - if(!i) - { - a->child = n; - } - else - { - suffix_object(p, n); - } - p = n; - } - - return a; -} - -CJSON_PUBLIC(cJSON *) cJSON_CreateFloatArray(const float *numbers, int count) -{ - size_t i = 0; - cJSON *n = NULL; - cJSON *p = NULL; - cJSON *a = NULL; - - if ((count < 0) || (numbers == NULL)) - { - return NULL; - } - - a = cJSON_CreateArray(); - - for(i = 0; a && (i < (size_t)count); i++) - { - n = cJSON_CreateNumber((double)numbers[i]); - if(!n) - { - cJSON_Delete(a); - return NULL; - } - if(!i) - { - a->child = n; - } - else - { - suffix_object(p, n); - } - p = n; - } - - return a; -} - -CJSON_PUBLIC(cJSON *) cJSON_CreateDoubleArray(const double *numbers, int count) -{ - size_t i = 0; - cJSON *n = NULL; - cJSON *p = NULL; - cJSON *a = NULL; - - if ((count < 0) || (numbers == NULL)) - { - return NULL; - } - - a = cJSON_CreateArray(); - - for(i = 0;a && (i < (size_t)count); i++) - { - n = cJSON_CreateNumber(numbers[i]); - if(!n) - { - cJSON_Delete(a); - return NULL; - } - if(!i) - { - a->child = n; - } - else - { - suffix_object(p, n); - } - p = n; - } - - return a; -} - -CJSON_PUBLIC(cJSON *) cJSON_CreateStringArray(const char **strings, int count) -{ - size_t i = 0; - cJSON *n = NULL; - cJSON *p = NULL; - cJSON *a = NULL; - - if ((count < 0) || (strings == NULL)) - { - return NULL; - } - - a = cJSON_CreateArray(); - - for (i = 0; a && (i < (size_t)count); i++) - { - n = cJSON_CreateString(strings[i]); - if(!n) - { - cJSON_Delete(a); - return NULL; - } - if(!i) - { - a->child = n; - } - else - { - suffix_object(p,n); - } - p = n; - } - - return a; -} - -/* Duplication */ -CJSON_PUBLIC(cJSON *) cJSON_Duplicate(const cJSON *item, cJSON_bool recurse) -{ - cJSON *newitem = NULL; - cJSON *child = NULL; - cJSON *next = NULL; - cJSON *newchild = NULL; - - /* Bail on bad ptr */ - if (!item) - { - goto fail; - } - /* Create new item */ - newitem = cJSON_New_Item(&global_hooks); - if (!newitem) - { - goto fail; - } - /* Copy over all vars */ - newitem->type = item->type & (~cJSON_IsReference); - newitem->valueint = item->valueint; - newitem->valuedouble = item->valuedouble; - if (item->valuestring) - { - newitem->valuestring = (char*)cJSON_strdup((unsigned char*)item->valuestring, &global_hooks); - if (!newitem->valuestring) - { - goto fail; - } - } - if (item->string) - { - newitem->string = (item->type&cJSON_StringIsConst) ? item->string : (char*)cJSON_strdup((unsigned char*)item->string, &global_hooks); - if (!newitem->string) - { - goto fail; - } - } - /* If non-recursive, then we're done! */ - if (!recurse) - { - return newitem; - } - /* Walk the ->next chain for the child. */ - child = item->child; - while (child != NULL) - { - newchild = cJSON_Duplicate(child, true); /* Duplicate (with recurse) each item in the ->next chain */ - if (!newchild) - { - goto fail; - } - if (next != NULL) - { - /* If newitem->child already set, then crosswire ->prev and ->next and move on */ - next->next = newchild; - newchild->prev = next; - next = newchild; - } - else - { - /* Set newitem->child and move to it */ - newitem->child = newchild; - next = newchild; - } - child = child->next; - } - - return newitem; - -fail: - if (newitem != NULL) - { - cJSON_Delete(newitem); - } - - return NULL; -} - -CJSON_PUBLIC(void) cJSON_Minify(char *json) -{ - unsigned char *into = (unsigned char*)json; - - if (json == NULL) - { - return; - } - - while (*json) - { - if (*json == ' ') - { - json++; - } - else if (*json == '\t') - { - /* Whitespace characters. */ - json++; - } - else if (*json == '\r') - { - json++; - } - else if (*json=='\n') - { - json++; - } - else if ((*json == '/') && (json[1] == '/')) - { - /* double-slash comments, to end of line. */ - while (*json && (*json != '\n')) - { - json++; - } - } - else if ((*json == '/') && (json[1] == '*')) - { - /* multiline comments. */ - while (*json && !((*json == '*') && (json[1] == '/'))) - { - json++; - } - json += 2; - } - else if (*json == '\"') - { - /* string literals, which are \" sensitive. */ - *into++ = (unsigned char)*json++; - while (*json && (*json != '\"')) - { - if (*json == '\\') - { - *into++ = (unsigned char)*json++; - } - *into++ = (unsigned char)*json++; - } - *into++ = (unsigned char)*json++; - } - else - { - /* All other characters. */ - *into++ = (unsigned char)*json++; - } - } - - /* and null-terminate. */ - *into = '\0'; -} - -CJSON_PUBLIC(cJSON_bool) cJSON_IsInvalid(const cJSON * const item) -{ - if (item == NULL) - { - return false; - } - - return (item->type & 0xFF) == cJSON_Invalid; -} - -CJSON_PUBLIC(cJSON_bool) cJSON_IsFalse(const cJSON * const item) -{ - if (item == NULL) - { - return false; - } - - return (item->type & 0xFF) == cJSON_False; -} - -CJSON_PUBLIC(cJSON_bool) cJSON_IsTrue(const cJSON * const item) -{ - if (item == NULL) - { - return false; - } - - return (item->type & 0xff) == cJSON_True; -} - - -CJSON_PUBLIC(cJSON_bool) cJSON_IsBool(const cJSON * const item) -{ - if (item == NULL) - { - return false; - } - - return (item->type & (cJSON_True | cJSON_False)) != 0; -} -CJSON_PUBLIC(cJSON_bool) cJSON_IsNull(const cJSON * const item) -{ - if (item == NULL) - { - return false; - } - - return (item->type & 0xFF) == cJSON_NULL; -} - -CJSON_PUBLIC(cJSON_bool) cJSON_IsNumber(const cJSON * const item) -{ - if (item == NULL) - { - return false; - } - - return (item->type & 0xFF) == cJSON_Number; -} - -CJSON_PUBLIC(cJSON_bool) cJSON_IsString(const cJSON * const item) -{ - if (item == NULL) - { - return false; - } - - return (item->type & 0xFF) == cJSON_String; -} - -CJSON_PUBLIC(cJSON_bool) cJSON_IsArray(const cJSON * const item) -{ - if (item == NULL) - { - return false; - } - - return (item->type & 0xFF) == cJSON_Array; -} - -CJSON_PUBLIC(cJSON_bool) cJSON_IsObject(const cJSON * const item) -{ - if (item == NULL) - { - return false; - } - - return (item->type & 0xFF) == cJSON_Object; -} - -CJSON_PUBLIC(cJSON_bool) cJSON_IsRaw(const cJSON * const item) -{ - if (item == NULL) - { - return false; - } - - return (item->type & 0xFF) == cJSON_Raw; -} - -CJSON_PUBLIC(cJSON_bool) cJSON_Compare(const cJSON * const a, const cJSON * const b, const cJSON_bool case_sensitive) -{ - if ((a == NULL) || (b == NULL) || ((a->type & 0xFF) != (b->type & 0xFF)) || cJSON_IsInvalid(a)) - { - return false; - } - - /* check if type is valid */ - switch (a->type & 0xFF) - { - case cJSON_False: - case cJSON_True: - case cJSON_NULL: - case cJSON_Number: - case cJSON_String: - case cJSON_Raw: - case cJSON_Array: - case cJSON_Object: - break; - - default: - return false; - } - - /* identical objects are equal */ - if (a == b) - { - return true; - } - - switch (a->type & 0xFF) - { - /* in these cases and equal type is enough */ - case cJSON_False: - case cJSON_True: - case cJSON_NULL: - return true; - - case cJSON_Number: - if (a->valuedouble == b->valuedouble) - { - return true; - } - return false; - - case cJSON_String: - case cJSON_Raw: - if ((a->valuestring == NULL) || (b->valuestring == NULL)) - { - return false; - } - if (strcmp(a->valuestring, b->valuestring) == 0) - { - return true; - } - - return false; - - case cJSON_Array: - { - cJSON *a_element = a->child; - cJSON *b_element = b->child; - - for (; (a_element != NULL) && (b_element != NULL);) - { - if (!cJSON_Compare(a_element, b_element, case_sensitive)) - { - return false; - } - - a_element = a_element->next; - b_element = b_element->next; - } - - /* one of the arrays is longer than the other */ - if (a_element != b_element) { - return false; - } - - return true; - } - - case cJSON_Object: - { - cJSON *a_element = NULL; - cJSON *b_element = NULL; - cJSON_ArrayForEach(a_element, a) - { - /* TODO This has O(n^2) runtime, which is horrible! */ - b_element = get_object_item(b, a_element->string, case_sensitive); - if (b_element == NULL) - { - return false; - } - - if (!cJSON_Compare(a_element, b_element, case_sensitive)) - { - return false; - } - } - - /* doing this twice, once on a and b to prevent true comparison if a subset of b - * TODO: Do this the proper way, this is just a fix for now */ - cJSON_ArrayForEach(b_element, b) - { - a_element = get_object_item(a, b_element->string, case_sensitive); - if (a_element == NULL) - { - return false; - } - - if (!cJSON_Compare(b_element, a_element, case_sensitive)) - { - return false; - } - } - - return true; - } - - default: - return false; - } -} - -CJSON_PUBLIC(void *) cJSON_malloc(size_t size) -{ - return global_hooks.allocate(size); -} - -CJSON_PUBLIC(void) cJSON_free(void *object) -{ - global_hooks.deallocate(object); -} diff --git a/ThirdParty/custom-opm-common/opm-common/external/cjson/cJSON.h b/ThirdParty/custom-opm-common/opm-common/external/cjson/cJSON.h deleted file mode 100644 index 3279f6ba5d..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/external/cjson/cJSON.h +++ /dev/null @@ -1,285 +0,0 @@ -/* - Copyright (c) 2009-2017 Dave Gamble and cJSON contributors - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - THE SOFTWARE. -*/ - -#ifndef cJSON__h -#define cJSON__h - -#ifdef __cplusplus -extern "C" -{ -#endif - -#if !defined(__WINDOWS__) && (defined(WIN32) || defined(WIN64) || defined(_MSC_VER) || defined(_WIN32)) -#define __WINDOWS__ -#endif - -#ifdef __WINDOWS__ - -/* When compiling for windows, we specify a specific calling convention to avoid issues where we are being called from a project with a different default calling convention. For windows you have 3 define options: - -CJSON_HIDE_SYMBOLS - Define this in the case where you don't want to ever dllexport symbols -CJSON_EXPORT_SYMBOLS - Define this on library build when you want to dllexport symbols (default) -CJSON_IMPORT_SYMBOLS - Define this if you want to dllimport symbol - -For *nix builds that support visibility attribute, you can define similar behavior by - -setting default visibility to hidden by adding --fvisibility=hidden (for gcc) -or --xldscope=hidden (for sun cc) -to CFLAGS - -then using the CJSON_API_VISIBILITY flag to "export" the same symbols the way CJSON_EXPORT_SYMBOLS does - -*/ - -#define CJSON_CDECL __cdecl -#define CJSON_STDCALL __stdcall - -/* export symbols by default, this is necessary for copy pasting the C and header file */ -#if !defined(CJSON_HIDE_SYMBOLS) && !defined(CJSON_IMPORT_SYMBOLS) && !defined(CJSON_EXPORT_SYMBOLS) -#define CJSON_EXPORT_SYMBOLS -#endif - -#if defined(CJSON_HIDE_SYMBOLS) -#define CJSON_PUBLIC(type) type CJSON_STDCALL -#elif defined(CJSON_EXPORT_SYMBOLS) -#define CJSON_PUBLIC(type) __declspec(dllexport) type CJSON_STDCALL -#elif defined(CJSON_IMPORT_SYMBOLS) -#define CJSON_PUBLIC(type) __declspec(dllimport) type CJSON_STDCALL -#endif -#else /* !__WINDOWS__ */ -#define CJSON_CDECL -#define CJSON_STDCALL - -#if (defined(__GNUC__) || defined(__SUNPRO_CC) || defined (__SUNPRO_C)) && defined(CJSON_API_VISIBILITY) -#define CJSON_PUBLIC(type) __attribute__((visibility("default"))) type -#else -#define CJSON_PUBLIC(type) type -#endif -#endif - -/* project version */ -#define CJSON_VERSION_MAJOR 1 -#define CJSON_VERSION_MINOR 7 -#define CJSON_VERSION_PATCH 10 - -#include - -/* cJSON Types: */ -#define cJSON_Invalid (0) -#define cJSON_False (1 << 0) -#define cJSON_True (1 << 1) -#define cJSON_NULL (1 << 2) -#define cJSON_Number (1 << 3) -#define cJSON_String (1 << 4) -#define cJSON_Array (1 << 5) -#define cJSON_Object (1 << 6) -#define cJSON_Raw (1 << 7) /* raw json */ - -#define cJSON_IsReference 256 -#define cJSON_StringIsConst 512 - -/* The cJSON structure: */ -typedef struct cJSON -{ - /* next/prev allow you to walk array/object chains. Alternatively, use GetArraySize/GetArrayItem/GetObjectItem */ - struct cJSON *next; - struct cJSON *prev; - /* An array or object item will have a child pointer pointing to a chain of the items in the array/object. */ - struct cJSON *child; - - /* The type of the item, as above. */ - int type; - - /* The item's string, if type==cJSON_String and type == cJSON_Raw */ - char *valuestring; - /* writing to valueint is DEPRECATED, use cJSON_SetNumberValue instead */ - int valueint; - /* The item's number, if type==cJSON_Number */ - double valuedouble; - - /* The item's name string, if this item is the child of, or is in the list of subitems of an object. */ - char *string; -} cJSON; - -typedef struct cJSON_Hooks -{ - /* malloc/free are CDECL on Windows regardless of the default calling convention of the compiler, so ensure the hooks allow passing those functions directly. */ - void *(CJSON_CDECL *malloc_fn)(size_t sz); - void (CJSON_CDECL *free_fn)(void *ptr); -} cJSON_Hooks; - -typedef int cJSON_bool; - -/* Limits how deeply nested arrays/objects can be before cJSON rejects to parse them. - * This is to prevent stack overflows. */ -#ifndef CJSON_NESTING_LIMIT -#define CJSON_NESTING_LIMIT 1000 -#endif - -/* returns the version of cJSON as a string */ -CJSON_PUBLIC(const char*) cJSON_Version(void); - -/* Supply malloc, realloc and free functions to cJSON */ -CJSON_PUBLIC(void) cJSON_InitHooks(cJSON_Hooks* hooks); - -/* Memory Management: the caller is always responsible to free the results from all variants of cJSON_Parse (with cJSON_Delete) and cJSON_Print (with stdlib free, cJSON_Hooks.free_fn, or cJSON_free as appropriate). The exception is cJSON_PrintPreallocated, where the caller has full responsibility of the buffer. */ -/* Supply a block of JSON, and this returns a cJSON object you can interrogate. */ -CJSON_PUBLIC(cJSON *) cJSON_Parse(const char *value); -/* ParseWithOpts allows you to require (and check) that the JSON is null terminated, and to retrieve the pointer to the final byte parsed. */ -/* If you supply a ptr in return_parse_end and parsing fails, then return_parse_end will contain a pointer to the error so will match cJSON_GetErrorPtr(). */ -CJSON_PUBLIC(cJSON *) cJSON_ParseWithOpts(const char *value, const char **return_parse_end, cJSON_bool require_null_terminated); - -/* Render a cJSON entity to text for transfer/storage. */ -CJSON_PUBLIC(char *) cJSON_Print(const cJSON *item); -/* Render a cJSON entity to text for transfer/storage without any formatting. */ -CJSON_PUBLIC(char *) cJSON_PrintUnformatted(const cJSON *item); -/* Render a cJSON entity to text using a buffered strategy. prebuffer is a guess at the final size. guessing well reduces reallocation. fmt=0 gives unformatted, =1 gives formatted */ -CJSON_PUBLIC(char *) cJSON_PrintBuffered(const cJSON *item, int prebuffer, cJSON_bool fmt); -/* Render a cJSON entity to text using a buffer already allocated in memory with given length. Returns 1 on success and 0 on failure. */ -/* NOTE: cJSON is not always 100% accurate in estimating how much memory it will use, so to be safe allocate 5 bytes more than you actually need */ -CJSON_PUBLIC(cJSON_bool) cJSON_PrintPreallocated(cJSON *item, char *buffer, const int length, const cJSON_bool format); -/* Delete a cJSON entity and all subentities. */ -CJSON_PUBLIC(void) cJSON_Delete(cJSON *c); - -/* Returns the number of items in an array (or object). */ -CJSON_PUBLIC(int) cJSON_GetArraySize(const cJSON *array); -/* Retrieve item number "index" from array "array". Returns NULL if unsuccessful. */ -CJSON_PUBLIC(cJSON *) cJSON_GetArrayItem(const cJSON *array, int index); -/* Get item "string" from object. Case insensitive. */ -CJSON_PUBLIC(cJSON *) cJSON_GetObjectItem(const cJSON * const object, const char * const string); -CJSON_PUBLIC(cJSON *) cJSON_GetObjectItemCaseSensitive(const cJSON * const object, const char * const string); -CJSON_PUBLIC(cJSON_bool) cJSON_HasObjectItem(const cJSON *object, const char *string); -/* For analysing failed parses. This returns a pointer to the parse error. You'll probably need to look a few chars back to make sense of it. Defined when cJSON_Parse() returns 0. 0 when cJSON_Parse() succeeds. */ -CJSON_PUBLIC(const char *) cJSON_GetErrorPtr(void); - -/* Check if the item is a string and return its valuestring */ -CJSON_PUBLIC(char *) cJSON_GetStringValue(cJSON *item); - -/* These functions check the type of an item */ -CJSON_PUBLIC(cJSON_bool) cJSON_IsInvalid(const cJSON * const item); -CJSON_PUBLIC(cJSON_bool) cJSON_IsFalse(const cJSON * const item); -CJSON_PUBLIC(cJSON_bool) cJSON_IsTrue(const cJSON * const item); -CJSON_PUBLIC(cJSON_bool) cJSON_IsBool(const cJSON * const item); -CJSON_PUBLIC(cJSON_bool) cJSON_IsNull(const cJSON * const item); -CJSON_PUBLIC(cJSON_bool) cJSON_IsNumber(const cJSON * const item); -CJSON_PUBLIC(cJSON_bool) cJSON_IsString(const cJSON * const item); -CJSON_PUBLIC(cJSON_bool) cJSON_IsArray(const cJSON * const item); -CJSON_PUBLIC(cJSON_bool) cJSON_IsObject(const cJSON * const item); -CJSON_PUBLIC(cJSON_bool) cJSON_IsRaw(const cJSON * const item); - -/* These calls create a cJSON item of the appropriate type. */ -CJSON_PUBLIC(cJSON *) cJSON_CreateNull(void); -CJSON_PUBLIC(cJSON *) cJSON_CreateTrue(void); -CJSON_PUBLIC(cJSON *) cJSON_CreateFalse(void); -CJSON_PUBLIC(cJSON *) cJSON_CreateBool(cJSON_bool boolean); -CJSON_PUBLIC(cJSON *) cJSON_CreateNumber(double num); -CJSON_PUBLIC(cJSON *) cJSON_CreateString(const char *string); -/* raw json */ -CJSON_PUBLIC(cJSON *) cJSON_CreateRaw(const char *raw); -CJSON_PUBLIC(cJSON *) cJSON_CreateArray(void); -CJSON_PUBLIC(cJSON *) cJSON_CreateObject(void); - -/* Create a string where valuestring references a string so - * it will not be freed by cJSON_Delete */ -CJSON_PUBLIC(cJSON *) cJSON_CreateStringReference(const char *string); -/* Create an object/arrray that only references it's elements so - * they will not be freed by cJSON_Delete */ -CJSON_PUBLIC(cJSON *) cJSON_CreateObjectReference(const cJSON *child); -CJSON_PUBLIC(cJSON *) cJSON_CreateArrayReference(const cJSON *child); - -/* These utilities create an Array of count items. */ -CJSON_PUBLIC(cJSON *) cJSON_CreateIntArray(const int *numbers, int count); -CJSON_PUBLIC(cJSON *) cJSON_CreateFloatArray(const float *numbers, int count); -CJSON_PUBLIC(cJSON *) cJSON_CreateDoubleArray(const double *numbers, int count); -CJSON_PUBLIC(cJSON *) cJSON_CreateStringArray(const char **strings, int count); - -/* Append item to the specified array/object. */ -CJSON_PUBLIC(void) cJSON_AddItemToArray(cJSON *array, cJSON *item); -CJSON_PUBLIC(void) cJSON_AddItemToObject(cJSON *object, const char *string, cJSON *item); -/* Use this when string is definitely const (i.e. a literal, or as good as), and will definitely survive the cJSON object. - * WARNING: When this function was used, make sure to always check that (item->type & cJSON_StringIsConst) is zero before - * writing to `item->string` */ -CJSON_PUBLIC(void) cJSON_AddItemToObjectCS(cJSON *object, const char *string, cJSON *item); -/* Append reference to item to the specified array/object. Use this when you want to add an existing cJSON to a new cJSON, but don't want to corrupt your existing cJSON. */ -CJSON_PUBLIC(void) cJSON_AddItemReferenceToArray(cJSON *array, cJSON *item); -CJSON_PUBLIC(void) cJSON_AddItemReferenceToObject(cJSON *object, const char *string, cJSON *item); - -/* Remove/Detatch items from Arrays/Objects. */ -CJSON_PUBLIC(cJSON *) cJSON_DetachItemViaPointer(cJSON *parent, cJSON * const item); -CJSON_PUBLIC(cJSON *) cJSON_DetachItemFromArray(cJSON *array, int which); -CJSON_PUBLIC(void) cJSON_DeleteItemFromArray(cJSON *array, int which); -CJSON_PUBLIC(cJSON *) cJSON_DetachItemFromObject(cJSON *object, const char *string); -CJSON_PUBLIC(cJSON *) cJSON_DetachItemFromObjectCaseSensitive(cJSON *object, const char *string); -CJSON_PUBLIC(void) cJSON_DeleteItemFromObject(cJSON *object, const char *string); -CJSON_PUBLIC(void) cJSON_DeleteItemFromObjectCaseSensitive(cJSON *object, const char *string); - -/* Update array items. */ -CJSON_PUBLIC(void) cJSON_InsertItemInArray(cJSON *array, int which, cJSON *newitem); /* Shifts pre-existing items to the right. */ -CJSON_PUBLIC(cJSON_bool) cJSON_ReplaceItemViaPointer(cJSON * const parent, cJSON * const item, cJSON * replacement); -CJSON_PUBLIC(void) cJSON_ReplaceItemInArray(cJSON *array, int which, cJSON *newitem); -CJSON_PUBLIC(void) cJSON_ReplaceItemInObject(cJSON *object,const char *string,cJSON *newitem); -CJSON_PUBLIC(void) cJSON_ReplaceItemInObjectCaseSensitive(cJSON *object,const char *string,cJSON *newitem); - -/* Duplicate a cJSON item */ -CJSON_PUBLIC(cJSON *) cJSON_Duplicate(const cJSON *item, cJSON_bool recurse); -/* Duplicate will create a new, identical cJSON item to the one you pass, in new memory that will -need to be released. With recurse!=0, it will duplicate any children connected to the item. -The item->next and ->prev pointers are always zero on return from Duplicate. */ -/* Recursively compare two cJSON items for equality. If either a or b is NULL or invalid, they will be considered unequal. - * case_sensitive determines if object keys are treated case sensitive (1) or case insensitive (0) */ -CJSON_PUBLIC(cJSON_bool) cJSON_Compare(const cJSON * const a, const cJSON * const b, const cJSON_bool case_sensitive); - - -CJSON_PUBLIC(void) cJSON_Minify(char *json); - -/* Helper functions for creating and adding items to an object at the same time. - * They return the added item or NULL on failure. */ -CJSON_PUBLIC(cJSON*) cJSON_AddNullToObject(cJSON * const object, const char * const name); -CJSON_PUBLIC(cJSON*) cJSON_AddTrueToObject(cJSON * const object, const char * const name); -CJSON_PUBLIC(cJSON*) cJSON_AddFalseToObject(cJSON * const object, const char * const name); -CJSON_PUBLIC(cJSON*) cJSON_AddBoolToObject(cJSON * const object, const char * const name, const cJSON_bool boolean); -CJSON_PUBLIC(cJSON*) cJSON_AddNumberToObject(cJSON * const object, const char * const name, const double number); -CJSON_PUBLIC(cJSON*) cJSON_AddStringToObject(cJSON * const object, const char * const name, const char * const string); -CJSON_PUBLIC(cJSON*) cJSON_AddRawToObject(cJSON * const object, const char * const name, const char * const raw); -CJSON_PUBLIC(cJSON*) cJSON_AddObjectToObject(cJSON * const object, const char * const name); -CJSON_PUBLIC(cJSON*) cJSON_AddArrayToObject(cJSON * const object, const char * const name); - -/* When assigning an integer value, it needs to be propagated to valuedouble too. */ -#define cJSON_SetIntValue(object, number) ((object) ? (object)->valueint = (object)->valuedouble = (number) : (number)) -/* helper for the cJSON_SetNumberValue macro */ -CJSON_PUBLIC(double) cJSON_SetNumberHelper(cJSON *object, double number); -#define cJSON_SetNumberValue(object, number) ((object != NULL) ? cJSON_SetNumberHelper(object, (double)number) : (number)) - -/* Macro for iterating over an array or object */ -#define cJSON_ArrayForEach(element, array) for(element = (array != NULL) ? (array)->child : NULL; element != NULL; element = element->next) - -/* malloc/free objects using the malloc/free functions that have been set with cJSON_InitHooks */ -CJSON_PUBLIC(void *) cJSON_malloc(size_t size); -CJSON_PUBLIC(void) cJSON_free(void *object); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/jenkins/README.md b/ThirdParty/custom-opm-common/opm-common/jenkins/README.md deleted file mode 100644 index 5bfc46c3be..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/jenkins/README.md +++ /dev/null @@ -1,11 +0,0 @@ -# opm-common jenkins build scripts: - -**build-opm-module.sh**: -This is a helper script which contains functions for building, -testing and cloning modules. - -**build.sh**: -This expects to run on a jenkins instance with opm-common as the 'origin' remote. - -It will build and test opm-common. It can be used both for post-merge builds -of the master branch and for a github pull request builder job. diff --git a/ThirdParty/custom-opm-common/opm-common/jenkins/build-opm-module.sh b/ThirdParty/custom-opm-common/opm-common/jenkins/build-opm-module.sh deleted file mode 100644 index a771e5f450..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/jenkins/build-opm-module.sh +++ /dev/null @@ -1,248 +0,0 @@ -#!/bin/bash - -declare -A configurations - -declare -A EXTRA_MODULE_FLAGS -EXTRA_MODULE_FLAGS[opm-simulators]="-DBUILD_EBOS_EXTENSIONS=ON -DBUILD_EBOS_DEBUG_EXTENSIONS=ON -DBUILD_FLOW_VARIANTS=ON -DOPM_ENABLE_PYTHON=ON" -EXTRA_MODULE_FLAGS[opm-common]="-DOPM_ENABLE_PYTHON=ON -DOPM_ENABLE_EMBEDDED_PYTHON=ON -DOPM_INSTALL_PYTHON=ON" - -# Parse revisions from trigger comment and setup arrays -# Depends on: 'upstreams', upstreamRev', -# 'downstreams', 'downstreamRev', -# 'ghprbCommentBody', -# 'CONFIGURATIONS', 'TOOLCHAINS' -function parseRevisions { - for upstream in ${upstreams[*]} - do - if grep -qi "$upstream=" <<< $ghprbCommentBody - then - upstreamRev[$upstream]=pull/`echo $ghprbCommentBody | sed -r "s/.*${upstream,,}=([0-9]+).*/\1/g"`/merge - fi - done - if grep -q "with downstreams" <<< $ghprbCommentBody - then - for downstream in ${downstreams[*]} - do - if grep -qi "$downstream=" <<< $ghprbCommentBody - then - downstreamRev[$downstream]=pull/`echo $ghprbCommentBody | sed -r "s/.*${downstream,,}=([0-9]+).*/\1/g"`/merge - fi - done - fi - - # Default to a serial build if no types are given - if test -z "$BTYPES" - then - BTYPES="serial" - fi - - # Convert to arrays for easy looping - declare -a BTYPES_ARRAY - for btype in $BTYPES - do - BTYPES_ARRAY=(${BTYPES_ARRAY[*]} $btype) - done - TOOLCHAIN_ARRAY=($CMAKE_TOOLCHAIN_FILES) - for index in ${!BTYPES_ARRAY[*]} - do - key=${BTYPES_ARRAY[$index]} - data=${TOOLCHAIN_ARRAY[$index]} - configurations[$key]=$data - done -} - -# Print revisions and configurations -# $1 = Name of main module -# Depends on: 'upstreams', upstreamRev', -# 'downstreams', 'downstreamRev', -# 'ghprbCommentBody', -# 'configurations', 'sha1' -function printHeader { - echo -e "Repository revisions:" - for upstream in ${upstreams[*]} - do - echo -e "\t [upstream] $upstream=${upstreamRev[$upstream]}" - done - echo -e "\t[main module] $1=$sha1" - if grep -q "with downstreams" <<< $ghprbCommentBody - then - for downstream in ${downstreams[*]} - do - echo -e "\t [downstream] $downstream=${downstreamRev[$downstream]}" - done - fi - - echo "Configurations to process:" - for conf in ${!configurations[@]} - do - echo -e "\t$conf=${configurations[$conf]}" - done -} - -# $1 = Additional cmake parameters -# $2 = 0 to build and install module, 1 to build and test module -# $3 = Source root of module to build -function build_module { - CMAKE_PARAMS="$1" - DO_TEST_FLAG="$2" - MOD_SRC_DIR="$3" - cmake "$MOD_SRC_DIR" -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=$DO_TEST_FLAG -DCMAKE_TOOLCHAIN_FILE=${configurations[$configuration]} $CMAKE_PARAMS - test $? -eq 0 || exit 1 - if test $DO_TEST_FLAG -eq 1 - then - - pushd "$CWD" - cd "$MOD_SRC_DIR" - if test -x "./jenkins/pre-build.sh"; then - echo "Running pre-build script" - if ! "./jenkins/pre-build.sh"; then - exit 1 - fi - else - echo "No pre-build script detected" - fi - popd - - if [ ! -z $BUILDTHREADS ] - then - cmake --build . -- -j$BUILDTHREADS - else - cmake --build . - fi - test $? -eq 0 || exit 2 - TESTTHREADS=${TESTTHREADS:-1} - if test -z "$CTEST_CONFIGURATION" - then - ctest -T Test --no-compress-output -j$TESTTHREADS - else - ctest -j$TESTTHREADS -C $CTEST_CONFIGURATION --timeout 5000 -T Test --no-compress-output - fi - - # Convert to junit format - $WORKSPACE/deps/opm-common/jenkins/convert.py -x $WORKSPACE/deps/opm-common/jenkins/conv.xsl -t . > testoutput.xml - - if ! grep -q "with downstreams" <<< $ghprbCommentBody - then - # Add configuration name - sed -e "s/classname=\"TestSuite\"/classname=\"${configuration}\"/g" testoutput.xml > $WORKSPACE/$configuration/testoutput.xml - fi - else - if [ ! -z $BUILDTHREADS ] - then - cmake --build . --target install -- -j$BUILDTHREADS - else - cmake --build . --target install - fi - test $? -eq 0 || exit 3 - fi -} - -# $1 = Name of module -# $2 = git-rev to use for module -function clone_module { - # Already cloned by an earlier configuration - test -d $WORKSPACE/deps/$1 && return 0 - pushd . - mkdir -p $WORKSPACE/deps/$1 - cd $WORKSPACE/deps/$1 - git init . - git remote add origin https://github.com/OPM/$1 - git fetch --depth 1 origin $2:branch_to_build - git checkout branch_to_build - git log HEAD -1 | cat - test $? -eq 0 || exit 1 - popd -} - -# $1 = Module to clone -# $2 = Additional cmake parameters -# $3 = git-rev to use for module -# $4 = Build root -function clone_and_build_module { - clone_module $1 $3 - pushd . - mkdir -p $4/build-$1 - cd $4/build-$1 - test_build=0 - if test -n "$5" - then - test_build=$5 - fi - build_module "$2" $test_build $WORKSPACE/deps/$1 - test $? -eq 0 || exit 1 - popd -} - -# Uses pre-filled arrays upstreams, and associativ array upstreamRev -# which holds the revisions to use for upstreams. -function build_upstreams { - for upstream in ${upstreams[*]} - do - echo "Building upstream $upstream=${upstreamRev[$upstream]} configuration=$configuration" - # Build upstream and execute installation - clone_and_build_module $upstream "-DCMAKE_PREFIX_PATH=$WORKSPACE/$configuration/install -DCMAKE_INSTALL_PREFIX=$WORKSPACE/$configuration/install ${EXTRA_MODULE_FLAGS[$upstream]}" ${upstreamRev[$upstream]} $WORKSPACE/$configuration - test $? -eq 0 || exit 1 - done - test $? -eq 0 || exit 1 -} - -# $1 - name of the module we are called from -# Uses pre-filled arrays downstreams, and associativ array downstreamRev -# which holds the default revisions to use for downstreams -function build_downstreams { - egrep_cmd="xml_grep --wrap testsuites --cond testsuite $WORKSPACE/$configuration/build-$1/testoutput.xml" - for downstream in ${downstreams[*]} - do - echo "Building downstream $downstream=${downstreamRev[$downstream]} configuration=$configuration" - # Build downstream and execute installation - clone_and_build_module $downstream "-DCMAKE_PREFIX_PATH=$WORKSPACE/$configuration/install -DCMAKE_INSTALL_PREFIX=$WORKSPACE/$configuration/install -DOPM_TESTS_ROOT=$OPM_TESTS_ROOT ${EXTRA_MODULE_FLAGS[$downstream]}" ${downstreamRev[$downstream]} $WORKSPACE/$configuration 1 - test $? -eq 0 || exit 1 - - # Installation for downstream - pushd . - cd $WORKSPACE/$configuration/build-$downstream - - if [ ! -z $BUILDTHREADS ] - then - cmake --build . --target install -- -j$BUILDTHREADS - else - cmake --build . --target install - fi - popd - egrep_cmd="$egrep_cmd $WORKSPACE/$configuration/build-$downstream/testoutput.xml" - done - - $egrep_cmd > $WORKSPACE/$configuration/testoutput.xml - - # Add testsuite name - sed -e "s/classname=\"TestSuite\"/classname=\"${configuration}\"/g" -i $WORKSPACE/$configuration/testoutput.xml - - test $? -eq 0 || exit 1 -} - -# $1 = Name of main module -function build_module_full { - for configuration in ${!configurations[@]} - do - # Build upstream modules - build_upstreams - - # Build main module - pushd . - mkdir -p $configuration/build-$1 - cd $configuration/build-$1 - echo "Building main module $1=$sha1 configuration=$configuration" - build_module "-DCMAKE_INSTALL_PREFIX=$WORKSPACE/$configuration/install -DOPM_TESTS_ROOT=$OPM_TESTS_ROOT ${EXTRA_MODULE_FLAGS[$1]}" 1 $WORKSPACE - test $? -eq 0 || exit 1 - cmake --build . --target install - test $? -eq 0 || exit 1 - popd - - # If no downstream builds we are done - if grep -q "with downstreams" <<< $ghprbCommentBody - then - build_downstreams $1 - test $? -eq 0 || exit 1 - fi - done -} diff --git a/ThirdParty/custom-opm-common/opm-common/jenkins/build.sh b/ThirdParty/custom-opm-common/opm-common/jenkins/build.sh deleted file mode 100644 index e74e160397..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/jenkins/build.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/bin/bash - -source `dirname $0`/build-opm-module.sh - -# Create symlink so build_module can find the test result converter -mkdir deps -ln -sf $WORKSPACE deps/opm-common - -# No upstreams -declare -a upstreams -declare -A upstreamRev - -# Downstreams and revisions -declare -a downstreams -downstreams=(opm-material - opm-grid - opm-models - opm-simulators - opm-upscaling - ) - -declare -A downstreamRev -downstreamRev[opm-material]=master -downstreamRev[opm-grid]=master -downstreamRev[opm-models]=master -downstreamRev[opm-simulators]=master -downstreamRev[opm-upscaling]=master - -parseRevisions -printHeader opm-common - -# Setup opm-data -source $WORKSPACE/deps/opm-common/jenkins/setup-opm-tests.sh - -build_module_full opm-common diff --git a/ThirdParty/custom-opm-common/opm-common/jenkins/conv.xsl b/ThirdParty/custom-opm-common/opm-common/jenkins/conv.xsl deleted file mode 100644 index 2691e08ce5..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/jenkins/conv.xsl +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - BuildName: - BuildStamp: - Name: - Generator: - CompilerName: - OSName: - Hostname: - OSRelease: - OSVersion: - OSPlatform: - Is64Bits: - VendorString: - VendorID: - FamilyID: - ModelID: - ProcessorCacheSize: - NumberOfLogicalCPU: - NumberOfPhysicalCPU: - TotalVirtualMemory: - TotalPhysicalMemory: - LogicalProcessorsPerPhysical: - ProcessorClockFrequency: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/ThirdParty/custom-opm-common/opm-common/jenkins/convert.py b/ThirdParty/custom-opm-common/opm-common/jenkins/convert.py deleted file mode 100644 index c390c33eec..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/jenkins/convert.py +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env python -# coding: utf-8 -# originally from: -# http://www.warp1337.com/content/how-use-ctest-jenkins-xunit-or-junit-plugin -# improved by: -# Jorge Araya Navarro - -# Veni, Sancte Spiritus. - -from lxml import etree -import argparse -from os.path import expanduser -from os.path import join -import logging - -# configure logging -logging.basicConfig(format="%(levelname)s: %(message)s", - level=logging.ERROR) - -desc = ("Converts ctest XML file to xUnit/JUnit XML " - "compatible file to use with Jenkins-CI. " - "Did you found any bug? please report it on: " - "https://bitbucket.org/shackra/ctest-jenkins/issues") - -# configure argument parser. -parser = argparse.ArgumentParser(description=desc) -parser.add_argument("-x", "--xslt", help="the XSLT file to use", required=True) -parser.add_argument("-t", "--tag", help=("the directory where 'Testing/TAG'" - "file is. Remember to call ctest with" - " '-T test' option to generate it"), - required=True) - -parsed = parser.parse_args() -# expanding user symbol "~" -parsed.xsl = expanduser(parsed.xslt) -parsed.tag = expanduser(parsed.tag) - -# opening the TAG file -directory = None -try: - with open(join(parsed.tag, "Testing", "TAG")) as tagfile: - directory = tagfile.readline().strip() - -except NotADirectoryError: - logging.error( - "'Testing/TAG' wasn't found on directory '{}'.".format(parsed.tag)) - exit(1) -except FileNotFoundError: - logging.error( - "File '{}' not found.".format(join(parsed.tag, "Testing", "TAG"))) - exit(1) - -xmldoc = None -transform = None -try: - with open(join(parsed.tag, "Testing", directory, "Test.xml"))\ - as testxmlfile: - xmldoc = etree.parse(testxmlfile) - -except FileNotFoundError: - logging.error("File {} not found. Was it deleted or moved?".format( - join(parsed.tag, "Testing", directory, "Test.xml"))) - exit(1) - -try: - with open(parsed.xslt) as xsltfile: - xslt_root = etree.XML(xsltfile.read()) - transform = etree.XSLT(xslt_root) -except FileNotFoundError: - logging.error("File {} not found.".format(parsed.xslt)) - exit(1) - -result_tree = transform(xmldoc) -print(result_tree) diff --git a/ThirdParty/custom-opm-common/opm-common/jenkins/setup-opm-tests.sh b/ThirdParty/custom-opm-common/opm-common/jenkins/setup-opm-tests.sh deleted file mode 100644 index 3875788206..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/jenkins/setup-opm-tests.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/bash - -# Predefined by environment -if test -z "$OPM_TESTS_ROOT" -then - OPM_TESTS_REVISION="master" - if grep -q "opm-tests=" <<< $ghprbCommentBody - then - OPM_TESTS_REVISION=pull/`echo $ghprbCommentBody | sed -r 's/.*opm-tests=([0-9]+).*/\1/g'`/merge - fi - # Not specified in trigger, use shared copy - if [[ "$OPM_TESTS_REVISION" = "master" ]] && [[ ! "$OPM_TESTS_ROOT_PREDEFINED" = "" ]] - then - if ! test -d $WORKSPACE/deps/opm-tests - then - cp $OPM_TESTS_ROOT_PREDEFINED $WORKSPACE/deps/opm-tests -R - fi - else - # We need a full repo checkout - cp $OPM_TESTS_ROOT_PREDEFINED $WORKSPACE/deps/opm-tests -R - pushd $WORKSPACE/deps/opm-tests - # Then we fetch the PR branch - git remote add PR https://github.com/OPM/opm-tests - git fetch --depth 1 PR $OPM_TESTS_REVISION:branch_to_build - git checkout branch_to_build - popd - fi -else - if ! test -d $WORKSPACE/deps/opm-tests - then - cp $OPM_TESTS_ROOT $WORKSPACE/deps/opm-tests -R - fi -fi -OPM_TESTS_ROOT=$WORKSPACE/deps/opm-tests diff --git a/ThirdParty/custom-opm-common/opm-common/jenkins/update-opm-tests.sh b/ThirdParty/custom-opm-common/opm-common/jenkins/update-opm-tests.sh deleted file mode 100644 index 87eac7c6fe..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/jenkins/update-opm-tests.sh +++ /dev/null @@ -1,96 +0,0 @@ -#!/bin/bash - -MAIN_REPO=$1 # The repo the update was triggered from - -source $WORKSPACE/deps/opm-common/jenkins/build-opm-module.sh - -declare -a upstreams # Everything is considered an upstream to aid code reuse -upstreams=(libecl - opm-common - opm-material - opm-grid - opm-models - opm-simulators - opm-upscaling - ) - -declare -A upstreamRev -upstreamRev[libecl]=master -upstreamRev[opm-common]=master -upstreamRev[opm-material]=master -upstreamRev[opm-grid]=master -upstreamRev[opm-models]=master -upstreamRev[opm-simulators]=master -upstreamRev[opm-upscaling]=master - -# Setup revision tables -parseRevisions -upstreamRev[$MAIN_REPO]=$sha1 - -# Create branch name -BRANCH_NAME="update" -for repo in ${upstreams[*]} -do - if [ "${upstreamRev[$repo]}" != "master" ] - then - rev=${upstreamRev[$repo]} - prnumber=${rev//[!0-9]/} - BRANCH_NAME="${BRANCH_NAME}_${repo}_$prnumber" - test -n "$REASON" && REASON+=" " - REASON+="https://github.com/OPM/$repo/pull/$prnumber\n" - fi -done - -# Do the commit -export REASON -export BRANCH_NAME -$WORKSPACE/deps/opm-simulators/tests/update_reference_data.sh $OPM_TESTS_ROOT -if test $? -eq 5 -then - echo "No tests failed - no data to update. Exiting" - exit 0 -fi - -# Finally open the pull request -cd $OPM_TESTS_ROOT -git remote add jenkins4opm git@github.com:jenkins4opm/opm-tests - -# Do some cleaning of old remote branches -# Easier code with git 2.7+ -#BRANCHES=`git branch --sort=committerdate -r | grep jenkins4opm` -#NBRANCHES=`git branch --sort=committerdate -r | grep jenkins4opm | wc -l` -git fetch jenkins4opm # Sadly necessary with older git -BRANCHES=`git for-each-ref --sort=committerdate refs/remotes/jenkins4opm/ --format='%(refname:short)'` -NBRANCHES=`git for-each-ref --sort=committerdate refs/remotes/jenkins4opm/ --format='%(refname:short)' | wc -l` -if test $NBRANCHES -gt 30 -then - for BRANCH in $BRANCHES - do - BNAME=`echo $BRANCH | cut -f1 -d '/' --complement` - if [ "$BNAME" != "HEAD" ] - then - git push jenkins4opm :$BNAME - fi - NBRANCHES=$((NBRANCHES-1)) - if test $NBRANCHES -lt 30 - then - break - fi - done -fi - -if [ -n "`echo $BRANCHES | tr ' ' '\n' | grep ^jenkins4opm/$BRANCH_NAME$`" ] -then - GH_TOKEN=`git config --get gitOpenPull.Token` - REV=${upstreamRev[$MAIN_REPO]} - PRNUMBER=${rev//[!0-9]/} - DATA_PR=`curl -X GET https://api.github.com/repos/OPM/opm-tests/pulls?head=jenkins4opm:$BRANCH_NAME | grep '"number":' | awk -F ':' '{print $2}' | sed -e 's/,//' -e 's/ //'` - git push -u jenkins4opm $BRANCH_NAME -f -fi - -if [ -n "$DATA_PR" ] -then - curl -d "{ \"body\": \"Existing PR https://github.com/OPM/opm-tests/pull/$DATA_PR was updated\" }" -X POST https://api.github.com/repos/OPM/$MAIN_REPO/issues/$PRNUMBER/comments?access_token=$GH_TOKEN -else - git-open-pull -u jenkins4opm --base-account OPM --base-repo opm-tests -r /tmp/cmsg $BRANCH_NAME -fi diff --git a/ThirdParty/custom-opm-common/opm-common/msim/include/opm/msim/msim.hpp b/ThirdParty/custom-opm-common/opm-common/msim/include/opm/msim/msim.hpp deleted file mode 100644 index 0b5370b33b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/msim/include/opm/msim/msim.hpp +++ /dev/null @@ -1,52 +0,0 @@ -#ifndef ISIM_MAIN_HPP -#define ISIM_MAIN_HPP - -#include -#include -#include - -#include -#include -#include -#include -#include -#include - -#include -#include - - -namespace Opm { - -class EclipseIO; -class ParseContext; -class Parser; -class Python; -class SummaryState; -class msim { - -public: - using well_rate_function = double(const EclipseState&, const Schedule&, const SummaryState& st, const data::Solution&, size_t report_step, double seconds_elapsed); - using solution_function = void(const EclipseState&, const Schedule&, data::Solution&, size_t report_step, double seconds_elapsed); - - msim(const EclipseState& state); - - void well_rate(const std::string& well, data::Rates::opt rate, std::function func); - void solution(const std::string& field, std::function func); - void run(Schedule& schedule, EclipseIO& io, bool report_only); - void post_step(Schedule& schedule, SummaryState& st, data::Solution& sol, data::Wells& well_data, size_t report_step); -private: - - void run_step(const Schedule& schedule, SummaryState& st, data::Solution& sol, data::Wells& well_data, size_t report_step, EclipseIO& io) const; - void run_step(const Schedule& schedule, SummaryState& st, data::Solution& sol, data::Wells& well_data, size_t report_step, double dt, EclipseIO& io) const; - void output(SummaryState& st, size_t report_step, bool substep, double seconds_elapsed, const data::Solution& sol, const data::Wells& well_data, EclipseIO& io) const; - void simulate(const Schedule& schedule, const SummaryState& st, data::Solution& sol, data::Wells& well_data, size_t report_step, double seconds_elapsed, double time_step) const; - - EclipseState state; - std::map>> well_rates; - std::map> solutions; -}; -} - - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/msim/src/msim.cpp b/ThirdParty/custom-opm-common/opm-common/msim/src/msim.cpp deleted file mode 100644 index 04ca9f1d58..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/msim/src/msim.cpp +++ /dev/null @@ -1,177 +0,0 @@ -/* - Copyright 2018 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include - -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include - -namespace Opm { - -msim::msim(const EclipseState& state_arg) : - state(state_arg) -{} - -void msim::run(Schedule& schedule, EclipseIO& io, bool report_only) { - const double week = 7 * 86400; - data::Solution sol; - SummaryState st(std::chrono::system_clock::from_time_t(schedule.getStartTime())); - Python python; - - io.writeInitial(); - for (size_t report_step = 1; report_step < schedule.size(); report_step++) { - data::Wells well_data; - if (report_only) - run_step(schedule, st, sol, well_data, report_step, io); - else { - double time_step = std::min(week, 0.5*schedule.stepLength(report_step - 1)); - run_step(schedule, st, sol, well_data, report_step, time_step, io); - } - post_step(schedule, st, sol, well_data, report_step); - const auto& exit_status = schedule.exitStatus(); - if (exit_status.has_value()) - return; - } -} - - -void msim::post_step(Schedule& schedule, SummaryState& st, data::Solution& /* sol */, data::Wells& /* well_data */, size_t report_step) { - const auto& actions = schedule.actions(report_step); - if (actions.empty()) - return; - - Action::Context context( st ); - - auto sim_time = schedule.simTime(report_step); - for (const auto& action : actions.pending(sim_time)) { - auto result = action->eval(sim_time, context); - if (result) - schedule.applyAction(report_step, *action, result); - } - - for (const auto& pyaction : actions.pending_python()) - pyaction->run(this->state, schedule, report_step, st); -} - - - -void msim::run_step(const Schedule& schedule, SummaryState& st, data::Solution& sol, data::Wells& well_data, size_t report_step, EclipseIO& io) const { - this->run_step(schedule, st, sol, well_data, report_step, schedule.stepLength(report_step - 1), io); -} - - -void msim::run_step(const Schedule& schedule, SummaryState& st, data::Solution& sol, data::Wells& well_data, size_t report_step, double dt, EclipseIO& io) const { - double start_time = schedule.seconds(report_step - 1); - double end_time = schedule.seconds(report_step); - double seconds_elapsed = start_time; - - while (seconds_elapsed < end_time) { - double time_step = dt; - if ((seconds_elapsed + time_step) > end_time) - time_step = end_time - seconds_elapsed; - - this->simulate(schedule, st, sol, well_data, report_step, seconds_elapsed, time_step); - - Opm::data::Group group_data; - - seconds_elapsed += time_step; - - io.summary().eval(st, - report_step, - seconds_elapsed, - this->state, - schedule, - well_data, - group_data, - {}); - - this->output(st, - report_step, - (seconds_elapsed < end_time), - seconds_elapsed, - sol, - well_data, - io); - } -} - - - -void msim::output(SummaryState& st, size_t report_step, bool substep, double seconds_elapsed, const data::Solution& sol, const data::Wells& well_data, EclipseIO& io) const { - RestartValue value(sol, well_data); - io.writeTimeStep(st, - report_step, - substep, - seconds_elapsed, - value); -} - - -void msim::simulate(const Schedule& schedule, const SummaryState& st, data::Solution& sol, data::Wells& well_data, size_t report_step, double seconds_elapsed, double time_step) const { - for (const auto& sol_pair : this->solutions) { - auto func = sol_pair.second; - func(this->state, schedule, sol, report_step, seconds_elapsed + time_step); - } - - for (const auto& well_pair : this->well_rates) { - const std::string& well_name = well_pair.first; - const auto& sched_well = schedule.getWell(well_name, report_step); - if (sched_well.getStatus() != Well::Status::OPEN) - continue; - - data::Well& well = well_data[well_name]; - for (const auto& rate_pair : well_pair.second) { - auto rate = rate_pair.first; - auto func = rate_pair.second; - - well.rates.set(rate, func(this->state, schedule, st, sol, report_step, seconds_elapsed + time_step)); - } - - // This is complete bogus; a temporary fix to pass an assert() in the - // the restart output. - well.connections.resize(100); - } -} - - -void msim::well_rate(const std::string& well, data::Rates::opt rate, std::function func) { - this->well_rates[well][rate] = func; -} - - -void msim::solution(const std::string& field, std::function func) { - this->solutions[field] = func; -} - - -} - - diff --git a/ThirdParty/custom-opm-common/opm-common/opm-common-prereqs.cmake b/ThirdParty/custom-opm-common/opm-common/opm-common-prereqs.cmake deleted file mode 100644 index 43015be9c6..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm-common-prereqs.cmake +++ /dev/null @@ -1,28 +0,0 @@ -# -*- mode: cmake; tab-width: 2; indent-tabs-mode: t; truncate-lines: t; compile-command: "cmake -Wdev" -*- -# vim: set filetype=cmake autoindent tabstop=2 shiftwidth=2 noexpandtab softtabstop=2 nowrap: - -# defines that must be present in config.h for our headers -set (opm-common_CONFIG_VAR - HAVE_OPENMP - ) - -# dependencies -set (opm-common_DEPS - # compile with C99 support if available - "C99" -) - -if(BUILD_TEST_FRAMEWORK) - list(APPEND opm-common_DEPS - # various runtime library enhancements - "Boost 1.44.0 COMPONENTS system unit_test_framework REQUIRED" - "OpenMP QUIET" - ) -else() - list(APPEND opm-common_DEPS - # various runtime library enhancements - "Boost 1.44.0 COMPONENTS system REQUIRED" - "OpenMP QUIET" - ) -endif() -find_package_deps(opm-common) diff --git a/ThirdParty/custom-opm-common/opm-common/opm/common/ErrorMacros.hpp b/ThirdParty/custom-opm-common/opm-common/opm/common/ErrorMacros.hpp deleted file mode 100644 index 56ded99cc7..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/common/ErrorMacros.hpp +++ /dev/null @@ -1,73 +0,0 @@ -/* - Copyright 2013 Andreas Lauser - Copyright 2009, 2010 SINTEF ICT, Applied Mathematics. - Copyright 2009, 2010 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ -#ifndef OPM_ERRORMACROS_HPP -#define OPM_ERRORMACROS_HPP - -#include - -#include -#include -#include -#include -#include - -// macros for reporting to stderr -#ifdef OPM_VERBOSE // Verbose mode -# include -# define OPM_REPORT do { std::cerr << "[" << __FILE__ << ":" << __LINE__ << "] " } while (false) -# define OPM_MESSAGE(x) do { OPM_REPORT; std::cerr << x << "\n"; } while (false) -# define OPM_MESSAGE_IF(cond, m) do {if(cond) OPM_MESSAGE(m);} while (false) -#else // non-verbose mode (default) -# define OPM_REPORT do {} while (false) -# define OPM_MESSAGE(x) do {} while (false) -# define OPM_MESSAGE_IF(cond, m) do {} while (false) -#endif - -// Macro to throw an exception. NOTE: For this macro to work, the -// exception class must exhibit a constructor with the signature -// (const std::string &message). Since this condition is not fulfilled -// for the std::exception, you should use this macro with some -// exception class derived from either std::logic_error or -// std::runtime_error. -// -// Usage: OPM_THROW(ExceptionClass, "Error message " << value); -#define OPM_THROW(Exception, message) \ - do { \ - std::ostringstream oss__; \ - oss__ << "[" << __FILE__ << ":" << __LINE__ << "] " << message; \ - Opm::OpmLog::error(oss__.str()); \ - throw Exception(oss__.str()); \ - } while (false) - -// Same as OPM_THROW, except for not making an OpmLog::error() call. -// -// Usage: OPM_THROW_NOLOG(ExceptionClass, "Error message " << value); -#define OPM_THROW_NOLOG(Exception, message) \ - do { \ - std::ostringstream oss__; \ - oss__ << "[" << __FILE__ << ":" << __LINE__ << "] " << message; \ - throw Exception(oss__.str()); \ - } while (false) - -// throw an exception if a condition is true -#define OPM_ERROR_IF(condition, message) do {if(condition){ OPM_THROW(std::logic_error, message);}} while(false) - -#endif // OPM_ERRORMACROS_HPP diff --git a/ThirdParty/custom-opm-common/opm-common/opm/common/Exceptions.hpp b/ThirdParty/custom-opm-common/opm-common/opm/common/Exceptions.hpp deleted file mode 100644 index 044a22d4a2..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/common/Exceptions.hpp +++ /dev/null @@ -1,70 +0,0 @@ -// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- -// vi: set et ts=4 sw=4 sts=4: -/***************************************************************************** - * Copyright (C) 2013 by Andreas Lauser * - * * - * This program is free software: you can redistribute it and/or modify * - * it under the terms of the GNU General Public License as published by * - * the Free Software Foundation, either version 2 of the License, or * - * (at your option) any later version. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program. If not, see . * - *****************************************************************************/ -/*! - * \file - * \brief Provides the OPM specific exception classes. - */ -#ifndef OPM_EXCEPTIONS_HPP -#define OPM_EXCEPTIONS_HPP - -#include - -// the OPM-specific exception classes -namespace Opm { -class NotImplemented : public std::logic_error -{ -public: - explicit NotImplemented(const std::string &message) - : std::logic_error(message) - {} -}; - -class NumericalProblem : public std::runtime_error -{ -public: - explicit NumericalProblem(const std::string &message) - : std::runtime_error(message) - {} -}; - -class MaterialLawProblem : public NumericalProblem -{ -public: - explicit MaterialLawProblem(const std::string &message) - : NumericalProblem(message) - {} -}; - -class LinearSolverProblem : public NumericalProblem -{ -public: - explicit LinearSolverProblem(const std::string &message) - : NumericalProblem(message) - {} -}; -class TooManyIterations : public NumericalProblem -{ -public: - explicit TooManyIterations(const std::string &message) - : NumericalProblem(message) - {} -}; -} - -#endif // OPM_EXCEPTIONS_HPP diff --git a/ThirdParty/custom-opm-common/opm-common/opm/common/OpmLog/CounterLog.hpp b/ThirdParty/custom-opm-common/opm-common/opm/common/OpmLog/CounterLog.hpp deleted file mode 100644 index 241f0dcdb5..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/common/OpmLog/CounterLog.hpp +++ /dev/null @@ -1,53 +0,0 @@ -/* - Copyright 2014 Andreas Lauser - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ -#ifndef OPM_COUNTERLOG_HPP -#define OPM_COUNTERLOG_HPP - -#include -#include -#include - -#include - -namespace Opm { -/*! - * \brief Provides a simple sytem for log message which are found by the - * Parser/Deck/EclipseState classes during processing the deck. - */ - class CounterLog : public LogBackend - { - public: - explicit CounterLog(int64_t messageMask); - CounterLog(); - - size_t numMessages(int64_t messageType) const; - - void clear(); - - protected: - void addMessageUnconditionally(int64_t messageFlag, - const std::string& message) override; - private: - std::map m_count; - }; - -} // namespace Opm - -#endif - diff --git a/ThirdParty/custom-opm-common/opm-common/opm/common/OpmLog/EclipsePRTLog.hpp b/ThirdParty/custom-opm-common/opm-common/opm/common/OpmLog/EclipsePRTLog.hpp deleted file mode 100644 index 677799efbb..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/common/OpmLog/EclipsePRTLog.hpp +++ /dev/null @@ -1,65 +0,0 @@ -/* - Copyright 2016 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef ECLIPSEPRTLOG_H -#define ECLIPSEPRTLOG_H - -#include -#include -#include - -namespace Opm { - -class EclipsePRTLog : public StreamLog { - -public: - using StreamLog::StreamLog; - - size_t numMessages(int64_t messageType) const; - - ~EclipsePRTLog(); - - /// \brief Construct a logger to the .PRT file - /// \param logFile The name of the logfile to use. - /// \param messageMask ???? - /// \param append If true then we append messages to the file. - /// Otherwise a new file is created. - /// \param print_summary If true print a summary to the PRT file. - EclipsePRTLog(const std::string& logFile , int64_t messageMask, - bool append, bool print_summary); - - /// \brief Construct a logger to the .PRT file - /// \param logFile The name of the logfile to use. - /// \param messageMask ???? - /// \param append If true then we append messages to the file. - /// Otherwise a new file is created. - /// \param print_summary If true print a summary to the PRT file. - EclipsePRTLog(std::ostream& os , int64_t messageMask, - bool print_summary); - -protected: - void addMessageUnconditionally(int64_t messageType, const std::string& message) override; - -private: - std::map m_count; - /// \brief Whether to print a summary to the log file. - bool print_summary_ = true; -}; -} -#endif // ECLIPSEPRTLOG_H diff --git a/ThirdParty/custom-opm-common/opm-common/opm/common/OpmLog/Location.hpp b/ThirdParty/custom-opm-common/opm-common/opm/common/OpmLog/Location.hpp deleted file mode 100644 index 030cb48289..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/common/OpmLog/Location.hpp +++ /dev/null @@ -1,60 +0,0 @@ -/* - Copyright 2015 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef LOCATION_HPP -#define LOCATION_HPP - -namespace Opm { - -class Location { -public: - std::string filename = ""; - std::size_t lineno = 0; - - Location() = default; - Location(std::string fname, std::size_t lno) : - filename(std::move(fname)), - lineno(lno) - {} - - static Location serializeObject() - { - Location result; - result.filename = "test"; - result.lineno = 1; - - return result; - } - - bool operator==(const Location& data) const { - return filename == data.filename && - lineno == data.lineno; - } - - template - void serializeOp(Serializer& serializer) - { - serializer(filename); - serializer(lineno); - } -}; - -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/common/OpmLog/LogBackend.hpp b/ThirdParty/custom-opm-common/opm-common/opm/common/OpmLog/LogBackend.hpp deleted file mode 100644 index e424f25b4b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/common/OpmLog/LogBackend.hpp +++ /dev/null @@ -1,86 +0,0 @@ -/* - Copyright 2015, 2016 Statoil ASA. - Copyright 2016 SINTEF ICT, Applied Mathematics. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - - -#ifndef OPM_LOGBACKEND_HPP -#define OPM_LOGBACKEND_HPP - -#include -#include -#include -#include -#include - -namespace Opm -{ - - /// Abstract interface class for log backends. - class LogBackend - { - public: - /// Construct with given message mask. - explicit LogBackend(int64_t mask); - - /// Virtual destructor to enable inheritance. - virtual ~LogBackend(); - - /// Configure how formatMessage() will modify message strings. - void setMessageFormatter(std::shared_ptr formatter); - - /// Configure how message tags will be used to limit messages. - void setMessageLimiter(std::shared_ptr limiter); - - /// Add a message to the backend if accepted by the message limiter. - void addMessage(int64_t messageFlag, const std::string& message); - - /// Add a tagged message to the backend if accepted by the message limiter. - void addTaggedMessage(int64_t messageFlag, - const std::string& messageTag, - const std::string& message); - - /// The message mask types are specified in the - /// Opm::Log::MessageType namespace, in file LogUtils.hpp. - int64_t getMask() const; - - protected: - /// This is the method subclasses should override. - /// - /// Typically a subclass may filter, change, and output - /// messages based on configuration and the messageFlag. - virtual void addMessageUnconditionally(int64_t messageFlag, - const std::string& message) = 0; - - /// Return decorated version of message depending on configureDecoration() arguments. - std::string formatMessage(int64_t messageFlag, const std::string& message); - - private: - /// Return true if all bits of messageFlag are also set in our mask, - /// and the message limiter returns a PrintMessage response. - bool includeMessage(int64_t messageFlag, const std::string& messageTag); - - int64_t m_mask; - std::shared_ptr m_formatter; - std::shared_ptr m_limiter; - }; - -} // namespace LogBackend - - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/common/OpmLog/LogUtil.hpp b/ThirdParty/custom-opm-common/opm-common/opm/common/OpmLog/LogUtil.hpp deleted file mode 100644 index 285e1ce170..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/common/OpmLog/LogUtil.hpp +++ /dev/null @@ -1,70 +0,0 @@ -/* - Copyright 2015 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef OPM_LOG_UTIL_HPP -#define OPM_LOG_UTIL_HPP - -#include -#include - -#include - -namespace Opm { - -namespace Log { - namespace MessageType { - const int64_t Debug = 1; /* Excessive information */ - const int64_t Note = 2; /* Information that should only go into print file.*/ - const int64_t Info = 4; /* Normal status information */ - const int64_t Warning = 8; /* Input anomaly - possible error */ - const int64_t Error = 16; /* Error in the input data - should probably exit. */ - const int64_t Problem = 32; /* Calculation problems - e.g. convergence failure. */ - const int64_t Bug = 64; /* An inconsistent state has been encountered in the simulator - should probably exit. */ - } - - const int64_t DefaultMessageTypes = MessageType::Debug + MessageType::Note + MessageType::Info + MessageType::Warning + MessageType::Error + MessageType::Problem + MessageType::Bug; - const int64_t NoDebugMessageTypes = MessageType::Info + MessageType::Note + MessageType::Warning + MessageType::Error + MessageType::Problem + MessageType::Bug; - const int64_t StdoutMessageTypes = MessageType::Info + MessageType::Warning + MessageType::Error + MessageType::Problem + MessageType::Bug; - - /// Terminal codes for ANSI/vt100 compatible terminals. - /// See for example http://ascii-table.com/ansi-escape-sequences.php - namespace AnsiTerminalColors { - const std::string none = "\033[0m"; - const std::string red = "\033[31m"; - const std::string red_strong = "\033[31;1m"; - const std::string yellow = "\033[33m"; - const std::string yellow_strong = "\033[33;1m"; - const std::string blue = "\033[34m"; - const std::string blue_strong = "\033[34;1m"; - const std::string magenta = "\033[35m"; - const std::string magenta_strong = "\033[35;1m"; - const std::string default_color = "\033[39m"; - } - - - bool isPower2(int64_t x); - std::string fileMessage(const Location& location, const std::string& msg); - std::string fileMessage(int64_t messageType , const Location& location , const std::string& msg); - std::string prefixMessage(int64_t messageType , const std::string& msg); - std::string colorCodeMessage(int64_t messageType , const std::string& msg); - -} -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/common/OpmLog/Logger.hpp b/ThirdParty/custom-opm-common/opm-common/opm/common/OpmLog/Logger.hpp deleted file mode 100644 index 341a4f4c57..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/common/OpmLog/Logger.hpp +++ /dev/null @@ -1,82 +0,0 @@ -/* - Copyright 2015 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef OPM_LOGGER_HPP -#define OPM_LOGGER_HPP - -#include -#include -#include -#include -#include - -namespace Opm { - - class LogBackend; - -class Logger { - -public: - Logger(); - void addMessage(int64_t messageType , const std::string& message) const; - void addTaggedMessage(int64_t messageType, const std::string& tag, const std::string& message) const; - - static bool enabledDefaultMessageType( int64_t messageType); - bool enabledMessageType( int64_t messageType) const; - void addMessageType( int64_t messageType , const std::string& prefix); - int64_t enabledMessageTypes() const; - - void addBackend(const std::string& name , std::shared_ptr backend); - bool hasBackend(const std::string& name); - bool removeBackend(const std::string& name); - void removeAllBackends(); - - template - std::shared_ptr getBackend(const std::string& name) const { - auto pair = m_backends.find( name ); - if (pair == m_backends.end()) - throw std::invalid_argument("Invalid backend name: " + name); - else - return std::static_pointer_cast(m_backends.find(name)->second); - } - - template - std::shared_ptr popBackend(const std::string& name) { - auto pair = m_backends.find( name ); - if (pair == m_backends.end()) - throw std::invalid_argument("Invalid backend name: " + name); - else { - std::shared_ptr backend = (*pair).second; - removeBackend( name ); - return std::static_pointer_cast(backend); - } - } - - -private: - void updateGlobalMask( int64_t mask ); - static bool enabledMessageType( int64_t enabledTypes , int64_t messageType); - - int64_t m_globalMask; - int64_t m_enabledTypes; - std::map > m_backends; -}; - -} -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/common/OpmLog/MessageFormatter.hpp b/ThirdParty/custom-opm-common/opm-common/opm/common/OpmLog/MessageFormatter.hpp deleted file mode 100644 index c5885a7b55..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/common/OpmLog/MessageFormatter.hpp +++ /dev/null @@ -1,95 +0,0 @@ -/* - Copyright 2016 SINTEF ICT, Applied Mathematics. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef OPM_MESSAGEFORMATTER_HEADER_INCLUDED -#define OPM_MESSAGEFORMATTER_HEADER_INCLUDED - -#include -#include - -namespace Opm -{ - - - /// Abstract interface for message formatting classes. - class MessageFormatterInterface - { - public: - /// Virtual destructor to enable inheritance. - virtual ~MessageFormatterInterface() = default; - /// Should return a possibly modified/decorated version of the - /// input string, the formatting applied depending on the - /// message_flag. - virtual std::string format(const int64_t message_flag, const std::string& message) = 0; - }; - - - - - - /// A simple formatter capable of adding message prefixes and colors. - class SimpleMessageFormatter : public MessageFormatterInterface - { - public: - /// Constructor controlling formatting to be applied. - SimpleMessageFormatter(const bool use_prefix, const bool use_color_coding) - : use_color_coding_(use_color_coding) - { - if (use_prefix) { - prefix_flag_ = Log::DefaultMessageTypes; - } - } - - - SimpleMessageFormatter(const int64_t prefix_flag, const bool use_color_coding) - : use_color_coding_(use_color_coding), - prefix_flag_(prefix_flag) - { - } - - - explicit SimpleMessageFormatter(const bool use_color_coding) - : use_color_coding_(use_color_coding) - { - prefix_flag_ = Log::MessageType::Warning + Log::MessageType::Error - + Log::MessageType::Problem + Log::MessageType::Bug; - } - /// Returns a copy of the input string with a flag-dependant - /// prefix (if use_prefix) and the entire message in a - /// flag-dependent color (if use_color_coding). - virtual std::string format(const int64_t message_flag, const std::string& message) override - { - std::string msg = message; - if (message_flag & prefix_flag_) { - msg = Log::prefixMessage(message_flag, msg); - } - if (use_color_coding_) { - msg = Log::colorCodeMessage(message_flag, msg); - } - return msg; - } - private: - bool use_color_coding_ = false; - int64_t prefix_flag_ = 0; - }; - - -} // namespace Opm - -#endif // OPM_MESSAGEFORMATTER_HEADER_INCLUDED diff --git a/ThirdParty/custom-opm-common/opm-common/opm/common/OpmLog/MessageLimiter.hpp b/ThirdParty/custom-opm-common/opm-common/opm/common/OpmLog/MessageLimiter.hpp deleted file mode 100644 index 27caa8e694..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/common/OpmLog/MessageLimiter.hpp +++ /dev/null @@ -1,189 +0,0 @@ -/* - Copyright 2016 SINTEF ICT, Applied Mathematics. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef OPM_MESSAGELIMITER_HEADER_INCLUDED -#define OPM_MESSAGELIMITER_HEADER_INCLUDED - -#include -#include -#include -#include -#include -#include - - -namespace Opm -{ - - - /// Handles limiting the number of messages with the same tag. - class MessageLimiter - { - public: - /// Used to indicate no message number limit. - enum { NoLimit = -1 }; - - /// Default constructor, no limit to the number of messages. - MessageLimiter() - : MessageLimiter(NoLimit) - { - } - - /// Construct with given limit to number of messages with the - /// same tag. - /// - /// Negative limits (including NoLimit) are interpreted as - /// NoLimit, but the default constructor is the preferred way - /// to obtain that behaviour. - explicit MessageLimiter(const int tag_limit) - : tag_limit_(tag_limit < 0 ? NoLimit : tag_limit), - category_limits_({{Log::MessageType::Debug, NoLimit}, - {Log::MessageType::Note, NoLimit}, - {Log::MessageType::Info, NoLimit}, - {Log::MessageType::Warning, NoLimit}, - {Log::MessageType::Error, NoLimit}, - {Log::MessageType::Problem, NoLimit}, - {Log::MessageType::Bug, NoLimit}}) - { - } - - MessageLimiter(const int tag_limit, const std::map& category_limits) - : tag_limit_(tag_limit < 0 ? NoLimit : tag_limit), - category_limits_(category_limits) - { - // Must ensure NoLimit for categories that are not - // explicitly specified in the input. - for (auto category : { Log::MessageType::Debug, - Log::MessageType::Note, - Log::MessageType::Info, - Log::MessageType::Warning, - Log::MessageType::Error, - Log::MessageType::Problem, - Log::MessageType::Bug }) { - if (category_limits_.find(category) == category_limits_.end()) { - category_limits_[category] = NoLimit; - } - } - } - - /// The tag message limit (same for all tags). - int tagMessageLimit() const - { - return tag_limit_; - } - - /// The category message limits. - const std::map& categoryMessageLimits() const - { - return category_limits_; - } - - /// The category message counts. - const std::map& categoryMessageCounts() const - { - return category_counts_; - } - - /// Used for handleMessageLimits() return type (see that - /// function). - enum class Response - { - PrintMessage, JustOverTagLimit, JustOverCategoryLimit, OverTagLimit, OverCategoryLimit - }; - - /// If (tag count == tag limit + 1) for the passed tag, respond JustOverTagLimit. - /// If (tag count > tag limit + 1), respond OverTagLimit. - /// If a tag is empty, there is no tag message limit or for that tag - /// (tag count <= tag limit), consider the category limits: - /// If (category count == category limit + 1) for the passed messageMask, respond JustOverCategoryLimit. - /// If (category count > category limit + 1), respond OverCategoryLimit. - /// If (category count <= category limit), or there is no limit for that category, respond PrintMessage. - Response handleMessageLimits(const std::string& tag, const int64_t messageMask) - { - Response res = Response::PrintMessage; - - // Deal with tag limits. - if (!tag.empty() && tag_limit_ != NoLimit) { - // See if tag already encountered. - auto it = tag_counts_.find(tag); - if (it != tag_counts_.end()) { - // Already encountered this tag. Increment its count. - const int count = ++it->second; - res = countBasedResponseTag(count); - } else { - // First encounter of this tag. Insert 1. - tag_counts_.insert({tag, 1}); - res = countBasedResponseTag(1); - } - } - - // If tag count reached the limit, the message is not counted - // towards the category limits. - if (res == Response::PrintMessage) { - // We are *not* above the tag limit, consider category limit. - const int count = ++category_counts_[messageMask]; - if (category_limits_[messageMask] != NoLimit) { - res = countBasedResponseCategory(count, messageMask); - } - } - - return res; - } - - private: - Response countBasedResponseTag(const int count) const - { - if (count <= tag_limit_) { - return Response::PrintMessage; - } else if (count == tag_limit_ + 1) { - return Response::JustOverTagLimit; - } else { - return Response::OverTagLimit; - } - } - - - Response countBasedResponseCategory(const int count, const int64_t messageMask) const - { - const int limit = category_limits_.at(messageMask); - if (count <= limit) { - return Response::PrintMessage; - } else if (count == limit + 1) { - return Response::JustOverCategoryLimit; - } else { - return Response::OverCategoryLimit; - } - } - - int tag_limit_; - std::unordered_map tag_counts_; - std::map category_limits_; - std::map category_counts_ = {{Log::MessageType::Note, 0}, - {Log::MessageType::Info, 0}, - {Log::MessageType::Warning, 0}, - {Log::MessageType::Error, 0}, - {Log::MessageType::Problem, 0}, - {Log::MessageType::Bug, 0}}; - }; - - - -} // namespace Opm - -#endif // OPM_MESSAGELIMITER_HEADER_INCLUDED diff --git a/ThirdParty/custom-opm-common/opm-common/opm/common/OpmLog/OpmLog.hpp b/ThirdParty/custom-opm-common/opm-common/opm/common/OpmLog/OpmLog.hpp deleted file mode 100644 index 7e373c7de3..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/common/OpmLog/OpmLog.hpp +++ /dev/null @@ -1,102 +0,0 @@ -/* - Copyright 2014 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef OPMLOG_HPP -#define OPMLOG_HPP - -#include -#include - -#include -#include - -namespace Opm { - - class LogBackend; - -/* - The OpmLog class is a fully static class which manages a proper - Logger instance. -*/ - - -class OpmLog { - -public: - static void addMessage(int64_t messageFlag , const std::string& message); - static void addTaggedMessage(int64_t messageFlag, const std::string& tag, const std::string& message); - - static void info(const std::string& message); - static void warning(const std::string& message); - static void error(const std::string& message); - static void problem(const std::string& message); - static void bug(const std::string& message); - static void debug(const std::string& message); - static void note(const std::string& message); - - static void info(const std::string& tag, const std::string& message); - static void warning(const std::string& tag, const std::string& message); - static void error(const std::string& tag, const std::string& message); - static void problem(const std::string& tag, const std::string& message); - static void bug(const std::string& tag, const std::string& message); - static void debug(const std::string& tag, const std::string& message); - static void note(const std::string& tag, const std::string& message); - - static bool hasBackend( const std::string& backendName ); - static void addBackend(const std::string& name , std::shared_ptr backend); - static bool removeBackend(const std::string& name); - static void removeAllBackends(); - static bool enabledMessageType( int64_t messageType ); - static void addMessageType( int64_t messageType , const std::string& prefix); - - /// Create a basic logging setup that will send all log messages to standard output. - /// - /// By default category prefixes will be printed (i.e. Error: or - /// Warning:), color coding will be used, and a maximum of 10 - /// messages with the same tag will be printed. These settings can - /// be controlled by the function parameters. - static void setupSimpleDefaultLogging(const bool use_prefix = true, - const bool use_color_coding = true, - const int message_limit = 10); - - template - static std::shared_ptr getBackend(const std::string& name) { - auto logger = getLogger(); - return logger->getBackend(name); - } - - template - static std::shared_ptr popBackend(const std::string& name) { - auto logger = getLogger(); - return logger->popBackend(name); - } - - -private: - static std::shared_ptr getLogger(); - static std::shared_ptr m_logger; -}; - - -} - - - - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/common/OpmLog/StreamLog.hpp b/ThirdParty/custom-opm-common/opm-common/opm/common/OpmLog/StreamLog.hpp deleted file mode 100644 index fe50d3494c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/common/OpmLog/StreamLog.hpp +++ /dev/null @@ -1,50 +0,0 @@ -/* - Copyright 2015 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef STREAMLOG_H -#define STREAMLOG_H - -#include -#include -#include - -#include - -namespace Opm { - -class StreamLog : public LogBackend { - -public: - StreamLog(const std::string& logFile , int64_t messageMask, bool append = false); - StreamLog(std::ostream& os , int64_t messageMask); - ~StreamLog(); - -protected: - virtual void addMessageUnconditionally(int64_t messageType, const std::string& message) override; - -private: - void close(); - - std::ofstream m_ofstream; - std::ostream * m_ostream; - bool m_streamOwner; -}; -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/common/OpmLog/TimerLog.hpp b/ThirdParty/custom-opm-common/opm-common/opm/common/OpmLog/TimerLog.hpp deleted file mode 100644 index cfabcd1a3c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/common/OpmLog/TimerLog.hpp +++ /dev/null @@ -1,61 +0,0 @@ -/* - Copyright 2014 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ -#ifndef OPM_TIMERLOG_HPP -#define OPM_TIMERLOG_HPP - -#include - -#include -#include -#include - -#include - -/* - This class is a simple demonstration of how the logging framework - can be used to create a simple very special case logging facility. -*/ - -namespace Opm { - -class TimerLog : public StreamLog { -public: - static const int64_t StartTimer = 4096; - static const int64_t StopTimer = 8192; - - explicit TimerLog(const std::string& logFile); - explicit TimerLog(std::ostream& os); - - void clear(); - ~TimerLog() {}; - -protected: - void addMessageUnconditionally(int64_t messageFlag, - const std::string& message) override; -private: - clock_t m_start; - std::ostringstream m_work; -}; - -typedef std::shared_ptr TimerLogPtr; -typedef std::shared_ptr TimerLogConstPtr; -} // namespace Opm - -#endif - diff --git a/ThirdParty/custom-opm-common/opm-common/opm/common/data/SimulationDataContainer.hpp b/ThirdParty/custom-opm-common/opm-common/opm/common/data/SimulationDataContainer.hpp deleted file mode 100644 index 45ddee3b49..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/common/data/SimulationDataContainer.hpp +++ /dev/null @@ -1,191 +0,0 @@ -/* - Copyright 2016 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#ifndef SIMULATION_DATA_CONTAINER_HPP -#define SIMULATION_DATA_CONTAINER_HPP - -#include -#include -#include -#include - -namespace Opm { - - - /// The SimulationDataContainer is a simple container to manage - /// simulation data. The container is instantiated with information - /// of how many cells, faces and phases are present in the - /// reservoirmodel. You can then add data to the container by using the - /// - /// registerCellData() - /// registerFaceData() - /// - /// functions. The container owns and manages the data, but - /// mutable references are returned with the getCellData() and - /// getFaceData() methods, and the content will typically be - /// modified by external scope. - class SimulationDataContainer - { - public: - /// Main constructor setting the sizes for the contained data - /// types. - /// \param num_cells number of elements in cell data vectors - /// \param num_faces number of elements in face data vectors - /// \param num_phases number of phases, the number of components - /// in any data vector must equal 1 or this - /// number (this behaviour and argument is deprecated). - SimulationDataContainer(size_t num_cells, size_t num_faces, size_t num_phases); - - /// Copy constructor. - /// Must be defined explicitly because class contains non-value objects - /// (the reference pointers pressure_ref_ etc.) that should not simply - /// be copied. - SimulationDataContainer(const SimulationDataContainer&); - - /// Copy assignment operator. - /// Must be defined explicitly because class contains non-value objects - /// (the reference pointers pressure_ref_ etc.) that should not simply - /// be copied. - SimulationDataContainer& operator=(const SimulationDataContainer&); - - /// Efficient O(1) swap. - void swap(SimulationDataContainer& other); - - size_t numPhases() const; - size_t numFaces() const; - size_t numCells() const; - - bool hasCellData( const std::string& name ) const; - - /// Will register a data vector of size numCells() * - /// components. - void registerCellData( const std::string& name , size_t components , double initialValue = 0.0 ); - std::vector& getCellData( const std::string& name ); - const std::vector& getCellData( const std::string& name ) const; - - bool hasFaceData( const std::string& name ) const; - void registerFaceData( const std::string& name , size_t components , double initialValue = 0.0 ); - std::vector& getFaceData( const std::string& name ); - const std::vector& getFaceData( const std::string& name ) const; - - /// Will return the number of components of the celldata with - /// name @name: - /// - /// numCellDataComponents( "PRESSURE" ) -> 1 - /// numCellDataComponents( "SATURATION" ) -> 3 - /// - /// for a three phase model. - size_t numCellDataComponents( const std::string& name ) const; - bool equal(const SimulationDataContainer& other) const; - - - /// Will set the values of component nr @component in the - /// field @key. All the cells in @cells will be set to the - /// values in @values. - void setCellDataComponent( const std::string& key , size_t component , const std::vector& cells , const std::vector& values); - - // Direct explicit field access for certain default fields. - // These methods are all deprecated, and will eventually be moved to - // concrete subclasses. - - std::vector& pressure (); - std::vector& temperature (); - std::vector& saturation (); - - std::vector& facepressure(); - std::vector& faceflux (); - - const std::vector& pressure () const; - const std::vector& temperature () const; - const std::vector& saturation () const; - - const std::vector& facepressure() const; - const std::vector& faceflux () const; - - const std::map>& cellData() const; - std::map>& cellData(); - - private: - void addDefaultFields(); - void setReferencePointers(); - - size_t m_num_cells; - size_t m_num_faces; - size_t m_num_phases; - - std::map< std::string , std::vector > m_cell_data; - std::map< std::string , std::vector > m_face_data; - - std::vector* pressure_ref_; - std::vector* temperature_ref_; - std::vector* saturation_ref_; - std::vector* facepressure_ref_; - std::vector* faceflux_ref_; - }; - - - // Inline implementations of the direct accessors required to guarantee - // performance. - - - inline std::vector& SimulationDataContainer::pressure( ) { - return *pressure_ref_; - } - - inline std::vector& SimulationDataContainer::temperature() { - return *temperature_ref_; - } - - inline std::vector& SimulationDataContainer::saturation() { - return *saturation_ref_; - } - - inline std::vector& SimulationDataContainer::facepressure() { - return *facepressure_ref_; - } - - inline std::vector& SimulationDataContainer::faceflux() { - return *faceflux_ref_; - } - - inline const std::vector& SimulationDataContainer::pressure( ) const { - return *pressure_ref_; - } - - inline const std::vector& SimulationDataContainer::temperature() const { - return *temperature_ref_; - } - - inline const std::vector& SimulationDataContainer::saturation() const { - return *saturation_ref_; - } - - inline const std::vector& SimulationDataContainer::facepressure() const { - return *facepressure_ref_; - } - - inline const std::vector& SimulationDataContainer::faceflux() const { - return *faceflux_ref_; - } - - - -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/common/utility/ActiveGridCells.hpp b/ThirdParty/custom-opm-common/opm-common/opm/common/utility/ActiveGridCells.hpp deleted file mode 100644 index 14aa4234d6..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/common/utility/ActiveGridCells.hpp +++ /dev/null @@ -1,79 +0,0 @@ -/* - Copyright 2019 Equinor ASA - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ -#ifndef ACTIVEGRIDCELLS_HPP -#define ACTIVEGRIDCELLS_HPP - -#include - -#include - -namespace Opm -{ - -/** - * \brief Simple class capturing active cells of a grid - * - */ -class ActiveGridCells - : public GridDims -{ -public: - /// \brief Constructs mapping of active cells. - /// \param xyz The cartesian dimensions of the grid - /// \param globalCell Pointer to first entry of contiguous - /// array mapping local index to cartesian one. - /// \param nc The number of cells of a grid. - ActiveGridCells(std::array xyz, - const int* globalCell, std::size_t nc); - - /// \brief Constructs mapping of active cells. - /// \param nx Number of cells in x - /// \param ny Number of cells in y - /// \param nz Number of cells in z - /// \param globalCell Pointer to first entry of contiguous - /// array mapping local index to cartesian one. - /// \param nc The number of cells of a grid. - ActiveGridCells(std::size_t nx, std::size_t ny, std::size_t nz, - const int* globalCell, std::size_t nc); - - bool cellActive(std::size_t i, std::size_t j, std::size_t k) const; - - bool cellActive(std::size_t cartesianIndex) const; - - std::vector actNum() const; - - /// \brief Get the local index of a cell - /// \param cartesianIndex The cartesian index of the cell - /// \return The local index or -1 if the cell is inactive - int localCell(std::size_t cartesianIndex) const; - - /// \brief Get the local index of a cell - /// \param i The index in the i direction - /// \param j The index in the j direction - /// \param k The index in the k direction - /// \return The local index or -1 if the cell is inactive - int localCell(std::size_t i, std::size_t j, std::size_t k) const; -protected: - /// \brief Maps the cartesian index to a compressed local index. - /// - /// nonactive cells are marked with -1. - std::vector localCell_; -}; -} // end namespace Opm -#endif // ACTIVEGRIDCELLS_HPP diff --git a/ThirdParty/custom-opm-common/opm-common/opm/common/utility/FileSystem.hpp b/ThirdParty/custom-opm-common/opm-common/opm/common/utility/FileSystem.hpp deleted file mode 100644 index 2d05dfa4ae..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/common/utility/FileSystem.hpp +++ /dev/null @@ -1,50 +0,0 @@ -/* - Copyright 2019 Equinor ASA - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ -#ifndef OPM_FILESYSTEM_HPP -#define OPM_FILESYSTEM_HPP - -#if !defined(_WIN32) && (__cplusplus < 201703L || \ - (defined(__GNUC__) && __GNUC__ < 8 && !defined(__clang__))) -#include -#else -#include -#endif - -#include - - -namespace Opm -{ -#if !defined(_WIN32) && (__cplusplus < 201703L || \ - (defined(__GNUC__) && __GNUC__ < 8 && !defined(__clang__))) - namespace filesystem = std::experimental::filesystem; - filesystem::path proximate(const filesystem::path& p, - const filesystem::path& base = filesystem::current_path()); -#else - namespace filesystem = std::filesystem; - using filesystem::proximate; -#endif - - // A poor man's filesystem::unique_path - std::string unique_path(const std::string& input); - -} // end namespace Opm - - -#endif // OPM_FILESYSTEM_HPP diff --git a/ThirdParty/custom-opm-common/opm-common/opm/common/utility/OpmInputError.hpp b/ThirdParty/custom-opm-common/opm-common/opm/common/utility/OpmInputError.hpp deleted file mode 100644 index 23182af45d..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/common/utility/OpmInputError.hpp +++ /dev/null @@ -1,121 +0,0 @@ -/* - Copyright 2020 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ -#ifndef OPM_ERROR_HPP -#define OPM_ERROR_HPP - -#include -#include -#include - -#include - -namespace Opm { - -/* - The OpmInputError is a custom exception class which can be used to signal - errors in input handling. The importance of the OpmInputError exception is - *not* the tecnical functionality it provides, but rather the convention - surrounding it, when and how it should be used. - - The OpmInputError should be used in situations which are "close to user - input", the root cause can either be incorrect user input or a bug/limitation - in opm. OpmInputError should only be used in situations where we have a good - understanding of the underlying issue, and can provide a good error message. - - The local error handling should be complete when the OpmInputError is - instantiated, it should not be caught and rethrown in order to e.g. add - additional context or log messages. In order to avoid inadvertendly catching - this exception in a catch all block. -*/ - - - -class OpmInputError : public std::exception { -public: - /* - The message string will be used as format string in the fmt::format() - function as, and optional {} markers can be used to inject keyword, - filename and linenumber into the final what() message. The placeholders - must use named arguments - - {keyword} -> loc.keyword - {file} -> loc.filename - {line} -> loc.lineno - - additionally, the message can contain any number of positional - arguments to add further context to the message. - - KeywordLocation loc("KW", "file.inc", 100); - OpmInputError("Error at line {line} in file {file} - keyword: {keyword} ignored", location); - OpmInputError("Error at line {line} in file {file} - keyword: {keyword} has invalid argument {}", invalid_argument); - */ - - template - OpmInputError(const std::string& reason, const KeywordLocation& location, const Args& ...furtherLocations) - : locations { location, furtherLocations... } - , m_what { - locations.size() == 1 - ? formatSingle(reason, locations[0]) - : formatMultiple(reason, locations) - } - { } - - /* - Allows for the initialisation of an OpmInputError from another exception. - - Usage: - - try { - . - . - . - } catch (const Opm::OpmInputError&) { - throw; - } catch (const std::exception& e) { - std::throw_with_nested(Opm::OpmInputError(e, location)); - } - */ - OpmInputError(const std::exception& error, const KeywordLocation& location) - : locations { location } - , m_what { formatException(error, locations[0]) } - { } - - const char * what() const throw() - { - return this->m_what.c_str(); - } - - - static std::string format(const std::string& msg_format, const KeywordLocation& loc); - -private: - // The location member is here for debugging; depending on the msg_fmt - // passed in the constructor we might not have captured all the information - // in the location argument passed to the constructor. - std::vector locations; - - std::string m_what; - - static std::string formatException(const std::exception& e, const KeywordLocation& loc); - static std::string formatSingle(const std::string& reason, const KeywordLocation&); - static std::string formatMultiple(const std::string& reason, const std::vector&); -}; - -} -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/common/utility/Serializer.hpp b/ThirdParty/custom-opm-common/opm-common/opm/common/utility/Serializer.hpp deleted file mode 100644 index 64b7b5e67f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/common/utility/Serializer.hpp +++ /dev/null @@ -1,136 +0,0 @@ -/* - Copyright 2020 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include -#include -#include -#include - -#ifndef OPM_SERIALIZER_HPP -#define OPM_SERIALIZER_HPP - -namespace Opm { -/* - This is a very basic serialization class used to support serialization of - small state objects from opm common. The main serialization code used in - opm/flow is initiated and controlled from the restart code, and therefor - slightly cumbersome to use for objects which should be serialized not as part - of the restart code. -*/ - - -class Serializer { -public: - Serializer() = default; - explicit Serializer(const std::vector& buffer_arg) : - buffer(buffer_arg) - {} - - - template - void put(const T& value) { - this->pack(std::addressof(value), sizeof(T)); - } - - template - void put(const T* ) { - throw std::logic_error("Serializer can not pack pointers"); - } - - template - T get() { - T value; - std::memcpy(&value, &this->buffer[this->read_pos], sizeof(T)); - this->read_pos += sizeof(T); - return value; - } - - template - void put_vector(const std::vector& values) { - this->put(values.size()); - this->pack(values.data(), values.size() * sizeof(T)); - } - - - - template - std::vector get_vector() { - std::size_t size = this->get(); - std::vector values(size); - for (std::size_t index=0; index < size; index++) - values[index] = this->get(); - - return values; - } - - template - void put_map(const std::unordered_map& values) { - this->put(values.size()); - for (const auto& value_pair : values) { - this->put(value_pair.first); - this->put(value_pair.second); - } - } - - template - std::unordered_map get_map() { - std::unordered_map values; - auto size = this->get(); - for (std::size_t index = 0; index < size; index++) { - auto key = this->get(); - auto value = this->get(); - values.insert( std::make_pair(key,value) ); - } - return values; - } - - - std::vector buffer; -private: - void pack(const void * ptr, std::size_t value_size) { - std::size_t write_pos = this->buffer.size(); - std::size_t new_size = write_pos + value_size; - this->buffer.resize( new_size ); - std::memcpy(&this->buffer[write_pos], ptr, value_size); - } - - std::size_t read_pos = 0; -}; - -template <> -void inline Serializer::put(const std::string& value) { - this->put(value.size()); - if (value.empty()) - return; - - this->pack(value.c_str(), value.size()); -} - -template<> -std::string inline Serializer::get() { - std::string::size_type length = this->get(); - if (length == 0) - return std::string{}; - - this->read_pos += length; - return {std::addressof(this->buffer[this->read_pos - length]), length}; -} - -} -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/common/utility/String.hpp b/ThirdParty/custom-opm-common/opm-common/opm/common/utility/String.hpp deleted file mode 100644 index f6f48af93e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/common/utility/String.hpp +++ /dev/null @@ -1,108 +0,0 @@ -#ifndef OPM_UTILITY_STRING_HPP -#define OPM_UTILITY_STRING_HPP - -#include -#include -#include -#include -#include - -namespace Opm { - -template< typename T, typename U > -U& uppercase( const T& src, U& dst ) { - const auto up = []( char c ) { return std::toupper( c ); }; - std::transform( std::begin( src ), std::end( src ), std::begin( dst ), up ); - return dst; -} - -template< typename T > -typename std::decay< T >::type uppercase( T&& x ) { - typename std::decay< T >::type t( std::forward< T >( x ) ); - return uppercase( t, t ); -} - -template -std::string ltrim_copy(const T& s) -{ - auto ret = std::string(s.c_str()); - - const auto start = ret.find_first_not_of(" \t\n\r\f\v"); - if (start == std::string::npos) - return ""; - - return ret.substr(start); -} - - -template -std::string rtrim_copy(const T& s) -{ - auto ret = std::string(s.c_str()); - - const auto end = ret.find_last_not_of(" \t\n\r\f\v"); - if (end == std::string::npos) - return ""; - - return ret.substr(0, end + 1); -} - -template -std::string trim_copy(const T& s) -{ - return ltrim_copy( rtrim_copy(s) ); -} - - -template -void replaceAll(T& data, const T& toSearch, const T& replace) -{ - // Get the first occurrence - size_t pos = data.find(toSearch); - - // Repeat till end is reached - while (pos != std::string::npos) - { - // Replace this occurrence of Sub String - data.replace(pos, toSearch.size(), replace); - // Get the next occurrence from the current position - pos = data.find(toSearch, pos + replace.size()); - } -} - - -inline std::vector split_string(const std::string& input, - char delimiter) -{ - std::vector result; - std::string token; - std::istringstream tokenStream(input); - while (std::getline(tokenStream, token, delimiter)) - result.push_back(token); - - return result; -} - - -inline std::vector split_string(const std::string& input, - const std::string& delimiters) -{ - std::vector result; - std::string::size_type start = 0; - while (start < input.size()) { - auto end = input.find_first_of(delimiters, start); - if (end == std::string::npos) { - result.push_back(input.substr(start)); - end = input.size() - 1; - } else if (end != start) - result.push_back(input.substr(start, end-start)); - - start = end + 1; - } - - return result; -} - -} - -#endif //OPM_UTILITY_STRING_HPP diff --git a/ThirdParty/custom-opm-common/opm-common/opm/common/utility/TimeService.hpp b/ThirdParty/custom-opm-common/opm-common/opm/common/utility/TimeService.hpp deleted file mode 100644 index dfbcb90f0d..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/common/utility/TimeService.hpp +++ /dev/null @@ -1,121 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media Project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef OPM_TIMESERVICE_HEADER_INCLUDED -#define OPM_TIMESERVICE_HEADER_INCLUDED - -#include -#include -#include -#include - - -namespace Opm { - - using time_point = std::chrono::time_point>>; - - namespace TimeService { - std::time_t to_time_t(const time_point& tp); - time_point from_time_t(std::time_t t); - time_point now(); - - std::time_t advance(const std::time_t tp, const double sec); - std::time_t makeUTCTime(std::tm timePoint); - const std::unordered_map& eclipseMonthIndices(); - bool valid_month(const std::string& month_name); - } - - class TimeStampUTC - { - public: - struct YMD { - int year{0}; - int month{0}; - int day{0}; - - bool operator==(const YMD& data) const - { - return year == data.year && - month == data.month && - day == data.day; - } - - template - void serializeOp(Serializer& serializer) - { - serializer(year); - serializer(month); - serializer(day); - } - }; - - TimeStampUTC() = default; - - explicit TimeStampUTC(const std::time_t tp); - explicit TimeStampUTC(const YMD& ymd); - TimeStampUTC(int year, int month, int day); - TimeStampUTC(const YMD& ymd, - int hour, - int minutes, - int seconds, - int usec); - - TimeStampUTC& operator=(const std::time_t tp); - bool operator==(const TimeStampUTC& data) const; - - TimeStampUTC& hour(const int h); - TimeStampUTC& minutes(const int m); - TimeStampUTC& seconds(const int s); - TimeStampUTC& microseconds(const int us); - - const YMD& ymd() const { return ymd_; } - int year() const { return this->ymd_.year; } - int month() const { return this->ymd_.month; } - int day() const { return this->ymd_.day; } - int hour() const { return this->hour_; } - int minutes() const { return this->minutes_; } - int seconds() const { return this->seconds_; } - int microseconds() const { return this->usec_; } - - template - void serializeOp(Serializer& serializer) - { - ymd_.serializeOp(serializer); - serializer(hour_); - serializer(minutes_); - serializer(seconds_); - serializer(usec_); - } - - private: - - YMD ymd_{}; - int hour_{0}; - int minutes_{0}; - int seconds_{0}; - int usec_{0}; - }; - - TimeStampUTC operator+(const TimeStampUTC& lhs, std::chrono::duration delta); - std::time_t asTimeT(const TimeStampUTC& tp); - std::time_t asLocalTimeT(const TimeStampUTC& tp); - -} // namespace Opm - -#endif // OPM_TIMESERVICE_HEADER_INCLUDED diff --git a/ThirdParty/custom-opm-common/opm-common/opm/common/utility/numeric/MonotCubicInterpolator.hpp b/ThirdParty/custom-opm-common/opm-common/opm/common/utility/numeric/MonotCubicInterpolator.hpp deleted file mode 100644 index 60b3febd15..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/common/utility/numeric/MonotCubicInterpolator.hpp +++ /dev/null @@ -1,583 +0,0 @@ -/* -*-C++-*- */ - -#ifndef _MONOTCUBICINTERPOLATOR_H -#define _MONOTCUBICINTERPOLATOR_H - -#include -#include -#include - -/* - MonotCubicInterpolator - Copyright (C) 2006 Statoil ASA - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 2 - of the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -*/ - -namespace Opm -{ - -/** - Class to represent a one-dimensional function f with single-valued - argument x. The function is represented by a table of function - values. Interpolation between table values is cubic and monotonicity - preserving if input values are monotonous. - - Outside x_min and x_max, the class will extrapolate using the - constant f(x_min) or f(x_max). - - Extra functionality: - - Can return (x_1+x_2)/2 where x_1 and x_2 are such that - abs(f(x_1) - f(x_2)) is maximized. This is used to determine where - one should calculate a new value for increased accuracy in the - current function - - Monotonicity preserving cubic interpolation algorithm is taken - from Fritsch and Carlson, "Monotone piecewise cubic interpolation", - SIAM J. Numer. Anal. 17, 238--246, no. 2, - - $Id$ - - Algorithm also described here: - http://en.wikipedia.org/wiki/Monotone_cubic_interpolation - - - @author HÃ¥vard Berland , December 2006 - @brief Represents one dimensional function f with single valued argument x that can be interpolated using monotone cubic interpolation - -*/ - -class MonotCubicInterpolator { - public: - - /** - @param datafilename A datafile with the x values and the corresponding f(x) values - - Accepts a filename as input and parses this file for - two-column floating point data, interpreting the data as - representing function values x and f(x). - - Ignores all lines not conforming to \\\\\\ - */ - explicit MonotCubicInterpolator(const std::string & datafilename) - { - if (!read(datafilename)) { - throw("Unable to constuct MonotCubicInterpolator from file.") ; - } ; - } - - - /** - @param datafilename A datafile with the x values and the corresponding f(x) values - - Accepts a filename as input and parses this file for - two-column floating point data, interpreting the data as - representing function values x and f(x). - - Ignores all lines not conforming to \\\\\\ - - All commas in the file will be treated as spaces when parsing. - - */ - - explicit MonotCubicInterpolator(const char* datafilename) - { - if (!read(std::string(datafilename))) { - throw("Unable to constuct MonotCubicInterpolator from file.") ; - } ; - } - - - /** - @param datafilename data file - @param XColumn x values - @param fColumn f values - - Accepts a filename as input, and parses the chosen columns in - that file. - */ - MonotCubicInterpolator(const char* datafilename, int xColumn, int fColumn) - { - if (!read(std::string(datafilename),xColumn,fColumn)) { - throw("Unable to constuct MonotCubicInterpolator from file.") ; - } ; - } - - /** - @param datafilename data file - @param XColumn x values - @param fColumn f values - - Accepts a filename as input, and parses the chosen columns in - that file. - */ - MonotCubicInterpolator(const std::string & datafilename, int xColumn, int fColumn) - { - if (!read(datafilename,xColumn,fColumn)) { - throw("Unable to constuct MonotCubicInterpolator from file.") ; - } ; - } - - /** - @param x vector of x values - @param f vector of corresponding f values - - Accepts two equal-length vectors as input for constructing - the interpolation object. First vector is the x-values, the - second vector is the function values - */ - MonotCubicInterpolator(const std::vector & x , - const std::vector & f); - - /** - No input, an empty function object is created. - - This object must be treated with care until - populated. - */ - MonotCubicInterpolator() { } - - - - /** - @param datafilename A datafile with the x values and the corresponding f(x) values - - Accepts a filename as input and parses this file for - two-column floating point data, interpreting the data as - representing function values x and f(x). - - returns true on success - - All commas in file will be treated as spaces when parsing - - Ignores all lines not conforming to \\\\\\ - */ - bool read(const std::string & datafilename) { - return read(datafilename,1,2) ; - } - - /** - @param datafilename data file - @param XColumn x values - @param fColumn f values - - Accepts a filename as input, and parses the chosen columns in - that file. - */ - bool read(const std::string & datafilename, int xColumn, int fColumn) ; - - - - /** - @param x x value - - Returns f(x) for given x (input). Interpolates (monotone cubic - or linearly) if necessary. - - Extrapolates using the constants f(x_min) or f(x_max) if - input x is outside (x_min, x_max) - - @return f(x) for a given x - */ - double operator () (double x) const { return evaluate(x) ; } - - /** - @param x x value - - Returns f(x) for given x (input). Interpolates (monotone cubic - or linearly) if necessary. - - Extrapolates using the constants f(x_min) or f(x_max) if - input x is outside (x_min, x_max) - - @return f(x) for a given x - */ - double evaluate(double x) const; - - /** - @param x x value - @param errorestimate_output - - Returns f(x) and an error estimate for given x (input). - - Interpolates (linearly) if necessary. - - Throws an exception if extrapolation would be necessary for - evaluation. We do not want to do extrapolation (yet). - - The error estimate for x1 < x < x2 is - (x2 - x1)^2/8 * f''(x) where f''(x) is evaluated using - the stencil (1 -2 1) using either (x0, x1, x2) or (x1, x2, x3); - - Throws an exception if the table contains only two x-values. - - NOT IMPLEMENTED YET! - */ - double evaluate(double x, double & errorestimate_output ) const ; - - /** - Minimum x-value, returns both x and f in a pair. - - @return minimum x value - @return f(minimum x value) - */ - std::pair getMinimumX() const { - // Easy since the data is sorted on x: - return *data.begin(); - } - - /** - Maximum x-value, returns both x and f in a pair. - - @return maximum x value - @return f(maximum x value) - */ - std::pair getMaximumX() const { - // Easy since the data is sorted on x: - return *data.rbegin(); - } - - /** - Maximum f-value, returns both x and f in a pair. - - @return x value corresponding to maximum f value - @return maximum f value - */ - std::pair getMaximumF() const ; - - /** - Minimum f-value, returns both x and f in a pair - - @return x value corresponding to minimal f value - @return minimum f value - */ - std::pair getMinimumF() const ; - - - /** - Provide a copy of the x-data as a vector - - Unspecified order, but corresponds to get_fVector. - - @return x values as a vector - */ - std::vector get_xVector() const ; - - /** - Provide a copy of tghe function data as a vector - - Unspecified order, but corresponds to get_xVector - - @return f values as a vector - - */ - std::vector get_fVector() const ; - - /** - @param factor Scaling constant - - Scale all the function value data by a constant - */ - void scaleData(double factor); - - /** - Determines if the current function-value-data is strictly - monotone. This is a utility function for outsiders if they want - to invert the data for example. - - @return True if f(x) is strictly monotone, else False - */ - bool isStrictlyMonotone() { - - /* Use cached value if it can be trusted */ - if (strictlyMonotoneCached) { - return strictlyMonotone; - } - else { - computeInternalFunctionData(); - return strictlyMonotone; - } - } - - /** - Determines if the current function-value-data is monotone. - - @return True if f(x) is monotone, else False - */ - bool isMonotone() const { - if (monotoneCached) { - return monotone; - } - else { - computeInternalFunctionData(); - return monotone; - } - } - /** - Determines if the current function-value-data is strictly - increasing. This is a utility function for outsiders if they want - to invert the data for example. - - @return True if f(x) is strictly increasing, else False - */ - bool isStrictlyIncreasing() { - - /* Use cached value if it can be trusted */ - if (strictlyMonotoneCached) { - return (strictlyMonotone && strictlyIncreasing); - } - else { - computeInternalFunctionData(); - return (strictlyMonotone && strictlyIncreasing); - } - } - - /** - Determines if the current function-value-data is monotone and increasing. - - @return True if f(x) is monotone and increasing, else False - */ - bool isMonotoneIncreasing() const { - if (monotoneCached) { - return (monotone && increasing); - } - else { - computeInternalFunctionData(); - return (monotone && increasing); - } - } - /** - Determines if the current function-value-data is strictly - decreasing. This is a utility function for outsiders if they want - to invert the data for example. - - @return True if f(x) is strictly decreasing, else False - */ - bool isStrictlyDecreasing() { - - /* Use cached value if it can be trusted */ - if (strictlyMonotoneCached) { - return (strictlyMonotone && strictlyDecreasing); - } - else { - computeInternalFunctionData(); - return (strictlyMonotone && strictlyDecreasing); - } - } - - /** - Determines if the current function-value-data is monotone and decreasing - - @return True if f(x) is monotone and decreasing, else False - */ - bool isMonotoneDecreasing() const { - if (monotoneCached) { - return (monotone && decreasing); - } - else { - computeInternalFunctionData(); - return (monotone && decreasing); - } - } - - - - /** - @param newx New x point - @param newf New f(x) point - - Adds a new datapoint to the function. - - This causes all the derivatives at all points of the functions - to be recomputed and then adjusted for monotone cubic - interpolation. If this function ever enters a critical part of - any code, the locality of the algorithm for monotone adjustment - must be exploited. - - */ - void addPair(double newx, double newf); - - /** - Returns an x-value that is believed to yield the best - improvement in global accuracy for the interpolation if - computed. - - Searches for the largest jump in f-values, and returns a x - value being the average of the two x-values representing the - f-value-jump. - - @return New x value beleived to yield the best improvement in global accuracy - @return Maximal difference - */ - std::pair getMissingX() const; - - /** - Constructs a string containing the data in a table - - @return a string containing the data in a table - */ - std::string toString() const; - - /** - @return Number of datapoint pairs in this object - */ - int getSize() const { - return data.size(); - } - - /** - Checks if the function curve is flat at the endpoints, chop off - endpoint data points if that is the case. - - The notion of "flat" is determined by the input parameter "epsilon" - Values whose difference are less than epsilon are regarded as equal. - - This is implemented to be able to obtain a strictly monotone - curve from a data set that is strictly monotone except at the - endpoints. - - Example: - The data points - (1,3), (2,3), (3,4), (4,5), (5,5), (6,5) - will become - (2,3), (3,4), (4,5) - - Assumes at least 3 datapoints. If less than three, this function is a noop. - */ - void chopFlatEndpoints(const double); - - /** - Wrapper function for chopFlatEndpoints(const double) - providing a default epsilon parameter - */ - void chopFlatEndpoints() { - chopFlatEndpoints(1e-14); - } - - /** - If function is monotone, but not strictly monotone, - this function will remove datapoints from intervals - with zero derivative so that the curve become - strictly monotone. - - Example - The data points - (1,2), (2,3), (3,4), (4,4), (5,5), (6,6) - will become - (1,2), (2,3), (3,4), (5,5), (6,6) - - Assumes at least two datapoints, if one or zero datapoint, this is a noop. - */ - void shrinkFlatAreas(const double); - - /** - Wrapper function for shrinkFlatAreas(const double) - providing a default epsilon parameter - */ - void shrinkFlatAreas() { - shrinkFlatAreas(1e-14); - } - - - -private: - - // Data structure to store x- and f-values - std::map data; - - // Data structure to store x- and d-values - mutable std::map ddata; - - - // Storage containers for precomputed interpolation data - // std::vector dvalues; // derivatives in Hermite interpolation. - - // Flag to determine whether the boolean strictlyMonotone can be - // trusted. - mutable bool strictlyMonotoneCached; - mutable bool monotoneCached; /* only monotone, not stricly montone */ - - mutable bool strictlyMonotone; - mutable bool monotone; - - // if strictlyMonotone is true (and can be trusted), the two next are meaningful - mutable bool strictlyDecreasing; - mutable bool strictlyIncreasing; - mutable bool decreasing; - mutable bool increasing; - - - /* Hermite basis functions, t \in [0,1] , - notation from: - http://en.wikipedia.org/w/index.php?title=Cubic_Hermite_spline&oldid=84495502 - */ - - double H00(double t) const { - return 2*t*t*t - 3*t*t + 1; - } - double H10(double t) const { - return t*t*t - 2*t*t + t; - } - double H01(double t) const { - return -2*t*t*t + 3*t*t; - } - double H11(double t) const { - return t*t*t - t*t; - } - - - void computeInternalFunctionData() const ; - - /** - Computes initial derivative values using centered (second order) difference - for internal datapoints, and one-sided derivative for endpoints - - The internal datastructure map ddata is populated by this method. - */ - - void computeSimpleDerivatives() const ; - - - /** - Adjusts the derivative values (ddata) so that we can guarantee that - the resulting piecewise Hermite polymial is monotone. This is - done according to the algorithm of Fritsch and Carlsson 1980, - see Section 4, especially the two last lines. - */ - void adjustDerivativesForMonotoneness() const ; - - /** - Checks if the coefficient alpha and beta is in - the region that guarantees monotoneness of the - derivative values they represent - - See Fritsch and Carlson 1980, Lemma 2, - alternatively Step 5 in Wikipedia's article - on Monotone cubic interpolation. - */ - bool isMonotoneCoeff(double alpha, double beta) const { - if ((alpha*alpha + beta*beta) <= 9) { - return true; - } else { - return false; - } - } - -}; - - -} // namespace Opm - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/common/utility/numeric/NonuniformTableLinear.hpp b/ThirdParty/custom-opm-common/opm-common/opm/common/utility/numeric/NonuniformTableLinear.hpp deleted file mode 100644 index 830f86190e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/common/utility/numeric/NonuniformTableLinear.hpp +++ /dev/null @@ -1,208 +0,0 @@ -/* - Copyright 2009, 2010, 2011, 2012 SINTEF ICT, Applied Mathematics. - Copyright 2009, 2010, 2011, 2012 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef OPM_NONUNIFORMTABLELINEAR_HEADER_INCLUDED -#define OPM_NONUNIFORMTABLELINEAR_HEADER_INCLUDED - -#include -#include -#include -#include - -#include -#include - - -namespace Opm -{ - - - /// @brief This class uses linear interpolation to compute the value - /// (and its derivative) of a function f sampled at possibly - /// nonuniform points. If values outside the domain are sought, - /// values will be extrapolated linearly. - /// @tparam T the range type of the function (should be an algebraic ring type) - template - class NonuniformTableLinear - { - public: - /// @brief Default constructor. - NonuniformTableLinear(); - - /// @brief Construct from vectors of x and y values. - /// @param x_values vector of domain values - /// @param y_values vector of corresponding range values. - template - NonuniformTableLinear(const XContainer& x_values, - const YContainer& y_values); - - /// @brief Get the domain. - /// @return the domain as a pair of doubles. - std::pair domain(); - - /// @brief Rescale the domain. - /// @param new_domain the new domain as a pair of doubles. - void rescaleDomain(std::pair new_domain); - - /// @brief Evaluate the value at x. - /// @param x a domain value - /// @return f(x) - double operator()(const double x) const; - - /// @brief Evaluate the derivative at x. - /// @param x a domain value - /// @return f'(x) - double derivative(const double x) const; - - /// @brief Evaluate the inverse at y. Requires T to be a double. - /// @param y a range value - /// @return f^{-1}(y) - double inverse(const double y) const; - - /// @brief Equality operator. - /// @param other another NonuniformTableLinear. - /// @return true if they are represented exactly alike. - bool operator==(const NonuniformTableLinear& other) const; - - protected: - std::vector x_values_; - std::vector y_values_; - mutable std::vector x_values_reversed_; - mutable std::vector y_values_reversed_; - }; - - - // A utility function - /// @brief Detect if a sequence is nondecreasing. - /// @tparam FI a forward iterator whose value type has operator< defined. - /// @param beg start of sequence - /// @param end one-beyond-end of sequence - /// @return false if there exists two consecutive values (v1, v2) in the sequence - /// for which v2 < v1, else returns true. - template - bool isNondecreasing(const FI beg, const FI end) - { - if (beg == end) return true; - FI it = beg; - ++it; - FI prev = beg; - for (; it != end; ++it, ++prev) { - if (*it < *prev) { - return false; - } - } - return true; - } - - - - // Member implementations. - - template - inline - NonuniformTableLinear - ::NonuniformTableLinear() - { - } - - - template - template - inline - NonuniformTableLinear - ::NonuniformTableLinear(const XContainer& x_column, - const YContainer& y_column) - : x_values_( x_column.begin() , x_column.end()), - y_values_( y_column.begin() , y_column.end()) - { - assert(isNondecreasing(x_values_.begin(), x_values_.end())); - } - - - template - inline std::pair - NonuniformTableLinear - ::domain() - { - return std::make_pair(x_values_[0], x_values_.back()); - } - - template - inline void - NonuniformTableLinear - ::rescaleDomain(std::pair new_domain) - { - const double a = x_values_[0]; - const double b = x_values_.back(); - const double c = new_domain.first; - const double d = new_domain.second; - // x in [a, b] -> x in [c, d] - for (int i = 0; i < int(x_values_.size()); ++i) { - x_values_[i] = (x_values_[i] - a)*(d - c)/(b - a) + c; - } - } - - template - inline double - NonuniformTableLinear - ::operator()(const double x) const - { - return Opm::linearInterpolation(x_values_, y_values_, x); - } - - template - inline double - NonuniformTableLinear - ::derivative(const double x) const - { - return Opm::linearInterpolationDerivative(x_values_, y_values_, x); - } - - template - inline double - NonuniformTableLinear - ::inverse(const double y) const - { - if (y_values_.front() < y_values_.back()) { - return Opm::linearInterpolation(y_values_, x_values_, y); - } else { - if (y_values_reversed_.empty()) { - y_values_reversed_ = y_values_; - std::reverse(y_values_reversed_.begin(), y_values_reversed_.end()); - assert(isNondecreasing(y_values_reversed_.begin(), y_values_reversed_.end())); - x_values_reversed_ = x_values_; - std::reverse(x_values_reversed_.begin(), x_values_reversed_.end()); - } - return Opm::linearInterpolation(y_values_reversed_, x_values_reversed_, y); - } - } - - template - inline bool - NonuniformTableLinear - ::operator==(const NonuniformTableLinear& other) const - { - return x_values_ == other.x_values_ - && y_values_ == other.y_values_; - } - -} // namespace Opm - -#endif // OPM_NONUNIFORMTABLELINEAR_HEADER_INCLUDED diff --git a/ThirdParty/custom-opm-common/opm-common/opm/common/utility/numeric/RootFinders.hpp b/ThirdParty/custom-opm-common/opm-common/opm/common/utility/numeric/RootFinders.hpp deleted file mode 100644 index de597307f9..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/common/utility/numeric/RootFinders.hpp +++ /dev/null @@ -1,450 +0,0 @@ -/* - Copyright 2010, 2019 SINTEF Digital - Copyright 2010, 2019 Equinor ASA - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef OPM_ROOTFINDERS_HEADER -#define OPM_ROOTFINDERS_HEADER - -#include -#include - -#include -#include -#include -#include -#include - -namespace Opm -{ - - struct ThrowOnError - { - static double handleBracketingFailure(const double x0, const double x1, const double f0, const double f1) - { - std::ostringstream sstr; - sstr << "Error in parameters, zero not bracketed: [a, b] = [" - << x0 << ", " << x1 << "] f(a) = " << f0 << " f(b) = " << f1; - OpmLog::debug(sstr.str()); - OPM_THROW_NOLOG(std::runtime_error, sstr.str()); - return -1e100; // Never reached. - } - static double handleTooManyIterations(const double x0, const double x1, const int maxiter) - { - OPM_THROW(std::runtime_error, "Maximum number of iterations exceeded: " << maxiter << "\n" - << "Current interval is [" << std::min(x0, x1) << ", " - << std::max(x0, x1) << "] abs(x0-x1) " << std::abs(x0-x1)); - return -1e100; // Never reached. - } - }; - - - struct WarnAndContinueOnError - { - static double handleBracketingFailure(const double x0, const double x1, const double f0, const double f1) - { - OPM_REPORT; - std::cerr << "Error in parameters, zero not bracketed: [a, b] = [" - << x0 << ", " << x1 << "] f(a) = " << f0 << " f(b) = " << f1 - << ""; - return std::fabs(f0) < std::fabs(f1) ? x0 : x1; - } - static double handleTooManyIterations(const double x0, const double x1, const int maxiter) - { - OPM_REPORT; - std::cerr << "Maximum number of iterations exceeded: " << maxiter - << ", current interval is [" << std::min(x0, x1) << ", " - << std::max(x0, x1) << "] abs(x0-x1) " << std::abs(x0-x1); - return 0.5*(x0 + x1); - } - }; - - - struct ContinueOnError - { - static double handleBracketingFailure(const double x0, const double x1, const double f0, const double f1) - { - return std::fabs(f0) < std::fabs(f1) ? x0 : x1; - } - static double handleTooManyIterations(const double x0, const double x1, const int /*maxiter*/) - { - return 0.5*(x0 + x1); - } - }; - - - - template - class RegulaFalsi - { - public: - - - /// Implements a modified regula falsi method as described in - /// "Improved algorithms of Illinois-type for the numerical - /// solution of nonlinear equations" - /// by J. A. Ford. - /// Current variant is the 'Pegasus' method. - template - inline static double solve(const Functor& f, - const double a, - const double b, - const int max_iter, - const double tolerance, - int& iterations_used) - { - using namespace std; - const double macheps = numeric_limits::epsilon(); - const double eps = tolerance + macheps*max(max(fabs(a), fabs(b)), 1.0); - - double x0 = a; - double x1 = b; - double f0 = f(x0); - const double epsF = tolerance + macheps*max(fabs(f0), 1.0); - if (fabs(f0) < epsF) { - return x0; - } - double f1 = f(x1); - if (fabs(f1) < epsF) { - return x1; - } - if (f0*f1 > 0.0) { - return ErrorPolicy::handleBracketingFailure(a, b, f0, f1); - } - iterations_used = 0; - // In every iteraton, x1 is the last point computed, - // and x0 is the last point computed that makes it a bracket. - while (fabs(x1 - x0) >= eps) { - double xnew = regulaFalsiStep(x0, x1, f0, f1); - double fnew = f(xnew); -// cout << "xnew = " << xnew << " fnew = " << fnew << endl; - ++iterations_used; - if (iterations_used > max_iter) { - return ErrorPolicy::handleTooManyIterations(x0, x1, max_iter); - } - if (fabs(fnew) < epsF) { - return xnew; - } - // Now we must check which point we must replace. - if ((fnew > 0.0) == (f0 > 0.0)) { - // We must replace x0. - x0 = x1; - f0 = f1; - } else { - // We must replace x1, this is the case where - // the modification to regula falsi kicks in, - // by modifying f0. - // 1. The classic Illinois method -// const double gamma = 0.5; - // @afr: The next two methods do not work??!!? - // 2. The method called 'Method 3' in the paper. -// const double phi0 = f1/f0; -// const double phi1 = fnew/f1; -// const double gamma = 1.0 - phi1/(1.0 - phi0); - // 3. The method called 'Method 4' in the paper. -// const double phi0 = f1/f0; -// const double phi1 = fnew/f1; -// const double gamma = 1.0 - phi0 - phi1; -// cout << "phi0 = " << phi0 <<" phi1 = " << phi1 << -// " gamma = " << gamma << endl; - // 4. The 'Pegasus' method - const double gamma = f1/(f1 + fnew); - f0 *= gamma; - } - x1 = xnew; - f1 = fnew; - } - return 0.5*(x0 + x1); - } - - - /// Implements a modified regula falsi method as described in - /// "Improved algorithms of Illinois-type for the numerical - /// solution of nonlinear equations" - /// by J. A. Ford. - /// Current variant is the 'Pegasus' method. - /// This version takes an extra parameter for the initial guess. - template - inline static double solve(const Functor& f, - const double initial_guess, - const double a, - const double b, - const int max_iter, - const double tolerance, - int& iterations_used) - { - using namespace std; - const double macheps = numeric_limits::epsilon(); - const double eps = tolerance + macheps*max(max(fabs(a), fabs(b)), 1.0); - - double f_initial = f(initial_guess); - const double epsF = tolerance + macheps*max(fabs(f_initial), 1.0); - if (fabs(f_initial) < epsF) { - return initial_guess; - } - double x0 = a; - double x1 = b; - double f0 = f_initial; - double f1 = f_initial; - if (x0 != initial_guess) { - f0 = f(x0); - if (fabs(f0) < epsF) { - return x0; - } - } - if (x1 != initial_guess) { - f1 = f(x1); - if (fabs(f1) < epsF) { - return x1; - } - } - if (f0*f_initial < 0.0) { - x1 = initial_guess; - f1 = f_initial; - } else { - x0 = initial_guess; - f0 = f_initial; - } - if (f0*f1 > 0.0) { - return ErrorPolicy::handleBracketingFailure(a, b, f0, f1); - } - iterations_used = 0; - // In every iteraton, x1 is the last point computed, - // and x0 is the last point computed that makes it a bracket. - while (fabs(x1 - x0) >= eps) { - double xnew = regulaFalsiStep(x0, x1, f0, f1); - double fnew = f(xnew); -// cout << "xnew = " << xnew << " fnew = " << fnew << endl; - ++iterations_used; - if (iterations_used > max_iter) { - return ErrorPolicy::handleTooManyIterations(x0, x1, max_iter); - } - if (fabs(fnew) < epsF) { - return xnew; - } - // Now we must check which point we must replace. - if ((fnew > 0.0) == (f0 > 0.0)) { - // We must replace x0. - x0 = x1; - f0 = f1; - } else { - // We must replace x1, this is the case where - // the modification to regula falsi kicks in, - // by modifying f0. - // 1. The classic Illinois method -// const double gamma = 0.5; - // @afr: The next two methods do not work??!!? - // 2. The method called 'Method 3' in the paper. -// const double phi0 = f1/f0; -// const double phi1 = fnew/f1; -// const double gamma = 1.0 - phi1/(1.0 - phi0); - // 3. The method called 'Method 4' in the paper. -// const double phi0 = f1/f0; -// const double phi1 = fnew/f1; -// const double gamma = 1.0 - phi0 - phi1; -// cout << "phi0 = " << phi0 <<" phi1 = " << phi1 << -// " gamma = " << gamma << endl; - // 4. The 'Pegasus' method - const double gamma = f1/(f1 + fnew); - f0 *= gamma; - } - x1 = xnew; - f1 = fnew; - } - return 0.5*(x0 + x1); - } - - - private: - inline static double regulaFalsiStep(const double a, - const double b, - const double fa, - const double fb) - { - assert(fa*fb < 0.0); - return (b*fa - a*fb)/(fa - fb); - } - - - }; - - - - template - class RegulaFalsiBisection - { - public: - inline static std::string name() - { - return "RegulaFalsiBisection"; - } - - /// Implements a modified regula falsi method as described in - /// "Improved algorithms of Illinois-type for the numerical - /// solution of nonlinear equations" - /// by J. A. Ford. Current variant is the 'Pegasus' method. - /// Combines this method with the bisection method, inspired by - /// http://phillipmfeldman.org/Python/roots/find_roots.html - template - inline static double solve(const Functor& f, - const double a, - const double b, - const int max_iter, - const double tolerance, - int& iterations_used) - { - using namespace std; - const double sqrt_half = std::sqrt(0.5); - const double macheps = numeric_limits::epsilon(); - const double eps = tolerance + macheps * max(max(fabs(a), fabs(b)), 1.0); - - double x0 = a; - double x1 = b; - double f0 = f(x0); - const double epsF = tolerance + macheps * max(fabs(f0), 1.0); - if (fabs(f0) < epsF) { - return x0; - } - double f1 = f(x1); - if (fabs(f1) < epsF) { - return x1; - } - if (f0 * f1 > 0.0) { - return ErrorPolicy::handleBracketingFailure(a, b, f0, f1); - } - iterations_used = 0; - // In every iteraton, x1 is the last point computed, - // and x0 is the last point computed that makes it a bracket. - double width = fabs(x1 - x0); - double contraction = 1.0; - while (width >= eps) { - // If we are contracting sufficiently to at least halve - // the interval width in two iterations we use regula - // falsi. Otherwise, we take a bisection step to avoid - // slow convergence. - const double xnew = (contraction < sqrt_half) - ? regulaFalsiStep(x0, x1, f0, f1) - : bisectionStep(x0, x1, f0, f1); - const double fnew = f(xnew); - ++iterations_used; - if (iterations_used > max_iter) { - return ErrorPolicy::handleTooManyIterations(x0, x1, max_iter); - } - if (fabs(fnew) < epsF) { - return xnew; - } - // Now we must check which point we must replace. - if ((fnew > 0.0) == (f0 > 0.0)) { - // We must replace x0. - x0 = x1; - f0 = f1; - } else { - // We must replace x1, this is the case where - // the modification to regula falsi kicks in, - // by modifying f0. - // 1. The classic Illinois method - // const double gamma = 0.5; - // @afr: The next two methods do not work??!!? - // 2. The method called 'Method 3' in the paper. - // const double phi0 = f1/f0; - // const double phi1 = fnew/f1; - // const double gamma = 1.0 - phi1/(1.0 - phi0); - // 3. The method called 'Method 4' in the paper. - // const double phi0 = f1/f0; - // const double phi1 = fnew/f1; - // const double gamma = 1.0 - phi0 - phi1; - // cout << "phi0 = " << phi0 <<" phi1 = " << phi1 << - // " gamma = " << gamma << endl; - // 4. The 'Pegasus' method - const double gamma = f1 / (f1 + fnew); - // 5. Straight unmodified Regula Falsi - // const double gamma = 1.0; - f0 *= gamma; - } - x1 = xnew; - f1 = fnew; - const double widthnew = fabs(x1 - x0); - contraction = widthnew/width; - width = widthnew; - } - return 0.5 * (x0 + x1); - } - - - private: - inline static double regulaFalsiStep(const double a, const double b, const double fa, const double fb) - { - assert(fa * fb < 0.0); - return (b * fa - a * fb) / (fa - fb); - } - inline static double bisectionStep(const double a, const double b, const double fa, const double fb) - { - static_cast(fa); - static_cast(fb); - assert(fa * fb < 0.0); - return 0.5*(a + b); - } - }; - - - - - - /// Attempts to find an interval bracketing a zero by successive - /// enlargement of search interval. - template - inline void bracketZero(const Functor& f, - const double x0, - const double dx, - double& a, - double& b) - { - const int max_iters = 100; - double f0 = f(x0); - double cur_dx = dx; - int i = 0; - for (; i < max_iters; ++i) { - double x = x0 + cur_dx; - double f_new = f(x); - if (f0*f_new <= 0.0) { - break; - } - cur_dx = -2.0*cur_dx; - } - if (i == max_iters) { - OPM_THROW(std::runtime_error, "Could not bracket zero in " << max_iters << "iterations."); - } - if (cur_dx < 0.0) { - a = x0 + cur_dx; - b = i < 2 ? x0 : x0 + 0.25*cur_dx; - } else { - a = i < 2 ? x0 : x0 + 0.25*cur_dx; - b = x0 + cur_dx; - } - } - - - - - -} // namespace Opm - - - - -#endif // OPM_ROOTFINDERS_HEADER diff --git a/ThirdParty/custom-opm-common/opm-common/opm/common/utility/numeric/SparseVector.hpp b/ThirdParty/custom-opm-common/opm-common/opm/common/utility/numeric/SparseVector.hpp deleted file mode 100644 index 610916abe1..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/common/utility/numeric/SparseVector.hpp +++ /dev/null @@ -1,198 +0,0 @@ -//=========================================================================== -// -// File: SparseVector.hpp -// -// Created: Mon Jun 29 15:28:59 2009 -// -// Author(s): Atgeirr F Rasmussen -// Bård Skaflestad -// -// $Date$ -// -// $Revision$ -// -//=========================================================================== - -/* - Copyright 2009, 2010 SINTEF ICT, Applied Mathematics. - Copyright 2009, 2010 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - - -#ifndef OPM_SPARSEVECTOR_HEADER -#define OPM_SPARSEVECTOR_HEADER - -#include -#include -#include -#include - -namespace Opm -{ - - /// A SparseVector stores a vector with possibly many empty elements - /// as efficiently as possible. - /// It is supposed to behave similarly to a standard vector, but since - /// direct indexing is a O(log n) operation instead of O(1), we do not - /// supply it as operator[]. - template - class SparseVector - { - public: - /// Default constructor. Yields an empty SparseVector. - SparseVector() - : size_(0), default_elem_() - { - } - - /// Constructs a SparseVector with a given size, but no nonzero - /// elements. - explicit SparseVector(int sz) - : size_(sz), default_elem_() - { - } - - /// A constructor taking all the element data for the vector and their indices. - /// \param data_beg The start of the element data. - /// \param data_end One-beyond-end of the element data. - /// \param rowsize_beg The start of the index data. - /// \param rowsize_end One beyond the end of the index data. - template - SparseVector(int sz, - DataIter data_beg, DataIter data_end, - IntegerIter index_beg, IntegerIter index_end) - : size_(sz), data_(data_beg, data_end), indices_(index_beg, index_end), - default_elem_() - { -#ifndef NDEBUG - OPM_ERROR_IF(sz < 0, "The size of a SparseVector must be non-negative"); - OPM_ERROR_IF(indices_.size() != data_.size(), "The number of indices of a SparseVector must equal to the number of entries"); - int last_index = -1; - int num_ind = indices_.size(); - for (int i = 0; i < num_ind; ++i) { - int index = indices_[i]; - if (index <= last_index || index >= sz) { - OPM_THROW(std::logic_error, "Error in SparseVector construction, index is nonincreasing or out of range."); - } - last_index = index; - } -#endif - } - - - /// Appends an element to the vector. Note that this function does not - /// increase the size() of the vector, it just adds another nonzero element. - /// Elements must be added in index order. - void addElement(const T& elem, int index) - { - assert(indices_.empty() || index > indices_.back()); - assert(index < size_); - data_.push_back(elem); - indices_.push_back(index); - } - - /// \return true if the vector has size 0. - bool empty() const - { - return size_ == 0; - } - - /// Returns the size of the vector. - /// Recall that most or all of the vector may be default/zero. - int size() const - { - return size_; - } - - /// Returns the number of nonzero data elements. - int nonzeroSize() const - { - return data_.size(); - } - - /// Makes the vector empty(). - void clear() - { - data_.clear(); - indices_.clear(); - size_ = 0; - } - - /// Equality. - bool operator==(const SparseVector& other) const - { - return size_ == other.size_ && data_ == other.data_ && indices_ == other.indices_; - } - - /// O(log n) element access. - /// \param index the proper vector index - /// \return the element with the given index, or the default element if no element in - /// the vector has the given index. - const T& element(int index) const - { -#ifndef NDEBUG - OPM_ERROR_IF(index < 0, "The index of a SparseVector must be non-negative (is " << index << ")"); - OPM_ERROR_IF(index >= size_, "The index of a SparseVector must be smaller than the maximum value (is " << index << ", max value: " << size_ <<")"); -#endif - std::vector::const_iterator lb = std::lower_bound(indices_.begin(), indices_.end(), index); - if (lb != indices_.end() && *lb == index) { - return data_[lb - indices_.begin()]; - } else { - return default_elem_; - } - } - - /// O(1) element access. - /// \param nzindex an index counting only nonzero elements. - /// \return the nzindex'th nonzero element. - const T& nonzeroElement(int nzindex) const - { -#ifndef NDEBUG - OPM_ERROR_IF(nzindex < 0, "The index of a SparseVector must be non-negative (is " << nzindex << ")"); - OPM_ERROR_IF(nzindex >= nonzeroSize(), "The index of a SparseVector must be smaller than the maximum value (is " << nzindex << ", max value: " << nonzeroSize() <<")"); -#endif - return data_[nzindex]; - } - - /// O(1) index access. - /// \param nzindex an index counting only nonzero elements. - /// \return the index of the nzindex'th nonzero element. - int nonzeroIndex(int nzindex) const - { - assert(nzindex >= 0); - assert(nzindex < nonzeroSize()); - return indices_[nzindex]; - } - - private: - // The vectors data_ and indices_ are always the same size. - // The indices are supposed to be stored in increasing order, - // to be unique, and to be in [0, size_ - 1]. - // default_elem_ is returned when a default element is requested. - int size_; - std::vector data_; - std::vector indices_; - T default_elem_; - }; - -} // namespace Opm - - - - -#endif // OPM_SPARSEVECTOR_HEADER diff --git a/ThirdParty/custom-opm-common/opm-common/opm/common/utility/numeric/UniformTableLinear.hpp b/ThirdParty/custom-opm-common/opm-common/opm/common/utility/numeric/UniformTableLinear.hpp deleted file mode 100644 index dc7f75e2ad..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/common/utility/numeric/UniformTableLinear.hpp +++ /dev/null @@ -1,268 +0,0 @@ -/* - Copyright 2010 SINTEF ICT, Applied Mathematics. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef OPM_UNIFORMTABLELINEAR_HEADER_INCLUDED -#define OPM_UNIFORMTABLELINEAR_HEADER_INCLUDED - -#include -#include -#include -#include -#include - -#include - -namespace Opm { - - /// @brief This class uses linear interpolation to compute the value - /// (and its derivative) of a function f sampled at uniform points. - /// @tparam T the range type of the function (should be an algebraic ring type) - template - class UniformTableLinear - { - public: - /// @brief Default constructor. - UniformTableLinear(); - - /// @brief Construct from vector of y-values. - /// @param xmin the x value corresponding to the first y value. - /// @param xmax the x value corresponding to the last y value. - /// @param y_values vector of range values. - UniformTableLinear(double xmin, - double xmax, - const std::vector& y_values); - - /// @brief Construct from array of y-values. - /// @param xmin the x value corresponding to the first y value. - /// @param xmax the x value corresponding to the last y value. - /// @param y_values array of range values. - /// @param num_y_values the number of values in y_values. - UniformTableLinear(double xmin, - double xmax, - const T* y_values, - int num_y_values); - - /// @brief Get the domain. - /// @return the domain as a pair of doubles. - std::pair domain(); - - /// @brief Rescale the domain. - /// @param new_domain the new domain as a pair of doubles. - void rescaleDomain(std::pair new_domain); - - /// @brief Evaluate the value at x. - /// @param x a domain value - /// @return f(x) - double operator()(const double x) const; - - /// @brief Evaluate the derivative at x. - /// @param x a domain value - /// @return f'(x) - double derivative(const double x) const; - - /// @brief Equality operator. - /// @param other another UniformTableLinear. - /// @return true if they are represented exactly alike. - bool operator==(const UniformTableLinear& other) const; - - /// @brief Policies for how to behave when trying to evaluate outside the domain. - enum RangePolicy {Throw = 0, ClosestValue = 1, Extrapolate = 2}; - - /// @brief Sets the behavioural policy for evaluation to the left of the domain. - /// @param rp the policy - void setLeftPolicy(RangePolicy rp); - - /// @brief Sets the behavioural policy for evaluation to the right of the domain. - /// @param rp the policy - void setRightPolicy(RangePolicy rp); - - protected: - double xmin_; - double xmax_; - double xdelta_; - std::vector y_values_; - RangePolicy left_; - RangePolicy right_; - template - friend std::ostream& operator<<(std::ostream& os, const UniformTableLinear& t); - }; - - - // Member implementations. - - template - inline - UniformTableLinear - ::UniformTableLinear() - : left_(ClosestValue), right_(ClosestValue) - { - } - - template - inline - UniformTableLinear - ::UniformTableLinear(double xmin, - double xmax, - const std::vector& y_values) - : xmin_(xmin), xmax_(xmax), y_values_(y_values), - left_(ClosestValue), right_(ClosestValue) - { - assert(xmax > xmin); - assert(y_values.size() > 1); - xdelta_ = (xmax - xmin)/(y_values.size() - 1); - } - - template - inline - UniformTableLinear - ::UniformTableLinear(double xmin, - double xmax, - const T* y_values, - int num_y_values) - : xmin_(xmin), xmax_(xmax), - y_values_(y_values, y_values + num_y_values), - left_(ClosestValue), right_(ClosestValue) - { - assert(xmax > xmin); - assert(y_values_.size() > 1); - xdelta_ = (xmax - xmin)/(y_values_.size() - 1); - } - - template - inline std::pair - UniformTableLinear - ::domain() - { - return std::make_pair(xmin_, xmax_); - } - - template - inline void - UniformTableLinear - ::rescaleDomain(std::pair new_domain) - { - xmin_ = new_domain.first; - xmax_ = new_domain.second; - xdelta_ = (xmax_ - xmin_)/(y_values_.size() - 1); - } - - template - inline double - UniformTableLinear - ::operator()(const double xparam) const - { - // Implements ClosestValue policy. - double x = std::min(xparam, xmax_); - x = std::max(x, xmin_); - - // Lookup is easy since we are uniform in x. - double pos = (x - xmin_)/xdelta_; - double posi = std::floor(pos); - int left = int(posi); - if (left == int(y_values_.size()) - 1) { - // We are at xmax_ - return y_values_.back(); - } - double w = pos - posi; - return (1.0 - w)*y_values_[left] + w*y_values_[left + 1]; - } - - template - inline double - UniformTableLinear - ::derivative(const double xparam) const - { - // Implements derivative consistent - // with ClosestValue policy for function - double value; - if (xparam > xmax_ || xparam < xmin_) { - value = 0.0; - } else { - double x = std::min(xparam, xmax_); - x = std::max(x, xmin_); - // Lookup is easy since we are uniform in x. - double pos = (x - xmin_)/xdelta_; - double posi = std::floor(pos); - int left = int(posi); - if (left == int(y_values_.size()) - 1) { - // We are at xmax_ - --left; - } - value = (y_values_[left + 1] - y_values_[left])/xdelta_; - } - return value; - } - - - template - inline bool - UniformTableLinear - ::operator==(const UniformTableLinear& other) const - { - return xmin_ == other.xmin_ - && xdelta_ == other.xdelta_ - && y_values_ == other.y_values_ - && left_ == other.left_ - && right_ == other.right_; - } - - template - inline void - UniformTableLinear - ::setLeftPolicy(RangePolicy rp) - { - if (rp != ClosestValue) { - OPM_THROW(std::runtime_error, "Only ClosestValue RangePolicy implemented."); - } - left_ = rp; - } - - template - inline void - UniformTableLinear - ::setRightPolicy(RangePolicy rp) - { - if (rp != ClosestValue) { - OPM_THROW(std::runtime_error, "Only ClosestValue RangePolicy implemented."); - } - right_ = rp; - } - - - template - inline std::ostream& operator<<(std::ostream& os, const UniformTableLinear& t) - { - int n = t.y_values_.size(); - for (int i = 0; i < n; ++i) { - double f = double(i)/double(n - 1); - os << (1.0 - f)*t.xmin_ + f*t.xmax_ - << " " << t.y_values_[i] << '\n'; - } - return os; - } - - namespace utils - { - using Opm::UniformTableLinear; - } - - -} // namespace Opm - -#endif // OPM_UNIFORMTABLELINEAR_HEADER_INCLUDED diff --git a/ThirdParty/custom-opm-common/opm-common/opm/common/utility/numeric/blas_lapack.h b/ThirdParty/custom-opm-common/opm-common/opm/common/utility/numeric/blas_lapack.h deleted file mode 100644 index be2b956c47..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/common/utility/numeric/blas_lapack.h +++ /dev/null @@ -1,148 +0,0 @@ -/* - Copyright 2010 SINTEF ICT, Applied Mathematics. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef OPM_BLAS_LAPACK_HEADER_INCLUDED -#define OPM_BLAS_LAPACK_HEADER_INCLUDED - -#ifdef __cplusplus -extern "C" { -#endif - -#if defined(MATLAB_MEX_FILE) && MATLAB_MEX_FILE -#include -#undef MAT_SIZE_T -#define MAT_SIZE_T mwSignedIndex -#endif - -#ifndef MAT_SIZE_T -#define MAT_SIZE_T int -#endif - - -/* C <- a1*op(A)*op(B) + a2*C where op(X) in {X, X.'} */ -void dgemm_(const char *transA , const char *transB , - const MAT_SIZE_T* m, const MAT_SIZE_T* n , const MAT_SIZE_T* k , - const double* a1, const double* A , const MAT_SIZE_T* ldA, - const double* B, const MAT_SIZE_T* ldB, - const double* a2, double* C , const MAT_SIZE_T* ldC); - - -/* C <- a1*A*A' + a2*C *or* C <- a1*A'*A + a2*C */ -void dsyrk_(const char *uplo, const char *trans, - const MAT_SIZE_T *n , const MAT_SIZE_T *k , - const double *a1 , const double *A , const MAT_SIZE_T *ldA, - const double *a2 , double *C , const MAT_SIZE_T *ldC); - - -void dgeqrf_(const MAT_SIZE_T *m , const MAT_SIZE_T *n , - double *A , const MAT_SIZE_T *ld , - double *tau , double *work, - const MAT_SIZE_T *lwork, MAT_SIZE_T *info); - - -void dorgqr_(const MAT_SIZE_T *m , const MAT_SIZE_T *n , const MAT_SIZE_T *k , - double *A , const MAT_SIZE_T *ld , const double *tau, - double *work, const MAT_SIZE_T *lwork, MAT_SIZE_T *info); - -/* A <- LU(A) */ -void dgetrf_(const MAT_SIZE_T *m , const MAT_SIZE_T *n , - double *A , const MAT_SIZE_T *ld, - MAT_SIZE_T *ipiv, MAT_SIZE_T *info); - -/* B <- A \ B, when A is LU(A) from dgetrf() */ -void dgetrs_(const char *trans, const MAT_SIZE_T *n, - const MAT_SIZE_T *nrhs , - const double *A , const MAT_SIZE_T *lda, - const MAT_SIZE_T *ipiv , double *B, - const MAT_SIZE_T *ldb , MAT_SIZE_T *info); - -/* B <- A \ B, tridiagonal A with bands DL, D, DU */ -void dgtsv_(const MAT_SIZE_T *n , - const MAT_SIZE_T *nrhs , - double *DL , - double *D , - double *DU , - double *B , - const MAT_SIZE_T *ldb , - MAT_SIZE_T *info); - -/* B <- A \ B, band matrix A stored in AB with kl subdiagonals, ku superdiagonals */ -void dgbsv_(const MAT_SIZE_T *n , - const MAT_SIZE_T *kl , - const MAT_SIZE_T *ku , - const MAT_SIZE_T *nrhs , - double *AB , - const MAT_SIZE_T *ldab , - MAT_SIZE_T *ipiv , - double *B , - const MAT_SIZE_T *ldb , - MAT_SIZE_T *info); - -/* B <- A \ B, general solver */ -void dgesv_(const MAT_SIZE_T *n, - const MAT_SIZE_T *nrhs , - double *A , - const MAT_SIZE_T *lda , - MAT_SIZE_T *piv , - double *B , - const MAT_SIZE_T *ldb , - MAT_SIZE_T *info); - -/* A <- chol(A) */ -void dpotrf_(const char *uplo, const MAT_SIZE_T *n, - double *A , const MAT_SIZE_T *lda, - MAT_SIZE_T *info); - -/* B <- (A \ (A' \ B)), when A=DPOTRF(A_orig) */ -void dpotrs_(const char *uplo, const MAT_SIZE_T *n , const MAT_SIZE_T *nrhs, - double *A , const MAT_SIZE_T *lda, - double *B , const MAT_SIZE_T *ldb, MAT_SIZE_T *info); - -/* A <- chol(A), packed format. */ -void dpptrf_(const char *uplo, const MAT_SIZE_T *n, - double *Ap , MAT_SIZE_T *info); - -/* A <- (A \ (A' \ eye(n)) when A=DPPTRF(A_orig) (packed format). */ -void dpptri_(const char *uplo, const MAT_SIZE_T *n, - double *Ap , MAT_SIZE_T *info); - -/* y <- a1*op(A)*x + a2*y */ -void dgemv_(const char *trans, - const MAT_SIZE_T *m , const MAT_SIZE_T *n, - const double *a1 , const double *A, const MAT_SIZE_T *ldA , - const double *x, const MAT_SIZE_T *incX, - const double *a2 , double *y, const MAT_SIZE_T *incY); - - -/* y <- a*x + y */ -void daxpy_(const MAT_SIZE_T *n, const double *a, - const double *x, const MAT_SIZE_T *incx, - double *y, const MAT_SIZE_T *incy); - -/* s <- x' * y */ -double ddot_(const MAT_SIZE_T *n, const double *x, const MAT_SIZE_T *incx, - const double *y, const MAT_SIZE_T *incy); - - - -#ifdef __cplusplus -} -#endif - -#endif /* OPM_BLAS_LAPACK_HEADER_INCLUDED */ diff --git a/ThirdParty/custom-opm-common/opm-common/opm/common/utility/numeric/buildUniformMonotoneTable.hpp b/ThirdParty/custom-opm-common/opm-common/opm/common/utility/numeric/buildUniformMonotoneTable.hpp deleted file mode 100644 index 3ebad7c99c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/common/utility/numeric/buildUniformMonotoneTable.hpp +++ /dev/null @@ -1,50 +0,0 @@ -/* - Copyright 2010 SINTEF ICT, Applied Mathematics. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef OPM_BUILDUNIFORMMONOTONETABLE_HEADER_INCLUDED -#define OPM_BUILDUNIFORMMONOTONETABLE_HEADER_INCLUDED - -#include -#include - -namespace Opm { - - template - void buildUniformMonotoneTable(const std::vector& xv, - const std::vector& yv, - const int samples, - UniformTableLinear& table) - { - MonotCubicInterpolator interp(xv, yv); - std::vector uniform_yv(samples); - double xmin = xv[0]; - double xmax = xv.back(); - for (int i = 0; i < samples; ++i) { - double w = double(i)/double(samples - 1); - double x = (1.0 - w)*xmin + w*xmax; - uniform_yv[i] = interp(x); - } - table = UniformTableLinear(xmin, xmax, uniform_yv); - } - -} // namespace Opm - - - -#endif // OPM_BUILDUNIFORMMONOTONETABLE_HEADER_INCLUDED diff --git a/ThirdParty/custom-opm-common/opm-common/opm/common/utility/numeric/calculateCellVol.hpp b/ThirdParty/custom-opm-common/opm-common/opm/common/utility/numeric/calculateCellVol.hpp deleted file mode 100644 index ba9a63dfde..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/common/utility/numeric/calculateCellVol.hpp +++ /dev/null @@ -1,29 +0,0 @@ -/* - Copyright 2018 Statoil ASA. - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include -#include -#include - -#ifndef CALCULATE_CELLVOL -#define CALCULATE_CELLVOL - -double calculateCellVol(const std::array& X, const std::array& Y, const std::array& Z); -double calculateCylindricalCellVol(const double R1, const double R2, const double dTheta, const double dZ); - -#endif - diff --git a/ThirdParty/custom-opm-common/opm-common/opm/common/utility/numeric/cmp.hpp b/ThirdParty/custom-opm-common/opm-common/opm/common/utility/numeric/cmp.hpp deleted file mode 100644 index 7507125320..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/common/utility/numeric/cmp.hpp +++ /dev/null @@ -1,133 +0,0 @@ -/* - Copyright 2016 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#ifndef COMMON_UTIL_NUMERIC_CMP -#define COMMON_UTIL_NUMERIC_CMP - -#include -#include -#include -#include -#include - -namespace Opm { - - /// In the namespace cmp are implemented functions for - /// approximate comparison of double values based on absolute - /// and relative difference. There are three functions: - /// - /// scalar_equal() : Compare two values. - /// - /// ptr_equal(): This compares all the element in the - /// two T * pointers. - /// - /// vector_equal(): This compares all the elements in - /// two std::vector instances. - /// - /// For both vector_equal() and ptr_equal() the - /// actual comparison is based on the scalar_equal() - /// function. All functions exist as two overloads, one which - /// takes explicit input values for the absolute and relative - /// epsilon, and one which uses default values. - /// - /// The comparison functions are implemented as templates, with - /// the following caveats: - /// - /// 1. The static_assert() in scalar_equal ensures that only - /// floating point types can be used. - /// - /// 2. The default epsilon values are of type double - - /// irrespective of the type of data being compared. - /// - /// For more details of floating point comparison please consult - /// this reference: - /// - /// https://randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-edition/ - - namespace cmp { - - const double default_abs_epsilon = 1e-8; - const double default_rel_epsilon = 1e-5; - - template - bool scalar_equal(T value1, T value2, T abs_eps , T rel_eps) { - static_assert(std::is_floating_point::value, "Function scalar_equal() A can only be instantiated with floating point types"); - - bool equal = true; - T diff = std::fabs(value1 - value2); - if (diff > abs_eps) { - T scale = std::max(std::fabs(value1), std::fabs(value2)); - - if (diff > scale * rel_eps) { - equal = false; - } - } - return equal; - } - - - template - bool scalar_equal(T value1, T value2) { - return scalar_equal( value1 , value2 , default_abs_epsilon , default_rel_epsilon ); - } - - template - bool vector_equal(const std::vector& v1, const std::vector& v2, T abs_eps, T rel_eps) { - if (v1.size() != v2.size()) { - return false; - } - - for (size_t i = 0; i < v1.size(); i++) { - if (!scalar_equal( v1[i], v2[i], abs_eps, rel_eps )) - return false; - } - - return true; - } - - template - bool vector_equal(const std::vector& v1, const std::vector& v2) { - return vector_equal(v1, v2, default_abs_epsilon, default_rel_epsilon); - } - - - template - bool array_equal(const T* p1, const T* p2, size_t num_elements, T abs_eps, T rel_eps) { - if (memcmp(p1 , p2 , num_elements * sizeof * p1) == 0) - return true; - else { - size_t index; - for (index = 0; index < num_elements; index++) { - if (!scalar_equal( p1[index] , p2[index] , abs_eps , rel_eps)) { - return false; - } - } - } - return true; - } - - - template - bool array_equal(const T* p1, const T* p2, size_t num_elements) { - return array_equal(p1, p2, num_elements , default_abs_epsilon, default_rel_epsilon); - } - } -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/common/utility/numeric/linearInterpolation.hpp b/ThirdParty/custom-opm-common/opm-common/opm/common/utility/numeric/linearInterpolation.hpp deleted file mode 100644 index cb30d4a6cb..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/common/utility/numeric/linearInterpolation.hpp +++ /dev/null @@ -1,107 +0,0 @@ -/* - Copyright 2009, 2010, 2013 SINTEF ICT, Applied Mathematics. - Copyright 2009, 2010 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef OPM_LINEARINTERPOLATION_HEADER_INCLUDED -#define OPM_LINEARINTERPOLATION_HEADER_INCLUDED - - -#include -#include - -namespace Opm -{ - - inline int tableIndex(const std::vector& table, double x) - { - // Returns an index in an ordered table such that x is between - // table[j] and table[j+1]. If x is out of range, first or last - // interval is returned; Binary search. - int n = table.size() - 1; - if (n < 2) { - return 0; - } - int jl = 0; - int ju = n; - bool ascend = (table[n] > table[0]); - while (ju - jl > 1) { - int jm = (ju + jl)/2; // Compute a midpoint - if ( (x >= table[jm]) == ascend) { - jl = jm; // Replace lower limit - } else { - ju = jm; // Replace upper limit - } - } - return jl; - } - - - inline double linearInterpolationDerivative(const std::vector& xv, - const std::vector& yv, double x) - { - // Extrapolates if x is outside xv - int ix1 = tableIndex(xv, x); - int ix2 = ix1 + 1; - return (yv[ix2] - yv[ix1])/(xv[ix2] - xv[ix1]); - } - - inline double linearInterpolation(const std::vector& xv, - const std::vector& yv, double x) - { - // Extrapolates if x is outside xv - int ix1 = tableIndex(xv, x); - int ix2 = ix1 + 1; - return (yv[ix2] - yv[ix1])/(xv[ix2] - xv[ix1])*(x - xv[ix1]) + yv[ix1]; - } - - inline double linearInterpolationNoExtrapolation(const std::vector& xv, - const std::vector& yv, double x) - { - // Return end values if x is outside xv - if (x < xv.front()) { - return yv.front(); - } - if (x > xv.back()) { - return yv.back(); - } - - int ix1 = tableIndex(xv, x); - int ix2 = ix1 + 1; - return (yv[ix2] - yv[ix1])/(xv[ix2] - xv[ix1])*(x - xv[ix1]) + yv[ix1]; - } - - inline double linearInterpolation(const std::vector& xv, - const std::vector& yv, - double x, int& ix1) - { - // Extrapolates if x is outside xv - ix1 = tableIndex(xv, x); - int ix2 = ix1 + 1; - return (yv[ix2] - yv[ix1])/(xv[ix2] - xv[ix1])*(x - xv[ix1]) + yv[ix1]; - } - - - -} // namespace Opm - - - - - -#endif // OPM_LINEARINTERPOLATION_HEADER_INCLUDED diff --git a/ThirdParty/custom-opm-common/opm-common/opm/common/utility/parameters/Parameter.hpp b/ThirdParty/custom-opm-common/opm-common/opm/common/utility/parameters/Parameter.hpp deleted file mode 100644 index 1bec0cd586..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/common/utility/parameters/Parameter.hpp +++ /dev/null @@ -1,215 +0,0 @@ -//=========================================================================== -// -// File: Parameter.hpp -// -// Created: Tue Jun 2 16:00:21 2009 -// -// Author(s): Bård Skaflestad -// Atgeirr F Rasmussen -// -// $Date$ -// -// $Revision$ -// -//=========================================================================== - -/* - Copyright 2009, 2010 SINTEF ICT, Applied Mathematics. - Copyright 2009, 2010 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef OPM_PARAMETER_HEADER -#define OPM_PARAMETER_HEADER - -#include -#include - -#include -#include - -namespace Opm { - /// @brief - /// @todo Doc me! - class Parameter : public ParameterMapItem { - public: - /// @brief - /// @todo Doc me! - virtual ~Parameter() {} - /// @brief - /// @todo Doc me! - /// @return - virtual std::string getTag() const {return ID_xmltag__param;} - /// @brief - /// @todo Doc me! - /// @param - Parameter(const std::string& value, const std::string& type) - : value_(value), type_(type) {} - /// @brief - /// @todo Doc me! - /// @return - std::string getValue() const {return value_;} - /// @brief - /// @todo Doc me! - /// @return - std::string getType() const {return type_;} - private: - std::string value_; - std::string type_; - }; - - /// @brief - /// @todo Doc me! - /// @param - /// @return - std::string correct_parameter_tag(const ParameterMapItem& item); - std::string correct_type(const Parameter& parameter, - const std::string& type); - - /// @brief - /// @todo Doc me! - /// @tparam - /// @param - /// @return - template<> - struct ParameterMapItemTrait { - static int convert(const ParameterMapItem& item, - std::string& conversion_error, - const bool) - { - conversion_error = correct_parameter_tag(item); - if (conversion_error != "") { - return 0; - } - const Parameter& parameter = dynamic_cast(item); - conversion_error = correct_type(parameter, ID_param_type__int); - if (conversion_error != "") { - return 0; - } - std::stringstream stream; - stream << parameter.getValue(); - int value; - stream >> value; - if (stream.fail()) { - conversion_error = "Conversion to '" + - ID_param_type__int + - "' failed. Data was '" + - parameter.getValue() + "'.\n"; - return 0; - } - return value; - } - static std::string type() {return ID_param_type__int;} - }; - - /// @brief - /// @todo Doc me! - /// @tparam - /// @param - /// @return - template<> - struct ParameterMapItemTrait { - static double convert(const ParameterMapItem& item, - std::string& conversion_error, - const bool) - { - conversion_error = correct_parameter_tag(item); - if (conversion_error != "") { - return 0.0; - } - const Parameter& parameter = dynamic_cast(item); - conversion_error = correct_type(parameter, ID_param_type__float); - if (conversion_error != "") { - return 0.0; - } - std::stringstream stream; - stream << parameter.getValue(); - double value; - stream >> value; - if (stream.fail()) { - conversion_error = "Conversion to '" + - ID_param_type__float + - "' failed. Data was '" + - parameter.getValue() + "'.\n"; - return 0.0; - } - return value; - } - static std::string type() {return ID_param_type__float;} - }; - - /// @brief - /// @todo Doc me! - /// @tparam - /// @param - /// @return - template<> - struct ParameterMapItemTrait { - static bool convert(const ParameterMapItem& item, - std::string& conversion_error, - const bool) - { - conversion_error = correct_parameter_tag(item); - if (conversion_error != "") { - return false; - } - const Parameter& parameter = dynamic_cast(item); - conversion_error = correct_type(parameter, ID_param_type__bool); - if (conversion_error != "") { - return false; - } - if (parameter.getValue() == ID_true) { - return true; - } else if (parameter.getValue() == ID_false) { - return false; - } else { - conversion_error = "Conversion failed. Data was '" + - parameter.getValue() + - "', but should be one of '" + - ID_true + "' or '" + ID_false + "'.\n"; - return false; - } - } - static std::string type() {return ID_param_type__bool;} - }; - - /// @brief - /// @todo Doc me! - /// @tparam - /// @param - /// @return - template<> - struct ParameterMapItemTrait { - static std::string convert(const ParameterMapItem& item, - std::string& conversion_error, - const bool) - { - conversion_error = correct_parameter_tag(item); - if (conversion_error != "") { - return ""; - } - const Parameter& parameter = dynamic_cast(item); - conversion_error = correct_type(parameter, ID_param_type__string); - if (conversion_error != "") { - return ""; - } - return parameter.getValue(); - } - static std::string type() {return ID_param_type__string;} - }; -} // namespace Opm -#endif // OPM_PARAMETER_HPP diff --git a/ThirdParty/custom-opm-common/opm-common/opm/common/utility/parameters/ParameterGroup.hpp b/ThirdParty/custom-opm-common/opm-common/opm/common/utility/parameters/ParameterGroup.hpp deleted file mode 100644 index 65b17c7d74..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/common/utility/parameters/ParameterGroup.hpp +++ /dev/null @@ -1,272 +0,0 @@ -//=========================================================================== -// -// File: ParameterGroup.hpp -// -// Created: Tue Jun 2 19:11:11 2009 -// -// Author(s): Bård Skaflestad -// Atgeirr F Rasmussen -// -// $Date$ -// -// $Revision$ -// -//=========================================================================== - -/* - Copyright 2009, 2010 SINTEF ICT, Applied Mathematics. - Copyright 2009, 2010 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef OPM_PARAMETERGROUP_HEADER -#define OPM_PARAMETERGROUP_HEADER - -#include -#include -#include -#include -#include -#include -#include - -namespace Opm { - /// ParameterGroup is a class that is used to provide run-time parameters. - /// The standard use of the class is to call create it with the - /// (int argc, char** argv) constructor (where the arguments are those - /// given by main). This parses the command line, where each token - /// either - /// A) specifies a parameter (by a "param=value" token). - /// B) specifies a param file to be read (by a "filename.param" token). - /// After the tokens are parsed they are stored in a tree structure - /// in the ParameterGroup object; it is worth mentioning that parameters - /// are inherited in this tree structure. Thus, if ``grid\_prefix'' is - /// given a value in the root node, this value will be visible in all - /// parts of the tree (unless the parameter is overwritten in a subtree). - /// Applications using this ParameterGroup objects will usually write out - /// a message for each node in the three that is used by the application; - /// this is one way to determine valid parameters. - /// - /// Parameters specified as "param=value" on the command line - /// - /// To specify a parameter on the command line, you must know where in the tree the - /// parameter resides. The syntax for specifying parameters on the command line given - /// an application called ``simulator'' is - /// simulator param1=value grp/param2=value - // for parameter ``param1'' lying at the root and ``param2'' in the group - /// ``grp''. If the same parameters are specified multiple times on the command - /// line, only the last will be used. Thus an application named ``simulator'' run with - /// the following command - /// simulator param=value1 param=value2 - /// will use value2 as the value of ``param''. - /// - /// param files - /// - /// A param file consists of multiple lienes, where each line consists of "param=value". - /// This syntax is identical to the one for parameters specified on the command line. - class ParameterGroup : public ParameterMapItem { - public: - struct NotFoundException : public std::exception {}; - struct WrongTypeException : public std::exception {}; - struct ConversionFailedException : public std::exception {}; - - template - struct RequirementFailedException : public std::exception {}; - - ParameterGroup(); - ParameterGroup(const std::string& path, const ParameterGroup* parent, - const bool enable_output); - - // From ParameterMapItem - virtual ~ParameterGroup(); - virtual std::string getTag() const; - - /// \brief A constructor typically used to initialize a - /// ParameterGroup from command-line arguments. - /// - /// It is required that argv[0] is the program name, while if - /// 0 < i < argc, then argv[i] is either - /// the name of a parameter file or parametername=value. - /// - /// \param argc is the number of command-line arguments, - /// including the name of the executable. - /// \param argv is an array of char*, each of which is a - /// command line argument. - /// \param verify_syntax If true (default), then it is an error to - /// pass arguments that cannot be handled by the ParameterGroup, - /// or an empty argument list. If false, such arguments are stored - /// and can be retrieved later with unhandledArguments(). - /// \param enable_output Whether to enable output or not. - template - ParameterGroup(int argc, StringArray argv, const bool verify_syntax = true, - const bool enabled_output=true); - - /// \brief This method checks if there is something with name - /// \p name in the parameter gropup. - /// - /// \param name is the name of the parameter. - /// \return true if \p name is the name of something in the parameter - /// group, false otherwise. - bool has(const std::string& name) const; - - /// \brief This method is used to read a parameter from the - /// parameter group. - /// - /// NOTE: If the reading of the parameter fails, then this method - /// throws an appropriate exception. - /// - /// \param name is the name of the parameter in question. - /// \return The value associated with then name in this parameter - /// group. - template - T get(const std::string& name) const; - - template - T get(const std::string& name, const Requirement&) const; - - /// \brief This method is used to read a parameter from the - /// parameter group. - /// - /// NOTE: If the reading of the parameter fails, then either - /// a) this method returns \p default_value if there - /// was no parameter with name \p name in - /// the parameter group - /// or - /// b) this method throws an appropriate exception. - /// - /// \param name is the name of the parameter in question. - /// \param default_value the default value of the parameter in - /// question. - /// \return The value associated with this name in this parameter - /// group. - template - T getDefault(const std::string& name, - const T& default_value) const; - - template - T getDefault(const std::string& name, - const T& default_value, - const Requirement& r) const; - - /// \brief This method returns the parameter group given by name, - /// i.e. it is an alias of get(). - /// - /// \param name is the name of the parameter group sought. - /// \return the parameter group sought. - ParameterGroup getGroup(const std::string& name) const; - - /// \brief Disables the output from get, getDefault and getGroup. - /// By default, such output is enabled. - void disableOutput(); - - /// \brief Enables the output from get, getDefault and getGroup. - /// By default, such output is enabled. - void enableOutput(); - - /// \brief Returs true if and only if output from get, getDefault - /// and getGroup is enabled. - /// - /// \return true if and only if output from get, getDefault and - /// getGroup is enabled. - bool isOutputEnabled() const; - - /// \brief Reads the contents of the param file specified by - /// param_filename into this ParameterGroup. - /// - /// NOTE: A param file contains lines on the form 'a/b/c=d'. - // The '/' separates ParameterGroups and Parameters - /// (e.g. c is a Parameter in the ParameterGroup b, - /// and b is a ParameterGroup in the ParameterGroup a) - /// while '=' separates the name from the value (e.g. the - /// value of the parameter c above will be d). - /// NOTE: A param file does not store any type information about - /// its values. - /// - /// \param param_filename is the name of a param file. - void readParam(const std::string& param_filename); - - /// \brief Writes this ParameterGroup into a param file - /// specified by param_filename. - /// - /// \param param_filename is the name of a param file. - void writeParam(const std::string& param_filename) const; - - /// \brief Writes this ParameterGroup to a stream. - /// - /// \param stream is the stream to write to. - void writeParamToStream(std::ostream& stream) const; - - - /// vki param interface - deprecated - template - void get(const char* name, T& value, const T& default_value) const { - value = this->getDefault(name, default_value); - } - - /// vki param interface - deprecated - template - void get(const char* name, T& value) const { - value = this->get(name); - } - - /// \brief Return true if any parameters are unused. - bool anyUnused() const; - - /// \brief Shows which parameters which are used or unused. - void displayUsage(bool used_params = false) const; - - /// \brief Returns the path of the parameter group. - std::string path() const; - - /// Insert a new item into the group. - void insert(const std::string& name, - const std::shared_ptr& data); - - /// Insert a new parameter item into the group. - void insertParameter(const std::string& name, const std::string& value); - - /// Unhandled arguments from command line parsing. - const std::vector& unhandledArguments() const; - - private: - typedef std::shared_ptr data_type; - typedef std::pair pair_type; - typedef std::map map_type; - - std::string path_; - map_type map_; - const ParameterGroup* parent_; - bool output_is_enabled_; - std::vector unhandled_arguments_; - - template - T translate(const pair_type& data, const Requirement& chk) const; - template - void parseCommandLineArguments(int argc, StringArray argv, bool verify_syntax); - void recursiveSetIsOutputEnabled(bool output_is_enabled); - - // helper routines to do textual I/O - template - static std::string to_string(const T& val); - static std::pair - filename_split(const std::string& filename); - }; -} // namespace Opm - -#include - -#endif // OPM_PARAMETERGROUP_HEADER diff --git a/ThirdParty/custom-opm-common/opm-common/opm/common/utility/parameters/ParameterGroup_impl.hpp b/ThirdParty/custom-opm-common/opm-common/opm/common/utility/parameters/ParameterGroup_impl.hpp deleted file mode 100644 index d3f1cba1fe..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/common/utility/parameters/ParameterGroup_impl.hpp +++ /dev/null @@ -1,311 +0,0 @@ -//=========================================================================== -// -// File: ParameterGroup_impl.hpp -// -// Created: Tue Jun 2 19:06:46 2009 -// -// Author(s): Bård Skaflestad -// Atgeirr F Rasmussen -// -// $Date$ -// -// $Revision$ -// -//=========================================================================== - -/* - Copyright 2009, 2010 SINTEF ICT, Applied Mathematics. - Copyright 2009, 2010 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef OPM_PARAMETERGROUP_IMPL_HEADER -#define OPM_PARAMETERGROUP_IMPL_HEADER - -#include -#include -#include - -#include -#include -#include -#include -#include -#include - -namespace Opm { - template<> - struct ParameterMapItemTrait { - static ParameterGroup - convert(const ParameterMapItem& item, - std::string& conversion_error, - bool enable_output) - { - std::string tag = item.getTag(); - if (tag != ID_xmltag__param_grp) { - conversion_error = "The XML tag was '" + tag + - "' but should be '" + - ID_xmltag__param_grp + "'.\n"; - return ParameterGroup("", 0, enable_output); - } - conversion_error = ""; - const ParameterGroup& pg = dynamic_cast(item); - return pg; - } - static std::string type() {return "ParameterGroup";} - }; - - template - inline std::string - ParameterGroup::to_string(const T& val) - { - std::ostringstream os; - os << val; - return os.str(); - } - - template <> - inline std::string - ParameterGroup::to_string(const bool& b) { - if (b) { - return ID_true; - } else { - return ID_false; - } - } - - template <> - inline std::string - ParameterGroup::to_string(const ParameterGroup&) - { - return std::string(""); - } - - inline std::pair - ParameterGroup::filename_split(const std::string& filename) - { - int fpos = filename.rfind('.'); - std::string name = filename.substr(0, fpos); - std::string type = filename.substr(fpos+1); - return std::make_pair(name, type); - } - - template - ParameterGroup::ParameterGroup(int argc, StringArray argv, bool verify_syntax, - const bool enable_output) - : path_(ID_path_root), parent_(0), output_is_enabled_(enable_output) - { - if (verify_syntax && (argc < 2)) { - std::cerr << "Usage: " << argv[0] << " " - << "[paramfilename1.param] " - << "[paramfilename2.param] " - << "[overridden_arg1=value1] " - << "[overridden_arg2=value2] " - << "[...]" << std::endl; - exit(EXIT_FAILURE); - } - this->parseCommandLineArguments(argc, argv, verify_syntax); - } - - template - void ParameterGroup::parseCommandLineArguments(int argc, StringArray argv, bool verify_syntax) - { - std::vector files; - std::vector > assignments; - for (int i = 1; i < argc; ++i) { - std::string arg(argv[i]); - int fpos = arg.find(ID_delimiter_assignment); - if (fpos == int(std::string::npos)) { - std::string filename = arg.substr(0, fpos); - files.push_back(filename); - continue; - } - int pos = fpos + ID_delimiter_assignment.size(); - int spos = arg.find(ID_delimiter_assignment, pos); - if (spos == int(std::string::npos)) { - std::string name = arg.substr(0, fpos); - std::string value = arg.substr(pos, spos); - assignments.push_back(std::make_pair(name, value)); - continue; - } - OpmLog::warning("Too many assignements (' " - + ID_delimiter_assignment - + "') detected in argument " + to_string(i)); - } - for (int i = 0; i < int(files.size()); ++i) { - std::pair file_type = filename_split(files[i]); - if (file_type.second == "param") { - this->readParam(files[i]); - } else { - if (verify_syntax) { - std::cerr << "ERROR: Input '" << files[i] << "' is not a valid name for a parameter file.\n"; - std::cerr << " Valid filename extensions are 'param'.\n"; - OPM_THROW(std::runtime_error, "ParameterGroup cannot handle argument: " << files[i]); - } else { - unhandled_arguments_.push_back(files[i]); - } - } - } - for (int i = 0; i < int(assignments.size()); ++i) { - this->insertParameter(assignments[i].first, assignments[i].second); - } - } - - - template - inline T ParameterGroup::get(const std::string& name) const - { - return this->get(name, ParameterRequirementNone()); - } - - template - inline T ParameterGroup::get(const std::string& name, - const Requirement& r) const - { - setUsed(); - std::pair name_path = splitParam(name); - map_type::const_iterator it = map_.find(name_path.first); - if (it == map_.end()) { - if (parent_ != 0) { - // If we have a parent, ask it instead. - if (output_is_enabled_) { - OpmLog::warning(name + "not found at " + path() + ID_delimiter_path + ", asking parent."); - } - return parent_->get(name, r); - } else { - // We are at the top, name has not been found. - std::cerr << "ERROR: The group '" - << this->path() - << "' does not contain an element named '" - << name - << "'.\n"; - throw NotFoundException(); - } - } - if (name_path.second == "") { - T val = this->translate(*it, r); - it->second->setUsed(); - if (output_is_enabled_) { - OpmLog::debug(name + " found at " + path() + ID_delimiter_path + ", value is " + to_string(val)); - } - return val; - } else { - ParameterGroup& pg = dynamic_cast(*(*it).second); - pg.setUsed(); - return pg.get(name_path.second, r); - } - } - - template - inline T ParameterGroup::getDefault(const std::string& name, - const T& default_value) const - { - return this->getDefault(name, default_value, ParameterRequirementNone()); - } - - template - inline T ParameterGroup::getDefault(const std::string& name, - const T& default_value, - const Requirement& r) const - { - setUsed(); - std::pair name_path = splitParam(name); - map_type::const_iterator it = map_.find(name_path.first); - if (it == map_.end()) { - if (parent_ != 0) { - // If we have a parent, ask it instead. - if (output_is_enabled_) { - OpmLog::warning(name + " not found at " + path() + ID_delimiter_path + ", asking parent."); - } - return parent_->getDefault(name, default_value, r); - } else { - // We check the requirement for the default value - std::string requirement_result = r(default_value); - if (requirement_result != "") { - std::cerr << "ERROR: The default value for the " - << " element named '" - << name - << "' in the group '" - << this->path() - << "' failed to meet a requirenemt.\n"; - std::cerr << "The requirement enforcer returned the following message:\n" - << requirement_result - << "\n"; - throw RequirementFailedException(); - } - } - if (output_is_enabled_) { - OpmLog::debug(name + " not found. Using default value '" + to_string(default_value) + "'."); - } - return default_value; - } - if (name_path.second == "") { - T val = this->translate(*it, r); - it->second->setUsed(); - if (output_is_enabled_) { - OpmLog::debug(name + " found at " + path() + ID_delimiter_path - + ", value is '" + to_string(val) + "'."); - } - return val; - } else { - ParameterGroup& pg = dynamic_cast(*(*it).second); - pg.setUsed(); - return pg.getDefault(name_path.second, default_value, r); - } - } - - template - inline T ParameterGroup::translate(const pair_type& named_data, - const Requirement& chk) const - { - const std::string& name = named_data.first; - const data_type data = named_data.second; - std::string conversion_error; - T value = ParameterMapItemTrait::convert(*data, conversion_error, - output_is_enabled_); - if (conversion_error != "") { - std::cerr << "ERROR: Failed to convert the element named '" - << name - << "' in the group '" - << this->path() - << "' to the type '" - << ParameterMapItemTrait::type() - << "'.\n"; - std::cerr << "The conversion routine returned the following message:\n" - << conversion_error - << "\n"; - throw WrongTypeException(); - } - std::string requirement_result = chk(value); - if (requirement_result != "") { - std::cerr << "ERROR: The element named '" - << name - << "' in the group '" - << this->path() - << "' of type '" - << ParameterMapItemTrait::type() - << "' failed to meet a requirenemt.\n"; - std::cerr << "The requirement enforcer returned the following message:\n" - << requirement_result - << "\n"; - throw RequirementFailedException(); - } - return value; - } -} // namespace Opm - -#endif // OPM_PARAMETERGROUP_IMPL_HEADER diff --git a/ThirdParty/custom-opm-common/opm-common/opm/common/utility/parameters/ParameterMapItem.hpp b/ThirdParty/custom-opm-common/opm-common/opm/common/utility/parameters/ParameterMapItem.hpp deleted file mode 100644 index 3bce38d0a5..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/common/utility/parameters/ParameterMapItem.hpp +++ /dev/null @@ -1,71 +0,0 @@ -//=========================================================================== -// -// File: ParameterMapItem.hpp -// -// Created: Tue Jun 2 19:05:54 2009 -// -// Author(s): Bård Skaflestad -// Atgeirr F Rasmussen -// -// $Date$ -// -// $Revision$ -// -//=========================================================================== - -/* - Copyright 2009, 2010 SINTEF ICT, Applied Mathematics. - Copyright 2009, 2010 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef OPM_PARAMETERMAPITEM_HEADER -#define OPM_PARAMETERMAPITEM_HEADER - -#include - -namespace Opm { - /// The parameter handlig system is structured as a tree, - /// where each node inhertis from ParameterMapItem. - /// - /// The abstract virtual function getTag() is used to determine - /// which derived class the node actually is. - struct ParameterMapItem { - /// Default constructor - ParameterMapItem() : used_(false) {} - - /// Destructor - virtual ~ParameterMapItem() {} - - /// \brief This function returns a string describing - /// the ParameterMapItem. - virtual std::string getTag() const = 0; - void setUsed() const { used_ = true; } - bool used() const { return used_; } - private: - mutable bool used_; - }; - - template - struct ParameterMapItemTrait { - static T convert(const ParameterMapItem&, - std::string& conversion_error); - static std::string type(); - }; -} // namespace Opm - -#endif // OPM_PARAMETERMAPITEM_HEADER diff --git a/ThirdParty/custom-opm-common/opm-common/opm/common/utility/parameters/ParameterRequirement.hpp b/ThirdParty/custom-opm-common/opm-common/opm/common/utility/parameters/ParameterRequirement.hpp deleted file mode 100644 index 90e38e4196..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/common/utility/parameters/ParameterRequirement.hpp +++ /dev/null @@ -1,241 +0,0 @@ -//=========================================================================== -// -// File: ParameterRequirement.hpp -// -// Created: Tue Jun 2 19:05:02 2009 -// -// Author(s): Bård Skaflestad -// Atgeirr F Rasmussen -// -// $Date$ -// -// $Revision$ -// -//=========================================================================== - -/* - Copyright 2009, 2010 SINTEF ICT, Applied Mathematics. - Copyright 2009, 2010 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef OPM_PARAMETERREQUIREMENT_HEADER -#define OPM_PARAMETERREQUIREMENT_HEADER - -#include -#include -#include -#include -#include - -namespace Opm { - /// @brief - /// @todo Doc me! - /// @tparam - /// @param - /// @return - struct ParameterRequirementNone { - template - std::string operator()(const T&) const { - return ""; - } - }; - - /// @brief - /// @todo Doc me! - /// @param - /// @return - struct ParameterRequirementProbability { - std::string operator()(double x) const { - if ( (x < 0.0) || (x > 1.0) ) { - std::ostringstream stream; - stream << "The value '" << x - << "' is not in the interval [0, 1]."; - return stream.str(); - } else { - return ""; - } - } - }; - - /// @brief - /// @todo Doc me! - /// @tparam - /// @param - /// @return - struct ParameterRequirementPositive { - template - std::string operator()(const T& x) const { - if (x > 0) { - return ""; - } else { - std::ostringstream stream; - stream << "The value '" << x << "' is not positive."; - return stream.str(); - } - } - }; - - /// @brief - /// @todo Doc me! - /// @tparam - /// @param - /// @return - struct ParameterRequirementNegative { - template - std::string operator()(const T& x) const { - if (x < 0) { - return ""; - } else { - std::ostringstream stream; - stream << "The value '" << x << "' is not negative."; - return stream.str(); - } - } - }; - - /// @brief - /// @todo Doc me! - /// @tparam - /// @param - /// @return - struct ParameterRequirementNonPositive { - template - std::string operator()(const T& x) const { - if (x > 0) { - std::ostringstream stream; - stream << "The value '" << x << "' is positive."; - return stream.str(); - } else { - return ""; - } - } - }; - - /// @brief - /// @todo Doc me! - /// @tparam - /// @param - /// @return - struct ParameterRequirementNonNegative { - template - std::string operator()(const T& x) const { - if (x < 0) { - std::ostringstream stream; - stream << "The value '" << x << "' is negative."; - return stream.str(); - } else { - return ""; - } - } - }; - - /// @brief - /// @todo Doc me! - /// @tparam - /// @param - /// @return - struct ParameterRequirementNonZero { - template - std::string operator()(const T& x) const { - if (x != 0) { - return ""; - } else { - return "The value was zero."; - } - } - }; - - /// @brief - /// @todo Doc me! - /// @param - /// @return - struct ParameterRequirementNonEmpty { - std::string operator()(const std::string& x) const { - if (x != "") { - return "The string was empty."; - } else { - return ""; - } - } - }; - - /// @brief - /// @todo Doc me! - /// @tparam - /// @param - /// @return - template - struct ParameterRequirementAnd { - ParameterRequirementAnd(const Requirement1& r1, const Requirement2& r2) : - r1_(r1), r2_(r2) { } - - template - std::string operator()(const T& t) const { - std::string e1 = r1_(t); - std::string e2 = r2_(t); - if (e1 == "") { - return e2; - } else if (e2 == "") { - return e1; - } else { - return e1 + " AND " + e2; - } - } - private: - const Requirement1 r1_; - const Requirement2 r2_; - }; - - /// @brief - /// @todo Doc me! - /// @param - struct ParameterRequirementMemberOf { - explicit ParameterRequirementMemberOf(const std::vector& elements) - : elements_(elements) { - assert(elements_.size() > 0); - } - - /// @brief - /// @todo Doc me! - /// @param - /// @return - std::string operator()(const std::string& x) const { - if (std::find(elements_.begin(), elements_.end(), x) == elements_.end()) { - if (elements_.size() == 1) { - return "The string '" + x + "' is not '" + elements_[0] + "'."; - } - std::ostringstream stream; - stream << "The string '" << x << "' is not among '"; - for (int i = 0; i < int(elements_.size()) - 2; ++i) { - stream << elements_[i] << "', '"; - } - stream << elements_[elements_.size() - 2] - << "' and '" - << elements_[elements_.size() - 1] - << "'."; - return stream.str(); - } else { - return ""; - } - } - private: - const std::vector elements_; - }; -} // namespace Opm - -#endif // OPM_PARAMETERREQUIREMENT_HEADER diff --git a/ThirdParty/custom-opm-common/opm-common/opm/common/utility/parameters/ParameterStrings.hpp b/ThirdParty/custom-opm-common/opm-common/opm/common/utility/parameters/ParameterStrings.hpp deleted file mode 100644 index fcf2fa2627..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/common/utility/parameters/ParameterStrings.hpp +++ /dev/null @@ -1,63 +0,0 @@ -//=========================================================================== -// -// File: ParameterStrings.hpp -// -// Created: Tue Jun 2 19:04:15 2009 -// -// Author(s): Bård Skaflestad -// Atgeirr F Rasmussen -// -// $Date$ -// -// $Revision$ -// -//=========================================================================== - -/* - Copyright 2009, 2010 SINTEF ICT, Applied Mathematics. - Copyright 2009, 2010 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef OPM_PARAMETERSTRINGS_HEADER -#define OPM_PARAMETERSTRINGS_HEADER - -#include - -namespace Opm { - const std::string ID_true = "true"; - const std::string ID_false = "false"; - - const std::string ID_xmltag__param_grp = "ParameterGroup"; - const std::string ID_xmltag__param = "Parameter"; - - const std::string ID_param_type__bool = "bool"; - const std::string ID_param_type__int = "int"; - const std::string ID_param_type__float = "double"; - const std::string ID_param_type__string = "string"; - const std::string ID_param_type__file = "file"; - const std::string ID_param_type__cmdline = "cmdline"; - - // - - const std::string ID_path_root = ""; - const std::string ID_delimiter_path = "/"; - const std::string ID_comment = "//"; - const std::string ID_delimiter_assignment = "="; -} // namespace Opm - -#endif // OPM_PARAMETERSTRINGS_HEADER diff --git a/ThirdParty/custom-opm-common/opm-common/opm/common/utility/parameters/ParameterTools.hpp b/ThirdParty/custom-opm-common/opm-common/opm/common/utility/parameters/ParameterTools.hpp deleted file mode 100644 index ead5cbc12d..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/common/utility/parameters/ParameterTools.hpp +++ /dev/null @@ -1,46 +0,0 @@ -//=========================================================================== -// -// File: ParameterTools.hpp -// -// Created: Tue Jun 2 19:02:19 2009 -// -// Author(s): Bård Skaflestad -// Atgeirr F Rasmussen -// -// $Date$ -// -// $Revision$ -// -//=========================================================================== - -/* - Copyright 2009, 2010 SINTEF ICT, Applied Mathematics. - Copyright 2009, 2010 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef OPM_PARAMETERTOOLS_HEADER -#define OPM_PARAMETERTOOLS_HEADER - -#include -#include - -namespace Opm { - std::pair splitParam(const std::string& name); -} // namespace Opm - -#endif // OPM_PARAMETERTOOLS_HEADER diff --git a/ThirdParty/custom-opm-common/opm-common/opm/common/utility/platform_dependent/disable_warnings.h b/ThirdParty/custom-opm-common/opm-common/opm/common/utility/platform_dependent/disable_warnings.h deleted file mode 100644 index 9f1a4b5186..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/common/utility/platform_dependent/disable_warnings.h +++ /dev/null @@ -1,79 +0,0 @@ -/* - Copyright 2014 SINTEF ICT, Applied Mathematics. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -// Note: this file shall not have include guards or #pragma once. - -#ifdef SILENCE_EXTERNAL_WARNINGS - -// To use this feature, we must have sufficiently new compiler. - -// Using gcc is ok if version 4.6 or newer. -#if defined(__GNUC__) -# define __GNUC_VERSION__ (__GNUC__ * 100 \ - + __GNUC_MINOR__ * 1) -# if (__GNUC_VERSION__ >= 406) -# define GNU_COMPILER_OK 1 -# else -# define GNU_COMPILER_OK 0 -# endif -#else -# define GNU_COMPILER_OK 0 -#endif - -// Uncertain what version of clang to require, -// assume all versions are fine. -#if defined(__clang__) -# define CLANG_COMPILER_OK 1 -#else -# define CLANG_COMPILER_OK 0 -#endif - -// More compilers can be added here if necessary. -#define COMPATIBLE_COMPILER (GNU_COMPILER_OK || CLANG_COMPILER_OK) - -// If compiler is compatible, push current warning level -// and ignore warnings that are usually generated from -// third-party libraries that are not warning-clean. -// Note that both clang and (newer) gcc accept the -// "#pragma GCC diagnostic" syntax. -#if COMPATIBLE_COMPILER -#pragma GCC diagnostic push -// Suppress warnings: "unknown option after ‘#pragma GCC diagnostic’ kind [-Wpragmas]". -// This is necessary because not all the compilers have the same warning options. -#pragma GCC diagnostic ignored "-Wpragmas" -#pragma GCC diagnostic ignored "-Wdeprecated-declarations" -#pragma GCC diagnostic ignored "-Wdeprecated-register" -#pragma GCC diagnostic ignored "-Wignored-qualifiers" -#pragma GCC diagnostic ignored "-Wmismatched-tags" -#pragma GCC diagnostic ignored "-Wshadow" -#pragma GCC diagnostic ignored "-Wsign-compare" -#pragma GCC diagnostic ignored "-Wunused-parameter" -#pragma GCC diagnostic ignored "-Wtautological-compare" -#pragma GCC diagnostic ignored "-Wtype-limits" -#pragma GCC diagnostic ignored "-Wunused-function" -#pragma GCC diagnostic ignored "-Wunneeded-internal-declaration" -#pragma GCC diagnostic ignored "-Wunused-private-field" -#pragma GCC diagnostic ignored "-Wunused-variable" -#pragma GCC diagnostic ignored "-Wunused-local-typedefs" -#pragma GCC diagnostic ignored "-Wcast-align" -#pragma GCC diagnostic ignored "-Wcast-qual" -#pragma GCC diagnostic ignored "-Wignored-attributes" -#endif // COMPATIBLE_COMPILER - -#endif // SILENCE_EXTERNAL_WARNINGS diff --git a/ThirdParty/custom-opm-common/opm-common/opm/common/utility/platform_dependent/reenable_warnings.h b/ThirdParty/custom-opm-common/opm-common/opm/common/utility/platform_dependent/reenable_warnings.h deleted file mode 100644 index 1967530e3a..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/common/utility/platform_dependent/reenable_warnings.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - Copyright 2014 SINTEF ICT, Applied Mathematics. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -// Note: this file shall not have include guards or #pragma once. - -#ifdef SILENCE_EXTERNAL_WARNINGS - -// To use this feature, we must have sufficiently new compiler. - -// Using gcc is ok if version 4.6 or newer. -#if defined(__GNUC__) -# define __GNUC_VERSION__ (__GNUC__ * 100 \ - + __GNUC_MINOR__ * 1) -# if (__GNUC_VERSION__ >= 406) -# define GNU_COMPILER_OK 1 -# else -# define GNU_COMPILER_OK 0 -# endif -#else -# define GNU_COMPILER_OK 0 -#endif - -// Uncertain what version of clang to require, -// assume all versions are fine. -#if defined(__clang__) -# define CLANG_COMPILER_OK 1 -#else -# define CLANG_COMPILER_OK 0 -#endif - -// More compilers can be added here if necessary. -#define COMPATIBLE_COMPILER (GNU_COMPILER_OK || CLANG_COMPILER_OK) - -// If compiler is compatible, pop current warning level. -// Note that both clang and (newer) gcc accept the -// "#pragma GCC diagnostic" syntax. -#if COMPATIBLE_COMPILER -#pragma GCC diagnostic pop -#endif // COMPATIBLE_COMPILER - -#endif // SILENCE_EXTERNAL_WARNINGS diff --git a/ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/EGrid.hpp b/ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/EGrid.hpp deleted file mode 100644 index 6614120cfd..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/EGrid.hpp +++ /dev/null @@ -1,115 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#ifndef OPM_IO_EGRID_HPP -#define OPM_IO_EGRID_HPP - -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -namespace Opm { namespace EclIO { - -class EGrid : public EclFile -{ -public: - explicit EGrid(const std::string& filename, std::string grid_name = "global"); - - int global_index(int i, int j, int k) const; - int active_index(int i, int j, int k) const; - - const std::array& dimension() const { return nijk; } - - std::array ijk_from_active_index(int actInd) const; - std::array ijk_from_global_index(int globInd) const; - - void getCellCorners(int globindex, std::array& X, std::array& Y, std::array& Z); - void getCellCorners(const std::array& ijk, std::array& X, std::array& Y, std::array& Z); - - std::vector> getXYZ_layer(int layer, bool bottom=false); - std::vector> getXYZ_layer(int layer, const std::array& box, bool bottom=false); - - int activeCells() const { return nactive; } - int totalNumberOfCells() const { return nijk[0] * nijk[1] * nijk[2]; } - - void load_grid_data(); - void load_nnc_data(); - bool is_radial() const { return m_radial; } - - const std::vector& hostCellsGlobalIndex() const { return host_cells; } - std::vector> hostCellsIJK(); - - // zero based: i1, j1,k1, i2,j2,k2, transmisibility - using NNCentry = std::tuple; - std::vector get_nnc_ijk(); - - const std::vector& list_of_lgrs() const { return lgr_names; } - - const std::vector& get_mapaxes() const { return m_mapaxes; } - const std::string& get_mapunits() const { return m_mapunits; } - -private: - Opm::filesystem::path inputFileName, initFileName; - std::string m_grid_name; - bool m_radial; - - std::vector m_mapaxes; - std::string m_mapunits; - - std::array nijk; - std::array host_nijk; - - int nactive; - mutable bool m_nncs_loaded; - - std::vector act_index; - std::vector glob_index; - - std::vector coord_array; - std::vector zcorn_array; - - std::vector nnc1_array; - std::vector nnc2_array; - std::vector transnnc_array; - std::vector host_cells; - - std::vector lgr_names; - - int zcorn_array_index; - int coord_array_index; - int actnum_array_index; - int nnc1_array_index; - int nnc2_array_index; - - std::vector get_zcorn_from_disk(int layer, bool bottom); - - void getCellCorners(const std::array& ijk, const std::vector& zcorn_layer, - std::array& X, std::array& Y, std::array& Z); - -}; - -}} // namespace Opm::EclIO - -#endif // OPM_IO_EGRID_HPP diff --git a/ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/EInit.hpp b/ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/EInit.hpp deleted file mode 100644 index 67fc2b04d3..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/EInit.hpp +++ /dev/null @@ -1,74 +0,0 @@ -/* - Copyright 2020 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#ifndef OPM_IO_EINIT_HPP -#define OPM_IO_EINIT_HPP - -#include - -#include -#include -#include - -namespace Opm { namespace EclIO { - -class EInit : public EclFile -{ -public: - explicit EInit(const std::string& filename); - - const std::vector& list_of_lgrs() const { return lgr_names; } - - std::vector list_arrays() const; - std::vector list_arrays(const std::string& grid_name) const; - - const std::array& grid_dimension(const std::string& grid_name = "global") const; - int activeCells(const std::string& grid_name = "global") const; - - bool hasLGR(const std::string& name) const; - - template - const std::vector& getInitData(const std::string& name, const std::string& grid_name = "global") - { - return this->ImplgetInitData(name, grid_name); - } - -protected: - - template - const std::vector& ImplgetInitData(const std::string& name, const std::string& grid_name = "global"); - -private: - std::array global_nijk; - std::vector> lgr_nijk; - - int global_nactive; - std::vector lgr_nactive; - - std::vector lgr_names; - - std::map global_array_index; - std::vector> lgr_array_index; - - int get_array_index(const std::string& name, const std::string& grid_name) const; - int get_lgr_index(const std::string& grid_name) const; -}; - -}} // namespace Opm::EclIO - -#endif // OPM_IO_EINIT_HPP diff --git a/ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/ERft.hpp b/ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/ERft.hpp deleted file mode 100644 index ac4fc876f9..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/ERft.hpp +++ /dev/null @@ -1,94 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#ifndef OPM_IO_ERFT_HPP -#define OPM_IO_ERFT_HPP - -#include - -#include -#include -#include -#include -#include -#include -#include - -namespace Opm { namespace EclIO { - -class ERft : public EclFile -{ -public: - explicit ERft(const std::string &filename); - - using RftDate = std::tuple; - template - const std::vector& getRft(const std::string& name, const std::string& wellName, - const RftDate& date) const; - - template - const std::vector& getRft(const std::string& name, const std::string& wellName, - int year, int month, int day) const; - template - const std::vector& getRft(const std::string& name, int reportIndex) const; - - std::vector listOfWells() const; - std::vector listOfdates() const; - - using RftReportList = std::vector>; - const RftReportList& listOfRftReports() const { return rftReportList; } - - bool hasRft(const std::string& wellName, const RftDate& date) const; - bool hasRft(const std::string& wellName, int year, int month, int day) const; - - std::vector listOfRftArrays(int reportIndex ) const; - - std::vector listOfRftArrays(const std::string& wellName, - const RftDate& date) const; - - std::vector listOfRftArrays(const std::string& wellName, - int year, int month, int day) const; - - bool hasArray(const std::string& arrayName, const std::string& wellName, - const RftDate& date) const; - - bool hasArray(const std::string& arrayName, int reportInd) const; - - int numberOfReports() { return numReports; } - -private: - std::map> arrIndexRange; - int numReports; - std::vector timeList; - - std::set wellList; - std::set dateList; - RftReportList rftReportList; - - std::map,int> reportIndices; // mapping report index to wellName and date (tupe) - - int getReportIndex(const std::string& wellName, const RftDate& date) const; - - int getArrayIndex(const std::string& name, int reportIndex) const; - int getArrayIndex(const std::string& name, const std::string& wellName, - const RftDate& date) const; -}; - -}} // namespace Opm::EclIO - -#endif // OPM_IO_ERFT_HPP diff --git a/ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/ERsm.hpp b/ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/ERsm.hpp deleted file mode 100644 index d44c00b79a..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/ERsm.hpp +++ /dev/null @@ -1,79 +0,0 @@ -/* - Copyright 2020 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef OPM_IO_ERSM_HPP -#define OPM_IO_ERSM_HPP - -#include -#include -#include -#include -#include - -#include -#include - -namespace Opm { namespace EclIO { - -/* - Small class to load RSM files. The RSM file is a text based version of the - information found in the summary file. The format seems quite fragile - with - significant whitespace all over the place.The ambition of this ERsm clas is to - be able to do regression testing of the RSM files we export from the ESmry - class - it is not meant to be a rock-solid-works-in-every-lunar phase RSM - loader. -*/ -class ESmry; - -class ERsm -{ - -struct Vector{ - SummaryNode header; - std::vector data; - - Vector(SummaryNode header_, std::size_t size_advice) : - header(std::move(header_)) - { - this->data.reserve(size_advice); - } -}; - - -public: - ERsm(const std::string& fname); - - const std::vector& dates() const; - const std::vector& days() const; - bool has_dates() const; - - const std::vector& get(const std::string& key) const; - bool has(const std::string& key) const; -private: - void load_block(std::deque& lines , std::size_t& vector_length); - - std::unordered_map vectors; - std::variant, std::vector> time; -}; - -bool cmp(const ESmry& esmr, const ERsm& ersm); - -} -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/ERst.hpp b/ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/ERst.hpp deleted file mode 100644 index c66d63b01c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/ERst.hpp +++ /dev/null @@ -1,103 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#ifndef OPM_IO_ERST_HPP -#define OPM_IO_ERST_HPP - -#include - -#include -#include -#include -#include -#include - - -namespace Opm { namespace EclIO { namespace OutputStream { - class Restart; -}}} - -namespace Opm { namespace EclIO { - -class ERst : public EclFile -{ -public: - explicit ERst(const std::string& filename); - - bool hasReportStepNumber(int number) const; - bool hasLGR(const std::string& gridname, int reportStepNumber) const; - - void loadReportStepNumber(int number); - - template - const std::vector& getRestartData(const std::string& name, int reportStepNumber) - { - return getRestartData(name,reportStepNumber, 0); - } - - template - const std::vector& getRestartData(const std::string& name, int reportStepNumber, int occurrence); - - template - const std::vector& getRestartData(int index, int reportStepNumber) - { - auto indRange = this->getIndexRange(reportStepNumber); - return this->get(index + std::get<0>(indRange)); - } - - template - const std::vector& getRestartData(const std::string& name, int reportStepNumber, const std::string& lgr_name); - - template - const std::vector& getRestartData(int index, int reportStepNumber, const std::string& lgr_name); - - int occurrence_count(const std::string& name, int reportStepNumber) const; - size_t numberOfReportSteps() const { return seqnum.size(); }; - - const std::vector& listOfReportStepNumbers() const { return seqnum; } - - std::vector listOfRstArrays(int reportStepNumber); - std::vector listOfRstArrays(int reportStepNumber, const std::string& lgr_name); - - friend class OutputStream::Restart; - -private: - int nReports; - std::vector seqnum; // report step numbers, from SEQNUM array in restart file - mutable std::unordered_map reportLoaded; - std::map> arrIndexRange; // mapping report step number to array indeces (start and end) - std::vector> lgr_names; // report step numbers, from SEQNUM array in restart file - - void initUnified(); - void initSeparate(const int number); - - int get_start_index_lgrname(int number, const std::string& lgr_name); - - int getArrayIndex(const std::string& name, int seqnum, int occurrence); - int getArrayIndex(const std::string& name, int number, const std::string& lgr_name); - - std::tuple getIndexRange(int reportStepNumber) const; - - std::streampos - restartStepWritePosition(const int seqnumValue) const; - -}; - -}} // namespace Opm::EclIO - -#endif // OPM_IO_ERST_HPP diff --git a/ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/ESmry.hpp b/ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/ESmry.hpp deleted file mode 100644 index 9f1b1a3d31..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/ESmry.hpp +++ /dev/null @@ -1,159 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#ifndef OPM_IO_ESMRY_HPP -#define OPM_IO_ESMRY_HPP - -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -namespace Opm { namespace EclIO { - -using ArrSourceEntry = std::tuple; -using TimeStepEntry = std::tuple; -using RstEntry = std::tuple; - -class ESmry -{ -public: - - // input is smspec (or fsmspec file) - explicit ESmry(const std::string& filename, bool loadBaseRunData=false); - - int numberOfVectors() const { return static_cast(nVect); } - - bool hasKey(const std::string& key) const; - - const std::vector& get(const std::string& name) const; - const std::vector& get(const SummaryNode& node) const; - std::vector dates() const; - - std::vector get_at_rstep(const std::string& name) const; - std::vector get_at_rstep(const SummaryNode& node) const; - std::vector dates_at_rstep() const; - - void LoadData(const std::vector& vectList) const; - void LoadData() const; - - bool make_esmry_file(); - - time_point startdate() const { return startdat; } - - const std::vector& keywordList() const; - std::vector keywordList(const std::string& pattern) const; - const std::vector& summaryNodeList() const; - - int timestepIdxAtReportstepStart(const int reportStep) const; - - size_t numberOfTimeSteps() const { return nTstep; } - - const std::string& get_unit(const std::string& name) const; - const std::string& get_unit(const SummaryNode& node) const; - - void write_rsm(std::ostream&) const; - void write_rsm_file(std::optional = std::nullopt) const; - - bool all_steps_available(); - - void ijk_from_global_index(int glob, int &i, int &j, int &k) const; - -private: - - filesystem::path inputFileName; - RstEntry restart_info; - - int nI, nJ, nK, nSpecFiles; - bool fromSingleRun; - size_t nVect, nTstep; - - std::vector formattedFiles; - std::vector dataFileList; - mutable std::vector> vectorData; - mutable std::vector vectorLoaded; - std::vector timeStepList; - std::vector miniStepList; - std::vector> arrayPos; - std::vector keyword; - std::map keyword_index; - std::vector nParamsSpecFile; - - std::vector> keywordListSpecFile; - - std::vector seqIndex; - std::vector mini_steps; - - - std::vector summaryNodes; - std::unordered_map kwunits; - - time_point startdat; - - std::vector checkForMultipleResultFiles(const filesystem::path& rootN, bool formatted) const; - - void getRstString(const std::vector& restartArray, - filesystem::path& pathRst, - filesystem::path& rootN) const; - - void updatePathAndRootName(filesystem::path& dir, filesystem::path& rootN) const; - - std::string makeKeyString(const std::string& keyword, const std::string& wgname, int num) const; - - std::string unpackNumber(const SummaryNode&) const; - std::string lookupKey(const SummaryNode&) const; - - - void write_block(std::ostream &, bool write_dates, const std::vector& time_column, const std::vector&) const; - - template - std::vector rstep_vector(const std::vector& full_vector) const { - std::vector result; - result.reserve(seqIndex.size()); - - for (const auto& ind : seqIndex){ - result.push_back(full_vector[ind]); - } - - return result; - } - - std::vector> getListOfArrays(std::string filename, bool formatted); - std::vector makeKeywPosVector(int speInd) const; - std::string read_string_from_disk(std::fstream& fileH, uint64_t size) const; - - void read_ministeps_from_disk(); - int read_ministep_formatted(std::fstream& fileH); -}; - -}} // namespace Opm::EclIO - -inline std::ostream& operator<<(std::ostream& os, const Opm::EclIO::ESmry& smry) { - smry.write_rsm(os); - - return os; -} - -#endif // OPM_IO_ESMRY_HPP diff --git a/ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/EclFile.hpp b/ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/EclFile.hpp deleted file mode 100644 index 38af36a3e0..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/EclFile.hpp +++ /dev/null @@ -1,118 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#ifndef OPM_IO_ECLFILE_HPP -#define OPM_IO_ECLFILE_HPP - -#include - -#include -#include -#include -#include -#include -#include -#include - -namespace Opm { namespace EclIO { - -class EclFile -{ -public: - struct Formatted { - bool value; - }; - - explicit EclFile(const std::string& filename, bool preload = false); - EclFile(const std::string& filename, Formatted fmt, bool preload = false); - bool formattedInput() const { return formatted; } - - void loadData(); // load all data - void loadData(const std::string& arrName); // load all arrays with array name equal to arrName - void loadData(int arrIndex); // load data based on array indices in vector arrIndex - void loadData(const std::vector& arrIndex); // load data based on array indices in vector arrIndex - - void clearData() - { - inte_array.clear(); - real_array.clear(); - doub_array.clear(); - logi_array.clear(); - char_array.clear(); - } - - using EclEntry = std::tuple; - std::vector getList() const; - - const std::vector& getElementSizeList() const { return array_element_size; } - - template - const std::vector& get(int arrIndex); - - template - const std::vector& get(const std::string& name); - - bool hasKey(const std::string &name) const; - std::size_t count(const std::string& name) const; - - const std::vector& arrayNames() const { return array_name; } - std::size_t size() const; - bool is_ix() const; - -protected: - bool formatted; - std::string inputFilename; - - std::unordered_map> inte_array; - std::unordered_map> logi_array; - std::unordered_map> doub_array; - std::unordered_map> real_array; - std::unordered_map> char_array; - - std::vector array_name; - std::vector array_type; - std::vector array_size; - std::vector array_element_size; - - std::vector ifStreamPos; - - std::map array_index; - - template - const std::vector& getImpl(int arrIndex, eclArrType type, - const std::unordered_map>& array, - const std::string& typeStr); - - std::streampos - seekPosition(const std::vector::size_type arrIndex) const; - -private: - std::vector arrayLoaded; - - void loadBinaryArray(std::fstream& fileH, std::size_t arrIndex); - void loadFormattedArray(const std::string& fileStr, std::size_t arrIndex, int64_t fromPos); - void load(bool preload); - - std::vector get_bin_logi_raw_values(int arrIndex) const; - std::vector get_fmt_real_raw_str_values(int arrIndex) const; - -}; - -}} // namespace Opm::EclIO - -#endif // OPM_IO_ECLFILE_HPP diff --git a/ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/EclIOdata.hpp b/ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/EclIOdata.hpp deleted file mode 100644 index eb349f5ee6..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/EclIOdata.hpp +++ /dev/null @@ -1,71 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#ifndef OPM_IO_ECLIODATA_HPP -#define OPM_IO_ECLIODATA_HPP - -#include - -namespace Opm { namespace EclIO { - - // type MESS have no assisiated data - enum eclArrType { - INTE, REAL, DOUB, CHAR, LOGI, MESS, C0NN - }; - - // named constants related to binary file format - const unsigned int true_value_ecl = 0xffffffff; - const unsigned int true_value_ix = 0x1000000; - const unsigned int false_value = 0x00000000; - - - const int sizeOfInte = 4; // number of bytes pr integer (inte) element - const int sizeOfReal = 4; // number of bytes pr float (real) element - const int sizeOfDoub = 8; // number of bytes pr double (doub) element - const int sizeOfLogi = 4; // number of bytes pr bool (logi) element - const int sizeOfChar = 8; // number of bytes pr string (char) element - - const int MaxBlockSizeInte = 4000; // Maximum block size for INTE arrays in binary files - const int MaxBlockSizeReal = 4000; // Maximum block size for REAL arrays in binary files - const int MaxBlockSizeDoub = 8000; // Maximum block size for DOUB arrays in binary files - const int MaxBlockSizeLogi = 4000; // Maximum block size for LOGI arrays in binary files - const int MaxBlockSizeChar = 840; // Maximum block size for CHAR arrays in binary files - - // named constants related to formatted file file format - const int MaxNumBlockInte = 1000; // maximum number of Inte values in block => hard line shift - const int MaxNumBlockReal = 1000; // maximum number of Real values in block => hard line shift - const int MaxNumBlockDoub = 1000; // maximum number of Doub values in block => hard line shift - const int MaxNumBlockLogi = 1000; // maximum number of Logi values in block => hard line shift - const int MaxNumBlockChar = 105; // maximum number of Char values in block => hard line shift - - const int numColumnsInte = 6; // number of columns for Inte values - const int numColumnsReal = 4; // number of columns for Real values - const int numColumnsDoub = 3; // number of columns for Doub values - const int numColumnsLogi = 25; // number of columns for Logi values - const int numColumnsChar = 7; // number of columns for Char values - - const int columnWidthInte = 12; // number of characters fore each Inte Element - const int columnWidthReal = 17; // number of characters fore each Inte Element - const int columnWidthDoub = 23; // number of characters fore each Inte Element - const int columnWidthLogi = 3; // number of characters fore each Inte Element - const int columnWidthChar = 11; // number of characters fore each Inte Element - -}} // namespace Opm::EclIO - -#endif // OPM_IO_ECLIODATA_HPP diff --git a/ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/EclOutput.hpp b/ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/EclOutput.hpp deleted file mode 100644 index 74628ce416..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/EclOutput.hpp +++ /dev/null @@ -1,130 +0,0 @@ -/* - Copyright 2019 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ -#ifndef OPM_IO_ECLOUTPUT_HPP -#define OPM_IO_ECLOUTPUT_HPP - -#include -#include -#include -#include -#include - -#include -#include -#include - -namespace Opm { namespace EclIO { namespace OutputStream { - class Restart; - class SummarySpecification; -}}} - -namespace Opm { namespace EclIO { - -class EclOutput -{ -public: - EclOutput(const std::string& filename, - const bool formatted, - const std::ios_base::openmode mode = std::ios::out); - - template - void write(const std::string& name, - const std::vector& data) - { - eclArrType arrType = MESS; - int element_size = 4; - - if (typeid(T) == typeid(int)) - arrType = INTE; - else if (typeid(T) == typeid(float)) - arrType = REAL; - else if (typeid(T) == typeid(double)){ - arrType = DOUB; - element_size = 8; - } else if (typeid(T) == typeid(bool)) - arrType = LOGI; - else if (typeid(T) == typeid(char)) - arrType = MESS; - - if (isFormatted) - { - writeFormattedHeader(name, static_cast(data.size()), arrType, element_size); - if (arrType != MESS) - writeFormattedArray(data); - } - else - { - writeBinaryHeader(name, static_cast(data.size()), arrType, element_size); - if (arrType != MESS) - writeBinaryArray(data); - } - } - - // when this function is used array type will be assumed C0NN (not CHAR). - // Also in cases where element size is 8 or less, element size will be 8. - - void write(const std::string& name, const std::vector& data, int element_size); - - void message(const std::string& msg); - void flushStream(); - - void set_ix() { ix_standard = true; } - - friend class OutputStream::Restart; - friend class OutputStream::SummarySpecification; - -private: - void writeBinaryHeader(const std::string& arrName, int64_t size, eclArrType arrType, int element_size); - - template - void writeBinaryArray(const std::vector& data); - - void writeBinaryCharArray(const std::vector& data, int element_size); - void writeBinaryCharArray(const std::vector>& data); - - void writeFormattedHeader(const std::string& arrName, int size, eclArrType arrType, int element_size); - - template - void writeFormattedArray(const std::vector& data); - - void writeFormattedCharArray(const std::vector& data, int element_size); - void writeFormattedCharArray(const std::vector>& data); - - void writeArrayType(const eclArrType arrType); - std::string make_real_string_ecl(float value) const; - std::string make_real_string_ix(float value) const; - std::string make_doub_string_ecl(double value) const; - std::string make_doub_string_ix(double value) const; - - bool isFormatted, ix_standard; - std::ofstream ofileH; -}; - - -template<> -void EclOutput::write(const std::string& name, - const std::vector& data); - -template <> -void EclOutput::write> - (const std::string& name, - const std::vector>& data); - -}} // namespace Opm::EclIO - -#endif // OPM_IO_ECLOUTPUT_HPP diff --git a/ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/EclUtil.hpp b/ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/EclUtil.hpp deleted file mode 100644 index c9cab8ef3c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/EclUtil.hpp +++ /dev/null @@ -1,86 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#ifndef OPM_IO_ECLUTIL_HPP -#define OPM_IO_ECLUTIL_HPP - -#include - -#include -#include -#include -#include - -namespace Opm { namespace EclIO { - - int flipEndianInt(int num); - int64_t flipEndianLongInt(int64_t num); - float flipEndianFloat(float num); - double flipEndianDouble(double num); - bool isEOF(std::fstream* fileH); - bool fileExists(const std::string& filename); - bool isFormatted(const std::string& filename); - bool is_number(const std::string& numstr); - - std::tuple block_size_data_binary(eclArrType arrType); - std::tuple block_size_data_formatted(eclArrType arrType); - - std::string trimr(const std::string &str1); - - uint64_t sizeOnDiskBinary(int64_t num, Opm::EclIO::eclArrType arrType, int elementSize); - uint64_t sizeOnDiskFormatted(const int64_t num, Opm::EclIO::eclArrType arrType, int elementSize); - - void readBinaryHeader(std::fstream& fileH, std::string& tmpStrName, - int& tmpSize, std::string& tmpStrType); - - void readBinaryHeader(std::fstream& fileH, std::string& arrName, - int64_t& size, Opm::EclIO::eclArrType &arrType, int& elementSize); - - void readFormattedHeader(std::fstream& fileH, std::string& arrName, - int64_t &num, Opm::EclIO::eclArrType &arrType, int& elementSize); - - template - std::vector readBinaryArray(std::fstream& fileH, const int64_t size, Opm::EclIO::eclArrType type, - std::function& flip, int elementSize); - - std::vector readBinaryInteArray(std::fstream &fileH, const int64_t size); - std::vector readBinaryRealArray(std::fstream& fileH, const int64_t size); - std::vector readBinaryDoubArray(std::fstream& fileH, const int64_t size); - std::vector readBinaryLogiArray(std::fstream &fileH, const int64_t size); - std::vector readBinaryRawLogiArray(std::fstream &fileH, const int64_t size); - std::vector readBinaryCharArray(std::fstream& fileH, const int64_t size); - std::vector readBinaryC0nnArray(std::fstream& fileH, const int64_t size, int elementSize); - - template - std::vector readFormattedArray(const std::string& file_str, const int size, int64_t fromPos, - std::function& process); - - std::vector readFormattedInteArray(const std::string& file_str, const int64_t size, int64_t fromPos); - - std::vector readFormattedCharArray(const std::string& file_str, const int64_t size, - int64_t fromPos, int elementSize); - - std::vector readFormattedRealArray(const std::string& file_str, const int64_t size, int64_t fromPos); - std::vector readFormattedRealRawStrings(const std::string& file_str, const int64_t size, int64_t fromPos); - - std::vector readFormattedLogiArray(const std::string& file_str, const int64_t size, int64_t fromPos); - std::vector readFormattedDoubArray(const std::string& file_str, const int64_t size, int64_t fromPos); - -}} // namespace Opm::EclIO - -#endif // OPM_IO_ECLUTIL_HPP diff --git a/ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/ExtESmry.hpp b/ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/ExtESmry.hpp deleted file mode 100644 index 3d93e9e7e7..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/ExtESmry.hpp +++ /dev/null @@ -1,106 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#ifndef OPM_IO_ExtESmry_HPP -#define OPM_IO_ExtESmry_HPP - -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -namespace Opm { namespace EclIO { - -using ArrSourceEntry = std::tuple; -using TimeStepEntry = std::tuple; -using RstEntry = std::tuple; - -// start, rstart + rstnum, keycheck, units, rstep, tstep -using LodsmryHeadType = std::tuple, std::vector, - std::vector, std::vector>; - -class ExtESmry -{ -public: - - // input is esmry, only binary supported. - explicit ExtESmry(const std::string& filename, bool loadBaseRunData=false); - - const std::vector& get(const std::string& name); - std::vector get_at_rstep(const std::string& name); - std::string& get_unit(const std::string& name); - - void loadData(); - void loadData(const std::vector& stringVect); - - time_point startdate() const { return m_startdat; } - - bool hasKey(const std::string& key) const; - - size_t numberOfTimeSteps() const { return m_nTstep; } - size_t numberOfVectors() const { return m_nVect; } - - const std::vector& keywordList() const { return m_keyword;} - std::vector keywordList(const std::string& pattern) const; - - std::vector dates(); - - bool all_steps_available(); - - -private: - filesystem::path m_inputFileName; - std::vector m_lodsmry_files; - - bool m_loadBaseRun; - std::vector> m_keyword_index; - std::vector> m_tstep_range; - std::vector m_keyword; - std::vector m_rstep; - std::vector m_tstep; - std::vector> m_rstep_v; - std::vector> m_tstep_v; - std::vector> m_vectorData; - std::vector m_vectorLoaded; - std::unordered_map kwunits; - - size_t m_nVect; - std::vector m_nTstep_v; - size_t m_nTstep; - std::vector m_seqIndex; - - std::vector m_lod_offset; - std::vector m_lod_arr_size; - - time_point m_startdat; - - uint64_t open_esmry(Opm::filesystem::path& inputFileName, LodsmryHeadType& lodsmry_head); - - void updatePathAndRootName(Opm::filesystem::path& dir, Opm::filesystem::path& rootN); -}; - -}} // namespace Opm::EclIO - - -#endif // OPM_IO_ExtESmry_HPP diff --git a/ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/OutputStream.hpp b/ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/OutputStream.hpp deleted file mode 100644 index 8e8f0274e4..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/OutputStream.hpp +++ /dev/null @@ -1,456 +0,0 @@ -/* - Copyright (c) 2019 Equinor ASA - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef OPM_IO_OUTPUTSTREAM_HPP_INCLUDED -#define OPM_IO_OUTPUTSTREAM_HPP_INCLUDED - -#include -#include - -#include -#include -#include -#include -#include -#include - -namespace Opm { namespace EclIO { - - class EclOutput; - -}} // namespace Opm::EclIO - -namespace Opm { namespace EclIO { namespace OutputStream { - - struct Formatted { bool set; }; - struct Unified { bool set; }; - - /// Abstract representation of an ECLIPSE-style result set. - struct ResultSet - { - /// Output directory. Commonly "." or location of run's .DATA file. - std::string outputDir; - - /// Base name of simulation run. - std::string baseName; - }; - - /// File manager for "init" output streams. - class Init - { - public: - /// Constructor. - /// - /// Opens file stream for writing. - /// - /// \param[in] rset Output directory and base name of output stream. - /// - /// \param[in] fmt Whether or not to create formatted output files. - explicit Init(const ResultSet& rset, - const Formatted& fmt); - - ~Init(); - - Init(const Init& rhs) = delete; - Init(Init&& rhs); - - Init& operator=(const Init& rhs) = delete; - Init& operator=(Init&& rhs); - - /// Write integer data to underlying output stream. - /// - /// \param[in] kw Name of output vector (keyword). - /// - /// \param[in] data Output values. - void write(const std::string& kw, - const std::vector& data); - - /// Write boolean data to underlying output stream. - /// - /// \param[in] kw Name of output vector (keyword). - /// - /// \param[in] data Output values. - void write(const std::string& kw, - const std::vector& data); - - /// Write single precision floating point data to underlying - /// output stream. - /// - /// \param[in] kw Name of output vector (keyword). - /// - /// \param[in] data Output values. - void write(const std::string& kw, - const std::vector& data); - - /// Write double precision floating point data to underlying - /// output stream. - /// - /// \param[in] kw Name of output vector (keyword). - /// - /// \param[in] data Output values. - void write(const std::string& kw, - const std::vector& data); - - private: - /// Init file output stream. - std::unique_ptr stream_; - - /// Open output stream. - /// - /// Writes to \c stream_. - /// - /// \param[in] fname Filename of new output stream. - /// - /// \param[in] formatted Whether or not to create a - /// formatted output file. - void open(const std::string& fname, - const bool formatted); - - /// Access writable output stream. - EclOutput& stream(); - - /// Implementation function for public \c write overload set. - template - void writeImpl(const std::string& kw, - const std::vector& data); - }; - - /// File manager for restart output streams. - class Restart - { - public: - /// Constructor. - /// - /// Opens file stream pertaining to restart of particular report - /// step and also outputs a SEQNUM record in the case of a unified - /// output stream. - /// - /// Must be called before accessing the stream object through the - /// stream() member function. - /// - /// \param[in] rset Output directory and base name of output stream. - /// - /// \param[in] seqnum Sequence number of new report. One-based - /// report step ID. - /// - /// \param[in] fmt Whether or not to create formatted output files. - /// - /// \param[in] unif Whether or not to create unified output files. - explicit Restart(const ResultSet& rset, - const int seqnum, - const Formatted& fmt, - const Unified& unif); - - ~Restart(); - - Restart(const Restart& rhs) = delete; - Restart(Restart&& rhs); - - Restart& operator=(const Restart& rhs) = delete; - Restart& operator=(Restart&& rhs); - - /// Generate a message string (keyword type 'MESS') in underlying - /// output stream. - /// - /// \param[in] msg Message string (e.g., "STARTSOL"). - void message(const std::string& msg); - - /// Write integer data to underlying output stream. - /// - /// \param[in] kw Name of output vector (keyword). - /// - /// \param[in] data Output values. - void write(const std::string& kw, - const std::vector& data); - - /// Write boolean data to underlying output stream. - /// - /// \param[in] kw Name of output vector (keyword). - /// - /// \param[in] data Output values. - void write(const std::string& kw, - const std::vector& data); - - /// Write single precision floating point data to underlying - /// output stream. - /// - /// \param[in] kw Name of output vector (keyword). - /// - /// \param[in] data Output values. - void write(const std::string& kw, - const std::vector& data); - - /// Write double precision floating point data to underlying - /// output stream. - /// - /// \param[in] kw Name of output vector (keyword). - /// - /// \param[in] data Output values. - void write(const std::string& kw, - const std::vector& data); - - /// Write unpadded string data to underlying output stream. - /// - /// \param[in] kw Name of output vector (keyword). - /// - /// \param[in] data Output values. - void write(const std::string& kw, - const std::vector& data); - - /// Write padded character data (8 characters per string) - /// to underlying output stream. - /// - /// \param[in] kw Name of output vector (keyword). - /// - /// \param[in] data Output values. - void write(const std::string& kw, - const std::vector>& data); - - private: - /// Restart output stream. - std::unique_ptr stream_; - - /// Open unified output file and place stream's output indicator - /// in appropriate location. - /// - /// Writes to \c stream_. - /// - /// \param[in] fname Filename of output stream. - /// - /// \param[in] formatted Whether or not to create a - /// formatted output file. - /// - /// \param[in] seqnum Sequence number of new report. One-based - /// report step ID. - void openUnified(const std::string& fname, - const bool formatted, - const int seqnum); - - /// Open new output stream. - /// - /// Handles the case of separate output files or unified output file - /// that does not already exist. Writes to \c stream_. - /// - /// \param[in] fname Filename of new output stream. - /// - /// \param[in] formatted Whether or not to create a - /// formatted output file. - void openNew(const std::string& fname, - const bool formatted); - - /// Open existing output file and place stream's output indicator - /// in appropriate location. - /// - /// Writes to \c stream_. - /// - /// \param[in] fname Filename of output stream. - /// - /// \param[in] writePos Position at which to place stream's output - /// indicator. Use \code streampos{ streamoff{-1} } \endcode to - /// place output indicator at end of file (i.e, simple append). - void openExisting(const std::string& fname, - const bool formatted, - const std::streampos writePos); - - /// Access writable output stream. - /// - /// Must not be called prior to \c prepareStep. - EclOutput& stream(); - - /// Implementation function for public \c write overload set. - template - void writeImpl(const std::string& kw, - const std::vector& data); - }; - - /// File manager for RFT output streams - class RFT - { - public: - struct OpenExisting { bool set; }; - - /// Constructor. - /// - /// Opens file stream for writing. - /// - /// \param[in] rset Output directory and base name of output stream. - /// - /// \param[in] fmt Whether or not to create formatted output files. - /// - /// \param[in] existing Whether or not to open an existing output file. - explicit RFT(const ResultSet& rset, - const Formatted& fmt, - const OpenExisting& existing); - - ~RFT(); - - RFT(const RFT& rhs) = delete; - RFT(RFT&& rhs); - - RFT& operator=(const RFT& rhs) = delete; - RFT& operator=(RFT&& rhs); - - /// Write integer data to underlying output stream. - /// - /// \param[in] kw Name of output vector (keyword). - /// - /// \param[in] data Output values. - void write(const std::string& kw, - const std::vector& data); - - /// Write single precision floating point data to underlying - /// output stream. - /// - /// \param[in] kw Name of output vector (keyword). - /// - /// \param[in] data Output values. - void write(const std::string& kw, - const std::vector& data); - - /// Write padded character data (8 characters per string) - /// to underlying output stream. - /// - /// \param[in] kw Name of output vector (keyword). - /// - /// \param[in] data Output values. - void write(const std::string& kw, - const std::vector>& data); - - private: - /// Init file output stream. - std::unique_ptr stream_; - - /// Open output stream. - /// - /// Writes to \c stream_. - /// - /// \param[in] fname Filename of new output stream. - /// - /// \param[in] formatted Whether or not to create a - /// formatted output file. - /// - /// \param[in] existing Whether or not to open an - /// existing output file (mode ios_base::app). - void open(const std::string& fname, - const bool formatted, - const bool existing); - - /// Access writable output stream. - EclOutput& stream(); - - /// Implementation function for public \c write overload set. - template - void writeImpl(const std::string& kw, - const std::vector& data); - }; - - class SummarySpecification - { - public: - using StartTime = time_point; - - enum class UnitConvention - { - Metric = 1, - Field = 2, - Lab = 3, - Pvt_M = 4, - }; - - struct RestartSpecification - { - std::string root; - int step; - }; - - class Parameters - { - public: - void add(const std::string& keyword, - const std::string& wgname, - const int num, - const std::string& unit); - - friend class SummarySpecification; - - private: - std::vector> keywords{}; - std::vector> wgnames{}; - std::vector nums{}; - std::vector> units{}; - }; - - explicit SummarySpecification(const ResultSet& rset, - const Formatted& fmt, - const UnitConvention uconv, - const std::array& cartDims, - const RestartSpecification& restart, - const StartTime start); - - ~SummarySpecification(); - - SummarySpecification(const SummarySpecification& rhs) = delete; - SummarySpecification(SummarySpecification&& rhs); - - SummarySpecification& operator=(const SummarySpecification& rhs) = delete; - SummarySpecification& operator=(SummarySpecification&& rhs); - - void write(const Parameters& params); - - private: - int unit_; - int restartStep_; - std::array cartDims_; - StartTime startDate_; - std::vector> restart_; - - /// Summary specification (SMSPEC) file output stream. - std::unique_ptr stream_; - - void rewindStream(); - void flushStream(); - - EclOutput& stream(); - }; - - std::unique_ptr - createSummaryFile(const ResultSet& rset, - const int seqnum, - const Formatted& fmt, - const Unified& unif); - - /// Derive filename corresponding to output stream of particular result - /// set, with user-specified file extension. - /// - /// Low-level string concatenation routine that does not know specific - /// relations between base names and file extensions. Handles details - /// of base name ending in a period (full stop) or having a name that - /// might otherwise appear to contain a file extension (e.g., CASE.01). - /// - /// \param[in] rsetDescriptor Output directory and base name of result set. - /// - /// \param[in] ext Filename extension. - /// - /// \return outputDir/baseName.ext - std::string outputFileName(const ResultSet& rsetDescriptor, - const std::string& ext); - -}}} // namespace Opm::EclIO::OutputStream - -#endif // OPM_IO_OUTPUTSTREAM_HPP_INCLUDED diff --git a/ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/PaddedOutputString.hpp b/ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/PaddedOutputString.hpp deleted file mode 100644 index bdfb905a95..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/PaddedOutputString.hpp +++ /dev/null @@ -1,103 +0,0 @@ -/* - Copyright (c) 2018 Statoil ASA - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef OPM_PADDEDOUTPUTSTRING_HEADER_HPP -#define OPM_PADDEDOUTPUTSTRING_HEADER_HPP - -#include -#include -#include -#include -#include - -namespace Opm { namespace EclIO { - - /// Null-terminated, left adjusted, space padded array of N characters. - /// - /// Simple container of character data. Exists solely for purpose of - /// outputting std::string (or types convertible to std::string) as - /// Fortran-style \code character (len=N) \endcode values. - /// - /// \tparam N Number of characters. - template - class PaddedOutputString - { - public: - PaddedOutputString() - { - this->clear(); - } - - explicit PaddedOutputString(const std::string& s) - : PaddedOutputString() - { - this->copy_in(s.c_str(), s.size()); - } - - ~PaddedOutputString() = default; - - PaddedOutputString(const PaddedOutputString& rhs) = default; - PaddedOutputString(PaddedOutputString&& rhs) = default; - - PaddedOutputString& operator=(const PaddedOutputString& rhs) = default; - PaddedOutputString& operator=(PaddedOutputString&& rhs) = default; - - /// Assign from \code std::string \endcode. - PaddedOutputString& operator=(const std::string& s) - { - this->clear(); - this->copy_in(s.data(), s.size()); - - return *this; - } - - const char* c_str() const - { - return this->s_.data(); - } - - private: - enum : typename std::array::size_type { NChar = N }; - - std::array s_; - - /// Clear contents of internal array (fill with ' '). - void clear() - { - this->s_.fill(' '); - this->s_[NChar] = '\0'; - } - - /// Assign new value to internal array (left adjusted, space padded - /// and null-terminated). - void copy_in(const char* s, - const typename std::array::size_type len) - { - const auto ncpy = std::min(len, static_cast(NChar)); - - // Note: Not strcpy() or strncpy() here. The former has no bounds - // checking, the latter writes a null-terminator at position 'ncpy' - // (s_[ncpy]) which violates the post condition if ncpy < NChar. - std::memcpy(this->s_.data(), s, - ncpy * sizeof *this->s_.data()); - } - }; - -}} // Opm::EclIO -#endif // OPM_PADDEDOUTPUTSTRING_HEADER_HPP diff --git a/ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/RestartFileView.hpp b/ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/RestartFileView.hpp deleted file mode 100644 index 7d39d27cea..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/RestartFileView.hpp +++ /dev/null @@ -1,70 +0,0 @@ -/* - Copyright 2021 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef OPM_RESTART_FILE_VIEW_HPP -#define OPM_RESTART_FILE_VIEW_HPP - -#include -#include -#include - -namespace Opm { namespace EclIO { - class ERst; -}} // Opm::EclIO - -namespace Opm { namespace EclIO { - -class RestartFileView -{ -public: - explicit RestartFileView(std::shared_ptr restart_file, - const int report_step); - - ~RestartFileView(); - - RestartFileView(const RestartFileView& rhs) = delete; - RestartFileView(RestartFileView&& rhs); - - RestartFileView& operator=(const RestartFileView& rhs) = delete; - RestartFileView& operator=(RestartFileView&& rhs); - - std::size_t simStep() const; - int reportStep() const; - - int occurrenceCount(const std::string& vector) const; - - template - bool hasKeyword(const std::string& vector) const; - - template - const std::vector& - getKeyword(const std::string& vector, const int occurrence = 0) const; - - const std::vector& intehead() const; - const std::vector& logihead() const; - const std::vector& doubhead() const; - -private: - class Implementation; - std::unique_ptr pImpl_; -}; - -}} // Opm::RestartIO - -#endif // OPM_RESTART_FILE_VIEW_HPP diff --git a/ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/SummaryNode.hpp b/ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/SummaryNode.hpp deleted file mode 100644 index a26dcb4445..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/SummaryNode.hpp +++ /dev/null @@ -1,100 +0,0 @@ -/* - Copyright 2020 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef OPM_IO_SUMMARYNODE_HPP -#define OPM_IO_SUMMARYNODE_HPP - -#include -#include -#include -#include -#include - -namespace Opm { namespace EclIO { - -struct SummaryNode { - enum class Category { - Well, - Group, - Field, - Region, - Block, - Connection, - Segment, - Aquifer, - Node, - Miscellaneous, - Network, - Well_Lgr, - Block_Lgr, - Connection_Lgr - }; - - enum class Type { - Rate, - Total, - Ratio, - Pressure, - Count, - Mode, - ProdIndex, - Undefined, - }; - - std::string keyword; - Category category; - Type type; - std::string wgname; - int number; - std::string lgrname; - int lgri; - int lgrj; - int lgrk; - - size_t smspecKeywordIndex; - - std::optional fip_region; - - constexpr static int default_number { std::numeric_limits::min() }; - - std::string unique_key() const; - - using number_renderer = std::function; - std::string unique_key(number_renderer) const; - - bool is_user_defined() const; - - static Category category_from_keyword(const std::string&, const std::unordered_set &miscellaneous_keywords = {}); - - std::optional display_name() const; - std::optional display_number() const; - std::optional display_number(number_renderer) const; - - bool isRegionToRegion() const; - std::pair regionToRegionNumbers() const; - - static std::string create_key_lgr_well(const std::string& keyword, const std::string& wgname, const std::string& lgrname); - static std::string create_key_lgr_completion(const std::string& keyword, const std::string& wgname, const std::string& lgrname, int i, int j, int k); - static std::string create_key_lgr_block(const std::string& keyword, const std::string& lgrname, int i, int j, int k); - -}; - -}} // namespace Opm::EclIO - -#endif // OPM_IO_SUMMARYNODE_HPP diff --git a/ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/rst/connection.hpp b/ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/rst/connection.hpp deleted file mode 100644 index b0d865d574..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/rst/connection.hpp +++ /dev/null @@ -1,70 +0,0 @@ -/* - Copyright 2020 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef RST_CONNECTION -#define RST_CONNECTION - -#include - -#include - -namespace Opm { -class UnitSystem; - -namespace RestartIO { - -class Header; - -struct RstConnection { - RstConnection(const ::Opm::UnitSystem& unit_system, std::size_t rst_index, int nsconz, const int* icon, const float* scon, const double *xcon); - static double inverse_peaceman(double cf, double kh, double rw, double skin); - - std::size_t rst_index; - std::array ijk; - Connection::State state; - int drain_sat_table; - int imb_sat_table; - int completion; - Connection::Direction dir; - int segment; - Connection::CTFKind cf_kind; - - float skin_factor; - float cf; - float depth; - float diameter; - float kh; - float segdist_end; - float segdist_start; - - double oil_rate; - double water_rate; - double gas_rate; - double pressure; - double resv_rate; - double r0; -}; - - -} -} - - - - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/rst/group.hpp b/ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/rst/group.hpp deleted file mode 100644 index 5fddd0f974..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/rst/group.hpp +++ /dev/null @@ -1,93 +0,0 @@ -/* - Copyright 2020 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef RST_GROUP -#define RST_GROUP - -#include -#include -#include - -namespace Opm { -class UnitSystem; - -namespace RestartIO { - -struct RstHeader; - -struct RstGroup { - RstGroup(const UnitSystem& unit_system, - const RstHeader& header, - const std::string* zwel, - const int * igrp, - const float * sgrp, - const double * xgrp); - - std::string name; - - int parent_group; - int prod_cmode; - int winj_cmode; - int ginj_cmode; - int guide_rate_def; - - float oil_rate_limit; - float water_rate_limit; - float gas_rate_limit; - float liquid_rate_limit; - float water_surface_limit; - float water_reservoir_limit; - float water_reinject_limit; - float water_voidage_limit; - float gas_surface_limit; - float gas_reservoir_limit; - float gas_reinject_limit; - float gas_voidage_limit; - - double oil_production_rate; - double water_production_rate; - double gas_production_rate; - double liquid_production_rate; - double water_injection_rate; - double gas_injection_rate; - double wct; - double gor; - double oil_production_total; - double water_production_total; - double gas_production_total; - double voidage_production_total; - double water_injection_total; - double gas_injection_total; - double voidage_injection_total; - double oil_production_potential; - double water_production_potential; - double history_total_oil_production; - double history_total_water_production; - double history_total_water_injection; - double history_total_gas_production; - double history_total_gas_injection; -}; - - -} -} - - - - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/rst/header.hpp b/ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/rst/header.hpp deleted file mode 100644 index c177b795e2..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/rst/header.hpp +++ /dev/null @@ -1,130 +0,0 @@ -/* - Copyright 2020 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef RST_HEADER -#define RST_HEADER - -#include -#include -#include - -namespace Opm { -class UnitSystem; - -namespace RestartIO { - -struct RstHeader { - RstHeader(const UnitSystem& unit_system, const std::vector& intehead, const std::vector& logihead, const std::vector& doubhead); - - int nx; - int ny; - int nz; - int nactive; - int num_wells; - int ncwmax; - int max_wells_in_group; - int max_groups_in_field; - int max_wells_in_field; - int year; - int month; - int mday; - int hour; - int minute; - int microsecond; - int phase_sum; - int niwelz; - int nswelz; - int nxwelz; - int nzwelz; - int niconz; - int nsconz; - int nxconz; - int nigrpz; - int nsgrpz; - int nxgrpz; - int nzgrpz; - int ncamax; - int niaaqz; - int nsaaqz; - int nxaaqz; - int nicaqz; - int nscaqz; - int nacaqz; - int tstep; - int report_step; - int newtmx; - int newtmn; - int litmax; - int litmin; - int mxwsit; - int mxwpit; - int version; - int iprog; - int nsegwl; - int nswlmx; - int nsegmx; - int nlbrmx; - int nisegz; - int nrsegz; - int nilbrz; - int ntfip ; - int nmfipr; - int ngroup; - int nwgmax; - - bool e300_radial; - bool e100_radial; - bool enable_hysteris; - bool enable_msw; - bool is_live_oil; - bool is_wet_gas; - bool const_comp_oil; - bool dir_relperm; - bool reversible_relperm; - bool endscale; - bool dir_eps; - bool reversible_eps; - bool alt_eps; - bool group_control_active; - - double next_timestep1; - double next_timestep2; - double max_timestep; - double guide_rate_a; - double guide_rate_b; - double guide_rate_c; - double guide_rate_d; - double guide_rate_e; - double guide_rate_f; - double guide_rate_delay; - double guide_rate_damping; - double udq_range; - double udq_undefined; - double udq_eps; - - std::pair restart_info() const; -}; - - -} -} - - - - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/rst/segment.hpp b/ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/rst/segment.hpp deleted file mode 100644 index ba827b6689..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/rst/segment.hpp +++ /dev/null @@ -1,78 +0,0 @@ -/* - Copyright 2020 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef RST_SEGMENT -#define RST_SEGMENT - -#include - -#include -#include - -namespace Opm { -class UnitSystem; - -namespace RestartIO { - -struct RstSegment { - RstSegment(const ::Opm::UnitSystem& unit_system, int segment_number, const int* iseg, const double * rseg); - - int segment; - int outlet_segment; - int branch; - Segment::SegmentType segment_type; - int icd_scaling_mode; - ICDStatus icd_status; - - double dist_outlet; - double outlet_dz; - double diameter; - double roughness; - double area; - double volume; - double dist_bhp_ref; - double bhp_ref_dz; - double total_flow; - double water_flow_fraction; - double gas_flow_fraction; - double pressure; - double valve_length; - double valve_area; - double valve_flow_coeff; - double valve_max_area; - double base_strength; - double fluid_density; - double fluid_viscosity; - double critical_water_fraction; - double transition_region_width; - double max_emulsion_ratio; - double max_valid_flow_rate; - double icd_length; - double valve_area_fraction; - - std::vector inflow_segments; -}; - - -} -} - - - - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/rst/state.hpp b/ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/rst/state.hpp deleted file mode 100644 index c3d8689d67..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/rst/state.hpp +++ /dev/null @@ -1,103 +0,0 @@ -/* - Copyright 2020 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef RST_STATE -#define RST_STATE - -#include -#include - -#include -#include -#include -#include -#include - -#include - - -namespace Opm { - -namespace RestartIO { -struct RstState { - RstState(const ::Opm::UnitSystem& unit_system, - const std::vector& intehead, - const std::vector& logihead, - const std::vector& doubhead); - - RstState(const ::Opm::UnitSystem& unit_system, - const std::vector& intehead, - const std::vector& logihead, - const std::vector& doubhead, - const std::vector& zgrp, - const std::vector& igrp, - const std::vector& sgrp, - const std::vector& xgrp, - const std::vector& zwel, - const std::vector& iwel, - const std::vector& swel, - const std::vector& xwel, - const std::vector& icon, - const std::vector& scon, - const std::vector& xcon); - - RstState(const ::Opm::UnitSystem& unit_system, - const std::vector& intehead, - const std::vector& logihead, - const std::vector& doubhead, - const std::vector& zgrp, - const std::vector& igrp, - const std::vector& sgrp, - const std::vector& xgrp, - const std::vector& zwel, - const std::vector& iwel, - const std::vector& swel, - const std::vector& xwel, - const std::vector& icon, - const std::vector& scon, - const std::vector& xcon, - const std::vector& iseg, - const std::vector& rseg); - - - static RstState load(EclIO::ERst& rst_file, int report_step); - - const RstWell& get_well(const std::string& wname) const; - - const ::Opm::UnitSystem unit_system; - RstHeader header; - std::vector wells; - std::vector groups; - Tuning tuning; - -private: - void load_tuning(const std::vector& intehead, - const std::vector& doubhead); - - void add_groups(const std::vector& zgrp, - const std::vector& igrp, - const std::vector& sgrp, - const std::vector& xgrp); -}; -} -} - - - - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/rst/well.hpp b/ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/rst/well.hpp deleted file mode 100644 index e6ba452a22..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/io/eclipse/rst/well.hpp +++ /dev/null @@ -1,133 +0,0 @@ -/* - Copyright 2020 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef RST_WELL -#define RST_WELL - -#include -#include -#include -#include - - -#include -#include -#include - -namespace Opm { -class UnitSystem; - -namespace RestartIO { - -struct RstHeader; - -struct RstWell { - RstWell(const ::Opm::UnitSystem& unit_system, - const RstHeader& header, - const std::string& group_arg, - const std::string* zwel, - const int * iwel, - const float * swel, - const double * xwel, - const int * icon, - const float * scon, - const double * xcon); - - RstWell(const ::Opm::UnitSystem& unit_system, - const RstHeader& header, - const std::string& group_arg, - const std::string* zwel, - const int * iwel, - const float * swel, - const double * xwel, - const int * icon, - const float * scon, - const double * xcon, - const std::vector& iseg, - const std::vector& rseg); - - std::string name; - std::string group; - std::array ij; - std::pair k1k2; - WellType wtype; - int well_status; - int active_control; - int vfp_table; - bool allow_xflow; - int preferred_phase; - int hist_requested_control; - int msw_index; - int completion_ordering; - int pvt_table; - int msw_pressure_drop_model; - - float orat_target; - float wrat_target; - float grat_target; - float lrat_target; - float resv_target; - float thp_target; - float bhp_target_float; - float hist_lrat_target; - float hist_grat_target; - float hist_bhp_target; - float datum_depth; - float drainage_radius; - float efficiency_factor; - float alq_value; - - double oil_rate; - double water_rate; - double gas_rate; - double liquid_rate; - double void_rate; - double thp; - double flow_bhp; - double wct; - double gor; - double oil_total; - double water_total; - double gas_total; - double void_total; - double water_inj_total; - double gas_inj_total; - double void_inj_total; - double gas_fvf; - double bhp_target_double; - double hist_oil_total; - double hist_wat_total; - double hist_gas_total; - double hist_water_inj_total; - double hist_gas_inj_total; - double water_void_rate; - double gas_void_rate; - - const RstSegment segment(int segment_number) const; - std::vector connections; - std::vector segments; -}; - - -} -} - - - - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/json/JsonObject.hpp b/ThirdParty/custom-opm-common/opm-common/opm/json/JsonObject.hpp deleted file mode 100644 index 3872a9ca2f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/json/JsonObject.hpp +++ /dev/null @@ -1,70 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef JSON_OBJECT_HPP -#define JSON_OBJECT_HPP - -#include - -#include - -struct cJSON; - -namespace Json { - - class JsonObject { - public: - explicit JsonObject(const Opm::filesystem::path& jsonFile ); - explicit JsonObject(const std::string& inline_json); - explicit JsonObject(const char * inline_json); - explicit JsonObject(cJSON * root); - ~JsonObject(); - - bool has_item(const std::string& key) const; - JsonObject get_array_item( size_t index ) const; - JsonObject get_item(const std::string& key) const; - - std::string to_string() const; - std::string get_string(const std::string& key) const; - std::string as_string() const; - bool is_string( ) const; - - bool is_number( ) const; - int get_int(const std::string& key) const; - int as_int() const; - double get_double(const std::string& key) const; - double as_double() const; - - bool is_array( ) const; - bool is_object( ) const; - - size_t size() const; - private: - JsonObject get_scalar_object(const std::string& key) const; - void initialize(const std::string& inline_json); - cJSON * root; - bool owner; - }; -} - - - -#endif - - diff --git a/ThirdParty/custom-opm-common/opm-common/opm/output/OutputWriter.hpp b/ThirdParty/custom-opm-common/opm-common/opm/output/OutputWriter.hpp deleted file mode 100644 index f1c269bb7b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/output/OutputWriter.hpp +++ /dev/null @@ -1,103 +0,0 @@ -/* - Copyright (c) 2013 Uni Research AS - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef OPM_OUTPUT_WRITER_HPP -#define OPM_OUTPUT_WRITER_HPP - -#include - -#include -#include - -struct UnstructuredGrid; - -namespace Opm { - -// forward declaration -class EclipseState; -namespace parameter { class ParameterGroup; } -class WellState; -struct PhaseUsage; - -/*! - * Interface for writing non-compositional (blackoil, two-phase) simulation - * state to files. - * - * Use the create() function to setup a chain of writer based on the - * configuration values, e.g. - * - * \example - * \code{.cpp} - * ParameterGroup params (argc, argv, false); - * auto parser = std::make_shared ( - * params.get ("deck_filename")); - * - * std::unique_ptr writer = - * OutputWriter::create (params, parser); - * - * // before the first timestep - * writer->writeInit( current_posix_time, time_since_epoch_at_start ); - * - * // after each timestep - * writer->writeTimeStep - * - * \endcode - */ -class OutputWriter { -public: - /// Allow derived classes to be used in the unique_ptr that is returned - /// from the create() method. (Every class that should be delete'd should - /// have a proper constructor, and if the base class isn't virtual then - /// the compiler won't call the right one when the unique_ptr goes out of - /// scope). - virtual ~OutputWriter () { } - - /** - * Write the static data (grid, PVT curves, etc) to disk. - * - * This routine should be called before the first timestep (i.e. when - * timer.currentStepNum () == 0) - */ - virtual void writeInit( const NNC& nnc ) = 0; - - /*! - * \brief Write a blackoil reservoir state to disk for later inspection with - * visualization tools like ResInsight - * - * \param[in] report_step The current report step - * \param[in] current_posix_time Seconds elapsed since epoch - * \param[in] seconds_elapsed Seconds elapsed since simulation start - * \param[in] reservoirState The thermodynamic state of the reservoir - * \param[in] wells Well data - * - * This routine should be called after the timestep has been advanced, - * i.e. timer.currentStepNum () > 0. - */ - virtual void writeTimeStep( int report_step, - time_t current_posix_time, - double seconds_elapsed, - data::Solution reservoirState, - data::Wells, - bool isSubstep) = 0; - -}; - -} // namespace Opm - -#endif /* OPM_OUTPUT_WRITER_HPP */ diff --git a/ThirdParty/custom-opm-common/opm-common/opm/output/data/Aquifer.hpp b/ThirdParty/custom-opm-common/opm-common/opm/output/data/Aquifer.hpp deleted file mode 100644 index 0985b27d8d..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/output/data/Aquifer.hpp +++ /dev/null @@ -1,59 +0,0 @@ -/* - Copyright 2019 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#ifndef OPM_OUTPUT_AQUIFER_HPP -#define OPM_OUTPUT_AQUIFER_HPP - -#include -#include -#include - -#include - -namespace Opm { namespace data { - - /** - * Small struct that keeps track of data for output to restart/summary - * files. - */ - enum class AquiferType - { - Fetkovich, CarterTracey, - }; - - struct FetkovichData { - double initVolume; - double prodIndex; - double timeConstant; - }; - - struct AquiferData { - int aquiferID; //< One-based ID, range 1..NANAQ - double pressure; //< Aquifer pressure - double volume; //< Produced liquid volume - double initPressure; //< Aquifer's initial pressure - double datumDepth; //< Aquifer's pressure reference depth - - AquiferType type; - std::shared_ptr aquFet; - }; - -}} // Opm::data - -#endif // OPM_OUTPUT_AQUIFER_HPP diff --git a/ThirdParty/custom-opm-common/opm-common/opm/output/data/Cells.hpp b/ThirdParty/custom-opm-common/opm-common/opm/output/data/Cells.hpp deleted file mode 100644 index 42d8897250..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/output/data/Cells.hpp +++ /dev/null @@ -1,84 +0,0 @@ -/* - Copyright 2016 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#ifndef OPM_OUTPUT_CELLS_HPP -#define OPM_OUTPUT_CELLS_HPP - -#include -#include - -#include - -namespace Opm { - -namespace data { - - - /* - The 3D data which are saved to file are assembled in one large - container. In the container the data is tagged with an element - from the TargetType enum which indicates why they they have been - added to the container - and where they are headed. - - RESTART_SOLUTION : Fields which represent primary variables, and - are reqired for restart. Typically pressure and - suturation. WIll end up in the SOLUTION section of the restart - file. - - RESTART_AUXILIARY : Fields with extra information, not required - for restart. Examples of this include fluid in place values or - evaluations of relative permeability. Will end up in the - restart file. - - SUMMARY : Fields which are added only to serve as input data for - calculations of summary results. The Summary implementation can - use data with any tag value, but if it is tagged as SUMMARY it - will not be output anywhere else. - - INIT : Fields which should go to the INIT file. - */ - - - enum class TargetType { - RESTART_SOLUTION, - RESTART_AUXILIARY, - SUMMARY, - INIT, - }; - - /** - * Small struct that keeps track of data for output to restart/summary files. - */ - struct CellData { - UnitSystem::measure dim; //< Dimension of the data to write - std::vector data; //< The actual data itself - TargetType target; - - bool operator==(const CellData& cell2) const - { - return dim == cell2.dim && - data == cell2.data && - target == cell2.target; - } - }; - -} -} - -#endif //OPM_OUTPUT_CELLS_HPP diff --git a/ThirdParty/custom-opm-common/opm-common/opm/output/data/Groups.hpp b/ThirdParty/custom-opm-common/opm-common/opm/output/data/Groups.hpp deleted file mode 100644 index 1555e0c18e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/output/data/Groups.hpp +++ /dev/null @@ -1,112 +0,0 @@ -/* - Copyright 2016 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#ifndef OPM_OUTPUT_GROUPS_HPP -#define OPM_OUTPUT_GROUPS_HPP - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -namespace Opm { - - namespace data { - - struct currentGroupConstraints { - Opm::Group::ProductionCMode currentProdConstraint; - Opm::Group::InjectionCMode currentGasInjectionConstraint; - Opm::Group::InjectionCMode currentWaterInjectionConstraint; - - template - void write(MessageBufferType& buffer) const; - template - void read(MessageBufferType& buffer); - - inline currentGroupConstraints& set( Opm::Group::ProductionCMode cpc, - Opm::Group::InjectionCMode cgic, - Opm::Group::InjectionCMode cwic); - }; - - - class Group : public std::map { - public: - - template - void write(MessageBufferType& buffer) const { - unsigned int size = this->size(); - buffer.write(size); - for (const auto& witr : *this) { - const std::string& name = witr.first; - buffer.write(name); - const auto& pi_constr = witr.second; - pi_constr.write(buffer); - } - } - - template - void read(MessageBufferType& buffer) { - unsigned int size; - buffer.read(size); - for (size_t i = 0; i < size; ++i) { - std::string name; - buffer.read(name); - currentGroupConstraints cgc; - cgc.read(buffer); - this->emplace(name, cgc); - } - } - }; - - /* IMPLEMENTATIONS */ - - template - void currentGroupConstraints::write(MessageBufferType& buffer) const { - buffer.write(this->currentProdConstraint); - buffer.write(this->currentGasInjectionConstraint); - buffer.write(this->currentWaterInjectionConstraint); - } - - template - void currentGroupConstraints::read(MessageBufferType& buffer) { - buffer.read(this->currentProdConstraint); - buffer.read(this->currentGasInjectionConstraint); - buffer.read(this->currentWaterInjectionConstraint); - } - - - inline currentGroupConstraints& currentGroupConstraints::set( Opm::Group::ProductionCMode cpc, - Opm::Group::InjectionCMode cgic, - Opm::Group::InjectionCMode cwic) { - this->currentGasInjectionConstraint = cgic; - this->currentWaterInjectionConstraint = cwic; - this->currentProdConstraint = cpc; - return *this; - } - -}} // Opm::data - -#endif //OPM_OUTPUT_GROUPS_HPP diff --git a/ThirdParty/custom-opm-common/opm-common/opm/output/data/Solution.hpp b/ThirdParty/custom-opm-common/opm-common/opm/output/data/Solution.hpp deleted file mode 100644 index f635f6987c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/output/data/Solution.hpp +++ /dev/null @@ -1,65 +0,0 @@ -/* - Copyright 2016 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#ifndef OPM_OUTPUT_DATA_SOLUTION_HPP -#define OPM_OUTPUT_DATA_SOLUTION_HPP - -#include -#include - -#include -#include - -namespace Opm { -namespace data { - -class Solution : public std::map< std::string, data::CellData > { - using Base = std::map< std::string, data::CellData >; - - public: - Solution() = default; - explicit Solution( bool si ); - using Base::map; - using Base::insert; - - bool has( const std::string& ) const; - - /* - * Get the data field of the struct matching the requested key. Will - * throw std::out_of_range if they key does not exist. - */ - std::vector< double >& data(const std::string& ); - const std::vector< double >& data(const std::string& ) const; - - std::pair< iterator, bool > insert( std::string name, - UnitSystem::measure, - std::vector< double >, - TargetType ); - - void convertToSI( const UnitSystem& ); - void convertFromSI( const UnitSystem& ); - - private: - bool si = true; -}; - -} -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/output/data/Wells.hpp b/ThirdParty/custom-opm-common/opm-common/opm/output/data/Wells.hpp deleted file mode 100644 index bb5a8497d2..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/output/data/Wells.hpp +++ /dev/null @@ -1,636 +0,0 @@ -/* - Copyright 2016 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#ifndef OPM_OUTPUT_WELLS_HPP -#define OPM_OUTPUT_WELLS_HPP - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -namespace Opm { - - namespace data { - - class Rates { - /* Methods are defined inline for performance, as the actual *work* done - * is trivial, but somewhat frequent (typically once per time step per - * completion per well). - * - * To add a new rate type, add an entry in the enum with the correct - * shift, and if needed, increase the size type. Add a member variable - * and a new case in get_ref. - */ - - public: - Rates() = default; - enum class opt : uint32_t { - wat = (1 << 0), - oil = (1 << 1), - gas = (1 << 2), - polymer = (1 << 3), - solvent = (1 << 4), - energy = (1 << 5), - dissolved_gas = (1 << 6), - vaporized_oil = (1 << 7), - reservoir_water = (1 << 8), - reservoir_oil = (1 << 9), - reservoir_gas = (1 << 10), - productivity_index_water = (1 << 11), - productivity_index_oil = (1 << 12), - productivity_index_gas = (1 << 13), - well_potential_water = (1 << 14), - well_potential_oil = (1 << 15), - well_potential_gas = (1 << 16), - }; - - using enum_size = std::underlying_type< opt >::type; - - /// Query if a value is set. - inline bool has( opt ) const; - - /// Read the value indicated by m. Throws an exception if - /// if the requested value is unset. - inline double get( opt m ) const; - /// Read the value indicated by m. Returns a default value if - /// the requested value is unset. - inline double get( opt m, double default_value ) const; - /// Set the value specified by m. Throws an exception if multiple - /// values are requested. Returns a self-reference to support - /// chaining. - inline Rates& set( opt m, double value ); - - /// Returns true if any of the rates oil, gas, water is nonzero - inline bool flowing() const; - - template - void write(MessageBufferType& buffer) const; - template - void read(MessageBufferType& buffer); - - bool operator==(const Rates& rat2) const; - - private: - double& get_ref( opt ); - const double& get_ref( opt ) const; - - opt mask = static_cast< opt >( 0 ); - - double wat = 0.0; - double oil = 0.0; - double gas = 0.0; - double polymer = 0.0; - double solvent = 0.0; - double energy = 0.0; - double dissolved_gas = 0.0; - double vaporized_oil = 0.0; - double reservoir_water = 0.0; - double reservoir_oil = 0.0; - double reservoir_gas = 0.0; - double productivity_index_water = 0.0; - double productivity_index_oil = 0.0; - double productivity_index_gas = 0.0; - double well_potential_water = 0.0; - double well_potential_oil = 0.0; - double well_potential_gas = 0.0; - }; - - struct Connection { - using global_index = size_t; - static const constexpr int restart_size = 6; - - global_index index; - Rates rates; - double pressure; - double reservoir_rate; - double cell_pressure; - double cell_saturation_water; - double cell_saturation_gas; - double effective_Kh; - - bool operator==(const Connection& conn2) const - { - return index == conn2.index && - rates == conn2.rates && - pressure == conn2.pressure && - reservoir_rate == conn2.reservoir_rate && - cell_pressure == conn2.cell_pressure && - cell_saturation_water == conn2.cell_saturation_water && - cell_saturation_gas == conn2.cell_saturation_gas && - effective_Kh == conn2.effective_Kh; - } - - template - void write(MessageBufferType& buffer) const; - template - void read(MessageBufferType& buffer); - }; - - class SegmentPressures { - public: - enum class Value : std::size_t { - Pressure, PDrop, PDropHydrostatic, PDropAccel, PDropFriction, - }; - - double& operator[](const Value i) - { - return this->values_[this->index(i)]; - } - - double operator[](const Value i) const - { - return this->values_[this->index(i)]; - } - - bool operator==(const SegmentPressures& segpres2) const - { - return this->values_ == segpres2.values_; - } - - template - void write(MessageBufferType& buffer) const - { - for (const auto& value : this->values_) { - buffer.write(value); - } - } - - template - void read(MessageBufferType& buffer) - { - for (auto& value : this->values_) { - buffer.read(value); - } - } - - private: - constexpr static std::size_t numvals = 5; - - std::array values_; - - std::size_t index(const Value ix) const - { - return static_cast(ix); - } - }; - - struct Segment { - Rates rates; - SegmentPressures pressures; - std::size_t segNumber; - - bool operator==(const Segment& seg2) const - { - return rates == seg2.rates && - pressures == seg2.pressures && - segNumber == seg2.segNumber; - } - - template - void write(MessageBufferType& buffer) const; - - template - void read(MessageBufferType& buffer); - }; - - struct CurrentControl { - bool isProducer{true}; - - ::Opm::Well::ProducerCMode prod { - ::Opm::Well::ProducerCMode::CMODE_UNDEFINED - }; - - ::Opm::Well::InjectorCMode inj { - ::Opm::Well::InjectorCMode::CMODE_UNDEFINED - }; - - bool operator==(const CurrentControl& rhs) const - { - return (this->isProducer == rhs.isProducer) - && ((this->isProducer && (this->prod == rhs.prod)) || - (!this->isProducer && (this->inj == rhs.inj))); - } - - template - void write(MessageBufferType& buffer) const; - - template - void read(MessageBufferType& buffer); - }; - - struct Well { - Rates rates; - double bhp; - double thp; - double temperature; - int control; - std::vector< Connection > connections; - std::unordered_map segments; - CurrentControl current_control; - - inline bool flowing() const noexcept; - template - void write(MessageBufferType& buffer) const; - template - void read(MessageBufferType& buffer); - - const Connection* find_connection(Connection::global_index connection_grid_index) const { - const auto connection = std::find_if( this->connections.begin() , - this->connections.end() , - [=]( const Connection& c ) { - return c.index == connection_grid_index; }); - - if( connection == this->connections.end() ) - return nullptr; - - return &*connection; - } - - Connection* find_connection(Connection::global_index connection_grid_index) { - auto connection = std::find_if( this->connections.begin() , - this->connections.end() , - [=]( const Connection& c ) { - return c.index == connection_grid_index; }); - - if( connection == this->connections.end() ) - return nullptr; - - return &*connection; - } - - bool operator==(const Well& well2) const - { - return rates == well2.rates && - bhp == well2.bhp && - thp == well2.thp && - temperature == well2.temperature && - control == well2.control && - connections == well2.connections && - segments == well2.segments && - current_control == well2.current_control; - } - }; - - - class WellRates : public std::map { - public: - - double get(const std::string& well_name , Rates::opt m) const { - const auto& well = this->find( well_name ); - if( well == this->end() ) return 0.0; - - return well->second.rates.get( m, 0.0 ); - } - - - double get(const std::string& well_name , Connection::global_index connection_grid_index, Rates::opt m) const { - const auto& witr = this->find( well_name ); - if( witr == this->end() ) return 0.0; - - const auto& well = witr->second; - const auto& connection = std::find_if( well.connections.begin() , - well.connections.end() , - [=]( const Connection& c ) { - return c.index == connection_grid_index; }); - - if( connection == well.connections.end() ) - return 0.0; - - return connection->rates.get( m, 0.0 ); - } - - template - void write(MessageBufferType& buffer) const { - unsigned int size = this->size(); - buffer.write(size); - for (const auto& witr : *this) { - const std::string& name = witr.first; - buffer.write(name); - const Well& well = witr.second; - well.write(buffer); - } - } - - template - void read(MessageBufferType& buffer) { - unsigned int size; - buffer.read(size); - for (size_t i = 0; i < size; ++i) { - std::string name; - buffer.read(name); - Well well; - well.read(buffer); - this->emplace(name, well); - } - } - }; - - using Wells = WellRates; - - - /* IMPLEMENTATIONS */ - - inline bool Rates::has( opt m ) const { - const auto mand = static_cast< enum_size >( this->mask ) - & static_cast< enum_size >( m ); - - return static_cast< opt >( mand ) == m; - } - - inline double Rates::get( opt m ) const { - if( !this->has( m ) ) - throw std::invalid_argument( "Uninitialized value." ); - - return this->get_ref( m ); - } - - inline double Rates::get( opt m, double default_value ) const { - if( !this->has( m ) ) return default_value; - - return this->get_ref( m ); - } - - inline Rates& Rates::set( opt m, double value ) { - this->get_ref( m ) = value; - /* mask |= m */ - this->mask = static_cast< opt >( - static_cast< enum_size >( this->mask ) | - static_cast< enum_size >( m ) - ); - - return *this; - } - - inline bool Rates::operator==(const Rates& rate) const - { - return mask == rate.mask && - wat == rate.wat && - oil == rate.oil && - gas == rate.gas && - polymer == rate.polymer && - solvent == rate.solvent && - energy == rate.energy && - dissolved_gas == rate.dissolved_gas && - vaporized_oil == rate.vaporized_oil && - reservoir_water == rate.reservoir_water && - reservoir_oil == rate.reservoir_oil && - reservoir_gas == rate.reservoir_gas && - productivity_index_water == rate.productivity_index_water && - productivity_index_gas == rate.productivity_index_gas && - productivity_index_oil == rate.productivity_index_oil && - well_potential_water == rate.well_potential_water && - well_potential_oil == rate.well_potential_oil && - well_potential_gas == rate.well_potential_gas; - } - - - /* - * To avoid error-prone and repetitve work when extending rates with new - * values, the get+set methods use this helper get_ref to determine what - * member to manipulate. To add a new option, just add another case - * corresponding to the enum entry in Rates to this function. - * - * This is an implementation detail and understanding this has no - * significant impact on correct use of the class. - */ - inline const double& Rates::get_ref( opt m ) const { - switch( m ) { - case opt::wat: return this->wat; - case opt::oil: return this->oil; - case opt::gas: return this->gas; - case opt::polymer: return this->polymer; - case opt::solvent: return this->solvent; - case opt::energy: return this->energy; - case opt::dissolved_gas: return this->dissolved_gas; - case opt::vaporized_oil: return this->vaporized_oil; - case opt::reservoir_water: return this->reservoir_water; - case opt::reservoir_oil: return this->reservoir_oil; - case opt::reservoir_gas: return this->reservoir_gas; - case opt::productivity_index_water: return this->productivity_index_water; - case opt::productivity_index_oil: return this->productivity_index_oil; - case opt::productivity_index_gas: return this->productivity_index_gas; - case opt::well_potential_water: return this->well_potential_water; - case opt::well_potential_oil: return this->well_potential_oil; - case opt::well_potential_gas: return this->well_potential_gas; - } - - throw std::invalid_argument( - "Unknown value type '" - + std::to_string( static_cast< enum_size >( m ) ) - + "'" ); - - } - - inline double& Rates::get_ref( opt m ) { - return const_cast< double& >( - static_cast< const Rates* >( this )->get_ref( m ) - ); - } - - - bool inline Rates::flowing() const { - return ((this->wat != 0) || - (this->oil != 0) || - (this->gas != 0)); - } - - inline bool Well::flowing() const noexcept { - return this->rates.flowing(); - } - - template - void Rates::write(MessageBufferType& buffer) const { - buffer.write(this->mask); - buffer.write(this->wat); - buffer.write(this->oil); - buffer.write(this->gas); - buffer.write(this->polymer); - buffer.write(this->solvent); - buffer.write(this->energy); - buffer.write(this->dissolved_gas); - buffer.write(this->vaporized_oil); - buffer.write(this->reservoir_water); - buffer.write(this->reservoir_oil); - buffer.write(this->reservoir_gas); - buffer.write(this->productivity_index_water); - buffer.write(this->productivity_index_oil); - buffer.write(this->productivity_index_gas); - buffer.write(this->well_potential_water); - buffer.write(this->well_potential_oil); - buffer.write(this->well_potential_gas); - } - - template - void Connection::write(MessageBufferType& buffer) const { - buffer.write(this->index); - this->rates.write(buffer); - buffer.write(this->pressure); - buffer.write(this->reservoir_rate); - buffer.write(this->cell_pressure); - buffer.write(this->cell_saturation_water); - buffer.write(this->cell_saturation_gas); - buffer.write(this->effective_Kh); - } - - template - void Segment::write(MessageBufferType& buffer) const { - buffer.write(this->segNumber); - this->rates.write(buffer); - this->pressures.write(buffer); - } - - template - void CurrentControl::write(MessageBufferType& buffer) const - { - buffer.write(this->isProducer); - if (this->isProducer) { - buffer.write(this->prod); - } - else { - buffer.write(this->inj); - } - } - - template - void Well::write(MessageBufferType& buffer) const { - this->rates.write(buffer); - buffer.write(this->bhp); - buffer.write(this->thp); - buffer.write(this->temperature); - buffer.write(this->control); - unsigned int size = this->connections.size(); - buffer.write(size); - for (const Connection& comp : this->connections) - comp.write(buffer); - - { - const auto nSeg = - static_cast(this->segments.size()); - buffer.write(nSeg); - - for (const auto& seg : this->segments) { - seg.second.write(buffer); - } - } - - this->current_control.write(buffer); - } - - template - void Rates::read(MessageBufferType& buffer) { - buffer.read(this->mask); - buffer.read(this->wat); - buffer.read(this->oil); - buffer.read(this->gas); - buffer.read(this->polymer); - buffer.read(this->solvent); - buffer.read(this->energy); - buffer.read(this->dissolved_gas); - buffer.read(this->vaporized_oil); - buffer.read(this->reservoir_water); - buffer.read(this->reservoir_oil); - buffer.read(this->reservoir_gas); - buffer.read(this->productivity_index_water); - buffer.read(this->productivity_index_oil); - buffer.read(this->productivity_index_gas); - buffer.read(this->well_potential_water); - buffer.read(this->well_potential_oil); - buffer.read(this->well_potential_gas); - } - - template - void Connection::read(MessageBufferType& buffer) { - buffer.read(this->index); - this->rates.read(buffer); - buffer.read(this->pressure); - buffer.read(this->reservoir_rate); - buffer.read(this->cell_pressure); - buffer.read(this->cell_saturation_water); - buffer.read(this->cell_saturation_gas); - buffer.read(this->effective_Kh); - } - - template - void Segment::read(MessageBufferType& buffer) { - buffer.read(this->segNumber); - this->rates.read(buffer); - this->pressures.read(buffer); - } - - template - void CurrentControl::read(MessageBufferType& buffer) - { - buffer.read(this->isProducer); - if (this->isProducer) { - buffer.read(this->prod); - } - else { - buffer.read(this->inj); - } - } - - template - void Well::read(MessageBufferType& buffer) { - this->rates.read(buffer); - buffer.read(this->bhp); - buffer.read(this->thp); - buffer.read(this->temperature); - buffer.read(this->control); - - // Connection information - unsigned int size = 0.0; //this->connections.size(); - buffer.read(size); - this->connections.resize(size); - for (size_t i = 0; i < size; ++i) - { - auto& comp = this->connections[ i ]; - comp.read(buffer); - } - - // Segment information (if applicable) - const auto nSeg = [&buffer]() -> unsigned int - { - auto n = 0u; - buffer.read(n); - - return n; - }(); - - for (auto segID = 0*nSeg; segID < nSeg; ++segID) { - auto seg = Segment{}; - seg.read(buffer); - - const auto segNumber = seg.segNumber; - this->segments.emplace(segNumber, std::move(seg)); - } - - this->current_control.read(buffer); - } - -}} // Opm::data - -#endif //OPM_OUTPUT_WELLS_HPP diff --git a/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/AggregateActionxData.hpp b/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/AggregateActionxData.hpp deleted file mode 100644 index 69b9fb85c5..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/AggregateActionxData.hpp +++ /dev/null @@ -1,122 +0,0 @@ -/* - Copyright (c) 2018 Statoil ASA - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef OPM_AGGREGATE_Actionx_DATA_HPP -#define OPM_AGGREGATE_Actionx_DATA_HPP - -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -namespace Opm { - class Schedule; - class UDQInput; - class UDQActive; -} // Opm - - - -namespace Opm { namespace RestartIO { namespace Helpers { - -class AggregateActionxData -{ -public: - explicit AggregateActionxData(const std::vector& actDims); - - void captureDeclaredActionxData( const Opm::Schedule& sched, - const Opm::SummaryState& st, - const std::vector& actDims, - const std::size_t simStep); - - const std::vector& getIACT() const - { - return this->iACT_.data(); - } - - - const std::vector& getSACT() const - { - return this->sACT_.data(); - } - - const std::vector>& getZACT() const - { - return this->zACT_.data(); - } - - const std::vector>& getZLACT() const - { - return this->zLACT_.data(); - } - - const std::vector>& getZACN() const - { - return this->zACN_.data(); - } - - const std::vector& getIACN() const - { - return this->iACN_.data(); - } - - const std::vector& getSACN() const - { - return this->sACN_.data(); - } - -private: - /// Aggregate 'IACT' array (Integer) for all ACTIONX data (9 integers pr UDQ) - WindowedArray iACT_; - - /// Aggregate 'SACT' array (Integer) for all ACTIONX data (5 integers pr ACTIONX - currently all zero - meaning unknown) - WindowedArray sACT_; - - /// Aggregate 'ZACT' array (Character) for all ACTIONX data. (4 * 8 chars pr ACIONX keyword - name of Action) - WindowedArray> zACT_; - - /// Aggregate 'ZLACT' array (Character) for all Actionx data. (max 16 * 8 characters pr line (default 80 chars pr line) - WindowedArray> zLACT_; - - /// Aggregate 'ZACN' array (Character) for all Actionx data (length equal to max no of conditions pr Actionx * the number of Actiox kwords) - WindowedArray> zACN_; - - /// Aggregate 'IACN' array (Integer) for all Actionx data (length 26* the max number of conditoins pr Actionx * the number of Actionx kwords) - WindowedArray iACN_; - - /// Aggregate 'SACN' array (Integer) for all Actionx data (16 * max number of Actionx conditions) - WindowedArray sACN_; - -}; - -}}} // Opm::RestartIO::Helpers - -#endif //OPM_AGGREGATE_WELL_DATA_HPP diff --git a/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/AggregateConnectionData.hpp b/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/AggregateConnectionData.hpp deleted file mode 100644 index 20db635286..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/AggregateConnectionData.hpp +++ /dev/null @@ -1,75 +0,0 @@ -/* - Copyright (c) 2018 Equinor ASA - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef OPM_AGGREGATE_CONNECTION_DATA_HPP -#define OPM_AGGREGATE_CONNECTION_DATA_HPP - -#include - -#include -#include -#include - -namespace Opm { - class EclipseGrid; - class Schedule; - class UnitSystem; -} // Opm - -namespace Opm { namespace data { - class WellRates; -}} - -namespace Opm { namespace RestartIO { namespace Helpers { - - class AggregateConnectionData - { - public: - explicit AggregateConnectionData(const std::vector& inteHead); - - void captureDeclaredConnData(const Opm::Schedule& sched, - const Opm::EclipseGrid& grid, - const Opm::UnitSystem& units, - const Opm::data::WellRates& xw, - const std::size_t sim_step); - - const std::vector& getIConn() const - { - return this->iConn_.data(); - } - - const std::vector& getSConn() const - { - return this->sConn_.data(); - } - - const std::vector& getXConn() const - { - return this->xConn_.data(); - } - - private: - WindowedMatrix iConn_; - WindowedMatrix sConn_; - WindowedMatrix xConn_; - }; - -}}} // Opm::RestartIO::Helpers - -#endif // OPM_AGGREGATE_CONNECTION_DATA_HPP diff --git a/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/AggregateGroupData.hpp b/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/AggregateGroupData.hpp deleted file mode 100644 index 9a93c1cc0a..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/AggregateGroupData.hpp +++ /dev/null @@ -1,171 +0,0 @@ -/* - Copyright (c) 2018 Statoil ASA - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef OPM_AGGREGATE_GROUP_DATA_HPP -#define OPM_AGGREGATE_GROUP_DATA_HPP - -#include - -#include -#include -#include -#include -#include -#include - -namespace Opm { -class Schedule; -class SummaryState; -//class Group; -class UnitSystem; -} // Opm - -namespace Opm { namespace RestartIO { namespace Helpers { - -class AggregateGroupData -{ -public: - explicit AggregateGroupData(const std::vector& inteHead); - - void captureDeclaredGroupData(const Opm::Schedule& sched, - const Opm::UnitSystem& units, - const std::size_t simStep, - const Opm::SummaryState& sumState, - const std::vector& inteHead); - - const std::vector& getIGroup() const - { - return this->iGroup_.data(); - } - - const std::vector& getSGroup() const - { - return this->sGroup_.data(); - } - - const std::vector& getXGroup() const - { - return this->xGroup_.data(); - } - - const std::vector>& getZGroup() const - { - return this->zGroup_.data(); - } - - const std::vector restart_group_keys = {"GOPP", "GWPP", "GOPR", "GWPR", "GGPR", - "GVPR", "GWIR", "GGIR", "GWCT", "GGOR", - "GOPT", "GWPT", "GGPT", "GVPT", "GWIT", - "GGIT", "GVIT", - "GOPTH", "GWPTH", "GGPTH", - "GWITH", "GGITH"}; - - const std::vector restart_field_keys = {"FOPP", "FWPP", "FOPR", "FWPR", "FGPR", - "FVPR", "FWIR", "FGIR", "FWCT", "FGOR", - "FOPT", "FWPT", "FGPT", "FVPT", "FWIT", - "FGIT", "FVIT", - "FOPTH", "FWPTH", "FGPTH", - "FWITH", "FGITH"}; - - const std::map groupKeyToIndex = { - {"GOPR", 0}, - {"GWPR", 1}, - {"GGPR", 2}, - {"GVPR", 3}, - {"GWIR", 5}, - {"GGIR", 6}, - {"GWCT", 8}, - {"GGOR", 9}, - {"GOPT", 10}, - {"GWPT", 11}, - {"GGPT", 12}, - {"GVPT", 13}, - {"GWIT", 15}, - {"GGIT", 16}, - {"GVIT", 17}, - {"GOPP", 22}, - {"GWPP", 23}, - {"GOPTH", 135}, - {"GWPTH", 139}, - {"GWITH", 140}, - {"GGPTH", 143}, - {"GGITH", 144}, - }; - - - using inj_cmode_enum = Opm::Group::InjectionCMode; - const std::map cmodeToNum = { - - {inj_cmode_enum::NONE, 0}, - {inj_cmode_enum::RATE, 1}, - {inj_cmode_enum::RESV, 2}, - {inj_cmode_enum::REIN, 3}, - {inj_cmode_enum::VREP, 4}, - {inj_cmode_enum::FLD, 0}, - {inj_cmode_enum::SALE, 0}, - }; - - const std::map fieldKeyToIndex = { - {"FOPR", 0}, - {"FWPR", 1}, - {"FGPR", 2}, - {"FVPR", 3}, - {"FWIR", 5}, - {"FGIR", 6}, - {"FWCT", 8}, - {"FGOR", 9}, - {"FOPT", 10}, - {"FWPT", 11}, - {"FGPT", 12}, - {"FVPT", 13}, - {"FWIT", 15}, - {"FGIT", 16}, - {"FVIT", 17}, - {"FOPP", 22}, - {"FWPP", 23}, - {"FOPTH", 135}, - {"FWPTH", 139}, - {"FWITH", 140}, - {"FGPTH", 143}, - {"FGITH", 144}, - }; - -private: - /// Aggregate 'IWEL' array (Integer) for all wells. - WindowedArray iGroup_; - - /// Aggregate 'SWEL' array (Real) for all wells. - WindowedArray sGroup_; - - /// Aggregate 'XWEL' array (Double Precision) for all wells. - WindowedArray xGroup_; - - /// Aggregate 'ZWEL' array (Character) for all wells. - WindowedArray> zGroup_; - - /// Maximum number of wells in a group. - int nWGMax_; - - /// Maximum number of groups - int nGMaxz_; -}; - -}}} // Opm::RestartIO::Helpers - -#endif // OPM_AGGREGATE_WELL_DATA_HPP diff --git a/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/AggregateMSWData.hpp b/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/AggregateMSWData.hpp deleted file mode 100644 index f64d94f014..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/AggregateMSWData.hpp +++ /dev/null @@ -1,115 +0,0 @@ -/* - Copyright (c) 2018 Statoil ASA - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef OPM_AGGREGATE_MSW_DATA_HPP -#define OPM_AGGREGATE_MSW_DATA_HPP - -#include -#include - -#include -#include - -namespace Opm { - class Phases; - class Schedule; - class EclipseGrid; - class UnitSystem; - class SummaryState; -} // Opm - -namespace Opm { namespace RestartIO { namespace Helpers { - - struct BranchSegmentPar { - int outletS; - int noSegInBranch; - int firstSeg; - int lastSeg; - int branch; - }; - - struct SegmentSetSourceSinkTerms { - std::vector qosc; - std::vector qwsc; - std::vector qgsc; - }; - - struct SegmentSetFlowRates { - std::vector sofr; - std::vector swfr; - std::vector sgfr; - }; - - class AggregateMSWData - { - public: - explicit AggregateMSWData(const std::vector& inteHead); - - void captureDeclaredMSWData(const Opm::Schedule& sched, - const std::size_t rptStep, - const Opm::UnitSystem& units, - const std::vector& inteHead, - const Opm::EclipseGrid& grid, - const Opm::SummaryState& smry, - const Opm::data::WellRates& wr - ); - - /// Retrieve Integer Multisegment well data Array. - const std::vector& getISeg() const - { - return this->iSeg_.data(); - } - - /// Retrieve Double precision segment data Array. - const std::vector& getRSeg() const - { - return this->rSeg_.data(); - } - - /// Retrieve Integer multisegment well data Array for lateral branches (ILBS) - const std::vector& getILBs() const - { - return this->iLBS_.data(); - } - - /// Retrieve Integer multisegment well data Array for lateral branches (ILBR) - const std::vector& getILBr() const - { - return this->iLBR_.data(); - } - - - private: - /// Aggregate 'ISEG' array (Integer) for all multisegment wells - WindowedArray iSeg_; - - /// Aggregate 'RSEG' array (Double) for all multisegment wells - WindowedArray rSeg_; - - /// Aggregate 'ILBS' array (Integer) for all multisegment wells - WindowedArray iLBS_; - - /// Aggregate 'ILBR' array (Integer) for all multisegment wells - WindowedArray iLBR_; - - }; - -}}} // Opm::RestartIO::Helpers - -#endif // OPM_AGGREGATE_WELL_DATA_HPP diff --git a/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/AggregateUDQData.hpp b/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/AggregateUDQData.hpp deleted file mode 100644 index c166ff1291..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/AggregateUDQData.hpp +++ /dev/null @@ -1,142 +0,0 @@ -/* - Copyright (c) 2018 Statoil ASA - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef OPM_AGGREGATE_UDQ_DATA_HPP -#define OPM_AGGREGATE_UDQ_DATA_HPP - -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -namespace Opm { - class Schedule; - class UDQInput; - class UDQActive; -} // Opm - -namespace Opm { namespace RestartIO { namespace Helpers { - -class igphData { -public: - const std::vector ig_phase(const Opm::Schedule& sched, const std::size_t simStep, const std::vector& inteHead); -}; - -class AggregateUDQData -{ -public: - explicit AggregateUDQData(const std::vector& udqDims); - -void captureDeclaredUDQData(const Opm::Schedule& sched, - const std::size_t simStep, - const Opm::SummaryState& st, - const std::vector& inteHead); - - const std::vector& getIUDQ() const - { - return this->iUDQ_.data(); - } - - const std::vector& getIUAD() const - { - return this->iUAD_.data(); - } - - const std::vector>& getZUDN() const - { - return this->zUDN_.data(); - } - - const std::vector>& getZUDL() const - { - return this->zUDL_.data(); - } - - const std::vector& getIGPH() const - { - return this->iGPH_.data(); - } - - const std::vector& getIUAP() const - { - return this->iUAP_.data(); - } - - const std::vector& getDUDW() const - { - return this->dUDW_.data(); - } - - const std::vector& getDUDG() const - { - return this->dUDG_.data(); - } - - const std::vector& getDUDF() const - { - return this->dUDF_.data(); - } - -private: - /// Aggregate 'IUDQ' array (Integer) for all UDQ data (3 integers pr UDQ) - WindowedArray iUDQ_; - - /// Aggregate 'IUAD' array (Integer) for all UDQ data (5 integers pr UDQ that is used for various well and group controls) - WindowedArray iUAD_; - - - /// Aggregate 'ZUDN' array (Character) for all UDQ data. (2 * 8 chars pr UDQ -> UNIT keyword) - WindowedArray> zUDN_; - - /// Aggregate 'ZUDL' array (Character) for all UDQ data. (16 * 8 chars pr UDQ DEFINE "Data for operation - Msth Expression) - WindowedArray> zUDL_; - - /// Aggregate 'IGPH' array (Integer) for all UDQ data (3 - zeroes - as of current understanding) - WindowedArray iGPH_; - - /// Aggregate 'IUAP' array (ICharArrayNullTermnteger) for all UDQ data (1 integer pr UDQ constraint used) - WindowedArray iUAP_; - - /// Aggregate 'DUDW' array (Double Precision) for all UDQ data. (Dimension = max no wells * noOfUDQ's) - WindowedArray dUDW_; - - /// Aggregate 'DUDG' array (Double Precision) for all UDQ data. (Dimension = (max no groups + 1) * noOfUDQ's) - WindowedArray dUDG_; - - /// Aggregate 'DUDF' array (Double Precision) for all UDQ data. (Dimension = Number of FU - UDQ's, with value equal to the actual constraint) - WindowedArray dUDF_; - - -}; - -}}} // Opm::RestartIO::Helpers - -#endif //OPM_AGGREGATE_WELL_DATA_HPP diff --git a/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/AggregateWellData.hpp b/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/AggregateWellData.hpp deleted file mode 100644 index 1f8a43c038..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/AggregateWellData.hpp +++ /dev/null @@ -1,110 +0,0 @@ -/* - Copyright (c) 2018 Statoil ASA - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef OPM_AGGREGATE_WELL_DATA_HPP -#define OPM_AGGREGATE_WELL_DATA_HPP - -#include - -#include -#include - -#include -#include -#include - -namespace Opm { - class Schedule; - class SummaryState; - class UnitSystem; -} // Opm - -namespace Opm { namespace data { - class WellRates; -}} // Opm::data - -namespace Opm { namespace RestartIO { namespace Helpers { - - struct ActionResStatus { - std::vector result; - std::vector name; - }; - - class AggregateWellData - { - public: - explicit AggregateWellData(const std::vector& inteHead); - - void captureDeclaredWellData(const Schedule& sched, - const UnitSystem& units, - const std::size_t sim_step, - const ::Opm::SummaryState& smry, - const std::vector& inteHead); - - void captureDynamicWellData(const Opm::Schedule& sched, - const std::size_t sim_step, - const Opm::data::WellRates& xw, - const Opm::SummaryState& smry); - - /// Retrieve Integer Well Data Array. - const std::vector& getIWell() const - { - return this->iWell_.data(); - } - - /// Retrieve Floating-Point (Real) Well Data Array. - const std::vector& getSWell() const - { - return this->sWell_.data(); - } - - /// Retrieve Floating-Point (Double Precision) Well Data Array. - const std::vector& getXWell() const - { - return this->xWell_.data(); - } - - /// Retrieve Character Well Data Array. - const std::vector>& getZWell() const - { - return this->zWell_.data(); - } - - - - private: - /// Aggregate 'IWEL' array (Integer) for all wells. - WindowedArray iWell_; - - /// Aggregate 'SWEL' array (Real) for all wells. - WindowedArray sWell_; - - /// Aggregate 'XWEL' array (Double Precision) for all wells. - WindowedArray xWell_; - - /// Aggregate 'ZWEL' array (Character) for all wells. - WindowedArray> zWell_; - - /// Maximum number of groups in model. - int nWGMax_; - }; - -}}} // Opm::RestartIO::Helpers - -#endif // OPM_AGGREGATE_WELL_DATA_HPP diff --git a/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/DoubHEAD.hpp b/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/DoubHEAD.hpp deleted file mode 100644 index b5b8a0ad8b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/DoubHEAD.hpp +++ /dev/null @@ -1,87 +0,0 @@ -/* - Copyright 2018 Statoil ASA. - - This file is part of the Open Porous Media Project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef OPM_DOUBHEAD_HEADER_INCLUDED -#define OPM_DOUBHEAD_HEADER_INCLUDED - -#include -#include -#include - -namespace Opm { - struct Tuning; - class Schedule; - class UDQParams; -} - -namespace Opm { namespace RestartIO { - - class DoubHEAD - { - public: - struct TimeStamp { - std::chrono::time_point start; - std::chrono::duration elapsed; - }; - - struct guideRate { - double A; - double B; - double C; - double D; - double E; - double F; - double delay; - double damping_fact; - }; - - DoubHEAD(); - - ~DoubHEAD() = default; - DoubHEAD(const DoubHEAD& rhs) = default; - DoubHEAD(DoubHEAD&& rhs) = default; - - DoubHEAD& operator=(const DoubHEAD& rhs) = default; - DoubHEAD& operator=(DoubHEAD&& rhs) = default; - - DoubHEAD& tuningParameters(const Tuning& tuning, - const double cnvT); - - DoubHEAD& timeStamp(const TimeStamp& ts); - DoubHEAD& nextStep(const double nextTimeStep); - - DoubHEAD& drsdt(const Schedule& sched, - const std::size_t lookup_step, - const double cnvT); - - DoubHEAD& udq_param(const UDQParams& udqPar); - DoubHEAD& guide_rate_param(const guideRate& guide_rp); - - const std::vector& data() const - { - return this->data_; - } - - private: - std::vector data_; - }; - -}} // Opm::RestartIO - -#endif // OPM_DOUBHEAD_HEADER_INCLUDED diff --git a/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/EclipseGridInspector.hpp b/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/EclipseGridInspector.hpp deleted file mode 100644 index 2e46f460b0..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/EclipseGridInspector.hpp +++ /dev/null @@ -1,103 +0,0 @@ -//=========================================================================== -// -// File: EclipseGridInspector.h -// -// Created: Mon Jun 2 09:46:08 2008 -// -// Author: Atgeirr F Rasmussen -// -// $Date$ -// -// Revision: $Id: EclipseGridInspector.h,v 1.2 2008/08/18 14:16:12 atgeirr Exp $ -// -//=========================================================================== - -/* - Copyright 2009, 2010 SINTEF ICT, Applied Mathematics. - Copyright 2009, 2010 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef OPM_ECLIPSEGRIDINSPECTOR_HEADER -#define OPM_ECLIPSEGRIDINSPECTOR_HEADER - -#include -#include - -#include - -namespace Opm -{ - -/** - @brief A class for inspecting the contents of an eclipse file. - - Given an Eclipse deck, this class may be used to answer certain - queries about its contents. - - @author Atgeirr F. Rasmussen - @date 2008/06/02 09:46:08 -*/ -class EclipseGridInspector -{ -public: - /// Constructor taking a parser as argument. - /// The parser must already have read an Eclipse file. - explicit EclipseGridInspector(Opm::Deck); - - /// Assuming that the pillars are vertical, compute the - /// volume of the cell given by logical coordinates (i, j, k). - double cellVolumeVerticalPillars(int i, int j, int k) const; - - /// Assuming that the pillars are vertical, compute the - /// volume of the cell given by the cell index - double cellVolumeVerticalPillars(int cell_idx) const; - - /// Compute the average dip in x- and y-direction of the - /// cell tops and bottoms relative to the xy-plane - std::pair cellDips(int i, int j, int k) const; - std::pair cellDips(int cell_idx) const; - - // Convert global cell index to logical ijk-coordinates - std::array cellIdxToLogicalCoords(int cell_idx) const; - - /// Returns a vector with the outer limits of grid (in the grid's unit). - /// The vector contains [xmin, xmax, ymin, ymax, zmin, zmax], as - /// read from COORDS and ZCORN - std::array getGridLimits() const; - - /// Returns the extent of the logical cartesian grid - /// as number of cells in the (i, j, k) directions. - std::array gridSize() const; - - /// Returns the eight z-values associated with a given cell. - /// The ordering is such that i runs fastest. That is, with - /// L = low and H = high: - /// {LLL, HLL, LHL, HHL, LLH, HLH, LHH, HHH }. - std::array cellZvals(int i, int j, int k) const; - -private: - Opm::Deck deck_; - int logical_gridsize_[3]; - void init_(); - void checkLogicalCoords(int i, int j, int k) const; -}; - -} // namespace Opm - -#endif // OPM_ECLIPSEGRIDINSPECTOR_HEADER - diff --git a/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/EclipseIO.hpp b/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/EclipseIO.hpp deleted file mode 100644 index f815d9967d..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/EclipseIO.hpp +++ /dev/null @@ -1,238 +0,0 @@ -/* - Copyright (c) 2013 Andreas Lauser - Copyright (c) 2013 Uni Research AS - Copyright (c) 2014 IRIS AS - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef OPM_ECLIPSE_WRITER_HPP -#define OPM_ECLIPSE_WRITER_HPP - -#include -#include -#include -#include - -#include -#include - -#include -#include -#include -#include - -namespace Opm { namespace out { - class Summary; -}} // namespace Opm::out - -namespace Opm { - -class EclipseState; -class Schedule; -class SummaryConfig; -class SummaryState; - -/*! - * \brief A class to write the reservoir state and the well state of a - * blackoil simulation to disk using the Eclipse binary format. - */ -class EclipseIO { -public: - /*! - * \brief Sets the common attributes required to write eclipse - * binary files using ERT. - */ - EclipseIO( const EclipseState& es, - EclipseGrid grid, - const Schedule& schedule, - const SummaryConfig& summary_config); - - - - -/** \brief Output static properties in EGRID and INIT file. - * - * Write the static eclipse data (grid, PVT curves, etc) to disk, - * and set up additional initial properties. There are no specific - * keywords to configure the output to the INIT files, it seems - * like the algorithm is: "All available keywords are written to - * INIT file". For the current code the algorithm is as such: - * - * - * 1. 3D properties which can be simply calculated in the output - * layer are unconditionally written to disk, that currently - * includes the DX, DY, DZ and DEPTH keyword. - * - * 2. All integer propeerties from the deck are written - * unconditionally, that typically includes the MULTNUM, PVTNUM, - * SATNUM and so on. Observe that the keywords PVTNUM, SATNUM, - * EQLNUM and FIPNUM are autocreated in the output layer, so - * they will be on disk even if they are not explicitly included - * in the deck. - * - * 3. The PORV keyword will *always* be present in the INIT file, - * and that keyword will have nx*ny*nz elements; all other 3D - * properties will only have nactive elements. - * - * 4. For floating point 3D keywords from the deck - like PORO and - * PERMX there is a *hardcoded* list in the writeINIFile( ) - * implementation of which keywords to output - if they are - * available. - * - * 5. The container simProps contains additional 3D floating point - * properties which have been calculated by the simulator, this - * typically includes the transmissibilities TRANX, TRANY and - * TRANZ but could in principle be anye floating point - * property. - * - * If you want the FOE keyword in the summary output the - * simProps container must contain the initial OIP field. - * - * In addition: - * - * - The NNC argument is distributed between the EGRID and INIT - * files. - * - * - PVT curves are written unconditionally, saturation functions - * are not yet written to disk. - */ - - void writeInitial( data::Solution simProps = data::Solution(), std::map > int_data = {}, const NNC& nnc = NNC()); - - /** - * \brief Overwrite the initial OIP values. - * - * These are also written when we call writeInitial if the simProps - * contains them. If not these are assumed to zero and the simulator - * can update them with this methods. - * \param simProps The properties containing at least OIP. - */ - void overwriteInitialOIP( const data::Solution& simProps ); - - /*! - * \brief Write a reservoir state and summary information to disk. - * - * - * The reservoir state can be inspected with visualization tools like - * ResInsight. - * - * The summary information can then be visualized using tools from - * ERT or ECLIPSE. Note that calling this method is only - * meaningful after the first time step has been completed. - * - * The optional simProps vector contains fields which have been - * calculated by the simulator and are written to the restart - * file. Examples of such fields would be the relative - * permeabilities KRO, KRW and KRG and fluxes. The keywords which - * can be added here are represented with mnenonics in the RPTRST - * keyword. - * - * The extra_restart argument is an optional aergument which can - * be used to store arbitrary double vectors in the restart - * file. The following rules apply for the extra data: - * - * 1. There is no size constraints. - * - * 2. The keys must be unqiue across the SOlution container, and - * also built in default keys like 'INTEHEAD'. - * - * 3. There is no unit conversion applied - the vectors are - * written to disk verbatim. - * - * If the optional argument write_double is sent in as true the - * fields in the solution container will be written in double - * precision. OPM can load and restart from files with double - * precision keywords, but this is non-standard, and other third - * party applications might choke on those. - * - * The misc_summary_values argument is used to pass pass various - * summary values which are of type 'ECL_SMSPEC_MISC_VAR' to the - * summary writer. The ability to pass miscellanous values to the - * summary writer is not very flexible: - * - * 1. The keyword must be an already well defined ECLIPSE keyword - * like e.g. one of the performance related keywords. - * - * 2. The keyword must have been requested in the SUMMARY section - * of the input deck. - * - * 3. The dimension of the keyword must have specified in the - * hardcoded static map misc_units in Summary.cpp. - */ - - void writeTimeStep( const SummaryState& st, - int report_step, - bool isSubstep, - double seconds_elapsed, - RestartValue value, - const bool write_double = false); - - - /* - Will load solution data and wellstate from the restart - file. This method will consult the IOConfig object to get - filename and report step to restart from. - - The map keys should be a map of keyword names and their - corresponding dimension object, i.e. to load the state from a - simple two phase simulation you would pass: - - keys = {{"PRESSURE" , UnitSystem::measure::pressure}, - {"SWAT" , UnitSystem::measure::identity }} - - For a three phase black oil simulation you would add pairs for - SGAS, RS and RV. If you ask for keys which are not found in the - restart file an exception will be raised, the happens if the - size of a vector is wrong. - - The function will consult the InitConfig object in the - EclipseState object to determine which file and report step to - load. - - The return value is of type 'data::Solution', which is the same - container type which is used by the EclipseIO, but observe - that the dim and target elements carry no information: - - - The returned double data has been converted to SI. - . The target is unconditionally set to 'RESTART_SOLUTION' - - The extra_keys argument can be used to request additional - kewyords from the restart value. The extra vectors will be - stored in the 'extra' field of the RestartValue return - value. These values must have been added to the restart file - previosuly with the extra argument to the writeTimeStep() - method. If the bool value in the map is true the value is - required, and the output layer will throw an exception if it is - missing, if the bool is false missing keywords will be ignored - (there will *not* be an empty vector in the return value). - */ - RestartValue loadRestart(SummaryState& summary_state, const std::vector& solution_keys, const std::vector& extra_keys = {}) const; - const out::Summary& summary(); - - EclipseIO( const EclipseIO& ) = delete; - ~EclipseIO(); - -private: - class Impl; - std::unique_ptr< Impl > impl; - -}; - -} // namespace Opm - - -#endif // OPM_ECLIPSE_WRITER_HPP diff --git a/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/EclipseIOUtil.hpp b/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/EclipseIOUtil.hpp deleted file mode 100644 index 8f07d159b0..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/EclipseIOUtil.hpp +++ /dev/null @@ -1,35 +0,0 @@ -#ifndef ECLIPSE_IO_UTIL_HPP -#define ECLIPSE_IO_UTIL_HPP - -#include -#include -#include - - -namespace Opm -{ -namespace EclipseIOUtil -{ - - template - void addToStripedData(const std::vector& data, std::vector& result, size_t offset, size_t stride) { - int dataindex = 0; - for (size_t index = offset; index < result.size(); index += stride) { - result[index] = data[dataindex]; - ++dataindex; - } - } - - - template - void extractFromStripedData(const std::vector& data, std::vector& result, size_t offset, size_t stride) { - for (size_t index = offset; index < data.size(); index += stride) { - result.push_back(data[index]); - } - } - - -} //namespace EclipseIOUtil -} //namespace Opm - -#endif //ECLIPSE_IO_UTIL_HPP diff --git a/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/InteHEAD.hpp b/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/InteHEAD.hpp deleted file mode 100644 index 6b42abdce9..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/InteHEAD.hpp +++ /dev/null @@ -1,165 +0,0 @@ -/* - Copyright 2016, 2017, 2018 Statoil ASA. - - This file is part of the Open Porous Media Project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef OPM_INTEHEAD_HEADER_INCLUDED -#define OPM_INTEHEAD_HEADER_INCLUDED - -#include -#include -#include -#include - - -namespace Opm { - -class UnitSystem; - -namespace RestartIO { - - class InteHEAD - { - public: - struct WellTableDim { - int numWells; - int maxPerf; - int maxWellInGroup; - int maxGroupInField; - int maxWellsInField; - }; - - struct WellSegDims { - int nsegwl; - int nswlmx; - int nsegmx; - int nlbrmx; - int nisegz; - int nrsegz; - int nilbrz; - }; - - struct RegDims { - int ntfip; - int nmfipr; - int nrfreg; - int ntfreg; - int nplmix; - }; - - struct TimePoint { - int year; - int month; // 1..12 - int day; // 1..31 - - int hour; // 0..23 - int minute; // 0..59 - int second; // 0..59 - - int microseconds; // 0..999999 - }; - - struct Phases { - int oil; - int water; - int gas; - }; - - struct TuningPar { - int newtmx; - int newtmn; - int litmax; - int litmin; - int mxwsit; - int mxwpit; - }; - - struct Group { - int ngroups; - }; - - struct UdqParam { - int udqParam_1; - int no_wudqs; - int no_gudqs; - int no_fudqs; - int no_iuads; - int no_iuaps; - }; - - struct ActionParam { - int no_actions; - int max_no_sched_lines_per_action; - int max_no_conditions_per_action; - int max_no_characters_per_line; - }; - - struct GuideRateNominatedPhase { - int nominated_phase; - }; - - InteHEAD(); - ~InteHEAD() = default; - - InteHEAD(const InteHEAD& rhs) = default; - InteHEAD(InteHEAD&& rhs) = default; - - InteHEAD& operator=(const InteHEAD& rhs) = default; - InteHEAD& operator=(InteHEAD&& rhs) = default; - - InteHEAD& dimensions(const int nx, const int ny, const int nz); - InteHEAD& dimensions(const std::array& cartDims); - InteHEAD& numActive(const int nactive); - - InteHEAD& unitConventions(const UnitSystem& usys); - InteHEAD& wellTableDimensions(const WellTableDim& wtdim); - InteHEAD& calendarDate(const TimePoint& date); - InteHEAD& activePhases(const Phases& phases); - InteHEAD& params_NWELZ(const int niwelz, const int nswelz, const int nxwelz, const int nzwelz); - InteHEAD& params_NCON(const int niconz, const int nsconz, const int nxconz); - InteHEAD& params_GRPZ(const std::array& grpz); - InteHEAD& params_NGCTRL(const int gct); - InteHEAD& params_NAAQZ(const int ncamax, const int niaaqz, const int nsaaqz, const int nxaaqz, const int nicaqz, const int nscaqz, const int nacaqz); - InteHEAD& stepParam(const int tstep, const int report_step); - InteHEAD& tuningParam(const TuningPar& tunpar); - InteHEAD& variousParam(const int version, const int iprog); - InteHEAD& wellSegDimensions(const WellSegDims& wsdim); - InteHEAD& regionDimensions(const RegDims& rdim); - InteHEAD& ngroups(const Group& gr); - InteHEAD& udqParam_1(const UdqParam& udqpar); - InteHEAD& actionParam(const ActionParam& act_par); - InteHEAD& variousUDQ_ACTIONXParam(); - InteHEAD& nominatedPhaseGuideRate(GuideRateNominatedPhase nphase); - InteHEAD& whistControlMode(int mode); - - const std::vector& data() const - { - return this->data_; - } - - private: - std::vector data_; - }; - - std::time_t makeUTCTime(const std::tm& timePoint); - - InteHEAD::TimePoint - getSimulationTimePoint(const std::time_t start, - const double elapsed); -}} // Opm::RestartIO - -#endif // OPM_INTEHEAD_HEADER_INCLUDED diff --git a/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/LinearisedOutputTable.hpp b/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/LinearisedOutputTable.hpp deleted file mode 100644 index 11a0a96647..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/LinearisedOutputTable.hpp +++ /dev/null @@ -1,198 +0,0 @@ -/* - Copyright 2019 Equinor. - Copyright 2017 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef LINEARISED_OUTPUT_TABLE_HPP_INCLUDED -#define LINEARISED_OUTPUT_TABLE_HPP_INCLUDED - -#include -#include - -namespace Opm { - - /// Manage tables of column data, possibly with sub-tables, all with - /// equal number of rows (i.e., with padding), and possibly with - /// multiple tables pertaining to multiple subsets (i.e., cell regions). - /// - /// Mainly intended for use with the output facility for tabular data. - class LinearisedOutputTable - { - public: - /// Constructor. - /// - /// Padded table entries set to +1.0e+20. - /// - /// \param[in] numTables Number of tables managed by internal - /// buffer. Typically corresponds to maximum value of a region - /// ID vector such as SATNUM, IMBNUM, or PVTNUM. - /// - /// \param[in] numPrimary Number of primary look-up keys for the - /// tabular data managed by the internal buffer. Mostly relevant - /// (i.e., greater than one) for miscible oil ("PVTO") or - /// miscible gas ("PVTG") tables and typically corresponds to the - /// number of Rs/Rv entries from the TABDIMS keyword. - /// - /// \param[in] numRows Number of rows in each sub-table - /// corresponding to a single primary look-up key. Typically the - /// number of nodes (e.g., NSSFUN or NPPVT) of the corresponding - /// input keyword. - /// - /// \param[in] numCols Number of columns in each sub-table (and main - /// table). Typically 5. - LinearisedOutputTable(const std::size_t numTables, - const std::size_t numPrimary, - const std::size_t numRows, - const std::size_t numCols); - - /// Constructor. - /// - /// \param[in] numTables Number of tables managed by internal - /// buffer. Typically corresponds to maximum value of a region - /// ID vector such as SATNUM, IMBNUM, or PVTNUM. - /// - /// \param[in] numPrimary Number of primary look-up keys for the - /// tabular data managed by the internal buffer. Mostly relevant - /// (i.e., greater than one) for miscible oil ("PVTO") or - /// miscible gas ("PVTG") tables and typically corresponds to the - /// number of Rs/Rv entries from the TABDIMS keyword. - /// - /// \param[in] numRows Number of rows in each sub-table - /// corresponding to a single primary look-up key. Typically the - /// number of nodes (e.g., NSSFUN or NPPVT) of the corresponding - /// input keyword. - /// - /// \param[in] numCols Number of columns in each sub-table (and main - /// table). Typically 5. - /// - /// \param[in] fillValue Data element value for padded table entries. - LinearisedOutputTable(const std::size_t numTables, - const std::size_t numPrimary, - const std::size_t numRows, - const std::size_t numCols, - const double fillValue); - - /// Retrieve iterator to start of \c numRows (contiguous) column - /// elements of a particular sub-table of a particular main table. - /// - /// \param[in] tableID Numeric ID of main table for which to - /// retrieve a column. Must be strictly less than \c numTables - /// constructor argument. - /// - /// \param[in] primID Numeric ID of primary look-up key (sub-table) - /// for which to retrieve a column. Must be strictly less than - /// \c numPrimary constructor argument. - /// - /// \param[in] colID Numeric ID of column to be retrieved from - /// particular sub-table of particular main table. Must be - /// strictly less than \c numCols constructor argument. - /// - /// \return Iterator to start of contiguous column elements. - std::vector::iterator - column(const std::size_t tableID, - const std::size_t primID, - const std::size_t colID); - - /// Read-only access to internal data buffer. - /// - /// Mostly to support outputting all table data to external storage. - const std::vector& getData() const; - - /// Destructive access to internal data buffer. - /// - /// Mostly to support outputting all table data to external storage. - /// - /// \return \code std::move() \endcode of the internal data buffer. - std::vector getDataDestructively(); - - private: - /// Internal buffer for tabular data. - std::vector data; - - /// Number of tables managed by \c data. - std::size_t numTables; - - /// Number of primary look-up keys/sub-tables in \c data_. - std::size_t numPrimary; - - /// Number of rows per sub-table in \c data_. - std::size_t numRows; - }; - - /// Apply piecewise linear differentiation (i.e., compute slopes) on a - /// set of dependent variables in a linearised output table. - /// - namespace DifferentiateOutputTable { - /// Columnar data differentantiation table request. - /// - /// Refers to the sub-table with a specific primary ID within a - /// specific table of a \c LinearisedOutputTable. - struct Descriptor { - /// Table ID--usually corresponds to the region ID of a - /// tabulated function pertaining to a specific region of a - /// simulation model. - std::size_t tableID{ 0 }; - - /// Primary ID--nontrivial (\c != 0) only for miscible PVT - /// tables for oil or gas in which case this entry refers to a - /// particular dissolved gas-oil ratio (Rs) or gas pressure - /// (Pg) node. - std::size_t primID{ 0 }; - - /// Number of active rows in this subtable. - std::size_t numActRows{ 0 }; - }; - - /// Apply piecewise linear differentiation (i.e., compute slopes) on - /// a set of dependent variables in a linearised output table. - /// - /// Assumes that the independent variable is stored in the first - /// column (column ID zero). - /// - /// \param[in] numDependent Number of dependent variables. Usually - /// one or two. Dependent variables are assumed to be stored in - /// columns one through \p numDependent. - /// - /// \param[in] desc Columnar data differentantiation table request. - /// Must refer to a particular sub-table of the linearised output - /// table. - /// - /// \param[in,out] table Linearised output table. On input, column - /// zero contains the independent variable in each of \code - /// numActRows.size() \endcode sub-tables and columns one through - /// \p numDependent contain the dependent variables. On output, - /// columns \code numDependent + 1 \endcode through \code 2 * - /// numDependent \endcode contain the slopes of the dependent - /// variables. - /// - /// In partcular, column \code numDependent + j \endcode for - /// \code j = 1..numDependent \endcode contains the derivatives - /// of column \c j with respect to column zero. We define the - /// slopes as - /// \code - /// s(i,j) = (c(i + 1, j) - c(i,j)) / (c(i + 1, 0) - c(i,0)) - /// \endcode - /// for all \code i = 0 .. numActRows[k] - 2 \endcode (in table - /// \p k). - void calcSlopes(const std::size_t numDependent, - const Descriptor& desc, - LinearisedOutputTable& table); - } // DifferentiateOutputTable -} // Opm - -#endif // LINEARISED_OUTPUT_TABLE_HPP_INCLUDED diff --git a/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/LogiHEAD.hpp b/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/LogiHEAD.hpp deleted file mode 100644 index d3dc8b7505..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/LogiHEAD.hpp +++ /dev/null @@ -1,115 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - Copyright 2016, 2017 Statoil ASA. - - This file is part of the Open Porous Media Project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef OPM_LOGIHEAD_HEADER_INCLUDED -#define OPM_LOGIHEAD_HEADER_INCLUDED - -#include - -namespace Opm { namespace RestartIO { - - class LogiHEAD - { - public: - /// Key characteristics of simulation run's PVT model. - struct PVTModel - { - /// Whether or not simulation run uses a live oil model (with - /// dissolved gas). - bool isLiveOil { false }; - - /// Whether or not simulation run uses a wet gas model (with - /// vaporised oil). - bool isWetGas { false }; - - /// Whether or not simulation run uses a constant - /// compressibility oil model (keyword PVCDO). - bool constComprOil { false }; - }; - - /// Key characteristics of simulation model's saturation functions. - struct SatfuncFlags - { - /// Whether or not simulation run uses directionally dependent - /// relative permeability. - bool useDirectionalRelPerm { false }; - - /// Whether or not simulation run uses reversible relative - /// permeability functions. - bool useReversibleRelPerm { true }; - - /// Whether or not simulation run uses end-point scaling. - bool useEndScale { false }; - - /// Whether or not simulation run uses directionally dependent - /// end-point scaling. - bool useDirectionalEPS { false }; - - /// Whether or not simulation run uses reversible end-point - /// scaling. - bool useReversibleEPS { true }; - - /// Whether or not simulation run activates the alternative - /// (three-point) end-point scaling feature. - bool useAlternateEPS { false }; - }; - - LogiHEAD(); - ~LogiHEAD() = default; - - LogiHEAD(const LogiHEAD& rhs) = default; - LogiHEAD(LogiHEAD&& rhs) = default; - - LogiHEAD& operator=(const LogiHEAD& rhs) = default; - LogiHEAD& operator=(LogiHEAD&& rhs) = default; - - LogiHEAD& variousParam(const bool e300_radial, - const bool e100_radial, - const int nswlmx, - const bool enableHyster - ); - - /// Assign PVT model characteristics. - /// - /// \param[in] pvt Current run's PVT model characteristics. - /// - /// \return \code *this \endcode. - LogiHEAD& pvtModel(const PVTModel& pvt); - - /// Assign saturation function characteristics. - /// - /// \param[in] satfunc Current run's saturation function - /// characteristics. - /// - /// \return \code *this \endcode. - LogiHEAD& saturationFunction(const SatfuncFlags& satfunc); - - const std::vector& data() const - { - return this->data_; - } - - private: - std::vector data_; - }; - -}} // Opm::RestartIO - -#endif // OPM_LOGIHEAD_HEADER_INCLUDED diff --git a/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/RegionCache.hpp b/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/RegionCache.hpp deleted file mode 100644 index a132e2b6a2..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/RegionCache.hpp +++ /dev/null @@ -1,44 +0,0 @@ -/* - Copyright 2016 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#ifndef OPM_REGION_CACHE_HPP -#define OPM_REGION_CACHE_HPP - -#include - -namespace Opm { - class Schedule; - class EclipseGrid; - -namespace out { - class RegionCache { - public: - RegionCache() = default; - RegionCache(const std::vector& fipnum, const EclipseGrid& grid, const Schedule& schedule); - const std::vector>& connections( int region_id ) const; - - private: - std::vector> connections_empty; - - std::map>> connection_map; - }; -} -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/RestartIO.hpp b/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/RestartIO.hpp deleted file mode 100644 index b06e3d4ed9..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/RestartIO.hpp +++ /dev/null @@ -1,94 +0,0 @@ -/* - Copyright (c) 2018 Equinor ASA - Copyright (c) 2016 Statoil ASA - Copyright (c) 2013-2015 Andreas Lauser - Copyright (c) 2013 SINTEF ICT, Applied Mathematics. - Copyright (c) 2013 Uni Research AS - Copyright (c) 2015 IRIS AS - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ -#ifndef RESTART_IO_HPP -#define RESTART_IO_HPP - -#include - -#include - -#include -#include -#include - -namespace Opm { - - class EclipseGrid; - class EclipseState; - class Schedule; - -} // namespace Opm - -namespace Opm { namespace EclIO { namespace OutputStream { - - class Restart; - -}}} - -/* - The two free functions RestartIO::save() and RestartIO::load() can - be used to save and load reservoir and well state from restart - files. Observe that these functions 'just do it', i.e. the checking - of which report step to load from, if output is enabled at all and - so on is handled by an outer scope. - - If the filename corresponds to unified eclipse restart file, - i.e. UNRST the functions will seek correctly to the correct report - step, and truncate in the case of save. For any other filename the - functions will start reading and writing from file offset zero. If - the input filename does not correspond to a unified restart file - there is no consistency checking between filename and report step; - i.e. these calls: - - load("CASE.X0010" , 99 , ...) - save("CASE.X0010" , 99 , ...) - - will read from and write to the file "CASE.X0010" - completely ignoring - the report step argument '99'. -*/ -namespace Opm { namespace RestartIO { - - void save(EclIO::OutputStream::Restart& rstFile, - int report_step, - double seconds_elapsed, - RestartValue value, - const EclipseState& es, - const EclipseGrid& grid, - const Schedule& schedule, - const SummaryState& sumState, - bool write_double = false); - - - RestartValue load(const std::string& filename, - int report_step, - SummaryState& summary_state, - const std::vector& solution_keys, - const EclipseState& es, - const EclipseGrid& grid, - const Schedule& schedule, - const std::vector& extra_keys = {}); - -}} // namespace Opm::RestartIO - -#endif // RESTART_IO_HPP diff --git a/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/RestartValue.hpp b/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/RestartValue.hpp deleted file mode 100644 index 793386fbd0..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/RestartValue.hpp +++ /dev/null @@ -1,98 +0,0 @@ -/* - Copyright (c) 2017 Statoil ASA - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ -#ifndef RESTART_VALUE_HPP -#define RESTART_VALUE_HPP - -#include -#include -#include -#include - -#include - -#include -#include -#include - -namespace Opm { - - class RestartKey { - public: - - std::string key; - UnitSystem::measure dim; - bool required = false; - - RestartKey() = default; - - RestartKey( const std::string& _key, UnitSystem::measure _dim) - : key(_key), - dim(_dim), - required(true) - {} - - - RestartKey( const std::string& _key, UnitSystem::measure _dim, bool _required) - : key(_key), - dim(_dim), - required(_required) - {} - - bool operator==(const RestartKey& key2) const - { - return key == key2.key && - dim == key2.dim && - required == key2.required; - } - }; - - /* - A simple class used to communicate values between the simulator and - the RestartIO functions. - */ - class RestartValue { - public: - using ExtraVector = std::vector>>; - data::Solution solution; - data::Wells wells; - ExtraVector extra; - std::vector aquifer; - - RestartValue(data::Solution sol, data::Wells wells_arg); - - RestartValue() {} - - bool hasExtra(const std::string& key) const; - void addExtra(const std::string& key, UnitSystem::measure dimension, std::vector data); - void addExtra(const std::string& key, std::vector data); - const std::vector& getExtra(const std::string& key) const; - - void convertFromSI(const UnitSystem& units); - void convertToSI(const UnitSystem& units); - - bool operator==(const RestartValue& val2) const - { - return solution == val2.solution && - wells == val2.wells && - extra == val2.extra; - } - }; - -} - -#endif // RESTART_VALUE_HPP diff --git a/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/Summary.hpp b/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/Summary.hpp deleted file mode 100644 index 178e071178..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/Summary.hpp +++ /dev/null @@ -1,83 +0,0 @@ -/* - Copyright 2016 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#ifndef OPM_OUTPUT_SUMMARY_HPP -#define OPM_OUTPUT_SUMMARY_HPP - -#include - -#include -#include -#include -#include -#include - -namespace Opm { - class EclipseGrid; - class EclipseState; - class Schedule; - class SummaryConfig; - class SummaryState; -} // namespace Opm - -namespace Opm { namespace data { - class WellRates; - class Group; -}} // namespace Opm::data - -namespace Opm { namespace out { - -class Summary { -public: - using GlobalProcessParameters = std::map; - using RegionParameters = std::map>; - using BlockValues = std::map, double>; - - Summary(const EclipseState& es, - const SummaryConfig& sumcfg, - const EclipseGrid& grid, - const Schedule& sched, - const std::string& basename = ""); - - ~Summary(); - - void add_timestep(const SummaryState& st, const int report_step); - - void eval(SummaryState& summary_state, - const int report_step, - const double secs_elapsed, - const EclipseState& es, - const Schedule& schedule, - const data::WellRates& well_solution, - const data::Group& group_solution, - const GlobalProcessParameters& single_values, - const RegionParameters& region_values = {}, - const BlockValues& block_values = {}) const; - - void write() const; - - -private: - class SummaryImplementation; - std::unique_ptr pImpl_; -}; - -}} // namespace Opm::out - -#endif //OPM_OUTPUT_SUMMARY_HPP diff --git a/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/Tables.hpp b/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/Tables.hpp deleted file mode 100644 index f6bae029f8..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/Tables.hpp +++ /dev/null @@ -1,134 +0,0 @@ -/* - Copyright 2019 Equinor. - Copyright 2017 Statoil ASA. - Copyright 2016 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#ifndef OUTPUT_TABLES_HPP -#define OUTPUT_TABLES_HPP - -#include - -#include - -namespace Opm { - class UnitSystem; - class EclipseState; - - class Tables { - public: - explicit Tables( const UnitSystem& units); - - void addDensity(const DensityTable& density); - - /// Add normalised PVT function tables to INIT file's TAB vector. - /// - /// \param[in] es Valid \c EclipseState object with accurate RUNSPEC - /// information on active phases and table dimensions ("TABDIMS"). - /// - /// \param[in] logihead Flag specifications identifying which tables - /// to output. - void addPVTTables(const EclipseState& es); - - /// Add normalised saturation function tables to INIT file's TAB - /// vector. - /// - /// \param[in] es Valid \c EclipseState object with accurate RUNSPEC - /// information on active phases and table dimensions ("TABDIMS"). - void addSatFunc(const EclipseState& es); - - /// Acquire read-only reference to internal TABDIMS vector. - const std::vector& tabdims() const; - - /// Acquire read-only reference to internal TAB vector. - const std::vector& tab() const; - - private: - /// Convention for units of measure of the result set. - const UnitSystem& units; - - /// Offset and size information for the tabular data. - std::vector m_tabdims; - - /// Linearised tabular data of PVT and saturation functions. - std::vector data; - - void addData(const std::size_t offset_index, - const std::vector& new_data); - - /// Add saturation function tables corresponding to family I (SGOF, - /// SWOF) to the tabular data (TABDIMS and TAB vectors). - /// - /// \param[in] es Valid \c EclipseState object with accurate table - /// dimensions ("TABDIMS" keyword) and an initialised \c - /// TableManager sub-object. - /// - /// \param[in] gas Whether or not gas is active the current run. - /// - /// \param[in] oil Whether or not oil is active the current run. - /// - /// \param[in] wat Whether or not water is active the current run. - void addSatFunc_FamilyOne(const EclipseState& es, - const bool gas, - const bool oil, - const bool wat); - - /// Add saturation function tables corresponding to family II (SGFN, - /// SOF{2,3}, SWFN) to the tabular data (TABDIMS and TAB vectors). - /// - /// \param[in] es Valid \c EclipseState object with accurate table - /// dimensions ("TABDIMS" keyword) and an initialised \c - /// TableManager sub-object. - /// - /// \param[in] gas Whether or not gas is active the current run. - /// - /// \param[in] oil Whether or not oil is active the current run. - /// - /// \param[in] wat Whether or not water is active the current run. - void addSatFunc_FamilyTwo(const EclipseState& es, - const bool gas, - const bool oil, - const bool wat); - - /// Add gas PVT tables (keywords PVDG and PVTG) to the tabular data - /// (TABDIMS and TAB vectors). - /// - /// \param[in] es Valid \c EclipseState object with accurate table - /// dimensions ("TABDIMS" keyword) and an initialised \c - /// TableManager sub-object. - void addGasPVTTables(const EclipseState& es); - - /// Add oil PVT tables (keywords PVCDO, PVDO and PVTO) to the - /// tabular data (TABDIMS and TAB vectors). - /// - /// \param[in] es Valid \c EclipseState object with accurate table - /// dimensions ("TABDIMS" keyword) and an initialised \c - /// TableManager sub-object. - void addOilPVTTables(const EclipseState& es); - - /// Add water PVT tables (keyword PVTW) to the tabular data (TABDIMS - /// and TAB vectors). - /// - /// \param[in] es Valid \c EclipseState object with accurate table - /// dimensions ("TABDIMS" keyword) and an initialised \c - /// TableManager sub-object. - void addWaterPVTTables(const EclipseState& es); - }; -} - -#endif // OUTPUT_TABLES_HPP diff --git a/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/VectorItems/aquifer.hpp b/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/VectorItems/aquifer.hpp deleted file mode 100644 index 7a56019009..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/VectorItems/aquifer.hpp +++ /dev/null @@ -1,70 +0,0 @@ -/* - Copyright (c) 2019 Equinor ASA - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef OPM_OUTPUT_ECLIPSE_VECTOR_AQUIFER_HPP -#define OPM_OUTPUT_ECLIPSE_VECTOR_AQUIFER_HPP - -#include - -namespace Opm { namespace RestartIO { namespace Helpers { namespace VectorItems { - - namespace IAnalyticAquifer { - enum index : std::vector::size_type { - NumAquiferConn = 0, - WatPropTable = 1, - - TypeRelated1 = 9, - TypeRelated2 = 10, - }; - } // IAnalyticAquifer - - namespace SAnalyticAquifer { - enum index : std::vector::size_type { - Compressibility = 0, - - FetInitVol = 1, - FetProdIndex = 2, - FetTimeConstant = 3, - - CTRadius = 1, - CTPermeability = 2, - CTPorosity = 3, - - InitPressure = 4, - DatumDepth = 5, - - CTThickness = 6, - CTAngle = 7, - CTWatMassDensity = 8, - CTWatViscosity = 9, - }; - } // SAnalyticAquifer - - namespace XAnalyticAquifer { - enum index : std::vector::size_type { - FlowRate = 0, - Pressure = 1, // Dynamic aquifer pressure - ProdVolume = 2, // Liquid volume produced from aquifer (into reservoir) - TotalArea = 3, - }; - } // XAnalyticAquifer - -}}}} // Opm::RestartIO::Helpers::VectorItems - -#endif // OPM_OUTPUT_ECLIPSE_VECTOR_AQUIFER_HPP diff --git a/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/VectorItems/connection.hpp b/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/VectorItems/connection.hpp deleted file mode 100644 index 5f7325d02f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/VectorItems/connection.hpp +++ /dev/null @@ -1,77 +0,0 @@ -/* - Copyright (c) 2018 Equinor ASA - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef OPM_OUTPUT_ECLIPSE_VECTOR_CONNECTION_HPP -#define OPM_OUTPUT_ECLIPSE_VECTOR_CONNECTION_HPP - -#include - -namespace Opm { namespace RestartIO { namespace Helpers { namespace VectorItems { - namespace IConn { - enum index : std::vector::size_type { - SeqIndex = 0, // Connection sequence index - CellI = 1, // I-location (1-based cell index) of connection - CellJ = 2, // J-location (1-based cell index) of connection - CellK = 3, // K-location (1-based cell index) of connection - ConnStat = 5, // Connection status. - // > 0 => open, shut otherwise - - Drainage = 6, // Saturation function (table ID) for drainage - Imbibition = 9, // Saturation function (table ID) for imbibition - - ComplNum = 12, // Completion ID (1-based) - ConnDir = 13, // Penetration direction (1:X, 2:Y, 3:Z) - Segment = 14, // Segment ID of connection - // 0 for regular connections, > 0 for MSW. - }; - } // IConn - - namespace SConn { - enum index : std::vector::size_type { - ConnTrans = 0, // Connection transmissibility factor - Depth = 1, // Connection centre depth - Diameter = 2, // Connection diameter - - EffectiveKH = 3, // Effective Kh product of connection - SkinFactor = 4, // Skinfactor - item 'SKIN' from COMPDAT - item12 = 11, // Connection transmissibility factor - - SegDistEnd = 20, // Distance to end of connection in segment - SegDistStart = 21, // Distance to start of connection in segment - - item30 = 29, // Unknown - item31 = 30, // Unknown - CFInDeck = 40, // = 0 for connection factor not defined, = 1 for connection factor defined - }; - } // SConn - - namespace XConn { - enum index : std::vector::size_type { - OilRate = 0, // Surface flow rate (oil) - WaterRate = 1, // Surface flow rate (water) - GasRate = 2, // Surface Flow rate (gas) - - Pressure = 34, // Connection pressure value - - ResVRate = 49, // Reservoir voidage rate - }; - } // XConn -}}}} // Opm::RestartIO::Helpers::VectorItems - -#endif // OPM_OUTPUT_ECLIPSE_VECTOR_CONNECTION_HPP diff --git a/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/VectorItems/doubhead.hpp b/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/VectorItems/doubhead.hpp deleted file mode 100644 index 0e21efc092..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/VectorItems/doubhead.hpp +++ /dev/null @@ -1,69 +0,0 @@ -/* - Copyright (c) 2018 Equinor ASA - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef OPM_OUTPUT_ECLIPSE_VECTOR_DOUBHEAD_HPP -#define OPM_OUTPUT_ECLIPSE_VECTOR_DOUBHEAD_HPP - -#include - -namespace Opm { namespace RestartIO { namespace Helpers { namespace VectorItems { - - // This is a subset of the items in src/opm/output/eclipse/DoubHEAD.cpp . - // Promote items from that list to this in order to make them public. - enum doubhead : std::vector::size_type { - TsInit = 1, // Maximum Length of Next Timestep - TsMaxz = 2, // Maximum Length of Timestep After Next - TsMinz = 3, // Minumum Length of All Timesteps - TsMchp = 4, - TsFMax = 5, - TsFMin = 6, - TsFcnv = 7, - TrgTTE = 8, - TrgCNV = 9, - TrgMBE = 10, - TrgLCV = 11, - XxxTTE = 16, - XxxCNV = 17, - XxxMBE = 18, - XxxLCV = 19, - XxxWFL = 20, - TrgDPR = 82, - TfDiff = 83, - DdpLim = 84, - DdsLim = 85, - GRpar_a = 87, // Guiderate parameter A - GRpar_b = 88, // Guiderate parameter B - GRpar_c = 89, // Guiderate parameter C - GRpar_d = 90, // Guiderate parameter D - GRpar_e = 91, // Guiderate parameter E - GRpar_f = 92, // Guiderate parameter F - GRpar_int = 97, // Guiderate parameter delay interval - ThrUPT = 99, - XxxDPR = 100, - TrgFIP = 101, - TrgSFT = 102, - GRpar_damp = 144, // Guiderate parameter damping factor - UdqPar_2 = 212, // UDQPARAM item number 2 (Permitted range (+/-) of user-defined quantities) - UdqPar_3 = 213, // UDQPARAM item number 3 (Value given to undefined elements when outputting data) - UdqPar_4 = 214, // UDQPARAM item number 4 (fractional equality tolerance used in ==, <= etc. functions) - }; - -}}}} // Opm::RestartIO::Helpers::VectorItems - -#endif // OPM_OUTPUT_ECLIPSE_VECTOR_DOUBHEAD_HPP diff --git a/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/VectorItems/group.hpp b/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/VectorItems/group.hpp deleted file mode 100644 index a084f8504d..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/VectorItems/group.hpp +++ /dev/null @@ -1,92 +0,0 @@ -/* - Copyright (c) 2018 Equinor ASA - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef OPM_OUTPUT_ECLIPSE_VECTOR_GROUP_HPP -#define OPM_OUTPUT_ECLIPSE_VECTOR_GROUP_HPP - -#include - -namespace Opm { namespace RestartIO { namespace Helpers { namespace VectorItems { - - - namespace SGroup { - enum prod_index : std::vector::size_type { - OilRateLimit = 6, // Group's oil production target/limit - WatRateLimit = 7, // Group's water production target/limit - GasRateLimit = 8, // Group's gas production target/limit - LiqRateLimit = 9, // Group's liquid production target/limit - }; - - enum inj_index : std::vector::size_type { - waterSurfRateLimit = 15, //i Group's water surface volume injection rate target/limit - waterResRateLimit = 16, // Group's water reservoir volume injection rate target/limit - waterReinjectionLimit = 17, // Group's water reinjection fraction target/limit - waterVoidageLimit = 18, // Group's water voidage injection fraction target/limit - gasSurfRateLimit = 20, // Group's gas surface volume injection rate target/limit - gasResRateLimit = 21, // Group's gas reservoir volume injection rate target/limit - gasReinjectionLimit = 22, // Group's gas reinjection fraction target/limit - gasVoidageLimit = 23, // Group's gas voidage injection fraction target/limit - - }; - } // SGroup - - - - namespace XGroup { - enum index : std::vector::size_type { - OilPrRate = 0, // Group's oil production rate - WatPrRate = 1, // Group's water production rate - GasPrRate = 2, // Group's gas production rate - LiqPrRate = 3, // Group's liquid production rate - - WatInjRate = 5, // Group's water injection rate - GasInjRate = 6, // Group's gas injection rate - - WatCut = 8, // Group's producing water cut - GORatio = 9, // Group's producing gas/oil ratio - - OilPrTotal = 10, // Group's total cumulative oil production - WatPrTotal = 11, // Group's total cumulative water production - GasPrTotal = 12, // Group's total cumulative gas production - VoidPrTotal = 13, // Group's total cumulative reservoir - // voidage production - - WatInjTotal = 15, // Group's total cumulative water injection - GasInjTotal = 16, // Group's total cumulative gas injection - VoidInjTotal = 17, // Group's total cumulative reservoir volume injection - - OilPrPot = 22, // Group's oil production potential - WatPrPot = 23, // Group's water production potential - - HistOilPrTotal = 135, // Group's total cumulative oil - // production (observed/historical rates) - HistWatPrTotal = 139, // Group's total cumulative water - // production (observed/historical rates) - HistWatInjTotal = 140, // Group's total cumulative water - // injection (observed/historical rates) - HistGasPrTotal = 143, // Group's total cumulative gas - // production (observed/historical rates) - HistGasInjTotal = 144, // Group's total cumulative gas injection - // (observed/historical rates) - }; - } // XGroup - -}}}} // Opm::RestartIO::Helpers::VectorItems - -#endif // OPM_OUTPUT_ECLIPSE_VECTOR_GROUP_HPP diff --git a/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/VectorItems/intehead.hpp b/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/VectorItems/intehead.hpp deleted file mode 100644 index d9397f9e92..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/VectorItems/intehead.hpp +++ /dev/null @@ -1,137 +0,0 @@ -/* - Copyright (c) 2018 Equinor ASA - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef OPM_OUTPUT_ECLIPSE_VECTOR_INTEHEAD_HPP -#define OPM_OUTPUT_ECLIPSE_VECTOR_INTEHEAD_HPP - -#include - -namespace Opm { namespace RestartIO { namespace Helpers { namespace VectorItems { - - // This is a subset of the items in src/opm/output/eclipse/InteHEAD.cpp . - // Promote items from that list to this in order to make them public. - enum intehead : std::vector::size_type { - ISNUM = 0, // An encoded integer corresponding to the - // time the file was created. For files not - // originating from ECLIPSE, this value may - // be set to zero. - - VERSION = 1, // Simulator version - UNIT = 2, // Units convention - // 1: METRIC, 2: FIELD, 3: LAB, 4: PVT-M - - NX = 8, // #cells in X direction (Cartesian) - NY = 9, // #cells in Y direction (Cartesian) - NZ = 10, // #cells in Z direction (Cartesian) - NACTIV = 11, // Number of active cells - - PHASE = 14, // Phase indicator: - // 1: oil, 2: water, 3: O/W, 4: gas, - // 5: G/O, 6: G/W, 7: O/G/W - - NWELLS = 16, // Number of wells - NCWMAX = 17, // Maximum number of completions per well - NGRP = 18, // Actual number of groups - NWGMAX = 19, // Maximum number of wells in any well group - NGMAXZ = 20, // Maximum number of groups in field - - NIWELZ = 24, // Number of data elements per well in IWEL array - // (default 97 for ECLIPSE, 94 for ECLIPSE 300). - NSWELZ = 25, // Number of data elements per well in SWEL array - NXWELZ = 26, // Number of delements per well in XWEL array - NZWELZ = 27, // Number of 8-character words per well in ZWEL array - - NICONZ = 32, // Number of data elements per completion - // in ICON array (default 19) - NSCONZ = 33, // Number of data elements per completion in SCON array - NXCONZ = 34, // Number of data elements per completion in XCON array - - NIGRPZ = 36, // Number of data elements per group in IGRP array - NSGRPZ = 37, // Number of data elements per group in SGRP array - NXGRPZ = 38, // Number of data elements per group in XGRP array - NZGRPZ = 39, // Number of data elements per group in ZGRP array - - NCAMAX = 41, // Maximum number of analytic aquifer connections - - NIAAQZ = 42, // Number of data elements per aquifer in IAAQ array - NSAAQZ = 43, // Number of data elements per aquifer in SAAQ array - NXAAQZ = 44, // Number of data elements per aquifer in XAAQ array - - NICAQZ = 45, // Number of data elements per aquifer connection in ICAQ array - NSCAQZ = 46, // Number of data elements per aquifer connection in SCAQ array - NACAQZ = 47, // Number of data elements per aquifer connection in ACAQ array - - NGCTRL = 51, // Index indicating if group control is used or not (1 - if group control, 0 if not) - - NGRNPH = 58, // Index indicating if group control is used or not (1 - if group control, 0 if not) - - DAY = 64, // Calendar day of report step (1..31) - MONTH = 65, // Calendar month of report step (1..12) - YEAR = 66, // Calendar year of report step - NUM_SOLVER_STEPS = 67, // - REPORT_STEP = 68, // - - WHISTC = 71, // Calendar year of report step - - NEWTMX = 80, // Tuning, Record3, Item1 - NEWTMN = 81, // Tuning, Record3, Item2 - LITMAX = 82, // Tuning, Record3, Item3 - LITMIN = 83, // Tuning, Record3, Item4 - MXWSIT = 86, // Tuning, Record3, Item5 - MXWPIT = 87, // Tuning, Record3, Item6 - - NTFIP = 89, // REGDIMS item1, or TABDIMS item 5 - - IPROG = 94, // IPROG = simulation program identifier: 100 - ECLIPSE 100, 300 - ECLIPSE 300, 500 - ECLIPSE 300 - // (thermal option), negative - Other simulator, - NMFIPR = 99, // REGDIMS item2 - NOOFACTIONS = 156, // The number of actions in the dataset - MAXNOLINES = 157, // Maximum number of lines of schedule data for ACTION keyword - including ENDACTIO - MAXNOSTRPRLINE = 158, // Maximum number of 8-chars strings pr input line of Action data (rounded up from input) - - NWMAXZ = 163, // Maximum number of wells in the model - - NSEGWL = 174, // Number of multisegment wells defined with WELSEG - NSWLMX = 175, // Maximum number of segmented wells (item 1 ofWSEGDIMS) - NSEGMX = 176, // Maximum number of segments per well (item 2 of WSEGDIMS) - NLBRMX = 177, // Maximum number of lateral branches (item 3 of WSEGDIMS) - - NISEGZ = 178, // Number of entries per segment in ISEG array - NRSEGZ = 179, // Number of entries per segment in RSEG array - NILBRZ = 180, // Number of entries per segment in ILBR array - - IHOURZ = 206, // IHOURZ = current simulation time HH:MM:SS – number of hours (HH) (0-23). - IMINTS = 207, // IMINTS = current simulation time HH:MM:SS – number of minutes (MM) (0-59). - - MAX_ACT_COND = 245, // Maximum number of conditions pr action - MAX_AN_AQUIFERS = 252, // Maximum number of analytic aquifers - - NO_FIELD_UDQS = 262, // No of Field UDQ data (parameters) / - NO_GROUP_UDQS = 263, // No of Group UDQ data (parameters) / - NO_WELL_UDQS = 266, // No of Well UDQ data (parameters) / - UDQPAR_1 = 267, // Integer seed value for the RAND / - NO_IUADS = 290, // No IUADs - NO_IUAPS = 291, // No IUAPs - RSEED = 296, - ISECND = 410 // ISECND = current simulation time HH:MM:SS - number of seconds (SS), reported in microseconds - // (0-59,999,999) - }; -}}}} // Opm::RestartIO::Helpers::VectorItems - -#endif // OPM_OUTPUT_ECLIPSE_VECTOR_INTEHEAD_HPP diff --git a/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/VectorItems/logihead.hpp b/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/VectorItems/logihead.hpp deleted file mode 100644 index 05b1694131..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/VectorItems/logihead.hpp +++ /dev/null @@ -1,48 +0,0 @@ -/* - Copyright (c) 2019 Equinor ASA - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef OPM_OUTPUT_ECLIPSE_VECTOR_LOGIHEAD_HPP -#define OPM_OUTPUT_ECLIPSE_VECTOR_LOGIHEAD_HPP - -#include - -namespace Opm { namespace RestartIO { namespace Helpers { namespace VectorItems { - - // This is a subset of the items in src/opm/output/eclipse/LogiHEAD.cpp . - // Promote items from that list to this in order to make them public. - enum logihead : std::vector::size_type { - IsLiveOil = 0, // Oil phase w/dissolved gas - IsWetGas = 1, // Gas phase w/vaporised oil - DirKr = 2, // Directional relative permeability - E100RevKr = 3, // Reversible rel. perm. (E100) - E100Radial = 4, // Radial model (E100) - E300Radial = 3, // Radial model (E300, others) - E300RevKr = 4, // Reversible rel. perm. (E300, others) - Hyster = 6, // Enable hysteresis - DualPoro = 14, // Enable dual porosity - EndScale = 16, // Enable end-point scaling - DirEPS = 17, // Directional end-point scaling - RevEPS = 18, // Reversible end-point scaling - AltEPS = 19, // Alternative (3-pt) end-point scaling - ConstCo = 38, // Constant oil compressibility (PVCDO) - HasMSWells = 75, // Whether or not model has MS Wells. - }; -}}}} // Opm::RestartIO::Helpers::VectorItems - -#endif // OPM_OUTPUT_ECLIPSE_VECTOR_LOGIHEAD_HPP diff --git a/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/VectorItems/msw.hpp b/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/VectorItems/msw.hpp deleted file mode 100644 index f0e1661e95..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/VectorItems/msw.hpp +++ /dev/null @@ -1,90 +0,0 @@ -/* - Copyright (c) 2018 Equinor ASA - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef OPM_OUTPUT_ECLIPSE_VECTOR_MSW_HPP -#define OPM_OUTPUT_ECLIPSE_VECTOR_MSW_HPP - -#include - -namespace Opm { namespace RestartIO { namespace Helpers { namespace VectorItems { - - namespace ISeg { - enum index : std::vector::size_type { - SegNo = 0, // Segment number (one-based) - OutSeg = 1, // Outlet segment (one-based) - InSegCurBranch = 2, // Inflow segment current branch (one-based) - BranchNo = 3, // Branch number (one-based) - - SegmentType = 11, - - ICDScalingMode = 18, - ICDOpenShutFlag = 19, - }; - - } // ISeg - - namespace RSeg { - enum index : std::vector::size_type { - DistOutlet = 0, // Segment's distance to outlet - OutletDepthDiff = 1, // Segment's depth differential to outlet - SegDiam = 2, // Internal diameter of segment - SegRough = 3, // Roughness parameter of segment - SegArea = 4, // Cross-sectional area of segment - SegVolume = 5, // Physical volume of segment - DistBHPRef = 6, // Segment's distance to BHP reference node - DepthBHPRef = 7, // Segment's depth differential to BHP ref. node - - TotFlowRate = 8, // Normalised total segment flow rate - WatFlowFract = 9, // Normalised Water flow rate fraction - GasFlowFract = 10, // Normalised Gas flow rate fraction - Pressure = 11, // Segment pressure - - item40 = 39, // Unknown - - ValveLength = 40, // Length of valve - ValveArea = 41, // Cross-sectional area of valve - ValveFlowCoeff = 42, // Valve's dimensionless flow coefficient - ValveMaxArea = 43, // Maximal cross-sectional valve area - - DeviceBaseStrength = 86, - - CalibrFluidDensity = 88, - CalibrFluidViscosity = 89, - - CriticalWaterFraction = 90, - TransitionRegWidth = 91, - MaxEmulsionRatio = 92, - MaxValidFlowRate = 97, - - ICDLength = 102, - - ValveAreaFraction = 103, - - item106 = 105, // Unknown - item107 = 106, // Unknown - item108 = 107, // Unknown - item109 = 108, // Unknown - item110 = 109, // Unknown - item111 = 110, // Unknown - }; - } // RSeg - -}}}} // Opm::RestartIO::Helpers::VectorItems - -#endif // OPM_OUTPUT_ECLIPSE_VECTOR_MSW_HPP diff --git a/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/VectorItems/tabdims.hpp b/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/VectorItems/tabdims.hpp deleted file mode 100644 index 00db65cc09..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/VectorItems/tabdims.hpp +++ /dev/null @@ -1,76 +0,0 @@ -/* - Copyright (c) 2019 Equinor ASA - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef OPM_OUTPUT_ECLIPSE_VECTOR_TABDIMS_HPP -#define OPM_OUTPUT_ECLIPSE_VECTOR_TABDIMS_HPP - -#include - -namespace Opm { namespace RestartIO { namespace Helpers { namespace VectorItems { - - namespace TabDims { - enum index : std::vector::size_type { - // Number of elements in 'TAB' array - TabSize = 0, - - // Oil PVT table - PvtoMainStart = 6, - PvtoCompStart = 7, - NumPvtoCompNodes = 8, - NumPvtoPressNodes = 9, - NumPvtoTables = 10, - - // Water PVT table - PvtwStart = 11, - NumPvtwTables = 12, - - // Gas PVT tables - PvtgMainStart = 13, - PvtgPressStart = 14, - NumPvtgCompNodes = 15, - NumPvtgPressNodes = 16, - NumPvtgTables = 17, - - // Density tables - DensityTableStart = 18, - DensityNumTables = 19, - - // SWFN tables - SwfnTableStart = 20, - SwfnNumSatNodes = 21, - SwfnNumTables = 22, - - // SGFN tables - SgfnTableStart = 23, - SgfnNumSatNodes = 24, - SgfnNumTables = 25, - - // SOFN tables - SofnTableStart = 26, - SofnNumSatNodes = 28, - SofnNumTables = 29, - - // Size of TABDIMS array - TabDimsNumElems = 100, - }; - } // namespace TabDims - -}}}} // namespace Opm::RestartIO::Helpers::VectorItems - -#endif // OPM_OUTPUT_ECLIPSE_VECTOR_TABDIMS_HPP diff --git a/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/VectorItems/well.hpp b/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/VectorItems/well.hpp deleted file mode 100644 index 5892c29571..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/VectorItems/well.hpp +++ /dev/null @@ -1,185 +0,0 @@ -/* - Copyright (c) 2018 Equinor ASA - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef OPM_OUTPUT_ECLIPSE_VECTOR_WELL_HPP -#define OPM_OUTPUT_ECLIPSE_VECTOR_WELL_HPP - -#include - -namespace Opm { namespace RestartIO { namespace Helpers { namespace VectorItems { - - namespace IWell { - enum index : std::vector::size_type { - IHead = 0, // I-location (one-based) of well head - JHead = 1, // J-location (one-based) of well head - FirstK = 2, // Layer ID (one-based) of top/first connection - LastK = 3, // Layer ID (one-based) of bottom/last connection - NConn = 4, // Number of active cells connected to well - Group = 5, // Index (one-based) of well's current group - WType = 6, // Well type (producer vs. injector) - ActWCtrl = 7, // Well's active target control mode (constraint). - - item9 = 8, // Unknown - item11 = 10, // Unknown - VFPTab = 11, // ID (one-based) of well's current VFP table. - - PredReqWCtrl = 15, // Well's requested control mode from - // simulation deck (WCONINJE, WCONPROD). - - item18 = 17, // Unknown - XFlow = 22, - item25 = 24, // Unknown - item32 = 31, // Unknown - item48 = 47, // Unknown - - HistReqWCtrl = 49, // Well's requested control mode from - // simulation deck (WCONHIST, WCONINJH) - - MsWID = 70, // Multisegment well ID - // Value 0 for regular wells - // Value 1..#MS wells for MS wells - NWseg = 71, // Number of well segments - // Value 0 for regular wells - // Value #segments for MS wells - - CompOrd = 98, // Well's completion ordering scheme. - }; - - namespace Value { - - enum WellCtrlMode : int { - WMCtlUnk = -10, // Unknown well control mode (OPM only) - Group = - 1, // Well under group control - Shut = 0, // Well is shut - OilRate = 1, // Well controlled by oil rate - WatRate = 2, // Well controlled by water rate - GasRate = 3, // Well controlled by gas rate - LiqRate = 4, // Well controlled by liquid rate - - ResVRate = 5, // Well controlled by - // reservoir voidage rate - - THP = 6, // Well controlled by - // tubing head pressure target - - BHP = 7, // Well controlled by - // bottom-hole pressure target - - CombRate = 9, // Well controlled by linearly - // combined rate target - }; - - enum CompOrder : int { - Track = 0, // Connections ordered along - // well track (increasing MD) - - Depth = 1, // Connections ordered by inceasing - // true vertical depth. Not really - // supported in OPM Flow. - - Input = 2, // Connections listed in order of - // appearance in simulation model's - // COMPDAT keyword. - }; - } // Value - } // IWell - - namespace SWell { - enum index : std::vector::size_type { - OilRateTarget = 0, // Well's current oil rate production target - WatRateTarget = 1, // Well's current water rate production target - GasRateTarget = 2, // Well's current gas rate production target - LiqRateTarget = 3, // Well's current liquid rate production target - ResVRateTarget = 4, // Well's current reservoir voidate rate - // production target - - THPTarget = 5, // Well's tubing head pressure target - BHPTarget = 6, // Well's bottom hole pressure target - - DatumDepth = 9, // Well's reference depth for BHP - - DrainageRadius = 17, // Well's drainage radius - item 7 from WELSPECS - EfficiencyFactor1 = 24, // Item2 from WEFAC; this value is repeated at two locations. - EfficiencyFactor2 = 31, // - HistLiqRateTarget = 33, // Well's historical/observed liquid - // rate target/limit - - HistGasRateTarget = 54, // Well's historical/observed gas rate - // target/limit - - HistBHPTarget = 55, // Well's historical/observed bottom - // hole pressure target/limit - }; - } // SWell - - namespace XWell { - enum index : std::vector::size_type { - OilPrRate = 0, // Well's oil production rate - WatPrRate = 1, // Well's water production rate - GasPrRate = 2, // Well's gas production rate - LiqPrRate = 3, // Well's liquid production rate - VoidPrRate = 4, // Well's reservoir voidage production rate - - FlowBHP = 6, // Well's flowing/producing bottom hole pressure - WatCut = 7, // Well's producing water cut - GORatio = 8, // Well's producing gas/oil ratio - - OilPrTotal = 18, // Well's total cumulative oil production - WatPrTotal = 19, // Well's total cumulative water production - GasPrTotal = 20, // Well's total cumulative gas production - VoidPrTotal = 21, // Well's total cumulative reservoir - // voidage production - - WatInjTotal = 23, // Well's total cumulative water injection - GasInjTotal = 24, // Well's total cumulative gas injection - VoidInjTotal = 25, // Well's total cumulative reservoir volume injection - - GasFVF = 34, // Well's producing gas formation volume factor. - - item37 = 36, // Unknown - item38 = 37, // Unknown - - BHPTarget = 41, // Well's current BHP Target/Limit - - HistOilPrTotal = 75, // Well's total cumulative oil production - // (observed/historical rates) - HistWatPrTotal = 76, // Well's total cumulative water - // production (observed/historical rates) - HistGasPrTotal = 77, // Well's total cumulative gas production - // (observed(historical rates) - - HistWatInjTotal = 81, // Well's total cumulative water injection - // (observed/historical rates) - HistGasInjTotal = 82, // Well's total cumulative gas injection - // (observed/historical rates) - - WatVoidPrRate = 122, // Well's voidage production rate - GasVoidPrRate = 123, // Well's voidage production rate - }; - } // XWell - - namespace ZWell { - enum index : std::vector::size_type { - WellName = 0, // Well name - ActionX = 2, // ActionX name - }; - } // ZWell -}}}} // Opm::RestartIO::Helpers::VectorItems - -#endif // OPM_OUTPUT_ECLIPSE_VECTOR_WELL_HPP diff --git a/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/WindowedArray.hpp b/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/WindowedArray.hpp deleted file mode 100644 index 64dbaa5a9c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/WindowedArray.hpp +++ /dev/null @@ -1,270 +0,0 @@ -/* - Copyright (c) 2018 Statoil ASA - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef OPM_WINDOWED_ARRAY_HPP -#define OPM_WINDOWED_ARRAY_HPP - -#include -#include -#include -#include -#include -#include - -#include - -/// \file -/// -/// Provide facilities to simplify constructing restart vectors -/// such as IWEL or RSEG. - -namespace Opm { namespace RestartIO { namespace Helpers { - - /// Provide read-only and read/write access to constantly sized - /// portions/windows of a linearised buffer with an implied - /// 1D array structure. - /// - /// Intended as backing store for vectors that have a constant - /// number of items per entity (e.g., N integer data items for - /// each active group at a report step). - /// - /// \tparam T Element type for underlying data items. - template - class WindowedArray - { - public: - /// Read/write access. - using WriteWindow = boost::iterator_range< - typename std::vector::iterator>; - - /// Read-only access. - using ReadWindow = boost::iterator_range< - typename std::vector::const_iterator>; - - using Idx = typename std::vector::size_type; - - /// Distinct compile-time type for number of windows in - /// underlying storage. - struct NumWindows { Idx value; }; - - /// Distinct compile-time type for size of windows - /// (number of data items per window.) - struct WindowSize { Idx value; }; - - /// Constructor. - /// - /// \param[in] n Number of windows. - /// \param[in] sz Number of data items per window. - explicit WindowedArray(const NumWindows n, const WindowSize sz) - : x_ (n.value * sz.value) - , windowSize_(sz.value) - { - if (sz.value == 0) - throw std::invalid_argument("Window array with windowsize==0 is not permitted"); - } - - /// Retrieve number of windows allocated for this array. - Idx numWindows() const - { - return this->x_.size() / this->windowSize_; - } - - /// Retrieve number of data items per windows. - Idx windowSize() const - { - return this->windowSize_; - } - - /// Request read/write access to individual window. - /// - /// \param[in] window Numeric ID of particular read/write window. - /// Must be in range \code [0 .. numWindows()-1] \endcode. - WriteWindow operator[](const Idx window) - { - assert ((window < this->numWindows()) && - "Window ID Out of Bounds"); - - auto b = std::begin(this->x_) + window*this->windowSize_; - auto e = b + this->windowSize_; - - return { b, e }; - } - - /// Request read-only access to individual window. - /// - /// \param[in] window Numeric ID of particular read-only window. - /// Must be in range \code [0 .. numWindows()-1] \endcode. - ReadWindow operator[](const Idx window) const - { - assert ((window < this->numWindows()) && - "Window ID Out of Bounds"); - - auto b = std::begin(this->x_) + window*this->windowSize_; - auto e = b + this->windowSize_; - - return { b, e }; - } - - /// Get read-only access to full, linearised data items for - /// all windows. - const std::vector& data() const - { - return this->x_; - } - - /// Extract full, linearised data items for all windows. - /// - /// Destroys the internal state of the \c WindowedArray. - std::vector getDataDestructively() - { - return std::move(this->x_); - } - - private: - std::vector x_; - - Idx windowSize_; - }; - - - /// Provide read-only and read/write access to constantly sized - /// portions/windows of a linearised buffer with an implied - /// row/column matrix (2D array) structure. - /// - /// Intended as backing store for vectors that have a constant - /// number of items per sub-entity of a fixed number of containing - /// entities (e.g., K double precision data items for each of N - /// maximum well connections for each of M maximum active wells at - /// a particular report step). - /// - /// \tparam T Element type for underlying data items. - template - class WindowedMatrix - { - private: - using NumWindows = typename WindowedArray::NumWindows; - - public: - using WriteWindow = typename WindowedArray::WriteWindow; - using ReadWindow = typename WindowedArray::ReadWindow; - using WindowSize = typename WindowedArray::WindowSize; - using Idx = typename WindowedArray::Idx; - - /// Distinct compile-time type for number of matrix rows - /// in underlying storage. - struct NumRows { Idx value; }; - - /// Distinct compile-time type for number of matrix columns - /// in underlying storage. - struct NumCols { Idx value; }; - - /// Constructor. - /// - /// \param[in] nRows Number of rows. - /// \param[in] nCols Number of columns. - /// \param[in] sz Number of data items per (row,column) window. - explicit WindowedMatrix(const NumRows& nRows, - const NumCols& nCols, - const WindowSize& sz) - : data_ (NumWindows{ nRows.value * nCols.value }, sz) - , numCols_(nCols.value) - { - if (nCols.value == 0) - throw std::invalid_argument("Window matrix with columns==0 is not permitted"); - } - - /// Retrieve number of columns allocated for this matrix. - Idx numCols() const - { - return this->numCols_; - } - - /// Retrieve number of rows allocated for this matrix. - Idx numRows() const - { - return this->data_.numWindows() / this->numCols(); - } - - /// Retrieve number of data items per windows. - Idx windowSize() const - { - return this->data_.windowSize(); - } - - /// Request read/write access to individual window. - /// - /// \param[in] row Numeric ID of particular row in matrix. - /// Must be in range \code [0 .. numRows()-1] \endcode. - /// - /// \param[in] col Numeric ID of particular column in matrix. - /// Must be in range \code [0 .. numCols()-1] \endcode. - /// - /// \return Read/write window at position \code (row,col) \endcode. - WriteWindow operator()(const Idx row, const Idx col) - { - return this->data_[ this->i(row, col) ]; - } - - /// Request read-only access to individual window. - /// - /// \param[in] row Numeric ID of particular row in matrix. - /// Must be in range \code [0 .. numRows()-1] \endcode. - /// - /// \param[in] col Numeric ID of particular column in matrix. - /// Must be in range \code [0 .. numCols()-1] \endcode. - /// - /// \return Read-only window at position \code (row,col) \endcode. - ReadWindow operator()(const Idx row, const Idx col) const - { - return this->data_[ this->i(row, col) ]; - } - - /// Get read-only access to full, linearised data items for - /// all windows. - auto data() const - -> decltype(std::declval>().data()) - { - return this->data_.data(); - } - - /// Extract full, linearised data items for all windows. - /// - /// Destroys the internal state of the \c WindowedMatrix. - auto getDataDestructively() - -> decltype(std::declval>() - .getDataDestructively()) - { - return this->data_.getDataDestructively(); - } - - private: - WindowedArray data_; - - Idx numCols_; - - /// Row major (C) order. - Idx i(const Idx row, const Idx col) const - { - return row*this->numCols() + col; - } - }; - -}}} // Opm::RestartIO::Helpers - -#endif // OPM_WINDOW_ARRAY_HPP diff --git a/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/WriteInit.hpp b/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/WriteInit.hpp deleted file mode 100644 index b2c7b99c7b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/WriteInit.hpp +++ /dev/null @@ -1,60 +0,0 @@ -/* - Copyright (c) 2019 Equinor ASA - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef OPM_WRITE_INIT_HPP -#define OPM_WRITE_INIT_HPP - -#include -#include -#include - -namespace Opm { - - class EclipseGrid; - class EclipseState; - class NNC; - class Schedule; - -} // namespace Opm - -namespace Opm { namespace data { - - class Solution; - -}} // namespace Opm::data - -namespace Opm { namespace EclIO { namespace OutputStream { - - class Init; - -}}} // namespace Opm::EclIO::OutputStream - -namespace Opm { namespace InitIO { - - void write(const ::Opm::EclipseState& es, - const ::Opm::EclipseGrid& grid, - const ::Opm::Schedule& schedule, - const ::Opm::data::Solution& simProps, - std::map> int_data, - const ::Opm::NNC& nnc, - ::Opm::EclIO::OutputStream::Init& initFile); - -}} // namespace Opm::InitIO - -#endif // OPM_WRITE_INIT_HPP diff --git a/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/WriteRFT.hpp b/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/WriteRFT.hpp deleted file mode 100644 index af8cf2f318..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/WriteRFT.hpp +++ /dev/null @@ -1,89 +0,0 @@ -/* - Copyright (c) 2019 Equinor ASA - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef OPM_WRITE_RFT_HPP -#define OPM_WRITE_RFT_HPP - -namespace Opm { - - class EclipseGrid; - class Schedule; - class UnitSystem; - -} // namespace Opm - -namespace Opm { namespace data { - - class WellRates; - -}} // namespace Opm::data - -namespace Opm { namespace EclIO { namespace OutputStream { - - class RFT; - -}}} // namespace Opm::EclIO::OutputStream - -namespace Opm { namespace RftIO { - - /// Collect RFT data and output to pre-opened output stream. - /// - /// RFT data is output for all affected wells at a given timestep, - /// and consists of - /// - /// 1) Time stamp (elapsed and date) - /// 2) Metadata about the output (units of measure, well types, - /// data type identifier) - /// 3) Depth, pressure, Sw, Sg, (I,J,K), and hostgrid for each - /// reservoir connection of the affected well. - /// - /// If no RFT output is requested at given timestep, then this - /// function returns with no output written to the RFT file. - /// - /// \param[in] reportStep Report step time point for which to output - /// RFT data. - /// - /// \param[in] elapsed Number of seconds of simulated time until - /// this report step (\p reportStep). - /// - /// \param[in] usys Unit system conventions for output. Typically - /// corresponds to run's active unit system (i.e., \code - /// EclipseState::getUnits() \endcode). - /// - /// \param[in] grid Run's active grid. Used to determine which - /// reservoir connections are in active grid cells. - /// - /// \param[in] schedule Run's SCHEDULE section from which to access - /// the active wells and the RFT configuration. - /// - /// \param[in,out] rftFile RFT output stream. On input, appropriately - /// positioned for new content (i.e., at end-of-file). On output, - /// containing new RFT output (if applicable) and positioned after - /// new contents. - void write(const int reportStep, - const double elapsed, - const ::Opm::UnitSystem& usys, - const ::Opm::EclipseGrid& grid, - const ::Opm::Schedule& schedule, - const ::Opm::data::WellRates& wellSol, - ::Opm::EclIO::OutputStream::RFT& rftFile); - -}} // namespace Opm::RftIO - -#endif // OPM_WRITE_RFT_HPP diff --git a/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/WriteRPT.hpp b/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/WriteRPT.hpp deleted file mode 100644 index 3dc9cc0543..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/WriteRPT.hpp +++ /dev/null @@ -1,46 +0,0 @@ -/* - Copyright (c) 2020 Equinor ASA - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef OPM_WRITE_RPT_HPP -#define OPM_WRITE_RPT_HPP - -#include - -namespace Opm { - - class Schedule; - class EclipseGrid; - - namespace RptIO { - - void write_report( - std::ostream&, - const std::string& report, - unsigned value, - const Schedule& schedule, - const EclipseGrid& grid, - std::size_t time_step - ); - - namespace workers { - - void write_WELSPECS(std::ostream&, unsigned, const Schedule&, const EclipseGrid& grid, std::size_t); - -} } } -#endif // OPM_WRITE_RPT_HPP diff --git a/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/WriteRestartHelpers.hpp b/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/WriteRestartHelpers.hpp deleted file mode 100644 index 40b141adf4..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/output/eclipse/WriteRestartHelpers.hpp +++ /dev/null @@ -1,72 +0,0 @@ -/* - Copyright (c) 2018 Statoil ASA - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef OPM_WRITE_RESTART_HELPERS_HPP -#define OPM_WRITE_RESTART_HELPERS_HPP - -#include - -// Forward declarations - -namespace Opm { - - class Runspec; - class EclipseGrid; - class EclipseState; - class Schedule; - class Well; - class UnitSystem; - class UDQActive; - -} // Opm - -namespace Opm { namespace RestartIO { namespace Helpers { - - std::vector - createDoubHead(const EclipseState& es, - const Schedule& sched, - const std::size_t lookup_step, - const double simTime, - const double nextTimeStep); - - std::vector - createInteHead(const EclipseState& es, - const EclipseGrid& grid, - const Schedule& sched, - const double simTime, - const int num_solver_steps, - const int report_step, - const int lookup_step); - - std::vector - createLogiHead(const EclipseState& es); - - std::vector - createUdqDims(const Schedule& sched, - const std::size_t lookup_step, - const std::vector& inteHead); - - std::vector - createActionxDims( const Runspec& rspec, - const Schedule& sched, - const std::size_t simStep); - -}}} // Opm::RestartIO::Helpers - -#endif // OPM_WRITE_RESTART_HELPERS_HPP diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Deck/Deck.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Deck/Deck.hpp deleted file mode 100644 index f50032aec4..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Deck/Deck.hpp +++ /dev/null @@ -1,182 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#ifndef DECK_HPP -#define DECK_HPP - -#include -#include -#include -#include -#include - -#include -#include - -#ifdef OPM_PARSER_DECK_API_WARNING -#ifndef OPM_PARSER_DECK_API -#pragma message "\n\n" \ -" ----------------------------------------------------------------------------------\n" \ -" The current compilation unit includes the header Deck.hpp. Outside of opm-parser \n" \ -" you are encouraged to use the EclipseState API instead of the low level Deck API. \n" \ -" If use of the Deck API is absolutely necessary you can silence this warning with \n" \ -" #define OPM_PARSER_DECK_API before including the Deck.hpp header. \n" \ -" ----------------------------------------------------------------------------------\n" \ -"" -#endif -#endif - - - -namespace Opm { - - /* - * The Deck (container) class owns all memory given to it via .addX(), as - * do all inner objects. This means that the Deck object itself must stay - * alive as long as DeckItem (and friends) are needed, to avoid - * use-after-free. - */ - class DeckOutput; - - class DeckView { - public: - typedef std::vector< DeckKeyword >::const_iterator const_iterator; - - bool hasKeyword( const DeckKeyword& keyword ) const; - bool hasKeyword( const std::string& keyword ) const; - template< class Keyword > - bool hasKeyword() const { - return hasKeyword( Keyword::keywordName ); - } - - const DeckKeyword& getKeyword( const std::string& keyword, size_t index ) const; - const DeckKeyword& getKeyword( const std::string& keyword ) const; - const DeckKeyword& getKeyword( size_t index ) const; - DeckKeyword& getKeyword( size_t index ); - template< class Keyword > - const DeckKeyword& getKeyword() const { - return getKeyword( Keyword::keywordName ); - } - template< class Keyword > - const DeckKeyword& getKeyword( size_t index ) const { - return getKeyword( Keyword::keywordName, index ); - } - template< class Keyword > - std::size_t count() const { - return count( Keyword::keywordName ); - } - - const std::vector< const DeckKeyword* > getKeywordList( const std::string& keyword ) const; - template< class Keyword > - const std::vector< const DeckKeyword* > getKeywordList() const { - return getKeywordList( Keyword::keywordName ); - } - - size_t count(const std::string& keyword) const; - size_t size() const; - - const_iterator begin() const; - const_iterator end() const; - - - protected: - void add( const DeckKeyword*, const_iterator, const_iterator ); - - const std::vector< size_t >& offsets( const std::string& ) const; - - DeckView( const_iterator first, const_iterator last ); - explicit DeckView( std::pair< const_iterator, const_iterator > ); - DeckView() = default; - void init( const_iterator, const_iterator ); - - private: - const_iterator first; - const_iterator last; - std::map< std::string, std::vector< size_t > > keywordMap; - - }; - - class Deck : private DeckView { - public: - using DeckView::const_iterator; - using DeckView::hasKeyword; - using DeckView::getKeyword; - using DeckView::getKeywordList; - using DeckView::count; - using DeckView::size; - using DeckView::begin; - using DeckView::end; - - using iterator = std::vector< DeckKeyword >::iterator; - - Deck(); - Deck( const Deck& ); - - static Deck serializeObject(); - - Deck& operator=(const Deck& rhs); - bool operator==(const Deck& data) const; - - void addKeyword( DeckKeyword&& keyword ); - void addKeyword( const DeckKeyword& keyword ); - - DeckKeyword& getKeyword( size_t ); - - const UnitSystem& getDefaultUnitSystem() const; - const UnitSystem& getActiveUnitSystem() const; - UnitSystem& getActiveUnitSystem(); - UnitSystem& getDefaultUnitSystem(); - void selectActiveUnitSystem( UnitSystem::UnitType unit_type ); - - const std::string& getInputPath() const; - const std::string& getDataFile() const; - void setDataFile(const std::string& dataFile); - std::string makeDeckPath(const std::string& path) const; - - iterator begin(); - iterator end(); - void write( DeckOutput& output ) const ; - friend std::ostream& operator<<(std::ostream& os, const Deck& deck); - - template - void serializeOp(Serializer& serializer) - { - serializer.vector(keywordList); - defaultUnits.serializeOp(serializer); - serializer(activeUnits); - serializer(m_dataFile); - serializer(input_path); - serializer(unit_system_access_count); - if (!serializer.isSerializing()) - this->init(this->keywordList.begin(), this->keywordList.end()); - } - - private: - Deck(std::vector&& keywordList); - - std::vector< DeckKeyword > keywordList; - UnitSystem defaultUnits; - std::unique_ptr activeUnits; - - std::string m_dataFile; - std::string input_path; - mutable std::size_t unit_system_access_count = 0; - }; -} -#endif /* DECK_HPP */ diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Deck/DeckItem.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Deck/DeckItem.hpp deleted file mode 100644 index 7181f6dd09..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Deck/DeckItem.hpp +++ /dev/null @@ -1,176 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#ifndef DECKITEM_HPP -#define DECKITEM_HPP - -#include -#include -#include -#include - -#include -#include -#include -#include - - -namespace Opm { - class DeckOutput; - - class DeckItem { - public: - - DeckItem() = default; - DeckItem( const std::string&, int); - DeckItem( const std::string&, RawString); - DeckItem( const std::string&, std::string); - DeckItem( const std::string&, double) = delete; - DeckItem( const std::string&, UDAValue) = delete; - DeckItem( const std::string&, UDAValue, const std::vector& active_dim, const std::vector& default_dim); - DeckItem( const std::string&, double, const std::vector& active_dim, const std::vector& default_dim); - - static DeckItem serializeObject(); - - const std::string& name() const; - - // return true if the default value was used for a given data point - bool defaultApplied( size_t ) const; - - // Return true if the item has a value for the current index; - // does not differentiate between default values from the - // config and values which have been set in the deck. - bool hasValue( size_t ) const; - - // if the number returned by this method is less than what is semantically - // expected (e.g. size() is less than the number of cells in the grid for - // keywords like e.g. SGL), then the remaining values are defaulted. The deck - // creates the defaulted items if all their sizes are fully specified by the - // keyword, though... - - size_t data_size() const; - - template - T get( size_t index ) const; - - - double getSIDouble( size_t ) const; - std::string getTrimmedString( size_t ) const; - - template< typename T > const std::vector< T >& getData() const; - const std::vector< double >& getSIDoubleData() const; - const std::vector& getValueStatus() const; - - void push_back( UDAValue ); - void push_back( int ); - void push_back( double ); - void push_back( std::string ); - void push_back( RawString ); - void push_back( UDAValue, size_t ); - void push_back( int, size_t ); - void push_back( double, size_t ); - void push_back( std::string, size_t ); - void push_backDefault( UDAValue ); - void push_backDefault( int ); - void push_backDefault( double ); - void push_backDefault( std::string ); - void push_backDefault( RawString ); - // trying to access the data of a "dummy default item" will raise an exception - - template - void push_backDummyDefault(); - - type_tag getType() const; - - void write(DeckOutput& writer) const; - friend std::ostream& operator<<(std::ostream& os, const DeckItem& item); - - - /* - The comparison can be adjusted with the cmp_default and - cmp_numeric flags. If cmp_default is set to true the - comparison will take the defaulted status of the items into - account, i.e. two items will compare differently if one is - defaulted and the other has the default value explicitly - set. The default behaviour is cmp_default == false - - itrespective of whether they have been set explicitly or - have been defaulted. - */ - bool equal(const DeckItem& other, bool cmp_default, bool cmp_numeric) const; - - /* - The operator== is implemented based on the equal( ) method, - with the arguments cmp_default=false and cmp_numeric=true. - */ - bool operator==(const DeckItem& other) const; - bool operator!=(const DeckItem& other) const; - static bool to_bool(std::string string_value); - - bool is_uda() { return (type == get_type< UDAValue >()); }; - bool is_double() { return type == get_type< double >(); }; - bool is_int() { return type == get_type< int >() ; }; - bool is_string() { return type == get_type< std::string >(); }; - - UDAValue& get_uda() { return uval[0]; }; - - template - void serializeOp(Serializer& serializer) - { - serializer(dval); - serializer(ival); - serializer(sval); - serializer.vector(uval); - serializer(type); - serializer(item_name); - serializer.template vector(value_status); - serializer(raw_data); - serializer.vector(active_dimensions); - serializer.vector(default_dimensions); - } - - private: - mutable std::vector< double > dval; - std::vector< int > ival; - std::vector< std::string > sval; - std::vector< RawString > rsval; - std::vector< UDAValue > uval; - - type_tag type = type_tag::unknown; - - std::string item_name; - std::vector value_status; - /* - To save space we mutate the dval object in place when asking for SI - data; the current state of of the dval member is tracked with the - raw_data bool member. - */ - mutable bool raw_data = true; - std::vector< Dimension > active_dimensions; - std::vector< Dimension > default_dimensions; - - template< typename T > std::vector< T >& value_ref(); - template< typename T > const std::vector< T >& value_ref() const; - template< typename T > void push( T ); - template< typename T > void push( T, size_t ); - template< typename T > void push_default( T ); - template< typename T > void write_vector(DeckOutput& writer, const std::vector& data) const; - }; -} -#endif /* DECKITEM_HPP */ - diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Deck/DeckKeyword.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Deck/DeckKeyword.hpp deleted file mode 100644 index dc157231d2..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Deck/DeckKeyword.hpp +++ /dev/null @@ -1,118 +0,0 @@ -/* - Copyright 2016 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef DECKKEYWORD_HPP -#define DECKKEYWORD_HPP - -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -namespace Opm { - class DeckOutput; - class ParserKeyword; - - class DeckKeyword { - public: - - - typedef std::vector< DeckRecord >::const_iterator const_iterator; - - DeckKeyword(); - explicit DeckKeyword(const ParserKeyword& parserKeyword); - DeckKeyword(const Location& location, const std::string& keywordName); - DeckKeyword(const ParserKeyword& parserKeyword, const std::vector>& record_list, UnitSystem& system_active, UnitSystem& system_default); - DeckKeyword(const ParserKeyword& parserKeyword, const std::vector& data); - DeckKeyword(const ParserKeyword& parserKeyword, const std::vector& data, UnitSystem& system_active, UnitSystem& system_default); - - static DeckKeyword serializeObject(); - - const std::string& name() const; - void setFixedSize(); - const Location& location() const; - - - size_t size() const; - void addRecord(DeckRecord&& record); - const DeckRecord& getRecord(size_t index) const; - DeckRecord& getRecord(size_t index); - const DeckRecord& getDataRecord() const; - void setDataKeyword(bool isDataKeyword = true); - void setDoubleRecordKeyword(bool isDoubleRecordKeyword = true); - bool isDataKeyword() const; - bool isDoubleRecordKeyword() const; - - const std::vector& getIntData() const; - const std::vector& getRawDoubleData() const; - const std::vector& getSIDoubleData() const; - const std::vector& getStringData() const; - const std::vector& getValueStatus() const; - size_t getDataSize() const; - void write( DeckOutput& output ) const; - void write_data( DeckOutput& output ) const; - void write_TITLE( DeckOutput& output ) const; - - template - bool isKeyword() const { - if (Keyword::keywordName == m_keywordName) - return true; - else - return false; - } - - const_iterator begin() const; - const_iterator end() const; - bool equal_data(const DeckKeyword& other, bool cmp_default = false, bool cmp_numeric = true) const; - bool equal(const DeckKeyword& other, bool cmp_default = false, bool cmp_numeric = true) const; - bool operator==(const DeckKeyword& other) const; - bool operator!=(const DeckKeyword& other) const; - - friend std::ostream& operator<<(std::ostream& os, const DeckKeyword& keyword); - - template - void serializeOp(Serializer& serializer) - { - serializer(m_keywordName); - m_location.serializeOp(serializer); - serializer.vector(m_recordList); - serializer(m_isDataKeyword); - serializer(m_slashTerminated); - serializer(m_isDoubleRecordKeyword); - } - - private: - std::string m_keywordName; - Location m_location; - - std::vector< DeckRecord > m_recordList; - bool m_isDataKeyword; - bool m_slashTerminated; - bool m_isDoubleRecordKeyword = false; - }; -} - -#endif /* DECKKEYWORD_HPP */ - diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Deck/DeckOutput.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Deck/DeckOutput.hpp deleted file mode 100644 index b3f5046e85..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Deck/DeckOutput.hpp +++ /dev/null @@ -1,64 +0,0 @@ -/* - Copyright 2017 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#ifndef DECK_OUTPUT_HPP -#define DECK_OUTPUT_HPP - -#include -#include -#include - -namespace Opm { - - class DeckOutput { - public: - explicit DeckOutput(std::ostream& s, int precision = 10); - ~DeckOutput(); - void stash_default( ); - - void start_record( ); - void end_record( ); - void split_record(); - - void start_keyword(const std::string& kw); - void end_keyword(bool add_slash); - - void endl(); - void write_string(const std::string& s); - template void write(const T& value); - - std::string item_sep = " "; // Separator between items on a row. - size_t columns = 16; // The maximum number of columns on a record. - std::string record_indent = " "; // The indentation when starting a new line. - std::string keyword_sep = "\n\n"; // The separation between keywords; - private: - std::ostream& os; - size_t default_count; - size_t row_count; - bool record_on; - int org_precision; - - template void write_value(const T& value); - void write_sep( ); - void set_precision(int precision); - }; -} - -#endif - diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Deck/DeckRecord.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Deck/DeckRecord.hpp deleted file mode 100644 index 3c52d56d23..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Deck/DeckRecord.hpp +++ /dev/null @@ -1,88 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#ifndef DECKRECORD_HPP -#define DECKRECORD_HPP - -#include -#include -#include -#include - -#include - -namespace Opm { - - class DeckRecord { - public: - typedef std::vector< DeckItem >::const_iterator const_iterator; - - DeckRecord() = default; - DeckRecord( std::vector< DeckItem >&& ); - - static DeckRecord serializeObject(); - - size_t size() const; - void addItem( DeckItem deckItem ); - - DeckItem& getItem( size_t index ); - DeckItem& getItem( const std::string& name ); - DeckItem& getDataItem(); - - const DeckItem& getItem( size_t index ) const; - const DeckItem& getItem( const std::string& name ) const; - const DeckItem& getDataItem() const; - - bool hasItem(const std::string& name) const; - - template - DeckItem& getItem() { - return getItem( Item::itemName ); - } - - template - const DeckItem& getItem() const { - return getItem( Item::itemName ); - } - - const_iterator begin() const; - const_iterator end() const; - - void write(DeckOutput& writer) const; - void write_data(DeckOutput& writer) const; - friend std::ostream& operator<<(std::ostream& os, const DeckRecord& record); - - bool equal(const DeckRecord& other, bool cmp_default, bool cmp_numeric) const; - bool operator==(const DeckRecord& other) const; - bool operator!=(const DeckRecord& other) const; - - template - void serializeOp(Serializer& serializer) - { - serializer.vector(m_items); - } - - private: - std::vector< DeckItem > m_items; - - }; - -} -#endif /* DECKRECORD_HPP */ - diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Deck/DeckSection.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Deck/DeckSection.hpp deleted file mode 100644 index a626ff0d7e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Deck/DeckSection.hpp +++ /dev/null @@ -1,122 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#ifndef SECTION_HPP -#define SECTION_HPP - -#include - -#include - -namespace Opm { - -enum class Section { - RUNSPEC, - GRID, - EDIT, - PROPS, - REGIONS, - SOLUTION, - SUMMARY, - SCHEDULE -}; - - class UnitSystem; - class Parser; - - -class DeckSection : public DeckView { - public: - using DeckView::const_iterator; - - DeckSection( const Deck& deck, const std::string& startKeyword ); - const std::string& name() const; - const UnitSystem& unitSystem() const; - - static bool hasRUNSPEC( const Deck& ); - static bool hasGRID( const Deck& ); - static bool hasEDIT( const Deck& ); - static bool hasPROPS( const Deck& ); - static bool hasREGIONS( const Deck& ); - static bool hasSOLUTION( const Deck& ); - static bool hasSUMMARY( const Deck& ); - static bool hasSCHEDULE( const Deck& ); - - // returns whether the deck has all mandatory sections and if all sections are in - // the right order - static bool checkSectionTopology(const Deck& deck, - const Parser&, - bool ensureKeywordSectionAffiliation = false); - - private: - std::string section_name; - const UnitSystem& units; - - }; - - class RUNSPECSection : public DeckSection { - public: - using DeckSection::const_iterator; - explicit RUNSPECSection(const Deck& deck) : DeckSection(deck, "RUNSPEC") {} - }; - - class GRIDSection : public DeckSection { - public: - using DeckSection::const_iterator; - explicit GRIDSection(const Deck& deck) : DeckSection(deck, "GRID") {} - }; - - class EDITSection : public DeckSection { - public: - using DeckSection::const_iterator; - explicit EDITSection(const Deck& deck) : DeckSection(deck, "EDIT") {} - }; - - class PROPSSection : public DeckSection { - public: - using DeckSection::const_iterator; - explicit PROPSSection(const Deck& deck) : DeckSection(deck, "PROPS") {} - }; - - class REGIONSSection : public DeckSection { - public: - using DeckSection::const_iterator; - explicit REGIONSSection(const Deck& deck) : DeckSection(deck, "REGIONS") {} - }; - - class SOLUTIONSection : public DeckSection { - public: - using DeckSection::const_iterator; - explicit SOLUTIONSection(const Deck& deck) : DeckSection(deck, "SOLUTION") {} - }; - - class SUMMARYSection : public DeckSection { - public: - using DeckSection::const_iterator; - explicit SUMMARYSection(const Deck& deck) : DeckSection(deck, "SUMMARY") {} - }; - - class SCHEDULESection : public DeckSection { - public: - using DeckSection::const_iterator; - explicit SCHEDULESection(const Deck& deck) : DeckSection(deck, "SCHEDULE") {} - }; -} - -#endif // SECTION_HPP diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Deck/DeckValue.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Deck/DeckValue.hpp deleted file mode 100644 index 5378178e4e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Deck/DeckValue.hpp +++ /dev/null @@ -1,58 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef DECK_VALUE_HPP -#define DECK_VALUE_HPP - -#include - -#include - -namespace Opm { - -class DeckValue { - - public: - DeckValue(); - explicit DeckValue(int); - explicit DeckValue(double); - explicit DeckValue(const std::string&); - - bool is_default() const; - - template - T get() const; - - template - bool is_compatible() const; - - private: - - bool default_value; - type_tag value_enum; - int int_value; - double double_value; - std::string string_value; - -}; - -} - - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Deck/UDAValue.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Deck/UDAValue.hpp deleted file mode 100644 index 8791a64cc7..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Deck/UDAValue.hpp +++ /dev/null @@ -1,93 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef UDA_VALUE_HPP -#define UDA_VALUE_HPP - -#include -#include -#include -#include - -#include - -namespace Opm { - -class UDAValue { -public: - UDAValue(); - explicit UDAValue(double); - explicit UDAValue(const std::string&); - explicit UDAValue(const Dimension& dim); - UDAValue(double data, const Dimension& dim); - UDAValue(const std::string& data, const Dimension& dim); - - static UDAValue serializeObject(); - - /* - The get() and get() methods will throw an - exception if the internal type and the template parameter disagree. - */ - - template - T get() const; - - /* - The getSI() can only be called for numerical values. - */ - double getSI() const; - bool zero() const; - - template - bool is() const; - - void assert_numeric() const; - void assert_numeric(const std::string& error_msg) const; - const Dimension& get_dim() const; - - bool operator==(const UDAValue& other) const; - bool operator!=(const UDAValue& other) const; - UDAValue& operator=(double value); - UDAValue& operator=(const std::string& value); - - bool is_numeric() { return numeric_value; } - - template - void serializeOp(Serializer& serializer) - { - serializer(numeric_value); - serializer(double_value); - serializer(string_value); - dim.serializeOp(serializer); - } - -private: - bool numeric_value; - double double_value; - std::string string_value; - - Dimension dim; -}; - -std::ostream& operator<<( std::ostream& stream, const UDAValue& uda_value ); -} - - - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Deck/value_status.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Deck/value_status.hpp deleted file mode 100644 index 1166bbf5eb..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Deck/value_status.hpp +++ /dev/null @@ -1,56 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef VALUE_STATUS -#define VALUE_STATUS - -namespace Opm { - -namespace value { - -enum class status : unsigned char { uninitialized = 0, - deck_value = 1, - empty_default = 2, - valid_default = 3 }; - - -inline bool defaulted(status st) { - if (st == status::empty_default) - return true; - - if (st == status::valid_default) - return true; - - return false; -} - - -inline bool has_value(status st) { - if (st == status::deck_value) - return true; - - if (st == status::valid_default) - return true; - - return false; -} -} -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Aquancon.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Aquancon.hpp deleted file mode 100644 index 2875c8f6e1..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Aquancon.hpp +++ /dev/null @@ -1,108 +0,0 @@ -/* - Copyright (C) 2017 TNO - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#ifndef OPM_AQUANCON_HPP -#define OPM_AQUANCON_HPP - -/* - Aquancon is a data container object meant to hold the data from the AQUANCON keyword. - This also includes the logic for parsing and connections to grid cells. It is meant to be used by opm-grid and opm-simulators in order to - implement the analytical aquifer models in OPM Flow. -*/ - -#include - -#include -#include -#include -#include -#include -#include -#include - -namespace Opm { - - class Aquancon { - public: - - struct AquancCell { - int aquiferID; - std::size_t global_index; - std::pair influx_coeff; - double influx_mult; - FaceDir::DirEnum face_dir; - - AquancCell(int aquiferID_arg, std::size_t gi, const std::pair& ic, double im, FaceDir::DirEnum fd) : - aquiferID(aquiferID_arg), - global_index(gi), - influx_coeff(ic), - influx_mult(im), - face_dir(fd) - {} - - AquancCell() = default; - - bool operator==(const AquancCell& other) const { - return this->aquiferID == other.aquiferID && - this->global_index == other.global_index && - this->influx_coeff == other.influx_coeff && - this->influx_mult == other.influx_mult && - this->face_dir == other.face_dir; - } - - template - void serializeOp(Serializer& serializer) - { - serializer(aquiferID); - serializer(global_index); - serializer(influx_coeff); - serializer(influx_mult); - serializer(face_dir); - } - }; - - - Aquancon() = default; - Aquancon(const EclipseGrid& grid, const Deck& deck); - Aquancon(const std::unordered_map>& data); - - static Aquancon serializeObject(); - - const std::unordered_map>& data() const; - bool operator==(const Aquancon& other) const; - bool active() const; - - const std::vector operator[](int aquiferID) const; - - template - void serializeOp(Serializer& serializer) - { - serializer.map(cells); - } - - private: - static bool cellInsideReservoirAndActive(const EclipseGrid& grid, int i, int j, int k); - static bool neighborCellInsideReservoirAndActive(const EclipseGrid& grid, int i, int j, int k, FaceDir::DirEnum faceDir); - - - std::unordered_map> cells; - }; -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/AquiferCT.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/AquiferCT.hpp deleted file mode 100644 index 91e342a68f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/AquiferCT.hpp +++ /dev/null @@ -1,133 +0,0 @@ -/* - Copyright (C) 2017 TNO - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#ifndef OPM_AQUIFERCT_HPP -#define OPM_AQUIFERCT_HPP - -/* - The AquiferCT which stands for AquiferCarterTracy is a data container object meant to hold the data for the aquifer carter tracy model. - This includes the logic for parsing as well as the associated tables. It is meant to be used by opm-grid and opm-simulators in order to - implement the Carter Tracy analytical aquifer model in OPM Flow. -*/ -#include - -#include -#include -#include -#include -#include - -#include -#include -#include - -namespace Opm { - - class TableManager; - - class AquiferCT { - public: - - struct AQUCT_data{ - - AQUCT_data(const DeckRecord& record, const TableManager& tables); - AQUCT_data() = default; - AQUCT_data(int aqID, - int infID, - int pvtID, - double phi_aq_, - double d0_, - double C_t_, - double r_o_, - double k_a_, - double c1_, - double h_, - double theta_, - double c2_, - const std::pair& p0_, - const std::vector& td_, - const std::vector& pi_, - const std::vector& cell_id_); - - int aquiferID; - int inftableID, pvttableID; - - double phi_aq , // aquifer porosity - d0, // aquifer datum depth - C_t , // total compressibility - r_o , // aquifer inner radius - k_a , // aquifer permeability - c1, // 0.008527 (METRIC, PVT-M); 0.006328 (FIELD); 3.6 (LAB) - h , // aquifer thickness - theta , // angle subtended by the aquifer boundary - c2 ; // 6.283 (METRIC, PVT-M); 1.1191 (FIELD); 6.283 (LAB). - - std::pair p0; //Initial aquifer pressure at datum depth, d0 - std::vector td, pi; - std::vector cell_id; - - bool operator==(const AQUCT_data& other) const; - - template - void serializeOp(Serializer& serializer) - { - serializer(aquiferID); - serializer(inftableID); - serializer(pvttableID); - serializer(phi_aq); - serializer(d0); - serializer(C_t); - serializer(r_o); - serializer(k_a); - serializer(c1); - serializer(h); - serializer(theta); - serializer(c2); - serializer(p0); - serializer(td); - serializer(pi); - serializer(cell_id); - } - }; - - AquiferCT() = default; - AquiferCT(const TableManager& tables, const Deck& deck); - AquiferCT(const std::vector& data); - - static AquiferCT serializeObject(); - - std::size_t size() const; - std::vector::const_iterator begin() const; - std::vector::const_iterator end() const; - const std::vector& data() const; - bool operator==(const AquiferCT& other) const; - - template - void serializeOp(Serializer& serializer) - { - serializer.vector(m_aquct); - } - - private: - std::vector m_aquct; - }; -} - - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/AquiferConfig.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/AquiferConfig.hpp deleted file mode 100644 index 91c2203565..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/AquiferConfig.hpp +++ /dev/null @@ -1,63 +0,0 @@ -/* - Copyright (C) 2020 Equinor - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef OPM_AUQIFER_CONFIG_HPP -#define OPM_AUQIFER_CONFIG_HPP - -#include -#include -#include - -namespace Opm { - -class TableManager; -class EclipseGrid; -class Deck; - -class AquiferConfig { -public: - AquiferConfig() = default; - AquiferConfig(const TableManager& tables, const EclipseGrid& grid, const Deck& deck); - AquiferConfig(const Aquifetp& fetp, const AquiferCT& ct, const Aquancon& conn); - - static AquiferConfig serializeObject(); - - bool active() const; - const AquiferCT& ct() const; - const Aquifetp& fetp() const; - const Aquancon& connections() const; - bool operator==(const AquiferConfig& other); - - template - void serializeOp(Serializer& serializer) - { - aquifetp.serializeOp(serializer); - aquiferct.serializeOp(serializer); - aqconn.serializeOp(serializer); - } - -private: - Aquifetp aquifetp; - AquiferCT aquiferct; - Aquancon aqconn; -}; - -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Aquifetp.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Aquifetp.hpp deleted file mode 100644 index bcd62ca2d5..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Aquifetp.hpp +++ /dev/null @@ -1,91 +0,0 @@ -/* - Copyright (C) 2017 TNO - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#ifndef OPM_AQUIFERFETP_HPP -#define OPM_AQUIFERFETP_HPP - -/* - The Aquiferfetp which stands for AquiferFetkovich is a data container object meant to hold the data for the fetkovich aquifer model. - This includes the logic for parsing as well as the associated tables. It is meant to be used by opm-grid and opm-simulators in order to - implement the Fetkovich analytical aquifer model in OPM Flow. -*/ -#include - - -namespace Opm { - -class Deck; -class DeckRecord; - -class Aquifetp { - public: - - struct AQUFETP_data{ - AQUFETP_data(const DeckRecord& record); - AQUFETP_data() = default; - AQUFETP_data(int aquiferID_, int pvttableID_, double J_, double C_t_, double V0_, double d0_, const std::pair& p0_); - bool operator==(const AQUFETP_data& other) const; - - int aquiferID; - int pvttableID; - double J, // Specified Productivity Index - C_t, // total rock compressibility - V0, // initial volume of water in aquifer - d0; // aquifer datum depth - std::pair p0; - - template - void serializeOp(Serializer& serializer) - { - serializer(aquiferID); - serializer(pvttableID); - serializer(J); - serializer(C_t); - serializer(V0); - serializer(d0); - serializer(p0); - } - }; - - Aquifetp() = default; - Aquifetp(const Deck& deck); - Aquifetp(const std::vector& data); - - static Aquifetp serializeObject(); - - const std::vector& data() const; - - std::size_t size() const; - std::vector::const_iterator begin() const; - std::vector::const_iterator end() const; - bool operator==(const Aquifetp& other) const; - - template - void serializeOp(Serializer& serializer) - { - serializer.vector(m_aqufetp); - } - -private: - std::vector m_aqufetp; -}; -} - - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/EclipseConfig.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/EclipseConfig.hpp deleted file mode 100644 index 313e010cf1..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/EclipseConfig.hpp +++ /dev/null @@ -1,61 +0,0 @@ -/* - Copyright 2016 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#ifndef OPM_ECLIPSE_CONFIG_HPP -#define OPM_ECLIPSE_CONFIG_HPP - -#include - -#include -#include - -namespace Opm { - - class Deck; - - class EclipseConfig - { - public: - EclipseConfig() = default; - EclipseConfig(const Deck& deck); - EclipseConfig(const InitConfig& initConfig, const IOConfig& io_conf); - - static EclipseConfig serializeObject(); - - const InitConfig& init() const; - IOConfig& io(); - const IOConfig& io() const; - const InitConfig& getInitConfig() const; - - bool operator==(const EclipseConfig& data) const; - - template - void serializeOp(Serializer& serializer) - { - m_initConfig.serializeOp(serializer); - io_config.serializeOp(serializer); - } - - private: - InitConfig m_initConfig; - IOConfig io_config; - }; -} - -#endif // OPM_ECLIPSE_CONFIG_HPP diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/EclipseState.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/EclipseState.hpp deleted file mode 100644 index e2db5a7ff2..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/EclipseState.hpp +++ /dev/null @@ -1,168 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#ifndef OPM_ECLIPSE_STATE_HPP -#define OPM_ECLIPSE_STATE_HPP - -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -namespace Opm { - - bool enable3DPropsTesting(); - - template< typename > class GridProperty; - template< typename > class GridProperties; - - class Box; - class BoxManager; - class Deck; - class DeckItem; - class DeckKeyword; - class DeckRecord; - class EclipseGrid; - class InitConfig; - class IOConfig; - class RestartConfig; - class DeckSection; - class SimulationConfig; - class TableManager; - class UnitSystem; - - - class EclipseState { - public: - enum EnabledTypes { - IntProperties = 0x01, - DoubleProperties = 0x02, - - AllProperties = IntProperties | DoubleProperties - }; - - EclipseState() = default; - EclipseState(const Deck& deck); - virtual ~EclipseState() = default; - - const IOConfig& getIOConfig() const; - IOConfig& getIOConfig(); - - const InitConfig& getInitConfig() const; - const SimulationConfig& getSimulationConfig() const; - virtual const EclipseGrid& getInputGrid() const; - - const FaultCollection& getFaults() const; - const TransMult& getTransMult() const; - - /// non-neighboring connections - /// the non-standard adjacencies as specified in input deck - const NNC& getInputNNC() const; - bool hasInputNNC() const; - - /// editing non-neighboring connections - /// the non-standard adjacencies as specified in input deck - const EDITNNC& getInputEDITNNC() const; - bool hasInputEDITNNC() const; - - // The potentially parallelized field properties - virtual const FieldPropsManager& fieldProps() const; - // Always the non-parallel field properties - virtual const FieldPropsManager& globalFieldProps() const; - const TableManager& getTableManager() const; - const EclipseConfig& getEclipseConfig() const; - const EclipseConfig& cfg() const; - const GridDims& gridDims() const; - - // the unit system used by the deck. note that it is rarely needed to convert - // units because internally to opm-parser everything is represented by SI - // units... - const UnitSystem& getDeckUnitSystem() const; - const UnitSystem& getUnits() const; - - std::string getTitle() const; - - void applyModifierDeck(const Deck& deck); - - const Runspec& runspec() const; - const AquiferConfig& aquifer() const; - const TracerConfig& tracer() const; - - template - void serializeOp(Serializer& serializer) - { - // FieldPropsManager is handled otherwise, do not add - m_tables.serializeOp(serializer); - m_runspec.serializeOp(serializer); - m_eclipseConfig.serializeOp(serializer); - m_deckUnitSystem.serializeOp(serializer); - m_inputNnc.serializeOp(serializer); - m_inputEditNnc.serializeOp(serializer); - m_gridDims.serializeOp(serializer); - m_simulationConfig.serializeOp(serializer); - m_transMult.serializeOp(serializer); - m_faults.serializeOp(serializer); - serializer(m_title); - aquifer_config.serializeOp(serializer); - tracer_config.serializeOp(serializer); - } - - private: - void initIOConfigPostSchedule(const Deck& deck); - void initTransMult(); - void initFaults(const Deck& deck); - - void setMULTFLT(const Opm::DeckSection& section); - - void complainAboutAmbiguousKeyword(const Deck& deck, - const std::string& keywordName); - - protected: - TableManager m_tables; - Runspec m_runspec; - EclipseConfig m_eclipseConfig; - UnitSystem m_deckUnitSystem; - NNC m_inputNnc; - EDITNNC m_inputEditNnc; - EclipseGrid m_inputGrid; - GridDims m_gridDims; - FieldPropsManager field_props; - SimulationConfig m_simulationConfig; - TransMult m_transMult; - - FaultCollection m_faults; - std::string m_title; - AquiferConfig aquifer_config; - TracerConfig tracer_config; - }; -} - -#endif // OPM_ECLIPSE_STATE_HPP diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Edit/EDITNNC.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Edit/EDITNNC.hpp deleted file mode 100644 index 6bc1a378bc..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Edit/EDITNNC.hpp +++ /dev/null @@ -1,60 +0,0 @@ -/* - Copyright 2018 Equinor AS - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ -#ifndef OPM_COMMON_EDITNNC_HPP -#define OPM_COMMON_EDITNNC_HPP - -#include -namespace Opm -{ - -/// Represents edit information for non-neighboring connections (NNCs, faults, etc.) -class EDITNNC -{ -public: - EDITNNC() = default; - - /// Construct from input deck - explicit EDITNNC(const Deck& deck); - - /// Returns an instance used for serialization test - static EDITNNC serializeObject(); - - /// \brief Get an ordered set of EDITNNC - const std::vector& data() const - { - return m_editnnc; - } - /// \brief Get the number of entries - size_t size() const; - /// \brief Whether EDITNNC was empty. - bool empty() const; - - bool operator==(const EDITNNC& data) const; - - template - void serializeOp(Serializer& serializer) - { - serializer.vector(m_editnnc); - } - -private: - std::vector m_editnnc; -}; -} -#endif // OPM_COMMON_EDITNNC_HPP diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/EndpointScaling.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/EndpointScaling.hpp deleted file mode 100644 index 52333827f2..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/EndpointScaling.hpp +++ /dev/null @@ -1,72 +0,0 @@ -/* - Copyright 2017 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify it under the terms - of the GNU General Public License as published by the Free Software - Foundation, either version 3 of the License, or (at your option) any later - version. - - OPM is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR - A PARTICULAR PURPOSE. See the GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along with - OPM. If not, see . -*/ - -#ifndef OPM_ENDPOINTSCALING_HPP -#define OPM_ENDPOINTSCALING_HPP - -#include - -namespace Opm { -class Deck; - - -class EndpointScaling { - public: - EndpointScaling() noexcept = default; - explicit EndpointScaling( const Deck& ); - - static EndpointScaling serializeObject(); - - /* true if endpoint scaling is enabled, otherwise false */ - operator bool() const noexcept; - - bool directional() const noexcept; - bool nondirectional() const noexcept; - bool reversible() const noexcept; - bool irreversible() const noexcept; - bool twopoint() const noexcept; - bool threepoint() const noexcept; - - bool operator==(const EndpointScaling& data) const; - - template - void serializeOp(Serializer& serializer) - { - if (serializer.isSerializing()) - serializer(options.to_ulong()); - else { - unsigned long bits = 0; - serializer(bits); - options = std::bitset<4>(bits); - } - } - - private: - enum class option { - any = 0, - directional = 1, - reversible = 2, - threepoint = 3, - }; - - using ue = std::underlying_type< option >::type; - std::bitset< 4 > options; -}; -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Grid/Box.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Grid/Box.hpp deleted file mode 100644 index 0a8ddc19d3..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Grid/Box.hpp +++ /dev/null @@ -1,85 +0,0 @@ -/* - Copyright 2014 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - - -#ifndef BOX_HPP_ -#define BOX_HPP_ - -#include -#include - -namespace Opm { - class DeckRecord; - class EclipseGrid; - - class Box { - public: - - struct cell_index { - std::size_t global_index; - std::size_t active_index; - std::size_t data_index; - - cell_index(std::size_t g,std::size_t a, std::size_t d) : - global_index(g), - active_index(a), - data_index(d) - {} - - }; - - Box(const EclipseGrid& grid); - Box(const EclipseGrid& grid , int i1 , int i2 , int j1 , int j2 , int k1 , int k2); - void update(const DeckRecord& deckRecord); - void reset(); - - size_t size() const; - bool isGlobal() const; - size_t getDim(size_t idim) const; - const std::vector& index_list() const; - const std::vector& getIndexList() const; - bool equal(const Box& other) const; - - - int I1() const; - int I2() const; - int J1() const; - int J2() const; - int K1() const; - int K2() const; - - private: - void init(int i1, int i2, int j1, int j2, int k1, int k2); - void initIndexList(); - const EclipseGrid& grid; - size_t m_stride[3]; - size_t m_dims[3] = { 0, 0, 0 }; - size_t m_offset[3]; - - bool m_isGlobal; - std::vector global_index_list; - std::vector m_index_list; - - int lower(int dim) const; - int upper(int dim) const; - }; -} - - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Grid/BoxManager.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Grid/BoxManager.hpp deleted file mode 100644 index 9e247c88ba..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Grid/BoxManager.hpp +++ /dev/null @@ -1,78 +0,0 @@ -/* - Copyright 2014 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - - -#ifndef BOXMANAGER_HPP_ -#define BOXMANAGER_HPP_ - -#include -#include - -#include -#include - -/* - This class implements a simple book keeping system for the current - input box. In general there are three different input boxes which - are relevant: - - 1. The global box give by the complete dimensions of the grid. - - 2. The input box given explicitly by the BOX keyword. That BOX will - apply to all following FIELD properties, and it will continue - to apply until either: - - - ENDBOX - - A new BOX - - End of current section - - is encountered. - - 3. Some keywords allow for a Box which applies only to the elements - of that keyword. - -*/ - - -namespace Opm { - - class BoxManager { - public: - BoxManager(const EclipseGrid& grid); - - void setInputBox( int i1,int i2 , int j1 , int j2 , int k1 , int k2); - void setKeywordBox( int i1,int i2 , int j1 , int j2 , int k1 , int k2); - - void endSection(); - void endInputBox(); - void endKeyword(); - - const Box& getActiveBox() const; - const std::vector& index_list() const; - - private: - const EclipseGrid& grid; - std::unique_ptr m_globalBox; - std::unique_ptr m_inputBox; - std::unique_ptr m_keywordBox; - }; -} - - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Grid/EclipseGrid.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Grid/EclipseGrid.hpp deleted file mode 100644 index d6f3317ab9..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Grid/EclipseGrid.hpp +++ /dev/null @@ -1,312 +0,0 @@ -/* - Copyright 2014 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - - -#ifndef OPM_PARSER_ECLIPSE_GRID_HPP -#define OPM_PARSER_ECLIPSE_GRID_HPP - - -#include -#include -#include -#include -#include - -#include - -#include -#include -#include - -namespace Opm { - - class Deck; - class ZcornMapper; - class NNC; - - /** - About cell information and dimension: The actual grid - information is held in a pointer to an ERT ecl_grid_type - instance. This pointer must be used for access to all cell - related properties, including: - - - Size of cells - - Real world position of cells - - Active/inactive status of cells - */ - - class EclipseGrid : public GridDims { - public: - EclipseGrid() = default; - explicit EclipseGrid(const std::string& filename); - - /* - These constructors will make a copy of the src grid, with - zcorn and or actnum have been adjustments. - */ - EclipseGrid(const EclipseGrid& src) = default; - EclipseGrid(const EclipseGrid& src, const std::vector& actnum); - EclipseGrid(const EclipseGrid& src, const double* zcorn, const std::vector& actnum); - - EclipseGrid(size_t nx, size_t ny, size_t nz, - double dx = 1.0, double dy = 1.0, double dz = 1.0); - - EclipseGrid(std::array& dims , - const std::vector& coord , - const std::vector& zcorn , - const int * actnum = nullptr, - const double * mapaxes = nullptr); - - - /// EclipseGrid ignores ACTNUM in Deck, and therefore needs ACTNUM - /// explicitly. If a null pointer is passed, every cell is active. - EclipseGrid(const Deck& deck, const int * actnum = nullptr); - - static bool hasGDFILE(const Deck& deck); - static bool hasCylindricalKeywords(const Deck& deck); - static bool hasCornerPointKeywords(const Deck&); - static bool hasCartesianKeywords(const Deck&); - size_t getNumActive( ) const; - bool allActive() const; - - size_t activeIndex(size_t i, size_t j, size_t k) const; - size_t activeIndex(size_t globalIndex) const; - - void save(const std::string& filename, bool formatted, const Opm::NNC& nnc, const Opm::UnitSystem& units) const; - /* - Observe that the there is a getGlobalIndex(i,j,k) - implementation in the base class. This method - translating - from an active index to a global index must be implemented - in the current class. - */ - size_t getGlobalIndex(size_t active_index) const; - size_t getGlobalIndex(size_t i, size_t j, size_t k) const; - - /* - For RADIAL grids you can *optionally* use the keyword - 'CIRCLE' to denote that period boundary conditions should be - applied in the 'THETA' direction; this will only apply if - the theta keywords entered sum up to exactly 360 degrees! - */ - - bool circle( ) const; - bool isPinchActive( ) const; - double getPinchThresholdThickness( ) const; - PinchMode::ModeEnum getPinchOption( ) const; - PinchMode::ModeEnum getMultzOption( ) const; - - MinpvMode::ModeEnum getMinpvMode() const; - const std::vector& getMinpvVector( ) const; - - /* - Will return a vector of nactive elements. The method will - behave differently depending on the lenght of the - input_vector: - - nx*ny*nz: only the values corresponding to active cells - are copied out. - - nactive: The input vector is copied straight out again. - - ??? : Exception. - */ - - template - std::vector compressedVector(const std::vector& input_vector) const { - if( input_vector.size() == this->getNumActive() ) { - return input_vector; - } - - if (input_vector.size() != getCartesianSize()) - throw std::invalid_argument("Input vector must have full size"); - - { - std::vector compressed_vector( this->getNumActive() ); - const auto& active_map = this->getActiveMap( ); - - for (size_t i = 0; i < this->getNumActive(); ++i) - compressed_vector[i] = input_vector[ active_map[i] ]; - - return compressed_vector; - } - } - - - /// Will return a vector a length num_active; where the value - /// of each element is the corresponding global index. - const std::vector& getActiveMap() const; - std::array getCellCenter(size_t i,size_t j, size_t k) const; - std::array getCellCenter(size_t globalIndex) const; - std::array getCornerPos(size_t i,size_t j, size_t k, size_t corner_index) const; - std::vector activeVolume() const; - double getCellVolume(size_t globalIndex) const; - double getCellVolume(size_t i , size_t j , size_t k) const; - double getCellThickness(size_t globalIndex) const; - double getCellThickness(size_t i , size_t j , size_t k) const; - std::array getCellDims(size_t i,size_t j, size_t k) const; - std::array getCellDims(size_t globalIndex) const; - bool cellActive( size_t globalIndex ) const; - bool cellActive( size_t i , size_t j, size_t k ) const; - double getCellDepth(size_t i,size_t j, size_t k) const; - double getCellDepth(size_t globalIndex) const; - ZcornMapper zcornMapper() const; - - const std::vector& getCOORD() const; - const std::vector& getZCORN() const; - const std::vector& getACTNUM( ) const; - const std::vector& getMAPAXES() const; - const std::string& getMAPUNITS() const { return m_mapunits; } ; - - /* - The fixupZCORN method is run as part of constructiong the grid. This will adjust the - z-coordinates to ensure that cells do not overlap. The return value is the number of - points which have been adjusted. The number of zcorn nodes that has ben fixed is - stored in private member zcorn_fixed. - */ - - size_t fixupZCORN(); - size_t getZcornFixed() { return zcorn_fixed; }; - - // resetACTNUM with no arguments will make all cells in the grid active. - - void resetACTNUM(); - void resetACTNUM( const std::vector& actnum); - - bool equal(const EclipseGrid& other) const; - - private: - std::vector m_minpvVector; - MinpvMode::ModeEnum m_minpvMode; - Value m_pinch; - PinchMode::ModeEnum m_pinchoutMode; - PinchMode::ModeEnum m_multzMode; - - bool m_circle = false; - - size_t zcorn_fixed = 0; - bool m_useActnumFromGdfile = false; - - // Input grid data. - std::vector m_zcorn; - std::vector m_coord; - std::vector m_mapaxes; - std::vector m_actnum; - std::string m_mapunits; - - // Mapping to/from active cells. - int m_nactive; - std::vector m_active_to_global; - std::vector m_global_to_active; - - void initGridFromEGridFile(Opm::EclIO::EclFile& egridfile, std::string fileName); - void resetACTNUM( const int* actnum); - - void initBinaryGrid(const Deck& deck); - - void initCornerPointGrid(const std::vector& coord , - const std::vector& zcorn , - const int * actnum, - const double * mapaxes); - - bool keywInputBeforeGdfile(const Deck& deck, const std::string keyword) const; - - void initCylindricalGrid(const Deck&); - void initCartesianGrid(const Deck&); - void initDTOPSGrid(const Deck&); - void initDVDEPTHZGrid(const Deck&); - void initGrid(const Deck&); - void initCornerPointGrid(const Deck&); - void assertCornerPointKeywords(const Deck&); - - static bool hasDVDEPTHZKeywords(const Deck&); - static bool hasDTOPSKeywords(const Deck&); - static void assertVectorSize(const std::vector& vector, size_t expectedSize, const std::string& msg); - - static std::vector createTOPSVector(const std::array& dims, const std::vector& DZ, const Deck&); - static std::vector createDVector(const std::array& dims, std::size_t dim, const std::string& DKey, const std::string& DVKey, const Deck&); - static void scatterDim(const std::array& dims , size_t dim , const std::vector& DV , std::vector& D); - - - std::vector makeCoordDxDyDzTops(const std::vector& dx, const std::vector& dy, const std::vector& dz, const std::vector& tops) const; - std::vector makeZcornDzTops(const std::vector& dz, const std::vector& tops) const ; - std::vector makeZcornDzvDepthz(const std::vector& dzv, const std::vector& depthz) const; - std::vector makeCoordDxvDyvDzvDepthz(const std::vector& dxv, const std::vector& dyv, const std::vector& dzv, const std::vector& depthz) const; - - void getCellCorners(const std::array& ijk, const std::array& dims, std::array& X, std::array& Y, std::array& Z) const; - void getCellCorners(const std::size_t globalIndex, - std::array& X, - std::array& Y, - std::array& Z) const; - - }; - - class CoordMapper { - public: - CoordMapper(size_t nx, size_t ny); - size_t size() const; - - - /* - dim = 0,1,2 for x, y and z coordinate respectively. - layer = 0,1 for k=0 and k=nz layers respectively. - */ - - size_t index(size_t i, size_t j, size_t dim, size_t layer) const; - private: - size_t nx; - size_t ny; - }; - - - - class ZcornMapper { - public: - ZcornMapper(size_t nx, size_t ny, size_t nz); - size_t index(size_t i, size_t j, size_t k, int c) const; - size_t index(size_t g, int c) const; - size_t size() const; - - /* - The fixupZCORN method will take a zcorn vector as input and - run through it. If the following situation is detected: - - /| /| - / | / | - / | / | - / | / | - / | ==> / | - / | / | - ---/------x /---------x - | / - |/ - - */ - size_t fixupZCORN( std::vector& zcorn); - bool validZCORN( const std::vector& zcorn) const; - private: - std::array dims; - std::array stride; - std::array cell_shift; - }; -} - - - - -#endif // OPM_PARSER_ECLIPSE_GRID_HPP diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Grid/FaceDir.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Grid/FaceDir.hpp deleted file mode 100644 index f49b71a094..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Grid/FaceDir.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/* - Copyright 2014 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef OPM_FACEDIR_HPP -#define OPM_FACEDIR_HPP - -#include - -namespace Opm { - - - namespace FaceDir { - - enum DirEnum { - XPlus = 1, - XMinus = 2, - YPlus = 4, - YMinus = 8, - ZPlus = 16, - ZMinus = 32 - }; - /** - The MULTREGTScanner will use these values as bitmaps; - i.e. it is essential they form a 2^n sequence. - */ - - - DirEnum FromString(const std::string& stringValue); - int FromMULTREGTString(const std::string& stringValue); - } -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Grid/Fault.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Grid/Fault.hpp deleted file mode 100644 index 483892e65c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Grid/Fault.hpp +++ /dev/null @@ -1,66 +0,0 @@ -/* - Copyright 2014 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ -#ifndef FAULT_HPP_ -#define FAULT_HPP_ - -#include -#include -#include - -#include - -namespace Opm { - - class FaultFace; - - -class Fault { -public: - Fault() = default; - explicit Fault(const std::string& faultName); - - static Fault serializeObject(); - - const std::string& getName() const; - void setTransMult(double transMult); - double getTransMult() const; - void addFace( FaultFace ); - std::vector< FaultFace >::const_iterator begin() const; - std::vector< FaultFace >::const_iterator end() const; - - bool operator==( const Fault& rhs ) const; - bool operator!=( const Fault& rhs ) const; - - template - void serializeOp(Serializer& serializer) - { - serializer(m_name); - serializer(m_transMult); - serializer.vector(m_faceList); - } - -private: - std::string m_name; - double m_transMult = 0.0; - std::vector< FaultFace > m_faceList; -}; -} - - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Grid/FaultCollection.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Grid/FaultCollection.hpp deleted file mode 100644 index 45a485d122..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Grid/FaultCollection.hpp +++ /dev/null @@ -1,70 +0,0 @@ -/* - Copyright 2014 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ -#ifndef OPM_PARSER_FAULT_COLLECTION_HPP -#define OPM_PARSER_FAULT_COLLECTION_HPP - -#include -#include - -#include -#include - -namespace Opm { - - class DeckRecord; - class GridDims; - class GRIDSection; - - -class FaultCollection { -public: - FaultCollection(); - FaultCollection(const GRIDSection& gridSection, const GridDims& grid); - - static FaultCollection serializeObject(); - - size_t size() const; - bool hasFault(const std::string& faultName) const; - Fault& getFault(const std::string& faultName); - const Fault& getFault(const std::string& faultName) const; - Fault& getFault(size_t faultIndex); - const Fault& getFault(size_t faultIndex) const; - - /// we construct the fault based on faultName. To get the fault: getFault - void addFault(const std::string& faultName); - void setTransMult(const std::string& faultName , double transMult); - - bool operator==(const FaultCollection& data) const; - - template - void serializeOp(Serializer& serializer) - { - m_faults.serializeOp(serializer); - } - -private: - void addFaultFaces(const GridDims& grid, - const DeckRecord& faultRecord, - const std::string& faultName); - OrderedMap m_faults; - -}; -} - -#endif // OPM_PARSER_FAULT_COLLECTION_HPP diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Grid/FaultFace.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Grid/FaultFace.hpp deleted file mode 100644 index a302b826ba..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Grid/FaultFace.hpp +++ /dev/null @@ -1,64 +0,0 @@ -/* - Copyright 2014 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ -#ifndef OPM_PARSER_FAULT_FACE_HPP -#define OPM_PARSER_FAULT_FACE_HPP - -#include -#include - -#include - -namespace Opm { - - -class FaultFace { -public: - FaultFace() = default; - FaultFace(size_t nx , size_t ny , size_t nz, - size_t I1 , size_t I2, - size_t J1 , size_t J2, - size_t K1 , size_t K2, - FaceDir::DirEnum faceDir); - - static FaultFace serializeObject(); - - std::vector::const_iterator begin() const; - std::vector::const_iterator end() const; - FaceDir::DirEnum getDir() const; - - bool operator==( const FaultFace& rhs ) const; - bool operator!=( const FaultFace& rhs ) const; - - template - void serializeOp(Serializer& serializer) - { - serializer(m_faceDir); - serializer(m_indexList); - } - -private: - static void checkCoord(size_t dim , size_t l1 , size_t l2); - FaceDir::DirEnum m_faceDir = FaceDir::XPlus; - std::vector m_indexList; -}; - - -} - -#endif // OPM_PARSER_FAULT_FACE_HPP diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Grid/FieldPropsManager.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Grid/FieldPropsManager.hpp deleted file mode 100644 index 0cdfd6c6f3..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Grid/FieldPropsManager.hpp +++ /dev/null @@ -1,232 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify it under the terms - of the GNU General Public License as published by the Free Software - Foundation, either version 3 of the License, or (at your option) any later - version. - - OPM is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR - A PARTICULAR PURPOSE. See the GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along with - OPM. If not, see . -*/ - -#ifndef FIELDPROPS_MANAGER_HPP -#define FIELDPROPS_MANAGER_HPP - -#include -#include - -namespace Opm { - -class EclipseGrid; -class Deck; -class FieldProps; -class Phases; -class TableManager; - -class FieldPropsManager { - -struct MemInfo { - std::size_t global_size; - std::size_t active_size; - std::size_t int_fields; - std::size_t double_fields; - std::size_t total; - - MemInfo(std::size_t gsize, std::size_t asize, std::size_t num_int, std::size_t num_double) : - global_size(gsize), - active_size(asize), - int_fields(num_int), - double_fields(num_double), - total(asize * sizeof(int) * num_int + // The integer fields like SATNUM and PVTNUM - asize * sizeof(double) * num_double + // The double fields like PORO and SWATINIT - asize * sizeof(double) * 2 + // Depth and volume of all active cells - asize * sizeof(unsigned char) * (num_int + num_double) + // The per cell value status flag - gsize * sizeof(int)) // The global ACTNUM mapping - { - }; - - -}; - - - -public: - // The default constructor should be removed when the FieldPropsManager is mandatory - // The default constructed fieldProps object is **NOT** usable - FieldPropsManager() = default; - FieldPropsManager(const Deck& deck, const Phases& ph, const EclipseGrid& grid, const TableManager& tables); - virtual void reset_actnum(const std::vector& actnum); - const std::string& default_region() const; - virtual std::vector actnum() const; - virtual std::vector porv(bool global = false) const; - MemInfo meminfo( ) const; - - /* - The number of cells in the fields managed by this FieldPropsManager. - Initially this will correspond to the number of active cells in the grid - used when constructing the FieldPropsManager, but using the reset_actnum() - method it is possible to deactivate additional cells. - */ - std::size_t active_size() const; - - - /* - Because the FieldProps class can autocreate properties the semantics of - get() and has() is slightly non intuitve: - - - The has("KW") method will check if the current FieldProps container - has an installed "KW" keyword; if the container has the keyword in - question it will check if all elements have been assigned a value - only - in that case will it return true. The has("KW") method will *not* try - to create a new keyword. - - - The has("KW") method will *not* consult the supported("KW") - method; i.e. if you ask has("UNKNOWN_KEYWORD") you will just get a - false. - - - The get("KW") method will try to create a new keyword if it does not - already have the keyword you are asking for. This implies that you can - get the following non intuitive sequence of events: - - FieldPropsManager fpm(deck, grid); - - fpm.has("SATNUM"); => false - auto satnum = fpm.get("SATNUM"); => SATNUM is autocreated - fpm.has("SATNUM"); => true - - - When checking whether the container has the keyword you should rephrase - the question slightly: - - * Does the container have the keyword *right now* => has("KW") - * Can the container provide the keyword => ptr = try_get("KW") - - - It is quite simple to create a deck where the keywords are only partly - initialized, all the methods in the FieldPropsManager only consider - fully initialized keywords. - */ - - - /* - The get_copy() has exactly the same behaviour as get(), but the important - difference is that said keyword is not already in the container it is not - installed in the container; if we look at SATNUM which is a keywor which - can be automatically instantiated we have the following behavior: - - get(): - fp.has("SATNUM") -> false - const std::vector& satnum = fp.get("SATNUM") - fp.has("SATNUM") -> true; - - - get_copy(): - fp.has("SATNUM") -> false - const std::vector& satnum = fp.get_copy("SATNUM") - fp.has("SATNUM") -> false - */ - - - template - std::vector get_copy(const std::string& keyword, bool global=false) const; - - /* - Will return a pointer to the keyword data, or nullptr if the container - does not have suce a keyword. Observe that container will hold on to an - manage the underlying keyword data. - - The try_get function will return a nullptr if the container does not - contain said keyword, or if the keyword has not been fully initialized. If - you ask for a totally unknown keyword the method will return nullptr. - */ - template const std::vector* try_get(const - std::string& keyword) const; - - /* - You can ask whether the elements in the keyword have a default value - - which typically is calculated in some way, or if it has been explicitly - assigned to in the deck. - */ - template - std::vector defaulted(const std::string& keyword) const; - - - /* - Check whether the container supports/recognizes a keyword at all: - - supported("PORO") => true - supported("NO_SUCH_KEYWORD") => false - - The method does not at all consult the content of the container - it is a - static method. - */ - template - static bool supported(const std::string& keyword); - - /* - The keys() function will return a list of keys corresponding to the fully - initialized keywords in the container. Observe that the implementation - special cases the PORV and ACTNUM keywords, since these are present with - special functions porv(bool) and actnum() the "PORV" and "ACTNUM" string - literals are excluded from the keys() list. - */ - template - std::vector keys() const; - - virtual const std::vector& get_int(const std::string& keyword) const { return this->get(keyword); } - virtual std::vector get_global_int(const std::string& keyword) const { return this->get_global(keyword); } - - virtual const std::vector& get_double(const std::string& keyword) const { return this->get(keyword); } - virtual std::vector get_global_double(const std::string& keyword) const { return this->get_global(keyword); } - - virtual bool has_int(const std::string& keyword) const { return this->has(keyword); } - virtual bool has_double(const std::string& keyword) const { return this->has(keyword); } - -private: - /* - Return the keyword values as a std::vector<>. All elements in the return - value are guaranteed to be assigned a valid value. If the keyword is not - in the container, or not all elements have a valid value - an exception - will be raised: - - - keyword which is not supported at all -> std::logic_error - - keyword which is not in the deck at all -> std::out_of_range - - keyword which has not been fully initialized -> std::runtime_error - - Many of the keywords in the container can be automatically created, in - that case the get() method will silently create a new keyword and default - initialize if it is not already in the container. The different exceptions - raised for the different error conditions are the same for get(), - get_copy() and get_global(). - */ - template - const std::vector& get(const std::string& keyword) const; - - /* - Will check if the container has the keyword loaded; in a fully initialized - state. If you ask for a keyword which is not supported at all you will - just get false back. - */ - template - bool has(const std::string& keyword) const; - - /* - This is exactly like the get() method, but the returned vector will have - global cartesian size, where all inactive cells have been filled with - zeros. - */ - template - std::vector get_global(const std::string& keyword) const; - - - std::shared_ptr fp; -}; - -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Grid/GridDims.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Grid/GridDims.hpp deleted file mode 100644 index 59bf0564e4..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Grid/GridDims.hpp +++ /dev/null @@ -1,82 +0,0 @@ -/* - Copyright 2016 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef OPM_PARSER_GRIDDIMS_HPP -#define OPM_PARSER_GRIDDIMS_HPP - -#include -#include -#include - -#include -#include - -namespace Opm { - class GridDims - { - public: - - GridDims(); - explicit GridDims(std::array xyz); - GridDims(size_t nx, size_t ny, size_t nz); - - static GridDims serializeObject(); - - explicit GridDims(const Deck& deck); - - size_t getNX() const; - - size_t getNY() const; - size_t getNZ() const; - size_t operator[](int dim) const; - - const std::array getNXYZ() const; - - size_t getGlobalIndex(size_t i, size_t j, size_t k) const; - - const std::array getIJK(size_t globalIndex) const; - - size_t getCartesianSize() const; - - void assertGlobalIndex(size_t globalIndex) const; - - void assertIJK(size_t i, size_t j, size_t k) const; - - bool operator==(const GridDims& data) const; - - template - void serializeOp(Serializer& serializer) - { - serializer(m_nx); - serializer(m_ny); - serializer(m_nz); - } - - protected: - size_t m_nx; - size_t m_ny; - size_t m_nz; - - private: - void init(const DeckKeyword& keyword); - void binary_init(const Deck& deck); - }; -} - -#endif /* OPM_PARSER_GRIDDIMS_HPP */ diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Grid/MULTREGTScanner.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Grid/MULTREGTScanner.hpp deleted file mode 100644 index 85e5136b7e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Grid/MULTREGTScanner.hpp +++ /dev/null @@ -1,136 +0,0 @@ -/* - Copyright 2014 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - - -#ifndef OPM_PARSER_MULTREGTSCANNER_HPP -#define OPM_PARSER_MULTREGTSCANNER_HPP - -#include -#include -#include - - -namespace Opm { - - template< typename > class GridProperties; - - class DeckRecord; - class DeckKeyword; - - namespace MULTREGT { - - - enum NNCBehaviourEnum { - NNC = 1, - NONNC = 2, - ALL = 3, - NOAQUNNC = 4 - }; - - std::string RegionNameFromDeckValue(const std::string& stringValue); - NNCBehaviourEnum NNCBehaviourFromString(const std::string& stringValue); - } - - - - - struct MULTREGTRecord { - int src_value; - int target_value; - double trans_mult; - int directions; - MULTREGT::NNCBehaviourEnum nnc_behaviour; - std::string region_name; - - bool operator==(const MULTREGTRecord& data) const { - return src_value == data.src_value && - target_value == data.target_value && - trans_mult == data.trans_mult && - directions == data.directions && - nnc_behaviour == data.nnc_behaviour && - region_name == data.region_name; - } - - template - void serializeOp(Serializer& serializer) - { - serializer(src_value); - serializer(target_value); - serializer(trans_mult); - serializer(directions); - serializer(nnc_behaviour); - serializer(region_name); - } - }; - - typedef std::map< std::pair , const MULTREGTRecord * > MULTREGTSearchMap; - typedef std::tuple MULTREGTConnection; - - - - class MULTREGTScanner { - - public: - using ExternalSearchMap = std::map, int>>; - - MULTREGTScanner() = default; - MULTREGTScanner(const MULTREGTScanner& data); - MULTREGTScanner(const GridDims& grid, - const FieldPropsManager* fp_arg, - const std::vector< const DeckKeyword* >& keywords); - - static MULTREGTScanner serializeObject(); - - double getRegionMultiplier(size_t globalCellIdx1, size_t globalCellIdx2, FaceDir::DirEnum faceDir) const; - - bool operator==(const MULTREGTScanner& data) const; - MULTREGTScanner& operator=(const MULTREGTScanner& data); - - template - void serializeOp(Serializer& serializer) - { - serializer(nx); - serializer(ny); - serializer(nz); - serializer.vector(m_records); - ExternalSearchMap searchMap = getSearchMap(); - serializer(searchMap); - if (m_searchMap.empty()) - constructSearchMap(searchMap); - serializer(regions); - serializer(default_region); - } - - private: - ExternalSearchMap getSearchMap() const; - void constructSearchMap(const ExternalSearchMap& searchMap); - - void addKeyword( const DeckKeyword& deckKeyword, const std::string& defaultRegion); - void assertKeywordSupported(const DeckKeyword& deckKeyword); - std::size_t nx = 0,ny = 0, nz = 0; - const FieldPropsManager* fp = nullptr; - std::vector< MULTREGTRecord > m_records; - std::map m_searchMap; - std::map> regions; - std::string default_region; - }; - -} - -#endif // OPM_PARSER_MULTREGTSCANNER_HPP diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Grid/MinpvMode.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Grid/MinpvMode.hpp deleted file mode 100644 index fc17e0db0f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Grid/MinpvMode.hpp +++ /dev/null @@ -1,35 +0,0 @@ -/* - Copyright 2015 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef OPM_MINPVMODE_HPP -#define OPM_MINPVMODE_HPP - -#include - -namespace Opm { - - namespace MinpvMode { - enum ModeEnum { - Inactive = 1, - EclSTD = 2, - }; - } -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Grid/NNC.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Grid/NNC.hpp deleted file mode 100644 index 8ba4633da7..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Grid/NNC.hpp +++ /dev/null @@ -1,92 +0,0 @@ -/* - Copyright 2015 IRIS - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef OPM_PARSER_NNC_HPP -#define OPM_PARSER_NNC_HPP - -#include -#include -#include - -namespace Opm -{ - -struct NNCdata { - NNCdata(size_t c1, size_t c2, double t) - : cell1(c1), cell2(c2), trans(t) - {} - NNCdata() = default; - - bool operator==(const NNCdata& data) const - { - return cell1 == data.cell1 && - cell2 == data.cell2 && - trans == data.trans; - } - - template - void serializeOp(Serializer& serializer) - { - serializer(cell1); - serializer(cell2); - serializer(trans); - } - - size_t cell1; - size_t cell2; - double trans; -}; - -class Deck; - -/// Represents non-neighboring connections (non-standard adjacencies). -/// This class is essentially a directed weighted graph. -class NNC -{ -public: - NNC() = default; - - /// Construct from input deck. - explicit NNC(const Deck& deck); - - static NNC serializeObject(); - - void addNNC(const size_t cell1, const size_t cell2, const double trans); - const std::vector& data() const { return m_nnc; } - size_t numNNC() const; - bool hasNNC() const; - - bool operator==(const NNC& data) const; - - template - void serializeOp(Serializer& serializer) - { - serializer.vector(m_nnc); - } - -private: - - std::vector m_nnc; -}; - - -} // namespace Opm - - -#endif // OPM_PARSER_NNC_HPP diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Grid/PinchMode.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Grid/PinchMode.hpp deleted file mode 100644 index 13abf082cd..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Grid/PinchMode.hpp +++ /dev/null @@ -1,40 +0,0 @@ -/* - Copyright 2015 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef OPM_PINCHMODE_HPP -#define OPM_PINCHMODE_HPP - -#include - -namespace Opm { - - namespace PinchMode { - enum ModeEnum { - ALL = 1, - TOPBOT = 2, - TOP = 3 - }; - - const std::string PinchMode2String(const ModeEnum enumValue); - ModeEnum PinchModeFromString(const std::string& stringValue); - } -} - - -#endif // _PINCHMODE_ diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Grid/SatfuncPropertyInitializers.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Grid/SatfuncPropertyInitializers.hpp deleted file mode 100644 index 445d241093..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Grid/SatfuncPropertyInitializers.hpp +++ /dev/null @@ -1,245 +0,0 @@ -/* - Copyright 2014 Andreas Lauser - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ -#ifndef ECLIPSE_SATFUNCPROPERTY_INITIALIZERS_HPP -#define ECLIPSE_SATFUNCPROPERTY_INITIALIZERS_HPP - -#include -#include - -namespace Opm { - - class Phases; - class TableManager; - -namespace satfunc { - - std::vector SGLEndpoint(const TableManager&, - const Phases&, - const std::vector&, - const std::vector&, - const std::vector&); - - std::vector ISGLEndpoint(const TableManager&, - const Phases&, - const std::vector&, - const std::vector&, - const std::vector&); - - std::vector SGUEndpoint(const TableManager&, - const Phases&, - const std::vector&, - const std::vector&, - const std::vector&); - - std::vector ISGUEndpoint(const TableManager&, - const Phases&, - const std::vector&, - const std::vector&, - const std::vector&); - - std::vector SWLEndpoint(const TableManager&, - const Phases&, - const std::vector&, - const std::vector&, - const std::vector&); - - std::vector ISWLEndpoint(const TableManager&, - const Phases&, - const std::vector&, - const std::vector&, - const std::vector&); - - std::vector SWUEndpoint(const TableManager&, - const Phases&, - const std::vector&, - const std::vector&, - const std::vector&); - - std::vector ISWUEndpoint(const TableManager&, - const Phases&, - const std::vector&, - const std::vector&, - const std::vector&); - - std::vector SGCREndpoint(const TableManager&, - const Phases&, - const std::vector&, - const std::vector&, - const std::vector&); - - std::vector ISGCREndpoint(const TableManager&, - const Phases&, - const std::vector&, - const std::vector&, - const std::vector&); - - std::vector SOWCREndpoint(const TableManager&, - const Phases&, - const std::vector&, - const std::vector&, - const std::vector&); - - std::vector ISOWCREndpoint(const TableManager&, - const Phases&, - const std::vector&, - const std::vector&, - const std::vector&); - - std::vector SOGCREndpoint(const TableManager&, - const Phases&, - const std::vector&, - const std::vector&, - const std::vector&); - - std::vector ISOGCREndpoint(const TableManager&, - const Phases&, - const std::vector&, - const std::vector&, - const std::vector&); - - std::vector SWCREndpoint(const TableManager&, - const Phases&, - const std::vector&, - const std::vector&, - const std::vector&); - - std::vector ISWCREndpoint(const TableManager&, - const Phases&, - const std::vector&, - const std::vector&, - const std::vector&); - - std::vector PCWEndpoint(const TableManager&, - const Phases&, - const std::vector&, - const std::vector&, - const std::vector&); - - std::vector IPCWEndpoint(const TableManager&, - const Phases&, - const std::vector&, - const std::vector&, - const std::vector&); - - std::vector PCGEndpoint(const TableManager&, - const Phases&, - const std::vector&, - const std::vector&, - const std::vector&); - - std::vector IPCGEndpoint(const TableManager&, - const Phases&, - const std::vector&, - const std::vector&, - const std::vector&); - - std::vector KRWEndpoint(const TableManager&, - const Phases&, - const std::vector&, - const std::vector&, - const std::vector&); - - std::vector IKRWEndpoint(const TableManager&, - const Phases&, - const std::vector&, - const std::vector&, - const std::vector&); - - std::vector KRWREndpoint(const TableManager&, - const Phases&, - const std::vector&, - const std::vector&, - const std::vector&); - - std::vector IKRWREndpoint(const TableManager&, - const Phases&, - const std::vector&, - const std::vector&, - const std::vector&); - - std::vector KROEndpoint(const TableManager&, - const Phases&, - const std::vector&, - const std::vector&, - const std::vector&); - - std::vector IKROEndpoint(const TableManager&, - const Phases&, - const std::vector&, - const std::vector&, - const std::vector&); - - std::vector KRORWEndpoint(const TableManager&, - const Phases&, - const std::vector&, - const std::vector&, - const std::vector&); - - std::vector IKRORWEndpoint(const TableManager&, - const Phases&, - const std::vector&, - const std::vector&, - const std::vector&); - - std::vector KRORGEndpoint(const TableManager&, - const Phases&, - const std::vector&, - const std::vector&, - const std::vector&); - - std::vector IKRORGEndpoint(const TableManager&, - const Phases&, - const std::vector&, - const std::vector&, - const std::vector&); - - std::vector KRGEndpoint(const TableManager&, - const Phases&, - const std::vector&, - const std::vector&, - const std::vector&); - - std::vector IKRGEndpoint(const TableManager&, - const Phases&, - const std::vector&, - const std::vector&, - const std::vector&); - - std::vector KRGREndpoint(const TableManager&, - const Phases&, - const std::vector&, - const std::vector&, - const std::vector&); - - std::vector IKRGREndpoint(const TableManager&, - const Phases&, - const std::vector&, - const std::vector&, - const std::vector&); - - std::vector init(const std::string& kewyord, - const TableManager& tables, - const Phases& phases, - const std::vector& cell_depth, - const std::vector& num, - const std::vector& endnum); -} -} - -#endif // ECLIPSE_SATFUNCPROPERTY_INITIALIZERS_HPP diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Grid/TransMult.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Grid/TransMult.hpp deleted file mode 100644 index 5e9755089c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Grid/TransMult.hpp +++ /dev/null @@ -1,91 +0,0 @@ -/* - Copyright 2014 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -/** - This class implements a small container which holds the - transmissibility mulitpliers for all the faces in the grid. The - multipliers in this class are built up from the transmissibility - modifier keywords: - - {MULTX , MULTX- , MULTY , MULTY- , MULTZ , MULTZ-, MULTFLT , MULTREGT} - -*/ -#ifndef OPM_PARSER_TRANSMULT_HPP -#define OPM_PARSER_TRANSMULT_HPP - - -#include -#include -#include - -#include -#include - -namespace Opm { - template< typename > class GridProperty; - class Fault; - class FaultCollection; - class DeckKeyword; - class FieldPropsManager; - - class TransMult { - - public: - TransMult() = default; - TransMult(const GridDims& dims, const Deck& deck, const FieldPropsManager& fp); - - static TransMult serializeObject(); - - double getMultiplier(size_t globalIndex, FaceDir::DirEnum faceDir) const; - double getMultiplier(size_t i , size_t j , size_t k, FaceDir::DirEnum faceDir) const; - double getRegionMultiplier( size_t globalCellIndex1, size_t globalCellIndex2, FaceDir::DirEnum faceDir) const; - void applyMULT(const std::vector& srcMultProp, FaceDir::DirEnum faceDir); - void applyMULTFLT(const FaultCollection& faults); - void applyMULTFLT(const Fault& fault); - - bool operator==(const TransMult& data) const; - - template - void serializeOp(Serializer& serializer) - { - serializer(m_nx); - serializer(m_ny); - serializer(m_nz); - // map used to avoid explicit instances with FaceDir::DirEnum in serializer - serializer.template map(m_trans); - serializer.template map(m_names); - m_multregtScanner.serializeOp(serializer); - } - - private: - size_t getGlobalIndex(size_t i , size_t j , size_t k) const; - void assertIJK(size_t i , size_t j , size_t k) const; - double getMultiplier__(size_t globalIndex , FaceDir::DirEnum faceDir) const; - bool hasDirectionProperty(FaceDir::DirEnum faceDir) const; - std::vector& getDirectionProperty(FaceDir::DirEnum faceDir); - - size_t m_nx = 0, m_ny = 0, m_nz = 0; - std::map > m_trans; - std::map m_names; - MULTREGTScanner m_multregtScanner; - }; - -} - -#endif // OPM_PARSER_TRANSMULT_HPP diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/IOConfig/IOConfig.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/IOConfig/IOConfig.hpp deleted file mode 100644 index 0212446805..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/IOConfig/IOConfig.hpp +++ /dev/null @@ -1,231 +0,0 @@ -/* - Copyright 2015 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#ifndef OPM_IO_CONFIG_HPP -#define OPM_IO_CONFIG_HPP - -#include - -namespace Opm { - - class Deck; - class GRIDSection; - class RUNSPECSection; - - /*The IOConfig class holds data about input / ouput configurations - - Amongst these configuration settings, a IOConfig object knows if - a restart file should be written for a specific report step - - The write of restart files is governed by several eclipse keywords. - These keywords are all described in the eclipse manual, but some - of them are rather porly described there. - To have equal sets of restart files written from Eclipse and Flow for various - configurations, we have made a qualified guess on the behaviour - for some of the keywords (by running eclipse for different configurations, - and looked at which restart files that have been written). - - - ------ RPTSOL RESTART (solution section) ------ - If RPTSOL RESTART > 1 initial restart file is written. - - - ------ RPTRST (solution section) ------ - Eclipse manual states that the initial restart file is to be written - if RPTSOL RESTART > 1. But - due to that the initial restart file - is written from Eclipse for data where RPTSOL RESTART is not set, - we - have made a guess that when RPTRST is set in SOLUTION (no basic though...), - it means that the initial restart file should be written. - Running of eclipse with different settings have proven this to be a qualified guess. - - - ------ RPTRST BASIC=0 (solution or schedule section) ------ - No restart files are written - - - ------ RPTRST BASIC=1 or RPTRST BASIC=2 (solution or schedule section) ------ - Restart files are written for every timestep, from timestep 1 to number of timesteps. - (Write of inital timestep is governed by a separate setting) - - Notice! Eclipse simulator RPTRST BASIC=1 writes restart files for every - report step, but only keeps the last one written. This functionality is - not supported in Flow; so to compare Eclipse results with Flow results - for every report step, set RPTRST BASIC=2 for the eclipse run - - - ------ RPTRST BASIC=3 FREQ=n (solution or schedule section) ------ - Restart files are created every nth report time. Default frequency is 1 (every report step) - - If a frequency higher than 1 is given: - start_rs = report step the setting was given. - write report step rstep if (rstep >= start_rs) && ((rstep % frequency) == 0). - - - ------ RPTRST BASIC=4 FREQ=n or RPTRST BASIC=5 FREQ=n (solution or schedule section) ------ - For the settings BASIC 4 or BASIC 5, - first report step of every new year(4) or new month(5), - the first report step is compared with report step 0 (start), and then every report step is - compared with the previous one to see if year/month has changed. - - This leaves us with a set of timesteps. - All timesteps in the set that are higher or equal to the timestep the RPTRST keyword was set on is written. - - If in addition FREQUENCY is given (higher than 1), every n'the value of this set are to be written. - - If the setting BASIC=4 or BASIC=5 is set on a timestep that is a member of the set "first timestep of - each year" / "First timestep of each month", then the timestep that is freq-1 timesteps (within the set) from - this start timestep will be written, and then every n'the timestep (within the set) from this one will be written. - - If the setting BASIC=4 or BASIC=5 is set on a timestep that is not a member of the list "first timestep of - each year" / "First timestep of each month", then the list is searched for the closest timestep that are - larger than the timestep that introduced the setting, and then; same as above - the timestep that is freq-1 - timesteps from this one (within the set) will be written, and then every n'the timestep (within the set) from - this one will be written. - - - ------ RPTRST BASIC=6 (solution or schedule section) ------ - Not supported in Flow - - - ------ Default ------ - If no keywords for config of writing restart files have been handled; no restart files are written. - - - ECL compatible restart - ====================== - - Unfortunately flow & eclipse are not compatible across restarts. The - RestartIO implementation can write restart files for flow -> flow restart - or alternatively for flow -> eclipse restart. This is regulated by the - boolean flag ecl_compatible_restart in the IOConfig class. The difference - between the two are as follows: - - ecl_compatible_restart = false: - - 1. The 'extra' fields in the RestartValue structure are actually - written to disk. - - 2. You can optionally ask the RestartIO::save() function to save the - solution in double precision. - - 3. The RestartIO::save() function will save opm specific vector OPM_IWEL - and OPM_XWEL. - - ecl_compatible_restart = true: - - 1. The 'extra' fields in the RestartValue are silently ignored. - - 2. If request double precision solution data that is silently ignored, - it will be float. - - 3. The OPM_IWEL and OPM_XWEL vectors will not be written. - - Observe that the solution data in the RestartValue is passed - unconditionally to the solution section in the restart file, so if you - pass a field in the solution section which Eclipse does not recognize you - will end up with a restart file which Eclipse can not read, even if you - have set ecl_compatible_restart to true. - */ - - - - class IOConfig { - - public: - - IOConfig() = default; - explicit IOConfig( const Deck& ); - explicit IOConfig( const std::string& input_path ); - - static IOConfig serializeObject(); - - void setEclCompatibleRST(bool ecl_rst); - bool getEclCompatibleRST() const; - bool getWriteEGRIDFile() const; - bool getWriteINITFile() const; - bool getUNIFOUT() const; - bool getUNIFIN() const; - bool getFMTIN() const; - bool getFMTOUT() const; - const std::string& getEclipseInputPath() const; - - void overrideNOSIM(bool nosim); - - - std::string getRestartFileName(const std::string& restart_base, int report_step, bool output) const; - - bool getOutputEnabled() const; - void setOutputEnabled(bool enabled); - - std::string getOutputDir() const; - void setOutputDir(const std::string& outputDir); - - const std::string& getBaseName() const; - void setBaseName(const std::string& baseName); - - /// Return a string consisting of outputpath and basename; - /// i.e. /path/to/sim/CASE - std::string fullBasePath( ) const; - - bool initOnly() const; - - bool operator==(const IOConfig& data) const; - - template - void serializeOp(Serializer& serializer) - { - serializer(m_write_INIT_file); - serializer(m_write_EGRID_file); - serializer(m_UNIFIN); - serializer(m_UNIFOUT); - serializer(m_FMTIN); - serializer(m_FMTOUT); - serializer(m_deck_filename); - serializer(m_output_enabled); - serializer(m_output_dir); - serializer(m_nosim); - serializer(m_base_name); - serializer(ecl_compatible_rst); - } - - private: - bool m_write_INIT_file = false; - bool m_write_EGRID_file = true; - bool m_UNIFIN = false; - bool m_UNIFOUT = false; - bool m_FMTIN = false; - bool m_FMTOUT = false; - std::string m_deck_filename; - bool m_output_enabled = true; - std::string m_output_dir; - bool m_nosim; - std::string m_base_name; - bool ecl_compatible_rst = true; - - IOConfig( const GRIDSection&, - const RUNSPECSection&, - bool nosim, - const std::string& input_path ); - - }; - -} //namespace Opm - - - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/IOConfig/RestartConfig.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/IOConfig/RestartConfig.hpp deleted file mode 100644 index a5e36c8ce7..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/IOConfig/RestartConfig.hpp +++ /dev/null @@ -1,394 +0,0 @@ -/* - Copyright 2015 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#ifndef OPM_RESTART_CONFIG_HPP -#define OPM_RESTART_CONFIG_HPP - -#include -#include -#include -#include -#include - -/* - The RestartConfig class internalizes information of when (at which - report steps) we should save restart files, and which properties - should be included in the restart files. The configuration of this - immensely complex, and this code is unfortunately also way too - complex. - - The most basic question to disentangle is the "When to write restart - files" versus "What data to store write in the restart file". As - expressed in the deck keywords this completely entangled, in this - implementation we have tried to disentangle it: - - Keywords involved - ----------------- - - RPTRST: This is the main keyword for configuring restart output; it - can be used to configure bothe when to write the files and which - properties should be included in the restart files. - - - RPTSCHED: The main purpose of the RPTSCHED keyword is to configure - output from the SCHEDULE section to the PRINT file. However the - mneomnic RESTART=n can be used to turn writing of restart files - on, and also for values > 2 to some configuration of what is - written to the restart file: - - RESTART=1 : As RPTRST,BASIC=1 - RESTART>1 : As RPTRST,BASIC=2 - RESTART>2 : Flow is added to restart file - RESTART>3 : Fluid in place is added to restart file - RESTART=6 : Restart file for every timestep. - - - - RPTSOL: The RPTSOL keyword is very similar to the RPTCHED keyword, - it configures output from the SOLUTION section to the PRINT file, - but just as the RPTSCHED keyword it accepts a RESTART=n mnenonic - which can be used similarly to the BASIC=n mnenonic of the RPTRST - keyword. In particular the writing of an initial restart files - with initial equilibrium solution is controlled by the RPTSOL - keyword. If the restart mneonic is greater than 2 that can be - used to configure FLOWS and FIP keywords in the restart file. - - RESTART=1 : As RPTRST,BASIC=1 - RESTART>1 : As RPTRST,BASIC=2 - RESTART>2 : Flow is added to restart file - RESTART>3 : Fluid in place is added to restart file - - - The basic rule in ECLIPSE is generally that the 'last keyword wins', - but for the RPTRST RPTSHCED combination a BASIC setting with n >= 3 - will override consecutive RESTART=n settings from RPTSCHED. - - - When to write restart files: - ---------------------------- - - When to write the restart file is governed by the BASIC=n setting in - the RPTRST keyword and the RESTART=n settings in the RPTSOL and - RPTSCHED keywords. The most common setting is 'ON' - i.e. BASIC=2 - which means write a restart file for every report step, that can be - turned off again with BASIC=0. For BASIC>2 there are varietes of - every n'th report step, and the first report step in every month and - every year. - - - Old style / new style - --------------------- - - All of the relevant keywords can be specified using a new style - based on string mneomnics and alternatively an old style represented - with a *strictly ordered* list of integers. For instance both of - these keywords request restart files written for every report step; - in addition to the fields required to actually restart the files - should contain the relative permeabilities KRO, KRW, KRG: - - RPTRST - BASIC=2 KRG KRW KRO / - - - RPTRST - 2 9*0 3*1 17*0 - - Integer controls and string mneomnics can not be mixed in the same - keyword, but they can be mixed in the same deck - and that is - actually quite common. - - - What is written to the restart file - ----------------------------------- - - The BASIC=n mneonics request the writing of a restart file which - should contain 'all properties required to restart', in addition you - can configure extra keywords to be added to the restart file. This - is configured by just adding a list as: - - RPTRST - BASIC=2 KRG KRW KRO / - - It is really *not clear* what is the correct persistence semantics - for these keywords, consider for insance the following series of keywords: - - -- Request restart file at every report step, the restart files - -- should contain additional properties KRO, KRG and KRW. - RPTRST - BASIC=2 KRG KRW KRO / - - -- Advance the simulator forward with TSTEP / DATES - TSTEP / DATES / WCONxxx - - -- Turn writing of restart files OFF using integer controls. - RPTRST - 0 / - - -- Advance the simulator forward with TSTEP / DATES - TSTEP / DATES / WCONxxx - - -- Turn writing of restart files ON using integer controls. - RPTRST - 2 / - - When writing of restart files is turned on again with the last - RPTRST keyword, should still the relative permeabilites KRO, KRW and - KRG be added to the restart files? The model we have implemented is: - - - The list of keywords written to the restart file is persisted - independtly of the BASIC=n setting. - - - Using string based mnonics you can *only add* kewyords to be - written to the files. To stop writing a keyword you must use an - integer control with value 0. - - Based on this best guess heuristic the final restart files will - still contain KRO, KRW and KRG. - - - - What is required to restart? - ---------------------------- - - A restart capable files is requested with the 'BASIC' mneomnic, but - exactly which properties the 'BASIC' keyword is expanded to is the - responsability of the simulator; i.e. for a black oil simulation you - will at the very least need the expansion: - - BASIC -> PRESSURE, SWAT, SGAS, RS, RV - - But this class just carries the boolean information: Yes - restart - is requested - expanding as illustrated is the responsability of the - simulator. - - - - - What is not supported? - ---------------------- - - The SAVE keyword is not supported in OPM at all, this implies that - the SAVE and SFREQ mneomics are not supported. -*/ - - - -namespace Opm { - - template< typename > class DynamicState; - - class Deck; - class DeckKeyword; - class GRIDSection; - class RUNSPECSection; - class SCHEDULESection; - class SOLUTIONSection; - class Schedule; - class ParseContext; - class ErrorGuard; - - /*The IOConfig class holds data about input / ouput configurations - - Amongst these configuration settings, a IOConfig object knows if - a restart file should be written for a specific report step - - The write of restart files is governed by several eclipse keywords. - These keywords are all described in the eclipse manual, but some - of them are rather porly described there. - To have equal sets of restart files written from Eclipse and Flow for various - configurations, we have made a qualified guess on the behaviour - for some of the keywords (by running eclipse for different configurations, - and looked at which restart files that have been written). - - - ------ RPTSOL RESTART (solution section) ------ - If RPTSOL RESTART > 1 initial restart file is written. - - - ------ RPTRST (solution section) ------ - Eclipse manual states that the initial restart file is to be written - if RPTSOL RESTART > 1. But - due to that the initial restart file - is written from Eclipse for data where RPTSOL RESTART is not set, - we - have made a guess that when RPTRST is set in SOLUTION (no basic though...), - it means that the initial restart file should be written. - Running of eclipse with different settings have proven this to be a qualified guess. - - - ------ RPTRST BASIC=0 (solution or schedule section) ------ - No restart files are written - - - ------ RPTRST BASIC=1 or RPTRST BASIC=2 (solution or schedule section) ------ - Restart files are written for every timestep, from timestep 1 to number of timesteps. - (Write of inital timestep is governed by a separate setting) - - Notice! Eclipse simulator RPTRST BASIC=1 writes restart files for every - report step, but only keeps the last one written. This functionality is - not supported in Flow; so to compare Eclipse results with Flow results - for every report step, set RPTRST BASIC=2 for the eclipse run - - - ------ RPTRST BASIC=3 FREQ=n (solution or schedule section) ------ - Restart files are created every nth report time. Default frequency is 1 (every report step) - - If a frequency higher than 1 is given: - start_rs = report step the setting was given. - write report step rstep if (rstep >= start_rs) && ((rstep % frequency) == 0). - - - ------ RPTRST BASIC=4 FREQ=n or RPTRST BASIC=5 FREQ=n (solution or schedule section) ------ - For the settings BASIC 4 or BASIC 5, - first report step of every new year(4) or new month(5), - the first report step is compared with report step 0 (start), and then every report step is - compared with the previous one to see if year/month has changed. - - This leaves us with a set of timesteps. - All timesteps in the set that are higher or equal to the timestep the RPTRST keyword was set on is written. - - If in addition FREQUENCY is given (higher than 1), every n'the value of this set are to be written. - - If the setting BASIC=4 or BASIC=5 is set on a timestep that is a member of the set "first timestep of - each year" / "First timestep of each month", then the timestep that is freq-1 timesteps (within the set) from - this start timestep will be written, and then every n'the timestep (within the set) from this one will be written. - - If the setting BASIC=4 or BASIC=5 is set on a timestep that is not a member of the list "first timestep of - each year" / "First timestep of each month", then the list is searched for the closest timestep that are - larger than the timestep that introduced the setting, and then; same as above - the timestep that is freq-1 - timesteps from this one (within the set) will be written, and then every n'the timestep (within the set) from - this one will be written. - - - ------ RPTRST BASIC=6 (solution or schedule section) ------ - Not supported in Flow - - - ------ Default ------ - If no keywords for config of writing restart files have been handled; no restart files are written. - - */ - - //namespace { - - class RestartSchedule { - /* - The content of this struct is logically divided in two; either the - restart behaviour is governed by { timestep , basic , frequency }, or - alternatively by { rptshec_restart_set , rptsched_restart }. - - The former triplet is mainly governed by the RPTRST keyword and the - latter pair by the RPTSCHED keyword. - */ - public: - - RestartSchedule() = default; - explicit RestartSchedule( size_t sched_restart); - RestartSchedule( size_t step, size_t b, size_t freq); - - static RestartSchedule serializeObject(); - - bool writeRestartFile( size_t timestep , const TimeMap& timemap) const; - bool operator!=(const RestartSchedule& rhs) const; - bool operator==( const RestartSchedule& rhs ) const; - - template - void serializeOp(Serializer& serializer) - { - serializer(timestep); - serializer(basic); - serializer(frequency); - serializer(rptsched_restart_set); - serializer(rptsched_restart); - } - - //private: - size_t timestep = 0; - size_t basic = 0; - size_t frequency = 0; - bool rptsched_restart_set = false; - size_t rptsched_restart = 0; - }; - // } - class RestartConfig { - - public: - - RestartConfig() = default; - - template - RestartConfig( const TimeMap& time_map, const Deck&, const ParseContext& parseContext, T&& errors ); - RestartConfig( const TimeMap& time_map, const Deck&, const ParseContext& parseContext, ErrorGuard& errors ); - RestartConfig( const TimeMap& time_map, const Deck& ); - - static RestartConfig serializeObject(); - - int getFirstRestartStep() const; - bool getWriteRestartFile(size_t timestep, bool log=true) const; - const std::map< std::string, int >& getRestartKeywords( size_t timestep ) const; - int getKeyword( const std::string& keyword, size_t timeStep) const; - - void overrideRestartWriteInterval(size_t interval); - void handleSolutionSection(const SOLUTIONSection& solutionSection, const ParseContext& parseContext, ErrorGuard& errors); - void setWriteInitialRestartFile(bool writeInitialRestartFile); - - RestartSchedule getNode( size_t timestep ) const; - static std::string getRestartFileName(const std::string& restart_base, int report_step, bool unified, bool fmt_file); - - bool operator==(const RestartConfig& data) const; - - template - void serializeOp(Serializer& serializer) - { - m_timemap.serializeOp(serializer); - serializer(m_first_restart_step); - serializer(m_write_initial_RST_file); - restart_schedule.serializeOp(serializer); - restart_keywords.serializeOp(serializer); - serializer(save_keywords); - } - - private: - /// This method will internalize variables with information of - /// the first report step with restart and rft output - /// respectively. This information is important because right - /// at the first output step we must reset the files to size - /// zero, for subsequent output steps we should append. - void initFirstOutput( ); - - bool getWriteRestartFileFrequency(size_t timestep, - size_t start_timestep, - size_t frequency, - bool years = false, - bool months = false) const; - void handleRPTSOL( const DeckKeyword& keyword); - void handleScheduleSection( const SCHEDULESection& schedule, const ParseContext& parseContext, ErrorGuard& errors); - void update( size_t step, const RestartSchedule& rs); - static RestartSchedule rptsched( const DeckKeyword& ); - - TimeMap m_timemap; - int m_first_restart_step = 1; - bool m_write_initial_RST_file = false; - - DynamicState< RestartSchedule > restart_schedule; - DynamicState< std::map< std::string, int > > restart_keywords; - std::vector< bool > save_keywords; - }; -} //namespace Opm - - - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/InitConfig/Equil.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/InitConfig/Equil.hpp deleted file mode 100644 index 4f7f8ca8cf..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/InitConfig/Equil.hpp +++ /dev/null @@ -1,86 +0,0 @@ -#ifndef OPM_EQUIL_HPP -#define OPM_EQUIL_HPP - -#include -#include - -namespace Opm { - class DeckKeyword; - class EquilRecord { - public: - double datumDepth() const; - double datumDepthPressure() const; - double waterOilContactDepth() const; - double waterOilContactCapillaryPressure() const; - double gasOilContactDepth() const; - double gasOilContactCapillaryPressure() const; - - bool liveOilInitConstantRs() const; - bool wetGasInitConstantRv() const; - int initializationTargetAccuracy() const; - - EquilRecord(); - - EquilRecord( double datum_depth_arg, double datum_depth_pc_arg, double woc_depth, double woc_pc, double goc_depth, double goc_pc, bool live_oil_init, bool wet_gas_init, int target_accuracy); - - bool operator==(const EquilRecord& data) const; - - template - void serializeOp(Serializer& serializer) - { - serializer(datum_depth); - serializer(datum_depth_ps); - serializer(water_oil_contact_depth); - serializer(water_oil_contact_capillary_pressure); - serializer(gas_oil_contact_depth); - serializer(gas_oil_contact_capillary_pressure); - serializer(live_oil_init_proc); - serializer(wet_gas_init_proc); - serializer(init_target_accuracy); - } - - private: - double datum_depth; - double datum_depth_ps; - double water_oil_contact_depth; - double water_oil_contact_capillary_pressure; - double gas_oil_contact_depth; - double gas_oil_contact_capillary_pressure; - - bool live_oil_init_proc; - bool wet_gas_init_proc; - int init_target_accuracy; - }; - - class Equil { - public: - using const_iterator = std::vector< EquilRecord >::const_iterator; - - Equil() = default; - explicit Equil( const DeckKeyword& ); - - static Equil serializeObject(); - - const EquilRecord& getRecord( size_t id ) const; - - size_t size() const; - bool empty() const; - - const_iterator begin() const; - const_iterator end() const; - - bool operator==(const Equil& data) const; - - template - void serializeOp(Serializer& serializer) - { - serializer.vector(m_records); - } - - private: - std::vector< EquilRecord > m_records; - }; - -} - -#endif //OPM_EQUIL_HPP diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/InitConfig/FoamConfig.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/InitConfig/FoamConfig.hpp deleted file mode 100644 index 9c9a21ab32..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/InitConfig/FoamConfig.hpp +++ /dev/null @@ -1,115 +0,0 @@ -/* - Copyright 2019 SINTEF Digital, Mathematics and Cybernetics. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef OPM_FOAMCONFIG_HPP -#define OPM_FOAMCONFIG_HPP - -#include - -#include -#include - -namespace Opm -{ - -class Deck; -class DeckRecord; - -/// Foam behaviour data for a single SATNUM region. -class FoamData -{ -public: - FoamData(); - FoamData(const DeckRecord& FOAMFSC_record, const DeckRecord& FOAMROCK_record); - explicit FoamData(const DeckRecord& FOAMROCK_record); - - static FoamData serializeObject(); - - double referenceSurfactantConcentration() const; - double exponent() const; - double minimumSurfactantConcentration() const; - - bool allowDesorption() const; - double rockDensity() const; - - bool operator==(const FoamData& data) const; - - template - void serializeOp(Serializer& serializer) - { - serializer(reference_surfactant_concentration_); - serializer(exponent_); - serializer(minimum_surfactant_concentration_); - serializer(allow_desorption_); - serializer(rock_density_); - } - -private: - double reference_surfactant_concentration_; - double exponent_; - double minimum_surfactant_concentration_; - bool allow_desorption_; - double rock_density_; -}; - -/// Foam behaviour data for all SATNUM regions. -class FoamConfig -{ -public: - enum class MobilityModel { - TAB, - FUNC - }; - - FoamConfig() = default; - explicit FoamConfig(const Deck&); - - static FoamConfig serializeObject(); - - const FoamData& getRecord(std::size_t index) const; - - Opm::Phase getTransportPhase() const; - MobilityModel getMobilityModel() const; - - std::size_t size() const; - bool empty() const; - - using const_iterator = std::vector::const_iterator; - const_iterator begin() const; - const_iterator end() const; - - bool operator==(const FoamConfig& data) const; - - template - void serializeOp(Serializer& serializer) - { - serializer.vector(data_); - serializer(transport_phase_); - serializer(mobility_model_); - } - -private: - std::vector data_; - Phase transport_phase_ = Phase::GAS; - MobilityModel mobility_model_ = MobilityModel::TAB; -}; - -} // end namespace Opm - -#endif // OPM_FOAMCONFIG_HPP diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/InitConfig/InitConfig.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/InitConfig/InitConfig.hpp deleted file mode 100644 index 9633d9421a..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/InitConfig/InitConfig.hpp +++ /dev/null @@ -1,85 +0,0 @@ -/* - Copyright 2015 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#ifndef OPM_INIT_CONFIG_HPP -#define OPM_INIT_CONFIG_HPP - -#include - -#include -#include - -namespace Opm { - - class Deck; - - class InitConfig { - - public: - InitConfig(); - explicit InitConfig(const Deck& deck); - - static InitConfig serializeObject(); - - void setRestart( const std::string& root, int step); - bool restartRequested() const; - int getRestartStep() const; - const std::string& getRestartRootName() const; - - bool hasEquil() const; - const Equil& getEquil() const; - - bool hasGravity() const; - - bool hasFoamConfig() const; - const FoamConfig& getFoamConfig() const; - - bool filleps() const - { - return this->m_filleps; - } - - bool operator==(const InitConfig& config) const; - - template - void serializeOp(Serializer& serializer) - { - equil.serializeOp(serializer); - foamconfig.serializeOp(serializer); - serializer(m_filleps); - serializer(m_gravity); - serializer(m_restartRequested); - serializer(m_restartStep); - serializer(m_restartRootName); - } - - private: - Equil equil; - FoamConfig foamconfig; - bool m_filleps; - bool m_gravity = true; - - bool m_restartRequested = false; - int m_restartStep = 0; - std::string m_restartRootName; - }; - -} //namespace Opm - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Runspec.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Runspec.hpp deleted file mode 100644 index e24704af0e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Runspec.hpp +++ /dev/null @@ -1,313 +0,0 @@ -/* - Copyright 2016 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify it under the terms - of the GNU General Public License as published by the Free Software - Foundation, either version 3 of the License, or (at your option) any later - version. - - OPM is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR - A PARTICULAR PURPOSE. See the GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along with - OPM. If not, see . -*/ - -#ifndef OPM_RUNSPEC_HPP -#define OPM_RUNSPEC_HPP - -#include -#include - -#include -#include -#include -#include - -namespace Opm { -class Deck; - - -enum class Phase { - OIL = 0, - GAS = 1, - WATER = 2, - SOLVENT = 3, - POLYMER = 4, - ENERGY = 5, - POLYMW = 6, - FOAM = 7, - BRINE = 8 - // If you add more entries to this enum, remember to update NUM_PHASES_IN_ENUM below. -}; - -constexpr int NUM_PHASES_IN_ENUM = static_cast(Phase::BRINE) + 1; // Used to get correct size of the bitset in class Phases. - -Phase get_phase( const std::string& ); -std::ostream& operator<<( std::ostream&, const Phase& ); - -class Phases { - public: - Phases() noexcept = default; - Phases( bool oil, bool gas, bool wat, bool solvent = false, bool polymer = false, bool energy = false, - bool polymw = false, bool foam = false, bool brine = false ) noexcept; - - static Phases serializeObject(); - - bool active( Phase ) const noexcept; - size_t size() const noexcept; - - bool operator==(const Phases& data) const; - - template - void serializeOp(Serializer& serializer) - { - if (serializer.isSerializing()) - serializer(bits.to_ulong()); - else { - unsigned long Bits = 0; - serializer(Bits); - bits = std::bitset(Bits); - } - } - - private: - std::bitset< NUM_PHASES_IN_ENUM > bits; -}; - - -class Welldims { -public: - Welldims() = default; - explicit Welldims(const Deck& deck); - - static Welldims serializeObject(); - - int maxConnPerWell() const - { - return this->nCWMax; - } - - int maxWellsPerGroup() const - { - return this->nWGMax; - } - - int maxGroupsInField() const - { - return this->nGMax; - } - - int maxWellsInField() const - { - return this->nWMax; - } - - bool operator==(const Welldims& data) const { - return this->maxConnPerWell() == data.maxConnPerWell() && - this->maxWellsPerGroup() == data.maxWellsPerGroup() && - this->maxGroupsInField() == data.maxGroupsInField() && - this->maxWellsInField() == data.maxWellsInField(); - } - - template - void serializeOp(Serializer& serializer) - { - serializer(nWMax); - serializer(nCWMax); - serializer(nWGMax); - serializer(nGMax); - } - -private: - int nWMax { 0 }; - int nCWMax { 0 }; - int nWGMax { 0 }; - int nGMax { 0 }; -}; - -class WellSegmentDims { -public: - WellSegmentDims(); - explicit WellSegmentDims(const Deck& deck); - - static WellSegmentDims serializeObject(); - - - int maxSegmentedWells() const - { - return this->nSegWellMax; - } - - int maxSegmentsPerWell() const - { - return this->nSegmentMax; - } - - int maxLateralBranchesPerWell() const - { - return this->nLatBranchMax; - } - - bool operator==(const WellSegmentDims& data) const; - - template - void serializeOp(Serializer& serializer) - { - serializer(nSegWellMax); - serializer(nSegmentMax); - serializer(nLatBranchMax); - } - -private: - int nSegWellMax; - int nSegmentMax; - int nLatBranchMax; -}; - -class EclHysterConfig -{ -public: - EclHysterConfig() = default; - explicit EclHysterConfig(const Deck& deck); - - static EclHysterConfig serializeObject(); - - /*! - * \brief Specify whether hysteresis is enabled or not. - */ - //void setActive(bool yesno); - - /*! - * \brief Returns whether hysteresis is enabled (active). - */ - bool active() const; - - /*! - * \brief Return the type of the hysteresis model which is used for capillary pressure. - * - * -1: capillary pressure hysteresis is disabled - * 0: use the Killough model for capillary pressure hysteresis - */ - int pcHysteresisModel() const; - - /*! - * \brief Return the type of the hysteresis model which is used for relative permeability. - * - * -1: relperm hysteresis is disabled - * 0: use the Carlson model for relative permeability hysteresis - */ - int krHysteresisModel() const; - - bool operator==(const EclHysterConfig& data) const; - - template - void serializeOp(Serializer& serializer) - { - serializer(activeHyst); - serializer(pcHystMod); - serializer(krHystMod); - } - -private: - // enable hysteresis at all - bool activeHyst { false }; - - // the capillary pressure and the relperm hysteresis models to be used - int pcHystMod { 0 }; - int krHystMod { 0 }; -}; - -class SatFuncControls { -public: - enum class ThreePhaseOilKrModel { - Default, - Stone1, - Stone2 - }; - - SatFuncControls(); - explicit SatFuncControls(const Deck& deck); - SatFuncControls(const double tolcritArg, - ThreePhaseOilKrModel model); - - - static SatFuncControls serializeObject(); - - double minimumRelpermMobilityThreshold() const - { - return this->tolcrit; - } - - ThreePhaseOilKrModel krModel() const - { - return this->krmodel; - } - - bool operator==(const SatFuncControls& rhs) const; - - template - void serializeOp(Serializer& serializer) - { - serializer(tolcrit); - serializer(krmodel); - } - -private: - double tolcrit; - ThreePhaseOilKrModel krmodel = ThreePhaseOilKrModel::Default; -}; - -class Runspec { -public: - Runspec() = default; - explicit Runspec( const Deck& ); - - static Runspec serializeObject(); - - const UDQParams& udqParams() const noexcept; - const Phases& phases() const noexcept; - const Tabdims& tabdims() const noexcept; - const EndpointScaling& endpointScaling() const noexcept; - const Welldims& wellDimensions() const noexcept; - const WellSegmentDims& wellSegmentDimensions() const noexcept; - int eclPhaseMask( ) const noexcept; - const EclHysterConfig& hysterPar() const noexcept; - const Actdims& actdims() const noexcept; - const SatFuncControls& saturationFunctionControls() const noexcept; - - bool operator==(const Runspec& data) const; - - template - void serializeOp(Serializer& serializer) - { - active_phases.serializeOp(serializer); - m_tabdims.serializeOp(serializer); - endscale.serializeOp(serializer); - welldims.serializeOp(serializer); - wsegdims.serializeOp(serializer); - udq_params.serializeOp(serializer); - hystpar.serializeOp(serializer); - m_actdims.serializeOp(serializer); - m_sfuncctrl.serializeOp(serializer); - } - -private: - Phases active_phases; - Tabdims m_tabdims; - EndpointScaling endscale; - Welldims welldims; - WellSegmentDims wsegdims; - UDQParams udq_params; - EclHysterConfig hystpar; - Actdims m_actdims; - SatFuncControls m_sfuncctrl; -}; - - -} - -#endif // OPM_RUNSPEC_HPP diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Action/ASTNode.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Action/ASTNode.hpp deleted file mode 100644 index d37fb24565..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Action/ASTNode.hpp +++ /dev/null @@ -1,57 +0,0 @@ -#ifndef ASTNODE_HPP -#define ASTNODE_HPP - -#include - -#include "ActionValue.hpp" - -namespace Opm { -namespace Action { - -class ActionContext; -class WellSet; -class ASTNode { -public: - - ASTNode(); - ASTNode(TokenType type_arg); - ASTNode(double value); - ASTNode(TokenType type_arg, FuncType func_type_arg, const std::string& func_arg, const std::vector& arg_list_arg); - - static ASTNode serializeObject(); - - Action::Result eval(const Action::Context& context) const; - Action::Value value(const Action::Context& context) const; - TokenType type; - FuncType func_type; - void add_child(const ASTNode& child); - size_t size() const; - std::string func; - - bool operator==(const ASTNode& data) const; - - template - void serializeOp(Serializer& serializer) - { - serializer(type); - serializer(func_type); - serializer(func); - serializer(arg_list); - serializer(number); - serializer.vector(children); - } - -private: - std::vector arg_list; - double number = 0.0; - - /* - To have a member std::vector inside the ASTNode class is - supposedly borderline undefined behaviour; it compiles without warnings - and works. Good for enough for me. - */ - std::vector children; -}; -} -} -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Action/Actdims.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Action/Actdims.hpp deleted file mode 100644 index bc9d431115..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Action/Actdims.hpp +++ /dev/null @@ -1,59 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - - -#ifndef ACTDIMS_HPP_ -#define ACTDIMS_HPP_ - -#include - -namespace Opm { -class Actdims { -public: - Actdims(); - explicit Actdims(const Deck& deck); - - static Actdims serializeObject(); - - std::size_t max_keywords() const; - std::size_t max_line_count() const; - std::size_t max_characters() const; - std::size_t max_conditions() const; - - bool operator==(const Actdims& data) const; - - template - void serializeOp(Serializer& serializer) - { - serializer(keywords); - serializer(line_count); - serializer(characters); - serializer(conditions); - } - -private: - std::size_t keywords; - std::size_t line_count; - std::size_t characters; - std::size_t conditions; -}; - -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Action/ActionAST.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Action/ActionAST.hpp deleted file mode 100644 index 95826590e9..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Action/ActionAST.hpp +++ /dev/null @@ -1,71 +0,0 @@ -/* - Copyright 2018 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - - -#ifndef ActionAST_HPP -#define ActionAST_HPP - -#include -#include -#include - -#include - -namespace Opm { -namespace Action { - -class Context; -class ASTNode; - - -/* - The Action::AST class implements a tree with the result of the parsing of the - ACTIONX condition. The AST does not contain any context, that is supplied with - a Action::Context instace when calling the eval() methoid is called. -*/ - -class AST{ -public: - AST() = default; - explicit AST(const std::vector& tokens); - - static AST serializeObject(); - - Result eval(const Context& context) const; - - bool operator==(const AST& data) const; - - template - void serializeOp(Serializer& serializer) - { - serializer(condition); - } - -private: - /* - The use of a pointer here is to be able to create this class with only a - forward declaration of the ASTNode class. Would have prefered to use a - unique_ptr, but that requires writing custom destructors - the use of a - shared_ptr does not imply any shared ownership of the ASTNode. - */ - std::shared_ptr condition; -}; -} -} -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Action/ActionContext.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Action/ActionContext.hpp deleted file mode 100644 index 039ebfda87..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Action/ActionContext.hpp +++ /dev/null @@ -1,60 +0,0 @@ -/* - Copyright 2018 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - - -#ifndef ActionContext_HPP -#define ActionContext_HPP - -#include -#include - -#include - -namespace Opm { -namespace Action { - -/* - The Action::Context class is used as context when the ACTIONX condition is - evaluated. The Action::Context class is mainly just a thin wrapper around the - SummaryState class. -*/ - -class Context { -public: - explicit Context(const SummaryState& summary_state); - - /* - The get methods will first check the internal storage in the 'values' map - and then subsequently query the SummaryState member. - */ - double get(const std::string& func, const std::string& arg) const; - void add(const std::string& func, const std::string& arg, double value); - - double get(const std::string& func) const; - void add(const std::string& func, double value); - - std::vector wells(const std::string& func) const; - -private: - const SummaryState& summary_state; - std::map values; -}; -} -} -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Action/ActionResult.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Action/ActionResult.hpp deleted file mode 100644 index d8a5686927..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Action/ActionResult.hpp +++ /dev/null @@ -1,121 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - but eliminates the memory saving DynamicState is intended to enable. You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef ACTION_RESULT_HPP -#define ACTION_RESULT_HPP - -#include -#include -#include -#include - -namespace Opm { -namespace Action { - -/* - The Action::Result class is used to hold the boolean result of a ACTIONX - condition like: - - WWCT > 0.75 - - and also the final evaluation of an ACTIONX condition comes as a - Action::Result instance. - - - In addition to the overall truthness of the expression an Action::Result - instance can optionally have a set of matching wells. For instance the - the result of: - - FWCT > 0.75 - - Will not contain any wells, whereas the result of: - - WWCT > 0.75 - - will contain a set of all the wells matching the condition. The set of - matching wells can be queries with the wells() method. When a result with - wells and a result without wells are combined as: - - WWCT > 0.50 AND FPR > 1000 - - The result will have all the wells corresponding to the first condition, when - several results with wells are combined with logical operators AND and OR the - set of matching wells are combined correspondingly. It is actually possible - to have a result which evaluates to true and still have and zero matching - wells - e.g. - - WWCT > 1.25 OR FOPT > 1 - - If the condition evaluates to true the set of matching wells will be passed - to the Schedule::applyAction() method, and will be used in place of '?' in - keywords like WELOPEN. -*/ - - -class WellSet { -public: - WellSet() = default; - explicit WellSet(const std::vector& wells); - void add(const std::string& well); - - std::size_t size() const; - std::vector wells() const; - bool contains(const std::string& well) const; - - WellSet& intersect(const WellSet& other); - WellSet& add(const WellSet& other); -private: - std::unordered_set well_set; -}; - - - -class Result { -public: - explicit Result(bool result_arg); - Result(bool result_arg, const std::vector& wells); - Result(bool result_arg, const WellSet& wells); - Result(const Result& src); - - explicit operator bool() const; - std::vector wells() const; - - bool has_well(const std::string& well) const; - - void add_well(const std::string& well); - - Result& operator|=(const Result& other); - Result& operator=(const Result& src); - Result& operator&=(const Result& other); - -private: - void assign(bool value); - bool result; - /* - The set of matching wells is implemented with pointer semantics to be able - to differentiate between an empty set of wells - like all the wells with - WWCT > 1, and a result set which does not have well information at all - - e.g. FOPR > 0. - */ - std::unique_ptr matching_wells; -}; - -} -} -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Action/ActionValue.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Action/ActionValue.hpp deleted file mode 100644 index afeea6cbd1..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Action/ActionValue.hpp +++ /dev/null @@ -1,60 +0,0 @@ -#ifndef ACTION_VALUE_HPP -#define ACTION_VALUE_HPP - -#include - -namespace Opm { -enum TokenType { - number, // 0 - ecl_expr, // 1 - open_paren, // 2 - close_paren, // 3 - op_gt, // 4 - op_ge, // 5 - op_lt, // 6 - op_le, // 7 - op_eq, // 8 - op_ne, // 9 - op_and, // 10 - op_or, // 11 - end, // 12 - error // 13 -}; - -enum class FuncType { - none, - time, - region, - field, - group, - well, - well_segment, - well_connection, - Well_lgr, - aquifer, - block -}; - -namespace Action { - -class Value { -public: - explicit Value(double value); - Value() = default; - - Result eval_cmp(TokenType op, const Value& rhs) const; - void add_well(const std::string& well, double value); - double scalar() const; - -private: - Action::Result eval_cmp_wells(TokenType op, double rhs) const; - - double scalar_value; - double is_scalar = false; - std::vector> well_values; -}; - - -} -} -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Action/ActionX.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Action/ActionX.hpp deleted file mode 100644 index 0771d5afd6..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Action/ActionX.hpp +++ /dev/null @@ -1,124 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - - -#ifndef ActionX_HPP_ -#define ActionX_HPP_ - -#include -#include -#include - -#include -#include -#include -#include - - - -namespace Opm { -class DeckKeyword; - -namespace Action { - -/* - The ActionX class internalizes the ACTIONX keyword. This keyword represents a - small in-deck programming language for the SCHEDULE section. In the deck the - ACTIONX keyword comes together with a 'ENDACTIO' kewyord and then a list of - regular keywords in the between. The principle is then that ACTIONX represents - a condition, and when that condition is satisfied the keywords are applied. In - the example below the ACTIONX keyword defines a condition whether well OPX has - watercut above 0.75, when the condition is met the WELOPEN keyword is applied - - and the well is shut. - - ACTIONX - 'NAME' / - WWCT OPX > 0.50 / - / - - WELOPEN - 'OPX' OPEN / - / - - ENDACTION - - -*/ - -class ActionX { -public: - ActionX(); - ActionX(const std::string& name, size_t max_run, double max_wait, std::time_t start_time); - ActionX(const DeckKeyword& kw, std::time_t start_time); - ActionX(const DeckRecord& record, std::time_t start_time); - - static ActionX serializeObject(); - - void addKeyword(const DeckKeyword& kw); - bool ready(std::time_t sim_time) const; - Action::Result eval(std::time_t sim_time, const Action::Context& context) const; - - - std::string name() const { return this->m_name; } - size_t max_run() const { return this->m_max_run; } - double min_wait() const { return this->m_min_wait; } - std::time_t start_time() const { return this->m_start_time; } - std::vector::const_iterator begin() const; - std::vector::const_iterator end() const; - static bool valid_keyword(const std::string& keyword); - - /* - The conditions() and keyword_strings() methods, and their underlying data - members are only present to support writing formatted restart files. - */ - const std::vector& conditions() const; - std::vector keyword_strings() const; - - bool operator==(const ActionX& data) const; - - template - void serializeOp(Serializer& serializer) - { - serializer(m_name); - serializer(m_max_run); - serializer(m_min_wait); - serializer(m_start_time); - serializer.vector(keywords); - condition.serializeOp(serializer); - serializer.vector(m_conditions); - serializer(run_count); - serializer(last_run); - } - -private: - std::string m_name; - size_t m_max_run = 0; - double m_min_wait = 0.0; - std::time_t m_start_time; - - std::vector keywords; - Action::AST condition; - std::vector m_conditions; - mutable size_t run_count = 0; - mutable std::time_t last_run = 0; -}; - -} -} -#endif /* WELL_HPP_ */ diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Action/Actions.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Action/Actions.hpp deleted file mode 100644 index 5775c982a9..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Action/Actions.hpp +++ /dev/null @@ -1,75 +0,0 @@ -/* - Copyright 2018 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - - -#ifndef ActionCOnfig_HPP -#define ActionCOnfig_HPP - -#include -#include -#include - -#include -#include - -namespace Opm { -namespace Action { - -/* - The Actions class is a container of ACTIONX keywords. The main functionality - is to provide a list of ACTIONX keywords which are ready to be evaluated. -*/ - -class Actions { -public: - Actions() = default; - Actions(const std::vector& action, const std::vector& pyactions); - - static Actions serializeObject(); - - size_t size() const; - int max_input_lines() const; - bool empty() const; - void add(const ActionX& action); - void add(const PyAction& pyaction); - bool ready(std::time_t sim_time) const; - const ActionX& get(const std::string& name) const; - const ActionX& get(std::size_t index) const; - std::vector pending(std::time_t sim_time) const; - std::vector pending_python() const; - - std::vector::const_iterator begin() const; - std::vector::const_iterator end() const; - - bool operator==(const Actions& data) const; - - template - void serializeOp(Serializer& serializer) - { - serializer.vector(actions); - serializer.vector(pyactions); - } - -private: - std::vector actions; - std::vector pyactions; -}; -} -} -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Action/Condition.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Action/Condition.hpp deleted file mode 100644 index 1e1877a319..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Action/Condition.hpp +++ /dev/null @@ -1,106 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef ACTIONX_CONDITION_HPP -#define ACTIONX_CONDITION_HPP - -#include -#include - -#include - -namespace Opm { - -namespace Action { - - -class Quantity { -public: - Quantity() = default; - - Quantity(const std::string& arg) : - quantity(arg) - {} - - void add_arg(const std::string& arg); - std::string quantity; - std::vector args; - - bool operator==(const Quantity& data) const { - return quantity == data.quantity && - args == data.args; - } - - template - void serializeOp(Serializer& serializer) - { - serializer(quantity); - serializer(args); - } -}; - - - -class Condition { -public: - -enum class Logical { - AND, - OR, - END -}; - -enum class Comparator { - EQUAL, - GREATER, - LESS, - GREATER_EQUAL, - LESS_EQUAL, - INVALID -}; - - - Condition() = default; - Condition(const std::vector& tokens, const Location& location); - - - Quantity lhs; - Quantity rhs; - Logical logic = Logical::END; - Comparator cmp = Comparator::INVALID; - std::string cmp_string; - - bool operator==(const Condition& data) const; - - template - void serializeOp(Serializer& serializer) - { - lhs.serializeOp(serializer); - rhs.serializeOp(serializer); - serializer(logic); - serializer(cmp); - serializer(cmp_string); - } -}; - - -} -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Action/PyAction.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Action/PyAction.hpp deleted file mode 100644 index 4261ced780..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Action/PyAction.hpp +++ /dev/null @@ -1,79 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - - -#ifndef PYACTION_HPP_ -#define PYACTION_HPP_ - - -#include -#include - - -namespace Opm { - -class Python; -class EclipseState; -class Schedule; -class SummaryState; -class PyRunModule; - -namespace Action { - -class PyAction { -public: - enum class RunCount { - single, - unlimited, - first_true - }; - - - static RunCount from_string(std::string run_count); - static PyAction serializeObject(); - PyAction() = default; - PyAction(std::shared_ptr python, const std::string& name, RunCount run_count, const std::string& module_file); - bool run(EclipseState& ecl_state, Schedule& schedule, std::size_t report_step, SummaryState& st) const; - const std::string& name() const; - bool active() const; - bool operator==(const PyAction& other) const; - - template - void serializeOp(Serializer& serializer) - { - serializer(m_name); - serializer(m_run_count); - serializer(module_file); - serializer(m_active); - } - -private: - void update(bool result) const; - - mutable std::shared_ptr< PyRunModule > run_module; - std::string m_name; - RunCount m_run_count; - std::string module_file; - mutable bool m_active = true; -}; -} - -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/ArrayDimChecker.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/ArrayDimChecker.hpp deleted file mode 100644 index 8cb5681aea..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/ArrayDimChecker.hpp +++ /dev/null @@ -1,42 +0,0 @@ -/* - Copyright (c) 2019 Equinor ASA - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef OPM_ARRAYDIM_CHECKER_HPP -#define OPM_ARRAYDIM_CHECKER_HPP - -#include - -namespace Opm { - class ErrorGuard; - class EclipseState; - class ParseContext; - class Schedule; -} // Opm - -namespace Opm { - int maxGroupSize(const Schedule& sched, - const std::size_t step); - - void checkConsistentArrayDimensions(const EclipseState& es, - const Schedule& sched, - const ParseContext& ctxt, - ErrorGuard& guard); -} // Opm - -#endif // OPM_ARRAYDIM_CHECKER_HPP diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/DynamicState.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/DynamicState.hpp deleted file mode 100644 index 2f341e7457..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/DynamicState.hpp +++ /dev/null @@ -1,280 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - - -#ifndef DYNAMICSTATE_HPP_ -#define DYNAMICSTATE_HPP_ - -#include -#include -#include -#include - -#include - - -namespace Opm { - - /** - The DynamicState class is designed to hold information about - properties with the following semantics: - - 1. The property can be updated repeatedly at different - timesteps; observe that the class does not support - operator[] - only updates with weakly increasing timesteps - are supported. - - 2. At any point in the time the previous last set value - applies. - - The class is very much tailored to support the Schedule file of - Eclipse where a control applied at time T will apply - indefinitely, or until explicitly set to a different value. - - The update() method returns true if the updated value is - different from the current value, this implies that the - class must support operator!= - */ - - - -template< class T > -class DynamicState { - friend class Schedule; - public: - typedef typename std::vector< T >::iterator iterator; - - DynamicState() = default; - - DynamicState( const TimeMap& timeMap, T initial ) : - m_data( timeMap.size(), initial ), - initial_range( timeMap.size() ) - {} - - DynamicState(const std::vector& data, - size_t init_range) : - m_data(data), initial_range(init_range) - {} - - void globalReset( T value ) { - this->m_data.assign( this->m_data.size(), value ); - } - - const T& back() const { - return m_data.back(); - } - - const T& at( size_t index ) const { - return this->m_data.at( index ); - } - - const T& operator[](size_t index) const { - return this->at( index ); - } - - const T& get(size_t index) const { - return this->at( index ); - } - - void updateInitial( T initial ) { - std::fill_n( this->m_data.begin(), this->initial_range, initial ); - } - - - std::vector> unique() const { - if (this->m_data.empty()) - return {}; - - const auto * current_value = std::addressof(this->m_data[0]); - std::size_t current_index = 0; - std::vector> result{{current_index, *current_value}}; - while (true) { - if (this->m_data[current_index] != *current_value) { - current_value = std::addressof(this->m_data[current_index]); - result.emplace_back(current_index, *current_value); - } - - current_index++; - if (current_index == this->m_data.size()) - break; - } - - return result; - } - - bool is_new_data(size_t index) const { - return index == 0 || (at(index) != at(index - 1)); - } - - /** - If the current value has been changed the method will - return true, otherwise it will return false. - */ - bool update( size_t index, T value ) { - if( this->initial_range == this->m_data.size() ) - this->initial_range = index; - - const bool change = (value != this->m_data.at( index )); - - if( !change ) return false; - - std::fill( this->m_data.begin() + index, - this->m_data.end(), - value ); - - return true; - } - - void update_elm( size_t index, const T& value ) { - if (this->m_data.size() <= index) - throw std::out_of_range("Invalid index for update_elm()"); - - this->m_data[index] = value; - } - - - /* - Will assign all currently equal values starting at index with the new - value. Purpose of the method is to support manipulations of an existing - Schedule object, if e.g. a well is initially closed in the interval - [T1,T2] and then opened at time T1 < Tx < T2 then the open should be - applied for all times in the range [Tx,T2]. - */ - void update_equal(size_t index, const T& value) { - if (this->m_data.size() <= index) - throw std::out_of_range("Invalid index for update_equal()"); - - const T prev_value = this->m_data[index]; - if (prev_value == value) - return; - - while (true) { - if (this->m_data[index] != prev_value) - break; - - this->m_data[index] = value; - - index++; - if (index == this->m_data.size()) - break; - - } - } - - /// Will return the index of the first occurence of @value, or - /// -1 if @value is not found. - int find(const T& value) const { - auto iter = std::find( m_data.begin() , m_data.end() , value); - if( iter == this->m_data.end() ) return -1; - - return std::distance( m_data.begin() , iter ); - } - - template - int find_if(P&& pred) const { - auto iter = std::find_if(m_data.begin(), m_data.end(), std::forward

(pred)); - if( iter == this->m_data.end() ) return -1; - - return std::distance( m_data.begin() , iter ); - } - - /// Will return the index of the first value which is != @value, or -1 - /// if all values are == @value - int find_not(const T& value) const { - auto iter = std::find_if_not( m_data.begin() , m_data.end() , [&value] (const T& elm) { return value == elm; }); - if( iter == this->m_data.end() ) return -1; - - return std::distance( m_data.begin() , iter ); - } - - iterator begin() { - return this->m_data.begin(); - } - - - iterator end() { - return this->m_data.end(); - } - - - std::size_t size() const { - return this->m_data.size(); - } - - const std::vector& data() const { - return m_data; - } - - size_t initialRange() const { - return initial_range; - } - - bool operator==(const DynamicState& data) const { - return m_data == data.m_data && - initial_range == data.initial_range; - } - - // complexType=true if contained type has a serializeOp - template - void serializeOp(Serializer& serializer) - { - std::vector unique; - auto indices = split(unique); - serializer.template vector(unique); - serializer(indices); - if (!serializer.isSerializing()) - reconstruct(unique, indices); - } - - private: - std::vector< T > m_data; - size_t initial_range; - - std::vector split(std::vector& unique) const { - std::vector idxVec; - idxVec.reserve(m_data.size() + 1); - for (const auto& w : m_data) { - auto candidate = std::find(unique.begin(), unique.end(), w); - size_t idx = candidate - unique.begin(); - if (candidate == unique.end()) { - unique.push_back(w); - idx = unique.size() - 1; - } - idxVec.push_back(idx); - } - idxVec.push_back(initial_range); - - return idxVec; - } - - void reconstruct(const std::vector& unique, - const std::vector& idxVec) { - m_data.clear(); - m_data.reserve(idxVec.size() - 1); - for (size_t i = 0; i < idxVec.size() - 1; ++i) - m_data.push_back(unique[idxVec[i]]); - - initial_range = idxVec.back(); - } -}; - -} - -#endif - diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/DynamicVector.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/DynamicVector.hpp deleted file mode 100644 index 429e387d7d..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/DynamicVector.hpp +++ /dev/null @@ -1,82 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef DYNAMICVECTOR_HPP_ -#define DYNAMICVECTOR_HPP_ - - -#include -#include - -namespace Opm { - - /* - The DynamicVector class is a thin wrapper around - std::vector with the following twists: - - - Default-sized to the size of a time map, pre-populated by the default - value. - */ - - template - class DynamicVector { - public: - DynamicVector() = default; - - DynamicVector(const TimeMap& timeMap, T defaultValue) : - m_data( timeMap.size(), defaultValue ) - {} - - explicit DynamicVector(const std::vector& data) : - m_data(data) - {} - - const T& operator[](size_t index) const { - return this->m_data.at( index ); - } - - - const T& iget(size_t index) const { - return (*this)[index]; - } - - T& operator[](size_t index) { - return this->m_data.at( index ); - } - - void iset(size_t index, T value) { - (*this)[index] = std::move( value ); - } - - bool operator==(const DynamicVector& data) const { - return this->m_data == data.m_data; - } - - template - void serializeOp(Serializer& serializer) - { - serializer.template vector(m_data); - } - - private: - std::vector m_data; - }; -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Events.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Events.hpp deleted file mode 100644 index 91aef38f3b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Events.hpp +++ /dev/null @@ -1,145 +0,0 @@ -/* - Copyright 2015 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ -#ifndef SCHEDULE_EVENTS_HPP -#define SCHEDULE_EVENTS_HPP - -#include - -#include - -namespace Opm -{ - namespace ScheduleEvents { - // These values are used as bitmask - 2^n structure is essential. - enum Events { - /* - The NEW_WELL event is triggered by the WELSPECS - keyword. For wells the event is triggered the first - time the well is mentioned in the WELSPECS keyword, for - the Schedule object the NEW_WELL event is triggered - every time a WELSPECS keyword is encountered. - */ - NEW_WELL = 1, - - /* - WHen the well data is updated with the WELSPECS keyword - this event is triggered. Only applies to individual - wells, and not the global Schedule object. - */ - WELL_WELSPECS_UPDATE = 2, - - - //WELL_POLYMER_UPDATE = 4, - /* - The NEW_GROUP event is triggered by the WELSPECS and - GRUPTREE keywords. - */ - NEW_GROUP = 8, - - /* - The PRODUCTION_UPDATE event is triggered by the - WCONPROD and WCONHIST keywords. The event will be - triggered if *any* of the elements in one of keywords - is changed. Quite simlar for INJECTION_UPDATE and - POLYMER_UPDATE. - */ - PRODUCTION_UPDATE = 16, - INJECTION_UPDATE = 32, - //POLYMER_UPDATES = 64, - - /* - This event is triggered if the well status is changed - between {OPEN,SHUT,STOP,AUTO}. There are many keywords - which can trigger a well status change. - */ - WELL_STATUS_CHANGE = 128, - - /* - COMPDAT and WELOPEN - */ - COMPLETION_CHANGE = 256, - - /* - The well group topolyg has changed. - */ - GROUP_CHANGE = 512, - - - /* - Geology modifier. - */ - GEO_MODIFIER = 1024, - - /* - TUNING has changed - */ - TUNING_CHANGE = 2048, - - /* The VFP tables have changed */ - VFPINJ_UPDATE = 4096, - VFPPROD_UPDATE = 8192, - - - /* - GROUP production or injection targets has changed - */ - GROUP_PRODUCTION_UPDATE = 16384, - GROUP_INJECTION_UPDATE = 32768 - }; - } - - /* - This class implements a simple system for recording when various - events happen in the Schedule file. The purpose of the class is - that downstream code can query this system whether a certain a - event has taken place, and then perform potentially expensive - calculations conditionally: - - auto events = schedule->getEvents(); - if (events.hasEvent(SchedulEvents::NEW_WELL , reportStep)) - // Perform expensive calculation which must be performed - // when a new well is introduced. - ... - - */ - - class Events { - public: - Events() = default; - explicit Events(const TimeMap& timeMap); - - static Events serializeObject(); - - void addEvent(ScheduleEvents::Events event, size_t reportStep); - bool hasEvent(uint64_t eventMask, size_t reportStep) const; - - bool operator==(const Events& data) const; - - template - void serializeOp(Serializer& serializer) - { - m_events.template serializeOp(serializer); - } - - private: - DynamicVector m_events; - }; -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Group/GConSale.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Group/GConSale.hpp deleted file mode 100644 index e6ad74b6c8..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Group/GConSale.hpp +++ /dev/null @@ -1,99 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef GCONSALE_H -#define GCONSALE_H - -#include -#include - -#include -#include -#include - -namespace Opm { - - class GConSale { - public: - - enum class MaxProcedure { - NONE, CON, CON_P, WELL, PLUG, RATE, MAXR, END - }; - - struct GCONSALEGroup { - UDAValue sales_target; - UDAValue max_sales_rate; - UDAValue min_sales_rate; - MaxProcedure max_proc; - double udq_undefined; - UnitSystem unit_system; - - bool operator==(const GCONSALEGroup& data) const { - return sales_target == data.sales_target && - max_sales_rate == data.max_sales_rate && - min_sales_rate == data.min_sales_rate && - max_proc == data.max_proc && - udq_undefined == data.udq_undefined && - unit_system == data.unit_system; - } - - template - void serializeOp(Serializer& serializer) - { - sales_target.serializeOp(serializer); - max_sales_rate.serializeOp(serializer); - min_sales_rate.serializeOp(serializer); - serializer(max_proc); - serializer(udq_undefined); - unit_system.serializeOp(serializer); - } - }; - - struct GCONSALEGroupProp { - double sales_target; - double max_sales_rate; - double min_sales_rate; - MaxProcedure max_proc; - }; - - static GConSale serializeObject(); - - bool has(const std::string& name) const; - const GCONSALEGroup& get(const std::string& name) const; - const GCONSALEGroupProp get(const std::string& name, const SummaryState& st) const; - static MaxProcedure stringToProcedure(const std::string& procedure); - void add(const std::string& name, const UDAValue& sales_target, const UDAValue& max_rate, const UDAValue& min_rate, const std::string& procedure, double udq_undefined_arg, const UnitSystem& unit_system); - size_t size() const; - - bool operator==(const GConSale& data) const; - - template - void serializeOp(Serializer& serializer) - { - serializer.map(groups); - } - - private: - std::map groups; - }; - -} - - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Group/GConSump.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Group/GConSump.hpp deleted file mode 100644 index 1621fd2586..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Group/GConSump.hpp +++ /dev/null @@ -1,88 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef GCONSUMP_H -#define GCONSUMP_H - -#include -#include - -#include -#include -#include - -namespace Opm { - - class GConSump { - public: - struct GCONSUMPGroup { - UDAValue consumption_rate; - UDAValue import_rate; - std::string network_node; - double udq_undefined; - UnitSystem unit_system; - - bool operator==(const GCONSUMPGroup& data) const { - return consumption_rate == data.consumption_rate && - import_rate == data.import_rate && - network_node == data.network_node && - udq_undefined == data.udq_undefined && - unit_system == data.unit_system; - } - - template - void serializeOp(Serializer& serializer) - { - consumption_rate.serializeOp(serializer); - import_rate.serializeOp(serializer); - serializer(network_node); - serializer(udq_undefined); - unit_system.serializeOp(serializer); - } - }; - - struct GCONSUMPGroupProp { - double consumption_rate; - double import_rate; - std::string network_node; - }; - - static GConSump serializeObject(); - - bool has(const std::string& name) const; - const GCONSUMPGroup& get(const std::string& name) const; - const GCONSUMPGroupProp get(const std::string& name, const SummaryState& st) const; - void add(const std::string& name, const UDAValue& consumption_rate, const UDAValue& import_rate, const std::string network_node, double udq_undefined_arg, const UnitSystem& unit_system); - size_t size() const; - - bool operator==(const GConSump& data) const; - - template - void serializeOp(Serializer& serializer) - { - serializer.map(groups); - } - - private: - std::map groups; - }; - -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Group/GTNode.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Group/GTNode.hpp deleted file mode 100644 index 4245fafc8f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Group/GTNode.hpp +++ /dev/null @@ -1,59 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include -#include - -#include -#include - -#ifndef GROUPTREE2 -#define GROUPTREE2 - -namespace Opm { - -class GTNode { -public: - GTNode(const Group& group, std::size_t level, const std::optional& parent_name); - - void add_group(const GTNode& child_group); - void add_well(const Well& well); - - const std::vector& wells() const; - const std::vector& groups() const; - const std::string& name() const; - const std::string& parent_name() const; - - const Group& group() const; -private: - const Group m_group; - std::size_t m_level; - std::optional m_parent_name; - /* - Class T with a stl container - supposedly undefined behavior before - C++17 - but it compiles without warnings. - */ - std::vector m_child_groups; - std::vector m_wells; -}; - -} -#endif - - diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Group/Group.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Group/Group.hpp deleted file mode 100644 index 66102a05f3..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Group/Group.hpp +++ /dev/null @@ -1,309 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef GROUP2_HPP -#define GROUP2_HPP - - -#include -#include -#include - -#include -#include -#include -#include - -namespace Opm { - -class SummaryState; -class Group { -public: - -// A group can have both injection controls and production controls set at -// the same time, i.e. this enum is used as a bitmask. -enum class GroupType : unsigned { - NONE = 0, - PRODUCTION = 1, - INJECTION = 2, - MIXED = 3 -}; - - - -enum class ExceedAction { - NONE = 0, - CON = 1, - CON_PLUS = 2, // String: "+CON" - WELL = 3, - PLUG = 4, - RATE = 5 -}; -static const std::string ExceedAction2String( ExceedAction enumValue ); -static ExceedAction ExceedActionFromString( const std::string& stringValue ); - - -enum class InjectionCMode : int { - NONE = 0, - RATE = 1, - RESV = 2, - REIN = 4, - VREP = 8, - FLD = 16, - SALE = 32 -}; -static const std::string InjectionCMode2String( InjectionCMode enumValue ); -static InjectionCMode InjectionCModeFromString( const std::string& stringValue ); - - -enum class ProductionCMode : int { - NONE = 0, - ORAT = 1, - WRAT = 2, - GRAT = 4, - LRAT = 8, - CRAT = 16, - RESV = 32, - PRBL = 64, - FLD = 128 -}; -static const std::string ProductionCMode2String( ProductionCMode enumValue ); -static ProductionCMode ProductionCModeFromString( const std::string& stringValue ); - - -enum class GuideRateTarget { - OIL = 0, - WAT = 1, - GAS = 2, - LIQ = 3, - RES = 4, - COMB = 5, - WGA = 6, - CVAL = 7, - INJV = 8, - POTN = 9, - FORM = 10, - NO_GUIDE_RATE = 11 -}; -static GuideRateTarget GuideRateTargetFromString( const std::string& stringValue ); - - - -struct GroupInjectionProperties { - Phase phase = Phase::WATER; - InjectionCMode cmode = InjectionCMode::NONE; - UDAValue surface_max_rate; - UDAValue resv_max_rate; - UDAValue target_reinj_fraction; - UDAValue target_void_fraction; - std::string reinj_group; - std::string voidage_group; - bool available_group_control; - - static GroupInjectionProperties serializeObject(); - - int injection_controls = 0; - bool operator==(const GroupInjectionProperties& other) const; - bool operator!=(const GroupInjectionProperties& other) const; - - template - void serializeOp(Serializer& serializer) - { - serializer(phase); - serializer(cmode); - surface_max_rate.serializeOp(serializer); - resv_max_rate.serializeOp(serializer); - target_reinj_fraction.serializeOp(serializer); - target_void_fraction.serializeOp(serializer); - serializer(reinj_group); - serializer(voidage_group); - serializer(injection_controls); - serializer(available_group_control); - } -}; - -struct InjectionControls { - Phase phase; - InjectionCMode cmode; - double surface_max_rate; - double resv_max_rate; - double target_reinj_fraction; - double target_void_fraction; - int injection_controls = 0; - std::string reinj_group; - std::string voidage_group; - bool has_control(InjectionCMode control) const; -}; - -struct GroupProductionProperties { - ProductionCMode cmode = ProductionCMode::NONE; - ExceedAction exceed_action = ExceedAction::NONE; - UDAValue oil_target; - UDAValue water_target; - UDAValue gas_target; - UDAValue liquid_target; - double guide_rate; - GuideRateTarget guide_rate_def; - double resv_target = 0; - bool available_group_control = true; - static GroupProductionProperties serializeObject(); - - int production_controls = 0; - bool operator==(const GroupProductionProperties& other) const; - bool operator!=(const GroupProductionProperties& other) const; - - template - void serializeOp(Serializer& serializer) - { - serializer(cmode); - serializer(exceed_action); - oil_target.serializeOp(serializer); - water_target.serializeOp(serializer); - gas_target.serializeOp(serializer); - liquid_target.serializeOp(serializer); - serializer(guide_rate); - serializer(guide_rate_def); - serializer(resv_target); - serializer(available_group_control); - serializer(production_controls); - } -}; - - -struct ProductionControls { - ProductionCMode cmode; - ExceedAction exceed_action; - double oil_target; - double water_target; - double gas_target; - double liquid_target; - double guide_rate; - GuideRateTarget guide_rate_def; - double resv_target = 0; - int production_controls = 0; - bool has_control(ProductionCMode control) const; -}; - - - Group(); - Group(const std::string& group_name, std::size_t insert_index_arg, std::size_t init_step_arg, double udq_undefined_arg, const UnitSystem& unit_system); - - static Group serializeObject(); - - bool defined(std::size_t timeStep) const; - std::size_t insert_index() const; - const std::string& name() const; - int getGroupNetVFPTable() const; - - bool updateNetVFPTable(int vfp_arg); - bool update_gefac(double gefac, bool transfer_gefac); - - // [[deprecated("use Group::control_group() or Group::flow_group()")]] - const std::string& parent() const; - std::optional control_group() const; - std::optional flow_group() const; - - bool updateParent(const std::string& parent); - bool updateInjection(const GroupInjectionProperties& injection); - bool updateProduction(const GroupProductionProperties& production); - bool isProductionGroup() const; - bool isInjectionGroup() const; - void setProductionGroup(); - void setInjectionGroup(); - double getGroupEfficiencyFactor() const; - bool getTransferGroupEfficiencyFactor() const; - - std::size_t numWells() const; - bool addGroup(const std::string& group_name); - bool hasGroup(const std::string& group_name) const; - void delGroup(const std::string& group_name); - bool addWell(const std::string& well_name); - bool hasWell(const std::string& well_name) const; - void delWell(const std::string& well_name); - - const std::vector& wells() const; - const std::vector& groups() const; - bool wellgroup() const; - ProductionControls productionControls(const SummaryState& st) const; - InjectionControls injectionControls(Phase phase, const SummaryState& st) const; - bool hasInjectionControl(Phase phase) const; - const GroupProductionProperties& productionProperties() const; - const std::map& injectionProperties() const; - const GroupType& getGroupType() const; - ProductionCMode production_cmode() const; - InjectionCMode injection_cmode() const; - Phase injection_phase() const; - bool has_control(ProductionCMode control) const; - bool has_control(InjectionCMode control) const; - bool productionGroupControlAvailable() const; - bool injectionGroupControlAvailable(const Phase phase) const; - - bool operator==(const Group& data) const; - const Phase& topup_phase() const; - bool has_topup_phase() const; - - template - void serializeOp(Serializer& serializer) - { - serializer(m_name); - serializer(m_insert_index); - serializer(init_step); - serializer(udq_undefined); - unit_system.serializeOp(serializer); - serializer(group_type); - serializer(gefac); - serializer(transfer_gefac); - serializer(vfp_table); - serializer(parent_group); - m_wells.serializeOp(serializer); - m_groups.serializeOp(serializer); - serializer.map(injection_properties); - production_properties.serializeOp(serializer); - serializer(m_topup_phase); - } - -private: - bool hasType(GroupType gtype) const; - void addType(GroupType new_gtype); - - std::string m_name; - std::size_t m_insert_index; - std::size_t init_step; - double udq_undefined; - UnitSystem unit_system; - GroupType group_type; - double gefac; - bool transfer_gefac; - int vfp_table; - - std::string parent_group; - IOrderSet m_wells; - IOrderSet m_groups; - - std::map injection_properties; - GroupProductionProperties production_properties{}; - std::pair m_topup_phase{Phase::WATER, false}; -}; - -Group::GroupType operator |(Group::GroupType lhs, Group::GroupType rhs); -Group::GroupType operator &(Group::GroupType lhs, Group::GroupType rhs); - -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Group/GuideRate.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Group/GuideRate.hpp deleted file mode 100644 index b9afd0b78a..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Group/GuideRate.hpp +++ /dev/null @@ -1,106 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef GUIDE_RATE_HPP -#define GUIDE_RATE_HPP - -#include -#include -#include -#include - -#include -#include -#include - -namespace Opm { - -class Schedule; -class GuideRate { - -public: -// used for potentials and well rates -struct RateVector { - RateVector () = default; - RateVector (double orat, double grat, double wrat) : - oil_rat(orat), - gas_rat(grat), - wat_rat(wrat) - {} - - - double eval(Group::GuideRateTarget target) const; - double eval(Well::GuideRateTarget target) const; - double eval(GuideRateModel::Target target) const; - - - double oil_rat; - double gas_rat; - double wat_rat; -}; - - -private: - -struct GuideRateValue { - GuideRateValue() = default; - GuideRateValue(double t, double v, GuideRateModel::Target tg): - sim_time(t), - value(v), - target(tg) - {} - - bool operator==(const GuideRateValue& other) const { - return (this->sim_time == other.sim_time && - this->value == other.value); - } - - bool operator!=(const GuideRateValue& other) const { - return !(*this == other); - } - - double sim_time; - double value; - GuideRateModel::Target target; -}; - - -public: - GuideRate(const Schedule& schedule); - void compute(const std::string& wgname, size_t report_step, double sim_time, double oil_pot, double gas_pot, double wat_pot); - double get(const std::string& well, Well::GuideRateTarget target, const RateVector& rates) const; - double get(const std::string& group, Group::GuideRateTarget target, const RateVector& rates) const; - double get(const std::string& name, GuideRateModel::Target model_target, const RateVector& rates) const; - bool has(const std::string& name) const; - -private: - void well_compute(const std::string& wgname, size_t report_step, double sim_time, double oil_pot, double gas_pot, double wat_pot); - void group_compute(const std::string& wgname, size_t report_step, double sim_time, double oil_pot, double gas_pot, double wat_pot); - double eval_form(const GuideRateModel& model, double oil_pot, double gas_pot, double wat_pot, const GuideRateValue * prev) const; - double eval_group_pot() const; - double eval_group_resvinj() const; - - std::unordered_map values; - std::unordered_map potentials; - const Schedule& schedule; -}; - -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Group/GuideRateConfig.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Group/GuideRateConfig.hpp deleted file mode 100644 index 02dbaddfa4..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Group/GuideRateConfig.hpp +++ /dev/null @@ -1,104 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef GUIDE_RATE_CONFIG_HPP -#define GUIDE_RATE_CONFIG_HPP - -#include -#include -#include - -#include -#include -#include - -namespace Opm { - - -class GuideRateConfig { -public: - - struct WellTarget { - double guide_rate; - Well::GuideRateTarget target; - double scaling_factor; - - bool operator==(const WellTarget& data) const { - return guide_rate == data.guide_rate && - target == data.target && - scaling_factor == data.scaling_factor; - } - - template - void serializeOp(Serializer& serializer) - { - serializer(guide_rate); - serializer(target); - serializer(scaling_factor); - } -}; - -struct GroupTarget { - double guide_rate; - Group::GuideRateTarget target; - - bool operator==(const GroupTarget& data) const { - return guide_rate == data.guide_rate && - target == data.target; - } - - template - void serializeOp(Serializer& serializer) - { - serializer(guide_rate); - serializer(target); - } -}; - - static GuideRateConfig serializeObject(); - - const GuideRateModel& model() const; - bool has_model() const; - bool update_model(const GuideRateModel& model); - void update_well(const Well& well); - void update_group(const Group& group); - const WellTarget& well(const std::string& well) const; - const GroupTarget& group(const std::string& group) const; - bool has_well(const std::string& well) const; - bool has_group(const std::string& group) const; - - bool operator==(const GuideRateConfig& data) const; - - template - void serializeOp(Serializer& serializer) - { - serializer(m_model); - serializer.map(wells); - serializer.map(groups); - } - -private: - std::shared_ptr m_model; - std::unordered_map wells; - std::unordered_map groups; -}; - -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Group/GuideRateModel.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Group/GuideRateModel.hpp deleted file mode 100644 index e0ce93bb1c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Group/GuideRateModel.hpp +++ /dev/null @@ -1,123 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef GUIDE_RATE_MODEL_HPP -#define GUIDE_RATE_MODEL_HPP - -#include -#include -#include - -namespace Opm { - -class GuideRateModel { -public: - - enum class Target { - OIL = 0, - LIQ = 1, - GAS = 2, - WAT = 3, - RES = 4, - COMB = 5, - NONE = 6 - }; - - static Target TargetFromString(const std::string& s); - - GuideRateModel(double time_interval_arg, - Target target_arg, - double A_arg, - double B_arg, - double C_arg, - double D_arg, - double E_arg, - double F_arg, - bool allow_increase_arg, - double damping_factor_arg, - bool use_free_gas_arg); - GuideRateModel() = default; - - static GuideRateModel serializeObject(); - - bool updateLINCOM(const UDAValue& alpha, const UDAValue& beta, const UDAValue& gamma); - double eval(double oil_pot, double gas_pot, double wat_pot) const; - double update_delay() const; - bool allow_increase() const; - double damping_factor() const; - bool operator==(const GuideRateModel& other) const; - bool operator!=(const GuideRateModel& other) const; - Target target() const; - double getA() const; - double getB() const; - double getC() const; - double getD() const; - double getE() const; - double getF() const; - - static Target convert_target(Group::GuideRateTarget group_target); - static Target convert_target(Well::GuideRateTarget well_target); - static double pot(Target target, double oil_pot, double gas_pot, double wat_pot); - - template - void serializeOp(Serializer& serializer) - { - serializer(time_interval); - serializer(m_target), - serializer(A); - serializer(B); - serializer(C); - serializer(D); - serializer(E); - serializer(F); - serializer(allow_increase_); - serializer(damping_factor_); - serializer(use_free_gas); - serializer(default_model); - alpha.serializeOp(serializer); - beta.serializeOp(serializer); - gamma.serializeOp(serializer); - } - -private: - double pot(double oil_pot, double gas_pot, double wat_pot) const; - /* - Unfortunately the default values will give a GuideRateModel which can not - be evaluated, due to a division by zero problem. - */ - double time_interval = 0; - Target m_target = Target::NONE; - double A = 0; - double B = 0; - double C = 0; - double D = 0; - double E = 0; - double F = 0; - bool allow_increase_ = true; - double damping_factor_ = 1.0; - bool use_free_gas = false; - bool default_model = true; - UDAValue alpha; - UDAValue beta; - UDAValue gamma; -}; - -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/MSW/Segment.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/MSW/Segment.hpp deleted file mode 100644 index 2984371807..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/MSW/Segment.hpp +++ /dev/null @@ -1,187 +0,0 @@ -/* - Copyright 2015 SINTEF ICT, Applied Mathematics. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef SEGMENT_HPP_HEADER_INCLUDED -#define SEGMENT_HPP_HEADER_INCLUDED - -#include -#include - -namespace Opm { - class SpiralICD; - class Valve; - - namespace RestartIO { - struct RstSegment; - } -} - -namespace Opm { - - class Segment { - public: - - enum class SegmentType { - REGULAR, - SICD, - AICD, // Not really supported - just included to complete the enum - VALVE, - }; - - Segment(); - - Segment(const Segment& src, double new_depth, double new_length, double new_volume); - Segment(const Segment& src, double new_depth, double new_length); - Segment(const Segment& src, double new_volume); - Segment(int segment_number_in, int branch_in, int outlet_segment_in, double length_in, double depth_in, - double internal_diameter_in, double roughness_in, double cross_area_in, double volume_in, bool data_ready_in, SegmentType segment_type_in); - Segment(const RestartIO::RstSegment& rst_segment); - - static Segment serializeObject(); - - int segmentNumber() const; - int branchNumber() const; - int outletSegment() const; - double totalLength() const; - double depth() const; - double internalDiameter() const; - double roughness() const; - double crossArea() const; - double volume() const; - bool dataReady() const; - - SegmentType segmentType() const; - int ecl_type_id() const; - - - const std::vector& inletSegments() const; - - static double invalidValue(); - static SegmentType type_from_int(int ecl_id); - - bool operator==( const Segment& ) const; - bool operator!=( const Segment& ) const; - - const std::shared_ptr& spiralICD() const; - const Valve* valve() const; - - void updateSpiralICD(const SpiralICD& spiral_icd); - void updateValve(const Valve& valve, const double segment_length); - void addInletSegment(const int segment_number); - - template - void serializeOp(Serializer& serializer) - { - serializer(m_segment_number); - serializer(m_branch); - serializer(m_outlet_segment); - serializer(m_inlet_segments); - serializer(m_total_length); - serializer(m_depth); - serializer(m_internal_diameter); - serializer(m_roughness); - serializer(m_cross_area); - serializer(m_volume); - serializer(m_data_ready); - serializer(m_segment_type); - serializer(m_spiral_icd); - serializer(m_valve); - } - - private: - // segment number - // it should work as a ID. - int m_segment_number; - // branch number - // for top segment, it should always be 1 - int m_branch; - // the outlet junction segment - // for top segment, it should be -1 - int m_outlet_segment; - // the segments whose outlet segments are the current segment - std::vector m_inlet_segments; - // length of the segment node to the bhp reference point. - // when reading in from deck, with 'INC', - // it will be incremental length before processing. - // After processing and in the class Well, it always stores the 'ABS' value. - // which means the total_length - double m_total_length; - // depth of the nodes to the bhp reference point - // when reading in from deck, with 'INC', - // it will be the incremental depth before processing. - // in the class Well, it always stores the 'ABS' value. - // TODO: to check if it is good to use 'ABS' always. - double m_depth; - // tubing internal diameter - // or the equivalent diameter for annular cross-sections - // for top segment, it is UNDEFINED - // we use invalid_value for the top segment - double m_internal_diameter; - // effective roughness of the tubing - // used to calculate the Fanning friction factor - // for top segment, it is UNDEFINED - // we use invalid_value for the top segment - double m_roughness; - // cross-sectional area for fluid flow - // not defined for the top segment, - // we use invalid_value for the top segment. - double m_cross_area; - // valume of the segment; - // it is defined for top segment. - // TODO: to check if the definition is the same with other segments. - double m_volume; - // indicate if the data related to 'INC' or 'ABS' is ready - // the volume will be updated at a final step. - bool m_data_ready; - - // indicate the type of the segment - // regular, spiral ICD, or Valve. - SegmentType m_segment_type; - - // information related to SpiralICD. It is nullptr for segments are not - // spiral ICD type - std::shared_ptr m_spiral_icd; - - // information related to sub-critical valve. It is nullptr for segments are not - // of type of Valve - std::shared_ptr m_valve; - - // We are not handling the length of segment projected onto the X-axis and Y-axis. - // They are not used in the simulations and we are not supporting the plotting. - // There are other three properties for segment related to thermal conduction, - // while they are not supported by the keyword at the moment. - }; - - inline bool isRegular(const Segment& segment) - { - return segment.segmentType() == Segment::SegmentType::REGULAR; - } - - inline bool isSpiralICD(const Segment& segment) - { - return segment.segmentType() == Segment::SegmentType::SICD; - } - - inline bool isValve(const Segment& segment) - { - return segment.segmentType() == Segment::SegmentType::VALVE; - } -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/MSW/SpiralICD.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/MSW/SpiralICD.hpp deleted file mode 100644 index 5f414aef24..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/MSW/SpiralICD.hpp +++ /dev/null @@ -1,112 +0,0 @@ -/* - Copyright 2017 SINTEF Digital, Mathematics and Cybernetics. - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef SPIRALICD_HPP_HEADER_INCLUDED -#define SPIRALICD_HPP_HEADER_INCLUDED - -#include -#include -#include -#include - -#include - -namespace Opm { - - class DeckRecord; - class DeckKeyword; - - class SpiralICD { - public: - - SpiralICD(); - explicit SpiralICD(const DeckRecord& record); - SpiralICD(double strength, - double length, - double densityCalibration, - double viscosityCalibration, - double criticalValue, - double widthTransitionRegion, - double maxViscosityRatio, - int methodFlowScaling, - double maxAbsoluteRate, - ICDStatus status, - double scalingFactor); - - static SpiralICD serializeObject(); - - // the function will return a map - // [ - // "WELL1" : [, ...] - // .... - static std::map > > - fromWSEGSICD(const DeckKeyword& wsegsicd); - - double maxAbsoluteRate() const; - ICDStatus status() const; - double strength() const; - double length() const; - double densityCalibration() const; - double viscosityCalibration() const; - double criticalValue() const; - double widthTransitionRegion() const; - double maxViscosityRatio() const; - int methodFlowScaling() const; - - void updateScalingFactor(const double segment_length, const double completion_length); - double scalingFactor() const; - int ecl_status() const; - bool operator==(const SpiralICD& data) const; - - template - void serializeOp(Serializer& serializer) - { - serializer(m_strength); - serializer(m_length); - serializer(m_density_calibration); - serializer(m_viscosity_calibration); - serializer(m_critical_value); - serializer(m_width_transition_region); - serializer(m_max_viscosity_ratio); - serializer(m_method_flow_scaling); - serializer(m_max_absolute_rate); - serializer(m_status); - serializer(m_scaling_factor); - } - - private: - double m_strength; - double m_length; - double m_density_calibration; - double m_viscosity_calibration; - double m_critical_value; - double m_width_transition_region; - double m_max_viscosity_ratio; - int m_method_flow_scaling; - double m_max_absolute_rate; - ICDStatus m_status; - // scaling factor is the only one can not be gotten from deck directly, needs to be - // updated afterwards - double m_scaling_factor; -}; - -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/MSW/Valve.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/MSW/Valve.hpp deleted file mode 100644 index 5ae1852209..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/MSW/Valve.hpp +++ /dev/null @@ -1,109 +0,0 @@ -/* - Copyright 2019 Equinor. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef VALVE_HPP_HEADER_INCLUDED -#define VALVE_HPP_HEADER_INCLUDED - -#include -#include -#include -#include - -#include - - -namespace Opm { - - class DeckRecord; - class DeckKeyword; - class Segment; - - class Valve { - public: - - Valve(); - explicit Valve(const DeckRecord& record); - Valve(double conFlowCoeff, - double conCrossA, - double conMaxCrossA, - double pipeAddLength, - double pipeDiam, - double pipeRough, - double pipeCrossA, - ICDStatus stat); - - static Valve serializeObject(); - - // the function will return a map - // [ - // "WELL1" : [, ...] - // .... - static std::map > > fromWSEGVALV(const DeckKeyword& keyword); - - // parameters for constriction pressure loss - double conFlowCoefficient() const; - double conCrossArea() const; - double conMaxCrossArea() const; - double pipeDiameter() const; - double pipeRoughness() const; - double pipeCrossArea() const; - - // parameters for pressure loss along the pipe - double pipeAdditionalLength() const; - - // Status: OPEN or SHUT - ICDStatus status() const; - - void setConMaxCrossArea(const double area); - - void setPipeAdditionalLength(const double length); - void setPipeDiameter(const double dia); - void setPipeRoughness(const double rou); - void setPipeCrossArea(const double area); - - bool operator==(const Valve& data) const; - - template - void serializeOp(Serializer& serializer) - { - serializer(m_con_flow_coeff); - serializer(m_con_cross_area); - serializer(m_con_max_cross_area); - serializer(m_pipe_additional_length); - serializer(m_pipe_diameter); - serializer(m_pipe_roughness); - serializer(m_pipe_cross_area); - serializer(m_status); - } - - private: - double m_con_flow_coeff; - double m_con_cross_area; - double m_con_max_cross_area; - - double m_pipe_additional_length; - double m_pipe_diameter; - double m_pipe_roughness; - double m_pipe_cross_area; - ICDStatus m_status; - }; - -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/MSW/WellSegments.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/MSW/WellSegments.hpp deleted file mode 100644 index ff075ddc55..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/MSW/WellSegments.hpp +++ /dev/null @@ -1,133 +0,0 @@ -/* - Copyright 2015 SINTEF ICT, Applied Mathematics. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef SEGMENTSET_HPP_HEADER_INCLUDED -#define SEGMENTSET_HPP_HEADER_INCLUDED - -#include -#include - -#include - -namespace Opm { - class SpiralICD; - class Valve; -} - -namespace Opm { - - class DeckKeyword; - - class WellSegments { - public: - enum class LengthDepth{ - INC = 0, - ABS = 1 - }; - static const std::string LengthDepthToString(LengthDepth enumValue); - static LengthDepth LengthDepthFromString(const std::string& stringValue); - - - enum class CompPressureDrop { - HFA = 0, - HF_ = 1, - H__ = 2 - }; - static const std::string CompPressureDropToString(CompPressureDrop enumValue); - static CompPressureDrop CompPressureDropFromString(const std::string& stringValue); - - - enum class MultiPhaseModel { - HO = 0, - DF = 1 - }; - static const std::string MultiPhaseModelToString(MultiPhaseModel enumValue); - static MultiPhaseModel MultiPhaseModelFromString(const std::string& stringValue); - - - WellSegments() = default; - WellSegments(CompPressureDrop compDrop, - const std::vector& segments); - explicit WellSegments(const DeckKeyword& keyword); - - static WellSegments serializeObject(); - - std::size_t size() const; - double depthTopSegment() const; - double lengthTopSegment() const; - double volumeTopSegment() const; - - CompPressureDrop compPressureDrop() const; - - // mapping the segment number to the index in the vector of segments - int segmentNumberToIndex(const int segment_number) const; - - - - const Segment& getFromSegmentNumber(const int segment_number) const; - - const Segment& operator[](size_t idx) const; - void orderSegments(); - - bool operator==( const WellSegments& ) const; - bool operator!=( const WellSegments& ) const; - - double segmentLength(const int segment_number) const; - double segmentDepthChange(const int segment_number) const; - std::vector branchSegments(int branch) const; - - // it returns true if there is no error encountered during the update - bool updateWSEGSICD(const std::vector >& sicd_pairs); - - bool updateWSEGVALV(const std::vector >& valve_pairs); - const std::vector::const_iterator begin() const; - const std::vector::const_iterator end() const; - - template - void serializeOp(Serializer& serializer) - { - serializer(m_comp_pressure_drop); - serializer.vector(m_segments); - serializer(segment_number_to_index); - } - - private: - void processABS(); - void processINC(double depth_top, double length_top); - void process(LengthDepth length_depth, double depth_top, double length_top); - void addSegment(const Segment& new_segment); - void loadWELSEGS( const DeckKeyword& welsegsKeyword); - const Segment& topSegment() const; - - // components of the pressure drop to be included - CompPressureDrop m_comp_pressure_drop; - // There are X and Y cooridnate of the nodal point of the top segment - // Since they are not used for simulations and we are not supporting plotting, - // we are not handling them at the moment. - // There are other three properties for segment related to thermal conduction, - // while they are not supported by the keyword at the moment. - - std::vector< Segment > m_segments; - // the mapping from the segment number to the - // storage index in the vector - std::map segment_number_to_index; - }; -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/MSW/icd.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/MSW/icd.hpp deleted file mode 100644 index cca81a2b25..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/MSW/icd.hpp +++ /dev/null @@ -1,40 +0,0 @@ -/* - Copyright 2020 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - - -#ifndef OPM_ICD_HPP -#define OPM_ICD_HPP - -namespace Opm { - -enum class ICDStatus { - OPEN, - SHUT -}; - -template -T from_int(int int_status); - -template -int to_int(T status); - -} - - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/MSW/updatingConnectionsWithSegments.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/MSW/updatingConnectionsWithSegments.hpp deleted file mode 100644 index c9c4d6df52..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/MSW/updatingConnectionsWithSegments.hpp +++ /dev/null @@ -1,35 +0,0 @@ -/* - Copyright 2017 SINTEF Digital, Mathematics and Cybernetics. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef UPDATING_CONNECTIONS_WITH_SEGMENTS -#define UPDATING_CONNECTIONS_WITH_SEGMENTS - -#include - -#include -#include -#include - -namespace Opm { - WellConnections * newConnectionsWithSegments(const DeckKeyword& compsegs, const WellConnections& input_connections, - const WellSegments& segments, const EclipseGrid& grid, - const ParseContext& parseContext, ErrorGuard& errors); -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/MessageLimits.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/MessageLimits.hpp deleted file mode 100644 index 474d9d9bc0..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/MessageLimits.hpp +++ /dev/null @@ -1,158 +0,0 @@ -/* - Copyright 2016 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef OPM_MESSAGES_HPP -#define OPM_MESSAGES_HPP - -#include -#include - -namespace Opm { - - class TimeMap; - - struct MLimits { - int message_print_limit = ParserKeywords::MESSAGES::MESSAGE_PRINT_LIMIT::defaultValue; - int comment_print_limit = ParserKeywords::MESSAGES::COMMENT_PRINT_LIMIT::defaultValue; - int warning_print_limit = ParserKeywords::MESSAGES::WARNING_PRINT_LIMIT::defaultValue; - int problem_print_limit = ParserKeywords::MESSAGES::PROBLEM_PRINT_LIMIT::defaultValue; - int error_print_limit = ParserKeywords::MESSAGES::ERROR_PRINT_LIMIT::defaultValue; - int bug_print_limit = ParserKeywords::MESSAGES::BUG_PRINT_LIMIT::defaultValue; - int message_stop_limit = ParserKeywords::MESSAGES::MESSAGE_STOP_LIMIT::defaultValue; - int comment_stop_limit = ParserKeywords::MESSAGES::COMMENT_STOP_LIMIT::defaultValue; - int warning_stop_limit = ParserKeywords::MESSAGES::WARNING_STOP_LIMIT::defaultValue; - int problem_stop_limit = ParserKeywords::MESSAGES::PROBLEM_STOP_LIMIT::defaultValue; - int error_stop_limit = ParserKeywords::MESSAGES::ERROR_STOP_LIMIT::defaultValue; - int bug_stop_limit = ParserKeywords::MESSAGES::BUG_STOP_LIMIT::defaultValue; - - static MLimits serializeObject() - { - MLimits result; - result.message_print_limit = 1; - result.comment_print_limit = 2; - result.warning_print_limit = 3; - result.problem_print_limit = 4; - result.error_print_limit = 5; - result.bug_print_limit = 6; - result.message_stop_limit = 7; - result.comment_stop_limit = 8; - result.warning_stop_limit = 9; - result.problem_stop_limit = 10; - result.error_stop_limit = 11; - result.bug_stop_limit = 12; - - return result; - } - - bool operator==(const MLimits& other) const { - return ((this->message_print_limit == other.message_print_limit) && - (this->comment_print_limit == other.comment_print_limit) && - (this->warning_print_limit == other.warning_print_limit) && - (this->problem_print_limit == other.problem_print_limit) && - (this->error_print_limit == other.error_print_limit ) && - (this->bug_print_limit == other.bug_print_limit ) && - (this->message_stop_limit == other.message_stop_limit ) && - (this->comment_stop_limit == other.comment_stop_limit ) && - (this->warning_stop_limit == other.warning_stop_limit ) && - (this->problem_stop_limit == other.problem_stop_limit ) && - (this->error_stop_limit == other.error_stop_limit ) && - (this->bug_stop_limit == other.bug_stop_limit )); - } - - bool operator!=(const MLimits& other) const { - return !(*this == other); - } - - template - void serializeOp(Serializer& serializer) - { - serializer(message_print_limit); - serializer(comment_print_limit); - serializer(warning_print_limit); - serializer(problem_print_limit); - serializer(error_print_limit); - serializer(bug_print_limit); - serializer(message_stop_limit); - serializer(comment_stop_limit); - serializer(warning_stop_limit); - serializer(problem_stop_limit); - serializer(error_stop_limit); - serializer(bug_stop_limit); - } - }; - - - class MessageLimits { - public: - - - MessageLimits() = default; - /* - This constructor will create a new Messages object which is - a copy of the input argument, and then all items explicitly - set in the record are modified. - */ - - explicit MessageLimits( const TimeMap& ); - - static MessageLimits serializeObject(); - - ///Get all the value from MESSAGES keyword. - int getMessagePrintLimit(size_t timestep) const; - int getCommentPrintLimit(size_t timestep) const; - int getWarningPrintLimit(size_t timestep) const; - int getProblemPrintLimit(size_t timestep) const; - int getErrorPrintLimit(size_t timestep) const; - int getBugPrintLimit(size_t timestep) const; - void setMessagePrintLimit(size_t timestep, int value); - void setCommentPrintLimit(size_t timestep, int value); - void setWarningPrintLimit(size_t timestep, int value); - void setProblemPrintLimit(size_t timestep, int value); - void setErrorPrintLimit(size_t timestep, int value); - void setBugPrintLimit(size_t timestep, int value); - - int getMessageStopLimit(size_t timestep) const; - int getCommentStopLimit(size_t timestep) const; - int getWarningStopLimit(size_t timestep) const; - int getProblemStopLimit(size_t timestep) const; - int getErrorStopLimit(size_t timestep) const; - int getBugStopLimit(size_t timestep) const; - void setMessageStopLimit(size_t timestep, int value); - void setCommentStopLimit(size_t timestep, int value); - void setWarningStopLimit(size_t timestep, int value); - void setProblemStopLimit(size_t timestep, int value); - void setErrorStopLimit(size_t timestep, int value); - void setBugStopLimit(size_t timestep, int value); - - bool operator==(const MessageLimits& data) const; - - template - void serializeOp(Serializer& serializer) - { - limits.serializeOp(serializer); - } - - private: - void update(size_t timestep, const MLimits& value); - - DynamicState limits; - }; -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/OilVaporizationProperties.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/OilVaporizationProperties.hpp deleted file mode 100644 index 22373dbdbb..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/OilVaporizationProperties.hpp +++ /dev/null @@ -1,91 +0,0 @@ -/* - Copyright 2016 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ -#ifndef DRSDT_HPP -#define DRSDT_HPP - -#include -#include -#include - -namespace Opm -{ - /* - * The OilVaporizationProperties class - * This classe is used to store the values from {VAPPARS, DRSDT, DRVDT} - * The VAPPARS and {DRSDT, DRVDT} are mutal exclusive and will cancel previous settings of the other keywords. - * Ask for type first and the ask for the correct values for this type, asking for values not valid for the current type will throw a logic exception. - */ - class OilVaporizationProperties { - public: - enum class OilVaporization { - UNDEF = 0, - VAPPARS = 1, - DRDT = 2 // DRSDT or DRVDT - }; - - - OilVaporizationProperties(); - explicit OilVaporizationProperties(const size_t numPvtReginIdx); - - static OilVaporizationProperties serializeObject(); - - static void updateDRSDT(Opm::OilVaporizationProperties& ovp, const std::vector& maxDRSDT, const std::vector& option); - static void updateDRVDT(Opm::OilVaporizationProperties& ovp, const std::vector& maxDRVDT); - static void updateVAPPARS(Opm::OilVaporizationProperties& ovp, double vap1, double vap2); - - OilVaporization getType() const; - double getMaxDRSDT(const size_t pvtRegionIdx) const; - double getMaxDRVDT(const size_t pvtRegionIdx) const; - bool getOption(const size_t pvtRegionIdx) const; - bool drsdtActive() const; - bool drvdtActive() const; - bool defined() const; - size_t numPvtRegions() const {return m_maxDRSDT.size();} - - double vap1() const; - double vap2() const; - - /* - * if either argument was default constructed == will always be false - * and != will always be true - */ - bool operator==( const OilVaporizationProperties& ) const; - bool operator!=( const OilVaporizationProperties& ) const; - - template - void serializeOp(Serializer& serializer) - { - serializer(m_type); - serializer(m_vap1); - serializer(m_vap2); - serializer(m_maxDRSDT); - serializer(m_maxDRSDT_allCells); - serializer(m_maxDRVDT); - } - - private: - OilVaporization m_type = OilVaporization::UNDEF; - double m_vap1; - double m_vap2; - std::vector m_maxDRSDT; - std::vector m_maxDRSDT_allCells; - std::vector m_maxDRVDT; - }; -} -#endif // DRSDT_H diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/RFTConfig.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/RFTConfig.hpp deleted file mode 100644 index b83c0d6ec6..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/RFTConfig.hpp +++ /dev/null @@ -1,119 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ -#ifndef RFT_CONFIG_HPP -#define RFT_CONFIG_HPP - -#include -#include -#include -#include - -#include -#include -#include - -namespace Opm { - -class RFTConfig { -public: - enum class RFT { - YES = 1, - REPT = 2, - TIMESTEP = 3, - FOPN = 4, - NO = 5 - }; - static std::string RFT2String(RFT enumValue); - static RFT RFTFromString(const std::string &stringValue); - - enum class PLT { - YES = 1, - REPT = 2, - TIMESTEP = 3, - NO = 4 - }; - static std::string PLT2String(PLT enumValue); - static PLT PLTFromString( const std::string& stringValue); - - template - using ConfigMap = std::unordered_map< - std::string, DynamicState> - >; - - using WellOpenTimeMap = std::unordered_map; - - RFTConfig(); - explicit RFTConfig(const TimeMap& time_map); - - static RFTConfig serializeObject(); - - bool rft(const std::string& well, std::size_t report_step) const; - bool plt(const std::string& well, std::size_t report_step) const; - bool getWellOpenRFT(const std::string& well_name, std::size_t report_step) const; - void setWellOpenRFT(std::size_t report_step); - void setWellOpenRFT(const std::string& well_name); - - bool active(std::size_t report_step) const; - std::size_t firstRFTOutput() const { return this->first_rft_event; } - void updateRFT(const std::string& well, std::size_t report_step, RFT value); - void updatePLT(const std::string& well, std::size_t report_step, PLT value); - void addWellOpen(const std::string& well, std::size_t report_step); - - const TimeMap& timeMap() const; - - bool operator==(const RFTConfig& data) const; - - template - void serializeOp(Serializer& serializer) - { - tm.serializeOp(serializer); - serializer(first_rft_event); - serializer(well_open_rft_time); - serializer(well_open_rft_name); - serializer(well_open); - serializer.template map,false>(rft_config); - serializer.template map,false>(plt_config); - } - -private: - TimeMap tm; - std::size_t first_rft_event; - std::pair well_open_rft_time; - WellOpenTimeMap well_open_rft_name; - WellOpenTimeMap well_open; - ConfigMap rft_config; - ConfigMap plt_config; - - bool outputRftAtWellopen(WellOpenTimeMap::const_iterator well, const std::size_t report_step) const; - std::size_t firstWellopenStepNotBefore(const std::size_t report_step) const; - void updateFirstIfNotShut(const std::string& well_name, const std::size_t report_step); - void updateFirst(const std::size_t report_step); - - void setWellOpenRFT(const std::string& well_name, const std::size_t report_step); - - template - void updateConfig(const std::string& well_name, - const std::size_t report_step, - const Value value, - ConfigMap& cfgmap); -}; - -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/RPTConfig.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/RPTConfig.hpp deleted file mode 100644 index a95718a0fe..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/RPTConfig.hpp +++ /dev/null @@ -1,43 +0,0 @@ -/* - Copyright 2020 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ -#ifndef RPT_CONFIG_HPP -#define RPT_CONFIG_HPP - -#include -#include - -#include - -namespace Opm { - -class RPTConfig: public std::unordered_map { -#if __cplusplus <= 201703L -public: - bool contains(const std::string&) const; -#endif - -public: - using std::unordered_map::unordered_map; - - RPTConfig(const DeckKeyword&); -}; - -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Schedule.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Schedule.hpp deleted file mode 100644 index 0d6658be16..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Schedule.hpp +++ /dev/null @@ -1,484 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ -#ifndef SCHEDULE_HPP -#define SCHEDULE_HPP - -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - - -/* - The DynamicState> pattern: The quantities in the Schedule - section like e.g. wellrates and completion properties are typically - characterized by the following behaviour: - - 1. They can be updated repeatedly at arbitrary points in the Schedule - section. - - 2. The value set at one timestep will apply until is explicitly set again at - a later timestep. - - These properties are typically stored in a DynamicState container; the - DynamicState class is a container which implements this semantics: - - 1. It is legitimate to ask for an out-of-range value, you will then get the - last value which has been set. - - 2. When assigning an out-of-bounds value the container will append the - currently set value until correct length has been reached, and then the - new value will be assigned. - - 3. The DynamicState has an awareness of the total length of the time - axis, trying to access values beyound that is illegal. - - For many of the non-trival objects like eg Well and Group the DynamicState<> - contains a shared pointer to an underlying object, that way the fill operation - when the vector is resized is quite fast. The following pattern is quite - common for the Schedule implementation: - - - // Create a new well object. - std::shared_ptr new_well = this->getWell( well_name, time_step ); - - // Update the new well object with new settings from the deck, the - // updateXXXX() method will return true if the well object was actually - // updated: - if (new_well->updateRate( new_rate )) - this->dynamic_state.update( time_step, new_well); - -*/ - -namespace Opm -{ - class Actions; - class Deck; - class DeckKeyword; - class DeckRecord; - class EclipseGrid; - class EclipseState; - class FieldPropsManager; - class Python; - class Runspec; - class RPTConfig; - class SCHEDULESection; - class SummaryState; - class TimeMap; - class UnitSystem; - class ErrorGuard; - class WListManager; - class UDQConfig; - class UDQActive; - - class Schedule { - public: - using WellMap = OrderedMap>>; - using GroupMap = OrderedMap>>; - using VFPProdMap = std::map>>; - using VFPInjMap = std::map>>; - - Schedule() = default; - explicit Schedule(std::shared_ptr) {} - Schedule(const Deck& deck, - const EclipseGrid& grid, - const FieldPropsManager& fp, - const Runspec &runspec, - const ParseContext& parseContext, - ErrorGuard& errors, - std::shared_ptr python, - const RestartIO::RstState* rst = nullptr); - - template - Schedule(const Deck& deck, - const EclipseGrid& grid, - const FieldPropsManager& fp, - const Runspec &runspec, - const ParseContext& parseContext, - T&& errors, - std::shared_ptr python, - const RestartIO::RstState* rst = nullptr); - - Schedule(const Deck& deck, - const EclipseGrid& grid, - const FieldPropsManager& fp, - const Runspec &runspec, - std::shared_ptr python, - const RestartIO::RstState* rst = nullptr); - - Schedule(const Deck& deck, - const EclipseState& es, - const ParseContext& parseContext, - ErrorGuard& errors, - std::shared_ptr python, - const RestartIO::RstState* rst = nullptr); - - template - Schedule(const Deck& deck, - const EclipseState& es, - const ParseContext& parseContext, - T&& errors, - std::shared_ptr python, - const RestartIO::RstState* rst = nullptr); - - Schedule(const Deck& deck, - const EclipseState& es, - std::shared_ptr python, - const RestartIO::RstState* rst = nullptr); - - // The constructor *without* the Python arg should really only be used from Python itself - Schedule(const Deck& deck, - const EclipseState& es, - const RestartIO::RstState* rst = nullptr); - - static Schedule serializeObject(); - - /* - * If the input deck does not specify a start time, Eclipse's 1. Jan - * 1983 is defaulted - */ - time_t getStartTime() const; - time_t posixStartTime() const; - time_t posixEndTime() const; - time_t simTime(size_t timeStep) const; - double seconds(size_t timeStep) const; - double stepLength(size_t timeStep) const; - std::optional exitStatus() const; - - const TimeMap& getTimeMap() const; - - size_t numWells() const; - size_t numWells(size_t timestep) const; - bool hasWell(const std::string& wellName) const; - bool hasWell(const std::string& wellName, std::size_t timeStep) const; - - std::vector wellNames(const std::string& pattern, size_t timeStep, const std::vector& matching_wells = {}) const; - std::vector wellNames(const std::string& pattern) const; - std::vector wellNames(size_t timeStep) const; - std::vector wellNames() const; - - std::vector groupNames(const std::string& pattern, size_t timeStep) const; - std::vector groupNames(size_t timeStep) const; - std::vector groupNames(const std::string& pattern) const; - std::vector groupNames() const; - - void updateWell(std::shared_ptr well, size_t reportStep); - std::vector changed_wells(size_t reportStep) const; - const Well& getWell(const std::string& wellName, size_t timeStep) const; - const Well& getWellatEnd(const std::string& well_name) const; - std::vector getWells(size_t timeStep) const; - std::vector getWellsatEnd() const; - void shut_well(const std::string& well_name, std::size_t report_step); - void stop_well(const std::string& well_name, std::size_t report_step); - void open_well(const std::string& well_name, std::size_t report_step); - - std::vector getChildGroups2(const std::string& group_name, size_t timeStep) const; - std::vector getChildWells2(const std::string& group_name, size_t timeStep) const; - const OilVaporizationProperties& getOilVaporizationProperties(size_t timestep) const; - const Well::ProducerCMode& getGlobalWhistctlMmode(size_t timestep) const; - - const UDQActive& udqActive(size_t timeStep) const; - const WellTestConfig& wtestConfig(size_t timestep) const; - const GConSale& gConSale(size_t timestep) const; - const GConSump& gConSump(size_t timestep) const; - const WListManager& getWListManager(size_t timeStep) const; - const UDQConfig& getUDQConfig(size_t timeStep) const; - const Action::Actions& actions(std::size_t timeStep) const; - void evalAction(const SummaryState& summary_state, size_t timeStep); - - const RPTConfig& report_config(std::size_t timeStep) const; - - GTNode groupTree(std::size_t report_step) const; - GTNode groupTree(const std::string& root_node, std::size_t report_step) const; - size_t numGroups() const; - size_t numGroups(size_t timeStep) const; - bool hasGroup(const std::string& groupName) const; - bool hasGroup(const std::string& groupName, std::size_t timeStep) const; - const Group& getGroup(const std::string& groupName, size_t timeStep) const; - - const Tuning& getTuning(size_t timeStep) const; - const DynamicState& getTuning() const; - const MessageLimits& getMessageLimits() const; - void invalidNamePattern (const std::string& namePattern, std::size_t report_step, const ParseContext& parseContext, ErrorGuard& errors, const DeckKeyword& keyword) const; - const GuideRateConfig& guideRateConfig(size_t timeStep) const; - - const RFTConfig& rftConfig() const; - const Events& getEvents() const; - const Events& getWellGroupEvents(const std::string& wellGroup) const; - bool hasWellGroupEvent(const std::string& wellGroup, uint64_t event_mask, size_t reportStep) const; - const Deck& getModifierDeck(size_t timeStep) const; - bool hasOilVaporizationProperties() const; - const VFPProdTable& getVFPProdTable(int table_id, size_t timeStep) const; - const VFPInjTable& getVFPInjTable(int table_id, size_t timeStep) const; - std::map > getVFPProdTables(size_t timeStep) const; - std::map > getVFPInjTables(size_t timeStep) const; - /* - Will remove all completions which are connected to cell which is not - active. Will scan through all wells and all timesteps. - */ - void filterConnections(const ActiveGridCells& grid); - size_t size() const; - const RestartConfig& restart() const; - RestartConfig& restart(); - - void applyAction(size_t reportStep, const Action::ActionX& action, const Action::Result& result); - int getNupcol(size_t reportStep) const; - - bool operator==(const Schedule& data) const; - std::shared_ptr python() const; - - /* - The cmp() function compares two schedule instances in a context aware - manner. Floating point numbers are compared with a tolerance. The - purpose of this comparison function is to implement regression tests - for the schedule instances created by loading a restart file. - */ - static bool cmp(const Schedule& sched1, const Schedule& sched2, std::size_t report_step); - - template - void serializeOp(Serializer& serializer) - { - m_timeMap.serializeOp(serializer); - auto splitWells = splitDynMap(wells_static); - serializer.vector(splitWells.first); - serializer(splitWells.second); - auto splitGroups = splitDynMap(groups); - serializer.vector(splitGroups.first); - serializer(splitGroups.second); - m_oilvaporizationproperties.serializeOp(serializer); - m_events.serializeOp(serializer); - m_modifierDeck.serializeOp(serializer); - m_tuning.serializeOp(serializer); - m_messageLimits.serializeOp(serializer); - m_runspec.serializeOp(serializer); - auto splitvfpprod = splitDynMap(vfpprod_tables); - serializer.vector(splitvfpprod.first); - serializer(splitvfpprod.second); - auto splitvfpinj = splitDynMap(vfpinj_tables); - serializer.vector(splitvfpinj.first); - serializer(splitvfpinj.second); - wtest_config.serializeOp(serializer); - wlist_manager.serializeOp(serializer); - udq_config.serializeOp(serializer); - udq_active.serializeOp(serializer); - guide_rate_config.serializeOp(serializer); - gconsale.serializeOp(serializer); - gconsump.serializeOp(serializer); - global_whistctl_mode.template serializeOp(serializer); - m_actions.serializeOp(serializer); - rft_config.serializeOp(serializer); - m_nupcol.template serializeOp(serializer); - restart_config.serializeOp(serializer); - serializer.map(wellgroup_events); - if (!serializer.isSerializing()) { - reconstructDynMap(splitWells.first, splitWells.second, wells_static); - reconstructDynMap(splitGroups.first, splitGroups.second, groups); - reconstructDynMap(splitvfpprod.first, splitvfpprod.second, vfpprod_tables); - reconstructDynMap(splitvfpinj.first, splitvfpinj.second, vfpinj_tables); - } - } - - private: - template using Map2 = std::map; - std::shared_ptr python_handle; - TimeMap m_timeMap; - WellMap wells_static; - GroupMap groups; - DynamicState< OilVaporizationProperties > m_oilvaporizationproperties; - Events m_events; - DynamicVector< Deck > m_modifierDeck; - DynamicState m_tuning; - MessageLimits m_messageLimits; - Runspec m_runspec; - VFPProdMap vfpprod_tables; - VFPInjMap vfpinj_tables; - DynamicState> wtest_config; - DynamicState> wlist_manager; - DynamicState> udq_config; - DynamicState> udq_active; - DynamicState> guide_rate_config; - DynamicState> gconsale; - DynamicState> gconsump; - DynamicState global_whistctl_mode; - DynamicState> m_actions; - RFTConfig rft_config; - DynamicState m_nupcol; - RestartConfig restart_config; - std::optional exit_status; - - std::map wellgroup_events; - void load_rst(const RestartIO::RstState& rst, - const EclipseGrid& grid, - const FieldPropsManager& fp, - const UnitSystem& unit_system); - void addWell(Well well, size_t report_step); - void addWell(const std::string& wellName, - const std::string& group, - int headI, - int headJ, - Phase preferredPhase, - double refDepth, - double drainageRadius, - bool allowCrossFlow, - bool automaticShutIn, - int pvt_table, - Well::GasInflowEquation gas_inflow, - size_t timeStep, - Connection::Order wellConnectionOrder, - const UnitSystem& unit_system); - - DynamicState> rpt_config; - GTNode groupTree(const std::string& root_node, std::size_t report_step, std::size_t level, const std::optional& parent_name) const; - void updateGroup(std::shared_ptr group, size_t reportStep); - bool checkGroups(const ParseContext& parseContext, ErrorGuard& errors); - void updateUDQActive( std::size_t timeStep, std::shared_ptr udq ); - bool updateWellStatus( const std::string& well, size_t reportStep , Well::Status status, bool update_connections); - void addWellToGroup( const std::string& group_name, const std::string& well_name , size_t timeStep); - void iterateScheduleSection(std::shared_ptr python, const std::string& input_path, const ParseContext& parseContext , ErrorGuard& errors, const SCHEDULESection& , const EclipseGrid& grid, - const FieldPropsManager& fp); - void addACTIONX(const Action::ActionX& action, std::size_t currentStep); - void addGroupToGroup( const std::string& parent_group, const std::string& child_group, size_t timeStep); - void addGroupToGroup( const std::string& parent_group, const Group& child_group, size_t timeStep); - void addGroup(const std::string& groupName , size_t timeStep, const UnitSystem& unit_system); - void addWell(const std::string& wellName, const DeckRecord& record, size_t timeStep, Connection::Order connection_order, const UnitSystem& unit_system); - void handleEXIT(const DeckKeyword& keyword , size_t report_step); - void handleUDQ(const DeckKeyword& keyword, size_t currentStep); - void handleWLIST(const DeckKeyword& keyword, size_t currentStep); - void handleCOMPORD(const ParseContext& parseContext, ErrorGuard& errors, const DeckKeyword& compordKeyword, size_t currentStep); - void handleWELSPECS( const SCHEDULESection&, size_t, size_t , const UnitSystem& unit_system, const ParseContext& parseContext, ErrorGuard& errors); - void handleWCONHIST( const DeckKeyword& keyword, size_t currentStep, const ParseContext& parseContext, ErrorGuard& errors); - void handleWCONPROD( const DeckKeyword& keyword, size_t currentStep, const ParseContext& parseContext, ErrorGuard& errors); - void handleWGRUPCON( const DeckKeyword& keyword, size_t currentStep); - void handleCOMPDAT( const DeckKeyword& keyword, size_t currentStep, const EclipseGrid& grid, const FieldPropsManager& fp, const ParseContext& parseContext, ErrorGuard& errors); - void handleCOMPLUMP( const DeckKeyword& keyword, size_t currentStep ); - void handleWELSEGS( const DeckKeyword& keyword, size_t currentStep); - void handleCOMPSEGS( const DeckKeyword& keyword, size_t currentStep, const EclipseGrid& grid, const ParseContext& parseContext, ErrorGuard& errors); - void handleWSEGSICD( const DeckKeyword& keyword, size_t currentStep); - // TODO: we should incorporate ParseContext and ErrorGuard, including the above keyword - void handleWSEGVALV( const DeckKeyword& keyword, size_t currentStep); - - void handleWCONINJE( const DeckKeyword& keyword, size_t currentStep, const ParseContext& parseContext, ErrorGuard& errors); - void handleWFOAM( const DeckKeyword& keyword, size_t currentStep, const ParseContext& parseContext, ErrorGuard& errors); - void handleWPOLYMER( const DeckKeyword& keyword, size_t currentStep, const ParseContext& parseContext, ErrorGuard& errors); - void handleWSALT( const DeckKeyword& keyword, size_t currentStep, const ParseContext& parseContext, ErrorGuard& errors); - void handleWSOLVENT( const DeckKeyword& keyword, size_t currentStep, const ParseContext& parseContext, ErrorGuard& errors); - void handleWTRACER( const DeckKeyword& keyword, size_t currentStep, const ParseContext& parseContext, ErrorGuard& errors); - void handleWTEMP( const DeckKeyword& keyword, size_t currentStep, const ParseContext& parseContext, ErrorGuard& errors); - void handleWPMITAB( const DeckKeyword& keyword, const size_t currentStep, const ParseContext& parseContext, ErrorGuard& errors); - void handleWSKPTAB( const DeckKeyword& keyword, const size_t currentStep, const ParseContext& parseContext, ErrorGuard& errors); - void handleWINJTEMP( const DeckKeyword& keyword, size_t currentStep, const ParseContext& parseContext, ErrorGuard& errors); - void handleWCONINJH(const DeckKeyword& keyword, size_t currentStep, const ParseContext& parseContext, ErrorGuard& errors); - void handleWELOPEN( const DeckKeyword& keyword, size_t currentStep, const ParseContext& parseContext, ErrorGuard& errors, const std::vector& matching_wells = {}); - void handleWELTARG( const SCHEDULESection&, const DeckKeyword& keyword, size_t currentStep, const ParseContext& parseContext, ErrorGuard& errors); - void handleGCONINJE( const DeckKeyword& keyword, size_t currentStep, const ParseContext& parseContext, ErrorGuard& errors); - void handleGCONPROD( const DeckKeyword& keyword, size_t currentStep, const ParseContext& parseContext, ErrorGuard& errors); - void handleGEFAC( const DeckKeyword& keyword, size_t currentStep, const ParseContext& parseContext, ErrorGuard& errors); - void handleGCONSALE( const DeckKeyword& keyword, size_t currentStep, const UnitSystem& unit_system); - void handleGCONSUMP( const DeckKeyword& keyword, size_t currentStep, const UnitSystem& unit_system); - void handleGUIDERAT( const DeckKeyword& keyword, size_t currentStep); - void handleLINCOM( const DeckKeyword& keyword, size_t currentStep); - void handleWEFAC( const DeckKeyword& keyword, size_t currentStep, const ParseContext& parseContext, ErrorGuard& errors); - - void handleTUNING( const DeckKeyword& keyword, size_t currentStep); - void handlePYACTION( std::shared_ptr python, const std::string& input_path, const DeckKeyword& keyword, size_t currentStep); - void handleNUPCOL( const DeckKeyword& keyword, size_t currentStep); - void handleGRUPTREE( const DeckKeyword& keyword, size_t currentStep, const UnitSystem& unit_system, const ParseContext& parseContext, ErrorGuard& errors); - void handleGRUPNET( const DeckKeyword& keyword, size_t currentStep, const UnitSystem& unit_system); - void handleWRFT( const DeckKeyword& keyword, size_t currentStep); - void handleWTEST( const DeckKeyword& keyword, size_t currentStep, const ParseContext& parseContext, ErrorGuard& errors); - void handleWRFTPLT( const DeckKeyword& keyword, size_t currentStep); - void handleWPIMULT( const DeckKeyword& keyword, size_t currentStep); - void handleDRSDT( const DeckKeyword& keyword, size_t currentStep); - void handleDRVDT( const DeckKeyword& keyword, size_t currentStep); - void handleDRSDTR( const DeckKeyword& keyword, size_t currentStep); - void handleDRVDTR( const DeckKeyword& keyword, size_t currentStep); - void handleVAPPARS( const DeckKeyword& keyword, size_t currentStep); - void handleWECON( const DeckKeyword& keyword, size_t currentStep, const ParseContext& parseContext, ErrorGuard& errors); - void handleWHISTCTL(const DeckKeyword& keyword, std::size_t currentStep, const ParseContext& parseContext, ErrorGuard& errors); - void handleMESSAGES(const DeckKeyword& keyword, size_t currentStep); - void handleRPTSCHED(const DeckKeyword& keyword, size_t currentStep); - void handleVFPPROD(const DeckKeyword& vfpprodKeyword, const UnitSystem& unit_system, size_t currentStep); - void handleVFPINJ(const DeckKeyword& vfpprodKeyword, const UnitSystem& unit_system, size_t currentStep); - void checkUnhandledKeywords( const SCHEDULESection& ) const; - void checkIfAllConnectionsIsShut(size_t currentStep); - void handleKeyword(std::shared_ptr python, - const std::string& input_path, - size_t currentStep, - const SCHEDULESection& section, - size_t keywordIdx, - const DeckKeyword& keyword, - const ParseContext& parseContext, ErrorGuard& errors, - const EclipseGrid& grid, - const FieldPropsManager& fp, - const UnitSystem& unit_system, - std::vector >& rftProperties); - void addWellGroupEvent(const std::string& wellGroup, ScheduleEvents::Events event, size_t reportStep); - - template class Map, class Type, class Key> - std::pair, std::vector>>> - splitDynMap(const Map>& map) - { - // we have to pack the unique ptrs separately, and use an index map - // to allow reconstructing the appropriate structures. - std::vector>> asMap; - std::vector unique; - for (const auto& it : map) { - auto indices = it.second.split(unique); - asMap.push_back(std::make_pair(it.first, indices)); - } - - return std::make_pair(unique, asMap); - } - - template class Map, class Type, class Key> - void reconstructDynMap(const std::vector& unique, - const std::vector>>& asMap, - Map>& result) - { - for (const auto& it : asMap) { - result[it.first].reconstruct(unique, it.second); - } - } - }; -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/ScheduleTypes.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/ScheduleTypes.hpp deleted file mode 100644 index a75dd2c029..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/ScheduleTypes.hpp +++ /dev/null @@ -1,94 +0,0 @@ -/* - Copyright 2020 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef OPM_SCHEDULE_TYPES_HPP -#define OPM_SCHEDULE_TYPES_HPP - -#include -#include - -namespace Opm { - -enum class InjectorType { - WATER = 1, - GAS = 2, - OIL = 3, - MULTI = 4 -}; -const std::string InjectorType2String( InjectorType enumValue ); -InjectorType InjectorTypeFromString( const std::string& stringValue ); - - -class WellType { -public: - WellType(int ecl_wtype, int welspecs_phase); - WellType(bool producer, Phase welspecs_phase); - explicit WellType(Phase welspecs_phase); - WellType() = default; - - static WellType serializeObject(); - - bool injector() const; - bool producer() const; - bool update(InjectorType injector_type); - bool update(bool producer); - - static bool oil_injector(int ecl_wtype); - static bool gas_injector(int ecl_wtype); - static bool water_injector(int ecl_wtype); - static bool producer(int ecl_wtype); - - int ecl_wtype() const; - int ecl_phase() const; - Phase preferred_phase() const; - InjectorType injector_type() const; - bool operator==(const WellType& other) const; - - template - void serializeOp(Serializer& serializer) - { - serializer(m_producer); - serializer(injection_phase); - serializer(m_welspecs_phase); - } - -private: - bool m_producer; - /* - The injection_phase member is updated during the course of the simulation; - following each WCONINJE keyword the injection phase is updated. If an - producer is specified in the constructor the injection_phase is - initialzied to the welspecs phase. This is not wildly random - but the - injection_phase will not be meaningfull before an update(Phase) call has been - issued. - - The welspecs_phase is the preferred phase specified when the well is - defined with the WELSPECS keyword. This member is immutable, and it is only - used when initializing the well equations for a producer. - */ - - Phase injection_phase; - Phase m_welspecs_phase; -}; - -} - - - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/SummaryState.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/SummaryState.hpp deleted file mode 100644 index 90e93eb4f4..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/SummaryState.hpp +++ /dev/null @@ -1,118 +0,0 @@ -/* - Copyright 2016 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef SUMMARY_STATE_H -#define SUMMARY_STATE_H - -#include -#include -#include -#include -#include -#include - -namespace Opm{ - - -/* - The purpose of this class is to serve as a small container object for - computed, ready to use summary values. The values will typically be used by - the UDQ, WTEST and ACTIONX calculations. Observe that all value *have been - converted to the correct output units*. - - The main key used to access the content of this container is the eclipse style - colon separated string - i.e. 'WWCT:OPX' to get the watercut in well 'OPX'. - The main usage of the SummaryState class is a temporary holding ground while - assembling data for the summary output, but it is also used as a context - object when evaulating the condition in ACTIONX keywords. For that reason some - of the data is duplicated both in the general structure and a specialized - structure: - - SummaryState st; - - st.add_well_var("OPX", "WWCT", 0.75); - st.add("WGOR:OPY", 120); - - // The WWCT:OPX key has been added with the specialized add_well_var() - // method and this data is available both with the general - // st.has("WWCT:OPX") and the specialized st.has_well_var("OPX", "WWCT"); - st.has("WWCT:OPX") => True - st.has_well_var("OPX", "WWCT") => True - - - // The WGOR:OPY key is added with the general add("WGOR:OPY") and is *not* - // accessible through the specialized st.has_well_var("OPY", "WGOR"). - st.has("WGOR:OPY") => True - st.has_well_var("OPY", "WGOR") => False -*/ - -class SummaryState { -public: - typedef std::unordered_map::const_iterator const_iterator; - explicit SummaryState(std::chrono::system_clock::time_point sim_start_arg); - - /* - The set() function has to be retained temporarily to support updating of - cumulatives from restart files. - */ - void set(const std::string& key, double value); - - bool has(const std::string& key) const; - bool has_well_var(const std::string& well, const std::string& var) const; - bool has_group_var(const std::string& group, const std::string& var) const; - - void update(const std::string& key, double value); - void update_well_var(const std::string& well, const std::string& var, double value); - void update_group_var(const std::string& group, const std::string& var, double value); - void update_elapsed(double delta); - - double get(const std::string&) const; - double get_elapsed() const; - double get_well_var(const std::string& well, const std::string& var) const; - double get_group_var(const std::string& group, const std::string& var) const; - - std::vector wells() const; - std::vector wells(const std::string& var) const; - std::vector groups() const; - std::vector groups(const std::string& var) const; - std::vector serialize() const; - void deserialize(const std::vector& buffer); - const_iterator begin() const; - const_iterator end() const; - std::size_t num_wells() const; - std::size_t size() const; -private: - std::chrono::system_clock::time_point sim_start; - double elapsed = 0; - std::unordered_map values; - - // The first key is the variable and the second key is the well. - std::unordered_map> well_values; - std::unordered_set m_wells; - - // The first key is the variable and the second key is the group. - std::unordered_map> group_values; - std::unordered_set m_groups; -}; - - -std::ostream& operator<<(std::ostream& stream, const SummaryState& st); - -} -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/TimeMap.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/TimeMap.hpp deleted file mode 100644 index c4a8469c9e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/TimeMap.hpp +++ /dev/null @@ -1,130 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - - -#ifndef TIMEMAP_HPP_ -#define TIMEMAP_HPP_ - -#include - -#include -#include -#include -#include -#include - -#include - -namespace Opm { - - class Deck; - class DeckKeyword; - class DeckRecord; - - class TimeMap { - public: - TimeMap() = default; - explicit TimeMap(const Deck& deck, const std::pair& restart = std::make_pair(std::time_t{0}, std::size_t{0})); - explicit TimeMap(const std::vector& time_points); - - static TimeMap serializeObject(); - - size_t size() const; - size_t last() const; - size_t numTimesteps() const; - double getTotalTime() const; - double seconds(size_t timeStep) const; - std::size_t restart_offset() const; - - std::time_t operator[] (size_t index) const; - /// Return the date and time where a given time step starts. - std::time_t getStartTime(size_t tStepIdx) const; - std::time_t getEndTime() const; - bool skiprest() const; - /// Return the period of time in seconds which passed between the start of the simulation and a given point in time. - double getTimePassedUntil(size_t tLevelIdx) const; - /// Return the length of a given time step in seconds. - double getTimeStepLength(size_t tStepIdx) const; - - const std::vector& timeList() const; - bool operator==(const TimeMap& data) const; - - /// Return true if the given timestep is the first one of a new month or year, or if frequency > 1, - /// return true if the step is the first of each n-month or n-month period, starting from start_timestep - 1. - bool isTimestepInFirstOfMonthsYearsSequence(size_t timestep, bool years = true, size_t start_timestep = 1, size_t frequency = 1) const; - - static std::time_t timeFromEclipse(const DeckRecord &dateRecord); - - static std::time_t forward(std::time_t t0, int64_t hours, int64_t minutes, int64_t seconds); - static std::time_t forward(std::time_t t0, int64_t seconds); - static std::time_t mkdate(int year, int month, int day); - static std::time_t mkdatetime(int year, int month, int day, int hour, int minute, int second); - static const std::map& eclipseMonthIndices(); - - template - void serializeOp(Serializer& serializer) - { - serializer(m_timeList); - serializer.vector(m_first_timestep_years); - serializer.vector(m_first_timestep_months); - serializer(m_skiprest); - serializer(m_restart_offset); - } - - private: - struct StepData - { - size_t stepnumber; - TimeStampUTC timestamp; - - bool operator==(const StepData& data) const - { - return stepnumber == data.stepnumber && - timestamp == data.timestamp; - } - - template - void serializeOp(Serializer& serializer) - { - serializer(stepnumber); - timestamp.serializeOp(serializer); - } - }; - - bool isTimestepInFreqSequence (size_t timestep, size_t start_timestep, size_t frequency, bool years) const; - size_t closest(const std::vector & vec, size_t value) const; - void addTStep(int64_t step); - void addTime(std::time_t newTime); - void addFromTSTEPKeyword( const DeckKeyword& TSTEPKeyword ); - void init_start(std::time_t start_time); - - std::vector m_timeList; - std::vector m_first_timestep_years; // A list of the first timestep of every year - std::vector m_first_timestep_months; // A list of the first timestep of every month - bool m_skiprest = false; - std::size_t m_restart_offset = 0; - }; - -std::ostream& operator<<(std::ostream& stream, const TimeMap& tm); - -} - - - -#endif /* TIMEMAP_HPP_ */ diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Tuning.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Tuning.hpp deleted file mode 100644 index e39a89ffc0..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Tuning.hpp +++ /dev/null @@ -1,206 +0,0 @@ -/* - Copyright 2015 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#ifndef OPM_TUNING_HPP -#define OPM_TUNING_HPP - -#include -#include - -namespace Opm { - struct Tuning { - using TuningKw = ParserKeywords::TUNING; - - static Tuning serializeObject() - { - Tuning result; - result.TSINIT = 1.0; - result.TSMAXZ = 2.0; - result.TSMINZ = 3.0; - result.TSMCHP = 4.0; - result.TSFMAX = 5.0; - result.TSFMIN = 6.0; - result.TFDIFF = 7.0; - result.TSFCNV = 8.0; - result.THRUPT = 9.0; - result.TMAXWC = 10.0; - result.TMAXWC_has_value = true; - - result.TRGTTE = 11.0; - result.TRGCNV = 12.0; - result.TRGMBE = 13.0; - result.TRGLCV = 14.0; - result.XXXTTE = 15.0; - result.XXXCNV = 16.0; - result.XXXMBE = 17.0; - result.XXXLCV = 18.0; - result.XXXWFL = 19.0; - result.TRGFIP = 20.0; - result.TRGSFT = 21.0; - result.TRGSFT_has_value = true; - result.THIONX = 22.0; - result.TRWGHT = 23.0; - - result.NEWTMX = 24; - result.NEWTMN = 25; - result.LITMAX = 26; - result.LITMIN = 27; - result.MXWSIT = 28; - result.MXWPIT = 29; - result.DDPLIM = 30.0; - result.DDSLIM = 31.0; - result.TRGDPR = 32.0; - result.XXXDPR = 33.0; - result.XXXDPR_has_value = true; - - return result; - } - - // Record1 - double TSINIT = TuningKw::TSINIT::defaultValue * Metric::Time; - double TSMAXZ = TuningKw::TSMAXZ::defaultValue * Metric::Time; - double TSMINZ = TuningKw::TSMINZ::defaultValue * Metric::Time; - double TSMCHP = TuningKw::TSMCHP::defaultValue * Metric::Time; - double TSFMAX = TuningKw::TSFMAX::defaultValue; - double TSFMIN = TuningKw::TSFMIN::defaultValue; - double TFDIFF = TuningKw::TFDIFF::defaultValue; - double TSFCNV = TuningKw::TSFCNV::defaultValue; - double THRUPT = TuningKw::THRUPT::defaultValue; - double TMAXWC = 0.0; - bool TMAXWC_has_value = false; - - // Record 2 - double TRGTTE = TuningKw::TRGTTE::defaultValue; - double TRGCNV = TuningKw::TRGCNV::defaultValue; - double TRGMBE = TuningKw::TRGMBE::defaultValue; - double TRGLCV = TuningKw::TRGLCV::defaultValue; - double XXXTTE = TuningKw::XXXTTE::defaultValue; - double XXXCNV = TuningKw::XXXCNV::defaultValue; - double XXXMBE = TuningKw::XXXMBE::defaultValue; - double XXXLCV = TuningKw::XXXLCV::defaultValue; - double XXXWFL = TuningKw::XXXWFL::defaultValue; - double TRGFIP = TuningKw::TRGFIP::defaultValue; - double TRGSFT = 0.0; - bool TRGSFT_has_value = false; - double THIONX = TuningKw::THIONX::defaultValue; - double TRWGHT = TuningKw::TRWGHT::defaultValue; - - // Record 3 - int NEWTMX = TuningKw::NEWTMX::defaultValue; - int NEWTMN = TuningKw::NEWTMN::defaultValue; - int LITMAX = TuningKw::LITMAX::defaultValue; - int LITMIN = TuningKw::LITMIN::defaultValue; - int MXWSIT = TuningKw::MXWSIT::defaultValue; - int MXWPIT = TuningKw::MXWPIT::defaultValue; - double DDPLIM = TuningKw::DDPLIM::defaultValue * Metric::Pressure; - double DDSLIM = TuningKw::DDSLIM::defaultValue; - double TRGDPR = TuningKw::TRGDPR::defaultValue * Metric::Pressure; - double XXXDPR = 0.0 * Metric::Pressure; - bool XXXDPR_has_value = false; - - bool operator==(const Tuning& data) const { - return TSINIT == data.TSINIT && - TSMAXZ == data.TSMAXZ && - TSMINZ == data.TSMINZ && - TSMCHP == data.TSMCHP && - TSFMAX == data.TSFMAX && - TSFMIN == data.TSFMIN && - TSFCNV == data.TSFCNV && - TFDIFF == data.TFDIFF && - THRUPT == data.THRUPT && - TMAXWC == data.TMAXWC && - TMAXWC_has_value == data.TMAXWC_has_value && - TRGTTE == data.TRGTTE && - TRGCNV == data.TRGCNV && - TRGMBE == data.TRGMBE && - TRGLCV == data.TRGLCV && - XXXTTE == data.XXXTTE && - XXXCNV == data.XXXCNV && - XXXMBE == data.XXXMBE && - XXXLCV == data.XXXLCV && - XXXWFL == data.XXXWFL && - TRGFIP == data.TRGFIP && - TRGSFT == data.TRGSFT && - TRGSFT_has_value == data.TRGSFT_has_value && - THIONX == data.THIONX && - TRWGHT == data.TRWGHT && - NEWTMX == data.NEWTMX && - NEWTMN == data.NEWTMN && - LITMAX == data.LITMAX && - LITMIN == data.LITMIN && - MXWSIT == data.MXWSIT && - MXWPIT == data.MXWPIT && - DDPLIM == data.DDPLIM && - DDSLIM == data.DDSLIM && - TRGDPR == data.TRGDPR && - XXXDPR == data.XXXDPR && - XXXDPR_has_value == data.XXXDPR_has_value; - } - - bool operator !=(const Tuning& data) const { - return !(*this == data); - } - - template - void serializeOp(Serializer& serializer) - { - serializer(TSINIT); - serializer(TSMAXZ); - serializer(TSMINZ); - serializer(TSMCHP); - serializer(TSFMAX); - serializer(TSFMIN); - serializer(TFDIFF); - serializer(TSFCNV); - serializer(THRUPT); - serializer(TMAXWC); - serializer(TMAXWC_has_value); - - serializer(TRGTTE); - serializer(TRGCNV); - serializer(TRGMBE); - serializer(TRGLCV); - serializer(XXXTTE); - serializer(XXXCNV); - serializer(XXXMBE); - serializer(XXXLCV); - serializer(XXXWFL); - serializer(TRGFIP); - serializer(TRGSFT); - serializer(TRGSFT_has_value); - serializer(THIONX); - serializer(TRWGHT); - - serializer(NEWTMX); - serializer(NEWTMN); - serializer(LITMAX); - serializer(LITMIN); - serializer(MXWSIT); - serializer(MXWPIT); - serializer(DDPLIM); - serializer(DDSLIM); - serializer(TRGDPR); - serializer(XXXDPR); - serializer(XXXDPR_has_value); - } - }; - -} //namespace Opm - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQASTNode.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQASTNode.hpp deleted file mode 100644 index fea2da9839..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQASTNode.hpp +++ /dev/null @@ -1,86 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef UDQASTNODE_HPP -#define UDQASTNODE_HPP - -#include -#include -#include -#include - -#include -#include -#include - - - -namespace Opm { - -class UDQASTNode { -public: - UDQASTNode(); - explicit UDQASTNode(UDQTokenType type_arg); - explicit UDQASTNode(double scalar_value); - UDQASTNode(UDQTokenType type_arg, const std::string& func_name, const UDQASTNode& arg); - UDQASTNode(UDQTokenType type_arg, const std::string& func_name, const UDQASTNode& left, const UDQASTNode& right); - UDQASTNode(UDQTokenType type_arg, const std::string& func_name); - UDQASTNode(UDQTokenType type_arg, const std::string& string_value, const std::vector& selector); - - static UDQASTNode serializeObject(); - - UDQSet eval(UDQVarType eval_target, const UDQContext& context) const; - - bool valid() const; - UDQVarType var_type = UDQVarType::NONE; - std::set func_tokens() const; - void update_type(const UDQASTNode& arg); - void set_left(const UDQASTNode& arg); - void set_right(const UDQASTNode& arg); - UDQASTNode* get_left() const; - UDQASTNode* get_right() const; - - bool operator==(const UDQASTNode& data) const; - - template - void serializeOp(Serializer& serializer) - { - serializer(var_type); - serializer(type); - serializer(string_value); - serializer(selector); - serializer(scalar_value); - serializer(left); - serializer(right); - } - -private: - UDQTokenType type; - void func_tokens(std::set& tokens) const; - - std::string string_value; - std::vector selector; - double scalar_value; - std::shared_ptr left; - std::shared_ptr right; -}; - -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQActive.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQActive.hpp deleted file mode 100644 index a06cd743a1..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQActive.hpp +++ /dev/null @@ -1,166 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - - -#ifndef UDQ_USAGE_HPP -#define UDQ_USAGE_HPP - -#include -#include -#include -#include - -#include - -namespace Opm { - -class UDAValue; -class UDQConfig; -class UDQActive { -public: - - class Record{ - public: - Record() : - input_index(0), - control(UDAControl::WCONPROD_ORAT), - uad_code(0), - use_count(1) - {} - - Record(const std::string& udq_arg, std::size_t input_index_arg, std::size_t use_index_arg, const std::string& wgname_arg, UDAControl control_arg) : - udq(udq_arg), - input_index(input_index_arg), - use_index(use_index_arg), - wgname(wgname_arg), - control(control_arg), - uad_code(UDQ::uadCode(control_arg)), - use_count(1) - {} - - bool operator==(const Record& other) const { - if ((this->udq == other.udq) && - (this->input_index == other.input_index) && - (this->use_index == other.use_index) && - (this->wgname == other.wgname) && - (this->control == other.control) && - (this->uad_code == other.uad_code) && - (this->use_count == other.use_count)) - return true; - return false; - } - - bool operator!=(const Record& other) const { - return !(*this == other); - } - - template - void serializeOp(Serializer& serializer) - { - serializer(udq); - serializer(input_index); - serializer(use_index); - serializer(wgname); - serializer(control); - serializer(uad_code); - serializer(use_count); - } - - std::string udq; - std::size_t input_index; - std::size_t use_index = 0; - std::string wgname; - UDAControl control; - int uad_code; - std::size_t use_count; - }; - - class InputRecord { - public: - InputRecord() : - input_index(0), - control(UDAControl::WCONPROD_ORAT) - {} - - InputRecord(std::size_t input_index_arg, const std::string& udq_arg, const std::string& wgname_arg, UDAControl control_arg) : - input_index(input_index_arg), - udq(udq_arg), - wgname(wgname_arg), - control(control_arg) - {} - - bool operator==(const InputRecord& other) const { - return this->input_index == other.input_index && - this->udq == other.udq && - this->wgname == other.wgname && - this->control == other.control; - } - - template - void serializeOp(Serializer& serializer) - { - serializer(input_index); - serializer(udq); - serializer(wgname); - serializer(control); - } - - std::size_t input_index; - std::string udq; - std::string wgname; - UDAControl control; - }; - - static UDQActive serializeObject(); - - int update(const UDQConfig& udq_config, const UDAValue& uda, const std::string& wgname, UDAControl control); - std::size_t IUAD_size() const; - std::size_t IUAP_size() const; - explicit operator bool() const; - Record operator[](std::size_t index) const; - const std::vector& get_iuad() const; - std::vector get_iuap() const; - - bool operator==(const UDQActive& data) const; - - template - void serializeOp(Serializer& serializer) - { - serializer.vector(input_data); - serializer.vector(output_data); - serializer(udq_keys); - serializer(wg_keys); - } - -private: - std::string udq_hash(const std::string& udq, UDAControl control); - std::string wg_hash(const std::string& wgname, UDAControl control); - int add(const UDQConfig& udq_config, const std::string& udq, const std::string& wgname, UDAControl control); - int update_input(const UDQConfig& udq_config, const UDAValue& uda, const std::string& wgname, UDAControl control); - int drop(const std::string& wgname, UDAControl control); - - std::vector input_data; - std::vector mutable output_data; - std::unordered_map udq_keys; - std::unordered_map wg_keys; -}; - -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQAssign.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQAssign.hpp deleted file mode 100644 index 28317e579e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQAssign.hpp +++ /dev/null @@ -1,88 +0,0 @@ -/* - Copyright 2018 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - - -#ifndef UDQASSIGN_HPP_ -#define UDQASSIGN_HPP_ - -#include -#include - -#include -#include - -namespace Opm { - - -class UDQAssign{ -public: - - /* - If the same keyword is assigned several times the different assignment - records are assembled in one UDQAssign instance. This is an attempt to - support restart in a situation where a full UDQ ASSIGN statement can be - swapped with a UDQ DEFINE statement. - */ - struct AssignRecord { - std::vector selector; - double value; - - bool operator==(const AssignRecord& data) const { - return selector == data.selector && - value == data.value; - } - - template - void serializeOp(Serializer& serializer) - { - serializer(selector); - serializer(value); - } - }; - - UDQAssign(); - UDQAssign(const std::string& keyword, const std::vector& selector, double value); - - static UDQAssign serializeObject(); - - const std::string& keyword() const; - UDQVarType var_type() const; - void add_record(const std::vector& selector, double value); - UDQSet eval(const std::vector& wells) const; - - bool operator==(const UDQAssign& data) const; - - template - void serializeOp(Serializer& serializer) - { - serializer(m_keyword); - serializer(m_var_type); - serializer.vector(records); - } - -private: - std::string m_keyword; - UDQVarType m_var_type; - std::vector records; -}; -} - - - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQConfig.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQConfig.hpp deleted file mode 100644 index ed76b434ba..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQConfig.hpp +++ /dev/null @@ -1,118 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef UDQINPUT_HPP_ -#define UDQINPUT_HPP_ - -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include - - -namespace Opm { - - class DeckRecord; - class Deck; - class UDQConfig { - public: - UDQConfig() = default; - explicit UDQConfig(const Deck& deck); - explicit UDQConfig(const UDQParams& params); - - static UDQConfig serializeObject(); - - const std::string& unit(const std::string& key) const; - bool has_unit(const std::string& keyword) const; - bool has_keyword(const std::string& keyword) const; - void add_record(const DeckRecord& record); - - void add_unit(const std::string& keyword, const std::string& unit); - void add_assign(const std::string& quantity, const std::vector& selector, double value); - void add_define(const std::string& quantity, const std::vector& expression); - - std::vector definitions() const; - std::vector definitions(UDQVarType var_type) const; - std::vector input() const; - - // The size() method will return the number of active DEFINE and ASSIGN - // statements; this will correspond to the length of the vector returned - // from input(). - size_t size() const; - - const UDQInput operator[](const std::string& keyword) const; - - std::vector assignments() const; - std::vector assignments(UDQVarType var_type) const; - const UDQParams& params() const; - const UDQFunctionTable& function_table() const; - - bool operator==(const UDQConfig& config) const; - - template - void serializeOp(Serializer& serializer) - { - udq_params.serializeOp(serializer); - serializer.map(m_definitions); - serializer.map(m_assignments); - serializer(units); - input_index.serializeOp(serializer); - serializer.template map(type_count); - // The UDQFunction table is constant up to udq_params. - // So we can just construct a new instance here. - if (!serializer.isSerializing()) - udqft = UDQFunctionTable(udq_params); - } - - private: - void add_node(const std::string& quantity, UDQAction action); - - UDQParams udq_params; - UDQFunctionTable udqft; - - - /* - The choices of datastructures are strongly motivated by the - constraints imposed by the Eclipse formatted restart files; for - writing restart files it is essential to keep meticolous control over - the ordering of the keywords. In this class the ordering is mainly - maintained by the input_index map which keeps track of the insert - order of each keyword, and whether the keyword is currently DEFINE'ed - or ASSIGN'ed. - */ - std::unordered_map m_definitions; - std::unordered_map m_assignments; - std::unordered_map units; - - OrderedMap input_index; - std::map type_count; - }; -} - - - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQContext.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQContext.hpp deleted file mode 100644 index 35cf9a3d4b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQContext.hpp +++ /dev/null @@ -1,56 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - - -#ifndef UDQ_CONTEXT_HPP -#define UDQ_CONTEXT_HPP - -#include -#include -#include - - -#include - -namespace Opm { - class SummaryState; - class UDQFunctionTable; - - class UDQContext{ - public: - UDQContext(const UDQFunctionTable& udqft, const SummaryState& summary_state); - double get(const std::string& key) const; - bool has_well_var(const std::string& well, const std::string& var) const; - double get_well_var(const std::string& well, const std::string& var) const; - bool has_group_var(const std::string& group, const std::string& var) const; - double get_group_var(const std::string& group, const std::string& var) const; - void add(const std::string& key, double value); - const UDQFunctionTable& function_table() const; - std::vector wells() const; - std::vector groups() const; - private: - const UDQFunctionTable& udqft; - const SummaryState& summary_state; - std::unordered_map values; - }; -} - - - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQDefine.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQDefine.hpp deleted file mode 100644 index 3e9c22aeef..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQDefine.hpp +++ /dev/null @@ -1,94 +0,0 @@ -/* - Copyright 2018 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - - -#ifndef UDQ_DEFINE_HPP -#define UDQ_DEFINE_HPP - -#include -#include -#include - -#include -#include -#include -#include - -namespace Opm { - -class UDQASTNode; -class ParseContext; -class ErrorGuard; - -class UDQDefine{ -public: - UDQDefine(); - - UDQDefine(const UDQParams& udq_params, - const std::string& keyword, - const std::vector& deck_data); - - UDQDefine(const UDQParams& udq_params, - const std::string& keyword, - const std::vector& deck_data, - const ParseContext& parseContext, - ErrorGuard& errors); - - template - UDQDefine(const UDQParams& udq_params, - const std::string& keyword, - const std::vector& deck_data, - const ParseContext& parseContext, - T&& errors); - - UDQDefine(const std::string& keyword, - std::shared_ptr astPtr, - UDQVarType type, - const std::string& string_data); - - static UDQDefine serializeObject(); - - UDQSet eval(const UDQContext& context) const; - const std::string& keyword() const; - const std::string& input_string() const; - UDQVarType var_type() const; - std::set func_tokens() const; - - bool operator==(const UDQDefine& data) const; - - template - void serializeOp(Serializer& serializer) - { - serializer(m_keyword); - serializer(ast); - serializer(m_var_type); - serializer(string_data); - } - -private: - std::string m_keyword; - std::shared_ptr ast; - UDQVarType m_var_type; - std::string string_data; -}; -} - - - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQEnums.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQEnums.hpp deleted file mode 100644 index 45887544bf..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQEnums.hpp +++ /dev/null @@ -1,185 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - - -#ifndef UDQ_ENUMS_HPP -#define UDQ_ENUMS_HPP - -namespace Opm { - -/* - The UDQ variables can be of of many different types. In addition they can be - either scalars or vector sets. The arch example of a vector set is well - variables - in the expressions: - - UDQ - DEFINE WUBHP WBHP * 1.15 / - DEFINE WUORAT 1000 / - / - - we define two UDQ values 'WUBHP' and 'WUORAT'. Both of these UDQ values will - apply to all wells; the WUBHP vector will correspond to the normal BHP scaled - up 15%, the WUORAT has the scalar value 1000 for all the wells. The well sets - can be qualified with a wellname, if the wellname has a wildcard we will get a - well set, if the wellname is fully qualified we have a scalar: - - UDQ - DEFINE WUWCT WWCT 'OP*' / - DEFINE FUORAT WOPR 'OPX' * 100 / - / - - Here the UDQ WUCWT corresponds to the well WWCT for all wells matching the - name 'OP*', and it is undefined for the remaing wells. The UDQ FUORAT is a - scalar, given by the WOPR of well 'OPX' - multiplied by 100. - - There are clearly rules for how the different variable types can be combined - in expressions, and what will be resulting type from an expression - - unfortunately that is not yet very well implemented in the opm codebase. In - UDQParser.cpp there is a function static_type_check and in UDQDefine there is - a function dynamic_type_check - these functions try to verfiy that the type - conversions are legitimate, but currently they are woefully inadequate. -*/ - -enum class UDQVarType { - NONE = 0, - SCALAR = 1, - CONNECTION_VAR = 2, - FIELD_VAR = 3, - REGION_VAR = 4, - SEGMENT_VAR = 5, - AQUIFER_VAR = 6, - BLOCK_VAR = 7, - WELL_VAR = 8, - GROUP_VAR = 9 -}; - - - -enum class UDQTokenType{ - error = 0, - number = 1, - open_paren = 2, - close_paren = 3, - ecl_expr = 7, - // - binary_op_add = 8, - binary_op_sub = 9, - binary_op_div = 10, - binary_op_mul = 11, - binary_op_pow = 12, - binary_op_uadd = 13, - binary_op_umul = 14, - binary_op_umin = 15, - binary_op_umax = 16, - binary_cmp_eq = 17, - binary_cmp_ne = 18, - binary_cmp_le = 19, - binary_cmp_ge = 20, - binary_cmp_lt = 21, - binary_cmp_gt = 22, - // - elemental_func_randn = 23, - elemental_func_randu = 24, - elemental_func_rrandn = 25, - elemental_func_rrandu = 26, - elemental_func_abs = 27, - elemental_func_def = 28, - elemental_func_exp = 29, - elemental_func_idv = 30, - elemental_func_ln = 31, - elemental_func_log = 32, - elemental_func_nint = 33, - elemental_func_sorta = 34, - elemental_func_sortd = 35, - elemental_func_undef = 36, - // - scalar_func_sum = 37, - scalar_func_avea = 38, - scalar_func_aveg = 39, - scalar_func_aveh = 40, - scalar_func_max = 41, - scalar_func_min = 42, - scalar_func_norm1 = 43, - scalar_func_norm2 = 44, - scalar_func_normi = 45, - scalar_func_prod = 46, - // - table_lookup = 47, - // - end = 100 -}; - - -enum class UDQAction { - ASSIGN, - DEFINE, - UNITS, - UPDATE -}; - -enum class UDAControl { - WCONPROD_ORAT, - WCONPROD_GRAT, - WCONPROD_WRAT, - WCONPROD_LRAT, - WCONPROD_RESV, - WCONPROD_BHP, - WCONPROD_THP, - // - WCONINJE_RATE, - WCONINJE_RESV, - WCONINJE_BHP, - WCONINJE_THP, - // - GCONPROD_OIL_TARGET, - GCONPROD_WATER_TARGET, - GCONPROD_GAS_TARGET, - GCONPROD_LIQUID_TARGET -}; - - -enum class UDAKeyword { - WCONPROD, - WCONINJE, - GCONINJE, - GCONPROD -}; - - - -namespace UDQ { - - UDQVarType targetType(const std::string& keyword, const std::vector& selector); - UDQVarType targetType(const std::string& keyword); - UDQVarType varType(const std::string& keyword); - UDQVarType coerce(UDQVarType t1, UDQVarType t2); - UDQAction actionType(const std::string& action_string); - UDQTokenType funcType(const std::string& func_name); - bool binaryFunc(UDQTokenType token_type); - bool elementalUnaryFunc(UDQTokenType token_type); - bool scalarFunc(UDQTokenType token_type); - bool cmpFunc(UDQTokenType token_type); - - std::string typeName(UDQVarType var_type); - UDAKeyword keyword(UDAControl control); - int uadCode(UDAControl control); -} -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQExpression.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQExpression.hpp deleted file mode 100644 index 2d6a15914a..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQExpression.hpp +++ /dev/null @@ -1,50 +0,0 @@ -/* - Copyright 2018 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - - -#ifndef UDQ_EXPRESSION_HPP_ -#define UDQ_EXPRESSION_HPP_ - -#include - -#include -#include - - -namespace Opm { - - - class UDQExpression { - public: - UDQExpression(UDQAction action, const std::string& keyword, const std::vector& data); - explicit UDQExpression(const DeckRecord& expression); - const std::vector& tokens() const; - UDQAction action() const; - const std::string& keyword() const; - private: - UDQAction m_action; - std::string m_keyword; - UDQVarType m_var_type; - std::vector data; - }; -} - - - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQFunction.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQFunction.hpp deleted file mode 100644 index 5c68484ec0..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQFunction.hpp +++ /dev/null @@ -1,122 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef UDQFUNCTION_HPP -#define UDQFUNCTION_HPP - -#include -#include -#include -#include - -#include -#include - -namespace Opm { - - -class UDQFunction { -public: - UDQFunction() : func_type(UDQTokenType::error) {} - UDQFunction(const std::string& name); - UDQFunction(const std::string& name, UDQTokenType funcType); - virtual ~UDQFunction() = default; - const std::string& name() const; - UDQTokenType type() const; - bool operator==(const UDQFunction& data) const; - -private: - std::string m_name; - UDQTokenType func_type; -}; - -class UDQScalarFunction : public UDQFunction { -public: - UDQScalarFunction(const std::string&name, std::function f); - UDQSet eval(const UDQSet& arg) const; - - static UDQSet SUM(const UDQSet& arg); - static UDQSet AVEA(const UDQSet& arg); - static UDQSet AVEG(const UDQSet& arg); - static UDQSet AVEH(const UDQSet& arg); - static UDQSet MIN(const UDQSet& arg); - static UDQSet MAX(const UDQSet& arg); - static UDQSet NORM1(const UDQSet& arg); - static UDQSet NORM2(const UDQSet& arg); - static UDQSet NORMI(const UDQSet& arg); - static UDQSet PROD(const UDQSet& arg); - -private: - std::function func; -}; - - -class UDQUnaryElementalFunction : public UDQFunction { -public: - UDQUnaryElementalFunction(const std::string&name, std::function f); - UDQSet eval(const UDQSet& arg) const; - - static UDQSet ABS(const UDQSet& arg); - static UDQSet DEF(const UDQSet& arg); - static UDQSet EXP(const UDQSet& arg); - static UDQSet IDV(const UDQSet& arg); - static UDQSet LN(const UDQSet& arg); - static UDQSet LOG(const UDQSet& arg); - static UDQSet NINT(const UDQSet& arg); - static UDQSet SORT(const UDQSet& arg, bool ascending); - static UDQSet SORTA(const UDQSet& arg); - static UDQSet SORTD(const UDQSet& arg); - static UDQSet UNDEF(const UDQSet& arg); - - static UDQSet RANDN(std::mt19937& rng, const UDQSet& arg); - static UDQSet RANDU(std::mt19937& rng, const UDQSet& arg); - -private: - std::function func; -}; - - -class UDQBinaryFunction : public UDQFunction { -public: - UDQBinaryFunction(const std::string& name, std::function f); - UDQSet eval(const UDQSet&, const UDQSet& arg) const; - - static UDQSet EQ(double eps, const UDQSet& lhs, const UDQSet& rhs); - static UDQSet NE(double eps, const UDQSet& lhs, const UDQSet& rhs); - static UDQSet LE(double eps, const UDQSet& lhs, const UDQSet& rhs); - static UDQSet GE(double eps, const UDQSet& lhs, const UDQSet& rhs); - - static UDQSet POW(const UDQSet& lhs, const UDQSet& rhs); - static UDQSet LT(const UDQSet& lhs, const UDQSet& rhs); - static UDQSet GT(const UDQSet& lhs, const UDQSet& rhs); - static UDQSet ADD(const UDQSet& lhs, const UDQSet& rhs); - static UDQSet MUL(const UDQSet& lhs, const UDQSet& rhs); - static UDQSet SUB(const UDQSet& lhs, const UDQSet& rhs); - static UDQSet DIV(const UDQSet& lhs, const UDQSet& rhs); - - static UDQSet UADD(const UDQSet& lhs, const UDQSet& rhs); - static UDQSet UMUL(const UDQSet& lhs, const UDQSet& rhs); - static UDQSet UMAX(const UDQSet& lhs, const UDQSet& rhs); - static UDQSet UMIN(const UDQSet& lhs, const UDQSet& rhs); -private: - - std::function func; -}; -} -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQFunctionTable.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQFunctionTable.hpp deleted file mode 100644 index eb80352c21..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQFunctionTable.hpp +++ /dev/null @@ -1,53 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef UDQFUNCTIONTABLE_HPP -#define UDQFUNCTIONTABLE_HPP - -#include -#include - -#include -#include - -namespace Opm { - -class UDQFunctionTable { -public: - using FunctionMap = std::unordered_map>; - explicit UDQFunctionTable(const UDQParams& params); - UDQFunctionTable(); - UDQFunctionTable(const UDQParams& param, - const FunctionMap& map); - bool has_function(const std::string& name) const; - const UDQFunction& get(const std::string& name) const; - - const UDQParams& getParams() const; - const FunctionMap& functionMap() const; - - bool operator==(const UDQFunctionTable& data) const; - -private: - void insert_function(std::shared_ptr func); - UDQParams params; - FunctionMap function_table; -}; -} -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQInput.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQInput.hpp deleted file mode 100644 index 371dfe7553..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQInput.hpp +++ /dev/null @@ -1,105 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - - -#ifndef UDQINPUT__HPP_ -#define UDQINPUT__HPP_ - -#include - -#include - -namespace Opm { - -class UDQAssign; -class UDQDefine; - -class UDQIndex { -public: - UDQIndex() = default; - - UDQIndex(std::size_t insert_index_arg, std::size_t typed_insert_index_arg, UDQAction action_arg, UDQVarType var_type_arg) : - insert_index(insert_index_arg), - typed_insert_index(typed_insert_index_arg), - action(action_arg), - var_type(var_type_arg) - { - } - - static UDQIndex serializeObject() - { - UDQIndex result; - result.insert_index = 1; - result.typed_insert_index = 2; - result.action = UDQAction::ASSIGN; - result.var_type = UDQVarType::WELL_VAR; - - return result; - } - - bool operator==(const UDQIndex& data) const { - return insert_index == data.insert_index && - typed_insert_index == data.typed_insert_index && - action == data.action && - var_type == data.var_type; - } - - template - void serializeOp(Serializer& serializer) - { - serializer(insert_index); - serializer(typed_insert_index); - serializer(action); - serializer(var_type); - } - - std::size_t insert_index; - std::size_t typed_insert_index; - UDQAction action; - UDQVarType var_type; -}; - - -class UDQInput{ -public: - UDQInput(const UDQIndex& index, const UDQDefine& udq_define, const std::string& unit); - UDQInput(const UDQIndex& index, const UDQAssign& udq_assign, const std::string& unit); - - template - const T& get() const; - - template - bool is() const; - - const std::string& keyword() const; - const UDQVarType& var_type() const; - const std::string& unit() const; - const UDQIndex index; -private: - const UDQDefine * define; - const UDQAssign * assign; - const std::string m_keyword; - UDQVarType m_var_type; - const std::string m_unit; -}; -} - - - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQParams.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQParams.hpp deleted file mode 100644 index 4a2718aa5a..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQParams.hpp +++ /dev/null @@ -1,79 +0,0 @@ -/* - Copyright 2018 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#ifndef OPM_UDQ_PARAMS_HPP -#define OPM_UDQ_PARAMS_HPP - -#include -#include - -namespace Opm { - - class Deck; - - class UDQParams - { - public: - explicit UDQParams(const Deck& deck); - UDQParams(); - - static UDQParams serializeObject(); - - bool reseed() const; - int rand_seed() const noexcept; - void reseedRNG(int seed); - double range() const noexcept; - double undefinedValue() const noexcept; - double cmpEpsilon() const noexcept; - - std::mt19937& sim_rng(); - std::mt19937& true_rng(); - - bool operator==(const UDQParams& data) const; - - template - void serializeOp(Serializer& serializer) - { - serializer(reseed_rng); - serializer(random_seed); - serializer(value_range); - serializer(undefined_value); - serializer(cmp_eps); - - if (!serializer.isSerializing()) { - auto now = std::chrono::high_resolution_clock::now(); - auto ns = std::chrono::duration_cast(now.time_since_epoch()); - this->m_true_rng.seed( ns.count() ); - this->m_sim_rng.seed( this->random_seed ); - } - } - - private: - bool reseed_rng; - int random_seed; - double value_range; - double undefined_value; - double cmp_eps; - - std::mt19937 m_sim_rng; // The sim_rng is seeded deterministiaclly at simulation start. - std::mt19937 m_true_rng; // The true_rng is seeded with a "true" random seed; this rng can be reset with reseedRNG() - }; -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQSet.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQSet.hpp deleted file mode 100644 index 88e8e4590d..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQSet.hpp +++ /dev/null @@ -1,144 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef UDQSET_HPP -#define UDQSET_HPP - -#include -#include -#include -#include - -#include - -namespace Opm { - -class UDQScalar { -public: - UDQScalar() = default; - explicit UDQScalar(double value); - explicit UDQScalar(const std::string& wgname); - UDQScalar(const std::string& wgname, double value); - - void operator+=(const UDQScalar& rhs); - void operator+=(double rhs); - void operator*=(const UDQScalar& rhs); - void operator*=(double rhs); - void operator/=(const UDQScalar& rhs); - void operator/=(double rhs); - void operator-=(const UDQScalar& rhs); - void operator-=(double rhs); - - operator bool() const; - void assign(double value); - bool defined() const; - double value() const; - const std::string& wgname() const; -public: - double m_value; - std::string m_wgname; - bool m_defined = false; -}; - - -class UDQSet { -public: - UDQSet(const std::string& name); - UDQSet(const std::string& name, UDQVarType var_type); - UDQSet(const std::string& name, UDQVarType var_type, const std::vector& wgnames); - UDQSet(const std::string& name, UDQVarType var_type, std::size_t size); - UDQSet(const std::string& name, std::size_t size); - static UDQSet scalar(const std::string& name, double value); - static UDQSet empty(const std::string& name); - static UDQSet wells(const std::string& name, const std::vector& wells); - static UDQSet wells(const std::string& name, const std::vector& wells, double scalar_value); - static UDQSet groups(const std::string& name, const std::vector& groups); - static UDQSet groups(const std::string& name, const std::vector& groups, double scalar_value); - static UDQSet field(const std::string& name, double scalar_value); - - void assign(double value); - void assign(std::size_t index, double value); - void assign(const std::string& wgname, double value); - - std::size_t size() const; - void operator+=(const UDQSet& rhs); - void operator+=(double rhs); - void operator-=(const UDQSet& rhs); - void operator-=(double rhs); - void operator*=(const UDQSet& rhs); - void operator*=(double rhs); - void operator/=(const UDQSet& rhs); - void operator/=(double rhs); - - const UDQScalar& operator[](std::size_t index) const; - const UDQScalar& operator[](const std::string& wgname) const; - std::vector::const_iterator begin() const; - std::vector::const_iterator end() const; - - std::vector wgnames() const; - std::vector defined_values() const; - std::size_t defined_size() const; - const std::string& name() const; - UDQVarType var_type() const; -private: - UDQSet() = default; - - std::string m_name; - UDQVarType m_var_type = UDQVarType::NONE; - std::vector values; -}; - - -UDQScalar operator+(const UDQScalar&lhs, const UDQScalar& rhs); -UDQScalar operator+(const UDQScalar&lhs, double rhs); -UDQScalar operator+(double lhs, const UDQScalar& rhs); - -UDQScalar operator-(const UDQScalar&lhs, const UDQScalar& rhs); -UDQScalar operator-(const UDQScalar&lhs, double rhs); -UDQScalar operator-(double lhs, const UDQScalar& rhs); - -UDQScalar operator*(const UDQScalar&lhs, const UDQScalar& rhs); -UDQScalar operator*(const UDQScalar&lhs, double rhs); -UDQScalar operator*(double lhs, const UDQScalar& rhs); - -UDQScalar operator/(const UDQScalar&lhs, const UDQScalar& rhs); -UDQScalar operator/(const UDQScalar&lhs, double rhs); -UDQScalar operator/(double lhs, const UDQScalar& rhs); - -UDQSet operator+(const UDQSet&lhs, const UDQSet& rhs); -UDQSet operator+(const UDQSet&lhs, double rhs); -UDQSet operator+(double lhs, const UDQSet& rhs); - -UDQSet operator-(const UDQSet&lhs, const UDQSet& rhs); -UDQSet operator-(const UDQSet&lhs, double rhs); -UDQSet operator-(double lhs, const UDQSet& rhs); - -UDQSet operator*(const UDQSet&lhs, const UDQSet& rhs); -UDQSet operator*(const UDQSet&lhs, double rhs); -UDQSet operator*(double lhs, const UDQSet& rhs); - -UDQSet operator/(const UDQSet&lhs, const UDQSet& rhs); -UDQSet operator/(const UDQSet&lhs, double rhs); -UDQSet operator/(double lhs, const UDQSet&rhs); - -} - - - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/VFPInjTable.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/VFPInjTable.hpp deleted file mode 100644 index 2b17eec4ab..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/VFPInjTable.hpp +++ /dev/null @@ -1,133 +0,0 @@ -/* - Copyright 2015 SINTEF ICT, Applied Mathematics. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - - -#ifndef OPM_PARSER_ECLIPSE_ECLIPSESTATE_TABLES_VFPINJTABLE_HPP_ -#define OPM_PARSER_ECLIPSE_ECLIPSESTATE_TABLES_VFPINJTABLE_HPP_ - - -#include -#include - -namespace Opm { - -class DeckKeyword; -class UnitSystem; - -class VFPInjTable { -public: - typedef std::vector array_type; - - enum FLO_TYPE { - FLO_OIL=1, - FLO_WAT, - FLO_GAS, - FLO_INVALID - }; - - - VFPInjTable(); - VFPInjTable(const DeckKeyword& table, const UnitSystem& deck_unit_system); - - static VFPInjTable serializeObject(); - - inline int getTableNum() const { - return m_table_num; - } - - inline double getDatumDepth() const { - return m_datum_depth; - } - - inline FLO_TYPE getFloType() const { - return m_flo_type; - } - - inline const std::vector& getFloAxis() const { - return m_flo_data; - } - - inline const std::vector& getTHPAxis() const { - return m_thp_data; - } - - /** - * Returns the data of the table itself. For ordered access - * use operator()(thp_idx, flo_idx) - * - * This gives the bottom hole pressure value in the table for the coordinate - * given by - * flo_axis = getFloAxis(); - * thp_axis = getTHPAxis(); - * - * flo_coord = flo_axis(flo_idx); - * thp_coord = thp_axis(thp_idx); - */ - inline const array_type& getTable() const { - return m_data; - } - - bool operator==(const VFPInjTable& data) const; - - std::array shape() const; - - double operator()(size_t thp_idx, size_t flo_idx) const; - - template - void serializeOp(Serializer& serializer) - { - serializer(m_table_num); - serializer(m_datum_depth); - serializer(m_flo_type); - serializer(m_flo_data); - serializer(m_thp_data); - serializer(m_data); - } - -private: - int m_table_num; - double m_datum_depth; - FLO_TYPE m_flo_type; - - std::vector m_flo_data; - std::vector m_thp_data; - - - array_type m_data; - void check(); - - double& operator()(size_t thp_idx, size_t flo_idx); - - static FLO_TYPE getFloType(std::string flo_string); - - static void scaleValues(std::vector& values, - const double& scaling_factor); - - static void convertFloToSI(const FLO_TYPE& type, - std::vector& values, - const UnitSystem& unit_system); - static void convertTHPToSI(std::vector& values, - const UnitSystem& unit_system); -}; - - -} - - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/VFPProdTable.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/VFPProdTable.hpp deleted file mode 100644 index 14e6cf85b4..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/VFPProdTable.hpp +++ /dev/null @@ -1,215 +0,0 @@ -/* - Copyright 2015 SINTEF ICT, Applied Mathematics. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef OPM_PARSER_ECLIPSE_ECLIPSESTATE_TABLES_VFPPRODTABLE_HPP_ -#define OPM_PARSER_ECLIPSE_ECLIPSESTATE_TABLES_VFPPRODTABLE_HPP_ - - -#include -#include - -namespace Opm { - - class DeckItem; - class DeckKeyword; - class UnitSystem; - -/** - * Class for reading data from a VFPPROD (vertical flow performance production) table - */ -class VFPProdTable { -public: - typedef std::vector array_type; - - enum FLO_TYPE { - FLO_OIL=1, - FLO_LIQ, - FLO_GAS, - FLO_INVALID - }; - - enum WFR_TYPE { - WFR_WOR=11, - WFR_WCT, - WFR_WGR, - WFR_INVALID - }; - - enum GFR_TYPE { - GFR_GOR=21, - GFR_GLR, - GFR_OGR, - GFR_INVALID - }; - - enum ALQ_TYPE { - ALQ_GRAT=31, - ALQ_IGLR, - ALQ_TGLR, - ALQ_PUMP, - ALQ_COMP, - ALQ_BEAN, - ALQ_UNDEF, - ALQ_INVALID - }; - - VFPProdTable(); - VFPProdTable( const DeckKeyword& table, const UnitSystem& deck_unit_system); - VFPProdTable(int table_num, - double datum_depth, - FLO_TYPE flo_type, - WFR_TYPE wfr_type, - GFR_TYPE gfr_type, - ALQ_TYPE alq_type, - const std::vector& flo_data, - const std::vector& thp_data, - const std::vector& wfr_data, - const std::vector& gfr_data, - const std::vector& alq_data, - const array_type& data); - - static VFPProdTable serializeObject(); - - inline int getTableNum() const { - return m_table_num; - } - - inline double getDatumDepth() const { - return m_datum_depth; - } - - inline FLO_TYPE getFloType() const { - return m_flo_type; - } - - inline WFR_TYPE getWFRType() const { - return m_wfr_type; - } - - inline GFR_TYPE getGFRType() const { - return m_gfr_type; - } - - inline ALQ_TYPE getALQType() const { - return m_alq_type; - } - - inline const std::vector& getFloAxis() const { - return m_flo_data; - } - - inline const std::vector& getTHPAxis() const { - return m_thp_data; - } - - inline const std::vector& getWFRAxis() const { - return m_wfr_data; - } - - inline const std::vector& getGFRAxis() const { - return m_gfr_data; - } - - inline const std::vector& getALQAxis() const { - return m_alq_data; - } - - /** - * Returns the data of the table itself. For ordered access - * use operator()(thp_idx, wfr_idx, gfr_idx, alq_idx, flo_idx) - * - * This gives the bottom hole pressure value in the table for the coordinate - * given by - * flo_axis = getFloAxis(); - * thp_axis = getTHPAxis(); - * ... - * - * flo_coord = flo_axis(flo_idx); - * thp_coord = thp_axis(thp_idx); - * ... - */ - inline const array_type& getTable() const { - return m_data; - } - - bool operator==(const VFPProdTable& data) const; - - std::array shape() const; - - double operator()(size_t thp_idx, size_t wfr_idx, size_t gfr_idx, size_t alq_idx, size_t flo_idx) const; - - template - void serializeOp(Serializer& serializer) - { - serializer(m_table_num); - serializer(m_datum_depth); - serializer(m_flo_type); - serializer(m_wfr_type); - serializer(m_gfr_type); - serializer(m_alq_type); - serializer(m_flo_data); - serializer(m_thp_data); - serializer(m_wfr_data); - serializer(m_gfr_data); - serializer(m_alq_data); - serializer(m_data); - } - -private: - int m_table_num; - double m_datum_depth; - FLO_TYPE m_flo_type; - WFR_TYPE m_wfr_type; - GFR_TYPE m_gfr_type; - ALQ_TYPE m_alq_type; - - std::vector m_flo_data; - std::vector m_thp_data; - std::vector m_wfr_data; - std::vector m_gfr_data; - std::vector m_alq_data; - - array_type m_data; - - void check(const DeckKeyword& table, const double factor); - - double& operator()(size_t thp_idx, size_t wfr_idx, size_t gfr_idx, size_t alq_idx, size_t flo_idx); - - static void scaleValues(std::vector& values, - const double& scaling_factor); - - static void convertFloToSI(const FLO_TYPE& type, - std::vector& values, - const UnitSystem& unit_system); - static void convertTHPToSI(std::vector& values, - const UnitSystem& unit_system); - static void convertWFRToSI(const WFR_TYPE& type, - std::vector& values, - const UnitSystem& unit_system); - static void convertGFRToSI(const GFR_TYPE& type, - std::vector& values, - const UnitSystem& unit_system); -}; - - - -} - - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Well/Connection.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Well/Connection.hpp deleted file mode 100644 index 157fb94fc0..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Well/Connection.hpp +++ /dev/null @@ -1,252 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - - -#ifndef COMPLETION_HPP_ -#define COMPLETION_HPP_ - -#include -#include -#include -#include -#include -#include - -#include -#include - -namespace Opm { - -namespace RestartIO { - struct RstConnection; -} - - class DeckKeyword; - class DeckRecord; - class EclipseGrid; - class FieldPropsManager; - - class Connection { - public: - enum class State { - OPEN = 1, - SHUT = 2, - AUTO = 3 // Seems like the AUTO state can not be serialized to restart files. - }; - - static const std::string State2String( State enumValue ); - static State StateFromString( const std::string& stringValue ); - - - enum class Direction{ - X = 1, - Y = 2, - Z = 3 - }; - - static std::string Direction2String(const Direction enumValue); - static Direction DirectionFromString(const std::string& stringValue); - - - enum class Order { - DEPTH, - INPUT, - TRACK - }; - - static const std::string Order2String( Order enumValue ); - static Order OrderFromString(const std::string& comporderStringValue); - - enum class CTFKind { - DeckValue, - Defaulted, - }; - - - Connection(); - Connection(int i, int j , int k , - std::size_t global_index, - int complnum, - double depth, - State state, - double CF, - double Kh, - double rw, - double r0, - double skin_factor, - const int satTableId, - const Direction direction, - const CTFKind ctf_kind, - const std::size_t sort_value, - const double segDistStart, - const double segDistEnd, - const bool defaultSatTabId); - - Connection(const RestartIO::RstConnection& rst_connection, const EclipseGrid& grid, const FieldPropsManager& fp); - - static Connection serializeObject(); - - bool attachedToSegment() const; - bool sameCoordinate(const int i, const int j, const int k) const; - int getI() const; - int getJ() const; - int getK() const; - std::size_t global_index() const; - State state() const; - Direction dir() const; - double depth() const; - int satTableId() const; - int complnum() const; - int segment() const; - double CF() const; - double Kh() const; - double rw() const; - double r0() const; - double skinFactor() const; - CTFKind kind() const; - - void setState(State state); - void setComplnum(int compnum); - void scaleWellPi(double wellPi); - void updateSegmentRST(int segment_number_arg, - double center_depth_arg); - void updateSegment(int segment_number_arg, - double center_depth_arg, - std::size_t compseg_insert_index, - double start, - double end); - std::size_t sort_value() const; - const bool& getDefaultSatTabId() const; - void setDefaultSatTabId(bool id); - const double& getSegDistStart() const; - const double& getSegDistEnd() const; - std::string str() const; - bool ctfAssignedFromInput() const - { - return this->m_ctfkind == CTFKind::DeckValue; - } - - bool operator==( const Connection& ) const; - bool operator!=( const Connection& ) const; - - template - void serializeOp(Serializer& serializer) - { - serializer(direction); - serializer(center_depth); - serializer(open_state); - serializer(sat_tableId); - serializer(m_complnum); - serializer(m_CF); - serializer(m_Kh); - serializer(m_rw); - serializer(m_r0); - serializer(m_skin_factor); - serializer(ijk); - serializer(m_global_index); - serializer(m_ctfkind); - serializer(m_sort_value); - serializer(m_segDistStart); - serializer(m_segDistEnd); - serializer(m_defaultSatTabId); - serializer(segment_number); - } - - private: - Direction direction; - double center_depth; - State open_state; - int sat_tableId; - int m_complnum; - double m_CF; - double m_Kh; - double m_rw; - double m_r0; - double m_skin_factor; - - std::array ijk; - CTFKind m_ctfkind; - std::size_t m_global_index; - /* - The sort_value member is a peculiar quantity. The connections are - assembled in the WellConnections class. During the lifetime of the - connections there are three different sort orders which are all - relevant: - - input: This is the ordering implied be the order of the - connections in the input deck. - - simulation: This is the ordering the connections have in - WellConnections container during the simulation and RFT output. - - restart: This is the ordering the connections have when they are - written out to a restart file. - - Exactly what consitutes input, simulation and restart ordering, and - how the connections transition between the three during application - lifetime is different from MSW and normal wells. - - normal wells: For normal wells the simulation order is given by the - COMPORD keyword, and then when the connections are serialized to the - restart file they are written in input order; i.e. we have: - - input == restart and simulation given COMPORD - - To recover the input order when creating the restart files the - sort_value member corresponds to the insert index for normal wells. - - MSW wells: For MSW wells the wells simulator order[*] is given by - COMPSEGS keyword, the COMPORD keyword is ignored. The connections are - sorted in WellConnections::order() and then retain that order for all - eternity i.e. - - input and simulation == restart - - Now the important point is that the COMPSEGS detail used to perform - this sorting is not available when loading from a restart file, but - then the connections are already sorted correctly. I.e. *after* a - restart we will have: - - input(from restart) == simulation == restart - - The sort_value member is used to sort the connections into restart - ordering. In the case of normal wells this corresponds to recovering - the input order, whereas for MSW wells this is equivalent to the - simulation order. - - [*]: For MSW wells the topology is given by the segments and entered - explicitly, so the truth is probably that the storage order - during simulation makes no difference? - */ - - std::size_t m_sort_value; - double m_segDistStart; - double m_segDistEnd; - bool m_defaultSatTabId; - - // related segment number - // 0 means the completion is not related to segment - int segment_number = 0; - - static std::string CTFKindToString(const CTFKind); - }; -} - -#endif /* COMPLETION_HPP_ */ - diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Well/InjectionControls.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Well/InjectionControls.hpp deleted file mode 100644 index 2167651bd1..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Well/InjectionControls.hpp +++ /dev/null @@ -1,26 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - - -#ifndef INJECTION_CONTROLS_HPP -#define INJECTION_CONTROLS_HPP - -namespace Opm { -} -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Well/ProductionControls.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Well/ProductionControls.hpp deleted file mode 100644 index cedc038cc3..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Well/ProductionControls.hpp +++ /dev/null @@ -1,26 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - - -#ifndef PRODUCTION_CONTROLS_HPP -#define PRODUCTION_CONTROLS_HPP - -namespace Opm { -} -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Well/WList.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Well/WList.hpp deleted file mode 100644 index e075b9c9a5..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Well/WList.hpp +++ /dev/null @@ -1,53 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ -#include -#include -#include -#include - -namespace Opm { - -class WList { -public: - using storage = std::unordered_set; - - WList() = default; - WList(const storage& wlist); - std::size_t size() const; - void add(const std::string& well); - void del(const std::string& well); - bool has(const std::string& well) const; - - std::vector wells() const; - storage::const_iterator begin() const; - storage::const_iterator end() const; - - bool operator==(const WList& data) const; - - template - void serializeOp(Serializer& serializer) - { - serializer(well_list); - } - -private: - storage well_list; -}; - -} diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Well/WListManager.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Well/WListManager.hpp deleted file mode 100644 index e5b918d776..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Well/WListManager.hpp +++ /dev/null @@ -1,52 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ -#include -#include -#include -#include - -namespace Opm { - -class WList; - -class WListManager { -public: - WListManager() = default; - - static WListManager serializeObject(); - - bool hasList(const std::string&) const; - WList& getList(const std::string& name); - const WList& getList(const std::string& name) const; - WList& newList(const std::string& name); - void delWell(const std::string& well); - - bool operator==(const WListManager& data) const; - - template - void serializeOp(Serializer& serializer) - { - serializer.map(wlists); - } - -private: - std::map wlists; -}; - -} diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Well/Well.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Well/Well.hpp deleted file mode 100644 index 1f9e76c7ed..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Well/Well.hpp +++ /dev/null @@ -1,654 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - - -#ifndef WELL2_HPP -#define WELL2_HPP - -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -namespace Opm { - -class DeckRecord; -class EclipseGrid; -class DeckKeyword; -struct WellInjectionProperties; -class WellProductionProperties; -class UDQActive; -class UDQConfig; - -namespace RestartIO { -struct RstWell; -} - - -class Well { -public: - - enum class Status { - OPEN = 1, - STOP = 2, - SHUT = 3, - AUTO = 4 - }; - static std::string Status2String(Status enumValue); - static Status StatusFromString(const std::string& stringValue); - - - - - /* - The elements in this enum are used as bitmasks to keep track - of which controls are present, i.e. the 2^n structure must - be intact. - */ - enum class InjectorCMode : int{ - RATE = 1 , - RESV = 2 , - BHP = 4 , - THP = 8 , - GRUP = 16 , - CMODE_UNDEFINED = 512 - }; - static const std::string InjectorCMode2String( InjectorCMode enumValue ); - static InjectorCMode InjectorCModeFromString( const std::string& stringValue ); - - - /* - The items BHP, THP and GRUP only apply in prediction mode: - WCONPROD. The elements in this enum are used as bitmasks to - keep track of which controls are present, i.e. the 2^n - structure must be intact.The NONE item is only used in WHISTCTL - to cancel its effect. - - The properties are initialized with the CMODE_UNDEFINED - value, but the undefined value is never assigned apart from - that; and it is not part of the string conversion routines. - */ - enum class ProducerCMode : int { - NONE = 0, - ORAT = 1, - WRAT = 2, - GRAT = 4, - LRAT = 8, - CRAT = 16, - RESV = 32, - BHP = 64, - THP = 128, - GRUP = 256, - CMODE_UNDEFINED = 1024 - }; - static const std::string ProducerCMode2String( ProducerCMode enumValue ); - static ProducerCMode ProducerCModeFromString( const std::string& stringValue ); - - - - enum class WELTARGCMode { - ORAT = 1, - WRAT = 2, - GRAT = 3, - LRAT = 4, - CRAT = 5, // Not supported - RESV = 6, - BHP = 7, - THP = 8, - VFP = 9, - LIFT = 10, // Not supported - GUID = 11 - }; - - static WELTARGCMode WELTARGCModeFromString(const std::string& stringValue); - - - enum class GuideRateTarget { - OIL = 0, - WAT = 1, - GAS = 2, - LIQ = 3, - COMB = 4, - WGA = 5, - CVAL = 6, - RAT = 7, - RES = 8, - UNDEFINED = 9 - }; - static const std::string GuideRateTarget2String( GuideRateTarget enumValue ); - static GuideRateTarget GuideRateTargetFromString( const std::string& stringValue ); - - - enum class GasInflowEquation { - STD = 0, - R_G = 1, - P_P = 2, - GPP = 3 - }; - static const std::string GasInflowEquation2String(GasInflowEquation enumValue); - static GasInflowEquation GasInflowEquationFromString(const std::string& stringValue); - - - - struct WellGuideRate { - bool available; - double guide_rate; - GuideRateTarget guide_phase; - double scale_factor; - - static WellGuideRate serializeObject() - { - WellGuideRate result; - result.available = true; - result.guide_rate = 1.0; - result.guide_phase = GuideRateTarget::COMB; - result.scale_factor = 2.0; - - return result; - } - - bool operator==(const WellGuideRate& data) const { - return available == data.available && - guide_rate == data.guide_rate && - guide_phase == data.guide_phase && - scale_factor == data.scale_factor; - } - - template - void serializeOp(Serializer& serializer) - { - serializer(available); - serializer(guide_rate); - serializer(guide_phase); - serializer(scale_factor); - } - }; - - - struct InjectionControls { - public: - InjectionControls(int controls_arg) : - controls(controls_arg) - {} - - double bhp_limit; - double thp_limit; - - - InjectorType injector_type; - InjectorCMode cmode = InjectorCMode::CMODE_UNDEFINED; - double surface_rate; - double reservoir_rate; - double temperature; - int vfp_table_number; - bool prediction_mode; - - bool hasControl(InjectorCMode cmode_arg) const { - return (this->controls & static_cast(cmode_arg)) != 0; - } - - private: - int controls; - }; - - - - struct WellInjectionProperties { - std::string name; - UDAValue surfaceInjectionRate; - UDAValue reservoirInjectionRate; - UDAValue BHPTarget; - UDAValue THPTarget; - - double bhp_hist_limit = 0.0; - double thp_hist_limit = 0.0; - - double temperature; - double BHPH; - double THPH; - int VFPTableNumber; - bool predictionMode; - int injectionControls; - InjectorType injectorType; - InjectorCMode controlMode; - - bool operator==(const WellInjectionProperties& other) const; - bool operator!=(const WellInjectionProperties& other) const; - - WellInjectionProperties(); - WellInjectionProperties(const UnitSystem& units, const std::string& wname); - - static WellInjectionProperties serializeObject(); - - void handleWELTARG(WELTARGCMode cmode, double newValue, double SIFactorP); - void handleWCONINJE(const DeckRecord& record, bool availableForGroupControl, const std::string& well_name); - void handleWCONINJH(const DeckRecord& record, bool is_producer, const std::string& well_name); - bool hasInjectionControl(InjectorCMode controlModeArg) const { - if (injectionControls & static_cast(controlModeArg)) - return true; - else - return false; - } - - void dropInjectionControl(InjectorCMode controlModeArg) { - auto int_arg = static_cast(controlModeArg); - if ((injectionControls & int_arg) != 0) - injectionControls -= int_arg; - } - - void addInjectionControl(InjectorCMode controlModeArg) { - auto int_arg = static_cast(controlModeArg); - if ((injectionControls & int_arg) == 0) - injectionControls += int_arg; - } - - void resetDefaultHistoricalBHPLimit(); - void resetBHPLimit(); - void setBHPLimit(const double limit); - InjectionControls controls(const UnitSystem& unit_system, const SummaryState& st, double udq_default) const; - bool updateUDQActive(const UDQConfig& udq_config, UDQActive& active) const; - - template - void serializeOp(Serializer& serializer) - { - serializer(name); - surfaceInjectionRate.serializeOp(serializer); - reservoirInjectionRate.serializeOp(serializer); - BHPTarget.serializeOp(serializer); - THPTarget.serializeOp(serializer); - serializer(bhp_hist_limit); - serializer(thp_hist_limit); - serializer(temperature); - serializer(BHPH); - serializer(THPH); - serializer(VFPTableNumber); - serializer(predictionMode); - serializer(injectionControls); - serializer(injectorType); - serializer(controlMode); - } - }; - - struct ProductionControls { - public: - ProductionControls(int controls_arg) : - controls(controls_arg) - { - } - - ProducerCMode cmode = ProducerCMode::NONE; - double oil_rate; - double water_rate; - double gas_rate; - double liquid_rate; - double resv_rate; - double bhp_history; - double thp_history; - double bhp_limit; - double thp_limit; - double alq_value; - int vfp_table_number; - bool prediction_mode; - - bool hasControl(ProducerCMode cmode_arg) const { - return (this->controls & static_cast(cmode_arg)) != 0; - } - - private: - int controls; - }; - - - class WellProductionProperties { - public: - // the rates serve as limits under prediction mode - // while they are observed rates under historical mode - std::string name; - UDAValue OilRate; - UDAValue WaterRate; - UDAValue GasRate; - UDAValue LiquidRate; - UDAValue ResVRate; - UDAValue BHPTarget; - UDAValue THPTarget; - - // BHP and THP limit - double bhp_hist_limit = 0.0; - double thp_hist_limit = 0.0; - - // historical BHP and THP under historical mode - double BHPH = 0.0; - double THPH = 0.0; - int VFPTableNumber = 0; - double ALQValue = 0.0; - bool predictionMode = false; - ProducerCMode controlMode = ProducerCMode::CMODE_UNDEFINED; - ProducerCMode whistctl_cmode = ProducerCMode::CMODE_UNDEFINED; - - bool operator==(const WellProductionProperties& other) const; - bool operator!=(const WellProductionProperties& other) const; - - WellProductionProperties(); - WellProductionProperties(const UnitSystem& units, const std::string& name_arg); - - static WellProductionProperties serializeObject(); - - bool hasProductionControl(ProducerCMode controlModeArg) const { - return (m_productionControls & static_cast(controlModeArg)) != 0; - } - - void dropProductionControl(ProducerCMode controlModeArg) { - if (hasProductionControl(controlModeArg)) - m_productionControls -= static_cast(controlModeArg); - } - - void addProductionControl(ProducerCMode controlModeArg) { - if (! hasProductionControl(controlModeArg)) - m_productionControls += static_cast(controlModeArg); - } - - // this is used to check whether the specified control mode is an effective history matching production mode - static bool effectiveHistoryProductionControl(ProducerCMode cmode); - void handleWCONPROD( const std::string& well, const DeckRecord& record); - void handleWCONHIST( const DeckRecord& record); - void handleWELTARG( WELTARGCMode cmode, double newValue, double SiFactorP); - void resetDefaultBHPLimit(); - void clearControls(); - ProductionControls controls(const SummaryState& st, double udq_default) const; - bool updateUDQActive(const UDQConfig& udq_config, UDQActive& active) const; - - void setBHPLimit(const double limit); - int productionControls() const { return this->m_productionControls; } - - template - void serializeOp(Serializer& serializer) - { - serializer(name); - OilRate.serializeOp(serializer); - WaterRate.serializeOp(serializer); - GasRate.serializeOp(serializer); - LiquidRate.serializeOp(serializer); - ResVRate.serializeOp(serializer); - BHPTarget.serializeOp(serializer); - THPTarget.serializeOp(serializer); - serializer(bhp_hist_limit); - serializer(thp_hist_limit); - serializer(BHPH); - serializer(THPH); - serializer(VFPTableNumber); - serializer(ALQValue); - serializer(predictionMode); - serializer(controlMode); - serializer(whistctl_cmode); - serializer(m_productionControls); - } - - private: - int m_productionControls = 0; - void init_rates( const DeckRecord& record ); - - void init_history(const DeckRecord& record); - - WellProductionProperties(const DeckRecord& record); - - double getBHPLimit() const; - }; - - - Well() = default; - Well(const std::string& wname, - const std::string& gname, - std::size_t init_step, - std::size_t insert_index, - int headI, - int headJ, - double ref_depth, - const WellType& wtype_arg, - ProducerCMode whistctl_cmode, - Connection::Order ordering, - const UnitSystem& unit_system, - double udq_undefined, - double dr, - bool allow_xflow, - bool auto_shutin, - int pvt_table, - GasInflowEquation inflow_eq); - - Well(const RestartIO::RstWell& rst_well, - int report_step, - const UnitSystem& unit_system, - double udq_undefined); - - static Well serializeObject(); - - bool isMultiSegment() const; - bool isAvailableForGroupControl() const; - double getGuideRate() const; - GuideRateTarget getGuideRatePhase() const; - double getGuideRateScalingFactor() const; - - bool hasBeenDefined(size_t timeStep) const; - std::size_t firstTimeStep() const; - const WellType& wellType() const; - bool predictionMode() const; - bool canOpen() const; - bool isProducer() const; - bool isInjector() const; - InjectorType injectorType() const; - size_t seqIndex() const; - bool getAutomaticShutIn() const; - bool getAllowCrossFlow() const; - const std::string& name() const; - int getHeadI() const; - int getHeadJ() const; - double getRefDepth() const; - double getDrainageRadius() const; - double getEfficiencyFactor() const; - double getSolventFraction() const; - Status getStatus() const; - const std::string& groupName() const; - Phase getPreferredPhase() const; - const WellConnections& getConnections() const; - const WellSegments& getSegments() const; - - const WellProductionProperties& getProductionProperties() const; - const WellInjectionProperties& getInjectionProperties() const; - const WellEconProductionLimits& getEconLimits() const; - const WellFoamProperties& getFoamProperties() const; - const WellPolymerProperties& getPolymerProperties() const; - const WellBrineProperties& getBrineProperties() const; - const WellTracerProperties& getTracerProperties() const; - /* The rate of a given phase under the following assumptions: - * * Returns zero if production is requested for an injector (and vice - * versa) - * * If this is an injector and something else than the - * requested phase is injected, returns 0, i.e. - * water_injector.injection_rate( gas ) == 0 - * * Mixed injection is not supported and always returns 0. - */ - double production_rate( const SummaryState& st, Phase phase) const; - double injection_rate( const SummaryState& st, Phase phase) const; - static bool wellNameInWellNamePattern(const std::string& wellName, const std::string& wellNamePattern); - - /* - The getCompletions() function will return a map: - - { - 1 : [Connection, Connection], - 2 : [Connection, Connection, Connecton], - 3 : [Connection], - 4 : [Connection] - } - - The integer ID's correspond to the COMPLETION id given by the COMPLUMP - keyword. - */ - std::map> getCompletions() const; - - bool updatePrediction(bool prediction_mode); - bool updateAutoShutin(bool auto_shutin); - bool updateCrossFlow(bool allow_cross_flow); - bool updatePVTTable(int pvt_table); - bool updateHead(int I, int J); - bool updateRefDepth(double ref_dpeth); - bool updateDrainageRadius(double drainage_radius); - void updateSegments(std::shared_ptr segments_arg); - bool updateConnections(std::shared_ptr connections); - bool updateConnections(std::shared_ptr connections, const EclipseGrid& grid, const std::vector& pvtnum); - bool updateStatus(Status status, bool update_connections); - bool updateGroup(const std::string& group); - bool updateWellGuideRate(bool available, double guide_rate, GuideRateTarget guide_phase, double scale_factor); - bool updateWellGuideRate(double guide_rate); - bool updateEfficiencyFactor(double efficiency_factor); - bool updateSolventFraction(double solvent_fraction); - bool updateTracer(std::shared_ptr tracer_properties); - bool updateFoamProperties(std::shared_ptr foam_properties); - bool updatePolymerProperties(std::shared_ptr polymer_properties); - bool updateBrineProperties(std::shared_ptr brine_properties); - bool updateEconLimits(std::shared_ptr econ_limits); - bool updateProduction(std::shared_ptr production); - bool updateInjection(std::shared_ptr injection); - bool updateWSEGSICD(const std::vector >& sicd_pairs); - bool updateWSEGVALV(const std::vector >& valve_pairs); - - bool handleWELSEGS(const DeckKeyword& keyword); - bool handleCOMPSEGS(const DeckKeyword& keyword, const EclipseGrid& grid, const ParseContext& parseContext, ErrorGuard& errors); - bool handleWELOPEN(const DeckRecord& record, Connection::State status, bool action_mode); - bool handleCOMPLUMP(const DeckRecord& record); - bool handleWPIMULT(const DeckRecord& record); - - void filterConnections(const ActiveGridCells& grid); - ProductionControls productionControls(const SummaryState& st) const; - InjectionControls injectionControls(const SummaryState& st) const; - int vfp_table_number() const; - int pvt_table_number() const; - int fip_region_number() const; - GasInflowEquation gas_inflow_equation() const; - bool segmented_density_calculation() const { return true; } - double alq_value() const; - double temperature() const; - - bool cmp_structure(const Well& other) const; - bool operator==(const Well& data) const; - void setInsertIndex(std::size_t index); - - template - void serializeOp(Serializer& serializer) - { - serializer(wname); - serializer(group_name); - serializer(init_step); - serializer(insert_index); - serializer(headI); - serializer(headJ); - serializer(ref_depth); - unit_system.serializeOp(serializer); - serializer(udq_undefined); - serializer(status); - serializer(drainage_radius); - serializer(allow_cross_flow); - serializer(automatic_shutin); - serializer(pvt_table); - serializer(gas_inflow); - wtype.serializeOp(serializer); - guide_rate.serializeOp(serializer); - serializer(efficiency_factor); - serializer(solvent_fraction); - serializer(prediction_mode); - serializer(econ_limits); - serializer(foam_properties); - serializer(polymer_properties); - serializer(brine_properties); - serializer(tracer_properties); - serializer(connections); - serializer(production); - serializer(injection); - serializer(segments); - } - -private: - void switchToInjector(); - void switchToProducer(); - - std::string wname; - std::string group_name; - std::size_t init_step; - std::size_t insert_index; - int headI; - int headJ; - double ref_depth; - double drainage_radius; - bool allow_cross_flow; - bool automatic_shutin; - int pvt_table; - GasInflowEquation gas_inflow = GasInflowEquation::STD; // Will NOT be loaded/assigned from restart file - UnitSystem unit_system; - double udq_undefined; - Status status; - WellType wtype; - WellGuideRate guide_rate; - double efficiency_factor; - double solvent_fraction; - bool prediction_mode = true; - - - std::shared_ptr econ_limits; - std::shared_ptr foam_properties; - std::shared_ptr polymer_properties; - std::shared_ptr brine_properties; - std::shared_ptr tracer_properties; - std::shared_ptr connections; // The WellConnections object can not be const because of the filterConnections method - would be beneficial to rewrite to enable const - std::shared_ptr production; - std::shared_ptr injection; - std::shared_ptr segments; -}; - -std::ostream& operator<<( std::ostream&, const Well::WellInjectionProperties& ); -std::ostream& operator<<( std::ostream&, const WellProductionProperties& ); - -int eclipseControlMode(const Well::InjectorCMode imode, - const InjectorType itype, - const Well::Status wellStatus); - -int eclipseControlMode(const Well::ProducerCMode pmode, - const Well::Status wellStatus); - -int eclipseControlMode(const Well& well, - const SummaryState& st); - -std::ostream& operator<<(std::ostream& os, const Well::Status& st); -std::ostream& operator<<(std::ostream& os, const Well::ProducerCMode& cm); -std::ostream& operator<<(std::ostream& os, const Well::InjectorCMode& cm); - -} -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Well/WellBrineProperties.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Well/WellBrineProperties.hpp deleted file mode 100644 index 87cb055549..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Well/WellBrineProperties.hpp +++ /dev/null @@ -1,47 +0,0 @@ -/* - Copyright 2019 by Norce. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef OPM_WELLBRINEPROPERTIES_HEADER_INCLUDED -#define OPM_WELLBRINEPROPERTIES_HEADER_INCLUDED - -namespace Opm -{ - -class DeckRecord; - -struct WellBrineProperties -{ - double m_saltConcentration = 0.0; - - void handleWSALT(const DeckRecord& rec); - bool operator!=(const WellBrineProperties& other) const; - bool operator==(const WellBrineProperties& other) const; - - static WellBrineProperties serializeObject(); - - template - void serializeOp(Serializer& serializer) - { - serializer(m_saltConcentration); - } -}; - -} // namespace Opm - -#endif // OPM_WELLBRINEPROPERTIES_HEADER_INCLUDED diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Well/WellConnections.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Well/WellConnections.hpp deleted file mode 100644 index 9c10d8c1e9..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Well/WellConnections.hpp +++ /dev/null @@ -1,144 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - - -#ifndef CONNECTIONSET_HPP_ -#define CONNECTIONSET_HPP_ - -#include - -#include - -namespace Opm { - class EclipseGrid; - class FieldPropsManager; - class WellConnections { - public: - - - WellConnections(); - WellConnections(Connection::Order ordering, int headI, int headJ); - WellConnections(Connection::Order ordering, int headI, int headJ, - const std::vector& connections); - - static WellConnections serializeObject(); - - // cppcheck-suppress noExplicitConstructor - WellConnections(const WellConnections& src, const EclipseGrid& grid); - void addConnection(int i, int j , int k , - std::size_t global_index, - double depth, - Connection::State state , - double CF, - double Kh, - double rw, - double r0, - double skin_factor, - const int satTableId, - const Connection::Direction direction = Connection::Direction::Z, - const Connection::CTFKind ctf_kind = Connection::CTFKind::DeckValue, - const std::size_t seqIndex = 0, - const double segDistStart= 0.0, - const double segDistEnd= 0.0, - const bool defaultSatTabId = true); - void loadCOMPDAT(const DeckRecord& record, const EclipseGrid& grid, const FieldPropsManager& field_properties); - - using const_iterator = std::vector< Connection >::const_iterator; - - void add( Connection ); - size_t size() const; - const Connection& operator[](size_t index) const; - const Connection& get(size_t index) const; - const Connection& getFromIJK(const int i, const int j, const int k) const; - const Connection& lowest() const; - Connection& getFromIJK(const int i, const int j, const int k); - - const_iterator begin() const { return this->m_connections.begin(); } - const_iterator end() const { return this->m_connections.end(); } - void filter(const ActiveGridCells& grid); - bool allConnectionsShut() const; - /// Order connections irrespective of input order. - /// The algorithm used is the following: - /// 1. The connection nearest to the given (well_i, well_j) - /// coordinates in terms of the connection's (i, j) is chosen - /// to be the first connection. If non-unique, choose one with - /// lowest z-depth (shallowest). - /// 2. Choose next connection to be nearest to current in (i, j) sense. - /// If non-unique choose closest in z-depth (not logical cartesian k). - /// - /// \param[in] well_i logical cartesian i-coordinate of well head - /// \param[in] well_j logical cartesian j-coordinate of well head - /// \param[in] grid EclipseGrid object, used for cell depths - void order(); - - bool operator==( const WellConnections& ) const; - bool operator!=( const WellConnections& ) const; - - Connection::Order ordering() const { return this->m_ordering; } - std::vector output(const EclipseGrid& grid) const; - - template - void serializeOp(Serializer& serializer) - { - serializer(m_ordering); - serializer(headI); - serializer(headJ); - serializer.vector(m_connections); - } - - private: - void addConnection(int i, int j , int k , - std::size_t global_index, - int complnum, - double depth, - Connection::State state , - double CF, - double Kh, - double rw, - double r0, - double skin_factor, - const int satTableId, - const Connection::Direction direction = Connection::Direction::Z, - const Connection::CTFKind ctf_kind = Connection::CTFKind::DeckValue, - const std::size_t seqIndex = 0, - const double segDistStart= 0.0, - const double segDistEnd= 0.0, - const bool defaultSatTabId = true); - - void loadCOMPDAT(const DeckRecord& record, - const EclipseGrid& grid, - const std::vector& satnum_data, - const std::vector* permx, - const std::vector* permy, - const std::vector* permz, - const std::vector& ntg); - - size_t findClosestConnection(int oi, int oj, double oz, size_t start_pos); - void orderTRACK(); - void orderMSW(); - - Connection::Order m_ordering = Connection::Order::TRACK; - int headI, headJ; - std::vector< Connection > m_connections; - }; -} - - - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Well/WellEconProductionLimits.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Well/WellEconProductionLimits.hpp deleted file mode 100644 index a3f4e91a92..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Well/WellEconProductionLimits.hpp +++ /dev/null @@ -1,140 +0,0 @@ -/* - Copyright 2016 SINTEF ICT, Applied Mathematics. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef WELLECONPRODUCTIONLIMITS_HPP_HEADER_INCLUDED -#define WELLECONPRODUCTIONLIMITS_HPP_HEADER_INCLUDED - -#include - -namespace Opm { - - class DeckRecord; - - class WellEconProductionLimits { - public: - - enum class QuantityLimit { - RATE = 0, - POTN = 1 - }; - - static const std::string QuantityLimit2String(QuantityLimit enumValue); - static QuantityLimit QuantityLimitFromString(const std::string& stringValue); - - - enum class EconWorkover { - NONE = 0, - CON = 1, // CON - CONP = 2, // +CON - WELL = 3, - PLUG = 4, - // the following two only related to workover action - // on exceeding secondary water cut limit - LAST = 5, - RED = 6 - }; - static std::string EconWorkover2String(EconWorkover enumValue); - static EconWorkover EconWorkoverFromString(const std::string& stringValue); - - - explicit WellEconProductionLimits(const DeckRecord& record); - WellEconProductionLimits(); - - static WellEconProductionLimits serializeObject(); - - // TODO: not handling things related to m_secondary_max_water_cut - // for the moment. - - // limit switch on? - bool onAnyEffectiveLimit() const; - bool onAnyRatioLimit() const; - bool onAnyRateLimit() const; - bool onMinOilRate() const; - bool onMinGasRate() const; - bool onMaxWaterCut() const; - bool onMaxGasOilRatio() const; - bool onMaxWaterGasRatio() const; - bool onSecondaryMaxWaterCut() const; - bool onMaxGasLiquidRatio() const; - // assuming Celsius temperature is used internally; - bool onMaxTemperature() const; - bool onMinLiquidRate() const; - bool onMinReservoirFluidRate() const; - // not sure what will happen if the followon well is a well does not exist.; - bool validFollowonWell() const; - bool requireWorkover() const; - bool requireSecondaryWorkover() const; - bool endRun() const; - double minOilRate() const; - double minGasRate() const; - double maxWaterCut() const; - double maxGasOilRatio() const; - double maxWaterGasRatio() const; - EconWorkover workover() const; - const std::string& followonWell() const; - QuantityLimit quantityLimit() const; - double maxSecondaryMaxWaterCut() const; - EconWorkover workoverSecondary() const; - double maxGasLiquidRatio() const; - double minLiquidRate() const; - double maxTemperature() const; - double minReservoirFluidRate() const; - bool operator==(const WellEconProductionLimits& other) const; - bool operator!=(const WellEconProductionLimits& other) const; - - template - void serializeOp(Serializer& serializer) - { - serializer(m_min_oil_rate); - serializer(m_min_gas_rate); - serializer(m_max_water_cut); - serializer(m_max_gas_oil_ratio); - serializer(m_max_water_gas_ratio); - serializer(m_workover); - serializer(m_end_run); - serializer(m_followon_well); - serializer(m_quantity_limit); - serializer(m_secondary_max_water_cut); - serializer(m_workover_secondary); - serializer(m_max_gas_liquid_ratio); - serializer(m_min_liquid_rate); - serializer(m_max_temperature); - serializer(m_min_reservoir_fluid_rate); - } - - private: - double m_min_oil_rate; - double m_min_gas_rate; - double m_max_water_cut; - double m_max_gas_oil_ratio; - double m_max_water_gas_ratio; - EconWorkover m_workover; - bool m_end_run; - std::string m_followon_well; - QuantityLimit m_quantity_limit; - double m_secondary_max_water_cut; - EconWorkover m_workover_secondary; - double m_max_gas_liquid_ratio; - double m_min_liquid_rate; - double m_max_temperature; - double m_min_reservoir_fluid_rate; - }; -} // namespace Opm - -#endif // WELLECONPRODUCTIONLIMITS_HPP_HEADER_INCLUDED diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Well/WellFoamProperties.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Well/WellFoamProperties.hpp deleted file mode 100644 index 9c340a9464..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Well/WellFoamProperties.hpp +++ /dev/null @@ -1,46 +0,0 @@ -/* - Copyright 2019 SINTEF Digital, Mathematics and Cybernetics. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef OPM_WELLFOAMPROPERTIES_HEADER_INCLUDED -#define OPM_WELLFOAMPROPERTIES_HEADER_INCLUDED - -namespace Opm -{ - -class DeckRecord; - -struct WellFoamProperties -{ - static WellFoamProperties serializeObject(); - - double m_foamConcentration = 0.0; - void handleWFOAM(const DeckRecord& rec); - bool operator==(const WellFoamProperties& other) const; - bool operator!=(const WellFoamProperties& other) const; - - template - void serializeOp(Serializer& serializer) - { - serializer(m_foamConcentration); - } -}; - -} // namespace Opm - -#endif // OPM_WELLFOAMPROPERTIES_HEADER_INCLUDED diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Well/WellInjectionProperties.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Well/WellInjectionProperties.hpp deleted file mode 100644 index 9f4bf6152c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Well/WellInjectionProperties.hpp +++ /dev/null @@ -1,34 +0,0 @@ -/* - Copyright 2014 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef WELLINJECTIONPROPERTIES_HPP_HEADER_INCLUDED -#define WELLINJECTIONPROPERTIES_HPP_HEADER_INCLUDED - - -namespace Opm { - - class DeckRecord; - class UnitSystem; - class SummaryState; - class UDQActive; - class UDQConfig; - -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Well/WellPolymerProperties.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Well/WellPolymerProperties.hpp deleted file mode 100644 index b069698b89..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Well/WellPolymerProperties.hpp +++ /dev/null @@ -1,55 +0,0 @@ -/* - Copyright 2014 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef WELLPOLYMERPROPERTIES_HPP_HEADER_INCLUDED -#define WELLPOLYMERPROPERTIES_HPP_HEADER_INCLUDED - - -namespace Opm { - - class DeckRecord; - - struct WellPolymerProperties { - double m_polymerConcentration = 0.0; - double m_saltConcentration = 0.0; - int m_plymwinjtable = -1; - int m_skprwattable = -1; - int m_skprpolytable = -1; - - static WellPolymerProperties serializeObject(); - - bool operator==(const WellPolymerProperties& other) const; - bool operator!=(const WellPolymerProperties& other) const; - void handleWPOLYMER(const DeckRecord& record); - void handleWPMITAB(const DeckRecord& record); - void handleWSKPTAB(const DeckRecord& record); - - template - void serializeOp(Serializer& serializer) - { - serializer(m_polymerConcentration); - serializer(m_saltConcentration); - serializer(m_plymwinjtable); - serializer(m_skprwattable); - serializer(m_skprpolytable); - } - }; -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Well/WellProductionProperties.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Well/WellProductionProperties.hpp deleted file mode 100644 index b592fbad6c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Well/WellProductionProperties.hpp +++ /dev/null @@ -1,32 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef WELLPRODUCTIONPROPERTIES_HPP_HEADER_INCLUDED -#define WELLPRODUCTIONPROPERTIES_HPP_HEADER_INCLUDED - -namespace Opm { - - class DeckRecord; - class SummaryState; - class UDQActive; - - -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Well/WellTestConfig.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Well/WellTestConfig.hpp deleted file mode 100644 index 1a7ec98273..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Well/WellTestConfig.hpp +++ /dev/null @@ -1,103 +0,0 @@ -/* - Copyright 2018 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ -#ifndef WELLTEST_CONFIG_H -#define WELLTEST_CONFIG_H - -#include -#include -#include - - -namespace Opm { - -class WellTestConfig { -public: - enum Reason { - PHYSICAL = 1, - ECONOMIC = 2, - GROUP = 4, - THP_DESIGN=8, - COMPLETION=16, - }; - - struct WTESTWell { - std::string name; - Reason shut_reason; - double test_interval; - int num_test; - double startup_time; - // the related WTEST keywords is entered and will begin - // taking effects since this report step - int begin_report_step; - - bool operator==(const WTESTWell& data) const { - return name == data.name && - shut_reason == data.shut_reason && - test_interval == data.test_interval && - num_test == data.num_test && - startup_time == data.startup_time && - begin_report_step == data.begin_report_step; - } - - template - void serializeOp(Serializer& serializer) - { - serializer(name); - serializer(shut_reason); - serializer(test_interval); - serializer(num_test); - serializer(startup_time); - serializer(begin_report_step); - } - }; - - WellTestConfig(); - - static WellTestConfig serializeObject(); - - void add_well(const std::string& well, Reason reason, double test_interval, int num_test, double startup_time, int current_step); - void add_well(const std::string& well, const std::string& reasons, double test_interval, - int num_test, double startup_time, int current_step); - void drop_well(const std::string& well); - bool has(const std::string& well) const; - bool has(const std::string& well, Reason reason) const; - const WTESTWell& get(const std::string& well, Reason reason) const; - size_t size() const; - - static std::string reasonToString(const Reason reason); - - bool operator==(const WellTestConfig& data) const; - - template - void serializeOp(Serializer& serializer) - { - serializer.vector(wells); - } - -private: - std::vector wells; - - WTESTWell* getWell(const std::string& well_name, const Reason reason); -}; - - -} - -#endif - diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Well/WellTestState.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Well/WellTestState.hpp deleted file mode 100644 index e03f561020..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Well/WellTestState.hpp +++ /dev/null @@ -1,141 +0,0 @@ -/* - Copyright 2018 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ -#ifndef WELLTEST_STATE_H -#define WELLTEST_STATE_H - -#include -#include -#include - -#include -#include - -namespace Opm { - -class WellTestState { -public: - /* - This class implements a small mutable state object which keeps track of - which wells have been automatically closed by the simulator, and by - checking with the WTEST configuration object the class can return a list - (well_name,reason) pairs for wells which should be checked as candiates - for opening. - */ - - - - struct WTestWell { - std::string name; - WellTestConfig::Reason reason; - // the well can be re-opened if the well testing is successful. We only test when it is closed. - bool closed; - // it can be the time of last test, - // or the time that the well is closed if not test has not been performed after - double last_test; - int num_attempt; - // if there is a WTEST setup for well testing, - // it will be the report step that WTEST is specified. - // if no, it is -1, which indicates we do not know the associated WTEST yet, - // or there is not associated WTEST request - int wtest_report_step; - }; - - - struct ClosedCompletion { - std::string wellName; - int complnum; - double last_test; - int num_attempt; - }; - - /* - The simulator has decided to close a particular well; we then add it here - as a closed well with a particualar reason. - */ - void closeWell(const std::string& well_name, WellTestConfig::Reason reason, double sim_time); - - /* - The simulator has decided to close a particular completion in a well; we then add it here - as a closed completions - */ - void addClosedCompletion(const std::string& well_name, int complnum, double sim_time); - - /* - The update will consult the WellTestConfig object and return a list of - wells which should be checked for possible reopening; observe that the - update method will update the internal state of the object by counting up - the openiing attempts, and also set the time for the last attempt to open. - */ - std::vector> updateWells(const WellTestConfig& config, - const std::vector& wells_ecl, - double sim_time); - - /* - The update will consult the WellTestConfig object and return a list of - completions which should be checked for possible reopening; observe that the - update method will update the internal state of the object by counting up - the openiing attempts, and also set the time for the last attempt to open. - */ - std::vector> updateCompletion(const WellTestConfig& config, double sim_time); - - /* - If the simulator decides that a constraint is no longer met the dropCompletion() - method should be called to indicate that this reason for keeping the well - closed is no longer active. - */ - void dropCompletion(const std::string& well_name, int complnum); - - bool hasWellClosed(const std::string& well_name, WellTestConfig::Reason reason) const; - - /* whether there is a well with the well_name closed in the WellTestState, - * no matter what is the closing cause */ - bool hasWellClosed(const std::string& well_name) const; - - void openWell(const std::string& well_name, WellTestConfig::Reason reason); - - /* open the well no matter what is the closing cause. - * it is used when WELOPEN or WCON* keyword request to open the well */ - void openWell(const std::string& well_name); - - - bool hasCompletion(const std::string& well_name, const int complnum) const; - - size_t sizeWells() const; - size_t sizeCompletions() const; - - /* - Return the last tested time for the well, or throw if no such well. - */ - double lastTestTime(const std::string& well_name) const; - -private: - std::vector wells; - std::vector completions; - - - WTestWell* getWell(const std::string& well_name, WellTestConfig::Reason reason); - - void updateForNewWTEST(const WellTestConfig& config); -}; - - -} - -#endif - diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Well/WellTracerProperties.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Well/WellTracerProperties.hpp deleted file mode 100644 index 85b86d14cb..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Schedule/Well/WellTracerProperties.hpp +++ /dev/null @@ -1,51 +0,0 @@ -/* - Copyright 2018 NORCE. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef WELLTRACERPROPERTIES_HPP_HEADER_INCLUDED -#define WELLTRACERPROPERTIES_HPP_HEADER_INCLUDED -#include -#include -#include - -namespace Opm { - - class WellTracerProperties { - - public: - static WellTracerProperties serializeObject(); - - void setConcentration(const std::string& name, const double& concentration); - double getConcentration(const std::string& name) const; - - bool operator==(const WellTracerProperties& other) const; - bool operator!=(const WellTracerProperties& other) const; - - template - void serializeOp(Serializer& serializer) - { - serializer(m_tracerConcentrations); - } - - private: - std::map m_tracerConcentrations; - }; - -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/SimulationConfig/BCConfig.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/SimulationConfig/BCConfig.hpp deleted file mode 100644 index 352ab1a5e2..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/SimulationConfig/BCConfig.hpp +++ /dev/null @@ -1,109 +0,0 @@ -/* - Copyright 2020 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#ifndef OPM_BCCONFIG_HPP -#define OPM_BCCONFIG_HPP - -#include -#include - -#include - - -namespace Opm { - -class Deck; -class DeckRecord; - -enum class BCType { - RATE, - FREE -}; - -enum class BCComponent { - OIL, - GAS, - WATER, - SOLVENT, - POLYMER, - NONE -}; - - -class BCConfig { -public: - - struct BCFace { - int i1,i2; - int j1,j2; - int k1,k2; - BCType bctype; - FaceDir::DirEnum dir; - BCComponent component; - double rate; - - BCFace() = default; - BCFace(const DeckRecord& record); - - static BCFace serializeObject(); - - bool operator==(const BCFace& other) const; - - template - void serializeOp(Serializer& serializer) - { - serializer(i1); - serializer(i2); - serializer(j1); - serializer(j2); - serializer(k1); - serializer(k2); - serializer(bctype); - serializer(dir); - serializer(component); - serializer(rate); - } - }; - - - BCConfig() = default; - explicit BCConfig(const Deck& deck); - - static BCConfig serializeObject(); - - std::size_t size() const; - std::vector::const_iterator begin() const; - std::vector::const_iterator end() const; - bool operator==(const BCConfig& other) const; - - template - void serializeOp(Serializer& serializer) - { - serializer.vector(m_faces); - } - -private: - std::vector m_faces; -}; - -} //namespace Opm - - - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/SimulationConfig/RockConfig.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/SimulationConfig/RockConfig.hpp deleted file mode 100644 index d79d3b2624..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/SimulationConfig/RockConfig.hpp +++ /dev/null @@ -1,98 +0,0 @@ -/* - Copyright 2020 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#ifndef OPM_ROCK_CONFIG_HPP -#define OPM_ROCK_CONFIG_HPP - -#include -#include - -namespace Opm { - -class Deck; -class FieldPropsManager; - -class RockConfig { -public: - -enum class Hysteresis { - REVERS = 1, - IRREVERS = 2, - HYSTER = 3, - BOBERG = 4, - REVLIMIT = 5, - PALM_MAN = 6, - NONE = 7 -}; - - -struct RockComp { - double pref; - double compressibility; - - RockComp() = default; - RockComp(double pref_arg, double comp_arg); - bool operator==(const RockComp& other) const; - - template - void serializeOp(Serializer& serializer) - { - serializer(pref); - serializer(compressibility); - } -}; - - - RockConfig() = default; - RockConfig(const Deck& deck, const FieldPropsManager& fp); - - static RockConfig serializeObject(); - - bool active() const; - const std::vector& comp() const; - const std::string& rocknum_property() const; - std::size_t num_rock_tables() const; - Hysteresis hysteresis_mode() const; - bool water_compaction() const; - - bool operator==(const RockConfig& other) const; - - template - void serializeOp(Serializer& serializer) - { - serializer(m_active); - serializer.vector(m_comp); - serializer(num_property); - serializer(num_tables); - serializer(m_water_compaction); - serializer(hyst_mode); - } - -private: - bool m_active = false; - std::vector m_comp; - std::string num_property = ParserKeywords::ROCKOPTS::TABLE_TYPE::defaultValue; - std::size_t num_tables = ParserKeywords::ROCKCOMP::NTROCC::defaultValue; - bool m_water_compaction; - Hysteresis hyst_mode; -}; - -} //namespace Opm - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/SimulationConfig/SimulationConfig.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/SimulationConfig/SimulationConfig.hpp deleted file mode 100644 index ba926a7723..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/SimulationConfig/SimulationConfig.hpp +++ /dev/null @@ -1,80 +0,0 @@ -/* - Copyright 2015 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#ifndef OPM_SIMULATION_CONFIG_HPP -#define OPM_SIMULATION_CONFIG_HPP - -#include -#include -#include - -namespace Opm { - - class Deck; - class FieldPropsManager; - - class SimulationConfig { - - public: - - SimulationConfig(); - SimulationConfig(bool restart, - const Deck& deck, - const FieldPropsManager& fp); - - static SimulationConfig serializeObject(); - - const RockConfig& rock_config() const; - const ThresholdPressure& getThresholdPressure() const; - const BCConfig& bcconfig() const; - bool useThresholdPressure() const; - bool useCPR() const; - bool hasDISGAS() const; - bool hasVAPOIL() const; - bool isThermal() const; - - bool operator==(const SimulationConfig& data) const; - - template - void serializeOp(Serializer& serializer) - { - m_ThresholdPressure.serializeOp(serializer); - m_bcconfig.serializeOp(serializer); - m_rock_config.serializeOp(serializer); - serializer(m_useCPR); - serializer(m_DISGAS); - serializer(m_VAPOIL); - serializer(m_isThermal); - } - - private: - ThresholdPressure m_ThresholdPressure; - BCConfig m_bcconfig; - RockConfig m_rock_config; - bool m_useCPR; - bool m_DISGAS; - bool m_VAPOIL; - bool m_isThermal; - }; - -} //namespace Opm - - - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/SimulationConfig/ThresholdPressure.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/SimulationConfig/ThresholdPressure.hpp deleted file mode 100644 index 00d4c41c23..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/SimulationConfig/ThresholdPressure.hpp +++ /dev/null @@ -1,100 +0,0 @@ -/* - Copyright 2015 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#ifndef OPM_TRESHOLD_PRESSURES_HPP -#define OPM_TRESHOLD_PRESSURES_HPP - -#include -#include - -namespace Opm { - - - class Deck; - class FieldPropsManager; - - class ThresholdPressure { - - public: - using ThresholdPressureTable = std::vector>; - using PressureTable = std::map,std::pair>; - - ThresholdPressure(bool restart, - const Deck& deck, - const FieldPropsManager& fp); - - ThresholdPressure() { m_active = m_restart = false; } - - //! \brief Returns an instance for serialization tests. - static ThresholdPressure serializeObject(); - - /* - The hasRegionBarrier() method checks if a threshold pressure - has been configured between the equilibration regions r1 and - r2; i.e. if the deck contains a THPRES record with regions - r1 and r2. - */ - bool hasRegionBarrier(int r1 , int r2) const; - - /* - Checks if a threshold presssure has been configured between - the equilibration regions r1 and r2; the function will - return false either if no THPRES record with r1 and r2 has - been configured - or if THPRES record with ra and r2 has - defaulted pressure. - */ - bool hasThresholdPressure(int r1 , int r2) const; - - /* - Will return the threshold pressure between equilibration - regions r1 and r2; if the pressure has been defaulted the - function will raise the error - INTERNAL_ERROR_UNINITIALIZED_THPRES - check with - hasThresholdPressure(r1,r2) first to be safe. - */ - double getThresholdPressure(int r1 , int r2) const; - size_t size() const; - bool active() const; - bool restart() const; - - bool operator==(const ThresholdPressure& data) const; - - template - void serializeOp(Serializer& serializer) - { - serializer(m_active); - serializer(m_restart); - serializer(m_thresholdPressureTable); - serializer(m_pressureTable); - } - - private: - bool m_active; - bool m_restart; - static std::pair makeIndex(int r1 , int r2); - void addPair(int r1 , int r2 , const std::pair& valuePair); - void addBarrier(int r1 , int r2); - void addBarrier(int r1 , int r2 , double p); - - std::vector> m_thresholdPressureTable; - std::map , std::pair > m_pressureTable; - }; -} //namespace Opm - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/SummaryConfig/SummaryConfig.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/SummaryConfig/SummaryConfig.hpp deleted file mode 100644 index 077d983819..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/SummaryConfig/SummaryConfig.hpp +++ /dev/null @@ -1,221 +0,0 @@ -/* - Copyright 2015 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#ifndef OPM_SUMMARY_CONFIG_HPP -#define OPM_SUMMARY_CONFIG_HPP - -#include -#include -#include -#include -#include - -#include -#include - -namespace Opm { - - /* - Very small utility class to get value semantics on the smspec_node - pointers. This should die as soon as the smspec_node class proper gets - value semantics. - */ - - class SummaryConfigNode { - public: - using Category = Opm::EclIO::SummaryNode::Category; - using Type = Opm::EclIO::SummaryNode::Type; - - SummaryConfigNode() = default; - explicit SummaryConfigNode(std::string keyword, const Category cat, Location loc_arg); - - static SummaryConfigNode serializeObject(); - - SummaryConfigNode& parameterType(const Type type); - SummaryConfigNode& namedEntity(std::string name); - SummaryConfigNode& number(const int num); - SummaryConfigNode& isUserDefined(const bool userDefined); - - const std::string& keyword() const { return this->keyword_; } - Category category() const { return this->category_; } - Type type() const { return this->type_; } - const std::string& namedEntity() const { return this->name_; } - int number() const { return this->number_; } - bool isUserDefined() const { return this->userDefined_; } - - std::string uniqueNodeKey() const; - const Location& location( ) const { return this->loc; } - - operator Opm::EclIO::SummaryNode() const { - return { keyword_, category_, type_, name_, number_, "", -1, -1, -1, std::numeric_limits::max() }; - } - - template - void serializeOp(Serializer& serializer) - { - serializer(keyword_); - serializer(category_); - loc.serializeOp(serializer); - serializer(type_); - serializer(name_); - serializer(number_); - serializer(userDefined_); - } - - private: - std::string keyword_; - Category category_; - Location loc; - Type type_{ Type::Undefined }; - std::string name_{}; - int number_{std::numeric_limits::min()}; - bool userDefined_{false}; - }; - - SummaryConfigNode::Category parseKeywordCategory(const std::string& keyword); - - bool operator==(const SummaryConfigNode& lhs, const SummaryConfigNode& rhs); - bool operator<(const SummaryConfigNode& lhs, const SummaryConfigNode& rhs); - - inline bool operator!=(const SummaryConfigNode& lhs, const SummaryConfigNode& rhs) - { - return ! (lhs == rhs); - } - - inline bool operator<=(const SummaryConfigNode& lhs, const SummaryConfigNode& rhs) - { - return ! (rhs < lhs); - } - - inline bool operator>(const SummaryConfigNode& lhs, const SummaryConfigNode& rhs) - { - return rhs < lhs; - } - - inline bool operator>=(const SummaryConfigNode& lhs, const SummaryConfigNode& rhs) - { - return ! (lhs < rhs); - } - - class Deck; - class ErrorGuard; - class GridDims; - class ParseContext; - class Schedule; - class TableManager; - - class SummaryConfig { - public: - typedef SummaryConfigNode keyword_type; - typedef std::vector< keyword_type > keyword_list; - typedef keyword_list::const_iterator const_iterator; - - SummaryConfig() = default; - SummaryConfig( const Deck&, - const Schedule&, - const TableManager&, - const ParseContext&, - ErrorGuard&); - - template - SummaryConfig( const Deck&, - const Schedule&, - const TableManager&, - const ParseContext&, - T&&); - - SummaryConfig( const Deck&, - const Schedule&, - const TableManager&); - - SummaryConfig(const keyword_list& kwds, - const std::set& shortKwds, - const std::set& smryKwds); - - static SummaryConfig serializeObject(); - - const_iterator begin() const; - const_iterator end() const; - size_t size() const; - SummaryConfig& merge( const SummaryConfig& ); - SummaryConfig& merge( SummaryConfig&& ); - - /* - The hasKeyword() method will consult the internal set - 'short_keywords', i.e. the query should be based on pure - keywords like 'WWCT' and 'BPR' - and *not* fully - identifiers like 'WWCT:OPX' and 'BPR:10,12,3'. - */ - bool hasKeyword( const std::string& keyword ) const; - - /* - The hasSummaryKey() method will look for fully - qualified keys like 'RPR:3' and 'BPR:10,15,20. - */ - bool hasSummaryKey(const std::string& keyword ) const; - /* - Can be used to query if a certain 3D field, e.g. PRESSURE, - is required to calculate the summary variables. - */ - bool require3DField( const std::string& keyword) const; - bool requireFIPNUM( ) const; - - bool operator==(const SummaryConfig& data) const; - - template - void serializeOp(Serializer& serializer) - { - serializer.vector(keywords); - serializer(short_keywords); - serializer(summary_keywords); - } - - bool createRunSummary() const { - return runSummaryConfig.create; - } - - private: - SummaryConfig( const Deck& deck, - const Schedule& schedule, - const TableManager& tables, - const ParseContext& parseContext, - ErrorGuard& errors, - const GridDims& dims); - - /* - The short_keywords set contains only the pure keyword - part, e.g. "WWCT", and not the qualification with - well/group name or a numerical value. - */ - keyword_list keywords; - std::set short_keywords; - std::set summary_keywords; - - struct { - bool create { false }; - bool narrow { false }; - bool separate { true }; - } runSummaryConfig; - - void handleProcessingInstruction(const std::string& keyword); - }; - -} //namespace Opm - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/Aqudims.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/Aqudims.hpp deleted file mode 100644 index 1a8a6f457f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/Aqudims.hpp +++ /dev/null @@ -1,152 +0,0 @@ -/* - Copyright (C) 2017 TNO - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#ifndef AQUDIMS_HPP -#define AQUDIMS_HPP - -/* - The Aqudims class is a small utility class designed to hold on to - the values from the AQUDIMS keyword. -*/ - -#include -#include -#include -#include - -namespace Opm { - class Aqudims { - public: - - Aqudims() : - m_mxnaqn( ParserKeywords::AQUDIMS::MXNAQN::defaultValue ), - m_mxnaqc( ParserKeywords::AQUDIMS::MXNAQC::defaultValue ), - m_niftbl( ParserKeywords::AQUDIMS::NIFTBL::defaultValue ), - m_nriftb( ParserKeywords::AQUDIMS::NRIFTB::defaultValue ), - m_nanaqu( ParserKeywords::AQUDIMS::NANAQU::defaultValue ), - m_ncamax( ParserKeywords::AQUDIMS::NCAMAX::defaultValue ), - m_mxnali( ParserKeywords::AQUDIMS::MXNALI::defaultValue ), - m_mxaaql( ParserKeywords::AQUDIMS::MXAAQL::defaultValue ) - - { } - - explicit Aqudims(const Deck& deck) : - Aqudims() - { - if (deck.hasKeyword("AQUDIMS")) { - const auto& record = deck.getKeyword( "AQUDIMS" , 0 ).getRecord( 0 ); - m_mxnaqn = record.getItem("MXNAQN").get(0); - m_mxnaqc = record.getItem("MXNAQC").get(0); - m_niftbl = record.getItem("NIFTBL").get(0); - m_nriftb = record.getItem("NRIFTB").get(0); - m_nanaqu = record.getItem("NANAQU").get(0); - m_ncamax = record.getItem("NCAMAX").get(0); - m_mxnali = record.getItem("MXNALI").get(0); - m_mxaaql = record.getItem("MXAAQL").get(0); - } - } - - static Aqudims serializeObject() - { - Aqudims result; - result.m_mxnaqn = 1; - result.m_mxnaqc = 2; - result.m_niftbl = 3; - result.m_nriftb = 4; - result.m_nanaqu = 5; - result.m_ncamax = 6; - result.m_mxnali = 7; - result.m_mxaaql = 8; - - return result; - } - - size_t getNumAqunum() const - { - return m_mxnaqn; - } - - size_t getNumConnectionNumericalAquifer() const - { - return m_mxnaqc; - } - - size_t getNumInfluenceTablesCT() const - { - return m_niftbl; - } - - size_t getNumRowsInfluenceTable() const - { - return m_nriftb; - } - - size_t getNumAnalyticAquifers() const - { - return m_nanaqu; - } - - size_t getNumRowsAquancon() const - { - return m_ncamax; - } - - size_t getNumAquiferLists() const - { - return m_mxnali; - } - - size_t getNumAnalyticAquifersSingleList() const - { - return m_mxaaql; - } - - bool operator==(const Aqudims& data) const - { - return m_mxnaqn == data.m_mxnaqn && - m_mxnaqc == data.m_mxnaqc && - m_niftbl == data.m_niftbl && - m_nriftb == data.m_nriftb && - m_nanaqu == data.m_nanaqu && - m_ncamax == data.m_ncamax && - m_mxnali == data.m_mxnali && - m_mxaaql == data.m_mxaaql; - } - - template - void serializeOp(Serializer& serializer) - { - serializer(m_mxnaqn); - serializer(m_mxnaqc); - serializer(m_niftbl); - serializer(m_nriftb); - serializer(m_nanaqu); - serializer(m_ncamax); - serializer(m_mxnali); - serializer(m_mxaaql); - } - - private: - size_t m_mxnaqn , m_mxnaqc , m_niftbl , m_nriftb , m_nanaqu , m_ncamax , m_mxnali , m_mxaaql; - - }; -} - - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/AqutabTable.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/AqutabTable.hpp deleted file mode 100644 index bf2b74509f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/AqutabTable.hpp +++ /dev/null @@ -1,37 +0,0 @@ -/* - Copyright (C) 2017 TNO - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ -#ifndef OPM_PARSER_AQUTAB_TABLE_HPP -#define OPM_PARSER_AQUTAB_TABLE_HPP - -#include "SimpleTable.hpp" - -namespace Opm { - - class DeckItem; - - class AqutabTable : public SimpleTable { - public: - AqutabTable( const DeckItem& item ); - - const TableColumn& getTimeColumn() const; - const TableColumn& getPressureColumn() const; - }; -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/BrineDensityTable.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/BrineDensityTable.hpp deleted file mode 100644 index c14f85fe0f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/BrineDensityTable.hpp +++ /dev/null @@ -1,59 +0,0 @@ -/* - Copyright (C) 2015 Statoil ASA. - 2015 IRIS AS - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ -#ifndef OPM_PARSER_BRINEDENSITY_TABLE_HPP -#define OPM_PARSER_BRINEDENSITY_TABLE_HPP - -namespace Opm { - - class DeckItem; - - class BrineDensityTable { - public: - static BrineDensityTable serializeObject(); - - void init(const Opm::DeckRecord& record); - const std::vector& getBrineDensityColumn() const; - - bool operator==(const BrineDensityTable& data) const; - - std::vector::const_iterator begin() const { - return m_tableValues.begin(); - } - - std::vector::const_iterator end() const { - return m_tableValues.end(); - } - - std::size_t size() const { - return this->m_tableValues.size(); - } - - template - void serializeOp(Serializer& serializer) - { - serializer(m_tableValues); - } - - private: - std::vector m_tableValues; - }; -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/ColumnSchema.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/ColumnSchema.hpp deleted file mode 100644 index 67df736b0f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/ColumnSchema.hpp +++ /dev/null @@ -1,68 +0,0 @@ -/* - Copyright 2015 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - - -#ifndef OPM_COLUMN_SCHEMA_HPP -#define OPM_COLUMN_SCHEMA_HPP - -#include -#include - -#include - -namespace Opm { - - class ColumnSchema { - public: - ColumnSchema(); - ColumnSchema(const std::string& name , Table::ColumnOrderEnum order, Table::DefaultAction defaultAction); - ColumnSchema(const std::string& name , Table::ColumnOrderEnum order, double defaultValue); - - static ColumnSchema serializeObject(); - - const std::string& name() const; - bool validOrder( double value1 , double value2) const; - bool lookupValid( ) const; - bool acceptsDefault( ) const; - bool isIncreasing( ) const; - bool isDecreasing( ) const; - Table::DefaultAction getDefaultMode( ) const; - double getDefaultValue( ) const; - - bool operator==(const ColumnSchema& data) const; - - template - void serializeOp(Serializer& serializer) - { - serializer(m_name); - serializer(m_order); - serializer(m_defaultAction); - serializer(m_defaultValue); - } - - private: - std::string m_name; - Table::ColumnOrderEnum m_order; - Table::DefaultAction m_defaultAction; - double m_defaultValue; - }; -} - -#endif - diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/DenT.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/DenT.hpp deleted file mode 100644 index dd78049e63..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/DenT.hpp +++ /dev/null @@ -1,72 +0,0 @@ -/* - Copyright (C) 2020 by Equinor - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ -#ifndef OPM_PARSER_DENT_HPP -#define OPM_PARSER_DENT_HPP - -#include -#include - -namespace Opm { - - class DeckKeyword; - class DeckRecord; - - class DenT { - public: - - struct entry { - double T0; - double C1; - double C2; - - entry() = default; - entry(double T0_, double C1_, double C2_); - explicit entry(const DeckRecord& record); - bool operator==(const entry& other) const; - - template - void serializeOp(Serializer& serializer) - { - serializer(T0); - serializer(C1); - serializer(C2); - } - }; - - DenT() = default; - explicit DenT(const DeckKeyword& keyword); - - static DenT serializeObject(); - - const entry& operator[](const std::size_t index) const; - bool operator==(const DenT& other) const; - std::size_t size() const; - - template - void serializeOp(Serializer& serializer) - { - serializer.vector(m_records); - } - - private: - std::vector m_records; - }; -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/EnkrvdTable.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/EnkrvdTable.hpp deleted file mode 100644 index d3163d0319..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/EnkrvdTable.hpp +++ /dev/null @@ -1,81 +0,0 @@ -/* - Copyright (C) 2014 by Andreas Lauser - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ -#ifndef OPM_PARSER_ENKRVD_TABLE_HPP -#define OPM_PARSER_ENKRVD_TABLE_HPP - -#include "SimpleTable.hpp" - -namespace Opm { - - class DeckItem; - - class EnkrvdTable : public SimpleTable { - public: - - EnkrvdTable( const DeckItem& item ); - - - // using this method is strongly discouraged but the current endpoint scaling - // code makes it hard to avoid - using SimpleTable::getColumn; - - /*! - * \brief The datum depth for the remaining columns - */ - const TableColumn& getDepthColumn() const; - - /*! - * \brief Maximum relative permeability of water - */ - const TableColumn& getKrwmaxColumn() const; - - /*! - * \brief Maximum relative permeability of gas - */ - const TableColumn& getKrgmaxColumn() const; - - /*! - * \brief Maximum relative permeability of oil - */ - const TableColumn& getKromaxColumn() const; - - /*! - * \brief Relative permeability of water at the critical oil (or gas) saturation - */ - const TableColumn& getKrwcritColumn() const; - - /*! - * \brief Relative permeability of gas at the critical oil (or water) saturation - */ - const TableColumn& getKrgcritColumn() const; - - /*! - * \brief Oil relative permeability of oil at the critical gas saturation - */ - const TableColumn& getKrocritgColumn() const; - - /*! - * \brief Oil relative permeability of oil at the critical water saturation - */ - const TableColumn& getKrocritwColumn() const; - }; -} - -#endif - diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/EnptvdTable.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/EnptvdTable.hpp deleted file mode 100644 index d45c61b5aa..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/EnptvdTable.hpp +++ /dev/null @@ -1,81 +0,0 @@ -/* - Copyright (C) 2014 by Andreas Lauser - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ -#ifndef OPM_PARSER_ENPTVD_TABLE_HPP -#define OPM_PARSER_ENPTVD_TABLE_HPP - -#include "SimpleTable.hpp" - -namespace Opm { - - class DeckItem; - - class EnptvdTable : public SimpleTable { - public: - EnptvdTable( const DeckItem& item ); - - // using this method is strongly discouraged but the current endpoint scaling - // code makes it hard to avoid - using SimpleTable::getColumn; - - const TableColumn& getDepthColumn() const; - - /*! - * \brief Connate water saturation - */ - const TableColumn& getSwcoColumn() const; - - /*! - * \brief Critical water saturation - */ - const TableColumn& getSwcritColumn() const; - - /*! - * \brief Maximum water saturation - */ - const TableColumn& getSwmaxColumn() const; - - /*! - * \brief Connate gas saturation - */ - const TableColumn& getSgcoColumn() const; - - /*! - * \brief Critical gas saturation - */ - const TableColumn& getSgcritColumn() const; - - /*! - * \brief Maximum gas saturation - */ - const TableColumn& getSgmaxColumn() const; - - /*! - * \brief Critical oil-in-water saturation - */ - const TableColumn& getSowcritColumn() const; - - /*! - * \brief Critical oil-in-gas saturation - */ - const TableColumn& getSogcritColumn() const; - }; -} - -#endif - diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/Eqldims.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/Eqldims.hpp deleted file mode 100644 index 0b26a85bd0..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/Eqldims.hpp +++ /dev/null @@ -1,108 +0,0 @@ -/* - Copyright (C) 2015 Statoil ASA - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#ifndef EQLDIMS_HPP -#define EQLDIMS_HPP - -/* - The Eqldims class is a small utility class designed to hold on to - the values from the EQLDIMS keyword. -*/ - -#include - -namespace Opm { - class Eqldims { - public: - - Eqldims() : - m_ntequl( ParserKeywords::EQLDIMS::NTEQUL::defaultValue ), - m_depth_nodes_p( ParserKeywords::EQLDIMS::DEPTH_NODES_P::defaultValue ), - m_depth_nodes_tab( ParserKeywords::EQLDIMS::DEPTH_NODES_TAB::defaultValue ), - m_nttrvd( ParserKeywords::EQLDIMS::NTTRVD::defaultValue ), - m_nstrvd( ParserKeywords::EQLDIMS::NSTRVD::defaultValue ) - { } - - - Eqldims( size_t ntequl , size_t depth_nodes_p , size_t depth_nodes_tab , size_t nttrvd , size_t nstrvd) : - m_ntequl( ntequl ), - m_depth_nodes_p( depth_nodes_p ), - m_depth_nodes_tab( depth_nodes_tab ), - m_nttrvd( nttrvd ), - m_nstrvd( nstrvd ) - { } - - static Eqldims serializeObject() - { - return Eqldims(1, 2, 3, 4, 5); - } - - size_t getNumEquilRegions() const - { - return m_ntequl; - } - - size_t getNumDepthNodesP() const - { - return m_depth_nodes_p; - } - - - size_t getNumDepthNodesTable() const - { - return m_depth_nodes_tab; - } - - size_t getNumTracerTables() const - { - return m_nttrvd; - } - - size_t getNumDepthNodesTracer() const - { - return m_nstrvd; - } - - bool operator==(const Eqldims& data) const - { - return this->getNumEquilRegions() == data.getNumEquilRegions() && - this->getNumDepthNodesP() == data.getNumDepthNodesP() && - this->getNumDepthNodesTable() == data.getNumDepthNodesTable() && - this->getNumTracerTables() == data.getNumTracerTables() && - this->getNumDepthNodesTracer() == data.getNumDepthNodesTracer(); - } - - template - void serializeOp(Serializer& serializer) - { - serializer(m_ntequl); - serializer(m_depth_nodes_p); - serializer(m_depth_nodes_tab); - serializer(m_nttrvd); - serializer(m_nstrvd); - } - - private: - size_t m_ntequl , m_depth_nodes_p , m_depth_nodes_tab , m_nttrvd , m_nstrvd; - - }; -} - - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/FlatTable.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/FlatTable.hpp deleted file mode 100644 index aa604b448d..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/FlatTable.hpp +++ /dev/null @@ -1,354 +0,0 @@ -#ifndef OPM_FLAT_TABLE_HPP -#define OPM_FLAT_TABLE_HPP - -namespace Opm { - -class DeckKeyword; - -template< typename T > -struct FlatTable : public std::vector< T > { - FlatTable() = default; - explicit FlatTable( const DeckKeyword& ); - explicit FlatTable(const std::vector& data) : - std::vector(data) - {} - - template - void serializeOp(Serializer& serializer) - { - serializer.vector(*this); - } -}; - -struct DENSITYRecord { - static constexpr std::size_t size = 3; - - double oil; - double water; - double gas; - - bool operator==(const DENSITYRecord& data) const { - return oil == data.oil && - water == data.water && - gas == data.gas; - } - - template - void serializeOp(Serializer& serializer) - { - serializer(oil); - serializer(water); - serializer(gas); - } -}; - -struct DensityTable : public FlatTable< DENSITYRecord > { - using FlatTable< DENSITYRecord >::FlatTable; - - static DensityTable serializeObject() - { - return DensityTable({{1.0, 2.0, 3.0}}); - } -}; - -struct PVTWRecord { - static constexpr std::size_t size = 5; - - double reference_pressure; - double volume_factor; - double compressibility; - double viscosity; - double viscosibility; - - bool operator==(const PVTWRecord& data) const { - return reference_pressure == data.reference_pressure && - volume_factor == data.volume_factor && - compressibility == data.compressibility && - viscosity == data.viscosity && - viscosibility == data.viscosibility; - } - - template - void serializeOp(Serializer& serializer) - { - serializer(reference_pressure); - serializer(volume_factor); - serializer(compressibility); - serializer(viscosity); - serializer(viscosibility); - } -}; - -struct PvtwTable : public FlatTable< PVTWRecord > { - using FlatTable< PVTWRecord >::FlatTable; - - static PvtwTable serializeObject() - { - return PvtwTable({{1.0, 2.0, 3.0, 4.0, 5.0}}); - } -}; - -struct ROCKRecord { - static constexpr std::size_t size = 2; - - double reference_pressure; - double compressibility; - - bool operator==(const ROCKRecord& data) const { - return reference_pressure == data.reference_pressure && - compressibility == data.compressibility; - } - - template - void serializeOp(Serializer& serializer) - { - serializer(reference_pressure); - serializer(compressibility); - } -}; - -struct RockTable : public FlatTable< ROCKRecord > { - using FlatTable< ROCKRecord >::FlatTable; - - static RockTable serializeObject() - { - return RockTable({{1.0, 2.0}}); - } -}; - -struct PVCDORecord { - static constexpr std::size_t size = 5; - - double reference_pressure; - double volume_factor; - double compressibility; - double viscosity; - double viscosibility; - - bool operator==(const PVCDORecord& data) const { - return reference_pressure == data.reference_pressure && - volume_factor == data.volume_factor && - compressibility == data.compressibility && - viscosity == data.viscosity && - viscosibility == data.viscosibility; - } - - template - void serializeOp(Serializer& serializer) - { - serializer(reference_pressure); - serializer(volume_factor); - serializer(compressibility); - serializer(viscosity); - serializer(viscosibility); - } -}; - -struct PvcdoTable : public FlatTable< PVCDORecord > { - using FlatTable< PVCDORecord >::FlatTable; - - static PvcdoTable serializeObject() - { - return PvcdoTable({{1.0, 2.0, 3.0, 4.0, 5.0}}); - } -}; - -struct PlmixparRecord { - static constexpr std::size_t size = 1; - - double todd_langstaff; - - bool operator==(const PlmixparRecord& data) const { - return todd_langstaff == data.todd_langstaff; - } - - template - void serializeOp(Serializer& serializer) - { - serializer(todd_langstaff); - } -}; - -struct PlmixparTable : public FlatTable< PlmixparRecord> { - using FlatTable< PlmixparRecord >::FlatTable; - - static PlmixparTable serializeObject() - { - return PlmixparTable({PlmixparRecord{1.0}}); - } -}; - -struct PlyvmhRecord { - static constexpr std::size_t size = 4; - - double k_mh; - double a_mh; - double gamma; - double kappa; - - bool operator==(const PlyvmhRecord& data) const { - return k_mh == data.k_mh && - a_mh == data.a_mh && - gamma == data.gamma && - kappa == data.kappa; - } - - template - void serializeOp(Serializer& serializer) - { - serializer(k_mh); - serializer(a_mh); - serializer(gamma); - serializer(kappa); - } -}; - -struct PlyvmhTable : public FlatTable { - using FlatTable< PlyvmhRecord >::FlatTable; - - static PlyvmhTable serializeObject() - { - return PlyvmhTable({{1.0, 2.0, 3.0, 4.0}}); - } -}; - -struct ShrateRecord { - static constexpr std::size_t size = 1; - - double rate; - - bool operator==(const ShrateRecord& data) const { - return rate == data.rate; - } - - template - void serializeOp(Serializer& serializer) - { - serializer(rate); - } -}; - -struct ShrateTable : public FlatTable { - using FlatTable< ShrateRecord >::FlatTable; - - static ShrateTable serializeObject() - { - return ShrateTable({ShrateRecord{1.0}}); - } -}; - -struct Stone1exRecord { - static constexpr std::size_t size = 1; - - double eta; - - bool operator==(const Stone1exRecord& data) const { - return eta == data.eta; - } - - template - void serializeOp(Serializer& serializer) - { - serializer(eta); - } -}; - -struct Stone1exTable : public FlatTable { - using FlatTable< Stone1exRecord >::FlatTable; - - static Stone1exTable serializeObject() - { - return Stone1exTable({Stone1exRecord{1.0}}); - } -}; - -struct TlmixparRecord { - static constexpr std::size_t size = 2; - - double viscosity; - double density; - - bool operator==(const TlmixparRecord& data) const { - return viscosity == data.viscosity && - density == data.density; - } - - template - void serializeOp(Serializer& serializer) - { - serializer(viscosity); - serializer(density); - } -}; - -struct TlmixparTable : public FlatTable< TlmixparRecord> { - using FlatTable< TlmixparRecord >::FlatTable; - - static TlmixparTable serializeObject() - { - return TlmixparTable({{1.0, 2.0}}); - } -}; - -struct VISCREFRecord { - static constexpr std::size_t size = 2; - - double reference_pressure; - double reference_rs; - - bool operator==(const VISCREFRecord& data) const { - return reference_pressure == data.reference_pressure && - reference_rs == data.reference_rs; - } - - template - void serializeOp(Serializer& serializer) - { - serializer(reference_pressure); - serializer(reference_rs); - } -}; - -struct ViscrefTable : public FlatTable< VISCREFRecord > { - using FlatTable< VISCREFRecord >::FlatTable; - - static ViscrefTable serializeObject() - { - return ViscrefTable({{1.0, 2.0}}); - } -}; - -struct WATDENTRecord { - static constexpr std::size_t size = 3; - - double reference_temperature; - double first_coefficient; - double second_coefficient; - - bool operator==(const WATDENTRecord& data) const { - return reference_temperature == data.reference_temperature && - first_coefficient == data.first_coefficient && - second_coefficient == data.second_coefficient; - } - - template - void serializeOp(Serializer& serializer) - { - serializer(reference_temperature); - serializer(first_coefficient); - serializer(second_coefficient); - } -}; - -struct WatdentTable : public FlatTable< WATDENTRecord > { - using FlatTable< WATDENTRecord >::FlatTable; - - static WatdentTable serializeObject() - { - return WatdentTable({{1.0, 2.0, 3.0}}); - } -}; - -} - -#endif //OPM_FLAT_TABLE_HPP diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/FoamadsTable.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/FoamadsTable.hpp deleted file mode 100644 index 25fc939295..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/FoamadsTable.hpp +++ /dev/null @@ -1,38 +0,0 @@ -/* - Copyright (C) 2014 by Andreas Lauser - Copyright (C) 2019 SINTEF Digital - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ -#ifndef OPM_PARSER_FOAMADS_TABLE_HPP -#define OPM_PARSER_FOAMADS_TABLE_HPP - -#include "SimpleTable.hpp" - -namespace Opm { - - class DeckItem; - - class FoamadsTable : public SimpleTable { - public: - FoamadsTable( const DeckItem& item ); - - const TableColumn& getFoamConcentrationColumn() const; - const TableColumn& getAdsorbedFoamColumn() const; - }; -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/FoammobTable.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/FoammobTable.hpp deleted file mode 100644 index fcc256e966..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/FoammobTable.hpp +++ /dev/null @@ -1,39 +0,0 @@ -/* - Copyright (C) 2014 by Andreas Lauser - Copyright 2019 SINTEF Digital, Mathematics and Cybernetics. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef OPM_FOAMMOBTABLE_HEADER_INCLUDED -#define OPM_FOAMMOBTABLE_HEADER_INCLUDED - -#include "SimpleTable.hpp" - -namespace Opm { - - class DeckItem; - - class FoammobTable : public SimpleTable { - public: - FoammobTable( const DeckItem& item ); - - const TableColumn& getFoamConcentrationColumn() const; - const TableColumn& getMobilityMultiplierColumn() const; - }; -} - -#endif // OPM_FOAMMOBTABLE_HEADER_INCLUDED diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/GasvisctTable.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/GasvisctTable.hpp deleted file mode 100644 index f75256741d..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/GasvisctTable.hpp +++ /dev/null @@ -1,39 +0,0 @@ -/* - Copyright (C) 2015 by Andreas Lauser - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef OPM_PARSER_GASVISCT_TABLE_HPP -#define OPM_PARSER_GASVISCT_TABLE_HPP - -#include "SimpleTable.hpp" - -namespace Opm { - - class Deck; - class DeckItem; - - class GasvisctTable : public SimpleTable { - public: - GasvisctTable( const Deck& deck, const DeckItem& deckItem ); - - const TableColumn& getTemperatureColumn() const; - const TableColumn& getGasViscosityColumn(size_t compIdx) const; - }; -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/ImkrvdTable.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/ImkrvdTable.hpp deleted file mode 100644 index c40b2a7b0b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/ImkrvdTable.hpp +++ /dev/null @@ -1,74 +0,0 @@ -/* - Copyright (C) 2014 by Andreas Lauser - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ -#ifndef OPM_PARSER_IMKRVD_TABLE_HPP -#define OPM_PARSER_IMKRVD_TABLE_HPP - -#include "SimpleTable.hpp" - -namespace Opm { - - class DeckItem; - - class ImkrvdTable : public SimpleTable { - public: - ImkrvdTable( const DeckItem& item ); - - /*! - * \brief The datum depth for the remaining columns - */ - const TableColumn& getDepthColumn() const; - - /*! - * \brief Maximum relative permeability of water - */ - const TableColumn& getKrwmaxColumn() const; - - /*! - * \brief Maximum relative permeability of gas - */ - const TableColumn& getKrgmaxColumn() const; - - /*! - * \brief Maximum relative permeability of oil - */ - const TableColumn& getKromaxColumn() const; - - /*! - * \brief Relative permeability of water at the critical oil (or gas) saturation - */ - const TableColumn& getKrwcritColumn() const; - - /*! - * \brief Relative permeability of gas at the critical oil (or water) saturation - */ - const TableColumn& getKrgcritColumn() const; - - /*! - * \brief Oil relative permeability of oil at the critical gas saturation - */ - const TableColumn& getKrocritgColumn() const; - - /*! - * \brief Oil relative permeability of oil at the critical water saturation - */ - const TableColumn& getKrocritwColumn() const; - }; -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/ImptvdTable.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/ImptvdTable.hpp deleted file mode 100644 index 707816b4f6..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/ImptvdTable.hpp +++ /dev/null @@ -1,80 +0,0 @@ -/* - Copyright (C) 2014 by Andreas Lauser - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef OPM_PARSER_IMPTVD_TABLE_HPP -#define OPM_PARSER_IMPTVD_TABLE_HPP - -#include "SimpleTable.hpp" - -namespace Opm { - - class DeckItem; - - class ImptvdTable : public SimpleTable { - public: - - ImptvdTable( const DeckItem& item ); - - const TableColumn& getDepthColumn() const; - - /*! - * \brief Connate water saturation - */ - const TableColumn& getSwcoColumn() const; - - /*! - * \brief Critical water saturation - */ - const TableColumn& getSwcritColumn() const; - - /*! - * \brief Maximum water saturation - */ - const TableColumn& getSwmaxColumn() const; - - /*! - * \brief Connate gas saturation - */ - const TableColumn& getSgcoColumn() const; - - /*! - * \brief Critical gas saturation - */ - const TableColumn& getSgcritColumn() const; - - /*! - * \brief Maximum gas saturation - */ - const TableColumn& getSgmaxColumn() const; - - /*! - * \brief Critical oil-in-water saturation - */ - const TableColumn& getSowcritColumn() const; - - /*! - * \brief Critical oil-in-gas saturation - */ - const TableColumn& getSogcritColumn() const; - - }; -} - -#endif - diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/JFunc.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/JFunc.hpp deleted file mode 100644 index a4ffc130d2..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/JFunc.hpp +++ /dev/null @@ -1,70 +0,0 @@ -/* - Copyright 2016 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#ifndef OPM_JFUNC_HPP_ -#define OPM_JFUNC_HPP_ - -#include - - -namespace Opm { - -class JFunc -{ -public: - - enum class Flag { BOTH, WATER, GAS }; - enum class Direction { XY, X, Y, Z }; - - JFunc(); - explicit JFunc(const Deck& deck); - - static JFunc serializeObject(); - - double alphaFactor() const; - double betaFactor() const; - double goSurfaceTension() const; - double owSurfaceTension() const; - const Flag& flag() const; - const Direction& direction() const; - - bool operator==(const JFunc& data) const; - - template - void serializeOp(Serializer& serializer) - { - serializer(m_flag); - serializer(m_owSurfaceTension); - serializer(m_goSurfaceTension); - serializer(m_alphaFactor); - serializer(m_betaFactor); - serializer(m_direction); - } - -private: - Flag m_flag; // JFUNC flag: WATER, GAS, or BOTH. Default BOTH - double m_owSurfaceTension; // oil-wat surface tension. Required if flag is BOTH or WATER - double m_goSurfaceTension; // gas-oil surface tension. Required if flag is BOTH or GAS - double m_alphaFactor; // alternative porosity term. Default 0.5 - double m_betaFactor; // alternative permeability term. Default 0.5 - Direction m_direction; // XY, X, Y, Z. Default XY -}; -} // Opm:: - -#endif /* OPM_JFUNC_HPP_ */ diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/MiscTable.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/MiscTable.hpp deleted file mode 100644 index 6facfa8004..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/MiscTable.hpp +++ /dev/null @@ -1,39 +0,0 @@ -/* - Copyright (C) 2015 Statoil ASA. - 2015 IRIS AS - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ -#ifndef OPM_PARSER_MISC_TABLE_HPP -#define OPM_PARSER_MISC_TABLE_HPP - -#include "SimpleTable.hpp" - -namespace Opm { - - class DeckItem; - - class MiscTable : public SimpleTable { - public: - explicit MiscTable( const DeckItem& item ); - - const TableColumn& getSolventFractionColumn() const; - const TableColumn& getMiscibilityColumn() const; - - }; -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/MsfnTable.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/MsfnTable.hpp deleted file mode 100644 index e2e57ada43..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/MsfnTable.hpp +++ /dev/null @@ -1,40 +0,0 @@ -/* - Copyright (C) 2015 Statoil ASA. - 2015 IRIS AS - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ -#ifndef OPM_PARSER_MSFN_TABLE_HPP -#define OPM_PARSER_MSFN_TABLE_HPP - -#include "SimpleTable.hpp" - -namespace Opm { - - class DeckItem; - - class MsfnTable : public SimpleTable { - public: - explicit MsfnTable( const DeckItem& item ); - - const TableColumn& getGasPhaseFractionColumn() const; - const TableColumn& getGasSolventRelpermMultiplierColumn() const; - const TableColumn& getOilRelpermMultiplierColumn() const; - - }; -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/OilvisctTable.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/OilvisctTable.hpp deleted file mode 100644 index 2f7d738480..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/OilvisctTable.hpp +++ /dev/null @@ -1,37 +0,0 @@ -/* - Copyright (C) 2015 by Andreas Lauser - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ -#ifndef OPM_PARSER_OILVISCT_TABLE_HPP -#define OPM_PARSER_OILVISCT_TABLE_HPP - -#include "SimpleTable.hpp" - -namespace Opm { - - class DeckItem; - - class OilvisctTable : public SimpleTable { - public: - OilvisctTable( const DeckItem& item ); - - const TableColumn& getTemperatureColumn() const; - const TableColumn& getOilViscosityColumn() const; - }; -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/OverburdTable.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/OverburdTable.hpp deleted file mode 100644 index 3e48191b39..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/OverburdTable.hpp +++ /dev/null @@ -1,38 +0,0 @@ -/* - Copyright (C) 2019 by Norce - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ -#ifndef OPM_PARSER_OVERBURD_TABLE_HPP -#define OPM_PARSER_OVERBURD_TABLE_HPP - -#include "SimpleTable.hpp" - -namespace Opm { - - class DeckItem; - - class OverburdTable : public SimpleTable { - public: - OverburdTable( const DeckItem& item ); - - const TableColumn& getDepthColumn() const; - const TableColumn& getOverburdenPressureColumn() const; - - }; -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/PbvdTable.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/PbvdTable.hpp deleted file mode 100644 index a0f6d7c645..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/PbvdTable.hpp +++ /dev/null @@ -1,37 +0,0 @@ -/* - Copyright (C) 2018 by IRIS - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ -#ifndef OPM_PARSER_PBVD_TABLE_HPP -#define OPM_PARSER_PBVD_TABLE_HPP - -#include "SimpleTable.hpp" - -namespace Opm { - - class DeckItem; - - class PbvdTable : public SimpleTable { - public: - PbvdTable( const DeckItem& item ); - - const TableColumn& getDepthColumn() const; - const TableColumn& getPbubColumn() const; - }; -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/PdvdTable.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/PdvdTable.hpp deleted file mode 100644 index dfce289417..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/PdvdTable.hpp +++ /dev/null @@ -1,37 +0,0 @@ -/* - Copyright (C) 2018 by IRIS - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ -#ifndef OPM_PARSER_PDVD_TABLE_HPP -#define OPM_PARSER_PDVD_TABLE_HPP - -#include "SimpleTable.hpp" - -namespace Opm { - - class DeckItem; - - class PdvdTable : public SimpleTable { - public: - PdvdTable( const DeckItem& item ); - - const TableColumn& getDepthColumn() const; - const TableColumn& getPdewColumn() const; - }; -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/PlyadsTable.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/PlyadsTable.hpp deleted file mode 100644 index 0c9b9dc34b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/PlyadsTable.hpp +++ /dev/null @@ -1,37 +0,0 @@ -/* - Copyright (C) 2014 by Andreas Lauser - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ -#ifndef OPM_PARSER_PLYADS_TABLE_HPP -#define OPM_PARSER_PLYADS_TABLE_HPP - -#include "SimpleTable.hpp" - -namespace Opm { - - class DeckItem; - - class PlyadsTable : public SimpleTable { - public: - PlyadsTable( const DeckItem& item ); - - const TableColumn& getPolymerConcentrationColumn() const; - const TableColumn& getAdsorbedPolymerColumn() const; - }; -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/PlydhflfTable.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/PlydhflfTable.hpp deleted file mode 100644 index 37efd2b9de..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/PlydhflfTable.hpp +++ /dev/null @@ -1,38 +0,0 @@ -/* - Copyright (C) 2015 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ -#ifndef OPM_PARSER_PLYDHFLF_TABLE_HPP -#define OPM_PARSER_PLYDHFLF_TABLE_HPP - -#include "SimpleTable.hpp" - -namespace Opm { - - class DeckItem; - - class PlydhflfTable : public SimpleTable { - public: - - PlydhflfTable( const DeckItem& item ); - - const TableColumn& getTemperatureColumn() const; - const TableColumn& getPolymerHalflifeColumn() const; - }; -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/PlymaxTable.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/PlymaxTable.hpp deleted file mode 100644 index f2d09480f5..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/PlymaxTable.hpp +++ /dev/null @@ -1,38 +0,0 @@ -/* - Copyright (C) 2014 by Andreas Lauser - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ -#ifndef OPM_PARSER_PLYMAX_TABLE_HPP -#define OPM_PARSER_PLYMAX_TABLE_HPP - -#include "SimpleTable.hpp" - -namespace Opm { - - class DeckRecord; - - class PlymaxTable : public SimpleTable { - public: - - PlymaxTable( const DeckRecord& record ); - - const TableColumn& getPolymerConcentrationColumn() const; - const TableColumn& getMaxPolymerConcentrationColumn() const; - }; -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/PlymwinjTable.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/PlymwinjTable.hpp deleted file mode 100644 index 9b61674604..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/PlymwinjTable.hpp +++ /dev/null @@ -1,41 +0,0 @@ -/* - Copyright (C) 2018 Statoil ASA - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#ifndef OPM_PARSER_PLYMWINJ_TABLE_HPP -#define OPM_PARSER_PLYMWINJ_TABLE_HPP - -#include -namespace Opm { - - class DeckKeyword; - - class PlymwinjTable : public PolyInjTable { - public: - PlymwinjTable() = default; - explicit PlymwinjTable(const DeckKeyword& table); - - static PlymwinjTable serializeObject(); - - const std::vector>& getMoleWeights() const; - bool operator==(const PlymwinjTable& data) const; - }; - -} - -#endif //OPM_PARSER_PLYMWINJ_TABLE_HPP diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/PlyrockTable.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/PlyrockTable.hpp deleted file mode 100644 index 86059987ef..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/PlyrockTable.hpp +++ /dev/null @@ -1,54 +0,0 @@ -/* - Copyright (C) 2014 by Andreas Lauser - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ -#ifndef OPM_PARSER_PLYROCK_TABLE_HPP -#define OPM_PARSER_PLYROCK_TABLE_HPP - -#include "SimpleTable.hpp" - -namespace Opm { - - class DeckReckord; - - class PlyrockTable : public SimpleTable { - public: - - // This is not really a table; every column has only one element. - PlyrockTable( const DeckRecord& record ); - - // since this keyword is not necessarily monotonic, it cannot be evaluated! - //using SimpleTable::evaluate; - - const TableColumn& getDeadPoreVolumeColumn() const; - const TableColumn& getResidualResistanceFactorColumn() const; - const TableColumn& getRockDensityFactorColumn() const; - - // is column is actually an integer, but this is not yet - // supported by opm-parser (yet?) as it would require quite a - // few changes in the table support classes (read: it would - // probably require a lot of template vodoo) and some in the - // JSON-to-C conversion code. In the meantime, the index is - // just a double which can be converted to an integer in the - // calling code. (Make sure, that you don't interpolate - // indices, though!) - const TableColumn& getAdsorbtionIndexColumn() const; - const TableColumn& getMaxAdsorbtionColumn() const; - }; -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/PlyshlogTable.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/PlyshlogTable.hpp deleted file mode 100644 index 9f103f2cb3..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/PlyshlogTable.hpp +++ /dev/null @@ -1,76 +0,0 @@ -/* - Copyright 2015 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ -#ifndef OPM_PARSER_PLYSHLOG_TABLE_HPP -#define OPM_PARSER_PLYSHLOG_TABLE_HPP - -#include -#include "SimpleTable.hpp" - - -namespace Opm { - - class DeckRecord; - class TableManager; - - class PlyshlogTable : public SimpleTable { - public: - friend class TableManager; - - PlyshlogTable() = default; - PlyshlogTable(const DeckRecord& indexRecord, const DeckRecord& dataRecord); - - static PlyshlogTable serializeObject(); - - double getRefPolymerConcentration() const; - double getRefSalinity() const; - double getRefTemperature() const; - void setRefPolymerConcentration(const double refPlymerConcentration); - void setRefSalinity(const double refSalinity); - void setRefTemperature(const double refTemperature); - bool hasRefSalinity() const; - bool hasRefTemperature() const; - void setHasRefSalinity(const bool has); - void setHasRefTemperature(const bool has); - const TableColumn& getWaterVelocityColumn() const; - const TableColumn& getShearMultiplierColumn() const; - - bool operator==(const PlyshlogTable& data) const; - - template - void serializeOp(Serializer& serializer) - { - this->SimpleTable::serializeOp(serializer); - serializer(m_refPolymerConcentration); - serializer(m_refSalinity); - serializer(m_refTemperature); - serializer(m_hasRefSalinity); - serializer(m_hasRefTemperature); - } - - private: - double m_refPolymerConcentration = 1.0; - double m_refSalinity = 0.0; - double m_refTemperature = 0.0; - - bool m_hasRefSalinity = false; - bool m_hasRefTemperature = false; - }; -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/PlyviscTable.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/PlyviscTable.hpp deleted file mode 100644 index df5f34a373..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/PlyviscTable.hpp +++ /dev/null @@ -1,37 +0,0 @@ -/* - Copyright (C) 2014 by Andreas Lauser - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ -#ifndef OPM_PARSER_PLYVISC_TABLE_HPP -#define OPM_PARSER_PLYVISC_TABLE_HPP - -#include "SimpleTable.hpp" - -namespace Opm { - - class DeckItem; - - class PlyviscTable : public SimpleTable { - public: - PlyviscTable( const DeckItem& item ); - - const TableColumn& getPolymerConcentrationColumn() const; - const TableColumn& getViscosityMultiplierColumn() const; - }; -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/PmiscTable.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/PmiscTable.hpp deleted file mode 100644 index e977b9e94a..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/PmiscTable.hpp +++ /dev/null @@ -1,40 +0,0 @@ -/* - Copyright (C) 2015 Statoil ASA. - 2015 IRIS AS - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ -#ifndef OPM_PARSER_PMISC_TABLE_HPP -#define OPM_PARSER_PMISC_TABLE_HPP - -#include "SimpleTable.hpp" - -namespace Opm { - - class DeckItem; - - class PmiscTable : public SimpleTable { - public: - - explicit PmiscTable( const DeckItem& item ); - - const TableColumn& getOilPhasePressureColumn() const; - const TableColumn& getMiscibilityColumn() const; - - }; -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/PolyInjTable.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/PolyInjTable.hpp deleted file mode 100644 index 07ddbd54e1..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/PolyInjTable.hpp +++ /dev/null @@ -1,79 +0,0 @@ -/* - Copyright (C) 2018 Statoil ASA - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#ifndef OPM_PARSER_POLY_INJ_TABLE_HPP -#define OPM_PARSER_POLY_INJ_TABLE_HPP - - -/* This class is introduced for the following keywords related to polymer injectivity study. - * PLYMWINJ, SKPRWAT, SKPRPOLY . - * These keywords share very similar structure with small difference. - * - * KEYWORD - * 1 / --table number - * 0 20 30 / -- water throughputs - * 0 0.1 0.2 0.3 / -- water velocities - * -- the rest is the table data, - * -- each row corresponds to one value in throughputs - * -- each column corresponds to one value in water velocities - * 20 19 18 17 / - * 20 18 17 16 / - * 20 17 16 15 / - */ - -#include - -namespace Opm { - - class PolyInjTable { - public: - static PolyInjTable serializeObject(); - - int getTableNumber() const; - - const std::vector& getThroughputs() const; - const std::vector& getVelocities() const; - const std::vector>& getTableData() const; - - bool operator==(const PolyInjTable& data) const; - - template - void serializeOp(Serializer& serializer) - { - serializer(m_throughputs); - serializer(m_velocities); - serializer(m_table_number); - serializer(m_data); - } - - protected: - std::vector m_throughputs; - std::vector m_velocities; - - // TODO: maybe not needed, since this is also stored in the std::map - int m_table_number = 0; - - // each vector corresponds to the values corresponds to one value related to one x sampling point - // as a result, the number of the vector should be equal to be the size of m_x_points, - // the size of each vector should be equal to the size of m_y_points - std::vector > m_data; - }; -} - -#endif // OPM_PARSER_POLY_INJ_TABLE_HPP diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/PvdgTable.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/PvdgTable.hpp deleted file mode 100644 index 996eb43a4b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/PvdgTable.hpp +++ /dev/null @@ -1,38 +0,0 @@ -/* - Copyright (C) 2014 by Andreas Lauser - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ -#ifndef OPM_PARSER_PVDG_TABLE_HPP -#define OPM_PARSER_PVDG_TABLE_HPP - -#include "SimpleTable.hpp" - -namespace Opm { - - class DeckItem; - - class PvdgTable : public SimpleTable { - public: - PvdgTable( const DeckItem& item ); - - const TableColumn& getPressureColumn() const; - const TableColumn& getFormationFactorColumn() const; - const TableColumn& getViscosityColumn() const; - }; -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/PvdoTable.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/PvdoTable.hpp deleted file mode 100644 index d046c493f5..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/PvdoTable.hpp +++ /dev/null @@ -1,39 +0,0 @@ -/* - Copyright (C) 2014 by Andreas Lauser - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ -#ifndef OPM_PARSER_PVDO_TABLE_HPP -#define OPM_PARSER_PVDO_TABLE_HPP - -#include "SimpleTable.hpp" - -namespace Opm { - - class DeckItem; - - class PvdoTable : public SimpleTable { - public: - - PvdoTable( const DeckItem& item ); - - const TableColumn& getPressureColumn() const; - const TableColumn& getFormationFactorColumn() const; - const TableColumn& getViscosityColumn() const; - }; -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/PvdsTable.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/PvdsTable.hpp deleted file mode 100644 index 2fcf096c5e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/PvdsTable.hpp +++ /dev/null @@ -1,39 +0,0 @@ -/* - Copyright 2015 IRIS AS - - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ -#ifndef OPM_PARSER_PVDS_TABLE_HPP -#define OPM_PARSER_PVDS_TABLE_HPP - -#include "SimpleTable.hpp" - -namespace Opm { - - class DeckItem; - - class PvdsTable : public SimpleTable { - public: - PvdsTable( const DeckItem& item ); - - const TableColumn& getPressureColumn() const; - const TableColumn& getFormationFactorColumn() const; - const TableColumn& getViscosityColumn() const; - }; -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/PvtgTable.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/PvtgTable.hpp deleted file mode 100644 index 676c47aff1..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/PvtgTable.hpp +++ /dev/null @@ -1,39 +0,0 @@ -/* - Copyright (C) 2013 by Andreas Lauser - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ -#ifndef OPM_PARSER_PVTG_TABLE_HPP -#define OPM_PARSER_PVTG_TABLE_HPP - -#include - -namespace Opm { - - class DeckKeyword; - - class PvtgTable : public PvtxTable { - public: - PvtgTable() = default; - PvtgTable( const DeckKeyword& keyword, size_t tableIdx); - - static PvtgTable serializeObject(); - - bool operator==(const PvtgTable& data) const; - }; -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/PvtoTable.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/PvtoTable.hpp deleted file mode 100644 index 00219333dc..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/PvtoTable.hpp +++ /dev/null @@ -1,39 +0,0 @@ -/* - Copyright (C) 2014 by Andreas Lauser - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ -#ifndef OPM_PARSER_PVTO_TABLE_HPP -#define OPM_PARSER_PVTO_TABLE_HPP - -#include - -namespace Opm { - - class DeckKeyword; - - class PvtoTable : public PvtxTable { - public: - PvtoTable() = default; - PvtoTable(const DeckKeyword& keyword, size_t tableIdx); - - static PvtoTable serializeObject(); - - bool operator==(const PvtoTable& data) const; - }; -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/PvtwsaltTable.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/PvtwsaltTable.hpp deleted file mode 100644 index 5783c9f3d4..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/PvtwsaltTable.hpp +++ /dev/null @@ -1,65 +0,0 @@ -/* - Copyright (C) 2019 by Norce - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ -#ifndef OPM_PARSER_PVTWSALT_TABLE_HPP -#define OPM_PARSER_PVTWSALT_TABLE_HPP - -#include - -namespace Opm { - - class DeckKeyword; - - class PvtwsaltTable { - public: - PvtwsaltTable(); - - static PvtwsaltTable serializeObject(); - - void init(const Opm::DeckRecord& record0, const Opm::DeckRecord& record1); - size_t size() const; - std::vector getSaltConcentrationColumn() const; - std::vector getFormationVolumeFactorColumn() const; - std::vector getCompressibilityColumn() const; - std::vector getViscosityColumn() const; - std::vector getViscosibilityColumn() const; - double getReferencePressureValue() const; - double getReferenceSaltConcentrationValue() const; - const std::vector& getTableValues() const; - - bool operator==(const PvtwsaltTable& data) const; - - template - void serializeOp(Serializer& serializer) - { - serializer(m_pRefValues); - serializer(m_saltConsRefValues); - serializer(m_tableValues); - } - - protected: - - double m_pRefValues; - double m_saltConsRefValues; - std::vector m_tableValues; - - }; - -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/PvtxTable.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/PvtxTable.hpp deleted file mode 100644 index 8a5fe61de4..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/PvtxTable.hpp +++ /dev/null @@ -1,159 +0,0 @@ -/* - Copyright 2015 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ -#ifndef OPM_PARSER_PVTX_TABLE_HPP -#define OPM_PARSER_PVTX_TABLE_HPP - -#include - -#include -#include -#include -#include - -/* - This class is a common base class for the PVTG and PVTO tables. The - PVTO and PVTG keywords have a quite complex structure. The structure - consists of alternating records of saturated data and corresponding - undersaturated tables, this structure is again repeated for the - different satnum regions. - - - PVTO - --- RSO PRESSURE B-OIL VISCOSITY --- (BAR) (CP) - - [ 20.59 { 50.00 1.10615 1.180 } ] \ - { 75.00 1.10164 1.247 } | - { 100.00 1.09744 1.315 } | - { 125.00 1.09351 1.384 } | - { 150.00 1.08984 1.453 }/ | - | - [ 28.19 { 70.00 1.12522 1.066 } ] | - { 95.00 1.12047 1.124 } | - { 120.00 1.11604 1.182 } |-- Satnum region 1 - { 145.00 1.11191 1.241 } | - { 170.00 1.10804 1.300 }/ | - | - [ 36.01 { 90.00 1.14458 0.964 } ] | - { 115.00 1.13959 1.014 } | - { 140.00 1.13494 1.064 } | - { 165.00 1.13060 1.115 } | - { 190.00 1.12653 1.166 }/ | -/ / - 404.60 594.29 1.97527 0.21564 \ - 619.29 1.96301 0.21981 | - 644.29 1.95143 0.22393 |-- Satnum region 2 - 669.29 1.94046 0.22801 | - 694.29 1.93005 0.23204 / | -/ / - 404.60 594.29 1.97527 0.21564 \ - 619.29 1.96301 0.21981 | - 644.29 1.95143 0.22393 | - 669.29 1.94046 0.22801 | - 694.29 1.93005 0.23204 / |-- Satnum region 3 - 404.60 594.29 1.97527 0.21564 | - 619.29 1.96301 0.21981 | - 644.29 1.95143 0.22393 | - 669.29 1.94046 0.22801 | - 694.29 1.93005 0.23204 / / -/ - - -In satnum region1 the saturated records are marked with [ ... ], and -the corresponding undersaturated tables are marked with { ... }. So -for satnum region1 the table of saturated properties looks like: - - RSO PRESSURE B-OIL VISCOSITY - 20.59 50.00 1.10615 1.180 - 28.19 70.00 1.12522 1.066 - 36.01 90.00 1.14458 0.964 - -In the PvtxTable class this table is available as the method -getSaturatedTable( ). For each RS value there is a table of -undersaturated properties; since the saturated table for region1 has -three rows there are three such tables, these tables are available as -getUnderSaturatedTable( index ). In this particular example the first -undersaturated table looks like: - - PRESSURE B-OIL VISCOSITY - 50.00 1.10615 1.180 - 75.00 1.10164 1.247 - 100.00 1.09744 1.315 - 125.00 1.09351 1.384 - 150.00 1.08984 1.453 - -The first row actually corresponds to saturated values. -*/ - - - namespace Opm { - - class DeckKeyword; - - class PvtxTable { - public: - static size_t numTables( const DeckKeyword& keyword); - static std::vector > recordRanges( const DeckKeyword& keyword); - - PvtxTable() = default; - explicit PvtxTable(const std::string& columnName); - - static PvtxTable serializeObject(); - - const SimpleTable& getUnderSaturatedTable(size_t tableNumber) const; - void init(const DeckKeyword& keyword, size_t tableIdx); - size_t size() const; - double evaluate(const std::string& column, double outerArg, double innerArg) const; - double getArgValue(size_t index) const; - const SimpleTable& getSaturatedTable() const; - - /* - Will iterate over the internal undersaturated tables; same - as getUnderSaturatedTable( ). - */ - std::vector< SimpleTable >::const_iterator begin() const; - std::vector< SimpleTable >::const_iterator end() const; - - bool operator==(const PvtxTable& data) const; - - template - void serializeOp(Serializer& serializer) - { - m_outerColumnSchema.serializeOp(serializer); - m_outerColumn.serializeOp(serializer); - m_underSaturatedSchema.serializeOp(serializer); - m_saturatedSchema.serializeOp(serializer); - serializer.vector(m_underSaturatedTables); - m_saturatedTable.serializeOp(serializer); - } - - protected: - ColumnSchema m_outerColumnSchema; - TableColumn m_outerColumn; - - TableSchema m_underSaturatedSchema; - TableSchema m_saturatedSchema; - std::vector< SimpleTable > m_underSaturatedTables; - SimpleTable m_saturatedTable; - }; - -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/Regdims.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/Regdims.hpp deleted file mode 100644 index fa723fb1cd..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/Regdims.hpp +++ /dev/null @@ -1,109 +0,0 @@ -/* - Copyright (C) 2015 Statoil ASA - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANREGILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#ifndef REGDIMS_HPP -#define REGDIMS_HPP - -/* - The Regdims class is a small utility class designed to hold on to - the values from the REGDIMS keyword. -*/ - -#include - -namespace Opm { - class Regdims { - public: - - Regdims() : - m_NTFIP( ParserKeywords::REGDIMS::NTFIP::defaultValue ), - m_NMFIPR( ParserKeywords::REGDIMS::NMFIPR::defaultValue ), - m_NRFREG( ParserKeywords::REGDIMS::NRFREG::defaultValue ), - m_NTFREG( ParserKeywords::REGDIMS::NTFREG::defaultValue ), - m_NPLMIX( ParserKeywords::REGDIMS::NPLMIX::defaultValue ) - { } - - Regdims(size_t ntfip , size_t nmfipr , size_t nrfregr , size_t ntfreg , size_t nplmix) : - m_NTFIP( ntfip ), - m_NMFIPR( nmfipr ), - m_NRFREG( nrfregr ), - m_NTFREG( ntfreg ), - m_NPLMIX( nplmix ) - {} - - static Regdims serializeObject() - { - return Regdims(1, 2, 3, 4, 5); - } - - - size_t getNTFIP() const { - return m_NTFIP; - } - - - size_t getNMFIPR() const { - return m_NMFIPR; - } - - - size_t getNRFREG() const { - return m_NRFREG; - } - - - size_t getNTFREG() const { - return m_NTFREG; - } - - - size_t getNPLMIX() const { - return m_NPLMIX; - } - - - bool operator==(const Regdims& data) const { - return this->getNTFIP() == data.getNTFIP() && - this->getNMFIPR() == data.getNMFIPR() && - this->getNRFREG() == data.getNRFREG() && - this->getNTFREG() == data.getNTFREG() && - this->getNPLMIX() == data.getNPLMIX(); - } - - template - void serializeOp(Serializer& serializer) - { - serializer(m_NTFIP); - serializer(m_NMFIPR); - serializer(m_NRFREG); - serializer(m_NTFREG); - serializer(m_NPLMIX); - } - - private: - size_t m_NTFIP; - size_t m_NMFIPR; - size_t m_NRFREG; - size_t m_NTFREG; - size_t m_NPLMIX; - }; -} - - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/Rock2dTable.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/Rock2dTable.hpp deleted file mode 100644 index 58ad323e6c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/Rock2dTable.hpp +++ /dev/null @@ -1,57 +0,0 @@ -/* - Copyright (C) 2019 by Norce - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ -#ifndef OPM_PARSER_ROCK2D_TABLE_HPP -#define OPM_PARSER_ROCK2D_TABLE_HPP - -#include - -namespace Opm { - - class DeckRecord; - - class Rock2dTable { - public: - Rock2dTable(); - - static Rock2dTable serializeObject(); - - void init(const Opm::DeckRecord& record, size_t tableIdx); - size_t size() const; - size_t sizeMultValues() const; - double getPressureValue(size_t index) const; - double getPvmultValue(size_t pressureIndex, size_t saturationIndex ) const; - - bool operator==(const Rock2dTable& data) const; - - template - void serializeOp(Serializer& serializer) - { - serializer(m_pvmultValues); - serializer(m_pressureValues); - } - - protected: - std::vector< std::vector > m_pvmultValues; - std::vector< double > m_pressureValues; - - }; - -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/Rock2dtrTable.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/Rock2dtrTable.hpp deleted file mode 100644 index 26ab323ea1..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/Rock2dtrTable.hpp +++ /dev/null @@ -1,57 +0,0 @@ -/* - Copyright (C) 2019 by Norce - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ -#ifndef OPM_PARSER_ROCK2DTR_TABLE_HPP -#define OPM_PARSER_ROCK2DTR_TABLE_HPP - -#include - -namespace Opm { - - class DeckRecord; - - class Rock2dtrTable { - public: - Rock2dtrTable(); - - static Rock2dtrTable serializeObject(); - - void init(const Opm::DeckRecord& record, size_t tableIdx); - size_t size() const; - size_t sizeMultValues() const; - double getPressureValue(size_t index) const; - double getTransMultValue(size_t pressureIndex, size_t saturationIndex ) const; - - bool operator==(const Rock2dtrTable& data) const; - - template - void serializeOp(Serializer& serializer) - { - serializer(m_transMultValues); - serializer(m_pressureValues); - } - - protected: - std::vector< std::vector > m_transMultValues; - std::vector< double > m_pressureValues; - - }; - -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/RocktabTable.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/RocktabTable.hpp deleted file mode 100644 index 7afd90b19f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/RocktabTable.hpp +++ /dev/null @@ -1,58 +0,0 @@ -/* - Copyright (C) 2014 by Andreas Lauser - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ -#ifndef OPM_PARSER_ROCKTAB_TABLE_HPP -#define OPM_PARSER_ROCKTAB_TABLE_HPP - -#include "SimpleTable.hpp" - -namespace Opm { - - class DeckItem; - - class RocktabTable : public SimpleTable { - public: - RocktabTable() = default; - RocktabTable(const DeckItem& item, - bool isDirectional, - bool hasStressOption); - - static RocktabTable serializeObject(); - - const TableColumn& getPressureColumn() const; - const TableColumn& getPoreVolumeMultiplierColumn() const; - const TableColumn& getTransmissibilityMultiplierColumn() const; - const TableColumn& getTransmissibilityMultiplierXColumn() const; - const TableColumn& getTransmissibilityMultiplierYColumn() const; - const TableColumn& getTransmissibilityMultiplierZColumn() const; - - bool operator==(const RocktabTable& data) const; - - template - void serializeOp(Serializer& serializer) - { - this->SimpleTable::serializeOp(serializer); - serializer(m_isDirectional); - } - - private: - bool m_isDirectional = false; - }; -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/RockwnodTable.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/RockwnodTable.hpp deleted file mode 100644 index a80409addd..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/RockwnodTable.hpp +++ /dev/null @@ -1,36 +0,0 @@ -/* - Copyright (C) 2019 Norce - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ -#ifndef OPM_PARSER_ROCKWNOD_TABLE_HPP -#define OPM_PARSER_ROCKWNOD_TABLE_HPP - -#include "SimpleTable.hpp" - -namespace Opm { - - class DeckItem; - - class RockwnodTable : public SimpleTable { - public: - RockwnodTable( const DeckItem& item ); - - const TableColumn& getSaturationColumn() const; - }; -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/RsvdTable.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/RsvdTable.hpp deleted file mode 100644 index 4ddc23e72f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/RsvdTable.hpp +++ /dev/null @@ -1,37 +0,0 @@ -/* - Copyright (C) 2014 by Andreas Lauser - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ -#ifndef OPM_PARSER_RSVD_TABLE_HPP -#define OPM_PARSER_RSVD_TABLE_HPP - -#include "SimpleTable.hpp" - -namespace Opm { - - class DeckItem; - - class RsvdTable : public SimpleTable { - public: - RsvdTable( const DeckItem& item ); - - const TableColumn& getDepthColumn() const; - const TableColumn& getRsColumn() const; - }; -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/RtempvdTable.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/RtempvdTable.hpp deleted file mode 100644 index d442925e45..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/RtempvdTable.hpp +++ /dev/null @@ -1,37 +0,0 @@ -/* - Copyright (C) 2014 by Andreas Lauser - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ -#ifndef OPM_PARSER_RTEMPVD_TABLE_HPP -#define OPM_PARSER_RTEMPVD_TABLE_HPP - -#include "SimpleTable.hpp" - -namespace Opm { - - class DeckItem; - - class RtempvdTable : public SimpleTable { - public: - RtempvdTable( const DeckItem& item ); - - const TableColumn& getDepthColumn() const; - const TableColumn& getTemperatureColumn() const; - }; -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/RvvdTable.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/RvvdTable.hpp deleted file mode 100644 index 717920990b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/RvvdTable.hpp +++ /dev/null @@ -1,37 +0,0 @@ -/* - Copyright (C) 2014 by Andreas Lauser - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ -#ifndef OPM_PARSER_RVVD_TABLE_HPP -#define OPM_PARSER_RVVD_TABLE_HPP - -#include "SimpleTable.hpp" - -namespace Opm { - - class DeckItem; - - class RvvdTable : public SimpleTable { - public: - RvvdTable( const DeckItem& item ); - - const TableColumn& getDepthColumn() const; - const TableColumn& getRvColumn() const; - }; -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/SaltvdTable.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/SaltvdTable.hpp deleted file mode 100644 index 9a400f4b29..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/SaltvdTable.hpp +++ /dev/null @@ -1,37 +0,0 @@ -/* - Copyright (C) 2019 by Norce. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ -#ifndef OPM_PARSER_SALTVD_TABLE_HPP -#define OPM_PARSER_SALTVD_TABLE_HPP - -#include "SimpleTable.hpp" - -namespace Opm { - - class DeckItem; - - class SaltvdTable : public SimpleTable { - public: - SaltvdTable( const DeckItem& item ); - - const TableColumn& getDepthColumn() const; - const TableColumn& getSaltColumn() const; - }; -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/SgcwmisTable.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/SgcwmisTable.hpp deleted file mode 100644 index 26fa1ca570..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/SgcwmisTable.hpp +++ /dev/null @@ -1,39 +0,0 @@ -/* - Copyright (C) 2015 Statoil ASA. - 2015 IRIS AS - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ -#ifndef OPM_PARSER_SGCWMIS_TABLE_HPP -#define OPM_PARSER_SGCWMIS_TABLE_HPP - -#include "SimpleTable.hpp" - -namespace Opm { - - class DeckItem; - - class SgcwmisTable : public SimpleTable { - public: - explicit SgcwmisTable( const DeckItem& item ); - - const TableColumn& getWaterSaturationColumn() const; - const TableColumn& getMiscibleResidualGasColumn() const; - - }; -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/SgfnTable.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/SgfnTable.hpp deleted file mode 100644 index bf46a0204d..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/SgfnTable.hpp +++ /dev/null @@ -1,42 +0,0 @@ -/* - Copyright (C) 2015 IRIS AS - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ -#ifndef OPM_PARSER_SGFN_TABLE_HPP -#define OPM_PARSER_SGFN_TABLE_HPP - -#include "SimpleTable.hpp" - -namespace Opm { - - class DeckItem; - - class SgfnTable : public SimpleTable { - - public: - SgfnTable( const DeckItem& item, const bool jfunc ); - - const TableColumn& getSgColumn() const; - const TableColumn& getKrgColumn() const; - const TableColumn& getPcogColumn() const; - - const TableColumn& getJFuncColumn() const; - }; -} - -#endif - diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/SgofTable.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/SgofTable.hpp deleted file mode 100644 index a9a49e1516..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/SgofTable.hpp +++ /dev/null @@ -1,46 +0,0 @@ -/* - Copyright (C) 2014 by Andreas Lauser - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ -#ifndef OPM_PARSER_SGOF_TABLE_HPP -#define OPM_PARSER_SGOF_TABLE_HPP - -#include "SimpleTable.hpp" - -namespace Opm { - class DeckItem; - - class SgofTable : public SimpleTable { - - public: - SgofTable( const DeckItem& item, const bool jfunc ); - - const TableColumn& getSgColumn() const; - const TableColumn& getKrgColumn() const; - const TableColumn& getKrogColumn() const; - - // this column is p_g - p_o (non-wetting phase pressure minus - // wetting phase pressure for a given gas saturation. the name - // is inconsistent, but it is the one used in the Eclipse - // manual...) - const TableColumn& getPcogColumn() const; - - const TableColumn& getJFuncColumn() const; - }; -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/SgwfnTable.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/SgwfnTable.hpp deleted file mode 100644 index ac47c018db..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/SgwfnTable.hpp +++ /dev/null @@ -1,43 +0,0 @@ -/* - Copyright (C) 2015 by Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ -#ifndef OPM_PARSER_SGWFN_TABLE_HPP -#define OPM_PARSER_SGWFN_TABLE_HPP - -#include "SimpleTable.hpp" - -namespace Opm { - - class DeckItem; - - class SgwfnTable : public SimpleTable { - - public: - SgwfnTable( const DeckItem& item ); - const TableColumn& getSgColumn() const; - const TableColumn& getKrgColumn() const; - const TableColumn& getKrgwColumn() const; - - // this column is p_g - p_w (non-wetting phase pressure minus - // wetting phase pressure for a given water saturation) - const TableColumn& getPcgwColumn() const; - }; -} - -#endif - diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/SimpleTable.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/SimpleTable.hpp deleted file mode 100644 index 8482110a1e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/SimpleTable.hpp +++ /dev/null @@ -1,87 +0,0 @@ -/* - Copyright (C) 2013 by Andreas Lauser - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ -#ifndef OPM_PARSER_SIMPLE_TABLE_HPP -#define OPM_PARSER_SIMPLE_TABLE_HPP - -#include -#include -#include - -#include -#include -#include -#include - -namespace Opm { - - class DeckItem; - - class SimpleTable { - - public: - SimpleTable() = default; - SimpleTable(TableSchema, const DeckItem& deckItem); - explicit SimpleTable( TableSchema ); - - static SimpleTable serializeObject(); - - void addColumns(); - void init(const DeckItem& deckItem ); - void init( const DeckItem& deckItem, double scaling_factor); - size_t numColumns() const; - size_t numRows() const; - void addRow( const std::vector& row); - const TableColumn& getColumn(const std::string &name) const; - const TableColumn& getColumn(size_t colIdx) const; - bool hasColumn(const std::string& name) const; - - TableColumn& getColumn(const std::string &name); - TableColumn& getColumn(size_t colIdx); - - double get(const std::string& column , size_t row) const; - double get(size_t column , size_t row) const; - /*! - * \brief Evaluate a column of the table at a given position. - * - * This method uses linear interpolation and always uses the first column as the - * X coordinate. - */ - double evaluate(const std::string& columnName, double xPos) const; - - /// throws std::invalid_argument if jf != m_jfunc - void assertJFuncPressure(const bool jf) const; - - bool operator==(const SimpleTable& data) const; - - template - void serializeOp(Serializer& serializer) - { - m_schema.serializeOp(serializer); - m_columns.serializeOp(serializer); - serializer(m_jfunc); - } - - protected: - TableSchema m_schema; - OrderedMap m_columns; - bool m_jfunc = false; - }; -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/SkprpolyTable.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/SkprpolyTable.hpp deleted file mode 100644 index a66542e125..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/SkprpolyTable.hpp +++ /dev/null @@ -1,55 +0,0 @@ -/* - Copyright (C) 2018 Statoil ASA - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#ifndef OPM_PARSER_SKPRPOLY_TABLE_HPP -#define OPM_PARSER_SKPRPOLY_TABLE_HPP - -#include -namespace Opm { - - class DeckKeyword; - - class SkprpolyTable : public PolyInjTable { - public: - SkprpolyTable() = default; - explicit SkprpolyTable(const DeckKeyword& table); - - static SkprpolyTable serializeObject(); - - double referenceConcentration() const; - - const std::vector>& getSkinPressures() const; - - bool operator==(const SkprpolyTable& data) const; - - template - void serializeOp(Serializer& serializer) - { - this->PolyInjTable::serializeOp(serializer); - serializer(m_ref_polymer_concentration); - } - - private: - double m_ref_polymer_concentration; - - }; - -} - -#endif //OPM_PARSER_SKPRPOLY_TABLE_HPP diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/SkprwatTable.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/SkprwatTable.hpp deleted file mode 100644 index c19e328b49..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/SkprwatTable.hpp +++ /dev/null @@ -1,42 +0,0 @@ -/* - Copyright (C) 2018 Statoil ASA - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#ifndef OPM_PARSER_SKPRWAT_TABLE_HPP -#define OPM_PARSER_SKPRWAT_TABLE_HPP - -#include -namespace Opm { - - class DeckKeyword; - - class SkprwatTable : public PolyInjTable { - public: - SkprwatTable() = default; - explicit SkprwatTable(const DeckKeyword& table); - - static SkprwatTable serializeObject(); - - const std::vector>& getSkinPressures() const; - - bool operator==(const SkprwatTable& data) const; - }; - -} - -#endif //OPM_PARSER_SKPRWAT_TABLE_HPP diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/SlgofTable.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/SlgofTable.hpp deleted file mode 100644 index 17bdba33cd..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/SlgofTable.hpp +++ /dev/null @@ -1,46 +0,0 @@ -/* - Copyright (C) 2015 by Andreas Lauser - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ -#ifndef OPM_PARSER_SLGOF_TABLE_HPP -#define OPM_PARSER_SLGOF_TABLE_HPP - -#include "SimpleTable.hpp" - -namespace Opm { - - class DeckItem; - - class SlgofTable : public SimpleTable { - - public: - SlgofTable( const DeckItem& item, const bool jfunc ); - const TableColumn& getSlColumn() const; - const TableColumn& getKrgColumn() const; - const TableColumn& getKrogColumn() const; - - // this column is p_g - p_o (non-wetting phase pressure minus - // wetting phase pressure for a given gas saturation. the name - // is inconsistent, but it is the one used in the Eclipse - // manual...) - const TableColumn& getPcogColumn() const; - - const TableColumn& getJFuncColumn() const; - }; -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/Sof2Table.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/Sof2Table.hpp deleted file mode 100644 index 9e6686ad86..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/Sof2Table.hpp +++ /dev/null @@ -1,37 +0,0 @@ -/* - Copyright (C) 2012 IRIS AS - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ -#ifndef OPM_PARSER_SOF2_TABLE_HPP -#define OPM_PARSER_SOF2_TABLE_HPP - -#include "SimpleTable.hpp" - -namespace Opm { - - class DeckItem; - - class Sof2Table : public SimpleTable { - public: - Sof2Table( const DeckItem& item ); - - const TableColumn& getSoColumn() const; - const TableColumn& getKroColumn() const; - }; -} -#endif - diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/Sof3Table.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/Sof3Table.hpp deleted file mode 100644 index e3e66a2e1d..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/Sof3Table.hpp +++ /dev/null @@ -1,39 +0,0 @@ -/* - Copyright (C) 2015 IRIS AS - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ -#ifndef OPM_PARSER_SOF3_TABLE_HPP -#define OPM_PARSER_SOF3_TABLE_HPP - -#include "SimpleTable.hpp" - -namespace Opm { - - class DeckItem; - - class Sof3Table : public SimpleTable { - public: - Sof3Table( const DeckItem& item ); - - const TableColumn& getSoColumn() const; - const TableColumn& getKrowColumn() const; - const TableColumn& getKrogColumn() const; - }; -} - -#endif - diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/SolventDensityTable.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/SolventDensityTable.hpp deleted file mode 100644 index 95165c33a9..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/SolventDensityTable.hpp +++ /dev/null @@ -1,58 +0,0 @@ -/* - Copyright (C) 2020 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ -#ifndef OPM_PARSER_SOLVENTDENSITY_TABLE_HPP -#define OPM_PARSER_SOLVENTDENSITY_TABLE_HPP - -namespace Opm { - - class DeckItem; - - class SolventDensityTable { - public: - static SolventDensityTable serializeObject(); - - void init(const Opm::DeckRecord& record); - const std::vector& getSolventDensityColumn() const; - - bool operator==(const SolventDensityTable& data) const; - - std::vector::const_iterator begin() const { - return m_tableValues.begin(); - } - - std::vector::const_iterator end() const { - return m_tableValues.end(); - } - - std::size_t size() const { - return this->m_tableValues.size(); - } - - template - void serializeOp(Serializer& serializer) - { - serializer(m_tableValues); - } - - private: - std::vector m_tableValues; - }; -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/SorwmisTable.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/SorwmisTable.hpp deleted file mode 100644 index c78b379bd2..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/SorwmisTable.hpp +++ /dev/null @@ -1,40 +0,0 @@ -/* - Copyright (C) 2015 Statoil ASA. - 2015 IRIS AS - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ -#ifndef OPM_PARSER_SORWMIS_TABLE_HPP -#define OPM_PARSER_SORWMIS_TABLE_HPP - -#include "SimpleTable.hpp" - -namespace Opm { - - class DeckItem; - - class SorwmisTable : public SimpleTable { - public: - - explicit SorwmisTable( const DeckItem& item ); - - const TableColumn& getWaterSaturationColumn() const; - const TableColumn& getMiscibleResidualOilColumn() const; - - }; -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/SpecheatTable.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/SpecheatTable.hpp deleted file mode 100644 index d36c365b57..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/SpecheatTable.hpp +++ /dev/null @@ -1,41 +0,0 @@ -/* - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ -#ifndef OPM_PARSER_SPECHEAT_TABLE_HPP -#define OPM_PARSER_SPECHEAT_TABLE_HPP - -#include "SimpleTable.hpp" - -namespace Opm { - - class DeckItem; - - // this table specifies the specific heat capacity of the black oil fluids. In this - // context, be aware that the keyword "SPECHEAT" stands for "SPECific HEAT capacity" - // not for a way to cheat on the SPE test cases ;) - class SpecheatTable : public SimpleTable { - public: - SpecheatTable(const DeckItem& item); - - const TableColumn& getTemperatureColumn() const; - const TableColumn& getCvOilColumn() const; - const TableColumn& getCvWaterColumn() const; - const TableColumn& getCvGasColumn() const; - }; -} - -#endif - diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/SpecrockTable.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/SpecrockTable.hpp deleted file mode 100644 index 24d4c49ba6..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/SpecrockTable.hpp +++ /dev/null @@ -1,38 +0,0 @@ -/* - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ -#ifndef OPM_PARSER_SPECROCK_TABLE_HPP -#define OPM_PARSER_SPECROCK_TABLE_HPP - -#include "SimpleTable.hpp" - -namespace Opm { - - class DeckItem; - - // this table specifies the volumetric heat capacity of the rock not including the - // pore space. - class SpecrockTable : public SimpleTable { - public: - SpecrockTable(const DeckItem& item); - - const TableColumn& getTemperatureColumn() const; - const TableColumn& getCvRockColumn() const; - }; -} - -#endif - diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/SsfnTable.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/SsfnTable.hpp deleted file mode 100644 index 8095bdd565..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/SsfnTable.hpp +++ /dev/null @@ -1,40 +0,0 @@ -/* - Copyright (C) 2015 IRIS AS - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ -#ifndef OPM_PARSER_SSFN_TABLE_HPP -#define OPM_PARSER_SSFN_TABLE_HPP - -#include "SimpleTable.hpp" - -namespace Opm { - - class DeckItem; - - class SsfnTable : public SimpleTable { - public: - friend class TableManager; - SsfnTable( const DeckItem& item ); - - const TableColumn& getSolventFractionColumn() const; - const TableColumn& getGasRelPermMultiplierColumn() const; - const TableColumn& getSolventRelPermMultiplierColumn() const; - }; -} - -#endif - diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/StandardCond.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/StandardCond.hpp deleted file mode 100644 index ef09718954..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/StandardCond.hpp +++ /dev/null @@ -1,46 +0,0 @@ -/* - Copyright (C) 2020 by Equinor - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ -#ifndef OPM_PARSER_STANDARDCOND_HPP -#define OPM_PARSER_STANDARDCOND_HPP - -namespace Opm { - - struct StandardCond { - StandardCond(); - - static StandardCond serializeObject(); - - bool operator==(const StandardCond& data) const { - return temperature == data.temperature && - pressure == data.pressure; - } - - template - void serializeOp(Serializer& serializer) - { - serializer(temperature); - serializer(pressure); - } - - double temperature; - double pressure; - }; -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/SwfnTable.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/SwfnTable.hpp deleted file mode 100644 index ddebd87b62..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/SwfnTable.hpp +++ /dev/null @@ -1,43 +0,0 @@ -/* - Copyright (C) 2014 IRIS AS - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ -#ifndef OPM_PARSER_SWFN_TABLE_HPP -#define OPM_PARSER_SWFN_TABLE_HPP - -#include "SimpleTable.hpp" - -namespace Opm { - class SwfnTable : public SimpleTable { - - public: - SwfnTable( const DeckItem& item, const bool jfunc ); - - const TableColumn& getSwColumn() const; - const TableColumn& getKrwColumn() const; - - /// this column is p_o - p_w (non-wetting phase pressure minus - /// wetting phase pressure for a given water saturation) - const TableColumn& getPcowColumn() const; - - /// use this function if JFUNC is set in the deck - const TableColumn& getJFuncColumn() const; - }; -} - -#endif - diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/SwofTable.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/SwofTable.hpp deleted file mode 100644 index d68122a431..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/SwofTable.hpp +++ /dev/null @@ -1,45 +0,0 @@ -/* - Copyright (C) 2014 by Andreas Lauser - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ -#ifndef OPM_PARSER_SWOF_TABLE_HPP -#define OPM_PARSER_SWOF_TABLE_HPP - -#include "SimpleTable.hpp" - -namespace Opm { - - class DeckItem; - - class SwofTable : public SimpleTable { - public: - SwofTable( const DeckItem& item, const bool jfunc ); - const TableColumn& getSwColumn() const; - const TableColumn& getKrwColumn() const; - const TableColumn& getKrowColumn() const; - - // this column is p_o - p_w (non-wetting phase pressure minus - // wetting phase pressure for a given water saturation) - const TableColumn& getPcowColumn() const; - - /// use this function if JFUNC is set in the deck - const TableColumn& getJFuncColumn() const; - }; -} - -#endif - diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/Tabdims.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/Tabdims.hpp deleted file mode 100644 index 866b097d80..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/Tabdims.hpp +++ /dev/null @@ -1,129 +0,0 @@ -/* - Copyright (C) 2015 Statoil ASA - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#ifndef TABDIMS_HPP -#define TABDIMS_HPP - -/* - The Tabdims class is a small utility class designed to hold on to - the values from the TABDIMS keyword. -*/ - -#include -#include -#include -#include - -namespace Opm { - class Tabdims { - public: - - /* - The TABDIMS keyword has a total of 25 items; most of them - are ECLIPSE300 only and quite exotic. Here we only - internalize the most common items. - */ - Tabdims() : - m_ntsfun( ParserKeywords::TABDIMS::NTSFUN::defaultValue ), - m_ntpvt( ParserKeywords::TABDIMS::NTPVT::defaultValue ), - m_nssfun( ParserKeywords::TABDIMS::NSSFUN::defaultValue ), - m_nppvt( ParserKeywords::TABDIMS::NPPVT::defaultValue ), - m_ntfip( ParserKeywords::TABDIMS::NTFIP::defaultValue ), - m_nrpvt( ParserKeywords::TABDIMS::NRPVT::defaultValue ) - { } - - - explicit Tabdims(const Deck& deck) : - Tabdims() - { - if (deck.hasKeyword("TABDIMS")) { - const auto& record = deck.getKeyword( "TABDIMS" , 0 ).getRecord( 0 ); - m_ntsfun = record.getItem("NTSFUN").get(0); - m_ntpvt = record.getItem("NTPVT").get(0); - m_nssfun = record.getItem("NSSFUN").get(0); - m_nppvt = record.getItem("NPPVT").get(0); - m_ntfip = record.getItem("NTFIP").get(0); - m_nrpvt = record.getItem("NRPVT").get(0); - } - } - - static Tabdims serializeObject() - { - Tabdims result; - result.m_ntsfun = 1; - result.m_ntpvt = 2; - result.m_nssfun = 3; - result.m_nppvt = 4; - result.m_ntfip = 5; - result.m_nrpvt = 6; - - return result; - } - - size_t getNumSatTables() const { - return m_ntsfun; - } - - size_t getNumPVTTables() const { - return m_ntpvt; - } - - size_t getNumSatNodes() const { - return m_nssfun; - } - - size_t getNumPressureNodes() const { - return m_nppvt; - } - - size_t getNumFIPRegions() const { - return m_ntfip; - } - - size_t getNumRSNodes() const { - return m_nrpvt; - } - - bool operator==(const Tabdims& data) const { - return this->getNumSatTables() == data.getNumSatTables() && - this->getNumPVTTables() == data.getNumPVTTables() && - this->getNumSatNodes() == data.getNumSatNodes() && - this->getNumPressureNodes() == data.getNumPressureNodes() && - this->getNumFIPRegions() == data.getNumFIPRegions() && - this->getNumRSNodes() == data.getNumRSNodes(); - } - - template - void serializeOp(Serializer& serializer) - { - serializer(m_ntsfun); - serializer(m_ntpvt); - serializer(m_nssfun); - serializer(m_nppvt); - serializer(m_ntfip); - serializer(m_nrpvt); - } - - private: - size_t m_ntsfun,m_ntpvt,m_nssfun,m_nppvt,m_ntfip,m_nrpvt; - }; -} - - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/TableColumn.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/TableColumn.hpp deleted file mode 100644 index ee2e417789..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/TableColumn.hpp +++ /dev/null @@ -1,96 +0,0 @@ -/* - Copyright 2015 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - - -#ifndef OPM_TABLE_COLUMN_HPP -#define OPM_TABLE_COLUMN_HPP - -#include -#include - -#include -#include - -namespace Opm { - - class TableColumn { - public: - TableColumn(); - explicit TableColumn( const ColumnSchema& schema ); - - static TableColumn serializeObject(); - - size_t size( ) const; - const std::string& name() const; - void assertOrder(double value1 , double value2) const; - void addValue(double); - void addDefault(); - void updateValue(size_t index, double value); - double operator[](size_t index) const; - bool defaultApplied(size_t index) const; - bool hasDefault( ) const; - double front() const; - double back() const; - double min() const; - double max() const; - bool inRange( double arg ) const; - - /* - Will extrapolate with constant endpoint values if @argValue - is out of range. - */ - TableIndex lookup(double argValue) const; - double eval( const TableIndex& index) const; - void applyDefaults( const TableColumn& argColumn ); - void assertUnitRange() const; - TableColumn& operator= (const TableColumn& other); - - std::vector vectorCopy() const; - std::vector::const_iterator begin() const; - std::vector::const_iterator end() const; - - bool operator==(const TableColumn& data) const; - - template - void serializeOp(Serializer& serializer) - { - m_schema.serializeOp(serializer); - serializer(m_name); - serializer(m_values); - serializer(m_default); - serializer(m_defaultCount); - } - - private: - void assertUpdate(size_t index, double value) const; - void assertPrevious(size_t index , double value) const; - void assertNext(size_t index , double value) const; - - ColumnSchema m_schema; - std::string m_name; - std::vector m_values; - std::vector m_default; - size_t m_defaultCount; - }; - - -} - - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/TableContainer.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/TableContainer.hpp deleted file mode 100644 index 3da806640f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/TableContainer.hpp +++ /dev/null @@ -1,116 +0,0 @@ -/* - Copyright 2015 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#ifndef OPM_TABLE_CONTAINER_HPP -#define OPM_TABLE_CONTAINER_HPP - -#include -#include -#include - -#undef min -#undef max - -namespace Opm { - - class SimpleTable; - - class TableContainer { - /* - The TableContainer class implements a simple map: - {tableNumber , Table}. The main functionality of the - TableContainer class is that the getTable method implements - the Eclipse behavior: - - If table N is not implemented - use table N - 1. - - The getTable() method will eventually throw an exception if - not even table 0 is there. - - Consider the following code: - - TableContainer container(10); - - std::shared_ptr table0 = std::make_shared(...); - container.addTable( table0 , 0 ) - - We create a container with maximum 10 tables, and then we add - one single table at slot 0; then we have: - - container.size() == 1 - container.hasTable( 0 ) == true - container.hasTable( 9 ) == false - container.hasTable(10 ) == false - - container.getTable( 0 ) == container[9] == table0; - container.gteTable(10 ) ==> exception - */ - public: - using TableMap = std::map>; - - TableContainer(); - explicit TableContainer( size_t maxTables ); - - static TableContainer serializeObject(); - - bool empty() const; - - /* - This is the number of actual tables in the container. - */ - size_t size() const; - - size_t max() const; - const TableMap& tables() const; - void addTable(size_t tableNumber , std::shared_ptr table); - - - /* - Observe that the hasTable() method does not invoke the "If - table N is not implemented use table N - 1 behavior. - */ - size_t hasTable(size_t tableNumber) const; - const SimpleTable& getTable(size_t tableNumber) const; - const SimpleTable& operator[](size_t tableNumber) const; - - template - const TableType& getTable(size_t tableNumber) const { - const SimpleTable &simpleTable = getTable( tableNumber ); - const TableType * table = static_cast( &simpleTable ); - return *table; - } - - bool operator==(const TableContainer& data) const; - - template - void serializeOp(Serializer& serializer) - { - serializer(m_maxTables); - serializer.map(m_tables); - } - - private: - size_t m_maxTables; - TableMap m_tables; - }; - -} - - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/TableEnums.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/TableEnums.hpp deleted file mode 100644 index 2cb6519443..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/TableEnums.hpp +++ /dev/null @@ -1,45 +0,0 @@ -/* - Copyright 2015 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - - -#ifndef OPM_TABLE_ENUMS_HPP -#define OPM_TABLE_ENUMS_HPP - -namespace Opm { - namespace Table { - enum ColumnOrderEnum { - INCREASING = 1, - STRICTLY_INCREASING = 2, - DECREASING = 3, - STRICTLY_DECREASING = 4, - RANDOM = 5 - }; - - enum DefaultAction { - DEFAULT_NONE = 1, - DEFAULT_CONST = 2, - DEFAULT_LINEAR = 3, - }; - - } -} - - - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/TableIndex.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/TableIndex.hpp deleted file mode 100644 index f2fc23e8e0..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/TableIndex.hpp +++ /dev/null @@ -1,51 +0,0 @@ -/* - Copyright 2015 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - - -#ifndef OPM_TABLE_INDEX_HPP -#define OPM_TABLE_INDEX_HPP - -#include - -/* - Small class used to simplify lookup in tables based on linear - interpolation; first binear search in an ordered column is used to - instantiate a TableIndex object, and then subsequently that - TableIndex instance is used to evaluate the corresponding value over - another column. -*/ - -namespace Opm { - - class TableIndex { - public: - TableIndex( size_t index1 , double weight1); - TableIndex( const TableIndex& tableIndex); - size_t getIndex1( ) const; - size_t getIndex2( ) const; - double getWeight1( ) const; - double getWeight2( ) const; - private: - size_t m_index1; - double m_weight1; - }; -} - - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/TableManager.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/TableManager.hpp deleted file mode 100644 index c45e4ef795..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/TableManager.hpp +++ /dev/null @@ -1,519 +0,0 @@ -/* - Copyright 2015 Statoil ASA. - Copyright 2018 IRIS - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#ifndef OPM_TABLE_MANAGER_HPP -#define OPM_TABLE_MANAGER_HPP - -#include -#include - -#include -#include - -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -namespace Opm { - - class TableManager { - public: - explicit TableManager( const Deck& deck ); - TableManager() = default; - - static TableManager serializeObject(); - - TableManager& operator=(const TableManager& data); - - const TableContainer& getTables( const std::string& tableName ) const; - const TableContainer& operator[](const std::string& tableName) const; - bool hasTables( const std::string& tableName ) const; - - const Tabdims& getTabdims() const; - const Eqldims& getEqldims() const; - const Aqudims& getAqudims() const; - const Regdims& getRegdims() const; - - /* - WIll return max{ Tabdims::NTFIP , Regdims::NTFIP }. - */ - size_t numFIPRegions() const; - - const TableContainer& getSwofTables() const; - const TableContainer& getSgwfnTables() const; - const TableContainer& getSof2Tables() const; - const TableContainer& getSof3Tables() const; - const TableContainer& getSgofTables() const; - const TableContainer& getSlgofTables() const; - const TableContainer& getSwfnTables() const; - const TableContainer& getSgfnTables() const; - const TableContainer& getSsfnTables() const; - const TableContainer& getRsvdTables() const; - const TableContainer& getRvvdTables() const; - const TableContainer& getPbvdTables() const; - const TableContainer& getPdvdTables() const; - const TableContainer& getSaltvdTables() const; - const TableContainer& getEnkrvdTables() const; - const TableContainer& getEnptvdTables() const; - const TableContainer& getImkrvdTables() const; - const TableContainer& getImptvdTables() const; - const TableContainer& getPvdgTables() const; - const TableContainer& getPvdoTables() const; - const TableContainer& getPvdsTables() const; - const TableContainer& getSpecheatTables() const; - const TableContainer& getSpecrockTables() const; - const TableContainer& getWatvisctTables() const; - const TableContainer& getOilvisctTables() const; - const TableContainer& getGasvisctTables() const; - const TableContainer& getRtempvdTables() const; - const TableContainer& getRocktabTables() const; - const TableContainer& getPlyadsTables() const; - const TableContainer& getPlyviscTables() const; - const TableContainer& getPlydhflfTables() const; - const TableContainer& getPlymaxTables() const; - const TableContainer& getPlyrockTables() const; - const TableContainer& getPlyshlogTables() const; - const TableContainer& getAqutabTables() const; - const TableContainer& getFoamadsTables() const; - const TableContainer& getFoammobTables() const; - - const TableContainer& getSorwmisTables() const; - const TableContainer& getSgcwmisTables() const; - const TableContainer& getMiscTables() const; - const TableContainer& getPmiscTables() const; - const TableContainer& getMsfnTables() const; - const TableContainer& getTlpmixpaTables() const; - - const JFunc& getJFunc() const; - - const std::vector& getPvtgTables() const; - const std::vector& getPvtoTables() const; - const std::vector& getRock2dTables() const; - const std::vector& getRock2dtrTables() const; - const TableContainer& getRockwnodTables() const; - const TableContainer& getOverburdTables() const; - - const DenT& WatDenT() const; - const DenT& GasDenT() const; - const DenT& OilDenT() const; - const StandardCond& stCond() const; - std::size_t gas_comp_index() const; - const PvtwTable& getPvtwTable() const; - const std::vector& getPvtwSaltTables() const; - const std::vector& getBrineDensityTables() const; - const std::vector& getSolventDensityTables() const; - - const PvcdoTable& getPvcdoTable() const; - const DensityTable& getDensityTable() const; - const PlyvmhTable& getPlyvmhTable() const; - const RockTable& getRockTable() const; - const ViscrefTable& getViscrefTable() const; - const PlmixparTable& getPlmixparTable() const; - const ShrateTable& getShrateTable() const; - const Stone1exTable& getStone1exTable() const; - const TlmixparTable& getTlmixparTable() const; - const WatdentTable& getWatdentTable() const; - const std::map& getPlymwinjTables() const; - const std::map& getSkprwatTables() const; - const std::map& getSkprpolyTables() const; - const std::map& getSimpleTables() const; - - /// deck has keyword "IMPTVD" --- Imbition end-point versus depth tables - bool useImptvd() const; - - /// deck has keyword "ENPTVD" --- Saturation end-point versus depth tables - bool useEnptvd() const; - - /// deck has keyword "EQLNUM" --- Equilibriation region numbers - bool useEqlnum() const; - - /// deck has keyword "SHRATE" - bool useShrate() const; - - /// deck has keyword "JFUNC" --- Use Leverett's J Function for capillary pressure - bool useJFunc() const; - - double rtemp() const; - - bool operator==(const TableManager& data) const; - - template - void serializeOp(Serializer& serializer) - { - auto simpleTables = m_simpleTables; - auto split = splitSimpleTable(simpleTables); - serializer.map(simpleTables); - serializer(split.plyshMax); - serializer.map(split.plyshMap); - serializer(split.rockMax); - serializer.map(split.rockMap); - serializer.vector(m_pvtgTables); - serializer.vector(m_pvtoTables); - serializer.vector(m_rock2dTables); - serializer.vector(m_rock2dtrTables); - m_pvtwTable.serializeOp(serializer); - m_pvcdoTable.serializeOp(serializer); - m_densityTable.serializeOp(serializer); - m_plyvmhTable.serializeOp(serializer); - m_rockTable.serializeOp(serializer); - m_plmixparTable.serializeOp(serializer); - m_shrateTable.serializeOp(serializer); - m_stone1exTable.serializeOp(serializer); - m_tlmixparTable.serializeOp(serializer); - m_viscrefTable.serializeOp(serializer); - m_watdentTable.serializeOp(serializer); - serializer.vector(m_pvtwsaltTables); - serializer.vector(m_bdensityTables); - serializer.vector(m_sdensityTables); - serializer.map(m_plymwinjTables); - serializer.map(m_skprwatTables); - serializer.map(m_skprpolyTables); - m_tabdims.serializeOp(serializer); - m_regdims.serializeOp(serializer); - m_eqldims.serializeOp(serializer); - m_aqudims.serializeOp(serializer); - serializer(hasImptvd); - serializer(hasEnptvd); - serializer(hasEqlnum); - serializer(hasShrate); - serializer(jfunc); - oilDenT.serializeOp(serializer); - gasDenT.serializeOp(serializer); - watDenT.serializeOp(serializer); - stcond.serializeOp(serializer); - serializer(m_gas_comp_index); - serializer(m_rtemp); - if (!serializer.isSerializing()) { - m_simpleTables = simpleTables; - if (split.plyshMax > 0) { - TableContainer container(split.plyshMax); - for (const auto& it : split.plyshMap) { - container.addTable(it.first, it.second); - } - m_simpleTables.insert(std::make_pair("PLYSHLOG", container)); - } - if (split.rockMax > 0) { - TableContainer container(split.rockMax); - for (const auto& it : split.rockMap) { - container.addTable(it.first, it.second); - } - m_simpleTables.insert(std::make_pair("ROCKTAB", container)); - } - } - } - - private: - TableContainer& forceGetTables( const std::string& tableName , size_t numTables); - - void complainAboutAmbiguousKeyword(const Deck& deck, const std::string& keywordName); - - void addTables( const std::string& tableName , size_t numTables); - void initSimpleTables(const Deck& deck); - void initRTempTables(const Deck& deck); - void initDims(const Deck& deck); - void initRocktabTables(const Deck& deck); - void initGasvisctTables(const Deck& deck); - - void initPlymaxTables(const Deck& deck); - void initPlyrockTables(const Deck& deck); - void initPlyshlogTables(const Deck& deck); - - void initPlymwinjTables(const Deck& deck); - void initSkprwatTables(const Deck& deck); - void initSkprpolyTables(const Deck& deck); - - //void initRockTables(const Deck& deck, const std::string& keywordName); - - template - void initRockTables(const Deck& deck, const std::string& keywordName, std::vector& rocktable ) { - - if (!deck.hasKeyword(keywordName)) - return; - - if (!deck.hasKeyword("ROCKCOMP")) { - OpmLog::error("ROCKCOMP must be present if ROCK2DTR is used"); - } - - if (!deck.hasKeyword("ROCKWNOD")) { - OpmLog::error("ROCKWNOD must be present if ROCK2DTR is used"); - } - - const auto& rockcompKeyword = deck.getKeyword("ROCKCOMP"); - const auto& record = rockcompKeyword.getRecord( 0 ); - size_t numTables = record.getItem("NTROCC").get< int >(0); - rocktable.resize(numTables); - - const auto& keyword = deck.getKeyword(keywordName); - size_t numEntries = keyword.size(); - size_t regionIdx = 0; - size_t tableIdx = 0; - for (unsigned lineIdx = 0; lineIdx < numEntries; ++lineIdx) { - if (keyword.getRecord(lineIdx).getItem("PRESSURE").hasValue(0)) { - rocktable[regionIdx].init(keyword.getRecord(lineIdx), tableIdx); - tableIdx++; - } else { // next region - tableIdx = 0; - regionIdx++; - } - } - assert(regionIdx == numTables - 1 ); - } - - - template - void initPvtwsaltTables(const Deck& deck, std::vector& pvtwtables ) { - - size_t numTables = m_tabdims.getNumPVTTables(); - pvtwtables.resize(numTables); - - const auto& keyword = deck.getKeyword("PVTWSALT"); - size_t numEntries = keyword.size(); - size_t regionIdx = 0; - for (unsigned lineIdx = 0; lineIdx < numEntries; lineIdx += 2) { - pvtwtables[regionIdx].init(keyword.getRecord(lineIdx), keyword.getRecord(lineIdx+1)); - ++regionIdx; - } - assert(regionIdx == numTables); - } - - template - void initBrineTables(const Deck& deck, std::vector& brinetables ) { - - size_t numTables = m_tabdims.getNumPVTTables(); - brinetables.resize(numTables); - - const auto& keyword = deck.getKeyword("BDENSITY"); - size_t numEntries = keyword.size(); - assert(numEntries == numTables); - for (unsigned lineIdx = 0; lineIdx < numEntries; ++lineIdx) { - brinetables[lineIdx].init(keyword.getRecord(lineIdx)); - } - } - - - void initSolventTables(const Deck& deck, std::vector& solventtables); - - /** - * JFUNC - */ - template - void initSimpleTableContainerWithJFunc(const Deck& deck, - const std::string& keywordName, - const std::string& tableName, - size_t numTables) { - if (!deck.hasKeyword(keywordName)) - return; // the table is not featured by the deck... - - auto& container = forceGetTables(tableName , numTables); - - if (deck.count(keywordName) > 1) { - complainAboutAmbiguousKeyword(deck, keywordName); - return; - } - - const auto& tableKeyword = deck.getKeyword(keywordName); - for (size_t tableIdx = 0; tableIdx < tableKeyword.size(); ++tableIdx) { - const auto& dataItem = tableKeyword.getRecord( tableIdx ).getItem("DATA"); - if (dataItem.data_size() > 0) { - std::shared_ptr table = std::make_shared( dataItem, useJFunc() ); - container.addTable( tableIdx , table ); - } - } - } - - - - template - void initSimpleTableContainer(const Deck& deck, - const std::string& keywordName, - const std::string& tableName, - size_t numTables) { - if (!deck.hasKeyword(keywordName)) - return; // the table is not featured by the deck... - - auto& container = forceGetTables(tableName , numTables); - - if (deck.count(keywordName) > 1) { - complainAboutAmbiguousKeyword(deck, keywordName); - return; - } - - const auto& tableKeyword = deck.getKeyword(keywordName); - for (size_t tableIdx = 0; tableIdx < tableKeyword.size(); ++tableIdx) { - const auto& dataItem = tableKeyword.getRecord( tableIdx ).getItem("DATA"); - if (dataItem.data_size() > 0) { - std::shared_ptr table = std::make_shared( dataItem ); - container.addTable( tableIdx , table ); - } - } - } - - template - void initSimpleTableContainer(const Deck& deck, - const std::string& keywordName, - size_t numTables) { - initSimpleTableContainer(deck , keywordName , keywordName , numTables); - } - - - template - void initSimpleTableContainerWithJFunc(const Deck& deck, - const std::string& keywordName, - size_t numTables) { - initSimpleTableContainerWithJFunc(deck , keywordName , keywordName , numTables); - } - - - - template - void initSimpleTable(const Deck& deck, - const std::string& keywordName, - std::vector& tableVector) { - if (!deck.hasKeyword(keywordName)) - return; // the table is not featured by the deck... - - if (deck.count(keywordName) > 1) { - complainAboutAmbiguousKeyword(deck, keywordName); - return; - } - - const auto& tableKeyword = deck.getKeyword(keywordName); - for (size_t tableIdx = 0; tableIdx < tableKeyword.size(); ++tableIdx) { - const auto& dataItem = tableKeyword.getRecord( tableIdx ).getItem("DATA"); - if (dataItem.data_size() == 0) { - // for simple tables, an empty record indicates that the previous table - // should be copied... - if (tableIdx == 0) { - std::string msg = "The first table for keyword "+keywordName+" must be explicitly defined! Ignoring keyword"; - const auto& location = tableKeyword.location(); - OpmLog::warning(Log::fileMessage(location, msg)); - return; - } - tableVector.push_back(tableVector.back()); - continue; - } - - tableVector.push_back(TableType()); - tableVector[tableIdx].init(dataItem); - } - } - - - template - void initFullTables(const Deck& deck, - const std::string& keywordName, - std::vector& tableVector) { - if (!deck.hasKeyword(keywordName)) - return; // the table is not featured by the deck... - - if (deck.count(keywordName) > 1) { - complainAboutAmbiguousKeyword(deck, keywordName); - return; - } - - const auto& tableKeyword = deck.getKeyword(keywordName); - - int numTables = TableType::numTables( tableKeyword ); - for (int tableIdx = 0; tableIdx < numTables; ++tableIdx) - tableVector.emplace_back( tableKeyword , tableIdx ); - } - - std::map m_simpleTables; - std::vector m_pvtgTables; - std::vector m_pvtoTables; - std::vector m_rock2dTables; - std::vector m_rock2dtrTables; - PvtwTable m_pvtwTable; - PvcdoTable m_pvcdoTable; - DensityTable m_densityTable; - PlyvmhTable m_plyvmhTable; - RockTable m_rockTable; - PlmixparTable m_plmixparTable; - ShrateTable m_shrateTable; - Stone1exTable m_stone1exTable; - TlmixparTable m_tlmixparTable; - ViscrefTable m_viscrefTable; - WatdentTable m_watdentTable; - std::vector m_pvtwsaltTables; - std::vector m_bdensityTables; - std::vector m_sdensityTables; - std::map m_plymwinjTables; - std::map m_skprwatTables; - std::map m_skprpolyTables; - - Tabdims m_tabdims; - Regdims m_regdims; - Eqldims m_eqldims; - Aqudims m_aqudims; - - bool hasImptvd = false;// if deck has keyword IMPTVD - bool hasEnptvd = false;// if deck has keyword ENPTVD - bool hasEqlnum = false;// if deck has keyword EQLNUM - bool hasShrate = false;// if deck has keyword SHRATE - std::shared_ptr jfunc; - - DenT oilDenT; - DenT gasDenT; - DenT watDenT; - StandardCond stcond; - std::size_t m_gas_comp_index; - double m_rtemp; - - struct SplitSimpleTables { - size_t plyshMax = 0; - size_t rockMax = 0; - std::map> plyshMap; - std::map> rockMap; - }; - - SplitSimpleTables splitSimpleTable(std::map& simpleTables); - }; -} - - -#endif - diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/TableSchema.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/TableSchema.hpp deleted file mode 100644 index 1f17268594..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/TableSchema.hpp +++ /dev/null @@ -1,57 +0,0 @@ -/* - Copyright 2015 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - - -#ifndef OPM_TABLE_SCHEMA_HPP -#define OPM_TABLE_SCHEMA_HPP - -#include - -#include -#include - -namespace Opm { - - class TableSchema { - public: - static TableSchema serializeObject(); - - void addColumn( ColumnSchema ); - const ColumnSchema& getColumn( const std::string& name ) const; - const ColumnSchema& getColumn( size_t columnIndex ) const; - bool hasColumn(const std::string&) const; - - /* Number of columns */ - size_t size() const; - - bool operator==(const TableSchema& data) const; - - template - void serializeOp(Serializer& serializer) - { - m_columns.serializeOp(serializer); - } - - private: - OrderedMap m_columns; - }; -} - -#endif - diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/TlpmixpaTable.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/TlpmixpaTable.hpp deleted file mode 100644 index 1dd6fddabd..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/TlpmixpaTable.hpp +++ /dev/null @@ -1,39 +0,0 @@ -/* - Copyright (C) 2015 Statoil ASA. - 2016 IRIS AS - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ -#ifndef OPM_PARSER_TLPMIXPA_TABLE_HPP -#define OPM_PARSER_TLPMIXPA_TABLE_HPP - -#include "SimpleTable.hpp" - -namespace Opm { - - class DeckItem; - - class TlpmixpaTable : public SimpleTable { - public: - TlpmixpaTable( const DeckItem& item ); - - const TableColumn& getOilPhasePressureColumn() const; - const TableColumn& getMiscibilityColumn() const; - - }; -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/TracerVdTable.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/TracerVdTable.hpp deleted file mode 100644 index 9c3d9109c5..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/TracerVdTable.hpp +++ /dev/null @@ -1,55 +0,0 @@ -/* - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 2 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - - Consult the COPYING file in the top-level source directory of this - module for the precise wording of the license and the list of - copyright holders. -*/ -/*! - * \file - * - * \copydoc Opm::TracerVdTable - */ -#ifndef TRACER_VD_TABLE_HPP -#define TRACER_VD_TABLE_HPP - -#include - -namespace Opm { - -/*! - * \brief A class that contains tracer concentration vs depth table - */ -class TracerVdTable : public SimpleTable -{ -public: - TracerVdTable() = default; - explicit TracerVdTable(const Opm::DeckItem& item, double inv_volume); - - /*! - * \brief Return the depth column - */ - const Opm::TableColumn& getDepthColumn() const; - - /*! - * \brief Return the tracer concentration column - */ - const Opm::TableColumn& getTracerConcentration() const; -}; -} - - -#endif // TRACER_VD_TABLE_HPP diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/WatvisctTable.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/WatvisctTable.hpp deleted file mode 100644 index 944a7ba137..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Tables/WatvisctTable.hpp +++ /dev/null @@ -1,35 +0,0 @@ -/* - Copyright (C) 2015 by Andreas Lauser - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ -#ifndef OPM_PARSER_WATVISCT_TABLE_HPP -#define OPM_PARSER_WATVISCT_TABLE_HPP - -#include "SimpleTable.hpp" - -namespace Opm { - - class WatvisctTable : public SimpleTable { - public: - WatvisctTable( const DeckItem& item ); - - const TableColumn& getTemperatureColumn() const; - const TableColumn& getWaterViscosityColumn() const; - }; -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/TracerConfig.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/TracerConfig.hpp deleted file mode 100644 index 77dc9ee0b5..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/TracerConfig.hpp +++ /dev/null @@ -1,93 +0,0 @@ -/* - Copyright (C) 2020 Equinor - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef OPM_TRACER_CONFIG_HPP -#define OPM_TRACER_CONFIG_HPP - -#include -#include - -namespace Opm { - -class Deck; -class UnitSystem; - -class TracerConfig { -public: - struct TracerEntry { - std::string name; - Phase phase = Phase::OIL; - std::vector concentration; - TracerVdTable tvdpf; - - TracerEntry() = default; - TracerEntry(const std::string& name_, Phase phase_, std::vector concentration_) - : name(name_) - , phase(phase_) - , concentration(std::move(concentration_)) - {} - - TracerEntry(const std::string& name_, Phase phase_, TracerVdTable tvdpf_) - : name(name_) - , phase(phase_) - , tvdpf(std::move(tvdpf_)) - {} - - bool operator==(const TracerEntry& data) const { - return this->name == data.name && - this->phase == data.phase && - this->concentration == data.concentration && - this->tvdpf == data.tvdpf; - } - - template - void serializeOp(Serializer& serializer) - { - serializer(name); - serializer(phase); - serializer(concentration); - tvdpf.serializeOp(serializer); - } - }; - - TracerConfig() = default; - TracerConfig(const UnitSystem& unit_system, const Deck& deck); - - static TracerConfig serializeObject(); - - size_t size() const; - - const std::vector::const_iterator begin() const; - const std::vector::const_iterator end() const; - - template - void serializeOp(Serializer& serializer) - { - serializer.vector(tracers); - } - - bool operator==(const TracerConfig& data) const; - -private: - std::vector tracers; -}; - -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Util/IOrderSet.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Util/IOrderSet.hpp deleted file mode 100644 index 1e619b8d75..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Util/IOrderSet.hpp +++ /dev/null @@ -1,130 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#ifndef OPM_IORDER_SET_HPP -#define OPM_IORDER_SET_HPP - -#include -#include -#include -#include -#include -#include - -namespace Opm { - - -/* - Small class which implements a container which behaves roughly like - std::set, but the insert order is preserved - i.e. when iterating over the - elements in the container they will come out in the order they have been - inserted. If an element is added multiple times the order in the container - will not be updated. - - The set has an erase() method which can be used to remove elements, otherwise - the elements in the container are immutable. - - The elements are duplicated in the std::set and std::vector, and the - class should not be used for large objects. -*/ - -template -class IOrderSet { -public: - using storage_type = typename std::vector; - using index_type = typename std::unordered_set; - using const_iter_type = typename storage_type::const_iterator; - -private: - index_type m_index; - storage_type m_data; - -public: - IOrderSet() = default; - IOrderSet(const index_type& index, const storage_type& data) - : m_index(index) - , m_data(data) - {} - - std::size_t size() const { - return this->m_index.size(); - } - - bool empty() const { - return (this->size() == 0); - } - - std::size_t count(const T& value) const { - return this->m_index.count(value); - } - - bool contains(const T& value) const { - return (this->count(value) != 0); - } - - bool insert(const T& value) { - if (this->contains(value)) - return false; - - this->m_index.insert(value); - this->m_data.push_back(value); - return true; - } - - std::size_t erase(const T& value) { - if (!this->contains(value)) - return 0; - - this->m_index.erase(value); - auto data_iter = std::find(this->m_data.begin(), this->m_data.end(), value); - this->m_data.erase(data_iter); - return 1; - } - - const_iter_type begin() const { - return this->m_data.begin(); - } - - const_iter_type end() const { - return this->m_data.end(); - } - - const T& operator[](std::size_t i) const { - return this->m_data.at(i); - } - - const std::vector& data() const { - return this->m_data; - }; - - bool operator==(const IOrderSet& data) const { - return this->m_index == data.m_index && - this->data() == data.data(); - } - - template - void serializeOp(Serializer& serializer) - { - serializer(m_index); - serializer(m_data); - } -}; -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Util/OrderedMap.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Util/OrderedMap.hpp deleted file mode 100644 index d31cbf3227..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Util/OrderedMap.hpp +++ /dev/null @@ -1,205 +0,0 @@ -/* - Copyright 2014 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#ifndef OPM_ORDERED_MAP_HPP -#define OPM_ORDERED_MAP_HPP - -#include -#include -#include -#include -#include - -namespace Opm { - -template -class OrderedMap { -public: - using storage_type = typename std::vector>; - using index_type = typename std::unordered_map; - using iter_type = typename storage_type::iterator; - using const_iter_type = typename storage_type::const_iterator; - -private: - index_type m_map; - storage_type m_vector; - -public: - - OrderedMap() = default; - - OrderedMap(const index_type& index, const storage_type& storage) - : m_map(index) - , m_vector(storage) - { - } - - const index_type& getIndex() const { return m_map; } - - const storage_type& getStorage() const { return m_vector; } - - std::size_t count(const K& key) const { - return this->m_map.count(key); - } - - - - T& operator[](const K& key) { - if (this->count(key) == 0) - this->insert( std::make_pair(key, T())); - - return this->at(key); - } - - - std::size_t erase(const K& key) { - if (this->count(key) == 0) - return 0; - - std::size_t index = this->m_map.at(key); - this->m_map.erase(key); - this->m_vector.erase(this->m_vector.begin() + index); - - for (const auto& index_pair : this->m_map) { - auto target_index = index_pair.second; - if (target_index > index) - target_index--; - - this->m_map[index_pair.first] = target_index; - } - return 1; - } - - - void insert(std::pair key_value_pair) { - if (this->count(key_value_pair.first) > 0) { - auto iter = m_map.find( key_value_pair.first ); - size_t index = iter->second; - m_vector[index] = key_value_pair; - } else { - size_t index = m_vector.size(); - this->m_map.emplace(key_value_pair.first, index); - this->m_vector.push_back( std::move( key_value_pair ) ); - } - } - - - T& get(const K& key) { - auto iter = m_map.find( key ); - if (iter == m_map.end()) - throw std::invalid_argument("Key not found:"); - else { - size_t index = iter->second; - return iget(index); - } - } - - - T& iget(size_t index) { - if (index >= m_vector.size()) - throw std::invalid_argument("Invalid index"); - return m_vector[index].second; - } - - const T& get(const K& key) const { - const auto& iter = this->m_map.find( key ); - if (iter == m_map.end()) - throw std::invalid_argument("Key not found: ??"); - else { - size_t index = iter->second; - return iget(index); - } - } - - - const T& iget(size_t index) const { - if (index >= m_vector.size()) - throw std::invalid_argument("Invalid index"); - return m_vector[index].second; - } - - const T& at(size_t index) const { - return this->iget(index); - } - - const T& at(const K& key) const { - return this->get(key); - } - - T& at(size_t index) { - return this->iget(index); - } - - T& at(const K& key) { - return this->get(key); - } - - size_t size() const { - return m_vector.size(); - } - - - const_iter_type begin() const { - return m_vector.begin(); - } - - - const_iter_type end() const { - return m_vector.end(); - } - - iter_type begin() { - return m_vector.begin(); - } - - iter_type end() { - return m_vector.end(); - } - - iter_type find(const K& key) { - const auto map_iter = this->m_map.find(key); - if (map_iter == this->m_map.end()) - return this->m_vector.end(); - - return std::next(this->m_vector.begin(), map_iter->second); - } - - const_iter_type find(const K& key) const { - const auto map_iter = this->m_map.find(key); - if (map_iter == this->m_map.end()) - return this->m_vector.end(); - - return std::next(this->m_vector.begin(), map_iter->second); - } - - bool operator==(const OrderedMap& data) const { - return this->getIndex() == data.getIndex() && - this->getStorage() == data.getStorage(); - } - - template - void serializeOp(Serializer& serializer) - { - serializer(m_map); - serializer.vector(m_vector); - } -}; -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Util/Value.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Util/Value.hpp deleted file mode 100644 index f829ddddf5..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/Util/Value.hpp +++ /dev/null @@ -1,111 +0,0 @@ -/* - Copyright 2014 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#ifndef OPM_VALUE_HPP -#define OPM_VALUE_HPP - -#include -#include - - -/* - The simple class Value keeps track of a named scalar variable; - the purpose of this class is to keep strick track of whether the - value has been assigned or not. Will throw an exception if trying to - use an unitialized value. -*/ - - - -namespace Opm { - -template -class Value { - -private: - std::string m_name; - bool m_initialized = false; - T m_value; - - -public: - - Value() = default; - explicit Value(const std::string& name) : - m_name( name ), - m_initialized( false ) - { } - - - Value(const std::string& name ,T value) : - m_name( name ) - { - setValue( value ); - } - - - bool hasValue() const { - return m_initialized; - } - - - T getValue() const { - if (m_initialized) - return m_value; - else - throw std::logic_error("The value has: " + m_name + " has not been initialized"); - } - - - void setValue( T value ) { - m_initialized = true; - m_value = value; - } - - /** - Will return true if both value instances have been initialized - to the same value; or none of the values have been - initialized. Does not compare names. - */ - bool equal( const Value& other) const { - if (m_initialized == other.m_initialized) { - if (m_initialized) { - if (m_value == other.m_value) - return true; // Have been initialized to same value - else - return false; - } else - return true; // Both undefined - } else - return false; - } - - bool operator==( const Value& rhs ) const { - return this->equal( rhs ); - } - - bool operator!=( const Value& rhs ) const { - return !(*this == rhs ); - } - - -}; -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/checkDeck.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/checkDeck.hpp deleted file mode 100644 index 8339f8ce9e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/EclipseState/checkDeck.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/* - Copyright 2014 Andreas Lauser - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#ifndef OPM_CHECK_DECK_HPP -#define OPM_CHECK_DECK_HPP - -#include - -namespace Opm { - - class Deck; - class Parser; - class ParseContext; - class ErrorGuard; - -enum DeckChecks { - SectionTopology = 0x0001, - - // KeywordSection check only has an effect of the SectionTopology test is enabled - KeywordSection = 0x0002, - - UnknownKeywords = 0x0004, - - AllChecks = 0xffff -}; - -// some semantical correctness checks of the deck. this method adds a warning to -// the deck object if any issue is found ... -bool checkDeck( const Deck& deck, const Parser& parser, const ParseContext& parseContext, ErrorGuard& errorGuard, size_t enabledChecks = AllChecks); - -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Generator/KeywordGenerator.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Generator/KeywordGenerator.hpp deleted file mode 100644 index 3b07a1c771..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Generator/KeywordGenerator.hpp +++ /dev/null @@ -1,50 +0,0 @@ -/* - Copyright 2015 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - - -#ifndef KEYWORD_GENERATOR_HPP -#define KEYWORD_GENERATOR_HPP - -#include - -namespace Opm { - - class KeywordLoader; - - class KeywordGenerator { - - public: - KeywordGenerator(bool verbose); - - static void ensurePath( const std::string& file_name); - static std::string endTest(); - static std::string startTest(const std::string& test_name); - static std::string headerHeader( const std::string& ); - static void updateFile(const std::stringstream& newContent, const std::string& filename); - - void updateInitSource(const KeywordLoader& loader, const std::string& sourceFile ) const; - void updateKeywordSource(const KeywordLoader& loader, const std::string& sourceFile ) const; - void updateHeader(const KeywordLoader& loader, const std::string& headerBuildPath, const std::string& headerPath) const; - void updateTest(const KeywordLoader& loader , const std::string& testFile) const; - private: - bool m_verbose; - }; -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Generator/KeywordLoader.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Generator/KeywordLoader.hpp deleted file mode 100644 index 7df16a430e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Generator/KeywordLoader.hpp +++ /dev/null @@ -1,47 +0,0 @@ -/* - Copyright 2015 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - - -#ifndef KEYWORD_LOADER_HPP -#define KEYWORD_LOADER_HPP - -#include -#include -#include - -#include - -namespace Opm { - - - class KeywordLoader { - - public: - KeywordLoader(const std::vector& keyword_files, bool verbose); - std::string getJsonFile(const std::string& keyword) const; - - std::map >::const_iterator begin( ) const; - std::map >::const_iterator end( ) const; - private: - std::map> keywords; - std::map m_jsonFile; - }; -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Parser/ErrorGuard.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Parser/ErrorGuard.hpp deleted file mode 100644 index 053f5d1560..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Parser/ErrorGuard.hpp +++ /dev/null @@ -1,54 +0,0 @@ -/* - Copyright 2019 Joakim Hove/datagr - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - - -#ifndef ERROR_GUARD_HPP -#define ERROR_GUARD_HPP - -#include -#include - -namespace Opm { - -class ErrorGuard { -public: - void addError(const std::string& errorKey, const std::string& msg); - void addWarning(const std::string& errorKey, const std::string &msg); - void clear(); - - explicit operator bool() const { return !this->error_list.empty(); } - - /* - Observe that this desctructor has a somewhat special semantics. If there - are errors in the error list it will print all warnings and errors on - stderr and throw std::runtime_error. - */ - ~ErrorGuard(); - void terminate() const; - void dump() const; - -private: - - std::vector> error_list; - std::vector> warning_list; -}; - -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Parser/InputErrorAction.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Parser/InputErrorAction.hpp deleted file mode 100644 index ae07efaa74..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Parser/InputErrorAction.hpp +++ /dev/null @@ -1,48 +0,0 @@ -/* - Copyright 2015 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#ifndef OPM_INPUT_ERROR_ACTION_HPP -#define OPM_INPUT_ERROR_ACTION_HPP - -namespace Opm { - - namespace InputError { - - - /* - The THROW_EXCEPTION and EXIT1 error handlers are overlapping, the - intention os that the EXIT1 handler should be used in situations which - are clearly user errors where an exception/traceback is of no use to - the developers. The prototype of an error mode which should be handled - with EXIT1 is PARSE_MISSING_INCLUDE. - */ - - enum Action { - THROW_EXCEPTION = 0, - WARN = 1, - IGNORE = 2, - EXIT1 = 3, - DELAYED_EXIT1 = 4 - }; - } -} - - - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Parser/ParseContext.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Parser/ParseContext.hpp deleted file mode 100644 index 2642013138..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Parser/ParseContext.hpp +++ /dev/null @@ -1,370 +0,0 @@ -/* - Copyright 2015 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - - -#ifndef OPM_PARSE_CONTEXT_HPP -#define OPM_PARSE_CONTEXT_HPP - -#include -#include -#include -#include - -#include - -#include - -namespace Opm { - - - /* - The ParseContext class is meant to control the behavior of the - parsing and EclipseState construction phase when - errors/inconsistencies/... are encountered in the input. - - For each of the possible problems encountered the possible - actions are goverened by the InputError::Action enum: - - InputError::THROW_EXCEPTION - InputError::EXIT1 - InputError::WARN - InputError::IGNORE - - The internal datastructure is a map between string keys and - enum InputError::Action values. The string keys are meant to be - descriptive like: - - "PARSE_RANDOMTEXT" - - - The constructor will consult the env variable - OPM_ERRORS_IGNORE, OPM_ERRORS_WARN and OPM_ERRORS_EXCEPTION - when initializing. The variables should be set as strings of - update syntax. - - update_syntax: The main function for updating the policy of a - parseContext instance is the update() method. That takes a string - as input, and updates the matching flags. The string can - contain wildcards ('* and '?' mathced with fnmatch()) and is - split on ':' or '|' to allow multiple settings to be applied in - one go: - - Just set one variable: - update("PARSE_RANDOM_SLASH" , InputError::IGNORE) - - Ignore all unsupported features: - update("UNSUPPORTED_*" , InputError::IGNORE) - - Set two variables: - update("UNSUPPORTED_INIITIAL_THPRES:PARSE_RANDOM_SLASH" , InputError::IGNORE) - - The update function itself is quite tolerant, and will silently - ignore unknown keys. If you use the updateKey() function only - recognizd keys will be allowed. - */ - - class ErrorGuard; - - class ParseContext { - public: - ParseContext(); - explicit ParseContext(InputError::Action default_action); - explicit ParseContext(const std::vector>& initial); - - void handleError( const std::string& errorKey, const std::string& msg, ErrorGuard& errors ) const; - void handleUnknownKeyword(const std::string& keyword, ErrorGuard& errors) const; - bool hasKey(const std::string& key) const; - ParseContext withKey(const std::string& key, InputError::Action action = InputError::WARN) const; - ParseContext& withKey(const std::string& key, InputError::Action action = InputError::WARN); - void updateKey(const std::string& key , InputError::Action action); - void update(InputError::Action action); - void update(const std::string& keyString , InputError::Action action); - void ignoreKeyword(const std::string& keyword); - InputError::Action get(const std::string& key) const; - std::map::const_iterator begin() const; - std::map::const_iterator end() const; - /* - When the key is added it is inserted in 'strict mode', - i.e. with the value 'InputError::THROW_EXCEPTION. If you - want a different value you must subsequently call the update - method. - */ - void addKey(const std::string& key, InputError::Action default_action); - /* - The PARSE_EXTRA_RECORDS field regulates how the parser - responds to keywords whose size has been defined in the - previous keyword. - Example: - EQLDIMS - 2 100 20 1 1 / - EQUIL\n - 2469 382.4 1705.0 0.0 500 0.0 1 1 20 / - 2469 382.4 1705.0 0.0 500 0.0 1 1 20 / - 2470 382.4 1705.0 0.0 500 0.0 1 1 20 / - EQLDIMS's first entry is 2 and defines the record size of the - EQUIL keyword. Since there are 3 records in EQUIL, this results - in an error that needs to be handled by the parser. By default, - an exception is thrown, or it may be specified in the - PARSE_EXTRA_RECORDS field that this error is to be ignored. - */ - const static std::string PARSE_EXTRA_RECORDS; - /* - The unknownKeyword field regulates how the parser should - react when it encounters an unknwon keyword. Observe that - 'keyword' in this context means: - - o A string of 8 characters or less - starting in column - 0. - - o A string consisiting of UPPERCASE characters and - numerals, staring with an UPPERCASE character [Hmmm - - actually lowercase is also accepted?!] - - Observe that unknownKeyword does *not* consult any global - collection of keywords to see if a particular string - corresponds to a known valid keyword which we just happen - to ignore for this particualar parse operation. - - The 'unknownkeyword' and 'randomText' error situations are - not fully orthogonal, and in particualar if a unknown - keyword has been encountered - without halting the parser, a - subsequent piece of 'random text' might not be identified - correctly as such. - */ - const static std::string PARSE_UNKNOWN_KEYWORD; - - /* - With random text we mean a string in the input deck is not - correctly formatted as a keyword heading. - */ - const static std::string PARSE_RANDOM_TEXT; - - /* - It turns out that random '/' - i.e. typically an extra slash - which is not needed - is quite common. This is therefor a - special case treatment of the 'randomText' behaviour. - */ - const static std::string PARSE_RANDOM_SLASH; - - - /* - For some keywords the number of records (i.e. size) is given - as an item in another keyword. A typical example is the - EQUIL keyword where the number of records is given by the - NTEQUL item of the EQLDIMS keyword. If the size defining - XXXDIMS keyword is not in the deck, we can use the default - values of the XXXDIMS keyword; this is regulated by the - 'missingDIMskeyword' field. - - Observe that a fully defaulted XXXDIMS keyword does not - trigger this behavior. - */ - const static std::string PARSE_MISSING_DIMS_KEYWORD; - - /* - If the number of elements in the input record exceeds the - number of items in the keyword configuration this error - situation will be triggered. Many keywords end with several - ECLIPSE300 only items - in some cases we have omitted those - items in the Json configuration; that will typically trigger - this error situation when encountering an ECLIPSE300 deck. - */ - const static std::string PARSE_EXTRA_DATA; - - /* - If an include file is not found we can configure the parser - to contine reading; of course the resulting deck can - obviously be quite broken. - */ - const static std::string PARSE_MISSING_INCLUDE; - - /// Dynamic number of wells exceeds maximum declared in - /// RUNSPEC keyword WELLDIMS (item 1). - const static std::string RUNSPEC_NUMWELLS_TOO_LARGE; - - /// Dynamic number of connections per well exceeds maximum - /// declared in RUNSPEC keyword WELLDIMS (item 2). - const static std::string RUNSPEC_CONNS_PER_WELL_TOO_LARGE; - - /// Dynamic number of groups exceeds maximum number declared in - /// RUNSPEC keyword WELLDIMS (item 3). - const static std::string RUNSPEC_NUMGROUPS_TOO_LARGE; - - /// Dynamic group size exceeds maximum number declared in - /// RUNSPEC keyword WELLDIMS (item 4). - const static std::string RUNSPEC_GROUPSIZE_TOO_LARGE; - - /* - Should we allow keywords of length more than eight characters? If the - keyword is too long it will be internalized using only the eight first - characters. - */ - const static std::string PARSE_LONG_KEYWORD; - - /* - The unit system specified via the FILEUNIT keyword is different from the unit - system used by the deck. - */ - const static std::string UNIT_SYSTEM_MISMATCH; - - /* - Some property modfiers can be modified in the Schedule - section; this effectively means that Eclipse supports time - dependent geology. This is marked as an exocit special - feature in Eclipse, and not supported at all in the - EclipseState object of opm-parser. If these modifiers are - encountered in the Schedule section the behavior is - regulated by this setting. - */ - const static std::string UNSUPPORTED_SCHEDULE_GEO_MODIFIER; - - /* - In the COMPORD implementation only the 'TRACK' input mode is supported. - */ - const static std::string UNSUPPORTED_COMPORD_TYPE; - - /* - If the third item in the THPRES keyword is defaulted the - threshold pressure is inferred from the initial pressure; - this currently not supported. - */ - const static std::string UNSUPPORTED_INITIAL_THPRES; - - /* - If the second item in the WHISTCTL keyword is set to YES - The simulator is supposed to terminate if the well is - changed to BHP control. This feature is not yet supported. - */ - const static std::string UNSUPPORTED_TERMINATE_IF_BHP; - - const static std::string UDQ_PARSE_ERROR; - const static std::string UDQ_TYPE_ERROR; - - /* - If the third item in the THPRES keyword is defaulted the - threshold pressure is inferred from the initial pressure - - if you still ask the ThresholdPressure instance for a - pressure value this error will be signalled. this currently - not supported. - */ - const static std::string INTERNAL_ERROR_UNINITIALIZED_THPRES; - - /* - If the deck is partial deck, and thus a full EclipseState is - meaningless, we can still construct a slim EclipseGrid. - */ - const static std::string PARSE_MISSING_SECTIONS; - - /* - When defining wells and groups with the WELSPECS and GRUPTREE keywords - we do not allow leading or trailing spaces. The code in Schedule.cpp - will *unconditionally* remove the spaces, but with PARSE_WGNAME_SPACE - setting you can additionally configure the normal IGNORE|WARN|ERROR - behavior. - */ - const static std::string PARSE_WGNAME_SPACE; - - /* - If you have configured a specific well in the summary section, - which is not recognized - how to handle. - */ - const static std::string SUMMARY_UNKNOWN_WELL; - const static std::string SUMMARY_UNKNOWN_GROUP; - const static std::string SUMMARY_UNHANDLED_KEYWORD; - const static std::string SUMMARY_UNDEFINED_UDQ; - const static std::string SUMMARY_UDQ_MISSING_UNIT; - - /* - A well must be specified (e.g. WELSPECS) and have completions - (e.g. COMPDAT) to be able to set control mode (e.g. WCONPROD). - A well missing specification and/or completion(s) will throw. - */ - const static std::string SCHEDULE_INVALID_NAME; - - - /* - Only keywords explicitly white-listed can be included in the ACTIONX - block. This error flag controls what should happen when an illegal - keyword is encountered in an ACTIONX block. - */ - const static std::string ACTIONX_ILLEGAL_KEYWORD; - - - /* - The RPTSCH, RPTSOL and RPTSCHED keywords have two alternative forms, - in the old style all the items are set as integers, i.e. the RPTRST - keyword can be configured as: - - RPTRST - 0 0 0 1 0 1 0 2 0 0 0 0 0 1 0 0 2/ - - The new way is based on string mneomnics which can optionally have an - integer value, i.e something like: - - RPTRST - BASIC=2 FLOWS ALLPROS / - - It is strictly illegal to mix the two ways to configure keywords. A - situation with mixed input style is identified if any of the items are - integers. To avoid that the values in the assignments like BASIC=2 are - interpreted as integers it is essential that there are no spaces - around the '=', and that is also documented in the manual. However - - it turns out that Eclipse actually handles e.g. - - RPTRST - BASIC = 2 / - - So we have introduced a error mode RPT_MIXED_STYLE which tries to - handle this situation. Observe that really mixed input style is - impossible to handle, and will lead to a hard exception, but with the - RPT_MIXED_STYLE error mode it is possible to configure lenient - behavior towards interpreting the input as new style string mneomnics. - */ - const static std::string RPT_MIXED_STYLE; - - const static std::string RPT_UNKNOWN_MNEMONIC; - - const static std::string SCHEDULE_GROUP_ERROR; - const static std::string SCHEDULE_IGNORED_GUIDE_RATE; - - const static std::string SCHEDULE_COMPSEGS_INVALID; - const static std::string SCHEDULE_COMPSEGS_NOT_SUPPORTED; - - /* - The SIMULATOR_KEYWORD_ errormodes are for the situation where the - parser recognizes, and correctly parses a keyword, but we know that - the simulator does not support the intended use of the keyword. These - errormodes are invoked from the simulator. - */ - const static std::string SIMULATOR_KEYWORD_NOT_SUPPORTED; - const static std::string SIMULATOR_KEYWORD_ITEM_NOT_SUPPORTED; - - private: - void initDefault(); - void initEnv(); - void envUpdate( const std::string& envVariable , InputError::Action action ); - void patternUpdate( const std::string& pattern , InputError::Action action); - - std::map m_errorContexts; - std::set ignore_keywords; - }; -} - - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Parser/Parser.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Parser/Parser.hpp deleted file mode 100644 index 8a8b0e6218..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Parser/Parser.hpp +++ /dev/null @@ -1,156 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#ifndef OPM_PARSER_HPP -#define OPM_PARSER_HPP - -#include -#include -#include -#include -#include -#include -#include - -#include - -#include - -#include -#include -#include - -namespace Json { - class JsonObject; -} - -namespace Opm { - - class Deck; - class ParseContext; - class ErrorGuard; - class RawKeyword; - - /// The hub of the parsing process. - /// An input file in the eclipse data format is specified, several steps of parsing is performed - /// and the semantically parsed result is returned. - - class Parser { - public: - explicit Parser(bool addDefault = true); - - static std::string stripComments(const std::string& inputString); - - /// The starting point of the parsing process. The supplied file is parsed, and the resulting Deck is returned. - Deck parseFile(const std::string &dataFile, - const ParseContext&, - ErrorGuard& errors) const; - - Deck parseFile(const std::string&, - const ParseContext&) const; - - Deck parseFile(const std::string& datafile) const; - - Deck parseString(const std::string &data, - const ParseContext&, - ErrorGuard& errors) const; - Deck parseString(const std::string &data, const ParseContext& ) const; - Deck parseString(const std::string &data) const; - - Deck parseStream(std::unique_ptr&& inputStream , const ParseContext& parseContext, ErrorGuard& errors) const; - - /// Method to add ParserKeyword instances, these holding type and size information about the keywords and their data. - void addParserKeyword(const Json::JsonObject& jsonKeyword); - void addParserKeyword(ParserKeyword&& parserKeyword); - - /*! - * \brief Returns whether the parser knows about a keyword - */ - bool hasKeyword( const std::string& ) const; - const ParserKeyword& getKeyword(const std::string& name) const; - - bool isRecognizedKeyword( const string_view& deckKeywordName) const; - const ParserKeyword& getParserKeywordFromDeckName(const string_view& deckKeywordName) const; - std::vector getAllDeckNames () const; - - void loadKeywords(const Json::JsonObject& jsonKeywords); - bool loadKeywordFromFile(const Opm::filesystem::path& configFile); - - void loadKeywordsFromDirectory(const Opm::filesystem::path& directory , bool recursive = true); - void applyUnitsToDeck(Deck& deck) const; - - /*! - * \brief Returns the approximate number of recognized keywords in decks - * - * This is an approximate number because regular expresions are disconsidered. - */ - size_t size() const; - - template - void addKeyword() { - addParserKeyword( T() ); - } - - static EclipseState parse(const Deck& deck, const ParseContext& context); - static EclipseState parse(const std::string &filename, const ParseContext& context, ErrorGuard& errors); - static EclipseState parseData(const std::string &data, const ParseContext& context, ErrorGuard& errors); - - /// Parses the deck specified in filename. If context contains ParseContext::PARSE_PARTIAL_DECK, - /// we construct only a lean grid, otherwise, we construct a full EclipseState and return the - /// fully constructed InputGrid - static EclipseGrid parseGrid(const std::string &filename, - const ParseContext& context, - ErrorGuard& errors); - - /// Parses the provided deck. If context contains ParseContext::PARSE_PARTIAL_DECK, - /// we construct only a lean grid, otherwise, we construct a full EclipseState and return the - /// fully constructed InputGrid - static EclipseGrid parseGrid(const Deck& deck, - const ParseContext& context); - - /// Parses the provided deck string. If context contains ParseContext::PARSE_PARTIAL_DECK, - /// we construct only a lean grid, otherwise, we construct a full EclipseState and return the - /// fully constructed InputGrid - static EclipseGrid parseGridData(const std::string &data, - const ParseContext& context, - ErrorGuard& errors); - - const std::vector> codeKeywords() const; - - private: - bool hasWildCardKeyword(const std::string& keyword) const; - const ParserKeyword* matchingKeyword(const string_view& keyword) const; - void addDefaultKeywords(); - - // std::vector< std::unique_ptr< const ParserKeyword > > keyword_storage; - std::list keyword_storage; - - // associative map of deck names and the corresponding ParserKeyword object - std::map< string_view, const ParserKeyword* > m_deckParserKeywords; - - // associative map of the parser internal names and the corresponding - // ParserKeyword object for keywords which match a regular expression - std::map< string_view, const ParserKeyword* > m_wildCardKeywords; - - std::vector> code_keywords; - }; - -} // namespace Opm -#endif /* PARSER_H */ - diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Parser/ParserConst.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Parser/ParserConst.hpp deleted file mode 100644 index a4a1d02a77..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Parser/ParserConst.hpp +++ /dev/null @@ -1,32 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#ifndef PARSERCONST_H -#define PARSERCONST_H - - -namespace Opm { - namespace ParserConst { - const unsigned int maxKeywordLength = 8; - } -} - - - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Parser/ParserEnums.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Parser/ParserEnums.hpp deleted file mode 100644 index d51af0ea4f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Parser/ParserEnums.hpp +++ /dev/null @@ -1,51 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#ifndef PARSER_ENUMS_H -#define PARSER_ENUMS_H - -#include - -namespace Opm { - - enum ParserKeywordSizeEnum { - SLASH_TERMINATED = 0, - FIXED = 1, - OTHER_KEYWORD_IN_DECK = 2, - UNKNOWN = 3, - FIXED_CODE = 4, - DOUBLE_SLASH_TERMINATED = 5 - }; - - - enum ParserKeywordActionEnum { - INTERNALIZE = 0, - IGNORE = 1, - IGNORE_WARNING = 2, - THROW_EXCEPTION = 3 - }; - - const std::string ParserKeywordActionEnum2String(ParserKeywordActionEnum enumValue); - const std::string ParserKeywordSizeEnum2String(ParserKeywordSizeEnum enumValue); - - ParserKeywordSizeEnum ParserKeywordSizeEnumFromString(const std::string& stringValue); - ParserKeywordActionEnum ParserKeywordActionEnumFromString(const std::string& stringValue); -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Parser/ParserItem.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Parser/ParserItem.hpp deleted file mode 100644 index f006a34bb9..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Parser/ParserItem.hpp +++ /dev/null @@ -1,131 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ -#ifndef PARSER_ITEM_H -#define PARSER_ITEM_H - -#include -#include -#include - -#include -#include -#include - -namespace Json { - class JsonObject; -} - -namespace Opm { - - class UnitSystem; - class RawRecord; - - - /* - The ParserItem class describes one item handled by the parser. A parser - item is the schema for parsing values from the deck, when configuring the - ParserItem *two* types are in action: - - InputType: These are the types specified when instantiating a - ParserItem, the available types are currently: INT, DOUBLE, STRING, - RAW_STRING and UDA. - - DataType: This the C++ type of items generated when parsing the deck, - currently the available datatypes are int, double, std::string and - the user defined type UDAValue. - - Splitting the type treatment in two layers in this way enables - properties/transformations to be added to the data before they are - internalized as data in a DataType instance; e.g. the difference between - STRING and RAW_STRING is that for the latter quotes and '*' tokens are - retained. - */ - - - class ParserItem { - public: - enum class item_size { ALL, SINGLE }; - static item_size size_from_string( const std::string& ); - static std::string string_from_size( item_size ); - - enum class itype {UNKNOWN, DOUBLE, INT, STRING, RAW_STRING, UDA, CODE}; - static itype from_string(const std::string& string_value); - static std::string to_string(itype input_type); - std::string type_literal() const; - - - explicit ParserItem( const std::string& name, ParserItem::itype input_type ); - explicit ParserItem( const Json::JsonObject& jsonConfig ); - - void push_backDimension( const std::string& ); - const std::vector& dimensions() const; - const std::string& name() const; - item_size sizeType() const; - type_tag dataType() const; - void setSizeType(item_size size_type); - std::string getDescription() const; - bool scalar() const; - void setDescription(const std::string& helpText); - - template< typename T > void setDefault( T ); - /* set type without a default value. will reset dimension etc. */ - void setInputType( itype input_type ); - bool parseRaw() const; - bool hasDefault() const; - template< typename T > const T& getDefault() const; - - bool operator==( const ParserItem& ) const; - bool operator!=( const ParserItem& ) const; - - DeckItem scan( RawRecord& rawRecord, UnitSystem& active_unitsystem, UnitSystem& default_unitsystem) const; - - std::string size_literal() const; - const std::string className() const; - std::string createCode(const std::string& indent) const; - std::ostream& inlineClass(std::ostream&, const std::string& indent) const; - std::string inlineClassInit(const std::string& parentClass, - const std::string* defaultValue = nullptr ) const; - - private: - double dval; - int ival; - std::string sval; - RawString rsval; - UDAValue uval; - std::vector< std::string > m_dimensions; - - std::string m_name; - item_size m_sizeType = item_size::SINGLE; - std::string m_description; - - type_tag data_type = type_tag::unknown; - itype input_type = itype::UNKNOWN; - bool m_defaultSet; - - template< typename T > T& value_ref(); - template< typename T > const T& value_ref() const; - template< typename T > void setDataType( T ); - friend std::ostream& operator<<( std::ostream&, const ParserItem& ); - }; - -std::ostream& operator<<( std::ostream&, const ParserItem::item_size& ); - -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Parser/ParserKeyword.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Parser/ParserKeyword.hpp deleted file mode 100644 index b072c1b03c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Parser/ParserKeyword.hpp +++ /dev/null @@ -1,178 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ -#ifndef PARSER_KEYWORD_H -#define PARSER_KEYWORD_H - -#include -#include -#include - -#include - -#include -#include - -namespace Json { - class JsonObject; -} - -namespace Opm { - class Deck; - class DeckKeyword; - class ParseContext; - class ErrorGuard; - class ParserDoubleItem; - class RawKeyword; - class string_view; - class ErrorGuard; - - /* - Small helper struct to assemble the information needed to infer the size - of a keyword based on another keyword in the deck. - */ - struct KeywordSize { - KeywordSize(const std::string& in_keyword, const std::string& in_item, int in_shift) : - keyword(in_keyword), - item(in_item), - shift(in_shift) - {} - - KeywordSize() {} - - bool operator==(const KeywordSize& other) const { - return ((this->keyword == other.keyword) && - (this->item == other.item) && - (this->shift == other.shift)); - } - - bool operator!=(const KeywordSize& other) const { - return !(*this == other); - } - - std::string keyword; - std::string item; - int shift; - }; - - class ParserKeyword { - public: - ParserKeyword(const std::string& name , - const std::string& sizeKeyword , - const std::string& sizeItem, - int size_shift, - bool _isTableCollection = false); - explicit ParserKeyword(const std::string& name); - explicit ParserKeyword(const Json::JsonObject& jsonConfig); - - void setFixedSize( size_t keywordSize); - void setSizeType( ParserKeywordSizeEnum sizeType ); - void setTableCollection(bool _isTableCollection); - void initSizeKeyword( const std::string& sizeKeyword, const std::string& sizeItem, int size_shift); - - - typedef std::set DeckNameSet; - typedef std::set SectionNameSet; - - - static bool validInternalName(const std::string& name); - static bool validDeckName(const string_view& name); - bool hasMatchRegex() const; - void setMatchRegex(const std::string& deckNameRegexp); - bool matches(const string_view& ) const; - bool hasDimension() const; - void addRecord( ParserRecord ); - void addDataRecord( ParserRecord ); - const ParserRecord& getRecord(size_t recordIndex) const; - ParserRecord& getRecord(size_t recordIndex); - std::vector< ParserRecord >::const_iterator begin() const; - std::vector< ParserRecord >::const_iterator end() const; - const std::string className() const; - const std::string& getName() const; - size_t getFixedSize() const; - bool hasFixedSize() const; - bool isTableCollection() const; - std::string getDescription() const; - void setDescription(const std::string &description); - - bool hasMultipleDeckNames() const; - void clearDeckNames(); - void addDeckName( const std::string& deckName ); - void setCodeEnd(const std::string& end); - const std::string& codeEnd() const; - DeckNameSet::const_iterator deckNamesBegin() const; - DeckNameSet::const_iterator deckNamesEnd() const; - - void clearValidSectionNames(); - void addValidSectionName(const std::string& sectionName); - bool isValidSection(const std::string& sectionName) const; - SectionNameSet::const_iterator validSectionNamesBegin() const; - SectionNameSet::const_iterator validSectionNamesEnd() const; - - DeckKeyword parse(const ParseContext& parseContext, ErrorGuard& errors, RawKeyword& rawKeyword, UnitSystem& active_unitsystem, UnitSystem& default_unitsystem, const std::string& filename) const; - enum ParserKeywordSizeEnum getSizeType() const; - const KeywordSize& getKeywordSize() const; - bool isDataKeyword() const; - bool rawStringKeyword() const; - bool isCodeKeyword() const; - bool isAlternatingKeyword() const; - bool isDoubleRecordKeyword() const; - void setAlternatingKeyword(bool alternating); - void setDoubleRecordsKeyword(bool double_rec); - - std::string createDeclaration(const std::string& indent) const; - std::string createDecl() const; - std::string createCode() const; - - bool operator==( const ParserKeyword& ) const; - bool operator!=( const ParserKeyword& ) const; - - private: - KeywordSize keyword_size; - std::string m_name; - DeckNameSet m_deckNames; - DeckNameSet m_validSectionNames; - std::string m_matchRegexString; - std::regex m_matchRegex; - std::vector< ParserRecord > m_records; - enum ParserKeywordSizeEnum m_keywordSizeType; - size_t m_fixedSize; - bool m_isTableCollection; - std::string m_Description; - bool raw_string_keyword = false; - bool alternating_keyword = false; - bool double_records = false; - std::string code_end; - - static bool validNameStart(const string_view& name); - void initDeckNames( const Json::JsonObject& jsonConfig ); - void initSectionNames( const Json::JsonObject& jsonConfig ); - void initMatchRegex( const Json::JsonObject& jsonObject ); - void initCode( const Json::JsonObject& jsonConfig ); - void initData( const Json::JsonObject& jsonConfig ); - void initSize( const Json::JsonObject& jsonConfig ); - void initSizeKeyword(const Json::JsonObject& sizeObject); - void commonInit(const std::string& name, ParserKeywordSizeEnum sizeType); - void addItems( const Json::JsonObject& jsonConfig); - void parseRecords( const Json::JsonObject& recordsConfig); - }; - -std::ostream& operator<<( std::ostream&, const ParserKeyword& ); -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Parser/ParserRecord.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Parser/ParserRecord.hpp deleted file mode 100644 index cd7081f7a0..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Parser/ParserRecord.hpp +++ /dev/null @@ -1,72 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#ifndef PARSERRECORD_HPP -#define PARSERRECORD_HPP - -#include -#include -#include - -#include - -namespace Opm { - - class Deck; - class DeckRecord; - class ParseContext; - class ParserItem; - class RawRecord; - class ErrorGuard; - class UnitSystem; - - class ParserRecord { - public: - ParserRecord(); - size_t size() const; - void addItem( ParserItem ); - void addDataItem( ParserItem item ); - const ParserItem& get(size_t index) const; - const ParserItem& get(const std::string& itemName) const; - DeckRecord parse( const ParseContext&, ErrorGuard&, RawRecord&, UnitSystem& active_unitsystem, UnitSystem& default_unitsystem, const std::string& keyword, const std::string& filename) const; - bool isDataRecord() const; - bool equal(const ParserRecord& other) const; - bool hasDimension() const; - bool hasItem(const std::string& itemName) const; - std::vector< ParserItem >::const_iterator begin() const; - std::vector< ParserItem >::const_iterator end() const; - - bool operator==( const ParserRecord& ) const; - bool operator!=( const ParserRecord& ) const; - bool rawStringRecord() const; - const std::string& end_string() const; - - private: - bool m_dataRecord; - std::vector< ParserItem > m_items; - bool raw_string_record = false; - std::string record_end = "/"; - }; - -std::ostream& operator<<( std::ostream&, const ParserRecord& ); -} - - -#endif /* PARSERRECORD_HPP */ - diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Python/Python.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Python/Python.hpp deleted file mode 100644 index fb02687bd8..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Python/Python.hpp +++ /dev/null @@ -1,150 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef OPM_PYTHON_HPP -#define OPM_PYTHON_HPP - -#include -#include - -namespace Opm { -class PythonInterp; -class Parser; -class Deck; -class SummaryState; -class Schedule; -class EclipseState; - -namespace Action { - class PyAction; -} -/* - This class is a thin wrapper around the PythonInterp class. The Python class - can always be safely instantiated, but the actual PythonInterp implementation - depends on whether Python support was enabled when this library instance was - compiled. - - If one the methods actually invoking the Python interpreter is invoked without - proper Python support a dummy PythinInterp instance will be used; and that - will just throw std::logic_error. The operator bool can be used to check if - this Python manager indeed has a valid Python runtime: - - - auto python = std::make_shared(); - - if (python) - python.exec("print('Hello world')") - else - OpmLog::Error("This version of opmcommon has been built with support for embedded Python"); - - - The default constructor will enable the Python interpreter if the current - version of opm-common has been built support for embedded Python, by using the - alternative Python(Enable enable) constructor you can explicitly say if you - want Python support or not; if that request can not be satisfied you will get - std::logic_error(). - - Observe that the real underlying Python interpreter is essentially a singleton - - i.e. only a one interpreter can be active at any time. If a Python - interpreter has already been instantiated you can still create an additional - Opm::Python instance, but that will be empty and not capable of actually - running Python code - so although it is technically possible to have more than - simultaneous Opm::Python instance it is highly recommended to create only one. - - The details of the interaction between build configuration, constructor arg - and multiple instances is summarized in the table below. The columns should be - interpreted as follows: - - Build: This is whether opm has been built with support for embedding Python, - i.e. whether the flag OPM_ENABLE_EMBEDDED_PYTHON was set to True at - configure time. - - Constructor arg: This the enum argument passed to the constructor. The - default value is Enable::TRY which means that we will try to instantiate - a Python interpreter. If that fails - either because a Python interpreter - is already running or because opm-common has been built without Python - support - you will get a empty but valid Opm::Python object back. - - Existing instance: Is there already Python interpreter running? The value * - implies that the end result will be the same irrespective of whether we - have a Python instance running. - - Result: What kind of Opm::Python instance will we get - here { } implies an - empty Opm::Python instance. This does *not* hold on to an actual - interpreter and can not be used to run code - for this type of - Opm::Python instance the enabled() method will return false. { Python } - means that we will get a Opm::Python instance which manages a true Python - interpreter. - - std::logic_error means that you have asked for something which can not be - satisfied and std::logic_error exception will be raised. - - - Build: | Constructor arg | Existing instance | Result - ---------|--------------------|---------------------|------- - True | OFF | * | { } - True | ON | True | std::logic_error - True | ON | False | { Python } - True | TRY | True | { } - True | TRY | False | { Python } - False | OFF | * | { } - False | ON | * | std::logic_error - False | TRY | * | { } - ---------|--------------------|---------------------|------- - - -*/ - - -class Python { -public: - - enum class Enable { - ON, /* Enable the Python extensions - throw std::logic_error() if it fails. */ - TRY, /* Try to enable Python extensions*/ - OFF /* Do not enable Python */ - }; - - explicit Python(Enable enable = Enable::TRY); - bool exec(const std::string& python_code) const; - bool exec(const std::string& python_code, const Parser& parser, Deck& deck) const; - bool exec(const Action::PyAction& py_action, EclipseState& ecl_state, Schedule& schedule, std::size_t report_step, SummaryState& st) const; - - /* - The enabled function returns true if this particular Python instance - manages a true Python interpreter. - */ - bool enabled() const; - - /* - The supported function return true if this instance of opm-common has been - compiled with support for Python. - */ - static bool supported(); - bool run_module(const std::string& path); -private: - std::shared_ptr interp; -}; - -} - - - -#endif - diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Units/Dimension.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Units/Dimension.hpp deleted file mode 100644 index 4e249b5b56..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Units/Dimension.hpp +++ /dev/null @@ -1,62 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef DIMENSION_H -#define DIMENSION_H - -#include - -namespace Opm { - - class Dimension { - public: - Dimension(); - Dimension(double SIfactor, - double SIoffset = 0.0); - - static Dimension serializeObject(); - - double getSIScaling() const; - double getSIOffset() const; - - double convertRawToSi(double rawValue) const; - double convertSiToRaw(double siValue) const; - - bool equal(const Dimension& other) const; - bool isCompositable() const; - - bool operator==( const Dimension& ) const; - bool operator!=( const Dimension& ) const; - - template - void serializeOp(Serializer& serializer) - { - serializer(m_SIfactor); - serializer(m_SIoffset); - } - - private: - double m_SIfactor; - double m_SIoffset; - }; -} - - -#endif - diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Units/UnitSystem.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Units/UnitSystem.hpp deleted file mode 100644 index e864a2891b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Units/UnitSystem.hpp +++ /dev/null @@ -1,167 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef UNITSYSTEM_H -#define UNITSYSTEM_H - -#include -#include -#include -#include - -#include - -namespace Opm { - - class UnitSystem { - public: - enum class UnitType { - UNIT_TYPE_METRIC = 0, - UNIT_TYPE_FIELD = 1, - UNIT_TYPE_LAB = 2, - UNIT_TYPE_PVT_M = 3, - UNIT_TYPE_INPUT = 4 - }; - - enum class measure : int { - identity, - length, - time, - density, - pressure, - temperature_absolute, - temperature, - viscosity, - permeability, - liquid_surface_volume, - gas_surface_volume, - volume, - geometric_volume, - liquid_surface_rate, - gas_surface_rate, - rate, - geometric_volume_rate, - transmissibility, - effective_Kh, - mass, - mass_rate, - gas_oil_ratio, - oil_gas_ratio, - water_cut, - gas_formation_volume_factor, - oil_formation_volume_factor, - water_formation_volume_factor, - gas_inverse_formation_volume_factor, - oil_inverse_formation_volume_factor, - water_inverse_formation_volume_factor, - liquid_productivity_index, - gas_productivity_index, - energy, - icd_strength, - _count // New entries must be added *before* this - }; - - explicit UnitSystem(int ecl_id); - explicit UnitSystem(UnitType unit = UnitType::UNIT_TYPE_METRIC); - explicit UnitSystem(const std::string& deck_name); - - static UnitSystem serializeObject(); - - const std::string& getName() const; - UnitType getType() const; - int ecl_id() const; - - void addDimension(const std::string& dimension , const Dimension& dim); - void addDimension(const std::string& dimension, double SIfactor, double SIoffset = 0.0); - const Dimension& getNewDimension(const std::string& dimension); - const Dimension& getDimension(const std::string& dimension) const; - Dimension getDimension(measure m) const; - - - bool hasDimension(const std::string& dimension) const; - bool equal(const UnitSystem& other) const; - - bool operator==( const UnitSystem& ) const; - bool operator!=( const UnitSystem& ) const; - - Dimension parse(const std::string& dimension) const; - - double from_si( measure, double ) const; - double to_si( measure, double ) const; - void from_si( measure, std::vector& ) const; - void to_si( measure, std::vector& ) const; - const char* name( measure ) const; - std::string deck_name() const; - std::size_t use_count() const; - - static bool valid_name(const std::string& deck_name); - static UnitSystem newMETRIC(); - static UnitSystem newFIELD(); - static UnitSystem newLAB(); - static UnitSystem newPVT_M(); - static UnitSystem newINPUT(); - - template - void serializeOp(Serializer& serializer) - { - serializer(m_name); - serializer(m_unittype); - serializer.map(m_dimensions); - serializer(m_use_count); - if (!serializer.isSerializing()) - init(); - } - - private: - Dimension parseFactor( const std::string& ) const; - void init(); - void initINPUT(); - void initMETRIC(); - void initFIELD(); - void initPVT_M(); - void initLAB(); - - std::string m_name; - UnitType m_unittype; - std::map< std::string , Dimension > m_dimensions; - const double* measure_table_to_si_offset; - const double* measure_table_from_si; - const double* measure_table_to_si; - const char* const* unit_name_table; - - /* - The active unit system is determined runtime, to be certain that we do - not end up in a situation where we first use the default unit system, - and then subsequently change it. - - The Deck::selectActiveUnitSystem() method has this code: - - const auto& current = this->getActiveUnitSystem(); - if (current.use_count() > 0) - throw std::logic_error("Sorry - can not change unit system halways"); - - - */ - mutable std::size_t m_use_count = 0; - }; -} - - -#endif - diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Units/Units.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Units/Units.hpp deleted file mode 100644 index 2280d73978..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Units/Units.hpp +++ /dev/null @@ -1,374 +0,0 @@ -//=========================================================================== -// -// File: Units.hpp -// -// Created: Thu Jul 2 09:19:08 2009 -// -// Author(s): Halvor M Nilsen -// -// $Date$ -// -// $Revision$ -// -//=========================================================================== - -/* - Copyright 2009, 2010, 2011, 2012 SINTEF ICT, Applied Mathematics. - Copyright 2009, 2010, 2011, 2012 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef OPM_UNITS_HEADER -#define OPM_UNITS_HEADER - -/** - The unit sets emplyed in ECLIPSE, in particular the FIELD units, - are quite inconsistent. Ideally one should choose units for a set - of base quantities like Mass,Time and Length and then derive the - units for e.g. pressure and flowrate in a consisten manner. However - that is not the case; for instance in the metric system we have: - - [Length] = meters - [time] = days - [mass] = kg - - This should give: - - [Pressure] = [mass] / ([length] * [time]^2) = kg / (m * days * days) - - Instead pressure is given in Bars. When it comes to FIELD units the - number of such examples is long. -*/ -namespace Opm { - namespace prefix - /// Conversion prefix for units. - { - constexpr const double micro = 1.0e-6; /**< Unit prefix [\f$\mu\f$] */ - constexpr const double milli = 1.0e-3; /**< Unit prefix [m] */ - constexpr const double centi = 1.0e-2; /**< Non-standard unit prefix [c] */ - constexpr const double deci = 1.0e-1; /**< Non-standard unit prefix [d] */ - constexpr const double kilo = 1.0e3; /**< Unit prefix [k] */ - constexpr const double mega = 1.0e6; /**< Unit prefix [M] */ - constexpr const double giga = 1.0e9; /**< Unit prefix [G] */ - } // namespace prefix - - namespace unit - /// Definition of various units. - /// All the units are defined in terms of international standard - /// units (SI). Example of use: We define a variable \c k which - /// gives a permeability. We want to set \c k to \f$1\,mD\f$. - /// \code - /// using namespace Opm::unit - /// double k = 0.001*darcy; - /// \endcode - /// We can also use one of the prefixes defined in Opm::prefix - /// \code - /// using namespace Opm::unit - /// using namespace Opm::prefix - /// double k = 1.0*milli*darcy; - /// \endcode - { - ///\name Common powers - /// @{ - constexpr double square(double v) { return v * v; } - constexpr double cubic (double v) { return v * v * v; } - /// @} - - // -------------------------------------------------------------- - // Basic (fundamental) units and conversions - // -------------------------------------------------------------- - - /// \name Length - /// @{ - constexpr const double meter = 1; - constexpr const double inch = 2.54 * prefix::centi*meter; - constexpr const double feet = 12 * inch; - /// @} - - /// \name Time - /// @{ - constexpr const double second = 1; - constexpr const double minute = 60 * second; - constexpr const double hour = 60 * minute; - constexpr const double day = 24 * hour; - constexpr const double year = 365 * day; - constexpr const double ecl_year = 365.25 * day; - /// @} - - /// \name Volume - /// @{ - constexpr const double gallon = 231 * cubic(inch); - constexpr const double stb = 42 * gallon; - constexpr const double liter = 1 * cubic(prefix::deci*meter); - /// @} - - /// \name Mass - /// @{ - constexpr const double kilogram = 1; - constexpr const double gram = 1.0e-3 * kilogram; - // http://en.wikipedia.org/wiki/Pound_(mass)#Avoirdupois_pound - constexpr const double pound = 0.45359237 * kilogram; - /// @} - - /// \name Energy - /// @{ - constexpr const double joule = 1; - constexpr const double btu = 1054.3503*joule; // "british thermal units" - /// @} - - // -------------------------------------------------------------- - // Standardised constants - // -------------------------------------------------------------- - - /// \name Standardised constant - /// @{ - constexpr const double gravity = 9.80665 * meter/square(second); - /// @} - - // -------------------------------------------------------------- - // Derived units and conversions - // -------------------------------------------------------------- - - /// \name Force - /// @{ - constexpr const double Newton = kilogram*meter / square(second); // == 1 - constexpr const double dyne = 1e-5*Newton; - constexpr const double lbf = pound * gravity; // Pound-force - /// @} - - /// \name Pressure - /// @{ - constexpr const double Pascal = Newton / square(meter); // == 1 - constexpr const double barsa = 100000 * Pascal; - constexpr const double atm = 101325 * Pascal; - constexpr const double psia = lbf / square(inch); - /// @} - - /// \name Temperature. This one is more complicated - /// because the unit systems used by Eclipse (i.e. degrees - /// Celsius and degrees Fahrenheit require to add or - /// subtract an offset for the conversion between from/to - /// Kelvin - /// @{ - constexpr const double degCelsius = 1.0; // scaling factor °C -> K - constexpr const double degCelsiusOffset = 273.15; // offset for the °C -> K conversion - - constexpr const double degFahrenheit = 5.0/9.0; // factor to convert a difference in °F to a difference in K - constexpr const double degFahrenheitOffset = 459.67*degFahrenheit; // °F -> K offset (i.e. how many K is 0 °F?) - /// @} - - /// \name Viscosity - /// @{ - constexpr const double Pas = Pascal * second; // == 1 - constexpr const double Poise = prefix::deci*Pas; - /// @} - - namespace perm_details { - constexpr const double p_grad = atm / (prefix::centi*meter); - constexpr const double area = square(prefix::centi*meter); - constexpr const double flux = cubic (prefix::centi*meter) / second; - constexpr const double velocity = flux / area; - constexpr const double visc = prefix::centi*Poise; - constexpr const double darcy = (velocity * visc) / p_grad; - // == 1e-7 [m^2] / 101325 - // == 9.869232667160130e-13 [m^2] - } - /// \name Permeability - /// @{ - /// - /// A porous medium with a permeability of 1 darcy permits a flow (flux) - /// of \f$1\,\mathit{cm}^3/s\f$ of a fluid with viscosity - /// \f$1\,\mathit{cP}\f$ (\f$1\,mPa\cdot s\f$) under a pressure gradient - /// of \f$1\,\mathit{atm}/\mathit{cm}\f$ acting across an area of - /// \f$1\,\mathit{cm}^2\f$. - /// - constexpr const double darcy = perm_details::darcy; - /// @} - - /** - * Unit conversion routines. - */ - namespace convert { - /** - * Convert from external units of measurements to equivalent - * internal units of measurements. Note: The internal units of - * measurements are *ALWAYS*, and exclusively, SI. - * - * Example: Convert a double @c kx, containing a permeability value - * in units of milli-darcy (mD) to the equivalent value in SI units - * (i.e., \f$m^2\f$). - * \code - * using namespace Opm::unit; - * using namespace Opm::prefix; - * convert::from(kx, milli*darcy); - * \endcode - * - * @param[in] q Physical quantity. - * @param[in] unit Physical unit of measurement. - * @return Value of @c q in equivalent SI units of measurements. - */ - constexpr double from(const double q, const double unit) - { - return q * unit; - } - - /** - * Convert from internal units of measurements to equivalent - * external units of measurements. Note: The internal units of - * measurements are *ALWAYS*, and exclusively, SI. - * - * Example: Convert a std::vector p, containing - * pressure values in the SI unit Pascal (i.e., unit::Pascal) to the - * equivalent values in Psi (unit::psia). - * \code - * using namespace Opm::unit; - * std::transform(p.begin(), p.end(), p.begin(), - * std::bind(convert::to, std::placeholders::_1, psia)); - * \endcode - * - * @param[in] q Physical quantity, measured in SI units. - * @param[in] unit Physical unit of measurement. - * @return Value of @c q in unit unit. - */ - constexpr double to(const double q, const double unit) - { - return q / unit; - } - } // namespace convert - } - - namespace Metric { - using namespace prefix; - using namespace unit; - constexpr const double Pressure = barsa; - constexpr const double Temperature = degCelsius; - constexpr const double TemperatureOffset = degCelsiusOffset; - constexpr const double AbsoluteTemperature = degCelsius; // actually [K], but the these two are identical - constexpr const double Length = meter; - constexpr const double Time = day; - constexpr const double Mass = kilogram; - constexpr const double Permeability = milli*darcy; - constexpr const double Transmissibility = centi*Poise*cubic(meter)/(day*barsa); - constexpr const double LiquidSurfaceVolume = cubic(meter); - constexpr const double GasSurfaceVolume = cubic(meter); - constexpr const double ReservoirVolume = cubic(meter); - constexpr const double GeomVolume = cubic(meter); - constexpr const double GasDissolutionFactor = GasSurfaceVolume/LiquidSurfaceVolume; - constexpr const double OilDissolutionFactor = LiquidSurfaceVolume/GasSurfaceVolume; - constexpr const double Density = kilogram/cubic(meter); - constexpr const double PolymerDensity = kilogram/cubic(meter); - constexpr const double FoamDensity = kilogram/cubic(meter); - constexpr const double FoamSurfactantConcentration = kilogram/cubic(meter); - constexpr const double Salinity = kilogram/cubic(meter); - constexpr const double Viscosity = centi*Poise; - constexpr const double Timestep = day; - constexpr const double SurfaceTension = dyne/(centi*meter); - constexpr const double Energy = kilo*joule; - } - - - namespace Field { - using namespace prefix; - using namespace unit; - constexpr const double Pressure = psia; - constexpr const double Temperature = degFahrenheit; - constexpr const double TemperatureOffset = degFahrenheitOffset; - constexpr const double AbsoluteTemperature = degFahrenheit; // actually [°R], but the these two are identical - constexpr const double Length = feet; - constexpr const double Time = day; - constexpr const double Mass = pound; - constexpr const double Permeability = milli*darcy; - constexpr const double Transmissibility = centi*Poise*stb/(day*psia); - constexpr const double LiquidSurfaceVolume = stb; - constexpr const double GasSurfaceVolume = 1000*cubic(feet); - constexpr const double ReservoirVolume = stb; - constexpr const double GeomVolume = cubic(feet); - constexpr const double GasDissolutionFactor = GasSurfaceVolume/LiquidSurfaceVolume; - constexpr const double OilDissolutionFactor = LiquidSurfaceVolume/GasSurfaceVolume; - constexpr const double Density = pound/cubic(feet); - constexpr const double PolymerDensity = pound/stb; - constexpr const double FoamDensity = pound/GasSurfaceVolume; - constexpr const double FoamSurfactantConcentration = pound/stb; - constexpr const double Salinity = pound/stb; - constexpr const double Viscosity = centi*Poise; - constexpr const double Timestep = day; - constexpr const double SurfaceTension = dyne/(centi*meter); - constexpr const double Energy = btu; - } - - - namespace Lab { - using namespace prefix; - using namespace unit; - constexpr const double Pressure = atm; - constexpr const double Temperature = degCelsius; - constexpr const double TemperatureOffset = degCelsiusOffset; - constexpr const double AbsoluteTemperature = degCelsius; // actually [K], but the these two are identical - constexpr const double Length = centi*meter; - constexpr const double Time = hour; - constexpr const double Mass = gram; - constexpr const double Permeability = milli*darcy; - constexpr const double Transmissibility = centi*Poise*cubic(centi*meter)/(hour*atm); - constexpr const double LiquidSurfaceVolume = cubic(centi*meter); - constexpr const double GasSurfaceVolume = cubic(centi*meter); - constexpr const double ReservoirVolume = cubic(centi*meter); - constexpr const double GeomVolume = cubic(centi*meter); - constexpr const double GasDissolutionFactor = GasSurfaceVolume/LiquidSurfaceVolume; - constexpr const double OilDissolutionFactor = LiquidSurfaceVolume/GasSurfaceVolume; - constexpr const double Density = gram/cubic(centi*meter); - constexpr const double PolymerDensity = gram/cubic(centi*meter); - constexpr const double FoamDensity = gram/cubic(centi*meter); - constexpr const double FoamSurfactantConcentration = gram/cubic(centi*meter); - constexpr const double Salinity = gram/cubic(centi*meter); - constexpr const double Viscosity = centi*Poise; - constexpr const double Timestep = hour; - constexpr const double SurfaceTension = dyne/(centi*meter); - constexpr const double Energy = joule; - } - - - namespace PVT_M { - using namespace prefix; - using namespace unit; - constexpr const double Pressure = atm; - constexpr const double Temperature = degCelsius; - constexpr const double TemperatureOffset = degCelsiusOffset; - constexpr const double AbsoluteTemperature = degCelsius; // actually [K], but the these two are identical - constexpr const double Length = meter; - constexpr const double Time = day; - constexpr const double Mass = kilogram; - constexpr const double Permeability = milli*darcy; - constexpr const double Transmissibility = centi*Poise*cubic(meter)/(day*atm); - constexpr const double LiquidSurfaceVolume = cubic(meter); - constexpr const double GasSurfaceVolume = cubic(meter); - constexpr const double ReservoirVolume = cubic(meter); - constexpr const double GeomVolume = cubic(meter); - constexpr const double GasDissolutionFactor = GasSurfaceVolume/LiquidSurfaceVolume; - constexpr const double OilDissolutionFactor = LiquidSurfaceVolume/GasSurfaceVolume; - constexpr const double Density = kilogram/cubic(meter); - constexpr const double PolymerDensity = kilogram/cubic(meter); - constexpr const double FoamDensity = kilogram/cubic(meter); - constexpr const double FoamSurfactantConcentration = kilogram/cubic(meter); - constexpr const double Salinity = kilogram/cubic(meter); - constexpr const double Viscosity = centi*Poise; - constexpr const double Timestep = day; - constexpr const double SurfaceTension = dyne/(centi*meter); - constexpr const double Energy = kilo*joule; - } -} - -#endif // OPM_UNITS_HEADER diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Utility/Functional.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Utility/Functional.hpp deleted file mode 100644 index 2fb5ab383c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Utility/Functional.hpp +++ /dev/null @@ -1,239 +0,0 @@ -/* - Copyright 2016 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef OPM_FUNCTIONAL_HPP -#define OPM_FUNCTIONAL_HPP - -#include -#include -#include -#include - -namespace Opm { - -namespace fun { - - /* - * The Utility/Functional library provides convenient high level - * functionality and higher order functions inspiried by functional - * languages (in particular Haskell) and modern C++. The goal is to provide - * lightweight features that reduce boilerplate and make code more - * declarative. - */ - - /* - * map :: (a -> b) -> [a] -> [b] - * - * maps the elements [a] of the passed container C to [b], by using the - * passed function f :: a -> b. Works like map in haskell, lisp, python etc. - * - * C can be any foreach-compatible container (that supports .begin, - * .end), but will always return a vector. - * - * F can be any Callable, that is both function pointer, - * operator()-providing class or std::function, including lambdas. F is - * typically passed by reference. F must be unary of type A (which must - * match what C::const_iterator::operator* returns) and have return - * type B (by value). - * - * In short, this function deal with vector allocation, resizing and - * population based on some function f. - * - * fun::map( f, vec ) is equivalent to: - * vector dst; - * for( auto& x : vec ) dst.push_back( f( x ) ); - * return dst; - * - * The behaviour is undefined if F has any side effects. - * - * -- - * - * int plus1( int x ) { return x + 1; } - * base_vec = { 0, 1, 2, 3, 4 }; - * vec = fun::map( &plus1, base_vec ); - * - * vec => { 1, 2, 3, 4, 5 } - * - * -- - * - * int mul2 = []( int x ) { return x * 2; }; - * base_vec = { 0, 1, 2, 3, 4 }; - * vec = fun::map( mul2, base_vec ); - * - * vec => { 0, 2, 4, 6, 8 }; - * - */ - template< typename F, typename C > - std::vector< typename std::result_of< F( typename C::const_iterator::value_type& ) >::type > - map( F f, const C& src ) { - using A = typename C::const_iterator::value_type; - using B = typename std::result_of< F( A& ) >::type; - std::vector< B > ret; - ret.reserve( src.size() ); - - std::transform( src.begin(), src.end(), std::back_inserter( ret ), f ); - return ret; - } - - /* - * concat :: [[a]] -> [a] - * - * A primitive concat taking a vector of vectors, flattened into a - * single 1 dimensional vector. Moves all the elements so no unecessary - * copies are done. - * - * vec = { { 1 }, { 2, 2 }, { 3, 3, 3 } } - * cvec = concat( vec ) => { 1, 2, 2, 3, 3, 3 } - */ - template< typename A > - std::vector< A > concat( std::vector< std::vector< A > >&& src ) { - const auto size = std::accumulate( src.begin(), src.end(), 0, - []( std::size_t acc, const std::vector< A >& x ) { - return acc + x.size(); - } - ); - - std::vector< A > dst; - dst.reserve( size ); - - for( auto& x : src ) - std::move( x.begin(), x.end(), std::back_inserter( dst ) ); - - return dst; - } - - - /* - * iota :: int -> [int] - * iota :: (int,int) -> [int] - * - * iota (ι) is borrowed from the APL programming language. This particular - * implementation behaves as a generator-like constant-space consecutive - * sequence of integers [m,n). Written to feel similar to std::iota, but as - * a producer instead of straight-up writer. This is similar to python2.7s - * xrange(), python3s range() and haskell's [0..(n-1)]. Some examples - * follow. - * - * Notes: - * * iota defaults to [0,n) - * * iota uses 0 indexing to feel more familiar to C++'s zero indexing. - * * iota can start at negative indices, but will always count upwards. - * * iota::const_iterator does not support operator-- (which would allow - * support for reverse iterators). This can be implemented if need arises. - * * iota is meant to play nice with the rest of fun and to be able to - * replace mundane for loops when the loops only purpose is to create the - * sequence of elements. iota can feel more declarative and work better - * with functions. - * * iota adds value semantics to things that in C++ normally relies on - * variable mutations. iota is meant to make it less painful to write - * immutable and declarative code. - * * as with all iterators, iota( n, m ) behaviour is undefined if m < n - * * unlike python's range, iota doesn't support steps (only increments). - * this is by design to keep this simple and minimal, as well as the name - * iota being somewhat unsuitable for stepping ranges. If the need for - * this arises it will be a separate function. - * - * fun::iota( 5 ) => [ 0, 1, 2, 3, 4 ] - * fun::iota( 3 ) => [ 0, 1, 2 ] - * fun::iota( 1, 6 ) => [ 1, 2, 3, 4, 5 ] - * - * -- - * - * std::vector< int > vec ( 5, 0 ); - * std::iota( vec.begin(), vec.end(), 0 ); - * vec => [ 0, 1, 2, 3, 4 ] - * - * fun::iota i( 5 ); - * std::vector vec( i.begin(), i.end() ); - * vec => [ 0, 1, 2, 3, 4 ] - * - * -- - * - * int plus( int x ) { return x + 1; } - * auto vec = fun::map( &plus, fun::iota( 5 ) ); - * vec => [ 1, 2, 3, 4, 5 ] - * - * is equivalent to - * - * int plus( int x ) { return x + 1; } - * std::vector< int > vec; - * for( int i = 0; i < 5; ++i ) - * vec.push_back( plus( i ) ); - * vec => [ 1, 2, 3, 4, 5 ] - * - * -- - * - * While not the primary intended use case, this enables foreach loop - * syntax over intervals: - * - * for( auto i : fun::iota( 5 ) ) - * std::cout << i << " "; - * - * => 0 1 2 3 4 - * - * for( auto i : fun::iota( 1, 6 ) ) - * std::cout << i << " "; - * - * => 1 2 3 4 5 - * - */ - class iota { - public: - explicit iota( int end ); - iota( int begin, int end ); - - class const_iterator { - public: - using difference_type = int; - using value_type = int; - using pointer = int*; - using reference = int&; - using iterator_category = std::forward_iterator_tag; - - const_iterator() = default; - - int operator*() const; - - const_iterator& operator++(); - const_iterator operator++( int ); - - bool operator==( const const_iterator& rhs ) const; - bool operator!=( const const_iterator& rhs ) const; - - private: - explicit const_iterator( int ); - int value; - - friend class iota; - }; - - size_t size() const; - - const_iterator begin() const; - const_iterator end() const; - - private: - int first; - int last; - }; - -} -} - -#endif //OPM_FUNCTIONAL_HPP diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Utility/Stringview.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Utility/Stringview.hpp deleted file mode 100644 index 7e699da30e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Utility/Stringview.hpp +++ /dev/null @@ -1,289 +0,0 @@ -/* - Copyright (C) 2016 by Statoil ASA - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#ifndef OPM_UTILITY_SUBSTRING_HPP -#define OPM_UTILITY_SUBSTRING_HPP - -#include -#include -#include -#include -#include - -namespace Opm { - /* - * string_view is a simple view-into-substring feature whose primary - * usecase is to avoid deep copying strings in the inner loops of the - * parser. Relies on whatever it's viewing into is kept alive (as all - * iterators do): - * - * auto rec = make_raw_record(); - * string_view view = rec.getItem( 3 ); - * - * view.size(); view[ 10 ]; // ok - * ~rec(); - * view[ 3 ]; // not ok - * - * This is desired to fill out a gap in the C++ standard library, since - * string_view has yet to be standardised - * - * http://en.cppreference.com/w/cpp/experimental/basic_string_view - */ - class string_view { - public: - using const_iterator = const char*; - - inline string_view() = default; - inline string_view( const_iterator, const_iterator ); - inline string_view( const_iterator, size_t ); - //cppcheck-suppress noExplicitConstructor - inline string_view( const std::string& ); - inline string_view( const std::string&, size_t ); - //cppcheck-suppress noExplicitConstructor - inline string_view( const char* ); - - inline const_iterator begin() const; - inline const_iterator end() const; - - inline char front() const; - inline char back() const; - - inline char operator[]( size_t ) const; - inline bool operator<( const string_view& ) const; - inline bool operator==( const string_view& ) const; - - inline bool empty() const; - inline size_t size() const; - inline size_t length() const; - - inline std::string string() const; - inline std::string substr( size_t from = 0 ) const; - inline std::string substr( size_t from, size_t len ) const; - - inline bool starts_with(const std::string& str) const; - inline std::size_t find(const std::string& substring) const; - inline std::size_t find(char c) const; - private: - const_iterator fst = nullptr; - const_iterator lst = nullptr; - }; - - /* - * The implementation of string_view is inline and therefore the definitions - * are also in this file. The reason for this is performance; string_view's - * logic is trivial and function call and indirection overhead is significant - * compared to the useful work it does. Additionally, string_view is a *very* - * much used class in the inner loops of the parser - inlining the - * implementation measured to improve performance by some 10%. - */ - - - // Non-member operators using string_view. - - std::ostream& operator<<( std::ostream& stream, const Opm::string_view& view ); - - inline std::string operator+( std::string str, const Opm::string_view& view ) { - return str.append( view.begin(), view.end() ); - } - - inline std::string operator+( const Opm::string_view& view, const std::string& str ) { - return view.string().append( str.begin(), str.end() ); - } - - inline bool operator==( const Opm::string_view& view, const std::string& rhs ) { - return rhs.size() == view.size() && - std::equal( view.begin(), view.end(), std::begin( rhs ) ); - } - - inline bool operator==( const Opm::string_view& view, const char* rhs ) { - return std::strlen( rhs ) == view.size() && - std::equal( view.begin(), view.end(), rhs ); - } - - inline bool operator==( const std::string& lhs, const Opm::string_view& view ) { - return view == lhs; - } - - inline bool operator==( const char* lhs, const Opm::string_view& view ) { - return view == lhs; - } - - inline bool operator!=( const Opm::string_view& view, const std::string& rhs ) { - return !( view == rhs ); - } - - inline bool operator!=( const std::string& lhs, const Opm::string_view& view ) { - return !( view == lhs ); - } - - inline bool operator!=( const Opm::string_view& view, const char* rhs ) { - return !( view == rhs ); - } - - inline bool operator!=( const char* lhs, const Opm::string_view& view ) { - return !( view == lhs ); - } - - - // Member functions of string_view. - - inline string_view::string_view( const_iterator first, - const_iterator last ) : - fst( first ), - lst( last ) - {} - - inline string_view::string_view( const_iterator first , - size_t count ) : - fst( first ), - lst( first + count ) - {} - - inline string_view::string_view( const std::string& str ) : - string_view( str.data(), str.size() ) - {} - - inline string_view::string_view( const std::string& str, size_t count ) : - string_view( str.data(), count ) - {} - - inline string_view::string_view( const char* str ) : - string_view( str, str + std::strlen( str ) ) - {} - - inline string_view::const_iterator string_view::begin() const { - return this->fst; - } - - inline string_view::const_iterator string_view::end() const { - return this->lst; - } - - inline char string_view::front() const { - return *this->fst; - } - - inline char string_view::back() const { - return *(this->lst - 1); - } - - inline char string_view::operator[]( size_t i ) const { - return *(this->begin() + i); - } - - inline bool string_view::operator<( const string_view& rhs ) const { - return std::lexicographical_compare( this->begin(), this->end(), - rhs.begin(), rhs.end() ); - } - - inline bool string_view::operator==( const string_view& rhs ) const { - return std::equal( this->begin(), this->end(), rhs.begin() ); - } - - inline bool string_view::empty() const { - return std::distance( this->begin(), this->end() ) == 0; - } - - inline size_t string_view::size() const { - return std::distance( this->begin(), this->end() ); - } - - inline size_t string_view::length() const { - return std::distance( this->begin(), this->end() ); - } - - inline std::string string_view::string() const { - return this->substr(); - } - - inline std::string string_view::substr( size_t from ) const { - return this->substr( from, this->size() ); - } - - inline std::string string_view::substr( size_t from, size_t len ) const { - if( from > this->size() ) - throw std::out_of_range( "'from' is greater than length" ); - - if (from + len > this->size()) - return std::string( this->begin() + from, this->lst ); - - return std::string( this->begin() + from, this->begin() + len + from); - } - - inline std::size_t string_view::find(const std::string& substring) const { - auto substring_size = substring.size(); - if (substring_size > this->size()) - return std::string::npos; - - auto substring_data = substring.data(); - auto pos = this->fst; - auto last_pos = this->lst - substring.size() + 1; - - while (pos != last_pos) { - std::size_t si = 0; - while (substring_data[si] == *(pos + si)) { - si += 1; - if (si == substring_size) - return pos - this->fst; - } - ++pos; - } - - return std::string::npos; - } - - inline std::size_t string_view::find(char c) const { - auto pos = this->fst; - - while (pos != this->lst) { - if (*pos == c) - return pos - this->fst; - - ++pos; - } - - return std::string::npos; - } - - - inline bool string_view::starts_with(const std::string& str) const { - auto str_size = str.size(); - if (str_size > this->size()) - return false; - - auto str_data = str.data(); - auto pos = this->fst; - - std::size_t si = 0; - while (true) { - if (*pos != str_data[si]) - return false; - - ++pos; - ++si; - - if (si == str_size) - return true; - } - } - - -} - -#endif //OPM_UTILITY_SUBSTRING_HPP diff --git a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Utility/Typetools.hpp b/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Utility/Typetools.hpp deleted file mode 100644 index 4f7ec876d5..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/opm/parser/eclipse/Utility/Typetools.hpp +++ /dev/null @@ -1,85 +0,0 @@ -#ifndef OPM_TYPETOOLS_HPP -#define OPM_TYPETOOLS_HPP -#include -#include - -#include - -namespace Opm { - -enum class type_tag { - unknown = 0, - integer = 1, - string = 2, - raw_string = 3, - fdouble = 4, - uda = 5, -}; - -/* - The RawString class itself is just a glorified std::string, it does not have - any additional data nor behavior which differentiates it from std::string, but - the use of a separate string class allows the compiler to differentiate - between different behavior for normal strings and raw strings. The special - behavior for raw strings is: - - 1. The input data is terminated on the *last* '/' and not the first - to allow - '/' as part of the input. - - 2. '* is not treated as a multiplier/default, but rather as a normal token. - - 3. Quotes are not removed from the input, and when writing quotes are not - added. - -*/ - -class RawString : public std::string -{ -public: - - static std::vector strings(const std::vector& raw_strings) { - std::vector std_strings; - for (const auto& rstring : raw_strings) - std_strings.push_back( rstring ); - return std_strings; - } - -}; - -inline std::string tag_name( type_tag x ) { - switch( x ) { - case type_tag::integer: return "int"; - case type_tag::string: return "std::string"; - case type_tag::raw_string: return "RawString"; - case type_tag::fdouble: return "double"; - case type_tag::uda: return "UDAValue"; - case type_tag::unknown: return "unknown"; - } - return "unknown"; -} - -template< typename T > type_tag get_type(); - -template<> inline type_tag get_type< int >() { - return type_tag::integer; -} - -template<> inline type_tag get_type< double >() { - return type_tag::fdouble; -} - -template<> inline type_tag get_type< std::string >() { - return type_tag::string; -} - -template<> inline type_tag get_type< RawString >() { - return type_tag::raw_string; -} - -template<> inline type_tag get_type() { - return type_tag::uda; -} - -} - -#endif //OPM_TYPETOOLS_HPP diff --git a/ThirdParty/custom-opm-common/opm-common/redhat/opm-common.spec b/ThirdParty/custom-opm-common/opm-common/redhat/opm-common.spec deleted file mode 100644 index 19c4e834d1..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/redhat/opm-common.spec +++ /dev/null @@ -1,208 +0,0 @@ -# -# spec file for package opm-common -# - -%define tag final - -Name: opm-common -Version: 2020.04 -Release: 0 -Summary: Open Porous Media - common helpers and buildsystem -License: GPL-3.0 -Group: Development/Libraries/C and C++ -Url: http://www.opm-project.org/ -Source0: https://github.com/OPM/%{name}/archive/release/%{version}/%{tag}.tar.gz#/%{name}-%{version}.tar.gz -BuildRequires: git doxygen bc openmpi-devel mpich-devel -%{?!el8:BuildRequires: devtoolset-8-toolchain} -%{?el8:BuildRequires: boost-devel} -%{?!el8:BuildRequires: boost148-devel} -BuildRequires: cmake3 -BuildRoot: %{_tmppath}/%{name}-%{version}-build - -%description -The Open Porous Media (OPM) initiative provides a set of open-source tools centered around the simulation of flow and transport of fluids in porous media. The goal of the initiative is to establish a sustainable environment for the development of an efficient and well-maintained software suite. - -%package -n libopm-common1 -Summary: OPM-common - library -Group: System/Libraries - -%description -n libopm-common1 -This package contains library for opm-common - -%package -n libopm-common1-openmpi -Summary: OPM-common - library -Group: System/Libraries - -%description -n libopm-common1-openmpi -This package contains library for opm-common - -%package -n libopm-common1-mpich -Summary: OPM-common - library -Group: System/Libraries - -%description -n libopm-common1-mpich -This package contains library for opm-common - -%package devel -Summary: Development and header files for opm-common -Group: Development/Libraries/C and C++ -Requires: %{name} = %{version} - -%description devel -This package contains the development and header files for opm-common - -%package openmpi-devel -Summary: Development and header files for opm-common -Group: Development/Libraries/C and C++ -Requires: %{name} = %{version} -Requires: libopm-common1-openmpi = %{version} - -%description openmpi-devel -This package contains the development and header files for opm-common - -%package mpich-devel -Summary: Development and header files for opm-common -Group: Development/Libraries/C and C++ -Requires: %{name} = %{version} -Requires: libopm-common1-mpich = %{version} - -%description mpich-devel -This package contains the development and header files for opm-common - -%package bin -Summary: Applications for opm-common -Group: System/Binaries -Requires: %{name} = %{version} - -%description bin -This package the applications for opm-common - -%package openmpi-bin -Summary: Applications for opm-common -Group: System/Binaries -Requires: libopm-common1-openmpi = %{version} - -%description openmpi-bin -This package the applications for opm-common - -%package mpich-bin -Summary: Applications for opm-common -Group: System/Binaries -Requires: libopm-common1-mpich = %{version} - -%description mpich-bin -This package the applications for opm-common - -%package doc -Summary: Documentation files for opm-common -Group: Documentation -BuildArch: noarch - -%description doc -This package contains the documentation files for opm-common - -%global debug_package %{nil} - -%prep -%setup -q -n %{name}-release-%{version}-%{tag} - -# consider using -DUSE_VERSIONED_DIR=ON if backporting -%build -mkdir serial -cd serial -cmake3 -DBUILD_SHARED_LIBS=1 -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=%{_prefix} -DCMAKE_INSTALL_DOCDIR=share/doc/%{name}-%{version} -DUSE_RUNPATH=OFF -DWITH_NATIVE=OFF %{!?el8:-DCMAKE_CXX_COMPILER=/opt/rh/devtoolset-8/root/usr/bin/g++ -DCMAKE_C_COMPILER=/opt/rh/devtoolset-8/root/usr/bin/gcc -DCMAKE_Fortran_COMPILER=/opt/rh/devtoolset-8/root/usr/bin/gfortran} %{?!el8:-DBOOST_LIBRARYDIR=%{_libdir}/boost148 -DBOOST_INCLUDEDIR=%{_includedir}/boost148} .. -make %{?_smp_mflags} -make test -cd .. - -mkdir openmpi -cd openmpi -%{?el6:module load openmpi-x86_64} -%{?!el6:module load mpi/openmpi-x86_64} -cmake3 -DUSE_MPI=1 -DBUILD_SHARED_LIBS=1 -DCMAKE_BUILD_TYPE=RelWithDebInfo -DSTRIP_DEBUGGING_SYMBOLS=ON -DCMAKE_INSTALL_PREFIX=%{_prefix}/lib64/openmpi -DCMAKE_INSTALL_LIBDIR=lib -DUSE_RUNPATH=OFF -DWITH_NATIVE=OFF %{?!el8:-DCMAKE_CXX_COMPILER=/opt/rh/devtoolset-8/root/usr/bin/g++ -DCMAKE_C_COMPILER=/opt/rh/devtoolset-8/root/usr/bin/gcc -DCMAKE_Fortran_COMPILER=/opt/rh/devtoolset-8/root/usr/bin/gfortran} %{?!el8:-DBOOST_LIBRARYDIR=%{_libdir}/boost148 -DBOOST_INCLUDEDIR=%{_includedir}/boost148} .. -make %{?_smp_mflags} -make test -cd .. - -mkdir mpich -cd mpich -%{?el6:module rm openmpi-x86_64} -%{?el6:module load mpich-x86_64} -%{?!el6:module rm mpi/openmpi-x86_64} -%{?!el6:module load mpi/mpich-x86_64} -cmake3 -DUSE_MPI=1 -DBUILD_SHARED_LIBS=1 -DCMAKE_BUILD_TYPE=RelWithDebInfo -DSTRIP_DEBUGGING_SYMBOLS=ON -DCMAKE_INSTALL_PREFIX=%{_prefix}/lib64/mpich -DCMAKE_INSTALL_LIBDIR=lib -DUSE_RUNPATH=OFF -DWITH_NATIVE=OFF %{?!el8:-DCMAKE_CXX_COMPILER=/opt/rh/devtoolset-8/root/usr/bin/g++ -DCMAKE_C_COMPILER=/opt/rh/devtoolset-8/root/usr/bin/gcc -DCMAKE_Fortran_COMPILER=/opt/rh/devtoolset-8/root/usr/bin/gfortran} %{?!el8:-DBOOST_LIBRARYDIR=%{_libdir}/boost148 -DBOOST_INCLUDEDIR=%{_includedir}/boost148} .. -make %{?_smp_mflags} -make test - -%install -cd serial -make install DESTDIR=${RPM_BUILD_ROOT} -make install-html DESTDIR=${RPM_BUILD_ROOT} -cd .. -cd openmpi -make install DESTDIR=${RPM_BUILD_ROOT} -mkdir -p ${RPM_BUILD_ROOT}/usr/include/openmpi-x86_64/ -mv ${RPM_BUILD_ROOT}/usr/lib64/openmpi/include/* ${RPM_BUILD_ROOT}/usr/include/openmpi-x86_64/ -cd .. - -cd mpich -make install DESTDIR=${RPM_BUILD_ROOT} -mkdir -p ${RPM_BUILD_ROOT}/usr/include/mpich-x86_64/ -mv ${RPM_BUILD_ROOT}/usr/lib64/mpich/include/* ${RPM_BUILD_ROOT}/usr/include/mpich-x86_64/ - -%clean -rm -rf %{buildroot} - -%files -%doc README.md - -%files doc -%{_docdir}/* - -%files bin -%{_bindir}/* - -%files openmpi-bin -%{_libdir}/openmpi/bin/* - -%files mpich-bin -%{_libdir}/mpich/bin/* - -%files -n libopm-common1 -%defattr(-,root,root,-) -%{_libdir}/*.so.* - -%files -n libopm-common1-openmpi -%defattr(-,root,root,-) -%{_libdir}/openmpi/lib/*.so.* - -%files -n libopm-common1-mpich -%defattr(-,root,root,-) -%{_libdir}/mpich/lib/*.so.* - -%files devel -%defattr(-,root,root,-) -/usr/lib/dunecontrol/* -%{_libdir}/pkgconfig/* -%{_includedir}/* -%{_datadir}/cmake/* -%{_datadir}/opm/* -%{_libdir}/*.so - -%files openmpi-devel -%defattr(-,root,root,-) -%{_libdir}/openmpi/lib/dunecontrol/* -%{_libdir}/openmpi/lib/pkgconfig/* -%{_includedir}/openmpi-x86_64/* -%{_libdir}/openmpi/share/cmake/* -%{_libdir}/openmpi/share/opm/* -%{_libdir}/openmpi/lib/*.so - -%files mpich-devel -%defattr(-,root,root,-) -%{_libdir}/mpich/lib/dunecontrol/* -%{_libdir}/mpich/lib/pkgconfig/* -%{_includedir}/mpich-x86_64/* -%{_libdir}/mpich/share/cmake/* -%{_libdir}/mpich/share/opm/* -%{_libdir}/mpich/lib/*.so diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/common/OpmLog/CounterLog.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/common/OpmLog/CounterLog.cpp deleted file mode 100644 index 36b8261a7f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/common/OpmLog/CounterLog.cpp +++ /dev/null @@ -1,63 +0,0 @@ -/* - Copyright 2014 Andreas Lauser - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ -#include -#include -#include - -#include -#include -#include - - - -namespace Opm { - -CounterLog::CounterLog(int64_t messageTypes) : LogBackend(messageTypes) -{ } - -CounterLog::CounterLog() : LogBackend(Log::DefaultMessageTypes) -{ } - - -size_t CounterLog::numMessages(int64_t messageType) const { - if (Log::isPower2( messageType )) { - auto iter = m_count.find( messageType ); - if (iter == m_count.end()) - return 0; - else - return (*iter).second; - } else - throw std::invalid_argument("The messageType ID must be 2^n"); -} - - - -void CounterLog::addMessageUnconditionally(int64_t messageType, const std::string& ) { - m_count[messageType]++; -} - - -void CounterLog::clear() -{ - m_count.clear(); -} - - - -} // namespace Opm diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/common/OpmLog/EclipsePRTLog.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/common/OpmLog/EclipsePRTLog.cpp deleted file mode 100644 index 2a76f5f963..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/common/OpmLog/EclipsePRTLog.cpp +++ /dev/null @@ -1,77 +0,0 @@ -/* - Copyright 2016 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include -#include - -namespace Opm { - - - void EclipsePRTLog::addMessageUnconditionally(int64_t messageType, const std::string& message) - { - StreamLog::addMessageUnconditionally(messageType, message); - m_count[messageType]++; - } - - - size_t EclipsePRTLog::numMessages(int64_t messageType) const - { - if (Log::isPower2( messageType )) { - auto iter = m_count.find( messageType ); - if (iter == m_count.end()) - return 0; - else - return (*iter).second; - } else - throw std::invalid_argument("The messageType ID must be 2^n"); - } - - - EclipsePRTLog::~EclipsePRTLog() - { - if( ! print_summary_ ) - { - return; - } - - //output summary. - const std::string summary_msg = "\n\nError summary:" + - std::string("\nWarnings " + std::to_string(numMessages(Log::MessageType::Warning))) + - std::string("\nInfo " + std::to_string(numMessages(Log::MessageType::Info))) + - std::string("\nErrors " + std::to_string(numMessages(Log::MessageType::Error))) + - std::string("\nBugs " + std::to_string(numMessages(Log::MessageType::Bug))) + - std::string("\nDebug " + std::to_string(numMessages(Log::MessageType::Debug))) + - std::string("\nProblems " + std::to_string(numMessages(Log::MessageType::Problem))) +"\n"; - StreamLog::addTaggedMessage(Log::MessageType::Info, "", summary_msg); - } - - EclipsePRTLog::EclipsePRTLog(const std::string& logFile, - int64_t messageMask, - bool append, - bool print_summary) - : StreamLog(logFile, messageMask, append), - print_summary_(print_summary) - {} - - EclipsePRTLog::EclipsePRTLog(std::ostream& os, - int64_t messageMask, - bool print_summary) - : StreamLog(os, messageMask), print_summary_(print_summary) - {} -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/common/OpmLog/LogBackend.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/common/OpmLog/LogBackend.cpp deleted file mode 100644 index d2b1ab007f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/common/OpmLog/LogBackend.cpp +++ /dev/null @@ -1,98 +0,0 @@ -/* - Copyright 2015 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include -#include - -namespace Opm { - - LogBackend::LogBackend( int64_t mask ) : - m_mask(mask) - { - } - - LogBackend::~LogBackend() - { - } - - void LogBackend::setMessageFormatter(std::shared_ptr formatter) - { - m_formatter = formatter; - } - - void LogBackend::setMessageLimiter(std::shared_ptr limiter) - { - m_limiter = limiter; - } - - void LogBackend::addMessage(int64_t messageFlag, const std::string& message) - { - // Forward the call to the tagged version. - addTaggedMessage(messageFlag, "", message); - } - - void LogBackend::addTaggedMessage(int64_t messageType, const std::string& messageTag, const std::string& message) { - if (includeMessage( messageType, messageTag )) { - addMessageUnconditionally(messageType, message); - } - } - - int64_t LogBackend::getMask() const - { - return m_mask; - } - - bool LogBackend::includeMessage(int64_t messageFlag, const std::string& messageTag) - { - // Check mask. - const bool included = ((messageFlag & m_mask) == messageFlag) && (messageFlag > 0); - if (!included) { - return false; - } - - // Use the message limiter (if any). - MessageLimiter::Response res = m_limiter - ? m_limiter->handleMessageLimits(messageTag, messageFlag) - : MessageLimiter::Response::PrintMessage; - if (res == MessageLimiter::Response::JustOverTagLimit) { - // Special case: add a message to this backend about limit being reached. - std::string msg = "Message limit reached for message tag: " + messageTag; - addMessageUnconditionally(messageFlag, msg); - } - if (res == MessageLimiter::Response::JustOverCategoryLimit) { - // Special case: add a message to this backend about limit being reached. - std::string prefix = Log::prefixMessage(messageFlag, ""); - std::string msg = "Message limit reached for message category: " + prefix.substr(0, prefix.size()-2); - addMessageUnconditionally(messageFlag, msg); - } - - return res == MessageLimiter::Response::PrintMessage; - } - - std::string LogBackend::formatMessage(int64_t messageFlag, const std::string& message) - { - if (m_formatter) { - return m_formatter->format(messageFlag, message); - } else { - return message; - } - } - - -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/common/OpmLog/LogUtil.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/common/OpmLog/LogUtil.cpp deleted file mode 100644 index 0fd01f7dc2..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/common/OpmLog/LogUtil.cpp +++ /dev/null @@ -1,99 +0,0 @@ -/* - Copyright 2015 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include -#include -#include - - -namespace Opm { - -namespace Log { - - bool isPower2(int64_t x) { - return ((x != 0) && !(x & (x - 1))); - } - - - - std::string fileMessage(const Location& location, const std::string& message) { - std::ostringstream oss; - - oss << message << "\n" << "In file " << location.filename << ", line " << location.lineno << "\n"; - - return oss.str(); - } - - std::string fileMessage(int64_t messageType , const Location& location, const std::string& message) { - return fileMessage( location , prefixMessage( messageType , message )); - } - - - std::string prefixMessage(int64_t messageType, const std::string& message) { - std::string prefix; - switch (messageType) { - case MessageType::Debug: - prefix = "Debug"; - break; - case MessageType::Note: - prefix = "Note"; - break; - case MessageType::Info: - prefix = "Info"; - break; - case MessageType::Warning: - prefix = "\nWarning"; - break; - case MessageType::Error: - prefix = "\nError"; - break; - case MessageType::Problem: - prefix = "\nProblem"; - break; - case MessageType::Bug: - prefix = "\nBug"; - break; - default: - throw std::invalid_argument("Unhandled messagetype"); - } - - return prefix + ": " + message; - } - - - std::string colorCodeMessage(int64_t messageType, const std::string& message) { - switch (messageType) { - case MessageType::Debug: - case MessageType::Note: - case MessageType::Info: - return message; // No color coding, not even the code for default color. - case MessageType::Warning: - return AnsiTerminalColors::blue_strong + message + AnsiTerminalColors::none; - case MessageType::Problem: - return AnsiTerminalColors::magenta_strong + message + AnsiTerminalColors::none; - case MessageType::Error: - case MessageType::Bug: - return AnsiTerminalColors::red_strong + message + AnsiTerminalColors::none; - default: - throw std::invalid_argument("Unhandled messagetype"); - } - } - -} -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/common/OpmLog/Logger.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/common/OpmLog/Logger.cpp deleted file mode 100644 index 10ec107768..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/common/OpmLog/Logger.cpp +++ /dev/null @@ -1,124 +0,0 @@ -/* - Copyright 2015 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ -#include -#include -#include - -#include -#include -#include - -namespace Opm { - - Logger::Logger() - : m_globalMask(0), - m_enabledTypes(0) - { - addMessageType( Log::MessageType::Debug , "debug"); - addMessageType( Log::MessageType::Info , "info"); - addMessageType( Log::MessageType::Warning , "warning"); - addMessageType( Log::MessageType::Error , "error"); - addMessageType( Log::MessageType::Problem , "problem"); - addMessageType( Log::MessageType::Bug , "bug"); - addMessageType( Log::MessageType::Note , "note"); - } - - void Logger::addTaggedMessage(int64_t messageType, const std::string& tag, const std::string& message) const { - if ((m_enabledTypes & messageType) == 0) - throw std::invalid_argument("Tried to issue message with unrecognized message ID"); - - if (m_globalMask & messageType) { - for (auto iter : m_backends) { - LogBackend& backend = *(iter.second); - backend.addTaggedMessage( messageType, tag, message ); - } - } - } - - void Logger::addMessage(int64_t messageType , const std::string& message) const { - addTaggedMessage(messageType, "", message); - } - - - void Logger::updateGlobalMask( int64_t mask ) { - m_globalMask |= mask; - } - - - bool Logger::hasBackend(const std::string& name) { - if (m_backends.find( name ) == m_backends.end()) - return false; - else - return true; - } - - void Logger::removeAllBackends() { - m_backends.clear(); - m_globalMask = 0; - } - - bool Logger::removeBackend(const std::string& name) { - size_t eraseCount = m_backends.erase( name ); - if (eraseCount == 1) - return true; - else - return false; - } - - - void Logger::addBackend(const std::string& name , std::shared_ptr backend) { - updateGlobalMask( backend->getMask() ); - m_backends[ name ] = backend; - } - - - int64_t Logger::enabledMessageTypes() const { - return m_enabledTypes; - } - - //static: - bool Logger::enabledMessageType( int64_t enabledTypes , int64_t messageType) { - if (Log::isPower2( messageType)) { - if ((messageType & enabledTypes) == 0) - return false; - else - return true; - } else - throw std::invalid_argument("The message type id must be ~ 2^n"); - } - - - //static: - bool Logger::enabledDefaultMessageType( int64_t messageType) { - return enabledMessageType( Log::DefaultMessageTypes , messageType ); - } - - bool Logger::enabledMessageType( int64_t messageType) const { - return enabledMessageType( m_enabledTypes , messageType ); - } - - - void Logger::addMessageType( int64_t messageType , const std::string& /* prefix */) { - if (Log::isPower2( messageType)) { - m_enabledTypes |= messageType; - } else - throw std::invalid_argument("The message type id must be ~ 2^n"); - } - -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/common/OpmLog/OpmLog.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/common/OpmLog/OpmLog.cpp deleted file mode 100644 index 2381d54b08..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/common/OpmLog/OpmLog.cpp +++ /dev/null @@ -1,222 +0,0 @@ -/* - Copyright 2014 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include -#include -#include -#include -#include // For errno -#include // For fileno() and stdout - -#if defined(_MSC_VER) -// MS put some POSIX-like functions in io.h, but prefix them with underscore -// since they are considered "vendor" and not standard functions. -#define _CRT_NONSTDC_NO_DEPRECATE -#include -#define isatty _isatty -#elif defined(__MINGW32__) -// MinGW also has the isatty function in io.h instead of unistd.h, but without -// the underscore. -#include -#else -#include // For isatty() -#endif - -namespace Opm { - - namespace { - bool stdoutIsTerminal() - { - const int errno_save = errno; // For playing nice with C error handling. - const int file_descriptor = fileno(stdout); - if (file_descriptor == -1) { - // stdout is an invalid stream - errno = errno_save; - return false; - } else { - return isatty(file_descriptor); - } - } - } - - - std::shared_ptr OpmLog::getLogger() { - if (!m_logger) - m_logger.reset( new Logger() ); - - return m_logger; - } - - - void OpmLog::addMessage(int64_t messageFlag , const std::string& message) { - if (m_logger) - m_logger->addMessage( messageFlag , message ); - } - - - void OpmLog::addTaggedMessage(int64_t messageFlag, const std::string& tag, const std::string& message) { - if (m_logger) - m_logger->addTaggedMessage( messageFlag, tag, message ); - } - - - void OpmLog::info(const std::string& message) - { - addMessage(Log::MessageType::Info, message); - } - - - void OpmLog::warning(const std::string& message) - { - addMessage(Log::MessageType::Warning, message); - } - - - void OpmLog::problem(const std::string& message) - { - addMessage(Log::MessageType::Problem, message); - } - - - void OpmLog::error(const std::string& message) - { - addMessage(Log::MessageType::Error, message); - } - - - void OpmLog::bug(const std::string& message) - { - addMessage(Log::MessageType::Bug, message); - } - - - void OpmLog::debug(const std::string& message) - { - addMessage(Log::MessageType::Debug, message); - } - - - void OpmLog::note(const std::string& message) - { - addMessage(Log::MessageType::Note, message); - } - - - - void OpmLog::info(const std::string& tag, const std::string& message) - { - addTaggedMessage(Log::MessageType::Info, tag, message); - } - - - void OpmLog::warning(const std::string& tag, const std::string& message) - { - addTaggedMessage(Log::MessageType::Warning, tag, message); - } - - - void OpmLog::problem(const std::string& tag, const std::string& message) - { - addTaggedMessage(Log::MessageType::Problem, tag, message); - } - - - void OpmLog::error(const std::string& tag, const std::string& message) - { - addTaggedMessage(Log::MessageType::Error, tag, message); - } - - - void OpmLog::bug(const std::string& tag, const std::string& message) - { - addTaggedMessage(Log::MessageType::Bug, tag, message); - } - - - void OpmLog::debug(const std::string& tag, const std::string& message) - { - addTaggedMessage(Log::MessageType::Debug, tag, message); - } - - - - void OpmLog::note(const std::string& tag, const std::string& message) - { - addTaggedMessage(Log::MessageType::Note, tag, message); - } - - - - - bool OpmLog::enabledMessageType( int64_t messageType ) { - if (m_logger) - return m_logger->enabledMessageType( messageType ); - else - return Logger::enabledDefaultMessageType( messageType ); - } - - bool OpmLog::hasBackend(const std::string& name) { - if (m_logger) - return m_logger->hasBackend( name ); - else - return false; - } - - - bool OpmLog::removeBackend(const std::string& name) { - if (m_logger) - return m_logger->removeBackend( name ); - else - return false; - } - - - void OpmLog::removeAllBackends() { - if (m_logger) { - m_logger->removeAllBackends(); - } - } - - - void OpmLog::addMessageType( int64_t messageType , const std::string& prefix) { - auto logger = OpmLog::getLogger(); - logger->addMessageType( messageType , prefix ); - } - - - void OpmLog::addBackend(const std::string& name , std::shared_ptr backend) { - auto logger = OpmLog::getLogger(); - return logger->addBackend( name , backend ); - } - - - - void OpmLog::setupSimpleDefaultLogging(const bool use_prefix, - const bool use_color_coding, - const int message_limit) - { - std::shared_ptr streamLog = std::make_shared(std::cout, Log::DefaultMessageTypes); - OpmLog::addBackend( "SimpleDefaultLog", streamLog); - streamLog->setMessageLimiter(std::make_shared(message_limit)); - streamLog->setMessageFormatter(std::make_shared(use_prefix, use_color_coding && stdoutIsTerminal())); - } -/******************************************************************/ - - std::shared_ptr OpmLog::m_logger; -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/common/OpmLog/StreamLog.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/common/OpmLog/StreamLog.cpp deleted file mode 100644 index 257586f1cf..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/common/OpmLog/StreamLog.cpp +++ /dev/null @@ -1,67 +0,0 @@ -/* - Copyright 2015 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ -#include -#include - -namespace Opm { - - -StreamLog::StreamLog(const std::string& logFile , int64_t messageMask, bool append) : LogBackend(messageMask) -{ - if (append) { - m_ofstream.open( logFile.c_str() , std::ofstream::app ); - } else { - m_ofstream.open( logFile.c_str() , std::ofstream::out ); - } - if (!m_ofstream) { - throw std::runtime_error("Failed opening file " + logFile + " for StreamLog."); - } - m_streamOwner = true; - m_ostream = &m_ofstream; -} - - -StreamLog::StreamLog(std::ostream& os , int64_t messageMask) : LogBackend(messageMask) -{ - m_ostream = &os; - m_streamOwner = false; -} - - -void StreamLog::close() { - if (m_streamOwner && m_ofstream.is_open()) { - m_ofstream.close(); - m_ostream = nullptr; - } -} - -void StreamLog::addMessageUnconditionally(int64_t messageType, const std::string& message) -{ - (*m_ostream) << formatMessage(messageType, message) << std::endl; - if (m_ofstream.is_open()) { - m_ofstream.flush(); - } -} - - -StreamLog::~StreamLog() { - close(); -} - -} // namespace Opm diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/common/OpmLog/TimerLog.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/common/OpmLog/TimerLog.cpp deleted file mode 100644 index bb01409322..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/common/OpmLog/TimerLog.cpp +++ /dev/null @@ -1,62 +0,0 @@ -/* - Copyright 2014 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ -#include -#include -#include - -#include -#include -#include -#include - - - -namespace Opm { - -TimerLog::TimerLog(const std::string& logFile) : StreamLog( logFile , StopTimer | StartTimer ) -{ - m_work.precision(8); - m_start = 0; -} - -TimerLog::TimerLog(std::ostream& os) : StreamLog( os , StopTimer | StartTimer ) -{ - m_work.precision(8); - m_start = 0; -} - - - -void TimerLog::addMessageUnconditionally(int64_t messageType, const std::string& msg ) { - if (messageType == StopTimer) { - clock_t stop = clock(); - double secondsElapsed = 1.0 * (m_start - stop) / CLOCKS_PER_SEC ; - - m_work.str(""); - m_work << std::fixed << msg << ": " << secondsElapsed << " seconds "; - StreamLog::addMessageUnconditionally( messageType, m_work.str()); - } else { - if (messageType == StartTimer) - m_start = clock(); - } -} - - - -} // namespace Opm diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/common/data/SimulationDataContainer.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/common/data/SimulationDataContainer.cpp deleted file mode 100644 index 4ec9f4ec9a..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/common/data/SimulationDataContainer.cpp +++ /dev/null @@ -1,247 +0,0 @@ -/* - Copyright 2016 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include -#include -#include - -namespace Opm { - - SimulationDataContainer::SimulationDataContainer(size_t num_cells, size_t num_faces , size_t num_phases) : - m_num_cells( num_cells ), - m_num_faces( num_faces ), - m_num_phases( num_phases ) - { - addDefaultFields( ); - } - - SimulationDataContainer::SimulationDataContainer(const SimulationDataContainer& other) - : m_num_cells(other.m_num_cells), - m_num_faces(other.m_num_faces), - m_num_phases(other.m_num_phases), - m_cell_data(other.m_cell_data), - m_face_data(other.m_face_data) - { - setReferencePointers(); - } - - SimulationDataContainer& SimulationDataContainer::operator=(const SimulationDataContainer& other) - { - SimulationDataContainer copy(other); - copy.swap(*this); - return *this; - } - - - void SimulationDataContainer::swap(SimulationDataContainer& other) - { - using std::swap; - swap(m_num_cells, other.m_num_cells); - swap(m_num_faces, other.m_num_faces); - swap(m_num_phases, other.m_num_phases); - swap(m_cell_data, other.m_cell_data); - swap(m_face_data, other.m_face_data); - setReferencePointers(); - other.setReferencePointers(); - } - - - size_t SimulationDataContainer::numPhases() const { - return m_num_phases; - } - - - size_t SimulationDataContainer::numFaces() const { - return m_num_faces; - } - - size_t SimulationDataContainer::numCells() const { - return m_num_cells; - } - - - bool SimulationDataContainer::hasCellData( const std::string& name ) const { - return ( m_cell_data.find( name ) == m_cell_data.end() ? false : true ); - } - - - std::vector& SimulationDataContainer::getCellData( const std::string& name ) { - auto iter = m_cell_data.find( name ); - if (iter == m_cell_data.end()) { - throw std::invalid_argument("The cell data with name: " + name + " does not exist"); - } else - return iter->second; - } - - - const std::vector& SimulationDataContainer::getCellData( const std::string& name ) const { - auto iter = m_cell_data.find( name ); - if (iter == m_cell_data.end()) { - throw std::invalid_argument("The cell data with name: " + name + " does not exist"); - } else - return iter->second; - } - - - void SimulationDataContainer::registerCellData( const std::string& name , size_t components , double initialValue) { - if (!hasCellData( name )) { - m_cell_data.insert( std::pair>( name , std::vector(components * m_num_cells , initialValue ))); - } - } - - - void SimulationDataContainer::setCellDataComponent( const std::string& key , - size_t component , - const std::vector& cells , - const std::vector& values) { - auto& data = getCellData( key ); - if (component >= m_num_phases) - OPM_THROW(std::invalid_argument, "The component number: " << component << " is invalid"); - - - if (cells.size() != values.size()) - OPM_THROW(std::invalid_argument, "size mismatch between cells and values"); - - // This is currently quite broken; the setCellDataComponent - // method assumes that the number of components in the field - // we are currently focusing on has num_phases components in - // total. This restriction should be lifted by allowing a per - // field number of components. - - if (data.size() != m_num_phases * m_num_cells) - OPM_THROW(std::invalid_argument , "Can currently only be used on fields with num_components == num_phases (i.e. saturation...) "); - - - for (size_t i = 0; i < cells.size(); i++) { - if (size_t(cells[i]) < m_num_cells) { - auto field_index = cells[i] * m_num_phases + component; - data[field_index] = values[i]; - } else { - OPM_THROW(std::invalid_argument , "The cell number: " << cells[i] << " is invalid."); - } - } - } - - - bool SimulationDataContainer::hasFaceData( const std::string& name ) const { - return ( m_face_data.find( name ) == m_face_data.end() ? false : true ); - } - - - std::vector& SimulationDataContainer::getFaceData( const std::string& name ) { - auto iter = m_face_data.find( name ); - if (iter == m_face_data.end()) { - throw std::invalid_argument("The face data with name: " + name + " does not exist"); - } else - return iter->second; - } - - const std::vector& SimulationDataContainer::getFaceData( const std::string& name ) const { - auto iter = m_face_data.find( name ); - if (iter == m_face_data.end()) { - throw std::invalid_argument("The Face data with name: " + name + " does not exist"); - } else - return iter->second; - } - - - void SimulationDataContainer::registerFaceData( const std::string& name , size_t components , double initialValue) { - if (!hasFaceData( name )) { - m_face_data.insert( std::pair>( name , std::vector(components * m_num_faces , initialValue ))); - } - } - - bool SimulationDataContainer::equal( const SimulationDataContainer& other ) const { - if ((m_num_cells != other.m_num_cells) || - (m_num_phases != other.m_num_phases) || - (m_num_faces != other.m_num_faces)) - return false; - - if ((m_face_data.size() != other.m_face_data.size()) || - (m_cell_data.size() != other.m_cell_data.size())) - return false; - - for (const auto& cell_data : m_cell_data) { - const auto key = cell_data.first; - const auto data = cell_data.second; - - if (other.hasCellData( key )) { - const auto& other_data = other.getCellData( key ); - if (!cmp::vector_equal( data , other_data )) - return false; - } else - return false; - } - - for (const auto& face_data : m_face_data) { - const auto key = face_data.first; - const auto data = face_data.second; - - if (other.hasFaceData( key )) { - const auto& other_data = other.getFaceData( key ); - if (!cmp::vector_equal( data , other_data )) - return false; - } else - return false; - } - - return true; - } - - size_t SimulationDataContainer::numCellDataComponents( const std::string& name ) const { - const auto& data = getCellData( name ); - return data.size() / m_num_cells; - } - - - const std::map>& SimulationDataContainer::cellData() const { - return m_cell_data; - } - - std::map>& SimulationDataContainer::cellData() { - return m_cell_data; - } - - // This is very deprecated. - void SimulationDataContainer::addDefaultFields() { - registerCellData("PRESSURE" , 1 , 0.0); - registerCellData("SATURATION" , m_num_phases , 0.0); - registerCellData("TEMPERATURE" , 1 , 273.15 + 20); - - registerFaceData("FACEPRESSURE" , 1 , 0.0 ); - registerFaceData("FACEFLUX" , 1 , 0.0 ); - - setReferencePointers(); - } - - - void SimulationDataContainer::setReferencePointers() - { - // This sets the reference pointers for the fast - // accessors, the fields must be created first - // by copying or a call to addDefaultFields(). - pressure_ref_ = &getCellData("PRESSURE"); - temperature_ref_ = &getCellData("TEMPERATURE"); - saturation_ref_ = &getCellData("SATURATION"); - facepressure_ref_ = &getFaceData("FACEPRESSURE"); - faceflux_ref_ = &getFaceData("FACEFLUX"); - } - - -} // namespace Opm diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/common/utility/ActiveGridCells.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/common/utility/ActiveGridCells.cpp deleted file mode 100644 index 075f73f480..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/common/utility/ActiveGridCells.cpp +++ /dev/null @@ -1,70 +0,0 @@ -/* - Copyright 2019 Equinor ASA - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include - -#include -#include - -namespace Opm -{ -ActiveGridCells::ActiveGridCells(std::array xyz, - const int* globalCell, std::size_t nc) - : ActiveGridCells(xyz[0], xyz[1], xyz[2], globalCell, nc) -{} - -ActiveGridCells::ActiveGridCells(std::size_t nx, std::size_t ny, std::size_t nz, - const int* globalCell, std::size_t nc) - : GridDims(nx, ny, nz), localCell_(nx*ny*nz, -1) -{ - for (auto cell = globalCell, cellEnd = globalCell + nc; cell != cellEnd; ++cell) - { - localCell_[*cell] = cell-globalCell; - } -} - -bool ActiveGridCells::cellActive(std::size_t i, std::size_t j, std::size_t k) const -{ - return cellActive(this->getGlobalIndex(i,j,k)); -} - -bool ActiveGridCells::cellActive(std::size_t cartesianIndex) const -{ - return localCell_[cartesianIndex]>=0; -} - -int ActiveGridCells::localCell(std::size_t cartesianIndex) const -{ - return localCell_[cartesianIndex]; -} - -int ActiveGridCells::localCell(std::size_t i, std::size_t j, std::size_t k) const -{ - return localCell(this->getGlobalIndex(i,j,k)); -} - -std::vector ActiveGridCells::actNum() const -{ - std::vector actnum; - actnum.reserve(localCell_.size()); - std::transform(localCell_.begin(), localCell_.end(), - std::back_inserter(actnum), [](int i){ return i>=0;}); - return actnum; -} -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/common/utility/FileSystem.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/common/utility/FileSystem.cpp deleted file mode 100644 index a9f6076875..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/common/utility/FileSystem.cpp +++ /dev/null @@ -1,180 +0,0 @@ -/* - Copyright 2019 Equinor ASA - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include - -#include -#include - -namespace Opm -{ - -std::string unique_path(const std::string& input) -{ - std::random_device rd; - std::mt19937 gen(rd()); - auto randchar = [&gen]() - { - const std::string set = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; - std::uniform_int_distribution<> select(0, set.size()-1); - return set[select(gen)]; - }; - - std::string ret; - ret.reserve(input.size()); - std::transform(input.begin(), input.end(), std::back_inserter(ret), - [&randchar](const char c) - { - return (c == '%') ? randchar() : c; - }); - - return ret; -} - -#if !defined(_WIN32) && (__cplusplus < 201703L || \ - (defined(__GNUC__) && __GNUC__ < 8 && !defined(__clang__))) - -// The following code has been extracted from libstdc++, -// and slightly modified for use here. -// License is replicated here for attribution. - -// Copyright (C) 2014-2021 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 3, or (at your option) -// any later version. - -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// Under Section 7 of GPL version 3, you are granted additional -// permissions described in the GCC Runtime Library Exception, version -// 3.1, as published by the Free Software Foundation. - -// You should have received a copy of the GNU General Public License and -// a copy of the GCC Runtime Library Exception along with this program; -// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -// . - -namespace { - -bool is_dot(Opm::filesystem::path::value_type c) { return c == '.'; } - -bool is_dot(const Opm::filesystem::path& path) -{ - const auto& filename = path.native(); - return filename.size() == 1 && is_dot(filename[0]); -} - -bool is_dotdot(const Opm::filesystem::path& path) -{ - const auto& filename = path.native(); - return filename.size() == 2 && is_dot(filename[0]) && is_dot(filename[1]); -} - -Opm::filesystem::path lexically_relative(const Opm::filesystem::path& p, - const Opm::filesystem::path& base) -{ - Opm::filesystem::path ret; - if (p.root_name() != base.root_name()) - return ret; - - if (p.is_absolute() != base.is_absolute()) - return ret; - if (!p.has_root_directory() && base.has_root_directory()) - return ret; - auto [a, b] = std::mismatch(p.begin(), p.end(), base.begin(), base.end()); - if (a == p.end() && b == base.end()) - ret = "."; - else - { - int n = 0; - for (; b != base.end(); ++b) - { - const Opm::filesystem::path& p2 = *b; - if (is_dotdot(p2)) - --n; - else if (!p2.empty() && !is_dot(p2)) - ++n; - } - if (n == 0 && (a == p.end() || a->empty())) - ret = "."; - else if (n >= 0) - { - const Opm::filesystem::path dotdot(".."); - while (n--) - ret /= dotdot; - for (; a != p.end(); ++a) - ret /= *a; - } - } - return ret; -} - -Opm::filesystem::path -lexically_proximate(const Opm::filesystem::path& p, const Opm::filesystem::path& base) -{ - Opm::filesystem::path rel = lexically_relative(p, base); - return rel.empty() ? p : rel; -} - -Opm::filesystem::path -weakly_canonical(const Opm::filesystem::path& p) -{ - Opm::filesystem::path result; - if (exists(status(p))) - return canonical(p); - - Opm::filesystem::path tmp; - auto iter = p.begin(), end = p.end(); - // find leading elements of p that exist: - while (iter != end) - { - tmp = result / *iter; - if (exists(status(tmp))) - swap(result, tmp); - else - break; - ++iter; - } - // canonicalize: - if (!result.empty()) - result = canonical(result); - // append the non-existing elements: - while (iter != end) - result /= *iter++; - - return result; -} - -} - - -filesystem::path proximate(const filesystem::path& p, const filesystem::path& base) -{ - return lexically_proximate(weakly_canonical(p), weakly_canonical(base)); -} - -#endif - -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/common/utility/OpmInputError.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/common/utility/OpmInputError.cpp deleted file mode 100644 index 16032da572..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/common/utility/OpmInputError.cpp +++ /dev/null @@ -1,87 +0,0 @@ -/* - Copyright 2020 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include -#include -#include - -#include -#include - -namespace Opm { - -namespace { - -template -std::string formatImpl(const std::string& msg_format, const KeywordLocation& loc, const Args& ...arguments) { - return fmt::format(msg_format, - arguments..., - fmt::arg("keyword", loc.keyword), - fmt::arg("file", loc.filename), - fmt::arg("line", loc.lineno) - ); -} - -} - -std::string OpmInputError::formatException(const std::exception& e, const KeywordLocation& loc) { - const std::string defaultMessage { R"(Problem with keyword {keyword} -In {file} line {line}. -Internal error: {})" } ; - - return formatImpl(defaultMessage, loc, e.what()); -} - -/* - For the format() function it is possible to have an alternative function with - a variaditic template which can be forwarded directly to the fmt::format() - function, that is an elegant way to pass arbitrary additional arguments. That - will require the OpmInputError::format() to become a templated function and - the fmtlib dependendcy will be imposed on downstream modules. -*/ -std::string OpmInputError::format(const std::string& msg_format, const KeywordLocation& loc) { - return formatImpl(msg_format, loc); -} - -std::string OpmInputError::formatSingle(const std::string& reason, const KeywordLocation& location) { - const std::string defaultMessage { R"(Problem with keyword {keyword} -In {file} line {line} -{})" } ; - - return formatImpl(defaultMessage, location, reason); -} - -namespace { - -std::string locationStringLine(const KeywordLocation& loc) { - return OpmInputError::format("\n {keyword} in {file}, line {line}", loc); -} - -} - -std::string OpmInputError::formatMultiple(const std::string& reason, const std::vector& locations) { - std::vector locationStrings; - std::transform(locations.begin(), locations.end(), std::back_inserter(locationStrings), &locationStringLine); - const std::string messages { std::accumulate(locationStrings.begin(), locationStrings.end(), std::string {}) } ; - - return fmt::format(R"(Problem with keywords {} -{})", messages, reason); -} - -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/common/utility/TimeService.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/common/utility/TimeService.cpp deleted file mode 100644 index 98299be262..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/common/utility/TimeService.cpp +++ /dev/null @@ -1,209 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media Project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include - -#include -#include -#include - -namespace Opm { -namespace TimeService { - -namespace { - const std::unordered_map month_indices = { - {"JAN", 1}, - {"FEB", 2}, - {"MAR", 3}, - {"APR", 4}, - {"MAI", 5}, - {"MAY", 5}, - {"JUN", 6}, - {"JUL", 7}, - {"JLY", 7}, - {"AUG", 8}, - {"SEP", 9}, - {"OCT", 10}, - {"OKT", 10}, - {"NOV", 11}, - {"DEC", 12}, - {"DES", 12}}; -} - - -const time_t system_clock_epoch = std::chrono::system_clock::to_time_t({}); - -time_point from_time_t(std::time_t t) { - auto diff = std::difftime(t, system_clock_epoch); - return time_point(std::chrono::seconds(static_cast(diff))); -} - -std::time_t to_time_t(const time_point& tp) { - return std::chrono::duration_cast(tp.time_since_epoch()).count() + system_clock_epoch; -} - - -time_point now() { - time_point epoch; - auto default_now = std::chrono::system_clock::now(); - return epoch + std::chrono::duration_cast(default_now.time_since_epoch()); -} - -std::time_t advance(const std::time_t tp, const double sec) -{ - const auto t = Opm::TimeService::from_time_t(tp) + std::chrono::duration_cast(std::chrono::duration(sec)); - return Opm::TimeService::to_time_t(t); -} - -std::time_t makeUTCTime(std::tm timePoint) -{ - const auto ltime = std::mktime(&timePoint); - auto tmval = *std::gmtime(<ime); // Mutable. - - // offset = ltime - tmval - // == #seconds by which 'ltime' is AHEAD of tmval. - const auto offset = - std::difftime(ltime, std::mktime(&tmval)); - - // Advance 'ltime' by 'offset' so that std::gmtime(return value) will - // have the same broken-down elements as 'tp'. - return advance(ltime, offset); -} - -const std::unordered_map& eclipseMonthIndices() { - return month_indices; -} - -bool valid_month(const std::string& month_name) { - return (month_indices.count(month_name) != 0); -} - - -} -} - -namespace { - - - - std::tm makeTm(const Opm::TimeStampUTC& tp) { - auto timePoint = std::tm{}; - - timePoint.tm_year = tp.year() - 1900; - timePoint.tm_mon = tp.month() - 1; - timePoint.tm_mday = tp.day(); - timePoint.tm_hour = tp.hour(); - timePoint.tm_min = tp.minutes(); - timePoint.tm_sec = tp.seconds(); - - return timePoint; - } - - -} - -Opm::TimeStampUTC::TimeStampUTC(const std::time_t tp) -{ - auto t = tp; - const auto tm = *std::gmtime(&t); - - this->ymd_ = YMD { tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday }; - - this->hour(tm.tm_hour).minutes(tm.tm_min).seconds(tm.tm_sec); -} - -Opm::TimeStampUTC::TimeStampUTC(const Opm::TimeStampUTC::YMD& ymd, - int hour, int minutes, int seconds, int usec) - : ymd_(ymd) - , hour_(hour) - , minutes_(minutes) - , seconds_(seconds) - , usec_(usec) -{} - -Opm::TimeStampUTC& Opm::TimeStampUTC::operator=(const std::time_t tp) -{ - auto t = tp; - const auto tm = *std::gmtime(&t); - - this->ymd_ = YMD { tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday }; - - this->hour(tm.tm_hour).minutes(tm.tm_min).seconds(tm.tm_sec); - - return *this; -} - -bool Opm::TimeStampUTC::operator==(const TimeStampUTC& data) const -{ - return ymd_ == data.ymd_ && - hour_ == data.hour_ && - minutes_ == data.minutes_ && - seconds_ == data.seconds_ && - usec_ == data.usec_; -} - -Opm::TimeStampUTC::TimeStampUTC(const YMD& ymd) - : ymd_{ std::move(ymd) } -{} - -Opm::TimeStampUTC::TimeStampUTC(int year, int month, int day) - : ymd_{ year, month, day } -{} - -Opm::TimeStampUTC& Opm::TimeStampUTC::hour(const int h) -{ - this->hour_ = h; - return *this; -} - -Opm::TimeStampUTC& Opm::TimeStampUTC::minutes(const int m) -{ - this->minutes_ = m; - return *this; -} - -Opm::TimeStampUTC& Opm::TimeStampUTC::seconds(const int s) -{ - this->seconds_ = s; - return *this; -} - -Opm::TimeStampUTC& Opm::TimeStampUTC::microseconds(const int us) -{ - this->usec_ = us; - return *this; -} - - -std::time_t Opm::asTimeT(const TimeStampUTC& tp) -{ - return Opm::TimeService::makeUTCTime(makeTm(tp)); -} - -std::time_t Opm::asLocalTimeT(const TimeStampUTC& tp) -{ - auto tm = makeTm(tp); - return std::mktime(&tm); -} - -Opm::TimeStampUTC Opm::operator+(const Opm::TimeStampUTC& lhs, std::chrono::duration delta) { - return Opm::TimeStampUTC( Opm::TimeService::advance(Opm::asTimeT(lhs) , delta.count()) ); -} - - diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/common/utility/numeric/MonotCubicInterpolator.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/common/utility/numeric/MonotCubicInterpolator.cpp deleted file mode 100644 index 23fe2d0778..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/common/utility/numeric/MonotCubicInterpolator.cpp +++ /dev/null @@ -1,732 +0,0 @@ -/* - MonotCubicInterpolator - Copyright (C) 2006 Statoil ASA - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 2 - of the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -*/ - -/** - @file MonotCubicInterpolator.C - @brief Represents one dimensional function f with single valued argument x - - Class to represent a one-dimensional function with single-valued - argument. Cubic interpolation, preserving the monotonicity of the - discrete known function values - - @see MonotCubicInterpolator.h for further documentation. - -*/ - - -#include "config.h" -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -using namespace std; - -/* - - SOME DISCUSSION ON DATA STORAGE: - - Internal data structure of points and values: - - vector(s): - - Easier coding - - Faster vector operations when setting up derivatives. - - sorting slightly more complex. - - insertion of further values bad. - - vector - - easy sorting - - code complexity almost as for map. - - insertion of additional values bad - - vector over struct datapoint { x, f, d} - - nice code - - not as sortable, insertion is cumbersome. - - ** This is used currently: ** - map one for (x,f) and one for (x,d) - - Naturally sorted on x-values (done by the map-construction) - - Slower to set up, awkward loop coding (?) - - easy to add more points. - - easier to just add code to linear interpolation code - - x-data is duplicated, but that memory waste is - unlikely to represent a serious issue. - - map > - - naturally couples x-value, f-value and d-value - - even more unreadable(??) code? - - higher skills needed by programmer. - - - MONOTONE CUBIC INTERPOLATION: - - It is a local algorithm. Adding one point only incur recomputation - of values in a neighbourhood of the point (in the interval getting - divided). - - NOTE: We do not currently make use of this local fact. Upon - insertion of a new data pair, everything is recomputed. Revisit - this when needed. - -*/ - - -namespace Opm -{ - - -MonotCubicInterpolator:: -MonotCubicInterpolator(const vector & x, const vector & f) { - if (x.size() != f.size()) { - throw("Unable to constuct MonotCubicInterpolator from vectors.") ; - } - - // Add the contents of the input vectors to our map of values. - vector::const_iterator posx, posf; - for (posx = x.begin(), posf = f.begin(); posx != x.end(); ++posx, ++posf) { - data[*posx] = *posf ; - } - - computeInternalFunctionData(); -} - - - -bool -MonotCubicInterpolator:: -read(const std::string & datafilename, int xColumn, int fColumn) -{ - data.clear() ; - ddata.clear() ; - - ifstream datafile_fs(datafilename.c_str()); - if (!datafile_fs) { - return false ; - } - - string linestring; - while (!datafile_fs.eof()) { - getline(datafile_fs, linestring); - - // Replace commas with space: - string::size_type pos = 0; - while ( (pos = linestring.find(",", pos)) != string::npos ) { - // cout << "Found comma at position " << pos << endl; - linestring.replace(pos, 1, " "); - pos++; - } - - stringstream strs(linestring); - int columnindex = 0; - std::vector value; - if (linestring.size() > 0 && linestring.at(0) != '#') { - while (!(strs.rdstate() & std::ios::failbit)) { - double tmp; - strs >> tmp; - value.push_back(tmp); - columnindex++; - } - } - if (columnindex >= (max(xColumn, fColumn))) { - data[value[xColumn-1]] = value[fColumn-1] ; - } - } - datafile_fs.close(); - - if (data.size() == 0) { - return false ; - } - - computeInternalFunctionData(); - return true ; -} - - -void -MonotCubicInterpolator:: -addPair(double newx, double newf) { - if (std::isnan(newx) || std::isinf(newx) || std::isnan(newf) || std::isinf(newf)) { - throw("MonotCubicInterpolator: addPair() received inf/nan input."); - } - data[newx] = newf ; - - // In a critical application, we should only update the - // internal function data for the offended interval, - // not for all function values over again. - computeInternalFunctionData(); -} - - -double -MonotCubicInterpolator:: -evaluate(double x) const { - - if (std::isnan(x) || std::isinf(x)) { - throw("MonotCubicInterpolator: evaluate() received inf/nan input."); - } - - // xf becomes the first (xdata,fdata) pair where xdata >= x - map::const_iterator xf_iterator = data.lower_bound(x); - - // First check if we must extrapolate: - if (xf_iterator == data.begin()) { - if (data.begin()->first == x) { // Just on the interval limit - return data.begin()->second; - } - else { - // Constant extrapolation (!!) - return data.begin()->second; - } - } - if (xf_iterator == data.end()) { - // Constant extrapolation (!!) - return data.rbegin()->second; - } - - - // Ok, we have x_min < x < x_max - - pair xf2 = *xf_iterator; - pair xf1 = *(--xf_iterator); - // we now have: xf2.first > x - - // Linear interpolation if derivative data is not available: - if (ddata.size() != data.size()) { - double finterp = xf1.second + - (xf2.second - xf1.second) / (xf2.first - xf1.first) - * (x - xf1.first); - return finterp; - } - else { // Do Cubic Hermite spline - double t = (x - xf1.first)/(xf2.first - xf1.first); // t \in [0,1] - double h = xf2.first - xf1.first; - double finterp - = xf1.second * H00(t) - + ddata[xf1.first] * H10(t) * h - + xf2.second * H01(t) - + ddata[xf2.first] * H11(t) * h ; - return finterp; - } - -} - - -// double -// MonotCubicInterpolator:: -// evaluate(double x, double& errorestimate_output) { -// cout << "Error: errorestimate not implemented" << endl; -// throw("error estimate not implemented"); -// return x; -// } - -vector -MonotCubicInterpolator:: -get_xVector() const -{ - map::const_iterator xf_iterator = data.begin(); - - vector outputvector; - outputvector.reserve(data.size()); - for (xf_iterator = data.begin(); xf_iterator != data.end(); ++xf_iterator) { - outputvector.push_back(xf_iterator->first); - } - return outputvector; -} - - -vector -MonotCubicInterpolator:: -get_fVector() const -{ - - map::const_iterator xf_iterator = data.begin(); - - vector outputvector; - outputvector.reserve(data.size()); - for (xf_iterator = data.begin(); xf_iterator != data.end(); ++xf_iterator) { - outputvector.push_back(xf_iterator->second); - } - return outputvector; -} - - - -string -MonotCubicInterpolator:: -toString() const -{ - const int precision = 20; - std::stringstream dataStringStream; - for (map::const_iterator it = data.begin(); - it != data.end(); ++it) { - dataStringStream << setprecision(precision) << it->first; - dataStringStream << '\t'; - dataStringStream << setprecision(precision) << it->second; - dataStringStream << '\n'; - } - dataStringStream << "Derivative values:" << endl; - for (map::const_iterator it = ddata.begin(); - it != ddata.end(); ++it) { - dataStringStream << setprecision(precision) << it->first; - dataStringStream << '\t'; - dataStringStream << setprecision(precision) << it->second; - dataStringStream << '\n'; - } - - return dataStringStream.str(); - -} - - -pair -MonotCubicInterpolator:: -getMissingX() const -{ - if( data.size() < 2) { - throw("MonotCubicInterpolator::getMissingX() only one datapoint."); - } - - // Search for biggest difference value in function-datavalues: - - map::const_iterator maxfDiffPair_iterator = data.begin();; - double maxfDiffValue = 0; - - map::const_iterator xf_iterator; - map::const_iterator xf_next_iterator; - - for (xf_iterator = data.begin(), xf_next_iterator = ++(data.begin()); - xf_next_iterator != data.end(); - ++xf_iterator, ++xf_next_iterator) { - double absfDiff = fabs((double)(*xf_next_iterator).second - - (double)(*xf_iterator).second); - if (absfDiff > maxfDiffValue) { - maxfDiffPair_iterator = xf_iterator; - maxfDiffValue = absfDiff; - } - } - - double newXvalue = ((*maxfDiffPair_iterator).first + ((*(++maxfDiffPair_iterator)).first))/2; - return make_pair(newXvalue, maxfDiffValue); - -} - - - -pair -MonotCubicInterpolator:: -getMaximumF() const { - if (data.size() <= 1) { - throw ("MonotCubicInterpolator::getMaximumF() empty data.") ; - } - if (strictlyIncreasing) - return *data.rbegin(); - else if (strictlyDecreasing) - return *data.begin(); - else { - pair maxf = *data.rbegin() ; - map::const_iterator xf_iterator; - for (xf_iterator = data.begin() ; xf_iterator != data.end(); ++xf_iterator) { - if (xf_iterator->second > maxf.second) { - maxf = *xf_iterator ; - } ; - } - return maxf ; - } -} - - -pair -MonotCubicInterpolator:: -getMinimumF() const { - if (data.size() <= 1) { - throw ("MonotCubicInterpolator::getMinimumF() empty data.") ; - } - if (strictlyIncreasing) - return *data.begin(); - else if (strictlyDecreasing) { - return *data.rbegin(); - } - else { - pair minf = *data.rbegin() ; - map::const_iterator xf_iterator; - for (xf_iterator = data.begin() ; xf_iterator != data.end(); ++xf_iterator) { - if (xf_iterator->second < minf.second) { - minf = *xf_iterator ; - } ; - } - return minf ; - } -} - - -void -MonotCubicInterpolator:: -computeInternalFunctionData() const { - - /* The contents of this function is meaningless if there is only one datapoint */ - if (data.size() <= 1) { - return; - } - - /* We do not check the caching flag if we are instructed - to do this computation */ - - /* We compute monotoneness and directions by assuming - monotoneness, and setting to false if the function is not for - some value */ - - map::const_iterator xf_iterator; - map::const_iterator xf_next_iterator; - - - strictlyMonotone = true; // We assume this is true, and will set to false if not - monotone = true; - strictlyDecreasing = true; - decreasing = true; - strictlyIncreasing = true; - increasing = true; - - // Increasing or decreasing?? - xf_iterator = data.begin(); - xf_next_iterator = ++(data.begin()); - /* Cater for non-strictness, search for direction for monotoneness */ - while (xf_next_iterator != data.end() && - xf_iterator->second == xf_next_iterator->second) { - /* Ok, equal values, this is not strict. */ - strictlyMonotone = false; - strictlyIncreasing = false; - strictlyDecreasing = false; - - ++xf_iterator; - ++xf_next_iterator; - } - - - if (xf_next_iterator != data.end()) { - - if ( xf_iterator->second > xf_next_iterator->second) { - // Ok, decreasing, check monotoneness: - strictlyDecreasing = true;// if strictlyMonotone == false, this one should not be trusted anyway - decreasing = true; - strictlyIncreasing = false; - increasing = false; - while(++xf_iterator, ++xf_next_iterator != data.end()) { - if ((*xf_iterator).second < (*xf_next_iterator).second) { - monotone = false; - strictlyMonotone = false; - strictlyDecreasing = false; // meaningless now - break; // out of while loop - } - if ((*xf_iterator).second <= (*xf_next_iterator).second) { - strictlyMonotone = false; - strictlyDecreasing = false; // meaningless now - } - } - } - else if (xf_iterator->second < xf_next_iterator->second) { - // Ok, assume increasing, check monotoneness: - strictlyDecreasing = false; - strictlyIncreasing = true; - decreasing = false; - increasing = true; - while(++xf_iterator, ++xf_next_iterator != data.end()) { - if ((*xf_iterator).second > (*xf_next_iterator).second) { - monotone = false; - strictlyMonotone = false; - strictlyIncreasing = false; // meaningless now - break; // out of while loop - } - if ((*xf_iterator).second >= (*xf_next_iterator).second) { - strictlyMonotone = false; - strictlyIncreasing = false; // meaningless now - } - } - } - else { - // first two values must be equal if we get - // here, but that should have been taken care - // of by the while loop above. - throw("Programming logic error.") ; - } - - } - computeSimpleDerivatives(); - - - // If our input data is monotone, we can do monotone cubic - // interpolation, so adjust the derivatives if so. - // - // If input data is not monotone, we should not touch - // the derivatives, as this code should reduce to a - // standard cubic interpolation algorithm. - if (monotone) { - adjustDerivativesForMonotoneness(); - } - - strictlyMonotoneCached = true; - monotoneCached = true; -} - -// Checks if the function curve is flat (zero derivative) at the -// endpoints, chop off endpoint data points if that is the case. -// -// The notion of "flat" is determined by the input parameter "epsilon" -// Values whose difference are less than epsilon are regarded as equal. -// -// This is implemented to be able to obtain a strictly monotone -// curve from a data set that is strictly monotone except at the -// endpoints. -// -// Example: -// The data points -// (1,3), (2,3), (3,4), (4,5), (5,5), (6,5) -// will become -// (2,3), (3,4), (4,5) -// -// Assumes at least 3 datapoints. If less than three, this function is a noop. -void -MonotCubicInterpolator:: -chopFlatEndpoints(const double epsilon) { - - if (getSize() < 3) { - return; - } - - map::iterator xf_iterator; - map::iterator xf_next_iterator; - - // Clear flags: - strictlyMonotoneCached = false; - monotoneCached = false; - - // Chop left end: - xf_iterator = data.begin(); - xf_next_iterator = ++(data.begin()); - // Erase data points that are similar to its right value from the left end. - while ((xf_next_iterator != data.end()) && - (fabs(xf_iterator->second - xf_next_iterator->second) < epsilon )) { - ++xf_next_iterator; - data.erase(xf_iterator); - ++xf_iterator; - } - - xf_iterator = data.end(); - --xf_iterator; // (data.end() points beyond the last element) - xf_next_iterator = xf_iterator; - --xf_next_iterator; - // Erase data points that are similar to its left value from the right end. - while ((xf_next_iterator != data.begin()) && - (fabs(xf_iterator->second - xf_next_iterator->second) < epsilon )) { - --xf_next_iterator; - data.erase(xf_iterator); - --xf_iterator; - } - - // Finished chopping, so recompute function data: - computeInternalFunctionData(); -} - - -// -// If function is monotone, but not strictly monotone, -// this function will remove datapoints from intervals -// with zero derivative so that the curves become -// strictly monotone. -// -// Example -// The data points -// (1,2), (2,3), (3,4), (4,4), (5,5), (6,6) -// will become -// (1,2), (2,3), (3,4), (5,5), (6,6) -// -// Assumes at least two datapoints, if one or zero datapoint, this is a noop. -// -// -void -MonotCubicInterpolator:: -shrinkFlatAreas(const double epsilon) { - - if (getSize() < 2) { - return; - } - - map::iterator xf_iterator; - map::iterator xf_next_iterator; - - - // Nothing to do if we already are strictly monotone - if (isStrictlyMonotone()) { - return; - } - - // Refuse to change a curve that is not monotone. - if (!isMonotone()) { - return; - } - - // Clear flags, they are not to be trusted after we modify the - // data - strictlyMonotoneCached = false; - monotoneCached = false; - - // Iterate through data values, if two data pairs - // have equal values, delete one of the data pair. - // Do not trust the source code on which data point is being - // removed (x-values of equal y-points might be averaged in the future) - xf_iterator = data.begin(); - xf_next_iterator = ++(data.begin()); - - while (xf_next_iterator != data.end()) { - //cout << xf_iterator->first << "," << xf_iterator->second << " " << xf_next_iterator->first << "," << xf_next_iterator->second << "\n"; - if (fabs(xf_iterator->second - xf_next_iterator->second) < epsilon ) { - //cout << "erasing data pair" << xf_next_iterator->first << " " << xf_next_iterator->second << "\n"; - map ::iterator xf_tobedeleted_iterator = xf_next_iterator; - ++xf_next_iterator; - data.erase(xf_tobedeleted_iterator); - } - else { - ++xf_iterator; - ++xf_next_iterator; - } - } - -} - - -void -MonotCubicInterpolator:: -computeSimpleDerivatives() const { - - ddata.clear(); - - // Do endpoints first: - map::const_iterator xf_iterator; - map::const_iterator xf_next_iterator; - double diff; - - // Leftmost interval: - xf_iterator = data.begin(); - xf_next_iterator = ++(data.begin()); - diff = - (xf_next_iterator->second - xf_iterator->second) / - (xf_next_iterator->first - xf_iterator->first); - ddata[xf_iterator->first] = diff ; - - // Rightmost interval: - xf_iterator = --(--(data.end())); - xf_next_iterator = --(data.end()); - diff = - (xf_next_iterator->second - xf_iterator->second) / - (xf_next_iterator->first - xf_iterator->first); - ddata[xf_next_iterator->first] = diff ; - - // If we have more than two intervals, loop over internal points: - if (data.size() > 2) { - - map::const_iterator intpoint; - for (intpoint = ++data.begin(); intpoint != --data.end(); ++intpoint) { - /* - diff = (f2 - f1)/(x2-x1)/w + (f3-f1)/(x3-x2)/2 - - average of the forward and backward difference. - Weights are equal, should we weigh with h_i? - */ - - map::const_iterator lastpoint = intpoint; --lastpoint; - map::const_iterator nextpoint = intpoint; ++nextpoint; - - diff = (nextpoint->second - intpoint->second)/ - (2*(nextpoint->first - intpoint->first)) - + - (intpoint->second - lastpoint->second) / - (2*(intpoint->first - lastpoint->first)); - - ddata[intpoint->first] = diff ; - } - } -} - - - -void -MonotCubicInterpolator:: -adjustDerivativesForMonotoneness() const { - map::const_iterator point, dpoint; - - /* Loop over all intervals, ie. loop over all points and look - at the interval to the right of the point */ - for (point = data.begin(), dpoint = ddata.begin(); - point != --data.end(); - ++point, ++dpoint) { - map::const_iterator nextpoint, nextdpoint; - nextpoint = point; ++nextpoint; - nextdpoint = dpoint; ++nextdpoint; - - double delta = - (nextpoint->second - point->second) / - (nextpoint->first - point->first); - if (fabs(delta) < 1e-14) { - ddata[point->first] = 0.0; - ddata[nextpoint->first] = 0.0; - } else { - double alpha = ddata[point->first] / delta; - double beta = ddata[nextpoint->first] / delta; - - if (! isMonotoneCoeff(alpha, beta)) { - double tau = 3/sqrt(alpha*alpha + beta*beta); - - ddata[point->first] = tau*alpha*delta; - ddata[nextpoint->first] = tau*beta*delta; - } - } - - - } - - -} - - - - -void -MonotCubicInterpolator:: -scaleData(double factor) { - map::iterator it , itd ; - if (data.size() == ddata.size()) { - for (it = data.begin() , itd = ddata.begin() ; it != data.end() ; ++it , ++itd) { - it->second *= factor ; - itd->second *= factor ; - } ; - } else { - for (it = data.begin() ; it != data.end() ; ++it ) { - it->second *= factor ; - } - } -} - - -} // namespace Opm diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/common/utility/numeric/calculateCellVol.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/common/utility/numeric/calculateCellVol.cpp deleted file mode 100644 index 3bb53ebff2..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/common/utility/numeric/calculateCellVol.cpp +++ /dev/null @@ -1,144 +0,0 @@ -/* - Copyright 2018 Statoil ASA. - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - - -#include -#include - -#define _USE_MATH_DEFINES -#include - -#include -#include - -/* - Cell volume calculation based on following publication: - - D. K Pointing, Corner Point Geometry in Reservoir Simulation , - ECMOR I - 1st European Conference on the Mathematics of Oil Recovery, - 1989 -*/ - - -/* - The expressions {C(0,0,0),..C(1,1,1)} have a nice interpretation in - terms of a type of multipole expansion - the last four terms are differences - in the lengths of cell face diagonals and of the diagonals across the - cell. For a cubical block only the first four terms would exist. - -*/ - -double C(const double* r, int i1, int i2, int i3){ - int g = i1 + i2 * 2 + i3 * 4; - - if (g == 0) - return r[0]; - - if (g == 1) - return r[1] - r[0]; - - if (g == 2) - return r[2] - r[0]; - - if (g == 3) - return r[3] + r[0] - r[2] - r[1]; - - if (g == 4) - return r[4] - r[0]; - - if (g == 5) - return r[5] + r[0] - r[4] - r[1]; - - if (g == 6) - return r[6] + r[0] - r[4] - r[2]; - - return r[7] + r[4] + r[2] + r[1] - r[6] - r[5] - r[3] - r[0]; -} - - -struct pqr_t { - int pb; - int pg; - int qa; - int qg; - int ra; - int rb; -}; - - -double calculateCellVol(const std::array& X, const std::array& Y, const std::array& Z){ - /* - The permutation array should be ordered so that the sign: - - sign = (-1)^N, N = # permutations - - is alternating - so that the sign can just be changed multiplying with -1. - */ - static const std::array< std::array, 6 > permutation = {{{ 0, 1, 2}, - { 0, 2, 1}, - { 1, 2, 0}, - { 1, 0, 2}, - { 2, 0, 1}, - { 2, 1, 0}}}; - - - static const std::array pqr_array - = {{{0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1}, {0, 0, 0, 0, 1, 0}, {0, 0, 0, 0, 1, 1}, - {0, 0, 0, 1, 0, 0}, {0, 0, 0, 1, 0, 1}, {0, 0, 0, 1, 1, 0}, {0, 0, 0, 1, 1, 1}, - {0, 0, 1, 0, 0, 0}, {0, 0, 1, 0, 0, 1}, {0, 0, 1, 0, 1, 0}, {0, 0, 1, 0, 1, 1}, - {0, 0, 1, 1, 0, 0}, {0, 0, 1, 1, 0, 1}, {0, 0, 1, 1, 1, 0}, {0, 0, 1, 1, 1, 1}, - {0, 1, 0, 0, 0, 0}, {0, 1, 0, 0, 0, 1}, {0, 1, 0, 0, 1, 0}, {0, 1, 0, 0, 1, 1}, - {0, 1, 0, 1, 0, 0}, {0, 1, 0, 1, 0, 1}, {0, 1, 0, 1, 1, 0}, {0, 1, 0, 1, 1, 1}, - {0, 1, 1, 0, 0, 0}, {0, 1, 1, 0, 0, 1}, {0, 1, 1, 0, 1, 0}, {0, 1, 1, 0, 1, 1}, - {0, 1, 1, 1, 0, 0}, {0, 1, 1, 1, 0, 1}, {0, 1, 1, 1, 1, 0}, {0, 1, 1, 1, 1, 1}, - {1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 1}, {1, 0, 0, 0, 1, 0}, {1, 0, 0, 0, 1, 1}, - {1, 0, 0, 1, 0, 0}, {1, 0, 0, 1, 0, 1}, {1, 0, 0, 1, 1, 0}, {1, 0, 0, 1, 1, 1}, - {1, 0, 1, 0, 0, 0}, {1, 0, 1, 0, 0, 1}, {1, 0, 1, 0, 1, 0}, {1, 0, 1, 0, 1, 1}, - {1, 0, 1, 1, 0, 0}, {1, 0, 1, 1, 0, 1}, {1, 0, 1, 1, 1, 0}, {1, 0, 1, 1, 1, 1}, - {1, 1, 0, 0, 0, 0}, {1, 1, 0, 0, 0, 1}, {1, 1, 0, 0, 1, 0}, {1, 1, 0, 0, 1, 1}, - {1, 1, 0, 1, 0, 0}, {1, 1, 0, 1, 0, 1}, {1, 1, 0, 1, 1, 0}, {1, 1, 0, 1, 1, 1}, - {1, 1, 1, 0, 0, 0}, {1, 1, 1, 0, 0, 1}, {1, 1, 1, 0, 1, 0}, {1, 1, 1, 0, 1, 1}, - {1, 1, 1, 1, 0, 0}, {1, 1, 1, 1, 0, 1}, {1, 1, 1, 1, 1, 0}, {1, 1, 1, 1, 1, 1}}}; - - double volume = 0.0; - const double* vect[3]; - const std::array,3> data = {{X, Y, Z}}; - double perm_sign = 1; - for (const auto& perm : permutation) { - for (std::size_t perm_index = 0; perm_index < 3; perm_index++) - vect[perm_index] = data[perm[perm_index]].data(); - - for (const auto& pqr : pqr_array) { - const double cprod = C(vect[0], 1, pqr.pb, pqr.pg)*C(vect[1], pqr.qa, 1, pqr.qg)*C(vect[2], pqr.ra, pqr.rb, 1); - const double denom = (pqr.qa + pqr.ra + 1) * (pqr.pb + pqr.rb + 1) * (pqr.pg + pqr.qg + 1); - volume += perm_sign * cprod / denom; - } - - perm_sign *= -1; - } - return std::fabs(volume); -} - - -/* - Cell volume calculation for a cell from a cylindrical grid, given by the - inner and outer radius of the cell, and its spans in the angle and Z. -*/ -double calculateCylindricalCellVol(const double r_inner, const double r_outer, const double delta_theta, const double delta_z) -{ - return M_PI * std::abs((std::pow(r_outer,2) - std::pow(r_inner,2)) * delta_theta * delta_z) / 360.0; -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/common/utility/parameters/Parameter.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/common/utility/parameters/Parameter.cpp deleted file mode 100644 index abb26ab715..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/common/utility/parameters/Parameter.cpp +++ /dev/null @@ -1,72 +0,0 @@ -//=========================================================================== -// -// File: Parameter.cpp -// -// Created: Tue Jun 2 19:18:25 2009 -// -// Author(s): Bård Skaflestad -// Atgeirr F Rasmussen -// -// $Date$ -// -// $Revision$ -// -//=========================================================================== - -/* - Copyright 2009, 2010 SINTEF ICT, Applied Mathematics. - Copyright 2009, 2010 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#if HAVE_CONFIG_H -#include "config.h" -#endif -#include -#include - -namespace Opm { - std::string - correct_parameter_tag(const ParameterMapItem& item) - { - std::string tag = item.getTag(); - if (tag != ID_xmltag__param) { - std::string error = "The XML tag was '" + - tag + "' but should be '" + - ID_xmltag__param + "'.\n"; - return error; - } else { - return ""; - } - } - - std::string - correct_type(const Parameter& parameter, - const std::string& param_type) - { - std::string type = parameter.getType(); - if ( (type != param_type) && - (type != ID_param_type__cmdline) ) { - std::string error = "The data was of type '" + type + - "' but should be of type '" + - param_type + "'.\n"; - return error; - } else { - return ""; - } - } -} // namespace Opm diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/common/utility/parameters/ParameterGroup.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/common/utility/parameters/ParameterGroup.cpp deleted file mode 100644 index 1668cacc40..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/common/utility/parameters/ParameterGroup.cpp +++ /dev/null @@ -1,331 +0,0 @@ -//=========================================================================== -// -// File: ParameterGroup.cpp -// -// Created: Tue Jun 2 19:13:17 2009 -// -// Author(s): BÃ¥rd Skaflestad -// Atgeirr F Rasmussen -// -// $Date$ -// -// $Revision$ -// -//=========================================================================== - -/* - Copyright 2009, 2010 SINTEF ICT, Applied Mathematics. - Copyright 2009, 2010 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#if HAVE_CONFIG_H -#include "config.h" -#endif -#include - -#include -#include -#include -#include -#include - -#include -#include -#include - -namespace Opm { - ParameterGroup::ParameterGroup() - : path_(ID_path_root), parent_(0), output_is_enabled_(true) - { - } - - ParameterGroup::~ParameterGroup() { - if (output_is_enabled_) { - //TermColors::Normal(); - } - } - - std::string ParameterGroup::getTag() const { - return ID_xmltag__param_grp; - } - - - bool ParameterGroup::has(const std::string& name) const - { - std::pair name_path = splitParam(name); - map_type::const_iterator it = map_.find(name_path.first); - if (it == map_.end()) { - return false; - } else if (name_path.second == "") { - return true; - } else { - ParameterGroup& pg = dynamic_cast(*(*it).second); - return pg.has(name_path.second); - } - } - - std::string ParameterGroup::path() const { - return path_; - } - - ParameterGroup::ParameterGroup(const std::string& patharg, - const ParameterGroup* parent, - const bool enable_output) - : path_(patharg), parent_(parent), output_is_enabled_(enable_output) - { - } - - ParameterGroup - ParameterGroup::getGroup(const std::string& name) const - { - return get(name); - } - - namespace { - inline std::istream& - samcode_readline(std::istream& is, std::string& parameter) { - return std::getline(is, parameter); - } - } // anonymous namespace - - void ParameterGroup::readParam(const std::string& param_filename) { - std::ifstream is(param_filename.c_str()); - if (!is) { - std::cerr << "Error: Failed to open parameter file '" << param_filename << "'.\n"; - throw std::exception(); - } - std::string parameter; - int lineno = 0; - while (samcode_readline(is, parameter)) { - ++lineno; - int commentpos = parameter.find(ID_comment); - if (commentpos != 0) { - if (commentpos != int(std::string::npos)) { - parameter = parameter.substr(0, commentpos); - } - int fpos = parameter.find(ID_delimiter_assignment); - if (fpos == int(std::string::npos)) { - std::cerr << "WARNING: No '" << ID_delimiter_assignment << "' found on line " << lineno << ".\n"; - } - int pos = fpos + ID_delimiter_assignment.size(); - int spos = parameter.find(ID_delimiter_assignment, pos); - if (spos == int(std::string::npos)) { - std::string name = parameter.substr(0, fpos); - std::string value = parameter.substr(pos, spos); - this->insertParameter(name, value); - } else { - std::cerr << "WARNING: To many '" << ID_delimiter_assignment << "' found on line " << lineno << ".\n"; - } - } - } - } - - void ParameterGroup::writeParam(const std::string& param_filename) const { - std::ofstream os(param_filename.c_str()); - if (!os) { - std::cerr << "Error: Failed to open parameter file '" - << param_filename << "'.\n"; - throw std::exception(); - } - this->writeParamToStream(os); - } - - void ParameterGroup::writeParamToStream(std::ostream& os) const - { - if (map_.empty()) { - os << this->path() << "/" << "dummy" - << ID_delimiter_assignment << "0\n"; - } - for (map_type::const_iterator it = map_.begin(); it != map_.end(); ++it) { - if ( (*it).second->getTag() == ID_xmltag__param_grp ) { - ParameterGroup& pg = dynamic_cast(*(*it).second); - pg.writeParamToStream(os); - } else if ( (*it).second->getTag() == ID_xmltag__param) { - os << this->path() << "/" << (*it).first << ID_delimiter_assignment - << dynamic_cast(*(*it).second).getValue() << "\n"; - } else { - os << this->path() << "/" << (*it).first << ID_delimiter_assignment - << "<" << (*it).second->getTag() << ">" << "\n"; - } - } - } - - void ParameterGroup::insert(const std::string& name, - const std::shared_ptr& data) - { - std::pair name_path = splitParam(name); - map_type::const_iterator it = map_.find(name_path.first); - assert(name_path.second == ""); - if (it == map_.end()) { - map_[name] = data; - } else { - if ( (map_[name]->getTag() == data->getTag()) && - (data->getTag() == ID_xmltag__param_grp) ) { - ParameterGroup& alpha = dynamic_cast(*(*it).second); - ParameterGroup& beta = dynamic_cast(*data); - for (map_type::const_iterator - item = beta.map_.begin(); item != beta.map_.end(); ++item) { - alpha.insert((*item).first, (*item).second); - } - } else { - std::cout << "WARNING : The '" - << map_[name]->getTag() - << "' element '" - << name - << "' already exist in group '" - << this->path() - << "'. The element will be replaced by a '" - << data->getTag() - << "' element.\n"; - map_[name] = data; - } - } - } - - void ParameterGroup::insertParameter(const std::string& name, - const std::string& value) - { - std::pair name_path = splitParam(name); - while (name_path.first == "") { - name_path = splitParam(name_path.second); - } - map_type::const_iterator it = map_.find(name_path.first); - if (it == map_.end()) { - if (name_path.second == "") { - std::shared_ptr data(new Parameter(value, ID_param_type__cmdline)); - map_[name_path.first] = data; - } else { - std::shared_ptr data(new ParameterGroup(this->path() + ID_delimiter_path + name_path.first, - this, - output_is_enabled_)); - ParameterGroup& child = dynamic_cast(*data); - child.insertParameter(name_path.second, value); - map_[name_path.first] = data; - } - } else if (name_path.second == "") { - if ((*it).second->getTag() != ID_xmltag__param) { - std::cout << "WARNING : The " - << map_[name_path.first]->getTag() - << " element '" - << name - << "' already exist in group '" - << this->path() - << "'. It will be replaced by a " - << ID_xmltag__param - << " element.\n"; - } - std::shared_ptr data(new Parameter(value, ID_param_type__cmdline)); - map_[name_path.first] = data; - } else { - ParameterGroup& pg = dynamic_cast(*(*it).second); - pg.insertParameter(name_path.second, value); - } - } - -#if 0 - void ParameterGroup::display() const { - std::cout << "Begin: " << this->path() << "\n"; - for (map_type::const_iterator it = map_.begin(); it != map_.end(); ++it) { - if ( (*it).second->getTag() == ID_xmltag__param_grp ) { - ParameterGroup& pg = dynamic_cast(*(*it).second); - pg.display(); - } else if ( (*it).second->getTag() == ID_xmltag__param) { - std::cout << (*it).first - << " (" - << (*it).second->getTag() - << ") has value " - << dynamic_cast(*(*it).second).getValue() - << "\n"; - } else { - std::cout << (*it).first - << " (" - << (*it).second->getTag() - << ")\n"; - } - } - std::cout << "End: " << this->path() << "\n"; - } -#endif - - bool ParameterGroup::anyUnused() const - { - if (!this->used()) { - return true; - } - for (map_type::const_iterator it = map_.begin(); it != map_.end(); ++it) { - if (it->second->getTag() == ID_xmltag__param_grp) { - ParameterGroup& pg = dynamic_cast(*(it->second)); - if (pg.anyUnused()) { - return true; - } - } else if (it->second->getTag() == ID_xmltag__param) { - if (!it->second->used()) { - return true; - } - } - } - return false; - } - - void ParameterGroup::displayUsage(bool used_params) const - { - if (this->used() == used_params) { - std::cout << this->path() << '\n'; - } - for (map_type::const_iterator it = map_.begin(); it != map_.end(); ++it) { - if (it->second->getTag() == ID_xmltag__param_grp) { - ParameterGroup& pg = dynamic_cast(*(it->second)); - pg.displayUsage(used_params); - } else if (it->second->getTag() == ID_xmltag__param) { - if (it->second->used() == used_params) { - std::cout << path() << '/' << it->first << '\n'; - } - } - } - std::cout << std::flush; - } - - void ParameterGroup::disableOutput() { - this->recursiveSetIsOutputEnabled(false); - } - - void ParameterGroup::enableOutput() { - this->recursiveSetIsOutputEnabled(true); - } - - bool ParameterGroup::isOutputEnabled() const { - return output_is_enabled_; - } - - void ParameterGroup::recursiveSetIsOutputEnabled(bool output_is_enabled) - { - output_is_enabled_ = output_is_enabled; - for (map_type::const_iterator it = map_.begin(); it != map_.end(); ++it) { - if (it->second->getTag() == ID_xmltag__param_grp) { - ParameterGroup& pg = dynamic_cast(*(it->second)); - pg.recursiveSetIsOutputEnabled(output_is_enabled); - } - } - } - - const std::vector& ParameterGroup::unhandledArguments() const - { - return unhandled_arguments_; - } - -} // namespace Opm diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/common/utility/parameters/ParameterTools.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/common/utility/parameters/ParameterTools.cpp deleted file mode 100644 index 0fc748cdcc..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/common/utility/parameters/ParameterTools.cpp +++ /dev/null @@ -1,53 +0,0 @@ -//=========================================================================== -// -// File: ParameterTools.cpp -// -// Created: Tue Jun 2 19:03:09 2009 -// -// Author(s): Bård Skaflestad -// Atgeirr F Rasmussen -// -// $Date$ -// -// $Revision$ -// -//=========================================================================== - -/* - Copyright 2009, 2010 SINTEF ICT, Applied Mathematics. - Copyright 2009, 2010 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#if HAVE_CONFIG_H -#include "config.h" -#endif -#include -#include - -namespace Opm { - std::pair splitParam(const std::string& name) - { - int pos = name.find(ID_delimiter_path); - if (pos == int(std::string::npos)) { - return std::make_pair(name, ""); - } else { - return std::make_pair(name.substr(0, pos), - name.substr(pos + ID_delimiter_path.size())); - } - } -} // namespace Opm diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/io/eclipse/EGrid.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/io/eclipse/EGrid.cpp deleted file mode 100644 index 79b8fe6fba..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/io/eclipse/EGrid.cpp +++ /dev/null @@ -1,581 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include -#include -#include - -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -#define _USE_MATH_DEFINES -#include - -namespace Opm { namespace EclIO { - -using NNCentry = std::tuple; - -EGrid::EGrid(const std::string &filename, std::string grid_name) : - EclFile(filename), inputFileName { filename }, m_grid_name {grid_name} -{ - initFileName = inputFileName.parent_path() / inputFileName.stem(); - - if (this->formattedInput()) - initFileName += ".FINIT"; - else - initFileName += ".INIT"; - - std::string lgrname = "global"; - - m_nncs_loaded = false; - actnum_array_index = -1; - nnc1_array_index = -1; - nnc2_array_index = -1; - m_radial = false; - - int hostnum_index = -1; - - for (size_t n = 0; n < array_name.size(); n++) { - - if (array_name[n] == "ENDLGR") - lgrname = "global"; - - if (array_name[n] == "LGR") { - auto lgr = this->get(n); - lgrname = lgr[0]; - lgr_names.push_back(lgr[0]); - } - - if (array_name[n] == "NNCHEAD"){ - auto nnchead = this->get(n); - - if (nnchead[1] == 0) - lgrname = "global"; - else - lgrname = lgr_names[nnchead[1] - 1]; - } - - if (array_name[n] == "MAPUNITS"){ - auto mapunits = this->get(n); - m_mapunits = mapunits[0]; - } - - if (array_name[n] == "MAPAXES") - m_mapaxes = this->get(n); - - if (lgrname == grid_name) { - if (array_name[n] == "GRIDHEAD") { - auto gridhead = get(n); - nijk[0] = gridhead[1]; - nijk[1] = gridhead[2]; - nijk[2] = gridhead[3]; - - if (gridhead.size() > 26) - m_radial = gridhead[26] > 0 ? true: false; - } - - if (array_name[n] == "COORD") - coord_array_index= n; - else if (array_name[n] == "ZCORN") - zcorn_array_index= n; - else if (array_name[n] == "ACTNUM") - actnum_array_index= n; - else if (array_name[n] == "NNC1") - nnc1_array_index= n; - else if (array_name[n] == "NNC2") - nnc2_array_index= n; - else if (array_name[n] == "HOSTNUM") - hostnum_index= n; - } - - if ((lgrname == "global") && (array_name[n] == "GRIDHEAD")) { - auto gridhead = get(n); - host_nijk[0] = gridhead[1]; - host_nijk[1] = gridhead[2]; - host_nijk[2] = gridhead[3]; - } - - } - - if (actnum_array_index != -1) { - auto actnum = this->get(actnum_array_index); - nactive = 0; - for (size_t i = 0; i < actnum.size(); i++) { - if (actnum[i] > 0) { - act_index.push_back(nactive); - glob_index.push_back(i); - nactive++; - } else { - act_index.push_back(-1); - } - } - } else { - int nCells = nijk[0] * nijk[1] * nijk[2]; - act_index.resize(nCells); - glob_index.resize(nCells); - std::iota(act_index.begin(), act_index.end(), 0); - std::iota(glob_index.begin(), glob_index.end(), 0); - } - - if (hostnum_index > -1){ - auto hostnum = getImpl(hostnum_index, INTE, inte_array, "integer"); - host_cells.reserve(hostnum.size()); - - for (auto val : hostnum) - host_cells.push_back(val -1); - } -} - -std::vector> EGrid::hostCellsIJK() -{ - std::vector> res_vect; - res_vect.reserve(host_cells.size()); - - for (auto val : host_cells){ - std::array tmp; - tmp[2] = val / (host_nijk[0] * host_nijk[1]); - int rest = val % (host_nijk[0] * host_nijk[1]); - - tmp[1] = rest / host_nijk[0]; - tmp[0] = rest % host_nijk[0]; - - res_vect.push_back(tmp); - } - - return res_vect; -} - -std::vector EGrid::get_nnc_ijk() -{ - if (!m_nncs_loaded) - load_nnc_data(); - - std::vector res_vect; - res_vect.reserve(nnc1_array.size()); - - for (size_t n=0; n< nnc1_array.size(); n++){ - auto ijk1 = ijk_from_global_index(nnc1_array[n] - 1); - auto ijk2 = ijk_from_global_index(nnc2_array[n] - 1); - - if (transnnc_array.size() > 0) - res_vect.push_back({ijk1[0], ijk1[1], ijk1[2], ijk2[0], ijk2[1], ijk2[2], transnnc_array[n]}); - else - res_vect.push_back({ijk1[0], ijk1[1], ijk1[2], ijk2[0], ijk2[1], ijk2[2], -1.0 }); - } - - return res_vect; -} - - -void EGrid::load_grid_data() -{ - coord_array = getImpl(coord_array_index, REAL, real_array, "float"); - zcorn_array = getImpl(zcorn_array_index, REAL, real_array, "float"); -} - -void EGrid::load_nnc_data() -{ - if ((nnc1_array_index > -1) && (nnc2_array_index > -1)) { - - nnc1_array = getImpl(nnc1_array_index, Opm::EclIO::INTE, inte_array, "inte"); - nnc2_array = getImpl(nnc2_array_index, Opm::EclIO::INTE, inte_array, "inte"); - - if ((Opm::filesystem::exists(initFileName)) && (nnc1_array.size() > 0)){ - Opm::EclIO::EInit init(initFileName.string()); - - auto init_dims = init.grid_dimension(m_grid_name); - int init_nactive = init.activeCells(m_grid_name); - - if (init_dims != nijk){ - std::string message = "Dimensions of Egrid differ from dimensions found in init file. "; - std::string grid_str = std::to_string(nijk[0]) + "x" + std::to_string(nijk[1]) + "x" + std::to_string(nijk[2]); - std::string init_str = std::to_string(init_dims[0]) + "x" + std::to_string(init_dims[1]) + "x" + std::to_string(init_dims[2]); - message = message + "Egrid: " + grid_str + ". INIT file: " + init_str; - OPM_THROW(std::invalid_argument, message); - } - - if (init_nactive != nactive){ - std::string message = "Number of active cells are different in Egrid and Init file."; - message = message + " Egrid: " + std::to_string(nactive) + ". INIT file: " + std::to_string(init_nactive); - OPM_THROW(std::invalid_argument, message); - } - - auto trans_data = init.getInitData("TRANNNC", m_grid_name); - - if (trans_data.size() != nnc1_array.size()){ - std::string message = "inconsistent size of array TRANNNC in init file. "; - message = message + " Size of NNC1 and NNC2: " + std::to_string(nnc1_array.size()); - message = message + " Size of TRANNNC: " + std::to_string(trans_data.size()); - OPM_THROW(std::invalid_argument, message); - } - - transnnc_array = trans_data; - } - - m_nncs_loaded = true; - } -} - -int EGrid::global_index(int i, int j, int k) const -{ - if (i < 0 || i >= nijk[0] || j < 0 || j >= nijk[1] || k < 0 || k >= nijk[2]) { - OPM_THROW(std::invalid_argument, "i, j or/and k out of range"); - } - - return i + j * nijk[0] + k * nijk[0] * nijk[1]; -} - - -int EGrid::active_index(int i, int j, int k) const -{ - int n = i + j * nijk[0] + k * nijk[0] * nijk[1]; - - if (i < 0 || i >= nijk[0] || j < 0 || j >= nijk[1] || k < 0 || k >= nijk[2]) { - OPM_THROW(std::invalid_argument, "i, j or/and k out of range"); - } - - return act_index[n]; -} - - -std::array EGrid::ijk_from_active_index(int actInd) const -{ - if (actInd < 0 || actInd >= nactive) { - OPM_THROW(std::invalid_argument, "active index out of range"); - } - - int _glob = glob_index[actInd]; - - std::array result; - result[2] = _glob / (nijk[0] * nijk[1]); - - int rest = _glob % (nijk[0] * nijk[1]); - - result[1] = rest / nijk[0]; - result[0] = rest % nijk[0]; - - return result; -} - - -std::array EGrid::ijk_from_global_index(int globInd) const -{ - if (globInd < 0 || globInd >= nijk[0] * nijk[1] * nijk[2]) { - OPM_THROW(std::invalid_argument, "global index out of range"); - } - - std::array result; - result[2] = globInd / (nijk[0] * nijk[1]); - - int rest = globInd % (nijk[0] * nijk[1]); - - result[1] = rest / nijk[0]; - result[0] = rest % nijk[0]; - - return result; -} - - -void EGrid::getCellCorners(const std::array& ijk, - std::array& X, - std::array& Y, - std::array& Z) -{ - if (coord_array.empty()) - load_grid_data(); - - std::vector zind; - std::vector pind; - - // calculate indices for grid pillars in COORD arrray - pind.push_back(ijk[1]*(nijk[0]+1)*6 + ijk[0]*6); - pind.push_back(pind[0] + 6); - pind.push_back(pind[0] + (nijk[0]+1)*6); - pind.push_back(pind[2] + 6); - - // get depths from zcorn array in ZCORN array - zind.push_back(ijk[2]*nijk[0]*nijk[1]*8 + ijk[1]*nijk[0]*4 + ijk[0]*2); - zind.push_back(zind[0] + 1); - zind.push_back(zind[0] + nijk[0]*2); - zind.push_back(zind[2] + 1); - - for (int n = 0; n < 4; n++) - zind.push_back(zind[n] + nijk[0]*nijk[1]*4); - - for (int n = 0; n< 8; n++) - Z[n] = zcorn_array[zind[n]]; - - for (int n = 0; n < 4; n++) { - double xt; - double yt; - double xb; - double yb; - - double zt = coord_array[pind[n] + 2]; - double zb = coord_array[pind[n] + 5]; - - if (m_radial) { - xt = coord_array[pind[n]] * cos(coord_array[pind[n] + 1] / 180.0 * M_PI); - yt = coord_array[pind[n]] * sin(coord_array[pind[n] + 1] / 180.0 * M_PI); - xb = coord_array[pind[n]+3] * cos(coord_array[pind[n] + 4] / 180.0 * M_PI); - yb = coord_array[pind[n]+3] * sin(coord_array[pind[n] + 4] / 180.0 * M_PI); - } else { - xt = coord_array[pind[n]]; - yt = coord_array[pind[n] + 1]; - xb = coord_array[pind[n] + 3]; - yb = coord_array[pind[n] + 4]; - } - - X[n] = xt + (xb-xt) / (zt-zb) * (zt - Z[n]); - X[n+4] = xt + (xb-xt) / (zt-zb) * (zt-Z[n+4]); - - Y[n] = yt+(yb-yt)/(zt-zb)*(zt-Z[n]); - Y[n+4] = yt+(yb-yt)/(zt-zb)*(zt-Z[n+4]); - } -} - - - -void EGrid::getCellCorners(int globindex, std::array& X, - std::array& Y, std::array& Z) -{ - return getCellCorners(ijk_from_global_index(globindex),X,Y,Z); -} - - -std::vector> EGrid::getXYZ_layer(int layer, const std::array& box, bool bottom) -{ - // layer is layer index, zero based. The box array is i and j range (i1,i2,j1,j2), also zero based - - if ((layer < 0) || (layer > (nijk[2] -1))){ - std::string message = "invalid layer index " + std::to_string(layer) + ". Valied range [0, "; - message = message + std::to_string(nijk[2] -1) + "]"; - throw std::invalid_argument(message); - } - - if ((box[0] < 0) || (box[0]+1 > nijk[0]) || (box[1] < 0) || (box[1]+1 > nijk[0]) || - (box[2] < 0) || (box[2]+1 > nijk[1]) || (box[3] < 0) || (box[3]+1 > nijk[1]) || - (box[0] > box[1]) || (box[2] > box[3])){ - - throw std::invalid_argument("invalid box input, i1,i2,j1 or j2 out of valied range "); - } - - int nodes_pr_surf = nijk[0]*nijk[1]*4; - int zcorn_offset = nodes_pr_surf * layer * 2; - - if (bottom) - zcorn_offset += nodes_pr_surf; - - std::vector layer_zcorn; - layer_zcorn.reserve(nodes_pr_surf); - - std::vector> xyz_vector; - - if (coord_array.size() == 0) - coord_array = getImpl(coord_array_index, REAL, real_array, "float"); - - if (zcorn_array.size() > 0){ - for (size_t n = 0; n < static_cast(nodes_pr_surf); n++) - layer_zcorn.push_back(zcorn_array[zcorn_offset + n]); - - } else { - layer_zcorn = get_zcorn_from_disk(layer, bottom); - } - - std::array X; - std::array Y; - std::array Z; - - std::array ijk; - ijk[2]=0; - - for (int j = box[2]; j < (box[3] + 1); j++) { - for (int i = box[0]; i < (box[1] + 1); i++) { - - ijk[0]=i; - ijk[1]=j; - - this->getCellCorners(ijk, layer_zcorn, X, Y, Z ); - - for (size_t n = 0; n < 4; n++){ - std::array xyz; - xyz[0] = X[n]; - xyz[1] = Y[n]; - xyz[2] = Z[n]; - - xyz_vector.push_back(xyz); - } - } - } - - return xyz_vector; -} - - -std::vector> EGrid::getXYZ_layer(int layer, bool bottom) -{ - std::array box = {0, nijk[0] -1 , 0, nijk[1] -1 }; - return this->getXYZ_layer(layer, box, bottom); -} - - -std::vector EGrid::get_zcorn_from_disk(int layer, bool bottom) -{ - if (formatted) - throw std::invalid_argument("partial loading of zcorn arrays not possible when using formatted input"); - - std::vector zcorn_layer; - std::fstream fileH; - - int nodes_pr_surf = nijk[0]*nijk[1]*4; - int zcorn_offset = nodes_pr_surf * layer * 2; - - if (bottom) - zcorn_offset+=nodes_pr_surf; - - fileH.open(inputFileName, std::ios::in | std::ios::binary); - - if (!fileH) - throw std::runtime_error("Can not open EGrid file" + this->inputFilename); - - std::string arrName(8,' '); - eclArrType arrType; - int64_t num; - int sizeOfElement; - - uint64_t zcorn_pos = 0; - - while (!isEOF(&fileH)) { - - readBinaryHeader(fileH,arrName,num, arrType, sizeOfElement); - - if (arrName == "ZCORN "){ - zcorn_pos = fileH.tellg(); - break; - } - - uint64_t sizeOfNextArray = sizeOnDiskBinary(num, arrType, sizeOfElement); - fileH.seekg(static_cast(sizeOfNextArray), std::ios_base::cur); - } - - int elements_pr_block = Opm::EclIO::MaxBlockSizeReal / Opm::EclIO::sizeOfReal; - int num_blocks_start = zcorn_offset / elements_pr_block; - - // adding size of zcorn real data before to ignored - uint64_t start_pos = zcorn_pos + Opm::EclIO::sizeOfReal * zcorn_offset; - - // adding size of blocks (head and tail flags) - start_pos = start_pos + (1 + num_blocks_start * 2) * Opm::EclIO::sizeOfInte; - - fileH.seekg(start_pos, std::ios_base::beg); - - uint64_t zcorn_to = zcorn_offset + nodes_pr_surf; - - int i1 = zcorn_offset / 1000 + 1; - uint64_t elemets = static_cast(i1 * elements_pr_block - zcorn_offset); - - uint64_t next_block = elemets < zcorn_to ? elemets : zcorn_to - zcorn_offset + 1 ; - - uint64_t p1 = zcorn_offset; - - while (p1 < zcorn_to){ - - std::vector buf(next_block); - fileH.read(reinterpret_cast(buf.data()), buf.size()*sizeof(float)); - - for (size_t n = 0; n < next_block; n++) - zcorn_layer.push_back(Opm::EclIO::flipEndianFloat(buf[n])); - - p1 = p1 + next_block; - - if (p1 < zcorn_to) { - int dtail; - fileH.read(reinterpret_cast(&dtail), sizeof(dtail)); - fileH.read(reinterpret_cast(&dtail), sizeof(dtail)); - dtail = Opm::EclIO::flipEndianInt(dtail); - - next_block = static_cast(dtail) / static_cast(Opm::EclIO::sizeOfReal); - - if ((p1 + next_block) > zcorn_to) - next_block = zcorn_to - p1; - } - } - - fileH.close(); - - return zcorn_layer; -} - - -void EGrid::getCellCorners(const std::array& ijk, const std::vector& zcorn_layer, - std::array& X, std::array& Y, std::array& Z) -{ - std::vector zind; - std::vector pind; - - // calculate indices for grid pillars in COORD arrray - pind.push_back(ijk[1]*(nijk[0]+1)*6 + ijk[0]*6); - pind.push_back(pind[0] + 6); - pind.push_back(pind[0] + (nijk[0]+1)*6); - pind.push_back(pind[2] + 6); - - // get depths from zcorn array in ZCORN array - zind.push_back(ijk[2]*nijk[0]*nijk[1]*8 + ijk[1]*nijk[0]*4 + ijk[0]*2); - zind.push_back(zind[0] + 1); - zind.push_back(zind[0] + nijk[0]*2); - zind.push_back(zind[2] + 1); - - for (int n = 0; n< 4; n++) - Z[n] = zcorn_layer[zind[n]]; - - for (int n = 0; n < 4; n++) { - double xt; - double yt; - double xb; - double yb; - - double zt = coord_array[pind[n] + 2]; - double zb = coord_array[pind[n] + 5]; - - xt = coord_array[pind[n]]; - yt = coord_array[pind[n] + 1]; - xb = coord_array[pind[n] + 3]; - yb = coord_array[pind[n] + 4]; - - if (zt == zb) { - X[n] = xt; - Y[n] = yt; - } else { - X[n] = xt + (xb-xt) / (zt-zb) * (zt - Z[n]); - Y[n] = yt+(yb-yt)/(zt-zb)*(zt-Z[n]); - } - - } -} - - - -}} // namespace Opm::ecl diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/io/eclipse/EInit.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/io/eclipse/EInit.cpp deleted file mode 100644 index d2af9f3868..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/io/eclipse/EInit.cpp +++ /dev/null @@ -1,196 +0,0 @@ -/* - Copyright 2020 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include -#include - -#include - -namespace Opm { namespace EclIO { - - -EInit::EInit(const std::string &filename) : EclFile(filename) -{ - std::string lgrname; - std::string nncname; - - lgrname = "global"; - - for (size_t n = 0; n < array_name.size(); n++) { - if (array_name[n] == "LGR"){ - auto lgr = this->get(n); - lgrname = lgr[0]; - - if (std::find(lgr_names.begin(), lgr_names.end(), lgrname) == lgr_names.end()){ - lgr_names.push_back(lgrname); - lgr_array_index.push_back({}); - lgr_nijk.push_back({}); - lgr_nactive.push_back(0); - } - } - - if (array_name[n] == "LGRSGONE") - lgrname = "global"; - - if ((lgrname == "global") && (array_name[n] != "LGRSGONE")) - global_array_index[array_name[n]] = n; - - if ((lgrname != "global") && (array_name[n] != "LGRSGONE") && (array_name[n] != "LGR")) - { - auto it = std::find(lgr_names.begin(), lgr_names.end(), lgrname); - size_t ind = std::distance(lgr_names.begin(), it); - lgr_array_index[ind][array_name[n]] = n; - } - - if (array_name[n] == "INTEHEAD") - { - auto inteh = getImpl(n, INTE, inte_array, "integer"); - - if (lgrname == "global") { - global_nijk = {inteh[8], inteh[9], inteh[10]}; - global_nactive = inteh[11]; - } else { - auto it = std::find(lgr_names.begin(), lgr_names.end(), lgrname); - size_t lgr_ind = std::distance(lgr_names.begin(), it); - lgr_nijk[lgr_ind] = {inteh[8], inteh[9], inteh[10]}; - lgr_nactive[lgr_ind] = inteh[11]; - } - } - } -} - - -int EInit::get_array_index(const std::string& name, const std::string& grid_name) const -{ - if (grid_name == "global"){ - if (global_array_index.count(name) == 0) - OPM_THROW(std::runtime_error, "Map key '" + name + "' not found in global_array_index"); - - return global_array_index.at(name); - - } else { - - int lgr_index = get_lgr_index(grid_name); - - if (lgr_array_index[lgr_index].count(name) == 0) - OPM_THROW(std::invalid_argument, "Map key '" + name + "' not found in lgr_array_index"); - - return lgr_array_index[lgr_index].at(name); - } -}; - -int EInit::activeCells(const std::string& grid_name) const -{ - if (grid_name == "global") - return global_nactive; - else - return lgr_nactive[get_lgr_index(grid_name)]; -} - -const std::array& EInit::grid_dimension(const std::string& grid_name) const -{ - if (grid_name == "global") - return global_nijk; - else - return lgr_nijk[get_lgr_index(grid_name)]; -} - -bool EInit::hasLGR(const std::string& name) const{ - if (std::find(lgr_names.begin(), lgr_names.end(), name) == lgr_names.end()) - return false; - else - return true; -} - -int EInit::get_lgr_index(const std::string& grid_name) const -{ - auto it = std::find(lgr_names.begin(), lgr_names.end(), grid_name); - - if (it == lgr_names.end()) { - std::string message = "LGR '" + grid_name + "' not found in init file."; - OPM_THROW(std::invalid_argument, message); - } - - return std::distance(lgr_names.begin(), it); -} - -std::vector EInit::list_arrays(const std::string& grid_name) const -{ - std::vector array_list; - - int lgr_index = this->get_lgr_index(grid_name); - - for (auto const& x : lgr_array_index[lgr_index]) - { - int ind = x.second; - array_list.push_back(std::make_tuple(array_name[ind], array_type[ind], array_size[ind])); - } - - return array_list; -} - -std::vector EInit::list_arrays() const -{ - std::vector array_list; - - for (auto const& x : global_array_index) - { - int ind = x.second; - array_list.push_back(std::make_tuple(array_name[ind], array_type[ind], array_size[ind])); - } - - return array_list; -} - -template -const std::vector& EInit::ImplgetInitData(const std::string& name, const std::string& grid_name) -{ - int arr_ind = get_array_index(name, grid_name); - - if constexpr (std::is_same_v) - return getImpl(arr_ind, INTE, inte_array, "integer"); - - if constexpr (std::is_same_v) - return getImpl(arr_ind, REAL, real_array, "float"); - - if constexpr (std::is_same_v) - return getImpl(arr_ind, DOUB, doub_array, "double"); - - if constexpr (std::is_same_v) - return getImpl(arr_ind, LOGI, logi_array, "bool"); - - if constexpr (std::is_same_v) - { - if (array_type[arr_ind] == Opm::EclIO::CHAR) - return getImpl(arr_ind, array_type[arr_ind], char_array, "char"); - - if (array_type[arr_ind] == Opm::EclIO::C0NN) - return getImpl(arr_ind, array_type[arr_ind], char_array, "c0nn"); - - OPM_THROW(std::runtime_error, "Array not of type CHAR or C0nn"); - } - - OPM_THROW(std::runtime_error, "type not supported"); -} - -template const std::vector& EInit::ImplgetInitData(const std::string& name, const std::string& grid_name); -template const std::vector& EInit::ImplgetInitData(const std::string& name, const std::string& grid_name); -template const std::vector& EInit::ImplgetInitData(const std::string& name, const std::string& grid_name); -template const std::vector& EInit::ImplgetInitData(const std::string& name, const std::string& grid_name); - -}} // namespace Opm::EclIO diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/io/eclipse/ERft.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/io/eclipse/ERft.cpp deleted file mode 100644 index 25045baa71..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/io/eclipse/ERft.cpp +++ /dev/null @@ -1,438 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include - -#include - -#include -#include -#include -#include -#include -#include - -namespace Opm { namespace EclIO { - -ERft::ERft(const std::string &filename) : EclFile(filename) -{ - loadData(); - std::vector first; - - std::vector wellName; - std::vector dates; - - auto listOfArrays = getList(); - - for (size_t i = 0; i < listOfArrays.size(); i++) { - std::string name = std::get<0>(listOfArrays[i]); - - if (name == "TIME") { - first.push_back(i); - auto vect1 = get(i); - timeList.push_back(vect1[0]); - } - - if (name == "DATE") { - auto vect1 = get(i); - RftDate date(vect1[2],vect1[1],vect1[0]); - dateList.insert(date); - dates.push_back(date); - } - - if (name == "WELLETC"){ - auto vect1 = get(i); - wellList.insert(vect1[1]); - wellName.push_back(vect1[1]); - } - } - - for (size_t i = 0; i < first.size(); i++) { - std::tuple range; - if (i == first.size() - 1) { - range = std::make_tuple(first[i], listOfArrays.size()); - } else { - range = std::make_tuple(first[i], first[i+1]); - } - - arrIndexRange[i] = range; - } - - numReports = first.size(); - - for (size_t i = 0; i < wellName.size(); i++) { - std::tuple wellDateTuple = std::make_tuple(wellName[i], dates[i]); - std::tuple wellDateTimeTuple = std::make_tuple(wellName[i], dates[i], timeList[i]); - reportIndices[wellDateTuple] = i; - rftReportList.push_back(wellDateTimeTuple); - } -} - - -bool ERft::hasRft(const std::string& wellName, const RftDate& date) const -{ - return reportIndices.find({wellName, date}) != reportIndices.end(); -} - - -bool ERft::hasRft(const std::string& wellName, int year, int month, int day) const -{ - RftDate date(year, month, day); - return reportIndices.find({wellName,date}) != reportIndices.end(); -} - - -int ERft::getReportIndex(const std::string& wellName, const RftDate& date) const -{ - std::tuple> wellDatePair(wellName, date); - auto rIndIt = reportIndices.find(wellDatePair); - - if (rIndIt == reportIndices.end()) { - int y = std::get<0>(date); - int m = std::get<1>(date); - int d = std::get<2>(date); - - std::string dateStr=std::to_string(y) + "/" + std::to_string(m) + "/" + std::to_string(d); - std::string message="RFT data not found for well " + wellName + " at date: " + dateStr; - OPM_THROW(std::invalid_argument, message); - } - - return rIndIt->second; -} - - -bool ERft::hasArray(const std::string& arrayName, const std::string& wellName, - const RftDate& date) const -{ - int reportInd = getReportIndex(wellName, date); - - auto searchInd = arrIndexRange.find(reportInd); - - int fromInd = std::get<0>(searchInd->second); - int toInd = std::get<1>(searchInd->second); - - auto it = std::find(array_name.begin()+fromInd,array_name.begin()+toInd,arrayName); - return it != array_name.begin() + toInd; -} - - -bool ERft::hasArray(const std::string& arrayName, int reportInd) const -{ - auto searchInd = arrIndexRange.find(reportInd); - - int fromInd = std::get<0>(searchInd->second); - int toInd = std::get<1>(searchInd->second); - - auto it = std::find(array_name.begin()+fromInd,array_name.begin()+toInd,arrayName); - return it != array_name.begin() + toInd; -} - - -int ERft::getArrayIndex(const std::string& name, const std::string& wellName, - const RftDate& date) const -{ - int rInd= getReportIndex(wellName, date); - - auto searchInd = arrIndexRange.find(rInd); - - int fromInd =std::get<0>(searchInd->second); - int toInd = std::get<1>(searchInd->second); - auto it=std::find(array_name.begin()+fromInd,array_name.begin()+toInd,name); - - if (std::distance(array_name.begin(),it) == toInd) { - int y = std::get<0>(date); - int m = std::get<1>(date); - int d = std::get<2>(date); - - std::string dateStr = std::to_string(y) + "/" + std::to_string(m) + "/" + std::to_string(d); - std::string message = "Array " + name + " not found for RFT, well: " + wellName + " date: " + dateStr; - OPM_THROW(std::invalid_argument, message); - } - - return std::distance(array_name.begin(),it); -} - - -int ERft::getArrayIndex(const std::string& name, int reportIndex) const -{ - if ((reportIndex < 0) || (reportIndex >= numReports)) { - std::string message = "Report index " + std::to_string(reportIndex) + " not found in RFT file."; - OPM_THROW(std::invalid_argument, message); - } - - auto searchInd = arrIndexRange.find(reportIndex); - int fromInd =std::get<0>(searchInd->second); - int toInd = std::get<1>(searchInd->second); - - auto it=std::find(array_name.begin() + fromInd,array_name.begin() + toInd,name); - - if (std::distance(array_name.begin(),it) == toInd) { - std::string message = "Array " + name + " not found for RFT, rft report index: " + std::to_string(reportIndex); - OPM_THROW(std::invalid_argument, message); - } - - return std::distance(array_name.begin(),it); -} - - -template<> const std::vector& -ERft::getRft(const std::string& name, const std::string &wellName, - const RftDate& date) const -{ - int arrInd = getArrayIndex(name, wellName, date); - - if (array_type[arrInd] != REAL) { - std::string message = "Array " + name + " found in RFT file for selected date and well, but called with wrong type"; - OPM_THROW(std::runtime_error, message); - } - - auto search_array = real_array.find(arrInd); - return search_array->second; -} - - -template<> const std::vector& -ERft::getRft(const std::string& name, const std::string& wellName, - const RftDate& date) const -{ - int arrInd = getArrayIndex(name, wellName, date); - - if (array_type[arrInd] != DOUB) { - std::string message = "Array " + name + " found in RFT file for selected date and well, but called with wrong type"; - OPM_THROW(std::runtime_error, message); - } - - auto search_array = doub_array.find(arrInd); - return search_array->second; -} - - -template<> const std::vector& -ERft::getRft(const std::string& name, const std::string& wellName, - const RftDate& date) const -{ - int arrInd = getArrayIndex(name, wellName, date); - - if (array_type[arrInd] != INTE) { - std::string message = "Array " + name + " found in RFT file for selected date and well, but called with wrong type"; - OPM_THROW(std::runtime_error, message); - } - - auto search_array = inte_array.find(arrInd); - return search_array->second; -} - - -template<> const std::vector& -ERft::getRft(const std::string& name, const std::string& wellName, - const RftDate& date) const -{ - int arrInd = getArrayIndex(name, wellName, date); - - if (array_type[arrInd] != LOGI) { - std::string message = "Array " + name + " found in RFT file for selected date and well, but called with wrong type"; - OPM_THROW(std::runtime_error, message); - } - - auto search_array = logi_array.find(arrInd); - return search_array->second; -} - - -template<> const std::vector& -ERft::getRft(const std::string& name, const std::string& wellName, - const RftDate& date) const -{ - int arrInd = getArrayIndex(name, wellName, date); - - if (array_type[arrInd] != CHAR) { - std::string message = "Array " + name + " found in RFT file for selected date and well, but called with wrong type"; - OPM_THROW(std::runtime_error, message); - } - - auto search_array = char_array.find(arrInd); - return search_array->second; -} - - -template<> const std::vector& -ERft::getRft(const std::string& name, const std::string& wellName, - int year, int month, int day) const -{ - return getRft(name, wellName, RftDate{year, month, day}); -} - - -template<> const std::vector& -ERft::getRft(const std::string& name, const std::string& wellName, - int year, int month, int day) const -{ - return getRft(name, wellName, RftDate{year, month, day}); -} - - -template<> const std::vector& -ERft::getRft(const std::string& name, const std::string& wellName, - int year, int month, int day) const -{ - return getRft(name, wellName, RftDate{year, month, day}); -} - - -template<> const std::vector& -ERft::getRft(const std::string& name, const std::string& wellName, - int year, int month, int day) const -{ - return getRft(name, wellName, RftDate{year, month, day}); -} - - -template<> const std::vector& -ERft::getRft(const std::string& name, const std::string& wellName, - int year, int month, int day) const -{ - return getRft(name, wellName, RftDate{year, month, day}); -} - - -template<> const std::vector& -ERft::getRft(const std::string& name, int reportIndex) const -{ - int arrInd = getArrayIndex(name, reportIndex); - - if (array_type[arrInd] != REAL) { - std::string message = "Array " + name + " found in RFT file for selected report, but called with wrong type"; - OPM_THROW(std::runtime_error, message); - } - - auto search_array = real_array.find(arrInd); - return search_array->second; -} - - -template<> const std::vector& -ERft::getRft(const std::string& name, int reportIndex) const -{ - int arrInd = getArrayIndex(name, reportIndex); - - if (array_type[arrInd] != DOUB) { - std::string message = "Array " + name + " !!found in RFT file for selected report, but called with wrong type"; - OPM_THROW(std::runtime_error, message); - } - - auto search_array = doub_array.find(arrInd); - return search_array->second; -} - - -template<> const std::vector& -ERft::getRft(const std::string& name, int reportIndex) const -{ - int arrInd = getArrayIndex(name, reportIndex); - - if (array_type[arrInd] != INTE) { - std::string message = "Array " + name + " !!found in RFT file for selected report, but called with wrong type"; - OPM_THROW(std::runtime_error, message); - } - - auto search_array = inte_array.find(arrInd); - return search_array->second; -} - - -template<> const std::vector& -ERft::getRft(const std::string& name, int reportIndex) const -{ - int arrInd = getArrayIndex(name, reportIndex); - - if (array_type[arrInd] != LOGI) { - std::string message = "Array " + name + " !!found in RFT file for selected report, but called with wrong type"; - OPM_THROW(std::runtime_error, message); - } - - auto search_array = logi_array.find(arrInd); - return search_array->second; -} - - -template<> const std::vector& -ERft::getRft(const std::string& name, int reportIndex) const -{ - int arrInd = getArrayIndex(name, reportIndex); - - if (array_type[arrInd] != CHAR) { - std::string message = "Array " + name + " !!found in RFT file for selected report, but called with wrong type"; - OPM_THROW(std::runtime_error, message); - } - - auto search_array = char_array.find(arrInd); - return search_array->second; -} - - -std::vector ERft::listOfRftArrays(int reportIndex) const -{ - if ((reportIndex < 0) || (reportIndex >= numReports)) { - std::string message = "Report index " + std::to_string(reportIndex) + " not found in RFT file."; - OPM_THROW(std::invalid_argument, message); - } - - std::vector list; - auto searchInd = arrIndexRange.find(reportIndex); - - for (int i = std::get<0>(searchInd->second); i < std::get<1>(searchInd->second); i++) { - list.emplace_back(array_name[i], array_type[i], array_size[i]); - } - - return list; -} - -std::vector ERft::listOfRftArrays(const std::string& wellName, - const RftDate& date) const -{ - std::vector list; - int rInd = getReportIndex(wellName, date); - - auto searchInd = arrIndexRange.find(rInd); - for (int i = std::get<0>(searchInd->second); i < std::get<1>(searchInd->second); i++) { - list.emplace_back(array_name[i], array_type[i], array_size[i]); - } - - return list; -} - - -std::vector ERft::listOfRftArrays(const std::string& wellName, - int year, int month, int day) const -{ - return listOfRftArrays(wellName, RftDate{year, month, day}); -} - - -std::vector ERft::listOfWells() const -{ - return { this->wellList.begin(), this->wellList.end() }; -} - - -std::vector ERft::listOfdates() const -{ - return { this->dateList.begin(), this->dateList.end() }; -} - -}} // namespace Opm::ecl diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/io/eclipse/ERsm.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/io/eclipse/ERsm.cpp deleted file mode 100644 index 86e30ae71a..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/io/eclipse/ERsm.cpp +++ /dev/null @@ -1,338 +0,0 @@ -/* - Copyright 2020 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - - -#include -#include -#include -#include - -#include - -#include -#include -#include -#include -#include -#include - -namespace Opm { -namespace EclIO { - -namespace { - -constexpr std::size_t num_columns = 10; -constexpr std::size_t column_width = 13; - - -std::deque load(const std::string& fname) { - std::deque lines; - std::ifstream is(fname.c_str()); - if (!is.good()) - throw std::invalid_argument("Can not open: " + fname + " for reading"); - - std::string line; - while(std::getline(is, line)) { - if (line.back() == '\r') - lines.push_back(line.substr(0, line.size() - 1)); - else - lines.push_back(line); - } - - return lines; -} - -std::vector split_line(const std::string& line) { - std::vector tokens; - for (std::size_t column = 0; column < num_columns; column++) { - if (column * column_width >= line.size()) - break; - tokens.push_back( trim_copy(line.substr(column*column_width, column_width) )); - } - return tokens; -} - - -bool block_start(const std::string& line) { - if (line.empty()) - return false; - - if (line[0] != '1') - return false; - - if (line.find_first_not_of(' ', 1) != std::string::npos) - return false; - - return true; -} - -std::string pop_return(std::deque& lines) { - auto front = lines.front(); - lines.pop_front(); - return front; -} - -void pop_separator(std::deque& lines) { - lines.pop_front(); -} - -int make_num(const std::string& nums_string) { - if (nums_string.empty()) - return 0; - - return std::stoi(nums_string); -} - -TimeStampUTC make_timestamp(const std::string& date_string) { - const auto& month_index = TimeService ::eclipseMonthIndices(); - auto dash_pos1 = date_string.find('-'); - auto dash_pos2 = date_string.rfind('-'); - auto day = std::stoi( date_string.substr(0, dash_pos1 ) ); - auto year = std::stoi( date_string.substr(dash_pos2 + 1) ); - auto month_name = date_string.substr( dash_pos1 + 1, 3); - - return TimeStampUTC(year, month_index.at(month_name), day); -} - - -/* - The multiplier line is optional; so when looking for the multiplier line in - the text we must make sure that line we are looking at is not the WGNAMES line - - including the possibility of a totally empty WGNAMES line. -*/ -std::vector make_multiplier(std::deque& lines) { - std::vector multiplier = {1,1,1,1,1,1,1,1,1,1}; - if (lines.front().find_first_not_of("-0123456789* ") != std::string::npos) - return multiplier; - - if (lines.front().find_first_not_of(" ") == std::string::npos) - return multiplier; - - auto mult_list = split_line(pop_return(lines)); - for (std::size_t index=0; index < mult_list.size(); index++) { - const auto& mult_string = mult_list[index]; - if (mult_string.empty()) - continue; - - auto power_pos = mult_string.find("**"); - if (power_pos == std::string::npos) - throw std::invalid_argument("Multiplier item wrong format: " + mult_string); - - double power = std::stod(mult_string.c_str() + power_pos + 2); - multiplier[index] = std::pow(10, power); - } - - return multiplier; -} -} - -void ERsm::load_block(std::deque& lines, std::size_t& vector_length) { - if (!block_start(lines.front())) - throw std::invalid_argument("Block should start with '1' in first column"); - - lines.pop_front(); - pop_separator(lines); - lines.pop_front(); - pop_separator(lines); - - auto kw_list = split_line(pop_return(lines)); - auto unit_list = split_line(pop_return(lines)); - auto mult_list = make_multiplier(lines); - auto wgnames = split_line(pop_return(lines)); - auto nums_list = split_line(pop_return(lines)); - pop_separator(lines); - std::size_t num_rows = std::count_if(kw_list.begin(), kw_list.end(), [](const std::string& kw) { return !kw.empty();}) - 1; - - if (vector_length == 0) { - if (kw_list[0] == "DATE") - this->time = std::vector(); - else if (kw_list[0] == "TIME") { - if (unit_list[0] != "DAYS") - throw std::invalid_argument("Only days is supported as time unit"); - this->time = std::vector(); - } - else - throw std::invalid_argument("The first column must be DATE or TIME"); - } - - std::vector block_data; - for (std::size_t kw_index = 1; kw_index < kw_list.size(); kw_index++) { - auto node = SummaryNode{ kw_list[kw_index], - SummaryNode::category_from_keyword(kw_list[kw_index]), - SummaryNode::Type::Undefined, - wgnames[kw_index], - make_num(nums_list[kw_index]), - ""}; - block_data.emplace_back( node, vector_length ); - } - - std::size_t block_size = 0; - while (true) { - if (lines.empty()) - break; - - if (block_start(lines.front())) - break; - - auto data_row = split_line(pop_return(lines)); - for (std::size_t data_index = 0; data_index < num_rows; data_index++) { - double value = std::stod(data_row[data_index + 1]) * mult_list[data_index + 1]; - block_data[data_index].data.push_back(value); - } - - if (vector_length == 0) { - if (std::holds_alternative>(this->time)) { - double d = std::stod(data_row[0]) * mult_list[0]; - std::get>( this->time ).push_back( d ); - } else { - TimeStampUTC ts = make_timestamp(data_row[0]); - std::get>( this->time ).push_back( ts ); - } - } - block_size += 1; - } - if (vector_length == 0) - vector_length = block_size; - - if (vector_length != block_size) - throw std::invalid_argument("Block size error"); - - for (auto& v : block_data) - this->vectors.insert(std::make_pair( v.header.unique_key(), std::move(v))); -} - - -const std::vector& ERsm::dates() const { - if (std::holds_alternative>(this->time)) - throw std::invalid_argument("This ERsm instance has time given as days"); - - return std::get>( this->time ); -} - -const std::vector& ERsm::days() const { - if (!std::holds_alternative>(this->time)) - throw std::invalid_argument("This ERsm instance has time given as dates"); - - return std::get>( this->time ); -} - -const std::vector& ERsm::get(const std::string& key) const { - const auto& vector = this->vectors.at(key); - return vector.data; -} - -bool ERsm::has_dates() const { - return std::holds_alternative>(this->time); -} - -bool ERsm::has(const std::string& key) const { - return this->vectors.count(key) == 1; -} - -ERsm::ERsm(const std::string& fname) { - auto lines = load(fname); - std::size_t vector_length = 0; - while (!lines.empty()) - load_block(lines, vector_length); -} - - - -bool cmp(const ESmry& smry, const ERsm& rsm) { - const auto& summary_dates = smry.dates(); - if (rsm.has_dates()) { - const auto& rsm_dates = rsm.dates(); - if (rsm_dates.size() != summary_dates.size()) { - fmt::print(stderr, "len(summary) = {} len(rsm) = {}", summary_dates.size(), rsm_dates.size()); - return false; - } - - for (std::size_t time_index = 0; time_index < rsm_dates.size(); time_index++) { - const auto smry_ts = TimeStampUTC( std::chrono::system_clock::to_time_t(summary_dates[time_index]) ); - const auto rsm_ts = rsm_dates[time_index]; - - if (smry_ts.year() != rsm_ts.year()) { - fmt::print(stderr, "time_index: {} summary.year: {} rsm.year: {}", time_index, smry_ts.year(), rsm_ts.year()); - return false; - } - - if (smry_ts.month() != rsm_ts.month()) { - fmt::print(stderr, "time_index: {} summary.month: {} rsm.month: {}", time_index, smry_ts.month(), rsm_ts.month()); - return false; - } - - if (smry_ts.day() != rsm_ts.day()) { - fmt::print(stderr, "time_index: {} summary.day: {} rsm.day: {}", time_index, smry_ts.day(), rsm_ts.day()); - return false; - } - } - } else { - const auto& rsm_days = rsm.days(); - if (rsm_days.size() != summary_dates.size()) - return false; - - for (std::size_t time_index = 0; time_index < rsm_days.size(); time_index++) { - auto smry_days = std::chrono::duration_cast(summary_dates[time_index] - summary_dates[0]).count() / 86400.0 ; - - if (!cmp::scalar_equal(smry_days, rsm_days[time_index])) { - fmt::print(stderr, "time_index: {} summary.days: {} rsm.days: {}", time_index, smry_days, rsm_days[time_index]); - return false; - } - } - } - - for (const auto& node : smry.summaryNodeList()) { - const auto& key = node.unique_key(); - - if (key == "TIME") - continue; - - if (key == "DAY") - continue; - - if (key == "MONTH") - continue; - - if (key == "YEAR") - continue; - - /* - The ESmry class and the ERsm class treat block vector keys - differently, the ESmry class uses only the key Bxxx:i,j,k whereas the - ERsm class uses only the key Bxxxx:g. Therefor the ESmry lookup is - based on nodes, whereas the ERsm lookup is based on key. - */ - const auto& smry_vector = smry.get(node); - const auto& rsm_vector = rsm.get(key); - for (std::size_t index = 0; index < smry_vector.size(); index++) { - const double eps = 5e-5; - const double diff = static_cast(smry_vector[index]) - rsm_vector[index]; - const double sum = std::fabs(static_cast(smry_vector[index])) + std::fabs(rsm_vector[index]); - - if (diff > eps * sum) { - fmt::print(stderr, "time_index: {} key: {} summary: {} rsm: {}", index, key, smry_vector[index], rsm_vector[index]); - return false; - } - } - } - - return true; -} - -} -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/io/eclipse/ERst.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/io/eclipse/ERst.cpp deleted file mode 100644 index 268a3f7a45..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/io/eclipse/ERst.cpp +++ /dev/null @@ -1,430 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. -#include - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include - - -namespace { - int seqnumFromSeparateFilename(const std::string& filename) - { - const auto re = std::regex { - R"~(\.[FX]([0-9]{4})$)~" - }; - - auto match = std::smatch{}; - if (std::regex_search(filename, match, re)) { - return std::stoi(match[1]); - } - - throw std::invalid_argument { - "Unable to Determine Report Step Sequence Number " - "From Restart Filename \"" + filename + '"' - }; - } -} - - -namespace Opm { namespace EclIO { - -ERst::ERst(const std::string& filename) - : EclFile(filename) -{ - if (this->hasKey("SEQNUM")) { - this->initUnified(); - } - else { - this->initSeparate(seqnumFromSeparateFilename(filename)); - } -} - - -bool ERst::hasReportStepNumber(int number) const -{ - auto search = arrIndexRange.find(number); - return search != arrIndexRange.end(); -} - - -void ERst::loadReportStepNumber(int number) -{ - if (!hasReportStepNumber(number)) { - std::string message="Trying to load non existing report step number " + std::to_string(number); - OPM_THROW(std::invalid_argument, message); - } - - std::vector arrayIndexList; - arrayIndexList.reserve(arrIndexRange.at(number).second - arrIndexRange.at(number).first + 1); - - for (int i = arrIndexRange.at(number).first; i < arrIndexRange.at(number).second; i++) { - arrayIndexList.push_back(i); - } - - loadData(arrayIndexList); - - reportLoaded[number] = true; -} - - -std::vector ERst::listOfRstArrays(int reportStepNumber) -{ - return this->listOfRstArrays(reportStepNumber, "global"); -} - - -std::vector ERst::listOfRstArrays(int reportStepNumber, const std::string& lgr_name) -{ - std::vector list; - - if (!hasReportStepNumber(reportStepNumber)) { - std::string message = "Trying to get list of arrays from non existing report step number " + std::to_string(reportStepNumber); - OPM_THROW(std::invalid_argument, message); - } - - if ((lgr_name != "global") && (!this->hasLGR(lgr_name, reportStepNumber))) { - std::string message = "Trying to get list of arrays from non existing LGR " + lgr_name; - OPM_THROW(std::invalid_argument, message); - } - - std::string lgr_name_upper = lgr_name; - std::transform(lgr_name_upper.begin(), lgr_name_upper.end(),lgr_name_upper.begin(), ::toupper); - - int start_ind_lgr; - std::string last_array_name; - - if ((lgr_name == "") or (lgr_name_upper == "GLOBAL")){ - auto rng = this->arrIndexRange.at(reportStepNumber); - start_ind_lgr = std::get<0>(rng); - - // if keyword LGR not found, loop will be stopped with keyword SEQNUM (next report step) - // or last array (end of file) - // Opm flow can have extra keywords after ENDSOL, which maks ENDSOL - // not usable for a global arrays end signal. - - last_array_name = "LGR"; - } else { - start_ind_lgr = get_start_index_lgrname(reportStepNumber, lgr_name); - last_array_name = "ENDLGR"; - } - - int n = start_ind_lgr; - list.emplace_back(array_name[n], array_type[n], array_size[n]); - - do { - n++; - - if ((array_name[n] != "SEQNUM") && (array_name[n] != "LGR")) - list.emplace_back(array_name[n], array_type[n], array_size[n]); - - } while ((array_name[n] != "SEQNUM") && (array_name[n] != last_array_name) && (n < static_cast(array_name.size()) -1 )); - - return list; -} - - -int ERst::occurrence_count(const std::string& name, int reportStepNumber) const -{ - if (!hasReportStepNumber(reportStepNumber)) { - std::string message = "Trying to count vectors of name " + name + " from non existing sequence " + std::to_string(reportStepNumber); - OPM_THROW(std::invalid_argument, message); - } - - int count = 0; - - auto range_it = arrIndexRange.find(reportStepNumber); - - std::pair indexRange = range_it->second; - - for (int i=std::get<0>(indexRange); i(indexRange);i++){ - if (array_name[i] == name){ - count++; - } - } - - return count; -} - -void ERst::initUnified() -{ - loadData("SEQNUM"); - - std::vector firstIndex; - - for (size_t i = 0; i < array_name.size(); i++) { - if (array_name[i] == "SEQNUM") { - auto seqn = get(i); - seqnum.push_back(seqn[0]); - firstIndex.push_back(i); - lgr_names.push_back({}); - } - - if (array_name[i] == "LGRNAMES") { - auto names = getImpl(i, CHAR, char_array, "string"); - lgr_names[seqnum.size() -1 ] = names; - } - } - - for (size_t i = 0; i < seqnum.size(); i++) { - std::pair range; - range.first = firstIndex[i]; - - if (i != seqnum.size() - 1) { - range.second = firstIndex[i+1]; - } else { - range.second = array_name.size(); - } - - arrIndexRange[seqnum[i]] = range; - } - - nReports = seqnum.size(); - - for (int i = 0; i < nReports; i++) { - reportLoaded[seqnum[i]] = false; - } -} - -bool ERst::hasLGR(const std::string& gridname, int reportStepNumber) const -{ - if (!hasReportStepNumber(reportStepNumber)) { - std::string message = "Checking for LGR name in non existing sequence " + std::to_string(reportStepNumber); - OPM_THROW(std::invalid_argument, message); - } - - auto it_seqnum = std::find(seqnum.begin(), seqnum.end(), reportStepNumber); - int report_index = std::distance(seqnum.begin(), it_seqnum); - auto it_lgrname = std::find(lgr_names[report_index].begin(), lgr_names[report_index].end(), gridname); - - return (it_lgrname != lgr_names[report_index].end()); -} - - -void ERst::initSeparate(const int number) -{ - auto& range = this->arrIndexRange[number]; - range.first = 0; - range.second = static_cast(this->array_name.size()); - - this->seqnum.assign(1, number); - this->nReports = 1; - this->reportLoaded[number] = false; - this->lgr_names.push_back({}); - - for (int i = range.first; i < range.second; i++) { - if (array_name[i] == "LGRNAMES") { - auto names = getImpl(i, CHAR, char_array, "string"); - lgr_names[0] = names; - } - } -} - -int ERst::get_start_index_lgrname(int number, const std::string& lgr_name) -{ - if (!hasReportStepNumber(number)) { - std::string message = "Trying to get a restart vector from non report step " + std::to_string(number); - OPM_THROW(std::invalid_argument, message); - } - - auto range_it = arrIndexRange.find(number); - std::pair indexRange = range_it->second; - int start_ind_lgr = -1; - - for (int n = indexRange.first; n < indexRange.second; n++) { - if (array_name[n] == "LGR") { - auto arr = getImpl(n, CHAR, char_array, "string"); - if (arr[0] == lgr_name) - start_ind_lgr = n; - } - } - - if (start_ind_lgr == -1){ - std::string message = "LGR '" + lgr_name + "'not found in restart file"; - OPM_THROW(std::runtime_error, message); - } - - return start_ind_lgr; -} - -std::tuple ERst::getIndexRange(int reportStepNumber) const { - - if (!hasReportStepNumber(reportStepNumber)) { - std::string message = "Trying to get index range for non existing sequence " + std::to_string(reportStepNumber); - OPM_THROW(std::invalid_argument, message); - } - - auto range_it = arrIndexRange.find(reportStepNumber); - - return range_it->second; -} - -int ERst::getArrayIndex(const std::string& name, int number, int occurrenc) -{ - if (!hasReportStepNumber(number)) { - std::string message = "Trying to get vector " + name + " from non existing sequence " + std::to_string(number); - OPM_THROW(std::invalid_argument, message); - } - - - auto range_it = arrIndexRange.find(number); - - std::pair indexRange = range_it->second; - - auto it = std::find(array_name.begin() + indexRange.first, - array_name.begin() + indexRange.second, name); - - for (int t = 0; t < occurrenc; t++){ - it = std::find(it + 1 , array_name.begin() + indexRange.second, name); - } - - if (std::distance(array_name.begin(),it) == indexRange.second) { - std::string message = "Array " + name + " not found in sequence " + std::to_string(number); - OPM_THROW(std::runtime_error, message); - } - - return std::distance(array_name.begin(), it); -} - -int ERst::getArrayIndex(const std::string& name, int number, const std::string& lgr_name) -{ - auto range_it = arrIndexRange.find(number); - std::pair indexRange = range_it->second; - - int start_ind_lgr = get_start_index_lgrname(number, lgr_name); - - auto it = std::find(array_name.begin() + start_ind_lgr, - array_name.begin() + indexRange.second, name); - - if (std::distance(array_name.begin(),it) == indexRange.second) { - std::string message = "Array " + name + " not found for " + lgr_name; - OPM_THROW(std::runtime_error, message); - } - - return std::distance(array_name.begin(), it); -} - - -std::streampos -ERst::restartStepWritePosition(const int seqnumValue) const -{ - auto pos = this->arrIndexRange.lower_bound(seqnumValue); - - return (pos == this->arrIndexRange.end()) - ? std::streampos(std::streamoff(-1)) - : this->seekPosition(pos->second.first); -} - -template<> -const std::vector& ERst::getRestartData(const std::string& name, int reportStepNumber, int occurrence) -{ - int ind = getArrayIndex(name, reportStepNumber, occurrence); - return getImpl(ind, INTE, inte_array, "integer"); -} - -template<> -const std::vector& ERst::getRestartData(const std::string& name, int reportStepNumber, int occurrence) -{ - int ind = getArrayIndex(name, reportStepNumber, occurrence); - return getImpl(ind, REAL, real_array, "float"); -} - -template<> -const std::vector& ERst::getRestartData(const std::string& name, int reportStepNumber, int occurrence) -{ - int ind = getArrayIndex(name, reportStepNumber, occurrence); - return getImpl(ind, DOUB, doub_array, "double"); -} - -template<> -const std::vector& ERst::getRestartData(const std::string& name, int reportStepNumber, int occurrence) -{ - int ind = getArrayIndex(name, reportStepNumber, occurrence); - return getImpl(ind, LOGI, logi_array, "bool"); -} - -template<> -const std::vector& ERst::getRestartData(const std::string& name, int reportStepNumber, int occurrence) -{ - int ind = getArrayIndex(name, reportStepNumber, occurrence); - return getImpl(ind, CHAR, char_array, "string"); -} - -template<> -const std::vector& ERst::getRestartData(const std::string& name, int reportStepNumber,const std::string& lgr_name) -{ - int ind = getArrayIndex(name, reportStepNumber, lgr_name); - return getImpl(ind, REAL, real_array, "float"); -} - -template<> -const std::vector& ERst::getRestartData(const std::string& name, int reportStepNumber,const std::string& lgr_name) -{ - int ind = getArrayIndex(name, reportStepNumber, lgr_name); - return getImpl(ind, DOUB, doub_array, "double"); -} - -template<> -const std::vector& ERst::getRestartData(const std::string& name, int reportStepNumber,const std::string& lgr_name) -{ - int ind = getArrayIndex(name, reportStepNumber, lgr_name); - return getImpl(ind, INTE, inte_array, "int"); -} - -template<> -const std::vector& ERst::getRestartData(const std::string& name, int reportStepNumber,const std::string& lgr_name) -{ - int ind = getArrayIndex(name, reportStepNumber, lgr_name); - return getImpl(ind, LOGI, logi_array, "bool"); -} - -template<> -const std::vector& ERst::getRestartData(const std::string& name, int reportStepNumber,const std::string& lgr_name) -{ - int ind = getArrayIndex(name, reportStepNumber, lgr_name); - return getImpl(ind, CHAR, char_array, "char"); -} - -template -const std::vector& ERst::getRestartData(int index, int reportStepNumber, const std::string& lgr_name) -{ - auto indRange = this->getIndexRange(reportStepNumber); - - if ((std::get<0>(indRange) + index) > std::get<1>(indRange)) - OPM_THROW(std::invalid_argument, "getRestartData, index out of range"); - - int start_ind = get_start_index_lgrname(reportStepNumber, lgr_name); - return this->get(index + start_ind); -} - -template const std::vector& ERst::getRestartData(int index, int reportStepNumber, const std::string& lgr_name); -template const std::vector& ERst::getRestartData(int index, int reportStepNumber, const std::string& lgr_name); -template const std::vector& ERst::getRestartData(int index, int reportStepNumber, const std::string& lgr_name); -template const std::vector& ERst::getRestartData(int index, int reportStepNumber, const std::string& lgr_name); -template const std::vector& ERst::getRestartData(int index, int reportStepNumber, const std::string& lgr_name); - -}} // namespace Opm::ecl diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/io/eclipse/ESmry.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/io/eclipse/ESmry.cpp deleted file mode 100644 index feb71521b6..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/io/eclipse/ESmry.cpp +++ /dev/null @@ -1,1300 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include - -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - - -#ifdef _WIN32 -#include "cross-platform/windows/Substitutes.hpp" -#else -#include -#endif - -#include - -/* - - KEYWORDS WGNAMES NUMS | PARAM index Corresponding ERT key - ---------------------------------------------------+-------------------------------------------------- - WGOR OP_1 0 | 0 WGOR:OP_1 - FOPT :+:+:+:+ 0 | 1 FOPT - WWCT OP_1 0 | 2 WWCT:OP_1 - WIR OP_1 0 | 3 WIR:OP_1 - WGOR WI_1 0 | 4 WWCT:OP_1 - WWCT W1_1 0 | 5 WWCT:WI_1 - BPR :+:+:+:+ 12675 | 6 BPR:12675, BPR:i,j,k - RPR :+:+:+:+ 1 | 7 RPR:1 - FOPT :+:+:+:+ 0 | 8 FOPT - GGPR NORTH 0 | 9 GGPR:NORTH - COPR OP_1 5628 | 10 COPR:OP_1:56286, COPR:OP_1:i,j,k - RXF :+:+:+:+ R1 + 32768*(R2 + 10) | 11 RXF:2-3 - SOFX OP_1 12675 | 12 SOFX:OP_1:12675, SOFX:OP_1:i,j,jk - AAQX :+:+:+:+ 12 | 13 AAQX:12 - -*/ - - -namespace { - -Opm::time_point make_date(const std::vector& datetime) { - auto day = datetime[0]; - auto month = datetime[1]; - auto year = datetime[2]; - auto hour = 0; - auto minute = 0; - auto second = 0; - - if (datetime.size() == 6) { - hour = datetime[3]; - minute = datetime[4]; - auto total_usec = datetime[5]; - second = total_usec / 1000000; - } - - - const auto ts = Opm::TimeStampUTC{ Opm::TimeStampUTC::YMD{ year, month, day}}.hour(hour).minutes(minute).seconds(second); - return Opm::TimeService::from_time_t( Opm::asTimeT(ts) ); -} - - -} - - -namespace Opm { namespace EclIO { - -ESmry::ESmry(const std::string &filename, bool loadBaseRunData) : - inputFileName { filename }, - summaryNodes { } -{ - fromSingleRun = !loadBaseRunData; - - Opm::filesystem::path rootName = inputFileName.parent_path() / inputFileName.stem(); - - // if only root name (without any extension) given as first argument in constructor - // binary will then be assumed - - if (inputFileName.extension()=="") - inputFileName+=".SMSPEC"; - - if ((inputFileName.extension()!=".SMSPEC") && (inputFileName.extension()!=".FSMSPEC")) - throw std::invalid_argument("Input file should have extension .SMSPEC or .FSMSPEC"); - - const bool formatted = inputFileName.extension()==".SMSPEC" ? false : true; - formattedFiles.push_back(formatted); - - Opm::filesystem::path path = Opm::filesystem::current_path(); - - updatePathAndRootName(path, rootName); - - Opm::filesystem::path smspec_file = path / rootName; - smspec_file += inputFileName.extension(); - - Opm::filesystem::path rstRootN; - Opm::filesystem::path pathRstFile = path; - - std::set keywList; - std::vector> smryArray; - - const std::unordered_set segmentExceptions { - "SEPARATE", - "STEPTYPE", - "SUMTHIN", - } ; - - std::vector smspecList; - std::vector vectList = {"DIMENS", "RESTART", "KEYWORDS", "NUMS", "UNITS"}; - - // Read data from the summary into local data members. - { - smspecList.emplace_back(smspec_file.string()); - - auto arrays = smspecList.back().getList(); - std::vector vectIndices; - - for (size_t n = 0; n < arrays.size(); n++) - if(std::find(vectList.begin(), vectList.end(), std::get<0>(arrays[n])) != vectList.end()) - vectIndices.push_back(static_cast(n)); - - smspecList.back().loadData(vectIndices); - - const std::vector dimens = smspecList.back().get("DIMENS"); - - nI = dimens[1]; // This is correct -- dimens[0] is something else! - nJ = dimens[2]; - nK = dimens[3]; - - const std::vector restartArray = smspecList.back().get("RESTART"); - const std::vector keywords = smspecList.back().get("KEYWORDS"); - std::vector wgnames; - - if (smspecList.back().hasKey("WGNAMES")) - wgnames = smspecList.back().get("WGNAMES"); - else - wgnames = smspecList.back().get("NAMES"); - - const std::vector nums = smspecList.back().get("NUMS"); - const std::vector units = smspecList.back().get("UNITS"); - - std::vector lgrs; - std::vector numlx; - std::vector numly; - std::vector numlz; - - if (smspecList.back().hasKey("LGRS")) lgrs = smspecList.back().get("LGRS"); - if (smspecList.back().hasKey("NUMLX")) numlx = smspecList.back().get("NUMLX"); - if (smspecList.back().hasKey("NUMLY")) numly = smspecList.back().get("NUMLY"); - if (smspecList.back().hasKey("NUMLZ")) numlz = smspecList.back().get("NUMLZ"); - - std::vector combindKeyList; - combindKeyList.reserve(dimens[0]); - - this->startdat = make_date(smspecList.back().get("STARTDAT")); - - for (unsigned int i=0; i vectIndices; - - for (size_t n = 0; n < arrays.size(); n++) - if(std::find(vectList.begin(), vectList.end(), std::get<0>(arrays[n])) != vectList.end()) - vectIndices.push_back(static_cast(n)); - - smspecList.back().loadData(vectIndices); - - const std::vector dimens = smspecList.back().get("DIMENS"); - const std::vector restartArray = smspecList.back().get("RESTART"); - const std::vector keywords = smspecList.back().get("KEYWORDS"); - std::vector wgnames; - - if (smspecList.back().hasKey("WGNAMES")) - wgnames = smspecList.back().get("WGNAMES"); - else - wgnames = smspecList.back().get("NAMES"); - - const std::vector nums = smspecList.back().get("NUMS"); - const std::vector units = smspecList.back().get("UNITS"); - - std::vector lgrs; - std::vector numlx; - std::vector numly; - std::vector numlz; - - if (smspecList.back().hasKey("LGRS")) lgrs = smspecList.back().get("LGRS"); - if (smspecList.back().hasKey("NUMLX")) numlx = smspecList.back().get("NUMLX"); - if (smspecList.back().hasKey("NUMLY")) numly = smspecList.back().get("NUMLY"); - if (smspecList.back().hasKey("NUMLZ")) numlz = smspecList.back().get("NUMLZ"); - - std::vector combindKeyList; - combindKeyList.reserve(dimens[0]); - - this->startdat = make_date(smspecList.back().get("STARTDAT")); - - for (size_t i = 0; i < keywords.size(); i++) { - - std::string lgrName; - int lgri = -1; - int lgrj = -1; - int lgrk = -1; - - if (i < lgrs.size()) lgrName = lgrs[i]; - if (i < numlx.size()) lgri = numlx[i]; - if (i < numly.size()) lgrj = numly[i]; - if (i < numlz.size()) lgrk = numlz[i]; - - const std::string keyString = makeKeyString(keywords[i], wgnames[i], nums[i]); - combindKeyList.push_back(keyString); - - if (! keyString.empty()) { - summaryNodes.push_back({ - keywords[i], - SummaryNode::category_from_keyword(keywords[i], segmentExceptions), - SummaryNode::Type::Undefined, - wgnames[i], - nums[i], - lgrName, - lgri, - lgrj, - lgrk, - i, - "" - }); - - keywList.insert(keyString); - kwunits[keyString] = units[i]; - } - } - - smryArray.push_back({rstFile.string(),dimens[5]}); - keywordListSpecFile.push_back(combindKeyList); - formattedFiles.push_back(baseRunFmt); - getRstString(restartArray, pathRstFile, rstRootN); - } - - nSpecFiles = static_cast(smryArray.size()); - nParamsSpecFile.resize(nSpecFiles, 0); - - // arrayPos std::vector of std::map, mapping position in summary file[n] - for (int i = 0; i < nSpecFiles; i++) - arrayPos.push_back({}); - - std::map keyIndex; - { - size_t m = 0; - for (auto key : keywList) - keyIndex[key] = m++; - } - - int specInd = nSpecFiles - 1; - - while (specInd >= 0){ - - auto smry = smryArray[specInd]; - - const std::vector dimens = smspecList[specInd].get("DIMENS"); - - nI = dimens[1]; - nJ = dimens[2]; - nK = dimens[3]; - - nParamsSpecFile[specInd] = dimens[0]; - - const std::vector keywords = smspecList[specInd].get("KEYWORDS"); - std::vector wgnames; - - if (smspecList.back().hasKey("WGNAMES")) - wgnames = smspecList.back().get("WGNAMES"); - else - wgnames = smspecList.back().get("NAMES"); - - const std::vector nums = smspecList[specInd].get("NUMS"); - - for (size_t i=0; i < keywords.size(); i++) { - const std::string keyw = makeKeyString(keywords[i], wgnames[i], nums[i]); - - if (keywList.find(keyw) != keywList.end()) - arrayPos[specInd][keyIndex[keyw]]=i; - } - - specInd--; - } - - int fromReportStepNumber = 0; - int toReportStepNumber; - int step = 0; - specInd = nSpecFiles - 1; - nVect = keywList.size(); - - int index = 0; - for (const auto& keyw : keywList){ - keyword.push_back(keyw); - keyword_index[keyw] = index++; - } - - vectorData.reserve(nVect); - vectorLoaded.reserve(nVect); - - for (size_t n = 0; n < nVect; n ++){ - vectorData.push_back({}); - vectorLoaded.push_back(false); - } - - - int dataFileIndex = -1; - - while (specInd >= 0) { - - int reportStepNumber = fromReportStepNumber; - - if (specInd > 0) { - auto rstFrom = smryArray[specInd-1]; - toReportStepNumber = std::get<1>(rstFrom); - } else { - toReportStepNumber = std::numeric_limits::max(); - } - - Opm::filesystem::path smspecFile(std::get<0>(smryArray[specInd])); - rootName = smspecFile.parent_path() / smspecFile.stem(); - - // check if multiple or unified result files should be used - // to import data, no information in smspec file regarding this - // if both unified and non-unified files exists, will use most recent based on - // time stamp - - Opm::filesystem::path unsmryFile = rootName; - - unsmryFile += formattedFiles[specInd] ? ".FUNSMRY" : ".UNSMRY"; - const bool use_unified = Opm::filesystem::exists(unsmryFile.string()); - - const std::vector multFileList = checkForMultipleResultFiles(rootName, formattedFiles[specInd]); - - std::vector resultsFileList; - - if ((!use_unified) && (multFileList.size()==0)) { - throw std::runtime_error("neigther unified or non-unified result files found"); - } else if ((use_unified) && (multFileList.size()>0)) { - auto time_multiple = Opm::filesystem::last_write_time(multFileList.back()); - auto time_unified = Opm::filesystem::last_write_time(unsmryFile); - - if (time_multiple > time_unified) { - resultsFileList=multFileList; - } else { - resultsFileList.push_back(unsmryFile.string()); - } - - } else if (use_unified) { - resultsFileList.push_back(unsmryFile.string()); - } else { - resultsFileList=multFileList; - } - - std::vector arraySourceList; - - for (std::string fileName : resultsFileList) - { - std::vector> arrayList; - arrayList = this->getListOfArrays(fileName, formattedFiles[specInd]); - - for (size_t n = 0; n < arrayList.size(); n++) { - ArrSourceEntry t1 = std::make_tuple(std::get<0>(arrayList[n]), fileName, n, std::get<1>(arrayList[n])); - arraySourceList.push_back(t1); - } - } - - // loop through arrays and for each ministep, store data file, location of params table - // - // 2 or 3 arrays pr time step. - // If timestep is a report step: MINISTEP, PARAMS and SEQHDR - // else : MINISTEP and PARAMS - - - size_t i = std::get<0>(arraySourceList[0]) == "SEQHDR" ? 1 : 0 ; - - while (i < arraySourceList.size()) { - - if (std::get<0>(arraySourceList[i]) != "MINISTEP") { - std::string message="Reading summary file, expecting keyword MINISTEP, found '" + std::get<0>(arraySourceList[i]) + "'"; - throw std::invalid_argument(message); - } - - if (std::get<0>(arraySourceList[i+1]) != "PARAMS") { - std::string message="Reading summary file, expecting keyword PARAMS, found '" + std::get<0>(arraySourceList[i]) + "'"; - throw std::invalid_argument(message); - } - - i++; - - if (std::find(dataFileList.begin(), dataFileList.end(), std::get<1>(arraySourceList[i])) == dataFileList.end()) - { - dataFileList.push_back(std::get<1>(arraySourceList[i])); - dataFileIndex++; - } - - TimeStepEntry mst1 = std::make_tuple(specInd, dataFileIndex, std::get<3>(arraySourceList[i-1])); - miniStepList.push_back(mst1); - - TimeStepEntry t1 = std::make_tuple(specInd, dataFileIndex, std::get<3>(arraySourceList[i])); - timeStepList.push_back(t1); - - i++; - - if (i < arraySourceList.size()) { - if (std::get<0>(arraySourceList[i]) == "SEQHDR") { - i++; - reportStepNumber++; - seqIndex.push_back(step); - } - } else { - reportStepNumber++; - seqIndex.push_back(step); - } - - if (reportStepNumber >= toReportStepNumber) { - i = arraySourceList.size(); - } - - step++; - } - - fromReportStepNumber = toReportStepNumber; - - specInd--; - - nTstep = timeStepList.size(); - } -} - -void ESmry::read_ministeps_from_disk() -{ - auto specInd = std::get<0>(miniStepList[0]); - auto dataFileIndex = std::get<1>(miniStepList[0]); - uint64_t stepFilePos; - - std::fstream fileH; - - if (formattedFiles[specInd]) - fileH.open(dataFileList[dataFileIndex], std::ios::in); - else - fileH.open(dataFileList[dataFileIndex], std::ios::in | std::ios::binary); - - int ministep_value; - - for (size_t n = 0; n < miniStepList.size(); n++) { - - if (dataFileIndex != std::get<1>(miniStepList[n])) { - fileH.close(); - specInd = std::get<0>(miniStepList[n]); - dataFileIndex = std::get<1>(miniStepList[n]); - - if (formattedFiles[specInd]) - fileH.open(dataFileList[dataFileIndex], std::ios::in ); - else - fileH.open(dataFileList[dataFileIndex], std::ios::in | std::ios::binary); - } - - stepFilePos = std::get<2>(miniStepList[n]); - - fileH.seekg (stepFilePos , fileH.beg); - - if (formattedFiles[specInd]) { - ministep_value = read_ministep_formatted(fileH); - } else { - std::function f = Opm::EclIO::flipEndianInt; - auto ministep_vect = readBinaryArray(fileH, 1, Opm::EclIO::INTE, f, sizeOfInte); - ministep_value = ministep_vect[0]; - } - - mini_steps.push_back(ministep_value); - } - - fileH.close(); -} - -bool ESmry::all_steps_available() -{ - if (mini_steps.size() == 0) - this->read_ministeps_from_disk(); - - for (size_t n = 1; n < mini_steps.size(); n++) - if ((mini_steps[n] - mini_steps[n-1]) > 1) - return false; - - return true; -} - -int ESmry::read_ministep_formatted(std::fstream& fileH) -{ - const std::size_t size = sizeOnDiskFormatted(1, Opm::EclIO::INTE, 4)+1; - auto buffer = std::vector(size); - fileH.read (buffer.data(), size); - - const auto fileStr = std::string(buffer.data(), size); - - const auto ministep_vect = readFormattedInteArray(fileStr, 1, 0); - - return ministep_vect[0]; -} - - -std::string ESmry::read_string_from_disk(std::fstream& fileH, uint64_t size) const -{ - std::vector buffer(size); - fileH.read (buffer.data(), size); - - return { buffer.data(), size }; -} - - -void ESmry::LoadData(const std::vector& vectList) const -{ - size_t nvect = vectList.size(); - - std::vector keywIndVect; - keywIndVect.reserve(nvect); - - for (auto key : vectList) { - if (!hasKey(key)) - OPM_THROW(std::invalid_argument, "error loading key " + key ); - - auto it = keyword_index.find(key); - keywIndVect.push_back(it->second); - } - - for (auto ind : keywIndVect) - vectorData[ind].reserve(nTstep); - - std::fstream fileH; - - auto specInd = std::get<0>(timeStepList[0]); - auto dataFileIndex = std::get<1>(timeStepList[0]); - std::uint64_t blockSize_f; - - { - const int rest = MaxBlockSizeReal % numColumnsReal; - const int nLinesBlock = MaxBlockSizeReal / numColumnsReal + (rest > 0); - - blockSize_f= static_cast(MaxNumBlockReal * numColumnsReal * columnWidthReal + nLinesBlock); - } - - if (formattedFiles[specInd]) - fileH.open(dataFileList[dataFileIndex], std::ios::in); - else - fileH.open(dataFileList[dataFileIndex], std::ios::in | std::ios::binary); - - for (const auto& ministep : timeStepList) { - if (dataFileIndex != std::get<1>(ministep)) { - fileH.close(); - specInd = std::get<0>(ministep); - dataFileIndex = std::get<1>(ministep); - - if (formattedFiles[specInd]) - fileH.open(dataFileList[dataFileIndex], std::ios::in ); - else - fileH.open(dataFileList[dataFileIndex], std::ios::in | std::ios::binary); - } - - const auto stepFilePos = std::get<2>(ministep);; - - for (auto ind : keywIndVect) { - auto it = arrayPos[specInd].find(ind); - if (it == arrayPos[specInd].end()) { - // undefined vector in current summary file. Typically when loading - // base restart run and including base run data. Vectors can be added to restart runs - vectorData[ind].push_back(std::nanf("")); - } - else { - int paramPos = it->second; - - if (formattedFiles[specInd]) { - std::uint64_t elementPos = 0; - int nBlocks = paramPos / MaxBlockSizeReal; - int sizeOfLastBlock = paramPos % MaxBlockSizeReal; - - if (nBlocks > 0) - elementPos = static_cast(nBlocks * blockSize_f); - - int nLines = sizeOfLastBlock / numColumnsReal; - elementPos = stepFilePos + elementPos + static_cast(sizeOfLastBlock*columnWidthReal + nLines); - - fileH.seekg (elementPos, fileH.beg); - - const std::size_t size = columnWidthReal; - std::vector buffer(size); - fileH.read (buffer.data(), size); - vectorData[ind].push_back(std::strtof(buffer.data(), nullptr)); - } - else { - const std::uint64_t nFullBlocks = static_cast(paramPos/(MaxBlockSizeReal / sizeOfReal)); - std::uint64_t elementPos = ((2 * nFullBlocks) + 1) * static_cast(sizeOfInte); - elementPos += static_cast(paramPos) * static_cast(sizeOfReal) + stepFilePos; - - fileH.seekg (elementPos, fileH.beg); - - float value; - fileH.read(reinterpret_cast(&value), sizeOfReal); - - vectorData[ind].push_back(Opm::EclIO::flipEndianFloat(value)); - } - } - } - } - - fileH.close(); - - for (const auto& ind : keywIndVect) - vectorLoaded[ind] = true; -} - -std::vector ESmry::makeKeywPosVector(int specInd) const -{ - std::vector keywpos(nParamsSpecFile[specInd], -1); - - auto has_index = [&keywpos](const int ix) - { - return std::find(keywpos.begin(), keywpos.end(), ix) != keywpos.end(); - }; - - const auto& kwList = keywordListSpecFile[specInd]; - for (int n = 0; n < nParamsSpecFile[specInd]; ++n) { - auto it = keyword_index.find(kwList[n]); - if ((it == keyword_index.end()) || has_index(it->second)) { - continue; - } - - keywpos[n] = it->second; - } - - return keywpos; -} - -void ESmry::LoadData() const -{ - std::fstream fileH; - - auto specInd = std::get<0>(timeStepList[0]); - auto dataFileIndex = std::get<1>(timeStepList[0]); - - std::vector keywpos = makeKeywPosVector(specInd); - - auto openMode = formattedFiles[specInd] - ? std::ios::in - : std::ios::in | std::ios::binary; - - fileH.open(dataFileList[dataFileIndex], openMode); - - for (const auto& ministep : timeStepList) { - if (dataFileIndex != std::get<1>(ministep)) { - fileH.close(); - - if (specInd != std::get<0>(ministep)) { - specInd = std::get<0>(ministep); - keywpos = makeKeywPosVector(specInd); - } - - dataFileIndex = std::get<1>(ministep); - - openMode = formattedFiles[specInd] - ? std::ios::in - : std::ios::in | std::ios::binary; - - fileH.open(dataFileList[dataFileIndex], openMode); - } - - const auto stepFilePos = std::get<2>(ministep); - const auto maxNumberOfElements = MaxBlockSizeReal / sizeOfReal; - fileH.seekg (stepFilePos, fileH.beg); - - if (formattedFiles[specInd]) { - const std::size_t size = sizeOnDiskFormatted(nParamsSpecFile[specInd], Opm::EclIO::REAL, sizeOfReal) + 1; - std::vector buffer(size); - fileH.read (buffer.data(), size); - - const auto fileStr = std::string_view(buffer.data(), size); - std::size_t p = 0; - std::int64_t p1= 0; - - for (int i=0; i< nParamsSpecFile[specInd]; ++i, ++p) { - p1 = fileStr.find_first_not_of(' ',p1); - const std::int64_t p2 = fileStr.find_first_of(' ', p1); - - if ((keywpos[p] > -1) && !vectorLoaded[keywpos[p]]) { - const auto dtmpv = std::strtof(fileStr.substr(p1, p2-p1).data(), nullptr); - vectorData[keywpos[p]].push_back(dtmpv); - } - - p1 = fileStr.find_first_not_of(' ',p2); - } - } - else { - std::int64_t rest = static_cast(nParamsSpecFile[specInd]); - std::size_t p = 0; - - while (rest > 0) { - int dhead; - fileH.read(reinterpret_cast(&dhead), sizeof(dhead)); - dhead = Opm::EclIO::flipEndianInt(dhead); - - const int num = dhead / sizeOfInte; - if ((num > maxNumberOfElements) || (num < 0)) - OPM_THROW(std::runtime_error, "??Error reading binary data, inconsistent header data or incorrect number of elements"); - - for (int i = 0; i < num; ++i, ++p) { - float value; - fileH.read(reinterpret_cast(&value), sizeOfReal); - - if ((keywpos[p] > -1) && !vectorLoaded[keywpos[p]]) - vectorData[keywpos[p]].push_back(Opm::EclIO::flipEndianFloat(value)); - } - - rest -= num; - - if (( num < maxNumberOfElements && rest != 0) || - (num == maxNumberOfElements && rest < 0)) - { - std::string message = "Error reading binary data, incorrect number of elements"; - OPM_THROW(std::runtime_error, message); - } - - int dtail; - fileH.read(reinterpret_cast(&dtail), sizeof(dtail)); - dtail = Opm::EclIO::flipEndianInt(dtail); - - if (dhead != dtail) - OPM_THROW(std::runtime_error, "Error reading binary data, tail not matching header."); - } - } - } - - std::fill_n(vectorLoaded.begin(), nVect, true); -} - - -std::vector> -ESmry::getListOfArrays(std::string filename, bool formatted) -{ - std::vector> resultVect; - - FILE *ptr; - char arrName[9]; - char numstr[13]; - - int64_t num; - - if (formatted) - ptr = fopen(filename.c_str(),"r"); // r for read, files opened as text files - else - ptr = fopen(filename.c_str(),"rb"); // r for read, b for binary - - bool endOfFile = false; - - while (!endOfFile) - { - Opm::EclIO::eclArrType arrType; - - if (formatted) - { - fseek(ptr, 2, SEEK_CUR); - - if (fread(arrName, 8, 1, ptr) != 1 ) - throw std::runtime_error("fread error when loading summary data"); - - arrName[8]='\0'; - - fseek(ptr, 1, SEEK_CUR); - - if (fread(numstr, 12, 1, ptr) != 1) - throw std::runtime_error("fread error when loading summary data"); - - numstr[12]='\0'; - - int num_int = std::stoi(numstr); - num = static_cast(num_int); - - fseek(ptr, 8, SEEK_CUR); - - if ((strcmp(arrName, "SEQHDR ") == 0) || (strcmp(arrName, "MINISTEP") == 0)) - arrType = Opm::EclIO::INTE; - else if (strcmp(arrName, "PARAMS ") == 0) - arrType = Opm::EclIO::REAL; - else { - throw std::invalid_argument("unknown array in summary data file "); - } - - } else { - int num_int; - - fseek(ptr, 4, SEEK_CUR); - - if (fread(arrName, 8, 1, ptr) != 1) - throw std::runtime_error("fread error when loading summary data"); - - arrName[8]='\0'; - - if (fread(&num_int, 4, 1, ptr) != 1) - throw std::runtime_error("fread error when loading summary data"); - - num = static_cast(Opm::EclIO::flipEndianInt(num_int)); - - fseek(ptr, 8, SEEK_CUR); - - if ((strcmp(arrName, "SEQHDR ") == 0) || (strcmp(arrName, "MINISTEP") == 0)) - arrType = Opm::EclIO::INTE; - else if (strcmp(arrName, "PARAMS ") == 0) - arrType = Opm::EclIO::REAL; - else { - throw std::invalid_argument("unknown array in UNSMRY file "); - } - } - - uint64_t filePos = static_cast(ftell(ptr)); - - std::tuple t1; - t1 = std::make_tuple(Opm::EclIO::trimr(arrName), filePos); - resultVect.push_back(t1); - - if (num > 0) { - if (formatted) { - uint64_t sizeOfNextArray = sizeOnDiskFormatted(num, arrType, 4); - fseek(ptr, static_cast(sizeOfNextArray), SEEK_CUR); - } else { - uint64_t sizeOfNextArray = sizeOnDiskBinary(num, arrType, 4); - fseek(ptr, static_cast(sizeOfNextArray), SEEK_CUR); - } - } - - if (fgetc(ptr) == EOF) - endOfFile = true; - else - fseek(ptr, -1, SEEK_CUR); - } - - fclose(ptr); - - return resultVect; -} - -bool ESmry::make_esmry_file() -{ - // check that loadBaseRunData is not set, this function only works for single smspec files - // function will not replace existing lodsmry files (since this is already loaded by this class) - // if lodsmry file exist, this function will return false and do nothing. - - if (!fromSingleRun) - OPM_THROW(std::invalid_argument, "creating esmry file only possible when loadBaseRunData=false"); - - if (mini_steps.size() == 0) - this->read_ministeps_from_disk(); - - Opm::filesystem::path path = inputFileName.parent_path(); - Opm::filesystem::path rootName = inputFileName.stem(); - Opm::filesystem::path smryDataFile; - - smryDataFile = path / rootName += ".ESMRY"; - - if (Opm::EclIO::fileExists(smryDataFile.string())) - { - return false; - - } else { - - std::vector is_rstep; - is_rstep.reserve(timeStepList.size()); - - for (size_t i = 0; i < timeStepList.size(); i++) - if(std::find(seqIndex.begin(), seqIndex.end(), i) != seqIndex.end()) - is_rstep.push_back(1); - else - is_rstep.push_back(0); - - this->LoadData(); - - { - Opm::TimeStampUTC ts( std::chrono::system_clock::to_time_t( startdat )); - - std::vector start_date_vect = {ts.day(), ts.month(), ts.year(), ts.hour(), - ts.minutes(), ts.seconds(), 0 }; - - std::vector units; - units.reserve(keyword.size()); - - for (auto key : keyword) - units.push_back(kwunits.at(key)); - - Opm::EclIO::EclOutput outFile(smryDataFile.string(), false, std::ios::out); - - outFile.write("START", start_date_vect); - - if (std::get<0>(restart_info) != ""){ - auto rst_file = std::get<0>(restart_info); - outFile.write("RESTART", {rst_file}); - outFile.write("RSTNUM", {std::get<1>(restart_info)}); - } - - outFile.write("KEYCHECK", keyword); - outFile.write("UNITS", units); - outFile.write("RSTEP", is_rstep); - outFile.write("TSTEP", mini_steps); - - for (size_t n = 0; n < vectorData.size(); n++ ) { - const std::string vect_name = fmt::format("V{}", n); - outFile.write(vect_name, vectorData[n]); - } - } - - return true; - } -} - - - -std::vector ESmry::checkForMultipleResultFiles(const Opm::filesystem::path& rootN, bool formatted) const { - - std::vector fileList; - const std::string pathRootN = rootN.parent_path().string(); - - const std::string fileFilter = formatted ? rootN.stem().string()+".A" : rootN.stem().string()+".S"; - - for (Opm::filesystem::directory_iterator itr(pathRootN); itr != Opm::filesystem::directory_iterator(); ++itr) - { - const std::string file = itr->path().filename().string(); - - if (file.find(fileFilter) != std::string::npos) { - std::string num_string = itr->path().extension().string().substr(2); - - if (Opm::EclIO::is_number(num_string)) - fileList.push_back(pathRootN + "/" + file); - } - } - - std::sort(fileList.begin(), fileList.end()); - - return fileList; -} - -void ESmry::getRstString(const std::vector& restartArray, Opm::filesystem::path& pathRst, Opm::filesystem::path& rootN) const { - - std::string rootNameStr=""; - - for (const auto& str : restartArray) { - rootNameStr = rootNameStr + str; - } - - rootN = Opm::filesystem::path(rootNameStr); - - updatePathAndRootName(pathRst, rootN); -} - -void ESmry::updatePathAndRootName(Opm::filesystem::path& dir, Opm::filesystem::path& rootN) const { - - if (rootN.parent_path().is_absolute()){ - dir = rootN.parent_path(); - } else { - dir = dir / rootN.parent_path(); - } - - rootN = rootN.stem(); -} - -bool ESmry::hasKey(const std::string &key) const -{ - return std::find(keyword.begin(), keyword.end(), key) != keyword.end(); -} - - -void ESmry::ijk_from_global_index(int glob, int &i, int &j, int &k) const -{ - glob -= 1; - - i = 1 + (glob % this->nI); glob /= this->nI; - j = 1 + (glob % this->nJ); - k = 1 + (glob / this->nJ); -} - - -std::string ESmry::makeKeyString(const std::string& keywordArg, const std::string& wgname, int num) const -{ - const auto no_wgname = std::string_view(":+:+:+:+"); - - const auto first = keywordArg[0]; - - if (first == 'A') { - if (num <= 0) { - return ""; - } - - return fmt::format("{}:{}", keywordArg, num); - } - - if (first == 'B') { - if (num <= 0) { - return ""; - } - - int _i, _j, _k; - ijk_from_global_index(num, _i, _j, _k); - - return fmt::format("{}:{},{},{}", keywordArg, _i, _j, _k); - } - - if (first == 'C') { - if (num <= 0) { - return ""; - } - - int _i, _j, _k; - ijk_from_global_index(num, _i, _j, _k); - - return fmt::format("{}:{}:{},{},{}", keywordArg, wgname, _i, _j, _k); - } - - if (first == 'G') { - if (wgname == no_wgname) { - return ""; - } - - return fmt::format("{}:{}", keywordArg, wgname); - } - - if (first == 'R') { - if (num <= 0) { - return ""; - } - - std::string str34 = keywordArg.substr(2, 2); - std::string str45 = keywordArg.substr(3, 2); - - if (keywordArg == "RORFR") // exception, standard region summary keyword - return fmt::format("{}:{}", keywordArg, num); - - if ((str34 == "FR") || (str34 == "FT") || (str45 == "FR") || (str45 == "FT")) { - - // NUMS = R1 + 32768*(R2 + 10) - const auto r1 = num % (1UL << 15); - const auto r2 = (num / (1UL << 15)) - 10; - - return fmt::format("{}:{}-{}", keywordArg, r1, r2); - } - - return fmt::format("{}:{}", keywordArg, num); - } - - if (first == 'S') { - const std::vector segmExcep= {"STEPTYPE", "SEPARATE", "SUMTHIN"}; - - auto it = std::find(segmExcep.begin(), segmExcep.end(), keywordArg); - if (it != segmExcep.end()) { - return keywordArg; - } - - if (wgname == no_wgname) { - return ""; - } - - if (num <= 0) { - return ""; - } - - return fmt::format("{}:{}:{}", keywordArg, wgname, num); - } - - if (first == 'W') { - if (wgname == no_wgname) { - return ""; - } - - return fmt::format("{}:{}", keywordArg, wgname); - } - - return keywordArg; -} - -std::string ESmry::unpackNumber(const SummaryNode& node) const -{ - if (node.category == SummaryNode::Category::Block || - node.category == SummaryNode::Category::Connection) { - int _i,_j,_k; - ijk_from_global_index(node.number, _i, _j, _k); - - return fmt::format("{},{},{}", _i, _j, _k); - } - else if (node.category == SummaryNode::Category::Region && node.keyword[2] == 'F') { - const auto r1 = node.number % (1 << 15); - const auto r2 = (node.number / (1 << 15)) - 10; - - return fmt::format("{}-{}", r1, r2); - } - else { - return fmt::format("{}", node.number); - } -} - -std::string ESmry::lookupKey(const SummaryNode& node) const { - return node.unique_key([this](const auto& num) { return this->unpackNumber(num); }); -} - -const std::vector& ESmry::get(const SummaryNode& node) const { - return get(lookupKey(node)); -} - -std::vector ESmry::get_at_rstep(const SummaryNode& node) const { - return get_at_rstep(lookupKey(node)); -} - -const std::string& ESmry::get_unit(const SummaryNode& node) const { - return get_unit(lookupKey(node)); -} - -const std::vector& ESmry::get(const std::string& name) const -{ - auto it = std::find(keyword.begin(), keyword.end(), name); - - if (it == keyword.end()) { - const std::string message="keyword " + name + " not found "; - OPM_THROW(std::invalid_argument, message); - } - - int ind = std::distance(keyword.begin(), it); - - if (!vectorLoaded[ind]){ - LoadData({name}); - vectorLoaded[ind]=true; - } - - return vectorData[ind]; -} - -std::vector ESmry::get_at_rstep(const std::string& name) const -{ - return this->rstep_vector( this->get(name) ); -} - - -int ESmry::timestepIdxAtReportstepStart(const int reportStep) const -{ - const auto nReport = static_cast(seqIndex.size()); - - if ((reportStep < 1) || (reportStep > nReport)) { - throw std::invalid_argument { - "Report step " + std::to_string(reportStep) - + " outside valid range 1 .. " + std::to_string(nReport) - }; - } - - return seqIndex[reportStep - 1]; -} - -const std::string& ESmry::get_unit(const std::string& name) const { - return kwunits.at(name); -} - -const std::vector& ESmry::keywordList() const -{ - return keyword; -} - -std::vector ESmry::keywordList(const std::string& pattern) const -{ - std::vector list; - - for (auto key : keyword) - if (fnmatch( pattern.c_str(), key.c_str(), 0 ) == 0 ) - list.push_back(key); - - return list; -} - - - -const std::vector& ESmry::summaryNodeList() const { - return summaryNodes; -} - -std::vector ESmry::dates() const { - double time_unit = 24 * 3600; - std::vector d; - - for (const auto& t : this->get("TIME")) - d.push_back( this->startdat + std::chrono::duration_cast( std::chrono::duration( t * time_unit))); - - return d; -} - -std::vector ESmry::dates_at_rstep() const { - const auto& full_vector = this->dates(); - return this->rstep_vector(full_vector); -} -}} // namespace Opm::EclIO diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/io/eclipse/ESmry_write_rsm.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/io/eclipse/ESmry_write_rsm.cpp deleted file mode 100644 index d31051fd74..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/io/eclipse/ESmry_write_rsm.cpp +++ /dev/null @@ -1,256 +0,0 @@ -/* - Copyright 2020 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - - - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -#include "project-version.h" - -namespace { - - constexpr std::size_t column_width { 8 } ; - constexpr std::size_t column_space { 5 } ; - - constexpr std::size_t column_count { 10 } ; - - constexpr std::size_t total_column { column_width + column_space } ; - constexpr std::size_t total_width { total_column * column_count } ; - - const std::string block_separator_line { } ; - // the fact that the dashed header line has 127 rather than 130 dashes has no provenance - const std::string divider_line { std::string(total_width - 3, '-') } ; - - const std::vector month_names = {"JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC"}; - - std::string format_date(const Opm::time_point& tp) { - auto ts = Opm::TimeStampUTC( Opm::TimeService::to_time_t(tp) ); - char buffer[12]; - std::snprintf(buffer, 12, "%2d-%3s-%4d", ts.day(), month_names[ts.month() - 1].c_str(), ts.year()); - return std::string(buffer, 11); - } - - const std::string block_header_line(const std::string& run_name) { - std::string date_string = format_date( Opm::TimeService::from_time_t( std::time(nullptr))); - return "SUMMARY OF RUN " + run_name + " at: " + date_string + " OPM FLOW " + PROJECT_VERSION_NAME; - } - - - void write_line(std::ostream& os, const std::string& line, char prefix = ' ') { - os << prefix << std::setw(total_width) << std::left << line << '\n'; - } - - void write_padding(std::ostream& os, std::size_t columns) { - for (std::size_t icol = columns + 1; icol < column_count; icol++) - os << std::setw(column_width + column_space) << " "; - } - - void print_text_element(std::ostream& os, const std::string& element) { - os << std::setw(8) << std::left << element << std::setw(5) << ""; - } - - void print_time_element(std::ostream& os, const std::string& element) { - os << std::setw(11) << element << std::setw(2) << ""; - } - - std::string format_float_element(float element) { - std::stringstream ss; - static const std::regex integer_regex { "\\.0*$" }; - auto element_string = std::to_string(element); - if (element_string.size() > 8) { - element_string = element_string.substr(0, 8); - } - element_string = std::regex_replace(element_string, integer_regex, ""); - ss << std::setw(8) << std::right << element_string; - return ss.str(); - } - - void print_float_element(std::ostream& os, float element) { - os << format_float_element(element) << std::setw(5) << ""; - } - - void write_header_columns(std::ostream& os, const std::string& time_column, const std::vector& vectors, std::function print_element, char prefix = ' ') { - os << prefix; - - print_text_element(os, time_column); - for (const auto& vector : vectors) { - print_element(os, vector); - } - write_padding(os, vectors.size()); - - os << '\n'; - } - - void write_data_row(std::ostream& os, const std::vector& time_column, const std::vector, int>>& data, std::size_t index, char prefix = ' ') { - os << prefix; - - print_time_element( os, time_column[index] ); - for (const auto& vector : data) { - print_float_element(os, vector.first[index] * std::pow(10.0, -vector.second)); - } - write_padding(os, data.size()); - - os << '\n'; - } - - void write_scale_columns(std::ostream& os, const std::vector, int>> data, char prefix = ' ') { - os << prefix; - - print_text_element(os, ""); - for (const auto& vector : data) { - const auto scale_factor { vector.second } ; - if (scale_factor) { - print_text_element(os, "*10**" + std::to_string(scale_factor)); - } else { - print_text_element(os, ""); - } - } - - os << '\n'; - } - - - -} - -namespace Opm::EclIO { - -void ESmry::write_block(std::ostream& os, bool write_dates, const std::vector& time_column, const std::vector& vectors) const { - write_line(os, block_separator_line, '1'); - write_line(os, divider_line); - write_line(os, block_header_line(inputFileName.stem())); - write_line(os, divider_line); - - std::vector, int>> data; - - bool has_scale_factors { false } ; - for (const auto& vector : vectors) { - const auto& vector_data { get(vector) } ; - - auto max = *std::max_element(vector_data.begin(), vector_data.end()); - int scale_factor { std::max(0, 3 * static_cast(std::floor(( std::log10(max) - 4 ) / 3 ))) } ; - if (scale_factor) { - has_scale_factors = true; - } - - data.emplace_back(vector_data, scale_factor); - } - - { - std::size_t rows { data[0].first.size() }; - std::string time_header = "TIME"; - std::string time_unit = "DAYS"; - - if (write_dates) { - time_header = "DATE"; - time_unit = ""; - } - write_header_columns(os, time_header, vectors, [](std::ostream& oss, const SummaryNode& node) { print_text_element(oss, node.keyword); }); - write_header_columns(os, time_unit, vectors, [this](std::ostream& oss, const SummaryNode& node) { print_text_element(oss, this->get_unit(node)); }); - if (has_scale_factors) { - write_scale_columns(os, data); - } - write_header_columns(os, "", vectors, [](std::ostream& oss, const SummaryNode& node) { print_text_element(oss, node.display_name().value_or("")); }); - write_header_columns(os, "", vectors, [](std::ostream& oss, const SummaryNode& node) { print_text_element(oss, node.display_number().value_or("")); }); - - write_line(os, divider_line); - - for (std::size_t i { 0 } ; i < rows; i++) { - write_data_row(os, time_column, data, i); - } - } - - os << std::flush; -} - -void ESmry::write_rsm(std::ostream& os) const { - bool write_dates = false; - std::vector data_vectors; - std::remove_copy_if(summaryNodes.begin(), summaryNodes.end(), std::back_inserter(data_vectors), [](const SummaryNode& node){ - if (node.keyword == "TIME" || node.keyword == "DAY" || node.keyword == "MONTH" || node.keyword == "YEAR") { - return true; - } else { - return false; - } - }); - - /* - Ensure that the YEARS vector is the first in the data_vectors; could in - principle embark on a more general sorting here. - */ - if (data_vectors[0].keyword != "YEARS") { - auto years_iter = std::find_if(data_vectors.begin(), data_vectors.end(), [](const SummaryNode& node) { return (node.keyword == "YEARS"); }); - if (years_iter != data_vectors.end()) - std::swap(data_vectors[0], *years_iter); - } - - std::vector> data_vector_blocks; - constexpr std::size_t data_column_count { column_count - 1 } ; - for (std::size_t i { 0 } ; i < data_vectors.size(); i += data_column_count) { - auto last = std::min(data_vectors.size(), i + data_column_count); - data_vector_blocks.emplace_back(data_vectors.begin() + i, data_vectors.begin() + last); - } - - this->LoadData(); - std::vector time_column; - if (this->hasKey("DAY") && this->hasKey("MONTH") && this->hasKey("YEAR")) { - write_dates = true; - for (const auto& t : this->dates()) { - time_column.push_back(format_date(t)); - } - } else { - const auto& time_data = this->get("TIME"); - for (const auto& t : time_data) - time_column.push_back(format_float_element(t)); - } - - for (const auto& data_vector_block : data_vector_blocks) { - write_block(os, write_dates, time_column, {data_vector_block.begin(), data_vector_block.end() }); - } -} - -void ESmry::write_rsm_file(std::optional filename) const { - Opm::filesystem::path summary_file_name { filename.value_or(inputFileName) } ; - summary_file_name.replace_extension("RSM"); - - std::ofstream rsm_file { summary_file_name } ; - - if (!rsm_file.is_open()) { - OPM_THROW(std::runtime_error, "Could not open file " + std::string(summary_file_name)); - } - - write_rsm(rsm_file); - - rsm_file.close(); -} - -} // namespace Opm::EclIO diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/io/eclipse/EclFile.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/io/eclipse/EclFile.cpp deleted file mode 100644 index 795b8cad78..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/io/eclipse/EclFile.cpp +++ /dev/null @@ -1,646 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - - -namespace Opm { namespace EclIO { - -void EclFile::load(bool preload) { - std::fstream fileH; - - if (formatted) { - fileH.open(this->inputFilename, std::ios::in); - } else { - fileH.open(this->inputFilename, std::ios::in | std::ios::binary); - } - - if (!fileH) - throw std::runtime_error(fmt::format("Can not open EclFile: {}", this->inputFilename)); - - int n = 0; - while (!isEOF(&fileH)) { - std::string arrName(8,' '); - eclArrType arrType; - int64_t num; - int sizeOfElement; - - if (formatted) { - readFormattedHeader(fileH,arrName,num,arrType, sizeOfElement); - } else { - readBinaryHeader(fileH,arrName,num, arrType, sizeOfElement); - } - - array_size.push_back(num); - array_type.push_back(arrType); - array_name.push_back(trimr(arrName)); - array_element_size.push_back(sizeOfElement); - - array_index[array_name[n]] = n; - - uint64_t pos = fileH.tellg(); - ifStreamPos.push_back(pos); - - arrayLoaded.push_back(false); - - if (num > 0){ - if (formatted) { - uint64_t sizeOfNextArray = sizeOnDiskFormatted(num, arrType, sizeOfElement); - fileH.seekg(static_cast(sizeOfNextArray), std::ios_base::cur); - } else { - uint64_t sizeOfNextArray = sizeOnDiskBinary(num, arrType, sizeOfElement); - fileH.seekg(static_cast(sizeOfNextArray), std::ios_base::cur); - } - } - - n++; - }; - - fileH.seekg(0, std::ios_base::end); - this->ifStreamPos.push_back(static_cast(fileH.tellg())); - fileH.close(); - - if (preload) - this->loadData(); -} - - -EclFile::EclFile(const std::string& filename, EclFile::Formatted fmt, bool preload) : - formatted(fmt.value), - inputFilename(filename) -{ - this->load(preload); -} - - -EclFile::EclFile(const std::string& filename, bool preload) : - inputFilename(filename) -{ - if (!fileExists(filename)) - throw std::runtime_error(fmt::format("Can not open EclFile: {}", filename)); - - formatted = isFormatted(filename); - this->load(preload); -} - - -void EclFile::loadBinaryArray(std::fstream& fileH, std::size_t arrIndex) -{ - fileH.seekg (ifStreamPos[arrIndex], fileH.beg); - - switch (array_type[arrIndex]) { - case INTE: - inte_array[arrIndex] = readBinaryInteArray(fileH, array_size[arrIndex]); - break; - case REAL: - real_array[arrIndex] = readBinaryRealArray(fileH, array_size[arrIndex]); - break; - case DOUB: - doub_array[arrIndex] = readBinaryDoubArray(fileH, array_size[arrIndex]); - break; - case LOGI: - logi_array[arrIndex] = readBinaryLogiArray(fileH, array_size[arrIndex]); - break; - case CHAR: - char_array[arrIndex] = readBinaryCharArray(fileH, array_size[arrIndex]); - break; - case C0NN: - char_array[arrIndex] = readBinaryC0nnArray(fileH, array_size[arrIndex], array_element_size[arrIndex]); - break; - case MESS: - break; - default: - OPM_THROW(std::runtime_error, "Asked to read unexpected array type"); - break; - } - - arrayLoaded[arrIndex] = true; -} - -void EclFile::loadFormattedArray(const std::string& fileStr, std::size_t arrIndex, int64_t fromPos) -{ - - switch (array_type[arrIndex]) { - case INTE: - inte_array[arrIndex] = readFormattedInteArray(fileStr, array_size[arrIndex], fromPos); - break; - case REAL: - real_array[arrIndex] = readFormattedRealArray(fileStr, array_size[arrIndex], fromPos); - break; - case DOUB: - doub_array[arrIndex] = readFormattedDoubArray(fileStr, array_size[arrIndex], fromPos); - break; - case LOGI: - logi_array[arrIndex] = readFormattedLogiArray(fileStr, array_size[arrIndex], fromPos); - break; - case CHAR: - char_array[arrIndex] = readFormattedCharArray(fileStr, array_size[arrIndex], fromPos, sizeOfChar); - break; - case C0NN: - char_array[arrIndex] = readFormattedCharArray(fileStr, array_size[arrIndex], fromPos, array_element_size[arrIndex]); - break; - case MESS: - break; - default: - OPM_THROW(std::runtime_error, "Asked to read unexpected array type"); - break; - } - - arrayLoaded[arrIndex] = true; -} - - -void EclFile::loadData() -{ - - if (formatted) { - - std::vector arrIndices(array_name.size()); - std::iota(arrIndices.begin(), arrIndices.end(), 0); - - this->loadData(arrIndices); - - } else { - - std::fstream fileH; - fileH.open(inputFilename, std::ios::in | std::ios::binary); - - if (!fileH) { - std::string message="Could not open file: '" + inputFilename +"'"; - OPM_THROW(std::runtime_error, message); - } - - for (size_t i = 0; i < array_name.size(); i++) { - loadBinaryArray(fileH, i); - } - - fileH.close(); - } -} - - -void EclFile::loadData(const std::string& name) -{ - - if (formatted) { - - std::ifstream inFile(inputFilename); - - for (unsigned int arrIndex = 0; arrIndex < array_name.size(); arrIndex++) { - - if (array_name[arrIndex] == name) { - - inFile.seekg(ifStreamPos[arrIndex]); - - size_t size = sizeOnDiskFormatted(array_size[arrIndex], array_type[arrIndex], array_element_size[arrIndex])+1; - std::vector buffer(size); - inFile.read (buffer.data(), size); - - std::string fileStr = std::string(buffer.data(), size); - - loadFormattedArray(fileStr, arrIndex, 0); - } - } - - } else { - - std::fstream fileH; - fileH.open(inputFilename, std::ios::in | std::ios::binary); - - if (!fileH) { - std::string message="Could not open file: '" + inputFilename +"'"; - OPM_THROW(std::runtime_error, message); - } - - for (size_t i = 0; i < array_name.size(); i++) { - if (array_name[i] == name) { - loadBinaryArray(fileH, i); - } - } - - fileH.close(); - } -} - - -void EclFile::loadData(const std::vector& arrIndex) -{ - - if (formatted) { - - std::ifstream inFile(inputFilename); - - for (int ind : arrIndex) { - - inFile.seekg(ifStreamPos[ind]); - - size_t size = sizeOnDiskFormatted(array_size[ind], array_type[ind], array_element_size[ind])+1; - std::vector buffer(size); - inFile.read (buffer.data(), size); - - std::string fileStr = std::string(buffer.data(), size); - - loadFormattedArray(fileStr, ind, 0); - } - - } else { - std::fstream fileH; - fileH.open(inputFilename, std::ios::in | std::ios::binary); - - if (!fileH) { - std::string message="Could not open file: '" + inputFilename +"'"; - OPM_THROW(std::runtime_error, message); - } - - for (int ind : arrIndex) { - loadBinaryArray(fileH, ind); - } - - fileH.close(); - } -} - - -void EclFile::loadData(int arrIndex) -{ - if (formatted) { - - std::ifstream inFile(inputFilename); - - inFile.seekg(ifStreamPos[arrIndex]); - - size_t size = sizeOnDiskFormatted(array_size[arrIndex], array_type[arrIndex], array_element_size[arrIndex])+1; - std::vector buffer(size); - inFile.read (buffer.data(), size); - - std::string fileStr = std::string(buffer.data(), size); - - loadFormattedArray(fileStr, arrIndex, 0); - - - } else { - std::fstream fileH; - fileH.open(inputFilename, std::ios::in | std::ios::binary); - - if (!fileH) { - std::string message="Could not open file: '" + inputFilename +"'"; - OPM_THROW(std::runtime_error, message); - } - - loadBinaryArray(fileH, arrIndex); - - fileH.close(); - } -} - -bool EclFile::is_ix() const -{ - // assuming that array data type C0nn only are used in IX. This may change in future. - - // Formatted files, - // >> use real arrays. Example Ecl = '0.70000000E-01', IX = '7.0000000E-02' - // Binary files, - // >> if logi array exists in file, look for IX spes binary representation of true value - - if (formatted) { - for (size_t n=0; n < array_type.size(); n++) { - if (array_type[n] == Opm::EclIO::C0NN) { - return true; - } else if (array_type[n] == Opm::EclIO::REAL) { - auto realStr = get_fmt_real_raw_str_values(n); - int p, first; - - for (auto val : realStr) { - double dtmpv = fabs(std::stod(val)); - - if (dtmpv > 0.0) { - p = val.find_first_of("."); - first = abs(std::stoi(val.substr(0, p))); - - if (first > 0) - return true; - else - return false; - } - } - } - } - } else { - for (size_t n=0; n < array_type.size(); n++) { - if (array_type[n] == Opm::EclIO::C0NN) { - return true; - } else if (array_type[n] == Opm::EclIO::LOGI) { - auto raw_logi_values = get_bin_logi_raw_values(n); - for (unsigned int val : raw_logi_values) { - if (val == Opm::EclIO::true_value_ix) - return true; - } - } - } - - return false; - } - - return false; -} - -std::vector EclFile::get_bin_logi_raw_values(int arrIndex) const -{ - if (array_type[arrIndex] != Opm::EclIO::LOGI) - OPM_THROW(std::runtime_error, "Error, selected array is not of type LOGI"); - - std::fstream fileH; - fileH.open(inputFilename, std::ios::in | std::ios::binary); - - if (!fileH) { - std::string message="Could not open file: '" + inputFilename +"'"; - OPM_THROW(std::runtime_error, message); - } - - fileH.seekg (ifStreamPos[arrIndex], fileH.beg); - - std::vector raw_logi = readBinaryRawLogiArray(fileH, array_size[arrIndex]); - - return raw_logi; -} - -std::vector EclFile::get_fmt_real_raw_str_values(int arrIndex) const -{ - std::vector real_vect; - - if (array_type[arrIndex] != Opm::EclIO::REAL) - OPM_THROW(std::runtime_error, "Error, selected array is not of type REAL"); - - std::ifstream inFile(inputFilename); - - if (!inFile) { - std::string message="Could not open file: '" + inputFilename +"'"; - OPM_THROW(std::runtime_error, message); - } - - inFile.seekg(ifStreamPos[arrIndex]); - - size_t size = sizeOnDiskFormatted(array_size[arrIndex], array_type[arrIndex], array_element_size[arrIndex])+1; - - std::vector buffer(size); - inFile.read (buffer.data(), size); - - std::string fileStr = std::string(buffer.data(), size); - - std::vector real_vect_str; - real_vect_str = readFormattedRealRawStrings(fileStr, array_size[arrIndex], 0); - - return real_vect_str; -} - - -std::vector EclFile::getList() const -{ - std::vector list; - list.reserve(this->array_name.size()); - - for (size_t i = 0; i < array_name.size(); i++) { - list.emplace_back(array_name[i], array_type[i], array_size[i]); - } - - return list; -} - - -template<> -const std::vector& EclFile::get(int arrIndex) -{ - return getImpl(arrIndex, INTE, inte_array, "integer"); -} - -template<> -const std::vector& -EclFile::get(int arrIndex) -{ - return getImpl(arrIndex, REAL, real_array, "float"); -} - - -template<> -const std::vector &EclFile::get(int arrIndex) -{ - return getImpl(arrIndex, DOUB, doub_array, "double"); -} - - -template<> -const std::vector& EclFile::get(int arrIndex) -{ - return getImpl(arrIndex, LOGI, logi_array, "bool"); -} - - -template<> -const std::vector& EclFile::get(int arrIndex) -{ - if ((array_type[arrIndex] != Opm::EclIO::C0NN) && (array_type[arrIndex] != Opm::EclIO::CHAR)){ - std::string message = "Array with index " + std::to_string(arrIndex) + " is not of type " + "std::string"; - OPM_THROW(std::runtime_error, message); - } - - return getImpl(arrIndex, array_type[arrIndex], char_array, "string"); -} - - -bool EclFile::hasKey(const std::string &name) const -{ - auto search = array_index.find(name); - return search != array_index.end(); -} - -size_t EclFile::count(const std::string &name) const -{ - return std::count (array_name.begin(), array_name.end(), name); -} - - -std::streampos -EclFile::seekPosition(const std::vector::size_type arrIndex) const -{ - if (arrIndex >= this->array_name.size()) { - return { static_cast(this->ifStreamPos.back()) }; - } - - // StreamPos is file position of start of data vector's control - // character (unformatted) or data items (formatted). We need - // file position of start of header, because that's where we're - // supposed to start writing new data. Subtract header size. - // - // (*) formatted header size = 30 characters = - // 1 space character - // + 1 quote character - // + 8 character header/vector name - // + 1 quote character - // + 1 space character - // + 11 characters for number of elments - // + 1 space character - // + 1 quote character - // + 4 characters for element type - // + 1 quote character - // - // - // (*) unformatted header size = 24 bytes = - // 4 byte => size of header in byte - // + 8 byte header/vector name - // + 4 byte for number of elements - // + 4 byte for element type - // + 4 byte size of header in byte - // - // 16 byte header (8+4+4) - // - // +------+------------+------+------+------+ - // | Ctrl | Keyword | #elm | type | Ctrl | (item) - // | 4 | 8 | 4 | 4 | 4 | (#bytes) - // +------+------------+------+------+------+ - // - // 20 byte header (8+8+4) - // - // +------+------------+------+------+------+ - // | Ctrl | Keyword | #elm | type | Ctrl | (item) - // | 4 | 8 | 8 | 4 | 4 | (#bytes) - // +------+------------+------+------+------+ - // - - const auto headerSize = this->formatted ? 30ul : 24ul; - const auto datapos = this->ifStreamPos[arrIndex]; - const auto seekpos = (datapos <= headerSize) - ? 0ul : datapos - headerSize; - - return { static_cast(seekpos) }; -} - -template<> -const std::vector& EclFile::get(const std::string& name) -{ - auto search = array_index.find(name); - - if (search == array_index.end()) { - std::string message="key '"+name + "' not found"; - OPM_THROW(std::invalid_argument, message); - } - - return getImpl(search->second, INTE, inte_array, "integer"); -} - -template<> -const std::vector& EclFile::get(const std::string& name) -{ - auto search = array_index.find(name); - - if (search == array_index.end()) { - std::string message="key '"+name + "' not found"; - OPM_THROW(std::invalid_argument, message); - } - - return getImpl(search->second, REAL, real_array, "float"); -} - - -template<> -const std::vector& EclFile::get(const std::string &name) -{ - auto search = array_index.find(name); - - if (search == array_index.end()) { - std::string message="key '"+name + "' not found"; - OPM_THROW(std::invalid_argument, message); - } - - return getImpl(search->second, DOUB, doub_array, "double"); -} - - -template<> -const std::vector& EclFile::get(const std::string &name) -{ - auto search = array_index.find(name); - - if (search == array_index.end()) { - std::string message="key '"+name + "' not found"; - OPM_THROW(std::invalid_argument, message); - } - - return getImpl(search->second, LOGI, logi_array, "bool"); -} - - -template<> -const std::vector& EclFile::get(const std::string &name) -{ - auto search = array_index.find(name); - - if (search == array_index.end()) { - std::string message="key '"+name + "' not found"; - OPM_THROW(std::invalid_argument, message); - } - - if ((array_type[search->second] != Opm::EclIO::C0NN) && (array_type[search->second] != Opm::EclIO::CHAR)){ - std::string message = "Array with index " + std::to_string(search->second) + " is not of type " + "std::string"; - OPM_THROW(std::runtime_error, message); - } - - return getImpl(search->second, array_type[search->second], char_array, "string"); -} - - -template -const std::vector& EclFile::getImpl(int arrIndex, eclArrType type, - const std::unordered_map>& array, - const std::string& typeStr) -{ - if (array_type[arrIndex] != type) { - std::string message = "Array with index " + std::to_string(arrIndex) + " is not of type " + typeStr; - OPM_THROW(std::runtime_error, message); - } - - if (!arrayLoaded[arrIndex]) { - loadData(arrIndex); - } - - return array.at(arrIndex); -} - - -std::size_t EclFile::size() const { - return this->array_name.size(); -} - - -}} // namespace Opm::ecl diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/io/eclipse/EclOutput.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/io/eclipse/EclOutput.cpp deleted file mode 100644 index 24b3b8c710..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/io/eclipse/EclOutput.cpp +++ /dev/null @@ -1,725 +0,0 @@ -/* - Copyright 2019 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include -#include - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -namespace Opm { namespace EclIO { - -EclOutput::EclOutput(const std::string& filename, - const bool formatted, - const std::ios_base::openmode mode) - : isFormatted{formatted} -{ - const auto binmode = mode | std::ios_base::binary; - ix_standard = false; - - this->ofileH.open(filename, this->isFormatted ? mode : binmode); -} - - -template<> -void EclOutput::write(const std::string& name, - const std::vector& data) -{ - // array type will be assumed CHAR if maximum string length is 8 or less - // If maximum string length is > 8, C0nn will be used with element size equal to - // maximum string length - - int maximum_length = 8; - - if (data.size() > 0) { - auto it = std::max_element(data.begin(), data.end(), [] - (const std::string& str1, const std::string& str2) - { - return str2.size() > str1.size(); - }); - - maximum_length = it->size(); - } - - - if (isFormatted) - { - if (maximum_length > sizeOfChar){ - writeFormattedHeader(name, data.size(), C0NN, maximum_length); - writeFormattedCharArray(data, maximum_length); - } else { - writeFormattedHeader(name, data.size(), CHAR, sizeOfChar); - writeFormattedCharArray(data, sizeOfChar); - } - } - else - { - if (maximum_length > sizeOfChar){ - writeBinaryHeader(name, data.size(), C0NN, maximum_length); - writeBinaryCharArray(data, maximum_length); - } else { - writeBinaryHeader(name, data.size(), CHAR, sizeOfChar); - writeBinaryCharArray(data, sizeOfChar); - } - } -} - -void EclOutput::write(const std::string& name, const std::vector& data, int element_size) -{ - // array type will be assumed C0NN (not CHAR). Also in cases where element size is 8 or less - - if (data.size() > 0) { - auto it = std::max_element(data.begin(), data.end(), [] - (const std::string& str1, const std::string& str2) - { - return str2.size() > str1.size(); - }); - - if (it->size() > static_cast(element_size)) - OPM_THROW(std::runtime_error, "specified element size for type C0NN less than maximum string length in output data"); - } - - if (isFormatted) - { - if (element_size > sizeOfChar){ - writeFormattedHeader(name, data.size(), C0NN, element_size); - writeFormattedCharArray(data, element_size); - } else { - writeFormattedHeader(name, data.size(), C0NN, sizeOfChar); - writeFormattedCharArray(data, sizeOfChar); - } - } - else - { - if (element_size > sizeOfChar){ - writeBinaryHeader(name, data.size(), C0NN, element_size); - writeBinaryCharArray(data, element_size); - } else { - writeBinaryHeader(name, data.size(), C0NN, sizeOfChar); - writeBinaryCharArray(data, sizeOfChar); - } - } -} - -template <> -void EclOutput::write> - (const std::string& name, - const std::vector>& data) -{ - if (this->isFormatted) { - writeFormattedHeader(name, data.size(), CHAR, sizeOfChar); - writeFormattedCharArray(data); - } - else { - writeBinaryHeader(name, data.size(), CHAR, sizeOfChar); - writeBinaryCharArray(data); - } -} - -void EclOutput::message(const std::string& msg) -{ - // Generate message, i.e., output vector of type eclArrType::MESS, - // by passing an empty std::vector of element type 'char'. Entire - // contents of message contained in the 'msg' string. - - this->write(msg, std::vector{}); -} - -void EclOutput::flushStream() -{ - this->ofileH.flush(); -} - -void EclOutput::writeBinaryHeader(const std::string&arrName, int64_t size, eclArrType arrType, int element_size) -{ - int bhead = flipEndianInt(16); - std::string name = arrName + std::string(8 - arrName.size(),' '); - - // write X231 header if size larger that limits for 4 byte integers - if (size > std::numeric_limits::max()) { - int64_t val231 = std::pow(2,31); - int64_t x231 = size / val231; - - int flippedx231 = flipEndianInt(static_cast( (-1)*x231 )); - - ofileH.write(reinterpret_cast(&bhead), sizeof(bhead)); - ofileH.write(name.c_str(), 8); - ofileH.write(reinterpret_cast(&flippedx231), sizeof(flippedx231)); - ofileH.write("X231", 4); - ofileH.write(reinterpret_cast(&bhead), sizeof(bhead)); - - size = size - (x231 * val231); - } - - int flippedSize = flipEndianInt(size); - - ofileH.write(reinterpret_cast(&bhead), sizeof(bhead)); - - ofileH.write(name.c_str(), 8); - ofileH.write(reinterpret_cast(&flippedSize), sizeof(flippedSize)); - - std::string c0nn_str; - - if (arrType == C0NN){ - std::ostringstream ss; - ss << "C" << std::setw(3) << std::setfill('0') << element_size; - c0nn_str = ss.str(); - } - - switch(arrType) { - case INTE: - ofileH.write("INTE", 4); - break; - case REAL: - ofileH.write("REAL", 4); - break; - case DOUB: - ofileH.write("DOUB", 4); - break; - case LOGI: - ofileH.write("LOGI", 4); - break; - case CHAR: - ofileH.write("CHAR", 4); - break; - case C0NN: - ofileH.write(c0nn_str.c_str(), 4); - break; - case MESS: - ofileH.write("MESS", 4); - break; - } - - ofileH.write(reinterpret_cast(&bhead), sizeof(bhead)); -} - -template -void EclOutput::writeBinaryArray(const std::vector& data) -{ - int num; - int64_t rest, offset; - int dhead; - int64_t size = data.size(); - - eclArrType arrType = MESS; - - if (typeid(std::vector) == typeid(std::vector)) { - arrType = INTE; - } else if (typeid(std::vector) == typeid(std::vector)) { - arrType = REAL; - } else if (typeid(std::vector) == typeid(std::vector)) { - arrType = DOUB; - } else if (typeid(std::vector) == typeid(std::vector)) { - arrType = LOGI; - } - - auto sizeData = block_size_data_binary(arrType); - - int sizeOfElement = std::get<0>(sizeData); - int maxBlockSize = std::get<1>(sizeData); - int maxNumberOfElements = maxBlockSize / sizeOfElement; - - if (!ofileH.is_open()) { - OPM_THROW(std::runtime_error, "fstream fileH not open for writing"); - } - - int logi_true_val = ix_standard ? true_value_ix : true_value_ecl; - - rest = size * static_cast(sizeOfElement); - - offset = 0; - - while (rest > 0) { - if (rest > maxBlockSize) { - rest -= maxBlockSize; - num = maxNumberOfElements; - } else { - num = static_cast(rest) / sizeOfElement; - rest = 0; - } - - dhead = flipEndianInt(num * sizeOfElement); - - ofileH.write(reinterpret_cast(&dhead), sizeof(dhead)); - - if (arrType == INTE) { - - std::vector flipped_data; - flipped_data.resize(num, 0); - - for (int m = 0; m < num; m++) - flipped_data[m] = flipEndianInt(data[m + offset]); - - ofileH.write((char*)(flipped_data.data()), flipped_data.size() * sizeof(int)) ; - - } else if (arrType == REAL) { - - std::vector flipped_data; - flipped_data.resize(num, 0); - - for (int m = 0; m < num; m++) - flipped_data[m] = flipEndianFloat(data[m + offset]); - - ofileH.write((char*)(flipped_data.data()), flipped_data.size() * sizeof(float)) ; - - } else if (arrType == DOUB) { - - std::vector flipped_data; - flipped_data.resize(num, 0); - - for (int m = 0; m < num; m++) - flipped_data[m] = flipEndianDouble(data[m + offset]); - - ofileH.write((char*)(flipped_data.data()), flipped_data.size() * sizeof(double)) ; - - } else if (arrType == LOGI) { - - std::vector logi_data; - logi_data.resize(num, 0); - - for (int m = 0; m < num; m++) - if (data[m + offset]) - logi_data[m] = logi_true_val; - else - logi_data[m] = false_value; - - ofileH.write((char*)(logi_data.data()), logi_data.size() * sizeof(int)) ; - - } else { - - std::cerr << "type not supported in write binaryarray\n"; - std::exit(EXIT_FAILURE); - } - - offset += num; - ofileH.write(reinterpret_cast(&dhead), sizeof(dhead)); - } -} - - -template void EclOutput::writeBinaryArray(const std::vector& data); -template void EclOutput::writeBinaryArray(const std::vector& data); -template void EclOutput::writeBinaryArray(const std::vector& data); -template void EclOutput::writeBinaryArray(const std::vector& data); -template void EclOutput::writeBinaryArray(const std::vector& data); - - -void EclOutput::writeBinaryCharArray(const std::vector& data, int element_size) -{ - int num,dhead; - - int n = 0; - int size = data.size(); - - auto sizeData = block_size_data_binary(CHAR); - - if (element_size > sizeOfChar){ - std::get<1>(sizeData)= std::get<1>(sizeData) / std::get<0>(sizeData) * element_size; - std::get<0>(sizeData) = element_size; - } - - int sizeOfElement = std::get<0>(sizeData); - int maxBlockSize = std::get<1>(sizeData); - int maxNumberOfElements = maxBlockSize / sizeOfElement; - - int rest = size * sizeOfElement; - - if (!ofileH.is_open()) { - OPM_THROW(std::runtime_error,"fstream fileH not open for writing"); - } - - while (rest > 0) { - if (rest > maxBlockSize) { - rest -= maxBlockSize; - num = maxNumberOfElements; - } else { - num = rest / sizeOfElement; - rest = 0; - } - - dhead = flipEndianInt(num * sizeOfElement); - - ofileH.write(reinterpret_cast(&dhead), sizeof(dhead)); - - for (int i = 0; i < num; i++) { - std::string tmpStr = data[n] + std::string(sizeOfElement - data[n].size(),' '); - ofileH.write(tmpStr.c_str(), sizeOfElement); - n++; - } - - ofileH.write(reinterpret_cast(&dhead), sizeof(dhead)); - } -} - -void EclOutput::writeBinaryCharArray(const std::vector>& data) -{ - const auto size = data.size(); - - const auto sizeData = block_size_data_binary(CHAR); - - const int sizeOfElement = std::get<0>(sizeData); - const int maxBlockSize = std::get<1>(sizeData); - const int maxNumberOfElements = maxBlockSize / sizeOfElement; - - int rest = size * sizeOfElement; - - if (!ofileH.is_open()) { - OPM_THROW(std::runtime_error,"fstream fileH not open for writing"); - } - - auto elm = data.begin(); - while (rest > 0) { - const auto numElm = (rest > maxBlockSize) - ? maxNumberOfElements - : rest / sizeOfElement; - - rest = (rest > maxBlockSize) ? rest - maxBlockSize : 0; - - auto dhead = flipEndianInt(numElm * sizeOfElement); - - ofileH.write(reinterpret_cast(&dhead), sizeof(dhead)); - - for (auto i = 0*numElm; i < numElm; ++i, ++elm) { - ofileH.write(elm->c_str(), sizeOfElement); - } - - ofileH.write(reinterpret_cast(&dhead), sizeof(dhead)); - } -} - -void EclOutput::writeFormattedHeader(const std::string& arrName, int size, eclArrType arrType, int element_size) -{ - std::string name = arrName + std::string(8 - arrName.size(),' '); - - ofileH << " '" << name << "' " << std::setw(11) << size; - - std::string c0nn_str; - - if (arrType == C0NN){ - std::ostringstream ss; - ss << "C" << std::setw(3) << std::setfill('0') << element_size; - c0nn_str = ss.str(); - } - - - switch (arrType) { - case INTE: - ofileH << " 'INTE'" << std::endl; - break; - case REAL: - ofileH << " 'REAL'" << std::endl; - break; - case DOUB: - ofileH << " 'DOUB'" << std::endl; - break; - case LOGI: - ofileH << " 'LOGI'" << std::endl; - break; - case CHAR: - ofileH << " 'CHAR'" << std::endl; - break; - case C0NN: - ofileH << " '" << c0nn_str << "'" << std::endl; - break; - case MESS: - ofileH << " 'MESS'" << std::endl; - break; - } -} - - -std::string EclOutput::make_real_string_ecl(float value) const -{ - char buffer [15]; - std::sprintf (buffer, "%10.7E", value); - - if (value == 0.0) { - return "0.00000000E+00"; - } else { - if (std::isnan(value)) - return "NAN"; - - if (std::isinf(value)) { - if (value > 0) - return "INF"; - else - return "-INF"; - } - - std::string tmpstr(buffer); - - int exp = value < 0.0 ? std::stoi(tmpstr.substr(11, 3)) : std::stoi(tmpstr.substr(10, 3)); - - if (value < 0.0) { - tmpstr = "-0." + tmpstr.substr(1, 1) + tmpstr.substr(3, 7) + "E"; - } else { - tmpstr = "0." + tmpstr.substr(0, 1) + tmpstr.substr(2, 7) +"E"; - } - - std::sprintf (buffer, "%+03i", exp+1); - tmpstr = tmpstr+buffer; - - return tmpstr; - } -} - -std::string EclOutput::make_real_string_ix(float value) const -{ - char buffer [15]; - std::sprintf (buffer, "%10.7E", value); - - if (value == 0.0) { - return " 0.0000000E+00"; - } else { - if (std::isnan(value)) - return "NAN"; - - if (std::isinf(value)) { - if (value > 0) - return "INF"; - else - return "-INF"; - } - - std::string tmpstr(buffer); - - return tmpstr; - } -} - - -std::string EclOutput::make_doub_string_ecl(double value) const -{ - char buffer [21 + 1]; - std::snprintf (buffer, sizeof buffer, "%19.13E", value); - - if (value == 0.0) { - return "0.00000000000000D+00"; - } else { - if (std::isnan(value)) - return "NAN"; - - if (std::isinf(value)) { - if (value > 0) - return "INF"; - else - return "-INF"; - } - - std::string tmpstr(buffer); - int exp = value < 0.0 ? std::stoi(tmpstr.substr(17, 4)) : std::stoi(tmpstr.substr(16, 4)); - const bool use_exp_char = (exp >= -100) && (exp < 99); - - if (value < 0.0) { - if (use_exp_char) { - tmpstr = "-0." + tmpstr.substr(1, 1) + tmpstr.substr(3, 13) + "D"; - } else { - tmpstr = "-0." + tmpstr.substr(1, 1) + tmpstr.substr(3, 13); - } - } else { - if (use_exp_char) { - tmpstr = "0." + tmpstr.substr(0, 1) + tmpstr.substr(2, 13) + "D"; - } else { - tmpstr = "0." + tmpstr.substr(0, 1) + tmpstr.substr(2, 13); - } - } - - std::snprintf(buffer, sizeof buffer, "%+03i", exp + 1); - tmpstr = tmpstr + buffer; - return tmpstr; - } -} - -std::string EclOutput::make_doub_string_ix(double value) const -{ - char buffer [21]; - std::sprintf (buffer, "%19.13E", value); - - if (value == 0.0) { - return " 0.0000000000000E+00"; - } else { - if (std::isnan(value)) - return "NAN"; - - if (std::isinf(value)) { - if (value > 0) - return "INF"; - else - return "-INF"; - } - - std::string tmpstr(buffer); - - return tmpstr; - } -} - - -template -void EclOutput::writeFormattedArray(const std::vector& data) -{ - int size = data.size(); - int n = 0; - - eclArrType arrType = MESS; - if (typeid(T) == typeid(int)) { - arrType = INTE; - } else if (typeid(T) == typeid(float)) { - arrType = REAL; - } else if (typeid(T) == typeid(double)) { - arrType = DOUB; - } else if (typeid(T) == typeid(bool)) { - arrType = LOGI; - } - - - auto sizeData = block_size_data_formatted(arrType); - - int maxBlockSize = std::get<0>(sizeData); - int nColumns = std::get<1>(sizeData); - int columnWidth = std::get<2>(sizeData); - - for (int i = 0; i < size; i++) { - n++; - - switch (arrType) { - case INTE: - ofileH << std::setw(columnWidth) << data[i]; - break; - case REAL: - if (ix_standard) - ofileH << std::setw(columnWidth) << make_real_string_ix(data[i]); - else - ofileH << std::setw(columnWidth) << make_real_string_ecl(data[i]); - break; - case DOUB: - if (ix_standard) - ofileH << std::setw(columnWidth) << make_doub_string_ix(data[i]); - else - ofileH << std::setw(columnWidth) << make_doub_string_ecl(data[i]); - break; - case LOGI: - if (data[i]) { - ofileH << " T"; - } else { - ofileH << " F"; - } - break; - default: - break; - } - - if ((n % nColumns) == 0 || (n % maxBlockSize) == 0) { - ofileH << std::endl; - } - - if ((n % maxBlockSize) == 0) { - n=0; - } - } - - if ((n % nColumns) != 0 && (n % maxBlockSize) != 0) { - ofileH << std::endl; - } -} - - -template void EclOutput::writeFormattedArray(const std::vector& data); -template void EclOutput::writeFormattedArray(const std::vector& data); -template void EclOutput::writeFormattedArray(const std::vector& data); -template void EclOutput::writeFormattedArray(const std::vector& data); -template void EclOutput::writeFormattedArray(const std::vector& data); - - -void EclOutput::writeFormattedCharArray(const std::vector& data, int element_size) -{ - auto sizeData = block_size_data_formatted(CHAR); - int maxBlockSize = std::get<0>(sizeData); - - int nColumns; - - if (element_size < 9) - { - element_size = 8; - nColumns = std::get<1>(sizeData); - } else - nColumns = 80 / (element_size + 3); - - int rest = data.size(); - int n = 0; - - while (rest > 0) { - int size = rest; - - if (size > maxBlockSize) - size = maxBlockSize; - - for (int i = 0; i < size; i++) { - std::string str1(element_size,' '); - str1 = data[n] + std::string(element_size - data[n].size(),' '); - - n++; - ofileH << " '" << str1 << "'"; - - if ((i+1) % nColumns == 0) { - ofileH << std::endl; - } - } - - if ((size % nColumns) != 0) { - ofileH << std::endl; - } - - rest = (rest > maxBlockSize) ? rest - maxBlockSize : 0; - } -} - - -void EclOutput::writeFormattedCharArray(const std::vector>& data) -{ - const auto sizeData = block_size_data_formatted(CHAR); - - const int nColumns = std::get<1>(sizeData); - - const auto size = data.size(); - - for (auto i = 0*size; i < size; ++i) { - ofileH << " '" << data[i].c_str() << '\''; - - if ((i+1) % nColumns == 0) { - ofileH << '\n'; - } - } - - if ((size % nColumns) != 0) { - ofileH << '\n'; - } -} - -}} // namespace Opm::EclIO diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/io/eclipse/EclUtil.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/io/eclipse/EclUtil.cpp deleted file mode 100644 index 2a53c94cc1..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/io/eclipse/EclUtil.cpp +++ /dev/null @@ -1,680 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include - -#include - -#include - -#include -#include -#include -#include -#include -#include -#include - -//temporary -#include - -int Opm::EclIO::flipEndianInt(int num) -{ - unsigned int tmp = __builtin_bswap32(num); - return static_cast(tmp); -} - -int64_t Opm::EclIO::flipEndianLongInt(int64_t num) -{ - uint64_t tmp = __builtin_bswap64(num); - return static_cast(tmp); -} - -float Opm::EclIO::flipEndianFloat(float num) -{ - float value = num; - - char* floatToConvert = reinterpret_cast(&value); - std::reverse(floatToConvert, floatToConvert+4); - - return value; -} - - -double Opm::EclIO::flipEndianDouble(double num) -{ - double value = num; - - char* doubleToConvert = reinterpret_cast(&value); - std::reverse(doubleToConvert, doubleToConvert+8); - - return value; -} - -bool Opm::EclIO::fileExists(const std::string& filename){ - - std::ifstream fileH(filename.c_str()); - return fileH.good(); -} - - -bool Opm::EclIO::is_number(const std::string& numstr) -{ - for (char const &c : numstr) - if (std::isdigit(c) == 0) - return false; - - return true; -} - - -bool Opm::EclIO::isFormatted(const std::string& filename) -{ - const auto p = filename.find_last_of("."); - if (p == std::string::npos) - OPM_THROW(std::invalid_argument, - "Purported ECLIPSE Filename'" + filename + "'does not contain extension"); - return std::strchr("ABCFGH", static_cast(filename[p+1])) != nullptr; -} - -bool Opm::EclIO::isEOF(std::fstream* fileH) -{ - int num; - int64_t pos = fileH->tellg(); - fileH->read(reinterpret_cast(&num), sizeof(num)); - - if (fileH->eof()) { - return true; - } else { - fileH->seekg (pos); - return false; - } -} - - -std::tuple Opm::EclIO::block_size_data_binary(eclArrType arrType) -{ - using BlockSizeTuple = std::tuple; - - switch (arrType) { - case INTE: - return BlockSizeTuple{sizeOfInte, MaxBlockSizeInte}; - break; - case REAL: - return BlockSizeTuple{sizeOfReal, MaxBlockSizeReal}; - break; - case DOUB: - return BlockSizeTuple{sizeOfDoub, MaxBlockSizeDoub}; - break; - case LOGI: - return BlockSizeTuple{sizeOfLogi, MaxBlockSizeLogi}; - break; - case CHAR: - return BlockSizeTuple{sizeOfChar, MaxBlockSizeChar}; - break; - case C0NN: - return BlockSizeTuple{sizeOfChar, MaxBlockSizeChar}; - break; - case MESS: - OPM_THROW(std::invalid_argument, "Type 'MESS' have no associated data"); - break; - default: - OPM_THROW(std::invalid_argument, "Unknown field type"); - break; - } -} - - -std::tuple Opm::EclIO::block_size_data_formatted(eclArrType arrType) -{ - using BlockSizeTuple = std::tuple; - - switch (arrType) { - case INTE: - return BlockSizeTuple{MaxNumBlockInte, numColumnsInte, columnWidthInte}; - break; - case REAL: - return BlockSizeTuple{MaxNumBlockReal,numColumnsReal, columnWidthReal}; - break; - case DOUB: - return BlockSizeTuple{MaxNumBlockDoub,numColumnsDoub, columnWidthDoub}; - break; - case LOGI: - return BlockSizeTuple{MaxNumBlockLogi,numColumnsLogi, columnWidthLogi}; - break; - case CHAR: - return BlockSizeTuple{MaxNumBlockChar,numColumnsChar, columnWidthChar}; - break; - case C0NN: - return BlockSizeTuple{MaxNumBlockChar,numColumnsChar, columnWidthChar}; - break; - case MESS: - OPM_THROW(std::invalid_argument, "Type 'MESS' have no associated data") ; - break; - default: - OPM_THROW(std::invalid_argument, "Unknown field type"); - break; - } -} - - -std::string Opm::EclIO::trimr(const std::string &str1) -{ - if (str1 == " ") { - return ""; - } else { - int p = str1.find_last_not_of(" "); - - return str1.substr(0,p+1); - } -} - -uint64_t Opm::EclIO::sizeOnDiskBinary(int64_t num, Opm::EclIO::eclArrType arrType, int elementSize) -{ - uint64_t size = 0; - - if (arrType == Opm::EclIO::MESS) { - if (num > 0) { - std::string message = "In routine calcSizeOfArray, type MESS can not have size > 0"; - OPM_THROW(std::invalid_argument, message); - } - } else { - if (num > 0) { - auto sizeData = Opm::EclIO::block_size_data_binary(arrType); - - if (arrType == Opm::EclIO::C0NN){ - std::get<1>(sizeData)= std::get<1>(sizeData) / std::get<0>(sizeData) * elementSize; - std::get<0>(sizeData) = elementSize; - } - - int sizeOfElement = std::get<0>(sizeData); - int maxBlockSize = std::get<1>(sizeData); - int maxNumberOfElements = maxBlockSize / sizeOfElement; - - auto numBlocks = static_cast(num)/static_cast(maxNumberOfElements); - auto rest = static_cast(num) - numBlocks*static_cast(maxNumberOfElements); - - auto size2Inte = static_cast(Opm::EclIO::sizeOfInte) * 2; - auto sizeFullBlocks = numBlocks * (static_cast(maxBlockSize) + size2Inte); - - uint64_t sizeLastBlock = 0; - - if (rest > 0) - sizeLastBlock = rest * static_cast(sizeOfElement) + size2Inte; - - size = sizeFullBlocks + sizeLastBlock; - } - } - - return size; -} - -uint64_t Opm::EclIO::sizeOnDiskFormatted(const int64_t num, Opm::EclIO::eclArrType arrType, int elementSize) -{ - uint64_t size = 0; - - if (arrType == Opm::EclIO::MESS) { - if (num > 0) { - OPM_THROW(std::invalid_argument, "In routine calcSizeOfArray, type MESS can not have size > 0"); - } - } else { - auto sizeData = block_size_data_formatted(arrType); - - if (arrType == Opm::EclIO::C0NN){ - std::get<2>(sizeData) = elementSize + 3; - std::get<1>(sizeData) = 80 / std::get<2>(sizeData); - } - - int maxBlockSize = std::get<0>(sizeData); - int nColumns = std::get<1>(sizeData); - int columnWidth = std::get<2>(sizeData); - - int nBlocks = num /maxBlockSize; - int sizeOfLastBlock = num % maxBlockSize; - - size = 0; - - if (nBlocks > 0) { - int nLinesBlock = maxBlockSize / nColumns; - int rest = maxBlockSize % nColumns; - - if (rest > 0) { - nLinesBlock++; - } - - int64_t blockSize = maxBlockSize * columnWidth + nLinesBlock; - size = nBlocks * blockSize; - } - - int nLines = sizeOfLastBlock / nColumns; - int rest = sizeOfLastBlock % nColumns; - - size = size + sizeOfLastBlock * columnWidth + nLines; - - if (rest > 0) { - size++; - } - } - - return size; -} - -void Opm::EclIO::readBinaryHeader(std::fstream& fileH, std::string& tmpStrName, - int& tmpSize, std::string& tmpStrType) -{ - int bhead; - - fileH.read(reinterpret_cast(&bhead), sizeof(bhead)); - bhead = Opm::EclIO::flipEndianInt(bhead); - - if (bhead != 16){ - std::string message="Error reading binary header. Expected 16 bytes of header data, found " + std::to_string(bhead); - OPM_THROW(std::runtime_error, message); - } - - fileH.read(&tmpStrName[0], 8); - - fileH.read(reinterpret_cast(&tmpSize), sizeof(tmpSize)); - tmpSize = Opm::EclIO::flipEndianInt(tmpSize); - - fileH.read(&tmpStrType[0], 4); - - fileH.read(reinterpret_cast(&bhead), sizeof(bhead)); - bhead = Opm::EclIO::flipEndianInt(bhead); - - if (bhead != 16){ - std::string message="Error reading binary header. Expected 16 bytes of header data, found " + std::to_string(bhead); - OPM_THROW(std::runtime_error, message); - } -} - -void Opm::EclIO::readBinaryHeader(std::fstream& fileH, std::string& arrName, - int64_t& size, Opm::EclIO::eclArrType &arrType, int& elementSize) -{ - std::string tmpStrName(8,' '); - std::string tmpStrType(4,' '); - int tmpSize; - - readBinaryHeader(fileH, tmpStrName, tmpSize, tmpStrType); - - if (tmpStrType == "X231"){ - std::string x231ArrayName = tmpStrName; - int x231exp = tmpSize * (-1); - - readBinaryHeader(fileH, tmpStrName, tmpSize, tmpStrType); - - if (x231ArrayName != tmpStrName) - OPM_THROW(std::runtime_error, "Invalied X231 header, name should be same in both headers'"); - - if (x231exp < 0) - OPM_THROW(std::runtime_error, "Invalied X231 header, size of array should be negative'"); - - size = static_cast(tmpSize) + static_cast(x231exp) * pow(2,31); - } else { - size = static_cast(tmpSize); - } - - elementSize = 4; - - arrName = tmpStrName; - if (tmpStrType == "INTE") - arrType = Opm::EclIO::INTE; - else if (tmpStrType == "REAL") - arrType = Opm::EclIO::REAL; - else if (tmpStrType == "DOUB"){ - arrType = Opm::EclIO::DOUB; - elementSize = 8; - } - else if (tmpStrType == "CHAR"){ - arrType = Opm::EclIO::CHAR; - elementSize = 8; - } - else if (tmpStrType.substr(0,1)=="C"){ - arrType = Opm::EclIO::C0NN; - elementSize = std::stoi(tmpStrType.substr(1,3)); - } - else if (tmpStrType =="LOGI") - arrType = Opm::EclIO::LOGI; - else if (tmpStrType == "MESS") - arrType = Opm::EclIO::MESS; - else - OPM_THROW(std::runtime_error, "Error, unknown array type '" + tmpStrType +"'"); -} - - -void Opm::EclIO::readFormattedHeader(std::fstream& fileH, std::string& arrName, - int64_t &num, Opm::EclIO::eclArrType &arrType, int& elementSize) -{ - std::string line; - std::getline(fileH,line); - - int p1 = line.find_first_of("'"); - int p2 = line.find_first_of("'",p1+1); - int p3 = line.find_first_of("'",p2+1); - int p4 = line.find_first_of("'",p3+1); - - if (p1 == -1 || p2 == -1 || p3 == -1 || p4 == -1) { - OPM_THROW(std::runtime_error, "Header name and type should be enclosed with '"); - } - - arrName = line.substr(p1 + 1, p2 - p1 - 1); - std::string antStr = line.substr(p2 + 1, p3 - p2 - 1); - std::string arrTypeStr = line.substr(p3 + 1, p4 - p3 - 1); - - num = std::stol(antStr); - - elementSize = 4; - - if (arrTypeStr == "INTE") - arrType = Opm::EclIO::INTE; - else if (arrTypeStr == "REAL") - arrType = Opm::EclIO::REAL; - else if (arrTypeStr == "DOUB"){ - arrType = Opm::EclIO::DOUB; - elementSize = 8; - } - else if (arrTypeStr == "CHAR"){ - arrType = Opm::EclIO::CHAR; - elementSize = 8; - } - else if (arrTypeStr.substr(0,1)=="C"){ - arrType = Opm::EclIO::C0NN; - elementSize = std::stoi(arrTypeStr.substr(1,3)); - } - else if (arrTypeStr == "LOGI") - arrType = Opm::EclIO::LOGI; - else if (arrTypeStr == "MESS") - arrType = Opm::EclIO::MESS; - else - OPM_THROW(std::runtime_error, "Error, unknown array type '" + arrTypeStr +"'"); - - if (arrName.size() != 8) { - OPM_THROW(std::runtime_error, "Header name should be 8 characters"); - } -} - -template -std::vector Opm::EclIO::readBinaryArray(std::fstream& fileH, const int64_t size, Opm::EclIO::eclArrType type, - std::function& flip, int elementSize) -{ - std::vector arr; - - auto sizeData = block_size_data_binary(type); - - if (type == Opm::EclIO::C0NN){ - std::get<1>(sizeData)= std::get<1>(sizeData) / std::get<0>(sizeData) * elementSize; - std::get<0>(sizeData) = elementSize; - } - - const int sizeOfElement = std::get<0>(sizeData); - const int maxBlockSize = std::get<1>(sizeData); - const int maxNumberOfElements = maxBlockSize / sizeOfElement; - - arr.reserve(size); - - int64_t rest = size; - - while (rest > 0) { - int dhead; - fileH.read(reinterpret_cast(&dhead), sizeof(dhead)); - dhead = Opm::EclIO::flipEndianInt(dhead); - const int num = dhead / sizeOfElement; - - if ((num > maxNumberOfElements) || (num < 0)) { - OPM_THROW(std::runtime_error, "Error reading binary data, inconsistent header data or incorrect number of elements"); - } - - if constexpr (std::is_same_v) { - for (int i = 0; i < num; i++) { - T2 value; - value.resize(sizeOfElement) ; - fileH.read(&value[0], sizeOfElement); - arr.push_back(flip(value)); - } - } else { - std::vector buf(num); - fileH.read(reinterpret_cast(buf.data()), buf.size()*sizeof(T2)); - - for (const auto& value : buf) - arr.push_back(flip(value)); - } - - rest -= num; - - if (( num < maxNumberOfElements && rest != 0) || - (num == maxNumberOfElements && rest < 0)) { - std::string message = "Error reading binary data, incorrect number of elements"; - OPM_THROW(std::runtime_error, message); - } - - int dtail; - fileH.read(reinterpret_cast(&dtail), sizeof(dtail)); - dtail = Opm::EclIO::flipEndianInt(dtail); - - if (dhead != dtail) { - OPM_THROW(std::runtime_error, "Error reading binary data, tail not matching header."); - } - } - - return arr; -} - - -std::vector Opm::EclIO::readBinaryInteArray(std::fstream &fileH, const int64_t size) -{ - std::function f = Opm::EclIO::flipEndianInt; - return readBinaryArray(fileH, size, Opm::EclIO::INTE, f, sizeOfInte); -} - - -std::vector Opm::EclIO::readBinaryRealArray(std::fstream& fileH, const int64_t size) -{ - std::function f = Opm::EclIO::flipEndianFloat; - return readBinaryArray(fileH, size, Opm::EclIO::REAL, f, sizeOfReal); -} - - -std::vector Opm::EclIO::readBinaryDoubArray(std::fstream& fileH, const int64_t size) -{ - std::function f = Opm::EclIO::flipEndianDouble; - return readBinaryArray(fileH, size, Opm::EclIO::DOUB, f, sizeOfDoub); -} - -std::vector Opm::EclIO::readBinaryLogiArray(std::fstream &fileH, const int64_t size) -{ - std::function f = [](unsigned int intVal) - { - bool value; - if (intVal == Opm::EclIO::true_value_ecl) { - value = true; - } else if (intVal == Opm::EclIO::false_value) { - value = false; - } else if (intVal == Opm::EclIO::true_value_ix) { - value = true; - } else { - OPM_THROW(std::runtime_error, "Error reading logi value"); - } - - return value; - }; - return readBinaryArray(fileH, size, Opm::EclIO::LOGI, f, sizeOfLogi); -} - -std::vector Opm::EclIO::readBinaryRawLogiArray(std::fstream &fileH, const int64_t size) -{ - std::function f = [](unsigned int intVal) - { - return intVal; - }; - return readBinaryArray(fileH, size, Opm::EclIO::LOGI, f, sizeOfLogi); -} - - -std::vector Opm::EclIO::readBinaryCharArray(std::fstream& fileH, const int64_t size) -{ - using Char8 = std::array; - std::function f = [](const Char8& val) - { - std::string res(val.begin(), val.end()); - return Opm::EclIO::trimr(res); - }; - return readBinaryArray(fileH, size, Opm::EclIO::CHAR, f, sizeOfChar); -} - - -std::vector Opm::EclIO::readBinaryC0nnArray(std::fstream& fileH, const int64_t size, int elementSize) -{ - std::function f = [](const std::string& val) - { - return Opm::EclIO::trimr(val); - }; - - return readBinaryArray(fileH, size, Opm::EclIO::C0NN, f, elementSize); -} - - -template -std::vector Opm::EclIO::readFormattedArray(const std::string& file_str, const int size, int64_t fromPos, - std::function& process) -{ - std::vector arr; - - arr.reserve(size); - - int64_t p1=fromPos; - - for (int i=0; i< size; i++) { - p1 = file_str.find_first_not_of(' ',p1); - int64_t p2 = file_str.find_first_of(' ', p1); - - arr.push_back(process(file_str.substr(p1, p2-p1))); - - p1 = file_str.find_first_not_of(' ',p2); - } - - return arr; -} - - -std::vector Opm::EclIO::readFormattedInteArray(const std::string& file_str, const int64_t size, int64_t fromPos) -{ - - std::function f = [](const std::string& val) - { - return std::stoi(val); - }; - - return readFormattedArray(file_str, size, fromPos, f); -} - - -std::vector Opm::EclIO::readFormattedCharArray(const std::string& file_str, const int64_t size, - int64_t fromPos, int elementSize) -{ - std::vector arr; - arr.reserve(size); - - int64_t p1=fromPos; - - for (int i=0; i< size; i++) { - p1 = file_str.find_first_of('\'',p1); - std::string value = file_str.substr(p1 + 1, elementSize); - - if (value == " ") { - arr.push_back(""); - } else { - arr.push_back(Opm::EclIO::trimr(value)); - } - - p1 = p1 + elementSize + 2; - } - - return arr; -} - - -std::vector Opm::EclIO::readFormattedRealArray(const std::string& file_str, const int64_t size, int64_t fromPos) -{ - - std::function f = [](const std::string& val) - { - // tskille: temporary fix, need to be discussed. OPM flow writes numbers - // that are outside valid range for float, and function stof will fail - double dtmpv = std::stod(val); - return dtmpv; - }; - - return readFormattedArray(file_str, size, fromPos, f); -} - -std::vector Opm::EclIO::readFormattedRealRawStrings(const std::string& file_str, const int64_t size, int64_t fromPos) -{ - - - std::function f = [](const std::string& val) - { - return val; - }; - - return readFormattedArray(file_str, size, fromPos, f); -} - - -std::vector Opm::EclIO::readFormattedLogiArray(const std::string& file_str, const int64_t size, int64_t fromPos) -{ - - std::function f = [](const std::string& val) - { - if (val[0] == 'T') { - return true; - } else if (val[0] == 'F') { - return false; - } else { - std::string message="Could not convert '" + val + "' to a bool value "; - OPM_THROW(std::invalid_argument, message); - } - }; - - return readFormattedArray(file_str, size, fromPos, f); -} - -std::vector Opm::EclIO::readFormattedDoubArray(const std::string& file_str, const int64_t size, int64_t fromPos) -{ - - std::function f = [](std::string val) - { - auto p1 = val.find_first_of("D"); - - if (p1 != std::string::npos) { - val.replace(p1,1,"E"); - } - - p1 = val.find_first_of("E"); - - if (p1 == std::string::npos) { - auto p2 = val.find_first_of("-+", 1); - - if (p2 != std::string::npos) - val = val.insert(p2,"E"); - } - return std::stod(val); - }; - - return readFormattedArray(file_str, size, fromPos, f); -} - diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/io/eclipse/ExtESmry.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/io/eclipse/ExtESmry.cpp deleted file mode 100644 index 7cc1238292..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/io/eclipse/ExtESmry.cpp +++ /dev/null @@ -1,478 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include - -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#ifdef _WIN32 -#include "cross-platform/windows/Substitutes.hpp" -#else -#include -#endif - -#include -#include -#include -#include -#include - -namespace { - -Opm::time_point make_date(const std::vector& datetime) { - auto day = datetime[0]; - auto month = datetime[1]; - auto year = datetime[2]; - auto hour = 0; - auto minute = 0; - auto second = 0; - - if (datetime.size() == 6) { - hour = datetime[3]; - minute = datetime[4]; - auto total_usec = datetime[5]; - second = total_usec / 1000000; - } - - - const auto ts = Opm::TimeStampUTC{ Opm::TimeStampUTC::YMD{ year, month, day}}.hour(hour).minutes(minute).seconds(second); - return Opm::TimeService::from_time_t( Opm::asTimeT(ts) ); -} - - -} - - -/* - - KEYWORDS WGNAMES NUMS | PARAM index Corresponding ERT key - ------------------------------------------------+-------------------------------------------------- - WGOR OP_1 0 | 0 WGOR:OP_1 - FOPT +-+-+-+- 0 | 1 FOPT - WWCT OP_1 0 | 2 WWCT:OP_1 - WIR OP_1 0 | 3 WIR:OP_1 - WGOR WI_1 0 | 4 WWCT:OP_1 - WWCT W1_1 0 | 5 WWCT:WI_1 - BPR +-+-+- 12675 | 6 BPR:12675, BPR:i,j,k - RPR +-+-+- 1 | 7 RPR:1 - FOPT +-+-+- 0 | 8 FOPT - GGPR NORTH 0 | 9 GGPR:NORTH - COPR OP_1 5628 | 10 COPR:OP_1:56286, COPR:OP_1:i,j,k - RXF +-+-+- 32768*R1(R2 + 10) | 11 RXF:2-3 - SOFX OP_1 12675 | 12 SOFX:OP_1:12675, SOFX:OP_1:i,j,jk - -*/ - - -namespace Opm { namespace EclIO { - -ExtESmry::ExtESmry(const std::string &filename, bool loadBaseRunData) : - m_inputFileName { filename }, - m_loadBaseRun(loadBaseRunData) -{ - if (m_inputFileName.extension()=="") - m_inputFileName+=".ESMRY"; - - if (m_inputFileName.extension()!=".ESMRY") - throw std::invalid_argument("Input file should have extension .ESMRY"); - - m_lodsmry_files.push_back(m_inputFileName); - - Opm::filesystem::path rootName = m_inputFileName.parent_path() / m_inputFileName.stem(); - Opm::filesystem::path path = Opm::filesystem::current_path(); - - Opm::filesystem::path rstRootN; - - updatePathAndRootName(path, rootName); - - LodsmryHeadType lodsmry_head; - - auto lod_offset = open_esmry(m_inputFileName, lodsmry_head); - - m_startdat = std::get<0>(lodsmry_head); - - m_lod_offset.push_back(lod_offset); - - std::map key_index; - - auto keyword = std::get<2>(lodsmry_head); - auto units = std::get<3>(lodsmry_head); - - for (size_t n = 0; n < keyword.size(); n++){ - key_index[keyword[n]] = n; - m_keyword.push_back(keyword[n]); - } - - m_keyword_index.push_back(key_index); - - for (size_t n = 0; n < m_keyword.size(); n++) - kwunits[m_keyword[n]] = units[n]; - - RstEntry rst_entry = std::get<1>(lodsmry_head); - - m_rstep_v.push_back(std::get<4>(lodsmry_head)); - m_tstep_v.push_back(std::get<5>(lodsmry_head)); - - m_nTstep_v.push_back(m_tstep_v.back().size()); - - auto lod_arr_size = sizeOnDiskBinary(m_nTstep_v.back(), Opm::EclIO::REAL, sizeOfReal); - - m_lod_arr_size.push_back(lod_arr_size); - - m_tstep_range.push_back(std::make_tuple(0, m_tstep_v.back().size() - 1)); - - if ((loadBaseRunData) && (!std::get<0>(rst_entry).empty())) { - - auto restart = std::get<0>(rst_entry); - auto rstNum = std::get<1>(rst_entry); - - int sim_ind = 0; - while (!restart.empty()){ - sim_ind++; - - rstRootN = Opm::filesystem::path(restart); - - updatePathAndRootName(path, rstRootN); - - Opm::filesystem::path rstLodSmryFile = path / rstRootN; - rstLodSmryFile += ".ESMRY"; - - m_lodsmry_files.push_back(rstLodSmryFile); - - lod_offset = open_esmry(rstLodSmryFile, lodsmry_head); - - m_lod_offset.push_back(lod_offset); - - m_rstep_v.push_back(std::get<4>(lodsmry_head)); - m_tstep_v.push_back(std::get<5>(lodsmry_head)); - - m_nTstep_v.push_back(m_tstep_v.back().size()); - - lod_arr_size = sizeOnDiskBinary(m_nTstep_v.back(), Opm::EclIO::REAL, sizeOfReal); - m_lod_arr_size.push_back(lod_arr_size); - - int cidx = 0; - - auto it = std::find_if(m_rstep_v[sim_ind].begin(), m_rstep_v[sim_ind].end(), - [&cidx, &rstNum](const int & val) - { - if (val == 1) - ++cidx; - - return cidx == rstNum; - }); - - size_t ind = std::distance(m_rstep_v[sim_ind].begin(), it); - - m_tstep_range.push_back(std::make_tuple(0, ind)); - - key_index.clear(); - keyword = std::get<2>(lodsmry_head); - - for (size_t n = 0; n < keyword.size(); n++) - key_index[keyword[n]] = n; - - m_keyword_index.push_back(key_index); - - rst_entry = std::get<1>(lodsmry_head); - restart = std::get<0>(rst_entry); - rstNum = std::get<1>(rst_entry); - } - } - - m_nVect = m_keyword.size(); - - m_vectorData.resize(m_nVect, {}); - m_vectorLoaded.resize(m_nVect, false); - - int ind = static_cast(m_tstep_range.size()) - 1 ; - - while (ind > -1) { - int to_ind = std::get<1>(m_tstep_range[ind]); - m_rstep.insert(m_rstep.end(), m_rstep_v[ind].begin(), m_rstep_v[ind].begin() + to_ind + 1); - m_tstep.insert(m_tstep.end(), m_tstep_v[ind].begin(), m_tstep_v[ind].begin() + to_ind + 1); - ind--; - } - - m_nTstep = m_rstep.size(); - - for (size_t m = 0; m < m_rstep.size(); m++) - if (m_rstep[m] == 1) - m_seqIndex.push_back(m); -} - - -std::vector ExtESmry::get_at_rstep(const std::string& name) -{ - auto full_vect = this->get(name); - - std::vector rs_vect; - rs_vect.reserve(m_seqIndex.size()); - - for (auto r : m_seqIndex) - rs_vect.push_back(full_vect[r]); - - return rs_vect; -} - -std::string& ExtESmry::get_unit(const std::string& name) -{ - if ( m_keyword_index[0].find(name) == m_keyword_index[0].end() ) - throw std::invalid_argument("summary key '" + name + "' not found"); - - return kwunits.at(name); -} - -bool ExtESmry::all_steps_available() -{ - for (size_t n = 1; n < m_tstep.size(); n++) - if ((m_tstep[n] - m_tstep[n-1]) > 1) - return false; - - return true; -} - -uint64_t ExtESmry::open_esmry(Opm::filesystem::path& inputFileName, LodsmryHeadType& lodsmry_head) -{ - std::fstream fileH; - - fileH.open(inputFileName, std::ios::in | std::ios::binary); - - if (!fileH) - throw std::runtime_error("Can not open file "); - - - std::string arrName; - int64_t arr_size; - Opm::EclIO::eclArrType arrType; - int sizeOfElement; - - Opm::EclIO::readBinaryHeader(fileH, arrName, arr_size, arrType, sizeOfElement); - - if ((arrName != "START ") or (arrType != Opm::EclIO::INTE)) - OPM_THROW(std::invalid_argument, "reading start, invalid lod file"); - - auto start_vect = Opm::EclIO::readBinaryInteArray(fileH, arr_size); - - auto startdat = make_date(start_vect); - - Opm::EclIO::readBinaryHeader(fileH, arrName, arr_size, arrType, sizeOfElement); - - Opm::EclIO::RstEntry rst_entry = std::make_tuple("", 0); - - if (arrName == "RESTART "){ - - if (m_loadBaseRun) { - - std::vector rstfile = Opm::EclIO::readBinaryC0nnArray(fileH, arr_size, sizeOfElement); - Opm::EclIO::readBinaryHeader(fileH, arrName, arr_size, arrType, sizeOfElement); - std::vector rst_num = Opm::EclIO::readBinaryInteArray(fileH, arr_size); - - rst_entry = std::make_tuple(rstfile[0], rst_num[0]); - - } else { - uint64_t numIgnore = sizeOnDiskBinary(arr_size, arrType, sizeOfElement); - numIgnore = numIgnore + 24 + sizeOnDiskBinary(1, Opm::EclIO::INTE, Opm::EclIO::sizeOfInte); - fileH.seekg(static_cast(numIgnore), std::ios_base::cur); - } - - Opm::EclIO::readBinaryHeader(fileH, arrName, arr_size, arrType, sizeOfElement); - } - - if (arrName != "KEYCHECK") - OPM_THROW(std::invalid_argument, "!!reading keycheck, invalid lod file"); - - std::vector keywords; - - keywords = Opm::EclIO::readBinaryC0nnArray(fileH, arr_size, sizeOfElement); - - Opm::EclIO::readBinaryHeader(fileH, arrName, arr_size, arrType, sizeOfElement); - - if (arrName != "UNITS ") - OPM_THROW(std::invalid_argument, "reading UNITS, invalid lod file"); - - auto units = Opm::EclIO::readBinaryC0nnArray(fileH, arr_size, sizeOfElement); - - if (keywords.size() != units.size()) - throw std::runtime_error("invalied LODSMRY file, size of units not equal size of keywords"); - - Opm::EclIO::readBinaryHeader(fileH, arrName, arr_size, arrType, sizeOfElement); - - if ((arrName != "RSTEP ") or (arrType != Opm::EclIO::INTE)) - OPM_THROW(std::invalid_argument, "reading RSTEP, invalid lod file"); - - auto rstep = Opm::EclIO::readBinaryInteArray(fileH, arr_size); - - Opm::EclIO::readBinaryHeader(fileH, arrName, arr_size, arrType, sizeOfElement); - - if ((arrName != "TSTEP ") or (arrType != Opm::EclIO::INTE)) - OPM_THROW(std::invalid_argument, "reading TSTEP, invalid lod file"); - - auto tstep = Opm::EclIO::readBinaryInteArray(fileH, arr_size); - - lodsmry_head = std::make_tuple(startdat, rst_entry, keywords, units, rstep, tstep); - - uint64_t lodsmry_offset = static_cast(fileH.tellg()); - - fileH.close(); - - return lodsmry_offset; -} - - -void ExtESmry::updatePathAndRootName(Opm::filesystem::path& dir, Opm::filesystem::path& rootN) { - - if (rootN.parent_path().is_absolute()){ - dir = rootN.parent_path(); - } else { - dir = dir / rootN.parent_path(); - } - - rootN = rootN.stem(); -} - - -void ExtESmry::loadData(const std::vector& stringVect) -{ - std::vector keyIndexVect; - - for (const auto& key: stringVect) - keyIndexVect.push_back(m_keyword_index[0].at(key)); - - std::fstream fileH; - - int ind = static_cast(m_tstep_range.size()) - 1 ; - - while (ind > -1) { - - int to_ind = std::get<1>(m_tstep_range[ind]); - - fileH.open(m_lodsmry_files[ind], std::ios::in | std::ios::binary); - - if (!fileH) - throw std::runtime_error("Can not open file lodFile"); - - for (size_t n = 0 ; n < stringVect.size(); n++) { - - std::string key = stringVect[n]; - - std::string arrName; - Opm::EclIO::eclArrType arrType; - - if ( m_keyword_index[ind].find(key) == m_keyword_index[ind].end() ) { - - for (int m = 0; m < to_ind + 1; m++) - m_vectorData[keyIndexVect[n]].push_back(0.0); - - } else { - - int key_ind = m_keyword_index[ind].at(key); - - uint64_t pos = m_lod_offset[ind] + m_lod_arr_size[ind]*static_cast(key_ind); - pos = pos + static_cast(key_ind * 24); // adding size of binary headers - - fileH.seekg (pos, fileH.beg); - - int64_t size; - int sizeOfElement; - readBinaryHeader(fileH, arrName, size, arrType, sizeOfElement); - - arrName = Opm::EclIO::trimr(arrName); - - std::string checkName = "V" + std::to_string(key_ind); - - if (arrName != checkName) - OPM_THROW(std::invalid_argument, "lodsmry, wrong header expecting " + checkName + " found " + arrName); - - auto smry_data = readBinaryRealArray(fileH, size); - - m_vectorData[keyIndexVect[n]].insert(m_vectorData[keyIndexVect[n]].end(), smry_data.begin(), smry_data.begin() + to_ind + 1); - } - } - - fileH.close(); - ind--; - } - - for (auto kind : keyIndexVect) - m_vectorLoaded[kind] = true; -} - -void ExtESmry::loadData() -{ - this->loadData(m_keyword); -} - -const std::vector& ExtESmry::get(const std::string& name) -{ - if ( m_keyword_index[0].find(name) == m_keyword_index[0].end() ) - throw std::invalid_argument("summary key '" + name + "' not found"); - - int index = m_keyword_index[0].at(name); - - if (!m_vectorLoaded[index]){ - loadData({name}); - } - - return m_vectorData[index]; -} - -std::vector ExtESmry::dates() { - double time_unit = 24 * 3600; - std::vector d; - - for (const auto& t : this->get("TIME")) - d.push_back( this->m_startdat + std::chrono::duration_cast( std::chrono::duration( t * time_unit))); - - return d; -} - -std::vector ExtESmry::keywordList(const std::string& pattern) const -{ - std::vector list; - - for (const auto& key : m_keyword) - if (fnmatch( pattern.c_str(), key.c_str(), 0 ) == 0 ) - list.push_back(key); - - return list; -} - -bool ExtESmry::hasKey(const std::string &key) const -{ - return std::find(m_keyword.begin(), m_keyword.end(), key) != m_keyword.end(); -} - - - -}} // namespace Opm::ecl - diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/io/eclipse/OutputStream.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/io/eclipse/OutputStream.cpp deleted file mode 100644 index 263fbcdc16..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/io/eclipse/OutputStream.cpp +++ /dev/null @@ -1,814 +0,0 @@ -/* - Copyright (c) 2019 Equinor ASA - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include - -#include - -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -namespace { - namespace FileExtension - { - std::string separate(const int rptStep, - const bool formatted, - const char* fmt_prefix, - const char* unfmt_prefix) - { - std::ostringstream ext; - - const int cycle = 10 * 1000; - const int p_ix = rptStep / cycle; - const int n = rptStep % cycle; - - ext << (formatted ? fmt_prefix[p_ix] : unfmt_prefix[p_ix]) - << std::setw(4) << std::setfill('0') << n; - - return ext.str(); - } - - std::string init(const bool formatted) - { - return formatted ? "FINIT" : "INIT"; - } - - std::string restart(const int rptStep, - const bool formatted, - const bool unified) - { - if (unified) { - return formatted ? "FUNRST" : "UNRST"; - } - - return separate(rptStep, formatted, "FGH", "XYZ"); - } - - std::string rft(const bool formatted) - { - return formatted ? "FRFT" : "RFT"; - } - - std::string smspec(const bool formatted) - { - return formatted ? "FSMSPEC" : "SMSPEC"; - } - - std::string summary(const int rptStep, - const bool formatted, - const bool unified) - { - if (unified) { - return formatted ? "FUNSMRY" : "UNSMRY"; - } - - return separate(rptStep, formatted, "ABC", "STU"); - } - } // namespace FileExtension - - namespace Open - { - namespace Init - { - std::unique_ptr - write(const std::string& filename, - const bool isFmt) - { - return std::unique_ptr { - new Opm::EclIO::EclOutput { - filename, isFmt, std::ios_base::out - } - }; - } - } - - namespace Restart - { - std::unique_ptr - read(const std::string& filename) - { - // Bypass some of the internal logic of the ERst constructor. - // - // Specifically, the base class EclFile's constructor throws - // and outputs a highly visible diagnostic message if it is - // unable to open the file. The diagnostic message is very - // confusing to users if they are running a simulation case - // for the first time and will likely provoke a reaction along - // the lines of "well of course the restart file doesn't exist". - { - std::ifstream is(filename); - - if (! is) { - // Unable to open (does not exist?). Return null. - return {}; - } - } - - // File exists and can (could?) be opened. Attempt to form - // an ERst object on top of it. - return std::unique_ptr { - new Opm::EclIO::ERst{filename} - }; - } - - std::unique_ptr - writeNew(const std::string& filename, - const bool isFmt) - { - return std::unique_ptr { - new Opm::EclIO::EclOutput { - filename, isFmt, std::ios_base::out - } - }; - } - - std::unique_ptr - writeExisting(const std::string& filename, - const bool isFmt) - { - return std::unique_ptr { - new Opm::EclIO::EclOutput { - filename, isFmt, std::ios_base::app - } - }; - } - } // namespace Restart - - namespace Rft - { - std::unique_ptr - writeNew(const std::string& filename, - const bool isFmt) - { - return std::unique_ptr { - new Opm::EclIO::EclOutput { - filename, isFmt, std::ios_base::out - } - }; - } - - std::unique_ptr - writeExisting(const std::string& filename, - const bool isFmt) - { - return std::unique_ptr { - new Opm::EclIO::EclOutput { - filename, isFmt, std::ios_base::app - } - }; - } - } // namespace Rft - - namespace Smspec - { - std::unique_ptr - write(const std::string& filename, - const bool isFmt) - { - return std::unique_ptr { - new Opm::EclIO::EclOutput { - filename, isFmt, std::ios_base::out - } - }; - } - } // namespace Smspec - } // namespace Open -} // Anonymous namespace - -// ===================================================================== - -Opm::EclIO::OutputStream::Init:: -Init(const ResultSet& rset, - const Formatted& fmt) -{ - const auto fname = outputFileName(rset, FileExtension::init(fmt.set)); - - this->open(fname, fmt.set); -} - -Opm::EclIO::OutputStream::Init::~Init() -{} - -Opm::EclIO::OutputStream::Init::Init(Init&& rhs) - : stream_{ std::move(rhs.stream_) } -{} - -Opm::EclIO::OutputStream::Init& -Opm::EclIO::OutputStream::Init::operator=(Init&& rhs) -{ - this->stream_ = std::move(rhs.stream_); - - return *this; -} - -void -Opm::EclIO::OutputStream::Init:: -write(const std::string& kw, const std::vector& data) -{ - this->writeImpl(kw, data); -} - -void -Opm::EclIO::OutputStream::Init:: -write(const std::string& kw, const std::vector& data) -{ - this->writeImpl(kw, data); -} - -void -Opm::EclIO::OutputStream::Init:: -write(const std::string& kw, const std::vector& data) -{ - this->writeImpl(kw, data); -} - -void -Opm::EclIO::OutputStream::Init:: -write(const std::string& kw, const std::vector& data) -{ - this->writeImpl(kw, data); -} - -void -Opm::EclIO::OutputStream::Init:: -open(const std::string& fname, - const bool formatted) -{ - this->stream_ = Open::Init::write(fname, formatted); -} - -Opm::EclIO::EclOutput& -Opm::EclIO::OutputStream::Init::stream() -{ - return *this->stream_; -} - -namespace Opm { namespace EclIO { namespace OutputStream { - - template - void Init::writeImpl(const std::string& kw, - const std::vector& data) - { - this->stream().write(kw, data); - } - -}}} - -// ===================================================================== - -Opm::EclIO::OutputStream::Restart:: -Restart(const ResultSet& rset, - const int seqnum, - const Formatted& fmt, - const Unified& unif) -{ - const auto ext = FileExtension:: - restart(seqnum, fmt.set, unif.set); - - const auto fname = outputFileName(rset, ext); - - if (unif.set) { - // Run uses unified restart files. - this->openUnified(fname, fmt.set, seqnum); - - // Write SEQNUM value to stream to start new output sequence. - this->stream_->write("SEQNUM", std::vector{ seqnum }); - } - else { - // Run uses separate, not unified, restart files. Create a - // new output file and open an output stream on it. - this->openNew(fname, fmt.set); - } -} - -Opm::EclIO::OutputStream::Restart::~Restart() -{} - -Opm::EclIO::OutputStream::Restart::Restart(Restart&& rhs) - : stream_{ std::move(rhs.stream_) } -{} - -Opm::EclIO::OutputStream::Restart& -Opm::EclIO::OutputStream::Restart::operator=(Restart&& rhs) -{ - this->stream_ = std::move(rhs.stream_); - - return *this; -} - -void Opm::EclIO::OutputStream::Restart::message(const std::string& msg) -{ - this->stream().message(msg); -} - -void -Opm::EclIO::OutputStream::Restart:: -write(const std::string& kw, const std::vector& data) -{ - this->writeImpl(kw, data); -} - -void -Opm::EclIO::OutputStream::Restart:: -write(const std::string& kw, const std::vector& data) -{ - this->writeImpl(kw, data); -} - -void -Opm::EclIO::OutputStream::Restart:: -write(const std::string& kw, const std::vector& data) -{ - this->writeImpl(kw, data); -} - -void -Opm::EclIO::OutputStream::Restart:: -write(const std::string& kw, const std::vector& data) -{ - this->writeImpl(kw, data); -} - -void -Opm::EclIO::OutputStream::Restart:: -write(const std::string& kw, const std::vector& data) -{ - this->writeImpl(kw, data); -} - -void -Opm::EclIO::OutputStream::Restart:: -write(const std::string& kw, - const std::vector>& data) -{ - this->writeImpl(kw, data); -} - -void -Opm::EclIO::OutputStream::Restart:: -openUnified(const std::string& fname, - const bool formatted, - const int seqnum) -{ - // Determine if we're creating a new output/restart file or - // if we're opening an existing one, possibly at a specific - // write position. - auto rst = Open::Restart::read(fname); - - if (rst == nullptr) { - // No such unified restart file exists. Create new file. - this->openNew(fname, formatted); - } - else if (! rst->hasKey("SEQNUM")) { - // File with correct filename exists but does not appear - // to be an actual unified restart file. - throw std::invalid_argument { - "Purported existing unified restart file '" - + Opm::filesystem::path{fname}.filename().string() - + "' does not appear to be a unified restart file" - }; - } - else { - // Restart file exists and appears to be a unified restart - // resource. Open writable restart stream backed by the - // specific file. - this->openExisting(fname, formatted, - rst->restartStepWritePosition(seqnum)); - } -} - -void -Opm::EclIO::OutputStream::Restart:: -openNew(const std::string& fname, - const bool formatted) -{ - this->stream_ = Open::Restart::writeNew(fname, formatted); -} - -void -Opm::EclIO::OutputStream::Restart:: -openExisting(const std::string& fname, - const bool formatted, - const std::streampos writePos) -{ - this->stream_ = Open::Restart::writeExisting(fname, formatted); - - if (writePos == std::streampos(-1)) { - // No specified initial write position. Typically the case if - // requested SEQNUM value exceeds all existing SEQNUM values in - // 'fname'. This is effectively a simple append operation so - // no further actions required. - return; - } - - // The user specified an initial write position. Resize existing - // file (as if by POSIX function ::truncate()) to requested size, - // and place output position at that position (i.e., new EOF). This - // case typically corresponds to reopening a unified restart file at - // the start of a particular SEQNUM keyword. - // - // Note that this intentionally operates on the file/path backing the - // already opened 'stream_'. In other words, 'open' followed by - // resize_file() followed by seekp() is the intended and expected - // order of operations. - - Opm::filesystem::resize_file(fname, writePos); - - if (! this->stream_->ofileH.seekp(0, std::ios_base::end)) { - throw std::invalid_argument { - "Unable to Seek to Write Position " + - std::to_string(writePos) + " of File '" - + fname + "'" - }; - } -} - -Opm::EclIO::EclOutput& -Opm::EclIO::OutputStream::Restart::stream() -{ - return *this->stream_; -} - -namespace Opm { namespace EclIO { namespace OutputStream { - - template - void Restart::writeImpl(const std::string& kw, - const std::vector& data) - { - this->stream().write(kw, data); - } - -}}} - -// ===================================================================== - -Opm::EclIO::OutputStream::RFT:: -RFT(const ResultSet& rset, - const Formatted& fmt, - const OpenExisting& existing) -{ - const auto fname = outputFileName(rset, FileExtension::rft(fmt.set)); - - this->open(fname, fmt.set, existing.set); -} - -Opm::EclIO::OutputStream::RFT::~RFT() -{} - -Opm::EclIO::OutputStream::RFT::RFT(RFT&& rhs) - : stream_{ std::move(rhs.stream_) } -{} - -Opm::EclIO::OutputStream::RFT& -Opm::EclIO::OutputStream::RFT::operator=(RFT&& rhs) -{ - this->stream_ = std::move(rhs.stream_); - - return *this; -} - -void -Opm::EclIO::OutputStream::RFT:: -write(const std::string& kw, const std::vector& data) -{ - this->writeImpl(kw, data); -} - -void -Opm::EclIO::OutputStream::RFT:: -write(const std::string& kw, const std::vector& data) -{ - this->writeImpl(kw, data); -} - -void -Opm::EclIO::OutputStream::RFT:: -write(const std::string& kw, - const std::vector>& data) -{ - this->writeImpl(kw, data); -} - -void -Opm::EclIO::OutputStream::RFT:: -open(const std::string& fname, - const bool formatted, - const bool existing) -{ - this->stream_ = existing - ? Open::Rft::writeExisting(fname, formatted) - : Open::Rft::writeNew (fname, formatted); -} - -Opm::EclIO::EclOutput& -Opm::EclIO::OutputStream::RFT::stream() -{ - return *this->stream_; -} - -namespace Opm { namespace EclIO { namespace OutputStream { - - template - void RFT::writeImpl(const std::string& kw, - const std::vector& data) - { - this->stream().write(kw, data); - } - -}}} // namespace Opm::EclIO::OutputStream - -// ===================================================================== - -namespace Opm { namespace EclIO { namespace OutputStream { - -namespace { - bool validUnitConvention(const SummarySpecification::UnitConvention uconv) - { - using UConv = SummarySpecification::UnitConvention; - - return (uconv == UConv::Metric) - || (uconv == UConv::Field) - || (uconv == UConv::Lab) - || (uconv == UConv::Pvt_M); - } - - int unitConvention(const SummarySpecification::UnitConvention uconv) - { - const auto unit = static_cast(uconv); - - if (! validUnitConvention(uconv)) { - throw std::invalid_argument { - "Invalid Unit Convention: " + - std::to_string(unit) - }; - } - - return unit; - } - - int makeRestartStep(const SummarySpecification::RestartSpecification& restart) - { - return (restart.step >= 0) ? restart.step : -1; - } - - std::vector> - restartRoot(const SummarySpecification::RestartSpecification& restart) - { - const auto substrLength = std::size_t{8}; - const auto maxSubstrings = std::size_t{9}; - const auto maxStringLength = maxSubstrings * substrLength; - - auto ret = std::vector>{}; - - if (restart.root.empty()) { - ret.resize(maxSubstrings); - return ret; - } - - if (restart.root.size() > maxStringLength) { - const auto msg = "Restart root name of size " - + std::to_string(restart.root.size()) - + " exceeds " - + std::to_string(maxStringLength) - + " character limit (Ignored)"; - - Opm::OpmLog::warning(msg); - - ret.resize(maxSubstrings); - return ret; - } - - ret.resize(maxSubstrings); - - auto remain = restart.root.size(); - - auto i = decltype(ret.size()){0}; - auto p = decltype(remain){0}; - while (remain > decltype(remain){0}) { - const auto nchar = std::min(remain, substrLength); - ret[i++] = restart.root.substr(p, nchar); - - remain -= nchar; - p += nchar; - } - - return ret; - } - - int microSeconds(const int sec) - { - using std::chrono::microseconds; - using std::chrono::seconds; - - const auto us = microseconds(seconds(sec)); - - return static_cast(us.count()); - } - - std::vector - makeStartDate(const SummarySpecification::StartTime start) - { - const auto timepoint = std::chrono::system_clock::to_time_t(start); - const auto tm = *std::gmtime(&timepoint); - - // { Day, Month, Year, Hour, Minute, Seconds } - - return { - // 1..31 1..12 - tm.tm_mday, tm.tm_mon + 1, - - tm.tm_year + 1900, - - // 0..23 0..59 - tm.tm_hour, tm.tm_min, - - // 0..59,999,999 - microSeconds(std::min(tm.tm_sec, 59)) - }; - } - - std::vector - makeDimens(const int nparam, - const std::array& cartDims, - const int istart) - { - return { nparam, cartDims[0], cartDims[1], cartDims[2], 0, istart }; - } -} // Anonymous - -}}} // namespace Opm::EclIO::OutputStream - -void -Opm::EclIO::OutputStream::SummarySpecification:: -Parameters::add(const std::string& keyword, - const std::string& wgname, - const int num, - const std::string& unit) -{ - this->keywords.emplace_back(keyword); - this->wgnames .emplace_back(wgname); - this->nums .push_back (num); - this->units .emplace_back(unit); -} - -Opm::EclIO::OutputStream::SummarySpecification:: -SummarySpecification(const ResultSet& rset, - const Formatted& fmt, - const UnitConvention uconv, - const std::array& cartDims, - const RestartSpecification& restart, - const StartTime start) - : unit_ (unitConvention(uconv)) - , restartStep_(makeRestartStep(restart)) - , cartDims_ (cartDims) - , startDate_ (start) - , restart_ (restartRoot(restart)) -{ - const auto fname = outputFileName(rset, FileExtension::smspec(fmt.set)); - - this->stream_ = Open::Smspec::write(fname, fmt.set); -} - -Opm::EclIO::OutputStream::SummarySpecification::~SummarySpecification() -{} - -Opm::EclIO::OutputStream::SummarySpecification:: -SummarySpecification(SummarySpecification && rhs) - : unit_ (rhs.unit_) - , restartStep_(rhs.restartStep_) - , cartDims_ (std::move(rhs.cartDims_)) - , startDate_ (std::move(rhs.startDate_)) - , restart_ (rhs.restart_) - , stream_ (std::move(rhs.stream_)) -{} - -Opm::EclIO::OutputStream::SummarySpecification& -Opm::EclIO::OutputStream::SummarySpecification:: -operator=(SummarySpecification&& rhs) -{ - this->unit_ = rhs.unit_; - this->restartStep_ = rhs.restartStep_; - - this->cartDims_ = std::move(rhs.cartDims_); - this->startDate_ = std::move(rhs.startDate_); - this->restart_ = rhs.restart_; - this->stream_ = std::move(rhs.stream_); - - return *this; -} - -void -Opm::EclIO::OutputStream:: -SummarySpecification::write(const Parameters& params) -{ - this->rewindStream(); - - auto& smspec = this->stream(); - - // Pretend to be ECLIPSE 100 - smspec.write("INTEHEAD", std::vector{ this->unit_, 100 }); - - // if (! this->restart_.empty()) - smspec.write("RESTART", this->restart_); - - smspec.write("DIMENS", - makeDimens(static_cast(params.keywords.size()), - this->cartDims_, this->restartStep_)); - - smspec.write("KEYWORDS", params.keywords); - smspec.write("WGNAMES", params.wgnames); - smspec.write("NUMS", params.nums); - smspec.write("UNITS", params.units); - - smspec.write("STARTDAT", makeStartDate(this->startDate_)); - - this->flushStream(); -} - -void Opm::EclIO::OutputStream::SummarySpecification::rewindStream() -{ - // Benefits from EclOutput friendship - const auto position = std::ofstream::pos_type{0}; - - this->stream().ofileH.seekp(position, std::ios_base::beg); -} - -void Opm::EclIO::OutputStream::SummarySpecification::flushStream() -{ - this->stream().flushStream(); -} - -Opm::EclIO::EclOutput& -Opm::EclIO::OutputStream::SummarySpecification::stream() -{ - return *this->stream_; -} - -// ===================================================================== - -std::unique_ptr -Opm::EclIO::OutputStream::createSummaryFile(const ResultSet& rset, - const int seqnum, - const Formatted& fmt, - const Unified& unif) -{ - const auto ext = FileExtension::summary(seqnum, fmt.set, unif.set); - - return std::unique_ptr { - new Opm::EclIO::EclOutput { - outputFileName(rset, ext), - fmt.set, std::ios_base::out - } - }; -} - -// ===================================================================== - -std::string -Opm::EclIO::OutputStream::outputFileName(const ResultSet& rsetDescriptor, - const std::string& ext) -{ - namespace fs = Opm::filesystem; - - // Allow baseName = "CASE", "CASE.", "CASE.N", or "CASE.N.". - auto fname = fs::path { - rsetDescriptor.baseName - + (rsetDescriptor.baseName.back() == '.' ? "" : ".") - + "REPLACE" - }.replace_extension(ext); - - return (fs::path { rsetDescriptor.outputDir } / fname) - .generic_string(); -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/io/eclipse/SummaryNode.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/io/eclipse/SummaryNode.cpp deleted file mode 100644 index 04af814493..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/io/eclipse/SummaryNode.cpp +++ /dev/null @@ -1,249 +0,0 @@ -/* - Copyright 2020 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include - -#include -#include -#include -#include -#include - -namespace { - -constexpr bool use_number(Opm::EclIO::SummaryNode::Category category) { - switch (category) { - case Opm::EclIO::SummaryNode::Category::Aquifer: [[fallthrough]]; - case Opm::EclIO::SummaryNode::Category::Block: [[fallthrough]]; - case Opm::EclIO::SummaryNode::Category::Connection: [[fallthrough]]; - case Opm::EclIO::SummaryNode::Category::Region: [[fallthrough]]; - case Opm::EclIO::SummaryNode::Category::Segment: - return true; - case Opm::EclIO::SummaryNode::Category::Field: [[fallthrough]]; - case Opm::EclIO::SummaryNode::Category::Group: [[fallthrough]]; - case Opm::EclIO::SummaryNode::Category::Node: [[fallthrough]]; - case Opm::EclIO::SummaryNode::Category::Miscellaneous: [[fallthrough]]; - case Opm::EclIO::SummaryNode::Category::Well: - return false; - } - - static_assert("Unhandled category in use_number"); - return false; // Never reached, but quells compiler warning -} - -constexpr bool use_name(Opm::EclIO::SummaryNode::Category category) { - switch (category) { - case Opm::EclIO::SummaryNode::Category::Connection: [[fallthrough]]; - case Opm::EclIO::SummaryNode::Category::Group: [[fallthrough]]; - case Opm::EclIO::SummaryNode::Category::Segment: [[fallthrough]]; - case Opm::EclIO::SummaryNode::Category::Node: [[fallthrough]]; - case Opm::EclIO::SummaryNode::Category::Well: - return true; - case Opm::EclIO::SummaryNode::Category::Aquifer: [[fallthrough]]; - case Opm::EclIO::SummaryNode::Category::Block: [[fallthrough]]; - case Opm::EclIO::SummaryNode::Category::Field: [[fallthrough]]; - case Opm::EclIO::SummaryNode::Category::Miscellaneous: [[fallthrough]]; - case Opm::EclIO::SummaryNode::Category::Region: - return false; - } - - static_assert("Unhandled category in use_name"); - return false; // Never reached, but quells compiler warning -} - -std::string default_number_renderer(const Opm::EclIO::SummaryNode& node) { - return std::to_string(node.number); -} - -bool is_node_keyword(const std::string& keyword) -{ - static const auto node_kw = std::unordered_set { - "GPR", - }; - - return node_kw.find(keyword) != node_kw.end(); -} - -Opm::EclIO::SummaryNode::Category -distinguish_group_from_node(const std::string& keyword) -{ - return is_node_keyword(keyword) - ? Opm::EclIO::SummaryNode::Category::Node - : Opm::EclIO::SummaryNode::Category::Group; -} -} - -std::string Opm::EclIO::SummaryNode::unique_key(number_renderer render_number) const { - - if (category == Category::Well_Lgr) { - return create_key_lgr_well(keyword, wgname, lgrname); - } - else if (category == Category::Connection_Lgr) { - return create_key_lgr_completion(keyword, wgname, lgrname, lgri, lgrj, lgrk); - } - else if (category == Category::Block_Lgr) { - return create_key_lgr_block(keyword, lgrname, lgri, lgrj, lgrk); - } - - std::vector key_parts { keyword } ; - if (auto opt = display_name()) - key_parts.emplace_back(opt.value()); - - if (auto opt = display_number(render_number)) - key_parts.emplace_back(opt.value()); - - auto compose_key = [](std::string& key, const std::string& key_part) -> std::string { - constexpr auto delimiter { ':' } ; - return key.empty() ? key_part : key + delimiter + key_part; - }; - - return std::accumulate(std::begin(key_parts), std::end(key_parts), std::string(), compose_key); -} - -std::string Opm::EclIO::SummaryNode::unique_key() const { - return unique_key(default_number_renderer); -} - -bool Opm::EclIO::SummaryNode::is_user_defined() const { - static const std::unordered_set udq_blacklist { - "AUTOCOAR", - "AUTOREF", - "FULLIMP", - "GUIDECAL", - "GUIDERAT", - "GUPFREQ", - "RUNSPEC", - "RUNSUM", - "SUMMARY", - "SUMTHIN", - "SURF", - "SURFACT", - "SURFACTW", - "SURFADDW", - "SURFADS", - "SURFCAPD", - "SURFESAL", - "SURFNUM", - "SURFOPTS", - "SURFROCK", - "SURFST", - "SURFSTES", - "SURFVISC", - "SURFWNUM", - } ; - - static const std::regex user_defined_regex { "[ABCFGRSW]U[A-Z0-9_]+" } ; - - const bool matched { std::regex_match(keyword, user_defined_regex) } ; - const bool blacklisted { udq_blacklist.find(keyword) != udq_blacklist.end() } ; - - return matched && !blacklisted; -} - -Opm::EclIO::SummaryNode::Category Opm::EclIO::SummaryNode::category_from_keyword( - const std::string& keyword, - const std::unordered_set& miscellaneous_keywords -) { - if (keyword.length() == 0) { - return Category::Miscellaneous; - } - - if (miscellaneous_keywords.find(keyword) != miscellaneous_keywords.end()) { - return Category::Miscellaneous; - } - - switch (keyword[0]) { - case 'A': return Category::Aquifer; - case 'B': return Category::Block; - case 'C': return Category::Connection; - case 'F': return Category::Field; - case 'G': return distinguish_group_from_node(keyword); - case 'N': return Category::Network; - case 'R': return Category::Region; - case 'S': return Category::Segment; - case 'W': return Category::Well; - default: break; - } - - if (keyword.length() > 1) - { - // Then check LGR categories - std::string firstTwoLetters = keyword.substr(0, 2); - - if (firstTwoLetters == "LB") return Category::Block_Lgr; - if (firstTwoLetters == "LC") return Category::Connection_Lgr; - if (firstTwoLetters == "LW") return Category::Well_Lgr; - } - - return Category::Miscellaneous; -} - -std::optional Opm::EclIO::SummaryNode::display_name() const { - if (use_name(category)) { - return wgname; - } else { - return std::nullopt; - } -} - -std::optional Opm::EclIO::SummaryNode::display_number() const { - return display_number(default_number_renderer); -} - -bool Opm::EclIO::SummaryNode::isRegionToRegion() const { - if ((category == SummaryNode::Category::Region) && - (keyword.size() > 2 && keyword[2] == 'F')) return true; - - return false; -} - -std::pair Opm::EclIO::SummaryNode::regionToRegionNumbers() const { - if (category != SummaryNode::Category::Region) return { -1, -1 }; - - if (keyword.size() > 2 && keyword[2] == 'F') { - const auto r1 = number % (1 << 15); - const auto r2 = (number / (1 << 15)) - 10; - return { r1, r2 }; - } - - return { -1, -1 }; -} - -std::string Opm::EclIO::SummaryNode::create_key_lgr_well(const std::string& keyword, - const std::string& wgname, const std::string& lgrname) { - return keyword + ":" + wgname + ":" + lgrname; -} - -std::string Opm::EclIO::SummaryNode::create_key_lgr_completion(const std::string& keyword, const std::string& wgname, - const std::string& lgrname, int i, int j, int k) { - return keyword + ":" + wgname + ":" + lgrname + ":" + std::to_string(i) + "," + std::to_string(j) + "," + std::to_string(k); -} - -std::string Opm::EclIO::SummaryNode::create_key_lgr_block(const std::string& keyword, const std::string& lgrname, - int i, int j, int k) { - return keyword + ":" + lgrname + ":" + std::to_string(i) + "," + std::to_string(j) + "," + std::to_string(k); -} - -std::optional Opm::EclIO::SummaryNode::display_number(number_renderer render_number) const { - if (use_number(category)) { - return render_number(*this); - } else { - return std::nullopt; - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/io/eclipse/rst/connection.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/io/eclipse/rst/connection.cpp deleted file mode 100644 index adddd4835f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/io/eclipse/rst/connection.cpp +++ /dev/null @@ -1,113 +0,0 @@ -/* - Copyright 2020 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include - -#include -#include -#include -#include - - -namespace VI = ::Opm::RestartIO::Helpers::VectorItems; - -namespace Opm { -namespace RestartIO { - -namespace { - -template -T from_int(int); - -template <> -Connection::State from_int(int int_state) { - if (int_state == 1) - return Connection::State::OPEN; - - return Connection::State::SHUT; -} - -template <> -Connection::Direction from_int(int int_dir) { - switch (int_dir) { - case 1: - return Connection::Direction::X; - case 2: - return Connection::Direction::Y; - case 3: - return Connection::Direction::Z; - default: - throw std::invalid_argument("Can not convert: " + std::to_string(int_dir) + " to string"); - } -} - -/* - That the CTFKind variable comes from a float looks extremely suspicious; but - it has been double checked ... -*/ -Connection::CTFKind from_float(float float_kind) { - if (float_kind == 0) - return Connection::CTFKind::Defaulted; - - return Connection::CTFKind::DeckValue; -} -} - -double RstConnection::inverse_peaceman(double cf, double kh, double rw, double skin) { - auto alpha = 3.14159265 * 2 * kh / cf - skin; - return rw * std::exp(alpha); -} - -using M = ::Opm::UnitSystem::measure; - -RstConnection::RstConnection(const ::Opm::UnitSystem& unit_system, std::size_t rst_index_, int nsconz, const int* icon, const float* scon, const double* xcon) : - rst_index( rst_index_), - ijk( {icon[VI::IConn::CellI] - 1, icon[VI::IConn::CellJ] - 1, icon[VI::IConn::CellK] - 1}), - state( from_int(icon[VI::IConn::ConnStat])), - drain_sat_table( icon[VI::IConn::Drainage]), - imb_sat_table( icon[VI::IConn::Imbibition]), - completion( icon[VI::IConn::ComplNum]), - dir( from_int(icon[VI::IConn::ConnDir])), - segment( icon[VI::IConn::Segment]), - cf_kind( from_float(1.0)), - skin_factor( scon[VI::SConn::SkinFactor]), - cf( unit_system.to_si(M::transmissibility, scon[VI::SConn::ConnTrans])), - depth( unit_system.to_si(M::length, scon[VI::SConn::Depth])), - diameter( unit_system.to_si(M::length, scon[VI::SConn::Diameter])), - kh( unit_system.to_si(M::effective_Kh, scon[VI::SConn::EffectiveKH])), - segdist_end( unit_system.to_si(M::length, scon[VI::SConn::SegDistEnd])), - segdist_start( unit_system.to_si(M::length, scon[VI::SConn::SegDistStart])), - oil_rate( unit_system.to_si(M::liquid_surface_rate, xcon[VI::XConn::OilRate])), - water_rate( unit_system.to_si(M::liquid_surface_rate, xcon[VI::XConn::WaterRate])), - gas_rate( unit_system.to_si(M::gas_surface_rate, xcon[VI::XConn::GasRate])), - pressure( unit_system.to_si(M::pressure, xcon[VI::XConn::Pressure])), - resv_rate( unit_system.to_si(M::rate, xcon[VI::XConn::ResVRate])), - r0( RstConnection::inverse_peaceman(this->cf, this->kh, this->diameter/2, this->skin_factor) ) - /* - r0: The r0 quantity is currently not written or read from the restart - file. If the r0 value is given explicitly in the deck it is possible - to give a value which is not consistent with the Peaceman formula - - that value will be lost when loading back from a restart file. - */ -{ - if (static_cast(nsconz) > VI::SConn::CFInDeck) - this->cf_kind = from_float(scon[VI::SConn::CFInDeck]); -} - -} -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/io/eclipse/rst/group.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/io/eclipse/rst/group.cpp deleted file mode 100644 index 7971066e48..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/io/eclipse/rst/group.cpp +++ /dev/null @@ -1,98 +0,0 @@ -/* - Copyright 2020 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include - -#include -#include - -#include -#include - - -namespace VI = ::Opm::RestartIO::Helpers::VectorItems; - -namespace Opm { -namespace RestartIO { - -using M = ::Opm::UnitSystem::measure; - -double sgrp_value(float raw_value) { - const auto infty = 1.0e+20f; - if (std::abs(raw_value) == infty) - return 0; - else - return raw_value; -} - -RstGroup::RstGroup(const ::Opm::UnitSystem& unit_system, - const RstHeader& header, - const std::string* zwel, - const int * igrp, - const float * sgrp, - const double * xgrp) : - name(trim_copy(zwel[0])), - parent_group(igrp[header.nwgmax + VI::IGroup::ParentGroup] ), - // prod_active_cmode(igrp[header.nwgmax + VI::IGroup::ProdActiveCMode]), - prod_cmode(igrp[header.nwgmax + VI::IGroup::GConProdCMode]), - winj_cmode(igrp[header.nwgmax + VI::IGroup::WInjCMode]), - ginj_cmode(igrp[header.nwgmax + VI::IGroup::GInjCMode]), - guide_rate_def(igrp[header.nwgmax + VI::IGroup::GuideRateDef]), - // The values oil_rate_limit -> gas_voidage_limit will be used in UDA - // values. The UDA values are responsible for unit conversion and raw values - // are internalized here. - oil_rate_limit( sgrp_value(sgrp[VI::SGroup::OilRateLimit])), - water_rate_limit( sgrp_value(sgrp[VI::SGroup::WatRateLimit])), - gas_rate_limit( sgrp_value(sgrp[VI::SGroup::GasRateLimit])), - liquid_rate_limit( sgrp_value(sgrp[VI::SGroup::LiqRateLimit])), - water_surface_limit( sgrp_value(sgrp[VI::SGroup::waterSurfRateLimit])), - water_reservoir_limit( sgrp_value(sgrp[VI::SGroup::waterResRateLimit])), - water_reinject_limit( sgrp_value(sgrp[VI::SGroup::waterReinjectionLimit])), - water_voidage_limit( sgrp_value(sgrp[VI::SGroup::waterVoidageLimit])), - gas_surface_limit( sgrp_value(sgrp[VI::SGroup::gasSurfRateLimit])), - gas_reservoir_limit( sgrp_value(sgrp[VI::SGroup::gasResRateLimit])), - gas_reinject_limit( sgrp_value(sgrp[VI::SGroup::gasReinjectionLimit])), - gas_voidage_limit( sgrp_value(sgrp[VI::SGroup::gasVoidageLimit])), - oil_production_rate( unit_system.to_si(M::liquid_surface_rate, xgrp[VI::XGroup::OilPrRate])), - water_production_rate( unit_system.to_si(M::liquid_surface_rate, xgrp[VI::XGroup::WatPrRate])), - gas_production_rate( unit_system.to_si(M::gas_surface_rate, xgrp[VI::XGroup::GasPrRate])), - liquid_production_rate( unit_system.to_si(M::liquid_surface_rate, xgrp[VI::XGroup::LiqPrRate])), - water_injection_rate( unit_system.to_si(M::liquid_surface_rate, xgrp[VI::XGroup::WatInjRate])), - gas_injection_rate( unit_system.to_si(M::gas_surface_rate, xgrp[VI::XGroup::GasInjRate])), - wct( unit_system.to_si(M::water_cut, xgrp[VI::XGroup::WatCut])), - gor( unit_system.to_si(M::gas_oil_ratio, xgrp[VI::XGroup::GORatio])), - oil_production_total( unit_system.to_si(M::liquid_surface_volume, xgrp[VI::XGroup::OilPrTotal])), - water_production_total( unit_system.to_si(M::liquid_surface_volume, xgrp[VI::XGroup::WatPrTotal])), - gas_production_total( unit_system.to_si(M::gas_surface_volume, xgrp[VI::XGroup::GasPrTotal])), - voidage_production_total( unit_system.to_si(M::geometric_volume, xgrp[VI::XGroup::VoidPrTotal])), - water_injection_total( unit_system.to_si(M::liquid_surface_volume, xgrp[VI::XGroup::WatInjTotal])), - gas_injection_total( unit_system.to_si(M::gas_surface_volume, xgrp[VI::XGroup::GasInjTotal])), - voidage_injection_total( unit_system.to_si(M::volume, xgrp[VI::XGroup::VoidInjTotal])), - oil_production_potential( unit_system.to_si(M::liquid_surface_volume, xgrp[VI::XGroup::OilPrPot])), - water_production_potential( unit_system.to_si(M::liquid_surface_volume, xgrp[VI::XGroup::WatPrPot])), - history_total_oil_production( unit_system.to_si(M::liquid_surface_volume, xgrp[VI::XGroup::HistOilPrTotal])), - history_total_water_production(unit_system.to_si(M::liquid_surface_volume, xgrp[VI::XGroup::HistWatPrTotal])), - history_total_water_injection( unit_system.to_si(M::liquid_surface_volume, xgrp[VI::XGroup::HistWatInjTotal])), - history_total_gas_production( unit_system.to_si(M::gas_surface_volume, xgrp[VI::XGroup::HistGasPrTotal])), - history_total_gas_injection( unit_system.to_si(M::gas_surface_volume, xgrp[VI::XGroup::HistGasInjTotal])) -{ -} - - -} -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/io/eclipse/rst/header.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/io/eclipse/rst/header.cpp deleted file mode 100644 index 18c0509b3a..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/io/eclipse/rst/header.cpp +++ /dev/null @@ -1,130 +0,0 @@ -/* - Copyright 2020 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include - -#include -#include -#include -#include -#include -#include - -namespace VI = ::Opm::RestartIO::Helpers::VectorItems; -using M = ::Opm::UnitSystem::measure; - -namespace Opm { -namespace RestartIO { - -RstHeader::RstHeader(const Opm::UnitSystem& unit_system, const std::vector& intehead, const std::vector& logihead, const std::vector& doubhead) : - nx(intehead[VI::intehead::NX]), - ny(intehead[VI::intehead::NY]), - nz(intehead[VI::intehead::NZ]), - nactive(intehead[VI::intehead::NACTIV]), - num_wells(intehead[VI::intehead::NWELLS]), - ncwmax(intehead[VI::intehead::NCWMAX]), - max_wells_in_group(intehead[VI::intehead::NWGMAX]), - max_groups_in_field(intehead[VI::intehead::NGMAXZ]), - max_wells_in_field(intehead[VI::intehead::NWMAXZ]), - year(intehead[VI::intehead::YEAR]), - month(intehead[VI::intehead::MONTH]), - mday(intehead[VI::intehead::DAY]), - hour(intehead[VI::intehead::IHOURZ]), - minute(intehead[VI::intehead::IMINTS]), - microsecond(intehead[VI::intehead::ISECND]), - phase_sum(intehead[VI::intehead::PHASE]), - niwelz(intehead[VI::intehead::NIWELZ]), - nswelz(intehead[VI::intehead::NSWELZ]), - nxwelz(intehead[VI::intehead::NXWELZ]), - nzwelz(intehead[VI::intehead::NZWELZ]), - niconz(intehead[VI::intehead::NICONZ]), - nsconz(intehead[VI::intehead::NSCONZ]), - nxconz(intehead[VI::intehead::NXCONZ]), - nigrpz(intehead[VI::intehead::NIGRPZ]), - nsgrpz(intehead[VI::intehead::NSGRPZ]), - nxgrpz(intehead[VI::intehead::NXGRPZ]), - nzgrpz(intehead[VI::intehead::NZGRPZ]), - ncamax(intehead[VI::intehead::NCAMAX]), - niaaqz(intehead[VI::intehead::NIAAQZ]), - nsaaqz(intehead[VI::intehead::NSAAQZ]), - nxaaqz(intehead[VI::intehead::NXAAQZ]), - nicaqz(intehead[VI::intehead::NICAQZ]), - nscaqz(intehead[VI::intehead::NSCAQZ]), - nacaqz(intehead[VI::intehead::NACAQZ]), - tstep(intehead[VI::intehead::NUM_SOLVER_STEPS]), - report_step(intehead[VI::intehead::REPORT_STEP]), - newtmx(intehead[VI::intehead::NEWTMX]), - newtmn(intehead[VI::intehead::NEWTMN]), - litmax(intehead[VI::intehead::LITMAX]), - litmin(intehead[VI::intehead::LITMIN]), - mxwsit(intehead[VI::intehead::MXWSIT]), - mxwpit(intehead[VI::intehead::MXWPIT]), - version(intehead[VI::intehead::VERSION]), - iprog(intehead[VI::intehead::IPROG]), - nsegwl(intehead[VI::intehead::NSEGWL]), - nswlmx(intehead[VI::intehead::NSWLMX]), - nsegmx(intehead[VI::intehead::NSEGMX]), - nlbrmx(intehead[VI::intehead::NLBRMX]), - nisegz(intehead[VI::intehead::NISEGZ]), - nrsegz(intehead[VI::intehead::NRSEGZ]), - nilbrz(intehead[VI::intehead::NILBRZ]), - ntfip(intehead[VI::intehead::NTFIP]), - nmfipr(intehead[VI::intehead::NMFIPR]), - ngroup(intehead[VI::intehead::NGRP]), - nwgmax(intehead[VI::intehead::NWGMAX]), - // - e300_radial(logihead[VI::logihead::E300Radial]), - e100_radial(logihead[VI::logihead::E100Radial]), - enable_hysteris(logihead[VI::logihead::Hyster]), - enable_msw(logihead[VI::logihead::HasMSWells]), - is_live_oil(logihead[VI::logihead::IsLiveOil]), - is_wet_gas(logihead[VI::logihead::IsWetGas]), - const_comp_oil(logihead[VI::logihead::ConstCo]), - dir_relperm(logihead[VI::logihead::DirKr]), - reversible_relperm(logihead[VI::logihead::E100RevKr]), - endscale(logihead[VI::logihead::EndScale]), - dir_eps(logihead[VI::logihead::DirEPS]), - reversible_eps(logihead[VI::logihead::RevEPS]), - alt_eps(logihead[VI::logihead::AltEPS]), - group_control_active(intehead[VI::intehead::NGRNPH] == 1), - // - next_timestep1(unit_system.to_si(M::time, doubhead[VI::doubhead::TsInit])), - next_timestep2(0), - max_timestep(unit_system.to_si(M::time, doubhead[VI::doubhead::TsMaxz])), - guide_rate_a(doubhead[VI::doubhead::GRpar_a]), - guide_rate_b(doubhead[VI::doubhead::GRpar_b]), - guide_rate_c(doubhead[VI::doubhead::GRpar_c]), - guide_rate_d(doubhead[VI::doubhead::GRpar_d]), - guide_rate_e(doubhead[VI::doubhead::GRpar_e]), - guide_rate_f(doubhead[VI::doubhead::GRpar_f]), - guide_rate_delay(unit_system.to_si(M::time, doubhead[VI::doubhead::GRpar_int])), - guide_rate_damping(doubhead[VI::doubhead::GRpar_damp]), - udq_range(doubhead[VI::doubhead::UdqPar_2]), - udq_undefined(doubhead[VI::doubhead::UdqPar_3]), - udq_eps(doubhead[VI::doubhead::UdqPar_4]) -{ -} - -std::pair RstHeader::restart_info() const { - return std::make_pair(asTimeT(TimeStampUTC(this->year, this->month, this->mday)), - std::size_t(this->report_step)); -} - - -} -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/io/eclipse/rst/segment.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/io/eclipse/rst/segment.cpp deleted file mode 100644 index 2a5aad35c8..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/io/eclipse/rst/segment.cpp +++ /dev/null @@ -1,93 +0,0 @@ -/* - Copyright 2020 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ -#include - -#include -#include -#include -#include -#include - -#include "src/opm/parser/eclipse/EclipseState/Schedule/MSW/icd_convert.hpp" - -namespace VI = ::Opm::RestartIO::Helpers::VectorItems; - -namespace Opm { - -namespace { - -template -T from_ecl(int ecl_value); - -template <> -Segment::SegmentType from_ecl(int int_type) { - return Segment::type_from_int(int_type); -} - -} - -namespace RestartIO { - -using M = ::Opm::UnitSystem::measure; - -namespace { -double area_to_si(const UnitSystem& unit_system, double raw_value) { - return unit_system.to_si( M::length, unit_system.to_si( M::length, raw_value)); -} -} - - -RstSegment::RstSegment(const ::Opm::UnitSystem& unit_system, int segment_number, const int * iseg, const double * rseg) : - segment( segment_number), - outlet_segment( iseg[VI::ISeg::OutSeg]), - branch( iseg[VI::ISeg::BranchNo]), - segment_type( from_ecl(iseg[VI::ISeg::SegmentType])), - icd_scaling_mode( iseg[VI::ISeg::ICDScalingMode]), - icd_status( from_int(iseg[VI::ISeg::ICDOpenShutFlag])), - dist_outlet( unit_system.to_si(M::length, rseg[VI::RSeg::DistOutlet])), - outlet_dz( unit_system.to_si(M::length, rseg[VI::RSeg::OutletDepthDiff])), - diameter( unit_system.to_si(M::length, rseg[VI::RSeg::SegDiam])), - roughness( unit_system.to_si(M::length, rseg[VI::RSeg::SegRough])), - area( area_to_si(unit_system, rseg[VI::RSeg::SegArea])), - volume( unit_system.to_si(M::volume, rseg[VI::RSeg::SegVolume])), - dist_bhp_ref( unit_system.to_si(M::length, rseg[VI::RSeg::DistBHPRef])), - bhp_ref_dz( unit_system.to_si(M::length, rseg[VI::RSeg::DepthBHPRef])), - total_flow( unit_system.to_si(M::rate, rseg[VI::RSeg::TotFlowRate])), - water_flow_fraction( rseg[VI::RSeg::WatFlowFract]), - gas_flow_fraction( rseg[VI::RSeg::GasFlowFract]), - pressure( unit_system.to_si(M::pressure, rseg[VI::RSeg::Pressure])), - valve_length( unit_system.to_si(M::length, rseg[VI::RSeg::ValveLength])), - valve_area( area_to_si( unit_system, rseg[VI::RSeg::ValveArea])), - valve_flow_coeff( rseg[VI::RSeg::ValveFlowCoeff]), - valve_max_area( area_to_si(unit_system, rseg[VI::RSeg::ValveMaxArea])), - base_strength( unit_system.to_si( M::icd_strength, rseg[VI::RSeg::DeviceBaseStrength])), - fluid_density( unit_system.to_si(M::density, rseg[VI::RSeg::CalibrFluidDensity])), - fluid_viscosity( unit_system.to_si(M::viscosity, rseg[VI::RSeg::CalibrFluidViscosity])), - critical_water_fraction( rseg[VI::RSeg::CriticalWaterFraction]), - transition_region_width(unit_system.to_si(M::length, rseg[VI::RSeg::TransitionRegWidth])), - max_emulsion_ratio( rseg[VI::RSeg::MaxEmulsionRatio]), - max_valid_flow_rate( unit_system.to_si(M::rate, rseg[VI::RSeg::MaxValidFlowRate])), - icd_length( unit_system.to_si(M::rate, rseg[VI::RSeg::ICDLength])), - valve_area_fraction( rseg[VI::RSeg::ValveAreaFraction]) -{ - if (iseg[VI::ISeg::InSegCurBranch] != 0) - this->inflow_segments.push_back(iseg[VI::ISeg::InSegCurBranch]); -} - -} -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/io/eclipse/rst/state.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/io/eclipse/rst/state.cpp deleted file mode 100644 index 262846796c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/io/eclipse/rst/state.cpp +++ /dev/null @@ -1,258 +0,0 @@ -/* - Copyright 2020 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include - -#include -#include -#include -#include - -#include -#include -#include -#include - - -namespace VI = ::Opm::RestartIO::Helpers::VectorItems; - -namespace Opm { -namespace RestartIO { - -RstState::RstState(const ::Opm::UnitSystem& unit_system_, - const std::vector& intehead, - const std::vector& logihead, - const std::vector& doubhead): - unit_system(unit_system_), - header(unit_system_, intehead, logihead, doubhead) -{ - this->load_tuning(intehead, doubhead); -} - -RstState::RstState(const ::Opm::UnitSystem& unit_system_, - const std::vector& intehead, - const std::vector& logihead, - const std::vector& doubhead, - const std::vector& zgrp, - const std::vector& igrp, - const std::vector& sgrp, - const std::vector& xgrp, - const std::vector& zwel, - const std::vector& iwel, - const std::vector& swel, - const std::vector& xwel, - const std::vector& icon, - const std::vector& scon, - const std::vector& xcon): - RstState(unit_system_, intehead, logihead, doubhead) -{ - this->add_groups(zgrp, igrp, sgrp, xgrp); - - for (int iw = 0; iw < this->header.num_wells; iw++) { - std::size_t zwel_offset = iw * this->header.nzwelz; - std::size_t iwel_offset = iw * this->header.niwelz; - std::size_t swel_offset = iw * this->header.nswelz; - std::size_t xwel_offset = iw * this->header.nxwelz; - std::size_t icon_offset = iw * this->header.niconz * this->header.ncwmax; - std::size_t scon_offset = iw * this->header.nsconz * this->header.ncwmax; - std::size_t xcon_offset = iw * this->header.nxconz * this->header.ncwmax; - int group_index = iwel[ iwel_offset + VI::IWell::Group ] - 1; - const std::string group = this->groups[group_index].name; - - this->wells.emplace_back(this->unit_system, - this->header, - group, - zwel.data() + zwel_offset, - iwel.data() + iwel_offset, - swel.data() + swel_offset, - xwel.data() + xwel_offset, - icon.data() + icon_offset, - scon.data() + scon_offset, - xcon.data() + xcon_offset); - - if (this->wells.back().msw_index) - throw std::logic_error("MSW data not accounted for in this constructor"); - } -} - -RstState::RstState(const ::Opm::UnitSystem& unit_system_, - const std::vector& intehead, - const std::vector& logihead, - const std::vector& doubhead, - const std::vector& zgrp, - const std::vector& igrp, - const std::vector& sgrp, - const std::vector& xgrp, - const std::vector& zwel, - const std::vector& iwel, - const std::vector& swel, - const std::vector& xwel, - const std::vector& icon, - const std::vector& scon, - const std::vector& xcon, - const std::vector& iseg, - const std::vector& rseg) : - RstState(unit_system_, intehead, logihead, doubhead) -{ - this->add_groups(zgrp, igrp, sgrp, xgrp); - - for (int iw = 0; iw < this->header.num_wells; iw++) { - std::size_t zwel_offset = iw * this->header.nzwelz; - std::size_t iwel_offset = iw * this->header.niwelz; - std::size_t swel_offset = iw * this->header.nswelz; - std::size_t xwel_offset = iw * this->header.nxwelz; - std::size_t icon_offset = iw * this->header.niconz * this->header.ncwmax; - std::size_t scon_offset = iw * this->header.nsconz * this->header.ncwmax; - std::size_t xcon_offset = iw * this->header.nxconz * this->header.ncwmax; - int group_index = iwel[ iwel_offset + VI::IWell::Group ] - 1; - const std::string group = this->groups[group_index].name; - - this->wells.emplace_back(this->unit_system, - this->header, - group, - zwel.data() + zwel_offset, - iwel.data() + iwel_offset, - swel.data() + swel_offset, - xwel.data() + xwel_offset, - icon.data() + icon_offset, - scon.data() + scon_offset, - xcon.data() + xcon_offset, - iseg, - rseg); - } -} - -void RstState::load_tuning(const std::vector& intehead, - const std::vector& doubhead) -{ - using M = ::Opm::UnitSystem::measure; - - this->tuning.NEWTMX = intehead[ VI::intehead::NEWTMX ]; - this->tuning.NEWTMN = intehead[ VI::intehead::NEWTMN ]; - this->tuning.LITMAX = intehead[ VI::intehead::LITMAX ]; - this->tuning.LITMIN = intehead[ VI::intehead::LITMIN ]; - this->tuning.MXWSIT = intehead[ VI::intehead::MXWSIT ]; - this->tuning.MXWPIT = intehead[ VI::intehead::MXWPIT ]; - - tuning.TSINIT = this->unit_system.to_si(M::time, doubhead[VI::doubhead::TsInit]); - tuning.TSMAXZ = this->unit_system.to_si(M::time, doubhead[VI::doubhead::TsMaxz]); - tuning.TSMINZ = this->unit_system.to_si(M::time, doubhead[VI::doubhead::TsMinz]); - tuning.TSMCHP = this->unit_system.to_si(M::time, doubhead[VI::doubhead::TsMchp]); - tuning.TSFMAX = doubhead[VI::doubhead::TsFMax]; - tuning.TSFMIN = doubhead[VI::doubhead::TsFMin]; - tuning.TSFCNV = doubhead[VI::doubhead::TsFcnv]; - tuning.THRUPT = doubhead[VI::doubhead::ThrUPT]; - tuning.TFDIFF = doubhead[VI::doubhead::TfDiff]; - tuning.TRGTTE = doubhead[VI::doubhead::TrgTTE]; - tuning.TRGCNV = doubhead[VI::doubhead::TrgCNV]; - tuning.TRGMBE = doubhead[VI::doubhead::TrgMBE]; - tuning.TRGLCV = doubhead[VI::doubhead::TrgLCV]; - tuning.XXXTTE = doubhead[VI::doubhead::XxxTTE]; - tuning.XXXCNV = doubhead[VI::doubhead::XxxCNV]; - tuning.XXXMBE = doubhead[VI::doubhead::XxxMBE]; - tuning.XXXLCV = doubhead[VI::doubhead::XxxLCV]; - tuning.XXXWFL = doubhead[VI::doubhead::XxxWFL]; - tuning.TRGFIP = doubhead[VI::doubhead::TrgFIP]; - tuning.TRGSFT = doubhead[VI::doubhead::TrgSFT]; - tuning.TRGDPR = doubhead[VI::doubhead::TrgDPR]; - tuning.XXXDPR = doubhead[VI::doubhead::XxxDPR]; - tuning.DDPLIM = doubhead[VI::doubhead::DdpLim]; - tuning.DDSLIM = doubhead[VI::doubhead::DdsLim]; -} - -void RstState::add_groups(const std::vector& zgrp, - const std::vector& igrp, - const std::vector& sgrp, - const std::vector& xgrp) -{ - for (int ig=0; ig < this->header.ngroup; ig++) { - std::size_t zgrp_offset = ig * this->header.nzgrpz; - std::size_t igrp_offset = ig * this->header.nigrpz; - std::size_t sgrp_offset = ig * this->header.nsgrpz; - std::size_t xgrp_offset = ig * this->header.nxgrpz; - - this->groups.emplace_back(this->unit_system, - this->header, - zgrp.data() + zgrp_offset, - igrp.data() + igrp_offset, - sgrp.data() + sgrp_offset, - xgrp.data() + xgrp_offset); - } -} - -const RstWell& RstState::get_well(const std::string& wname) const { - const auto well_iter = std::find_if(this->wells.begin(), - this->wells.end(), - [&wname] (const auto& well) { - return well.name == wname; - }); - if (well_iter == this->wells.end()) - throw std::out_of_range("No such well: " + wname); - - return *well_iter; -} - -RstState RstState::load(EclIO::ERst& rst_file, int report_step) { - rst_file.loadReportStepNumber(report_step); - const auto& intehead = rst_file.getRestartData("INTEHEAD", report_step, 0); - const auto& logihead = rst_file.getRestartData("LOGIHEAD", report_step, 0); - const auto& doubhead = rst_file.getRestartData("DOUBHEAD", report_step, 0); - - auto unit_id = intehead[VI::intehead::UNIT]; - ::Opm::UnitSystem unit_system(unit_id); - - if (intehead[VI::intehead::NWELLS] != 0) { - const auto& zgrp = rst_file.getRestartData("ZGRP", report_step, 0); - const auto& igrp = rst_file.getRestartData("IGRP", report_step, 0); - const auto& sgrp = rst_file.getRestartData("SGRP", report_step, 0); - const auto& xgrp = rst_file.getRestartData("XGRP", report_step, 0); - - const auto& zwel = rst_file.getRestartData("ZWEL", report_step, 0); - const auto& iwel = rst_file.getRestartData("IWEL", report_step, 0); - const auto& swel = rst_file.getRestartData("SWEL", report_step, 0); - const auto& xwel = rst_file.getRestartData("XWEL", report_step, 0); - - const auto& icon = rst_file.getRestartData("ICON", report_step, 0); - const auto& scon = rst_file.getRestartData("SCON", report_step, 0); - const auto& xcon = rst_file.getRestartData("XCON", report_step, 0); - - - if (rst_file.hasKey("ISEG")) { - const auto& iseg = rst_file.getRestartData("ISEG", report_step, 0); - const auto& rseg = rst_file.getRestartData("RSEG", report_step, 0); - - return RstState(unit_system, - intehead, logihead, doubhead, - zgrp, igrp, sgrp, xgrp, - zwel, iwel, swel, xwel, - icon, scon, xcon, - iseg, rseg); - } else - return RstState(unit_system, - intehead, logihead, doubhead, - zgrp, igrp, sgrp, xgrp, - zwel, iwel, swel, xwel, - icon, scon, xcon); - } else - return RstState(unit_system, intehead, logihead, doubhead); -} - -} -} - - diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/io/eclipse/rst/well.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/io/eclipse/rst/well.cpp deleted file mode 100644 index 3da024e9f9..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/io/eclipse/rst/well.cpp +++ /dev/null @@ -1,173 +0,0 @@ -/* - Copyright 2020 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include - -#include -#include -#include - -#include -#include -#include -#include - - -namespace VI = ::Opm::RestartIO::Helpers::VectorItems; - -namespace Opm { -namespace RestartIO { - -constexpr int def_ecl_phase = 1; -constexpr int def_pvt_table = 0; - -using M = ::Opm::UnitSystem::measure; - -double swel_value(float raw_value) { - const auto infty = 1.0e+20f; - if (std::abs(raw_value) == infty) - return 0; - else - return raw_value; -} - -RstWell::RstWell(const ::Opm::UnitSystem& unit_system, - const RstHeader& header, - const std::string& group_arg, - const std::string* zwel, - const int * iwel, - const float * swel, - const double * xwel, - const int * icon, - const float * scon, - const double * xcon) : - name(rtrim_copy(zwel[0])), - group(group_arg), - ij( {iwel[VI::IWell::IHead] - 1, iwel[VI::IWell::JHead] - 1}), - k1k2( std::make_pair(iwel[VI::IWell::FirstK] - 1, iwel[VI::IWell::LastK] - 1)), - wtype( iwel[VI::IWell::WType], def_ecl_phase), - well_status( iwel[VI::IWell::Status]), - active_control( iwel[VI::IWell::ActWCtrl]), - vfp_table( iwel[VI::IWell::VFPTab]), - allow_xflow( iwel[VI::IWell::XFlow] == 1), - preferred_phase( iwel[VI::IWell::PreferredPhase]), - hist_requested_control( iwel[VI::IWell::HistReqWCtrl]), - msw_index( iwel[VI::IWell::MsWID]), - completion_ordering( iwel[VI::IWell::CompOrd]), - pvt_table( def_pvt_table), - msw_pressure_drop_model( iwel[VI::IWell::MSW_PlossMod]), - // The values orat_target -> bhp_target_flow will be used in UDA values. The - // UDA values are responsible for unit conversion and raw values are - // internalized here. - orat_target( swel_value(swel[VI::SWell::OilRateTarget])), - wrat_target( swel_value(swel[VI::SWell::WatRateTarget])), - grat_target( swel_value(swel[VI::SWell::GasRateTarget])), - lrat_target( swel_value(swel[VI::SWell::LiqRateTarget])), - resv_target( swel_value(swel[VI::SWell::ResVRateTarget])), - thp_target( swel_value(swel[VI::SWell::THPTarget])), - bhp_target_float( swel[VI::SWell::BHPTarget]), - hist_lrat_target( unit_system.to_si(M::liquid_surface_rate, swel[VI::SWell::HistLiqRateTarget])), - hist_grat_target( unit_system.to_si(M::gas_surface_rate, swel[VI::SWell::HistGasRateTarget])), - hist_bhp_target( unit_system.to_si(M::pressure, swel[VI::SWell::HistBHPTarget])), - datum_depth( unit_system.to_si(M::length, swel[VI::SWell::DatumDepth])), - drainage_radius( unit_system.to_si(M::length, swel_value(swel[VI::SWell::DrainageRadius]))), - efficiency_factor( unit_system.to_si(M::identity, swel[VI::SWell::EfficiencyFactor1])), - alq_value( swel[VI::SWell::Alq_value]), - oil_rate( unit_system.to_si(M::liquid_surface_rate, xwel[VI::XWell::OilPrRate])), - water_rate( unit_system.to_si(M::liquid_surface_rate, xwel[VI::XWell::WatPrRate])), - gas_rate( unit_system.to_si(M::gas_surface_rate, xwel[VI::XWell::GasPrRate])), - liquid_rate( unit_system.to_si(M::rate, xwel[VI::XWell::LiqPrRate])), - void_rate( unit_system.to_si(M::rate, xwel[VI::XWell::VoidPrRate])), - thp( unit_system.to_si(M::pressure, xwel[VI::XWell::TubHeadPr])), - flow_bhp( unit_system.to_si(M::pressure, xwel[VI::XWell::FlowBHP])), - wct( unit_system.to_si(M::water_cut, xwel[VI::XWell::WatCut])), - gor( unit_system.to_si(M::gas_oil_ratio, xwel[VI::XWell::GORatio])), - oil_total( unit_system.to_si(M::liquid_surface_volume, xwel[VI::XWell::OilPrTotal])), - water_total( unit_system.to_si(M::liquid_surface_volume, xwel[VI::XWell::WatPrTotal])), - gas_total( unit_system.to_si(M::gas_surface_volume, xwel[VI::XWell::GasPrTotal])), - void_total( unit_system.to_si(M::volume, xwel[VI::XWell::VoidPrTotal])), - water_inj_total( unit_system.to_si(M::liquid_surface_volume, xwel[VI::XWell::WatInjTotal])), - gas_inj_total( unit_system.to_si(M::gas_surface_volume, xwel[VI::XWell::GasInjTotal])), - void_inj_total( unit_system.to_si(M::volume, xwel[VI::XWell::VoidInjTotal])), - gas_fvf( xwel[VI::XWell::GasFVF]), - bhp_target_double( unit_system.to_si(M::pressure, xwel[VI::XWell::BHPTarget])), - hist_oil_total( unit_system.to_si(M::liquid_surface_volume, xwel[VI::XWell::HistOilPrTotal])), - hist_wat_total( unit_system.to_si(M::liquid_surface_volume, xwel[VI::XWell::HistWatPrTotal])), - hist_gas_total( unit_system.to_si(M::gas_surface_volume, xwel[VI::XWell::HistGasPrTotal])), - hist_water_inj_total(unit_system.to_si(M::liquid_surface_volume, xwel[VI::XWell::HistWatInjTotal])), - hist_gas_inj_total( unit_system.to_si(M::gas_surface_volume, xwel[VI::XWell::HistGasInjTotal])), - water_void_rate( unit_system.to_si(M::liquid_surface_volume, xwel[VI::XWell::WatVoidPrRate])), - gas_void_rate( unit_system.to_si(M::gas_surface_volume, xwel[VI::XWell::GasVoidPrRate])) -{ - for (int ic = 0; ic < iwel[VI::IWell::NConn]; ic++) { - std::size_t icon_offset = ic * header.niconz; - std::size_t scon_offset = ic * header.nsconz; - std::size_t xcon_offset = ic * header.nxconz; - this->connections.emplace_back( unit_system, ic, header.nsconz, icon + icon_offset, scon + scon_offset, xcon + xcon_offset); - } -} - - - -RstWell::RstWell(const ::Opm::UnitSystem& unit_system, - const RstHeader& header, - const std::string& group_arg, - const std::string* zwel, - const int * iwel, - const float * swel, - const double * xwel, - const int * icon, - const float * scon, - const double * xcon, - const std::vector& iseg, - const std::vector& rseg) : - RstWell(unit_system, header, group_arg, zwel, iwel, swel, xwel, icon, scon, xcon) -{ - - if (this->msw_index) { - std::unordered_map segment_map; - for (int is=0; is < header.nsegmx; is++) { - std::size_t iseg_offset = header.nisegz * (is + (this->msw_index - 1) * header.nsegmx); - std::size_t rseg_offset = header.nrsegz * (is + (this->msw_index - 1) * header.nsegmx); - auto other_segment_number = iseg[iseg_offset + VI::ISeg::SegNo]; - if (other_segment_number != 0) { - auto segment_number = is + 1; - segment_map.insert({segment_number, this->segments.size()}); - this->segments.emplace_back( unit_system, segment_number, iseg.data() + iseg_offset, rseg.data() + rseg_offset); - } - } - - for (auto& segment : this->segments) { - if (segment.outlet_segment != 0) { - auto& outlet_segment = this->segments[ segment_map[segment.outlet_segment] ]; - outlet_segment.inflow_segments.push_back(segment.segment); - } - } - } -} - -const RstSegment RstWell::segment(int segment_number) const { - const auto& iter = std::find_if(this->segments.begin(), this->segments.end(), [segment_number](const RstSegment& segment) { return segment.segment == segment_number; }); - if (iter == this->segments.end()) - throw std::invalid_argument("No such segment"); - - return *iter; -} - -} -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/json/JsonObject.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/json/JsonObject.cpp deleted file mode 100644 index 1774d97041..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/json/JsonObject.cpp +++ /dev/null @@ -1,210 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - - -#include -#include -#include -#include - -#include - -#include -#include - -namespace Json { - - void JsonObject::initialize(const std::string& inline_json) { - this->root = cJSON_Parse( inline_json.c_str() ); - if (!this->root) - throw std::invalid_argument("Parsing json input failed"); - owner = true; - } - - - JsonObject::JsonObject(const std::string& inline_json) { - initialize( inline_json ); - } - - JsonObject::JsonObject(const char * inline_json) { - initialize( inline_json ); - } - - - - JsonObject::JsonObject(const Opm::filesystem::path& jsonFile ) { - std::ifstream stream(jsonFile.string().c_str()); - if (stream) { - std::string content_from_file( (std::istreambuf_iterator(stream)), - (std::istreambuf_iterator())); - - this->root = cJSON_Parse( content_from_file.c_str() ); - if (!this->root) - throw std::invalid_argument("Parsing json file: " + jsonFile.string() + " failed "); - - this->owner = true; - } else - throw std::invalid_argument("Loading json from file: " + jsonFile.string() + " failed."); - } - - - - - JsonObject::JsonObject( cJSON * object ) { - this->root = object; - owner = false; - } - - - JsonObject::~JsonObject() { - if (owner && this->root) - cJSON_Delete(this->root); - } - - - - bool JsonObject::has_item( const std::string& key) const { - cJSON * object = cJSON_GetObjectItem( this->root , key.c_str() ); - if (object) - return true; - else - return false; - } - - - bool JsonObject::is_array( ) const { - if (this->root->type == cJSON_Array) - return true; - else - return false; - } - - bool JsonObject::is_number( ) const { - if (this->root->type == cJSON_Number) - return true; - else - return false; - } - - - bool JsonObject::is_string( ) const { - if (this->root->type == cJSON_String) - return true; - else - return false; - } - - bool JsonObject::is_object( ) const { - if (this->root->type == cJSON_Object) - return true; - else - return false; - } - - - size_t JsonObject::size() const { - int int_size = cJSON_GetArraySize( this->root ); - return (size_t) int_size; - } - - - JsonObject JsonObject::get_array_item( size_t index ) const { - if (is_array()) { - cJSON * new_c_ptr = cJSON_GetArrayItem( this->root , index ); - if (new_c_ptr) - return JsonObject( new_c_ptr ); - else - throw std::invalid_argument("Index is out ouf range."); - } else - throw std::invalid_argument("Object is not an array."); - } - - - JsonObject JsonObject::get_item(const std::string& key) const { - cJSON * c_ptr = cJSON_GetObjectItem( this->root , key.c_str() ); - if (c_ptr) - return JsonObject( c_ptr ); - else - throw std::invalid_argument("Key: " + key + " does not exist in json object"); - } - - - std::string JsonObject::get_string(const std::string& key) const { - JsonObject child = get_scalar_object( key ); - return child.as_string(); - } - - - std::string JsonObject::as_string() const { - if (is_string()) - return this->root->valuestring; - else - throw std::invalid_argument("Object is not a string object"); - } - - - int JsonObject::get_int(const std::string& key) const { - JsonObject child = get_scalar_object( key ); - return child.as_int( ); - } - - - int JsonObject::as_int() const { - if (this->root->type == cJSON_Number) - return this->root->valueint; - else - throw std::invalid_argument("Object is not a number object."); - } - - - double JsonObject::get_double(const std::string& key) const { - JsonObject child = get_scalar_object( key ); - return child.as_double( ); - } - - - double JsonObject::as_double() const { - if (this->root->type == cJSON_Number) - return this->root->valuedouble; - else - throw std::invalid_argument("Object is not a number object."); - } - - - JsonObject JsonObject::get_scalar_object(const std::string& key) const{ - JsonObject child = get_item( key ); - if (child.size()) - throw std::invalid_argument("Key: " + key + " is not a scalar object"); - else - return child; - } - - - - std::string JsonObject::to_string() const { - char * c_str = cJSON_Print( this->root ); - std::string s(c_str); - free( c_str ); - - return s; - } - - -} - diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/output/data/Solution.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/output/data/Solution.cpp deleted file mode 100644 index ebf13e4873..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/output/data/Solution.cpp +++ /dev/null @@ -1,77 +0,0 @@ -/* - Copyright 2016 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include - -#include -#include - - -namespace Opm { -namespace data { - -Solution::Solution( bool init_si ) : si( init_si ) {} - -bool Solution::has(const std::string& keyword) const { - return this->count( keyword ) > 0; -} - -std::vector& Solution::data(const std::string& keyword) { - return this->at( keyword ).data; -} - -const std::vector& Solution::data(const std::string& keyword) const { - return this->at( keyword ).data; -} - -std::pair< Solution::iterator, bool > Solution::insert( std::string name, - UnitSystem::measure m, - std::vector< double > xs, - TargetType type ) { - - return this->emplace( name, CellData{ m, std::move( xs ), type } ); -} - -void data::Solution::convertToSI( const UnitSystem& units ) { - if (this->si) return; - - for( auto& elm : *this ) { - UnitSystem::measure dim = elm.second.dim; - if (dim != UnitSystem::measure::identity) - units.to_si( dim , elm.second.data ); - } - - this->si = true; -} - -void data::Solution::convertFromSI( const UnitSystem& units ) { - if (!this->si) return; - - for (auto& elm : *this ) { - UnitSystem::measure dim = elm.second.dim; - if (dim != UnitSystem::measure::identity) - units.from_si( dim , elm.second.data ); - } - - this->si = false; -} - -} -} - diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/AggregateActionxData.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/AggregateActionxData.cpp deleted file mode 100644 index 656217298e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/AggregateActionxData.cpp +++ /dev/null @@ -1,681 +0,0 @@ -/* - Copyright 2018 Statoil ASA - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include -#include -#include -#include - -#include -#include -#include - - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -// ##################################################################### -// Class Opm::RestartIO::Helpers -// --------------------------------------------------------------------- - - -namespace { - const std::map lhsQuantityToIndex = { - {"F", 1}, - {"W", 2}, - {"G", 3}, - {"D", 10}, - {"M", 11}, - {"Y", 12}, - }; - - /*const std::map lhsQuantityToItem_12 = { - {"F", 0}, - {"W", 0}, - {"G", 0}, - {"D", 0}, - {"M", 1}, - {"Y", 0}, - };*/ - - using cmp_enum = Opm::Action::Condition::Comparator; - const std::map cmpToIacn_12 = { - {cmp_enum::GREATER, 0}, - {cmp_enum::LESS, 1}, - {cmp_enum::GREATER_EQUAL, 0}, - {cmp_enum::LESS_EQUAL, 1}, - {cmp_enum::EQUAL, 1}, - {cmp_enum::INVALID, 0}, - }; - - const std::map monthToNo = { - {"JAN", 1.}, - {"FEB", 2.}, - {"MAR", 3.}, - {"APR", 4.}, - {"MAY", 5.}, - {"JUN", 6.}, - {"JUL", 7.}, - {"AUG", 8.}, - {"SEP", 9.}, - {"OCT", 10.}, - {"NOV", 11.}, - {"DEC", 12.}, - }; - - -const std::map rhsQuantityToIndex = { - {"F", 1}, - {"W", 2}, - {"G", 3}, -}; - -using logic_enum = Opm::Action::Condition::Logical; -const std::map logicalToIndex_13 = { - {logic_enum::AND, 1}, - {logic_enum::OR, 2}, - {logic_enum::END, 0}, -}; - -const std::map logicalToIndex_17 = { - {logic_enum::AND, 1}, - {logic_enum::OR, 0}, - {logic_enum::END, 0}, -}; - - -using cmp_enum = Opm::Action::Condition::Comparator; -const std::map cmpToIndex = { - {cmp_enum::GREATER, 1}, - {cmp_enum::LESS, 2}, - {cmp_enum::GREATER_EQUAL, 3}, - {cmp_enum::LESS_EQUAL, 4}, - {cmp_enum::EQUAL, 5}, - {cmp_enum::INVALID, 0}, -}; - - - namespace iACT { - - Opm::RestartIO::Helpers::WindowedArray - allocate(const std::vector& actDims) - { - using WV = Opm::RestartIO::Helpers::WindowedArray; - - int nwin = std::max(actDims[0], 1); - int nitPrWin = std::max(actDims[1], 1); - return WV { - WV::NumWindows{ static_cast(nwin) }, - WV::WindowSize{ static_cast(nitPrWin) } - }; - } - - template - void staticContrib(const Opm::Action::ActionX& actx, IACTArray& iAct) - { - //item [0]: is unknown, (=0) - iAct[0] = 0; - //item [1]: The number of lines of schedule data including ENDACTIO - iAct[1] = actx.keyword_strings().size(); - //item [2]: is = 1 for condition and previous condition = AND, and combinations OR/AND - // is = 2 for all conditions and previous conditions = OR - // This is not implemented yet - only use 1 for all cases - const auto& actx_cond = actx.conditions(); - int i_temp = 2; - for (auto cond_it = actx_cond.begin(); cond_it < actx_cond.end(); cond_it++) { - const auto it_logic_17 = logicalToIndex_17.find(cond_it->logic); - if (it_logic_17 != logicalToIndex_17.end()) { - if (it_logic_17->first == logic_enum::AND) i_temp = 1; - } - } - iAct[2] = i_temp; - //item [3]: is unknown, (=7) - iAct[3] = 7; - //item [4]: is unknown, (=0) - iAct[4] = 0; - //item [5]: The number of times the action is triggered - iAct[5] = actx.max_run(); - //item [6]: is unknown, (=0) - iAct[6] = 0; - //item [7]: is unknown, (=0) - iAct[7] = 0; - //item [8]: The number of times the action is triggered - iAct[8] = actx.conditions().size(); - } - - } // iAct - - namespace sACT { - - Opm::RestartIO::Helpers::WindowedArray - allocate(const std::vector& actDims) - { - using WV = Opm::RestartIO::Helpers::WindowedArray; - - int nwin = std::max(actDims[0], 1); - int nitPrWin = std::max(actDims[2], 1); - return WV { - WV::NumWindows{ static_cast(nwin) }, - WV::WindowSize{ static_cast(nitPrWin) } - }; - } - - template - void staticContrib(SACTArray& sAct) - { - //item [0 - 4]: is unknown, (=0) - for (std::size_t ind = 0; ind < 5 ; ind++) { - sAct[ind] = 0; - } - } - - } // sAct - - namespace zACT { - - Opm::RestartIO::Helpers::WindowedArray< - Opm::EclIO::PaddedOutputString<8> - > - allocate(const std::vector& actDims) - { - using WV = Opm::RestartIO::Helpers::WindowedArray< - Opm::EclIO::PaddedOutputString<8> - >; - - int nwin = std::max(actDims[0], 1); - int nitPrWin = std::max(actDims[3], 1); - return WV { - WV::NumWindows{ static_cast(nwin) }, - WV::WindowSize{ static_cast(nitPrWin) } - }; - } - - template - void staticContrib(const Opm::Action::ActionX& actx, ZACTArray& zAct) - { - // entry 1 is udq keyword - zAct[0] = actx.name(); - } - } // zAct - - namespace zLACT { - - Opm::RestartIO::Helpers::WindowedArray< - Opm::EclIO::PaddedOutputString<8> - > - allocate(const std::vector& actDims) - { - using WV = Opm::RestartIO::Helpers::WindowedArray< - Opm::EclIO::PaddedOutputString<8> - >; - int nwin = std::max(actDims[0], 1); - int nitPrWin = std::max(actDims[4], 1); - return WV { - WV::NumWindows{ static_cast(nwin) }, - WV::WindowSize{ static_cast(nitPrWin) } - }; - } - - template - void staticContrib(const Opm::Action::ActionX& actx, int noEPrZlact, ZLACTArray& zLact) - { - std::size_t ind = 0; - int l_sstr = 8; - int max_l_str = 128; - // write out the schedule input lines - const auto& schedule_data = actx.keyword_strings(); - for (auto z_data : schedule_data) { - int n_sstr = z_data.size()/l_sstr; - if (static_cast(z_data.size()) > max_l_str) { - std::cout << "Too long input data string (max 128 characters): " << z_data << std::endl; - throw std::invalid_argument("Actionx: " + actx.name()); - } - else { - for (int i = 0; i < n_sstr; i++) { - zLact[ind + i] = z_data.substr(i*l_sstr, l_sstr); - } - //add remainder of last non-zero string - if ((z_data.size() % l_sstr) > 0) - zLact[ind + n_sstr] = z_data.substr(n_sstr*l_sstr); - } - ind += static_cast(noEPrZlact); - } - } - } // zLact - - namespace zACN { - - Opm::RestartIO::Helpers::WindowedArray< - Opm::EclIO::PaddedOutputString<8> - > - allocate(const std::vector& actDims) - { - using WV = Opm::RestartIO::Helpers::WindowedArray< - Opm::EclIO::PaddedOutputString<8> - >; - - int nwin = std::max(actDims[0], 1); - int nitPrWin = std::max(actDims[5], 1); - return WV { - WV::NumWindows{ static_cast(nwin) }, - WV::WindowSize{ static_cast(nitPrWin) } - }; - } - - template - void staticContrib(const Opm::Action::ActionX& actx, ZACNArray& zAcn) - { - std::size_t ind = 0; - int noEPZacn = 13; - // write out the schedule Actionx conditions - const auto& actx_cond = actx.conditions(); - for (auto z_data : actx_cond) { - // left hand quantity - if ((z_data.lhs.quantity.substr(0,1) != "D") && - (z_data.lhs.quantity.substr(0,1) != "M") && - (z_data.lhs.quantity.substr(0,1) != "Y")) - zAcn[ind + 0] = z_data.lhs.quantity; - // right hand quantity - if ((z_data.rhs.quantity.substr(0,1) == "W") || - (z_data.rhs.quantity.substr(0,1) == "G")) - zAcn[ind + 1] = z_data.rhs.quantity; - // operator (comparator) - zAcn[ind + 2] = z_data.cmp_string; - // well-name if left hand quantity is a well quantity - if (z_data.lhs.quantity.substr(0,1) == "W") { - zAcn[ind + 3] = z_data.lhs.args[0]; - } - // well-name if right hand quantity is a well quantity - if (z_data.rhs.quantity.substr(0,1) == "W") { - zAcn[ind + 4] = z_data.rhs.args[0]; - } - - // group-name if left hand quantity is a group quantity - if (z_data.lhs.quantity.substr(0,1) == "G") { - zAcn[ind + 5] = z_data.lhs.args[0]; - } - // group-name if right hand quantity is a group quantity - if (z_data.rhs.quantity.substr(0,1) == "G") { - zAcn[ind + 6] = z_data.rhs.args[0]; - } - - //increment index according to no of items pr condition - ind += static_cast(noEPZacn); - } - } - } // zAcn - - namespace iACN { - - Opm::RestartIO::Helpers::WindowedArray - allocate(const std::vector& actDims) - { - using WV = Opm::RestartIO::Helpers::WindowedArray; - - int nwin = std::max(actDims[0], 1); - int nitPrWin = std::max(actDims[6], 1); - return WV { - WV::NumWindows{ static_cast(nwin) }, - WV::WindowSize{ static_cast(nitPrWin) } - }; - } - - - - template - void staticContrib(const Opm::Action::ActionX& actx, IACNArray& iAcn) - { - //item [0 - 9]: are unknown, (=0) - - /*item [10] type of quantity for condition - 1 for a field quantity (number of flowing producing wells) - 2 for a well quantity - 3 for a (node) group quantity - //9 for a well group quantity - 10 for DAY - 11 for MNTH - 12 for YEAR - */ - std::size_t ind = 0; - int noEPZacn = 26; - // write out the schedule Actionx conditions - const auto& actx_cond = actx.conditions(); - for (auto cond_it = actx_cond.begin(); cond_it < actx_cond.end(); cond_it++) { - auto z_data = *cond_it; - // left hand quantity - std::string lhsQtype = z_data.lhs.quantity.substr(0,1); - const auto it_lhsq = lhsQuantityToIndex.find(lhsQtype); - if (it_lhsq != lhsQuantityToIndex.end()) { - iAcn[ind + 10] = it_lhsq->second; - } - else { - std::cout << "Unknown condition type: " << z_data.lhs.quantity << std::endl; - throw std::invalid_argument("Actionx: " + actx.name()); - } - - /*item[11] - quantity type for rhs quantity - 1 - for field variables - 2 - for well variables? - 3 - for group variables - 8 - for constant values - */ - iAcn[ind + 11] = 8; - std::string rhsQtype = z_data.rhs.quantity.substr(0,1); - const auto it_rhsq = rhsQuantityToIndex.find(rhsQtype); - if (it_rhsq != rhsQuantityToIndex.end()) { - iAcn[ind + 11] = it_rhsq->second; - } - - /*item[12] - index for relational operator (<, =, > ) - 0 - for LHS quantity greater RHS quantity - 1 - for LHS quantity less than or equal to RHS quantity - */ - const auto it_lhs_it = cmpToIacn_12.find(z_data.cmp); - if (it_lhs_it != cmpToIacn_12.end()) { - iAcn[ind + 12] = it_lhs_it->second; - } - - /*item [13] - relates to operator - OR is 2 - AND is 1 - */ - const auto it_logic_13 = logicalToIndex_13.find(z_data.logic); - if (it_logic_13 != logicalToIndex_13.end()) { - iAcn[ind + 13] = it_logic_13->second; - } - else { - std::cout << "Unknown Boolean operator type for condition: " << z_data.lhs.quantity << std::endl; - throw std::invalid_argument("Actionx: " + actx.name()); - } - - /*item [16] - related to the operater used in ACTIONX for defined quantities - > is 1 - < is 2 - >= is 3 - <= is 4 - = is 5 - */ - const auto it_cmp = cmpToIndex.find(z_data.cmp); - if (it_cmp != cmpToIndex.end()) { - iAcn[ind + 16] = it_cmp->second; - } - else { - std::cout << "Unknown operator type for condition: " << z_data.lhs.quantity << std::endl; - throw std::invalid_argument("Actionx: " + actx.name()); - } - - /*item [17] - relates to operator and if the right hand condition is a constant or not - * First condition => [17] = 0 - * Second+ conditions - *If the previous condition has a constant rhs => [17] = 0 - *If rhs is {W,G, F} and - *If previous condition is AND => [17] = 1 - *If previous condition is OR => [17] = 0 - */ - if (cond_it > actx_cond.begin()) { - const std::string prev_rhs_quant = (cond_it-1)->rhs.quantity.substr(0,1); - const auto it_prev_rhs = rhsQuantityToIndex.find(prev_rhs_quant); - if (it_prev_rhs != rhsQuantityToIndex.end()) { - const auto it_logic_17 = logicalToIndex_17.find((cond_it-1)->logic); - if (it_logic_17 != logicalToIndex_17.end()) { - iAcn[ind + 17] = it_logic_17->second; - } - else { - std::cout << "Unknown Boolean operator type for condition: " << z_data.lhs.quantity << std::endl; - throw std::invalid_argument("Actionx: " + actx.name()); - } - } - } - //increment index according to no of items pr condition - ind += static_cast(noEPZacn); - } - } - } // iAcn - - namespace sACN { - - Opm::RestartIO::Helpers::WindowedArray - allocate(const std::vector& actDims) - { - using WV = Opm::RestartIO::Helpers::WindowedArray; - - int nwin = std::max(actDims[0], 1); - int nitPrWin = std::max(actDims[7], 1); - return WV { - WV::NumWindows{ static_cast(nwin) }, - WV::WindowSize{ static_cast(nitPrWin) } - }; - } - - Opm::Action::Result - act_res(const Opm::Schedule& sched, const Opm::SummaryState& smry, const std::size_t sim_step, std::vector::const_iterator act_x) { - Opm::Action::Result ar(false); - Opm::Action::Context context(smry); - auto sim_time = sched.simTime(sim_step); - if (act_x->ready(sim_time)) { - ar = act_x->eval(sim_time, context); - } - return {ar}; - } - - template - void staticContrib(std::vector::const_iterator actx_it, - const Opm::SummaryState& st, - const Opm::Schedule& sched, - const std::size_t simStep, - SACNArray& sAcn) - { - std::size_t ind = 0; - int noEPZacn = 16; - double undef_high_val = 1.0E+20; - const auto& wells = sched.getWells(simStep); - const auto ar = sACN::act_res(sched, st, simStep, actx_it); - // write out the schedule Actionx conditions - const auto& actx_cond = actx_it->conditions(); - for (const auto& z_data : actx_cond) { - - // item [0 - 1] = 0 (unknown) - sAcn[ind + 0] = 0.; - sAcn[ind + 1] = 0.; - - const std::string& lhsQtype = z_data.lhs.quantity.substr(0,1); - const std::string& rhsQtype = z_data.rhs.quantity.substr(0,1); - - //item [2, 5, 7, 9]: value of condition 1 (zero if well, group or field variable - const auto& it_rhsq = rhsQuantityToIndex.find(rhsQtype); - if (it_rhsq == rhsQuantityToIndex.end()) { - //come here if constant value condition - double t_val = 0.; - if (lhsQtype == "M") { - const auto& it_mnth = monthToNo.find(z_data.rhs.quantity); - if (it_mnth != monthToNo.end()) { - t_val = it_mnth->second; - } - else { - std::cout << "Unknown Month: " << z_data.rhs.quantity << std::endl; - throw std::invalid_argument("Actionx: " + actx_it->name() + " Condition: " + z_data.lhs.quantity ); - } - } - else { - t_val = std::stod(z_data.rhs.quantity); - } - sAcn[ind + 2] = t_val; - sAcn[ind + 5] = sAcn[ind + 2]; - sAcn[ind + 7] = sAcn[ind + 2]; - sAcn[ind + 9] = sAcn[ind + 2]; - } - - - //Treat well, group and field right hand side conditions - if (it_rhsq != rhsQuantityToIndex.end()) { - //Well variable - if ((it_rhsq->first == "W") && (st.has_well_var(z_data.rhs.args[0], z_data.rhs.quantity))) { - sAcn[ind + 5] = st.get_well_var(z_data.rhs.args[0], z_data.rhs.quantity); - sAcn[ind + 7] = st.get_well_var(z_data.rhs.args[0], z_data.rhs.quantity); - sAcn[ind + 9] = st.get_well_var(z_data.rhs.args[0], z_data.rhs.quantity); - } - //group variable - if ((it_rhsq->first == "G") && (st.has_group_var(z_data.rhs.args[0], z_data.rhs.quantity))) {; - sAcn[ind + 5] = st.get_group_var(z_data.rhs.args[0], z_data.rhs.quantity); - sAcn[ind + 7] = st.get_group_var(z_data.rhs.args[0], z_data.rhs.quantity); - sAcn[ind + 9] = st.get_group_var(z_data.rhs.args[0], z_data.rhs.quantity); - } - //field variable - if ((it_rhsq->first == "F") && (st.has(z_data.rhs.quantity))) { - sAcn[ind + 5] = st.get(z_data.rhs.quantity); - sAcn[ind + 7] = st.get(z_data.rhs.quantity); - sAcn[ind + 9] = st.get(z_data.rhs.quantity); - } - } - - - - //treat cases with left hand side condition being: DAY, MNTH og YEAR variable - const auto& it_lhsq = lhsQuantityToIndex.find(lhsQtype); - if ((it_lhsq->first == "D") || (it_lhsq->first == "M") || (it_lhsq->first == "Y")) { - sAcn[ind + 4] = undef_high_val; - sAcn[ind + 5] = undef_high_val; - sAcn[ind + 6] = undef_high_val; - sAcn[ind + 7] = undef_high_val; - sAcn[ind + 8] = undef_high_val; - sAcn[ind + 9] = undef_high_val; - } - - //Treat well, group and field left hand side conditions - if (it_lhsq != lhsQuantityToIndex.end()) { - std::string wn = ""; - //Well variable - if (it_lhsq->first == "W") { - //find the well that violates action if relevant - for (const auto& well : wells) - { - if (ar.has_well(well.name())) { - //set well name - wn = well.name(); - break; - } - } - - if ((it_lhsq->first == "W") && (st.has_well_var(wn, z_data.lhs.quantity)) ) { - sAcn[ind + 4] = st.get_well_var(wn, z_data.lhs.quantity); - sAcn[ind + 6] = st.get_well_var(wn, z_data.lhs.quantity); - sAcn[ind + 8] = st.get_well_var(wn, z_data.lhs.quantity); - } - } - //group variable - if ((it_lhsq->first == "G") && (st.has_group_var(z_data.lhs.args[0], z_data.lhs.quantity))) { - sAcn[ind + 4] = st.get_group_var(z_data.lhs.args[0], z_data.lhs.quantity); - sAcn[ind + 6] = st.get_group_var(z_data.lhs.args[0], z_data.lhs.quantity); - sAcn[ind + 8] = st.get_group_var(z_data.lhs.args[0], z_data.lhs.quantity); - } - //field variable - if ((it_lhsq->first == "F") && (st.has(z_data.lhs.quantity))) { - sAcn[ind + 4] = st.get(z_data.lhs.quantity); - sAcn[ind + 6] = st.get(z_data.lhs.quantity); - sAcn[ind + 8] = st.get(z_data.lhs.quantity); - } - } - - //increment index according to no of items pr condition - ind += static_cast(noEPZacn); - } - } - - } // sAcn - -} -// ===================================================================== - -Opm::RestartIO::Helpers::AggregateActionxData:: -AggregateActionxData(const std::vector& actDims) - : iACT_ (iACT::allocate(actDims)), - sACT_ (sACT::allocate(actDims)), - zACT_ (zACT::allocate(actDims)), - zLACT_(zLACT::allocate(actDims)), - zACN_ (zACN::allocate(actDims)), - iACN_ (iACN::allocate(actDims)), - sACN_ (sACN::allocate(actDims)) -{} - -// --------------------------------------------------------------------- - -void -Opm::RestartIO::Helpers::AggregateActionxData:: -captureDeclaredActionxData( const Opm::Schedule& sched, - const Opm::SummaryState& st, - const std::vector& actDims, - const std::size_t simStep) -{ - const auto& acts = sched.actions(simStep); - std::size_t act_ind = 0; - for (auto actx_it = acts.begin(); actx_it < acts.end(); actx_it++) { - { - auto i_act = this->iACT_[act_ind]; - iACT::staticContrib(*actx_it, i_act); - } - - { - auto s_act = this->sACT_[act_ind]; - sACT::staticContrib(s_act); - } - - { - auto z_act = this->zACT_[act_ind]; - zACT::staticContrib(*actx_it, z_act); - } - - { - auto z_lact = this->zLACT_[act_ind]; - zLACT::staticContrib(*actx_it, actDims[8], z_lact); - } - - { - auto z_acn = this->zACN_[act_ind]; - zACN::staticContrib(*actx_it, z_acn); - } - - { - auto i_acn = this->iACN_[act_ind]; - iACN::staticContrib(*actx_it, i_acn); - } - - { - auto s_acn = this->sACN_[act_ind]; - sACN::staticContrib(actx_it, st, sched, simStep, s_acn); - } - - act_ind +=1; - } -} - diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/AggregateConnectionData.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/AggregateConnectionData.cpp deleted file mode 100644 index 4f01dbb501..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/AggregateConnectionData.cpp +++ /dev/null @@ -1,285 +0,0 @@ -/* - Copyright 2018 Statoil ASA - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include - -#include -#include - -#include - -#include -#include - -#include - -#include -#include -#include -#include -#include -#include - -namespace VI = Opm::RestartIO::Helpers::VectorItems; - -// ##################################################################### -// Class Opm::RestartIO::Helpers::AggregateConnectionData -// --------------------------------------------------------------------- - -namespace { - std::size_t numWells(const std::vector& inteHead) - { - return inteHead[VI::intehead::NWELLS]; - } - - std::size_t maxNumConn(const std::vector& inteHead) - { - return inteHead[VI::intehead::NCWMAX]; - } - - template - void connectionLoop(const std::vector& wells, - const Opm::EclipseGrid& grid, - const Opm::data::WellRates& xw, - ConnOp&& connOp) - { - for (auto nWell = wells.size(), wellID = 0*nWell; - wellID < nWell; ++wellID) - { - const auto& well = wells[wellID]; - const auto well_iter = xw.find(well.name()); - const Opm::data::Well * well_rates = (well_iter == xw.end()) ? nullptr : &well_iter->second; - const auto& connections = well.getConnections().output(grid); - std::size_t connID = 0; - for (const auto& conn : connections) { - if (well_rates) - connOp(wellID, *conn, connID, well_rates->find_connection(conn->global_index())); - else - connOp(wellID, *conn, connID, nullptr); - connID++; - } - } - } - - namespace IConn { - std::size_t entriesPerConn(const std::vector& inteHead) - { - return inteHead[VI::intehead::NICONZ]; - } - - Opm::RestartIO::Helpers::WindowedMatrix - allocate(const std::vector& inteHead) - { - using WM = Opm::RestartIO::Helpers::WindowedMatrix; - - return WM { - WM::NumRows { numWells(inteHead) }, - WM::NumCols { maxNumConn(inteHead) }, - WM::WindowSize{ entriesPerConn(inteHead) } - }; - } - - template - void staticContrib(const Opm::Connection& conn, - const std::size_t connID, - IConnArray& iConn) - { - using ConnState = ::Opm::Connection::State; - using Ix = ::Opm::RestartIO::Helpers::VectorItems::IConn::index; - - iConn[Ix::SeqIndex] = connID + 1; - - iConn[Ix::CellI] = conn.getI() + 1; - iConn[Ix::CellJ] = conn.getJ() + 1; - iConn[Ix::CellK] = conn.getK() + 1; - - iConn[Ix::ConnStat] = (conn.state() == ConnState::OPEN) - ? 1 : 0; - - iConn[Ix::Drainage] = conn.getDefaultSatTabId() - ? 0 : conn.satTableId(); - - // Don't support differing sat-func tables for - // draining and imbibition curves at connections. - iConn[Ix::Imbibition] = iConn[Ix::Drainage]; - - //complnum is(1 too large): 1 - based while icon is 0 - based? - iConn[Ix::ComplNum] = conn.complnum(); - //iConn[Ix::ComplNum] = iConn[Ix::SeqIndex]; - - iConn[Ix::ConnDir] = static_cast(conn.dir()); - iConn[Ix::Segment] = conn.attachedToSegment() - ? conn.segment() : 0; - } - } // IConn - - namespace SConn { - std::size_t entriesPerConn(const std::vector& inteHead) - { - return inteHead[VI::intehead::NSCONZ]; - } - - Opm::RestartIO::Helpers::WindowedMatrix - allocate(const std::vector& inteHead) - { - using WM = Opm::RestartIO::Helpers::WindowedMatrix; - - return WM { - WM::NumRows { numWells(inteHead) }, - WM::NumCols { maxNumConn(inteHead) }, - WM::WindowSize{ entriesPerConn(inteHead) } - }; - } - - template - void staticContrib(const Opm::Connection& conn, - const Opm::UnitSystem& units, - SConnArray& sConn) - { - using M = ::Opm::UnitSystem::measure; - using Ix = ::Opm::RestartIO::Helpers::VectorItems::SConn::index; - - auto scprop = [&units](const M u, const double x) -> float - { - return static_cast(units.from_si(u, x)); - }; - - sConn[Ix::ConnTrans] = - scprop(M::transmissibility, conn.CF()); - - sConn[Ix::Depth] = scprop(M::length, conn.depth()); - sConn[Ix::Diameter] = scprop(M::length, 2*conn.rw()); - - sConn[Ix::EffectiveKH] = - scprop(M::effective_Kh, conn.Kh()); - - sConn[Ix::SkinFactor] = conn.skinFactor(); - - sConn[Ix::item12] = sConn[Ix::ConnTrans]; - - sConn[Ix::SegDistEnd] = scprop(M::length, conn.getSegDistEnd()); - sConn[Ix::SegDistStart] = scprop(M::length, conn.getSegDistStart()); - - sConn[Ix::item30] = -1.0e+20f; - sConn[Ix::item31] = -1.0e+20f; - sConn[Ix::CFInDeck] = (conn.ctfAssignedFromInput()) ? 1 : 0; - } - } // SConn - - namespace XConn { - std::size_t entriesPerConn(const std::vector& inteHead) - { - return inteHead[VI::intehead::NXCONZ]; - } - - Opm::RestartIO::Helpers::WindowedMatrix - allocate(const std::vector& inteHead) - { - using WM = Opm::RestartIO::Helpers::WindowedMatrix; - - return WM { - WM::NumRows { numWells(inteHead) }, - WM::NumCols { maxNumConn(inteHead) }, - WM::WindowSize{ entriesPerConn(inteHead) } - }; - } - - template - void dynamicContrib(const Opm::data::Connection& x, - const Opm::UnitSystem& units, - XConnArray& xConn) - { - using M = ::Opm::UnitSystem::measure; - using Ix = ::Opm::RestartIO::Helpers::VectorItems::XConn::index; - using R = ::Opm::data::Rates::opt; - - xConn[Ix::Pressure] = units.from_si(M::pressure, x.pressure); - - // Note flow rate sign. Treat production rates as positive. - const auto& Q = x.rates; - - if (Q.has(R::oil)) { - xConn[Ix::OilRate] = - - units.from_si(M::liquid_surface_rate, Q.get(R::oil)); - } - - if (Q.has(R::wat)) { - xConn[Ix::WaterRate] = - - units.from_si(M::liquid_surface_rate, Q.get(R::wat)); - } - - if (Q.has(R::gas)) { - xConn[Ix::GasRate] = - - units.from_si(M::gas_surface_rate, Q.get(R::gas)); - } - - xConn[Ix::ResVRate] = 0.0; - - if (Q.has(R::reservoir_oil)) { - xConn[Ix::ResVRate] -= - units.from_si(M::rate, Q.get(R::reservoir_oil)); - } - - if (Q.has(R::reservoir_water)) { - xConn[Ix::ResVRate] -= - units.from_si(M::rate, Q.get(R::reservoir_water)); - } - - if (Q.has(R::reservoir_gas)) { - xConn[Ix::ResVRate] -= - units.from_si(M::rate, Q.get(R::reservoir_gas)); - } - } - } // XConn -} // Anonymous - -Opm::RestartIO::Helpers::AggregateConnectionData:: -AggregateConnectionData(const std::vector& inteHead) - : iConn_(IConn::allocate(inteHead)) - , sConn_(SConn::allocate(inteHead)) - , xConn_(XConn::allocate(inteHead)) -{} - -// --------------------------------------------------------------------- - -void -Opm::RestartIO::Helpers::AggregateConnectionData:: -captureDeclaredConnData(const Schedule& sched, - const EclipseGrid& grid, - const UnitSystem& units, - const data::WellRates& xw, - const std::size_t sim_step) -{ - const auto& wells = sched.getWells(sim_step); - connectionLoop(wells, grid, xw, [&units, this] - (const std::size_t wellID, - const Connection& conn, const std::size_t connID, - const Opm::data::Connection* conn_rates) -> void - { - auto ic = this->iConn_(wellID, connID); - auto sc = this->sConn_(wellID, connID); - - IConn::staticContrib(conn, connID, ic); - SConn::staticContrib(conn, units, sc); - if (conn_rates) { - auto xc = this->xConn_(wellID, connID); - XConn::dynamicContrib(*conn_rates, units, xc); - } - }); -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/AggregateGroupData.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/AggregateGroupData.cpp deleted file mode 100644 index 340cd228c0..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/AggregateGroupData.cpp +++ /dev/null @@ -1,564 +0,0 @@ -/* - Copyright 2018 Statoil ASA - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include -#include -#include - -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -// ##################################################################### -// Class Opm::RestartIO::Helpers::AggregateGroupData -// --------------------------------------------------------------------- - - -namespace { - -// maximum number of groups -std::size_t ngmaxz(const std::vector& inteHead) -{ - return inteHead[20]; -} - -// maximum number of wells in any group -int nwgmax(const std::vector& inteHead) -{ - return inteHead[19]; -} - - -template -void groupLoop(const std::vector& groups, - GroupOp&& groupOp) -{ - auto groupID = std::size_t{0}; - for (const auto* group : groups) { - groupID += 1; - - if (group == nullptr) { continue; } - - groupOp(*group, groupID - 1); - } -} - - -int currentGroupLevel(const Opm::Schedule& sched, const Opm::Group& group, const size_t simStep) -{ - if (group.defined( simStep )) { - auto current = group; - int level = 0; - while (current.name() != "FIELD") { - level += 1; - current = sched.getGroup(current.parent(), simStep); - } - - return level; - } else { - std::stringstream str; - str << "actual group has not been defined at report time: " << simStep; - throw std::invalid_argument(str.str()); - } -} - -int groupType(const Opm::Group& group) { - if (group.wellgroup()) - return 0; - else - return 1; -} - - -std::size_t groupSize(const Opm::Group& group) { - if (group.wellgroup()) - return group.wells().size(); - else - return group.groups().size(); -} - - -namespace IGrp { -std::size_t entriesPerGroup(const std::vector& inteHead) -{ - // INTEHEAD[36] = NIGRPZ - return inteHead[36]; -} - -Opm::RestartIO::Helpers::WindowedArray -allocate(const std::vector& inteHead) -{ - using WV = Opm::RestartIO::Helpers::WindowedArray; - - return WV { - WV::NumWindows{ ngmaxz(inteHead) }, - WV::WindowSize{ entriesPerGroup(inteHead) } - }; -} - -template -void staticContrib(const Opm::Schedule& sched, - const Opm::Group& group, - const int nwgmax, - const int ngmaxz, - const std::size_t simStep, - const Opm::SummaryState& sumState, - const std::map cmodeToNum, - IGrpArray& iGrp) -{ - if (group.wellgroup()) { - int igrpCount = 0; - //group has child wells - //store the well number (sequence index) in iGrp according to the sequence they are defined - for (const auto& well_name : group.wells()) { - const auto& well = sched.getWell(well_name, simStep); - iGrp[igrpCount] = well.seqIndex() + 1; - igrpCount += 1; - } - } else if (!group.groups().empty()) { - int igrpCount = 0; - for (const auto& group_name : group.groups()) { - const auto& child_group = sched.getGroup(group_name, simStep); - iGrp[igrpCount] = child_group.insert_index(); - igrpCount += 1; - } - } - - //assign the number of child wells or child groups to - // location nwgmax - iGrp[nwgmax] = groupSize(group); - - /*IGRP[NWGMAX + 5] - = -1 group under higher group control - = 0 for NONE (no control) - = 1 group under rate control - */ - - if ((group.getGroupType() == Opm::Group::GroupType::NONE) || (group.getGroupType() == Opm::Group::GroupType::PRODUCTION) ) { - const auto& prod_cmode = group.production_cmode(); - - if (prod_cmode == Opm::Group::ProductionCMode::FLD) { - iGrp[nwgmax + 5] = -1; - } - else if (prod_cmode == Opm::Group::ProductionCMode::NONE) { - iGrp[nwgmax + 5] = 0; - } - else { - iGrp[nwgmax + 5] = 1; - } - - // Set iGrp for [nwgmax + 7] - /* - = 0 for group with "FLD" or "NONE" - = 4 for "GRAT" FIELD - = -40000 for production group with "ORAT" - = -4000 for production group with "WRAT" - = -400 for production group with "GRAT" - = -40 for production group with "LRAT" - */ - - if ((prod_cmode == Opm::Group::ProductionCMode::NONE) || prod_cmode == Opm::Group::ProductionCMode::FLD) { - iGrp[nwgmax + 7] = 0; - } - else if ((prod_cmode == Opm::Group::ProductionCMode::ORAT)) { - iGrp[nwgmax + 7] = -40000; - } - else if ((prod_cmode == Opm::Group::ProductionCMode::WRAT)) { - iGrp[nwgmax + 7] = -4000; - } - else if ((prod_cmode == Opm::Group::ProductionCMode::GRAT)) { - iGrp[nwgmax + 7] = -400; - if (group.name() == "FIELD") { - iGrp[nwgmax + 7] = 4; - } - } - else if ((prod_cmode == Opm::Group::ProductionCMode::LRAT)) { - iGrp[nwgmax + 7] = -40; - } - } - //Set injection group status - //item[nwgmax + 16] - mode for operation for injection group - // 1 - RATE - // 2 - RESV - // 3 - REIN - // 4 - VREP - // 0 - ellers - - if (group.isInjectionGroup()) { - if (group.hasInjectionControl(Opm::Phase::WATER)) { - const auto& inj_cntl = group.injectionControls(Opm::Phase::WATER, sumState); - const auto& inj_mode = inj_cntl.cmode; - const auto it = cmodeToNum.find(inj_mode); - if (it != cmodeToNum.end()) { - iGrp[nwgmax + 16] = it->second; - iGrp[nwgmax + 18] = iGrp[nwgmax + 16]; - iGrp[nwgmax + 19] = iGrp[nwgmax + 16]; - } - } - - if (group.hasInjectionControl(Opm::Phase::GAS)) { - const auto& inj_cntl = group.injectionControls(Opm::Phase::GAS, sumState); - const auto& inj_mode = inj_cntl.cmode; - const auto it = cmodeToNum.find(inj_mode); - if (it != cmodeToNum.end()) { - iGrp[nwgmax + 21] = it->second; - iGrp[nwgmax + 23] = iGrp[nwgmax + 21]; - iGrp[nwgmax + 24] = iGrp[nwgmax + 21]; - } - } - } - - iGrp[nwgmax + 26] = groupType(group); - - //find group level ("FIELD" is level 0) and store the level in - //location nwgmax + 27 - iGrp[nwgmax+27] = currentGroupLevel(sched, group, simStep); - - // set values for group probably connected to GCONPROD settings - // - if (group.name() != "FIELD") - { - //iGrp[nwgmax+ 5] = -1; - iGrp[nwgmax+12] = -1; - iGrp[nwgmax+17] = -1; - iGrp[nwgmax+22] = -1; - - //assign values to group number (according to group sequence) - iGrp[nwgmax+88] = group.insert_index(); - iGrp[nwgmax+89] = group.insert_index(); - iGrp[nwgmax+95] = group.insert_index(); - iGrp[nwgmax+96] = group.insert_index(); - } - else - { - //assign values to group number (according to group sequence) - iGrp[nwgmax+88] = ngmaxz; - iGrp[nwgmax+89] = ngmaxz; - iGrp[nwgmax+95] = ngmaxz; - iGrp[nwgmax+96] = ngmaxz; - } - - //find parent group and store index of parent group in - //location nwgmax + 28 - if (group.name() == "FIELD") - iGrp[nwgmax+28] = 0; - else { - const auto& parent_group = sched.getGroup(group.parent(), simStep); - if (parent_group.name() == "FIELD") - iGrp[nwgmax+28] = ngmaxz; - else - iGrp[nwgmax+28] = parent_group.insert_index(); - } - -} -} // Igrp - -namespace SGrp { -std::size_t entriesPerGroup(const std::vector& inteHead) -{ - // INTEHEAD[37] = NSGRPZ - return inteHead[37]; -} - -Opm::RestartIO::Helpers::WindowedArray -allocate(const std::vector& inteHead) -{ - using WV = Opm::RestartIO::Helpers::WindowedArray; - - return WV { - WV::NumWindows{ ngmaxz(inteHead) }, - WV::WindowSize{ entriesPerGroup(inteHead) } - }; -} - -template -void staticContrib(const Opm::Group& group, - const Opm::SummaryState& sumState, - const Opm::UnitSystem& units, - SGrpArray& sGrp) -{ - using Isp = ::Opm::RestartIO::Helpers::VectorItems::SGroup::prod_index; - using Isi = ::Opm::RestartIO::Helpers::VectorItems::SGroup::inj_index; - using M = ::Opm::UnitSystem::measure; - - const auto dflt = -1.0e+20f; - const auto dflt_2 = -2.0e+20f; - const auto infty = 1.0e+20f; - const auto zero = 0.0f; - const auto one = 1.0f; - - const auto init = std::vector { // 112 Items (0..111) - // 0 1 2 3 4 - infty, infty, dflt , infty, zero , // 0.. 4 ( 0) - zero , infty, infty, infty , infty, // 5.. 9 ( 1) - infty, infty, infty, infty , dflt , // 10.. 14 ( 2) - infty, infty, infty, infty , dflt , // 15.. 19 ( 3) - infty, infty, infty, infty , dflt , // 20.. 24 ( 4) - zero , zero , zero , dflt_2, zero , // 24.. 29 ( 5) - zero , zero , zero , zero , zero , // 30.. 34 ( 6) - infty ,zero , zero , zero , infty, // 35.. 39 ( 7) - zero , zero , zero , zero , zero , // 40.. 44 ( 8) - zero , zero , zero , zero , zero , // 45.. 49 ( 9) - zero , infty, infty, infty , infty, // 50.. 54 (10) - infty, infty, infty, infty , infty, // 55.. 59 (11) - infty, infty, infty, infty , infty, // 60.. 64 (12) - infty, infty, infty, infty , zero , // 65.. 69 (13) - zero , zero , zero , zero , zero , // 70.. 74 (14) - zero , zero , zero , zero , infty, // 75.. 79 (15) - infty, zero , infty, zero , zero , // 80.. 84 (16) - zero , zero , zero , zero , zero , // 85.. 89 (17) - zero , zero , one , zero , zero , // 90.. 94 (18) - zero , zero , zero , zero , zero , // 95.. 99 (19) - zero , zero , zero , zero , zero , // 100..104 (20) - zero , zero , zero , zero , zero , // 105..109 (21) - zero , zero // 110..111 (22) - }; - - const auto sz = static_cast< - decltype(init.size())>(sGrp.size()); - - auto b = std::begin(init); - auto e = b + std::min(init.size(), sz); - - std::copy(b, e, std::begin(sGrp)); - - auto sgprop = [&units](const M u, const double x) -> float - { - return static_cast(units.from_si(u, x)); - }; - - if (group.isProductionGroup()) { - const auto& prod_cntl = group.productionControls(sumState); - - if (prod_cntl.oil_target > 0.) { - sGrp[Isp::OilRateLimit] = sgprop(M::liquid_surface_rate, prod_cntl.oil_target); - sGrp[37] = sGrp[Isp::OilRateLimit]; - sGrp[52] = sGrp[Isp::OilRateLimit]; // "ORAT" control - } - if (prod_cntl.water_target > 0.) { - sGrp[Isp::WatRateLimit > 0.] = sgprop(M::liquid_surface_rate, prod_cntl.water_target); - sGrp[38] = sGrp[Isp::WatRateLimit]; - sGrp[53] = sGrp[Isp::WatRateLimit]; //"WRAT" control - } - if (prod_cntl.gas_target > 0.) { - sGrp[Isp::GasRateLimit] = sgprop(M::gas_surface_rate, prod_cntl.gas_target); - sGrp[39] = sGrp[Isp::GasRateLimit]; - } - if (prod_cntl.liquid_target > 0.) { - sGrp[Isp::LiqRateLimit] = sgprop(M::liquid_surface_rate, prod_cntl.liquid_target); - sGrp[40] = sGrp[Isp::LiqRateLimit]; - } - } - - if (group.isInjectionGroup()) { - if (group.hasInjectionControl(Opm::Phase::GAS)) { - const auto& inj_cntl = group.injectionControls(Opm::Phase::GAS, sumState); - if (inj_cntl.surface_max_rate > 0.) { - sGrp[Isi::gasSurfRateLimit] = sgprop(M::gas_surface_rate, inj_cntl.surface_max_rate); - } - if (inj_cntl.resv_max_rate > 0.) { - sGrp[Isi::gasResRateLimit > 0.] = sgprop(M::rate, inj_cntl.resv_max_rate); - } - if (inj_cntl.target_reinj_fraction > 0.) { - sGrp[Isi::gasReinjectionLimit] = inj_cntl.target_reinj_fraction; - } - if (inj_cntl.target_void_fraction > 0.) { - sGrp[Isi::gasVoidageLimit] = inj_cntl.target_void_fraction; - } - } - - if (group.hasInjectionControl(Opm::Phase::WATER)) { - const auto& inj_cntl = group.injectionControls(Opm::Phase::WATER, sumState); - if (inj_cntl.surface_max_rate > 0.) { - sGrp[Isi::waterSurfRateLimit] = sgprop(M::liquid_surface_rate, inj_cntl.surface_max_rate); - } - if (inj_cntl.resv_max_rate > 0.) { - sGrp[Isi::waterResRateLimit > 0.] = sgprop(M::rate, inj_cntl.resv_max_rate); - } - if (inj_cntl.target_reinj_fraction > 0.) { - sGrp[Isi::waterReinjectionLimit] = inj_cntl.target_reinj_fraction; - } - if (inj_cntl.target_void_fraction > 0.) { - sGrp[Isi::waterVoidageLimit] = inj_cntl.target_void_fraction; - } - } - } -} -} // SGrp - -namespace XGrp { -std::size_t entriesPerGroup(const std::vector& inteHead) -{ - // INTEHEAD[38] = NXGRPZ - return inteHead[38]; -} - -Opm::RestartIO::Helpers::WindowedArray -allocate(const std::vector& inteHead) -{ - using WV = Opm::RestartIO::Helpers::WindowedArray; - - return WV { - WV::NumWindows{ ngmaxz(inteHead) }, - WV::WindowSize{ entriesPerGroup(inteHead) } - }; -} - -// here define the dynamic group quantities to be written to the restart file -template -void dynamicContrib(const std::vector& restart_group_keys, - const std::vector& restart_field_keys, - const std::map& groupKeyToIndex, - const std::map& fieldKeyToIndex, - const Opm::Group& group, - const Opm::SummaryState& sumState, - XGrpArray& xGrp) -{ - std::string groupName = group.name(); - const std::vector& keys = (groupName == "FIELD") - ? restart_field_keys : restart_group_keys; - const std::map& keyToIndex = (groupName == "FIELD") - ? fieldKeyToIndex : groupKeyToIndex; - - for (const auto& key : keys) { - std::string compKey = (groupName == "FIELD") - ? key : key + ":" + groupName; - - if (sumState.has(compKey)) { - double keyValue = sumState.get(compKey); - const auto itr = keyToIndex.find(key); - xGrp[itr->second] = keyValue; - } - } -} -} // XGrp - -namespace ZGrp { -std::size_t entriesPerGroup(const std::vector& inteHead) -{ - // INTEHEAD[39] = NZGRPZ - return inteHead[39]; -} - -Opm::RestartIO::Helpers::WindowedArray< - Opm::EclIO::PaddedOutputString<8> - > -allocate(const std::vector& inteHead) -{ - using WV = Opm::RestartIO::Helpers::WindowedArray< - Opm::EclIO::PaddedOutputString<8> - >; - - return WV { - WV::NumWindows{ ngmaxz(inteHead) }, - WV::WindowSize{ entriesPerGroup(inteHead) } - }; -} - -template -void staticContrib(const Opm::Group& group, ZGroupArray& zGroup) -{ - zGroup[0] = group.name(); -} -} // ZGrp -} // Anonymous - - - -// ===================================================================== - -Opm::RestartIO::Helpers::AggregateGroupData:: -AggregateGroupData(const std::vector& inteHead) - : iGroup_ (IGrp::allocate(inteHead)) - , sGroup_ (SGrp::allocate(inteHead)) - , xGroup_ (XGrp::allocate(inteHead)) - , zGroup_ (ZGrp::allocate(inteHead)) - , nWGMax_ (nwgmax(inteHead)) - , nGMaxz_ (ngmaxz(inteHead)) -{} - -// --------------------------------------------------------------------- - -void -Opm::RestartIO::Helpers::AggregateGroupData:: -captureDeclaredGroupData(const Opm::Schedule& sched, - const Opm::UnitSystem& units, - const std::size_t simStep, - const Opm::SummaryState& sumState, - const std::vector& inteHead) -{ - std::vector curGroups(ngmaxz(inteHead), nullptr); - for (const auto& group_name : sched.groupNames(simStep)) { - const auto& group = sched.getGroup(group_name, simStep); - int ind = (group.name() == "FIELD") - ? ngmaxz(inteHead)-1 : group.insert_index()-1; - curGroups[ind] = std::addressof(group); - } - - groupLoop(curGroups, [&sched, simStep, sumState, this] - (const Group& group, const std::size_t groupID) -> void - { - auto ig = this->iGroup_[groupID]; - - IGrp::staticContrib(sched, group, this->nWGMax_, this->nGMaxz_, - simStep, sumState, this->cmodeToNum, ig); - }); - - // Define Static Contributions to SGrp Array. - groupLoop(curGroups, - [&sumState, &units, this](const Group& group , const std::size_t groupID) -> void - { - auto sw = this->sGroup_[groupID]; - SGrp::staticContrib(group, sumState, units, sw); - }); - - // Define Dynamic Contributions to XGrp Array. - groupLoop(curGroups, [&sumState, this] - (const Group& group, const std::size_t groupID) -> void - { - auto xg = this->xGroup_[groupID]; - - XGrp::dynamicContrib(this->restart_group_keys, this->restart_field_keys, - this->groupKeyToIndex, this->fieldKeyToIndex, group, - sumState, xg); - }); - - // Define Static Contributions to ZGrp Array. - groupLoop(curGroups, [this, &inteHead] - (const Group& group, const std::size_t /* groupID */) -> void - { - std::size_t group_index = group.insert_index() - 1; - if (group.name() == "FIELD") - group_index = ngmaxz(inteHead) - 1; - auto zg = this->zGroup_[ group_index ]; - - ZGrp::staticContrib(group, zg); - }); -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/AggregateMSWData.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/AggregateMSWData.cpp deleted file mode 100644 index 233f95794c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/AggregateMSWData.cpp +++ /dev/null @@ -1,931 +0,0 @@ -/* - Copyright 2018 Statoil ASA - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include - -#include - -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -// ##################################################################### -// Class Opm::RestartIO::Helpers::AggregateMSWData -// --------------------------------------------------------------------- - -namespace { - - std::size_t nswlmx(const std::vector& inteHead) - { - // inteHead(175) = NSWLMX - return inteHead[175]; - } - - std::size_t nisegz(const std::vector& inteHead) - { - // inteHead(178) = NISEGZ - return inteHead[178]; - } - - std::size_t nrsegz(const std::vector& inteHead) - { - // inteHead(179) = NRSEGZ - return inteHead[179]; - } - - std::size_t nilbrz(const std::vector& inteHead) - { - // inteHead(180) = NILBRZ - return inteHead[180]; - } - - std::vector - inflowSegmentsIndex(const Opm::WellSegments& segSet, const std::size_t& segIndex) { - const auto& segNumber = segSet[segIndex].segmentNumber(); - std::vector inFlowSegInd; - for (std::size_t ind = 0; ind < segSet.size(); ind++) { - const auto& i_outletSeg = segSet[ind].outletSegment(); - if (segNumber == i_outletSeg) { - inFlowSegInd.push_back(ind); - } - } - return inFlowSegInd; - } - - Opm::RestartIO::Helpers::BranchSegmentPar - getBranchSegmentParam(const Opm::WellSegments& segSet, const int branch) - { - int noSegInBranch = 0; - int firstSeg = -1; - int lastSeg = -1; - int outletS = 0; - for (std::size_t segInd = 0; segInd < segSet.size(); segInd++) { - const auto& segNo = segSet[segInd].segmentNumber(); - const auto& i_branch = segSet[segInd].branchNumber(); - const auto& i_outS = segSet[segInd].outletSegment(); - if (i_branch == branch) { - noSegInBranch +=1; - if (firstSeg < 0) { - firstSeg = segNo; - outletS = (branch > 1) ? i_outS : 0; - } - lastSeg = segNo; - } - } - - return { - outletS, - noSegInBranch, - firstSeg, - lastSeg, - branch - }; - } - - std::vector segmentIndFromOrderedSegmentInd(const Opm::WellSegments& segSet, const std::vector& ordSegNo) { - std::vector sNFOSN (segSet.size(),0); - for (std::size_t segInd = 0; segInd < segSet.size(); segInd++) { - sNFOSN[ordSegNo[segInd]] = segInd; - } - return sNFOSN; - } - std::vector segmentOrder(const Opm::WellSegments& segSet, const std::size_t segIndex) { - std::vector ordSegNumber; - std::vector segIndCB; - // Store "heel" segment since that will not always be at the end of the list - segIndCB.push_back(segIndex); - std::size_t newSInd = segIndex; - const auto& origBranchNo = segSet[segIndex].branchNumber(); - bool endOrigBranch; - // loop down branch to find all segments in branch and number from "toe" to "heel" - while (newSInd < segSet.size()) { - endOrigBranch = true; - const auto& iSInd = inflowSegmentsIndex(segSet, newSInd); - for (auto& isi : iSInd ) { - const auto& inflowBranch = segSet[isi].branchNumber(); - if (origBranchNo == inflowBranch) { - endOrigBranch = false; - } - } - if (iSInd.size() > 0) { - for (const auto& ind : iSInd) { - auto inflowBranch = segSet[ind].branchNumber(); - if (origBranchNo == inflowBranch) { - // if inflow segment belongs to same branch add contribution - segIndCB.insert(segIndCB.begin(), ind); - // search recursively down this branch to find more inflow branches - newSInd = ind; - } - else { - // if inflow segment belongs to different branch, start new search - const auto& nSOrd = segmentOrder(segSet, ind); - // copy the segments already found and indexed into the total ordered segment vector - for (std::size_t indOS = 0; indOS < nSOrd.size(); indOS++) { - ordSegNumber.push_back(nSOrd[indOS]); - } - if (endOrigBranch) { - newSInd = segSet.size(); - } - // increment the local branch sequence number counter - } - } - } - if (endOrigBranch || (iSInd.size()==0)) { - // have come to toe of current branch - store segment indicies of current branch - for (std::size_t indOS = 0; indOS < segIndCB.size(); indOS++) { - ordSegNumber.push_back(segIndCB[indOS]); - } - // set new index to exit while loop - newSInd = segSet.size(); - } - } - return ordSegNumber; - } - - std::vector segmentOrder(const Opm::WellSegments& segSet) { - return segmentOrder(segSet, 0); - } - - Opm::RestartIO::Helpers::SegmentSetSourceSinkTerms - getSegmentSetSSTerms(const std::string& wname, const Opm::WellSegments& segSet, const std::vector& rateConns, - const Opm::WellConnections& welConns, const Opm::UnitSystem& units) - { - std::vector qosc (segSet.size(), 0.); - std::vector qwsc (segSet.size(), 0.); - std::vector qgsc (segSet.size(), 0.); - std::vector openConnections; - using M = ::Opm::UnitSystem::measure; - using R = ::Opm::data::Rates::opt; - for (auto nConn = welConns.size(), connID = 0*nConn; connID < nConn; connID++) { - if (welConns[connID].state() == Opm::Connection::State::OPEN) openConnections.push_back(&welConns[connID]); - } - if (openConnections.size() != rateConns.size()) { - throw std::invalid_argument { - "Inconsistent number of open connections I in Opm::WellConnections (" + - std::to_string(welConns.size()) + ") and vector (" + - std::to_string(rateConns.size()) + ") in Well " + wname - }; - } - for (auto nConn = openConnections.size(), connID = 0*nConn; connID < nConn; connID++) { - const auto& segNo = openConnections[connID]->segment(); - const auto& segInd = segSet.segmentNumberToIndex(segNo); - const auto& Q = rateConns[connID].rates; - - auto get = [&units, &Q](const M u, const R q) -> double - { - const auto val = Q.has(q) ? Q.get(q) : 0.0; - - return - units.from_si(u, val); - }; - - qosc[segInd] += get(M::liquid_surface_rate, R::oil); - qwsc[segInd] += get(M::liquid_surface_rate, R::wat); - qgsc[segInd] += get(M::gas_surface_rate, R::gas); - } - - return { - qosc, - qwsc, - qgsc - }; - } - - Opm::RestartIO::Helpers::SegmentSetFlowRates - getSegmentSetFlowRates(const std::string& wname, const Opm::WellSegments& segSet, const std::vector& rateConns, - const Opm::WellConnections& welConns, const Opm::UnitSystem& units) - { - std::vector sofr (segSet.size(), 0.); - std::vector swfr (segSet.size(), 0.); - std::vector sgfr (segSet.size(), 0.); - // - //call function to calculate the individual segment source/sink terms - auto sSSST = getSegmentSetSSTerms(wname, segSet, rateConns, welConns, units); - - // find an ordered list of segments - auto orderedSegmentInd = segmentOrder(segSet); - auto sNFOSN = segmentIndFromOrderedSegmentInd(segSet, orderedSegmentInd); - // loop over segments according to the ordered segments sequence which ensures that the segments alway are traversed in the from - // inflow to outflow direction (a branch toe is the innermost inflow end) - for (std::size_t indOSN = 0; indOSN < sNFOSN.size(); indOSN++) { - const auto& segInd = sNFOSN[indOSN]; - // the segment flow rates is the sum of the the source/sink terms for each segment plus the flow rates from the inflow segments - // add source sink terms - sofr[segInd] += sSSST.qosc[segInd]; - swfr[segInd] += sSSST.qwsc[segInd]; - sgfr[segInd] += sSSST.qgsc[segInd]; - // add flow from all inflow segments - for (const auto& segNo : segSet[segInd].inletSegments()) { - const auto & ifSegInd = segSet.segmentNumberToIndex(segNo); - sofr[segInd] += sofr[ifSegInd]; - swfr[segInd] += swfr[ifSegInd]; - sgfr[segInd] += sgfr[ifSegInd]; - } - } - return { - sofr, - swfr, - sgfr - }; - } - - - std::vector SegmentSetBranches(const Opm::WellSegments& segSet) { - std::vector branches; - for (std::size_t segInd = 0; segInd < segSet.size(); segInd++) { - const auto& i_branch = segSet[segInd].branchNumber(); - if (std::find(branches.begin(), branches.end(), i_branch) == branches.end()) { - branches.push_back(i_branch); - } - } - return branches; - } - - int firstSegmentInBranch(const Opm::WellSegments& segSet, const int branch) { - int firstSegInd = 0; - std::size_t segInd = 0; - while ((segInd < segSet.size()) && (firstSegInd == 0)) { - const auto& i_branch = segSet[segInd].branchNumber(); - if (branch == i_branch) { - firstSegInd = segInd; - } - segInd+=1; - } - return firstSegInd; - } - - int noConnectionsSegment(const Opm::WellConnections& compSet, - const Opm::WellSegments& segSet, - const std::size_t segIndex) - { - const auto& segNumber = segSet[segIndex].segmentNumber(); - int noConnections = 0; - for (const auto& it : compSet) { - auto cSegment = it.segment(); - if (segNumber == cSegment) { - noConnections+=1; - } - } - - return noConnections; - } - - int sumConnectionsSegment(const Opm::WellConnections& compSet, - const Opm::WellSegments& segSet, - const std::size_t segIndex) - { - // This function returns (for a given segment) the sum of number of connections for each segment - // with lower segment index than the currnet segment - // If the segment contains no connections, the number returned is zero. - int sumConn = 0; - if (noConnectionsSegment(compSet, segSet, segIndex) > 0) { - // add up the number of connections for Ã¥ segments with lower segment index than current segment - for (size_t ind = 0; ind <= segIndex; ind++) { - size_t addCon = (ind == segIndex) ? 1 : noConnectionsSegment(compSet, segSet, ind); - sumConn += addCon; - } - } - return sumConn; - } - - int noInFlowBranches(const Opm::WellSegments& segSet, std::size_t segIndex) { - const auto& segNumber = segSet[segIndex].segmentNumber(); - const auto& branch = segSet[segIndex].branchNumber(); - int noIFBr = 0; - for (std::size_t ind = 0; ind < segSet.size(); ind++) { - const auto& o_segNum = segSet[ind].outletSegment(); - const auto& i_branch = segSet[ind].branchNumber(); - if ((segNumber == o_segNum) && (branch != i_branch)){ - noIFBr+=1; - } - } - return noIFBr; - } - //find the number of inflow branch-segments (segments that has a branch) from the - // first segment to the current segment for segments that has at least one inflow branch - // Segments with no inflow branches get the value zero - int sumNoInFlowBranches(const Opm::WellSegments& segSet, const std::size_t& segIndex) { - int sumIFB = 0; - //auto segInd = segIndex; - for (int segInd = static_cast(segIndex); segInd >= 0; segInd--) { - const auto& curBranch = segSet[segInd].branchNumber(); - const auto& iSInd = inflowSegmentsIndex(segSet, segInd); - for (auto inFlowInd : iSInd) { - const auto& inFlowBranch = segSet[inFlowInd].branchNumber(); - // if inflow segment belongs to different branch add contribution - if (curBranch != inFlowBranch) { - sumIFB+=1; - } - } - } - // check if the segment has inflow branches - if yes return sumIFB else return zero - return (noInFlowBranches(segSet, segIndex) >= 1) - ? sumIFB : 0; - } - - - int inflowSegmentCurBranch(const std::string& wname, const Opm::WellSegments& segSet, std::size_t segIndex) { - const auto& branch = segSet[segIndex].branchNumber(); - const auto& segNumber = segSet[segIndex].segmentNumber(); - int inFlowSegInd = -1; - for (std::size_t ind = 0; ind < segSet.size(); ind++) { - const auto& i_segNum = segSet[ind].segmentNumber(); - const auto& i_branch = segSet[ind].branchNumber(); - const auto& i_outFlowSeg = segSet[ind].outletSegment(); - if ((branch == i_branch) && (segNumber == i_outFlowSeg)) { - if (inFlowSegInd == -1) { - inFlowSegInd = segSet.segmentNumberToIndex(i_segNum); - } - else { - std::cout << "Non-unique inflow segment in same branch, Well: " << wname << std::endl; - std::cout << "Segment number: " << segNumber << std::endl; - std::cout << "Branch number: " << branch << std::endl; - std::cout << "Inflow segment number 1: " << segSet[inFlowSegInd].segmentNumber() << std::endl; - std::cout << "Inflow segment number 2: " << segSet[ind].segmentNumber() << std::endl; - throw std::invalid_argument("Non-unique inflow segment in same branch, Well " + wname); - } - } - } - return (inFlowSegInd == -1) ? 0 : inFlowSegInd; - } - - template - void MSWLoop(const std::vector& wells, - MSWOp&& mswOp) - { - auto mswID = std::size_t{0}; - for (const auto* well : wells) { - mswID += 1; - - if (well == nullptr) { continue; } - - mswOp(*well, mswID - 1); - } - } - - namespace ISeg { - std::size_t entriesPerMSW(const std::vector& inteHead) - { - // inteHead(176) = NSEGMX - // inteHead(178) = NISEGZ - return inteHead[176] * inteHead[178]; - } - - Opm::RestartIO::Helpers::WindowedArray - allocate(const std::vector& inteHead) - { - using WV = Opm::RestartIO::Helpers::WindowedArray; - - return WV { - WV::NumWindows{ nswlmx(inteHead) }, - WV::WindowSize{ entriesPerMSW(inteHead) } - }; - } - - template - void assignSpiralICDCharacteristics(const Opm::Segment& segment, - const std::size_t baseIndex, - ISegArray& iSeg) - { - using Ix = ::Opm::RestartIO::Helpers:: - VectorItems::ISeg::index; - - const auto& sicd = segment.spiralICD(); - iSeg[baseIndex + Ix::ICDScalingMode] = sicd->methodFlowScaling(); - iSeg[baseIndex + Ix::ICDOpenShutFlag] = sicd->ecl_status(); - } - - template - void assignSegmentTypeCharacteristics(const Opm::Segment& segment, - const std::size_t baseIndex, - ISegArray& iSeg) - { - if (isSpiralICD(segment)) { - assignSpiralICDCharacteristics(segment, baseIndex, iSeg); - } - } - - template - void staticContrib(const Opm::Well& well, - const std::vector& inteHead, - ISegArray& iSeg) - { - using Ix = ::Opm::RestartIO::Helpers:: - VectorItems::ISeg::index; - - if (well.isMultiSegment()) { - //loop over segment set and print out information - const auto& welSegSet = well.getSegments(); - const auto& completionSet = well.getConnections(); - const auto& noElmSeg = nisegz(inteHead); - auto orderedSegmentNo = segmentOrder(welSegSet); - std::vector seg_reorder (welSegSet.size(),0); - for (std::size_t ind = 0; ind < welSegSet.size(); ind++ ){ - const auto s_no = welSegSet[orderedSegmentNo[ind]].segmentNumber(); - const auto s_ind = welSegSet.segmentNumberToIndex(s_no); - seg_reorder[s_ind] = ind+1; - } - for (std::size_t ind = 0; ind < welSegSet.size(); ind++) { - const auto& segment = welSegSet[ind]; - - auto segNumber = segment.segmentNumber(); - auto iS = (segNumber-1)*noElmSeg; - iSeg[iS + Ix::SegNo] = welSegSet[orderedSegmentNo[ind]].segmentNumber(); - iSeg[iS + Ix::OutSeg] = segment.outletSegment(); - iSeg[iS + Ix::InSegCurBranch] = (inflowSegmentCurBranch(well.name(), welSegSet, ind) == 0) ? 0 : welSegSet[inflowSegmentCurBranch(well.name(), welSegSet, ind)].segmentNumber(); - iSeg[iS + Ix::BranchNo] = segment.branchNumber(); - iSeg[iS + 4] = noInFlowBranches(welSegSet, ind); - iSeg[iS + 5] = sumNoInFlowBranches(welSegSet, ind); - iSeg[iS + 6] = noConnectionsSegment(completionSet, welSegSet, ind); - iSeg[iS + 7] = sumConnectionsSegment(completionSet, welSegSet, ind); - iSeg[iS + 8] = seg_reorder[ind]; - - iSeg[iS + Ix::SegmentType] = segment.ecl_type_id(); - if (! isRegular(segment)) { - assignSegmentTypeCharacteristics(segment, iS, iSeg); - } - } - } - else { - throw std::invalid_argument("No such multisegment well: " + well.name()); - } - } - } // ISeg - - namespace RSeg { - std::size_t entriesPerMSW(const std::vector& inteHead) - { - // inteHead(176) = NSEGMX - // inteHead(179) = NRSEGZ - return inteHead[176] * inteHead[179]; - } - - Opm::RestartIO::Helpers::WindowedArray - allocate(const std::vector& inteHead) - { - using WV = Opm::RestartIO::Helpers::WindowedArray; - - return WV { - WV::NumWindows{ nswlmx(inteHead) }, - WV::WindowSize{ entriesPerMSW(inteHead) } - }; - } - - float valveFlowUnitCoefficient(const Opm::UnitSystem::UnitType uType) - { - using UType = Opm::UnitSystem::UnitType; - - // Numerical values taken from written sources. Nothing known - // about their origins, other than the fact that they depend on - // the active unit conventions. - switch (uType) { - case UType::UNIT_TYPE_METRIC: - return 1.340e-15f; - - case UType::UNIT_TYPE_FIELD: - return 2.892e-14f; - - case UType::UNIT_TYPE_LAB: - return 7.615e-14f; - - case UType::UNIT_TYPE_PVT_M: - return 1.322e-15f; - - default: - break; - } - - throw std::invalid_argument { - "Unsupported Unit Convention: '" + - std::to_string(static_cast(uType)) + '\'' - }; - } - - template - void assignValveCharacteristics(const ::Opm::Segment& segment, - const ::Opm::UnitSystem& usys, - const int baseIndex, - RSegArray& rSeg) - { - using Ix = ::Opm::RestartIO::Helpers::VectorItems::RSeg::index; - using M = ::Opm::UnitSystem::measure; - - const auto* valve = segment.valve(); - - rSeg[baseIndex + Ix::ValveLength] = - usys.from_si(M::length, valve->pipeAdditionalLength()); - - rSeg[baseIndex + Ix::ValveArea] = - usys.from_si(M::length, usys.from_si(M::length, valve->conCrossArea())); - - rSeg[baseIndex + Ix::ValveFlowCoeff] = valve->conFlowCoefficient(); - rSeg[baseIndex + Ix::ValveMaxArea] = - usys.from_si(M::length, usys.from_si(M::length, valve->conMaxCrossArea())); - - const auto Cu = valveFlowUnitCoefficient(usys.getType()); - const auto CvAc = rSeg[baseIndex + Ix::ValveFlowCoeff] - * rSeg[baseIndex + Ix::ValveArea]; - - rSeg[baseIndex + Ix::DeviceBaseStrength] = Cu / (2.0f * CvAc * CvAc); - rSeg[baseIndex + Ix::ValveAreaFraction] = - rSeg[baseIndex + Ix::ValveArea] - / rSeg[baseIndex + Ix::ValveMaxArea]; - } - - template - void assignSpiralICDCharacteristics(const ::Opm::Segment& segment, - const ::Opm::UnitSystem& usys, - const int baseIndex, - RSegArray& rSeg) - { - using Ix = ::Opm::RestartIO::Helpers::VectorItems::RSeg::index; - using M = ::Opm::UnitSystem::measure; - - const auto& sicd = segment.spiralICD(); - - rSeg[baseIndex + Ix::DeviceBaseStrength] = - usys.from_si(M::icd_strength, sicd->strength()); - - rSeg[baseIndex + Ix::CalibrFluidDensity] = - usys.from_si(M::density, sicd->densityCalibration()); - - rSeg[baseIndex + Ix::CalibrFluidViscosity] = - usys.from_si(M::viscosity, sicd->viscosityCalibration()); - - rSeg[baseIndex + Ix::CriticalWaterFraction] = sicd->criticalValue(); - - rSeg[baseIndex + Ix::TransitionRegWidth] = - sicd->widthTransitionRegion(); - - rSeg[baseIndex + Ix::MaxEmulsionRatio] = - sicd->maxViscosityRatio(); - - rSeg[baseIndex + Ix::MaxValidFlowRate] = - usys.from_si(M::geometric_volume_rate, sicd->maxAbsoluteRate()); - - rSeg[baseIndex + Ix::ICDLength] = - usys.from_si(M::length, sicd->length()); - } - - template - void assignSegmentTypeCharacteristics(const ::Opm::Segment& segment, - const ::Opm::UnitSystem& usys, - const int baseIndex, - RSegArray& rSeg) - { - if (isSpiralICD(segment)) { - assignSpiralICDCharacteristics(segment, usys, baseIndex, rSeg); - } - - if (isValve(segment)) { - assignValveCharacteristics(segment, usys, baseIndex, rSeg); - } - } - - template - void staticContrib_useMSW(const Opm::Well& well, - const std::vector& inteHead, - const Opm::EclipseGrid& grid, - const Opm::UnitSystem& units, - const ::Opm::SummaryState& smry, - const Opm::data::WellRates& wr, - RSegArray& rSeg) - { - using Ix = ::Opm::RestartIO::Helpers::VectorItems::RSeg::index; - if (well.isMultiSegment()) { - // use segment index as counter - zero-based - using M = ::Opm::UnitSystem::measure; - const auto gfactor = (units.getType() == Opm::UnitSystem::UnitType::UNIT_TYPE_FIELD) - ? 0.1781076 : 0.001; - - //loop over segment set and print out information - const auto& noElmSeg = nrsegz(inteHead); - const auto& welSegSet = well.getSegments(); - const auto& segment0 = welSegSet[0]; - - const auto& conn0 = well.getConnections(); - const auto& welConns = Opm::WellConnections(conn0, grid); - const auto& wname = well.name(); - const auto wPKey = "WBHP:" + wname; - const auto& wRatesIt = wr.find(wname); - bool haveWellRes = wRatesIt != wr.end(); - const auto volFromLengthUnitConv = units.from_si(M::length, units.from_si(M::length, units.from_si(M::length, 1.))); - const auto areaFromLengthUnitConv = units.from_si(M::length, units.from_si(M::length, 1.)); - // - //Initialize temporary variables - double temp_o = 0.; - double temp_w = 0.; - double temp_g = 0.; - - // find well connections and calculate segment rates based on well connection production/injection terms - auto sSFR = Opm::RestartIO::Helpers::SegmentSetFlowRates{}; - if (haveWellRes) { - sSFR = getSegmentSetFlowRates(well.name(), welSegSet, wRatesIt->second.connections, welConns, units); - } - - std::string stringSegNum = std::to_string(segment0.segmentNumber()); - auto get = [&smry, &wname, &stringSegNum](const std::string& vector) - { - // 'stringSegNum' is one-based (1 .. #segments inclusive) - const auto key = vector + ':' + wname + ':' + stringSegNum; - return smry.has(key) ? smry.get(key) : 0.0; - }; - - auto iS = (segment0.segmentNumber() - 1)*noElmSeg; - // Treat the top segment individually - rSeg[iS + Ix::DistOutlet] = units.from_si(M::length, welSegSet.lengthTopSegment()); - rSeg[iS + Ix::OutletDepthDiff] = units.from_si(M::length, welSegSet.depthTopSegment()); - rSeg[iS + Ix::SegVolume] = volFromLengthUnitConv*welSegSet.volumeTopSegment(); - rSeg[iS + Ix::DistBHPRef] = rSeg[iS + Ix::DistOutlet]; - rSeg[iS + Ix::DepthBHPRef] = rSeg[iS + Ix::OutletDepthDiff]; - // - // branch according to whether multisegment well calculations are switched on or not - - - if (haveWellRes && wRatesIt->second.segments.size() < 2) { - // Note: Segment flow rates and pressure from 'smry' have correct - // output units and sign conventions. - temp_o = sSFR.sofr[0]; - temp_w = sSFR.swfr[0]*0.1; - temp_g = sSFR.sgfr[0]*gfactor; - //Item 12 Segment pressure - use well flow bhp - rSeg[iS + Ix::Pressure] = (smry.has(wPKey)) ? smry.get(wPKey) :0.0; - } - else { - // Note: Segment flow rates and pressure from 'smry' have correct - // output units and sign conventions. - temp_o = get("SOFR"); - temp_w = get("SWFR")*0.1; - temp_g = get("SGFR")*gfactor; - //Item 12 Segment pressure - rSeg[iS + Ix::Pressure] = get("SPR"); - } - - rSeg[iS + Ix::TotFlowRate] = temp_o + temp_w + temp_g; - rSeg[iS + Ix::WatFlowFract] = (std::abs(temp_w) > 0) ? temp_w / rSeg[8] : 0.; - rSeg[iS + Ix::GasFlowFract] = (std::abs(temp_g) > 0) ? temp_g / rSeg[8] : 0.; - - // value is 1. based on tests on several data sets - rSeg[iS + Ix::item40] = 1.; - - rSeg[iS + Ix::item106] = 1.0; - rSeg[iS + Ix::item107] = 1.0; - rSeg[iS + Ix::item108] = 1.0; - rSeg[iS + Ix::item109] = 1.0; - rSeg[iS + Ix::item110] = 1.0; - rSeg[iS + Ix::item111] = 1.0; - - //Treat subsequent segments - for (std::size_t segIndex = 1; segIndex < welSegSet.size(); segIndex++) { - const auto& segment = welSegSet[segIndex]; - const auto& outlet_segment = welSegSet.getFromSegmentNumber( segment.outletSegment() ); - const int segNumber = segment.segmentNumber(); - stringSegNum = std::to_string(segNumber); - - // set the elements of the rSeg array - iS = (segNumber - 1)*noElmSeg; - rSeg[iS + Ix::DistOutlet] = units.from_si(M::length, (segment.totalLength() - outlet_segment.totalLength())); - rSeg[iS + Ix::OutletDepthDiff] = units.from_si(M::length, (segment.depth() - outlet_segment.depth())); - rSeg[iS + Ix::SegDiam] = units.from_si(M::length, (segment.internalDiameter())); - rSeg[iS + Ix::SegRough] = units.from_si(M::length, (segment.roughness())); - rSeg[iS + Ix::SegArea] = areaFromLengthUnitConv * segment.crossArea(); - rSeg[iS + Ix::SegVolume] = volFromLengthUnitConv * segment.volume(); - rSeg[iS + Ix::DistBHPRef] = units.from_si(M::length, (segment.totalLength())); - rSeg[iS + Ix::DepthBHPRef] = units.from_si(M::length, (segment.depth())); - - // see section above for explanation of values - // branch according to whether multisegment well calculations are switched on or not - if (haveWellRes && wRatesIt->second.segments.size() < 2) { - // Note: Segment flow rates and pressure from 'smry' have correct - // output units and sign conventions. - temp_o = sSFR.sofr[segIndex]; - temp_w = sSFR.swfr[segIndex]*0.1; - temp_g = sSFR.sgfr[segIndex]*gfactor; - //Item 12 Segment pressure - use well flow bhp - rSeg[iS + Ix::Pressure] = (smry.has(wPKey)) ? smry.get(wPKey) :0.0; - } - else { - // Note: Segment flow rates and pressure from 'smry' have correct - // output units and sign conventions. - temp_o = get("SOFR"); - temp_w = get("SWFR")*0.1; - temp_g = get("SGFR")*gfactor; - //Item 12 Segment pressure - rSeg[iS + Ix::Pressure] = get("SPR"); - } - - rSeg[iS + Ix::TotFlowRate] = temp_o + temp_w + temp_g; - rSeg[iS + Ix::WatFlowFract] = (std::abs(temp_w) > 0) ? temp_w / rSeg[iS + 8] : 0.; - rSeg[iS + Ix::GasFlowFract] = (std::abs(temp_g) > 0) ? temp_g / rSeg[iS + 8] : 0.; - - rSeg[iS + Ix::item40] = 1.; - - rSeg[iS + Ix::item106] = 1.0; - rSeg[iS + Ix::item107] = 1.0; - rSeg[iS + Ix::item108] = 1.0; - rSeg[iS + Ix::item109] = 1.0; - rSeg[iS + Ix::item110] = 1.0; - rSeg[iS + Ix::item111] = 1.0; - - if (! isRegular(segment)) { - assignSegmentTypeCharacteristics(segment, units, iS, rSeg); - } - } - } - else { - throw std::invalid_argument("No such multisegment well: " + well.name()); - } - } - } // RSeg - - - namespace ILBS { - std::size_t entriesPerMSW(const std::vector& inteHead) - { - // inteHead(177) = NLBRMX - return inteHead[177]; - } - - Opm::RestartIO::Helpers::WindowedArray - allocate(const std::vector& inteHead) - { - using WV = Opm::RestartIO::Helpers::WindowedArray; - - return WV { - WV::NumWindows{ nswlmx(inteHead) }, - WV::WindowSize{ entriesPerMSW(inteHead) } - }; - } - - template - void staticContrib(const Opm::Well& well, - ILBSArray& iLBS) - { - if (well.isMultiSegment()) { - // - // Store the segment number of the first segment in branch for branch number - // 2 and upwards - const auto& welSegSet = well.getSegments(); - const auto& branches = SegmentSetBranches(welSegSet); - for (auto it = branches.begin()+1; it != branches.end(); it++){ - iLBS[*it-2] = welSegSet[firstSegmentInBranch(welSegSet, *it)].segmentNumber(); - } - } - else { - throw std::invalid_argument("No such multisegment well: " + well.name()); - } - } - } // ILBS - - namespace ILBR { - std::size_t entriesPerMSW(const std::vector& inteHead) - { - // inteHead(177) = NLBRMX - // inteHead(180) = NILBRZ - return inteHead[177] * inteHead[180]; - } - - Opm::RestartIO::Helpers::WindowedArray - allocate(const std::vector& inteHead) - { - using WV = Opm::RestartIO::Helpers::WindowedArray; - - return WV { - WV::NumWindows{ nswlmx(inteHead) }, - WV::WindowSize{ entriesPerMSW(inteHead) } - }; - } - - template - void staticContrib(const Opm::Well& well, - const std::vector& inteHead, - ILBRArray& iLBR) - { - if (well.isMultiSegment()) { - // - const auto& welSegSet = well.getSegments(); - const auto& branches = SegmentSetBranches(welSegSet); - const auto& noElmBranch = nilbrz(inteHead); - for (auto it = branches.begin(); it != branches.end(); it++){ - const auto iB = (*it-1)*noElmBranch; - const auto& branchParam = getBranchSegmentParam(welSegSet, *it); - iLBR[iB ] = branchParam.outletS; - iLBR[iB+1] = branchParam.noSegInBranch; - iLBR[iB+2] = branchParam.firstSeg; - iLBR[iB+3] = branchParam.lastSeg; - iLBR[iB+4] = branchParam.branch - 1; - } - } - else { - throw std::invalid_argument("No such multisegment well: " + well.name()); - } - } - } // ILBR - -} // Anonymous - -// ===================================================================== - -Opm::RestartIO::Helpers::AggregateMSWData:: -AggregateMSWData(const std::vector& inteHead) - : iSeg_ (ISeg::allocate(inteHead)) - , rSeg_ (RSeg::allocate(inteHead)) - , iLBS_ (ILBS::allocate(inteHead)) - , iLBR_ (ILBR::allocate(inteHead)) -{} - -// --------------------------------------------------------------------- - -void -Opm::RestartIO::Helpers::AggregateMSWData:: -captureDeclaredMSWData(const Schedule& sched, - const std::size_t rptStep, - const Opm::UnitSystem& units, - const std::vector& inteHead, - const Opm::EclipseGrid& grid, - const Opm::SummaryState& smry, - const Opm::data::WellRates& wr - ) -{ - const auto& wells = sched.getWells(rptStep); - auto msw = std::vector{}; - - //msw.reserve(wells.size()); - for (const auto& well : wells) { - if (well.isMultiSegment()) - msw.push_back(&well); - } - // Extract Contributions to ISeg Array - { - MSWLoop(msw, [&inteHead, this] - (const Well& well, const std::size_t mswID) -> void - { - auto imsw = this->iSeg_[mswID]; - - ISeg::staticContrib(well, inteHead, imsw); - }); - } - // Extract Contributions to RSeg Array - { - MSWLoop(msw, [&units, &inteHead, &grid, &smry, this, &wr] - (const Well& well, const std::size_t mswID) -> void - { - auto rmsw = this->rSeg_[mswID]; - - RSeg::staticContrib_useMSW(well, inteHead, grid, units, smry, wr, rmsw); - }); - } - // Extract Contributions to ILBS Array - { - MSWLoop(msw, [this] - (const Well& well, const std::size_t mswID) -> void - { - auto ilbs_msw = this->iLBS_[mswID]; - - ILBS::staticContrib(well, ilbs_msw); - }); - } - // Extract Contributions to ILBR Array - { - MSWLoop(msw, [&inteHead, this] - (const Well& well, const std::size_t mswID) -> void - { - auto ilbr_msw = this->iLBR_[mswID]; - - ILBR::staticContrib(well, inteHead, ilbr_msw); - }); - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/AggregateUDQData.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/AggregateUDQData.cpp deleted file mode 100644 index 859077f8bf..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/AggregateUDQData.cpp +++ /dev/null @@ -1,614 +0,0 @@ -/* - Copyright 2018 Statoil ASA - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include -#include -#include -#include -#include -#include - -#include -#include -//#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -// ##################################################################### -// Class Opm::RestartIO::Helpers::AggregateGroupData -// --------------------------------------------------------------------- - -namespace VI = ::Opm::RestartIO::Helpers::VectorItems; -namespace { - - // maximum number of groups - std::size_t ngmaxz(const std::vector& inteHead) - { - return inteHead[20]; - } - - // maximum number of wells - std::size_t nwmaxz(const std::vector& inteHead) - { - return inteHead[163]; - } - - - // Categorize function in terms of which token-types are used in formula - int define_type(const std::set tokens) { - int type = -4; - std::vector type_1 = { - Opm::UDQTokenType::elemental_func_sorta, - Opm::UDQTokenType::elemental_func_sortd, - Opm::UDQTokenType::elemental_func_undef, - Opm::UDQTokenType::scalar_func_sum, - Opm::UDQTokenType::scalar_func_avea, - Opm::UDQTokenType::scalar_func_aveg, - Opm::UDQTokenType::scalar_func_aveh, - Opm::UDQTokenType::scalar_func_max, - Opm::UDQTokenType::scalar_func_min, - Opm::UDQTokenType::binary_op_div - }; - - int num_type_1 = 0; - for (const auto& tok_type : type_1) { - num_type_1 += tokens.count(tok_type); - } - type = (num_type_1 > 0) ? -1 : -4; - return type; - } - - - namespace iUdq { - - Opm::RestartIO::Helpers::WindowedArray - allocate(const std::vector& udqDims) - { - using WV = Opm::RestartIO::Helpers::WindowedArray; - int nwin = std::max(udqDims[0], 1); - return WV { - WV::NumWindows{ static_cast(nwin) }, - WV::WindowSize{ static_cast(udqDims[1]) } - }; - } - - template - void staticContrib(const Opm::UDQInput& udq_input, IUDQArray& iUdq) - { - if (udq_input.is()) { - const auto& udq_define = udq_input.get(); - const auto& tokens = udq_define.func_tokens(); - iUdq[0] = 2; - iUdq[1] = define_type(tokens); - } else { - iUdq[0] = 0; - iUdq[1] = -4; - } - iUdq[2] = udq_input.index.typed_insert_index; - } - - } // iUdq - - namespace iUad { - - Opm::RestartIO::Helpers::WindowedArray - allocate(const std::vector& udqDims) - { - using WV = Opm::RestartIO::Helpers::WindowedArray; - int nwin = std::max(udqDims[2], 1); - return WV { - WV::NumWindows{ static_cast(nwin) }, - WV::WindowSize{ static_cast(udqDims[3]) } - }; - } - - template - void staticContrib(const Opm::UDQActive::Record& udq_record, IUADArray& iUad) - { - iUad[0] = udq_record.uad_code; - iUad[1] = udq_record.input_index + 1; - - // entry 3 - unknown meaning - value = 1 - iUad[2] = 1; - - iUad[3] = udq_record.use_count; - iUad[4] = udq_record.use_index + 1; - } - } // iUad - - - namespace zUdn { - - Opm::RestartIO::Helpers::WindowedArray< - Opm::EclIO::PaddedOutputString<8> - > - allocate(const std::vector& udqDims) - { - using WV = Opm::RestartIO::Helpers::WindowedArray< - Opm::EclIO::PaddedOutputString<8>>; - int nwin = std::max(udqDims[0], 1); - return WV { - WV::NumWindows{ static_cast(nwin) }, - WV::WindowSize{ static_cast(udqDims[4]) } - }; - } - - template - void staticContrib(const Opm::UDQInput& udq_input, zUdnArray& zUdn) - { - // entry 1 is udq keyword - zUdn[0] = udq_input.keyword(); - zUdn[1] = udq_input.unit(); - } - } // zUdn - - namespace zUdl { - - Opm::RestartIO::Helpers::WindowedArray< - Opm::EclIO::PaddedOutputString<8> - > - allocate(const std::vector& udqDims) - { - using WV = Opm::RestartIO::Helpers::WindowedArray< - Opm::EclIO::PaddedOutputString<8>>; - int nwin = std::max(udqDims[0], 1); - return WV { - WV::NumWindows{ static_cast(nwin) }, - WV::WindowSize{ static_cast(udqDims[5]) } - }; - } - - template - void staticContrib(const Opm::UDQInput& input, zUdlArray& zUdl) - { - int l_sstr = 8; - int max_l_str = 128; - // write out the input formula if key is a DEFINE udq - if (input.is()) { - const auto& udq_define = input.get(); - const std::string& z_data = udq_define.input_string(); - int n_sstr = z_data.size()/l_sstr; - if (static_cast(z_data.size()) > max_l_str) { - std::cout << "Too long input data string (max 128 characters): " << z_data << std::endl; - throw std::invalid_argument("UDQ - variable: " + udq_define.keyword()); - } - else { - for (int i = 0; i < n_sstr; i++) { - zUdl[i] = z_data.substr(i*l_sstr, l_sstr); - } - //add remainder of last non-zero string - if ((z_data.size() % l_sstr) > 0) - zUdl[n_sstr] = z_data.substr(n_sstr*l_sstr); - } - } - } - } // zUdl - - namespace iGph { - - Opm::RestartIO::Helpers::WindowedArray - allocate(const std::vector& udqDims) - { - using WV = Opm::RestartIO::Helpers::WindowedArray; - return WV { - WV::NumWindows{ static_cast(udqDims[6]) }, - WV::WindowSize{ static_cast(1) } - }; - } - - template - void staticContrib(const int inj_phase, - IGPHArray& iGph) - { - iGph[0] = inj_phase; - } - } // iGph - - namespace iUap { - - Opm::RestartIO::Helpers::WindowedArray - allocate(const std::vector& udqDims) - { - using WV = Opm::RestartIO::Helpers::WindowedArray; - int nwin = std::max(udqDims[7], 1); - return WV { - WV::NumWindows{ static_cast(nwin) }, - WV::WindowSize{ static_cast(1) } - }; - } - - template - void staticContrib(const int wg_no, - IUAPArray& iUap) - { - iUap[0] = wg_no+1; - } - } // iUap - - namespace dUdw { - - Opm::RestartIO::Helpers::WindowedArray - allocate(const std::vector& udqDims) - { - using WV = Opm::RestartIO::Helpers::WindowedArray; - int nwin = std::max(udqDims[9], 1); - int nitPrWin = std::max(udqDims[8], 1); - return WV { - WV::NumWindows{ static_cast(nwin) }, - WV::WindowSize{ static_cast(nitPrWin) } - }; - } - - template - void staticContrib(const Opm::SummaryState& st, - const std::vector& wnames, - const std::string udq, - const std::size_t nwmaxz, - DUDWArray& dUdw) - { - //initialize array to the default value for the array - for (std::size_t ind = 0; ind < nwmaxz; ind++) { - dUdw[ind] = -0.3E+21; - } - for (std::size_t ind = 0; ind < wnames.size(); ind++) { - if (st.has_well_var(wnames[ind], udq)) { - dUdw[ind] = st.get_well_var(wnames[ind], udq); - } - } - } - } // dUdw - - namespace dUdg { - - Opm::RestartIO::Helpers::WindowedArray - allocate(const std::vector& udqDims) - { - using WV = Opm::RestartIO::Helpers::WindowedArray; - int nwin = std::max(udqDims[11], 1); - return WV { - WV::NumWindows{ static_cast(nwin) }, - WV::WindowSize{ static_cast(udqDims[10]) } - }; - } - - template - void staticContrib(const Opm::SummaryState& st, - const std::vector groups, - const std::string udq, - const std::size_t ngmaxz, - DUDGArray& dUdg) - { - //initialize array to the default value for the array - for (std::size_t ind = 0; ind < groups.size(); ind++) { - if ((groups[ind] == nullptr) || (ind == ngmaxz-1)) { - dUdg[ind] = -0.3E+21; - } - else { - if (st.has_group_var((*groups[ind]).name(), udq)) { - dUdg[ind] = st.get_group_var((*groups[ind]).name(), udq); - } - else { - dUdg[ind] = -0.3E+21; - } - } - } - } - } // dUdg - - namespace dUdf { - - Opm::RestartIO::Helpers::WindowedArray - allocate(const std::vector& udqDims) - { - using WV = Opm::RestartIO::Helpers::WindowedArray; - int nwin = std::max(udqDims[12], 1); - return WV { - WV::NumWindows{ static_cast(nwin) }, - WV::WindowSize{ static_cast(1) } - }; - } - - template - void staticContrib(const Opm::SummaryState& st, - const std::string udq, - DUDFArray& dUdf) - { - //set value for group name "FIELD" - if (st.has(udq)) { - dUdf[0] = st.get(udq); - } - else { - dUdf[0] = -0.3E+21; - } - } - } // dUdf -} - - -// ===================================================================== - - -template < typename T> -std::pair findInVector(const std::vector & vecOfElements, const T & element) -{ - std::pair result; - - // Find given element in vector - auto it = std::find(vecOfElements.begin(), vecOfElements.end(), element); - - if (it != vecOfElements.end()) - { - result.second = std::distance(vecOfElements.begin(), it); - result.first = true; - } - else - { - result.first = false; - result.second = -1; - } - return result; -} - -// Make ordered list of current groups -const std::vector currentGroups(const Opm::Schedule& sched, - const std::size_t simStep, - const std::vector& inteHead ) -{ - std::vector curGroups(ngmaxz(inteHead), nullptr); - for (const auto& group_name : sched.groupNames(simStep)) { - const auto& group = sched.getGroup(group_name, simStep); - - //The FIELD group is the first group according to the insert_index() - //In the Eclipse compatible restart file, the FILED group is put at the end of the list of groups (ngmaxz(inteHead)-1) - int ind = (group.name() == "FIELD") - ? ngmaxz(inteHead)-1 : group.insert_index()-1; - curGroups[ind] = std::addressof(group); - - } - return curGroups; -} - -const std::vector Opm::RestartIO::Helpers::igphData::ig_phase(const Opm::Schedule& sched, - const std::size_t simStep, - const std::vector& inteHead ) -{ - const auto curGroups = currentGroups(sched, simStep, inteHead); - std::vector inj_phase(ngmaxz(inteHead), 0); - for (std::size_t ind = 0; ind < curGroups.size(); ind++) { - if (curGroups[ind] != nullptr) { - const auto& group = *curGroups[ind]; - if (group.isInjectionGroup()) { - /* - Initial code could only inject one phase for each group, then - numerical value '3' was used for the gas phase, that can not - be right? - */ - int phase_sum = 0; - if (group.hasInjectionControl(Opm::Phase::OIL)) - phase_sum += 1; - if (group.hasInjectionControl(Opm::Phase::WATER)) - phase_sum += 2; - if (group.hasInjectionControl(Opm::Phase::GAS)) - phase_sum += 4; - inj_phase[group.insert_index()] = phase_sum; - } - } - } - return inj_phase; -} - -const std::vector iuap_data(const Opm::Schedule& sched, - const std::size_t simStep, - const std::vector& iuap) -{ - //construct the current list of well or group sequence numbers to output the IUAP array - std::vector wg_no; - Opm::UDAKeyword wg_key; - - for (std::size_t ind = 0; ind < iuap.size(); ind++) { - auto& ctrl = iuap[ind].control; - wg_key = Opm::UDQ::keyword(ctrl); - if ((wg_key == Opm::UDAKeyword::WCONPROD) || (wg_key == Opm::UDAKeyword::WCONINJE)) { - const auto& well = sched.getWell(iuap[ind].wgname, simStep); - wg_no.push_back(well.seqIndex()); - } - else if ((wg_key == Opm::UDAKeyword::GCONPROD) || (wg_key == Opm::UDAKeyword::GCONINJE)) { - const auto& group = sched.getGroup(iuap[ind].wgname, simStep); - wg_no.push_back(group.insert_index()); - } - else { - std::cout << "Invalid Control keyword: " << static_cast(ctrl) << std::endl; - throw std::invalid_argument("UDQ - variable: " + iuap[ind].udq ); - } - - } - - return wg_no; -} - -Opm::RestartIO::Helpers::AggregateUDQData:: -AggregateUDQData(const std::vector& udqDims) - : iUDQ_ (iUdq::allocate(udqDims)), - iUAD_ (iUad::allocate(udqDims)), - zUDN_ (zUdn::allocate(udqDims)), - zUDL_ (zUdl::allocate(udqDims)), - iGPH_ (iGph::allocate(udqDims)), - iUAP_ (iUap::allocate(udqDims)), - dUDW_ (dUdw::allocate(udqDims)), - dUDG_ (dUdg::allocate(udqDims)), - dUDF_ (dUdf::allocate(udqDims)) -{} - -// --------------------------------------------------------------------- - -void -Opm::RestartIO::Helpers::AggregateUDQData:: -captureDeclaredUDQData(const Opm::Schedule& sched, - const std::size_t simStep, - const Opm::SummaryState& st, - const std::vector& inteHead) -{ - const auto& udqCfg = sched.getUDQConfig(simStep); - const auto nudq = inteHead[VI::intehead::NO_WELL_UDQS] + inteHead[VI::intehead::NO_GROUP_UDQS] + inteHead[VI::intehead::NO_FIELD_UDQS]; - int cnt_udq = 0; - for (const auto& udq_input : udqCfg.input()) { - auto udq_index = udq_input.index.insert_index; - { - auto i_udq = this->iUDQ_[udq_index]; - iUdq::staticContrib(udq_input, i_udq); - } - { - auto z_udn = this->zUDN_[udq_index]; - zUdn::staticContrib(udq_input, z_udn); - } - { - auto z_udl = this->zUDL_[udq_index]; - zUdl::staticContrib(udq_input, z_udl); - } - cnt_udq += 1; - } - if (cnt_udq != nudq) { - std::stringstream str; - str << "Inconsistent total number of udqs: " << cnt_udq << " and sum of well, group and field udqs: " << nudq; - OpmLog::error(str.str()); - } - - - auto udq_active = sched.udqActive(simStep); - if (udq_active) { - const auto& udq_records = udq_active.get_iuad(); - int cnt_iuad = 0; - for (std::size_t index = 0; index < udq_records.size(); index++) { - const auto& record = udq_records[index]; - auto i_uad = this->iUAD_[index]; - iUad::staticContrib(record, i_uad); - cnt_iuad += 1; - } - if (cnt_iuad != inteHead[VI::intehead::NO_IUADS]) { - std::stringstream str; - str << "Inconsistent number of iuad's: " << cnt_iuad << " number of iuad's from intehead " << inteHead[VI::intehead::NO_IUADS]; - OpmLog::error(str.str()); - } - - const auto& iuap_records = udq_active.get_iuap(); - int cnt_iuap = 0; - const auto iuap_vect = iuap_data(sched, simStep,iuap_records); - for (std::size_t index = 0; index < iuap_vect.size(); index++) { - const auto& wg_no = iuap_vect[index]; - auto i_uap = this->iUAP_[index]; - iUap::staticContrib(wg_no, i_uap); - cnt_iuap += 1; - } - if (cnt_iuap != inteHead[VI::intehead::NO_IUAPS]) { - std::stringstream str; - str << "Inconsistent number of iuap's: " << cnt_iuap << " number of iuap's from intehead " << inteHead[VI::intehead::NO_IUAPS]; - OpmLog::error(str.str()); - } - - - } - if (inteHead[VI::intehead::NO_GROUP_UDQS] > 0) { - Opm::RestartIO::Helpers::igphData igph_dat; - int cnt_igph = 0; - auto igph = igph_dat.ig_phase(sched, simStep, inteHead); - for (std::size_t index = 0; index < igph.size(); index++) { - auto i_igph = this->iGPH_[index]; - iGph::staticContrib(igph[index], i_igph); - cnt_igph += 1; - } - if (cnt_igph != inteHead[VI::intehead::NGMAXZ]) { - std::stringstream str; - str << "Inconsistent number of igph's: " << cnt_igph << " number of igph's from intehead " << inteHead[VI::intehead::NGMAXZ]; - OpmLog::error(str.str()); - } - } - - std::size_t i_wudq = 0; - const auto& wnames = sched.wellNames(simStep); - const auto nwmax = nwmaxz(inteHead); - int cnt_dudw = 0; - for (const auto& udq_input : udqCfg.input()) { - if (udq_input.var_type() == UDQVarType::WELL_VAR) { - const std::string& udq = udq_input.keyword(); - auto i_dudw = this->dUDW_[i_wudq]; - dUdw::staticContrib(st, wnames, udq, nwmax, i_dudw); - i_wudq++; - cnt_dudw += 1; - } - } - if (cnt_dudw != inteHead[VI::intehead::NO_WELL_UDQS]) { - std::stringstream str; - str << "Inconsistent number of dudw's: " << cnt_dudw << " number of dudw's from intehead " << inteHead[VI::intehead::NO_WELL_UDQS]; - OpmLog::error(str.str()); - } - - std::size_t i_gudq = 0; - const auto curGroups = currentGroups(sched, simStep, inteHead); - const auto ngmax = ngmaxz(inteHead); - int cnt_dudg = 0; - for (const auto& udq_input : udqCfg.input()) { - if (udq_input.var_type() == UDQVarType::GROUP_VAR) { - const std::string& udq = udq_input.keyword(); - auto i_dudg = this->dUDG_[i_gudq]; - dUdg::staticContrib(st, curGroups, udq, ngmax, i_dudg); - i_gudq++; - cnt_dudg += 1; - } - } - if (cnt_dudg != inteHead[VI::intehead::NO_GROUP_UDQS]) { - std::stringstream str; - str << "Inconsistent number of dudg's: " << cnt_dudg << " number of dudg's from intehead " << inteHead[VI::intehead::NO_GROUP_UDQS]; - OpmLog::error(str.str()); - } - - std::size_t i_fudq = 0; - int cnt_dudf = 0; - for (const auto& udq_input : udqCfg.input()) { - if (udq_input.var_type() == UDQVarType::FIELD_VAR) { - const std::string& udq = udq_input.keyword(); - auto i_dudf = this->dUDF_[i_fudq]; - dUdf::staticContrib(st, udq, i_dudf); - i_fudq++; - cnt_dudf += 1; - } - } - if (cnt_dudf != inteHead[VI::intehead::NO_FIELD_UDQS]) { - std::stringstream str; - str << "Inconsistent number of dudf's: " << cnt_dudf << " number of dudf's from intehead " << inteHead[VI::intehead::NO_FIELD_UDQS]; - OpmLog::error(str.str()); - } - - -} - diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/AggregateWellData.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/AggregateWellData.cpp deleted file mode 100644 index fb7d87357c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/AggregateWellData.cpp +++ /dev/null @@ -1,857 +0,0 @@ -/* - Copyright 2019-2020 Equinor ASA - Copyright 2018 Statoil ASA - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include - -#include -#include - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -namespace VI = Opm::RestartIO::Helpers::VectorItems; - -// ##################################################################### -// Class Opm::RestartIO::Helpers::AggregateWellData -// --------------------------------------------------------------------- - -namespace { - std::size_t numWells(const std::vector& inteHead) - { - return inteHead[VI::intehead::NWELLS]; - } - - int maxNumGroups(const std::vector& inteHead) - { - return inteHead[VI::intehead::NWGMAX]; - } - - std::string trim(const std::string& s) - { - const auto b = s.find_first_not_of(" \t"); - if (b == std::string::npos) { - // All blanks. Return empty. - return ""; - } - - const auto e = s.find_last_not_of(" \t"); - assert ((e != std::string::npos) && "Logic Error"); - - // Remove leading/trailing blanks. - return s.substr(b, e - b + 1); - } - - template - void wellLoop(const std::vector& wells, - WellOp&& wellOp) - { - auto wellID = 0*wells.size(); - for (const auto& well : wells) { - wellOp(well, wellID++); - } - } - - namespace IWell { - std::size_t entriesPerWell(const std::vector& inteHead) - { - return inteHead[VI::intehead::NIWELZ]; - } - - Opm::RestartIO::Helpers::WindowedArray - allocate(const std::vector& inteHead) - { - using WV = Opm::RestartIO::Helpers::WindowedArray; - - return WV { - WV::NumWindows{ numWells(inteHead) }, - WV::WindowSize{ entriesPerWell(inteHead) } - }; - } - - std::map currentGroupMapNameIndex(const Opm::Schedule& sched, const size_t simStep, const std::vector& inteHead) - { - // make group name to index map for the current time step - std::map groupIndexMap; - for (const auto& group_name : sched.groupNames(simStep)) { - const auto& group = sched.getGroup(group_name, simStep); - int ind = (group.name() == "FIELD") - ? inteHead[VI::intehead::NGMAXZ]-1 : group.insert_index()-1; - std::pair groupPair = std::make_pair(group.name(), ind); - groupIndexMap.insert(groupPair); - } - return groupIndexMap; - } - - int groupIndex(const std::string& grpName, - const std::map & currentGroupMapNameIndex) - { - int ind = 0; - auto searchGTName = currentGroupMapNameIndex.find(grpName); - if (searchGTName != currentGroupMapNameIndex.end()) { - ind = searchGTName->second + 1; - } - else { - std::cout << "group Name: " << grpName << std::endl; - throw std::invalid_argument( "Invalid group name" ); - } - return ind; - } - - - int wellVFPTab(const Opm::Well& well, const Opm::SummaryState& st) - { - if (well.isInjector()) { - return well.injectionControls(st).vfp_table_number; - } - return well.productionControls(st).vfp_table_number; - } - - bool wellControlDefined(const Opm::data::Well& xw) - { - using PMode = ::Opm::Well::ProducerCMode; - using IMode = ::Opm::Well::InjectorCMode; - - const auto& curr = xw.current_control; - - return (curr.isProducer && (curr.prod != PMode::CMODE_UNDEFINED)) - || (!curr.isProducer && (curr.inj != IMode::CMODE_UNDEFINED)); - } - - int ctrlMode(const Opm::Well& well, const Opm::data::Well& xw) - { - const auto& curr = xw.current_control; - - if (curr.isProducer) { - return ::Opm::eclipseControlMode(curr.prod, well.getStatus()); - } - else { // injector - return ::Opm::eclipseControlMode(curr.inj, well.injectorType(), - well.getStatus()); - } - } - - int compOrder(const Opm::Well& well) - { - using WCO = ::Opm::Connection::Order; - using COVal = ::Opm::RestartIO::Helpers:: - VectorItems::IWell::Value::CompOrder; - - switch (well.getConnections().ordering()) { - case WCO::TRACK: return COVal::Track; - case WCO::DEPTH: return COVal::Depth; - case WCO::INPUT: return COVal::Input; - } - - return 0; - } - - template - void setCurrentControl(const Opm::Well& well, - const int curr, - IWellArray& iWell) - { - using Ix = VI::IWell::index; - - iWell[Ix::ActWCtrl] = curr; - - if (well.predictionMode()) { - // Well in prediction mode (WCONPROD, WCONINJE). Assign - // requested control mode for prediction. - iWell[Ix::PredReqWCtrl] = curr; - iWell[Ix::HistReqWCtrl] = 0; - } - else { - // Well controlled by observed rates/BHP (WCONHIST, - // WCONINJH). Assign requested control mode for history. - iWell[Ix::PredReqWCtrl] = 0; // Possibly =1 instead. - iWell[Ix::HistReqWCtrl] = curr; - } - } - - template - void staticContrib(const Opm::Well& well, - const Opm::SummaryState& st, - const std::size_t msWellID, - const std::map & GroupMapNameInd, - IWellArray& iWell) - { - using Ix = VI::IWell::index; - - iWell[Ix::IHead] = well.getHeadI() + 1; - iWell[Ix::JHead] = well.getHeadJ() + 1; - - // Connections - { - const auto& conn = well.getConnections(); - - iWell[Ix::NConn] = static_cast(conn.size()); - - if (well.isMultiSegment()) { - // Set top and bottom connections to zero for multi - // segment wells - iWell[Ix::FirstK] = 0; - iWell[Ix::LastK] = 0; - } - else { - iWell[Ix::FirstK] = (iWell[Ix::NConn] == 0) - ? 0 : conn.get(0).getK() + 1; - - iWell[Ix::LastK] = (iWell[Ix::NConn] == 0) - ? 0 : conn.get(conn.size() - 1).getK() + 1; - } - } - - iWell[Ix::Group] = - groupIndex(trim(well.groupName()), GroupMapNameInd); - - iWell[Ix::WType] = well.wellType().ecl_wtype(); - iWell[Ix::VFPTab] = wellVFPTab(well, st); - iWell[Ix::XFlow] = well.getAllowCrossFlow() ? 1 : 0; - - // The following items aren't fully characterised yet, but - // needed for restart of M2. Will need further refinement. - iWell[Ix::item18] = -100; - iWell[Ix::item25] = - 1; - iWell[Ix::item32] = 7; - iWell[Ix::item48] = - 1; - - // Deliberate misrepresentation. Function 'eclipseControlMode' - // returns the target control mode requested in the simulation - // deck. This item is supposed to be the well's actual, active - // target control mode in the simulator. - // - // Observe that the setupCurrentContro() function is called again - // for open wells in the dynamicContrib() function. - setCurrentControl(well, eclipseControlMode(well, st), iWell); - - // Multi-segmented well information - iWell[Ix::MsWID] = 0; // MS Well ID (0 or 1..#MS wells) - iWell[Ix::NWseg] = 0; // Number of well segments - if (well.isMultiSegment()) { - iWell[Ix::MsWID] = static_cast(msWellID); - iWell[Ix::NWseg] = well.getSegments().size(); - } - - iWell[Ix::CompOrd] = compOrder(well); - } - - template - void dynamicContribShut(IWellArray& iWell) - { - using Ix = VI::IWell::index; - - iWell[Ix::item9 ] = -1000; - iWell[Ix::item11] = -1000; - } - - template - void dynamicContribOpen(const Opm::Well& well, - const Opm::data::Well& xw, - IWellArray& iWell) - { - using Ix = VI::IWell::index; - - if (wellControlDefined(xw)) { - setCurrentControl(well, ctrlMode(well, xw), iWell); - } - - const auto any_flowing_conn = - std::any_of(std::begin(xw.connections), - std::end (xw.connections), - [](const Opm::data::Connection& c) - { - return c.rates.flowing(); - }); - - iWell[Ix::item9] = any_flowing_conn - ? iWell[Ix::ActWCtrl] : -1; - - iWell[Ix::item11] = 1; - } - } // IWell - - namespace SWell { - std::size_t entriesPerWell(const std::vector& inteHead) - { - assert ((inteHead[VI::intehead::NSWELZ] > 121) && - "SWEL must allocate at least 122 elements per well"); - - return inteHead[VI::intehead::NSWELZ]; - } - - float datumDepth(const Opm::Well& well) - { - if (well.isMultiSegment()) { - // Datum depth for multi-segment wells is - // depth of top-most segment. - return well.getSegments().depthTopSegment(); - } - - // Not a multi-segment well--i.e., this is a regular - // well. Use well's reference depth. - return well.getRefDepth(); - } - - Opm::RestartIO::Helpers::WindowedArray - allocate(const std::vector& inteHead) - { - using WV = Opm::RestartIO::Helpers::WindowedArray; - - return WV { - WV::NumWindows{ numWells(inteHead) }, - WV::WindowSize{ entriesPerWell(inteHead) } - }; - } - - std::vector defaultSWell() - { - const auto dflt = -1.0e+20f; - const auto infty = 1.0e+20f; - const auto zero = 0.0f; - const auto one = 1.0f; - const auto half = 0.5f; - - // Initial data by Statoil ASA. - return { // 122 Items (0..121) - // 0 1 2 3 4 5 - infty, infty, infty, infty, infty, infty, // 0.. 5 ( 0) - one , zero , zero , zero , zero , 1.0e-05f, // 6.. 11 ( 1) - zero , zero , infty, infty, zero , dflt , // 12.. 17 ( 2) - infty, infty, infty, infty, infty, zero , // 18.. 23 ( 3) - one , zero , zero , zero , zero , zero , // 24.. 29 ( 4) - zero , one , zero , infty, zero , zero , // 30.. 35 ( 5) - zero , zero , zero , zero , zero , zero , // 36.. 41 ( 6) - zero , zero , zero , zero , zero , zero , // 42.. 47 ( 7) - zero , zero , zero , zero , zero , zero , // 48.. 53 ( 8) - infty, zero , zero , zero , zero , zero , // 54.. 59 ( 9) - zero , zero , zero , zero , zero , zero , // 60.. 65 (10) - zero , zero , zero , zero , zero , zero , // 66.. 71 (11) - zero , zero , zero , zero , zero , zero , // 72.. 77 (12) - zero , infty, infty, zero , zero , one , // 78.. 83 (13) - one , one , zero , infty, zero , infty, // 84.. 89 (14) - one , dflt , one , zero , zero , zero , // 90.. 95 (15) - zero , zero , zero , zero , zero , zero , // 96..101 (16) - zero , zero , zero , zero , zero , zero , // 102..107 (17) - zero , zero , half , one , zero , zero , // 108..113 (18) - zero , zero , zero , zero , zero , infty, // 114..119 (19) - zero , one , // 120..121 (20) - }; - } - - template - void assignDefaultSWell(SWellArray& sWell) - { - const auto& init = defaultSWell(); - - const auto sz = static_cast< - decltype(init.size())>(sWell.size()); - - auto b = std::begin(init); - auto e = b + std::min(init.size(), sz); - - std::copy(b, e, std::begin(sWell)); - } - - template - void staticContrib(const Opm::Well& well, - const Opm::UnitSystem& units, - const ::Opm::SummaryState& smry, - SWellArray& sWell) - { - using Ix = ::Opm::RestartIO::Helpers::VectorItems::SWell::index; - using M = ::Opm::UnitSystem::measure; - - auto swprop = [&units](const M u, const double x) -> float - { - return static_cast(units.from_si(u, x)); - }; - - assignDefaultSWell(sWell); - - if (well.isProducer()) { - const auto& pc = well.productionControls(smry); - const auto& predMode = well.predictionMode(); - - if (pc.oil_rate != 0.0) { - sWell[Ix::OilRateTarget] = - swprop(M::liquid_surface_rate, pc.oil_rate); - } - - if (pc.water_rate != 0.0) { - sWell[Ix::WatRateTarget] = - swprop(M::liquid_surface_rate, pc.water_rate); - } - - if (pc.gas_rate != 0.0) { - sWell[Ix::GasRateTarget] = - swprop(M::gas_surface_rate, pc.gas_rate); - sWell[Ix::HistGasRateTarget] = sWell[Ix::GasRateTarget]; - } - - if (pc.liquid_rate != 0.0) { // check if this works - may need to be rewritten - sWell[Ix::LiqRateTarget] = - swprop(M::liquid_surface_rate, pc.liquid_rate); - sWell[Ix::HistLiqRateTarget] = sWell[Ix::LiqRateTarget]; - } - else if (!predMode) { - sWell[Ix::LiqRateTarget] = - swprop(M::liquid_surface_rate, pc.oil_rate + pc.water_rate); - } - - if (pc.resv_rate != 0.0) { - sWell[Ix::ResVRateTarget] = - swprop(M::rate, pc.resv_rate); - } - else if ((smry.has("WVPR:" + well.name())) && (!predMode)) { - // Write out summary voidage production rate if - // target/limit is not set - auto vr = static_cast(smry.get("WVPR:" + well.name())); - if (vr != 0.0) { - sWell[Ix::ResVRateTarget] = vr; - } - } - - sWell[Ix::THPTarget] = pc.thp_limit != 0.0 - ? swprop(M::pressure, pc.thp_limit) - : 0.0; - - sWell[Ix::BHPTarget] = pc.bhp_limit != 0.0 - ? swprop(M::pressure, pc.bhp_limit) - : swprop(M::pressure, 1.0*::Opm::unit::atm); - sWell[Ix::HistBHPTarget] = sWell[Ix::BHPTarget]; - } - else if (well.isInjector()) { - const auto& ic = well.injectionControls(smry); - - using IP = ::Opm::Well::InjectorCMode; - using IT = ::Opm::InjectorType; - - if (ic.hasControl(IP::RATE)) { - if (ic.injector_type == IT::OIL) { - sWell[Ix::OilRateTarget] = - swprop(M::liquid_surface_rate, ic.surface_rate); - } - if (ic.injector_type == IT::WATER) { - sWell[Ix::WatRateTarget] = - swprop(M::liquid_surface_rate, ic.surface_rate); - sWell[Ix::HistLiqRateTarget] = sWell[Ix::WatRateTarget]; - } - if (ic.injector_type == IT::GAS) { - sWell[Ix::GasRateTarget] = - swprop(M::gas_surface_rate, ic.surface_rate); - sWell[Ix::HistGasRateTarget] = sWell[Ix::GasRateTarget]; - } - } - - if (ic.hasControl(IP::RESV)) { - sWell[Ix::ResVRateTarget] = - swprop(M::rate, ic.reservoir_rate); - } - - if (ic.hasControl(IP::THP)) { - sWell[Ix::THPTarget] = swprop(M::pressure, ic.thp_limit); - } - - sWell[Ix::BHPTarget] = ic.hasControl(IP::BHP) - ? swprop(M::pressure, ic.bhp_limit) - : swprop(M::pressure, 1.0E05*::Opm::unit::psia); - sWell[Ix::HistBHPTarget] = sWell[Ix::BHPTarget]; - } - - sWell[Ix::DatumDepth] = swprop(M::length, datumDepth(well)); - sWell[Ix::DrainageRadius] = swprop(M::length, well.getDrainageRadius()); - sWell[Ix::EfficiencyFactor1] = well.getEfficiencyFactor(); - /* - Restart files from Eclipse indicate that the efficiency factor is - found in two items in the restart file; since only one of the - items is needed in the OPM restart, and we are not really certain - that the two values are equal by construction we have only - assigned one of the items explicitly here. - */ - } - } // SWell - - namespace XWell { - std::size_t entriesPerWell(const std::vector& inteHead) - { - assert ((inteHead[VI::intehead::NXWELZ] > 123) && - "XWEL must allocate at least 124 elements per well"); - - return inteHead[VI::intehead::NXWELZ]; - } - - Opm::RestartIO::Helpers::WindowedArray - allocate(const std::vector& inteHead) - { - using WV = Opm::RestartIO::Helpers::WindowedArray; - - return WV { - WV::NumWindows{ numWells(inteHead) }, - WV::WindowSize{ entriesPerWell(inteHead) } - }; - } - - template - void staticContrib(const ::Opm::Well& well, - const Opm::SummaryState& st, - const Opm::UnitSystem& units, - XWellArray& xWell) - { - using M = ::Opm::UnitSystem::measure; - using Ix = ::Opm::RestartIO::Helpers::VectorItems::XWell::index; - - const auto bhpTarget = well.isInjector() - ? well.injectionControls(st).bhp_limit - : well.productionControls(st).bhp_limit; - - xWell[Ix::BHPTarget] = units.from_si(M::pressure, bhpTarget); - } - - template - void assignProducer(const std::string& well, - const ::Opm::SummaryState& smry, - XWellArray& xWell) - { - using Ix = ::Opm::RestartIO::Helpers::VectorItems::XWell::index; - - auto get = [&smry, &well](const std::string& vector) - { - const auto key = vector + ':' + well; - - return smry.has(key) ? smry.get(key) : 0.0; - }; - - xWell[Ix::OilPrRate] = get("WOPR"); - xWell[Ix::WatPrRate] = get("WWPR"); - xWell[Ix::GasPrRate] = get("WGPR"); - - xWell[Ix::LiqPrRate] = xWell[Ix::OilPrRate] - + xWell[Ix::WatPrRate]; - - xWell[Ix::VoidPrRate] = get("WVPR"); - - xWell[Ix::FlowBHP] = get("WBHP"); - xWell[Ix::WatCut] = get("WWCT"); - xWell[Ix::GORatio] = get("WGOR"); - - xWell[Ix::OilPrTotal] = get("WOPT"); - xWell[Ix::WatPrTotal] = get("WWPT"); - xWell[Ix::GasPrTotal] = get("WGPT"); - xWell[Ix::VoidPrTotal] = get("WVPT"); - - // Not fully characterised. - xWell[Ix::item37] = xWell[Ix::WatPrRate]; - xWell[Ix::item38] = xWell[Ix::GasPrRate]; - - xWell[Ix::HistOilPrTotal] = get("WOPTH"); - xWell[Ix::HistWatPrTotal] = get("WWPTH"); - xWell[Ix::HistGasPrTotal] = get("WGPTH"); - } - - template - void assignCommonInjector(GetSummaryVector& get, - XWellArray& xWell) - { - using Ix = ::Opm::RestartIO::Helpers::VectorItems::XWell::index; - - xWell[Ix::FlowBHP] = get("WBHP"); - - // Note: Assign both water and gas cumulatives to support - // case of well alternating between injecting water and gas. - xWell[Ix::WatInjTotal] = get("WWIT"); - xWell[Ix::GasInjTotal] = get("WGIT"); - xWell[Ix::VoidInjTotal] = get("WVIT"); - xWell[Ix::HistWatInjTotal] = get("WWITH"); - xWell[Ix::HistGasInjTotal] = get("WGITH"); - } - - template - void assignWaterInjector(const std::string& well, - const ::Opm::SummaryState& smry, - XWellArray& xWell) - { - using Ix = ::Opm::RestartIO::Helpers::VectorItems::XWell::index; - - auto get = [&smry, &well](const std::string& vector) - { - const auto key = vector + ':' + well; - - return smry.has(key) ? smry.get(key) : 0.0; - }; - - assignCommonInjector(get, xWell); - - // Injection rates reported as negative. - xWell[Ix::WatPrRate] = -get("WWIR"); - xWell[Ix::LiqPrRate] = xWell[Ix::WatPrRate]; - - // Not fully characterised. - xWell[Ix::item37] = xWell[Ix::WatPrRate]; - - xWell[Ix::WatVoidPrRate] = -get("WWVIR"); - } - - template - void assignGasInjector(const std::string& well, - const ::Opm::SummaryState& smry, - XWellArray& xWell) - { - using Ix = ::Opm::RestartIO::Helpers::VectorItems::XWell::index; - - auto get = [&smry, &well](const std::string& vector) - { - const auto key = vector + ':' + well; - - return smry.has(key) ? smry.get(key) : 0.0; - }; - - assignCommonInjector(get, xWell); - - // Injection rates reported as negative production rates. - xWell[Ix::GasPrRate] = -get("WGIR"); - xWell[Ix::VoidPrRate] = -get("WGVIR"); - - xWell[Ix::GasFVF] = (std::abs(xWell[Ix::GasPrRate]) > 0.0) - ? xWell[Ix::VoidPrRate] / xWell[Ix::GasPrRate] - : 0.0; - - if (std::isnan(xWell[Ix::GasFVF])) { - xWell[Ix::GasFVF] = 0.0; - } - - // Not fully characterised. - xWell[Ix::item38] = xWell[Ix::GasPrRate]; - - xWell[Ix::GasVoidPrRate] = xWell[Ix::VoidPrRate]; - } - - template - void dynamicContrib(const ::Opm::Well& well, - const ::Opm::SummaryState& smry, - XWellArray& xWell) - { - if (well.isProducer()) { - assignProducer(well.name(), smry, xWell); - } - else if (well.isInjector()) { - using IType = ::Opm::InjectorType; - const auto itype = well.injectionControls(smry).injector_type; - - switch (itype) { - case IType::OIL: - // Do nothing. - break; - - case IType::WATER: - assignWaterInjector(well.name(), smry, xWell); - break; - - case IType::GAS: - assignGasInjector(well.name(), smry, xWell); - break; - - case IType::MULTI: - assignWaterInjector(well.name(), smry, xWell); - assignGasInjector (well.name(), smry, xWell); - break; - } - } - } - } // XWell - - namespace ZWell { - std::size_t entriesPerWell(const std::vector& inteHead) - { - assert ((inteHead[VI::intehead::NZWELZ] > 1) && - "ZWEL must allocate at least 1 element per well"); - - return inteHead[VI::intehead::NZWELZ]; - } - - Opm::RestartIO::Helpers::WindowedArray< - Opm::EclIO::PaddedOutputString<8> - > - allocate(const std::vector& inteHead) - { - using WV = Opm::RestartIO::Helpers::WindowedArray< - Opm::EclIO::PaddedOutputString<8> - >; - - return WV { - WV::NumWindows{ numWells(inteHead) }, - WV::WindowSize{ entriesPerWell(inteHead) } - }; - } - - Opm::RestartIO::Helpers::ActionResStatus - act_res_stat(const Opm::Schedule& sched, const Opm::SummaryState& smry, const std::size_t sim_step) { - std::vector act_res; - std::vector act_name; - const auto& acts = sched.actions(sim_step); - Opm::Action::Context context(smry); - auto sim_time = sched.simTime(sim_step); - for (const auto& action : acts.pending(sim_time)) { - act_res.push_back(action->eval(sim_time, context)); - act_name.push_back(action->name()); - } - return {act_res, act_name}; - } - - template - void staticContrib(const Opm::Well& well, const Opm::RestartIO::Helpers::ActionResStatus& actResStat, ZWellArray& zWell) - { - using Ix = ::Opm::RestartIO::Helpers::VectorItems::ZWell::index; - zWell[Ix::WellName] = well.name(); - //loop over actions to assign action name for relevant wells - for (std::size_t ind = 0; ind < actResStat.result.size(); ind++) { - if (actResStat.result[ind].has_well(well.name())) { - zWell[Ix::ActionX] = actResStat.name[ind]; - } - } - } - } // ZWell -} // Anonymous - -// ===================================================================== - -Opm::RestartIO::Helpers::AggregateWellData:: -AggregateWellData(const std::vector& inteHead) - : iWell_ (IWell::allocate(inteHead)) - , sWell_ (SWell::allocate(inteHead)) - , xWell_ (XWell::allocate(inteHead)) - , zWell_ (ZWell::allocate(inteHead)) - , nWGMax_(maxNumGroups(inteHead)) -{} - -// --------------------------------------------------------------------- - -void -Opm::RestartIO::Helpers::AggregateWellData:: -captureDeclaredWellData(const Schedule& sched, - const UnitSystem& units, - const std::size_t sim_step, - const ::Opm::SummaryState& smry, - const std::vector& inteHead) -{ - const auto& wells = sched.getWells(sim_step); - - // Static contributions to IWEL array. - { - //const auto grpNames = groupNames(sched.getGroups()); - const auto groupMapNameIndex = IWell::currentGroupMapNameIndex(sched, sim_step, inteHead); - auto msWellID = std::size_t{0}; - - wellLoop(wells, [&groupMapNameIndex, &msWellID, &smry, this] - (const Well& well, const std::size_t wellID) -> void - { - msWellID += well.isMultiSegment(); // 1-based index. - auto iw = this->iWell_[wellID]; - - IWell::staticContrib(well, smry, msWellID, groupMapNameIndex, iw); - }); - } - - // Static contributions to SWEL array. - wellLoop(wells, [&units, &smry, this] - (const Well& well, const std::size_t wellID) -> void - { - auto sw = this->sWell_[wellID]; - - SWell::staticContrib(well, units, smry, sw); - }); - - // Static contributions to XWEL array. - wellLoop(wells, [&units, &smry, this] - (const Well& well, const std::size_t wellID) -> void - { - auto xw = this->xWell_[wellID]; - - XWell::staticContrib(well, smry, units, xw); - }); - - { - const auto actResStat = ZWell::act_res_stat(sched, smry, sim_step); - // Static contributions to ZWEL array. - wellLoop(wells, - [&actResStat, this](const Well& well, const std::size_t wellID) -> void - { - auto zw = this->zWell_[wellID]; - ZWell::staticContrib(well, actResStat, zw); - }); - } -} - -// --------------------------------------------------------------------- - -void -Opm::RestartIO::Helpers::AggregateWellData:: -captureDynamicWellData(const Schedule& sched, - const std::size_t sim_step, - const Opm::data::WellRates& xw, - const ::Opm::SummaryState& smry) -{ - const auto& wells = sched.getWells(sim_step); - - // Dynamic contributions to IWEL array. - wellLoop(wells, [this, &xw] - (const Well& well, const std::size_t wellID) -> void - { - auto iWell = this->iWell_[wellID]; - - auto i = xw.find(well.name()); - if ((i == std::end(xw)) || !i->second.flowing()) { - IWell::dynamicContribShut(iWell); - } - else { - IWell::dynamicContribOpen(well, i->second, iWell); - } - }); - - // Dynamic contributions to XWEL array. - wellLoop(wells, [this, &smry] - (const Well& well, const std::size_t wellID) -> void - { - auto xwell = this->xWell_[wellID]; - - XWell::dynamicContrib(well, smry, xwell); - }); -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/CreateActionxDims.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/CreateActionxDims.cpp deleted file mode 100644 index 7a61ad8d2e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/CreateActionxDims.cpp +++ /dev/null @@ -1,139 +0,0 @@ -/* - Copyright (c) 2018 Equinor ASA - Copyright (c) 2018 Statoil ASA - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include -#include - -#include -#include - -#include -#include -#include - -#include -#include - -#include -#include - -#include -#include -#include - -namespace { - -// The number of actions (no of Actionx) -std::size_t noOfActions(const Opm::Action::Actions& acts) -{ - std::size_t no_entries = acts.size(); - return no_entries; -} - - -std::size_t entriesPerIACT() -{ - std::size_t no_entries = 9; - return no_entries; -} - -std::size_t entriesPerSACT() -{ - std::size_t no_entries = 5; - return no_entries; -} - -std::size_t entriesPerZACT() -{ - std::size_t no_entries = 4; - return no_entries; -} - -// (The max number of characters in an action statement / (8 - chars pr string)) * (max over actions of number of lines pr ACTIONX) -std::size_t entriesPerZLACT(const Opm::Runspec& rspec, const Opm::Action::Actions& acts) -{ - int max_char_pr_line = rspec.actdims().max_characters(); - std::size_t no_entries_pr_line = ((max_char_pr_line % 8) == 0) ? max_char_pr_line / 8 : (max_char_pr_line / 8) + 1; - std::size_t no_entries = no_entries_pr_line * acts.max_input_lines(); - - return no_entries; -} - -// The max number of characters in an action statement * (max over actions of number of lines pr ACTIONX) / (8 - chars pr string) -std::size_t entriesPerLine(const Opm::Runspec& rspec) -{ - int max_char_pr_line = rspec.actdims().max_characters(); - std::size_t no_entries_pr_line = ((max_char_pr_line % 8) == 0) ? max_char_pr_line / 8 : (max_char_pr_line / 8) + 1; - - return no_entries_pr_line; -} - - -std::size_t entriesPerZACN(const Opm::Runspec& rspec) -{ - //(Max number of conditions pr ACTIONX) * ((max no characters pr line = 104) / (8 - characters pr string)(104/8 = 13) - std::size_t no_entries = rspec.actdims().max_conditions() * 13; - return no_entries; -} - -std::size_t entriesPerIACN(const Opm::Runspec& rspec) -{ - //26*Max number of conditions pr ACTIONX - std::size_t no_entries = 26 * rspec.actdims().max_conditions(); - return no_entries; -} - -std::size_t entriesPerSACN(const Opm::Runspec& rspec) -{ - //16 - std::size_t no_entries = 16 * rspec.actdims().max_conditions(); - return no_entries; -} - - - -} // Anonymous - -// ##################################################################### -// Public Interface (createUdqDims()) Below Separator -// --------------------------------------------------------------------- - -std::vector -Opm::RestartIO::Helpers:: -createActionxDims( const Runspec& rspec, - const Schedule& sched, - const std::size_t simStep) -{ - const auto& acts = sched.actions(simStep); - std::vector actDims(9); - - //No of Actionx keywords - actDims[0] = noOfActions(acts); - actDims[1] = entriesPerIACT(); - actDims[2] = entriesPerSACT(); - actDims[3] = entriesPerZACT(); - actDims[4] = entriesPerZLACT(rspec, acts); - actDims[5] = entriesPerZACN(rspec); - actDims[6] = entriesPerIACN(rspec); - actDims[7] = entriesPerSACN(rspec); - actDims[8] = entriesPerLine(rspec); - - return actDims; -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/CreateDoubHead.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/CreateDoubHead.cpp deleted file mode 100644 index a81957ee55..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/CreateDoubHead.cpp +++ /dev/null @@ -1,143 +0,0 @@ -/* - Copyright (c) 2018 Equinor ASA - Copyright (c) 2018 Statoil ASA - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include - -#include - -#include -#include -#include - -#include -#include - -#include -#include -#include - -namespace { - Opm::RestartIO::DoubHEAD::TimeStamp - computeTimeStamp(const ::Opm::Schedule& sched, - const double elapsed) - { - return { - std::chrono::system_clock::from_time_t(sched.getStartTime()), - std::chrono::duration< - double, std::chrono::seconds::period>{ elapsed }, - }; - } - - double getTimeConv(const ::Opm::UnitSystem& us) - { - switch (us.getType()) { - case ::Opm::UnitSystem::UnitType::UNIT_TYPE_METRIC: - return static_cast(Opm::Metric::Time); - - case ::Opm::UnitSystem::UnitType::UNIT_TYPE_FIELD: - return static_cast(Opm::Field::Time); - - case ::Opm::UnitSystem::UnitType::UNIT_TYPE_LAB: - return static_cast(Opm::Lab::Time); - - case ::Opm::UnitSystem::UnitType::UNIT_TYPE_PVT_M: - return static_cast(Opm::PVT_M::Time); - - case ::Opm::UnitSystem::UnitType::UNIT_TYPE_INPUT: - throw std::invalid_argument { - "Cannot Run Simulation With Non-Standard Units" - }; - } - - return static_cast(Opm::Metric::Time); - } - - - Opm::RestartIO::DoubHEAD::guideRate - computeGuideRate(const ::Opm::Schedule& sched, - const std::size_t lookup_step) - { - double a = 0.; - double b = 0.; - double c = 0.; - double d = 0.; - double e = 0.; - double f = 0.; - double delay = 0.; - double damping_fact = 0.; - - const auto& guideCFG = sched.guideRateConfig(lookup_step); - if (guideCFG.has_model()) { - const auto& guideRateModel = guideCFG.model(); - - a = guideRateModel.getA(); - b = guideRateModel.getB(); - c = guideRateModel.getC(); - d = guideRateModel.getD(); - e = guideRateModel.getE(); - f = guideRateModel.getF(); - delay = guideRateModel.update_delay(); - damping_fact = guideRateModel.damping_factor(); - } - return { - a, - b, - c, - d, - e, - f, - delay, - damping_fact - }; - } -} // Anonymous - -// ##################################################################### -// Public Interface (createDoubHead()) Below Separator -// --------------------------------------------------------------------- - -std::vector -Opm::RestartIO::Helpers:: -createDoubHead(const EclipseState& es, - const Schedule& sched, - const std::size_t lookup_step, - const double simTime, - const double nextTimeStep) -{ - const auto& usys = es.getDeckUnitSystem(); - const auto& rspec = es.runspec(); - const auto tconv = getTimeConv(usys); - - auto dh = DoubHEAD{} - .tuningParameters(sched.getTuning(lookup_step), tconv) - .timeStamp (computeTimeStamp(sched, simTime)) - .drsdt (sched, lookup_step, tconv) - .udq_param(rspec.udqParams()) - .guide_rate_param(computeGuideRate(sched, lookup_step)) - ; - - if (nextTimeStep > 0.0) { - using M = ::Opm::UnitSystem::measure; - - dh.nextStep(usys.from_si(M::time, nextTimeStep)); - } - - return dh.data(); -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/CreateInteHead.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/CreateInteHead.cpp deleted file mode 100644 index 77fbe55221..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/CreateInteHead.cpp +++ /dev/null @@ -1,471 +0,0 @@ -/* - Copyright (c) 2018 Statoil ASA - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include - -namespace { - - using nph_enum = Opm::GuideRateModel::Target; - const std::map nph_enumToECL = { - {nph_enum::NONE, 0}, - {nph_enum::OIL, 1}, - {nph_enum::GAS, 3}, - {nph_enum::LIQ, 4}, - {nph_enum::RES, 6}, - {nph_enum::COMB, 9}, - }; - - using prod_cmode = Opm::Well::ProducerCMode; - const std::map prod_cmodeToECL = { - {prod_cmode::NONE, 0}, - {prod_cmode::ORAT, 1}, - {prod_cmode::WRAT, 2}, - {prod_cmode::GRAT, 3}, - {prod_cmode::LRAT, 4}, - {prod_cmode::RESV, 5}, - {prod_cmode::BHP, 7}, - }; - - int maxConnPerWell(const Opm::Schedule& sched, - const std::size_t report_step, - const std::size_t lookup_step) - { - if (report_step == std::size_t{0}) { - return 0; - } - - auto ncwmax = 0; - for (const auto& well : sched.getWells(lookup_step)) { - const auto ncw = well.getConnections().size(); - - ncwmax = std::max(ncwmax, static_cast(ncw)); - } - - return ncwmax; - } - - int numGroupsInField(const Opm::Schedule& sched, - const std::size_t lookup_step) - { - const auto ngmax = sched.numGroups(lookup_step); - - if (ngmax < 1) { - throw std::invalid_argument { - "Simulation run must include at least FIELD group" - }; - } - - // Number of non-FIELD groups. - return ngmax - 1; - } - - int GroupControl(const Opm::Schedule& sched, - const std::size_t report_step, - const std::size_t lookup_step) - { - int gctrl = 0; - if (report_step == std::size_t{0}) { - return gctrl; - } - - for (const auto& group_name : sched.groupNames(lookup_step)) { - const auto& group = sched.getGroup(group_name, lookup_step); - if (group.isProductionGroup()) { - gctrl = 1; - } - if (group.isInjectionGroup()) { - gctrl = 2; - } - } - - // Index for group control - return gctrl; - } - - int noWellUdqs(const Opm::Schedule& sched, - const std::size_t rptStep, - const std::size_t simStep) - { - if (rptStep == std::size_t{0}) { - return 0; - } - - const auto& udqCfg = sched.getUDQConfig(simStep); - std::size_t i_wudq = 0; - for (const auto& udq_input : udqCfg.input()) { - if (udq_input.var_type() == Opm::UDQVarType::WELL_VAR) { - i_wudq++; - } - } - - return i_wudq; - } - - int noGroupUdqs(const Opm::Schedule& sched, - const std::size_t rptStep, - const std::size_t simStep) - { - if (rptStep == std::size_t{0}) { - return 0; - } - - const auto& udqCfg = sched.getUDQConfig(simStep); - const auto& input = udqCfg.input(); - - return std::count_if(input.begin(), input.end(), [](const Opm::UDQInput inp) { return (inp.var_type() == Opm::UDQVarType::GROUP_VAR); }); - } - - int noFieldUdqs(const Opm::Schedule& sched, - const std::size_t rptStep, - const std::size_t simStep) - { - if (rptStep == std::size_t{0}) { - return 0; - } - - const auto& udqCfg = sched.getUDQConfig(simStep); - std::size_t i_fudq = 0; - for (const auto& udq_input : udqCfg.input()) { - if (udq_input.var_type() == Opm::UDQVarType::FIELD_VAR) { - i_fudq++; - } - } - - return i_fudq; - } - - int numMultiSegWells(const ::Opm::Schedule& sched, - const std::size_t report_step, - const std::size_t lookup_step) - { - if (report_step == 0) { return 0; } - - const auto& wnames = sched.wellNames(lookup_step); - - return std::count_if(std::begin(wnames), std::end(wnames), - [&sched, lookup_step](const std::string& wname) -> bool - { - return sched.getWell(wname, lookup_step).isMultiSegment(); - }); - } - - Opm::RestartIO::InteHEAD::WellTableDim - getWellTableDims(const int nwgmax, - const int ngmax, - const ::Opm::Runspec& rspec, - const ::Opm::Schedule& sched, - const std::size_t report_step, - const std::size_t lookup_step) - { - const auto& wd = rspec.wellDimensions(); - - const auto numWells = static_cast(sched.numWells(lookup_step)); - - const auto maxPerf = - std::max(wd.maxConnPerWell(), - maxConnPerWell(sched, report_step, lookup_step)); - - const auto maxWellInGroup = - std::max(wd.maxWellsPerGroup(), nwgmax); - - const auto maxGroupInField = - std::max(wd.maxGroupsInField(), ngmax); - - const auto nWMaxz = wd.maxWellsInField(); - - return { - (report_step > 0) ? numWells : 0, - maxPerf, - maxWellInGroup, - maxGroupInField, - (report_step > 0) ? std::max(nWMaxz, numWells) : nWMaxz - }; - } - - std::array - getNGRPZ(const int grpsz, - const int ngrp, - const ::Opm::Runspec& rspec) - { - const auto& wd = rspec.wellDimensions(); - - const auto nwgmax = std::max(grpsz, wd.maxWellsPerGroup()); - const auto ngmax = std::max(ngrp , wd.maxGroupsInField()); - - const int nigrpz = 97 + std::max(nwgmax, ngmax); - const int nsgrpz = 112; - const int nxgrpz = 180; - const int nzgrpz = 5; - - return {{ - nigrpz, - nsgrpz, - nxgrpz, - nzgrpz, - }}; - } - - - Opm::RestartIO::InteHEAD::Phases - getActivePhases(const ::Opm::Runspec& rspec) - { - auto phases = ::Opm::RestartIO::InteHEAD::Phases{}; - - const auto& phasePred = rspec.phases(); - - phases.oil = phasePred.active(Opm::Phase::OIL); - phases.water = phasePred.active(Opm::Phase::WATER); - phases.gas = phasePred.active(Opm::Phase::GAS); - - return phases; - } - - Opm::RestartIO::InteHEAD::TuningPar - getTuningPars(const ::Opm::Tuning& tuning) - { - return { - tuning.NEWTMX, - tuning.NEWTMN, - tuning.LITMAX, - tuning.LITMIN, - tuning.MXWSIT, - tuning.MXWPIT, - }; - } - - Opm::RestartIO::InteHEAD::UdqParam - getUdqParam(const ::Opm::Runspec& rspec, - const Opm::Schedule& sched, - const std::size_t rptStep, - const std::size_t simStep) - { - if (rptStep == std::size_t{0}) { - return { 0, 0, 0, 0, 0, 0 }; - } - - const auto& udq_par = rspec.udqParams(); - const auto& udqActive = sched.udqActive(simStep); - const auto r_seed = udq_par.rand_seed(); - const auto no_wudq = noWellUdqs(sched, rptStep, simStep); - const auto no_gudq = noGroupUdqs(sched, rptStep, simStep); - const auto no_fudq = noFieldUdqs(sched, rptStep, simStep); - const auto no_iuads = udqActive.IUAD_size(); - const auto no_iuaps = udqActive.IUAP_size(); - - return { - r_seed, - static_cast(no_wudq), - static_cast(no_gudq), - static_cast(no_fudq), - static_cast(no_iuads), - static_cast(no_iuaps) - }; - } - - Opm::RestartIO::InteHEAD::ActionParam - getActionParam(const ::Opm::Runspec& rspec, - const ::Opm::Action::Actions& acts, - const std::size_t rptStep) - { - if (rptStep == std::size_t{0}) { - return { 0, 0, 0, 0 }; - } - - const auto& no_act = acts.size(); - const auto max_lines_pr_action = acts.max_input_lines(); - const auto max_cond_per_action = rspec.actdims().max_conditions(); - const auto max_characters_per_line = rspec.actdims().max_characters(); - - return { - static_cast(no_act), - max_lines_pr_action, - static_cast(max_cond_per_action), - static_cast(max_characters_per_line) - }; - } - - Opm::RestartIO::InteHEAD::WellSegDims - getWellSegDims(const ::Opm::Runspec& rspec, - const ::Opm::Schedule& sched, - const std::size_t report_step, - const std::size_t lookup_step) - { - const auto& wsd = rspec.wellSegmentDimensions(); - - return { - numMultiSegWells(sched, report_step, lookup_step), - wsd.maxSegmentedWells(), - wsd.maxSegmentsPerWell(), - wsd.maxLateralBranchesPerWell(), - 22, // Number of entries per segment in ISEG (2017.2) - 146, // Number of entries per segment in RSEG (2017.2) - 10 // Number of entries per segment in ILBR (2017.2) - }; - } - - Opm::RestartIO::InteHEAD::RegDims - getRegDims(const ::Opm::TableManager& tdims, - const ::Opm::Regdims& rdims) - { - const auto ntfip = tdims.numFIPRegions(); - const auto nmfipr = rdims.getNMFIPR(); - const auto nrfreg = rdims.getNRFREG(); - const auto ntfreg = rdims.getNTFREG(); - const auto nplmix = rdims.getNPLMIX(); - - return { - static_cast(ntfip), - static_cast(nmfipr), - static_cast(nrfreg), - static_cast(ntfreg), - static_cast(nplmix), - }; - } - - Opm::RestartIO::InteHEAD::GuideRateNominatedPhase - setGuideRateNominatedPhase(const ::Opm::Schedule& sched, - const std::size_t report_step, - const std::size_t lookup_step) - { - int nom_phase = 0; - if (report_step == std::size_t{0}) { - return { nom_phase }; - } - - const auto& guideCFG = sched.guideRateConfig(lookup_step); - if (guideCFG.has_model()) { - const auto& guideRateModel = guideCFG.model(); - - const auto& targPhase = guideRateModel.target(); - const auto& allow_incr = guideRateModel.allow_increase(); - - const auto it_nph = nph_enumToECL.find(targPhase); - if (it_nph != nph_enumToECL.end()) { - nom_phase = it_nph->second; - } - - //nominated phase has negative sign for allow increment set to 'NO' - if (!allow_incr) nom_phase *= -1; - } - - return {nom_phase}; - } - - int getWhistctlMode(const ::Opm::Schedule& sched, - const std::size_t report_step, - const std::size_t lookup_step) - { - int mode = 0; - if (report_step == std::size_t{0}) { - return mode; - } - - const auto& w_hist_ctl_mode = sched.getGlobalWhistctlMmode(lookup_step); - const auto it_ctl = prod_cmodeToECL.find(w_hist_ctl_mode); - if (it_ctl != prod_cmodeToECL.end()) { - mode = it_ctl->second; - } - - return mode; - } - -} // Anonymous - -// ##################################################################### -// Public Interface (createInteHead()) Below Separator -// --------------------------------------------------------------------- - -std::vector -Opm::RestartIO::Helpers:: -createInteHead(const EclipseState& es, - const EclipseGrid& grid, - const Schedule& sched, - const double simTime, - const int num_solver_steps, - const int report_step, - const int lookup_step) -{ - const auto nwgmax = (report_step == 0) - ? 0 : maxGroupSize(sched, lookup_step); - - const auto ngmax = (report_step == 0) - ? 0 : numGroupsInField(sched, lookup_step); - - const auto& acts = sched.actions(lookup_step); - const auto& rspec = es.runspec(); - const auto& tdim = es.getTableManager(); - const auto& rdim = tdim.getRegdims(); - - const auto ih = InteHEAD{} - .dimensions (grid.getNXYZ()) - .numActive (static_cast(grid.getNumActive())) - .unitConventions (es.getDeckUnitSystem()) - .wellTableDimensions(getWellTableDims(nwgmax, ngmax, rspec, sched, - report_step, lookup_step)) - .calendarDate (getSimulationTimePoint(sched.posixStartTime(), simTime)) - .activePhases (getActivePhases(rspec)) - // The numbers below have been determined experimentally to work - // across a range of reference cases, but are not guaranteed to be - // universally valid. - .params_NWELZ (155, 122, 130, 3) // n{isxz}welz: number of data elements per well in {ISXZ}WELL - .params_NCON (25, 41, 58) // n{isx}conz: number of data elements per completion in ICON - .params_GRPZ (getNGRPZ(nwgmax, ngmax, rspec)) - // ncamax: max number of analytical aquifer connections - // n{isx}aaqz: number of data elements per aquifer in {ISX}AAQ - // n{isa}caqz: number of data elements per aquifer connection in {ISA}CAQ - .params_NAAQZ (1, 18, 24, 10, 7, 2, 4) - .stepParam (num_solver_steps, report_step) - .tuningParam (getTuningPars(sched.getTuning(lookup_step))) - .wellSegDimensions (getWellSegDims(rspec, sched, report_step, lookup_step)) - .regionDimensions (getRegDims(tdim, rdim)) - .ngroups ({ ngmax }) - .params_NGCTRL (GroupControl(sched, report_step, lookup_step)) - .variousParam (201802, 100) // Output should be compatible with Eclipse 100, 2017.02 version. - .udqParam_1 (getUdqParam(rspec, sched, report_step, lookup_step)) - .actionParam (getActionParam(rspec, acts, report_step)) - .variousUDQ_ACTIONXParam() - .nominatedPhaseGuideRate(setGuideRateNominatedPhase(sched, report_step, lookup_step)) - .whistControlMode (getWhistctlMode(sched, report_step, lookup_step)) - ; - - return ih.data(); -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/CreateLogiHead.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/CreateLogiHead.cpp deleted file mode 100644 index b42b7e44f3..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/CreateLogiHead.cpp +++ /dev/null @@ -1,62 +0,0 @@ -/* - Copyright (c) 2018 Statoil ASA - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include - -#include - -#include -#include - -#include - -// ##################################################################### -// Public Interface (createLogiHead()) Below Separator -// --------------------------------------------------------------------- - -std::vector -Opm::RestartIO::Helpers:: -createLogiHead(const EclipseState& es) -{ - const auto& rspec = es.runspec(); - const auto& tabMgr = es.getTableManager(); - const auto& phases = rspec.phases(); - const auto& wsd = rspec.wellSegmentDimensions(); - const auto& hystPar = rspec.hysterPar(); - - auto pvt = ::Opm::RestartIO::LogiHEAD::PVTModel{}; - - pvt.isLiveOil = phases.active(::Opm::Phase::OIL) && - !tabMgr.getPvtoTables().empty(); - - pvt.isWetGas = phases.active(::Opm::Phase::GAS) && - !tabMgr.getPvtgTables().empty(); - - pvt.constComprOil = phases.active(::Opm::Phase::OIL) && - !(pvt.isLiveOil || - tabMgr.hasTables("PVDO") || - tabMgr.getPvcdoTable().empty()); - - const auto lh = LogiHEAD{} - .variousParam(false, false, wsd.maxSegmentedWells(), hystPar.active()) - .pvtModel(pvt) - ; - - return lh.data(); -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/CreateUdqDims.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/CreateUdqDims.cpp deleted file mode 100644 index 3017e4eaf4..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/CreateUdqDims.cpp +++ /dev/null @@ -1,110 +0,0 @@ -/* - Copyright (c) 2018 Equinor ASA - Copyright (c) 2018 Statoil ASA - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include -#include -#include - -#include -#include - -#include -#include - -#include - -#include -#include - -#include -#include - -#include -#include -#include - -namespace VI = ::Opm::RestartIO::Helpers::VectorItems; - -namespace { - - -std::size_t entriesPerIUDQ() -{ - std::size_t no_entries = 3; - return no_entries; -} - -std::size_t entriesPerIUAD() -{ - std::size_t no_entries = 5; - return no_entries; -} - -std::size_t entriesPerZUDN() -{ - std::size_t no_entries = 2; - return no_entries; -} - -std::size_t entriesPerZUDL() -{ - std::size_t no_entries = 16; - return no_entries; -} - -std::size_t noIGphs(const std::vector& inteHead) -{ - std::size_t no_entries = (inteHead[VI::intehead::NO_GROUP_UDQS] > 0) ? inteHead[20] : 0; - return no_entries; -} - - -} // Anonymous - -// ##################################################################### -// Public Interface (createUdqDims()) Below Separator -// --------------------------------------------------------------------- - -std::vector -Opm::RestartIO::Helpers:: -createUdqDims(const Schedule& sched, - const std::size_t lookup_step, - const std::vector& inteHead) -{ - const auto& udqCfg = sched.getUDQConfig(lookup_step); - std::vector udqDims; - udqDims.resize(13,0); - - udqDims[ 0] = udqCfg.size(); - udqDims[ 1] = entriesPerIUDQ(); - udqDims[ 2] = inteHead[VI::intehead::NO_IUADS]; - udqDims[ 3] = entriesPerIUAD(); - udqDims[ 4] = entriesPerZUDN(); - udqDims[ 5] = entriesPerZUDL(); - udqDims[ 6] = noIGphs(inteHead); - udqDims[ 7] = inteHead[VI::intehead::NO_IUAPS]; - udqDims[ 8] = inteHead[VI::intehead::NWMAXZ]; - udqDims[ 9] = inteHead[VI::intehead::NO_WELL_UDQS]; - udqDims[10] = inteHead[VI::intehead::NGMAXZ]; - udqDims[11] = inteHead[VI::intehead::NO_GROUP_UDQS]; - udqDims[12] = inteHead[VI::intehead::NO_FIELD_UDQS]; - - return udqDims; -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/DoubHEAD.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/DoubHEAD.cpp deleted file mode 100644 index 310ddd5430..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/DoubHEAD.cpp +++ /dev/null @@ -1,643 +0,0 @@ -/* - Copyright (c) 2018 Statoil ASA - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include - -// Note: DynamicState.hpp and are prerequisites of Tuning.hpp -#include -#include -#include -#include - -#include // Opm::RestartIO::makeUTCTime() - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -namespace VI = Opm::RestartIO::Helpers::VectorItems; - -enum Index : std::vector::size_type { - // 0..9 - SimTime = 0, - TsInit = VI::doubhead::TsInit, - TsMaxz = VI::doubhead::TsMaxz, - TsMinz = VI::doubhead::TsMinz, - TsMchp = VI::doubhead::TsMchp, - TsFMax = VI::doubhead::TsFMax, - TsFMin = VI::doubhead::TsFMin, - TsFcnv = VI::doubhead::TsFcnv, - TrgTTE = VI::doubhead::TrgTTE, - TrgCNV = VI::doubhead::TrgCNV, - - // 10..19 - TrgMBE = VI::doubhead::TrgMBE, - TrgLCV = VI::doubhead::TrgLCV, - dh_012 = 12, - dh_013 = 13, - dh_014 = 14, - dh_015 = 15, - XxxTTE = VI::doubhead::XxxTTE, - XxxCNV = VI::doubhead::XxxCNV, - XxxMBE = VI::doubhead::XxxMBE, - XxxLCV = VI::doubhead::XxxLCV, - - // 20..29 - XxxWFL = VI::doubhead::XxxWFL, - dh_021 = 21, - dh_022 = 22, - dh_023 = 23, - dh_024 = 24, - dRsdt = 25, - dh_026 = 26, - dh_027 = 27, - dh_028 = 28, - dh_029 = 29, - - // 30..39 - dh_030 = 30, - dh_031 = 31, - dh_032 = 32, - dh_033 = 33, - dh_034 = 34, - dh_035 = 35, - dh_036 = 36, - dh_037 = 37, - dh_038 = 38, - dh_039 = 39, - - // 40..49 - dh_040 = 40, - dh_041 = 41, - dh_042 = 42, - dh_043 = 43, - dh_044 = 44, - dh_045 = 45, - dh_046 = 46, - dh_047 = 47, - dh_048 = 48, - dh_049 = 49, - - // 50..59 - dh_050 = 50, - dh_051 = 51, - dh_052 = 52, - dh_053 = 53, - dh_054 = 54, - dh_055 = 55, - dh_056 = 56, - dh_057 = 57, - dh_058 = 58, - dh_059 = 59, - - // 60..69 - dh_060 = 60, - dh_061 = 61, - dh_062 = 62, - dh_063 = 63, - dh_064 = 64, - dh_065 = 65, - dh_066 = 66, - dh_067 = 67, - dh_068 = 68, - dh_069 = 69, - - // 70..79 - dh_070 = 70, - dh_071 = 71, - dh_072 = 72, - dh_073 = 73, - dh_074 = 74, - dh_075 = 75, - dh_076 = 76, - dh_077 = 77, - dh_078 = 78, - dh_079 = 79, - - // 80..89 - dh_080 = 80, - dh_081 = 81, - TrgDPR = VI::doubhead::TrgDPR, - TfDIFF = VI::doubhead::TfDiff, - DdpLim = VI::doubhead::DdpLim, - DdsLim = VI::doubhead::DdsLim, - dh_086 = 86, - grpar_a = VI::doubhead::GRpar_a, - grpar_b = VI::doubhead::GRpar_b, - grpar_c = VI::doubhead::GRpar_c, - - // 90..99 - grpar_d = VI::doubhead::GRpar_d, - grpar_e = VI::doubhead::GRpar_e, - grpar_f = VI::doubhead::GRpar_f, - dh_093 = 93, - dh_094 = 94, - dh_095 = 95, - dh_096 = 96, - grpar_int = VI::doubhead::GRpar_int, - dh_098 = 98, - ThrUPT = VI::doubhead::ThrUPT, - - // 100..109 - XxxDPR = VI::doubhead::XxxDPR, - TrgFIP = VI::doubhead::TrgFIP, - TrgSFT = VI::doubhead::TrgSFT, - dh_103 = 103, - dh_104 = 104, - dh_105 = 105, - dh_106 = 106, - dh_107 = 107, - dh_108 = 108, - dh_109 = 109, - - // 110..119 - dh_110 = 110, - dh_111 = 111, - dh_112 = 112, - dh_113 = 113, - dh_114 = 114, - dh_115 = 115, - dh_116 = 116, - dh_117 = 117, - dh_118 = 118, - dh_119 = 119, - - // 120..129 - dh_120 = 120, - dh_121 = 121, - dh_122 = 122, - dh_123 = 123, - dh_124 = 124, - dh_125 = 125, - dh_126 = 126, - dh_127 = 127, - dh_128 = 128, - dh_129 = 129, - - // 130..139 - dh_130 = 130, - dh_131 = 131, - dh_132 = 132, - dh_133 = 133, - dh_134 = 134, - dh_135 = 135, - dh_136 = 136, - dh_137 = 137, - dh_138 = 138, - dh_139 = 139, - - // 140..149 - dh_140 = 140, - dh_141 = 141, - dh_142 = 142, - dh_143 = 143, - grpar_dmp = VI::doubhead::GRpar_damp, - dh_145 = 145, - dh_146 = 146, - dh_147 = 147, - dh_148 = 148, - dh_149 = 149, - - // 150..159 - dh_150 = 150, - dh_151 = 151, - dh_152 = 152, - dh_153 = 153, - dh_154 = 154, - dh_155 = 155, - dh_156 = 156, - dh_157 = 157, - dh_158 = 158, - dh_159 = 159, - - // 160..169 - Start = 160, - Time = 161, - dh_162 = 162, - dh_163 = 163, - dh_164 = 164, - dh_165 = 165, - dh_166 = 166, - dh_167 = 167, - dh_168 = 168, - dh_169 = 169, - - // 170..179 - dh_170 = 170, - dh_171 = 171, - dh_172 = 172, - dh_173 = 173, - dh_174 = 174, - dh_175 = 175, - dh_176 = 176, - dh_177 = 177, - dh_178 = 178, - dh_179 = 179, - - // 180..189 - dh_180 = 180, - dh_181 = 181, - dh_182 = 182, - dh_183 = 183, - dh_184 = 184, - dh_185 = 185, - dh_186 = 186, - dh_187 = 187, - dh_188 = 188, - dh_189 = 189, - - // 190..199 - dh_190 = 190, - dh_191 = 191, - dh_192 = 192, - dh_193 = 193, - dh_194 = 194, - dh_195 = 195, - dh_196 = 196, - dh_197 = 197, - dh_198 = 198, - dh_199 = 199, - - // 200..209 - dh_200 = 200, - dh_201 = 201, - dh_202 = 202, - dh_203 = 203, - dh_204 = 204, - dh_205 = 205, - dh_206 = 206, - dh_207 = 207, - dh_208 = 208, - dh_209 = 209, - - // 210..219 - dh_210 = 210, - dh_211 = 211, - UdqPar_2= VI::doubhead::UdqPar_2, - UdqPar_3= VI::doubhead::UdqPar_3, - UdqPar_4= VI::doubhead::UdqPar_4, - dh_215 = 215, - dh_216 = 216, - dh_217 = 217, - dh_218 = 218, - dh_219 = 219, - - // 220..228 - dh_220 = 220, - dh_221 = 221, - dh_222 = 222, - dh_223 = 223, - dh_224 = 224, - dh_225 = 225, - dh_226 = 226, - dh_227 = 227, - dh_228 = 228, - -// --------------------------------------------------------------------- -// --------------------------------------------------------------------- - - NUMBER_OF_ITEMS // MUST be last element of enum. -}; - -namespace { - /// Convert std::tm{} to Date-Number. - /// - /// ECL Restrictions: - /// - Calendar start: 1st January 0000 - /// - Year length: 365.25 days - /// - No special leap year handling - /// - /// \param[in] year tm::tm_year of date (years since 1900). - /// - /// \param[in] yday tm::tm_yday of date (days since 1st January). - /// - /// \return Date-number corresponding to specified day-of-year in - /// specified year, subject to restrictions outlined above. - double toDateNum(const int year, const int yday) - { - return std::floor(365.25 * (year + 1900)) - + (yday + 1); // Day of year [1 .. 365] - } - - double toDateNum(const std::chrono::time_point tp) - { - const auto t0 = std::chrono::system_clock::to_time_t(tp); - const auto tm0 = *std::gmtime(&t0); - - // Set clock to 01:00:00+0000 on 2001-- to get - // "accurate" day-of-year calculation (no leap year, no DST offset, - // not previous day reported). - auto tm1 = std::tm{}; - tm1.tm_year = 101; // 2001 - tm1.tm_mon = tm0.tm_mon; - tm1.tm_mday = tm0.tm_mday; - - tm1.tm_hour = 1; - tm1.tm_min = 0; - tm1.tm_sec = 0; - tm1.tm_isdst = 0; - - const auto t1 = ::Opm::RestartIO::makeUTCTime(tm1); - - if (t1 != static_cast(-1)) { - tm1 = *std::gmtime(&t1); // Get new tm_yday. - return toDateNum(tm0.tm_year, tm1.tm_yday); - } - - // Failed to convert tm1 to time_t (unexpected). Use initial value. - return toDateNum(tm0.tm_year, tm0.tm_yday); - } -} - -// ===================================================================== -// Public Interface (DoubHEAD member functions) Below Separator -// --------------------------------------------------------------------- - -Opm::RestartIO::DoubHEAD::DoubHEAD() - : data_(Index::NUMBER_OF_ITEMS, 0.0) -{ - // Numbers below have unknown usage, values have been determined by - // experiments to be constant across a range of reference cases. - this->data_[Index::dh_024] = 1.0e+20; - this->data_[Index::dh_026] = 0.0; - this->data_[Index::dh_027] = 0.0; - this->data_[Index::dh_028] = 0.0; - this->data_[Index::dh_050] = 0.01; - this->data_[Index::dh_054] = 1.0e+20; - this->data_[Index::dh_055] = 1.0e+20; - this->data_[Index::dh_063] = 1.0e+20; - this->data_[Index::dh_064] = 1.0e+20; - this->data_[Index::dh_065] = 0.0; - this->data_[Index::dh_066] = 0.0; - this->data_[Index::dh_069] = -1.0; - this->data_[Index::dh_080] = 1.0e+20; - this->data_[Index::dh_081] = 1.0e+20; - this->data_[grpar_e] = 0.0; - this->data_[grpar_f] = 0.0; - this->data_[Index::dh_093] = 0.0; - this->data_[Index::dh_096] = 0.0; - this->data_[Index::dh_105] = 1.0; - this->data_[Index::dh_108] = 0.0; - this->data_[Index::dh_109] = 0.0; - this->data_[Index::dh_110] = 0.0; - - this->data_[Index::dh_123] = 365.0; - this->data_[Index::dh_124] = 0.1; - this->data_[Index::dh_125] = 0.15; - this->data_[Index::dh_126] = 3.0; - this->data_[Index::dh_127] = 0.3; - this->data_[Index::dh_128] = 0.1; - this->data_[Index::dh_129] = 0.1; - - this->data_[Index::dh_130] = 0.001; - this->data_[Index::dh_131] = 1.0e-7; - this->data_[Index::dh_132] = 1.0e-4; - this->data_[Index::dh_133] = 10.0; - this->data_[Index::dh_134] = 0.01; - this->data_[Index::dh_135] = 1.0e-6; - this->data_[Index::dh_136] = 0.001; - this->data_[Index::dh_137] = 0.001; - - this->data_[Index::dh_140] = 1.0e-20; // check this value - this->data_[Index::dh_141] = 1.013; - this->data_[Index::dh_142] = 0.0; - this->data_[Index::dh_143] = 1.0; - this->data_[Index::dh_145] = 0.3; - this->data_[Index::dh_146] = 2.0; - this->data_[Index::dh_147] = 0.0; - this->data_[Index::dh_148] = 0.0; - this->data_[Index::dh_149] = 0.0; - - this->data_[Index::dh_150] = 0.0; - this->data_[Index::dh_151] = 0.0; - this->data_[Index::dh_152] = 0.0; - this->data_[Index::dh_153] = 0.0; - this->data_[Index::dh_154] = 0.0; - - this->data_[Index::dh_162] = 1.0; - this->data_[Index::dh_163] = 0.2; - this->data_[Index::dh_164] = 0.4; - this->data_[Index::dh_165] = 1.2; - this->data_[Index::dh_166] = 0.3; - this->data_[Index::dh_167] = 1.0; - - this->data_[Index::dh_170] = 0.4; - this->data_[Index::dh_171] = 0.7; - this->data_[Index::dh_172] = 2.0; - this->data_[Index::dh_178] = 1.0; - this->data_[Index::dh_179] = 1.0; - - this->data_[Index::dh_180] = 1.0; - this->data_[Index::dh_181] = 0.0; - this->data_[Index::dh_182] = 0.0; - this->data_[Index::dh_183] = 1.0; - this->data_[Index::dh_184] = 1.0e-4; - this->data_[Index::dh_185] = 0.0; - this->data_[Index::dh_186] = 0.0; - this->data_[Index::dh_187] = 1.0e+20; - this->data_[Index::dh_188] = 1.0e+20; - this->data_[Index::dh_189] = 1.0e+20; - - this->data_[Index::dh_190] = 1.0e+20; - this->data_[Index::dh_191] = 1.0e+20; - this->data_[Index::dh_192] = 1.0e+20; - this->data_[Index::dh_193] = 1.0e+20; - this->data_[Index::dh_194] = 1.0e+20; - this->data_[Index::dh_195] = 1.0e+20; - this->data_[Index::dh_196] = 1.0e+20; - this->data_[Index::dh_197] = 1.0e+20; - this->data_[Index::dh_198] = 1.0e+20; - this->data_[Index::dh_199] = 1.0; - - this->data_[Index::dh_200] = 0.0; - this->data_[Index::dh_201] = 0.0; - this->data_[Index::dh_202] = 0.0; - this->data_[Index::dh_203] = 0.0; - this->data_[Index::dh_204] = 0.0; - this->data_[Index::dh_205] = 0.0; - this->data_[Index::dh_206] = 0.0; - this->data_[Index::dh_207] = 0.0; - this->data_[Index::dh_208] = 0.0; - this->data_[Index::dh_209] = 0.0; - - this->data_[Index::dh_210] = 0.0; - this->data_[Index::dh_211] = 0.0; - this->data_[UdqPar_2] = 1.0E+20; - this->data_[UdqPar_3] = 0.0; - this->data_[UdqPar_4] = 1.0e-4; - this->data_[Index::dh_215] = -2.0e+20; - this->data_[Index::dh_217] = 0.0; - this->data_[Index::dh_218] = 0.0; - this->data_[Index::dh_219] = 0.0; - - this->data_[Index::dh_220] = 0.01; - this->data_[Index::dh_221] = 1.0; - this->data_[Index::dh_222] = 0.0; - this->data_[Index::dh_223] = 1.0e+20; - this->data_[Index::dh_225] = 0.0; - this->data_[Index::dh_226] = 0.0; - this->data_[Index::dh_227] = 0.0; - - this->data_[Index::TsInit] = 1.0; - this->data_[Index::TsMaxz] = 365.0; - this->data_[Index::TsMinz] = 0.1; - this->data_[Index::TsMchp] = 0.15; - this->data_[Index::TsFMax] = 3.0; - this->data_[Index::TsFMin] = 0.3; - this->data_[Index::TsFcnv] = 0.1; - this->data_[Index::TrgTTE] = 0.1; - this->data_[Index::TrgCNV] = 0.001; - this->data_[Index::TrgMBE] = 1.0E-7; - this->data_[Index::TrgLCV] = 0.0001; - - this->data_[Index::XxxTTE] = 10.0; - this->data_[Index::XxxCNV] = 0.01; - this->data_[Index::XxxMBE] = 1.0e-6; - this->data_[Index::XxxLCV] = 0.001; - this->data_[Index::XxxWFL] = 0.001; - - this->data_[Index::dRsdt] = 1.0e+20; // "Infinity" - - this->data_[Index::TrgDPR] = 1.0e+6; - this->data_[Index::TfDIFF] = 1.25; - this->data_[Index::DdpLim] = 1.0e+6; - this->data_[Index::DdsLim] = 1.0e+6; - - - this->data_[Index::ThrUPT] = 1.0e+20; - this->data_[Index::XxxDPR] = 1.0e+20; - this->data_[Index::TrgFIP] = 0.025; - this->data_[Index::TrgSFT] = 1.0e+20; -} - -Opm::RestartIO::DoubHEAD& -Opm::RestartIO::DoubHEAD::tuningParameters(const Tuning& tuning, - const double cnvT) -{ - // Record 1 - this->data_[Index::TsInit] = tuning.TSINIT / cnvT; - this->data_[Index::TsMaxz] = tuning.TSMAXZ / cnvT; - this->data_[Index::TsMinz] = tuning.TSMINZ / cnvT; - this->data_[Index::TsMchp] = tuning.TSMCHP / cnvT; - this->data_[Index::TsFMax] = tuning.TSFMAX; - this->data_[Index::TsFMin] = tuning.TSFMIN; - this->data_[Index::TsFcnv] = tuning.TSFCNV; - this->data_[Index::ThrUPT] = tuning.THRUPT; - this->data_[Index::TfDIFF] = tuning.TFDIFF; - - // Record 2 - this->data_[Index::TrgTTE] = tuning.TRGTTE; - this->data_[Index::TrgCNV] = tuning.TRGCNV; - this->data_[Index::TrgMBE] = tuning.TRGMBE; - this->data_[Index::TrgLCV] = tuning.TRGLCV; - this->data_[Index::XxxTTE] = tuning.XXXTTE; - this->data_[Index::XxxCNV] = tuning.XXXCNV; - this->data_[Index::XxxMBE] = tuning.XXXMBE; - this->data_[Index::XxxLCV] = tuning.XXXLCV; - this->data_[Index::XxxWFL] = tuning.XXXWFL; - this->data_[Index::TrgFIP] = tuning.TRGFIP; - this->data_[Index::TrgSFT] = tuning.TRGSFT; - - // Record 3 - this->data_[Index::TrgDPR] = tuning.TRGDPR; - this->data_[Index::XxxDPR] = tuning.XXXDPR; - this->data_[Index::DdpLim] = tuning.DDPLIM; - this->data_[Index::DdsLim] = tuning.DDSLIM; - - return *this; -} - -Opm::RestartIO::DoubHEAD& -Opm::RestartIO::DoubHEAD::timeStamp(const TimeStamp& ts) -{ - using day = std::chrono::duration> - >; - - // Elapsed time in days - this->data_[Index::SimTime] = day{ ts.elapsed }.count(); - - // Start time in date-numbers - this->data_[Index::Start] = toDateNum(ts.start); - - // Simulation time-stamp in date-numbers - this->data_[Index::Time] = this->data_[Index::Start] - + this->data_[Index::SimTime]; - - return *this; -} - -Opm::RestartIO::DoubHEAD& -Opm::RestartIO::DoubHEAD::nextStep(const double nextTimeStep) -{ - if (nextTimeStep > 0.0) { - this->data_[Index::TsInit] = nextTimeStep; - } - - return *this; -} - -Opm::RestartIO::DoubHEAD& -Opm::RestartIO::DoubHEAD::drsdt(const Schedule& sched, - const std::size_t lookup_step, - const double cnvT) -{ - const auto& vappar = - sched.getOilVaporizationProperties(lookup_step); - - this->data_[dRsdt] = - (vappar.getType() == Opm::OilVaporizationProperties::OilVaporization::DRDT) - ? vappar.getMaxDRSDT(0)*cnvT - : 1.0e+20; - - return *this; -} - -Opm::RestartIO::DoubHEAD& -Opm::RestartIO::DoubHEAD::udq_param(const UDQParams& udqPar) -{ - this->data_[UdqPar_2] = udqPar.range(); - this->data_[UdqPar_3] = udqPar.undefinedValue(); - this->data_[UdqPar_4] = udqPar.cmpEpsilon(); - - return *this; -} - -Opm::RestartIO::DoubHEAD& -Opm::RestartIO::DoubHEAD::guide_rate_param(const guideRate& guide_rp) -{ - this->data_[grpar_a] = guide_rp.A; - this->data_[grpar_b] = guide_rp.B; - this->data_[grpar_c] = guide_rp.C; - this->data_[grpar_d] = guide_rp.D; - this->data_[grpar_e] = guide_rp.E; - this->data_[grpar_f] = guide_rp.F; - this->data_[grpar_int] = guide_rp.delay; - this->data_[grpar_dmp] = guide_rp.damping_fact; - - return *this; -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/EclipseGridInspector.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/EclipseGridInspector.cpp deleted file mode 100644 index 54419357e3..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/EclipseGridInspector.cpp +++ /dev/null @@ -1,350 +0,0 @@ -//=========================================================================== -// -// File: EclipseGridInspector.C -// -// Created: Mon Jun 2 12:17:51 2008 -// -// Author: Atgeirr F Rasmussen -// -// $Date$ -// -// $Revision$ -// -// Revision: $Id: EclipseGridInspector.C,v 1.2 2008/08/18 14:16:13 atgeirr Exp $ -// -//=========================================================================== - -/* - Copyright 2009, 2010 SINTEF ICT, Applied Mathematics. - Copyright 2009, 2010 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -namespace Opm -{ -EclipseGridInspector::EclipseGridInspector(Opm::Deck deck) - : deck_( std::move( deck ) ) -{ - init_(); -} - -void EclipseGridInspector::init_() -{ - if (!deck_.hasKeyword("COORD")) { - OPM_THROW(std::runtime_error, "Needed field \"COORD\" is missing in file"); - } - if (!deck_.hasKeyword("ZCORN")) { - OPM_THROW(std::runtime_error, "Needed field \"ZCORN\" is missing in file"); - } - - if (deck_.hasKeyword("SPECGRID")) { - const auto& specgridRecord = - deck_.getKeyword("SPECGRID").getRecord(0); - logical_gridsize_[0] = specgridRecord.getItem("NX").get< int >(0); - logical_gridsize_[1] = specgridRecord.getItem("NY").get< int >(0); - logical_gridsize_[2] = specgridRecord.getItem("NZ").get< int >(0); - } else if (deck_.hasKeyword("DIMENS")) { - const auto& dimensRecord = - deck_.getKeyword("DIMENS").getRecord(0); - logical_gridsize_[0] = dimensRecord.getItem("NX").get< int >(0); - logical_gridsize_[1] = dimensRecord.getItem("NY").get< int >(0); - logical_gridsize_[2] = dimensRecord.getItem("NZ").get< int >(0); - } else { - OPM_THROW(std::runtime_error, "Found neither SPECGRID nor DIMENS in file. At least one is needed."); - } - -} - -/** - Return the dip slopes for the cell relative to xy-plane in x- and y- direction. - Dip slope is average rise in positive x-direction over cell length in x-direction. - Similarly for y. - - Current implementation is for vertical pillars, but is not difficult to fix. - - @returns a std::pair with x-dip in first component and y-dip in second. -*/ -std::pair EclipseGridInspector::cellDips(int i, int j, int k) const -{ - checkLogicalCoords(i, j, k); - const std::vector& pillc = - deck_.getKeyword("COORD").getSIDoubleData(); - int num_pillars = (logical_gridsize_[0] + 1)*(logical_gridsize_[1] + 1); - if (6*num_pillars != int(pillc.size())) { - throw std::runtime_error("Wrong size of COORD field."); - } - const std::vector& z = - deck_.getKeyword("ZCORN").getSIDoubleData(); - int num_cells = logical_gridsize_[0]*logical_gridsize_[1]*logical_gridsize_[2]; - if (8*num_cells != int(z.size())) { - throw std::runtime_error("Wrong size of ZCORN field"); - } - - // Pick ZCORN-value for all 8 corners of the given cell - std::array cellz = cellZvals(i, j, k); - - // Compute rise in positive x-direction for all four edges (and then find mean) - // Current implementation is for regularly placed and vertical pillars! - int numxpill = logical_gridsize_[0] + 1; - int pix = i + j*numxpill; - double cell_xlength = pillc[6*(pix + 1)] - pillc[6*pix]; - flush(std::cout); - double xrise[4] = { (cellz[1] - cellz[0])/cell_xlength, // LLL -> HLL - (cellz[3] - cellz[2])/cell_xlength, // LHL -> HHL - (cellz[5] - cellz[4])/cell_xlength, // LLH -> HLH - (cellz[7] - cellz[6])/cell_xlength}; // LHH -> HHH - - double cell_ylength = pillc[6*(pix + numxpill) + 1] - pillc[6*pix + 1]; - double yrise[4] = { (cellz[2] - cellz[0])/cell_ylength, // LLL -> LHL - (cellz[3] - cellz[1])/cell_ylength, // HLL -> HHL - (cellz[6] - cellz[4])/cell_ylength, // LLH -> LHH - (cellz[7] - cellz[5])/cell_ylength}; // HLH -> HHH - - - // Now ignore those edges that touch the global top or bottom surface - // of the entire grdecl model. This is to avoid bias, as these edges probably - // don't follow an overall dip for the model if it exists. - int x_edges = 4; - int y_edges = 4; - std::array gridlimits = getGridLimits(); - double zmin = gridlimits[4]; - double zmax = gridlimits[5]; - // LLL -> HLL - if ((cellz[1] == zmin) || (cellz[0] == zmin)) { - xrise[0] = 0; x_edges--; - } - // LHL -> HHL - if ((cellz[2] == zmin) || (cellz[3] == zmin)) { - xrise[1] = 0; x_edges--; - } - // LLH -> HLH - if ((cellz[4] == zmax) || (cellz[5] == zmax)) { - xrise[2] = 0; x_edges--; - } - // LHH -> HHH - if ((cellz[6] == zmax) || (cellz[7] == zmax)) { - xrise[3] = 0; x_edges--; - } - // LLL -> LHL - if ((cellz[0] == zmin) || (cellz[2] == zmin)) { - yrise[0] = 0; y_edges--; - } - // HLL -> HHL - if ((cellz[1] == zmin) || (cellz[3] == zmin)) { - yrise[1] = 0; y_edges--; - } - // LLH -> LHH - if ((cellz[6] == zmax) || (cellz[4] == zmax)) { - yrise[2] = 0; y_edges--; - } - // HLH -> HHH - if ((cellz[7] == zmax) || (cellz[5] == zmax)) { - yrise[3] = 0; y_edges--; - } - - return std::make_pair( (xrise[0] + xrise[1] + xrise[2] + xrise[3])/x_edges, - (yrise[0] + yrise[1] + yrise[2] + yrise[3])/y_edges); -} -/** - Wrapper for cellDips(i, j, k). -*/ -std::pair EclipseGridInspector::cellDips(int cell_idx) const -{ - std::array idxs = cellIdxToLogicalCoords(cell_idx); - return cellDips(idxs[0], idxs[1], idxs[2]); -} - -std::array EclipseGridInspector::cellIdxToLogicalCoords(int cell_idx) const -{ - - int i,j,k; // Position of cell in cell hierarchy - int horIdx = (cell_idx+1) - int(std::floor(((double)(cell_idx+1))/((double)(logical_gridsize_[0]*logical_gridsize_[1]))))*logical_gridsize_[0]*logical_gridsize_[1]; // index in the corresponding horizon - if (horIdx == 0) { - horIdx = logical_gridsize_[0]*logical_gridsize_[1]; - } - i = horIdx - int(std::floor(((double)horIdx)/((double)logical_gridsize_[0])))*logical_gridsize_[0]; - if (i == 0) { - i = logical_gridsize_[0]; - } - j = (horIdx-i)/logical_gridsize_[0]+1; - k = ((cell_idx+1)-logical_gridsize_[0]*(j-1)-1)/(logical_gridsize_[0]*logical_gridsize_[1])+1; - - std::array a = {{i-1, j-1, k-1}}; - return a; //std::array {{i-1, j-1, k-1}}; -} - -double EclipseGridInspector::cellVolumeVerticalPillars(int i, int j, int k) const -{ - // Checking parameters and obtaining values from parser. - checkLogicalCoords(i, j, k); - const std::vector& pillc = - deck_.getKeyword("COORD").getSIDoubleData(); - int num_pillars = (logical_gridsize_[0] + 1)*(logical_gridsize_[1] + 1); - if (6*num_pillars != int(pillc.size())) { - throw std::runtime_error("Wrong size of COORD field."); - } - const std::vector& z = - deck_.getKeyword("ZCORN").getSIDoubleData(); - int num_cells = logical_gridsize_[0]*logical_gridsize_[1]*logical_gridsize_[2]; - if (8*num_cells != int(z.size())) { - throw std::runtime_error("Wrong size of ZCORN field"); - } - - // Computing the base area as half the 2d cross product of the diagonals. - int numxpill = logical_gridsize_[0] + 1; - int pix = i + j*numxpill; - double px[4] = { pillc[6*pix], - pillc[6*(pix + 1)], - pillc[6*(pix + numxpill)], - pillc[6*(pix + numxpill + 1)] }; - double py[4] = { pillc[6*pix + 1], - pillc[6*(pix + 1) + 1], - pillc[6*(pix + numxpill) + 1], - pillc[6*(pix + numxpill + 1) + 1] }; - double diag1[2] = { px[3] - px[0], py[3] - py[0] }; - double diag2[2] = { px[2] - px[1], py[2] - py[1] }; - double area = 0.5*(diag1[0]*diag2[1] - diag1[1]*diag2[0]); - - // Computing the average of the z-differences along each pillar. - int delta[3] = { 1, - 2*logical_gridsize_[0], - 4*logical_gridsize_[0]*logical_gridsize_[1] }; - int ix = 2*(i*delta[0] + j*delta[1] + k*delta[2]); - double cellz[8] = { z[ix], z[ix + delta[0]], - z[ix + delta[1]], z[ix + delta[1] + delta[0]], - z[ix + delta[2]], z[ix + delta[2] + delta[0]], - z[ix + delta[2] + delta[1]], z[ix + delta[2] + delta[1] + delta[0]] }; - double diffz[4] = { cellz[4] - cellz[0], - cellz[5] - cellz[1], - cellz[6] - cellz[2], - cellz[7] - cellz[3] }; - double averzdiff = 0.25*std::accumulate(diffz, diffz + 4, 0.0); - return averzdiff*area; -} - - -double EclipseGridInspector::cellVolumeVerticalPillars(int cell_idx) const -{ - std::array idxs = cellIdxToLogicalCoords(cell_idx); - return cellVolumeVerticalPillars(idxs[0], idxs[1], idxs[2]); -} - -void EclipseGridInspector::checkLogicalCoords(int i, int j, int k) const -{ - if (i < 0 || i >= logical_gridsize_[0]) - throw std::runtime_error("First coordinate out of bounds"); - if (j < 0 || j >= logical_gridsize_[1]) - throw std::runtime_error("Second coordinate out of bounds"); - if (k < 0 || k >= logical_gridsize_[2]) - throw std::runtime_error("Third coordinate out of bounds"); -} - - -std::array EclipseGridInspector::getGridLimits() const -{ - if (! (deck_.hasKeyword("COORD") && deck_.hasKeyword("ZCORN") && deck_.hasKeyword("SPECGRID")) ) { - throw std::runtime_error("EclipseGridInspector: Grid does not have SPECGRID, COORD, and ZCORN, can't find dimensions."); - } - - std::vector coord = deck_.getKeyword("COORD").getSIDoubleData(); - std::vector zcorn = deck_.getKeyword("ZCORN").getSIDoubleData(); - - double xmin = +DBL_MAX; - double xmax = -DBL_MAX; - double ymin = +DBL_MAX; - double ymax = -DBL_MAX; - - - int pillars = (logical_gridsize_[0]+1) * (logical_gridsize_[1]+1); - - for (int pillarindex = 0; pillarindex < pillars; ++pillarindex) { - if (coord[pillarindex * 6 + 0] > xmax) - xmax = coord[pillarindex * 6 + 0]; - if (coord[pillarindex * 6 + 0] < xmin) - xmin = coord[pillarindex * 6 + 0]; - if (coord[pillarindex * 6 + 1] > ymax) - ymax = coord[pillarindex * 6 + 1]; - if (coord[pillarindex * 6 + 1] < ymin) - ymin = coord[pillarindex * 6 + 1]; - if (coord[pillarindex * 6 + 3] > xmax) - xmax = coord[pillarindex * 6 + 3]; - if (coord[pillarindex * 6 + 3] < xmin) - xmin = coord[pillarindex * 6 + 3]; - if (coord[pillarindex * 6 + 4] > ymax) - ymax = coord[pillarindex * 6 + 4]; - if (coord[pillarindex * 6 + 4] < ymin) - ymin = coord[pillarindex * 6 + 4]; - } - - std::array gridlimits = {{ xmin, xmax, ymin, ymax, - *min_element(zcorn.begin(), zcorn.end()), - *max_element(zcorn.begin(), zcorn.end()) }}; - return gridlimits; -} - - - -std::array EclipseGridInspector::gridSize() const -{ - std::array retval = {{ logical_gridsize_[0], - logical_gridsize_[1], - logical_gridsize_[2] }}; - return retval; -} - - -std::array EclipseGridInspector::cellZvals(int i, int j, int k) const -{ - // Get the zcorn field. - const std::vector& z = deck_.getKeyword("ZCORN").getSIDoubleData(); - int num_cells = logical_gridsize_[0]*logical_gridsize_[1]*logical_gridsize_[2]; - if (8*num_cells != int(z.size())) { - throw std::runtime_error("Wrong size of ZCORN field"); - } - - // Make the coordinate array. - int delta[3] = { 1, - 2*logical_gridsize_[0], - 4*logical_gridsize_[0]*logical_gridsize_[1] }; - int ix = 2*(i*delta[0] + j*delta[1] + k*delta[2]); - std::array cellz = {{ z[ix], z[ix + delta[0]], - z[ix + delta[1]], z[ix + delta[1] + delta[0]], - z[ix + delta[2]], z[ix + delta[2] + delta[0]], - z[ix + delta[2] + delta[1]], z[ix + delta[2] + delta[1] + delta[0]] }}; - return cellz; -} - - -} // namespace Opm diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/EclipseIO.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/EclipseIO.cpp deleted file mode 100644 index 85f979cbb1..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/EclipseIO.cpp +++ /dev/null @@ -1,309 +0,0 @@ -/* - Copyright (c) 2016 Statoil ASA - Copyright (c) 2013-2015 Andreas Lauser - Copyright (c) 2013 SINTEF ICT, Applied Mathematics. - Copyright (c) 2013 Uni Research AS - Copyright (c) 2015 IRIS AS - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ -#include "config.h" - -#include - -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#include -#include -#include -#include -#include - -#include -#include - -#include -#include -#include -#include -#include // unique_ptr -#include -#include -#include -#include // move - -#include - -namespace { - -inline std::string uppercase( std::string x ) { - std::transform( x.begin(), x.end(), x.begin(), - []( char c ) { return std::toupper( c ); } ); - - return x; -} - -void ensure_directory_exists( const Opm::filesystem::path& odir ) -{ - namespace fs = Opm::filesystem; - - if (fs::exists( odir ) && !fs::is_directory( odir )) - throw std::runtime_error { - "Filesystem element '" + odir.generic_string() - + "' already exists but is not a directory" - }; - - std::error_code ec{}; - if (! fs::exists( odir )) - fs::create_directories( odir, ec ); - - if (ec) { - std::ostringstream msg; - - msg << "Failed to create output directory '" - << odir.generic_string() - << "\nSystem reports: " << ec << '\n'; - - throw std::runtime_error { msg.str() }; - } -} - -} - -namespace Opm { -class EclipseIO::Impl { - public: - Impl( const EclipseState&, EclipseGrid, const Schedule&, const SummaryConfig& ); - void writeINITFile( const data::Solution& simProps, std::map > int_data, const NNC& nnc) const; - void writeEGRIDFile( const NNC& nnc ); - bool wantRFTOutput( const int report_step, const bool isSubstep ) const; - - const EclipseState& es; - EclipseGrid grid; - const Schedule& schedule; - std::string outputDir; - std::string baseName; - SummaryConfig summaryConfig; - out::Summary summary; - bool output_enabled; -}; - -EclipseIO::Impl::Impl( const EclipseState& eclipseState, - EclipseGrid grid_, - const Schedule& schedule_, - const SummaryConfig& summary_config) - : es( eclipseState ) - , grid( std::move( grid_ ) ) - , schedule( schedule_ ) - , outputDir( eclipseState.getIOConfig().getOutputDir() ) - , baseName( uppercase( eclipseState.getIOConfig().getBaseName() ) ) - , summaryConfig( summary_config ) - , summary( eclipseState, summaryConfig, grid , schedule ) - , output_enabled( eclipseState.getIOConfig().getOutputEnabled() ) -{} - - -void EclipseIO::Impl::writeINITFile(const data::Solution& simProps, - std::map> int_data, - const NNC& nnc) const -{ - EclIO::OutputStream::Init initFile { - EclIO::OutputStream::ResultSet { this->outputDir, this->baseName }, - EclIO::OutputStream::Formatted { this->es.cfg().io().getFMTOUT() } - }; - - InitIO::write(this->es, this->grid, this->schedule, - simProps, std::move(int_data), nnc, initFile); -} - - -void EclipseIO::Impl::writeEGRIDFile( const NNC& nnc ) { - const auto formatted = this->es.cfg().io().getFMTOUT(); - - const auto ext = '.' - + (formatted ? std::string{"F"} : std::string{}) - + "EGRID"; - - const auto egridFile = (Opm::filesystem::path{ this->outputDir } - / (this->baseName + ext)).generic_string(); - - this->grid.save( egridFile, formatted, nnc, this->es.getDeckUnitSystem()); -} - -bool EclipseIO::Impl::wantRFTOutput( const int report_step, - const bool isSubstep ) const -{ - return !isSubstep - && (static_cast(report_step) - >= this->schedule.rftConfig().firstRFTOutput()); -} - -/* -int_data: Writes key(string) and integers vector to INIT file as eclipse keywords -- Key: Max 8 chars. -- Wrong input: invalid_argument exception. -*/ -void EclipseIO::writeInitial( data::Solution simProps, std::map > int_data, const NNC& nnc) { - if( !this->impl->output_enabled ) - return; - - { - const auto& es = this->impl->es; - const IOConfig& ioConfig = es.cfg().io(); - - simProps.convertFromSI( es.getUnits() ); - if( ioConfig.getWriteINITFile() ) - this->impl->writeINITFile( simProps , std::move(int_data), nnc ); - - if( ioConfig.getWriteEGRIDFile( ) ) - this->impl->writeEGRIDFile( nnc ); - } - -} - -// implementation of the writeTimeStep method -void EclipseIO::writeTimeStep(const SummaryState& st, - int report_step, - bool isSubstep, - double secs_elapsed, - RestartValue value, - const bool write_double) - { - if (! this->impl->output_enabled) { - return; - } - - const auto& es = this->impl->es; - const auto& grid = this->impl->grid; - const auto& schedule = this->impl->schedule; - const auto& ioConfig = es.cfg().io(); - - /* - Summary data is written unconditionally for every timestep except for the - very intial report_step==0 call, which is only garbage. - */ - if (report_step > 0) { - this->impl->summary.add_timestep( st, - report_step); - this->impl->summary.write(); - } - - bool final_step { report_step == static_cast(this->impl->schedule.size()) - 1 }; - - if (final_step && this->impl->summaryConfig.createRunSummary()) { - Opm::filesystem::path outputDir { this->impl->outputDir } ; - Opm::filesystem::path outputFile { outputDir / this->impl->baseName } ; - EclIO::ESmry(outputFile).write_rsm_file(); - } - - /* - Current implementation will not write restart files for substep, - but there is an unsupported option to the RPTSCHED keyword which - will request restart output from every timestep. - */ - if(!isSubstep && schedule.restart().getWriteRestartFile(report_step)) - { - EclIO::OutputStream::Restart rstFile { - EclIO::OutputStream::ResultSet { this->impl->outputDir, - this->impl->baseName }, - report_step, - EclIO::OutputStream::Formatted { ioConfig.getFMTOUT() }, - EclIO::OutputStream::Unified { ioConfig.getUNIFOUT() } - }; - - RestartIO::save(rstFile, report_step, secs_elapsed, value, - es, grid, schedule, st, write_double); - } - - // RFT file written only if requested and never for substeps. - if (this->impl->wantRFTOutput(report_step, isSubstep)) { - // Open existing RFT file if report step is after first RFT event. - const auto openExisting = EclIO::OutputStream::RFT::OpenExisting { - static_cast(report_step) - > schedule.rftConfig().firstRFTOutput() - }; - - EclIO::OutputStream::RFT rftFile { - EclIO::OutputStream::ResultSet { this->impl->outputDir, - this->impl->baseName }, - EclIO::OutputStream::Formatted { ioConfig.getFMTOUT() }, - openExisting - }; - - RftIO::write(report_step, secs_elapsed, es.getUnits(), - grid, schedule, value.wells, rftFile); - } - - - if (!isSubstep) { - for (const auto& report : schedule.report_config(report_step)) { - std::stringstream ss; - RptIO::write_report(ss, report.first, report.second, schedule, grid, report_step); - auto log_string = ss.str(); - if (!log_string.empty()) - OpmLog::note(log_string); - } - } - } - - -RestartValue EclipseIO::loadRestart(SummaryState& summary_state, const std::vector& solution_keys, const std::vector& extra_keys) const { - const auto& es = this->impl->es; - const auto& grid = this->impl->grid; - const auto& schedule = this->impl->schedule; - const InitConfig& initConfig = es.getInitConfig(); - const auto& ioConfig = es.getIOConfig(); - const int report_step = initConfig.getRestartStep(); - const std::string filename = ioConfig.getRestartFileName( initConfig.getRestartRootName(), - report_step, - false ); - - return RestartIO::load(filename, report_step, summary_state, solution_keys, - es, grid, schedule, extra_keys); -} - -EclipseIO::EclipseIO( const EclipseState& es, - EclipseGrid grid, - const Schedule& schedule, - const SummaryConfig& summary_config) - : impl( new Impl( es, std::move( grid ), schedule , summary_config) ) -{ - if( !this->impl->output_enabled ) - return; - - ensure_directory_exists( this->impl->outputDir ); -} - -const out::Summary& EclipseIO::summary() { - return this->impl->summary; -} - - -EclipseIO::~EclipseIO() {} - -} // namespace Opm diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/InteHEAD.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/InteHEAD.cpp deleted file mode 100644 index 33ccac2dea..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/InteHEAD.cpp +++ /dev/null @@ -1,800 +0,0 @@ -#include - -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -// Public INTEHEAD items are recorded in the common header file -// -// opm/output/eclipse/VectorItems/intehead.hpp -// -// Promote items from 'index' to that list to make them public. -// The 'index' list always uses public items where available. -namespace VI = ::Opm::RestartIO::Helpers::VectorItems; - -enum index : std::vector::size_type { - ISNUM = VI::intehead::ISNUM, // 0 0 An encoded integer corresponding to the time the file was created. For files not originating from ECLIPSE, this value may be set to zero. - VERSION = VI::intehead::VERSION, // 0 0 - UNIT = VI::intehead::UNIT, // (1,2,3) 1 units type: 1 - METRIC, 2 - FIELD, 3 - LAB - ih_003 = 3 , // 0 0 - ih_004 = 4 , // 0 0 - ih_005 = 5 , // 0 0 - ih_006 = 6 , // 0 0 - ih_007 = 7 , // 0 0 - NX = VI::intehead::NX, // NX 137 Grid x-direction dimension, NX - NY = VI::intehead::NY, // NY 236 Grid x-direction dimension, NY - NZ = VI::intehead::NZ, // NZ 58 Grid x-direction dimension, NZ - NACTIV = VI::intehead::NACTIV, // NACTIV? 89022 NACTIV = number of active cells - ih_012 = 12 , // 0 0 - ih_013 = 13 , // 0 0 - PHASE = VI::intehead::PHASE, // IPHS 7 IPHS = phase indicator: 1 - oil, 2 - water, 3 - oil/water, 4 - gas, 5 – oil/gas, 6 - gas/water, 7 - oil/water/gas (ECLIPSE output only) - ih_015 = 15 , // 0 0 - NWELLS = VI::intehead::NWELLS, // NWELLS 39 NWELL = number of wells - NCWMAX = VI::intehead::NCWMAX, // NCWMAX 108 Weldims item2 NCWMAX = maximum number of completions per well - NGRP = VI::intehead::NGRP, // NGRP? 0 Number of actual groups - NWGMAX = VI::intehead::NWGMAX, // NWGMAX 0 maximum of weldims item3 or item4 NWGMAX = maximum number of wells in any well group - NGMAXZ = VI::intehead::NGMAXZ, // NGMAXZ 0 weldims item3 + 1 NGMAXZ = maximum number of groups in field - ih_021 = 21 , // 0 0 - ih_022 = 22 , // 0 0 - ih_023 = 23 , // 0 0 - NIWELZ = VI::intehead::NIWELZ, // NIWELZ 155 155 NIWELZ = no of data elements per well in IWEL array (default 97 for ECLIPSE, 94 for ECLIPSE 300) - NSWELZ = VI::intehead::NSWELZ, // NSWELZ 122 122 NSWELZ = number of daelements per well in SWEL array - NXWELZ = VI::intehead::NXWELZ, // NXWELZ 130 130 NXWELZ = number of delements per well in XWEL array - NZWELZ = VI::intehead::NZWELZ, // NZWEL 3 3 NZWEL = no of 8-character words per well in ZWEL array (= 3) - ih_028 = 28 , // 0 0 - ih_029 = 29 , // 0 0 - ih_030 = 30 , // 0 0 - ih_031 = 31 , // 0 0 - NICONZ = VI::intehead::NICONZ, // 25 15 25 NICON = no of data elements per completion in ICON array (default 19) - NSCONZ = VI::intehead::NSCONZ, // 41 0 NSCONZ = number of data elements per completion in SCON array - NXCONZ = VI::intehead::NXCONZ, // 58 0 58 NXCONZ = number of data elements per completion in XCON array - ih_035 = 35 , // 0 0 - NIGRPZ = VI::intehead::NIGRPZ, // 97+intehead_array[19] 0 97 + intehead[19] NIGRPZ = no of data elements per group in IGRP array - NSGRPZ = VI::intehead::NSGRPZ, // 112 0 112 NSGRPZ = number of data elements per group in SGRP array - NXGRPZ = VI::intehead::NXGRPZ, // 180 0 180 NXGRPZ = number of data elements per group in XGRP array - NZGRPZ = VI::intehead::NZGRPZ, // 5 0 NZGRPZ = number of data elements per group in ZGRP array - ih_040 = 40 , // 0 0 - NCAMAX = VI::intehead::NCAMAX, // 1 0 NCAMAX = maximum number of analytic aquifer connections - NIAAQZ = VI::intehead::NIAAQZ, // 18 0 NIAAQZ = number of data elements per aquifer in IAAQ array - NSAAQZ = VI::intehead::NSAAQZ, // 24 0 NSAAQZ = number of data elements per aquifer in SAAQ array - NXAAQZ = VI::intehead::NXAAQZ, // 10 0 NXAAQZ = number of data elements per aquifer in XAAQ array - NICAQZ = VI::intehead::NICAQZ, // 7 0 NSCAQZ= number of data elements per aquifer connection in SCAQ array - NSCAQZ = VI::intehead::NSCAQZ, // 2 0 - NACAQZ = VI::intehead::NACAQZ, // 4 0 - ih_048 = 48 , // 0 0 - ih_049 = 49 , // 1 // has been determined by testing - ih_050 = 50 , // 1 // has been determined by testing - NGCONT = VI::intehead::NGCTRL, // 0 - no group control, 1 if GCONPROD, 2 if GCONINJE - ih_052 = 52 , // 0 0 - ih_053 = 53 , // 0 0 - ih_054 = 54 , // 0 0 - ih_055 = 55 , // 0 0 - ih_056 = 56 , // 0 0 - ih_057 = 57 , // 0 0 - NGRNPHASE = VI::intehead::NGRNPH, // Parameter to determine the nominated phase for the guiderate - ih_059 = 59 , // 0 0 - ih_060 = 60 , // 0 0 - ih_061 = 61 , // 0 0 - ih_062 = 62 , // 0 0 - ih_063 = 63 , // 0 0 - DAY = VI::intehead::DAY, // IDAY 2 IDAY = calendar day at this report time - MONTH = VI::intehead::MONTH, // IMON 6 IMON = calendar month at this report time - YEAR = VI::intehead::YEAR, // IYEAR 2016 IYEAR = calendar year at this report time - NUM_SOLVER_STEPS = VI::intehead::NUM_SOLVER_STEPS, // The number of solver steps the simulator has performed so far. - REPORT_STEP = VI::intehead::REPORT_STEP, // The sequence/report number for for this restart file. - ih_069 = 69 , // 0 0 - ih_070 = 70 , // 0 0 - NWHISTCTL = VI::intehead::WHISTC, // index for WHISTCTL keyword - ih_072 = 72 , // 0 0 - ih_073 = 73 , // 0 0 - ih_074 = 74 , // 0 0 - ih_075 = 75 , // 0 0 - ih_076 = 76 , // 0 0 2 - ih_077 = 77 , // 0 0 - ih_078 = 78 , // 0 0 - ih_079 = 79 , // 0 0 - NEWTMX = VI::intehead::NEWTMX, // 0 0 Tuning,Record3,Item1 - NEWTMN = VI::intehead::NEWTMN, // 0 0 Tuning,Record3,Item2 - LITMAX = VI::intehead::LITMAX, // 0 0 Tuning,Record3,Item3 - LITMIN = VI::intehead::LITMIN, // 0 0 Tuning,Record3,Item4 - ih_084 = 84 , // 0 0 Tuning,Record3,Item5 - ih_085 = 85 , // 0 0 Tuning,Record3,Item6 - MXWSIT = VI::intehead::MXWSIT, // 0 0 - MXWPIT = VI::intehead::MXWPIT, // 0 0 - ih_088 = 88 , // 0 0 - NTFIP = VI::intehead::NTFIP, // 0 0 - ih_090 = 90 , // 0 0 - ih_091 = 91 , // 0 0 - ih_092 = 92 , // 0 0 - ih_093 = 93 , // 0 0 - IPROG = VI::intehead::IPROG, // 0 100 - INITSIZE = 95 , // 0 0 - ih_096 = 96 , // 0 0 - ih_097 = 97 , // 0 0 - ih_098 = 98 , // 0 0 - NMFIPR = VI::intehead::NMFIPR, // 0 0 - ih_100 = 100 , // 0 0 - ih_101 = 101 , // 0 0 1 - ih_102 = 102 , // 0 0 - ih_103 = 103 , // 0 0 1 - ih_104 = 104 , // 0 0 - ih_105 = 105 , // 0 0 - ih_106 = 106 , // 0 0 - ih_107 = 107 , // 0 0 - ih_108 = 108 , // 0 0 - ih_109 = 109 , // 0 0 - ih_110 = 110 , // 0 0 - ih_111 = 111 , // 0 0 - ih_112 = 112 , // 0 0 - ih_113 = 113 , // 0 0 - ih_114 = 114 , // 0 0 - ih_115 = 115 , // 0 0 - ih_116 = 116 , // 0 0 - ih_117 = 117 , // 0 0 - ih_118 = 118 , // 0 0 - ih_119 = 119 , // 0 0 - ih_120 = 120 , // 0 0 - ih_121 = 121 , // 0 0 - ih_122 = 122 , // 0 0 - ih_123 = 123 , // 0 0 - ih_124 = 124 , // 0 0 - ih_125 = 125 , // 0 0 - ih_126 = 126 , // 0 0 - ih_127 = 127 , // 0 0 - ih_128 = 128 , // 0 0 - ih_129 = 129 , // 0 0 - ih_130 = 130 , // 0 0 - NODMAX = 131 , // 0 0 NODMAX = maximum number of nodes in extended network option - NBRMAX = 132 , // 0 0 NBRMAX = maximum number of branches in extended network option - NIBRAN = 133 , // 0 0 NIBRAN = number of entries per branch in the IBRAN array - NRBRAN = 134 , // 0 0 NRBRAN = number of tries per branch in the RBRAN array - NINODE = 135 , // 0 0 NINODE = number of entries per node in the INODE array - NRNODE = 136 , // 0 0 NRNODE = number of entries per node in the RNODE array - NZNODE = 137 , // 0 0 NZNODE = number of entries per node in the ZNODE array - NINOBR = 138 , // 0 0 NINOBR = size of the INOBR array - ih_139 = 139 , // 0 0 - ih_140 = 140 , // 0 0 - ih_141 = 141 , // 0 0 - ih_142 = 142 , // 0 0 - ih_143 = 143 , // 0 0 - ih_144 = 144 , // 0 0 - ih_145 = 145 , // 0 0 - ih_146 = 146 , // 0 0 - ih_147 = 147 , // 0 0 - ih_148 = 148 , // 0 0 - ih_149 = 149 , // 0 0 - ih_150 = 150 , // 0 0 - ih_151 = 151 , // 0 0 - ih_152 = 152 , // 0 0 - ih_153 = 153 , // 0 0 - ih_154 = 154 , // 0 0 - ih_155 = 155 , // 0 0 - NO_ACT = VI::intehead::NOOFACTIONS, // 0 0 - MAX_LINES = VI::intehead::MAXNOLINES, // 0 0 - MAXSPRLINE = VI::intehead::MAXNOSTRPRLINE, // 0 0 - ih_159 = 159 , // 0 0 - ih_160 = 160 , // 0 0 - ih_161 = 161 , // 0 0 - NGCAUS = 162 , // 0 0 NGCAUS = maximum number of aquifer connections actually used. - NWMAXZ = VI::intehead::NWMAXZ, // 0 0 - ih_164 = 164 , // 0 0 - ih_165 = 165 , // 0 0 - ih_166 = 166 , // 0 0 - ih_167 = 167 , // 0 0 - ih_168 = 168 , // 0 0 - ih_169 = 169 , // 0 0 - ih_170 = 170 , // 0 0 - ih_171 = 171 , // 0 0 - ih_172 = 172 , // 0 0 - ih_173 = 173 , // 0 0 - NSEGWL = VI::intehead::NSEGWL, // 0 0 number of mswm wells defined with WELSEG - NSWLMX = VI::intehead::NSWLMX, // NSWLMX 0 Item 1 in WSEGDIMS keyword (runspec section) NSWLMX = maximum number of segmented wells - NSEGMX = VI::intehead::NSEGMX, // NSEGMX 0 Item 2 in WSEGDIMS keyword (runspec section) NSEGMX = maximum number of segments per well - NLBRMX = VI::intehead::NLBRMX, // NLBRMX 0 Item 3 in WSEGDIMS keyword (runspec section) NLBRMX = maximum number of lateral branches per well - NISEGZ = VI::intehead::NISEGZ, // 22 0 22 NISEGZ = number of entries per segment in ISEG array - NRSEGZ = VI::intehead::NRSEGZ, // 146 0 140 NRSEGZ = number of entries per segment in RSEG array - NILBRZ = VI::intehead::NILBRZ, // 10 10 NILBRZ = number of entries per segment in ILBR array - RSTSIZE = 181 , // 0 - ih_182 = 182 , // 0 - ih_183 = 183 , // 0 - ih_184 = 184 , // 0 - ih_185 = 185 , // 0 - ih_186 = 186 , // 0 - ih_187 = 187 , // 0 - ih_188 = 188 , // 0 - ih_189 = 189 , // 0 - ih_190 = 190 , // 0 - ih_191 = 191 , // 0 - ih_192 = 192 , // 0 - ih_193 = 193 , // 0 - ih_194 = 194 , // 0 - ih_195 = 195 , // 0 - ih_196 = 196 , // 0 - ih_197 = 197 , // 0 - ih_198 = 198 , // 0 - ih_199 = 199 , // 0 - ih_200 = 200 , // 0 - ih_201 = 201 , // 0 - ih_202 = 202 , // 0 - ih_203 = 203 , // 0 - ih_204 = 204 , // 0 - ih_205 = 205 , // 0 - IHOURZ = VI::intehead::IHOURZ, - IMINTS = VI::intehead::IMINTS, - ih_208 = 208 , // 0 - ih_209 = 209 , // 0 - ih_210 = 210 , // 0 - ih_211 = 211 , // 0 - ih_212 = 212 , // 0 - ih_213 = 213 , // 0 - ih_214 = 214 , // 0 - ih_215 = 215 , // 0 - ih_216 = 216 , // 0 - ih_217 = 217 , // 0 - ih_218 = 218 , // 0 - ih_219 = 219 , // 0 - ih_220 = 220 , // 0 - ih_221 = 221 , // 0 - ih_222 = 222 , // 0 - NIIAQN = 223 , // 0 NIIAQN = number of lines of integer AQUNUM data. - NIRAQN = 224 , // 0 NIRAQN = number of lines of real AQUNUM data. - ih_225 = 225 , // 0 - NUMAQN = 226 , // 0 NUMAQN = number of lines of AQUNUM data entered. - ih_227 = 227 , // 0 - ih_228 = 228 , // 0 - ih_229 = 229 , // 0 - ih_230 = 230 , // 0 - ih_231 = 231 , // 0 - ih_232 = 232 , // 0 - ih_233 = 233 , // 0 - NICOTZ = 234 , // 0 NICOTZ = number of entries in the ICOT array - NXCOTZ = 235 , // 0 NXCOTZ = number of entries in the XCOT array - NIWETZ = 236 , // 0 NIWETZ = number of entries in the IWET array - NXWETZ = 237 , // 0 NXWETZ = number of entries in the XWET array - NIGRTZ = 238 , // 0 NIGRTZ = number of entries in the IGRT array - NXGRTZ = 239 , // 0 NXGRTZ = number of entries in the XGRT array - NSTRA2 = 240 , // 0 NSTRA2 = number of tracers + 2 - ih_241 = 241 , // 0 - ih_242 = 242 , // 0 - ih_243 = 243 , // 0 - ih_244 = 244 , // 0 - MXACTC = VI::intehead::MAX_ACT_COND, // Max no of conditions pr action - ih_246 = 246 , // 0 - ih_247 = 247 , // 0 - ih_248 = 248 , // 0 - ih_249 = 249 , // 0 - ih_250 = 250 , // 0 - ih_251 = 251 , // 0 - MAAQID = VI::intehead::MAX_AN_AQUIFERS, // 0 MAAQID = maximum number of analytic aquifers - ih_253 = 253 , // 0 - ih_254 = 254 , // 0 - ih_255 = 255 , // 0 - ih_256 = 256 , // 0 - ih_257 = 257 , // 0 - ih_258 = 258 , // 0 - ih_259 = 259 , // 0 - ih_260 = 260 , // 0 - ih_261 = 261 , // 0 - NOFUDQS = VI::intehead::NO_FIELD_UDQS, // 0 - NOGUDQS = VI::intehead::NO_GROUP_UDQS, // 0 - ih_264 = 264 , // 0 - ih_265 = 265 , // 0 - NOWUDQS = VI::intehead::NO_WELL_UDQS, // 0 - UDQPAR_1 = VI::intehead::UDQPAR_1, // 0 - ih_268 = 268 , // 0 - ih_269 = 269 , // 0 - ih_270 = 270 , // 0 - NCRDMX = 271 , // 0 NCRDMX = maximum number of chord segment links per well - ih_272 = 272 , // 0 - ih_273 = 273 , // 0 - ih_274 = 274 , // 0 - ih_275 = 275 , // 0 - ih_276 = 276 , // 0 - ih_277 = 277 , // 0 - ih_278 = 278 , // 0 - ih_279 = 279 , // 0 - ih_280 = 280 , // 0 - ih_281 = 281 , // 0 - ih_282 = 282 , // 0 - ih_283 = 283 , // 0 - ih_284 = 284 , // 0 - ih_285 = 285 , // 0 - ih_286 = 286 , // 0 - ih_287 = 287 , // 0 - ih_288 = 288 , // 0 - ih_289 = 289 , // 0 - NOIUADS = VI::intehead::NO_IUADS, // 0 - NOIUAPS = VI::intehead::NO_IUAPS, // 0 - ih_292 = 292 , // 0 - ih_293 = 293 , // 0 - ih_294 = 294 , // 0 - ih_295 = 295 , // 0 - R_SEED = VI::intehead::RSEED, // 0 - ih_297 = 297 , // 0 - ih_298 = 298 , // 0 - ih_299 = 299 , // 0 - ih_300 = 300 , // 0 - ih_301 = 301 , // 0 - ih_302 = 302 , // 0 - ih_303 = 303 , // 0 - ih_304 = 304 , // 0 - ih_305 = 305 , // 0 - ih_306 = 306 , // 0 - ih_307 = 307 , // 0 - ih_308 = 308 , // 0 - ih_309 = 309 , // 0 - ih_310 = 310 , // 0 - ih_311 = 311 , // 0 - ih_312 = 312 , // 0 - ih_313 = 313 , // 0 - ih_314 = 314 , // 0 - ih_315 = 315 , // 0 - ih_316 = 316 , // 0 - ih_317 = 317 , // 0 - ih_318 = 318 , // 0 - ih_319 = 319 , // 0 - ih_320 = 320 , // 0 - ih_321 = 321 , // 0 - ih_322 = 322 , // 0 - ih_323 = 323 , // 0 - ih_324 = 324 , // 0 - ih_325 = 325 , // 0 - ih_326 = 326 , // 0 - ih_327 = 327 , // 0 - ih_328 = 328 , // 0 - ih_329 = 329 , // 0 - ih_330 = 330 , // 0 - ih_331 = 331 , // 0 - ih_332 = 332 , // 0 - ih_333 = 333 , // 0 - ih_334 = 334 , // 0 - ih_335 = 335 , // 0 - ih_336 = 336 , // 0 - ih_337 = 337 , // 0 - ih_338 = 338 , // 0 - ih_339 = 339 , // 0 - ih_340 = 340 , // 0 - ih_341 = 341 , // 0 - ih_342 = 342 , // 0 - ih_343 = 343 , // 0 - ih_344 = 344 , // 0 - ih_345 = 345 , // 0 - ih_346 = 346 , // 0 - ih_347 = 347 , // 0 - ih_348 = 348 , // 0 - ih_349 = 349 , // 0 - ih_350 = 350 , // 0 - ih_351 = 351 , // 0 - ih_352 = 352 , // 0 - ih_353 = 353 , // 0 - ih_354 = 354 , // 0 - ih_355 = 355 , // 0 - ih_356 = 356 , // 0 - ih_357 = 357 , // 0 - ih_358 = 358 , // 0 - ih_359 = 359 , // 0 - ih_360 = 360 , // 0 - ih_361 = 361 , // 0 - ih_362 = 362 , // 0 - ih_363 = 363 , // 0 - ih_364 = 364 , // 0 - ih_365 = 365 , // 0 - ih_366 = 366 , // 0 - ih_367 = 367 , // 0 - ih_368 = 368 , // 0 - ih_369 = 369 , // 0 - ih_370 = 370 , // 0 - ih_371 = 371 , // 0 - ih_372 = 372 , // 0 - ih_373 = 373 , // 0 - ih_374 = 374 , // 0 - ih_375 = 375 , // 0 - ih_376 = 376 , // 0 - ih_377 = 377 , // 0 - ih_378 = 378 , // 0 - ih_379 = 379 , // 0 - ih_380 = 380 , // 0 - ih_381 = 381 , // 0 - ih_382 = 382 , // 0 - ih_383 = 383 , // 0 - ih_384 = 384 , // 0 - ih_385 = 385 , // 0 - ih_386 = 386 , // 0 - ih_387 = 387 , // 0 - ih_388 = 388 , // 0 - ih_389 = 389 , // 0 - ih_390 = 390 , // 0 - ih_391 = 391 , // 0 - ih_392 = 392 , // 0 - ih_393 = 393 , // 0 - ih_394 = 394 , // 0 - ih_395 = 395 , // 0 - ih_396 = 396 , // 0 - ih_397 = 397 , // 0 - ih_398 = 398 , // 0 - ih_399 = 399 , // 0 - ih_400 = 400 , // 0 - ih_401 = 401 , // 0 - ih_402 = 402 , // 0 - ih_403 = 403 , // 0 - ih_404 = 404 , // 0 - ih_405 = 405 , // 0 - ih_406 = 406 , // 0 - ih_407 = 407 , // 0 - ih_408 = 408 , // 0 - ih_409 = 409 , // 0 - ISECND = VI::intehead::ISECND, - // --------------------------------------------------------------------- - // --------------------------------------------------------------------- - - INTEHEAD_NUMBER_OF_ITEMS // MUST be last element of enum. -}; - -// ===================================================================== -// Public Interface Below Separator -// ===================================================================== - -Opm::RestartIO::InteHEAD::InteHEAD() - : data_(INTEHEAD_NUMBER_OF_ITEMS, 0) -{} - -Opm::RestartIO::InteHEAD& -Opm::RestartIO::InteHEAD:: -dimensions(const int nx, const int ny, const int nz) -{ - this -> data_[NX] = nx; - this -> data_[NY] = ny; - this -> data_[NZ] = nz; - - return *this; -} - -Opm::RestartIO::InteHEAD& -Opm::RestartIO::InteHEAD:: -dimensions(const std::array& cartDims) -{ - return this->dimensions(cartDims[0], cartDims[1], cartDims[2]); -} - -Opm::RestartIO::InteHEAD& -Opm::RestartIO::InteHEAD::numActive(const int nactive) -{ - this->data_[NACTIV] = nactive; - - return *this; -} - -Opm::RestartIO::InteHEAD& -Opm::RestartIO::InteHEAD::unitConventions(const UnitSystem& usys) -{ - this->data_[UNIT] = usys.ecl_id(); - return *this; -} - -Opm::RestartIO::InteHEAD& -Opm::RestartIO::InteHEAD::wellTableDimensions(const WellTableDim& wtdim) -{ - this->data_[NWELLS] = wtdim.numWells; - this->data_[NCWMAX] = wtdim.maxPerf; - - this->data_[NWGMAX] = std::max(wtdim.maxWellInGroup, - wtdim.maxGroupInField); - - this->data_[NGMAXZ] = wtdim.maxGroupInField + 1; - - this->data_[NWMAXZ] = wtdim.maxWellsInField; - - return *this; -} - -Opm::RestartIO::InteHEAD& -Opm::RestartIO::InteHEAD::calendarDate(const TimePoint& timePoint) -{ - this->data_[DAY] = timePoint.day; - this->data_[MONTH] = timePoint.month; - this->data_[YEAR] = timePoint.year; - - this->data_[IHOURZ] = timePoint.hour; - this->data_[IMINTS] = timePoint.minute; - - // Microseonds... - this->data_[ISECND] = - ((timePoint.second * 1000) * 1000) + timePoint.microseconds; - - return *this; -} - -Opm::RestartIO::InteHEAD& -Opm::RestartIO::InteHEAD::activePhases(const Phases& phases) -{ - const auto iphs = - (static_cast (phases.oil) << 0u) - | (static_cast(phases.water) << 1u) - | (static_cast(phases.gas) << 2u); - - this->data_[PHASE] = static_cast(iphs); - - return *this; -} - -Opm::RestartIO::InteHEAD& -Opm::RestartIO::InteHEAD:: -params_NWELZ(const int niwelz, const int nswelz, const int nxwelz, const int nzwelz) -{ - this -> data_[NIWELZ] = niwelz; - this -> data_[NSWELZ] = nswelz; - this -> data_[NXWELZ] = nxwelz; - this -> data_[NZWELZ] = nzwelz; - - return *this; -} - -Opm::RestartIO::InteHEAD& -Opm::RestartIO::InteHEAD:: -params_NCON(const int niconz, const int nsconz, const int nxconz) -{ - this -> data_[NICONZ] = niconz; - this -> data_[NSCONZ] = nsconz; - this -> data_[NXCONZ] = nxconz; - - return *this; -} - -Opm::RestartIO::InteHEAD& -Opm::RestartIO::InteHEAD:: -params_GRPZ(const std::array& grpz) -{ - this -> data_[NIGRPZ] = grpz[0]; - this -> data_[NSGRPZ] = grpz[1]; - this -> data_[NXGRPZ] = grpz[2]; - this -> data_[NZGRPZ] = grpz[3]; - - return *this; -} - -Opm::RestartIO::InteHEAD& -Opm::RestartIO::InteHEAD:: -params_NGCTRL(const int gct) -{ - this -> data_[NGCONT] = gct; - - return *this; -} - -Opm::RestartIO::InteHEAD& -Opm::RestartIO::InteHEAD:: -params_NAAQZ(const int ncamax, - const int niaaqz, - const int nsaaqz, - const int nxaaqz, - const int nicaqz, - const int nscaqz, - const int nacaqz) -{ - this -> data_[NCAMAX] = ncamax; - this -> data_[NIAAQZ] = niaaqz; - this -> data_[NSAAQZ] = nsaaqz; - this -> data_[NXAAQZ] = nxaaqz; - this -> data_[NICAQZ] = nicaqz; - this -> data_[NSCAQZ] = nscaqz; - this -> data_[NACAQZ] = nacaqz; - - return *this; -} - -Opm::RestartIO::InteHEAD& -Opm::RestartIO::InteHEAD:: -stepParam(const int num_solver_steps, const int report_step) -{ - this -> data_[NUM_SOLVER_STEPS] = num_solver_steps; - this -> data_[REPORT_STEP] = report_step; - - return *this; -} - -Opm::RestartIO::InteHEAD& -Opm::RestartIO::InteHEAD::tuningParam(const TuningPar& tunpar) -{ - this->data_[NEWTMX] = tunpar.newtmx; - this->data_[NEWTMN] = tunpar.newtmn; - this->data_[LITMAX] = tunpar.litmax; - this->data_[LITMIN] = tunpar.litmin; - this->data_[MXWSIT] = tunpar.mxwsit; - this->data_[MXWPIT] = tunpar.mxwpit; - - return *this; -} - -Opm::RestartIO::InteHEAD& -Opm::RestartIO::InteHEAD::variousParam(const int version, - const int iprog) -{ - this->data_[VERSION] = version; - this->data_[IPROG] = iprog; - - // ih_049: Usage unknown, value fixed across reference cases - this->data_[ih_049] = 1; - - // ih_050: Usage unknown, value fixed across reference cases - this->data_[ih_050] = 1; - - // ih_076: Usage unknown, experiments fails (zero determinant - // in well message) with too low numbers. - // 5 is highest observed across reference cases. - this->data_[ih_076] = 5; - - // ih_101: Usage unknown, value fixed across reference cases. - this->data_[ih_101] = 1; - - // ih_103: Usage unknown, value not fixed across reference cases, - // experiments generate warning with 0 but not with 1. - this->data_[ih_103] = 1; - - // ih_200: Usage unknown, value fixed across reference cases. - this->data_[ih_200] = 1; - - return *this; -} - -Opm::RestartIO::InteHEAD& -Opm::RestartIO::InteHEAD::wellSegDimensions(const WellSegDims& wsdim) -{ - this->data_[NSEGWL] = wsdim.nsegwl; - this->data_[NSWLMX] = wsdim.nswlmx; - this->data_[NSEGMX] = wsdim.nsegmx; - this->data_[NLBRMX] = wsdim.nlbrmx; - this->data_[NISEGZ] = wsdim.nisegz; - this->data_[NRSEGZ] = wsdim.nrsegz; - this->data_[NILBRZ] = wsdim.nilbrz; - - return *this; -} - -Opm::RestartIO::InteHEAD& -Opm::RestartIO::InteHEAD::regionDimensions(const RegDims& rdim) -{ - this->data_[NTFIP] = rdim.ntfip; - this->data_[NMFIPR] = rdim.nmfipr; - - return *this; -} - -Opm::RestartIO::InteHEAD& -Opm::RestartIO::InteHEAD:: -ngroups(const Group& gr) -{ - this -> data_[NGRP] = gr.ngroups; - - return *this; -} - -Opm::RestartIO::InteHEAD& -Opm::RestartIO::InteHEAD:: -udqParam_1(const UdqParam& udq_par) -{ - this -> data_[UDQPAR_1] = - udq_par.udqParam_1; - this -> data_[R_SEED] = - udq_par.udqParam_1; - this -> data_[NOWUDQS] = udq_par.no_wudqs; - this -> data_[NOGUDQS] = udq_par.no_gudqs; - this -> data_[NOFUDQS] = udq_par.no_fudqs; - this -> data_[NOIUADS] = udq_par.no_iuads; - this -> data_[NOIUAPS] = udq_par.no_iuaps; - - return *this; -} - -Opm::RestartIO::InteHEAD& -Opm::RestartIO::InteHEAD:: -actionParam(const ActionParam& act_par) -{ - this -> data_[NO_ACT] = act_par.no_actions; - this -> data_[MAX_LINES] = act_par.max_no_sched_lines_per_action; - this -> data_[MXACTC] = act_par.max_no_conditions_per_action; - this -> data_[MAXSPRLINE] = ((act_par.max_no_characters_per_line % 8) == 0) ? act_par.max_no_characters_per_line / 8 : - (act_par.max_no_characters_per_line / 8) + 1; - - return *this; -} - - -//InteHEAD parameters which meaning are currently not known, but which are needed for Eclipse restart runs with UDQ and ACTIONX data -Opm::RestartIO::InteHEAD& -Opm::RestartIO::InteHEAD:: -variousUDQ_ACTIONXParam() -{ - this -> data_[159] = 4; - this -> data_[160] = 5; - this -> data_[161] = 9; - this -> data_[246] = 26; - this -> data_[247] = 16; - this -> data_[248] = 13; - - return *this; -} - -Opm::RestartIO::InteHEAD& -Opm::RestartIO::InteHEAD:: -nominatedPhaseGuideRate(GuideRateNominatedPhase nphase) -{ - this -> data_[NGRNPHASE] = nphase.nominated_phase; - - return *this; -} - -Opm::RestartIO::InteHEAD& -Opm::RestartIO::InteHEAD:: -whistControlMode(int mode) -{ - this -> data_[NWHISTCTL] = mode; - - return *this; -} - -// ===================================================================== -// Free functions (calendar/time utilities) -// ===================================================================== - -namespace { - std::time_t advance(const std::time_t tp, const double sec) - { - using namespace std::chrono; - - using TP = time_point; - using DoubSec = duration; - - const auto t = system_clock::from_time_t(tp) + - duration_cast(DoubSec(sec)); - - return system_clock::to_time_t(t); - } -} - -std::time_t -Opm::RestartIO::makeUTCTime(const std::tm& timePoint) -{ - auto tp = timePoint; // Mutable copy. - const auto ltime = std::mktime(&tp); - auto tmval = *std::gmtime(<ime); // Mutable. - - // offset = ltime - tmval - // == #seconds by which 'ltime' is AHEAD of tmval. - const auto offset = - std::difftime(ltime, std::mktime(&tmval)); - - // Advance 'ltime' by 'offset' so that std::gmtime(return value) will - // have the same broken-down elements as 'tp'. - return advance(ltime, offset); -} - -Opm::RestartIO::InteHEAD::TimePoint -Opm::RestartIO::getSimulationTimePoint(const std::time_t start, - const double elapsed) -{ - const auto now = advance(start, elapsed); - const auto tp = *std::gmtime(&now); - - auto sec = 0.0; // Not really used here. - auto usec = std::floor(1.0e6 * std::modf(elapsed, &sec)); - - return { - // Y-m-d - tp.tm_year + 1900, - tp.tm_mon + 1, - tp.tm_mday , - - // H:M:S - tp.tm_hour , - tp.tm_min , - std::min(tp.tm_sec, 59), // Ignore leap seconds - - // Fractional seconds in microsecond resolution. - static_cast(usec), - }; -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/LinearisedOutputTable.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/LinearisedOutputTable.cpp deleted file mode 100644 index 3ddb7365bd..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/LinearisedOutputTable.cpp +++ /dev/null @@ -1,134 +0,0 @@ -/* - Copyright 2019 Equinor. - Copyright 2017 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include - -#include -#include -#include -#include - -Opm::LinearisedOutputTable:: -LinearisedOutputTable(const std::size_t numTables0, - const std::size_t numPrimary0, - const std::size_t numRows0, - const std::size_t numCols0) - : LinearisedOutputTable(numTables0, numPrimary0, - numRows0, numCols0, 1.0e20) -{} - -Opm::LinearisedOutputTable:: -LinearisedOutputTable(const std::size_t numTables0, - const std::size_t numPrimary0, - const std::size_t numRows0, - const std::size_t numCols0, - const double fillValue) - : data (numTables0 * numPrimary0 * numRows0 * numCols0, fillValue) - , numTables (numTables0) - , numPrimary(numPrimary0) - , numRows (numRows0) -{} - -std::vector::iterator -Opm::LinearisedOutputTable::column(const std::size_t tableID, - const std::size_t primID, - const std::size_t colID) -{ - // Table format: numRows * numPrimary * numTables values for first - // column (ID == 0), followed by same number of entries for second - // column &c. - const auto offset = - 0 + this->numRows*(primID + this->numPrimary*(tableID + this->numTables*colID)); - - assert (offset + this->numRows <= this->data.size()); - - return this->data.begin() + offset; -} - -const std::vector& -Opm::LinearisedOutputTable::getData() const -{ - return this->data; -} - -std::vector -Opm::LinearisedOutputTable::getDataDestructively() -{ - return std::move(this->data); -} - -// --------------------------------------------------------------------- - -void -Opm::DifferentiateOutputTable::calcSlopes(const std::size_t nDep, - const Descriptor& desc, - LinearisedOutputTable& table) -{ - if ((nDep == 0) || (desc.numActRows < 2)) { - // No dependent columns or too few rows to compute any derivatives. - // Likely to be user error. Can't do anything here. - return; - } - - auto x = table.column(desc.tableID, desc.primID, 0); - - using colIT = decltype(x); - - auto y = std::vector{}; y .reserve(nDep); - auto dy = std::vector{}; dy.reserve(nDep); - auto y0 = std::vector(nDep); - auto y1 = y0; - for (auto j = 0*nDep; j < nDep; ++j) { - y .push_back(table.column(desc.tableID, desc.primID, j + 1 + 0*nDep)); - dy.push_back(table.column(desc.tableID, desc.primID, j + 1 + 1*nDep)); - - y1[j] = *y.back(); ++y.back(); - - // Store derivatives at right interval end-point. - ++dy.back(); - } - - using std::swap; - - auto x1 = *x; ++x; auto x0 = 0 * x1; - - // Recall: Number of slope intervals one less than number of active - // table rows. - for (auto n = desc.numActRows - 1, i = 0*n; i < n; ++i) { - // Save previous right-hand point as this left-hand point, clear - // space for new right-hand point. - swap(x0, x1); x1 = *x; ++x; - swap(y0, y1); - - const auto dx = x1 - x0; - - for (auto j = 0*nDep; j < nDep; ++j) { - y1[j] = *y[j]; - - const auto delta = y1[j] - y0[j]; - - // Choice for dx==0 somewhat debatable. - *dy[j] = (std::abs(dx) > 0.0) ? (delta / dx) : 0.0; - - // Advance column iterators; - ++y[j]; ++dy[j]; - } - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/LoadRestart.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/LoadRestart.cpp deleted file mode 100644 index ac914ef4fd..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/LoadRestart.cpp +++ /dev/null @@ -1,1477 +0,0 @@ -/* - Copyright (c) 2018-2019 Equinor ASA - Copyright (c) 2016 Statoil ASA - Copyright (c) 2013-2015 Andreas Lauser - Copyright (c) 2013 SINTEF ICT, Applied Mathematics. - Copyright (c) 2013 Uni Research AS - Copyright (c) 2015 IRIS AS - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include - -#include -#include - -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -namespace VI = ::Opm::RestartIO::Helpers::VectorItems; - -namespace { - template - struct ArrayType; - - template<> - struct ArrayType - { - static Opm::EclIO::eclArrType T; - }; - - template<> - struct ArrayType - { - static Opm::EclIO::eclArrType T; - }; - - template<> - struct ArrayType - { - static Opm::EclIO::eclArrType T; - }; - - Opm::EclIO::eclArrType ArrayType::T = ::Opm::EclIO::eclArrType::INTE; - Opm::EclIO::eclArrType ArrayType::T = ::Opm::EclIO::eclArrType::REAL; - Opm::EclIO::eclArrType ArrayType::T = ::Opm::EclIO::eclArrType::DOUB; -} - -class RestartFileView -{ -public: - explicit RestartFileView(const std::string& filename, - const int report_step); - - ~RestartFileView() = default; - - RestartFileView(const RestartFileView& rhs) = delete; - RestartFileView(RestartFileView&& rhs); - - RestartFileView& operator=(const RestartFileView& rhs) = delete; - RestartFileView& operator=(RestartFileView&& rhs); - - std::size_t simStep() const - { - return this->sim_step_; - } - - int reportStep() const - { - return this->report_step_; - } - - template - bool hasKeyword(const std::string& vector) const - { - if (this->rst_file_ == nullptr) { return false; } - - return this->vectors_ - .at(ArrayType::T).count(vector) > 0; - } - - template - const std::vector& - getKeyword(const std::string& vector) - { - return this->rst_file_->getRst(vector, this->report_step_, 0); - } - - const std::vector& intehead() - { - const auto& ihkw = std::string { "INTEHEAD" }; - - if (! this->hasKeyword(ihkw)) { - throw std::domain_error { - "Purported Restart File Does not Have Integer Header" - }; - } - - return this->getKeyword(ihkw); - } - -private: - using RstFile = std::unique_ptr; - - using VectorColl = std::unordered_set; - using TypedColl = std::unordered_map< - Opm::EclIO::eclArrType, VectorColl, std::hash - >; - - RstFile rst_file_; - int report_step_; - std::size_t sim_step_; - TypedColl vectors_; -}; - -RestartFileView::RestartFileView(const std::string& filename, - const int report_step) - : rst_file_ { new Opm::EclIO::ERst{filename} } - , report_step_(report_step) - , sim_step_ (std::max(report_step - 1, 0)) -{ - if (! rst_file_->hasReportStepNumber(this->report_step_)) { - rst_file_.reset(); - return; - } - - this->rst_file_->loadReportStepNumber(this->report_step_); - - for (const auto& vector : this->rst_file_->listOfRstArrays(this->report_step_)) { - const auto& type = std::get<1>(vector); - - switch (type) { - case ::Opm::EclIO::eclArrType::CHAR: - case ::Opm::EclIO::eclArrType::LOGI: - case ::Opm::EclIO::eclArrType::MESS: - // Currently ignored - continue; - - default: - this->vectors_[type].emplace(std::get<0>(vector)); - break; - } - } -} - -RestartFileView::RestartFileView(RestartFileView&& rhs) - : rst_file_ (std::move(rhs.rst_file_)) - , report_step_(rhs.report_step_) - , sim_step_ (rhs.sim_step_) // Scalar (size_t) - , vectors_ (std::move(rhs.vectors_)) -{} - -RestartFileView& RestartFileView::operator=(RestartFileView&& rhs) -{ - this->rst_file_ = std::move(rhs.rst_file_); - this->report_step_ = rhs.report_step_; // Scalar (int) - this->sim_step_ = rhs.sim_step_; // Scalar (size_t) - this->vectors_ = std::move(rhs.vectors_); - - return *this; -} - -// --------------------------------------------------------------------- - -namespace { - template - boost::iterator_range::const_iterator> - getDataWindow(const std::vector& arr, - const std::size_t windowSize, - const std::size_t entity, - const std::size_t subEntity = 0, - const std::size_t maxSubEntitiesPerEntity = 1) - { - const auto off = - windowSize * (subEntity + maxSubEntitiesPerEntity*entity); - - auto begin = arr.begin() + off; - auto end = begin + windowSize; - - return { begin, end }; - } -} - -// --------------------------------------------------------------------- - -class WellVectors -{ -public: - template - using Window = boost::iterator_range< - typename std::vector::const_iterator - >; - - explicit WellVectors(const std::vector& intehead, - std::shared_ptr rst_view); - - bool hasDefinedWellValues() const; - bool hasDefinedConnectionValues() const; - - Window iwel(const std::size_t wellID) const; - Window xwel(const std::size_t wellID) const; - - Window - icon(const std::size_t wellID, const std::size_t connID) const; - - Window - xcon(const std::size_t wellID, const std::size_t connID) const; - -private: - std::size_t maxConnPerWell_; - std::size_t numIWelElem_; - std::size_t numXWelElem_; - std::size_t numIConElem_; - std::size_t numXConElem_; - - std::shared_ptr rstView_; -}; - -WellVectors::WellVectors(const std::vector& intehead, - std::shared_ptr rst_view) - : maxConnPerWell_(intehead[VI::intehead::NCWMAX]) - , numIWelElem_ (intehead[VI::intehead::NIWELZ]) - , numXWelElem_ (intehead[VI::intehead::NXWELZ]) - , numIConElem_ (intehead[VI::intehead::NICONZ]) - , numXConElem_ (intehead[VI::intehead::NXCONZ]) - , rstView_ (std::move(rst_view)) -{} - -bool WellVectors::hasDefinedWellValues() const -{ - return this->rstView_->hasKeyword ("IWEL") - && this->rstView_->hasKeyword("XWEL"); -} - -bool WellVectors::hasDefinedConnectionValues() const -{ - return this->rstView_->hasKeyword ("ICON") - && this->rstView_->hasKeyword("XCON"); -} - -WellVectors::Window -WellVectors::iwel(const std::size_t wellID) const -{ - if (! this->hasDefinedWellValues()) { - throw std::logic_error { - "Cannot Request IWEL Values Unless Defined" - }; - } - - return getDataWindow(this->rstView_->getKeyword("IWEL"), - this->numIWelElem_, wellID); -} - -WellVectors::Window -WellVectors::xwel(const std::size_t wellID) const -{ - if (! this->hasDefinedWellValues()) { - throw std::logic_error { - "Cannot Request XWEL Values Unless Defined" - }; - } - - return getDataWindow(this->rstView_->getKeyword("XWEL"), - this->numXWelElem_, wellID); -} - -WellVectors::Window -WellVectors::icon(const std::size_t wellID, const std::size_t connID) const -{ - if (! this->hasDefinedConnectionValues()) { - throw std::logic_error { - "Cannot Request ICON Values Unless Defined" - }; - } - - return getDataWindow(this->rstView_->getKeyword("ICON"), - this->numIConElem_, wellID, connID, - this->maxConnPerWell_); -} - -WellVectors::Window -WellVectors::xcon(const std::size_t wellID, const std::size_t connID) const -{ - if (! this->hasDefinedConnectionValues()) { - throw std::logic_error { - "Cannot Request XCON Values Unless Defined" - }; - } - - return getDataWindow(this->rstView_->getKeyword("XCON"), - this->numXConElem_, wellID, connID, - this->maxConnPerWell_); -} - -// --------------------------------------------------------------------- - -class GroupVectors -{ -public: - template - using Window = boost::iterator_range< - typename std::vector::const_iterator - >; - - explicit GroupVectors(const std::vector& intehead, - std::shared_ptr rst_view); - - bool hasDefinedValues() const; - - std::size_t maxGroups() const; - - Window igrp(const std::size_t groupID) const; - Window xgrp(const std::size_t groupID) const; - -private: - std::size_t maxNumGroups_; - std::size_t numIGrpElem_; - std::size_t numXGrpElem_; - - std::shared_ptr rstView_; -}; - -GroupVectors::GroupVectors(const std::vector& intehead, - std::shared_ptr rst_view) - : maxNumGroups_(intehead[VI::intehead::NGMAXZ] - 1) // -FIELD - , numIGrpElem_ (intehead[VI::intehead::NIGRPZ]) - , numXGrpElem_ (intehead[VI::intehead::NXGRPZ]) - , rstView_ (std::move(rst_view)) -{} - -bool GroupVectors::hasDefinedValues() const -{ - return this->rstView_->hasKeyword ("IGRP") - && this->rstView_->hasKeyword("XGRP"); -} - -std::size_t GroupVectors::maxGroups() const -{ - return this->maxNumGroups_; -} - -GroupVectors::Window -GroupVectors::igrp(const std::size_t groupID) const -{ - if (! this->hasDefinedValues()) { - throw std::logic_error { - "Cannot Request IGRP Values Unless Defined" - }; - } - - return getDataWindow(this->rstView_->getKeyword("IGRP"), - this->numIGrpElem_, groupID); -} - -GroupVectors::Window -GroupVectors::xgrp(const std::size_t groupID) const -{ - if (! this->hasDefinedValues()) { - throw std::logic_error { - "Cannot Request XGRP Values Unless Defined" - }; - } - - return getDataWindow(this->rstView_->getKeyword("XGRP"), - this->numXGrpElem_, groupID); -} - -// --------------------------------------------------------------------- - -class SegmentVectors -{ -public: - template - using Window = boost::iterator_range< - typename std::vector::const_iterator - >; - - explicit SegmentVectors(const std::vector& intehead, - std::shared_ptr rst_view); - - bool hasDefinedValues() const; - - Window - iseg(const std::size_t mswID, const std::size_t segID) const; - - Window - rseg(const std::size_t mswID, const std::size_t segID) const; - -private: - std::size_t maxSegPerWell_; - std::size_t numISegElm_; - std::size_t numRSegElm_; - - std::shared_ptr rstView_; -}; - -SegmentVectors::SegmentVectors(const std::vector& intehead, - std::shared_ptr rst_view) - : maxSegPerWell_(intehead[VI::intehead::NSEGMX]) - , numISegElm_ (intehead[VI::intehead::NISEGZ]) - , numRSegElm_ (intehead[VI::intehead::NRSEGZ]) - , rstView_ (std::move(rst_view)) -{} - -bool SegmentVectors::hasDefinedValues() const -{ - return this->rstView_->hasKeyword ("ISEG") - && this->rstView_->hasKeyword("RSEG"); -} - -SegmentVectors::Window -SegmentVectors::iseg(const std::size_t mswID, const std::size_t segID) const -{ - if (! this->hasDefinedValues()) { - throw std::logic_error { - "Cannot Request ISEG Values Unless Defined" - }; - } - - return getDataWindow(this->rstView_->getKeyword("ISEG"), - this->numISegElm_, mswID, segID, - this->maxSegPerWell_); -} - -SegmentVectors::Window -SegmentVectors::rseg(const std::size_t mswID, const std::size_t segID) const -{ - if (! this->hasDefinedValues()) { - throw std::logic_error { - "Cannot Request RSEG Values Unless Defined" - }; - } - - return getDataWindow(this->rstView_->getKeyword("RSEG"), - this->numRSegElm_, mswID, segID, - this->maxSegPerWell_); -} - -// --------------------------------------------------------------------- - -class AquiferVectors -{ -public: - template - using Window = boost::iterator_range< - typename std::vector::const_iterator - >; - - explicit AquiferVectors(const std::vector& intehead, - std::shared_ptr rst_view); - - bool hasDefinedValues() const; - - Window iaaq(const std::size_t aquiferID) const; - Window saaq(const std::size_t aquiferID) const; - Window xaaq(const std::size_t aquiferID) const; - -private: - std::size_t maxAnalyticAquifer_; - std::size_t numIntAnalyticAquiferElm_; - std::size_t numFloatAnalyticAquiferElm_; - std::size_t numDoubleAnalyticAquiferElm_; - - std::shared_ptr rstView_; -}; - -AquiferVectors::AquiferVectors(const std::vector& intehead, - std::shared_ptr rst_view) - : maxAnalyticAquifer_ (intehead[VI::intehead::MAX_AN_AQUIFERS]) - , numIntAnalyticAquiferElm_ (intehead[VI::intehead::NIAAQZ]) - , numFloatAnalyticAquiferElm_ (intehead[VI::intehead::NSAAQZ]) - , numDoubleAnalyticAquiferElm_(intehead[VI::intehead::NXAAQZ]) - , rstView_ (std::move(rst_view)) -{} - -bool AquiferVectors::hasDefinedValues() const -{ - return this->rstView_->hasKeyword ("IAAQ") - && this->rstView_->hasKeyword ("SAAQ") - && this->rstView_->hasKeyword("XAAQ"); -} - -AquiferVectors::Window -AquiferVectors::iaaq(const std::size_t aquiferID) const -{ - if (! this->hasDefinedValues()) { - throw std::logic_error { - "Cannot Request IAAQ Values Unless Defined" - }; - } - - return getDataWindow(this->rstView_->getKeyword("IAAQ"), - this->numIntAnalyticAquiferElm_, aquiferID); -} - -AquiferVectors::Window -AquiferVectors::saaq(const std::size_t aquiferID) const -{ - if (! this->hasDefinedValues()) { - throw std::logic_error { - "Cannot Request SAAQ Values Unless Defined" - }; - } - - return getDataWindow(this->rstView_->getKeyword("SAAQ"), - this->numFloatAnalyticAquiferElm_, aquiferID); -} - -AquiferVectors::Window -AquiferVectors::xaaq(const std::size_t aquiferID) const -{ - if (! this->hasDefinedValues()) { - throw std::logic_error { - "Cannot Request XAAQ Values Unless Defined" - }; - } - - return getDataWindow(this->rstView_->getKeyword("XAAQ"), - this->numDoubleAnalyticAquiferElm_, aquiferID); -} - -// --------------------------------------------------------------------- - -namespace { - void throwIfMissingRequired(const Opm::RestartKey& rst_key) - { - if (rst_key.required) { - throw std::runtime_error { - "Requisite restart vector '" - + rst_key.key + - "' is not available in restart file" - }; - } - } - - bool hasAnalyticAquifers(const RestartFileView& rst_view) - { - return rst_view.hasKeyword("XAAQ"); - } - - std::size_t numAnalyticAquifers(RestartFileView& rst_view) - { - return rst_view.intehead()[VI::intehead::MAX_AN_AQUIFERS]; - } - - std::vector - double_vector(const std::string& key, RestartFileView& rst_view) - { - if (rst_view.hasKeyword(key)) { - // Data exists as type DOUB. Return unchanged. - return rst_view.getKeyword(key); - } - else if (rst_view.hasKeyword(key)) { - // Data exists as type REAL. Convert to double. - const auto& data = rst_view.getKeyword(key); - - return { data.begin(), data.end() }; - } - - // Data unavailable. Return empty. - return {}; - } - - void insertSolutionVector(const std::vector& vector, - const Opm::RestartKey& value, - const std::vector::size_type numcells, - Opm::data::Solution& sol) - { - if (vector.size() != numcells) { - throw std::runtime_error { - "Restart file: Could not restore '" - + value.key - + "', mismatched number of cells" - }; - } - - sol.insert(value.key, value.dim, vector, - Opm::data::TargetType::RESTART_SOLUTION); - } - - void loadIfAvailable(const Opm::RestartKey& value, - const std::vector::size_type numcells, - RestartFileView& rst_view, - Opm::data::Solution& sol) - { - const auto& kwdata = double_vector(value.key, rst_view); - - if (kwdata.empty()) { - throwIfMissingRequired(value); - - // If we get here, the requested value was not available in the - // result set. However, the client does not actually require - // the value for restart purposes so we can safely skip this. - return; - } - - insertSolutionVector(kwdata, value, numcells, sol); - } - - void loadHysteresisIfAvailable(const std::string& primary, - const Opm::RestartKey& fallback_key, - const std::vector::size_type numcells, - RestartFileView& rst_view, - Opm::data::Solution& sol) - { - auto kwdata = double_vector(primary, rst_view); - - if (kwdata.empty()) { - // Primary key does not exist in rst_view. Attempt to load - // fallback keys directly. - - loadIfAvailable(fallback_key, numcells, rst_view, sol); - } - else { - // Primary exists in rst_view. Translate to Flow's hysteresis - // parameter. - auto smax = std::move(kwdata); - - std::transform(std::begin(smax), std::end(smax), std::begin(smax), - [](const double s) { return 1.0 - s; }); - - insertSolutionVector(smax, fallback_key, numcells, sol); - } - } - - bool isHysteresis(const std::string& vector) - { - for (const auto* flow_hyst_key : { "KRNSW_OW", "PCSWM_OW", - "KRNSW_GO", "PCSWM_GO", }) - { - if (vector == flow_hyst_key) { return true; } - } - - return false; - } - - void restoreHysteresisVector(const Opm::RestartKey& value, - const int numcells, - RestartFileView& rst_view, - Opm::data::Solution& sol) - { - const auto& key = value.key; - - if ((key == "KRNSW_OW") || (key == "PCSWM_OW")) - { - // Attempt to load from SOMAX, fall back to value.key if - // unavailable--typically in OPM Extended restart file. - loadHysteresisIfAvailable("SOMAX", value, numcells, - rst_view, sol); - } - else if ((key == "KRNSW_GO") || (key == "PCSWM_GO")) - { - // Attempt to load from SGMAX, fall back to value.key if - // unavailable--typically in OPM Extended restart file. - loadHysteresisIfAvailable("SGMAX", value, numcells, - rst_view, sol); - } - } - - std::vector - getOpmExtraFromDoubHEAD(const bool required, - const Opm::UnitSystem& usys, - RestartFileView& rst_view) - { - using M = Opm::UnitSystem::measure; - - const auto& doubhead = rst_view.getKeyword("DOUBHEAD"); - - const auto TsInit = doubhead[VI::doubhead::TsInit]; - - if (TsInit < 0.0) { - throwIfMissingRequired({ "OPMEXTRA", M::identity, required }); - } - - return { usys.to_si(M::time, TsInit) }; - } - - Opm::data::Solution - restoreSOLUTION(const std::vector& solution_keys, - const int numcells, - RestartFileView& rst_view) - { - Opm::data::Solution sol(/* init_si = */ false); - - for (const auto& value : solution_keys) { - if (isHysteresis(value.key)) { - // Special case handling of hysteresis data. Possibly needs - // translation from ECLIPSE-compatible set to Flow's known - // set of hysteresis vectors. - restoreHysteresisVector(value, numcells, rst_view, sol); - continue; - } - - // Load regular (non-hysteresis) vector if available. - loadIfAvailable(value, numcells, rst_view, sol); - } - - return sol; - } - - void restoreExtra(const std::vector& extra_keys, - const Opm::UnitSystem& usys, - RestartFileView& rst_view, - Opm::RestartValue& rst_value) - { - for (const auto& extra : extra_keys) { - const auto& vector = extra.key; - auto kwdata = double_vector(vector, rst_view); - - if (kwdata.empty()) { - // Requested vector not available in result set. Take - // appropriate action depending on specific vector and - // 'extra.required'. - - if (vector != "OPMEXTRA") { - throwIfMissingRequired(extra); - - // Requested vector not available, but caller does not - // actually require the vector for restart purposes. - // Skip this. - continue; - } - else { - // Special case handling of OPMEXTRA. Single item - // possibly stored in TSINIT item of DOUBHEAD. Try to - // recover this. Function throws if item is defaulted - // and caller requires that item be present through the - // 'extra.required' mechanism. - - kwdata = getOpmExtraFromDoubHEAD(extra.required, - usys, rst_view); - } - } - - rst_value.addExtra(vector, extra.dim, std::move(kwdata)); - } - - for (auto& extra_value : rst_value.extra) { - const auto& restart_key = extra_value.first; - auto& data = extra_value.second; - - usys.to_si(restart_key.dim, data); - } - } - - void checkWellVectorSizes(const std::vector& opm_iwel, - const std::vector& opm_xwel, - const std::vector& phases, - const std::vector& sched_wells) - { - const auto expected_xwel_size = - std::accumulate(sched_wells.begin(), sched_wells.end(), - std::size_t(0), - [&phases](const std::size_t acc, const Opm::Well& w) - -> std::size_t - { - return acc - + 3 + phases.size() - + (w.getConnections().size() - * (phases.size() + Opm::data::Connection::restart_size)); - }); - - if (opm_xwel.size() != expected_xwel_size) { - throw std::runtime_error { - "Mismatch between OPM_XWEL and deck; " - "OPM_XWEL size was " + std::to_string(opm_xwel.size()) + - ", expected " + std::to_string(expected_xwel_size) - }; - } - - if (opm_iwel.size() != sched_wells.size()) { - throw std::runtime_error { - "Mismatch between OPM_IWEL and deck; " - "OPM_IWEL size was " + std::to_string(opm_iwel.size()) + - ", expected " + std::to_string(sched_wells.size()) - }; - } - } - - Opm::data::Wells - restore_wells_opm(const ::Opm::EclipseState& es, - const ::Opm::EclipseGrid& grid, - const ::Opm::Schedule& schedule, - RestartFileView& rst_view) - { - if (! (rst_view.hasKeyword ("OPM_IWEL") && - rst_view.hasKeyword("OPM_XWEL"))) - { - return {}; - } - - const auto& opm_iwel = rst_view.getKeyword ("OPM_IWEL"); - const auto& opm_xwel = rst_view.getKeyword("OPM_XWEL"); - - using rt = Opm::data::Rates::opt; - - const auto& sched_wells = schedule.getWells(rst_view.simStep()); - std::vector phases; - { - const auto& phase = es.runspec().phases(); - - if (phase.active(Opm::Phase::WATER)) { phases.push_back(rt::wat); } - if (phase.active(Opm::Phase::OIL)) { phases.push_back(rt::oil); } - if (phase.active(Opm::Phase::GAS)) { phases.push_back(rt::gas); } - } - - checkWellVectorSizes(opm_iwel, opm_xwel, phases, sched_wells); - - Opm::data::Wells wells; - auto opm_xwel_data = opm_xwel.begin(); - auto opm_iwel_data = opm_iwel.begin(); - - for (const auto& sched_well : sched_wells) { - auto& well = wells[ sched_well.name() ]; - - well.bhp = *opm_xwel_data; ++opm_xwel_data; - well.thp = *opm_xwel_data; ++opm_xwel_data; - well.temperature = *opm_xwel_data; ++opm_xwel_data; - well.control = *opm_iwel_data; ++opm_iwel_data; - - for (const auto& phase : phases) { - well.rates.set(phase, *opm_xwel_data); - ++opm_xwel_data; - } - - for (const auto& sc : sched_well.getConnections()) { - const auto i = sc.getI(), j = sc.getJ(), k = sc.getK(); - - if (!grid.cellActive(i, j, k) || sc.state() == Opm::Connection::State::SHUT) { - opm_xwel_data += Opm::data::Connection::restart_size + phases.size(); - continue; - } - - well.connections.emplace_back(); - auto& connection = well.connections.back(); - - connection.index = grid.getGlobalIndex(i, j, k); - connection.pressure = *opm_xwel_data++; - connection.reservoir_rate = *opm_xwel_data++; - connection.cell_pressure = *opm_xwel_data++; - connection.cell_saturation_water = *opm_xwel_data++; - connection.cell_saturation_gas = *opm_xwel_data++; - connection.effective_Kh = *opm_xwel_data++; - - for (const auto& phase : phases) { - connection.rates.set(phase, *opm_xwel_data); - ++opm_xwel_data; - } - } - } - - return wells; - } - - void restoreConnRates(const WellVectors::Window& xcon, - const Opm::UnitSystem& usys, - const bool oil, - const bool gas, - const bool wat, - Opm::data::Connection& xc) - { - using M = ::Opm::UnitSystem::measure; - - if (wat) { - xc.rates.set(Opm::data::Rates::opt::wat, - - usys.to_si(M::liquid_surface_rate, - xcon[VI::XConn::index::WaterRate])); - } - - if (oil) { - xc.rates.set(Opm::data::Rates::opt::oil, - - usys.to_si(M::liquid_surface_rate, - xcon[VI::XConn::index::OilRate])); - } - - if (gas) { - xc.rates.set(Opm::data::Rates::opt::gas, - - usys.to_si(M::gas_surface_rate, - xcon[VI::XConn::index::GasRate])); - } - } - - void zeroConnRates(const bool oil, - const bool gas, - const bool wat, - Opm::data::Connection& xc) - { - if (wat) { xc.rates.set(Opm::data::Rates::opt::wat, 0.0); } - if (oil) { xc.rates.set(Opm::data::Rates::opt::oil, 0.0); } - if (gas) { xc.rates.set(Opm::data::Rates::opt::gas, 0.0); } - } - - void restoreConnResults(const Opm::Well& well, - const std::size_t wellID, - const Opm::EclipseGrid& grid, - const Opm::UnitSystem& usys, - const Opm::Phases& phases, - const WellVectors& wellData, - Opm::data::Well& xw) - { - using M = ::Opm::UnitSystem::measure; - using Ix = ::Opm::RestartIO::Helpers::VectorItems::XConn::index; - - const auto iwel = wellData.iwel(wellID); - const auto nConn = static_cast(iwel[VI::IWell::index::NConn]); - - const auto oil = phases.active(Opm::Phase::OIL); - const auto gas = phases.active(Opm::Phase::GAS); - const auto wat = phases.active(Opm::Phase::WATER); - - { - const auto& connections = well.getConnections(); - xw.connections.resize(connections.size(), Opm::data::Connection{}); - - auto simConnID = std::size_t{0}; - for (const auto& conn : connections) { - auto& xc = xw.connections[simConnID]; - zeroConnRates(oil, gas, wat, xc); - - xc.index = conn.global_index(); - ++simConnID; - } - } - - if (! wellData.hasDefinedConnectionValues()) { - // Result set does not provide certain pieces of information - // which are needed to reconstruct connection flow rates. - // Nothing to do except to return all zero rates. - return; - } - - for (auto rstConnID = 0*nConn; rstConnID < nConn; ++rstConnID) { - const auto icon = wellData.icon(wellID, rstConnID); - - const auto i = icon[VI::IConn::index::CellI] - 1; - const auto j = icon[VI::IConn::index::CellJ] - 1; - const auto k = icon[VI::IConn::index::CellK] - 1; - - auto* xc = xw.find_connection(grid.getGlobalIndex(i, j, k)); - if (xc == nullptr) { continue; } - - const auto xcon = wellData.xcon(wellID, rstConnID); - restoreConnRates(xcon, usys, oil, gas, wat, *xc); - - xc->pressure = usys.to_si(M::pressure, xcon[Ix::Pressure]); - } - } - - ::Opm::Well::ProducerCMode producerControlMode(const int curr) - { - using PMode = ::Opm::Well::ProducerCMode; - using Ctrl = VI::IWell::Value::WellCtrlMode; - - switch (curr) { - case Ctrl::OilRate: return PMode::ORAT; - case Ctrl::WatRate: return PMode::WRAT; - case Ctrl::GasRate: return PMode::GRAT; - case Ctrl::LiqRate: return PMode::LRAT; - case Ctrl::ResVRate: return PMode::RESV; - case Ctrl::THP: return PMode::THP; - case Ctrl::BHP: return PMode::BHP; - case Ctrl::CombRate: return PMode::CRAT; - case Ctrl::Group: return PMode::GRUP; - - default: - return PMode::CMODE_UNDEFINED; - } - } - - ::Opm::Well::InjectorCMode - injectorControlMode(const int curr, const int itype) - { - using IMode = ::Opm::Well::InjectorCMode; - using Ctrl = VI::IWell::Value::WellCtrlMode; - - switch (curr) { - case Ctrl::OilRate: - return Opm::WellType::oil_injector(itype) - ? IMode::RATE : IMode::CMODE_UNDEFINED; - - case Ctrl::WatRate: - return Opm::WellType::water_injector(itype) - ? IMode::RATE : IMode::CMODE_UNDEFINED; - - case Ctrl::GasRate: - return Opm::WellType::gas_injector(itype) - ? IMode::RATE : IMode::CMODE_UNDEFINED; - - case Ctrl::ResVRate: return IMode::RESV; - case Ctrl::THP: return IMode::THP; - case Ctrl::BHP: return IMode::BHP; - case Ctrl::Group: return IMode::GRUP; - } - - return IMode::CMODE_UNDEFINED; - } - - void restoreCurrentControl(const std::size_t wellID, - const WellVectors& wellData, - Opm::data::Well& xw) - { - const auto iwel = wellData.iwel(wellID); - const auto act = iwel[VI::IWell::index::ActWCtrl]; - const auto wtyp = iwel[VI::IWell::index::WType]; - - auto& curr = xw.current_control; - - curr.isProducer = Opm::WellType::producer(wtyp); - if (curr.isProducer) { - curr.prod = producerControlMode(act); - } - else { // Assume injector - curr.inj = injectorControlMode(act, wtyp); - } - } - - void restoreSegmentQuantities(const std::size_t mswID, - const Opm::WellSegments& segSet, - const Opm::UnitSystem& usys, - const Opm::Phases& phases, - const SegmentVectors& segData, - Opm::data::Well& xw) - { - // Note sign of flow rates. RSEG stores flow rates as positive from - // reservoir to well--i.e., towards the producer/platform. The Flow - // simulator uses the opposite sign convention. - - using M = ::Opm::UnitSystem::measure; - - const auto oil = phases.active(Opm::Phase::OIL); - const auto gas = phases.active(Opm::Phase::GAS); - const auto wat = phases.active(Opm::Phase::WATER); - - const auto numSeg = static_cast(segSet.size()); - - // Renormalisation constant for gas okay in non-field unit systems. - // A bit more questionable for field units. - const auto watRenormalisation = 10.0; - const auto gasRenormalisation = 1000.0; - - for (auto segID = 0*numSeg; segID < numSeg; ++segID) { - const auto segNumber = segSet[segID].segmentNumber(); // One-based - const auto rseg = segData.rseg(mswID, segNumber - 1); - - auto& segment = xw.segments[segNumber]; - - segment.segNumber = segNumber; - segment.pressures[Opm::data::SegmentPressures::Value::Pressure] = - usys.to_si(M::pressure, rseg[VI::RSeg::index::Pressure]); - - const auto totFlow = rseg[VI::RSeg::index::TotFlowRate]; - const auto watFraction = rseg[VI::RSeg::index::WatFlowFract]; - const auto gasFraction = rseg[VI::RSeg::index::GasFlowFract]; - - if (wat) { - const auto qW = totFlow * watFraction * watRenormalisation; - segment.rates.set(Opm::data::Rates::opt::wat, - - usys.to_si(M::liquid_surface_rate, qW)); - } - - if (oil) { - const auto qO = totFlow * (1.0 - (watFraction + gasFraction)); - segment.rates.set(Opm::data::Rates::opt::oil, - - usys.to_si(M::liquid_surface_rate, qO)); - } - - if (gas) { - const auto qG = totFlow * gasFraction * gasRenormalisation; - segment.rates.set(Opm::data::Rates::opt::gas, - - usys.to_si(M::gas_surface_rate, qG)); - } - } - } - - Opm::data::Well - restore_well(const Opm::Well& well, - const std::size_t wellID, - const Opm::EclipseGrid& grid, - const Opm::UnitSystem& usys, - const Opm::Phases& phases, - const WellVectors& wellData, - const SegmentVectors& segData) - { - if (! wellData.hasDefinedWellValues()) { - // Result set does not provide well information. - // No wells? In any case, nothing to do here. - return {}; - } - - using M = ::Opm::UnitSystem::measure; - - const auto xwel = wellData.xwel(wellID); - - const auto oil = phases.active(Opm::Phase::OIL); - const auto gas = phases.active(Opm::Phase::GAS); - const auto wat = phases.active(Opm::Phase::WATER); - - auto xw = ::Opm::data::Well{}; - - // 1) Restore well rates (xw.rates) - if (wat) { - xw.rates.set(Opm::data::Rates::opt::wat, - - usys.to_si(M::liquid_surface_rate, - xwel[VI::XWell::index::WatPrRate])); - } - - if (oil) { - xw.rates.set(Opm::data::Rates::opt::oil, - - usys.to_si(M::liquid_surface_rate, - xwel[VI::XWell::index::OilPrRate])); - } - - if (gas) { - xw.rates.set(Opm::data::Rates::opt::gas, - - usys.to_si(M::gas_surface_rate, - xwel[VI::XWell::index::GasPrRate])); - } - - // 2) Restore other well quantities (really only xw.bhp) - xw.bhp = usys.to_si(M::pressure, xwel[VI::XWell::index::FlowBHP]); - xw.thp = xw.temperature = 0.0; - - // 3) Restore connection flow rates (xw.connections[i].rates) - // and pressure values (xw.connections[i].pressure). - restoreConnResults(well, wellID, grid, usys, phases, wellData, xw); - - // 4) Restore well's active/current control - restoreCurrentControl(wellID, wellData, xw); - - // 5) Restore segment quantities if applicable. - if (well.isMultiSegment() && segData.hasDefinedValues()) - { - const auto iwel = wellData.iwel(wellID); - const auto mswID = iwel[VI::IWell::index::MsWID]; // One-based - const auto numSeg = iwel[VI::IWell::index::NWseg]; - - const auto& segSet = well.getSegments(); - - if ((mswID > 0) && (numSeg > 0) && - (static_cast(segSet.size()) == numSeg)) - { - restoreSegmentQuantities(mswID - 1, segSet, usys, - phases, segData, xw); - } - } - - return xw; - } - - Opm::data::Wells - restore_wells_ecl(const ::Opm::EclipseState& es, - const ::Opm::EclipseGrid& grid, - const ::Opm::Schedule& schedule, - std::shared_ptr rst_view) - { - auto soln = ::Opm::data::Wells{}; - - const auto& intehead = rst_view->intehead();; - - const auto wellData = WellVectors { intehead, rst_view }; - const auto segData = SegmentVectors{ intehead, rst_view }; - - const auto& units = es.getUnits(); - const auto& phases = es.runspec().phases(); - - const auto& wells = schedule.getWells(rst_view->simStep()); - for (auto nWells = wells.size(), wellID = 0*nWells; - wellID < nWells; ++wellID) - { - const auto& well = wells[wellID]; - - soln[well.name()] = - restore_well(well, wellID, grid, units, - phases, wellData, segData); - } - - return soln; - } - - Opm::data::AquiferType - determineAquiferType(const AquiferVectors::Window& iaaq) - { - const auto t1 = iaaq[VI::IAnalyticAquifer::TypeRelated1]; - const auto t2 = iaaq[VI::IAnalyticAquifer::TypeRelated2]; - - if ((t1 == 1) && (t2 == 1)) { - return Opm::data::AquiferType::CarterTracey; - } - - if ((t1 == 0) && (t2 == 0)) { - return Opm::data::AquiferType::Fetkovich; - } - - throw std::runtime_error { - "Unknown Aquifer Type:" - " T1 = " + std::to_string(t1) - + ", T2 = " + std::to_string(t2) - }; - } - - std::shared_ptr - extractFetkcovichData(const Opm::UnitSystem& usys, - const AquiferVectors::Window& saaq) - { - using M = ::Opm::UnitSystem::measure; - - auto data = std::make_shared(); - - data->initVolume = - usys.to_si(M::liquid_surface_volume, - saaq[VI::SAnalyticAquifer::FetInitVol]); - - data->prodIndex = - usys.to_si(M::liquid_surface_rate, - usys.from_si(M::pressure, - saaq[VI::SAnalyticAquifer::FetProdIndex])); - - data->timeConstant = saaq[VI::SAnalyticAquifer::FetTimeConstant]; - - return data; - } - - void restore_aquifers(const ::Opm::EclipseState& es, - std::shared_ptr rst_view, - Opm::RestartValue& rst_value) - { - using M = ::Opm::UnitSystem::measure; - using Ix = VI::XAnalyticAquifer::index; - - const auto& intehead = rst_view->intehead(); - const auto aquiferData = AquiferVectors{ intehead, rst_view }; - - const auto numAq = numAnalyticAquifers(*rst_view); - const auto& units = es.getUnits(); - - for (auto aquiferID = 0*numAq; aquiferID < numAq; ++aquiferID) { - const auto& saaq = aquiferData.saaq(aquiferID); - const auto& xaaq = aquiferData.xaaq(aquiferID); - - rst_value.aquifer.emplace_back(); - - auto& aqData = rst_value.aquifer.back(); - - aqData.aquiferID = 1 + static_cast(aquiferID); - aqData.pressure = units.to_si(M::pressure, xaaq[Ix::Pressure]); - aqData.volume = units.to_si(M::liquid_surface_volume, - xaaq[Ix::ProdVolume]); - - aqData.initPressure = - units.to_si(M::pressure, saaq[VI::SAnalyticAquifer::InitPressure]); - - aqData.datumDepth = - units.to_si(M::length, saaq[VI::SAnalyticAquifer::DatumDepth]); - - aqData.type = determineAquiferType(aquiferData.iaaq(aquiferID)); - - if (aqData.type == Opm::data::AquiferType::Fetkovich) { - aqData.aquFet = extractFetkcovichData(units, saaq); - } - } - } - - void assign_well_cumulatives(const std::string& well, - const std::size_t wellID, - const WellVectors& wellData, - Opm::SummaryState& smry) - { - if (! wellData.hasDefinedWellValues()) { - // Result set does not provide well information. - // No wells? In any case, nothing to do here. - return; - } - - auto key = [&well](const std::string& vector) -> std::string - { - return vector + ':' + well; - }; - - const auto xwel = wellData.xwel(wellID); - - // No unit conversion here. Smry expects output units. - smry.update(key("WOPT"), xwel[VI::XWell::index::OilPrTotal]); - smry.update(key("WWPT"), xwel[VI::XWell::index::WatPrTotal]); - smry.update(key("WGPT"), xwel[VI::XWell::index::GasPrTotal]); - smry.update(key("WVPT"), xwel[VI::XWell::index::VoidPrTotal]); - - smry.update(key("WWIT"), xwel[VI::XWell::index::WatInjTotal]); - smry.update(key("WGIT"), xwel[VI::XWell::index::GasInjTotal]); - smry.update(key("WVIT"), xwel[VI::XWell::index::VoidInjTotal]); - - smry.update(key("WOPTH"), xwel[VI::XWell::index::HistOilPrTotal]); - smry.update(key("WWPTH"), xwel[VI::XWell::index::HistWatPrTotal]); - smry.update(key("WGPTH"), xwel[VI::XWell::index::HistGasPrTotal]); - - smry.update(key("WWITH"), xwel[VI::XWell::index::HistWatInjTotal]); - smry.update(key("WGITH"), xwel[VI::XWell::index::HistGasInjTotal]); - } - - void assign_group_cumulatives(const std::string& group, - const std::size_t groupID, - const GroupVectors& groupData, - Opm::SummaryState& smry) - { - if (! groupData.hasDefinedValues()) { - // Result set does not provide group information. - // No wells? In any case, nothing to do here. - return; - } - - auto key = [&group](const std::string& vector) -> std::string - { - return (group == "FIELD") - ? 'F' + vector - : 'G' + vector + ':' + group; - }; - - const auto xgrp = groupData.xgrp(groupID); - - // No unit conversion here. Smry expects output units. - smry.update(key("OPT"), xgrp[VI::XGroup::index::OilPrTotal]); - smry.update(key("WPT"), xgrp[VI::XGroup::index::WatPrTotal]); - smry.update(key("GPT"), xgrp[VI::XGroup::index::GasPrTotal]); - smry.update(key("VPT"), xgrp[VI::XGroup::index::VoidPrTotal]); - - smry.update(key("WIT"), xgrp[VI::XGroup::index::WatInjTotal]); - smry.update(key("GIT"), xgrp[VI::XGroup::index::GasInjTotal]); - smry.update(key("VIT"), xgrp[VI::XGroup::index::VoidInjTotal]); - - smry.update(key("OPTH"), xgrp[VI::XGroup::index::HistOilPrTotal]); - smry.update(key("WPTH"), xgrp[VI::XGroup::index::HistWatPrTotal]); - smry.update(key("GPTH"), xgrp[VI::XGroup::index::HistGasPrTotal]); - smry.update(key("WITH"), xgrp[VI::XGroup::index::HistWatInjTotal]); - smry.update(key("GITH"), xgrp[VI::XGroup::index::HistGasInjTotal]); - } - - void restore_cumulative(::Opm::SummaryState& smry, - const ::Opm::Schedule& schedule, - std::shared_ptr rst_view) - { - const auto sim_step = rst_view->simStep(); - const auto& intehead = rst_view->intehead(); - - smry.update_elapsed(schedule.seconds(rst_view->reportStep())); - - // Well cumulatives - { - const auto wellData = WellVectors { intehead, rst_view }; - const auto& wells = schedule.wellNames(sim_step); - - for (auto nWells = wells.size(), wellID = 0*nWells; - wellID < nWells; ++wellID) - { - assign_well_cumulatives(wells[wellID], wellID, wellData, smry); - } - } - - // Group cumulatives, including FIELD. - { - const auto groupData = GroupVectors { - intehead, std::move(rst_view) - }; - - for (const auto& gname : schedule.groupNames(sim_step)) { - const auto& group = schedule.getGroup(gname, sim_step); - // Note: Order of group values in {I,X}GRP arrays mostly - // matches group's order of occurrence in .DATA file. - // Values pertaining to FIELD are stored at zero-based order - // index NGMAXZ (maximum number of groups in model). The - // latter value is groupData.maxGroups(). - // - // As a final wrinkle, Flow internally stores FIELD at - // insert_index() == 0, so subtract one to account for this - // fact. Max(insert_index(), 1) - 1 is just a bit of future - // proofing and robustness in case that ever changes. - const auto groupOrderIx = (gname == "FIELD") - ? groupData.maxGroups() // NGMAXZ -- Item 3 of WELLDIMS - : std::max(group.insert_index(), std::size_t{1}) - 1; - - assign_group_cumulatives(gname, groupOrderIx, groupData, smry); - } - } - } -} // Anonymous namespace - -namespace Opm { namespace RestartIO { - - RestartValue - load(const std::string& filename, - int report_step, - SummaryState& summary_state, - const std::vector& solution_keys, - const EclipseState& es, - const EclipseGrid& grid, - const Schedule& schedule, - const std::vector& extra_keys) - { - auto rst_view = - std::make_shared(filename, report_step); - - auto xr = restoreSOLUTION(solution_keys, - grid.getNumActive(), *rst_view); - - xr.convertToSI(es.getUnits()); - - auto xw = rst_view->hasKeyword("OPM_XWEL") - ? restore_wells_opm(es, grid, schedule, *rst_view) - : restore_wells_ecl(es, grid, schedule, rst_view); - - auto rst_value = RestartValue{ std::move(xr), std::move(xw) }; - - if (! extra_keys.empty()) { - restoreExtra(extra_keys, es.getUnits(), *rst_view, rst_value); - } - - if (hasAnalyticAquifers(*rst_view)) { - restore_aquifers(es, rst_view, rst_value); - } - - restore_cumulative(summary_state, schedule, std::move(rst_view)); - - return rst_value; - } - -}} // Opm::RestartIO diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/LogiHEAD.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/LogiHEAD.cpp deleted file mode 100644 index 71395e8349..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/LogiHEAD.cpp +++ /dev/null @@ -1,220 +0,0 @@ -#include - -#include - -#include -#include - -namespace VI = ::Opm::RestartIO::Helpers::VectorItems; - -enum index : std::vector::size_type { - // Flag to signify live oil (dissolved gas) PVT - IsLiveOil = VI::logihead::IsLiveOil, - - // Flag to signify wet gas (vaporised oil) PVT - IsWetGas = VI::logihead::IsWetGas, - - // Flag to signify directional relative permeability. - DirKr = VI::logihead::DirKr, - - // ECLIPSE 100 flag for reversible rel.perm. - E100RevKr = VI::logihead::E100RevKr, - - // ECLIPSE 100 flag for radial geometry. - E100Radial = VI::logihead::E100Radial, - - // ECLIPSE 300 flag for radial geometry. - E300Radial = VI::logihead::E300Radial, - - // ECLIPSE 300 flag for reversible rel.perm. - E300RevKr = VI::logihead::E300RevKr, - -lh_005 = 5 , // FALSE - - // Flag to enable hysteresis - Hyster = VI::logihead::Hyster, - -lh_007 = 7 , // FALSE -lh_008 = 8 , // FALSE -lh_009 = 9 , // FALSE -lh_010 = 10 , // FALSE -lh_011 = 11 , // FALSE -lh_012 = 12 , // FALSE -lh_013 = 13 , // FALSE - - // Flag to activate dual porosity. - DualPoro = VI::logihead::DualPoro, - -lh_015 = 15 , // FALSE - - // Flag to activate saturation function end-point scaling. - EndScale = VI::logihead::EndScale, - - // Flag to activate directional end-point scaling. - DirEPS = VI::logihead::DirEPS, - - // Flag to activate reversible end-point scaling. Typically True. - RevEPS = VI::logihead::RevEPS, // TRUE - - // Flag to activate alternative end-point scaling (3-pt option) - AltEPS = VI::logihead::AltEPS, - -lh_020 = 20 , // FALSE -lh_021 = 21 , // FALSE -lh_022 = 22 , // FALSE -lh_023 = 23 , // FALSE -lh_024 = 24 , // FALSE -lh_025 = 25 , // FALSE -lh_026 = 26 , // FALSE -lh_027 = 27 , // FALSE -lh_028 = 28 , // FALSE -lh_029 = 29 , // FALSE -lh_030 = 30 , // FALSE Flag for coalbed methane (ECLIPSE 100) -lh_031 = 31 , // TRUE -lh_032 = 32 , // FALSE -lh_033 = 33 , // FALSE -lh_034 = 34 , // FALSE -lh_035 = 35 , // FALSE -lh_036 = 36 , // FALSE -lh_037 = 37 , // - - // Flag to signify constant oil compressibility - ConstCo = VI::logihead::ConstCo, - -lh_039 = 39 , // FALSE -lh_040 = 40 , // FALSE -lh_041 = 41 , // FALSE -lh_042 = 42 , // FALSE -lh_043 = 43 , // -lh_044 = 44 , // TRUE -lh_045 = 45 , // FALSE -lh_046 = 46 , // FALSE -lh_047 = 47 , // FALSE -lh_048 = 48 , // -lh_049 = 49 , // FALSE -lh_050 = 50 , // FALSE -lh_051 = 51 , // FALSE -lh_052 = 52 , // FALSE -lh_053 = 53 , // FALSE -lh_054 = 54 , // FALSE -lh_055 = 55 , // FALSE -lh_056 = 56 , // FALSE -lh_057 = 57 , // FALSE -lh_058 = 58 , // FALSE -lh_059 = 59 , // FALSE -lh_060 = 60 , // FALSE -lh_061 = 61 , // FALSE -lh_062 = 62 , // FALSE -lh_063 = 63 , // FALSE -lh_064 = 64 , // FALSE -lh_065 = 65 , // FALSE -lh_066 = 66 , // FALSE -lh_067 = 67 , // FALSE -lh_068 = 68 , // FALSE -lh_069 = 69 , // FALSE -lh_070 = 70 , // FALSE -lh_071 = 71 , // FALSE -lh_072 = 72 , // FALSE -lh_073 = 73 , // FALSE -lh_074 = 74 , // FALSE - - // TRUE if segmented well model is used - HasMSWells = VI::logihead::HasMSWells, - -lh_076 = 76 , // TRUE -lh_077 = 77 , // FALSE -lh_078 = 78 , // FALSE -lh_079 = 79 , // FALSE -lh_080 = 80 , // FALSE -lh_081 = 81 , // FALSE -lh_082 = 82 , // FALSE -lh_083 = 83 , // FALSE -lh_084 = 84 , // FALSE -lh_085 = 85 , // FALSE -lh_086 = 86 , // -lh_087 = 87 , // TRUE -lh_088 = 88 , // FALSE -lh_089 = 89 , // FALSE -lh_090 = 90 , // FALSE -lh_091 = 91 , // FALSE -lh_092 = 92 , // FALSE -lh_093 = 93 , // -lh_094 = 94 , // FALSE -lh_095 = 95 , // FALSE -lh_096 = 96 , // -lh_097 = 97 , // FALSE -lh_098 = 98 , // FALSE -lh_099 = 99 , // TRUE -lh_100 = 100 , // FALSE -lh_101 = 101 , // FALSE -lh_102 = 102 , // FALSE -lh_103 = 103 , // FALSE -lh_104 = 104 , // FALSE -lh_105 = 105 , // FALSE -lh_106 = 106 , // FALSE -lh_107 = 107 , // FALSE -lh_108 = 108 , // FALSE -lh_109 = 109 , // FALSE -lh_110 = 110 , // FALSE -lh_111 = 111 , // FALSE -lh_112 = 112 , // FALSE -lh_113 = 113 , // TRUE -lh_114 = 114 , // TRUE -lh_115 = 115 , // TRUE -lh_116 = 116 , // FALSE -lh_117 = 117 , // TRUE -lh_118 = 118 , // FALSE -lh_119 = 119 , // FALSE -lh_120 = 120 , // FALSE - -// --------------------------------------------------------------------- -// --------------------------------------------------------------------- - - LOGIHEAD_NUMBER_OF_ITEMS // MUST be last element of enum. -}; - -// ===================================================================== -// Public Interface Below Separator -// ===================================================================== - -Opm::RestartIO::LogiHEAD::LogiHEAD() - : data_(LOGIHEAD_NUMBER_OF_ITEMS, false) -{} - -Opm::RestartIO::LogiHEAD& -Opm::RestartIO::LogiHEAD:: -variousParam(const bool e300_radial, - const bool e100_radial, - const int nswlmx, - const bool enableHyster) -{ - this -> data_[E300Radial] = e300_radial; - this -> data_[E100Radial] = e100_radial; - this -> data_[Hyster] = enableHyster; - this -> data_[HasMSWells] = nswlmx >= 1; // True if MS Wells exist. - - return *this; -} - -Opm::RestartIO::LogiHEAD& -Opm::RestartIO::LogiHEAD::pvtModel(const PVTModel& pvt) -{ - this->data_[IsLiveOil] = pvt.isLiveOil; - this->data_[IsWetGas ] = pvt.isWetGas; - this->data_[ConstCo ] = pvt.constComprOil; - - return *this; -} - -Opm::RestartIO::LogiHEAD& -Opm::RestartIO::LogiHEAD::saturationFunction(const SatfuncFlags& satfunc) -{ - this->data_[DirKr] = satfunc.useDirectionalRelPerm; - this->data_[E100RevKr] = satfunc.useReversibleRelPerm; - this->data_[EndScale] = satfunc.useEndScale; - this->data_[DirEPS] = satfunc.useDirectionalEPS; - this->data_[RevEPS] = satfunc.useReversibleEPS; - this->data_[AltEPS] = satfunc.useAlternateEPS; - - return *this; -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/RegionCache.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/RegionCache.cpp deleted file mode 100644 index 6eef345604..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/RegionCache.cpp +++ /dev/null @@ -1,58 +0,0 @@ -/* - Copyright 2016 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include -#include -#include -#include -#include - -#include - -namespace Opm { -namespace out { - -RegionCache::RegionCache(const std::vector& fipnum, const EclipseGrid& grid, const Schedule& schedule) { - - const auto& wells = schedule.getWellsatEnd(); - for (const auto& well : wells) { - const auto& connections = well.getConnections( ); - for (const auto& c : connections) { - if (grid.cellActive(c.getI(), c.getJ(), c.getK())) { - size_t active_index = grid.activeIndex(c.getI(), c.getJ(), c.getK()); - int region_id = fipnum[active_index]; - auto& well_index_list = this->connection_map[ region_id ]; - well_index_list.push_back( { well.name() , active_index } ); - } - } - } -} - - - const std::vector>& RegionCache::connections( int region_id ) const { - const auto iter = this->connection_map.find( region_id ); - if (iter == this->connection_map.end()) - return this->connections_empty; - else - return iter->second; - } - -} -} - diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/RestartIO.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/RestartIO.cpp deleted file mode 100644 index abb54c9c06..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/RestartIO.cpp +++ /dev/null @@ -1,636 +0,0 @@ -/* - Copyright (c) 2018 Equinor ASA - Copyright (c) 2016 Statoil ASA - Copyright (c) 2013-2015 Andreas Lauser - Copyright (c) 2013 SINTEF ICT, Applied Mathematics. - Copyright (c) 2013 Uni Research AS - Copyright (c) 2015 IRIS AS - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include - -#include -#include -#include -#include -#include -#include - -#include - -#include - -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -namespace Opm { namespace RestartIO { - -namespace { - /* - The RestartValue structure has an 'extra' container which can be used to - add extra fields to the restart file. The extra field is used both to add - OPM specific fields like 'OPMEXTRA', and eclipse standard fields like - THRESHPR. In the case of e.g. THRESHPR this should - if present - be added - in the SOLUTION section of the restart file. The extra_solution object - identifies the keys which should be output in the solution section. - */ - - bool extraInSolution(const std::string& vector) - { - static const auto extra_solution = - std::unordered_set - { - "THRESHPR", - }; - - return extra_solution.count(vector) > 0; - } - - double nextStepSize(const Opm::RestartValue& rst_value) - { - return rst_value.hasExtra("OPMEXTRA") - ? rst_value.getExtra("OPMEXTRA")[0] - : 0.0; - } - - std::vector - serialize_OPM_IWEL(const data::Wells& wells, - const std::vector& well_names) - { - const auto getctrl = [&]( const std::string& wname ) { - const auto itr = wells.find( wname ); - return itr == wells.end() ? 0 : itr->second.control; - }; - - std::vector iwel(well_names.size(), 0.0); - std::transform(well_names.begin(), well_names.end(), iwel.begin(), getctrl); - - return iwel; - } - - std::vector - serialize_OPM_XWEL(const data::Wells& wells, - const Schedule& schedule, - const std::vector& well_names, - const int sim_step, - const Phases& phase_spec, - const EclipseGrid& grid) - { - using rt = data::Rates::opt; - - std::vector phases; - if (phase_spec.active(Phase::WATER)) phases.push_back(rt::wat); - if (phase_spec.active(Phase::OIL)) phases.push_back(rt::oil); - if (phase_spec.active(Phase::GAS)) phases.push_back(rt::gas); - - std::vector< double > xwel; - for (const auto& wellname : well_names) { - const auto& sched_well = schedule.getWell(wellname, sim_step); - if (wells.count(wellname) == 0 || - sched_well.getStatus() == Opm::Well::Status::SHUT) - { - const auto elems = (sched_well.getConnections().size() - * (phases.size() + data::Connection::restart_size)) - + 3 /* bhp, thp, temperature */ - + phases.size(); - - // write zeros if no well data is provided - xwel.insert( xwel.end(), elems, 0.0 ); - continue; - } - - const auto& well = wells.at( wellname ); - - xwel.push_back( well.bhp ); - xwel.push_back( well.thp ); - xwel.push_back( well.temperature ); - - for (auto phase : phases) - xwel.push_back(well.rates.get(phase)); - - for (const auto& sc : sched_well.getConnections()) { - const auto i = sc.getI(), j = sc.getJ(), k = sc.getK(); - - const auto rs_size = phases.size() + data::Connection::restart_size; - if (!grid.cellActive(i, j, k) || sc.state() == Connection::State::SHUT) { - xwel.insert(xwel.end(), rs_size, 0.0); - continue; - } - - const auto global_index = grid.getGlobalIndex(i, j, k); - - const auto& connection = - std::find_if(well.connections.begin(), - well.connections.end(), - [global_index](const data::Connection& c) - { - return c.index == global_index; - }); - - if (connection == well.connections.end()) { - xwel.insert( xwel.end(), rs_size, 0.0 ); - continue; - } - - xwel.push_back(connection->pressure); - xwel.push_back(connection->reservoir_rate); - xwel.push_back(connection->cell_pressure); - xwel.push_back(connection->cell_saturation_water); - xwel.push_back(connection->cell_saturation_gas); - xwel.push_back(connection->effective_Kh); - - for (auto phase : phases) - xwel.push_back(connection->rates.get(phase)); - } - } - - return xwel; - } - - void checkSaveArguments(const EclipseState& es, - const RestartValue& restart_value, - const EclipseGrid& grid) - { - for (const auto& elm: restart_value.solution) - if (elm.second.data.size() != grid.getNumActive()) - throw std::runtime_error("Wrong size on solution vector: " + elm.first); - - if (es.getSimulationConfig().getThresholdPressure().size() > 0) { - // If the the THPRES option is active the restart_value should have a - // THPRES field. This is not enforced here because not all the opm - // simulators have been updated to include the THPRES values. - if (!restart_value.hasExtra("THRESHPR")) { - OpmLog::warning("This model has THPRES active - should have THPRES as part of restart data."); - return; - } - - const auto num_regions = es.getTableManager().getEqldims().getNumEquilRegions(); - const auto& thpres = restart_value.getExtra("THRESHPR"); - - if (thpres.size() != num_regions * num_regions) - throw std::runtime_error("THPRES vector has invalid size - should have num_region * num_regions."); - } - } - - std::vector - writeHeader(const int report_step, - const int sim_step, - const double next_step_size, - const double simTime, - const Schedule& schedule, - const EclipseGrid& grid, - const EclipseState& es, - EclIO::OutputStream::Restart& rstFile) - { - // write INTEHEAD to restart file - auto ih = Helpers:: - createInteHead(es, grid, schedule, simTime, - report_step, // Should really be number of timesteps - report_step, sim_step); - - rstFile.write("INTEHEAD", ih); - - // write LOGIHEAD to restart file - rstFile.write("LOGIHEAD", Helpers::createLogiHead(es)); - - // write DOUBHEAD to restart file - const auto dh = Helpers::createDoubHead(es, schedule, sim_step, - simTime, next_step_size); - rstFile.write("DOUBHEAD", dh); - - // return the inteHead vector - return ih; - } - - void writeGroup(int sim_step, - const UnitSystem& units, - const Schedule& schedule, - const Opm::SummaryState& sumState, - const std::vector& ih, - EclIO::OutputStream::Restart& rstFile) - { - // write IGRP to restart file - const size_t simStep = static_cast (sim_step); - - auto groupData = Helpers::AggregateGroupData(ih); - - groupData.captureDeclaredGroupData(schedule, units, simStep, sumState, ih); - - rstFile.write("IGRP", groupData.getIGroup()); - rstFile.write("SGRP", groupData.getSGroup()); - rstFile.write("XGRP", groupData.getXGroup()); - rstFile.write("ZGRP", groupData.getZGroup()); - } - - void writeMSWData(int sim_step, - const UnitSystem& units, - const Schedule& schedule, - const EclipseGrid& grid, - const Opm::SummaryState& sumState, - const Opm::data::Wells& wells, - const std::vector& ih, - EclIO::OutputStream::Restart& rstFile) - { - // write ISEG, RSEG, ILBS and ILBR to restart file - const auto simStep = static_cast (sim_step); - - auto MSWData = Helpers::AggregateMSWData(ih); - MSWData.captureDeclaredMSWData(schedule, simStep, units, - ih, grid, sumState, wells); - - rstFile.write("ISEG", MSWData.getISeg()); - rstFile.write("ILBS", MSWData.getILBs()); - rstFile.write("ILBR", MSWData.getILBr()); - rstFile.write("RSEG", MSWData.getRSeg()); - } - - void writeUDQ(const int report_step, - const int sim_step, - const Schedule& schedule, - const SummaryState& sum_state, - const std::vector& ih, - EclIO::OutputStream::Restart& rstFile) - { - if (report_step == 0) { - // Initial condition. No UDQs yet. - return; - } - - // write UDQ - data to restart file - const std::size_t simStep = static_cast (sim_step); - - const auto udqDims = Helpers::createUdqDims(schedule, simStep, ih); - auto udqData = Helpers::AggregateUDQData(udqDims); - udqData.captureDeclaredUDQData(schedule, simStep, sum_state, ih); - - if (udqDims[0] >= 1) { - rstFile.write("ZUDN", udqData.getZUDN()); - rstFile.write("ZUDL", udqData.getZUDL()); - rstFile.write("IUDQ", udqData.getIUDQ()); - if (udqDims[12] >= 1) rstFile.write("DUDF", udqData.getDUDF()); - if (udqDims[11] >= 1) rstFile.write("DUDG", udqData.getDUDG()); - if (udqDims[ 9] >= 1) rstFile.write("DUDW", udqData.getDUDW()); - if (udqDims[ 2] >= 1) rstFile.write("IUAD", udqData.getIUAD()); - if (udqDims[ 7] >= 1) rstFile.write("IUAP", udqData.getIUAP()); - if (udqDims[ 6] >= 1) rstFile.write("IGPH", udqData.getIGPH()); - } - } - - void writeActionx(const int report_step, - const int sim_step, - const EclipseState& es, - const Schedule& schedule, - const SummaryState& sum_state, - EclIO::OutputStream::Restart& rstFile) - { - if (report_step == 0) { - // Initial condition. No ACTION* data yet. - return; - } - - // write ACTIONX - data to restart file - const std::size_t simStep = static_cast (sim_step); - - const auto actDims = Opm::RestartIO::Helpers::createActionxDims(es.runspec(), schedule, simStep); - auto actionxData = Opm::RestartIO::Helpers::AggregateActionxData(actDims); - actionxData.captureDeclaredActionxData(schedule, sum_state, actDims, simStep); - - if (actDims[0] >= 1) { - rstFile.write("IACT", actionxData.getIACT()); - rstFile.write("SACT", actionxData.getSACT()); - rstFile.write("ZACT", actionxData.getZACT()); - rstFile.write("ZLACT", actionxData.getZLACT()); - rstFile.write("ZACN", actionxData.getZACN()); - rstFile.write("IACN", actionxData.getIACN()); - rstFile.write("SACN", actionxData.getSACN()); - } - } - - void writeWell(int sim_step, - const bool ecl_compatible_rst, - const Phases& phases, - const UnitSystem& units, - const EclipseGrid& grid, - const Schedule& schedule, - const std::vector& well_names, - const data::Wells& wells, - const Opm::SummaryState& sumState, - const std::vector& ih, - EclIO::OutputStream::Restart& rstFile) - { - auto wellData = Helpers::AggregateWellData(ih); - wellData.captureDeclaredWellData(schedule, units, sim_step, sumState, ih); - wellData.captureDynamicWellData(schedule, sim_step, - wells, sumState); - - rstFile.write("IWEL", wellData.getIWell()); - rstFile.write("SWEL", wellData.getSWell()); - rstFile.write("XWEL", wellData.getXWell()); - rstFile.write("ZWEL", wellData.getZWell()); - - // Extended set of OPM well vectors - if (!ecl_compatible_rst) - { - const auto opm_xwel = - serialize_OPM_XWEL(wells, schedule, well_names, - sim_step, phases, grid); - - const auto opm_iwel = serialize_OPM_IWEL(wells, well_names); - - rstFile.write("OPM_IWEL", opm_iwel); - rstFile.write("OPM_XWEL", opm_xwel); - } - - auto connectionData = Helpers::AggregateConnectionData(ih); - connectionData.captureDeclaredConnData(schedule, grid, units, - wells, sim_step); - - rstFile.write("ICON", connectionData.getIConn()); - rstFile.write("SCON", connectionData.getSConn()); - rstFile.write("XCON", connectionData.getXConn()); - } - - void writeDynamicData(const int sim_step, - const bool ecl_compatible_rst, - const Phases& phases, - const UnitSystem& units, - const EclipseGrid& grid, - const Schedule& schedule, - const data::WellRates& wellSol, - const Opm::SummaryState& sumState, - const std::vector& inteHD, - EclIO::OutputStream::Restart& rstFile) - { - writeGroup(sim_step, units, schedule, sumState, inteHD, rstFile); - - // Write well and MSW data only when applicable (i.e., when present) - const auto& wells = schedule.wellNames(sim_step); - - if (! wells.empty()) { - const auto haveMSW = - std::any_of(std::begin(wells), std::end(wells), - [&schedule, sim_step](const std::string& well) - { - return schedule.getWell(well, sim_step).isMultiSegment(); - }); - - if (haveMSW) { - writeMSWData(sim_step, units, schedule, grid, sumState, - wellSol, inteHD, rstFile); - } - - writeWell(sim_step, ecl_compatible_rst, - phases, units, grid, schedule, wells, - wellSol, sumState, inteHD, rstFile); - } - } - - bool haveHysteresis(const RestartValue& value) - { - for (const auto* key : { "KRNSW_OW", "PCSWM_OW", - "KRNSW_GO", "PCSWM_GO", }) - { - if (value.solution.has(key)) { return true; } - } - - return false; - } - - std::vector - convertedHysteresisSat(const RestartValue& value, - const std::string& primary, - const std::string& fallback) - { - auto smax = std::vector{}; - - if (value.solution.has(primary)) { - smax = value.solution.data(primary); - } - else if (value.solution.has(fallback)) { - smax = value.solution.data(fallback); - } - - if (! smax.empty()) { - std::transform(std::begin(smax), std::end(smax), std::begin(smax), - [](const double s) { return 1.0 - s; }); - } - - return smax; - } - - template - void writeEclipseCompatHysteresis(const RestartValue& value, - const bool write_double, - OutputVector&& writeVector) - { - // Convert Flow-specific vectors {KRNSW,PCSWM}_OW to ECLIPSE's - // requisite SOMAX vector. Only partially characterised. - // Sufficient for Norne. - { - const auto somax = - convertedHysteresisSat(value, "KRNSW_OW", "PCSWM_OW"); - - if (! somax.empty()) { - writeVector("SOMAX", somax, write_double); - } - } - - // Convert Flow-specific vectors {KRNSW,PCSWM}_GO to ECLIPSE's - // requisite SGMAX vector. Only partially characterised. - // Sufficient for Norne. - { - const auto sgmax = - convertedHysteresisSat(value, "KRNSW_GO", "PCSWM_GO"); - - if (! sgmax.empty()) { - writeVector("SGMAX", sgmax, write_double); - } - } - } - - void writeSolution(const RestartValue& value, - const Schedule& schedule, - const SummaryState& sum_state, - int report_step, - int sim_step, - const bool ecl_compatible_rst, - const bool write_double_arg, - const std::vector& inteHD, - EclIO::OutputStream::Restart& rstFile) - { - rstFile.message("STARTSOL"); - - auto write = [&rstFile] - (const std::string& key, - const std::vector& data, - const bool write_double) -> void - { - if (write_double) { - rstFile.write(key, data); - } - else { - rstFile.write(key, std::vector { - data.begin(), data.end() - }); - } - }; - - for (const auto& elm : value.solution) { - if (elm.second.target == data::TargetType::RESTART_SOLUTION) - { - write(elm.first, elm.second.data, write_double_arg); - } - } - - writeUDQ(report_step, sim_step, schedule, sum_state, inteHD, rstFile); - - for (const auto& elm : value.extra) { - const std::string& key = elm.first.key; - if (extraInSolution(key)) { - // Observe that the extra data is unconditionally - // output as double precision. - write(key, elm.second, true); - } - } - - if (ecl_compatible_rst && haveHysteresis(value)) { - writeEclipseCompatHysteresis(value, write_double_arg, write); - } - - rstFile.message("ENDSOL"); - - if (ecl_compatible_rst) { - return; - } - - for (const auto& elm : value.solution) { - if (elm.second.target == data::TargetType::RESTART_AUXILIARY) { - write(elm.first, elm.second.data, write_double_arg); - } - } - } - - void writeExtraData(const RestartValue::ExtraVector& extra_data, - EclIO::OutputStream::Restart& rstFile) - { - for (const auto& extra_value : extra_data) { - const std::string& key = extra_value.first.key; - - if (! extraInSolution(key)) { - rstFile.write(key, extra_value.second); - } - } - } - - int numChar(const std::size_t num_reports) - { - return static_cast( - 1 + std::floor(std::log10(static_cast(num_reports)))); - } - - void logRestartOutput(const int report_step, - const std::size_t num_reports, - const std::vector& inteHD) - { - using Ix = ::Opm::RestartIO::Helpers::VectorItems::intehead; - - std::ostringstream logmsg; - - logmsg << "Restart file written for report step: " - << std::setw(numChar(num_reports)) << report_step << '/' - << std::setw(0) << num_reports << ". Date: " - << std::setw(4) << inteHD[Ix::YEAR] << '/' - << std::setw(2) << std::setfill('0') << inteHD[Ix::MONTH] << '/' - << std::setw(2) << std::setfill('0') << inteHD[Ix::DAY]; - - ::Opm::OpmLog::info(logmsg.str()); - } - -} // Anonymous namespace - -void save(EclIO::OutputStream::Restart& rstFile, - int report_step, - double seconds_elapsed, - RestartValue value, - const EclipseState& es, - const EclipseGrid& grid, - const Schedule& schedule, - const SummaryState& sumState, - bool write_double) -{ - ::Opm::RestartIO::checkSaveArguments(es, value, grid); - - const auto& ioCfg = es.getIOConfig(); - const auto ecl_compatible_rst = ioCfg.getEclCompatibleRST(); - - const auto sim_step = std::max(report_step - 1, 0); - const auto& units = es.getUnits(); - - if (ecl_compatible_rst) { - write_double = false; - } - - // Convert solution fields and extra values from SI to user units. - value.convertFromSI(units); - - const auto inteHD = - writeHeader(report_step, sim_step, nextStepSize(value), - seconds_elapsed, schedule, grid, es, rstFile); - - if (report_step > 0) { - writeDynamicData(sim_step, ecl_compatible_rst, es.runspec().phases(), - units, grid, schedule, value.wells, sumState, - inteHD, rstFile); - } - - writeActionx(report_step, sim_step, es, schedule, sumState, rstFile); - - writeSolution(value, schedule, sumState, report_step, sim_step, - ecl_compatible_rst, write_double, inteHD, rstFile); - - if (! ecl_compatible_rst) { - writeExtraData(value.extra, rstFile); - } - - logRestartOutput(report_step, schedule.getTimeMap().numTimesteps(), inteHD); -} - -}} // Opm::RestartIO diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/RestartValue.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/RestartValue.cpp deleted file mode 100644 index bcecaec10b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/RestartValue.cpp +++ /dev/null @@ -1,105 +0,0 @@ -/* - Copyright (c) 2018 Statoil ASA - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include -#include - -#include - -namespace Opm { - - namespace { - - const std::set reserved_keys = {"LOGIHEAD", "INTEHEAD" ,"DOUBHEAD", "IWEL", "XWEL","ICON", "XCON" , "OPM_IWEL" , "OPM_XWEL", "ZWEL"}; - - } - - - - RestartValue::RestartValue(data::Solution sol, data::Wells wells_arg) : - solution(std::move(sol)), - wells(std::move(wells_arg)) - { - } - - const std::vector& RestartValue::getExtra(const std::string& key) const { - const auto iter = std::find_if(this->extra.begin(), - this->extra.end(), - [&](const std::pair>& pair) - { - return (pair.first.key == key); - }); - if (iter == this->extra.end()) - throw std::invalid_argument("No such extra key " + key); - - return iter->second; - } - - bool RestartValue::hasExtra(const std::string& key) const { - const auto iter = std::find_if(this->extra.begin(), - this->extra.end(), - [&](const std::pair>& pair) - { - return (pair.first.key == key); - }); - return (iter != this->extra.end()); - } - - void RestartValue::addExtra(const std::string& key, UnitSystem::measure dimension, std::vector data) { - if (key.size() > 8) - throw std::runtime_error("The keys used for Eclipse output must be maximum 8 characters long."); - - if (this->hasExtra(key)) - throw std::runtime_error("The keys in the extra vector must be unique."); - - if (this->solution.has(key)) - throw std::runtime_error("The key " + key + " is already present in the solution section."); - - if (reserved_keys.find(key) != reserved_keys.end()) - throw std::runtime_error("Can not use reserved key:" + key); - - this->extra.push_back( std::make_pair(RestartKey(key, dimension), std::move(data))); - } - - void RestartValue::addExtra(const std::string& key, std::vector data) { - this->addExtra(key, UnitSystem::measure::identity, std::move(data)); - } - - void RestartValue::convertFromSI(const UnitSystem& units) { - this->solution.convertFromSI(units); - for (auto & extra_value : this->extra) { - const auto& restart_key = extra_value.first; - auto & data = extra_value.second; - - units.from_si(restart_key.dim, data); - } - } - - void RestartValue::convertToSI(const UnitSystem& units) { - this->solution.convertToSI(units); - for (auto & extra_value : this->extra) { - const auto& restart_key = extra_value.first; - auto & data = extra_value.second; - - units.to_si(restart_key.dim, data); - } - } - - -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/Summary.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/Summary.cpp deleted file mode 100644 index 6ed7ef06e4..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/Summary.cpp +++ /dev/null @@ -1,2706 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - Copyright 2016 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include - -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#include -#include - -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -namespace { - struct ParamCTorArgs - { - std::string kw; - Opm::EclIO::SummaryNode::Type type; - }; - - using p_cmode = Opm::Group::ProductionCMode; - const std::map pCModeToPCntlMode = { - {p_cmode::NONE, 0}, - {p_cmode::ORAT, 1}, - {p_cmode::WRAT, 2}, - {p_cmode::GRAT, 3}, - {p_cmode::LRAT, 4}, - {p_cmode::CRAT, 9}, - {p_cmode::RESV, 5}, - {p_cmode::PRBL, 6}, - {p_cmode::FLD, 0}, // same as NONE - - }; - - using i_cmode = Opm::Group::InjectionCMode; - const std::map iCModeToICntlMode = { - {i_cmode::NONE, 0}, - {i_cmode::RATE, 1}, - {i_cmode::RESV, 2}, - {i_cmode::REIN, 3}, - {i_cmode::VREP, 4}, - {i_cmode::FLD, 0}, // same as NONE - {i_cmode::SALE, 0}, // not used in E100 - }; - - std::vector requiredRestartVectors() - { - using Type = ::Opm::EclIO::SummaryNode::Type; - - return { - // Production - ParamCTorArgs{ "OPR" , Type::Rate }, - ParamCTorArgs{ "WPR" , Type::Rate }, - ParamCTorArgs{ "GPR" , Type::Rate }, - ParamCTorArgs{ "VPR" , Type::Rate }, - ParamCTorArgs{ "OPP" , Type::Rate }, - ParamCTorArgs{ "WPP" , Type::Rate }, - ParamCTorArgs{ "GPP" , Type::Rate }, - ParamCTorArgs{ "OPT" , Type::Total }, - ParamCTorArgs{ "WPT" , Type::Total }, - ParamCTorArgs{ "GPT" , Type::Total }, - ParamCTorArgs{ "VPT" , Type::Total }, - ParamCTorArgs{ "OPTH", Type::Total }, - ParamCTorArgs{ "WPTH", Type::Total }, - ParamCTorArgs{ "GPTH", Type::Total }, - - // Flow rate ratios (production) - ParamCTorArgs{ "WCT" , Type::Ratio }, - ParamCTorArgs{ "GOR" , Type::Ratio }, - - // injection - ParamCTorArgs{ "WIR" , Type::Rate }, - ParamCTorArgs{ "GIR" , Type::Rate }, - ParamCTorArgs{ "OPI" , Type::Rate }, - ParamCTorArgs{ "WPI" , Type::Rate }, - ParamCTorArgs{ "GPI" , Type::Rate }, - ParamCTorArgs{ "WIT" , Type::Total }, - ParamCTorArgs{ "GIT" , Type::Total }, - ParamCTorArgs{ "VIT" , Type::Total }, - ParamCTorArgs{ "WITH", Type::Total }, - ParamCTorArgs{ "GITH", Type::Total }, - }; - } - - std::vector - requiredRestartVectors(const ::Opm::Schedule& sched) - { - const auto& vectors = requiredRestartVectors(); - const std::vector extra_well_vectors { - { "WBHP", Opm::EclIO::SummaryNode::Type::Pressure }, - { "WGVIR", Opm::EclIO::SummaryNode::Type::Rate }, - { "WWVIR", Opm::EclIO::SummaryNode::Type::Rate }, - }; - const std::vector extra_group_vectors { - { "GMCTG", Opm::EclIO::SummaryNode::Type::Mode }, - { "GMCTP", Opm::EclIO::SummaryNode::Type::Mode }, - { "GMCTW", Opm::EclIO::SummaryNode::Type::Mode }, - }; - const std::vector extra_field_vectors { - { "FMCTG", Opm::EclIO::SummaryNode::Type::Mode }, - { "FMCTP", Opm::EclIO::SummaryNode::Type::Mode }, - { "FMCTW", Opm::EclIO::SummaryNode::Type::Mode }, - }; - - std::vector entities {} ; - - auto makeEntities = [&vectors, &entities] - (const char kwpref, - const Opm::EclIO::SummaryNode::Category cat, - const std::string& name) -> void - { - for (const auto& vector : vectors) { - entities.push_back({kwpref + vector.kw, cat, vector.type, name, Opm::EclIO::SummaryNode::default_number }); - } - }; - - auto makeExtraEntities = [&entities] - (const std::vector& extra_vectors, - const Opm::EclIO::SummaryNode::Category category, - const std::string& wgname) -> void - { - for (const auto &extra_vector : extra_vectors) { - entities.push_back({ extra_vector.kw, category, extra_vector.type, wgname, Opm::EclIO::SummaryNode::default_number }); - } - }; - - for (const auto& well_name : sched.wellNames()) { - makeEntities('W', Opm::EclIO::SummaryNode::Category::Well, well_name); - makeExtraEntities(extra_well_vectors, Opm::EclIO::SummaryNode::Category::Well, well_name); - } - - for (const auto& grp_name : sched.groupNames()) { - if (grp_name != "FIELD") { - makeEntities('G', Opm::EclIO::SummaryNode::Category::Group, grp_name); - makeExtraEntities(extra_group_vectors, Opm::EclIO::SummaryNode::Category::Group, grp_name); - } - } - - makeEntities('F', Opm::EclIO::SummaryNode::Category::Field, "FIELD"); - makeExtraEntities(extra_field_vectors, Opm::EclIO::SummaryNode::Category::Field, "FIELD"); - - return entities; - } - - std::vector - requiredSegmentVectors(const ::Opm::Schedule& sched) - { - std::vector ret {}; - - constexpr Opm::EclIO::SummaryNode::Category category { Opm::EclIO::SummaryNode::Category::Segment }; - const std::vector> requiredVectors { - { "SOFR", Opm::EclIO::SummaryNode::Type::Rate }, - { "SGFR", Opm::EclIO::SummaryNode::Type::Rate }, - { "SWFR", Opm::EclIO::SummaryNode::Type::Rate }, - { "SPR", Opm::EclIO::SummaryNode::Type::Pressure }, - }; - - auto makeVectors = - [&](const std::string& well, - const int segNumber) -> void - { - for (const auto &requiredVector : requiredVectors) { - ret.push_back({requiredVector.first, category, requiredVector.second, well, segNumber}); - } - }; - - for (const auto& wname : sched.wellNames()) { - const auto& well = sched.getWellatEnd(wname); - - if (! well.isMultiSegment()) { - // Don't allocate MS summary vectors for non-MS wells. - continue; - } - - const auto nSeg = well.getSegments().size(); - - for (auto segID = 0*nSeg; segID < nSeg; ++segID) { - makeVectors(wname, segID + 1); // One-based - } - } - - return ret; - } - - -Opm::TimeStampUTC make_sim_time(const Opm::Schedule& sched, const Opm::SummaryState& st, double sim_step) { - auto elapsed = st.get_elapsed() + sim_step; - return Opm::TimeStampUTC( sched.getStartTime() ) + std::chrono::duration(elapsed); -} - - - -/* - * This class takes simulator state and parser-provided information and - * orchestrates ert to write simulation results as requested by the SUMMARY - * section in eclipse. The implementation is somewhat compact as a lot of the - * requested output may be similar-but-not-quite. Through various techniques - * the compiler writes a lot of this code for us. - */ - - -using rt = Opm::data::Rates::opt; -using measure = Opm::UnitSystem::measure; -constexpr const bool injector = true; -constexpr const bool producer = false; -constexpr const bool polymer = true; - -/* Some numerical value with its unit tag embedded to enable caller to apply - * unit conversion. This removes a lot of boilerplate. ad-hoc solution to poor - * unit support in general. - */ -measure div_unit( measure denom, measure div ) { - if( denom == measure::gas_surface_rate && - div == measure::liquid_surface_rate ) - return measure::gas_oil_ratio; - - if( denom == measure::liquid_surface_rate && - div == measure::gas_surface_rate ) - return measure::oil_gas_ratio; - - if( denom == measure::liquid_surface_rate && - div == measure::liquid_surface_rate ) - return measure::water_cut; - - if( denom == measure::liquid_surface_rate && - div == measure::time ) - return measure::liquid_surface_volume; - - if( denom == measure::gas_surface_rate && - div == measure::time ) - return measure::gas_surface_volume; - - if( denom == measure::mass_rate && - div == measure::time ) - return measure::mass; - - return measure::identity; -} - -measure mul_unit( measure lhs, measure rhs ) { - if( lhs == rhs ) return lhs; - - if( ( lhs == measure::liquid_surface_rate && rhs == measure::time ) || - ( rhs == measure::liquid_surface_rate && lhs == measure::time ) ) - return measure::liquid_surface_volume; - - if( ( lhs == measure::gas_surface_rate && rhs == measure::time ) || - ( rhs == measure::gas_surface_rate && lhs == measure::time ) ) - return measure::gas_surface_volume; - - if( ( lhs == measure::rate && rhs == measure::time ) || - ( rhs == measure::rate && lhs == measure::time ) ) - return measure::volume; - - if( lhs == measure::mass_rate && rhs == measure::time) - return measure::mass; - - return lhs; -} - -struct quantity { - double value; - Opm::UnitSystem::measure unit; - - quantity operator+( const quantity& rhs ) const { - assert( this->unit == rhs.unit ); - return { this->value + rhs.value, this->unit }; - } - - quantity operator*( const quantity& rhs ) const { - return { this->value * rhs.value, mul_unit( this->unit, rhs.unit ) }; - } - - quantity operator/( const quantity& rhs ) const { - const auto res_unit = div_unit( this->unit, rhs.unit ); - - if( rhs.value == 0 ) return { 0.0, res_unit }; - return { this->value / rhs.value, res_unit }; - } - - quantity operator/( double divisor ) const { - if( divisor == 0 ) return { 0.0, this->unit }; - return { this->value / divisor , this->unit }; - } - - quantity& operator/=( double divisor ) { - if( divisor == 0 ) - this->value = 0; - else - this->value /= divisor; - - return *this; - } - - - quantity operator-( const quantity& rhs) const { - return { this->value - rhs.value, this->unit }; - } -}; - - -/* - * All functions must have the same parameters, so they're gathered in a struct - * and functions use whatever information they care about. - * - * schedule_wells are wells from the deck, provided by opm-parser. active_index - * is the index of the block in question. wells is simulation data. - */ -struct fn_args { - const std::vector& schedule_wells; - const std::string group_name; - double duration; - const int sim_step; - int num; - const Opm::SummaryState& st; - const Opm::data::Wells& wells; - const Opm::data::Group& group; - const Opm::out::RegionCache& regionCache; - const Opm::EclipseGrid& grid; - const std::vector< std::pair< std::string, double > > eff_factors; -}; - -/* Since there are several enums in opm scattered about more-or-less - * representing the same thing. Since functions use template parameters to - * expand into the actual implementations we need a static way to determine - * what unit to tag the return value with. - */ -template< rt > constexpr -measure rate_unit() { return measure::liquid_surface_rate; } -template< Opm::Phase > constexpr -measure rate_unit() { return measure::liquid_surface_rate; } - -template<> constexpr -measure rate_unit< rt::gas >() { return measure::gas_surface_rate; } -template<> constexpr -measure rate_unit< Opm::Phase::GAS >() { return measure::gas_surface_rate; } - -template<> constexpr -measure rate_unit< rt::solvent >() { return measure::gas_surface_rate; } - -template<> constexpr -measure rate_unit< rt::reservoir_water >() { return measure::rate; } - -template<> constexpr -measure rate_unit< rt::reservoir_oil >() { return measure::rate; } - -template<> constexpr -measure rate_unit< rt::reservoir_gas >() { return measure::rate; } - -template<> constexpr -measure rate_unit < rt::productivity_index_water > () { return measure::liquid_productivity_index; } - -template<> constexpr -measure rate_unit < rt::productivity_index_oil > () { return measure::liquid_productivity_index; } - -template<> constexpr -measure rate_unit < rt::productivity_index_gas > () { return measure::gas_productivity_index; } - -template<> constexpr -measure rate_unit< rt::well_potential_water >() { return measure::liquid_surface_rate; } - -template<> constexpr -measure rate_unit< rt::well_potential_oil >() { return measure::liquid_surface_rate; } - -template<> constexpr -measure rate_unit< rt::well_potential_gas >() { return measure::gas_surface_rate; } - -double efac( const std::vector>& eff_factors, const std::string& name ) { - auto it = std::find_if( eff_factors.begin(), eff_factors.end(), - [&] ( const std::pair< std::string, double > elem ) - { return elem.first == name; } - ); - - return (it != eff_factors.end()) ? it->second : 1; -} - -template< rt phase, bool injection = true, bool polymer = false > -inline quantity rate( const fn_args& args ) { - double sum = 0.0; - - for( const auto& sched_well : args.schedule_wells ) { - const auto& name = sched_well.name(); - if( args.wells.count( name ) == 0 ) continue; - - double eff_fac = efac( args.eff_factors, name ); - - double concentration = polymer - ? sched_well.getPolymerProperties().m_polymerConcentration - : 1; - - const auto v = args.wells.at(name).rates.get(phase, 0.0) * eff_fac * concentration; - - if( ( v > 0 ) == injection ) - sum += v; - } - - if( !injection ) sum *= -1; - - if( polymer ) return { sum, measure::mass_rate }; - return { sum, rate_unit< phase >() }; -} - -template< bool injection > -inline quantity flowing( const fn_args& args ) { - const auto& wells = args.wells; - auto pred = [&wells]( const Opm::Well& w ) { - const auto& name = w.name(); - return w.isInjector( ) == injection - && wells.count( name ) > 0 - && wells.at( name ).flowing(); - }; - - return { double( std::count_if( args.schedule_wells.begin(), - args.schedule_wells.end(), - pred ) ), - measure::identity }; -} - -template< rt phase, bool injection = true, bool polymer = false > -inline quantity crate( const fn_args& args ) { - const quantity zero = { 0, rate_unit< phase >() }; - // The args.num value is the literal value which will go to the - // NUMS array in the eclispe SMSPEC file; the values in this array - // are offset 1 - whereas we need to use this index here to look - // up a completion with offset 0. - const size_t global_index = args.num - 1; - if( args.schedule_wells.empty() ) return zero; - - const auto& well = args.schedule_wells.front(); - const auto& name = well.name(); - if( args.wells.count( name ) == 0 ) return zero; - - const auto& well_data = args.wells.at( name ); - const auto& completion = std::find_if( well_data.connections.begin(), - well_data.connections.end(), - [=]( const Opm::data::Connection& c ) { - return c.index == global_index; - } ); - - if( completion == well_data.connections.end() ) return zero; - - double eff_fac = efac( args.eff_factors, name ); - double concentration = polymer - ? well.getPolymerProperties().m_polymerConcentration - : 1; - - auto v = completion->rates.get( phase, 0.0 ) * eff_fac * concentration; - if( ( v > 0 ) != injection ) return zero; - if( !injection ) v *= -1; - - if( polymer ) return { v, measure::mass_rate }; - return { v, rate_unit< phase >() }; -} - -template< rt phase, bool polymer = false > -inline quantity srate( const fn_args& args ) { - const quantity zero = { 0, rate_unit< phase >() }; - // The args.num value is the literal value which will go to the - // NUMS array in the eclispe SMSPEC file; the values in this array - // are offset 1 - whereas we need to use this index here to look - // up a completion with offset 0. - const size_t segNumber = args.num; - if( args.schedule_wells.empty() ) return zero; - - const auto& well = args.schedule_wells.front(); - const auto& name = well.name(); - if( args.wells.count( name ) == 0 ) return zero; - - const auto& well_data = args.wells.at( name ); - - const auto& segment = well_data.segments.find(segNumber); - - if( segment == well_data.segments.end() ) return zero; - - double eff_fac = efac( args.eff_factors, name ); - double concentration = polymer - ? well.getPolymerProperties().m_polymerConcentration - : 1; - - auto v = segment->second.rates.get( phase, 0.0 ) * eff_fac * concentration; - //switch sign of rate - opposite convention in flow vs eclipse - v *= -1; - - if( polymer ) return { v, measure::mass_rate }; - return { v, rate_unit< phase >() }; -} - -inline quantity trans_factors ( const fn_args& args ) { - const quantity zero = { 0, measure::transmissibility }; - - if( args.schedule_wells.empty() ) return zero; - // Like completion rate we need to look - // up a connection with offset 0. - const size_t global_index = args.num - 1; - - const auto& well = args.schedule_wells.front(); - const auto& name = well.name(); - if( args.wells.count( name ) == 0 ) return zero; - - const auto& grid = args.grid; - const auto& connections = well.getConnections(); - - const auto& connection = std::find_if( - connections.begin(), - connections.end(), - [=]( const Opm::Connection& c ) { - return grid.getGlobalIndex(c.getI(), c.getJ(), c.getK()) == global_index; - } ); - - if( connection == connections.end() ) return zero; - - const auto& v = connection->CF(); - return { v, measure::transmissibility }; -} - -template -inline quantity segpress ( const fn_args& args ) { - const quantity zero = { 0, measure::pressure }; - - if( args.schedule_wells.empty() ) return zero; - // Like completion rate we need to look - // up a connection with offset 0. - const size_t segNumber = args.num; - if( args.schedule_wells.empty() ) return zero; - - const auto& well = args.schedule_wells.front(); - const auto& name = well.name(); - if( args.wells.count( name ) == 0 ) return zero; - - const auto& well_data = args.wells.at( name ); - - const auto& segment = well_data.segments.find(segNumber); - - if( segment == well_data.segments.end() ) return zero; - - - return { segment->second.pressures[ix], measure::pressure }; -} - -inline quantity bhp( const fn_args& args ) { - const quantity zero = { 0, measure::pressure }; - if( args.schedule_wells.empty() ) return zero; - - const auto p = args.wells.find( args.schedule_wells.front().name() ); - if( p == args.wells.end() ) return zero; - - return { p->second.bhp, measure::pressure }; -} - -inline quantity thp( const fn_args& args ) { - const quantity zero = { 0, measure::pressure }; - if( args.schedule_wells.empty() ) return zero; - - const auto p = args.wells.find( args.schedule_wells.front().name() ); - if( p == args.wells.end() ) return zero; - - return { p->second.thp, measure::pressure }; -} - -inline quantity bhp_history( const fn_args& args ) { - if( args.schedule_wells.empty() ) return { 0.0, measure::pressure }; - - const Opm::Well& sched_well = args.schedule_wells.front(); - - double bhp_hist; - if ( sched_well.isProducer( ) ) - bhp_hist = sched_well.getProductionProperties().BHPH; - else - bhp_hist = sched_well.getInjectionProperties().BHPH; - - return { bhp_hist, measure::pressure }; -} - -inline quantity thp_history( const fn_args& args ) { - if( args.schedule_wells.empty() ) return { 0.0, measure::pressure }; - - const Opm::Well& sched_well = args.schedule_wells.front(); - - double thp_hist; - if ( sched_well.isProducer() ) - thp_hist = sched_well.getProductionProperties().THPH; - else - thp_hist = sched_well.getInjectionProperties().THPH; - - return { thp_hist, measure::pressure }; -} - -template< Opm::Phase phase > -inline quantity production_history( const fn_args& args ) { - /* - * For well data, looking up historical rates (both for production and - * injection) before simulation actually starts is impossible and - * nonsensical. We therefore default to writing zero (which is what eclipse - * seems to do as well). - */ - - double sum = 0.0; - for( const auto& sched_well : args.schedule_wells ){ - - double eff_fac = efac( args.eff_factors, sched_well.name() ); - sum += sched_well.production_rate( args.st, phase ) * eff_fac; - } - - - return { sum, rate_unit< phase >() }; -} - -template< Opm::Phase phase > -inline quantity injection_history( const fn_args& args ) { - - double sum = 0.0; - for( const auto& sched_well : args.schedule_wells ){ - double eff_fac = efac( args.eff_factors, sched_well.name() ); - sum += sched_well.injection_rate( args.st, phase ) * eff_fac; - } - - - return { sum, rate_unit< phase >() }; -} - -inline quantity res_vol_production_target( const fn_args& args ) { - - double sum = 0.0; - for( const Opm::Well& sched_well : args.schedule_wells ) - if (sched_well.getProductionProperties().predictionMode) - sum += sched_well.getProductionProperties().ResVRate.getSI(); - - return { sum, measure::rate }; -} - -inline quantity duration( const fn_args& args ) { - return { args.duration, measure::time }; -} - -template -quantity region_rate( const fn_args& args ) { - double sum = 0; - const auto& well_connections = args.regionCache.connections( args.num ); - - for (const auto& pair : well_connections) { - - double eff_fac = efac( args.eff_factors, pair.first ); - - double rate = args.wells.get( pair.first , pair.second , phase ) * eff_fac; - - // We are asking for the production rate in an injector - or - // opposite. We just clamp to zero. - if ((rate > 0) != injection) - rate = 0; - - sum += rate; - } - - if( injection ) - return { sum, rate_unit< phase >() }; - else - return { -sum, rate_unit< phase >() }; -} - -template < rt phase, bool outputProducer = true, bool outputInjector = true> -inline quantity potential_rate( const fn_args& args ) { - double sum = 0.0; - - for( const auto& sched_well : args.schedule_wells ) { - const auto& name = sched_well.name(); - if( args.wells.count( name ) == 0 ) continue; - - if (sched_well.isInjector() && outputInjector) { - const auto v = args.wells.at(name).rates.get(phase, 0.0); - sum += v; - } - else if (sched_well.isProducer() && outputProducer) { - const auto v = args.wells.at(name).rates.get(phase, 0.0); - sum += v; - } - } - - return { sum, rate_unit< phase >() }; -} - -template < bool isGroup, bool Producer, bool waterInjector, bool gasInjector> -inline quantity group_control( const fn_args& args ) { - - std::string g_name = ""; - if (isGroup) { - const quantity zero = { static_cast(0), Opm::UnitSystem::measure::identity}; - if( args.group_name.empty() ) return zero; - - g_name = args.group_name; - } - else { - g_name = "FIELD"; - } - - int cntl_mode = 0; - - // production control - if (Producer) { - const auto it_g = args.group.find(g_name); - if (it_g != args.group.end()) { - const auto& value = it_g->second.currentProdConstraint; - auto it_c = pCModeToPCntlMode.find(value); - if (it_c == pCModeToPCntlMode.end()) { - std::stringstream str; - str << "unknown control CMode: " << static_cast(value); - throw std::invalid_argument(str.str()); - } - cntl_mode = it_c->second; - } - } - // water injection control - else if (waterInjector){ - const auto it_g = args.group.find(g_name); - if (it_g != args.group.end()) { - const auto& value = it_g->second.currentWaterInjectionConstraint; - auto it_c = iCModeToICntlMode.find(value); - if (it_c == iCModeToICntlMode.end()) { - std::stringstream str; - str << "unknown control CMode: " << static_cast(value); - throw std::invalid_argument(str.str()); - } - cntl_mode = it_c->second; - } - } - - // gas injection control - else if (gasInjector){ - const auto it_g = args.group.find(g_name); - if (it_g != args.group.end()) { - const auto& value = it_g->second.currentGasInjectionConstraint; - auto it_c = iCModeToICntlMode.find(value); - if (it_c == iCModeToICntlMode.end()) { - std::stringstream str; - str << "unknown control CMode: " << static_cast(value); - throw std::invalid_argument(str.str()); - } - cntl_mode = it_c->second; - } - } - - return {static_cast(cntl_mode), Opm::UnitSystem::measure::identity}; -} - -namespace { - bool well_control_mode_defined(const ::Opm::data::Well& xw) - { - using PMode = ::Opm::Well::ProducerCMode; - using IMode = ::Opm::Well::InjectorCMode; - - const auto& curr = xw.current_control; - - return (curr.isProducer && (curr.prod != PMode::CMODE_UNDEFINED)) - || (!curr.isProducer && (curr.inj != IMode::CMODE_UNDEFINED)); - } -} - -inline quantity well_control_mode( const fn_args& args ) { - const auto unit = Opm::UnitSystem::measure::identity; - - if (args.schedule_wells.empty()) { - // No wells. Possibly determining pertinent unit of measure - // during SMSPEC configuration. - return { 0.0, unit }; - } - - const auto& well = args.schedule_wells.front(); - auto xwPos = args.wells.find(well.name()); - if (xwPos == args.wells.end()) { - // No dynamic results for 'well'. Treat as shut/stopped. - return { 0.0, unit }; - } - - if (! well_control_mode_defined(xwPos->second)) { - // No dynamic control mode defined. Use input control. - const auto wmctl = ::Opm::eclipseControlMode(well, args.st); - - return { static_cast(wmctl), unit }; - } - - // Well has simulator-provided active control mode. Pick the - // appropriate value depending on well type (producer/injector). - const auto& curr = xwPos->second.current_control; - const auto wmctl = curr.isProducer - ? ::Opm::eclipseControlMode(curr.prod, well.getStatus()) - : ::Opm::eclipseControlMode(curr.inj, well.injectorType(), - well.getStatus()); - - return { static_cast(wmctl), unit }; -} - -/* - * A small DSL, really poor man's function composition, to avoid massive - * repetition when declaring the handlers for each individual keyword. bin_op - * and its aliases will apply the pair of functions F and G that all take const - * fn_args& and return quantity, making them composable. - */ -template< typename F, typename G, typename Op > -struct bin_op { - bin_op( F fn, G gn = {} ) : f( fn ), g( gn ) {} - quantity operator()( const fn_args& args ) const { - return Op()( f( args ), g( args ) ); - } - - private: - F f; - G g; -}; - -template< typename F, typename G > -auto mul( F f, G g ) -> bin_op< F, G, std::multiplies< quantity > > -{ return { f, g }; } - -template< typename F, typename G > -auto sum( F f, G g ) -> bin_op< F, G, std::plus< quantity > > -{ return { f, g }; } - -template< typename F, typename G > -auto div( F f, G g ) -> bin_op< F, G, std::divides< quantity > > -{ return { f, g }; } - -template< typename F, typename G > -auto sub( F f, G g ) -> bin_op< F, G, std::minus< quantity > > -{ return { f, g }; } - -using ofun = std::function< quantity( const fn_args& ) >; - -static const std::unordered_map< std::string, ofun > funs = { - { "WWIR", rate< rt::wat, injector > }, - { "WOIR", rate< rt::oil, injector > }, - { "WGIR", rate< rt::gas, injector > }, - { "WNIR", rate< rt::solvent, injector > }, - { "WCIR", rate< rt::wat, injector, polymer > }, - { "WVIR", sum( sum( rate< rt::reservoir_water, injector >, rate< rt::reservoir_oil, injector > ), - rate< rt::reservoir_gas, injector > ) }, - - { "WWIT", mul( rate< rt::wat, injector >, duration ) }, - { "WOIT", mul( rate< rt::oil, injector >, duration ) }, - { "WGIT", mul( rate< rt::gas, injector >, duration ) }, - { "WNIT", mul( rate< rt::solvent, injector >, duration ) }, - { "WCIT", mul( rate< rt::wat, injector, polymer >, duration ) }, - { "WVIT", mul( sum( sum( rate< rt::reservoir_water, injector >, rate< rt::reservoir_oil, injector > ), - rate< rt::reservoir_gas, injector > ), duration ) }, - - { "WWPR", rate< rt::wat, producer > }, - { "WOPR", rate< rt::oil, producer > }, - { "WGPR", rate< rt::gas, producer > }, - { "WNPR", rate< rt::solvent, producer > }, - - { "WGPRS", rate< rt::dissolved_gas, producer > }, - { "WGPRF", sub( rate< rt::gas, producer >, rate< rt::dissolved_gas, producer > ) }, - { "WOPRS", rate< rt::vaporized_oil, producer > }, - { "WOPRF", sub (rate < rt::oil, producer >, rate< rt::vaporized_oil, producer > ) }, - { "WVPR", sum( sum( rate< rt::reservoir_water, producer >, rate< rt::reservoir_oil, producer > ), - rate< rt::reservoir_gas, producer > ) }, - { "WGVPR", rate< rt::reservoir_gas, producer > }, - - { "WLPR", sum( rate< rt::wat, producer >, rate< rt::oil, producer > ) }, - { "WWPT", mul( rate< rt::wat, producer >, duration ) }, - { "WOPT", mul( rate< rt::oil, producer >, duration ) }, - { "WGPT", mul( rate< rt::gas, producer >, duration ) }, - { "WNPT", mul( rate< rt::solvent, producer >, duration ) }, - { "WLPT", mul( sum( rate< rt::wat, producer >, rate< rt::oil, producer > ), - duration ) }, - - { "WGPTS", mul( rate< rt::dissolved_gas, producer >, duration )}, - { "WGPTF", sub( mul( rate< rt::gas, producer >, duration ), - mul( rate< rt::dissolved_gas, producer >, duration ))}, - { "WOPTS", mul( rate< rt::vaporized_oil, producer >, duration )}, - { "WOPTF", sub( mul( rate< rt::oil, producer >, duration ), - mul( rate< rt::vaporized_oil, producer >, duration ))}, - { "WVPT", mul( sum( sum( rate< rt::reservoir_water, producer >, rate< rt::reservoir_oil, producer > ), - rate< rt::reservoir_gas, producer > ), duration ) }, - - { "WWCT", div( rate< rt::wat, producer >, - sum( rate< rt::wat, producer >, rate< rt::oil, producer > ) ) }, - { "GWCT", div( rate< rt::wat, producer >, - sum( rate< rt::wat, producer >, rate< rt::oil, producer > ) ) }, - { "WGOR", div( rate< rt::gas, producer >, rate< rt::oil, producer > ) }, - { "GGOR", div( rate< rt::gas, producer >, rate< rt::oil, producer > ) }, - { "WGLR", div( rate< rt::gas, producer >, - sum( rate< rt::wat, producer >, rate< rt::oil, producer > ) ) }, - - { "WBHP", bhp }, - { "WTHP", thp }, - { "WVPRT", res_vol_production_target }, - - { "WMCTL", well_control_mode }, - - { "GWIR", rate< rt::wat, injector > }, - { "WGVIR", rate< rt::reservoir_gas, injector >}, - { "WWVIR", rate< rt::reservoir_water, injector >}, - { "GOIR", rate< rt::oil, injector > }, - { "GGIR", rate< rt::gas, injector > }, - { "GNIR", rate< rt::solvent, injector > }, - { "GCIR", rate< rt::wat, injector, polymer > }, - { "GVIR", sum( sum( rate< rt::reservoir_water, injector >, rate< rt::reservoir_oil, injector > ), - rate< rt::reservoir_gas, injector > ) }, - { "GWIT", mul( rate< rt::wat, injector >, duration ) }, - { "GOIT", mul( rate< rt::oil, injector >, duration ) }, - { "GGIT", mul( rate< rt::gas, injector >, duration ) }, - { "GNIT", mul( rate< rt::solvent, injector >, duration ) }, - { "GCIT", mul( rate< rt::wat, injector, polymer >, duration ) }, - { "GVIT", mul( sum( sum( rate< rt::reservoir_water, injector >, rate< rt::reservoir_oil, injector > ), - rate< rt::reservoir_gas, injector > ), duration ) }, - - { "GWPR", rate< rt::wat, producer > }, - { "GOPR", rate< rt::oil, producer > }, - { "GGPR", rate< rt::gas, producer > }, - { "GNPR", rate< rt::solvent, producer > }, - { "GOPRS", rate< rt::vaporized_oil, producer > }, - { "GOPRF", sub (rate < rt::oil, producer >, rate< rt::vaporized_oil, producer > ) }, - { "GLPR", sum( rate< rt::wat, producer >, rate< rt::oil, producer > ) }, - { "GVPR", sum( sum( rate< rt::reservoir_water, producer >, rate< rt::reservoir_oil, producer > ), - rate< rt::reservoir_gas, producer > ) }, - - { "GWPT", mul( rate< rt::wat, producer >, duration ) }, - { "GOPT", mul( rate< rt::oil, producer >, duration ) }, - { "GGPT", mul( rate< rt::gas, producer >, duration ) }, - { "GNPT", mul( rate< rt::solvent, producer >, duration ) }, - { "GOPTS", mul( rate< rt::vaporized_oil, producer >, duration ) }, - { "GOPTF", mul( sub (rate < rt::oil, producer >, - rate< rt::vaporized_oil, producer > ), - duration ) }, - { "GLPT", mul( sum( rate< rt::wat, producer >, rate< rt::oil, producer > ), - duration ) }, - { "GVPT", mul( sum( sum( rate< rt::reservoir_water, producer >, rate< rt::reservoir_oil, producer > ), - rate< rt::reservoir_gas, producer > ), duration ) }, - // Group potential - { "GWPP", potential_rate< rt::well_potential_water , true, false>}, - { "GOPP", potential_rate< rt::well_potential_oil , true, false>}, - { "GGPP", potential_rate< rt::well_potential_gas , true, false>}, - { "GWPI", potential_rate< rt::well_potential_water , false, true>}, - { "GOPI", potential_rate< rt::well_potential_oil , false, true>}, - { "GGPI", potential_rate< rt::well_potential_gas , false, true>}, - - //Group control mode - { "GMCTP", group_control< true, true, false, false >}, - { "GMCTW", group_control< true, false, true, false >}, - { "GMCTG", group_control< true, false, false, true >}, - - { "WWPRH", production_history< Opm::Phase::WATER > }, - { "WOPRH", production_history< Opm::Phase::OIL > }, - { "WGPRH", production_history< Opm::Phase::GAS > }, - { "WLPRH", sum( production_history< Opm::Phase::WATER >, - production_history< Opm::Phase::OIL > ) }, - - { "WWPTH", mul( production_history< Opm::Phase::WATER >, duration ) }, - { "WOPTH", mul( production_history< Opm::Phase::OIL >, duration ) }, - { "WGPTH", mul( production_history< Opm::Phase::GAS >, duration ) }, - { "WLPTH", mul( sum( production_history< Opm::Phase::WATER >, - production_history< Opm::Phase::OIL > ), - duration ) }, - - { "WWIRH", injection_history< Opm::Phase::WATER > }, - { "WOIRH", injection_history< Opm::Phase::OIL > }, - { "WGIRH", injection_history< Opm::Phase::GAS > }, - { "WWITH", mul( injection_history< Opm::Phase::WATER >, duration ) }, - { "WOITH", mul( injection_history< Opm::Phase::OIL >, duration ) }, - { "WGITH", mul( injection_history< Opm::Phase::GAS >, duration ) }, - - /* From our point of view, injectors don't have water cuts and div/sum will return 0.0 */ - { "WWCTH", div( production_history< Opm::Phase::WATER >, - sum( production_history< Opm::Phase::WATER >, - production_history< Opm::Phase::OIL > ) ) }, - - /* We do not support mixed injections, and gas/oil is undefined when oil is - * zero (i.e. pure gas injector), so always output 0 if this is an injector - */ - { "WGORH", div( production_history< Opm::Phase::GAS >, - production_history< Opm::Phase::OIL > ) }, - { "WGLRH", div( production_history< Opm::Phase::GAS >, - sum( production_history< Opm::Phase::WATER >, - production_history< Opm::Phase::OIL > ) ) }, - - { "WTHPH", thp_history }, - { "WBHPH", bhp_history }, - - { "GWPRH", production_history< Opm::Phase::WATER > }, - { "GOPRH", production_history< Opm::Phase::OIL > }, - { "GGPRH", production_history< Opm::Phase::GAS > }, - { "GLPRH", sum( production_history< Opm::Phase::WATER >, - production_history< Opm::Phase::OIL > ) }, - { "GWIRH", injection_history< Opm::Phase::WATER > }, - { "GOIRH", injection_history< Opm::Phase::OIL > }, - { "GGIRH", injection_history< Opm::Phase::GAS > }, - { "GGORH", div( production_history< Opm::Phase::GAS >, - production_history< Opm::Phase::OIL > ) }, - { "GWCTH", div( production_history< Opm::Phase::WATER >, - sum( production_history< Opm::Phase::WATER >, - production_history< Opm::Phase::OIL > ) ) }, - - { "GWPTH", mul( production_history< Opm::Phase::WATER >, duration ) }, - { "GOPTH", mul( production_history< Opm::Phase::OIL >, duration ) }, - { "GGPTH", mul( production_history< Opm::Phase::GAS >, duration ) }, - { "GGPRF", sub( rate < rt::gas, producer >, rate< rt::dissolved_gas, producer > )}, - { "GGPRS", rate< rt::dissolved_gas, producer> }, - { "GGPTF", mul( sub( rate < rt::gas, producer >, rate< rt::dissolved_gas, producer > ), - duration ) }, - { "GGPTS", mul( rate< rt::dissolved_gas, producer>, duration ) }, - { "GGLR", div( rate< rt::gas, producer >, - sum( rate< rt::wat, producer >, - rate< rt::oil, producer > ) ) }, - { "GGLRH", div( production_history< Opm::Phase::GAS >, - sum( production_history< Opm::Phase::WATER >, - production_history< Opm::Phase::OIL > ) ) }, - { "GLPTH", mul( sum( production_history< Opm::Phase::WATER >, - production_history< Opm::Phase::OIL > ), - duration ) }, - { "GWITH", mul( injection_history< Opm::Phase::WATER >, duration ) }, - { "GGITH", mul( injection_history< Opm::Phase::GAS >, duration ) }, - { "GMWIN", flowing< injector > }, - { "GMWPR", flowing< producer > }, - - { "GVPRT", res_vol_production_target }, - - { "CWIR", crate< rt::wat, injector > }, - { "CGIR", crate< rt::gas, injector > }, - { "CCIR", crate< rt::wat, injector, polymer > }, - { "CWIT", mul( crate< rt::wat, injector >, duration ) }, - { "CGIT", mul( crate< rt::gas, injector >, duration ) }, - { "CNIT", mul( crate< rt::solvent, injector >, duration ) }, - - { "CWPR", crate< rt::wat, producer > }, - { "COPR", crate< rt::oil, producer > }, - { "CGPR", crate< rt::gas, producer > }, - { "CGFR", sub(crate, crate) }, - { "COFR", sub(crate, crate) }, - { "CWFR", sub(crate, crate) }, - { "CWCT", div( crate< rt::wat, producer >, - sum( crate< rt::wat, producer >, crate< rt::oil, producer > ) ) }, - { "CGOR", div( crate< rt::gas, producer >, crate< rt::oil, producer > ) }, - // Minus for injection rates and pluss for production rate - { "CNFR", sub( crate< rt::solvent, producer >, crate) }, - { "CWPT", mul( crate< rt::wat, producer >, duration ) }, - { "COPT", mul( crate< rt::oil, producer >, duration ) }, - { "CGPT", mul( crate< rt::gas, producer >, duration ) }, - { "CNPT", mul( crate< rt::solvent, producer >, duration ) }, - { "CCIT", mul( crate< rt::wat, injector, polymer >, duration ) }, - { "CCPT", mul( crate< rt::wat, producer, polymer >, duration ) }, - { "CTFAC", trans_factors }, - - { "FWPR", rate< rt::wat, producer > }, - { "FOPR", rate< rt::oil, producer > }, - { "FGPR", rate< rt::gas, producer > }, - { "FNPR", rate< rt::solvent, producer > }, - { "FVPR", sum( sum( rate< rt::reservoir_water, producer>, rate< rt::reservoir_oil, producer >), - rate< rt::reservoir_gas, producer>)}, - { "FGPRS", rate< rt::dissolved_gas, producer > }, - { "FGPRF", sub( rate< rt::gas, producer >, rate< rt::dissolved_gas, producer > ) }, - { "FOPRS", rate< rt::vaporized_oil, producer > }, - { "FOPRF", sub (rate < rt::oil, producer >, rate< rt::vaporized_oil, producer > ) }, - - { "FLPR", sum( rate< rt::wat, producer >, rate< rt::oil, producer > ) }, - { "FWPT", mul( rate< rt::wat, producer >, duration ) }, - { "FOPT", mul( rate< rt::oil, producer >, duration ) }, - { "FGPT", mul( rate< rt::gas, producer >, duration ) }, - { "FNPT", mul( rate< rt::solvent, producer >, duration ) }, - { "FLPT", mul( sum( rate< rt::wat, producer >, rate< rt::oil, producer > ), - duration ) }, - { "FVPT", mul(sum (sum( rate< rt::reservoir_water, producer>, rate< rt::reservoir_oil, producer >), - rate< rt::reservoir_gas, producer>), duration)}, - { "FGPTS", mul( rate< rt::dissolved_gas, producer > , duration )}, - { "FGPTF", mul( sub( rate< rt::gas, producer >, rate< rt::dissolved_gas, producer > ), duration )}, - { "FOPTS", mul( rate< rt::vaporized_oil, producer >, duration ) }, - { "FOPTF", mul( sub (rate < rt::oil, producer >, - rate< rt::vaporized_oil, producer > ), - duration ) }, - - { "FWIR", rate< rt::wat, injector > }, - { "FOIR", rate< rt::oil, injector > }, - { "FGIR", rate< rt::gas, injector > }, - { "FNIR", rate< rt::solvent, injector > }, - { "FCIR", rate< rt::wat, injector, polymer > }, - { "FCPR", rate< rt::wat, producer, polymer > }, - { "FVIR", sum( sum( rate< rt::reservoir_water, injector>, rate< rt::reservoir_oil, injector >), - rate< rt::reservoir_gas, injector>)}, - - { "FLIR", sum( rate< rt::wat, injector >, rate< rt::oil, injector > ) }, - { "FWIT", mul( rate< rt::wat, injector >, duration ) }, - { "FOIT", mul( rate< rt::oil, injector >, duration ) }, - { "FGIT", mul( rate< rt::gas, injector >, duration ) }, - { "FNIT", mul( rate< rt::solvent, injector >, duration ) }, - { "FCIT", mul( rate< rt::wat, injector, polymer >, duration ) }, - { "FCPT", mul( rate< rt::wat, producer, polymer >, duration ) }, - { "FLIT", mul( sum( rate< rt::wat, injector >, rate< rt::oil, injector > ), - duration ) }, - { "FVIT", mul( sum( sum( rate< rt::reservoir_water, injector>, rate< rt::reservoir_oil, injector >), - rate< rt::reservoir_gas, injector>), duration)}, - // Field potential - { "FWPP", potential_rate< rt::well_potential_water , true, false>}, - { "FOPP", potential_rate< rt::well_potential_oil , true, false>}, - { "FGPP", potential_rate< rt::well_potential_gas , true, false>}, - { "FWPI", potential_rate< rt::well_potential_water , false, true>}, - { "FOPI", potential_rate< rt::well_potential_oil , false, true>}, - { "FGPI", potential_rate< rt::well_potential_gas , false, true>}, - - - { "FWPRH", production_history< Opm::Phase::WATER > }, - { "FOPRH", production_history< Opm::Phase::OIL > }, - { "FGPRH", production_history< Opm::Phase::GAS > }, - { "FLPRH", sum( production_history< Opm::Phase::WATER >, - production_history< Opm::Phase::OIL > ) }, - { "FWPTH", mul( production_history< Opm::Phase::WATER >, duration ) }, - { "FOPTH", mul( production_history< Opm::Phase::OIL >, duration ) }, - { "FGPTH", mul( production_history< Opm::Phase::GAS >, duration ) }, - { "FLPTH", mul( sum( production_history< Opm::Phase::WATER >, - production_history< Opm::Phase::OIL > ), - duration ) }, - - { "FWIRH", injection_history< Opm::Phase::WATER > }, - { "FOIRH", injection_history< Opm::Phase::OIL > }, - { "FGIRH", injection_history< Opm::Phase::GAS > }, - { "FWITH", mul( injection_history< Opm::Phase::WATER >, duration ) }, - { "FOITH", mul( injection_history< Opm::Phase::OIL >, duration ) }, - { "FGITH", mul( injection_history< Opm::Phase::GAS >, duration ) }, - - { "FWCT", div( rate< rt::wat, producer >, - sum( rate< rt::wat, producer >, rate< rt::oil, producer > ) ) }, - { "FGOR", div( rate< rt::gas, producer >, rate< rt::oil, producer > ) }, - { "FGLR", div( rate< rt::gas, producer >, - sum( rate< rt::wat, producer >, rate< rt::oil, producer > ) ) }, - { "FWCTH", div( production_history< Opm::Phase::WATER >, - sum( production_history< Opm::Phase::WATER >, - production_history< Opm::Phase::OIL > ) ) }, - { "FGORH", div( production_history< Opm::Phase::GAS >, - production_history< Opm::Phase::OIL > ) }, - { "FGLRH", div( production_history< Opm::Phase::GAS >, - sum( production_history< Opm::Phase::WATER >, - production_history< Opm::Phase::OIL > ) ) }, - { "FMWIN", flowing< injector > }, - { "FMWPR", flowing< producer > }, - { "FVPRT", res_vol_production_target }, - - //Field control mode - { "FMCTP", group_control< false, true, false, false >}, - { "FMCTW", group_control< false, false, true, false >}, - { "FMCTG", group_control< false, false, false, true >}, - - /* Region properties */ - { "ROIR" , region_rate< rt::oil, injector > }, - { "RGIR" , region_rate< rt::gas, injector > }, - { "RWIR" , region_rate< rt::wat, injector > }, - { "ROPR" , region_rate< rt::oil, producer > }, - { "RGPR" , region_rate< rt::gas, producer > }, - { "RWPR" , region_rate< rt::wat, producer > }, - { "ROIT" , mul( region_rate< rt::oil, injector >, duration ) }, - { "RGIT" , mul( region_rate< rt::gas, injector >, duration ) }, - { "RWIT" , mul( region_rate< rt::wat, injector >, duration ) }, - { "ROPT" , mul( region_rate< rt::oil, producer >, duration ) }, - { "RGPT" , mul( region_rate< rt::gas, producer >, duration ) }, - { "RWPT" , mul( region_rate< rt::wat, producer >, duration ) }, - //Multisegment well segment data - { "SOFR", srate< rt::oil > }, - { "SWFR", srate< rt::wat > }, - { "SGFR", srate< rt::gas > }, - { "SPR", segpress }, - { "SPRD", segpress }, - { "SPRDH", segpress }, - { "SPRDF", segpress }, - { "SPRDA", segpress }, - // Well productivity index - { "WPIW", potential_rate< rt::productivity_index_water >}, - { "WPIO", potential_rate< rt::productivity_index_oil >}, - { "WPIG", potential_rate< rt::productivity_index_gas >}, - { "WPIL", sum( potential_rate< rt::productivity_index_water >, potential_rate< rt::productivity_index_oil>)}, - // Well potential - { "WWPP", potential_rate< rt::well_potential_water , true, false>}, - { "WOPP", potential_rate< rt::well_potential_oil , true, false>}, - { "WGPP", potential_rate< rt::well_potential_gas , true, false>}, - { "WWPI", potential_rate< rt::well_potential_water , false, true>}, - { "WWIP", potential_rate< rt::well_potential_water , false, true>}, // Alias for 'WWPI' - { "WOPI", potential_rate< rt::well_potential_oil , false, true>}, - { "WGPI", potential_rate< rt::well_potential_gas , false, true>}, - { "WGIP", potential_rate< rt::well_potential_gas , false, true>}, // Alias for 'WGPI' -}; - - -static const std::unordered_map< std::string, Opm::UnitSystem::measure> single_values_units = { - {"TCPU" , Opm::UnitSystem::measure::identity }, - {"ELAPSED" , Opm::UnitSystem::measure::identity }, - {"NEWTON" , Opm::UnitSystem::measure::identity }, - {"NLINERS" , Opm::UnitSystem::measure::identity }, - {"NLINSMIN" , Opm::UnitSystem::measure::identity }, - {"NLINSMAX" , Opm::UnitSystem::measure::identity }, - {"MLINEARS" , Opm::UnitSystem::measure::identity }, - {"MSUMLINS" , Opm::UnitSystem::measure::identity }, - {"MSUMNEWT" , Opm::UnitSystem::measure::identity }, - {"TCPUTS" , Opm::UnitSystem::measure::identity }, - {"TIMESTEP" , Opm::UnitSystem::measure::time }, - {"TCPUDAY" , Opm::UnitSystem::measure::time }, - {"STEPTYPE" , Opm::UnitSystem::measure::identity }, - {"TELAPLIN" , Opm::UnitSystem::measure::time }, - {"FWIP" , Opm::UnitSystem::measure::liquid_surface_volume }, - {"FOIP" , Opm::UnitSystem::measure::liquid_surface_volume }, - {"FGIP" , Opm::UnitSystem::measure::gas_surface_volume }, - {"FOIPL" , Opm::UnitSystem::measure::liquid_surface_volume }, - {"FOIPG" , Opm::UnitSystem::measure::liquid_surface_volume }, - {"FGIPL" , Opm::UnitSystem::measure::gas_surface_volume }, - {"FGIPG" , Opm::UnitSystem::measure::gas_surface_volume }, - {"FPR" , Opm::UnitSystem::measure::pressure }, - -}; - -static const std::unordered_map< std::string, Opm::UnitSystem::measure> region_units = { - {"RPR" , Opm::UnitSystem::measure::pressure}, - {"ROIP" , Opm::UnitSystem::measure::liquid_surface_volume }, - {"ROIPL" , Opm::UnitSystem::measure::liquid_surface_volume }, - {"ROIPG" , Opm::UnitSystem::measure::liquid_surface_volume }, - {"RGIP" , Opm::UnitSystem::measure::gas_surface_volume }, - {"RGIPL" , Opm::UnitSystem::measure::gas_surface_volume }, - {"RGIPG" , Opm::UnitSystem::measure::gas_surface_volume }, - {"RWIP" , Opm::UnitSystem::measure::liquid_surface_volume } -}; - -static const std::unordered_map< std::string, Opm::UnitSystem::measure> block_units = { - {"BPR" , Opm::UnitSystem::measure::pressure}, - {"BPRESSUR" , Opm::UnitSystem::measure::pressure}, - {"BSWAT" , Opm::UnitSystem::measure::identity}, - {"BWSAT" , Opm::UnitSystem::measure::identity}, - {"BSGAS" , Opm::UnitSystem::measure::identity}, - {"BGSAT" , Opm::UnitSystem::measure::identity}, - {"BOSAT" , Opm::UnitSystem::measure::identity}, - {"BWKR" , Opm::UnitSystem::measure::identity}, - {"BOKR" , Opm::UnitSystem::measure::identity}, - {"BKRO" , Opm::UnitSystem::measure::identity}, - {"BGKR" , Opm::UnitSystem::measure::identity}, - {"BKRG" , Opm::UnitSystem::measure::identity}, - {"BKRW" , Opm::UnitSystem::measure::identity}, - {"BWPC" , Opm::UnitSystem::measure::pressure}, - {"BGPC" , Opm::UnitSystem::measure::pressure}, - {"BVWAT" , Opm::UnitSystem::measure::viscosity}, - {"BWVIS" , Opm::UnitSystem::measure::viscosity}, - {"BVGAS" , Opm::UnitSystem::measure::viscosity}, - {"BGVIS" , Opm::UnitSystem::measure::viscosity}, - {"BVOIL" , Opm::UnitSystem::measure::viscosity}, - {"BOVIS" , Opm::UnitSystem::measure::viscosity}, -}; - -inline std::vector find_wells( const Opm::Schedule& schedule, - const Opm::EclIO::SummaryNode& node, - const int sim_step, - const Opm::out::RegionCache& regionCache ) { - const auto cat = node.category; - - switch (cat) { - case Opm::EclIO::SummaryNode::Category::Well: [[fallthrough]]; - case Opm::EclIO::SummaryNode::Category::Connection: [[fallthrough]]; - case Opm::EclIO::SummaryNode::Category::Segment: { - const auto& name = node.wgname; - - if (schedule.hasWell(node.wgname, sim_step)) { - return { schedule.getWell( name, sim_step ) }; - } else { - return {}; - } - } - - case Opm::EclIO::SummaryNode::Category::Group: { - const auto& name = node.wgname; - - if( !schedule.hasGroup( name ) ) return {}; - - return schedule.getChildWells2( name, sim_step); - } - - case Opm::EclIO::SummaryNode::Category::Field: - return schedule.getWells(sim_step); - - case Opm::EclIO::SummaryNode::Category::Region: { - std::vector wells; - - const auto region = node.number; - - for ( const auto& connection : regionCache.connections( region ) ){ - const auto& w_name = connection.first; - if (schedule.hasWell(w_name, sim_step)) { - const auto& well = schedule.getWell( w_name, sim_step ); - - const auto& it = std::find_if( wells.begin(), wells.end(), - [&] ( const Opm::Well& elem ) - { return elem.name() == well.name(); }); - if ( it == wells.end() ) - wells.push_back( well ); - } - } - - return wells; - } - - case Opm::EclIO::SummaryNode::Category::Aquifer: [[fallthrough]]; - case Opm::EclIO::SummaryNode::Category::Block: [[fallthrough]]; - case Opm::EclIO::SummaryNode::Category::Miscellaneous: - return {}; - } - - throw std::runtime_error("Unhandled summary node category in find_wells"); -} - -bool need_wells(const Opm::EclIO::SummaryNode& node) { - static const std::regex region_keyword_regex { "R[OGW][IP][RT]" }; - - switch (node.category) { - case Opm::EclIO::SummaryNode::Category::Connection: [[fallthrough]]; - case Opm::EclIO::SummaryNode::Category::Field: [[fallthrough]]; - case Opm::EclIO::SummaryNode::Category::Group: [[fallthrough]]; - case Opm::EclIO::SummaryNode::Category::Segment: [[fallthrough]]; - case Opm::EclIO::SummaryNode::Category::Well: - return true; - case Opm::EclIO::SummaryNode::Category::Region: - return std::regex_match(node.keyword, region_keyword_regex); - case Opm::EclIO::SummaryNode::Category::Aquifer: [[fallthrough]]; - case Opm::EclIO::SummaryNode::Category::Miscellaneous: [[fallthrough]]; - case Opm::EclIO::SummaryNode::Category::Block: - return false; - } - - throw std::runtime_error("Unhandled summary node category in need_wells"); -} - -void eval_udq(const Opm::Schedule& schedule, std::size_t sim_step, Opm::SummaryState& st) -{ - using namespace Opm; - - const UDQConfig& udq = schedule.getUDQConfig(sim_step); - const auto& func_table = udq.function_table(); - UDQContext context(func_table, st); - { - const std::vector wells = st.wells(); - - for (const auto& assign : udq.assignments(UDQVarType::WELL_VAR)) { - auto ws = assign.eval(wells); - for (const auto& well : wells) { - const auto& udq_value = ws[well]; - if (udq_value) - st.update_well_var(well, ws.name(), udq_value.value()); - } - } - - for (const auto& def : udq.definitions(UDQVarType::WELL_VAR)) { - auto ws = def.eval(context); - for (const auto& well : wells) { - const auto& udq_value = ws[well]; - if (udq_value) - st.update_well_var(well, def.keyword(), udq_value.value()); - } - } - } - - { - const std::vector groups = st.groups(); - - for (const auto& assign : udq.assignments(UDQVarType::GROUP_VAR)) { - auto ws = assign.eval(groups); - for (const auto& group : groups) { - const auto& udq_value = ws[group]; - if (udq_value) - st.update_group_var(group, ws.name(), udq_value.value()); - } - } - - for (const auto& def : udq.definitions(UDQVarType::GROUP_VAR)) { - auto ws = def.eval(context); - for (const auto& group : groups) { - const auto& udq_value = ws[group]; - if (udq_value) - st.update_group_var(group, def.keyword(), udq_value.value()); - } - } - } - - for (const auto& def : udq.definitions(UDQVarType::FIELD_VAR)) { - auto field_udq = def.eval(context); - if (field_udq[0]) - st.update(def.keyword(), field_udq[0].value()); - } -} - -void updateValue(const Opm::EclIO::SummaryNode& node, const double value, Opm::SummaryState& st) -{ - if (node.category == Opm::EclIO::SummaryNode::Category::Well) - st.update_well_var(node.wgname, node.keyword, value); - - else if (node.category == Opm::EclIO::SummaryNode::Category::Group) - st.update_group_var(node.wgname, node.keyword, value); - - else - st.update(node.unique_key(), value); -} - -/* - * The well efficiency factor will not impact the well rate itself, but is - * rather applied for accumulated values.The WEFAC can be considered to shut - * and open the well for short intervals within the same timestep, and the well - * is therefore solved at full speed. - * - * Groups are treated similarly as wells. The group's GEFAC is not applied for - * rates, only for accumulated volumes. When GEFAC is set for a group, it is - * considered that all wells are taken down simultaneously, and GEFAC is - * therefore not applied to the group's rate. However, any efficiency factors - * applied to the group's wells or sub-groups must be included. - * - * Regions and fields will have the well and group efficiency applied for both - * rates and accumulated values. - * - */ -struct EfficiencyFactor -{ - using Factor = std::pair; - using FacColl = std::vector; - - FacColl factors{}; - - void setFactors(const Opm::EclIO::SummaryNode& node, - const Opm::Schedule& schedule, - const std::vector& schedule_wells, - const int sim_step); -}; - -void EfficiencyFactor::setFactors(const Opm::EclIO::SummaryNode& node, - const Opm::Schedule& schedule, - const std::vector& schedule_wells, - const int sim_step) -{ - this->factors.clear(); - - const bool is_field { node.category == Opm::EclIO::SummaryNode::Category::Field } ; - const bool is_group { node.category == Opm::EclIO::SummaryNode::Category::Group } ; - const bool is_region { node.category == Opm::EclIO::SummaryNode::Category::Region } ; - const bool is_rate { node.type != Opm::EclIO::SummaryNode::Type::Total } ; - - if (!is_field && !is_group && !is_region && is_rate) - return; - - for( const auto& well : schedule_wells ) { - if (!well.hasBeenDefined(sim_step)) - continue; - - double eff_factor = well.getEfficiencyFactor(); - const auto* group_ptr = std::addressof(schedule.getGroup(well.groupName(), sim_step)); - - while (group_ptr) { - if (is_group && is_rate && group_ptr->name() == node.wgname ) - break; - - eff_factor *= group_ptr->getGroupEfficiencyFactor(); - - const auto parent_group = group_ptr->flow_group(); - - if (parent_group) - group_ptr = std::addressof(schedule.getGroup( parent_group.value(), sim_step )); - else - group_ptr = nullptr; - } - - this->factors.emplace_back( well.name(), eff_factor ); - } -} - -namespace Evaluator { - struct InputData - { - const Opm::EclipseState& es; - const Opm::Schedule& sched; - const Opm::EclipseGrid& grid; - const Opm::out::RegionCache& reg; - }; - - struct SimulatorResults - { - const Opm::data::WellRates& wellSol; - const Opm::data::Group& groupSol; - const std::map& single; - const std::map>& region; - const std::map, double>& block; - }; - - class Base - { - public: - virtual ~Base() {} - - virtual void update(const std::size_t sim_step, - const double stepSize, - const InputData& input, - const SimulatorResults& simRes, - Opm::SummaryState& st) const = 0; - }; - - class FunctionRelation : public Base - { - public: - explicit FunctionRelation(Opm::EclIO::SummaryNode node, ofun fcn) - : node_(std::move(node)) - , fcn_ (std::move(fcn)) - {} - - void update(const std::size_t sim_step, - const double stepSize, - const InputData& input, - const SimulatorResults& simRes, - Opm::SummaryState& st) const override - { - const auto get_wells = - need_wells(node_); - - const auto wells = get_wells - ? find_wells(input.sched, this->node_, - static_cast(sim_step), input.reg) - : std::vector{}; - - if (get_wells && wells.empty()) - // Parameter depends on well information, but no active - // wells apply at this sim_step. Nothing to do. - return; - - std::string group_name = this->node_.category == Opm::EclIO::SummaryNode::Category::Group ? this->node_.wgname : ""; - - EfficiencyFactor efac{}; - efac.setFactors(this->node_, input.sched, wells, sim_step); - - const fn_args args { - wells, group_name, stepSize, static_cast(sim_step), - std::max(0, this->node_.number), - st, simRes.wellSol, simRes.groupSol, input.reg, input.grid, - std::move(efac.factors) - }; - - const auto& usys = input.es.getUnits(); - const auto prm = this->fcn_(args); - - updateValue(this->node_, usys.from_si(prm.unit, prm.value), st); - } - - private: - Opm::EclIO::SummaryNode node_; - ofun fcn_; - }; - - class BlockValue : public Base - { - public: - explicit BlockValue(Opm::EclIO::SummaryNode node, - const Opm::UnitSystem::measure m) - : node_(std::move(node)) - , m_ (m) - {} - - void update(const std::size_t /* sim_step */, - const double /* stepSize */, - const InputData& input, - const SimulatorResults& simRes, - Opm::SummaryState& st) const override - { - auto xPos = simRes.block.find(this->lookupKey()); - if (xPos == simRes.block.end()) { - return; - } - - const auto& usys = input.es.getUnits(); - updateValue(this->node_, usys.from_si(this->m_, xPos->second), st); - } - - private: - Opm::EclIO::SummaryNode node_; - Opm::UnitSystem::measure m_; - - Opm::out::Summary::BlockValues::key_type lookupKey() const - { - return { this->node_.keyword, this->node_.number }; - } - }; - - class RegionValue : public Base - { - public: - explicit RegionValue(Opm::EclIO::SummaryNode node, - const Opm::UnitSystem::measure m) - : node_(std::move(node)) - , m_ (m) - {} - - void update(const std::size_t /* sim_step */, - const double /* stepSize */, - const InputData& input, - const SimulatorResults& simRes, - Opm::SummaryState& st) const override - { - if (this->node_.number < 0) - return; - - auto xPos = simRes.region.find(this->node_.keyword); - if (xPos == simRes.region.end()) - return; - - const auto ix = this->index(); - if (ix >= xPos->second.size()) - return; - - const auto val = xPos->second[ix]; - const auto& usys = input.es.getUnits(); - - updateValue(this->node_, usys.from_si(this->m_, val), st); - } - - private: - Opm::EclIO::SummaryNode node_; - Opm::UnitSystem::measure m_; - - std::vector::size_type index() const - { - return this->node_.number - 1; - } - }; - - class GlobalProcessValue : public Base - { - public: - explicit GlobalProcessValue(Opm::EclIO::SummaryNode node, - const Opm::UnitSystem::measure m) - : node_(std::move(node)) - , m_ (m) - {} - - void update(const std::size_t /* sim_step */, - const double /* stepSize */, - const InputData& input, - const SimulatorResults& simRes, - Opm::SummaryState& st) const override - { - auto xPos = simRes.single.find(this->node_.keyword); - if (xPos == simRes.single.end()) - return; - - const auto val = xPos->second; - const auto& usys = input.es.getUnits(); - - updateValue(this->node_, usys.from_si(this->m_, val), st); - } - - private: - Opm::EclIO::SummaryNode node_; - Opm::UnitSystem::measure m_; - }; - - class UserDefinedValue : public Base - { - public: - void update(const std::size_t /* sim_step */, - const double /* stepSize */, - const InputData& /* input */, - const SimulatorResults& /* simRes */, - Opm::SummaryState& /* st */) const override - { - // No-op - } - }; - - class Time : public Base - { - public: - explicit Time(std::string saveKey) - : saveKey_(std::move(saveKey)) - {} - - void update(const std::size_t /* sim_step */, - const double stepSize, - const InputData& input, - const SimulatorResults& /* simRes */, - Opm::SummaryState& st) const override - { - const auto& usys = input.es.getUnits(); - - const auto m = ::Opm::UnitSystem::measure::time; - const auto val = st.get_elapsed() + stepSize; - - st.update(this->saveKey_, usys.from_si(m, val)); - } - - private: - std::string saveKey_; - }; - - class Day : public Base - { - public: - explicit Day(std::string saveKey) - : saveKey_(std::move(saveKey)) - {} - - void update(const std::size_t /* sim_step */, - const double stepSize, - const InputData& input, - const SimulatorResults& /* simRes */, - Opm::SummaryState& st) const override - { - auto sim_time = make_sim_time(input.sched, st, stepSize); - st.update(this->saveKey_, sim_time.day()); - } - - private: - std::string saveKey_; - }; - - class Month : public Base - { - public: - explicit Month(std::string saveKey) - : saveKey_(std::move(saveKey)) - {} - - void update(const std::size_t /* sim_step */, - const double stepSize, - const InputData& input, - const SimulatorResults& /* simRes */, - Opm::SummaryState& st) const override - { - auto sim_time = make_sim_time(input.sched, st, stepSize); - st.update(this->saveKey_, sim_time.month()); - } - - private: - std::string saveKey_; - }; - - class Year : public Base - { - public: - explicit Year(std::string saveKey) - : saveKey_(std::move(saveKey)) - {} - - void update(const std::size_t /* sim_step */, - const double stepSize, - const InputData& input, - const SimulatorResults& /* simRes */, - Opm::SummaryState& st) const override - { - auto sim_time = make_sim_time(input.sched, st, stepSize); - st.update(this->saveKey_, sim_time.year()); - } - - private: - std::string saveKey_; - }; - - class Years : public Base - { - public: - explicit Years(std::string saveKey) - : saveKey_(std::move(saveKey)) - {} - - void update(const std::size_t /* sim_step */, - const double stepSize, - const InputData& /* input */, - const SimulatorResults& /* simRes */, - Opm::SummaryState& st) const override - { - using namespace ::Opm::unit; - - const auto val = st.get_elapsed() + stepSize; - - st.update(this->saveKey_, convert::to(val, ecl_year)); - } - - private: - std::string saveKey_; - }; - - class Factory - { - public: - struct Descriptor - { - std::string uniquekey{}; - std::string unit{}; - std::unique_ptr evaluator{}; - }; - - explicit Factory(const Opm::EclipseState& es, - const Opm::EclipseGrid& grid, - const Opm::SummaryState& st, - const Opm::UDQConfig& udq) - : es_(es), grid_(grid), st_(st), udq_(udq) - {} - - ~Factory() = default; - - Factory(const Factory&) = delete; - Factory(Factory&&) = delete; - Factory& operator=(const Factory&) = delete; - Factory& operator=(Factory&&) = delete; - - Descriptor create(const Opm::EclIO::SummaryNode&); - - private: - const Opm::EclipseState& es_; - const Opm::EclipseGrid& grid_; - const Opm::SummaryState& st_; - const Opm::UDQConfig& udq_; - - const Opm::EclIO::SummaryNode* node_; - - Opm::UnitSystem::measure paramUnit_; - ofun paramFunction_; - - Descriptor functionRelation(); - Descriptor blockValue(); - Descriptor regionValue(); - Descriptor globalProcessValue(); - Descriptor userDefinedValue(); - Descriptor unknownParameter(); - - bool isBlockValue(); - bool isRegionValue(); - bool isGlobalProcessValue(); - bool isFunctionRelation(); - bool isUserDefined(); - - std::string functionUnitString() const; - std::string directUnitString() const; - std::string userDefinedUnit() const; - }; - - Factory::Descriptor Factory::create(const Opm::EclIO::SummaryNode& node) - { - this->node_ = &node; - - if (this->isUserDefined()) - return this->userDefinedValue(); - - if (this->isBlockValue()) - return this->blockValue(); - - if (this->isRegionValue()) - return this->regionValue(); - - if (this->isGlobalProcessValue()) - return this->globalProcessValue(); - - if (this->isFunctionRelation()) - return this->functionRelation(); - - return this->unknownParameter(); - } - - Factory::Descriptor Factory::functionRelation() - { - auto desc = this->unknownParameter(); - - desc.unit = this->functionUnitString(); - desc.evaluator.reset(new FunctionRelation { - *this->node_, std::move(this->paramFunction_) - }); - - return desc; - } - - Factory::Descriptor Factory::blockValue() - { - auto desc = this->unknownParameter(); - - desc.unit = this->directUnitString(); - desc.evaluator.reset(new BlockValue { - *this->node_, this->paramUnit_ - }); - - return desc; - } - - Factory::Descriptor Factory::regionValue() - { - auto desc = this->unknownParameter(); - - desc.unit = this->directUnitString(); - desc.evaluator.reset(new RegionValue { - *this->node_, this->paramUnit_ - }); - - return desc; - } - - Factory::Descriptor Factory::globalProcessValue() - { - auto desc = this->unknownParameter(); - - desc.unit = this->directUnitString(); - desc.evaluator.reset(new GlobalProcessValue { - *this->node_, this->paramUnit_ - }); - - return desc; - } - - Factory::Descriptor Factory::userDefinedValue() - { - auto desc = this->unknownParameter(); - - desc.unit = this->userDefinedUnit(); - desc.evaluator.reset(new UserDefinedValue {}); - - return desc; - } - - Factory::Descriptor Factory::unknownParameter() - { - auto desc = Descriptor{}; - - desc.uniquekey = this->node_->unique_key(); - - return desc; - } - - bool Factory::isBlockValue() - { - auto pos = block_units.find(this->node_->keyword); - if (pos == block_units.end()) - return false; - - if (! this->grid_.cellActive(this->node_->number - 1)) - // 'node_' is a block value, but it is configured in a - // deactivated cell. Don't create an evaluation function. - return false; - - // 'node_' represents a block value in an active cell. - // Capture unit of measure and return true. - this->paramUnit_ = pos->second; - return true; - } - - bool Factory::isRegionValue() - { - auto pos = region_units.find(this->node_->keyword); - if (pos == region_units.end()) - return false; - - // 'node_' represents a region value. Capture unit - // of measure and return true. - this->paramUnit_ = pos->second; - return true; - } - - bool Factory::isGlobalProcessValue() - { - auto pos = single_values_units.find(this->node_->keyword); - if (pos == single_values_units.end()) - return false; - - // 'node_' represents a single value (i.e., global process) - // value. Capture unit of measure and return true. - this->paramUnit_ = pos->second; - return true; - } - - bool Factory::isFunctionRelation() - { - auto pos = funs.find(this->node_->keyword); - if (pos == funs.end()) - return false; - - // 'node_' represents a functional relation. - // Capture evaluation function and return true. - this->paramFunction_ = pos->second; - return true; - } - - bool Factory::isUserDefined() - { - return this->node_->is_user_defined(); - } - - std::string Factory::functionUnitString() const - { - const auto reg = Opm::out::RegionCache{}; - - const fn_args args { - {}, "", 0.0, 0, std::max(0, this->node_->number), - this->st_, {}, {}, reg, this->grid_, - {} - }; - - const auto prm = this->paramFunction_(args); - - return this->es_.getUnits().name(prm.unit); - } - - std::string Factory::directUnitString() const - { - return this->es_.getUnits().name(this->paramUnit_); - } - - std::string Factory::userDefinedUnit() const - { - const auto& kw = this->node_->keyword; - - return this->udq_.has_unit(kw) - ? this->udq_.unit(kw) : "?????"; - } -} // namespace Evaluator - -void reportUnsupportedKeywords(std::vector keywords) -{ - // Sort by location first, then keyword. - auto loc_kw_ordering = [](const Opm::SummaryConfigNode& n1, const Opm::SummaryConfigNode& n2) { - if (n1.location() == n2.location()) { - return n1.keyword() < n2.keyword(); - } - if (n1.location().filename == n2.location().filename) { - return n1.location().lineno < n2.location().lineno; - } - return n1.location().filename < n2.location().filename; - }; - std::sort(keywords.begin(), keywords.end(), loc_kw_ordering); - - // Reorder to remove duplicate { keyword, location } pairs, since - // that will give duplicate and therefore useless warnings. - auto same_kw_and_loc = [](const Opm::SummaryConfigNode& n1, const Opm::SummaryConfigNode& n2) { - return (n1.keyword() == n2.keyword()) && (n1.location() == n2.location()); - }; - auto uend = std::unique(keywords.begin(), keywords.end(), same_kw_and_loc); - - for (auto node = keywords.begin(); node != uend; ++node) { - const auto& location = node->location(); - ::Opm::OpmLog::warning("Unhandled summary keyword '" + node->keyword() + "' at " + location.filename + ", line " + std::to_string(location.lineno)); - } -} - -std::string makeWGName(std::string name) -{ - // Use default WGNAME if 'name' is empty or consists - // exlusively of white-space (space and tab) characters. - // - // Use 'name' itself otherwise. - - const auto use_dflt = name.empty() || - (name.find_first_not_of(" \t") == std::string::npos); - - return use_dflt ? std::string(":+:+:+:+") : std::move(name); -} - -class SummaryOutputParameters -{ -public: - using EvalPtr = std::unique_ptr; - using SMSpecPrm = Opm::EclIO::OutputStream:: - SummarySpecification::Parameters; - - SummaryOutputParameters() = default; - ~SummaryOutputParameters() = default; - - SummaryOutputParameters(const SummaryOutputParameters& rhs) = delete; - SummaryOutputParameters(SummaryOutputParameters&& rhs) = default; - - SummaryOutputParameters& - operator=(const SummaryOutputParameters& rhs) = delete; - - SummaryOutputParameters& - operator=(SummaryOutputParameters&& rhs) = default; - - void makeParameter(std::string keyword, - std::string name, - const int num, - std::string unit, - EvalPtr evaluator) - { - this->smspec_.add(std::move(keyword), std::move(name), - std::max (num, 0), std::move(unit)); - - this->evaluators_.push_back(std::move(evaluator)); - } - - const SMSpecPrm& summarySpecification() const - { - return this->smspec_; - } - - const std::vector& getEvaluators() const - { - return this->evaluators_; - } - -private: - SMSpecPrm smspec_{}; - std::vector evaluators_{}; -}; - -class SMSpecStreamDeferredCreation -{ -private: - using Spec = ::Opm::EclIO::OutputStream::SummarySpecification; - -public: - using ResultSet = ::Opm::EclIO::OutputStream::ResultSet; - using Formatted = ::Opm::EclIO::OutputStream::Formatted; - - explicit SMSpecStreamDeferredCreation(const Opm::InitConfig& initcfg, - const Opm::EclipseGrid& grid, - const std::time_t start, - const Opm::UnitSystem::UnitType utype); - - std::unique_ptr - createStream(const ResultSet& rset, const Formatted& fmt) const - { - return std::make_unique(rset, fmt, this->uconv(), - this->cartDims_, this->restart_, - this->start_); - } - -private: - Opm::UnitSystem::UnitType utype_; - std::array cartDims_; - Spec::StartTime start_; - Spec::RestartSpecification restart_{}; - - Spec::UnitConvention uconv() const; -}; - -SMSpecStreamDeferredCreation:: -SMSpecStreamDeferredCreation(const Opm::InitConfig& initcfg, - const Opm::EclipseGrid& grid, - const std::time_t start, - const Opm::UnitSystem::UnitType utype) - : utype_ (utype) - , cartDims_(grid.getNXYZ()) - , start_ (std::chrono::system_clock::from_time_t(start)) -{ - if (initcfg.restartRequested()) { - this->restart_.root = initcfg.getRestartRootName(); - this->restart_.step = initcfg.getRestartStep(); - } -} - -SMSpecStreamDeferredCreation::Spec::UnitConvention -SMSpecStreamDeferredCreation::uconv() const -{ - using UType = ::Opm::UnitSystem::UnitType; - - if (this->utype_ == UType::UNIT_TYPE_METRIC) - return Spec::UnitConvention::Metric; - - if (this->utype_ == UType::UNIT_TYPE_FIELD) - return Spec::UnitConvention::Field; - - if (this->utype_ == UType::UNIT_TYPE_LAB) - return Spec::UnitConvention::Lab; - - if (this->utype_ == UType::UNIT_TYPE_PVT_M) - return Spec::UnitConvention::Pvt_M; - - throw std::invalid_argument { - "Unsupported Unit Convention (" + - std::to_string(static_cast(this->utype_)) + ')' - }; -} - -std::unique_ptr -makeDeferredSMSpecCreation(const Opm::EclipseState& es, - const Opm::EclipseGrid& grid, - const Opm::Schedule& sched) -{ - return std::make_unique - (es.cfg().init(), grid, sched.posixStartTime(), - es.getUnits().getType()); -} - -std::string makeUpperCase(std::string input) -{ - for (auto& c : input) { - const auto u = std::toupper(static_cast(c)); - c = static_cast(u); - } - - return input; -} - -Opm::EclIO::OutputStream::ResultSet -makeResultSet(const Opm::IOConfig& iocfg, const std::string& basenm) -{ - const auto& base = basenm.empty() - ? makeUpperCase(iocfg.getBaseName()) - : basenm; - - return { iocfg.getOutputDir(), base }; -} - -} // Anonymous namespace - -class Opm::out::Summary::SummaryImplementation -{ -public: - explicit SummaryImplementation(const EclipseState& es, - const SummaryConfig& sumcfg, - const EclipseGrid& grid, - const Schedule& sched, - const std::string& basename); - - SummaryImplementation(const SummaryImplementation& rhs) = delete; - SummaryImplementation(SummaryImplementation&& rhs) = default; - SummaryImplementation& operator=(const SummaryImplementation& rhs) = delete; - SummaryImplementation& operator=(SummaryImplementation&& rhs) = default; - - void eval(const EclipseState& es, - const Schedule& sched, - const int sim_step, - const double duration, - const data::WellRates& well_solution, - const data::Group& group_solution, - const GlobalProcessParameters& single_values, - const RegionParameters& region_values, - const BlockValues& block_values, - SummaryState& st) const; - - void internal_store(const SummaryState& st, const int report_step); - void write(); - -private: - struct MiniStep - { - int id{0}; - int seq{-1}; - std::vector params{}; - }; - - using EvalPtr = SummaryOutputParameters::EvalPtr; - - std::reference_wrapper grid_; - Opm::out::RegionCache regCache_; - - std::unique_ptr deferredSMSpec_; - - Opm::EclIO::OutputStream::ResultSet rset_; - Opm::EclIO::OutputStream::Formatted fmt_; - Opm::EclIO::OutputStream::Unified unif_; - - int miniStepID_{0}; - int prevCreate_{-1}; - int prevReportStepID_{-1}; - std::vector::size_type numUnwritten_{0}; - - SummaryOutputParameters outputParameters_{}; - std::vector requiredRestartParameters_{}; - std::vector valueKeys_{}; - std::vector unwritten_{}; - - std::unique_ptr smspec_{}; - std::unique_ptr stream_{}; - - void configureTimeVectors(const EclipseState& es, const SummaryConfig& sumcfg); - - void configureSummaryInput(const EclipseState& es, - const SummaryConfig& sumcfg, - const EclipseGrid& grid, - const Schedule& sched); - - void configureRequiredRestartParameters(const SummaryConfig& sumcfg, - const Schedule& sched); - - MiniStep& getNextMiniStep(const int report_step); - const MiniStep& lastUnwritten() const; - - void write(const MiniStep& ms); - - void createSMSpecIfNecessary(); - void createSmryStreamIfNecessary(const int report_step); -}; - -Opm::out::Summary::SummaryImplementation:: -SummaryImplementation(const EclipseState& es, - const SummaryConfig& sumcfg, - const EclipseGrid& grid, - const Schedule& sched, - const std::string& basename) - : grid_ (std::cref(grid)) - , regCache_ (es.globalFieldProps().get_int("FIPNUM"), grid, sched) - , deferredSMSpec_(makeDeferredSMSpecCreation(es, grid, sched)) - , rset_ (makeResultSet(es.cfg().io(), basename)) - , fmt_ { es.cfg().io().getFMTOUT() } - , unif_ { es.cfg().io().getUNIFOUT() } -{ - this->configureTimeVectors(es, sumcfg); - this->configureSummaryInput(es, sumcfg, grid, sched); - this->configureRequiredRestartParameters(sumcfg, sched); -} - -void Opm::out::Summary::SummaryImplementation:: -internal_store(const SummaryState& st, const int report_step) -{ - auto& ms = this->getNextMiniStep(report_step); - - const auto nParam = this->valueKeys_.size(); - - for (auto i = decltype(nParam){0}; i < nParam; ++i) { - if (! st.has(this->valueKeys_[i])) - // Parameter not yet evaluated (e.g., well/group not - // yet active). Nothing to do here. - continue; - - ms.params[i] = st.get(this->valueKeys_[i]); - } -} - -void -Opm::out::Summary::SummaryImplementation:: -eval(const EclipseState& es, - const Schedule& sched, - const int sim_step, - const double duration, - const data::WellRates& well_solution, - const data::Group& group_solution, - const GlobalProcessParameters& single_values, - const RegionParameters& region_values, - const BlockValues& block_values, - Opm::SummaryState& st) const -{ - const Evaluator::InputData input { - es, sched, this->grid_, this->regCache_ - }; - - const Evaluator::SimulatorResults simRes { - well_solution, group_solution, single_values, region_values, block_values - }; - - for (auto& evalPtr : this->outputParameters_.getEvaluators()) { - evalPtr->update(sim_step, duration, input, simRes, st); - } - - for (auto& evalPtr : this->requiredRestartParameters_) { - evalPtr->update(sim_step, duration, input, simRes, st); - } -} - -void Opm::out::Summary::SummaryImplementation::write() -{ - const auto zero = std::vector::size_type{0}; - if (this->numUnwritten_ == zero) - // No unwritten data. Nothing to do so return early. - return; - - this->createSMSpecIfNecessary(); - - if (this->prevReportStepID_ < this->lastUnwritten().seq) { - this->smspec_->write(this->outputParameters_.summarySpecification()); - } - - for (auto i = 0*this->numUnwritten_; i < this->numUnwritten_; ++i) - this->write(this->unwritten_[i]); - - // Eagerly output last set of parameters to permanent storage. - this->stream_->flushStream(); - - // Reset "unwritten" counter to reflect the fact that we've - // output all stored ministeps. - this->numUnwritten_ = zero; -} - -void Opm::out::Summary::SummaryImplementation::write(const MiniStep& ms) -{ - this->createSmryStreamIfNecessary(ms.seq); - - if (this->prevReportStepID_ < ms.seq) { - // XXX: Should probably write SEQHDR = 0 here since - /// we do not know the actual encoding needed. - this->stream_->write("SEQHDR", std::vector{ ms.seq }); - this->prevReportStepID_ = ms.seq; - } - - this->stream_->write("MINISTEP", std::vector{ ms.id }); - this->stream_->write("PARAMS" , ms.params); -} - -void -Opm::out::Summary::SummaryImplementation:: -configureTimeVectors(const EclipseState& es, const SummaryConfig& sumcfg) -{ - const auto dfltwgname = std::string(":+:+:+:+"); - const auto dfltnum = 0; - - // XXX: Save keys might need/want to include a random component too. - auto makeKey = [this](const std::string& keyword) -> void - { - this->valueKeys_.push_back( - "SMSPEC.Internal." + keyword + ".Value.SAVE" - ); - }; - - // TIME - { - const auto& kw = std::string("TIME"); - makeKey(kw); - - const std::string& unit_string = es.getUnits().name(UnitSystem::measure::time); - auto eval = std::make_unique(this->valueKeys_.back()); - - this->outputParameters_ - .makeParameter(kw, dfltwgname, dfltnum, unit_string, std::move(eval)); - } - - if (sumcfg.hasKeyword("DAY")) { - const auto& kw = std::string("DAY"); - makeKey(kw); - - auto eval = std::make_unique(this->valueKeys_.back()); - this->outputParameters_ - .makeParameter(kw, dfltwgname, dfltnum, "", std::move(eval)); - } - - if (sumcfg.hasKeyword("MONTH")) { - const auto& kw = std::string("MONTH"); - makeKey(kw); - - auto eval = std::make_unique(this->valueKeys_.back()); - this->outputParameters_ - .makeParameter(kw, dfltwgname, dfltnum, "", std::move(eval)); - } - - if (sumcfg.hasKeyword("YEAR")) { - const auto& kw = std::string("YEAR"); - makeKey(kw); - - auto eval = std::make_unique(this->valueKeys_.back()); - this->outputParameters_ - .makeParameter(kw, dfltwgname, dfltnum, "", std::move(eval)); - } - - // YEARS - { - const auto& kw = std::string("YEARS"); - makeKey(kw); - - auto eval = std::make_unique(this->valueKeys_.back()); - - this->outputParameters_ - .makeParameter(kw, dfltwgname, dfltnum, kw, std::move(eval)); - } -} - -void -Opm::out::Summary::SummaryImplementation:: -configureSummaryInput(const EclipseState& es, - const SummaryConfig& sumcfg, - const EclipseGrid& grid, - const Schedule& sched) -{ - const auto st = SummaryState { - std::chrono::system_clock::from_time_t(sched.getStartTime()) - }; - - Evaluator::Factory fact { - es, grid, st, sched.getUDQConfig(sched.size() - 1) - }; - - auto unsuppkw = std::vector{}; - for (const auto& node : sumcfg) { - auto prmDescr = fact.create(node); - - if (! prmDescr.evaluator) { - // No known evaluation function/type for this keyword - unsuppkw.push_back(node); - continue; - } - - // This keyword has a known evaluation method. - - this->valueKeys_.push_back(std::move(prmDescr.uniquekey)); - - this->outputParameters_ - .makeParameter(node.keyword(), - makeWGName(node.namedEntity()), - node.number(), - std::move(prmDescr.unit), - std::move(prmDescr.evaluator)); - } - - if (! unsuppkw.empty()) - reportUnsupportedKeywords(std::move(unsuppkw)); -} - -void -Opm::out::Summary::SummaryImplementation:: -configureRequiredRestartParameters(const SummaryConfig& sumcfg, - const Schedule& sched) -{ - auto makeEvaluator = [&sumcfg, this](const Opm::EclIO::SummaryNode& node) -> void - { - if (sumcfg.hasSummaryKey(node.unique_key())) - // Handler already exists. Don't add second evaluation. - return; - - auto fcnPos = funs.find(node.keyword); - assert ((fcnPos != funs.end()) && - "Internal error creating required restart vectors"); - - auto eval = std::make_unique< - Evaluator::FunctionRelation>(node, fcnPos->second); - - this->requiredRestartParameters_.push_back(std::move(eval)); - }; - - for (const auto& node : requiredRestartVectors(sched)) - makeEvaluator(node); - - for (const auto& node : requiredSegmentVectors(sched)) - makeEvaluator(node); -} - -Opm::out::Summary::SummaryImplementation::MiniStep& -Opm::out::Summary::SummaryImplementation::getNextMiniStep(const int report_step) -{ - if (this->numUnwritten_ == this->unwritten_.size()) - this->unwritten_.emplace_back(); - - assert ((this->numUnwritten_ < this->unwritten_.size()) && - "Internal inconsistency in 'unwritten' counter"); - - auto& ms = this->unwritten_[this->numUnwritten_++]; - - ms.id = this->miniStepID_++; // MINSTEP IDs start at zero. - ms.seq = report_step; - - ms.params.resize(this->valueKeys_.size(), 0.0f); - - std::fill(ms.params.begin(), ms.params.end(), 0.0f); - - return ms; -} - -const Opm::out::Summary::SummaryImplementation::MiniStep& -Opm::out::Summary::SummaryImplementation::lastUnwritten() const -{ - assert (this->numUnwritten_ <= this->unwritten_.size()); - assert (this->numUnwritten_ > decltype(this->numUnwritten_){0}); - - return this->unwritten_[this->numUnwritten_ - 1]; -} - -void Opm::out::Summary::SummaryImplementation::createSMSpecIfNecessary() -{ - if (this->deferredSMSpec_) { - // We need an SMSPEC file and none exists. Create it and release - // the resources captured to make the deferred creation call. - this->smspec_ = this->deferredSMSpec_ - ->createStream(this->rset_, this->fmt_); - - this->deferredSMSpec_.reset(); - } -} - -void -Opm::out::Summary::SummaryImplementation:: -createSmryStreamIfNecessary(const int report_step) -{ - // Create stream if unset or if non-unified (separate) and new step. - - assert ((this->prevCreate_ <= report_step) && - "Inconsistent Report Step Sequence Detected"); - - const auto do_create = ! this->stream_ - || (! this->unif_.set && (this->prevCreate_ < report_step)); - - if (do_create) { - this->stream_ = Opm::EclIO::OutputStream:: - createSummaryFile(this->rset_, report_step, - this->fmt_, this->unif_); - - this->prevCreate_ = report_step; - } -} - -namespace { - -void validateElapsedTime(const double secs_elapsed, - const Opm::EclipseState& es, - const Opm::SummaryState& st) -{ - if (! (secs_elapsed < st.get_elapsed())) - return; - - const auto& usys = es.getUnits(); - const auto elapsed = usys.from_si(measure::time, secs_elapsed); - const auto prev_el = usys.from_si(measure::time, st.get_elapsed()); - const auto unt = '[' + std::string{ usys.name(measure::time) } + ']'; - - throw std::invalid_argument { - "Elapsed time (" - + std::to_string(elapsed) + ' ' + unt - + ") must not precede previous elapsed time (" - + std::to_string(prev_el) + ' ' + unt - + "). Incorrect restart time?" - }; -} - -} // Anonymous namespace - -namespace Opm { namespace out { - -Summary::Summary(const EclipseState& es, - const SummaryConfig& sumcfg, - const EclipseGrid& grid, - const Schedule& sched, - const std::string& basename) - : pImpl_(new SummaryImplementation(es, sumcfg, grid, sched, basename)) -{} - -void Summary::eval(SummaryState& st, - const int report_step, - const double secs_elapsed, - const EclipseState& es, - const Schedule& schedule, - const data::WellRates& well_solution, - const data::Group& group_solution, - const GlobalProcessParameters& single_values, - const RegionParameters& region_values, - const BlockValues& block_values) const -{ - validateElapsedTime(secs_elapsed, es, st); - - const double duration = secs_elapsed - st.get_elapsed(); - - /* Report_step is the one-based sequence number of the containing report. - * Report_step = 0 for the initial condition, before simulation starts. - * We typically don't get reports_step = 0 here. When outputting - * separate summary files 'report_step' is the number that gets - * incorporated into the filename extension. - * - * Sim_step is the timestep which has been effective in the simulator, - * and as such is the value necessary to use when looking up active - * wells, groups, connections &c in the Schedule object. */ - const auto sim_step = std::max( 0, report_step - 1 ); - - this->pImpl_->eval(es, schedule, sim_step, duration, - well_solution, group_solution, single_values, - region_values, block_values, st); - - eval_udq(schedule, sim_step, st); - - st.update_elapsed(duration); -} - -void Summary::add_timestep(const SummaryState& st, const int report_step) -{ - this->pImpl_->internal_store(st, report_step); -} - -void Summary::write() const -{ - this->pImpl_->write(); -} - -Summary::~Summary() {} - -}} // namespace Opm::out diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/Tables.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/Tables.cpp deleted file mode 100644 index dca0d46336..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/Tables.cpp +++ /dev/null @@ -1,2405 +0,0 @@ -/* - Copyright 2019 Equinor. - Copyright 2017 Statoil ASA. - Copyright 2016 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include - -#include -#include -#include // PVTW, PVCDO -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -using Ix = ::Opm::RestartIO::Helpers::VectorItems::TabDims::index; - -namespace { - - /// Convenience type alias for a callable entity that extracts the - /// independent and primary dependent variates of a single property - /// function table into a linearised output table. Calling the function - /// will assign the independent variate of the sub-table primID within - /// the table identified as tableID to column zero of 'table' and all - /// dependent variates to columns one &c of 'table'. The function call - /// must return the number of active (used) rows within the sub-table - /// through its return value. - using BuildDep = std::function< - std::size_t(const std::size_t tableID, - const std::size_t primID, - ::Opm::LinearisedOutputTable& table) - >; - - /// Create linearised, padded TAB vector entries for a collection of - /// tabulated saturation functions corresponding to a single input - /// keyword. - /// - /// \param[in] numTab Number of tables in this table collection. - /// - /// \param[in] numPrim Number of primary look-up keys for each table. - /// Mostly relevant (i.e., greater than one) for miscible oil - /// ("PVTO") or miscible gas ("PVTG") tables and typically - /// corresponds to the number of Rs/Rv entries from the TABDIMS - /// keyword. - /// - /// \param[in] numRows Number of rows to allocate for each padded - /// output table. - /// - /// \param[in] numDep Number of dependent variates (columns) in each - /// table of this collection of input tables. Total number of - /// columns in the result vector will be 1 + 2*numDep to account - /// for the independent variate, the dependent variates and the - /// derivatives of the dependent variates with respect to the - /// independent variate. - /// - /// \param[in] buildDeps Function object that implements the - /// protocol outlined for \code BuildDep::operator()() - /// \endcode. Typically initialised from a lambda expression. - /// - /// \return Linearised, padded TAB vector entries for a collection of - /// tabulated property functions (e.g., saturation functions or PVT - /// functions) corresponding to a single input keyword. Derivatives - /// included as additional columns. - std::vector - createPropfuncTable(const std::size_t numTab, - const std::size_t numPrim, - const std::size_t numRows, - const std::size_t numDep, - const double fillVal, - const BuildDep& buildDeps) - { - const auto numCols = 1 + 2*numDep; - - auto descr = ::Opm::DifferentiateOutputTable::Descriptor{}; - - auto linTable = ::Opm::LinearisedOutputTable { - numTab, numPrim, numRows, numCols, fillVal - }; - - // Note unusual loop counters here. Specifically, we mutate the - // members of 'descr' rather than using separate counters, which is - // the custom construction. The reason for this is that these - // members are also used in calcSlopes() to indicate which table - // subsection to analyse and compute derivatives for. With separate - // loop counters, we would need to form a new table descriptor for - // each call to calcSlopes(). - for (descr.tableID = 0*numTab; - descr.tableID < 1*numTab; ++descr.tableID) - { - for (descr.primID = 0*numPrim; - descr.primID < 1*numPrim; ++descr.primID) - { - descr.numActRows = - buildDeps(descr.tableID, descr.primID, linTable); - - // Derivatives. Use values already stored in linTable to - // take advantage of any unit conversion already applied. - // We don't have to do anything special for the units here. - // - // Note: argument 'descr' implies argument-dependent lookup - // whence we unambiguously invoke function calcSlopes() - // from namespace ::Opm::DifferentiateOutputTable. - calcSlopes(numDep, descr, linTable); - } - } - - return linTable.getDataDestructively(); - } -} // Anonymous - -/// Functions to facilitate generating TAB vector entries for tabulated -/// saturation functions. -namespace { namespace SatFunc { - namespace detail { - /// Create linearised, padded TAB vector entries for a collection of - /// tabulated saturation functions corresponding to a single input - /// keyword. - /// - /// \tparam BuildDependent Callable entity that extracts the - /// independent and primary dependent variates of a single - /// saturation function table into a linearised output table. - /// Must implement a function call operator of the form - /// \code - /// std::size_t - /// operator()(const std::size_t tableID, - /// const std::size_t primID, - /// LinearisedOutputTable& table); - /// \endcode - /// that will assign the independent variate of the sub-table - /// primID within the table identified as tableID to column zero - /// of 'table' and all dependent variates to columns one &c of - /// 'table'. The function call operator must return the number - /// of active (used) rows within the sub-table through its return - /// value. - /// - /// \param[in] numTab Number of tables in this table collection. - /// - /// \param[in] numRows Number of rows to allocate for each padded - /// output table. - /// - /// \param[in] numDep Number of dependent variates (columns) in each - /// table of this collection of input tables. Total number of - /// columns in the result vector will be 1 + 2*numDep to account - /// for the independent variate, the dependent variates and the - /// derivatives of the dependent variates with respect to the - /// independent variate. - /// - /// \param[in] buildDeps Function object that implements the - /// protocol outlined for \code BuildDependent::operator()() - /// \endcode. Typically a lambda expression. - /// - /// \return Linearised, padded TAB vector entries for a collection - /// of tabulated saturation functions corresponding to a single - /// input keyword. Derivatives included as additional columns. - template - std::vector - createSatfuncTable(const std::size_t numTab, - const std::size_t numRows, - const std::size_t numDep, - BuildDependent&& buildDeps) - { - // Saturation functions do not have sub-tables so the number of - // primary look-up keys is one. - const auto numPrim = std::size_t{1}; - const auto fillVal = 1.0e20; - - return createPropfuncTable(numTab, numPrim, numRows, numDep, fillVal, - std::forward(buildDeps)); - } - - /// Normalise and output relative permeability values to destination range - /// - /// \tparam InIt Input iterator type. - /// - /// \tparam OutIt Output/destination iterator type. - /// - /// \param begin Start of input range of relative permeability values - /// - /// \param end End of input range of relative permeability values. - /// Must be reachable from \p begin. - /// - /// \param tolcrit Minimum relative permeability threshold value for - /// phase to be considered mobile. Values less than this threshold - /// are output as zero. - /// - /// \param dest Beginning of output range for transformed relative - /// permeability values. Must be able to accommodate at least - /// \code distance(begin, end) \endcode output values. - template - void outputRelperm(InIt begin, - InIt end, - const double tolcrit, - OutIt dest) - { - std::transform(begin, end, dest, - [tolcrit](const double kr) -> double - { - return (kr < tolcrit) ? 0.0 : kr; - }); - } - - /// Normalise and output relative permeability values to destination range - /// - /// \tparam RelPermColumn Container type for relative permeability - /// values. Typically an \code Opm::TableColumn \endcode. - /// - /// \tparam OutIt Output/destination iterator type. - /// - /// \param krCol Range of relative permeability values. - /// - /// \param tolcrit Minimum relative permeability threshold value for - /// phase to be considered mobile. Values less than this threshold - /// are output as zero. - /// - /// \param dest Beginning of output range for transformed relative - /// permeability values. Must be able to accommodate at least - /// \code distance(begin, end) \endcode output values. - template - void outputRelperm(const RelPermColumn& krCol, - const double tolcrit, - OutIt&& dest) - { - outputRelperm(std::begin(krCol), std::end(krCol), - tolcrit, std::forward(dest)); - } - } // detail - - /// Functions to create linearised, padded, and normalised SGFN output - /// tables from various input saturation function keywords. - namespace Gas { - /// Create linearised and padded 'TAB' vector entries of normalised - /// SGFN tables for all saturation function regions from Family Two - /// table data (SGFN keyword). - /// - /// \param[in] numRows Number of rows to allocate in the output - /// vector for each table. Expected to be equal to the number of - /// declared saturation nodes in the simulation run's TABDIMS - /// keyword (Item 3). - /// - /// \param tolcrit Minimum relative permeability threshold value for - /// phase to be considered mobile. Values less than this threshold - /// are output as zero. - /// - /// \param[in] units Active unit system. Needed to convert SI - /// convention capillary pressure values (Pascal) to declared - /// conventions of the run specification. - /// - /// \param[in] sgfn Collection of SGFN tables for all saturation - /// regions. - /// - /// \return Linearised and padded 'TAB' vector values for output - /// SGFN tables. A unit-converted copy of the input table \p - /// sgfn with added derivatives. - std::vector - fromSGFN(const std::size_t numRows, - const double tolcrit, - const Opm::UnitSystem& units, - const Opm::TableContainer& sgfn) - { - using SGFN = ::Opm::SgfnTable; - - const auto numTab = sgfn.size(); - const auto numDep = std::size_t{2}; // Krg, Pcgo - - return detail::createSatfuncTable(numTab, numRows, numDep, - [tolcrit, &units, &sgfn](const std::size_t tableID, - const std::size_t primID, - Opm::LinearisedOutputTable& linTable) - -> std::size_t - { - const auto& t = sgfn.getTable(tableID); - - auto numActRows = std::size_t{0}; - - // Sg - { - const auto& Sg = t.getSgColumn(); - - numActRows = Sg.size(); - std::copy(std::begin(Sg), std::end(Sg), - linTable.column(tableID, primID, 0)); - } - - // Krg(Sg) - detail::outputRelperm(t.getKrgColumn(), tolcrit, - linTable.column(tableID, primID, 1)); - - // Pcgo(Sg) - { - const auto uPress = ::Opm::UnitSystem::measure::pressure; - - const auto& pc = t.getPcogColumn(); - std::transform(std::begin(pc), std::end(pc), - linTable.column(tableID, primID, 2), - [&units](const double Pc) -> double - { - return units.from_si(uPress, Pc); - }); - } - - // Inform createSatfuncTable() of number of active rows in - // this table. Needed to compute slopes of piecewise linear - // interpolants. - return numActRows; - }); - } - - /// Create linearised and padded 'TAB' vector entries of normalised - /// SGFN tables for all saturation function regions from Family One - /// table data (SGOF keyword). - /// - /// \param[in] numRows Number of rows to allocate in the output - /// vector for each table. Expected to be equal to the number of - /// declared saturation nodes in the simulation run's TABDIMS - /// keyword (Item 3). - /// - /// \param tolcrit Minimum relative permeability threshold value for - /// phase to be considered mobile. Values less than this threshold - /// are output as zero. - /// - /// \param[in] units Active unit system. Needed to convert SI - /// convention capillary pressure values (Pascal) to declared - /// conventions of the run specification. - /// - /// \param[in] swof Collection of SGOF tables for all saturation - /// regions. - /// - /// \return Linearised and padded 'TAB' vector values for output - /// SGFN tables. Corresponds to unit-converted copies of columns - /// 1, 2, and 4--with added derivatives--of the input SGOF tables. - std::vector - fromSGOF(const std::size_t numRows, - const double tolcrit, - const Opm::UnitSystem& units, - const Opm::TableContainer& sgof) - { - using SGOF = ::Opm::SgofTable; - - const auto numTab = sgof.size(); - const auto numDep = std::size_t{2}; // Krg, Pcgo - - return detail::createSatfuncTable(numTab, numRows, numDep, - [tolcrit, &units, &sgof](const std::size_t tableID, - const std::size_t primID, - Opm::LinearisedOutputTable& linTable) - -> std::size_t - { - const auto& t = sgof.getTable(tableID); - - auto numActRows = std::size_t{0}; - - // Sg - { - const auto& Sg = t.getSgColumn(); - - numActRows = Sg.size(); - std::copy(std::begin(Sg), std::end(Sg), - linTable.column(tableID, primID, 0)); - } - - // Krg(Sg) - detail::outputRelperm(t.getKrgColumn(), tolcrit, - linTable.column(tableID, primID, 1)); - - // Pcgo(Sg) - { - const auto uPress = ::Opm::UnitSystem::measure::pressure; - - const auto& pc = t.getPcogColumn(); - std::transform(std::begin(pc), std::end(pc), - linTable.column(tableID, primID, 2), - [&units](const double Pc) -> double - { - return units.from_si(uPress, Pc); - }); - } - - // Inform createSatfuncTable() of number of active rows in - // this table. Needed to compute slopes of piecewise linear - // interpolants. - return numActRows; - }); - } - } // Gas - - /// Functions to create linearised, padded, and normalised SOFN output - /// tables from various input saturation function keywords, depending on - /// number of active phases. - namespace Oil { - /// Form normalised SOFN output tables for two-phase runs. - namespace TwoPhase { - /// Create linearised and padded 'TAB' vector entries of - /// normalised two-phase SOFN tables for all saturation function - /// regions from Family Two table data (SOF2 keyword). - /// - /// \param[in] numRows Number of rows to allocate in the output - /// vector for each table. Expected to be equal to the - /// number of declared saturation nodes in the simulation - /// run's TABDIMS keyword (Item 3). - /// - /// \param tolcrit Minimum relative permeability threshold value - /// for phase to be considered mobile. Values less than this - /// threshold are output as zero. - /// - /// \param[in] sof2 Collection of SOF2 tables for all saturation - /// regions. - /// - /// \return Linearised and padded 'TAB' vector values for - /// three-phase SOFN tables. Essentially just a padded copy - /// of the input SOF2 table--with added derivatives. - std::vector - fromSOF2(const std::size_t numRows, - const double tolcrit, - const Opm::TableContainer& sof2) - { - using SOF2 = ::Opm::Sof2Table; - - const auto numTab = sof2.size(); - const auto numDep = std::size_t{1}; // Kro - - return detail::createSatfuncTable(numTab, numRows, numDep, - [tolcrit, &sof2](const std::size_t tableID, - const std::size_t primID, - Opm::LinearisedOutputTable& linTable) - -> std::size_t - { - const auto& t = sof2.getTable(tableID); - - auto numActRows = std::size_t{0}; - - // So - { - const auto& So = t.getSoColumn(); - - numActRows = So.size(); - std::copy(std::begin(So), std::end(So), - linTable.column(tableID, primID, 0)); - } - - // Kro(So) - detail::outputRelperm(t.getKroColumn(), tolcrit, - linTable.column(tableID, primID, 1)); - - // Inform createSatfuncTable() of number of active rows - // in this table. Needed to compute slopes of piecewise - // linear interpolants. - return numActRows; - }); - } - - /// Create linearised and padded 'TAB' vector entries of - /// normalised two-phase SOFN tables for all saturation function - /// regions from Family One table data (SGOF keyword--G/O System). - /// - /// \param[in] numRows Number of rows to allocate in the output - /// vector for each table. Expected to be equal to the - /// number of declared saturation nodes in the simulation - /// run's TABDIMS keyword (Item 3). - /// - /// \param tolcrit Minimum relative permeability threshold value - /// for phase to be considered mobile. Values less than this - /// threshold are output as zero. - /// - /// \param[in] sgof Collection of SGOF tables for all saturation - /// regions. - /// - /// \return Linearised and padded 'TAB' vector values for - /// two-phase SOFN tables. Corresponds to translated (1-Sg), - /// reverse saturation column (column 1) and reverse column - /// of relative permeability for oil (column 3) from the - /// input SGOF table--with added derivatives. - std::vector - fromSGOF(const std::size_t numRows, - const double tolcrit, - const Opm::TableContainer& sgof) - { - using SGOF = ::Opm::SgofTable; - - const auto numTab = sgof.size(); - const auto numDep = std::size_t{1}; // Kro - - return detail::createSatfuncTable(numTab, numRows, numDep, - [tolcrit, &sgof](const std::size_t tableID, - const std::size_t primID, - Opm::LinearisedOutputTable& linTable) - -> std::size_t - { - const auto& t = sgof.getTable(tableID); - - auto numActRows = std::size_t{0}; - - // So - { - const auto& Sg = t.getSgColumn(); - numActRows = Sg.size(); - - auto So = std::vector{}; - So.reserve(numActRows); - - // Two-phase system => So = 1-Sg - std::transform(std::begin(Sg), std::end(Sg), - std::back_inserter(So), - [](const double sg) -> double - { - return 1.0 - sg; - }); - - std::copy(So.rbegin(), So.rend(), - linTable.column(tableID, primID, 0)); - } - - // Kro(So) - { - const auto& kr = t.getKrogColumn(); - - const auto krog = std::vector { - std::begin(kr), std::end(kr) - }; - - detail::outputRelperm(krog.rbegin(), krog.rend(), tolcrit, - linTable.column(tableID, primID, 1)); - } - - // Inform createSatfuncTable() of number of active rows - // in this table. Needed to compute slopes of piecewise - // linear interpolants. - return numActRows; - }); - } - - /// Create linearised and padded 'TAB' vector entries for - /// normalised two-phase SOFN tables for all saturation function - /// regions from Family One table data (SWOF keyword--O/W System). - /// - /// \param[in] numRows Number of rows to allocate in the output - /// vector for each table. Expected to be equal to the - /// number of declared saturation nodes in the simulation - /// run's TABDIMS keyword (Item 3). - /// - /// \param tolcrit Minimum relative permeability threshold value - /// for phase to be considered mobile. Values less than this - /// threshold are output as zero. - /// - /// \param[in] swof Collection of SWOF tables for all saturation - /// regions. - /// - /// \return Linearised and padded 'TAB' vector values for - /// two-phase SOFN tables. Corresponds to translated (1-Sw), - /// reverse saturation column (column 1) and reverse column - /// of relative permeability for oil (column 3) from the - /// input SWOF table--with added derivatives. - std::vector - fromSWOF(const std::size_t numRows, - const double tolcrit, - const Opm::TableContainer& swof) - { - using SWOF = ::Opm::SwofTable; - - const auto numTab = swof.size(); - const auto numDep = std::size_t{1}; // Kro - - return detail::createSatfuncTable(numTab, numRows, numDep, - [tolcrit, &swof](const std::size_t tableID, - const std::size_t primID, - Opm::LinearisedOutputTable& linTable) - -> std::size_t - { - const auto& t = swof.getTable(tableID); - - auto numActRows = std::size_t{0}; - - // So - { - const auto& Sw = t.getSwColumn(); - numActRows = Sw.size(); - - auto So = std::vector{}; - So.reserve(numActRows); - - // Two-phase system => So = 1-Sw - std::transform(std::begin(Sw), std::end(Sw), - std::back_inserter(So), - [](const double sw) - { - return 1.0 - sw; - }); - - std::copy(So.rbegin(), So.rend(), - linTable.column(tableID, primID, 0)); - } - - // Kro(So) - { - const auto& kr = t.getKrowColumn(); - - const auto krow = std::vector { - std::begin(kr), std::end(kr) - }; - - detail::outputRelperm(krow.rbegin(), krow.rend(), tolcrit, - linTable.column(tableID, primID, 1)); - } - - // Inform createSatfuncTable() of number of active rows - // in this table. Needed to compute slopes of piecewise - // linear interpolants. - return numActRows; - }); - } - } // TwoPhase - - /// Form normalised SOFN output tables for three-phase runs. - namespace ThreePhase { - /// Facility to provide oil saturation and relative permeability - /// look-up based on data in a Family One table. - class DerivedKroFunction - { - public: - /// Constructor - /// - /// \param[in] s Phase saturation values. Increasing Sg in - /// the case of SGOF or increasing Sw in the case of SWOF. - /// - /// \param[in] kro Relative permeability for oil. Should be - /// the decreasing KrOG column in the case of SGOF or the - /// decreasing KrOW column in the case of SWOF. - /// - /// \param[in] So_off Oil saturation offset through which to - /// convert input phase saturation values to saturation - /// values for oil. Should be (1 - Sw_conn) in the case - /// of SGOF and 1.0 for the case of SWOF. - DerivedKroFunction(std::vector s, - std::vector kro, - const double So_off) - : s_ (std::move(s)) - , kro_ (std::move(kro)) - , So_off_(So_off) - {} - - /// Get oil saturation at particular node. - /// - /// \param[in] i Saturation node identifier. - /// - /// \return Oil saturation at node \p i. - double So(const std::size_t i) const - { - return this->So_off_ - this->s_[i]; - } - - /// Get relative permeability for oil at particular node. - /// - /// \param[in] i Saturation node identifier. - /// - /// \return Relative permeability for oil at node \p i. - double Kro(const std::size_t i) const - { - return this->kro_[i]; - } - - /// Get relative permeability for oil at particular oil - /// saturation. - /// - /// Uses piecewise linear interpolation in the input KrO - /// table. - /// - /// \param[in] So Oil saturation. - /// - /// \return Relative permeability for oil at So. - double Kro(const double So) const - { - const auto s = this->So_off_ - So; - - auto b = std::begin(this->s_); - auto e = std::end (this->s_); - auto p = std::lower_bound(b, e, s); - - if (p == b) { return this->kro_.front(); } - if (p == e) { return this->kro_.back (); } - - const auto i = p - b; // *Right-hand* end-point. - - const auto sl = this->s_ [i - 1]; - const auto yl = this->kro_[i - 1]; - - const auto sr = this->s_ [i - 0]; - const auto yr = this->kro_[i - 0]; - - const auto t = (s - sl) / (sr - sl); - - return t*yr + (1.0 - t)*yl; - } - - /// Retrieve number of active saturation nodes in this - /// table. - std::vector::size_type size() const - { - return this->s_.size(); - } - - private: - /// Input phase saturation. Sg or Sw. - std::vector s_; - - /// Input relative permeabilty for oil. KrOG or KrOW. - std::vector kro_; - - /// Oil saturation offset through which to convert between - /// input phase saturation and oil saturation. - double So_off_; - }; - - /// Pair of saturation node index and saturation function table. - struct TableElement { - /// Which numeric table to use for look-up. - std::size_t function; - - /// Saturation node ID within 'function'. - std::size_t index; - }; - - // S{G,W}OF tables have KrOX data in terms of increasing phase - // saturation for Gas and Water, respectively, so we need to - // traverse those tables in the opposite direction in order to - // generate the KrOX values in terms of increasing phase - // saturation for Oil. - std::vector - makeReverseRange(const std::size_t function, - const std::size_t n) - { - auto ret = std::vector{}; - ret.reserve(n); - - for (auto i = n; i > 0; --i) { - ret.push_back( TableElement { - function, i - 1 - }); - } - - return ret; - } - - // Join derived KrO functions on common saturation values for - // oil. Heavy lifting by std::set_union() to avoid outputting - // common oil saturation values more than once. Relies on input - // tables having sorted phase saturation values (required by ECL - // format). - std::vector - mergeTables(const std::vector& t) - { - auto ret = std::vector{}; - - const auto t0 = makeReverseRange(0, t[0].size()); - const auto t1 = makeReverseRange(1, t[1].size()); - - ret.reserve(t0.size() + t1.size()); - - std::set_union(std::begin(t0), std::end(t0), - std::begin(t1), std::end(t1), - std::back_inserter(ret), - [&t](const TableElement& e1, const TableElement& e2) - { - return t[e1.function].So(e1.index) - < t[e2.function].So(e2.index); - }); - - return ret; - } - - // Create collection of individual columns of single SOF3 table - // through joining input SGOF and SWOF tables on increasing oil - // saturation and appropriate KrOX columns. - std::array, 3> - makeSOF3Table(const Opm::SgofTable& sgof, - const Opm::SwofTable& swof) - { - auto ret = std::array, 3>{}; - - auto tbl = std::vector{}; - tbl.reserve(2); - - // Note: Order between Krow(So) and Krog(So) matters - // here. This order must match the expected column - // order in SOF3--i.e. [ So, Krow, Krog ]. - - // 1) Krow(So) - { - // So = 1.0 - Sw - const auto& Sw = swof.getSwColumn(); - const auto& Krow = swof.getKrowColumn(); - const auto& So_off = 1.0; - - tbl.emplace_back(Sw .vectorCopy(), - Krow.vectorCopy(), So_off); - } - - // 2) Krog(So) - { - // So = (1.0 - Sw_conn) - Sg - const auto& Sg = sgof.getSgColumn(); - const auto& Krog = sgof.getKrogColumn(); - const auto So_off = - 1.0 - swof.getSwColumn()[0]; - - tbl.emplace_back(Sg .vectorCopy(), - Krog.vectorCopy(), So_off); - } - - const auto mrg = mergeTables(tbl); - - for (auto& col : ret) { col.reserve(mrg.size()); } - - for (const auto& row : mrg) { - const auto self = row.function; - const auto other = 1 - row.function; - - // 1) Assign So - ret[0].push_back(tbl[self].So(row.index)); - - // 2) Assign Kro for "self" column (the one that got - // picked for this row). - ret[1 + self].push_back(tbl[self].Kro(row.index)); - - // 3) Assign Kro for "other" column (the one that - // did not get picked for this row). - ret[1 + other].push_back(tbl[other].Kro(ret[0].back())); - } - - return ret; - } - - /// Create linearised and padded 'TAB' vector entries of - /// normalised three-phase SOFN tables for all saturation - /// function regions from Family One table data. - /// - /// \param[in] numRows Number of rows to allocate in the output - /// vector for each table. Expected to be twice the number - /// of declared saturation nodes in the simulation run's - /// TABDIMS keyword (Item 3). - /// - /// \param tolcrit Minimum relative permeability threshold value - /// for phase to be considered mobile. Values less than this - /// threshold are output as zero. - /// - /// \param[in] sgof Collection of SGOF tables for all saturation - /// regions. - /// - /// \param[in] swof Collection of SWOF tables for all saturation - /// regions. - /// - /// \return Linearised and padded 'TAB' vector values for - /// three-phase SOFN tables. Corresponds to column 1 from - /// both of the input SGOF and SWOF tables, as well as column - /// 3 from the input SWOF table and column 3 from the input - /// SGOF table--expanded so as to have values for all oil - /// saturation nodes. Derivatives added in columns 4 and 5. - std::vector - fromSGOFandSWOF(const std::size_t numRows, - const double tolcrit, - const Opm::TableContainer& sgof, - const Opm::TableContainer& swof) - { - using SGOF = ::Opm::SgofTable; - using SWOF = ::Opm::SwofTable; - - const auto numTab = sgof.size(); - const auto numDep = std::size_t{2}; // Krow, Krog - - return detail::createSatfuncTable(numTab, numRows, numDep, - [tolcrit, &sgof, &swof] - (const std::size_t tableID, - const std::size_t primID, - Opm::LinearisedOutputTable& linTable) - -> std::size_t - { - const auto sof3 = - makeSOF3Table(sgof.getTable(tableID), - swof.getTable(tableID)); - - auto numActRows = std::size_t{0}; - - // So - { - const auto& So = sof3[0]; - - numActRows = So.size(); - std::copy(std::begin(So), std::end(So), - linTable.column(tableID, primID, 0)); - } - - // Krow(So) - detail::outputRelperm(sof3[1], tolcrit, - linTable.column(tableID, primID, 1)); - - // Krog(So) - detail::outputRelperm(sof3[2], tolcrit, - linTable.column(tableID, primID, 2)); - - // Inform createSatfuncTable() of number of active rows - // in this table. Needed to compute slopes of piecewise - // linear interpolants. - return numActRows; - }); - } - - /// Create linearised and padded 'TAB' vector entries of - /// normalised three-phase SOFN tables for all saturation - /// function regions from Family Two table data (SOF3 keyword). - /// - /// \param[in] numRows Number of rows to allocate in the output - /// vector for each table. Expected to be equal to the - /// number of declared saturation nodes in the simulation - /// run's TABDIMS keyword (Item 3). - /// - /// \param tolcrit Minimum relative permeability threshold value - /// for phase to be considered mobile. Values less than this - /// threshold are output as zero. - /// - /// \param[in] sof3 Collection of SOF3 tables for all saturation - /// regions. - /// - /// \return Linearised and padded 'TAB' vector values for output - /// three-phase SOFN tables. Essentially a padded copy of - /// the input SOF3 tables, \p sof3, with added derivatives. - std::vector - fromSOF3(const std::size_t numRows, - const double tolcrit, - const Opm::TableContainer& sof3) - { - using SOF3 = ::Opm::Sof3Table; - - const auto numTab = sof3.size(); - const auto numDep = std::size_t{2}; // Krow, Krog - - return detail::createSatfuncTable(numTab, numRows, numDep, - [tolcrit, &sof3](const std::size_t tableID, - const std::size_t primID, - Opm::LinearisedOutputTable& linTable) - -> std::size_t - { - const auto& t = sof3.getTable(tableID); - - auto numActRows = std::size_t{0}; - - // So - { - const auto& So = t.getSoColumn(); - - numActRows = So.size(); - std::copy(std::begin(So), std::end(So), - linTable.column(tableID, primID, 0)); - } - - // Krow(So) - detail::outputRelperm(t.getKrowColumn(), tolcrit, - linTable.column(tableID, primID, 1)); - - // Krog(So) - detail::outputRelperm(t.getKrogColumn(), tolcrit, - linTable.column(tableID, primID, 2)); - - // Inform createSatfuncTable() of number of active rows - // in this table. Needed to compute slopes of piecewise - // linear interpolants. - return numActRows; - }); - } - } // ThreePhase - } // Oil - - /// Functions to create linearised, padded, and normalised SWFN output - /// tables from various input saturation function keywords. - namespace Water { - /// Create linearised and padded 'TAB' vector entries of normalised - /// SWFN tables for all saturation function regions from Family Two - /// table data (SWFN keyword). - /// - /// \param[in] numRows Number of rows to allocate for each table in - /// the output vector. Expected to be equal to the number of - /// declared saturation nodes in the simulation run's TABDIMS - /// keyword (Item 3). - /// - /// \param tolcrit Minimum relative permeability threshold value for - /// phase to be considered mobile. Values less than this threshold - /// are output as zero. - /// - /// \param[in] units Active unit system. Needed to convert SI - /// convention capillary pressure values (Pascal) to declared - /// conventions of the run specification. - /// - /// \param[in] swfn Collection of SWFN tables for all saturation - /// regions. - /// - /// \return Linearised and padded 'TAB' vector values for output - /// SWFN tables. A unit-converted copy of the input table \p - /// swfn with added derivatives. - std::vector - fromSWFN(const std::size_t numRows, - const double tolcrit, - const Opm::UnitSystem& units, - const Opm::TableContainer& swfn) - { - using SWFN = ::Opm::SwfnTable; - - const auto numTab = swfn.size(); - const auto numDep = std::size_t{2}; // Krw, Pcow - - return detail::createSatfuncTable(numTab, numRows, numDep, - [tolcrit, &swfn, &units] - (const std::size_t tableID, - const std::size_t primID, - Opm::LinearisedOutputTable& linTable) - -> std::size_t - { - const auto& t = swfn.getTable(tableID); - - auto numActRows = std::size_t{0}; - - // Sw - { - const auto& Sw = t.getSwColumn(); - - numActRows = Sw.size(); - std::copy(std::begin(Sw), std::end(Sw), - linTable.column(tableID, primID, 0)); - } - - // Krw(Sw) - detail::outputRelperm(t.getKrwColumn(), tolcrit, - linTable.column(tableID, primID, 1)); - - // Pcow(Sw) - { - const auto uPress = ::Opm::UnitSystem::measure::pressure; - - const auto& pc = t.getPcowColumn(); - std::transform(std::begin(pc), std::end(pc), - linTable.column(tableID, primID, 2), - [&units](const double Pc) -> double - { - return units.from_si(uPress, Pc); - }); - } - - // Inform createSatfuncTable() of number of active rows in - // this table. Needed to compute slopes of piecewise linear - // interpolants. - return numActRows; - }); - } - - /// Create linearised and padded 'TAB' vector entries of normalised - /// SWFN tables for all saturation function regions from Family One - /// table data (SWOF keyword). - /// - /// \param[in] numRows Number of rows to allocate for each table in - /// the output vector. Expected to be equal to the number of - /// declared saturation nodes in the simulation run's TABDIMS - /// keyword (Item 3). - /// - /// \param tolcrit Minimum relative permeability threshold value for - /// phase to be considered mobile. Values less than this threshold - /// are output as zero. - /// - /// \param[in] units Active unit system. Needed to convert SI - /// convention capillary pressure values (Pascal) to declared - /// conventions of the run specification. - /// - /// \param[in] swof Collection of SWOF tables for all saturation - /// regions. - /// - /// \return Linearised and padded 'TAB' vector values for output - /// SWFN tables. Corresponds to unit-converted copies of columns - /// 1, 2, and 4--with added derivatives--of the input SWOF tables. - std::vector - fromSWOF(const std::size_t numRows, - const double tolcrit, - const Opm::UnitSystem& units, - const Opm::TableContainer& swof) - { - using SWOF = ::Opm::SwofTable; - - const auto numTab = swof.size(); - const auto numDep = std::size_t{2}; // Krw, Pcow - - return detail::createSatfuncTable(numTab, numRows, numDep, - [tolcrit, &swof, &units] - (const std::size_t tableID, - const std::size_t primID, - Opm::LinearisedOutputTable& linTable) - -> std::size_t - { - const auto& t = swof.getTable(tableID); - - auto numActRows = std::size_t{0}; - - // Sw - { - const auto& Sw = t.getSwColumn(); - - numActRows = Sw.size(); - std::copy(std::begin(Sw), std::end(Sw), - linTable.column(tableID, primID, 0)); - } - - // Krw(Sw) - detail::outputRelperm(t.getKrwColumn(), tolcrit, - linTable.column(tableID, primID, 1)); - - // Pcow(Sw) - { - const auto uPress = ::Opm::UnitSystem::measure::pressure; - - const auto& pc = t.getPcowColumn(); - std::transform(std::begin(pc), std::end(pc), - linTable.column(tableID, primID, 2), - [&units](const double Pc) -> double - { - return units.from_si(uPress, Pc); - }); - } - - // Inform createSatfuncTable() of number of active rows in - // this table. Needed to compute slopes of piecewise linear - // interpolants. - return numActRows; - }); - } - } // Water -}} // Anonymous::SatFunc - -/// Functions to facilitate generating TAB vector entries for tabulated -/// PVT functions. -namespace { namespace PVTFunc { - - /// Functions to create linearised, padded, and normalised gas PVT - /// output tables from various input gas PVT function keywords. - namespace Gas { - /// Create linearised and padded 'TAB' vector entries of normalised - /// gas tables for all PVT function regions from PVDG (dry gas) - /// keyword data. - /// - /// \param[in] numPressNodes Number of pressure nodes (rows) to - /// allocate in the output vector for each table. Expected to be - /// equal to the number of declared pressure nodes in the - /// simulation run's TABDIMS keyword (NPPVT, Item 4). - /// - /// \param[in] units Active unit system. Needed to convert SI - /// convention pressure values (Pascal), formation volume factors - /// (Rm3/Sm3), and viscosity values (Pascal seconds) to declared - /// conventions of the run specification. - /// - /// \param[in] pvdg Collection of PVDG tables for all PVT regions. - /// - /// \return Linearised and padded 'TAB' vector values for output gas - /// PVT tables. A unit-converted copy of the input table \p pvdg - /// with added derivatives. - std::vector - fromPVDG(const std::size_t numPressNodes, - const Opm::UnitSystem& units, - const Opm::TableContainer& pvdg) - { - // Columns [ Pg, 1/Bg, 1/(Bg*mu_g), derivatives ] - using PVDG = ::Opm::PvdgTable; - - const auto numTab = pvdg.size(); - const auto numPrim = std::size_t{1}; // No sub-tables - const auto numRows = numPressNodes; // One row per pressure node - const auto numDep = std::size_t{2}; // 1/Bg, 1/(Bg*mu_g) - - // PVDG fill value = +2.0e20 - const auto fillVal = +2.0e20; - - return createPropfuncTable(numTab, numPrim, numRows, numDep, fillVal, - [&units, &pvdg](const std::size_t tableID, - const std::size_t primID, - Opm::LinearisedOutputTable& linTable) - -> std::size_t - { - const auto& t = pvdg.getTable(tableID); - - auto numActRows = std::size_t{0}; - - // Column 0: Pg - { - const auto uPress = ::Opm::UnitSystem::measure::pressure; - - const auto& Pg = t.getPressureColumn(); - - numActRows = Pg.size(); - - std::transform(std::begin(Pg), std::end(Pg), - linTable.column(tableID, primID, 0), - [&units](const double p) -> double - { - return units.from_si(uPress, p); - }); - } - - // Column 1: 1/Bg - { - const auto uRecipFVF = ::Opm::UnitSystem::measure:: - gas_inverse_formation_volume_factor; - - const auto& Bg = t.getFormationFactorColumn(); - std::transform(std::begin(Bg), std::end(Bg), - linTable.column(tableID, primID, 1), - [&units](const double B) -> double - { - return units.from_si(uRecipFVF, 1.0 / B); - }); - } - - // Column 2: 1/(Bg*mu_g) - { - const auto uRecipFVF = ::Opm::UnitSystem::measure:: - gas_inverse_formation_volume_factor; - - const auto uVisc = ::Opm::UnitSystem::measure::viscosity; - - const auto& Bg = t.getFormationFactorColumn(); - const auto& mu_g = t.getViscosityColumn(); - - std::transform(std::begin(Bg), std::end(Bg), - std::begin(mu_g), - linTable.column(tableID, primID, 2), - [&units](const double B, const double mu) -> double - { - return units.from_si(uRecipFVF, 1.0 / B) - / units.from_si(uVisc , mu); - }); - } - - // Inform createPropfuncTable() of number of active rows in - // this table. Needed to compute slopes of piecewise linear - // interpolants. - return numActRows; - }); - } - - /// Create linearised and padded 'TAB' vector entries of normalised - /// gas tables for all PVT function regions from PVTG (wet gas with - /// volatile/vaporised oil) keyword data. - /// - /// \param[in] numCompNodes Number of composition nodes (rows per - /// sub-table) to allocate in the output vector for each table. - /// Expected to be equal to the number of declared composition - /// nodes in the simulation run's TABDIMS keyword (NRPVT, Item - /// 6). - /// - /// \param[in] numPressNodes Number of pressure nodes (sub-tables) - /// to allocate in the output vector for each gas PVT table. - /// Expected to be equal to the number of declared pressure nodes - /// in the simulation run's TABDIMS keyword (NPPVT, Item 4). - /// - /// \param[in] units Active unit system. Needed to convert SI - /// convention vaporised oil composition values (Sm3/Sm3), - /// formation volume factors (Rm3/Sm3), and viscosity values - /// (Pa*s) to declared conventions of the run specification. - /// - /// \param[in] pvtg Collection of PVTG tables for all PVT regions. - /// - /// \return Linearised and padded 'TAB' vector values for output gas - /// PVT tables. A unit-converted copy of the input table \p pvtg - /// with added derivatives. - std::vector - fromPVTG(const std::size_t numCompNodes, - const std::size_t numPressNodes, - const Opm::UnitSystem& units, - const std::vector& pvtg) - { - // Columns [ Rv, 1/Bg, 1/(Bg*mu_g), derivatives ] - const auto numTab = pvtg.size(); - const auto numPrim = numPressNodes; - const auto numRows = numCompNodes; - const auto numDep = std::size_t{2}; // 1/Bg, 1/(Bg*mu_g) - - // PVTG fill value = -2.0e20 - const auto fillVal = -2.0e20; - - return createPropfuncTable(numTab, numPrim, numRows, numDep, fillVal, - [&units, &pvtg](const std::size_t tableID, - const std::size_t primID, - Opm::LinearisedOutputTable& linTable) - -> std::size_t - { - auto numActRows = std::size_t{0}; - - if (primID >= pvtg[tableID].size()) { - // Composition node outside current table's active set. - // No active rows in this subtable. - return numActRows; - } - - const auto& t = pvtg[tableID].getUnderSaturatedTable(primID); - - // Column 0: Rv - { - const auto uRv = ::Opm::UnitSystem::measure::oil_gas_ratio; - - const auto& Rv = t.getColumn(0); - - numActRows = Rv.size(); - - std::transform(std::begin(Rv), std::end(Rv), - linTable.column(tableID, primID, 0), - [&units](const double rv) -> double - { - return units.from_si(uRv, rv); - }); - } - - // Column 1: 1/Bg - { - const auto uRecipFVF = ::Opm::UnitSystem::measure:: - gas_inverse_formation_volume_factor; - - const auto& Bg = t.getColumn(1); - - std::transform(std::begin(Bg), std::end(Bg), - linTable.column(tableID, primID, 1), - [&units](const double B) -> double - { - return units.from_si(uRecipFVF, 1.0 / B); - }); - } - - // Column 2: 1/(Bg*mu_g) - { - const auto uRecipFVF = ::Opm::UnitSystem::measure:: - gas_inverse_formation_volume_factor; - - const auto uVisc = ::Opm::UnitSystem::measure::viscosity; - - const auto& Bg = t.getColumn(1); - const auto& mu_g = t.getColumn(2); - - std::transform(std::begin(Bg), std::end(Bg), - std::begin(mu_g), - linTable.column(tableID, primID, 2), - [&units](const double B, const double mu) -> double - { - return units.from_si(uRecipFVF, 1.0 / B) - / units.from_si(uVisc , mu); - }); - } - - // Inform createPropfuncTable() of number of active rows in - // this table. Needed to compute slopes of piecewise linear - // interpolants. - return numActRows; - }); - } - - /// Create linearised and padded 'TAB' vector entries of normalised - /// gas pressure nodes for all PVT function regions from PVTG (wet - /// gas with volatile/vaporised oil) keyword data. - /// - /// \param[in] numPressNodes Number of pressure nodes to allocate in - /// the output vector for each gas PVT table. Expected to be - /// equal to the number of declared pressure nodes in the - /// simulation run's TABDIMS keyword (NPPVT, Item 4). - /// - /// \param[in] units Active unit system. Needed to convert SI - /// convention pressure values (Pascal) to declared conventions - /// of the run specification. - /// - /// \param[in] pvtg Collection of PVTG tables for all PVT regions. - /// - /// \return Linearised and padded 'TAB' vector values for output gas - /// PVT tables. A unit-converted copy of the primary keys in - /// input table \p pvtg. - std::vector - pressureNodes(const std::size_t numPressNodes, - const Opm::UnitSystem& units, - const std::vector& pvtg) - { - // Columns [ Pg ] - const auto numTab = pvtg.size(); - - // One set of pressure nodes per table. - const auto numPrim = std::size_t{1}; - - const auto numRows = numPressNodes; - - // No dependent variables. - const auto numDep = std::size_t{0}; - - // Pressure node fill value = +2.0e20 - const auto fillVal = +2.0e20; - - return createPropfuncTable(numTab, numPrim, numRows, numDep, fillVal, - [&units, &pvtg](const std::size_t tableID, - const std::size_t primID, - Opm::LinearisedOutputTable& linTable) - -> std::size_t - { - const auto uPress = ::Opm::UnitSystem::measure::pressure; - - const auto& t = pvtg[tableID].getSaturatedTable(); - const auto& Pg = t.getColumn(0); - - const auto numActRows = Pg.size(); - - std::transform(std::begin(Pg), std::end(Pg), - linTable.column(tableID, primID, 0), - [&units](const double p) -> double - { - return units.from_si(uPress, p); - }); - - return numActRows; - }); - } - - /// Extract maximum effective composition nodes in PVTG table data - /// - /// \param[in] pvtg Collection of PVTG tables for all PVT regions. - /// - /// \return Maximum number of active rows across all sub-tables of \p - /// pvtg. - std::size_t maxNumCompNodes(const std::vector& pvtg) - { - auto max_nrpvt = std::size_t{0}; - - for (const auto& table : pvtg) { - const auto max_nrpvt_tab = - std::accumulate(table.begin(), table.end(), std::size_t{0}, - [](const std::size_t n, const Opm::SimpleTable& t) - { - return std::max(n, t.numRows()); - }); - - max_nrpvt = std::max(max_nrpvt, max_nrpvt_tab); - } - - return max_nrpvt; - } - - /// Extract maximum effective pressure nodes in PVDG table data - /// - /// \param[in] pvdg Collection of PVDG tables for all PVT regions. - /// - /// \return Maximum number of table rows across all tables of \p - /// pvdo. - std::size_t maxNumPressNodes(const Opm::TableContainer& pvdg) - { - using PVDG = ::Opm::PvdgTable; - auto tabID = std::vector(pvdg.size()); - - std::iota(tabID.begin(), tabID.end(), std::size_t{0}); - - return std::accumulate(tabID.begin(), tabID.end(), std::size_t{0}, - [&pvdg](const std::size_t n, const std::size_t table) - { - return std::max(n, pvdg.getTable(table).numRows()); - }); - } - - /// Extract maximum effective pressure nodes in PVTG table data - /// - /// \param[in] pvtg Collection of PVTG tables for all PVT regions. - /// - /// \return Maximum number of active keys across all tables of \p - /// pvtg. - std::size_t maxNumPressNodes(const std::vector& pvtg) - { - if (pvtg.empty()) { return 0; } - - return std::accumulate(std::begin(pvtg), std::end(pvtg), std::size_t{0}, - [](const std::size_t n, const Opm::PvtgTable& t) -> std::size_t - { - return std::max(n, t.getSaturatedTable().numRows()); - }); - } - } // Gas - - /// Functions to create linearised, padded, and normalised oil PVT - /// output tables from various input oil PVT function keywords. - namespace Oil { - /// Create linearised and padded 'TAB' vector entries of normalised - /// oil tables for all PVT function regions from PVCDO (dead oil - /// with constant oil compressibility) keyword data. - /// - /// \param[in] numPressNodes Number of pressure nodes (rows) to - /// allocate in the output vector for each table. Expected to be - /// equal to the number of declared pressure nodes in the - /// simulation run's TABDIMS keyword (NPPVT, Item 4). Note that - /// only the first row of each table contains any actual PVT - /// data. - /// - /// \param[in] units Active unit system. Needed to convert SI - /// convention pressure values (Pascal), formation volume factors - /// (Rm3/Sm3), compressibility values (1/Pascal), viscosity - /// values (Pa*s), and viscosibility values (1/Pascal) to - /// declared conventions of the run specification. - /// - /// \param[in] pvcdo Collection of PVCDO tables for all PVT regions. - /// - /// \return Linearised and padded 'TAB' vector values for output oil - /// PVT tables. A unit-converted copy of the input table \p - /// pvcdo. No derivative information added. - std::vector - fromPVCDO(const std::size_t numPressNodes, - const Opm::UnitSystem& units, - const Opm::PvcdoTable& pvcdo) - { - // Recall: PvcdoTable is essentially vector with - // - // struct PVCDORecord { - // double reference_pressure; - // double volume_factor; - // double compressibility; - // double viscosity; - // double viscosibility; - // }; - // - using M = ::Opm::UnitSystem::measure; - - // Columns [ Po, Bo, Co, mu_o, Cv ] - // - // Single active row per table. No derivatives. Can't reuse - // createPropfuncTable here, so implement the return value - // directly in terms of LinearisedOutputTable. - - const auto numTab = pvcdo.size(); - const auto numPrim = std::size_t{1}; - const auto numCols = std::size_t{5}; - - // PVCDO fill value: -1.0e20 - const auto fillVal = -1.0e20; - - auto lintable = ::Opm::LinearisedOutputTable { - numTab, numPrim, numPressNodes, numCols, fillVal - }; - - // Note unit hack for compressibility and viscosibility. The - // unit of measurement for these quantities is 1/pressure, but - // the UnitSystem does not define this unit. Work around the - // missing conversion by using *to_si()* rather than *from_si()* - // for those quantities. - - const auto uPress = M::pressure; - const auto uBo = M::oil_formation_volume_factor; - const auto uVisc = M::viscosity; - - // Single primary key, ID = 0. - const auto primID = std::size_t{0}; - - for (auto tabID = 0*numTab; tabID < numTab; ++tabID) { - const auto& t = pvcdo[tabID]; - - auto iPo = lintable.column(tabID, primID, 0); - auto iBo = lintable.column(tabID, primID, 1); - auto iCo = lintable.column(tabID, primID, 2); - auto imu_o = lintable.column(tabID, primID, 3); - auto iCv = lintable.column(tabID, primID, 4); - - *iPo = units.from_si(uPress, t.reference_pressure); - *iBo = units.from_si(uBo, t.volume_factor); - - // Compressibility unit hack here (*to_si()*) - *iCo = units.to_si(uPress, t.compressibility); - - *imu_o = units.from_si(uVisc, t.viscosity); - - // Viscosibility unit hack here (*to_si()*) - *iCv = units.to_si(uPress, t.viscosibility); - } - - return lintable.getDataDestructively(); - } - - /// Create linearised and padded 'TAB' vector entries of normalised - /// gas tables for all PVT function regions from PVDO (dead oil) - /// keyword data. - /// - /// \param[in] numPressNodes Number of pressure nodes (rows) to - /// allocate in the output vector for each table. Expected to be - /// equal to the number of declared pressure nodes in the - /// simulation run's TABDIMS keyword (NPPVT, Item 4). - /// - /// \param[in] units Active unit system. Needed to convert SI - /// convention pressure values (Pascal), formation volume factors - /// (Rm3/Sm3), and viscosity values (Pa*s) to declared - /// conventions of the run specification. - /// - /// \param[in] pvdo Collection of PVDO tables for all PVT regions. - /// - /// \return Linearised and padded 'TAB' vector values for output gas - /// PVT tables. A unit-converted copy of the input table \p pvdo - /// with added derivatives. - std::vector - fromPVDO(const std::size_t numPressNodes, - const Opm::UnitSystem& units, - const Opm::TableContainer& pvdo) - { - // Columns [ Po, 1/Bo, 1/(Bo*mu_o), derivatives ] - using PVDO = ::Opm::PvdoTable; - - const auto numTab = pvdo.size(); - const auto numPrim = std::size_t{1}; // No sub-tables - const auto numRows = numPressNodes; // One row per pressure node. - const auto numDep = std::size_t{2}; // 1/Bo, 1/(Bo*mu_o) - - // PVDO fill value = +2.0e20 - const auto fillVal = +2.0e20; - - return createPropfuncTable(numTab, numPrim, numRows, numDep, fillVal, - [&units, &pvdo](const std::size_t tableID, - const std::size_t primID, - Opm::LinearisedOutputTable& linTable) - -> std::size_t - { - const auto& t = pvdo.getTable(tableID); - - auto numActRows = std::size_t{0}; - - // Column 0: Po - { - const auto uPress = ::Opm::UnitSystem::measure::pressure; - - const auto& Po = t.getPressureColumn(); - - numActRows = Po.size(); - - std::transform(std::begin(Po), std::end(Po), - linTable.column(tableID, primID, 0), - [&units](const double p) -> double - { - return units.from_si(uPress, p); - }); - } - - // Column 1: 1/Bo - { - const auto uRecipFVF = ::Opm::UnitSystem::measure:: - oil_inverse_formation_volume_factor; - - const auto& Bo = t.getFormationFactorColumn(); - std::transform(std::begin(Bo), std::end(Bo), - linTable.column(tableID, primID, 1), - [&units](const double B) -> double - { - return units.from_si(uRecipFVF, 1.0 / B); - }); - } - - // Column 2: 1/(Bo*mu_o) - { - const auto uRecipFVF = ::Opm::UnitSystem::measure:: - oil_inverse_formation_volume_factor; - - const auto uVisc = ::Opm::UnitSystem::measure::viscosity; - - const auto& Bo = t.getFormationFactorColumn(); - const auto& mu_o = t.getViscosityColumn(); - - std::transform(std::begin(Bo), std::end(Bo), - std::begin(mu_o), - linTable.column(tableID, primID, 2), - [&units](const double B, const double mu) -> double - { - return units.from_si(uRecipFVF, 1.0 / B) - / units.from_si(uVisc , mu); - }); - } - - // Inform createPropfuncTable() of number of active rows in - // this table. Needed to compute slopes of piecewise linear - // interpolants. - return numActRows; - }); - } - - /// Create linearised and padded 'TAB' vector entries of normalised - /// gas tables for all PVT function regions from PVTO (live oil with - /// dissolved gas) keyword data. - /// - /// \param[in] numCompNodes Number of composition nodes (sub-tables) - /// to allocate in the output vector for each oil PVT table. - /// Expected to be equal to the number of declared composition - /// nodes in the simulation run's TABDIMS keyword (NRPVT, Item - /// 6). - /// - /// \param[in] numPressNodes Number of pressure nodes (rows per - /// sub-table) to allocate in the output vector for each oil PVT - /// table. Expected to be equal to the number of declared - /// pressure nodes in the simulation run's TABDIMS keyword - /// (NPPVT, Item 4). - /// - /// \param[in] units Active unit system. Needed to convert SI - /// convention pressure values (Pascal), formation volume factors - /// (S-volume to R-volume), and viscosity values (Pa*s) to - /// declared conventions of the run specification. - /// - /// \param[in] pvto Collection of PVTO tables for all PVT regions. - /// - /// \return Linearised and padded 'TAB' vector values for output gas - /// PVT tables. A unit-converted copy of the input table \p pvto - /// with added derivatives. - std::vector - fromPVTO(const std::size_t numCompNodes, - const std::size_t numPressNodes, - const Opm::UnitSystem& units, - const std::vector& pvto) - { - // Columns [ Po, 1/Bo, 1/(Bo*mu_o), derivatives ] - const auto numTab = pvto.size(); - const auto numPrim = numCompNodes; - const auto numRows = numPressNodes; - const auto numDep = std::size_t{2}; // 1/Bo, 1/(Bo*mu_o) - - // PVTO fill value = +2.0e20 - const auto fillVal = +2.0e20; - - return createPropfuncTable(numTab, numPrim, numRows, numDep, fillVal, - [&units, &pvto](const std::size_t tableID, - const std::size_t primID, - Opm::LinearisedOutputTable& linTable) - -> std::size_t - { - auto numActRows = std::size_t{0}; - - if (primID >= pvto[tableID].size()) { - // Composition node outside current table's active set. - // No active rows in this sub-table. - return numActRows; - } - - const auto& t = pvto[tableID].getUnderSaturatedTable(primID); - - // Column 0: Po - { - const auto uPo = ::Opm::UnitSystem::measure::pressure; - - const auto& Po = t.getColumn(0); - - numActRows = Po.size(); - - std::transform(std::begin(Po), std::end(Po), - linTable.column(tableID, primID, 0), - [&units](const double po) -> double - { - return units.from_si(uPo, po); - }); - } - - // Column 1: 1/Bo - { - const auto uRecipFVF = ::Opm::UnitSystem::measure:: - oil_inverse_formation_volume_factor; - - const auto& Bo = t.getColumn(1); - - std::transform(std::begin(Bo), std::end(Bo), - linTable.column(tableID, primID, 1), - [&units](const double B) -> double - { - return units.from_si(uRecipFVF, 1.0 / B); - }); - } - - // Column 2: 1/(Bo*mu_o) - { - const auto uRecipFVF = ::Opm::UnitSystem::measure:: - oil_inverse_formation_volume_factor; - - const auto uVisc = ::Opm::UnitSystem::measure::viscosity; - - const auto& Bo = t.getColumn(1); - const auto& mu_o = t.getColumn(2); - - std::transform(std::begin(Bo), std::end(Bo), - std::begin(mu_o), - linTable.column(tableID, primID, 2), - [&units](const double B, const double mu) -> double - { - return units.from_si(uRecipFVF, 1.0 / B) - / units.from_si(uVisc , mu); - }); - } - - // Inform createPropfuncTable() of number of active rows in - // this table. Needed to compute slopes of piecewise linear - // interpolants. - return numActRows; - }); - } - - /// Create linearised and padded 'TAB' vector entries of normalised - /// composition nodes for all PVT function regions from PVTO (live - /// oil with dissolved gas) keyword data. - /// - /// \param[in] numCompNodes Number of composition nodes to allocate - /// in the output vector for each oil PVT table. Expected to be - /// equal to the number of declared composition nodes in the - /// simulation run's TABDIMS keyword (NRPVT, Item 6). - /// - /// \param[in] units Active unit system. Needed to convert SI - /// convention dissolved gas composition values (Sm3/Sm3) to - /// declared conventions of the run specification. - /// - /// \param[in] pvto Collection of PVTO tables for all PVT regions. - /// - /// \return Linearised and padded 'TAB' vector values for output oil - /// PVT tables. A unit-converted copy of the primary keys in - /// input table \p pvto. - std::vector - compositionNodes(const std::size_t numCompNodes, - const Opm::UnitSystem& units, - const std::vector& pvto) - { - // Columns [ Rs ] - const auto numTab = pvto.size(); - - // One set of composition nodes per table. - const auto numPrim = std::size_t{1}; - const auto numRows = numCompNodes; - - // No dependent variables. - const auto numDep = std::size_t{0}; - - // PVTO fill value = +2.0e20 - const auto fillVal = +2.0e20; - - return createPropfuncTable(numTab, numPrim, numRows, numDep, fillVal, - [&units, &pvto](const std::size_t tableID, - const std::size_t primID, - Opm::LinearisedOutputTable& linTable) - -> std::size_t - { - const auto uRs = ::Opm::UnitSystem::measure::gas_oil_ratio; - - const auto& t = pvto[tableID].getSaturatedTable(); - const auto& Rs = t.getColumn(0); - - const auto numActRows = Rs.size(); - - std::transform(std::begin(Rs), std::end(Rs), - linTable.column(tableID, primID, 0), - [&units](const double rs) -> double - { - return units.from_si(uRs, rs); - }); - - return numActRows; - }); - } - - /// Extract maximum effective composition nodes in PVTO table data - /// - /// \param[in] pvto Collection of PVTO tables for all PVT regions. - /// - /// \return Maximum number of active keys across all tables of \p - /// pvto. - std::size_t maxNumCompNodes(const std::vector& pvto) - { - if (pvto.empty()) { return 0; } - - return std::accumulate(std::begin(pvto), std::end(pvto), std::size_t{0}, - [](const std::size_t n, const Opm::PvtoTable& t) -> std::size_t - { - return std::max(n, t.getSaturatedTable().numRows()); - }); - } - - /// Extract maximum effective pressure nodes in PVDO table data - /// - /// \param[in] pvdo Collection of PVDO tables for all PVT regions. - /// - /// \return Maximum number of table rows across all tables of \p - /// pvdo. - std::size_t maxNumPressNodes(const Opm::TableContainer& pvdo) - { - using PVDO = ::Opm::PvdoTable; - auto tabID = std::vector(pvdo.size()); - - std::iota(tabID.begin(), tabID.end(), std::size_t{0}); - - return std::accumulate(tabID.begin(), tabID.end(), std::size_t{0}, - [&pvdo](const std::size_t n, const std::size_t table) - { - return std::max(n, pvdo.getTable(table).numRows()); - }); - } - - /// Extract maximum effective pressure nodes in PVTO table data - /// - /// \param[in] pvto Collection of PVTO tables for all PVT regions. - /// - /// \return Maximum number of active pressure rows across all - /// sub-tables of \p pvto. - std::size_t maxNumPressNodes(const std::vector& pvto) - { - auto max_nppvt = std::size_t{0}; - - for (const auto& table : pvto) { - const auto max_nppvt_tab = - std::accumulate(table.begin(), table.end(), std::size_t{0}, - [](const std::size_t n, const Opm::SimpleTable& t) - { - return std::max(n, t.numRows()); - }); - - max_nppvt = std::max(max_nppvt, max_nppvt_tab); - } - - return max_nppvt; - } - } // Oil - - /// Functions to create linearised, padded, and normalised water PVT - /// output tables from input water PVT function keyword. - namespace Water { - /// Create linearised 'TAB' vector entries of normalised water PVT - /// tables for all PVT function regions from PVTW keyword data. - /// - /// \param[in] units Active unit system. Needed to convert SI - /// convention pressure values (Pascal), formation volume factors - /// (Rm3/Sm3), compressibility values (1/Pascal), viscosity - /// values (Pa*s), and viscosibility values (1/Pascal) to - /// declared conventions of the run specification. - /// - /// \param[in] pvtw Collection of PVTW tables for all PVT regions. - /// - /// \return Linearised 'TAB' vector values for output water PVT - /// tables. A unit-converted, transformed version of the input - /// table \p pvtw. No derivative information added. - std::vector - fromPVTW(const Opm::UnitSystem& units, - const Opm::PvtwTable& pvtw) - { - // Recall: PvtwTable is essentially vector in which - // - // struct PVTWRecord { - // double reference_pressure; - // double volume_factor; - // double compressibility; - // double viscosity; - // double viscosibility; - // }; - - using M = ::Opm::UnitSystem::measure; - - // Columns [ Pw, 1/Bw, Cw, 1/(Bw*mu_w), Cw - Cv ] - // - // Single row per table. No derivatives. Can't reuse - // createPropfuncTable here, so implement the return value - // directly in terms of LinearisedOutputTable. - - const auto numTab = pvtw.size(); - const auto numPrim = std::size_t{1}; - const auto numRows = std::size_t{1}; - const auto numCols = std::size_t{5}; - - auto lintable = ::Opm::LinearisedOutputTable { - numTab, numPrim, numRows, numCols - }; - - // Note unit hack for compressibility and viscosibility. The - // unit of measurement for these quantities is 1/pressure, but - // the UnitSystem does not define this unit. Work around the - // missing conversion by using *to_si()* rather than *from_si()* - // for those quantities. - - const auto uPress = M::pressure; - const auto uRecipFVF = M::water_inverse_formation_volume_factor; - const auto uVisc = M::viscosity; - - const auto primID = std::size_t{0}; - for (auto tabID = 0*numTab; tabID < numTab; ++tabID) { - const auto& t = pvtw[tabID]; - - auto iPw = lintable.column(tabID, primID, 0); - auto irecipFvf = lintable.column(tabID, primID, 1); - auto iCw = lintable.column(tabID, primID, 2); - auto irecipFvfVisc = lintable.column(tabID, primID, 3); - auto idiffCwCv = lintable.column(tabID, primID, 4); - - *iPw = units.from_si(uPress , t.reference_pressure); - *irecipFvf = units.from_si(uRecipFVF, 1.0 / t.volume_factor); - - // Compressibility unit hack here (*to_si()*) - *iCw = units.to_si(uPress, t.compressibility); - - *irecipFvfVisc = - units.from_si(uRecipFVF, 1.0 / t.volume_factor) - / units.from_si(uVisc, t.viscosity); - - // Viscosibility unit hack here (*to_si()*) - *idiffCwCv = - units.to_si(uPress, t.compressibility - t.viscosibility); - } - - return lintable.getDataDestructively(); - } - } // Water - -}} // Anonymous::PVTFunc - -namespace Opm { - - Tables::Tables(const UnitSystem& units0) - : units (units0) - , m_tabdims(Ix::TabDimsNumElems, 0) - { - // Initialize subset of base pointers and dimensions to 1 to honour - // requirements of TABDIMS protocol. The magic constant 59 is - // derived from the file-formats documentation. - std::fill_n(std::begin(this->m_tabdims), 59, 1); - } - - void Tables::addData(const std::size_t offset_index, - const std::vector& new_data) - { - this->m_tabdims[ offset_index ] = this->data.size() + 1; - - this->data.insert(this->data.end(), new_data.begin(), new_data.end()); - - this->m_tabdims[ Ix::TabSize ] = this->data.size(); - } - - void Tables::addDensity( const DensityTable& density) - { - if (density.size() == 0) { return; } - - const double default_value = -2.0e20; - const auto nreg = density.size(); - const auto nph = density[0].size; - - std::vector densityData(nreg * nph, default_value); - { - const auto urho = UnitSystem::measure::density; - - auto* rho_o = &densityData[0*nreg + 0]; // Oil <-> Column 0 - auto* rho_w = &densityData[1*nreg + 0]; // Water <-> Column 1 - auto* rho_g = &densityData[2*nreg + 0]; // Gas <-> Column 2 - - for (const auto& record : density) { - *rho_o++ = this->units.from_si(urho, record.oil); - *rho_w++ = this->units.from_si(urho, record.water); - *rho_g++ = this->units.from_si(urho, record.gas); - } - } - - this->m_tabdims[Ix::DensityNumTables] = nreg; - this->addData(Ix::DensityTableStart, densityData ); - } - - void Tables::addPVTTables(const EclipseState& es) - { - const auto& phases = es.runspec().phases(); - - if (phases.active(Phase::GAS)) { this->addGasPVTTables (es); } - if (phases.active(Phase::OIL)) { this->addOilPVTTables (es); } - if (phases.active(Phase::WATER)) { this->addWaterPVTTables(es); } - } - - void Tables::addSatFunc(const EclipseState& es) - { - const auto& tabMgr = es.getTableManager(); - const auto& phases = es.runspec().phases(); - const auto gas = phases.active(Phase::GAS); - const auto oil = phases.active(Phase::OIL); - const auto wat = phases.active(Phase::WATER); - const auto threeP = gas && oil && wat; - - const auto famI = // SGOF and/or SWOF - (gas && tabMgr.hasTables("SGOF")) || - (wat && tabMgr.hasTables("SWOF")); - - const auto famII = // SGFN, SOF{2,3}, SWFN - (gas && tabMgr.hasTables("SGFN")) || - (oil && ((threeP && tabMgr.hasTables("SOF3")) || - tabMgr.hasTables("SOF2"))) || - (wat && tabMgr.hasTables("SWFN")); - - if ((famI + famII) != 1) { - // Both Fam I && Fam II or neither of them. Can't have that. - return; // Logging here? - } - else if (famI) { - this->addSatFunc_FamilyOne(es, gas, oil, wat); - } - else { - // Family II - this->addSatFunc_FamilyTwo(es, gas, oil, wat); - } - } - - const std::vector& Tables::tabdims() const - { - return this->m_tabdims; - } - - const std::vector& Tables::tab() const - { - return this->data; - } - - void Tables::addSatFunc_FamilyOne(const EclipseState& es, - const bool gas, - const bool oil, - const bool wat) - { - const auto& tabMgr = es.getTableManager(); - const auto& tabd = es.runspec().tabdims(); - const auto nssfun = tabd.getNumSatNodes(); - const auto tolcrit = es.runspec() - .saturationFunctionControls() - .minimumRelpermMobilityThreshold(); - - if (gas) { - const auto& tables = tabMgr.getSgofTables(); - - const auto sgfn = - SatFunc::Gas::fromSGOF(nssfun, tolcrit, - this->units, tables); - - this->addData(Ix::SgfnTableStart, sgfn); - this->m_tabdims[Ix::SgfnNumSatNodes] = nssfun; - this->m_tabdims[Ix::SgfnNumTables] = tables.size(); - } - - if (oil) { - if (gas && !wat) { // 2p G/O System - const auto& tables = tabMgr.getSgofTables(); - - const auto sofn = - SatFunc::Oil::TwoPhase::fromSGOF(nssfun, tolcrit, tables); - - this->addData(Ix::SofnTableStart, sofn); - this->m_tabdims[Ix::SofnNumSatNodes] = nssfun; - this->m_tabdims[Ix::SofnNumTables] = tables.size(); - } - else if (wat && !gas) { // 2p O/W System - const auto& tables = tabMgr.getSwofTables(); - - const auto sofn = - SatFunc::Oil::TwoPhase::fromSWOF(nssfun, tolcrit, tables); - - this->addData(Ix::SofnTableStart, sofn); - this->m_tabdims[Ix::SofnNumSatNodes] = nssfun; - this->m_tabdims[Ix::SofnNumTables] = tables.size(); - } - else { // 3p G/O/W System - const auto& sgof = tabMgr.getSgofTables(); - const auto& swof = tabMgr.getSwofTables(); - - // Allocate 2*nssfun rows to account for table merging. - - const auto numRows = 2 * nssfun; - - const auto sofn = SatFunc::Oil::ThreePhase:: - fromSGOFandSWOF(numRows, tolcrit, sgof, swof); - - this->addData(Ix::SofnTableStart, sofn); - this->m_tabdims[Ix::SofnNumSatNodes] = numRows; - this->m_tabdims[Ix::SofnNumTables] = sgof.size(); - } - } - - if (wat) { - const auto& tables = tabMgr.getSwofTables(); - - const auto swfn = - SatFunc::Water::fromSWOF(nssfun, tolcrit, this->units, tables); - - this->addData(Ix::SwfnTableStart, swfn); - this->m_tabdims[Ix::SwfnNumSatNodes] = nssfun; - this->m_tabdims[Ix::SwfnNumTables] = tables.size(); - } - } - - void Tables::addSatFunc_FamilyTwo(const EclipseState& es, - const bool gas, - const bool oil, - const bool wat) - { - const auto& tabMgr = es.getTableManager(); - const auto& tabd = es.runspec().tabdims(); - const auto nssfun = tabd.getNumSatNodes(); - const auto tolcrit = es.runspec() - .saturationFunctionControls() - .minimumRelpermMobilityThreshold(); - - if (gas) { - const auto& tables = tabMgr.getSgfnTables(); - - const auto sgfn = - SatFunc::Gas::fromSGFN(nssfun, tolcrit, - this->units, tables); - - this->addData(Ix::SgfnTableStart, sgfn); - this->m_tabdims[Ix::SgfnNumSatNodes] = nssfun; - this->m_tabdims[Ix::SgfnNumTables] = tables.size(); - } - - if (oil) { - if (gas + wat == 1) { // 2p G/O or O/W System - const auto& tables = tabMgr.getSof2Tables(); - - const auto sofn = - SatFunc::Oil::TwoPhase::fromSOF2(nssfun, tolcrit, tables); - - this->addData(Ix::SofnTableStart, sofn); - this->m_tabdims[Ix::SofnNumSatNodes] = nssfun; - this->m_tabdims[Ix::SofnNumTables] = tables.size(); - } - else { // 3p G/O/W System - const auto& tables = tabMgr.getSof3Tables(); - - const auto sofn = - SatFunc::Oil::ThreePhase::fromSOF3(nssfun, tolcrit, tables); - - this->addData(Ix::SofnTableStart, sofn); - this->m_tabdims[Ix::SofnNumSatNodes] = nssfun; - this->m_tabdims[Ix::SofnNumTables] = tables.size(); - } - } - - if (wat) { - const auto& tables = tabMgr.getSwfnTables(); - - const auto swfn = - SatFunc::Water::fromSWFN(nssfun, tolcrit, this->units, tables); - - this->addData(Ix::SwfnTableStart, swfn); - this->m_tabdims[Ix::SwfnNumSatNodes] = nssfun; - this->m_tabdims[Ix::SwfnNumTables] = tables.size(); - } - } - - void Tables::addGasPVTTables(const EclipseState& es) - { - const auto& tabMgr = es.getTableManager(); - const auto& tabd = es.runspec().tabdims(); - - const auto numPressNodes = tabd.getNumPressureNodes(); - - const auto hasPVTG = !tabMgr.getPvtgTables().empty(); - const auto hasPVDG = tabMgr.hasTables("PVDG"); - - if (hasPVTG + hasPVDG != 1) { - // Inconsistent table specification. Maybe throw here? - return; - } - - if (hasPVTG) { - // Wet gas with vaporised/volatile oil. - const auto& pvtg = tabMgr.getPvtgTables(); - - const auto numCompNodes = - std::max(tabd.getNumRSNodes(), PVTFunc::Gas::maxNumCompNodes(pvtg)); - - const auto numPrimary = - std::max(numPressNodes, PVTFunc::Gas::maxNumPressNodes(pvtg)); - - const auto tableData = PVTFunc::Gas:: - fromPVTG(numCompNodes, numPrimary, this->units, pvtg); - - const auto pressData = PVTFunc::Gas:: - pressureNodes(numPrimary, this->units, pvtg); - - this->addData(Ix::PvtgMainStart, tableData); - this->addData(Ix::PvtgPressStart, pressData); - - this->m_tabdims[Ix::NumPvtgPressNodes] = numPrimary; - this->m_tabdims[Ix::NumPvtgCompNodes] = numCompNodes; - this->m_tabdims[Ix::NumPvtgTables] = pvtg.size(); - } - else { - // Dry gas, pressure dependent compressibility. - const auto& pvdg = tabMgr.getPvdgTables(); - - const auto numRows = - std::max(numPressNodes, PVTFunc::Gas::maxNumPressNodes(pvdg)); - - const auto tableData = PVTFunc::Gas::fromPVDG(numRows, this->units, pvdg); - - this->addData(Ix::PvtgMainStart, tableData); - this->m_tabdims[Ix::NumPvtgPressNodes] = numRows; - this->m_tabdims[Ix::NumPvtgTables] = pvdg.size(); - } - } - - void Tables::addOilPVTTables(const EclipseState& es) - { - const auto& tabMgr = es.getTableManager(); - const auto& tabd = es.runspec().tabdims(); - - const auto numPressNodes = tabd.getNumPressureNodes(); - - const auto hasPVTO = !tabMgr.getPvtoTables().empty(); - const auto hasPVDO = tabMgr.hasTables("PVDO"); - const auto hasPVCDO = !tabMgr.getPvcdoTable().empty(); - - if (hasPVTO + hasPVDO + hasPVCDO != 1) { - // Inconsistent table specification. Maybe throw here? - return; - } - - if (hasPVTO) { - // Live oil with dissolved gas. - const auto& pvto = tabMgr.getPvtoTables(); - - const auto numCompNodes = - std::max(tabd.getNumRSNodes(), PVTFunc::Oil::maxNumCompNodes(pvto)); - - const auto numRows = - std::max(numPressNodes, PVTFunc::Oil::maxNumPressNodes(pvto)); - - const auto tableData = PVTFunc::Oil:: - fromPVTO(numCompNodes, numRows, this->units, pvto); - - const auto rsData = PVTFunc::Oil:: - compositionNodes(numCompNodes, this->units, pvto); - - this->addData(Ix::PvtoMainStart, tableData); - this->addData(Ix::PvtoCompStart, rsData); - - this->m_tabdims[Ix::NumPvtoPressNodes] = numRows; - this->m_tabdims[Ix::NumPvtoCompNodes] = numCompNodes; - this->m_tabdims[Ix::NumPvtoTables] = pvto.size(); - } - else if (hasPVDO) { - // Dead oil, pressure dependent compressibility. - const auto& pvdo = tabMgr.getPvdoTables(); - - const auto numRows = - std::max(numPressNodes, PVTFunc::Oil::maxNumPressNodes(pvdo)); - - const auto tableData = PVTFunc::Oil::fromPVDO(numRows, this->units, pvdo); - - this->addData(Ix::PvtoMainStart, tableData); - this->m_tabdims[Ix::NumPvtoPressNodes] = numRows; - this->m_tabdims[Ix::NumPvtoTables] = pvdo.size(); - } - else { - // Dead oil, constant compressibility. - const auto& pvcdo = tabMgr.getPvcdoTable(); - - const auto numRows = std::max(numPressNodes, pvcdo.size()); - - const auto tableData = PVTFunc::Oil::fromPVCDO(numRows, this->units, pvcdo); - - this->addData(Ix::PvtoMainStart, tableData); - this->m_tabdims[Ix::NumPvtoPressNodes] = numRows; - this->m_tabdims[Ix::NumPvtoTables] = pvcdo.size(); - } - } - - void Tables::addWaterPVTTables(const EclipseState& es) - { - const auto& tabMgr = es.getTableManager(); - - const auto& pvtw = tabMgr.getPvtwTable(); - - if (pvtw.empty()) { - return; - } - - const auto tableData = PVTFunc::Water::fromPVTW(this->units, pvtw); - - this->addData(Ix::PvtwStart, tableData); - this->m_tabdims[Ix::NumPvtwTables] = pvtw.size(); - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/WriteInit.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/WriteInit.cpp deleted file mode 100644 index 3c6a21004b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/WriteInit.cpp +++ /dev/null @@ -1,593 +0,0 @@ -/* - Copyright (c) 2019 Equinor ASA - Copyright (c) 2016 Statoil ASA - Copyright (c) 2013-2015 Andreas Lauser - Copyright (c) 2013 SINTEF ICT, Applied Mathematics. - Copyright (c) 2013 Uni Research AS - Copyright (c) 2015 IRIS AS - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include - -#include - -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -#include - -#include -#include -#include -#include -#include - -namespace { - - struct CellProperty - { - std::string name; - ::Opm::UnitSystem::measure unit; - }; - - using Properties = std::vector; - - class ScalingVectors - { - public: - ScalingVectors& withHysteresis(const bool active); - ScalingVectors& collect(const ::Opm::Phases& ph); - - const Properties& getVectors() const - { - return this->vectors_; - } - - private: - Properties vectors_{}; - bool useHysteresis_{false}; - - void insertScaledWaterEndPoints(); - void insertScaledGasEndPoints(); - void insertScaledOilEndPoints(const ::Opm::Phases& ph); - void insertScaledRelpermValues(const ::Opm::Phases& ph); - void insertScaledCapillaryPressure(const ::Opm::Phases& ph); - void insertImbibitionPoints(); - }; - - ScalingVectors& ScalingVectors::withHysteresis(const bool active) - { - this->useHysteresis_ = active; - - return *this; - } - - ScalingVectors& ScalingVectors::collect(const ::Opm::Phases& ph) - { - if (ph.active(::Opm::Phase::WATER)) { - this->insertScaledWaterEndPoints(); - } - - if (ph.active(::Opm::Phase::GAS)) { - this->insertScaledGasEndPoints(); - } - - if (ph.active(::Opm::Phase::OIL)) { - this->insertScaledOilEndPoints(ph); - } - - this->insertScaledRelpermValues(ph); - - if (ph.active(::Opm::Phase::OIL)) { - this->insertScaledCapillaryPressure(ph); - } - - if (this->useHysteresis_) { - // Run uses hysteresis. Output scaled imbibition curve too. - this->insertImbibitionPoints(); - } - - return *this; - } - - void ScalingVectors::insertScaledWaterEndPoints() - { - this->vectors_.insert(this->vectors_.end(), - { - {"SWL" , ::Opm::UnitSystem::measure::identity }, - {"SWCR", ::Opm::UnitSystem::measure::identity }, - {"SWU" , ::Opm::UnitSystem::measure::identity }, - }); - } - - void ScalingVectors::insertScaledGasEndPoints() - { - this->vectors_.insert(this->vectors_.end(), - { - {"SGL" , ::Opm::UnitSystem::measure::identity }, - {"SGCR", ::Opm::UnitSystem::measure::identity }, - {"SGU" , ::Opm::UnitSystem::measure::identity }, - }); - } - - void ScalingVectors::insertScaledOilEndPoints(const ::Opm::Phases& ph) - { - if (ph.active(::Opm::Phase::WATER)) { - this->vectors_.push_back(CellProperty { - "SOWCR", ::Opm::UnitSystem::measure::identity - }); - } - - if (ph.active(::Opm::Phase::GAS)) { - this->vectors_.push_back(CellProperty { - "SOGCR", ::Opm::UnitSystem::measure::identity - }); - } - } - - void ScalingVectors::insertScaledRelpermValues(const ::Opm::Phases& ph) - { - if (ph.active(::Opm::Phase::WATER)) { - this->vectors_.insert(this->vectors_.end(), - { - {"KRW" , ::Opm::UnitSystem::measure::identity }, - {"KRWR", ::Opm::UnitSystem::measure::identity }, - }); - } - - if (ph.active(::Opm::Phase::GAS)) { - this->vectors_.insert(this->vectors_.end(), - { - {"KRG" , ::Opm::UnitSystem::measure::identity }, - {"KRGR", ::Opm::UnitSystem::measure::identity }, - }); - } - - if (ph.active(::Opm::Phase::OIL)) { - this->vectors_.push_back(CellProperty { - "KRO", ::Opm::UnitSystem::measure::identity - }); - - if (ph.active(::Opm::Phase::WATER)) { - this->vectors_.push_back(CellProperty { - "KRORW", ::Opm::UnitSystem::measure::identity - }); - } - - if (ph.active(::Opm::Phase::GAS)) { - this->vectors_.push_back(CellProperty { - "KRORG", ::Opm::UnitSystem::measure::identity - }); - } - } - } - - void ScalingVectors::insertScaledCapillaryPressure(const ::Opm::Phases& ph) - { - if (ph.active(::Opm::Phase::WATER)) { - this->vectors_.insert(this->vectors_.end(), - { - {"SWLPC", ::Opm::UnitSystem::measure::identity }, - {"PCW" , ::Opm::UnitSystem::measure::pressure }, - }); - } - - if (ph.active(::Opm::Phase::GAS)) { - this->vectors_.insert(this->vectors_.end(), - { - {"SGLPC", ::Opm::UnitSystem::measure::identity }, - {"PCG" , ::Opm::UnitSystem::measure::pressure }, - }); - } - } - - void ScalingVectors::insertImbibitionPoints() - { - const auto start = static_cast(0); - const auto count = static_cast(1); - const auto npt = this->vectors_.size(); - - this->vectors_.reserve(2 * npt); - - for (auto i = 0*npt; i < npt; ++i) { - auto pt = this->vectors_[i]; // Copy, preserve unit of measure. - - // Imbibition vector. E.g., SOWCR -> ISOWCR - pt.name.insert(start, count, 'I'); - - this->vectors_.push_back(std::move(pt)); - } - } - - // ================================================================= - - std::vector singlePrecision(const std::vector& x) - { - return { x.begin(), x.end() }; - } - - ::Opm::RestartIO::LogiHEAD::PVTModel - pvtFlags(const ::Opm::Runspec& rspec, const ::Opm::TableManager& tabMgr) - { - auto pvt = ::Opm::RestartIO::LogiHEAD::PVTModel{}; - - const auto& phases = rspec.phases(); - - pvt.isLiveOil = phases.active(::Opm::Phase::OIL) && - !tabMgr.getPvtoTables().empty(); - - pvt.isWetGas = phases.active(::Opm::Phase::GAS) && - !tabMgr.getPvtgTables().empty(); - - pvt.constComprOil = phases.active(::Opm::Phase::OIL) && - !(pvt.isLiveOil || - tabMgr.hasTables("PVDO") || - tabMgr.getPvcdoTable().empty()); - - return pvt; - } - - ::Opm::RestartIO::LogiHEAD::SatfuncFlags - satfuncFlags(const ::Opm::Runspec& rspec) - { - auto flags = ::Opm::RestartIO::LogiHEAD::SatfuncFlags{}; - - const auto& eps = rspec.endpointScaling(); - if (eps) { - flags.useEndScale = true; - flags.useDirectionalEPS = eps.directional(); - flags.useReversibleEPS = eps.reversible(); - flags.useAlternateEPS = eps.threepoint(); - } - - return flags; - } - - std::vector logihead(const ::Opm::EclipseState& es) - { - const auto& rspec = es.runspec(); - const auto& wsd = rspec.wellSegmentDimensions(); - const auto& hystPar = rspec.hysterPar(); - - const auto lh = ::Opm::RestartIO::LogiHEAD{} - .variousParam(false, false, wsd.maxSegmentedWells(), hystPar.active()) - .pvtModel(pvtFlags(rspec, es.getTableManager())) - .saturationFunction(satfuncFlags(rspec)) - ; - - return lh.data(); - } - - void writeInitFileHeader(const ::Opm::EclipseState& es, - const ::Opm::EclipseGrid& grid, - const ::Opm::Schedule& sched, - Opm::EclIO::OutputStream::Init& initFile) - { - { - const auto ih = ::Opm::RestartIO::Helpers:: - createInteHead(es, grid, sched, 0.0, 0, 0, 0); - - initFile.write("INTEHEAD", ih); - } - - { - initFile.write("LOGIHEAD", logihead(es)); - } - - { - const auto dh = ::Opm::RestartIO::Helpers:: - createDoubHead(es, sched, 0, 0.0, 0.0); - - initFile.write("DOUBHEAD", dh); - } - } - - - - void writePoreVolume(const ::Opm::EclipseState& es, - const ::Opm::UnitSystem& units, - ::Opm::EclIO::OutputStream::Init& initFile) - { - auto porv = es.globalFieldProps().porv(true); - units.from_si(::Opm::UnitSystem::measure::volume, porv); - initFile.write("PORV", singlePrecision(porv)); - } - - void writeIntegerCellProperties(const ::Opm::EclipseState& es, - ::Opm::EclIO::OutputStream::Init& initFile) - { - - // The INIT file should always contain PVT, saturation function, - // equilibration, and fluid-in-place region vectors. Call - // assertKeyword() here--on a 'const' GridProperties object--to - // invoke the autocreation property, and ensure that the keywords - // exist in the properties container. - const auto& fp = es.globalFieldProps(); - fp.get_int("PVTNUM"); - fp.get_int("SATNUM"); - fp.get_int("EQLNUM"); - fp.get_int("FIPNUM"); - - for (const auto& keyword : fp.keys()) - initFile.write(keyword, fp.get_int(keyword)); - - } - - - - void writeGridGeometry(const ::Opm::EclipseGrid& grid, - const ::Opm::UnitSystem& units, - ::Opm::EclIO::OutputStream::Init& initFile) - { - const auto length = ::Opm::UnitSystem::measure::length; - const auto nAct = grid.getNumActive(); - - auto dx = std::vector{}; dx .reserve(nAct); - auto dy = std::vector{}; dy .reserve(nAct); - auto dz = std::vector{}; dz .reserve(nAct); - auto depth = std::vector{}; depth.reserve(nAct); - - for (auto cell = 0*nAct; cell < nAct; ++cell) { - const auto globCell = grid.getGlobalIndex(cell); - const auto& dims = grid.getCellDims(globCell); - - dx .push_back(units.from_si(length, dims[0])); - dy .push_back(units.from_si(length, dims[1])); - dz .push_back(units.from_si(length, dims[2])); - depth.push_back(units.from_si(length, grid.getCellDepth(globCell))); - } - - initFile.write("DEPTH", depth); - initFile.write("DX" , dx); - initFile.write("DY" , dy); - initFile.write("DZ" , dz); - } - - template - void writeCellDoublePropertiesWithDefaultFlag(const Properties& propList, - const ::Opm::FieldPropsManager& fp, - WriteVector&& write) - { - for (const auto& prop : propList) { - if (! fp.has_double(prop.name)) - continue; - - auto data = fp.get_double(prop.name); - auto defaulted = fp.defaulted(prop.name); - write(prop, std::move(defaulted), std::move(data)); - } - } - - template - void writeCellPropertiesValuesOnly(const Properties& propList, - const ::Opm::FieldPropsManager& fp, - WriteVector&& write) - { - for (const auto& prop : propList) { - - if (!fp.has_double(prop.name)) - continue; - auto data = fp.get_double(prop.name); - write(prop, std::move(data)); - } - } - - void writeDoubleCellProperties(const Properties& propList, - const ::Opm::FieldPropsManager& fp, - const ::Opm::UnitSystem& units, - const bool needDflt, - ::Opm::EclIO::OutputStream::Init& initFile) - { - if (needDflt) { - writeCellDoublePropertiesWithDefaultFlag(propList, fp, - [&units, &initFile](const CellProperty& prop, - std::vector&& dflt, - std::vector&& value) - { - units.from_si(prop.unit, value); - - for (auto n = dflt.size(), i = decltype(n){}; i < n; ++i) { - if (dflt[i]) { - // Element defaulted. Output sentinel value - // (-1.0e+20) to signify defaulted element. - // - // Note: Start as float for roundtripping through - // function singlePrecision(). - value[i] = static_cast(-1.0e+20f); - } - } - - initFile.write(prop.name, singlePrecision(value)); - }); - } - else { - writeCellPropertiesValuesOnly(propList, fp, - [&units, &initFile](const CellProperty& prop, - std::vector&& value) - { - units.from_si(prop.unit, value); - initFile.write(prop.name, singlePrecision(value)); - }); - } - } - - void writeDoubleCellProperties(const ::Opm::EclipseState& es, - const ::Opm::UnitSystem& units, - ::Opm::EclIO::OutputStream::Init& initFile) - { - const auto doubleKeywords = Properties { - {"PORO" , ::Opm::UnitSystem::measure::identity }, - {"PERMX" , ::Opm::UnitSystem::measure::permeability }, - {"PERMY" , ::Opm::UnitSystem::measure::permeability }, - {"PERMZ" , ::Opm::UnitSystem::measure::permeability }, - {"NTG" , ::Opm::UnitSystem::measure::identity }, - }; - - // The INIT file should always contain the NTG property, we - // therefore invoke the auto create functionality to ensure - // that "NTG" is included in the properties container. - const auto& fp = es.globalFieldProps(); - fp.get_double("NTG"); - writeDoubleCellProperties(doubleKeywords, fp, - units, false, initFile); - } - - void writeSimulatorProperties(const ::Opm::EclipseGrid& grid, - const ::Opm::data::Solution& simProps, - ::Opm::EclIO::OutputStream::Init& initFile) - { - for (const auto& prop : simProps) { - const auto& value = grid.compressedVector(prop.second.data); - - initFile.write(prop.first, singlePrecision(value)); - } - } - - void writeTableData(const ::Opm::EclipseState& es, - const ::Opm::UnitSystem& units, - ::Opm::EclIO::OutputStream::Init& initFile) - { - ::Opm::Tables tables(units); - - tables.addPVTTables(es); - tables.addDensity(es.getTableManager().getDensityTable()); - tables.addSatFunc(es); - - initFile.write("TABDIMS", tables.tabdims()); - initFile.write("TAB" , tables.tab()); - } - - void writeIntegerMaps(std::map> mapData, - ::Opm::EclIO::OutputStream::Init& initFile) - { - for (const auto& pair : mapData) { - const auto& key = pair.first; - - if (key.size() > std::size_t{8}) { - throw std::invalid_argument { - "Keyword '" + key + "'is too long." - }; - } - - initFile.write(key, pair.second); - } - } - - void writeFilledSatFuncScaling(const Properties& propList, - ::Opm::FieldPropsManager&& fp, - const ::Opm::UnitSystem& units, - ::Opm::EclIO::OutputStream::Init& initFile) - { - for (const auto& prop : propList) - fp.get_double(prop.name); - - // Don't write sentinel value if input defaulted. - writeDoubleCellProperties(propList, fp, - units, false, initFile); - } - - void writeSatFuncScaling(const ::Opm::EclipseState& es, - const ::Opm::UnitSystem& units, - ::Opm::EclIO::OutputStream::Init& initFile) - { - const auto epsVectors = ScalingVectors{} - .withHysteresis(es.runspec().hysterPar().active()) - .collect (es.runspec().phases()); - - const auto& fp = es.globalFieldProps(); - if (! es.cfg().init().filleps()) { - // No FILLEPS in input deck or number of active phases - // unsupported by Flow's saturation function finalizers. - // - // Output only those endpoint arrays that exist in the input - // deck. Write sentinel value if input defaulted. - writeDoubleCellProperties(epsVectors.getVectors(), fp, - units, true, initFile); - } - else { - // Input deck specified FILLEPS so we should output all endpoint - // arrays, whether explicitly defined in the input deck or not. - // However, downstream clients of GridProperties should - // not see scaling arrays created for output purposes only, so - // make a copy of the properties object and modify that copy in - // order to leave the original intact. Don't write sentinel - // value if input defaulted. - auto fp_copy = fp; - writeFilledSatFuncScaling(epsVectors.getVectors(), - std::move(fp_copy), - units, initFile); - } - } - - void writeNonNeighbourConnections(const ::Opm::NNC& nnc, - const ::Opm::UnitSystem& units, - ::Opm::EclIO::OutputStream::Init& initFile) - { - auto tran = std::vector{}; - tran.reserve(nnc.numNNC()); - - for (const auto& nd : nnc.data()) { - tran.push_back(nd.trans); - } - - units.from_si(::Opm::UnitSystem::measure::transmissibility, tran); - - initFile.write("TRANNNC", singlePrecision(tran)); - } -} // Anonymous namespace - -void Opm::InitIO::write(const ::Opm::EclipseState& es, - const ::Opm::EclipseGrid& grid, - const ::Opm::Schedule& schedule, - const ::Opm::data::Solution& simProps, - std::map> int_data, - const ::Opm::NNC& nnc, - ::Opm::EclIO::OutputStream::Init& initFile) -{ - const auto& units = es.getUnits(); - - writeInitFileHeader(es, grid, schedule, initFile); - - // The PORV vector is a special case. This particular vector always - // holds a total of nx*ny*nz elements, and the elements are explicitly - // set to zero for inactive cells. This treatment implies that the - // active/inactive cell mapping can be inferred by reading the PORV - // vector from the result set. - writePoreVolume(es, units, initFile); - writeGridGeometry(grid, units, initFile); - writeDoubleCellProperties(es, units, initFile); - writeSimulatorProperties(grid, simProps, initFile); - writeTableData(es, units, initFile); - writeIntegerCellProperties(es, initFile); - writeIntegerMaps(std::move(int_data), initFile); - writeSatFuncScaling(es, units, initFile); - - if (nnc.numNNC() > std::size_t{0}) { - writeNonNeighbourConnections(nnc, units, initFile); - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/WriteRFT.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/WriteRFT.cpp deleted file mode 100644 index 20e258e237..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/WriteRFT.cpp +++ /dev/null @@ -1,413 +0,0 @@ -/* - Copyright (c) 2019 Equinor ASA - Copyright (c) 2016 Statoil ASA - Copyright (c) 2013-2015 Andreas Lauser - Copyright (c) 2013 SINTEF ICT, Applied Mathematics. - Copyright (c) 2013 Uni Research AS - Copyright (c) 2015 IRIS AS - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include - -#include -#include - -#include - -#include - -#include -#include -#include - -#include - -#include -#include -#include -#include -#include -#include -#include - -namespace { - enum etcIx : std::vector>::size_type - { - Time = 0, - Well = 1, - LGR = 2, - Depth = 3, - Pressure = 4, - DataType = 5, - WellType = 6, - LiqRate = 7, - GasRate = 8, - ResVRate = 9, - Velocity = 10, - Reserved = 11, // Untouched - Viscosity = 12, - ConcPlyBr = 13, - PlyBrRate = 14, - PlyBrAds = 15, - }; - - namespace RftUnits { - namespace exceptions { - void metric(std::vector>& welletc) - { - welletc[etcIx::Depth] = " METRES"; - welletc[etcIx::Velocity] = " M/SEC"; - } - - void field(std::vector>& welletc) - { - welletc[etcIx::Depth] = " FEET"; - welletc[etcIx::Velocity] = " FT/SEC"; - welletc[etcIx::PlyBrRate] = " LB/DAY"; - } - - void lab(std::vector>& welletc) - { - welletc[etcIx::Time] = " HR"; - welletc[etcIx::Pressure] = " ATMA"; - welletc[etcIx::Velocity] = " CM/SEC"; - welletc[etcIx::ConcPlyBr] = " GM/SCC"; - welletc[etcIx::PlyBrRate] = " GM/HR"; - welletc[etcIx::PlyBrAds] = " GM/GM"; - } - - void pvt_m(std::vector>& welletc) - { - // PVT_M is METRIC with pressures in atmospheres. - metric(welletc); - - welletc[etcIx::Pressure] = " ATMA"; - } - - void input(std::vector>& welletc) - { - welletc[etcIx::Time] = " INPUT"; - welletc[etcIx::Depth] = " INPUT"; - welletc[etcIx::Pressure] = " INPUT"; - welletc[etcIx::LiqRate] = " INPUT"; - welletc[etcIx::GasRate] = " INPUT"; - welletc[etcIx::ResVRate] = " INPUT"; - welletc[etcIx::Velocity] = " INPUT"; - welletc[etcIx::Viscosity] = " INPUT"; - welletc[etcIx::ConcPlyBr] = " INPUT"; - welletc[etcIx::PlyBrRate] = " INPUT"; - welletc[etcIx::PlyBrAds] = " INPUT"; - } - } // namespace exceptions - - std::string - centre(std::string s, const std::string::size_type width = 8) - { - if (s.size() > width) { return s.substr(0, width); } - if (s.size() == width) { return s; } - - const auto npad = width - s.size(); - const auto left = (npad + 1) / 2; // ceil(npad / 2) - - return std::string(left, ' ') + s; - } - - std::string combine(std::string left, std::string right) - { - return left + '/' + right; - } - - void fill(const ::Opm::UnitSystem& usys, - std::vector>& welletc) - { - using M = ::Opm::UnitSystem::measure; - - welletc[etcIx::Time] = centre(usys.name(M::time)); - welletc[etcIx::Depth] = centre(usys.name(M::length)); - welletc[etcIx::Pressure] = centre(usys.name(M::pressure)); - welletc[etcIx::LiqRate] = centre(usys.name(M::liquid_surface_rate)); - welletc[etcIx::GasRate] = centre(usys.name(M::gas_surface_rate)); - welletc[etcIx::ResVRate] = centre(usys.name(M::rate)); - welletc[etcIx::Velocity] = centre(combine(usys.name(M::length), - usys.name(M::time))); - welletc[etcIx::Viscosity] = centre(usys.name(M::viscosity)); - welletc[etcIx::ConcPlyBr] = - centre(combine(usys.name(M::mass), - usys.name(M::liquid_surface_volume))); - - welletc[etcIx::PlyBrRate] = centre(usys.name(M::mass_rate)); - welletc[etcIx::PlyBrAds] = centre(combine(usys.name(M::mass), - usys.name(M::mass))); - } - } // namespace RftUnits - - class WellRFT - { - public: - explicit WellRFT(const std::size_t nconn = 0); - - void add(const ::Opm::UnitSystem& usys, - const ::Opm::Connection& conn, - const ::Opm::data::Connection& xcon, - const double depth); - - std::size_t nConn() const { return this->i_.size(); } - - const std::vector& conI() const { return this->i_; } - const std::vector& conJ() const { return this->j_; } - const std::vector& conK() const { return this->k_; } - - const std::vector& depth() const { return this->depth_; } - const std::vector& pressure() const { return this->press_; } - const std::vector& swat() const { return this->swat_; } - const std::vector& sgas() const { return this->sgas_; } - - const std::vector>& - hostgrid() const - { - return this->host_; - } - - private: - std::vector i_; - std::vector j_; - std::vector k_; - - std::vector depth_; - std::vector press_; - std::vector swat_; - std::vector sgas_; - - std::vector> host_; - }; - - WellRFT::WellRFT(const std::size_t nconn) - { - if (nconn == 0) { return; } - - this->i_.reserve(nconn); - this->j_.reserve(nconn); - this->k_.reserve(nconn); - - this->depth_.reserve(nconn); - this->press_.reserve(nconn); - this->swat_ .reserve(nconn); - this->sgas_ .reserve(nconn); - - this->host_.reserve(nconn); - } - - void WellRFT::add(const ::Opm::UnitSystem& usys, - const ::Opm::Connection& conn, - const ::Opm::data::Connection& xcon, - const double depth) - { - this->i_.push_back(conn.getI() + 1); - this->j_.push_back(conn.getJ() + 1); - this->k_.push_back(conn.getK() + 1); - - using M = ::Opm::UnitSystem::measure; - auto cvrt = [&usys](const M meas, const double x) -> float - { - return usys.from_si(meas, x); - }; - - this->depth_.push_back(cvrt(M::length , depth)); - this->press_.push_back(cvrt(M::pressure, xcon.cell_pressure)); - - this->swat_.push_back(xcon.cell_saturation_water); - this->sgas_.push_back(xcon.cell_saturation_gas); - - this->host_.emplace_back(); - } - - WellRFT - createWellRFT(const int reportStep, - const std::string& wname, - const ::Opm::UnitSystem& usys, - const ::Opm::EclipseGrid& grid, - const ::Opm::Schedule& sched, - const std::vector& xcon) - { - auto rft = WellRFT{ xcon.size() }; - - for (const auto& conn : sched.getWell(wname, reportStep).getConnections()) { - const auto i = static_cast(conn.getI()); - const auto j = static_cast(conn.getJ()); - const auto k = static_cast(conn.getK()); - - if (! grid.cellActive(i, j, k)) { - // Inactive cell. Ignore. - continue; - } - - const auto ix = grid.getGlobalIndex(i, j, k); - auto xconPos = std::find_if(xcon.begin(), xcon.end(), - [ix](const ::Opm::data::Connection& c) - { - return c.index == ix; - }); - - if (xconPos == xcon.end()) { - // RFT data not available for this connection. Unexpected. - continue; - } - - rft.add(usys, conn, *xconPos, grid.getCellDepth(ix)); - } - - return rft; - } - - std::vector> - wellETC(const std::string& wellName, - const std::string& dataType, - const ::Opm::UnitSystem& usys) - { - using UT = ::Opm::UnitSystem::UnitType; - auto ret = std::vector>(16); - - // Note: ret[etcIx::LGR] is well's LGR. Default constructed - // (i.e., blank) string is sufficient to represent no LGR. - - ret[etcIx::Well] = wellName; - - // 'P' -> PLT, 'R' -> RFT, 'S' -> Segment - ret[etcIx::DataType] = dataType; - - // We support "standard" well type only. - ret[etcIx::WellType] = "STANDARD"; - - RftUnits::fill(usys, ret); - - switch (usys.getType()) { - case UT::UNIT_TYPE_METRIC: - RftUnits::exceptions::metric(ret); - break; - - case UT::UNIT_TYPE_FIELD: - RftUnits::exceptions::field(ret); - break; - - case UT::UNIT_TYPE_LAB: - RftUnits::exceptions::lab(ret); - break; - - case UT::UNIT_TYPE_PVT_M: - RftUnits::exceptions::pvt_m(ret); - break; - - case UT::UNIT_TYPE_INPUT: - RftUnits::exceptions::input(ret); - break; - } - - return ret; - } - - void writeWellHeader(const double elapsed, - const std::string& wellName, - const ::Opm::Schedule& sched, - const ::Opm::UnitSystem& usys, - ::Opm::EclIO::OutputStream::RFT& rftFile) - { - { - const auto time = - usys.from_si(::Opm::UnitSystem::measure::time, elapsed); - - rftFile.write("TIME", std::vector { - static_cast(time) - }); - } - - { - const auto timePoint = ::Opm::RestartIO:: - getSimulationTimePoint(sched.getStartTime(), elapsed); - - rftFile.write("DATE", std::vector { - timePoint.day, // 1..31 - timePoint.month, // 1..12 - timePoint.year, - }); - } - - rftFile.write("WELLETC", wellETC(wellName, "R", usys)); - } - - void write(const WellRFT& rft, ::Opm::EclIO::OutputStream::RFT& rftFile) - { - rftFile.write("CONIPOS", rft.conI()); - rftFile.write("CONJPOS", rft.conJ()); - rftFile.write("CONKPOS", rft.conK()); - - rftFile.write("HOSTGRID", rft.hostgrid()); - - rftFile.write("DEPTH" , rft.depth()); - rftFile.write("PRESSURE", rft.pressure()); - rftFile.write("SWAT" , rft.swat()); - rftFile.write("SGAS" , rft.sgas()); - } - - void writeWellRFT(const int reportStep, - const double elapsed, - const std::string& wname, - const ::Opm::UnitSystem& usys, - const ::Opm::EclipseGrid& grid, - const ::Opm::Schedule& sched, - const std::vector& xcon, - ::Opm::EclIO::OutputStream::RFT& rftFile) - { - const auto rft = - createWellRFT(reportStep, wname, usys, grid, sched, xcon); - - writeWellHeader(elapsed, wname, sched, usys, rftFile); - - if (rft.nConn() > std::size_t{0}) { - write(rft, rftFile); - } - } -} // Anonymous namespace - -void Opm::RftIO::write(const int reportStep, - const double elapsed, - const ::Opm::UnitSystem& usys, - const ::Opm::EclipseGrid& grid, - const ::Opm::Schedule& schedule, - const ::Opm::data::WellRates& wellSol, - ::Opm::EclIO::OutputStream::RFT& rftFile) -{ - const auto& rftCfg = schedule.rftConfig(); - if (! rftCfg.active(reportStep)) { - // RFT not yet activated. Nothing to do. - return; - } - - for (const auto& wname : schedule.wellNames(reportStep)) { - if (! (rftCfg.rft(wname, reportStep) || - rftCfg.plt(wname, reportStep))) - { - // RFT output not requested for 'wname' at this time. - continue; - } - - // RFT output requested for 'wname' at this time. - writeWellRFT(reportStep, elapsed, wname, usys, grid, - schedule, wellSol.at(wname).connections, - rftFile); - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/WriteRPT.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/WriteRPT.cpp deleted file mode 100644 index 2474bc7737..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/WriteRPT.cpp +++ /dev/null @@ -1,46 +0,0 @@ -/* - Copyright (c) 2020 Equinor ASA - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include - -#include -#include - -namespace Opm::RptIO { - - using report_function = std::function; - - static const std::unordered_map report_functions { - { "WELSPECS", workers::write_WELSPECS }, - }; - - void write_report( - std::ostream& os, - const std::string& report, - unsigned value, - const Opm::Schedule& schedule, - const Opm::EclipseGrid& grid, - std::size_t report_step - ) { - const auto function { report_functions.find(report) } ; - if (function != report_functions.end()) { - function->second(os, value, schedule, grid, report_step); - } - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/report/WELSPECS.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/report/WELSPECS.cpp deleted file mode 100644 index 0eda8e4c5d..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/output/eclipse/report/WELSPECS.cpp +++ /dev/null @@ -1,690 +0,0 @@ -/* - Copyright (c) 2020 Equinor ASA - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include - -#include -#include - -#include -#include - -namespace { - - constexpr char field_separator { ':' } ; - constexpr char field_padding { ' ' } ; - constexpr char record_separator { '\n' } ; - constexpr char section_separator { '\n' } ; - constexpr char divider_character { '-' } ; - - void left_align(std::string& string, std::size_t width, std::size_t = 0) { - if (string.size() < width) { - string.append(std::string(width - string.size(), field_padding)); - } - } - - void left_header(std::string& string, std::size_t width, std::size_t line_number) { - if (line_number == 0) { - left_align(string, width, line_number); - } else { - string.clear(); - } - } - - void right_align(std::string& string, std::size_t width, std::size_t = 0) { - if (string.size() < width) { - string = std::string(width - string.size(), field_padding) + string; - } - } - - void centre_align(std::string& string, std::size_t width, std::size_t = 0) { - if (string.size() < width) { - std::size_t extra_space { width - string.size() } ; - std::size_t shift_one { extra_space % 2 } ; - - if (shift_one) { - extra_space--; - } - - std::size_t left { shift_one + extra_space / 2 }, right { extra_space / 2 } ; - - string = std::string(left, field_padding) + string + std::string(right, field_padding); - } - } - - struct context { - const Opm::Schedule& sched; - const Opm::EclipseGrid& grid; - }; - - template - const std::string& unimplemented(const T&, const context&, std::size_t) { - static const std::string s { } ; - - return s; - } - - template - bool add_separator(const T&, std::size_t line_number) { - return line_number == 0; - } - - template - struct column { - using fetch_function = std::function; - using format_function = std::function; - - std::size_t internal_width; - std::array header; - - fetch_function fetch = unimplemented; - format_function format = centre_align; - - void print(std::ostream& os, const T& data, const context& ctx, std::size_t line_number) const { - std::string string_data { fetch(data, ctx, line_number) } ; - format(string_data, internal_width, line_number); - centre_align(string_data, total_width()); - os << string_data; - } - - void print_header(std::ostream& os, std::size_t row) const { - std::string header_line { header[row] } ; - centre_align(header_line, total_width()); - os << header_line; - } - - constexpr std::size_t total_width() const { - return internal_width + 2; - } - }; - - template - struct table: std::vector> { - using std::vector>::vector; - using separator_function = std::function; - - std::size_t total_width() const { - std::size_t r { 1 + this->size() } ; - - for (const auto& column : *this) { - r += column.total_width(); - } - - return r; - } - - void print_divider(std::ostream& os, char padding = divider_character) const { - os << std::string(total_width(), padding) << record_separator; - } - - void print_header(std::ostream& os) const { - print_divider(os); - - for (size_t i { 0 }; i < header_height; ++i) { - for (const auto& column : *this) { - os << field_separator; - - column.print_header(os, i); - } - - os << field_separator << record_separator; - } - } - - void print_data(std::ostream& os, const std::vector& lines, const context& ctx, const separator_function& separator, std::size_t& line_number) const { - for (const auto& line : lines) { - if (separator(line, line_number)) { - print_divider(os); - } - - for (const auto& column : *this) { - os << field_separator; - - column.print(os, line, ctx, line_number); - } - - os << field_separator << record_separator; - - ++line_number; - } - } - }; - - - template - struct subreport { - using transform_function = std::function(const InputType&)>; - using separator_function = typename table::separator_function; - - std::string title; - std::string decor; - table column_definition; - const context ctx; - char bottom_border; - transform_function transform; - separator_function separator; - - subreport(const std::string& _title, const table& _coldef, const context& _ctx, char _bottom_border = '-', separator_function _sf = add_separator, transform_function _tf = &OutputType::transform) - : title { _title } - , decor { underline(title) } - , column_definition { _coldef } - , ctx { _ctx } - , bottom_border { _bottom_border } - , transform { _tf } - , separator { _sf } - { - centre_align(title, column_definition.total_width()); - centre_align(decor, column_definition.total_width()); - } - - std::string underline(const std::string& string) const { - return std::string(string.size(), divider_character); - } - - void print(std::ostream& os, const std::vector& data, const std::vector>& footnotes) const { - os << title << record_separator; - os << decor << record_separator; - - std::size_t line_number { 0 } ; - - os << section_separator; - - column_definition.print_header(os); - for (const auto element : data) { - column_definition.print_data(os, transform(element), this->ctx, separator, line_number); - } - column_definition.print_divider(os, bottom_border); - for (const auto& fnote: footnotes) - os << fnote.first << ": " << fnote.second << std::endl; - - os << std::endl << std::endl; - } - }; - -} - -namespace { - - inline std::string box_line(const std::pair& textp, std::size_t line) { - if (line == 1 || line == 2) { - std::string text { line == 1 ? textp.first : textp.second } ; - left_align(text, 72); - - return "*" + text + "*"; - } else { - return std::string(74, '*'); - } - } - - std::string wrap_string_for_header(const std::string& string) { - std::string r { string } ; - left_align(r, 27); - centre_align(r, 29); - - return r; - } - - const std::string header_days_string { "WELSPECS AT 0.00 DAYS" } ; - std::string header_days(const Opm::Schedule& , std::size_t ) { - return wrap_string_for_header(header_days_string); // TODO: Calculate properly - } - - const std::string report_line_string { "REPORT 0 31 DEC 2007" } ; - std::string report_line(const Opm::Schedule&, std::size_t ) { - return wrap_string_for_header(report_line_string); // TODO: Calculate properly - } - - const std::string header_version_string { "FLOW" } ; - std::string version_string() { - return wrap_string_for_header(header_version_string); // TODO: Include in build setup and fetch - } - - const std::string header_run_time_string { "RUN AT 12:41 ON 12 SEP 2016" } ; - std::string run_time() { - return wrap_string_for_header(header_run_time_string); // TODO: Calculate properly - } - - - void write_report_header(std::ostream& os, const Opm::Schedule& schedule, std::size_t report_step) { - const static std::string filler { std::string(29, ' ') } ; - - const std::pair box_text { "", "" } ; - os << - filler << box_line(box_text, 0) << filler << record_separator << - header_days(schedule, report_step) << box_line(box_text, 1) << version_string() << record_separator << - report_line(schedule, report_step) << box_line(box_text, 2) << run_time() << record_separator << - filler << box_line(box_text, 3) << filler << record_separator << - section_separator; - } - -} - -namespace { - - struct WellWrapper { - const Opm::Well& well; - - static std::vector transform(const Opm::Well& well) { - return {{ well }} ; - } - - std::string well_name(const context&, std::size_t) const { - return well.name(); - } - - std::string group_name(const context&, std::size_t) const { - return well.groupName(); - } - - std::string wellhead_location(const context&, std::size_t) const { - auto i { std::to_string(well.getHeadI() + 1) }, j { std::to_string(well.getHeadJ() + 1) } ; - - right_align(i, 3); - right_align(j, 3); - - return i + ", " + j; - } - - std::string reference_depth(const context&, std::size_t) const { - return std::to_string(well.getRefDepth()).substr(0,6); - } - - std::string preferred_phase(const context&, std::size_t) const { - std::ostringstream ss; - - ss << well.getPreferredPhase(); - - return ss.str().substr(0, 3); - } - - std::string pvt_tab(const context&, std::size_t) const { - return std::to_string( well.pvt_table_number() ); - } - - std::string shut_status(const context&, std::size_t) const { - return Opm::Well::Status2String(well.getStatus()); - } - - std::string region_number(const context&, std::size_t) const { - return std::to_string( well.fip_region_number() ); - } - - std::string dens_calc(const context&, std::size_t) const { - if (well.segmented_density_calculation()) - return "SEG"; - return "AVG"; - } - - /* - Don't know what the D-FACTOR represents, but all examples just show 0; - we have therefor hardcoded that for now. - */ - std::string D_factor(const context&, std::size_t) const { - return "0"; - } - - std::string cross_flow(const context&, std::size_t) const { - return well.getAllowCrossFlow() ? "YES" : "NO"; - } - - std::string drainage_radius(const context&, std::size_t) const { - if (well.getDrainageRadius() == 0) - return "P.EQUIV.R"; - return std::to_string(well.getDrainageRadius()).substr(0,6); - } - - std::string gas_inflow(const context&, std::size_t) const { - return Opm::Well::GasInflowEquation2String( well.gas_inflow_equation() ); - } - }; - - const table well_specification_table { - { 8, { "WELL" , "NAME" , }, &WellWrapper::well_name , left_align }, - { 8, { "GROUP" , "NAME" , }, &WellWrapper::group_name , left_align }, - { 8, { "WELLHEAD" , "LOCATION" , "( I, J )" }, &WellWrapper::wellhead_location, left_align }, - { 8, { "B.H.REF" , "DEPTH" , "METRES" }, &WellWrapper::reference_depth , right_align }, - { 5, { "PREF-" , "ERRED" , "PHASE" }, &WellWrapper::preferred_phase , }, - { 8, { "DRAINAGE" , "RADIUS" , "METRES" }, &WellWrapper::drainage_radius , }, - { 4, { "GAS" , "INFL" , "EQUN" }, &WellWrapper::gas_inflow , }, - { 7, { "SHUT-IN" , "INSTRCT" , }, &WellWrapper::shut_status , }, - { 5, { "CROSS" , "FLOW" , "ABLTY" }, &WellWrapper::cross_flow , }, - { 3, { "PVT" , "TAB" , }, &WellWrapper::pvt_tab , }, - { 4, { "WELL" , "DENS" , "CALC" }, &WellWrapper::dens_calc , }, - { 3, { "FIP" , "REG" , }, &WellWrapper::region_number , }, - { 11, { "WELL" , "D-FACTOR 1" , "DAY/SM3" }, &WellWrapper::D_factor , }}; - - - -void subreport_well_specification_data(std::ostream& os, const std::vector& data, const context& ctx) { - subreport well_specification { "WELL SPECIFICATION DATA", well_specification_table, ctx}; - well_specification.print(os, data, {{1, "The WELL D-FACTOR is not implemented - and the report will always show the default value 0."}}); - } - -} - -namespace { - - struct WellConnection { - const Opm::Well& well; - const Opm::Connection& connection; - - const std::string& well_name(const context&, std::size_t) const { - return well.name(); - } - - std::string grid_block(const context&, std::size_t) const { - const std::array ijk { connection.getI() + 1, connection.getJ() + 1, connection.getK() + 1 } ; - - auto compose_coordinates = [](std::string& out, int in) -> std::string { - constexpr auto delimiter { ',' } ; - std::string coordinate_part { std::to_string(in) } ; - right_align(coordinate_part, 3); - - return out.empty() - ? coordinate_part - : out + delimiter + coordinate_part; - }; - - return std::accumulate(std::begin(ijk), std::end(ijk), std::string {}, compose_coordinates); - } - - std::string cmpl_no(const context&, std::size_t) const { - return std::to_string(connection.complnum()); - } - - std::string centre_depth(const context&, std::size_t) const { - return std::to_string(connection.depth()).substr(0, 6); - } - - std::string open_shut(const context&, std::size_t) const { - return Opm::Connection::State2String(connection.state()); - } - - std::string sat_tab(const context&, std::size_t) const { - return std::to_string(connection.satTableId()); - } - - std::string conn_factor(const context&, std::size_t) const { - return std::to_string(connection.CF()).substr(0, 10); - } - - std::string int_diam(const context&, std::size_t) const { - return std::to_string(connection.rw() * 2).substr(0, 8); - } - - std::string kh_value(const context&, std::size_t) const { - return std::to_string(connection.Kh()).substr(0, 9); - } - - std::string skin_factor(const context&, std::size_t) const { - return std::to_string(connection.skinFactor()).substr(0, 8); - } - - std::string sat_scaling(const context&, std::size_t) const { - return ""; - } - - const std::string dfactor(const context&, std::size_t) const { - return "0"; - } - - static std::vector transform(const Opm::Well& well) { - const auto &connections { well.getConnections() } ; - std::vector out; - - for (const auto& connection : connections) { - out.push_back({ well, connection }); - } - - return out; - } - }; - - const table connection_table { - { 7, {"WELL" ,"NAME" , }, &WellConnection::well_name , left_align }, - { 12, {"GRID" ,"BLOCK" , }, &WellConnection::grid_block , }, - { 3, {"CMPL" ,"NO#" , }, &WellConnection::cmpl_no , right_align }, - { 7, {"CENTRE" ,"DEPTH" ,"METRES" }, &WellConnection::centre_depth , right_align }, - { 3, {"OPEN" ,"SHUT" , }, &WellConnection::open_shut , }, - { 3, {"SAT" ,"TAB" , }, &WellConnection::sat_tab , }, - { 8, {"CONNECTION" ,"FACTOR*" ,"CPM3/D/B" }, &WellConnection::conn_factor , right_align }, - { 6, {"INT" ,"DIAM" ,"METRES" }, &WellConnection::int_diam , right_align }, - { 7, {"K H" ,"VALUE" ,"MD.METRE" }, &WellConnection::kh_value , right_align }, - { 6, {"SKIN" ,"FACTOR" , }, &WellConnection::skin_factor , right_align }, - { 10, {"CONNECTION" ,"D-FACTOR 1" ,"DAY/SM3" }, &WellConnection::dfactor , }, - { 23, {"SATURATION SCALING DATA","SWMIN SWMAX SGMIN SGMAX 2", }, &WellConnection::sat_scaling , }}; - -} - -namespace { - - struct WellSegment { - const Opm::Well& well; - const Opm::Connection& connection; - const Opm::Segment& segment; - - bool branch_separator; - - const std::string& well_name(const context&, std::size_t) const { - return well.name(); - } - - std::string connection_grid(const context& ctx, std::size_t n) const { - const WellConnection wc { well, connection } ; - - return wc.grid_block(ctx, n); - } - - std::string well_name_seg(const context& ctx, std::size_t n) const { - if (n == 0) { - return well_name(ctx, n); - } else if (n == 1) { - return Opm::WellSegments::CompPressureDropToString(well.getSegments().compPressureDrop()); - } else { - return unimplemented(this, ctx, n); - } - } - - std::string segment_number(const context&, std::size_t) const { - return std::to_string(segment.segmentNumber()); - } - - std::string branch_id(const context&, std::size_t) const { - return std::to_string(segment.branchNumber()); - } - - std::string branch_number(const context& ctx, std::size_t n) const { - if (branch_separator) { - return branch_id(ctx, n); - } else { - return unimplemented(this, ctx, n); - } - } - - std::string connection_depth(const context&, std::size_t) const { - return std::to_string(connection.depth()).substr(0, 6); - } - - std::string segment_depth(const context&, std::size_t) const { - return std::to_string(segment.depth()).substr(0, 6); - } - - std::string length_end_segmt(const context&, std::size_t) const { - return std::to_string(segment.totalLength()).substr(0, 6); - } - - std::string total_length(const context&, std::size_t) const { - return std::to_string(segment.totalLength()).substr(0, 6); - } - - std::string t_v_depth(const context&, std::size_t) const { - return std::to_string(segment.depth()).substr(0, 6); - } - - std::string internal_diameter(const context&, std::size_t) const { - const auto number { segment.internalDiameter() } ; - - if (number != Opm::Segment::invalidValue()) { - return std::to_string(number).substr(0, 6); - } else { - return "0"; - } - } - - std::string roughness(const context&, std::size_t) const { - const auto number { segment.roughness() } ; - - if (number != Opm::Segment::invalidValue()) { - return std::to_string(number).substr(0, 8); - } else { - return "0"; - } - } - - std::string cross_section(const context&, std::size_t) const { - const auto number { segment.crossArea() } ; - - if (number != Opm::Segment::invalidValue()) { - return std::to_string(number).substr(0, 7); - } else { - return "0"; - } - } - - std::string volume(const context&, std::size_t) const { - return std::to_string(segment.volume()).substr(0, 5); - } - - std::string main_inlet(const context&, std::size_t) const { - const auto& inlets { segment.inletSegments() } ; - - if (inlets.size() != 0) { - return std::to_string(segment.inletSegments().front()); - } else { - return "0"; - } - - } - - std::string outlet(const context&, std::size_t) const { - return std::to_string(segment.outletSegment()); - } - - - static std::vector transform(const Opm::Well& well) { - const auto &connections { well.getConnections() } ; - std::vector out; - - int branch_number { 0 } ; - - for (const auto& connection : connections) { - const auto& segment { well.getSegments().getFromSegmentNumber(connection.segment()) } ; - const auto& separator { branch_number != segment.branchNumber() } ; - - out.push_back({ well, connection, segment, separator }); - - branch_number = segment.branchNumber(); - } - - return out; - } - - static void ws_format(std::string& string, std::size_t, std::size_t i) { - if (i == 0) { - left_align(string, 8, i); - } else { - right_align(string, 8, i); - } - } - - static bool segment_structure_separator(const WellSegment& segment, std::size_t) { - return segment.branch_separator; - } - - std::string grid_block_depth(const context& ctx, std::size_t) const { - return std::to_string( ctx.grid.getCellDepth( connection.global_index() )).substr(0,6); - } - }; - - - const table msw_connection_table = { - { 8, {"WELL" , "NAME" , }, &WellSegment::well_name , left_header }, - { 9, {"CONNECTION" , "" , }, &WellSegment::connection_grid , }, - { 5, {"SEGMENT" , "NUMBER" , }, &WellSegment::segment_number , right_align }, - { 8, {"BRANCH" , "ID" , }, &WellSegment::branch_id , }, - { 9, {"TUB LENGTH" , "START PERFS", "METRES" }, unimplemented , right_align }, - { 9, {"TUB LENGTH" , "END PERFS" , "METRES" }, unimplemented , right_align }, - { 9, {"TUB LENGTH" , "CENTR PERFS", "METRES" }, unimplemented , right_align }, - { 9, {"TUB LENGTH" , "END SEGMT" , "METRES" }, &WellSegment::length_end_segmt, right_align }, - { 8, {"CONNECTION" , "DEPTH" , "METRES" }, &WellSegment::connection_depth, right_align }, - { 8, {"SEGMENT" , "DEPTH" , "METRES" }, &WellSegment::segment_depth , right_align }, - { 9, {"GRID BLOCK" , "DEPTH" , "METRES" }, &WellSegment::grid_block_depth, right_align }, - }; - - const table msw_well_table = { - { 6, { "WELLNAME" , "AND" , "SEG TYPE" }, &WellSegment::well_name_seg , &WellSegment::ws_format }, - { 3, { "SEG" , "NO" , "" }, &WellSegment::segment_number , right_align }, - { 3, { "BRN" , "NO" , "" }, &WellSegment::branch_number , right_align }, - { 5, { "MAIN" , "INLET" , "SEGMENT" }, &WellSegment::main_inlet , right_align }, - { 5, { "" , "OUTLET" , "SEGMENT" }, &WellSegment::outlet , right_align }, - { 7, { "SEGMENT" , "LENGTH" , "METRES" }, unimplemented , right_align }, - { 8, { "TOT LENGTH", "TO END" , "METRES" }, &WellSegment::total_length , right_align }, - { 8, { "DEPTH" , "CHANGE" , "METRES" }, unimplemented , right_align }, - { 8, { "T.V. DEPTH", "AT END" , "METRES" }, &WellSegment::t_v_depth , right_align }, - { 6, { "DIA OR F" , "SCALING" , "METRES" }, &WellSegment::internal_diameter, right_align }, - { 8, { "VFP TAB OR", "ABS ROUGHN" , "METRES" }, &WellSegment::roughness , right_align }, - { 7, { "AREA" , "X-SECTN" , "M**2" }, &WellSegment::cross_section , right_align }, - { 7, { "VOLUME" , "" , "M3" }, &WellSegment::volume , right_align }, - { 8, { "P DROP" , "MULT" , "FACTOR" }, unimplemented , right_align }, - }; -} - -namespace { - -void subreport_well_connection_data(std::ostream& os, const std::vector& data, const context& ctx) { - const subreport well_connection { "WELL CONNECTION DATA", connection_table, ctx}; - well_connection.print(os, data, {{1, "The well connection D-FACTOR is not implemented in opm and the report will always show 0."}, - {2, "The saturation scaling data has not been implemented in the report and will show blank"}}); - } - -} - -void Opm::RptIO::workers::write_WELSPECS(std::ostream& os, unsigned, const Opm::Schedule& schedule, const Opm::EclipseGrid& grid, std::size_t report_step) { - auto well_names = schedule.changed_wells(report_step); - if (well_names.empty()) - return; - - context ctx{schedule, grid}; - std::vector changed_wells; - std::transform(well_names.begin(), well_names.end(), std::back_inserter(changed_wells), [&report_step, &schedule](const std::string& wname) { return schedule.getWell(wname, report_step); }); - - write_report_header(os, schedule, report_step); - subreport_well_specification_data(os, changed_wells, ctx); - subreport_well_connection_data(os, changed_wells, ctx); - - for (const auto& well : changed_wells) { - if (well.isMultiSegment()) { - const subreport msw_data { "MULTI-SEGMENT WELL: SEGMENT STRUCTURE", msw_well_table, ctx, '=', &WellSegment::segment_structure_separator}; - const subreport msw_connection { "MULTI-SEGMENT WELL: CONNECTION DATA", msw_connection_table, ctx, '='}; - - msw_data.print(os, { well }, {}); - msw_connection.print(os, { well }, {}); - } - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Deck/Deck.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Deck/Deck.cpp deleted file mode 100644 index b0f66d785d..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Deck/Deck.cpp +++ /dev/null @@ -1,316 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - along with OPM. If not, see . - */ - -#include -#include - -#include -#include -#include -#include -#include - -namespace Opm { - - bool DeckView::hasKeyword( const DeckKeyword& keyword ) const { - auto key = this->keywordMap.find( keyword.name() ); - - if( key == this->keywordMap.end() ) return false; - - for( auto index : key->second ) - if( &this->getKeyword( index ) == &keyword ) return true; - - return false; - } - - bool DeckView::hasKeyword( const std::string& keyword ) const { - return this->keywordMap.find( keyword ) != this->keywordMap.end(); - } - - const DeckKeyword& DeckView::getKeyword( const std::string& keyword, size_t index ) const { - if( !this->hasKeyword( keyword ) ) - throw std::invalid_argument("Keyword " + keyword + " not in deck."); - - return this->getKeyword( this->offsets( keyword ).at( index ) ); - } - - const DeckKeyword& DeckView::getKeyword( const std::string& keyword ) const { - if( !this->hasKeyword( keyword ) ) - throw std::invalid_argument("Keyword " + keyword + " not in deck."); - - return this->getKeyword( this->offsets( keyword ).back() ); - } - - const DeckKeyword& DeckView::getKeyword( size_t index ) const { - if( index >= this->size() ) - throw std::out_of_range("Keyword index " + std::to_string( index ) + " is out of range."); - - return *( this->begin() + index ); - } - - size_t DeckView::count( const std::string& keyword ) const { - if( !this->hasKeyword( keyword ) ) return 0; - - return this->offsets( keyword ).size(); - } - - const std::vector< const DeckKeyword* > DeckView::getKeywordList( const std::string& keyword ) const { - if( !hasKeyword( keyword ) ) return {}; - - const auto& indices = this->offsets( keyword ); - - std::vector< const DeckKeyword* > ret; - ret.reserve( indices.size() ); - - for( size_t i : indices ) - ret.push_back( &this->getKeyword( i ) ); - - return ret; - } - - size_t DeckView::size() const { - return std::distance( this->begin(), this->end() ); - } - - DeckView::const_iterator DeckView::begin() const { - return this->first; - } - - DeckView::const_iterator DeckView::end() const { - return this->last; - } - - void DeckView::add( const DeckKeyword* kw, const_iterator f, const_iterator l ) { - this->keywordMap[ kw->name() ].push_back( std::distance( f, l ) - 1 ); - this->first = f; - this->last = l; - } - - static const std::vector< size_t > empty_indices = {}; - const std::vector< size_t >& DeckView::offsets( const std::string& keyword ) const { - if( !hasKeyword( keyword ) ) return empty_indices; - - return this->keywordMap.find( keyword )->second; - } - - DeckView::DeckView( const_iterator first_arg, const_iterator last_arg) - { - this->init(first_arg, last_arg); - } - - void DeckView::init( const_iterator first_arg, const_iterator last_arg ) { - this->first = first_arg; - this->last = last_arg; - - this->keywordMap.clear(); - - size_t index = 0; - for( const auto& kw : *this ) - this->keywordMap[ kw.name() ].push_back( index++ ); - } - - DeckView::DeckView( std::pair< const_iterator, const_iterator > limits ) : - DeckView( limits.first, limits.second ) - {} - - Deck::Deck() : - Deck( std::vector() ) - {} - - /* - This constructor should be ssen as a technical implemtation detail of the - default constructor, and not something which should be invoked directly. - The point is that the derived class DeckView contains iterators to the - keywordList member in the base class - this represents some ordering - challenges in the construction phase. - */ - Deck::Deck( std::vector&& x) : - DeckView(x.begin(), x.end()), - keywordList(std::move(x)), - defaultUnits( UnitSystem::newMETRIC() ) - { - } - - Deck::Deck( const Deck& d ) : - DeckView(d.begin(), d.end()), - keywordList( d.keywordList ), - defaultUnits( d.defaultUnits ), - m_dataFile( d.m_dataFile ), - input_path( d.input_path ) - { - this->init(this->keywordList.begin(), this->keywordList.end()); - if (d.activeUnits) - this->activeUnits.reset( new UnitSystem(*d.activeUnits.get())); - unit_system_access_count = d.unit_system_access_count; - } - - Deck Deck::serializeObject() - { - Deck result; - result.keywordList = {DeckKeyword::serializeObject()}; - result.defaultUnits = UnitSystem::serializeObject(); - result.activeUnits = std::make_unique(UnitSystem::serializeObject()); - result.m_dataFile = "test1"; - result.input_path = "test2"; - result.unit_system_access_count = 1; - - return result; - } - - void Deck::addKeyword( DeckKeyword&& keyword ) { - if (keyword.name() == "FIELD") - this->selectActiveUnitSystem( UnitSystem::UnitType::UNIT_TYPE_FIELD ); - else if (keyword.name() == "METRIC") - this->selectActiveUnitSystem( UnitSystem::UnitType::UNIT_TYPE_METRIC ); - else if (keyword.name() == "LAB") - this->selectActiveUnitSystem( UnitSystem::UnitType::UNIT_TYPE_LAB ); - else if (keyword.name() == "PVT-M") - this->selectActiveUnitSystem( UnitSystem::UnitType::UNIT_TYPE_PVT_M ); - - this->keywordList.push_back( std::move( keyword ) ); - auto fst = this->keywordList.begin(); - auto lst = this->keywordList.end(); - this->add( &this->keywordList.back(), fst, lst ); - } - - void Deck::addKeyword( const DeckKeyword& keyword ) { - DeckKeyword kw = keyword; - this->addKeyword( std::move( kw ) ); - } - - - DeckKeyword& Deck::getKeyword( size_t index ) { - return this->keywordList.at( index ); - } - - UnitSystem& Deck::getDefaultUnitSystem() { - return this->defaultUnits; - } - - const UnitSystem& Deck::getDefaultUnitSystem() const { - return this->defaultUnits; - } - - UnitSystem& Deck::getActiveUnitSystem() { - this->unit_system_access_count++; - if (this->activeUnits) - return *this->activeUnits; - else - return this->defaultUnits; - } - - void Deck::selectActiveUnitSystem(UnitSystem::UnitType unit_type) { - const auto& current = this->getActiveUnitSystem(); - if (current.use_count() > 0 && (current.getType() != unit_type)) - throw std::invalid_argument("Sorry - can not change unit system after dimensionfull features have been entered"); - - if (current.getType() != unit_type) - this->activeUnits.reset( new UnitSystem(unit_type) ); - } - - - const UnitSystem& Deck::getActiveUnitSystem() const { - this->unit_system_access_count++; - if (this->activeUnits) - return *this->activeUnits; - else - return this->defaultUnits; - } - - const std::string& Deck::getDataFile() const { - return m_dataFile; - } - - const std::string& Deck::getInputPath() const { - return this->input_path; - } - - std::string Deck::makeDeckPath(const std::string& path) const { - if (path.size() > 0 && path[0] == '/') - return path; - - if (this->input_path.size() == 0) - return path; - else - return this->input_path + "/" + path; - } - - - void Deck::setDataFile(const std::string& dataFile) { - this->m_dataFile = dataFile; - - auto slash_pos = dataFile.find_last_of("/\\"); - if (slash_pos == std::string::npos) - this->input_path = ""; - else - this->input_path = dataFile.substr(0, slash_pos); - } - - Deck::iterator Deck::begin() { - return this->keywordList.begin(); - } - - Deck::iterator Deck::end() { - return this->keywordList.end(); - } - - - void Deck::write( DeckOutput& output ) const { - size_t kw_index = 1; - for (const auto& keyword: *this) { - keyword.write( output ); - kw_index++; - if (kw_index < size()) - output.write_string( output.keyword_sep ); - } - } - - Deck& Deck::operator=(const Deck& data) { - keywordList = data.keywordList; - defaultUnits = data.defaultUnits; - m_dataFile = data.m_dataFile; - input_path = data.input_path; - unit_system_access_count = data.unit_system_access_count; - this->init(this->keywordList.begin(), this->keywordList.end()); - activeUnits.reset(); - if (data.activeUnits) - activeUnits.reset(new UnitSystem(*data.activeUnits)); - - return *this; - } - - bool Deck::operator==(const Deck& data) const { - if ((activeUnits && !data.activeUnits) || - (!activeUnits && data.activeUnits)) - return false; - - if (activeUnits && *activeUnits != *data.activeUnits) - return false; - return this->keywordList == data.keywordList && - this->defaultUnits == data.defaultUnits && - this->m_dataFile == data.m_dataFile && - this->input_path == data.input_path && - this->unit_system_access_count == data.unit_system_access_count; - } - - std::ostream& operator<<(std::ostream& os, const Deck& deck) { - DeckOutput out( os, 10 ); - deck.write( out ); - return os; - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Deck/DeckItem.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Deck/DeckItem.cpp deleted file mode 100644 index fc4b630620..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Deck/DeckItem.cpp +++ /dev/null @@ -1,534 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -namespace Opm { - -template< typename T > -std::vector< T >& DeckItem::value_ref() { - return const_cast< std::vector< T >& >( - const_cast< const DeckItem& >( *this ).value_ref< T >() - ); -} - -template<> -const std::vector< int >& DeckItem::value_ref< int >() const { - if( this->type != get_type< int >() ) - throw std::invalid_argument( "DeckItem::value_ref Item of wrong type. this->type: " + tag_name(this->type) + " " + this->name()); - - return this->ival; -} - -template<> -const std::vector< double >& DeckItem::value_ref< double >() const { - if (this->type == get_type()) - return this->dval; - - throw std::invalid_argument( "DeckItem::value_ref Item of wrong type. this->type: " + tag_name(this->type) + " " + this->name()); -} - -template<> -const std::vector< std::string >& DeckItem::value_ref< std::string >() const { - if( this->type != get_type< std::string >() ) - throw std::invalid_argument( "DeckItem::value_ref Item of wrong type. this->type: " + tag_name(this->type) + " " + this->name()); - - return this->sval; -} - -template<> -const std::vector< RawString >& DeckItem::value_ref< RawString >() const { - if( this->type != get_type< RawString >() ) - throw std::invalid_argument( "DeckItem::value_ref Item of wrong type. this->type: " + tag_name(this->type) + " " + this->name()); - - return this->rsval; -} - -template<> -const std::vector< UDAValue >& DeckItem::value_ref< UDAValue >() const { - if( this->type != get_type< UDAValue >() ) - throw std::invalid_argument( "DeckItem::value_ref Item of wrong type. this->type: " + tag_name(this->type) + " " + this->name()); - - return this->uval; -} - - -DeckItem::DeckItem( const std::string& nm, int) : - type( get_type< int >() ), - item_name( nm ) -{ -} - -DeckItem::DeckItem( const std::string& nm, std::string) : - type( get_type< std::string >() ), - item_name( nm ) -{ -} - -DeckItem::DeckItem( const std::string& nm, RawString) : - type( get_type< RawString >() ), - item_name( nm ) -{ -} - - -DeckItem::DeckItem( const std::string& nm, double, const std::vector& active_dim, const std::vector& default_dim) : - type( get_type< double >() ), - item_name( nm ), - active_dimensions(active_dim), - default_dimensions(default_dim) -{ -} - -DeckItem::DeckItem( const std::string& nm, UDAValue, const std::vector& active_dim, const std::vector& default_dim) : - type( get_type< UDAValue >() ), - item_name( nm ), - active_dimensions(active_dim), - default_dimensions(default_dim) -{ -} - -DeckItem DeckItem::serializeObject() -{ - DeckItem result; - result.dval = {1.0}; - result.ival = {2}; - result.sval = {"test1"}; - result.uval = {UDAValue(3.0)}; - result.type = type_tag::string; - result.item_name = "test2"; - result.value_status = {value::status::deck_value}; - result.raw_data = false; - result.active_dimensions = {Dimension::serializeObject()}; - result.default_dimensions = {Dimension::serializeObject()}; - - return result; -} - -const std::string& DeckItem::name() const { - return this->item_name; -} - -bool DeckItem::defaultApplied( size_t index ) const { - return value::defaulted( this->value_status.at(index)); -} - -const std::vector& DeckItem::getValueStatus() const { - return this->value_status; -} - -bool DeckItem::hasValue( size_t index ) const { - if (index >= this->value_status.size()) - return false; - - return value::has_value( this->value_status[index] ); -} - -size_t DeckItem::data_size() const { - return this->value_status.size(); -} - - -template< typename T > -T DeckItem::get( size_t index ) const { - if (index >= this->value_status.size()) - throw std::out_of_range("Invalid index"); - - if (!value::has_value(this->value_status[index])) - throw std::invalid_argument("Invalid arguemnt"); - - return this->value_ref< T >()[index]; -} - -template<> -UDAValue DeckItem::get( size_t index ) const { - auto value = this->value_ref().at(index); - if (this->active_dimensions.empty()) - return value; - - // The UDA value held internally by the DeckItem does not have dimension set - // correctly we therefor need to create a new one with the correct dimension - // attached before returning. - std::size_t dim_index = index % this->active_dimensions.size(); - if (value::defaulted(this->value_status[index])) { - if (value.is()) - return UDAValue(value.get(), this->default_dimensions[dim_index]); - else - return UDAValue(value.get(), this->default_dimensions[dim_index]); - } else { - if (value.is()) - return UDAValue(value.get(), this->active_dimensions[dim_index]); - else - return UDAValue(value.get(), this->active_dimensions[dim_index]); - } -} - - -template< typename T > -const std::vector< T >& DeckItem::getData() const { - return this->value_ref< T >(); -} - - -template< typename T > -void DeckItem::push( T x ) { - auto& val = this->value_ref< T >(); - - val.push_back( std::move( x ) ); - this->value_status.push_back( value::status::deck_value ); -} - -void DeckItem::push_back( int x ) { - this->push( x ); -} - -void DeckItem::push_back( double x ) { - this->push( x ); -} - -void DeckItem::push_back( std::string x ) { - this->push( std::move( x ) ); -} - -void DeckItem::push_back( RawString x ) { - this->push( std::move( x ) ); -} - -void DeckItem::push_back( UDAValue x ) { - this->push( std::move( x ) ); -} - -template< typename T > -void DeckItem::push( T x, size_t n ) { - auto& val = this->value_ref< T >(); - - val.insert( val.end(), n, x ); - this->value_status.insert( this->value_status.end(), n, value::status::deck_value ); -} - -void DeckItem::push_back( int x, size_t n ) { - this->push( x, n ); -} - -void DeckItem::push_back( double x, size_t n ) { - this->push( x, n ); -} - -void DeckItem::push_back( std::string x, size_t n ) { - this->push( std::move( x ), n ); -} - -void DeckItem::push_back( UDAValue x, size_t n ) { - this->push( std::move( x ), n ); -} - -template< typename T > -void DeckItem::push_default( T x ) { - auto& val = this->value_ref< T >(); - if( this->value_status.size() != val.size() ) - throw std::logic_error("To add a value to an item, " - "no 'pseudo defaults' can be added before"); - - val.push_back( std::move( x ) ); - this->value_status.push_back( value::status::valid_default ); -} - -void DeckItem::push_backDefault( int x ) { - this->push_default( x ); -} - -void DeckItem::push_backDefault( double x ) { - this->push_default( x ); -} - -void DeckItem::push_backDefault( std::string x ) { - this->push_default( std::move( x ) ); -} - -void DeckItem::push_backDefault( RawString x ) { - this->push_default( std::move( x ) ); -} - -void DeckItem::push_backDefault( UDAValue x ) { - this->push_default( std::move( x ) ); -} - - -template -void DeckItem::push_backDummyDefault() { - auto& val = this->value_ref< T >(); - val.push_back( T() ); - this->value_status.push_back( value::status::empty_default ); -} - -std::string DeckItem::getTrimmedString( size_t index ) const { - return trim_copy(this->value_ref< std::string >().at(index)); -} - -double DeckItem::getSIDouble( size_t index ) const { - return this->getSIDoubleData().at( index ); -} - -template<> -const std::vector& DeckItem::getData() const { - auto& data = (const_cast(this))->value_ref< double >(); - if (this->raw_data) - return data; - - const auto dim_size = this->active_dimensions.size(); - for( size_t index = 0; index < data.size(); index++ ) { - const auto dimIndex = index % dim_size; - if (value::defaulted(this->value_status[index])) { - const auto& dim = this->default_dimensions[dimIndex]; - data[ index ] = dim.convertSiToRaw( data[ index ] ); - } else { - const auto& dim = this->active_dimensions[dimIndex]; - data[ index ] = dim.convertSiToRaw( data[ index ] ); - } - } - this->raw_data = true; - return data; -} - -const std::vector< double >& DeckItem::getSIDoubleData() const { - auto& data = (const_cast(this))->value_ref< double >(); - if (!this->raw_data) - return data; - - - if( this->active_dimensions.empty() ) - throw std::invalid_argument("No dimension has been set for item'" - + this->name() - + "'; can not ask for SI data"); - - /* - * This is an unobservable state change - SIData is lazily converted to - * SI units, so externally the object still behaves as const - */ - - const auto dim_size = this->active_dimensions.size(); - const auto sz = data.size(); - for( size_t index = 0; index < sz; index++ ) { - const auto dimIndex = index % dim_size; - if (value::defaulted(this->value_status[index])) { - const auto& dim = this->default_dimensions[dimIndex]; - data[ index ] = dim.convertRawToSi( data[ index ] ); - } else { - const auto& dim = this->active_dimensions[dimIndex]; - data[ index ] = dim.convertRawToSi( data[ index ] ); - } - } - this->raw_data = false; - return data; -} - - -type_tag DeckItem::getType() const { - return this->type; -} - - - -template< typename T > -void DeckItem::write_vector(DeckOutput& stream, const std::vector& data) const { - for (size_t index = 0; index < this->data_size(); index++) { - if (this->defaultApplied(index)) - stream.stash_default( ); - else - stream.write( data[index] ); - } -} - - -void DeckItem::write(DeckOutput& stream) const { - switch( this->type ) { - case type_tag::integer: - this->write_vector( stream, this->ival ); - break; - case type_tag::fdouble: - { - const auto& data = this->getData(); - this->write_vector( stream, data ); - break; - } - case type_tag::string: - this->write_vector( stream, this->sval ); - break; - case type_tag::raw_string: - this->write_vector( stream, this->rsval ); - break; - case type_tag::uda: - this->write_vector( stream, this->uval ); - break; - default: - throw std::logic_error( "DeckItem::write: Type not set." ); - } -} - -std::ostream& operator<<(std::ostream& os, const DeckItem& item) { - DeckOutput stream(os); - item.write( stream ); - return os; -} - -namespace { -bool double_equal(double value1, double value2, double abs_eps , double rel_eps) { - - bool equal = true; - double diff = std::fabs(value1 - value2); - if (diff > abs_eps) { - double scale = std::max(std::fabs(value1), std::fabs(value2)); - - if (diff > scale * rel_eps) { - equal = false; - } - } - return equal; -} -} - - -bool DeckItem::equal(const DeckItem& other, bool cmp_default, bool cmp_numeric) const { - double rel_eps = 1e-4; - double abs_eps = 1e-4; - - if (this->type != other.type) - return false; - - if (this->data_size() != other.data_size()) - return false; - - if (this->item_name != other.item_name) - return false; - - if (cmp_default) - if (this->value_status != other.value_status) - return false; - - switch( this->type ) { - case type_tag::integer: - if (this->ival != other.ival) - return false; - break; - case type_tag::string: - if (this->sval != other.sval) - return false; - break; - case type_tag::fdouble: - if (cmp_numeric) { - const auto& this_data = this->getData(); - const auto& other_data = other.getData(); - for (size_t i=0; i < this_data.size(); i++) { - if (!double_equal( this_data[i] , other_data[i], rel_eps, abs_eps)) - return false; - } - } else { - if (this->raw_data == other.raw_data) - return (this->dval == other.dval); - else { - const auto& this_data = this->getData(); - const auto& other_data = other.getData(); - return (this_data == other_data); - } - } - break; - default: - break; - } - - return true; -} - -bool DeckItem::operator==(const DeckItem& other) const { - bool cmp_default = false; - bool cmp_numeric = true; - return this->equal( other , cmp_default, cmp_numeric); -} - -bool DeckItem::operator!=(const DeckItem& other) const { - return !(*this == other); -} - - -bool DeckItem::to_bool(std::string string_value) { - std::transform(string_value.begin(), string_value.end(), string_value.begin(), toupper); - - if (string_value == "TRUE") - return true; - - if (string_value == "YES") - return true; - - if (string_value == "T") - return true; - - if (string_value == "Y") - return true; - - if (string_value == "1") - return true; - - if (string_value == "FALSE") - return false; - - if (string_value == "NO") - return false; - - if (string_value == "F") - return false; - - if (string_value == "N") - return false; - - if (string_value == "0") - return false; - - throw std::invalid_argument("Could not convert string " + string_value + " to bool "); -} - -/* - * Explicit template instantiations. These must be manually maintained and - * updated with changes in DeckItem so that code is emitted. - */ - -template int DeckItem::get< int >( size_t ) const; -template double DeckItem::get< double >( size_t ) const; -template std::string DeckItem::get< std::string >( size_t ) const; -template RawString DeckItem::get< RawString >( size_t ) const; - -template void DeckItem::push_backDummyDefault(); -template void DeckItem::push_backDummyDefault(); -template void DeckItem::push_backDummyDefault(); -template void DeckItem::push_backDummyDefault(); -template void DeckItem::push_backDummyDefault(); - -template const std::vector< int >& DeckItem::getData< int >() const; -template const std::vector< UDAValue >& DeckItem::getData< UDAValue >() const; -template const std::vector< std::string >& DeckItem::getData< std::string >() const; -template const std::vector& DeckItem::getData() const; -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Deck/DeckKeyword.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Deck/DeckKeyword.cpp deleted file mode 100644 index 2fd5d2eaa0..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Deck/DeckKeyword.cpp +++ /dev/null @@ -1,347 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ -#include - -#include - -#include - -#include -#include -#include -#include -#include - - -namespace Opm { - - DeckKeyword::DeckKeyword(const ParserKeyword& parserKeyword) : - m_keywordName(parserKeyword.getName()), - m_isDataKeyword(false), - m_slashTerminated(true) - { - } - - DeckKeyword::DeckKeyword(const Location& location, const std::string& keywordName) : - m_keywordName(keywordName), - m_location(location), - m_isDataKeyword(false), - m_slashTerminated(true) - { - } - - DeckKeyword::DeckKeyword() : - m_isDataKeyword(false), - m_slashTerminated(false) - { - } - - DeckKeyword DeckKeyword::serializeObject() - { - DeckKeyword result; - result.m_keywordName = "test"; - result.m_location = Location::serializeObject(); - result.m_recordList = {DeckRecord::serializeObject()}; - result.m_isDataKeyword = true; - result.m_slashTerminated = true; - result.m_isDoubleRecordKeyword = true; - - return result; - } - - namespace { - template - void add_deckvalue( DeckItem deck_item, DeckRecord& deck_record, const ParserItem& parser_item, const std::vector& input_record, size_t j) { - if (j >= input_record.size() || input_record[j].is_default()) { - if (parser_item.hasDefault()) - deck_item.push_back( parser_item.getDefault() ); - else - deck_item.push_backDummyDefault(); - } - else if (input_record[j].is_compatible()) - deck_item.push_back( input_record[j].get() ); - else - throw std::invalid_argument("For input to DeckKeyword '" + deck_item.name() + - ", item '" + parser_item.name() + - "': wrong type."); - deck_record.addItem( std::move(deck_item) ); - } - } - - - DeckKeyword::DeckKeyword(const ParserKeyword& parserKeyword, const std::vector>& record_list, UnitSystem& system_active, UnitSystem& system_default) : - DeckKeyword(parserKeyword) - { - if (parserKeyword.hasFixedSize() && (record_list.size() != parserKeyword.getFixedSize())) - throw std::invalid_argument("Wrong number of records added to constructor for deckkeyword '" + name() + "'."); - - for (size_t i = 0; i < record_list.size(); i++) { - - const ParserRecord& parser_record = parserKeyword.getRecord(i); - const std::vector& input_record = record_list[i]; - DeckRecord deck_record; - - for (size_t j = 0; j < parser_record.size(); j++) { - const ParserItem& parser_item = parser_record.get(j); - if (parser_item.sizeType() == ParserItem::item_size::ALL) - throw std::invalid_argument("constructor DeckKeyword::DeckKeyword(const ParserKeyword&, const std::vector>&) does not handle sizetype ALL."); - - switch( parser_item.dataType() ) { - case type_tag::integer: - { - DeckItem deck_item(parser_item.name(), int()); - add_deckvalue(std::move(deck_item), deck_record, parser_item, input_record, j); - } - break; - case type_tag::fdouble: - { - auto& dim = parser_item.dimensions(); - std::vector active_dimensions; - std::vector default_dimensions; - if (dim.size() > 0) { - active_dimensions.push_back( system_active.getNewDimension(dim[0]) ); - default_dimensions.push_back( system_default.getNewDimension(dim[0]) ); - } - DeckItem deck_item(parser_item.name(), double(), active_dimensions, default_dimensions); - add_deckvalue(std::move(deck_item), deck_record, parser_item, input_record, j); - } - break; - case type_tag::string: - { - DeckItem deck_item(parser_item.name(), std::string()); - add_deckvalue(std::move(deck_item), deck_record, parser_item, input_record, j); - } - break; - - default: throw std::invalid_argument("For input to DeckKeyword '" + name() + ": unsupported type. (only support for string, double and int.)"); - } - } - - this->addRecord( std::move(deck_record) ); - - } - - - } - - - DeckKeyword::DeckKeyword(const ParserKeyword& parserKeyword, const std::vector& data) : - DeckKeyword(parserKeyword) - { - if (!parserKeyword.isDataKeyword()) - throw std::invalid_argument("Deckkeyword '" + name() + "' is not a data keyword."); - - const ParserRecord& parser_record = parserKeyword.getRecord(0); - const ParserItem& parser_item = parser_record.get(0); - - setDataKeyword(); - if (parser_item.dataType() != type_tag::integer) - throw std::invalid_argument("Input to DeckKeyword '" + name() + "': cannot be std::vector."); - - DeckItem item(parser_item.name(), int() ); - for (int val : data) - item.push_back(val); - - DeckRecord deck_record; - deck_record.addItem( std::move(item) ); - addRecord( std::move(deck_record) ); - } - - - DeckKeyword::DeckKeyword(const ParserKeyword& parserKeyword, const std::vector& data, UnitSystem& system_active, UnitSystem& system_default) : - DeckKeyword(parserKeyword) - { - if (!parserKeyword.isDataKeyword()) - throw std::invalid_argument("Deckkeyword '" + name() + "' is not a data keyword."); - - const ParserRecord& parser_record = parserKeyword.getRecord(0); - const ParserItem& parser_item = parser_record.get(0); - - setDataKeyword(); - if (parser_item.dataType() != type_tag::fdouble) - throw std::invalid_argument("Input to DeckKeyword '" + name() + "': cannot be std::vector."); - - auto& dim = parser_item.dimensions(); - std::vector active_dimensions; - std::vector default_dimensions; - if (dim.size() > 0) { - active_dimensions.push_back( system_active.getNewDimension(dim[0]) ); - default_dimensions.push_back( system_default.getNewDimension(dim[0]) ); - } - DeckItem item(parser_item.name(), double(), active_dimensions, default_dimensions); - for (double val : data) - item.push_back(val); - - DeckRecord deck_record; - deck_record.addItem( std::move(item) ); - addRecord( std::move(deck_record) ); - } - - - void DeckKeyword::setFixedSize() { - m_slashTerminated = false; - } - - - const Location& DeckKeyword::location() const { - return this->m_location; - } - - void DeckKeyword::setDataKeyword(bool isDataKeyword_) { - m_isDataKeyword = isDataKeyword_; - } - - void DeckKeyword::setDoubleRecordKeyword(bool isDoubleRecordKeyword) { - m_isDoubleRecordKeyword = isDoubleRecordKeyword; - } - - bool DeckKeyword::isDataKeyword() const { - return m_isDataKeyword; - } - - bool DeckKeyword::isDoubleRecordKeyword() const { - return m_isDoubleRecordKeyword; - } - - const std::string& DeckKeyword::name() const { - return m_keywordName; - } - - size_t DeckKeyword::size() const { - return m_recordList.size(); - } - - - void DeckKeyword::addRecord(DeckRecord&& record) { - this->m_recordList.push_back( std::move( record ) ); - } - - DeckKeyword::const_iterator DeckKeyword::begin() const { - return m_recordList.begin(); - } - - DeckKeyword::const_iterator DeckKeyword::end() const { - return m_recordList.end(); - } - - const DeckRecord& DeckKeyword::getRecord(size_t index) const { - return this->m_recordList.at( index ); - } - - DeckRecord& DeckKeyword::getRecord(size_t index) { - return this->m_recordList.at( index ); - } - - const DeckRecord& DeckKeyword::getDataRecord() const { - if (m_recordList.size() == 1) - return getRecord(0); - else - throw std::range_error("Not a data keyword \"" + name() + "\"?"); - } - - - size_t DeckKeyword::getDataSize() const { - return this->getDataRecord().getDataItem().data_size(); - } - - - const std::vector& DeckKeyword::getIntData() const { - return this->getDataRecord().getDataItem().getData< int >(); - } - - - const std::vector& DeckKeyword::getStringData() const { - return this->getDataRecord().getDataItem().getData< std::string >(); - } - - - const std::vector& DeckKeyword::getRawDoubleData() const { - return this->getDataRecord().getDataItem().getData< double >(); - } - - const std::vector& DeckKeyword::getSIDoubleData() const { - return this->getDataRecord().getDataItem().getSIDoubleData(); - } - - const std::vector& DeckKeyword::getValueStatus() const { - return this->getDataRecord().getDataItem().getValueStatus(); - } - - void DeckKeyword::write_data( DeckOutput& output ) const { - for (const auto& record: *this) - record.write( output ); - } - - void DeckKeyword::write_TITLE( DeckOutput& output ) const { - output.start_keyword( this->name( ) ); - { - const auto& record = this->getRecord(0); - output.write_string(" "); - record.write_data( output ); - } - } - - void DeckKeyword::write( DeckOutput& output ) const { - if (this->name() == "TITLE") - this->write_TITLE( output ); - else { - output.start_keyword( this->name( ) ); - this->write_data( output ); - output.end_keyword( this->m_slashTerminated ); - } - } - - std::ostream& operator<<(std::ostream& os, const DeckKeyword& keyword) { - DeckOutput out( os ); - keyword.write( out ); - return os; - } - - bool DeckKeyword::equal_data(const DeckKeyword& other, bool cmp_default, bool cmp_numeric) const { - if (this->size() != other.size()) - return false; - - for (size_t index = 0; index < this->size(); index++) { - const auto& this_record = this->getRecord( index ); - const auto& other_record = other.getRecord( index ); - if (!this_record.equal( other_record , cmp_default, cmp_numeric)) - return false; - } - return true; - } - - bool DeckKeyword::equal(const DeckKeyword& other, bool cmp_default, bool cmp_numeric) const { - if (this->name() != other.name()) - return false; - - return this->equal_data(other, cmp_default, cmp_numeric); - } - - bool DeckKeyword::operator==(const DeckKeyword& other) const { - bool cmp_default = false; - bool cmp_numeric = true; - return this->equal( other , cmp_default, cmp_numeric); - } - - bool DeckKeyword::operator!=(const DeckKeyword& other) const { - return !(*this == other); - } - -} - diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Deck/DeckOutput.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Deck/DeckOutput.cpp deleted file mode 100644 index 2a1fbd7b2b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Deck/DeckOutput.cpp +++ /dev/null @@ -1,154 +0,0 @@ -/* - Copyright 2017 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include - -#include -#include -#include - - -namespace Opm { - - DeckOutput::DeckOutput( std::ostream& s, int precision) : - os( s ), - default_count( 0 ), - row_count( 0 ), - record_on( false ), - org_precision( os.precision(precision) ) - {} - - - DeckOutput::~DeckOutput() { - this->set_precision(this->org_precision); - } - - - void DeckOutput::set_precision(int precision) { - this->os.precision(precision); - } - - - void DeckOutput::endl() { - this->os << std::endl; - } - - void DeckOutput::write_string(const std::string& s) { - this->os << s; - } - - - template - void DeckOutput::write( const T& value ) { - if (default_count > 0) { - write_sep( ); - - os << default_count << "*"; - default_count = 0; - row_count++; - } - - write_sep( ); - write_value( value ); - row_count++; - } - - template <> - void DeckOutput::write_value( const std::string& value ) { - this->os << "'" << value << "'"; - } - - template <> - void DeckOutput::write_value( const RawString& value ) { - this->os << value; - } - - template <> - void DeckOutput::write_value( const int& value ) { - this->os << value; - } - - template <> - void DeckOutput::write_value( const double& value ) { - this->os << value; - } - - template <> - void DeckOutput::write_value( const UDAValue& value ) { - if (value.is()) { - double deck_value = value.get(); - this->write_value(deck_value); - } - else - this->write_value(value.get()); - } - - void DeckOutput::stash_default( ) { - this->default_count++; - } - - - void DeckOutput::start_keyword(const std::string& kw) { - this->os << kw << std::endl; - } - - - void DeckOutput::end_keyword(bool add_slash) { - if (add_slash) - this->os << "/" << std::endl; - } - - - void DeckOutput::write_sep( ) { - if (record_on) { - if ((row_count > 0) && ((row_count % columns) == 0)) - split_record(); - } - - if (row_count > 0) - os << item_sep; - else if (record_on) - os << record_indent; - } - - void DeckOutput::start_record( ) { - this->default_count = 0; - this->row_count = 0; - this->record_on = true; - } - - - void DeckOutput::split_record() { - this->os << std::endl; - this->row_count = 0; - } - - - void DeckOutput::end_record( ) { - this->os << " /" << std::endl; - this->record_on = false; - } - - - template void DeckOutput::write( const int& value); - template void DeckOutput::write( const double& value); - template void DeckOutput::write( const std::string& value); - template void DeckOutput::write( const RawString& value); - template void DeckOutput::write( const UDAValue& value); -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Deck/DeckRecord.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Deck/DeckRecord.cpp deleted file mode 100644 index f80e94b73e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Deck/DeckRecord.cpp +++ /dev/null @@ -1,184 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - - -#include -#include -#include -#include - -#include -#include -#include - - -namespace Opm { - - - DeckRecord::DeckRecord( std::vector< DeckItem >&& items ) : - m_items( std::move( items ) ) { - - std::unordered_set< std::string > names; - for( const auto& item : this->m_items ) - names.insert( item.name() ); - - if( names.size() == this->m_items.size() ) - return; - - names.clear(); - std::string msg = "Duplicate item names in DeckRecord:"; - for( const auto& item : this->m_items ) { - if( names.count( item.name() ) != 0 ) - msg += std::string( " " ) += item.name(); - - names.insert( item.name() ); - } - - throw std::invalid_argument( msg ); - } - - DeckRecord DeckRecord::serializeObject() - { - DeckRecord result; - result.m_items = {DeckItem::serializeObject()}; - - return result; - } - - size_t DeckRecord::size() const { - return m_items.size(); - } - - void DeckRecord::addItem( DeckItem deckItem ) { - if( this->hasItem( deckItem.name() ) ) - throw std::invalid_argument( - "Item with name: " - + deckItem.name() - + " already exists in DeckRecord"); - - m_items.push_back( std::move( deckItem ) ); - } - - DeckItem& DeckRecord::getItem( size_t index ) { - return this->m_items.at( index ); - } - - DeckItem& DeckRecord::getItem(const std::string& name) { - const auto eq = [&name]( const DeckItem& e ) { - return e.name() == name; - }; - - auto item = std::find_if( m_items.begin(), m_items.end(), eq ); - - if( item == m_items.end() ) - throw std::invalid_argument("Item: " + name + " does not exist."); - - return *item; - } - - DeckItem& DeckRecord::getDataItem() { - if (m_items.size() == 1) - return getItem(0); - else - throw std::range_error("Not a data keyword ?"); - } - - const DeckItem& DeckRecord::getItem( size_t index ) const { - return this->m_items.at( index ); - } - - const DeckItem& DeckRecord::getItem(const std::string& name) const { - const auto eq = [&name]( const DeckItem& e ) { - return e.name() == name; - }; - - auto item = std::find_if( this->begin(), this->end(), eq ); - - if( item == m_items.end() ) - throw std::invalid_argument("Item: " + name + " does not exist."); - - return *item; - } - - const DeckItem& DeckRecord::getDataItem() const { - if (m_items.size() == 1) - return getItem(0); - else - throw std::range_error("Not a data keyword ?"); - } - - bool DeckRecord::hasItem(const std::string& name) const { - const auto eq = [&name]( const DeckItem& e ) { - return e.name() == name; - }; - - return std::any_of( this->begin(), this->end(), eq ); - } - - DeckRecord::const_iterator DeckRecord::begin() const { - return this->m_items.begin(); - } - - DeckRecord::const_iterator DeckRecord::end() const { - return this->m_items.end(); - } - - - void DeckRecord::write_data(DeckOutput& writer) const { - for (const auto& item : *this) - item.write( writer ); - } - - void DeckRecord::write(DeckOutput& writer) const { - writer.start_record( ); - this->write_data( writer ); - writer.end_record( ); - } - - - std::ostream& operator<<(std::ostream& os, const DeckRecord& record) { - DeckOutput output(os); - record.write( output ); - return os; - } - - bool DeckRecord::equal(const DeckRecord& other, bool cmp_default, bool cmp_numeric) const { - if (this->size() != other.size()) - return false; - - for (size_t index = 0; index < this->size(); index++) { - const auto& this_item = this->getItem( index ); - const auto& other_item = other.getItem( index ); - if (!this_item.equal( other_item , cmp_default, cmp_numeric)) - return false; - } - return true; - } - - bool DeckRecord::operator==(const DeckRecord& other) const { - bool cmp_default = false; - bool cmp_numeric = true; - return this->equal( other , cmp_default, cmp_numeric); - } - - bool DeckRecord::operator!=(const DeckRecord& other) const { - return !(*this == other); - } - -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Deck/DeckSection.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Deck/DeckSection.cpp deleted file mode 100644 index c185c0fa2e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Deck/DeckSection.cpp +++ /dev/null @@ -1,85 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -namespace Opm { - - static bool isSectionDelimiter( const DeckKeyword& keyword ) { - const auto& name = keyword.name(); - for( const auto& x : { "RUNSPEC", "GRID", "EDIT", "PROPS", - "REGIONS", "SOLUTION", "SUMMARY", "SCHEDULE" } ) - if( name == x ) return true; - - return false; - } - - static std::pair< DeckView::const_iterator, DeckView::const_iterator > - find_section( const Deck& deck, const std::string& keyword ) { - - const auto fn = [&keyword]( const DeckKeyword& kw ) { - return kw.name() == keyword; - }; - - auto first = std::find_if( deck.begin(), deck.end(), fn ); - - if( first == deck.end() ) - return { first, first }; - - auto last = std::find_if( first + 1, deck.end(), isSectionDelimiter ); - - if( last != deck.end() && last->name() == keyword ) - throw std::invalid_argument( std::string( "Deck contains the '" ) + keyword + "' section multiple times" ); - - return { first, last }; - } - - DeckSection::DeckSection( const Deck& deck, const std::string& section ) - : DeckView( find_section( deck, section ) ), - section_name( section ), - units( deck.getActiveUnitSystem() ) - {} - - const std::string& DeckSection::name() const { - return this->section_name; - } - - const UnitSystem& DeckSection::unitSystem() const { - return this->units; - } - - bool DeckSection::hasRUNSPEC(const Deck& deck) { return deck.hasKeyword( "RUNSPEC" ); } - bool DeckSection::hasGRID(const Deck& deck) { return deck.hasKeyword( "GRID" ); } - bool DeckSection::hasEDIT(const Deck& deck) { return deck.hasKeyword( "EDIT" ); } - bool DeckSection::hasPROPS(const Deck& deck) { return deck.hasKeyword( "PROPS" ); } - bool DeckSection::hasREGIONS(const Deck& deck) { return deck.hasKeyword( "REGIONS" ); } - bool DeckSection::hasSOLUTION(const Deck& deck) { return deck.hasKeyword( "SOLUTION" ); } - bool DeckSection::hasSUMMARY(const Deck& deck) { return deck.hasKeyword( "SUMMARY" ); } - bool DeckSection::hasSCHEDULE(const Deck& deck) { return deck.hasKeyword( "SCHEDULE" ); } - -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Deck/DeckValue.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Deck/DeckValue.cpp deleted file mode 100644 index e49e1cdd71..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Deck/DeckValue.cpp +++ /dev/null @@ -1,99 +0,0 @@ -/* - Copyright 2019 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include -#include - -#include - -namespace Opm { - -DeckValue::DeckValue(): - default_value(true), - value_enum(type_tag::unknown) -{} - -DeckValue::DeckValue(int value): - default_value(false), - value_enum(type_tag::integer), - int_value(value) -{} - -DeckValue::DeckValue(double value): - default_value(false), - value_enum(type_tag::fdouble), - double_value(value) -{} - -DeckValue::DeckValue(const std::string& value): - default_value(false), - value_enum(type_tag::string), - string_value(value) -{} - -bool DeckValue::is_default() const { - return default_value; -} - -template<> -int DeckValue::get() const { - if (value_enum == type_tag::integer) - return this->int_value; - - throw std::invalid_argument("DeckValue does not hold an integer value"); -} - -template<> -double DeckValue::get() const { - if (value_enum == type_tag::fdouble) - return this->double_value; - - if (value_enum == type_tag::integer) - return this->int_value; - - throw std::invalid_argument("DeckValue does not hold a double value"); -} - -template<> -std::string DeckValue::get() const { - if (value_enum == type_tag::string) - return this->string_value; - - throw std::invalid_argument("DeckValue does not hold a string value"); -} - -template<> -bool DeckValue::is_compatible() const { - return (value_enum == type_tag::integer); -} - -template<> -bool DeckValue::is_compatible() const { - return (value_enum == type_tag::fdouble || value_enum == type_tag::integer); -} - - -template<> -bool DeckValue::is_compatible() const { - return (value_enum == type_tag::string); -} - - -} - diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Deck/UDAValue.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Deck/UDAValue.cpp deleted file mode 100644 index 14dd0fa23e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Deck/UDAValue.cpp +++ /dev/null @@ -1,169 +0,0 @@ -/* - Copyright 2019 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ -#include - -#include - - -namespace Opm { - -UDAValue::UDAValue(double value): - numeric_value(true), - double_value(value) -{ -} - -UDAValue::UDAValue(double value, const Dimension& dim_): - numeric_value(true), - double_value(value), - dim(dim_) -{ -} - -UDAValue::UDAValue(const Dimension& dim_): - UDAValue(0, dim_) -{ -} - -UDAValue::UDAValue() : - UDAValue(0) -{} - -UDAValue::UDAValue(const std::string& value): - numeric_value(false), - string_value(value) -{ -} - -UDAValue::UDAValue(const std::string& value, const Dimension& dim_): - numeric_value(false), - string_value(value), - dim(dim_) -{ -} - -UDAValue UDAValue::serializeObject() -{ - UDAValue result; - result.numeric_value = true; - result.double_value = 1.0; - result.string_value = "test"; - result.dim = Dimension::serializeObject(); - - return result; -} - - -void UDAValue::assert_numeric() const { - std::string msg = "Internal error: The support for use of UDQ/UDA is not complete in opm/flow. The string: '" + this->string_value + "' must be numeric"; - this->assert_numeric(msg); -} - - -void UDAValue::assert_numeric(const std::string& error_msg) const { - if (this->numeric_value) - return; - - throw std::invalid_argument(error_msg); -} - -template<> -bool UDAValue::is() const { - return this->numeric_value; -} - - -template<> -bool UDAValue::is() const { - return !this->numeric_value; -} - - -template<> -double UDAValue::get() const { - this->assert_numeric(); - return this->double_value; -} - - -double UDAValue::getSI() const { - this->assert_numeric(); - return this->dim.convertRawToSi(this->double_value); -} - - -UDAValue& UDAValue::operator=(double value) { - this->double_value = value; - this->numeric_value = true; - return *this; -} - -UDAValue& UDAValue::operator=(const std::string& value) { - this->string_value = value; - this->numeric_value = false; - return *this; -} - -template<> -std::string UDAValue::get() const { - if (!this->numeric_value) - return this->string_value; - - throw std::invalid_argument("UDAValue does not hold a string value"); -} - -bool UDAValue::zero() const { - this->assert_numeric(); - return (this->double_value == 0.0); -} - -const Dimension& UDAValue::get_dim() const { - return this->dim; -} - - -bool UDAValue::operator==(const UDAValue& other) const { - if (this->numeric_value != other.numeric_value) - return false; - - if (this->dim != other.dim) - return false; - - if (this->numeric_value) - return (this->double_value == other.double_value); - - return this->string_value == other.string_value; -} - - -bool UDAValue::operator!=(const UDAValue& other) const { - return !(*this == other); -} - -std::ostream& operator<<( std::ostream& stream, const UDAValue& uda_value ) { - if (uda_value.is()) - stream << uda_value.get(); - else - stream << "'" << uda_value.get() << "'"; - return stream; -} - - - -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Aquancon.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Aquancon.cpp deleted file mode 100644 index de376bccbe..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Aquancon.cpp +++ /dev/null @@ -1,175 +0,0 @@ -/* - Copyright (C) 2017 TNO - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ -#include -#include - -#include -#include -#include -#include -#include - -namespace Opm { - - namespace{ - - void add_cell(std::unordered_map& work, Aquancon::AquancCell cell) { - auto cell_iter = work.find(cell.global_index); - if (cell_iter == work.end()) - work.insert( std::make_pair(cell.global_index, std::move(cell))); - else { - auto& prev_cell = cell_iter->second; - if (prev_cell.aquiferID == cell.aquiferID) { - if (prev_cell.influx_coeff.first != cell.influx_coeff.first) - throw std::invalid_argument("Can not combine defaulted and not defaulted influx coefficient"); - - if (prev_cell.influx_coeff.first) { - if (cell.influx_coeff.second == 0) - prev_cell.influx_coeff.second = 0; - else - prev_cell.influx_coeff.second += cell.influx_coeff.second; - } - } else { - std::string msg = "Cell with global index: " + std::to_string(cell.global_index) + " is already connected to Aquifer: " + std::to_string(prev_cell.aquiferID); - throw std::invalid_argument( msg ); - } - } - } - } - - - Aquancon::Aquancon(const EclipseGrid& grid, const Deck& deck) - { - std::unordered_map work; - for (std::size_t iaq = 0; iaq < deck.count("AQUANCON"); iaq++) { - const auto& aquanconKeyword = deck.getKeyword("AQUANCON", iaq); - for (const auto& aquanconRecord : aquanconKeyword) { - const int aquiferID = aquanconRecord.getItem("AQUIFER_ID").get(0); - const int i1 = aquanconRecord.getItem("I1").get(0) - 1; - const int i2 = aquanconRecord.getItem("I2").get(0) - 1; - const int j1 = aquanconRecord.getItem("J1").get(0) - 1; - const int j2 = aquanconRecord.getItem("J2").get(0) - 1; - const int k1 = aquanconRecord.getItem("K1").get(0) - 1; - const int k2 = aquanconRecord.getItem("K2").get(0) - 1; - const double influx_mult = aquanconRecord.getItem("INFLUX_MULT").getSIDouble(0); - const FaceDir::DirEnum faceDir - = FaceDir::FromString(aquanconRecord.getItem("FACE").getTrimmedString(0)); - - const std::string& str_inside_reservoir - = aquanconRecord.getItem("CONNECT_ADJOINING_ACTIVE_CELL").getTrimmedString(0); - const bool allow_aquifer_inside_reservoir = DeckItem::to_bool(str_inside_reservoir); - - // Loop over the cartesian indices to convert to the global grid index - for (int k = k1; k <= k2; k++) { - for (int j = j1; j <= j2; j++) { - for (int i = i1; i <= i2; i++) { - if (grid.cellActive(i, j, k)) { // the cell itself needs to be active - if (allow_aquifer_inside_reservoir - || !neighborCellInsideReservoirAndActive(grid, i, j, k, faceDir)) { - std::pair influx_coeff = std::make_pair(false, 0); - auto global_index = grid.getGlobalIndex(i, j, k); - if (aquanconRecord.getItem("INFLUX_COEFF").hasValue(0)) - influx_coeff = std::make_pair( - true, aquanconRecord.getItem("INFLUX_COEFF").getSIDouble(0)); - - AquancCell cell(aquiferID, global_index, influx_coeff, influx_mult, faceDir); - add_cell(work, cell); - } - } - } - } - } - } - } - - for (const auto& gi_cell : work) { - const auto& cell = gi_cell.second; - - this->cells[cell.aquiferID].emplace_back(std::move(cell)); - } - } - - - Aquancon Aquancon::serializeObject() - { - Aquancon result; - result.cells = {{1, {{2, 3, {true, 4.0}, 5.0, FaceDir::XPlus}}}}; - - return result; - } - - - const std::vector Aquancon::operator[](int aquiferID) const { - return this->cells.at( aquiferID ); - } - - - - bool Aquancon::cellInsideReservoirAndActive(const Opm::EclipseGrid& grid, const int i, const int j, const int k) - { - if ( i < 0 || j < 0 || k < 0 - || size_t(i) > grid.getNX() - 1 - || size_t(j) > grid.getNY() - 1 - || size_t(k) > grid.getNZ() - 1 ) - { - return false; - } - - return grid.cellActive(i, j, k ); - } - - bool Aquancon::neighborCellInsideReservoirAndActive(const Opm::EclipseGrid& grid, - const int i, const int j, const int k, const Opm::FaceDir::DirEnum faceDir) - { - switch(faceDir) { - case FaceDir::XMinus: - return cellInsideReservoirAndActive(grid, i - 1, j, k); - case FaceDir::XPlus: - return cellInsideReservoirAndActive(grid, i + 1, j, k); - case FaceDir::YMinus: - return cellInsideReservoirAndActive(grid, i, j - 1, k); - case FaceDir::YPlus: - return cellInsideReservoirAndActive(grid, i, j + 1, k); - case FaceDir::ZMinus: - return cellInsideReservoirAndActive(grid, i, j, k - 1); - case FaceDir::ZPlus: - return cellInsideReservoirAndActive(grid, i, j, k + 1); - default: - throw std::runtime_error("Unknown FaceDir enum " + std::to_string(faceDir)); - } - } - - Aquancon::Aquancon(const std::unordered_map>& data) : - cells(data) - {} - - const std::unordered_map>& Aquancon::data() const { - return this->cells; - } - - bool Aquancon::operator==(const Aquancon& other) const { - return this->cells == other.cells; - } - - - bool Aquancon::active() const { - return !this->cells.empty(); - } - -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/AquiferCT.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/AquiferCT.cpp deleted file mode 100644 index 000ad9da54..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/AquiferCT.cpp +++ /dev/null @@ -1,178 +0,0 @@ -/* - Copyright (C) 2017 TNO - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include -#include - -namespace Opm { - -namespace { - -// The default Pd v/s Td tables (constant terminal rate case for an infinite -// aquifer) as described in Van Everdingen, A. & Hurst, W., December, 1949.The -// Application of the Laplace Transformation to Flow Problems in Reservoirs. -// Petroleum Transactions, AIME. - -static const std::vector default_pressure = { 0.112, 0.229, 0.315, 0.376, 0.424, 0.469, 0.503, 0.564, - 0.616, 0.659, 0.702, 0.735, 0.772, 0.802, 0.927, 1.020, - 1.101, 1.169, 1.275, 1.362, 1.436, 1.500, 1.556, 1.604, - 1.651, 1.829, 1.960, 2.067, 2.147, 2.282, 2.388, 2.476, - 2.550, 2.615, 2.672, 2.723, 2.921, 3.064, 3.173, 3.263, - 3.406, 3.516, 3.608, 3.684, 3.750, 3.809, 3.86 }; - -static const std::vector default_time = { 0.010, 0.050, 0.100, 0.150, 0.200, 0.250, 0.300, 0.400, - 0.500, 0.600, 0.700, 0.800, 0.900, 1.000, 1.500, 2.000, - 2.500, 3.000, 4.000, 5.000, 6.000, 7.000, 8.000, 9.000, - 10.00, 15.00, 20.00, 25.00, 30.00, 40.00, 50.00, 60.00, - 70.00, 80.00, 90.00, 100.0, 150.0, 200.0, 250.0, 300.0, - 400.0, 500.0, 600.0, 700.0, 800.0, 900.0, 1000 }; - -} - - -AquiferCT::AQUCT_data::AQUCT_data(const DeckRecord& record, const TableManager& tables) : - aquiferID(record.getItem("AQUIFER_ID").get(0)), - inftableID(record.getItem("TABLE_NUM_INFLUENCE_FN").get(0)), - pvttableID(record.getItem("TABLE_NUM_WATER_PRESS").get(0)), - phi_aq(record.getItem("PORO_AQ").getSIDouble(0)), - d0(record.getItem("DAT_DEPTH").getSIDouble(0)), - C_t(record.getItem("C_T").getSIDouble(0)), - r_o(record.getItem("RAD").getSIDouble(0)), - k_a(record.getItem("PERM_AQ").getSIDouble(0)), - c1(1.0), - h(record.getItem("THICKNESS_AQ").getSIDouble(0)), - theta( record.getItem("INFLUENCE_ANGLE").getSIDouble(0)/360.0), - c2(6.283), // Value of C2 used by E100 (for METRIC, PVT-M and LAB unit systems) - p0(std::make_pair(false, 0)) -{ - if (record.getItem("P_INI").hasValue(0)) - this->p0 = std::make_pair(true, record.getItem("P_INI").getSIDouble(0)); - - // Get the correct influence table values - if (this->inftableID > 1) { - const auto& aqutabTable = tables.getAqutabTables().getTable(this->inftableID - 2); - const auto& aqutab_tdColumn = aqutabTable.getColumn(0); - const auto& aqutab_piColumn = aqutabTable.getColumn(1); - this->td = aqutab_tdColumn.vectorCopy(); - this->pi = aqutab_piColumn.vectorCopy(); - } else { - this->td = default_time; - this->pi = default_pressure; - } -} - - -bool AquiferCT::AQUCT_data::operator==(const AquiferCT::AQUCT_data& other) const { - return this->aquiferID == other.aquiferID && - this->inftableID == other.inftableID && - this->pvttableID == other.pvttableID && - this->phi_aq == other.phi_aq && - this->d0 == other.d0 && - this->C_t == other.C_t && - this->r_o == other.r_o && - this->k_a == other.k_a && - this->c1 == other.c1 && - this->h == other.h && - this->theta == other.theta && - this->c2 == other.c2 && - this->p0 == other.p0 && - this->td == other.td && - this->pi == other.pi && - this->cell_id == other.cell_id; -} - -AquiferCT::AQUCT_data::AQUCT_data(int aqID, - int infID, - int pvtID, - double phi_aq_, - double d0_, - double C_t_, - double r_o_, - double k_a_, - double c1_, - double h_, - double theta_, - double c2_, - const std::pair& p0_, - const std::vector& td_, - const std::vector& pi_, - const std::vector& cell_id_) : - aquiferID(aqID), - inftableID(infID), - pvttableID(pvtID), - phi_aq(phi_aq_), - d0(d0_), - C_t(C_t_), - r_o(r_o_), - k_a(k_a_), - c1(c1_), - h(h_), - theta(theta_), - c2(c2_), - p0(p0_), - td(td_), - pi(pi_), - cell_id(cell_id_) -{} - -AquiferCT::AquiferCT(const TableManager& tables, const Deck& deck) -{ - using AQUCT = ParserKeywords::AQUCT; - if (!deck.hasKeyword()) - return; - - const auto& aquctKeyword = deck.getKeyword(); - for (auto& record : aquctKeyword) - this->m_aquct.emplace_back(record, tables); -} - -AquiferCT::AquiferCT(const std::vector& data) : - m_aquct(data) -{} - -AquiferCT AquiferCT::serializeObject() -{ - AquiferCT result; - result.m_aquct = {{1, 2, 3, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, - 11.0, 12.0, {true, 13.0}, {14.0}, {15.0}, {16}}}; - - return result; -} - -std::size_t AquiferCT::size() const { - return this->m_aquct.size(); -} - -std::vector::const_iterator AquiferCT::begin() const { - return this->m_aquct.begin(); -} - -std::vector::const_iterator AquiferCT::end() const { - return this->m_aquct.end(); -} - -bool AquiferCT::operator==(const AquiferCT& other) const { - return this->m_aquct == other.m_aquct; -} - -const std::vector& AquiferCT::data() const { - return this->m_aquct; -} - -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/AquiferConfig.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/AquiferConfig.cpp deleted file mode 100644 index 48bf2a53b2..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/AquiferConfig.cpp +++ /dev/null @@ -1,73 +0,0 @@ -/* - Copyright (C) 2020 Equinor - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - - -#include -#include -#include - -#include - -namespace Opm { - -AquiferConfig::AquiferConfig(const TableManager& tables, const EclipseGrid& grid, const Deck& deck): - aquifetp(deck), - aquiferct(tables, deck), - aqconn(grid,deck) -{} - -AquiferConfig::AquiferConfig(const Aquifetp& fetp, const AquiferCT& ct, const Aquancon& conn) : - aquifetp(fetp), - aquiferct(ct), - aqconn(conn) -{} - -AquiferConfig AquiferConfig::serializeObject() -{ - AquiferConfig result; - result.aquifetp = Aquifetp::serializeObject(); - result.aquiferct = AquiferCT::serializeObject(); - result.aqconn = Aquancon::serializeObject(); - - return result; -} - -bool AquiferConfig::active() const { - return this->aqconn.active(); -} - -bool AquiferConfig::operator==(const AquiferConfig& other) { - return this->aquifetp == other.aquifetp && - this->aquiferct == other.aquiferct && - this->aqconn == other.aqconn; -} - -const AquiferCT& AquiferConfig::ct() const { - return this->aquiferct; -} - -const Aquifetp& AquiferConfig::fetp() const { - return this->aquifetp; -} - -const Aquancon& AquiferConfig::connections() const { - return this->aqconn; -} - -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Aquifetp.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Aquifetp.cpp deleted file mode 100644 index dad295eca8..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Aquifetp.cpp +++ /dev/null @@ -1,116 +0,0 @@ -/* - Copyright (C) 2017 TNO - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include - -#include -#include -#include -#include - -namespace Opm { - -using AQUFETP = ParserKeywords::AQUFETP; - -Aquifetp::AQUFETP_data::AQUFETP_data(const DeckRecord& record) : - aquiferID( record.getItem().get(0)), - pvttableID( record.getItem().get(0)), - J( record.getItem().getSIDouble(0)), - C_t( record.getItem().getSIDouble(0)), - V0( record.getItem().getSIDouble(0)), - d0( record.getItem().getSIDouble(0)), - p0(false, 0) -{ - if (record.getItem().hasValue(0) ) - this->p0 = std::make_pair(true, record.getItem().getSIDouble(0)); -} - - -bool Aquifetp::AQUFETP_data::operator==(const Aquifetp::AQUFETP_data& other) const { - return this->aquiferID == other.aquiferID && - this->pvttableID == other.pvttableID && - this->J == other.J && - this->C_t == other.C_t && - this->V0 == other.V0 && - this->d0 == other.d0 && - this->p0 == other.p0; -} - - -Aquifetp::AQUFETP_data::AQUFETP_data(int aquiferID_, int pvttableID_, double J_, double C_t_, double V0_, double d0_, const std::pair& p0_) : - aquiferID(aquiferID_), - pvttableID(pvttableID_), - J(J_), - C_t(C_t_), - V0(V0_), - d0(d0_), - p0(p0_) -{} - - - -Aquifetp::Aquifetp(const Deck& deck) -{ - if (!deck.hasKeyword()) - return; - - const auto& aqufetpKeyword = deck.getKeyword(); - for (auto& record : aqufetpKeyword) - this->m_aqufetp.emplace_back(record); -} - - -Aquifetp::Aquifetp(const std::vector& data) : - m_aqufetp(data) -{} - - -Aquifetp Aquifetp::serializeObject() -{ - Aquifetp result; - result.m_aqufetp = {{1, 2, 3.0, 4.0, 5.0, 6.0, {true, 7.0}}}; - - return result; -} - - -const std::vector& Aquifetp::data() const -{ - return m_aqufetp; -} - - -bool Aquifetp::operator==(const Aquifetp& other) const { - return this->m_aqufetp == other.m_aqufetp; -} - -std::size_t Aquifetp::size() const { - return this->m_aqufetp.size(); -} - -std::vector::const_iterator Aquifetp::begin() const { - return this->m_aqufetp.begin(); -} - - -std::vector::const_iterator Aquifetp::end() const { - return this->m_aqufetp.end(); -} - -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/EclipseConfig.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/EclipseConfig.cpp deleted file mode 100644 index 97d4253973..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/EclipseConfig.cpp +++ /dev/null @@ -1,75 +0,0 @@ -/* - Copyright 2016 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include - -#include -#include -#include -#include -#include -#include - -namespace Opm { - - EclipseConfig::EclipseConfig(const Deck& deck) : - m_initConfig(deck), - io_config(deck) - { - } - - - EclipseConfig::EclipseConfig(const InitConfig& initConfig, const IOConfig& io_conf): - m_initConfig(initConfig), - io_config(io_conf) - { - } - - - EclipseConfig EclipseConfig::serializeObject() - { - EclipseConfig result; - result.m_initConfig = InitConfig::serializeObject(); - result.io_config = IOConfig::serializeObject(); - - return result; - } - - - const InitConfig& EclipseConfig::init() const { - return m_initConfig; - } - - // [[deprecated]] --- use init() - const InitConfig& EclipseConfig::getInitConfig() const { - return init(); - } - - bool EclipseConfig::operator==(const EclipseConfig& data) const { - return this->init() == data.init(); - } - - IOConfig& EclipseConfig::io() { - return const_cast(this->io_config); - } - - const IOConfig& EclipseConfig::io() const { - return this->io_config; - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/EclipseState.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/EclipseState.cpp deleted file mode 100644 index 5622c05908..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/EclipseState.cpp +++ /dev/null @@ -1,276 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - - -namespace Opm { - - - - - EclipseState::EclipseState(const Deck& deck) : - m_tables( deck ), - m_runspec( deck ), - m_eclipseConfig( deck ), - m_deckUnitSystem( deck.getActiveUnitSystem() ), - m_inputNnc( deck ), - m_inputEditNnc( deck ), - m_inputGrid( deck, nullptr ), - m_gridDims( deck ), - field_props( deck, m_runspec.phases(), m_inputGrid, m_tables), - m_simulationConfig( m_eclipseConfig.getInitConfig().restartRequested(), deck, field_props), - m_transMult( GridDims(deck), deck, field_props) - { - m_inputGrid.resetACTNUM(this->field_props.actnum()); - if( this->runspec().phases().size() < 3 ) - OpmLog::info("Only " + std::to_string( this->runspec().phases().size() ) - + " fluid phases are enabled" ); - this->aquifer_config = AquiferConfig(this->m_tables, this->m_inputGrid, deck); - this->tracer_config = TracerConfig(this->m_deckUnitSystem, deck); - - if (deck.hasKeyword( "TITLE" )) { - const auto& titleKeyword = deck.getKeyword( "TITLE" ); - const auto& item = titleKeyword.getRecord( 0 ).getItem( 0 ); - std::vector itemValue = item.getData(); - for (const auto& entry : itemValue) - m_title += entry + ' '; - m_title.pop_back(); - } - - initTransMult(); - initFaults(deck); - this->field_props.reset_actnum( this->m_inputGrid.getACTNUM() ); - } - - - const UnitSystem& EclipseState::getDeckUnitSystem() const { - return m_deckUnitSystem; - } - - const UnitSystem& EclipseState::getUnits() const { - return m_deckUnitSystem; - } - - const EclipseGrid& EclipseState::getInputGrid() const { - return m_inputGrid; - } - - - const SimulationConfig& EclipseState::getSimulationConfig() const { - return m_simulationConfig; - } - - - const FieldPropsManager& EclipseState::fieldProps() const { - return this->field_props; - } - - const FieldPropsManager& EclipseState::globalFieldProps() const { - return this->field_props; - } - - - const TableManager& EclipseState::getTableManager() const { - return m_tables; - } - - - /// [[deprecated]] --- use cfg().io() - const IOConfig& EclipseState::getIOConfig() const { - return m_eclipseConfig.io(); - } - - /// [[deprecated]] --- use cfg().io() - IOConfig& EclipseState::getIOConfig() { - return m_eclipseConfig.io(); - } - - /// [[deprecated]] --- use cfg().init() - const InitConfig& EclipseState::getInitConfig() const { - return m_eclipseConfig.getInitConfig(); - } - - /// [[deprecated]] --- use cfg() - const EclipseConfig& EclipseState::getEclipseConfig() const { - return cfg(); - } - - const EclipseConfig& EclipseState::cfg() const { - return m_eclipseConfig; - } - - const GridDims& EclipseState::gridDims() const { - return m_gridDims; - } - - const Runspec& EclipseState::runspec() const { - return this->m_runspec; - } - - const FaultCollection& EclipseState::getFaults() const { - return m_faults; - } - - const TransMult& EclipseState::getTransMult() const { - return m_transMult; - } - - const NNC& EclipseState::getInputNNC() const { - return m_inputNnc; - } - - bool EclipseState::hasInputNNC() const { - return m_inputNnc.hasNNC(); - } - - const EDITNNC& EclipseState::getInputEDITNNC() const { - return m_inputEditNnc; - } - - bool EclipseState::hasInputEDITNNC() const { - return !m_inputEditNnc.empty(); - } - std::string EclipseState::getTitle() const { - return m_title; - } - - const AquiferConfig& EclipseState::aquifer() const { - return this->aquifer_config; - } - - const TracerConfig& EclipseState::tracer() const { - return this->tracer_config; - } - - void EclipseState::initTransMult() { - const auto& fp = this->field_props; - if (fp.has_double("MULTX")) this->m_transMult.applyMULT(fp.get_global_double("MULTX") , FaceDir::XPlus); - if (fp.has_double("MULTX-")) this->m_transMult.applyMULT(fp.get_global_double("MULTX-"), FaceDir::XMinus); - - if (fp.has_double("MULTY")) this->m_transMult.applyMULT(fp.get_global_double("MULTY") , FaceDir::YPlus); - if (fp.has_double("MULTY-")) this->m_transMult.applyMULT(fp.get_global_double("MULTY-"), FaceDir::YMinus); - - if (fp.has_double("MULTZ")) this->m_transMult.applyMULT(fp.get_global_double("MULTZ") , FaceDir::ZPlus); - if (fp.has_double("MULTZ-")) this->m_transMult.applyMULT(fp.get_global_double("MULTZ-"), FaceDir::ZMinus); - } - - void EclipseState::initFaults(const Deck& deck) { - if (!DeckSection::hasGRID(deck)) - return; - - const GRIDSection gridSection ( deck ); - - m_faults = FaultCollection(gridSection, m_inputGrid); - setMULTFLT(gridSection); - - if (DeckSection::hasEDIT(deck)) { - setMULTFLT(EDITSection ( deck )); - } - - m_transMult.applyMULTFLT( m_faults ); - } - - - - void EclipseState::setMULTFLT(const DeckSection& section) { - for (size_t index=0; index < section.count("MULTFLT"); index++) { - const auto& faultsKeyword = section.getKeyword("MULTFLT" , index); - for (auto iter = faultsKeyword.begin(); iter != faultsKeyword.end(); ++iter) { - - const auto& faultRecord = *iter; - const std::string& faultName = faultRecord.getItem(0).get< std::string >(0); - double multFlt = faultRecord.getItem(1).get< double >(0); - - m_faults.setTransMult( faultName , multFlt ); - } - } - } - - void EclipseState::complainAboutAmbiguousKeyword(const Deck& deck, const std::string& keywordName) { - OpmLog::error("The " + keywordName + " keyword must be unique in the deck. Ignoring all!"); - auto keywords = deck.getKeywordList(keywordName); - for (size_t i = 0; i < keywords.size(); ++i) { - std::string msg = "Ambiguous keyword "+keywordName+" defined here"; - OpmLog::error(Log::fileMessage(keywords[i]->location(), msg)); - } - } - - void EclipseState::applyModifierDeck(const Deck& deck) { - using namespace ParserKeywords; - for (const auto& keyword : deck) { - - if (keyword.isKeyword()) { - for (const auto& record : keyword) { - const std::string& faultName = record.getItem().get< std::string >(0); - auto& fault = m_faults.getFault( faultName ); - double tmpMultFlt = record.getItem().get< double >(0); - double oldMultFlt = fault.getTransMult( ); - double newMultFlt = oldMultFlt * tmpMultFlt; - - /* - This extremely contrived way of doing it is because of difference in - behavior and section awareness between the Fault object and the - Transmult object: - - 1. MULTFLT keywords found in the SCHEDULE section should apply the - transmissibility modifiers cumulatively - i.e. the current - transmissibility across the fault should be *multiplied* with the - newly entered MULTFLT value, and the resulting transmissibility - multplier for this fault should be the product of the newly - entered value and the current value. - - 2. The TransMult::applyMULTFLT() implementation will *multiply* the - transmissibility across a face with the value in the fault - object. Hence the current value has already been multiplied in; - we therefor first *set* the MULTFLT value to the new value, then - apply it to the TransMult object and then eventually update the - MULTFLT value in the fault instance. - - */ - fault.setTransMult( tmpMultFlt ); - m_transMult.applyMULTFLT( fault ); - fault.setTransMult( newMultFlt ); - } - } - } - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Edit/EDITNNC.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Edit/EDITNNC.cpp deleted file mode 100644 index e0fa56280f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Edit/EDITNNC.cpp +++ /dev/null @@ -1,101 +0,0 @@ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - - -namespace Opm -{ - -bool isNeighbor(const std::array& ijk1, const std::array& ijk2) -{ - if ( (ijk1[0] + 1) == ijk2[0] || (ijk1[0] - 1) == ijk2[0] ) - { - return ijk1[1] == ijk2[1] && ijk1[2] == ijk2[2]; - } - if ( (ijk1[1] + 1) == ijk2[1] || (ijk1[1] - 1) == ijk2[1] ) - { - return ijk1[0] == ijk2[0] && ijk1[2] == ijk2[2]; - } - if( (ijk1[2] + 1) == ijk2[2] || (ijk1[2] - 1) == ijk2[2] ) - { - return ijk1[1] == ijk2[1] && ijk1[1] == ijk2[1]; - } - return false; -} - -void readEditNncs(const std::vector< const DeckKeyword* >& editNncsKw, std::vector& editNncs, const GridDims& gridDims) -{ - for (size_t idx_nnc = 0; idx_nnc ijk1; - ijk1[0] = static_cast(nnc.getRecord(i).getItem(0).get< int >(0)-1); - ijk1[1] = static_cast(nnc.getRecord(i).getItem(1).get< int >(0)-1); - ijk1[2] = static_cast(nnc.getRecord(i).getItem(2).get< int >(0)-1); - size_t global_index1 = gridDims.getGlobalIndex(ijk1[0],ijk1[1],ijk1[2]); - - std::array ijk2; - ijk2[0] = static_cast(nnc.getRecord(i).getItem(3).get< int >(0)-1); - ijk2[1] = static_cast(nnc.getRecord(i).getItem(4).get< int >(0)-1); - ijk2[2] = static_cast(nnc.getRecord(i).getItem(5).get< int >(0)-1); - size_t global_index2 = gridDims.getGlobalIndex(ijk2[0],ijk2[1],ijk2[2]); - - const double trans = nnc.getRecord(i).getItem(6).get(0); - using std::abs; - if ( !isNeighbor(ijk1, ijk2) ) - { - editNncs.emplace_back(global_index1, global_index2, trans); - } - else - { - std::ostringstream sstr; - sstr << "Cannot edit neighboring connection from " << global_index1 <<" to "<< - global_index2<< " with EDITNNC"; - Opm::OpmLog::warning(sstr.str()); - } - } - } -} - -EDITNNC::EDITNNC(const Deck& deck) -{ - GridDims gridDims(deck); - const auto& tmpEditNncs = deck.getKeywordList(); - readEditNncs(tmpEditNncs, m_editnnc, gridDims); - auto compare = [](const NNCdata& d1, const NNCdata& d2) - { return d1.cell1 < d2.cell1 || - ( d1.cell1 == d2.cell1 && d1.cell2 < d2.cell2 );}; - std::sort(m_editnnc.begin(), m_editnnc.end(), compare); -} - -EDITNNC EDITNNC::serializeObject() -{ - EDITNNC result; - result.m_editnnc = {{1,2,1.0},{2,3,2.0}}; - - return result; -} - -size_t EDITNNC::size() const { - return(m_editnnc.size()); -} - -bool EDITNNC::empty() const { - return m_editnnc.empty(); -} - -bool EDITNNC::operator==(const EDITNNC& data) const { - return m_editnnc == data.m_editnnc; -} - -} // namespace Opm diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/EndpointScaling.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/EndpointScaling.cpp deleted file mode 100644 index dac7dc7444..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/EndpointScaling.cpp +++ /dev/null @@ -1,131 +0,0 @@ -#include -#include -#include - -namespace Opm { - -EndpointScaling EndpointScaling::serializeObject() -{ - EndpointScaling result; - result.options = std::bitset<4>{13}; - - return result; -} - -EndpointScaling::operator bool() const noexcept { - return this->options[ static_cast< ue >( option::any ) ]; -} - -bool EndpointScaling::directional() const noexcept { - return this->options[ static_cast< ue >( option::directional ) ]; -} - -bool EndpointScaling::nondirectional() const noexcept { - return bool( *this ) && !this->directional(); -} - -bool EndpointScaling::reversible() const noexcept { - return this->options[ static_cast< ue >( option::reversible ) ]; -} - -bool EndpointScaling::irreversible() const noexcept { - return bool( *this ) && !this->reversible(); -} - -bool EndpointScaling::twopoint() const noexcept { - return bool( *this ) && !this->threepoint(); -} - -bool EndpointScaling::threepoint() const noexcept { - return this->options[ static_cast< ue >( option::threepoint ) ]; -} - -bool EndpointScaling::operator==(const EndpointScaling& data) const { - return options == data.options; -} - - - -namespace { - -bool threepoint_scaling( const Deck& deck ) { - if( !deck.hasKeyword( "SCALECRS" ) ) return false; - - /* - * the manual says that Y and N are acceptable values for "YES" and "NO", so - * it's *VERY* likely that only the first character is checked. We preserve - * this behaviour - */ - const auto value = std::toupper( - deck.getKeyword( "SCALECRS" ) - .getRecord( 0 ) - .getItem( "VALUE" ) - .get< std::string >( 0 ).front() ); - - if( value != 'Y' && value != 'N' ) - throw std::invalid_argument( "SCALECRS takes 'YES' or 'NO'" ); - - return value == 'Y'; -} - -bool endscale_nodir( const DeckKeyword& kw ) { - if( kw.getRecord( 0 ).getItem( 0 ).defaultApplied( 0 ) ) - return true; - - const auto& value = uppercase( kw.getRecord( 0 ) - .getItem( 0 ) - .get< std::string >( 0 ) ); - - if( value != "DIRECT" && value != "NODIR" ) - throw std::invalid_argument( - "ENDSCALE argument 1 must be defaulted, 'DIRECT' or 'NODIR', was " - + value - ); - - return value == "NODIR"; -} - -bool endscale_revers( const DeckKeyword& kw ) { - if( kw.getRecord( 0 ).getItem( 1 ).defaultApplied( 0 ) ) - return true; - - const auto& value = uppercase( kw.getRecord( 0 ) - .getItem( 1 ) - .get< std::string >( 0 ) ); - - if( value != "IRREVERS" && value != "REVERS" ) - throw std::invalid_argument( - "ENDSCALE argument 2 must be defaulted, 'REVERS' or 'IRREVERS', was " - + value - ); - - const auto& item0 = kw.getRecord( 0 ).getItem( 0 ); - if( value == "IRREVERS" - && uppercase( item0.get< std::string >( 0 ) ) != "DIRECT" ) - throw std::invalid_argument( "'IRREVERS' requires 'DIRECT'" ); - - return value == "REVERS"; -} - -} - -EndpointScaling::EndpointScaling( const Deck& deck ) { - if( deck.hasKeyword( "ENDSCALE" ) || deck.hasKeyword("SWATINIT")) { - const bool threep_ = threepoint_scaling( deck ); - bool direct_ = false; - bool reversible_ = true; - - if (deck.hasKeyword("ENDSCALE")) { - const auto& endscale = deck.getKeyword( "ENDSCALE" ); - direct_ = !endscale_nodir( endscale ); - reversible_ = endscale_revers( endscale ); - } - - this->options.set( static_cast< ue >( option::any ), true ); - this->options.set( static_cast< ue >( option::directional ), direct_ ); - this->options.set( static_cast< ue >( option::reversible ), reversible_ ); - this->options.set( static_cast< ue >( option::threepoint ), threep_ ); - } -} - -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/Box.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/Box.cpp deleted file mode 100644 index 2185c75739..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/Box.cpp +++ /dev/null @@ -1,233 +0,0 @@ -/* - Copyright 2014 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include - -#include -#include - -#include -#include - -namespace { - - void assert_dims(int len, int l1 , int l2) { - if (len <= 0) - throw std::invalid_argument("Box must have finite size in all directions"); - - if ((l1 < 0) || (l2 < 0) || (l1 > l2)) - throw std::invalid_argument("Invalid index values for sub box"); - - if (l2 >= len) - throw std::invalid_argument("Invalid index values for sub box"); - } - - - void update_default(int &value, std::size_t& default_count, const Opm::DeckItem& item) { - if (item.defaultApplied(0)) - default_count += 1; - else - value = item.get(0) - 1; - } -} - -namespace Opm { - - Box::Box(const EclipseGrid& grid_arg) : - grid(grid_arg) - { - this->reset(); - } - - - Box::Box(const EclipseGrid& grid_arg, int i1 , int i2 , int j1 , int j2 , int k1 , int k2) : - grid(grid_arg) - { - this->init(i1,i2,j1,j2,k1,k2); - } - - - void Box::update(const DeckRecord& deckRecord) { - const auto& I1Item = deckRecord.getItem("I1"); - const auto& I2Item = deckRecord.getItem("I2"); - const auto& J1Item = deckRecord.getItem("J1"); - const auto& J2Item = deckRecord.getItem("J2"); - const auto& K1Item = deckRecord.getItem("K1"); - const auto& K2Item = deckRecord.getItem("K2"); - - std::size_t default_count = 0; - int i1 = 0; - int i2 = this->grid.getNX() - 1; - int j1 = 0; - int j2 = this->grid.getNY() - 1; - int k1 = 0; - int k2 = this->grid.getNZ() - 1; - - update_default(i1, default_count, I1Item); - update_default(i2, default_count, I2Item); - update_default(j1, default_count, J1Item); - update_default(j2, default_count, J2Item); - update_default(k1, default_count, K1Item); - update_default(k2, default_count, K2Item); - - if (default_count != 6) - this->init(i1,i2,j1,j2,k1,k2); - } - - - void Box::reset() - { - this->init(0, this->grid.getNX() - 1 , 0, this->grid.getNY() - 1, 0, this->grid.getNZ() - 1); - } - - - void Box::init(int i1, int i2, int j1, int j2, int k1, int k2) { - assert_dims(this->grid.getNX(), i1 , i2); - assert_dims(this->grid.getNY(), j1 , j2); - assert_dims(this->grid.getNZ(), k1 , k2); - m_stride[0] = 1; - m_stride[1] = this->grid.getNX(); - m_stride[2] = this->grid.getNX() * this->grid.getNY(); - - m_dims[0] = (size_t) (i2 - i1 + 1); - m_dims[1] = (size_t) (j2 - j1 + 1); - m_dims[2] = (size_t) (k2 - k1 + 1); - - m_offset[0] = (size_t) i1; - m_offset[1] = (size_t) j1; - m_offset[2] = (size_t) k1; - - if (size() == this->grid.getCartesianSize()) - m_isGlobal = true; - else - m_isGlobal = false; - - initIndexList(); - } - - - - size_t Box::size() const { - return m_dims[0] * m_dims[1] * m_dims[2]; - } - - - bool Box::isGlobal() const { - return m_isGlobal; - } - - - size_t Box::getDim(size_t idim) const { - if (idim >= 3) - throw std::invalid_argument("The input dimension value is invalid"); - - return m_dims[idim]; - } - - - - const std::vector& Box::getIndexList() const { - return global_index_list; - } - - const std::vector& Box::index_list() const { - return m_index_list; - } - - - void Box::initIndexList() { - global_index_list.clear(); - m_index_list.clear(); - - size_t ii,ij,ik; - for (ik=0; ik < m_dims[2]; ik++) { - size_t k = ik + m_offset[2]; - for (ij=0; ij < m_dims[1]; ij++) { - size_t j = ij + m_offset[1]; - for (ii=0; ii < m_dims[0]; ii++) { - size_t i = ii + m_offset[0]; - size_t g = i * m_stride[0] + j*m_stride[1] + k*m_stride[2]; - - global_index_list.push_back(g); - if (this->grid.cellActive(g)) { - std::size_t global_index = g; - std::size_t active_index = this->grid.activeIndex(g); - std::size_t data_index = ii + ij*this->m_dims[0] + ik*this->m_dims[0]*this->m_dims[1]; - m_index_list.push_back({global_index, active_index, data_index}); - } - } - } - } - } - - bool Box::equal(const Box& other) const { - - if (size() != other.size()) - return false; - - { - for (size_t idim = 0; idim < 3; idim++) { - if (m_dims[idim] != other.m_dims[idim]) - return false; - - if (m_stride[idim] != other.m_stride[idim]) - return false; - - if (m_offset[idim] != other.m_offset[idim]) - return false; - } - } - - return true; - } - - - int Box::lower(int dim) const { - return m_offset[dim]; - } - - int Box::upper(int dim) const { - return m_offset[dim] + m_dims[dim] - 1; - } - - int Box::I1() const { - return lower(0); - } - - int Box::I2() const { - return upper(0); - } - - int Box::J1() const { - return lower(1); - } - - int Box::J2() const { - return upper(1); - } - - int Box::K1() const { - return lower(2); - } - - int Box::K2() const { - return upper(2); - } - -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/BoxManager.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/BoxManager.cpp deleted file mode 100644 index 4a9032a593..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/BoxManager.cpp +++ /dev/null @@ -1,70 +0,0 @@ -/* - Copyright 2014 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include - -#include - - -namespace Opm { - - BoxManager::BoxManager(const EclipseGrid& grid_arg) : - grid( grid_arg ), - m_globalBox( std::unique_ptr( new Box(grid_arg) )) - {} - - - const Box& BoxManager::getActiveBox() const { - if (m_keywordBox) - return *m_keywordBox; - - if (m_inputBox) - return *m_inputBox; - - return *m_globalBox; - } - - - void BoxManager::setInputBox( int i1,int i2 , int j1 , int j2 , int k1 , int k2) { - this->m_inputBox.reset(new Box( this->grid, i1, i2, j1, j2, k1, k2 )); - } - - void BoxManager::endInputBox() { - if(m_keywordBox) - throw std::invalid_argument("Hmmm - this seems like an internal error - the SECTION is terminated with an active keyword box"); - - m_inputBox.reset( 0 ); - } - - void BoxManager::endSection() { - endInputBox(); - } - - void BoxManager::setKeywordBox( int i1,int i2 , int j1 , int j2 , int k1 , int k2) { - this->m_keywordBox.reset( new Box( this->grid, i1, i2, j1, j2, k1, k2 )); - } - - void BoxManager::endKeyword() { - this->m_keywordBox.reset( 0 ); - } - - const std::vector& BoxManager::index_list() const { - return this->getActiveBox().index_list(); - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/EclipseGrid.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/EclipseGrid.cpp deleted file mode 100644 index 17f6d8a8d1..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/EclipseGrid.cpp +++ /dev/null @@ -1,1843 +0,0 @@ -/* - Copyright 2014 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#define _USE_MATH_DEFINES -#include -#include -#include - -#include -#include -#include - -#include -#include -#include - -#include -#include - -#include -#include -#include -#include -#include -#include - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - - -namespace Opm { - - -EclipseGrid::EclipseGrid(std::array& dims , - const std::vector& coord , - const std::vector& zcorn , - const int * actnum, - const double * mapaxes) - : GridDims(dims), - m_minpvMode(MinpvMode::ModeEnum::Inactive), - m_pinch("PINCH"), - m_pinchoutMode(PinchMode::ModeEnum::TOPBOT), - m_multzMode(PinchMode::ModeEnum::TOP) -{ - initCornerPointGrid( coord , zcorn , actnum , mapaxes ); -} - -/** - Will create an EclipseGrid instance based on an existing - GRID/EGRID file. -*/ - - -EclipseGrid::EclipseGrid(const std::string& fileName ) - : GridDims(), - m_minpvMode(MinpvMode::ModeEnum::Inactive), - m_pinch("PINCH"), - m_pinchoutMode(PinchMode::ModeEnum::TOPBOT), - m_multzMode(PinchMode::ModeEnum::TOP) -{ - - Opm::EclIO::EclFile egridfile(fileName); - m_useActnumFromGdfile=true; - initGridFromEGridFile(egridfile, fileName); -} - - -EclipseGrid::EclipseGrid(size_t nx, size_t ny , size_t nz, - double dx, double dy, double dz) - : GridDims(nx, ny, nz), - m_minpvMode(MinpvMode::ModeEnum::Inactive), - m_pinch("PINCH"), - m_pinchoutMode(PinchMode::ModeEnum::TOPBOT), - m_multzMode(PinchMode::ModeEnum::TOP) -{ - - m_coord.reserve((nx+1)*(ny+1)*6); - - for (size_t j = 0; j < (ny+1); j++) { - for (size_t i = 0; i < (nx+1); i++) { - m_coord.push_back(i*dx); - m_coord.push_back(j*dy); - m_coord.push_back(0.0); - m_coord.push_back(i*dx); - m_coord.push_back(j*dy); - m_coord.push_back(nz*dz); - } - } - - m_zcorn.assign(nx*ny*nz*8, 0); - - for (size_t k = 0; k < nz ; k++) { - for (size_t j = 0; j < ny ; j++) { - for (size_t i = 0; i < nx ; i++) { - - // top face of cell - int zind = i*2 + j*nx*4 + k*nx*ny*8; - - double zt = k*dz; - double zb = (k+1)*dz; - - m_zcorn[zind] = zt; - m_zcorn[zind + 1] = zt; - - zind = zind + nx*2; - - m_zcorn[zind] = zt; - m_zcorn[zind + 1] = zt; - - // bottom face of cell - zind = i*2 + j*nx*4 + k*nx*ny*8 + nx*ny*4; - - m_zcorn[zind] = zb; - m_zcorn[zind + 1] = zb; - - zind = zind + nx*2; - - m_zcorn[zind] = zb; - m_zcorn[zind + 1] = zb; - } - } - } - - resetACTNUM(); -} - -EclipseGrid::EclipseGrid(const EclipseGrid& src, const double* zcorn, const std::vector& actnum) - : EclipseGrid(src) -{ - - if (zcorn != nullptr) { - size_t sizeZcorn = this->getCartesianSize()*8; - - for (size_t n=0; n < sizeZcorn; n++) { - m_zcorn[n] = zcorn[n]; - } - - ZcornMapper mapper( getNX(), getNY(), getNZ()); - zcorn_fixed = mapper.fixupZCORN( m_zcorn ); - } - - resetACTNUM(actnum); -} - -EclipseGrid::EclipseGrid(const EclipseGrid& src, const std::vector& actnum) - : EclipseGrid( src , nullptr , actnum ) -{ } - -/* - This is the main EclipseGrid constructor, it will inspect the - input Deck for grid keywords, either the corner point keywords - COORD and ZCORN, or the various rectangular keywords like DX,DY - and DZ. - - Actnum is treated specially: - - 1. If an actnum pointer is passed in that should be a pointer - to 0 and 1 values which will be used as actnum mask. - - 2. If the actnum pointer is not present the constructor will - look in the deck for an actnum keyword, and use that if it - is found. This is a best effort which will work in many - cases, but if the ACTNUM keyword is manipulated in the deck - those manipulations will be silently lost; if the ACTNUM - keyword has size different from nx*ny*nz it will also be - silently ignored. - - With a mutable EclipseGrid instance you can later call the - EclipseGrid::resetACTNUM() method when you have complete actnum - information. The EclipseState based construction of EclipseGrid - is a two-pass operation, which guarantees that actnum is handled - correctly. -*/ - - - -EclipseGrid::EclipseGrid(const Deck& deck, const int * actnum) - : GridDims(deck), - m_minpvMode(MinpvMode::ModeEnum::Inactive), - m_pinch("PINCH"), - m_pinchoutMode(PinchMode::ModeEnum::TOPBOT), - m_multzMode(PinchMode::ModeEnum::TOP) -{ - - if (deck.hasKeyword("GDFILE")){ - - if (deck.hasKeyword("COORD")){ - throw std::invalid_argument("COORD can't be used together with GDFILE"); - } - - if (deck.hasKeyword("ZCORN")){ - throw std::invalid_argument("ZCORN can't be used together with GDFILE"); - } - - if (deck.hasKeyword("ACTNUM")){ - if (keywInputBeforeGdfile(deck, "ACTNUM")) { - m_useActnumFromGdfile = true; - } - } else { - m_useActnumFromGdfile = true; - } - - } - - initGrid(deck); - - if (deck.hasKeyword("MAPUNITS")){ - if ((m_mapunits =="") || ( !keywInputBeforeGdfile(deck, "MAPUNITS"))) { - const auto& record = deck.getKeyword( ).getStringData(); - m_mapunits = record[0]; - } - } - - if (deck.hasKeyword("MAPAXES")){ - if ((m_mapaxes.size() == 0) || ( !keywInputBeforeGdfile(deck, "MAPAXES"))) { - const Opm::DeckKeyword& mapaxesKeyword = deck.getKeyword(); - m_mapaxes.resize(6); - for (size_t n=0; n < 6; n++){ - m_mapaxes[n] = mapaxesKeyword.getRecord(0).getItem(n).get(0); - } - } - } - - if (actnum != nullptr) { - resetACTNUM(actnum); - } else { - if (m_useActnumFromGdfile){ - // actnum already reset in initBinaryGrid - } else { - if (deck.hasKeyword()) { - const auto& actnumData = deck.getKeyword().getIntData(); - /* - Would have liked to fail hard in the case where the size of the - ACTNUM array disagrees with nx*ny*nz; but it is possible to embed - the ACTNUM keyword in a BOX / ENDBOX pair and in that case it is - legitimate with size(ACTNUM) < nx*ny*nz. - - If size(actnum) != nx*ny*nz it is ignored here, however it is - taken into account when creating an final actnum in the field - property manager. - */ - if (actnumData.size() == getCartesianSize()) - resetACTNUM( actnumData); - else - resetACTNUM(); - } else { - resetACTNUM(); - } - } - } -} - - - bool EclipseGrid::circle( ) const{ - return this->m_circle; - } - - void EclipseGrid::initGrid(const Deck& deck) { - - if (deck.hasKeyword()) { - initCylindricalGrid(deck ); - } else { - if (hasCornerPointKeywords(deck)) { - initCornerPointGrid(deck); - } else if (hasCartesianKeywords(deck)) { - initCartesianGrid(deck); - } else if (hasGDFILE(deck)) { - initBinaryGrid(deck); - } else { - throw std::invalid_argument("EclipseGrid needs cornerpoint or cartesian keywords."); - } - } - - if (deck.hasKeyword()) { - const auto& record = deck.getKeyword( ).getRecord(0); - const auto& item = record.getItem( ); - m_pinch.setValue( item.getSIDouble(0) ); - - auto pinchoutString = record.getItem().get< std::string >(0); - m_pinchoutMode = PinchMode::PinchModeFromString(pinchoutString); - - auto multzString = record.getItem().get< std::string >(0); - m_multzMode = PinchMode::PinchModeFromString(multzString); - } - - if (deck.hasKeyword() && deck.hasKeyword()) { - throw std::invalid_argument("Can not have both MINPV and MINPVFIL in deck."); - } - - m_minpvVector.resize(getCartesianSize(), 0.0); - if (deck.hasKeyword()) { - const auto& record = deck.getKeyword( ).getRecord(0); - const auto& item = record.getItem( ); - std::fill(m_minpvVector.begin(), m_minpvVector.end(), item.getSIDouble(0)); - m_minpvMode = MinpvMode::ModeEnum::EclSTD; - } else if(deck.hasKeyword()) { - // We should use the grid properties to support BOX, but then we need the eclipseState - const auto& record = deck.getKeyword( ).getRecord(0); - m_minpvVector =record.getItem(0).getSIDoubleData(); - m_minpvMode = MinpvMode::ModeEnum::EclSTD; - } - - } - - void EclipseGrid::initGridFromEGridFile(Opm::EclIO::EclFile& egridfile, std::string fileName){ - - if (!egridfile.hasKey("GRIDHEAD")) { - throw std::invalid_argument("file: " + fileName + " is not a valid egrid file, GRIDHEAD not found"); - } - - if (!egridfile.hasKey("COORD")) { - throw std::invalid_argument("file: " + fileName + " is not a valid egrid file, COORD not found"); - } - - if (!egridfile.hasKey("ZCORN")) { - throw std::invalid_argument("file: " + fileName + " is not a valid egrid file, ZCORN not found"); - } - - if (!egridfile.hasKey("GRIDUNIT")) { - throw std::invalid_argument("file: " + fileName + " is not a valid egrid file, ZCORN not found"); - } - - const std::vector& gridunit = egridfile.get("GRIDUNIT"); - - const std::vector& gridhead = egridfile.get("GRIDHEAD"); - const std::array dims = {gridhead[1], gridhead[2], gridhead[3]}; - - m_nx=dims[0]; - m_ny=dims[1]; - m_nz=dims[2]; - - const std::vector& coord_f = egridfile.get("COORD"); - const std::vector& zcorn_f = egridfile.get("ZCORN"); - - m_coord.assign(coord_f.begin(), coord_f.end()); - m_zcorn.assign(zcorn_f.begin(), zcorn_f.end()); - - if (gridunit[0] != "METRES") { - - const auto length = ::Opm::UnitSystem::measure::length; - - if (gridunit[0] == "FEET"){ - Opm::UnitSystem units(Opm::UnitSystem::UnitType::UNIT_TYPE_FIELD ); - units.to_si(length, m_coord); - units.to_si(length, m_zcorn); - } else if (gridunit[0] == "CM"){ - Opm::UnitSystem units(Opm::UnitSystem::UnitType::UNIT_TYPE_LAB ); - units.to_si(length, m_coord); - units.to_si(length, m_zcorn); - } else { - std::string message = "gridunit '" + gridunit[0] + "' doesn't correspong to a valid unit system"; - throw std::invalid_argument(message); - } - } - - if ((egridfile.hasKey("ACTNUM")) && (m_useActnumFromGdfile)) { - const std::vector& actnum = egridfile.get("ACTNUM"); - resetACTNUM( actnum ); - } - - if (egridfile.hasKey("MAPAXES")) { - const std::vector& mapaxes_f = egridfile.get("MAPAXES"); - m_mapaxes.assign(mapaxes_f.begin(), mapaxes_f.end()); - } - - if (egridfile.hasKey("MAPUNITS")) { - const std::vector& mapunits = egridfile.get("MAPUNITS"); - m_mapunits=mapunits[0]; - } - - ZcornMapper mapper( getNX(), getNY(), getNZ()); - zcorn_fixed = mapper.fixupZCORN( m_zcorn ); - } - - bool EclipseGrid::keywInputBeforeGdfile(const Deck& deck, const std::string keyword) const { - - std::vector keywordList; - keywordList.reserve(deck.size()); - - for (size_t n=0;n& EclipseGrid::getMinpvVector( ) const { - return m_minpvVector; - } - - void EclipseGrid::initBinaryGrid(const Deck& deck) { - - const DeckKeyword& gdfile_kw = deck.getKeyword("GDFILE"); - const std::string& gdfile_arg = gdfile_kw.getRecord(0).getItem("filename").get(0); - std::string filename = deck.makeDeckPath(gdfile_arg); - - Opm::EclIO::EclFile egridfile(filename); - - initGridFromEGridFile(egridfile, filename); - } - - void EclipseGrid::initCartesianGrid(const Deck& deck) { - - if (hasDVDEPTHZKeywords( deck )) { - initDVDEPTHZGrid(deck ); - } else if (hasDTOPSKeywords(deck)) { - initDTOPSGrid( deck ); - } else { - throw std::invalid_argument("Tried to initialize cartesian grid without all required keywords"); - } - } - - void EclipseGrid::initDVDEPTHZGrid(const Deck& deck) { - - const std::vector& DXV = deck.getKeyword().getSIDoubleData(); - const std::vector& DYV = deck.getKeyword().getSIDoubleData(); - const std::vector& DZV = deck.getKeyword().getSIDoubleData(); - const std::vector& DEPTHZ = deck.getKeyword().getSIDoubleData(); - auto nx = this->getNX(); - auto ny = this->getNY(); - auto nz = this->getNZ(); - - assertVectorSize( DEPTHZ , static_cast( (nx + 1)*(ny +1 )) , "DEPTHZ"); - assertVectorSize( DXV , static_cast( nx ) , "DXV"); - assertVectorSize( DYV , static_cast( ny ) , "DYV"); - assertVectorSize( DZV , static_cast( nz ) , "DZV"); - - m_coord = makeCoordDxvDyvDzvDepthz(DXV, DYV, DZV, DEPTHZ); - m_zcorn = makeZcornDzvDepthz(DZV, DEPTHZ); - - ZcornMapper mapper( getNX(), getNY(), getNZ()); - zcorn_fixed = mapper.fixupZCORN( m_zcorn ); - } - - void EclipseGrid::initDTOPSGrid(const Deck& deck) { - - std::vector DX = EclipseGrid::createDVector( this->getNXYZ(), 0 , "DX" , "DXV" , deck); - std::vector DY = EclipseGrid::createDVector( this->getNXYZ(), 1 , "DY" , "DYV" , deck); - std::vector DZ = EclipseGrid::createDVector( this->getNXYZ(), 2 , "DZ" , "DZV" , deck); - std::vector TOPS = EclipseGrid::createTOPSVector( this->getNXYZ(), DZ , deck ); - - m_coord = makeCoordDxDyDzTops(DX, DY, DZ, TOPS); - m_zcorn = makeZcornDzTops(DZ, TOPS); - - ZcornMapper mapper( getNX(), getNY(), getNZ()); - zcorn_fixed = mapper.fixupZCORN( m_zcorn ); - } - - - void EclipseGrid::getCellCorners(const std::array& ijk, const std::array& dims, - std::array& X, - std::array& Y, - std::array& Z) const - { - - std::array zind; - std::array pind; - - // calculate indices for grid pillars in COORD arrray - const size_t p_offset = ijk[1]*(dims[0]+1)*6 + ijk[0]*6; - - pind[0] = p_offset; - pind[1] = p_offset + 6; - pind[2] = p_offset + (dims[0]+1)*6; - pind[3] = pind[2] + 6; - - // get depths from zcorn array in ZCORN array - const size_t z_offset = ijk[2]*dims[0]*dims[1]*8 + ijk[1]*dims[0]*4 + ijk[0]*2; - - zind[0] = z_offset; - zind[1] = z_offset + 1; - zind[2] = z_offset + dims[0]*2; - zind[3] = zind[2] + 1; - - for (int n = 0; n < 4; n++) - zind[n+4] = zind[n] + dims[0]*dims[1]*4; - - - for (int n = 0; n< 8; n++) - Z[n] = m_zcorn[zind[n]]; - - - for (int n=0; n<4; n++) { - double xt = m_coord[pind[n]]; - double yt = m_coord[pind[n] + 1]; - double zt = m_coord[pind[n] + 2]; - - double xb = m_coord[pind[n] + 3]; - double yb = m_coord[pind[n] + 4]; - double zb = m_coord[pind[n]+5]; - - if (zt == zb) { - X[n] = xt; - X[n + 4] = xt; - - Y[n] = yt; - Y[n + 4] = yt; - } else { - X[n] = xt + (xb-xt) / (zt-zb) * (zt - Z[n]); - X[n+4] = xt + (xb-xt) / (zt-zb) * (zt-Z[n+4]); - - Y[n] = yt+(yb-yt)/(zt-zb)*(zt-Z[n]); - Y[n+4] = yt+(yb-yt)/(zt-zb)*(zt-Z[n+4]); - } - } - } - - - void EclipseGrid::getCellCorners(const std::size_t globalIndex, - std::array& X, - std::array& Y, - std::array& Z) const - { - this->assertGlobalIndex(globalIndex); - auto ijk = this->getIJK(globalIndex); - this->getCellCorners(ijk, this->getNXYZ(), X, Y, Z); - } - - - std::vector EclipseGrid::makeCoordDxvDyvDzvDepthz(const std::vector& dxv, const std::vector& dyv, const std::vector& dzv, const std::vector& depthz) const { - auto nx = this->getNX(); - auto ny = this->getNY(); - auto nz = this->getNZ(); - - std::vector coord; - coord.reserve((nx+1)*(ny+1)*6); - - std::vector x(nx + 1, 0.0); - std::partial_sum(dxv.begin(), dxv.end(), x.begin() + 1); - - std::vector y(ny + 1, 0.0); - std::partial_sum(dyv.begin(), dyv.end(), y.begin() + 1); - - std::vector z(nz + 1, 0.0); - std::partial_sum(dzv.begin(), dzv.end(), z.begin() + 1); - - - for (std::size_t j = 0; j < ny + 1; j++) { - for (std::size_t i = 0; i EclipseGrid::makeZcornDzvDepthz(const std::vector& dzv, const std::vector& depthz) const { - auto nx = this->getNX(); - auto ny = this->getNY(); - auto nz = this->getNZ(); - - std::vector zcorn; - size_t sizeZcorn = nx*ny*nz*8; - - zcorn.assign (sizeZcorn, 0.0); - - std::vector z(nz + 1, 0.0); - std::partial_sum(dzv.begin(), dzv.end(), z.begin() + 1); - - - for (std::size_t k = 0; k < nz; k++) { - for (std::size_t j = 0; j < ny; j++) { - for (std::size_t i = 0; i < nx; i++) { - - const double z0 = z[k]; - - // top face of cell - auto zind = i*2 + j*nx*4 + k*nx*ny*8; - - zcorn[zind] = depthz[i+j*(nx+1)] + z0; - zcorn[zind + 1] = depthz[i+j*(nx+1) +1 ] + z0; - - zind = zind + nx*2; - - zcorn[zind] = depthz[i+(j+1)*(nx+1)] + z0; - zcorn[zind + 1] = depthz[i+(j+1)*(nx+1) + 1] + z0; - - // bottom face of cell - zind = i*2 + j*nx*4 + k*nx*ny*8 + nx*ny*4; - - zcorn[zind] = depthz[i+j*(nx+1)] + z0 + dzv[k]; - zcorn[zind + 1] = depthz[i+j*(nx+1) +1 ] + z0 + dzv[k]; - - zind = zind + nx*2; - - zcorn[zind] = depthz[i+(j+1)*(nx+1)] + z0 + dzv[k]; - zcorn[zind + 1] = depthz[i+(j+1)*(nx+1) + 1] + z0 + dzv[k]; - } - } - } - - return zcorn; - } - - namespace - { - std::vector makeSumIdirAtK(const int nx, const int ny, const int k, const std::vector& dx) - { - std::vector s(nx * ny, 0.0); - for (int j = 0; j < ny; ++j) { - double sum = 0.0; - for (int i = 0; i < nx; ++i) { - sum += dx[i + j*nx + k*nx*ny]; - s[i + j*nx] = sum; - } - } - return s; - } - - std::vector makeSumJdirAtK(const int nx, const int ny, const int k, const std::vector& dy) - { - std::vector s(nx * ny, 0.0); - for (int i = 0; i < nx; ++i) { - double sum = 0.0; - for (int j = 0; j < ny; ++j) { - sum += dy[i + j*nx + k*nx*ny]; - s[i + j*nx] = sum; - } - } - return s; - } - - std::vector makeSumKdir(const int nx, const int ny, const int nz, const std::vector& dz) - { - std::vector s(nx * ny, 0.0); - for (int i = 0; i < nx; ++i) { - for (int j = 0; j < ny; ++j) { - double sum = 0.0; - for (int k = 0; k < nz; ++k) { - sum += dz[i + j*nx + k*nx*ny]; - } - s[i + j*nx] = sum; - } - } - return s; - } - - } // anonymous namespace - - std::vector EclipseGrid::makeCoordDxDyDzTops(const std::vector& dx, const std::vector& dy, const std::vector& dz, const std::vector& tops) const { - auto nx = this->getNX(); - auto ny = this->getNY(); - auto nz = this->getNZ(); - - std::vector coord; - coord.reserve((nx+1)*(ny+1)*6); - - std::vector sum_idir_top = makeSumIdirAtK(nx, ny, 0, dx); - std::vector sum_idir_bot = makeSumIdirAtK(nx, ny, nz - 1, dx); - std::vector sum_jdir_top = makeSumJdirAtK(nx, ny, 0, dy); - std::vector sum_jdir_bot = makeSumJdirAtK(nx, ny, nz - 1, dy); - std::vector sum_kdir = makeSumKdir(nx, ny, nz, dz); - - for (std::size_t j = 0; j < ny; j++) { - - double y0 = 0; - double zt = tops[0]; - double zb = zt + sum_kdir[0 + 0*nx]; - - if (j == 0) { - double x0 = 0.0; - - coord.push_back(x0); - coord.push_back(y0); - coord.push_back(zt); - coord.push_back(x0); - coord.push_back(y0); - coord.push_back(zb); - - for (std::size_t i = 0; i < nx; i++) { - - size_t ind = i+j*nx+1; - - if (i == (nx-1)) { - ind=ind-1; - } - - zt = tops[ind]; - zb = zt + sum_kdir[i + j*nx]; - - double xt = x0 + dx[i + j*nx]; - double xb = sum_idir_bot[i + j*nx]; - - coord.push_back(xt); - coord.push_back(y0); - coord.push_back(zt); - coord.push_back(xb); - coord.push_back(y0); - coord.push_back(zb); - - x0=xt; - } - } - - std::size_t ind = (j+1)*nx; - - if (j == (ny-1) ) { - ind = j*nx; - } - - double x0 = 0.0; - - double yt = sum_jdir_top[0 + j*nx]; - double yb = sum_jdir_bot[0 + j*nx]; - - zt = tops[ind]; - zb = zt + sum_kdir[0 + j*nx]; - - coord.push_back(x0); - coord.push_back(yt); - coord.push_back(zt); - coord.push_back(x0); - coord.push_back(yb); - coord.push_back(zb); - - for (std::size_t i=0; i < nx; i++) { - - ind = i+(j+1)*nx+1; - - if (j == (ny-1) ) { - ind = i+j*nx+1; - } - - if (i == (nx - 1) ) { - ind=ind-1; - } - - zt = tops[ind]; - zb = zt + sum_kdir[i + j*nx]; - - double xt=-999; - double xb; - - if (j == (ny-1) ) { - xt = sum_idir_top[i + j*nx]; - xb = sum_idir_bot[i + j*nx]; - } else { - xt = sum_idir_top[i + (j+1)*nx]; - xb = sum_idir_bot[i + (j+1)*nx]; - } - - if (i == (nx - 1) ) { - yt = sum_jdir_top[i + j*nx]; - yb = sum_jdir_bot[i + j*nx]; - } else { - yt = sum_jdir_top[(i + 1) + j*nx]; - yb = sum_jdir_bot[(i + 1) + j*nx]; - } - - coord.push_back(xt); - coord.push_back(yt); - coord.push_back(zt); - coord.push_back(xb); - coord.push_back(yb); - coord.push_back(zb); - } - } - - return coord; - } - - std::vector EclipseGrid::makeZcornDzTops(const std::vector& dz, const std::vector& tops) const { - - std::vector zcorn; - size_t sizeZcorn = this->getCartesianSize() * 8; - auto nx = this->getNX(); - auto ny = this->getNY(); - auto nz = this->getNZ(); - zcorn.assign (sizeZcorn, 0.0); - - for (std::size_t j = 0; j < ny; j++) { - for (std::size_t i = 0; i < nx; i++) { - std::size_t ind = i + j*nx; - double z = tops[ind]; - - for (std::size_t k = 0; k < nz; k++) { - - // top face of cell - std::size_t zind = i*2 + j*nx*4 + k*nx*ny*8; - - zcorn[zind] = z; - zcorn[zind + 1] = z; - - zind = zind + nx*2; - - zcorn[zind] = z; - zcorn[zind + 1] = z; - - z = z + dz[i + j*nx + k*nx*ny]; - - // bottom face of cell - zind = i*2 + j*nx*4 + k*nx*ny*8 + nx*ny*4; - - zcorn[zind] = z; - zcorn[zind + 1] = z; - - zind = zind + nx*2; - - zcorn[zind] = z; - zcorn[zind + 1] = z; - } - } - } - - return zcorn; - } - - /* - Limited implementaton - requires keywords: DRV, DTHETAV, DZV and TOPS. - */ - - void EclipseGrid::initCylindricalGrid(const Deck& deck) - { - // The hasCyindricalKeywords( ) checks according to the - // eclipse specification. We currently do not support all - // aspects of cylindrical grids, we therefor have an - // additional test here, which checks if we have the keywords - // required by the current implementation. - if (!hasCylindricalKeywords(deck)) - throw std::invalid_argument("Not all keywords required for cylindrical grids present"); - - if (!deck.hasKeyword()) - throw std::logic_error("The current implementation *must* have theta values specified using the DTHETAV keyword"); - - if (!deck.hasKeyword()) - throw std::logic_error("The current implementation *must* have radial values specified using the DRV keyword"); - - if (!deck.hasKeyword() || !deck.hasKeyword()) - throw std::logic_error("The current implementation *must* have vertical cell size specified using the DZV and TOPS keywords"); - - const std::vector& drv = deck.getKeyword().getSIDoubleData(); - const std::vector& dthetav = deck.getKeyword().getSIDoubleData(); - const std::vector& dzv = deck.getKeyword().getSIDoubleData(); - const std::vector& tops = deck.getKeyword().getSIDoubleData(); - - if (drv.size() != this->getNX()) - throw std::invalid_argument("DRV keyword should have exactly " + std::to_string( this->getNX() ) + " elements"); - - if (dthetav.size() != this->getNY()) - throw std::invalid_argument("DTHETAV keyword should have exactly " + std::to_string( this->getNY() ) + " elements"); - - if (dzv.size() != this->getNZ()) - throw std::invalid_argument("DZV keyword should have exactly " + std::to_string( this->getNZ() ) + " elements"); - - if (tops.size() != (this->getNX() * this->getNY())) - throw std::invalid_argument("TOPS keyword should have exactly " + std::to_string( this->getNX() * this->getNY() ) + " elements"); - - { - double total_angle = 0; - for (auto theta : dthetav) - total_angle += theta; - - if (std::abs( total_angle - 360 ) < 0.01) - m_circle = deck.hasKeyword(); - else { - if (total_angle > 360) - throw std::invalid_argument("More than 360 degrees rotation - cells will be double covered"); - } - } - - /* - Now the data has been validated, now we continue to create - ZCORN and COORD vectors, and we are done. - */ - { - ZcornMapper zm( this->getNX(), this->getNY(), this->getNZ()); - CoordMapper cm(this->getNX(), this->getNY()); - std::vector zcorn( zm.size() ); - std::vector coord( cm.size() ); - { - std::vector zk(this->getNZ()); - zk[0] = 0; - for (std::size_t k = 1; k < this->getNZ(); k++) - zk[k] = zk[k - 1] + dzv[k - 1]; - - for (std::size_t k = 0; k < this->getNZ(); k++) { - for (std::size_t j = 0; j < this->getNY(); j++) { - for (std::size_t i = 0; i < this->getNX(); i++) { - size_t tops_value = tops[ i + this->getNX() * j]; - for (size_t c=0; c < 4; c++) { - zcorn[ zm.index(i,j,k,c) ] = zk[k] + tops_value; - zcorn[ zm.index(i,j,k,c + 4) ] = zk[k] + tops_value + dzv[k]; - } - } - } - } - } - { - std::vector ri(this->getNX() + 1); - std::vector tj(this->getNY() + 1); - double z1 = *std::min_element( zcorn.begin() , zcorn.end()); - double z2 = *std::max_element( zcorn.begin() , zcorn.end()); - ri[0] = deck.getKeyword().getRecord(0).getItem(0).getSIDouble( 0 ); - for (std::size_t i = 1; i <= this->getNX(); i++) - ri[i] = ri[i - 1] + drv[i - 1]; - - tj[0] = 0; - for (std::size_t j = 1; j <= this->getNY(); j++) - tj[j] = tj[j - 1] + dthetav[j - 1]; - - - for (std::size_t j = 0; j <= this->getNY(); j++) { - /* - The theta value is supposed to go counterclockwise, starting at 'twelve o clock'. - */ - double t = M_PI * (90 - tj[j]) / 180; - double c = cos( t ); - double s = sin( t ); - for (std::size_t i = 0; i <= this->getNX(); i++) { - double r = ri[i]; - double x = r*c; - double y = r*s; - - coord[ cm.index(i,j,0,0) ] = x; - coord[ cm.index(i,j,1,0) ] = y; - coord[ cm.index(i,j,2,0) ] = z1; - - coord[ cm.index(i,j,0,1) ] = x; - coord[ cm.index(i,j,1,1) ] = y; - coord[ cm.index(i,j,2,1) ] = z2; - } - } - } - initCornerPointGrid( coord, zcorn, nullptr, nullptr); - } - } - - - void EclipseGrid::initCornerPointGrid(const std::vector& coord , - const std::vector& zcorn , - const int * actnum, - const double * mapaxes) - - - { - m_coord = coord; - m_zcorn = zcorn; - - ZcornMapper mapper( getNX(), getNY(), getNZ()); - zcorn_fixed = mapper.fixupZCORN( m_zcorn ); - this->resetACTNUM(actnum); - - if (mapaxes != nullptr){ - m_mapaxes.resize(6); - for (size_t n = 0; n < 6; n++){ - m_mapaxes[n] = mapaxes[n]; - } - } - } - - void EclipseGrid::initCornerPointGrid(const Deck& deck) { - assertCornerPointKeywords(deck); - { - const auto& ZCORNKeyWord = deck.getKeyword(); - const auto& COORDKeyWord = deck.getKeyword(); - - const std::vector& zcorn = ZCORNKeyWord.getSIDoubleData(); - const std::vector& coord = COORDKeyWord.getSIDoubleData(); - - int * actnum = nullptr; - std::vector actnumVector; - - if (deck.hasKeyword()) { - const auto& actnumKeyword = deck.getKeyword(); - actnumVector = actnumKeyword.getIntData(); - - if (actnumVector.size() != this->getCartesianSize()) - throw std::invalid_argument("ACTNUM vector has wrong size"); - - actnum = actnumVector.data(); - } - - initCornerPointGrid( coord , zcorn, actnum, nullptr ); - } - } - - bool EclipseGrid::hasCornerPointKeywords(const Deck& deck) { - if (deck.hasKeyword() && deck.hasKeyword()) - return true; - else - return false; - } - - - void EclipseGrid::assertCornerPointKeywords(const Deck& deck) - { - const int nx = this->getNX(); - const int ny = this->getNY(); - const int nz = this->getNZ(); - { - const auto& ZCORNKeyWord = deck.getKeyword(); - - if (ZCORNKeyWord.getDataSize() != static_cast(8*nx*ny*nz)) { - const std::string msg = - "Wrong size of the ZCORN keyword: Expected 8*x*ny*nz = " - + std::to_string(static_cast(8*nx*ny*nz)) + " is " - + std::to_string(static_cast(ZCORNKeyWord.getDataSize())); - OpmLog::error(msg); - throw std::invalid_argument(msg); - } - } - - { - const auto& COORDKeyWord = deck.getKeyword(); - if (COORDKeyWord.getDataSize() != static_cast(6*(nx + 1)*(ny + 1))) { - const std::string msg = - "Wrong size of the COORD keyword: Expected 6*(nx + 1)*(ny + 1) = " - + std::to_string(static_cast(6*(nx + 1)*(ny + 1))) + " is " - + std::to_string(static_cast(COORDKeyWord.getDataSize())); - OpmLog::error(msg); - throw std::invalid_argument(msg); - } - } - } - - - bool EclipseGrid::hasGDFILE(const Deck& deck) { - return deck.hasKeyword(); - } - - bool EclipseGrid::hasCartesianKeywords(const Deck& deck) { - if (hasDVDEPTHZKeywords( deck )) - return true; - else - return hasDTOPSKeywords(deck); - } - - bool EclipseGrid::hasCylindricalKeywords(const Deck& deck) { - if (deck.hasKeyword() && - deck.hasKeyword() && - (deck.hasKeyword() || deck.hasKeyword()) && - (deck.hasKeyword() || deck.hasKeyword()) && - (deck.hasKeyword() || deck.hasKeyword())) - return true; - else - return false; - } - - - bool EclipseGrid::hasDVDEPTHZKeywords(const Deck& deck) { - if (deck.hasKeyword() && - deck.hasKeyword() && - deck.hasKeyword() && - deck.hasKeyword()) - return true; - else - return false; - } - - bool EclipseGrid::hasDTOPSKeywords(const Deck& deck) { - if ((deck.hasKeyword() || deck.hasKeyword()) && - (deck.hasKeyword() || deck.hasKeyword()) && - (deck.hasKeyword() || deck.hasKeyword()) && - deck.hasKeyword()) - return true; - else - return false; - } - - void EclipseGrid::assertVectorSize(const std::vector& vector , size_t expectedSize , const std::string& vectorName) { - if (vector.size() != expectedSize) - throw std::invalid_argument("Wrong size for keyword: " + vectorName + ". Expected: " + std::to_string(expectedSize) + " got: " + std::to_string(vector.size())); - } - - - /* - The body of the for loop in this method looks slightly - peculiar. The situation is as follows: - - 1. The EclipseGrid class will assemble the necessary keywords - and create an ert ecl_grid instance. - - 2. The ecl_grid instance will export ZCORN, COORD and ACTNUM - data which will be used by the UnstructureGrid constructor - in opm-core. If the ecl_grid is created with ZCORN as an - input keyword that data is retained in the ecl_grid - structure, otherwise the ZCORN data is created based on the - internal cell geometries. - - 3. When constructing the UnstructuredGrid structure strict - numerical comparisons of ZCORN values are used to detect - cells in contact, if all the elements the elements in the - TOPS vector are specified[1] we will typically not get - bitwise equality between the bottom of one cell and the top - of the next. - - To remedy this we enforce bitwise equality with the - construction: - - if (std::abs(nextValue - TOPS[targetIndex]) < z_tolerance) - TOPS[targetIndex] = nextValue; - - [1]: This is of course assuming the intention is to construct a - fully connected space covering grid - if that is indeed - not the case the barriers must be thicker than 1e-6m to be - retained. - */ - - std::vector EclipseGrid::createTOPSVector(const std::array& dims, - const std::vector& DZ, const Deck& deck) - { - double z_tolerance = 1e-6; - size_t volume = dims[0] * dims[1] * dims[2]; - size_t area = dims[0] * dims[1]; - const auto& TOPSKeyWord = deck.getKeyword(); - std::vector TOPS = TOPSKeyWord.getSIDoubleData(); - - if (TOPS.size() >= area) { - size_t initialTOPSize = TOPS.size(); - TOPS.resize( volume ); - - for (size_t targetIndex = area; targetIndex < volume; targetIndex++) { - size_t sourceIndex = targetIndex - area; - double nextValue = TOPS[sourceIndex] + DZ[sourceIndex]; - - if (targetIndex >= initialTOPSize) - TOPS[targetIndex] = nextValue; - else { - if (std::abs(nextValue - TOPS[targetIndex]) < z_tolerance) - TOPS[targetIndex] = nextValue; - } - - } - } - - if (TOPS.size() != volume) - throw std::invalid_argument("TOPS size mismatch"); - - return TOPS; - } - -std::vector EclipseGrid::createDVector(const std::array& dims, std::size_t dim, const std::string& DKey, - const std::string& DVKey, const Deck& deck) - { - size_t volume = dims[0] * dims[1] * dims[2]; - size_t area = dims[0] * dims[1]; - std::vector D; - if (deck.hasKeyword(DKey)) { - D = deck.getKeyword( DKey ).getSIDoubleData(); - - - if (D.size() >= area && D.size() < volume) { - /* - Only the top layer is required; for layers below the - top layer the value from the layer above is used. - */ - size_t initialDSize = D.size(); - D.resize( volume ); - for (size_t targetIndex = initialDSize; targetIndex < volume; targetIndex++) { - size_t sourceIndex = targetIndex - area; - D[targetIndex] = D[sourceIndex]; - } - } - - if (D.size() != volume) - throw std::invalid_argument(DKey + " size mismatch"); - } else { - const auto& DVKeyWord = deck.getKeyword(DVKey); - const std::vector& DV = DVKeyWord.getSIDoubleData(); - if (DV.size() != static_cast(dims[dim])) - throw std::invalid_argument(DVKey + " size mismatch"); - D.resize( volume ); - scatterDim( dims , dim , DV , D ); - } - return D; - } - - - void EclipseGrid::scatterDim(const std::array& dims , size_t dim , const std::vector& DV , std::vector& D) { - int index[3]; - for (index[2] = 0; index[2] < dims[2]; index[2]++) { - for (index[1] = 0; index[1] < dims[1]; index[1]++) { - for (index[0] = 0; index[0] < dims[0]; index[0]++) { - size_t globalIndex = index[2] * dims[1] * dims[0] + index[1] * dims[0] + index[0]; - D[globalIndex] = DV[ index[dim] ]; - } - } - } - } - - bool EclipseGrid::equal(const EclipseGrid& other) const { - - //double reltol = 1.0e-6; - - if (m_coord.size() != other.m_coord.size()) - return false; - - if (m_zcorn.size() != other.m_zcorn.size()) - return false; - - if (m_mapaxes.size() != other.m_mapaxes.size()) - return false; - - if (m_actnum != other.m_actnum) - return false; - - if (m_coord != other.m_coord) - return false; - - if (m_zcorn != other.m_zcorn) - return false; - - if (m_mapaxes != other.m_mapaxes) - return false; - - bool status = (m_pinch.equal( other.m_pinch ) && (m_minpvMode == other.getMinpvMode())); - - if(m_minpvMode!=MinpvMode::ModeEnum::Inactive) { - status = status && (m_minpvVector == other.getMinpvVector()); - } - - return status; - } - - size_t EclipseGrid::getNumActive( ) const { - return m_nactive; - } - - bool EclipseGrid::allActive( ) const { - return (getNumActive() == getCartesianSize()); - } - - bool EclipseGrid::cellActive( size_t globalIndex ) const { - assertGlobalIndex( globalIndex ); - - return m_actnum[globalIndex]>0; - } - - bool EclipseGrid::cellActive( size_t i , size_t j , size_t k ) const { - assertIJK(i,j,k); - - size_t globalIndex = getGlobalIndex(i,j,k); - return this->cellActive(globalIndex); - } - - std::vector EclipseGrid::activeVolume() const { - std::vector active_volume( this->m_nactive ); - - // Compilers other than gcc do only accept signed integral types, no size_t. - #pragma omp parallel for schedule(static) - for (int active_index = 0; active_index < this->m_active_to_global.size(); active_index++) { - std::array X; - std::array Y; - std::array Z; - auto global_index = this->m_active_to_global[static_cast(active_index)]; - this->getCellCorners(global_index, X, Y, Z); - active_volume[static_cast(active_index)] = calculateCellVol(X, Y, Z); - } - - return active_volume; - } - - - double EclipseGrid::getCellVolume(size_t globalIndex) const { - assertGlobalIndex( globalIndex ); - std::array X; - std::array Y; - std::array Z; - this->getCellCorners(globalIndex, X, Y, Z ); - return calculateCellVol(X, Y, Z); - } - - double EclipseGrid::getCellVolume(size_t i , size_t j , size_t k) const { - this->assertIJK(i,j,k); - size_t globalIndex = getGlobalIndex(i,j,k); - return this->getCellVolume(globalIndex); - } - - double EclipseGrid::getCellThickness(size_t i , size_t j , size_t k) const { - assertIJK(i,j,k); - - const std::array dims = getNXYZ(); - size_t globalIndex = i + j*dims[0] + k*dims[0]*dims[1]; - - return getCellThickness(globalIndex); - } - - double EclipseGrid::getCellThickness(size_t globalIndex) const { - assertGlobalIndex( globalIndex ); - std::array X; - std::array Y; - std::array Z; - this->getCellCorners(globalIndex, X, Y, Z ); - - double z2 = (Z[4]+Z[5]+Z[6]+Z[7])/4.0; - double z1 = (Z[0]+Z[1]+Z[2]+Z[3])/4.0; - double dz = z2-z1; - return dz; - } - - - std::array EclipseGrid::getCellDims(size_t globalIndex) const { - assertGlobalIndex( globalIndex ); - std::array X; - std::array Y; - std::array Z; - this->getCellCorners(globalIndex, X, Y, Z ); - - // calculate dx - double x1 = (X[0]+X[2]+X[4]+X[6])/4.0; - double y1 = (Y[0]+Y[2]+Y[4]+Y[6])/4.0; - double x2 = (X[1]+X[3]+X[5]+X[7])/4.0; - double y2 = (Y[1]+Y[3]+Y[5]+Y[7])/4.0; - double dx = sqrt(pow((x2-x1), 2.0) + pow((y2-y1), 2.0) ); - - // calculate dy - x1 = (X[0]+X[1]+X[4]+X[5])/4.0; - y1 = (Y[0]+Y[1]+Y[4]+Y[5])/4.0; - x2 = (X[2]+X[3]+X[6]+X[7])/4.0; - y2 = (Y[2]+Y[3]+Y[6]+Y[7])/4.0; - double dy = sqrt(pow((x2-x1), 2.0) + pow((y2-y1), 2.0)); - - // calculate dz - - double z2 = (Z[4]+Z[5]+Z[6]+Z[7])/4.0; - double z1 = (Z[0]+Z[1]+Z[2]+Z[3])/4.0; - double dz = z2-z1; - - - return std::array {{dx, dy, dz}}; - } - - std::array EclipseGrid::getCellDims(size_t i , size_t j , size_t k) const { - assertIJK(i,j,k); - { - size_t globalIndex = getGlobalIndex( i,j,k ); - - return getCellDims(globalIndex); - } - } - - std::array EclipseGrid::getCellCenter(size_t globalIndex) const { - assertGlobalIndex( globalIndex ); - std::array X; - std::array Y; - std::array Z; - this->getCellCorners(globalIndex, X, Y, Z ); - return std::array { { std::accumulate(X.begin(), X.end(), 0.0) / 8.0, - std::accumulate(Y.begin(), Y.end(), 0.0) / 8.0, - std::accumulate(Z.begin(), Z.end(), 0.0) / 8.0 } }; - } - - - std::array EclipseGrid::getCellCenter(size_t i,size_t j, size_t k) const { - assertIJK(i,j,k); - - const std::array dims = getNXYZ(); - - size_t globalIndex = i + j*dims[0] + k*dims[0]*dims[1]; - - return getCellCenter(globalIndex); - } - - /* - This is the numbering of the corners in the cell. - - bottom j - 6---7 /|\ - | | | - 4---5 | - | - top o----------> i - 2---3 - | | - 0---1 - - */ - - std::array EclipseGrid::getCornerPos(size_t i,size_t j, size_t k, size_t corner_index) const { - assertIJK(i,j,k); - if (corner_index >= 8) - throw std::invalid_argument("Invalid corner position"); - { - const std::array dims = getNXYZ(); - - std::array X = {0.0}; - std::array Y = {0.0}; - std::array Z = {0.0}; - - std::array ijk; - - ijk[0] = i; - ijk[1] = j; - ijk[2] = k; - - getCellCorners(ijk, dims, X, Y, Z ); - - return std::array {{X[corner_index], Y[corner_index], Z[corner_index]}}; - } - } - - double EclipseGrid::getCellDepth(size_t globalIndex) const { - assertGlobalIndex( globalIndex ); - std::array X; - std::array Y; - std::array Z; - this->getCellCorners(globalIndex, X, Y, Z ); - - double z2 = (Z[4]+Z[5]+Z[6]+Z[7])/4.0; - double z1 = (Z[0]+Z[1]+Z[2]+Z[3])/4.0; - return (z1 + z2)/2.0; - } - - double EclipseGrid::getCellDepth(size_t i, size_t j, size_t k) const { - this->assertIJK(i,j,k); - size_t globalIndex = getGlobalIndex(i,j,k); - return this->getCellDepth(globalIndex); - } - - const std::vector& EclipseGrid::getACTNUM( ) const { - - return m_actnum; - } - - const std::vector& EclipseGrid::getMAPAXES( ) const { - - return m_mapaxes; - } - - const std::vector& EclipseGrid::getCOORD() const { - - return m_coord; - } - - size_t EclipseGrid::fixupZCORN() { - - ZcornMapper mapper( getNX(), getNY(), getNZ()); - - return mapper.fixupZCORN( m_zcorn ); - } - - const std::vector& EclipseGrid::getZCORN( ) const { - - return m_zcorn; - } - - void EclipseGrid::save(const std::string& filename, bool formatted, const Opm::NNC& nnc, const Opm::UnitSystem& units) const { - - Opm::UnitSystem::UnitType unitSystemType = units.getType(); - const auto length = ::Opm::UnitSystem::measure::length; - - const std::array dims = getNXYZ(); - - // Preparing vectors to be saved - - // create coord vector of floats with input units, converted from SI - std::vector coord_f; - coord_f.resize(m_coord.size()); - - for (size_t n=0; n< m_coord.size(); n++){ - coord_f[n] = static_cast(units.from_si(length, m_coord[n])); - } - - // create zcorn vector of floats with input units, converted from SI - std::vector zcorn_f; - zcorn_f.resize(m_zcorn.size()); - - for (size_t n=0; n< m_zcorn.size(); n++){ - zcorn_f[n] = static_cast(units.from_si(length, m_zcorn[n])); - } - - std::vector mapaxes_f; - - std::vector filehead(100,0); - filehead[0] = 3; // version number - filehead[1] = 2007; // release year - filehead[6] = 1; // corner point grid - - std::vector gridhead(100,0); - gridhead[0] = 1; // corner point grid - gridhead[1] = dims[0]; // nI - gridhead[2] = dims[1]; // nJ - gridhead[3] = dims[2]; // nK - gridhead[24] = 1; // corner point grid - - std::vector nnchead(10, 0); - std::vector nnc1; - std::vector nnc2; - - for (const NNCdata& n : nnc.data() ) { - nnc1.push_back(n.cell1 + 1); - nnc2.push_back(n.cell2 + 1); - } - - nnchead[0] = nnc1.size(); - - std::vector gridunits; - - switch (unitSystemType) { - case Opm::UnitSystem::UnitType::UNIT_TYPE_METRIC: - gridunits.push_back("METRES"); - break; - case Opm::UnitSystem::UnitType::UNIT_TYPE_FIELD: - gridunits.push_back("FEET"); - break; - case Opm::UnitSystem::UnitType::UNIT_TYPE_LAB: - gridunits.push_back("CM"); - break; - default: - OPM_THROW(std::runtime_error, "Unit system not supported when writing to EGRID file"); - break; - } - - gridunits.push_back(""); - - // map units is not dependent on deck units. A user may specify FIELD units for the model - // and metric units for the MAPAXES keyword (MAPUNITS) - - std::vector mapunits; - - if ((m_mapunits.size() > 0) && (m_mapaxes.size() > 0)) { - mapunits.push_back(m_mapunits); - } - - if (m_mapaxes.size() > 0){ - for (double dv : m_mapaxes){ - mapaxes_f.push_back(static_cast(dv)); - } - } - - std::vector endgrid = {}; - - // Writing vectors to egrid file - - Opm::EclIO::EclOutput egridfile(filename, formatted); - egridfile.write("FILEHEAD", filehead); - - if (mapunits.size() > 0) { - egridfile.write("MAPUNITS", mapunits); - } - - if (mapaxes_f.size() > 0){ - egridfile.write("MAPAXES", mapaxes_f); - } - - egridfile.write("GRIDUNIT", gridunits); - egridfile.write("GRIDHEAD", gridhead); - - egridfile.write("COORD", coord_f); - egridfile.write("ZCORN", zcorn_f); - - egridfile.write("ACTNUM", m_actnum); - egridfile.write("ENDGRID", endgrid); - - if (nnc1.size() > 0){ - egridfile.write("NNCHEAD", nnchead); - egridfile.write("NNC1", nnc1); - egridfile.write("NNC2", nnc2); - } - } - - const std::vector& EclipseGrid::getActiveMap() const { - - return m_active_to_global; - } - - void EclipseGrid::resetACTNUM() { - std::size_t global_size = this->getCartesianSize(); - this->m_actnum.assign(global_size, 1); - this->m_nactive = global_size; - - this->m_global_to_active.resize(global_size); - std::iota(this->m_global_to_active.begin(), this->m_global_to_active.end(), 0); - this->m_active_to_global = this->m_global_to_active; - } - - void EclipseGrid::resetACTNUM(const int* actnum) { - if (actnum == nullptr) - this->resetACTNUM(); - else { - auto global_size = this->getCartesianSize(); - this->m_global_to_active.clear(); - this->m_active_to_global.clear(); - this->m_actnum.resize(global_size); - this->m_nactive = 0; - - for (size_t n = 0; n < global_size; n++) { - this->m_actnum[n] = actnum[n]; - if (actnum[n] > 0) { - this->m_global_to_active.push_back(this->m_nactive); - this->m_active_to_global.push_back(n); - this->m_nactive++; - } else { - this->m_global_to_active.push_back(-1); - - } - } - } - } - - void EclipseGrid::resetACTNUM(const std::vector& actnum) { - if (actnum.size() != getCartesianSize()) - throw std::runtime_error("resetACTNUM(): actnum vector size differs from logical cartesian size of grid."); - - this->resetACTNUM(actnum.data()); - } - - ZcornMapper EclipseGrid::zcornMapper() const { - return ZcornMapper( getNX() , getNY(), getNZ() ); - } - - ZcornMapper::ZcornMapper(size_t nx , size_t ny, size_t nz) - : dims( {{nx,ny,nz}} ), - stride( {{2 , 4*nx, 8*nx*ny}} ), - cell_shift( {{0 , 1 , 2*nx , 2*nx + 1 , 4*nx*ny , 4*nx*ny + 1, 4*nx*ny + 2*nx , 4*nx*ny + 2*nx + 1 }}) - { - } - - - /* lower layer: upper layer (higher value of z - i.e. lower down in resrvoir). - - 2---3 6---7 - | | | | - 0---1 4---5 - */ - - size_t ZcornMapper::index(size_t i, size_t j, size_t k, int c) const { - if ((i >= dims[0]) || (j >= dims[1]) || (k >= dims[2]) || (c < 0) || (c >= 8)) - throw std::invalid_argument("Invalid cell argument"); - - return i*stride[0] + j*stride[1] + k*stride[2] + cell_shift[c]; - } - - size_t ZcornMapper::size() const { - return dims[0] * dims[1] * dims[2] * 8; - } - - size_t ZcornMapper::index(size_t g, int c) const { - int k = g / (dims[0] * dims[1]); - g -= k * dims[0] * dims[1]; - - int j = g / dims[0]; - g -= j * dims[0]; - - int i = g; - - return index(i,j,k,c); - } - - bool ZcornMapper::validZCORN( const std::vector& zcorn) const { - int sign = zcorn[ this->index(0,0,0,0) ] <= zcorn[this->index(0,0, this->dims[2] - 1,4)] ? 1 : -1; - for (size_t j=0; j < this->dims[1]; j++) - for (size_t i=0; i < this->dims[0]; i++) - for (size_t c=0; c < 4; c++) - for (size_t k=0; k < this->dims[2]; k++) { - /* Between cells */ - if (k > 0) { - size_t index1 = this->index(i,j,k-1,c+4); - size_t index2 = this->index(i,j,k,c); - if ((zcorn[index2] - zcorn[index1]) * sign < 0) - return false; - } - - /* In cell */ - { - size_t index1 = this->index(i,j,k,c); - size_t index2 = this->index(i,j,k,c+4); - if ((zcorn[index2] - zcorn[index1]) * sign < 0) - return false; - } - } - - return true; - } - - - size_t ZcornMapper::fixupZCORN( std::vector& zcorn) { - int sign = zcorn[ this->index(0,0,0,0) ] <= zcorn[this->index(0,0, this->dims[2] - 1,4)] ? 1 : -1; - size_t cells_adjusted = 0; - - for (size_t k=0; k < this->dims[2]; k++) - for (size_t j=0; j < this->dims[1]; j++) - for (size_t i=0; i < this->dims[0]; i++) - for (size_t c=0; c < 4; c++) { - /* Cell to cell */ - if (k > 0) { - size_t index1 = this->index(i,j,k-1,c+4); - size_t index2 = this->index(i,j,k,c); - - if ((zcorn[index2] - zcorn[index1]) * sign < 0 ) { - zcorn[index2] = zcorn[index1]; - cells_adjusted++; - } - } - - /* Cell internal */ - { - size_t index1 = this->index(i,j,k,c); - size_t index2 = this->index(i,j,k,c+4); - - if ((zcorn[index2] - zcorn[index1]) * sign < 0 ) { - zcorn[index2] = zcorn[index1]; - cells_adjusted++; - } - } - } - return cells_adjusted; - } - - CoordMapper::CoordMapper(size_t nx_, size_t ny_) : - nx(nx_), - ny(ny_) - { - } - - size_t CoordMapper::size() const { - return (this->nx + 1) * (this->ny + 1) * 6; - } - - - size_t CoordMapper::index(size_t i, size_t j, size_t dim, size_t layer) const { - if (i > this->nx) - throw std::invalid_argument("Out of range"); - - if (j > this->ny) - throw std::invalid_argument("Out of range"); - - if (dim > 2) - throw std::invalid_argument("Out of range"); - - if (layer > 1) - throw std::invalid_argument("Out of range"); - - return 6*( i + j*(this->nx + 1) ) + layer * 3 + dim; - } -} - - - diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/FaceDir.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/FaceDir.cpp deleted file mode 100644 index 25e7e2ac50..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/FaceDir.cpp +++ /dev/null @@ -1,77 +0,0 @@ -/* - Copyright 2014 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include - -#include - - - -namespace Opm { - - namespace FaceDir { - - DirEnum FromString(const std::string& stringValue) { - if ((stringValue == "X") || (stringValue == "I") || (stringValue == "X+") || (stringValue == "I+")) - return XPlus; - if ((stringValue == "X-") || (stringValue == "I-")) - return XMinus; - - if ((stringValue == "Y") || (stringValue == "J") || (stringValue == "Y+") || (stringValue == "J+")) - return YPlus; - if ((stringValue == "Y-") || (stringValue == "J-")) - return YMinus; - - if ((stringValue == "Z") || (stringValue == "K") || (stringValue == "Z+") || (stringValue == "K+")) - return ZPlus; - if ((stringValue == "Z-") || (stringValue == "K-")) - return ZMinus; - - throw std::invalid_argument("The string value " + stringValue + " could not be converted to a FaceDir enum value"); - } - - - int FromMULTREGTString(const std::string& stringValue) { - if (stringValue == "X") - return XPlus + XMinus; - - if (stringValue == "Y") - return YPlus + YMinus; - - if (stringValue == "Z") - return ZPlus + ZMinus; - - if (stringValue == "XY") - return XPlus + YPlus + XMinus + YMinus; - - if (stringValue == "XZ") - return XPlus + ZPlus + XMinus + ZMinus; - - if (stringValue == "YZ") - return YPlus + ZPlus + YMinus + ZMinus; - - if (stringValue == "XYZ") - return XPlus + YPlus + ZPlus + XMinus + YMinus + ZMinus; - - throw std::invalid_argument("The string " + stringValue + " is not a valid MULTREGT direction value"); - } - - - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/Fault.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/Fault.cpp deleted file mode 100644 index dd6d2172ab..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/Fault.cpp +++ /dev/null @@ -1,80 +0,0 @@ -/* - Copyright 2014 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include - -namespace Opm { - - Fault::Fault(const std::string& faultName) : - m_name( faultName ), - m_transMult( 1 ) - { - } - - Fault Fault::serializeObject() - { - Fault result; - result.m_name = "test"; - result.m_transMult = 1.0; - result.m_faceList = {FaultFace::serializeObject()}; - - return result; - } - - - const std::string& Fault::getName() const { - return m_name; - } - - double Fault::getTransMult() const { - return m_transMult; - } - - void Fault::setTransMult(double transMult) { - m_transMult = transMult; - } - - - void Fault::addFace( FaultFace face ) { - m_faceList.push_back( std::move( face ) ); - } - - std::vector< FaultFace >::const_iterator Fault::begin() const { - return m_faceList.begin(); - } - - - std::vector< FaultFace >::const_iterator Fault::end() const { - return m_faceList.end(); - } - - bool Fault::operator==( const Fault& rhs ) const { - return this->m_name == rhs.m_name - && this->m_transMult == rhs.m_transMult - && this->m_faceList.size() == rhs.m_faceList.size() - && std::equal( this->m_faceList.begin(), - this->m_faceList.end(), - rhs.m_faceList.begin() ); - } - - bool Fault::operator!=( const Fault& rhs ) const { - return !( *this == rhs ); - } - -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/FaultCollection.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/FaultCollection.cpp deleted file mode 100644 index 72efc9c557..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/FaultCollection.cpp +++ /dev/null @@ -1,127 +0,0 @@ -/* - Copyright 2014 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - - -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -namespace Opm { - - - FaultCollection::FaultCollection() - {} - - FaultCollection::FaultCollection(const GRIDSection& gridSection, - const GridDims& grid) { - const auto& faultKeywords = gridSection.getKeywordList(); - - for (auto keyword_iter = faultKeywords.begin(); keyword_iter != faultKeywords.end(); ++keyword_iter) { - const auto& faultsKeyword = *keyword_iter; - for (auto iter = faultsKeyword->begin(); iter != faultsKeyword->end(); ++iter) { - const auto& faultRecord = *iter; - const std::string& faultName = faultRecord.getItem(0).get< std::string >(0); - - addFaultFaces(grid, faultRecord, faultName); - } - } - } - - FaultCollection FaultCollection::serializeObject() - { - FaultCollection result; - result.m_faults.insert({"test", Fault::serializeObject()}); - - return result; - } - - void FaultCollection::addFaultFaces(const GridDims& grid, - const DeckRecord& faultRecord, - const std::string& faultName) - { - int I1 = faultRecord.getItem(1).get(0) - 1; - int I2 = faultRecord.getItem(2).get(0) - 1; - int J1 = faultRecord.getItem(3).get(0) - 1; - int J2 = faultRecord.getItem(4).get(0) - 1; - int K1 = faultRecord.getItem(5).get(0) - 1; - int K2 = faultRecord.getItem(6).get(0) - 1; - FaceDir::DirEnum faceDir = FaceDir::FromString(faultRecord.getItem(7).get(0)); - FaultFace face { grid.getNX(), grid.getNY(), grid.getNZ(), - size_t(I1), size_t(I2), - size_t(J1), size_t(J2), - size_t(K1), size_t(K2), - faceDir }; - - if (!hasFault(faultName)) - addFault(faultName); - - getFault( faultName ).addFace( face ); - } - - size_t FaultCollection::size() const { - return m_faults.size(); - } - - bool FaultCollection::hasFault(const std::string& faultName) const { - return m_faults.count( faultName ) > 0; - } - - const Fault& FaultCollection::getFault(const std::string& faultName) const { - return m_faults.get( faultName ); - } - - Fault& FaultCollection::getFault(const std::string& faultName) { - return m_faults.get( faultName ); - } - - Fault& FaultCollection::getFault(size_t faultIndex) { - return m_faults.iget( faultIndex ); - } - - const Fault& FaultCollection::getFault(size_t faultIndex) const { - return m_faults.iget( faultIndex ); - } - - void FaultCollection::addFault(const std::string& faultName) { - Fault fault(faultName); - m_faults.insert(std::make_pair(fault.getName() , fault)); - } - - void FaultCollection::setTransMult(const std::string& faultName , double transMult) { - Fault& fault = getFault( faultName ); - fault.setTransMult( transMult ); - } - - bool FaultCollection::operator==(const FaultCollection& data) const { - return this->m_faults == data.m_faults; - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/FaultFace.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/FaultFace.cpp deleted file mode 100644 index d0bd07486c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/FaultFace.cpp +++ /dev/null @@ -1,100 +0,0 @@ -/* - Copyright 2014 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ -#include - -#include - -namespace Opm { - - FaultFace::FaultFace(size_t nx , size_t ny , size_t nz, - size_t I1 , size_t I2, - size_t J1 , size_t J2, - size_t K1 , size_t K2, - FaceDir::DirEnum faceDir) - : m_faceDir( faceDir ) - { - checkCoord(nx , I1,I2); - checkCoord(ny , J1,J2); - checkCoord(nz , K1,K2); - - - if ((faceDir == FaceDir::XPlus) || (faceDir == FaceDir::XMinus)) - if (I1 != I2) - throw std::invalid_argument("When the face is in X direction we must have I1 == I2"); - - if ((faceDir == FaceDir::YPlus) || (faceDir == FaceDir::YMinus)) - if (J1 != J2) - throw std::invalid_argument("When the face is in Y direction we must have J1 == J2"); - - if ((faceDir == FaceDir::ZPlus) || (faceDir == FaceDir::ZMinus)) - if (K1 != K2) - throw std::invalid_argument("When the face is in Z direction we must have K1 == K2"); - - - for (size_t k=K1; k <= K2; k++) - for (size_t j=J1; j <= J2; j++) - for (size_t i=I1; i <= I2; i++) { - size_t globalIndex = i + j*nx + k*nx*ny; - m_indexList.push_back( globalIndex ); - } - } - - FaultFace FaultFace::serializeObject() - { - FaultFace result; - result.m_faceDir = FaceDir::YPlus; - result.m_indexList = {1,2,3,4,5,6}; - - return result; - } - - void FaultFace::checkCoord(size_t dim , size_t l1 , size_t l2) { - if (l1 > l2) - throw std::invalid_argument("Invalid coordinates"); - - if (l2 >= dim) - throw std::invalid_argument("Invalid coordinates"); - } - - - std::vector::const_iterator FaultFace::begin() const { - return m_indexList.begin(); - } - - std::vector::const_iterator FaultFace::end() const { - return m_indexList.end(); - } - - - FaceDir::DirEnum FaultFace::getDir() const { - return m_faceDir; - } - - bool FaultFace::operator==( const FaultFace& rhs ) const { - return this->m_faceDir == rhs.m_faceDir - && this->m_indexList.size() == rhs.m_indexList.size() - && std::equal( this->m_indexList.begin(), - this->m_indexList.end(), - rhs.m_indexList.begin() ); - } - - bool FaultFace::operator!=( const FaultFace& rhs ) const { - return !( *this == rhs ); - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/FieldProps.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/FieldProps.cpp deleted file mode 100644 index e8fd4afd73..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/FieldProps.cpp +++ /dev/null @@ -1,1159 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify it under the terms - of the GNU General Public License as published by the Free Software - Foundation, either version 3 of the License, or (at your option) any later - version. - - OPM is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR - A PARTICULAR PURPOSE. See the GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along with - OPM. If not, see . -*/ -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -#include "FieldProps.hpp" -#include "Operate.hpp" - - -namespace Opm { - -namespace { - -namespace keywords { - - -/* - If a keyword is not mentioned here the getSIValue() function will silently - assume the keyword is dimensionless. -*/ -static const std::map unit_string = {{"PERMX", "Permeability"}, - {"PERMY", "Permeability"}, - {"PERMZ", "Permeability"}, - {"PORV", "ReservoirVolume"}, - {"SPOLY", "Density"}, - {"TRANX", "Transmissibility"}, - {"TRANY", "Transmissibility"}, - {"TRANZ", "Transmissibility"}, - {"NTG", "1"}, - {"RS", "GasDissolutionFactor"}, - {"RV", "OilDissolutionFactor"}, - {"TEMPI", "Temperature"}, - {"THCROCK", "Energy/AnsoluteTemperature*Length*Time"}, - {"THCOIL", "Energy/AnsoluteTemperature*Length*Time"}, - {"THCGAS", "Energy/AnsoluteTemperature*Length*Time"}, - {"THCWATER", "Energy/AnsoluteTemperature*Length*Time"}}; - -static const std::set multiplier_keywords = {"MULTX", "MULTX-", "MULTY-", "MULTY", "MULTZ", "MULTZ-"}; - -static const std::set oper_keywords = {"ADD", "EQUALS", "MAXVALUE", "MINVALUE", "MULTIPLY", "OPERATE"}; -static const std::set region_oper_keywords = {"ADDREG", "EQUALREG", "OPERATER"}; -static const std::set box_keywords = {"BOX", "ENDBOX"}; -static const std::map double_scalar_init = {{"NTG", 1}, - {"TRANX", 1}, // The default scalar init for TRAN is a hack to support - {"TRANY", 1}, // TRAN modification in the deck. downstream implementation - {"TRANZ", 1}, // in ecltransmissibility.hh - quite broken. - {"MULTPV", 1}, - {"MULTX", 1}, - {"MULTX-", 1}, - {"MULTY", 1}, - {"MULTY-", 1}, - {"MULTZ", 1}, - {"MULTZ-", 1}}; - -static const std::map int_scalar_init = {{"SATNUM", 1}, - {"ENDNUM", 1}, - {"EQLNUM", 1}, - {"IMBNUM", 1}, - {"ISOLNUM",1}, - {"FIPNUM", 1}, // All FIPxxx keywords should (probably) be added with init==1 - {"EQLNUM", 1}, - {"PVTNUM", 1}, - {"ACTNUM", 1}}; - - -/* -bool isFipxxx< int >(const std::string& keyword) { - // FIPxxxx can be any keyword, e.g. FIPREG or FIPXYZ that has the pattern "FIP.+" - // However, it can not be FIPOWG as that is an actual keyword. - if (keyword.size() < 4 || keyword == "FIPOWG") { - return false; - } - return keyword[0] == 'F' && keyword[1] == 'I' && keyword[2] == 'P'; -} -*/ - -namespace GRID { -static const std::set double_keywords = {"MULTPV", "NTG", "PORO", "PERMX", "PERMY", "PERMZ", "THCONR", "MULTX", "MULTX-", "MULTY-", "MULTY", "MULTZ", "MULTZ-", - "THCONSF", "THCROCK", "THCOIL", "THCGAS", "THCWATER"}; // The THxxxx keywords are related to thermal properties - they are all E300 keywords. -static const std::set int_keywords = {"ACTNUM", "FLUXNUM", "ISOLNUM", "MULTNUM", "OPERNUM", "ROCKNUM"}; -static const std::set top_keywords = {"PORO", "PERMX", "PERMY", "PERMZ"}; -} - -namespace EDIT { -static const std::set double_keywords = {"MULTPV", "PORV","MULTX", "MULTX-", "MULTY-", "MULTY", "MULTZ", "MULTZ-", "TRANX", "TRANY", "TRANZ"}; -static const std::set int_keywords = {}; -} - -namespace PROPS { -static const std::set double_keywords = {"SWATINIT"}; -static const std::set int_keywords = {}; - -#define dirfunc(base) base, base "X", base "X-", base "Y", base "Y-", base "Z", base "Z-" - -static const std::set satfunc = {"SWLPC", "ISWLPC", "SGLPC", "ISGLPC", - dirfunc("SGL"), - dirfunc("ISGL"), - dirfunc("SGU"), - dirfunc("ISGU"), - dirfunc("SWL"), - dirfunc("ISWL"), - dirfunc("SWU"), - dirfunc("ISWU"), - dirfunc("SGCR"), - dirfunc("ISGCR"), - dirfunc("SOWCR"), - dirfunc("ISOWCR"), - dirfunc("SOGCR"), - dirfunc("ISOGCR"), - dirfunc("SWCR"), - dirfunc("ISWCR"), - dirfunc("PCW"), - dirfunc("IPCW"), - dirfunc("PCG"), - dirfunc("IPCG"), - dirfunc("KRW"), - dirfunc("IKRW"), - dirfunc("KRWR"), - dirfunc("IKRWR"), - dirfunc("KRO"), - dirfunc("IKRO"), - dirfunc("KRORW"), - dirfunc("IKRORW"), - dirfunc("KRORG"), - dirfunc("IKRORG"), - dirfunc("KRG"), - dirfunc("IKRG"), - dirfunc("KRGR"), - dirfunc("IKRGR")}; - -static const std::map sogcr_shift = {{"SOGCR", "SWL"}, - {"SOGCRX", "SWLX"}, - {"SOGCRX-", "SWLX-"}, - {"SOGCRY", "SWLY"}, - {"SOGCRY-", "SWLY-"}, - {"SOGCRZ", "SWLZ"}, - {"SOGCRZ-", "SWLZ-"}, - {"ISOGCR", "ISWL"}, - {"ISOGCRX", "ISWLX"}, - {"ISOGCRX-", "ISWLX-"}, - {"ISOGCRY", "ISWLY"}, - {"ISOGCRY-", "ISWLY-"}, - {"ISOGCRZ", "ISWLZ"}, - {"ISOGCRZ-", "ISWLZ-"}}; - -} - -namespace REGIONS { -static const std::set int_keywords = {"ENDNUM", "EQLNUM", "FIPNUM", "IMBNUM", "MISCNUM", "OPERNUM", "PVTNUM", "SATNUM", "LWSLTNUM", "ROCKNUM"}; -} - -namespace SOLUTION { -static const std::set double_keywords = {"PRESSURE", "SPOLY", "SPOLYMW", "SSOL", "SWAT", "SGAS", "TEMPI", "RS", "RV"}; -static const std::set int_keywords = {}; -} - -namespace SCHEDULE { -static const std::set int_keywords = {"ROCKNUM"}; -static const std::set double_keywords = {}; -} -} - -/* - * The EQUALREG, MULTREG, COPYREG, ... keywords are used to manipulate - * vectors based on region values; for instance the statement - * - * EQUALREG - * PORO 0.25 3 / -- Region array not specified - * PERMX 100 3 F / - * / - * - * will set the PORO field to 0.25 for all cells in region 3 and the PERMX - * value to 100 mD for the same cells. The fourth optional argument to the - * EQUALREG keyword is used to indicate which REGION array should be used - * for the selection. - * - * If the REGION array is not indicated (as in the PORO case) above, the - * default region to use in the xxxREG keywords depends on the GRIDOPTS - * keyword: - * - * 1. If GRIDOPTS is present, and the NRMULT item is greater than zero, - * the xxxREG keywords will default to use the MULTNUM region. - * - * 2. If the GRIDOPTS keyword is not present - or the NRMULT item equals - * zero, the xxxREG keywords will default to use the FLUXNUM keyword. - * - * This quite weird behaviour comes from reading the GRIDOPTS and MULTNUM - * documentation, and practical experience with ECLIPSE - * simulations. Ufortunately the documentation of the xxxREG keywords does - * not confirm this. - */ -std::string default_region_keyword(const Deck& deck) { - if (deck.hasKeyword("GRIDOPTS")) { - const auto& gridOpts = deck.getKeyword("GRIDOPTS"); - const auto& record = gridOpts.getRecord(0); - const auto& nrmult_item = record.getItem("NRMULT"); - - if (nrmult_item.get(0) > 0) - return "MULTNUM"; // GRIDOPTS and positive NRMULT - } - return "FLUXNUM"; -} - -template -void verify_deck_data(const DeckKeyword& keyword, const std::vector& deck_data, const Box& box) { - if (box.size() != deck_data.size()) { - const auto& location = keyword.location(); - std::string msg = "Fundamental error with keyword: " + keyword.name() + - " at: " + location.filename + ", line: " + std::to_string(location.lineno) + - " got " + std::to_string(deck_data.size()) + " elements - expected : " + std::to_string(box.size()); - throw std::invalid_argument(msg); - } -} - - -template -void assign_deck(const DeckKeyword& keyword, FieldProps::FieldData& field_data, const std::vector& deck_data, const std::vector& deck_status, const Box& box) { - verify_deck_data(keyword, deck_data, box); - for (const auto& cell_index : box.index_list()) { - auto active_index = cell_index.active_index; - auto data_index = cell_index.data_index; - - if (value::has_value(deck_status[data_index])) { - if (deck_status[data_index] == value::status::deck_value || field_data.value_status[active_index] == value::status::uninitialized) { - field_data.data[active_index] = deck_data[data_index]; - field_data.value_status[active_index] = deck_status[data_index]; - } - } - } -} - - -template -void multiply_deck(const DeckKeyword& keyword, FieldProps::FieldData& field_data, const std::vector& deck_data, const std::vector& deck_status, const Box& box) { - verify_deck_data(keyword, deck_data, box); - for (const auto& cell_index : box.index_list()) { - auto active_index = cell_index.active_index; - auto data_index = cell_index.data_index; - - if (value::has_value(deck_status[data_index]) && value::has_value(field_data.value_status[active_index])) { - field_data.data[active_index] *= deck_data[data_index]; - field_data.value_status[active_index] = deck_status[data_index]; - } - } -} - - -template -void distribute_toplayer(const EclipseGrid& grid, FieldProps::FieldData& field_data, const std::vector& deck_data, const Box& box) { - const std::size_t layer_size = grid.getNX() * grid.getNY(); - FieldProps::FieldData toplayer(grid.getNX() * grid.getNY()); - for (const auto& cell_index : box.index_list()) { - if (cell_index.global_index < layer_size) { - toplayer.data[cell_index.global_index] = deck_data[cell_index.data_index]; - toplayer.value_status[cell_index.global_index] = value::status::deck_value; - } - } - - for (std::size_t active_index = 0; active_index < field_data.size(); active_index++) { - if (field_data.value_status[active_index] == value::status::uninitialized) { - std::size_t global_index = grid.getGlobalIndex(active_index); - const auto ijk = grid.getIJK(global_index); - std::size_t layer_index = ijk[0] + ijk[1] * grid.getNX(); - if (toplayer.value_status[layer_index] == value::status::deck_value) { - field_data.data[active_index] = toplayer.data[layer_index]; - field_data.value_status[active_index] = value::status::valid_default; - } - } - } -} - - -template -void assign_scalar(FieldProps::FieldData& field_data, T value, const std::vector& index_list) { - for (const auto& cell_index : index_list) { - field_data.data[cell_index.active_index] = value; - field_data.value_status[cell_index.active_index] = value::status::deck_value; - } -} - -template -void multiply_scalar(FieldProps::FieldData& field_data, T value, const std::vector& index_list) { - for (const auto& cell_index : index_list) { - if (value::has_value(field_data.value_status[cell_index.active_index])) - field_data.data[cell_index.active_index] *= value; - } -} - -template -void add_scalar(FieldProps::FieldData& field_data, T value, const std::vector& index_list) { - for (const auto& cell_index : index_list) { - if (value::has_value(field_data.value_status[cell_index.active_index])) - field_data.data[cell_index.active_index] += value; - } -} - -template -void min_value(FieldProps::FieldData& field_data, T min_value, const std::vector& index_list) { - for (const auto& cell_index : index_list) { - if (value::has_value(field_data.value_status[cell_index.active_index])) { - T value = field_data.data[cell_index.active_index]; - field_data.data[cell_index.active_index] = std::max(value, min_value); - } - } -} - -template -void max_value(FieldProps::FieldData& field_data, T max_value, const std::vector& index_list) { - for (const auto& cell_index : index_list) { - if (value::has_value(field_data.value_status[cell_index.active_index])) { - T value = field_data.data[cell_index.active_index]; - field_data.data[cell_index.active_index] = std::min(value, max_value); - } - } -} - -std::string make_region_name(const std::string& deck_value) { - if (deck_value == "O") - return "OPERNUM"; - - if (deck_value == "F") - return "FLUXNUM"; - - if (deck_value == "M") - return "MULTNUM"; - - throw std::invalid_argument("The input string: " + deck_value + " was invalid. Expected: O/F/M"); -} - -FieldProps::ScalarOperation fromString(const std::string& keyword) { - if (keyword == ParserKeywords::ADD::keywordName || keyword == ParserKeywords::ADDREG::keywordName) - return FieldProps::ScalarOperation::ADD; - - if (keyword == ParserKeywords::EQUALS::keywordName || keyword == ParserKeywords::EQUALREG::keywordName) - return FieldProps::ScalarOperation::EQUAL; - - if (keyword == ParserKeywords::MULTIPLY::keywordName || keyword == ParserKeywords::MULTIREG::keywordName) - return FieldProps::ScalarOperation::MUL; - - if (keyword == ParserKeywords::MINVALUE::keywordName) - return FieldProps::ScalarOperation::MIN; - - if (keyword == ParserKeywords::MAXVALUE::keywordName) - return FieldProps::ScalarOperation::MAX; - - throw std::invalid_argument("Keyword operation not recognized"); -} - - -void handle_box_keyword(const DeckKeyword& deckKeyword, Box& box) { - if (deckKeyword.name() == ParserKeywords::BOX::keywordName) { - const auto& record = deckKeyword.getRecord(0); - box.update(record); - } else - box.reset(); -} - - -std::vector extract_cell_volume(const EclipseGrid& grid) { - return grid.activeVolume(); -} - -std::vector extract_cell_depth(const EclipseGrid& grid) { - std::vector cell_depth(grid.getNumActive()); - for (std::size_t active_index = 0; active_index < grid.getNumActive(); active_index++) - cell_depth[active_index] = grid.getCellDepth( grid.getGlobalIndex(active_index)); - return cell_depth; -} - -} - - - -FieldProps::FieldProps(const Deck& deck, const Phases& phases, const EclipseGrid& grid, const TableManager& tables_arg) : - active_size(grid.getNumActive()), - global_size(grid.getCartesianSize()), - unit_system(deck.getActiveUnitSystem()), - nx(grid.getNX()), - ny(grid.getNY()), - nz(grid.getNZ()), - m_phases(phases), - m_actnum(grid.getACTNUM()), - cell_volume(extract_cell_volume(grid)), - cell_depth(extract_cell_depth(grid)), - m_default_region(default_region_keyword(deck)), - grid_ptr(&grid), - tables(tables_arg) -{ - if (deck.hasKeyword()) { - const DeckKeyword& multregpKeyword = deck.getKeyword("MULTREGP"); - for (const auto& record : multregpKeyword) { - int region_value = record.getItem("REGION").get(0); - if (region_value <= 0) - continue; - - std::string region_name = make_region_name( record.getItem("REGION_TYPE").get(0) ); - double multiplier = record.getItem("MULTIPLIER").get(0); - auto iter = std::find_if(this->multregp.begin(), this->multregp.end(), [region_value](const MultregpRecord& mregp) { return mregp.region_value == region_value; }); - /* - There is some weirdness if the same region value is entered in several records, - then only the last applies. - */ - if (iter != this->multregp.end()) { - iter->region_name = region_name; - iter->multiplier = multiplier; - } else - this->multregp.emplace_back( region_value, multiplier, region_name ); - } - } - - - if (DeckSection::hasGRID(deck)) - this->scanGRIDSection(GRIDSection(deck)); - - if (DeckSection::hasEDIT(deck)) - this->scanEDITSection(EDITSection(deck)); - - if (DeckSection::hasREGIONS(deck)) - this->scanREGIONSSection(REGIONSSection(deck)); - - if (DeckSection::hasPROPS(deck)) - this->scanPROPSSection(PROPSSection(deck)); - - if (DeckSection::hasSOLUTION(deck)) - this->scanSOLUTIONSection(SOLUTIONSection(deck)); -} - - - -void FieldProps::reset_actnum(const std::vector& new_actnum) { - if (this->global_size != new_actnum.size()) - throw std::logic_error("reset_actnum() must be called with the same number of global cells"); - - if (new_actnum == this->m_actnum) - return; - - std::vector active_map(this->active_size, true); - std::size_t active_index = 0; - std::size_t new_active_size = 0; - for (std::size_t g = 0; g < this->m_actnum.size(); g++) { - if (this->m_actnum[g] != 0) { - if (new_actnum[g] == 0) - active_map[active_index] = false; - else - new_active_size += 1; - - active_index += 1; - } else { - if (new_actnum[g] != 0) - throw std::logic_error("It is not possible to activate cells"); - } - } - - for (auto& data : this->double_data) - data.second.compress(active_map); - - for (auto& data : this->int_data) - data.second.compress(active_map); - - FieldProps::compress(this->cell_volume, active_map); - FieldProps::compress(this->cell_depth, active_map); - - this->m_actnum = std::move(new_actnum); - this->active_size = new_active_size; -} - - -void FieldProps::distribute_toplayer(FieldProps::FieldData& field_data, const std::vector& deck_data, const Box& box) { - const std::size_t layer_size = this->nx * this->ny; - FieldProps::FieldData toplayer(layer_size); - for (const auto& cell_index : box.index_list()) { - if (cell_index.global_index < layer_size) { - toplayer.data[cell_index.global_index] = deck_data[cell_index.data_index]; - toplayer.value_status[cell_index.global_index] = value::status::deck_value; - } - } - - std::size_t active_index = 0; - for (std::size_t k = 0; k < this->nz; k++) { - for (std::size_t j = 0; j < this->ny; j++) { - for (std::size_t i = 0; i < this->nx; i++) { - std::size_t g = i + j*this->nx + k*this->nx*this->ny; - if (this->m_actnum[g]) { - if (field_data.value_status[active_index] == value::status::uninitialized) { - std::size_t layer_index = i + j*this->nx; - if (toplayer.value_status[layer_index] == value::status::deck_value) { - field_data.data[active_index] = toplayer.data[layer_index]; - field_data.value_status[active_index] = value::status::valid_default; - } - } - active_index += 1; - } - } - } - } -} - - -template <> -bool FieldProps::supported(const std::string& keyword) { - if (keywords::GRID::double_keywords.count(keyword) != 0) - return true; - - if (keywords::EDIT::double_keywords.count(keyword) != 0) - return true; - - if (keywords::PROPS::double_keywords.count(keyword) != 0) - return true; - - if (keywords::PROPS::satfunc.count(keyword) != 0) - return true; - - if (keywords::SOLUTION::double_keywords.count(keyword) != 0) - return true; - - return false; -} - -template <> -bool FieldProps::supported(const std::string& keyword) { - if (keywords::REGIONS::int_keywords.count(keyword) != 0) - return true; - - if (keywords::GRID::int_keywords.count(keyword) != 0) - return true; - - if (keywords::SCHEDULE::int_keywords.count(keyword) != 0) - return true; - - return false; -} - -template <> -FieldProps::FieldData& FieldProps::init_get(const std::string& keyword) { - auto iter = this->double_data.find(keyword); - if (iter != this->double_data.end()) - return iter->second; - - this->double_data[keyword] = FieldData(this->active_size); - auto init_iter = keywords::double_scalar_init.find(keyword); - if (init_iter != keywords::double_scalar_init.end()) - this->double_data[keyword].default_assign(init_iter->second); - - if (keyword == ParserKeywords::PORV::keywordName) - this->init_porv(this->double_data[keyword]); - - if (keyword == ParserKeywords::TEMPI::keywordName) - this->init_tempi(this->double_data[keyword]); - - if (keywords::PROPS::satfunc.count(keyword) == 1) { - this->init_satfunc(keyword, this->double_data[keyword]); - - if (this->tables.hasTables("SGOF")) { - const auto shift_iter = keywords::PROPS::sogcr_shift.find(keyword); - if (shift_iter != keywords::PROPS::sogcr_shift.end()) - this->subtract_swl(this->double_data[keyword], shift_iter->second); - } - } - - return this->double_data[keyword]; -} - - - -template <> -FieldProps::FieldData& FieldProps::init_get(const std::string& keyword) { - auto iter = this->int_data.find(keyword); - if (iter != this->int_data.end()) - return iter->second; - - this->int_data[keyword] = FieldData(this->active_size); - auto init_iter = keywords::int_scalar_init.find(keyword); - if (init_iter != keywords::int_scalar_init.end()) - this->int_data[keyword].default_assign(init_iter->second); - - return this->int_data[keyword]; -} - -std::vector FieldProps::region_index( const std::string& region_name, int region_value ) { - const auto& region = this->init_get(region_name); - if (!region.valid()) - throw std::invalid_argument("Trying to work with invalid region: " + region_name); - - std::vector index_list; - std::size_t active_index = 0; - const auto& region_data = region.data; - for (std::size_t g = 0; g < this->m_actnum.size(); g++) { - if (this->m_actnum[g] != 0) { - if (region_data[active_index] == region_value) - index_list.emplace_back( g, active_index, g ); - active_index += 1; - } - } - return index_list; -} - -std::vector FieldProps::region_index( const DeckItem& region_item, int region_value ) { - std::string region_name = region_item.defaultApplied(0) ? this->m_default_region : make_region_name(region_item.get(0)); - return this->region_index(region_name, region_value); -} - - -template <> -bool FieldProps::has(const std::string& keyword) const { - return (this->double_data.count(keyword) != 0); -} - -template <> -bool FieldProps::has(const std::string& keyword) const { - return (this->int_data.count(keyword) != 0); -} - - -/* - The ACTNUM and PORV keywords are special cased with quite extensive - postprocessing, and should be access through the special ::porv() and - ::actnum() methods instead of the general ::get( ) method. These two - keywords are also hidden from the keys() vectors. -*/ - -template <> -std::vector FieldProps::keys() const { - std::vector klist; - for (const auto& data_pair : this->double_data) { - if (data_pair.second.valid() && data_pair.first != "PORV") - klist.push_back(data_pair.first); - } - return klist; -} - -template <> -std::vector FieldProps::keys() const { - std::vector klist; - for (const auto& data_pair : this->int_data) { - if (data_pair.second.valid() && data_pair.first != "ACTNUM") - klist.push_back(data_pair.first); - } - return klist; -} - - -template <> -void FieldProps::erase(const std::string& keyword) { - this->int_data.erase(keyword); -} - -template <> -void FieldProps::erase(const std::string& keyword) { - this->double_data.erase(keyword); -} - -template <> -std::vector FieldProps::extract(const std::string& keyword) { - auto field_iter = this->int_data.find(keyword); - auto field = std::move(field_iter->second); - std::vector data = std::move( field.data ); - this->int_data.erase( field_iter ); - return data; -} - -template <> -std::vector FieldProps::extract(const std::string& keyword) { - auto field_iter = this->double_data.find(keyword); - auto field = std::move(field_iter->second); - std::vector data = std::move( field.data ); - this->double_data.erase( field_iter ); - return data; -} - - - - - -double FieldProps::getSIValue(const std::string& keyword, double raw_value) const { - const auto& iter = keywords::unit_string.find(keyword); - std::string dim_string = "1"; - if (iter != keywords::unit_string.end()) - dim_string = iter->second; - - const auto& dim = this->unit_system.parse( dim_string ); - return dim.convertRawToSi(raw_value); -} - - - - - -void FieldProps::handle_int_keyword(const DeckKeyword& keyword, const Box& box) { - auto& field_data = this->init_get(keyword.name()); - const auto& deck_data = keyword.getIntData(); - const auto& deck_status = keyword.getValueStatus(); - assign_deck(keyword, field_data, deck_data, deck_status, box); -} - - -void FieldProps::handle_double_keyword(Section section, const DeckKeyword& keyword, const Box& box) { - auto& field_data = this->init_get(keyword.name()); - const auto& deck_data = keyword.getSIDoubleData(); - const auto& deck_status = keyword.getValueStatus(); - - if (section == Section::EDIT && keywords::multiplier_keywords.count(keyword.name()) == 1) - multiply_deck(keyword, field_data, deck_data, deck_status, box); - else - assign_deck(keyword, field_data, deck_data, deck_status, box); - - - if (section == Section::GRID) { - if (field_data.valid()) - return; - - if (keywords::GRID::top_keywords.count(keyword.name()) == 1) - this->distribute_toplayer(field_data, deck_data, box); - } -} - - - -template -void FieldProps::apply(ScalarOperation op, FieldData& data, T scalar_value, const std::vector& index_list) { - if (op == ScalarOperation::EQUAL) - assign_scalar(data, scalar_value, index_list); - - else if (op == ScalarOperation::MUL) - multiply_scalar(data, scalar_value, index_list); - - else if (op == ScalarOperation::ADD) - add_scalar(data, scalar_value, index_list); - - else if (op == ScalarOperation::MIN) - min_value(data, scalar_value, index_list); - - else if (op == ScalarOperation::MAX) - max_value(data, scalar_value, index_list); -} - -template -void FieldProps::apply(const DeckRecord& record, FieldData& target_data, const FieldData& src_data, const std::vector& index_list) { - const std::string& func_name = record.getItem("OPERATION").get< std::string >(0); - const double alpha = record.getItem("PARAM1").get< double >(0); - const double beta = record.getItem("PARAM2").get< double >(0); - Operate::function func = Operate::get( func_name, alpha, beta ); - bool check_target = (func_name == "MULTIPLY" || func_name == "POLY"); - - for (const auto& cell_index : index_list) { - if (value::has_value(src_data.value_status[cell_index.active_index])) { - if ((check_target == false) || (value::has_value(target_data.value_status[cell_index.active_index]))) { - target_data.data[cell_index.active_index] = func(target_data.data[cell_index.active_index], src_data.data[cell_index.active_index]); - target_data.value_status[cell_index.active_index] = src_data.value_status[cell_index.active_index]; - } else - throw std::invalid_argument("Tried to use unset property value in OPERATE/OPERATER keyword"); - } else - throw std::invalid_argument("Tried to use unset property value in OPERATE/OPERATER keyword"); - } -} - -void FieldProps::handle_region_operation(const DeckKeyword& keyword) { - for (const auto& record : keyword) { - const std::string& target_kw = record.getItem(0).get(0); - int region_value = record.getItem("REGION_NUMBER").get(0); - - if (FieldProps::supported(target_kw)) { - auto& field_data = this->init_get(target_kw); - - if (keyword.name() == ParserKeywords::OPERATER::keywordName) { - // For the OPERATER keyword we fetch the region name from the deck record - // with no extra hoops. - const auto& index_list = this->region_index(record.getItem("REGION_NAME").get(0), region_value); - const std::string& src_kw = record.getItem("ARRAY_PARAMETER").get(0); - const auto& src_data = this->init_get(src_kw); - FieldProps::apply(record, field_data, src_data, index_list); - } else { - double value = record.getItem(1).get(0); - const auto& index_list = this->region_index(record.getItem("REGION_NAME"), region_value); - if (keyword.name() != ParserKeywords::MULTIPLY::keywordName) - value = this->getSIValue(target_kw, value); - FieldProps::apply(fromString(keyword.name()), field_data, value, index_list); - } - - continue; - } - - if (FieldProps::supported(target_kw)) { - continue; - } - - //throw std::out_of_range("The keyword: " + keyword + " is not supported"); - } -} - -/* This can just use a local box - no need for the manager */ -void FieldProps::handle_operation(const DeckKeyword& keyword, Box box) { - for (const auto& record : keyword) { - const std::string& target_kw = record.getItem(0).get(0); - box.update(record); - - if (FieldProps::supported(target_kw)) { - auto& field_data = this->init_get(target_kw); - - if (keyword.name() == ParserKeywords::OPERATE::keywordName) { - const std::string& src_kw = record.getItem("ARRAY").get(0); - const auto& src_data = this->init_get(src_kw); - FieldProps::apply(record, field_data, src_data, box.index_list()); - } else { - double scalar_value = record.getItem(1).get(0); - if (keyword.name() != ParserKeywords::MULTIPLY::keywordName) - scalar_value = this->getSIValue(target_kw, scalar_value); - FieldProps::apply(fromString(keyword.name()), field_data, scalar_value, box.index_list()); - } - - continue; - } - - - if (FieldProps::supported(target_kw)) { - int scalar_value = static_cast(record.getItem(1).get(0)); - auto& field_data = this->init_get(target_kw); - FieldProps::apply(fromString(keyword.name()), field_data, scalar_value, box.index_list()); - continue; - } - - //throw std::out_of_range("The keyword: " + target_kw + " is not supported"); - } -} - - -void FieldProps::handle_COPY(const DeckKeyword& keyword, Box box, bool region) { - for (const auto& record : keyword) { - const std::string& src_kw = record.getItem(0).get(0); - const std::string& target_kw = record.getItem(1).get(0); - std::vector index_list; - - if (region) { - int region_value = record.getItem(2).get(0); - const auto& region_item = record.getItem(4); - index_list = this->region_index(region_item, region_value); - } else { - box.update(record); - index_list = box.index_list(); - } - - - if (FieldProps::supported(src_kw)) { - const auto& src_data = this->try_get(src_kw); - src_data.verify_status(); - - auto& target_data = this->init_get(target_kw); - target_data.copy(src_data.field_data(), index_list); - continue; - } - - if (FieldProps::supported(src_kw)) { - const auto& src_data = this->try_get(src_kw); - src_data.verify_status(); - - auto& target_data = this->init_get(target_kw); - target_data.copy(src_data.field_data(), index_list); - continue; - } - } -} - -void FieldProps::handle_keyword(const DeckKeyword& keyword, Box& box) { - const std::string& name = keyword.name(); - - if (keywords::oper_keywords.count(name) == 1) - this->handle_operation(keyword, box); - - else if (keywords::region_oper_keywords.count(name) == 1) - this->handle_region_operation(keyword); - - else if (keywords::box_keywords.count(name) == 1) - handle_box_keyword(keyword, box); - - else if (name == ParserKeywords::COPY::keywordName) - handle_COPY(keyword, box, false); - - else if (name == ParserKeywords::COPYREG::keywordName) - handle_COPY(keyword, box, true); -} - -/**********************************************************************/ - - -void FieldProps::init_tempi(FieldData& tempi) { - if (this->tables.hasTables("RTEMPVD")) { - const auto& eqlnum = this->get("EQLNUM"); - const auto& rtempvd = this->tables.getRtempvdTables(); - std::vector< double > tempi_values( this->active_size, 0 ); - - for (size_t active_index = 0; active_index < this->active_size; active_index++) { - const auto& table = rtempvd.getTable(eqlnum[active_index] - 1); - double depth = this->cell_depth[active_index]; - tempi_values[active_index] = table.evaluate("Temperature", depth); - } - - tempi.default_update(tempi_values); - } else - tempi.default_assign(this->tables.rtemp()); -} - -void FieldProps::init_porv(FieldData& porv) { - auto& porv_data = porv.data; - auto& porv_status = porv.value_status; - - const auto& poro = this->init_get("PORO"); - const auto& poro_status = poro.value_status; - const auto& poro_data = poro.data; - - for (std::size_t active_index = 0; active_index < this->active_size; active_index++) { - if (value::has_value(poro_status[active_index])) { - porv_data[active_index] = this->cell_volume[active_index] * poro_data[active_index]; - porv_status[active_index] = value::status::valid_default; - } - } - - if (this->has("NTG")) { - const auto& ntg = this->get("NTG"); - for (std::size_t active_index = 0; active_index < this->active_size; active_index++) - porv_data[active_index] *= ntg[active_index]; - } - - if (this->has("MULTPV")) { - const auto& multpv = this->get("MULTPV"); - std::transform(porv_data.begin(), porv_data.end(), multpv.begin(), porv_data.begin(), std::multiplies()); - } - - for (const auto& mregp: this->multregp) { - const auto& index_list = this->region_index(mregp.region_name, mregp.region_value); - for (const auto& cell_index : index_list) - porv_data[cell_index.active_index] *= mregp.multiplier; - } -} - - -/* - This function generates a new ACTNUM vector.The ACTNUM vector which is - returned is joined result of three different data sources: - - 1. The ACTNUM of if the grid which is part of this FieldProps structure. - - 2. If there have been ACTNUM operations in the DECK of the type: - - EQUALS - ACTNUM 0 1 10 1 10 1 3 / - / - - 3. Cells with PORV == 0 will get ACTNUM = 0. - - Observe that due to steps 2 and 3 the ACTNUM vector returned from this - function will in general differ from the internal ACTNUM used in the - FieldProps instance. -*/ -std::vector FieldProps::actnum() { - auto actnum = this->m_actnum; - const auto& deck_actnum = this->init_get("ACTNUM"); - - std::vector global_map(this->active_size); - { - std::size_t active_index = 0; - for (std::size_t g = 0; g < this->global_size; g++) { - if (this->m_actnum[g]) { - global_map[active_index] = g; - active_index++; - } - } - } - - - const auto& porv = this->init_get("PORV"); - const auto& porv_data = porv.data; - for (std::size_t active_index = 0; active_index < this->active_size; active_index++) { - auto global_index = global_map[active_index]; - actnum[global_index] = deck_actnum.data[active_index]; - if (porv_data[active_index] == 0) - actnum[global_index] = 0; - } - return actnum; -} - - -void FieldProps::scanGRIDSection(const GRIDSection& grid_section) { - Box box(*this->grid_ptr); - - for (const auto& keyword : grid_section) { - const std::string& name = keyword.name(); - - if (keywords::GRID::double_keywords.count(name) == 1) { - this->handle_double_keyword(Section::GRID, keyword, box); - continue; - } - - if (keywords::GRID::int_keywords.count(name) == 1) { - this->handle_int_keyword(keyword, box); - continue; - } - - this->handle_keyword(keyword, box); - } -} - -void FieldProps::scanEDITSection(const EDITSection& edit_section) { - Box box(*this->grid_ptr); - for (const auto& keyword : edit_section) { - const std::string& name = keyword.name(); - if (keywords::EDIT::double_keywords.count(name) == 1) { - this->handle_double_keyword(Section::EDIT, keyword, box); - continue; - } - - if (keywords::EDIT::int_keywords.count(name) == 1) { - this->handle_int_keyword(keyword, box); - continue; - } - - this->handle_keyword(keyword, box); - } -} - - -void FieldProps::init_satfunc(const std::string& keyword, FieldData& satfunc) { - const auto& endnum = this->get("ENDNUM"); - if (keyword[0] == 'I') { - const auto& imbnum = this->get("IMBNUM"); - satfunc.default_update(satfunc::init(keyword, this->tables, this->m_phases, this->cell_depth, imbnum, endnum)); - } else { - const auto& satnum = this->get("SATNUM"); - satfunc.default_update(satfunc::init(keyword, this->tables, this->m_phases, this->cell_depth, satnum, endnum)); - } -} - -/** - * Special purpose operation to make various *SOGCR* data elements - * account for (scaled) connate water saturation. - * - * Must only be called if run uses SGOF, because that table is implicitly - * defined in terms of connate water saturation. Subtracts SWL only - * if the data item was defaulted (i.e., extracted from unscaled table). - */ -void FieldProps::subtract_swl(FieldProps::FieldData& sogcr, const std::string& swl_kw) -{ - const auto& swl = this->init_get(swl_kw); - for (std::size_t i = 0; i < sogcr.size(); i++) { - if (value::defaulted(sogcr.value_status[i])) - sogcr.data[i] -= swl.data[i]; - } -} - - - -void FieldProps::scanPROPSSection(const PROPSSection& props_section) { - Box box(*this->grid_ptr); - - for (const auto& keyword : props_section) { - const std::string& name = keyword.name(); - if (keywords::PROPS::satfunc.count(name) == 1) { - this->handle_double_keyword(Section::PROPS, keyword, box); - continue; - } - - if (keywords::PROPS::double_keywords.count(name) == 1) { - this->handle_double_keyword(Section::PROPS, keyword, box); - continue; - } - - if (keywords::PROPS::int_keywords.count(name) == 1) { - this->handle_int_keyword(keyword, box); - continue; - } - - this->handle_keyword(keyword, box); - } -} - - -void FieldProps::scanREGIONSSection(const REGIONSSection& regions_section) { - Box box(*this->grid_ptr); - - for (const auto& keyword : regions_section) { - const std::string& name = keyword.name(); - if (keywords::REGIONS::int_keywords.count(name) == 1) { - this->handle_int_keyword(keyword, box); - continue; - } - - this->handle_keyword(keyword, box); - } -} - - -void FieldProps::scanSOLUTIONSection(const SOLUTIONSection& solution_section) { - Box box(*this->grid_ptr); - for (const auto& keyword : solution_section) { - const std::string& name = keyword.name(); - if (keywords::SOLUTION::double_keywords.count(name) == 1) { - this->handle_double_keyword(Section::SOLUTION, keyword, box); - continue; - } - - this->handle_keyword(keyword, box); - } -} - -void FieldProps::scanSCHEDULESection(const SCHEDULESection& schedule_section) { - Box box(*this->grid_ptr); - for (const auto& keyword : schedule_section) { - const std::string& name = keyword.name(); - if (keywords::SCHEDULE::double_keywords.count(name) == 1) { - this->handle_double_keyword(Section::SCHEDULE, keyword, box); - continue; - } - - if (keywords::SCHEDULE::int_keywords.count(name) == 1) { - this->handle_int_keyword(keyword, box); - continue; - } - - this->handle_keyword(keyword, box); - } -} - -const std::string& FieldProps::default_region() const { - return this->m_default_region; -} - - -template std::vector FieldProps::defaulted(const std::string& keyword); -template std::vector FieldProps::defaulted(const std::string& keyword); -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/FieldProps.hpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/FieldProps.hpp deleted file mode 100644 index c4e9271dfb..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/FieldProps.hpp +++ /dev/null @@ -1,371 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify it under the terms - of the GNU General Public License as published by the Free Software - Foundation, either version 3 of the License, or (at your option) any later - version. - - OPM is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR - A PARTICULAR PURPOSE. See the GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along with - OPM. If not, see . -*/ - -#ifndef FIELDPROPS_HPP -#define FIELDPROPS_HPP - -#include -#include -#include - -#include -#include -#include -#include -#include - -namespace Opm { - -class Deck; -class EclipseGrid; -class TableManager; - -class FieldProps { -public: - - struct MultregpRecord { - int region_value; - double multiplier; - std::string region_name; - - - MultregpRecord(int rv, double m, const std::string& rn) : - region_value(rv), - multiplier(m), - region_name(rn) - {} - - }; - - enum class ScalarOperation { - ADD = 1, - EQUAL = 2, - MUL = 3, - MIN = 4, - MAX = 5 - }; - - template - static void compress(std::vector& data, const std::vector& active_map) { - std::size_t shift = 0; - for (std::size_t g = 0; g < active_map.size(); g++) { - if (active_map[g] && shift > 0) { - data[g - shift] = data[g]; - continue; - } - - if (!active_map[g]) - shift += 1; - } - - data.resize(data.size() - shift); - } - - enum class GetStatus { - OK = 1, - INVALID_DATA = 2, // std::runtime_error - MISSING_KEYWORD = 3, // std::out_of_range - NOT_SUPPPORTED_KEYWORD = 4 // std::logic_error - }; - - - - - template - struct FieldData { - std::vector data; - std::vector value_status; - mutable bool all_set; - - FieldData() = default; - - FieldData(std::size_t active_size) : - data(std::vector(active_size)), - value_status(active_size, value::status::uninitialized), - all_set(false) - { - } - - - std::size_t size() const { - return this->data.size(); - } - - bool valid() const { - if (this->all_set) - return true; - - static const std::array invalid_value = {value::status::uninitialized, value::status::empty_default}; - const auto& it = std::find_first_of(this->value_status.begin(), this->value_status.end(), invalid_value.begin(), invalid_value.end()); - this->all_set = (it == this->value_status.end()); - - return this->all_set; - } - - void compress(const std::vector& active_map) { - FieldProps::compress(this->data, active_map); - FieldProps::compress(this->value_status, active_map); - } - - void copy(const FieldData& src, const std::vector& index_list) { - for (const auto& ci : index_list) { - this->data[ci.active_index] = src.data[ci.active_index]; - this->value_status[ci.active_index] = src.value_status[ci.active_index]; - } - } - - void default_assign(T value) { - std::fill(this->data.begin(), this->data.end(), value); - std::fill(this->value_status.begin(), this->value_status.end(), value::status::valid_default); - } - - void default_assign(const std::vector& src) { - if (src.size() != this->size()) - throw std::invalid_argument("Size mismatch got: " + std::to_string(src.size()) + " expected: " + std::to_string(this->size())); - - std::copy(src.begin(), src.end(), this->data.begin()); - std::fill(this->value_status.begin(), this->value_status.end(), value::status::valid_default); - } - - void default_update(const std::vector& src) { - if (src.size() != this->size()) - throw std::invalid_argument("Size mismatch got: " + std::to_string(src.size()) + " expected: " + std::to_string(this->size())); - - for (std::size_t i = 0; i < src.size(); i++) { - if (!value::has_value(this->value_status[i])) { - this->value_status[i] = value::status::valid_default; - this->data[i] = src[i]; - } - } - } - - void update(std::size_t index, T value, value::status status) { - this->data[index] = value; - this->value_status[index] = status; - } - - }; - - - template - struct FieldDataManager { - const std::string& keyword; - GetStatus status; - const FieldData * data_ptr; - - FieldDataManager(const std::string& k, GetStatus s, const FieldData * d) : - keyword(k), - status(s), - data_ptr(d) - { } - - - void verify_status() const { - switch (status) { - case FieldProps::GetStatus::OK: - return; - case FieldProps::GetStatus::INVALID_DATA: - throw std::runtime_error("The keyword: " + keyword + " has not been fully initialized"); - case FieldProps::GetStatus::MISSING_KEYWORD: - throw std::out_of_range("No such keyword in deck: " + keyword); - case FieldProps::GetStatus::NOT_SUPPPORTED_KEYWORD: - throw std::logic_error("The kewyord " + keyword + " is not supported"); - } - } - - const std::vector* ptr() const { - if (this->data_ptr) - return std::addressof(this->data_ptr->data); - else - return nullptr; - } - - const std::vector& data() const { - this->verify_status(); - return this->data_ptr->data; - } - - const FieldData& field_data() const { - this->verify_status(); - return *this->data_ptr; - } - - bool valid() const { - return (this->status == GetStatus::OK); - } - - }; - - - - - FieldProps(const Deck& deck, const Phases& phases, const EclipseGrid& grid, const TableManager& table_arg); - void reset_actnum(const std::vector& actnum); - - const std::string& default_region() const; - - std::vector actnum(); - - template - static bool supported(const std::string& keyword); - - template - bool has(const std::string& keyword) const; - - template - std::vector keys() const; - - - template - FieldDataManager try_get(const std::string& keyword) { - if (!FieldProps::supported(keyword)) - return FieldDataManager(keyword, GetStatus::NOT_SUPPPORTED_KEYWORD, nullptr); - - const FieldData * field_data; - bool has0 = this->has(keyword); - - field_data = std::addressof(this->init_get(keyword)); - if (field_data->valid()) - return FieldDataManager(keyword, GetStatus::OK, field_data); - - if (!has0) { - this->erase(keyword); - return FieldDataManager(keyword, GetStatus::MISSING_KEYWORD, nullptr); - } - - return FieldDataManager(keyword, GetStatus::INVALID_DATA, nullptr); - } - - - template - const std::vector& get(const std::string& keyword) { - const auto& data = this->try_get(keyword); - return data.data(); - } - - - - template - std::vector get_copy(const std::string& keyword, bool global) { - bool has0 = this->has(keyword); - const auto& data = this->get(keyword); - - if (has0) { - if (global) - return this->global_copy(data); - else - return data; - } else { - if (global) - return this->global_copy(this->extract(keyword)); - else - return this->extract(keyword); - } - } - - - template - std::vector defaulted(const std::string& keyword) { - const auto& field = this->init_get(keyword); - std::vector def(field.size()); - - for (std::size_t i=0; i < def.size(); i++) - def[i] = value::defaulted( field.value_status[i]); - - return def; - } - - - template - std::vector global_copy(const std::vector& data) const { - std::vector global_data(this->global_size); - std::size_t i = 0; - for (std::size_t g = 0; g < this->global_size; g++) { - if (this->m_actnum[g]) { - global_data[g] = data[i]; - i++; - } - } - return global_data; - } - - std::size_t active_size; - std::size_t global_size; - - std::size_t num_int() const { - return this->int_data.size(); - } - - std::size_t num_double() const { - return this->double_data.size(); - } - -private: - void scanGRIDSection(const GRIDSection& grid_section); - void scanEDITSection(const EDITSection& edit_section); - void scanPROPSSection(const PROPSSection& props_section); - void scanREGIONSSection(const REGIONSSection& regions_section); - void scanSOLUTIONSection(const SOLUTIONSection& solution_section); - void scanSCHEDULESection(const SCHEDULESection& schedule_section); - double getSIValue(const std::string& keyword, double raw_value) const; - template - void erase(const std::string& keyword); - - template - std::vector extract(const std::string& keyword); - - template - void apply(const DeckRecord& record, FieldData& target_data, const FieldData& src_data, const std::vector& index_list); - - template - static void apply(ScalarOperation op, FieldData& data, T scalar_value, const std::vector& index_list); - - template - FieldData& init_get(const std::string& keyword); - - std::vector region_index( const DeckItem& regionItem, int region_value ); - std::vector region_index( const std::string& region_name, int region_value ); - void handle_operation(const DeckKeyword& keyword, Box box); - void handle_region_operation(const DeckKeyword& keyword); - void handle_COPY(const DeckKeyword& keyword, Box box, bool region); - void distribute_toplayer(FieldProps::FieldData& field_data, const std::vector& deck_data, const Box& box); - - void handle_keyword(const DeckKeyword& keyword, Box& box); - void handle_double_keyword(Section section, const DeckKeyword& keyword, const Box& box); - void handle_int_keyword(const DeckKeyword& keyword, const Box& box); - void init_satfunc(const std::string& keyword, FieldData& satfunc); - void init_porv(FieldData& porv); - void init_tempi(FieldData& tempi); - void subtract_swl(FieldProps::FieldData& sogcr, const std::string& swl_kw); - - const UnitSystem unit_system; - std::size_t nx,ny,nz; - Phases m_phases; - std::vector m_actnum; - std::vector cell_volume; - std::vector cell_depth; - const std::string m_default_region; - const EclipseGrid * grid_ptr; // A bit undecided whether to properly use the grid or not ... - const TableManager& tables; - std::vector multregp; - std::unordered_map> int_data; - std::unordered_map> double_data; -}; - -} -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/FieldPropsManager.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/FieldPropsManager.cpp deleted file mode 100644 index 90aada40b0..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/FieldPropsManager.cpp +++ /dev/null @@ -1,137 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify it under the terms - of the GNU General Public License as published by the Free Software - Foundation, either version 3 of the License, or (at your option) any later - version. - - OPM is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR - A PARTICULAR PURPOSE. See the GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along with - OPM. If not, see . -*/ - - -#include -#include -#include -#include - -#include "FieldProps.hpp" - - -namespace Opm { - -FieldPropsManager::FieldPropsManager(const Deck& deck, const Phases& phases, const EclipseGrid& grid_arg, const TableManager& tables) : - fp(std::make_shared(deck, phases, grid_arg, tables)) -{} - -void FieldPropsManager::reset_actnum(const std::vector& actnum) { - this->fp->reset_actnum(actnum); -} - -FieldPropsManager::MemInfo FieldPropsManager::meminfo( ) const { - return FieldPropsManager::MemInfo(this->fp->global_size, this->fp->active_size, this->fp->num_int(), this->fp->num_double()); -} - -template -const std::vector& FieldPropsManager::get(const std::string& keyword) const { - return this->fp->get(keyword); -} - - -template -const std::vector* FieldPropsManager::try_get(const std::string& keyword) const { - const auto& data = this->fp->try_get(keyword); - if (data.valid()) - return data.ptr(); - - return nullptr; -} - - -template -std::vector FieldPropsManager::get_global(const std::string& keyword) const { - const auto& data = this->get(keyword); - return this->fp->global_copy(data); -} - -template -std::vector FieldPropsManager::get_copy(const std::string& keyword, bool global) const { - return this->fp->get_copy(keyword, global); -} - -template -bool FieldPropsManager::supported(const std::string& keyword) { - return FieldProps::supported(keyword); -} - -template -bool FieldPropsManager::has(const std::string& keyword) const { - if (!this->fp->has(keyword)) - return false; - const auto& data = this->fp->try_get(keyword); - return data.valid(); -} - -template -std::vector FieldPropsManager::defaulted(const std::string& keyword) const { - return this->fp->defaulted(keyword); -} - - -const std::string& FieldPropsManager::default_region() const { - return this->fp->default_region(); -} - -template -std::vector FieldPropsManager::keys() const { - return this->fp->keys(); -} - -std::vector FieldPropsManager::actnum() const { - return this->fp->actnum(); -} - -std::vector FieldPropsManager::porv(bool global) const { - const auto& data = this->get("PORV"); - if (global) - return this->fp->global_copy(data); - else - return data; -} - -std::size_t FieldPropsManager::active_size() const { - return this->fp->active_size; -} - -template bool FieldPropsManager::supported(const std::string&); -template bool FieldPropsManager::supported(const std::string&); - -template bool FieldPropsManager::has(const std::string&) const; -template bool FieldPropsManager::has(const std::string&) const; - -template std::vector FieldPropsManager::defaulted(const std::string&) const; -template std::vector FieldPropsManager::defaulted(const std::string&) const; - -template std::vector FieldPropsManager::keys() const; -template std::vector FieldPropsManager::keys() const; - -template std::vector FieldPropsManager::get_global(const std::string& keyword) const; -template std::vector FieldPropsManager::get_global(const std::string& keyword) const; - -template const std::vector& FieldPropsManager::get(const std::string& keyword) const; -template const std::vector& FieldPropsManager::get(const std::string& keyword) const; - -template std::vector FieldPropsManager::get_copy(const std::string& keyword, bool global) const; -template std::vector FieldPropsManager::get_copy(const std::string& keyword, bool global) const; - -template const std::vector* FieldPropsManager::try_get(const std::string& keyword) const; -template const std::vector* FieldPropsManager::try_get(const std::string& keyword) const; - -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/GridDims.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/GridDims.cpp deleted file mode 100644 index e67d5cdba6..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/GridDims.cpp +++ /dev/null @@ -1,164 +0,0 @@ -/* - Copyright 2016 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include -#include -#include - -#include - -#include -#include -#include - -#include - -#include // DIMENS -#include // SPECGRID - -namespace Opm { - GridDims::GridDims(std::array xyz) : - GridDims(xyz[0], xyz[1], xyz[2]) - { - } - - GridDims::GridDims(size_t nx, size_t ny, size_t nz) : - m_nx(nx), m_ny(ny), m_nz(nz) - { - } - - GridDims GridDims::serializeObject() - { - GridDims result; - result.m_nx = 1; - result.m_ny = 2; - result.m_nz = 3; - - return result; - } - - GridDims::GridDims(const Deck& deck) { - if (deck.hasKeyword("SPECGRID")) - init(deck.getKeyword("SPECGRID")); - else if (deck.hasKeyword("DIMENS")) - init(deck.getKeyword("DIMENS")); - else if (deck.hasKeyword("GDFILE")) - binary_init(deck); - else - throw std::invalid_argument("Must have either SPECGRID or DIMENS to indicate grid dimensions"); - } - - size_t GridDims::getNX() const { - return m_nx; - } - - size_t GridDims::getNY() const { - return m_ny; - } - - size_t GridDims::getNZ() const { - return m_nz; - } - - size_t GridDims::operator[](int dim) const { - switch (dim) { - case 0: - return this->m_nx; - break; - case 1: - return this->m_ny; - break; - case 2: - return this->m_nz; - break; - default: - throw std::invalid_argument("Invalid argument dim:" + std::to_string(dim)); - } - } - - const std::array GridDims::getNXYZ() const { - return std::array {{int( m_nx ), int( m_ny ), int( m_nz )}}; - } - - size_t GridDims::getGlobalIndex(size_t i, size_t j, size_t k) const { - return (i + j * getNX() + k * getNX() * getNY()); - } - - const std::array GridDims::getIJK(size_t globalIndex) const { - std::array r = { { 0, 0, 0 } }; - int k = globalIndex / (getNX() * getNY()); - globalIndex -= k * (getNX() * getNY()); - int j = globalIndex / getNX(); - globalIndex -= j * getNX(); - int i = globalIndex; - r[0] = i; - r[1] = j; - r[2] = k; - return r; - } - - size_t GridDims::getCartesianSize() const { - return m_nx * m_ny * m_nz; - } - - void GridDims::assertGlobalIndex(size_t globalIndex) const { - if (globalIndex >= getCartesianSize()) - throw std::invalid_argument("input index above valid range"); - } - - void GridDims::assertIJK(size_t i, size_t j, size_t k) const { - if (i >= getNX() || j >= getNY() || k >= getNZ()) - throw std::invalid_argument("input index above valid range"); - } - - GridDims::GridDims() : - m_nx(0), m_ny(0), m_nz(0) - { - } - - // keyword must be DIMENS or SPECGRID - inline std::array< int, 3 > readDims(const DeckKeyword& keyword) { - const auto& record = keyword.getRecord(0); - return { { record.getItem("NX").get(0), - record.getItem("NY").get(0), - record.getItem("NZ").get(0) } }; - } - - void GridDims::init(const DeckKeyword& keyword) { - auto dims = readDims(keyword); - m_nx = dims[0]; - m_ny = dims[1]; - m_nz = dims[2]; - } - - void GridDims::binary_init(const Deck& deck) { - const DeckKeyword& gdfile_kw = deck.getKeyword("GDFILE"); - const std::string& gdfile_arg = gdfile_kw.getRecord(0).getItem("filename").get(0); - const EclIO::EGrid egrid( deck.makeDeckPath(gdfile_arg) ); - const auto& dimens = egrid.dimension(); - m_nx = dimens[0]; - m_ny = dimens[1]; - m_nz = dimens[2]; - } - - bool GridDims::operator==(const GridDims& data) const { - return this->getNXYZ() == data.getNXYZ(); - } - -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/MULTREGTScanner.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/MULTREGTScanner.cpp deleted file mode 100644 index 063f365228..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/MULTREGTScanner.cpp +++ /dev/null @@ -1,347 +0,0 @@ -/* - Copyright 2014 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ -#include -#include -#include - -#include -#include -#include -#include -#include -#include - -namespace Opm { - - namespace MULTREGT { - - std::string RegionNameFromDeckValue(const std::string& stringValue) { - if (stringValue == "O") - return "OPERNUM"; - - if (stringValue == "F") - return "FLUXNUM"; - - if (stringValue == "M") - return "MULTNUM"; - - throw std::invalid_argument("The input string: " + stringValue + " was invalid. Expected: O/F/M"); - } - - - - NNCBehaviourEnum NNCBehaviourFromString(const std::string& stringValue) { - if (stringValue == "ALL") - return ALL; - - if (stringValue == "NNC") - return NNC; - - if (stringValue == "NONNC") - return NONNC; - - if (stringValue == "NOAQUNNC") - return NOAQUNNC; - - throw std::invalid_argument("The input string: " + stringValue + " was invalid. Expected: ALL/NNC/NONNC/NOAQUNNC"); - } - - - } - - -namespace { - -std::vector unique(const std::vector data) { - std::set set_data(data.begin(), data.end()); - return { set_data.begin(), set_data.end() }; -} - -} - - - /*****************************************************************/ - /* - Observe that the (REGION1 -> REGION2) pairs behave like keys; - i.e. for the MULTREGT keyword - - MULTREGT - 2 4 0.75 Z ALL M / - 2 4 2.50 XY ALL F / - / - - The first record is completely overweritten by the second - record, this is because the both have the (2 -> 4) region - identifiers. This behaviourt is ensured by using a map with - std::pair as key. - - This function starts with some initial preprocessing to create a - map which looks like this: - - - searchMap = {"MULTNUM" : {std::pair(1,2) : std::tuple(TransFactor , Face , Region), - std::pair(4,7) : std::tuple(TransFactor , Face , Region), - ...}, - "FLUXNUM" : {std::pair(4,8) : std::tuple(TransFactor , Face , Region), - std::pair(1,4) : std::tuple(TransFactor , Face , Region), - ...}} - - Then it will go through the different regions and looking for - interface with the wanted region values. - */ - MULTREGTScanner::MULTREGTScanner(const GridDims& grid, - const FieldPropsManager* fp_arg, - const std::vector< const DeckKeyword* >& keywords) : - nx(grid.getNX()), - ny(grid.getNY()), - nz(grid.getNZ()), - fp(fp_arg) { - - this->default_region = this->fp->default_region(); - for (size_t idx = 0; idx < keywords.size(); idx++) - this->addKeyword(*keywords[idx] , this->default_region); - - MULTREGTSearchMap searchPairs; - for (std::vector::const_iterator record = m_records.begin(); record != m_records.end(); ++record) { - const std::string& region_name = record->region_name; - if (this->fp->has_int( region_name)) { - int srcRegion = record->src_value; - int targetRegion = record->target_value; - - // the MULTREGT keyword is directional independent - // i.e. we add it both ways to the lookup map. - if (srcRegion != targetRegion) { - std::pair pair1{ srcRegion, targetRegion }; - std::pair pair2{ targetRegion, srcRegion }; - searchPairs[pair1] = &(*record); - searchPairs[pair2] = &(*record); - } - } - else - throw std::logic_error( - "MULTREGT record is based on region: " - + region_name - + " which is not in the deck"); - - if (this->regions.count(region_name) == 0) - this->regions[region_name] = this->fp->get_global_int(region_name); - } - - for (auto iter = searchPairs.begin(); iter != searchPairs.end(); ++iter) { - const MULTREGTRecord * record = (*iter).second; - std::pair pair = (*iter).first; - const std::string& keyword = record->region_name; - if (m_searchMap.count(keyword) == 0) - m_searchMap[keyword] = MULTREGTSearchMap(); - - m_searchMap[keyword][pair] = record; - } - } - - MULTREGTScanner MULTREGTScanner::serializeObject() - { - MULTREGTScanner result; - result.nx = 1; - result.ny = 2; - result.nz = 3; - result.m_records = {{4, 5, 6.0, 7, MULTREGT::ALL, "test1"}}; - result.constructSearchMap({{"test2", {{{8, 9}, 10}}}}); - result.regions = {{"test3", {11}}}; - result.default_region = "test4"; - - return result; - } - - MULTREGTScanner::MULTREGTScanner(const MULTREGTScanner& data) { - *this = data; - } - - - void MULTREGTScanner::assertKeywordSupported( const DeckKeyword& deckKeyword) { - for (const auto& deckRecord : deckKeyword) { - const auto& srcItem = deckRecord.getItem("SRC_REGION"); - const auto& targetItem = deckRecord.getItem("TARGET_REGION"); - auto nnc_behaviour = MULTREGT::NNCBehaviourFromString(deckRecord.getItem("NNC_MULT").get(0)); - - if (!srcItem.defaultApplied(0) && !targetItem.defaultApplied(0)) - if (srcItem.get(0) == targetItem.get(0)) - throw std::invalid_argument("Sorry - MULTREGT applied internally to a region is not yet supported"); - - if (nnc_behaviour == MULTREGT::NOAQUNNC) - throw std::invalid_argument("Sorry - currently we do not support \'NOAQUNNC\' for MULTREGT."); - - } - } - - - - void MULTREGTScanner::addKeyword( const DeckKeyword& deckKeyword , const std::string& defaultRegion) { - assertKeywordSupported( deckKeyword ); - for (const auto& deckRecord : deckKeyword) { - std::vector src_regions; - std::vector target_regions; - std::string region_name = defaultRegion; - - const auto& srcItem = deckRecord.getItem("SRC_REGION"); - const auto& targetItem = deckRecord.getItem("TARGET_REGION"); - const auto& regionItem = deckRecord.getItem("REGION_DEF"); - - double trans_mult = deckRecord.getItem("TRAN_MULT").get(0); - auto directions = FaceDir::FromMULTREGTString( deckRecord.getItem("DIRECTIONS").get(0)); - auto nnc_behaviour = MULTREGT::NNCBehaviourFromString(deckRecord.getItem("NNC_MULT").get(0)); - - if (regionItem.defaultApplied(0)) { - if (!m_records.empty()) - region_name = m_records.back().region_name; - } else - region_name = MULTREGT::RegionNameFromDeckValue( regionItem.get(0) ); - - if (srcItem.defaultApplied(0) || srcItem.get(0) < 0) - src_regions = unique(this->fp->get_int(region_name)); - else - src_regions.push_back(srcItem.get(0)); - - if (targetItem.defaultApplied(0) || targetItem.get(0) < 0) - target_regions = unique(fp->get_int(region_name)); - else - target_regions.push_back(targetItem.get(0)); - - for (int src_region : src_regions) { - for (int target_region : target_regions) - m_records.push_back({src_region, target_region, trans_mult, directions, nnc_behaviour, region_name}); - } - } - - } - - - /* - This function will check the region values in globalIndex1 and - globalIndex and see if they match the regionvalues specified in - the deck. The function checks both directions: - - Assume the relevant MULTREGT record looks like: - - 1 2 0.10 XYZ ALL M / - - I.e. we are checking for the boundary between regions 1 and - 2. We assign the transmissibility multiplier to the correct face - of the cell with value 1: - - ----------- - | 1 | 2 | => MultTrans( i,j,k,FaceDir::XPlus ) *= 0.50 - ----------- - - ----------- - | 2 | 1 | => MultTrans( i+1,j,k,FaceDir::XMinus ) *= 0.50 - ----------- - - */ - double MULTREGTScanner::getRegionMultiplier(size_t globalIndex1 , size_t globalIndex2, FaceDir::DirEnum faceDir) const { - - for (auto iter = m_searchMap.begin(); iter != m_searchMap.end(); iter++) { - const auto& region_data = this->regions.at( iter->first ); - const MULTREGTSearchMap& map = (*iter).second; - - int regionId1 = region_data[globalIndex1]; - int regionId2 = region_data[globalIndex2]; - - std::pair pair{ regionId1, regionId2 }; - if (map.count(pair) != 1 || !(map.at(pair)->directions & faceDir)) { - pair = std::pair{regionId2 , regionId1}; - if (map.count(pair) != 1 || !(map.at(pair)->directions & faceDir)) - continue; - } - const MULTREGTRecord* record = map.at(pair); - - bool applyMultiplier = true; - int i1 = globalIndex1 % this->nx; - int i2 = globalIndex2 % this->nx; - int j1 = globalIndex1 / this->nx % this->nz; - int j2 = globalIndex2 / this->nx % this->nz; - - if (record->nnc_behaviour == MULTREGT::NNC){ - applyMultiplier = true; - if ((std::abs(i1-i2) == 0 && std::abs(j1-j2) == 1) || (std::abs(i1-i2) == 1 && std::abs(j1-j2) == 0)) - applyMultiplier = false; - } - else if (record->nnc_behaviour == MULTREGT::NONNC){ - applyMultiplier = false; - if ((std::abs(i1-i2) == 0 && std::abs(j1-j2) == 1) || (std::abs(i1-i2) == 1 && std::abs(j1-j2) == 0)) - applyMultiplier = true; - } - - if (applyMultiplier) - return record->trans_mult; - - } - return 1; - } - - MULTREGTScanner::ExternalSearchMap MULTREGTScanner::getSearchMap() const { - ExternalSearchMap result; - for (const auto& it : m_searchMap) { - std::map, int> res; - for (const auto& it2 : it.second) { - auto ffunc = [&](const Opm::MULTREGTRecord& a) - { - return &a == it2.second; - }; - auto rIt = std::find_if(m_records.begin(), m_records.end(), ffunc); - res[it2.first] = std::distance(m_records.begin(), rIt); - } - result[it.first] = res; - } - return result; - } - - void MULTREGTScanner::constructSearchMap(const ExternalSearchMap& searchMap) { - for (const auto& it : searchMap) { - std::map, const Opm::MULTREGTRecord*> res; - for (const auto& it2 : it.second) { - res[it2.first] = &m_records[it2.second]; - } - m_searchMap.insert({it.first, res}); - } - } - - bool MULTREGTScanner::operator==(const MULTREGTScanner& data) const { - return this->nx == data.nx && - this->ny == data.ny && - this->nz == data.nz && - this->m_records == data.m_records && - this->regions == data.regions && - this->getSearchMap() == data.getSearchMap() && - this->default_region == data.default_region; - } - - MULTREGTScanner& MULTREGTScanner::operator=(const MULTREGTScanner& data) { - nx = data.nx; - ny = data.ny; - nz = data.nz; - fp = data.fp; - m_records = data.m_records; - regions = data.regions; - default_region = data.default_region; - m_searchMap.clear(); - constructSearchMap(data.getSearchMap()); - - return *this; - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/NNC.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/NNC.cpp deleted file mode 100644 index 4c33f0dc95..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/NNC.cpp +++ /dev/null @@ -1,87 +0,0 @@ -/* - Copyright 2015 IRIS - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ -#include - -#include -#include -#include -#include -#include -#include -#include -#include - - -namespace Opm -{ - NNC::NNC(const Deck& deck) { - GridDims gridDims(deck); - const auto& nncs = deck.getKeywordList(); - for (size_t idx_nnc = 0; idx_nnc ijk1; - ijk1[0] = static_cast(nnc.getRecord(i).getItem(0).get< int >(0)-1); - ijk1[1] = static_cast(nnc.getRecord(i).getItem(1).get< int >(0)-1); - ijk1[2] = static_cast(nnc.getRecord(i).getItem(2).get< int >(0)-1); - size_t global_index1 = gridDims.getGlobalIndex(ijk1[0],ijk1[1],ijk1[2]); - - std::array ijk2; - ijk2[0] = static_cast(nnc.getRecord(i).getItem(3).get< int >(0)-1); - ijk2[1] = static_cast(nnc.getRecord(i).getItem(4).get< int >(0)-1); - ijk2[2] = static_cast(nnc.getRecord(i).getItem(5).get< int >(0)-1); - size_t global_index2 = gridDims.getGlobalIndex(ijk2[0],ijk2[1],ijk2[2]); - - const double trans = nnc.getRecord(i).getItem(6).getSIDouble(0); - - addNNC(global_index1,global_index2,trans); - } - } - } - - NNC NNC::serializeObject() - { - NNC result; - result.m_nnc = {{1,2,1.0},{2,3,2.0}}; - - return result; - } - - void NNC::addNNC(const size_t cell1, const size_t cell2, const double trans) { - NNCdata tmp; - tmp.cell1 = cell1; - tmp.cell2 = cell2; - tmp.trans = trans; - m_nnc.push_back(tmp); - } - - size_t NNC::numNNC() const { - return(m_nnc.size()); - } - - bool NNC::hasNNC() const { - return m_nnc.size()>0; - } - - bool NNC::operator==(const NNC& data) const { - return m_nnc == data.m_nnc; - } - -} // namespace Opm - diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/Operate.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/Operate.cpp deleted file mode 100644 index fcf1c0afe9..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/Operate.cpp +++ /dev/null @@ -1,139 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify it under the terms - of the GNU General Public License as published by the Free Software - Foundation, either version 3 of the License, or (at your option) any later - version. - - OPM is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR - A PARTICULAR PURPOSE. See the GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along with - OPM. If not, see . -*/ -#include -#include -#include - -#ifdef _WIN32 -#include -#endif - -#include "Operate.hpp" - -namespace Opm { -namespace Operate { -namespace { - /* - The functions in this namespace are those listed as - available operations in the OPERATE keyword. - */ - - double MULTA(double, double X, double alpha, double beta) - { - return alpha * X + beta; - } - - // NB: The POLY function and the MULTIPLY function both use - // the R value in the calculation. That implies that we should - // ideally check that the R property has already been - // initialized with a valid value, For all the other - // operations R only appears on the left side of the equation, - // and can be fully assigned to. - double POLY(double R, double X, double alpha, double beta) - { - return R + alpha * std::pow(X, beta); - } - - double MULTIPLY(double R, double X, double, double) - { - return R * X; - } - - double SLOG(double, double X, double alpha, double beta) - { - return pow(10, alpha + beta * X); - } - - double LOG10(double, double X, double, double) - { - return log10(X); - } - - double LOGE(double, double X, double, double) - { - return log(X); - } - - double INV(double, double X, double, double) - { - return 1.0 / X; - } - - double MULTX(double, double X, double alpha, double) - { - return alpha * X; - } - - double ADDX(double, double X, double alpha, double) - { - return alpha + X; - } - - double COPY(double, double X, double, double) - { - return X; - } - - double MAXLIM(double, double X, double alpha, double) - { - return std::min(alpha, X); - } - - double MINLIM(double, double X, double alpha, double) - { - return std::max(alpha, X); - } - - double MULTP(double, double X, double alpha, double beta) - { - return alpha * pow(X, beta); - } - - double ABS(double, double X, double, double) - { - return std::abs(X); - } - - using func4 = decltype(&MULTA); - static const std::map operations = {{"MULTA", &MULTA}, - {"POLY", &POLY}, - {"SLOG", &SLOG}, - {"LOG10", &LOG10}, - {"LOGE", &LOGE}, - {"INV", &INV}, - {"MULTX", &MULTX}, - {"ADDX", &ADDX}, - {"COPY", ©}, - {"MAXLIM", &MAXLIM}, - {"MINLIM", &MINLIM}, - {"MULTP", &MULTP}, - {"ABS", &ABS}, - {"MULTIPLY", &MULTIPLY}}; -} - -function get(const std::string& func, double alpha, double beta) { - auto inner_func = operations.at(func); - - return [alpha, beta, inner_func](double R, double X) - { - return inner_func(R,X,alpha,beta); - }; -} - -} -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/Operate.hpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/Operate.hpp deleted file mode 100644 index 3d48430e2a..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/Operate.hpp +++ /dev/null @@ -1,34 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify it under the terms - of the GNU General Public License as published by the Free Software - Foundation, either version 3 of the License, or (at your option) any later - version. - - OPM is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR - A PARTICULAR PURPOSE. See the GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along with - OPM. If not, see . -*/ -#ifndef OPERATE_HPP -#define OPERATE_HPP - -#include - - -namespace Opm { -namespace Operate { - -//using operate_fptr = decltype(&MULTA); -using function = std::function; - -function get(const std::string& func, double alpha, double beta); - -} -} -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/PinchMode.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/PinchMode.cpp deleted file mode 100644 index e3d87d8556..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/PinchMode.cpp +++ /dev/null @@ -1,63 +0,0 @@ -/* - Copyright 2015 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include -#include - -#include - -namespace Opm { - - namespace PinchMode { - - const std::string PinchMode2String(const ModeEnum enumValue) { - std::string stringValue; - switch (enumValue) { - case ModeEnum::ALL: - stringValue = "ALL"; - break; - - case ModeEnum::TOPBOT: - stringValue = "TOPBOT"; - break; - - case ModeEnum::TOP: - stringValue = "TOP"; - break; - } - - return stringValue; - } - - ModeEnum PinchModeFromString(const std::string& stringValue) { - std::string s = trim_copy(stringValue); - - ModeEnum mode; - if (s == "ALL") { mode = ModeEnum::ALL; } - else if (s == "TOPBOT") { mode = ModeEnum::TOPBOT; } - else if (s == "TOP") { mode = ModeEnum::TOP; } - else { - std::string msg = "Unsupported pinchout mode " + s; - throw std::invalid_argument(msg); - } - - return mode; - } - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/SatfuncPropertyInitializers.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/SatfuncPropertyInitializers.cpp deleted file mode 100644 index f188960b8f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/SatfuncPropertyInitializers.cpp +++ /dev/null @@ -1,1457 +0,0 @@ -/* - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify it under the terms - of the GNU General Public License as published by the Free Software - Foundation, either version 3 of the License, or (at your option) any later - version. - - OPM is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR - A PARTICULAR PURPOSE. See the GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along with - OPM. If not, see . -*/ - -#include - -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -namespace Opm { - - /* - * See the "Saturation Functions" chapter in the Eclipse Technical - * Description; there are several alternative families of keywords which - * can be used to enter relperm and capillary pressure tables. - * - * If SWOF and SGOF are specified in the deck it return I - * If SWFN, SGFN and SOF3 are specified in the deck it return II - * If keywords are missing or mixed, an error is given. - */ - enum class SatfuncFamily { none = 0, I = 1, II = 2 }; - - static SatfuncFamily - getSaturationFunctionFamily(const TableManager& tm, - const Phases& ph) - { - const auto wat = ph.active(::Opm::Phase::WATER); - const auto oil = ph.active(::Opm::Phase::OIL); - const auto gas = ph.active(::Opm::Phase::GAS); - const auto threeP = gas && oil && wat; - - const auto family1 = // SGOF/SLGOF and/or SWOF - (gas && (tm.hasTables("SGOF") || tm.hasTables("SLGOF"))) || - (wat && tm.hasTables("SWOF")); - - const auto family2 = // SGFN, SOF{2,3}, SWFN - (gas && tm.hasTables("SGFN")) || - (oil && ((threeP && tm.hasTables("SOF3")) || - tm.hasTables("SOF2"))) || - (wat && tm.hasTables("SWFN")); - - if (gas && tm.hasTables("SGOF") && tm.hasTables("SLGOF")) { - throw std::invalid_argument("Both SGOF and SLGOF have been specified but these tables are mutually exclusive!"); - } - - if (family1 && family2) { - throw std::invalid_argument("Saturation families should not be mixed\n" - "Use either SGOF (or SLGOF) and/or SWOF or SGFN/SWFN and SOF2/SOF3"); - } - - if (!family1 && !family2) { - throw std::invalid_argument("Saturations function must be specified using either " - "family 1 or family 2 keywords\n" - "Use either SGOF (or SLGOF) and/or SWOF or SGFN/SWFN and SOF2/SOF3"); - } - - if( family1 ) return SatfuncFamily::I; - if( family2 ) return SatfuncFamily::II; - return SatfuncFamily::none; - } - - enum class limit { min, max }; - - static std::vector< double > - findMinWaterSaturation(const TableManager& tm, - const Phases& ph) - { - const auto num_tables = tm.getTabdims().getNumSatTables(); - - if (! ph.active(::Opm::Phase::WATER)) - return std::vector(num_tables, 0.0); - - const auto& swofTables = tm.getSwofTables(); - const auto& swfnTables = tm.getSwfnTables(); - - const auto famI = [&swofTables]( int i ) { - return swofTables.getTable< SwofTable >( i ).getSwColumn().front(); - }; - - const auto famII = [&swfnTables]( int i ) { - return swfnTables.getTable< SwfnTable >( i ).getSwColumn().front(); - }; - - switch( getSaturationFunctionFamily( tm, ph ) ) { - case SatfuncFamily::I: return map( famI, fun::iota( num_tables ) ); - case SatfuncFamily::II: return map( famII, fun::iota( num_tables ) ); - default: - throw std::domain_error("No valid saturation keyword family specified"); - } - } - - static std::vector< double > - findMaxWaterSaturation(const TableManager& tm, - const Phases& ph) - { - const auto num_tables = tm.getTabdims().getNumSatTables(); - - if (! ph.active(::Opm::Phase::WATER)) - return std::vector(num_tables, 0.0); - - const auto& swofTables = tm.getSwofTables(); - const auto& swfnTables = tm.getSwfnTables(); - - const auto famI = [&swofTables]( int i ) { - return swofTables.getTable< SwofTable >( i ).getSwColumn().back(); - }; - - const auto famII = [&swfnTables]( int i ) { - return swfnTables.getTable< SwfnTable >( i ).getSwColumn().back(); - }; - - switch( getSaturationFunctionFamily( tm, ph ) ) { - case SatfuncFamily::I: return map( famI, fun::iota( num_tables ) ); - case SatfuncFamily::II: return map( famII, fun::iota( num_tables ) ); - default: - throw std::domain_error("No valid saturation keyword family specified"); - } - } - - static std::vector< double > - findMinGasSaturation(const TableManager& tm, - const Phases& ph) - { - const auto num_tables = tm.getTabdims().getNumSatTables(); - - if (! ph.active(::Opm::Phase::GAS)) - return std::vector(num_tables, 0.0); - - const auto& sgofTables = tm.getSgofTables(); - const auto& slgofTables = tm.getSlgofTables(); - const auto& sgfnTables = tm.getSgfnTables(); - - const auto famI_sgof = [&sgofTables]( int i ) { - return sgofTables.getTable< SgofTable >( i ).getSgColumn().front(); - }; - - const auto famI_slgof = [&slgofTables]( int i ) { - return 1.0 - slgofTables.getTable< SlgofTable >( i ).getSlColumn().back(); - }; - - const auto famII = [&sgfnTables]( int i ) { - return sgfnTables.getTable< SgfnTable >( i ).getSgColumn().front(); - }; - - switch( getSaturationFunctionFamily( tm, ph ) ) { - case SatfuncFamily::I: - if( sgofTables.empty() && slgofTables.empty() ) - throw std::runtime_error( "Saturation keyword family I requires either sgof or slgof non-empty" ); - - if( !sgofTables.empty() ) - return fun::map( famI_sgof, fun::iota( num_tables ) ); - else - return fun::map( famI_slgof, fun::iota( num_tables ) ); - - case SatfuncFamily::II: - return fun::map( famII, fun::iota( num_tables ) ); - - default: - throw std::domain_error("No valid saturation keyword family specified"); - } - } - - static std::vector< double > - findMaxGasSaturation(const TableManager& tm, - const Phases& ph) - { - const auto num_tables = tm.getTabdims().getNumSatTables(); - - if (! ph.active(::Opm::Phase::GAS)) - return std::vector(num_tables, 0.0); - - const auto& sgofTables = tm.getSgofTables(); - const auto& slgofTables = tm.getSlgofTables(); - const auto& sgfnTables = tm.getSgfnTables(); - - const auto famI_sgof = [&sgofTables]( int i ) { - return sgofTables.getTable< SgofTable >( i ).getSgColumn().back(); - }; - - const auto famI_slgof = [&slgofTables]( int i ) { - return 1.0 - slgofTables.getTable< SlgofTable >( i ).getSlColumn().front(); - }; - - const auto famII = [&sgfnTables]( int i ) { - return sgfnTables.getTable< SgfnTable >( i ).getSgColumn().back(); - }; - - switch( getSaturationFunctionFamily( tm, ph ) ) { - case SatfuncFamily::I: - if( sgofTables.empty() && slgofTables.empty() ) - throw std::runtime_error( "Saturation keyword family I requires either sgof or slgof non-empty" ); - - if( !sgofTables.empty() ) - return fun::map( famI_sgof, fun::iota( num_tables ) ); - else - return fun::map( famI_slgof, fun::iota( num_tables ) ); - - case SatfuncFamily::II: - return fun::map( famII, fun::iota( num_tables ) ); - - default: - throw std::domain_error("No valid saturation keyword family specified"); - } - } - - /* - * These functions have been ported from an older implementation to instead - * use std::upper_bound and more from to make code -intent- - * clearer. This also made some (maybe intentional) details easier to spot. - * A short discussion: - * - * I don't know if not finding any element larger than 0.0 in the tables - * was ever supposed to happen (or even possible), in which case the vector - * elements remained at their initial value of 0.0. This behaviour has been - * preserved, but is now explicit. The original code was also not clear if - * it was possible to look up columns at index -1 (see critical_water for - * an example), but the new version is explicit about this. Unfortuately - * I'm not familiar enough with the maths or internal structure to make - * more than a guess here, but most of this behaviour should be preserved. - * - */ - - template< typename T > - static inline double critical_water( const T& table ) { - - const auto& col = table.getKrwColumn(); - const auto end = col.begin() + table.numRows(); - const auto critical = std::upper_bound( col.begin(), end, 0.0 ); - const auto index = std::distance( col.begin(), critical ); - - if( index == 0 || critical == end ) return 0.0; - - return table.getSwColumn()[ index - 1 ]; - } - - static std::vector< double > - findCriticalWater(const TableManager& tm, - const Phases& ph) - { - const auto num_tables = tm.getTabdims().getNumSatTables(); - - if (! ph.active(::Opm::Phase::WATER)) - return std::vector(num_tables, 0.0); - - const auto& swofTables = tm.getSwofTables(); - const auto& swfnTables = tm.getSwfnTables(); - - const auto famI = [&swofTables]( int i ) { - return critical_water( swofTables.getTable< SwofTable >( i ) ); - }; - - const auto famII = [&swfnTables]( int i ) { - return critical_water( swfnTables.getTable< SwfnTable >( i ) ); - }; - - switch( getSaturationFunctionFamily( tm, ph ) ) { - case SatfuncFamily::I: return fun::map( famI, fun::iota( num_tables ) ); - case SatfuncFamily::II: return fun::map( famII, fun::iota( num_tables ) ); - default: throw std::domain_error("No valid saturation keyword family specified"); - } - } - - template< typename T > - static inline double critical_gas( const T& table ) { - const auto& col = table.getKrgColumn(); - const auto end = col.begin() + table.numRows(); - const auto critical = std::upper_bound( col.begin(), end, 0.0 ); - const auto index = std::distance( col.begin(), critical ); - - if( index == 0 || critical == end ) return 0.0; - - return table.getSgColumn()[ index - 1 ]; - } - - static inline double critical_gas( const SlgofTable& slgofTable ) { - const auto& col = slgofTable.getKrgColumn(); - const auto critical = std::upper_bound( col.begin(), col.end(), 0.0 ); - const auto index = std::distance( col.begin(), critical ); - - if( index == 0 || critical == col.end() ) return 0.0; - - return slgofTable.getSlColumn()[ index - 1 ]; - } - - static std::vector< double > - findCriticalGas(const TableManager& tm, - const Phases& ph) - { - const auto num_tables = tm.getTabdims().getNumSatTables(); - - if (! ph.active(::Opm::Phase::GAS)) - return std::vector(num_tables, 0.0); - - const auto& sgfnTables = tm.getSgfnTables(); - const auto& sgofTables = tm.getSgofTables(); - const auto& slgofTables = tm.getSlgofTables(); - - const auto famI_sgof = [&sgofTables]( int i ) { - return critical_gas( sgofTables.getTable< SgofTable >( i ) ); - }; - - const auto famI_slgof = [&slgofTables]( int i ) { - return critical_gas( slgofTables.getTable< SlgofTable >( i ) ); - }; - - const auto famII = [&sgfnTables]( int i ) { - return critical_gas( sgfnTables.getTable< SgfnTable >( i ) ); - }; - - switch( getSaturationFunctionFamily( tm, ph ) ) { - case SatfuncFamily::I: - if( sgofTables.empty() && slgofTables.empty() ) - throw std::runtime_error( "Saturation keyword family I requires either sgof or slgof non-empty" ); - - if( !sgofTables.empty() ) - return fun::map( famI_sgof, fun::iota( num_tables ) ); - else - return fun::map( famI_slgof, fun::iota( num_tables ) ); - - case SatfuncFamily::II: - return fun::map( famII, fun::iota( num_tables ) ); - - default: - throw std::domain_error("No valid saturation keyword family specified"); - } - } - - static inline double critical_oil_water( const SwofTable& swofTable ) { - const auto& col = swofTable.getKrowColumn(); - - using reverse = std::reverse_iterator< decltype( col.begin() ) >; - auto rbegin = reverse( col.begin() + swofTable.numRows() ); - auto rend = reverse( col.begin() ); - const auto critical = std::upper_bound( rbegin, rend, 0.0 ); - const auto index = std::distance( col.begin(), critical.base() - 1 ); - - if( critical == rend ) return 0.0; - - return 1 - swofTable.getSwColumn()[ index + 1 ]; - } - - static inline double critical_oil( const Sof2Table& sof2Table ) { - const auto& col = sof2Table.getKroColumn(); - const auto critical = std::upper_bound( col.begin(), col.end(), 0.0 ); - const auto index = std::distance( col.begin(), critical ); - - if( index == 0 || critical == col.end() ) return 0.0; - - return sof2Table.getSoColumn()[ index - 1 ]; - } - - static inline double critical_oil( const Sof3Table& sof3Table, const TableColumn& col ) { - const auto critical = std::upper_bound( col.begin(), col.end(), 0.0 ); - const auto index = std::distance( col.begin(), critical ); - - if( index == 0 || critical == col.end() ) return 0.0; - - return sof3Table.getSoColumn()[ index - 1 ]; - } - - static std::vector< double > - findCriticalOilWater(const TableManager& tm, - const Phases& ph) - { - const auto num_tables = tm.getTabdims().getNumSatTables(); - - if (! ph.active(::Opm::Phase::OIL) || - ! ph.active(::Opm::Phase::WATER)) - return std::vector(num_tables, 0.0); - - const auto& swofTables = tm.getSwofTables(); - const auto& sof2Tables = tm.getSof2Tables(); - const auto& sof3Tables = tm.getSof3Tables(); - - const auto famI = [&swofTables]( int i ) { - return critical_oil_water( swofTables.getTable< SwofTable >( i ) ); - }; - - const auto famII_2p = [&sof2Tables]( int i ) { - return critical_oil( sof2Tables.getTable< Sof2Table >( i ) ); - }; - - const auto famII_3p = [&sof3Tables]( int i ) { - const auto& tb = sof3Tables.getTable< Sof3Table >( i ); - return critical_oil( tb, tb.getKrowColumn() ); - }; - - switch( getSaturationFunctionFamily( tm, ph ) ) { - case SatfuncFamily::I: return fun::map( famI, fun::iota( num_tables ) ); - case SatfuncFamily::II: - return ph.active(::Opm::Phase::GAS) - ? fun::map( famII_3p, fun::iota( num_tables ) ) - : fun::map( famII_2p, fun::iota( num_tables ) ); - - default: throw std::domain_error("No valid saturation keyword family specified"); - } - } - - static inline double critical_oil_gas( const SgofTable& sgofTable ) { - const auto& col = sgofTable.getKrogColumn(); - - using reverse = std::reverse_iterator< decltype( col.begin() ) >; - auto rbegin = reverse( col.begin() + sgofTable.numRows() ); - auto rend = reverse( col.begin() ); - const auto critical = std::upper_bound( rbegin, rend, 0.0 ); - if( critical == rend ) { - return 0.0; - } - const auto index = std::distance( col.begin(), critical.base() - 1 ); - return 1.0 - sgofTable.getSgColumn()[ index + 1 ]; - } - - static inline double critical_oil_gas( const SlgofTable& sgofTable ) { - - const auto& col = sgofTable.getKrogColumn(); - const auto critical = std::upper_bound( col.begin(), col.end(), 0.0 ); - if (critical == col.end()) { - return 0.0; - } - const auto index = std::distance( col.begin(), critical - 1); - return sgofTable.getSlColumn()[ index ]; - } - - static std::vector< double > - findCriticalOilGas(const TableManager& tm, - const Phases& ph) - { - const auto num_tables = tm.getTabdims().getNumSatTables(); - - if (! ph.active(::Opm::Phase::OIL) || - ! ph.active(::Opm::Phase::GAS)) - return std::vector(num_tables, 0.0); - - const auto& sgofTables = tm.getSgofTables(); - const auto& slgofTables = tm.getSlgofTables(); - const auto& sof2Tables = tm.getSof2Tables(); - const auto& sof3Tables = tm.getSof3Tables(); - - const auto famI_sgof = [&sgofTables]( int i ) { - return critical_oil_gas( sgofTables.getTable< SgofTable >( i ) ); - }; - - const auto famI_slgof = [&slgofTables]( int i ) { - return critical_oil_gas( slgofTables.getTable< SlgofTable >( i ) ); - }; - - const auto famII_2p = [&sof2Tables]( int i ) { - return critical_oil( sof2Tables.getTable< Sof2Table >( i ) ); - }; - - const auto famII_3p = [&sof3Tables]( int i ) { - const auto& tb = sof3Tables.getTable< Sof3Table >( i ); - return critical_oil( tb, tb.getKrogColumn() ); - }; - - switch( getSaturationFunctionFamily( tm, ph ) ) { - case SatfuncFamily::I: - if( sgofTables.empty() && slgofTables.empty() ) - throw std::runtime_error( "Saturation keyword family I requires either sgof or slgof non-empty" ); - - if( !sgofTables.empty() ) - return fun::map( famI_sgof, fun::iota( num_tables ) ); - else - return fun::map( famI_slgof, fun::iota( num_tables ) ); - - case SatfuncFamily::II: - return ph.active(::Opm::Phase::WATER) - ? fun::map( famII_3p, fun::iota( num_tables ) ) - : fun::map( famII_2p, fun::iota( num_tables ) ); - - default: - throw std::domain_error("No valid saturation keyword family specified"); - } - } - - static std::vector< double > - findMaxKrg(const TableManager& tm, - const Phases& ph) - { - const auto num_tables = tm.getTabdims().getNumSatTables(); - - if (! ph.active(::Opm::Phase::GAS)) - return std::vector(num_tables, 0.0); - - const auto& sgofTables = tm.getSgofTables(); - const auto& slgofTables = tm.getSlgofTables(); - const auto& sgfnTables = tm.getSgfnTables(); - - const auto& famI_sgof = [&sgofTables]( int i ) { - return sgofTables.getTable< SgofTable >( i ).getKrgColumn().back(); - }; - - const auto& famI_slgof = [&slgofTables]( int i ) { - return slgofTables.getTable< SlgofTable >( i ).getKrgColumn().front(); - }; - - const auto& famII = [&sgfnTables]( int i ) { - return sgfnTables.getTable< SgfnTable >( i ).getKrgColumn().back(); - }; - - switch( getSaturationFunctionFamily( tm, ph ) ) { - case SatfuncFamily::I: - if( sgofTables.empty() && slgofTables.empty() ) - throw std::runtime_error( "Saturation keyword family I requires either sgof or slgof non-empty" ); - if( !sgofTables.empty() ) - return fun::map( famI_sgof, fun::iota( num_tables ) ); - else - return fun::map( famI_slgof, fun::iota( num_tables ) ); - case SatfuncFamily::II: - return fun::map( famII, fun::iota( num_tables ) ); - default: - throw std::domain_error("No valid saturation keyword family specified"); - } - } - - static std::vector< double > - findKrgr(const TableManager& tm, - const Phases& ph) - { - const auto num_tables = tm.getTabdims().getNumSatTables(); - - if (! ph.active(::Opm::Phase::GAS)) - return std::vector(num_tables, 0.0); - - const auto& sgofTables = tm.getSgofTables(); - const auto& slgofTables = tm.getSlgofTables(); - const auto& sgfnTables = tm.getSgfnTables(); - - const auto& famI_sgof = [&sgofTables]( int i ) { - return sgofTables.getTable< SgofTable >( i ).getKrgColumn().front(); - }; - - const auto& famI_slgof = [&slgofTables]( int i ) { - return slgofTables.getTable< SlgofTable >( i ).getKrgColumn().back(); - }; - - const auto& famII = [&sgfnTables]( int i ) { - return sgfnTables.getTable< SgfnTable >( i ).getKrgColumn().back(); - }; - - switch( getSaturationFunctionFamily( tm, ph ) ) { - case SatfuncFamily::I: - if( sgofTables.empty() && slgofTables.empty() ) - throw std::runtime_error( "Saturation keyword family I requires either sgof or slgof non-empty" ); - if( !sgofTables.empty() ) - return fun::map( famI_sgof, fun::iota( num_tables ) ); - else - return fun::map( famI_slgof, fun::iota( num_tables ) ); - case SatfuncFamily::II: - return fun::map( famII, fun::iota( num_tables ) ); - default: - throw std::domain_error("No valid saturation keyword family specified"); - } - } - - static std::vector< double > - findKrwr(const TableManager& tm, - const Phases& ph) - { - const auto num_tables = tm.getTabdims().getNumSatTables(); - - if (! ph.active(::Opm::Phase::WATER)) - return std::vector(num_tables, 0.0); - - const auto& swofTables = tm.getSwofTables(); - const auto& swfnTables = tm.getSwfnTables(); - - const auto& famI = [&swofTables]( int i ) { - return swofTables.getTable< SwofTable >( i ).getKrwColumn().front(); - }; - - const auto& famII = [&swfnTables]( int i ) { - return swfnTables.getTable< SwfnTable >( i ).getKrwColumn().front(); - }; - - switch( getSaturationFunctionFamily( tm, ph ) ) { - case SatfuncFamily::I: - return fun::map( famI, fun::iota( num_tables ) ); - case SatfuncFamily::II: - return fun::map( famII, fun::iota( num_tables ) ); - default: - throw std::domain_error("No valid saturation keyword family specified"); - } - } - - static std::vector< double > - findKrorw(const TableManager& tm, - const Phases& ph) - { - const auto num_tables = tm.getTabdims().getNumSatTables(); - - if (! ph.active(::Opm::Phase::OIL) || - ! ph.active(::Opm::Phase::WATER)) - return std::vector(num_tables, 0.0); - - const auto& swofTables = tm.getSwofTables(); - const auto& sof2Tables = tm.getSof2Tables(); - const auto& sof3Tables = tm.getSof3Tables(); - - const auto& famI = [&swofTables]( int i ) { - const auto& swofTable = swofTables.getTable< SwofTable >( i ); - const auto& krwCol = swofTable.getKrwColumn(); - const auto crit = std::upper_bound( krwCol.begin(), krwCol.end(), 0.0 ); - const auto index = std::distance( krwCol.begin(), crit ); - - if( crit == krwCol.end() ) return 0.0; - - return swofTable.getKrowColumn()[ index - 1 ]; - }; - - const auto crit_water = findCriticalWater( tm, ph ); - const auto min_gas = findMinGasSaturation( tm, ph ); - const auto& famII_3p = [&sof3Tables,&crit_water,&min_gas]( int i ) { - const double OilSatAtcritialWaterSat = 1.0 - crit_water[ i ] - min_gas[ i ]; - return sof3Tables.getTable< Sof3Table >( i ) - .evaluate("KROW", OilSatAtcritialWaterSat); - }; - - const auto famII_2p = [&sof2Tables,&crit_water,&min_gas]( int i ) { - const double OilSatAtcritialWaterSat = 1.0 - crit_water[ i ] - min_gas[ i ]; - return sof2Tables.getTable< Sof2Table >( i ) - .evaluate("KRO", OilSatAtcritialWaterSat); - }; - - switch( getSaturationFunctionFamily( tm, ph ) ) { - case SatfuncFamily::I: - return fun::map( famI, fun::iota( num_tables ) ); - case SatfuncFamily::II: - return ph.active(::Opm::Phase::GAS) - ? fun::map( famII_3p, fun::iota( num_tables ) ) - : fun::map( famII_2p, fun::iota( num_tables ) ); - default: - throw std::domain_error("No valid saturation keyword family specified"); - } - } - - static std::vector< double > - findKrorg(const TableManager& tm, - const Phases& ph) - { - const auto num_tables = tm.getTabdims().getNumSatTables(); - - if (! ph.active(::Opm::Phase::OIL) || - ! ph.active(::Opm::Phase::GAS)) - return std::vector(num_tables, 0.0); - - const auto& sgofTables = tm.getSgofTables(); - const auto& slgofTables = tm.getSlgofTables(); - const auto& sof2Tables = tm.getSof2Tables(); - const auto& sof3Tables = tm.getSof3Tables(); - - const auto& famI_sgof = [&sgofTables]( int i ) { - const auto& sgofTable = sgofTables.getTable< SgofTable >( i ); - const auto& krgCol = sgofTable.getKrgColumn(); - const auto crit = std::upper_bound( krgCol.begin(), krgCol.end(), 0.0 ); - const auto index = std::distance( krgCol.begin(), crit ); - - if( crit == krgCol.end() ) return 0.0; - - return sgofTable.getKrogColumn()[ index - 1 ]; - }; - - const auto& famI_slgof = [&slgofTables]( int i ) { - const auto& slgofTable = slgofTables.getTable< SlgofTable >( i ); - const auto& col = slgofTable.getKrgColumn(); - using reverse = std::reverse_iterator< decltype( col.begin() ) >; - auto rbegin = reverse( col.begin() + slgofTable.numRows() ); - auto rend = reverse( col.begin() ); - const auto crit = std::upper_bound( rbegin, rend, 0.0 ); - // base() points to the next element in the forward order - const auto index = std::distance( col.begin(), crit.base()); - - if( crit == rend ) return 0.0; - - return slgofTable.getKrogColumn()[ index ]; - }; - - const auto crit_gas = findCriticalGas( tm, ph ); - const auto min_water = findMinWaterSaturation( tm, ph ); - const auto& famII_3p = [&sof3Tables,&crit_gas,&min_water]( int i ) { - const double OilSatAtcritialGasSat = 1.0 - crit_gas[ i ] - min_water[ i ]; - return sof3Tables.getTable< Sof3Table >( i ) - .evaluate("KROG", OilSatAtcritialGasSat); - }; - - const auto famII_2p = [&sof2Tables,&crit_gas,&min_water]( int i ) { - const double OilSatAtcritialGasSat = 1.0 - crit_gas[ i ] - min_water[ i ]; - return sof2Tables.getTable< Sof2Table >( i ) - .evaluate("KRO", OilSatAtcritialGasSat); - }; - - switch( getSaturationFunctionFamily( tm, ph ) ) { - case SatfuncFamily::I: - if( sgofTables.empty() && slgofTables.empty() ) - throw std::runtime_error( "Saturation keyword family I requires either sgof or slgof non-empty" ); - if( !sgofTables.empty() ) - return fun::map( famI_sgof, fun::iota( num_tables ) ); - else - return fun::map( famI_slgof, fun::iota( num_tables ) ); - case SatfuncFamily::II: - return ph.active(::Opm::Phase::WATER) - ? fun::map( famII_3p, fun::iota( num_tables ) ) - : fun::map( famII_2p, fun::iota( num_tables ) ); - default: - throw std::domain_error("No valid saturation keyword family specified"); - } - } - - /* find the maximum output values of the water-oil system. the maximum oil - * relperm is possibly wrong because we have two oil relperms in a threephase - * system. the documentation is very ambiguos here, though: it says that the - * oil relperm at the maximum oil saturation is scaled according to maximum - * specified the KRO keyword. the first part of the statement points at - * scaling the resultant threephase oil relperm, but then the gas saturation - * is not taken into account which means that some twophase quantity must be - * scaled. - */ - static std::vector< double > - findMaxPcog(const TableManager& tm, - const Phases& ph) - { - const auto num_tables = tm.getTabdims().getNumSatTables(); - - if (! ph.active(::Opm::Phase::OIL) || - ! ph.active(::Opm::Phase::GAS)) - return std::vector(num_tables, 0.0); - - const auto& sgofTables = tm.getSgofTables(); - const auto& slgofTables = tm.getSlgofTables(); - const auto& sgfnTables = tm.getSgfnTables(); - - const auto& famI_sgof = [&sgofTables]( int i ) { - return sgofTables.getTable< SgofTable >( i ).getPcogColumn().back(); - }; - - const auto& famI_slgof = [&slgofTables]( int i ) { - return slgofTables.getTable< SlgofTable >( i ).getPcogColumn().front(); - }; - - const auto& famII = [&sgfnTables]( int i ) { - return sgfnTables.getTable< SgfnTable >( i ).getPcogColumn().back(); - }; - - switch( getSaturationFunctionFamily( tm, ph ) ) { - case SatfuncFamily::I: - if( sgofTables.empty() && slgofTables.empty() ) - throw std::runtime_error( "Saturation keyword family I requires either sgof or slgof non-empty" ); - if( !sgofTables.empty() ) - return fun::map( famI_sgof, fun::iota( num_tables ) ); - else - return fun::map( famI_slgof, fun::iota( num_tables ) ); - case SatfuncFamily::II: - return fun::map( famII, fun::iota( num_tables ) ); - default: - throw std::domain_error("No valid saturation keyword family specified"); - } - } - - static std::vector< double > - findMaxPcow(const TableManager& tm, - const Phases& ph) - { - const auto num_tables = tm.getTabdims().getNumSatTables(); - - if (! ph.active(::Opm::Phase::OIL) || - ! ph.active(::Opm::Phase::WATER)) - return std::vector(num_tables, 0.0); - - const auto& swofTables = tm.getSwofTables(); - const auto& swfnTables = tm.getSwfnTables(); - - const auto& famI = [&swofTables]( int i ) { - return swofTables.getTable< SwofTable >( i ).getPcowColumn().front(); - }; - - const auto& famII = [&swfnTables]( int i ) { - return swfnTables.getTable< SwfnTable >( i ).getPcowColumn().front(); - }; - - switch( getSaturationFunctionFamily( tm, ph ) ) { - case SatfuncFamily::I: - return fun::map( famI, fun::iota( num_tables ) ); - case SatfuncFamily::II: - return fun::map( famII, fun::iota( num_tables ) ); - default: - throw std::domain_error("No valid saturation keyword family specified"); - } - } - - static std::vector< double > - findMaxKro(const TableManager& tm, - const Phases& ph) - { - const auto num_tables = tm.getTabdims().getNumSatTables(); - - if (! ph.active(::Opm::Phase::OIL)) - return std::vector(num_tables, 0.0); - - const auto wat = ph.active(::Opm::Phase::WATER); - - const auto& other_f1 = wat ? tm.getSwofTables() : tm.getSgofTables(); - const auto& sof2Tables = tm.getSof2Tables(); - const auto& sof3Tables = tm.getSof3Tables(); - - const auto& famI = [&other_f1,wat]( int i ) { - // In O/W/G runs this relies on Krog(Sg=0) == Krow(Sw=Swco), - // meaning that the first entry in the KRO column--in each - // saturation region--is equal in keywords SGOF and SWOF. - return wat - ? other_f1.getTable< SwofTable >( i ).getKrowColumn().front() - : other_f1.getTable< SgofTable >( i ).getKrogColumn().front(); - }; - - const auto& famII_2p = [&sof2Tables]( int i ) { - return sof2Tables.getTable< Sof2Table >( i ).getKroColumn().back(); - }; - - const auto& famII_3p = [&sof3Tables]( int i ) { - return sof3Tables.getTable< Sof3Table >( i ).getKrowColumn().back(); - }; - - switch( getSaturationFunctionFamily( tm, ph ) ) { - case SatfuncFamily::I: - return fun::map( famI, fun::iota( num_tables ) ); - case SatfuncFamily::II: - return ph.active(::Opm::Phase::GAS) && ph.active(::Opm::Phase::WATER) - ? fun::map( famII_3p, fun::iota( num_tables ) ) - : fun::map( famII_2p, fun::iota( num_tables ) ); - default: - throw std::domain_error("No valid saturation keyword family specified"); - } - } - - static std::vector< double > - findMaxKrw(const TableManager& tm, - const Phases& ph) - { - const auto num_tables = tm.getTabdims().getNumSatTables(); - - if (! ph.active(::Opm::Phase::WATER)) - return std::vector(num_tables, 0.0); - - const auto& swofTables = tm.getSwofTables(); - const auto& swfnTables = tm.getSwfnTables(); - - const auto& famI = [&swofTables]( int i ) { - return swofTables.getTable< SwofTable >( i ).getKrwColumn().back(); - }; - - const auto& famII = [&swfnTables]( int i ) { - return swfnTables.getTable< SwfnTable >( i ).getKrwColumn().back(); - }; - - switch( getSaturationFunctionFamily( tm, ph ) ) { - case SatfuncFamily::I: - return fun::map( famI, fun::iota( num_tables ) ); - case SatfuncFamily::II: - return fun::map( famII, fun::iota( num_tables ) ); - default: - throw std::domain_error("No valid saturation keyword family specified"); - } - } - - static double selectValue( const TableContainer& depthTables, - int tableIdx, - const std::string& columnName, - double cellDepth, - double fallbackValue, - bool useOneMinusTableValue) { - - if( tableIdx < 0 ) return fallbackValue; - - const auto& table = depthTables.getTable( tableIdx ); - - if( tableIdx >= int( depthTables.size() ) ) - throw std::invalid_argument("Not enough tables!"); - - // evaluate the table at the cell depth - const double value = table.evaluate( columnName, cellDepth ); - - // a column can be fully defaulted. In this case, eval() returns a NaN - // and we have to use the data from saturation tables - if( !std::isfinite( value ) ) return fallbackValue; - if( useOneMinusTableValue ) return 1 - value; - return value; - } - - - static std::vector< double > satnumApply( size_t size, - const std::string& columnName, - const std::vector< double >& fallbackValues, - const TableManager& tableManager, - const std::vector& cell_depth, - const std::vector * actnum, - const std::vector& satnum_data, - const std::vector& endnum_data, - bool useOneMinusTableValue ) { - - - std::vector< double > values( size, 0 ); - // Actually assign the defaults. If the ENPVD keyword was specified in the deck, - // this currently cannot be done because we would need the Z-coordinate of the - // cell and we would need to know how the simulator wants to interpolate between - // sampling points. Both of these are outside the scope of opm-parser, so we just - // assign a NaN in this case... - const bool useEnptvd = tableManager.useEnptvd(); - const auto& enptvdTables = tableManager.getEnptvdTables(); - for( size_t cellIdx = 0; cellIdx < values.size(); cellIdx++ ) { - int satTableIdx = satnum_data[cellIdx] - 1; - int endNum = endnum_data[cellIdx] - 1; - - if (actnum && ((*actnum)[cellIdx] == 0)) { - // Pick from appropriate saturation region if defined - // in this cell, else use region 1 (satTableIdx == 0). - values[cellIdx] = (satTableIdx >= 0) - ? fallbackValues[satTableIdx] : fallbackValues[0]; - continue; - } - - // Active cell better have {SAT,END}NUM > 0. - if ((satTableIdx < 0) || (endNum < 0)) { - throw std::invalid_argument { - "Region Index Out of Bounds in Active Cell " - + std::to_string(cellIdx) + ". SATNUM = " - + std::to_string(satTableIdx + 1) + ", ENDNUM = " - + std::to_string(endNum + 1) - }; - } - - values[cellIdx] = selectValue(enptvdTables, - (useEnptvd && endNum >= 0) ? endNum : -1, - columnName, - cell_depth[cellIdx], - fallbackValues[ satTableIdx ], - useOneMinusTableValue); - } - - return values; - } - - - - static std::vector< double > imbnumApply( size_t size, - const std::string& columnName, - const std::vector< double >& fallBackValues, - const TableManager& tableManager, - const std::vector& cell_depth, - const std::vector * actnum, - const std::vector& imbnum_data, - const std::vector& endnum_data, - bool useOneMinusTableValue ) { - - std::vector< double > values( size, 0 ); - - // Actually assign the defaults. if the ENPVD keyword was specified in the deck, - // this currently cannot be done because we would need the Z-coordinate of the - // cell and we would need to know how the simulator wants to interpolate between - // sampling points. Both of these are outside the scope of opm-parser, so we just - // assign a NaN in this case... - const bool useImptvd = tableManager.useImptvd(); - const TableContainer& imptvdTables = tableManager.getImptvdTables(); - for( size_t cellIdx = 0; cellIdx < values.size(); cellIdx++ ) { - int imbTableIdx = imbnum_data[ cellIdx ] - 1; - int endNum = endnum_data[ cellIdx ] - 1; - - if (actnum && ((*actnum)[cellIdx] == 0)) { - // Pick from appropriate saturation region if defined - // in this cell, else use region 1 (imbTableIdx == 0). - values[cellIdx] = (imbTableIdx >= 0) - ? fallBackValues[imbTableIdx] : fallBackValues[0]; - continue; - } - - // Active cell better have {IMB,END}NUM > 0. - if ((imbTableIdx < 0) || (endNum < 0)) { - throw std::invalid_argument { - "Region Index Out of Bounds in Active Cell " - + std::to_string(cellIdx) + ". IMBNUM = " - + std::to_string(imbTableIdx + 1) + ", ENDNUM = " - + std::to_string(endNum + 1) - }; - } - - values[cellIdx] = selectValue(imptvdTables, - (useImptvd && endNum >= 0) ? endNum : -1, - columnName, - cell_depth[cellIdx], - fallBackValues[imbTableIdx], - useOneMinusTableValue); - } - - return values; - } - - -namespace satfunc { - - - std::vector< double > SGLEndpoint( const TableManager & tableManager, - const Phases& phases, - const std::vector& cell_depth, - const std::vector& satnum, - const std::vector& endnum) - { - const auto min_gas = findMinGasSaturation( tableManager, phases ); - return satnumApply( cell_depth.size(), "SGCO", min_gas, tableManager, - cell_depth, nullptr, satnum, endnum, false ); - } - - std::vector< double > ISGLEndpoint( const TableManager & tableManager, - const Phases& phases, - const std::vector& cell_depth, - const std::vector& imbnum, - const std::vector& endnum) - { - const auto min_gas = findMinGasSaturation( tableManager, phases ); - return imbnumApply( cell_depth.size(), "SGCO", min_gas, tableManager, - cell_depth, nullptr, imbnum, endnum, false ); - } - - std::vector< double > SGUEndpoint( const TableManager & tableManager, - const Phases& phases, - const std::vector& cell_depth, - const std::vector& satnum, - const std::vector& endnum) - { - const auto max_gas = findMaxGasSaturation( tableManager, phases ); - return satnumApply( cell_depth.size(), "SGMAX", max_gas, tableManager, - cell_depth, nullptr, satnum, endnum, false ); - } - - std::vector< double > ISGUEndpoint( const TableManager & tableManager, - const Phases& phases, - const std::vector& cell_depth, - const std::vector& imbnum, - const std::vector& endnum) - { - const auto max_gas = findMaxGasSaturation( tableManager, phases ); - return imbnumApply( cell_depth.size(), "SGMAX", max_gas, tableManager, - cell_depth, nullptr, imbnum, endnum, false ); - } - - std::vector< double > SWLEndpoint( const TableManager & tableManager, - const Phases& phases, - const std::vector& cell_depth, - const std::vector& satnum, - const std::vector& endnum) - { - const auto min_water = findMinWaterSaturation( tableManager, phases ); - return satnumApply( cell_depth.size(), "SWCO", min_water, tableManager, - cell_depth, nullptr, satnum, endnum, false ); - } - - std::vector< double > ISWLEndpoint( const TableManager & tableManager, - const Phases& phases, - const std::vector& cell_depth, - const std::vector& imbnum, - const std::vector& endnum) - { - const auto min_water = findMinWaterSaturation( tableManager, phases ); - return imbnumApply( cell_depth.size(), "SWCO", min_water, tableManager, - cell_depth, nullptr, imbnum, endnum, false ); - } - - std::vector< double > SWUEndpoint( const TableManager & tableManager, - const Phases& phases, - const std::vector& cell_depth, - const std::vector& satnum, - const std::vector& endnum) - { - const auto max_water = findMaxWaterSaturation( tableManager, phases ); - return satnumApply( cell_depth.size(), "SWMAX", max_water, tableManager, - cell_depth, nullptr, satnum, endnum, true ); - } - - std::vector< double > ISWUEndpoint( const TableManager & tableManager, - const Phases& phases, - const std::vector& cell_depth, - const std::vector& imbnum, - const std::vector& endnum) - { - const auto max_water = findMaxWaterSaturation( tableManager, phases ); - return imbnumApply( cell_depth.size(), "SWMAX", max_water, tableManager, - cell_depth, nullptr, imbnum, endnum, true); - } - - std::vector< double > SGCREndpoint( const TableManager & tableManager, - const Phases& phases, - const std::vector& cell_depth, - const std::vector& satnum, - const std::vector& endnum) - { - const auto crit_gas = findCriticalGas( tableManager, phases ); - return satnumApply( cell_depth.size(), "SGCRIT", crit_gas, tableManager, - cell_depth, nullptr, satnum, endnum, false ); - } - - std::vector< double > ISGCREndpoint( const TableManager & tableManager, - const Phases& phases, - const std::vector& cell_depth, - const std::vector& imbnum, - const std::vector& endnum) - { - const auto crit_gas = findCriticalGas( tableManager, phases ); - return imbnumApply( cell_depth.size(), "SGCRIT", crit_gas, tableManager, - cell_depth, nullptr, imbnum, endnum, false ); - } - - std::vector< double > SOWCREndpoint( const TableManager & tableManager, - const Phases& phases, - const std::vector& cell_depth, - const std::vector& satnum, - const std::vector& endnum) - { - const auto oil_water = findCriticalOilWater( tableManager, phases ); - return satnumApply( cell_depth.size(), "SOWCRIT", oil_water, tableManager, - cell_depth, nullptr, satnum, endnum, false ); - } - - std::vector< double > ISOWCREndpoint( const TableManager & tableManager, - const Phases& phases, - const std::vector& cell_depth, - const std::vector& imbnum, - const std::vector& endnum) - { - const auto oil_water = findCriticalOilWater( tableManager, phases ); - return imbnumApply( cell_depth.size(), "SOWCRIT", oil_water, tableManager, - cell_depth, nullptr, imbnum, endnum, false ); - } - - std::vector< double > SOGCREndpoint( const TableManager & tableManager, - const Phases& phases, - const std::vector& cell_depth, - const std::vector& satnum, - const std::vector& endnum) - { - const auto crit_oil_gas = findCriticalOilGas( tableManager, phases ); - return satnumApply( cell_depth.size(), "SOGCRIT", crit_oil_gas, tableManager, - cell_depth, nullptr, satnum, endnum, false ); - } - - std::vector< double > ISOGCREndpoint( const TableManager & tableManager, - const Phases& phases, - const std::vector& cell_depth, - const std::vector& imbnum, - const std::vector& endnum) - { - const auto crit_oil_gas = findCriticalOilGas( tableManager, phases ); - return imbnumApply( cell_depth.size(), "SOGCRIT", crit_oil_gas, tableManager, - cell_depth, nullptr, imbnum, endnum, false ); - } - - std::vector< double > SWCREndpoint( const TableManager & tableManager, - const Phases& phases, - const std::vector& cell_depth, - const std::vector& satnum, - const std::vector& endnum) - { - const auto crit_water = findCriticalWater( tableManager, phases ); - return satnumApply( cell_depth.size(), "SWCRIT", crit_water, tableManager, - cell_depth, nullptr, satnum, endnum, false ); - } - - std::vector< double > ISWCREndpoint( const TableManager & tableManager, - const Phases& phases, - const std::vector& cell_depth, - const std::vector& imbnum, - const std::vector& endnum) - { - const auto crit_water = findCriticalWater( tableManager, phases ); - return imbnumApply( cell_depth.size(), "SWCRIT", crit_water, tableManager, - cell_depth, nullptr, imbnum, endnum, false ); - } - - std::vector< double > PCWEndpoint( const TableManager & tableManager, - const Phases& phases, - const std::vector& cell_depth, - const std::vector& satnum, - const std::vector& endnum) - { - const auto max_pcow = findMaxPcow( tableManager, phases ); - return satnumApply( cell_depth.size(), "PCW", max_pcow, tableManager, - cell_depth, nullptr, satnum, endnum, false ); - } - - std::vector< double > IPCWEndpoint( const TableManager & tableManager, - const Phases& phases, - const std::vector& cell_depth, - const std::vector& imbnum, - const std::vector& endnum) - { - const auto max_pcow = findMaxPcow( tableManager, phases ); - return imbnumApply( cell_depth.size(), "IPCW", max_pcow, tableManager, - cell_depth, nullptr, imbnum, endnum, false ); - } - - std::vector< double > PCGEndpoint( const TableManager & tableManager, - const Phases& phases, - const std::vector& cell_depth, - const std::vector& satnum, - const std::vector& imbnum) - { - const auto max_pcog = findMaxPcog( tableManager, phases ); - return satnumApply( cell_depth.size(), "PCG", max_pcog, tableManager, - cell_depth, nullptr, satnum, imbnum, false ); - } - - std::vector< double > IPCGEndpoint( const TableManager & tableManager, - const Phases& phases, - const std::vector& cell_depth, - const std::vector& imbnum, - const std::vector& endnum) - { - const auto max_pcog = findMaxPcog( tableManager, phases ); - return imbnumApply( cell_depth.size(), "IPCG", max_pcog, tableManager, - cell_depth, nullptr, imbnum, endnum, false ); - } - - std::vector< double > KRWEndpoint( const TableManager & tableManager, - const Phases& phases, - const std::vector& cell_depth, - const std::vector& satnum, - const std::vector& endnum) - { - const auto max_krw = findMaxKrw( tableManager, phases ); - return satnumApply( cell_depth.size(), "KRW", max_krw, tableManager, - cell_depth, nullptr, satnum, endnum, false ); - } - - std::vector< double > IKRWEndpoint( const TableManager & tableManager, - const Phases& phases, - const std::vector& cell_depth, - const std::vector& imbnum, - const std::vector& endnum) - { - const auto krwr = findKrwr( tableManager, phases ); - return imbnumApply( cell_depth.size(), "IKRW", krwr, tableManager, - cell_depth, nullptr, imbnum, endnum, false ); - } - - std::vector< double > KRWREndpoint( const TableManager & tableManager, - const Phases& phases, - const std::vector& cell_depth, - const std::vector& satnum, - const std::vector& endnum) - { - const auto krwr = findKrwr( tableManager, phases ); - return satnumApply( cell_depth.size(), "KRWR", krwr, tableManager, - cell_depth, nullptr, satnum, endnum, false ); - } - - std::vector< double > IKRWREndpoint( const TableManager & tableManager, - const Phases& phases, - const std::vector& cell_depth, - const std::vector& imbnum, - const std::vector& endnum) - { - const auto krwr = findKrwr( tableManager, phases ); - return imbnumApply( cell_depth.size(), "IKRWR", krwr, tableManager, - cell_depth, nullptr, imbnum, endnum, false ); - } - - std::vector< double > KROEndpoint( const TableManager & tableManager, - const Phases& phases, - const std::vector& cell_depth, - const std::vector& satnum, - const std::vector& endnum) - { - const auto max_kro = findMaxKro( tableManager, phases ); - return satnumApply( cell_depth.size(), "KRO", max_kro, tableManager, - cell_depth, nullptr, satnum, endnum, false ); - } - - std::vector< double > IKROEndpoint( const TableManager & tableManager, - const Phases& phases, - const std::vector& cell_depth, - const std::vector& imbnum, - const std::vector& endnum) - { - const auto max_kro = findMaxKro( tableManager,phases ); - return imbnumApply( cell_depth.size(), "IKRO", max_kro, tableManager, - cell_depth, nullptr, imbnum, endnum, false ); - } - - std::vector< double > KRORWEndpoint( const TableManager & tableManager, - const Phases& phases, - const std::vector& cell_depth, - const std::vector& satnum, - const std::vector& endnum) - { - const auto krorw = findKrorw( tableManager, phases ); - return satnumApply( cell_depth.size(), "KRORW", krorw, tableManager, - cell_depth, nullptr, satnum, endnum, false ); - } - - std::vector< double > IKRORWEndpoint( const TableManager & tableManager, - const Phases& phases, - const std::vector& cell_depth, - const std::vector& imbnum, - const std::vector& endnum) - { - const auto krorw = findKrorw( tableManager, phases ); - return imbnumApply( cell_depth.size(), "IKRORW", krorw, tableManager, - cell_depth, nullptr, imbnum, endnum, false ); - } - - std::vector< double > KRORGEndpoint( const TableManager & tableManager, - const Phases& phases, - const std::vector& cell_depth, - const std::vector& satnum, - const std::vector& endnum) - { - const auto krorg = findKrorg( tableManager, phases ); - return satnumApply( cell_depth.size(), "KRORG", krorg, tableManager, - cell_depth, nullptr, satnum, endnum, false ); - } - - std::vector< double > IKRORGEndpoint( const TableManager & tableManager, - const Phases& phases, - const std::vector& cell_depth, - const std::vector& imbnum, - const std::vector& endnum) - { - const auto krorg = findKrorg( tableManager, phases ); - return imbnumApply( cell_depth.size(), "IKRORG", krorg, tableManager, - cell_depth, nullptr, imbnum, endnum, false ); - } - - std::vector< double > KRGEndpoint( const TableManager & tableManager, - const Phases& phases, - const std::vector& cell_depth, - const std::vector& satnum, - const std::vector& endnum) - { - const auto max_krg = findMaxKrg( tableManager, phases ); - return satnumApply( cell_depth.size(), "KRG", max_krg, tableManager, - cell_depth, nullptr, satnum, endnum, false ); - } - - std::vector< double > IKRGEndpoint( const TableManager & tableManager, - const Phases& phases, - const std::vector& cell_depth, - const std::vector& imbnum, - const std::vector& endnum) - { - const auto max_krg = findMaxKrg( tableManager, phases ); - return imbnumApply( cell_depth.size(), "IKRG", max_krg, tableManager, - cell_depth, nullptr, imbnum, endnum, false ); - } - - std::vector< double > KRGREndpoint( const TableManager & tableManager, - const Phases& phases, - const std::vector& cell_depth, - const std::vector& satnum, - const std::vector& endnum) - { - const auto krgr = findKrgr( tableManager, phases ); - return satnumApply( cell_depth.size(), "KRGR", krgr, tableManager, - cell_depth, nullptr, satnum, endnum, false ); - } - - std::vector< double > IKRGREndpoint( const TableManager & tableManager, - const Phases& phases, - const std::vector& cell_depth, - const std::vector& imbnum, - const std::vector& endnum) - { - const auto krgr = findKrgr( tableManager, phases ); - return imbnumApply( cell_depth.size(), "IKRGR", krgr, tableManager, - cell_depth, nullptr, imbnum, endnum, false ); - } - - - std::vector init(const std::string& keyword, - const TableManager& tables, - const Phases& phases, - const std::vector& cell_depth, - const std::vector& num, - const std::vector& endnum) - { - using func_type = decltype(&IKRGEndpoint); - -#define dirfunc(base, func) {base, func}, \ - {base "X", func}, {base "X-", func}, \ - {base "Y", func}, {base "Y-", func}, \ - {base "Z", func}, {base "Z-", func} - - static const std::map func_table = { - // Drainage Imbibition - {"SGLPC", SGLEndpoint}, {"ISGLPC", ISGLEndpoint}, - {"SWLPC", SWLEndpoint}, {"ISWLPC", ISWLEndpoint}, - - dirfunc("SGL", SGLEndpoint), dirfunc("ISGL", ISGLEndpoint), - dirfunc("SGU", SGUEndpoint), dirfunc("ISGU", ISGUEndpoint), - dirfunc("SWL", SWLEndpoint), dirfunc("ISWL", ISWLEndpoint), - dirfunc("SWU", SWUEndpoint), dirfunc("ISWU", ISWUEndpoint), - - dirfunc("SGCR", SGCREndpoint), dirfunc("ISGCR", ISGCREndpoint), - dirfunc("SOGCR", SOGCREndpoint), dirfunc("ISOGCR", ISOGCREndpoint), - dirfunc("SOWCR", SOWCREndpoint), dirfunc("ISOWCR", ISOWCREndpoint), - dirfunc("SWCR", SWCREndpoint), dirfunc("ISWCR", ISWCREndpoint), - - dirfunc("PCG", PCGEndpoint), dirfunc("IPCG", IPCGEndpoint), - dirfunc("PCW", PCWEndpoint), dirfunc("IPCW", IPCWEndpoint), - - dirfunc("KRG", KRGEndpoint), dirfunc("IKRG", IKRGEndpoint), - dirfunc("KRGR", KRGREndpoint), dirfunc("IKRGR", IKRGREndpoint), - dirfunc("KRO", KROEndpoint), dirfunc("IKRO", IKROEndpoint), - dirfunc("KRORW", KRORWEndpoint), dirfunc("IKRORW", IKRORWEndpoint), - dirfunc("KRORG", KRORGEndpoint), dirfunc("IKRORG", IKRORGEndpoint), - dirfunc("KRW", KRWEndpoint), dirfunc("IKRW", IKRWEndpoint), - dirfunc("KRWR", KRWREndpoint), dirfunc("IKRWR", IKRWREndpoint), - }; - -#undef dirfunc - - auto func = func_table.find(keyword); - if (func == func_table.end()) - throw std::invalid_argument { - "Unsupported saturation function scaling '" - + keyword + '\'' - }; - - return func->second(tables, phases, cell_depth, num, endnum); - } -} // namespace satfunc -} // namespace Opm diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/TransMult.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/TransMult.cpp deleted file mode 100644 index 657e8c7fd7..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/TransMult.cpp +++ /dev/null @@ -1,162 +0,0 @@ -/* - Copyright 2014 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - - -namespace Opm { - - TransMult::TransMult(const GridDims& dims, const Deck& deck, const FieldPropsManager& fp) : - m_nx( dims.getNX()), - m_ny( dims.getNY()), - m_nz( dims.getNZ()), - m_names( { { FaceDir::XPlus, "MULTX" }, - { FaceDir::YPlus, "MULTY" }, - { FaceDir::ZPlus, "MULTZ" }, - { FaceDir::XMinus, "MULTX-" }, - { FaceDir::YMinus, "MULTY-" }, - { FaceDir::ZMinus, "MULTZ-" }}), - m_multregtScanner( dims, &fp, deck.getKeywordList( "MULTREGT" )) - { - EDITSection edit_section(deck); - if (edit_section.hasKeyword("MULTREGT")) { - std::string msg = -R"(This deck has the MULTREGT keyword located in the EDIT section. Note that: - 1) The MULTREGT keyword from EDIT section will be applied. - 2) It is recommended to place MULTREGT in the GRID section.)"; - - OpmLog::warning(msg); - } - } - - TransMult TransMult::serializeObject() - { - TransMult result; - result.m_nx = 1; - result.m_ny = 2; - result.m_nz = 3; - result.m_trans = {{FaceDir::YPlus, {4.0, 5.0}}}; - result.m_names = {{FaceDir::ZPlus, "test1"}}; - result.m_multregtScanner = MULTREGTScanner::serializeObject(); - - return result; - } - - void TransMult::assertIJK(size_t i , size_t j , size_t k) const { - if ((i >= m_nx) || (j >= m_ny) || (k >= m_nz)) - throw std::invalid_argument("Invalid ijk"); - } - - - size_t TransMult::getGlobalIndex(size_t i , size_t j , size_t k) const { - assertIJK(i,j,k); - return i + j*m_nx + k*m_nx*m_ny; - } - - - double TransMult::getMultiplier(size_t globalIndex, FaceDir::DirEnum faceDir) const { - if (globalIndex < m_nx * m_ny * m_nz) - return this->getMultiplier__(globalIndex , faceDir); - else - throw std::invalid_argument("Invalid global index"); - } - - double TransMult::getMultiplier__(size_t globalIndex, FaceDir::DirEnum faceDir) const { - if (hasDirectionProperty( faceDir )) { - const auto& data = m_trans.at(faceDir); - return data[globalIndex]; - } else - return 1.0; - } - - - - - double TransMult::getMultiplier(size_t i , size_t j , size_t k, FaceDir::DirEnum faceDir) const { - size_t globalIndex = this->getGlobalIndex(i,j,k); - return getMultiplier__( globalIndex , faceDir ); - } - - double TransMult::getRegionMultiplier(size_t globalCellIndex1, size_t globalCellIndex2, FaceDir::DirEnum faceDir) const { - return m_multregtScanner.getRegionMultiplier(globalCellIndex1, globalCellIndex2, faceDir); - } - - bool TransMult::hasDirectionProperty(FaceDir::DirEnum faceDir) const { - return m_trans.count(faceDir) == 1; - } - - - std::vector& TransMult::getDirectionProperty(FaceDir::DirEnum faceDir) { - if (m_trans.count(faceDir) == 0) { - std::size_t global_size = this->m_nx * this->m_ny * this->m_nz; - m_trans[faceDir] = std::vector(global_size, 1); - } - - return m_trans.at( faceDir ); - } - - void TransMult::applyMULT(const std::vector& srcData, FaceDir::DirEnum faceDir) - { - auto& dstProp = this->getDirectionProperty(faceDir); - for (size_t i = 0; i < srcData.size(); ++i) - dstProp[i] *= srcData[i]; - } - - - void TransMult::applyMULTFLT(const Fault& fault) { - double transMult = fault.getTransMult(); - - for( const auto& face : fault ) { - FaceDir::DirEnum faceDir = face.getDir(); - auto& multProperty = this->getDirectionProperty(faceDir); - - for( auto globalIndex : face ) - multProperty[globalIndex] *= transMult; - } - } - - - void TransMult::applyMULTFLT(const FaultCollection& faults) { - for (size_t faultIndex = 0; faultIndex < faults.size(); faultIndex++) { - auto& fault = faults.getFault(faultIndex); - this->applyMULTFLT(fault); - } - } - - bool TransMult::operator==(const TransMult& data) const { - return this->m_nx == data.m_nx && - this->m_ny == data.m_ny && - this->m_nz == data.m_nz && - this->m_trans == data.m_trans && - this->m_names == data.m_names && - this->m_multregtScanner == data.m_multregtScanner; - } - -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/setKeywordBox.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/setKeywordBox.cpp deleted file mode 100644 index 24c3b2dae6..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/setKeywordBox.cpp +++ /dev/null @@ -1,43 +0,0 @@ -/* - Copyright 2016 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include "setKeywordBox.hpp" -namespace Opm { - - void setKeywordBox( const DeckRecord& deckRecord, - BoxManager& boxManager) { - const auto& I1Item = deckRecord.getItem("I1"); - const auto& I2Item = deckRecord.getItem("I2"); - const auto& J1Item = deckRecord.getItem("J1"); - const auto& J2Item = deckRecord.getItem("J2"); - const auto& K1Item = deckRecord.getItem("K1"); - const auto& K2Item = deckRecord.getItem("K2"); - - const auto& active_box = boxManager.getActiveBox(); - - const int i1 = I1Item.defaultApplied(0) ? active_box.I1() : I1Item.get(0) - 1; - const int i2 = I2Item.defaultApplied(0) ? active_box.I2() : I2Item.get(0) - 1; - const int j1 = J1Item.defaultApplied(0) ? active_box.J1() : J1Item.get(0) - 1; - const int j2 = J2Item.defaultApplied(0) ? active_box.J2() : J2Item.get(0) - 1; - const int k1 = K1Item.defaultApplied(0) ? active_box.K1() : K1Item.get(0) - 1; - const int k2 = K2Item.defaultApplied(0) ? active_box.K2() : K2Item.get(0) - 1; - - boxManager.setKeywordBox( i1,i2,j1,j2,k1,k2 ); - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/setKeywordBox.hpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/setKeywordBox.hpp deleted file mode 100644 index 76864bec78..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Grid/setKeywordBox.hpp +++ /dev/null @@ -1,31 +0,0 @@ -/* - Copyright 2016 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef SET_KEYWORDBOX_HPP -#define SET_KEYWORDBOX_HPP - -#include -#include - -namespace Opm { - -void setKeywordBox( const DeckRecord& deckRecord,BoxManager& boxManager); - -} -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/IOConfig/IOConfig.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/IOConfig/IOConfig.cpp deleted file mode 100644 index ad57e5ac60..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/IOConfig/IOConfig.cpp +++ /dev/null @@ -1,306 +0,0 @@ -/* - Copyright 2015 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include -#include -#include -#include -#include - -#include - -#include -#include -#include -#include -#include -#include -#include - -namespace Opm { - - namespace { - const char* default_dir = "."; - - bool normalize_case(std::string& s) { - int upper_count = 0; - int lower_count = 0; - - for (const auto& c : s) { - if (std::isupper(c)) - upper_count += 1; - - if (std::islower(c)) - lower_count += 1; - } - - if (upper_count * lower_count == 0) - return false; - - for (auto& c : s) - c = std::toupper(c); - return true; - } - - - inline std::string basename( const std::string& path ) { - return Opm::filesystem::path( path ).stem().string(); - } - - - inline std::string outputdir( const std::string& path ) { - auto dir = Opm::filesystem::path( path ).parent_path().string(); - - if( dir.empty() ) return default_dir; - - return dir; - } - } - - - IOConfig::IOConfig( const Deck& deck ) : - IOConfig( GRIDSection( deck ), - RUNSPECSection( deck ), - deck.hasKeyword("NOSIM"), - deck.getDataFile() ) - {} - - IOConfig::IOConfig( const std::string& input_path ) : - m_deck_filename( input_path ), - m_output_dir( outputdir( input_path ) ) - { - this->setBaseName(basename(input_path)); - } - - IOConfig IOConfig::serializeObject() - { - IOConfig result; - result.m_write_INIT_file = true; - result.m_write_EGRID_file = false; - result.m_UNIFIN = true; - result.m_UNIFOUT = true; - result.m_FMTIN = true; - result.m_FMTOUT = true; - result.m_deck_filename = "test1"; - result.m_output_enabled = false; - result.m_output_dir = "test2"; - result.m_nosim = true; - result.m_base_name = "test3"; - result.ecl_compatible_rst = false; - - return result; - } - - static inline bool write_egrid_file( const GRIDSection& grid ) { - if( grid.hasKeyword( "NOGGF" ) ) return false; - if( !grid.hasKeyword( "GRIDFILE" ) ) return true; - - const auto& keyword = grid.getKeyword( "GRIDFILE" ); - const auto& rec = keyword.getRecord( 0 ); - - { - const auto& grid_item = rec.getItem( 0 ); - if (grid_item.get(0) != 0) { - std::cerr << "IOConfig: Reading GRIDFILE keyword from GRID section: " - << "Output of GRID file is not supported. " - << "Supported format: EGRID" - << std::endl; - - // It was asked for GRID file - that output is not - // supported, but we will output EGRID file; - // irrespective of whether that was actually - // requested. - return true; - } - } - - { - const auto& egrid_item = rec.getItem( 1 ); - return (egrid_item.get(0) == 1); - } - } - - IOConfig::IOConfig( const GRIDSection& grid, - const RUNSPECSection& runspec, - bool nosim, - const std::string& input_path ) : - m_write_INIT_file( grid.hasKeyword( "INIT" ) ), - m_write_EGRID_file( write_egrid_file( grid ) ), - m_FMTIN( runspec.hasKeyword( "FMTIN" ) ), - m_FMTOUT( runspec.hasKeyword( "FMTOUT" ) ), - m_deck_filename( input_path ), - m_output_dir( outputdir( input_path ) ), - m_nosim( nosim ) - { - this->setBaseName(basename(input_path)); - for (const auto& kw : runspec) { - if (kw.name() == "UNIFOUT") - this->m_UNIFOUT = true; - else if (kw.name() == "UNIFIN") - this->m_UNIFIN = true; - else if (kw.name() == "MULTOUT") - this->m_UNIFOUT = false; - else if (kw.name() == "MULTIN") - this->m_UNIFIN = false; - } - } - - - bool IOConfig::getWriteEGRIDFile() const { - return m_write_EGRID_file; - } - - bool IOConfig::getWriteINITFile() const { - return m_write_INIT_file; - } - - - bool IOConfig::getEclCompatibleRST() const { - return this->ecl_compatible_rst; - } - - - void IOConfig::setEclCompatibleRST(bool ecl_rst) { - this->ecl_compatible_rst = ecl_rst; - } - - - void IOConfig::overrideNOSIM(bool nosim) { - m_nosim = nosim; - } - - - bool IOConfig::getUNIFIN() const { - return m_UNIFIN; - } - - bool IOConfig::getUNIFOUT() const { - return m_UNIFOUT; - } - - bool IOConfig::getFMTIN() const { - return m_FMTIN; - } - - bool IOConfig::getFMTOUT() const { - return m_FMTOUT; - } - - - - std::string IOConfig::getRestartFileName(const std::string& restart_base, int report_step, bool output) const { - bool unified = output ? getUNIFOUT() : getUNIFIN(); - bool fmt_file = output ? getFMTOUT() : getFMTIN(); - - auto ext = std::string{}; - if (unified) { - ext = fmt_file ? "FUNRST" : "UNRST"; - } - else { - std::ostringstream os; - - const char* fmt_prefix = "FGH"; - const char* unfmt_prefix = "XYZ"; - - const int cycle = 10 * 1000; - const int p_ix = report_step / cycle; - const int n = report_step % cycle; - - os << (fmt_file ? fmt_prefix[p_ix] : unfmt_prefix[p_ix]) - << std::setw(4) << std::setfill('0') << n; - - ext = os.str(); - } - - return restart_base + '.' + ext; - } - - - bool IOConfig::getOutputEnabled() const { - return m_output_enabled; - } - - void IOConfig::setOutputEnabled(bool enabled){ - m_output_enabled = enabled; - } - - std::string IOConfig::getOutputDir() const { - return m_output_dir; - } - - void IOConfig::setOutputDir(const std::string& outputDir) { - m_output_dir = outputDir; - } - - const std::string& IOConfig::getBaseName() const { - return m_base_name; - } - - void IOConfig::setBaseName(const std::string& baseName) { - m_base_name = baseName; - if (normalize_case(m_base_name)) - OpmLog::warning("The ALL CAPS case: " + m_base_name + " will be used when writing output files from this simulation."); - } - - std::string IOConfig::fullBasePath( ) const { - namespace fs = Opm::filesystem; - - fs::path dir( m_output_dir ); - fs::path base( m_base_name ); - fs::path full_path = dir.make_preferred() / base.make_preferred(); - - return full_path.string(); - } - - - bool IOConfig::initOnly( ) const { - return m_nosim; - } - - - bool IOConfig::operator==(const IOConfig& data) const { - return this->getWriteINITFile() == data.getWriteINITFile() && - this->getWriteEGRIDFile() == data.getWriteEGRIDFile() && - this->getUNIFIN() == data.getUNIFIN() && - this->getUNIFOUT() == data.getUNIFOUT() && - this->getFMTIN() == data.getFMTIN() && - this->getFMTOUT() == data.getFMTOUT() && - this->m_deck_filename == data.m_deck_filename && - this->getOutputEnabled() == data.getOutputEnabled() && - this->getOutputDir() == data.getOutputDir() && - this->initOnly() == data.initOnly() && - this->getBaseName() == data.getBaseName() && - this->getEclCompatibleRST() == data.getEclCompatibleRST(); - } - - - /*****************************************************************/ - /* Here at the bottom are some forwarding proxy methods which just - forward to the appropriate RestartConfig method. They are - retained here as a temporary convenience method to prevent - downstream breakage. - - Currently the EclipseState object can return a mutable IOConfig - object, which application code can alter to override settings - from the deck - this is quite ugly. When the API is reworked to - remove the ability modify IOConfig objects we should also - remove these forwarding methods. - */ - -} //namespace Opm diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/IOConfig/RestartConfig.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/IOConfig/RestartConfig.cpp deleted file mode 100644 index b82975a4e5..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/IOConfig/RestartConfig.cpp +++ /dev/null @@ -1,752 +0,0 @@ -/* - Copyright 2015 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include -#include -#include -#include -#include -#include -#include - -#include - -#include -#include -#include -#include - -#include -#include - -#include -#include -#include - - - - -namespace Opm { - -namespace { - -inline bool is_int( const std::string& x ) { - auto is_digit = []( char c ) { return std::isdigit( c ); }; - - return !x.empty() - && ( x.front() == '-' || is_digit( x.front() ) ) - && std::all_of( x.begin() + 1, x.end(), is_digit ); -} - -constexpr const char* RSTIntegerKeywords[] = { "BASIC", // 1 - "FLOWS", // 2 - "FIP", // 3 - "POT", // 4 - "PBPD", // 5 - "FREQ", // 6 - "PRES", // 7 - "VISC", // 8 - "DEN", // 9 - "DRAIN", // 10 - "KRO", // 11 - "KRW", // 12 - "KRG", // 13 - "PORO", // 14 - "NOGRAD", // 15 - "NORST", // 16 NORST - not supported - "SAVE", // 17 - "SFREQ", // 18 SFREQ=?? - not supported - "ALLPROPS", // 19 - "ROCKC", // 20 - "SGTRAP", // 21 - "", // 22 - Blank - ignored. - "RSSAT", // 23 - "RVSAT", // 24 - "GIMULT", // 25 - "SURFBLK", // 26 - "", // 27 - PCOW, PCOG, special cased - "STREAM", // 28 STREAM=?? - not supported - "RK", // 29 - "VELOCITY", // 30 - "COMPRESS" }; // 31 - -constexpr const char* SCHEDIntegerKeywords[] = { "PRES", // 1 - "SOIL", // 2 - "SWAT", // 3 - "SGAS", // 4 - "RS", // 5 - "RV", // 6 - "RESTART", // 7 - "FIP", // 8 - "WELLS", // 9 - "VFPPROD", // 10 - "SUMMARY", // 11 - "CPU", // 12 - "AQUCT", // 13 - "WELSPECS",// 14 - "NEWTON", // 15 - "POILD", // 16 - "PWAT", // 17 - "PWATD", // 18 - "PGAS", // 19 - "PGASD", // 20 - "FIPVE", // 21 - "WOC", // 22 - "GOC", // 23 - "WOCDIFF", // 24 - "GOCDIFF", // 25 - "WOCGOC", // 26 - "ODGAS", // 27 - "ODWAT", // 28 - "GDOWAT", // 29 - "WDOGAS", // 30 - "OILAPI", // 31 - "FIPITR", // 32 - "TBLK", // 33 - "PBLK", // 34 - "SALT", // 35 - "PLYADS", // 36 - "RK", // 37 - "FIPSALT", // 38 - "TUNING", // 39 - "GI", // 40 - "ROCKC", // 41 - "SPENWAT", // 42 - "FIPSOL", // 43 - "SURFBLK", // 44 - "SURFADS", // 45 - "FIPSURF", // 46 - "TRADS", // 47 - "VOIL", // 48 - "VWAT", // 49 - "VGAS", // 50 - "DENO", // 51 - "DENW", // 52 - "DENG", // 53 - "GASCONC", // 54 - "PB", // 55 - "PD", // 56 - "KRW", // 57 - "KRO", // 58 - "KRG", // 59 - "MULT", // 60 - "UNKNOWN", // 61 61 and 62 are not listed in the manual - "UNKNOWN", // 62 - "FOAM", // 63 - "FIPFOAM", // 64 - "TEMP", // 65 - "FIPTEMP", // 66 - "POTC", // 67 - "FOAMADS", // 68 - "FOAMDCY", // 69 - "FOAMMOB", // 70 - "RECOV", // 71 - "FLOOIL", // 72 - "FLOWAT", // 73 - "FLOGAS", // 74 - "SGTRAP", // 75 - "FIPRESV", // 76 - "FLOSOL", // 77 - "KRN", // 78 - "GRAD", // 79 - }; - -bool is_RPTRST_mnemonic( const std::string& kw ) { - /* all eclipse 100 keywords we want to not simply ignore. The list is - * sorted, so we can use binary_search for log(n) lookup. It is important - * that the list is sorted, but these are all the keywords listed in the - * manual and unlikely to change at all - */ - static constexpr const char* valid[] = { - "ACIP", "ACIS", "ALLPROPS", "BASIC", "BG", "BO", - "BW", "CELLINDX", "COMPRESS", "CONV", "DEN", "DRAIN", - "DRAINAGE", "DYNREG", "FIP", "FLORES", "FLOWS", "FREQ", - "GIMULT", "HYDH", "HYDHFW", "KRG", "KRO", "KRW", - "NOGRAD", "NORST", "NPMREB", "PBPD", "PCOG", "PCOW", - "PERMREDN", "POIS", "PORO", "PORV", "POT", "PRES", - "RFIP", "RK", "ROCKC", "RPORV", "RSSAT", "RVSAT", - "SAVE", "SDENO", "SFIP", "SFREQ", "SGTRAP", "SIGM_MOD", - "STREAM", "SURFBLK", "TRAS", "VELGAS", "VELOCITY", "VELOIL", - "VELWAT", "VISC", - }; - - return std::binary_search( std::begin( valid ), std::end( valid ), kw ); -} - -bool is_RPTSCHED_mnemonic( const std::string& kw ) { - static constexpr const char* valid[] = { - "ALKALINE", "ANIONS", "AQUCT", "AQUFET", "AQUFETP", "BFORG", - "CATIONS", "CPU", "DENG", "DENO", "DENW", "ESALPLY", - "ESALSUR", "FFORG", "FIP", "FIPFOAM", "FIPHEAT", "FIPRESV", - "FIPSALT", "FIPSOL", "FIPSURF", "FIPTEMP", "FIPTR", "FIPVE", - "FLOGAS", "FLOOIL", "FLOSOL", "FLOWAT", "FMISC", "FOAM", - "FOAMADS", "FOAMCNM", "FOAMDCY", "FOAMMOB", "GASCONC", "GASSATC", - "GDOWAT", "GI", "GOC", "GOCDIFF", "GRAD", "KRG", - "KRN", "KRO", "KRW", "MULT", "NEWTON", "NOTHING", - "NPMREB", "ODGAS", "ODWAT", "OILAPI", "PB", "PBLK", - "PBU", "PD", "PDEW", "PGAS", "PGASD", "PLYADS", - "POIL", "POILD", "POLYMER", "POTC", "POTG", "POTO", - "POTW", "PRES", "PRESSURE", "PWAT", "PWATD", "RECOV", - "RESTART", "ROCKC", "RS", "RSSAT", "RV", "RVSAT", - "SALT", "SGAS", "SGTRAP", "SIGM_MOD", "SOIL", "SSOL", - "SUMMARY", "SURFADS", "SURFBLK", "SWAT", "TBLK", "TEMP", - "TRACER", "TRADS", "TRDCY", "TUNING", "VFPPROD", "VGAS", - "VOIL", "VWAT", "WDOGAS", "WELLS", "WELSPECL", "WELSPECS", - "WOC", "WOCDIFF", "WOCGOC", - }; - - return std::binary_search( std::begin( valid ), std::end( valid ), kw ); -} - -} - - RestartSchedule::RestartSchedule( size_t sched_restart) : - rptsched_restart_set( true ), - rptsched_restart( sched_restart ) - { - } - - RestartSchedule::RestartSchedule( size_t step, size_t b, size_t freq) : - timestep( step ), - basic( b ), - frequency( basic > 2 ? std::max( freq, size_t{ 1 } ) : freq ) - { - /* - * if basic > 2 and freq is default (zero) we're looking at an error - * (every Nth step where N = 0). Instead of throwing we default this to - * 1 so that basic > 2 and freq unset essentially is - * write-every-timestep. It could've just as easily been an exception, - * but to be more robust handling poorly written decks we instead set a - * reasonable default and carry on. - */ - } - - RestartSchedule RestartSchedule::serializeObject() - { - RestartSchedule result(1, 2, 3); - result.rptsched_restart_set = true; - result.rptsched_restart = 4; - - return result; - } - - bool RestartSchedule::operator!=(const RestartSchedule & rhs) const { - return !( *this == rhs ); - } - - bool RestartSchedule::operator==( const RestartSchedule& rhs ) const { - if( this->rptsched_restart_set ) { - return rhs.rptsched_restart_set - && this->rptsched_restart == rhs.rptsched_restart; - } - - return this->timestep == rhs.timestep && - this->basic == rhs.basic && - this->frequency == rhs.frequency; - } - -inline std::map< std::string, int > -RPTRST_integer( const std::vector< int >& ints ) { - const size_t PCO_index = 26; - const size_t BASIC_index = 0; - - std::map< std::string, int > mnemonics; - const size_t size = std::min( ints.size(), sizeof( RSTIntegerKeywords ) ); - - /* fun with special cases. Eclipse seems to ignore the BASIC=0, - * interpreting it as sort-of "don't modify". Handle this by *not* - * adding/updating the integer list sourced BASIC mnemonic, should it be - * zero. I'm not sure if this applies to other mnemonics, but the eclipse - * manual indicates that any zero here should disable the output. - * - * See https://github.com/OPM/opm-parser/issues/886 for reference - */ - if( size > 0 && ints[ BASIC_index ] != 0 ) - mnemonics[ RSTIntegerKeywords[ BASIC_index ] ] = ints[ BASIC_index ]; - - for( size_t i = 1; i < std::min( size, PCO_index ); ++i ) - mnemonics[ RSTIntegerKeywords[ i ] ] = ints[ i ]; - - for( size_t i = PCO_index + 1; i < size; ++i ) - mnemonics[ RSTIntegerKeywords[ i ] ] = ints[ i ]; - - /* item 27 (index 26) sets both PCOW and PCOG, so we special case it */ - if( ints.size() >= PCO_index ) { - mnemonics[ "PCOW" ] = ints[ PCO_index ]; - mnemonics[ "PCOG" ] = ints[ PCO_index ]; - } - - return mnemonics; -} - -inline std::map< std::string, int > -RPTSCHED_integer( const std::vector< int >& ints ) { - const size_t size = std::min( ints.size(), sizeof( SCHEDIntegerKeywords ) ); - - std::map< std::string, int > mnemonics; - for( size_t i = 0; i < size; ++i ) - mnemonics[ SCHEDIntegerKeywords[ i ] ] = ints[ i ]; - - return mnemonics; -} - -template< typename F, typename G > -inline std::map< std::string, int > RPT( const DeckKeyword& keyword, - const ParseContext& parseContext, - ErrorGuard& errors, - F is_mnemonic, - G integer_mnemonic ) { - - std::vector items; - const auto& deck_items = keyword.getStringData(); - const auto ints = std::any_of( deck_items.begin(), deck_items.end(), is_int ); - const auto strs = !std::all_of( deck_items.begin(), deck_items.end(), is_int ); - - /* if any of the values are pure integers we assume this is meant to be the - * slash-terminated list of integers way of configuring. If integers and - * non-integers are mixed, this is an error; however if the error mode - * RPT_MIXED_STYLE is permissive we try some desperate heuristics to - * interpret this as list of mnemonics. See the the documentation of the - * RPT_MIXED_STYLE error handler for more details. - */ - auto stoi = []( const std::string& str ) { return std::stoi( str ); }; - if( !strs ) - return integer_mnemonic( fun::map( stoi, deck_items ) ); - - - if (ints && strs) { - const auto& location = keyword.location(); - std::string msg = "Mixed style input is not allowed for keyword: " + keyword.name() + " at " + location.filename + "(" + std::to_string( location.lineno ) + ")"; - parseContext.handleError(ParseContext::RPT_MIXED_STYLE, msg, errors); - - std::vector stack; - for (size_t index=0; index < deck_items.size(); index++) { - if (is_int(deck_items[index])) { - - if (stack.size() < 2) { - std::string errmsg = "Can not interpret " + keyword.name() + " at " + location.filename + "(" + std::to_string( location.lineno ) + ")"; - throw std::invalid_argument(errmsg); - } - - if (stack.back() == "=") { - stack.pop_back(); - std::string mnemonic = stack.back(); - stack.pop_back(); - - items.insert(items.begin(), stack.begin(), stack.end()); - stack.clear(); - items.push_back( mnemonic + "=" + deck_items[index]); - } else { - std::string errmsg = "Can not interpret " + keyword.name() + " at " + location.filename + "(" + std::to_string( location.lineno ) + ")"; - throw std::invalid_argument(errmsg); - } - - } else - stack.push_back(deck_items[index]); - } - items.insert(items.begin(), stack.begin(), stack.end()); - } else - items = deck_items; - - std::map< std::string, int > mnemonics; - for( const auto& mnemonic : items ) { - const auto sep_pos = mnemonic.find_first_of( "= " ); - - std::string base = mnemonic.substr( 0, sep_pos ); - if( !is_mnemonic( base ) ) { - parseContext.handleError(ParseContext::RPT_UNKNOWN_MNEMONIC, "The mnemonic: " + base + " is not recognized.", errors); - continue; - } - - int val = 1; - if (sep_pos != std::string::npos) { - const auto value_pos = mnemonic.find_first_not_of("= ", sep_pos); - if (value_pos != std::string::npos) - val = std::stoi(mnemonic.substr(value_pos)); - } - - mnemonics.emplace( base, val ); - } - - return mnemonics; -} - -inline void expand_RPTRST_mnemonics(std::map< std::string, int >& mnemonics) { - const auto allprops = mnemonics.find( "ALLPROPS"); - if (allprops != mnemonics.end()) { - const auto value = allprops->second; - mnemonics.erase( "ALLPROPS" ); - - for (const auto& kw : {"BG","BO","BW","KRG","KRO","KRW","VOIL","VGAS","VWAT","DEN"}) - mnemonics[kw] = value; - - } -} - - -inline std::pair< std::map< std::string, int >, RestartSchedule > -RPTRST( const DeckKeyword& keyword, const ParseContext& parseContext, ErrorGuard& errors, RestartSchedule prev, size_t step ) { - auto mnemonics = RPT( keyword, parseContext, errors, is_RPTRST_mnemonic, RPTRST_integer ); - - const bool has_freq = mnemonics.find( "FREQ" ) != mnemonics.end(); - const bool has_basic = mnemonics.find( "BASIC" ) != mnemonics.end(); - - expand_RPTRST_mnemonics( mnemonics ); - - if( !has_freq && !has_basic ) return { std::move( mnemonics ), {} }; - - const auto basic = has_basic ? mnemonics.at( "BASIC" ) : prev.basic; - const auto freq = has_freq ? mnemonics.at( "FREQ" ) : prev.frequency; - - return { std::move( mnemonics ), { step, basic, freq } }; -} - -inline std::pair< std::map< std::string, int >, RestartSchedule > -RPTSCHED( const DeckKeyword& keyword, const ParseContext& parseContext, ErrorGuard& errors ) { - auto mnemonics = RPT( keyword, parseContext, errors, is_RPTSCHED_mnemonic, RPTSCHED_integer ); - - if( mnemonics.count( "NOTHING" ) ) - return { std::move( mnemonics ), { RestartSchedule(0) } }; - - if( mnemonics.count( "RESTART" ) ) - return { std::move( mnemonics ), RestartSchedule( size_t( mnemonics.at( "RESTART" )) ) }; - - return { std::move( mnemonics ), {} }; -} - - - -void RestartConfig::handleScheduleSection(const SCHEDULESection& schedule, const ParseContext& parseContext, ErrorGuard& errors) { - size_t current_step = 1; - RestartSchedule unset; - - auto ignore_RPTSCHED_RESTART = []( decltype( restart_schedule )& x ) { - return x.back().basic > 2; - }; - - for( const auto& keyword : schedule ) { - const auto& name = keyword.name(); - - if( name == "DATES" ) { - current_step += keyword.size(); - continue; - } - - - if( name == "TSTEP" ) { - current_step += keyword.getRecord( 0 ).getItem( 0 ).data_size(); - continue; - } - - if( this->m_timemap.size() <= current_step ) continue; - - if (name == "SAVE") { - this->save_keywords.at(current_step) = true; - } else { - this->save_keywords.at(current_step) = false; - } - - if( !( name == "RPTRST" || name == "RPTSCHED" ) ) continue; - - const bool is_RPTRST = name == "RPTRST"; - const auto& prev_sched = this->restart_schedule.back(); - - auto config = is_RPTRST ? RPTRST( keyword, parseContext, errors, prev_sched, current_step ) - : RPTSCHED( keyword , parseContext, errors); - - /* add the missing entries from the previous step */ - { - auto& mnemonics = config.first; - const auto& prev_mnemonics = this->restart_keywords.back(); - mnemonics.insert( prev_mnemonics.begin(), prev_mnemonics.end() ); - - if( mnemonics.find( "NOTHING" ) != mnemonics.end() ) - mnemonics.clear(); - - this->restart_keywords.update( current_step , mnemonics ); - } - const bool ignore_RESTART = - !is_RPTRST && ignore_RPTSCHED_RESTART( this->restart_schedule ); - - const auto& rs = config.second; - if( rs == unset || ignore_RESTART ) continue; - - if( 6 == rs.rptsched_restart || 6 == rs.basic ) - throw std::runtime_error( - "OPM does not support the RESTART=6 setting " - "(write restart file every timestep)" - ); - - this->restart_schedule.update( current_step, rs ); - } -} - - bool RestartSchedule::writeRestartFile( size_t input_timestep , const TimeMap& timemap) const { - if (this->rptsched_restart_set && (this->rptsched_restart > 0)) - return true; - - switch (basic) { - //Do not write restart files - case 0: return false; - - //Write restart file every report time - case 1: return true; - - //Write restart file every report time - case 2: return true; - - //Every n'th report time - case 3: return ((input_timestep % this->frequency) == 0) ? true : false; - - //First reportstep of every year, or if n > 1, n'th years - case 4: return timemap.isTimestepInFirstOfMonthsYearsSequence(input_timestep, true , this->timestep, this->frequency); - - //First reportstep of every month, or if n > 1, n'th months - case 5: return timemap.isTimestepInFirstOfMonthsYearsSequence(input_timestep, false , this->timestep, this->frequency); - - default: return false; - } - } - - template - RestartConfig::RestartConfig( const TimeMap& time_map, const Deck& deck, const ParseContext& parseContext, T&& errors ) : - RestartConfig(time_map, deck, parseContext, errors) - {} - - RestartConfig::RestartConfig( const TimeMap& time_map, const Deck& deck) : - RestartConfig(time_map, deck, ParseContext(), ErrorGuard()) - {} - - - RestartConfig::RestartConfig( const TimeMap& time_map, const Deck& deck, const ParseContext& parseContext, ErrorGuard& errors ) : - m_timemap( time_map ), - m_first_restart_step( -1 ), - restart_schedule( m_timemap, {0,0,1}), - restart_keywords( m_timemap, {} ), - save_keywords( m_timemap.size(), false ) - { - handleSolutionSection( SOLUTIONSection(deck), parseContext, errors ); - handleScheduleSection( SCHEDULESection(deck), parseContext, errors ); - initFirstOutput( ); - } - - RestartConfig RestartConfig::serializeObject() - { - RestartConfig result; - result.m_timemap = TimeMap::serializeObject(); - result.m_first_restart_step = 2; - result.m_write_initial_RST_file = true; - result.restart_schedule = {{RestartSchedule::serializeObject()}, 2}; - result.restart_keywords = {{{{"test",3}}}, 3}; - result.save_keywords = {false, true}; - - return result; - } - - RestartSchedule RestartConfig::getNode( size_t timestep ) const{ - return restart_schedule.get(timestep); - } - - - bool RestartConfig::getWriteRestartFile(size_t timestep, bool log) const { - if (0 == timestep) - return m_write_initial_RST_file; - - if (save_keywords[timestep]) { - if ( log ) { - std::string logstring = "Fast restart using SAVE is not supported. Standard restart file is written instead"; - Opm::OpmLog::warning("Unhandled output keyword", logstring); - } - return true; - } - - { - RestartSchedule ts_restart_config = getNode( timestep ); - return ts_restart_config.writeRestartFile( timestep , m_timemap ); - } - } - - - const std::map< std::string, int >& RestartConfig::getRestartKeywords( size_t timestep ) const { - return restart_keywords.at( timestep ); - } - - int RestartConfig::getKeyword( const std::string& keyword, size_t timeStep) const { - const std::map< std::string, int >& keywords = this->getRestartKeywords( timeStep ); - const auto iter = keywords.find( keyword ); - if (iter == keywords.end()) { - if (is_RPTRST_mnemonic( keyword )) - return 0; - else - throw std::invalid_argument("The mnenomic " + keyword + " is not recognized"); - } else - return iter->second; - } - - /* - Will initialize the internal variable holding the first report - step when restart output is queried. - - The reason we are interested in this report step is that when we - reach this step the output files should be opened with mode 'w' - - whereas for subsequent steps they should be opened with mode - 'a'. - */ - - void RestartConfig::initFirstOutput( ) { - size_t report_step = 0; - while (true) { - if (getWriteRestartFile(report_step)) { - m_first_restart_step = report_step; - break; - } - report_step++; - if (report_step == m_timemap.size()) - break; - } - } - - - void RestartConfig::handleSolutionSection(const SOLUTIONSection& solutionSection, const ParseContext& parseContext, ErrorGuard& errors) { - if (solutionSection.hasKeyword("RPTRST")) { - const auto& rptrstkeyword = solutionSection.getKeyword("RPTRST"); - - const auto rptrst = RPTRST( rptrstkeyword, parseContext, errors, {}, 0 ); - this->restart_keywords.updateInitial( rptrst.first ); - this->restart_schedule.updateInitial( rptrst.second ); - setWriteInitialRestartFile(true); // Guessing on eclipse rules for write of initial RESTART file (at time 0): - // Write of initial restart file is (due to the eclipse reference manual) - // governed by RPTSOL RESTART in solution section, - // if RPTSOL RESTART > 1 initial restart file is written. - // but - due to initial restart file written from Eclipse - // for data where RPTSOL RESTART not set - guessing that - // when RPTRST is set in SOLUTION (no basic though...) -> write inital restart. - } //RPTRST - - - if (solutionSection.hasKeyword("RPTSOL") && (m_timemap.size() > 0)) { - handleRPTSOL(solutionSection.getKeyword("RPTSOL")); - } //RPTSOL - } - - - void RestartConfig::overrideRestartWriteInterval(size_t interval) { - size_t step = 0; - /* write restart files if the interval is non-zero. The restart - * mnemonic (setting) that governs restart-on-interval is BASIC=3 - */ - size_t basic = interval > 0 ? 3 : 0; - - RestartSchedule rs( step, basic, interval ); - restart_schedule.globalReset( rs ); - - setWriteInitialRestartFile( interval > 0 ); - } - - - void RestartConfig::setWriteInitialRestartFile(bool writeInitialRestartFile) { - m_write_initial_RST_file = writeInitialRestartFile; - } - - - void RestartConfig::handleRPTSOL( const DeckKeyword& keyword) { - const auto& record = keyword.getRecord(0); - - size_t restart = 0; - size_t found_mnemonic_RESTART = 0; - bool handle_RPTSOL_RESTART = false; - - const auto& item = record.getItem(0); - - for (size_t index = 0; index < item.data_size(); ++index) { - const std::string& mnemonic = item.get< std::string >(index); - - found_mnemonic_RESTART = mnemonic.find("RESTART="); - if (found_mnemonic_RESTART != std::string::npos) { - std::string restart_no = mnemonic.substr(found_mnemonic_RESTART+8, mnemonic.size()); - restart = std::strtoul(restart_no.c_str(), nullptr, 10); - handle_RPTSOL_RESTART = true; - } - } - - - /* If no RESTART mnemonic is found, either it is not present or we might - have an old data set containing integer controls instead of mnemonics. - Restart integer switch is integer control nr 7 */ - - if (found_mnemonic_RESTART == std::string::npos) { - if (item.data_size() >= 7) { - const std::string& integer_control = item.get< std::string >(6); - restart = std::strtoul(integer_control.c_str(), nullptr, 10); - if (restart != ULONG_MAX) - handle_RPTSOL_RESTART = true; - } - } - - if (handle_RPTSOL_RESTART) { - if (restart > 1) { - setWriteInitialRestartFile(true); - } else { - setWriteInitialRestartFile(false); - } - } - } - - - - std::string RestartConfig::getRestartFileName(const std::string& restart_base, int report_step, bool unified , bool fmt_file) { - - auto ext = std::string{}; - if (unified) { - ext = fmt_file ? "FUNRST" : "UNRST"; - } - else { - std::ostringstream os; - - const char* fmt_prefix = "FGH"; - const char* unfmt_prefix = "XYZ"; - - const int cycle = 10 * 1000; - const int p_ix = report_step / cycle; - const int n = report_step % cycle; - - os << (fmt_file ? fmt_prefix[p_ix] : unfmt_prefix[p_ix]) - << std::setw(4) << std::setfill('0') << n; - - ext = os.str(); - } - - return restart_base + '.' + ext; - } - - - int RestartConfig::getFirstRestartStep() const { - return m_first_restart_step; - } - - - bool RestartConfig::operator==(const RestartConfig& data) const { - return this->m_timemap == data.m_timemap && - this->m_first_restart_step == data.m_first_restart_step && - this->m_write_initial_RST_file == data.m_write_initial_RST_file && - this->restart_schedule == data.restart_schedule && - this->restart_keywords == data.restart_keywords && - this->save_keywords == data.save_keywords; - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/InitConfig/Equil.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/InitConfig/Equil.cpp deleted file mode 100644 index f7f0a245e2..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/InitConfig/Equil.cpp +++ /dev/null @@ -1,123 +0,0 @@ -#include -#include - -namespace Opm { - - EquilRecord::EquilRecord() : - EquilRecord(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, false, false, 0.0) - { - } - - EquilRecord::EquilRecord( double datum_depth_arg, double datum_depth_pc_arg, double woc_depth, double woc_pc, double goc_depth, double goc_pc, bool live_oil_init, bool wet_gas_init, int target_accuracy) : - datum_depth(datum_depth_arg), - datum_depth_ps(datum_depth_pc_arg), - water_oil_contact_depth(woc_depth), - water_oil_contact_capillary_pressure(woc_pc), - gas_oil_contact_depth(goc_depth), - gas_oil_contact_capillary_pressure(goc_pc), - live_oil_init_proc(live_oil_init), - wet_gas_init_proc(wet_gas_init), - init_target_accuracy(target_accuracy) - {} - - double EquilRecord::datumDepth() const { - return this->datum_depth; - } - - double EquilRecord::datumDepthPressure() const { - return this->datum_depth_ps; - } - - double EquilRecord::waterOilContactDepth() const { - return this->water_oil_contact_depth; - } - - double EquilRecord::waterOilContactCapillaryPressure() const { - return this->water_oil_contact_capillary_pressure; - } - - double EquilRecord::gasOilContactDepth() const { - return this->gas_oil_contact_depth; - } - - double EquilRecord::gasOilContactCapillaryPressure() const { - return this->gas_oil_contact_capillary_pressure; - } - - bool EquilRecord::liveOilInitConstantRs() const { - return this->live_oil_init_proc; - } - - bool EquilRecord::wetGasInitConstantRv() const { - return this->wet_gas_init_proc; - } - - int EquilRecord::initializationTargetAccuracy() const { - return this->init_target_accuracy; - } - - bool EquilRecord::operator==(const EquilRecord& data) const { - return datum_depth == data.datum_depth && - datum_depth_ps == data.datum_depth_ps && - water_oil_contact_depth == data.water_oil_contact_depth && - water_oil_contact_capillary_pressure == - data.water_oil_contact_capillary_pressure && - data.gas_oil_contact_depth == data.gas_oil_contact_depth && - gas_oil_contact_capillary_pressure == - data.gas_oil_contact_capillary_pressure && - live_oil_init_proc == data.live_oil_init_proc && - wet_gas_init_proc == data.wet_gas_init_proc && - init_target_accuracy == data.init_target_accuracy; - } - - /* */ - - Equil::Equil( const DeckKeyword& keyword ) - { - for (const auto& record : keyword) { - auto datum_depth_arg = record.getItem( 0 ).getSIDouble( 0 ); - auto datum_depth_pc_arg = record.getItem( 1 ).getSIDouble( 0 ); - auto woc_depth = record.getItem(2).getSIDouble(0); - auto woc_pc = record.getItem(3).getSIDouble(0); - auto goc_depth = record.getItem(4).getSIDouble(0); - auto goc_pc = record.getItem(5).getSIDouble(0); - auto live_oil_init = record.getItem(6).get(0) <= 0; - auto wet_gas_init = record.getItem(7).get(0) <= 0; - auto target_accuracy = record.getItem(8).get(0); - - this->m_records.push_back( EquilRecord(datum_depth_arg, datum_depth_pc_arg, woc_depth, woc_pc, goc_depth, goc_pc, live_oil_init, wet_gas_init, target_accuracy) ); - } - } - - Equil Equil::serializeObject() - { - Equil result; - result.m_records = {{1.0, 2.0, 3.0, 4.0, 5.0, 6.0, true, false, 1}}; - - return result; - } - - const EquilRecord& Equil::getRecord( size_t id ) const { - return this->m_records.at( id ); - } - - size_t Equil::size() const { - return this->m_records.size(); - } - - bool Equil::empty() const { - return this->m_records.empty(); - } - - Equil::const_iterator Equil::begin() const { - return this->m_records.begin(); - } - - Equil::const_iterator Equil::end() const { - return this->m_records.end(); - } - - bool Equil::operator==(const Equil& data) const { - return this->m_records == data.m_records; - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/InitConfig/FoamConfig.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/InitConfig/FoamConfig.cpp deleted file mode 100644 index 1cfddf6599..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/InitConfig/FoamConfig.cpp +++ /dev/null @@ -1,233 +0,0 @@ -/* - Copyright 2019 SINTEF Digital, Mathematics and Cybernetics. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include -#include -#include -#include -#include -#include - -namespace Opm -{ - -// FoamData member functions. - -FoamData::FoamData() - : reference_surfactant_concentration_(0.0) - , exponent_(ParserKeywords::FOAMFSC::EXPONENT::defaultValue) - , minimum_surfactant_concentration_(ParserKeywords::FOAMFSC::MIN_SURF_CONC::defaultValue) - , allow_desorption_(false) - , rock_density_(1.0) -{ -} - -FoamData::FoamData(const DeckRecord& FOAMFSC_record, const DeckRecord& FOAMROCK_record) - : reference_surfactant_concentration_(FOAMFSC_record.getItem(0).getSIDouble(0)) - , exponent_(FOAMFSC_record.getItem(1).getSIDouble(0)) - , minimum_surfactant_concentration_(FOAMFSC_record.getItem(2).getSIDouble(0)) - , allow_desorption_(true) // will be overwritten below - , rock_density_(FOAMROCK_record.getItem(1).getSIDouble(0)) -{ - // Check validity of adsorption index and set allow_desorption_ member. - const int ads_ind = FOAMROCK_record.getItem(0).get(0); - if (ads_ind < 1 || ads_ind > 2) { - throw std::runtime_error("Illegal adsorption index in FOAMROCK, must be 1 or 2."); - } - allow_desorption_ = (ads_ind == 1); -} - -FoamData::FoamData(const DeckRecord& FOAMROCK_record) - : reference_surfactant_concentration_(0.0) - , exponent_(0.0) - , minimum_surfactant_concentration_(1e-20) - , allow_desorption_(true) // will be overwritten below - , rock_density_(FOAMROCK_record.getItem(1).getSIDouble(0)) -{ - // Check validity of adsorption index and set allow_desorption_ member. - const int ads_ind = FOAMROCK_record.getItem(0).get(0); - if (ads_ind < 1 || ads_ind > 2) { - throw std::runtime_error("Illegal adsorption index in FOAMROCK, must be 1 or 2."); - } - allow_desorption_ = (ads_ind == 1); -} - -FoamData -FoamData::serializeObject() -{ - FoamData result; - result.reference_surfactant_concentration_ = 1.0; - result.exponent_ = 2.0; - result.minimum_surfactant_concentration_ = 3.0; - result.allow_desorption_ = true; - result.rock_density_ = 4.0; - - return result; -} - -double -FoamData::referenceSurfactantConcentration() const -{ - return this->reference_surfactant_concentration_; -} - -double -FoamData::exponent() const -{ - return this->exponent_; -} - -double -FoamData::minimumSurfactantConcentration() const -{ - return this->minimum_surfactant_concentration_; -} - -bool -FoamData::allowDesorption() const -{ - return this->allow_desorption_; -} - -double -FoamData::rockDensity() const -{ - return this->rock_density_; -} - -bool -FoamData::operator==(const FoamData& data) const -{ - return reference_surfactant_concentration_ == - data.reference_surfactant_concentration_ && - exponent_ == data.exponent_ && - minimum_surfactant_concentration_ == - data.minimum_surfactant_concentration_ && - allow_desorption_ == data.allow_desorption_ && - rock_density_ == data.rock_density_; -} - -// FoamConfig member functions. - -FoamConfig::FoamConfig(const Deck& deck) -{ - if (deck.hasKeyword()) { - // We only support the default (GAS transport phase, TAB mobility reduction model) - // setup for foam at this point, so we detect and deal with it here even though we - // do not store any data related to it. - const auto& kw_foamopts = deck.getKeyword(); - transport_phase_ = get_phase(kw_foamopts.getRecord(0).getItem(0).get(0)); - std::string mobModel = kw_foamopts.getRecord(0).getItem(1).get(0); - if (mobModel.empty()) { - if (transport_phase_ == Phase::GAS) { - mobility_model_ = MobilityModel::TAB; - } else if (transport_phase_ == Phase::WATER) { - mobility_model_ = MobilityModel::FUNC; - } - } else if (mobModel == "TAB") { - mobility_model_ = MobilityModel::TAB; - } else if (mobModel == "FUNC") { - mobility_model_ = MobilityModel::FUNC; - } - } - if (deck.hasKeyword()) { - if (!deck.hasKeyword()) { - throw std::runtime_error("FOAMFSC present but no FOAMROCK keyword found."); - } - // We have both FOAMFSC and FOAMROCK. - const auto& kw_foamfsc = deck.getKeyword(); - const auto& kw_foamrock = deck.getKeyword(); - if (kw_foamfsc.size() != kw_foamrock.size()) { - throw std::runtime_error("FOAMFSC and FOAMROCK keywords have different number of records."); - } - const int num_records = kw_foamfsc.size(); - for (int record_index = 0; record_index < num_records; ++record_index) { - this->data_.emplace_back(kw_foamfsc.getRecord(record_index), kw_foamrock.getRecord(record_index)); - } - } else if (deck.hasKeyword()) { - // We have FOAMROCK, but not FOAMFSC. - const auto& kw_foamrock = deck.getKeyword(); - for (const auto& record : kw_foamrock) { - this->data_.emplace_back(record); - } - } -} - -FoamConfig -FoamConfig::serializeObject() -{ - FoamConfig result; - result.data_ = {Opm::FoamData::serializeObject()}; - result.transport_phase_ = Phase::GAS; - result.mobility_model_ = MobilityModel::TAB; - - return result; -} - -const FoamData& -FoamConfig::getRecord(std::size_t index) const -{ - return this->data_.at(index); -} - -std::size_t -FoamConfig::size() const -{ - return this->data_.size(); -} - -bool -FoamConfig::empty() const -{ - return this->data_.empty(); -} - -FoamConfig::const_iterator -FoamConfig::begin() const -{ - return this->data_.begin(); -} - -FoamConfig::const_iterator -FoamConfig::end() const -{ - return this->data_.end(); -} - -Phase -FoamConfig::getTransportPhase() const -{ - return this->transport_phase_; -} - -FoamConfig::MobilityModel -FoamConfig::getMobilityModel() const -{ - return this->mobility_model_; -} - -bool -FoamConfig::operator==(const FoamConfig& data) const -{ - return transport_phase_ == data.transport_phase_ && - mobility_model_ == data.mobility_model_ && - data_ == data.data_; -} - -} // namespace Opm diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/InitConfig/InitConfig.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/InitConfig/InitConfig.cpp deleted file mode 100644 index ea4e28ee56..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/InitConfig/InitConfig.cpp +++ /dev/null @@ -1,150 +0,0 @@ -/* - Copyright 2015 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include - -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -namespace Opm { - - static inline Equil equils( const Deck& deck ) { - if( !deck.hasKeyword( ) ) return {}; - return Equil( deck.getKeyword( ) ); - } - - InitConfig::InitConfig() - : m_filleps(false) - { - } - - InitConfig::InitConfig(const Deck& deck) - : equil(equils(deck)) - , foamconfig(deck) - , m_filleps(PROPSSection{deck}.hasKeyword("FILLEPS")) - { - if( !deck.hasKeyword( "RESTART" ) ) { - if( deck.hasKeyword( "SKIPREST" ) ) { - std::cout << "Deck has SKIPREST, but no RESTART. " - << "Ignoring SKIPREST." << std::endl; - } - - return; - } - - m_gravity = !deck.hasKeyword("NOGRAV"); - - const auto& record = deck.getKeyword( "RESTART" ).getRecord(0); - const auto& save_item = record.getItem(2); - - if( save_item.hasValue( 0 ) ) { - throw std::runtime_error( - "OPM does not support RESTART from a SAVE file, " - "only from RESTART files"); - } - - int step = record.getItem( 1 ).get< int >(0); - const std::string& root = record.getItem( 0 ).get< std::string >( 0 ); - const std::string& input_path = deck.getInputPath(); - - if (root[0] == '/' || input_path.empty()) - this->setRestart(root, step); - else - this->setRestart( input_path + "/" + root, step ); - } - - InitConfig InitConfig::serializeObject() - { - InitConfig result; - result.equil = Equil::serializeObject(); - result.foamconfig = FoamConfig::serializeObject(); - result.m_filleps = true; - result.m_gravity = false; - result.m_restartRequested = true; - result.m_restartStep = 20; - result.m_restartRootName = "test1"; - - return result; - } - - void InitConfig::setRestart( const std::string& root, int step) { - m_restartRequested = true; - m_restartStep = step; - m_restartRootName = root; - } - - bool InitConfig::restartRequested() const { - return m_restartRequested; - } - - int InitConfig::getRestartStep() const { - return m_restartStep; - } - - const std::string& InitConfig::getRestartRootName() const { - return m_restartRootName; - } - - bool InitConfig::hasEquil() const { - return !this->equil.empty(); - } - - const Equil& InitConfig::getEquil() const { - if( !this->hasEquil() ) - throw std::runtime_error( "Error: No 'EQUIL' present" ); - - return this->equil; - } - - bool InitConfig::hasGravity() const { - return m_gravity; - } - - bool InitConfig::hasFoamConfig() const { - // return !this->foamconfig.empty(); - return true; - } - - const FoamConfig& InitConfig::getFoamConfig() const { - if( !this->hasFoamConfig() ) - throw std::runtime_error( "Error: No foam model configuration keywords present" ); - - return this->foamconfig; - } - - bool InitConfig::operator==(const InitConfig& data) const { - return equil == data.equil && - foamconfig == data.foamconfig && - m_filleps == data.m_filleps && - m_gravity == data.m_gravity && - m_restartRequested == data.m_restartRequested && - m_restartStep == data.m_restartStep && - m_restartRootName == data.m_restartRootName; - } - -} //namespace Opm diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Runspec.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Runspec.cpp deleted file mode 100644 index ec1e7a6997..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Runspec.cpp +++ /dev/null @@ -1,399 +0,0 @@ -/* - Copyright 2016 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify it under the terms - of the GNU General Public License as published by the Free Software - Foundation, either version 3 of the License, or (at your option) any later - version. - - OPM is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR - A PARTICULAR PURPOSE. See the GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along with - OPM. If not, see . -*/ - -#include -#include - -#include -#include -#include -#include -#include - -namespace Opm { - -Phase get_phase( const std::string& str ) { - if( str == "OIL" ) return Phase::OIL; - if( str == "GAS" ) return Phase::GAS; - if( str == "WAT" ) return Phase::WATER; - if( str == "WATER" ) return Phase::WATER; - if( str == "SOLVENT" ) return Phase::SOLVENT; - if( str == "POLYMER" ) return Phase::POLYMER; - if( str == "ENERGY" ) return Phase::ENERGY; - if( str == "POLYMW" ) return Phase::POLYMW; - if( str == "FOAM" ) return Phase::FOAM; - if( str == "BRINE" ) return Phase::BRINE; - - throw std::invalid_argument( "Unknown phase '" + str + "'" ); -} - -std::ostream& operator<<( std::ostream& stream, const Phase& p ) { - switch( p ) { - case Phase::OIL: return stream << "OIL"; - case Phase::GAS: return stream << "GAS"; - case Phase::WATER: return stream << "WATER"; - case Phase::SOLVENT: return stream << "SOLVENT"; - case Phase::POLYMER: return stream << "POLYMER"; - case Phase::ENERGY: return stream << "ENERGY"; - case Phase::POLYMW: return stream << "POLYMW"; - case Phase::FOAM: return stream << "FOAM"; - case Phase::BRINE: return stream << "BRINE"; - - } - - return stream; -} - -using un = std::underlying_type< Phase >::type; - -Phases::Phases( bool oil, bool gas, bool wat, bool sol, bool pol, bool energy, bool polymw, bool foam, bool brine) noexcept : - bits( (oil ? (1 << static_cast< un >( Phase::OIL ) ) : 0) | - (gas ? (1 << static_cast< un >( Phase::GAS ) ) : 0) | - (wat ? (1 << static_cast< un >( Phase::WATER ) ) : 0) | - (sol ? (1 << static_cast< un >( Phase::SOLVENT ) ) : 0) | - (pol ? (1 << static_cast< un >( Phase::POLYMER ) ) : 0) | - (energy ? (1 << static_cast< un >( Phase::ENERGY ) ) : 0) | - (polymw ? (1 << static_cast< un >( Phase::POLYMW ) ) : 0) | - (foam ? (1 << static_cast< un >( Phase::FOAM ) ) : 0) | - (brine ? (1 << static_cast< un >( Phase::BRINE ) ) : 0) ) - -{} - -Phases Phases::serializeObject() -{ - return Phases(true, true, true, false, true, false, true, false); -} - -bool Phases::active( Phase p ) const noexcept { - return this->bits[ static_cast< int >( p ) ]; -} - -size_t Phases::size() const noexcept { - return this->bits.count(); -} - -bool Phases::operator==(const Phases& data) const { - return bits == data.bits; -} - -Welldims::Welldims(const Deck& deck) -{ - if (deck.hasKeyword("WELLDIMS")) { - const auto& wd = deck.getKeyword("WELLDIMS", 0).getRecord(0); - - this->nCWMax = wd.getItem("MAXCONN") .get(0); - this->nWGMax = wd.getItem("MAX_GROUPSIZE").get(0); - - // This is the E100 definition. E300 instead uses - // - // Max{ "MAXGROUPS", "MAXWELLS" } - // - // i.e., the maximum of item 1 and item 4 here. - this->nGMax = wd.getItem("MAXGROUPS").get(0); - this->nWMax = wd.getItem("MAXWELLS").get(0); - } -} - -Welldims Welldims::serializeObject() -{ - Welldims result; - result.nWMax = 1; - result.nCWMax = 2; - result.nWGMax = 3; - result.nGMax = 4; - - return result; -} - -WellSegmentDims::WellSegmentDims() : - nSegWellMax( ParserKeywords::WSEGDIMS::NSWLMX::defaultValue ), - nSegmentMax( ParserKeywords::WSEGDIMS::NSEGMX::defaultValue ), - nLatBranchMax( ParserKeywords::WSEGDIMS::NLBRMX::defaultValue ) -{} - -WellSegmentDims::WellSegmentDims(const Deck& deck) : WellSegmentDims() -{ - if (deck.hasKeyword("WSEGDIMS")) { - const auto& wsd = deck.getKeyword("WSEGDIMS", 0).getRecord(0); - - this->nSegWellMax = wsd.getItem("NSWLMX").get(0); - this->nSegmentMax = wsd.getItem("NSEGMX").get(0); - this->nLatBranchMax = wsd.getItem("NLBRMX").get(0); - } -} - -WellSegmentDims WellSegmentDims::serializeObject() -{ - WellSegmentDims result; - result.nSegWellMax = 1; - result.nSegmentMax = 2; - result.nLatBranchMax = 3; - - return result; -} - -bool WellSegmentDims::operator==(const WellSegmentDims& data) const -{ - return this->maxSegmentedWells() == data.maxSegmentedWells() && - this->maxSegmentsPerWell() == data.maxSegmentsPerWell() && - this->maxLateralBranchesPerWell() == data.maxLateralBranchesPerWell(); -} - -EclHysterConfig::EclHysterConfig(const Opm::Deck& deck) - { - - if (!deck.hasKeyword("SATOPTS")) - return; - - const auto& satoptsItem = deck.getKeyword("SATOPTS").getRecord(0).getItem(0); - for (unsigned i = 0; i < satoptsItem.data_size(); ++i) { - std::string satoptsValue = satoptsItem.get< std::string >(0); - std::transform(satoptsValue.begin(), - satoptsValue.end(), - satoptsValue.begin(), - ::toupper); - - if (satoptsValue == "HYSTER") - activeHyst = true; - } - - // check for the (deprecated) HYST keyword - if (deck.hasKeyword("HYST")) - activeHyst = true; - - if (!activeHyst) - return; - - if (!deck.hasKeyword("EHYSTR")) - throw std::runtime_error("Enabling hysteresis via the HYST parameter for SATOPTS requires the " - "presence of the EHYSTR keyword"); - /*! - * \brief Set the type of the hysteresis model which is used for relative permeability. - * - * -1: relperm hysteresis is disabled - * 0: use the Carlson model for relative permeability hysteresis of the non-wetting - * phase and the drainage curve for the relperm of the wetting phase - * 1: use the Carlson model for relative permeability hysteresis of the non-wetting - * phase and the imbibition curve for the relperm of the wetting phase - */ - const auto& ehystrKeyword = deck.getKeyword("EHYSTR"); - if (deck.hasKeyword("NOHYKR")) - krHystMod = -1; - else { - krHystMod = ehystrKeyword.getRecord(0).getItem("relative_perm_hyst").get(0); - - if (krHystMod != 0 && krHystMod != 1) - throw std::runtime_error( - "Only the Carlson relative permeability hysteresis models (indicated by '0' or " - "'1' for the second item of the 'EHYSTR' keyword) are supported"); - } - - // this is slightly screwed: it is possible to specify contradicting hysteresis - // models with HYPC/NOHYPC and the fifth item of EHYSTR. Let's ignore that for - // now. - /*! - * \brief Return the type of the hysteresis model which is used for capillary pressure. - * - * -1: capillary pressure hysteresis is disabled - * 0: use the Killough model for capillary pressure hysteresis - */ - std::string whereFlag = - ehystrKeyword.getRecord(0).getItem("limiting_hyst_flag").getTrimmedString(0); - if (deck.hasKeyword("NOHYPC") || whereFlag == "KR") - pcHystMod = -1; - else { - // if capillary pressure hysteresis is enabled, Eclipse always uses the - // Killough model - pcHystMod = 0; - - throw std::runtime_error("Capillary pressure hysteresis is not supported yet"); - } - } - -EclHysterConfig EclHysterConfig::serializeObject() -{ - EclHysterConfig result; - result.activeHyst = true; - result.pcHystMod = 1; - result.krHystMod = 2; - - return result; -} - -bool EclHysterConfig::active() const - { return activeHyst; } - -int EclHysterConfig::pcHysteresisModel() const - { return pcHystMod; } - -int EclHysterConfig::krHysteresisModel() const - { return krHystMod; } - -bool EclHysterConfig::operator==(const EclHysterConfig& data) const { - return this->active() == data.active() && - this->pcHysteresisModel() == data.pcHysteresisModel() && - this->krHysteresisModel() == data.krHysteresisModel(); -} - -SatFuncControls::SatFuncControls() - : tolcrit(ParserKeywords::TOLCRIT::VALUE::defaultValue) -{} - -SatFuncControls::SatFuncControls(const Deck& deck) - : SatFuncControls() -{ - using Kw = ParserKeywords::TOLCRIT; - - if (deck.hasKeyword()) { - // SIDouble doesn't perform any unit conversions here since - // TOLCRIT is a pure scalar (Dimension = 1). - this->tolcrit = deck.getKeyword(0).getRecord(0) - .getItem().getSIDouble(0); - } - - if (deck.hasKeyword()) - krmodel = ThreePhaseOilKrModel::Stone1; - else if (deck.hasKeyword() || - deck.hasKeyword()) - krmodel = ThreePhaseOilKrModel::Stone2; -} - -SatFuncControls::SatFuncControls(const double tolcritArg, - ThreePhaseOilKrModel model) - : tolcrit(tolcritArg) - , krmodel(model) -{} - -SatFuncControls SatFuncControls::serializeObject() -{ - SatFuncControls result; - result.tolcrit = 1.0; - result.krmodel = ThreePhaseOilKrModel::Stone2; - - return result; -} - -bool SatFuncControls::operator==(const SatFuncControls& rhs) const -{ - return this->minimumRelpermMobilityThreshold() == rhs.minimumRelpermMobilityThreshold() && - this->krModel() == rhs.krModel(); -} - -Runspec::Runspec( const Deck& deck ) : - active_phases( Phases( deck.hasKeyword( "OIL" ), - deck.hasKeyword( "GAS" ), - deck.hasKeyword( "WATER" ), - deck.hasKeyword( "SOLVENT" ), - deck.hasKeyword( "POLYMER" ), - deck.hasKeyword( "THERMAL" ), - deck.hasKeyword( "POLYMW" ), - deck.hasKeyword( "FOAM" ), - deck.hasKeyword( "BRINE" ) ) ), - m_tabdims( deck ), - endscale( deck ), - welldims( deck ), - wsegdims( deck ), - udq_params( deck ), - hystpar( deck ), - m_actdims( deck ), - m_sfuncctrl( deck ) -{} - -Runspec Runspec::serializeObject() -{ - Runspec result; - result.active_phases = Phases::serializeObject(); - result.m_tabdims = Tabdims::serializeObject(); - result.endscale = EndpointScaling::serializeObject(); - result.welldims = Welldims::serializeObject(); - result.wsegdims = WellSegmentDims::serializeObject(); - result.udq_params = UDQParams::serializeObject(); - result.hystpar = EclHysterConfig::serializeObject(); - result.m_actdims = Actdims::serializeObject(); - result.m_sfuncctrl = SatFuncControls::serializeObject(); - - return result; -} - -const Phases& Runspec::phases() const noexcept { - return this->active_phases; -} - -const Tabdims& Runspec::tabdims() const noexcept { - return this->m_tabdims; -} - -const Actdims& Runspec::actdims() const noexcept { - return this->m_actdims; -} - -const EndpointScaling& Runspec::endpointScaling() const noexcept { - return this->endscale; -} - -const Welldims& Runspec::wellDimensions() const noexcept -{ - return this->welldims; -} - -const WellSegmentDims& Runspec::wellSegmentDimensions() const noexcept -{ - return this->wsegdims; -} - -const EclHysterConfig& Runspec::hysterPar() const noexcept -{ - return this->hystpar; -} - -const SatFuncControls& Runspec::saturationFunctionControls() const noexcept -{ - return this->m_sfuncctrl; -} - -/* - Returns an integer in the range 0...7 which can be used to indicate - available phases in Eclipse restart and init files. -*/ -int Runspec::eclPhaseMask( ) const noexcept { - const int water = 1 << 2; - const int oil = 1 << 0; - const int gas = 1 << 1; - - return ( active_phases.active( Phase::WATER ) ? water : 0 ) - | ( active_phases.active( Phase::OIL ) ? oil : 0 ) - | ( active_phases.active( Phase::GAS ) ? gas : 0 ); -} - - -const UDQParams& Runspec::udqParams() const noexcept { - return this->udq_params; -} - -bool Runspec::operator==(const Runspec& data) const { - return this->phases() == data.phases() && - this->tabdims() == data.tabdims() && - this->endpointScaling() == data.endpointScaling() && - this->wellDimensions() == data.wellDimensions() && - this->wellSegmentDimensions() == data.wellSegmentDimensions() && - this->hysterPar() == data.hysterPar() && - this->actdims() == data.actdims() && - this->saturationFunctionControls() == data.saturationFunctionControls(); -} - -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Action/ASTNode.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Action/ASTNode.cpp deleted file mode 100644 index af910f83e6..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Action/ASTNode.cpp +++ /dev/null @@ -1,170 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifdef _WIN32 -#include "cross-platform/windows/Substitutes.hpp" -#else -#include -#endif - -#include - -#include -#include -#include - -namespace { - std::string strip_quotes(const std::string& s) { - if (s[0] == '\'') - return s.substr(1, s.size() - 2); - else - return s; - } - - std::vector strip_quotes(const std::vector& quoted_strings) { - std::vector strings; - for (const auto& qs : quoted_strings) - strings.push_back(strip_quotes(qs)); - - return strings; - } - -} - -namespace Opm { -namespace Action { - -ASTNode::ASTNode() : - type(TokenType::error) -{} - - -ASTNode::ASTNode(TokenType type_arg) - : - type(type_arg) -{} - - -ASTNode::ASTNode(double value) : - type(TokenType::number), - number(value) -{} - - -ASTNode::ASTNode(TokenType type_arg, - FuncType func_type_arg, - const std::string& func_arg, - const std::vector& arg_list_arg) - : - type(type_arg), - func_type(func_type_arg), - func(func_arg), - arg_list(strip_quotes(arg_list_arg)) -{} - -ASTNode ASTNode::serializeObject() -{ - ASTNode result; - result.type = Opm::TokenType::number; - result.func_type = Opm::FuncType::field; - result.func = "test1"; - result.arg_list = {"test2"}; - result.number = 1.0; - ASTNode child = result; - result.children = {child}; - - return result; -} - -size_t ASTNode::size() const { - return this->children.size(); -} - - -void ASTNode::add_child(const ASTNode& child) { - this->children.push_back(child); -} - -Action::Value ASTNode::value(const Action::Context& context) const { - if (this->children.size() != 0) - throw std::invalid_argument("value() method should only reach leafnodes"); - - if (this->type == TokenType::number) - return Action::Value(this->number); - - if (this->arg_list.size() == 0) - return Action::Value(context.get(this->func)); - else { - /* - The matching code is special case to handle one-argument cases with - well patterns like 'P*'. - */ - if ((this->arg_list.size() == 1) && (arg_list[0].find("*") != std::string::npos)) { - if (this->func_type != FuncType::well) - throw std::logic_error(": attempted to action-evaluate list not of type well."); - - Action::Value well_values; - int fnmatch_flags = 0; - for (const auto& well : context.wells(this->func)) { - if (fnmatch(this->arg_list[0].c_str(), well.c_str(), fnmatch_flags) == 0) - well_values.add_well(well, context.get(this->func, well)); - } - return well_values; - } else { - std::string arg_key = this->arg_list[0]; - for (size_t index = 1; index < this->arg_list.size(); index++) - arg_key += ":" + this->arg_list[index]; - return Action::Value(context.get(this->func, arg_key)); - } - } -} - - -Action::Result ASTNode::eval(const Action::Context& context) const { - if (this->children.size() == 0) - throw std::invalid_argument("ASTNode::eval() should not reach leafnodes"); - - if (this->type == TokenType::op_or || this->type == TokenType::op_and) { - Action::Result result(this->type == TokenType::op_and); - for (const auto& child : this->children) { - if (this->type == TokenType::op_or) - result |= child.eval(context); - else - result &= child.eval(context); - } - return result; - } - - auto v1 = this->children[0].value(context); - auto v2 = this->children[1].value(context); - return v1.eval_cmp(this->type, v2); -} - - -bool ASTNode::operator==(const ASTNode& data) const { - return type == data.type && - func_type == data.func_type && - func == data.func && - arg_list == data.arg_list && - number == data.number && - children == data.children; -} - -} -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Action/Actdims.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Action/Actdims.cpp deleted file mode 100644 index 49a7cddef6..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Action/Actdims.cpp +++ /dev/null @@ -1,82 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include -#include - -namespace Opm { - -Actdims::Actdims(): - keywords(ParserKeywords::ACTDIMS::MAX_ACTION::defaultValue), - line_count(ParserKeywords::ACTDIMS::MAX_ACTION_LINES::defaultValue), - characters(ParserKeywords::ACTDIMS::MAX_ACTION_LINE_CHARACTERS::defaultValue), - conditions(ParserKeywords::ACTDIMS::MAX_ACTION_COND::defaultValue) -{} - - -Actdims::Actdims(const Deck& deck) - : Actdims() -{ - if (deck.hasKeyword()) { - const auto& keyword = deck.getKeyword(); - const auto& record = keyword.getRecord(0); - - this->keywords = record.getItem().get(0); - this->line_count = record.getItem().get(0); - this->characters = record.getItem().get(0); - this->conditions = record.getItem().get(0); - } -} - -Actdims Actdims::serializeObject() -{ - Actdims result; - result.keywords = 1; - result.line_count = 2; - result.characters = 3; - result.conditions = 4; - - return result; -} - -std::size_t Actdims::max_keywords() const { - return this->keywords; -} - -std::size_t Actdims::max_line_count() const { - return this->line_count; -} - -std::size_t Actdims::max_characters() const { - return this->characters; -} - -std::size_t Actdims::max_conditions() const { - return this->conditions; -} - -bool Actdims::operator==(const Actdims& data) const { - return this->max_keywords() == data.max_keywords() && - this->max_line_count() == data.max_line_count() && - this->max_characters() == data.max_characters() && - this->max_conditions() == data.max_conditions(); -} - - -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Action/ActionAST.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Action/ActionAST.cpp deleted file mode 100644 index 04266fd7ac..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Action/ActionAST.cpp +++ /dev/null @@ -1,67 +0,0 @@ -/* - Copyright 2018 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -#include "ActionParser.hpp" - -namespace Opm { -namespace Action { - -AST::AST(const std::vector& tokens) { - auto condition_node = Action::Parser::parse(tokens); - this->condition.reset( new Action::ASTNode(condition_node) ); -} - -AST AST::serializeObject() -{ - AST result; - result.condition = std::make_shared(ASTNode::serializeObject()); - - return result; -} - -Action::Result AST::eval(const Action::Context& context) const { - if (this->condition) - return this->condition->eval(context); - else - return Action::Result(false); -} - - -bool AST::operator==(const AST& data) const { - if ((condition && !data.condition) || - (!condition && data.condition)) - return false; - - return !condition || (*condition == *data.condition); -} - - -} -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Action/ActionContext.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Action/ActionContext.cpp deleted file mode 100644 index d6c55c1535..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Action/ActionContext.cpp +++ /dev/null @@ -1,61 +0,0 @@ -/* - Copyright 2018 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include -#include -#include - -namespace Opm { -namespace Action { - - void Context::add(const std::string& func, const std::string& arg, double value) { - this->values[func + ":" + arg] = value; - } - - Context::Context(const SummaryState& summary_state_arg) : - summary_state(summary_state_arg) - { - for (const auto& pair : TimeMap::eclipseMonthIndices()) - this->add(pair.first, pair.second); - } - - void Context::add(const std::string& func, double value) { - this->values[func] = value; - } - - - double Context::get(const std::string& func, const std::string& arg) const { - return this->get(func + ":" + arg); - } - - double Context::get(const std::string& key) const { - const auto& iter = this->values.find(key); - if (iter != this->values.end()) - return iter->second; - - return this->summary_state.get(key); - } - - - std::vector Context::wells(const std::string& key) const { - return this->summary_state.wells(key); - } - -} -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Action/ActionParser.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Action/ActionParser.cpp deleted file mode 100644 index 12edcfcf6a..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Action/ActionParser.cpp +++ /dev/null @@ -1,285 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include -#include -#include -#include -#include - -#include - -#include "ActionParser.hpp" - -namespace Opm { -namespace Action { - -Parser::Parser(const std::vector& tokens_arg) : - tokens(tokens_arg) -{} - - -TokenType Parser::get_type(const std::string& arg) { - std::string lower_arg = arg; - std::for_each(lower_arg.begin(), - lower_arg.end(), - [](char& c) { - c = std::tolower(static_cast(c)); - }); - - if (lower_arg == "and") - return TokenType::op_and; - - if (lower_arg == "or") - return TokenType::op_or; - - if (lower_arg == "(") - return TokenType::open_paren; - - if (lower_arg == ")") - return TokenType::close_paren; - - if (lower_arg == ">" || lower_arg == ".gt.") - return TokenType::op_gt; - - if (lower_arg == ">=" || lower_arg == ".ge.") - return TokenType::op_ge; - - if (lower_arg == "<=" || lower_arg == ".le.") - return TokenType::op_le; - - if (lower_arg == "<" || lower_arg == ".lt.") - return TokenType::op_lt; - - if (lower_arg == "<=" || lower_arg == ".le.") - return TokenType::op_le; - - if (lower_arg == "=" || lower_arg == ".eq.") - return TokenType::op_eq; - - if (lower_arg == "!=" || lower_arg == ".ne.") - return TokenType::op_ne; - - { - char * end_ptr; - std::strtod(lower_arg.c_str(), &end_ptr); - if (std::strlen(end_ptr) == 0) - return TokenType::number; - } - - return TokenType::ecl_expr; -} - -FuncType Parser::get_func(const std::string& arg) { - - if (arg == "YEAR") return FuncType::time; - if (arg == "MNTH") return FuncType::time; - if (arg == "DAY") return FuncType::time; - - using Cat = SummaryConfigNode::Category; - SummaryConfigNode::Category cat = parseKeywordCategory(arg); - switch (cat) { - case Cat::Aquifer: return FuncType::aquifer; - case Cat::Well: return FuncType::well; - case Cat::Group: return FuncType::group; - case Cat::Connection: return FuncType::well_connection; - case Cat::Region: return FuncType::region; - case Cat::Block: return FuncType::block; - case Cat::Segment: return FuncType::well_segment; - default: return FuncType::none; - } -} - - -ParseNode Parser::next() { - this->current_pos++; - if (static_cast(this->current_pos) == this->tokens.size()) - return TokenType::end; - - std::string arg = this->tokens[this->current_pos]; - return ParseNode(get_type(arg), arg); -} - - -ParseNode Parser::current() const { - if (static_cast(this->current_pos) == this->tokens.size()) - return TokenType::end; - - std::string arg = this->tokens[this->current_pos]; - return ParseNode(get_type(arg), arg); -} - - -Action::ASTNode Parser::parse_left() { - auto current = this->current(); - if (current.type != TokenType::ecl_expr) - return TokenType::error; - - std::string func = current.value; - FuncType func_type = get_func(current.value); - std::vector arg_list; - current = this->next(); - while (current.type == TokenType::ecl_expr || current.type == TokenType::number) { - arg_list.push_back(current.value); - current = this->next(); - } - - return Action::ASTNode(TokenType::ecl_expr, func_type, func, arg_list); -} - -Action::ASTNode Parser::parse_op() { - auto current = this->current(); - if (current.type == TokenType::op_gt || - current.type == TokenType::op_ge || - current.type == TokenType::op_lt || - current.type == TokenType::op_le || - current.type == TokenType::op_eq || - current.type == TokenType::op_ne) { - this->next(); - return current.type; - } - return TokenType::error; -} - - -Action::ASTNode Parser::parse_right() { - auto current = this->current(); - if (current.type == TokenType::number) { - this->next(); - return Action::ASTNode( strtod(current.value.c_str(), nullptr) ); - } - - current = this->current(); - if (current.type != TokenType::ecl_expr) - return TokenType::error; - - std::string func = current.value; - FuncType func_type = FuncType::none; - std::vector arg_list; - current = this->next(); - while (current.type == TokenType::ecl_expr || current.type == TokenType::number) { - arg_list.push_back(current.value); - current = this->next(); - } - return Action::ASTNode(TokenType::ecl_expr, func_type, func, arg_list); -} - - - -Action::ASTNode Parser::parse_cmp() { - auto current = this->current(); - - if (current.type == TokenType::open_paren) { - this->next(); - auto inner_expr = this->parse_or(); - - current = this->current(); - if (current.type != TokenType::close_paren) - return TokenType::error; - - this->next(); - return inner_expr; - } else { - auto left_node = this->parse_left(); - if (left_node.type == TokenType::error) - return TokenType::error; - - auto op_node = this->parse_op(); - if (op_node.type == TokenType::error) - return TokenType::error; - - auto right_node = this->parse_right(); - if (right_node.type == TokenType::error) - return TokenType::error; - - op_node.add_child(left_node); - op_node.add_child(right_node); - return op_node; - } -} - -Action::ASTNode Parser::parse_and() { - auto left = this->parse_cmp(); - if (left.type == TokenType::error) - return TokenType::error; - - auto current = this->current(); - if (current.type == TokenType::op_and) { - Action::ASTNode and_node(TokenType::op_and); - and_node.add_child(left); - - while (this->current().type == TokenType::op_and) { - this->next(); - auto next_cmp = this->parse_cmp(); - if (next_cmp.type == TokenType::error) - return TokenType::error; - - and_node.add_child(next_cmp); - } - return and_node; - } - - return left; -} - - -Action::ASTNode Parser::parse_or() { - auto left = this->parse_and(); - if (left.type == TokenType::error) - return TokenType::error; - - auto current = this->current(); - if (current.type == TokenType::op_or) { - Action::ASTNode or_node(TokenType::op_or); - or_node.add_child(left); - - while (this->current().type == TokenType::op_or) { - this->next(); - auto next_cmp = this->parse_or(); - if (next_cmp.type == TokenType::error) - return TokenType::error; - - or_node.add_child(next_cmp); - } - return or_node; - } - - return left; -} - - -Action::ASTNode Parser::parse(const std::vector& tokens) { - Parser parser(tokens); - parser.next(); - - auto tree = parser.parse_or(); - auto current = parser.current(); - if (current.type != TokenType::end) { - size_t index = parser.current_pos; - throw std::invalid_argument("Extra unhandled data starting with token[" + std::to_string(index) + "] = " + current.value); - } - - if (tree.type == TokenType::error) - throw std::invalid_argument("Failed to parse"); - - return tree; -} -} -} - diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Action/ActionParser.hpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Action/ActionParser.hpp deleted file mode 100644 index 24bd791209..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Action/ActionParser.hpp +++ /dev/null @@ -1,81 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef ACTION_PARSER_HPP -#define ACTION_PARSER_HPP - -#include -#include - -#ifdef _MSC_VER -#include -typedef SSIZE_T ssize_t; -#endif - -#include -#include - -namespace Opm { - -namespace Action { - -struct ParseNode { - ParseNode(TokenType type_arg, const std::string& value_arg) : - type(type_arg), - value(value_arg) - {} - - // Implicit converting constructor. - ParseNode(TokenType type_arg) : ParseNode(type_arg, "") - {} - - - TokenType type; - std::string value; -}; - - - -class Parser { -public: - static Action::ASTNode parse(const std::vector& tokens); - static TokenType get_type(const std::string& arg); - static FuncType get_func(const std::string& arg); - -private: - explicit Parser(const std::vector& tokens); - - ParseNode current() const; - ParseNode next(); - size_t pos() const; - Action::ASTNode parse_cmp(); - Action::ASTNode parse_op(); - Action::ASTNode parse_left(); - Action::ASTNode parse_right(); - Action::ASTNode parse_and(); - Action::ASTNode parse_or(); - - const std::vector& tokens; - ssize_t current_pos = -1; -}; - - -} -} -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Action/ActionResult.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Action/ActionResult.cpp deleted file mode 100644 index 0ba760609c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Action/ActionResult.cpp +++ /dev/null @@ -1,156 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include -#include - -#include - -namespace Opm { -namespace Action { - -Result::Result(bool result_arg) : - result(result_arg) -{} - -Result::Result(bool result_arg, const std::vector& wells) : - result(result_arg) -{ - this->matching_wells.reset( new WellSet(wells) ); -} - -Result::Result(bool result_arg, const WellSet& wells) : - result(result_arg) -{ - this->matching_wells.reset( new WellSet(wells) ); -} - -Result::Result(const Result& src) -{ - this->result = src.result; - if (src.matching_wells) - this->matching_wells.reset( new WellSet(*src.matching_wells) ); -} - -Result::operator bool() const { - return this->result; -} - -std::vector Result::wells() const { - if (this->matching_wells) - return this->matching_wells->wells(); - else - return {}; -} - -Result& Result::operator|=(const Result& other) { - this->result = this->result || other.result; - - if (other.matching_wells) { - if (this->matching_wells) - this->matching_wells->add( *other.matching_wells ); - else - this->matching_wells.reset( new WellSet(*other.matching_wells) ); - } - return *this; -} - -Result& Result::operator&=(const Result& other) { - this->result = this->result && other.result; - - if (other.matching_wells) { - if (this->matching_wells) - this->matching_wells->intersect( *other.matching_wells ); - else - this->matching_wells.reset( new WellSet(*other.matching_wells) ); - } - return *this; -} - -Result& Result::operator=(const Result& src) -{ - this->result = src.result; - if (src.matching_wells) this->matching_wells.reset( new WellSet(*src.matching_wells) ); - - return *this; -} - -void Result::assign(bool value) { - this->result = value; -} - -void Result::add_well(const std::string& well) { - if (!this->matching_wells) - this->matching_wells.reset( new WellSet() ); - this->matching_wells->add(well); -} - -bool Result::has_well(const std::string& well) const { - if (!this->matching_wells) - return false; - - return this->matching_wells->contains(well); -} - -/******************************************************************/ - -WellSet::WellSet(const std::vector& wells) -{ - this->well_set.insert(wells.begin(), wells.end()); -} - - -void WellSet::add(const std::string& well) { - this->well_set.insert(well); -} - - -std::size_t WellSet::size() const { - return this->well_set.size(); -} - -std::vector WellSet::wells() const { - return std::vector( this->well_set.begin(), this->well_set.end() ); -} - - -WellSet& WellSet::intersect(const WellSet& other) { - auto well_iter = this->well_set.begin(); - while (well_iter != this->well_set.end()) { - if (other.contains(*well_iter)) - well_iter++; - else - well_iter = this->well_set.erase(well_iter); - } - - return *this; -} - -WellSet& WellSet::add(const WellSet& other) { - this->well_set.insert(other.well_set.begin(), other.well_set.end()); - return *this; -} - - -bool WellSet::contains(const std::string& well) const { - return (this->well_set.find(well) != this->well_set.end()); -} - -} -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Action/ActionValue.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Action/ActionValue.cpp deleted file mode 100644 index e7f59a103d..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Action/ActionValue.cpp +++ /dev/null @@ -1,140 +0,0 @@ -#include - -#include - - -namespace Opm { -namespace Action { - -namespace { - -#if 0 -inline std::string tokenString(TokenType op) { - switch (op) { - - case TokenType::op_eq: - return "=="; - - case TokenType::op_ge: - return ">="; - - case TokenType::op_le: - return "<="; - - case TokenType::op_ne: - return "!="; - - case TokenType::op_gt: - return ">"; - - case TokenType::op_lt: - return "<"; - - case TokenType::op_or: - return "OR"; - - case TokenType::op_and: - return "AND"; - - case TokenType::open_paren: - return "("; - - case TokenType::close_paren: - return ")"; - - default: - return "????"; - } -} -#endif - -bool eval_cmp_scalar(double lhs, TokenType op, double rhs) { - switch (op) { - - case TokenType::op_eq: - return lhs == rhs; - - case TokenType::op_ge: - return lhs >= rhs; - - case TokenType::op_le: - return lhs <= rhs; - - case TokenType::op_ne: - return lhs != rhs; - - case TokenType::op_gt: - return lhs > rhs; - - case TokenType::op_lt: - return lhs < rhs; - - default: - throw std::invalid_argument("Incorrect operator type - expected comparison"); - } -} - -} - - -Value::Value(double value) : - scalar_value(value), - is_scalar(true) -{ } - - -double Value::scalar() const { - if (!this->is_scalar) - throw std::invalid_argument("This value node represents a well list and can not be evaluated in scalar context"); - - return this->scalar_value; -} - - -void Value::add_well(const std::string& well, double value) { - if (this->is_scalar) - throw std::invalid_argument("This value node has been created as a scalar node - can not add well variables"); - - this->well_values.emplace_back(well, value); -} - - -Result Value::eval_cmp_wells(TokenType op, double rhs) const { - std::vector wells; - bool result = false; - - for (const auto& pair : this->well_values) { - const std::string& well = pair.first; - const double value = pair.second; - - if (eval_cmp_scalar(value, op, rhs)) { - wells.push_back(well); - result = true; - } - } - return Result(result, wells); -} - - -Result Value::eval_cmp(TokenType op, const Value& rhs) const { - if (op == TokenType::number || - op == TokenType::ecl_expr || - op == TokenType::open_paren || - op == TokenType::close_paren || - op == TokenType::op_and || - op == TokenType::op_or || - op == TokenType::end || - op == TokenType::error) - throw std::invalid_argument("Invalid operator"); - - if (!rhs.is_scalar) - throw std::invalid_argument("The right hand side must be a scalar value"); - - if (this->is_scalar) - return Action::Result(eval_cmp_scalar(this->scalar(), op, rhs.scalar())); - - return this->eval_cmp_wells(op, rhs.scalar()); -} - -} -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Action/ActionX.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Action/ActionX.cpp deleted file mode 100644 index cff045a762..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Action/ActionX.cpp +++ /dev/null @@ -1,200 +0,0 @@ -/* - Copyright 2018 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include -#include - -#include -#include -#include -#include - -#include "ActionParser.hpp" - -namespace Opm { -namespace Action { - - -bool ActionX::valid_keyword(const std::string& keyword) { - static std::unordered_set actionx_whitelist = {"EXIT", "WELSPECS","WELOPEN"}; - return (actionx_whitelist.find(keyword) != actionx_whitelist.end()); -} - - -ActionX::ActionX() : - m_start_time(0) -{ -} - - -ActionX::ActionX(const std::string& name, size_t max_run, double min_wait, std::time_t start_time) : - m_name(name), - m_max_run(max_run), - m_min_wait(min_wait), - m_start_time(start_time) -{} - - -ActionX::ActionX(const DeckRecord& record, std::time_t start_time) : - ActionX( record.getItem("NAME").getTrimmedString(0), - record.getItem("NUM").get(0), - record.getItem("MIN_WAIT").getSIDouble(0), - start_time ) - -{} - - -ActionX::ActionX(const DeckKeyword& kw, std::time_t start_time) : - ActionX(kw.getRecord(0), start_time) -{ - std::vector tokens; - for (size_t record_index = 1; record_index < kw.size(); record_index++) { - const auto& record = kw.getRecord(record_index); - const auto& cond_tokens = RawString::strings( record.getItem("CONDITION").getData() ); - - for (const auto& token : cond_tokens) - tokens.push_back(token); - - this->m_conditions.emplace_back(cond_tokens, kw.location()); - } - this->condition = Action::AST(tokens); -} - - -ActionX ActionX::serializeObject() -{ - ActionX result; - result.m_name = "test"; - result.m_max_run = 1; - result.m_min_wait = 2; - result.m_start_time = 3; - result.keywords = {DeckKeyword::serializeObject()}; - result.condition = Action::AST::serializeObject(); - Quantity quant; - quant.quantity = "test1"; - quant.args = {"test2"}; - Condition cond; - cond.lhs = quant; - cond.rhs = quant; - cond.logic = Condition::Logical::AND; - cond.cmp = Condition::Comparator::GREATER_EQUAL; - cond.cmp_string = "test3"; - result.m_conditions = {cond}; - result.run_count = 4; - result.last_run = 5; - - return result; -} - - -void ActionX::addKeyword(const DeckKeyword& kw) { - this->keywords.push_back(kw); -} - - - -Action::Result ActionX::eval(std::time_t sim_time, const Action::Context& context) const { - if (!this->ready(sim_time)) - return Action::Result(false); - - auto result = this->condition.eval(context); - - if (result) { - this->run_count += 1; - this->last_run = sim_time; - } - - return result; -} - - -bool ActionX::ready(std::time_t sim_time) const { - if (this->run_count >= this->max_run()) - return false; - - if (sim_time < this->start_time()) - return false; - - if (this->run_count == 0) - return true; - - if (this->min_wait() <= 0) - return true; - - return std::difftime(sim_time, this->last_run) > this->min_wait(); -} - - -std::vector::const_iterator ActionX::begin() const { - return this->keywords.begin(); -} - -std::vector::const_iterator ActionX::end() const { - return this->keywords.end(); -} - - -std::vector ActionX::keyword_strings() const { - std::vector keyword_strings; - std::string keyword_string; - { - std::stringstream ss; - - for (const auto& kw : this->keywords) - ss << kw; - - keyword_string = ss.str(); - } - - std::size_t offset = 0; - while (true) { - auto eol_pos = keyword_string.find('\n', offset); - if (eol_pos == std::string::npos) - break; - - if (eol_pos > offset) - keyword_strings.push_back(keyword_string.substr(offset, eol_pos - offset)); - - offset = eol_pos + 1; - } - keyword_strings.push_back("ENDACTIO"); - - return keyword_strings; -} - - -const std::vector& ActionX::conditions() const { - return this->m_conditions; -} - - -bool ActionX::operator==(const ActionX& data) const { - return this->name() == data.name() && - this->max_run() == data.max_run() && - this->min_wait() == data.min_wait() && - this->start_time() == data.start_time() && - this->keywords == data.keywords && - this->condition == data.condition && - this->conditions() == data.conditions() && - this->run_count == data.run_count && - this->last_run == data.last_run; -} - -} -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Action/Actions.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Action/Actions.cpp deleted file mode 100644 index b8dba9e521..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Action/Actions.cpp +++ /dev/null @@ -1,135 +0,0 @@ -/* - Copyright 2018 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ -#include - -#include -#include - -namespace Opm { -namespace Action { - - -Actions::Actions(const std::vector& action, const std::vector& pyaction) - : actions(action), - pyactions(pyaction) -{} - - -Actions Actions::serializeObject() -{ - Actions result; - result.actions = {ActionX::serializeObject()}; - result.pyactions = {PyAction::serializeObject()}; - - return result; -} - - -size_t Actions::size() const { - return this->actions.size(); -} - - -bool Actions::empty() const { - return this->actions.empty() && this->pyactions.empty(); -} - - -void Actions::add(const ActionX& action) { - auto iter = std::find_if( this->actions.begin(), this->actions.end(), [&action](const ActionX& arg) { return arg.name() == action.name(); }); - if (iter == this->actions.end()) - this->actions.push_back(action); - else - *iter = action; -} - -void Actions::add(const PyAction& pyaction) { - auto iter = std::find_if( this->pyactions.begin(), this->pyactions.end(), [&pyaction](const PyAction& arg) { return arg.name() == pyaction.name(); }); - if (iter == this->pyactions.end()) - this->pyactions.push_back(pyaction); - else - *iter = pyaction; -} - - -const ActionX& Actions::get(const std::string& name) const { - const auto iter = std::find_if( this->actions.begin(), this->actions.end(), [&name](const ActionX& action) { return action.name() == name; }); - if (iter == this->actions.end()) - throw std::range_error("No such action: " + name); - - return *iter; -} - -const ActionX& Actions::get(std::size_t index) const { - return this->actions[index]; -} - -int Actions::max_input_lines() const { - std::size_t max_il = 0; - for (const auto& act : this-> actions) { - if (act.keyword_strings().size() > max_il) max_il = act.keyword_strings().size() ; - } - return static_cast(max_il); -} - - -bool Actions::ready(std::time_t sim_time) const { - for (const auto& action : this->actions) { - if (action.ready(sim_time)) - return true; - } - return false; -} - -std::vector Actions::pending_python() const { - std::vector pyaction_vector; - for (const auto& pyaction : this->pyactions) { - if (pyaction.active()) - pyaction_vector.push_back( &pyaction ); - } - return pyaction_vector; - -} - - -std::vector Actions::pending(std::time_t sim_time) const { - std::vector action_vector; - for (const auto& action : this->actions) { - if (action.ready(sim_time)) - action_vector.push_back( &action ); - } - return action_vector; -} - -std::vector::const_iterator Actions::begin() const { - return this->actions.begin(); -} - -std::vector::const_iterator Actions::end() const { - return this->actions.end(); -} - - -bool Actions::operator==(const Actions& data) const { - return this->actions == data.actions && - this->pyactions == data.pyactions; -} - -} -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Action/Condition.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Action/Condition.cpp deleted file mode 100644 index 500d1decf2..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Action/Condition.cpp +++ /dev/null @@ -1,140 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include - -#include -#include -#include - -#include "ActionParser.hpp" - - -namespace Opm { -namespace Action { - - -namespace { - -Condition::Comparator comparator(TokenType tt) { - if (tt == TokenType::op_eq) - return Condition::Comparator::EQUAL; - - if (tt == TokenType::op_gt) - return Condition::Comparator::GREATER; - - if (tt == TokenType::op_lt) - return Condition::Comparator::LESS; - - if (tt == TokenType::op_le) - return Condition::Comparator::LESS_EQUAL; - - if (tt == TokenType::op_ge) - return Condition::Comparator::GREATER_EQUAL; - - return Condition::Comparator::INVALID; -} - - -std::string cmp2string(Condition::Comparator cmp) { - if (cmp == Condition::Comparator::EQUAL) - return "="; - - if (cmp == Condition::Comparator::GREATER) - return ">"; - - if (cmp == Condition::Comparator::LESS) - return "<"; - - if (cmp == Condition::Comparator::LESS_EQUAL) - return "<="; - - if (cmp == Condition::Comparator::GREATER_EQUAL) - return ">="; - - throw std::logic_error("Bug in opm/flow - should not be here"); -} - -std::string strip_quotes(const std::string& s) { - if (s[0] == '\'') - return s.substr(1, s.size() - 2); - else - return s; -} - -} - -void Quantity::add_arg(const std::string& arg) { - this->args.push_back(strip_quotes(arg)); -} - -Condition::Condition(const std::vector& tokens, const Location& location) { - this->lhs = Quantity(tokens[0]); - std::size_t token_index = 1; - - while (true) { - if (token_index >= tokens.size()) - break; - - auto comp = comparator( Parser::get_type(tokens[token_index]) ); - if (comp == Comparator::INVALID) { - this->lhs.add_arg(tokens[token_index]); - token_index += 1; - } else { - this->cmp = comp; - this->cmp_string = cmp2string(this->cmp); - token_index += 1; - break; - } - } - - if (token_index >= tokens.size()) - throw std::invalid_argument("Could not determine right hand side / comparator for ACTIONX keyword at " + location.filename + ":" + std::to_string(location.lineno)); - - this->rhs = Quantity(tokens[token_index]); - token_index++; - - while (true) { - if (token_index >= tokens.size()) - break; - - auto token_type = Parser::get_type(tokens[token_index]); - if (token_type == TokenType::op_and) - this->logic = Condition::Logical::AND; - else if (token_type == TokenType::op_or) - this->logic = Condition::Logical::OR; - else - this->rhs.add_arg(tokens[token_index]); - - token_index++; - } -} - - -bool Condition::operator==(const Condition& data) const { - return lhs == data.lhs && - rhs == data.rhs && - logic == data.logic && - cmp == data.cmp && - cmp_string == data.cmp_string; -} - - -} -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Action/PyAction.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Action/PyAction.cpp deleted file mode 100644 index 008a0dbab4..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Action/PyAction.cpp +++ /dev/null @@ -1,137 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ -#include -#include - -#ifdef EMBEDDED_PYTHON -#include "src/opm/parser/eclipse/Python/PyRunModule.hpp" -#include -#include -namespace py = pybind11; -#endif - - -#include -#include -#include -#include -#include - - -namespace Opm { -namespace Action { - -PyAction::RunCount PyAction::from_string(std::string run_count) { - run_count = uppercase(run_count); - - if (run_count == "SINGLE") - return RunCount::single; - - if (run_count == "UNLIMITED") - return RunCount::unlimited; - - if (run_count == "FIRST_TRUE") - return RunCount::first_true; - - throw std::invalid_argument("RunCount string: " + run_count + " not recognized "); -} - -PyAction PyAction::serializeObject() -{ - PyAction result; - - result.m_name = "name"; - result.m_run_count = RunCount::first_true; - result.m_active = false; - result.module_file = "no.such.file.py"; - - return result; -} - -bool PyAction::active() const { - return this->m_active; -} - - -const std::string& PyAction::name() const { - return this->m_name; -} - -void PyAction::update(bool result) const { - if (this->m_run_count == RunCount::single) - this->m_active = false; - - if (this->m_run_count == RunCount::first_true && result) - this->m_active = false; -} - -bool PyAction::operator==(const PyAction& other) const { - return this->m_name == other.m_name && - this->m_run_count == other.m_run_count && - this->m_active == other.m_active && - this->module_file == other.module_file; -} - - -#ifndef EMBEDDED_PYTHON - -bool PyAction::run(EclipseState&, Schedule&, std::size_t, SummaryState&) const -{ - return false; -} - -PyAction::PyAction(std::shared_ptr, const std::string& name, RunCount run_count, const std::string& fname) : - m_name(name), - m_run_count(run_count), - module_file(fname) -{} - -#else - -PyAction::PyAction(std::shared_ptr python, const std::string& name, RunCount run_count, const std::string& fname) : - run_module( std::make_shared(python, fname)), - m_name(name), - m_run_count(run_count), - module_file(fname) -{ -} - - -bool PyAction::run(EclipseState& ecl_state, Schedule& schedule, std::size_t report_step, SummaryState& st) const -{ - /* - For PyAction instances which have been constructed the 'normal' way - through the four argument constructor the run_module member variable has - already been correctly initialized, however if this instance lives on a - rank != 0 process and has been created through deserialization it was - created without access to a Python handle and we must import the module - now. - */ - if (!this->run_module) - this->run_module = std::make_shared(schedule.python(), this->module_file); - - return this->run_module->run(ecl_state, schedule, report_step, st); -} - - - -#endif - -} -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/ArrayDimChecker.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/ArrayDimChecker.cpp deleted file mode 100644 index 5707d08968..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/ArrayDimChecker.cpp +++ /dev/null @@ -1,169 +0,0 @@ -/* - Copyright (c) 2019 Equinor ASA - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ -#include -#include -#include -#include - -#include -#include - -#include -#include -#include -#include -#include -#include - - -namespace { - namespace WellDims { - void checkNumWells(const Opm::Welldims& wdims, - const Opm::Schedule& sched, - const Opm::ParseContext& ctxt, - Opm::ErrorGuard& guard) - { - const auto nWells = sched.numWells(); - - if (nWells > std::size_t(wdims.maxWellsInField())) - { - std::ostringstream os; - os << "Run uses " << nWells << " wells, but allocates at " - << "most " << wdims.maxWellsInField() << " in RUNSPEC " - << "section. Increase item 1 of WELLDIMS accordingly."; - - ctxt.handleError(Opm::ParseContext::RUNSPEC_NUMWELLS_TOO_LARGE, - os.str(), guard); - } - } - - void checkConnPerWell(const Opm::Welldims& wdims, - const Opm::Schedule& sched, - const Opm::ParseContext& ctxt, - Opm::ErrorGuard& guard) - { - auto nconn = std::size_t{0}; - for (const auto& well_name : sched.wellNames()) { - const auto& well = sched.getWellatEnd(well_name); - nconn = std::max(nconn, well.getConnections().size()); - } - - if (nconn > static_cast(wdims.maxConnPerWell())) - { - std::ostringstream os; - os << "Run has well with " << nconn << " reservoir connections, " - << "but allocates at most " << wdims.maxConnPerWell() - << " connections per well in RUNSPEC section. Increase item " - << "2 of WELLDIMS accordingly."; - - ctxt.handleError(Opm::ParseContext::RUNSPEC_CONNS_PER_WELL_TOO_LARGE, - os.str(), guard); - } - } - - void checkNumGroups(const Opm::Welldims& wdims, - const Opm::Schedule& sched, - const Opm::ParseContext& ctxt, - Opm::ErrorGuard& guard) - { - const auto nGroups = sched.numGroups(); - - // Note: "1 +" to account for FIELD group being in 'sched.numGroups()' - // but excluded from WELLDIMS(3). - if (nGroups > 1U + wdims.maxGroupsInField()) - { - std::ostringstream os; - os << "Run uses " << (nGroups - 1) << " non-FIELD groups, but " - << "allocates at most " << wdims.maxGroupsInField() - << " in RUNSPEC section. Increase item 3 of WELLDIMS " - << "accordingly."; - - ctxt.handleError(Opm::ParseContext::RUNSPEC_NUMGROUPS_TOO_LARGE, - os.str(), guard); - } - } - - void checkGroupSize(const Opm::Welldims& wdims, - const Opm::Schedule& sched, - const Opm::ParseContext& ctxt, - Opm::ErrorGuard& guard) - { - const auto numSteps = sched.getTimeMap().numTimesteps(); - - auto size = std::size_t{0}; - for (auto step = 0*numSteps; step < numSteps; ++step) { - const auto nwgmax = maxGroupSize(sched, step); - - size = std::max(size, static_cast(nwgmax)); - } - - if (size > static_cast(wdims.maxWellsPerGroup())) - { - std::ostringstream os; - os << "Run uses maximum group size of " << size << ", but " - << "allocates at most " << wdims.maxWellsPerGroup() - << " in RUNSPEC section. Increase item 4 of WELLDIMS " - << "accordingly."; - - ctxt.handleError(Opm::ParseContext::RUNSPEC_GROUPSIZE_TOO_LARGE, - os.str(), guard); - } - } - } // WellDims - - void consistentWellDims(const Opm::Welldims& wdims, - const Opm::Schedule& sched, - const Opm::ParseContext& ctxt, - Opm::ErrorGuard& guard) - { - WellDims::checkNumWells (wdims, sched, ctxt, guard); - WellDims::checkConnPerWell(wdims, sched, ctxt, guard); - WellDims::checkNumGroups (wdims, sched, ctxt, guard); - WellDims::checkGroupSize (wdims, sched, ctxt, guard); - } -} // Anonymous - -void -Opm::checkConsistentArrayDimensions(const EclipseState& es, - const Schedule& sched, - const ParseContext& ctxt, - ErrorGuard& guard) -{ - consistentWellDims(es.runspec().wellDimensions(), sched, ctxt, guard); -} - - - - -int -Opm::maxGroupSize(const Opm::Schedule& sched, - const std::size_t step) -{ - int nwgmax = 0; - - for (const auto& gnm : sched.groupNames(step)) { - const auto& grp = sched.getGroup(gnm, step); - const auto gsz = grp.wellgroup() - ? grp.numWells() : grp.groups().size(); - - nwgmax = std::max(nwgmax, static_cast(gsz)); - } - - return nwgmax; -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Events.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Events.cpp deleted file mode 100644 index 8007a322ac..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Events.cpp +++ /dev/null @@ -1,57 +0,0 @@ -/* - Copyright 2015 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ -#include - -#include - -namespace Opm { - - Events::Events(const TimeMap& timeMap) : - m_events( DynamicVector( timeMap , 0 ) ) - { } - - - Events Events::serializeObject() - { - Events result; - result.m_events = DynamicVector({1,2,3,4,5}); - - return result; - } - - - bool Events::hasEvent(uint64_t eventMask , size_t reportStep) const { - uint64_t eventSum = m_events[reportStep]; - if (eventSum & eventMask) - return true; - else - return false; - } - - - void Events::addEvent(ScheduleEvents::Events event, size_t reportStep) { - m_events[reportStep] |= event; - } - - bool Events::operator==(const Events& data) const { - return this->m_events == data.m_events; - } - -} - diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Group/GConSale.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Group/GConSale.cpp deleted file mode 100644 index 76cfe42737..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Group/GConSale.cpp +++ /dev/null @@ -1,95 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include - -#include -#include -#include "../eval_uda.hpp" - -namespace Opm { - -GConSale GConSale::serializeObject() -{ - GConSale result; - result.groups = {{"test1", {UDAValue(1.0), UDAValue(2.0), UDAValue(3.0), - MaxProcedure::PLUG, 4.0, UnitSystem::serializeObject()}}}; - - return result; -} - -bool GConSale::has(const std::string& name) const { - return (groups.find(name) != groups.end()); -} - -const GConSale::GCONSALEGroup& GConSale::get(const std::string& name) const { - - auto it = groups.find(name); - if (it == groups.end()) - throw std::invalid_argument("Current GConSale obj. does not contain '" + name + "'."); - else - return it->second; -} - -const GConSale::GCONSALEGroupProp GConSale::get(const std::string& name, const SummaryState& st) const { - - GCONSALEGroupProp prop; - const GConSale::GCONSALEGroup& group = this->get(name); - prop.sales_target = UDA::eval_group_uda(group.sales_target, name, st, group.udq_undefined); - prop.max_sales_rate = UDA::eval_group_uda(group.max_sales_rate, name, st, group.udq_undefined); - prop.min_sales_rate = UDA::eval_group_uda(group.min_sales_rate, name, st, group.udq_undefined); - prop.max_proc = group.max_proc; - return prop; -} - -GConSale::MaxProcedure GConSale::stringToProcedure(const std::string& str_proc) { - - if (str_proc == "NONE") return MaxProcedure::NONE; - else if (str_proc == "CON" ) return MaxProcedure::CON; - else if (str_proc == "+CON") return MaxProcedure::CON_P; - else if (str_proc == "WELL") return MaxProcedure::WELL; - else if (str_proc == "PLUG") return MaxProcedure::PLUG; - else if (str_proc == "RATE") return MaxProcedure::RATE; - else if (str_proc == "MAXR") return MaxProcedure::MAXR; - else if (str_proc == "END" ) return MaxProcedure::END; - else - throw std::invalid_argument(str_proc + "invalid argument to GConSake::stringToProcedure"); - - return MaxProcedure::NONE; -} - -void GConSale::add(const std::string& name, const UDAValue& sales_target, const UDAValue& max_rate, const UDAValue& min_rate, const std::string& procedure, double udq_undefined_arg, const UnitSystem& unit_system) { - GConSale::GCONSALEGroup& group = groups[name]; - group.sales_target = sales_target; - group.max_sales_rate = max_rate; - group.min_sales_rate = min_rate; - group.max_proc = stringToProcedure(procedure); - group.udq_undefined = udq_undefined_arg; - group.unit_system = unit_system; -} - -size_t GConSale::size() const { - return groups.size(); -} - -bool GConSale::operator==(const GConSale& data) const { - return this->groups == data.groups; -} - -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Group/GConSump.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Group/GConSump.cpp deleted file mode 100644 index 5af338d169..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Group/GConSump.cpp +++ /dev/null @@ -1,80 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include -#include -#include "../eval_uda.hpp" - -namespace Opm { - -GConSump GConSump::serializeObject() -{ - GConSump result; - result.groups = {{"test1", {UDAValue(1.0), UDAValue(2.0), "test2", 3.0, - UnitSystem::serializeObject()}}}; - - return result; -} - -bool GConSump::has(const std::string& name) const { - return (groups.find(name) != groups.end()); -} - - -const GConSump::GCONSUMPGroup& GConSump::get(const std::string& name) const { - - auto it = groups.find(name); - if (it == groups.end()) - throw std::invalid_argument("Current GConSump obj. does not contain '" + name + "'."); - else - return it->second; -} - - -const GConSump::GCONSUMPGroupProp GConSump::get(const std::string& name, const SummaryState& st) const { - - GCONSUMPGroupProp prop; - const GConSump::GCONSUMPGroup& group = this->get(name); - prop.consumption_rate = UDA::eval_group_uda(group.consumption_rate, name, st, group.udq_undefined); - prop.import_rate = UDA::eval_group_uda(group.import_rate, name, st, group.udq_undefined); - prop.network_node = group.network_node; - return prop; -} - -void GConSump::add(const std::string& name, const UDAValue& consumption_rate, const UDAValue& import_rate, const std::string network_node, double udq_undefined_arg, const UnitSystem& unit_system) { - - GConSump::GCONSUMPGroup& group = groups[name]; - - group.consumption_rate = consumption_rate; - group.import_rate = import_rate; - group.network_node = network_node; - group.udq_undefined = udq_undefined_arg; - group.unit_system = unit_system; -} - - -size_t GConSump::size() const { - return groups.size(); -} - -bool GConSump::operator==(const GConSump& data) const { - return this->groups == data.groups; -} - -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Group/GTNode.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Group/GTNode.cpp deleted file mode 100644 index 6e8d53f84d..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Group/GTNode.cpp +++ /dev/null @@ -1,64 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include - -namespace Opm { - -GTNode::GTNode(const Group& group_arg, std::size_t level, const std::optional& parent_name) : - m_group(group_arg), - m_level(level), - m_parent_name(parent_name) -{ -} - -const std::string& GTNode::name() const { - return this->m_group.name(); -} - -const Group& GTNode::group() const { - return this->m_group; -} - -const std::string& GTNode::parent_name() const { - if (this->m_parent_name.has_value()) - return *this->m_parent_name; - - throw std::invalid_argument("Tried to access parent of root in GroupTree. Root: " + this->name()); -} - - -void GTNode::add_well(const Well& well) { - this->m_wells.push_back(well); -} - -void GTNode::add_group(const GTNode& child_group) { - this->m_child_groups.push_back(child_group); -} - -const std::vector& GTNode::wells() const { - return this->m_wells; -} - -const std::vector& GTNode::groups() const { - return this->m_child_groups; -} - - -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Group/Group.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Group/Group.cpp deleted file mode 100644 index 3ac662c666..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Group/Group.cpp +++ /dev/null @@ -1,649 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - - -#include -#include - -#include "../eval_uda.hpp" - -namespace Opm { - -Group::Group() - : Group("", 0, 0, 0.0, UnitSystem()) -{ -} - -Group::Group(const std::string& name, std::size_t insert_index_arg, std::size_t init_step_arg, double udq_undefined_arg, const UnitSystem& unit_system_arg) : - m_name(name), - m_insert_index(insert_index_arg), - init_step(init_step_arg), - udq_undefined(udq_undefined_arg), - unit_system(unit_system_arg), - group_type(GroupType::NONE), - gefac(1), - transfer_gefac(true), - vfp_table(0) -{ - // All groups are initially created as children of the "FIELD" group. - if (name != "FIELD") - this->parent_group = "FIELD"; -} - -Group Group::serializeObject() -{ - Group result; - result.m_name = "test1"; - result.m_insert_index = 1; - result.init_step = 2; - result.udq_undefined = 3.0; - result.unit_system = UnitSystem::serializeObject(); - result.group_type = GroupType::PRODUCTION; - result.gefac = 4.0; - result.transfer_gefac = true; - result.vfp_table = 5; - result.parent_group = "test2"; - result.m_wells = {{"test3", "test4"}, {"test5", "test6"}}; - result.m_groups = {{"test7", "test8"}, {"test9", "test10"}}; - result.injection_properties = {{Opm::Phase::OIL, GroupInjectionProperties::serializeObject()}}; - result.production_properties = GroupProductionProperties::serializeObject(); - result.m_topup_phase = {Phase::OIL, true}; - - return result; -} - -std::size_t Group::insert_index() const { - return this->m_insert_index; -} - -bool Group::defined(size_t timeStep) const { - return (timeStep >= this->init_step); -} - -const std::string& Group::name() const { - return this->m_name; -} - -const Group::GroupProductionProperties& Group::productionProperties() const { - return this->production_properties; -} - -const std::map& Group::injectionProperties() const { - return this->injection_properties; -} - -int Group::getGroupNetVFPTable() const { - return this->vfp_table; -} - -bool Group::updateNetVFPTable(int vfp_arg) { - if (this->vfp_table != vfp_arg) { - this->vfp_table = vfp_arg; - return true; - } else - return false; -} - -namespace { -namespace detail { - -bool has_control(int controls, Group::InjectionCMode cmode) { - return ((controls & static_cast(cmode)) != 0); -} - -bool has_control(int controls, Group::ProductionCMode cmode) { - return ((controls & static_cast(cmode)) != 0); -} -} -} - -bool Group::updateInjection(const GroupInjectionProperties& injection) { - bool update = false; - - if (!this->hasType(GroupType::INJECTION)) { - this->addType(GroupType::INJECTION); - update = true; - } - - auto iter = this->injection_properties.find(injection.phase); - if (iter == this->injection_properties.end()) { - this->injection_properties.insert(std::make_pair(injection.phase, injection)); - update = true; - } else { - if (iter->second != injection) { - iter->second = injection; - update = true; - } - } - - if (detail::has_control(injection.injection_controls, Group::InjectionCMode::RESV) || - detail::has_control(injection.injection_controls, Group::InjectionCMode::REIN) || - detail::has_control(injection.injection_controls, Group::InjectionCMode::VREP)) { - auto topup_phase = std::make_pair(injection.phase, true); - if (topup_phase != this->m_topup_phase) { - this->m_topup_phase = topup_phase; - update = true; - } - } else { - if (this->m_topup_phase == std::make_pair(injection.phase, true)) - this->m_topup_phase = std::make_pair(injection.phase, false); - } - return update; -} - - -bool Group::updateProduction(const GroupProductionProperties& production) { - bool update = false; - - if (this->production_properties != production) { - this->production_properties = production; - update = true; - } - - if (!this->hasType(GroupType::PRODUCTION)) { - this->addType(GroupType::PRODUCTION); - update = true; - } - - return update; -} - - -Group::GroupInjectionProperties Group::GroupInjectionProperties::serializeObject() -{ - Group::GroupInjectionProperties result; - result.phase = Phase::OIL; - result.cmode = InjectionCMode::REIN; - result.surface_max_rate = UDAValue(1.0); - result.resv_max_rate = UDAValue(2.0); - result.target_reinj_fraction = UDAValue(3.0); - result.target_void_fraction = UDAValue(4.0); - result.reinj_group = "test1"; - result.voidage_group = "test2"; - result.injection_controls = 5; - - return result; -} - - -bool Group::GroupInjectionProperties::operator==(const GroupInjectionProperties& other) const { - return - this->phase == other.phase && - this->cmode == other.cmode && - this->surface_max_rate == other.surface_max_rate && - this->resv_max_rate == other.resv_max_rate && - this->target_reinj_fraction == other.target_reinj_fraction && - this->injection_controls == other.injection_controls && - this->target_void_fraction == other.target_void_fraction && - this->reinj_group == other.reinj_group && - this->available_group_control == other.available_group_control && - this->voidage_group == other.voidage_group; -} - - -bool Group::GroupInjectionProperties::operator!=(const GroupInjectionProperties& other) const { - return !(*this == other); -} - - -Group::GroupProductionProperties Group::GroupProductionProperties::serializeObject() -{ - Group::GroupProductionProperties result; - result.cmode = ProductionCMode::PRBL; - result.exceed_action = ExceedAction::WELL; - result.oil_target = UDAValue(1.0); - result.water_target = UDAValue(2.0); - result.gas_target = UDAValue(3.0); - result.liquid_target = UDAValue(4.0); - result.guide_rate = 5.0; - result.guide_rate_def = GuideRateTarget::COMB; - result.resv_target = 6.0; - result.production_controls = 7; - - return result; -} - - -bool Group::GroupProductionProperties::operator==(const GroupProductionProperties& other) const { - return - this->cmode == other.cmode && - this->exceed_action == other.exceed_action && - this->oil_target == other.oil_target && - this->water_target == other.water_target && - this->gas_target == other.gas_target && - this->liquid_target == other.liquid_target && - this->guide_rate == other.guide_rate && - this->guide_rate_def == other.guide_rate_def && - this->production_controls == other.production_controls && - this->available_group_control == other.available_group_control && - this->resv_target == other.resv_target; -} - -bool Group::productionGroupControlAvailable() const { - if (this->m_name == "FIELD") - return false; - return this->production_properties.available_group_control; -} - -bool Group::injectionGroupControlAvailable(const Phase phase) const { - if (this->m_name == "FIELD") - return false; - - auto inj_iter = this->injection_properties.find(phase); - if (inj_iter == this->injection_properties.end()) - return true; - - return inj_iter->second.available_group_control; -} - -bool Group::GroupProductionProperties::operator!=(const GroupProductionProperties& other) const { - return !(*this == other); -} - -bool Group::hasType(GroupType gtype) const { - return ((this->group_type & gtype) == gtype); -} - -void Group::addType(GroupType new_gtype) { - this->group_type = this->group_type | new_gtype; -} - -bool Group::isProductionGroup() const { - return this->hasType(GroupType::PRODUCTION); -} - -bool Group::isInjectionGroup() const { - return this->hasType(GroupType::INJECTION); -} - -void Group::setProductionGroup() { - this->addType(GroupType::PRODUCTION); -} - -void Group::setInjectionGroup() { - this->addType(GroupType::INJECTION); -} - - -std::size_t Group::numWells() const { - return this->m_wells.size(); -} - -const std::vector& Group::wells() const { - return this->m_wells.data(); -} - -const std::vector& Group::groups() const { - return this->m_groups.data(); -} - -bool Group::wellgroup() const { - if (this->m_groups.size() > 0) - return false; - return true; -} - -bool Group::addWell(const std::string& well_name) { - if (!this->m_groups.empty()) - throw std::logic_error("Groups can not mix group and well children. Trying to add well: " + well_name + " to group: " + this->name()); - - if (this->m_wells.count(well_name) == 0) { - this->m_wells.insert(well_name); - return true; - } - return false; -} - -bool Group::hasWell(const std::string& well_name) const { - return (this->m_wells.count(well_name) == 1); -} - -void Group::delWell(const std::string& well_name) { - auto rm_count = this->m_wells.erase(well_name); - if (rm_count == 0) - throw std::invalid_argument("Group: " + this->name() + " does not have well: " + well_name); -} - -bool Group::addGroup(const std::string& group_name) { - if (!this->m_wells.empty()) - throw std::logic_error("Groups can not mix group and well children. Trying to add group: " + group_name + " to group: " + this->name()); - - if (this->m_groups.count(group_name) == 0) { - this->m_groups.insert(group_name); - return true; - } - return false; -} - -bool Group::hasGroup(const std::string& group_name) const { - return (this->m_groups.count(group_name) == 1); -} - -void Group::delGroup(const std::string& group_name) { - auto rm_count = this->m_groups.erase(group_name); - if (rm_count == 0) - throw std::invalid_argument("Group does not have group: " + group_name); -} - -bool Group::update_gefac(double gf, bool transfer_gf) { - bool update = false; - if (this->gefac != gf) { - this->gefac = gf; - update = true; - } - - if (this->transfer_gefac != transfer_gf) { - this->transfer_gefac = transfer_gf; - update = true; - } - - return update; -} - -double Group::getGroupEfficiencyFactor() const { - return this->gefac; -} - -bool Group::getTransferGroupEfficiencyFactor() const { - return this->transfer_gefac; -} - -const std::string& Group::parent() const { - return this->parent_group; -} - -std::optional Group::control_group() const { - if (m_name == "FIELD") - return std::nullopt; - else - return this->parent(); -} - -std::optional Group::flow_group() const { - if (m_name == "FIELD") - return std::nullopt; - else - return this->parent(); -} - -const Phase& Group::topup_phase() const { - if (this->m_topup_phase.second) - return this->m_topup_phase.first; - else - throw std::logic_error("Asked for topup phase in well without topup phase defined"); -} - - -bool Group::has_topup_phase() const { - return this->m_topup_phase.second; -} - - -bool Group::updateParent(const std::string& parent) { - if (this->parent_group != parent) { - this->parent_group = parent; - return true; - } - - return false; -} - -Group::ProductionControls Group::productionControls(const SummaryState& st) const { - Group::ProductionControls pc; - - pc.cmode = this->production_properties.cmode; - pc.exceed_action = this->production_properties.exceed_action; - pc.oil_target = UDA::eval_group_uda(this->production_properties.oil_target, this->m_name, st, this->udq_undefined); - pc.water_target = UDA::eval_group_uda(this->production_properties.water_target, this->m_name, st, this->udq_undefined); - pc.gas_target = UDA::eval_group_uda(this->production_properties.gas_target, this->m_name, st, this->udq_undefined); - pc.liquid_target = UDA::eval_group_uda(this->production_properties.liquid_target, this->m_name, st, this->udq_undefined); - pc.guide_rate = this->production_properties.guide_rate; - pc.guide_rate_def = this->production_properties.guide_rate_def; - pc.resv_target = this->production_properties.resv_target; - - return pc; -} - -Group::InjectionControls Group::injectionControls(Phase phase, const SummaryState& st) const { - Group::InjectionControls ic; - const auto& inj = this->injection_properties.at(phase); - - ic.phase = inj.phase; - ic.cmode = inj.cmode; - ic.injection_controls = inj.injection_controls; - ic.surface_max_rate = UDA::eval_group_uda_rate(inj.surface_max_rate, this->m_name, st, this->udq_undefined, ic.phase, this->unit_system); - ic.resv_max_rate = UDA::eval_group_uda(inj.resv_max_rate, this->m_name, st, this->udq_undefined); - ic.target_reinj_fraction = UDA::eval_group_uda(inj.target_reinj_fraction, this->m_name, st, this->udq_undefined); - ic.target_void_fraction = UDA::eval_group_uda(inj.target_void_fraction, this->m_name, st, this->udq_undefined); - ic.reinj_group = inj.reinj_group; - ic.voidage_group = inj.voidage_group; - - return ic; -} - -bool Group::hasInjectionControl(Phase phase) const { - return (this->injection_properties.count(phase) > 0); -} - - - - -Group::ProductionCMode Group::production_cmode() const { - return this->production_properties.cmode; -} - -const Group::GroupType& Group::getGroupType() const { - return this-> group_type; -} - -bool Group::ProductionControls::has_control(Group::ProductionCMode control) const { - return detail::has_control(this->production_controls, control); -} - -bool Group::InjectionControls::has_control(InjectionCMode cmode_arg) const { - return detail::has_control(this->injection_controls, cmode_arg); -} - -bool Group::has_control(Group::ProductionCMode control) const { - return detail::has_control(production_properties.production_controls, control); -} - - -const std::string Group::ExceedAction2String( ExceedAction enumValue ) { - switch(enumValue) { - case ExceedAction::NONE: - return "NONE"; - case ExceedAction::CON: - return "CON"; - case ExceedAction::CON_PLUS: - return "+CON"; - case ExceedAction::WELL: - return "WELL"; - case ExceedAction::PLUG: - return "PLUG"; - case ExceedAction::RATE: - return "RATE"; - default: - throw std::invalid_argument("unhandled enum value"); - } -} - - -Group::ExceedAction Group::ExceedActionFromString( const std::string& stringValue ) { - - if (stringValue == "NONE") - return ExceedAction::NONE; - else if (stringValue == "CON") - return ExceedAction::CON; - else if (stringValue == "+CON") - return ExceedAction::CON_PLUS; - else if (stringValue == "WELL") - return ExceedAction::WELL; - else if (stringValue == "PLUG") - return ExceedAction::PLUG; - else if (stringValue == "RATE") - return ExceedAction::RATE; - else - throw std::invalid_argument("Unknown enum state string: " + stringValue ); -} - - -const std::string Group::InjectionCMode2String( InjectionCMode enumValue ) { - switch( enumValue ) { - case InjectionCMode::NONE: - return "NONE"; - case InjectionCMode::RATE: - return "RATE"; - case InjectionCMode::RESV: - return "RESV"; - case InjectionCMode::REIN: - return "REIN"; - case InjectionCMode::VREP: - return "VREP"; - case InjectionCMode::FLD: - return "FLD"; - default: - throw std::invalid_argument("Unhandled enum value"); - } -} - - -Group::InjectionCMode Group::InjectionCModeFromString( const std::string& stringValue ) { - if (stringValue == "NONE") - return InjectionCMode::NONE; - else if (stringValue == "RATE") - return InjectionCMode::RATE; - else if (stringValue == "RESV") - return InjectionCMode::RESV; - else if (stringValue == "REIN") - return InjectionCMode::REIN; - else if (stringValue == "VREP") - return InjectionCMode::VREP; - else if (stringValue == "FLD") - return InjectionCMode::FLD; - else - throw std::invalid_argument("Unknown enum state string: " + stringValue ); -} - -Group::GroupType operator|(Group::GroupType lhs, Group::GroupType rhs) { - return static_cast(static_cast::type>(lhs) | static_cast::type>(rhs)); -} - - -Group::GroupType operator&(Group::GroupType lhs, Group::GroupType rhs) { - return static_cast(static_cast::type>(lhs) & static_cast::type>(rhs)); -} - - -const std::string Group::ProductionCMode2String( ProductionCMode enumValue ) { - switch( enumValue ) { - case ProductionCMode::NONE: - return "NONE"; - case ProductionCMode::ORAT: - return "ORAT"; - case ProductionCMode::WRAT: - return "WRAT"; - case ProductionCMode::GRAT: - return "GRAT"; - case ProductionCMode::LRAT: - return "LRAT"; - case ProductionCMode::CRAT: - return "CRAT"; - case ProductionCMode::RESV: - return "RESV"; - case ProductionCMode::PRBL: - return "PRBL"; - case ProductionCMode::FLD: - return "FLD"; - default: - throw std::invalid_argument("Unhandled enum value"); - } -} - - -Group::ProductionCMode Group::ProductionCModeFromString( const std::string& stringValue ) { - if (stringValue == "NONE") - return ProductionCMode::NONE; - else if (stringValue == "ORAT") - return ProductionCMode::ORAT; - else if (stringValue == "WRAT") - return ProductionCMode::WRAT; - else if (stringValue == "GRAT") - return ProductionCMode::GRAT; - else if (stringValue == "LRAT") - return ProductionCMode::LRAT; - else if (stringValue == "CRAT") - return ProductionCMode::CRAT; - else if (stringValue == "RESV") - return ProductionCMode::RESV; - else if (stringValue == "PRBL") - return ProductionCMode::PRBL; - else if (stringValue == "FLD") - return ProductionCMode::FLD; - else - throw std::invalid_argument("Unknown enum state string: " + stringValue ); -} - -Group::GuideRateTarget Group::GuideRateTargetFromString( const std::string& stringValue ) { - if (stringValue == "OIL") - return GuideRateTarget::OIL; - else if (stringValue == "WAT") - return GuideRateTarget::WAT; - else if (stringValue == "GAS") - return GuideRateTarget::GAS; - else if (stringValue == "LIQ") - return GuideRateTarget::LIQ; - else if (stringValue == "COMB") - return GuideRateTarget::COMB; - else if (stringValue == "WGA") - return GuideRateTarget::WGA; - else if (stringValue == "CVAL") - return GuideRateTarget::CVAL; - else if (stringValue == "INJV") - return GuideRateTarget::INJV; - else if (stringValue == "POTN") - return GuideRateTarget::POTN; - else if (stringValue == "FORM") - return GuideRateTarget::FORM; - else if (stringValue == " ") - return GuideRateTarget::NO_GUIDE_RATE; - else - return GuideRateTarget::NO_GUIDE_RATE; -} - -bool Group::operator==(const Group& data) const -{ - return this->name() == data.name() && - this->insert_index() == data.insert_index() && - this->init_step == data.init_step && - this->udq_undefined == data.udq_undefined && - this->unit_system == data.unit_system && - this->group_type == data.group_type && - this->getGroupEfficiencyFactor() == data.getGroupEfficiencyFactor() && - this->getTransferGroupEfficiencyFactor() == data.getTransferGroupEfficiencyFactor() && - this->getGroupNetVFPTable() == data.getGroupNetVFPTable() && - this->parent() == data.parent() && - this->m_wells == data.m_wells && - this->m_groups == data.m_groups && - this->m_topup_phase == data.m_topup_phase && - this->injection_properties == data.injection_properties && - this->productionProperties() == data.productionProperties(); -} - -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Group/GuideRate.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Group/GuideRate.cpp deleted file mode 100644 index 374b468de4..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Group/GuideRate.cpp +++ /dev/null @@ -1,242 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include -#include - -namespace Opm { - -double GuideRate::RateVector::eval(Well::GuideRateTarget target) const { - if (target == Well::GuideRateTarget::OIL) - return this->oil_rat; - - if (target == Well::GuideRateTarget::GAS) - return this->gas_rat; - - if (target == Well::GuideRateTarget::LIQ) - return this->oil_rat + this->wat_rat; - - if (target == Well::GuideRateTarget::WAT) - return this->wat_rat; - - throw std::logic_error("Don't know how to convert .... "); -} - -double GuideRate::RateVector::eval(Group::GuideRateTarget target) const { - if (target == Group::GuideRateTarget::OIL) - return this->oil_rat; - - if (target == Group::GuideRateTarget::GAS) - return this->gas_rat; - - if (target == Group::GuideRateTarget::LIQ) - return this->oil_rat + this->wat_rat; - - if (target == Group::GuideRateTarget::WAT) - return this->wat_rat; - - throw std::logic_error("Don't know how to convert .... "); -} - -double GuideRate::RateVector::eval(GuideRateModel::Target target) const { - if (target == GuideRateModel::Target::OIL) - return this->oil_rat; - - if (target == GuideRateModel::Target::GAS) - return this->gas_rat; - - if (target == GuideRateModel::Target::LIQ) - return this->oil_rat + this->wat_rat; - - if (target == GuideRateModel::Target::WAT) - return this->wat_rat; - - throw std::logic_error("Don't know how to convert .... "); -} - - -GuideRate::GuideRate(const Schedule& schedule_arg) : - schedule(schedule_arg) -{} - - - -double GuideRate::get(const std::string& well, Well::GuideRateTarget target, const RateVector& rates) const { - auto model_target = GuideRateModel::convert_target(target); - return get(well, model_target, rates); -} - -double GuideRate::get(const std::string& group, Group::GuideRateTarget target, const RateVector& rates) const { - auto model_target = GuideRateModel::convert_target(target); - return get(group, model_target, rates); -} - -double GuideRate::get(const std::string& name, GuideRateModel::Target model_target, const RateVector& rates) const { - const auto iter = this->values.find(name); - if (iter != this->values.end()) { - const auto& value = iter->second; - if (value.target == model_target) - return value.value; - else { - double model_target_rate = rates.eval(model_target); - double value_target_rate = rates.eval(value.target); - - if (model_target_rate < 1e-6) - return value.value; - if (value_target_rate < 1e-6) - return value.value; - - // scale with the current production ratio when the control target differs from the guide rate target. - return value.value * model_target_rate / value_target_rate; - } - } else { - const auto& pot = this->potentials.at(name); - return pot.eval(model_target); - } -} - -bool GuideRate::has(const std::string& name) const -{ - return this->values.count(name) > 0; -} - - - -void GuideRate::compute(const std::string& wgname, size_t report_step, double sim_time, double oil_pot, double gas_pot, double wat_pot) { - const auto& config = this->schedule.guideRateConfig(report_step); - this->potentials[wgname] = RateVector{oil_pot, gas_pot, wat_pot}; - - if (config.has_group(wgname)) - this->group_compute(wgname, report_step, sim_time, oil_pot, gas_pot, wat_pot); - else - this->well_compute(wgname, report_step, sim_time, oil_pot, gas_pot, wat_pot); - -} - - -void GuideRate::group_compute(const std::string& wgname, size_t report_step, double sim_time, double oil_pot, double gas_pot, double wat_pot) { - const auto& config = this->schedule.guideRateConfig(report_step); - const auto& group = config.group(wgname); - - if (group.guide_rate > 0) { - auto model_target = GuideRateModel::convert_target(group.target); - this->values[wgname] = GuideRateValue( sim_time, group.guide_rate, model_target ); - } else { - auto iter = this->values.find(wgname); - - // If the FORM mode is used we check if the last computation is recent enough; - // then we just return. - if (iter != this->values.end()) { - const auto& grv = iter->second; - if (group.target == Group::GuideRateTarget::FORM) { - if (!config.has_model()) - throw std::logic_error("When specifying GUIDERATE target FORM you must enter a guiderate model with the GUIDERAT keyword"); - - auto time_diff = sim_time - grv.sim_time; - if (config.model().update_delay() > time_diff) - return; - } - } - - - if (group.target == Group::GuideRateTarget::INJV) - throw std::logic_error("Group guide rate mode: INJV not implemented"); - - if (group.target == Group::GuideRateTarget::POTN) - throw std::logic_error("Group guide rate mode: POTN not implemented"); - - if (group.target == Group::GuideRateTarget::FORM) { - double guide_rate; - if (!config.has_model()) - throw std::logic_error("When specifying GUIDERATE target FORM you must enter a guiderate model with the GUIDERAT keyword"); - - if (iter != this->values.end()) - guide_rate = this->eval_form(config.model(), oil_pot, gas_pot, wat_pot, std::addressof(iter->second)); - else - guide_rate = this->eval_form(config.model(), oil_pot, gas_pot, wat_pot, nullptr); - - this->values[wgname] = GuideRateValue{sim_time, guide_rate, config.model().target()}; - } - } -} - - -void GuideRate::well_compute(const std::string& wgname, size_t report_step, double sim_time, double oil_pot, double gas_pot, double wat_pot) { - const auto& config = this->schedule.guideRateConfig(report_step); - - // guide rates spesified with WGRUPCON - if (config.has_well(wgname)) { - const auto& well = config.well(wgname); - if (well.guide_rate > 0) { - auto model_target = GuideRateModel::convert_target(well.target); - this->values[wgname] = GuideRateValue( sim_time, well.guide_rate, model_target ); - } - } else if (config.has_model()) { // GUIDERAT - // only look for wells not groups - if (!this->schedule.hasWell(wgname, report_step)) - return; - - const auto& well = this->schedule.getWell(wgname, report_step); - - // GUIDERAT does not apply to injectors - if (well.isInjector()) - return; - - auto iter = this->values.find(wgname); - - if (iter != this->values.end()) { - const auto& grv = iter->second; - auto time_diff = sim_time - grv.sim_time; - if (config.model().update_delay() > time_diff) - return; - } - - double guide_rate; - if (iter == this->values.end()) - guide_rate = this->eval_form(config.model(), oil_pot, gas_pot, wat_pot, nullptr); - else - guide_rate = this->eval_form(config.model(), oil_pot, gas_pot, wat_pot, std::addressof(iter->second)); - - this->values[wgname] = GuideRateValue{sim_time, guide_rate, config.model().target()}; - } - // If neither WGRUPCON nor GUIDERAT is spesified potentials are used -} - -double GuideRate::eval_form(const GuideRateModel& model, double oil_pot, double gas_pot, double wat_pot, const GuideRateValue * prev) const { - double new_guide_rate = model.eval(oil_pot, gas_pot, wat_pot); - if (!prev) - return new_guide_rate; - - if (new_guide_rate > prev->value && !model.allow_increase()) - new_guide_rate = prev->value; - - auto damping_factor = model.damping_factor(); - - return damping_factor * new_guide_rate + (1 - damping_factor) * prev->value; -} - -double GuideRate::eval_group_pot() const { - return 0; -} - -double GuideRate::eval_group_resvinj() const { - return 0; -} - -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Group/GuideRateConfig.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Group/GuideRateConfig.cpp deleted file mode 100644 index 20306de655..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Group/GuideRateConfig.cpp +++ /dev/null @@ -1,115 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - - -#include - - -namespace Opm { - -GuideRateConfig GuideRateConfig::serializeObject() -{ - GuideRateConfig result; - result.m_model = std::make_shared(GuideRateModel::serializeObject()); - result.wells = {{"test1", WellTarget{1.0, Well::GuideRateTarget::COMB, 2.0}}}; - result.groups = {{"test2", GroupTarget{1.0, Group::GuideRateTarget::COMB}}}; - - return result; -} - - -const GuideRateModel& GuideRateConfig::model() const { - if (this->m_model) - return *this->m_model; - else - throw std::logic_error("Tried to dereference empty GuideRateModel"); -} - - -bool GuideRateConfig::has_model() const { - if (this->m_model) - return true; - else - return false; -} - -bool GuideRateConfig::update_model(const GuideRateModel& new_model) { - if (!this->m_model || *(this->m_model) != new_model) { - this->m_model.reset( new GuideRateModel(new_model) ); - return true; - } - return false; -} - -void GuideRateConfig::update_well(const Well& well) { - if (well.isAvailableForGroupControl()) { - auto& well_node = this->wells[well.name()]; - well_node.guide_rate = well.getGuideRate(); - well_node.target= well.getGuideRatePhase(); - well_node.scaling_factor = well.getGuideRateScalingFactor(); - } else - this->wells.erase(well.name()); -} - -const GuideRateConfig::WellTarget& GuideRateConfig::well(const std::string& well) const { - return this->wells.at(well); -} - -void GuideRateConfig::update_group(const Group& group) { - if (group.name() == "FIELD") - return; - - const auto& properties = group.productionProperties(); - auto guide_target = properties.guide_rate_def; - if (guide_target == Group::GuideRateTarget::NO_GUIDE_RATE) { - this->groups.erase(group.name()); - return; - } - - auto& group_node = this->groups[group.name()]; - group_node.guide_rate = properties.guide_rate; - group_node.target = guide_target; -} - -const GuideRateConfig::GroupTarget& GuideRateConfig::group(const std::string& group) const { - return this->groups.at(group); -} - -bool GuideRateConfig::has_well(const std::string& well) const { - return (this->wells.count(well) > 0); -} - -bool GuideRateConfig::has_group(const std::string& group) const { - return (this->groups.count(group) > 0); -} - -bool GuideRateConfig::operator==(const GuideRateConfig& data) const { - if ((this->m_model && !data.m_model) || (!this->m_model && data.m_model)) - return false; - - if (this->m_model && !(*this->m_model == *data.m_model)) - return false; - - return this->wells == data.wells && - this->groups == data.groups; -} - -} - - diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Group/GuideRateModel.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Group/GuideRateModel.cpp deleted file mode 100644 index a8138a09e8..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Group/GuideRateModel.cpp +++ /dev/null @@ -1,308 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ -#include -#include -#include - -#include -#include - -namespace Opm { - -GuideRateModel::GuideRateModel(double time_interval_arg, - Target target_arg, - double A_arg, - double B_arg, - double C_arg, - double D_arg, - double E_arg, - double F_arg, - bool allow_increase_arg, - double damping_factor_arg, - bool use_free_gas_arg) : - time_interval(time_interval_arg), - m_target(target_arg), - A(A_arg), - B(B_arg), - C(C_arg), - D(D_arg), - E(E_arg), - F(F_arg), - allow_increase_(allow_increase_arg), - damping_factor_(damping_factor_arg), - use_free_gas(use_free_gas_arg), - default_model(false), - alpha(UDAValue(ParserKeywords::LINCOM::ALPHA::defaultValue)), - beta(UDAValue(ParserKeywords::LINCOM::BETA::defaultValue)), - gamma(UDAValue(ParserKeywords::LINCOM::GAMMA::defaultValue)) -{ - if (this->A > 3 || this->A < -3) - throw std::invalid_argument("Invalid value for A must be in interval [-3,3]"); - - if (this->B < 0) - throw std::invalid_argument("Invalid value for B must be > 0"); - - if (this->D > 3 || this->D < -3) - throw std::invalid_argument("Invalid value for D must be in interval [-3,3]"); - - if (this->F > 3 || this->F < -3) - throw std::invalid_argument("Invalid value for F must be in interval [-3,3]"); - - if (this->m_target == Target::COMB) - throw std::logic_error("Sorry - the 'COMB' mode is not supported"); -} - -GuideRateModel GuideRateModel::serializeObject() -{ - GuideRateModel result; - result.time_interval = 1.0; - result.m_target = Target::WAT; - result.A = 2.0; - result.B = 3.0; - result.C = 4.0; - result.D = 5.0; - result.E = 6.0; - result.F = 7.0; - result.allow_increase_ = false; - result.damping_factor_ = 8.0; - result.use_free_gas = true; - result.default_model = false; - result.alpha = UDAValue(9.0); - result.beta = UDAValue(10.0); - result.gamma = UDAValue(11.0); - - return result; -} - -double GuideRateModel::pot(double oil_pot, double gas_pot, double wat_pot) const { - return pot(this->target(), oil_pot, gas_pot, wat_pot); -} - -double GuideRateModel::pot(Target target, double oil_pot, double gas_pot, double wat_pot) { - switch (target) { - case Target::OIL: - return oil_pot; - - case Target::LIQ: - return oil_pot + wat_pot; - - case Target::GAS: - return gas_pot; - - case Target::WAT: - return wat_pot; - - case Target::COMB: - throw std::logic_error("Not implemented - don't have a clue?"); - - case Target::RES: - throw std::logic_error("Not implemented - don't have a clue?"); - - default: - throw std::logic_error("Hmmm - should not be here?"); - } -} - - -double GuideRateModel::eval(double oil_pot, double gas_pot, double wat_pot) const { - if (this->default_model) - throw std::invalid_argument("The default GuideRateModel can not be evaluated - must enter GUIDERAT information explicitly."); - - double pot = this->pot(oil_pot, gas_pot, wat_pot); - if (pot == 0) - return 0; - - - double R1; - double R2; - switch (this->m_target) { - case Target::OIL: - R1 = wat_pot / oil_pot; - R2 = gas_pot / oil_pot; - break; - - case Target::LIQ: - R1 = wat_pot / (oil_pot + wat_pot); - R2 = gas_pot / (oil_pot + wat_pot); - break; - - case Target::GAS: - R1 = wat_pot / gas_pot; - R2 = oil_pot / gas_pot; - break; - - case Target::COMB: - throw std::logic_error("Not implemented - don't have a clue?"); - - case Target::RES: - throw std::logic_error("Not implemented - don't have a clue?"); - - default: - throw std::logic_error("Hmmm - should not be here?"); - } - - - double denom = this->B + this->C*std::pow(R1, this->D) + this->E*std::pow(R2, this->F); - /* - The values pot, R1 and R2 are runtime simulation results, so here - basically anything could happen. Quite dangerous to have hard error - handling here? - */ - if (denom <= 0) - throw std::range_error("Invalid denominator: " + std::to_string(denom)); - - return std::pow(pot, this->A) / denom; -} - -bool GuideRateModel::operator==(const GuideRateModel& other) const { - return (this->time_interval == other.time_interval) && - (this->m_target == other.m_target) && - (this->A == other.A) && - (this->B == other.B) && - (this->C == other.C) && - (this->D == other.D) && - (this->E == other.E) && - (this->F == other.F) && - (this->allow_increase_ == other.allow_increase_) && - (this->damping_factor_ == other.damping_factor_) && - (this->use_free_gas == other.use_free_gas); -} - -bool GuideRateModel::operator!=(const GuideRateModel& other) const { - return !(*this == other); -} - - -double GuideRateModel::update_delay() const { - return this->time_interval; -} - -double GuideRateModel::damping_factor() const { - return this->damping_factor_; -} - -double GuideRateModel::getA() const { - return this->A; -} - -double GuideRateModel::getB() const { - return this->B; -} - -double GuideRateModel::getC() const { - return this->C; -} - -double GuideRateModel::getD() const { - return this->D; -} - -double GuideRateModel::getE() const { - return this->E; -} - -double GuideRateModel::getF() const { - return this->F; -} - -bool GuideRateModel::allow_increase() const { - return this->allow_increase_; -} - -GuideRateModel::Target GuideRateModel::target() const { - return this->m_target; -} - - -GuideRateModel::Target GuideRateModel::TargetFromString(const std::string& s) { - if (s == "OIL") - return Target::OIL; - - if (s == "LIQ") - return Target::LIQ; - - if (s == "GAS") - return Target::GAS; - - if (s == "RES") - return Target::RES; - - if (s == "COMB") - return Target::COMB; - - if (s == "NONE") - return Target::NONE; - - throw std::invalid_argument("Could not convert: " + s + " to a valid Target enum value"); -} - - -/* - The COMB target - which requires parameters from the LINCOM keyword, is not - supported. There are at least two pieces of missing functionality: - - 1. The parameters in the LINCOM come with unit specified by the LCUNIT - keyword; seemingly decoupled from the unit system in the rest of deck. - This functionality is not supported. - - 2. The values in the LINCOM kewyords are UDA values, have not yet integrated - the necessary SummaryState into this. -*/ - -bool GuideRateModel::updateLINCOM(const UDAValue& , const UDAValue& , const UDAValue& ) { - if (this->m_target == Target::COMB) - throw std::logic_error("The LINCOM keyword is not supported - at all!"); - - return true; -} - - -GuideRateModel::Target GuideRateModel::convert_target(Well::GuideRateTarget well_target) { - if (well_target == Well::GuideRateTarget::OIL) - return Target::OIL; - - if (well_target == Well::GuideRateTarget::GAS) - return Target::GAS; - - if (well_target == Well::GuideRateTarget::LIQ) - return Target::LIQ; - - if (well_target == Well::GuideRateTarget::WAT) - return Target::WAT; - - throw std::logic_error("Can not convert this .... "); -} - -GuideRateModel::Target GuideRateModel::convert_target(Group::GuideRateTarget group_target) { - if (group_target == Group::GuideRateTarget::OIL) - return Target::OIL; - - if (group_target == Group::GuideRateTarget::GAS) - return Target::GAS; - - if (group_target == Group::GuideRateTarget::LIQ) - return Target::LIQ; - - if (group_target == Group::GuideRateTarget::WAT) - return Target::WAT; - - throw std::logic_error("Can not convert this .... "); -} - -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/MSW/Compsegs.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/MSW/Compsegs.cpp deleted file mode 100644 index a6878abcd9..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/MSW/Compsegs.cpp +++ /dev/null @@ -1,290 +0,0 @@ -/* - Copyright 2015 SINTEF ICT, Applied Mathematics. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include -#include -#include - -#include - -#include -#include -#include - -#include -#include - -#include "Compsegs.hpp" - -namespace Opm { - - - Compsegs::Compsegs(int i_in, int j_in, int k_in, int branch_number_in, double distance_start_in, double distance_end_in, - Connection::Direction dir_in, double center_depth_in, int segment_number_in, size_t seqIndex_in) - : m_i(i_in), - m_j(j_in), - m_k(k_in), - m_branch_number(branch_number_in), - m_distance_start(distance_start_in), - m_distance_end(distance_end_in), - m_dir(dir_in), - center_depth(center_depth_in), - segment_number(segment_number_in), - m_seqIndex(seqIndex_in) - { - } - - std::vector< Compsegs > Compsegs::compsegsFromCOMPSEGSKeyword(const DeckKeyword& compsegsKeyword, const EclipseGrid& grid, - const ParseContext& parseContext, ErrorGuard& errors) { - - std::vector< Compsegs > compsegs; - - // The first record in the keyword only contains the well name - // looping from the second record in the keyword - for (size_t recordIndex = 1; recordIndex < compsegsKeyword.size(); ++recordIndex) { - const auto& record = compsegsKeyword.getRecord(recordIndex); - // following the coordinate rule for connections - const int I = record.getItem().get< int >(0) - 1; - const int J = record.getItem().get< int >(0) - 1; - const int K = record.getItem().get< int >(0) - 1; - const int branch = record.getItem().get< int >(0); - - const std::string& well_name = compsegsKeyword.getRecord(0).getItem("WELL").getTrimmedString(0); - - double distance_start = 0.0; - double distance_end = -1.0; - if (record.getItem().hasValue(0)) { - distance_start = record.getItem().getSIDouble(0); - } else if (recordIndex == 1) { - distance_start = 0.; - } else { - // TODO: the end of the previous connection or range - // 'previous' should be in term of the input order - // since basically no specific order for the connections - const std::string msg = "This way to obtain DISTANCE_START in keyword COMPSEGS " - "is not implemented yet for well " + well_name; - parseContext.handleError(ParseContext::SCHEDULE_COMPSEGS_NOT_SUPPORTED, msg, errors); - } - if (record.getItem().hasValue(0)) { - distance_end = record.getItem().getSIDouble(0); - } else { - // TODO: the distance_start plus the thickness of the grid block - const std::string msg = "This way to obtain DISTANCE_END in keyword COMPSEGS " - "is not implemented yet for well " + well_name; - parseContext.handleError(ParseContext::SCHEDULE_COMPSEGS_NOT_SUPPORTED, msg, errors); - } - - if (distance_end <= distance_start) { - std::ostringstream sstr; - sstr << " The end of the perforations need be to further down than the start of the perforations\n " - << " well " << well_name << " " << I + 1 << " " << J + 1 << " " << K + 1 << " in keyword COMPSEGS\n"; - parseContext.handleError(ParseContext::SCHEDULE_COMPSEGS_INVALID, sstr.str(), errors); - } - - if( !record.getItem< ParserKeywords::COMPSEGS::DIRECTION >().hasValue( 0 ) && - !record.getItem< ParserKeywords::COMPSEGS::DISTANCE_END >().hasValue( 0 ) ) { - const std::string msg = "The direction has to be specified when DISTANCE_END " - "is not specified in keyword COMPSEGS for well " + well_name; - parseContext.handleError(ParseContext::SCHEDULE_COMPSEGS_INVALID, msg, errors); - } - - if( record.getItem< ParserKeywords::COMPSEGS::END_IJK >().hasValue( 0 ) && - !record.getItem< ParserKeywords::COMPSEGS::DIRECTION >().hasValue( 0 ) ) { - const std::string msg = "The direction has to be specified when END_IJK " - "is specified in keyword COMPSEGS for well " + well_name; - parseContext.handleError(ParseContext::SCHEDULE_COMPSEGS_INVALID, msg, errors); - } - - /* - * Defaulted well connection. Must be non-defaulted if DISTANCE_END - * is set or a range is specified. If not this is effectively ignored. - */ - auto direction = Connection::Direction::X; - if( record.getItem< ParserKeywords::COMPSEGS::DIRECTION >().hasValue( 0 ) ) { - direction = Connection::DirectionFromString(record.getItem().get< std::string >(0)); - } - - double center_depth; - if (!record.getItem().defaultApplied(0)) { - center_depth = record.getItem().getSIDouble(0); - } else { - // 0.0 is also the defaulted value - // which is used to indicate to obtain the final value through related segment - center_depth = 0.; - } - - if (center_depth < 0.) { - //TODO: get the depth from COMPDAT data. - const std::string msg = "This way to obtain CENTER_DISTANCE in keyword COMPSEGS " - "is not implemented yet for well " + well_name; - parseContext.handleError(ParseContext::SCHEDULE_COMPSEGS_NOT_SUPPORTED, msg, errors); - } - - int segment_number; - if (record.getItem().hasValue(0)) { - segment_number = record.getItem().get< int >(0); - } else { - segment_number = 0; - // will decide the segment number based on the distance in a process later. - } - if (!record.getItem().hasValue(0)) { // only one compsegs - - if (grid.cellActive(I, J, K)) { - std::size_t seqIndex = compsegs.size(); - compsegs.emplace_back( I, J, K, - branch, - distance_start, distance_end, - direction, - center_depth, - segment_number, - seqIndex); - } - } else { // a range is defined. genrate a range of Compsegs - std::ostringstream sstr; - sstr << "COMPSEGS entries can only be input for single connection, not supporting COMPSEGS entries specified with a range yet.\n" - << " well " << well_name << " " << I + 1 << " " << J + 1 << " " << K + 1 << " in keyword COMPSEGS\n"; - parseContext.handleError(ParseContext::SCHEDULE_COMPSEGS_NOT_SUPPORTED, sstr.str(), errors); - } - } - - return compsegs; - } - - void Compsegs::processCOMPSEGS(std::vector< Compsegs >& compsegs, const WellSegments& segment_set) { - // for the current cases we have at the moment, the distance information is specified explicitly, - // while the depth information is defaulted though, which need to be obtained from the related segment - for( auto& compseg : compsegs ) { - - // need to determine the related segment number first - if (compseg.segment_number != 0) continue; - - const double center_distance = (compseg.m_distance_start + compseg.m_distance_end) / 2.0; - const int branch_number = compseg.m_branch_number; - - int segment_number = 0; - double min_distance_difference = 1.e100; // begin with a big value - for (std::size_t i_segment = 0; i_segment < segment_set.size(); ++i_segment) { - const Segment& current_segment = segment_set[i_segment]; - if( branch_number != current_segment.branchNumber() ) continue; - - const double distance = current_segment.totalLength(); - const double distance_difference = std::abs(center_distance - distance); - if (distance_difference < min_distance_difference) { - min_distance_difference = distance_difference; - segment_number = current_segment.segmentNumber(); - } - } - - if (segment_number == 0) { - std::ostringstream sstr; - sstr << "The connection specified in COMPSEGS with index of " << compseg.m_i + 1 << " " - << compseg.m_j + 1 << " " << compseg.m_k + 1 << " failed in finding a related segment"; - throw std::runtime_error(sstr.str()); - } - - compseg.segment_number = segment_number; - - // when depth is default or zero, we obtain the depth of the connection based on the information - // of the related segments - if (compseg.center_depth == 0.) { - compseg.calculateCenterDepthWithSegments(segment_set); - } - } - } - - void Compsegs::calculateCenterDepthWithSegments(const WellSegments& segment_set) { - - // the depth and distance of the segment to the well head - const Segment& segment = segment_set.getFromSegmentNumber(segment_number); - const double segment_depth = segment.depth(); - const double segment_distance = segment.totalLength(); - - // for top segment, no interpolation is needed - if (segment_number == 1) { - center_depth = segment_depth; - return; - } - - // for other cases, interpolation between two segments is needed. - // looking for the other segment needed for interpolation - // by default, it uses the outlet segment to do the interpolation - int interpolation_segment_number = segment.outletSegment(); - - const double center_distance = (m_distance_start + m_distance_end) / 2.0; - // if the perforation is further than the segment and the segment has inlet segments in the same branch - // we use the inlet segment to do the interpolation - if (center_distance > segment_distance) { - for (const int inlet : segment.inletSegments()) { - const int inlet_index = segment_set.segmentNumberToIndex(inlet); - if (segment_set[inlet_index].branchNumber() == m_branch_number) { - interpolation_segment_number = inlet; - break; - } - } - } - - if (interpolation_segment_number == 0) { - throw std::runtime_error("Failed in finding a segment to do the interpolation with segment " - + std::to_string(segment_number)); - } - - // performing the interpolation - const Segment& interpolation_segment = segment_set.getFromSegmentNumber(interpolation_segment_number); - const double interpolation_detph = interpolation_segment.depth(); - const double interpolation_distance = interpolation_segment.totalLength(); - - const double depth_change_segment = segment_depth - interpolation_detph; - const double segment_length = segment_distance - interpolation_distance; - - if (segment_length == 0.) { - throw std::runtime_error("Zero segment length is botained when doing interpolation between segment " - + std::to_string(segment_number) + " and segment " + std::to_string(interpolation_segment_number) ); - } - - center_depth = segment_depth + (center_distance - segment_distance) / segment_length * depth_change_segment; - } - - void - Compsegs::updateConnectionsWithSegment(const std::vector& compsegs, - const EclipseGrid& grid, - WellConnections& connection_set) - { - - for (const auto& compseg : compsegs) { - const int i = compseg.m_i; - const int j = compseg.m_j; - const int k = compseg.m_k; - if (grid.cellActive(i, j, k)) { - Connection& connection = connection_set.getFromIJK(i, j, k); - connection.updateSegment(compseg.segment_number, - compseg.center_depth, - compseg.m_seqIndex, - compseg.m_distance_start, - compseg.m_distance_end); - } - } - - for (size_t ic = 0; ic < connection_set.size(); ++ic) { - if (!(connection_set.get(ic).attachedToSegment())) { - throw std::runtime_error("Not all the connections are attached with a segment. " - "The information from COMPSEGS is not complete"); - } - } - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/MSW/Compsegs.hpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/MSW/Compsegs.hpp deleted file mode 100644 index 612e24fe05..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/MSW/Compsegs.hpp +++ /dev/null @@ -1,77 +0,0 @@ -/* - Copyright 2015 SINTEF ICT, Applied Mathematics. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - - -#ifndef COMPSEGS_HPP_ -#define COMPSEGS_HPP_ - -#include -#include - -#include -#include -#include - -namespace Opm { - - class WellConnections; - class DeckKeyword; - class WellSegments; - class EclipseGrid; - - struct Compsegs { - int m_i; - int m_j; - int m_k; - // the branch number on the main stem is always 1. - // lateral branches should be numbered bigger than 1. - // a suboridnate branch must have a higher branch number than parent branch. - int m_branch_number; - double m_distance_start; - double m_distance_end; - Connection::Direction m_dir; - - double center_depth; - // we do not handle thermal length for the moment - // double m_thermal_length; - int segment_number; - std::size_t m_seqIndex; - - Compsegs(int i_in, int j_in, int k_in, int branch_number_in, double distance_start_in, double distance_end_in, - Connection::Direction dir_in, double center_depth_in, int segment_number_in, std::size_t seqIndex_in); - - void calculateCenterDepthWithSegments(const WellSegments& segment_set); - - static std::vector< Compsegs > compsegsFromCOMPSEGSKeyword(const DeckKeyword& compsegsKeyword, const EclipseGrid& grid, - const ParseContext& parseContext, ErrorGuard& errors); - - // get the segment number information and depth information based on the information from WellSegments - static void processCOMPSEGS(std::vector< Compsegs >& compsegs, const WellSegments& segment_set); - - // update the segment related information for Connections - static void updateConnectionsWithSegment(const std::vector< Compsegs >& compsegs, - const EclipseGrid& grid, - WellConnections& connection_set); - - }; -} - - - -#endif /* COMPSEGS_HPP_ */ diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/MSW/Segment.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/MSW/Segment.cpp deleted file mode 100644 index be6c0333b2..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/MSW/Segment.cpp +++ /dev/null @@ -1,350 +0,0 @@ -/* - Copyright 2016 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include -#include -#include -#include - -#include - -#include -#include - -namespace Opm { -namespace { - -static constexpr double invalid_value = -1.e100; - -} - - - - Segment::Segment() - : m_segment_number(-1), - m_branch(-1), - m_outlet_segment(-1), - m_total_length(invalid_value), - m_depth(invalid_value), - m_internal_diameter(invalid_value), - m_roughness(invalid_value), - m_cross_area(invalid_value), - m_volume(invalid_value), - m_data_ready(false) - { - } - -namespace { - - double if_invalid_value(double rst_value) { - if (rst_value == 0) - return invalid_value; - - return rst_value; - } - -} - - - Segment::Segment(const RestartIO::RstSegment& rst_segment): - m_segment_number(rst_segment.segment), - m_branch(rst_segment.branch), - m_outlet_segment(rst_segment.outlet_segment), - m_total_length( rst_segment.dist_bhp_ref ), - m_depth(rst_segment.bhp_ref_dz), - m_internal_diameter(if_invalid_value(rst_segment.diameter)), - m_roughness(if_invalid_value(rst_segment.roughness)), - m_cross_area(if_invalid_value(rst_segment.area)), - m_volume(rst_segment.volume), - m_data_ready(true), - m_segment_type(rst_segment.segment_type) - { - if (this->m_segment_type == SegmentType::SICD) { - double scalingFactor = -1; // The scaling factor will be and updated from the simulator. - - SpiralICD icd(rst_segment.base_strength, - rst_segment.icd_length, - rst_segment.fluid_density, - rst_segment.fluid_viscosity, - rst_segment.critical_water_fraction, - rst_segment.transition_region_width, - rst_segment.max_emulsion_ratio, - rst_segment.icd_scaling_mode, - rst_segment.max_valid_flow_rate, - rst_segment.icd_status, - scalingFactor); - - this->updateSpiralICD(icd); - } - - if (this->m_segment_type == SegmentType::VALVE) { - /* - These three variables are currently not stored in the restart - file; here we initialize with the default values, but if they have - originally been assigned in the deck with non-default values, that - will *not* be picked in a restarted run. - */ - - double pipeDiam = this->m_internal_diameter; - double pipeRough = this->m_roughness; - double pipeCrossA = this->m_cross_area; - - Valve valve(rst_segment.valve_flow_coeff, - rst_segment.valve_area, - rst_segment.valve_max_area, - rst_segment.valve_length, - pipeDiam, - pipeRough, - pipeCrossA, - rst_segment.icd_status); - - /* - The segment length argument should be the length of this - particular segment; in the input phase that is calculated from the - WellSegments::segmentLength() function which also uses the outlet - segment. - */ - double segment_length = -1; - throw std::logic_error("Sorry can not create a Valve segment from restart file"); - this->updateValve(valve, segment_length); - } - } - - - - Segment::Segment(int segment_number_in, int branch_in, int outlet_segment_in, double length_in, double depth_in, - double internal_diameter_in, double roughness_in, double cross_area_in, - double volume_in, bool data_ready_in, SegmentType segment_type_in) - : m_segment_number(segment_number_in), - m_branch(branch_in), - m_outlet_segment(outlet_segment_in), - m_total_length(length_in), - m_depth(depth_in), - m_internal_diameter(internal_diameter_in), - m_roughness(roughness_in), - m_cross_area(cross_area_in), - m_volume(volume_in), - m_data_ready(data_ready_in), - m_segment_type(segment_type_in) - { - } - - Segment::Segment(const Segment& src, double new_depth, double new_length): - Segment(src) - { - this->m_depth = new_depth; - this->m_total_length = new_length; - this->m_data_ready = true; - } - - Segment::Segment(const Segment& src, double new_depth, double new_length, double new_volume): - Segment(src, new_depth, new_length) - { - this->m_volume = new_volume; - } - - Segment::Segment(const Segment& src, double new_volume): - Segment(src) - { - this->m_volume = new_volume; - } - - Segment Segment::serializeObject() - { - Segment result; - result.m_segment_number = 1; - result.m_branch = 2; - result.m_outlet_segment = 3; - result.m_inlet_segments = {4, 5}; - result.m_total_length = 6.0; - result.m_depth = 7.0; - result.m_internal_diameter = 8.0; - result.m_roughness = 9.0; - result.m_cross_area = 10.0; - result.m_volume = 11.0; - result.m_data_ready = true; - result.m_segment_type = SegmentType::SICD; - result.m_spiral_icd = std::make_shared(SpiralICD::serializeObject()); - result.m_valve = std::make_shared(Valve::serializeObject()); - - return result; - } - - int Segment::segmentNumber() const { - return m_segment_number; - } - - - int Segment::branchNumber() const { - return m_branch; - } - - - int Segment::outletSegment() const { - return m_outlet_segment; - } - - - double Segment::totalLength() const { - return m_total_length; - } - - - double Segment::depth() const { - return m_depth; - } - - - double Segment::internalDiameter() const { - return m_internal_diameter; - } - - - double Segment::roughness() const { - return m_roughness; - } - - - double Segment::crossArea() const { - return m_cross_area; - } - - double Segment::volume() const { - return m_volume; - } - - bool Segment::dataReady() const { - return m_data_ready; - } - - Segment::SegmentType Segment::segmentType() const { - return m_segment_type; - } - - const std::vector& Segment::inletSegments() const { - return m_inlet_segments; - } - - void Segment::addInletSegment(const int segment_number_in) { - m_inlet_segments.push_back(segment_number_in); - } - - double Segment::invalidValue() { - return invalid_value; - } - - bool Segment::operator==( const Segment& rhs ) const { - return this->m_segment_number == rhs.m_segment_number - && this->m_branch == rhs.m_branch - && this->m_outlet_segment == rhs.m_outlet_segment - && this->m_total_length == rhs.m_total_length - && this->m_depth == rhs.m_depth - && this->m_internal_diameter == rhs.m_internal_diameter - && this->m_roughness == rhs.m_roughness - && this->m_cross_area == rhs.m_cross_area - && this->m_volume == rhs.m_volume - && this->m_data_ready == rhs.m_data_ready; - } - - bool Segment::operator!=( const Segment& rhs ) const { - return !this->operator==(rhs); - } - - void Segment::updateSpiralICD(const SpiralICD& spiral_icd) { - m_segment_type = SegmentType::SICD; - m_spiral_icd = std::make_shared(spiral_icd); - } - - const std::shared_ptr& Segment::spiralICD() const { - return m_spiral_icd; - } - - - void Segment::updateValve(const Valve& valve, const double segment_length) { - // we need to update some values for the vale - auto valve_ptr = std::make_shared(valve); - - if (valve_ptr->pipeAdditionalLength() < 0.) { // defaulted for this - valve_ptr->setPipeAdditionalLength(segment_length); - } - - if (valve_ptr->pipeDiameter() < 0.) { - valve_ptr->setPipeDiameter(m_internal_diameter); - } else { - this->m_internal_diameter = valve_ptr->pipeDiameter(); - } - - if (valve_ptr->pipeRoughness() < 0.) { - valve_ptr->setPipeRoughness(m_roughness); - } else { - this->m_roughness = valve_ptr->pipeRoughness(); - } - - if (valve_ptr->pipeCrossArea() < 0.) { - valve_ptr->setPipeCrossArea(m_cross_area); - } else { - this->m_cross_area = valve_ptr->pipeCrossArea(); - } - - if (valve_ptr->conMaxCrossArea() < 0.) { - valve_ptr->setConMaxCrossArea(valve_ptr->pipeCrossArea()); - } - - this->m_valve = valve_ptr; - - m_segment_type = SegmentType::VALVE; - } - - - const Valve* Segment::valve() const { - return m_valve.get(); - } - - int Segment::ecl_type_id() const { - switch (this->m_segment_type) { - case SegmentType::REGULAR: - return -1; - case SegmentType::SICD: - return -7; - case SegmentType::AICD: - return -8; - case SegmentType::VALVE: - return -5; - default: - throw std::invalid_argument("Unhanedled segment type"); - } - } - - Segment::SegmentType Segment::type_from_int(int ecl_id) { - switch(ecl_id) { - case -1: - return SegmentType::REGULAR; - case -7: - return SegmentType::SICD; - case -8: - return SegmentType::AICD; - case -5: - return SegmentType::VALVE; - default: - throw std::invalid_argument("Unhandeled segment type: " + std::to_string(ecl_id)); - } - } -} - - diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/MSW/SpiralICD.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/MSW/SpiralICD.cpp deleted file mode 100644 index ac7b7ab0a9..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/MSW/SpiralICD.cpp +++ /dev/null @@ -1,229 +0,0 @@ -/* - Copyright 2017 SINTEF Digital, Mathematics and Cybernetics. - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include -#include -#include -#include - -#include -#include - - -namespace Opm { - - SpiralICD::SpiralICD() - : SpiralICD(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0, 0.0, ICDStatus::SHUT, 1.0) - { - } - - SpiralICD::SpiralICD(double strength, - double length, - double densityCalibration, - double viscosityCalibration, - double criticalValue, - double widthTransitionRegion, - double maxViscosityRatio, - int flowScaling, - double maxAbsoluteRate, - ICDStatus status, - double scalingFactor) - : m_strength(strength), - m_length(length), - m_density_calibration(densityCalibration), - m_viscosity_calibration(viscosityCalibration), - m_critical_value(criticalValue), - m_width_transition_region(widthTransitionRegion), - m_max_viscosity_ratio(maxViscosityRatio), - m_method_flow_scaling(flowScaling), - m_max_absolute_rate(maxAbsoluteRate), - m_status(status), - m_scaling_factor(scalingFactor) - { - } - - - SpiralICD::SpiralICD(const DeckRecord& record) - : m_strength(record.getItem("STRENGTH").getSIDouble(0)), - m_length(record.getItem("LENGTH").getSIDouble(0)), - m_density_calibration(record.getItem("DENSITY_CALI").getSIDouble(0)), - m_viscosity_calibration(record.getItem("VISCOSITY_CALI").getSIDouble(0)), - m_critical_value(record.getItem("CRITICAL_VALUE").getSIDouble(0)), - m_width_transition_region(record.getItem("WIDTH_TRANS").get(0)), - m_max_viscosity_ratio(record.getItem("MAX_VISC_RATIO").get(0)), - m_method_flow_scaling(record.getItem("METHOD_SCALING_FACTOR").get(0)), - m_max_absolute_rate(record.getItem("MAX_ABS_RATE").hasValue(0) - ? record.getItem("MAX_ABS_RATE").getSIDouble(0) - : std::numeric_limits::max()), m_scaling_factor(std::numeric_limits::lowest()) - { - if (record.getItem("STATUS").getTrimmedString(0) == "OPEN") { - m_status = ICDStatus::OPEN; - } else { - m_status = ICDStatus::SHUT; - } - } - - - SpiralICD SpiralICD::serializeObject() - { - SpiralICD result; - result.m_strength = 1.0; - result.m_length = 2.0; - result.m_density_calibration = 3.0; - result.m_viscosity_calibration = 4.0; - result.m_critical_value = 5.0; - result.m_width_transition_region = 6.0; - result.m_max_viscosity_ratio = 7.0; - result.m_method_flow_scaling = 8; - result.m_max_absolute_rate = 9.0; - result.m_status = ICDStatus::OPEN; - result.m_scaling_factor = 10.0; - - return result; - } - - std::map > > - SpiralICD::fromWSEGSICD(const DeckKeyword& wsegsicd) - { - std::map > > res; - - for (const DeckRecord &record : wsegsicd) { - const std::string well_name = record.getItem("WELL").getTrimmedString(0); - - const int start_segment = record.getItem("SEG1").get(0); - const int end_segment = record.getItem("SEG2").get(0); - - if (start_segment < 2 || end_segment < 2 || end_segment < start_segment) { - const std::string message = "Segment numbers " + std::to_string(start_segment) + " and " - + std::to_string(end_segment) + " specified in WSEGSICD for well " + - well_name - + " are illegal "; - throw std::invalid_argument(message); - } - - const SpiralICD spiral_icd(record); - for (int seg = start_segment; seg <= end_segment; seg++) { - res[well_name].push_back(std::make_pair(seg, spiral_icd)); - } - } - - return res; - } - - double SpiralICD::maxAbsoluteRate() const { - return m_max_absolute_rate; - } - - ICDStatus SpiralICD::status() const { - return m_status; - } - - double SpiralICD::strength() const { - return m_strength; - } - - double SpiralICD::length() const { - return m_length; - } - - double SpiralICD::densityCalibration() const { - return m_density_calibration; - } - - double SpiralICD::viscosityCalibration() const - { - return m_viscosity_calibration; - } - - double SpiralICD::criticalValue() const { - return m_critical_value; - } - - double SpiralICD::widthTransitionRegion() const - { - return m_width_transition_region; - } - - double SpiralICD::maxViscosityRatio() const - { - return m_max_viscosity_ratio; - } - - int SpiralICD::methodFlowScaling() const - { - return m_method_flow_scaling; - } - - double SpiralICD::scalingFactor() const - { - if (m_scaling_factor <= 0.) - throw std::runtime_error("the scaling factor has invalid value " + std::to_string(m_scaling_factor)); - - return m_scaling_factor; - } - - void SpiralICD::updateScalingFactor(const double outlet_segment_length, const double completion_length) - { - if (m_method_flow_scaling < 0) { - if (m_length > 0.) { // icd length / outlet segment length - m_scaling_factor = m_length / outlet_segment_length; - } else if (m_length < 0.) { - m_scaling_factor = std::abs(m_length); - } else { // icd length is zero, not sure the proper way to handle this yet - throw std::logic_error("Zero-value length of SICD is found when calcuating scaling factor"); - } - } else if (m_method_flow_scaling == 0) { - if (m_length <= 0.) - throw std::logic_error("Non positive length of SICD if found when method of scaling is zero"); - - m_scaling_factor = m_length / outlet_segment_length; - } else if (m_method_flow_scaling == 1) { - m_scaling_factor = std::abs(m_length); - } else if (m_method_flow_scaling == 2) { - if (completion_length == 0.) { - throw std::logic_error("Zero connection length is found. No way to update scaling factor for this SICD segment"); - } - m_scaling_factor = m_length / completion_length; - } else { - throw std::logic_error(" invalid method specified to calculate flow scaling factor for SICD"); - } - } - - - bool SpiralICD::operator==(const SpiralICD& data) const { - return this->strength() == data.strength() && - this->length() == data.length() && - this->densityCalibration() == data.densityCalibration() && - this->viscosityCalibration() == data.viscosityCalibration() && - this->criticalValue() == data.criticalValue() && - this->widthTransitionRegion() == data.widthTransitionRegion() && - this->maxViscosityRatio() == data.maxViscosityRatio() && - this->methodFlowScaling() == data.methodFlowScaling() && - this->maxAbsoluteRate() == data.maxAbsoluteRate() && - this->status() == data.status() && - this->scalingFactor() == data.scalingFactor(); - } - -int SpiralICD::ecl_status() const { - return to_int(this->m_status); -} - - -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/MSW/Valve.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/MSW/Valve.cpp deleted file mode 100644 index 896e9a9394..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/MSW/Valve.cpp +++ /dev/null @@ -1,193 +0,0 @@ -/* - Copyright 2019 Equinor. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include -#include -#include - -#include - - -namespace Opm { - - Valve::Valve() - : Valve(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, ICDStatus::SHUT) - { - } - - Valve::Valve(double conFlowCoeff, - double conCrossA, - double conMaxCrossA, - double pipeAddLength, - double pipeDiam, - double pipeRough, - double pipeCrossA, - ICDStatus stat) - : m_con_flow_coeff(conFlowCoeff) - , m_con_cross_area(conCrossA) - , m_con_max_cross_area(conMaxCrossA) - , m_pipe_additional_length(pipeAddLength) - , m_pipe_diameter(pipeDiam) - , m_pipe_roughness(pipeRough) - , m_pipe_cross_area(pipeCrossA) - , m_status(stat) - { - } - - Valve::Valve(const DeckRecord& record) - : m_con_flow_coeff(record.getItem("CV").get(0)) - , m_con_cross_area(record.getItem("AREA").get(0)) - { - // we initialize negative values for the values are defaulted - const double value_for_default = -1.e100; - - // TODO: we assume that the value input for this keyword is always positive - if (record.getItem("EXTRA_LENGTH").defaultApplied(0)) { - m_pipe_additional_length = value_for_default; - } else { - m_pipe_additional_length = record.getItem("EXTRA_LENGTH").get(0); - } - - if (record.getItem("PIPE_D").defaultApplied(0)) { - m_pipe_diameter = value_for_default; - } else { - m_pipe_diameter = record.getItem("PIPE_D").get(0); - } - - if (record.getItem("ROUGHNESS").defaultApplied(0)) { - m_pipe_roughness = value_for_default; - } else { - m_pipe_roughness = record.getItem("ROUGHNESS").get(0); - } - - if (record.getItem("PIPE_A").defaultApplied(0)) { - m_pipe_cross_area = value_for_default; - } else { - m_pipe_cross_area = record.getItem("PIPE_A").get(0); - } - - if (record.getItem("STATUS").getTrimmedString(0) == "OPEN") { - m_status = ICDStatus::OPEN; - } else { - m_status = ICDStatus::SHUT; - // TODO: should we check illegal input here - } - - if (record.getItem("MAX_A").defaultApplied(0)) { - m_con_max_cross_area = value_for_default; - } else { - m_con_max_cross_area = record.getItem("MAX_A").get(0); - } - } - - Valve Valve::serializeObject() - { - Valve result; - result.m_con_flow_coeff = 1.0; - result.m_con_cross_area = 2.0; - result.m_con_max_cross_area = 3.0; - result.m_pipe_additional_length = 4.0; - result.m_pipe_diameter = 5.0; - result.m_pipe_roughness = 6.0; - result.m_pipe_cross_area = 7.0; - result.m_status = ICDStatus::OPEN; - - return result; - } - - std::map > > - Valve::fromWSEGVALV(const DeckKeyword& keyword) - { - std::map > > res; - - for (const DeckRecord &record : keyword) { - const std::string well_name = record.getItem("WELL").getTrimmedString(0); - - const int segment_number = record.getItem("SEGMENT_NUMBER").get(0); - - const Valve valve(record); - res[well_name].push_back(std::make_pair(segment_number, valve)); - } - - return res; - } - - ICDStatus Valve::status() const { - return m_status; - } - - double Valve::conFlowCoefficient() const { - return m_con_flow_coeff; - } - - double Valve::conCrossArea() const { - return m_con_cross_area; - } - - double Valve::pipeAdditionalLength() const { - return m_pipe_additional_length; - } - - double Valve::pipeDiameter() const { - return m_pipe_diameter; - } - - double Valve::pipeRoughness() const { - return m_pipe_roughness; - } - - double Valve::pipeCrossArea() const { - return m_pipe_cross_area; - } - - double Valve::conMaxCrossArea() const { - return m_con_max_cross_area; - } - - void Valve::setPipeDiameter(const double dia) { - m_pipe_diameter = dia; - } - - void Valve::setPipeRoughness(const double rou) { - m_pipe_roughness = rou; - } - - void Valve::setPipeCrossArea(const double area) { - m_pipe_cross_area = area; - } - - void Valve::setConMaxCrossArea(const double area) { - m_con_max_cross_area = area; - } - - void Valve::setPipeAdditionalLength(const double length) { - m_pipe_additional_length = length; - } - - bool Valve::operator==(const Valve& data) const { - return this->conFlowCoefficient() == data.conFlowCoefficient() && - this->conCrossArea() == data.conCrossArea() && - this->conMaxCrossArea() == data.conMaxCrossArea() && - this->pipeAdditionalLength() == data.pipeAdditionalLength() && - this->pipeDiameter() == data.pipeDiameter() && - this->pipeRoughness() == data.pipeRoughness() && - this->pipeCrossArea() == data.pipeCrossArea() && - this->status() == data.status(); - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/MSW/WellSegments.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/MSW/WellSegments.cpp deleted file mode 100644 index 58811ffd58..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/MSW/WellSegments.cpp +++ /dev/null @@ -1,616 +0,0 @@ -/* - Copyright 2016 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ -#include -#include -#include -#include -#include -#include - -#ifdef _WIN32 -#define _USE_MATH_DEFINES -#include -#endif - -#include -#include -#include -#include -#include -#include -#include - -namespace Opm { - - WellSegments::WellSegments(CompPressureDrop compDrop, - const std::vector& segments) - : m_comp_pressure_drop(compDrop) - { - for (const auto& segment : segments) - this->addSegment(segment); - } - - - WellSegments::WellSegments(const DeckKeyword& keyword) { - this->loadWELSEGS(keyword); - } - - - WellSegments WellSegments::serializeObject() - { - WellSegments result; - result.m_comp_pressure_drop = CompPressureDrop::HF_; - result.m_segments = {Opm::Segment::serializeObject()}; - result.segment_number_to_index = {{1, 2}}; - - return result; - } - - - std::size_t WellSegments::size() const { - return m_segments.size(); - } - - const Segment& WellSegments::topSegment() const { - return this->m_segments[0]; - } - - double WellSegments::depthTopSegment() const { - return this->topSegment().depth(); - } - - double WellSegments::lengthTopSegment() const { - return this->topSegment().totalLength(); - } - - double WellSegments::volumeTopSegment() const { - return this->topSegment().volume(); - } - - - WellSegments::CompPressureDrop WellSegments::compPressureDrop() const { - return m_comp_pressure_drop; - } - - const std::vector::const_iterator WellSegments::begin() const { - return this->m_segments.begin(); - } - - const std::vector::const_iterator WellSegments::end() const { - return this->m_segments.end(); - } - - const Segment& WellSegments::operator[](size_t idx) const { - return m_segments[idx]; - } - - int WellSegments::segmentNumberToIndex(const int segment_number) const { - const auto it = segment_number_to_index.find(segment_number); - if (it != segment_number_to_index.end()) { - return it->second; - } else { - return -1; - } - } - - void WellSegments::addSegment( const Segment& new_segment ) { - // decide whether to push_back or insert - const int segment_number = new_segment.segmentNumber(); - - const int segment_index = segmentNumberToIndex(segment_number); - - if (segment_index < 0) { // it is a new segment - segment_number_to_index[segment_number] = size(); - m_segments.push_back(new_segment); - } else { // the segment already exists - m_segments[segment_index] = new_segment; - } - } - - void WellSegments::loadWELSEGS( const DeckKeyword& welsegsKeyword ) { - - // for the first record, which provides the information for the top segment - // and information for the whole segment set - const auto& record1 = welsegsKeyword.getRecord(0); - const double invalid_value = Segment::invalidValue(); // meaningless value to indicate unspecified values - - const double depth_top = record1.getItem("DEPTH").getSIDouble(0); - const double length_top = record1.getItem("LENGTH").getSIDouble(0); - const double volume_top = record1.getItem("WELLBORE_VOLUME").getSIDouble(0); - const LengthDepth length_depth_type = LengthDepthFromString(record1.getItem("INFO_TYPE").getTrimmedString(0)); - m_comp_pressure_drop = CompPressureDropFromString(record1.getItem("PRESSURE_COMPONENTS").getTrimmedString(0)); - - // the main branch is 1 instead of 0 - // the segment number for top segment is also 1 - if (length_depth_type == LengthDepth::INC) { - m_segments.emplace_back( 1, 1, 0, 0., 0., - invalid_value, invalid_value, invalid_value, - volume_top, false , Segment::SegmentType::REGULAR); - - } else if (length_depth_type == LengthDepth::ABS) { - m_segments.emplace_back( 1, 1, 0, length_top, depth_top, - invalid_value, invalid_value, invalid_value, - volume_top, true , Segment::SegmentType::REGULAR); - } - - // read all the information out from the DECK first then process to get all the required information - for (size_t recordIndex = 1; recordIndex < welsegsKeyword.size(); ++recordIndex) { - const auto& record = welsegsKeyword.getRecord(recordIndex); - const int segment1 = record.getItem("SEGMENT1").get< int >(0); - const int segment2 = record.getItem("SEGMENT2").get< int >(0); - if ((segment1 < 2) || (segment2 < segment1)) { - throw std::logic_error("illegal segment number input is found in WELSEGS!\n"); - } - - // how to handle the logical relations between lateral branches and parent branches. - // so far, the branch number has not been used. - const int branch = record.getItem("BRANCH").get< int >(0); - if ((branch < 1)) { - throw std::logic_error("illegal branch number input is found in WELSEGS!\n"); - } - const int outlet_segment_readin = record.getItem("JOIN_SEGMENT").get< int >(0); - double diameter = record.getItem("DIAMETER").getSIDouble(0); - const auto& itemArea = record.getItem("AREA"); - double area; - if (itemArea.hasValue(0)) { - area = itemArea.getSIDouble(0); - } else { - area = M_PI * diameter * diameter / 4.0; - } - - // if the values are incremental values, then we can just use the values - // if the values are absolute values, then we need to calculate them during the next process - // only the value for the last segment in the range is recorded - const double segment_length = record.getItem("SEGMENT_LENGTH").getSIDouble(0); - // the naming is a little confusing here. - // naming following the definition from the current keyword for the moment - const double depth_change = record.getItem("DEPTH_CHANGE").getSIDouble(0); - - const auto& itemVolume = record.getItem("VOLUME"); - double volume; - if (itemVolume.hasValue(0)) { - volume = itemVolume.getSIDouble(0); - } else if (length_depth_type == LengthDepth::INC) { - volume = area * segment_length; - } else { - volume = invalid_value; // A * L, while L is not determined yet - } - - const double roughness = record.getItem("ROUGHNESS").getSIDouble(0); - - for (int i = segment1; i <= segment2; ++i) { - // for the first or the only segment in the range is the one specified in the WELSEGS - // from the second segment in the range, the outlet segment is the previous segment in the range - int outlet_segment; - if (i == segment1) { - outlet_segment = outlet_segment_readin; - } else { - outlet_segment = i - 1; - } - - if (length_depth_type == LengthDepth::INC) { - m_segments.emplace_back( i, branch, outlet_segment, segment_length, depth_change, - diameter, roughness, area, volume, false , Segment::SegmentType::REGULAR); - } else if (i == segment2) { - m_segments.emplace_back( i, branch, outlet_segment, segment_length, depth_change, - diameter, roughness, area, volume, true , Segment::SegmentType::REGULAR); - } else { - m_segments.emplace_back( i, branch, outlet_segment, invalid_value, invalid_value, - diameter, roughness, area, volume, false , Segment::SegmentType::REGULAR); - } - } - } - - for (size_t i_segment = 0; i_segment < m_segments.size(); ++i_segment) { - const int segment_number = m_segments[i_segment].segmentNumber(); - const int index = segmentNumberToIndex(segment_number); - if (index >= 0) { // found in the existing m_segments already - throw std::logic_error("Segments with same segment number are found!\n"); - } - segment_number_to_index[segment_number] = i_segment; - } - - for (size_t i_segment = 0; i_segment < m_segments.size(); ++i_segment) { - const int segment_number = m_segments[i_segment].segmentNumber(); - const int outlet_segment = m_segments[i_segment].outletSegment(); - if (outlet_segment <= 0) { // no outlet segment - continue; - } - const int outlet_segment_index = segment_number_to_index[outlet_segment]; - m_segments[outlet_segment_index].addInletSegment(segment_number); - } - - - this->process(length_depth_type, depth_top, length_top); - - } - - const Segment& WellSegments::getFromSegmentNumber(const int segment_number) const { - // the index of segment in the vector of segments - const int segment_index = segmentNumberToIndex(segment_number); - if (segment_index < 0) { - throw std::runtime_error("Could not indexate the segment " + std::to_string(segment_number) - + " when trying to get the segment "); - } - return m_segments[segment_index]; - } - - void WellSegments::process(LengthDepth length_depth, double depth_top, double length_top) { - if (length_depth == LengthDepth::ABS) - this->processABS(); - else if (length_depth == LengthDepth::INC) - this->processINC(depth_top, length_top); - else - throw std::logic_error("Invalid llength/depth/type in segment data structure"); - } - - - void WellSegments::processABS() { - const double invalid_value = Segment::invalidValue(); // meaningless value to indicate unspecified/uncompleted values - - orderSegments(); - - std::size_t current_index= 1; - while (current_index< size()) { - if (m_segments[current_index].dataReady()) { - current_index++; - continue; - } - - const int range_begin = current_index; - const int outlet_segment = m_segments[range_begin].outletSegment(); - const int outlet_index= segmentNumberToIndex(outlet_segment); - - assert(m_segments[outlet_index].dataReady() == true); - - std::size_t range_end = range_begin + 1; - for (; range_end < size(); ++range_end) { - if (m_segments[range_end].dataReady() == true) { - break; - } - } - - if (range_end >= size()) { - throw std::logic_error(" One range records in WELSEGS is wrong. "); - } - - // set the length and depth values in the range. - int number_segments = range_end - range_begin + 1; - assert(number_segments > 1); //if only 1, the information should be complete - - const double length_outlet = m_segments[outlet_index].totalLength(); - const double depth_outlet = m_segments[outlet_index].depth(); - - const double length_last = m_segments[range_end].totalLength(); - const double depth_last = m_segments[range_end].depth(); - - // incremental length and depth for the segments within the range - const double length_inc = (length_last - length_outlet) / number_segments; - const double depth_inc = (depth_last - depth_outlet) / number_segments; - const double volume_segment = m_segments[range_end].crossArea() * length_inc; - - for (std::size_t k = range_begin; k <= range_end; ++k) { - const auto& old_segment = this->m_segments[k]; - double new_volume, new_length, new_depth; - if (k == range_end) { - new_length = old_segment.totalLength(); - new_depth = old_segment.depth(); - } else { - new_length = length_outlet + (k - range_begin + 1) * length_inc; - new_depth = depth_outlet + (k - range_end + 1) * depth_inc; - } - - if (old_segment.volume() < 0.5 * invalid_value) - new_volume = volume_segment; - else - new_volume = old_segment.volume(); - - Segment new_segment(old_segment, new_length, new_depth, new_volume); - addSegment(new_segment); - } - current_index= range_end + 1; - } - - // then update the volume for all the segments except the top segment - // this is for the segments specified individually while the volume is not specified. - for (std::size_t i = 1; i < size(); ++i) { - assert(m_segments[i].dataReady()); - if (m_segments[i].volume() == invalid_value) { - const auto& old_segment = this->m_segments[i]; - const int outlet_segment = m_segments[i].outletSegment(); - const int outlet_index = segmentNumberToIndex(outlet_segment); - const double segment_length = m_segments[i].totalLength() - m_segments[outlet_index].totalLength(); - const double segment_volume = m_segments[i].crossArea() * segment_length; - - Segment new_segment(old_segment, segment_volume); - addSegment(new_segment); - } - } - } - - void WellSegments::processINC(double depth_top, double length_top) { - - // update the information inside the WellSegments to be in ABS way - Segment new_top_segment(this->m_segments[0], depth_top, length_top); - this->addSegment(new_top_segment); - orderSegments(); - - // begin with the second segment - for (std::size_t i_index= 1; i_index< size(); ++i_index) { - if( m_segments[i_index].dataReady() ) continue; - - // find its outlet segment - const int outlet_segment = m_segments[i_index].outletSegment(); - const int outlet_index= segmentNumberToIndex(outlet_segment); - - // assert some information of the outlet_segment - assert(outlet_index>= 0); - assert(m_segments[outlet_index].dataReady()); - - const double outlet_depth = m_segments[outlet_index].depth(); - const double outlet_length = m_segments[outlet_index].totalLength(); - const double temp_depth = outlet_depth + m_segments[i_index].depth(); - const double temp_length = outlet_length + m_segments[i_index].totalLength(); - - // applying the calculated length and depth to the current segment - Segment new_segment(this->m_segments[i_index], temp_depth, temp_length); - addSegment(new_segment); - } - } - - void WellSegments::orderSegments() { - // re-ordering the segments to make later use easier. - // two principles - // 1. the index of the outlet segment will be stored in the lower index than the segment. - // 2. the segments belong to the same branch will be continuously stored. - - // top segment will always be the first one - // before this index, the reordering is done. - std::size_t current_index= 1; - - // clear the mapping from segment number to store index - segment_number_to_index.clear(); - // for the top segment - segment_number_to_index[1] = 0; - - while (current_index< size()) { - // the branch number of the last segment that is done re-ordering - const int last_branch_number = m_segments[current_index-1].branchNumber(); - // the one need to be swapped to the current_index. - int target_segment_index= -1; - - // looking for target_segment_index - for (std::size_t i_index= current_index; i_index< size(); ++i_index) { - const int outlet_segment_number = m_segments[i_index].outletSegment(); - const int outlet_segment_index = segmentNumberToIndex(outlet_segment_number); - if (outlet_segment_index < 0) { // not found the outlet_segment in the done re-ordering segments - continue; - } - if (target_segment_index< 0) { // first time found a candidate - target_segment_index= i_index; - } else { // there is already a candidate, chosing the one with the same branch number with last_branch_number - const int old_target_segment_index_branch = m_segments[target_segment_index].branchNumber(); - const int new_target_segment_index_branch = m_segments[i_index].branchNumber(); - if (new_target_segment_index_branch == last_branch_number) { - if (old_target_segment_index_branch != last_branch_number) { - target_segment_index= i_index; - } else { - throw std::logic_error("two segments in the same branch share the same outlet segment !!\n"); - } - } - } - } - - if (target_segment_index< 0) { - throw std::logic_error("could not find candidate segment to swap in before the re-odering process get done !!\n"); - } - - assert(target_segment_index >= static_cast(current_index)); - if (target_segment_index > static_cast(current_index)) { - std::swap(m_segments[current_index], m_segments[target_segment_index]); - } - const int segment_number = m_segments[current_index].segmentNumber(); - segment_number_to_index[segment_number] = current_index; - current_index++; - } - } - - bool WellSegments::operator==( const WellSegments& rhs ) const { - return this->m_comp_pressure_drop == rhs.m_comp_pressure_drop - && this->m_segments.size() == rhs.m_segments.size() - && this->segment_number_to_index.size() == rhs.segment_number_to_index.size() - && std::equal( this->m_segments.begin(), - this->m_segments.end(), - rhs.m_segments.begin() ) - && std::equal( this->segment_number_to_index.begin(), - this->segment_number_to_index.end(), - rhs.segment_number_to_index.begin() ); - } - - double WellSegments::segmentLength(const int segment_number) const { - const Segment& segment = this->getFromSegmentNumber(segment_number); - if (segment_number == 1) // top segment - return segment.totalLength(); - - // other segments - const Segment &outlet_segment = getFromSegmentNumber(segment.outletSegment()); - const double segment_length = segment.totalLength() - outlet_segment.totalLength(); - if (segment_length <= 0.) - throw std::runtime_error(" non positive segment length is obtained for segment " - + std::to_string(segment_number)); - - return segment_length; - } - - - double WellSegments::segmentDepthChange(const int segment_number) const { - const Segment& segment = getFromSegmentNumber(segment_number); - if (segment_number == 1) // top segment - return segment.depth(); - - // other segments - const Segment &outlet_segment = this->getFromSegmentNumber(segment.outletSegment()); - return segment.depth() - outlet_segment.depth(); - } - - - std::vector WellSegments::branchSegments(int branch) const { - std::vector segments; - std::unordered_set segment_set; - for (const auto& segment : this->m_segments) { - if (segment.branchNumber() == branch) { - segments.push_back(segment); - segment_set.insert( segment.segmentNumber() ); - } - } - - - std::size_t head_index = 0; - while (head_index < segments.size()) { - const auto& head_segment = segments[head_index]; - if (segment_set.count(head_segment.outletSegment()) != 0) { - auto head_iter = std::find_if(std::next(segments.begin(), head_index), segments.end(), - [&segment_set] (const Segment& segment) { return (segment_set.count(segment.outletSegment()) == 0); }); - - if (head_iter == segments.end()) - throw std::logic_error("Loop detected in branch/segment structure"); - std::swap( segments[head_index], *head_iter); - } - segment_set.erase( segments[head_index].segmentNumber() ); - head_index++; - } - - return segments; - } - - bool WellSegments::updateWSEGSICD(const std::vector >& sicd_pairs) { - if (m_comp_pressure_drop == CompPressureDrop::H__) { - const std::string msg = "to use spiral ICD segment you have to activate the frictional pressure drop calculation"; - throw std::runtime_error(msg); - } - - for (const auto& pair_elem : sicd_pairs) { - const int segment_number = pair_elem.first; - const SpiralICD& spiral_icd = pair_elem.second; - Segment segment = this->getFromSegmentNumber(segment_number); - segment.updateSpiralICD(spiral_icd); - this->addSegment(segment); - } - - return true; - } - - bool WellSegments::updateWSEGVALV(const std::vector >& valve_pairs) { - - if (m_comp_pressure_drop == CompPressureDrop::H__) { - const std::string msg = "to use WSEGVALV segment you have to activate the frictional pressure drop calculation"; - throw std::runtime_error(msg); - } - - for (const auto& pair : valve_pairs) { - const int segment_number = pair.first; - const Valve& valve = pair.second; - Segment segment = this->getFromSegmentNumber(segment_number); - const double segment_length = this->segmentLength(segment_number); - // this function can return bool - segment.updateValve(valve, segment_length); - this->addSegment(segment); - } - - return true; - } - - - bool WellSegments::operator!=( const WellSegments& rhs ) const { - return !( *this == rhs ); - } - - -const std::string WellSegments::LengthDepthToString(LengthDepth enumValue) { - switch (enumValue) { - case LengthDepth::INC: - return "INC"; - case LengthDepth::ABS: - return "ABS"; - default: - throw std::invalid_argument("unhandled LengthDepth value"); - } -} - - -WellSegments::LengthDepth WellSegments::LengthDepthFromString(const std::string& string_value ) { - if (string_value == "INC") { - return LengthDepth::INC; - } else if (string_value == "ABS") { - return LengthDepth::ABS; - } else { - throw std::invalid_argument("Unknown enum string_value: " + string_value + " for LengthDepth"); - } -} - - -const std::string WellSegments::CompPressureDropToString(CompPressureDrop enumValue) { - switch (enumValue) { - case CompPressureDrop::HFA: - return "HFA"; - case CompPressureDrop::HF_: - return "HF-"; - case CompPressureDrop::H__: - return "H--"; - default: - throw std::invalid_argument("unhandled CompPressureDrop value"); - } -} - -WellSegments::CompPressureDrop WellSegments::CompPressureDropFromString( const std::string& string_value ) { - - if (string_value == "HFA") { - return CompPressureDrop::HFA; - } else if (string_value == "HF-") { - return CompPressureDrop::HF_; - } else if (string_value == "H--") { - return CompPressureDrop::H__; - } else { - throw std::invalid_argument("Unknown enum string_value: " + string_value + " for CompPressureDrop"); - } -} - -const std::string WellSegments::MultiPhaseModelToString(MultiPhaseModel enumValue) { - switch (enumValue) { - case MultiPhaseModel::HO: - return "HO"; - case MultiPhaseModel::DF: - return "DF"; - default: - throw std::invalid_argument("unhandled MultiPhaseModel value"); - } -} - -WellSegments::MultiPhaseModel WellSegments::MultiPhaseModelFromString(const std::string& string_value ) { - - if ((string_value == "HO") || (string_value == "H0")) { - return MultiPhaseModel::HO; - } else if (string_value == "DF") { - return MultiPhaseModel::DF; - } else { - throw std::invalid_argument("Unknown enum string_value: " + string_value + " for MultiPhaseModel"); - } -} - -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/MSW/icd.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/MSW/icd.cpp deleted file mode 100644 index 4baebffe4d..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/MSW/icd.cpp +++ /dev/null @@ -1,50 +0,0 @@ -/* - Copyright 2020 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include -#include - -namespace Opm { - -template <> -ICDStatus from_int(int int_status) { - switch (int_status) { - case 0: - return ICDStatus::OPEN; - case 1: - return ICDStatus::SHUT; - default: - throw std::invalid_argument("Invalid status value"); - } -} - -template <> -int to_int(ICDStatus status) { - switch (status) { - case ICDStatus::OPEN: - return 0; - case ICDStatus::SHUT: - return 1; - default: - throw std::invalid_argument("Invalid status value"); - } -} - - -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/MSW/updatingConnectionsWithSegments.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/MSW/updatingConnectionsWithSegments.cpp deleted file mode 100644 index 6f7bb93275..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/MSW/updatingConnectionsWithSegments.cpp +++ /dev/null @@ -1,39 +0,0 @@ -/* - Copyright 2017 SINTEF Digital, Mathematics and Cybernetics. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include -#include - -#include "Compsegs.hpp" - -namespace Opm { - WellConnections * newConnectionsWithSegments(const DeckKeyword& compsegs, - const WellConnections& input_connections, - const WellSegments& segment_set, - const EclipseGrid& grid, - const ParseContext& parseContext, - ErrorGuard& errors) - { - WellConnections new_connection_set = input_connections; - std::vector compsegs_vector = Compsegs::compsegsFromCOMPSEGSKeyword( compsegs, grid, parseContext, errors); - Compsegs::processCOMPSEGS(compsegs_vector, segment_set); - Compsegs::updateConnectionsWithSegment(compsegs_vector, grid, new_connection_set); - return new WellConnections( std::move( new_connection_set ) ); - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/MessageLimits.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/MessageLimits.cpp deleted file mode 100644 index 6ec64cd063..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/MessageLimits.cpp +++ /dev/null @@ -1,222 +0,0 @@ -/* - Copyright 2016 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include -#include -#include -#include - -namespace Opm { - - - - - - MessageLimits::MessageLimits( const TimeMap& timemap ) : - limits( timemap , MLimits()) - { } - - - MessageLimits MessageLimits::serializeObject() - { - MessageLimits result; - result.limits = {{MLimits::serializeObject()}, 2}; - - return result; - } - - - int MessageLimits::getMessagePrintLimit(size_t timestep) const - { - const auto& mlimit = limits.get( timestep ); - return mlimit.message_print_limit; - } - - int MessageLimits::getCommentPrintLimit(size_t timestep) const - { - const auto& mlimit = limits.get( timestep ); - return mlimit.comment_print_limit; - } - - int MessageLimits::getWarningPrintLimit(size_t timestep) const - { - const auto& mlimit = limits.get( timestep ); - return mlimit.warning_print_limit; - } - - int MessageLimits::getProblemPrintLimit(size_t timestep) const - { - const auto& mlimit = limits.get( timestep ); - return mlimit.problem_print_limit; - } - - int MessageLimits::getErrorPrintLimit(size_t timestep) const - { - const auto& mlimit = limits.get( timestep ); - return mlimit.error_print_limit; - } - - int MessageLimits::getBugPrintLimit(size_t timestep) const - { - const auto& mlimit = limits.get( timestep ); - return mlimit.bug_print_limit; - } - - /*-----------------------------------------------------------------*/ - - int MessageLimits::getMessageStopLimit(size_t timestep) const - { - const auto& mlimit = limits.get( timestep ); - return mlimit.message_stop_limit; - } - - int MessageLimits::getCommentStopLimit(size_t timestep) const - { - const auto& mlimit = limits.get( timestep ); - return mlimit.comment_stop_limit; - } - - int MessageLimits::getWarningStopLimit(size_t timestep) const - { - const auto& mlimit = limits.get( timestep ); - return mlimit.warning_stop_limit; - } - - int MessageLimits::getProblemStopLimit(size_t timestep) const - { - const auto& mlimit = limits.get( timestep ); - return mlimit.problem_stop_limit; - } - - int MessageLimits::getErrorStopLimit(size_t timestep) const - { - const auto& mlimit = limits.get( timestep ); - return mlimit.error_stop_limit; - } - - int MessageLimits::getBugStopLimit(size_t timestep) const - { - const auto& mlimit = limits.get( timestep ); - return mlimit.bug_stop_limit; - } - - /*-----------------------------------------------------------------*/ - - void MessageLimits::update(size_t timestep, const MLimits& value) { - if (timestep == 0) - limits.updateInitial( value ); - else - limits.update( timestep , value ); - } - - void MessageLimits::setMessagePrintLimit(size_t timestep, int value) - { - auto mlimit = limits.get( timestep ); - mlimit.message_print_limit = value; - this->update( timestep , mlimit ); - } - - void MessageLimits::setCommentPrintLimit(size_t timestep, int value) - { - auto mlimit = limits.get( timestep ); - mlimit.comment_print_limit = value; - this->update( timestep , mlimit ); - } - - void MessageLimits::setWarningPrintLimit(size_t timestep, int value) - { - auto mlimit = limits.get( timestep ); - mlimit.warning_print_limit = value; - this->update( timestep , mlimit ); - } - - void MessageLimits::setProblemPrintLimit(size_t timestep, int value) - { - auto mlimit = limits.get( timestep ); - mlimit.problem_print_limit = value; - this->update( timestep , mlimit ); - } - - void MessageLimits::setErrorPrintLimit(size_t timestep, int value) - { - auto mlimit = limits.get( timestep ); - mlimit.error_print_limit = value; - this->update( timestep , mlimit ); - } - - void MessageLimits::setBugPrintLimit(size_t timestep, int value) - { - auto mlimit = limits.get( timestep ); - mlimit.bug_print_limit = value; - this->update( timestep , mlimit ); - } - - /*-----------------------------------------------------------------*/ - - void MessageLimits::setMessageStopLimit(size_t timestep, int value) - { - auto mlimit = limits.get( timestep ); - mlimit.message_stop_limit = value; - this->update( timestep , mlimit ); - } - - void MessageLimits::setCommentStopLimit(size_t timestep, int value) - { - auto mlimit = limits.get( timestep ); - mlimit.comment_stop_limit = value; - this->update( timestep , mlimit ); - } - - void MessageLimits::setWarningStopLimit(size_t timestep, int value) - { - auto mlimit = limits.get( timestep ); - mlimit.warning_stop_limit = value; - this->update( timestep , mlimit ); - } - - void MessageLimits::setProblemStopLimit(size_t timestep, int value) - { - auto mlimit = limits.get( timestep ); - mlimit.problem_stop_limit = value; - this->update( timestep , mlimit ); - } - - void MessageLimits::setErrorStopLimit(size_t timestep, int value) - { - auto mlimit = limits.get( timestep ); - mlimit.error_stop_limit = value; - this->update( timestep , mlimit ); - } - - void MessageLimits::setBugStopLimit(size_t timestep, int value) - { - auto mlimit = limits.get( timestep ); - mlimit.bug_stop_limit = value; - this->update( timestep , mlimit ); - } - - bool MessageLimits::operator==(const MessageLimits& data) const - { - return limits == data.limits; - } - - -} - - diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/OilVaporizationProperties.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/OilVaporizationProperties.cpp deleted file mode 100644 index 692205e164..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/OilVaporizationProperties.cpp +++ /dev/null @@ -1,137 +0,0 @@ -/* - Copyright 2016 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ -#include - -#include - -namespace Opm { - - OilVaporizationProperties::OilVaporizationProperties() - { - m_type = OilVaporization::UNDEF; - m_vap1 = m_vap2 = -1.0; - } - - OilVaporizationProperties::OilVaporizationProperties(const size_t numPvtRegionIdx): - m_vap1(-1.0), - m_vap2(-1.0), - m_maxDRSDT(numPvtRegionIdx, -1.0), - m_maxDRSDT_allCells(numPvtRegionIdx), - m_maxDRVDT(numPvtRegionIdx, -1.0) - { } - - OilVaporizationProperties OilVaporizationProperties::serializeObject() - { - OilVaporizationProperties result; - result.m_type = OilVaporization::VAPPARS; - result.m_vap1 = 1.0; - result.m_vap2 = 2.0; - result.m_maxDRSDT = {3.0}; - result.m_maxDRSDT_allCells = {true}; - result.m_maxDRVDT = {5.0}; - - return result; - } - - double OilVaporizationProperties::getMaxDRVDT(const size_t pvtRegionIdx) const{ - if (drvdtActive()){ - return m_maxDRVDT[pvtRegionIdx]; - }else{ - throw std::logic_error("Only valid if DRVDT is active"); - } - } - - double OilVaporizationProperties::getMaxDRSDT(const size_t pvtRegionIdx) const{ - if (drsdtActive()){ - return m_maxDRSDT[pvtRegionIdx]; - }else{ - throw std::logic_error("Only valid if DRSDT is active"); - } - } - - bool OilVaporizationProperties::getOption(const size_t pvtRegionIdx) const{ - if (drsdtActive()){ - return m_maxDRSDT_allCells[pvtRegionIdx]; - }else{ - throw std::logic_error("Only valid if DRSDT is active"); - } - } - - OilVaporizationProperties::OilVaporization OilVaporizationProperties::getType() const{ - return m_type; - } - - void OilVaporizationProperties::updateDRSDT(OilVaporizationProperties& ovp, const std::vector& maximums, const std::vector& options){ - ovp.m_type = OilVaporization::DRDT; - ovp.m_maxDRSDT = maximums; - for (size_t pvtRegionIdx = 0; pvtRegionIdx < options.size(); ++pvtRegionIdx) { - if (options[pvtRegionIdx] == "ALL"){ - ovp.m_maxDRSDT_allCells[pvtRegionIdx] = true; - } else if (options[pvtRegionIdx] == "FREE") { - ovp.m_maxDRSDT_allCells[pvtRegionIdx] = false; - } else { - throw std::invalid_argument("Only ALL or FREE is allowed as option string"); - } - } - } - - void OilVaporizationProperties::updateDRVDT(OilVaporizationProperties& ovp, const std::vector& maximums){ - ovp.m_type = OilVaporization::DRDT; - ovp.m_maxDRVDT = maximums; - } - - void OilVaporizationProperties::updateVAPPARS(OilVaporizationProperties& ovp, double vap1, double vap2){ - ovp.m_type = OilVaporization::VAPPARS; - ovp.m_vap1 = vap1; - ovp.m_vap2 = vap2; - } - - bool OilVaporizationProperties::defined() const { - return this->m_type != OilVaporization::UNDEF; - } - - bool OilVaporizationProperties::drsdtActive() const { - return (m_maxDRSDT[0] >= 0 && m_type == OilVaporization::DRDT); - } - - bool OilVaporizationProperties::drvdtActive() const { - return (m_maxDRVDT[0] >= 0 && m_type == OilVaporization::DRDT); - } - - bool OilVaporizationProperties::operator==( const OilVaporizationProperties& rhs ) const { - return m_type == rhs.m_type && - m_vap1 == rhs.m_vap1 && - m_vap2 == rhs.m_vap2 && - m_maxDRSDT == rhs.m_maxDRSDT && - m_maxDRSDT_allCells == rhs.m_maxDRSDT_allCells && - m_maxDRVDT == rhs.m_maxDRVDT; - } - - bool OilVaporizationProperties::operator!=( const OilVaporizationProperties& rhs ) const { - return !(*this == rhs); - } - - double OilVaporizationProperties::vap1() const { - return m_vap1; - } - - double OilVaporizationProperties::vap2() const { - return m_vap2; - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/RFTConfig.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/RFTConfig.cpp deleted file mode 100644 index 8450feffad..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/RFTConfig.cpp +++ /dev/null @@ -1,356 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include - -#include -#include -#include - -namespace Opm { - -RFTConfig::RFTConfig() - : tm{} - , first_rft_event(tm.size()) - , well_open_rft_time{false, 0} -{ -} - -RFTConfig::RFTConfig(const TimeMap& time_map) : - tm(time_map), - first_rft_event(tm.size()), - well_open_rft_time{false, 0} -{ -} - -RFTConfig RFTConfig::serializeObject() -{ - RFTConfig result; - result.tm = TimeMap::serializeObject(); - result.first_rft_event = 1; - result.well_open_rft_time = {true, 2}; - result.well_open_rft_name = {{"test1", 3}}; - result.well_open = {{"test2", 4}}; - result.rft_config = {{"test3", {{{RFT::TIMESTEP, 5}}, 6}}}; - result.plt_config = {{"test3", {{{PLT::REPT, 7}}, 8}}}; - - return result; -} - -bool RFTConfig::rft(const std::string& well_name, std::size_t report_step) const { - if (report_step >= this->tm.size()) - throw std::invalid_argument("Invalid report step " + std::to_string(report_step)); - - if (this->outputRftAtWellopen(this->well_open.find(well_name), report_step)) - return true; - - auto cfg = this->rft_config.find(well_name); - if (cfg == this->rft_config.end()) - return false; - - const auto& rft_pair = cfg->second[report_step]; - if (rft_pair.first == RFT::YES) - return (rft_pair.second == report_step); - - if (rft_pair.first == RFT::NO) - return false; - - if (rft_pair.first == RFT::REPT) - return true; - - if (rft_pair.first == RFT::TIMESTEP) - return true; - - return false; -} - -bool RFTConfig::plt(const std::string& well_name, std::size_t report_step) const { - if (report_step >= this->tm.size()) - throw std::invalid_argument("Invalid "); - - auto cfg = this->plt_config.find(well_name); - if (cfg == this->plt_config.end()) - return false; - - const auto& plt_pair = cfg->second[report_step]; - if (plt_pair.first == PLT::YES) - return (plt_pair.second == report_step); - - if (plt_pair.first == PLT::NO) - return false; - - if (plt_pair.first == PLT::REPT) - return true; - - if (plt_pair.first == PLT::TIMESTEP) - return true; - - return false; -} - -template -void RFTConfig::updateConfig(const std::string& well_name, - const std::size_t report_step, - const Value value, - ConfigMap& cfgmap) -{ - auto cfg = cfgmap.find(well_name); - if (cfg == cfgmap.end()) { - auto state = DynamicState> { - this->tm, std::make_pair(Value::NO, 0) - }; - - auto stat = cfgmap.emplace(well_name, std::move(state)); - if (! stat.second) - return; - - cfg = stat.first; - } - - cfg->second.update(report_step, std::make_pair(value, report_step)); -} - -void RFTConfig::updateRFT(const std::string& well_name, std::size_t report_step, RFT value) { - if (value == RFT::FOPN) { - this->setWellOpenRFT(well_name, report_step); - - auto wo = this->well_open.find(well_name); - if (wo != this->well_open.end()) - // New candidate first RFT event time is 'report_step' if - // well is already open, well's open event time otherwise. - this->updateFirst(std::max(report_step, wo->second)); - } else { - this->updateConfig(well_name, report_step, value, this->rft_config); - - if (value != RFT::NO) - // YES, REPT, or TIMESTEP. - this->updateFirstIfNotShut(well_name, report_step); - } -} - -void RFTConfig::updatePLT(const std::string& well_name, std::size_t report_step, PLT value) { - this->updateConfig(well_name, report_step, value, this->plt_config); - - if (value != PLT::NO) - // YES, REPT, or TIMESTEP. - this->updateFirstIfNotShut(well_name, report_step); -} - - -bool RFTConfig::getWellOpenRFT(const std::string& well_name, std::size_t report_step) const { - if (this->well_open_rft_name.count(well_name) > 0) - return true; - - return (this->well_open_rft_time.first && this->well_open_rft_time.second <= report_step); -} - - -void RFTConfig::setWellOpenRFT(std::size_t report_step) { - this->well_open_rft_time.second = this->well_open_rft_time.first - ? std::min(this->well_open_rft_time.second, report_step) - : report_step; - - this->well_open_rft_time.first = true; - - this->updateFirst(this->firstWellopenStepNotBefore(report_step)); -} - -void RFTConfig::setWellOpenRFT(const std::string& well_name) { - this->setWellOpenRFT(well_name, std::size_t(0)); -} - - -void RFTConfig::addWellOpen(const std::string& well_name, std::size_t report_step) { - // Implicitly handles 'well_name' already being in the map. - this->well_open.emplace(well_name, report_step); -} - -bool RFTConfig::active(std::size_t report_step) const { - for (auto well = this->well_open.begin(), end = this->well_open.end(); well != end; ++well) { - if (this->outputRftAtWellopen(well, report_step)) - return true; - } - - for (const auto& rft_pair : this->rft_config) { - if (this->rft(rft_pair.first, report_step)) - return true; - } - - for (const auto& plt_pair : this->plt_config) { - if (this->rft(plt_pair.first, report_step)) - return true; - } - - return false; -} - -std::string RFTConfig::RFT2String(RFT enumValue) { - switch (enumValue) { - case RFT::YES: - return "YES"; - case RFT::REPT: - return "REPT"; - case RFT::TIMESTEP: - return "TIMESTEP"; - case RFT::FOPN: - return "FOPN"; - case RFT::NO: - return "NO"; - default: - throw std::invalid_argument("unhandled enum value"); - } -} - -RFTConfig::RFT RFTConfig::RFTFromString(const std::string& stringValue) { - if (stringValue == "YES") - return RFT::YES; - else if (stringValue == "REPT") - return RFT::REPT; - else if (stringValue == "TIMESTEP") - return RFT::TIMESTEP; - else if (stringValue == "FOPN") - return RFT::FOPN; - else if (stringValue == "NO") - return RFT::NO; - else - throw std::invalid_argument("Unknown enum state string: " + stringValue); -} - -std::string RFTConfig::PLT2String(PLT enumValue) { - switch (enumValue) { - case PLT::YES: - return "YES"; - case PLT::REPT: - return "REPT"; - case PLT::TIMESTEP: - return "TIMESTEP"; - case PLT::NO: - return "NO"; - default: - throw std::invalid_argument("unhandled enum value"); - } -} - -RFTConfig::PLT RFTConfig::PLTFromString( const std::string& stringValue ){ - if (stringValue == "YES") - return PLT::YES; - else if (stringValue == "REPT") - return PLT::REPT; - else if (stringValue == "TIMESTEP") - return PLT::TIMESTEP; - else if (stringValue == "NO") - return PLT::NO; - else - throw std::invalid_argument("Unknown enum state string: " + stringValue ); -} - -const TimeMap& RFTConfig::timeMap() const { - return tm; -} - -bool RFTConfig::operator==(const RFTConfig& data) const { - return this->tm == data.tm && - this->first_rft_event == data.first_rft_event && - this->well_open_rft_time == data.well_open_rft_time && - this->well_open_rft_name == data.well_open_rft_name && - this->well_open == data.well_open && - this->rft_config == data.rft_config && - this->plt_config == data.plt_config; -} - -bool RFTConfig::outputRftAtWellopen(WellOpenTimeMap::const_iterator well_iter, const std::size_t report_step) const { - assert ((report_step < this->tm.size()) && "Internal logic error for report step"); - - if (well_iter == this->well_open.end()) - return false; - - if (report_step < this->first_rft_event) - return false; - - if (this->well_open_rft_time.first && this->well_open_rft_time.second <= report_step) { - // A general "Output RFT when the well is opened" has been - // configured with WRFT. Output RFT data if the well opens - // at this report step. - if (well_iter->second == report_step) - return true; - } - - auto rft_open = this->well_open_rft_name.find(well_iter->first); - if (rft_open == this->well_open_rft_name.end()) - // No FOPN event configured for this well (i.e., well_iter->first). - return false; - - // An FOPN setting has been configured with the WRFTPLT keyword. - // Output RFT data if we're at the FOPN event time and the well is - // already open or if we're after FOPN event time and the well - // opens at this step. - return ((report_step == rft_open->second) && (well_iter->second <= report_step)) - || ((report_step > rft_open->second) && (well_iter->second == report_step)); -} - -std::size_t RFTConfig::firstWellopenStepNotBefore(const std::size_t report_step) const { - if (well_open.empty()) - // No well-open events at all (unexpected). - return this->tm.size(); - - using VT = WellOpenTimeMap::value_type; - - auto event = std::min_element(this->well_open.begin(), this->well_open.end(), - [report_step](const VT& elem, const VT& low) -> bool - { - if (elem.second < report_step) - return false; - - return elem.second < low.second; - }); - - if (event->second < report_step) - // All well-open events happen *before* 'report_step'. - return this->tm.size(); - - return event->second; -} - -void RFTConfig::updateFirstIfNotShut(const std::string& well_name, const std::size_t report_step) { - auto wo = this->well_open.find(well_name); - - if ((wo != this->well_open.end()) && (wo->second <= report_step)) - // Well opens no later than 'report_step'. New candidate - // first RFT output event is 'report_step'. - this->updateFirst(report_step); -} - -void RFTConfig::updateFirst(const std::size_t report_step) { - this->first_rft_event = std::min(this->first_rft_event, report_step); -} - -void RFTConfig::setWellOpenRFT(const std::string& well_name, const std::size_t report_step) -{ - auto pos = this->well_open_rft_name.find(well_name); - if (pos == this->well_open_rft_name.end()) { - auto stat = this->well_open_rft_name.emplace(well_name, this->tm.size()); - if (! stat.second) - return; - - pos = stat.first; - } - - pos->second = std::min(pos->second, report_step); -} -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/RPTConfig.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/RPTConfig.cpp deleted file mode 100644 index 0f667c3e9c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/RPTConfig.cpp +++ /dev/null @@ -1,61 +0,0 @@ -/* - Copyright 2020 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include - -#include - -namespace { - - std::pair parse_mnemonic(const std::string& mnemonic) { - const auto pivot { mnemonic.find('=') } ; - - if (pivot == std::string::npos) { - return { mnemonic, 1 } ; - } else { - const auto int_value { std::stoi(mnemonic.substr(pivot + 1)) } ; - - if (!(int_value >= 0)) { - OPM_THROW(std::invalid_argument, "RPTSCHED - " + mnemonic + " - mnemonic value must be an integer greater than 1"); - } - - return { mnemonic.substr(0, pivot), int_value } ; - } - } - -} - -Opm::RPTConfig::RPTConfig(const DeckKeyword& keyword) : - std::unordered_map {} -{ - const auto& mnemonics { keyword.getStringData() } ; - for (const auto& mnemonic : mnemonics) { - if (mnemonic == "NOTHING") { - clear(); - } else { - emplace(parse_mnemonic(mnemonic)); - } - } -} - -#if __cplusplus <= 201703L -bool Opm::RPTConfig::contains(const std::string& key) const { - return find(key) != end(); -} -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Schedule.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Schedule.cpp deleted file mode 100644 index 41cc1e97b3..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Schedule.cpp +++ /dev/null @@ -1,3359 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#ifdef _WIN32 -#include "cross-platform/windows/Substitutes.hpp" -#else -#include -#endif - -#include -#include -#include -#include -#include - -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "Well/injection.hpp" - -namespace Opm { - - -namespace { - - bool name_match(const std::string& pattern, const std::string& name) { - int flags = 0; - return (fnmatch(pattern.c_str(), name.c_str(), flags) == 0); - } - - - /* - The function trim_wgname() is used to trim the leading and trailing spaces - away from the group and well arguments given in the WELSPECS and GRUPTREE - keywords. If the deck argument contains a leading or trailing space that is - treated as an input error, and the action taken is regulated by the setting - ParseContext::PARSE_WGNAME_SPACE. - - Observe that the spaces are trimmed *unconditionally* - i.e. if the - ParseContext::PARSE_WGNAME_SPACE setting is set to InputError::IGNORE that - means that we do not inform the user about "our fix", but it is *not* possible - to configure the parser to leave the spaces intact. - */ - - std::string trim_wgname(const DeckKeyword& keyword, const std::string& wgname_arg, const ParseContext& parseContext, ErrorGuard errors) { - std::string wgname = trim_copy(wgname_arg); - if (wgname != wgname_arg) { - const auto& location = keyword.location(); - std::string msg = "Illegal space: \"" + wgname_arg + "\" found when defining WELL/GROUP in keyword: " + keyword.name() + " at " + location.filename + ":" + std::to_string(location.lineno); - parseContext.handleError(ParseContext::PARSE_WGNAME_SPACE, msg, errors); - } - return wgname; - } - - -std::pair restart_info(const RestartIO::RstState * rst) -{ - if (!rst) - return std::make_pair(std::time_t{0}, std::size_t{0}); - else - return rst->header.restart_info(); -} -} - - Schedule::Schedule( const Deck& deck, - const EclipseGrid& grid, - const FieldPropsManager& fp, - const Runspec &runspec, - const ParseContext& parseContext, - ErrorGuard& errors, - [[maybe_unused]] std::shared_ptr python, - const RestartIO::RstState * rst) : - python_handle(python), - m_timeMap( deck , restart_info( rst )), - m_oilvaporizationproperties( this->m_timeMap, OilVaporizationProperties(runspec.tabdims().getNumPVTTables()) ), - m_events( this->m_timeMap ), - m_modifierDeck( this->m_timeMap, Deck{} ), - m_tuning( this->m_timeMap, Tuning() ), - m_messageLimits( this->m_timeMap ), - m_runspec( runspec ), - wtest_config(this->m_timeMap, std::make_shared() ), - wlist_manager( this->m_timeMap, std::make_shared()), - udq_config(this->m_timeMap, std::make_shared(deck)), - udq_active(this->m_timeMap, std::make_shared()), - guide_rate_config(this->m_timeMap, std::make_shared()), - gconsale(this->m_timeMap, std::make_shared() ), - gconsump(this->m_timeMap, std::make_shared() ), - global_whistctl_mode(this->m_timeMap, Well::ProducerCMode::CMODE_UNDEFINED), - m_actions(this->m_timeMap, std::make_shared()), - rft_config(this->m_timeMap), - m_nupcol(this->m_timeMap, ParserKeywords::NUPCOL::NUM_ITER::defaultValue), - restart_config(m_timeMap, deck, parseContext, errors), - rpt_config(this->m_timeMap, std::make_shared()) - { - addGroup( "FIELD", 0, deck.getActiveUnitSystem()); - if (rst) - this->load_rst(*rst, grid, fp, deck.getActiveUnitSystem()); - - /* - We can have the MESSAGES keyword anywhere in the deck, we - must therefor also scan the part of the deck prior to the - SCHEDULE section to initialize valid MessageLimits object. - */ - for (size_t keywordIdx = 0; keywordIdx < deck.size(); ++keywordIdx) { - const auto& keyword = deck.getKeyword(keywordIdx); - if (keyword.name() == "SCHEDULE") - break; - - if (keyword.name() == "MESSAGES") - handleMESSAGES(keyword, 0); - } - - if (DeckSection::hasSCHEDULE(deck)) - iterateScheduleSection( python, deck.getInputPath(), parseContext, errors, SCHEDULESection( deck ), grid, fp); - } - - - template - Schedule::Schedule( const Deck& deck, - const EclipseGrid& grid, - const FieldPropsManager& fp, - const Runspec &runspec, - const ParseContext& parseContext, - T&& errors, - std::shared_ptr python, - const RestartIO::RstState * rst) : - Schedule(deck, grid, fp, runspec, parseContext, errors, python, rst) - {} - - - Schedule::Schedule( const Deck& deck, - const EclipseGrid& grid, - const FieldPropsManager& fp, - const Runspec &runspec, - std::shared_ptr python, - const RestartIO::RstState * rst) : - Schedule(deck, grid, fp, runspec, ParseContext(), ErrorGuard(), python, rst) - {} - - -Schedule::Schedule(const Deck& deck, const EclipseState& es, const ParseContext& parse_context, ErrorGuard& errors, std::shared_ptr python, const RestartIO::RstState * rst) : - Schedule(deck, - es.getInputGrid(), - es.fieldProps(), - es.runspec(), - parse_context, - errors, - python, - rst) - {} - - - - template - Schedule::Schedule(const Deck& deck, const EclipseState& es, const ParseContext& parse_context, T&& errors, std::shared_ptr python, const RestartIO::RstState * rst) : - Schedule(deck, - es.getInputGrid(), - es.fieldProps(), - es.runspec(), - parse_context, - errors, - python, - rst) - {} - - - Schedule::Schedule(const Deck& deck, const EclipseState& es, std::shared_ptr python, const RestartIO::RstState * rst) : - Schedule(deck, es, ParseContext(), ErrorGuard(), python, rst) - {} - - - Schedule::Schedule(const Deck& deck, const EclipseState& es, const RestartIO::RstState * rst) : - Schedule(deck, es, ParseContext(), ErrorGuard(), std::make_shared(), rst) - {} - - - /* - In general the serializeObject() instances are used as targets for - deserialization, i.e. the serialized buffer is unpacked into this - instance. However the Schedule object is a top level object, and the - simulator will instantiate and manage a Schedule object to unpack into, so - the instance created here is only for testing. - */ - Schedule Schedule::serializeObject() - { - auto python = std::make_shared(Python::Enable::OFF); - Schedule result(python); - - result.m_timeMap = TimeMap::serializeObject(); - result.wells_static.insert({"test1", {{std::make_shared(Opm::Well::serializeObject())},1}}); - result.groups.insert({"test2", {{std::make_shared(Opm::Group::serializeObject())},1}}); - result.m_oilvaporizationproperties = {{Opm::OilVaporizationProperties::serializeObject()},1}; - result.m_events = Events::serializeObject(); - result.m_modifierDeck = DynamicVector({Deck::serializeObject()}); - result.m_tuning = {{Tuning::serializeObject()}, 1}; - result.m_messageLimits = MessageLimits::serializeObject(); - result.m_runspec = Runspec::serializeObject(); - result.vfpprod_tables = {{1, {{std::make_shared(VFPProdTable::serializeObject())}, 1}}}; - result.vfpinj_tables = {{2, {{std::make_shared(VFPInjTable::serializeObject())}, 1}}}; - result.wtest_config = {{std::make_shared(WellTestConfig::serializeObject())}, 1}; - result.wlist_manager = {{std::make_shared(WListManager::serializeObject())}, 1}; - result.udq_config = {{std::make_shared(UDQConfig::serializeObject())}, 1}; - result.udq_active = {{std::make_shared(UDQActive::serializeObject())}, 1}; - result.guide_rate_config = {{std::make_shared(GuideRateConfig::serializeObject())}, 1}; - result.gconsale = {{std::make_shared(GConSale::serializeObject())}, 1}; - result.gconsump = {{std::make_shared(GConSump::serializeObject())}, 1}; - result.global_whistctl_mode = {{Well::ProducerCMode::CRAT}, 1}; - result.m_actions = {{std::make_shared(Action::Actions::serializeObject())}, 1}; - result.rft_config = RFTConfig::serializeObject(); - result.m_nupcol = {{1}, 1}; - result.restart_config = RestartConfig::serializeObject(); - result.wellgroup_events = {{"test", Events::serializeObject()}}; - - return result; - } - - - std::time_t Schedule::getStartTime() const { - return this->posixStartTime( ); - } - - time_t Schedule::posixStartTime() const { - return m_timeMap.getStartTime( 0 ); - } - - time_t Schedule::posixEndTime() const { - return this->m_timeMap.getEndTime(); - } - - - void Schedule::handleKeyword(std::shared_ptr python, - const std::string& input_path, - size_t currentStep, - const SCHEDULESection& section, - size_t keywordIdx, - const DeckKeyword& keyword, - const ParseContext& parseContext, - ErrorGuard& errors, - const EclipseGrid& grid, - const FieldPropsManager& fp, - const UnitSystem& unit_system, - std::vector >& rftProperties) { - /* - geoModifiers is a list of geo modifiers which can be found in the schedule - section. This is only partly supported, support is indicated by the bool - value. The keywords which are supported will be assembled in a per-timestep - 'minideck', whereas ParseContext::UNSUPPORTED_SCHEDULE_GEO_MODIFIER will be - consulted for the others. - */ - - const std::map geoModifiers = {{"MULTFLT" , true}, - {"MULTPV" , false}, - {"MULTX" , false}, - {"MULTX-" , false}, - {"MULTY" , false}, - {"MULTY-" , false}, - {"MULTZ" , false}, - {"MULTZ-" , false}, - {"MULTREGT" , false}, - {"MULTR" , false}, - {"MULTR-" , false}, - {"MULTSIG" , false}, - {"MULTSIGV" , false}, - {"MULTTHT" , false}, - {"MULTTHT-" , false}}; - - if (keyword.name() == "UDQ") - handleUDQ(keyword, currentStep); - - else if (keyword.name() == "WLIST") - handleWLIST( keyword, currentStep ); - - else if (keyword.name() == "WELSPECS") - handleWELSPECS( section, keywordIdx, currentStep, unit_system, parseContext, errors); - - else if (keyword.name() == "WHISTCTL") - handleWHISTCTL(keyword, currentStep, parseContext, errors); - - else if (keyword.name() == "WCONHIST") - handleWCONHIST(keyword, currentStep, parseContext, errors); - - else if (keyword.name() == "WCONPROD") - handleWCONPROD(keyword, currentStep, parseContext, errors); - - else if (keyword.name() == "WCONINJE") - handleWCONINJE(keyword, currentStep, parseContext, errors); - - else if (keyword.name() == "WFOAM") - handleWFOAM(keyword, currentStep, parseContext, errors); - - else if (keyword.name() == "WPOLYMER") - handleWPOLYMER(keyword, currentStep, parseContext, errors); - - else if (keyword.name() == "WSALT") - handleWSALT(keyword, currentStep, parseContext, errors); - - else if (keyword.name() == "WSOLVENT") - handleWSOLVENT(keyword, currentStep, parseContext, errors); - - else if (keyword.name() == "WTRACER") - handleWTRACER(keyword, currentStep, parseContext, errors); - - else if (keyword.name() == "WTEST") - handleWTEST(keyword, currentStep, parseContext, errors); - - else if (keyword.name() == "WTEMP") - handleWTEMP(keyword, currentStep, parseContext, errors); - - else if (keyword.name() == "WPMITAB") - handleWPMITAB(keyword, currentStep, parseContext, errors); - - else if (keyword.name() == "WSKPTAB") - handleWSKPTAB(keyword, currentStep, parseContext, errors); - - else if (keyword.name() == "WINJTEMP") - handleWINJTEMP(keyword, currentStep, parseContext, errors); - - else if (keyword.name() == "WCONINJH") - handleWCONINJH(keyword, currentStep, parseContext, errors); - - else if (keyword.name() == "WGRUPCON") - handleWGRUPCON(keyword, currentStep); - - else if (keyword.name() == "COMPDAT") - handleCOMPDAT(keyword, currentStep, grid, fp, parseContext, errors); - - else if (keyword.name() == "WELSEGS") - handleWELSEGS(keyword, currentStep); - - else if (keyword.name() == "COMPSEGS") - handleCOMPSEGS(keyword, currentStep, grid, parseContext, errors); - - else if (keyword.name() == "WSEGSICD") - handleWSEGSICD(keyword, currentStep); - - else if (keyword.name() == "WSEGVALV") - handleWSEGVALV(keyword, currentStep); //, parseContext, errors); - - else if (keyword.name() == "WELOPEN") - handleWELOPEN(keyword, currentStep, parseContext, errors); - - else if (keyword.name() == "WELTARG") - handleWELTARG(section, keyword, currentStep, parseContext, errors); - - else if (keyword.name() == "GRUPTREE") - handleGRUPTREE(keyword, currentStep, unit_system, parseContext, errors); - - else if (keyword.name() == "GRUPNET") - handleGRUPNET(keyword, currentStep, unit_system); - - else if (keyword.name() == "GCONINJE") - handleGCONINJE(keyword, currentStep, parseContext, errors); - - else if (keyword.name() == "GCONPROD") - handleGCONPROD(keyword, currentStep, parseContext, errors); - - else if (keyword.name() == "GEFAC") - handleGEFAC(keyword, currentStep, parseContext, errors); - - else if (keyword.name() == "GCONSALE") - handleGCONSALE(keyword, currentStep, unit_system); - - else if (keyword.name() == "GCONSUMP") - handleGCONSUMP(keyword, currentStep, unit_system); - - else if (keyword.name() == "GUIDERAT") - handleGUIDERAT(keyword, currentStep); - - else if (keyword.name() == "LINCOM") - handleLINCOM(keyword, currentStep); - - else if (keyword.name() == "TUNING") - handleTUNING(keyword, currentStep); - - else if (keyword.name() == "WRFT") - rftProperties.push_back( std::make_pair( &keyword , currentStep )); - - else if (keyword.name() == "WRFTPLT") - rftProperties.push_back( std::make_pair( &keyword , currentStep )); - - else if (keyword.name() == "WPIMULT") - handleWPIMULT(keyword, currentStep); - - else if (keyword.name() == "COMPORD") - handleCOMPORD(parseContext, errors , keyword, currentStep); - - else if (keyword.name() == "COMPLUMP") - handleCOMPLUMP(keyword, currentStep); - - else if (keyword.name() == "DRSDT") - handleDRSDT(keyword, currentStep); - - else if (keyword.name() == "DRVDT") - handleDRVDT(keyword, currentStep); - - else if (keyword.name() == "DRSDTR") - handleDRSDTR(keyword, currentStep); - - else if (keyword.name() == "DRVDTR") - handleDRVDTR(keyword, currentStep); - - else if (keyword.name() == "VAPPARS") - handleVAPPARS(keyword, currentStep); - - else if (keyword.name() == "WECON") - handleWECON(keyword, currentStep, parseContext, errors); - - else if (keyword.name() == "MESSAGES") - handleMESSAGES(keyword, currentStep); - - else if (keyword.name() == "RPTSCHED") - handleRPTSCHED(keyword, currentStep); - - else if (keyword.name() == "WEFAC") - handleWEFAC(keyword, currentStep, parseContext, errors); - - else if (keyword.name() == "VFPINJ") - handleVFPINJ(keyword, unit_system, currentStep); - - else if (keyword.name() == "VFPPROD") - handleVFPPROD(keyword, unit_system, currentStep); - - else if (keyword.name() == "NUPCOL") - handleNUPCOL(keyword, currentStep); - - else if (keyword.name() == "PYACTION") - handlePYACTION(python, input_path, keyword, currentStep); - - else if (geoModifiers.find( keyword.name() ) != geoModifiers.end()) { - bool supported = geoModifiers.at( keyword.name() ); - if (supported) { - this->m_modifierDeck[ currentStep ].addKeyword( keyword ); - m_events.addEvent( ScheduleEvents::GEO_MODIFIER , currentStep); - } else { - std::string msg = "OPM does not support grid property modifier " + keyword.name() + " in the Schedule section. Error at report: " + std::to_string( currentStep ); - parseContext.handleError( ParseContext::UNSUPPORTED_SCHEDULE_GEO_MODIFIER , msg, errors ); - } - } - } - - - void Schedule::iterateScheduleSection(std::shared_ptr python, const std::string& input_path, const ParseContext& parseContext , ErrorGuard& errors, const SCHEDULESection& section , const EclipseGrid& grid, - const FieldPropsManager& fp) { - const auto& unit_system = section.unitSystem(); - std::vector > rftProperties; - size_t keywordIdx = 0; - /* - The keywords in the skiprest_whitelist set are loaded from the - SCHEDULE section even though the SKIPREST keyword is in action. The - full list includes some additional keywords which we do not support at - all. - */ - std::unordered_set skiprest_whitelist = {"VFPPROD", "VFPINJ", "RPTSCHED", "RPTRST", "TUNING", "MESSAGES"}; - - size_t currentStep; - if (this->m_timeMap.skiprest()) - currentStep = 0; - else - currentStep = this->m_timeMap.restart_offset(); - - while (true) { - const auto& keyword = section.getKeyword(keywordIdx); - if (keyword.name() == "ACTIONX") { - Action::ActionX action(keyword, this->m_timeMap.getStartTime(currentStep + 1)); - while (true) { - keywordIdx++; - if (keywordIdx == section.size()) - throw std::invalid_argument("Invalid ACTIONX section - missing ENDACTIO"); - - const auto& action_keyword = section.getKeyword(keywordIdx); - if (action_keyword.name() == "ENDACTIO") - break; - - if (Action::ActionX::valid_keyword(action_keyword.name())) - action.addKeyword(action_keyword); - else { - std::string msg = "The keyword " + action_keyword.name() + " is not supported in a ACTIONX block."; - parseContext.handleError( ParseContext::ACTIONX_ILLEGAL_KEYWORD, msg, errors); - } - } - this->addACTIONX(action, currentStep); - } - - else if (keyword.name() == "DATES") { - checkIfAllConnectionsIsShut(currentStep); - currentStep += keyword.size(); - } - - else if (keyword.name() == "TSTEP") { - checkIfAllConnectionsIsShut(currentStep); - currentStep += keyword.getRecord(0).getItem(0).data_size(); - } - - else { - if (currentStep >= this->m_timeMap.restart_offset() || skiprest_whitelist.count(keyword.name())) - this->handleKeyword(python, input_path, currentStep, section, keywordIdx, keyword, parseContext, errors, grid, fp, unit_system, rftProperties); - else - OpmLog::info("Skipping keyword: " + keyword.name() + " while loading SCHEDULE section"); - } - - keywordIdx++; - if (keywordIdx == section.size()) - break; - } - - checkIfAllConnectionsIsShut(currentStep); - - for (auto rftPair = rftProperties.begin(); rftPair != rftProperties.end(); ++rftPair) { - const DeckKeyword& keyword = *rftPair->first; - size_t timeStep = rftPair->second; - if (keyword.name() == "WRFT") - handleWRFT(keyword, timeStep); - - if (keyword.name() == "WRFTPLT") - handleWRFTPLT(keyword, timeStep); - } - - checkUnhandledKeywords(section); - } - - - void Schedule::addACTIONX(const Action::ActionX& action, std::size_t currentStep) { - auto new_actions = std::make_shared( this->actions(currentStep) ); - new_actions->add(action); - this->m_actions.update(currentStep, new_actions); - } - - - void Schedule::checkUnhandledKeywords(const SCHEDULESection& /*section*/) const - { - } - - - - void Schedule::handleWHISTCTL(const DeckKeyword& keyword, std::size_t currentStep, const ParseContext& parseContext, ErrorGuard& errors) { - const auto& record = keyword.getRecord(0); - const std::string& cmodeString = record.getItem("CMODE").getTrimmedString(0); - const auto controlMode = Well::ProducerCModeFromString( cmodeString ); - - if (controlMode != Well::ProducerCMode::NONE) { - if (!Well::WellProductionProperties::effectiveHistoryProductionControl(controlMode) ) { - std::string msg = "The WHISTCTL keyword specifies an un-supported control mode " + cmodeString - + ", which makes WHISTCTL keyword not affect the simulation at all"; - OpmLog::warning(msg); - } else - this->global_whistctl_mode.update(currentStep, controlMode); - } - - const std::string bhp_terminate = record.getItem("BPH_TERMINATE").getTrimmedString(0); - if (bhp_terminate == "YES") { - std::string msg = "The WHISTCTL keyword does not handle 'YES'. i.e. to terminate the run"; - OpmLog::error(msg); - parseContext.handleError( ParseContext::UNSUPPORTED_TERMINATE_IF_BHP , msg, errors ); - } - - - for (auto& well_pair : this->wells_static) { - auto& dynamic_state = well_pair.second; - auto well2 = std::make_shared(*dynamic_state[currentStep]); - auto prop = std::make_shared(well2->getProductionProperties()); - - if (prop->whistctl_cmode != controlMode) { - prop->whistctl_cmode = controlMode; - well2->updateProduction(prop); - this->updateWell(std::move(well2), currentStep); - } - } - - for (auto& well_pair : this->wells_static) { - auto& dynamic_state = well_pair.second; - auto well2 = std::make_shared(*dynamic_state[currentStep]); - auto prop = std::make_shared(well2->getProductionProperties()); - - if (prop->whistctl_cmode != controlMode) { - prop->whistctl_cmode = controlMode; - well2->updateProduction(prop); - this->updateWell(std::move(well2), currentStep); - } - } - - for (auto& well_pair : this->wells_static) { - auto& dynamic_state = well_pair.second; - auto well2 = std::make_shared(*dynamic_state[currentStep]); - auto prop = std::make_shared(well2->getProductionProperties()); - - if (prop->whistctl_cmode != controlMode) { - prop->whistctl_cmode = controlMode; - well2->updateProduction(prop); - this->updateWell(std::move(well2), currentStep); - } - } - } - - void Schedule::handlePYACTION( std::shared_ptr python, const std::string& input_path, const DeckKeyword& keyword, size_t currentStep) { - if (!python->enabled()) { - //Must have a real Python instance here - to ensure that IMPORT works - const auto& loc = keyword.location(); - OpmLog::warning("This version of flow is built without support for Python. Keyword PYACTION in file: " + loc.filename + " line: " + std::to_string(loc.lineno) + " is ignored."); - return; - } - - using PY = ParserKeywords::PYACTION; - const auto& name = keyword.getRecord(0).getItem().get(0); - const auto& run_count = Action::PyAction::from_string( keyword.getRecord(0).getItem().get(0) ); - const auto& module_arg = keyword.getRecord(1).getItem().get(0); - std::string module; - if (input_path.empty()) - module = module_arg; - else - module = input_path + "/" + module_arg; - - Action::PyAction pyaction(python, name, run_count, module); - auto new_actions = std::make_shared( this->actions(currentStep) ); - new_actions->add(pyaction); - this->m_actions.update(currentStep, new_actions); - } - - void Schedule::handleNUPCOL( const DeckKeyword& keyword, size_t currentStep) { - int nupcol = keyword.getRecord(0).getItem("NUM_ITER").get(0); - if (keyword.getRecord(0).getItem("NUM_ITER").defaultApplied(0)) { - std::string msg = "OPM Flow uses 12 as default NUPCOL value"; - OpmLog::note(msg); - } - - this->m_nupcol.update(currentStep, nupcol); - } - - - void Schedule::handleEXIT(const DeckKeyword& keyword, std::size_t report_step ) { - using ex = ParserKeywords::EXIT; - int status = keyword.getRecord(0).getItem().get(0); - OpmLog::info("Simulation exit with status: " + std::to_string(status) + " requested as part of ACTIONX at report_step: " + std::to_string(report_step)); - this->exit_status = status; - } - - - /* - The COMPORD keyword is handled together with the WELSPECS keyword in the - handleWELSPECS function. - */ - void Schedule::handleCOMPORD(const ParseContext& parseContext, ErrorGuard& errors, const DeckKeyword& compordKeyword, size_t /* currentStep */) { - for (const auto& record : compordKeyword) { - const auto& methodItem = record.getItem(); - if ((methodItem.get< std::string >(0) != "TRACK") && (methodItem.get< std::string >(0) != "INPUT")) { - std::string msg = "The COMPORD keyword only handles 'TRACK' or 'INPUT' order."; - OpmLog::error(msg); - parseContext.handleError( ParseContext::UNSUPPORTED_COMPORD_TYPE , msg, errors ); - } - } - } - - void Schedule::handleVFPINJ(const DeckKeyword& vfpinjKeyword, const UnitSystem& unit_system, size_t currentStep) { - std::shared_ptr table = std::make_shared(vfpinjKeyword, unit_system); - int table_id = table->getTableNum(); - - const auto iter = vfpinj_tables.find(table_id); - if (iter == vfpinj_tables.end()) { - std::pair > > pair = std::make_pair(table_id, DynamicState >(this->m_timeMap, nullptr)); - vfpinj_tables.insert( pair ); - } - auto & table_state = vfpinj_tables.at(table_id); - table_state.update(currentStep, table); - this->m_events.addEvent( ScheduleEvents::VFPINJ_UPDATE , currentStep); - } - - void Schedule::handleVFPPROD(const DeckKeyword& vfpprodKeyword, const UnitSystem& unit_system, size_t currentStep) { - std::shared_ptr table = std::make_shared(vfpprodKeyword, unit_system); - int table_id = table->getTableNum(); - - const auto iter = vfpprod_tables.find(table_id); - if (iter == vfpprod_tables.end()) { - std::pair > > pair = std::make_pair(table_id, DynamicState >(this->m_timeMap, nullptr)); - vfpprod_tables.insert( pair ); - } - auto & table_state = vfpprod_tables.at(table_id); - table_state.update(currentStep, table); - this->m_events.addEvent( ScheduleEvents::VFPPROD_UPDATE , currentStep); - } - - - void Schedule::handleWELSPECS( const SCHEDULESection& section, - size_t index, - size_t currentStep, - const UnitSystem& unit_system, - const ParseContext& parseContext, - ErrorGuard& errors) { - const auto COMPORD_in_timestep = [&]() -> const DeckKeyword* { - auto itr = section.begin() + index; - for( ; itr != section.end(); ++itr ) { - if( itr->name() == "DATES" ) return nullptr; - if( itr->name() == "TSTEP" ) return nullptr; - if( itr->name() == "COMPORD" ) return std::addressof( *itr ); - } - - return nullptr; - }; - - const auto& keyword = section.getKeyword( index ); - using WS = ParserKeywords::WELSPECS; - - for (size_t recordNr = 0; recordNr < keyword.size(); recordNr++) { - const auto& record = keyword.getRecord(recordNr); - const std::string& wellName = trim_wgname(keyword, record.getItem().get(0), parseContext, errors); - const std::string& groupName = trim_wgname(keyword, record.getItem().get(0), parseContext, errors); - auto density_calc_type = record.getItem().get(0); - auto fip_region_number = record.getItem().get(0); - - if (fip_region_number != 0) { - const auto& location = keyword.location(); - std::string msg = "The FIP_REGION item in the WELSPECS keyword in file: " + location.filename + " line: " + std::to_string(location.lineno) + " using default value: " + std::to_string(WS::FIP_REGION::defaultValue); - OpmLog::warning(msg); - } - - if (density_calc_type != "SEG") { - const auto& location = keyword.location(); - std::string msg = "The DENSITY_CALC item in the WELSPECS keyword in file: " + location.filename + " line: " + std::to_string(location.lineno) + " using default value: " + WS::DENSITY_CALC::defaultValue; - OpmLog::warning(msg); - } - - if (!hasGroup(groupName)) - addGroup(groupName , currentStep, unit_system); - - if (!hasWell(wellName)) { - auto wellConnectionOrder = Connection::Order::TRACK; - - if( const auto* compordp = COMPORD_in_timestep() ) { - const auto& compord = *compordp; - - for (size_t compordRecordNr = 0; compordRecordNr < compord.size(); compordRecordNr++) { - const auto& compordRecord = compord.getRecord(compordRecordNr); - - const std::string& wellNamePattern = compordRecord.getItem(0).getTrimmedString(0); - if (Well::wellNameInWellNamePattern(wellName, wellNamePattern)) { - const std::string& compordString = compordRecord.getItem(1).getTrimmedString(0); - wellConnectionOrder = Connection::OrderFromString(compordString); - } - } - } - this->addWell(wellName, record, currentStep, wellConnectionOrder, unit_system); - this->addWellToGroup(groupName, wellName, currentStep); - } else { - const auto headI = record.getItem().get< int >( 0 ) - 1; - const auto headJ = record.getItem().get< int >( 0 ) - 1; - const auto& refDepthItem = record.getItem(); - int pvt_table = record.getItem().get(0); - double drainageRadius = record.getItem().getSIDouble(0); - double refDepth = refDepthItem.hasValue( 0 ) - ? refDepthItem.getSIDouble( 0 ) - : -1.0; - { - bool update = false; - auto well2 = std::shared_ptr(new Well( this->getWell(wellName, currentStep))); - update = well2->updateHead(headI, headJ); - update |= well2->updateRefDepth(refDepth); - update |= well2->updateDrainageRadius(drainageRadius); - update |= well2->updatePVTTable(pvt_table); - - if (update) { - this->updateWell(std::move(well2), currentStep); - this->addWellGroupEvent(wellName, ScheduleEvents::WELL_WELSPECS_UPDATE, currentStep); - } - } - } - - this->addWellToGroup(groupName, wellName, currentStep); - } - } - - void Schedule::handleVAPPARS( const DeckKeyword& keyword, size_t currentStep){ - for( const auto& record : keyword ) { - double vap1 = record.getItem("OIL_VAP_PROPENSITY").get< double >(0); - double vap2 = record.getItem("OIL_DENSITY_PROPENSITY").get< double >(0); - OilVaporizationProperties ovp = this->m_oilvaporizationproperties.get(currentStep); - OilVaporizationProperties::updateVAPPARS(ovp, vap1, vap2); - this->m_oilvaporizationproperties.update( currentStep, ovp ); - } - } - - void Schedule::handleDRVDT( const DeckKeyword& keyword, size_t currentStep){ - size_t numPvtRegions = m_runspec.tabdims().getNumPVTTables(); - std::vector max(numPvtRegions); - for( const auto& record : keyword ) { - std::fill(max.begin(), max.end(), record.getItem("DRVDT_MAX").getSIDouble(0)); - OilVaporizationProperties ovp = this->m_oilvaporizationproperties.get(currentStep); - OilVaporizationProperties::updateDRVDT(ovp, max); - this->m_oilvaporizationproperties.update( currentStep, ovp ); - } - } - - - void Schedule::handleDRSDT( const DeckKeyword& keyword, size_t currentStep){ - size_t numPvtRegions = m_runspec.tabdims().getNumPVTTables(); - std::vector max(numPvtRegions); - std::vector options(numPvtRegions); - for( const auto& record : keyword ) { - std::fill(max.begin(), max.end(), record.getItem("DRSDT_MAX").getSIDouble(0)); - std::fill(options.begin(), options.end(), record.getItem("Option").get< std::string >(0)); - OilVaporizationProperties ovp = this->m_oilvaporizationproperties.get(currentStep); - OilVaporizationProperties::updateDRSDT(ovp, max, options); - this->m_oilvaporizationproperties.update( currentStep, ovp ); - } - } - - void Schedule::handleDRSDTR( const DeckKeyword& keyword, size_t currentStep){ - size_t numPvtRegions = m_runspec.tabdims().getNumPVTTables(); - std::vector max(numPvtRegions); - std::vector options(numPvtRegions); - size_t pvtRegionIdx = 0; - for( const auto& record : keyword ) { - max[pvtRegionIdx] = record.getItem("DRSDT_MAX").getSIDouble(0); - options[pvtRegionIdx] = record.getItem("Option").get< std::string >(0); - pvtRegionIdx++; - } - OilVaporizationProperties ovp = this->m_oilvaporizationproperties.get(currentStep); - OilVaporizationProperties::updateDRSDT(ovp, max, options); - this->m_oilvaporizationproperties.update( currentStep, ovp ); - } - - void Schedule::handleDRVDTR( const DeckKeyword& keyword, size_t currentStep){ - size_t numPvtRegions = m_runspec.tabdims().getNumPVTTables(); - size_t pvtRegionIdx = 0; - std::vector max(numPvtRegions); - for( const auto& record : keyword ) { - max[pvtRegionIdx] = record.getItem("DRVDT_MAX").getSIDouble(0); - pvtRegionIdx++; - } - OilVaporizationProperties ovp = this->m_oilvaporizationproperties.get(currentStep); - OilVaporizationProperties::updateDRVDT(ovp, max); - this->m_oilvaporizationproperties.update( currentStep, ovp ); - } - - void Schedule::handleWCONHIST( const DeckKeyword& keyword, size_t currentStep, const ParseContext& parseContext, ErrorGuard& errors) { - for( const auto& record : keyword ) { - const std::string& wellNamePattern = - record.getItem("WELL").getTrimmedString(0); - - const Well::Status status = Well::StatusFromString(record.getItem("STATUS").getTrimmedString(0)); - - auto well_names = this->wellNames(wellNamePattern, currentStep); - if (well_names.empty()) - invalidNamePattern(wellNamePattern, currentStep, parseContext, errors, keyword); - - for( const auto& well_name : well_names) { - updateWellStatus( well_name , currentStep , status, false ); - { - auto& dynamic_state = this->wells_static.at(well_name); - auto well2 = std::make_shared(*dynamic_state[currentStep]); - bool switching_from_injector = !well2->isProducer(); - auto properties = std::make_shared(well2->getProductionProperties()); - bool update_well = false; - properties->handleWCONHIST(record); - - if (switching_from_injector) { - properties->resetDefaultBHPLimit(); - - auto inj_props = std::make_shared(well2->getInjectionProperties()); - inj_props->resetBHPLimit(); - well2->updateInjection(inj_props); - update_well = true; - } - - if (well2->updateProduction(properties)) - update_well = true; - - if (well2->updatePrediction(false)) - update_well = true; - - if (update_well) { - m_events.addEvent( ScheduleEvents::PRODUCTION_UPDATE , currentStep); - this->addWellGroupEvent( well2->name(), ScheduleEvents::PRODUCTION_UPDATE, currentStep); - this->updateWell(well2, currentStep); - } - if ( !well2->getAllowCrossFlow()) { - // The numerical content of the rate UDAValues is accessed unconditionally; - // since this is in history mode use of UDA values is not allowed anyway. - const auto& oil_rate = properties->OilRate; - const auto& water_rate = properties->WaterRate; - const auto& gas_rate = properties->GasRate; - if (oil_rate.zero() && water_rate.zero() && gas_rate.zero()) { - std::string msg = - "Well " + well2->name() + " is a history matched well with zero rate where crossflow is banned. " + - "This well will be closed at " + std::to_string ( m_timeMap.getTimePassedUntil(currentStep) / (60*60*24) ) + " days"; - OpmLog::note(msg); - updateWellStatus( well_name, currentStep, Well::Status::SHUT, false ); - } - } - } - } - } - } - - - void Schedule::handleWCONPROD( const DeckKeyword& keyword, size_t currentStep, const ParseContext& parseContext, ErrorGuard& errors) { - for( const auto& record : keyword ) { - const std::string& wellNamePattern = - record.getItem("WELL").getTrimmedString(0); - - const Well::Status status = Well::StatusFromString(record.getItem("STATUS").getTrimmedString(0)); - auto well_names = this->wellNames(wellNamePattern, currentStep); - if (well_names.empty()) - invalidNamePattern(wellNamePattern, currentStep, parseContext, errors, keyword); - - for( const auto& well_name : well_names) { - - updateWellStatus( well_name , currentStep , status, false ); - { - auto& dynamic_state = this->wells_static.at(well_name); - auto well2 = std::make_shared(*dynamic_state[currentStep]); - bool switching_from_injector = !well2->isProducer(); - auto properties = std::make_shared(well2->getProductionProperties()); - bool update_well = switching_from_injector; - properties->clearControls(); - if (well2->isAvailableForGroupControl()) - properties->addProductionControl(Well::ProducerCMode::GRUP); - - properties->handleWCONPROD(well_name, record); - - if (switching_from_injector) - properties->resetDefaultBHPLimit(); - - if (well2->updateProduction(properties)) - update_well = true; - - if (well2->updatePrediction(true)) - update_well = true; - - if (update_well) { - m_events.addEvent( ScheduleEvents::PRODUCTION_UPDATE , currentStep); - this->addWellGroupEvent( well2->name(), ScheduleEvents::PRODUCTION_UPDATE, currentStep); - this->updateWell(std::move(well2), currentStep); - } - - auto udq = std::make_shared(this->udqActive(currentStep)); - if (properties->updateUDQActive(this->getUDQConfig(currentStep), *udq)) - this->updateUDQActive(currentStep, udq); - } - } - } - } - - - void Schedule::shut_well(const std::string& well_name, std::size_t report_step) { - this->updateWellStatus(well_name, report_step, Well::Status::SHUT, true); - } - - void Schedule::open_well(const std::string& well_name, std::size_t report_step) { - this->updateWellStatus(well_name, report_step, Well::Status::OPEN, true); - } - - void Schedule::stop_well(const std::string& well_name, std::size_t report_step) { - this->updateWellStatus(well_name, report_step, Well::Status::STOP, true); - } - - void Schedule::updateWell(std::shared_ptr well, size_t reportStep) { - auto& dynamic_state = this->wells_static.at(well->name()); - dynamic_state.update(reportStep, std::move(well)); - } - - - /* - Function is quite dangerous - because if this is called while holding a - Well pointer that will go stale and needs to be refreshed. - */ - bool Schedule::updateWellStatus( const std::string& well_name, size_t reportStep , Well::Status status, bool update_connections) { - bool update = false; - auto& dynamic_state = this->wells_static.at(well_name); - auto well2 = std::make_shared(*dynamic_state[reportStep]); - if (well2->updateStatus(status, update_connections)) { - m_events.addEvent( ScheduleEvents::WELL_STATUS_CHANGE, reportStep ); - this->addWellGroupEvent( well2->name(), ScheduleEvents::WELL_STATUS_CHANGE, reportStep); - this->updateWell(well2, reportStep); - update = true; - if (status == Well::Status::OPEN) - this->rft_config.addWellOpen(well_name, reportStep); - } - return update; - } - - - void Schedule::handleWPIMULT( const DeckKeyword& keyword, size_t currentStep) { - for( const auto& record : keyword ) { - const std::string& wellNamePattern = record.getItem("WELL").getTrimmedString(0); - const auto& well_names = this->wellNames(wellNamePattern, currentStep); - for (const auto& wname : well_names) { - { - auto& dynamic_state = this->wells_static.at(wname); - auto well_ptr = std::make_shared( *dynamic_state[currentStep] ); - if (well_ptr->handleWPIMULT(record)) - this->updateWell(std::move(well_ptr), currentStep); - } - } - } - } - - - - - void Schedule::handleWCONINJE( const DeckKeyword& keyword, size_t currentStep, const ParseContext& parseContext, ErrorGuard& errors) { - for( const auto& record : keyword ) { - const std::string& wellNamePattern = record.getItem("WELL").getTrimmedString(0); - - auto well_names = wellNames(wellNamePattern, currentStep); - if (well_names.empty()) - invalidNamePattern(wellNamePattern, currentStep, parseContext, errors, keyword); - - for( const auto& well_name : well_names ) { - Well::Status status = Well::StatusFromString( record.getItem("STATUS").getTrimmedString(0)); - updateWellStatus( well_name , currentStep , status, false ); - { - bool update_well = false; - auto& dynamic_state = this->wells_static.at(well_name); - auto well2 = std::make_shared(*dynamic_state[currentStep]); - auto injection = std::make_shared(well2->getInjectionProperties()); - injection->handleWCONINJE(record, well2->isAvailableForGroupControl(), well_name); - - if (well2->updateInjection(injection)) - update_well = true; - - if (well2->updatePrediction(true)) - update_well = true; - - if (update_well) { - this->updateWell(well2, currentStep); - m_events.addEvent( ScheduleEvents::INJECTION_UPDATE , currentStep ); - this->addWellGroupEvent( well_name, ScheduleEvents::INJECTION_UPDATE, currentStep); - } - - // if the well has zero surface rate limit or reservior rate limit, while does not allow crossflow, - // it should be turned off. - if ( ! well2->getAllowCrossFlow() ) { - std::string msg = - "Well " + well_name + " is an injector with zero rate where crossflow is banned. " + - "This well will be closed at " + std::to_string ( m_timeMap.getTimePassedUntil(currentStep) / (60*60*24) ) + " days"; - - if (injection->surfaceInjectionRate.is()) { - if (injection->hasInjectionControl(Well::InjectorCMode::RATE) && injection->surfaceInjectionRate.zero()) { - OpmLog::note(msg); - updateWellStatus( well_name, currentStep, Well::Status::SHUT, false ); - } - } - - if (injection->reservoirInjectionRate.is()) { - if (injection->hasInjectionControl(Well::InjectorCMode::RESV) && injection->reservoirInjectionRate.zero()) { - OpmLog::note(msg); - updateWellStatus( well_name, currentStep, Well::Status::SHUT, false ); - } - } - } - - auto udq = std::make_shared(this->udqActive(currentStep)); - if (injection->updateUDQActive(this->getUDQConfig(currentStep), *udq)) - this->updateUDQActive(currentStep, udq); - } - } - } - } - - void Schedule::handleWCONINJH(const DeckKeyword& keyword, size_t currentStep, const ParseContext& parseContext, ErrorGuard& errors) { - for( const auto& record : keyword ) { - const std::string& wellNamePattern = record.getItem("WELL").getTrimmedString(0); - Well::Status status = Well::StatusFromString( record.getItem("STATUS").getTrimmedString(0)); - const auto well_names = wellNames( wellNamePattern, currentStep ); - - if (well_names.empty()) - invalidNamePattern( wellNamePattern, currentStep, parseContext, errors, keyword); - - for (const auto& well_name : well_names) { - updateWellStatus( well_name, currentStep, status, false ); - { - bool update_well = false; - auto& dynamic_state = this->wells_static.at(well_name); - auto well2 = std::make_shared(*dynamic_state[currentStep]); - auto injection = std::make_shared(well2->getInjectionProperties()); - injection->handleWCONINJH(record, well2->isProducer(), well_name); - - if (well2->updateInjection(injection)) - update_well = true; - - if (well2->updatePrediction(false)) - update_well = true; - - if (update_well) { - this->updateWell(well2, currentStep); - m_events.addEvent( ScheduleEvents::INJECTION_UPDATE , currentStep ); - this->addWellGroupEvent( well_name, ScheduleEvents::INJECTION_UPDATE, currentStep); - } - - if ( ! well2->getAllowCrossFlow() && (injection->surfaceInjectionRate.zero())) { - std::string msg = - "Well " + well_name + " is an injector with zero rate where crossflow is banned. " + - "This well will be closed at " + std::to_string ( m_timeMap.getTimePassedUntil(currentStep) / (60*60*24) ) + " days"; - OpmLog::note(msg); - updateWellStatus( well_name, currentStep, Well::Status::SHUT, false ); - } - } - } - } - } - - void Schedule::handleWFOAM( const DeckKeyword& keyword, size_t currentStep, const ParseContext& parseContext, ErrorGuard& errors) { - for (const auto& record : keyword) { - const std::string& wellNamePattern = record.getItem("WELL").getTrimmedString(0); - const auto well_names = wellNames(wellNamePattern, currentStep ); - - if (well_names.empty()) - invalidNamePattern(wellNamePattern, currentStep, parseContext, errors, keyword); - - for (const auto& well_name : well_names) { - const auto& dynamic_state = this->wells_static.at(well_name); - auto well2 = std::make_shared(*dynamic_state[currentStep]); - auto foam_properties = std::make_shared(well2->getFoamProperties()); - foam_properties->handleWFOAM(record); - if (well2->updateFoamProperties(foam_properties)) - this->updateWell(std::move(well2), currentStep); - } - } - } - - void Schedule::handleWPOLYMER( const DeckKeyword& keyword, size_t currentStep, const ParseContext& parseContext, ErrorGuard& errors) { - for( const auto& record : keyword ) { - const std::string& wellNamePattern = record.getItem("WELL").getTrimmedString(0); - const auto well_names = wellNames( wellNamePattern, currentStep ); - - if (well_names.empty()) - invalidNamePattern(wellNamePattern, currentStep, parseContext, errors, keyword); - - for( const auto& well_name : well_names) { - { - const auto& dynamic_state = this->wells_static.at(well_name); - auto well2 = std::make_shared(*dynamic_state[currentStep]); - auto polymer_properties = std::make_shared( well2->getPolymerProperties() ); - polymer_properties->handleWPOLYMER(record); - if (well2->updatePolymerProperties(polymer_properties)) - this->updateWell(std::move(well2), currentStep); - } - } - } - } - - void Schedule::handleWSALT( const DeckKeyword& keyword, size_t currentStep, const ParseContext& parseContext, ErrorGuard& errors) { - for (const auto& record : keyword) { - const std::string& wellNamePattern = record.getItem("WELL").getTrimmedString(0); - const auto well_names = wellNames(wellNamePattern, currentStep ); - - if (well_names.empty()) - invalidNamePattern(wellNamePattern, currentStep, parseContext, errors, keyword); - - for (const auto& well_name : well_names) { - const auto& dynamic_state = this->wells_static.at(well_name); - auto well2 = std::make_shared(*dynamic_state[currentStep]); - auto brine_properties = std::make_shared(well2->getBrineProperties()); - brine_properties->handleWSALT(record); - if (well2->updateBrineProperties(brine_properties)) - this->updateWell(well2, currentStep); - } - } - } - - - void Schedule::handleWPMITAB( const DeckKeyword& keyword, const size_t currentStep, const ParseContext& parseContext, ErrorGuard& errors) { - - for (const auto& record : keyword) { - - const std::string& wellNamePattern = record.getItem("WELL").getTrimmedString(0); - const auto well_names = wellNames( wellNamePattern, currentStep ); - - if (well_names.empty()) - invalidNamePattern(wellNamePattern, currentStep, parseContext, errors, keyword); - - for (const auto& well_name : well_names) { - { - auto& dynamic_state = this->wells_static.at(well_name); - auto well2 = std::make_shared(*dynamic_state[currentStep]); - auto polymer_properties = std::make_shared( well2->getPolymerProperties() ); - polymer_properties->handleWPMITAB(record); - if (well2->updatePolymerProperties(polymer_properties)) - this->updateWell(std::move(well2), currentStep); - } - } - } - } - - - void Schedule::handleWSKPTAB( const DeckKeyword& keyword, const size_t currentStep, const ParseContext& parseContext, ErrorGuard& errors) { - - - for (const auto& record : keyword) { - const std::string& wellNamePattern = record.getItem("WELL").getTrimmedString(0); - const auto well_names = wellNames(wellNamePattern, currentStep); - - if (well_names.empty()) - invalidNamePattern(wellNamePattern, currentStep, parseContext, errors, keyword); - - for (const auto& well_name : well_names) { - { - auto& dynamic_state = this->wells_static.at(well_name); - auto well2 = std::make_shared(*dynamic_state[currentStep]); - auto polymer_properties = std::make_shared( well2->getPolymerProperties() ); - polymer_properties->handleWSKPTAB(record); - if (well2->updatePolymerProperties(polymer_properties)) - this->updateWell(std::move(well2), currentStep); - } - } - } - } - - - void Schedule::handleWECON( const DeckKeyword& keyword, size_t currentStep, const ParseContext& parseContext, ErrorGuard& errors) { - for( const auto& record : keyword ) { - const std::string& wellNamePattern = record.getItem("WELL").getTrimmedString(0); - const auto well_names = wellNames( wellNamePattern , currentStep); - - if (well_names.empty()) - invalidNamePattern(wellNamePattern, currentStep, parseContext, errors, keyword); - - for(const auto& well_name : well_names) { - { - auto& dynamic_state = this->wells_static.at(well_name); - auto well2 = std::make_shared(*dynamic_state[currentStep]); - auto econ_limits = std::make_shared( record ); - if (well2->updateEconLimits(econ_limits)) - this->updateWell(std::move(well2), currentStep); - } - } - } - } - - void Schedule::handleWEFAC( const DeckKeyword& keyword, size_t currentStep, const ParseContext& parseContext, ErrorGuard& errors) { - for( const auto& record : keyword ) { - const std::string& wellNamePattern = record.getItem("WELLNAME").getTrimmedString(0); - const double& efficiencyFactor = record.getItem("EFFICIENCY_FACTOR").get< double >(0); - const auto well_names = wellNames( wellNamePattern, currentStep ); - - if (well_names.empty()) - invalidNamePattern(wellNamePattern, currentStep, parseContext, errors, keyword); - - for(const auto& well_name : well_names) { - { - auto& dynamic_state = this->wells_static.at(well_name); - auto well2 = std::make_shared(*dynamic_state[currentStep]); - if (well2->updateEfficiencyFactor(efficiencyFactor)) - this->updateWell(std::move(well2), currentStep); - } - } - } - } - - - void Schedule::handleWLIST(const DeckKeyword& keyword, size_t currentStep) { - const std::string legal_actions = "NEW:ADD:DEL:MOV"; - const auto& current = *this->wlist_manager.get(currentStep); - std::shared_ptr new_wlm(new WListManager(current)); - for (const auto& record : keyword) { - const std::string& name = record.getItem("NAME").getTrimmedString(0); - const std::string& action = record.getItem("ACTION").getTrimmedString(0); - const std::vector& wells = record.getItem("WELLS").getData(); - - if (legal_actions.find(action) == std::string::npos) - throw std::invalid_argument("The action:" + action + " is not recognized."); - - for (const auto& well : wells) { - if (!this->hasWell(well)) - throw std::invalid_argument("The well: " + well + " has not been defined in the WELSPECS"); - } - - if (name[0] != '*') - throw std::invalid_argument("The list name in WLIST must start with a '*'"); - - if (action == "NEW") - new_wlm->newList(name); - - if (!new_wlm->hasList(name)) - throw std::invalid_argument("Invalid well list: " + name); - - auto& wlist = new_wlm->getList(name); - if (action == "MOV") { - for (const auto& well : wells) - new_wlm->delWell(well); - } - - if (action == "DEL") { - for (const auto& well : wells) - wlist.del(well); - } else { - for (const auto& well : wells) - wlist.add(well); - } - - } - this->wlist_manager.update(currentStep, new_wlm); - } - - void Schedule::handleUDQ(const DeckKeyword& keyword, size_t currentStep) { - const auto& current = *this->udq_config.get(currentStep); - std::shared_ptr new_udq = std::make_shared(current); - for (const auto& record : keyword) - new_udq->add_record(record); - - this->udq_config.update(currentStep, new_udq); - } - - - void Schedule::handleWTEST(const DeckKeyword& keyword, size_t currentStep, const ParseContext& parseContext, ErrorGuard& errors) { - const auto& current = *this->wtest_config.get(currentStep); - std::shared_ptr new_config(new WellTestConfig(current)); - for( const auto& record : keyword ) { - const std::string& wellNamePattern = record.getItem("WELL").getTrimmedString(0); - const auto well_names = wellNames( wellNamePattern , currentStep); - if (well_names.empty()) - invalidNamePattern(wellNamePattern, currentStep, parseContext, errors, keyword); - - double test_interval = record.getItem("INTERVAL").getSIDouble(0); - const std::string& reasons = record.getItem("REASON").get(0); - int num_test = record.getItem("TEST_NUM").get(0); - double startup_time = record.getItem("START_TIME").getSIDouble(0); - - for(const auto& well_name : well_names) { - if (reasons.empty()) - new_config->drop_well(well_name); - else - new_config->add_well(well_name, reasons, test_interval, num_test, startup_time, currentStep); - } - } - this->wtest_config.update(currentStep, new_config); - } - - void Schedule::handleWSOLVENT( const DeckKeyword& keyword, size_t currentStep, const ParseContext& parseContext, ErrorGuard& errors) { - - for( const auto& record : keyword ) { - const std::string& wellNamePattern = record.getItem("WELL").getTrimmedString(0); - const auto well_names = wellNames( wellNamePattern , currentStep); - double fraction = record.getItem("SOLVENT_FRACTION").get< UDAValue >(0).getSI(); - - if (well_names.empty()) - invalidNamePattern(wellNamePattern, currentStep, parseContext, errors, keyword); - - for(const auto& well_name : well_names) { - { - const auto& well = this->getWell(well_name, currentStep); - const auto& inj = well.getInjectionProperties(); - if (!well.isProducer() && inj.injectorType == InjectorType::GAS) { - if (well.getSolventFraction() != fraction) { - auto new_well = std::make_shared(well); - new_well->updateSolventFraction(fraction); - this->updateWell(std::move(new_well), currentStep); - } - } else - throw std::invalid_argument("The WSOLVENT keyword can only be applied to gas injectors"); - } - } - } - } - - void Schedule::handleWTRACER( const DeckKeyword& keyword, size_t currentStep, const ParseContext& parseContext, ErrorGuard& errors) { - - for( const auto& record : keyword ) { - const std::string& wellNamePattern = record.getItem("WELL").getTrimmedString(0); - const auto well_names = wellNames( wellNamePattern, currentStep ); - - if (well_names.empty()) - invalidNamePattern(wellNamePattern, currentStep, parseContext, errors, keyword); - - for(const auto& well_name : well_names) { - double tracerConcentration = record.getItem("CONCENTRATION").get< UDAValue >(0).getSI(); - const std::string& tracerName = record.getItem("TRACER").getTrimmedString(0); - { - auto well = std::make_shared( this->getWell(well_name, currentStep)); - auto wellTracerProperties = std::make_shared( well->getTracerProperties() ); - wellTracerProperties->setConcentration(tracerName, tracerConcentration); - if (well->updateTracer(wellTracerProperties)) - this->updateWell(std::move(well), currentStep); - } - } - } - } - - void Schedule::handleWTEMP( const DeckKeyword& keyword, size_t currentStep, const ParseContext& parseContext, ErrorGuard& errors) { - for( const auto& record : keyword ) { - const std::string& wellNamePattern = record.getItem("WELL").getTrimmedString(0); - const auto well_names = wellNames( wellNamePattern, currentStep ); - double temp = record.getItem("TEMP").getSIDouble(0); - if (well_names.empty()) - invalidNamePattern( wellNamePattern, currentStep, parseContext, errors, keyword); - - for (const auto& well_name : well_names) { - // TODO: Is this the right approach? Setting the well temperature only - // has an effect on injectors, but specifying it for producers won't hurt - // and wells can also switch their injector/producer status. Note that - // modifying the injector properties for producer wells currently leads - // to a very weird segmentation fault downstream. For now, let's take the - // water route. - { - const auto& well = this->getWell(well_name, currentStep); - double current_temp = well.getInjectionProperties().temperature; - if (current_temp != temp && !well.isProducer()) { - auto& dynamic_state = this->wells_static.at(well_name); - auto well_ptr = std::make_shared( *dynamic_state[currentStep] ); - auto inj = std::make_shared(well_ptr->getInjectionProperties()); - inj->temperature = temp; - well_ptr->updateInjection(inj); - this->updateWell(std::move(well_ptr), currentStep); - } - } - } - } - } - - void Schedule::handleWINJTEMP( const DeckKeyword& keyword, size_t currentStep, const ParseContext& parseContext, ErrorGuard& errors) { - // we do not support the "enthalpy" field yet. how to do this is a more difficult - // question. - for( const auto& record : keyword ) { - const std::string& wellNamePattern = record.getItem("WELL").getTrimmedString(0); - auto well_names = wellNames( wellNamePattern , currentStep); - double temp = record.getItem("TEMPERATURE").getSIDouble(0); - - if (well_names.empty()) - invalidNamePattern( wellNamePattern, currentStep, parseContext, errors, keyword); - - for (const auto& well_name : well_names) { - // TODO: Is this the right approach? Setting the well temperature only - // has an effect on injectors, but specifying it for producers won't hurt - // and wells can also switch their injector/producer status. Note that - // modifying the injector properties for producer wells currently leads - // to a very weird segmentation fault downstream. For now, let's take the - // water route. - { - const auto& well = this->getWell(well_name, currentStep); - double current_temp = well.getInjectionProperties().temperature; - if (current_temp != temp && !well.isProducer()) { - auto& dynamic_state = this->wells_static.at(well_name); - auto well_ptr = std::make_shared( *dynamic_state[currentStep] ); - auto inj = std::make_shared(well_ptr->getInjectionProperties()); - inj->temperature = temp; - well_ptr->updateInjection(inj); - this->updateWell(std::move(well_ptr), currentStep); - } - } - } - } - } - - void Schedule::handleCOMPLUMP( const DeckKeyword& keyword, - size_t timestep ) { - - for( const auto& record : keyword ) { - const std::string& wellNamePattern = record.getItem("WELL").getTrimmedString(0); - const auto well_names = this->wellNames(wellNamePattern, timestep); - for (const auto& wname : well_names) { - { - auto& dynamic_state = this->wells_static.at(wname); - auto well_ptr = std::make_shared( *dynamic_state[timestep] ); - if (well_ptr->handleCOMPLUMP(record)) - this->updateWell(std::move(well_ptr), timestep); - } - } - } - } - - void Schedule::handleWELOPEN( const DeckKeyword& keyword, size_t currentStep, const ParseContext& parseContext, ErrorGuard& errors, const std::vector& matching_wells) { - - auto conn_defaulted = []( const DeckRecord& rec ) { - auto defaulted = []( const DeckItem& item ) { - return item.defaultApplied( 0 ); - }; - - return std::all_of( rec.begin() + 2, rec.end(), defaulted ); - }; - - constexpr auto open = Well::Status::OPEN; - bool action_mode = !matching_wells.empty(); - - for( const auto& record : keyword ) { - const auto& wellNamePattern = record.getItem( "WELL" ).getTrimmedString(0); - const auto& status_str = record.getItem( "STATUS" ).getTrimmedString( 0 ); - const auto well_names = this->wellNames(wellNamePattern, currentStep, matching_wells); - if (well_names.empty()) - invalidNamePattern( wellNamePattern, currentStep, parseContext, errors, keyword); - - /* if all records are defaulted or just the status is set, only - * well status is updated - */ - if( conn_defaulted( record ) ) { - const auto well_status = Well::StatusFromString( status_str ); - for (const auto& wname : well_names) { - { - const auto& well = this->getWell(wname, currentStep); - if( well_status == open && !well.canOpen() ) { - auto days = m_timeMap.getTimePassedUntil( currentStep ) / (60 * 60 * 24); - std::string msg = "Well " + wname - + " where crossflow is banned has zero total rate." - + " This well is prevented from opening at " - + std::to_string( days ) + " days"; - OpmLog::note(msg); - } else { - this->updateWellStatus( wname, currentStep, well_status, false ); - if (well_status == open) - this->rft_config.addWellOpen(wname, currentStep); - - OpmLog::info(Well::Status2String(well_status) + " well: " + wname + " at report step: " + std::to_string(currentStep)); - } - } - } - - continue; - } - - for (const auto& wname : well_names) { - const auto comp_status = Connection::StateFromString( status_str ); - { - auto& dynamic_state = this->wells_static.at(wname); - auto well_ptr = std::make_shared( *dynamic_state[currentStep] ); - if (well_ptr->handleWELOPEN(record, comp_status, action_mode)) { - // The updateWell call breaks test at line 825 and 831 in ScheduleTests - this->updateWell(well_ptr, currentStep); - const auto well_status = Well::StatusFromString( status_str ); - OpmLog::info(Well::Status2String(well_status) + " well: " + wname + " at report step: " + std::to_string(currentStep)); - } - } - m_events.addEvent( ScheduleEvents::COMPLETION_CHANGE, currentStep ); - } - } - } - - /* - The documentation for the WELTARG keyword says that the well - must have been fully specified and initialized using one of the - WCONxxxx keywords prior to modifying the well using the WELTARG - keyword. - - The following implementation of handling the WELTARG keyword - does not check or enforce in any way that this is done (i.e. it - is not checked or verified that the well is initialized with any - WCONxxxx keyword). - - Update: See the discussion following the defintions of the SI factors, due - to a bad design we currently need the well to be specified with WCONPROD - / WCONHIST before WELTARG is applied, if not the units for the rates - will be wrong. - */ - - void Schedule::handleWELTARG( const SCHEDULESection& section , - const DeckKeyword& keyword, - size_t currentStep, - const ParseContext& parseContext, ErrorGuard& errors) { - Opm::UnitSystem unitSystem = section.unitSystem(); - const double SiFactorP = unitSystem.parse("Pressure").getSIScaling(); - for( const auto& record : keyword ) { - - const std::string& wellNamePattern = record.getItem("WELL").getTrimmedString(0); - const auto cmode = Well::WELTARGCModeFromString(record.getItem("CMODE").getTrimmedString(0)); - double newValue = record.getItem("NEW_VALUE").get< double >(0); - - const auto well_names = wellNames( wellNamePattern, currentStep ); - - if( well_names.empty() ) - invalidNamePattern( wellNamePattern, currentStep, parseContext, errors, keyword); - - for(const auto& well_name : well_names) { - { - auto& dynamic_state = this->wells_static.at(well_name); - auto well2 = std::make_shared(*dynamic_state[currentStep]); - bool update = false; - if (well2->isProducer()) { - auto prop = std::make_shared(well2->getProductionProperties()); - prop->handleWELTARG(cmode, newValue, SiFactorP); - update = well2->updateProduction(prop); - if (cmode == Well::WELTARGCMode::GUID) - update |= well2->updateWellGuideRate(newValue); - } else { - auto inj = std::make_shared(well2->getInjectionProperties()); - inj->handleWELTARG(cmode, newValue, SiFactorP); - update = well2->updateInjection(inj); - if (cmode == Well::WELTARGCMode::GUID) - update |= well2->updateWellGuideRate(newValue); - } - if (update) - this->updateWell(std::move(well2), currentStep); - } - } - } - } - - void Schedule::handleGCONINJE( const DeckKeyword& keyword, size_t currentStep, const ParseContext& parseContext, ErrorGuard& errors) { - for( const auto& record : keyword ) { - const std::string& groupNamePattern = record.getItem("GROUP").getTrimmedString(0); - const auto group_names = this->groupNames(groupNamePattern); - - if (group_names.empty()) - invalidNamePattern(groupNamePattern, currentStep, parseContext, errors, keyword); - - for (const auto& group_name : group_names){ - Group::InjectionCMode controlMode = Group::InjectionCModeFromString( record.getItem("CONTROL_MODE").getTrimmedString(0) ); - Phase phase = get_phase( record.getItem("PHASE").getTrimmedString(0)); - auto surfaceInjectionRate = record.getItem("SURFACE_TARGET").get< UDAValue >(0); - auto reservoirInjectionRate = record.getItem("RESV_TARGET").get(0); - auto reinj_target = record.getItem("REINJ_TARGET").get(0); - auto voidage_target = record.getItem("VOIDAGE_TARGET").get(0); - std::string reinj_group = group_name; - if (!record.getItem("REINJECT_GROUP").defaultApplied(0)) - reinj_group = record.getItem("REINJECT_GROUP").getTrimmedString(0); - - std::string voidage_group = group_name; - if (!record.getItem("VOIDAGE_GROUP").defaultApplied(0)) - voidage_group = record.getItem("VOIDAGE_GROUP").getTrimmedString(0);; - - bool availableForGroupControl = DeckItem::to_bool(record.getItem("FREE").getTrimmedString(0)) - && (group_name != "FIELD"); - //surfaceInjectionRate = injection::rateToSI(surfaceInjectionRate, phase, section.unitSystem()); - { - auto group_ptr = std::make_shared(this->getGroup(group_name, currentStep)); - Group::GroupInjectionProperties injection; - injection.phase = phase; - injection.cmode = controlMode; - injection.surface_max_rate = surfaceInjectionRate; - injection.resv_max_rate = reservoirInjectionRate; - injection.target_reinj_fraction = reinj_target; - injection.target_void_fraction = voidage_target; - injection.injection_controls = 0; - injection.reinj_group = reinj_group; - injection.voidage_group = voidage_group; - injection.available_group_control = availableForGroupControl; - - if (!record.getItem("SURFACE_TARGET").defaultApplied(0)) - injection.injection_controls += static_cast(Group::InjectionCMode::RATE); - - if (!record.getItem("RESV_TARGET").defaultApplied(0)) - injection.injection_controls += static_cast(Group::InjectionCMode::RESV); - - if (!record.getItem("REINJ_TARGET").defaultApplied(0)) - injection.injection_controls += static_cast(Group::InjectionCMode::REIN); - - if (!record.getItem("VOIDAGE_TARGET").defaultApplied(0)) - injection.injection_controls += static_cast(Group::InjectionCMode::VREP); - - if (group_ptr->updateInjection(injection)) { - this->updateGroup(std::move(group_ptr), currentStep); - m_events.addEvent( ScheduleEvents::GROUP_INJECTION_UPDATE , currentStep); - this->addWellGroupEvent(group_name, ScheduleEvents::GROUP_INJECTION_UPDATE, currentStep); - } - } - } - } - } - - - void Schedule::handleGCONPROD( const DeckKeyword& keyword, size_t currentStep, const ParseContext& parseContext, ErrorGuard& errors) { - for( const auto& record : keyword ) { - const std::string& groupNamePattern = record.getItem("GROUP").getTrimmedString(0); - const auto group_names = this->groupNames(groupNamePattern); - - if (group_names.empty()) - invalidNamePattern(groupNamePattern, currentStep, parseContext, errors, keyword); - - for (const auto& group_name : group_names){ - Group::ProductionCMode controlMode = Group::ProductionCModeFromString( record.getItem("CONTROL_MODE").getTrimmedString(0) ); - Group::ExceedAction exceedAction = Group::ExceedActionFromString(record.getItem("EXCEED_PROC").getTrimmedString(0) ); - auto oil_target = record.getItem("OIL_TARGET").get(0); - auto gas_target = record.getItem("GAS_TARGET").get(0); - auto water_target = record.getItem("WATER_TARGET").get(0); - auto liquid_target = record.getItem("LIQUID_TARGET").get(0); - auto guide_rate_def = Group::GuideRateTarget::NO_GUIDE_RATE; - double guide_rate = 0; - if (group_name != "FIELD") { - if (record.getItem("GUIDE_RATE_DEF").hasValue(0)) { - std::string guide_rate_str = record.getItem("GUIDE_RATE_DEF").getTrimmedString(0); - guide_rate_def = Group::GuideRateTargetFromString( guide_rate_str ); - - if ((guide_rate_def == Group::GuideRateTarget::INJV || - guide_rate_def == Group::GuideRateTarget::POTN || - guide_rate_def == Group::GuideRateTarget::FORM)) { - std::string msg = "The supplied guide_rate value will be ignored"; - parseContext.handleError(ParseContext::SCHEDULE_IGNORED_GUIDE_RATE, msg, errors); - } else { - guide_rate = record.getItem("GUIDE_RATE").get(0); - if (guide_rate == 0) - guide_rate_def = Group::GuideRateTarget::POTN; - } - } - } - auto resv_target = record.getItem("RESERVOIR_FLUID_TARGET").getSIDouble(0); - bool availableForGroupControl = DeckItem::to_bool(record.getItem("RESPOND_TO_PARENT").getTrimmedString(0)) - && (group_name != "FIELD"); - { - auto group_ptr = std::make_shared(this->getGroup(group_name, currentStep)); - Group::GroupProductionProperties production; - production.cmode = controlMode; - production.oil_target = oil_target; - production.gas_target = gas_target; - production.water_target = water_target; - production.liquid_target = liquid_target; - production.guide_rate = guide_rate; - production.guide_rate_def = guide_rate_def; - production.resv_target = resv_target; - production.available_group_control = availableForGroupControl; - - if ((production.cmode == Group::ProductionCMode::ORAT) || - (production.cmode == Group::ProductionCMode::WRAT) || - (production.cmode == Group::ProductionCMode::GRAT) || - (production.cmode == Group::ProductionCMode::LRAT)) - production.exceed_action = Group::ExceedAction::RATE; - else - production.exceed_action = exceedAction; - - production.production_controls = 0; - - if (!record.getItem("OIL_TARGET").defaultApplied(0)) - production.production_controls += static_cast(Group::ProductionCMode::ORAT); - - if (!record.getItem("GAS_TARGET").defaultApplied(0)) - production.production_controls += static_cast(Group::ProductionCMode::GRAT); - - if (!record.getItem("WATER_TARGET").defaultApplied(0)) - production.production_controls += static_cast(Group::ProductionCMode::WRAT); - - if (!record.getItem("LIQUID_TARGET").defaultApplied(0)) - production.production_controls += static_cast(Group::ProductionCMode::LRAT); - - if (!record.getItem("RESERVOIR_FLUID_TARGET").defaultApplied(0)) - production.production_controls += static_cast(Group::ProductionCMode::RESV); - - if (group_ptr->updateProduction(production)) { - auto new_config = std::make_shared( this->guideRateConfig(currentStep) ); - new_config->update_group(*group_ptr); - this->guide_rate_config.update( currentStep, std::move(new_config) ); - - this->updateGroup(std::move(group_ptr), currentStep); - m_events.addEvent( ScheduleEvents::GROUP_PRODUCTION_UPDATE , currentStep); - this->addWellGroupEvent(group_name, ScheduleEvents::GROUP_PRODUCTION_UPDATE, currentStep); - } - } - } - } - } - - - void Schedule::handleGEFAC( const DeckKeyword& keyword, size_t currentStep, const ParseContext& parseContext, ErrorGuard& errors) { - for( const auto& record : keyword ) { - const std::string& groupNamePattern = record.getItem("GROUP").getTrimmedString(0); - const auto group_names = this->groupNames(groupNamePattern); - - if (group_names.empty()) - invalidNamePattern(groupNamePattern, currentStep, parseContext, errors, keyword); - - for (const auto& group_name : group_names){ - bool transfer = DeckItem::to_bool(record.getItem("TRANSFER_EXT_NET").getTrimmedString(0)); - auto gefac = record.getItem("EFFICIENCY_FACTOR").get< double >(0); - { - auto group_ptr = std::make_shared(this->getGroup(group_name, currentStep)); - if (group_ptr->update_gefac(gefac, transfer)) - this->updateGroup(std::move(group_ptr), currentStep); - } - } - } - } - - void Schedule::handleGCONSALE( const DeckKeyword& keyword, size_t currentStep, const UnitSystem& unit_system) { - const auto& current = *this->gconsale.get(currentStep); - std::shared_ptr new_gconsale(new GConSale(current)); - for( const auto& record : keyword ) { - const std::string& groupName = record.getItem("GROUP").getTrimmedString(0); - auto sales_target = record.getItem("SALES_TARGET").get(0); - auto max_rate = record.getItem("MAX_SALES_RATE").get(0); - auto min_rate = record.getItem("MIN_SALES_RATE").get(0); - std::string procedure = record.getItem("MAX_PROC").getTrimmedString(0); - auto udqconfig = this->getUDQConfig(currentStep).params().undefinedValue(); - - new_gconsale->add(groupName, sales_target, max_rate, min_rate, procedure, udqconfig, unit_system); - - auto group_ptr = std::make_shared(this->getGroup(groupName, currentStep)); - Group::GroupInjectionProperties injection; - injection.phase = Phase::GAS; - if (group_ptr->updateInjection(injection)) { - this->updateGroup(std::move(group_ptr), currentStep); - } - } - this->gconsale.update(currentStep, new_gconsale); - } - - - void Schedule::handleGCONSUMP( const DeckKeyword& keyword, size_t currentStep, const UnitSystem& unit_system) { - const auto& current = *this->gconsump.get(currentStep); - std::shared_ptr new_gconsump(new GConSump(current)); - for( const auto& record : keyword ) { - const std::string& groupName = record.getItem("GROUP").getTrimmedString(0); - auto consumption_rate = record.getItem("GAS_CONSUMP_RATE").get(0); - auto import_rate = record.getItem("GAS_IMPORT_RATE").get(0); - - std::string network_node_name; - auto network_node = record.getItem("NETWORK_NODE"); - if (!network_node.defaultApplied(0)) - network_node_name = network_node.getTrimmedString(0); - - auto udqconfig = this->getUDQConfig(currentStep).params().undefinedValue(); - - new_gconsump->add(groupName, consumption_rate, import_rate, network_node_name, udqconfig, unit_system); - } - this->gconsump.update(currentStep, new_gconsump); - } - - - void Schedule::handleGUIDERAT( const DeckKeyword& keyword, size_t currentStep) { - const auto& record = keyword.getRecord(0); - - double min_calc_delay = record.getItem().getSIDouble(0); - auto phase = GuideRateModel::TargetFromString(record.getItem().getTrimmedString(0)); - double A = record.getItem().get(0); - double B = record.getItem().get(0); - double C = record.getItem().get(0); - double D = record.getItem().get(0); - double E = record.getItem().get(0); - double F = record.getItem().get(0); - bool allow_increase = DeckItem::to_bool( record.getItem().getTrimmedString(0)); - double damping_factor = record.getItem().get(0); - bool use_free_gas = DeckItem::to_bool( record.getItem().getTrimmedString(0)); - - GuideRateModel new_model = GuideRateModel(min_calc_delay, phase, A, B, C, D, E, F, allow_increase, damping_factor, use_free_gas); - auto new_config = std::make_shared( this->guideRateConfig(currentStep) ); - if (new_config->update_model(new_model)) - this->guide_rate_config.update( currentStep, new_config ); - } - - - void Schedule::handleLINCOM( const DeckKeyword& keyword, size_t currentStep) { - const auto& record = keyword.getRecord(0); - auto alpha = record.getItem().get(0); - auto beta = record.getItem().get(0); - auto gamma = record.getItem().get(0); - auto new_config = std::make_shared( this->guideRateConfig(currentStep) ); - auto new_model = new_config->model(); - - if (new_model.updateLINCOM(alpha, beta, gamma)) { - new_config->update_model(new_model); - this->guide_rate_config.update( currentStep, new_config ); - } - } - - - void Schedule::handleTUNING( const DeckKeyword& keyword, size_t currentStep) { - - int numrecords = keyword.size(); - - Tuning tuning(m_tuning.get(currentStep)); - if (numrecords > 0) { - const auto& record1 = keyword.getRecord(0); - - tuning.TSINIT = record1.getItem("TSINIT").getSIDouble(0); - tuning.TSMAXZ = record1.getItem("TSMAXZ").getSIDouble(0); - tuning.TSMINZ = record1.getItem("TSMINZ").getSIDouble(0); - tuning.TSMCHP = record1.getItem("TSMCHP").getSIDouble(0); - tuning.TSFMAX = record1.getItem("TSFMAX").get< double >(0); - tuning.TSFMIN = record1.getItem("TSFMIN").get< double >(0); - tuning.TSFCNV = record1.getItem("TSFCNV").get< double >(0); - tuning.TFDIFF = record1.getItem("TFDIFF").get< double >(0); - tuning.THRUPT = record1.getItem("THRUPT").get< double >(0); - const auto& TMAXWCdeckItem = record1.getItem("TMAXWC"); - if (TMAXWCdeckItem.hasValue(0)) { - tuning.TMAXWC_has_value = true; - tuning.TMAXWC = TMAXWCdeckItem.getSIDouble(0); - } - } - - - if (numrecords > 1) { - const auto& record2 = keyword.getRecord(1); - - tuning.TRGTTE = record2.getItem("TRGTTE").get< double >(0); - tuning.TRGCNV = record2.getItem("TRGCNV").get< double >(0); - tuning.TRGMBE = record2.getItem("TRGMBE").get< double >(0); - tuning.TRGLCV = record2.getItem("TRGLCV").get< double >(0); - tuning.XXXTTE = record2.getItem("XXXTTE").get< double >(0); - tuning.XXXCNV = record2.getItem("XXXCNV").get< double >(0); - tuning.XXXMBE = record2.getItem("XXXMBE").get< double >(0); - tuning.XXXLCV = record2.getItem("XXXLCV").get< double >(0); - tuning.XXXWFL = record2.getItem("XXXWFL").get< double >(0); - tuning.TRGFIP = record2.getItem("TRGFIP").get< double >(0); - const auto& TRGSFTdeckItem = record2.getItem("TRGSFT"); - if (TRGSFTdeckItem.hasValue(0)) { - tuning.TRGSFT_has_value = true; - tuning.TRGSFT = TRGSFTdeckItem.get< double >(0); - } - - tuning.THIONX = record2.getItem("THIONX").get< double >(0); - tuning.TRWGHT = record2.getItem("TRWGHT").get< int >(0); - } - - - if (numrecords > 2) { - const auto& record3 = keyword.getRecord(2); - - tuning.NEWTMX = record3.getItem("NEWTMX").get< int >(0); - tuning.NEWTMN = record3.getItem("NEWTMN").get< int >(0); - tuning.LITMAX = record3.getItem("LITMAX").get< int >(0); - tuning.LITMIN = record3.getItem("LITMIN").get< int >(0); - tuning.MXWSIT = record3.getItem("MXWSIT").get< int >(0); - tuning.MXWPIT = record3.getItem("MXWPIT").get< int >(0); - tuning.DDPLIM = record3.getItem("DDPLIM").getSIDouble(0); - tuning.DDSLIM = record3.getItem("DDSLIM").get< double >(0); - tuning.TRGDPR = record3.getItem("TRGDPR").getSIDouble(0); - const auto& XXXDPRdeckItem = record3.getItem("XXXDPR"); - if (XXXDPRdeckItem.hasValue(0)) { - tuning.XXXDPR_has_value = true; - tuning.XXXDPR = XXXDPRdeckItem.getSIDouble(0); - } - } - m_tuning.update(currentStep, tuning); - m_events.addEvent( ScheduleEvents::TUNING_CHANGE , currentStep); - - } - - - void Schedule::handleMESSAGES( const DeckKeyword& keyword, size_t currentStep) { - const auto& record = keyword.getRecord(0); - using set_limit_fptr = decltype( std::mem_fn( &MessageLimits::setMessagePrintLimit ) ); - static const std::pair setters[] = { - {"MESSAGE_PRINT_LIMIT" , std::mem_fn( &MessageLimits::setMessagePrintLimit)}, - {"COMMENT_PRINT_LIMIT" , std::mem_fn( &MessageLimits::setCommentPrintLimit)}, - {"WARNING_PRINT_LIMIT" , std::mem_fn( &MessageLimits::setWarningPrintLimit)}, - {"PROBLEM_PRINT_LIMIT" , std::mem_fn( &MessageLimits::setProblemPrintLimit)}, - {"ERROR_PRINT_LIMIT" , std::mem_fn( &MessageLimits::setErrorPrintLimit)}, - {"BUG_PRINT_LIMIT" , std::mem_fn( &MessageLimits::setBugPrintLimit)}, - {"MESSAGE_STOP_LIMIT" , std::mem_fn( &MessageLimits::setMessageStopLimit)}, - {"COMMENT_STOP_LIMIT" , std::mem_fn( &MessageLimits::setCommentStopLimit)}, - {"WARNING_STOP_LIMIT" , std::mem_fn( &MessageLimits::setWarningStopLimit)}, - {"PROBLEM_STOP_LIMIT" , std::mem_fn( &MessageLimits::setProblemStopLimit)}, - {"ERROR_STOP_LIMIT" , std::mem_fn( &MessageLimits::setErrorStopLimit)}, - {"BUG_STOP_LIMIT" , std::mem_fn( &MessageLimits::setBugStopLimit)}}; - - for (const auto& pair : setters) { - const auto& item = record.getItem( pair.first ); - if (!item.defaultApplied(0)) { - const set_limit_fptr& fptr = pair.second; - int value = item.get(0); - fptr( this->m_messageLimits , currentStep , value ); - } - } - } - - void Schedule::handleRPTSCHED( const DeckKeyword& keyword, size_t currentStep) { - this->rpt_config.update(currentStep, std::make_shared(keyword)); - } - - void Schedule::handleCOMPDAT( const DeckKeyword& keyword, size_t currentStep, const EclipseGrid& grid, const FieldPropsManager& fp, const ParseContext& parseContext, ErrorGuard& errors) { - for (const auto& record : keyword) { - const std::string& wellNamePattern = record.getItem("WELL").getTrimmedString(0); - auto wellnames = this->wellNames(wellNamePattern, currentStep); - if (wellnames.empty()) - invalidNamePattern(wellNamePattern, currentStep, parseContext, errors, keyword); - - for (const auto& name : wellnames) { - { - auto well2 = std::shared_ptr(new Well( this->getWell(name, currentStep))); - auto connections = std::shared_ptr( new WellConnections( well2->getConnections())); - connections->loadCOMPDAT(record, grid, fp); - /* - This block implements the following dubious logic. - - 1. All competions are shut. - 2. A new open completion is added. - 3. A currently SHUT well is opened. - - This code assumes that the reason the well is initially - shut is due to all the shut completions, if the well was - explicitly shut for another reason the explicit opening of - the well might be in error? - */ - /*if (all_shut0) { - if (!connections->allConnectionsShut()) { - if (well2->getStatus() == WellCommon::StatusEnum::SHUT) { - printf("Running all_shut inner loop\n"); - if (this->updateWellStatus(well2->name(), currentStep, WellCommon::StatusEnum::OPEN)) - // Refresh pointer if the status has updated current slot. Ugly - well2 = std::shared_ptr(new Well(this->getWell(name, currentStep))); - } - } - } - */ - if (well2->updateConnections(connections, grid, fp.get_int("PVTNUM"))) - this->updateWell(well2, currentStep); - - if (well2->getStatus() == Well::Status::SHUT) { - std::string msg = - "All completions in well " + well2->name() + " is shut at " + std::to_string ( m_timeMap.getTimePassedUntil(currentStep) / (60*60*24) ) + " days. \n" + - "The well is therefore also shut."; - OpmLog::note(msg); - } - } - this->addWellGroupEvent(name, ScheduleEvents::COMPLETION_CHANGE, currentStep); - } - } - m_events.addEvent(ScheduleEvents::COMPLETION_CHANGE, currentStep); - } - - - - - void Schedule::handleWELSEGS( const DeckKeyword& keyword, size_t currentStep) { - const auto& record1 = keyword.getRecord(0); - const auto& wname = record1.getItem("WELL").getTrimmedString(0); - { - auto& dynamic_state = this->wells_static.at(wname); - auto well_ptr = std::make_shared( *dynamic_state[currentStep] ); - if (well_ptr->handleWELSEGS(keyword)) - this->updateWell(std::move(well_ptr), currentStep); - } - } - - void Schedule::handleCOMPSEGS( const DeckKeyword& keyword, size_t currentStep, const EclipseGrid& grid, - const ParseContext& parseContext, ErrorGuard& errors) { - const auto& record1 = keyword.getRecord(0); - const std::string& well_name = record1.getItem("WELL").getTrimmedString(0); - { - auto& dynamic_state = this->wells_static.at(well_name); - auto well_ptr = std::make_shared( *dynamic_state[currentStep] ); - if (well_ptr->handleCOMPSEGS(keyword, grid, parseContext, errors)) - this->updateWell(std::move(well_ptr), currentStep); - } - } - - void Schedule::handleWSEGSICD( const DeckKeyword& keyword, size_t currentStep) { - - const std::map > > spiral_icds = - SpiralICD::fromWSEGSICD(keyword); - - for (const auto& map_elem : spiral_icds) { - const std::string& well_name_pattern = map_elem.first; - const auto well_names = this->wellNames(well_name_pattern, currentStep); - const std::vector >& sicd_pairs = map_elem.second; - - for (const auto& well_name : well_names) { - auto& dynamic_state = this->wells_static.at(well_name); - auto well_ptr = std::make_shared( *dynamic_state[currentStep] ); - if (well_ptr -> updateWSEGSICD(sicd_pairs) ) - this->updateWell(std::move(well_ptr), currentStep); - } - } - } - - void Schedule::handleWSEGVALV( const DeckKeyword& keyword, size_t currentStep) { - const std::map > > valves = Valve::fromWSEGVALV(keyword); - - for (const auto& map_elem : valves) { - const std::string& well_name_pattern = map_elem.first; - const auto well_names = this->wellNames(well_name_pattern, currentStep); - const std::vector >& valve_pairs = map_elem.second; - - for (const auto& well_name : well_names) { - auto& dynamic_state = this->wells_static.at(well_name); - auto well_ptr = std::make_shared( *dynamic_state[currentStep] ); - if (well_ptr -> updateWSEGVALV(valve_pairs) ) - this->updateWell(std::move(well_ptr), currentStep); - } - } - } - - void Schedule::handleWGRUPCON( const DeckKeyword& keyword, size_t currentStep) { - for( const auto& record : keyword ) { - const auto well_names = this->wellNames(record.getItem("WELL").getTrimmedString(0), currentStep); - for (const auto& well_name : well_names) { - bool availableForGroupControl = DeckItem::to_bool(record.getItem("GROUP_CONTROLLED").getTrimmedString(0)); - double guide_rate = record.getItem("GUIDE_RATE").get< double >(0); - double scaling_factor = record.getItem("SCALING_FACTOR").get< double >(0); - auto phase = Well::GuideRateTarget::UNDEFINED; - if (!record.getItem("PHASE").defaultApplied(0)) { - std::string guideRatePhase = record.getItem("PHASE").getTrimmedString(0); - phase = Well::GuideRateTargetFromString(guideRatePhase); - } - - { - auto& dynamic_state = this->wells_static.at(well_name); - auto well_ptr = std::make_shared( *dynamic_state[currentStep] ); - if (well_ptr->updateWellGuideRate(availableForGroupControl, guide_rate, phase, scaling_factor)) { - auto new_config = std::make_shared( this->guideRateConfig(currentStep) ); - new_config->update_well(*well_ptr); - this->guide_rate_config.update( currentStep, std::move(new_config) ); - - this->updateWell(std::move(well_ptr), currentStep); - } - } - } - } - } - -void Schedule::handleGRUPTREE( const DeckKeyword& keyword, size_t currentStep, const UnitSystem& unit_system, const ParseContext& parseContext, ErrorGuard& errors) { - for( const auto& record : keyword ) { - const std::string& childName = trim_wgname(keyword, record.getItem("CHILD_GROUP").get(0), parseContext, errors); - const std::string& parentName = trim_wgname(keyword, record.getItem("PARENT_GROUP").get(0), parseContext, errors); - - if (!hasGroup(parentName)) - addGroup( parentName , currentStep, unit_system ); - - if (!hasGroup(childName)) - addGroup( childName , currentStep, unit_system ); - - this->addGroupToGroup(parentName, childName, currentStep); - } - } - - - void Schedule::handleGRUPNET( const DeckKeyword& keyword, size_t currentStep, const UnitSystem& unit_system) { - for( const auto& record : keyword ) { - const auto& groupName = record.getItem("NAME").getTrimmedString(0); - - if (!hasGroup(groupName)) - addGroup(groupName , currentStep, unit_system); - - int table = record.getItem("VFP_TABLE").get< int >(0); - { - auto group_ptr = std::make_shared( this->getGroup(groupName, currentStep) ); - if (group_ptr->updateNetVFPTable(table)) - this->updateGroup(std::move(group_ptr), currentStep); - } - } - } - - void Schedule::handleWRFT( const DeckKeyword& keyword, size_t currentStep) { - - /* Rule for handling RFT: Request current RFT data output for specified wells, plus output when - * any well is subsequently opened - */ - - for( const auto& record : keyword ) { - - const std::string& wellNamePattern = record.getItem("WELL").getTrimmedString(0); - const auto well_names = wellNames(wellNamePattern, currentStep); - for(const auto& well_name : well_names) - this->rft_config.updateRFT(well_name, currentStep, RFTConfig::RFT::YES); - - } - - this->rft_config.setWellOpenRFT(currentStep); - } - - void Schedule::handleWRFTPLT( const DeckKeyword& keyword, size_t currentStep) { - for( const auto& record : keyword ) { - - const std::string& wellNamePattern = record.getItem("WELL").getTrimmedString(0); - - RFTConfig::RFT RFTKey = RFTConfig::RFTFromString(record.getItem("OUTPUT_RFT").getTrimmedString(0)); - RFTConfig::PLT PLTKey = RFTConfig::PLTFromString(record.getItem("OUTPUT_PLT").getTrimmedString(0)); - const auto well_names = wellNames(wellNamePattern, currentStep); - for(const auto& well_name : well_names) { - this->rft_config.updateRFT(well_name, currentStep, RFTKey); - this->rft_config.updatePLT(well_name, currentStep, PLTKey); - } - } - } - - const RFTConfig& Schedule::rftConfig() const { - return this->rft_config; - } - -void Schedule::invalidNamePattern( const std::string& namePattern, std::size_t report_step, const ParseContext& parseContext, ErrorGuard& errors, const DeckKeyword& keyword ) const { - std::string msg = "Error when handling " + keyword.name() + " at step: " + std::to_string(report_step) + ". No names match " + - namePattern; - parseContext.handleError( ParseContext::SCHEDULE_INVALID_NAME, msg, errors ); - } - - const TimeMap& Schedule::getTimeMap() const { - return this->m_timeMap; - } - - - GTNode Schedule::groupTree(const std::string& root_node, std::size_t report_step, std::size_t level, const std::optional& parent_name) const { - auto root_group = this->getGroup(root_node, report_step); - GTNode tree(root_group, level, parent_name); - - for (const auto& wname : root_group.wells()) { - const auto& well = this->getWell(wname, report_step); - tree.add_well(well); - } - - for (const auto& gname : root_group.groups()) { - auto child_group = this->groupTree(gname, report_step, level + 1, root_node); - tree.add_group(child_group); - } - - return tree; - } - - GTNode Schedule::groupTree(const std::string& root_node, std::size_t report_step) const { - return this->groupTree(root_node, report_step, 0, {}); - } - - - GTNode Schedule::groupTree(std::size_t report_step) const { - return this->groupTree("FIELD", report_step); - } - - void Schedule::addWell(const std::string& wellName, - const DeckRecord& record, - size_t timeStep, - Connection::Order wellConnectionOrder, - const UnitSystem& unit_system) - { - using WS = ParserKeywords::WELSPECS; - // We change from eclipse's 1 - n, to a 0 - n-1 solution - int headI = record.getItem("HEAD_I").get< int >(0) - 1; - int headJ = record.getItem("HEAD_J").get< int >(0) - 1; - Phase preferredPhase; - { - const std::string phaseStr = record.getItem("PHASE").getTrimmedString(0); - if (phaseStr == "LIQ") { - // We need a workaround in case the preferred phase is "LIQ", - // which is not proper phase and will cause the get_phase() - // function to throw. In that case we choose to treat it as OIL. - preferredPhase = Phase::OIL; - OpmLog::warning("LIQ_PREFERRED_PHASE", - "LIQ preferred phase not supported for well " + wellName + ", using OIL instead"); - } else - preferredPhase = get_phase(phaseStr); - } - const auto& refDepthItem = record.getItem("REF_DEPTH"); - double refDepth = refDepthItem.hasValue( 0 ) - ? refDepthItem.getSIDouble( 0 ) - : -1.0; - - double drainageRadius = record.getItem( "D_RADIUS" ).getSIDouble(0); - - bool allowCrossFlow = true; - const std::string& allowCrossFlowStr = record.getItem().getTrimmedString(0); - if (allowCrossFlowStr == "NO") - allowCrossFlow = false; - - bool automaticShutIn = true; - const std::string& automaticShutInStr = record.getItem().getTrimmedString(0); - if (automaticShutInStr == "STOP") { - automaticShutIn = false; - } - - const std::string& group = record.getItem().getTrimmedString(0); - auto pvt_table = record.getItem().get(0); - auto gas_inflow = Well::GasInflowEquationFromString( record.getItem().get(0) ); - - this->addWell(wellName, - group, - headI, - headJ, - preferredPhase, - refDepth, - drainageRadius, - allowCrossFlow, - automaticShutIn, - pvt_table, - gas_inflow, - timeStep, - wellConnectionOrder, - unit_system); - } - - - void Schedule::addWell(Well well, size_t report_step) { - const std::string wname = well.name(); - - m_events.addEvent( ScheduleEvents::NEW_WELL , report_step ); - wellgroup_events.insert( std::make_pair(wname, Events(this->m_timeMap))); - this->addWellGroupEvent(wname, ScheduleEvents::NEW_WELL, report_step); - - well.setInsertIndex(this->wells_static.size()); - this->wells_static.insert( std::make_pair(wname, DynamicState>(m_timeMap, nullptr))); - auto& dynamic_well_state = this->wells_static.at(wname); - dynamic_well_state.update(report_step, std::make_shared(std::move(well))); - } - - - void Schedule::addWell(const std::string& wellName, - const std::string& group, - int headI, - int headJ, - Phase preferredPhase, - double refDepth, - double drainageRadius, - bool allowCrossFlow, - bool automaticShutIn, - int pvt_table, - Well::GasInflowEquation gas_inflow, - size_t timeStep, - Connection::Order wellConnectionOrder, - const UnitSystem& unit_system) { - - Well well(wellName, - group, - timeStep, - 0, - headI, headJ, - refDepth, - WellType(preferredPhase), - this->global_whistctl_mode[timeStep], - wellConnectionOrder, - unit_system, - this->getUDQConfig(timeStep).params().undefinedValue(), - drainageRadius, - allowCrossFlow, - automaticShutIn, - pvt_table, - gas_inflow); - - this->addWell( std::move(well), timeStep ); - } - - - size_t Schedule::numWells() const { - return wells_static.size(); - } - - size_t Schedule::numWells(size_t timestep) const { - auto well_names = this->wellNames(timestep); - return well_names.size(); - } - - bool Schedule::hasWell(const std::string& wellName) const { - return wells_static.count( wellName ) > 0; - } - - bool Schedule::hasWell(const std::string& wellName, std::size_t timeStep) const { - if (this->wells_static.count(wellName) == 0) - return false; - - const auto& well = this->getWellatEnd(wellName); - return well.hasBeenDefined(timeStep); - } - - std::vector< const Group* > Schedule::getChildGroups2(const std::string& group_name, size_t timeStep) const { - if (!hasGroup(group_name)) - throw std::invalid_argument("No such group: '" + group_name + "'"); - { - const auto& group = getGroup( group_name, timeStep ); - std::vector child_groups; - - if (group.defined( timeStep )) { - for (const auto& child_name : group.groups()) - child_groups.push_back( std::addressof(this->getGroup(child_name, timeStep))); - } - return child_groups; - } - } - - - std::vector< Well > Schedule::getChildWells2(const std::string& group_name, size_t timeStep) const { - if (!hasGroup(group_name)) - throw std::invalid_argument("No such group: '" + group_name + "'"); - { - const auto& dynamic_state = this->groups.at(group_name); - const auto& group_ptr = dynamic_state.get(timeStep); - if (group_ptr) { - std::vector wells; - - if (group_ptr->groups().size()) { - for (const auto& child_name : group_ptr->groups()) { - const auto& child_wells = getChildWells2( child_name, timeStep); - wells.insert( wells.end() , child_wells.begin() , child_wells.end()); - } - } else { - for (const auto& well_name : group_ptr->wells( )) - wells.push_back( this->getWell( well_name, timeStep )); - } - - return wells; - } else - return {}; - } - } - - /* - This function will return a list of wells which have changed - *structurally* in the last report_step; wells where only production - settings have changed will not be included. - */ - std::vector Schedule::changed_wells(std::size_t report_step) const { - std::vector wells; - - for (const auto& dynamic_pair : this->wells_static) { - const auto& well_ptr = dynamic_pair.second.get(report_step); - if (well_ptr) { - if (report_step > 0) { - const auto& prev = dynamic_pair.second.get(report_step - 1); - if (prev) { - if (!well_ptr->cmp_structure( *prev )) - wells.push_back( well_ptr->name() ); - } else - wells.push_back( well_ptr->name() ); - } else - wells.push_back( well_ptr->name() ); - } - } - - return wells; - } - - - std::vector Schedule::getWells(size_t timeStep) const { - std::vector wells; - if (timeStep >= this->m_timeMap.size()) - throw std::invalid_argument("timeStep argument beyond the length of the simulation"); - - for (const auto& dynamic_pair : this->wells_static) { - auto& well_ptr = dynamic_pair.second.get(timeStep); - if (well_ptr) - wells.push_back(*well_ptr.get()); - } - return wells; - } - - std::vector Schedule::getWellsatEnd() const { - return this->getWells(this->m_timeMap.size() - 1); - } - - - const Well& Schedule::getWellatEnd(const std::string& well_name) const { - return this->getWell(well_name, this->m_timeMap.size() - 1); - } - - const Well& Schedule::getWell(const std::string& wellName, size_t timeStep) const { - if (this->wells_static.count(wellName) == 0) - throw std::invalid_argument("No such well: " + wellName); - - const auto& dynamic_state = this->wells_static.at(wellName); - auto& well_ptr = dynamic_state.get(timeStep); - if (!well_ptr) - throw std::invalid_argument("Well: " + wellName + " not yet defined at step: " + std::to_string(timeStep)); - - return *well_ptr; - } - - const Group& Schedule::getGroup(const std::string& groupName, size_t timeStep) const { - if (this->groups.count(groupName) == 0) - throw std::invalid_argument("No such group: '" + groupName + "'"); - - const auto& dynamic_state = this->groups.at(groupName); - auto& group_ptr = dynamic_state.get(timeStep); - if (!group_ptr) - throw std::invalid_argument("Group: " + groupName + " not yet defined at step: " + std::to_string(timeStep)); - - return *group_ptr; - } - - void Schedule::updateGroup(std::shared_ptr group, size_t reportStep) { - auto& dynamic_state = this->groups.at(group->name()); - dynamic_state.update(reportStep, std::move(group)); - } - - /* - There are many SCHEDULE keyword which take a wellname as argument. In - addition to giving a fully qualified name like 'W1' you can also specify - shell wildcard patterns like like 'W*', you can get all the wells in the - well-list '*WL'[1] and the wellname '?' is used to get all the wells which - already have matched a condition in a ACTIONX keyword. This function - should be one-stop function to get all well names according to a input - pattern. The timestep argument is used to check that the wells have - indeed been defined at the point in time we are considering. - - [1]: The leading '*' in a WLIST name should not be interpreted as a shell - wildcard! - */ - - - std::vector Schedule::wellNames(const std::string& pattern, size_t timeStep, const std::vector& matching_wells) const { - if (pattern.size() == 0) - return {}; - - // WLIST - if (pattern[0] == '*' && pattern.size() > 1) { - const auto& wlm = this->getWListManager(timeStep); - if (wlm.hasList(pattern)) { - const auto& wlist = wlm.getList(pattern); - return { wlist.begin(), wlist.end() }; - } else - return {}; - } - - // Normal pattern matching - auto star_pos = pattern.find('*'); - if (star_pos != std::string::npos) { - std::vector names; - for (const auto& well_pair : this->wells_static) { - if (name_match(pattern, well_pair.first)) { - const auto& dynamic_state = well_pair.second; - if (dynamic_state.get(timeStep)) - names.push_back(well_pair.first); - } - } - return names; - } - - // ACTIONX handler - if (pattern == "?") - return { matching_wells.begin(), matching_wells.end() }; - - // Normal well name without any special characters - if (this->hasWell(pattern)) { - const auto& dynamic_state = this->wells_static.at(pattern); - if (dynamic_state.get(timeStep)) - return { pattern }; - } - return {}; - } - - std::vector Schedule::wellNames(const std::string& pattern) const { - return this->wellNames(pattern, this->size() - 1); - } - - std::vector Schedule::wellNames(std::size_t timeStep) const { - std::vector names; - for (const auto& well_pair : this->wells_static) { - const auto& well_name = well_pair.first; - const auto& dynamic_state = well_pair.second; - auto open_step = static_cast(dynamic_state.find_not(nullptr)); - if (open_step <= timeStep) - names.push_back(well_name); - } - return names; - } - - std::vector Schedule::wellNames() const { - std::vector names; - for (const auto& well_pair : this->wells_static) - names.push_back(well_pair.first); - - return names; - } - - std::vector Schedule::groupNames(const std::string& pattern, size_t timeStep) const { - if (pattern.size() == 0) - return {}; - - // Normal pattern matching - auto star_pos = pattern.find('*'); - if (star_pos != std::string::npos) { - std::vector names; - for (const auto& group_pair : this->groups) { - if (name_match(pattern, group_pair.first)) { - const auto& dynamic_state = group_pair.second; - const auto& group_ptr = dynamic_state.get(timeStep); - if (group_ptr) - names.push_back(group_pair.first); - } - } - return names; - } - - // Normal group name without any special characters - if (this->hasGroup(pattern)) { - const auto& dynamic_state = this->groups.at(pattern); - const auto& group_ptr = dynamic_state.get(timeStep); - if (group_ptr) - return { pattern }; - } - return {}; - } - - std::vector Schedule::groupNames(size_t timeStep) const { - std::vector names; - for (const auto& group_pair : this->groups) { - const auto& dynamic_state = group_pair.second; - const auto& group_ptr = dynamic_state.get(timeStep); - if (group_ptr) - names.push_back(group_pair.first); - } - return names; - } - - std::vector Schedule::groupNames(const std::string& pattern) const { - if (pattern.size() == 0) - return {}; - - // Normal pattern matching - auto star_pos = pattern.find('*'); - if (star_pos != std::string::npos) { - int flags = 0; - std::vector names; - for (const auto& group_pair : this->groups) { - if (fnmatch(pattern.c_str(), group_pair.first.c_str(), flags) == 0) - names.push_back(group_pair.first); - } - return names; - } - - // Normal group name without any special characters - if (this->hasGroup(pattern)) - return { pattern }; - - return {}; - } - - std::vector Schedule::groupNames() const { - std::vector names; - for (const auto& group_pair : this->groups) - names.push_back(group_pair.first); - - return names; - } - - - void Schedule::addGroup(const std::string& groupName, size_t timeStep, const UnitSystem& unit_system) { - const size_t gseqIndex = this->groups.size(); - - groups.insert( std::make_pair( groupName, DynamicState>(this->m_timeMap, nullptr))); - auto group_ptr = std::make_shared(groupName, gseqIndex, timeStep, this->getUDQConfig(timeStep).params().undefinedValue(), unit_system); - auto& dynamic_state = this->groups.at(groupName); - dynamic_state.update(timeStep, group_ptr); - - m_events.addEvent( ScheduleEvents::NEW_GROUP , timeStep ); - wellgroup_events.insert( std::make_pair(groupName, Events(this->m_timeMap))); - this->addWellGroupEvent(groupName, ScheduleEvents::NEW_GROUP, timeStep); - - // All newly created groups are attached to the field group, - // can then be relocated with the GRUPTREE keyword. - if (groupName != "FIELD") - this->addGroupToGroup("FIELD", *group_ptr, timeStep); - } - - size_t Schedule::numGroups() const { - return groups.size(); - } - - size_t Schedule::numGroups(size_t timeStep) const { - const auto group_names = this->groupNames(timeStep); - return group_names.size(); - } - - bool Schedule::hasGroup(const std::string& groupName) const { - return groups.count(groupName) > 0; - } - - bool Schedule::hasGroup(const std::string& groupName, std::size_t timeStep) const { - if (timeStep >= this->size()) - return false; - - auto grpMap = this->groups.find(groupName); - - return (grpMap != this->groups.end()) - && grpMap->second.at(timeStep); - } - - void Schedule::addGroupToGroup( const std::string& parent_group, const Group& child_group, size_t timeStep) { - // Add to new parent - auto& dynamic_state = this->groups.at(parent_group); - auto parent_ptr = std::make_shared( *dynamic_state[timeStep] ); - if (parent_ptr->addGroup(child_group.name())) - this->updateGroup(std::move(parent_ptr), timeStep); - - // Check and update backreference in child - if (child_group.parent() != parent_group) { - auto old_parent = std::make_shared( this->getGroup(child_group.parent(), timeStep) ); - old_parent->delGroup(child_group.name()); - this->updateGroup(std::move(old_parent), timeStep); - - auto child_ptr = std::make_shared( child_group ); - child_ptr->updateParent(parent_group); - this->updateGroup(std::move(child_ptr), timeStep); - - } - } - - void Schedule::addGroupToGroup( const std::string& parent_group, const std::string& child_group, size_t timeStep) { - this->addGroupToGroup(parent_group, this->getGroup(child_group, timeStep), timeStep); - } - - void Schedule::addWellToGroup( const std::string& group_name, const std::string& well_name , size_t timeStep) { - const auto& well = this->getWell(well_name, timeStep); - const auto old_gname = well.groupName(); - if (old_gname != group_name) { - auto well_ptr = std::make_shared( well ); - well_ptr->updateGroup(group_name); - this->updateWell(well_ptr, timeStep); - this->addWellGroupEvent(well_ptr->name(), ScheduleEvents::WELL_WELSPECS_UPDATE, timeStep); - - // Remove well child reference from previous group - auto group = std::make_shared(this->getGroup(old_gname, timeStep)); - group->delWell(well_name); - this->updateGroup(std::move(group), timeStep); - } - - // Add well child reference to new group - auto group_ptr = std::make_shared(this->getGroup(group_name, timeStep)); - group_ptr->addWell(well_name); - this->updateGroup(group_ptr, timeStep); - this->m_events.addEvent( ScheduleEvents::GROUP_CHANGE , timeStep); - } - - - - const Tuning& Schedule::getTuning(size_t timeStep) const { - return this->m_tuning.get( timeStep ); - } - - const DynamicState& Schedule::getTuning() const { - return this->m_tuning; - } - - const Deck& Schedule::getModifierDeck(size_t timeStep) const { - return m_modifierDeck.iget( timeStep ); - } - - const MessageLimits& Schedule::getMessageLimits() const { - return m_messageLimits; - } - - - const Events& Schedule::getWellGroupEvents(const std::string& wellGroup) const { - if (this->wellgroup_events.count(wellGroup) > 0) - return this->wellgroup_events.at(wellGroup); - else - throw std::invalid_argument("No such well og group " + wellGroup); - } - - void Schedule::addWellGroupEvent(const std::string& wellGroup, ScheduleEvents::Events event, size_t reportStep) { - auto& events = this->wellgroup_events.at(wellGroup); - events.addEvent(event, reportStep); - } - - bool Schedule::hasWellGroupEvent(const std::string& wellGroup, uint64_t event_mask, size_t reportStep) const { - const auto& events = this->getWellGroupEvents(wellGroup); - return events.hasEvent(event_mask, reportStep); - } - - const Events& Schedule::getEvents() const { - return this->m_events; - } - - const OilVaporizationProperties& Schedule::getOilVaporizationProperties(size_t timestep) const { - return m_oilvaporizationproperties.get(timestep); - } - - const Well::ProducerCMode& Schedule::getGlobalWhistctlMmode(size_t timestep) const { - return global_whistctl_mode.get(timestep); - } - - - bool Schedule::hasOilVaporizationProperties() const { - for( size_t i = 0; i < this->m_timeMap.size(); ++i ) - if( m_oilvaporizationproperties.at( i ).defined() ) return true; - - return false; - } - - void Schedule::checkIfAllConnectionsIsShut(size_t timeStep) { - const auto& well_names = this->wellNames(timeStep); - for (const auto& wname : well_names) { - const auto& well = this->getWell(wname, timeStep); - const auto& connections = well.getConnections(); - if (connections.allConnectionsShut()) - this->updateWellStatus( well.name(), timeStep, Well::Status::SHUT, false); - } - } - - - void Schedule::filterConnections(const ActiveGridCells& grid) { - for (auto& dynamic_pair : this->wells_static) { - auto& dynamic_state = dynamic_pair.second; - for (auto& well_pair : dynamic_state.unique()) { - if (well_pair.second) - well_pair.second->filterConnections(grid); - } - } - - for (auto& dynamic_pair : this->wells_static) { - auto& dynamic_state = dynamic_pair.second; - for (auto& well_pair : dynamic_state.unique()) { - if (well_pair.second) - well_pair.second->filterConnections(grid); - } - } - - for (auto& dynamic_pair : this->wells_static) { - auto& dynamic_state = dynamic_pair.second; - for (auto& well_pair : dynamic_state.unique()) { - if (well_pair.second) - well_pair.second->filterConnections(grid); - } - } - } - - const VFPProdTable& Schedule::getVFPProdTable(int table_id, size_t timeStep) const { - const auto pair = vfpprod_tables.find(table_id); - if (pair == vfpprod_tables.end()) - throw std::invalid_argument("No such table id: " + std::to_string(table_id)); - - auto table_ptr = pair->second.get(timeStep); - if (!table_ptr) - throw std::invalid_argument("Table not yet defined at timeStep:" + std::to_string(timeStep)); - - return *table_ptr; - } - - const VFPInjTable& Schedule::getVFPInjTable(int table_id, size_t timeStep) const { - const auto pair = vfpinj_tables.find(table_id); - if (pair == vfpinj_tables.end()) - throw std::invalid_argument("No such table id: " + std::to_string(table_id)); - - auto table_ptr = pair->second.get(timeStep); - if (!table_ptr) - throw std::invalid_argument("Table not yet defined at timeStep:" + std::to_string(timeStep)); - - return *table_ptr; - } - - std::map > Schedule::getVFPInjTables(size_t timeStep) const { - std::map > tables; - for (const auto& pair : this->vfpinj_tables) { - if (pair.second.get(timeStep)) { - tables.insert(std::make_pair(pair.first, pair.second.get(timeStep)) ); - } - } - return tables; - } - - std::map > Schedule::getVFPProdTables(size_t timeStep) const { - std::map > tables; - for (const auto& pair : this->vfpprod_tables) { - if (pair.second.get(timeStep)) { - tables.insert(std::make_pair(pair.first, pair.second.get(timeStep)) ); - } - } - return tables; - } - - const UDQActive& Schedule::udqActive(size_t timeStep) const { - return *this->udq_active[timeStep]; - } - - void Schedule::updateUDQActive( size_t timeStep, std::shared_ptr udq ) { - this->udq_active.update(timeStep, udq); - } - - const WellTestConfig& Schedule::wtestConfig(size_t timeStep) const { - const auto& ptr = this->wtest_config.get(timeStep); - return *ptr; - } - - const GConSale& Schedule::gConSale(size_t timeStep) const { - const auto& ptr = this->gconsale.get(timeStep); - return *ptr; - } - - const GConSump& Schedule::gConSump(size_t timeStep) const { - const auto& ptr = this->gconsump.get(timeStep); - return *ptr; - } - - const WListManager& Schedule::getWListManager(size_t timeStep) const { - const auto& ptr = this->wlist_manager.get(timeStep); - return *ptr; - } - - const UDQConfig& Schedule::getUDQConfig(size_t timeStep) const { - const auto& ptr = this->udq_config.get(timeStep); - return *ptr; - } - - const GuideRateConfig& Schedule::guideRateConfig(size_t timeStep) const { - const auto& ptr = this->guide_rate_config.get(timeStep); - return *ptr; - } - - const RPTConfig& Schedule::report_config(size_t timeStep) const { - const auto& ptr = this->rpt_config.get(timeStep); - return *ptr; - } - - std::optional Schedule::exitStatus() const { - return this->exit_status; - } - - size_t Schedule::size() const { - return this->m_timeMap.size(); - } - - - double Schedule::seconds(size_t timeStep) const { - return this->m_timeMap.seconds(timeStep); - } - - time_t Schedule::simTime(size_t timeStep) const { - return this->m_timeMap[timeStep]; - } - - double Schedule::stepLength(size_t timeStep) const { - return this->m_timeMap.getTimeStepLength(timeStep); - } - - - const Action::Actions& Schedule::actions(std::size_t timeStep) const { - const auto& ptr = this->m_actions.get(timeStep); - return *ptr; - } - - - void Schedule::applyAction(size_t reportStep, const Action::ActionX& action, const Action::Result& result) { - ParseContext parseContext; - ErrorGuard errors; - - for (const auto& keyword : action) { - if (!Action::ActionX::valid_keyword(keyword.name())) - throw std::invalid_argument("The keyword: " + keyword.name() + " can not be handled in the ACTION body"); - - if (keyword.name() == "WELOPEN") - this->handleWELOPEN(keyword, reportStep, parseContext, errors, result.wells()); - - if (keyword.name() == "EXIT") - this->handleEXIT(keyword, reportStep); - } - - } - - RestartConfig& Schedule::restart() { - return this->restart_config; - } - - - const RestartConfig& Schedule::restart() const { - return this->restart_config; - } - - int Schedule::getNupcol(size_t reportStep) const { - return this->m_nupcol.get(reportStep); - } - - bool Schedule::operator==(const Schedule& data) const { - auto&& comparePtr = [](const auto& t1, const auto& t2) { - if ((t1 && !t2) || (!t1 && t2)) - return false; - if (!t1) - return true; - - return *t1 == *t2; - }; - - auto&& compareDynState = [comparePtr](const auto& state1, const auto& state2) { - if (state1.data().size() != state2.data().size()) - return false; - return std::equal(state1.data().begin(), state1.data().end(), - state2.data().begin(), comparePtr); - }; - - auto&& compareMap = [compareDynState](const auto& map1, const auto& map2) { - if (map1.size() != map2.size()) - return false; - auto it2 = map2.begin(); - for (const auto& it : map1) { - if (it.first != it2->first) - return false; - if (!compareDynState(it.second, it2->second)) - return false; - - ++it2; - } - return true; - }; - - return this->m_timeMap == data.m_timeMap && - compareMap(this->wells_static, data.wells_static) && - compareMap(this->groups, data.groups) && - this->m_oilvaporizationproperties == data.m_oilvaporizationproperties && - this->m_events == data.m_events && - this->m_modifierDeck == data.m_modifierDeck && - this->m_tuning == data.m_tuning && - this->m_messageLimits == data.m_messageLimits && - this->m_runspec == data.m_runspec && - compareMap(this->vfpprod_tables, data.vfpprod_tables) && - compareMap(this->vfpinj_tables, data.vfpinj_tables) && - compareDynState(this->wtest_config, data.wtest_config) && - compareDynState(this->wlist_manager, data.wlist_manager) && - compareDynState(this->udq_config, data.udq_config) && - compareDynState(this->udq_active, data.udq_active) && - compareDynState(this->guide_rate_config, data.guide_rate_config) && - compareDynState(this->gconsale, data.gconsale) && - compareDynState(this->gconsump, data.gconsump) && - this->global_whistctl_mode == data.global_whistctl_mode && - compareDynState(this->m_actions, data.m_actions) && - compareDynState(this->rpt_config, data.rpt_config) && - rft_config == data.rft_config && - this->m_nupcol == data.m_nupcol && - this->restart_config == data.restart_config && - this->wellgroup_events == data.wellgroup_events; - } -namespace { -// Duplicated from Well.cpp -Connection::Order order_from_int(int int_value) { - switch(int_value) { - case 0: - return Connection::Order::TRACK; - case 1: - return Connection::Order::DEPTH; - case 2: - return Connection::Order::INPUT; - default: - throw std::invalid_argument("Invalid integer value: " + std::to_string(int_value) + " encountered when determining connection ordering"); - } -} - -} - -void Schedule::load_rst(const RestartIO::RstState& rst_state, const EclipseGrid& grid, const FieldPropsManager& fp, const UnitSystem& unit_system) -{ - double udq_undefined = 0; - const auto report_step = rst_state.header.report_step - 1; - - for (const auto& rst_group : rst_state.groups) - this->addGroup(rst_group.name, report_step, unit_system); - - for (const auto& rst_well : rst_state.wells) { - Opm::Well well(rst_well, report_step, unit_system, udq_undefined); - std::vector connections; - std::unordered_map segments; - - for (const auto& rst_conn : rst_well.connections) - connections.emplace_back(rst_conn, grid, fp); - - for (const auto& rst_segment : rst_well.segments) { - Opm::Segment segment(rst_segment); - segments.insert(std::make_pair(rst_segment.segment, std::move(segment))); - } - - for (auto& connection : connections) { - int segment_id = connection.segment(); - if (segment_id > 0) { - const auto& segment = segments.at(segment_id); - connection.updateSegmentRST(segment.segmentNumber(), - segment.depth()); - } - } - - { - std::shared_ptr well_connections = std::make_shared(order_from_int(rst_well.completion_ordering), rst_well.ij[0], rst_well.ij[1], connections); - well.updateConnections( std::move(well_connections), grid, fp.get_int("PVTNUM") ); - } - - if (!segments.empty()) { - std::vector segments_list; - /* - The ordering of the segments in the WellSegments structure seems a - bit random; in some parts of the code the segment_number seems to - be treated like a random integer ID, whereas in other parts it - seems to be treated like a running index. Here the segments in - WellSegments are sorted according to the segment number - observe - that this is somewhat important because the first top segment is - treated differently from the other segment. - */ - for (const auto& segment_pair : segments) - segments_list.push_back( std::move(segment_pair.second) ); - - std::sort( segments_list.begin(), segments_list.end(),[](const Segment& seg1, const Segment& seg2) { return seg1.segmentNumber() < seg2.segmentNumber(); } ); - auto comp_pressure_drop = WellSegments::CompPressureDrop::HFA; - std::shared_ptr well_segments = std::make_shared(comp_pressure_drop, segments_list); - well.updateSegments( std::move(well_segments) ); - } - - this->addWell(well, report_step); - this->addWellToGroup(well.groupName(), well.name(), report_step); - } - - m_tuning.update(report_step, rst_state.tuning); - m_events.addEvent( ScheduleEvents::TUNING_CHANGE , report_step); -} - -std::shared_ptr Schedule::python() const -{ - return this->python_handle; -} - -namespace { -/* - The insane trickery here (thank you Stackoverflow!) is to be able to provide a - simple templated comparison function - - template - int not_equal(const T& arg1, const T& arg2, const std::string& msg); - - which will print arg1 and arg2 on stderr *if* T supports operator<<, otherwise - it will just print the typename of T. -*/ - - -template -struct cmpx -{ - int neq(const T& arg1, const T& arg2, const std::string& msg) { - if (arg1 == arg2) - return 0; - - std::cerr << "Error when comparing <" << typeid(arg1).name() << ">: " << msg << std::endl; - return 1; - } -}; - -template -struct cmpx -{ - int neq(const T& arg1, const T& arg2, const std::string& msg) { - if (arg1 == arg2) - return 0; - - std::cerr << "Error when comparing: " << msg << " " << arg1 << " != " << arg2 << std::endl; - return 1; - } -}; - - -template -int not_equal(const T& arg1, const T& arg2, const std::string& msg) { - return cmpx().neq(arg1, arg2, msg); -} - - -template <> -int not_equal(const double& arg1, const double& arg2, const std::string& msg) { - if (Opm::cmp::scalar_equal(arg1, arg2)) - return 0; - - std::cerr << "Error when comparing: " << msg << " " << arg1 << " != " << arg2 << std::endl; - return 1; -} - -template <> -int not_equal(const UDAValue& arg1, const UDAValue& arg2, const std::string& msg) { - if (arg1.is()) - return not_equal( arg1.get(), arg2.get(), msg); - else - return not_equal( arg1.get(), arg2.get(), msg); -} - - -std::string well_msg(const std::string& well, const std::string& msg) { - return "Well: " + well + " " + msg; -} - -std::string well_segment_msg(const std::string& well, int segment_number, const std::string& msg) { - return "Well: " + well + " Segment: " + std::to_string(segment_number) + " " + msg; -} - -std::string well_connection_msg(const std::string& well, const Connection& conn, const std::string& msg) { - return "Well: " + well + " Connection: " + std::to_string(conn.getI()) + ", " + std::to_string(conn.getJ()) + ", " + std::to_string(conn.getK()) + " " + msg; -} - -} - -bool Schedule::cmp(const Schedule& sched1, const Schedule& sched2, std::size_t report_step) { - int count = not_equal(sched1.wellNames(report_step), sched2.wellNames(report_step), "Wellnames"); - if (count != 0) - return false; - - { - const auto& tm1 = sched1.getTimeMap(); - const auto& tm2 = sched2.getTimeMap(); - if (not_equal(tm1.size(), tm2.size(), "TimeMap: size()")) - count += 1; - - for (auto& step_index = report_step; step_index < std::min(tm1.size(), tm2.size()) - 1; step_index++) { - if (not_equal(tm1[step_index], tm2[step_index], "TimePoint[" + std::to_string(step_index) + "]")) - count += 1; - } - - } - - for (const auto& wname : sched1.wellNames(report_step)) { - const auto& well1 = sched1.getWell(wname, report_step); - const auto& well2 = sched2.getWell(wname, report_step); - int well_count = 0; - { - const auto& connections2 = well2.getConnections(); - const auto& connections1 = well1.getConnections(); - - well_count += not_equal( connections1.ordering(), connections2.ordering(), well_msg(well1.name(), "Connection: ordering")); - for (std::size_t icon = 0; icon < connections1.size(); icon++) { - const auto& conn1 = connections1[icon]; - const auto& conn2 = connections2[icon]; - well_count += not_equal( conn1.getI(), conn2.getI(), well_connection_msg(well1.name(), conn1, "I")); - well_count += not_equal( conn1.getJ() , conn2.getJ() , well_connection_msg(well1.name(), conn1, "J")); - well_count += not_equal( conn1.getK() , conn2.getK() , well_connection_msg(well1.name(), conn1, "K")); - well_count += not_equal( conn1.state() , conn2.state(), well_connection_msg(well1.name(), conn1, "State")); - well_count += not_equal( conn1.dir() , conn2.dir(), well_connection_msg(well1.name(), conn1, "dir")); - well_count += not_equal( conn1.complnum() , conn2.complnum(), well_connection_msg(well1.name(), conn1, "complnum")); - well_count += not_equal( conn1.segment() , conn2.segment(), well_connection_msg(well1.name(), conn1, "segment")); - well_count += not_equal( conn1.kind() , conn2.kind(), well_connection_msg(well1.name(), conn1, "CFKind")); - well_count += not_equal( conn1.sort_value(), conn2.sort_value(), well_connection_msg(well1.name(), conn1, "sort_value")); - - - well_count += not_equal( conn1.CF(), conn2.CF(), well_connection_msg(well1.name(), conn1, "CF")); - well_count += not_equal( conn1.Kh(), conn2.Kh(), well_connection_msg(well1.name(), conn1, "Kh")); - well_count += not_equal( conn1.rw(), conn2.rw(), well_connection_msg(well1.name(), conn1, "rw")); - well_count += not_equal( conn1.depth(), conn2.depth(), well_connection_msg(well1.name(), conn1, "depth")); - - //well_count += not_equal( conn1.r0(), conn2.r0(), well_connection_msg(well1.name(), conn1, "r0")); - well_count += not_equal( conn1.skinFactor(), conn2.skinFactor(), well_connection_msg(well1.name(), conn1, "skinFactor")); - - } - } - - if (not_equal(well1.isMultiSegment(), well2.isMultiSegment(), well_msg(well1.name(), "Is MSW"))) - return false; - - if (well1.isMultiSegment()) { - const auto& segments1 = well1.getSegments(); - const auto& segments2 = well2.getSegments(); - if (not_equal(segments1.size(), segments2.size(), "Segments: size")) - return false; - - for (std::size_t iseg=0; iseg < segments1.size(); iseg++) { - const auto& segment1 = segments1[iseg]; - const auto& segment2 = segments2[iseg]; - //const auto& segment2 = segments2.getFromSegmentNumber(segment1.segmentNumber()); - well_count += not_equal(segment1.segmentNumber(), segment2.segmentNumber(), well_segment_msg(well1.name(), segment1.segmentNumber(), "segmentNumber")); - well_count += not_equal(segment1.branchNumber(), segment2.branchNumber(), well_segment_msg(well1.name(), segment1.segmentNumber(), "branchNumber")); - well_count += not_equal(segment1.outletSegment(), segment2.outletSegment(), well_segment_msg(well1.name(), segment1.segmentNumber(), "outletSegment")); - well_count += not_equal(segment1.totalLength(), segment2.totalLength(), well_segment_msg(well1.name(), segment1.segmentNumber(), "totalLength")); - well_count += not_equal(segment1.depth(), segment2.depth(), well_segment_msg(well1.name(), segment1.segmentNumber(), "depth")); - well_count += not_equal(segment1.internalDiameter(), segment2.internalDiameter(), well_segment_msg(well1.name(), segment1.segmentNumber(), "internalDiameter")); - well_count += not_equal(segment1.roughness(), segment2.roughness(), well_segment_msg(well1.name(), segment1.segmentNumber(), "roughness")); - well_count += not_equal(segment1.crossArea(), segment2.crossArea(), well_segment_msg(well1.name(), segment1.segmentNumber(), "crossArea")); - well_count += not_equal(segment1.volume(), segment2.volume(), well_segment_msg(well1.name(), segment1.segmentNumber(), "volume")); - } - } - - well_count += not_equal(well1.getStatus(), well2.getStatus(), well_msg(well1.name(), "status")); - { - const auto& prod1 = well1.getProductionProperties(); - const auto& prod2 = well2.getProductionProperties(); - well_count += not_equal(prod1.name, prod2.name , well_msg(well1.name(), "Prod: name")); - well_count += not_equal(prod1.OilRate, prod2.OilRate, well_msg(well1.name(), "Prod: OilRate")); - well_count += not_equal(prod1.GasRate, prod2.GasRate, well_msg(well1.name(), "Prod: GasRate")); - well_count += not_equal(prod1.WaterRate, prod2.WaterRate, well_msg(well1.name(), "Prod: WaterRate")); - well_count += not_equal(prod1.LiquidRate, prod2.LiquidRate, well_msg(well1.name(), "Prod: LiquidRate")); - well_count += not_equal(prod1.ResVRate, prod2.ResVRate, well_msg(well1.name(), "Prod: ResVRate")); - well_count += not_equal(prod1.BHPTarget, prod2.BHPTarget, well_msg(well1.name(), "Prod: BHPTarget")); - well_count += not_equal(prod1.THPTarget, prod2.THPTarget, well_msg(well1.name(), "Prod: THPTarget")); - well_count += not_equal(prod1.VFPTableNumber, prod2.VFPTableNumber, well_msg(well1.name(), "Prod: VFPTableNumber")); - well_count += not_equal(prod1.ALQValue, prod2.ALQValue, well_msg(well1.name(), "Prod: ALQValue")); - well_count += not_equal(prod1.predictionMode, prod2.predictionMode, well_msg(well1.name(), "Prod: predictionMode")); - if (!prod1.predictionMode) { - well_count += not_equal(prod1.bhp_hist_limit, prod2.bhp_hist_limit, well_msg(well1.name(), "Prod: bhp_hist_limit")); - well_count += not_equal(prod1.thp_hist_limit, prod2.thp_hist_limit, well_msg(well1.name(), "Prod: thp_hist_limit")); - well_count += not_equal(prod1.BHPH, prod2.BHPH, well_msg(well1.name(), "Prod: BHPH")); - well_count += not_equal(prod1.THPH, prod2.THPH, well_msg(well1.name(), "Prod: THPH")); - } - well_count += not_equal(prod1.productionControls(), prod2.productionControls(), well_msg(well1.name(), "Prod: productionControls")); - if (well1.getStatus() == Well::Status::OPEN) - well_count += not_equal(prod1.controlMode, prod2.controlMode, well_msg(well1.name(), "Prod: controlMode")); - well_count += not_equal(prod1.whistctl_cmode, prod2.whistctl_cmode, well_msg(well1.name(), "Prod: whistctl_cmode")); - } - { - const auto& inj1 = well1.getInjectionProperties(); - const auto& inj2 = well2.getInjectionProperties(); - - well_count += not_equal(inj1.name, inj2.name, well_msg(well1.name(), "Well::Inj: name")); - well_count += not_equal(inj1.surfaceInjectionRate, inj2.surfaceInjectionRate, well_msg(well1.name(), "Well::Inj: surfaceInjectionRate")); - well_count += not_equal(inj1.reservoirInjectionRate, inj2.reservoirInjectionRate, well_msg(well1.name(), "Well::Inj: reservoirInjectionRate")); - well_count += not_equal(inj1.BHPTarget, inj2.BHPTarget, well_msg(well1.name(), "Well::Inj: BHPTarget")); - well_count += not_equal(inj1.THPTarget, inj2.THPTarget, well_msg(well1.name(), "Well::Inj: THPTarget")); - well_count += not_equal(inj1.bhp_hist_limit, inj2.bhp_hist_limit, well_msg(well1.name(), "Well::Inj: bhp_hist_limit")); - well_count += not_equal(inj1.thp_hist_limit, inj2.thp_hist_limit, well_msg(well1.name(), "Well::Inj: thp_hist_limit")); - well_count += not_equal(inj1.BHPH, inj2.BHPH, well_msg(well1.name(), "Well::Inj: BHPH")); - well_count += not_equal(inj1.THPH, inj2.THPH, well_msg(well1.name(), "Well::Inj: THPH")); - well_count += not_equal(inj1.VFPTableNumber, inj2.VFPTableNumber, well_msg(well1.name(), "Well::Inj: VFPTableNumber")); - well_count += not_equal(inj1.predictionMode, inj2.predictionMode, well_msg(well1.name(), "Well::Inj: predictionMode")); - well_count += not_equal(inj1.injectionControls, inj2.injectionControls, well_msg(well1.name(), "Well::Inj: injectionControls")); - well_count += not_equal(inj1.injectorType, inj2.injectorType, well_msg(well1.name(), "Well::Inj: injectorType")); - well_count += not_equal(inj1.controlMode, inj2.controlMode, well_msg(well1.name(), "Well::Inj: controlMode")); - } - - { - well_count += well2.firstTimeStep() > report_step; - well_count += not_equal( well1.groupName(), well2.groupName(), well_msg(well1.name(), "Well: groupName")); - well_count += not_equal( well1.getHeadI(), well2.getHeadI(), well_msg(well1.name(), "Well: getHeadI")); - well_count += not_equal( well1.getHeadJ(), well2.getHeadJ(), well_msg(well1.name(), "Well: getHeadJ")); - well_count += not_equal( well1.getRefDepth(), well2.getRefDepth(), well_msg(well1.name(), "Well: getRefDepth")); - well_count += not_equal( well1.isMultiSegment(), well2.isMultiSegment() , well_msg(well1.name(), "Well: isMultiSegment")); - well_count += not_equal( well1.isAvailableForGroupControl(), well2.isAvailableForGroupControl() , well_msg(well1.name(), "Well: isAvailableForGroupControl")); - well_count += not_equal( well1.getGuideRate(), well2.getGuideRate(), well_msg(well1.name(), "Well: getGuideRate")); - well_count += not_equal( well1.getGuideRatePhase(), well2.getGuideRatePhase(), well_msg(well1.name(), "Well: getGuideRatePhase")); - well_count += not_equal( well1.getGuideRateScalingFactor(), well2.getGuideRateScalingFactor(), well_msg(well1.name(), "Well: getGuideRateScalingFactor")); - well_count += not_equal( well1.predictionMode(), well2.predictionMode(), well_msg(well1.name(), "Well: predictionMode")); - well_count += not_equal( well1.canOpen(), well2.canOpen(), well_msg(well1.name(), "Well: canOpen")); - well_count += not_equal( well1.isProducer(), well2.isProducer(), well_msg(well1.name(), "Well: isProducer")); - well_count += not_equal( well1.isInjector(), well2.isInjector(), well_msg(well1.name(), "Well: isInjector")); - if (well1.isInjector()) - well_count += not_equal( well1.injectorType(), well2.injectorType(), well_msg(well1.name(), "Well1: injectorType")); - well_count += not_equal( well1.seqIndex(), well2.seqIndex(), well_msg(well1.name(), "Well: seqIndex")); - well_count += not_equal( well1.getAutomaticShutIn(), well2.getAutomaticShutIn(), well_msg(well1.name(), "Well: getAutomaticShutIn")); - well_count += not_equal( well1.getAllowCrossFlow(), well2.getAllowCrossFlow(), well_msg(well1.name(), "Well: getAllowCrossFlow")); - well_count += not_equal( well1.getSolventFraction(), well2.getSolventFraction(), well_msg(well1.name(), "Well: getSolventFraction")); - well_count += not_equal( well1.getStatus(), well2.getStatus(), well_msg(well1.name(), "Well: getStatus")); - //well_count += not_equal( well1.getInjectionProperties(), well2.getInjectionProperties(), "Well: getInjectionProperties"); - - - if (well1.isProducer()) - well_count += not_equal( well1.getPreferredPhase(), well2.getPreferredPhase(), well_msg(well1.name(), "Well: getPreferredPhase")); - well_count += not_equal( well1.getDrainageRadius(), well2.getDrainageRadius(), well_msg(well1.name(), "Well: getDrainageRadius")); - well_count += not_equal( well1.getEfficiencyFactor(), well2.getEfficiencyFactor(), well_msg(well1.name(), "Well: getEfficiencyFactor")); - } - count += well_count; - if (well_count > 0) - std::cerr << std::endl; - } - return (count == 0); -} -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/ScheduleTypes.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/ScheduleTypes.cpp deleted file mode 100644 index 3224dd07a8..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/ScheduleTypes.cpp +++ /dev/null @@ -1,261 +0,0 @@ -/* - Copyright 2020 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ -#include - -#include - -namespace Opm { - -namespace ecl { - -static constexpr int producer = 1; -static constexpr int oil_injector = 2; -static constexpr int water_injector = 3; -static constexpr int gas_injector = 4; - - -static constexpr int oil_phase = 1; -static constexpr int water_phase = 2; -static constexpr int gas_phase = 3; -static constexpr int liquid_phase = 4; - - -Phase from_ecl_phase(int ecl_phase) { - switch(ecl_phase) { - case ecl::oil_phase: - return Phase::OIL; - case ecl::water_phase: - return Phase::WATER; - case ecl::gas_phase: - return Phase::GAS; - case ecl::liquid_phase: - throw std::logic_error("Sorry wells with preferred phase:LIQUID is not supported"); - default: - throw std::invalid_argument("Invalid integer well phase"); - } -} -} - - -namespace { - -Phase from_injector_type(InjectorType injector_type) { - switch (injector_type) { - case InjectorType::WATER: - return Phase::WATER; - case InjectorType::GAS: - return Phase::GAS; - case InjectorType::OIL: - return Phase::OIL; - default: - throw std::logic_error("Unhandled injector type"); - } -} - -} - - -bool WellType::producer(int ecl_wtype) { - return ecl_wtype == ecl::producer; -} - -bool WellType::oil_injector(int ecl_wtype) { - return ecl_wtype == ecl::oil_injector; -} - -bool WellType::water_injector(int ecl_wtype) { - return ecl_wtype == ecl::water_injector; -} - -bool WellType::gas_injector(int ecl_wtype) { - return ecl_wtype == ecl::gas_injector; -} - - -WellType::WellType(int ecl_wtype, int ecl_phase) : - injection_phase(ecl::from_ecl_phase(ecl_phase)), - m_welspecs_phase(ecl::from_ecl_phase(ecl_phase)) -{ - this->m_producer = false; - switch (ecl_wtype) { - case ecl::producer: - this->m_producer = true; - break; - case ecl::oil_injector: - this->injection_phase = Phase::OIL; - break; - case ecl::water_injector: - this->injection_phase = Phase::WATER; - break; - case ecl::gas_injector: - this->injection_phase = Phase::GAS; - break; - default: - throw std::invalid_argument("Invalid integer well type ID"); - } - -} - -WellType::WellType(bool producer, Phase phase) : - m_producer(producer), - injection_phase(phase), - m_welspecs_phase(phase) -{} - -WellType::WellType(Phase phase) : - WellType(true, phase) -{} - -WellType WellType::serializeObject() -{ - WellType result; - result.m_producer = true; - result.injection_phase = Phase::OIL; - result.m_welspecs_phase = Phase::WATER; - - return result; -} - -bool WellType::update(bool producer_arg) { - if (this->m_producer != producer_arg) { - this->m_producer = producer_arg; - return true; - } else - return false; -} - -bool WellType::update(InjectorType injector_type) { - bool ret_value = false; - if (this->m_producer) { - this->m_producer = false; - ret_value = true; - } - - auto inj_phase = from_injector_type(injector_type); - if (this->injection_phase != inj_phase) { - this->injection_phase = inj_phase; - ret_value = true; - } - - return ret_value; -} - -bool WellType::producer() const { - return this->m_producer; -} - -bool WellType::injector() const { - return !this->m_producer; -} - -int WellType::ecl_wtype() const { - if (this->m_producer) - return ecl::producer; - - switch (this->injection_phase) { - case Phase::OIL: - return ecl::oil_injector; - case Phase::WATER: - return ecl::water_injector; - case Phase::GAS: - return ecl::gas_injector; - default: - throw std::logic_error("Internal error - should not be here"); - } -} - -/* - The enum Runspec::Phase is maybe not very well suited; it has lots of 'extra' - phases like ENERGY and BRINE, and at the same time it is missing the phase - LIQUID which should map to ecl value 4. -*/ - -int WellType::ecl_phase() const { - switch (this->m_welspecs_phase) { - case Phase::OIL: - return ecl::oil_phase; - case Phase::WATER: - return ecl::water_phase; - case Phase::GAS: - return ecl::gas_phase; - default: - throw std::logic_error("Member has invalid phase"); - } -} - - -Phase WellType::preferred_phase() const { - return this->m_welspecs_phase; -} - - -bool WellType::operator==(const WellType& other) const { - return this->m_welspecs_phase == other.m_welspecs_phase && - this->injection_phase == other.injection_phase && - this->m_producer == other.m_producer; -} - - -InjectorType WellType::injector_type() const { - if (this->producer()) - throw std::invalid_argument("Asked for injector type for a well which is a producer"); - - switch (this->injection_phase) { - case Phase::OIL: - return InjectorType::OIL; - case Phase::WATER: - return InjectorType::WATER; - case Phase::GAS: - return InjectorType::GAS; - default: - throw std::logic_error("Member has invalid phase"); - } - -} - - -const std::string InjectorType2String( InjectorType enumValue ) { - switch( enumValue ) { - case InjectorType::OIL: - return "OIL"; - case InjectorType::GAS: - return "GAS"; - case InjectorType::WATER: - return "WATER"; - case InjectorType::MULTI: - return "MULTI"; - default: - throw std::invalid_argument("unhandled enum value"); - } -} - -InjectorType InjectorTypeFromString( const std::string& stringValue ) { - if (stringValue == "OIL") - return InjectorType::OIL; - else if (stringValue == "WATER") - return InjectorType::WATER; - else if (stringValue == "WAT") - return InjectorType::WATER; - else if (stringValue == "GAS") - return InjectorType::GAS; - else if (stringValue == "MULTI") - return InjectorType::MULTI; - else - throw std::invalid_argument("Unknown enum state string: " + stringValue ); -}} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/SummaryState.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/SummaryState.cpp deleted file mode 100644 index 7d0ca885ba..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/SummaryState.cpp +++ /dev/null @@ -1,357 +0,0 @@ -/* - Copyright 2016 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include -#include -#include -#include -#include - -#ifdef _WIN32 -#include "cross-platform/windows/Substitutes.hpp" -#endif - -#include - -namespace Opm{ -namespace { - - bool is_total(const std::string& key) { - static const std::vector totals = {"OPT" , "GPT" , "WPT" , "GIT", "WIT", "OPTF" , "OPTS" , "OIT" , "OVPT" , "OVIT" , "MWT" , - "WVPT" , "WVIT" , "GMT" , "GPTF" , "SGT" , "GST" , "FGT" , "GCT" , "GIMT" , - "WGPT" , "WGIT" , "EGT" , "EXGT" , "GVPT" , "GVIT" , "LPT" , "VPT" , "VIT" , "NPT" , "NIT", - "CPT", "CIT"}; - - auto sep_pos = key.find(':'); - - // Starting with ':' - that is probably broken?! - if (sep_pos == 0) - return false; - - if (sep_pos == std::string::npos) { - for (const auto& total : totals) { - if (key.compare(1, total.size(), total) == 0) - return true; - } - - return false; - } else - return is_total(key.substr(0,sep_pos)); - } - -} - - SummaryState::SummaryState(std::chrono::system_clock::time_point sim_start_arg): - sim_start(sim_start_arg) - { - this->update_elapsed(0); - } - - - void SummaryState::update_elapsed(double delta) { - this->elapsed += delta; - std::time_t sim_time = std::chrono::system_clock::to_time_t( this->sim_start + std::chrono::microseconds(static_cast(1000000*delta))); - struct tm ts; - gmtime_r(&sim_time, &ts); - int year = ts.tm_year + 1900; - int month = ts.tm_mon; - int day = ts.tm_mday; - - this->update("YEAR", year); - this->update("MNTH", month); - this->update("DAY", day); - } - - - double SummaryState::get_elapsed() const { - return this->elapsed; - } - - - void SummaryState::update(const std::string& key, double value) { - if (is_total(key)) - this->values[key] += value; - else - this->values[key] = value; - } - - - void SummaryState::update_group_var(const std::string& group, const std::string& var, double value) { - std::string key = var + ":" + group; - if (is_total(var)) { - this->values[key] += value; - this->group_values[var][group] += value; - } else { - this->values[key] = value; - this->group_values[var][group] = value; - } - this->m_groups.insert(group); - } - - void SummaryState::update_well_var(const std::string& well, const std::string& var, double value) { - std::string key = var + ":" + well; - if (is_total(var)) { - this->values[key] += value; - this->well_values[var][well] += value; - } else { - this->values[key] = value; - this->well_values[var][well] = value; - } - this->m_wells.insert(well); - } - - - void SummaryState::set(const std::string& key, double value) { - this->values[key] = value; - } - - - bool SummaryState::has(const std::string& key) const { - return (this->values.find(key) != this->values.end()); - } - - - double SummaryState::get(const std::string& key) const { - const auto iter = this->values.find(key); - if (iter == this->values.end()) - throw std::out_of_range("No such key: " + key); - - return iter->second; - } - - bool SummaryState::has_well_var(const std::string& well, const std::string& var) const { - const auto& var_iter = this->well_values.find(var); - if (var_iter == this->well_values.end()) - return false; - - const auto& well_iter = var_iter->second.find(well); - if (well_iter == var_iter->second.end()) - return false; - - return true; - } - - double SummaryState::get_well_var(const std::string& well, const std::string& var) const { - return this->well_values.at(var).at(well); - } - - bool SummaryState::has_group_var(const std::string& group, const std::string& var) const { - const auto& var_iter = this->group_values.find(var); - if (var_iter == this->group_values.end()) - return false; - - const auto& group_iter = var_iter->second.find(group); - if (group_iter == var_iter->second.end()) - return false; - - return true; - } - - double SummaryState::get_group_var(const std::string& group, const std::string& var) const { - return this->group_values.at(var).at(group); - } - - SummaryState::const_iterator SummaryState::begin() const { - return this->values.begin(); - } - - - SummaryState::const_iterator SummaryState::end() const { - return this->values.end(); - } - - - std::vector SummaryState::wells(const std::string& var) const { - const auto& var_iter = this->well_values.find(var); - if (var_iter == this->well_values.end()) - return {}; - - std::vector wells; - for (const auto& pair : var_iter->second) - wells.push_back(pair.first); - return wells; - } - - - std::vector SummaryState::wells() const { - return std::vector(this->m_wells.begin(), this->m_wells.end()); - } - - - std::vector SummaryState::groups(const std::string& var) const { - const auto& var_iter = this->group_values.find(var); - if (var_iter == this->group_values.end()) - return {}; - - std::vector groups; - for (const auto& pair : var_iter->second) - groups.push_back(pair.first); - return groups; - } - - - std::vector SummaryState::groups() const { - return std::vector(this->m_groups.begin(), this->m_groups.end()); - } - - std::size_t SummaryState::num_wells() const { - return this->m_wells.size(); - } - - std::size_t SummaryState::size() const { - return this->values.size(); - } - - -namespace { - class Serializer { - public: - Serializer() = default; - explicit Serializer(const std::vector& buffer_arg) : - buffer(buffer_arg) - {} - - - template - void put(const T& value) { - this->pack(std::addressof(value), sizeof(T)); - } - - - - template - T get() { - T value; - std::memcpy(&value, &this->buffer[pos], sizeof(T)); - this->pos += sizeof(T); - return value; - } - - std::vector buffer; - private: - void pack(const void * ptr, std::size_t value_size) { - std::size_t write_pos = this->buffer.size(); - std::size_t new_size = write_pos + value_size; - this->buffer.resize( new_size ); - std::memcpy(&this->buffer[write_pos], ptr, value_size); - } - - std::size_t pos = 0; - }; - - template <> - void Serializer::put(const std::string& value) { - this->put(value.size()); - this->pack(value.c_str(), value.size()); - } - - template <> - std::string Serializer::get() { - std::string::size_type length = this->get(); - this->pos += length; - return {std::addressof(this->buffer[this->pos - length]), length}; - } - - void put_map(Serializer& ser, const std::unordered_map& values) { - ser.put(values.size()); - for (const auto& value_pair : values) { - ser.put(value_pair.first); - ser.put(value_pair.second); - } - } - -} - - std::vector SummaryState::serialize() const { - Serializer ser; - ser.put(this->elapsed); - put_map(ser, values); - - ser.put(this->well_values.size()); - for (const auto& well_var_pair : this->well_values) { - ser.put(well_var_pair.first); - put_map(ser, well_var_pair.second); - } - - ser.put(this->group_values.size()); - for (const auto& group_var_pair : this->group_values) { - ser.put(group_var_pair.first); - put_map(ser, group_var_pair.second); - } - - return std::move(ser.buffer); - } - - - void SummaryState::deserialize(const std::vector& buffer) { - this->values.clear(); - this->m_wells.clear(); - this->well_values.clear(); - this->m_groups.clear(); - this->group_values.clear(); - this->elapsed = 0; - - Serializer ser(buffer); - this->elapsed = ser.get(); - { - std::size_t num_values = ser.get(); - for (std::size_t index = 0; index < num_values; index++) { - std::string key = ser.get(); - double value = ser.get(); - this->update(key, value); - } - } - - { - std::size_t num_well_var = ser.get(); - for (std::size_t var_index = 0; var_index < num_well_var; var_index++) { - std::string var = ser.get(); - - std::size_t num_well = ser.get(); - for (std::size_t well_index=0; well_index < num_well; well_index++) { - std::string well = ser.get(); - double value = ser.get(); - this->update_well_var(well, var, value); - } - } - } - - { - std::size_t num_group_var = ser.get(); - for (std::size_t var_index = 0; var_index < num_group_var; var_index++) { - std::string var = ser.get(); - - std::size_t num_group = ser.get(); - for (std::size_t group_index=0; group_index < num_group; group_index++) { - std::string group = ser.get(); - double value = ser.get(); - this->update_group_var(group, var, value); - } - } - } - } - - std::ostream& operator<<(std::ostream& stream, const SummaryState& st) { - stream << "Simulated seconds: " << st.get_elapsed() << std::endl; - for (const auto& value_pair : st) - stream << std::setw(17) << value_pair.first << ": " << value_pair.second << std::endl; - - return stream; - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/TimeMap.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/TimeMap.cpp deleted file mode 100644 index 9dce158998..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/TimeMap.cpp +++ /dev/null @@ -1,469 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include -#include -#include -#include - -#include - -#include - -#include -#include -#include -#include -#include -#include -#include - - -constexpr const std::time_t invalid_time = -1; - -namespace Opm { - -namespace { - const std::map month_indices = {{"JAN", 1}, - {"FEB", 2}, - {"MAR", 3}, - {"APR", 4}, - {"MAI", 5}, - {"MAY", 5}, - {"JUN", 6}, - {"JUL", 7}, - {"JLY", 7}, - {"AUG", 8}, - {"SEP", 9}, - {"OCT", 10}, - {"OKT", 10}, - {"NOV", 11}, - {"DEC", 12}, - {"DES", 12}}; - -} - - void TimeMap::init_start(std::time_t start_time) { - auto timestamp = TimeStampUTC{start_time}; - - this->m_timeList.push_back(start_time); - this->m_first_timestep_months.push_back({0, timestamp}); - this->m_first_timestep_years.push_back({0, timestamp}); - } - - - TimeMap::TimeMap(const std::vector& time_points) { - if (time_points.empty()) - throw std::invalid_argument("Can not initialize with empty list of time points"); - - this->init_start(time_points[0]); - for (std::size_t ti = 1; ti < time_points.size(); ti++) { - if (time_points[ti] == invalid_time) { - this->m_timeList.push_back(invalid_time); - this->m_restart_offset += 1; - } - else - this->addTime( time_points[ti] ); - } - if (this->m_restart_offset > 0) - this->m_restart_offset += 1; - } - - TimeMap::TimeMap( const Deck& deck, const std::pair& restart) { - bool skiprest = deck.hasKeyword(); - { - std::time_t start_time; - if (deck.hasKeyword("START")) { - // Use the 'START' keyword to find out the start date (if the - // keyword was specified) - const auto& keyword = deck.getKeyword("START"); - start_time = timeFromEclipse(keyword.getRecord(0)); - } else { - // The default start date is not specified in the Eclipse - // reference manual. We hence just assume it is same as for - // the START keyword for Eclipse R100, i.e., January 1st, - // 1983... - start_time = mkdate(1983, 1, 1); - } - this->init_start(start_time); - } - - auto restart_time = restart.first; - this->m_restart_offset = restart.second; - bool skip = false; - - for (std::size_t it = 1; it < this->m_restart_offset; it++) - this->m_timeList.push_back(invalid_time); - - if (this->m_restart_offset > 0) { - if (skiprest) - skip = true; - else { - this->m_timeList.push_back(restart_time); - skip = false; - } - } - - for( const auto& keyword : SCHEDULESection(deck)) { - // We're only interested in "TSTEP" and "DATES" keywords, - // so we ignore everything else here... - if (keyword.name() != "TSTEP" && keyword.name() != "DATES") - continue; - - if (keyword.name() == "DATES") { - for (size_t recordIndex = 0; recordIndex < keyword.size(); recordIndex++) { - const auto &record = keyword.getRecord(recordIndex); - const std::time_t nextTime = TimeMap::timeFromEclipse(record); - if (nextTime == restart_time) - skip = false; - - if (!skip) - addTime(nextTime); - } - - continue; - } - - if (skip) - continue; - - addFromTSTEPKeyword(keyword); - } - - /* - There is a coupling between the presence of the SKIPREST keyword and - the restart argument: The restart argument indicates whether this is - deck should be parsed as restarted deck. If m_restart_offset == 0 we do - not interpret this as restart situation and the presence of SKIPREST - is ignored. In the opposite case we verify - post loading - that we - have actually located the restart date - otherwise "something is - broken". - */ - if (this->m_restart_offset != 0) { - if (skiprest) { - const auto iter = std::find(this->m_timeList.begin(), this->m_timeList.end(), restart_time); - if (iter == this->m_timeList.end()) { - TimeStampUTC ts(restart_time); - throw std::invalid_argument("Could not find restart date " + std::to_string(ts.year()) + "-" + std::to_string(ts.month()) + "-" + std::to_string(ts.day())); - } - this->m_skiprest = true; - } - } - } - - TimeMap TimeMap::serializeObject() - { - TimeMap result({123}); - result.m_skiprest = true; - result.m_restart_offset = 4; - - return result; - } - - - size_t TimeMap::numTimesteps() const { - return m_timeList.size() - 1; - } - - - std::time_t TimeMap::getStartTime(size_t tStepIdx) const { - return this->operator[](tStepIdx); - } - - std::time_t TimeMap::getEndTime() const { - return this->operator[]( this->size( ) - 1); - } - - - double TimeMap::seconds(size_t timeStep) const { - return std::difftime( this->operator[](timeStep), this->operator[](0)); - } - - double TimeMap::getTotalTime() const - { - if (m_timeList.size() < 2) - return 0.0; - - return std::difftime(this->m_timeList.back(), - this->m_timeList.front()); - } - - void TimeMap::addTime(std::time_t newTime) { - const std::time_t lastTime = m_timeList.back(); - const size_t step = m_timeList.size(); - if (newTime > lastTime) { - const auto nw = TimeStampUTC{ newTime }; - const auto last = TimeStampUTC{ lastTime }; - - const auto new_month = nw .month(); - const auto last_month = last.month(); - - const auto new_year = nw .year(); - const auto last_year = last.year(); - - if (new_month != last_month || new_year != last_year) - m_first_timestep_months.push_back({step, nw}); - - if (new_year != last_year) - m_first_timestep_years.push_back({step, nw}); - - m_timeList.push_back(newTime); - } else - throw std::invalid_argument("Times added must be in strictly increasing order."); - } - - void TimeMap::addTStep(int64_t step) { - addTime(forward(m_timeList.back(), step)); - } - - size_t TimeMap::size() const { - return m_timeList.size(); - } - - size_t TimeMap::last() const { - return this->numTimesteps(); - } - - const std::map& TimeMap::eclipseMonthIndices() { - return month_indices; - } - - - std::time_t TimeMap::timeFromEclipse(const DeckRecord &dateRecord) { - const auto &dayItem = dateRecord.getItem(0); - const auto &monthItem = dateRecord.getItem(1); - const auto &yearItem = dateRecord.getItem(2); - const auto &timeItem = dateRecord.getItem(3); - - int hour = 0, min = 0, second = 0; - if (timeItem.hasValue(0)) { - if (sscanf(timeItem.get(0).c_str(), "%d:%d:%d" , &hour,&min,&second) != 3) { - hour = min = second = 0; - } - } - - // Accept lower- and mixed-case month names. - std::string monthname = uppercase(monthItem.get(0)); - - std::time_t date = mkdatetime(yearItem.get(0), - eclipseMonthIndices().at(monthname), - dayItem.get(0), - hour, - min, - second); - return date; - } - - - void TimeMap::addFromTSTEPKeyword(const DeckKeyword &TSTEPKeyword) { - if (TSTEPKeyword.name() != "TSTEP") - throw std::invalid_argument("Method requires TSTEP keyword input."); - { - const auto &item = TSTEPKeyword.getRecord(0).getItem(0); - - for (size_t itemIndex = 0; itemIndex < item.data_size(); itemIndex++) { - const int64_t seconds = static_cast(item.getSIDouble(itemIndex)); - addTStep(seconds); - } - } - } - - double TimeMap::getTimeStepLength(size_t tStepIdx) const - { - assert(tStepIdx < numTimesteps()); - - return std::difftime(this->m_timeList[tStepIdx + 1], - this->m_timeList[tStepIdx + 0]); - } - - double TimeMap::getTimePassedUntil(size_t tLevelIdx) const - { - assert(tLevelIdx < m_timeList.size()); - - return std::difftime(this->m_timeList[tLevelIdx], - this->m_timeList.front()); - } - - const std::vector& TimeMap::timeList() const - { - return m_timeList; - } - - - bool TimeMap::operator==(const TimeMap& data) const - { - return this->m_timeList == data.m_timeList && - this->m_first_timestep_months == data.m_first_timestep_months && - this->m_first_timestep_years == data.m_first_timestep_years && - this->m_restart_offset == data.m_restart_offset; - } - - bool TimeMap::isTimestepInFirstOfMonthsYearsSequence(size_t timestep, bool years, size_t start_timestep, size_t frequency) const { - bool timestep_first_of_month_year = false; - const auto& timesteps = (years) ? m_first_timestep_years : m_first_timestep_months; - - auto same_step = [timestep](const StepData& sd) { return sd.stepnumber == timestep; }; - auto ci_timestep = std::find_if(timesteps.begin(), timesteps.end(), same_step); - if (ci_timestep != timesteps.end() && ci_timestep != timesteps.begin()) { - if (1 >= frequency) { - timestep_first_of_month_year = true; - } else { //Frequency given - timestep_first_of_month_year = isTimestepInFreqSequence(timestep, start_timestep, frequency, years); - } - } - return timestep_first_of_month_year; - } - - - // Return true if the step is the first of each n-month or n-month - // period, starting from start_timestep - 1, with n = frequency. - bool TimeMap::isTimestepInFreqSequence (size_t timestep, size_t start_timestep, size_t frequency, bool years) const { - // Find iterator to data for 'start_timestep' or first - // in-sequence step following it, set start_year and - // start_month. - const auto& timesteps = (years) ? m_first_timestep_years : m_first_timestep_months; - auto compare_stepnumber = [](const StepData& sd, size_t value) { return sd.stepnumber < value; }; - auto ci_start_timestep = std::lower_bound(timesteps.begin(), timesteps.end(), start_timestep - 1, compare_stepnumber); - if (ci_start_timestep == timesteps.end()) { - // We are after the end of the sequence. - return false; - } - const int start_year = ci_start_timestep->timestamp.year(); - const int start_month = ci_start_timestep->timestamp.month() - 1; // For 0-indexing. - - // Find iterator to data for 'timestep'. - auto same_step = [timestep](const StepData& sd) { return sd.stepnumber == timestep; }; - auto ci_timestep = std::find_if(timesteps.begin(), timesteps.end(), same_step); - // The ci_timestep can be assumed to be different from - // timesteps.end(), or we would not be in this function. - // If, however, it is at or before the first timestep we should - // always return false. - if (ci_timestep <= ci_start_timestep) { - return false; - } - - if (years) { - // Year logic. - const int my_year = ci_timestep->timestamp.year(); - if ((my_year - start_year) % frequency == 0) { - return true; - } else { - // Check if we are in a new (frequency-year) period. - const auto prev_it = ci_timestep - 1; - const int prev_year = prev_it->timestamp.year(); - return (my_year - start_year)/frequency > (prev_year - start_year)/frequency; - } - } else { - // Month logic. - const int my_year = ci_timestep->timestamp.year(); - const int my_month = (my_year - start_year) * 12 + ci_timestep->timestamp.month() - 1; - // my_month is now the count of months since start_month. - assert(my_month > start_month); - if ((my_month - start_month) % frequency == 0) { - return true; - } else { - // Check if we are in a new (frequency-month) period. - const auto prev_it = ci_timestep - 1; - const int prev_year = prev_it->timestamp.year(); - const int prev_month = (prev_year - start_year) * 12 + prev_it->timestamp.month() - 1; - return (my_month - start_month)/frequency > (prev_month - start_month)/frequency; - } - } - } - - - // vec is assumed to be sorted - size_t TimeMap::closest(const std::vector & vec, size_t value) const - { - std::vector::const_iterator ci = - std::lower_bound(vec.begin(), vec.end(), value); - if (ci != vec.end()) { - return *ci; - } - return 0; - } - - - std::time_t TimeMap::operator[] (size_t index) const { - if (index >= m_timeList.size()) - throw std::invalid_argument("Index out of range"); - - if (index > 0 && index < this->m_restart_offset) - throw std::invalid_argument("Tried to get time information from the base case in restarted run"); - - return m_timeList[index]; - } - - std::time_t TimeMap::mkdate(int in_year, int in_month, int in_day) { - return mkdatetime(in_year , in_month , in_day, 0,0,0); - } - - std::time_t TimeMap::mkdatetime(int in_year, int in_month, int in_day, int hour, int minute, int second) { - const auto tp = TimeStampUTC{ TimeStampUTC::YMD { in_year, in_month, in_day } } - .hour(hour).minutes(minute).seconds(second); - - std::time_t t = asTimeT(tp); - { - /* - The underlying mktime( ) function will happily wrap - around dates like January 33, this function will check - that no such wrap-around has taken place. - */ - const auto check = TimeStampUTC{ t }; - if ((in_day != check.day()) || (in_month != check.month()) || (in_year != check.year())) - throw std::invalid_argument("Invalid input arguments for date."); - } - return t; - } - - std::time_t TimeMap::forward(std::time_t t, int64_t seconds) { - return t + seconds; - } - - std::time_t TimeMap::forward(std::time_t t, int64_t hours, int64_t minutes, int64_t seconds) { - return t + seconds + minutes * 60 + hours * 3600; - } - - std::size_t TimeMap::restart_offset() const { - return this->m_restart_offset; - } - - bool TimeMap::skiprest() const { - return this->m_skiprest; - } - -std::ostream& operator<<(std::ostream& stream, const TimeMap& tm) { - std::stringstream ss; - ss << "{"; - std::size_t index = 0; - for (const auto& tp : tm.timeList()) { - auto ts = TimeStampUTC(tp); - ss << ts.year() << "-" << std::setfill('0') << std::setw(2) << ts.month() << "-" << std::setfill('0') << std::setw(2) << ts.day(); - index += 1; - if (index < tm.timeList().size()) - ss << ", "; - if (index % 12 == 0) - ss << std::endl; - } - ss << "}"; - return stream << ss.str(); -} -} - - diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQASTNode.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQASTNode.cpp deleted file mode 100644 index 1d6b16bc21..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQASTNode.cpp +++ /dev/null @@ -1,320 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ -#ifdef _WIN32 -#include "cross-platform/windows/Substitutes.hpp" -#else -#include -#endif - -#include -#include -#include -#include - -namespace Opm { - -UDQASTNode::UDQASTNode() : - UDQASTNode(UDQTokenType::error) -{} - - -UDQASTNode::UDQASTNode(UDQTokenType type_arg) : - var_type(UDQVarType::NONE), - type(type_arg) -{ - if (type == UDQTokenType::error) - return; - - if (type == UDQTokenType::binary_op_add) - return; - - if (type == UDQTokenType::binary_op_sub) - return; - throw std::invalid_argument("The one argument constructor is only available for error and end"); -} - - -namespace { - -UDQVarType init_type(UDQTokenType token_type) -{ - if (token_type == UDQTokenType::number) - return UDQVarType::SCALAR; - - if (UDQ::scalarFunc(token_type)) - return UDQVarType::SCALAR; - - return UDQVarType::NONE; -} - - -} - - -UDQASTNode::UDQASTNode(double scalar_value_arg) : - var_type(init_type(UDQTokenType::number)), - type(UDQTokenType::number), - scalar_value(scalar_value_arg) -{} - - -UDQASTNode::UDQASTNode(UDQTokenType type_arg, const std::string& func_name) : - var_type(init_type(type_arg)), - type(type_arg), - string_value(func_name) -{ -} - - -UDQASTNode::UDQASTNode(UDQTokenType type_arg, - const std::string& func_name, - const UDQASTNode& left_arg) - : UDQASTNode(type_arg, func_name) -{ - if (UDQ::scalarFunc(type_arg)) - this->var_type = UDQVarType::SCALAR; - else - this->var_type = left_arg.var_type; - this->left = std::make_unique(left_arg); -} - - -UDQASTNode::UDQASTNode(UDQTokenType type_arg, - const std::string& func_name, - const UDQASTNode& left_arg, - const UDQASTNode& right_arg) : - var_type(init_type(type_arg)), - type(type_arg), - string_value(func_name) -{ - this->set_left(left_arg); - this->set_right(right_arg); -} - - -UDQASTNode UDQASTNode::serializeObject() -{ - UDQASTNode result; - result.var_type = UDQVarType::REGION_VAR; - result.type = UDQTokenType::error; - result.string_value = "test1"; - result.selector = {"test2"}; - result.scalar_value = 1.0; - UDQASTNode left = result; - result.left = std::make_shared(left); - - return result; -} - -UDQASTNode::UDQASTNode(UDQTokenType type_arg, - const std::string& string_value_arg, - const std::vector& selector_arg) : - var_type(init_type(type_arg)), - type(type_arg), - string_value(string_value_arg), - selector(selector_arg) -{ - if (type_arg == UDQTokenType::number) - this->scalar_value = std::stod(this->string_value); - - if (type_arg == UDQTokenType::ecl_expr) { - this->var_type = UDQ::targetType(this->string_value, this->selector); - - } - - if (this->var_type == UDQVarType::CONNECTION_VAR || - this->var_type == UDQVarType::REGION_VAR || - this->var_type == UDQVarType::SEGMENT_VAR || - this->var_type == UDQVarType::AQUIFER_VAR || - this->var_type == UDQVarType::BLOCK_VAR) - throw std::logic_error("UDQ variable of type: " + UDQ::typeName(this->var_type) + " not yet supported in flow"); -} - - - - -UDQSet UDQASTNode::eval(UDQVarType target_type, const UDQContext& context) const { - if (this->type == UDQTokenType::ecl_expr) { - auto data_type = UDQ::targetType(this->string_value); - if (data_type == UDQVarType::WELL_VAR) { - const auto& wells = context.wells(); - - if (this->selector.size() > 0) { - const std::string& well_pattern = this->selector[0]; - if (well_pattern.find("*") == std::string::npos) - return UDQSet::scalar(this->string_value, context.get_well_var(well_pattern, this->string_value)); - else { - auto res = UDQSet::wells(this->string_value, wells); - int fnmatch_flags = 0; - for (const auto& well : wells) { - if (fnmatch(well_pattern.c_str(), well.c_str(), fnmatch_flags) == 0) { - if (context.has_well_var(well, this->string_value)) - res.assign(well, context.get_well_var(well, this->string_value)); - } - } - return res; - } - } else { - auto res = UDQSet::wells(this->string_value, wells); - for (const auto& well : wells) { - if (context.has_well_var(well, this->string_value)) - res.assign(well, context.get_well_var(well, this->string_value)); - } - return res; - } - } - - if (data_type == UDQVarType::GROUP_VAR) { - if (this->selector.size() > 0) { - const std::string& group_pattern = this->selector[0]; - if (group_pattern.find("*") == std::string::npos) - return UDQSet::scalar(this->string_value, context.get_group_var(group_pattern, this->string_value)); - else - throw std::logic_error("Group names with wildcards is not yet supported"); - } else { - const auto& groups = context.groups(); - auto res = UDQSet::groups(this->string_value, groups); - for (const auto& group : groups) { - if (context.has_group_var(group, this->string_value)) - res.assign(group, context.get_group_var(group, this->string_value)); - } - return res; - } - } - - if (data_type == UDQVarType::FIELD_VAR) - return UDQSet::scalar(this->string_value, context.get(this->string_value)); - - throw std::logic_error("Should not be here: var_type: " + UDQ::typeName(data_type)); - } - - - if (UDQ::scalarFunc(this->type)) { - const auto& udqft = context.function_table(); - const UDQScalarFunction& func = dynamic_cast(udqft.get(this->string_value)); - return func.eval( this->left->eval(target_type, context) ); - } - - - if (UDQ::elementalUnaryFunc(this->type)) { - auto func_arg = this->left->eval(target_type, context); - - const auto& udqft = context.function_table(); - const UDQUnaryElementalFunction& func = dynamic_cast(udqft.get(this->string_value)); - return func.eval(func_arg); - } - - if (UDQ::binaryFunc(this->type)) { - auto left_arg = this->left->eval(target_type, context); - auto right_arg = this->right->eval(target_type, context); - - const auto& udqft = context.function_table(); - const UDQBinaryFunction& func = dynamic_cast(udqft.get(this->string_value)); - auto res = func.eval(left_arg, right_arg); - return res; - } - - if (this->type == UDQTokenType::number) { - switch(target_type) { - case UDQVarType::WELL_VAR: - return UDQSet::wells(this->string_value, context.wells(), this->scalar_value); - case UDQVarType::GROUP_VAR: - return UDQSet::groups(this->string_value, context.groups(), this->scalar_value); - case UDQVarType::SCALAR: - return UDQSet::scalar(this->string_value, this->scalar_value); - case UDQVarType::FIELD_VAR: - return UDQSet::field(this->string_value, this->scalar_value); - default: - throw std::invalid_argument("Unsupported target_type: " + std::to_string(static_cast(target_type))); - } - } - - throw std::invalid_argument("Should not be here ... this->type: " + std::to_string(static_cast(this->type)) + " string_value: <" + this->string_value + ">"); -} - -void UDQASTNode::func_tokens(std::set& tokens) const { - tokens.insert( this->type ); - if (this->left) - this->left->func_tokens(tokens); - if (this->right) - this->right->func_tokens(tokens); -} - -std::set UDQASTNode::func_tokens() const { - std::set tokens; - this->func_tokens(tokens); - return tokens; -} - - -UDQASTNode* UDQASTNode::get_left() const { - return this->left.get(); -} - -UDQASTNode* UDQASTNode::get_right() const { - return this->right.get(); -} - - -void UDQASTNode::update_type(const UDQASTNode& arg) { - if (this->var_type == UDQVarType::NONE) - this->var_type = arg.var_type; - else - this->var_type = UDQ::coerce(this->var_type, arg.var_type); -} - - -bool UDQASTNode::valid() const { - return (this->type != UDQTokenType::error); -} - - -void UDQASTNode::set_left(const UDQASTNode& arg) { - this->left = std::make_unique(arg); - this->update_type(arg); -} - -void UDQASTNode::set_right(const UDQASTNode& arg) { - this->right = std::make_unique(arg); - this->update_type(arg); -} - -bool UDQASTNode::operator==(const UDQASTNode& data) const { - if ((this->left && !data.left) || - (!this->left && data.left)) - return false; - - if (this->left && !(*this->left == *data.left)) - return false; - - if ((this->right && !data.right) || - (!this->right && data.right)) - return false; - - if (this->right && !(*this->right == *data.right)) - return false; - - return type == data.type && - var_type == data.var_type && - string_value == data.string_value && - scalar_value == data.scalar_value && - selector == data.selector; -} - -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQActive.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQActive.cpp deleted file mode 100644 index d2649d6c99..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQActive.cpp +++ /dev/null @@ -1,196 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include -#include -#include -#include -#include - -namespace Opm { - -UDQActive UDQActive::serializeObject() -{ - UDQActive result; - result.input_data = {{1, "test1", "test2", UDAControl::WCONPROD_ORAT}}; - result.output_data = {{"test1", 1, 2, "test2", UDAControl::WCONPROD_ORAT}}; - result.udq_keys = {{"test1", 1}}; - result.wg_keys = {{"test2", 2}}; - - return result; -} - -std::size_t UDQActive::IUAD_size() const { - const auto& output = this->get_iuad(); - return output.size(); -} - -std::size_t UDQActive::IUAP_size() const { - const auto& output = this->get_iuap(); - return output.size(); -} - -UDQActive::operator bool() const { - return this->input_data.size() > 0; -} - -std::string UDQActive::udq_hash(const std::string& udq, UDAControl control) { - return udq + std::to_string(static_cast(control)); -} - -std::string UDQActive::wg_hash(const std::string& wgname, UDAControl control) { - return wgname + std::to_string(static_cast(control)); -} - -/* - We go through the current list of input records and compare with the supplied - arguments (uda, wgnamem, control). There are six possible outcomes: - - 1. The uda variable is a double and no uda usage has been registered so far: - fast return. - - 2. The uda variable is a double, and the (wgname,control) combination is - found in the input data; this implies that uda has been used previously - for this particular (wgname, control) combination: We remove that record - from the input_data. - - 3. The uda variable is a string and we find that particular (udq, wgname, - control) combination in the input data: No changes - - 4. The uda variable is a string; but another udq was used for this (wgname, - control) combination: We erase the previous entry and add a new entry. - - 5. The uda ariable is a string and we do not find this (wgname, control) - combination in the previous records: We add a new record. - - 6. The uda variable is a double, and the (wgname, control) combination has - not been encountered before: return 0 - -*/ -int UDQActive::update(const UDQConfig& udq_config, const UDAValue& uda, const std::string& wgname, UDAControl control) { - // Alternative 1 - if (uda.is() && this->input_data.empty()) - return 0; - - for (auto iter = this->input_data.begin(); iter != this->input_data.end(); ++iter) { - auto& record = *iter; - if ((record.wgname == wgname) && (record.control == control)) { - if (uda.is()) { - // Alternative 2 - iter = this->input_data.erase(iter); - this->output_data.clear(); - return 1; - } else { - const std::string& udq = uda.get(); - if (record.udq == udq) - // Alternative 3 - return 0; - else { - // Alternative 4 - iter = this->input_data.erase(iter); - this->output_data.clear(); - break; - } - } - } - } - - // Alternative 4 & 5 - if (uda.is()) { - const std::string& udq = uda.get(); - const auto& udq_input = udq_config[udq]; - auto udq_index = udq_input.index.insert_index; - this->input_data.emplace_back( udq_index, udq, wgname, control ); - this->output_data.clear(); - return 1; - } - - // Alternative 6 - return 0; -} - - -const std::vector& UDQActive::get_iuad() const { - if (this->output_data.empty()) { - for (const auto& input_record : this->input_data) { - const auto& udq = input_record.udq; - const auto& control = input_record.control; - bool found = false; - for (auto& output_record : this->output_data) { - if ((output_record.udq == udq) && (output_record.control == control)) { - output_record.use_count += 1; - found = true; - break; - } - } - - if (!found) - this->output_data.emplace_back(input_record.udq, input_record.input_index, 0, input_record.wgname, input_record.control); - } - - if (!output_data.empty()) { - for (std::size_t index = 1; index < output_data.size(); index++) { - const auto& prev_record = this->output_data[index - 1]; - this->output_data[index].use_index = prev_record.use_index + prev_record.use_count; - } - } - } - - return this->output_data; -} - -std::vector UDQActive::get_iuap() const { - std::vector iuap_data; - auto input_rcpy = this->input_data; - while (!input_rcpy.empty()) { - //store next active control (new control) - auto inp_rec = input_rcpy.begin(); - auto cur_rec = *inp_rec; - iuap_data.push_back(*inp_rec); - auto it = input_rcpy.erase(input_rcpy.begin()); - //find and store active controls with same control and udq - //auto it = input_rcpy.begin(); - while (it != input_rcpy.end()) { - if ((it->control == cur_rec.control) && (it->udq == cur_rec.udq)) { - iuap_data.push_back(*it); - it = input_rcpy.erase(it); - } - else { - it++; - } - } - } - return iuap_data; -} - -UDQActive::Record UDQActive::operator[](std::size_t index) const { - const auto& output_record = this->get_iuad()[index]; - return output_record; -} - -bool UDQActive::operator==(const UDQActive& data) const { - return this->input_data == data.input_data && - this->output_data == data.output_data && - this->udq_keys == data.udq_keys && - this->wg_keys == data.wg_keys; -} - - -} - diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQAssign.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQAssign.cpp deleted file mode 100644 index 22dbb247f3..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQAssign.cpp +++ /dev/null @@ -1,83 +0,0 @@ -/* - Copyright 2018 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include -#include - -namespace Opm { - -UDQAssign::UDQAssign() : - m_var_type(UDQVarType::NONE) -{ -} - -UDQAssign::UDQAssign(const std::string& keyword, const std::vector& selector, double value) : - m_keyword(keyword), - m_var_type(UDQ::varType(keyword)) -{ - this->add_record(selector, value); -} - -UDQAssign UDQAssign::serializeObject() -{ - UDQAssign result; - result.m_keyword = "test"; - result.m_var_type = UDQVarType::CONNECTION_VAR; - result.records = {{{"test1"}, 1.0}}; - - return result; -} - -void UDQAssign::add_record(const std::vector& selector, double value) { - this->records.push_back({selector, value}); -} - -const std::string& UDQAssign::keyword() const { - return this->m_keyword; -} - -UDQVarType UDQAssign::var_type() const { - return this->m_var_type; -} - -UDQSet UDQAssign::eval(const std::vector& wells) const { - if (this->m_var_type == UDQVarType::WELL_VAR) { - UDQSet ws = UDQSet::wells(this->m_keyword, wells); - - for (const auto& record : this->records) { - const auto& selector = record.selector; - double value = record.value; - if (selector.empty()) - ws.assign(value); - else - ws.assign(selector[0], value); - } - - return ws; - } - throw std::invalid_argument("Not yet implemented"); -} - -bool UDQAssign::operator==(const UDQAssign& data) const { - return this->keyword() == data.keyword() && - this->var_type() == data.var_type() && - this->records == data.records; -} - -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQConfig.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQConfig.cpp deleted file mode 100644 index 56d1ac7a98..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQConfig.cpp +++ /dev/null @@ -1,293 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include -#include -#include -#include - -namespace Opm { - - namespace { - std::string strip_quotes(const std::string& s) { - if (s[0] == '\'') - return s.substr(1, s.size() - 2); - else - return s; - } - - } - - UDQConfig::UDQConfig(const UDQParams& params) : - udq_params(params), - udqft(this->udq_params) - {} - - - UDQConfig::UDQConfig(const Deck& deck) : - udq_params(deck), - udqft(this->udq_params) - {} - - UDQConfig UDQConfig::serializeObject() - { - UDQConfig result; - result.udq_params = UDQParams::serializeObject(); - result.udqft = UDQFunctionTable(result.udq_params); - result.m_definitions = {{"test1", UDQDefine::serializeObject()}}; - result.m_assignments = {{"test2", UDQAssign::serializeObject()}}; - result.units = {{"test3", "test4"}}; - result.input_index.insert({"test5", UDQIndex::serializeObject()}); - result.type_count = {{UDQVarType::SCALAR, 5}}; - - return result; - } - - const UDQParams& UDQConfig::params() const { - return this->udq_params; - } - - void UDQConfig::add_node( const std::string& quantity, UDQAction action) { - auto index_iter = this->input_index.find(quantity); - if (this->input_index.find(quantity) == this->input_index.end()) { - auto var_type = UDQ::varType(quantity); - auto insert_index = this->input_index.size(); - this->type_count[var_type] += 1; - this->input_index[quantity] = UDQIndex(insert_index, this->type_count[var_type], action, var_type); - } else - index_iter->second.action = action; - } - - void UDQConfig::add_assign(const std::string& quantity, const std::vector& selector, double value) { - this->add_node(quantity, UDQAction::ASSIGN); - auto assignment = this->m_assignments.find(quantity); - if (assignment == this->m_assignments.end()) - this->m_assignments.insert( std::make_pair(quantity, UDQAssign(quantity, selector, value ))); - else - assignment->second.add_record(selector, value); - } - - - void UDQConfig::add_define(const std::string& quantity, const std::vector& expression) { - this->add_node(quantity, UDQAction::DEFINE); - auto defined_iter = this->m_definitions.find( quantity ); - if (defined_iter != this->m_definitions.end()) - this->m_definitions.erase( defined_iter ); - - this->m_definitions.insert( std::make_pair(quantity, UDQDefine(this->udq_params, quantity, expression))); - } - - - void UDQConfig::add_unit(const std::string& keyword, const std::string& quoted_unit) { - const std::string unit = strip_quotes(quoted_unit); - const auto pair_ptr = this->units.find(keyword); - if (pair_ptr != this->units.end()) { - if (pair_ptr->second != unit) - throw std::invalid_argument("Illegal to change unit of UDQ keyword runtime"); - - return; - } - /* - A UNIT statement is sufficient to consider a UDQ keyword is defined; - if it is not already defined with an ASSIGN / DEFINE keyword we - default construct it with a scalar value of 0. The main purpose of - doing this is to be able to really define the content in PYACTION - keyword. - */ - if (!this->has_keyword(keyword)) - this->add_assign(keyword, {}, 0); - this->units[keyword] = unit; - } - - - void UDQConfig::add_record(const DeckRecord& record) { - auto action = UDQ::actionType(record.getItem("ACTION").get(0)); - const auto& quantity = record.getItem("QUANTITY").get(0); - const auto& data = RawString::strings( record.getItem("DATA").getData() ); - - if (action == UDQAction::UPDATE) - throw std::invalid_argument("The UDQ action UPDATE is not yet implemented in opm/flow"); - - if (action == UDQAction::UNITS) - this->add_unit( quantity, data[0] ); - else { - if (action == UDQAction::ASSIGN) { - std::vector selector(data.begin(), data.end() - 1); - double value = std::stod(data.back()); - this->add_assign(quantity, selector, value); - } else if (action == UDQAction::DEFINE) - this->add_define(quantity, data); - else - throw std::runtime_error("Internal error - should not be here"); - } - } - - - std::vector UDQConfig::definitions() const { - std::vector ret; - for (const auto& index_pair : this->input_index) { - if (index_pair.second.action == UDQAction::DEFINE) { - const std::string& key = index_pair.first; - ret.push_back(this->m_definitions.at(key)); - } - } - return ret; - } - - - std::vector UDQConfig::definitions(UDQVarType var_type) const { - std::vector filtered_defines; - for (const auto& index_pair : this->input_index) { - if (index_pair.second.action == UDQAction::DEFINE) { - const std::string& key = index_pair.first; - const auto& udq_define = this->m_definitions.at(key); - if (udq_define.var_type() == var_type) - filtered_defines.push_back(udq_define); - } - } - return filtered_defines; - } - - - std::vector UDQConfig::input() const { - std::vector res; - for (const auto& index_pair : this->input_index) { - const UDQIndex& index = index_pair.second; - std::string u; - if (this->has_unit(index_pair.first)) - u = this->unit(index_pair.first); - - if (index.action == UDQAction::DEFINE) { - const std::string& key = index_pair.first; - res.push_back(UDQInput(index, this->m_definitions.at(key), u)); - } else if (index_pair.second.action == UDQAction::ASSIGN) { - const std::string& key = index_pair.first; - res.push_back(UDQInput(index, this->m_assignments.at(key), u)); - } - } - return res; - } - - std::size_t UDQConfig::size() const { - std::size_t s = 0; - for (const auto& index_pair : this->input_index) { - if (index_pair.second.action == UDQAction::DEFINE) - s += 1; - else if (index_pair.second.action == UDQAction::ASSIGN) - s += 1; - } - return s; - } - - - std::vector UDQConfig::assignments() const { - std::vector ret; - for (const auto& index_pair : this->input_index) { - if (index_pair.second.action == UDQAction::ASSIGN) { - const std::string& key = index_pair.first; - ret.push_back(this->m_assignments.at(key)); - } - } - return ret; - } - - - std::vector UDQConfig::assignments(UDQVarType var_type) const { - std::vector filtered_defines; - for (const auto& index_pair : this->input_index) { - if (index_pair.second.action == UDQAction::ASSIGN) { - const std::string& key = index_pair.first; - const auto& udq_define = this->m_assignments.at(key); - if (udq_define.var_type() == var_type) - filtered_defines.push_back(udq_define); - } - } - return filtered_defines; - } - - - - const std::string& UDQConfig::unit(const std::string& key) const { - const auto pair_ptr = this->units.find(key); - if (pair_ptr == this->units.end()) - throw std::invalid_argument("No such UDQ quantity: " + key); - - return pair_ptr->second; - } - - bool UDQConfig::has_unit(const std::string& keyword) const { - return (this->units.count(keyword) > 0); - } - - - bool UDQConfig::has_keyword(const std::string& keyword) const { - if (this->m_assignments.count(keyword) > 0) - return true; - - if (this->m_definitions.count(keyword) > 0) - return true; - - /* - That a keyword is mentioned with UNITS is enough to consider it - as a keyword which is present. - */ - if (this->units.count(keyword) > 0) - return true; - - return false; - } - - - const UDQInput UDQConfig::operator[](const std::string& keyword) const { - const auto index_iter = this->input_index.find(keyword); - if (index_iter == this->input_index.end()) - throw std::invalid_argument("Keyword: " + keyword + " not recognized as ASSIGN/DEFINE UDQ"); - - std::string u; - if (this->has_unit(keyword)) - u = this->unit(keyword); - - if (index_iter->second.action == UDQAction::ASSIGN) - return UDQInput(this->input_index.at(keyword), this->m_assignments.at(keyword), u); - - if (index_iter->second.action == UDQAction::DEFINE) - return UDQInput(this->input_index.at(keyword), this->m_definitions.at(keyword), u); - - throw std::logic_error("Internal error - should not be here"); - } - - - const UDQFunctionTable& UDQConfig::function_table() const { - return this->udqft; - } - - - bool UDQConfig::operator==(const UDQConfig& data) const { - return this->params() == data.params() && - this->function_table() == data.function_table() && - this->m_definitions == data.m_definitions && - this->m_assignments == data.m_assignments && - this->units == data.units && - this->input_index == data.input_index && - this->type_count == data.type_count; - } - -} - - diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQContext.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQContext.cpp deleted file mode 100644 index 6485ff80fe..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQContext.cpp +++ /dev/null @@ -1,89 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include -#include -#include - - -namespace Opm { - - UDQContext::UDQContext(const UDQFunctionTable& udqft_arg, const SummaryState& summary_state_arg) : - udqft(udqft_arg), - summary_state(summary_state_arg) - { - for (const auto& pair : TimeMap::eclipseMonthIndices()) - this->add(pair.first, pair.second); - - /* - Simulator performance keywords which are expected to be available for - UDQ keywords; probably better to guarantee that they are present in - the underlying summary state object. - */ - - this->add("ELAPSED", 0.0); - this->add("MSUMLINS", 0.0); - this->add("MSUMNEWT", 0.0); - this->add("NEWTON", 0.0); - this->add("TCPU", 0.0); - this->add("TIME", 0.0); - this->add("TIMESTEP", 0.0); - } - - - void UDQContext::add(const std::string& key, double value) { - this->values[key] = value; - } - - double UDQContext::get(const std::string& key) const { - const auto& pair_ptr = this->values.find(key); - if (pair_ptr == this->values.end()) - return this->summary_state.get(key); - - return pair_ptr->second; - } - - double UDQContext::get_well_var(const std::string& well, const std::string& var) const { - return this->summary_state.get_well_var(well, var); - } - - bool UDQContext::has_well_var(const std::string& well, const std::string& var) const { - return this->summary_state.has_well_var(well, var); - } - - double UDQContext::get_group_var(const std::string& group, const std::string& var) const { - return this->summary_state.get_group_var(group, var); - } - - bool UDQContext::has_group_var(const std::string& group, const std::string& var) const { - return this->summary_state.has_group_var(group, var); - } - - std::vector UDQContext::wells() const { - return this->summary_state.wells(); - } - - std::vector UDQContext::groups() const { - return this->summary_state.groups(); - } - - const UDQFunctionTable& UDQContext::function_table() const { - return this->udqft; - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQDefine.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQDefine.cpp deleted file mode 100644 index 2d5b1454db..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQDefine.cpp +++ /dev/null @@ -1,263 +0,0 @@ -/* - Copyright 2018 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ -#include -#include - - -#ifdef _WIN32 -#include -#endif - - -#include -#include -#include -#include -#include - -#include "../../../Parser/raw/RawConsts.hpp" -#include "UDQParser.hpp" - -namespace Opm { - - - -namespace { - -std::vector quote_split(const std::string& item) { - char quote_char = '\''; - std::vector items; - std::size_t offset = 0; - while (true) { - auto quote_pos1 = item.find(quote_char, offset); - if (quote_pos1 == std::string::npos) { - items.push_back(item.substr(offset)); - break; - } - - auto quote_pos2 = item.find(quote_char, quote_pos1 + 1); - if (quote_pos2 == std::string::npos) - throw std::invalid_argument("Unbalanced quotes in: " + item); - - if (quote_pos1 > offset) - items.push_back(item.substr(offset, quote_pos1 - offset)); - items.push_back(item.substr(quote_pos1, 1 + quote_pos2 - quote_pos1)); - offset = quote_pos2 + 1; - } - return items; -} - -} - -UDQDefine::UDQDefine() - : m_var_type(UDQVarType::NONE) -{} - -template -UDQDefine::UDQDefine(const UDQParams& udq_params_arg, - const std::string& keyword, - const std::vector& deck_data, - const ParseContext& parseContext, - T&& errors) : - UDQDefine(udq_params_arg, keyword, deck_data, parseContext, errors) -{} - - -UDQDefine::UDQDefine(const UDQParams& udq_params_arg, - const std::string& keyword, - const std::vector& deck_data) : - UDQDefine(udq_params_arg, keyword, deck_data, ParseContext(), ErrorGuard()) -{} - - -UDQDefine::UDQDefine(const UDQParams& udq_params, - const std::string& keyword, - const std::vector& deck_data, - const ParseContext& parseContext, - ErrorGuard& errors) : - m_keyword(keyword), - m_var_type(UDQ::varType(keyword)) -{ - std::vector tokens; - for (const std::string& deck_item : deck_data) { - for (const std::string& item : quote_split(deck_item)) { - if (RawConsts::is_quote()(item[0])) { - tokens.push_back(item.substr(1, item.size() - 2)); - continue; - } - - const std::vector splitters = {"TU*[]", "(", ")", "[", "]", ",", "+", "-", "/", "*", "==", "!=", "^", ">=", "<=", ">", "<"}; - size_t offset = 0; - size_t pos = 0; - while (pos < item.size()) { - size_t splitter_index = 0; - while (splitter_index < splitters.size()) { - const std::string& splitter = splitters[splitter_index]; - size_t find_pos = item.find(splitter, pos); - if (find_pos == pos) { - if (pos > offset) - tokens.push_back(item.substr(offset, pos - offset)); - tokens.push_back(splitter); - pos = find_pos + 1; - offset = pos; - break; - } - splitter_index++; - } - if (splitter_index == splitters.size()) - pos += 1; - } - if (pos > offset) - tokens.push_back(item.substr(offset, pos - offset)); - - } - } - this->ast = std::make_shared( UDQParser::parse(udq_params, this->m_var_type, this->m_keyword, tokens, parseContext, errors) ); - - this->string_data = ""; - for (std::size_t index = 0; index < deck_data.size(); index++) { - this->string_data += deck_data[index]; - if (index != deck_data.size() - 1) - this->string_data += " "; - } -} - - -UDQDefine::UDQDefine(const std::string& keyword, - std::shared_ptr astPtr, - UDQVarType type, - const std::string& stringData) - : m_keyword(keyword) - , ast(astPtr) - , m_var_type(type) - , string_data(stringData) -{} - - -UDQDefine UDQDefine::serializeObject() -{ - UDQDefine result; - result.m_keyword = "test1"; - result.ast = std::make_shared(UDQASTNode::serializeObject()); - result.m_var_type = UDQVarType::SEGMENT_VAR; - result.string_data = "test2"; - - return result; -} - - -namespace { - -/* - This function unconditinally returns true and is of-course quite useless at - the moment; it is retained here in the hope that it is possible to actually - make it useful in the future. See the comment in UDQEnums.hpp about 'UDQ type - system'. -*/ -bool dynamic_type_check(UDQVarType lhs, UDQVarType rhs) { - if (lhs == rhs) - return true; - - if (rhs == UDQVarType::SCALAR) - return true; - - return true; -} - -} - -UDQSet UDQDefine::eval(const UDQContext& context) const { - UDQSet res = this->ast->eval(this->m_var_type, context); - if (!dynamic_type_check(this->var_type(), res.var_type())) { - std::string msg = "Invalid runtime type conversion detected when evaluating UDQ"; - throw std::invalid_argument(msg); - } - - if (res.var_type() == UDQVarType::SCALAR) { - /* - If the right hand side evaluates to a scalar that scalar value should - be set for all wells in the wellset: - - UDQ - DEFINE WUINJ1 SUM(WOPR) * 1.25 / - DEFINE WUINJ2 WOPR OP1 * 5.0 / - / - - Both the expressions "SUM(WOPR)" and "WOPR OP1" evaluate to a scalar, - this should then be copied all wells, so that WUINJ1:$WELL should - evaulate to the same numerical value for all wells. We implement the - same behavior for group sets - but there is lots of uncertainty - regarding the semantics of group sets. - */ - - double scalar_value = res[0].value(); - if (this->var_type() == UDQVarType::WELL_VAR) { - const std::vector wells = context.wells(); - UDQSet well_res = UDQSet::wells(this->m_keyword, wells); - - for (const auto& well : wells) - well_res.assign(well, scalar_value); - - return well_res; - } - - if (this->var_type() == UDQVarType::GROUP_VAR) { - const std::vector groups = context.groups(); - UDQSet group_res = UDQSet::groups(this->m_keyword, groups); - - for (const auto& group : groups) - group_res.assign(group, scalar_value); - - return group_res; - } - } - - return res; -} - - -UDQVarType UDQDefine::var_type() const { - return this->m_var_type; -} - - -const std::string& UDQDefine::keyword() const { - return this->m_keyword; -} - -const std::string& UDQDefine::input_string() const { - return this->string_data; -} - -std::set UDQDefine::func_tokens() const { - return this->ast->func_tokens(); -} - -bool UDQDefine::operator==(const UDQDefine& data) const { - if ((ast && !data.ast) || (!ast && data.ast)) - return false; - if (ast && !(*ast == *data.ast)) - return false; - - return this->keyword() == data.keyword() && - this->var_type() == data.var_type() && - this->input_string() == data.input_string(); -} - -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQEnums.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQEnums.cpp deleted file mode 100644 index f52df82138..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQEnums.cpp +++ /dev/null @@ -1,375 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include -#include -#include -#include -#include -#include - -#include - - -namespace Opm { -namespace UDQ { -namespace { - - const std::set cmp_func = {UDQTokenType::binary_cmp_eq, - UDQTokenType::binary_cmp_ne, - UDQTokenType::binary_cmp_le, - UDQTokenType::binary_cmp_ge, - UDQTokenType::binary_cmp_lt, - UDQTokenType::binary_cmp_gt}; - - const std::set binary_func = {UDQTokenType::binary_op_add, - UDQTokenType::binary_op_mul, - UDQTokenType::binary_op_sub, - UDQTokenType::binary_op_div, - UDQTokenType::binary_op_pow, - UDQTokenType::binary_op_uadd, - UDQTokenType::binary_op_umul, - UDQTokenType::binary_op_umin, - UDQTokenType::binary_op_umax, - UDQTokenType::binary_cmp_eq, - UDQTokenType::binary_cmp_ne, - UDQTokenType::binary_cmp_le, - UDQTokenType::binary_cmp_ge, - UDQTokenType::binary_cmp_lt, - UDQTokenType::binary_cmp_gt}; - - - const std::set scalar_func = {UDQTokenType::scalar_func_sum, - UDQTokenType::scalar_func_avea, - UDQTokenType::scalar_func_aveg, - UDQTokenType::scalar_func_aveh, - UDQTokenType::scalar_func_max, - UDQTokenType::scalar_func_min, - UDQTokenType::scalar_func_norm1, - UDQTokenType::scalar_func_norm2, - UDQTokenType::scalar_func_normi, - UDQTokenType::scalar_func_prod}; - - - const std::set unary_elemental_func = {UDQTokenType::elemental_func_randn, - UDQTokenType::elemental_func_randu, - UDQTokenType::elemental_func_rrandn, - UDQTokenType::elemental_func_rrandu, - UDQTokenType::elemental_func_abs, - UDQTokenType::elemental_func_def, - UDQTokenType::elemental_func_exp, - UDQTokenType::elemental_func_idv, - UDQTokenType::elemental_func_ln, - UDQTokenType::elemental_func_log, - UDQTokenType::elemental_func_nint, - UDQTokenType::elemental_func_sorta, - UDQTokenType::elemental_func_sortd, - UDQTokenType::elemental_func_undef}; - - - const std::unordered_map func_type = {{"+", UDQTokenType::binary_op_add}, - {"-", UDQTokenType::binary_op_sub}, - {"/", UDQTokenType::binary_op_div}, - {"DIV", UDQTokenType::binary_op_div}, - {"*", UDQTokenType::binary_op_mul}, - {"^", UDQTokenType::binary_op_pow}, - {"UADD", UDQTokenType::binary_op_uadd}, - {"UMUL", UDQTokenType::binary_op_umul}, - {"UMIN", UDQTokenType::binary_op_umin}, - {"UMAX", UDQTokenType::binary_op_umax}, - {"==", UDQTokenType::binary_cmp_eq}, - {"!=", UDQTokenType::binary_cmp_ne}, - {"<=", UDQTokenType::binary_cmp_le}, - {">=", UDQTokenType::binary_cmp_ge}, - {"<", UDQTokenType::binary_cmp_lt}, - {">", UDQTokenType::binary_cmp_gt}, - {"RANDN", UDQTokenType::elemental_func_randn}, - {"RANDU", UDQTokenType::elemental_func_randu}, - {"RRNDN", UDQTokenType::elemental_func_rrandn}, - {"RRNDU", UDQTokenType::elemental_func_rrandu}, - {"ABS", UDQTokenType::elemental_func_abs}, - {"DEF", UDQTokenType::elemental_func_def}, - {"EXP", UDQTokenType::elemental_func_exp}, - {"IDV", UDQTokenType::elemental_func_idv}, - {"LN", UDQTokenType::elemental_func_ln}, - {"LOG", UDQTokenType::elemental_func_log}, - {"NINT", UDQTokenType::elemental_func_nint}, - {"SORTA", UDQTokenType::elemental_func_sorta}, - {"SORTD", UDQTokenType::elemental_func_sortd}, - {"UNDEF", UDQTokenType::elemental_func_undef}, - {"SUM", UDQTokenType::scalar_func_sum}, - {"AVEA", UDQTokenType::scalar_func_avea}, - {"AVEG", UDQTokenType::scalar_func_aveg}, - {"AVEH", UDQTokenType::scalar_func_aveh}, - {"MAX", UDQTokenType::scalar_func_max}, - {"MIN", UDQTokenType::scalar_func_min}, - {"NORM1", UDQTokenType::scalar_func_norm1}, - {"NORM2", UDQTokenType::scalar_func_norm2}, - {"NORMI", UDQTokenType::scalar_func_normi}, - {"PROD", UDQTokenType::scalar_func_prod}}; - - -} - -UDQVarType targetType(const std::string& keyword) { - - char first_char = keyword[0]; - switch(first_char) { - case 'C': - return UDQVarType::CONNECTION_VAR; - case 'R': - return UDQVarType::REGION_VAR; - case 'F': - return UDQVarType::FIELD_VAR; - case 'S': - return UDQVarType::SEGMENT_VAR; - case 'A': - return UDQVarType::AQUIFER_VAR; - case 'B': - return UDQVarType::BLOCK_VAR; - case 'W': - return UDQVarType::WELL_VAR; - case 'G': - return UDQVarType::GROUP_VAR; - default: - try { - std::stod(keyword); - return UDQVarType::SCALAR; - } catch(const std::invalid_argument& exc) { - return UDQVarType::NONE; - } - } - -} - -UDQVarType targetType(const std::string& keyword, const std::vector& selector) { - auto tt = targetType(keyword); - - if (tt == UDQVarType::WELL_VAR || tt == UDQVarType::GROUP_VAR) { - if (selector.empty()) - return tt; - else { - const auto& wgname = selector[0]; - if (wgname.find("*") != std::string::npos) - return tt; - } - } - - return UDQVarType::SCALAR; -} - - - -UDQVarType varType(const std::string& keyword) { - if (keyword[1] != 'U') - throw std::invalid_argument("Keyword: " + keyword + " is not of UDQ type"); - - char first_char = keyword[0]; - switch(first_char) { - case 'W': - return UDQVarType::WELL_VAR; - case 'G': - return UDQVarType::GROUP_VAR; - case 'C': - return UDQVarType::CONNECTION_VAR; - case 'R': - return UDQVarType::REGION_VAR; - case 'F': - return UDQVarType::FIELD_VAR; - case 'S': - return UDQVarType::SEGMENT_VAR; - case 'A': - return UDQVarType::AQUIFER_VAR; - case 'B': - return UDQVarType::BLOCK_VAR; - default: - throw std::invalid_argument("Keyword: " + keyword + " is not of UDQ type"); - } - -} - - -UDQAction actionType(const std::string& action_string) { - if (action_string == "ASSIGN") - return UDQAction::ASSIGN; - - if (action_string == "DEFINE") - return UDQAction::DEFINE; - - if (action_string == "UNITS") - return UDQAction::UNITS; - - if (action_string == "UPDATE") - return UDQAction::UPDATE; - - throw std::invalid_argument("Invalid action string " + action_string); -} - - -bool binaryFunc(UDQTokenType token_type) { - return (binary_func.count(token_type) > 0); -} - -bool scalarFunc(UDQTokenType token_type) { - return (scalar_func.count(token_type) > 0); -} - -bool elementalUnaryFunc(UDQTokenType token_type) { - return (unary_elemental_func.count(token_type) > 0); -} - -bool cmpFunc(UDQTokenType token_type) { - return (cmp_func.count(token_type) > 0); -} - - -UDQTokenType funcType(const std::string& func_name) { - if (func_type.count(func_name) > 0) - return func_type.at(func_name); - - if (func_name.substr(0,2) == "TU") { - return UDQTokenType::table_lookup; - } - - return UDQTokenType::error; -} - - -UDQVarType coerce(UDQVarType t1, UDQVarType t2) { - if (t1 == t2) - return t1; - - if (t1 == UDQVarType::WELL_VAR ) { - if (t2 == UDQVarType::GROUP_VAR) - throw std::logic_error("Can not coerce well variable and group variable"); - - return t1; - } - - if (t1 == UDQVarType::GROUP_VAR ) { - if (t2 == UDQVarType::WELL_VAR) - throw std::logic_error("Can not coerce well variable and group variable"); - - return t1; - } - - if (t2 == UDQVarType::WELL_VAR ) { - if (t1 == UDQVarType::GROUP_VAR) - throw std::logic_error("Can not coerce well variable and group variable"); - - return t2; - } - - if (t2 == UDQVarType::GROUP_VAR ) { - if (t1 == UDQVarType::WELL_VAR) - throw std::logic_error("Can not coerce well variable and group variable"); - - return t2; - } - - if (t1 == UDQVarType::NONE) - return t2; - - if (t2 == UDQVarType::NONE) - return t1; - - return t1; -} - - - - -std::string typeName(UDQVarType var_type) { - switch (var_type) { - case UDQVarType::NONE: - return "NONE"; - case UDQVarType::SCALAR: - return "SCALAR"; - case UDQVarType::WELL_VAR: - return "WELL_VAR"; - case UDQVarType::CONNECTION_VAR: - return "CONNECTION_VAR"; - case UDQVarType::FIELD_VAR: - return "FIELD_VAR"; - case UDQVarType::GROUP_VAR: - return "GROUP_VAR"; - case UDQVarType::REGION_VAR: - return "REGION_VAR"; - case UDQVarType::SEGMENT_VAR: - return "SEGMENT_VAR"; - case UDQVarType::AQUIFER_VAR: - return "AQUIFER_VAR"; - case UDQVarType::BLOCK_VAR: - return "BLOCK_VAR"; - default: - throw std::runtime_error("Should not be here: " + std::to_string(static_cast(var_type))); - } -} - - -UDAKeyword keyword(UDAControl control) { - const std::map c2k = {{UDAControl::WCONPROD_ORAT, UDAKeyword::WCONPROD}, - {UDAControl::WCONPROD_GRAT, UDAKeyword::WCONPROD}, - {UDAControl::WCONPROD_WRAT, UDAKeyword::WCONPROD}, - {UDAControl::WCONPROD_LRAT, UDAKeyword::WCONPROD}, - {UDAControl::WCONPROD_RESV, UDAKeyword::WCONPROD}, - {UDAControl::WCONPROD_BHP, UDAKeyword::WCONPROD}, - {UDAControl::WCONPROD_THP, UDAKeyword::WCONPROD}, - {UDAControl::WCONINJE_RATE, UDAKeyword::WCONINJE}, - {UDAControl::WCONINJE_RESV, UDAKeyword::WCONINJE}, - {UDAControl::WCONINJE_BHP, UDAKeyword::WCONINJE}, - {UDAControl::WCONINJE_THP, UDAKeyword::WCONINJE}, - {UDAControl::GCONPROD_OIL_TARGET, UDAKeyword::GCONPROD}, - {UDAControl::GCONPROD_WATER_TARGET, UDAKeyword::GCONPROD}, - {UDAControl::GCONPROD_GAS_TARGET, UDAKeyword::GCONPROD}, - {UDAControl::GCONPROD_LIQUID_TARGET, UDAKeyword::GCONPROD}}; - - auto it = c2k.find(control); - if (it != c2k.end()) - return it->second; - - throw std::logic_error("Unrecognized enum type - internal error"); -} - - -int uadCode(UDAControl control) { - const std::map c2uad = {{UDAControl::WCONPROD_ORAT, 300004}, - {UDAControl::WCONPROD_GRAT, 500004}, - {UDAControl::WCONPROD_WRAT, 400004}, - {UDAControl::WCONPROD_LRAT, 600004}, - {UDAControl::WCONPROD_RESV, 999999}, - {UDAControl::WCONPROD_BHP, 999999}, - {UDAControl::WCONPROD_THP, 999999}, - {UDAControl::WCONINJE_RATE, 400003}, - {UDAControl::WCONINJE_RESV, 500003}, - {UDAControl::WCONINJE_BHP, 999999}, - {UDAControl::WCONINJE_THP, 999999}, - {UDAControl::GCONPROD_OIL_TARGET, 200019}, - {UDAControl::GCONPROD_WATER_TARGET, 300019}, - {UDAControl::GCONPROD_GAS_TARGET, 400019}, - {UDAControl::GCONPROD_LIQUID_TARGET, 500019}}; - - auto it = c2uad.find(control); - if (it != c2uad.end()) - return it->second; - - throw std::logic_error("Unrecognized enum type - internal error"); -} -} -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQFunction.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQFunction.cpp deleted file mode 100644 index e1a89afd16..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQFunction.cpp +++ /dev/null @@ -1,541 +0,0 @@ -/* - Copyright 2019 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ -#include -#include -#include -#include -#include -#include - -#include - -namespace Opm { - -UDQFunction::UDQFunction(const std::string& name) : - m_name(name), - func_type(UDQ::funcType(name)) -{ -} - -UDQFunction::UDQFunction(const std::string& name, UDQTokenType funcType) : - m_name(name), - func_type(funcType) -{ -} - -UDQTokenType UDQFunction::type() const { - return this->func_type; -} - -const std::string& UDQFunction::name() const { - return this->m_name; -} - -bool UDQFunction::operator==(const UDQFunction& data) const { - return this->name() == data.name() && - this->type() == data.type(); -} - -UDQScalarFunction::UDQScalarFunction(const std::string&name, std::function f) : - UDQFunction(name), - func(std::move(f)) -{ -} - - - -UDQSet UDQScalarFunction::eval(const UDQSet& arg) const { - return this->func(arg); -} - - -UDQSet UDQUnaryElementalFunction::eval(const UDQSet& arg) const { - return this->func(arg); -} - -/*****************************************************************/ -UDQSet UDQScalarFunction::MIN(const UDQSet& arg) { - auto defined_values = arg.defined_values(); - if (defined_values.empty()) - return UDQSet::empty("MIN"); - - return UDQSet::scalar("MIN", *std::min_element(defined_values.begin(), defined_values.end())); -} - -UDQSet UDQScalarFunction::MAX(const UDQSet& arg) { - auto defined_values = arg.defined_values(); - if (defined_values.empty()) - return UDQSet::empty("MAX"); - - return UDQSet::scalar("MAX", *std::max_element(defined_values.begin(), defined_values.end())); -} - -UDQSet UDQScalarFunction::SUM(const UDQSet& arg) { - auto defined_values = arg.defined_values(); - if (defined_values.empty()) - return UDQSet::empty("SUM"); - - return UDQSet::scalar("SUM", std::accumulate(defined_values.begin(), defined_values.end(), 0.0)); -} - -UDQSet UDQScalarFunction::PROD(const UDQSet& arg) { - auto defined_values = arg.defined_values(); - if (defined_values.empty()) - return UDQSet::empty("PROD"); - - return UDQSet::scalar("PROD", std::accumulate(defined_values.begin(), defined_values.end(), 1.0, std::multiplies{})); -} - -UDQSet UDQScalarFunction::AVEA(const UDQSet& arg) { - auto defined_values = arg.defined_values(); - if (defined_values.empty()) - return UDQSet::empty("AVEA"); - - return UDQSet::scalar("AVEA", std::accumulate( defined_values.begin(), defined_values.end(), 0.0) / defined_values.size()); -} - -UDQSet UDQScalarFunction::AVEG(const UDQSet& arg) { - auto defined_values = arg.defined_values(); - if (defined_values.empty()) - return UDQSet::empty("AVEG"); - - if (std::find_if(defined_values.begin(), defined_values.end(), [](double x) { return x <= 0; }) != defined_values.end()) - throw std::invalid_argument("Function AVEG must have only positive arguments"); - - double log_mean = std::accumulate( defined_values.begin(), defined_values.end(), 0.0, [](double x, double y) { return x + std::log(y); }) / defined_values.size(); - return UDQSet::scalar("AVEG", std::exp(log_mean)); -} - - -UDQSet UDQScalarFunction::AVEH(const UDQSet& arg) { - auto defined_values = arg.defined_values(); - if (defined_values.empty()) - return UDQSet::empty("AVEH"); - - return UDQSet::scalar("AVEH", defined_values.size() / std::accumulate(defined_values.begin(), defined_values.end(), 0.0, [](double x, double y) { return x + 1.0/y; })); -} - -UDQSet UDQScalarFunction::NORMI(const UDQSet& arg) { - auto defined_values = arg.defined_values(); - if (defined_values.empty()) - return UDQSet::empty("NORMI"); - - return UDQSet::scalar("NORMI", std::accumulate( defined_values.begin(), defined_values.end(), 0.0, [](double x, double y) { return std::max(x, std::fabs(y));})); -} - - -UDQSet UDQScalarFunction::NORM1(const UDQSet& arg) { - auto defined_values = arg.defined_values(); - if (defined_values.empty()) - return UDQSet::empty("NORM1"); - - return UDQSet::scalar("NORM1", std::accumulate( defined_values.begin(), defined_values.end(), 0.0, [](double x, double y) { return x + std::fabs(y);})); -} - -UDQSet UDQScalarFunction::NORM2(const UDQSet& arg) { - auto defined_values = arg.defined_values(); - if (defined_values.empty()) - return UDQSet::empty("NORM2"); - - return UDQSet::scalar("NORM2", std::sqrt(std::inner_product(defined_values.begin(), defined_values.end(), defined_values.begin(), 0.0))); -} - -UDQUnaryElementalFunction::UDQUnaryElementalFunction(const std::string&name, std::function f) : - UDQFunction(name), - func(f) -{} - - -UDQSet UDQUnaryElementalFunction::ABS(const UDQSet& arg) { - auto result = arg; - for (std::size_t index=0; index < result.size(); index++) { - auto& udq_value = result[index]; - if (udq_value) - result.assign( index, std::fabs(udq_value.value())); - } - return result; -} - -UDQSet UDQUnaryElementalFunction::DEF(const UDQSet& arg) { - auto result = arg; - for (std::size_t index=0; index < result.size(); index++) { - auto& udq_value = result[index]; - if (udq_value) - result.assign( index, 1 ); - } - return result; -} - - -UDQSet UDQUnaryElementalFunction::UNDEF(const UDQSet& arg) { - UDQSet result(arg.name(), arg.size()); - for (std::size_t index=0; index < result.size(); index++) { - auto& udq_value = arg[index]; - if (!udq_value) - result.assign( index, 1 ); - } - return result; -} - - -UDQSet UDQUnaryElementalFunction::IDV(const UDQSet& arg) { - auto result = arg; - for (std::size_t index=0; index < result.size(); index++) { - auto& udq_value = result[index]; - if (udq_value) - result.assign( index, 1 ); - else - result.assign(index , 0); - } - return result; -} - -UDQSet UDQUnaryElementalFunction::EXP(const UDQSet& arg) { - auto result = arg; - for (std::size_t index=0; index < result.size(); index++) { - auto& udq_value = result[index]; - if (udq_value) - result.assign( index, std::exp(udq_value.value()) ); - } - return result; -} - -UDQSet UDQUnaryElementalFunction::NINT(const UDQSet& arg) { - auto result = arg; - for (std::size_t index=0; index < result.size(); index++) { - auto& udq_value = result[index]; - if (udq_value) - result.assign( index, std::nearbyint(udq_value.value()) ); - } - return result; -} - - -UDQSet UDQUnaryElementalFunction::RANDN(std::mt19937& rng, const UDQSet& arg) { - auto result = arg; - std::normal_distribution dist(0,1); - for (std::size_t index=0; index < result.size(); index++) { - auto& udq_value = result[index]; - if (udq_value) - result.assign( index, dist(rng) ); - } - return result; -} - - -UDQSet UDQUnaryElementalFunction::RANDU(std::mt19937& rng, const UDQSet& arg) { - auto result = arg; - std::uniform_real_distribution dist(-1,1); - for (std::size_t index=0; index < result.size(); index++) { - auto& udq_value = result[index]; - if (udq_value) - result.assign( index, dist(rng) ); - } - return result; -} - - - - - -UDQSet UDQUnaryElementalFunction::LN(const UDQSet& arg) { - auto result = arg; - for (std::size_t index=0; index < result.size(); index++) { - auto& udq_value = result[index]; - if (udq_value) { - double elm = udq_value.value(); - if (elm > 0) - result.assign(index, std::log(elm)); - else - throw std::invalid_argument("Argument: " + std::to_string(elm) + " invalid for function LN"); - } - } - return result; -} - - -UDQSet UDQUnaryElementalFunction::LOG(const UDQSet& arg) { - auto result = arg; - for (std::size_t index=0; index < result.size(); index++) { - auto& udq_value = result[index]; - if (udq_value) { - double elm = udq_value.value(); - if (elm > 0) - result.assign(index, std::log10(elm)); - else - throw std::invalid_argument("Argument: " + std::to_string(elm) + " invalid for function LOG"); - } - } - return result; -} - -namespace { - - UDQSet udq_union(const UDQSet& arg1, const UDQSet& arg2) { - if (arg1.size() != arg2.size()) - throw std::invalid_argument("UDQ sets have incompatible size"); - - UDQSet result = arg1; - for (std::size_t index = 0; index < result.size(); index++) { - const auto& elm1 = arg1[index]; - const auto& elm2 = arg2[index]; - if (elm1.defined() != elm2.defined()) { - if (elm1) - result.assign(index, elm1.value()); - - if (elm2) - result.assign(index, elm2.value()); - } - } - return result; - } - -} - - -UDQSet UDQUnaryElementalFunction::SORT(const UDQSet& arg, bool ascending) { - using sort_node = std::pair; - std::vector sort_nodes; - for (std::size_t index = 0; index < arg.size(); index++) { - const auto& value = arg[index]; - if (value.defined()) { - if (ascending) - sort_nodes.emplace_back(index, value.value() ); - else - sort_nodes.emplace_back(index, -value.value() ); - } - } - - std::sort(sort_nodes.begin(), sort_nodes.end(), [](const sort_node& s1, const sort_node& s2) { return s1.second < s2.second; }); - - auto result = arg; - double sort_value = 1; - for (const auto& node : sort_nodes) { - const auto& index = node.first; - auto& value = result[index]; - if (value.defined()) { - result.assign(index, sort_value); - sort_value += 1; - } - } - return result; -} - - -UDQSet UDQUnaryElementalFunction::SORTD(const UDQSet& arg) { - return UDQUnaryElementalFunction::SORT(arg, false); -} - -UDQSet UDQUnaryElementalFunction::SORTA(const UDQSet& arg) { - return UDQUnaryElementalFunction::SORT(arg, true); -} - - -UDQBinaryFunction::UDQBinaryFunction(const std::string& name, std::function f) : - UDQFunction(name), - func(std::move(f)) -{ -} - - -UDQSet UDQBinaryFunction::eval(const UDQSet& lhs, const UDQSet& rhs) const { - return this->func(lhs, rhs); -} - -UDQSet UDQBinaryFunction::LE(double eps, const UDQSet& lhs, const UDQSet& rhs) { - auto result = lhs - rhs; - auto rel_diff = result / lhs; - - for (std::size_t index=0; index < result.size(); index++) { - auto elm = result[index]; - if (elm) { - double diff = rel_diff[index].value(); - if (diff <= eps) - result.assign(index, 1); - else - result.assign(index, 0); - } - } - return result; -} - -UDQSet UDQBinaryFunction::GE(double eps, const UDQSet& lhs, const UDQSet& rhs) { - auto result = lhs - rhs; - auto rel_diff = result / lhs; - - for (std::size_t index=0; index < result.size(); index++) { - auto elm = result[index]; - if (elm) { - double diff = rel_diff[index].value(); - if (diff >= -eps) - result.assign(index, 1); - else - result.assign(index, 0); - } - } - return result; - -} - - -UDQSet UDQBinaryFunction::EQ(double eps, const UDQSet& lhs, const UDQSet& rhs) { - auto result = lhs - rhs; - auto rel_diff = result / lhs; - - for (std::size_t index=0; index < result.size(); index++) { - auto elm = result[index]; - if (elm) { - double diff = std::fabs(rel_diff[index].value()); - if (diff <= eps) - result.assign(index, 1); - else - result.assign(index, 0); - } - } - return result; - -} - -UDQSet UDQBinaryFunction::NE(double eps, const UDQSet& lhs, const UDQSet& rhs) { - auto result = UDQBinaryFunction::EQ(eps, lhs, rhs); - for (std::size_t index=0; index < result.size(); index++) { - auto elm = result[index]; - if (elm) - result.assign(index, 1 - elm.value()); - } - return result; -} - - -UDQSet UDQBinaryFunction::GT(const UDQSet& lhs, const UDQSet& rhs) { - auto result = lhs - rhs; - - for (std::size_t index=0; index < result.size(); index++) { - auto elm = result[index]; - if (elm) { - double diff = elm.value(); - if (diff > 0) - result.assign(index, 1); - else - result.assign(index, 0); - } - } - return result; -} - -UDQSet UDQBinaryFunction::LT(const UDQSet& lhs, const UDQSet& rhs) { - auto result = lhs - rhs; - - for (std::size_t index=0; index < result.size(); index++) { - auto elm = result[index]; - if (elm) { - double diff = elm.value(); - if (diff < 0) - result.assign(index, 1); - else - result.assign(index, 0); - } - } - return result; -} - -UDQSet UDQBinaryFunction::ADD(const UDQSet& lhs, const UDQSet& rhs) { - return lhs + rhs; -} - - - -UDQSet UDQBinaryFunction::UADD(const UDQSet& lhs, const UDQSet& rhs) { - UDQSet result = udq_union(lhs,rhs); - for (std::size_t index=0; index < lhs.size(); index++) { - const auto& lhs_elm = lhs[index]; - const auto& rhs_elm = rhs[index]; - - if (lhs_elm && rhs_elm) - result.assign(index, rhs_elm.value() + lhs_elm.value()); - } - return result; -} - -UDQSet UDQBinaryFunction::UMUL(const UDQSet& lhs, const UDQSet& rhs) { - UDQSet result = udq_union(lhs, rhs); - for (std::size_t index=0; index < lhs.size(); index++) { - const auto& lhs_elm = lhs[index]; - const auto& rhs_elm = rhs[index]; - - if (lhs_elm && rhs_elm) - result.assign(index, rhs_elm.value() * lhs_elm.value()); - } - return result; -} - -UDQSet UDQBinaryFunction::UMIN(const UDQSet& lhs, const UDQSet& rhs) { - UDQSet result = udq_union(lhs, rhs); - for (std::size_t index=0; index < lhs.size(); index++) { - const auto& lhs_elm = lhs[index]; - const auto& rhs_elm = rhs[index]; - - if (lhs_elm && rhs_elm) - result.assign(index, std::min(rhs_elm.value(), lhs_elm.value())); - } - return result; -} - - -UDQSet UDQBinaryFunction::UMAX(const UDQSet& lhs, const UDQSet& rhs) { - UDQSet result = udq_union(lhs, rhs); - for (std::size_t index=0; index < lhs.size(); index++) { - const auto& lhs_elm = lhs[index]; - const auto& rhs_elm = rhs[index]; - - if (lhs_elm && rhs_elm) - result.assign(index, std::max(rhs_elm.value(), lhs_elm.value())); - } - return result; -} - - - - - -UDQSet UDQBinaryFunction::MUL(const UDQSet& lhs, const UDQSet& rhs) { - return lhs * rhs; -} - -UDQSet UDQBinaryFunction::SUB(const UDQSet& lhs, const UDQSet& rhs) { - return lhs - rhs; -} - -UDQSet UDQBinaryFunction::DIV(const UDQSet& lhs, const UDQSet& rhs) { - return lhs / rhs; -} - -UDQSet UDQBinaryFunction::POW(const UDQSet& lhs, const UDQSet& rhs) { - UDQSet result = lhs; - for (std::size_t index = 0; index < result.size(); index++) { - auto& lhs_elm = lhs[index]; - auto& rhs_elm = rhs[index]; - - if (lhs_elm && rhs_elm) - result.assign(index, std::pow(lhs_elm.value(), rhs_elm.value())); - } - return result; -} - -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQFunctionTable.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQFunctionTable.cpp deleted file mode 100644 index 8723f5d7c6..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQFunctionTable.cpp +++ /dev/null @@ -1,163 +0,0 @@ -/* - Copyright 2019 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ -#include -#include -#include -#include -#include - -#include - -namespace Opm { - -UDQFunctionTable::UDQFunctionTable() : - UDQFunctionTable(UDQParams()) -{} - -UDQFunctionTable::UDQFunctionTable(const UDQParams& params_arg) : - params(params_arg) -{ - // SCalar functions - this->insert_function( std::make_shared("SUM", UDQScalarFunction::SUM) ); - this->insert_function( std::make_shared("AVEA", UDQScalarFunction::AVEA) ); - this->insert_function( std::make_shared("AVEG", UDQScalarFunction::AVEG) ); - this->insert_function( std::make_shared("AVEH", UDQScalarFunction::AVEH) ); - this->insert_function( std::make_shared("MAX", UDQScalarFunction::MAX) ); - this->insert_function( std::make_shared("MIN", UDQScalarFunction::MIN) ); - this->insert_function( std::make_shared("NORM1", UDQScalarFunction::NORM1) ); - this->insert_function( std::make_shared("NORM2", UDQScalarFunction::NORM2) ); - this->insert_function( std::make_shared("NORMI", UDQScalarFunction::NORMI) ); - this->insert_function( std::make_shared("PROD", UDQScalarFunction::PROD) ); - - this->insert_function( std::make_shared("ABS", UDQUnaryElementalFunction::ABS) ); - this->insert_function( std::make_shared("DEF", UDQUnaryElementalFunction::DEF) ); - this->insert_function( std::make_shared("EXP", UDQUnaryElementalFunction::EXP) ); - this->insert_function( std::make_shared("IDV", UDQUnaryElementalFunction::IDV) ); - this->insert_function( std::make_shared("LN", UDQUnaryElementalFunction::LN) ); - this->insert_function( std::make_shared("LOG", UDQUnaryElementalFunction::LOG) ); - this->insert_function( std::make_shared("NINT", UDQUnaryElementalFunction::NINT) ); - this->insert_function( std::make_shared("SORTA", UDQUnaryElementalFunction::SORTA) ); - this->insert_function( std::make_shared("SORTD", UDQUnaryElementalFunction::SORTD) ); - this->insert_function( std::make_shared("UNDEF", UDQUnaryElementalFunction::UNDEF) ); - - - - const auto& randn = [ &sim_rng = this->params.sim_rng() ](const UDQSet& arg) { return UDQUnaryElementalFunction::RANDN(sim_rng, arg); }; - const auto& randu = [ &sim_rng = this->params.sim_rng()] (const UDQSet& arg) { return UDQUnaryElementalFunction::RANDU(sim_rng, arg); }; - const auto& true_randn = [ &true_rng = this->params.true_rng() ](const UDQSet& arg) { return UDQUnaryElementalFunction::RANDN(true_rng, arg); }; - const auto& true_randu = [ &true_rng = this->params.true_rng() ](const UDQSet& arg) { return UDQUnaryElementalFunction::RANDU(true_rng, arg); }; - - this->insert_function( std::make_shared("RANDN", randn) ); - this->insert_function( std::make_shared("RANDU", randu) ); - this->insert_function( std::make_shared("RRNDN", true_randn) ); - this->insert_function( std::make_shared("RRNDU", true_randu) ); - - const auto& eq = [ eps = this->params.cmpEpsilon()](const UDQSet&lhs, const UDQSet&rhs) { return UDQBinaryFunction::EQ(eps, lhs, rhs); }; - const auto& ne = [ eps = this->params.cmpEpsilon()](const UDQSet&lhs, const UDQSet&rhs) { return UDQBinaryFunction::NE(eps, lhs, rhs); }; - const auto& ge = [ eps = this->params.cmpEpsilon()](const UDQSet&lhs, const UDQSet&rhs) { return UDQBinaryFunction::GE(eps, lhs, rhs); }; - const auto& le = [ eps = this->params.cmpEpsilon()](const UDQSet&lhs, const UDQSet&rhs) { return UDQBinaryFunction::LE(eps, lhs, rhs); }; - - this->insert_function( std::make_shared("==", eq) ); - this->insert_function( std::make_shared("!=", ne) ); - this->insert_function( std::make_shared(">=", ge) ); - this->insert_function( std::make_shared("<=", le) ); - - this->insert_function( std::make_shared("^", UDQBinaryFunction::POW )); - this->insert_function( std::make_shared("<", UDQBinaryFunction::LT )); - this->insert_function( std::make_shared(">", UDQBinaryFunction::GT )); - this->insert_function( std::make_shared("+", UDQBinaryFunction::ADD )); - this->insert_function( std::make_shared("*", UDQBinaryFunction::MUL )); - this->insert_function( std::make_shared("/", UDQBinaryFunction::DIV )); - this->insert_function( std::make_shared("-", UDQBinaryFunction::SUB )); - - this->insert_function( std::make_shared("UADD", UDQBinaryFunction::UADD )); - this->insert_function( std::make_shared("UMUL", UDQBinaryFunction::UMUL )); - this->insert_function( std::make_shared("UMIN", UDQBinaryFunction::UMIN )); - this->insert_function( std::make_shared("UMAX", UDQBinaryFunction::UMAX )); -} - -UDQFunctionTable::UDQFunctionTable(const UDQParams& param, - const FunctionMap& map) : - params(param), - function_table(map) -{} - -void UDQFunctionTable::insert_function(std::shared_ptr func) { - auto name = func->name(); - this->function_table.emplace( std::move(name), std::move(func) ); -} - - - -bool UDQFunctionTable::has_function(const std::string& name) const { - return this->function_table.count(name) > 0; -} - - -const UDQFunction& UDQFunctionTable::get(const std::string& name) const { - if (!this->has_function(name)) - throw std::invalid_argument("No such function registered: " + name); - - const auto& pair_ptr = this->function_table.find(name); - return *pair_ptr->second; -} - -const UDQParams& UDQFunctionTable::getParams() const { - return this->params; -} - -const UDQFunctionTable::FunctionMap& UDQFunctionTable::functionMap() const { - return this->function_table; -} - -bool UDQFunctionTable::operator==(const UDQFunctionTable& data) const { - if (!(this->getParams() == data.getParams())) - return false; - - if (this->functionMap().size() != data.functionMap().size()) - return false; - - // Simply using the operator== method of std::unordered_map would - // compare the pointers contained and not the objects pointed to. - // We therefore must iterate manually through the container. The - // order of the map elements does not matter, and is - // indeterminate. Sorting must be done before comparision so that - // we compare elements with the same key to each other. - using SortedMap = std::map>; - SortedMap sorted_fmap(this->functionMap().begin(), this->functionMap().end()); - SortedMap data_sorted_fmap(data.functionMap().begin(), data.functionMap().end()); - - auto tIt = sorted_fmap.begin(); - auto dIt = data_sorted_fmap.begin(); - for (; tIt != sorted_fmap.end(); ++tIt, ++dIt) { - if (tIt->first != dIt->first) - return false; - - if ((tIt->second && !dIt->second) || (!tIt->second && dIt->second)) - return false; - - if (tIt->second && !(*tIt->second == *dIt->second)) - return false; - } - - return true; -} - - -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQInput.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQInput.cpp deleted file mode 100644 index d643d3c2e6..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQInput.cpp +++ /dev/null @@ -1,96 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - - -#include -#include -#include - -namespace Opm { - - -UDQInput::UDQInput(const UDQIndex& index_arg, const UDQDefine& udq_define, const std::string& unit_arg) : - index(index_arg), - define(std::addressof(udq_define)), - assign(nullptr), - m_keyword(udq_define.keyword()), - m_var_type(udq_define.var_type()), - m_unit(unit_arg) -{} - - -UDQInput::UDQInput(const UDQIndex& index_arg, const UDQAssign& udq_assign, const std::string& unit_arg): - index(index_arg), - define(nullptr), - assign(std::addressof(udq_assign)), - m_keyword(udq_assign.keyword()), - m_var_type(udq_assign.var_type()), - m_unit(unit_arg) -{} - -const std::string& UDQInput::unit() const { - return this->m_unit; -} - -const std::string& UDQInput::keyword() const { - return this->m_keyword; -} - -const UDQVarType& UDQInput::var_type() const { - return this->m_var_type; -} - -template<> -bool UDQInput::is() const { - if (this->assign) - return true; - return false; -} - - -template<> -bool UDQInput::is() const { - if (this->define) - return true; - return false; -} - -template<> -const UDQAssign& UDQInput::get() const { - if (this->assign) - return *this->assign; - - throw std::runtime_error("Invalid get"); -} - - -template<> -const UDQDefine& UDQInput::get() const { - if (this->define) - return *this->define; - - throw std::runtime_error("Invalid get"); -} - - - - -} - - diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQParams.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQParams.cpp deleted file mode 100644 index 6a6534cfd5..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQParams.cpp +++ /dev/null @@ -1,139 +0,0 @@ -/* - Copyright 2018 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify it under the terms - of the GNU General Public License as published by the Free Software - Foundation, either version 3 of the License, or (at your option) any later - version. - - OPM is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR - A PARTICULAR PURPOSE. See the GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along with - OPM. If not, see . -*/ - -#include -#include - -#include -#include -#include - -namespace Opm { - - /* - The UDQDIMS keyword contains a long list MAX_XXXX items which probably - originate in an ECLIPSE implementation detail. Our implementation does not - require these max values, we therefor ignore them completely. - */ - UDQParams::UDQParams() : - reseed_rng(false), - random_seed(ParserKeywords::UDQPARAM::RANDOM_SEED::defaultValue), - value_range(ParserKeywords::UDQPARAM::RANGE::defaultValue), - undefined_value(ParserKeywords::UDQPARAM::UNDEFINED_VALUE::defaultValue), - cmp_eps(ParserKeywords::UDQPARAM::CMP_EPSILON::defaultValue) - { - /* - The std::random_device invokes instructions which are not properly - implemented on older valgrind versions, and this code will raise - SIGILL when running under valgrind: - - https://stackoverflow.com/questions/37032339/valgrind-unrecognised-instruction - - std::random_device r; - std::seed_seq seq{ r(), r(), r(), r() }; - this->m_true_rng.seed( seq ); - - The random number stream is therefor seeded using time. - */ - auto now = std::chrono::high_resolution_clock::now(); - auto ns = std::chrono::duration_cast(now.time_since_epoch()); - this->m_true_rng.seed( ns.count() ); - this->m_sim_rng.seed( this->random_seed ); - } - - - UDQParams::UDQParams(const Deck& deck) : - UDQParams() - { - if (deck.hasKeyword("UDQDIMS")) { - const auto& record = deck.getKeyword("UDQDIMS").getRecord(0); - const auto& item = record.getItem("RESTART_NEW_SEED"); - const auto& bool_string = item.get(0); - - reseed_rng = (std::toupper(bool_string[0]) == 'Y'); - } - - if (deck.hasKeyword("UDQPARAM")) { - const auto& record = deck.getKeyword("UDQPARAM").getRecord(0); - random_seed = record.getItem("RANDOM_SEED").get(0); - value_range = record.getItem("RANGE").get(0); - undefined_value = record.getItem("UNDEFINED_VALUE").get(0); - cmp_eps = record.getItem("CMP_EPSILON").get(0); - } - this->m_sim_rng.seed( this->random_seed ); - } - - UDQParams UDQParams::serializeObject() - { - UDQParams result; - result.reseed_rng = true; - result.random_seed = 1; - result.value_range = 2.0; - result.undefined_value = 3.0; - result.cmp_eps = 4.0; - - return result; - } - - /* - If the internal flag reseed_rng is set to true, this method will reset the - rng true_rng with the seed applied; the purpose of this function is to be - able to ensure(?) that a restarted run gets the same sequence of random - numbers as the original run. - */ - void UDQParams::reseedRNG(int seed) { - if (this->reseed_rng) - this->m_true_rng.seed( seed ); - } - - int UDQParams::rand_seed() const noexcept { - return this->random_seed; - } - - double UDQParams::range() const noexcept { - return this->value_range; - } - - double UDQParams::undefinedValue() const noexcept { - return this->undefined_value; - } - - double UDQParams::cmpEpsilon() const noexcept { - return this->cmp_eps; - } - - std::mt19937& UDQParams::sim_rng() { - return this->m_sim_rng; - } - - std::mt19937& UDQParams::true_rng() { - return this->m_true_rng; - } - - bool UDQParams::reseed() const { - return this->reseed_rng; - } - - bool UDQParams::operator==(const UDQParams& data) const { - return this->reseed_rng == data.reseed_rng && - this->random_seed == data.random_seed && - this->value_range == data.value_range && - this->cmp_eps == data.cmp_eps; - } - -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQParser.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQParser.cpp deleted file mode 100644 index 80ef72eece..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQParser.cpp +++ /dev/null @@ -1,328 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include -#include - -#include -#include "UDQParser.hpp" - -namespace Opm { - -UDQTokenType UDQParser::get_type(const std::string& arg) const { - auto func_type = UDQ::funcType(arg); - if (func_type == UDQTokenType::table_lookup) - throw std::invalid_argument("Table lookup function TU*[] is not supported in UDQ"); - - if (func_type != UDQTokenType::error) - return func_type; - - if (arg == "(") - return UDQTokenType::open_paren; - - if (arg == ")") - return UDQTokenType::close_paren; - - { - char * end_ptr; - std::strtod(arg.c_str(), &end_ptr); - if (std::strlen(end_ptr) == 0) - return UDQTokenType::number; - } - - return UDQTokenType::ecl_expr; -} - - -std::size_t UDQParser::current_size() const { - if (this->tokens.size() == static_cast(this->current_pos)) - return 0; - - if (this->current_pos < 0) - return 1; - - const std::string& first_arg = this->tokens[this->current_pos]; - if (this->get_type(first_arg) != UDQTokenType::ecl_expr) - return 1; - - std::size_t offset = this->current_pos; - while (true) { - const std::string& arg = this->tokens[offset]; - if (this->get_type(arg) != UDQTokenType::ecl_expr) - break; - - offset += 1; - - if (offset == this->tokens.size()) - break; - } - - return offset - this->current_pos; -} - - -UDQParseNode UDQParser::next() { - this->current_pos += this->current_size(); - return this->current(); -} - - -bool UDQParser::empty() const { - return (static_cast(this->current_pos) == this->tokens.size()); -} - - -UDQParseNode UDQParser::current() const { - if (this->empty()) - return UDQTokenType::end; - - const std::string& arg = this->tokens[this->current_pos]; - auto type = this->get_type(arg); - if (type != UDQTokenType::ecl_expr) - return UDQParseNode(type, arg); - - std::size_t selector_size = this->current_size() - 1; - std::vector selector; - if (selector_size > 0) { - const auto * token_ptr = std::addressof(this->tokens[this->current_pos + 1]); - selector.assign( token_ptr, token_ptr + selector_size); - } - return UDQParseNode(type, arg, selector); -} - - -UDQASTNode UDQParser::parse_factor() { - auto current = this->current(); - - if (current.type == UDQTokenType::open_paren) { - this->next(); - auto inner_expr = this->parse_cmp(); - - current = this->current(); - if (current.type != UDQTokenType::close_paren) - return UDQASTNode(UDQTokenType::error); - - this->next(); - return inner_expr; - } - - if (UDQ::scalarFunc(current.type) || UDQ::elementalUnaryFunc(current.type)) { - auto func_node = current; - auto next = this->next(); - if (next.type == UDQTokenType::open_paren) { - this->next(); - auto arg_expr = this->parse_cmp(); - - current = this->current(); - if (current.type != UDQTokenType::close_paren) - return UDQASTNode(UDQTokenType::error); - - this->next(); - return UDQASTNode(func_node.type, func_node.value, arg_expr); - } else - return UDQASTNode(UDQTokenType::error); - } - - UDQASTNode node(current.type, current.value, current.selector); - this->next(); - return node; -} - -UDQASTNode UDQParser::parse_pow() { - auto left = this->parse_factor(); - if (this->empty()) - return left; - - auto current = this->current(); - if (current.type == UDQTokenType::binary_op_pow) { - this->next(); - if (this->empty()) - return UDQASTNode(UDQTokenType::error); - - auto right = this->parse_mul(); - return UDQASTNode(current.type, current.value, left, right); - } - - return left; -} - - - -UDQASTNode UDQParser::parse_mul() { - auto left = this->parse_pow(); - auto current = this->current(); - if (this->empty()) - return left; - - if (current.type == UDQTokenType::binary_op_mul || current.type == UDQTokenType::binary_op_div) { - this->next(); - if (this->empty()) - return UDQASTNode(UDQTokenType::error); - - auto right = this->parse_mul(); - return UDQASTNode(current.type, current.value, left, right); - } - - return left; -} - - -UDQASTNode UDQParser::parse_add() { - std::vector nodes; - { - std::unique_ptr current_node; - while (true) { - auto node = this->parse_mul(); - if (current_node) { - current_node->set_right(node); - nodes.push_back(*current_node); - } else - nodes.push_back(node); - - if (this->empty()) - break; - - auto current_token = this->current(); - if (current_token.type == UDQTokenType::binary_op_add || current_token.type == UDQTokenType::binary_op_sub) { - current_node.reset( new UDQASTNode(current_token.type, current_token.value) ); - this->next(); - if (this->empty()) - return UDQASTNode( UDQTokenType::error ); - } else if (current_token.type == UDQTokenType::close_paren || UDQ::cmpFunc(current_token.type)) - break; - else - return UDQASTNode( UDQTokenType::error ); - } - } - - UDQASTNode top_node = nodes.back(); - if (nodes.size() > 1) { - UDQASTNode * current = &top_node; - for (std::size_t index = nodes.size() - 1; index > 0; index--) { - current->set_left(nodes[index - 1]); - current = current->get_left(); - } - } - return top_node; -} - - -/* - A bit uncertain on the presedence of the comparison operators. In normal C the - comparion operators bind weaker than addition, i.e. for the assignment: - - auto cmp = a + b < c; - - The sum (a+b) is evaluated and then compared with c, that is the order of - presedence implemented here. But reading the eclipse UDQ manual one can get - the imporession that the relation operators should bind "very strong", i.e. - that (b < c) should be evaluated first, and then the result of the comparison - added to a. -*/ - -UDQASTNode UDQParser::parse_cmp() { - auto left = this->parse_add(); - if (this->empty()) - return left; - - auto current = this->current(); - if (UDQ::cmpFunc(current.type)) { - auto func_node = current; - this->next(); - if (this->empty()) - return UDQASTNode(UDQTokenType::error); - - auto right = this->parse_cmp(); - return UDQASTNode(current.type, current.value, left, right); - } - return left; -} - -namespace { - void dump_tokens(const std::string& target_var, const std::vector& tokens) { - std::cout << target_var << " = "; - for (const auto& token : tokens) - std::cout << token << " "; - std::cout << std::endl; - } - -/* - This function is extremely weak - hopefully it can be improved in the future. - See the comment in UDQEnums.hpp about 'UDQ type system'. -*/ -bool static_type_check(UDQVarType lhs, UDQVarType rhs) { - if (lhs == rhs) - return true; - - if (rhs == UDQVarType::SCALAR) - return true; - - /* - This does not check if the rhs evaluates to a scalar. - */ - if (rhs == UDQVarType::WELL_VAR) - return (lhs == UDQVarType::WELL_VAR); - - return false; -} -} - - -UDQASTNode UDQParser::parse(const UDQParams& udq_params, UDQVarType target_type, const std::string& target_var, const std::vector& tokens, const ParseContext& parseContext, ErrorGuard& errors) -{ - UDQParser parser(udq_params, tokens); - parser.next(); - auto tree = parser.parse_cmp(); - - if (!parser.empty()) { - size_t index = parser.current_pos; - auto current = parser.current(); - std::string msg = "Extra unhandled data starting with token[" + std::to_string(index) + "] = " + current.value; - parseContext.handleError(ParseContext::UDQ_PARSE_ERROR, msg, errors); - return UDQASTNode( udq_params.undefinedValue() ); - } - - if (!tree.valid()) { - std::string msg = "ERROR: Failed to parse UDQ expression"; - parseContext.handleError(ParseContext::UDQ_PARSE_ERROR, msg, errors); - return UDQASTNode( udq_params.undefinedValue() ); - } - - if (!static_type_check(target_type, tree.var_type)) { - std::string msg = "Invalid compile-time type conversion detected in UDQ expression target type: " + UDQ::typeName(target_type) + " expr type: " + UDQ::typeName(tree.var_type); - parseContext.handleError(ParseContext::UDQ_TYPE_ERROR, msg, errors); - if (parseContext.get(ParseContext::UDQ_TYPE_ERROR) != InputError::IGNORE) - dump_tokens(target_var, tokens); - - return UDQASTNode( udq_params.undefinedValue() ); - } - - if (tree.var_type == UDQVarType::NONE) { - std::string msg = "Parse error when evaluating UDQ define expression - could not determine expression type"; - parseContext.handleError(ParseContext::UDQ_TYPE_ERROR, msg, errors); - if (parseContext.get(ParseContext::UDQ_TYPE_ERROR) != InputError::IGNORE) - dump_tokens(target_var, tokens); - - return UDQASTNode( udq_params.undefinedValue() ); - } - - return tree; -} - -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQParser.hpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQParser.hpp deleted file mode 100644 index 401b8e98e7..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQParser.hpp +++ /dev/null @@ -1,100 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify it under the terms - of the GNU General Public License as published by the Free Software - Foundation, either version 3 of the License, or (at your option) any later - version. - - OPM is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR - A PARTICULAR PURPOSE. See the GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along with - OPM. If not, see . -*/ - - -#ifndef UDQPARSER_HPP -#define UDQPARSER_HPP - -#include -#include - -#ifdef _MSC_VER -#include -typedef SSIZE_T ssize_t; -#endif - -#include -#include -#include -#include - -namespace Opm { - -class ParseContext; -class ErrorGuard; - -struct UDQParseNode { - UDQParseNode(UDQTokenType type_arg, const std::string& value_arg, const std::vector& selector_arg) : - type(type_arg), - value(value_arg), - selector(selector_arg) - { - if (type_arg == UDQTokenType::ecl_expr) - this->var_type = UDQ::targetType(value_arg, selector_arg); - } - - - UDQParseNode(UDQTokenType type_arg, const std::string& value_arg) : - UDQParseNode(type_arg, value_arg, {}) - {} - - - // Implicit converting constructor. - UDQParseNode(UDQTokenType type_arg) : UDQParseNode(type_arg, "") - {} - - UDQTokenType type; - std::string value; - std::vector selector; - UDQVarType var_type = UDQVarType::NONE; -}; - - -class UDQParser { -public: - static UDQASTNode parse(const UDQParams& udq_params, UDQVarType target_type, const std::string& target_var, const std::vector& tokens, const ParseContext& parseContext, ErrorGuard& errors); - -private: - UDQParser(const UDQParams& udq_params1, const std::vector& tokens1) : - udq_params(udq_params1), - udqft(UDQFunctionTable(udq_params)), - tokens(tokens1) - {} - - UDQASTNode parse_cmp(); - UDQASTNode parse_add(); - UDQASTNode parse_factor(); - UDQASTNode parse_mul(); - UDQASTNode parse_pow(); - - UDQParseNode current() const; - UDQParseNode next(); - UDQTokenType get_type(const std::string& arg) const; - std::size_t current_size() const; - bool empty() const; - - const UDQParams& udq_params; - UDQFunctionTable udqft; - std::vector tokens; - ssize_t current_pos = -1; -}; - - -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQSet.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQSet.cpp deleted file mode 100644 index df018362bc..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQSet.cpp +++ /dev/null @@ -1,505 +0,0 @@ -/* - Copyright 2019 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ -#ifdef _WIN32 -#include "cross-platform/windows/Substitutes.hpp" -#else -#include -#endif - -#include - -#include - -namespace Opm { - -UDQScalar::UDQScalar(double value) : - m_value(value), - m_defined(true) -{} - -UDQScalar::UDQScalar(const std::string& wgname) : - m_wgname(wgname) -{} - -bool UDQScalar::defined() const { - return this->m_defined; -} - -double UDQScalar::value() const { - if (!this->m_defined) - throw std::invalid_argument("UDQSCalar: Value not defined"); - - return this->m_value; -} - -const std::string& UDQScalar::wgname() const { - return this->m_wgname; -} - -void UDQScalar::assign(double value) { - this->m_value = value; - this->m_defined = true; -} - -void UDQScalar::operator-=(const UDQScalar& rhs) { - if (this->m_defined && rhs.m_defined) - this->m_value -= rhs.m_value; - else - this->m_defined = false; -} - -void UDQScalar::operator-=(double rhs) { - if (this->m_defined) - this->m_value -= rhs; -} - -void UDQScalar::operator/=(const UDQScalar& rhs) { - if (this->m_defined && rhs.m_defined) - this->m_value /= rhs.m_value; - else - this->m_defined = false; -} - -void UDQScalar::operator/=(double rhs) { - if (this->m_defined) - this->m_value /= rhs; -} - -void UDQScalar::operator+=(const UDQScalar& rhs) { - if (this->m_defined && rhs.m_defined) - this->m_value += rhs.m_value; - else - this->m_defined = false; -} - -void UDQScalar::operator+=(double rhs) { - if (this->m_defined) - this->m_value += rhs; -} - -void UDQScalar::operator*=(const UDQScalar& rhs) { - if (this->m_defined && rhs.m_defined) - this->m_value *= rhs.m_value; - else - this->m_defined = false; -} - -void UDQScalar::operator*=(double rhs) { - if (this->m_defined) - this->m_value *= rhs; -} - - -UDQScalar::operator bool() const { - return this->m_defined; -} - - -const std::string& UDQSet::name() const { - return this->m_name; -} - -UDQSet::UDQSet(const std::string& name, UDQVarType var_type, const std::vector& wgnames) : - m_name(name), - m_var_type(var_type) -{ - for (const auto& wgname : wgnames) - this->values.emplace_back(wgname); -} - -UDQSet::UDQSet(const std::string& name, UDQVarType var_type) : - m_name(name), - m_var_type(var_type) -{ - this->values.resize(1); -} - -UDQSet::UDQSet(const std::string& name, UDQVarType var_type, std::size_t size) : - m_name(name), - m_var_type(var_type) -{ - this->values.resize(size); -} - -UDQSet::UDQSet(const std::string& name, std::size_t size) : - m_name(name) -{ - this->values.resize(size); -} - -UDQSet UDQSet::scalar(const std::string& name, double scalar_value) -{ - UDQSet us(name, UDQVarType::SCALAR); - us.assign(scalar_value); - return us; -} - -UDQSet UDQSet::empty(const std::string& name) -{ - return UDQSet(name, 0); -} - - -UDQSet UDQSet::field(const std::string& name, double scalar_value) -{ - UDQSet us(name, UDQVarType::FIELD_VAR); - us.assign(scalar_value); - return us; -} - - -UDQSet UDQSet::wells(const std::string& name, const std::vector& wells) { - return UDQSet(name, UDQVarType::WELL_VAR, wells); -} - -UDQSet UDQSet::wells(const std::string& name, const std::vector& wells, double scalar_value) { - UDQSet us = UDQSet::wells(name, wells); - us.assign(scalar_value); - return us; -} - - -UDQSet UDQSet::groups(const std::string& name, const std::vector& groups) { - return UDQSet(name, UDQVarType::GROUP_VAR, groups); -} - - -UDQSet UDQSet::groups(const std::string& name, const std::vector& groups, double scalar_value) { - UDQSet us = UDQSet::groups(name, groups); - us.assign(scalar_value); - return us; -} - - - -std::size_t UDQSet::size() const { - return this->values.size(); -} - - -void UDQSet::assign(const std::string& wgname, double value) { - bool assigned = false; - for (auto& udq_value : this->values) { - int flags = 0; - if (fnmatch(wgname.c_str(), udq_value.wgname().c_str(), flags) == 0) { - udq_value.assign( value ); - assigned = true; - } - } - if (!assigned) - throw std::out_of_range("No well/group matching: " + wgname); -} - -void UDQSet::assign(double value) { - for (auto& v : this->values) - v.assign(value); -} - -void UDQSet::assign(std::size_t index, double value) { - auto& scalar = this->values[index]; - scalar.assign(value); -} - - -UDQVarType UDQSet::var_type() const { - return this->m_var_type; -} - -std::vector UDQSet::wgnames() const { - std::vector names; - for (const auto& value : this->values) - names.push_back(value.wgname()); - return names; -} - -/************************************************************************/ - - -void UDQSet::operator+=(const UDQSet& rhs) { - if (this->size() != rhs.size()) - throw std::logic_error("Incompatible size in UDQSet operator+"); - - for (std::size_t index = 0; index < this->size(); index++) - this->values[index] += rhs[index]; -} - -void UDQSet::operator+=(double rhs) { - for (std::size_t index = 0; index < this->size(); index++) - this->values[index] += rhs; -} - -void UDQSet::operator-=(double rhs) { - *(this) += (-rhs); -} - -void UDQSet::operator-=(const UDQSet& rhs) { - *(this) += (rhs * -1.0); -} - - -void UDQSet::operator*=(const UDQSet& rhs) { - if (this->size() != rhs.size()) - throw std::logic_error("Incompatible size UDQSet operator*"); - - for (std::size_t index = 0; index < this->size(); index++) - this->values[index] *= rhs[index]; -} - -void UDQSet::operator*=(double rhs) { - for (std::size_t index = 0; index < this->size(); index++) - this->values[index] *= rhs; -} - -void UDQSet::operator/=(const UDQSet& rhs) { - if (this->size() != rhs.size()) - throw std::logic_error("Incompatible size UDQSet operator/"); - - for (std::size_t index = 0; index < this->size(); index++) - this->values[index] /= rhs[index]; -} - -void UDQSet::operator/=(double rhs) { - for (std::size_t index = 0; index < this->size(); index++) - this->values[index] /= rhs; -} - - -std::vector UDQSet::defined_values() const { - std::vector dv; - for (const auto& v : this->values) { - if (v) - dv.push_back(v.value()); - } - return dv; -} - - -std::size_t UDQSet::defined_size() const { - std::size_t dsize = 0; - for (const auto& v : this->values) { - if (v) - dsize += 1; - } - return dsize; -} - -const UDQScalar& UDQSet::operator[](std::size_t index) const { - if (index >= this->size()) - throw std::out_of_range("Index out of range in UDQset::operator[]"); - return this->values[index]; -} - -const UDQScalar& UDQSet::operator[](const std::string& wgname) const { - auto value_iter = std::find_if( this->values.begin(), this->values.end(), [&wgname](const UDQScalar& value) { return (value.wgname() == wgname );}); - if (value_iter == this->values.end()) - throw std::out_of_range("No such well/group: " + wgname); - return *value_iter; -} - - -std::vector::const_iterator UDQSet::begin() const { - return this->values.begin(); -} - -std::vector::const_iterator UDQSet::end() const { - return this->values.end(); -} - -/*****************************************************************/ -UDQScalar operator+(const UDQScalar&lhs, const UDQScalar& rhs) { - UDQScalar sum = lhs; - sum += rhs; - return sum; -} - -UDQScalar operator+(const UDQScalar&lhs, double rhs) { - UDQScalar sum = lhs; - sum += rhs; - return sum; -} - -UDQScalar operator+(double lhs, const UDQScalar& rhs) { - UDQScalar sum = rhs; - sum += lhs; - return sum; -} - -UDQScalar operator-(const UDQScalar&lhs, const UDQScalar& rhs) { - UDQScalar sum = lhs; - sum -= rhs; - return sum; -} - -UDQScalar operator-(const UDQScalar&lhs, double rhs) { - UDQScalar sum = lhs; - sum -= rhs; - return sum; -} - -UDQScalar operator-(double lhs, const UDQScalar& rhs) { - UDQScalar sum = rhs; - sum -= lhs; - return sum; -} - -UDQScalar operator*(const UDQScalar&lhs, const UDQScalar& rhs) { - UDQScalar sum = lhs; - sum *= rhs; - return sum; -} - -UDQScalar operator*(const UDQScalar&lhs, double rhs) { - UDQScalar sum = lhs; - sum *= rhs; - return sum; -} - -UDQScalar operator*(double lhs, const UDQScalar& rhs) { - UDQScalar sum = rhs; - sum *= lhs; - return sum; -} - -UDQScalar operator/(const UDQScalar&lhs, const UDQScalar& rhs) { - UDQScalar sum = lhs; - sum /= rhs; - return sum; -} - -UDQScalar operator/(const UDQScalar&lhs, double rhs) { - UDQScalar sum = lhs; - sum /= rhs; - return sum; -} - - -UDQScalar operator/(double lhs, const UDQScalar& rhs) { - UDQScalar result = rhs; - if (result) - result.assign(lhs / result.value()); - - return result; -} - -/*-----------------------------------------------------------------*/ - -namespace { - -/* - If one result set is scalar and the other represents a set of wells/groups, - the scalar result is promoted to a set of the right type. -*/ -UDQSet udq_cast(const UDQSet& lhs, const UDQSet& rhs) -{ - if (lhs.size() != rhs.size()) { - if (lhs.var_type() != UDQVarType::SCALAR) { - printf("s1: %ld s2: %ld \n", lhs.size(), rhs.size()); - throw std::logic_error("Type/size mismatch"); - } - - if (rhs.var_type() == UDQVarType::WELL_VAR) - return UDQSet::wells(lhs.name(), rhs.wgnames(), lhs[0].value()); - - if (rhs.var_type() == UDQVarType::GROUP_VAR) - return UDQSet::groups(lhs.name(), rhs.wgnames(), lhs[0].value()); - - throw std::logic_error("Don't have a clue"); - } else - return lhs; -} - -} - -UDQSet operator+(const UDQSet&lhs, const UDQSet& rhs) { - UDQSet sum = udq_cast(lhs, rhs); - sum += rhs; - return sum; -} - -UDQSet operator+(const UDQSet&lhs, double rhs) { - UDQSet sum = lhs; - sum += rhs; - return sum; -} - -UDQSet operator+(double lhs, const UDQSet& rhs) { - UDQSet sum = rhs; - sum += lhs; - return sum; -} - -UDQSet operator-(const UDQSet&lhs, const UDQSet& rhs) { - UDQSet diff = udq_cast(lhs, rhs); - diff -= rhs; - return diff; -} - -UDQSet operator-(const UDQSet&lhs, double rhs) { - UDQSet sum = lhs; - sum -= rhs; - return sum; -} - -UDQSet operator-(double lhs, const UDQSet& rhs) { - UDQSet sum = rhs; - sum -= lhs; - return sum; -} - -UDQSet operator*(const UDQSet&lhs, const UDQSet& rhs) { - UDQSet prod = udq_cast(lhs, rhs); - prod *= rhs; - return prod; -} - -UDQSet operator*(const UDQSet&lhs, double rhs) { - UDQSet prod = lhs; - prod *= rhs; - return prod; -} - -UDQSet operator*(double lhs, const UDQSet& rhs) { - UDQSet sum = rhs; - sum *= lhs; - return sum; -} - -UDQSet operator/(const UDQSet&lhs, const UDQSet& rhs) { - UDQSet frac = udq_cast(lhs, rhs); - frac /= rhs; - return frac; -} - -UDQSet operator/(const UDQSet&lhs, double rhs) { - UDQSet frac = lhs; - frac /= rhs; - return frac; -} - -UDQSet operator/(double lhs, const UDQSet&rhs) { - UDQSet result = rhs; - for (std::size_t index = 0; index < rhs.size(); index++) { - const auto& elm = rhs[index]; - if (elm) - result.assign(index, lhs / elm.value()); - } - return result; -} - -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/VFPInjTable.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/VFPInjTable.cpp deleted file mode 100644 index feee93a388..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/VFPInjTable.cpp +++ /dev/null @@ -1,332 +0,0 @@ -/* - Copyright 2015 SINTEF ICT, Applied Mathematics. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include -#include -#include - -#include -#include -#include -#include -#include -#include - -#include - -//Anonymous namespace -namespace { - -/** - * Trivial helper function that throws if a zero-sized item is found. - */ -template -inline const Opm::DeckItem& getNonEmptyItem( const Opm::DeckRecord& record) { - const auto& retval = record.getItem(); - if (!retval.hasValue(0)) { - throw std::invalid_argument("Missing data"); - } - return retval; -} - -} //Namespace - - - - -namespace Opm { - -VFPInjTable::VFPInjTable() -{ - m_table_num = -1; - m_datum_depth = 0.0; - m_flo_type = FLO_INVALID; -} - - -VFPInjTable::VFPInjTable( const DeckKeyword& table, const UnitSystem& deck_unit_system) { - using ParserKeywords::VFPINJ; - - //Check that the table has enough records - if (table.size() < 4) { - throw std::invalid_argument("VFPINJ table does not appear to have enough records to be valid"); - } - - //Get record 1, the metadata for the table - const auto& header = table.getRecord(0); - - //Get the different header items - m_table_num = getNonEmptyItem(header).get< int >(0); - m_datum_depth = getNonEmptyItem(header).getSIDouble(0); - - m_flo_type = getFloType(getNonEmptyItem(header).get< std::string >(0)); - - //Not used, but check that PRESSURE_DEF is indeed THP - std::string quantity_string = getNonEmptyItem(header).get< std::string >(0); - if (quantity_string != "THP") { - throw std::invalid_argument("PRESSURE_DEF is required to be THP"); - } - - //Check units used for this table - std::string units_string = ""; - if (header.getItem().hasValue(0)) { - units_string = header.getItem().get< std::string >(0); - } - else { - //If units does not exist in record, the default value is the - //unit system of the deck itself: do nothing... - } - - if (units_string != "") { - UnitSystem::UnitType table_unit_type; - - //FIXME: Only metric and field supported at the moment. - //Need to change all of the convertToSI functions to support LAB/PVT-M - - if (units_string == "METRIC") { - table_unit_type = UnitSystem::UnitType::UNIT_TYPE_METRIC; - } - else if (units_string == "FIELD") { - table_unit_type = UnitSystem::UnitType::UNIT_TYPE_FIELD; - } - else if (units_string == "LAB") { - table_unit_type = UnitSystem::UnitType::UNIT_TYPE_FIELD; - } - else if (units_string == "PVT-M") { - throw std::invalid_argument("Unsupported UNITS string: 'PVT-M'"); - } - else { - throw std::invalid_argument("Invalid UNITS string"); - } - - //Sanity check - if(table_unit_type != deck_unit_system.getType()) { - throw std::invalid_argument("Deck units are not equal VFPINJ table units."); - } - } - - //Quantity in the body of the table - std::string body_string = getNonEmptyItem(header).get< std::string >(0); - if (body_string != "BHP") { - throw std::invalid_argument("Invalid BODY_DEF string"); - } - - - //Get actual rate / flow values - m_flo_data = getNonEmptyItem(table.getRecord(1)).getData< double >(); - convertFloToSI(m_flo_type, m_flo_data, deck_unit_system); - - //Get actual tubing head pressure values - m_thp_data = getNonEmptyItem(table.getRecord(2)).getData< double >(); - convertTHPToSI(m_thp_data, deck_unit_system); - - //Finally, read the actual table itself. - size_t nt = m_thp_data.size(); - size_t nf = m_flo_data.size(); - m_data.resize(nt*nf); - std::fill_n(m_data.data(), m_data.size(), std::nan("0")); - - //Check that size of table matches size of axis: - if (table.size() != nt + 3) { - throw std::invalid_argument("VFPINJ table does not contain enough records."); - } - - const double table_scaling_factor = deck_unit_system.parse("Pressure").getSIScaling(); - for (size_t i=3; i(record).get< int >(0) - 1; - - //Rest of values (bottom hole pressure or tubing head temperature) have index of flo value - const std::vector& bhp_tht = getNonEmptyItem(record).getData< double >(); - - if (bhp_tht.size() != nf) { - throw std::invalid_argument("VFPINJ table does not contain enough FLO values."); - } - - for (unsigned int f=0; f 1.0e10) { - //TODO: Replace with proper log message - std::cerr << "Too large value encountered in VFPINJ in [" - << t << "," << f << "]=" << value << std::endl; - } - (*this)(t,f) = table_scaling_factor*value; - } - } - - check(); -} - - -VFPInjTable VFPInjTable::serializeObject() -{ - VFPInjTable result; - result.m_table_num = 1; - result.m_datum_depth = 2.0; - result.m_flo_type = FLO_WAT; - result.m_flo_data = {3.0, 4.0}; - result.m_thp_data = {5.0, 6.0}; - result.m_data = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0}; - - return result; -} - - - - - - -void VFPInjTable::check() { - //Table number - assert(m_table_num > 0); - - //Misc types - assert(m_flo_type >= FLO_OIL && m_flo_type < FLO_INVALID); - - //Data axis size - assert(m_flo_data.size() > 0); - assert(m_thp_data.size() > 0); - - //Data axis sorted? - assert(is_sorted(m_flo_data.begin(), m_flo_data.end())); - assert(is_sorted(m_thp_data.begin(), m_thp_data.end())); - - //Check data size matches axes - assert(m_data.size() == m_thp_data.size() * m_flo_data.size()); - - //Finally, check that all data is within reasonable ranges, defined to be up-to 1.0e10... - typedef array_type::size_type size_type; - for (size_type t = 0; t < m_thp_data.size(); ++t) { - for (size_type f = 0; f < m_flo_data.size(); ++f) { - if (std::isnan((*this)(t,f))) { - //TODO: Replace with proper log message - std::cerr << "VFPINJ element [" << t << "," << f << "] not set!" << std::endl; - throw std::invalid_argument("Missing VFPINJ value"); - } - } - } -} - - - - - - - - - -VFPInjTable::FLO_TYPE VFPInjTable::getFloType(std::string flo_string) { - if (flo_string == "OIL") { - return FLO_OIL; - } - else if (flo_string == "WAT") { - return FLO_WAT; - } - else if (flo_string == "GAS") { - return FLO_GAS; - } - else { - throw std::invalid_argument("Invalid RATE_TYPE string"); - } - return FLO_INVALID; -} - - - - - - - - -void VFPInjTable::scaleValues(std::vector& values, - const double& scaling_factor) { - if (scaling_factor == 1.0) { - return; - } - else { - for (unsigned int i=0; i& values, - const UnitSystem& unit_system) { - double scaling_factor = 1.0; - switch (type) { - case FLO_OIL: - case FLO_WAT: - scaling_factor = unit_system.parse("LiquidSurfaceVolume/Time").getSIScaling(); - break; - case FLO_GAS: - scaling_factor = unit_system.parse("GasSurfaceVolume/Time").getSIScaling(); - break; - default: - throw std::logic_error("Invalid FLO type"); - } - scaleValues(values, scaling_factor); -} - - - - - - - -void VFPInjTable::convertTHPToSI(std::vector& values, - const UnitSystem& unit_system) { - double scaling_factor = unit_system.parse("Pressure").getSIScaling(); - scaleValues(values, scaling_factor); -} - - -bool VFPInjTable::operator==(const VFPInjTable& data) const { - return this->getTableNum() == data.getTableNum() && - this->getDatumDepth () == data.getDatumDepth() && - this->getFloType() == data.getFloType() && - this->getFloAxis() == data.getFloAxis() && - this->getTHPAxis() == data.getTHPAxis() && - this->getTable() == data.getTable(); -} - - -double VFPInjTable::operator()(size_t thp_idx, size_t flo_idx) const { - return m_data[thp_idx*m_flo_data.size() + flo_idx]; -} - - -double& VFPInjTable::operator()(size_t thp_idx, size_t flo_idx) { - return m_data[thp_idx*m_flo_data.size() + flo_idx]; -} - - -std::array VFPInjTable::shape() const { - return {m_thp_data.size(), m_flo_data.size()}; -} - - -} //Namespace diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/VFPProdTable.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/VFPProdTable.cpp deleted file mode 100644 index e10e4d3840..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/VFPProdTable.cpp +++ /dev/null @@ -1,574 +0,0 @@ -/* - Copyright 2015 SINTEF ICT, Applied Mathematics. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include -#include -#include -#include - -#include - -#include -#include -#include -#include -#include -#include - -#include - - -namespace Opm { - -namespace { - -VFPProdTable::FLO_TYPE getFloType( const DeckItem& item) { - const std::string& flo_string = item.getTrimmedString(0); - if (flo_string == "OIL") { - return VFPProdTable::FLO_OIL; - } - else if (flo_string == "LIQ") { - return VFPProdTable::FLO_LIQ; - } - else if (flo_string == "GAS") { - return VFPProdTable::FLO_GAS; - } - else { - throw std::invalid_argument("Invalid RATE_TYPE string: " + flo_string); - } - return VFPProdTable::FLO_INVALID; -} - -VFPProdTable::WFR_TYPE getWFRType( const DeckItem& item) { - const std::string& wfr_string = item.getTrimmedString(0); - if (wfr_string == "WOR") { - return VFPProdTable::WFR_WOR; - } - else if (wfr_string == "WCT") { - return VFPProdTable::WFR_WCT; - } - else if (wfr_string == "WGR") { - return VFPProdTable::WFR_WGR; - } - else { - throw std::invalid_argument("Invalid WFR string"); - } - return VFPProdTable::WFR_INVALID; -} - -VFPProdTable::GFR_TYPE getGFRType( const DeckItem& item) {; - const std::string& gfr_string = item.getTrimmedString(0); - if (gfr_string == "GOR") { - return VFPProdTable::GFR_GOR; - } - else if (gfr_string == "GLR") { - return VFPProdTable::GFR_GLR; - } - else if (gfr_string == "OGR") { - return VFPProdTable::GFR_OGR; - } - else { - throw std::invalid_argument("Invalid GFR string"); - } - return VFPProdTable::GFR_INVALID; -} - -VFPProdTable::ALQ_TYPE getALQType( const DeckItem& item) { - if (item.defaultApplied(0)) { - return VFPProdTable::ALQ_UNDEF; - } else { - const std::string& alq_string = item.getTrimmedString(0); - - if (alq_string == "GRAT") { - return VFPProdTable::ALQ_GRAT; - } - else if (alq_string == "IGLR") { - return VFPProdTable::ALQ_IGLR; - } - else if (alq_string == "TGLR") { - return VFPProdTable::ALQ_TGLR; - } - else if (alq_string == "PUMP") { - return VFPProdTable::ALQ_PUMP; - } - else if (alq_string == "COMP") { - return VFPProdTable::ALQ_COMP; - } - else if (alq_string == "BEAN") { - return VFPProdTable::ALQ_BEAN; - } - else if (alq_string == "") { - return VFPProdTable::ALQ_UNDEF; - } - else { - throw std::invalid_argument("Invalid ALQ_DEF string: " + alq_string); - } - - return VFPProdTable::ALQ_INVALID; - } -} - -} - - -VFPProdTable::VFPProdTable() -{ - m_table_num = -1; - m_datum_depth = 0.0; - m_flo_type = FLO_INVALID; - m_wfr_type = WFR_INVALID; - m_gfr_type = GFR_INVALID; - m_alq_type = ALQ_INVALID; - -} - - -VFPProdTable::VFPProdTable(int table_num, - double datum_depth, - FLO_TYPE flo_type, - WFR_TYPE wfr_type, - GFR_TYPE gfr_type, - ALQ_TYPE alq_type, - const std::vector& flo_data, - const std::vector& thp_data, - const std::vector& wfr_data, - const std::vector& gfr_data, - const std::vector& alq_data, - const array_type& data) { - - m_table_num = table_num; - m_datum_depth = datum_depth; - m_flo_type = flo_type; - m_wfr_type = wfr_type; - m_gfr_type = gfr_type; - m_alq_type = alq_type; - m_flo_data = flo_data; - m_thp_data = thp_data; - m_wfr_data = wfr_data; - m_gfr_data = gfr_data; - m_alq_data = alq_data; - m_data = data; - - //check(); -} - - -VFPProdTable VFPProdTable::serializeObject() -{ - VFPProdTable result; - result.m_table_num = 1; - result.m_datum_depth = 2; - result.m_flo_type = FLO_OIL; - result.m_wfr_type = WFR_WOR; - result.m_gfr_type = GFR_GLR; - result.m_alq_type = ALQ_TGLR; - result.m_flo_data = {1.0, 2.0, 3.0, 4.0, 5.0}; - result.m_thp_data = {6.0}; - result.m_wfr_data = {7.0}; - result.m_gfr_data = {8.0}; - result.m_alq_data = {9.0, 10.0, 11.0}; - result.m_data = {12.0, 13.0, 14.0, 15.0, 16.0}; - - return result; -} - - -VFPProdTable::VFPProdTable( const DeckKeyword& table, const UnitSystem& deck_unit_system) { - using ParserKeywords::VFPPROD; - - //Check that the table has enough records - if (table.size() < 7) { - throw std::invalid_argument("VFPPROD table does not appear to have enough records to be valid"); - } - - //Get record 1, the metadata for the table - const auto& header = table.getRecord(0); - - //Get the different header items - m_table_num = header.getItem().get< int >(0); - m_datum_depth = header.getItem().getSIDouble(0); - - m_flo_type = Opm::getFloType(header.getItem()); - m_wfr_type = Opm::getWFRType(header.getItem()); - m_gfr_type = Opm::getGFRType(header.getItem()); - - //Not used, but check that PRESSURE_DEF is indeed THP - std::string quantity_string = header.getItem().get< std::string >(0); - if (quantity_string != "THP") { - throw std::invalid_argument("PRESSURE_DEF is required to be THP"); - } - - m_alq_type = Opm::getALQType(header.getItem()); - - //Check units used for this table - std::string units_string = ""; - if (header.getItem().hasValue(0)) { - units_string = header.getItem().get< std::string >(0); - } - else { - //If units does not exist in record, the default value is the - //unit system of the deck itself: do nothing... - } - - if (units_string != "") { - UnitSystem::UnitType table_unit_type; - - //FIXME: Only metric and field supported at the moment. - //Need to change all of the convertToSI functions to support LAB/PVT-M - - if (units_string == "METRIC") { - table_unit_type = UnitSystem::UnitType::UNIT_TYPE_METRIC; - } - else if (units_string == "FIELD") { - table_unit_type = UnitSystem::UnitType::UNIT_TYPE_FIELD; - } - else if (units_string == "LAB") { - table_unit_type = UnitSystem::UnitType::UNIT_TYPE_LAB; - } - else if (units_string == "PVT-M") { - throw std::invalid_argument("Unsupported UNITS string: 'PVT-M'"); - } - else { - throw std::invalid_argument("Invalid UNITS string"); - } - - //Sanity check - if(table_unit_type != deck_unit_system.getType()) { - throw std::invalid_argument("Deck units are not equal VFPPROD table units."); - } - } - - //Quantity in the body of the table - std::string body_string = header.getItem().get< std::string >(0); - if (body_string == "TEMP") { - throw std::invalid_argument("Invalid BODY_DEF string: TEMP not supported"); - } - else if (body_string == "BHP") { - - } - else { - throw std::invalid_argument("Invalid BODY_DEF string"); - } - - - //Get actual rate / flow values - m_flo_data = table.getRecord(1).getItem().getData< double >(); - convertFloToSI(m_flo_type, m_flo_data, deck_unit_system); - - //Get actual tubing head pressure values - m_thp_data = table.getRecord(2).getItem().getData< double >(); - convertTHPToSI(m_thp_data, deck_unit_system); - - //Get actual water fraction values - m_wfr_data = table.getRecord(3).getItem().getData< double >(); - convertWFRToSI(m_wfr_type, m_wfr_data, deck_unit_system); - - //Get actual gas fraction values - m_gfr_data = table.getRecord(4).getItem().getData< double >(); - convertGFRToSI(m_gfr_type, m_gfr_data, deck_unit_system); - - //Get actual gas fraction values - m_alq_data = table.getRecord(5).getItem().getData< double >(); - - //Finally, read the actual table itself. - size_t nt = m_thp_data.size(); - size_t nw = m_wfr_data.size(); - size_t ng = m_gfr_data.size(); - size_t na = m_alq_data.size(); - size_t nf = m_flo_data.size(); - m_data.resize(nt*nw*ng*na*nf); - std::fill_n(m_data.data(), m_data.size(), std::nan("0")); - - //Check that size of table matches size of axis: - if (table.size() != nt*nw*ng*na + 6) { - throw std::invalid_argument("VFPPROD table does not contain enough records."); - } - - //FIXME: Unit for TEMP=Tubing head temperature is not Pressure, see BODY_DEF - const double table_scaling_factor = deck_unit_system.parse("Pressure").getSIScaling(); - for (size_t i=6; i().get< int >(0) - 1; - int w = record.getItem().get< int >(0) - 1; - int g = record.getItem().get< int >(0) - 1; - int a = record.getItem().get< int >(0) - 1; - - //Rest of values (bottom hole pressure or tubing head temperature) have index of flo value - const std::vector& bhp_tht = record.getItem().getData< double >(); - - if (bhp_tht.size() != nf) { - throw std::invalid_argument("VFPPROD table does not contain enough FLO values."); - } - - for (size_t f=0; f 1.0e10) { - //TODO: Replace with proper log message - std::cerr << "VFPPROD element [" - << t << "," << w << "," << g << "," << a << "," << f - << "]=" << bhp_tht[f] << " too large" << std::endl; - } - (*this)(t,w,g,a,f) = table_scaling_factor*bhp_tht[f]; - } - } - - check(table, table_scaling_factor); -} - - - - - - - - - - -void VFPProdTable::check(const DeckKeyword& keyword, const double table_scaling_factor) { - //Table number - assert(m_table_num > 0); - - //Misc types - assert(m_flo_type >= FLO_OIL && m_flo_type < FLO_INVALID); - assert(m_wfr_type >= WFR_WOR && m_wfr_type < WFR_INVALID); - assert(m_gfr_type >= GFR_GOR && m_gfr_type < GFR_INVALID); - assert(m_alq_type >= ALQ_GRAT && m_alq_type < ALQ_INVALID); - - //Data axis size - assert(m_flo_data.size() > 0); - assert(m_thp_data.size() > 0); - assert(m_wfr_data.size() > 0); - assert(m_gfr_data.size() > 0); - assert(m_alq_data.size() > 0); - - //Data axis sorted? - assert(std::is_sorted(m_flo_data.begin(), m_flo_data.end())); - assert(std::is_sorted(m_thp_data.begin(), m_thp_data.end())); - assert(std::is_sorted(m_wfr_data.begin(), m_wfr_data.end())); - assert(std::is_sorted(m_gfr_data.begin(), m_gfr_data.end())); - assert(std::is_sorted(m_alq_data.begin(), m_alq_data.end())); - - size_t nt = m_thp_data.size(); - size_t nw = m_wfr_data.size(); - size_t ng = m_gfr_data.size(); - size_t na = m_alq_data.size(); - size_t nf = m_flo_data.size(); - - //Check data size matches axes - assert(m_data.size() == nt*nw*ng*na*nf); - - //Check that bhp(thp) is a monotonic increasing function. - //If this is not the case, we might not be able to determine - //the thp from the bhp easily - typedef array_type::size_type size_type; - std::string points; - for (size_type w = 0; w < nw; ++w) { - for (size_type g = 0; g < ng; ++g) { - for (size_type a = 0; a < na; ++a) { - for (size_type f = 0; f < nf; ++f) { - double bhp_last = (*this)(0,w,g,a,f); - for (size_type t = 0; t < nt; ++t) { - //Check that all elements have been set - if (std::isnan((*this)(t,w,g,a,f))) { - //TODO: Replace with proper log message - std::cerr << "VFPPROD element [" - << t << "," << w << "," << g << "," << a << "," << f - << "] not set!" << std::endl; - throw std::invalid_argument("Missing VFPPROD value"); - } - if ((*this)(t,w,g,a,f) < bhp_last) { - points += "At point (FLOW, THP, WFR, GFR, ALQ) = " - + std::to_string(f) + " " + std::to_string(t) + " " - + std::to_string(w) + " " + std::to_string(g) + " " - + std::to_string(a) + " at BHP = " - + std::to_string((*this)(t,w,g,a,f) / table_scaling_factor) + "\n"; - } - bhp_last = (*this)(t,w,g,a,f); - } - } - } - } - } - - if (!points.empty()) { - const auto& location = keyword.location(); - OpmLog::warning("VFP table for production wells has BHP versus THP not " - + std::string("monotonically increasing.\nThis may cause convergence ") - + "issues due to switching between BHP and THP control mode." - + std::string("\nIn keyword VFPPROD table number ") - + std::to_string(m_table_num) - + ", file " + location.filename - + ", line " + std::to_string(location.lineno) - + "\n"); - OpmLog::note(points); - } -} - - - - - - - - -void VFPProdTable::scaleValues(std::vector& values, - const double& scaling_factor) { - if (scaling_factor == 1.0) { - return; - } - else { - for (size_t i=0; i& values, - const UnitSystem& unit_system) { - double scaling_factor = 1.0; - switch (type) { - case FLO_OIL: - case FLO_LIQ: - scaling_factor = unit_system.parse("LiquidSurfaceVolume/Time").getSIScaling(); - break; - case FLO_GAS: - scaling_factor = unit_system.parse("GasSurfaceVolume/Time").getSIScaling(); - break; - default: - throw std::logic_error("Invalid FLO type"); - } - scaleValues(values, scaling_factor); -} - - - - - - - -void VFPProdTable::convertTHPToSI(std::vector& values, - const UnitSystem& unit_system) { - double scaling_factor = unit_system.parse("Pressure").getSIScaling(); - scaleValues(values, scaling_factor); -} - - - - - - - -void VFPProdTable::convertWFRToSI(const WFR_TYPE& type, - std::vector& values, - const UnitSystem& unit_system) { - double scaling_factor = 1.0; - switch (type) { - case WFR_WOR: - case WFR_WCT: - scaling_factor = unit_system.parse("LiquidSurfaceVolume/LiquidSurfaceVolume").getSIScaling(); - break; - case WFR_WGR: - scaling_factor = unit_system.parse("LiquidSurfaceVolume/GasSurfaceVolume").getSIScaling(); - break; - default: - throw std::logic_error("Invalid FLO type"); - } - scaleValues(values, scaling_factor); -} - - - - - - - -void VFPProdTable::convertGFRToSI(const GFR_TYPE& type, - std::vector& values, - const UnitSystem& unit_system) { - double scaling_factor = 1.0; - switch (type) { - case GFR_GOR: - case GFR_GLR: - scaling_factor = unit_system.parse("GasSurfaceVolume/LiquidSurfaceVolume").getSIScaling(); - break; - case GFR_OGR: - scaling_factor = unit_system.parse("LiquidSurfaceVolume/GasSurfaceVolume").getSIScaling(); - break; - default: - throw std::logic_error("Invalid FLO type"); - } - scaleValues(values, scaling_factor); -} - - -bool VFPProdTable::operator==(const VFPProdTable& data) const { - return this->getTableNum() == data.getTableNum() && - this->getDatumDepth () == data.getDatumDepth() && - this->getFloType() == data.getFloType() && - this->getWFRType() == data.getWFRType() && - this->getGFRType() == data.getGFRType() && - this->getALQType() == data.getALQType() && - this->getFloAxis() == data.getFloAxis() && - this->getTHPAxis() == data.getTHPAxis() && - this->getWFRAxis() == data.getWFRAxis() && - this->getGFRAxis() == data.getGFRAxis() && - this->getALQAxis() == data.getALQAxis() && - this->getTable() == data.getTable(); -} - - -double VFPProdTable::operator()(size_t thp_idx, size_t wfr_idx, size_t gfr_idx, size_t alq_idx, size_t flo_idx) const { - size_t nw = m_wfr_data.size(); - size_t ng = m_gfr_data.size(); - size_t na = m_alq_data.size(); - size_t nf = m_flo_data.size(); - - return m_data[thp_idx*nw*ng*na*nf + wfr_idx*ng*na*nf + gfr_idx*na*nf + alq_idx*nf + flo_idx]; -} - - -double& VFPProdTable::operator()(size_t thp_idx, size_t wfr_idx, size_t gfr_idx, size_t alq_idx, size_t flo_idx) { - size_t nw = m_wfr_data.size(); - size_t ng = m_gfr_data.size(); - size_t na = m_alq_data.size(); - size_t nf = m_flo_data.size(); - - return m_data[thp_idx*nw*ng*na*nf + wfr_idx*ng*na*nf + gfr_idx*na*nf + alq_idx*nf + flo_idx]; -} - - -std::array VFPProdTable::shape() const { - size_t nt = m_thp_data.size(); - size_t nw = m_wfr_data.size(); - size_t ng = m_gfr_data.size(); - size_t na = m_alq_data.size(); - size_t nf = m_flo_data.size(); - - return {nt, nw, ng, na, nf}; -} - -} //Namespace opm diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Well/Connection.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Well/Connection.cpp deleted file mode 100644 index 3eecb18d11..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Well/Connection.cpp +++ /dev/null @@ -1,420 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - - -namespace Opm { - - - Connection::Connection(int i, int j , int k , - std::size_t global_index, - int compnum, - double depth, - State stateArg , - double CF, - double Kh, - double rw, - double r0, - double skin_factor, - const int satTableId, - const Direction directionArg, - const CTFKind ctf_kind, - const std::size_t sort_value, - const double segDistStart, - const double segDistEnd, - const bool defaultSatTabId) - : direction(directionArg), - center_depth(depth), - open_state(stateArg), - sat_tableId(satTableId), - m_complnum( compnum ), - m_CF(CF), - m_Kh(Kh), - m_rw(rw), - m_r0(r0), - m_skin_factor(skin_factor), - ijk({i,j,k}), - m_ctfkind(ctf_kind), - m_global_index(global_index), - m_sort_value(sort_value), - m_segDistStart(segDistStart), - m_segDistEnd(segDistEnd), - m_defaultSatTabId(defaultSatTabId) - { - } - -namespace { -constexpr bool defaultSatTabId = true; -} - -Connection::Connection(const RestartIO::RstConnection& rst_connection, const EclipseGrid& grid, const FieldPropsManager& fp) : - direction(rst_connection.dir), - center_depth(rst_connection.depth), - open_state(rst_connection.state), - sat_tableId(rst_connection.drain_sat_table), - m_complnum(rst_connection.completion), - m_CF(rst_connection.cf), - m_Kh(rst_connection.kh), - m_rw(rst_connection.diameter / 2), - m_r0(rst_connection.r0), - m_skin_factor(rst_connection.skin_factor), - ijk(rst_connection.ijk), - m_ctfkind(rst_connection.cf_kind), - m_global_index(grid.getGlobalIndex(this->ijk[0], this->ijk[1], this->ijk[2])), - m_sort_value(rst_connection.rst_index), - m_segDistStart(rst_connection.segdist_start), - m_segDistEnd(rst_connection.segdist_end), - m_defaultSatTabId(defaultSatTabId), - segment_number(rst_connection.segment) - { - if (this->m_defaultSatTabId) { - const auto& satnum = fp.get_int("SATNUM"); - auto active_index = grid.activeIndex(this->ijk[0], this->ijk[1], this->ijk[2]); - this->sat_tableId = satnum[active_index]; - } - - } - - Connection::Connection() - : Connection(0, 0, 0, 0, 0, 0.0, State::SHUT, 0.0, 0.0, 0.0, 0.0, 0.0, - 0, Direction::X, CTFKind::DeckValue, 0, 0.0, 0.0, false) - {} - - Connection Connection::serializeObject() - { - Connection result; - result.direction = Direction::Y; - result.center_depth = 1.0; - result.open_state = State::OPEN; - result.sat_tableId = 2; - result.m_complnum = 3; - result.m_CF = 4.0; - result.m_Kh = 5.0; - result.m_rw = 6.0; - result.m_r0 = 7.0; - result.m_skin_factor = 8.0; - result.ijk = {9, 10, 11}; - result.m_ctfkind = CTFKind::Defaulted; - result.m_global_index = 12; - result.m_sort_value = 14; - result.m_segDistEnd = 15.0; - result.m_defaultSatTabId = true; - result.segment_number = 16; - - return result; - } - - bool Connection::sameCoordinate(const int i, const int j, const int k) const { - if ((ijk[0] == i) && (ijk[1] == j) && (ijk[2] == k)) { - return true; - } else { - return false; - } - } - - int Connection::getI() const { - return ijk[0]; - } - - int Connection::getJ() const { - return ijk[1]; - } - - int Connection::getK() const { - return ijk[2]; - } - - std::size_t Connection::global_index() const { - return this->m_global_index; - } - - bool Connection::attachedToSegment() const { - return (segment_number > 0); - } - - std::size_t Connection::sort_value() const { - return m_sort_value; - } - - const bool& Connection::getDefaultSatTabId() const { - return m_defaultSatTabId; - } - - Connection::Direction Connection::dir() const { - return this->direction; - } - - const double& Connection::getSegDistStart() const { - return m_segDistStart; - } - - const double& Connection::getSegDistEnd() const { - return m_segDistEnd; - } - - - void Connection::setDefaultSatTabId(bool id) { - m_defaultSatTabId = id; - } - - double Connection::depth() const { - return this->center_depth; - } - - Connection::State Connection::state() const { - return this->open_state; - } - - int Connection::satTableId() const { - return this->sat_tableId; - } - - int Connection::complnum() const { - return this->m_complnum; - } - - void Connection::setComplnum(int complnum) { - this->m_complnum = complnum; - } - - double Connection::CF() const { - return this->m_CF; - } - - double Connection::Kh() const { - return this->m_Kh; - } - - double Connection::rw() const { - return this->m_rw; - } - - double Connection::r0() const { - return this->m_r0; - } - - double Connection::skinFactor() const { - return this->m_skin_factor; - } - - void Connection::setState(State state) { - this->open_state = state; - } - - void Connection::updateSegment(int segment_number_arg, - double center_depth_arg, - std::size_t compseg_insert_index, - double start, - double end) { - this->segment_number = segment_number_arg; - this->center_depth = center_depth_arg; - this->m_sort_value = compseg_insert_index; - this->m_segDistStart = start; - this->m_segDistEnd = end; - } - - void Connection::updateSegmentRST(int segment_number_arg, - double center_depth_arg) { - this->segment_number = segment_number_arg; - this->center_depth = center_depth_arg; - } - - int Connection::segment() const { - return this->segment_number; - } - - void Connection::scaleWellPi(double wellPi) { - this->m_CF *= wellPi; - } - - - - std::string Connection::str() const { - std::stringstream ss; - ss << "ijk: " << this->ijk[0] << "," << this->ijk[1] << "," << this->ijk[2] << std::endl; - ss << "COMPLNUM " << this->m_complnum << std::endl; - ss << "CF " << this->m_CF << std::endl; - ss << "RW " << this->m_rw << std::endl; - ss << "R0 " << this->m_r0 << std::endl; - ss << "skinf " << this->m_skin_factor << std::endl; - ss << "kh " << this->m_Kh << std::endl; - ss << "sat_tableId " << this->sat_tableId << std::endl; - ss << "open_state " << Connection::State2String(this->open_state) << std::endl; - ss << "direction " << Connection::Direction2String(this->direction) << std::endl; - ss << "CTF Source " << Connection::CTFKindToString(this->m_ctfkind) << '\n'; - ss << "segment_nr " << this->segment_number << std::endl; - ss << "center_depth " << this->center_depth << std::endl; - ss << "sort_value" << this->m_sort_value<< std::endl; - - return ss.str(); -} - - bool Connection::operator==( const Connection& rhs ) const { - return this->ijk == rhs.ijk - && this->m_global_index == rhs.m_global_index - && this->m_complnum == rhs.m_complnum - && this->m_CF == rhs.m_CF - && this->m_rw == rhs.m_rw - && this->m_r0 == rhs.m_r0 - && this->m_skin_factor == rhs.m_skin_factor - && this->m_Kh == rhs.m_Kh - && this->sat_tableId == rhs.sat_tableId - && this->open_state == rhs.open_state - && this->direction == rhs.direction - && this->segment_number == rhs.segment_number - && this->center_depth == rhs.center_depth - && this->m_sort_value == rhs.m_sort_value; - } - - bool Connection::operator!=( const Connection& rhs ) const { - return !( *this == rhs ); - } - - - -const std::string Connection::State2String( State enumValue ) { - switch( enumValue ) { - case State::OPEN: - return "OPEN"; - case State::AUTO: - return "AUTO"; - case State::SHUT: - return "SHUT"; - default: - throw std::invalid_argument("Unhandled enum value"); - } -} - - -Connection::State Connection::StateFromString( const std::string& stringValue ) { - if (stringValue == "OPEN") - return State::OPEN; - else if (stringValue == "SHUT") - return State::SHUT; - else if (stringValue == "STOP") - return State::SHUT; - else if (stringValue == "AUTO") - return State::AUTO; - else - throw std::invalid_argument("Unknown enum state string: " + stringValue ); -} - - -std::string Connection::Direction2String(const Direction enumValue) -{ - std::string stringValue; - - switch (enumValue) { - case Direction::X: - stringValue = "X"; - break; - - case Direction::Y: - stringValue = "Y"; - break; - - case Direction::Z: - stringValue = "Z"; - break; - } - - return stringValue; -} - - -Connection::Direction Connection::DirectionFromString(const std::string& s ) -{ - Direction direction; - - if (s == "X") { direction = Direction::X; } - else if (s == "Y") { direction = Direction::Y; } - else if (s == "Z") { direction = Direction::Z; } - else { - std::string msg = "Unsupported completion direction " + s; - throw std::invalid_argument(msg); - } - - return direction; -} - - -const std::string Connection::Order2String( Order enumValue ) { - switch( enumValue ) { - case Order::DEPTH: - return "DEPTH"; - case Order::INPUT: - return "INPUT"; - case Order::TRACK: - return "TRACK"; - default: - throw std::invalid_argument("Unhandled enum value"); - } -} - - -Connection::Order Connection::OrderFromString(const std::string& stringValue ) { - if (stringValue == "DEPTH") - return Order::DEPTH; - else if (stringValue == "INPUT") - return Order::INPUT; - else if (stringValue == "TRACK") - return Order::TRACK; - else - throw std::invalid_argument("Unknown enum state string: " + stringValue ); -} - -std::string Connection::CTFKindToString(const CTFKind ctf_kind) -{ - switch (ctf_kind) { - case CTFKind::DeckValue: - return "DeckValue"; - - case CTFKind::Defaulted: - return "Defaulted"; - } - - throw std::invalid_argument { - "Unhandled CTF Kind Value: " + - std::to_string(static_cast(ctf_kind)) - }; -} - -Connection::CTFKind Connection::kind() const { - return m_ctfkind; -} - -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Well/WList.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Well/WList.cpp deleted file mode 100644 index 4ec67176da..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Well/WList.cpp +++ /dev/null @@ -1,63 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include - -namespace Opm { - -WList::WList(const storage& wlist) : - well_list(wlist) -{ -} - - -std::size_t WList::size() const { - return this->well_list.size(); -} - - -bool WList::has(const std::string& well) const { - return (this->well_list.find(well) != this->well_list.end()); -} - -void WList::add(const std::string& well) { - this->well_list.insert(well); -} - -void WList::del(const std::string& well) { - this->well_list.erase(well); -} - -std::vector WList::wells() const { - return { this->well_list.begin(), this->well_list.end() }; -} - -WList::storage::const_iterator WList::begin() const { - return this->well_list.begin(); -} - -WList::storage::const_iterator WList::end() const { - return this->well_list.end(); -} - -bool WList::operator==(const WList& data) const { - return this->well_list == data.well_list; -} - -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Well/WListManager.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Well/WListManager.cpp deleted file mode 100644 index d7b487d6bf..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Well/WListManager.cpp +++ /dev/null @@ -1,69 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ -#ifdef _WIN32 -#include "cross-platform/windows/Substitutes.hpp" -#else -#include -#endif - -#include -#include - -namespace Opm { - - WListManager WListManager::serializeObject() - { - WListManager result; - result.wlists = {{"test1", WList({"test2", "test3"})}}; - - return result; - } - - bool WListManager::hasList(const std::string& name) const { - return (this->wlists.find(name) != this->wlists.end()); - } - - - WList& WListManager::newList(const std::string& name) { - this->wlists.erase(name); - this->wlists.insert( {name, WList() }); - return this->getList(name); - } - - - WList& WListManager::getList(const std::string& name) { - return this->wlists.at(name); - } - - const WList& WListManager::getList(const std::string& name) const { - return this->wlists.at(name); - } - - void WListManager::delWell(const std::string& well) { - for (auto& pair: this->wlists) { - auto& wlist = pair.second; - wlist.del(well); - } - } - - bool WListManager::operator==(const WListManager& data) const { - return this->wlists == data.wlists; - } - -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Well/Well.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Well/Well.cpp deleted file mode 100644 index 24746d125c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Well/Well.cpp +++ /dev/null @@ -1,1548 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#ifdef _WIN32 -#include "cross-platform/windows/Substitutes.hpp" -#else -#include -#endif - -#include -#include - -namespace Opm { - -namespace { - - bool defaulted(const DeckRecord& rec, const std::string& s) { - const auto& item = rec.getItem( s ); - if (item.defaultApplied(0)) - return true; - - if (item.get(0) == 0) - return true; - - return false; - } - - - int limit(const DeckRecord& rec, const std::string&s , int shift) { - const auto& item = rec.getItem( s ); - return shift + item.get(0); - } - - bool match_le(int value, const DeckRecord& rec, const std::string& s, int shift = 0) { - if (defaulted(rec,s)) - return true; - - return (value <= limit(rec,s,shift)); - } - - bool match_ge(int value, const DeckRecord& rec, const std::string& s, int shift = 0) { - if (defaulted(rec,s)) - return true; - - return (value >= limit(rec,s,shift)); - } - - - bool match_eq(int value, const DeckRecord& rec, const std::string& s, int shift = 0) { - if (defaulted(rec,s)) - return true; - - return (limit(rec,s,shift) == value); - } - -} - -namespace { - -constexpr int def_well_closed_control = 0; - - -Connection::Order order_from_int(int int_value) { - switch(int_value) { - case 0: - return Connection::Order::TRACK; - case 1: - return Connection::Order::DEPTH; - case 2: - return Connection::Order::INPUT; - default: - throw std::invalid_argument("Invalid integer value: " + std::to_string(int_value) + " encountered when determining connection ordering"); - } -} - - -constexpr Well::ProducerCMode def_whistctl_cmode = Well::ProducerCMode::CMODE_UNDEFINED; -const static Well::WellGuideRate def_guide_rate = {true, -1, Well::GuideRateTarget::UNDEFINED, ParserKeywords::WGRUPCON::SCALING_FACTOR::defaultValue}; -const static bool def_automatic_shutin = true; -constexpr double def_solvent_fraction = 0; - -} - -Well::Well(const RestartIO::RstWell& rst_well, - int report_step, - const UnitSystem& unit_system_arg, - double udq_undefined_arg) : - wname(rst_well.name), - group_name(rst_well.group), - init_step(report_step), - headI(rst_well.ij[0]), - headJ(rst_well.ij[1]), - ref_depth(rst_well.datum_depth), - drainage_radius(rst_well.drainage_radius), - allow_cross_flow(rst_well.allow_xflow == 1), - automatic_shutin(def_automatic_shutin), - pvt_table(rst_well.pvt_table), - unit_system(unit_system_arg), - udq_undefined(udq_undefined_arg), - status(rst_well.active_control == def_well_closed_control ? Well::Status::SHUT : Well::Status::OPEN), - wtype(rst_well.wtype), - guide_rate(def_guide_rate), - efficiency_factor(rst_well.efficiency_factor), - solvent_fraction(def_solvent_fraction), -// prediction_mode(rst_well.pred_requested_control != 0), - econ_limits(std::make_shared()), - foam_properties(std::make_shared()), - polymer_properties(std::make_shared()), - brine_properties(std::make_shared()), - tracer_properties(std::make_shared()), - connections(std::make_shared(order_from_int(rst_well.completion_ordering), headI, headJ)), - production(std::make_shared(unit_system_arg, wname)), - injection(std::make_shared(unit_system_arg, wname)) -{ - if (this->wtype.producer()) { - auto p = std::make_shared(this->unit_system, wname); - // Reverse of function ctrlMode() in AggregateWellData.cpp - p->whistctl_cmode = def_whistctl_cmode; - p->BHPTarget = rst_well.bhp_target_float; - p->OilRate = rst_well.orat_target ; - p->WaterRate = rst_well.wrat_target ; - p->GasRate = rst_well.grat_target ; - p->LiquidRate = rst_well.lrat_target ; - p->ResVRate = rst_well.resv_target ; - p->VFPTableNumber = rst_well.vfp_table; - - if (rst_well.orat_target != 0) - p->addProductionControl( Well::ProducerCMode::ORAT ); - - if (rst_well.wrat_target != 0) - p->addProductionControl( Well::ProducerCMode::WRAT ); - - if (rst_well.grat_target != 0) - p->addProductionControl( Well::ProducerCMode::GRAT ); - - if (rst_well.lrat_target != 0) - p->addProductionControl( Well::ProducerCMode::LRAT ); - - if (rst_well.resv_target != 0) - p->addProductionControl( Well::ProducerCMode::RESV ); - - if (rst_well.thp_target != 0) { - p->THPTarget = rst_well.thp_target; - p->addProductionControl( Well::ProducerCMode::THP ); - } - - if (this->status == Well::Status::OPEN) { - switch (rst_well.active_control) { - case 1: - p->controlMode = Well::ProducerCMode::ORAT; - break; - case 2: - p->controlMode = Well::ProducerCMode::WRAT; - p->addProductionControl(Well::ProducerCMode::WRAT); - break; - case 3: - p->controlMode = Well::ProducerCMode::GRAT; - p->addProductionControl(Well::ProducerCMode::GRAT); - break; - case 4: - p->controlMode = Well::ProducerCMode::LRAT; - p->addProductionControl(Well::ProducerCMode::LRAT); - break; - case 5: - p->controlMode = Well::ProducerCMode::RESV; - p->addProductionControl(Well::ProducerCMode::RESV); - break; - case 6: - p->controlMode = Well::ProducerCMode::THP; - p->addProductionControl(Well::ProducerCMode::THP); - break; - case 7: - p->controlMode = Well::ProducerCMode::BHP; - p->addProductionControl(Well::ProducerCMode::BHP); - break; - default: - throw std::invalid_argument("Can not convert integer value: " + std::to_string(rst_well.active_control) - + " to control type"); - } - } - - p->addProductionControl(Well::ProducerCMode::BHP); - if (this->isAvailableForGroupControl()) - p->addProductionControl(Well::ProducerCMode::GRUP); - this->updateProduction(std::move(p)); - } else { - auto i = std::make_shared(this->unit_system, wname); - i->VFPTableNumber = rst_well.vfp_table; - - if (this->status == Well::Status::OPEN) { - switch (rst_well.active_control) { - case 1: - case 2: - case 3: - case 4: - i->controlMode = Well::InjectorCMode::RATE; - i->addInjectionControl(Well::InjectorCMode::RATE); - break; - case 5: - i->controlMode = Well::InjectorCMode::RESV; - i->addInjectionControl(Well::InjectorCMode::RESV); - break; - case 6: - i->controlMode = Well::InjectorCMode::THP; - i->addInjectionControl(Well::InjectorCMode::THP); - break; - case 7: - i->controlMode = Well::InjectorCMode::BHP; - break; - case -1: - i->controlMode = Well::InjectorCMode::GRUP; - break; - default: - throw std::invalid_argument( - "Could not convert integer value: " + std::to_string(rst_well.active_control) + " to control type"); - } - } - - i->injectorType = rst_well.wtype.injector_type(); - switch (i->injectorType) { - case InjectorType::WATER: - i->surfaceInjectionRate = rst_well.wrat_target; - break; - case InjectorType::GAS: - i->surfaceInjectionRate = rst_well.grat_target; - break; - default: - throw std::invalid_argument("What ..."); - } - - if ((std::abs(rst_well.wrat_target) > 0.0f) || - (std::abs(rst_well.grat_target) > 0.0f)) - i->addInjectionControl(Well::InjectorCMode::RATE); - - if (std::abs(rst_well.resv_target) > 0.0f) { - i->reservoirInjectionRate = rst_well.resv_target; - i->addInjectionControl(Well::InjectorCMode::RESV); - } - - i->addInjectionControl(Well::InjectorCMode::BHP); - i->BHPTarget = rst_well.bhp_target_float; - if (this->isAvailableForGroupControl()) - i->addInjectionControl(Well::InjectorCMode::GRUP); - - if (rst_well.thp_target != 0) { - i->THPTarget = rst_well.thp_target; - i->addInjectionControl(Well::InjectorCMode::THP); - } - - this->updateInjection(std::move(i)); - } -} - - - -Well::Well(const std::string& wname_arg, - const std::string& gname, - std::size_t init_step_arg, - std::size_t insert_index_arg, - int headI_arg, - int headJ_arg, - double ref_depth_arg, - const WellType& wtype_arg, - ProducerCMode whistctl_cmode, - Connection::Order ordering_arg, - const UnitSystem& unit_system_arg, - double udq_undefined_arg, - double dr, - bool allow_xflow, - bool auto_shutin, - int pvt_table_, - GasInflowEquation inflow_eq): - wname(wname_arg), - group_name(gname), - init_step(init_step_arg), - insert_index(insert_index_arg), - headI(headI_arg), - headJ(headJ_arg), - ref_depth(ref_depth_arg), - drainage_radius(dr), - allow_cross_flow(allow_xflow), - automatic_shutin(auto_shutin), - pvt_table(pvt_table_), - gas_inflow(inflow_eq), - unit_system(unit_system_arg), - udq_undefined(udq_undefined_arg), - status(Status::SHUT), - wtype(wtype_arg), - guide_rate({true, -1, Well::GuideRateTarget::UNDEFINED,ParserKeywords::WGRUPCON::SCALING_FACTOR::defaultValue}), - efficiency_factor(1.0), - solvent_fraction(0.0), - econ_limits(std::make_shared()), - foam_properties(std::make_shared()), - polymer_properties(std::make_shared()), - brine_properties(std::make_shared()), - tracer_properties(std::make_shared()), - connections(std::make_shared(ordering_arg, headI, headJ)), - production(std::make_shared(unit_system, wname)), - injection(std::make_shared(unit_system, wname)) -{ - auto p = std::make_shared(this->unit_system, this->wname); - p->whistctl_cmode = whistctl_cmode; - this->updateProduction(p); -} - -Well Well::serializeObject() -{ - Well result; - result.wname = "test1"; - result.group_name = "test2"; - result.init_step = 1; - result.insert_index = 2; - result.headI = 3; - result.headJ = 4; - result.ref_depth = 5; - result.unit_system = UnitSystem::serializeObject(); - result.udq_undefined = 6.0; - result.status = Status::SHUT; - result.drainage_radius = 7.0; - result.allow_cross_flow = true; - result.automatic_shutin = false; - result.pvt_table = 77; - result.gas_inflow = GasInflowEquation::GPP; - result.wtype = WellType(Phase::WATER); - result.guide_rate = WellGuideRate::serializeObject(); - result.efficiency_factor = 8.0; - result.solvent_fraction = 9.0; - result.prediction_mode = false; - result.econ_limits = std::make_shared(Opm::WellEconProductionLimits::serializeObject()); - result.foam_properties = std::make_shared(WellFoamProperties::serializeObject()); - result.polymer_properties = std::make_shared(WellPolymerProperties::serializeObject()); - result.brine_properties = std::make_shared(WellBrineProperties::serializeObject()); - result.tracer_properties = std::make_shared(WellTracerProperties::serializeObject()); - result.connections = std::make_shared(WellConnections::serializeObject()); - result.production = std::make_shared(Well::WellProductionProperties::serializeObject()); - result.injection = std::make_shared(Well::WellInjectionProperties::serializeObject()); - result.segments = std::make_shared(WellSegments::serializeObject()); - - return result; -} - -bool Well::updateEfficiencyFactor(double efficiency_factor_arg) { - if (this->efficiency_factor != efficiency_factor_arg) { - this->efficiency_factor = efficiency_factor_arg; - return true; - } - - return false; -} - -bool Well::updateWellGuideRate(double guide_rate_arg) { - if (this->guide_rate.guide_rate != guide_rate_arg) { - this->guide_rate.guide_rate = guide_rate_arg; - return true; - } - - return false; -} - - -bool Well::updateFoamProperties(std::shared_ptr foam_properties_arg) { - if (this->wtype.producer()) { - throw std::runtime_error("Not allowed to set foam injection properties for well " + name() - + " since it is a production well"); - } - if (*this->foam_properties != *foam_properties_arg) { - this->foam_properties = foam_properties_arg; - return true; - } - - return false; -} - - -bool Well::updatePolymerProperties(std::shared_ptr polymer_properties_arg) { - if (this->wtype.producer()) { - throw std::runtime_error("Not allowed to set polymer injection properties for well " + name() + - " since it is a production well"); - } - if (*this->polymer_properties != *polymer_properties_arg) { - this->polymer_properties = polymer_properties_arg; - return true; - } - - return false; -} - -bool Well::updateBrineProperties(std::shared_ptr brine_properties_arg) { - if (this->wtype.producer()) { - throw std::runtime_error("Not allowed to set brine injection properties for well " + name() + - " since it is a production well"); - } - if (*this->brine_properties != *brine_properties_arg) { - this->brine_properties = brine_properties_arg; - return true; - } - - return false; -} - - -bool Well::updateEconLimits(std::shared_ptr econ_limits_arg) { - if (*this->econ_limits != *econ_limits_arg) { - this->econ_limits = econ_limits_arg; - return true; - } - - return false; -} - -void Well::switchToProducer() { - auto p = std::make_shared(this->getInjectionProperties()); - - p->BHPTarget = 0; - p->dropInjectionControl( Opm::Well::InjectorCMode::BHP ); - this->updateInjection( p ); - this->wtype.update(true); -} - - -void Well::switchToInjector() { - auto p = std::make_shared(getProductionProperties()); - - p->setBHPLimit(0); - p->dropProductionControl( ProducerCMode::BHP ); - this->updateProduction( p ); -} - -bool Well::updateInjection(std::shared_ptr injection_arg) { - this->wtype.update(injection_arg->injectorType); - if (this->wtype.producer()) - this->switchToInjector(); - - if (*this->injection != *injection_arg) { - this->injection = injection_arg; - return true; - } - - return false; -} - -bool Well::updateProduction(std::shared_ptr production_arg) { - if (!this->wtype.producer()) - this->switchToProducer( ); - - if (*this->production != *production_arg) { - this->production = production_arg; - return true; - } - - return false; -} - -bool Well::updateTracer(std::shared_ptr tracer_properties_arg) { - if (*this->tracer_properties != *tracer_properties_arg) { - this->tracer_properties = tracer_properties_arg; - return true; - } - - return false; -} - -bool Well::updateWellGuideRate(bool available, double guide_rate_arg, GuideRateTarget guide_phase, double scale_factor) { - bool update = false; - if (this->guide_rate.available != available) { - this->guide_rate.available = available; - update = true; - } - - if(this->guide_rate.guide_rate != guide_rate_arg) { - this->guide_rate.guide_rate = guide_rate_arg; - update = true; - } - - if(this->guide_rate.guide_phase != guide_phase) { - this->guide_rate.guide_phase = guide_phase; - update = true; - } - - if(this->guide_rate.scale_factor != scale_factor) { - this->guide_rate.scale_factor = scale_factor; - update = true; - } - - return update; -} - - - - -bool Well::updateGroup(const std::string& group_arg) { - if (this->group_name != group_arg) { - this->group_name = group_arg; - return true; - } - return false; -} - - -bool Well::updateHead(int I, int J) { - bool update = false; - if (this->headI != I) { - this->headI = I; - update = true; - } - - if (this->headJ != J) { - this->headJ = J; - update = true; - } - - return update; -} - - -bool Well::updateStatus(Status well_state, bool update_connections) { - bool update = false; - if (update_connections) { - Connection::State connection_state; - - switch (well_state) { - case Status::OPEN: - connection_state = Connection::State::OPEN; - break; - case Status::SHUT: - connection_state = Connection::State::SHUT; - break; - case Status::AUTO: - connection_state = Connection::State::AUTO; - break; - case Status::STOP: - connection_state = Connection::State::SHUT; - break; - default: - throw std::logic_error("Bug - should not be here"); - } - - auto new_connections = std::make_shared(this->connections->ordering(), this->headI, this->headJ); - for (auto c : *this->connections) { - c.setState(connection_state); - new_connections->add(c); - } - - update = this->updateConnections(std::move(new_connections)); - } - - if (this->status != well_state) { - this->status = well_state; - update = true; - } - - return update; -} - - -bool Well::updateRefDepth(double ref_depth_arg) { - if (this->ref_depth != ref_depth_arg) { - this->ref_depth = ref_depth_arg; - return true; - } - - return false; -} - -bool Well::updateDrainageRadius(double drainage_radius_arg) { - if (this->drainage_radius != drainage_radius_arg) { - this->drainage_radius = drainage_radius_arg; - return true; - } - - return false; -} - - -bool Well::updateCrossFlow(bool allow_cross_flow_arg) { - if (this->allow_cross_flow != allow_cross_flow_arg) { - this->allow_cross_flow = allow_cross_flow_arg; - return true; - } - - return false; -} - -bool Well::updateAutoShutin(bool auto_shutin) { - if (this->automatic_shutin != auto_shutin) { - this->automatic_shutin = auto_shutin; - return true; - } - - return false; -} - - -bool Well::updateConnections(std::shared_ptr connections_arg) { - connections_arg->order( ); - if (*this->connections != *connections_arg) { - this->connections = connections_arg; - //if (this->connections->allConnectionsShut()) {} - // This status update breaks line 825 in ScheduleTests - //this->status = WellCommon::StatusEnum::SHUT; - return true; - } - - return false; -} - -bool Well::updateConnections(std::shared_ptr connections_arg, const EclipseGrid& grid, const std::vector& pvtnum) { - bool update = this->updateConnections(connections_arg); - if (this->pvt_table == 0 && this->connections->size() > 0) { - const auto& lowest = this->connections->lowest(); - auto active_index = grid.activeIndex(lowest.global_index()); - this->pvt_table = pvtnum[active_index]; - update = true; - } - return update; -} - -bool Well::updateSolventFraction(double solvent_fraction_arg) { - if (this->solvent_fraction != solvent_fraction_arg) { - this->solvent_fraction = solvent_fraction_arg; - return true; - } - - return false; -} - - -bool Well::handleCOMPSEGS(const DeckKeyword& keyword, const EclipseGrid& grid, - const ParseContext& parseContext, ErrorGuard& errors) { - std::shared_ptr new_connection_set( newConnectionsWithSegments(keyword, *this->connections, *this->segments , grid, - parseContext, errors) ); - return this->updateConnections(std::move(new_connection_set)); -} - -const std::string& Well::groupName() const { - return this->group_name; -} - - -bool Well::isMultiSegment() const { - if (this->segments) - return true; - return false; -} - -bool Well::isProducer() const { - return this->wtype.producer(); -} - -bool Well::isInjector() const { - return this->wtype.injector(); -} - -const WellType& Well::wellType() const { - return this->wtype; -} - - -InjectorType Well::injectorType() const { - if (this->wtype.producer()) - throw std::runtime_error("Can not access injectorType attribute of a producer"); - - return this->injection->injectorType; -} - - - -bool Well::isAvailableForGroupControl() const { - return this->guide_rate.available; -} - -double Well::getGuideRate() const { - return this->guide_rate.guide_rate; -} - -Well::GuideRateTarget Well::getGuideRatePhase() const { - return this->guide_rate.guide_phase; -} - -double Well::getGuideRateScalingFactor() const { - return this->guide_rate.scale_factor; -} - - -double Well::getEfficiencyFactor() const { - return this->efficiency_factor; -} - -double Well::getSolventFraction() const { - return this->solvent_fraction; -} - - - -std::size_t Well::seqIndex() const { - return this->insert_index; -} - -int Well::getHeadI() const { - return this->headI; -} - -int Well::getHeadJ() const { - return this->headJ; -} - -bool Well::getAutomaticShutIn() const { - return this->automatic_shutin; -} - -bool Well::getAllowCrossFlow() const { - return this->allow_cross_flow; -} - -double Well::getRefDepth() const { - if( this->ref_depth >= 0.0 ) - return this->ref_depth; - - // ref depth was defaulted and we get the depth of the first completion - if( this->connections->size() == 0 ) { - throw std::invalid_argument( "No completions defined for well: " - + name() - + ". Can not infer reference depth" ); - } - return this->connections->get(0).depth(); -} - - -double Well::getDrainageRadius() const { - return this->drainage_radius; -} - - -const std::string& Well::name() const { - return this->wname; -} - - -void Well::setInsertIndex(std::size_t index) { - this->insert_index = index; -} - - -const WellConnections& Well::getConnections() const { - return *this->connections; -} - -const WellFoamProperties& Well::getFoamProperties() const { - return *this->foam_properties; -} - -const WellPolymerProperties& Well::getPolymerProperties() const { - return *this->polymer_properties; -} - -const WellBrineProperties& Well::getBrineProperties() const { - return *this->brine_properties; -} - -const WellTracerProperties& Well::getTracerProperties() const { - return *this->tracer_properties; -} - -const WellEconProductionLimits& Well::getEconLimits() const { - return *this->econ_limits; -} - -const Well::WellProductionProperties& Well::getProductionProperties() const { - return *this->production; -} - -const WellSegments& Well::getSegments() const { - if (this->segments) - return *this->segments; - else - throw std::logic_error("Asked for segment information in not MSW well: " + this->name()); -} - -const Well::WellInjectionProperties& Well::getInjectionProperties() const { - return *this->injection; -} - -Well::Status Well::getStatus() const { - return this->status; -} - - -std::map> Well::getCompletions() const { - std::map> completions; - - for (const auto& conn : *this->connections) { - auto pair = completions.find( conn.complnum() ); - if (pair == completions.end()) - completions[conn.complnum()] = {}; - - pair = completions.find(conn.complnum()); - pair->second.push_back(conn); - } - - return completions; -} - -Phase Well::getPreferredPhase() const { - return this->wtype.preferred_phase(); -} - - -int Well::pvt_table_number() const { - return this->pvt_table; -} - -int Well::fip_region_number() const { - return ParserKeywords::WELSPECS::FIP_REGION::defaultValue; -} - -/* - When all connections of a well are closed with the WELOPEN keywords, the well - itself should also be SHUT. In the main parsing code this is handled by the - function checkIfAllConnectionsIsShut() which is called at the end of every - report step in Schedule::iterateScheduleSection(). This is done in this way - because there is some twisted logic aggregating connection changes over a - complete report step. - - However - when the WELOPEN is called as a ACTIONX action the full - Schedule::iterateScheduleSection() is not run and the check if all connections - is closed is not done. Therefor we have a action_mode flag here which makes - sure to close the well in this case. -*/ - - -bool Well::handleWELOPEN(const DeckRecord& record, Connection::State state_arg, bool action_mode) { - - auto match = [=]( const Connection &c) -> bool { - if (!match_eq(c.getI(), record, "I" , -1)) return false; - if (!match_eq(c.getJ(), record, "J" , -1)) return false; - if (!match_eq(c.getK(), record, "K", -1)) return false; - if (!match_ge(c.complnum(), record, "C1")) return false; - if (!match_le(c.complnum(), record, "C2")) return false; - - return true; - }; - - auto new_connections = std::make_shared(this->connections->ordering(), this->headI, this->headJ); - - for (auto c : *this->connections) { - if (match(c)) - c.setState( state_arg ); - - new_connections->add(c); - } - if (action_mode) { - if (new_connections->allConnectionsShut()) - this->status = Status::SHUT; - } - - return this->updateConnections(std::move(new_connections)); -} - - - - - -bool Well::handleCOMPLUMP(const DeckRecord& record) { - - auto match = [=]( const Connection &c) -> bool { - if (!match_eq(c.getI(), record, "I" , -1)) return false; - if (!match_eq(c.getJ(), record, "J" , -1)) return false; - if (!match_ge(c.getK(), record, "K1", -1)) return false; - if (!match_le(c.getK(), record, "K2", -1)) return false; - - return true; - }; - - auto new_connections = std::make_shared(this->connections->ordering(), this->headI, this->headJ); - const int complnum = record.getItem("N").get(0); - if (complnum <= 0) - throw std::invalid_argument("Completion number must be >= 1. COMPLNUM=" + std::to_string(complnum) + "is invalid"); - - for (auto c : *this->connections) { - if (match(c)) - c.setComplnum( complnum ); - - new_connections->add(c); - } - - return this->updateConnections(std::move(new_connections)); -} - - - -bool Well::handleWPIMULT(const DeckRecord& record) { - - auto match = [=]( const Connection &c) -> bool { - if (!match_ge(c.complnum(), record, "FIRST")) return false; - if (!match_le(c.complnum(), record, "LAST")) return false; - if (!match_eq(c.getI() , record, "I", -1)) return false; - if (!match_eq(c.getJ() , record, "J", -1)) return false; - if (!match_eq(c.getK() , record, "K", -1)) return false; - - return true; - }; - - auto new_connections = std::make_shared(this->connections->ordering(), this->headI, this->headJ); - double wellPi = record.getItem("WELLPI").get< double >(0); - - for (auto c : *this->connections) { - if (match(c)) - c.scaleWellPi( wellPi ); - - new_connections->add(c); - } - - return this->updateConnections(std::move(new_connections)); -} - - -void Well::updateSegments(std::shared_ptr segments_arg) { - this->segments = std::move(segments_arg); - this->updateRefDepth( this->segments->depthTopSegment() ); -} - - -bool Well::handleWELSEGS(const DeckKeyword& keyword) { - if( this->segments ) - throw std::logic_error("re-entering WELSEGS for a well is not supported yet!!."); - - this->updateSegments( std::make_shared(keyword) ); - return true; -} - - -bool Well::updatePVTTable(int pvt_table_) { - if (this->pvt_table != pvt_table_) { - this->pvt_table = pvt_table_; - return true; - } else - return false; -} - - -bool Well::updateWSEGSICD(const std::vector >& sicd_pairs) { - auto new_segments = std::make_shared(*this->segments); - if (new_segments->updateWSEGSICD(sicd_pairs)) { - this->segments = new_segments; - return true; - } else - return false; -} - - -bool Well::updateWSEGVALV(const std::vector >& valve_pairs) { - auto new_segments = std::make_shared(*this->segments); - if (new_segments->updateWSEGVALV(valve_pairs)) { - this->segments = new_segments; - return true; - } else - return false; -} - -void Well::filterConnections(const ActiveGridCells& grid) { - this->connections->filter(grid); -} - - -std::size_t Well::firstTimeStep() const { - return this->init_step; -} - -bool Well::hasBeenDefined(size_t timeStep) const { - if (timeStep < this->init_step) - return false; - else - return true; -} - -Well::GasInflowEquation Well::gas_inflow_equation() const { - return this->gas_inflow; -} - -const std::string Well::GasInflowEquation2String(GasInflowEquation enumValue) { - switch(enumValue) { - case GasInflowEquation::STD: - return "STD"; - case GasInflowEquation::R_G: - return "R-G"; - case GasInflowEquation::P_P: - return "P-P"; - case GasInflowEquation::GPP: - return "GPP"; - default: - throw std::invalid_argument("Unhandled enum value"); - } -} - -Well::GasInflowEquation Well::GasInflowEquationFromString(const std::string& stringValue) { - if (stringValue == "STD" || stringValue == "NO") - return GasInflowEquation::STD; - - if (stringValue == "R-G" || stringValue == "YES") - return GasInflowEquation::R_G; - - if (stringValue == "P-P") - return GasInflowEquation::P_P; - - if (stringValue == "GPP") - return GasInflowEquation::GPP; - - throw std::invalid_argument("Gas inflow equation type: " + stringValue + " not recognized"); -} - - -bool Well::canOpen() const { - if (this->allow_cross_flow) - return true; - - /* - If the UDAValue is in string mode we return true unconditionally, without - evaluating the internal UDA value. - */ - if (this->wtype.producer()) { - const auto& prod = *this->production; - if (prod.OilRate.is()) - return true; - - if (prod.GasRate.is()) - return true; - - if (prod.WaterRate.is()) - return true; - - if (!prod.OilRate.zero()) - return true; - - if (!prod.GasRate.zero()) - return true; - - if (!prod.WaterRate.zero()) - return true; - - return false; - } else { - const auto& inj = *this->injection; - if (inj.surfaceInjectionRate.is()) - return true; - - return !inj.surfaceInjectionRate.zero(); - } -} - - -bool Well::predictionMode() const { - return this->prediction_mode; -} - - -bool Well::updatePrediction(bool prediction_mode_arg) { - if (this->prediction_mode != prediction_mode_arg) { - this->prediction_mode = prediction_mode_arg; - return true; - } - - return false; -} - - -double Well::production_rate(const SummaryState& st, Phase prod_phase) const { - if( !this->isProducer() ) return 0.0; - - const auto controls = this->productionControls(st); - - switch( prod_phase ) { - case Phase::WATER: return controls.water_rate; - case Phase::OIL: return controls.oil_rate; - case Phase::GAS: return controls.gas_rate; - case Phase::SOLVENT: - throw std::invalid_argument( "Production of 'SOLVENT' requested." ); - case Phase::POLYMER: - throw std::invalid_argument( "Production of 'POLYMER' requested." ); - case Phase::ENERGY: - throw std::invalid_argument( "Production of 'ENERGY' requested." ); - case Phase::POLYMW: - throw std::invalid_argument( "Production of 'POLYMW' requested."); - case Phase::FOAM: - throw std::invalid_argument( "Production of 'FOAM' requested."); - case Phase::BRINE: - throw std::invalid_argument( "Production of 'BRINE' requested."); - } - - throw std::logic_error( "Unreachable state. Invalid Phase value. " - "This is likely a programming error." ); -} - -double Well::injection_rate(const SummaryState& st, Phase phase_arg) const { - if( !this->isInjector() ) return 0.0; - const auto controls = this->injectionControls(st); - - const auto type = controls.injector_type; - - if( phase_arg == Phase::WATER && type != InjectorType::WATER ) return 0.0; - if( phase_arg == Phase::OIL && type != InjectorType::OIL ) return 0.0; - if( phase_arg == Phase::GAS && type != InjectorType::GAS ) return 0.0; - - return controls.surface_rate; -} - - -bool Well::wellNameInWellNamePattern(const std::string& wellName, const std::string& wellNamePattern) { - bool wellNameInPattern = false; - if (fnmatch( wellNamePattern.c_str() , wellName.c_str() , 0 ) == 0) { - wellNameInPattern = true; - } - return wellNameInPattern; -} - - -Well::ProductionControls Well::productionControls(const SummaryState& st) const { - if (this->isProducer()) { - auto controls = this->production->controls(st, this->udq_undefined); - controls.prediction_mode = this->predictionMode(); - return controls; - } else - throw std::logic_error("Trying to get production data from an injector"); -} - -Well::InjectionControls Well::injectionControls(const SummaryState& st) const { - if (!this->isProducer()) { - auto controls = this->injection->controls(this->unit_system, st, this->udq_undefined); - controls.prediction_mode = this->predictionMode(); - return controls; - } else - throw std::logic_error("Trying to get injection data from a producer"); -} - - -/* - These three accessor functions are at the "wrong" level of abstraction; - the same properties are part of the InjectionControls and - ProductionControls structs. They are made available here to avoid passing - a SummaryState instance in situations where it is not really needed. -*/ - - -int Well::vfp_table_number() const { - if (this->wtype.producer()) - return this->production->VFPTableNumber; - else - return this->injection->VFPTableNumber; -} - -double Well::alq_value() const { - if (this->wtype.producer()) - return this->production->ALQValue; - - throw std::runtime_error("Can not ask for ALQ value in an injector"); -} - -double Well::temperature() const { - if (!this->wtype.producer()) - return this->injection->temperature; - - throw std::runtime_error("Can not ask for temperature in a producer"); -} - -std::ostream& operator<<(std::ostream& os, const Well::Status& st) { - os << Well::Status2String(st); - return os; -} - -std::string Well::Status2String(Well::Status enumValue) { - switch( enumValue ) { - case Status::OPEN: - return "OPEN"; - case Status::SHUT: - return "SHUT"; - case Status::AUTO: - return "AUTO"; - case Status::STOP: - return "STOP"; - default: - throw std::invalid_argument("unhandled enum value"); - } -} - - -Well::Status Well::StatusFromString(const std::string& stringValue) { - if (stringValue == "OPEN") - return Status::OPEN; - else if (stringValue == "SHUT") - return Status::SHUT; - else if (stringValue == "STOP") - return Status::STOP; - else if (stringValue == "AUTO") - return Status::AUTO; - else - throw std::invalid_argument("Unknown enum state string: " + stringValue ); -} - - - - -const std::string Well::InjectorCMode2String( InjectorCMode enumValue ) { - switch( enumValue ) { - case InjectorCMode::RESV: - return "RESV"; - case InjectorCMode::RATE: - return "RATE"; - case InjectorCMode::BHP: - return "BHP"; - case InjectorCMode::THP: - return "THP"; - case InjectorCMode::GRUP: - return "GRUP"; - default: - throw std::invalid_argument("Unhandled enum value: " + std::to_string(static_cast(enumValue)) + " in InjectorCMode2String"); - } -} - - -Well::InjectorCMode Well::InjectorCModeFromString(const std::string &stringValue) { - if (stringValue == "RATE") - return InjectorCMode::RATE; - else if (stringValue == "RESV") - return InjectorCMode::RESV; - else if (stringValue == "BHP") - return InjectorCMode::BHP; - else if (stringValue == "THP") - return InjectorCMode::THP; - else if (stringValue == "GRUP") - return InjectorCMode::GRUP; - else - throw std::invalid_argument("Unknown enum state string: " + stringValue); -} - -std::ostream& operator<<(std::ostream& os, const Well::InjectorCMode& cm) { - os << Well::InjectorCMode2String(cm); - return os; -} - -Well::WELTARGCMode Well::WELTARGCModeFromString(const std::string& string_value) { - if (string_value == "ORAT") - return WELTARGCMode::ORAT; - - if (string_value == "WRAT") - return WELTARGCMode::WRAT; - - if (string_value == "GRAT") - return WELTARGCMode::GRAT; - - if (string_value == "LRAT") - return WELTARGCMode::LRAT; - - if (string_value == "CRAT") - return WELTARGCMode::CRAT; - - if (string_value == "RESV") - return WELTARGCMode::RESV; - - if (string_value == "BHP") - return WELTARGCMode::BHP; - - if (string_value == "THP") - return WELTARGCMode::THP; - - if (string_value == "VFP") - return WELTARGCMode::VFP; - - if (string_value == "LIFT") - return WELTARGCMode::LIFT; - - if (string_value == "GUID") - return WELTARGCMode::GUID; - - throw std::invalid_argument("WELTARG control mode: " + string_value + " not recognized."); -} - - -std::ostream& operator<<(std::ostream& os, const Well::ProducerCMode& cm) { - if (cm == Well::ProducerCMode::CMODE_UNDEFINED) - os << "UNDEFINED"; - else - os << Well::ProducerCMode2String(cm); - return os; -} - -const std::string Well::ProducerCMode2String( ProducerCMode enumValue ) { - switch( enumValue ) { - case ProducerCMode::ORAT: - return "ORAT"; - case ProducerCMode::WRAT: - return "WRAT"; - case ProducerCMode::GRAT: - return "GRAT"; - case ProducerCMode::LRAT: - return "LRAT"; - case ProducerCMode::CRAT: - return "CRAT"; - case ProducerCMode::RESV: - return "RESV"; - case ProducerCMode::BHP: - return "BHP"; - case ProducerCMode::THP: - return "THP"; - case ProducerCMode::GRUP: - return "GRUP"; - default: - throw std::invalid_argument("Unhandled enum value: " + std::to_string(static_cast(enumValue)) + " in ProducerCMode2String"); - } -} - -Well::ProducerCMode Well::ProducerCModeFromString( const std::string& stringValue ) { - if (stringValue == "ORAT") - return ProducerCMode::ORAT; - else if (stringValue == "WRAT") - return ProducerCMode::WRAT; - else if (stringValue == "GRAT") - return ProducerCMode::GRAT; - else if (stringValue == "LRAT") - return ProducerCMode::LRAT; - else if (stringValue == "CRAT") - return ProducerCMode::CRAT; - else if (stringValue == "RESV") - return ProducerCMode::RESV; - else if (stringValue == "BHP") - return ProducerCMode::BHP; - else if (stringValue == "THP") - return ProducerCMode::THP; - else if (stringValue == "GRUP") - return ProducerCMode::GRUP; - else if (stringValue == "NONE") - return ProducerCMode::NONE; - else - throw std::invalid_argument("Unknown enum state string: " + stringValue ); -} - - -const std::string Well::GuideRateTarget2String( GuideRateTarget enumValue ) { - switch( enumValue ) { - case GuideRateTarget::OIL: - return "OIL"; - case GuideRateTarget::WAT: - return "WAT"; - case GuideRateTarget::GAS: - return "GAS"; - case GuideRateTarget::LIQ: - return "LIQ"; - case GuideRateTarget::COMB: - return "COMB"; - case GuideRateTarget::WGA: - return "WGA"; - case GuideRateTarget::CVAL: - return "CVAL"; - case GuideRateTarget::RAT: - return "RAT"; - case GuideRateTarget::RES: - return "RES"; - case GuideRateTarget::UNDEFINED: - return "UNDEFINED"; - default: - throw std::invalid_argument("unhandled enum value"); - } -} - -Well::GuideRateTarget Well::GuideRateTargetFromString( const std::string& stringValue ) { - if (stringValue == "OIL") - return GuideRateTarget::OIL; - else if (stringValue == "WAT") - return GuideRateTarget::WAT; - else if (stringValue == "GAS") - return GuideRateTarget::GAS; - else if (stringValue == "LIQ") - return GuideRateTarget::LIQ; - else if (stringValue == "COMB") - return GuideRateTarget::COMB; - else if (stringValue == "WGA") - return GuideRateTarget::WGA; - else if (stringValue == "CVAL") - return GuideRateTarget::CVAL; - else if (stringValue == "RAT") - return GuideRateTarget::RAT; - else if (stringValue == "RES") - return GuideRateTarget::RES; - else if (stringValue == "UNDEFINED") - return GuideRateTarget::UNDEFINED; - else - throw std::invalid_argument("Unknown enum state string: " + stringValue ); -} - - -bool Well::cmp_structure(const Well& other) const { - if ((segments && !other.segments) || (!segments && other.segments)) { - return false; - } - - if (segments && (this->getSegments() != other.getSegments())) { - return false; - } - - return this->name() == other.name() && - this->groupName() == other.groupName() && - this->firstTimeStep() == other.firstTimeStep() && - this->seqIndex() == other.seqIndex() && - this->getHeadI() == other.getHeadI() && - this->getHeadJ() == other.getHeadJ() && - this->getRefDepth() == other.getRefDepth() && - this->getPreferredPhase() == other.getPreferredPhase() && - this->unit_system == other.unit_system && - this->udq_undefined == other.udq_undefined && - this->getConnections() == other.getConnections() && - this->getDrainageRadius() == other.getDrainageRadius() && - this->getAllowCrossFlow() == other.getAllowCrossFlow() && - this->getAutomaticShutIn() == other.getAutomaticShutIn() && - this->getEfficiencyFactor() == other.getEfficiencyFactor(); -} - - -bool Well::operator==(const Well& data) const { - return this->cmp_structure(data) && - this->getSolventFraction() == data.getSolventFraction() && - this->getEconLimits() == data.getEconLimits() && - this->isProducer() == data.isProducer() && - this->getFoamProperties() == data.getFoamProperties() && - this->getStatus() == data.getStatus() && - this->guide_rate == data.guide_rate && - this->getTracerProperties() == data.getTracerProperties() && - this->getProductionProperties() == data.getProductionProperties() && - this->getInjectionProperties() == data.getInjectionProperties(); -} - -} - -int Opm::eclipseControlMode(const Opm::Well::InjectorCMode imode, - const Opm::InjectorType itype, - const Opm::Well::Status wellStatus) -{ - using IMode = ::Opm::Well::InjectorCMode; - using Val = ::Opm::RestartIO::Helpers::VectorItems::IWell::Value::WellCtrlMode; - using IType = ::Opm::InjectorType; - - if (wellStatus == ::Opm::Well::Status::SHUT) { - return Val::Shut; - } - switch (imode) { - case IMode::RATE: { - switch (itype) { - case IType::OIL: return Val::OilRate; - case IType::WATER: return Val::WatRate; - case IType::GAS: return Val::GasRate; - case IType::MULTI: return Val::WMCtlUnk; - }} - break; - - case IMode::RESV: return Val::ResVRate; - case IMode::THP: return Val::THP; - case IMode::BHP: return Val::BHP; - case IMode::GRUP: return Val::Group; - - default: - if (wellStatus == ::Opm::Well::Status::SHUT) { - return Val::Shut; - } - } - - return Val::WMCtlUnk; -} - -int Opm::eclipseControlMode(const Opm::Well::ProducerCMode pmode, - const Opm::Well::Status wellStatus) -{ - using PMode = ::Opm::Well::ProducerCMode; - using Val = ::Opm::RestartIO::Helpers::VectorItems::IWell::Value::WellCtrlMode; - - if (wellStatus == ::Opm::Well::Status::SHUT) { - return Val::Shut; - } - switch (pmode) { - case PMode::ORAT: return Val::OilRate; - case PMode::WRAT: return Val::WatRate; - case PMode::GRAT: return Val::GasRate; - case PMode::LRAT: return Val::LiqRate; - case PMode::RESV: return Val::ResVRate; - case PMode::THP: return Val::THP; - case PMode::BHP: return Val::BHP; - case PMode::CRAT: return Val::CombRate; - case PMode::GRUP: return Val::Group; - - default: - if (wellStatus == ::Opm::Well::Status::SHUT) { - return Val::Shut; - } - } - - return Val::WMCtlUnk; -} - -/* - The purpose of this function is to convert OPM well status to an integer value - suitable for output in the eclipse restart file. In OPM we have different - variables for the wells status and the active control, when this is written to - a restart file they are combined to one integer. In OPM a well can have an - active control while still being shut, when this is converted to an integer - value suitable for the eclipse formatted restart file the value 0 will be used - to signal a SHUT well and the active control will be lost. - - In the case of a well which is in state 'STOP' or 'AUTO' an integer - corresponding to the currently active control is writte to the restart file. -*/ - -int Opm::eclipseControlMode(const Well& well, - const SummaryState& st) -{ - if (well.isProducer()) { - const auto& ctrl = well.productionControls(st); - - return eclipseControlMode(ctrl.cmode, well.getStatus()); - } - else { // Injector - const auto& ctrl = well.injectionControls(st); - - return eclipseControlMode(ctrl.cmode, well.injectorType(), well.getStatus()); - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Well/WellBrineProperties.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Well/WellBrineProperties.cpp deleted file mode 100644 index 6b064a3d44..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Well/WellBrineProperties.cpp +++ /dev/null @@ -1,46 +0,0 @@ -/* - Copyright 2019 by Norce. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include - -#include -#include - -Opm::WellBrineProperties Opm::WellBrineProperties::serializeObject() -{ - Opm::WellBrineProperties result; - result.m_saltConcentration = 1.0; - - return result; -} - -void Opm::WellBrineProperties::handleWSALT(const DeckRecord& rec) -{ - this->m_saltConcentration = rec.getItem("CONCENTRATION").get(0).get(); -} - -bool Opm::WellBrineProperties::operator!=(const WellBrineProperties& other) const -{ - return this->m_saltConcentration != other.m_saltConcentration; -} - -bool Opm::WellBrineProperties::operator==(const WellBrineProperties& other) const -{ - return this->m_saltConcentration == other.m_saltConcentration; -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Well/WellConnections.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Well/WellConnections.cpp deleted file mode 100644 index 433e416dc3..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Well/WellConnections.cpp +++ /dev/null @@ -1,579 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include - -namespace Opm { - -namespace { - - // Compute direction permutation corresponding to completion's - // direction. First two elements of return value are directions - // perpendicular to completion while last element is direction - // along completion. -inline std::array< size_t, 3> directionIndices(const Opm::Connection::Direction direction) - { - switch (direction) { - case Opm::Connection::Direction::X: - return {{ 1,2,0 }}; - - case Opm::Connection::Direction::Y: - return {{ 2,0,1}}; - - case Opm::Connection::Direction::Z: - return {{ 0,1,2 }}; - } - // All enum values should be handled above. Therefore - // we should never reach this one. Anyway for the sake - // of reduced warnings we throw an exception. - throw std::invalid_argument("unhandled enum value"); - - } - - // Permute (diagonal) permeability components according to - // completion's direction. - inline std::array - permComponents(const Opm::Connection::Direction direction, - const std::array& perm) - { - const auto p = directionIndices(direction); - - return {{ perm[ p[0] ], - perm[ p[1] ], - perm[ p[2] ] }}; - } - - // Permute cell's geometric extent according to completion's - // direction. Honour net-to-gross ratio. - // - // Note: 'extent' is intentionally accepted by modifiable value - // rather than reference-to-const to support NTG manipulation. - inline std::array - effectiveExtent(const Opm::Connection::Direction direction, - const double ntg, - std::array extent) - { - // Vertical extent affected by net-to-gross ratio. - extent[2] *= ntg; - - const auto p = directionIndices(direction); - - std::array - D = {{ extent[ p[0] ] , - extent[ p[1] ] , - extent[ p[2] ] }}; - - return D; - } - - // Compute Peaceman's effective radius of single completion. - inline double - effectiveRadius(const std::array& K, - const std::array& D) - { - const double K01 = K[0] / K[1]; - const double K10 = K[1] / K[0]; - - const double D0_sq = D[0] * D[0]; - const double D1_sq = D[1] * D[1]; - - const double num = std::sqrt((std::sqrt(K10) * D0_sq) + - (std::sqrt(K01) * D1_sq)); - const double den = std::pow(K01, 0.25) + std::pow(K10, 0.25); - - // Note: Analytic constant 0.28 derived for infintely sized - // formation with repeating well placement. - return 0.28 * (num / den); - } - - -} // anonymous namespace - - WellConnections::WellConnections() : - headI(0), - headJ(0) - { - } - - WellConnections::WellConnections(Connection::Order order,int headIArg, int headJArg) : - m_ordering(order), - headI(headIArg), - headJ(headJArg) - { - } - - - WellConnections::WellConnections(Connection::Order order, - int headIArg, int headJArg, - const std::vector& connections) : - m_ordering(order), - headI(headIArg), - headJ(headJArg), - m_connections(connections) - { - } - - - WellConnections WellConnections::serializeObject() - { - WellConnections result; - result.m_ordering = Connection::Order::DEPTH; - result.headI = 1; - result.headJ = 2; - result.m_connections = {Connection::serializeObject()}; - - return result; - } - - - WellConnections::WellConnections(const WellConnections& src, const EclipseGrid& grid) : - m_ordering(src.ordering()), - headI(src.headI), - headJ(src.headJ) - { - for (const auto& c : src) { - if (grid.cellActive(c.getI(), c.getJ(), c.getK())) - this->add(c); - } - } - - std::vector WellConnections::output(const EclipseGrid& grid) const { - if (this->m_connections.empty()) - return {}; - - std::vector out; - for (const auto& conn : this->m_connections) - if (grid.cellActive(conn.getI(), conn.getJ(), conn.getK())) - out.push_back( &conn ); - - if (!this->m_connections[0].attachedToSegment() && (this->m_ordering != Connection::Order::INPUT)) { - std::sort(out.begin(), out.end(), [](const Opm::Connection* conn1, const Opm::Connection* conn2) - { - return conn1->sort_value() < conn2->sort_value(); - }); - } - return out; - } - - - void WellConnections::addConnection(int i, int j , int k , - std::size_t global_index, - int complnum, - double depth, - Connection::State state, - double CF, - double Kh, - double rw, - double r0, - double skin_factor, - const int satTableId, - const Connection::Direction direction, - const Connection::CTFKind ctf_kind, - const std::size_t seqIndex, - const double segDistStart, - const double segDistEnd, - const bool defaultSatTabId) - { - int conn_i = (i < 0) ? this->headI : i; - int conn_j = (j < 0) ? this->headJ : j; - Connection conn(conn_i, conn_j, k, global_index, complnum, depth, state, CF, Kh, rw, r0, - skin_factor, satTableId, direction, ctf_kind, - seqIndex, segDistStart, segDistEnd, defaultSatTabId); - this->add(conn); - } - - - - void WellConnections::addConnection(int i, int j , int k , - std::size_t global_index, - double depth, - Connection::State state , - double CF, - double Kh, - double rw, - double r0, - double skin_factor, - const int satTableId, - const Connection::Direction direction, - const Connection::CTFKind ctf_kind, - const std::size_t seqIndex, - const double segDistStart, - const double segDistEnd, - const bool defaultSatTabId) - { - int complnum = (this->m_connections.size() + 1); - this->addConnection(i, - j, - k, - global_index, - complnum, - depth, - state, - CF, - Kh, - rw, - r0, - skin_factor, - satTableId, - direction, - ctf_kind, - seqIndex, - segDistStart, - segDistEnd, - defaultSatTabId); - } - - void WellConnections::loadCOMPDAT(const DeckRecord& record, const EclipseGrid& grid, const FieldPropsManager& field_properties) { - const auto permx = field_properties.try_get("PERMX"); - const auto permy = field_properties.try_get("PERMY"); - const auto permz = field_properties.try_get("PERMZ"); - const auto& ntg = field_properties.get_double("NTG"); - const auto& satnum_data = field_properties.get_int("SATNUM"); - - this->loadCOMPDAT(record, grid, satnum_data, permx, permy, permz, ntg); - } - - void WellConnections::loadCOMPDAT(const DeckRecord& record, - const EclipseGrid& grid, - const std::vector& satnum_data, - const std::vector* permx, - const std::vector* permy, - const std::vector* permz, - const std::vector& ntg) { - - const auto& itemI = record.getItem( "I" ); - const auto defaulted_I = itemI.defaultApplied( 0 ) || itemI.get< int >( 0 ) == 0; - const int I = !defaulted_I ? itemI.get< int >( 0 ) - 1 : this->headI; - - const auto& itemJ = record.getItem( "J" ); - const auto defaulted_J = itemJ.defaultApplied( 0 ) || itemJ.get< int >( 0 ) == 0; - const int J = !defaulted_J ? itemJ.get< int >( 0 ) - 1 : this->headJ; - - int K1 = record.getItem("K1").get< int >(0) - 1; - int K2 = record.getItem("K2").get< int >(0) - 1; - Connection::State state = Connection::StateFromString( record.getItem("STATE").getTrimmedString(0) ); - - int satTableId = -1; - bool defaultSatTable = true; - const auto& r0Item = record.getItem("PR"); - const auto& CFItem = record.getItem("CONNECTION_TRANSMISSIBILITY_FACTOR"); - const auto& diameterItem = record.getItem("DIAMETER"); - const auto& KhItem = record.getItem("Kh"); - const auto& satTableIdItem = record.getItem("SAT_TABLE"); - const auto direction = Connection::DirectionFromString(record.getItem("DIR").getTrimmedString(0)); - double skin_factor = record.getItem("SKIN").getSIDouble(0); - double rw; - - if (satTableIdItem.hasValue(0) && satTableIdItem.get < int > (0) > 0) - { - satTableId = satTableIdItem.get< int >(0); - defaultSatTable = false; - } - - if (diameterItem.hasValue(0)) - rw = 0.50 * diameterItem.getSIDouble(0); - else - // The Eclipse100 manual does not specify a default value for the wellbore - // diameter, but the Opm codebase has traditionally implemented a default - // value of one foot. The same default value is used by Eclipse300. - rw = 0.5*unit::feet; - - for (int k = K1; k <= K2; k++) { - if (!grid.cellActive(I, J, k)) - continue; - - size_t active_index = grid.activeIndex(I,J,k); - double CF = -1; - double Kh = -1; - double r0 = -1; - auto ctf_kind = ::Opm::Connection::CTFKind::DeckValue; - - if (defaultSatTable) - satTableId = satnum_data[active_index]; - - auto same_ijk = [&]( const Connection& c ) { - return c.sameCoordinate( I,J,k ); - }; - - if (r0Item.hasValue(0)) - r0 = r0Item.getSIDouble(0); - - if (KhItem.hasValue(0) && KhItem.getSIDouble(0) > 0.0) - Kh = KhItem.getSIDouble(0); - - if (CFItem.hasValue(0) && CFItem.getSIDouble(0) > 0.0) - CF = CFItem.getSIDouble(0); - - /* We start with the absolute happy path; both CF and Kh are explicitly given in the deck. */ - if (CF > 0 && Kh > 0) - goto CF_done; - - /* We must calculate CF and Kh from the items in the COMPDAT record and cell properties. */ - if (permx && permy && permz) { - // Angle of completion exposed to flow. We assume centre - // placement so there's complete exposure (= 2\pi). - const double angle = 6.2831853071795864769252867665590057683943387987502116419498; - std::array cell_perm = {{ permx->operator[](active_index), - permy->operator[](active_index), - permz->operator[](active_index)}}; - std::array cell_size = grid.getCellDims(I,J,k); - const auto& K = permComponents(direction, cell_perm); - const auto& D = effectiveExtent(direction, ntg[active_index], cell_size); - - if (r0 < 0) - r0 = effectiveRadius(K,D); - - if (CF < 0) { - if (Kh < 0) - Kh = std::sqrt(K[0] * K[1]) * D[2]; - CF = angle * Kh / (std::log(r0 / std::min(rw, r0)) + skin_factor); - ctf_kind = ::Opm::Connection::CTFKind::Defaulted; - } else { - if (KhItem.defaultApplied(0) || KhItem.getSIDouble(0) < 0) { - Kh = CF * (std::log(r0 / std::min(r0, rw)) + skin_factor) / angle; - } else { - if (Kh < 0) - Kh = std::sqrt(K[0] * K[1]) * D[2]; - } - } - } else - throw std::invalid_argument("Missing PERM values to calculate connection factors"); - - - CF_done: - if (r0 < 0) - r0 = RestartIO::RstConnection::inverse_peaceman(CF, Kh, rw, skin_factor); - - auto prev = std::find_if( this->m_connections.begin(), - this->m_connections.end(), - same_ijk ); - if (prev == this->m_connections.end()) { - std::size_t noConn = this->m_connections.size(); - this->addConnection(I,J,k, - grid.getGlobalIndex(I,J,k), - grid.getCellDepth( I,J,k ), - state, - CF, - Kh, - rw, - r0, - skin_factor, - satTableId, - direction, ctf_kind, - noConn, 0., 0., defaultSatTable); - } else { - std::size_t css_ind = prev->sort_value(); - int conSegNo = prev->segment(); - double conSDStart = prev->getSegDistStart(); - double conSDEnd = prev->getSegDistEnd(); - double depth = grid.getCellDepth(I,J,k); - *prev = Connection(I,J,k, - grid.getGlobalIndex(I,J,k), - prev->complnum(), - depth, - state, - CF, - Kh, - rw, - r0, - skin_factor, - satTableId, - direction, ctf_kind, - prev->sort_value(), conSDStart, conSDEnd, defaultSatTable); - - prev->updateSegment(conSegNo, - depth, - css_ind, - conSDStart, - conSDEnd); - } - } - } - - - size_t WellConnections::size() const { - return m_connections.size(); - } - - const Connection& WellConnections::get(size_t index) const { - return (*this)[index]; - } - - const Connection& WellConnections::operator[](size_t index) const { - return this->m_connections.at(index); - } - - - const Connection& WellConnections::lowest() const { - if (this->m_connections.empty()) - throw std::logic_error("Tried to get lowest connection from empty set"); - - const auto max_iter = std::max_element(this->m_connections.begin(), - this->m_connections.end(), - [](const Connection& c1, const Connection& c2) - { - return c1.depth() < c2.depth(); - }); - - return *max_iter; - } - - - const Connection& WellConnections::getFromIJK(const int i, const int j, const int k) const { - for (size_t ic = 0; ic < size(); ++ic) { - if (get(ic).sameCoordinate(i, j, k)) { - return get(ic); - } - } - throw std::runtime_error(" the connection is not found! \n "); - } - - - Connection& WellConnections::getFromIJK(const int i, const int j, const int k) { - for (size_t ic = 0; ic < size(); ++ic) { - if (get(ic).sameCoordinate(i, j, k)) { - return this->m_connections[ic]; - } - } - throw std::runtime_error(" the connection is not found! \n "); - } - - - void WellConnections::add( Connection connection ) { - m_connections.emplace_back( connection ); - } - - bool WellConnections::allConnectionsShut( ) const { - if (this->size() == 0) - return false; - - - auto shut = []( const Connection& c ) { - return c.state() == Connection::State::SHUT; - }; - - return std::all_of( this->m_connections.begin(), - this->m_connections.end(), - shut ); - } - - - - void WellConnections::order() - { - if (m_connections.empty()) - return; - - if (this->m_connections[0].attachedToSegment()) - this->orderMSW(); - else if (this->m_ordering == Connection::Order::TRACK) - this->orderTRACK(); - - } - - - void WellConnections::orderMSW() { - std::sort(this->m_connections.begin(), this->m_connections.end(), [](const Opm::Connection& conn1, const Opm::Connection& conn2) - { - return conn1.sort_value() < conn2.sort_value(); - }); - } - - - void WellConnections::orderTRACK() { - // Find the first connection and swap it into the 0-position. - const double surface_z = 0.0; - size_t first_index = findClosestConnection(this->headI, this->headJ, surface_z, 0); - std::swap(m_connections[first_index], m_connections[0]); - - // Repeat for remaining connections. - // - // Note that since findClosestConnection() is O(n), this is an - // O(n^2) algorithm. However, it should be acceptable since - // the expected number of connections is fairly low (< 100). - - if( this->m_connections.empty() ) return; - - for (size_t pos = 1; pos < m_connections.size() - 1; ++pos) { - const auto& prev = m_connections[pos - 1]; - const double prevz = prev.depth(); - size_t next_index = findClosestConnection(prev.getI(), prev.getJ(), prevz, pos); - std::swap(m_connections[next_index], m_connections[pos]); - } - } - - - size_t WellConnections::findClosestConnection(int oi, int oj, double oz, size_t start_pos) - { - size_t closest = std::numeric_limits::max(); - int min_ijdist2 = std::numeric_limits::max(); - double min_zdiff = std::numeric_limits::max(); - for (size_t pos = start_pos; pos < m_connections.size(); ++pos) { - const auto& connection = m_connections[ pos ]; - - const double depth = connection.depth(); - const int ci = connection.getI(); - const int cj = connection.getJ(); - // Using square of distance to avoid non-integer arithmetics. - const int ijdist2 = (ci - oi) * (ci - oi) + (cj - oj) * (cj - oj); - if (ijdist2 < min_ijdist2) { - min_ijdist2 = ijdist2; - min_zdiff = std::abs(depth - oz); - closest = pos; - } else if (ijdist2 == min_ijdist2) { - const double zdiff = std::abs(depth - oz); - if (zdiff < min_zdiff) { - min_zdiff = zdiff; - closest = pos; - } - } - } - assert(closest != std::numeric_limits::max()); - return closest; - } - - bool WellConnections::operator==( const WellConnections& rhs ) const { - return this->size() == rhs.size() && - this->m_ordering == rhs.m_ordering && - std::equal( this->begin(), this->end(), rhs.begin() ); - } - - bool WellConnections::operator!=( const WellConnections& rhs ) const { - return !( *this == rhs ); - } - - - void WellConnections::filter(const ActiveGridCells& grid) { - auto new_end = std::remove_if(m_connections.begin(), - m_connections.end(), - [&grid](const Connection& c) { return !grid.cellActive(c.getI(), c.getJ(), c.getK()); }); - m_connections.erase(new_end, m_connections.end()); - } - -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Well/WellEconProductionLimits.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Well/WellEconProductionLimits.cpp deleted file mode 100644 index 73677107d7..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Well/WellEconProductionLimits.cpp +++ /dev/null @@ -1,295 +0,0 @@ -/* - Copyright 2016 SINTEF ICT, Applied Mathematics. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - - -#include - -#include -#include - -#include - - -namespace Opm { - - WellEconProductionLimits::WellEconProductionLimits() - : m_min_oil_rate(0.0) - , m_min_gas_rate(0.0) - , m_max_water_cut(0.0) - , m_max_gas_oil_ratio(0.0) - , m_max_water_gas_ratio(0.0) - , m_workover(EconWorkover::NONE) - , m_end_run(false) - , m_followon_well("'") - , m_quantity_limit(QuantityLimit::RATE) - , m_secondary_max_water_cut(0.0) - , m_workover_secondary(m_workover) - , m_max_gas_liquid_ratio(0.0) - , m_min_liquid_rate(0.0) - , m_max_temperature(-1e8) - , m_min_reservoir_fluid_rate(0.0) - { - } - - - WellEconProductionLimits::WellEconProductionLimits(const DeckRecord& record) - : m_min_oil_rate(record.getItem("MIN_OIL_PRODUCTION").get(0).getSI()) - , m_min_gas_rate(record.getItem("MIN_GAS_PRODUCTION").get(0).getSI()) - , m_max_water_cut(record.getItem("MAX_WATER_CUT").get(0).getSI()) - , m_max_gas_oil_ratio(record.getItem("MAX_GAS_OIL_RATIO").get(0).getSI()) - , m_max_water_gas_ratio(record.getItem("MAX_WATER_GAS_RATIO").get(0).getSI()) - , m_workover(EconWorkoverFromString(record.getItem("WORKOVER_RATIO_LIMIT").getTrimmedString(0))) - , m_end_run(false) - , m_followon_well(record.getItem("FOLLOW_ON_WELL").getTrimmedString(0)) - , m_quantity_limit(QuantityLimitFromString(record.getItem("LIMITED_QUANTITY").getTrimmedString(0))) - , m_secondary_max_water_cut(record.getItem("SECOND_MAX_WATER_CUT").get(0)) - , m_max_gas_liquid_ratio(record.getItem("MAX_GAS_LIQUID_RATIO").get(0)) - , m_min_liquid_rate(record.getItem("MIN_LIQUID_PRODCUTION_RATE").getSIDouble(0)) - , m_min_reservoir_fluid_rate(record.getItem("MIN_RES_FLUID_RATE").getSIDouble(0)) - { - assert(m_workover != EconWorkover::LAST); - assert(m_workover != EconWorkover::RED); - - if (record.getItem("MAX_TEMP").hasValue(0)) { - m_max_temperature = record.getItem("MAX_TEMP").getSIDouble(0); - } else { - // defaulted with one really non-physical value. - m_max_temperature = -1e8; - } - - if (record.getItem("WORKOVER_SECOND_WATER_CUT_LIMIT").hasValue(0)) { - const std::string string_workover = record.getItem("WORKOVER_SECOND_WATER_CUT_LIMIT").getTrimmedString(0); - m_workover_secondary = EconWorkoverFromString(string_workover); - } else { - m_workover_secondary = m_workover; - } - - if (record.getItem("END_RUN_FLAG").hasValue(0)) { - std::string string_endrun = record.getItem("END_RUN_FLAG").getTrimmedString(0); - if (string_endrun == "YES") { - m_end_run = true; - } else if (string_endrun != "NO") { - throw std::invalid_argument("Unknown input: " + string_endrun + " for END_RUN_FLAG in WECON"); - } - } - } - - WellEconProductionLimits WellEconProductionLimits::serializeObject() - { - WellEconProductionLimits result; - result.m_min_oil_rate = 1.0; - result.m_min_gas_rate = 2.0; - result.m_max_water_cut = 3.0; - result.m_max_gas_oil_ratio = 4.0; - result.m_max_water_gas_ratio = 5.0; - result.m_workover = EconWorkover::CONP; - result.m_end_run = true; - result.m_followon_well = "test"; - result.m_quantity_limit = QuantityLimit::POTN; - result.m_secondary_max_water_cut = 6.0; - result.m_workover_secondary = EconWorkover::WELL; - result.m_max_gas_liquid_ratio = 7.0; - result.m_min_liquid_rate = 8.0; - result.m_max_temperature = 9.0; - result.m_min_reservoir_fluid_rate = 10.0; - - return result; - } - - - bool WellEconProductionLimits::operator==(const WellEconProductionLimits& other) const { - if ((minOilRate() == other.minOilRate()) && - (minGasRate() == other.minGasRate()) && - (maxWaterCut() == other.maxWaterCut()) && - (maxGasOilRatio() == other.maxGasOilRatio()) && - (maxWaterGasRatio() == other.maxWaterGasRatio()) && - (workover() == other.workover()) && - (followonWell() == other.followonWell()) && - (quantityLimit() == other.quantityLimit()) && - (maxSecondaryMaxWaterCut() == other.maxSecondaryMaxWaterCut()) && - (workoverSecondary() == other.workoverSecondary()) && - (maxGasLiquidRatio() == other.maxGasLiquidRatio()) && - (minLiquidRate() == other.minLiquidRate()) && - (maxTemperature() == other.maxTemperature()) && - (minReservoirFluidRate() == other.minReservoirFluidRate())) - { - - return true; - } else { - return false; - } - } - - -bool WellEconProductionLimits::operator!=(const WellEconProductionLimits& other) const { - return (!(*this == other)); -} - -// limit switch on? -bool WellEconProductionLimits::onAnyEffectiveLimit() const { - return (onAnyRatioLimit() || onAnyRateLimit()); -}; - -bool WellEconProductionLimits::onAnyRatioLimit() const { - return (onMaxWaterCut() || onMaxGasOilRatio() || onMaxWaterGasRatio() || - onMaxGasLiquidRatio()); -}; - -bool WellEconProductionLimits::onAnyRateLimit() const { - return (onMinOilRate() || onMinGasRate() || onMinLiquidRate() || - onMinReservoirFluidRate()); -}; - -bool WellEconProductionLimits::onMinOilRate() const { return (m_min_oil_rate > 0.0); }; - -bool WellEconProductionLimits::onMinGasRate() const { return (m_min_gas_rate > 0.0); }; - -bool WellEconProductionLimits::onMaxWaterCut() const { return (m_max_water_cut > 0.0); }; - -bool WellEconProductionLimits::onMaxGasOilRatio() const { return (m_max_gas_oil_ratio > 0.0); }; - -bool WellEconProductionLimits::onMaxWaterGasRatio() const { return (m_max_water_gas_ratio > 0.0); }; - -bool WellEconProductionLimits::onSecondaryMaxWaterCut() const { - return (m_secondary_max_water_cut > 0.0); -}; - -bool WellEconProductionLimits::onMaxGasLiquidRatio() const { return (m_max_gas_oil_ratio > 0.0); }; - -// assuming Celsius temperature is used internally -bool WellEconProductionLimits::onMaxTemperature() const { return (m_max_temperature > -273.15); }; - -bool WellEconProductionLimits::onMinLiquidRate() const { return (m_min_liquid_rate > 0.0); }; - -bool WellEconProductionLimits::onMinReservoirFluidRate() const { - return (m_min_reservoir_fluid_rate > 0.0); -}; - -// not sure what will happen if the followon well is a well does not exist. -bool WellEconProductionLimits::validFollowonWell() const { return (m_followon_well != "'"); }; - -bool WellEconProductionLimits::requireWorkover() const { - return (m_workover != EconWorkover::NONE); -}; - -bool WellEconProductionLimits::requireSecondaryWorkover() const { - return (m_workover_secondary != EconWorkover::NONE); -} - -bool WellEconProductionLimits::endRun() const { return m_end_run; } - -double WellEconProductionLimits::minOilRate() const { return m_min_oil_rate; }; - -double WellEconProductionLimits::minGasRate() const { return m_min_gas_rate; }; - -double WellEconProductionLimits::maxWaterCut() const { return m_max_water_cut; }; - -double WellEconProductionLimits::maxGasOilRatio() const { return m_max_gas_oil_ratio; }; - -double WellEconProductionLimits::maxWaterGasRatio() const { return m_max_water_gas_ratio; }; - -double WellEconProductionLimits::maxGasLiquidRatio() const { return m_max_gas_liquid_ratio; }; - -double WellEconProductionLimits::minLiquidRate() const { return m_min_liquid_rate; }; - -double WellEconProductionLimits::maxTemperature() const { return m_max_temperature; }; - -double WellEconProductionLimits::minReservoirFluidRate() const { return m_min_reservoir_fluid_rate; }; - -WellEconProductionLimits::EconWorkover WellEconProductionLimits::workover() const { return m_workover; }; - -const std::string& WellEconProductionLimits::followonWell() const { return m_followon_well; }; - -WellEconProductionLimits::QuantityLimit WellEconProductionLimits::quantityLimit() const { - return m_quantity_limit; -}; - -double WellEconProductionLimits::maxSecondaryMaxWaterCut() const { - return m_secondary_max_water_cut; -}; - -WellEconProductionLimits::EconWorkover WellEconProductionLimits::workoverSecondary() const { - return m_workover_secondary; -}; - -std::string WellEconProductionLimits::EconWorkover2String(EconWorkover enumValue) { - switch(enumValue) { - case EconWorkover::NONE: - return "NONE"; - case EconWorkover::CON: - return "CON"; - case EconWorkover::CONP: - return "+CON"; - case EconWorkover::WELL: - return "WELL"; - case EconWorkover::PLUG: - return "PLUG"; - case EconWorkover::LAST: - return "LAST"; - case EconWorkover::RED: - return "RED"; - default: - throw std::invalid_argument("unhandled WorkoverEnum value"); - } -} - - -WellEconProductionLimits::EconWorkover WellEconProductionLimits::EconWorkoverFromString(const std::string& stringValue) { - if (stringValue == "NONE") - return EconWorkover::NONE; - else if (stringValue == "CON") - return EconWorkover::CON; - else if (stringValue == "+CON") - return EconWorkover::CONP; - else if (stringValue == "WELL") - return EconWorkover::WELL; - else if (stringValue == "PLUG") - return EconWorkover::PLUG; - else if (stringValue == "LAST") - return EconWorkover::LAST; - else if (stringValue == "RED") - return EconWorkover::RED; - else - throw std::invalid_argument("Unknown enum stringValue: " + stringValue + - " for WorkoverEnum"); -} - -const std::string WellEconProductionLimits::QuantityLimit2String(QuantityLimit enumValue) { - switch(enumValue) { - case QuantityLimit::RATE: - return "RATE"; - case QuantityLimit::POTN: - return "POTN"; - default: - throw std::invalid_argument("unhandled QuantityLimitvalue"); - } -} - -WellEconProductionLimits::QuantityLimit WellEconProductionLimits::QuantityLimitFromString(const std::string& string ) { - if (string == "RATE") { - return QuantityLimit::RATE; - } else if (string == "POTN") { - return QuantityLimit::POTN; - } else { - throw std::invalid_argument("Unknown enum string: " + string + " for QuantityLimitEnum"); - } -} - - -} // namespace Opm diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Well/WellFoamProperties.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Well/WellFoamProperties.cpp deleted file mode 100644 index e7dfb6c784..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Well/WellFoamProperties.cpp +++ /dev/null @@ -1,46 +0,0 @@ -/* - Copyright 2019 SINTEF Digital, Mathematics and Cybernetics. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include - -#include -#include - -Opm::WellFoamProperties Opm::WellFoamProperties::serializeObject() -{ - Opm::WellFoamProperties result; - result.m_foamConcentration = 1.0; - - return result; -} - -void Opm::WellFoamProperties::handleWFOAM(const DeckRecord& rec) -{ - this->m_foamConcentration = rec.getItem("FOAM_CONCENTRATION").get(0).getSI(); -} - -bool Opm::WellFoamProperties::operator==(const WellFoamProperties& other) const -{ - return this->m_foamConcentration == other.m_foamConcentration; -} - -bool Opm::WellFoamProperties::operator!=(const WellFoamProperties& other) const -{ - return this->m_foamConcentration != other.m_foamConcentration; -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Well/WellInjectionProperties.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Well/WellInjectionProperties.cpp deleted file mode 100644 index 847f4fdca2..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Well/WellInjectionProperties.cpp +++ /dev/null @@ -1,324 +0,0 @@ -/* - Copyright 2016 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "injection.hpp" -#include "../eval_uda.hpp" - -namespace Opm { - - - Well::WellInjectionProperties::WellInjectionProperties() - : WellInjectionProperties(UnitSystem(UnitSystem::UnitType::UNIT_TYPE_METRIC), "") - { - } - - - Well::WellInjectionProperties::WellInjectionProperties(const UnitSystem& units, const std::string& wname) - : name(wname), - surfaceInjectionRate(units.getDimension(UnitSystem::measure::identity)), - reservoirInjectionRate(units.getDimension(UnitSystem::measure::rate)), - BHPTarget(units.getDimension(UnitSystem::measure::pressure)), - THPTarget(units.getDimension(UnitSystem::measure::pressure)), - temperature(Metric::TemperatureOffset + ParserKeywords::STCOND::TEMPERATURE::defaultValue), - BHPH(0), - THPH(0), - VFPTableNumber(0), - predictionMode(true), - injectionControls(0), - injectorType(InjectorType::WATER), - controlMode(InjectorCMode::CMODE_UNDEFINED) - { - } - - Well::WellInjectionProperties Well::WellInjectionProperties::serializeObject() - { - Well::WellInjectionProperties result; - result.name = "test"; - result.surfaceInjectionRate = UDAValue(1.0); - result.reservoirInjectionRate = UDAValue("test"); - result.BHPTarget = UDAValue(2.0); - result.THPTarget = UDAValue(3.0); - result.bhp_hist_limit = 4.0; - result.thp_hist_limit = 5.0; - result.temperature = 6.0; - result.BHPH = 7.0; - result.THPH = 8.0; - result.VFPTableNumber = 9; - result.predictionMode = true; - result.injectionControls = 10; - result.injectorType = InjectorType::OIL; - result.controlMode = InjectorCMode::BHP; - - return result; - } - - void Well::WellInjectionProperties::handleWCONINJE(const DeckRecord& record, bool availableForGroupControl, const std::string& well_name) { - this->injectorType = InjectorTypeFromString( record.getItem("TYPE").getTrimmedString(0) ); - this->predictionMode = true; - - if (!record.getItem("RATE").defaultApplied(0)) { - this->surfaceInjectionRate = record.getItem("RATE").get(0); - this->addInjectionControl(InjectorCMode::RATE); - } else - this->dropInjectionControl(InjectorCMode::RATE); - - - if (!record.getItem("RESV").defaultApplied(0)) { - this->reservoirInjectionRate = record.getItem("RESV").get(0); - this->addInjectionControl(InjectorCMode::RESV); - } else - this->dropInjectionControl(InjectorCMode::RESV); - - - if (!record.getItem("THP").defaultApplied(0)) { - this->THPTarget = record.getItem("THP").get(0); - this->addInjectionControl(InjectorCMode::THP); - } else - this->dropInjectionControl(InjectorCMode::THP); - - this->VFPTableNumber = record.getItem("VFP_TABLE").get< int >(0); - - /* - There is a sensible default BHP limit defined, so the BHPLimit can be - safely set unconditionally, and we make BHP limit as a constraint based - on that default value. It is not easy to infer from the manual, while the - current behavoir agrees with the behavior of Eclipse when BHPLimit is not - specified while employed during group control. - */ - this->BHPTarget = record.getItem("BHP").get(0); - this->addInjectionControl(InjectorCMode::BHP); - - if (availableForGroupControl) - this->addInjectionControl(InjectorCMode::GRUP); - else - this->dropInjectionControl(InjectorCMode::GRUP); - { - const std::string& cmodeString = record.getItem("CMODE").getTrimmedString(0); - InjectorCMode controlModeArg = InjectorCModeFromString( cmodeString ); - if (this->hasInjectionControl( controlModeArg)) - this->controlMode = controlModeArg; - else { - throw std::invalid_argument("Tried to set invalid control: " + cmodeString + " for well: " + well_name); - } - } - } - - - - void Well::WellInjectionProperties::handleWELTARG(WELTARGCMode cmode, double newValue, double SiFactorP) { - if (cmode == Well::WELTARGCMode::BHP){ - if (this->predictionMode) { - this->BHPTarget.assert_numeric("Can not combine UDA and WELTARG"); - this->BHPTarget = newValue; - } else - this->bhp_hist_limit = newValue * SiFactorP; - } - else if (cmode == WELTARGCMode::ORAT){ - if(this->injectorType == InjectorType::OIL){ - this->surfaceInjectionRate.assert_numeric("Can not combine UDA and WELTARG"); - this->surfaceInjectionRate = newValue; - }else{ - std::invalid_argument("Well type must be OIL to set the oil rate"); - } - } - else if (cmode == WELTARGCMode::WRAT){ - if (this->injectorType == InjectorType::WATER) { - this->surfaceInjectionRate.assert_numeric("Can not combine UDA and WELTARG"); - this->surfaceInjectionRate = newValue; - } - else - std::invalid_argument("Well type must be WATER to set the water rate"); - } - else if (cmode == WELTARGCMode::GRAT){ - if(this->injectorType == InjectorType::GAS){ - this->surfaceInjectionRate.assert_numeric("Can not combine UDA and WELTARG"); - this->surfaceInjectionRate = newValue; - }else{ - std::invalid_argument("Well type must be GAS to set the gas rate"); - } - } - else if (cmode == WELTARGCMode::THP){ - this->THPTarget.assert_numeric("Can not combine UDA and WELTARG"); - this->THPTarget = newValue; - } - else if (cmode == WELTARGCMode::VFP){ - this->VFPTableNumber = static_cast (newValue); - } - else if (cmode == WELTARGCMode::RESV){ - this->surfaceInjectionRate.assert_numeric("Can not combine UDA and WELTARG"); - this->reservoirInjectionRate = newValue; - } - else if (cmode != WELTARGCMode::GUID){ - throw std::invalid_argument("Invalid keyword (MODE) supplied"); - } - } - - - void Well::WellInjectionProperties::handleWCONINJH(const DeckRecord& record, bool is_producer, const std::string& well_name) { - // convert injection rates to SI - const auto& typeItem = record.getItem("TYPE"); - if (typeItem.defaultApplied(0)) { - const std::string msg = "Injection type can not be defaulted for keyword WCONINJH"; - throw std::invalid_argument(msg); - } - this->injectorType = InjectorTypeFromString( typeItem.getTrimmedString(0)); - - if (!record.getItem("RATE").defaultApplied(0)) { - double injectionRate = record.getItem("RATE").get(0); - this->surfaceInjectionRate = injectionRate; - } - if ( record.getItem( "BHP" ).hasValue(0) ) - this->BHPH = record.getItem("BHP").getSIDouble(0); - if ( record.getItem( "THP" ).hasValue(0) ) - this->THPH = record.getItem("THP").getSIDouble(0); - - const std::string& cmodeString = record.getItem("CMODE").getTrimmedString(0); - const InjectorCMode newControlMode = InjectorCModeFromString( cmodeString ); - - if ( !(newControlMode == InjectorCMode::RATE || newControlMode == InjectorCMode::BHP) ) { - const std::string msg = "Only RATE and BHP control are allowed for WCONINJH for well " + well_name; - throw std::invalid_argument(msg); - } - - // when well is under BHP control, we use its historical BHP value as BHP limit - if (newControlMode == InjectorCMode::BHP) { - this->bhp_hist_limit = this->BHPH; - } else { - const bool switching_from_producer = is_producer; - const bool switching_from_prediction = this->predictionMode; - const bool switching_from_BHP_control = (this->controlMode == InjectorCMode::BHP); - if (switching_from_prediction || - switching_from_BHP_control || - switching_from_producer) { - this->resetDefaultHistoricalBHPLimit(); - } - // otherwise, we keep its previous BHP limit - } - - this->addInjectionControl(InjectorCMode::BHP); - this->addInjectionControl(newControlMode); - this->controlMode = newControlMode; - this->predictionMode = false; - - const int VFPTableNumberArg = record.getItem("VFP_TABLE").get< int >(0); - if (VFPTableNumberArg > 0) { - this->VFPTableNumber = VFPTableNumberArg; - } - } - - bool Well::WellInjectionProperties::operator==(const Well::WellInjectionProperties& other) const { - if ((surfaceInjectionRate == other.surfaceInjectionRate) && - (reservoirInjectionRate == other.reservoirInjectionRate) && - (temperature == other.temperature) && - (BHPTarget == other.BHPTarget) && - (THPTarget == other.THPTarget) && - (BHPH == other.BHPH) && - (THPH == other.THPH) && - (bhp_hist_limit == other.bhp_hist_limit) && - (thp_hist_limit == other.thp_hist_limit) && - (VFPTableNumber == other.VFPTableNumber) && - (predictionMode == other.predictionMode) && - (injectionControls == other.injectionControls) && - (injectorType == other.injectorType) && - (controlMode == other.controlMode)) - return true; - else - return false; - } - - bool Well::WellInjectionProperties::operator!=(const Well::WellInjectionProperties& other) const { - return !(*this == other); - } - - void Well::WellInjectionProperties::resetDefaultHistoricalBHPLimit() { - // this default BHP value is from simulation result, - // without finding any related document - this->bhp_hist_limit = 6891.2 * unit::barsa; - } - - void Well::WellInjectionProperties::resetBHPLimit() { - this->bhp_hist_limit = 0; - } - - - std::ostream& operator<<( std::ostream& stream, - const Well::WellInjectionProperties& wp ) { - return stream - << "Well::WellInjectionProperties { " - << "surfacerate: " << wp.surfaceInjectionRate << ", " - << "reservoir rate " << wp.reservoirInjectionRate << ", " - << "temperature: " << wp.temperature << ", " - << "BHP target: " << wp.BHPTarget << ", " - << "THP target: " << wp.THPTarget << ", " - << "BHPH: " << wp.BHPH << ", " - << "THPH: " << wp.THPH << ", " - << "VFP table: " << wp.VFPTableNumber << ", " - << "prediction mode: " << wp.predictionMode << ", " - << "injection ctrl: " << wp.injectionControls << ", " - << "injector type: " << InjectorType2String(wp.injectorType) << ", " - << "control mode: " << Well::InjectorCMode2String(wp.controlMode) << " }"; - } - - - Well::InjectionControls Well::WellInjectionProperties::controls(const UnitSystem& unit_sys, const SummaryState& st, double udq_def) const { - InjectionControls controls(this->injectionControls); - - controls.surface_rate = UDA::eval_well_uda_rate(this->surfaceInjectionRate, this->name, st, udq_def, this->injectorType, unit_sys); - controls.reservoir_rate = UDA::eval_well_uda(this->reservoirInjectionRate, this->name, st, udq_def); - if (this->predictionMode) { - controls.bhp_limit = UDA::eval_well_uda(this->BHPTarget, this->name, st, udq_def); - controls.thp_limit = UDA::eval_well_uda(this->THPTarget, this->name, st, udq_def); - } else { - controls.bhp_limit = this->bhp_hist_limit; - controls.thp_limit = this->thp_hist_limit; - } - controls.temperature = this->temperature; - controls.injector_type = this->injectorType; - controls.cmode = this->controlMode; - controls.vfp_table_number = this->VFPTableNumber; - controls.injector_type = this->injectorType; - - return controls; - } - - bool Well::WellInjectionProperties::updateUDQActive(const UDQConfig& udq_config, UDQActive& active) const { - int update_count = 0; - - update_count += active.update(udq_config, this->surfaceInjectionRate, this->name, UDAControl::WCONINJE_RATE); - update_count += active.update(udq_config, this->reservoirInjectionRate, this->name, UDAControl::WCONINJE_RESV); - update_count += active.update(udq_config, this->BHPTarget, this->name, UDAControl::WCONINJE_BHP); - update_count += active.update(udq_config, this->THPTarget, this->name, UDAControl::WCONINJE_THP); - - return (update_count > 0); - } - -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Well/WellPolymerProperties.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Well/WellPolymerProperties.cpp deleted file mode 100644 index 3b429c1548..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Well/WellPolymerProperties.cpp +++ /dev/null @@ -1,80 +0,0 @@ -/* - Copyright 2016 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include -#include -#include - -#include -#include - -namespace Opm { - - WellPolymerProperties WellPolymerProperties::serializeObject() - { - WellPolymerProperties result; - result.m_polymerConcentration = 1.0; - result.m_saltConcentration = 2.0; - result.m_plymwinjtable = 3; - result.m_skprwattable = 4; - result.m_skprpolytable = 5; - - return result; - } - - bool WellPolymerProperties::operator==(const WellPolymerProperties& other) const { - if ((m_polymerConcentration == other.m_polymerConcentration) && - (m_saltConcentration == other.m_saltConcentration) && - (m_plymwinjtable == other.m_plymwinjtable) && - (m_skprwattable == other.m_skprwattable) && - (m_skprpolytable == other.m_skprpolytable) ) - return true; - else - return false; - - } - - - void WellPolymerProperties::handleWPOLYMER(const DeckRecord& record) { - const auto& group_polymer_item = record.getItem("GROUP_POLYMER_CONCENTRATION"); - const auto& group_salt_item = record.getItem("GROUP_SALT_CONCENTRATION"); - - if (!group_polymer_item.defaultApplied(0)) - throw std::logic_error("Sorry explicit setting of \'GROUP_POLYMER_CONCENTRATION\' is not supported!"); - - if (!group_salt_item.defaultApplied(0)) - throw std::logic_error("Sorry explicit setting of \'GROUP_SALT_CONCENTRATION\' is not supported!"); - - this->m_polymerConcentration = record.getItem("POLYMER_CONCENTRATION").get(0).getSI(); - this->m_saltConcentration = record.getItem("SALT_CONCENTRATION").get(0).getSI(); - } - - void WellPolymerProperties::handleWPMITAB(const DeckRecord& record) { - this->m_plymwinjtable = record.getItem("TABLE_NUMBER").get(0); - } - - void WellPolymerProperties::handleWSKPTAB(const DeckRecord& record) { - this->m_skprwattable = record.getItem("TABLE_NUMBER_WATER").get(0); - this->m_skprpolytable = record.getItem("TABLE_NUMBER_POLYMER").get(0); - } - - bool WellPolymerProperties::operator!=(const WellPolymerProperties& other) const { - return !(*this == other); - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Well/WellProductionProperties.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Well/WellProductionProperties.cpp deleted file mode 100644 index 47cce3bded..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Well/WellProductionProperties.cpp +++ /dev/null @@ -1,371 +0,0 @@ -/* - Copyright 2016 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -#include "../eval_uda.hpp" - -namespace Opm { - - Well::WellProductionProperties::WellProductionProperties() : - WellProductionProperties(UnitSystem(UnitSystem::UnitType::UNIT_TYPE_METRIC), "") - {} - - Well::WellProductionProperties::WellProductionProperties(const UnitSystem& units, const std::string& name_arg) : - name(name_arg), - OilRate(units.getDimension(UnitSystem::measure::liquid_surface_rate)), - WaterRate(units.getDimension(UnitSystem::measure::liquid_surface_rate)), - GasRate(units.getDimension(UnitSystem::measure::gas_surface_rate)), - LiquidRate(units.getDimension(UnitSystem::measure::liquid_surface_rate)), - ResVRate(units.getDimension(UnitSystem::measure::rate)), - BHPTarget(units.getDimension(UnitSystem::measure::pressure)), - THPTarget(units.getDimension(UnitSystem::measure::pressure)), - BHPH(0.0), - THPH(0.0), - VFPTableNumber(0), - ALQValue(0.0), - predictionMode(true), - controlMode(ProducerCMode::CMODE_UNDEFINED), - whistctl_cmode(ProducerCMode::CMODE_UNDEFINED), - m_productionControls(0) - {} - - - Well::WellProductionProperties Well::WellProductionProperties::serializeObject() - { - Well::WellProductionProperties result; - result.name = "test"; - result.OilRate = UDAValue(1.0); - result.WaterRate = UDAValue("test"); - result.GasRate = UDAValue(2.0); - result.LiquidRate = UDAValue(3.0); - result.ResVRate = UDAValue(4.0); - result.BHPTarget = UDAValue(5.0); - result.THPTarget = UDAValue(6.0); - result.bhp_hist_limit = 7.0; - result.thp_hist_limit = 8.0; - result.BHPH = 9.0; - result.THPH = 10.0; - result.VFPTableNumber = 11; - result.ALQValue = 12.0; - result.predictionMode = true; - result.controlMode = ProducerCMode::CRAT; - result.whistctl_cmode = ProducerCMode::BHP; - result.m_productionControls = 13; - - return result; - } - - void Well::WellProductionProperties::init_rates( const DeckRecord& record ) { - this->OilRate = record.getItem("ORAT").get(0); - this->WaterRate = record.getItem("WRAT").get(0); - this->GasRate = record.getItem("GRAT").get(0); - } - - - void Well::WellProductionProperties::init_history(const DeckRecord& record) - { - this->predictionMode = false; - // update LiquidRate. The funnny constrction with explicitly making a new - // UDAValue is to ensure that the UDAValue has the correct dimension. - this->LiquidRate = UDAValue(this->WaterRate.get() + this->OilRate.get(), this->OilRate.get_dim()); - - if ( record.getItem( "BHP" ).hasValue(0) ) - this->BHPH = record.getItem("BHP").get(0).getSI(); - - if ( record.getItem( "THP" ).hasValue(0) ) - this->THPH = record.getItem("THP").get(0).getSI(); - - const auto& cmodeItem = record.getItem("CMODE"); - if ( cmodeItem.defaultApplied(0) ) { - const std::string msg = "control mode can not be defaulted for keyword WCONHIST"; - throw std::invalid_argument(msg); - } - - ProducerCMode cmode; - - if (effectiveHistoryProductionControl(this->whistctl_cmode) ) - cmode = this->whistctl_cmode; - else - cmode = ProducerCModeFromString( cmodeItem.getTrimmedString( 0 ) ); - - // clearing the existing targets/limits - clearControls(); - - if (effectiveHistoryProductionControl(cmode)) { - this->addProductionControl( cmode ); - this->controlMode = cmode; - } else { - const std::string cmode_string = cmodeItem.getTrimmedString( 0 ); - const std::string msg = "unsupported control mode " + cmode_string + " for WCONHIST"; - throw std::invalid_argument(msg); - } - - // always have a BHP control/limit, while the limit value needs to be determined - // the control mode added above can be a BHP control or a type of RATE control - if ( !this->hasProductionControl( ProducerCMode::BHP ) ) - this->addProductionControl( ProducerCMode::BHP ); - - if (cmode == ProducerCMode::BHP) - this->setBHPLimit(this->BHPH); - - const auto vfp_table = record.getItem("VFP_TABLE").get< int >(0); - if (vfp_table != 0) - this->VFPTableNumber = vfp_table; - - auto alq_value = record.getItem("LIFT").get(0); //NOTE: Unit of ALQ is never touched - if (alq_value != 0.) - this->ALQValue = alq_value; - } - - - - void Well::WellProductionProperties::handleWCONPROD( const std::string& /* well */, const DeckRecord& record) - { - this->predictionMode = true; - - this->BHPTarget = record.getItem("BHP").get(0); - this->THPTarget = record.getItem("THP").get(0); - this->ALQValue = record.getItem("ALQ").get< double >(0); //NOTE: Unit of ALQ is never touched - this->VFPTableNumber = record.getItem("VFP_TABLE").get< int >(0); - this->LiquidRate = record.getItem("LRAT").get(0); - this->ResVRate = record.getItem("RESV").get(0); - - using mode = std::pair< const std::string, ProducerCMode >; - static const mode modes[] = { - { "ORAT", ProducerCMode::ORAT }, { "WRAT", ProducerCMode::WRAT }, { "GRAT", ProducerCMode::GRAT }, - { "LRAT", ProducerCMode::LRAT }, { "RESV", ProducerCMode::RESV }, { "THP", ProducerCMode::THP } - }; - - - this->init_rates(record); - - for( const auto& cmode : modes ) { - if( !record.getItem( cmode.first ).defaultApplied( 0 ) ) { - - // a zero value THP limit will not be handled as a THP limit - if (cmode.first == "THP" && this->THPTarget.zero()) - continue; - - this->addProductionControl( cmode.second ); - } - } - - // There is always a BHP constraint, when not specified, will use the default value - this->addProductionControl( ProducerCMode::BHP ); - { - const auto& cmodeItem = record.getItem("CMODE"); - if (cmodeItem.hasValue(0)) { - auto cmode = Well::ProducerCModeFromString( cmodeItem.getTrimmedString(0) ); - - if (this->hasProductionControl( cmode )) - this->controlMode = cmode; - else - throw std::invalid_argument("Trying to set CMODE to: " + cmodeItem.getTrimmedString(0) + " - no value has been specified for this control"); - } - } - } - - /* - This is now purely "history" constructor - i.e. the record should - originate from the WCONHIST keyword. Predictions are handled with the - default constructor and the handleWCONPROD() method. - */ - void Well::WellProductionProperties::handleWCONHIST(const DeckRecord& record) - { - this->init_rates(record); - this->LiquidRate = 0; - this->ResVRate = 0; - - // when the well is switching to history matching producer from prediction mode - // or switching from injector to producer - // or switching from BHP control to RATE control (under history matching mode) - // we use the defaulted BHP limit, otherwise, we use the previous BHP limit - if (this->predictionMode) - this->resetDefaultBHPLimit(); - - if (this->controlMode == ProducerCMode::BHP) - this->resetDefaultBHPLimit(); - - this->init_history(record); - } - - - - void Well::WellProductionProperties::handleWELTARG(Well::WELTARGCMode cmode, double newValue, double SiFactorP) { - if (cmode == WELTARGCMode::ORAT){ - this->OilRate.assert_numeric("Can not combine UDA and WELTARG"); - this->OilRate = newValue; - this->addProductionControl( ProducerCMode::ORAT ); - } - else if (cmode == WELTARGCMode::WRAT){ - this->WaterRate.assert_numeric("Can not combine UDA and WELTARG"); - this->WaterRate = newValue; - this->addProductionControl( ProducerCMode::WRAT ); - } - else if (cmode == WELTARGCMode::GRAT){ - this->GasRate.assert_numeric("Can not combine UDA and WELTARG"); - this->GasRate = newValue; - this->addProductionControl( ProducerCMode::GRAT ); - } - else if (cmode == WELTARGCMode::LRAT){ - this->LiquidRate.assert_numeric("Can not combine UDA and WELTARG"); - this->LiquidRate = newValue; - this->addProductionControl( ProducerCMode::LRAT ); - } - else if (cmode == WELTARGCMode::RESV){ - this->ResVRate.assert_numeric("Can not combine UDA and WELTARG"); - this->ResVRate = newValue; - this->addProductionControl( ProducerCMode::RESV ); - } - else if (cmode == WELTARGCMode::BHP){ - if (this->predictionMode) { - this->BHPTarget.assert_numeric("Can not combine UDA and WELTARG"); - this->BHPTarget = newValue; - } else - this->bhp_hist_limit = newValue * SiFactorP; - this->addProductionControl( ProducerCMode::BHP ); - } - else if (cmode == WELTARGCMode::THP){ - this->THPTarget.assert_numeric("Can not combine UDA and WELTARG"); - this->THPTarget = newValue; - this->addProductionControl( ProducerCMode::THP ); - } - else if (cmode == WELTARGCMode::VFP) - this->VFPTableNumber = static_cast (newValue); - else if (cmode != WELTARGCMode::GUID) - throw std::invalid_argument("Invalid keyword (MODE) supplied"); - } - - - - bool Well::WellProductionProperties::operator==(const Well::WellProductionProperties& other) const { - return OilRate == other.OilRate - && WaterRate == other.WaterRate - && GasRate == other.GasRate - && LiquidRate == other.LiquidRate - && ResVRate == other.ResVRate - && BHPTarget == other.BHPTarget - && THPTarget == other.THPTarget - && bhp_hist_limit == other.bhp_hist_limit - && thp_hist_limit == other.thp_hist_limit - && BHPH == other.BHPH - && THPH == other.THPH - && VFPTableNumber == other.VFPTableNumber - && controlMode == other.controlMode - && m_productionControls == other.m_productionControls - && whistctl_cmode == other.whistctl_cmode - && this->predictionMode == other.predictionMode; - } - - - bool Well::WellProductionProperties::operator!=(const Well::WellProductionProperties& other) const { - return !(*this == other); - } - - - std::ostream& operator<<( std::ostream& stream, const Well::WellProductionProperties& wp ) { - return stream - << "Well::WellProductionProperties { " - << "oil rate: " << wp.OilRate << ", " - << "water rate: " << wp.WaterRate << ", " - << "gas rate: " << wp.GasRate << ", " - << "liquid rate: " << wp.LiquidRate << ", " - << "ResV rate: " << wp.ResVRate << ", " - << "BHP target: " << wp.BHPTarget << ", " - << "THP target: " << wp.THPTarget << ", " - << "BHPH: " << wp.BHPH << ", " - << "THPH: " << wp.THPH << ", " - << "VFP table: " << wp.VFPTableNumber << ", " - << "ALQ: " << wp.ALQValue << ", " - << "WHISTCTL: " << Well::ProducerCMode2String(wp.whistctl_cmode) << ", " - << "prediction: " << wp.predictionMode << " }"; - } - - bool Well::WellProductionProperties::effectiveHistoryProductionControl(const Well::ProducerCMode cmode) { - // Note, not handling CRAT for now - return ( (cmode == ProducerCMode::LRAT || cmode == ProducerCMode::RESV || cmode == ProducerCMode::ORAT || - cmode == ProducerCMode::WRAT || cmode == ProducerCMode::GRAT || cmode == ProducerCMode::BHP) ); - } - - void Well::WellProductionProperties::resetDefaultBHPLimit() { - double si_value = 1. * unit::atm; - this->setBHPLimit(si_value); - } - - void Well::WellProductionProperties::clearControls() { - m_productionControls = 0; - } - - void Well::WellProductionProperties::setBHPLimit(const double si_limit) { - this->bhp_hist_limit = si_limit; - } - - - Well::ProductionControls Well::WellProductionProperties::controls(const SummaryState& st, double udq_undef) const { - Well::ProductionControls controls(this->m_productionControls); - - controls.oil_rate = UDA::eval_well_uda(this->OilRate, this->name, st, udq_undef); - controls.water_rate = UDA::eval_well_uda(this->WaterRate, this->name, st, udq_undef); - controls.gas_rate = UDA::eval_well_uda(this->GasRate, this->name, st, udq_undef); - controls.liquid_rate = UDA::eval_well_uda(this->LiquidRate, this->name, st, udq_undef); - controls.resv_rate = UDA::eval_well_uda(this->ResVRate, this->name, st, udq_undef); - - if (this->predictionMode) { - controls.bhp_limit = UDA::eval_well_uda(this->BHPTarget, this->name, st, udq_undef); - controls.thp_limit = UDA::eval_well_uda(this->THPTarget, this->name, st, udq_undef); - } else { - controls.bhp_limit = this->bhp_hist_limit; - controls.thp_limit = this->thp_hist_limit; - } - - controls.bhp_history = this->BHPH; - controls.thp_history = this->THPH; - controls.vfp_table_number = this->VFPTableNumber; - controls.alq_value = this->ALQValue; - controls.cmode = this->controlMode; - - return controls; - } - - bool Well::WellProductionProperties::updateUDQActive(const UDQConfig& udq_config, UDQActive& active) const { - int update_count = 0; - - update_count += active.update(udq_config, this->OilRate, this->name, UDAControl::WCONPROD_ORAT); - update_count += active.update(udq_config, this->WaterRate, this->name, UDAControl::WCONPROD_WRAT); - update_count += active.update(udq_config, this->GasRate, this->name, UDAControl::WCONPROD_GRAT); - update_count += active.update(udq_config, this->LiquidRate, this->name, UDAControl::WCONPROD_LRAT); - update_count += active.update(udq_config, this->ResVRate, this->name, UDAControl::WCONPROD_RESV); - update_count += active.update(udq_config, this->BHPTarget, this->name, UDAControl::WCONPROD_BHP); - update_count += active.update(udq_config, this->THPTarget, this->name, UDAControl::WCONPROD_THP); - - return (update_count > 0); - } - -} // namespace Opm diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Well/WellTestConfig.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Well/WellTestConfig.cpp deleted file mode 100644 index ee35c05dcc..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Well/WellTestConfig.cpp +++ /dev/null @@ -1,166 +0,0 @@ -/* - Copyright 2018 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ -#include -#include - -#include - -namespace Opm { - - -WellTestConfig::WellTestConfig() { - -} - - -WellTestConfig WellTestConfig::serializeObject() -{ - WellTestConfig result; - result.wells = {{"test", ECONOMIC, 1.0, 2, 3.0, 4}}; - - return result; -} - - -void WellTestConfig::add_well(const std::string& well, Reason shut_reason, double test_interval, - int num_retries, double startup_time, const int current_step) { - - WTESTWell* well_ptr = getWell(well, shut_reason); - - if (well_ptr) { - *well_ptr = WTESTWell{well, shut_reason, test_interval, num_retries, startup_time, current_step}; - } else { - wells.push_back({well, shut_reason, test_interval, num_retries, startup_time, current_step}); - } -} - - -void WellTestConfig::add_well(const std::string& well, const std::string& reasons, double test_interval, - int num_retries, double startup_time, const int current_step) { - if (reasons.empty()) - throw std::invalid_argument("Can not pass empty string to stop testing to add_well() method."); - - for (auto c : reasons) { - switch(c) { - case 'P' : - add_well(well, Reason::PHYSICAL, test_interval, num_retries, startup_time, current_step); - break; - case 'E' : - add_well(well, Reason::ECONOMIC, test_interval, num_retries, startup_time, current_step); - break; - case 'G': - add_well(well, Reason::GROUP, test_interval, num_retries, startup_time, current_step); - break; - case 'D': - add_well(well, Reason::THP_DESIGN, test_interval, num_retries, startup_time, current_step); - break; - case 'C': - add_well(well, Reason::COMPLETION, test_interval, num_retries, startup_time, current_step); - break; - default: - throw std::invalid_argument("Invalid character in WTEST configuration"); - } - } -} - - -void WellTestConfig::drop_well(const std::string& well) { - wells.erase(std::remove_if(wells.begin(), - wells.end(), - [&well](const WTESTWell& wtest_well) { return (wtest_well.name == well); }), - wells.end()); -} - -bool WellTestConfig::has(const std::string& well) const { - const auto well_iter = std::find_if(wells.begin(), - wells.end(), - [&well](const WTESTWell& wtest_well) { return (wtest_well.name == well); }); - return (well_iter != wells.end()); -} - - -bool WellTestConfig::has(const std::string& well, Reason reason) const { - const auto well_iter = std::find_if(wells.begin(), - wells.end(), - [&well, &reason](const WTESTWell& wtest_well) - { - return (reason == wtest_well.shut_reason && wtest_well.name == well); - }); - return (well_iter != wells.end()); -} - - -const WellTestConfig::WTESTWell& WellTestConfig::get(const std::string& well, Reason reason) const { - const auto well_iter = std::find_if(wells.begin(), - wells.end(), - [&well, &reason](const WTESTWell& wtest_well) - { - return (reason == wtest_well.shut_reason && wtest_well.name == well); - }); - if (well_iter == wells.end()) - throw std::invalid_argument("No such WTEST object"); - - return *well_iter; -} - - - -std::string WellTestConfig::reasonToString(const Reason reason) { - switch(reason) { - case PHYSICAL: - return std::string("PHYSICAL"); - case ECONOMIC: - return std::string("ECONOMIC"); - case GROUP: - return std::string("GROUP"); - case THP_DESIGN: - return std::string("THP_DESIGN"); - case COMPLETION: - return std::string("COMPLETION"); - default: - throw std::runtime_error("unknown closure reason"); - } -} - - - -WellTestConfig::WTESTWell* WellTestConfig::getWell(const std::string& well_name, const Reason reason) { - const auto well_iter = std::find_if(wells.begin(), wells.end(), [&well_name, &reason](const WTESTWell& well) { - return (reason == well.shut_reason && well.name == well_name); - }); - - return (well_iter == wells.end() ? nullptr : std::addressof(*well_iter) ); -} - - - -size_t WellTestConfig::size() const { - return wells.size(); -} - - -bool WellTestConfig::operator==(const WellTestConfig& data) const { - return this->wells == data.wells; -} - - - -} - - diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Well/WellTestState.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Well/WellTestState.cpp deleted file mode 100644 index 0785161b60..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Well/WellTestState.cpp +++ /dev/null @@ -1,237 +0,0 @@ -/* - Copyright 2018 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ -#include -#include - -#include -#include -#include -#include - -namespace Opm { - - void WellTestState::closeWell(const std::string& well_name, WellTestConfig::Reason reason, double sim_time) { - - WTestWell* well_ptr = getWell(well_name, reason); - - if (well_ptr) { - if (well_ptr->closed) { - throw std::runtime_error( " Well " + well_name + " is closed with reason " - + WellTestConfig::reasonToString(reason) - + ", we are trying to close it again with same reason!"); - } - // the well exists already, we just update it with action of closing - well_ptr->closed = true; - well_ptr->last_test = sim_time; - } else { - // by default, we use -1 if there is no WTEST request for this well - // it will be updated when checking for WellTestConfig - this->wells.push_back({well_name, reason, true, sim_time, 0, -1}); - } - } - - - void WellTestState::openWell(const std::string& well_name, WellTestConfig::Reason reason) { - - WTestWell* well_ptr = getWell(well_name, reason); - - if (well_ptr) - well_ptr->closed = false; - else - throw std::runtime_error("No well named " + well_name + " with close reason " - + WellTestConfig::reasonToString(reason) - + " found in WellTestState."); - } - - - void WellTestState::openWell(const std::string& well_name) { - for (auto& well : wells) - if (well.name == well_name) - well.closed = false; - } - - bool WellTestState::hasWellClosed(const std::string& well_name) const { - for (const auto& well : wells) - if (well.name == well_name && well.closed) - return true; - - return false; - } - - - bool WellTestState::hasWellClosed(const std::string& well_name, WellTestConfig::Reason reason) const { - const auto well_iter = std::find_if(wells.begin(), - wells.end(), - [&well_name, &reason](const WTestWell& well) - { - return (reason == well.reason && well.name == well_name && well.closed); - }); - return (well_iter != wells.end()); - } - - - WellTestState::WTestWell* WellTestState::getWell(const std::string& well_name, WellTestConfig::Reason reason) - { - const auto well_iter = std::find_if(wells.begin(), wells.end(), [&well_name, &reason](const WTestWell& well) { - return (reason == well.reason && well.name == well_name); - }); - - return (well_iter == wells.end() ? nullptr : std::addressof(*well_iter) ); - } - - - size_t WellTestState::sizeWells() const { - return this->wells.size(); - } - - std::vector> - WellTestState::updateWells(const WellTestConfig& config, - const std::vector& wells_ecl, - double sim_time) { - std::vector> output; - - updateForNewWTEST(config); - - for (auto& well : this->wells) { - auto well_ecl = std::find_if(wells_ecl.begin(), wells_ecl.end(), - [&well](const Well& w) - { - return w.name() == well.name; - }); - - if (well_ecl == wells_ecl.end()) - throw std::runtime_error("No well named " + well.name + " is found in wells_ecl."); - - // if the well is SHUT, we do not consider to test it - if (well_ecl->getStatus() != Well::Status::OPEN) - continue; - - if (well.closed && config.has(well.name, well.reason)) { - const auto& well_config = config.get(well.name, well.reason); - double elapsed = sim_time - well.last_test; - - if (elapsed >= well_config.test_interval) - if (well_config.num_test == 0 || (well.num_attempt < well_config.num_test)) { - well.last_test = sim_time; - well.num_attempt ++; - output.emplace_back(std::make_pair(well.name, well.reason)); - if ( (well_config.num_test != 0) && (well.num_attempt >= well_config.num_test) ) { - OpmLog::info(well.name + " will be tested for " + WellTestConfig::reasonToString(well.reason) - + " reason for the last time! " ); - } - } - } - } - return output; - } - - - void WellTestState::addClosedCompletion(const std::string& well_name, int complnum, double sim_time) { - if (this->hasCompletion(well_name, complnum)) - return; - - this->completions.push_back( {well_name, complnum, sim_time, 0} ); - } - - - void WellTestState::dropCompletion(const std::string& well_name, int complnum) { - completions.erase(std::remove_if(completions.begin(), - completions.end(), - [&well_name, complnum](const ClosedCompletion& completion) { return (completion.wellName == well_name && completion.complnum == complnum); }), - completions.end()); - } - - - bool WellTestState::hasCompletion(const std::string& well_name, const int complnum) const { - const auto completion_iter = std::find_if(completions.begin(), - completions.end(), - [&well_name, &complnum](const ClosedCompletion& completion) - { - return (complnum == completion.complnum && completion.wellName == well_name); - }); - return (completion_iter != completions.end()); - } - - size_t WellTestState::sizeCompletions() const { - return this->completions.size(); - } - - std::vector> WellTestState::updateCompletion(const WellTestConfig& config, double sim_time) { - std::vector> output; - for (auto& closed_completion : this->completions) { - if (config.has(closed_completion.wellName, WellTestConfig::Reason::COMPLETION)) { - const auto& well_config = config.get(closed_completion.wellName, WellTestConfig::Reason::COMPLETION); - double elapsed = sim_time - closed_completion.last_test; - - if (elapsed >= well_config.test_interval) - if (well_config.num_test == 0 || (closed_completion.num_attempt < well_config.num_test)) { - closed_completion.last_test = sim_time; - closed_completion.num_attempt += 1; - output.push_back(std::make_pair(closed_completion.wellName, closed_completion.complnum)); - } - } - } - return output; - } - - double WellTestState::lastTestTime(const std::string& well_name) const { - const auto well_iter = std::find_if(wells.begin(), - wells.end(), - [&well_name](const WTestWell& well) - { - return (well.name == well_name); - }); - if (well_iter == wells.end()) - throw std::runtime_error("No well named " + well_name + " is found in WellTestState."); - - return well_iter->last_test; - } - - void WellTestState::updateForNewWTEST(const Opm::WellTestConfig& config) - { - // check whether to reset based on the new WTEST request - for (auto& well: this->wells) { - if (config.has(well.name, well.reason)) { - const auto& well_config = config.get(well.name, well.reason); - if (well_config.begin_report_step > well.wtest_report_step) { - // there is a new WTEST input, we should reset the counting - well.num_attempt = 0; - well.wtest_report_step = well_config.begin_report_step; - } - if (well_config.begin_report_step != well.wtest_report_step) - throw std::logic_error(" Bug in OPM/flow when using WTEST information related to well " + well.name); - - } else { - // If there is WTEST step, due to new WTEST input, which does not specify any testing closure cause, - // there is no WTEST request anymore. - // If there is no WTEST step, then everything stay the same. - if (well.wtest_report_step >= 0) { - well.wtest_report_step = -1; - well.num_attempt = 0; - } - if (well.wtest_report_step != -1 || well.num_attempt != 0) - throw std::logic_error(" Bugs in OPM/flow when there is WTEST request for well " + well.name); - - } - } - } - -} - - diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Well/WellTracerProperties.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Well/WellTracerProperties.cpp deleted file mode 100644 index 1b316430e9..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Well/WellTracerProperties.cpp +++ /dev/null @@ -1,58 +0,0 @@ -/* - Copyright 2018 NORCE. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ -#include - -#include -#include -#include - -namespace Opm { - - WellTracerProperties WellTracerProperties::serializeObject() - { - WellTracerProperties result; - result.m_tracerConcentrations = {{"test", 1.0}, {"test2", 2.0}}; - - return result; - } - - bool WellTracerProperties::operator==(const WellTracerProperties& other) const { - if (m_tracerConcentrations == other.m_tracerConcentrations) - return true; - else - return false; - - } - - void WellTracerProperties::setConcentration(const std::string& name, const double& concentration) { - m_tracerConcentrations[name] = concentration; - } - - double WellTracerProperties::getConcentration(const std::string& name) const { - auto it = m_tracerConcentrations.find(name); - if (it == m_tracerConcentrations.end()) - return 0.0; - return it->second; - } - - bool WellTracerProperties::operator!=(const WellTracerProperties& other) const { - return !(*this == other); - } - -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Well/injection.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Well/injection.cpp deleted file mode 100644 index 9ffc705d96..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Well/injection.cpp +++ /dev/null @@ -1,72 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifdef _WIN32 -#include "cross-platform/windows/Substitutes.hpp" -#else -#include -#endif - -#include - -#include -#include - -#include "injection.hpp" - -namespace Opm { -namespace injection { - - double rateToSI(double rawRate, InjectorType wellType, const Opm::UnitSystem &unitSystem) { - switch (wellType) { - case InjectorType::MULTI: - // multi-phase controlled injectors are a really funny - // construct in Eclipse: the quantity controlled for is - // not physically meaningful, i.e. Eclipse adds up - // MCFT/day and STB/day. - throw std::logic_error("There is no generic way to handle multi-phase injectors at this level!"); - - case InjectorType::OIL: - case InjectorType::WATER: - return unitSystem.to_si( UnitSystem::measure::liquid_surface_rate, rawRate ); - - case InjectorType::GAS: - return unitSystem.to_si( UnitSystem::measure::gas_surface_rate, rawRate ); - - default: - throw std::logic_error("Unknown injector type"); - } - } - - double rateToSI(double rawRate, Phase wellPhase, const Opm::UnitSystem& unitSystem) { - switch (wellPhase) { - case Phase::OIL: - case Phase::WATER: - return unitSystem.to_si( UnitSystem::measure::liquid_surface_rate, rawRate ); - - case Phase::GAS: - return unitSystem.to_si( UnitSystem::measure::gas_surface_rate, rawRate ); - - default: - throw std::logic_error("Unknown injection phase"); - } - } -} -} - diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Well/injection.hpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Well/injection.hpp deleted file mode 100644 index 39cc380186..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/Well/injection.hpp +++ /dev/null @@ -1,36 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef INJECTION_HPP -#define INJECTION_HPP - -#include -#include -#include - -namespace Opm { -namespace injection { - -double rateToSI(double rawRate, InjectorType wellType, const Opm::UnitSystem &unitSystem); -double rateToSI(double rawRate, Phase wellPhase, const Opm::UnitSystem& unitSystem); - -} -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/eval_uda.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/eval_uda.cpp deleted file mode 100644 index f902d3e19e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/eval_uda.cpp +++ /dev/null @@ -1,79 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - - -#include -#include -#include - -#include "Well/injection.hpp" -#include "eval_uda.hpp" - -namespace Opm { -namespace UDA { - - double eval_well_uda(const UDAValue& value, const std::string& well, const SummaryState& st, double udq_default) { - if (value.is()) - return value.getSI(); - - const std::string& string_var = value.get(); - double output_value = udq_default; - - if (st.has_well_var(well, value.get())) - output_value = st.get_well_var(well, string_var); - else if (st.has(string_var)) - output_value = st.get(string_var); - - // We do not handle negative rates. - output_value = std::max(0.0, output_value); - return value.get_dim().convertRawToSi(output_value); -} - - -double eval_well_uda_rate(const UDAValue& value, const std::string& well, const SummaryState& st, double udq_default, InjectorType wellType, const UnitSystem& unitSystem) { - double raw_rate = eval_well_uda(value, well, st, udq_default); - return injection::rateToSI(raw_rate, wellType, unitSystem); -} - - -double eval_group_uda(const UDAValue& value, const std::string& group, const SummaryState& st, double udq_undefined) { - if (value.is()) - return value.getSI(); - - const std::string& string_var = value.get(); - double output_value = udq_undefined; - - if (st.has_group_var(group, value.get())) - output_value = st.get_group_var(group, string_var); - else if (st.has(string_var)) - output_value = st.get(string_var); - - // We do not handle negative rates. - output_value = std::max(0.0, output_value); - return value.get_dim().convertRawToSi(output_value); -} - - -double eval_group_uda_rate(const UDAValue& value, const std::string& name, const SummaryState& st, double udq_undefined, Phase phase, const UnitSystem& unitSystem) { - double raw_rate = eval_group_uda(value, name, st, udq_undefined); - return injection::rateToSI(raw_rate, phase, unitSystem); -} - -} -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/eval_uda.hpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/eval_uda.hpp deleted file mode 100644 index b3c25a83f3..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Schedule/eval_uda.hpp +++ /dev/null @@ -1,45 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef WELL_UDA_HPP -#define WELL_UDA_HPP - -#include - -#include -#include - -namespace Opm { -class UDAvalue; -class SummaryState; -class UnitSystem; - -namespace UDA { - - double eval_well_uda(const UDAValue& value, const std::string& name, const SummaryState& st, double udq_undefined); - double eval_well_uda_rate(const UDAValue& value, const std::string& name, const SummaryState& st, double udq_undefined, InjectorType wellType, const UnitSystem& unitSystem); - - double eval_group_uda(const UDAValue& value, const std::string& name, const SummaryState& st, double udq_undefined); - double eval_group_uda_rate(const UDAValue& value, const std::string& name, const SummaryState& st, double udq_undefined, Phase phase, const UnitSystem& unitSystem); -} - -} - - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/SimulationConfig/BCConfig.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/SimulationConfig/BCConfig.cpp deleted file mode 100644 index 08a75421af..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/SimulationConfig/BCConfig.cpp +++ /dev/null @@ -1,149 +0,0 @@ -/* - Copyright 2020 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. -*/ - -#include - -#include -#include -#include - -namespace Opm { -namespace { - -namespace fromstring { - -BCType bctype(const std::string& s) { - if (s == "RATE") - return BCType::RATE; - - if (s == "FREE") - return BCType::FREE; - - throw std::invalid_argument("Not recognized boundary condition type: " + s); -} - - -BCComponent component(const std::string& s) { - if (s == "OIL") - return BCComponent::OIL; - - if (s == "GAS") - return BCComponent::GAS; - - if (s == "WATER") - return BCComponent::WATER; - - if (s == "SOLVENT") - return BCComponent::SOLVENT; - - if (s == "POLYMER") - return BCComponent::POLYMER; - - if (s == "NONE") - return BCComponent::NONE; - - throw std::invalid_argument("Not recognized boundary condition compononet: " + s); -} - -} -} - -BCConfig::BCFace::BCFace(const DeckRecord& record) : - i1(record.getItem("I1").get(0) - 1), - i2(record.getItem("I2").get(0) - 1), - j1(record.getItem("J1").get(0) - 1), - j2(record.getItem("J2").get(0) - 1), - k1(record.getItem("K1").get(0) - 1), - k2(record.getItem("K2").get(0) - 1), - bctype(fromstring::bctype(record.getItem("TYPE").get(0))), - dir(FaceDir::FromString(record.getItem("DIRECTION").get(0))), - component(fromstring::component(record.getItem("COMPONENT").get(0))), - rate(record.getItem("RATE").getSIDouble(0)) -{ -} - -BCConfig::BCFace BCConfig::BCFace::serializeObject() -{ - BCFace result; - result.i1 = 10; - result.i2 = 11; - result.j1 = 12; - result.j2 = 13; - result.k1 = 14; - result.k2 = 15; - result.bctype = BCType::RATE; - result.dir = FaceDir::XPlus; - result.component = BCComponent::GAS; - result.rate = 100.0; - - return result; -} - - -bool BCConfig::BCFace::operator==(const BCConfig::BCFace& other) const { - return this->i1 == other.i1 && - this->i2 == other.i2 && - this->j1 == other.j1 && - this->j2 == other.j2 && - this->k1 == other.k1 && - this->k2 == other.k2 && - this->bctype == other.bctype && - this->dir == other.dir && - this->component == other.component && - this->rate == other.rate; -} - - - -BCConfig::BCConfig(const Deck& deck) { - for (const auto& kw: deck.getKeywordList()) { - for (const auto& record : *kw) - this->m_faces.emplace_back( record ); - } -} - - -BCConfig BCConfig::serializeObject() -{ - BCConfig result; - result.m_faces = {BCFace::serializeObject()}; - - return result; -} - - -std::size_t BCConfig::size() const { - return this->m_faces.size(); -} - -std::vector::const_iterator BCConfig::begin() const { - return this->m_faces.begin(); -} - -std::vector::const_iterator BCConfig::end() const { - return this->m_faces.end(); -} - -bool BCConfig::operator==(const BCConfig& other) const { - return this->m_faces == other.m_faces; -} - - -} //namespace Opm - diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/SimulationConfig/RockConfig.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/SimulationConfig/RockConfig.cpp deleted file mode 100644 index c79d52462f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/SimulationConfig/RockConfig.cpp +++ /dev/null @@ -1,159 +0,0 @@ -/* - Copyright 2020 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include - -#include -#include -#include -#include - -namespace Opm { - -namespace { - - - -std::string num_prop(const std::string& prop_name) { - static const std::unordered_set prop_names = {"PVTNUM", "SATNUM", "ROCKNUM"}; - if (prop_names.count(prop_name) == 1) - return prop_name; - - throw std::invalid_argument("The rocknum propertype: " + prop_name + " is not valid"); -} - - -RockConfig::Hysteresis hysteresis(const std::string& s) { - if (s == "REVERS") - return RockConfig::Hysteresis::REVERS; - - if (s == "IRREVERS") - return RockConfig::Hysteresis::IRREVERS; - - if (s == "HYSTER") - return RockConfig::Hysteresis::HYSTER; - - if (s == "BOBERG") - return RockConfig::Hysteresis::BOBERG; - - if (s == "REVLIMIT") - return RockConfig::Hysteresis::REVLIMIT; - - if (s == "PALM-MAN") - return RockConfig::Hysteresis::PALM_MAN; - - if (s == "NONE") - return RockConfig::Hysteresis::NONE; - - throw std::invalid_argument("Not recognized hysteresis option: " + s); -} - -} - - -bool RockConfig::RockComp::operator==(const RockConfig::RockComp& other) const { - return this->pref == other.pref && - this->compressibility == other.compressibility; -} - -RockConfig::RockComp::RockComp(double pref_arg, double comp_arg) : - pref(pref_arg), - compressibility(comp_arg) -{} - -RockConfig RockConfig::serializeObject() -{ - RockConfig result; - result.m_active = true; - result.m_comp = {{100, 0.25}, {200, 0.30}}; - result.num_property = "ROCKNUM"; - result.num_tables = 10; - result.m_water_compaction = false; - result.hyst_mode = Hysteresis::HYSTER; - - return result; -} - -bool RockConfig::water_compaction() const { - return this->m_water_compaction; -} - -const std::vector& RockConfig::comp() const { - return this->m_comp; -} - -std::size_t RockConfig::num_rock_tables() const { - return this->num_tables; -} - -const std::string& RockConfig::rocknum_property() const { - return this->num_property; -} - -RockConfig::Hysteresis RockConfig::hysteresis_mode() const { - return this->hyst_mode; -} - -bool RockConfig::active() const { - return this->m_active; -} - -RockConfig::RockConfig(const Deck& deck, const FieldPropsManager& fp) -{ - using rock = ParserKeywords::ROCK; - using rockopts = ParserKeywords::ROCKOPTS; - using rockcomp = ParserKeywords::ROCKCOMP; - if (deck.hasKeyword()) { - const auto& rock_kw = deck.getKeyword(); - for (const auto& record : rock_kw) - this->m_comp.emplace_back( record.getItem().getSIDouble(0), - record.getItem().getSIDouble(0)); - } - - if (deck.hasKeyword()) { - const auto& record = deck.getKeyword().getRecord(0); - this->num_property = num_prop( record.getItem().getTrimmedString(0) ); - } - - if (deck.hasKeyword()) { - const auto& record = deck.getKeyword().getRecord(0); - if (fp.has_int("ROCKNUM")) - this->num_property = "ROCKNUM"; - - this->num_tables = record.getItem().get(0); - this->hyst_mode = hysteresis(record.getItem().getTrimmedString(0)); - this->m_water_compaction = DeckItem::to_bool(record.getItem().getTrimmedString(0)); - - this->m_active = true; - if (this->hyst_mode == Hysteresis::NONE && !this->m_water_compaction) - this->m_active = false; - } -} - - -bool RockConfig::operator==(const RockConfig& other) const { - return this->num_property == other.num_property && - this->m_comp == other.m_comp && - this->num_tables == other.num_tables && - this->m_active == other.m_active && - this->m_water_compaction == other.m_water_compaction && - this->hyst_mode == other.hyst_mode; -} - -} //namespace Opm diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/SimulationConfig/SimulationConfig.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/SimulationConfig/SimulationConfig.cpp deleted file mode 100644 index 2b7693cc16..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/SimulationConfig/SimulationConfig.cpp +++ /dev/null @@ -1,146 +0,0 @@ -/* - Copyright 2015 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - - - -/* - The internalization of the CPR keyword has been temporarily - disabled, suddenly decks with 'CPR' in the summary section turned - up. Keywords with section aware keyword semantics is currently not - handled by the parser. - - When the CPR is added again the following keyword configuration must - be added: - - {"name" : "CPR" , "sections" : ["RUNSPEC"], "size": 1 } - -*/ - - -namespace Opm { - - SimulationConfig::SimulationConfig() : - m_useCPR(false), - m_DISGAS(false), - m_VAPOIL(false), - m_isThermal(false) - { - } - - SimulationConfig::SimulationConfig(bool restart, - const Deck& deck, - const FieldPropsManager& fp) : - m_ThresholdPressure( restart, deck, fp), - m_bcconfig(deck), - m_rock_config(deck, fp), - m_useCPR(false), - m_DISGAS(false), - m_VAPOIL(false), - m_isThermal(false) - { - if (DeckSection::hasRUNSPEC(deck)) { - const RUNSPECSection runspec(deck); - if (runspec.hasKeyword()) { - const auto& cpr = runspec.getKeyword(); - if (cpr.size() > 0) - throw std::invalid_argument("ERROR: In the RUNSPEC section the CPR keyword should EXACTLY one empty record."); - - m_useCPR = true; - } - if (runspec.hasKeyword()) { - m_DISGAS = true; - } - if (runspec.hasKeyword()) { - m_VAPOIL = true; - } - - this->m_isThermal = runspec.hasKeyword() - || runspec.hasKeyword(); - } - } - - SimulationConfig SimulationConfig::serializeObject() - { - SimulationConfig result; - result.m_ThresholdPressure = ThresholdPressure::serializeObject(); - result.m_bcconfig = BCConfig::serializeObject(); - result.m_rock_config = RockConfig::serializeObject(); - result.m_useCPR = false; - result.m_DISGAS = true; - result.m_VAPOIL = false; - result.m_isThermal = true; - - return result; - } - - const ThresholdPressure& SimulationConfig::getThresholdPressure() const { - return m_ThresholdPressure; - } - - const BCConfig& SimulationConfig::bcconfig() const { - return m_bcconfig; - } - - const RockConfig& SimulationConfig::rock_config() const { - return this->m_rock_config; - } - - bool SimulationConfig::useThresholdPressure() const { - return m_ThresholdPressure.active(); - } - - bool SimulationConfig::useCPR() const { - return m_useCPR; - } - - bool SimulationConfig::hasDISGAS() const { - return m_DISGAS; - } - - bool SimulationConfig::hasVAPOIL() const { - return m_VAPOIL; - } - - bool SimulationConfig::isThermal() const { - return this->m_isThermal; - } - - bool SimulationConfig::operator==(const SimulationConfig& data) const { - return this->getThresholdPressure() == data.getThresholdPressure() && - this->bcconfig() == data.bcconfig() && - this->rock_config() == data.rock_config() && - this->useCPR() == data.useCPR() && - this->hasDISGAS() == data.hasDISGAS() && - this->hasVAPOIL() == data.hasVAPOIL() && - this->isThermal() == data.isThermal(); - } - -} //namespace Opm diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/SimulationConfig/ThresholdPressure.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/SimulationConfig/ThresholdPressure.cpp deleted file mode 100644 index 5fae4d54dd..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/SimulationConfig/ThresholdPressure.cpp +++ /dev/null @@ -1,226 +0,0 @@ -/* - Copyright 2015 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -namespace Opm { - - ThresholdPressure::ThresholdPressure(bool restart, - const Deck& deck, - const FieldPropsManager& fp) : - m_active(false), - m_restart(restart) - { - - if( !DeckSection::hasRUNSPEC( deck ) || (!DeckSection::hasSOLUTION( deck ) && !DeckSection::hasGRID( deck )) ) - return; - - RUNSPECSection runspecSection( deck ); - SOLUTIONSection solutionSection( deck ); - GRIDSection gridSection( deck ); - - const bool thpresKeyword = solutionSection.hasKeyword(); - const bool thpresftKeyword = gridSection.hasKeyword(); - - //Is THPRES option set? - if( runspecSection.hasKeyword() ) { - const auto& eqlopts = runspecSection.getKeyword( ); - const auto& rec = eqlopts.getRecord(0); - for( const auto& item : rec ) { - if( !item.hasValue( 0 ) ) continue; - - const auto& opt = item.get< std::string >( 0 ); - if( opt == "IRREVERS" ) - throw std::runtime_error("Cannot use IRREVERS version of THPRES option, not implemented"); - - if( opt == "THPRES" ) - m_active = true; - } - } - - /* - When performing a restart in Eclipse the solution section must be - updated, and in particuar the THPRES keyword should be removed. The - THPRES values should be read from the restart file instead. To ensure - that reservoir engineers can follow the same file-manipulation - workflow they are used to when running Eclipse we accept a deck - without THPRES and just assume it will come from the restart file at a - later stage. - - If this is a restart AND the deck still contains the THPRES values - they will be loaded from the deck, but quite probably - the simulator - will ignore the deck initialized values and just use the values from - the restart file. - */ - - if( m_active && !thpresKeyword && !thpresftKeyword ) { - if (!m_restart) - throw std::runtime_error("Invalid solution or grid sections: " - "The EQLOPTS THPRES option is set in RUNSPEC, " - "but neither the THPRES keyword is found in the SOLUTION " - "section nor the THPRESFT keyword in the GRID section." ); - } - - - //Option is set and keyword is found - if( m_active && thpresKeyword ) { - if (!fp.has_int("EQLNUM")) - throw std::runtime_error("Error when internalizing THPRES: EQLNUM keyword not found in deck"); - - const auto& eqlnum = fp.get_int("EQLNUM"); - - //Find max of eqlnum - int maxEqlnum = *std::max_element(eqlnum.begin(), eqlnum.end()); - - if (0 == maxEqlnum) { - throw std::runtime_error("Error in EQLNUM data: all values are 0"); - } - - - // Fill threshold pressure table. - const auto& thpres = solutionSection.getKeyword( ); - - for( const auto& rec : thpres ) { - const auto& region1Item = rec.getItem(); - const auto& region2Item = rec.getItem(); - const auto& thpressItem = rec.getItem(); - - if( !region1Item.hasValue( 0 ) || !region2Item.hasValue( 0 ) ) - throw std::runtime_error("Missing region data for use of the THPRES keyword"); - - const int r1 = region1Item.get< int >(0); - const int r2 = region2Item.get< int >(0); - if (r1 > maxEqlnum || r2 > maxEqlnum) { - OpmLog::warning("The THPRES region values: " + std::to_string(r1) + " and " + std::to_string(r2) + " are not compatible with EQLNUM: 1.." + std::to_string(maxEqlnum) + " ignored"); - continue; - } - - if (thpressItem.hasValue(0)) - addBarrier( r1 , r2 , thpressItem.getSIDouble( 0 ) ); - else - addBarrier( r1 , r2 ); - } - } - } - - ThresholdPressure ThresholdPressure::serializeObject() - { - ThresholdPressure result; - result.m_active = false; - result.m_restart = true; - result.m_thresholdPressureTable = {{true, 1.0}, {false, 2.0}}; - result.m_pressureTable = {{{1,2},{false,3.0}},{{2,3},{true,4.0}}}; - return result; - } - - bool ThresholdPressure::hasRegionBarrier(int r1 , int r2) const { - std::pair indexPair = makeIndex(r1,r2); - if (m_pressureTable.find( indexPair ) == m_pressureTable.end()) - return false; - else - return true; - } - - - double ThresholdPressure::getThresholdPressure(int r1 , int r2) const { - std::pair indexPair = makeIndex(r1,r2); - auto iter = m_pressureTable.find( indexPair ); - if (iter == m_pressureTable.end()) - return 0.0; - else { - auto pair_pair = *iter; - auto value_pair = pair_pair.second; - bool valid = value_pair.first; - double value = value_pair.second; - if (valid) - return value; - else { - std::string msg = "The THPRES value for regions " + std::to_string(r1) + " and " + std::to_string(r2) + " has not been initialized. Using 0.0"; - throw std::invalid_argument(msg); - return 0; - } - } - - - } - - - std::pair ThresholdPressure::makeIndex(int r1 , int r2) { - if (r1 < r2) - return std::make_pair(r1,r2); - else - return std::make_pair(r2,r1); - } - - void ThresholdPressure::addPair(int r1 , int r2 , const std::pair& valuePair) { - std::pair indexPair = makeIndex(r1,r2); - m_pressureTable[indexPair] = valuePair; - } - - void ThresholdPressure::addBarrier(int r1 , int r2 , double p) { - std::pair valuePair = std::make_pair(true , p); - addPair( r1,r2, valuePair ); - } - - void ThresholdPressure::addBarrier(int r1 , int r2) { - std::pair valuePair = std::make_pair(false , 0); - addPair( r1,r2, valuePair ); - } - - size_t ThresholdPressure::size() const { - return m_pressureTable.size(); - } - - bool ThresholdPressure::active() const { - return m_active; - } - - bool ThresholdPressure::restart() const { - return m_restart; - } - - bool ThresholdPressure::hasThresholdPressure(int r1 , int r2) const { - std::pair indexPair = makeIndex(r1,r2); - auto iter = m_pressureTable.find( indexPair ); - if (iter == m_pressureTable.end()) - return false; - else { - auto pair_pair = *iter; - auto value_pair = pair_pair.second; - return value_pair.first; - } - } - - bool ThresholdPressure::operator==(const ThresholdPressure& data) const { - return this->active() == data.active() && - this->restart() == data.restart() && - this->m_thresholdPressureTable == data.m_thresholdPressureTable && - this->m_pressureTable == data.m_pressureTable; - } - - -} //namespace Opm diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/SummaryConfig/SummaryConfig.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/SummaryConfig/SummaryConfig.cpp deleted file mode 100644 index a02e360a02..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/SummaryConfig/SummaryConfig.cpp +++ /dev/null @@ -1,1178 +0,0 @@ -/* - Copyright 2016 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ -#include -#include -#include -#include - -#include -#include - -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - - -namespace Opm { - -namespace { - - const std::vector ALL_keywords = { - "FAQR", "FAQRG", "FAQT", "FAQTG", "FGIP", "FGIPG", "FGIPL", - "FGIR", "FGIT", "FGOR", "FGPR", "FGPT", "FOIP", "FOIPG", - "FOIPL", "FOIR", "FOIT", "FOPR", "FOPT", "FPR", "FVIR", - "FVIT", "FVPR", "FVPT", "FWCT", "FWGR", "FWIP", "FWIR", - "FWIT", "FWPR", "FWPT", - "GGIR", "GGIT", "GGOR", "GGPR", "GGPT", "GOIR", "GOIT", - "GOPR", "GOPT", "GVIR", "GVIT", "GVPR", "GVPT", "GWCT", - "GWGR", "GWIR", "GWIT", "GWPR", "GWPT", - "WBHP", "WGIR", "WGIT", "WGOR", "WGPR", "WGPT", "WOIR", - "WOIT", "WOPR", "WOPT", "WPI", "WTHP", "WVIR", "WVIT", - "WVPR", "WVPT", "WWCT", "WWGR", "WWIR", "WWIT", "WWPR", - "WWPT", - // ALL will not expand to these keywords yet - "AAQR", "AAQRG", "AAQT", "AAQTG" - }; - - const std::vector GMWSET_keywords = { - "GMCTG", "GMWPT", "GMWPR", "GMWPA", "GMWPU", "GMWPG", "GMWPO", "GMWPS", - "GMWPV", "GMWPP", "GMWPL", "GMWIT", "GMWIN", "GMWIA", "GMWIU", "GMWIG", - "GMWIS", "GMWIV", "GMWIP", "GMWDR", "GMWDT", "GMWWO", "GMWWT" - }; - - const std::vector FMWSET_keywords = { - "FMCTF", "FMWPT", "FMWPR", "FMWPA", "FMWPU", "FMWPF", "FMWPO", "FMWPS", - "FMWPV", "FMWPP", "FMWPL", "FMWIT", "FMWIN", "FMWIA", "FMWIU", "FMWIF", - "FMWIS", "FMWIV", "FMWIP", "FMWDR", "FMWDT", "FMWWO", "FMWWT" - }; - - - const std::vector PERFORMA_keywords = { - "TCPU", "ELAPSED","NEWTON","NLINEARS","NLINSMIN", "NLINSMAX","MLINEARS", - "MSUMLINS","MSUMNEWT","TIMESTEP","TCPUTS","TCPUDAY","STEPTYPE","TELAPLIN" - }; - - const std::vector DATE_keywords = { - "DAY", "MONTH", "YEAR" - }; - - - /* - The variable type 'ECL_SMSPEC_MISC_TYPE' is a catch-all variable - type, and will by default internalize keywords like 'ALL' and - 'PERFORMA', where only the keywords in the expanded list should - be included. - */ - const std::map> meta_keywords = {{"PERFORMA", PERFORMA_keywords}, - {"DATE", DATE_keywords}, - {"ALL", ALL_keywords}, - {"FMWSET", FMWSET_keywords}, - {"GMWSET", GMWSET_keywords}}; - - /* - This is a hardcoded mapping between 3D field keywords, - e.g. 'PRESSURE' and 'SWAT' and summary keywords like 'RPR' and - 'BPR'. The purpose of this mapping is to maintain an overview of - which 3D field keywords are needed by the Summary calculation - machinery, based on which summary keywords are requested. The - Summary calculations are implemented in the opm-output - repository. - */ - const std::map> required_fields = { - {"PRESSURE", {"FPR" , "RPR" , "BPR"}}, - {"OIP" , {"ROIP" , "FOIP" , "FOE"}}, - {"OIPL" , {"ROIPL" ,"FOIPL" }}, - {"OIPG" , {"ROIPG" ,"FOIPG"}}, - {"GIP" , {"RGIP" , "FGIP"}}, - {"GIPL" , {"RGIPL" , "FGIPL"}}, - {"GIPG" , {"RGIPG", "FGIPG"}}, - {"WIP" , {"RWIP" , "FWIP"}}, - {"SWAT" , {"BSWAT"}}, - {"SGAS" , {"BSGAS"}} - }; - - using keyword_set = std::unordered_set; - - inline bool is_in_set(const keyword_set& set, const std::string& keyword) { - return set.find(keyword) != set.end(); - } - - bool is_special(const std::string& keyword) { - static const keyword_set specialkw { - "ELAPSED", - "MAXDPR", - "MAXDSG", - "MAXDSO", - "MAXDSW", - "NAIMFRAC", - "NEWTON", - "NLINEARS", - "NLINSMAX", - "NLINSMIN", - "STEPTYPE", - "WNEWTON", - }; - - return is_in_set(specialkw, keyword); - } - - bool is_udq_blacklist(const std::string& keyword) { - static const keyword_set udq_blacklistkw { - "SUMTHIN", - }; - - return is_in_set(udq_blacklistkw, keyword); - } - - bool is_processing_instruction(const std::string& keyword) { - static const keyword_set processing_instructionkw { - "NARROW", - "RPTONLY", - "RUNSUM", - "SEPARATE", - "SUMMARY", - }; - - return is_in_set(processing_instructionkw, keyword); - } - - bool is_udq(const std::string& keyword) { - // Does 'keyword' match one of the patterns - // AU*, BU*, CU*, FU*, GU*, RU*, SU*, or WU*? - using sz_t = std::string::size_type; - return (keyword.size() > sz_t{1}) - && (keyword[1] == 'U') - && !is_udq_blacklist(keyword) - && (keyword.find_first_of("WGFCRBSA") == sz_t{0}); - } - - bool is_pressure(const std::string& keyword) { - static const keyword_set presskw { - "BHP", "BHPH", "THP", "THPH", "PR", "PRD", "PRDH", "PRDF", "PRDA", - }; - - return is_in_set(presskw, keyword.substr(1)); - } - - bool is_rate(const std::string& keyword) { - static const keyword_set ratekw { - "OPR", "GPR", "WPR", "LPR", "NPR", "VPR", - "OPRH", "GPRH", "WPRH", "LPRH", - "OVPR", "GVPR", "WVPR", - "OPRS", "GPRS", "OPRF", "GPRF", - - "OIR", "GIR", "WIR", "LIR", "NIR", "VIR", - "OIRH", "GIRH", "WIRH", - "OVIR", "GVIR", "WVIR", - - "OPI", "OPP", "GPI", "GPP", "WPI", "WPP", - }; - - return is_in_set(ratekw, keyword.substr(1)); - } - - bool is_ratio(const std::string& keyword) { - static const keyword_set ratiokw { - "GLR", "GOR", "WCT", - "GLRH", "GORH", "WCTH", - }; - - return is_in_set(ratiokw, keyword.substr(1)); - } - - bool is_total(const std::string& keyword) { - static const keyword_set totalkw { - "OPT", "GPT", "WPT", "LPT", "NPT", - "VPT", "OVPT", "GVPT", "WVPT", - "WPTH", "OPTH", "GPTH", "LPTH", - "GPTS", "OPTS", "GPTF", "OPTF", - - "WIT", "OIT", "GIT", "LIT", "NIT", "CIT", "VIT", - "WITH", "OITH", "GITH", "WVIT", "OVIT", "GVIT", - }; - - return is_in_set(totalkw, keyword.substr(1)); - } - - bool is_count(const std::string& keyword) { - static const keyword_set countkw { - "MWIN", "MWIT", "MWPR", "MWPT" - }; - - return is_in_set(countkw, keyword); - } - - bool is_control_mode(const std::string& keyword) { - static const keyword_set countkw { - "MCTP", "MCTW", "MCTG" - }; - - return (keyword == "WMCTL") - || is_in_set(countkw, keyword.substr(1)); - } - - bool is_region_to_region(const std::string& keyword) { - using sz_t = std::string::size_type; - if ((keyword.size() == sz_t{3}) && keyword[2] == 'F') return true; - if ((keyword == "RNLF") || (keyword == "RORFR")) return true; - if ((keyword.size() >= sz_t{4}) && ((keyword[2] == 'F') && ((keyword[3] == 'T') || (keyword[3] == 'R')))) return true; - if ((keyword.size() >= sz_t{5}) && ((keyword[3] == 'F') && ((keyword[4] == 'T') || (keyword[4] == 'R')))) return true; - - return false; - } - - bool is_aquifer(const std::string& keyword) { - return keyword[0] == 'A'; - } - - SummaryConfigNode::Type parseKeywordType(const std::string& keyword) { - if (is_rate(keyword)) return SummaryConfigNode::Type::Rate; - if (is_total(keyword)) return SummaryConfigNode::Type::Total; - if (is_ratio(keyword)) return SummaryConfigNode::Type::Ratio; - if (is_pressure(keyword)) return SummaryConfigNode::Type::Pressure; - if (is_count(keyword)) return SummaryConfigNode::Type::Count; - if (is_control_mode(keyword)) return SummaryConfigNode::Type::Mode; - - return SummaryConfigNode::Type::Undefined; - } - -void handleMissingWell( const ParseContext& parseContext, ErrorGuard& errors, const std::string& keyword, const std::string& well) { - std::string msg = std::string("Error in keyword:") + keyword + std::string(" No such well: ") + well; - if (parseContext.get( ParseContext::SUMMARY_UNKNOWN_WELL) == InputError::WARN) - std::cerr << "ERROR: " << msg << std::endl; - - parseContext.handleError( ParseContext::SUMMARY_UNKNOWN_WELL , msg, errors ); -} - - -void handleMissingGroup( const ParseContext& parseContext , ErrorGuard& errors, const std::string& keyword, const std::string& group) { - std::string msg = std::string("Error in keyword:") + keyword + std::string(" No such group: ") + group; - if (parseContext.get( ParseContext::SUMMARY_UNKNOWN_GROUP) == InputError::WARN) - std::cerr << "ERROR: " << msg << std::endl; - - parseContext.handleError( ParseContext::SUMMARY_UNKNOWN_GROUP , msg, errors ); -} - - -inline void keywordW( SummaryConfig::keyword_list& list, - const std::vector& well_names, - SummaryConfigNode baseWellParam) { - for (const auto& wname : well_names) - list.push_back( baseWellParam.namedEntity(wname) ); -} - -inline void keywordW( SummaryConfig::keyword_list& list, - const std::string& keyword, - Location loc, - const Schedule& schedule) { - auto param = SummaryConfigNode { - keyword, SummaryConfigNode::Category::Well , std::move(loc) - } - .parameterType( parseKeywordType(keyword) ) - .isUserDefined( is_udq(keyword) ); - - keywordW( list, schedule.wellNames(), param ); -} - - -inline void keywordW( SummaryConfig::keyword_list& list, - const ParseContext& parseContext, - ErrorGuard& errors, - const DeckKeyword& keyword, - const Schedule& schedule ) { - /* - Two step check for whether to discard this keyword as unsupported: - - 1. Completion quantity keywords are currently not supported. These are - well summary keywords, apart from "WMCTL", that end in 'L'. - - 2. If the keyword is a UDQ keyword there is no convention enforced to - the last character, and in that case it is treated as a normal well - keyword anyways. - */ - if (keyword.name().back() == 'L') { - if (! (is_control_mode(keyword.name()) || is_udq(keyword.name()))) { - const auto& location = keyword.location(); - std::string msg = std::string("The completion keywords like: " + keyword.name() + " are not supported at: " + location.filename + ", line " + std::to_string(location.lineno)); - parseContext.handleError( ParseContext::SUMMARY_UNHANDLED_KEYWORD, msg, errors); - return; - } - } - - auto param = SummaryConfigNode { - keyword.name(), SummaryConfigNode::Category::Well, keyword.location() - } - .parameterType( parseKeywordType(keyword.name()) ) - .isUserDefined( is_udq(keyword.name()) ); - - if (keyword.size() && keyword.getDataRecord().getDataItem().hasValue(0)) { - for( const std::string& pattern : keyword.getStringData()) { - auto well_names = schedule.wellNames( pattern, schedule.size() - 1 ); - - if( well_names.empty() ) - handleMissingWell( parseContext, errors, keyword.name(), pattern ); - - keywordW( list, well_names, param ); - } - } else - keywordW( list, schedule.wellNames(), param ); -} - -inline void keywordG( SummaryConfig::keyword_list& list, - const std::string& keyword, - Location loc, - const Schedule& schedule ) { - auto param = SummaryConfigNode { - keyword, SummaryConfigNode::Category::Group, std::move(loc) - } - .parameterType( parseKeywordType(keyword) ) - .isUserDefined( is_udq(keyword) ); - - for( const auto& group : schedule.groupNames() ) { - if( group == "FIELD" ) continue; - list.push_back( param.namedEntity(group) ); - } -} - - -inline void keywordG( SummaryConfig::keyword_list& list, - const ParseContext& parseContext, - ErrorGuard& errors, - const DeckKeyword& keyword, - const Schedule& schedule ) { - - if( keyword.name() == "GMWSET" ) return; - - auto param = SummaryConfigNode { - keyword.name(), SummaryConfigNode::Category::Group, keyword.location() - } - .parameterType( parseKeywordType(keyword.name()) ) - .isUserDefined( is_udq(keyword.name()) ); - - if( keyword.size() == 0 || - !keyword.getDataRecord().getDataItem().hasValue( 0 ) ) { - - for( const auto& group : schedule.groupNames() ) { - if( group == "FIELD" ) continue; - list.push_back( param.namedEntity(group) ); - } - return; - } - - const auto& item = keyword.getDataRecord().getDataItem(); - - for( const std::string& group : item.getData< std::string >() ) { - if( schedule.hasGroup( group ) ) - list.push_back( param.namedEntity(group) ); - else - handleMissingGroup( parseContext, errors, keyword.name(), group ); - } -} - -inline void keywordF( SummaryConfig::keyword_list& list, - const std::string& keyword, - Location loc) { - auto param = SummaryConfigNode { - keyword, SummaryConfigNode::Category::Field, std::move(loc) - } - .parameterType( parseKeywordType(keyword) ) - .isUserDefined( is_udq(keyword) ); - - list.push_back( std::move(param) ); -} - -inline void keywordF( SummaryConfig::keyword_list& list, - const DeckKeyword& keyword ) { - if( keyword.name() == "FMWSET" ) return; - keywordF( list, keyword.name(), keyword.location() ); -} - -inline std::array< int, 3 > getijk( const DeckRecord& record, - int offset = 0 ) { - return {{ - record.getItem( offset + 0 ).get< int >( 0 ) - 1, - record.getItem( offset + 1 ).get< int >( 0 ) - 1, - record.getItem( offset + 2 ).get< int >( 0 ) - 1 - }}; -} - -inline std::array< int, 3 > getijk( const Connection& completion ) { - return { { completion.getI(), completion.getJ(), completion.getK() }}; -} - - -inline void keywordB( SummaryConfig::keyword_list& list, - const DeckKeyword& keyword, - const GridDims& dims) { - auto param = SummaryConfigNode { - keyword.name(), SummaryConfigNode::Category::Block, keyword.location() - } - .parameterType( parseKeywordType(keyword.name()) ) - .isUserDefined( is_udq(keyword.name()) ); - - for( const auto& record : keyword ) { - auto ijk = getijk( record ); - int global_index = 1 + dims.getGlobalIndex(ijk[0], ijk[1], ijk[2]); - list.push_back( param.number(global_index) ); - } -} - -inline void keywordR2R( SummaryConfig::keyword_list& /* list */, - const ParseContext& parseContext, - ErrorGuard& errors, - const DeckKeyword& keyword) -{ - const auto& location = keyword.location(); - std::string msg = "Region to region summary keyword: " + keyword.name() + " at " + location.filename + ", line " + std::to_string(location.lineno) + " is ignored"; - parseContext.handleError(ParseContext::SUMMARY_UNHANDLED_KEYWORD, msg, errors); -} - - - inline void keywordR( SummaryConfig::keyword_list& list, - const DeckKeyword& keyword, - const TableManager& tables, - const ParseContext& parseContext, - ErrorGuard& errors ) { - - if( is_region_to_region(keyword.name()) ) { - keywordR2R( list, parseContext, errors, keyword ); - return; - } - - const size_t numfip = tables.numFIPRegions( ); - const auto& item = keyword.getDataRecord().getDataItem(); - std::vector regions; - - if (item.data_size() > 0) - regions = item.getData< int >(); - else { - for (size_t region=1; region <= numfip; region++) - regions.push_back( region ); - } - - // Don't (currently) need parameter type for region keywords - auto param = SummaryConfigNode { - keyword.name(), SummaryConfigNode::Category::Region, keyword.location() - } - .isUserDefined( is_udq(keyword.name()) ); - - for( const int region : regions ) { - if (region >= 1 && region <= static_cast(numfip)) - list.push_back( param.number( region ) ); - else - throw std::invalid_argument("Illegal region value: " + std::to_string( region )); - } -} - - -inline void keywordMISC( SummaryConfig::keyword_list& list, - const std::string& keyword, - Location loc) -{ - if (meta_keywords.find(keyword) == meta_keywords.end()) - list.emplace_back( keyword, SummaryConfigNode::Category::Miscellaneous , std::move(loc)); -} - -inline void keywordMISC( SummaryConfig::keyword_list& list, - const DeckKeyword& keyword) -{ - keywordMISC(list, keyword.name(), keyword.location()); -} - - inline void keywordC( SummaryConfig::keyword_list& list, - const ParseContext& parseContext, - ErrorGuard& errors, - const DeckKeyword& keyword, - const Schedule& schedule, - const GridDims& dims) { - - auto param = SummaryConfigNode { - keyword.name(), SummaryConfigNode::Category::Connection, keyword.location() - } - .parameterType( parseKeywordType( keyword.name()) ) - .isUserDefined( is_udq(keyword.name()) ); - - for( const auto& record : keyword ) { - - const auto& wellitem = record.getItem( 0 ); - - const auto well_names = wellitem.defaultApplied( 0 ) - ? schedule.wellNames() - : schedule.wellNames( wellitem.getTrimmedString( 0 ) ); - const auto ijk_defaulted = record.getItem( 1 ).defaultApplied( 0 ); - - if( well_names.empty() ) - handleMissingWell( parseContext, errors, keyword.name(), wellitem.getTrimmedString( 0 ) ); - - for(const auto& name : well_names) { - param.namedEntity(name); - const auto& well = schedule.getWellatEnd(name); - /* - * we don't want to add completions that don't exist, so we iterate - * over a well's completions regardless of the desired block is - * defaulted or not - */ - for( const auto& connection : well.getConnections() ) { - auto cijk = getijk( connection ); - int global_index = 1 + dims.getGlobalIndex(cijk[0], cijk[1], cijk[2]); - - if( ijk_defaulted || ( cijk == getijk(record, 1) ) ) - list.push_back( param.number(global_index) ); - } - } - } -} - - bool isKnownSegmentKeyword(const DeckKeyword& keyword) - { - const auto& kw = keyword.name(); - - if (kw.size() > 5) { - // Easy check first--handles SUMMARY and SUMTHIN &c. - return false; - } - - const auto kw_whitelist = std::vector { - "SOFR", "SGFR", "SWFR", "SPR", "SPRD", "SPRDH", "SPRDF", "SPRDA", - }; - - return std::any_of(kw_whitelist.begin(), kw_whitelist.end(), - [&kw](const char* known) -> bool - { - return kw == known; - }); - } - - - int maxNumWellSegments(const std::size_t /* last_timestep */, - const Well& well) - { - return well.isMultiSegment() - ? well.getSegments().size() : 0; - } - - void makeSegmentNodes(const std::size_t last_timestep, - const int segID, - const DeckKeyword& keyword, - const Well& well, - SummaryConfig::keyword_list& list) - { - if (!well.isMultiSegment()) - // Not an MSW. Don't create summary vectors for segments. - return; - - auto param = SummaryConfigNode { - keyword.name(), SummaryConfigNode::Category::Segment, keyword.location() - } - .namedEntity( well.name() ) - .isUserDefined( is_udq(keyword.name()) ); - - if (segID < 1) { - // Segment number defaulted. Allocate a summary - // vector for each segment. - const auto nSeg = maxNumWellSegments(last_timestep, well); - - for (auto segNumber = 0*nSeg; segNumber < nSeg; ++segNumber) - list.push_back( param.number(segNumber + 1) ); - } - else - // Segment number specified. Allocate single - // summary vector for that segment number. - list.push_back( param.number(segID) ); - } - - void keywordSNoRecords(const std::size_t last_timestep, - const DeckKeyword& keyword, - const Schedule& schedule, - SummaryConfig::keyword_list& list) - { - // No keyword records. Allocate summary vectors for all - // segments in all wells at all times. - // - // Expected format: - // - // SGFR - // / -- All segments in all MS wells at all times. - - const auto segID = -1; - - for (const auto& well : schedule.getWellsatEnd()) - makeSegmentNodes(last_timestep, segID, keyword, - well, list); - } - - void keywordSWithRecords(const std::size_t last_timestep, - const ParseContext& parseContext, - ErrorGuard& errors, - const DeckKeyword& keyword, - const Schedule& schedule, - SummaryConfig::keyword_list& list) - { - // Keyword has explicit records. Process those and create - // segment-related summary vectors for those wells/segments - // that match the description. - // - // Expected formats: - // - // SOFR - // 'W1' 1 / - // 'W1' 10 / - // 'W3' / -- All segments - // / - // - // SPR - // 1* 2 / -- Segment 2 in all multi-segmented wells - // / - - for (const auto& record : keyword) { - const auto& wellitem = record.getItem(0); - const auto& well_names = wellitem.defaultApplied(0) - ? schedule.wellNames() - : schedule.wellNames(wellitem.getTrimmedString(0)); - - if (well_names.empty()) - handleMissingWell(parseContext, errors, keyword.name(), - wellitem.getTrimmedString(0)); - - // Negative 1 (< 0) if segment ID defaulted. Defaulted - // segment number in record implies all segments. - const auto segID = record.getItem(1).defaultApplied(0) - ? -1 : record.getItem(1).get(0); - - for (const auto& well_name : well_names) - makeSegmentNodes(last_timestep, segID, keyword, schedule.getWellatEnd(well_name), list); - } - } - - inline void keywordS(SummaryConfig::keyword_list& list, - const ParseContext& parseContext, - ErrorGuard& errors, - const DeckKeyword& keyword, - const Schedule& schedule) - { - // Generate SMSPEC nodes for SUMMARY keywords of the form - // - // SOFR - // 'W1' 1 / - // 'W1' 10 / - // 'W3' / -- All segments - // / - // - // SPR - // 1* 2 / -- Segment 2 in all multi-segmented wells - // / - // - // SGFR - // / -- All segments in all MS wells at all times. - - if (! isKnownSegmentKeyword(keyword)) { - // Ignore keywords that have not been explicitly white-listed - // for treatment as segment summary vectors. - return; - } - - const auto last_timestep = schedule.getTimeMap().last(); - - if (keyword.size() > 0) { - // Keyword with explicit records. - // Handle as alternatives SOFR and SPR above - keywordSWithRecords(last_timestep, parseContext, errors, - keyword, schedule, list); - } - else { - // Keyword with no explicit records. - // Handle as alternative SGFR above. - keywordSNoRecords(last_timestep, keyword, schedule, list); - } - } - - std::string to_string(const SummaryConfigNode::Category cat) { - switch( cat ) { - case SummaryConfigNode::Category::Aquifer: return "Aquifer"; - case SummaryConfigNode::Category::Well: return "Well"; - case SummaryConfigNode::Category::Group: return "Group"; - case SummaryConfigNode::Category::Field: return "Field"; - case SummaryConfigNode::Category::Region: return "Region"; - case SummaryConfigNode::Category::Block: return "Block"; - case SummaryConfigNode::Category::Connection: return "Connection"; - case SummaryConfigNode::Category::Segment: return "Segment"; - case SummaryConfigNode::Category::Miscellaneous: return "Miscellaneous"; - } - - throw std::invalid_argument { - "Unhandled Summary Parameter Category '" - + std::to_string(static_cast(cat)) + '\'' - }; - } - - void check_udq( const std::string& name, - const Schedule& schedule, - const ParseContext& parseContext, - ErrorGuard& errors ) { - if (! is_udq(name)) - // Nothing to do - return; - - const auto& udq = schedule.getUDQConfig(schedule.size() - 1); - - if (!udq.has_keyword(name)) { - std::string msg{"Summary output has been requested for UDQ keyword: " + name + " but it has not been configured"}; - parseContext.handleError(ParseContext::SUMMARY_UNDEFINED_UDQ, msg, errors); - return; - } - - if (!udq.has_unit(name)) { - std::string msg{"Summary output has been requested for UDQ keyword: " + name + " but no unit has not been configured"}; - parseContext.handleError(ParseContext::SUMMARY_UDQ_MISSING_UNIT, msg, errors); - } - } - - inline void handleKW( SummaryConfig::keyword_list& list, - const DeckKeyword& keyword, - const Schedule& schedule, - const TableManager& tables, - const ParseContext& parseContext, - ErrorGuard& errors, - const GridDims& dims) { - using Cat = SummaryConfigNode::Category; - - const auto& name = keyword.name(); - check_udq( name, schedule, parseContext, errors ); - - const auto cat = parseKeywordCategory( name ); - switch( cat ) { - case Cat::Well: return keywordW( list, parseContext, errors, keyword, schedule ); - case Cat::Group: return keywordG( list, parseContext, errors, keyword, schedule ); - case Cat::Field: return keywordF( list, keyword ); - case Cat::Block: return keywordB( list, keyword, dims ); - case Cat::Region: return keywordR( list, keyword, tables, parseContext, errors ); - case Cat::Connection: return keywordC( list, parseContext, errors, keyword, schedule, dims); - case Cat::Segment: return keywordS( list, parseContext, errors, keyword, schedule ); - case Cat::Miscellaneous: return keywordMISC( list, keyword ); - - default: - std::string msg = "Summary keywords of type: " + to_string( cat ) + " is not supported. Keyword: " + name + " is ignored"; - parseContext.handleError(ParseContext::SUMMARY_UNHANDLED_KEYWORD, msg, errors); - return; - } -} - - -inline void handleKW( SummaryConfig::keyword_list& list, - const std::string& keyword, - Location loc, - const Schedule& schedule, - const ParseContext& parseContext, - ErrorGuard& errors) { - - - if (is_udq(keyword)) - throw std::logic_error("UDQ keywords not handleded when expanding alias list"); - - if (is_aquifer( keyword )) { - std::string msg = "Summary keywords of type: Aquifer is not supported. Keyword: " + keyword + " is ignored"; - parseContext.handleError(ParseContext::SUMMARY_UNHANDLED_KEYWORD, msg, errors); - return; - } - - using Cat = SummaryConfigNode::Category; - const auto cat = parseKeywordCategory( keyword ); - - switch( cat ) { - case Cat::Well: return keywordW( list, keyword, std::move(loc), schedule ); - case Cat::Group: return keywordG( list, keyword, std::move(loc), schedule ); - case Cat::Field: return keywordF( list, keyword, std::move(loc) ); - case Cat::Miscellaneous: return keywordMISC( list, keyword, std::move(loc)); - - default: - throw std::logic_error("Keyword type: " + to_string( cat ) + " is not supported in alias lists. Internal error handling: " + keyword); - } -} - - - inline void uniq( SummaryConfig::keyword_list& vec ) { - std::sort( vec.begin(), vec.end() ); - auto logical_end = std::unique( vec.begin(), vec.end() ); - vec.erase( logical_end, vec.end() ); - } -} - -// ===================================================================== - -SummaryConfigNode::Category parseKeywordCategory(const std::string& keyword) { - using Cat = SummaryConfigNode::Category; - - if (is_special(keyword)) { return Cat::Miscellaneous; } - - switch (keyword[0]) { - case 'A': return Cat::Aquifer; - case 'W': return Cat::Well; - case 'G': return Cat::Group; - case 'F': return Cat::Field; - case 'C': return Cat::Connection; - case 'R': return Cat::Region; - case 'B': return Cat::Block; - case 'S': return Cat::Segment; - } - - // TCPU, MLINEARS, NEWTON, &c - return Cat::Miscellaneous; -} - - -SummaryConfigNode::SummaryConfigNode(std::string keyword, const Category cat, Location loc_arg) : - keyword_(std::move(keyword)), - category_(cat), - loc(std::move(loc_arg)) -{} - -SummaryConfigNode SummaryConfigNode::serializeObject() -{ - SummaryConfigNode result; - result.keyword_ = "test1"; - result.category_ = Category::Region; - result.loc = Location::serializeObject(); - result.type_ = Type::Pressure; - result.name_ = "test2"; - result.number_ = 2; - result.userDefined_ = true; - - return result; -} - -SummaryConfigNode& SummaryConfigNode::parameterType(const Type type) -{ - this->type_ = type; - return *this; -} - -SummaryConfigNode& SummaryConfigNode::namedEntity(std::string name) -{ - this->name_ = std::move(name); - return *this; -} - -SummaryConfigNode& SummaryConfigNode::number(const int num) -{ - this->number_ = num; - return *this; -} - -SummaryConfigNode& SummaryConfigNode::isUserDefined(const bool userDefined) -{ - this->userDefined_ = userDefined; - return *this; -} - -std::string SummaryConfigNode::uniqueNodeKey() const -{ - switch (this->category()) { - case SummaryConfigNode::Category::Well: [[fallthrough]]; - case SummaryConfigNode::Category::Group: - return this->keyword() + ':' + this->namedEntity(); - - case SummaryConfigNode::Category::Field: [[fallthrough]]; - case SummaryConfigNode::Category::Miscellaneous: - return this->keyword(); - - case SummaryConfigNode::Category::Aquifer: [[fallthrough]]; - case SummaryConfigNode::Category::Region: [[fallthrough]]; - case SummaryConfigNode::Category::Block: - return this->keyword() + ':' + std::to_string(this->number()); - - case SummaryConfigNode::Category::Connection: [[fallthrough]]; - case SummaryConfigNode::Category::Segment: - return this->keyword() + ':' + this->namedEntity() + ':' + std::to_string(this->number()); - } - - throw std::invalid_argument { - "Unhandled Summary Parameter Category '" - + to_string(this->category()) + '\'' - }; -} - -bool operator==(const SummaryConfigNode& lhs, const SummaryConfigNode& rhs) -{ - if (lhs.keyword() != rhs.keyword()) return false; - - assert (lhs.category() == rhs.category()); - - switch( lhs.category() ) { - case SummaryConfigNode::Category::Field: [[fallthrough]]; - case SummaryConfigNode::Category::Miscellaneous: - // Fully identified by keyword - return true; - - case SummaryConfigNode::Category::Well: [[fallthrough]]; - case SummaryConfigNode::Category::Group: - // Equal if associated to same named entity - return lhs.namedEntity() == rhs.namedEntity(); - - case SummaryConfigNode::Category::Aquifer: [[fallthrough]]; - case SummaryConfigNode::Category::Region: [[fallthrough]]; - case SummaryConfigNode::Category::Block: - // Equal if associated to same numeric entity - return lhs.number() == rhs.number(); - - case SummaryConfigNode::Category::Connection: [[fallthrough]]; - case SummaryConfigNode::Category::Segment: - // Equal if associated to same numeric - // sub-entity of same named entity - return (lhs.namedEntity() == rhs.namedEntity()) - && (lhs.number() == rhs.number()); - } - - return false; -} - -bool operator<(const SummaryConfigNode& lhs, const SummaryConfigNode& rhs) -{ - if (lhs.keyword() < rhs.keyword()) return true; - if (rhs.keyword() < lhs.keyword()) return false; - - // If we get here, the keyword are equal. - - switch( lhs.category() ) { - case SummaryConfigNode::Category::Field: [[fallthrough]]; - case SummaryConfigNode::Category::Miscellaneous: - // Fully identified by keyword. - // Return false for equal keywords. - return false; - - case SummaryConfigNode::Category::Well: [[fallthrough]]; - case SummaryConfigNode::Category::Group: - // Ordering determined by namedEntityd entity - return lhs.namedEntity() < rhs.namedEntity(); - - case SummaryConfigNode::Category::Aquifer: [[fallthrough]]; - case SummaryConfigNode::Category::Region: [[fallthrough]]; - case SummaryConfigNode::Category::Block: - // Ordering determined by numeric entity - return lhs.number() < rhs.number(); - - case SummaryConfigNode::Category::Connection: [[fallthrough]]; - case SummaryConfigNode::Category::Segment: - { - // Ordering determined by pair of namedEntity and numeric ID. - // - // Would ideally implement this in terms of operator< for - // std::tuple, with objects generated by std::tie(). - const auto& lnm = lhs.namedEntity(); - const auto& rnm = rhs.namedEntity(); - - return ( lnm < rnm) - || ((lnm == rnm) && (lhs.number() < rhs.number())); - } - } - - throw std::invalid_argument { - "Unhandled Summary Parameter Category '" + to_string(lhs.category()) + '\'' - }; -} - -// ===================================================================== - -SummaryConfig::SummaryConfig( const Deck& deck, - const Schedule& schedule, - const TableManager& tables, - const ParseContext& parseContext, - ErrorGuard& errors, - const GridDims& dims) { - SUMMARYSection section( deck ); - - for (const auto &kw : section) { - if (is_processing_instruction(kw.name())) { - handleProcessingInstruction(kw.name()); - } else { - handleKW( this->keywords, kw, schedule, tables, parseContext, errors, dims); - } - } - - for (const auto& meta_pair : meta_keywords) { - if( section.hasKeyword( meta_pair.first ) ) { - const auto& deck_keyword = section.getKeyword(meta_pair.first); - for (const auto& kw : meta_pair.second) { - if (!this->hasKeyword(kw)) - handleKW(this->keywords, kw, deck_keyword.location(), schedule, parseContext, errors); - } - } - } - - uniq( this->keywords ); - for (const auto& kw: this->keywords) { - this->short_keywords.insert( kw.keyword() ); - this->summary_keywords.insert( kw.uniqueNodeKey() ); - } -} - - - - -SummaryConfig::SummaryConfig( const Deck& deck, - const Schedule& schedule, - const TableManager& tables, - const ParseContext& parseContext, - ErrorGuard& errors) : - SummaryConfig( deck , schedule, tables, parseContext, errors, GridDims( deck )) -{ } - - -template -SummaryConfig::SummaryConfig( const Deck& deck, - const Schedule& schedule, - const TableManager& tables, - const ParseContext& parseContext, - T&& errors) : - SummaryConfig(deck, schedule, tables, parseContext, errors) -{} - - -SummaryConfig::SummaryConfig( const Deck& deck, - const Schedule& schedule, - const TableManager& tables) : - SummaryConfig(deck, schedule, tables, ParseContext(), ErrorGuard()) -{} - - -SummaryConfig::SummaryConfig(const keyword_list& kwds, - const std::set& shortKwds, - const std::set& smryKwds) : - keywords(kwds), short_keywords(shortKwds), summary_keywords(smryKwds) -{} - -SummaryConfig SummaryConfig::serializeObject() -{ - SummaryConfig result; - result.keywords = {SummaryConfigNode::serializeObject()}; - result.short_keywords = {"test1"}; - result.summary_keywords = {"test2"}; - - return result; -} - -SummaryConfig::const_iterator SummaryConfig::begin() const { - return this->keywords.cbegin(); -} - -SummaryConfig::const_iterator SummaryConfig::end() const { - return this->keywords.cend(); -} - -SummaryConfig& SummaryConfig::merge( const SummaryConfig& other ) { - this->keywords.insert( this->keywords.end(), - other.keywords.begin(), - other.keywords.end() ); - - uniq( this->keywords ); - return *this; -} - -SummaryConfig& SummaryConfig::merge( SummaryConfig&& other ) { - auto fst = std::make_move_iterator( other.keywords.begin() ); - auto lst = std::make_move_iterator( other.keywords.end() ); - this->keywords.insert( this->keywords.end(), fst, lst ); - other.keywords.clear(); - - uniq( this->keywords ); - return *this; -} - - -bool SummaryConfig::hasKeyword( const std::string& keyword ) const { - return short_keywords.find(keyword) != short_keywords.end(); -} - - -bool SummaryConfig::hasSummaryKey(const std::string& keyword ) const { - return summary_keywords.find(keyword) != summary_keywords.end(); -} - - -size_t SummaryConfig::size() const { - return this->keywords.size(); -} - -/* - Can be used to query if a certain 3D field, e.g. PRESSURE, is - required to calculate the summary variables. - - The implementation is based on the hardcoded datastructure - required_fields defined in a anonymous namespaces at the top of this - file; the content of this datastructure again is based on the - implementation of the Summary calculations in the opm-output - repository: opm/output/eclipse/Summary.cpp. -*/ - -bool SummaryConfig::require3DField( const std::string& keyword ) const { - const auto iter = required_fields.find( keyword ); - if (iter == required_fields.end()) - return false; - - for (const auto& kw : iter->second) { - if (this->hasKeyword( kw )) - return true; - } - - return false; -} - - -bool SummaryConfig::requireFIPNUM( ) const { - return this->hasKeyword("ROIP") || - this->hasKeyword("ROIPL") || - this->hasKeyword("RGIP") || - this->hasKeyword("RGIPL") || - this->hasKeyword("RGIPG") || - this->hasKeyword("RWIP") || - this->hasKeyword("RPR"); -} - - -bool SummaryConfig::operator==(const Opm::SummaryConfig& data) const { - return this->keywords == data.keywords && - this->short_keywords == data.short_keywords && - this->summary_keywords == data.summary_keywords; -} - -void SummaryConfig::handleProcessingInstruction(const std::string& keyword) { - if (keyword == "RUNSUM") { - runSummaryConfig.create = true; - } else if (keyword == "NARROW") { - runSummaryConfig.narrow = true; - } else if (keyword == "SEPARATE") { - Opm::OpmLog::info("Keyword SEPARATE has no effect (treated as always on)."); - runSummaryConfig.separate = true; - } -} - -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Tables/Bdensity.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Tables/Bdensity.cpp deleted file mode 100644 index c883f86d26..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Tables/Bdensity.cpp +++ /dev/null @@ -1,117 +0,0 @@ -/* - Copyright (C) 2019 by Norce - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include -#include -#include -#include -#include - -namespace Opm { - - static const size_t numEntries = 5; - PvtwsaltTable::PvtwsaltTable() - { - } - - void PvtwsaltTable::init(const Opm::DeckRecord& record0, const Opm::DeckRecord& record1) - { - - m_pRefValues = record0.getItem("P_REF").getSIDoubleData()[0]; - m_saltConsRefValues = record0.getItem("SALT_CONCENTRATION_REF").getSIDoubleData()[0]; - m_tableValues = record1.getItem("DATA").getSIDoubleData(); - } - - size_t PvtwsaltTable::size() const - { - return m_tableValues.size()/numEntries; - } - - double PvtwsaltTable::getReferencePressureValue() const - { - return m_pRefValues; - } - - double PvtwsaltTable::getReferenceSaltConcentrationValue() const - { - return m_saltConsRefValues; - } - - std::vector PvtwsaltTable::getSaltConcentrationColumn() const - { - size_t tableindex = 0; - std::vector saltCons(this->size()); - for(size_t i=0; isize(); ++i){ - saltCons[i] = m_tableValues[tableindex]; - tableindex = tableindex+numEntries; - } - return saltCons; - - } - - std::vector PvtwsaltTable::getFormationVolumeFactorColumn() const - { - size_t tableindex = 1; - std::vector formationvolumefactor(this->size()); - for(size_t i=0; isize(); ++i){ - formationvolumefactor[i] = m_tableValues[tableindex]; - tableindex = tableindex+numEntries; - } - return formationvolumefactor; - - } - - std::vector PvtwsaltTable::getCompressibilityColumn() const - { - size_t tableindex = 2; - std::vector compresibility(this->size()); - for(size_t i=0; isize(); ++i){ - compresibility[i] = m_tableValues[tableindex]; - tableindex = tableindex+numEntries; - } - return compresibility; - - } - - std::vector PvtwsaltTable::getViscosityColumn() const - { - size_t tableindex = 3; - std::vector viscosity(this->size()); - for(size_t i=0; isize(); ++i){ - viscosity[i] = m_tableValues[tableindex]; - tableindex = tableindex+numEntries; - } - return viscosity; - - } - - std::vector PvtwsaltTable::getViscosibilityColumn() const - { - size_t tableindex = 4; - std::vector viscosibility(this->size()); - for(size_t i=0; isize(); ++i){ - viscosibility[i] = m_tableValues[tableindex]; - tableindex = tableindex+numEntries; - } - return viscosibility; - - } - -} - diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Tables/BrineDensityTable.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Tables/BrineDensityTable.cpp deleted file mode 100644 index 073c89c003..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Tables/BrineDensityTable.cpp +++ /dev/null @@ -1,52 +0,0 @@ -/* - Copyright (C) 2019 by Norce - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include -#include -#include -#include -#include - -namespace Opm { - BrineDensityTable BrineDensityTable::serializeObject() - { - BrineDensityTable result; - result.m_tableValues = {1.0, 2.0, 3.0}; - - return result; - } - - void BrineDensityTable::init(const Opm::DeckRecord& record ) - { - m_tableValues = record.getItem("BRINE_DENSITY").getSIDoubleData(); - } - - const std::vector& BrineDensityTable::getBrineDensityColumn() const - { - return m_tableValues; - } - - bool BrineDensityTable::operator==(const BrineDensityTable& data) const - { - return m_tableValues == data.m_tableValues; - } - - -} - diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Tables/ColumnSchema.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Tables/ColumnSchema.cpp deleted file mode 100644 index 20d3ddeb84..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Tables/ColumnSchema.cpp +++ /dev/null @@ -1,139 +0,0 @@ -/* - Copyright 2015 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include - -#include - -namespace Opm { - - ColumnSchema::ColumnSchema() : - m_order(Table::INCREASING), - m_defaultAction(Table::DEFAULT_NONE), - m_defaultValue(0.0) - { - } - - ColumnSchema::ColumnSchema(const std::string& nm, Table::ColumnOrderEnum order, Table::DefaultAction defaultAction) : - m_name( nm ), - m_order( order ), - m_defaultAction( defaultAction ), - m_defaultValue ( 0.0 ) - { - - } - - - ColumnSchema::ColumnSchema(const std::string& nm, Table::ColumnOrderEnum order, double defaultValue ) : - m_name( nm ), - m_order( order ), - m_defaultAction( Table::DEFAULT_CONST ), - m_defaultValue( defaultValue ) - { - } - - ColumnSchema ColumnSchema::serializeObject() - { - ColumnSchema result; - result.m_name = "test1"; - result.m_order = Table::INCREASING; - result.m_defaultAction = Table::DEFAULT_LINEAR; - result.m_defaultValue = 1.0; - - return result; - } - - const std::string& ColumnSchema::name() const { - return m_name; - } - - bool ColumnSchema::validOrder( double value1 , double value2) const { - switch (m_order) { - case Table::RANDOM: - return true; - break; - case Table::INCREASING: - return (value2 >= value1); - break; - case Table::STRICTLY_INCREASING: - return (value2 > value1); - break; - case Table::DECREASING: - return (value2 <= value1); - break; - case Table::STRICTLY_DECREASING: - return (value2 < value1); - break; - default: - throw std::invalid_argument("Internal error - should not be here\n"); - } - } - - bool ColumnSchema::lookupValid( ) const { - if (m_order == Table::RANDOM) - return false; - else - return true; - } - - - bool ColumnSchema::acceptsDefault( ) const { - if (m_defaultAction == Table::DEFAULT_NONE) - return false; - else - return true; - } - - - bool ColumnSchema::isIncreasing( ) const { - if ((m_order == Table::INCREASING) || (m_order == Table::STRICTLY_INCREASING)) - return true; - else - return false; - } - - bool ColumnSchema::isDecreasing( ) const { - if ((m_order == Table::DECREASING) || (m_order == Table::STRICTLY_DECREASING)) - return true; - else - return false; - } - - - Table::DefaultAction ColumnSchema::getDefaultMode( ) const { - return m_defaultAction; - } - - - double ColumnSchema::getDefaultValue( ) const { - if (m_defaultAction == Table::DEFAULT_CONST) - return m_defaultValue; - else - throw std::invalid_argument("Column must be configured with constant default when using this method"); - } - - - bool ColumnSchema::operator==(const ColumnSchema& data) const { - return this->name() == data.name() && - this->m_order == data.m_order && - this->getDefaultMode() == data.getDefaultMode() && - m_defaultValue == data.m_defaultValue; - } - -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Tables/DenT.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Tables/DenT.cpp deleted file mode 100644 index c9779cce14..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Tables/DenT.cpp +++ /dev/null @@ -1,71 +0,0 @@ -/* - Copyright (C) 2020 by Equinor ASA - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ -#include -#include -#include - -namespace Opm { - -DenT::DenT(const DeckKeyword& keyword) { - for (const auto& record : keyword) - this->m_records.emplace_back(record); -} - -DenT::entry::entry(const DeckRecord& record) : - T0(record.getItem(0).getSIDouble(0)), - C1(record.getItem(1).getSIDouble(0)), - C2(record.getItem(2).getSIDouble(0)) -{ -} - -DenT DenT::serializeObject() -{ - DenT result; - result.m_records = {{1,2,3}, {4,5,6}}; - - return result; -} - -std::size_t DenT::size() const { - return this->m_records.size(); -} - - -DenT::entry::entry(double T0_, double C1_, double C2_) : - T0(T0_), - C1(C1_), - C2(C2_) -{} - - -bool DenT::entry::operator==(const DenT::entry& other) const { - return this->T0 == other.T0 && - this->C1 == other.C1 && - this->C2 == other.C2; -} - -bool DenT::operator==(const DenT& other) const { - return this->m_records == other.m_records; -} - -const DenT::entry& DenT::operator[](const std::size_t index) const { - return this->m_records.at(index); -} - -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Tables/JFunc.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Tables/JFunc.cpp deleted file mode 100644 index 71de1118d3..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Tables/JFunc.cpp +++ /dev/null @@ -1,122 +0,0 @@ -/* - Copyright 2016 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include -#include -#include - -namespace Opm { - - JFunc::JFunc() - : m_flag(Flag::BOTH) - , m_owSurfaceTension(0.0) - , m_goSurfaceTension(0.0) - , m_alphaFactor(0.5) - , m_betaFactor(0.5) - , m_direction(Direction::XY) - { - } - - JFunc::JFunc(const Deck& deck) - { - const auto& kw = *deck.getKeywordList()[0]; - const auto& rec = kw.getRecord(0); - const auto& kw_flag = rec.getItem("FLAG").get(0); - if (kw_flag == "BOTH") - m_flag = Flag::BOTH; - else if (kw_flag == "WATER") - m_flag = Flag::WATER; - else if (kw_flag == "GAS") - m_flag = Flag::GAS; - else - throw std::invalid_argument("Illegal JFUNC FLAG, must be BOTH, WATER, or GAS. Was \"" + kw_flag + "\"."); - - if (m_flag != Flag::WATER) - m_goSurfaceTension = rec.getItem("GO_SURFACE_TENSION").get(0); - - if (m_flag != Flag::GAS) - m_owSurfaceTension = rec.getItem("OW_SURFACE_TENSION").get(0); - - m_alphaFactor = rec.getItem("ALPHA_FACTOR").get(0); - m_betaFactor = rec.getItem("BETA_FACTOR").get(0); - - const auto kw_dir = rec.getItem("DIRECTION").get(0); - if (kw_dir == "XY") - m_direction = Direction::XY; - else if (kw_dir == "X") - m_direction = Direction::X; - else if (kw_dir == "Y") - m_direction = Direction::Y; - else if (kw_dir == "Z") - m_direction = Direction::Z; - else - throw std::invalid_argument("Illegal JFUNC DIRECTION, must be XY, X, Y, or Z. Was \"" + kw_dir + "\"."); - } - - JFunc JFunc::serializeObject() - { - JFunc result; - result.m_flag = Flag::BOTH; - result.m_owSurfaceTension = 1.0; - result.m_goSurfaceTension = 2.0; - result.m_alphaFactor = 3.0; - result.m_betaFactor = 4.0; - result.m_direction = Direction::X; - - return result; - } - - double JFunc::alphaFactor() const { - return m_alphaFactor; - } - - double JFunc::betaFactor() const { - return m_betaFactor; - } - - double JFunc::goSurfaceTension() const { - if (m_flag == JFunc::Flag::WATER) - throw std::invalid_argument("Cannot get gas-oil with WATER JFUNC"); - return m_goSurfaceTension; - } - - double JFunc::owSurfaceTension() const { - if (m_flag == JFunc::Flag::GAS) - throw std::invalid_argument("Cannot get oil-water with GAS JFUNC"); - return m_owSurfaceTension; - } - - const JFunc::Flag& JFunc::flag() const { - return m_flag; - } - - const JFunc::Direction& JFunc::direction() const { - return m_direction; - } - - bool JFunc::operator==(const JFunc& data) const { - return this->flag() == data.flag() && - this->owSurfaceTension() == data.owSurfaceTension() && - this->goSurfaceTension() == data.goSurfaceTension() && - this->alphaFactor() == data.alphaFactor() && - this->betaFactor() == data.betaFactor() && - this->direction() == data.direction(); - } - -} // Opm:: diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Tables/PolyInjTables.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Tables/PolyInjTables.cpp deleted file mode 100644 index 170348fa96..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Tables/PolyInjTables.cpp +++ /dev/null @@ -1,267 +0,0 @@ -/* - Copyright 2018 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - - -/* This is the implementation for the following three keywords related to - * polymer injectivity study : - * PLYMWINJ, SKPRWAT, SKPRPOLY - */ - -#include - -#include -#include - -#include -#include -#include -#include - - -namespace Opm{ - - // PolyInjTable - PolyInjTable PolyInjTable::serializeObject() - { - PolyInjTable result; - result.m_throughputs = {1.0}; - result.m_velocities = {2.0}; - result.m_table_number = 1; - result.m_data = {{1.0}, {2.0}}; - - return result; - } - - int PolyInjTable::getTableNumber() const - { - return m_table_number; - } - - const std::vector& PolyInjTable::getThroughputs() const - { - return m_throughputs; - } - - const std::vector& PolyInjTable::getVelocities() const - { - return m_velocities; - } - - const std::vector>& PolyInjTable::getTableData() const - { - return m_data; - } - - bool PolyInjTable::operator==(const PolyInjTable& data) const - { - return this->getTableNumber() == data.getTableNumber() && - this->getThroughputs() == data.getThroughputs() && - this->getVelocities() == data.getVelocities() && - this->getTableData() == data.getTableData(); - } - - - - // PlymwinjTable - PlymwinjTable PlymwinjTable::serializeObject() - { - PlymwinjTable result; - static_cast(result) = PolyInjTable::serializeObject(); - - return result; - } - - PlymwinjTable::PlymwinjTable(const Opm::DeckKeyword& table) - { - using namespace ParserKeywords; - - const DeckRecord& record0 = table.getRecord(0); - - m_table_number = record0.getItem().get< int >(0); - if (m_table_number <= 0) { - const std::string msg = "PLYMWINJ table has non-positive table number " + std::to_string(m_table_number); - throw std::invalid_argument(msg); - } - - m_throughputs = table.getRecord(1).getItem().getSIDoubleData(); - const size_t num_cols = m_throughputs.size(); - - if (table.size() != num_cols + 3) { - const std::string msg = "PLYMWINJ table " + std::to_string(m_table_number) - + " does not have enough records!"; - throw std::invalid_argument(msg); - } - - m_velocities = table.getRecord(2).getItem().getSIDoubleData(); - const size_t num_rows = m_velocities.size(); - - for (size_t i = 3; i < table.size(); ++i) { - const DeckRecord& record_i = table.getRecord(i); - const std::vector& data_i = record_i.getItem().getSIDoubleData(); - if (data_i.size() != num_rows) { - const std::string msg = "PLYMWINJ table " + std::to_string(m_table_number) - + " record " + std::to_string(i) - + " does not have correct number of data "; - throw std::invalid_argument(msg); - } - m_data.push_back(data_i); - } - } - - const std::vector>& - PlymwinjTable::getMoleWeights() const - { - return getTableData(); - } - - bool PlymwinjTable::operator==(const PlymwinjTable& data) const - { - return static_cast(*this) == static_cast(data); - } - - - // SkprwatTable - SkprwatTable SkprwatTable::serializeObject() - { - SkprwatTable result; - static_cast(result) = PolyInjTable::serializeObject(); - - return result; - } - - SkprwatTable::SkprwatTable(const Opm::DeckKeyword &table) - { - using namespace ParserKeywords; - - const DeckRecord& record0 = table.getRecord(0); - - m_table_number = record0.getItem().get< int >(0); - if (m_table_number <= 0) { - const std::string msg = "SKPRWAT table has non-positive table number " + std::to_string(m_table_number); - throw std::invalid_argument(msg); - } - - m_throughputs = table.getRecord(1).getItem().getSIDoubleData(); - const size_t num_cols = m_throughputs.size(); - - if (table.size() != num_cols + 3) { - const std::string msg = "SKPRWAT table " + std::to_string(m_table_number) - + " does not have enough records!"; - throw std::invalid_argument(msg); - } - - m_velocities = table.getRecord(2).getItem().getSIDoubleData(); - const size_t num_rows = m_velocities.size(); - - for (size_t i = 3; i < table.size(); ++i) { - const DeckRecord& record_i = table.getRecord(i); - const std::vector& data_i = record_i.getItem().getSIDoubleData(); - if (data_i.size() != num_rows) { - const std::string msg = "SKPRWAT table " + std::to_string(m_table_number) - + " record " + std::to_string(i) - + " does not have correct number of data "; - throw std::invalid_argument(msg); - } - m_data.push_back(data_i); - } - } - - const std::vector>& - SkprwatTable::getSkinPressures() const - { - return getTableData(); - } - - bool SkprwatTable::operator==(const SkprwatTable& data) const - { - return static_cast(*this) == static_cast(data); - } - - // SkprpolyTable - SkprpolyTable SkprpolyTable::serializeObject() - { - SkprpolyTable result; - static_cast(result) = PolyInjTable::serializeObject(); - result.m_ref_polymer_concentration = 3.0; - - return result; - } - - SkprpolyTable::SkprpolyTable(const Opm::DeckKeyword &table) - { - using namespace ParserKeywords; - - const DeckRecord& record0 = table.getRecord(0); - - m_table_number = record0.getItem().get< int >(0); - if (m_table_number <= 0) { - const std::string msg = "SKPRPOLY table has non-positive table number " + std::to_string(m_table_number); - throw std::invalid_argument(msg); - } - - m_ref_polymer_concentration = record0.getItem().get< double >(0); - if (m_ref_polymer_concentration <= 0.) { - const std::string msg = "Non-positive reference polymer concentration is specified for SKPRPOLY table " - + std::to_string(m_table_number); - throw std::invalid_argument(msg); - } - - m_throughputs = table.getRecord(1).getItem().getSIDoubleData(); - const size_t num_cols = m_throughputs.size(); - - if (table.size() != num_cols + 3) { - const std::string msg = "SKPRPOLY table " + std::to_string(m_table_number) - + " does not have enough records!"; - throw std::invalid_argument(msg); - } - - m_velocities = table.getRecord(2).getItem().getSIDoubleData(); - const size_t num_rows = m_velocities.size(); - - for (size_t i = 3; i < table.size(); ++i) { - const DeckRecord& record_i = table.getRecord(i); - const std::vector& data_i = record_i.getItem().getSIDoubleData(); - if (data_i.size() != num_rows) { - const std::string msg = "SKPRPOLY table " + std::to_string(m_table_number) - + " record " + std::to_string(i) - + " does not have correct number of data "; - throw std::invalid_argument(msg); - } - m_data.push_back(data_i); - } - } - - double SkprpolyTable::referenceConcentration() const - { - return m_ref_polymer_concentration; - } - - const std::vector>& - SkprpolyTable::getSkinPressures() const - { - return getTableData(); - } - - bool SkprpolyTable::operator==(const SkprpolyTable& data) const - { - return this->referenceConcentration() == data.referenceConcentration() && - static_cast(*this) == static_cast(data); - } - -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Tables/PvtwsaltTable.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Tables/PvtwsaltTable.cpp deleted file mode 100644 index 0be6225bf4..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Tables/PvtwsaltTable.cpp +++ /dev/null @@ -1,139 +0,0 @@ -/* - Copyright (C) 2019 by Norce - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include -#include -#include -#include -#include - -namespace Opm { - - static const size_t numEntries = 5; - PvtwsaltTable::PvtwsaltTable() - { - } - - PvtwsaltTable PvtwsaltTable::serializeObject() - { - PvtwsaltTable result; - result.m_pRefValues = 1.0; - result.m_saltConsRefValues = 2.0; - result.m_tableValues = {3.0, 4.0, 5.0}; - - return result; - } - - void PvtwsaltTable::init(const Opm::DeckRecord& record0, const Opm::DeckRecord& record1) - { - - m_pRefValues = record0.getItem("P_REF").getSIDoubleData()[0]; - m_saltConsRefValues = record0.getItem("SALT_CONCENTRATION_REF").getSIDoubleData()[0]; - m_tableValues = record1.getItem("DATA").getSIDoubleData(); - } - - size_t PvtwsaltTable::size() const - { - return m_tableValues.size()/numEntries; - } - - const std::vector& PvtwsaltTable::getTableValues() const - { - return m_tableValues; - } - - double PvtwsaltTable::getReferencePressureValue() const - { - return m_pRefValues; - } - - double PvtwsaltTable::getReferenceSaltConcentrationValue() const - { - return m_saltConsRefValues; - } - - std::vector PvtwsaltTable::getSaltConcentrationColumn() const - { - size_t tableindex = 0; - std::vector saltCons(this->size()); - for(size_t i=0; isize(); ++i){ - saltCons[i] = m_tableValues[tableindex]; - tableindex = tableindex+numEntries; - } - return saltCons; - - } - - std::vector PvtwsaltTable::getFormationVolumeFactorColumn() const - { - size_t tableindex = 1; - std::vector formationvolumefactor(this->size()); - for(size_t i=0; isize(); ++i){ - formationvolumefactor[i] = m_tableValues[tableindex]; - tableindex = tableindex+numEntries; - } - return formationvolumefactor; - - } - - std::vector PvtwsaltTable::getCompressibilityColumn() const - { - size_t tableindex = 2; - std::vector compresibility(this->size()); - for(size_t i=0; isize(); ++i){ - compresibility[i] = m_tableValues[tableindex]; - tableindex = tableindex+numEntries; - } - return compresibility; - - } - - std::vector PvtwsaltTable::getViscosityColumn() const - { - size_t tableindex = 3; - std::vector viscosity(this->size()); - for(size_t i=0; isize(); ++i){ - viscosity[i] = m_tableValues[tableindex]; - tableindex = tableindex+numEntries; - } - return viscosity; - - } - - std::vector PvtwsaltTable::getViscosibilityColumn() const - { - size_t tableindex = 4; - std::vector viscosibility(this->size()); - for(size_t i=0; isize(); ++i){ - viscosibility[i] = m_tableValues[tableindex]; - tableindex = tableindex+numEntries; - } - return viscosibility; - - } - - bool PvtwsaltTable::operator==(const PvtwsaltTable& data) const - { - return m_pRefValues == data.m_pRefValues && - m_saltConsRefValues == data.m_saltConsRefValues && - m_tableValues == data.m_tableValues; - } - -} - diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Tables/PvtxTable.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Tables/PvtxTable.cpp deleted file mode 100644 index 3c56e6586a..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Tables/PvtxTable.cpp +++ /dev/null @@ -1,172 +0,0 @@ -/* - Copyright 2015 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include -#include -#include -#include -#include -#include -#include - -namespace Opm { - - PvtxTable::PvtxTable(const std::string& columnName) : - m_outerColumnSchema( columnName , Table::STRICTLY_INCREASING , Table::DEFAULT_NONE ), - m_outerColumn( m_outerColumnSchema ) - { - - } - - PvtxTable PvtxTable::serializeObject() - { - PvtxTable result; - result.m_outerColumnSchema = ColumnSchema::serializeObject(); - result.m_outerColumn = TableColumn::serializeObject(); - result.m_underSaturatedSchema = TableSchema::serializeObject(); - result.m_saturatedSchema = TableSchema::serializeObject(); - result.m_underSaturatedTables = {SimpleTable::serializeObject()}; - result.m_saturatedTable = SimpleTable::serializeObject(); - - return result; - } - - /* - The Schema pointers m_saturatedSchema and m_underSaturatedSchema must - have been explicitly set before calling this method. - */ - - void PvtxTable::init( const DeckKeyword& keyword, size_t tableIdx) { - auto ranges = recordRanges( keyword ); - if (tableIdx >= ranges.size()) - throw std::invalid_argument("Asked for table: " + std::to_string( tableIdx ) + " in keyword + " + keyword.name() + " which only has " + std::to_string( ranges.size() ) + " tables"); - - { - auto range = ranges[ tableIdx ]; - for (size_t rowIdx = range.first; rowIdx < range.second; rowIdx++) { - const auto& deckRecord = keyword.getRecord(rowIdx); - m_outerColumn.addValue( deckRecord.getItem( 0 ).getSIDouble( 0 )); - - const auto& dataItem = deckRecord.getItem(1); - m_underSaturatedTables.emplace_back( this->m_underSaturatedSchema, dataItem ); - } - - - m_saturatedTable = SimpleTable(m_saturatedSchema); - for (size_t sat_index = 0; sat_index < size(); sat_index++) { - const auto& underSaturatedTable = getUnderSaturatedTable( sat_index ); - std::vector row(4); - row[0] = m_outerColumn[sat_index]; - for (size_t col_index = 0; col_index < m_underSaturatedSchema.size(); col_index++) - row[col_index + 1] = underSaturatedTable.get( col_index , 0 ); - - m_saturatedTable.addRow( row ); - } - } - } - - - double PvtxTable::evaluate(const std::string& column, double outerArg, double innerArg) const - { - TableIndex outerIndex = m_outerColumn.lookup( outerArg ); - const auto& underSaturatedTable1 = getUnderSaturatedTable( outerIndex.getIndex1( ) ); - double weight1 = outerIndex.getWeight1( ); - double value = weight1 * underSaturatedTable1.evaluate( column , innerArg ); - - if (weight1 < 1) { - const auto& underSaturatedTable2 = getUnderSaturatedTable( outerIndex.getIndex2( ) ); - double weight2 = outerIndex.getWeight2( ); - - value += weight2 * underSaturatedTable2.evaluate( column , innerArg ); - } - - return value; - } - - - const SimpleTable& PvtxTable::getSaturatedTable() const { - return this->m_saturatedTable; - } - - - - const SimpleTable& PvtxTable::getUnderSaturatedTable(size_t tableNumber) const { - if (tableNumber >= size()) - throw std::invalid_argument("Invalid table number: " + std::to_string( tableNumber) + " max: " + std::to_string( size() - 1 )); - return m_underSaturatedTables[ tableNumber ]; - } - - - std::vector< SimpleTable >::const_iterator PvtxTable::begin() const { - return m_underSaturatedTables.begin(); - } - - std::vector< SimpleTable >::const_iterator PvtxTable::end() const { - return m_underSaturatedTables.end(); - } - - - - size_t PvtxTable::size() const - { - return m_outerColumn.size(); - } - - - size_t PvtxTable::numTables( const DeckKeyword& keyword ) - { - auto ranges = recordRanges(keyword); - return ranges.size(); - } - - - std::vector > PvtxTable::recordRanges( const DeckKeyword& keyword ) { - std::vector > ranges; - size_t startRecord = 0; - size_t recordIndex = 0; - while (recordIndex < keyword.size()) { - const auto& item = keyword.getRecord(recordIndex).getItem(0); - if (!item.hasValue(0)) { - ranges.push_back( std::make_pair( startRecord , recordIndex ) ); - startRecord = recordIndex + 1; - } - recordIndex++; - } - ranges.push_back( std::make_pair( startRecord , recordIndex ) ); - return ranges; - } - - - double PvtxTable::getArgValue(size_t index) const { - if (index < m_outerColumn.size()) - return m_outerColumn[index]; - else - throw std::invalid_argument("Invalid index"); - } - - - bool PvtxTable::operator==(const PvtxTable& data) const { - return this->m_outerColumnSchema == data.m_outerColumnSchema && - this->m_outerColumn == data.m_outerColumn && - this->m_underSaturatedSchema == data.m_underSaturatedSchema && - this->m_saturatedSchema == data.m_saturatedSchema && - this->m_underSaturatedTables == data.m_underSaturatedTables && - this->m_saturatedTable == data.m_saturatedTable; - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Tables/Rock2dTable.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Tables/Rock2dTable.cpp deleted file mode 100644 index 6fbf60a5aa..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Tables/Rock2dTable.cpp +++ /dev/null @@ -1,74 +0,0 @@ -/* - Copyright (C) 2019 by Norce - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include -#include -#include -#include -#include - -namespace Opm { - - Rock2dTable::Rock2dTable() - { - } - - Rock2dTable Rock2dTable::serializeObject() - { - Rock2dTable result; - result.m_pvmultValues = {{1.0,2.0},{3.0,4.0}}; - result.m_pressureValues = {1.0, 2.0, 3.0}; - - return result; - } - - void Rock2dTable::init(const DeckRecord& record, size_t /* tableIdx */) - { - m_pressureValues.push_back(record.getItem("PRESSURE").getSIDoubleData()[0]); - m_pvmultValues.push_back(record.getItem("PVMULT").getSIDoubleData()); - } - - size_t Rock2dTable::size() const - { - return m_pressureValues.size(); - } - - size_t Rock2dTable::sizeMultValues() const - { - return m_pvmultValues[0].size(); - } - - double Rock2dTable::getPressureValue(size_t index) const - { - return m_pressureValues[index]; - } - - double Rock2dTable::getPvmultValue(size_t pressureIndex, size_t saturationIndex) const - { - return m_pvmultValues[pressureIndex][saturationIndex]; - } - - bool Rock2dTable::operator==(const Rock2dTable& data) const - { - return this->m_pvmultValues == data.m_pvmultValues && - this->m_pressureValues == data.m_pressureValues; - } - -} - diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Tables/Rock2dtrTable.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Tables/Rock2dtrTable.cpp deleted file mode 100644 index 1001c454d5..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Tables/Rock2dtrTable.cpp +++ /dev/null @@ -1,75 +0,0 @@ -/* - Copyright (C) 2019 by Norce - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include -#include -#include -#include -#include - -namespace Opm { - - Rock2dtrTable::Rock2dtrTable() - { - } - - Rock2dtrTable Rock2dtrTable::serializeObject() - { - Rock2dtrTable result; - - result.m_transMultValues = {{1.0,2.0},{3.0,4.0}}; - result.m_pressureValues = {1.0, 2.0, 3.0}; - - return result; - } - - void Rock2dtrTable::init(const DeckRecord& record, size_t /* tableIdx */) - { - m_pressureValues.push_back(record.getItem("PRESSURE").getSIDoubleData()[0]); - m_transMultValues.push_back(record.getItem("TRANSMULT").getSIDoubleData()); - } - - size_t Rock2dtrTable::size() const - { - return m_pressureValues.size(); - } - - size_t Rock2dtrTable::sizeMultValues() const - { - return m_transMultValues[0].size(); - } - - double Rock2dtrTable::getPressureValue(size_t index) const - { - return m_pressureValues[index]; - } - - double Rock2dtrTable::getTransMultValue(size_t pressureIndex, size_t saturationIndex) const - { - return m_transMultValues[pressureIndex][saturationIndex]; - } - - bool Rock2dtrTable::operator==(const Rock2dtrTable& data) const - { - return this->m_transMultValues == data.m_transMultValues && - this->m_pressureValues == data.m_pressureValues; - } - -} - diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Tables/SimpleTable.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Tables/SimpleTable.cpp deleted file mode 100644 index 6043cd38a3..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Tables/SimpleTable.cpp +++ /dev/null @@ -1,202 +0,0 @@ -/* - Copyright (C) 2013 by Andreas Lauser, 2016 Statoil ASA - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ -#include -#include - -#include -#include -#include - -namespace Opm { - - SimpleTable::SimpleTable( TableSchema schema, const DeckItem& deckItem) : - m_schema( std::move( schema ) ), - m_jfunc (false) - { - init( deckItem ); - } - - - SimpleTable::SimpleTable( TableSchema schema ) : - m_schema( std::move( schema ) ), - m_jfunc (false) - { - addColumns(); - } - - - SimpleTable SimpleTable::serializeObject() - { - SimpleTable result; - result.m_schema = Opm::TableSchema::serializeObject(); - result.m_columns.insert({"test3", Opm::TableColumn::serializeObject()}); - result.m_jfunc = true; - - return result; - } - - void SimpleTable::addRow( const std::vector& row) { - if (row.size() == numColumns()) { - for (size_t colIndex = 0; colIndex < numColumns(); colIndex++) { - auto& col = getColumn( colIndex ); - col.addValue( row[colIndex] ); - } - } else - throw std::invalid_argument("Size mismatch"); - } - - - void SimpleTable::addColumns() { - for (size_t colIdx = 0; colIdx < m_schema.size(); ++colIdx) { - const auto& schemaColumn = m_schema.getColumn( colIdx ); - TableColumn column(schemaColumn); // Some move trickery here ... - m_columns.insert( std::make_pair( schemaColumn.name() , column )); - } - } - - - double SimpleTable::get(const std::string& column , size_t row) const { - const auto& col = getColumn( column ); - return col[row]; - } - - - double SimpleTable::get(size_t column , size_t row) const { - const auto& col = getColumn( column ); - return col[row]; - } - - void SimpleTable::init( const DeckItem& deckItem ) { - this->addColumns(); - - if ( (deckItem.data_size() % numColumns()) != 0) - throw std::runtime_error("Number of columns in the data file is" - "inconsistent with the ones specified"); - - size_t rows = deckItem.data_size() / numColumns(); - for (size_t colIdx = 0; colIdx < numColumns(); ++colIdx) { - auto& column = getColumn( colIdx ); - for (size_t rowIdx = 0; rowIdx < rows; rowIdx++) { - size_t deckItemIdx = rowIdx*numColumns() + colIdx; - if (deckItem.defaultApplied(deckItemIdx)) - column.addDefault( ); - else if (m_jfunc) { - column.addValue( deckItem.getData()[deckItemIdx] ); - } - else - column.addValue( deckItem.getSIDouble(deckItemIdx) ); - } - if (colIdx > 0) - column.applyDefaults(getColumn( 0 )); - } - } - - void SimpleTable::init( const DeckItem& deckItem, double scaling_factor) { - this->addColumns(); - - if ( (deckItem.data_size() % numColumns()) != 0) - throw std::runtime_error("Number of columns in the data file is" - "inconsistent with the ones specified"); - - size_t rows = deckItem.data_size() / numColumns(); - for (size_t colIdx = 0; colIdx < numColumns(); ++colIdx) { - auto& column = getColumn( colIdx ); - for (size_t rowIdx = 0; rowIdx < rows; rowIdx++) { - size_t deckItemIdx = rowIdx*numColumns() + colIdx; - if (deckItem.defaultApplied(deckItemIdx)) - column.addDefault( ); - else if (m_jfunc) { - column.addValue( deckItem.getData()[deckItemIdx] ); - } - else - column.addValue( scaling_factor * deckItem.get(deckItemIdx) ); - } - if (colIdx > 0) - column.applyDefaults(getColumn( 0 )); - } - } - - size_t SimpleTable::numColumns() const { - return m_schema.size(); - } - - size_t SimpleTable::numRows() const { - return getColumn( 0 ).size(); - } - - const TableColumn& SimpleTable::getColumn( const std::string& name) const { - if (!this->m_jfunc) - return m_columns.get( name ); - - if (name == "PCOW" || name == "PCOG") - assertJFuncPressure(false); // this will throw since m_jfunc=true - return m_columns.get( name ); - } - - const TableColumn& SimpleTable::getColumn( size_t columnIndex ) const { - return m_columns.iget( columnIndex ); - } - - - TableColumn& SimpleTable::getColumn( const std::string& name) { - if (!this->m_jfunc) - return m_columns.get( name ); - - if (name == "PCOW" || name == "PCOG") - assertJFuncPressure(false); // this will throw since m_jfunc=true - return m_columns.get( name ); - } - - TableColumn& SimpleTable::getColumn( size_t columnIndex ) { - return m_columns.iget( columnIndex ); - } - - - bool SimpleTable::hasColumn(const std::string& name) const { - return m_schema.hasColumn( name ); - } - - double SimpleTable::evaluate(const std::string& columnName, double xPos) const - { - const auto& argColumn = getColumn( 0 ); - const auto& valueColumn = getColumn( columnName ); - - const auto index = argColumn.lookup( xPos ); - return valueColumn.eval( index ); - } - - void SimpleTable::assertJFuncPressure(const bool jf) const { - if (jf == m_jfunc) - return; - // if we reach here, wrong values are read from the deck! (JFUNC is used - // incorrectly.) This function writes to std err for now, but will - // after a grace period be rewritten to throw (std::invalid_argument). - if (m_jfunc) - std::cerr << "Developer warning: Pressure column is read with JFUNC in deck." << std::endl; - else - std::cerr << "Developer warning: Raw values from JFUNC column is read, but JFUNC not provided in deck." << std::endl; - } - - - bool SimpleTable::operator==(const SimpleTable& data) const { - return this->m_schema == data.m_schema && - this->m_columns == data.m_columns && - this->m_jfunc == data.m_jfunc; - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Tables/SolventDensityTable.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Tables/SolventDensityTable.cpp deleted file mode 100644 index 7bd849eff3..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Tables/SolventDensityTable.cpp +++ /dev/null @@ -1,52 +0,0 @@ -/* - Copyright (C) 2019 by Norce - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include -#include -#include -#include -#include - -namespace Opm { - SolventDensityTable SolventDensityTable::serializeObject() - { - SolventDensityTable result; - result.m_tableValues = {1.0, 2.0, 3.0}; - - return result; - } - - void SolventDensityTable::init(const Opm::DeckRecord& record ) - { - m_tableValues = record.getItem("SOLVENT_DENSITY").getSIDoubleData(); - } - - const std::vector& SolventDensityTable::getSolventDensityColumn() const - { - return m_tableValues; - } - - bool SolventDensityTable::operator==(const SolventDensityTable& data) const - { - return m_tableValues == data.m_tableValues; - } - - -} - diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Tables/StandardCond.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Tables/StandardCond.cpp deleted file mode 100644 index b16703ec1d..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Tables/StandardCond.cpp +++ /dev/null @@ -1,47 +0,0 @@ -/* - Copyright (C) 2020 by Equinor ASA - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include -#include -#include - -namespace Opm { - - -StandardCond::StandardCond() { - using ST = ParserKeywords::STCOND; - double input_temp = ST::TEMPERATURE::defaultValue; - double input_pressure = ST::PRESSURE::defaultValue; - UnitSystem units( UnitSystem::UnitType::UNIT_TYPE_METRIC ); - this->temperature = units.to_si(UnitSystem::measure::temperature, input_temp); - this->pressure = units.to_si(UnitSystem::measure::pressure, input_pressure); -} - - -StandardCond StandardCond::serializeObject() -{ - StandardCond result; - result.temperature = 1.0; - result.pressure = 2.0; - - return result; -} - - -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Tables/TableColumn.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Tables/TableColumn.cpp deleted file mode 100644 index 6e0c77f58c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Tables/TableColumn.cpp +++ /dev/null @@ -1,354 +0,0 @@ -/* - Copyright 2015 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include -#include -#include - -#include -#include - -namespace Opm { - - TableColumn::TableColumn() - { - m_defaultCount = 0; - } - - TableColumn::TableColumn(const ColumnSchema& schema) : - m_schema( schema ) - { - m_defaultCount = 0; - } - - - TableColumn TableColumn::serializeObject() - { - TableColumn result; - result.m_schema = Opm::ColumnSchema::serializeObject(); - result.m_name = "test2"; - result.m_values = {1.0, 2.0}; - result.m_default = {false, true}; - result.m_defaultCount = 2; - - return result; - } - - - size_t TableColumn::size() const { - return m_values.size(); - } - - - void TableColumn::assertOrder(double value1 , double value2) const { - if (!m_schema.validOrder( value1 , value2) ) - throw std::invalid_argument("Incorrect ordering of values in column: " + m_schema.name()); - } - - const std::string& TableColumn::name() const { - return m_name; - } - - void TableColumn::assertNext(size_t index , double value) const { - size_t nextIndex = index + 1; - if (nextIndex < m_values.size()) { - if (!m_default[nextIndex]) { - double nextValue = m_values[nextIndex]; - assertOrder( value , nextValue ); - } - } - } - - - void TableColumn::assertPrevious(size_t index , double value) const { - if (index > 0) { - size_t prevIndex = index - 1; - if (!m_default[prevIndex]) { - double prevValue = m_values[prevIndex]; - assertOrder( prevValue , value ); - } - } - } - - - void TableColumn::assertUpdate(size_t index, double value) const { - assertNext( index , value ); - assertPrevious( index, value ); - } - - - - - void TableColumn::addValue(double value) { - assertUpdate( m_values.size() , value ); - m_values.push_back( value ); - m_default.push_back( false ); - } - - - void TableColumn::addDefault() { - Table::DefaultAction defaultAction = m_schema.getDefaultMode( ); - - if (defaultAction == Table::DEFAULT_CONST) - addValue( m_schema.getDefaultValue( )); - else if (defaultAction == Table::DEFAULT_LINEAR) { - m_values.push_back( -1 ); // Should never even be read. - m_default.push_back( true ); - m_defaultCount += 1; - } else - throw std::invalid_argument("The column does not accept default values"); - - } - - - void TableColumn::updateValue( size_t index , double value ) { - assertUpdate( index , value ); - m_values[index] = value; - if (m_default[index]) { - m_default[index] = false; - m_defaultCount -= 1; - } - } - - bool TableColumn::defaultApplied(size_t index) const { - if (index >= m_values.size()) - throw std::invalid_argument("Value: " + std::to_string( index ) + " out of range: [0," + std::to_string( m_values.size()) + ")"); - - return m_default[index]; - } - - double TableColumn::operator[](size_t index) const { - if (index >= m_values.size()) - throw std::invalid_argument("Value: " + std::to_string( index ) + " out of range: [0," + std::to_string( m_values.size()) + ")"); - - if (m_default[index]) - throw std::invalid_argument("Value at index " + std::to_string( index ) + " is defaulted - can not ask!"); - - return m_values[index]; - } - - double TableColumn::back() const { - return m_values.back( ); - } - - - double TableColumn::front() const { - return m_values.front( ); - } - - double TableColumn::max( ) const { - if (hasDefault()) - throw std::invalid_argument("Can not lookup elements in a column with defaulted values."); - if (m_values.size() > 0) - return *std::max_element( m_values.begin() , m_values.end()); - else - throw std::invalid_argument("Can not find max in empty column"); - } - - - double TableColumn::min( ) const { - if (hasDefault()) - throw std::invalid_argument("Can not lookup elements in a column with defaulted values."); - if (m_values.size() > 0) - return *std::min_element( m_values.begin() , m_values.end()); - else - throw std::invalid_argument("Can not find max in empty column"); - } - - - bool TableColumn::inRange( double arg ) const { - if (m_values.size( ) >= 2) { - if (!m_schema.lookupValid( )) - throw std::invalid_argument("Must have an ordered column to check in range."); - - if ((arg >= min()) && (arg <= max())) - return true; - else - return false; - - } else - throw std::invalid_argument("Minimum size 2 "); - } - - - TableIndex TableColumn::lookup( double argValue ) const { - if (!m_schema.lookupValid( )) - throw std::invalid_argument("Must have an ordered column to perform table argument lookup."); - - if (size() < 1) - throw std::invalid_argument("Must have at least one elements in column for table argument lookup."); - - if (hasDefault()) - throw std::invalid_argument("Can not lookup elements in a column with defaulted values."); - - if (argValue >= max()) { - const auto max_iter = std::max_element( m_values.begin() , m_values.end()); - const size_t max_index = max_iter - m_values.begin(); - return TableIndex( max_index , 1.0 ); - } - - if (argValue <= min()) { - const auto min_iter = std::min_element( m_values.begin() , m_values.end()); - const size_t min_index = min_iter - m_values.begin(); - return TableIndex( min_index , 1.0 ); - } - - { - bool isDescending = m_schema.isDecreasing( ); - size_t lowIntervalIdx = 0; - size_t intervalIdx = (size() - 1)/2; - size_t highIntervalIdx = size() - 1; - double weight1; - - while (lowIntervalIdx + 1 < highIntervalIdx) { - if (isDescending) { - if (m_values[intervalIdx] < argValue) - highIntervalIdx = intervalIdx; - else - lowIntervalIdx = intervalIdx; - } - else { - if (m_values[intervalIdx] < argValue) - lowIntervalIdx = intervalIdx; - else - highIntervalIdx = intervalIdx; - } - - intervalIdx = (highIntervalIdx + lowIntervalIdx)/2; - } - - weight1 = 1 - (argValue - m_values[intervalIdx])/(m_values[intervalIdx + 1] - m_values[intervalIdx]); - - return TableIndex( intervalIdx , weight1 ); - } - } - - std::vector::const_iterator TableColumn::begin() const { - return m_values.begin(); - } - - std::vector::const_iterator TableColumn::end() const { - return m_values.end(); - } - - - bool TableColumn::hasDefault( ) const { - if (m_defaultCount > 0) - return true; - else - return false; - } - - - double TableColumn::eval( const TableIndex& index) const { - size_t index1 = index.getIndex1(); - double weight1 = index.getWeight1( ); - double value = m_values[index1] * weight1; - if (weight1 < 1.0) { - double weight2 = index.getWeight2( ); - value += weight2 * m_values[index1 + 1]; - } - return value; - } - - - TableColumn& TableColumn::operator= (const TableColumn& other) { - if (this != &other) { - m_schema = other.m_schema; - m_name = other.m_name; - m_values = other.m_values; - m_default = other.m_default; - m_defaultCount = other.m_defaultCount; - } - return *this; - } - - - void TableColumn::applyDefaults( const TableColumn& argColumn ) { - if (m_schema.getDefaultMode() == Table::DEFAULT_LINEAR) { - if (size() != argColumn.size()) - throw std::invalid_argument("Size mismatch with argument column"); - - for (size_t rowIdx = 0; rowIdx < size(); ++rowIdx) { - if (defaultApplied( rowIdx )) { - // find first row which was not defaulted before the current one - int rowBeforeIdx = static_cast(rowIdx); - for (; rowBeforeIdx >= 0; -- rowBeforeIdx) - if (!defaultApplied(rowBeforeIdx)) - break; - - // find first row which was not defaulted after the current one - int rowAfterIdx = static_cast(rowIdx); - for (; rowAfterIdx < static_cast(size()); ++ rowAfterIdx) - if (!defaultApplied(rowAfterIdx)) - break; - - - // switch to extrapolation by a constant at the fringes - if (rowBeforeIdx < 0 && rowAfterIdx >= static_cast(size())) - throw std::invalid_argument("Column " + m_schema.name() + " can't be fully defaulted"); - else if (rowBeforeIdx < 0) - rowBeforeIdx = rowAfterIdx; - else if (rowAfterIdx >= static_cast(size())) - rowAfterIdx = rowBeforeIdx; - - { - const size_t before = static_cast(rowBeforeIdx); - const size_t after = static_cast(rowAfterIdx); - - // linear interpolation - double alpha = 0.0; - if (rowBeforeIdx != rowAfterIdx) - alpha = (argColumn[rowIdx] - argColumn[before]) - / (argColumn[after] - argColumn[before]); - - double value = m_values[before]*(1-alpha) + m_values[after]*alpha; - - updateValue( rowIdx , value ); - } - } - } - } - } - - - void TableColumn::assertUnitRange() const { - if (front() != 0.0) - throw std::invalid_argument("Column " + m_schema.name() + " must span range [0 1]"); - - if (back() != 1.0) - throw std::invalid_argument("Column " + m_schema.name() + " must span range [0 1]"); - } - - - std::vector TableColumn::vectorCopy() const { - return std::vector( begin() , end()); - } - - bool TableColumn::operator==(const TableColumn& data) const { - return this->m_schema == data.m_schema && - this->name() == data.name() && - this->m_values == data.m_values && - this->m_default == data.m_default && - this->m_defaultCount == data.m_defaultCount; - } - -} - - diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Tables/TableContainer.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Tables/TableContainer.cpp deleted file mode 100644 index 1f8a3da4b9..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Tables/TableContainer.cpp +++ /dev/null @@ -1,121 +0,0 @@ -/* - Copyright 2015 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include -#include - -#include -#include - -namespace Opm { - - TableContainer::TableContainer() : - m_maxTables(0) - { - } - - TableContainer::TableContainer(size_t maxTables) : - m_maxTables(maxTables) - { - } - - TableContainer TableContainer::serializeObject() - { - TableContainer result; - result.m_maxTables = 2; - result.addTable(0, std::make_shared(Opm::SimpleTable::serializeObject())); - result.addTable(1, std::make_shared(Opm::SimpleTable::serializeObject())); - - return result; - } - - bool TableContainer::empty() const { - return m_tables.empty(); - } - - - size_t TableContainer::size() const { - return m_tables.size(); - } - - - size_t TableContainer::max() const { - return m_maxTables; - } - - const TableContainer::TableMap& TableContainer::tables() const { - return m_tables; - } - - - size_t TableContainer::hasTable(size_t tableNumber) const { - if (m_tables.find( tableNumber ) == m_tables.end()) - return false; - else - return true; - } - - - const SimpleTable& TableContainer::getTable(size_t tableNumber) const { - if (tableNumber >= m_maxTables) - throw std::invalid_argument("TableContainer - invalid tableNumber"); - - if (hasTable(tableNumber)) { - auto pair = m_tables.find( tableNumber ); - return *(pair->second.get()); - } else { - if (tableNumber > 0) - return getTable(tableNumber -1); - else - throw std::invalid_argument("TableContainer does not have any table in the range 0..." + std::to_string( tableNumber )); - } - } - - - const SimpleTable& TableContainer::operator[](size_t tableNumber) const { - return getTable(tableNumber); - } - - void TableContainer::addTable(size_t tableNumber , std::shared_ptr table) { - if (tableNumber >= m_maxTables) - throw std::invalid_argument("TableContainer has max: " + std::to_string( m_maxTables ) + " tables. Table number: " + std::to_string( tableNumber ) + " illegal."); - - m_tables[tableNumber] = table; - } - - - bool TableContainer::operator==(const TableContainer& data) const { - if (this->max() != data.max()) - return false; - if (this->size() != data.size()) - return false; - for (const auto& it : m_tables) { - auto it2 = data.m_tables.find(it.first); - if (it2 == data.m_tables.end()) - return false; - if (!(*it.second == *it2->second)) - return false; - } - - return true; - } -} - - - diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Tables/TableIndex.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Tables/TableIndex.cpp deleted file mode 100644 index d5b48a58b0..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Tables/TableIndex.cpp +++ /dev/null @@ -1,60 +0,0 @@ -/* - Copyright 2015 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - - - -#include - -namespace Opm { - - TableIndex::TableIndex( size_t index1 , double weight1) : - m_index1( index1 ), - m_weight1( weight1 ) - { - - } - - - TableIndex::TableIndex(const TableIndex& tableIndex) - : m_index1( tableIndex.m_index1 ), - m_weight1(tableIndex.m_weight1 ) - { - } - - - size_t TableIndex::getIndex1( ) const { - return m_index1; - } - - size_t TableIndex::getIndex2( ) const { - return m_index1 + 1; - } - - - double TableIndex::getWeight1( ) const { - return m_weight1; - } - - - double TableIndex::getWeight2( ) const { - return 1 - m_weight1; - } - - -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Tables/TableManager.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Tables/TableManager.cpp deleted file mode 100644 index 92d4551bb6..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Tables/TableManager.cpp +++ /dev/null @@ -1,1192 +0,0 @@ -/* - Copyright 2015 Statoil ASA. - Copyright 2018 IRIS - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -#include - -namespace Opm { - - TableManager::TableManager( const Deck& deck ) - : - m_tabdims( Tabdims(deck)), - m_aqudims( Aqudims(deck)), - hasImptvd (deck.hasKeyword("IMPTVD")), - hasEnptvd (deck.hasKeyword("ENPTVD")), - hasEqlnum (deck.hasKeyword("EQLNUM")) - { - if (deck.hasKeyword("JFUNC")) - jfunc.reset( new JFunc(deck) ); - - // determine the default resevoir temperature in Kelvin - m_rtemp = ParserKeywords::RTEMP::TEMP::defaultValue; - m_rtemp += Metric::TemperatureOffset; // <- default values always use METRIC as the unit system! - - initDims( deck ); - initSimpleTables( deck ); - initFullTables(deck, "PVTG", m_pvtgTables); - initFullTables(deck, "PVTO", m_pvtoTables); - - if( deck.hasKeyword( "PVTW" ) ) - this->m_pvtwTable = PvtwTable( deck.getKeyword( "PVTW" ) ); - - if( deck.hasKeyword( "PVCDO" ) ) - this->m_pvcdoTable = PvcdoTable( deck.getKeyword( "PVCDO" ) ); - - if( deck.hasKeyword( "DENSITY" ) ) - this->m_densityTable = DensityTable( deck.getKeyword( "DENSITY" ) ); - - if( deck.hasKeyword( "ROCK" ) ) - this->m_rockTable = RockTable( deck.getKeyword( "ROCK" ) ); - - if( deck.hasKeyword( "VISCREF" ) ) - this->m_viscrefTable = ViscrefTable( deck.getKeyword( "VISCREF" ) ); - - if( deck.hasKeyword( "WATDENT" ) ) - this->m_watdentTable = WatdentTable( deck.getKeyword( "WATDENT" ) ); - - if( deck.hasKeyword( "RTEMP" ) ) - m_rtemp = deck.getKeyword("RTEMP").getRecord(0).getItem("TEMP").getSIDouble( 0 ); - else if (deck.hasKeyword( "RTEMPA" ) ) - m_rtemp = deck.getKeyword("RTEMPA").getRecord(0).getItem("TEMP").getSIDouble( 0 ); - - if ( deck.hasKeyword( "ROCK2D") ) - initRockTables(deck, "ROCK2D", m_rock2dTables ); - - if ( deck.hasKeyword( "ROCK2DTR") ) - initRockTables(deck, "ROCK2DTR", m_rock2dtrTables ); - - if ( deck.hasKeyword( "PVTWSALT") ) - initPvtwsaltTables(deck, m_pvtwsaltTables ); - - if ( deck.hasKeyword( "BDENSITY") ) - initBrineTables(deck, m_bdensityTables ); - - if ( deck.hasKeyword( "SDENSITY") ) - initSolventTables(deck, m_sdensityTables ); - - if (deck.hasKeyword()) - this->gasDenT = DenT( deck.getKeyword()); - - if (deck.hasKeyword()) - this->oilDenT = DenT( deck.getKeyword()); - - if (deck.hasKeyword()) - this->watDenT = DenT( deck.getKeyword()); - - if (deck.hasKeyword()) { - auto stcondKeyword = deck.getKeyword("STCOND"); - this->stcond.temperature = stcondKeyword.getRecord(0).getItem("TEMPERATURE").getSIDouble(0); - this->stcond.pressure = stcondKeyword.getRecord(0).getItem("PRESSURE").getSIDouble(0); - } - - if (deck.hasKeyword()) { - this->m_plmixparTable = PlmixparTable(deck.getKeyword("PLMIXPAR")); - } - - if (deck.hasKeyword()) { - this->m_shrateTable = ShrateTable(deck.getKeyword("SHRATE")); - hasShrate = true; - } - - if (deck.hasKeyword()) { - this->m_stone1exTable = Stone1exTable(deck.getKeyword("STONE1EX")); - hasShrate = true; - } - - if (deck.hasKeyword()) { - this->m_tlmixparTable = TlmixparTable(deck.getKeyword("TLMIXPAR")); - } - - if (deck.hasKeyword()) { - this->m_plyvmhTable = PlyvmhTable(deck.getKeyword("PLYVMH")); - } - - using GC = ParserKeywords::GCOMPIDX; - if (deck.hasKeyword()) - this->m_gas_comp_index = deck.getKeyword().getRecord(0).getItem().get(0); - } - - TableManager& TableManager::operator=(const TableManager& data) { - m_simpleTables = data.m_simpleTables; - m_pvtgTables = data.m_pvtgTables; - m_pvtoTables = data.m_pvtoTables; - m_rock2dTables = data.m_rock2dTables; - m_rock2dtrTables = data.m_rock2dtrTables; - m_pvtwTable = data.m_pvtwTable; - m_pvcdoTable = data.m_pvcdoTable; - m_plyvmhTable = data.m_plyvmhTable; - m_densityTable = data.m_densityTable; - m_plmixparTable = data.m_plmixparTable; - m_shrateTable = data.m_shrateTable; - m_stone1exTable = data.m_stone1exTable; - m_tlmixparTable = data.m_tlmixparTable; - m_viscrefTable = data.m_viscrefTable; - m_watdentTable = data.m_watdentTable; - m_pvtwsaltTables = data.m_pvtwsaltTables; - m_bdensityTables = data.m_bdensityTables; - m_sdensityTables = data.m_sdensityTables; - m_plymwinjTables = data.m_plymwinjTables; - m_skprwatTables = data.m_skprwatTables; - m_skprpolyTables = data.m_skprpolyTables; - m_tabdims = data.m_tabdims; - m_regdims = data.m_regdims; - m_eqldims = data.m_eqldims; - m_aqudims = data.m_aqudims; - hasImptvd = data.hasImptvd; - hasEnptvd = data.hasEnptvd; - hasEqlnum = data.hasEqlnum; - hasShrate = data.hasShrate; - if (data.jfunc) - jfunc = std::make_shared(*data.jfunc); - m_rtemp = data.m_rtemp; - gasDenT = data.gasDenT; - oilDenT = data.oilDenT; - watDenT = data.watDenT; - stcond = data.stcond; - m_gas_comp_index = data.m_gas_comp_index; - - return *this; - } - - TableManager TableManager::serializeObject() - { - TableManager result; - result.m_simpleTables = {{"test", TableContainer::serializeObject()}}; - result.m_pvtgTables = {PvtgTable::serializeObject()}; - result.m_pvtoTables = {PvtoTable::serializeObject()}; - result.m_rock2dTables = {Rock2dTable::serializeObject()}; - result.m_rock2dtrTables = {Rock2dtrTable::serializeObject()}; - result.m_pvtwTable = PvtwTable::serializeObject(); - result.m_pvcdoTable = PvcdoTable::serializeObject(); - result.m_densityTable = DensityTable::serializeObject(); - result.m_plyvmhTable = PlyvmhTable::serializeObject(); - result.m_rockTable = RockTable::serializeObject(); - result.m_plmixparTable = PlmixparTable::serializeObject(); - result.m_shrateTable = ShrateTable::serializeObject(); - result.m_stone1exTable = Stone1exTable::serializeObject(); - result.m_tlmixparTable = TlmixparTable::serializeObject(); - result.m_viscrefTable = ViscrefTable::serializeObject(); - result.m_watdentTable = WatdentTable::serializeObject(); - result.m_pvtwsaltTables = {PvtwsaltTable::serializeObject()}; - result.m_bdensityTables = {BrineDensityTable::serializeObject()}; - result.m_sdensityTables = {SolventDensityTable::serializeObject()}; - result.m_plymwinjTables = {{1, Opm::PlymwinjTable::serializeObject()}}; - result.m_skprwatTables = {{2, Opm::SkprwatTable::serializeObject()}}; - result.m_skprpolyTables = {{3, Opm::SkprpolyTable::serializeObject()}}; - result.m_tabdims = Tabdims::serializeObject(); - result.m_regdims = Regdims::serializeObject(); - result.m_eqldims = Eqldims::serializeObject(); - result.hasImptvd = true; - result.hasEnptvd = true; - result.hasEqlnum = true; - result.hasShrate = true; - result.jfunc = std::make_shared(Opm::JFunc::serializeObject()); - result.oilDenT = DenT::serializeObject(); - result.gasDenT = DenT::serializeObject(); - result.watDenT = DenT::serializeObject(); - result.stcond = StandardCond::serializeObject(); - result.m_gas_comp_index = 77; - result.m_rtemp = 1.0; - - return result; - } - - void TableManager::initDims(const Deck& deck) { - using namespace Opm::ParserKeywords; - - if (deck.hasKeyword()) { - const auto& keyword = deck.getKeyword(); - const auto& record = keyword.getRecord(0); - int ntsequl = record.getItem().get< int >(0); - int nodes_p = record.getItem().get< int >(0); - int nodes_tab = record.getItem().get< int >(0); - int nttrvd = record.getItem().get< int >(0); - int ntsrvd = record.getItem().get< int >(0); - - m_eqldims = Eqldims(ntsequl , nodes_p , nodes_tab , nttrvd , ntsrvd ); - } - - if (deck.hasKeyword()) { - const auto& keyword = deck.getKeyword(); - const auto& record = keyword.getRecord(0); - int ntfip = record.getItem().get< int >(0); - int nmfipr = record.getItem().get< int >(0); - int nrfreg = record.getItem().get< int >(0); - int ntfreg = record.getItem().get< int >(0); - int nplmix = record.getItem().get< int >(0); - m_regdims = Regdims( ntfip , nmfipr , nrfreg , ntfreg , nplmix ); - } - } - - - void TableManager::addTables( const std::string& tableName , size_t numTables) { - m_simpleTables.emplace(std::make_pair(tableName , TableContainer( numTables ))); - } - - - bool TableManager::hasTables( const std::string& tableName ) const { - auto pair = m_simpleTables.find( tableName ); - if (pair == m_simpleTables.end()) - return false; - else { - const auto& tables = pair->second; - return !tables.empty(); - } - } - - - const TableContainer& TableManager::getTables( const std::string& tableName ) const { - auto pair = m_simpleTables.find( tableName ); - if (pair == m_simpleTables.end()) - throw std::invalid_argument("No such table collection: " + tableName); - else - return pair->second; - } - - TableContainer& TableManager::forceGetTables( const std::string& tableName , size_t numTables ) { - auto pair = m_simpleTables.find( tableName ); - if (pair == m_simpleTables.end()) { - addTables( tableName , numTables ); - pair = m_simpleTables.find( tableName ); - } - return pair->second; - } - - const DenT& TableManager::WatDenT() const { - return this->watDenT; - } - - const DenT& TableManager::GasDenT() const { - return this->gasDenT; - } - - const DenT& TableManager::OilDenT() const { - return this->oilDenT; - } - - const StandardCond& TableManager::stCond() const { - return this->stcond; - } - - const TableContainer& TableManager::operator[](const std::string& tableName) const { - return getTables(tableName); - } - - void TableManager::initSimpleTables(const Deck& deck) { - - addTables( "SWOF" , m_tabdims.getNumSatTables() ); - addTables( "SGWFN", m_tabdims.getNumSatTables() ); - addTables( "SGOF", m_tabdims.getNumSatTables() ); - addTables( "SLGOF", m_tabdims.getNumSatTables() ); - addTables( "SOF2", m_tabdims.getNumSatTables() ); - addTables( "SOF3", m_tabdims.getNumSatTables() ); - addTables( "SWFN", m_tabdims.getNumSatTables() ); - addTables( "SGFN", m_tabdims.getNumSatTables() ); - addTables( "SSFN", m_tabdims.getNumSatTables() ); - addTables( "MSFN", m_tabdims.getNumSatTables() ); - - addTables( "PLYADS", m_tabdims.getNumSatTables() ); - addTables( "PLYROCK", m_tabdims.getNumSatTables()); - addTables( "PLYVISC", m_tabdims.getNumPVTTables()); - addTables( "PLYDHFLF", m_tabdims.getNumPVTTables()); - - addTables( "FOAMADS", m_tabdims.getNumSatTables() ); - addTables( "FOAMMOB", m_tabdims.getNumPVTTables() ); - - addTables( "PVDG", m_tabdims.getNumPVTTables()); - addTables( "PVDO", m_tabdims.getNumPVTTables()); - addTables( "PVDS", m_tabdims.getNumPVTTables()); - - addTables( "SPECHEAT", m_tabdims.getNumPVTTables()); - addTables( "SPECROCK", m_tabdims.getNumSatTables()); - - addTables( "OILVISCT", m_tabdims.getNumPVTTables()); - addTables( "WATVISCT", m_tabdims.getNumPVTTables()); - addTables( "GASVISCT", m_tabdims.getNumPVTTables()); - - addTables( "PLYMAX", m_regdims.getNPLMIX()); - addTables( "RSVD", m_eqldims.getNumEquilRegions()); - addTables( "RVVD", m_eqldims.getNumEquilRegions()); - addTables( "PBVD", m_eqldims.getNumEquilRegions()); - addTables( "PDVD", m_eqldims.getNumEquilRegions()); - addTables( "SALTVD", m_eqldims.getNumEquilRegions()); - - addTables( "AQUTAB", m_aqudims.getNumInfluenceTablesCT()); - { - size_t numMiscibleTables = ParserKeywords::MISCIBLE::NTMISC::defaultValue; - if (deck.hasKeyword()) { - const auto& keyword = deck.getKeyword(); - const auto& record = keyword.getRecord(0); - numMiscibleTables = static_cast(record.getItem().get< int >(0)); - } - addTables( "SORWMIS", numMiscibleTables); - addTables( "SGCWMIS", numMiscibleTables); - addTables( "MISC", numMiscibleTables); - addTables( "PMISC", numMiscibleTables); - addTables( "TLPMIXPA",numMiscibleTables); - } - - { - size_t numEndScaleTables = ParserKeywords::ENDSCALE::NUM_TABLES::defaultValue; - - if (deck.hasKeyword()) { - const auto& keyword = deck.getKeyword(); - const auto& record = keyword.getRecord(0); - numEndScaleTables = static_cast(record.getItem().get< int >(0)); - } - - addTables( "ENKRVD", numEndScaleTables); - addTables( "ENPTVD", numEndScaleTables); - addTables( "IMKRVD", numEndScaleTables); - addTables( "IMPTVD", numEndScaleTables); - } - { - size_t numRocktabTables = ParserKeywords::ROCKCOMP::NTROCC::defaultValue; - - if (deck.hasKeyword()) { - const auto& keyword = deck.getKeyword(); - const auto& record = keyword.getRecord(0); - numRocktabTables = static_cast(record.getItem().get< int >(0)); - } - addTables( "ROCKTAB", numRocktabTables); - addTables( "ROCKWNOD", numRocktabTables); - addTables( "OVERBURD", numRocktabTables); - } - - - initSimpleTableContainer(deck, "SGWFN", m_tabdims.getNumSatTables()); - initSimpleTableContainer(deck, "SOF2" , m_tabdims.getNumSatTables()); - initSimpleTableContainer(deck, "SOF3" , m_tabdims.getNumSatTables()); - { - initSimpleTableContainerWithJFunc(deck, "SWOF", m_tabdims.getNumSatTables()); - initSimpleTableContainerWithJFunc(deck, "SGOF", m_tabdims.getNumSatTables()); - initSimpleTableContainerWithJFunc(deck, "SWFN", m_tabdims.getNumSatTables()); - initSimpleTableContainerWithJFunc(deck, "SGFN", m_tabdims.getNumSatTables()); - initSimpleTableContainerWithJFunc(deck, "SLGOF", m_tabdims.getNumSatTables()); - - } - initSimpleTableContainer(deck, "SSFN" , m_tabdims.getNumSatTables()); - initSimpleTableContainer(deck, "MSFN" , m_tabdims.getNumSatTables()); - - initSimpleTableContainer(deck, "RSVD" , m_eqldims.getNumEquilRegions()); - initSimpleTableContainer(deck, "RVVD" , m_eqldims.getNumEquilRegions()); - initSimpleTableContainer(deck, "PBVD" , m_eqldims.getNumEquilRegions()); - initSimpleTableContainer(deck, "PDVD" , m_eqldims.getNumEquilRegions()); - initSimpleTableContainer(deck, "SALTVD" , m_eqldims.getNumEquilRegions()); - initSimpleTableContainer(deck, "AQUTAB" , m_aqudims.getNumInfluenceTablesCT()); - { - size_t numEndScaleTables = ParserKeywords::ENDSCALE::NUM_TABLES::defaultValue; - - if (deck.hasKeyword()) { - const auto& keyword = deck.getKeyword(); - const auto& record = keyword.getRecord(0); - numEndScaleTables = static_cast(record.getItem().get< int >(0)); - } - - initSimpleTableContainer( deck , "ENKRVD", numEndScaleTables); - initSimpleTableContainer( deck , "ENPTVD", numEndScaleTables); - initSimpleTableContainer( deck , "IMKRVD", numEndScaleTables); - initSimpleTableContainer( deck , "IMPTVD", numEndScaleTables); - } - - { - size_t numMiscibleTables = ParserKeywords::MISCIBLE::NTMISC::defaultValue; - if (deck.hasKeyword()) { - const auto& keyword = deck.getKeyword(); - const auto& record = keyword.getRecord(0); - numMiscibleTables = static_cast(record.getItem().get< int >(0)); - } - initSimpleTableContainer(deck, "SORWMIS", numMiscibleTables); - initSimpleTableContainer(deck, "SGCWMIS", numMiscibleTables); - initSimpleTableContainer(deck, "MISC", numMiscibleTables); - initSimpleTableContainer(deck, "PMISC", numMiscibleTables); - initSimpleTableContainer(deck, "TLPMIXPA", numMiscibleTables); - - } - { - size_t numRocktabTables = ParserKeywords::ROCKCOMP::NTROCC::defaultValue; - - if (deck.hasKeyword()) { - const auto& keyword = deck.getKeyword(); - const auto& record = keyword.getRecord(0); - numRocktabTables = static_cast(record.getItem().get< int >(0)); - } - initSimpleTableContainer(deck, "ROCKWNOD", numRocktabTables); - initSimpleTableContainer(deck, "OVERBURD", numRocktabTables); - } - - initSimpleTableContainer(deck, "PVDG", m_tabdims.getNumPVTTables()); - initSimpleTableContainer(deck, "PVDO", m_tabdims.getNumPVTTables()); - initSimpleTableContainer(deck, "PVDS", m_tabdims.getNumPVTTables()); - initSimpleTableContainer(deck, "SPECHEAT", m_tabdims.getNumPVTTables()); - initSimpleTableContainer(deck, "SPECROCK", m_tabdims.getNumSatTables()); - initSimpleTableContainer(deck, "OILVISCT", m_tabdims.getNumPVTTables()); - initSimpleTableContainer(deck, "WATVISCT", m_tabdims.getNumPVTTables()); - - initSimpleTableContainer(deck, "PLYADS", m_tabdims.getNumSatTables()); - initSimpleTableContainer(deck, "PLYVISC", m_tabdims.getNumPVTTables()); - initSimpleTableContainer(deck, "PLYDHFLF", m_tabdims.getNumPVTTables()); - - initSimpleTableContainer(deck, "FOAMADS", m_tabdims.getNumSatTables()); - initSimpleTableContainer(deck, "FOAMMOB", m_tabdims.getNumPVTTables()); - - initPlyrockTables(deck); - initPlymaxTables(deck); - initGasvisctTables(deck); - initRTempTables(deck); - initRocktabTables(deck); - initPlyshlogTables(deck); - initPlymwinjTables(deck); - initSkprpolyTables(deck); - initSkprwatTables(deck); - } - - - void TableManager::initRTempTables(const Deck& deck) { - // the temperature vs depth table. the problem here is that - // the TEMPVD (E300) and RTEMPVD (E300 + E100) keywords are - // synonymous, but we want to provide only a single cannonical - // API here, so we jump through some small hoops... - if (deck.hasKeyword("TEMPVD") && deck.hasKeyword("RTEMPVD")) - throw std::invalid_argument("The TEMPVD and RTEMPVD tables are mutually exclusive!"); - else if (deck.hasKeyword("TEMPVD")) - initSimpleTableContainer(deck, "TEMPVD", "RTEMPVD", m_eqldims.getNumEquilRegions()); - else if (deck.hasKeyword("RTEMPVD")) - initSimpleTableContainer(deck, "RTEMPVD", "RTEMPVD" , m_eqldims.getNumEquilRegions()); - } - - - void TableManager::initGasvisctTables(const Deck& deck) { - - const std::string keywordName = "GASVISCT"; - size_t numTables = m_tabdims.getNumPVTTables(); - - if (!deck.hasKeyword(keywordName)) - return; // the table is not featured by the deck... - - auto& container = forceGetTables(keywordName , numTables); - - if (deck.count(keywordName) > 1) { - complainAboutAmbiguousKeyword(deck, keywordName); - return; - } - - const auto& tableKeyword = deck.getKeyword(keywordName); - for (size_t tableIdx = 0; tableIdx < tableKeyword.size(); ++tableIdx) { - const auto& tableRecord = tableKeyword.getRecord( tableIdx ); - const auto& dataItem = tableRecord.getItem( 0 ); - if (dataItem.data_size() > 0) { - std::shared_ptr table = std::make_shared( deck , dataItem ); - container.addTable( tableIdx , table ); - } - } - } - - - void TableManager::initPlyshlogTables(const Deck& deck) { - const std::string keywordName = "PLYSHLOG"; - - if (!deck.hasKeyword(keywordName)) { - return; - } - - if (!deck.count(keywordName)) { - complainAboutAmbiguousKeyword(deck, keywordName); - return; - } - size_t numTables = m_tabdims.getNumPVTTables(); - auto& container = forceGetTables(keywordName , numTables); - const auto& tableKeyword = deck.getKeyword(keywordName); - - if (tableKeyword.size() > 2) { - std::string msg = "The Parser does currently NOT support the alternating record schema used in PLYSHLOG"; - throw std::invalid_argument( msg ); - } - - for (size_t tableIdx = 0; tableIdx < tableKeyword.size(); tableIdx += 2) { - const auto& indexRecord = tableKeyword.getRecord( tableIdx ); - const auto& dataRecord = tableKeyword.getRecord( tableIdx + 1); - const auto& dataItem = dataRecord.getItem( 0 ); - if (dataItem.data_size() > 0) { - std::shared_ptr table = std::make_shared(indexRecord , dataRecord); - container.addTable( tableIdx , table ); - } - } - } - - void TableManager::initPlymwinjTables(const Deck& deck) { - if (!deck.hasKeyword("PLYMWINJ")) { - return; - } - - const size_t num_tables = deck.count("PLYMWINJ"); - const auto& keywords = deck.getKeywordList(); - for (size_t i = 0; i < num_tables; ++i) { - const DeckKeyword &keyword = *keywords[i]; - - // not const for std::move - PlymwinjTable table(keyword); - - // we need to check the value of the table_number against the allowed ones - const int table_number = table.getTableNumber(); - // we should check if the table_number is valid - if (m_plymwinjTables.find(table_number) == m_plymwinjTables.end()) { - m_plymwinjTables.insert(std::make_pair(table_number, std::move(table))); - } else { - throw std::invalid_argument("Duplicated table number " - + std::to_string(table_number) - + " for keyword PLYMWINJ found"); - } - } - } - - void TableManager::initSkprwatTables(const Opm::Deck &deck) { - if (!deck.hasKeyword("SKPRWAT")) { - return; - } - - const size_t num_tables = deck.count("SKPRWAT"); - const auto& keywords = deck.getKeywordList(); - for (size_t i = 0; i < num_tables; ++i) { - const DeckKeyword &keyword = *keywords[i]; - - // not const for std::move - SkprwatTable table(keyword); - - // we need to check the value of the table_number against the allowed ones - const int table_number = table.getTableNumber(); - // we should check if the table_number is valid - if (m_skprwatTables.find(table_number) == m_skprwatTables.end()) { - m_skprwatTables.insert(std::make_pair(table_number, std::move(table))); - } else { - throw std::invalid_argument("Duplicated table number " - + std::to_string(table_number) - + " for keyword SKPRWAT found"); - } - } - } - - void TableManager::initSkprpolyTables(const Opm::Deck &deck) { - if (!deck.hasKeyword("SKPRPOLY")) { - return; - } - - const size_t num_tables = deck.count("SKPRPOLY"); - const auto& keywords = deck.getKeywordList(); - for (size_t i = 0; i < num_tables; ++i) { - const DeckKeyword &keyword = *keywords[i]; - - // not const for std::move - SkprpolyTable table(keyword); - - // we need to check the value of the table_number against the allowed ones - const int table_number = table.getTableNumber(); - // we should check if the table_number is valid - if (m_skprpolyTables.find(table_number) == m_skprpolyTables.end()) { - m_skprpolyTables.insert(std::make_pair(table_number, std::move(table))); - } else { - throw std::invalid_argument("Duplicated table number " - + std::to_string(table_number) - + " for keyword SKPRPOLY found"); - } - } - } - - void TableManager::initPlyrockTables(const Deck& deck) { - size_t numTables = m_tabdims.getNumSatTables(); - const std::string keywordName = "PLYROCK"; - if (!deck.hasKeyword(keywordName)) { - return; - } - - if (!deck.count(keywordName)) { - complainAboutAmbiguousKeyword(deck, keywordName); - return; - } - - const auto& keyword = deck.getKeyword(); - auto& container = forceGetTables(keywordName , numTables); - for (size_t tableIdx = 0; tableIdx < keyword.size(); ++tableIdx) { - const auto& tableRecord = keyword.getRecord( tableIdx ); - std::shared_ptr table = std::make_shared(tableRecord); - container.addTable( tableIdx , table ); - } - } - - - void TableManager::initPlymaxTables(const Deck& deck) { - size_t numTables = m_regdims.getNPLMIX(); - const std::string keywordName = "PLYMAX"; - if (!deck.hasKeyword(keywordName)) { - return; - } - - if (!deck.count(keywordName)) { - complainAboutAmbiguousKeyword(deck, keywordName); - return; - } - - const auto& keyword = deck.getKeyword(); - auto& container = forceGetTables(keywordName , numTables); - for (size_t tableIdx = 0; tableIdx < keyword.size(); ++tableIdx) { - const auto& tableRecord = keyword.getRecord( tableIdx ); - std::shared_ptr table = std::make_shared( tableRecord ); - container.addTable( tableIdx , table ); - } - } - - - - void TableManager::initRocktabTables(const Deck& deck) { - if (!deck.hasKeyword("ROCKTAB")) - return; // ROCKTAB is not featured by the deck... - - if (deck.count("ROCKTAB") > 1) { - complainAboutAmbiguousKeyword(deck, "ROCKTAB"); - return; - } - const auto& rockcompKeyword = deck.getKeyword(); - const auto& record = rockcompKeyword.getRecord( 0 ); - size_t numTables = record.getItem().get< int >(0); - auto& container = forceGetTables("ROCKTAB" , numTables); - const auto rocktabKeyword = deck.getKeyword("ROCKTAB"); - - bool isDirectional = deck.hasKeyword(); - bool useStressOption = false; - if (deck.hasKeyword()) { - const auto rockoptsKeyword = deck.getKeyword(); - const auto& rockoptsRecord = rockoptsKeyword.getRecord(0); - const auto& item = rockoptsRecord.getItem(); - useStressOption = (item.getTrimmedString(0) == "STRESS"); - } - - for (size_t tableIdx = 0; tableIdx < rocktabKeyword.size(); ++tableIdx) { - const auto& tableRecord = rocktabKeyword.getRecord( tableIdx ); - const auto& dataItem = tableRecord.getItem( 0 ); - if (dataItem.data_size() > 0) { - std::shared_ptr table = std::make_shared( dataItem , isDirectional, useStressOption ); - container.addTable( tableIdx , table ); - } - } - } - - size_t TableManager::numFIPRegions() const { - size_t ntfip = m_tabdims.getNumFIPRegions(); - if (m_regdims.getNTFIP( ) > ntfip) - return m_regdims.getNTFIP( ); - else - return ntfip; - } - - const Tabdims& TableManager::getTabdims() const { - return m_tabdims; - } - - const Eqldims& TableManager::getEqldims() const { - return m_eqldims; - } - - const Aqudims& TableManager::getAqudims() const { - return m_aqudims; - } - - const Regdims& TableManager::getRegdims() const { - return this->m_regdims; - } - - /* - const std::vector& TableManager::getSwofTables() const { - return m_swofTables; - } - */ - - const TableContainer& TableManager::getSwofTables() const { - return getTables("SWOF"); - } - - const TableContainer& TableManager::getSgwfnTables() const { - return getTables("SGWFN"); - } - - const TableContainer& TableManager::getSlgofTables() const { - return getTables("SLGOF"); - } - - - const TableContainer& TableManager::getSgofTables() const { - return getTables("SGOF"); - } - - const TableContainer& TableManager::getSof2Tables() const { - return getTables("SOF2"); - } - - const TableContainer& TableManager::getSof3Tables() const { - return getTables("SOF3"); - } - - const TableContainer& TableManager::getSwfnTables() const { - return getTables("SWFN"); - } - - const TableContainer& TableManager::getSgfnTables() const { - return getTables("SGFN"); - } - - const TableContainer& TableManager::getSsfnTables() const { - return getTables("SSFN"); - } - - const TableContainer& TableManager::getRsvdTables() const { - return getTables("RSVD"); - } - - const TableContainer& TableManager::getRvvdTables() const { - return getTables("RVVD"); - } - - const TableContainer& TableManager::getPbvdTables() const { - return getTables("PBVD"); - } - - const TableContainer& TableManager::getPdvdTables() const { - return getTables("PDVD"); - } - - const TableContainer& TableManager::getSaltvdTables() const { - return getTables("SALTVD"); - } - - const TableContainer& TableManager::getEnkrvdTables() const { - return getTables("ENKRVD"); - } - - const TableContainer& TableManager::getEnptvdTables() const { - return getTables("ENPTVD"); - } - - - const TableContainer& TableManager::getImkrvdTables() const { - return getTables("IMKRVD"); - } - - const TableContainer& TableManager::getImptvdTables() const { - return getTables("IMPTVD"); - } - - const TableContainer& TableManager::getPvdgTables() const { - return getTables("PVDG"); - } - - const TableContainer& TableManager::getPvdoTables() const { - return getTables("PVDO"); - } - - const TableContainer& TableManager::getPvdsTables() const { - return getTables("PVDS"); - } - - const TableContainer& TableManager::getSpecheatTables() const { - return getTables("SPECHEAT"); - } - - const TableContainer& TableManager::getSpecrockTables() const { - return getTables("SPECROCK"); - } - - const TableContainer& TableManager::getOilvisctTables() const { - return getTables("OILVISCT"); - } - - const TableContainer& TableManager::getWatvisctTables() const { - return getTables("WATVISCT"); - } - - const TableContainer& TableManager::getGasvisctTables() const { - return getTables("GASVISCT"); - } - - const TableContainer& TableManager::getRtempvdTables() const { - return getTables("RTEMPVD"); - } - - const TableContainer& TableManager::getRocktabTables() const { - return getTables("ROCKTAB"); - } - - - const TableContainer& TableManager::getPlyadsTables() const { - return getTables("PLYADS"); - } - - const TableContainer& TableManager::getPlyviscTables() const { - return getTables("PLYVISC"); - } - - const TableContainer& TableManager::getPlydhflfTables() const { - return getTables("PLYDHFL"); - } - - const TableContainer& TableManager::getPlymaxTables() const { - return getTables("PLYMAX"); - } - - const TableContainer& TableManager::getPlyrockTables() const { - return getTables("PLYROCK"); - } - - const TableContainer& TableManager::getPlyshlogTables() const { - return getTables("PLYSHLOG"); - } - - const TableContainer& TableManager::getAqutabTables() const { - return getTables("AQUTAB"); - } - - const TableContainer& TableManager::getFoamadsTables() const { - return getTables("FOAMADS"); - } - - const TableContainer& TableManager::getFoammobTables() const { - return getTables("FOAMMOB"); - } - - const std::vector& TableManager::getPvtgTables() const { - return m_pvtgTables; - } - - const std::vector& TableManager::getPvtoTables() const { - return m_pvtoTables; - } - - const std::vector& TableManager::getRock2dTables() const { - return m_rock2dTables; - } - - const std::vector& TableManager::getRock2dtrTables() const { - return m_rock2dtrTables; - } - - const TableContainer& TableManager::getRockwnodTables() const { - return getTables("ROCKWNOD"); - } - - const TableContainer& TableManager::getOverburdTables() const { - return getTables("OVERBURD"); - } - - const PvtwTable& TableManager::getPvtwTable() const { - return this->m_pvtwTable; - } - - const std::vector& TableManager::getPvtwSaltTables() const { - return this->m_pvtwsaltTables; - } - - const std::vector& TableManager::getBrineDensityTables() const { - return this->m_bdensityTables; - } - - const std::vector& TableManager::getSolventDensityTables() const { - return this->m_sdensityTables; - } - - const PvcdoTable& TableManager::getPvcdoTable() const { - return this->m_pvcdoTable; - } - - const DensityTable& TableManager::getDensityTable() const { - return this->m_densityTable; - } - - const RockTable& TableManager::getRockTable() const { - return this->m_rockTable; - } - - const ViscrefTable& TableManager::getViscrefTable() const { - return this->m_viscrefTable; - } - - const WatdentTable& TableManager::getWatdentTable() const { - return this->m_watdentTable; - } - - const TableContainer& TableManager::getMsfnTables() const { - return getTables("MSFN"); - } - const TableContainer& TableManager::getPmiscTables() const { - return getTables("PMISC"); - } - const TableContainer& TableManager::getMiscTables() const { - return getTables("MISC"); - } - const TableContainer& TableManager::getSgcwmisTables() const { - return getTables("SGCWMIS"); - } - const TableContainer& TableManager::getSorwmisTables() const { - return getTables("SORWMIS"); - } - const TableContainer& TableManager::getTlpmixpaTables() const { - return getTables("TLPMIXPA"); - } - - const PlmixparTable& TableManager::getPlmixparTable() const { - return m_plmixparTable; - } - - const ShrateTable& TableManager::getShrateTable() const { - return m_shrateTable; - } - - const Stone1exTable& TableManager::getStone1exTable() const { - return m_stone1exTable; - } - - const TlmixparTable& TableManager::getTlmixparTable() const { - return m_tlmixparTable; - } - - const JFunc& TableManager::getJFunc() const { - if (!jfunc) - throw std::invalid_argument("Cannot get JFUNC table when JFUNC not in deck"); - return *jfunc; - } - - const PlyvmhTable& TableManager::getPlyvmhTable() const { - return m_plyvmhTable; - } - - const std::map& TableManager::getPlymwinjTables() const { - return m_plymwinjTables; - } - - const std::map& TableManager::getSkprwatTables() const { - return m_skprwatTables; - } - - const std::map& TableManager::getSkprpolyTables() const { - return m_skprpolyTables; - } - - const std::map& TableManager::getSimpleTables() const { - return m_simpleTables; - } - - bool TableManager::useImptvd() const { - return hasImptvd; - } - - bool TableManager::useEnptvd() const { - return hasEnptvd; - } - - bool TableManager::useEqlnum() const { - return hasEqlnum; - } - - bool TableManager::useShrate() const { - return hasShrate; - } - - bool TableManager::useJFunc() const { - if (jfunc) - return true; - else - return false; - } - - - void TableManager::complainAboutAmbiguousKeyword(const Deck& deck, const std::string& keywordName) { - OpmLog::error("The " + keywordName + " keyword must be unique in the deck. Ignoring all!"); - const auto& keywords = deck.getKeywordList(keywordName); - for (size_t i = 0; i < keywords.size(); ++i) { - std::string msg = "Ambiguous keyword "+keywordName+" defined here"; - OpmLog::error(Log::fileMessage(keywords[i]->location(), msg)); - } - } - - double TableManager::rtemp() const { - return this->m_rtemp; - } - - std::size_t TableManager::gas_comp_index() const { - return this->m_gas_comp_index; - } - - bool TableManager::operator==(const TableManager& data) const { - bool jfuncOk = false; - if (jfunc && data.jfunc) - jfuncOk = *jfunc == *data.jfunc; - if (!jfunc && !data.jfunc) - jfuncOk = true; - - return m_simpleTables == data.m_simpleTables && - m_pvtgTables == data.m_pvtgTables && - m_pvtoTables == data.m_pvtoTables && - m_rock2dTables == data.m_rock2dTables && - m_rock2dtrTables == data.m_rock2dtrTables && - m_pvtwTable == data.m_pvtwTable && - m_pvcdoTable == data.m_pvcdoTable && - m_densityTable == data.m_densityTable && - m_plmixparTable == data.m_plmixparTable && - m_plyvmhTable == data.m_plyvmhTable && - m_shrateTable == data.m_shrateTable && - m_stone1exTable == data.m_stone1exTable && - m_tlmixparTable == data.m_tlmixparTable && - m_viscrefTable == data.m_viscrefTable && - m_watdentTable == data.m_watdentTable && - m_pvtwsaltTables == data.m_pvtwsaltTables && - m_bdensityTables == data.m_bdensityTables && - m_sdensityTables == data.m_sdensityTables && - m_plymwinjTables == data.m_plymwinjTables && - m_skprwatTables == data.m_skprwatTables && - m_skprpolyTables == data.m_skprpolyTables && - m_tabdims == data.m_tabdims && - m_regdims == data.m_regdims && - m_eqldims == data.m_eqldims && - m_aqudims == data.m_aqudims && - hasImptvd == data.hasImptvd && - hasEnptvd == data.hasEnptvd && - hasEqlnum == data.hasEqlnum && - hasShrate == data.hasShrate && - gasDenT == data.gasDenT && - oilDenT == data.oilDenT && - watDenT == data.watDenT && - stcond == data.stcond && - jfuncOk && - m_rtemp == data.m_rtemp && - m_gas_comp_index == data.m_gas_comp_index; - } - - void TableManager::initSolventTables(const Deck& deck, std::vector& solventtables) { - size_t numTables = m_tabdims.getNumPVTTables(); - solventtables.resize(numTables); - - const auto& keyword = deck.getKeyword("SDENSITY"); - size_t numEntries = keyword.size(); - assert(numEntries == numTables); - for (unsigned lineIdx = 0; lineIdx < numEntries; ++lineIdx) { - solventtables[lineIdx].init(keyword.getRecord(lineIdx)); - } - } - - TableManager::SplitSimpleTables TableManager::splitSimpleTable(std::map& simpleTables) - { - SplitSimpleTables result; - - // PlyshlogTable need special treatment - auto it = simpleTables.find("PLYSHLOG"); - if (it != simpleTables.end()) { - result.plyshMax = it->second.max(); - for (const auto& mapIt : it->second.tables()) { - auto ptr = std::static_pointer_cast(mapIt.second); - result.plyshMap.insert(std::make_pair(mapIt.first, ptr)); - } - simpleTables.erase(it); - } - - // RocktabTable need special treatment - it = simpleTables.find("ROCKMAP"); - if (it != simpleTables.end()) { - result.rockMax = it->second.max(); - for (const auto& mapIt : it->second.tables()) { - auto ptr = std::static_pointer_cast(mapIt.second); - result.rockMap.insert(std::make_pair(mapIt.first, ptr)); - } - simpleTables.erase(it); - } - - return result; - } -} - - diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Tables/TableSchema.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Tables/TableSchema.cpp deleted file mode 100644 index 890cd5a724..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Tables/TableSchema.cpp +++ /dev/null @@ -1,56 +0,0 @@ -/* - Copyright 2015 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ -#include - -#include - -namespace Opm { - - TableSchema TableSchema::serializeObject() - { - TableSchema result; - result.m_columns.insert({"test1", ColumnSchema::serializeObject()}); - - return result; - } - - void TableSchema::addColumn( ColumnSchema column ) { - m_columns.insert( std::make_pair( column.name(), column )); - } - - const ColumnSchema& TableSchema::getColumn( const std::string& name ) const { - return m_columns.get( name ); - } - - const ColumnSchema& TableSchema::getColumn( size_t columnIndex ) const { - return m_columns.iget( columnIndex ); - } - - size_t TableSchema::size() const { - return m_columns.size(); - } - - bool TableSchema::hasColumn(const std::string& name) const { - return m_columns.count( name ) > 0; - } - - bool TableSchema::operator==(const TableSchema& data) const { - return this->m_columns == data.m_columns; - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Tables/Tables.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Tables/Tables.cpp deleted file mode 100644 index d33fa286b3..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/Tables/Tables.cpp +++ /dev/null @@ -1,1389 +0,0 @@ -/* - Copyright (C) 2013 by Andreas Lauser - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -namespace Opm { - -PvtgTable::PvtgTable( const DeckKeyword& keyword, size_t tableIdx ) : - PvtxTable("P") { - - m_underSaturatedSchema.addColumn( ColumnSchema( "RV" , Table::STRICTLY_DECREASING , Table::DEFAULT_NONE )); - m_underSaturatedSchema.addColumn( ColumnSchema( "BG" , Table::RANDOM , Table::DEFAULT_LINEAR )); - m_underSaturatedSchema.addColumn( ColumnSchema( "MUG" , Table::RANDOM , Table::DEFAULT_LINEAR )); - - m_saturatedSchema.addColumn( ColumnSchema( "PG" , Table::STRICTLY_INCREASING , Table::DEFAULT_NONE )); - m_saturatedSchema.addColumn( ColumnSchema( "RV" , Table::RANDOM , Table::DEFAULT_NONE )); - m_saturatedSchema.addColumn( ColumnSchema( "BG" , Table::RANDOM , Table::DEFAULT_LINEAR )); - m_saturatedSchema.addColumn( ColumnSchema( "MUG" , Table::RANDOM , Table::DEFAULT_LINEAR )); - - PvtxTable::init(keyword, tableIdx); - } - -PvtgTable PvtgTable::serializeObject() { - PvtgTable result; - static_cast(result) = PvtxTable::serializeObject(); - - return result; -} - -bool PvtgTable::operator==(const PvtgTable& data) const { - return static_cast(*this) == static_cast(data); -} - -PvtoTable::PvtoTable( const DeckKeyword& keyword, size_t tableIdx) : - PvtxTable("RS") { - m_underSaturatedSchema.addColumn( ColumnSchema( "P" , Table::STRICTLY_INCREASING , Table::DEFAULT_NONE )); - m_underSaturatedSchema.addColumn( ColumnSchema( "BO" , Table::STRICTLY_DECREASING, Table::DEFAULT_LINEAR )); - m_underSaturatedSchema.addColumn( ColumnSchema( "MU" , Table::RANDOM , Table::DEFAULT_LINEAR )); - - m_saturatedSchema.addColumn( ColumnSchema( "RS" , Table::STRICTLY_INCREASING , Table::DEFAULT_NONE )); - m_saturatedSchema.addColumn( ColumnSchema( "P" , Table::RANDOM , Table::DEFAULT_NONE )); - m_saturatedSchema.addColumn( ColumnSchema( "BO" , Table::STRICTLY_INCREASING, Table::DEFAULT_LINEAR )); - m_saturatedSchema.addColumn( ColumnSchema( "MU" , Table::RANDOM , Table::DEFAULT_LINEAR )); - - PvtxTable::init(keyword , tableIdx); - } - -PvtoTable PvtoTable::serializeObject() { - PvtoTable result; - static_cast(result) = PvtxTable::serializeObject(); - - return result; -} - -bool PvtoTable::operator==(const PvtoTable& data) const { - return static_cast(*this) == static_cast(data); -} - - -SpecheatTable::SpecheatTable(const DeckItem& item) -{ - m_schema.addColumn(ColumnSchema("TEMPERATURE", Table::STRICTLY_INCREASING, Table::DEFAULT_NONE)); - m_schema.addColumn(ColumnSchema("CV_OIL", Table::RANDOM, Table::DEFAULT_LINEAR)); - m_schema.addColumn(ColumnSchema("CV_WATER", Table::RANDOM, Table::DEFAULT_LINEAR)); - m_schema.addColumn(ColumnSchema("CV_GAS", Table::RANDOM, Table::DEFAULT_LINEAR)); - - SimpleTable::init(item); -} - -const TableColumn& SpecheatTable::getTemperatureColumn() const -{ return SimpleTable::getColumn(0); } - -const TableColumn& SpecheatTable::getCvOilColumn() const -{ return SimpleTable::getColumn(1); } - -const TableColumn& SpecheatTable::getCvWaterColumn() const -{ return SimpleTable::getColumn(2); } - -const TableColumn& SpecheatTable::getCvGasColumn() const -{ return SimpleTable::getColumn(3); } - -SpecrockTable::SpecrockTable(const DeckItem& item) -{ - m_schema.addColumn(ColumnSchema("TEMPERATURE", Table::STRICTLY_INCREASING, Table::DEFAULT_NONE)); - m_schema.addColumn(ColumnSchema("CV_ROCK", Table::RANDOM, Table::DEFAULT_LINEAR)); - - SimpleTable::init(item); -} - -const TableColumn& SpecrockTable::getTemperatureColumn() const -{ return SimpleTable::getColumn(0); } - -const TableColumn& SpecrockTable::getCvRockColumn() const -{ return SimpleTable::getColumn(1); } - -SwofTable::SwofTable( const DeckItem& item , const bool jfunc) { - - m_schema.addColumn( ColumnSchema( "SW" , Table::STRICTLY_INCREASING , Table::DEFAULT_NONE) ); - m_schema.addColumn( ColumnSchema( "KRW" , Table::RANDOM , Table::DEFAULT_LINEAR) ); - m_schema.addColumn( ColumnSchema( "KROW" , Table::RANDOM , Table::DEFAULT_LINEAR) ); - m_schema.addColumn( ColumnSchema( "PCOW" , Table::RANDOM , Table::DEFAULT_LINEAR) ); - - m_jfunc = jfunc; - SimpleTable::init( item ); -} - -const TableColumn& SwofTable::getSwColumn() const { - return SimpleTable::getColumn(0); -} - -const TableColumn& SwofTable::getKrwColumn() const { - return SimpleTable::getColumn(1); -} - -const TableColumn& SwofTable::getKrowColumn() const { - return SimpleTable::getColumn(2); -} - -const TableColumn& SwofTable::getPcowColumn() const { - SimpleTable::assertJFuncPressure(false); - return SimpleTable::getColumn(3); -} - -const TableColumn& SwofTable::getJFuncColumn() const { - SimpleTable::assertJFuncPressure(true); - return SimpleTable::getColumn(3); -} - -SgwfnTable::SgwfnTable( const DeckItem& item ) { - - m_schema.addColumn( ColumnSchema( "SG" , Table::STRICTLY_INCREASING , Table::DEFAULT_NONE ) ); - m_schema.addColumn( ColumnSchema( "KRG" , Table::RANDOM , Table::DEFAULT_LINEAR ) ); - m_schema.addColumn( ColumnSchema( "KRGW" , Table::RANDOM , Table::DEFAULT_LINEAR ) ); - m_schema.addColumn( ColumnSchema( "PCGW" , Table::RANDOM , Table::DEFAULT_LINEAR ) ); - - SimpleTable::init( item ); -} - -const TableColumn& SgwfnTable::getSgColumn() const { - return SimpleTable::getColumn(0); -} - -const TableColumn& SgwfnTable::getKrgColumn() const { - return SimpleTable::getColumn(1); -} - -const TableColumn& SgwfnTable::getKrgwColumn() const { - return SimpleTable::getColumn(2); -} - -const TableColumn& SgwfnTable::getPcgwColumn() const { - return SimpleTable::getColumn(3); -} - -SgofTable::SgofTable( const DeckItem& item , const bool jfunc) { - m_schema.addColumn( ColumnSchema("SG" , Table::STRICTLY_INCREASING , Table::DEFAULT_NONE)); - m_schema.addColumn( ColumnSchema("KRG" , Table::RANDOM , Table::DEFAULT_LINEAR )); - m_schema.addColumn( ColumnSchema("KROG" , Table::RANDOM , Table::DEFAULT_LINEAR )); - m_schema.addColumn( ColumnSchema("PCOG" , Table::RANDOM , Table::DEFAULT_LINEAR )); - - m_jfunc = jfunc; - SimpleTable::init( item ); -} - -const TableColumn& SgofTable::getSgColumn() const { - return SimpleTable::getColumn(0); -} - -const TableColumn& SgofTable::getKrgColumn() const { - return SimpleTable::getColumn(1); -} - -const TableColumn& SgofTable::getKrogColumn() const { - return SimpleTable::getColumn(2); -} - -const TableColumn& SgofTable::getPcogColumn() const { - SimpleTable::assertJFuncPressure(false); - return SimpleTable::getColumn(3); -} - -const TableColumn& SgofTable::getJFuncColumn() const { - SimpleTable::assertJFuncPressure(true); - return SimpleTable::getColumn(3); -} - -SlgofTable::SlgofTable( const DeckItem& item, const bool jfunc ) { - m_schema.addColumn( ColumnSchema("SL" , Table::STRICTLY_INCREASING , Table::DEFAULT_NONE )); - m_schema.addColumn( ColumnSchema("KRG" , Table::DECREASING , Table::DEFAULT_LINEAR )); - m_schema.addColumn( ColumnSchema("KROG" , Table::INCREASING , Table::DEFAULT_LINEAR )); - m_schema.addColumn( ColumnSchema("PCOG" , Table::DECREASING , Table::DEFAULT_LINEAR )); - - m_jfunc = jfunc; - SimpleTable::init( item ); - - if (getSlColumn().back() != 1.0) { - throw std::invalid_argument("The last saturation of the SLGOF keyword must be 1!"); - } -} - -const TableColumn& SlgofTable::getSlColumn() const { - return SimpleTable::getColumn(0); -} - -const TableColumn& SlgofTable::getKrgColumn() const { - return SimpleTable::getColumn(1); -} - -const TableColumn& SlgofTable::getKrogColumn() const { - return SimpleTable::getColumn(2); -} - -const TableColumn& SlgofTable::getPcogColumn() const { - SimpleTable::assertJFuncPressure(false); - return SimpleTable::getColumn(3); -} - -const TableColumn& SlgofTable::getJFuncColumn() const { - SimpleTable::assertJFuncPressure(true); - return SimpleTable::getColumn(3); -} - -Sof2Table::Sof2Table( const DeckItem& item ) { - m_schema.addColumn( ColumnSchema( "SO" , Table::STRICTLY_INCREASING , Table::DEFAULT_NONE )); - m_schema.addColumn( ColumnSchema( "KRO" , Table::INCREASING , Table::DEFAULT_LINEAR)); - - SimpleTable::init(item); -} - -const TableColumn& Sof2Table::getSoColumn() const { - return SimpleTable::getColumn(0); -} - -const TableColumn& Sof2Table::getKroColumn() const { - return SimpleTable::getColumn(1); -} - -Sof3Table::Sof3Table( const DeckItem& item ) { - - m_schema.addColumn( ColumnSchema("SO" , Table::STRICTLY_INCREASING , Table::DEFAULT_NONE )); - m_schema.addColumn( ColumnSchema("KROW" , Table::INCREASING , Table::DEFAULT_LINEAR )); - m_schema.addColumn( ColumnSchema("KROG" , Table::INCREASING , Table::DEFAULT_LINEAR )); - - SimpleTable::init( item ); -} - - -const TableColumn& Sof3Table::getSoColumn() const { - return SimpleTable::getColumn(0); -} - -const TableColumn& Sof3Table::getKrowColumn() const { - return SimpleTable::getColumn(1); -} - -const TableColumn& Sof3Table::getKrogColumn() const { - return SimpleTable::getColumn(2); -} - -PvdgTable::PvdgTable( const DeckItem& item ) { - m_schema.addColumn( ColumnSchema( "P" , Table::STRICTLY_INCREASING , Table::DEFAULT_NONE )); - m_schema.addColumn( ColumnSchema( "BG" , Table::STRICTLY_DECREASING , Table::DEFAULT_LINEAR)); - m_schema.addColumn( ColumnSchema( "MUG" , Table::INCREASING , Table::DEFAULT_LINEAR )); - - SimpleTable::init( item ); -} - - -const TableColumn& PvdgTable::getPressureColumn() const { - return SimpleTable::getColumn(0); -} - -const TableColumn& PvdgTable::getFormationFactorColumn() const { - return SimpleTable::getColumn(1); -} - -const TableColumn& PvdgTable::getViscosityColumn() const { - return SimpleTable::getColumn(2); -} - -PvdoTable::PvdoTable( const DeckItem& item ) { - m_schema.addColumn( ColumnSchema( "P" , Table::STRICTLY_INCREASING , Table::DEFAULT_NONE )); - m_schema.addColumn( ColumnSchema( "BO" , Table::STRICTLY_DECREASING , Table::DEFAULT_LINEAR)); - m_schema.addColumn( ColumnSchema( "MUO" , Table::INCREASING , Table::DEFAULT_LINEAR )); - - SimpleTable::init( item ); -} - - -const TableColumn& PvdoTable::getPressureColumn() const { - return SimpleTable::getColumn(0); -} - -const TableColumn& PvdoTable::getFormationFactorColumn() const { - return SimpleTable::getColumn(1); -} - -const TableColumn& PvdoTable::getViscosityColumn() const { - return SimpleTable::getColumn(2); -} - -SwfnTable::SwfnTable( const DeckItem& item, const bool jfunc ) { - m_schema.addColumn( ColumnSchema("SW" , Table::STRICTLY_INCREASING , Table::DEFAULT_NONE )); - m_schema.addColumn( ColumnSchema("KRW" , Table::INCREASING , Table::DEFAULT_LINEAR )); - m_schema.addColumn( ColumnSchema("PCOW" , Table::DECREASING , Table::DEFAULT_LINEAR )); - - m_jfunc = jfunc; - SimpleTable::init( item ); -} - -const TableColumn& SwfnTable::getSwColumn() const { - return SimpleTable::getColumn(0); -} - -const TableColumn& SwfnTable::getKrwColumn() const { - return SimpleTable::getColumn(1); -} - -const TableColumn& SwfnTable::getPcowColumn() const { - SimpleTable::assertJFuncPressure(false); - return SimpleTable::getColumn(2); -} - -const TableColumn& SwfnTable::getJFuncColumn() const { - SimpleTable::assertJFuncPressure(true); - return SimpleTable::getColumn(2); -} - - -SgfnTable::SgfnTable( const DeckItem& item, const bool jfunc ) { - m_schema.addColumn( ColumnSchema("SG" , Table::STRICTLY_INCREASING , Table::DEFAULT_NONE ) ); - m_schema.addColumn( ColumnSchema("KRG" , Table::INCREASING , Table::DEFAULT_LINEAR)); - m_schema.addColumn( ColumnSchema("PCOG" , Table::INCREASING , Table::DEFAULT_LINEAR)); - - m_jfunc = jfunc; - SimpleTable::init( item ); -} - - -const TableColumn& SgfnTable::getSgColumn() const { - return SimpleTable::getColumn(0); -} - -const TableColumn& SgfnTable::getKrgColumn() const { - return SimpleTable::getColumn(1); -} - -const TableColumn& SgfnTable::getPcogColumn() const { - SimpleTable::assertJFuncPressure(false); - return SimpleTable::getColumn(2); -} - -const TableColumn& SgfnTable::getJFuncColumn() const { - SimpleTable::assertJFuncPressure(true); - return SimpleTable::getColumn(2); -} - -SsfnTable::SsfnTable( const DeckItem& item ) { - m_schema.addColumn( ColumnSchema("SolventFraction" , Table::STRICTLY_INCREASING , Table::DEFAULT_NONE)); - m_schema.addColumn( ColumnSchema("GasRelPermMultiplier" , Table::STRICTLY_INCREASING , Table::DEFAULT_NONE)); - m_schema.addColumn( ColumnSchema("SolventRelPermMultiplier" , Table::STRICTLY_INCREASING , Table::DEFAULT_NONE)); - - SimpleTable::init(item); -} - -const TableColumn& SsfnTable::getSolventFractionColumn() const { - return SimpleTable::getColumn(0); -} - -const TableColumn& SsfnTable::getGasRelPermMultiplierColumn() const { - return SimpleTable::getColumn(1); -} - -const TableColumn& SsfnTable::getSolventRelPermMultiplierColumn() const { - return SimpleTable::getColumn(2); - -} - -PvdsTable::PvdsTable( const DeckItem& item ) { - m_schema.addColumn( ColumnSchema( "P" , Table::STRICTLY_INCREASING , Table::DEFAULT_NONE )); - m_schema.addColumn( ColumnSchema( "BG" , Table::STRICTLY_DECREASING , Table::DEFAULT_LINEAR )); - m_schema.addColumn( ColumnSchema( "MUG" , Table::INCREASING , Table::DEFAULT_LINEAR )); - - SimpleTable::init(item); -} - -const TableColumn& PvdsTable::getPressureColumn() const { - return SimpleTable::getColumn(0); -} - -const TableColumn& PvdsTable::getFormationFactorColumn() const { - return SimpleTable::getColumn(1); -} - -const TableColumn& PvdsTable::getViscosityColumn() const { - return SimpleTable::getColumn(2); -} - -PlyadsTable::PlyadsTable( const DeckItem& item ) { - m_schema.addColumn( ColumnSchema("PolymerConcentration" , Table::STRICTLY_INCREASING , Table::DEFAULT_NONE )); - m_schema.addColumn( ColumnSchema("AdsorbedPolymer" , Table::INCREASING , Table::DEFAULT_NONE )); - - SimpleTable::init(item); -} - - -const TableColumn& PlyadsTable::getPolymerConcentrationColumn() const { - return SimpleTable::getColumn(0); -} - -const TableColumn& PlyadsTable::getAdsorbedPolymerColumn() const { - return SimpleTable::getColumn(1); -} - -FoamadsTable::FoamadsTable( const DeckItem& item ) { - m_schema.addColumn( ColumnSchema("FoamConcentration" , Table::STRICTLY_INCREASING , Table::DEFAULT_NONE )); - m_schema.addColumn( ColumnSchema("AdsorbedFoam" , Table::INCREASING , Table::DEFAULT_NONE )); - - SimpleTable::init(item); -} - -const TableColumn& FoamadsTable::getFoamConcentrationColumn() const { - return SimpleTable::getColumn(0); -} - -const TableColumn& FoamadsTable::getAdsorbedFoamColumn() const { - return SimpleTable::getColumn(1); -} - -FoammobTable::FoammobTable( const DeckItem& item ) { - m_schema.addColumn( ColumnSchema("FoamConcentration" , Table::STRICTLY_INCREASING , Table::DEFAULT_NONE )); - m_schema.addColumn( ColumnSchema("MobilityMultiplier" , Table::DECREASING , Table::DEFAULT_NONE )); - - SimpleTable::init(item); -} - -const TableColumn& FoammobTable::getFoamConcentrationColumn() const { - return SimpleTable::getColumn(0); -} - -const TableColumn& FoammobTable::getMobilityMultiplierColumn() const { - return SimpleTable::getColumn(1); -} - -PlymaxTable::PlymaxTable( const DeckRecord& record ) { - m_schema.addColumn( ColumnSchema("C_POLYMER", Table::RANDOM , Table::DEFAULT_NONE) ); - m_schema.addColumn( ColumnSchema("C_POLYMER_MAX", Table::RANDOM , Table::DEFAULT_NONE) ); - - addColumns(); - for (size_t colIdx = 0; colIdx < record.size(); colIdx++) { - auto& column = getColumn( colIdx ); - - column.addValue( record.getItem( colIdx ).getSIDouble(0) ); - } -} - -const TableColumn& PlymaxTable::getPolymerConcentrationColumn() const { - return SimpleTable::getColumn(0); -} - -const TableColumn& PlymaxTable::getMaxPolymerConcentrationColumn() const { - return SimpleTable::getColumn(1); -} - -PlyrockTable::PlyrockTable( const DeckRecord& record ) { - m_schema.addColumn( ColumnSchema("DeadPoreVolume", Table::RANDOM , Table::DEFAULT_NONE) ); - m_schema.addColumn( ColumnSchema("ResidualResistanceFactor", Table::RANDOM , Table::DEFAULT_NONE) ); - m_schema.addColumn( ColumnSchema("RockDensityFactor", Table::RANDOM , Table::DEFAULT_NONE) ); - m_schema.addColumn( ColumnSchema("AdsorbtionIndex", Table::RANDOM , Table::DEFAULT_NONE) ); - m_schema.addColumn( ColumnSchema("MaxAdsorbtion", Table::RANDOM , Table::DEFAULT_NONE) ); - - addColumns(); - for (size_t colIdx = 0; colIdx < record.size(); colIdx++) { - auto& column = getColumn( colIdx ); - - column.addValue( record.getItem( colIdx ).getSIDouble(0) ); - } -} - -const TableColumn& PlyrockTable::getDeadPoreVolumeColumn() const { - return SimpleTable::getColumn(0); -} - -const TableColumn& PlyrockTable::getResidualResistanceFactorColumn() const { - return SimpleTable::getColumn(1); -} - -const TableColumn& PlyrockTable::getRockDensityFactorColumn() const { - return SimpleTable::getColumn(2); -} - -const TableColumn& PlyrockTable::getAdsorbtionIndexColumn() const { - return SimpleTable::getColumn(3); -} - -const TableColumn& PlyrockTable::getMaxAdsorbtionColumn() const { - return SimpleTable::getColumn(4); -} - -PlyviscTable::PlyviscTable( const DeckItem& item ) { - m_schema.addColumn( ColumnSchema( "PolymerConcentration" , Table::STRICTLY_INCREASING , Table::DEFAULT_NONE)); - m_schema.addColumn( ColumnSchema( "ViscosityMultiplier" , Table::INCREASING , Table::DEFAULT_NONE)); - SimpleTable::init(item); -} - -const TableColumn& PlyviscTable::getPolymerConcentrationColumn() const { - return SimpleTable::getColumn(0); -} - -const TableColumn& PlyviscTable::getViscosityMultiplierColumn() const { - return SimpleTable::getColumn(1); -} - -PlydhflfTable::PlydhflfTable( const DeckItem& item ) { - m_schema.addColumn( ColumnSchema("Temperature" , Table::STRICTLY_INCREASING , Table::DEFAULT_NONE ) ); - m_schema.addColumn( ColumnSchema("PolymerHalflife" , Table::STRICTLY_DECREASING , Table::DEFAULT_NONE ) ); - - SimpleTable::init(item); -} - -const TableColumn& PlydhflfTable::getTemperatureColumn() const { - return SimpleTable::getColumn(0); -} - -const TableColumn& PlydhflfTable::getPolymerHalflifeColumn() const { - return SimpleTable::getColumn(1); -} - -PlyshlogTable::PlyshlogTable( - const DeckRecord& indexRecord, - const DeckRecord& dataRecord ) { - - { - const auto& item = indexRecord.getItem(); - setRefPolymerConcentration(item.get< double >(0)); - } - - { - const auto& item = indexRecord.getItem(); - if (item.hasValue(0)) { - setHasRefSalinity(true); - setRefSalinity(item.get< double >(0)); - } else - setHasRefSalinity(false); - } - - { - const auto& item = indexRecord.getItem(); - if (item.hasValue(0)) { - setHasRefTemperature(true); - setRefTemperature(item.get< double >(0)); - } else - setHasRefTemperature(false); - } - - m_schema.addColumn( ColumnSchema("WaterVelocity" , Table::STRICTLY_INCREASING , Table::DEFAULT_NONE)); - m_schema.addColumn( ColumnSchema("ShearMultiplier" , Table::RANDOM , Table::DEFAULT_NONE)); - - SimpleTable::init( dataRecord.getItem() ); -} - -PlyshlogTable PlyshlogTable::serializeObject() -{ - PlyshlogTable result; - static_cast(result) = SimpleTable::serializeObject(); - result.m_refPolymerConcentration = 1.0; - result.m_refSalinity = 2.0; - result.m_refTemperature = 3.0; - result.m_hasRefSalinity = true; - result.m_hasRefTemperature = true; - - return result; -} - -double PlyshlogTable::getRefPolymerConcentration() const { - return m_refPolymerConcentration; -} -double PlyshlogTable::getRefSalinity() const { - return m_refSalinity; -} - -double PlyshlogTable::getRefTemperature() const{ - return m_refTemperature; -} - -void PlyshlogTable::setRefPolymerConcentration(const double refPlymerConcentration) { - m_refPolymerConcentration = refPlymerConcentration; -} - -void PlyshlogTable::setRefSalinity(const double refSalinity) { - m_refSalinity = refSalinity; -} - -void PlyshlogTable::setRefTemperature(const double refTemperature) { - m_refTemperature = refTemperature; -} - -bool PlyshlogTable::hasRefSalinity() const { - return m_hasRefSalinity; -} - -bool PlyshlogTable::hasRefTemperature() const { - return m_hasRefTemperature; -} - -void PlyshlogTable::setHasRefSalinity(const bool has) { - m_hasRefSalinity = has; -} - -void PlyshlogTable::setHasRefTemperature(const bool has) { - m_refTemperature = has; -} - -const TableColumn& PlyshlogTable::getWaterVelocityColumn() const { - return getColumn(0); -} - -const TableColumn& PlyshlogTable::getShearMultiplierColumn() const { - return getColumn(1); -} - -bool PlyshlogTable::operator==(const PlyshlogTable& data) const { - return this->SimpleTable::operator==(data) && - m_refPolymerConcentration == data.m_refPolymerConcentration && - m_refSalinity == data.m_refSalinity && - m_refTemperature == data.m_refTemperature && - m_hasRefSalinity == data.m_hasRefSalinity && - m_hasRefTemperature == data.m_hasRefTemperature; -} - -OilvisctTable::OilvisctTable( const DeckItem& item ) { - - m_schema.addColumn( ColumnSchema("Temperature" , Table::STRICTLY_INCREASING , Table::DEFAULT_NONE) ); - m_schema.addColumn( ColumnSchema("Viscosity" , Table::DECREASING , Table::DEFAULT_NONE) ); - SimpleTable::init(item); -} - -const TableColumn& OilvisctTable::getTemperatureColumn() const { - return SimpleTable::getColumn(0); -} - -const TableColumn& OilvisctTable::getOilViscosityColumn() const { - return SimpleTable::getColumn(1); -} - -WatvisctTable::WatvisctTable( const DeckItem& item ) { - m_schema.addColumn(ColumnSchema("Temperature" , Table::STRICTLY_INCREASING , Table::DEFAULT_NONE)); - m_schema.addColumn(ColumnSchema("Viscosity" , Table::DECREASING , Table::DEFAULT_NONE)); - - SimpleTable::init(item); -} - -const TableColumn& WatvisctTable::getTemperatureColumn() const { - return SimpleTable::getColumn(0); -} - -const TableColumn& WatvisctTable::getWaterViscosityColumn() const { - return SimpleTable::getColumn(1); -} - -GasvisctTable::GasvisctTable( const Deck& deck, const DeckItem& deckItem ) { - int numComponents = deck.getKeyword().getRecord(0).getItem(0).get< int >(0); - - auto temperatureDimension = deck.getActiveUnitSystem().getDimension("Temperature"); - auto viscosityDimension = deck.getActiveUnitSystem().getDimension("Viscosity"); - - m_schema.addColumn( ColumnSchema( "Temperature" , Table::STRICTLY_INCREASING , Table::DEFAULT_NONE)); - for (int compIdx = 0; compIdx < numComponents; ++ compIdx) { - std::string columnName = "Viscosity" + std::to_string(compIdx); - m_schema.addColumn( ColumnSchema( columnName, Table::INCREASING , Table::DEFAULT_NONE ) ); - } - - SimpleTable::addColumns(); - - if ( deckItem.data_size() % numColumns() != 0) - throw std::runtime_error("Number of columns in the data file is inconsistent " - "with the expected number for keyword GASVISCT"); - - size_t rows = deckItem.data_size() / m_schema.size(); - for (size_t columnIndex=0; columnIndex < m_schema.size(); columnIndex++) { - auto& column = getColumn( columnIndex ); - for (size_t rowIdx = 0; rowIdx < rows; rowIdx++) { - size_t deckIndex = rowIdx * m_schema.size() + columnIndex; - - if (deckItem.defaultApplied( deckIndex )) - column.addDefault(); - else { - double rawValue = deckItem.get< double >( deckIndex ); - double SIValue; - - if (columnIndex == 0) - SIValue = temperatureDimension.convertRawToSi(rawValue); - else - SIValue = viscosityDimension.convertRawToSi(rawValue); - - column.addValue( SIValue ); - } - } - } -} - -const TableColumn& GasvisctTable::getTemperatureColumn() const { - return SimpleTable::getColumn(0); -} - -const TableColumn& GasvisctTable::getGasViscosityColumn(size_t compIdx) const { - return SimpleTable::getColumn(1 + compIdx); -} - -RtempvdTable::RtempvdTable(const DeckItem& item) { - m_schema.addColumn( ColumnSchema( "Depth" , Table::STRICTLY_INCREASING , Table::DEFAULT_NONE) ); - m_schema.addColumn( ColumnSchema( "Temperature" , Table::RANDOM , Table::DEFAULT_NONE) ); - - SimpleTable::init( item ); -} - -const TableColumn& RtempvdTable::getDepthColumn() const { - return SimpleTable::getColumn(0); -} - - -const TableColumn& RtempvdTable::getTemperatureColumn() const { - return SimpleTable::getColumn(1); -} - -RocktabTable::RocktabTable( - const DeckItem& item, - bool isDirectional, - bool hasStressOption ) : - m_isDirectional( isDirectional ) -{ - - Table::ColumnOrderEnum POOrder; - - if (hasStressOption) - POOrder = Table::STRICTLY_INCREASING; - else - POOrder = Table::STRICTLY_DECREASING; - - m_schema.addColumn( ColumnSchema("PO" , POOrder , Table::DEFAULT_NONE ) ); - m_schema.addColumn( ColumnSchema("PV_MULT" , Table::RANDOM , Table::DEFAULT_LINEAR ) ); - - if (isDirectional) { - m_schema.addColumn( ColumnSchema("PV_MULT_TRANX" , Table::RANDOM , Table::DEFAULT_LINEAR ) ); - m_schema.addColumn( ColumnSchema("PV_MULT_TRANY" , Table::RANDOM , Table::DEFAULT_LINEAR ) ); - m_schema.addColumn( ColumnSchema("PV_MULT_TRANZ" , Table::RANDOM , Table::DEFAULT_LINEAR ) ); - } else - m_schema.addColumn( ColumnSchema("PV_MULT_TRAN" , Table::RANDOM , Table::DEFAULT_LINEAR ) ); - - SimpleTable::init(item); -} - -RocktabTable RocktabTable::serializeObject() -{ - RocktabTable result; - static_cast(result) = Opm::SimpleTable::serializeObject(); - result.m_isDirectional = true; - - return result; -} - -const TableColumn& RocktabTable::getPressureColumn() const { - return SimpleTable::getColumn(0); -} - -const TableColumn& RocktabTable::getPoreVolumeMultiplierColumn() const { - return SimpleTable::getColumn(1); -} - -const TableColumn& RocktabTable::getTransmissibilityMultiplierColumn() const { - return SimpleTable::getColumn(2); -} - -const TableColumn& RocktabTable::getTransmissibilityMultiplierXColumn() const { - return SimpleTable::getColumn(2); -} - -const TableColumn& RocktabTable::getTransmissibilityMultiplierYColumn() const { - if (!m_isDirectional) - return SimpleTable::getColumn(2); - return SimpleTable::getColumn(3); -} - -const TableColumn& RocktabTable::getTransmissibilityMultiplierZColumn() const { - if (!m_isDirectional) - return SimpleTable::getColumn(2); - return SimpleTable::getColumn(4); -} - -bool RocktabTable::operator==(const RocktabTable& data) const { - return this->SimpleTable::operator==(data) && - m_isDirectional == data.m_isDirectional; -} - -RsvdTable::RsvdTable( const DeckItem& item ) { - m_schema.addColumn( ColumnSchema( "DEPTH" , Table::STRICTLY_INCREASING , Table::DEFAULT_NONE )); - m_schema.addColumn( ColumnSchema( "RS" , Table::RANDOM , Table::DEFAULT_NONE )); - - SimpleTable::init(item); -} - -const TableColumn& RsvdTable::getDepthColumn() const { - return SimpleTable::getColumn(0); -} - -const TableColumn& RsvdTable::getRsColumn() const { - return SimpleTable::getColumn(1); -} - -RvvdTable::RvvdTable( const DeckItem& item ) { - m_schema.addColumn( ColumnSchema( "DEPTH" , Table::STRICTLY_INCREASING , Table::DEFAULT_NONE ) ); - m_schema.addColumn( ColumnSchema( "RV" , Table::RANDOM , Table::DEFAULT_LINEAR ) ); - SimpleTable::init(item); -} - -const TableColumn& RvvdTable::getDepthColumn() const { - return SimpleTable::getColumn(0); -} - -const TableColumn& RvvdTable::getRvColumn() const { - return SimpleTable::getColumn(1); -} - -PbvdTable::PbvdTable( const DeckItem& item ) { - m_schema.addColumn( ColumnSchema( "DEPTH" , Table::STRICTLY_INCREASING , Table::DEFAULT_NONE )); - m_schema.addColumn( ColumnSchema( "PBUB" , Table::RANDOM , Table::DEFAULT_NONE )); - - SimpleTable::init(item); -} - -const TableColumn& PbvdTable::getDepthColumn() const { - return SimpleTable::getColumn(0); -} - -const TableColumn& PbvdTable::getPbubColumn() const { - return SimpleTable::getColumn(1); -} - -PdvdTable::PdvdTable( const DeckItem& item ) { - m_schema.addColumn( ColumnSchema( "DEPTH" , Table::STRICTLY_INCREASING , Table::DEFAULT_NONE )); - m_schema.addColumn( ColumnSchema( "PDEW" , Table::RANDOM , Table::DEFAULT_NONE )); - - SimpleTable::init(item); -} - -const TableColumn& PdvdTable::getDepthColumn() const { - return SimpleTable::getColumn(0); -} - -const TableColumn& PdvdTable::getPdewColumn() const { - return SimpleTable::getColumn(1); -} - -SaltvdTable::SaltvdTable( const DeckItem& item ) { - m_schema.addColumn( ColumnSchema( "DEPTH" , Table::STRICTLY_INCREASING , Table::DEFAULT_NONE )); - m_schema.addColumn( ColumnSchema( "SALT" , Table::RANDOM , Table::DEFAULT_NONE )); - - SimpleTable::init(item); -} - -const TableColumn& SaltvdTable::getDepthColumn() const { - return SimpleTable::getColumn(0); -} - -const TableColumn& SaltvdTable::getSaltColumn() const { - return SimpleTable::getColumn(1); -} - -AqutabTable::AqutabTable( const DeckItem& item ) { - m_schema.addColumn( ColumnSchema( "TD" , Table::STRICTLY_INCREASING , Table::DEFAULT_NONE ) ); - m_schema.addColumn( ColumnSchema( "PD" , Table::RANDOM , Table::DEFAULT_LINEAR ) ); - SimpleTable::init(item); -} - -const TableColumn& AqutabTable::getTimeColumn() const { - return SimpleTable::getColumn(0); -} - -const TableColumn& AqutabTable::getPressureColumn() const { - return SimpleTable::getColumn(1); -} - -EnkrvdTable::EnkrvdTable( const DeckItem& item ) { - m_schema.addColumn( ColumnSchema( "DEPTH" , Table::STRICTLY_INCREASING , Table::DEFAULT_NONE ) ); - m_schema.addColumn( ColumnSchema( "KRWMAX", Table::RANDOM , Table::DEFAULT_LINEAR ) ); - m_schema.addColumn( ColumnSchema( "KRGMAX", Table::RANDOM , Table::DEFAULT_LINEAR ) ); - m_schema.addColumn( ColumnSchema( "KROMAX", Table::RANDOM , Table::DEFAULT_LINEAR ) ); - m_schema.addColumn( ColumnSchema( "KRWCRIT", Table::RANDOM , Table::DEFAULT_LINEAR ) ); - m_schema.addColumn( ColumnSchema( "KRGCRIT", Table::RANDOM , Table::DEFAULT_LINEAR ) ); - m_schema.addColumn( ColumnSchema( "KROCRITG",Table::RANDOM , Table::DEFAULT_LINEAR ) ); - m_schema.addColumn( ColumnSchema( "KROCRITW",Table::RANDOM , Table::DEFAULT_LINEAR ) ); - - SimpleTable::init(item); -} - -const TableColumn& EnkrvdTable::getDepthColumn() const { - return SimpleTable::getColumn(0); -} - -const TableColumn& EnkrvdTable::getKrwmaxColumn() const { - return SimpleTable::getColumn(1); -} - -const TableColumn& EnkrvdTable::getKrgmaxColumn() const { - return SimpleTable::getColumn(2); -} - -const TableColumn& EnkrvdTable::getKromaxColumn() const { - return SimpleTable::getColumn(3); -} - -const TableColumn& EnkrvdTable::getKrwcritColumn() const { - return SimpleTable::getColumn(4); -} - -const TableColumn& EnkrvdTable::getKrgcritColumn() const { - return SimpleTable::getColumn(5); -} - -const TableColumn& EnkrvdTable::getKrocritgColumn() const { - return SimpleTable::getColumn(6); -} - -const TableColumn& EnkrvdTable::getKrocritwColumn() const { - return SimpleTable::getColumn(7); -} - -EnptvdTable::EnptvdTable( const DeckItem& item ) { - m_schema.addColumn( ColumnSchema( "DEPTH" , Table::STRICTLY_INCREASING , Table::DEFAULT_NONE ) ); - m_schema.addColumn( ColumnSchema( "SWCO", Table::RANDOM , Table::DEFAULT_LINEAR ) ); - m_schema.addColumn( ColumnSchema( "SWCRIT", Table::RANDOM , Table::DEFAULT_LINEAR ) ); - m_schema.addColumn( ColumnSchema( "SWMAX", Table::RANDOM , Table::DEFAULT_LINEAR ) ); - m_schema.addColumn( ColumnSchema( "SGCO", Table::RANDOM , Table::DEFAULT_LINEAR ) ); - m_schema.addColumn( ColumnSchema( "SGCRIT", Table::RANDOM , Table::DEFAULT_LINEAR ) ); - m_schema.addColumn( ColumnSchema( "SGMAX", Table::RANDOM , Table::DEFAULT_LINEAR ) ); - m_schema.addColumn( ColumnSchema( "SOWCRIT", Table::RANDOM , Table::DEFAULT_LINEAR ) ); - m_schema.addColumn( ColumnSchema( "SOGCRIT", Table::RANDOM , Table::DEFAULT_LINEAR ) ); - - SimpleTable::init(item); -} - -const TableColumn& EnptvdTable::getDepthColumn() const { - return SimpleTable::getColumn(0); -} - -const TableColumn& EnptvdTable::getSwcoColumn() const { - return SimpleTable::getColumn(1); -} - -const TableColumn& EnptvdTable::getSwcritColumn() const { - return SimpleTable::getColumn(2); -} - -const TableColumn& EnptvdTable::getSwmaxColumn() const { - return SimpleTable::getColumn(3); -} - -const TableColumn& EnptvdTable::getSgcoColumn() const { - return SimpleTable::getColumn(4); -} - -const TableColumn& EnptvdTable::getSgcritColumn() const { - return SimpleTable::getColumn(5); -} - -const TableColumn& EnptvdTable::getSgmaxColumn() const { - return SimpleTable::getColumn(6); -} - -const TableColumn& EnptvdTable::getSowcritColumn() const { - return SimpleTable::getColumn(7); -} - -const TableColumn& EnptvdTable::getSogcritColumn() const { - return SimpleTable::getColumn(8); -} - -ImkrvdTable::ImkrvdTable( const DeckItem& item ) { - m_schema.addColumn( ColumnSchema( "DEPTH" , Table::STRICTLY_INCREASING , Table::DEFAULT_NONE ) ); - m_schema.addColumn( ColumnSchema( "KRWMAX", Table::RANDOM , Table::DEFAULT_LINEAR ) ); - m_schema.addColumn( ColumnSchema( "KRGMAX", Table::RANDOM , Table::DEFAULT_LINEAR ) ); - m_schema.addColumn( ColumnSchema( "KROMAX", Table::RANDOM , Table::DEFAULT_LINEAR ) ); - m_schema.addColumn( ColumnSchema( "KRWCRIT", Table::RANDOM , Table::DEFAULT_LINEAR ) ); - m_schema.addColumn( ColumnSchema( "KRGCRIT", Table::RANDOM , Table::DEFAULT_LINEAR ) ); - m_schema.addColumn( ColumnSchema( "KROCRITG",Table::RANDOM , Table::DEFAULT_LINEAR ) ); - m_schema.addColumn( ColumnSchema( "KROCRITW", Table::RANDOM , Table::DEFAULT_LINEAR ) ); - - SimpleTable::init(item); -} - -const TableColumn& ImkrvdTable::getDepthColumn() const { - return SimpleTable::getColumn(0); -} - -const TableColumn& ImkrvdTable::getKrwmaxColumn() const { - return SimpleTable::getColumn(1); -} - -const TableColumn& ImkrvdTable::getKrgmaxColumn() const { - return SimpleTable::getColumn(2); -} - -const TableColumn& ImkrvdTable::getKromaxColumn() const { - return SimpleTable::getColumn(3); -} - -const TableColumn& ImkrvdTable::getKrwcritColumn() const { - return SimpleTable::getColumn(4); -} - -const TableColumn& ImkrvdTable::getKrgcritColumn() const { - return SimpleTable::getColumn(5); -} - -const TableColumn& ImkrvdTable::getKrocritgColumn() const { - return SimpleTable::getColumn(6); -} - -const TableColumn& ImkrvdTable::getKrocritwColumn() const { - return SimpleTable::getColumn(7); -} - - -ImptvdTable::ImptvdTable( const DeckItem& item ) { - m_schema.addColumn( ColumnSchema( "DEPTH" , Table::STRICTLY_INCREASING , Table::DEFAULT_NONE ) ); - m_schema.addColumn( ColumnSchema( "SWCO", Table::RANDOM , Table::DEFAULT_LINEAR ) ); - m_schema.addColumn( ColumnSchema( "SWCRIT", Table::RANDOM , Table::DEFAULT_LINEAR ) ); - m_schema.addColumn( ColumnSchema( "SWMAX", Table::RANDOM , Table::DEFAULT_LINEAR ) ); - m_schema.addColumn( ColumnSchema( "SGCO", Table::RANDOM , Table::DEFAULT_LINEAR ) ); - m_schema.addColumn( ColumnSchema( "SGCRIT", Table::RANDOM , Table::DEFAULT_LINEAR ) ); - m_schema.addColumn( ColumnSchema( "SGMAX", Table::RANDOM , Table::DEFAULT_LINEAR ) ); - m_schema.addColumn( ColumnSchema( "SOWCRIT", Table::RANDOM , Table::DEFAULT_LINEAR ) ); - m_schema.addColumn( ColumnSchema( "SOGCRIT", Table::RANDOM , Table::DEFAULT_LINEAR ) ); - - SimpleTable::init(item); -} - -const TableColumn& ImptvdTable::getDepthColumn() const { - return SimpleTable::getColumn(0); -} - -const TableColumn& ImptvdTable::getSwcoColumn() const { - return SimpleTable::getColumn(1); -} - -const TableColumn& ImptvdTable::getSwcritColumn() const { - return SimpleTable::getColumn(2); -} - -const TableColumn& ImptvdTable::getSwmaxColumn() const { - return SimpleTable::getColumn(3); -} - -const TableColumn& ImptvdTable::getSgcoColumn() const { - return SimpleTable::getColumn(4); -} - -const TableColumn& ImptvdTable::getSgcritColumn() const { - return SimpleTable::getColumn(5); -} - -const TableColumn& ImptvdTable::getSgmaxColumn() const { - return SimpleTable::getColumn(6); -} - -const TableColumn& ImptvdTable::getSowcritColumn() const { - return SimpleTable::getColumn(7); -} - -const TableColumn& ImptvdTable::getSogcritColumn() const { - return SimpleTable::getColumn(8); -} - -SorwmisTable::SorwmisTable( const DeckItem& item ) { - m_schema.addColumn( ColumnSchema( "WaterSaturation" , Table::STRICTLY_INCREASING , Table::DEFAULT_NONE) ); - m_schema.addColumn( ColumnSchema( "MiscibleResidualOilSaturation" , Table::INCREASING , Table::DEFAULT_NONE) ); - - SimpleTable::init(item); -} - -const TableColumn& SorwmisTable::getWaterSaturationColumn() const { - return SimpleTable::getColumn(0); -} - -const TableColumn& SorwmisTable::getMiscibleResidualOilColumn() const { - return SimpleTable::getColumn(1); -} - -SgcwmisTable::SgcwmisTable( const DeckItem& item ) { - m_schema.addColumn( ColumnSchema( "WaterSaturation" , Table::STRICTLY_INCREASING , Table::DEFAULT_NONE) ); - m_schema.addColumn( ColumnSchema( "MiscibleResidualGasSaturation" , Table::INCREASING , Table::DEFAULT_NONE) ); - SimpleTable::init(item); -} - -const TableColumn& SgcwmisTable::getWaterSaturationColumn() const { - return SimpleTable::getColumn(0); -} - -const TableColumn& SgcwmisTable::getMiscibleResidualGasColumn() const { - return SimpleTable::getColumn(1); -} - -MiscTable::MiscTable( const DeckItem& item ) { - m_schema.addColumn( ColumnSchema( "SolventFraction" , Table::STRICTLY_INCREASING , Table::DEFAULT_NONE) ); - m_schema.addColumn( ColumnSchema( "Miscibility" , Table::INCREASING , Table::DEFAULT_NONE) ); - SimpleTable::init( item ); -} - -const TableColumn& MiscTable::getSolventFractionColumn() const { - return SimpleTable::getColumn(0); -} - -const TableColumn& MiscTable::getMiscibilityColumn() const { - return SimpleTable::getColumn(1); -} - - -PmiscTable::PmiscTable( const DeckItem& item ) { - m_schema.addColumn( ColumnSchema( "OilPhasePressure" , Table::STRICTLY_INCREASING , Table::DEFAULT_NONE) ); - m_schema.addColumn( ColumnSchema( "Miscibility" , Table::INCREASING , Table::DEFAULT_NONE) ); - SimpleTable::init( item ); -} - -const TableColumn& PmiscTable::getOilPhasePressureColumn() const { - return SimpleTable::getColumn(0); -} - -const TableColumn& PmiscTable::getMiscibilityColumn() const { - return SimpleTable::getColumn(1); -} - -TlpmixpaTable::TlpmixpaTable( const DeckItem& item ) { - m_schema.addColumn( ColumnSchema( "OilPhasePressure" , Table::STRICTLY_INCREASING , Table::DEFAULT_NONE) ); - m_schema.addColumn( ColumnSchema( "Miscibility" , Table::INCREASING , Table::DEFAULT_NONE) ); - SimpleTable::init( item ); -} - -const TableColumn& TlpmixpaTable::getOilPhasePressureColumn() const { - return SimpleTable::getColumn(0); -} - -const TableColumn& TlpmixpaTable::getMiscibilityColumn() const { - return SimpleTable::getColumn(1); -} - -MsfnTable::MsfnTable( const DeckItem& item ) { - m_schema.addColumn( ColumnSchema( "GasPhaseFraction", Table::STRICTLY_INCREASING , Table::DEFAULT_NONE)); - m_schema.addColumn( ColumnSchema( "GasSolventRelpermMultiplier", Table::INCREASING , Table::DEFAULT_NONE)); - m_schema.addColumn( ColumnSchema( "OilRelpermMultiplier", Table::DECREASING , Table::DEFAULT_NONE)); - - SimpleTable::init( item ); - - getColumn("GasPhaseFraction").assertUnitRange(); -} - - -const TableColumn& MsfnTable::getGasPhaseFractionColumn() const { - return SimpleTable::getColumn(0); -} - -const TableColumn& MsfnTable::getGasSolventRelpermMultiplierColumn() const { - return SimpleTable::getColumn(1); -} - -const TableColumn& MsfnTable::getOilRelpermMultiplierColumn() const { - return SimpleTable::getColumn(2); -} - -RockwnodTable::RockwnodTable( const DeckItem& item ) { - m_schema.addColumn( ColumnSchema( "Saturation" , Table::STRICTLY_INCREASING , Table::DEFAULT_NONE) ); - SimpleTable::init( item ); -} - -const TableColumn& RockwnodTable::getSaturationColumn() const { - return SimpleTable::getColumn(0); -} - -OverburdTable::OverburdTable( const DeckItem& item ) { - m_schema.addColumn( ColumnSchema( "Depth" , Table::STRICTLY_INCREASING , Table::DEFAULT_NONE) ); - m_schema.addColumn( ColumnSchema( "OverburdenPressure" , Table::STRICTLY_INCREASING , Table::DEFAULT_NONE) ); - SimpleTable::init( item ); -} - -const TableColumn& OverburdTable::getDepthColumn() const { - return SimpleTable::getColumn(0); -} - -const TableColumn& OverburdTable::getOverburdenPressureColumn() const { - return SimpleTable::getColumn(1); -} - -TracerVdTable::TracerVdTable(const Opm::DeckItem& item, double inv_volume) { - m_schema.addColumn(Opm::ColumnSchema("DEPTH", Table::STRICTLY_INCREASING, Table::DEFAULT_NONE)); - m_schema.addColumn(Opm::ColumnSchema("TRACER_CONCENTRATION", Table::RANDOM, Table::DEFAULT_NONE)); - SimpleTable::init(item, inv_volume); -} - -const TableColumn& TracerVdTable::getDepthColumn() const { - return SimpleTable::getColumn(0); -} - -const TableColumn& TracerVdTable::getTracerConcentration() const { - return SimpleTable::getColumn(1); -} - -namespace { - -/* - * Create a compile-time sequence of integers [0,N). In C++14 this can be - * replaced by std::index_sequence. - */ -template< std::size_t... > struct seq { using type = seq; }; -template< std::size_t N, std::size_t... Is > -struct mkseq : mkseq< N - 1, N - 1, Is... > {}; -template< std::size_t... Is > -struct mkseq< 0u, Is... > : seq< Is... >{ using type = seq< Is... >; }; - -/* - * Convenince function for creating a 'flat table', e.g. PVTW and DENSITY. - * Assumes the following: - * - * 1. The table has vector semantics with no other to enforce - * 2. That the following struct is implemented: - * struct record { - * static constexpr std::size_t size = [number-of-members] - * double members ...; - * }; - * 3. The table is declared as - * struct table : public FlatTable< table > { - * using FlatTable< table >::FlatTable; - * } - * - * If some field can *not* be defaulted, e.g. 0, specialise the flat_props - * struct (in this namespace) as such: - * template<> struct< record, 0 > { - * static constexpr bool can_default() { return false; } - * static constexpr const char* errmsg() { "error message"; } - * }; - * and the parser will throw std::invalid_argument if the field is defaulted in - * the input. - * - */ - -template< typename T, std::size_t N > -struct flat_props { - static constexpr bool can_default() { return true; } - static constexpr const char* errmsg() { return ""; } -}; - -template< typename T, std::size_t N > -double flat_get( const DeckRecord& rec ) { - if( !flat_props< T, N >::can_default() - && rec.getItem( N ).defaultApplied( 0 ) ) { - throw std::invalid_argument( flat_props< T, N >::errmsg() ); - } - - return rec.getItem( N ).getSIDouble( 0 ); -} - -template< typename T, std::size_t... Is > -std::vector< T > flat_records( const DeckKeyword& kw, seq< Is... > ) { - std::vector< T > xs; - for( const auto& record : kw ) - xs.emplace_back( T { flat_get< T, Is >( record )... } ); - - return xs; -} - -template<> -struct flat_props< PVTWRecord, 0 > { - static constexpr bool can_default() { return false; } - static constexpr const char* errmsg() { - return "PVTW reference pressure cannot be defaulted"; - } -}; - -constexpr const char* pvcdo_err[] = { - "PVCDO reference pressure cannot be defaulted", - "PVCDO oil volume factor cannot be defaulted", - "PVCDO compressibility cannot be defaulted", - "PVCDO viscosity cannot be defaulted", - "PVCDO viscosibility cannot be defaulted", -}; - -template< std::size_t N > -struct flat_props< PVCDORecord, N > { - static constexpr bool can_default() { return false; } - static constexpr const char* errmsg() { - return pvcdo_err[ N ]; - } -}; - -} - -template< typename T > -FlatTable< T >::FlatTable( const DeckKeyword& kw ) : - std::vector< T >( flat_records< T >( kw, mkseq< T::size >{} ) ) -{} - -template FlatTable< DENSITYRecord >::FlatTable( const DeckKeyword& ); -template FlatTable< PVTWRecord >::FlatTable( const DeckKeyword& ); -template FlatTable< PVCDORecord >::FlatTable( const DeckKeyword& ); -template FlatTable< ROCKRecord >::FlatTable( const DeckKeyword& ); -template FlatTable< PlyvmhRecord >::FlatTable( const DeckKeyword& ); -template FlatTable< VISCREFRecord >::FlatTable( const DeckKeyword& ); -template FlatTable< PlmixparRecord>::FlatTable( const DeckKeyword& ); -template FlatTable< ShrateRecord >::FlatTable( const DeckKeyword& ); -template FlatTable< Stone1exRecord >::FlatTable( const DeckKeyword& ); -template FlatTable< TlmixparRecord>::FlatTable( const DeckKeyword& ); -template FlatTable< WATDENTRecord >::FlatTable( const DeckKeyword& ); - -} // namespace Opm diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/TracerConfig.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/TracerConfig.cpp deleted file mode 100644 index f4afc76fbe..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/TracerConfig.cpp +++ /dev/null @@ -1,108 +0,0 @@ -/* - Copyright (C) 2020 Equinor - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include -#include -#include -#include -#include -#include -#include - -namespace Opm { - -namespace { - -Phase phase_from_string(const std::string& phase_string) { - if (phase_string == "WAT") - return Phase::WATER; - - if (phase_string == "OIL") - return Phase::OIL; - - if (phase_string == "GAS") - return Phase::GAS; - - throw std::invalid_argument("Tracer: invalid fluid name " + phase_string); -} - -} - -TracerConfig::TracerConfig(const UnitSystem& unit_system, const Deck& deck) -{ - using TR = ParserKeywords::TRACER; - if (deck.hasKeyword()) { - const auto& keyword = deck.getKeyword(); - for (const auto& record : keyword) { - const auto& name = record.getItem().get(0); - Phase phase = phase_from_string(record.getItem().get(0)); - double inv_volume; - - if (phase == Phase::GAS) - inv_volume = unit_system.getDimension(UnitSystem::measure::gas_surface_volume).getSIScaling(); - else - inv_volume = unit_system.getDimension(UnitSystem::measure::liquid_surface_volume).getSIScaling(); - - std::string tracer_field = "TBLKF" + name; - if (deck.hasKeyword(tracer_field)) { - auto concentration = deck.getKeyword(tracer_field).getRecord(0).getItem(0).getData(); - for (auto& c : concentration) - c *= inv_volume; - - this->tracers.emplace_back(name, phase, std::move(concentration)) ; - continue; - } - - std::string tracer_table = "TVDPF" + name; - if (deck.hasKeyword(tracer_table)) { - const auto& deck_item = deck.getKeyword(tracer_table).getRecord(0).getItem(0); - this->tracers.emplace_back(name, phase, TracerVdTable(deck_item, inv_volume)); - continue; - } - - throw std::runtime_error("Uninitialized tracer concentration for tracer " + name); - } - } -} - -TracerConfig TracerConfig::serializeObject() -{ - TracerConfig result; - result.tracers = {{"test", Phase::OIL, {1.0}}}; - - return result; -} - -size_t TracerConfig::size() const { - return this->tracers.size(); -} - -const std::vector::const_iterator TracerConfig::begin() const { - return this->tracers.begin(); -} - -const std::vector::const_iterator TracerConfig::end() const { - return this->tracers.end(); -} - -bool TracerConfig::operator==(const TracerConfig& other) const { - return this->tracers == other.tracers; -} - -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/checkDeck.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/checkDeck.cpp deleted file mode 100644 index 56740616b6..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/EclipseState/checkDeck.cpp +++ /dev/null @@ -1,72 +0,0 @@ -/* - Copyright 2014 Andreas Lauser - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ -#include - -#include -#include - -#include -#include -#include -#include -#include -#include - -namespace Opm { -bool checkDeck( const Deck& deck, const Parser& parser, const ParseContext& parseContext, ErrorGuard& errorGuard, size_t enabledChecks) { - bool deckValid = true; - - // make sure that the deck does not contain unknown keywords - if (enabledChecks & UnknownKeywords) { - size_t keywordIdx = 0; - for (; keywordIdx < deck.size(); keywordIdx++) { - const auto& keyword = deck.getKeyword(keywordIdx); - if (!parser.isRecognizedKeyword( keyword.name() ) ) { - std::string msg("Keyword '" + keyword.name() + "' is unknown."); - const auto& location = keyword.location(); - OpmLog::warning( Log::fileMessage(location, msg) ); - deckValid = false; - } - } - } - - // make sure all mandatory sections are present and that their order is correct - if (enabledChecks & SectionTopology) { - bool ensureKeywordSection = enabledChecks & KeywordSection; - deckValid = deckValid && DeckSection::checkSectionTopology(deck, parser, ensureKeywordSection); - } - - const std::string& deckUnitSystem = uppercase(deck.getActiveUnitSystem().getName()); - for (const auto& keyword : deck.getKeywordList("FILEUNIT")) { - const std::string& fileUnitSystem = uppercase(keyword->getRecord(0).getItem("FILE_UNIT_SYSTEM").getTrimmedString(0)); - if (fileUnitSystem != deckUnitSystem) { - const auto& location = keyword->location(); - std::string msg = - "Unit system " + fileUnitSystem + " specified via the FILEUNIT keyword at " - + location.filename + ":" + std::to_string(location.lineno) - + " does not correspond to the unit system used by the deck (" - + deckUnitSystem + ")"; - parseContext.handleError(ParseContext::UNIT_SYSTEM_MISMATCH, msg, errorGuard); - deckValid = false; - } - } - - return deckValid; -} -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Generator/KeywordGenerator.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Generator/KeywordGenerator.cpp deleted file mode 100644 index 589c7edc3d..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Generator/KeywordGenerator.cpp +++ /dev/null @@ -1,206 +0,0 @@ -/* - Copyright 2015 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include -#include -#include -#include -#include - -#include - -#include -#include -#include -#include - - -namespace { - - -const std::string sourceHeader = - "#include \n" - "#include \n" - "#include \n" - "#include \n\n\n"; -} - -namespace Opm { - - KeywordGenerator::KeywordGenerator(bool verbose) - : m_verbose( verbose ) - { - } - - std::string KeywordGenerator::headerHeader(const std::string& suffix) { - std::string header = "#ifndef PARSER_KEYWORDS_" + suffix + "_HPP\n" - "#define PARSER_KEYWORDS_" + suffix + "_HPP\n" - "#include \n" - "namespace Opm {\n" - "namespace ParserKeywords {\n\n"; - - return header; - } - - void KeywordGenerator::ensurePath( const std::string& file_name) { - Opm::filesystem::path file(file_name); - if (!Opm::filesystem::is_directory( file.parent_path())) - Opm::filesystem::create_directories( file.parent_path()); - } - - void KeywordGenerator::updateFile(const std::stringstream& newContent , const std::string& filename) { - ensurePath(filename); - std::ofstream outputStream(filename); - outputStream << newContent.str(); - } - - static void write_file( const std::stringstream& stream, const std::string& file, bool verbose, std::string desc = "source" ) { - KeywordGenerator::updateFile( stream, file ); - if( verbose ) - std::cout << "Updated " << desc << " file written to: " << file << std::endl; - } - - void KeywordGenerator::updateInitSource(const KeywordLoader& loader , const std::string& sourceFile ) const { - std::stringstream newSource; - newSource << "#include " << std::endl; - for(const auto& kw_pair : loader) { - const auto& first_char = kw_pair.first; - newSource << "#include " << std::endl; - } - newSource << "namespace Opm {" << std::endl; - newSource << "namespace ParserKeywords {" << std::endl; - newSource << "void addDefaultKeywords(Parser& p);" << std::endl - << "void addDefaultKeywords(Parser& p) {" << std::endl; - - for(const auto& kw_pair : loader) { - const auto& keywords = kw_pair.second; - for (const auto& kw: keywords) - newSource << " p.addKeyword< ParserKeywords::" - << kw.className() - << " >();" << std::endl; - } - newSource << "}" << std::endl; - newSource << "}" << std::endl; - - newSource << "void Parser::addDefaultKeywords() {\n ParserKeywords::addDefaultKeywords(*this);\n}" << std::endl; - newSource << "}" << std::endl; - write_file( newSource, sourceFile, m_verbose, "init" ); - } - - void KeywordGenerator::updateKeywordSource(const KeywordLoader& loader , const std::string& sourcePath ) const { - - for(const auto& kw_pair : loader) { - const auto& first_char = kw_pair.first; - const auto& keywords = kw_pair.second; - std::stringstream newSource; - newSource << sourceHeader << std::endl; - newSource << std::endl << std::endl << "#include " << std::endl; - newSource << "namespace Opm {" << std::endl; - newSource << "namespace ParserKeywords {" << std::endl; - for (const auto& kw: keywords) - newSource << kw.createCode() << std::endl; - newSource << "}\n}" << std::endl; - write_file( newSource, sourcePath + "/" + first_char + ".cpp", m_verbose, "source" ); - } - - } - - void KeywordGenerator::updateHeader(const KeywordLoader& loader, const std::string& headerBuildPath, const std::string& headerPath) const { - for( const auto& kw_pair : loader) { - std::stringstream stream; - const auto& first_char = kw_pair.first; - const auto& keywords = kw_pair.second; - - stream << headerHeader( std::string( 1, std::toupper( first_char ) ) ); - for( auto& kw : keywords ) - stream << kw.createDeclaration(" ") << std::endl; - - stream << "}" << std::endl << "}" << std::endl; - stream << "#endif" << std::endl; - - const auto final_path = headerBuildPath + headerPath+ "/" + std::string( 1, first_char ) + ".hpp"; - write_file( stream, final_path, m_verbose, "header" ); - } - } - - - std::string KeywordGenerator::startTest(const std::string& keyword_name) { - return std::string("BOOST_AUTO_TEST_CASE(TEST") + keyword_name + std::string("Keyword) {\n"); - } - - - std::string KeywordGenerator::endTest() { - return "}\n\n"; - } - - - - void KeywordGenerator::updateTest(const KeywordLoader& loader , const std::string& testFile) const { - std::stringstream stream; - - for(const auto& kw_pair : loader) { - const auto& first_char = kw_pair.first; - stream << "#include " << std::endl; - } - - stream << R"( - -#define BOOST_TEST_MODULE GeneratedKeywordTest -#include -#include -#include -#include -#include -#include -#include -#include -auto unitSystem = Opm::UnitSystem::newMETRIC(); - -namespace Opm { -void test_keyword(const ParserKeyword& inline_keyword, const std::string& json_file) { - Opm::filesystem::path jsonPath( json_file ); - Json::JsonObject jsonConfig( jsonPath ); - ParserKeyword json_keyword(jsonConfig); - BOOST_CHECK_EQUAL( json_keyword, inline_keyword); - if (json_keyword.hasDimension()) { - const auto& parserRecord = json_keyword.getRecord(0); - for (size_t i=0; i < parserRecord.size(); i++){ - const auto& item = parserRecord.get( i ); - for (const auto& dim : item.dimensions()) - BOOST_CHECK_NO_THROW( unitSystem.getNewDimension( dim )); - } - } -} - - -)"; - - for(const auto& kw_pair : loader) { - stream << std::endl << "BOOST_AUTO_TEST_CASE(TestKeywords" << kw_pair.first << ") {" << std::endl; - const auto& keywords = kw_pair.second; - for (const auto& kw: keywords) - stream << " test_keyword( ParserKeywords::" << kw.getName() << "(),\"" << loader.getJsonFile( kw.getName()) << "\");" << std::endl; - stream << "}" << std::endl; - } - stream << "}" << std::endl; - updateFile( stream , testFile ); - } -} - - diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Generator/KeywordLoader.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Generator/KeywordLoader.cpp deleted file mode 100644 index f1582c76ca..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Generator/KeywordLoader.cpp +++ /dev/null @@ -1,94 +0,0 @@ -/* - Copyright 2015 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include -#include -#include - -#include - -#include -#include -#include - -namespace Opm { - - KeywordLoader::KeywordLoader(const std::vector& keyword_files, bool verbose) - { - std::map keyword_map; - for (const auto& keyword_file : keyword_files) { - if (verbose) - std::cout << "Loading keyword from file: " << keyword_file << std::endl; - - Opm::filesystem::path path( keyword_file ); - std::unique_ptr parserKeyword; - - try { - Json::JsonObject jsonConfig = Json::JsonObject( path ); - parserKeyword.reset( new ParserKeyword(jsonConfig) ); - auto abs_path = Opm::filesystem::absolute( path ); - } catch (const std::exception& exc) { - std::cerr << std::endl; - std::cerr << "Failed to create parserkeyword from: " << path.string() << std::endl; - std::cerr << exc.what() << std::endl; - std::cerr << std::endl; - throw; - } - - const std::string name = parserKeyword->getName(); - if (keyword_map.find(name) != keyword_map.end()) { - this->m_jsonFile.erase(name); - keyword_map.erase(name); - } - - - this->m_jsonFile.insert( std::pair ( name , keyword_file)); - keyword_map.insert( std::pair ( name , std::move(*parserKeyword))); - } - - this->keywords['Y'] = {}; - this->keywords['X'] = {}; - for (const auto& kw_pair : keyword_map) { - const auto& name = kw_pair.first; - const auto& parserKeyword = kw_pair.second; - this->keywords[name[0]].push_back( std::move(parserKeyword) ); - } - } - - - std::string KeywordLoader::getJsonFile(const std::string& keyword) const { - auto iter = m_jsonFile.find( keyword ); - if (iter == m_jsonFile.end()) - throw std::invalid_argument("Keyword " + keyword + " not loaded"); - else - return (*iter).second; - } - - - std::map>::const_iterator KeywordLoader::begin( ) const { - return this->keywords.begin( ); - } - - - std::map>::const_iterator KeywordLoader::end( ) const { - return this->keywords.end( ); - } -} - - diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Parser/ErrorGuard.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Parser/ErrorGuard.cpp deleted file mode 100644 index 7bc2332a80..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Parser/ErrorGuard.cpp +++ /dev/null @@ -1,79 +0,0 @@ -/* - Copyright 2019 Joakim Hove/datagr - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include -#include -#include - -#include - - -namespace Opm { - - void ErrorGuard::addError(const std::string& errorKey, const std::string& msg) { - this->error_list.emplace_back(errorKey, msg); - } - - - void ErrorGuard::addWarning(const std::string& errorKey, const std::string& msg) { - this->warning_list.emplace_back(errorKey, msg); - } - - - void ErrorGuard::dump() const { - std::size_t width = 0; - for (const auto& pair : this->warning_list) - width = std::max(width, pair.first.size()); - - for (const auto& pair : this->error_list) - width = std::max(width, pair.first.size()); - - if (!this->warning_list.empty()) { - std::cerr << "Warnings:" << std::endl; - for (const auto& pair : this->warning_list) - std::cerr << " " << std::setw(width) << pair.first << ": " << pair.second << std::endl; - std::cerr << std::endl; - } - - if (!this->error_list.empty()) { - std::cerr << std::endl << std::endl << "Errors:" << std::endl; - for (const auto& pair : this->error_list) - std::cerr << std::left << " " << std::setw(width) << pair.first << ": " << pair.second << std::endl; - std::cerr << std::endl; - } - } - - - void ErrorGuard::clear() { - this->warning_list.clear(); - this->error_list.clear(); - } - - void ErrorGuard::terminate() const { - this->dump(); - std::exit(1); - } - - - ErrorGuard::~ErrorGuard() { - if (*this) - this->terminate(); - } - -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Parser/ParseContext.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Parser/ParseContext.cpp deleted file mode 100644 index f8126448a9..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Parser/ParseContext.cpp +++ /dev/null @@ -1,361 +0,0 @@ -/* - Copyright 2015 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include -#include - -#ifdef _WIN32 -#include "cross-platform/windows/Substitutes.hpp" -#else -#include -#endif - -#include -#include -#include -#include - -namespace Opm { - - - /* - A set of predefined error modes are added, with the default - setting 'InputError::IGNORE, then afterwards the environment - variables 'OPM_ERRORS_EXCEPTION', 'OPM_ERRORS_WARN' and - 'OPM_ERRORS_IGNORE' are consulted - */ - - ParseContext::ParseContext() { - initDefault(); - initEnv(); - } - - /* - If you intend to hardwire settings you should use this - constructor, as that way the environment variables are applied - after the hawrdwired settings. - */ - - ParseContext::ParseContext(const std::vector>& initial) { - initDefault(); - - for (const auto& pair : initial) - update( pair.first , pair.second ); - - initEnv(); - } - - - /* - This constructor will initialize all actions to @default_action. The - environment variables will be used. - */ - - ParseContext::ParseContext(InputError::Action default_action) { - initDefault(); - update(default_action); - initEnv(); - } - - void ParseContext::initDefault() { - addKey(PARSE_EXTRA_RECORDS, InputError::THROW_EXCEPTION); - addKey(PARSE_UNKNOWN_KEYWORD, InputError::THROW_EXCEPTION); - addKey(PARSE_RANDOM_TEXT, InputError::THROW_EXCEPTION); - addKey(PARSE_RANDOM_SLASH, InputError::THROW_EXCEPTION); - addKey(PARSE_MISSING_DIMS_KEYWORD, InputError::THROW_EXCEPTION); - addKey(PARSE_EXTRA_DATA, InputError::THROW_EXCEPTION); - addKey(PARSE_MISSING_INCLUDE, InputError::EXIT1); - addKey(PARSE_LONG_KEYWORD, InputError::WARN); - addKey(PARSE_WGNAME_SPACE, InputError::THROW_EXCEPTION); - - addKey(UNIT_SYSTEM_MISMATCH, InputError::THROW_EXCEPTION); - - this->addKey(RUNSPEC_NUMWELLS_TOO_LARGE, InputError::THROW_EXCEPTION); - this->addKey(RUNSPEC_CONNS_PER_WELL_TOO_LARGE, InputError::THROW_EXCEPTION); - this->addKey(RUNSPEC_NUMGROUPS_TOO_LARGE, InputError::THROW_EXCEPTION); - this->addKey(RUNSPEC_GROUPSIZE_TOO_LARGE, InputError::THROW_EXCEPTION); - - addKey(UNSUPPORTED_SCHEDULE_GEO_MODIFIER, InputError::THROW_EXCEPTION); - addKey(UNSUPPORTED_COMPORD_TYPE, InputError::THROW_EXCEPTION); - addKey(UNSUPPORTED_INITIAL_THPRES, InputError::THROW_EXCEPTION); - addKey(UNSUPPORTED_TERMINATE_IF_BHP, InputError::THROW_EXCEPTION); - - addKey(INTERNAL_ERROR_UNINITIALIZED_THPRES, InputError::THROW_EXCEPTION); - - addKey(SUMMARY_UNKNOWN_WELL, InputError::THROW_EXCEPTION); - addKey(SUMMARY_UNKNOWN_GROUP, InputError::THROW_EXCEPTION); - addKey(SUMMARY_UNHANDLED_KEYWORD, InputError::WARN); - addKey(SUMMARY_UNDEFINED_UDQ, InputError::WARN); - addKey(SUMMARY_UDQ_MISSING_UNIT, InputError::WARN); - addKey(SCHEDULE_INVALID_NAME, InputError::THROW_EXCEPTION); - - addKey(ACTIONX_ILLEGAL_KEYWORD, InputError::THROW_EXCEPTION); - - addKey(RPT_MIXED_STYLE, InputError::WARN); - addKey(RPT_UNKNOWN_MNEMONIC, InputError::WARN); - - addKey(SIMULATOR_KEYWORD_NOT_SUPPORTED, InputError::WARN); - addKey(SIMULATOR_KEYWORD_ITEM_NOT_SUPPORTED, InputError::WARN); - - this->addKey(UDQ_PARSE_ERROR, InputError::THROW_EXCEPTION); - this->addKey(UDQ_TYPE_ERROR, InputError::THROW_EXCEPTION); - this->addKey(SCHEDULE_GROUP_ERROR, InputError::THROW_EXCEPTION); - this->addKey(SCHEDULE_IGNORED_GUIDE_RATE, InputError::WARN); - this->addKey(SCHEDULE_COMPSEGS_INVALID, InputError::THROW_EXCEPTION); - this->addKey(SCHEDULE_COMPSEGS_NOT_SUPPORTED, InputError::THROW_EXCEPTION); - } - - void ParseContext::initEnv() { - envUpdate( "OPM_ERRORS_EXCEPTION" , InputError::THROW_EXCEPTION ); - envUpdate( "OPM_ERRORS_WARN" , InputError::WARN ); - envUpdate( "OPM_ERRORS_IGNORE" , InputError::IGNORE ); - envUpdate( "OPM_ERRORS_EXIT1", InputError::EXIT1); - envUpdate( "OPM_ERRORS_EXIT", InputError::EXIT1); - envUpdate( "OPM_ERRORS_DELAYED_EXIT1", InputError::DELAYED_EXIT1); - envUpdate( "OPM_ERRORS_DELAYED_EXIT", InputError::DELAYED_EXIT1); - } - - - void ParseContext::ignoreKeyword(const std::string& keyword) { - this->ignore_keywords.insert(keyword); - } - - - void ParseContext::handleError( - const std::string& errorKey, - const std::string& msg, - ErrorGuard& errors) const { - - InputError::Action action = get( errorKey ); - - if (action == InputError::IGNORE) { - errors.addWarning(errorKey, msg); - return; - } - - if (action == InputError::WARN) { - OpmLog::warning(msg); - errors.addWarning(errorKey, msg); - return; - } - - if (action == InputError::THROW_EXCEPTION) { - OpmLog::error(msg); - // If we decide to throw immediately - we clear the error stack to - // make sure the error object does not terminate the application - // when it goes out of scope. - errors.clear(); - throw std::invalid_argument(errorKey + ": " + msg); - } - - if (action == InputError::EXIT1) { - OpmLog::error(msg); - std::cerr << "A fatal error has occured and the application will stop." << std::endl; - std::cerr << msg << std::endl; - std::exit(1); - } - - if (action == InputError::DELAYED_EXIT1) { - OpmLog::error(msg); - errors.addError(errorKey, msg); - return; - } - } - - void ParseContext::handleUnknownKeyword(const std::string& keyword, ErrorGuard& errors) const { - if (this->ignore_keywords.find(keyword) == this->ignore_keywords.end()) { - std::string msg = "Unknown keyword: " + keyword; - this->handleError(ParseContext::PARSE_UNKNOWN_KEYWORD, msg, errors); - } - } - - std::map::const_iterator ParseContext::begin() const { - return m_errorContexts.begin(); - } - - - std::map::const_iterator ParseContext::end() const { - return m_errorContexts.end(); - } - - ParseContext ParseContext::withKey(const std::string& key, InputError::Action action) const { - ParseContext pc(*this); - pc.addKey(key, action); - return pc; - } - - ParseContext& ParseContext::withKey(const std::string& key, InputError::Action action) { - this->addKey(key, action); - return *this; - } - - bool ParseContext::hasKey(const std::string& key) const { - if (m_errorContexts.find( key ) == m_errorContexts.end()) - return false; - else - return true; - } - - - void ParseContext::addKey(const std::string& key, InputError::Action default_action) { - if (key.find_first_of("|:*") != std::string::npos) - throw std::invalid_argument("The ParseContext keys can not contain '|', '*' or ':'"); - - if (!hasKey(key)) - m_errorContexts.insert( std::pair( key , default_action)); - } - - - InputError::Action ParseContext::get(const std::string& key) const { - if (hasKey( key )) - return m_errorContexts.find( key )->second; - else - throw std::invalid_argument("The errormode key: " + key + " has not been registered"); - } - - /*****************************************************************/ - - /* - This is the 'strict' update function, it will throw an exception - if the input string is not a defined error mode. This should - typically be used in a downstream module where the policy - regarding an error mode is hardcoded. When using this method the - static string constanst for the different error modes should be - used as arguments: - - parseContext.updateKey( ParseContext::PARSE_RANDOM_SLASH , InputError::IGNORE ) - - */ - - void ParseContext::updateKey(const std::string& key , InputError::Action action) { - if (hasKey(key)) - m_errorContexts[key] = action; - else - throw std::invalid_argument("The errormode key: " + key + " has not been registered"); - } - - - void ParseContext::envUpdate( const std::string& envVariable , InputError::Action action ) { - const char * userSetting = getenv(envVariable.c_str()); - if (userSetting ) - update( userSetting , action); - } - - - void ParseContext::update(InputError::Action action) { - for (const auto& pair : m_errorContexts) { - const std::string& key = pair.first; - updateKey( key , action ); - } - } - - - void ParseContext::patternUpdate( const std::string& pattern , InputError::Action action) { - const char * c_pattern = pattern.c_str(); - for (const auto& pair : m_errorContexts) { - const std::string& key = pair.first; - if (fnmatch( c_pattern , key.c_str() , 0 ) == 0) - updateKey( key , action ); - } - } - - - /* - This is the most general update function. The input keyString is - "selector string", and all matching error modes will be set to - @action. The algorithm for decoding the @keyString is: - - 1. The input string is split into several tokens on occurences - of ':' or ':' - and then each element is treated - seperately. - - 2. For each element in the list from 1): - - a) If it contains at least one '*' - update all error modes - matching the input string. - - b) If it is exactly equal to recognized error mode - update - that. - - c) Otherwise - silently ignore. - */ - - void ParseContext::update(const std::string& keyString , InputError::Action action) { - std::vector keys = split_string(keyString, ":|"); - for (const auto& input_key : keys) { - std::vector matching_keys; - size_t wildcard_pos = input_key.find("*"); - - if (wildcard_pos == std::string::npos) { - if (hasKey( input_key )) - updateKey( input_key , action ); - } else - patternUpdate( input_key , action ); - - } - } - - const std::string ParseContext::PARSE_EXTRA_RECORDS = "PARSE_EXTRA_RECORDS"; - const std::string ParseContext::PARSE_UNKNOWN_KEYWORD = "PARSE_UNKNOWN_KEYWORD"; - const std::string ParseContext::PARSE_RANDOM_TEXT = "PARSE_RANDOM_TEXT"; - const std::string ParseContext::PARSE_RANDOM_SLASH = "PARSE_RANDOM_SLASH"; - const std::string ParseContext::PARSE_MISSING_DIMS_KEYWORD = "PARSE_MISSING_DIMS_KEYWORD"; - const std::string ParseContext::PARSE_EXTRA_DATA = "PARSE_EXTRA_DATA"; - const std::string ParseContext::PARSE_MISSING_SECTIONS = "PARSE_MISSING_SECTIONS"; - const std::string ParseContext::PARSE_MISSING_INCLUDE = "PARSE_MISSING_INCLUDE"; - const std::string ParseContext::PARSE_LONG_KEYWORD = "PARSE_LONG_KEYWORD"; - const std::string ParseContext::PARSE_WGNAME_SPACE = "PARSE_WGNAME_SPACE"; - - const std::string ParseContext::UNIT_SYSTEM_MISMATCH = "UNIT_SYSTEM_MISMATCH"; - - const std::string ParseContext::RUNSPEC_NUMWELLS_TOO_LARGE = "RUNSPEC_NUMWELLS_TOO_LARGE"; - const std::string ParseContext::RUNSPEC_CONNS_PER_WELL_TOO_LARGE = "RUNSPEC_CONNS_PER_WELL_TOO_LARGE"; - const std::string ParseContext::RUNSPEC_NUMGROUPS_TOO_LARGE = "RUNSPEC_NUMGROUPS_TOO_LARGE"; - const std::string ParseContext::RUNSPEC_GROUPSIZE_TOO_LARGE = "RUNSPEC_GROUPSIZE_TOO_LARGE"; - - const std::string ParseContext::UNSUPPORTED_SCHEDULE_GEO_MODIFIER = "UNSUPPORTED_SCHEDULE_GEO_MODIFIER"; - const std::string ParseContext::UNSUPPORTED_COMPORD_TYPE = "UNSUPPORTED_COMPORD_TYPE"; - const std::string ParseContext::UNSUPPORTED_INITIAL_THPRES = "UNSUPPORTED_INITIAL_THPRES"; - const std::string ParseContext::UNSUPPORTED_TERMINATE_IF_BHP = "UNSUPPORTED_TERMINATE_IF_BHP"; - - const std::string ParseContext::INTERNAL_ERROR_UNINITIALIZED_THPRES = "INTERNAL_ERROR_UNINITIALIZED_THPRES"; - - const std::string ParseContext::SUMMARY_UNKNOWN_WELL = "SUMMARY_UNKNOWN_WELL"; - const std::string ParseContext::SUMMARY_UNKNOWN_GROUP = "SUMMARY_UNKNOWN_GROUP"; - const std::string ParseContext::SUMMARY_UNHANDLED_KEYWORD = "SUMMARY_UNHANDLED_KEYWORD"; - const std::string ParseContext::SUMMARY_UNDEFINED_UDQ = "SUMMARY_UNDEFINED_UDQ"; - const std::string ParseContext::SUMMARY_UDQ_MISSING_UNIT = "SUMMARY_UDQ_MISSING_UNIT"; - - const std::string ParseContext::RPT_MIXED_STYLE = "RPT_MIXED_STYLE"; - const std::string ParseContext::RPT_UNKNOWN_MNEMONIC = "RPT_UNKNOWN_MNEMONIC"; - - const std::string ParseContext::SCHEDULE_INVALID_NAME = "SCHEDULE_INVALID_NAME"; - const std::string ParseContext::ACTIONX_ILLEGAL_KEYWORD = "ACTIONX_ILLEGAL_KEYWORD"; - - const std::string ParseContext::SIMULATOR_KEYWORD_NOT_SUPPORTED = "SIMULATOR_KEYWORD_NOT_SUPPORTED"; - const std::string ParseContext::SIMULATOR_KEYWORD_ITEM_NOT_SUPPORTED = "SIMULATOR_KEYWORD_ITEM_NOT_SUPPORTED"; - - const std::string ParseContext::UDQ_PARSE_ERROR = "UDQ_PARSE_ERROR"; - const std::string ParseContext::UDQ_TYPE_ERROR = "UDQ_TYPE_ERROR"; - const std::string ParseContext::SCHEDULE_GROUP_ERROR = "SCHEDULE_GROUP_ERROR"; - const std::string ParseContext::SCHEDULE_IGNORED_GUIDE_RATE = "SCHEDULE_IGNORED_GUIDE_RATE"; - - const std::string ParseContext::SCHEDULE_COMPSEGS_INVALID = "SCHEDULE_COMPSEG_INVALID"; - const std::string ParseContext::SCHEDULE_COMPSEGS_NOT_SUPPORTED = "SCHEDULE_COMPSEGS_NOT_SUPPORTED"; -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Parser/Parser.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Parser/Parser.cpp deleted file mode 100644 index b2e0dc1ca0..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Parser/Parser.cpp +++ /dev/null @@ -1,1331 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -#include -#include - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "raw/RawConsts.hpp" -#include "raw/RawEnums.hpp" -#include "raw/RawRecord.hpp" -#include "raw/RawKeyword.hpp" -#include "raw/StarToken.hpp" - -namespace Opm { - -namespace { -namespace str { -const std::string emptystr = ""; - -struct find_comment { - /* - * A note on performance: using a function to plug functionality into - * find_terminator rather than plain functions because it almost ensures - * inlining, where the plain function can reduce to a function pointer. - */ - template< typename Itr > - Itr operator()( Itr begin, Itr end ) const { - auto itr = std::find( begin, end, '-' ); - for( ; itr != end; itr = std::find( itr + 1, end, '-' ) ) - if( (itr + 1) != end && *( itr + 1 ) == '-' ) return itr; - - return end; - } -}; - -template< typename Itr, typename Term > -inline Itr find_terminator( Itr begin, Itr end, Term terminator ) { - - auto pos = terminator( begin, end ); - - if( pos == begin || pos == end) return pos; - - auto qbegin = std::find_if( begin, end, RawConsts::is_quote() ); - - if( qbegin == end || qbegin > pos ) - return pos; - - auto qend = std::find( qbegin + 1, end, *qbegin ); - - // Quotes are not balanced - probably an error?! - if( qend == end ) return end; - - return find_terminator( qend + 1, end, terminator ); -} - -/** - This function will return a copy of the input string where all - characters following '--' are removed. The copy is a view and relies on - the source string to remain alive. The function handles quoting with - single quotes and double quotes: - - ABC --Comment => ABC - ABC '--Comment1' --Comment2 => ABC '--Comment1' - ABC "-- Not balanced quote? => ABC "-- Not balanced quote? -*/ -static inline string_view strip_comments( string_view str ) { - return { str.begin(), - find_terminator( str.begin(), str.end(), find_comment() ) }; -} - -template< typename Itr > -inline Itr trim_left( Itr begin, Itr end ) { - return std::find_if_not( begin, end, RawConsts::is_separator() ); -} - -template< typename Itr > -inline Itr trim_right( Itr begin, Itr end ) { - - std::reverse_iterator< Itr > rbegin( end ); - std::reverse_iterator< Itr > rend( begin ); - - return std::find_if_not( rbegin, rend, RawConsts::is_separator() ).base(); -} - -inline string_view trim( string_view str ) { - auto fst = trim_left( str.begin(), str.end() ); - auto lst = trim_right( fst, str.end() ); - return { fst, lst }; -} - -inline string_view del_after_first_slash( string_view view ) { - using itr = string_view::const_iterator; - const auto term = []( itr begin, itr end ) { - return std::find( begin, end, '/' ); - }; - - auto begin = view.begin(); - auto end = view.end(); - auto slash = find_terminator( begin, end, term ); - - /* we want to preserve terminating slashes */ - if( slash != end ) ++slash; - - return { begin, slash }; -} - -inline string_view del_after_last_slash( string_view view ) { - auto begin = view.begin(); - auto end = view.end(); - auto slash = end; - - while (true) { - if (slash == begin) - break; - - if (*slash == '/') - break; - - slash--; - } - if (slash == begin) - slash = end; - - /* we want to preserve terminating slashes */ - if( slash != end ) ++slash; - - return { begin, slash }; -} - -inline string_view del_after_slash(string_view view, bool raw_strings) { - if (raw_strings) - return del_after_last_slash(view); - else - return del_after_first_slash(view); -} - - -inline bool getline( string_view& input, string_view& line ) { - if( input.empty() ) return false; - - auto end = std::find( input.begin(), input.end(), '\n' ); - - line = string_view( input.begin(), end ); - input = string_view( end + 1, input.end() ); - return true; - - /* we know that we always append a newline onto the input string, so we can - * safely assume that end+1 will either be end-of-input (i.e. empty range) - * or the start of the next line - */ -} - -/* - * Read the input file and remove everything that isn't interesting data, - * including stripping comments, removing leading/trailing whitespaces and - * everything after (terminating) slashes. Manually copying into the string for - * performance. - */ -inline std::string fast_clean( const std::string& str ) { - std::string dst; - dst.resize( str.size() ); - - string_view input( str ), line; - auto dsti = dst.begin(); - while( true ) { - - if ( getline( input, line ) ) { - line = trim( strip_comments(line)); - - std::copy( line.begin(), line.end(), dsti ); - dsti += std::distance( line.begin(), line.end() ); - *dsti++ = '\n'; - } else - break; - } - - dst.resize( std::distance( dst.begin(), dsti ) ); - return dst; -} - -inline std::string clean( const std::vector>& code_keywords, const std::string& str ) { - auto count = std::count_if(code_keywords.begin(), code_keywords.end(), [&str](const std::pair& code_pair) - { - return str.find(code_pair.first) != std::string::npos; - }); - - if (count == 0) - return fast_clean(str); - else { - std::string dst; - dst.resize( str.size() ); - - string_view input( str ), line; - auto dsti = dst.begin(); - while( true ) { - for (const auto& code_pair : code_keywords) { - const auto& keyword = code_pair.first; - - if (input.starts_with(keyword)) { - std::string end_string = code_pair.second; - auto end_pos = input.find(end_string); - if (end_pos == std::string::npos) { - std::copy(input.begin(), input.end(), dsti); - dsti += std::distance( input.begin(), input.end() ); - input = string_view(input.end(), input.end()); - break; - } else { - end_pos += end_string.size(); - std::copy(input.begin(), input.begin() + end_pos, dsti); - dsti += end_pos; - *dsti++ = '\n'; - input = string_view(input.begin() + end_pos + 1, input.end()); - break; - } - } - } - - if ( getline( input, line ) ) { - line = trim( strip_comments(line)); - - std::copy( line.begin(), line.end(), dsti ); - dsti += std::distance( line.begin(), line.end() ); - *dsti++ = '\n'; - } else - break; - } - - dst.resize( std::distance( dst.begin(), dsti ) ); - return dst; - } -} - - - - - -inline std::string make_deck_name(const string_view& str) { - auto first_sep = std::find_if( str.begin(), str.end(), RawConsts::is_separator() ); - return uppercase( str.substr(0, first_sep - str.begin()) ); -} - - -inline string_view update_record_buffer(const string_view& record_buffer, const string_view& line) { - if (record_buffer.empty()) - return line; - else - return { record_buffer.begin(), line.end() }; -} - - -inline bool isTerminator(const string_view& line) { - return (line.size() == 1 && line.back() == RawConsts::slash); -} - -inline bool isTerminatedRecordString(const string_view& line) { - return (line.back() == RawConsts::slash); -} - -} - -struct file { - file( Opm::filesystem::path p, const std::string& in ) : - input( in ), path( p ) - {} - - string_view input; - size_t lineNR = 0; - Opm::filesystem::path path; -}; - - -class InputStack : public std::stack< file, std::vector< file > > { - public: - void push( std::string&& input, Opm::filesystem::path p = "" ); - - private: - std::list< std::string > string_storage; - using base = std::stack< file, std::vector< file > >; -}; - -void InputStack::push( std::string&& input, Opm::filesystem::path p ) { - this->string_storage.push_back( std::move( input ) ); - this->emplace( p, this->string_storage.back() ); -} - -class ParserState { - public: - ParserState( const std::vector>&, const ParseContext&, ErrorGuard& ); - ParserState( const std::vector>&, const ParseContext&, ErrorGuard&, Opm::filesystem::path ); - - void loadString( const std::string& ); - void loadFile( const Opm::filesystem::path& ); - void openRootFile( const Opm::filesystem::path& ); - - void handleRandomText(const string_view& ) const; - Opm::filesystem::path getIncludeFilePath( std::string ) const; - void addPathAlias( const std::string& alias, const std::string& path ); - - const Opm::filesystem::path& current_path() const; - size_t line() const; - - bool done() const; - string_view getline(); - void ungetline(const string_view& ln); - void closeFile(); - - private: - const std::vector> code_keywords; - InputStack input_stack; - - std::map< std::string, std::string > pathMap; - Opm::filesystem::path rootPath; - - public: - ParserKeywordSizeEnum lastSizeType = SLASH_TERMINATED; - std::string lastKeyWord; - - Deck deck; - std::unique_ptr python; - const ParseContext& parseContext; - ErrorGuard& errors; - bool unknown_keyword = false; -}; - -const Opm::filesystem::path& ParserState::current_path() const { - return this->input_stack.top().path; -} - -size_t ParserState::line() const { - return this->input_stack.top().lineNR; -} - -bool ParserState::done() const { - - while( !this->input_stack.empty() && - this->input_stack.top().input.empty() ) - const_cast< ParserState* >( this )->input_stack.pop(); - - return this->input_stack.empty(); -} - -string_view ParserState::getline() { - string_view ln; - - str::getline( this->input_stack.top().input, ln ); - this->input_stack.top().lineNR++; - - return ln; -} - - - -void ParserState::ungetline(const string_view& line) { - auto& file_view = this->input_stack.top().input; - if (line.end() + 1 != file_view.begin()) - throw std::invalid_argument("line view does not immediately proceed file_view"); - - file_view = string_view(line.begin(), file_view.end()); - this->input_stack.top().lineNR--; -} - - - - -void ParserState::closeFile() { - this->input_stack.pop(); -} - -ParserState::ParserState(const std::vector>& code_keywords_arg, - const ParseContext& __parseContext, - ErrorGuard& errors_arg) : - code_keywords(code_keywords_arg), - python( std::make_unique() ), - parseContext( __parseContext ), - errors( errors_arg ) -{} - -ParserState::ParserState( const std::vector>& code_keywords_arg, - const ParseContext& context, - ErrorGuard& errors_arg, - Opm::filesystem::path p ) : - code_keywords(code_keywords_arg), - rootPath( Opm::filesystem::canonical( p ).parent_path() ), - python( std::make_unique() ), - parseContext( context ), - errors( errors_arg ) -{ - openRootFile( p ); -} - -void ParserState::loadString(const std::string& input) { - this->input_stack.push( str::clean( this->code_keywords, input + "\n" ) ); -} - -void ParserState::loadFile(const Opm::filesystem::path& inputFile) { - - Opm::filesystem::path inputFileCanonical; - try { - inputFileCanonical = Opm::filesystem::canonical(inputFile); - } catch (const Opm::filesystem::filesystem_error& fs_error) { - std::string msg = "Could not open file: " + inputFile.string(); - parseContext.handleError( ParseContext::PARSE_MISSING_INCLUDE , msg, errors); - return; - } - - const auto closer = []( std::FILE* f ) { std::fclose( f ); }; - std::unique_ptr< std::FILE, decltype( closer ) > ufp( - std::fopen( inputFileCanonical.string().c_str(), "rb" ), - closer - ); - - // make sure the file we'd like to parse is readable - if( !ufp ) { - std::string msg = "Could not read from file: " + inputFile.string(); - - parseContext.handleError( ParseContext::PARSE_MISSING_INCLUDE , msg, errors); - return; - } - - /* - * read the input file C-style. This is done for performance - * reasons, as streams are slow - */ - - auto* fp = ufp.get(); - std::string buffer; - std::fseek( fp, 0, SEEK_END ); - buffer.resize( std::ftell( fp ) + 1 ); - std::rewind( fp ); - const auto readc = std::fread( &buffer[ 0 ], 1, buffer.size() - 1, fp ); - buffer.back() = '\n'; - - if( std::ferror( fp ) || readc != buffer.size() - 1 ) - throw std::runtime_error( "Error when reading input file '" - + inputFileCanonical.string() + "'" ); - - this->input_stack.push( str::clean( this->code_keywords, buffer ), inputFileCanonical ); -} - -/* - * We have encountered 'random' characters in the input file which - * are not correctly formatted as a keyword heading, and not part - * of the data section of any keyword. - */ - -void ParserState::handleRandomText(const string_view& keywordString ) const { - std::string errorKey; - std::stringstream msg; - std::string trimmedCopy = keywordString.string(); - - - if (trimmedCopy == "/") { - errorKey = ParseContext::PARSE_RANDOM_SLASH; - msg << "Extra '/' detected at: " - << this->current_path() - << ":" << this->line(); - } - else if (lastSizeType == OTHER_KEYWORD_IN_DECK) { - errorKey = ParseContext::PARSE_EXTRA_RECORDS; - msg << "String: \'" - << keywordString - << "\' invalid." - << "Too many records in keyword: " - << lastKeyWord - << " at: " - << this->line() - << ".\n"; - } - else { - errorKey = ParseContext::PARSE_RANDOM_TEXT; - msg << "String \'" << keywordString - << "\' not formatted/recognized as valid keyword at: " - << this->current_path() - << ":" << this->line(); - } - parseContext.handleError( errorKey , msg.str(), errors ); -} - -void ParserState::openRootFile( const Opm::filesystem::path& inputFile) { - this->loadFile( inputFile ); - this->deck.setDataFile( inputFile.string() ); - const Opm::filesystem::path& inputFileCanonical = Opm::filesystem::canonical(inputFile); - rootPath = inputFileCanonical.parent_path(); -} - -Opm::filesystem::path ParserState::getIncludeFilePath( std::string path ) const { - static const std::string pathKeywordPrefix("$"); - static const std::string validPathNameCharacters("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"); - - size_t positionOfPathName = path.find(pathKeywordPrefix); - - if ( positionOfPathName != std::string::npos) { - std::string stringStartingAtPathName = path.substr(positionOfPathName+1); - size_t cutOffPosition = stringStartingAtPathName.find_first_not_of(validPathNameCharacters); - std::string stringToFind = stringStartingAtPathName.substr(0, cutOffPosition); - std::string stringToReplace = this->pathMap.at( stringToFind ); - replaceAll(path, pathKeywordPrefix + stringToFind, stringToReplace); - } - - // Check if there are any backslashes in the path... - if (path.find('\\') != std::string::npos) { - // ... if so, replace with slashes and create a warning. - std::replace(path.begin(), path.end(), '\\', '/'); - OpmLog::warning("Replaced one or more backslash with a slash in an INCLUDE path."); - } - - Opm::filesystem::path includeFilePath(path); - - if (includeFilePath.is_relative()) - return this->rootPath / includeFilePath; - - return includeFilePath; -} - -void ParserState::addPathAlias( const std::string& alias, const std::string& path ) { - this->pathMap.emplace( alias, path ); -} - - -RawKeyword * newRawKeyword(const ParserKeyword& parserKeyword, const std::string& keywordString, ParserState& parserState, const Parser& parser) { - bool raw_string_keyword = parserKeyword.rawStringKeyword(); - - if( parserKeyword.getSizeType() == SLASH_TERMINATED || parserKeyword.getSizeType() == UNKNOWN || parserKeyword.getSizeType() == DOUBLE_SLASH_TERMINATED) { - - const auto size_type = parserKeyword.getSizeType(); - Raw::KeywordSizeEnum rawSizeType; - - switch(size_type) { - case SLASH_TERMINATED: rawSizeType = Raw::SLASH_TERMINATED; break; - case UNKNOWN: rawSizeType = Raw::UNKNOWN; break; - case DOUBLE_SLASH_TERMINATED: rawSizeType = Raw::DOUBLE_SLASH_TERMINATED; break; - default: - throw std::logic_error("Should not be here!"); - } - - return new RawKeyword( keywordString, - parserState.current_path().string(), - parserState.line(), - raw_string_keyword, - rawSizeType); - } - - if( parserKeyword.hasFixedSize() ) { - auto size_type = Raw::FIXED; - if (parserKeyword.isCodeKeyword()) - size_type = Raw::CODE; - - return new RawKeyword( keywordString, - parserState.current_path().string(), - parserState.line(), - raw_string_keyword, - size_type, - parserKeyword.getFixedSize()); - } - - const auto& keyword_size = parserKeyword.getKeywordSize(); - const auto& deck = parserState.deck; - auto size_type = parserKeyword.isTableCollection() ? Raw::TABLE_COLLECTION : Raw::FIXED; - - if( deck.hasKeyword(keyword_size.keyword ) ) { - const auto& sizeDefinitionKeyword = deck.getKeyword(keyword_size.keyword); - const auto& record = sizeDefinitionKeyword.getRecord(0); - auto targetSize = record.getItem( keyword_size.item ).get< int >( 0 ) + keyword_size.shift; - if (parserKeyword.isAlternatingKeyword()) - targetSize *= std::distance( parserKeyword.begin(), parserKeyword.end() ); - - return new RawKeyword( keywordString, - parserState.current_path().string(), - parserState.line(), - raw_string_keyword, - size_type, - targetSize); - } - - std::string msg = "Expected the kewyord: " +keyword_size.keyword - + " to infer the number of records in: " + keywordString; - parserState.parseContext.handleError(ParseContext::PARSE_MISSING_DIMS_KEYWORD , msg, parserState.errors ); - - const auto& keyword = parser.getKeyword( keyword_size.keyword ); - const auto& record = keyword.getRecord(0); - const auto& int_item = record.get( keyword_size.item); - - const auto targetSize = int_item.getDefault< int >( ) + keyword_size.shift; - return new RawKeyword( keywordString, - parserState.current_path().string(), - parserState.line(), - raw_string_keyword, - size_type, - targetSize); -} - - -RawKeyword * newRawKeyword( const std::string& deck_name, ParserState& parserState, const Parser& parser, const string_view& line ) { - if (parser.isRecognizedKeyword(deck_name)) { - parserState.unknown_keyword = false; - const auto& parserKeyword = parser.getParserKeywordFromDeckName(deck_name); - return newRawKeyword(parserKeyword, deck_name, parserState, parser); - } - - if (deck_name.size() > RawConsts::maxKeywordLength) { - const std::string keyword8 = deck_name.substr(0, RawConsts::maxKeywordLength); - if (parser.isRecognizedKeyword(keyword8)) { - std::string msg = "Keyword: " + deck_name + " too long - only first eight characters recognized"; - parserState.parseContext.handleError(ParseContext::PARSE_LONG_KEYWORD, msg, parserState.errors); - - parserState.unknown_keyword = false; - const auto& parserKeyword = parser.getParserKeywordFromDeckName( keyword8 ); - return newRawKeyword(parserKeyword, keyword8, parserState, parser); - } - } - - if( ParserKeyword::validDeckName(deck_name) ) { - parserState.parseContext.handleUnknownKeyword( deck_name, parserState.errors ); - parserState.unknown_keyword = true; - return nullptr; - } - - if (!parserState.unknown_keyword) - parserState.handleRandomText(line); - - return nullptr; -} - -// This code is made to skip part of the eclipse file containing the contents of UDT -// UDT is currently not a asupported keyword. -// The first record of UDT contains a line, that MAY (although unlikely) contain a keyword. -// Skipping this first line, and the next, skipUDT then searches for the next -// keyword, which marks the end of UDT. -void skipUDT( ParserState& parserState, const Parser& parser) { - //Skipping first two records of UDT: - size_t record_count = 0; - size_t count_max = 2; - - while( !parserState.done() ) { - auto line = parserState.getline(); - if( line.empty() ) continue; - - if (record_count < count_max) - record_count++; - else { - std::string deck_name = str::make_deck_name( line ); - if (parser.hasKeyword(deck_name)) { - parserState.ungetline(line); - return; - } - } - } -} - - -std::unique_ptr tryParseKeyword( ParserState& parserState, const Parser& parser) { - bool is_title = false; - std::unique_ptr rawKeyword; - string_view record_buffer(str::emptystr); - while( !parserState.done() ) { - auto line = parserState.getline(); - - if( line.empty() && !rawKeyword ) continue; - if( line.empty() && !is_title ) continue; - - std::string keywordString; - - if( !rawKeyword ) { - /* - Extracting a possible keywordname from a line of deck input - involves several steps. - - 1. The make_deck_name() function will strip off everyhing - following the first white-space separator and uppercase the - string. - - 2. The ParserKeyword::validDeckName() verifies that the keyword - candidate only contains valid characters. - - 3. In the newRawKeyword() function the first 8 characters of the - deck_name is used to look for the keyword in the Parser - container. - */ - std::string deck_name = str::make_deck_name( line ); - if (ParserKeyword::validDeckName(deck_name)) { - auto ptr = newRawKeyword( deck_name, parserState, parser, line ); - if (ptr) { - rawKeyword.reset( ptr ); - const auto& parserKeyword = parser.getParserKeywordFromDeckName(rawKeyword->getKeywordName()); - if (deck_name == "UDT") { - skipUDT(parserState, parser); - return NULL; - } - parserState.lastSizeType = parserKeyword.getSizeType(); - parserState.lastKeyWord = deck_name; - if (rawKeyword->isFinished()) - return rawKeyword; - - if (deck_name == "TITLE") - is_title = true; - } - } else { - /* We are looking at some random gibberish?! */ - if (!parserState.unknown_keyword) - parserState.handleRandomText( line ); - } - } else { - const auto& parserKeyword = parser.getParserKeywordFromDeckName(rawKeyword->getKeywordName()); - - if (rawKeyword->getSizeType() == Raw::CODE) { - auto end_pos = line.find(parserKeyword.codeEnd()); - if (end_pos != std::string::npos) { - string_view line_content = { line.begin(), line.begin() + end_pos}; - record_buffer = str::update_record_buffer( record_buffer, line_content ); - - RawRecord record(record_buffer, true); - rawKeyword->addRecord(record); - return rawKeyword; - } else - record_buffer = str::update_record_buffer( record_buffer.begin(), line ); - - continue; - } - - if (rawKeyword->getSizeType() == Raw::UNKNOWN) { - /* - When we are spinning through a keyword of size type UNKNOWN it - is essential to recognize a string as the next keyword. The - line starting a new keyword can have arbitrary rubbish - following the keyword name - i.e. this line - - PORO Here comes some random gibberish which should be ignored - 10000*0.15 / - - To ensure the keyword 'PORO' is recognized in the example - above we remove everything following the first space in the - line variable before we check if it is the start of a new - keyword. - */ - std::string deck_name = str::make_deck_name( line ); - if( parser.isRecognizedKeyword( deck_name ) ) { - rawKeyword->terminateKeyword(); - parserState.ungetline(line); - return rawKeyword; - } - } - - line = str::del_after_slash(line, rawKeyword->rawStringKeyword()); - record_buffer = str::update_record_buffer(record_buffer, line); - if (is_title) { - if (record_buffer.empty()) { - RawRecord record("opm/flow simulation"); - rawKeyword->addRecord(record); - } else { - RawRecord record( string_view{ record_buffer.begin(), record_buffer.end()}); - rawKeyword->addRecord(record); - } - return rawKeyword; - } - - - if (str::isTerminator(record_buffer)) { - if (rawKeyword->terminateKeyword()) - return rawKeyword; - } - - - if (str::isTerminatedRecordString(record_buffer)) { - RawRecord record( string_view{ record_buffer.begin(), record_buffer.end( ) - 1}); - if (rawKeyword->addRecord(record)) - return rawKeyword; - - record_buffer = str::emptystr; - } - } - } - - if (rawKeyword) { - if (rawKeyword->getSizeType() == Raw::UNKNOWN) - rawKeyword->terminateKeyword(); - - if (!rawKeyword->isFinished()) - throw std::invalid_argument("Keyword " + rawKeyword->getKeywordName() + " is not properly terminated"); - } - - return rawKeyword; -} - - -bool parseState( ParserState& parserState, const Parser& parser ) { - std::string filename = parserState.current_path().string(); - - while( !parserState.done() ) { - auto rawKeyword = tryParseKeyword( parserState, parser); - if( !rawKeyword ) - continue; - - if (rawKeyword->getKeywordName() == Opm::RawConsts::end) - return true; - - if (rawKeyword->getKeywordName() == Opm::RawConsts::endinclude) { - parserState.closeFile(); - continue; - } - - if (rawKeyword->getKeywordName() == Opm::RawConsts::paths) { - for( const auto& record : *rawKeyword ) { - std::string pathName = readValueToken(record.getItem(0)); - std::string pathValue = readValueToken(record.getItem(1)); - parserState.addPathAlias( pathName, pathValue ); - } - - continue; - } - - if (rawKeyword->getKeywordName() == Opm::RawConsts::include) { - auto& firstRecord = rawKeyword->getFirstRecord( ); - std::string includeFileAsString = readValueToken(firstRecord.getItem(0)); - Opm::filesystem::path includeFile = parserState.getIncludeFilePath( includeFileAsString ); - - parserState.loadFile( includeFile ); - continue; - } - - if( parser.isRecognizedKeyword( rawKeyword->getKeywordName() ) ) { - const auto& kwname = rawKeyword->getKeywordName(); - const auto& parserKeyword = parser.getParserKeywordFromDeckName( kwname ); - { - std::stringstream ss; - - const auto& location = rawKeyword->location(); - ss << std::setw(5) << parserState.deck.size() - << " Reading " << std::setw(8) << std::left << rawKeyword->getKeywordName() - << " in file " << location.filename << ", line " << std::to_string(location.lineno); - OpmLog::info(ss.str()); - } - try { - if (rawKeyword->getKeywordName() == Opm::RawConsts::pyinput) { - if (parserState.python) { - std::string python_string = rawKeyword->getFirstRecord().getRecordString(); - parserState.python->exec(python_string, parser, parserState.deck); - } - else - throw std::logic_error("Cannot yet embed Python while still running Python."); - } - else - parserState.deck.addKeyword( parserKeyword.parse( parserState.parseContext, - parserState.errors, - *rawKeyword, - parserState.deck.getActiveUnitSystem(), - parserState.deck.getDefaultUnitSystem(), - filename ) ); - } catch (const std::exception& exc) { - /* - This catch-all of parsing errors is to be able to write a good - error message; the parser is quite confused at this state and - we should not be tempted to continue the parsing. - */ - const auto& location = rawKeyword->location(); - std::string msg = "\nFailed to parse keyword: " + rawKeyword->getKeywordName() + "\n" + - "In file " + location.filename + ", line " + std::to_string(location.lineno) + "\n\n" + - "Error message: " + exc.what() + "\n"; - - throw std::invalid_argument(msg); - } - } else { - const std::string msg = "The keyword " + rawKeyword->getKeywordName() + " is not recognized - ignored"; - Location location(parserState.current_path().string(), parserState.line()); - OpmLog::warning(Log::fileMessage(location, msg)); - } - } - - return true; -} - -} - - - /* stripComments only exists so that the unit tests can verify it. - * strip_comment is the actual (internal) implementation - */ - std::string Parser::stripComments( const std::string& str ) { - return { str.begin(), - str::find_terminator( str.begin(), str.end(), str::find_comment() ) }; - } - - Parser::Parser(bool addDefault) { - if (addDefault) - addDefaultKeywords(); - } - - - /* - About INCLUDE: Observe that the ECLIPSE parser is slightly unlogical - when it comes to nested includes; the path to an included file is always - interpreted relative to the filesystem location of the DATA file, and - not the location of the file issuing the INCLUDE command. That behaviour - is retained in the current implementation. - */ - - inline void assertFullDeck(const ParseContext& context) { - if (context.hasKey(ParseContext::PARSE_MISSING_SECTIONS)) - throw new std::logic_error("Cannot construct a state in partial deck context"); - } - - EclipseState Parser::parse(const std::string &filename, const ParseContext& context, ErrorGuard& errors) { - assertFullDeck(context); - return EclipseState( Parser{}.parseFile( filename, context, errors )); - } - - EclipseState Parser::parse(const Deck& deck, const ParseContext& context) { - assertFullDeck(context); - return EclipseState(deck); - } - - EclipseState Parser::parseData(const std::string &data, const ParseContext& context, ErrorGuard& errors) { - assertFullDeck(context); - Parser p; - auto deck = p.parseString(data, context, errors); - return parse(deck, context); - } - - EclipseGrid Parser::parseGrid(const std::string &filename, const ParseContext& context , ErrorGuard& errors) { - if (context.hasKey(ParseContext::PARSE_MISSING_SECTIONS)) - return EclipseGrid{ filename }; - return parse(filename, context, errors).getInputGrid(); - } - - EclipseGrid Parser::parseGrid(const Deck& deck, const ParseContext& context) - { - if (context.hasKey(ParseContext::PARSE_MISSING_SECTIONS)) - return EclipseGrid{ deck }; - return parse(deck, context).getInputGrid(); - } - - EclipseGrid Parser::parseGridData(const std::string &data, const ParseContext& context, ErrorGuard& errors) { - Parser parser; - auto deck = parser.parseString(data, context, errors); - if (context.hasKey(ParseContext::PARSE_MISSING_SECTIONS)) { - return EclipseGrid{ deck }; - } - return parse(deck, context).getInputGrid(); - } - - Deck Parser::parseFile(const std::string &dataFileName, const ParseContext& parseContext, ErrorGuard& errors) const { - ParserState parserState( this->codeKeywords(), parseContext, errors, dataFileName ); - parseState( parserState, *this ); - - return std::move( parserState.deck ); - } - - Deck Parser::parseFile(const std::string& dataFileName, - const ParseContext& parseContext) const { - ErrorGuard errors; - return this->parseFile(dataFileName, parseContext, errors); - } - - Deck Parser::parseFile(const std::string& dataFileName) const { - ErrorGuard errors; - return this->parseFile(dataFileName, ParseContext(), errors); - } - - - - - Deck Parser::parseString(const std::string &data, const ParseContext& parseContext, ErrorGuard& errors) const { - ParserState parserState( this->codeKeywords(), parseContext, errors ); - parserState.loadString( data ); - parseState( parserState, *this ); - return std::move( parserState.deck ); - } - - Deck Parser::parseString(const std::string &data, const ParseContext& parseContext) const { - ErrorGuard errors; - return this->parseString(data, parseContext, errors); - } - - Deck Parser::parseString(const std::string &data) const { - ErrorGuard errors; - return this->parseString(data, ParseContext(), errors); - } - - size_t Parser::size() const { - return m_deckParserKeywords.size(); - } - - const ParserKeyword* Parser::matchingKeyword(const string_view& name) const { - for (auto iter = m_wildCardKeywords.begin(); iter != m_wildCardKeywords.end(); ++iter) { - if (iter->second->matches(name)) - return iter->second; - } - return nullptr; - } - - bool Parser::hasWildCardKeyword(const std::string& internalKeywordName) const { - return (m_wildCardKeywords.count(internalKeywordName) > 0); - } - - bool Parser::isRecognizedKeyword(const string_view& name ) const { - if( !ParserKeyword::validDeckName( name ) ) - return false; - - if( m_deckParserKeywords.count( name ) ) - return true; - - return bool( matchingKeyword( name ) ); - } - -void Parser::addParserKeyword( ParserKeyword&& parserKeyword ) { - /* Store the keywords in the keyword storage. They aren't free'd until the - * parser gets destroyed, even if there is no reasonable way to reach them - * (effectively making them leak). This is not a big problem because: - * - * * A keyword can be added that overwrites some *but not all* deckname -> - * keyword mappings. Keeping track of this is more hassle than worth for - * what is essentially edge case usage. - * * We can store (and search) via string_view's from the keyword added - * first because we know that it will be kept around, i.e. we don't have to - * deal with subtle lifetime issues. - * * It means we aren't reliant on some internal name mapping, and can only - * be concerned with interesting behaviour. - * * Finally, these releases would in practice never happen anyway until - * the parser went out of scope, and now they'll also be cleaned up in the - * same sweep. - */ - - this->keyword_storage.push_back( std::move( parserKeyword ) ); - const ParserKeyword * ptr = std::addressof(this->keyword_storage.back()); - string_view name( ptr->getName() ); - - for (auto nameIt = ptr->deckNamesBegin(); - nameIt != ptr->deckNamesEnd(); - ++nameIt) - { - m_deckParserKeywords[ *nameIt ] = ptr; - } - - if (ptr->hasMatchRegex()) - m_wildCardKeywords[ name ] = ptr; - - if (ptr->isCodeKeyword()) - this->code_keywords.emplace_back( ptr->getName(), ptr->codeEnd() ); -} - - -void Parser::addParserKeyword(const Json::JsonObject& jsonKeyword) { - addParserKeyword( ParserKeyword( jsonKeyword ) ); -} - -bool Parser::hasKeyword( const std::string& name ) const { - return this->m_deckParserKeywords.find( string_view( name ) ) - != this->m_deckParserKeywords.end(); -} - -const ParserKeyword& Parser::getKeyword( const std::string& name ) const { - return getParserKeywordFromDeckName( string_view( name ) ); -} - -const ParserKeyword& Parser::getParserKeywordFromDeckName(const string_view& name ) const { - auto candidate = m_deckParserKeywords.find( name ); - - if( candidate != m_deckParserKeywords.end() ) return *candidate->second; - - const auto* wildCardKeyword = matchingKeyword( name ); - - if ( !wildCardKeyword ) - throw std::invalid_argument( "Do not have parser keyword for parsing: " + name ); - - return *wildCardKeyword; -} - -std::vector Parser::getAllDeckNames () const { - std::vector keywords; - for (auto iterator = m_deckParserKeywords.begin(); iterator != m_deckParserKeywords.end(); iterator++) { - keywords.push_back(iterator->first.string()); - } - for (auto iterator = m_wildCardKeywords.begin(); iterator != m_wildCardKeywords.end(); iterator++) { - keywords.push_back(iterator->first.string()); - } - return keywords; -} - - - void Parser::loadKeywords(const Json::JsonObject& jsonKeywords) { - if (jsonKeywords.is_array()) { - for (size_t index = 0; index < jsonKeywords.size(); index++) { - Json::JsonObject jsonKeyword = jsonKeywords.get_array_item(index); - addParserKeyword( ParserKeyword( jsonKeyword ) ); - } - } else - throw std::invalid_argument("Input JSON object is not an array"); - } - - bool Parser::loadKeywordFromFile(const Opm::filesystem::path& configFile) { - - try { - Json::JsonObject jsonKeyword(configFile); - addParserKeyword( ParserKeyword( jsonKeyword ) ); - return true; - } - catch (...) { - return false; - } - } - - - void Parser::loadKeywordsFromDirectory(const Opm::filesystem::path& directory, bool recursive) { - if (!Opm::filesystem::exists(directory)) - throw std::invalid_argument("Directory: " + directory.string() + " does not exist."); - else { - Opm::filesystem::directory_iterator end; - for (Opm::filesystem::directory_iterator iter(directory); iter != end; iter++) { - if (Opm::filesystem::is_directory(*iter)) { - if (recursive) - loadKeywordsFromDirectory(*iter, recursive); - } else { - if (ParserKeyword::validInternalName(iter->path().filename().string())) { - if (!loadKeywordFromFile(*iter)) - std::cerr << "** Warning: failed to load keyword from file:" << iter->path() << std::endl; - } - } - } - } - } - - const std::vector> Parser::codeKeywords() const { - return this->code_keywords; - } - - -#if 0 - void Parser::applyUnitsToDeck(Deck& deck) const { - - for( auto& deckKeyword : deck ) { - - if( !isRecognizedKeyword( deckKeyword.name() ) ) continue; - - const auto& parserKeyword = getParserKeywordFromDeckName( deckKeyword.name() ); - if( !parserKeyword.hasDimension() ) continue; - - parserKeyword.applyUnitsToDeck(deck , deckKeyword); - } - } -#endif - - - static bool isSectionDelimiter( const DeckKeyword& keyword ) { - const auto& name = keyword.name(); - for( const auto& x : { "RUNSPEC", "GRID", "EDIT", "PROPS", - "REGIONS", "SOLUTION", "SUMMARY", "SCHEDULE" } ) - if( name == x ) return true; - - return false; - } - - bool DeckSection::checkSectionTopology(const Deck& deck, - const Parser& parser, - bool ensureKeywordSectionAffiliation) - { - if( deck.size() == 0 ) { - std::string msg = "empty decks are invalid\n"; - OpmLog::warning(msg); - return false; - } - - bool deckValid = true; - - if( deck.getKeyword(0).name() != "RUNSPEC" ) { - std::string msg = "The first keyword of a valid deck must be RUNSPEC\n"; - auto curKeyword = deck.getKeyword(0); - OpmLog::warning(Log::fileMessage(curKeyword.location(), msg) ); - deckValid = false; - } - - std::string curSectionName = deck.getKeyword(0).name(); - size_t curKwIdx = 1; - for (; curKwIdx < deck.size(); ++curKwIdx) { - const auto& curKeyword = deck.getKeyword(curKwIdx); - const std::string& curKeywordName = curKeyword.name(); - - if (!isSectionDelimiter( curKeyword )) { - if( !parser.isRecognizedKeyword( curKeywordName ) ) - // ignore unknown keywords for now (i.e. they can appear in any section) - continue; - - const auto& parserKeyword = parser.getParserKeywordFromDeckName( curKeywordName ); - if (ensureKeywordSectionAffiliation && !parserKeyword.isValidSection(curSectionName)) { - std::string msg = - "The keyword '"+curKeywordName+"' is located in the '"+curSectionName - +"' section where it is invalid"; - OpmLog::warning(Log::fileMessage(curKeyword.location(), msg) ); - deckValid = false; - } - - continue; - } - - if (curSectionName == "RUNSPEC") { - if (curKeywordName != "GRID") { - std::string msg = - "The RUNSPEC section must be followed by GRID instead of "+curKeywordName; - OpmLog::warning(Log::fileMessage(curKeyword.location(), msg) ); - deckValid = false; - } - - curSectionName = curKeywordName; - } - else if (curSectionName == "GRID") { - if (curKeywordName != "EDIT" && curKeywordName != "PROPS") { - std::string msg = - "The GRID section must be followed by EDIT or PROPS instead of "+curKeywordName; - OpmLog::warning(Log::fileMessage(curKeyword.location(), msg) ); - deckValid = false; - } - - curSectionName = curKeywordName; - } - else if (curSectionName == "EDIT") { - if (curKeywordName != "PROPS") { - std::string msg = - "The EDIT section must be followed by PROPS instead of "+curKeywordName; - OpmLog::warning(Log::fileMessage(curKeyword.location(), msg) ); - deckValid = false; - } - - curSectionName = curKeywordName; - } - else if (curSectionName == "PROPS") { - if (curKeywordName != "REGIONS" && curKeywordName != "SOLUTION") { - std::string msg = - "The PROPS section must be followed by REGIONS or SOLUTION instead of "+curKeywordName; - OpmLog::warning(Log::fileMessage(curKeyword.location(), msg) ); - deckValid = false; - } - - curSectionName = curKeywordName; - } - else if (curSectionName == "REGIONS") { - if (curKeywordName != "SOLUTION") { - std::string msg = - "The REGIONS section must be followed by SOLUTION instead of "+curKeywordName; - OpmLog::warning(Log::fileMessage(curKeyword.location(), msg) ); - deckValid = false; - } - - curSectionName = curKeywordName; - } - else if (curSectionName == "SOLUTION") { - if (curKeywordName != "SUMMARY" && curKeywordName != "SCHEDULE") { - std::string msg = - "The SOLUTION section must be followed by SUMMARY or SCHEDULE instead of "+curKeywordName; - OpmLog::warning(Log::fileMessage(curKeyword.location(), msg) ); - deckValid = false; - } - - curSectionName = curKeywordName; - } - else if (curSectionName == "SUMMARY") { - if (curKeywordName != "SCHEDULE") { - std::string msg = - "The SUMMARY section must be followed by SCHEDULE instead of "+curKeywordName; - OpmLog::warning(Log::fileMessage(curKeyword.location(), msg) ); - deckValid = false; - } - - curSectionName = curKeywordName; - } - else if (curSectionName == "SCHEDULE") { - // schedule is the last section, so every section delimiter after it is wrong... - std::string msg = - "The SCHEDULE section must be the last one (" - +curKeywordName+" specified after SCHEDULE)"; - OpmLog::warning(Log::fileMessage(curKeyword.location(), msg) ); - deckValid = false; - } - } - - // SCHEDULE is the last section and it is mandatory, so make sure it is there - if (curSectionName != "SCHEDULE") { - const auto& curKeyword = deck.getKeyword(deck.size() - 1); - std::string msg = - "The last section of a valid deck must be SCHEDULE (is "+curSectionName+")"; - OpmLog::warning(Log::fileMessage(curKeyword.location(), msg) ); - deckValid = false; - } - - return deckValid; - } - -} // namespace Opm diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Parser/ParserEnums.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Parser/ParserEnums.cpp deleted file mode 100644 index 1d0ce03ea3..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Parser/ParserEnums.cpp +++ /dev/null @@ -1,105 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include - -#include - -namespace Opm { - - /*****************************************************************/ - - const std::string ParserKeywordSizeEnum2String(ParserKeywordSizeEnum enumValue) { - switch (enumValue) { - case SLASH_TERMINATED: - return "SLASH_TERMINATED"; - break; - case FIXED: - return "FIXED"; - break; - case OTHER_KEYWORD_IN_DECK: - return "OTHER_KEYWORD_IN_DECK"; - break; - case UNKNOWN: - return "UNKNOWN"; - break; - case FIXED_CODE: - return "FIXED_CODE"; - break; - case DOUBLE_SLASH_TERMINATED: - return "DOUBLE_SLASH_TERMINATED"; - break; - default: - throw std::invalid_argument("Implementation error - should NOT be here"); - } - } - - - - ParserKeywordSizeEnum ParserKeywordSizeEnumFromString(const std::string& stringValue) { - if (stringValue == "SLASH_TERMINATED") - return SLASH_TERMINATED; - else if (stringValue == "FIXED") - return FIXED; - else if (stringValue == "OTHER_KEYWORD_IN_DECK") - return OTHER_KEYWORD_IN_DECK; - else if (stringValue == "UNKNOWN") - return UNKNOWN; - else if (stringValue == "FIXED_CODE") - return FIXED_CODE; - else - throw std::invalid_argument("String: " + stringValue + " can not be converted to enum value"); - } - - /*****************************************************************/ - - const std::string ParserKeywordActionEnum2String(ParserKeywordActionEnum enumValue) { - switch (enumValue) { - case INTERNALIZE: - return "INTERNALIZE"; - break; - case IGNORE: - return "IGNORE"; - break; - case THROW_EXCEPTION: - return "THROW_EXCEPTION"; - break; - case IGNORE_WARNING: - return "IGNORE_WARNING"; - break; - default: - throw std::invalid_argument("Implementation error - should NOT be here"); - } - } - - ParserKeywordActionEnum ParserKeywordActionEnumFromString(const std::string& stringValue) { - if (stringValue == "INTERNALIZE") - return INTERNALIZE; - else if (stringValue == "IGNORE") - return IGNORE; - else if (stringValue == "THROW_EXCEPTION") - return THROW_EXCEPTION; - else if (stringValue == "IGNORE_WARNING") - return IGNORE_WARNING; - else - throw std::invalid_argument("String: " + stringValue + " can not be converted to enum value"); - } - - -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Parser/ParserItem.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Parser/ParserItem.cpp deleted file mode 100644 index 6d230b6a58..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Parser/ParserItem.cpp +++ /dev/null @@ -1,741 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include -#include -#include -#include - -#include - -#include -#include -#include -#include - -#include "raw/RawRecord.hpp" -#include "raw/StarToken.hpp" - -namespace Opm { -class UnitSystem; - -namespace { - -type_tag get_data_type_json( const std::string& str ) { - if( str == "INT" ) return type_tag::integer; - if( str == "DOUBLE" ) return type_tag::fdouble; - if( str == "STRING" ) return type_tag::string; - if( str == "RAW_STRING") return type_tag::raw_string; - if( str == "UDA") return type_tag::uda; - throw std::invalid_argument( str + " cannot be converted to enum 'tag'" ); -} - -/* - For very small numbers std::to_string() will just return the string "0.000000" -*/ -std::string as_string(double value) { - if (std::fabs(value) < 1e-4) { - std::ostringstream ss; - ss << std::setprecision(12) << value; - return ss.str(); - } else - return std::to_string(value); -} - -} - -ParserItem::item_size ParserItem::size_from_string( const std::string& str ) { - if( str == "ALL" ) return item_size::ALL; - if( str == "SINGLE") return item_size::SINGLE; - throw std::invalid_argument( str + " can not be converted " - "to enum 'item_size'" ); -} - -std::string ParserItem::string_from_size( ParserItem::item_size sz ) { - switch( sz ) { - case item_size::ALL: return "ALL"; - case item_size::SINGLE: return "SINGLE"; - } - - throw std::logic_error( "ParserItem::string_from_size: Fatal error; should not be reachable" ); -} - -template<> const UDAValue& ParserItem::value_ref< UDAValue >() const { - if( this->data_type != get_type< UDAValue >() ) - throw std::invalid_argument("ValueRef Wrong type." ); - - return this->uval; -} - -template<> const int& ParserItem::value_ref< int >() const { - if( this->data_type != get_type< int >() ) - throw std::invalid_argument( "ValueRef: Wrong type." ); - return this->ival; -} - -template<> const double& ParserItem::value_ref< double >() const { - if( this->data_type != get_type< double >() ) - throw std::invalid_argument("ValueRef Wrong type." ); - - return this->dval; -} - -template<> const std::string& ParserItem::value_ref< std::string >() const { - if( this->data_type != get_type< std::string >() ) - throw std::invalid_argument( "ValueRef Wrong type." ); - return this->sval; -} - -template<> const RawString& ParserItem::value_ref< RawString >() const { - if( this->data_type != get_type() ) - throw std::invalid_argument( "ValueRef Wrong type." ); - return this->rsval; -} - -template< typename T > -T& ParserItem::value_ref() { - return const_cast< T& >( - const_cast< const ParserItem& >( *this ).value_ref< T >() - ); -} - - -ParserItem::ParserItem( const std::string& itemName, ParserItem::itype input_type_arg) : - m_name(itemName), - m_defaultSet(false) -{ - this->setInputType(input_type_arg); -} - -ParserItem::ParserItem( const Json::JsonObject& json ) : - m_name( json.get_string( "name" ) ), - m_sizeType( json.has_item( "size_type" ) - ? ParserItem::size_from_string( json.get_string( "size_type" ) ) - : ParserItem::item_size::SINGLE ), - m_description( json.has_item( "description" ) - ? json.get_string( "description" ) - : "" ), - data_type( get_data_type_json( json.get_string( "value_type" ) ) ), - input_type( ParserItem::from_string( json.get_string("value_type"))), - m_defaultSet( false ) -{ - if( json.has_item( "dimension" ) ) { - const auto& dim = json.get_item( "dimension" ); - - if( dim.is_string() ) { - this->push_backDimension( dim.as_string() ); - } - else if( dim.is_array() ) { - for( size_t i = 0; i < dim.size(); ++i ) - this->push_backDimension( dim.get_array_item( i ).as_string() ); - } - else { - throw std::invalid_argument( - "The 'dimension' attribute must be a string or list of strings" - ); - } - } - if( !json.has_item( "default" ) ) return; - - switch( this->input_type ) { - case itype::INT: - this->setDefault( json.get_int( "default" ) ); - break; - - case itype::DOUBLE: - this->setDefault( json.get_double( "default" ) ); - break; - - case itype::UDA: - this->setDefault( UDAValue(json.get_double( "default" )) ); - break; - - case itype::STRING: - case itype::RAW_STRING: - this->setDefault( json.get_string( "default" ) ); - break; - - default: - throw std::logic_error( "Item of unknown type: <" + json.get_string("value_type") + ">" ); - } -} - -template< typename T > -void ParserItem::setDefault( T val ) { - if( this->data_type != type_tag::fdouble && this->m_sizeType == item_size::ALL ) - throw std::invalid_argument( "The size type ALL can not be combined " - "with an explicit default value." ); - - this->value_ref< T >() = std::move( val ); - this->m_defaultSet = true; -} - - -void ParserItem::setInputType(ParserItem::itype input_type_arg) { - this->input_type = input_type_arg; - - if (input_type == itype::INT) - this->setDataType(int()); - - else if (input_type == itype::DOUBLE) - this->setDataType(double()); - - else if (input_type == itype::STRING) - this->setDataType( std::string() ); - - else if (input_type == itype::RAW_STRING) - this->setDataType( RawString() ); - - else if (input_type == itype::UDA) - this->setDataType( UDAValue(0) ); - - else if (input_type == itype::CODE) - this->setDataType( std::string() ); - else - throw std::invalid_argument("BUG: input type not recognized in setInputType()"); -} - - -template< typename T > -void ParserItem::setDataType( T) { - this->data_type = get_type< T >(); -} - -bool ParserItem::hasDefault() const { - return this->m_defaultSet; -} - - -template< typename T> -const T& ParserItem::getDefault() const { - if( get_type< T >() != this->data_type ) - throw std::invalid_argument( "getDefault: Wrong type." ); - - if( !this->hasDefault() ) - throw std::invalid_argument( "No default value available for item " - + this->name() ); - - return this->value_ref< T >(); -} - - -const std::vector& ParserItem::dimensions() const { - return this->m_dimensions; -} - -void ParserItem::push_backDimension( const std::string& dim ) { - if (!(this->input_type == ParserItem::itype::DOUBLE || this->input_type == ParserItem::itype::UDA)) - throw std::invalid_argument( "Invalid type, does not have dimension." ); - - if( this->sizeType() == item_size::SINGLE && this->m_dimensions.size() > 0 ) { - throw std::invalid_argument( - "Internal error: " - "cannot add more than one dimension to an item of size 1" ); - } - - this->m_dimensions.push_back( dim ); -} - - const std::string& ParserItem::name() const { - return m_name; - } - - const std::string ParserItem::className() const { - return m_name; - } - - - type_tag ParserItem::dataType() const { - return this->data_type; - } - - - ParserItem::item_size ParserItem::sizeType() const { - return m_sizeType; - } - - bool ParserItem::scalar() const { - return this->m_sizeType == item_size::SINGLE; - } - - std::string ParserItem::getDescription() const { - return m_description; - } - - - void ParserItem::setSizeType(item_size size_type) { - /* - The restriction that data type UDA can only be combined with size_type - SINGLE is due to the way units are bolted on to the Deck - datastructures after the parsing has completed. UDA values are - currently only used as scalars in well/group control and the - restriction does not have any effect. If at some stage in the future - this should change the way units are applied to the deck must be - refactored. - */ - if (this->data_type == type_tag::uda && size_type != item_size::SINGLE) - throw std::invalid_argument("Sorry - the UDA datatype can only be used with size type SINGLE"); - - this->m_sizeType = size_type; - } - - - void ParserItem::setDescription(const std::string& description) { - m_description = description; - } - - - bool ParserItem::operator==( const ParserItem& rhs ) const { - if( !( this->data_type == rhs.data_type - && this->m_name == rhs.m_name - && this->m_description == rhs.m_description - && this->input_type == rhs.input_type - && this->m_sizeType == rhs.m_sizeType - && this->m_defaultSet == rhs.m_defaultSet ) ) - return false; - - if( this->m_defaultSet ) { - switch( this->data_type ) { - case type_tag::integer: - if( this->ival != rhs.ival ) return false; - break; - - case type_tag::fdouble: - if( this->dval != rhs.dval ) { - double diff = std::fabs(this->dval - rhs.dval); - double sum = std::fabs(this->dval) + std::fabs(rhs.dval); - if ((diff / sum) > 1e-8) - return false; - } - break; - - case type_tag::string: - if( this->sval != rhs.sval ) return false; - break; - - case type_tag::raw_string: - if( this->rsval != rhs.rsval ) return false; - break; - - case type_tag::uda: - if( this->uval != rhs.uval ) return false; - break; - - default: - throw std::logic_error( "Item of unknown type data_type:" + tag_name(this->data_type)); - } - } - if( this->data_type != type_tag::fdouble ) return true; - return this->m_dimensions.size() == rhs.m_dimensions.size() - && std::equal( this->m_dimensions.begin(), - this->m_dimensions.end(), - rhs.m_dimensions.begin() ); -} - -bool ParserItem::operator!=( const ParserItem& rhs ) const { - return !( *this == rhs ); -} - - -std::string ParserItem::size_literal() const { - if (this->m_sizeType == item_size::ALL) - return "ParserItem::item_size::ALL"; - else - return "ParserItem::item_size::SINGLE"; -} - -std::string ParserItem::type_literal() const { - if (this->input_type == itype::DOUBLE) - return "ParserItem::itype::DOUBLE"; - - if (this->input_type == itype::INT) - return "ParserItem::itype::INT"; - - if (this->input_type == itype::STRING) - return "ParserItem::itype::STRING"; - - if (this->input_type == itype::RAW_STRING) - return "ParserItem::itype::RAW_STRING"; - - if (this->input_type == itype::UDA) - return "ParserItem::itype::UDA"; - - throw std::invalid_argument("Could not resolve type literal"); -} - -std::string ParserItem::to_string(itype input_type) { - if (input_type == itype::RAW_STRING) - return "RAW_STRING"; - - if (input_type == itype::STRING) - return "STRING"; - - if (input_type == itype::DOUBLE) - return "DOUBLE"; - - if (input_type == itype::INT) - return "INT"; - - throw std::invalid_argument("Can not convert to string"); -} - - -ParserItem::itype ParserItem::from_string(const std::string& string_value) { - if( string_value == "INT" ) return itype::INT; - if( string_value == "DOUBLE" ) return itype::DOUBLE; - if( string_value == "STRING" ) return itype::STRING; - if( string_value == "RAW_STRING") return itype::RAW_STRING; - if( string_value == "UDA") return itype::UDA; - throw std::invalid_argument( string_value + " cannot be converted to ParserInputType" ); -} - - -std::string ParserItem::createCode(const std::string& indent) const { - std::stringstream stream; - stream << indent << "ParserItem item(\"" << this->name() <<"\", " << this->type_literal() << ");" << '\n'; - if (this->m_sizeType != ParserItem::item_size::SINGLE) - stream << indent << "item.setSizeType(" << this->size_literal() << ");" << '\n'; - - if( m_defaultSet ) { - stream << indent << "item.setDefault( "; - switch( this->data_type ) { - case type_tag::integer: - stream << this->getDefault< int >(); - break; - - case type_tag::fdouble: - stream << "double(" << as_string(this->getDefault()) << ")"; - break; - - case type_tag::uda: - { - double double_value =this->getDefault().get(); - stream << "UDAValue(" << as_string(double_value) << ")"; - } - break; - - case type_tag::string: - stream << "std::string(\"" << this->getDefault< std::string >() << "\")"; - break; - - case type_tag::raw_string: - stream << "RawString(\"" << this->getDefault< RawString >() << "\")"; - break; - - default: - throw std::logic_error( "Item of unknown type." ); - } - stream << " );" << '\n'; - } - - for (const auto& dim : this->m_dimensions) - stream << indent <<"item.push_backDimension(\"" << dim << "\");" << '\n'; - - if (this->m_description.size() > 0) - stream << indent << "item.setDescription(\"" << this->m_description << "\");" << '\n'; - - return stream.str(); -} - -namespace { - -template< typename T > -void scan_item( DeckItem& deck_item, const ParserItem& parser_item, RawRecord& record ) { - bool parse_raw = parser_item.parseRaw(); - - if( parser_item.sizeType() == ParserItem::item_size::ALL ) { - if (parse_raw) { - while (record.size()) { - auto token = record.pop_front(); - auto raw_string = RawString{ token.string() }; - deck_item.push_back( raw_string ); - } - return; - } - - while( record.size() > 0 ) { - auto token = record.pop_front(); - - std::string countString; - std::string valueString; - - if( !isStarToken( token, countString, valueString ) ) { - deck_item.push_back( readValueToken< T >( token ) ); - continue; - } - - StarToken st(token, countString, valueString); - - if( st.hasValue() ) { - deck_item.push_back( readValueToken< T >( st.valueString() ), st.count() ); - continue; - } - - if (parser_item.hasDefault()) { - auto value = parser_item.getDefault< T >(); - for (size_t i=0; i < st.count(); i++) - deck_item.push_backDefault( value ); - } else { - for (size_t i=0; i < st.count(); i++) - deck_item.push_backDummyDefault(); - } - } - - return; - } - - if( record.size() == 0 ) { - // if the record was ended prematurely, - if( parser_item.hasDefault() ) { - // use the default value for the item, if there is one... - deck_item.push_backDefault( parser_item.getDefault< T >() ); - } else { - // ... otherwise indicate that the deck item should throw once the - // item's data is accessed. - deck_item.push_backDummyDefault(); - } - - return; - } - - if (parse_raw) { - auto token = record.pop_front(); - auto raw_string = RawString{ token.string() }; - deck_item.push_back( raw_string ); - return; - } - - // The '*' should be interpreted as a repetition indicator, but it must - // be preceeded by an integer... - auto token = record.pop_front(); - std::string countString; - std::string valueString; - if( !isStarToken(token, countString, valueString) ) { - deck_item.push_back( readValueToken( token) ); - return; - } - - StarToken st(token, countString, valueString); - - if( st.hasValue() ) - deck_item.push_back(readValueToken< T >( st.valueString()) ); - else if( parser_item.hasDefault() ) - deck_item.push_backDefault( parser_item.getDefault< T >() ); - else - deck_item.push_backDummyDefault(); - - const auto value_start = token.size() - valueString.size(); - // replace the first occurence of "N*FOO" by a sequence of N-1 times - // "FOO". this is slightly hacky, but it makes it work if the - // number of defaults pass item boundaries... - // We can safely make a string_view of one_star because it - // has static storage - static const char* one_star = "1*"; - string_view rep = !st.hasValue() - ? string_view{ one_star } - : string_view{ token.begin() + value_start, token.end() }; - record.prepend( st.count() - 1, rep ); - - return; -} - -} - - -/// Scans the records data according to the ParserItems definition. -/// returns a DeckItem object. -/// NOTE: data are popped from the records deque! -DeckItem ParserItem::scan( RawRecord& record, UnitSystem& active_unitsystem, UnitSystem& default_unitsystem) const { - switch( this->data_type ) { - case type_tag::integer: - { - DeckItem item( this->name(), int()); - scan_item< int >( item, *this, record ); - return item; - } - break; - case type_tag::fdouble: - { - std::vector active_dimensions; - std::vector default_dimensions; - for (const auto& dim_string : this->m_dimensions) { - active_dimensions.push_back( active_unitsystem.getNewDimension(dim_string) ); - default_dimensions.push_back( default_unitsystem.getNewDimension(dim_string) ); - } - - DeckItem item(this->name(), double(), active_dimensions, default_dimensions); - scan_item< double >( item, *this, record ); - return item; - } - break; - case type_tag::string: - { - DeckItem item(this->name(), std::string()); - scan_item< std::string >( item, *this, record ); - return item; - } - break; - case type_tag::raw_string: - { - DeckItem item(this->name(), RawString()); - scan_item( item, *this, record ); - return item; - } - break; - case type_tag::uda: - { - std::vector active_dimensions; - std::vector default_dimensions; - for (const auto& dim_string : this->m_dimensions) { - active_dimensions.push_back( active_unitsystem.getNewDimension(dim_string) ); - default_dimensions.push_back( default_unitsystem.getNewDimension(dim_string) ); - } - - DeckItem item(this->name(), UDAValue(), active_dimensions, default_dimensions); - scan_item(item, *this, record); - return item; - } - break; - default: - throw std::logic_error( "ParserItem::scan: Fatal error; should not be reachable" ); - } -} - -std::ostream& ParserItem::inlineClass( std::ostream& stream, const std::string& indent ) const { - std::string local_indent = indent + " "; - - stream << indent << "class " << this->className() << " {" << '\n' - << indent << "public:" << '\n' - << local_indent << "static const std::string itemName;" << '\n'; - - if( this->hasDefault() ) { - stream << local_indent << "static const " - << tag_name( this->data_type ) - << " defaultValue;" << '\n'; - } - - return stream << indent << "};" << '\n'; -} - -std::string ParserItem::inlineClassInit(const std::string& parentClass, - const std::string* defaultValue ) const { - - std::stringstream ss; - ss << "const std::string " << parentClass - << "::" << this->className() - << "::itemName = \"" << this->name() - << "\";" << '\n'; - - if( !this->hasDefault() ) return ss.str(); - - auto typestring = tag_name( this->data_type ); - - auto defval = [this]() -> std::string { - switch( this->data_type ) { - case type_tag::integer: - return std::to_string( this->getDefault< int >() ); - case type_tag::fdouble: - return std::to_string( this->getDefault< double >() ); - case type_tag::uda: - { - double value = this->getDefault().get(); - return "UDAValue(" + std::to_string(value) + ")"; - } - case type_tag::string: - return "\"" + this->getDefault< std::string >() + "\""; - - default: - throw std::logic_error( "ParserItem::inlineClassInit: Fatal error; should not be reachable" ); - } - }; - - ss << "const " << typestring << " " - << parentClass << "::" << this->className() - << "::defaultValue = " << (defaultValue ? *defaultValue : defval() ) - << ";" << '\n'; - - return ss.str(); -} - - -std::ostream& operator<<( std::ostream& stream, const ParserItem::item_size& sz ) { - return stream << ParserItem::string_from_size( sz ); -} - -std::ostream& operator<<( std::ostream& stream, const ParserItem& item ) { - stream - << "ParserItem " << item.name() << " { " - << "size: " << item.sizeType() << " " - << "description: '" << item.getDescription() << "' " - ; - - if( item.hasDefault() ) { - stream << "default: "; - switch( item.data_type ) { - case type_tag::integer: - stream << item.getDefault< int >(); - break; - - case type_tag::fdouble: - stream << item.getDefault< double >(); - break; - - case type_tag::string: - stream << "'" << item.getDefault< std::string >() << "'"; - break; - - default: - throw std::logic_error( "Item of unknown type." ); - } - - stream << " "; - } - - if( item.dimensions().empty() ) - stream << "dimensions: none"; - else { - stream << "dimensions: [ "; - for (const auto& dim : item.dimensions()) - stream << "'" << dim << "' "; - stream << "]"; - } - - return stream << " }"; -} - -bool ParserItem::parseRaw( ) const { - return (this->input_type == itype::RAW_STRING); -} - -template void ParserItem::setDefault( int ); -template void ParserItem::setDefault( double ); -template void ParserItem::setDefault( std::string ); -template void ParserItem::setDefault( UDAValue ); - -template void ParserItem::setDataType( int ); -template void ParserItem::setDataType( double ); -template void ParserItem::setDataType( std::string ); -template void ParserItem::setDataType( UDAValue ); - -template const int& ParserItem::getDefault() const; -template const double& ParserItem::getDefault() const; -template const std::string& ParserItem::getDefault() const; -template const UDAValue& ParserItem::getDefault() const; - -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Parser/ParserKeyword.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Parser/ParserKeyword.cpp deleted file mode 100644 index f95cd16b98..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Parser/ParserKeyword.cpp +++ /dev/null @@ -1,849 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include -#include -#include -#include -#include -#include - -#include - -#include -#include -#include -#include -#include - -#include "raw/RawConsts.hpp" -#include "raw/RawKeyword.hpp" -#include "raw/RawRecord.hpp" - -namespace Opm { - - void ParserKeyword::setSizeType( ParserKeywordSizeEnum sizeType ) { - m_keywordSizeType = sizeType; - if (sizeType == FIXED_CODE) - this->m_fixedSize = 1; - } - - void ParserKeyword::setFixedSize( size_t keywordSize) { - m_keywordSizeType = FIXED; - m_fixedSize = keywordSize; - } - - void ParserKeyword::setTableCollection(bool _isTableCollection) { - m_isTableCollection = _isTableCollection; - } - - - void ParserKeyword::commonInit(const std::string& name, ParserKeywordSizeEnum sizeType) { - m_isTableCollection = false; - m_name = name; - m_keywordSizeType = sizeType; - m_Description = ""; - m_fixedSize = 0; - - m_deckNames.insert(m_name); - } - - ParserKeyword::ParserKeyword(const std::string& name) { - commonInit(name, FIXED); - } - - - ParserKeyword::ParserKeyword(const std::string& name, const std::string& sizeKeyword, const std::string& sizeItem, int size_shift, bool _isTableCollection) - { - commonInit( name , OTHER_KEYWORD_IN_DECK); - m_isTableCollection = _isTableCollection; - initSizeKeyword(sizeKeyword, sizeItem, size_shift); - } - - void ParserKeyword::clearDeckNames() { - m_deckNames.clear(); - } - - void ParserKeyword::addDeckName( const std::string& deckName ) { - m_deckNames.insert(deckName); - } - - bool ParserKeyword::hasDimension() const { - auto have_dim = []( const ParserRecord& r ) { - return r.hasDimension(); - }; - - return std::any_of( this->begin(), this->end(), have_dim ); - } - - - bool ParserKeyword::isTableCollection() const { - return m_isTableCollection; - } - - std::string ParserKeyword::getDescription() const { - return m_Description; - } - - void ParserKeyword::setDescription(const std::string& description) { - m_Description = description; - } - - - void ParserKeyword::setCodeEnd(const std::string& end) { - this->code_end = end; - } - - const std::string& ParserKeyword::codeEnd() const { - return this->code_end; - } - - void ParserKeyword::initSize(const Json::JsonObject& jsonConfig) { - // The number of record has been set explicitly with the size: keyword - if (jsonConfig.has_item("size")) { - Json::JsonObject sizeObject = jsonConfig.get_item("size"); - - if (sizeObject.is_number()) { - m_fixedSize = (size_t) sizeObject.as_int(); - m_keywordSizeType = FIXED; - } else - initSizeKeyword(sizeObject); - - return; - } - - if (jsonConfig.has_item("num_tables")) { - Json::JsonObject numTablesObject = jsonConfig.get_item("num_tables"); - - if (!numTablesObject.is_object()) - throw std::invalid_argument( - "The num_tables key must point to a {} object"); - - initSizeKeyword(numTablesObject); - m_isTableCollection = true; - - return; - } - - if (jsonConfig.has_item("records_set")) { - m_keywordSizeType = DOUBLE_SLASH_TERMINATED; - return; - } - - if (jsonConfig.has_item("items") || jsonConfig.has_item("records")) { - // The number of records is undetermined - the keyword will be '/' - // terminated. - m_keywordSizeType = SLASH_TERMINATED; - return; - } else { - m_keywordSizeType = FIXED; - m_fixedSize = 0; - } - - } - - - void ParserKeyword::parseRecords( const Json::JsonObject& recordsConfig) { - if (recordsConfig.is_array()) { - size_t num_records = recordsConfig.size(); - for (size_t i = 0; i < num_records; i++) { - const Json::JsonObject itemsConfig = recordsConfig.get_array_item(i); - addItems(itemsConfig); - } - } else - throw std::invalid_argument("The records item must point to an array item"); - } - - - ParserKeyword::ParserKeyword(const Json::JsonObject& jsonConfig) { - - if (jsonConfig.has_item("name")) { - ParserKeywordSizeEnum sizeType = UNKNOWN; - commonInit(jsonConfig.get_string("name"), sizeType); - } else - throw std::invalid_argument("Json object is missing the 'name' property"); - - if (jsonConfig.has_item("deck_names") || jsonConfig.has_item("deck_name_regex") ) - // if either the deck names or the regular expression for deck names are - // explicitly specified, we do not implicitly add the contents of the 'name' - // item to the deck names... - clearDeckNames(); - - initSize(jsonConfig); - initDeckNames(jsonConfig); - initSectionNames(jsonConfig); - initMatchRegex(jsonConfig); - - if (jsonConfig.has_item("items") && (jsonConfig.has_item("records") || - jsonConfig.has_item("alternating_records") || - jsonConfig.has_item("records_set") )) - throw std::invalid_argument("Fatal error in " + getName() + " configuration. Can NOT have both records: and items:"); - - if (jsonConfig.has_item("items")) { - const Json::JsonObject itemsConfig = jsonConfig.get_item("items"); - addItems(itemsConfig); - } - - if (jsonConfig.has_item("records")) { - const Json::JsonObject recordsConfig = jsonConfig.get_item("records"); - parseRecords( recordsConfig ); - } - - if (jsonConfig.has_item("alternating_records")) { - alternating_keyword = true; - const Json::JsonObject recordsConfig = jsonConfig.get_item("alternating_records"); - parseRecords( recordsConfig ); - } - - if (jsonConfig.has_item("records_set")) { - double_records = true; - const Json::JsonObject recordsConfig = jsonConfig.get_item("records_set"); - parseRecords( recordsConfig ); - } - - if (jsonConfig.has_item("data")) - initData(jsonConfig); - - if (jsonConfig.has_item("code")) - this->initCode(jsonConfig); - - if (jsonConfig.has_item("description")) - m_Description = jsonConfig.get_string("description"); - - } - - - - void ParserKeyword::initSizeKeyword(const std::string& sizeKeyword, const std::string& sizeItem, int size_shift) { - keyword_size = KeywordSize(sizeKeyword, sizeItem, size_shift); - m_keywordSizeType = OTHER_KEYWORD_IN_DECK; - } - - void ParserKeyword::initSizeKeyword(const Json::JsonObject& sizeObject) { - if (sizeObject.is_object()) { - std::string sizeKeyword = sizeObject.get_string("keyword"); - std::string sizeItem = sizeObject.get_string("item"); - int size_shift = 0; - if (sizeObject.has_item("shift")) - size_shift = sizeObject.get_int("shift"); - - initSizeKeyword(sizeKeyword, sizeItem, size_shift); - } else { - m_keywordSizeType = ParserKeywordSizeEnumFromString( sizeObject.as_string() ); - } - } - - - bool ParserKeyword::validNameStart( const string_view& name) { - if (!isalpha(name[0])) - return false; - - return true; - } - - bool ParserKeyword::validInternalName( const std::string& name ) { - if( name.length() < 2 ) return false; - if( !std::isalpha( name[0] ) ) return false; - - const auto ok = []( char c ) { return std::isalnum( c ) || c == '_'; }; - - return std::all_of( name.begin() + 1, name.end(), ok ); - } - - - bool ParserKeyword::validDeckName( const string_view& name) { - - if( !validNameStart( name ) ) - return false; - - const auto valid = []( char c ) { - return std::isalnum( c ) || c == '-' || c == '_' || c == '+'; - }; - - return std::all_of( name.begin() + 1, name.end(), valid ); - } - - bool ParserKeyword::hasMultipleDeckNames() const { - return m_deckNames.size() > 1; - } - - void ParserKeyword::initDeckNames(const Json::JsonObject& jsonObject) { - if (!jsonObject.has_item("deck_names")) - return; - - const Json::JsonObject namesObject = jsonObject.get_item("deck_names"); - if (!namesObject.is_array()) - throw std::invalid_argument("The 'deck_names' JSON item of keyword "+m_name+" needs to be a list"); - - if (namesObject.size() > 0) - m_deckNames.clear(); - - for (size_t nameIdx = 0; nameIdx < namesObject.size(); ++ nameIdx) { - const Json::JsonObject nameObject = namesObject.get_array_item(nameIdx); - - if (!nameObject.is_string()) - throw std::invalid_argument("The sub-items of 'deck_names' of keyword "+m_name+" need to be strings"); - - addDeckName(nameObject.as_string()); - } - } - - void ParserKeyword::initSectionNames(const Json::JsonObject& jsonObject) { - if (!jsonObject.has_item("sections")) - throw std::invalid_argument("The 'sections' JSON item of keyword "+m_name+" needs to be defined"); - - const Json::JsonObject namesObject = jsonObject.get_item("sections"); - - if (!namesObject.is_array()) - throw std::invalid_argument("The 'sections' JSON item of keyword "+m_name+" needs to be a list"); - - m_validSectionNames.clear(); - for (size_t nameIdx = 0; nameIdx < namesObject.size(); ++ nameIdx) { - const Json::JsonObject nameObject = namesObject.get_array_item(nameIdx); - - if (!nameObject.is_string()) - throw std::invalid_argument("The sub-items of 'sections' of keyword "+m_name+" need to be strings"); - - addValidSectionName(nameObject.as_string()); - } - } - - void ParserKeyword::initMatchRegex(const Json::JsonObject& jsonObject) { - if (!jsonObject.has_item("deck_name_regex")) - return; - - const Json::JsonObject regexStringObject = jsonObject.get_item("deck_name_regex"); - if (!regexStringObject.is_string()) - throw std::invalid_argument("The 'deck_name_regex' JSON item of keyword "+m_name+" need to be a string"); - - setMatchRegex(regexStringObject.as_string()); - } - - void ParserKeyword::addItems(const Json::JsonObject& itemsConfig) { - if( !itemsConfig.is_array() ) - throw std::invalid_argument("The 'items' JSON item missing must be an array in keyword "+getName()+"."); - - size_t num_items = itemsConfig.size(); - ParserRecord record; - - for (size_t i = 0; i < num_items; i++) { - const Json::JsonObject& itemConfig = itemsConfig.get_array_item(i); - record.addItem( ParserItem( itemConfig ) ); - } - - this->addRecord( record ); - } - -namespace { - -void set_dimensions( ParserItem& item, - const Json::JsonObject& json, - const std::string& keyword ) { - if( !json.has_item("dimension") ) return; - - const auto& dim = json.get_item("dimension"); - if( dim.is_string() ) { - item.push_backDimension( dim.as_string() ); - } - else if( dim.is_array() ) { - for (size_t idim = 0; idim < dim.size(); idim++) - item.push_backDimension( dim.get_array_item( idim ).as_string() ); - } - else { - throw std::invalid_argument( - "The 'dimension' attribute of keyword " + keyword - + " must be a string or a list of strings" ); - } -} - -} - - void ParserKeyword::initCode(const Json::JsonObject& jsonConfig) { - this->m_fixedSize = 1U; - this->m_keywordSizeType = FIXED_CODE; - - const Json::JsonObject codeConfig = jsonConfig.get_item("code"); - if (!codeConfig.has_item("end")) - throw std::invalid_argument("The end: is missing from the code block"); - this->setCodeEnd(codeConfig.get_string("end")); - - const std::string itemName("code"); - auto input_type = ParserItem::itype::RAW_STRING; - ParserItem item( itemName, input_type); - ParserRecord record; - item.setSizeType( ParserItem::item_size::ALL ); - - record.addItem(item); - this->addRecord(record); - } - - - void ParserKeyword::initData(const Json::JsonObject& jsonConfig) { - this->m_fixedSize = 1U; - this->m_keywordSizeType = FIXED; - - const Json::JsonObject dataConfig = jsonConfig.get_item("data"); - if (!dataConfig.has_item("value_type") ) - throw std::invalid_argument("The 'value_type' JSON item of keyword "+getName()+" is missing"); - - const std::string value_type = dataConfig.get_string("value_type"); - const std::string itemName("data"); - bool hasDefault = dataConfig.has_item("default"); - auto input_type = ParserItem::from_string(dataConfig.get_string("value_type")); - ParserItem item( itemName, input_type); - ParserRecord record; - - item.setSizeType( ParserItem::item_size::ALL ); - - if (input_type == ParserItem::itype::INT) { - if(hasDefault) { - int defaultValue = dataConfig.get_int("default"); - item.setDefault(defaultValue); - } - record.addDataItem(item); - this->addDataRecord(record); - return; - } - - if (input_type == ParserItem::itype::STRING || input_type == ParserItem::itype::RAW_STRING) { - if (hasDefault) { - std::string defaultValue = dataConfig.get_string("default"); - item.setDefault(defaultValue); - } - record.addDataItem(item); - this->addDataRecord(record); - return; - } - - if (input_type == ParserItem::itype::DOUBLE) { - if (hasDefault) { - double defaultValue = dataConfig.get_double("default"); - item.setDefault(defaultValue); - } - set_dimensions( item, dataConfig, this->getName() ); - record.addDataItem(item); - this->addDataRecord(record); - return; - } - - throw std::invalid_argument("While initializing keyword "+getName()+": Values of type "+dataConfig.get_string("value_type")+" are not implemented."); - } - - - const ParserRecord& ParserKeyword::getRecord(size_t recordIndex) const { - if( this->m_records.empty() ) - throw std::invalid_argument( "Trying to get record from empty keyword" ); - - if( recordIndex >= this->m_records.size() ) { - if (alternating_keyword) { - return this->m_records[ recordIndex % this->m_records.size() ]; - } - else - return this->m_records.back(); - } - - return this->m_records[ recordIndex ]; - } - - ParserRecord& ParserKeyword::getRecord( size_t index ) { - return const_cast< ParserRecord& >( - const_cast< const ParserKeyword& >( *this ).getRecord( index ) - ); - } - - - std::vector< ParserRecord >::const_iterator ParserKeyword::begin() const { - return m_records.begin(); - } - - std::vector< ParserRecord >::const_iterator ParserKeyword::end() const { - return m_records.end(); - } - - - - void ParserKeyword::addRecord( ParserRecord record ) { - m_records.push_back( std::move( record ) ); - if (record.rawStringRecord()) - this->raw_string_keyword = true; - } - - - void ParserKeyword::addDataRecord( ParserRecord record) { - if ((m_keywordSizeType == FIXED) && (m_fixedSize == 1U)) - addRecord( std::move( record ) ); - else - throw std::invalid_argument("When calling addDataRecord() for keyword " + getName() + ", it must be configured with fixed size == 1."); - } - - - const std::string ParserKeyword::className() const { - return getName(); - } - - const std::string& ParserKeyword::getName() const { - return m_name; - } - - void ParserKeyword::clearValidSectionNames() { - m_validSectionNames.clear(); - } - - void ParserKeyword::addValidSectionName( const std::string& sectionName ) { - m_validSectionNames.insert(sectionName); - } - - bool ParserKeyword::isValidSection(const std::string& sectionName) const { - return m_validSectionNames.size() == 0 || m_validSectionNames.count(sectionName) > 0; - } - - ParserKeyword::SectionNameSet::const_iterator ParserKeyword::validSectionNamesBegin() const { - return m_validSectionNames.begin(); - } - - ParserKeyword::SectionNameSet::const_iterator ParserKeyword::validSectionNamesEnd() const { - return m_validSectionNames.end(); - } - - ParserKeyword::DeckNameSet::const_iterator ParserKeyword::deckNamesBegin() const { - return m_deckNames.begin(); - } - - ParserKeyword::DeckNameSet::const_iterator ParserKeyword::deckNamesEnd() const { - return m_deckNames.end(); - } - - DeckKeyword ParserKeyword::parse(const ParseContext& parseContext, - ErrorGuard& errors, - RawKeyword& rawKeyword, - UnitSystem& active_unitsystem, - UnitSystem& default_unitsystem, - const std::string& filename) const { - - if( !rawKeyword.isFinished() ) - throw std::invalid_argument("Tried to create a deck keyword from an incomplete raw keyword " + rawKeyword.getKeywordName()); - - DeckKeyword keyword( rawKeyword.location(), rawKeyword.getKeywordName() ); - keyword.setDataKeyword( isDataKeyword() ); - - if (double_records) - keyword.setDoubleRecordKeyword(); - - if (double_records) { - /* Note: this merely dumps all records sequentially into m_recordList. - Each block of records is separated by an empty DeckRecord. - */ - size_t record_nr = 0; - for (auto& rawRecord : rawKeyword) { - if (rawRecord.size() == 0) { - keyword.addRecord( DeckRecord() ); - record_nr = 0; - } - else { - keyword.addRecord( this->getRecord( record_nr ).parse( parseContext, errors, rawRecord, active_unitsystem, default_unitsystem, rawKeyword.getKeywordName(), filename ) ); - record_nr++; - } - } - } - else { - size_t record_nr = 0; - for( auto& rawRecord : rawKeyword ) { - if( m_records.size() == 0 && rawRecord.size() > 0 ) - throw std::invalid_argument("Missing item information " + rawKeyword.getKeywordName()); - - keyword.addRecord( this->getRecord( record_nr ).parse( parseContext, errors, rawRecord, active_unitsystem, default_unitsystem, rawKeyword.getKeywordName(), filename ) ); - record_nr++; - } - } - - if (this->hasFixedSize( )) - keyword.setFixedSize( ); - - if (this->m_keywordSizeType == OTHER_KEYWORD_IN_DECK) { - if (!m_isTableCollection) - keyword.setFixedSize( ); - } - - if (this->m_keywordSizeType == UNKNOWN) - keyword.setFixedSize( ); - - return keyword; - } - - size_t ParserKeyword::getFixedSize() const { - if (!hasFixedSize()) - throw std::logic_error("The parser keyword "+getName()+" does not have a fixed size!"); - return m_fixedSize; - } - - bool ParserKeyword::hasFixedSize() const { - return (this->m_keywordSizeType == FIXED || this->m_keywordSizeType == FIXED_CODE); - } - - enum ParserKeywordSizeEnum ParserKeyword::getSizeType() const { - return m_keywordSizeType; - } - - bool ParserKeyword::rawStringKeyword() const { - return this->raw_string_keyword; - } - - const KeywordSize& ParserKeyword::getKeywordSize() const { - return keyword_size; - } - - bool ParserKeyword::isDataKeyword() const { - if( this->m_records.empty() ) return false; - - return this->m_records.front().isDataRecord(); - } - - bool ParserKeyword::isCodeKeyword() const { - return (this->m_keywordSizeType == FIXED_CODE); - } - - bool ParserKeyword::isAlternatingKeyword() const { - return alternating_keyword; - } - - bool ParserKeyword::isDoubleRecordKeyword() const { - return double_records; - } - - void ParserKeyword::setAlternatingKeyword(bool alternating) { - alternating_keyword = alternating; - } - - void ParserKeyword::setDoubleRecordsKeyword(bool double_rec) { - double_records = double_rec; - } - - bool ParserKeyword::hasMatchRegex() const { - return !m_matchRegexString.empty(); - } - - void ParserKeyword::setMatchRegex(const std::string& deckNameRegexp) { - try { - m_matchRegex = std::regex(deckNameRegexp); - m_matchRegexString = deckNameRegexp; - } - catch (const std::exception &e) { - std::cerr << "Warning: Malformed regular expression for keyword '" << getName() << "':\n" - << "\n" - << e.what() << "\n" - << "\n" - << "Ignoring expression!\n"; - } - } - - bool ParserKeyword::matches(const string_view& name ) const { - if (!validDeckName(name )) - return false; - - else if( m_deckNames.count( name.string() ) ) - return true; - - else if (hasMatchRegex()) - return std::regex_match( name.begin(), name.end(), m_matchRegex); - - return false; - } - - std::string ParserKeyword::createDeclaration(const std::string& indent) const { - std::stringstream ss; - ss << indent << "class " << className() << " : public ParserKeyword {" << '\n'; - ss << indent << "public:" << '\n'; - { - std::string local_indent = indent + " "; - ss << local_indent << className() << "();" << '\n'; - ss << local_indent << "static const std::string keywordName;" << '\n'; - if (m_records.size() > 0 ) { - for( const auto& record : *this ) { - for( const auto& item : record ) { - ss << '\n'; - item.inlineClass(ss , local_indent ); - } - } - } - } - ss << indent << "};" << '\n' << '\n' << '\n'; - return ss.str(); - } - - - std::string ParserKeyword::createDecl() const { - return className() + "::" + className() + "()"; - } - - - std::string ParserKeyword::createCode() const { - std::stringstream ss; - const std::string lhs = "keyword"; - const std::string indent = " "; - - ss << className() << "::" << className() << "( ) : ParserKeyword(\"" << m_name << "\")" << '\n' << "{" << '\n'; - { - const std::string sizeString(ParserKeywordSizeEnum2String(m_keywordSizeType)); - ss << indent; - switch (m_keywordSizeType) { - case SLASH_TERMINATED: - case FIXED_CODE: - case DOUBLE_SLASH_TERMINATED: - case UNKNOWN: - ss << "setSizeType(" << sizeString << ");" << '\n'; - break; - case FIXED: - ss << "setFixedSize( (size_t) " << m_fixedSize << ");" << '\n'; - break; - case OTHER_KEYWORD_IN_DECK: - ss << "setSizeType(" << sizeString << ");" << '\n'; - ss << indent << "initSizeKeyword(\"" << keyword_size.keyword << "\",\"" << keyword_size.item << "\"," << keyword_size.shift << ");" << '\n'; - if (m_isTableCollection) - ss << indent << "setTableCollection( true );" << '\n'; - break; - } - } - - // add the valid sections for the keyword - for (auto sectionNameIt = m_validSectionNames.begin(); - sectionNameIt != m_validSectionNames.end(); - ++sectionNameIt) - { - ss << indent << "addValidSectionName(\"" << *sectionNameIt << "\");" << '\n'; - } - - // add the deck names - ss << indent << "clearDeckNames();\n"; - for (auto deckNameIt = m_deckNames.begin(); - deckNameIt != m_deckNames.end(); - ++deckNameIt) - { - ss << indent << "addDeckName(\"" << *deckNameIt << "\");" << '\n'; - } - - // set AlternatingRecords - if (alternating_keyword) - ss << indent << "setAlternatingKeyword(true);" << '\n'; - - // set DoubleRecords - if (double_records) - ss << indent << "setDoubleRecordsKeyword(true);" << '\n'; - - // set the deck name match regex - if (hasMatchRegex()) - ss << indent << "setMatchRegex(\"" << m_matchRegexString << "\");" << '\n'; - - if (this->m_keywordSizeType == FIXED_CODE) - ss << indent << "setCodeEnd(\"" << this->code_end << "\");" << '\n'; - - { - if (m_records.size() > 0 ) { - for( const auto& record : *this ) { - const std::string local_indent = indent + " "; - ss << indent << "{" << '\n'; - ss << local_indent << "ParserRecord record;" << '\n'; - for( const auto& item : record ) { - ss << local_indent << "{" << '\n'; - { - std::string indent3 = local_indent + " "; - ss << item.createCode(indent3); - { - std::string addItemMethod = "addItem"; - if (isDataKeyword()) - addItemMethod = "addDataItem"; - - ss << indent3 << "record." << addItemMethod << "(item);" << '\n'; - } - } - ss << local_indent << "}" << '\n'; - } - - if (record.isDataRecord()) - ss << local_indent << "addDataRecord( record );" << '\n'; - else - ss << local_indent << "addRecord( record );" << '\n'; - - ss << indent << "}" << '\n'; - } - } - } - ss << "}" << '\n'; - - ss << "const std::string " << className() << "::keywordName = \"" << getName() << "\";" << '\n'; - for( const auto& record : *this ) { - for( const auto& item : record ) { - ss << item.inlineClassInit(className()); - } - } - ss << '\n'; - return ss.str(); - } - - - - bool ParserKeyword::operator==( const ParserKeyword& rhs ) const { - // compare the deck names. we don't care about the ordering of the strings. - if (m_deckNames != rhs.m_deckNames) - return false; - - if( m_name != rhs.m_name - || this->code_end != rhs.code_end - || m_matchRegexString != rhs.m_matchRegexString - || m_keywordSizeType != rhs.m_keywordSizeType - || isCodeKeyword() != rhs.isCodeKeyword() - || isDataKeyword() != rhs.isDataKeyword() - || m_isTableCollection != rhs.m_isTableCollection ) - return false; - - - switch( m_keywordSizeType ) { - case FIXED: - if( m_fixedSize != rhs.m_fixedSize ) - return false; - break; - - case OTHER_KEYWORD_IN_DECK: - if (this->keyword_size != rhs.keyword_size) - return false; - break; - default: - break; - } - - return this->m_records.size() == rhs.m_records.size() - && std::equal( this->begin(), this->end(), rhs.begin() ); - } - - bool ParserKeyword::operator!=( const ParserKeyword& rhs ) const { - return !( *this == rhs ); - } - - std::ostream& operator<<( std::ostream& stream, const ParserKeyword& kw ) { - stream << "ParserKeyword " << kw.getName() << " { " << std::endl - << "records: ["; - - if( kw.begin() != kw.end() ) stream << std::endl; - - for( const auto& record : kw ) - stream << record << std::endl; - stream << "]"; - - return stream << std::endl << "}"; - } - -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Parser/ParserRecord.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Parser/ParserRecord.cpp deleted file mode 100644 index 83340ada4b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Parser/ParserRecord.cpp +++ /dev/null @@ -1,186 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include -#include -#include -#include -#include -#include - -#include "raw/RawRecord.hpp" - -namespace Opm { - -namespace { - struct name_eq { - name_eq( const std::string& x ) : name( x ) {} - const std::string& name; - bool operator()( const ParserItem& x ) const { - return x.name() == this->name; - } - }; -} - - ParserRecord::ParserRecord() - : m_dataRecord( false ) - { - } - - size_t ParserRecord::size() const { - return m_items.size(); - } - - bool ParserRecord::rawStringRecord() const { - return this->raw_string_record; - } - - void ParserRecord::addItem( ParserItem item ) { - if (m_dataRecord) - throw std::invalid_argument("Record is already marked as DataRecord - can not add items"); - - auto itr = std::find_if( this->m_items.begin(), - this->m_items.end(), - name_eq( item.name() ) ); - - if( itr != this->m_items.end() ) - throw std::invalid_argument("Itemname: " + item.name() + " already exists."); - - if (item.parseRaw()) - this->raw_string_record = true; - - this->m_items.push_back( std::move( item ) ); - } - - void ParserRecord::addDataItem( ParserItem item ) { - if (m_items.size() > 0) - throw std::invalid_argument("Record already contains items - can not add Data Item"); - - this->addItem( std::move( item) ); - m_dataRecord = true; - } - - - - std::vector< ParserItem >::const_iterator ParserRecord::begin() const { - return m_items.begin(); - } - - - std::vector< ParserItem >::const_iterator ParserRecord::end() const { - return m_items.end(); - } - - - bool ParserRecord::hasDimension() const { - return std::any_of( this->begin(), this->end(), - []( const ParserItem& x ) { return x.dimensions().size() > 0; } ); - } - - - - - const ParserItem& ParserRecord::get(size_t index) const { - return this->m_items.at( index ); - } - - bool ParserRecord::hasItem( const std::string& name ) const { - return std::any_of( this->m_items.begin(), - this->m_items.end(), - name_eq( name ) ); - } - - const ParserItem& ParserRecord::get( const std::string& name ) const { - auto itr = std::find_if( this->m_items.begin(), - this->m_items.end(), - name_eq( name ) ); - - if( itr == this->m_items.end() ) - throw std::out_of_range( "No item '" + name + "'" ); - - return *itr; - } - - - DeckRecord ParserRecord::parse(const ParseContext& parseContext , ErrorGuard& errors , RawRecord& rawRecord, UnitSystem& active_unitsystem, UnitSystem& default_unitsystem, const std::string& keyword, const std::string& filename) const { - std::vector< DeckItem > items; - items.reserve( this->size() + 20 ); - for( const auto& parserItem : *this ) - items.emplace_back( parserItem.scan( rawRecord, active_unitsystem, default_unitsystem ) ); - - if (rawRecord.size() > 0) { - std::string msg = "The RawRecord for keyword \"" + keyword + "\" in file\"" + filename + "\" contained " + - std::to_string(rawRecord.size()) + - " too many items according to the spec. RawRecord was: " + rawRecord.getRecordString(); - parseContext.handleError(ParseContext::PARSE_EXTRA_DATA , msg, errors); - } - - return { std::move( items ) }; - } - - bool ParserRecord::equal(const ParserRecord& other) const { - bool equal_ = true; - if (size() == other.size()) { - size_t itemIndex = 0; - while (true) { - if (itemIndex == size()) - break; - { - const auto& item = get(itemIndex); - const auto& otherItem = other.get(itemIndex); - - if (item != otherItem ) { - equal_ = false; - break; - } - } - itemIndex++; - } - } else - equal_ = false; - return equal_; - } - - bool ParserRecord::isDataRecord() const { - return m_dataRecord; - } - - bool ParserRecord::operator==( const ParserRecord& rhs ) const { - return this->equal( rhs ); - } - - bool ParserRecord::operator!=( const ParserRecord& rhs ) const { - return !( *this == rhs ); - } - - std::ostream& operator<<( std::ostream& stream, const ParserRecord& rec ) { - stream << " ParserRecord { " << std::endl; - - for( const auto& item : rec ) - stream << " " << item << std::endl; - - return stream << " }"; - } - - - const std::string& ParserRecord::end_string() const { - return this->record_end; - } - -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Parser/createDefaultKeywordList.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Parser/createDefaultKeywordList.cpp deleted file mode 100644 index a16d96ba88..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Parser/createDefaultKeywordList.cpp +++ /dev/null @@ -1,65 +0,0 @@ -/* - Copyright 2016 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include - -#include -#include -#include - -#include -#include - - -int main(int , char ** argv) { - const char * keyword_list_file = argv[1]; - const char * source_file_path = argv[2]; - const char * init_file_name = argv[3]; - const char * header_file_base_path = argv[4]; - const char * header_file_path = argv[5]; - const char * test_file_name = argv[6]; - - - std::vector keyword_list; - { - std::string buffer; - std::ifstream is(keyword_list_file); - std::getline( is , buffer ); - is.close(); - - size_t start = 0; - while (true) { - size_t end = buffer.find( ";" , start); - if (end == std::string::npos) { - keyword_list.push_back( buffer.substr(start) ); - break; - } - - keyword_list.push_back( buffer.substr(start, end - start )); - start = end + 1; - } - } - Opm::KeywordLoader loader( keyword_list, false ); - Opm::KeywordGenerator generator( true ); - - generator.updateKeywordSource(loader , source_file_path ); - generator.updateInitSource(loader , init_file_name ); - generator.updateHeader(loader, header_file_base_path, header_file_path ); - generator.updateTest( loader , test_file_name ); -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Parser/raw/RawConsts.hpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Parser/raw/RawConsts.hpp deleted file mode 100644 index a454e404a3..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Parser/raw/RawConsts.hpp +++ /dev/null @@ -1,97 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#ifndef RAWCONSTS_HPP -#define RAWCONSTS_HPP - -#include - -namespace Opm { - - /// Consts used in the non semantic, raw parsing of the eclipse file - namespace RawConsts { - const char slash = '/'; - const char quote = '\''; - const std::string include = "INCLUDE"; - const std::string end = "END"; - const std::string endinclude = "ENDINC"; - const std::string paths = "PATHS"; - const std::string pyinput = "PYINPUT"; - const unsigned int maxKeywordLength = 8; - - /* The lookup uses some bit-tricks to achieve branchless lookup in the - * table. It has a robustness weakness because all input characters - * that are non-ascii will be interpreted only by their 7 smallest - * bits. However: - * * only ascii input is supported, so a non-ascii input deck - * is fundamentally broken - * * the underlying storage is still char which when signed is - * +-127 - * * it's reasonable to assume non-ascii input only shows up in - * comments, which most of the time will be skipped when - * looking for separators - */ - - constexpr bool sep_table[ 128 ] = { - 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - }; - - struct is_separator { - /* - * ch is SOH (ASCII 1), space, comma, \r, \n, \t, \v or \f => true - * else false - */ - constexpr bool operator()( int ch ) const { - return sep_table[ ch & 0x7f ]; - } - }; - - constexpr bool q_table[ 128 ] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - }; - - struct is_quote { - /* - * ch is ' or " => true - * else false - */ - constexpr bool operator()( int ch ) const { - return q_table[ ch & 0x7f ]; - } - }; - } -} - - -#endif /* RAWCONSTS_HPP */ - diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Parser/raw/RawEnums.hpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Parser/raw/RawEnums.hpp deleted file mode 100644 index 591865ea8c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Parser/raw/RawEnums.hpp +++ /dev/null @@ -1,39 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#ifndef RAW_ENUMS_H -#define RAW_ENUMS_H - -namespace Opm { - - namespace Raw { - - enum KeywordSizeEnum { - SLASH_TERMINATED = 0, - FIXED = 1, - UNKNOWN = 3, - TABLE_COLLECTION = 4, - CODE = 5, - DOUBLE_SLASH_TERMINATED = 6 - }; - } -} - - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Parser/raw/RawKeyword.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Parser/raw/RawKeyword.cpp deleted file mode 100644 index c969e82e11..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Parser/raw/RawKeyword.cpp +++ /dev/null @@ -1,176 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ -#include - -#include -#include - -#include "RawConsts.hpp" -#include "RawKeyword.hpp" -#include "RawRecord.hpp" - -namespace Opm { - -namespace { - - std::string keyword_name(const std::string& input_name) { - std::string name = rtrim_copy(input_name); - if (!ParserKeyword::validDeckName(name)) - throw std::invalid_argument("Not a valid keyword:" + name); - - if (name.size() > Opm::RawConsts::maxKeywordLength) - throw std::invalid_argument("Too long keyword:" + name); - - if (name[0] == ' ') - throw std::invalid_argument("Illegal whitespace start of keyword:" + name); - - return name; - } - -} - - - RawKeyword::RawKeyword(const std::string& name, const std::string& filename, std::size_t lineNR, bool raw_string, Raw::KeywordSizeEnum sizeType, std::size_t size_arg) : - m_name(keyword_name(name)), - m_location(filename, lineNR), - raw_string_keyword(raw_string), - m_sizeType(sizeType) - { - if (this->m_sizeType == Raw::FIXED) { - this->m_fixedSize = size_arg; - if (size_arg == 0) - this->m_isFinished = true; - } - - if (this->m_sizeType == Raw::TABLE_COLLECTION) { - if (size_arg == 0) - throw std::logic_error("Bug in opm/flow: Attempt to create a TableCollection with zero tables. Keyword: " + name + " at " + filename + ":" + std::to_string(lineNR)); - this->m_numTables = size_arg; - } - - if (this->m_sizeType == Raw::SLASH_TERMINATED || this->m_sizeType == Raw::UNKNOWN) { - if (size_arg != 0) - throw std::logic_error("Bug in opm/flow: Must have size_arg == 0 for SLASH_TEMINATED and UNKNOWN. Keyword: " + name + " at " + filename + ":" + std::to_string(lineNR)); - } - - - if (this->m_sizeType == Raw::CODE) { - if (size_arg != 1) - throw std::logic_error("Bug in opm/flow: Must have size_arg == 1 for CODE. Keyword: " + name + " at " + filename + ":" + std::to_string(lineNR)); - this->m_fixedSize = size_arg; - } - } - - - RawKeyword::RawKeyword(const std::string& name, const std::string& filename, std::size_t lineNR, bool raw_string, Raw::KeywordSizeEnum sizeType) : - RawKeyword(name, filename, lineNR, raw_string, sizeType, sizeType == Raw::CODE ? 1 : 0) - { - if (this->m_sizeType == Raw::FIXED || this->m_sizeType == Raw::TABLE_COLLECTION) - throw std::logic_error("Internal error - wrong constructor has been used. Keyword: " + name + " at " + filename + ":" + std::to_string(lineNR)); - } - - - const std::string& RawKeyword::getKeywordName() const { - return m_name; - } - - - bool RawKeyword::terminateKeyword() { - if (this->m_sizeType == Raw::SLASH_TERMINATED) - this->m_isFinished = true; - - if (this->m_sizeType == Raw::DOUBLE_SLASH_TERMINATED) { - if (m_isTempFinished) - this->m_isFinished = true; - else - this->m_isTempFinished = true; - } - - if (m_sizeType == Raw::TABLE_COLLECTION) { - m_currentNumTables += 1; - if (m_currentNumTables == m_numTables) - m_isFinished = true; - } - - if( m_sizeType == Raw::UNKNOWN) - m_isFinished = true; - - return this->m_isFinished; - } - - - bool RawKeyword::addRecord(RawRecord record) { - - if (record.size() > 0) - m_isTempFinished = false; - - this->m_records.push_back(std::move(record)); - if (m_records.size() == this->m_fixedSize) { - if( this->m_sizeType == Raw::FIXED || this->m_sizeType == Raw::CODE) - this->m_isFinished = true; - } - return this->m_isFinished; - } - - - - const RawRecord& RawKeyword::getFirstRecord() const { - return *m_records.begin(); - } - - - bool RawKeyword::isFinished() const { - return m_isFinished; - } - - const Location& RawKeyword::location() const { - return this->m_location; - } - - RawKeyword::const_iterator RawKeyword::begin() const { - return this->m_records.begin(); - } - - RawKeyword::const_iterator RawKeyword::end() const { - return this->m_records.end(); - } - - RawKeyword::iterator RawKeyword::begin() { - return this->m_records.begin(); - } - - RawKeyword::iterator RawKeyword::end() { - return this->m_records.end(); - } - - - Raw::KeywordSizeEnum RawKeyword::getSizeType() const { - return m_sizeType; - } - - bool RawKeyword::rawStringKeyword() const { - return this->raw_string_keyword; - } - - std::size_t RawKeyword::size() const { - return this->m_records.size(); - } - -} - diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Parser/raw/RawKeyword.hpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Parser/raw/RawKeyword.hpp deleted file mode 100644 index 708745ee6c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Parser/raw/RawKeyword.hpp +++ /dev/null @@ -1,82 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#ifndef RAWKEYWORD_HPP -#define RAWKEYWORD_HPP - -#include -#include -#include -#include - -#include - -#include "RawEnums.hpp" -#include "RawConsts.hpp" - -namespace Opm { - - class RawRecord; - class string_view; - - class RawKeyword { - public: - RawKeyword(const std::string& name, const std::string& filename, std::size_t lineNR, bool raw_string, Raw::KeywordSizeEnum sizeType); - RawKeyword(const std::string& name, const std::string& filename, std::size_t lineNR, bool raw_string, Raw::KeywordSizeEnum sizeType, std::size_t size_arg); - bool terminateKeyword(); - bool addRecord(RawRecord record); - - const std::string& getKeywordName() const; - Raw::KeywordSizeEnum getSizeType() const; - - // Special case method only for inspecting INCLUDE keywords; - // the general getRecords functionality should use the - // iterator interface. - const RawRecord& getFirstRecord( ) const; - - bool isFinished() const; - bool unKnownSize() const; - bool rawStringKeyword() const; - const Location& location() const; - - using const_iterator = std::vector< RawRecord >::const_iterator; - using iterator = std::vector< RawRecord >::iterator; - - iterator begin(); - iterator end(); - const_iterator begin() const; - const_iterator end() const; - std::size_t size() const; - private: - std::string m_name; - Location m_location; - bool raw_string_keyword; - Raw::KeywordSizeEnum m_sizeType; - - size_t m_fixedSize = 0; - size_t m_numTables = 0; - size_t m_currentNumTables = 0; - bool m_isTempFinished = false; - bool m_isFinished = false; - - std::vector< RawRecord > m_records; - }; -} -#endif /* RAWKEYWORD_HPP */ - diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Parser/raw/RawRecord.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Parser/raw/RawRecord.cpp deleted file mode 100644 index 9aaecd4d4a..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Parser/raw/RawRecord.cpp +++ /dev/null @@ -1,116 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include -#include -#include -#include -#include - -#include - -#include "RawRecord.hpp" -#include "RawConsts.hpp" - - -using namespace Opm; -using namespace std; - -namespace Opm { - -namespace { - -std::deque< string_view > splitSingleRecordString( const string_view& record ) { - auto first_nonspace = []( string_view::const_iterator begin, - string_view::const_iterator end ) { - return std::find_if_not( begin, end, RawConsts::is_separator() ); - }; - - std::deque< string_view > dst; - auto current = record.begin(); - while( (current = first_nonspace( current, record.end() )) != record.end() ) - { - if( *current == RawConsts::quote ) { - auto quote_end = std::find( current + 1, record.end(), RawConsts::quote ) + 1; - dst.push_back( { current, quote_end } ); - current = quote_end; - } else { - auto token_end = std::find_if( current, record.end(), RawConsts::is_separator() ); - dst.push_back( { current, token_end } ); - current = token_end; - } - } - - return dst; -} - -/* - * It is assumed that after a record is terminated, there is no quote marks - * in the subsequent comment. This is in accordance with the Eclipse user - * manual. - * - * If a "non-complete" record string is supplied, an invalid_argument - * exception is thrown. - * - */ - -template< typename T > -inline bool even_quotes( const T& str ) { - return std::count( str.begin(), str.end(), RawConsts::quote ) % 2 == 0; -} - -} - - RawRecord::RawRecord(const string_view& singleRecordString, bool text) : - m_sanitizedRecordString( singleRecordString ) - { - - if (text) - this->m_recordItems.push_back(this->m_sanitizedRecordString); - else { - this->m_recordItems = splitSingleRecordString( m_sanitizedRecordString ); - - if( !even_quotes( singleRecordString ) ) - throw std::invalid_argument("Input string is not a complete record string, " - "offending string: '" + singleRecordString + "'"); - } - } - - RawRecord::RawRecord(const string_view& singleRecordString) : - RawRecord(singleRecordString, false) - {} - - void RawRecord::prepend( size_t count, string_view tok ) { - this->m_recordItems.insert( this->m_recordItems.begin(), count, tok ); - } - - void RawRecord::dump() const { - std::cout << "RecordDump: "; - for (size_t i = 0; i < m_recordItems.size(); i++) { - std::cout - << this->m_recordItems[i] << "/" - << getItem( i ) << " "; - } - std::cout << std::endl; - } - - std::string RawRecord::getRecordString() const { - return m_sanitizedRecordString.string(); - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Parser/raw/RawRecord.hpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Parser/raw/RawRecord.hpp deleted file mode 100644 index dda439716e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Parser/raw/RawRecord.hpp +++ /dev/null @@ -1,81 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#ifndef RECORD_HPP -#define RECORD_HPP - -#include -#include -#include -#include - -#include - -namespace Opm { - - /// Class representing the lowest level of the Raw datatypes, a record. A record is simply - /// a vector containing the record elements, represented as strings. Some logic is present - /// to handle special elements in a record string, particularly with quote characters. - - class RawRecord { - public: - RawRecord( const string_view&, bool text); - explicit RawRecord( const string_view&); - - inline string_view pop_front(); - inline string_view front() const; - void push_front( string_view token ); - void prepend( size_t count, string_view token ); - inline size_t size() const; - - std::string getRecordString() const; - inline string_view getItem(size_t index) const; - - void dump() const; - - private: - string_view m_sanitizedRecordString; - std::deque< string_view > m_recordItems; - }; - - /* - * These are frequently called, but fairly trivial in implementation, and - * inlining the calls gives a decent low-effort performance benefit. - */ - string_view RawRecord::pop_front() { - auto front = m_recordItems.front(); - this->m_recordItems.pop_front(); - return front; - } - - string_view RawRecord::front() const { - return this->m_recordItems.front(); - } - - size_t RawRecord::size() const { - return m_recordItems.size(); - } - - string_view RawRecord::getItem(size_t index) const { - return this->m_recordItems.at( index ); - } -} - -#endif /* RECORD_HPP */ - diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Parser/raw/StarToken.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Parser/raw/StarToken.cpp deleted file mode 100644 index 6d667c6901..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Parser/raw/StarToken.cpp +++ /dev/null @@ -1,162 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include -#include -#include -#include -#include -#include - -#include - -#include -#include - -#include "StarToken.hpp" - -namespace qi = boost::spirit::qi; - -namespace Opm { - - bool isStarToken(const string_view& token, - std::string& countString, - std::string& valueString) { - // find first character which is not a digit - size_t pos = 0; - for (; pos < token.length(); ++pos) - if (!std::isdigit(token[pos])) - break; - - // if no such character exists or if this character is not a star, the token is - // not a "star token" (i.e. it is not a "repeat this value N times" token. - if (pos >= token.size() || token[pos] != '*') - return false; - // Quote from the Eclipse Reference Manual: "An asterisk by - // itself is not sufficent". However, our experience is that - // Eclipse accepts such tokens and we therefore interpret "*" - // as "1*". - // - // Tokens like "*12" are recognized as a star token - // here, but we will throw in the code which uses - // StarToken. (Because Eclipse does not seem to - // accept these and we would stay as closely to the spec as - // possible.) - else if (pos == 0) { - countString = ""; - valueString = token.substr(pos + 1); - return true; - } - - // if a star is prefixed by an unsigned integer N, then this should be - // interpreted as "repeat value after star N times" - countString = token.substr(0, pos); - valueString = token.substr(pos + 1); - return true; - } - - template<> - int readValueToken< int >( string_view view ) { - int n = 0; - auto cursor = view.begin(); - const bool ok = qi::parse( cursor, view.end(), qi::int_, n ); - - if( ok && cursor == view.end() ) return n; - throw std::invalid_argument( "Malformed integer '" + view + "'" ); - } - - template< typename T > - struct fortran_double : qi::real_policies< T > { - // Eclipse supports Fortran syntax for specifying exponents of floating point - // numbers ('D' and 'E', e.g., 1.234d5) - template< typename It > - static bool parse_exp( It& first, const It& last ) { - if( first == last || - (*first != 'e' && *first != 'E' && - *first != 'd' && *first != 'D' ) ) - return false; - ++first; - return true; - } - }; - - template<> - double readValueToken< double >( string_view view ) { - double n = 0; - qi::real_parser< double, fortran_double< double > > double_; - auto cursor = view.begin(); - const auto ok = qi::parse( cursor, view.end(), double_, n ); - - if( ok && cursor == view.end() ) return n; - throw std::invalid_argument( "Malformed floating point number '" + view + "'" ); - } - - - template <> - std::string readValueToken< std::string >( string_view view ) { - if( view.size() == 0 || view[ 0 ] != '\'' ) - return view.string(); - - if( view.size() < 2 || view[ view.size() - 1 ] != '\'') - throw std::invalid_argument("Unable to parse string '" + view + "' as a string token"); - - return view.substr( 1, view.size() - 2 ); - } - - template <> - RawString readValueToken( string_view view ) { - return { view.string() }; - } - - - template<> - UDAValue readValueToken< UDAValue >( string_view view ) { - double n = 0; - qi::real_parser< double, fortran_double< double > > double_; - auto cursor = view.begin(); - const auto ok = qi::parse( cursor, view.end(), double_, n ); - - if( ok && cursor == view.end() ) return UDAValue(n); - return UDAValue( readValueToken(view) ); - } - - void StarToken::init_( const string_view& token ) { - // special-case the interpretation of a lone star as "1*" but do not - // allow constructs like "*123"... - if (m_countString == "") { - if (m_valueString != "") - // TODO: decorate the deck with a warning instead? - throw std::invalid_argument("Not specifying a count also implies not specifying a value. Token: \'" + token + "\'."); - - // TODO: since this is explicitly forbidden by the documentation it might - // be a good idea to decorate the deck with a warning? - m_count = 1; - } - else { - const auto cnt = std::stoi( m_countString ); - - if (cnt < 1) - // TODO: decorate the deck with a warning instead? - throw std::invalid_argument("Specifing zero repetitions is not allowed. Token: \'" + token + "\'."); - - m_count = static_cast(cnt); - } - } - -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Parser/raw/StarToken.hpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Parser/raw/StarToken.hpp deleted file mode 100644 index 094f2f3e48..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Parser/raw/StarToken.hpp +++ /dev/null @@ -1,89 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#ifndef STAR_TOKEN_HPP -#define STAR_TOKEN_HPP - -#include -#include - -#include -#include - -namespace Opm { - bool isStarToken(const string_view& token, - std::string& countString, - std::string& valueString); - - template - T readValueToken( string_view ); - -class StarToken { -public: - StarToken(const string_view& token) - { - if (!isStarToken(token, m_countString, m_valueString)) - throw std::invalid_argument("Token \""+ token +"\" is not a repetition specifier"); - init_(token); - } - - StarToken(const string_view& token, const std::string& countStr, const std::string& valueStr) - : m_countString(countStr) - , m_valueString(valueStr) - { - init_(token); - } - - std::size_t count() const { - return m_count; - } - - bool hasValue() const { - return !m_valueString.empty(); - } - - // returns the coubt as rendered in the deck. note that this might be different - // than just converting the return value of count() to a string because an empty - // count is interpreted as 1... - const std::string& countString() const { - return m_countString; - } - - // returns the value as rendered in the deck. note that this might be different - // than just converting the return value of value() to a string because values - // might have different representations in the deck (e.g. strings can be - // specified with and without quotes and but spaces are only allowed using the - // first representation.) - const std::string& valueString() const { - return m_valueString; - } - -private: - // internal initialization method. the m_countString and m_valueString attributes - // must be set before calling this method. - void init_(const string_view& token); - - std::size_t m_count; - std::string m_countString; - std::string m_valueString; -}; -} - - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Python/EmbedModule.hpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Python/EmbedModule.hpp deleted file mode 100644 index 720667e151..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Python/EmbedModule.hpp +++ /dev/null @@ -1,58 +0,0 @@ -/* -This Code is a copy paste of part of the contents of pybind11/embed.h -It allows for slightly changing the python embedding without changing the pybind11 sourcecode. -*/ - -#ifndef OPM_EMBED_MODULE -#define OPM_EMBED_MODULE - -#ifdef EMBEDDED_PYTHON -#include - -#define OPM_EMBEDDED_MODULE(name, variable) \ - static void PYBIND11_CONCAT(pybind11_init_, name)(pybind11::module &); \ - static PyObject PYBIND11_CONCAT(*pybind11_init_wrapper_, name)() { \ - auto m = pybind11::module(PYBIND11_TOSTRING(name)); \ - try { \ - PYBIND11_CONCAT(pybind11_init_, name)(m); \ - return m.ptr(); \ - } catch (pybind11::error_already_set &e) { \ - PyErr_SetString(PyExc_ImportError, e.what()); \ - return nullptr; \ - } catch (const std::exception &e) { \ - PyErr_SetString(PyExc_ImportError, e.what()); \ - return nullptr; \ - } \ - } \ - PYBIND11_EMBEDDED_MODULE_IMPL(name) \ - Opm::embed::python_module name(PYBIND11_TOSTRING(name), \ - PYBIND11_CONCAT(pybind11_init_impl_, name)); \ - void PYBIND11_CONCAT(pybind11_init_, name)(pybind11::module &variable) - -namespace Opm { -namespace embed { - -/// Python 2.7/3.x compatible version of `PyImport_AppendInittab` and error checks. -struct python_module { -#if PY_MAJOR_VERSION >= 3 - using init_t = PyObject *(*)(); -#else - using init_t = void (*)(); -#endif - python_module(const char *name, init_t init) { - - auto result = PyImport_AppendInittab(name, init); - if (result == -1) - pybind11::pybind11_fail("Insufficient memory to add a new module"); - } -}; - -} -} - - - - -#endif - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Python/PyRunModule.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Python/PyRunModule.cpp deleted file mode 100644 index 14eaedcfb3..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Python/PyRunModule.cpp +++ /dev/null @@ -1,81 +0,0 @@ -/* - Copyright 2020 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ -#ifndef EMBEDDED_PYTHON -error BUG: The PyRunModule.hpp header should *not* be included in a configuration without EMBEDDED_PYTHON -#endif - - -#include -#include -#include - -#include -#include "src/opm/parser/eclipse/Python/PyRunModule.hpp" - -namespace Opm { - -namespace fs = Opm::filesystem; - -PyRunModule::PyRunModule(std::shared_ptr python, const std::string& fname) { - if (python->enabled()) - this->python_handle = python; - else - throw std::logic_error("Tried to make a PYACTION object with an invalid Python handle"); - - - fs::path file(fname); - if (!fs::is_regular_file(file)) - throw std::invalid_argument("No such module: " + fname); - - std::string module_name = file.filename().stem(); - std::string module_path = file.parent_path().string(); - if (!module_path.empty()) { - py::module sys = py::module::import("sys"); - py::list sys_path = sys.attr("path"); - { - bool have_path = false; - for (const auto& elm : sys_path) { - const std::string& path_elm = static_cast(elm); - if (path_elm == module_path) - have_path = true; - } - if (!have_path) - sys_path.append(py::str(module_path)); - } - } - this->opm_embedded = py::module::import("opm_embedded"); - this->module = py::module::import(module_name.c_str()); - if (this->module.is_none()) - throw std::runtime_error("Syntax error when loading Python module: " + fname); - - if (py::hasattr(this->module, "run")) - this->run_function = this->module.attr("run"); - if (this->run_function.is_none()) - throw std::runtime_error("Python module: " + fname + " did not have run() method"); - - this->module.attr("storage") = this->storage; -} - - -bool PyRunModule::run(EclipseState& ecl_state, Schedule& sched, std::size_t report_step, SummaryState& st) { - py::object result = this->run_function(&ecl_state, &sched, report_step, &st); - return result.cast(); -} - -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Python/PyRunModule.hpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Python/PyRunModule.hpp deleted file mode 100644 index 36dd1a817f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Python/PyRunModule.hpp +++ /dev/null @@ -1,56 +0,0 @@ -/* - Copyright 2020 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ -#ifndef EMBEDDED_PYTHON -error BUG: The PyRunModule.hpp header should *not* be included in a configuration without EMBEDDED_PYTHON -#endif - -#ifndef OPM_PY_RUN_MODULE -#define OPM_PY_RUN_MODULE - -#include -#include -namespace py = pybind11; - -#include -#include -#include - -namespace Opm { - -class EclipseState; -class Schedule; -class SummaryState; - - -class __attribute__((visibility("default"))) PyRunModule { -public: - PyRunModule(std::shared_ptr python, const std::string& fname); - - bool run(EclipseState& ecl_state, Schedule& sched, std::size_t report_step, SummaryState& st); - -private: - py::object run_function = py::none(); - std::shared_ptr python_handle; - py::module module; - py::module opm_embedded; - py::dict storage; -}; - -} -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Python/Python.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Python/Python.cpp deleted file mode 100644 index bc8bf50892..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Python/Python.cpp +++ /dev/null @@ -1,60 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include -#include -#include -#include "PythonInterp.hpp" - -namespace Opm { - -Python::Python(Enable enable) : - interp( std::make_shared(false)) -{ - if (enable == Enable::OFF) - return; - - if (enable == Enable::ON) - this->interp = std::make_shared(true); - else { - try { - this->interp = std::make_shared(true); - } catch(const std::logic_error &exc) {} - } -} - -bool Python::supported() { - return PythonInterp::supported(); -} - - -bool Python::exec(const std::string& python_code) const { - return this->interp->exec(python_code); -} - - -bool Python::exec(const std::string& python_code, const Parser& parser, Deck& deck) const { - return this->interp->exec(python_code, parser, deck); -} - -bool Python::enabled() const { - return bool( *this->interp ); -} - -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Python/PythonInterp.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Python/PythonInterp.cpp deleted file mode 100644 index 4ce2241b1e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Python/PythonInterp.cpp +++ /dev/null @@ -1,89 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - - -#ifdef EMBEDDED_PYTHON -#include -#include -#include -#include - -#include -#include -#include - -#include "python/cxx/export.hpp" -#include "PythonInterp.hpp" -#include "EmbedModule.hpp" - -namespace py = pybind11; -namespace Opm { - - -/* - OPM_EMBEDDED_MODULE create a Python of all the Python/C++ classes which are - generated in the python::common::export_all() function in the wrapping code. -*/ - -OPM_EMBEDDED_MODULE(opm_embedded, module) { - python::common::export_all(module); -} - - -bool PythonInterp::exec(const std::string& python_code, py::module& context) { - py::bool_ def_result = false; - context.attr("result") = &def_result; - py::exec(python_code, py::globals() , py::dict(py::arg("context") = context)); - const auto& result = static_cast(context.attr("result")); - return result; -} - - - -bool PythonInterp::exec(const std::string& python_code, const Parser& parser, Deck& deck) { - if (!this->guard) - throw std::logic_error("Python interpreter not enabled"); - - auto context = py::module::import("opm_embedded"); - context.attr("deck") = &deck; - context.attr("parser") = &parser; - return this->exec(python_code, context); -} - - - -bool PythonInterp::exec(const std::string& python_code) { - if (!this->guard) - throw std::logic_error("Python interpreter not enabled"); - - auto context = py::module::import("opm_embedded"); - return this->exec(python_code, context); -} - -PythonInterp::PythonInterp(bool enable) { - if (enable) { - if (Py_IsInitialized()) - throw std::logic_error("An instance of the Python interpreter is already running"); - - this->guard = std::make_unique(); - } -} - -} -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Python/PythonInterp.hpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Python/PythonInterp.hpp deleted file mode 100644 index e8b4a28a82..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Python/PythonInterp.hpp +++ /dev/null @@ -1,95 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - - -#ifndef PYTHON_INTERP -#define PYTHON_INTERP - -#include -#include -#include - -#include -#include -#include -#include - - -#ifdef EMBEDDED_PYTHON - -#include -namespace py = pybind11; -#endif - - - -namespace Opm { - -#ifdef EMBEDDED_PYTHON -class Parser; -class Deck; - - -class __attribute__ ((visibility("hidden"))) PythonInterp { -public: - explicit PythonInterp(bool enable); - bool exec(const std::string& python_code); - bool exec(const std::string& python_code, const Parser& parser, Deck& deck); - static bool supported() { return true; }; - explicit operator bool() const { return bool(this->guard); } -private: - void load_module(const std::string& python_file); - bool exec(const std::string& python_code, py::module& context); - - std::unique_ptr guard; -}; - - -#else - -class PythonInterp { -public: - explicit PythonInterp(bool enable) { - if (enable) - this->fail(); - } - - bool exec(const std::string&) { - return this->fail(); - }; - - bool exec(const std::string&, const Parser&, Deck&) { - return this->fail(); - } - - bool exec(const Action::PyAction&, EclipseState&, Schedule&, std::size_t, SummaryState& ) { - return this->fail(); - } - - static bool supported() { return false; }; - explicit operator bool() const { return false; } -private: - bool fail() { throw std::logic_error("The current opm code has been built without Python support;"); } -}; - -#endif - -} - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Units/Dimension.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Units/Dimension.cpp deleted file mode 100644 index a37edd4518..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Units/Dimension.cpp +++ /dev/null @@ -1,96 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include - -#include -#include -#include - -namespace Opm { - - Dimension::Dimension() - { - this->m_SIfactor = 1.0; - this->m_SIoffset = 0.0; - - } - - Dimension::Dimension(double SIfactor, - double SIoffset) - { - m_SIfactor = SIfactor; - m_SIoffset = SIoffset; - } - - Dimension Dimension::serializeObject() - { - return Dimension(1.0, 2.0); - } - - double Dimension::getSIScaling() const { - if (!std::isfinite(m_SIfactor)) - throw std::logic_error("The DeckItem contains a field with a context dependent unit. " - "Use getData< double >() and convert the returned value manually!"); - return m_SIfactor; - } - - double Dimension::getSIOffset() const { - return m_SIoffset; - } - - double Dimension::convertRawToSi(double rawValue) const { - if (!std::isfinite(m_SIfactor)) - throw std::logic_error("The DeckItem contains a field with a context dependent unit. " - "Use getData< double >() and convert the returned value manually!"); - - return rawValue*m_SIfactor + m_SIoffset; - } - - double Dimension::convertSiToRaw(double siValue) const { - if (!std::isfinite(m_SIfactor)) - throw std::logic_error("The DeckItem contains a field with a context dependent unit. " - "Use getData< double >() and convert the returned value manually!"); - - return (siValue - m_SIoffset)/m_SIfactor; - } - - - // only dimensions with zero offset are compositable... - bool Dimension::isCompositable() const - { return m_SIoffset == 0.0; } - - - bool Dimension::equal(const Dimension& other) const { - return *this == other; - } - - bool Dimension::operator==( const Dimension& rhs ) const { - if( this->m_SIfactor == rhs.m_SIfactor - && this->m_SIoffset == rhs.m_SIoffset ) return true; - - return std::isnan( this->m_SIfactor ) && std::isnan( rhs.m_SIfactor ); - } - - bool Dimension::operator!=( const Dimension& rhs ) const { - return !(*this == rhs ); - } -} - - diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Units/UnitSystem.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Units/UnitSystem.cpp deleted file mode 100644 index 1b5401905c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Units/UnitSystem.cpp +++ /dev/null @@ -1,1306 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - - -#include -#include - -#include -#include -#include -#include - -#include -#include - - -namespace Opm { - -namespace { - /* - * It is VERY important that the measure enum has the same order as the - * metric and field arrays. C++ does not support designated initializers, so - * this cannot be done in a declaration-order independent matter. - */ - - // ================================================================= - // METRIC Unit Conventions - - static const double from_metric_offset[] = { - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - Metric::TemperatureOffset, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - }; - - static const double to_metric[] = { - 1, - 1 / Metric::Length, - 1 / Metric::Time, - 1 / Metric::Density, - 1 / Metric::Pressure, - 1 / Metric::AbsoluteTemperature, - 1 / Metric::Temperature, - 1 / Metric::Viscosity, - 1 / Metric::Permeability, - 1 / Metric::LiquidSurfaceVolume, - 1 / Metric::GasSurfaceVolume, - 1 / Metric::ReservoirVolume, - 1 / Metric::GeomVolume, - 1 / ( Metric::LiquidSurfaceVolume / Metric::Time ), - 1 / ( Metric::GasSurfaceVolume / Metric::Time ), - 1 / ( Metric::ReservoirVolume / Metric::Time ), - 1 / ( Metric::GeomVolume / Metric::Time ), - 1 / Metric::Transmissibility, - 1 / (Metric::Permeability * Metric::Length), - 1 / Metric::Mass, - 1 / ( Metric::Mass / Metric::Time ), - 1, /* gas-oil ratio */ - 1, /* oil-gas ratio */ - 1, /* water cut */ - 1, /* gas formation volume factor */ - 1, /* oil formation volume factor */ - 1, /* water formation volume factor */ - 1, /* gas inverse formation volume factor */ - 1, /* oil inverse formation volume factor */ - 1, /* water inverse formation volume factor */ - 1 / (Metric::LiquidSurfaceVolume / Metric::Time / Metric::Pressure), - 1 / (Metric::GasSurfaceVolume / Metric::Time / Metric::Pressure), - 1 / Metric::Energy, - 1 / (Metric::Pressure / Opm::unit::square(Metric::GeomVolume / Metric::Time)), - }; - - static const double from_metric[] = { - 1, - Metric::Length, - Metric::Time, - Metric::Density, - Metric::Pressure, - Metric::AbsoluteTemperature, - Metric::Temperature, - Metric::Viscosity, - Metric::Permeability, - Metric::LiquidSurfaceVolume, - Metric::GasSurfaceVolume, - Metric::ReservoirVolume, - Metric::GeomVolume, - Metric::LiquidSurfaceVolume / Metric::Time, - Metric::GasSurfaceVolume / Metric::Time, - Metric::ReservoirVolume / Metric::Time, - Metric::GeomVolume / Metric::Time, - Metric::Transmissibility, - Metric::Permeability * Metric::Length, - Metric::Mass, - Metric::Mass / Metric::Time, - 1, /* gas-oil ratio */ - 1, /* oil-gas ratio */ - 1, /* water cut */ - 1, /* gas formation volume factor */ - 1, /* oil formation volume factor */ - 1, /* water formation volume factor */ - 1, /* gas inverse formation volume factor */ - 1, /* oil inverse formation volume factor */ - 1, /* water inverse formation volume factor */ - Metric::LiquidSurfaceVolume / Metric::Time / Metric::Pressure, - Metric::GasSurfaceVolume / Metric::Time / Metric::Pressure, - Metric::Energy, - Metric::Pressure / Opm::unit::square(Metric::GeomVolume / Metric::Time), - }; - - static constexpr const char* metric_names[static_cast(UnitSystem::measure::_count)] = { - "", - "M", - "DAYS", - "KG/M3", - "BARSA", - "K", - "C", - "CP", - "MD", - "SM3", - "SM3", - "RM3", - "SM3", // Should possibly be RM3 - "SM3/DAY", - "SM3/DAY", - "RM3/DAY", - "SM3/DAY", // Should possibly be RM3/DAY - "CPR3/DAY/BARS", - "MDM", - "KG", - "KG/DAY", - "SM3/SM3", - "SM3/SM3", - "SM3/SM3", - "RM3/SM3", /* gas formation volume factor */ - "RM3/SM3", /* oil formation volume factor */ - "RM3/SM3", /* water formation volume factor */ - "SM3/RM3", /* gas inverse formation volume factor */ - "SM3/RM3", /* oil inverse formation volume factor */ - "SM3/RM3", /* water inverse formation volume factor */ - "SM3/DAY/BARS", - "SM3/DAY/BARS", - "KJ", /* energy */ - "BARS/(RM3/DAY)2", /* ICD strength parameter */ - }; - - static_assert( - metric_names[static_cast(UnitSystem::measure::_count) - 1] != nullptr, - "Name missing from ::metric_names" - ); - - // ================================================================= - // FIELD Unit Conventions - - static const double from_field_offset[] = { - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - Field::TemperatureOffset, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - }; - - static const double to_field[] = { - 1, - 1 / Field::Length, - 1 / Field::Time, - 1 / Field::Density, - 1 / Field::Pressure, - 1 / Field::AbsoluteTemperature, - 1 / Field::Temperature, - 1 / Field::Viscosity, - 1 / Field::Permeability, - 1 / Field::LiquidSurfaceVolume, - 1 / Field::GasSurfaceVolume, - 1 / Field::ReservoirVolume, - 1 / Field::GeomVolume, - 1 / ( Field::LiquidSurfaceVolume / Field::Time ), - 1 / ( Field::GasSurfaceVolume / Field::Time ), - 1 / ( Field::ReservoirVolume / Field::Time ), - 1 / ( Field::GeomVolume / Field::Time ), - 1 / Field::Transmissibility, - 1 / (Field::Permeability * Field::Length), - 1 / Field::Mass, - 1 / ( Field::Mass / Field::Time ), - 1 / ( Field::GasSurfaceVolume / Field::LiquidSurfaceVolume ), /* gas-oil ratio */ - 1 / ( Field::LiquidSurfaceVolume / Field::GasSurfaceVolume ), /* oil-gas ratio */ - 1, /* water cut */ - 1 / (Field::ReservoirVolume / Field::GasSurfaceVolume), /* gas formation volume factor */ - 1, /* oil formation volume factor */ - 1, /* water formation volume factor */ - 1 / (Field::GasSurfaceVolume / Field::ReservoirVolume), /* gas inverse formation volume factor */ - 1, /* oil inverse formation volume factor */ - 1, /* water inverse formation volume factor */ - 1 / (Field::LiquidSurfaceVolume / Field::Time / Field::Pressure), - 1 / (Field::GasSurfaceVolume / Field::Time / Field::Pressure), - 1 / Field::Energy, - 1 / (Field::Pressure / Opm::unit::square(Field::GeomVolume / Field::Time)), - }; - - static const double from_field[] = { - 1, - Field::Length, - Field::Time, - Field::Density, - Field::Pressure, - Field::AbsoluteTemperature, - Field::Temperature, - Field::Viscosity, - Field::Permeability, - Field::LiquidSurfaceVolume, - Field::GasSurfaceVolume, - Field::ReservoirVolume, - Field::GeomVolume, - Field::LiquidSurfaceVolume / Field::Time, - Field::GasSurfaceVolume / Field::Time, - Field::ReservoirVolume / Field::Time, - Field::GeomVolume / Field::Time, - Field::Transmissibility, - Field::Permeability * Field::Length, - Field::Mass, - Field::Mass / Field::Time, - Field::GasSurfaceVolume / Field::LiquidSurfaceVolume, /* gas-oil ratio */ - Field::LiquidSurfaceVolume / Field::GasSurfaceVolume, /* oil-gas ratio */ - 1, /* water cut */ - Field::ReservoirVolume / Field::GasSurfaceVolume, /* gas formation volume factor */ - 1, /* oil formation volume factor */ - 1, /* water formation volume factor */ - Field::GasSurfaceVolume / Field::ReservoirVolume, /* gas inverse formation volume factor */ - 1, /* oil inverse formation volume factor */ - 1, /* water inverse formation volume factor */ - Field::LiquidSurfaceVolume / Field::Time / Field::Pressure, - Field::GasSurfaceVolume / Field::Time / Field::Pressure, - Field::Energy, - Field::Pressure / Opm::unit::square(Field::GeomVolume / Field::Time), - }; - - static constexpr const char* field_names[static_cast(UnitSystem::measure::_count)] = { - "", - "FT", - "DAYS", - "LB/FT3", - "PSIA", - "R", - "F", - "CP", - "MD", - "STB", - "MSCF", - "RB", - "FT3", // Should possibly be RFT3 - "STB/DAY", - "MSCF/DAY", - "RB/DAY", - "FT3/DAY", // Should possibly be RFT3/DAY - "CPRB/DAY/PSI", - "MDFT", - "LB", - "LB/DAY", - "MSCF/STB", - "STB/MSCF", - "STB/STB", - "RB/MSCF", /* gas formation volume factor */ - "RB/STB", /* oil formation volume factor */ - "RB/STB", /* water formation volume factor */ - "MSCF/RB", /* gas inverse formation volume factor */ - "STB/RB", /* oil inverse formation volume factor */ - "STB/RB", /* water inverse formation volume factor */ - "STB/DAY/PSIA", - "MSCF/DAY/PSIA", - "BTU", /* energy */ - "PSI/(RFT3/DAY)2", /* ICD strength parameter */ - }; - - static_assert( - field_names[static_cast(UnitSystem::measure::_count) - 1] != nullptr, - "Name missing from ::field_names" - ); - - // ================================================================= - // LAB Unit Conventions - - static const double from_lab_offset[] = { - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - Lab::TemperatureOffset, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - }; - - static const double to_lab[] = { - 1, - 1 / Lab::Length, - 1 / Lab::Time, - 1 / Lab::Density, - 1 / Lab::Pressure, - 1 / Lab::AbsoluteTemperature, - 1 / Lab::Temperature, - 1 / Lab::Viscosity, - 1 / Lab::Permeability, - 1 / Lab::LiquidSurfaceVolume, - 1 / Lab::GasSurfaceVolume, - 1 / Lab::ReservoirVolume, - 1 / Lab::GeomVolume, - 1 / ( Lab::LiquidSurfaceVolume / Lab::Time ), - 1 / ( Lab::GasSurfaceVolume / Lab::Time ), - 1 / ( Lab::ReservoirVolume / Lab::Time ), - 1 / ( Lab::GeomVolume / Lab::Time ), - 1 / Lab::Transmissibility, - 1 / (Lab::Permeability * Lab::Length), - 1 / Lab::Mass, - 1 / ( Lab::Mass / Lab::Time ), - 1 / Lab::GasDissolutionFactor, /* gas-oil ratio */ - 1 / Lab::OilDissolutionFactor, /* oil-gas ratio */ - 1, /* water cut */ - 1, /* gas formation volume factor */ - 1, /* oil formation volume factor */ - 1, /* water formation volume factor */ - 1, /* gas inverse formation volume factor */ - 1, /* oil inverse formation volume factor */ - 1, /* water inverse formation volume factor */ - 1 / (Lab::LiquidSurfaceVolume / Lab::Time / Lab::Pressure), - 1 / (Lab::GasSurfaceVolume / Lab::Time / Lab::Pressure), - 1 / Lab::Energy, - 1 / (Lab::Pressure / Opm::unit::square(Lab::GeomVolume / Lab::Time)), - }; - - static const double from_lab[] = { - 1, - Lab::Length, - Lab::Time, - Lab::Density, - Lab::Pressure, - Lab::AbsoluteTemperature, - Lab::Temperature, - Lab::Viscosity, - Lab::Permeability, - Lab::LiquidSurfaceVolume, - Lab::GasSurfaceVolume, - Lab::ReservoirVolume, - Lab::GeomVolume, - Lab::LiquidSurfaceVolume / Lab::Time, - Lab::GasSurfaceVolume / Lab::Time, - Lab::ReservoirVolume / Lab::Time, - Lab::GeomVolume / Lab::Time, - Lab::Transmissibility, - Lab::Permeability * Lab::Length, - Lab::Mass, - Lab::Mass / Lab::Time, - Lab::GasDissolutionFactor, /* gas-oil ratio */ - Lab::OilDissolutionFactor, /* oil-gas ratio */ - 1, /* water cut */ - 1, /* gas formation volume factor */ - 1, /* oil formation volume factor */ - 1, /* water formation volume factor */ - 1, /* gas inverse formation volume factor */ - 1, /* oil inverse formation volume factor */ - 1, /* water inverse formation volume factor */ - Lab::LiquidSurfaceVolume / Lab::Time / Lab::Pressure, - Lab::GasSurfaceVolume / Lab::Time / Lab::Pressure, - Lab::Energy, - Lab::Pressure / Opm::unit::square(Lab::GeomVolume / Lab::Time), - }; - - static constexpr const char* lab_names[static_cast(UnitSystem::measure::_count)] = { - "", - "CM", - "HRS", - "G/CC", - "ATM", - "K", - "C", - "CP", - "MD", - "SCC", - "SCC", - "RCC", - "SCC", // Should possibly be RCC - "SCC/HR", - "SCC/HR", - "RCC/HR", - "SCC/HR", // Should possibly be RCC/HR - "CPRCC/HR/ATM", - "MDCC", - "G", - "G/HR", - "SCC/SCC", - "SCC/SCC", - "SCC/SCC", - "RCC/SCC", /* gas formation volume factor */ - "RCC/SCC", /* oil formation volume factor */ - "RCC/SCC", /* water formation volume factor */ - "SCC/RCC", /* gas formation volume factor */ - "SCC/RCC", /* oil inverse formation volume factor */ - "SCC/RCC", /* water inverse formation volume factor */ - "SCC/HR/ATM", - "SCC/HR/ATM", - "J", /* energy */ - "ATM/(RCC/H)2", /* ICD strength parameter */ - }; - - static_assert( - lab_names[static_cast(UnitSystem::measure::_count) - 1] != nullptr, - "Name missing from ::lab_names" - ); - - // ================================================================= - // PVT-M Unit Conventions - - static const double from_pvt_m_offset[] = { - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - PVT_M::TemperatureOffset, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - }; - - static const double to_pvt_m[] = { - 1, - 1 / PVT_M::Length, - 1 / PVT_M::Time, - 1 / PVT_M::Density, - 1 / PVT_M::Pressure, - 1 / PVT_M::AbsoluteTemperature, - 1 / PVT_M::Temperature, - 1 / PVT_M::Viscosity, - 1 / PVT_M::Permeability, - 1 / PVT_M::LiquidSurfaceVolume, - 1 / PVT_M::GasSurfaceVolume, - 1 / PVT_M::ReservoirVolume, - 1 / PVT_M::GeomVolume, - 1 / ( PVT_M::LiquidSurfaceVolume / PVT_M::Time ), - 1 / ( PVT_M::GasSurfaceVolume / PVT_M::Time ), - 1 / ( PVT_M::ReservoirVolume / PVT_M::Time ), - 1 / ( PVT_M::GeomVolume / PVT_M::Time ), - 1 / PVT_M::Transmissibility, - 1 / (PVT_M::Permeability * PVT_M::Length), - 1 / PVT_M::Mass, - 1 / ( PVT_M::Mass / PVT_M::Time ), - 1 / (PVT_M::GasSurfaceVolume / PVT_M::LiquidSurfaceVolume), // Rs - 1 / (PVT_M::LiquidSurfaceVolume / PVT_M::GasSurfaceVolume), // Rv - 1, /* water cut */ - 1 / (PVT_M::ReservoirVolume / PVT_M::GasSurfaceVolume), /* Bg */ - 1 / (PVT_M::ReservoirVolume / PVT_M::LiquidSurfaceVolume), /* Bo */ - 1 / (PVT_M::ReservoirVolume / PVT_M::LiquidSurfaceVolume), /* Bw */ - 1 / (PVT_M::GasSurfaceVolume / PVT_M::ReservoirVolume), /* 1/Bg */ - 1 / (PVT_M::LiquidSurfaceVolume / PVT_M::ReservoirVolume), /* 1/Bo */ - 1 / (PVT_M::LiquidSurfaceVolume / PVT_M::ReservoirVolume), /* 1/Bw */ - 1 / (PVT_M::LiquidSurfaceVolume / PVT_M::Time / PVT_M::Pressure), - 1 / (PVT_M::GasSurfaceVolume / PVT_M::Time / PVT_M::Pressure), - 1 / PVT_M::Energy, - 1 / (PVT_M::Pressure / Opm::unit::square(PVT_M::GeomVolume / PVT_M::Time)), - }; - - static const double from_pvt_m[] = { - 1, - PVT_M::Length, - PVT_M::Time, - PVT_M::Density, - PVT_M::Pressure, - PVT_M::AbsoluteTemperature, - PVT_M::Temperature, - PVT_M::Viscosity, - PVT_M::Permeability, - PVT_M::LiquidSurfaceVolume, - PVT_M::GasSurfaceVolume, - PVT_M::ReservoirVolume, - PVT_M::GeomVolume, - PVT_M::LiquidSurfaceVolume / PVT_M::Time, - PVT_M::GasSurfaceVolume / PVT_M::Time, - PVT_M::ReservoirVolume / PVT_M::Time, - PVT_M::GeomVolume / PVT_M::Time, - PVT_M::Transmissibility, - PVT_M::Permeability * PVT_M::Length, - PVT_M::Mass, - PVT_M::Mass / PVT_M::Time, - PVT_M::GasSurfaceVolume / PVT_M::LiquidSurfaceVolume, // Rs - PVT_M::LiquidSurfaceVolume / PVT_M::GasSurfaceVolume, // Rv - 1, /* water cut */ - PVT_M::ReservoirVolume / PVT_M::GasSurfaceVolume, /* Bg */ - PVT_M::ReservoirVolume / PVT_M::LiquidSurfaceVolume, /* Bo */ - PVT_M::ReservoirVolume / PVT_M::LiquidSurfaceVolume, /* Bw */ - PVT_M::GasSurfaceVolume / PVT_M::ReservoirVolume, /* 1/Bg */ - PVT_M::LiquidSurfaceVolume / PVT_M::ReservoirVolume, /* 1/Bo */ - PVT_M::LiquidSurfaceVolume / PVT_M::ReservoirVolume, /* 1/Bw */ - PVT_M::LiquidSurfaceVolume / PVT_M::Time / PVT_M::Pressure, - PVT_M::GasSurfaceVolume / PVT_M::Time / PVT_M::Pressure, - PVT_M::Energy, - PVT_M::Pressure / Opm::unit::square(PVT_M::GeomVolume / PVT_M::Time), - }; - - static constexpr const char* pvt_m_names[static_cast(UnitSystem::measure::_count)] = { - "", - "M", - "DAYS", - "KG/M3", - "ATM", - "K", - "C", - "CP", - "MD", - "SM3", - "SM3", - "RM3", - "SM3", // Should possibly be RM3 - "SM3/DAY", - "SM3/DAY", - "RM3/DAY", - "SM3/DAY", // Should possibly be SM3/DAY - "CPR3/DAY/ATM", - "MDM", - "KG", - "KG/DAY", - "SM3/SM3", - "SM3/SM3", - "SM3/SM3", - "RM3/SM3", /* gas formation volume factor */ - "RM3/SM3", /* oil formation volume factor */ - "RM3/SM3", /* water formation volume factor */ - "SM3/RM3", /* gas inverse formation volume factor */ - "SM3/RM3", /* oil inverse formation volume factor */ - "SM3/RM3", /* water inverse formation volume factor */ - "SM3/DAY/ATM", - "SM3/DAY/ATM", - "KJ" /* energy */, - "ATM/(RM3/DAY)2" /* ICD strength parameter */, - }; - - static_assert( - pvt_m_names[static_cast(UnitSystem::measure::_count) - 1] != nullptr, - "Name missing from ::pvt_m_names" - ); - - // ================================================================= - // INPUT Unit Conventions - - static const double from_input_offset[] = { - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - }; - - static const double to_input[] = { - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - }; - - static const double from_input[] = { - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - }; - - static constexpr const char* input_names[static_cast(UnitSystem::measure::_count)] = { - "", - "M", - "DAY", - "KG/M3", - "BARSA", - "K", - "C", - "CP", - "MD", - "SM3", - "SM3", - "RM3", - "SM3", - "SM3/DAY", - "SM3/DAY", - "RM3/DAY", - "SM3/DAY", - "CPR3/DAY/BARS", - "MDM", - "KG", - "KG/DAY", - "SM3/SM3", - "SM3/SM3", - "SM3/SM3", - "RM3/SM3", /* gas formation volume factor */ - "RM3/SM3", /* oil formation volume factor */ - "RM3/SM3", /* water formation volume factor */ - "SM3/RM3", /* gas inverse formation volume factor */ - "SM3/RM3", /* oil inverse formation volume factor */ - "SM3/RM3", /* water inverse formation volume factor */ - "SM3/DAY/BARS", - "SM3/DAY/BARS", - "KJ", /* energy */ - "BARS/(RM3/DAY)2", /* ICD strength parameter */ - }; - - static_assert( - input_names[static_cast(UnitSystem::measure::_count) - 1] != nullptr, - "Name missing from ::input_names" - ); - -} // namespace Anonymous - - UnitSystem::UnitSystem(const UnitType unit) : - m_unittype( unit ) - { - init(); - } - - UnitSystem UnitSystem::serializeObject() - { - return UnitSystem(UnitType::UNIT_TYPE_METRIC); - } - - void UnitSystem::initINPUT() { - this->m_name = "Input"; - this->measure_table_from_si = to_input; - this->measure_table_to_si = from_input; - this->measure_table_to_si_offset = from_input_offset; - this->unit_name_table = input_names; - - this->addDimension("1" , 1.0); - this->addDimension("Unit" , 1.0); - this->addDimension("Pressure" , 1.0); - this->addDimension("Temperature", 1.0); - this->addDimension("AbsoluteTemperature", 1.0, 0.0); - this->addDimension("Length" , 1.0); - this->addDimension("Time" , 1.0); - this->addDimension("Mass" , 1.0); - this->addDimension("Permeability", 1.0); - this->addDimension("Transmissibility", 1.0); - this->addDimension("GasDissolutionFactor", 1.0); - this->addDimension("OilDissolutionFactor", 1.0); - this->addDimension("LiquidSurfaceVolume", 1.0); - this->addDimension("GasSurfaceVolume" , 1.0); - this->addDimension("ReservoirVolume", 1.0); - this->addDimension("GeometricVolume", 1.0 ); - this->addDimension("Density" , 1.0); - this->addDimension("PolymerDensity", 1.0); - this->addDimension("FoamDensity", 1.0); - this->addDimension("FoamSurfactantConcentration", 1.0); - this->addDimension("Salinity", 1.0); - this->addDimension("Viscosity" , 1.0); - this->addDimension("Timestep" , 1.0); - this->addDimension("SurfaceTension" , 1.0); - this->addDimension("Energy", 1.0); - this->addDimension("ContextDependent", 1.0); - } - - - void UnitSystem::initPVT_M() { - this->m_name = "PVT-M"; - this->measure_table_from_si = to_pvt_m; - this->measure_table_to_si = from_pvt_m; - this->measure_table_to_si_offset = from_pvt_m_offset; - this->unit_name_table = pvt_m_names; - - this->addDimension("1" , 1.0); - this->addDimension("Unit" , 1.0); - this->addDimension("Pressure" , PVT_M::Pressure ); - this->addDimension("Temperature", PVT_M::Temperature, PVT_M::TemperatureOffset); - this->addDimension("AbsoluteTemperature", PVT_M::AbsoluteTemperature); - this->addDimension("Length" , PVT_M::Length); - this->addDimension("Time" , PVT_M::Time ); - this->addDimension("Mass" , PVT_M::Mass ); - this->addDimension("Permeability", PVT_M::Permeability ); - this->addDimension("Transmissibility", PVT_M::Transmissibility ); - this->addDimension("GasDissolutionFactor", PVT_M::GasDissolutionFactor); - this->addDimension("OilDissolutionFactor", PVT_M::OilDissolutionFactor); - this->addDimension("LiquidSurfaceVolume", PVT_M::LiquidSurfaceVolume ); - this->addDimension("GasSurfaceVolume" , PVT_M::GasSurfaceVolume ); - this->addDimension("ReservoirVolume", PVT_M::ReservoirVolume ); - this->addDimension("GeometricVolume", PVT_M::GeomVolume ); - this->addDimension("Density" , PVT_M::Density ); - this->addDimension("PolymerDensity", PVT_M::PolymerDensity); - this->addDimension("FoamDensity", PVT_M::FoamDensity); - this->addDimension("FoamSurfactantConcentration", PVT_M::FoamSurfactantConcentration); - this->addDimension("Salinity", PVT_M::Salinity); - this->addDimension("Viscosity" , PVT_M::Viscosity); - this->addDimension("Timestep" , PVT_M::Timestep); - this->addDimension("SurfaceTension" , PVT_M::SurfaceTension); - this->addDimension("Energy", PVT_M::Energy); - this->addDimension("ContextDependent", std::numeric_limits::quiet_NaN()); - } - - - void UnitSystem::initLAB() { - this->m_name = "Lab"; - this->measure_table_from_si = to_lab; - this->measure_table_to_si = from_lab; - this->measure_table_to_si_offset = from_lab_offset; - this->unit_name_table = lab_names; - - this->addDimension("1" , 1.0); - this->addDimension("Unit" , 1.0); - this->addDimension("Pressure", Lab::Pressure ); - this->addDimension("Temperature", Lab::Temperature, Lab::TemperatureOffset); - this->addDimension("AbsoluteTemperature", Lab::AbsoluteTemperature); - this->addDimension("Length", Lab::Length); - this->addDimension("Time" , Lab::Time); - this->addDimension("Mass", Lab::Mass); - this->addDimension("Permeability", Lab::Permeability ); - this->addDimension("Transmissibility", Lab::Transmissibility ); - this->addDimension("GasDissolutionFactor" , Lab::GasDissolutionFactor); - this->addDimension("OilDissolutionFactor", Lab::OilDissolutionFactor); - this->addDimension("LiquidSurfaceVolume", Lab::LiquidSurfaceVolume ); - this->addDimension("GasSurfaceVolume", Lab::GasSurfaceVolume ); - this->addDimension("ReservoirVolume", Lab::ReservoirVolume ); - this->addDimension("GeometricVolume", Lab::GeomVolume ); - this->addDimension("Density", Lab::Density ); - this->addDimension("PolymerDensity", Lab::PolymerDensity); - this->addDimension("FoamDensity", Lab::FoamDensity); - this->addDimension("FoamSurfactantConcentration", Lab::FoamSurfactantConcentration); - this->addDimension("Salinity", Lab::Salinity); - this->addDimension("Viscosity", Lab::Viscosity); - this->addDimension("Timestep", Lab::Timestep); - this->addDimension("SurfaceTension" , Lab::SurfaceTension); - this->addDimension("Energy", Lab::Energy); - this->addDimension("ContextDependent", std::numeric_limits::quiet_NaN()); - } - - - - void UnitSystem::initMETRIC() { - this->m_name = "Metric"; - this->measure_table_from_si = to_metric; - this->measure_table_to_si = from_metric; - this->measure_table_to_si_offset = from_metric_offset; - this->unit_name_table = metric_names; - - this->addDimension("1" , 1.0); - this->addDimension("Unit" , 1.0); - this->addDimension("Pressure" , Metric::Pressure ); - this->addDimension("Temperature", Metric::Temperature, Metric::TemperatureOffset); - this->addDimension("AbsoluteTemperature", Metric::AbsoluteTemperature); - this->addDimension("Length" , Metric::Length); - this->addDimension("Time" , Metric::Time ); - this->addDimension("Mass" , Metric::Mass ); - this->addDimension("Permeability", Metric::Permeability ); - this->addDimension("Transmissibility", Metric::Transmissibility ); - this->addDimension("GasDissolutionFactor", Metric::GasDissolutionFactor); - this->addDimension("OilDissolutionFactor", Metric::OilDissolutionFactor); - this->addDimension("LiquidSurfaceVolume", Metric::LiquidSurfaceVolume ); - this->addDimension("GasSurfaceVolume" , Metric::GasSurfaceVolume ); - this->addDimension("ReservoirVolume", Metric::ReservoirVolume ); - this->addDimension("GeometricVolume", Metric::GeomVolume ); - this->addDimension("Density" , Metric::Density ); - this->addDimension("PolymerDensity", Metric::PolymerDensity); - this->addDimension("FoamDensity", Metric::FoamDensity); - this->addDimension("FoamSurfactantConcentration", Metric::FoamSurfactantConcentration); - this->addDimension("Salinity", Metric::Salinity); - this->addDimension("Viscosity" , Metric::Viscosity); - this->addDimension("Timestep" , Metric::Timestep); - this->addDimension("SurfaceTension" , Metric::SurfaceTension); - this->addDimension("Energy", Metric::Energy); - this->addDimension("ContextDependent", std::numeric_limits::quiet_NaN()); - } - - void UnitSystem::initFIELD() { - m_name = "Field"; - this->measure_table_from_si = to_field; - this->measure_table_to_si = from_field; - this->measure_table_to_si_offset = from_field_offset; - this->unit_name_table = field_names; - - this->addDimension("1" , 1.0); - this->addDimension("Unit" , 1.0); - this->addDimension("Pressure", Field::Pressure ); - this->addDimension("Temperature", Field::Temperature, Field::TemperatureOffset); - this->addDimension("AbsoluteTemperature", Field::AbsoluteTemperature); - this->addDimension("Length", Field::Length); - this->addDimension("Time" , Field::Time); - this->addDimension("Mass", Field::Mass); - this->addDimension("Permeability", Field::Permeability ); - this->addDimension("Transmissibility", Field::Transmissibility ); - this->addDimension("GasDissolutionFactor" , Field::GasDissolutionFactor); - this->addDimension("OilDissolutionFactor", Field::OilDissolutionFactor); - this->addDimension("LiquidSurfaceVolume", Field::LiquidSurfaceVolume ); - this->addDimension("GasSurfaceVolume", Field::GasSurfaceVolume ); - this->addDimension("ReservoirVolume", Field::ReservoirVolume ); - this->addDimension("GeometricVolume", Field::GeomVolume ); - this->addDimension("Density", Field::Density ); - this->addDimension("PolymerDensity", Field::PolymerDensity); - this->addDimension("FoamDensity", Field::FoamDensity); - this->addDimension("FoamSurfactantConcentration", Field::FoamSurfactantConcentration); - this->addDimension("Salinity", Field::Salinity); - this->addDimension("Viscosity", Field::Viscosity); - this->addDimension("Timestep", Field::Timestep); - this->addDimension("SurfaceTension" , Field::SurfaceTension); - this->addDimension("Energy", Field::Energy); - this->addDimension("ContextDependent", std::numeric_limits::quiet_NaN()); - } - - - namespace { - - int to_ecl_id(UnitSystem::UnitType unit_type) { - if (unit_type == UnitSystem::UnitType::UNIT_TYPE_METRIC) - return 1; - - if (unit_type == UnitSystem::UnitType::UNIT_TYPE_FIELD) - return 2; - - if (unit_type == UnitSystem::UnitType::UNIT_TYPE_LAB) - return 3; - - if (unit_type == UnitSystem::UnitType::UNIT_TYPE_PVT_M) - return 4; - - throw std::invalid_argument("The nonstandard unit system does not have a corresponding ecl id"); - } - - UnitSystem::UnitType from_ecl_id(int ecl_id) { - if (ecl_id == 1) - return UnitSystem::UnitType::UNIT_TYPE_METRIC; - - if (ecl_id == 2) - return UnitSystem::UnitType::UNIT_TYPE_FIELD; - - if (ecl_id == 3) - return UnitSystem::UnitType::UNIT_TYPE_LAB; - - if (ecl_id == 4) - return UnitSystem::UnitType::UNIT_TYPE_PVT_M; - - throw std::invalid_argument("The integer value: " + std::to_string(ecl_id) + " is not recogmized as a valid Eclipse unit ID"); - } - - UnitSystem::UnitType fromDeckName(const std::string &deck_name) { - if (deck_name == "FIELD") - return UnitSystem::UnitType::UNIT_TYPE_FIELD; - - if (deck_name == "METRIC") - return UnitSystem::UnitType::UNIT_TYPE_METRIC; - - if (deck_name == "LAB") - return UnitSystem::UnitType::UNIT_TYPE_LAB; - - if (deck_name == "PVT-M") - return UnitSystem::UnitType::UNIT_TYPE_PVT_M; - - throw std::invalid_argument("Unit string: " + deck_name + - " not recognized "); - } - } - - bool UnitSystem::valid_name(const std::string &deck_name) { - if (deck_name == "FIELD") - return true; - - if (deck_name == "METRIC") - return true; - - if (deck_name == "LAB") - return true; - - if (deck_name == "PVT-M") - return true; - - return false; - } - - std::string UnitSystem::deck_name() const { - switch( this->m_unittype) { - case(UnitType::UNIT_TYPE_METRIC): return "METRIC"; - case(UnitType::UNIT_TYPE_FIELD): return "FIELD"; - case(UnitType::UNIT_TYPE_LAB): return "LAB"; - case(UnitType::UNIT_TYPE_PVT_M): return "PVT-M"; - default: - throw std::invalid_argument("No valid deckname could be inferred"); - } - } - - - UnitSystem::UnitSystem(const std::string& deck_name) : - UnitSystem( fromDeckName(deck_name) ) - { - } - - - UnitSystem::UnitSystem(int ecl_id) : - UnitSystem(from_ecl_id(ecl_id)) - {} - - - int UnitSystem::ecl_id() const { - return to_ecl_id( this->m_unittype ); - } - - - bool UnitSystem::hasDimension(const std::string& dimension) const { - return (m_dimensions.find( dimension ) != m_dimensions.end()); - } - - - const Dimension& UnitSystem::getNewDimension(const std::string& dimension) { - if( !hasDimension( dimension ) ) - this->addDimension( dimension, this->parse( dimension ) ); - - return getDimension( dimension ); - } - - - const Dimension& UnitSystem::getDimension(const std::string& dimension) const { - auto iter = this->m_dimensions.find(dimension); - if (iter == this->m_dimensions.end()) - throw std::out_of_range("The dimension: '" + dimension + "' was not recognized"); - this->m_use_count++; - return iter->second; - } - - Dimension UnitSystem::getDimension(measure m) const { - double si_factor = this->measure_table_to_si[ static_cast< int >( m ) ]; - double si_offset = this->measure_table_to_si_offset[ static_cast( m ) ]; - return Dimension(si_factor, si_offset); - } - - - std::size_t UnitSystem::use_count() const { - return this->m_use_count; - } - - void UnitSystem::addDimension(const std::string& dimension , const Dimension& dim) { - this->m_dimensions[ dimension ] = std::move(dim); - } - - void UnitSystem::addDimension(const std::string& dimension , double SIfactor, double SIoffset) { - this->addDimension(dimension, Dimension(SIfactor, SIoffset)); - } - - const std::string& UnitSystem::getName() const { - return m_name; - } - - UnitSystem::UnitType UnitSystem::getType() const { - return m_unittype; - } - - - Dimension UnitSystem::parseFactor(const std::string& dimension) const { - std::vector dimensionList = split_string(dimension, '*'); - - double SIfactor = 1.0; - for( const auto& x : dimensionList ) { - auto dim = this->getDimension( x ); - - // all constituing dimension must be compositable. The - // only exception is if there is the "composite" dimension - // consists of exactly a single atomic dimension... - if (dimensionList.size() > 1 && !dim.isCompositable()) - throw std::invalid_argument("Composite dimensions currently cannot require a conversion offset"); - - SIfactor *= dim.getSIScaling(); - } - return Dimension( SIfactor ); - } - - Dimension UnitSystem::parse(const std::string& dimension) const { - const size_t divCount = std::count( dimension.begin() , dimension.end() , '/' ); - - if( divCount > 1 ) - throw std::invalid_argument("Dimension string can only have one division sign '/'"); - - const bool haveDivisor = divCount == 1; - if( !haveDivisor ) return this->parseFactor( dimension ); - - std::vector parts = split_string(dimension, '/'); - Dimension dividend = this->parseFactor( parts[0] ); - Dimension divisor = this->parseFactor( parts[1] ); - - if (dividend.getSIOffset() != 0.0 || divisor.getSIOffset() != 0.0) - throw std::invalid_argument("Composite dimensions cannot currently require a conversion offset"); - - return Dimension( dividend.getSIScaling() / divisor.getSIScaling() ); - } - - - bool UnitSystem::equal(const UnitSystem& other) const { - return *this == other; - } - - bool UnitSystem::operator==( const UnitSystem& rhs ) const { - return this->m_name == rhs.m_name - && this->m_unittype == rhs.m_unittype - && this->m_dimensions.size() == rhs.m_dimensions.size() - && std::equal( this->m_dimensions.begin(), - this->m_dimensions.end(), - rhs.m_dimensions.begin() ) - && this->measure_table_to_si_offset == rhs.measure_table_to_si_offset - && this->measure_table_from_si == rhs.measure_table_from_si - && this->measure_table_to_si == rhs.measure_table_to_si - && this->unit_name_table == rhs.unit_name_table; - } - - bool UnitSystem::operator!=( const UnitSystem& rhs ) const { - return !( *this == rhs ); - } - - double UnitSystem::from_si( measure m, double val ) const { - return - this->measure_table_from_si[ static_cast< int >( m ) ] - * (val - this->measure_table_to_si_offset[ static_cast< int >( m ) ]); - } - - double UnitSystem::to_si( measure m, double val ) const { - return - this->measure_table_to_si[ static_cast< int >( m ) ]*val - + this->measure_table_to_si_offset[ static_cast< int >( m ) ]; - } - - void UnitSystem::from_si( measure m, std::vector& data ) const { - double factor = this->measure_table_from_si[ static_cast< int >( m ) ]; - double offset = this->measure_table_to_si_offset[ static_cast< int >( m ) ]; - auto scale = [=](double x) { return (x - offset) * factor; }; - std::transform( data.begin() , data.end() , data.begin() , scale); - } - - - void UnitSystem::to_si( measure m, std::vector& data) const { - double factor = this->measure_table_to_si[ static_cast< int >( m ) ]; - double offset = this->measure_table_to_si_offset[ static_cast< int >( m ) ]; - auto scale = [=](double x) { return x * factor + offset; }; - std::transform( data.begin() , data.end() , data.begin() , scale); - } - - const char* UnitSystem::name( measure m ) const { - return this->unit_name_table[ static_cast< int >( m ) ]; - } - - - UnitSystem UnitSystem::newMETRIC() { - UnitSystem system( UnitType::UNIT_TYPE_METRIC ); - return system; - } - - UnitSystem UnitSystem::newFIELD() { - UnitSystem system( UnitType::UNIT_TYPE_FIELD ); - return system; - } - - - UnitSystem UnitSystem::newLAB() { - UnitSystem system( UnitType::UNIT_TYPE_LAB ); - return system; - } - - UnitSystem UnitSystem::newPVT_M() { - UnitSystem system( UnitType::UNIT_TYPE_PVT_M ); - return system; - } - - UnitSystem UnitSystem::newINPUT() { - UnitSystem system( UnitType::UNIT_TYPE_INPUT ); - return system; - } - - void UnitSystem::init() - { - switch(m_unittype) { - case(UnitType::UNIT_TYPE_METRIC): - this->initMETRIC(); - break; - - case(UnitType::UNIT_TYPE_FIELD): - this->initFIELD(); - break; - - case(UnitType::UNIT_TYPE_LAB): - this->initLAB(); - break; - - case(UnitType::UNIT_TYPE_PVT_M): - this->initPVT_M(); - break; - - case(UnitType::UNIT_TYPE_INPUT): - this->initINPUT(); - break; - - default: - throw std::runtime_error("Tried to construct UnitSystem with unknown unit family."); - break; - }; - } - -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Utility/Functional.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Utility/Functional.cpp deleted file mode 100644 index efa60b910d..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Utility/Functional.cpp +++ /dev/null @@ -1,67 +0,0 @@ -/* - Copyright 2016 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ -#include - -namespace Opm { -namespace fun { - - iota::iota( int fst, int lst ) : first( fst ), last( lst ) {} - - iota::iota( int lst ) : iota( 0, lst ) {} - - size_t iota::size() const { - return this->last - this->first; - } - - iota::const_iterator iota::begin() const { - return const_iterator{ first }; - } - - iota::const_iterator iota::end() const { - return const_iterator{ last }; - } - - int iota::const_iterator::operator*() const { - return this->value; - } - - iota::const_iterator& iota::const_iterator::operator++() { - ++( this->value ); - return *this; - } - - iota::const_iterator iota::const_iterator::operator++( int ) { - iota::const_iterator copy( *this ); - this->operator++(); - return copy; - } - - bool iota::const_iterator::operator==( const const_iterator& rhs ) const { - return this->value == rhs.value; - } - - bool iota::const_iterator::operator!=( const const_iterator& rhs ) const { - return !(*this == rhs ); - } - - iota::const_iterator::const_iterator( int x ) : value( x ) {} - - -} -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Utility/Stringview.cpp b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Utility/Stringview.cpp deleted file mode 100644 index 0b06858ef1..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/Utility/Stringview.cpp +++ /dev/null @@ -1,9 +0,0 @@ -#include -#include - -#include - -std::ostream& Opm::operator<<( std::ostream& stream, const Opm::string_view& view ) { - std::copy( view.begin(), view.end(), std::ostream_iterator< char >( stream ) ); - return stream; -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/keyword_list.argv.in b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/keyword_list.argv.in deleted file mode 100644 index 26a21d5113..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/keyword_list.argv.in +++ /dev/null @@ -1 +0,0 @@ -@keyword_files@ diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ACTDIMS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ACTDIMS deleted file mode 100644 index 389eb45512..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ACTDIMS +++ /dev/null @@ -1,29 +0,0 @@ -{ - "name": "ACTDIMS", - "sections": [ - "RUNSPEC" - ], - "size": 1, - "items": [ - { - "name": "MAX_ACTION", - "value_type": "INT", - "default": 2 - }, - { - "name": "MAX_ACTION_LINES", - "value_type": "INT", - "default": 50 - }, - { - "name": "MAX_ACTION_LINE_CHARACTERS", - "value_type": "INT", - "default": 80 - }, - { - "name": "MAX_ACTION_COND", - "value_type": "INT", - "default": 3 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ACTION b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ACTION deleted file mode 100644 index 500fc7fb07..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ACTION +++ /dev/null @@ -1,25 +0,0 @@ -{ - "name": "ACTION", - "sections": [ - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "ACTION_NAME", - "value_type": "STRING" - }, - { - "name": "QUANTITY", - "value_type": "STRING" - }, - { - "name": "OPERATOR", - "value_type": "STRING" - }, - { - "name": "TRIGGER_VALUE", - "value_type": "DOUBLE" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ACTIONG b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ACTIONG deleted file mode 100644 index 0ed98c7e7e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ACTIONG +++ /dev/null @@ -1,39 +0,0 @@ -{ - "name": "ACTIONG", - "sections": [ - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "ACTION", - "value_type": "STRING" - }, - { - "name": "GROUP_NAME", - "value_type": "STRING" - }, - { - "name": "QUANTITY", - "value_type": "STRING" - }, - { - "name": "OPERATOR", - "value_type": "STRING" - }, - { - "name": "TRIGGER_VALUE", - "value_type": "DOUBLE" - }, - { - "name": "REPETITIONS", - "value_type": "INT", - "default": 1 - }, - { - "name": "INCREMENT", - "value_type": "DOUBLE", - "default": 0 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ACTIONR b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ACTIONR deleted file mode 100644 index cc1a5bec91..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ACTIONR +++ /dev/null @@ -1,43 +0,0 @@ -{ - "name": "ACTIONR", - "sections": [ - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "ACTION", - "value_type": "STRING" - }, - { - "name": "FLUID_IN_PLACE_NR", - "value_type": "INT" - }, - { - "name": "FLUID_IN_PLACE_REG_FAM", - "value_type": "STRING" - }, - { - "name": "QUANTITY", - "value_type": "STRING" - }, - { - "name": "OPERATOR", - "value_type": "STRING" - }, - { - "name": "TRIGGER_VALUE", - "value_type": "DOUBLE" - }, - { - "name": "REPETITIONS", - "value_type": "INT", - "default": 1 - }, - { - "name": "INCREMENT", - "value_type": "DOUBLE", - "default": 0 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ACTIONS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ACTIONS deleted file mode 100644 index bbe789daa1..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ACTIONS +++ /dev/null @@ -1,43 +0,0 @@ -{ - "name": "ACTIONS", - "sections": [ - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "ACTION", - "value_type": "STRING" - }, - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "WELL_SEGMENT", - "value_type": "INT" - }, - { - "name": "QUANTITY", - "value_type": "STRING" - }, - { - "name": "OPERATOR", - "value_type": "STRING" - }, - { - "name": "TRIGGER_VALUE", - "value_type": "DOUBLE" - }, - { - "name": "REPETITIONS", - "value_type": "INT", - "default": 1 - }, - { - "name": "INCREMENT", - "value_type": "DOUBLE", - "default": 0 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ACTIONW b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ACTIONW deleted file mode 100644 index 9f8f4b4fc3..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ACTIONW +++ /dev/null @@ -1,39 +0,0 @@ -{ - "name": "ACTIONW", - "sections": [ - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "ACTION", - "value_type": "STRING" - }, - { - "name": "WELL_NAME", - "value_type": "STRING" - }, - { - "name": "QUANTITY", - "value_type": "STRING" - }, - { - "name": "OPERATOR", - "value_type": "STRING" - }, - { - "name": "TRIGGER_VALUE", - "value_type": "DOUBLE" - }, - { - "name": "REPETITIONS", - "value_type": "INT", - "default": 1 - }, - { - "name": "INCREMENT", - "value_type": "DOUBLE", - "default": 0 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ACTIONX b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ACTIONX deleted file mode 100644 index 297e6decb6..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ACTIONX +++ /dev/null @@ -1,32 +0,0 @@ -{ - "name": "ACTIONX", - "sections": [ - "SCHEDULE" - ], - "records": [ - [ - { - "name": "NAME", - "value_type": "STRING" - }, - { - "name": "NUM", - "value_type": "INT", - "default": 1 - }, - { - "name": "MIN_WAIT", - "value_type": "DOUBLE", - "default": 0, - "dimension": "Time" - } - ], - [ - { - "name": "CONDITION", - "value_type": "RAW_STRING", - "size_type": "ALL" - } - ] - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ACTNUM b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ACTNUM deleted file mode 100644 index e852ddd501..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ACTNUM +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "ACTNUM", - "sections": [ - "GRID" - ], - "data": { - "value_type": "INT" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ACTPARAM b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ACTPARAM deleted file mode 100644 index 28cf942419..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ACTPARAM +++ /dev/null @@ -1,11 +0,0 @@ -{ - "name": "ACTPARAM", - "sections": [ - "RUNSPEC" - ], - "size": 1, - "data": { - "value_type": "DOUBLE", - "default": 0.0001 - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ADD b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ADD deleted file mode 100644 index 2d85bce296..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ADD +++ /dev/null @@ -1,44 +0,0 @@ -{ - "name": "ADD", - "sections": [ - "GRID", - "EDIT", - "PROPS", - "REGIONS", - "SOLUTION" - ], - "items": [ - { - "name": "field", - "value_type": "STRING" - }, - { - "name": "shift", - "value_type": "DOUBLE" - }, - { - "name": "I1", - "value_type": "INT" - }, - { - "name": "I2", - "value_type": "INT" - }, - { - "name": "J1", - "value_type": "INT" - }, - { - "name": "J2", - "value_type": "INT" - }, - { - "name": "K1", - "value_type": "INT" - }, - { - "name": "K2", - "value_type": "INT" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ADDREG b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ADDREG deleted file mode 100644 index 92c06c4d6e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ADDREG +++ /dev/null @@ -1,34 +0,0 @@ -{ - "name": "ADDREG", - "sections": [ - "GRID", - "EDIT", - "PROPS", - "REGIONS", - "SOLUTION" - ], - "items": [ - { - "name": "ARRAY", - "value_type": "STRING", - "description": "The 3D array we will update" - }, - { - "name": "SHIFT", - "value_type": "DOUBLE", - "description": "The value we will multiply with", - "default": 0 - }, - { - "name": "REGION_NUMBER", - "value_type": "INT", - "description": "The region number we are interested in" - }, - { - "name": "REGION_NAME", - "value_type": "STRING", - "description": "The name of the region we are interested in", - "default": "M" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ADDZCORN b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ADDZCORN deleted file mode 100644 index 0113f646b2..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ADDZCORN +++ /dev/null @@ -1,57 +0,0 @@ -{ - "name": "ADDZCORN", - "sections": [ - "GRID" - ], - "items": [ - { - "name": "ADDED_VALUE", - "value_type": "DOUBLE", - "dimension": "Length" - }, - { - "name": "IX1", - "value_type": "INT" - }, - { - "name": "IX2", - "value_type": "INT" - }, - { - "name": "JY1", - "value_type": "INT" - }, - { - "name": "JY2", - "value_type": "INT" - }, - { - "name": "KZ1", - "value_type": "INT" - }, - { - "name": "KZ2", - "value_type": "INT" - }, - { - "name": "IX1A", - "value_type": "INT" - }, - { - "name": "IX2A", - "value_type": "INT" - }, - { - "name": "JY1A", - "value_type": "INT" - }, - { - "name": "JY2A", - "value_type": "INT" - }, - { - "name": "ACTION", - "value_type": "STRING" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ADSALNOD b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ADSALNOD deleted file mode 100644 index 201b272b96..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ADSALNOD +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "ADSALNOD", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTSFUN" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": "Density" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ADSORP b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ADSORP deleted file mode 100644 index 982da41d90..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ADSORP +++ /dev/null @@ -1,54 +0,0 @@ -{ - "name": "ADSORP", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTSFUN", - "shift": 1 - }, - "records": [ - [ - { - "name": "ADSORBING_COMP", - "value_type": "STRING" - } - ], - [ - { - "name": "ADORPTION_ISOTHERM", - "value_type": "STRING", - "default": "LANGMUIR" - }, - { - "name": "A1", - "value_type": "DOUBLE" - }, - { - "name": "A2", - "value_type": "DOUBLE" - }, - { - "name": "B", - "value_type": "DOUBLE" - }, - { - "name": "M", - "value_type": "DOUBLE", - "dimension": "1", - "default": 0.5 - }, - { - "name": "N", - "value_type": "DOUBLE", - "dimension": "1", - "default": 0.5 - }, - { - "name": "K_REF", - "value_type": "DOUBLE" - } - ] - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AITS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AITS deleted file mode 100644 index 3343e886c7..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AITS +++ /dev/null @@ -1,7 +0,0 @@ -{ - "name": "AITS", - "sections": [ - "RUNSPEC", - "SCHEDULE" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AITSOFF b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AITSOFF deleted file mode 100644 index 8846f523e0..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AITSOFF +++ /dev/null @@ -1,7 +0,0 @@ -{ - "name": "AITSOFF", - "sections": [ - "RUNSPEC", - "SCHEDULE" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ALKADS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ALKADS deleted file mode 100644 index 3a2998b4f8..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ALKADS +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "ALKADS", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTSFUN" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "Density", - "1" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ALKALINE b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ALKALINE deleted file mode 100644 index 833d2401e6..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ALKALINE +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "ALKALINE", - "sections": [ - "RUNSPEC" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ALKROCK b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ALKROCK deleted file mode 100644 index 39500558f1..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ALKROCK +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "ALKROCK", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTSFUN" - }, - "items": [ - { - "name": "ROCK_ADS_INDEX", - "value_type": "INT" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ALL b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ALL deleted file mode 100644 index f98d32f685..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ALL +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "ALL", - "sections": [ - "SUMMARY" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ALPOLADS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ALPOLADS deleted file mode 100644 index b81f1e03e9..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ALPOLADS +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "ALPOLADS", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTSFUN" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "Density", - "1" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ALSURFAD b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ALSURFAD deleted file mode 100644 index 4ec4ad7f31..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ALSURFAD +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "ALSURFAD", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTSFUN" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "Density", - "1" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ALSURFST b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ALSURFST deleted file mode 100644 index 2ac9916cd8..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/ALSURFST +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "ALSURFST", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTPVT" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "Density", - "1" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AMALGAM b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AMALGAM deleted file mode 100644 index 495f5538e2..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AMALGAM +++ /dev/null @@ -1,13 +0,0 @@ -{ - "name": "AMALGAM", - "sections": [ - "GRID" - ], - "items": [ - { - "name": "LGR_GROUPS", - "value_type": "STRING", - "size_type": "ALL" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/API b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/API deleted file mode 100644 index 65661eabab..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/API +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "API", - "sections": [ - "RUNSPEC" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/APIGROUP b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/APIGROUP deleted file mode 100644 index 743b53bd26..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/APIGROUP +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "APIGROUP", - "sections": [ - "PROPS" - ], - "size": 1, - "items": [ - { - "name": "MAX_OIL_PVT_GROUP_COUNT", - "value_type": "INT", - "default": 1 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/APILIM b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/APILIM deleted file mode 100644 index e53bbb823a..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/APILIM +++ /dev/null @@ -1,32 +0,0 @@ -{ - "name": "APILIM", - "sections": [ - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "LIMITER", - "value_type": "STRING", - "default": "NONE" - }, - { - "name": "SCOPE", - "value_type": "STRING", - "default": "BOTH" - }, - { - "name": "LOWER_API_LIMIT", - "value_type": "DOUBLE" - }, - { - "name": "UPPER_API_LIMIT", - "value_type": "DOUBLE" - }, - { - "name": "NUM_ROWS", - "value_type": "INT", - "default": 10 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/APIVD b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/APIVD deleted file mode 100644 index 42077b98b4..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/APIVD +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "APIVID", - "sections": [ - "SOLUTION" - ], - "size": { - "keyword": "EQLDIMS", - "item": "NTEQUL" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "Length", - "1" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AQANCONL b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AQANCONL deleted file mode 100644 index b620c4929e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AQANCONL +++ /dev/null @@ -1,59 +0,0 @@ -{ - "name": "AQANCONL", - "sections": [ - "SOLUTION" - ], - "items": [ - { - "name": "AQUIFER_ID", - "value_type": "INT" - }, - { - "name": "NAME", - "value_type": "STRING" - }, - { - "name": "LOWER_I", - "value_type": "INT" - }, - { - "name": "UPPER_I", - "value_type": "INT" - }, - { - "name": "LOWER_J", - "value_type": "INT" - }, - { - "name": "UPPER_J", - "value_type": "INT" - }, - { - "name": "LOWER_K", - "value_type": "INT" - }, - { - "name": "UPPER_K", - "value_type": "INT" - }, - { - "name": "FACE_INDX", - "value_type": "STRING" - }, - { - "name": "AQUIFER_INFLUX_COEFF", - "value_type": "DOUBLE", - "dimension": "Length*Length" - }, - { - "name": "AQUIFER_INFLUX_MULT", - "value_type": "DOUBLE", - "dimension": "1", - "default": 1 - }, - { - "name": "ALLOW", - "value_type": "STRING" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AQANNC b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AQANNC deleted file mode 100644 index 7abecf7c57..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AQANNC +++ /dev/null @@ -1,30 +0,0 @@ -{ - "name": "AQANNC", - "sections": [ - "SOLUTION" - ], - "items": [ - { - "name": "AQUIFER_NUMBER", - "value_type": "INT" - }, - { - "name": "IX", - "value_type": "INT" - }, - { - "name": "IY", - "value_type": "INT" - }, - { - "name": "IZ", - "value_type": "INT" - }, - { - "name": "AREA", - "value_type": "DOUBLE", - "dimension": "Length*Length", - "default": 0 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AQANTRC b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AQANTRC deleted file mode 100644 index c7c9b931c0..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AQANTRC +++ /dev/null @@ -1,20 +0,0 @@ -{ - "name": "AQANTRC", - "sections": [ - "SOLUTION" - ], - "items": [ - { - "name": "AQUIFER_ID", - "value_type": "INT" - }, - { - "name": "TRACER", - "value_type": "STRING" - }, - { - "name": "VALUE", - "value_type": "DOUBLE" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AQUALIST b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AQUALIST deleted file mode 100644 index d14e66a81c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AQUALIST +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "AQUALIST", - "sections": [ - "SOLUTION" - ], - "items": [ - { - "name": "AQUIFER_LIST", - "value_type": "STRING" - }, - { - "name": "LIST", - "value_type": "INT", - "size_type": "ALL" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AQUANCON b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AQUANCON deleted file mode 100644 index 147e1cb647..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AQUANCON +++ /dev/null @@ -1,57 +0,0 @@ -{ - "name": "AQUANCON", - "sections": [ - "GRID", - "SOLUTION" - ], - "items": [ - { - "name": "AQUIFER_ID", - "value_type": "INT" - }, - { - "name": "I1", - "value_type": "INT" - }, - { - "name": "I2", - "value_type": "INT" - }, - { - "name": "J1", - "value_type": "INT" - }, - { - "name": "J2", - "value_type": "INT" - }, - { - "name": "K1", - "value_type": "INT" - }, - { - "name": "K2", - "value_type": "INT" - }, - { - "name": "FACE", - "value_type": "STRING" - }, - { - "name": "INFLUX_COEFF", - "value_type": "DOUBLE", - "dimension": "Length*Length" - }, - { - "name": "INFLUX_MULT", - "value_type": "DOUBLE", - "dimension": "1", - "default": 1 - }, - { - "name": "CONNECT_ADJOINING_ACTIVE_CELL", - "value_type": "STRING", - "default": "NO" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AQUCHGAS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AQUCHGAS deleted file mode 100644 index 24dcbdc606..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AQUCHGAS +++ /dev/null @@ -1,38 +0,0 @@ -{ - "name": "AQUCHGAS", - "sections": [ - "SOLUTION", - "SCHEDULE" - ], - "items": [ - { - "name": "AQUIFER_ID", - "value_type": "INT" - }, - { - "name": "DATUM_DEPTH", - "value_type": "DOUBLE", - "dimension": "Length" - }, - { - "name": "GAS_PRESSURE", - "value_type": "DOUBLE", - "dimension": "Pressure" - }, - { - "name": "AQUIFER_PROD_INDEX", - "value_type": "DOUBLE", - "dimension": "GasSurfaceVolume/Time*Pressure" - }, - { - "name": "TABLE_NUM", - "value_type": "INT", - "default": 1 - }, - { - "name": "TEMPERATURE", - "value_type": "DOUBLE", - "dimension": "Temperature" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AQUCHWAT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AQUCHWAT deleted file mode 100644 index 2f10a55bd7..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AQUCHWAT +++ /dev/null @@ -1,84 +0,0 @@ -{ - "name": "AQUCHWAT", - "sections": [ - "SOLUTION", - "SCHEDULE" - ], - "items": [ - { - "name": "AQUIFER_ID", - "value_type": "INT" - }, - { - "name": "DATUM_DEPTH", - "value_type": "DOUBLE", - "dimension": "Length" - }, - { - "name": "INPUT_4", - "value_type": "STRING" - }, - { - "name": "ITEM4", - "value_type": "DOUBLE" - }, - { - "name": "AQUIFER_PROD_INDEX", - "value_type": "DOUBLE", - "dimension": "LiquidSurfaceVolume/Time*Pressure" - }, - { - "name": "TABLE_NUM", - "value_type": "INT", - "default": 1 - }, - { - "name": "INIT_SALT_CONC", - "value_type": "DOUBLE", - "dimension": "Mass/LiquidSurfaceVolume", - "default": 1 - }, - { - "name": "MINIMUM", - "value_type": "DOUBLE", - "default": -1e+200 - }, - { - "name": "MAXIMUM", - "value_type": "DOUBLE", - "default": 1e+200 - }, - { - "name": "IGNORE_CAP_PRESSURE", - "value_type": "STRING", - "default": "NO" - }, - { - "name": "MIN_FLOW_PR_CONN", - "value_type": "DOUBLE", - "dimension": "LiquidSurfaceVolume/Time", - "default": -1e+200 - }, - { - "name": "MAX_FLOW_PR_CONN", - "value_type": "DOUBLE", - "dimension": "LiquidSurfaceVolume/Time", - "default": 1e+200 - }, - { - "name": "REMOVE_DEPTH_TERM", - "value_type": "STRING", - "default": "NO" - }, - { - "name": "IMPORT_MAX_MIN_FLOW_RATE", - "value_type": "INT", - "default": 0 - }, - { - "name": "TEMPERATURE", - "value_type": "DOUBLE", - "dimension": "Temperature" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AQUCON b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AQUCON deleted file mode 100644 index d1a7d807aa..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AQUCON +++ /dev/null @@ -1,65 +0,0 @@ -{ - "name": "AQUCON", - "sections": [ - "GRID" - ], - "items": [ - { - "name": "ID", - "value_type": "INT" - }, - { - "name": "I1", - "value_type": "INT" - }, - { - "name": "I2", - "value_type": "INT" - }, - { - "name": "J1", - "value_type": "INT" - }, - { - "name": "J2", - "value_type": "INT" - }, - { - "name": "K1", - "value_type": "INT" - }, - { - "name": "K2", - "value_type": "INT" - }, - { - "name": "CONNECT_FACE", - "value_type": "STRING" - }, - { - "name": "TRANS_MULT", - "value_type": "DOUBLE", - "default_value": 1 - }, - { - "name": "TRANS_OPTION", - "value_type": "INT", - "default_value": 0 - }, - { - "name": "ALLOW_INTERNAL_CELLS", - "value_type": "STRING", - "default_value": "NO" - }, - { - "name": "VEFRAC", - "value_type": "DOUBLE", - "default_value": 1 - }, - { - "name": "VEFRACP", - "value_type": "DOUBLE", - "default_value": 1 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AQUCT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AQUCT deleted file mode 100644 index ce98c89785..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AQUCT +++ /dev/null @@ -1,78 +0,0 @@ -{ - "name": "AQUCT", - "sections": [ - "GRID", - "PROPS", - "SOLUTION", - "SCHEDULE" - ], - "items": [ - { - "name": "AQUIFER_ID", - "value_type": "INT" - }, - { - "name": "DAT_DEPTH", - "value_type": "DOUBLE", - "dimension": "Length" - }, - { - "name": "P_INI", - "value_type": "DOUBLE", - "dimension": "Pressure" - }, - { - "name": "PERM_AQ", - "value_type": "DOUBLE", - "dimension": "Permeability" - }, - { - "name": "PORO_AQ", - "value_type": "DOUBLE", - "dimension": "1", - "default": 1 - }, - { - "name": "C_T", - "value_type": "DOUBLE", - "dimension": "1/Pressure" - }, - { - "name": "RAD", - "value_type": "DOUBLE", - "dimension": "Length" - }, - { - "name": "THICKNESS_AQ", - "value_type": "DOUBLE", - "dimension": "Length" - }, - { - "name": "INFLUENCE_ANGLE", - "value_type": "DOUBLE", - "dimension": "1", - "default": 360 - }, - { - "name": "TABLE_NUM_WATER_PRESS", - "value_type": "INT", - "default": 1 - }, - { - "name": "TABLE_NUM_INFLUENCE_FN", - "value_type": "INT", - "default": 1 - }, - { - "name": "INI_SALT", - "value_type": "DOUBLE", - "default": 0, - "dimension": "Salinity" - }, - { - "name": "TEMP_AQUIFER", - "value_type": "DOUBLE", - "dimension": "Temperature" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AQUCWFAC b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AQUCWFAC deleted file mode 100644 index 89ba32f6f9..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AQUCWFAC +++ /dev/null @@ -1,20 +0,0 @@ -{ - "name": "AQUCWFAC", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "ADD_TO_DEPTH", - "value_type": "DOUBLE", - "dimension": "Length", - "default": 0 - }, - { - "name": "MULTIPLY", - "value_type": "DOUBLE", - "dimension": "1", - "default": 1 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AQUDIMS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AQUDIMS deleted file mode 100644 index 416cd4a700..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AQUDIMS +++ /dev/null @@ -1,49 +0,0 @@ -{ - "name": "AQUDIMS", - "sections": [ - "RUNSPEC" - ], - "size": 1, - "items": [ - { - "name": "MXNAQN", - "value_type": "INT", - "default": 1 - }, - { - "name": "MXNAQC", - "value_type": "INT", - "default": 1 - }, - { - "name": "NIFTBL", - "value_type": "INT", - "default": 1 - }, - { - "name": "NRIFTB", - "value_type": "INT", - "default": 36 - }, - { - "name": "NANAQU", - "value_type": "INT", - "default": 1 - }, - { - "name": "NCAMAX", - "value_type": "INT", - "default": 1 - }, - { - "name": "MXNALI", - "value_type": "INT", - "default": 0 - }, - { - "name": "MXAAQL", - "value_type": "INT", - "default": 0 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AQUFET b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AQUFET deleted file mode 100644 index 5167667b57..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AQUFET +++ /dev/null @@ -1,76 +0,0 @@ -{ - "name": "AQUFET", - "sections": [ - "SOLUTION" - ], - "size": { - "keyword": "AQUDIMS", - "item": "NANAQU" - }, - "items": [ - { - "name": "DAT_DEPTH", - "value_type": "DOUBLE", - "dimension": "Length" - }, - { - "name": "P0", - "value_type": "DOUBLE", - "dimension": "Pressure" - }, - { - "name": "V0", - "value_type": "DOUBLE", - "dimension": "LiquidSurfaceVolume" - }, - { - "name": "C_T", - "value_type": "DOUBLE", - "dimension": "1/Pressure" - }, - { - "name": "PI", - "value_type": "DOUBLE", - "dimension": "LiquidSurfaceVolume/Pressure*Time" - }, - { - "name": "TABLE_NUM_WATER_PRESS", - "value_type": "INT", - "default_value": 1 - }, - { - "name": "LOWER_I", - "value_type": "INT" - }, - { - "name": "UPPER_I", - "value_type": "INT" - }, - { - "name": "LOWER_J", - "value_type": "INT" - }, - { - "name": "UPPER_J", - "value_type": "INT" - }, - { - "name": "LOWER_K", - "value_type": "INT" - }, - { - "name": "UPPER_K", - "value_type": "INT" - }, - { - "name": "FACE_INDX", - "value_type": "STRING" - }, - { - "name": "SC_0", - "value_type": "DOUBLE", - "dimension": "Salinity", - "default": 0 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AQUFETP b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AQUFETP deleted file mode 100644 index 902e1c7af8..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AQUFETP +++ /dev/null @@ -1,54 +0,0 @@ -{ - "name": "AQUFETP", - "sections": [ - "SOLUTION", - "SCHEDULE" - ], - "items": [ - { - "name": "AQUIFER_ID", - "value_type": "INT" - }, - { - "name": "DAT_DEPTH", - "value_type": "DOUBLE", - "dimension": "Length" - }, - { - "name": "P0", - "value_type": "DOUBLE", - "dimension": "Pressure" - }, - { - "name": "V0", - "value_type": "DOUBLE", - "dimension": "LiquidSurfaceVolume" - }, - { - "name": "C_T", - "value_type": "DOUBLE", - "dimension": "1/Pressure" - }, - { - "name": "PI", - "value_type": "DOUBLE", - "dimension": "LiquidSurfaceVolume/Pressure*Time" - }, - { - "name": "TABLE_NUM_WATER_PRESS", - "value_type": "INT", - "default": 1 - }, - { - "name": "SALINITY", - "value_type": "DOUBLE", - "default": 0, - "dimension": "Salinity" - }, - { - "name": "TEMP", - "value_type": "DOUBLE", - "dimension": "Temperature" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AQUFLUX b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AQUFLUX deleted file mode 100644 index 2305b79542..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AQUFLUX +++ /dev/null @@ -1,38 +0,0 @@ -{ - "name": "AQUFLUX", - "sections": [ - "SOLUTION", - "SCHEDULE" - ], - "size": { - "keyword": "AQUDIMS", - "item": "NANAQU" - }, - "items": [ - { - "name": "AQUIFER_ID", - "value_type": "INT" - }, - { - "name": "DAT_DEPTH", - "value_type": "DOUBLE", - "dimension": "Length" - }, - { - "name": "SC_0", - "value_type": "DOUBLE", - "dimension": "Density", - "default": 0 - }, - { - "name": "TEMP", - "value_type": "DOUBLE", - "dimension": "Temperature" - }, - { - "name": "PRESSURE", - "value_type": "DOUBLE", - "dimension": "Pressure" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AQUIFER_PROBE_ANALYTIC b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AQUIFER_PROBE_ANALYTIC deleted file mode 100644 index a1751a2c51..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AQUIFER_PROBE_ANALYTIC +++ /dev/null @@ -1,20 +0,0 @@ -{ - "name": "AQUIFER_PROBE_ANALYTIC", - "sections": [ - "SUMMARY" - ], - "deck_names": [ - "AAQP", - "AAQR", - "AAQT", - "AAQRG", - "AAQTG", - "AAQTD", - "AAQPD" - ], - "comment": "Analytical aquifiers", - "data": { - "value_type": "INT" - }, - "deck_name_regex": "AA.+" -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AQUIFER_PROBE_NUMERIC b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AQUIFER_PROBE_NUMERIC deleted file mode 100644 index ac7182cea3..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AQUIFER_PROBE_NUMERIC +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "AQUIFER_PROBE_NUMERIC", - "sections": [ - "SUMMARY" - ], - "deck_names": [ - "ANQP", - "ANQR", - "ANQT" - ], - "comment": "Numerical aquifiers", - "data": { - "value_type": "INT" - }, - "deck_name_regex": "ANQ." -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AQUNNC b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AQUNNC deleted file mode 100644 index 323e277f06..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AQUNNC +++ /dev/null @@ -1,72 +0,0 @@ -{ - "name": "AQUNNC", - "sections": [ - "GRID" - ], - "items": [ - { - "name": "AQUIFER_ID", - "value_type": "INT" - }, - { - "name": "IX", - "value_type": "INT" - }, - { - "name": "IY", - "value_type": "INT" - }, - { - "name": "IZ", - "value_type": "INT" - }, - { - "name": "JX", - "value_type": "INT" - }, - { - "name": "JY", - "value_type": "INT" - }, - { - "name": "JZ", - "value_type": "INT" - }, - { - "name": "TRAN", - "value_type": "DOUBLE", - "dimension": "Transmissibility", - "default": 0 - }, - { - "name": "IST1", - "value_type": "INT" - }, - { - "name": "IST2", - "value_type": "INT" - }, - { - "name": "IPT1", - "value_type": "INT" - }, - { - "name": "IPT2", - "value_type": "INT" - }, - { - "name": "ZF1", - "value_type": "STRING" - }, - { - "name": "ZF2", - "value_type": "STRING" - }, - { - "name": "DIFF", - "value_type": "DOUBLE", - "dimension": "Length", - "defualt": 0 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AQUNUM b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AQUNUM deleted file mode 100644 index 2ac527e67f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AQUNUM +++ /dev/null @@ -1,62 +0,0 @@ -{ - "name": "AQUNUM", - "sections": [ - "GRID" - ], - "items": [ - { - "name": "AQUIFER_ID", - "value_type": "INT" - }, - { - "name": "I", - "value_type": "INT" - }, - { - "name": "J", - "value_type": "INT" - }, - { - "name": "K", - "value_type": "INT" - }, - { - "name": "CROSS_SECTION", - "value_type": "DOUBLE", - "dimension": "Length*Length" - }, - { - "name": "LENGTH", - "value_type": "DOUBLE", - "dimension": "Length" - }, - { - "name": "PORO", - "value_type": "DOUBLE", - "dimension": "1" - }, - { - "name": "PERM", - "value_type": "DOUBLE", - "dimension": "Permeability" - }, - { - "name": "DEPTH", - "value_type": "DOUBLE", - "dimension": "Length" - }, - { - "name": "INITIAL_PRESSURE", - "value_type": "DOUBLE", - "dimension": "Pressure" - }, - { - "name": "PVT_TABLE_NUM", - "value_type": "INT" - }, - { - "name": "SAT_TABLE_NUM", - "value_type": "INT" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AQUTAB b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AQUTAB deleted file mode 100644 index 61c151475d..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AQUTAB +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "AQUTAB", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "AQUDIMS", - "item": "NIFTBL", - "shift": -1 - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "1", - "1" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AUTOCOAR b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AUTOCOAR deleted file mode 100644 index 3d5d229c5c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AUTOCOAR +++ /dev/null @@ -1,44 +0,0 @@ -{ - "name": "AUTOCOAR", - "sections": [ - "GRID" - ], - "items": [ - { - "name": "I1", - "value_type": "INT" - }, - { - "name": "I2", - "value_type": "INT" - }, - { - "name": "J1", - "value_type": "INT" - }, - { - "name": "J2", - "value_type": "INT" - }, - { - "name": "K1", - "value_type": "INT" - }, - { - "name": "K2", - "value_type": "INT" - }, - { - "name": "NX", - "value_type": "INT" - }, - { - "name": "NY", - "value_type": "INT" - }, - { - "name": "NZ", - "value_type": "INT" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AUTOREF b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AUTOREF deleted file mode 100644 index 90c86c7caf..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/A/AUTOREF +++ /dev/null @@ -1,28 +0,0 @@ -{ - "name": "AUTOREF", - "sections": [ - "RUNSPEC" - ], - "items": [ - { - "name": "NX", - "value_type": "INT", - "default": 1 - }, - { - "name": "NY", - "value_type": "INT", - "default": 1 - }, - { - "name": "NZ", - "value_type": "INT", - "default": 1 - }, - { - "name": "OPTION_TRANS_MULT", - "value_type": "DOUBLE", - "default": 0 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/B/BDENSITY b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/B/BDENSITY deleted file mode 100644 index 5bbacbe1e0..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/B/BDENSITY +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "BDENSITY", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTPVT" - }, - "items": [ - { - "name": "BRINE_DENSITY", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": "Density" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/B/BGGI b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/B/BGGI deleted file mode 100644 index 5003f457cb..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/B/BGGI +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "BGGI", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTPVT" - }, - "items": [ - { - "name": "GAS_PRESSURE", - "value_type": "DOUBLE", - "dimension": "Pressure" - }, - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": "1" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/B/BIGMODEL b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/B/BIGMODEL deleted file mode 100644 index bd9b4bef38..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/B/BIGMODEL +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "BIGMODEL", - "sections": [ - "RUNSPEC" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/B/BLACKOIL b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/B/BLACKOIL deleted file mode 100644 index 4a0c504ece..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/B/BLACKOIL +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "BLACKOIL", - "sections": [ - "RUNSPEC" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/B/BLOCK_PROBE b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/B/BLOCK_PROBE deleted file mode 100644 index 56240e50c3..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/B/BLOCK_PROBE +++ /dev/null @@ -1,152 +0,0 @@ -{ - "name": "BLOCK_PROBE", - "sections": [ - "SUMMARY" - ], - "comment": "Some keywords need to be suffixed by a tracer name...", - "deck_names": [ - "BOSAT", - "BSOIL", - "BOIP", - "BOIPL", - "BOIPG", - "BPPO", - "BVOIL", - "BOVIS", - "BDENO", - "BODEN", - "BFLOOI", - "BFLOOJ", - "BFLOOK", - "BVELOI", - "BVELOJ", - "BVELOK", - "BWSAT", - "BSWAT", - "BWIP", - "BPPW", - "BVWAT", - "BWVIS", - "BDENW", - "BWDEN", - "BFLOWI", - "BVELWJ", - "BVELWK", - "BVELWI", - "BVELWJ", - "BVELWK", - "BGSAT", - "BSGAS", - "BGIP", - "BGIPL", - "BGIPG", - "BPPG", - "BVGAS", - "BGVIS", - "BDENG", - "BGDEN", - "BFLOGI", - "BFLOGJ", - "BFLOGK", - "BVELGI", - "BVELGJ", - "BVELGK", - "BPR", - "BWPR", - "BGPR", - "BRS", - "BRV", - "BPBUB", - "BPDEW", - "BRSSAT", - "BRVSAT", - "BSTATE", - "BPPC", - "BOKR", - "BWKR", - "BGKR", - "BKRO", - "BKRG", - "BKRW", - "BWPC", - "BGPC", - "BGTRP", - "BGTPD", - "BGSHY", - "BGSTRP", - "BWSHY", - "BWSMA", - "BHD", - "BHDF", - "BPR_X", - "BHD_X", - "BHDF_X", - "BSCN_X", - "BCTRA_X", - "LBPR_X", - "LBHD_X", - "LBHDF_X", - "LBSCN_X", - "LBCTRA_X", - "BRPV", - "BOPV", - "BWPV", - "BGPV", - "BHPV", - "BRTM", - "BPORVMOD", - "BPERMMOD", - "BAPI", - "BSCN", - "BSIP", - "BEWV_SAL", - "BTCNFANI", - "BTCNFCAT", - "BTRADCAT", - "BTSADCAT", - "BESALSUR", - "BESALPLY", - "BTCNFHEA", - "BTIPTHEA", - "BCGC", - "BCSC", - "BTCNFFOA", - "BTCNMFOA", - "BTIPTFOA", - "BTADSFOA", - "BTDCYFOA", - "BTMOBFOA", - "BTHLFFOA", - "BGI", - "BSIP", - "BNSAT", - "BNIP", - "BNKR", - "BTCNFSUR", - "BTIPTSUR", - "BTADSUR", - "BTCASUR", - "BTSTSUR", - "BEWV_SUR", - "BTCNFALK", - "BTADSALK", - "BTSTMALK", - "BTSADALK", - "BTPADALK" - ], - "deck_name_regex": "BU.+|BTIPF.+|BTIPS.+|BTCNF.+|BTCNS.+|BTCN[1-9][0-9]*.+|BTIPT.+|BTIPF.+|BTIPS.+|BTIP[1-9][0-9]*.+|BTADS.+|BTDCY", - "items": [ - { - "name": "I", - "value_type": "INT" - }, - { - "name": "J", - "value_type": "INT" - }, - { - "name": "K", - "value_type": "INT" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/B/BOGI b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/B/BOGI deleted file mode 100644 index 79d9641cb2..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/B/BOGI +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "BOGI", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTPVT" - }, - "items": [ - { - "name": "OIL_PRESSURE", - "value_type": "DOUBLE", - "dimension": "Pressure" - }, - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": "1" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/B/BOUNDARY b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/B/BOUNDARY deleted file mode 100644 index 9c1acf7af6..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/B/BOUNDARY +++ /dev/null @@ -1,47 +0,0 @@ -{ - "name": "BOUNDARY", - "sections": [ - "GRID", - "EDIT", - "REGIONS", - "SOLUTION", - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "IX1", - "value_type": "INT" - }, - { - "name": "IX2", - "value_type": "INT" - }, - { - "name": "JY1", - "value_type": "INT" - }, - { - "name": "JY2", - "value_type": "INT" - }, - { - "name": "KZ1", - "value_type": "INT" - }, - { - "name": "KZ2", - "value_type": "INT" - }, - { - "name": "ORIENTATION_INDEX", - "value_type": "INT", - "default": 1 - }, - { - "name": "DUAL_PORO_FLAG", - "value_type": "STRING", - "default": "BOTH" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/B/BOX b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/B/BOX deleted file mode 100644 index 7efd7d0e4d..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/B/BOX +++ /dev/null @@ -1,38 +0,0 @@ -{ - "name": "BOX", - "sections": [ - "GRID", - "EDIT", - "PROPS", - "REGIONS", - "SOLUTION", - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "I1", - "value_type": "INT" - }, - { - "name": "I2", - "value_type": "INT" - }, - { - "name": "J1", - "value_type": "INT" - }, - { - "name": "J2", - "value_type": "INT" - }, - { - "name": "K1", - "value_type": "INT" - }, - { - "name": "K2", - "value_type": "INT" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/B/BPARA b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/B/BPARA deleted file mode 100644 index d8c4a65629..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/B/BPARA +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "BPARA", - "sections": [ - "RUNSPEC" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/B/BPIDIMS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/B/BPIDIMS deleted file mode 100644 index c9dbcde645..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/B/BPIDIMS +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "BPIDIMS", - "sections": [ - "RUNSPEC" - ], - "size": 1, - "items": [ - { - "name": "MXNBIP", - "value_type": "INT", - "default": 10 - }, - { - "name": "MXNLBI", - "value_type": "INT", - "default": 1 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/B/BRANPROP b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/B/BRANPROP deleted file mode 100644 index ffa409a5f9..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/B/BRANPROP +++ /dev/null @@ -1,30 +0,0 @@ -{ - "name": "BRANPROP", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "DOWNTREE_NODE", - "value_type": "STRING" - }, - { - "name": "UPTREE_NODE", - "value_type": "STRING" - }, - { - "name": "VFP_TABLE", - "value_type": "INT" - }, - { - "name": "ALQ", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "ALQ_SURFACE_DENSITY", - "value_type": "STRING", - "default": "NONE" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/B/BRINE b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/B/BRINE deleted file mode 100644 index dafb255daa..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/B/BRINE +++ /dev/null @@ -1,7 +0,0 @@ -{ - "name": "BRINE", - "sections": [ - "RUNSPEC" - ], - "comment": "Multi-Component Brine Model not supported" -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/B/BTOBALFA b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/B/BTOBALFA deleted file mode 100644 index 7a563374b6..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/B/BTOBALFA +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "BTOBALFA", - "sections": [ - "GRID" - ], - "size": 1, - "items": [ - { - "name": "VALUE", - "value_type": "DOUBLE", - "dimension": "1" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/B/BTOBALFV b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/B/BTOBALFV deleted file mode 100644 index 46f9c56c17..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/B/BTOBALFV +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "BTOBALFV", - "sections": [ - "GRID" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/CALTRAC b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/CALTRAC deleted file mode 100644 index f1d01de206..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/CALTRAC +++ /dev/null @@ -1,13 +0,0 @@ -{ - "name": "CALTRAC", - "sections": [ - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "IX1", - "value_type": "STRING" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/CARFIN b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/CARFIN deleted file mode 100644 index ef35990b7b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/CARFIN +++ /dev/null @@ -1,58 +0,0 @@ -{ - "name": "CARFIN", - "sections": [ - "GRID" - ], - "size": 1, - "items": [ - { - "name": "NAME", - "value_type": "STRING" - }, - { - "name": "I1", - "value_type": "INT" - }, - { - "name": "I2", - "value_type": "INT" - }, - { - "name": "J1", - "value_type": "INT" - }, - { - "name": "J2", - "value_type": "INT" - }, - { - "name": "K1", - "value_type": "INT" - }, - { - "name": "K2", - "value_type": "INT" - }, - { - "name": "NX", - "value_type": "INT" - }, - { - "name": "NY", - "value_type": "INT" - }, - { - "name": "NZ", - "value_type": "INT" - }, - { - "name": "NWMAX", - "value_type": "INT" - }, - { - "name": "PARENT", - "value_type": "STRING", - "default": "GLOBAL" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/CART b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/CART deleted file mode 100644 index a89fdfb803..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/CART +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "CART", - "sections": [ - "RUNSPEC" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/CBMOPTS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/CBMOPTS deleted file mode 100644 index fecc78dcec..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/CBMOPTS +++ /dev/null @@ -1,54 +0,0 @@ -{ - "name": "CBMOPTS", - "sections": [ - "SRUNSPEC" - ], - "size": 1, - "items": [ - { - "name": "ADSORPTION_MODEL", - "value_type": "STRING", - "default": "TIMEDEP" - }, - { - "name": "ALLOW_WATER_FLOW", - "value_type": "STRING", - "default": "YES" - }, - { - "name": "ALLOW_PERMEAB", - "value_type": "STRING", - "default": "NOKRMIX" - }, - { - "name": "COUNT_PASSES", - "value_type": "STRING", - "default": "NOPMREB" - }, - { - "name": "METHOD", - "value_type": "STRING", - "default": "PMSTD" - }, - { - "name": "SCALING_VALUE", - "value_type": "STRING", - "default": "PMSCAL" - }, - { - "name": "APPLICATION", - "value_type": "STRING", - "default": "PMPVK" - }, - { - "name": "PRESSURE_CHOP", - "value_type": "STRING", - "default": "NOPMPCHP" - }, - { - "name": "MIN_PORE_VOLUME", - "value_type": "DOUBLE", - "default": 5e-06 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/CECON b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/CECON deleted file mode 100644 index bcfaed740c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/CECON +++ /dev/null @@ -1,72 +0,0 @@ -{ - "name": "CECON", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELLNAME", - "value_type": "STRING" - }, - { - "name": "I", - "value_type": "INT", - "default": 0 - }, - { - "name": "J", - "value_type": "INT", - "default": 0 - }, - { - "name": "K1", - "value_type": "INT", - "default": 0 - }, - { - "name": "K2", - "value_type": "INT", - "default": 0 - }, - { - "name": "MAX_WCUT", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "MAX_GOR", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "MAX_WGR", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "WORKOVER_PROCEDURE", - "value_type": "STRING", - "default": "CON" - }, - { - "name": "CHECK_STOPPED", - "value_type": "STRING", - "default": "NO" - }, - { - "name": "MIN_OIL", - "value_type": "DOUBLE", - "default": -1e+20 - }, - { - "name": "MIN_GAS", - "value_type": "DOUBLE", - "default": -1e+20 - }, - { - "name": "FOLLOW_ON_WELL", - "value_type": "STRING", - "default": "" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/CECONT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/CECONT deleted file mode 100644 index 7046a1a69c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/CECONT +++ /dev/null @@ -1,80 +0,0 @@ -{ - "name": "CECONT", - "sections": [ - "SCHEDULE" - ], - "records_set": [ - [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "I", - "value_type": "INT", - "default": 0 - }, - { - "name": "J", - "value_type": "INT", - "default": 0 - }, - { - "name": "K_UPPER", - "value_type": "INT", - "default": 0 - }, - { - "name": "K_LOWER", - "value_type": "INT", - "default": 0 - }, - { - "name": "PROCEDURE", - "value_type": "STRING", - "default": "CON" - }, - { - "name": "CHECK_STOPPED_WELLS", - "value_type": "STRING", - "default": "NO" - } - ], - [ - { - "name": "TRACER", - "value_type": "STRING" - }, - { - "name": "MAX_TOTAL_TRACER_RATE", - "value_type": "DOUBLE", - "default": 1e+200 - }, - { - "name": "MAX_TOTAL_TRACER_CONC", - "value_type": "DOUBLE", - "default": 1e+200 - }, - { - "name": "MAX_FREE_TRACER_RATE", - "value_type": "DOUBLE", - "default": 1e+200 - }, - { - "name": "MAX_FREE_TRACER_CONC", - "value_type": "DOUBLE", - "default": 1e+200 - }, - { - "name": "MAX_SOL_TRACER_RATE", - "value_type": "DOUBLE", - "default": 1e+200 - }, - { - "name": "MAX_SOL_TRACER_CONC", - "value_type": "DOUBLE", - "default": 1e+200 - } - ] - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COAL b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COAL deleted file mode 100644 index 695123005a..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COAL +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "COAL", - "sections": [ - "RUNSPEC" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COALADS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COALADS deleted file mode 100644 index 54cd86fecd..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COALADS +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "COALADS", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "REGDIMS", - "item": "NTCREG" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "1", - "1", - "1" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COALNUM b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COALNUM deleted file mode 100644 index 003e8eed98..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COALNUM +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "COALNUM", - "sections": [ - "GRID" - ], - "data": { - "value_type": "INT" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COALPP b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COALPP deleted file mode 100644 index eb0f7edc80..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COALPP +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "COALPP", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "REGDIMS", - "item": "NTCREG" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "1", - "1", - "1" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COARSEN b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COARSEN deleted file mode 100644 index 5e800c5782..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COARSEN +++ /dev/null @@ -1,45 +0,0 @@ -{ - "name": "COARSEN", - "sections": [ - "GRID" - ], - "size": 1, - "items": [ - { - "name": "I1", - "value_type": "INT" - }, - { - "name": "I2", - "value_type": "INT" - }, - { - "name": "J1", - "value_type": "INT" - }, - { - "name": "J2", - "value_type": "INT" - }, - { - "name": "K1", - "value_type": "INT" - }, - { - "name": "K2", - "value_type": "INT" - }, - { - "name": "NX", - "value_type": "INT" - }, - { - "name": "NY", - "value_type": "INT" - }, - { - "name": "NZ", - "value_type": "INT" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COLLAPSE b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COLLAPSE deleted file mode 100644 index 8c5986522f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COLLAPSE +++ /dev/null @@ -1,13 +0,0 @@ -{ - "name": "COLLAPSE", - "sections": [ - "GRID" - ], - "items": [ - { - "name": "VALUE", - "value_type": "INT", - "default": 1 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COLUMNS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COLUMNS deleted file mode 100644 index 594e9836e0..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COLUMNS +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "COLUMNS", - "sections": [ - "RUNSPEC", - "GRID", - "EDIT", - "PROPS", - "REGIONS", - "SOLUTION", - "SUMMARY", - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "LEFT_MARGIN", - "value_type": "INT", - "default": 1 - }, - { - "name": "RIGHT_MARGIN", - "value_type": "INT", - "default": 132 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COMPDAT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COMPDAT deleted file mode 100644 index 5f7f3686fa..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COMPDAT +++ /dev/null @@ -1,77 +0,0 @@ -{ - "name": "COMPDAT", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "I", - "value_type": "INT", - "default": 0 - }, - { - "name": "J", - "value_type": "INT", - "default": 0 - }, - { - "name": "K1", - "value_type": "INT" - }, - { - "name": "K2", - "value_type": "INT" - }, - { - "name": "STATE", - "value_type": "STRING", - "default": "OPEN" - }, - { - "name": "SAT_TABLE", - "value_type": "INT", - "default": 0 - }, - { - "name": "CONNECTION_TRANSMISSIBILITY_FACTOR", - "value_type": "DOUBLE", - "dimension": "Viscosity*ReservoirVolume/Time*Pressure" - }, - { - "name": "DIAMETER", - "value_type": "DOUBLE", - "dimension": "Length" - }, - { - "name": "Kh", - "value_type": "DOUBLE", - "dimension": "Permeability*Length", - "default": -1 - }, - { - "name": "SKIN", - "value_type": "DOUBLE", - "dimension": "1", - "default": 0 - }, - { - "name": "D_FACTOR", - "value_type": "DOUBLE", - "dimension": "1" - }, - { - "name": "DIR", - "value_type": "STRING", - "default": "Z" - }, - { - "name": "PR", - "value_type": "DOUBLE", - "dimension": "Length" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COMPDATX b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COMPDATX deleted file mode 100644 index 4f1600ed88..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COMPDATX +++ /dev/null @@ -1,85 +0,0 @@ -{ - "name": "COMPDATX", - "sections": [ - "SCHEDULE" - ], - "deck_names": [ - "COMPDATM", - "COMPDATL" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "LGR", - "value_type": "STRING" - }, - { - "name": "I", - "value_type": "INT", - "default": 0 - }, - { - "name": "J", - "value_type": "INT", - "default": 0 - }, - { - "name": "K1", - "value_type": "INT" - }, - { - "name": "K2", - "value_type": "INT" - }, - { - "name": "STATE", - "value_type": "STRING", - "default": "OPEN" - }, - { - "name": "SAT_TABLE", - "value_type": "INT", - "default": 0 - }, - { - "name": "CONNECTION_TRANSMISSIBILITY_FACTOR", - "value_type": "DOUBLE", - "dimension": "Viscosity*ReservoirVolume/Time*Pressure" - }, - { - "name": "DIAMETER", - "value_type": "DOUBLE", - "dimension": "Length" - }, - { - "name": "Kh", - "value_type": "DOUBLE", - "dimension": "Permeability*Length", - "default": -1 - }, - { - "name": "SKIN", - "value_type": "DOUBLE", - "dimension": "1", - "default": 0 - }, - { - "name": "D_FACTOR", - "value_type": "DOUBLE", - "dimension": "1" - }, - { - "name": "DIR", - "value_type": "STRING", - "default": "Z" - }, - { - "name": "PR", - "value_type": "DOUBLE", - "dimension": "Pressure" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COMPFLSH b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COMPFLSH deleted file mode 100644 index 669c5b3073..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COMPFLSH +++ /dev/null @@ -1,49 +0,0 @@ -{ - "name": "COMPFLSH", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "I", - "value_type": "INT", - "default": 0 - }, - { - "name": "J", - "value_type": "INT", - "default": 0 - }, - { - "name": "UPPER_K", - "value_type": "INT", - "default": 0 - }, - { - "name": "LOWER_K", - "value_type": "INT", - "default": 0 - }, - { - "name": "F1", - "value_type": "DOUBLE", - "dimension": "1", - "default": 1 - }, - { - "name": "F2", - "value_type": "DOUBLE", - "dimension": "1", - "default": 1 - }, - { - "name": "FLASH_PVTNUM", - "value_type": "INT", - "default": 0 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COMPIMB b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COMPIMB deleted file mode 100644 index 5cdb2c1b41..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COMPIMB +++ /dev/null @@ -1,35 +0,0 @@ -{ - "name": "COMPIMB", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "I", - "value_type": "INT", - "default": 0 - }, - { - "name": "J", - "value_type": "INT", - "default": 0 - }, - { - "name": "K1", - "value_type": "INT" - }, - { - "name": "K2", - "value_type": "INT" - }, - { - "name": "SAT_TABLE", - "value_type": "INT", - "default": 0 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COMPINJK b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COMPINJK deleted file mode 100644 index 51f0165ebf..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COMPINJK +++ /dev/null @@ -1,38 +0,0 @@ -{ - "name": "COMPINJK", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "I", - "value_type": "INT", - "default": 0 - }, - { - "name": "J", - "value_type": "INT", - "default": 0 - }, - { - "name": "K_UPPER", - "value_type": "INT", - "default": 0 - }, - { - "name": "K_LOWER", - "value_type": "INT", - "default": 0 - }, - { - "name": "REL_PERM", - "value_type": "DOUBLE", - "dimension": "1", - "default": 0 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COMPLMPL b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COMPLMPL deleted file mode 100644 index eae3f11e5b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COMPLMPL +++ /dev/null @@ -1,41 +0,0 @@ -{ - "name": "COMPLMPL", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "GRID", - "value_type": "STRING", - "default": "" - }, - { - "name": "I", - "value_type": "INT", - "default": 0 - }, - { - "name": "J", - "value_type": "INT", - "default": 0 - }, - { - "name": "UPPER_K", - "value_type": "INT", - "default": 0 - }, - { - "name": "LOWER_K", - "value_type": "INT", - "default": 0 - }, - { - "name": "COMPLETION_NUMBER", - "value_type": "INT" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COMPLUMP b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COMPLUMP deleted file mode 100644 index c9bc0e751a..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COMPLUMP +++ /dev/null @@ -1,32 +0,0 @@ -{ - "name": "COMPLUMP", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "I", - "value_type": "INT" - }, - { - "name": "J", - "value_type": "INT" - }, - { - "name": "K1", - "value_type": "INT" - }, - { - "name": "K2", - "value_type": "INT" - }, - { - "name": "N", - "value_type": "INT" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COMPOFF b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COMPOFF deleted file mode 100644 index 6c220f573f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COMPOFF +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "COMPOFF", - "sections": [ - "SCHEDULE" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COMPORD b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COMPORD deleted file mode 100644 index c700c08c54..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COMPORD +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "COMPORD", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "ORDER_TYPE", - "value_type": "STRING", - "default": "TRACK" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COMPRIV b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COMPRIV deleted file mode 100644 index a97dbeb34b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COMPRIV +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "COMPRIV", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "RIVER", - "value_type": "STRING" - }, - { - "name": "I", - "value_type": "INT" - }, - { - "name": "J", - "value_type": "INT" - }, - { - "name": "K", - "value_type": "INT" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COMPRP b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COMPRP deleted file mode 100644 index a48ae1defd..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COMPRP +++ /dev/null @@ -1,56 +0,0 @@ -{ - "name": "COMPRP", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "I", - "value_type": "INT", - "default": 0 - }, - { - "name": "J", - "value_type": "INT", - "default": 0 - }, - { - "name": "K_UPPER", - "value_type": "INT", - "default": 0 - }, - { - "name": "K_LOWER", - "value_type": "INT", - "default": 0 - }, - { - "name": "SAT_TABLE_NUM", - "value_type": "INT" - }, - { - "name": "SWMIN", - "value_type": "DOUBLE", - "dimension": "1" - }, - { - "name": "SWMAX", - "value_type": "DOUBLE", - "dimension": "1" - }, - { - "name": "SGMIN", - "value_type": "DOUBLE", - "dimension": "1" - }, - { - "name": "SGMAX", - "value_type": "DOUBLE", - "dimension": "1" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COMPRPL b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COMPRPL deleted file mode 100644 index 952ee4bcdd..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COMPRPL +++ /dev/null @@ -1,60 +0,0 @@ -{ - "name": "COMPRPL", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "LOCAL_GRID", - "value_type": "STRING" - }, - { - "name": "I", - "value_type": "INT", - "default": 0 - }, - { - "name": "J", - "value_type": "INT", - "default": 0 - }, - { - "name": "K_UPPER", - "value_type": "INT", - "default": 0 - }, - { - "name": "K_LOWER", - "value_type": "INT", - "default": 0 - }, - { - "name": "SAT_TABLE_NUM", - "value_type": "INT" - }, - { - "name": "SWMIN", - "value_type": "DOUBLE", - "dimension": "1" - }, - { - "name": "SWMAX", - "value_type": "DOUBLE", - "dimension": "1" - }, - { - "name": "SGMIN", - "value_type": "DOUBLE", - "dimension": "1" - }, - { - "name": "SGMAX", - "value_type": "DOUBLE", - "dimension": "1" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COMPSEGL b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COMPSEGL deleted file mode 100644 index 272c60c28b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COMPSEGL +++ /dev/null @@ -1,69 +0,0 @@ -{ - "name": "COMPSEGL", - "sections": [ - "SCHEDULE" - ], - "records": [ - [ - { - "name": "WELL", - "value_type": "STRING" - } - ], - [ - { - "name": "GRID", - "value_type": "STRING" - }, - { - "name": "I", - "value_type": "INT" - }, - { - "name": "J", - "value_type": "INT" - }, - { - "name": "K", - "value_type": "INT" - }, - { - "name": "BRANCH", - "value_type": "INT" - }, - { - "name": "DISTANCE_START", - "value_type": "DOUBLE", - "dimension": "Length" - }, - { - "name": "DISTANCE_END", - "value_type": "DOUBLE", - "dimension": "Length" - }, - { - "name": "DIRECTION", - "value_type": "STRING" - }, - { - "name": "END_IJK", - "value_type": "INT" - }, - { - "name": "CENTER_DEPTH", - "value_type": "DOUBLE", - "dimension": "Length", - "default": 0 - }, - { - "name": "THERMAL_LENGTH", - "value_type": "DOUBLE", - "dimension": "Length" - }, - { - "name": "SEGMENT_NUMBER", - "value_type": "INT" - } - ] - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COMPSEGS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COMPSEGS deleted file mode 100644 index fd2fb6bf73..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COMPSEGS +++ /dev/null @@ -1,65 +0,0 @@ -{ - "name": "COMPSEGS", - "sections": [ - "SCHEDULE" - ], - "records": [ - [ - { - "name": "WELL", - "value_type": "STRING" - } - ], - [ - { - "name": "I", - "value_type": "INT" - }, - { - "name": "J", - "value_type": "INT" - }, - { - "name": "K", - "value_type": "INT" - }, - { - "name": "BRANCH", - "value_type": "INT" - }, - { - "name": "DISTANCE_START", - "value_type": "DOUBLE", - "dimension": "Length" - }, - { - "name": "DISTANCE_END", - "value_type": "DOUBLE", - "dimension": "Length" - }, - { - "name": "DIRECTION", - "value_type": "STRING" - }, - { - "name": "END_IJK", - "value_type": "INT" - }, - { - "name": "CENTER_DEPTH", - "value_type": "DOUBLE", - "dimension": "Length", - "default": 0 - }, - { - "name": "THERMAL_LENGTH", - "value_type": "DOUBLE", - "dimension": "Length" - }, - { - "name": "SEGMENT_NUMBER", - "value_type": "INT" - } - ] - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COMPVE b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COMPVE deleted file mode 100644 index 0878630fe0..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COMPVE +++ /dev/null @@ -1,71 +0,0 @@ -{ - "name": "COMPVE", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "I", - "value_type": "INT", - "default": 0 - }, - { - "name": "J", - "value_type": "INT", - "default": 0 - }, - { - "name": "K_UPPER", - "value_type": "INT", - "default": 0 - }, - { - "name": "K_LOWER", - "value_type": "INT", - "default": 0 - }, - { - "name": "SAT_TABLE_NUM", - "value_type": "INT" - }, - { - "name": "CVEFRAC", - "value_type": "DOUBLE", - "dimension": "1" - }, - { - "name": "DTOP", - "value_type": "DOUBLE", - "dimension": "Length" - }, - { - "name": "DBOT", - "value_type": "DOUBLE", - "dimension": "Length" - }, - { - "name": "FLAG", - "value_type": "STRING", - "default": "NO" - }, - { - "name": "S_D", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "GTOP", - "value_type": "DOUBLE", - "dimension": "Length" - }, - { - "name": "GBOT", - "value_type": "DOUBLE", - "dimension": "Length" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COMPVEL b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COMPVEL deleted file mode 100644 index 794643c3c7..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COMPVEL +++ /dev/null @@ -1,75 +0,0 @@ -{ - "name": "COMPVEL", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "LOCAL", - "value_type": "STRING" - }, - { - "name": "I", - "value_type": "INT", - "default": 0 - }, - { - "name": "J", - "value_type": "INT", - "default": 0 - }, - { - "name": "K_UPPER", - "value_type": "INT", - "default": 0 - }, - { - "name": "K_LOWER", - "value_type": "INT", - "default": 0 - }, - { - "name": "SAT_TABLE_NUM", - "value_type": "INT" - }, - { - "name": "CVEFRAC", - "value_type": "DOUBLE", - "dimension": "1" - }, - { - "name": "DTOP", - "value_type": "DOUBLE", - "dimension": "Length" - }, - { - "name": "DBOT", - "value_type": "DOUBLE", - "dimension": "Length" - }, - { - "name": "FLAG", - "value_type": "STRING", - "default": "NO" - }, - { - "name": "S_D", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "GTOP", - "value_type": "DOUBLE", - "dimension": "Length" - }, - { - "name": "GBOT", - "value_type": "DOUBLE", - "dimension": "Length" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/CONNECTION_PROBE b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/CONNECTION_PROBE deleted file mode 100644 index f746cf8876..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/CONNECTION_PROBE +++ /dev/null @@ -1,150 +0,0 @@ -{ - "name": "CONNECTION_PROBE", - "sections": [ - "SUMMARY" - ], - "comment": "Some keywords need to be suffixed by a tracer name...", - "deck_names": [ - "COFR", - "COFRF", - "COFRS", - "COFRL", - "COPRL", - "COFRU", - "COPR", - "COPT", - "COPTL", - "COPTF", - "COPTS", - "COIT", - "COITL", - "COPP", - "COPI", - "CWFR", - "CWFRL", - "CWPRL", - "CWFRU", - "CWPR", - "CWPT", - "CWPTL", - "CWIR", - "CWIT", - "CWIRL", - "CWITL", - "CWPP", - "CWPI", - "CGFR", - "CGFRF", - "CGFRS", - "CGFRL", - "CGPRL", - "CGFRU", - "CGPR", - "CGPT", - "CGPTL", - "CGPTF", - "CGPTS", - "CGIR", - "CGIT", - "CGIRL", - "WGIRL", - "CGITL", - "WGITL", - "CGPP", - "CGPI", - "CGQ", - "CLFR", - "CLFRL", - "CLPT", - "CLPTL", - "CVFR", - "CVFRL", - "CVIRL", - "CVPT", - "CVPTL", - "CVIR", - "CVIT", - "CVITL", - "CCIR", - "CCIT", - "CWCT", - "CWCTL", - "CGOR", - "CGORL", - "COGR", - "COGRL", - "CWGR", - "CWGRL", - "CGLR", - "CGLRL", - "CPI", - "CPRL", - "CTFAC", - "CDBF", - "CDSM", - "CDSML", - "CDSF", - "CDFAC", - "CAPI", - "CSFR", - "CSPR", - "CSPT", - "CSIR", - "CSIT", - "CSPC", - "CSIC", - "CTFRANI", - "CTPTANI", - "CTITANI", - "CTFRCAT", - "CTPTCAT", - "CTITCAT", - "CTFRFOA", - "CTPTFOA", - "CTITFOA", - "CCFR", - "CCPC", - "CCPT", - "CCIC", - "CCIT", - "CSFR", - "CSPR", - "CSPT", - "CSIR", - "CSIT", - "CNFR", - "CNPT", - "CNIT", - "CTFRSUR", - "CTPTSUR", - "CTITSUR", - "CTFRALK", - "CTPTALK", - "CTITALK", - "COFRU", - "CWFRU", - "CGFRU", - "LCOFRU", - "LCWFRU", - "LCGFRU" - ], - "deck_name_regex": "CU.+|CTFR.+|CTPR.+|CTPT.+|CTPC.+|CTIR.+|CTIT.+|CTIC.+|CTFR.+|CTPR.+|CTPT.+|CTPC.+|CTIR.+|CTIT.+|CTIC.+|CTIRF.+|CTIRS.+|CTPRF.+|CTPRS.+|CTITF.+|CTITS.+|CTPTF.+|CTPTS.+|CTICF.+|CTICS.+|CTPCF.+|CTPCS", - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "I", - "value_type": "INT" - }, - { - "name": "J", - "value_type": "INT" - }, - { - "name": "K", - "value_type": "INT" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COORD b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COORD deleted file mode 100644 index d70d0263ed..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COORD +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "COORD", - "sections": [ - "GRID" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "Length" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COORDSYS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COORDSYS deleted file mode 100644 index 513eeb53e9..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COORDSYS +++ /dev/null @@ -1,40 +0,0 @@ -{ - "name": "COORDSYS", - "sections": [ - "GRID" - ], - "size": { - "keyword": "NUMRES", - "item": "num" - }, - "items": [ - { - "name": "K1", - "value_type": "INT" - }, - { - "name": "K2", - "value_type": "INT" - }, - { - "name": "CIRCLE_COMPLETION", - "value_type": "STRING", - "default": "INCOMP" - }, - { - "name": "CONNECTION", - "value_type": "STRING", - "default": "SEPARATE" - }, - { - "name": "R1", - "value_type": "INT", - "default": 0 - }, - { - "name": "R2", - "value_type": "INT", - "default": 0 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COPY b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COPY deleted file mode 100644 index 78e1a0cc59..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COPY +++ /dev/null @@ -1,44 +0,0 @@ -{ - "name": "COPY", - "sections": [ - "GRID", - "EDIT", - "PROPS", - "REGIONS", - "SOLUTION" - ], - "items": [ - { - "name": "src", - "value_type": "STRING" - }, - { - "name": "target", - "value_type": "STRING" - }, - { - "name": "I1", - "value_type": "INT" - }, - { - "name": "I2", - "value_type": "INT" - }, - { - "name": "J1", - "value_type": "INT" - }, - { - "name": "J2", - "value_type": "INT" - }, - { - "name": "K1", - "value_type": "INT" - }, - { - "name": "K2", - "value_type": "INT" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COPYBOX b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COPYBOX deleted file mode 100644 index 3b660183cf..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COPYBOX +++ /dev/null @@ -1,62 +0,0 @@ -{ - "name": "COPYBOX", - "sections": [ - "GRID", - "PROPS", - "REGIONS" - ], - "items": [ - { - "name": "ARRAY", - "value_type": "STRING" - }, - { - "name": "IX1S", - "value_type": "INT" - }, - { - "name": "IX2S", - "value_type": "INT" - }, - { - "name": "JY1S", - "value_type": "INT" - }, - { - "name": "JY2S", - "value_type": "INT" - }, - { - "name": "KY1S", - "value_type": "INT" - }, - { - "name": "KY2S", - "value_type": "INT" - }, - { - "name": "IX1D", - "value_type": "INT" - }, - { - "name": "IX2D", - "value_type": "INT" - }, - { - "name": "JY1D", - "value_type": "INT" - }, - { - "name": "JY2D", - "value_type": "INT" - }, - { - "name": "KY1D", - "value_type": "INT" - }, - { - "name": "KY2D", - "value_type": "INT" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COPYREG b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COPYREG deleted file mode 100644 index 8ac6bd4046..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/COPYREG +++ /dev/null @@ -1,33 +0,0 @@ -{ - "name": "COPYREG", - "sections": [ - "GRID", - "EDIT", - "PROPS", - "REGIONS", - "SOLUTION" - ], - "items": [ - { - "name": "SRC_ARRAY", - "value_type": "STRING", - "description": "The 3D array we will fetch from" - }, - { - "name": "TARGET_ARRAY", - "value_type": "STRING", - "description": "The name of the array which will be set" - }, - { - "name": "REGION_NUMBER", - "value_type": "INT", - "description": "The region number we are interested in" - }, - { - "name": "REGION_NAME", - "value_type": "STRING", - "description": "The name of the region we are interested in", - "default": "M" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/CPIFACT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/CPIFACT deleted file mode 100644 index 021dc474a8..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/CPIFACT +++ /dev/null @@ -1,11 +0,0 @@ -{"name" : "CPIFACT", - "sections" : ["SCHEDULE"], - "items": [ - {"name" : "WELL", "value_type" : "STRING" }, - {"name" : "MULT", "value_type" : "UDA", "default_value" : 1.0}, - {"name" : "I", "value_type" : "INT"}, - {"name" : "J", "value_type" : "INT"}, - {"name" : "K", "value_type" : "INT"}, - {"name" : "C1", "value_type" : "INT"}, - {"name" : "C2", "value_type" : "INT"}]} - diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/CPIFACTL b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/CPIFACTL deleted file mode 100644 index e30bc53aca..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/CPIFACTL +++ /dev/null @@ -1,12 +0,0 @@ -{"name" : "CPIFACTL", - "sections" : ["SCHEDULE"], - "items": [ - {"name" : "WELL", "value_type" : "STRING" }, - {"name" : "MULT", "value_type" : "UDA", "default_value" : 1.0}, - {"name" : "LGR", "value_type" : "STRING", "default_value" : ""}, - {"name" : "I", "value_type" : "INT"}, - {"name" : "J", "value_type" : "INT"}, - {"name" : "K", "value_type" : "INT"}, - {"name" : "C1", "value_type" : "INT"}, - {"name" : "C2", "value_type" : "INT"}]} - diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/CPR b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/CPR deleted file mode 100644 index 4c6d198ba2..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/CPR +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "CPR", - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "I", - "value_type": "INT" - }, - { - "name": "J", - "value_type": "INT" - }, - { - "name": "K", - "value_type": "INT" - } - ], - "sections": [ - "RUNSPEC", - "SUMMARY" - ], - "comment": "in the SimulationConfig() constructor" -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/CRITPERM b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/CRITPERM deleted file mode 100644 index a21198c7a4..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/CRITPERM +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "CRITPERM", - "sections": [ - "GRID" - ], - "size": 1, - "items": [ - { - "name": "VALUE", - "value_type": "DOUBLE", - "dimension": "Permeability" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/CSKIN b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/CSKIN deleted file mode 100644 index 98c46be2e5..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/C/CSKIN +++ /dev/null @@ -1,38 +0,0 @@ -{ - "name": "CSKIN", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "I", - "value_type": "INT", - "default": 0 - }, - { - "name": "J", - "value_type": "INT", - "default": 0 - }, - { - "name": "K_UPPER", - "value_type": "INT", - "default": 0 - }, - { - "name": "K_LOWER", - "value_type": "INT", - "default": 0 - }, - { - "name": "CONNECTION_SKIN_FACTOR", - "value_type": "DOUBLE", - "dimension": "1", - "default": 0 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DATE b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DATE deleted file mode 100644 index b7d702ed9f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DATE +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "DATE", - "sections": [ - "SUMMARY" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DATES b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DATES deleted file mode 100644 index 2112aee6c2..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DATES +++ /dev/null @@ -1,25 +0,0 @@ -{ - "name": "DATES", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "DAY", - "value_type": "INT" - }, - { - "name": "MONTH", - "value_type": "STRING" - }, - { - "name": "YEAR", - "value_type": "INT" - }, - { - "name": "TIME", - "value_type": "STRING", - "default": "00:00:00.000" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DATUM b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DATUM deleted file mode 100644 index a0550cf3a6..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DATUM +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "DATUM", - "sections": [ - "SOLUTION" - ], - "size": 1, - "items": [ - { - "name": "DEPTH", - "value_type": "DOUBLE", - "dimension": "Length" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DATUMR b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DATUMR deleted file mode 100644 index 9d13c046e3..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DATUMR +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name": "DATUMR", - "sections": [ - "SOLUTION" - ], - "size": 1, - "data": { - "name": "DEPTH", - "value_type": "DOUBLE", - "dimension": "Length" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DATUMRX b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DATUMRX deleted file mode 100644 index 19b96193c7..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DATUMRX +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "DATUMRX", - "sections": [ - "SOLUTION" - ], - "items": [ - { - "name": "REGION_FAMILY", - "value_type": "STRING" - }, - { - "name": "DEPTH", - "value_type": "DOUBLE", - "dimension": "Length" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DCQDEFN b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DCQDEFN deleted file mode 100644 index 778d2d541c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DCQDEFN +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "DCQDEFN", - "sections": [ - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "QUANTITY", - "value_type": "STRING", - "default": "GAS" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DEBUG b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DEBUG deleted file mode 100644 index 5c313b0a39..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DEBUG +++ /dev/null @@ -1,454 +0,0 @@ -{ - "name": "DEBUG_", - "sections": [ - "RUNSPEC", - "GRID", - "EDIT", - "PROPS", - "REGIONS", - "SOLUTION", - "SUMMARY", - "SCHEDULE" - ], - "deck_names": [ - "DEBUG" - ], - "size": 1, - "items": [ - { - "name": "Item1", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item2", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item3", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item4", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item5", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item6", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item7", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item8", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item9", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item10", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item11", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item12", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item13", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item14", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item15", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item16", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item17", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item18", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item19", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item20", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item21", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item22", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item23", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item24", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item25", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item26", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item27", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item28", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item29", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item30", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item31", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item32", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item33", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item34", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item35", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item36", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item37", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item38", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item39", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item40", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item41", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item42", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item43", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item44", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item45", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item46", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item47", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item48", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item49", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item50", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item51", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item52", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item53", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item54", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item55", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item56", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item57", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item58", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item59", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item60", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item61", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item62", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item63", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item64", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item65", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item66", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item67", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item68", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item69", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item70", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item71", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item72", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item73", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item74", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item75", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item76", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item77", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item78", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item79", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item80", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item81", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item82", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item83", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item84", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item85", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item86", - "value_type": "INT", - "default": 0 - }, - { - "name": "Item87", - "value_type": "INT", - "default": 0 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DELAYACT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DELAYACT deleted file mode 100644 index 59054749b5..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DELAYACT +++ /dev/null @@ -1,33 +0,0 @@ -{ - "name": "DELAYACT", - "sections": [ - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "ACTION_NAME", - "value_type": "STRING" - }, - { - "name": "ACTION_TRIGGER", - "value_type": "STRING" - }, - { - "name": "DELAY", - "value_type": "DOUBLE", - "dimension": "Time" - }, - { - "name": "NUM_TIMES", - "value_type": "INT", - "default": 1 - }, - { - "name": "INCREMENT", - "value_type": "DOUBLE", - "dimension": "Time", - "default": 0 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DENSITY b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DENSITY deleted file mode 100644 index eb807f982b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DENSITY +++ /dev/null @@ -1,30 +0,0 @@ -{ - "name": "DENSITY", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTPVT" - }, - "items": [ - { - "name": "OIL", - "value_type": "DOUBLE", - "default": 600, - "dimension": "Density" - }, - { - "name": "WATER", - "value_type": "DOUBLE", - "default": 999.014, - "dimension": "Density" - }, - { - "name": "GAS", - "value_type": "DOUBLE", - "default": 1, - "dimension": "Density" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DEPTH b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DEPTH deleted file mode 100644 index 08517afa81..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DEPTH +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "DEPTH", - "sections": [ - "EDIT" - ], - "data": { - "value_type": "DOUBLE" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DEPTHTAB b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DEPTHTAB deleted file mode 100644 index 21f9c8fb73..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DEPTHTAB +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "DEPTHTAB", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "RIVRDIMS", - "item": "NMDEPT" - }, - "items": [ - { - "name": "DATA", - "value_type": "STRING", - "size_type": "ALL" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DEPTHZ b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DEPTHZ deleted file mode 100644 index d980b4d2f3..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DEPTHZ +++ /dev/null @@ -1,11 +0,0 @@ -{ - "name": "DEPTHZ", - "sections": [ - "GRID" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "Length" - }, - "comment": "DEPTHZ is not documented in the Eclipse manual, but found in the SPE1 case" -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIAGDISP b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIAGDISP deleted file mode 100644 index a35dcb0931..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIAGDISP +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "DIAGDISP", - "sections": [ - "PROPS" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIFF b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIFF deleted file mode 100644 index 469ecfbc33..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIFF +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "DIFF", - "sections": [ - "GRID" - ], - "deck_name": [ - "DIFFMR-", - "DIFFMTH-", - "DIFFMX-", - "DIFFMY-", - "DIFFMZ-" - ], - "data": { - "value_type": "DOUBLE", - "default": 1, - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIFFC b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIFFC deleted file mode 100644 index 5a70a81428..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIFFC +++ /dev/null @@ -1,50 +0,0 @@ -{ - "name": "DIFFC", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTPVT" - }, - "items": [ - { - "name": "OIL_MOL_WEIGHT", - "value_type": "DOUBLE" - }, - { - "name": "GAS_MOL_WEIGHT", - "value_type": "DOUBLE" - }, - { - "name": "GAS_GAS_DIFF_COEFF", - "value_type": "DOUBLE", - "dimension": "Length*Length/Time" - }, - { - "name": "OIL_GAS_DIFF_COEFF", - "value_type": "DOUBLE", - "dimension": "Length*Length/Time" - }, - { - "name": "GAS_OIL_DIFF_COEFF", - "value_type": "DOUBLE", - "dimension": "Length*Length/Time" - }, - { - "name": "OIL_OIL_DIFF_COEFF", - "value_type": "DOUBLE", - "dimension": "Length*Length/Time" - }, - { - "name": "GAS_OIL_CROSS_DIFF_COEFF", - "value_type": "DOUBLE", - "dimension": "Length*Length/Time" - }, - { - "name": "OIL_OIL_CROSS_DIFF_COEFF", - "value_type": "DOUBLE", - "dimension": "Length*Length/Time" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIFFCOAL b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIFFCOAL deleted file mode 100644 index 43b6cc8437..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIFFCOAL +++ /dev/null @@ -1,28 +0,0 @@ -{ - "name": "DIFFCOAL", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "REGDIMS", - "item": "NTCREG" - }, - "items": [ - { - "name": "GAS_DIFF_COEFF", - "value_type": "DOUBLE", - "dimension": "Length*Length/Time" - }, - { - "name": "RE_ADSORB_FRACTION", - "value_type": "DOUBLE", - "dimension": "1", - "default": 1 - }, - { - "name": "SOL_DIFF_COEFF", - "value_type": "DOUBLE", - "dimension": "Length*Length/Time" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIFFDP b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIFFDP deleted file mode 100644 index d046a912ce..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIFFDP +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "DIFFDP", - "sections": [ - "PROPS" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIFFMMF b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIFFMMF deleted file mode 100644 index 084a994214..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIFFMMF +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name": "DIFFMMF", - "sections": [ - "GRID", - "SCHEDULE" - ], - "data": { - "value_type": "DOUBLE", - "default": 1, - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIFFMR b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIFFMR deleted file mode 100644 index 11e666aaf7..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIFFMR +++ /dev/null @@ -1,11 +0,0 @@ -{ - "name": "DIFFMR", - "sections": [ - "GRID" - ], - "data": { - "value_type": "DOUBLE", - "default": 1, - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIFFMTHT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIFFMTHT deleted file mode 100644 index a9e1982265..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIFFMTHT +++ /dev/null @@ -1,11 +0,0 @@ -{ - "name": "DIFFMTHT", - "sections": [ - "GRID" - ], - "data": { - "value_type": "DOUBLE", - "default": 1, - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIFFMX b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIFFMX deleted file mode 100644 index b561018bf8..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIFFMX +++ /dev/null @@ -1,11 +0,0 @@ -{ - "name": "DIFFMX", - "sections": [ - "GRID" - ], - "data": { - "value_type": "DOUBLE", - "default": 1, - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIFFMY b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIFFMY deleted file mode 100644 index 8918980826..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIFFMY +++ /dev/null @@ -1,11 +0,0 @@ -{ - "name": "DIFFMY", - "sections": [ - "GRID" - ], - "data": { - "value_type": "DOUBLE", - "default": 1, - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIFFMZ b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIFFMZ deleted file mode 100644 index 506c27dc05..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIFFMZ +++ /dev/null @@ -1,11 +0,0 @@ -{ - "name": "DIFFMZ", - "sections": [ - "GRID" - ], - "data": { - "value_type": "DOUBLE", - "default": 1, - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIFFR b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIFFR deleted file mode 100644 index 8a2b874a55..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIFFR +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "DIFFR", - "sections": [ - "EDIT" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "Length" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIFFTHT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIFFTHT deleted file mode 100644 index 8eb3463928..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIFFTHT +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "DIFFTHT", - "sections": [ - "EDIT" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "Length" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIFFUSE b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIFFUSE deleted file mode 100644 index 2e82e3b026..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIFFUSE +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "DIFFUSE", - "sections": [ - "RUNSPEC" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIFFX b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIFFX deleted file mode 100644 index c2124f80f6..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIFFX +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "DIFFX", - "sections": [ - "EDIT" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "Length" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIFFY b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIFFY deleted file mode 100644 index be24c62852..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIFFY +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "DIFFY", - "sections": [ - "EDIT" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "Length" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIFFZ b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIFFZ deleted file mode 100644 index 9ad8326838..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIFFZ +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "DIFFZ", - "sections": [ - "EDIT" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "Length" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIMENS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIMENS deleted file mode 100644 index 5db9235139..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIMENS +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "DIMENS", - "sections": [ - "RUNSPEC" - ], - "size": 1, - "items": [ - { - "name": "NX", - "value_type": "INT" - }, - { - "name": "NY", - "value_type": "INT" - }, - { - "name": "NZ", - "value_type": "INT" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIMPES b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIMPES deleted file mode 100644 index 968fc1b9da..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIMPES +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "DIMPES", - "sections": [ - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "DSTARG", - "value_type": "DOUBLE", - "dimension": "1", - "default": 0.05 - }, - { - "name": "DSMAX", - "value_type": "DOUBLE", - "dimension": "1", - "default": 0.1 - }, - { - "name": "DPMAX", - "value_type": "DOUBLE", - "dimension": "Pressure", - "default": 13.79 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIMPLICT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIMPLICT deleted file mode 100644 index b3a198a506..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DIMPLICT +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "DIMPLICT", - "sections": [ - "SCHEDULE" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DISGAS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DISGAS deleted file mode 100644 index 9445442a07..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DISGAS +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "DISGAS", - "sections": [ - "RUNSPEC" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DISPDIMS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DISPDIMS deleted file mode 100644 index b1c10582fd..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DISPDIMS +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "DISPDIMS", - "sections": [ - "RUNSPEC" - ], - "size": 1, - "items": [ - { - "name": "NUM_DISP_TABLES", - "value_type": "INT", - "default": 1 - }, - { - "name": "MAX_VELOCITY_NODES", - "value_type": "INT", - "default": 2 - }, - { - "name": "MAX_CONCENTRATION_NODES", - "value_type": "INT", - "default": 1 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DISPERSE b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DISPERSE deleted file mode 100644 index 92249ec7f1..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DISPERSE +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "DISPERSE", - "sections": [ - "PROPS" - ], - "num_tables": { - "keyword": "DISPDIMS", - "item": "MXDIST" - }, - "items": [ - { - "name": "VELOCITY", - "value_type": "DOUBLE", - "dimension": "Length/Time" - }, - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "1", - "Length*Length/Time" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DOMAINS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DOMAINS deleted file mode 100644 index 6518c872c3..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DOMAINS +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "DOMAINS", - "sections": [ - "GRID" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DPGRID b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DPGRID deleted file mode 100644 index 6e18231fdb..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DPGRID +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "DPGRID", - "sections": [ - "GRID" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DPKRMOD b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DPKRMOD deleted file mode 100644 index 97556668c3..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DPKRMOD +++ /dev/null @@ -1,29 +0,0 @@ -{ - "name": "DPKRMOD", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTSFUN" - }, - "items": [ - { - "name": "MOD_OIL_WAT_PERM", - "value_type": "DOUBLE", - "dimension": "1", - "default": 0 - }, - { - "name": "MOD_OIL_GAS_PERM", - "value_type": "DOUBLE", - "dimension": "1", - "default": 0 - }, - { - "name": "SCALE_PERM_FRACTURE", - "value_type": "STRING", - "default": "YES" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DPNUM b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DPNUM deleted file mode 100644 index d2712f97f3..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DPNUM +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "DPNUM", - "sections": [ - "GRID" - ], - "size": 1, - "items": [ - { - "name": "VALUE", - "value_type": "INT", - "size_type": "ALL" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DR b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DR deleted file mode 100644 index 183129a389..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DR +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "DR", - "sections": [ - "GRID" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "Length" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DRILPRI b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DRILPRI deleted file mode 100644 index 7d72287ae0..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DRILPRI +++ /dev/null @@ -1,66 +0,0 @@ -{ - "name": "DRILPRI", - "sections": [ - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "INTERVAL", - "value_type": "DOUBLE", - "dimension": "Time", - "default": 0 - }, - { - "name": "A", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "B", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "C", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "D", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "E", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "F", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "G", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "H", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "LOOK_AHEAD", - "value_type": "DOUBLE", - "dimension": "Time", - "default": 0 - }, - { - "name": "CALCULATION", - "value_type": "STRING", - "default": "SINGLE" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DRSDT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DRSDT deleted file mode 100644 index 3d1392ef7b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DRSDT +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "DRSDT", - "sections": [ - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "DRSDT_MAX", - "value_type": "DOUBLE", - "dimension": "GasDissolutionFactor/Time" - }, - { - "name": "Option", - "value_type": "STRING", - "default": "ALL" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DRSDTR b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DRSDTR deleted file mode 100644 index f1bcdeeeac..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DRSDTR +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "DRSDTR", - "sections": [ - "SCHEDULE" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTPVT" - }, - "items": [ - { - "name": "DRSDT_MAX", - "value_type": "DOUBLE", - "dimension": "GasDissolutionFactor/Time" - }, - { - "name": "Option", - "value_type": "STRING", - "default": "ALL" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DRV b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DRV deleted file mode 100644 index 797e67fb81..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DRV +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "DRV", - "sections": [ - "GRID" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "Length" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DRVDT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DRVDT deleted file mode 100644 index 88dd4a83d5..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DRVDT +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "DRVDT", - "sections": [ - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "DRVDT_MAX", - "value_type": "DOUBLE", - "dimension": "OilDissolutionFactor/Time" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DRVDTR b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DRVDTR deleted file mode 100644 index 18d28822c0..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DRVDTR +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "DRVDTR", - "sections": [ - "SCHEDULE" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTPVT" - }, - "items": [ - { - "name": "DRVDT_MAX", - "value_type": "DOUBLE", - "dimension": "OilDissolutionFactor/Time" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DSPDEINT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DSPDEINT deleted file mode 100644 index 42e52367da..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DSPDEINT +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "DSPDEINT", - "sections": [ - "PROPS" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DTHETA b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DTHETA deleted file mode 100644 index 044ce22a0a..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DTHETA +++ /dev/null @@ -1,11 +0,0 @@ -{ - "name": "DTHETA", - "sections": [ - "GRID" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - }, - "comment": "The values are given in degrees - i.e. [0..360)" -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DTHETAV b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DTHETAV deleted file mode 100644 index 165187cf06..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DTHETAV +++ /dev/null @@ -1,11 +0,0 @@ -{ - "name": "DTHETAV", - "sections": [ - "GRID" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - }, - "comment": "The values are given in degrees - i.e. [0..360)" -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DUALPERM b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DUALPERM deleted file mode 100644 index 62ebe5fd14..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DUALPERM +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "DUALPERM", - "sections": [ - "RUNSPEC" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DUALPORO b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DUALPORO deleted file mode 100644 index 02279ad35f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DUALPORO +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "DUALPORO", - "sections": [ - "RUNSPEC" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DUMPCUPL b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DUMPCUPL deleted file mode 100644 index 5fa85fa7fd..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DUMPCUPL +++ /dev/null @@ -1,13 +0,0 @@ -{ - "name": "DUMPCUPL", - "sections": [ - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "VALUE", - "value_type": "STRING" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DUMPFLUX b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DUMPFLUX deleted file mode 100644 index 3264435d1d..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DUMPFLUX +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "DUMPFLUX", - "sections": [ - "GRID" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DX b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DX deleted file mode 100644 index 677e790e3a..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DX +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "DX", - "sections": [ - "GRID" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "Length" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DXV b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DXV deleted file mode 100644 index 701485f528..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DXV +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "DXV", - "sections": [ - "GRID" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "Length" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DY b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DY deleted file mode 100644 index f0e3ceafad..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DY +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "DY", - "sections": [ - "GRID" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "Length" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DYNAMICR b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DYNAMICR deleted file mode 100644 index a117e30ec2..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DYNAMICR +++ /dev/null @@ -1,11 +0,0 @@ -{ - "name": "DYNAMICR", - "sections": [ - "SOLUTION", - "SCHEDULE" - ], - "comment": "Note: this only makes it possible to parse files with DYNAMICR keywords. Apart from that, this keyword is not supported.", - "code": { - "end": "ENDDYN" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DYNRDIMS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DYNRDIMS deleted file mode 100644 index 32519b2292..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DYNRDIMS +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "DYNRDIMS", - "sections": [ - "RUNSPEC" - ], - "size": 1, - "items": [ - { - "name": "MNUMDR", - "value_type": "INT", - "default": 0 - }, - { - "name": "MXDYNF", - "value_type": "INT", - "default": 0 - }, - { - "name": "MXDYNR", - "value_type": "INT", - "default": 0 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DYV b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DYV deleted file mode 100644 index 0e10a4af17..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DYV +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "DYV", - "sections": [ - "GRID" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "Length" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DZ b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DZ deleted file mode 100644 index 4c06428ea2..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DZ +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "DZ", - "sections": [ - "GRID" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "Length" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DZMATRIX b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DZMATRIX deleted file mode 100644 index ccf8d472ca..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DZMATRIX +++ /dev/null @@ -1,11 +0,0 @@ -{ - "name": "DZMATRIX", - "sections": [ - "GRID" - ], - "data": { - "value_type": "DOUBLE", - "default": 0, - "dimension": "Length" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DZMTRX b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DZMTRX deleted file mode 100644 index 6698ea6f1b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DZMTRX +++ /dev/null @@ -1,11 +0,0 @@ -{ - "name": "DZMTRX", - "sections": [ - "GRID" - ], - "data": { - "value_type": "DOUBLE", - "default": 0, - "dimension": "Length" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DZMTRXV b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DZMTRXV deleted file mode 100644 index 7c3ec87be1..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DZMTRXV +++ /dev/null @@ -1,11 +0,0 @@ -{ - "name": "DZMTRXV", - "sections": [ - "GRID" - ], - "data": { - "value_type": "DOUBLE", - "default": 0, - "dimension": "Length" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DZNET b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DZNET deleted file mode 100644 index 3bb2ef5c75..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/D/DZNET +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "DZNET", - "sections": [ - "GRID" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "Length" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/ECHO b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/ECHO deleted file mode 100644 index f7bd0d541c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/ECHO +++ /dev/null @@ -1,13 +0,0 @@ -{ - "name": "ECHO", - "sections": [ - "RUNSPEC", - "GRID", - "EDIT", - "PROPS", - "REGIONS", - "SOLUTION", - "SUMMARY", - "SCHEDULE" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/ECLMC b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/ECLMC deleted file mode 100644 index cb5bde571c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/ECLMC +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "ECLMC", - "sections": [ - "RUNSPEC" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EDIT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EDIT deleted file mode 100644 index 49c52f29e7..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EDIT +++ /dev/null @@ -1,4 +0,0 @@ -{ - "name": "EDIT", - "sections": [] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EDITNNC b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EDITNNC deleted file mode 100644 index 813d3c3722..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EDITNNC +++ /dev/null @@ -1,70 +0,0 @@ -{ - "name": "EDITNNC", - "sections": [ - "EDIT" - ], - "items": [ - { - "name": "I1", - "value_type": "INT" - }, - { - "name": "J1", - "value_type": "INT" - }, - { - "name": "K1", - "value_type": "INT" - }, - { - "name": "I2", - "value_type": "INT" - }, - { - "name": "J2", - "value_type": "INT" - }, - { - "name": "K2", - "value_type": "INT" - }, - { - "name": "TRAN_MULT", - "value_type": "DOUBLE", - "default_value": 1 - }, - { - "name": "SAT_TABLE12", - "value_type": "INT", - "default_value": 0 - }, - { - "name": "SAT_TABLE21", - "value_type": "INT", - "default_value": 0 - }, - { - "name": "PRESS_TABLE12", - "value_type": "INT", - "default_value": 0 - }, - { - "name": "PRESS_TABLE21", - "value_type": "INT", - "default_value": 0 - }, - { - "name": "FACE_FLOW12", - "value_type": "STRING" - }, - { - "name": "FACE_FLOW21", - "value_type": "STRING" - }, - { - "name": "DIFFM", - "value_type": "DOUBLE", - "default_value": 1 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EDITNNCR b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EDITNNCR deleted file mode 100644 index 2572afecd3..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EDITNNCR +++ /dev/null @@ -1,70 +0,0 @@ -{ - "name": "EDITNNCR", - "sections": [ - "EDIT" - ], - "items": [ - { - "name": "I1", - "value_type": "INT" - }, - { - "name": "J1", - "value_type": "INT" - }, - { - "name": "K1", - "value_type": "INT" - }, - { - "name": "I2", - "value_type": "INT" - }, - { - "name": "J2", - "value_type": "INT" - }, - { - "name": "K2", - "value_type": "INT" - }, - { - "name": "TRANS", - "value_type": "DOUBLE", - "default_value": 1 - }, - { - "name": "SAT_TABLE12", - "value_type": "INT", - "default_value": 0 - }, - { - "name": "SAT_TABLE21", - "value_type": "INT", - "default_value": 0 - }, - { - "name": "PRESS_TABLE12", - "value_type": "INT", - "default_value": 0 - }, - { - "name": "PRESS_TABLE21", - "value_type": "INT", - "default_value": 0 - }, - { - "name": "FACE_FLOW12", - "value_type": "STRING" - }, - { - "name": "FACE_FLOW21", - "value_type": "STRING" - }, - { - "name": "DIFF", - "value_type": "DOUBLE", - "dimension": "Length" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EHYSTR b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EHYSTR deleted file mode 100644 index b23cda93db..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EHYSTR +++ /dev/null @@ -1,70 +0,0 @@ -{ - "name": "EHYSTR", - "sections": [ - "PROPS" - ], - "size": 1, - "items": [ - { - "name": "curvature_caplillary_pressure_hyst", - "value_type": "DOUBLE", - "default": 0.1 - }, - { - "name": "relative_perm_hyst", - "value_type": "INT", - "default": 0, - "comment": "Default is 2 for Eclipse300" - }, - { - "name": "curvature_param_killough_wetting", - "value_type": "DOUBLE", - "default": 1 - }, - { - "name": "mod_param_trapped", - "value_type": "DOUBLE", - "default": 0.1 - }, - { - "name": "limiting_hyst_flag", - "value_type": "STRING", - "default": "BOTH" - }, - { - "name": "shape_cap_press_flag", - "value_type": "STRING", - "default": "RETR" - }, - { - "name": "init_fluid_mob_flag", - "value_type": "STRING", - "default": "DRAIN" - }, - { - "name": "wetting_phase_flag", - "value_type": "STRING", - "default": "OIL" - }, - { - "name": "baker_flag_oil", - "value_type": "STRING", - "default": "NO" - }, - { - "name": "baker_flag_gas", - "value_type": "STRING", - "default": "NO" - }, - { - "name": "baker_flag_water", - "value_type": "STRING", - "default": "NO" - }, - { - "name": "threshold_saturation", - "value_type": "DOUBLE", - "default": 0 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EHYSTRR b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EHYSTRR deleted file mode 100644 index 2d92740f9e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EHYSTRR +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "EHYSTRR", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTSFUN" - }, - "items": [ - { - "name": "curvature_caplillary_pressure_hyst", - "value_type": "DOUBLE", - "default": 0.1 - }, - { - "name": "curvature_parameter_wetting_phase_hyst", - "value_type": "DOUBLE", - "default": 1 - }, - { - "name": "mod_param_non_wet_phase_sat", - "value_type": "DOUBLE", - "default": 0.1 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/END b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/END deleted file mode 100644 index 34a87a5d3f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/END +++ /dev/null @@ -1,13 +0,0 @@ -{ - "name": "END", - "sections": [ - "RUNSPEC", - "GRID", - "EDIT", - "PROPS", - "REGIONS", - "SOLUTION", - "SUMMARY", - "SCHEDULE" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/ENDACTIO b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/ENDACTIO deleted file mode 100644 index 2eab36588a..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/ENDACTIO +++ /dev/null @@ -1,7 +0,0 @@ -{ - "name": "ENDACTIO", - "sections": [ - "SCHEDULE" - ], - "size": 0 -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/ENDBOX b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/ENDBOX deleted file mode 100644 index 898eafaf86..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/ENDBOX +++ /dev/null @@ -1,11 +0,0 @@ -{ - "name": "ENDBOX", - "sections": [ - "GRID", - "EDIT", - "PROPS", - "REGIONS", - "SOLUTION", - "SCHEDULE" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/ENDDYN b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/ENDDYN deleted file mode 100644 index cdc188ed99..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/ENDDYN +++ /dev/null @@ -1,7 +0,0 @@ -{ - "name": "ENDDYN", - "sections": [ - "SOLUTION", - "SCHEDULE" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/ENDFIN b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/ENDFIN deleted file mode 100644 index f0846ffc46..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/ENDFIN +++ /dev/null @@ -1,11 +0,0 @@ -{ - "name": "ENDFIN", - "sections": [ - "GRID", - "EDIT", - "PROPS", - "REGIONS", - "SOLUTION", - "SCHEDULE" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/ENDINC b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/ENDINC deleted file mode 100644 index 9faff1b3d1..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/ENDINC +++ /dev/null @@ -1,13 +0,0 @@ -{ - "name": "ENDINC", - "sections": [ - "RUNSPEC", - "GRID", - "EDIT", - "PROPS", - "REGIONS", - "SOLUTION", - "SUMMARY", - "SCHEDULE" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/ENDNUM b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/ENDNUM deleted file mode 100644 index 3d4f5f407e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/ENDNUM +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "ENDNUM", - "sections": [ - "REGIONS" - ], - "data": { - "value_type": "INT" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/ENDPOINT_SPECIFIERS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/ENDPOINT_SPECIFIERS deleted file mode 100644 index 40497e609f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/ENDPOINT_SPECIFIERS +++ /dev/null @@ -1,205 +0,0 @@ -{ - "name": "ENDPOINT_SPECIFIERS", - "sections": [ - "PROPS" - ], - "deck_names": [ - "KRG", - "KRGX", - "KRGY", - "KRGZ", - "KRGX-", - "KRGY-", - "KRGZ-", - "KRGR", - "KRGRX", - "KRGRY", - "KRGRZ", - "KRGRX-", - "KRGRY-", - "KRGRZ-", - "IKRG", - "IKRGX", - "IKRGY", - "IKRGZ", - "IKRGX-", - "IKRGY-", - "IKRGZ-", - "IKRGR", - "IKRGRX", - "IKRGRY", - "IKRGRZ", - "IKRGRX-", - "IKRGRY-", - "IKRGRZ-", - "KRO", - "KROX", - "KROY", - "KROZ", - "KROX-", - "KROY-", - "KROZ-", - "KRORW", - "KRORWX", - "KRORWY", - "KRORWZ", - "KRORWX-", - "KRORWY-", - "KRORWZ-", - "KRORG", - "KRORGX", - "KRORGY", - "KRORGZ", - "KRORGX-", - "KRORGY-", - "KRORGZ-", - "IKRO", - "IKROX-", - "IKROY-", - "IKROZ-", - "IKRORW", - "IKRORWX", - "IKRORWY", - "IKRORWZ", - "IKRORWX-", - "IKRORWY-", - "IKRORWZ-", - "IKRORG", - "IKRORGX", - "IKRORGY", - "IKRORGZ", - "IKRORGX-", - "IKRORGY-", - "IKRORGZ-", - "KRW", - "KRWX", - "KRWY", - "KRWZ", - "KRWX-", - "KRWY-", - "KRWZ-", - "KRWR", - "KRWRX", - "KRWRY", - "KRWRZ", - "KRWRX-", - "KRWRY-", - "KRWRZ-", - "IKRW", - "IKRWX", - "IKRWY", - "IKRWZ", - "IKRWX-", - "IKRWY-", - "IKRWZ-", - "IKRWR", - "IKRWRX", - "IKRWRY", - "IKRWRZ", - "IKRWRX-", - "IKRWRY-", - "IKRWRZ-", - "SWL", - "ISWL", - "SWLX", - "SWLX-", - "ISWLX", - "ISWLX-", - "SWLY", - "SWLY-", - "ISWLY", - "ISWLY-", - "SWLZ", - "SWLZ-", - "ISWLZ", - "ISWLZ-", - "SGU", - "ISGU", - "SGUX", - "SGUX-", - "ISGUX", - "ISGUX-", - "SGUY", - "SGUY-", - "ISGUY", - "ISGUY-", - "SGUZ", - "SGUZ-", - "ISGUZ", - "ISGUZ-", - "SWU", - "ISWU", - "SWUX", - "SWUX-", - "ISWUX", - "ISWUX-", - "SWUY", - "SWUY-", - "ISWUY", - "SWUY-", - "ISWUY", - "ISWUY-", - "SWUZ", - "SWUZ-", - "ISWUZ", - "ISWUZ-", - "SGCR", - "ISGCR", - "SGCRX", - "SGCRX-", - "ISGCRX", - "ISGCRX-", - "SGCRY", - "SGCRY-", - "ISGCRY", - "ISGCRY-", - "SGCRZ", - "SGCRZ-", - "ISGCRZ", - "ISGCRZ-", - "SOWCR", - "ISOWCR", - "SOWCRX", - "SOWCRX-", - "ISOWCRX", - "ISOWCRX-", - "SOWCRY", - "SOWCRY-", - "ISOWCRY", - "ISOWCRY-", - "SOWCRZ", - "SOWCRZ-", - "ISOWCRZ", - "ISOWCRZ-", - "SOGCR", - "ISOGCR", - "SOGCRX", - "SOGCRX-", - "ISOGCRX", - "ISOGCRX-", - "SOGCRY", - "SOGCRY-", - "ISOGCRY", - "ISOGCRY-", - "SOGCRZ", - "SOGCRZ-", - "ISOGCRZ", - "ISOGCRZ-", - "SWCR", - "ISWCR", - "SWCRX", - "SWCRX-", - "ISWCRX", - "ISWCRX-", - "SWCRY", - "SWCRY-", - "SWCRZ", - "SWCRZ-", - "ISWCRZ", - "ISWCRZ-" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/ENDSCALE b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/ENDSCALE deleted file mode 100644 index 3d40b182ff..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/ENDSCALE +++ /dev/null @@ -1,34 +0,0 @@ -{ - "name": "ENDSCALE", - "sections": [ - "RUNSPEC" - ], - "size": 1, - "items": [ - { - "name": "DIRECT", - "value_type": "STRING", - "default": "NODIR" - }, - { - "name": "IRREVERS", - "value_type": "STRING", - "default": "REVERS" - }, - { - "name": "NUM_TABLES", - "value_type": "INT", - "default": 1 - }, - { - "name": "NUM_NODES", - "value_type": "INT", - "default": 20 - }, - { - "name": "COMB_MODE", - "value_type": "INT", - "default": 0 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/ENDSKIP b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/ENDSKIP deleted file mode 100644 index 102a5b4bf8..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/ENDSKIP +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "ENDSKIP", - "size": 0, - "sections": [ - "RUNSPEC", - "GRID", - "EDIT", - "PROPS", - "REGIONS", - "SOLUTION", - "SUMMARY", - "SCHEDULE" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/ENKRVD b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/ENKRVD deleted file mode 100644 index 89f3f1354f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/ENKRVD +++ /dev/null @@ -1,28 +0,0 @@ -{ - "name": "ENKRVD", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "ENDSCALE", - "item": "NUM_TABLES" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "default": -1, - "size_type": "ALL", - "dimension": [ - "Length", - "1", - "1", - "1", - "1", - "1", - "1", - "1" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/ENPCVD b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/ENPCVD deleted file mode 100644 index 87962e3ef2..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/ENPCVD +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "ENPCVD", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "ENDSCALE", - "item": "NUM_TABLES" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "default": -1, - "dimension": [ - "Length", - "Pressure", - "Pressure" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/ENPTVD b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/ENPTVD deleted file mode 100644 index c362633c6f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/ENPTVD +++ /dev/null @@ -1,29 +0,0 @@ -{ - "name": "ENPTVD", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "ENDSCALE", - "item": "NUM_TABLES" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "default": -1, - "size_type": "ALL", - "dimension": [ - "Length", - "1", - "1", - "1", - "1", - "1", - "1", - "1", - "1" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/ENSPCVD b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/ENSPCVD deleted file mode 100644 index 3f01f66909..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/ENSPCVD +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "ENSPCVD", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "ENDSCALE", - "item": "NUM_TABLES" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "default": -1, - "dimension": [ - "Length", - "1", - "1" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EPSDBGS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EPSDBGS deleted file mode 100644 index f9e35bebfd..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EPSDBGS +++ /dev/null @@ -1,52 +0,0 @@ -{ - "name": "EPSDBGS", - "sections": [ - "PROPS", - "SCHEDULE" - ], - "records": [ - [ - { - "name": "TABLE_OUTPUT", - "value_type": "INT", - "default": 0 - }, - { - "name": "CHECK_DRAIN_HYST", - "value_type": "INT", - "default": 0 - } - ], - [ - { - "name": "IX1", - "value_type": "INT" - }, - { - "name": "IX2", - "value_type": "INT" - }, - { - "name": "JY1", - "value_type": "INT" - }, - { - "name": "JY2", - "value_type": "INT" - }, - { - "name": "KZ1", - "value_type": "INT" - }, - { - "name": "KZ2", - "value_type": "INT" - }, - { - "name": "GRID_NAME", - "value_type": "STRING", - "default": "" - } - ] - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EPSDEBUG b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EPSDEBUG deleted file mode 100644 index 9a9f0249e4..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EPSDEBUG +++ /dev/null @@ -1,49 +0,0 @@ -{ - "name": "EPSDEBUG", - "sections": [ - "PROPS", - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "IX1", - "value_type": "INT" - }, - { - "name": "IX2", - "value_type": "INT" - }, - { - "name": "JY1", - "value_type": "INT" - }, - { - "name": "JY2", - "value_type": "INT" - }, - { - "name": "KZ1", - "value_type": "INT" - }, - { - "name": "KZ2", - "value_type": "INT" - }, - { - "name": "TABLE_OUTPUT", - "value_type": "INT", - "default": 0 - }, - { - "name": "GRID_NAME", - "value_type": "STRING", - "default": "" - }, - { - "name": "CHECK_DRAIN_HYST", - "value_type": "INT", - "default": 0 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EQLDIMS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EQLDIMS deleted file mode 100644 index 4e18b728ad..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EQLDIMS +++ /dev/null @@ -1,34 +0,0 @@ -{ - "name": "EQLDIMS", - "sections": [ - "RUNSPEC" - ], - "size": 1, - "items": [ - { - "name": "NTEQUL", - "value_type": "INT", - "default": 1 - }, - { - "name": "DEPTH_NODES_P", - "value_type": "INT", - "default": 100 - }, - { - "name": "DEPTH_NODES_TAB", - "value_type": "INT", - "default": 20 - }, - { - "name": "NTTRVD", - "value_type": "INT", - "default": 1 - }, - { - "name": "NSTRVD", - "value_type": "INT", - "default": 20 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EQLNUM b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EQLNUM deleted file mode 100644 index 75d234377c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EQLNUM +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "EQLNUM", - "sections": [ - "REGIONS" - ], - "data": { - "value_type": "INT" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EQLOPTS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EQLOPTS deleted file mode 100644 index 4561c696e4..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EQLOPTS +++ /dev/null @@ -1,25 +0,0 @@ -{ - "name": "EQLOPTS", - "sections": [ - "RUNSPEC" - ], - "size": 1, - "items": [ - { - "name": "OPTION1", - "value_type": "STRING" - }, - { - "name": "OPTION2", - "value_type": "STRING" - }, - { - "name": "OPTION3", - "value_type": "STRING" - }, - { - "name": "OPTION4", - "value_type": "STRING" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EQLZCORN b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EQLZCORN deleted file mode 100644 index 411b17dc4e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EQLZCORN +++ /dev/null @@ -1,58 +0,0 @@ -{ - "name": "EQLZCORN", - "sections": [ - "GRID" - ], - "items": [ - { - "name": "VALUE_ZCORN_ARRAY", - "value_type": "DOUBLE", - "dimension": "Length" - }, - { - "name": "IX1", - "value_type": "INT" - }, - { - "name": "IX2", - "value_type": "INT" - }, - { - "name": "JY1", - "value_type": "INT" - }, - { - "name": "JY2", - "value_type": "INT" - }, - { - "name": "KZ1", - "value_type": "INT" - }, - { - "name": "KZ2", - "value_type": "INT" - }, - { - "name": "IX1A", - "value_type": "INT" - }, - { - "name": "IX2A", - "value_type": "INT" - }, - { - "name": "JY1A", - "value_type": "INT" - }, - { - "name": "JY2A", - "value_type": "INT" - }, - { - "name": "ACTION_REQ", - "value_type": "STRING", - "default": "TOP" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EQUALREG b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EQUALREG deleted file mode 100644 index cb3b736559..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EQUALREG +++ /dev/null @@ -1,34 +0,0 @@ -{ - "name": "EQUALREG", - "sections": [ - "GRID", - "EDIT", - "PROPS", - "REGIONS", - "SOLUTION" - ], - "items": [ - { - "name": "ARRAY", - "value_type": "STRING", - "description": "The 3D array we will update" - }, - { - "name": "VALUE", - "value_type": "DOUBLE", - "description": "The value we will assign", - "default": 0 - }, - { - "name": "REGION_NUMBER", - "value_type": "INT", - "description": "The region number we are interested in" - }, - { - "name": "REGION_NAME", - "value_type": "STRING", - "description": "The name of the region we are interested in", - "default": "M" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EQUALS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EQUALS deleted file mode 100644 index c13c65827c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EQUALS +++ /dev/null @@ -1,44 +0,0 @@ -{ - "name": "EQUALS", - "sections": [ - "GRID", - "EDIT", - "PROPS", - "REGIONS", - "SOLUTION" - ], - "items": [ - { - "name": "field", - "value_type": "STRING" - }, - { - "name": "value", - "value_type": "DOUBLE" - }, - { - "name": "I1", - "value_type": "INT" - }, - { - "name": "I2", - "value_type": "INT" - }, - { - "name": "J1", - "value_type": "INT" - }, - { - "name": "J2", - "value_type": "INT" - }, - { - "name": "K1", - "value_type": "INT" - }, - { - "name": "K2", - "value_type": "INT" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EQUIL b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EQUIL deleted file mode 100644 index 2cdb9e3710..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EQUIL +++ /dev/null @@ -1,65 +0,0 @@ -{ - "name": "EQUIL", - "sections": [ - "SOLUTION" - ], - "size": { - "keyword": "EQLDIMS", - "item": "NTEQUL" - }, - "description": "The EQUIL item is used when equilibrationg the model. The item should consist of one record for each PVT region", - "items": [ - { - "name": "DATUM_DEPTH", - "value_type": "DOUBLE", - "default": 0, - "dimension": "Length" - }, - { - "name": "DATUM_PRESSURE", - "value_type": "DOUBLE", - "dimension": "Pressure" - }, - { - "name": "OWC", - "value_type": "DOUBLE", - "default": 0, - "dimension": "Length", - "description": "The OWC item is depth of the OIL Water contact. This should ..." - }, - { - "name": "PC_OWC", - "value_type": "DOUBLE", - "default": 0, - "dimension": "Pressure" - }, - { - "name": "GOC", - "value_type": "DOUBLE", - "default": 0, - "dimension": "Length" - }, - { - "name": "PC_GOC", - "value_type": "DOUBLE", - "default": 0, - "dimension": "Pressure" - }, - { - "name": "BLACK_OIL_INIT", - "value_type": "INT", - "default": 0 - }, - { - "name": "BLACK_OIL_INIT_WG", - "value_type": "INT", - "default": 0 - }, - { - "name": "OIP_INIT", - "value_type": "INT", - "default": -5, - "comment": "The default is a state variable" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/ESSNODE b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/ESSNODE deleted file mode 100644 index c9d32bc633..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/ESSNODE +++ /dev/null @@ -1,20 +0,0 @@ -{ - "name": "ESSNODE", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTPVT" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "Density" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EXCAVATE b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EXCAVATE deleted file mode 100644 index 496621ffe8..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EXCAVATE +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "EXCAVATE", - "sections": [ - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "DATA", - "value_type": "INT", - "size_type": "ALL" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EXCEL b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EXCEL deleted file mode 100644 index f880efa203..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EXCEL +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "EXCEL", - "sections": [ - "SUMMARY" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EXTFIN b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EXTFIN deleted file mode 100644 index dfbe0852f3..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EXTFIN +++ /dev/null @@ -1,49 +0,0 @@ -{ - "name": "EXTFIN", - "sections": [ - "GRID" - ], - "size": 1, - "items": [ - { - "name": "LOCAL_GRID_REF", - "value_type": "STRING" - }, - { - "name": "NX", - "value_type": "INT" - }, - { - "name": "NY", - "value_type": "INT" - }, - { - "name": "NZ", - "value_type": "INT" - }, - { - "name": "NREPG", - "value_type": "INT" - }, - { - "name": "NHALO", - "value_type": "INT" - }, - { - "name": "NFLOG", - "value_type": "INT" - }, - { - "name": "NUMINT", - "value_type": "INT" - }, - { - "name": "NUMCON", - "value_type": "INT" - }, - { - "name": "NWMAX", - "value_type": "INT" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EXTHOST b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EXTHOST deleted file mode 100644 index e92b2fa0e2..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EXTHOST +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "EXTHOST", - "sections": [ - "GRID" - ], - "data": { - "value_type": "INT" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EXTRAPMS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EXTRAPMS deleted file mode 100644 index c2c43b0220..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EXTRAPMS +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "EXTRAPMS", - "sections": [ - "RUNSPEC", - "GRID", - "PROPS", - "REGIONS", - "SOLUTION", - "SUMMARY", - "EDIT", - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "LEVEL", - "value_type": "INT", - "default": 0 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EXTREPGL b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EXTREPGL deleted file mode 100644 index 685d09a524..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/E/EXTREPGL +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "EXTREPGL", - "sections": [ - "GRID" - ], - "data": { - "value_type": "INT" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FAULTDIM b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FAULTDIM deleted file mode 100644 index 2c3d14ff2b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FAULTDIM +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "FAULTDIM", - "sections": [ - "RUNSPEC" - ], - "size": 1, - "items": [ - { - "name": "MFSEGS", - "value_type": "INT", - "default": 0 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FAULTS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FAULTS deleted file mode 100644 index 090b0ee513..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FAULTS +++ /dev/null @@ -1,40 +0,0 @@ -{ - "name": "FAULTS", - "sections": [ - "GRID" - ], - "items": [ - { - "name": "NAME", - "value_type": "STRING" - }, - { - "name": "IX1", - "value_type": "INT" - }, - { - "name": "IX2", - "value_type": "INT" - }, - { - "name": "IY1", - "value_type": "INT" - }, - { - "name": "IY2", - "value_type": "INT" - }, - { - "name": "IZ1", - "value_type": "INT" - }, - { - "name": "IZ2", - "value_type": "INT" - }, - { - "name": "FACE", - "value_type": "STRING" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FBHPDEF b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FBHPDEF deleted file mode 100644 index 94479f5922..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FBHPDEF +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "FBHPDEF", - "sections": [ - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "TARGET_BHP", - "value_type": "DOUBLE", - "dimension": "Length" - }, - { - "name": "LIMIT_BHP", - "value_type": "DOUBLE", - "dimension": "Pressure" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FHERCHBL b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FHERCHBL deleted file mode 100644 index a69ad64e4b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FHERCHBL +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "FHERCHBL", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "NNEWTF", - "item": "NTHRBL" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "Density", - "1", - "1", - "Pressure" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FIELD b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FIELD deleted file mode 100644 index 4644a43a85..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FIELD +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "FIELD", - "sections": [ - "RUNSPEC" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FIELD_PROBE b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FIELD_PROBE deleted file mode 100644 index 8259a32b70..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FIELD_PROBE +++ /dev/null @@ -1,287 +0,0 @@ -{ - "name": "FIELD_PROBE", - "sections": [ - "SUMMARY" - ], - "comment": "Tracer keywords where the 2nd letter is a 'T' should be compounded with the tracer name", - "deck_names": [ - "FOPR", - "FOPRH", - "FOPRT", - "FOPRF", - "FOPRS", - "FOPT", - "FOPTH", - "FOPTF", - "FOPTS", - "FOIR", - "FOIRH", - "FOIRT", - "FOIT", - "FOITH", - "FOPP", - "FOPP2", - "FOPI", - "FOPI2", - "FWPR", - "FWPRH", - "FWPRT", - "FWPT", - "FWPTH", - "FWIR", - "FWIRH", - "FWIRT", - "FWIT", - "FWITH", - "FWPP", - "FWPP2", - "FWPI", - "FWPI2", - "FWPIR", - "FGPR", - "FGPRH", - "FGPRT", - "FGPRF", - "FGPRS", - "FGPT", - "FGPTH", - "FGPTF", - "FGPTS", - "FGIR", - "FGIRH", - "FGIRT", - "FGIT", - "FGITH", - "FGPP", - "FGPP2", - "FGPPS", - "FGPPS2", - "FGPPF", - "FGPPF2", - "FGPI", - "FGPI2", - "FSGR", - "FGSR", - "FSGT", - "FGST", - "FGCR", - "FGCT", - "FGIMR", - "FGIMT", - "FGLIR", - "FGQ", - "FLPR", - "FLPRH", - "FLPRT", - "FLPT", - "FLPTH", - "FJPR", - "FJPRH", - "FJPRT", - "FJPT", - "FJPTH", - "FVPR", - "FVPRT", - "FVPT", - "FVIR", - "FVIRT", - "FVIT", - "FWCT", - "FWCTH", - "FGOR", - "FGORH", - "FOGR", - "FOGRH", - "FWGR", - "FWGRH", - "FGLR", - "FGLRH", - "FMCTP", - "FMCTW", - "FMCTG", - "FMWPT", - "FMWPR", - "FMWPA", - "FMWPU", - "FMWPG", - "FMWPO", - "FMWPS", - "FMWPV", - "FMWPP", - "FMWPL", - "FMWIT", - "FMWIN", - "FMWIA", - "FMWIU", - "FMWIG", - "FMWIS", - "FMWIV", - "FMWIP", - "FMWDR", - "FMWDT", - "FMWWO", - "FMWWT", - "FEPR", - "FEPT", - "FGSPR", - "FGSRL", - "FGSRU", - "FGSSP", - "FGSTP", - "FOSPR", - "FOSRL", - "FOSRU", - "FOSSP", - "FOSTP", - "FWSPR", - "FWSRL", - "FWSRU", - "FWSSP", - "FWSTP", - "FOSAT", - "FOIP", - "FOIPL", - "FOIPG", - "FPPO", - "FOVIS", - "FODEN", - "FWSAT", - "FWIP", - "FPPW", - "FWVIS", - "FWDEN", - "FGSAT", - "FGIP", - "FGIPL", - "FGIPG", - "FPPG", - "FGVIS", - "FGDEN", - "FPR", - "FPRH", - "FPRP", - "FPRGZ", - "FRS", - "FRV", - "FPPC", - "FRPV", - "FOPV", - "FWPV", - "FGPV", - "FHPV", - "FRTM", - "FOE", - "FOEW", - "FOEIW", - "FOEWW", - "FOEIG", - "FOEWG", - "FORMR", - "FORMW", - "FORMG", - "FORME", - "FORMS", - "FORMF", - "FORMX", - "FORMY", - "FORFR", - "FORFW", - "FORFG", - "FORFE", - "FORFS", - "FORFF", - "FORFX", - "FORFY", - "FAQR", - "FAQT", - "FAQRG", - "FAQTG", - "FNQR", - "FNQT", - "FAPI", - "FSPR", - "FSPT", - "FSIR", - "FSIT", - "FSPC", - "FSIC", - "FSIP", - "FTPRANI", - "FTPTANI", - "FTIRANI", - "FTITANI", - "FTPRCAT", - "FTPTCAT", - "FTIRCAT", - "FTITCAT", - "FTPCHEA", - "FTICHEA", - "FTPRHEA", - "FTPTHEA", - "FTIRHEA", - "FTITHEA", - "FTIPTHEA", - "FMPR", - "FMPT", - "FMIR", - "FMIT", - "FCGC", - "FCSC", - "FTPRFOA", - "FTPTFOA", - "FTIRFOA", - "FTITFOA", - "FTIPTFOA", - "FTADSFOA", - "FTDCYFOA", - "FTMOBFOA", - "FSGR", - "FGSR", - "FSGT", - "FGST", - "FGDC", - "FGDCQ", - "FGCR", - "FGCT", - "FGIMR", - "FGIMT", - "FGLIR", - "FGQ", - "FEPR", - "FEPT", - "FCPR", - "FCPC", - "FCPT", - "FCIR", - "FCIC", - "FCIT", - "FCIP", - "FCAD", - "FSPR", - "FSPT", - "FSIR", - "FSIT", - "FSIP", - "PSSPR", - "PSSSO", - "PSSSW", - "PSSSG", - "PSSSC", - "FNPR", - "FNPT", - "FNIR", - "FNIT", - "FNIP", - "FTPRSUR", - "FTPTSUR", - "FTIRSUR", - "FTITSUR", - "FTIPTSUR", - "FTADSUR", - "FTPRALK", - "FTPTALK", - "FTIRALK", - "FTITALK" - ], - "deck_name_regex": "FU.+|FTPR.+|FTPT.+|FTPC.+|FTIR.+|FTIT.+|FTIC.+|FTIPT.+|FTIPF.+|FTIPS|FTIP[1-9][0-9]*.+|FTPR.+|FTPT.+|FTPC.+|FTIR.+|FTIT.+|FTIC.+|FTADS.+|FTDCY.+|FTIRF.+|FTIRS.+|FTPRF.+|FTPRS.+|FTITF.+|FTITS.+|FTPTF.+|FTPTS.+|FTICF.+|FTICS.+|FTPCF.+|FTPCS.+" -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FILEUNIT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FILEUNIT deleted file mode 100644 index 1b6cc981c8..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FILEUNIT +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "FILEUNIT", - "sections": [ - "GRID", - "EDIT", - "PROPS", - "REGIONS", - "SOLUTION", - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "FILE_UNIT_SYSTEM", - "value_type": "STRING" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FILLEPS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FILLEPS deleted file mode 100644 index 53902ac06e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FILLEPS +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "FILLEPS", - "sections": [ - "PROPS" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FIPNUM b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FIPNUM deleted file mode 100644 index bfdd0a81b3..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FIPNUM +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "FIPNUM", - "sections": [ - "REGIONS" - ], - "data": { - "value_type": "INT" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FIPOWG b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FIPOWG deleted file mode 100644 index c4d93b4622..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FIPOWG +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "FIPOWG", - "sections": [ - "REGIONS" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FIPSEP b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FIPSEP deleted file mode 100644 index f1fd55b616..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FIPSEP +++ /dev/null @@ -1,62 +0,0 @@ -{ - "name": "FIPSEP", - "sections": [ - "SOLUTION" - ], - "items": [ - { - "name": "FLUID_IN_PLACE_REGION", - "value_type": "INT" - }, - { - "name": "STAGE_INDEX", - "value_type": "INT" - }, - { - "name": "STAGE_TEMPERATURE", - "value_type": "DOUBLE", - "dimension": "Temperature", - "default": 15.56 - }, - { - "name": "STAGE_PRESSURE", - "value_type": "DOUBLE", - "dimension": "Pressure", - "default": 1.01325 - }, - { - "name": "DESTINATION_OUPUT", - "value_type": "INT", - "default": 0 - }, - { - "name": "DESTINATION_STAGE", - "value_type": "INT", - "default": 0 - }, - { - "name": "K_VAL_TABLE_NUM", - "value_type": "INT", - "default": 0 - }, - { - "name": "GAS_PLANT_TABLE_NUM", - "value_type": "INT", - "default": 0 - }, - { - "name": "SURF_EQ_STATE_NUM", - "value_type": "INT" - }, - { - "name": "DENSITY_EVAL_GAS_TEMP", - "value_type": "DOUBLE", - "dimension": "Temperature" - }, - { - "name": "DENSITY_EVAL_PRESSURE_TEMP", - "value_type": "DOUBLE", - "dimension": "Pressure" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FIP_PROBE b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FIP_PROBE deleted file mode 100644 index 61d650905b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FIP_PROBE +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "FIP_PROBE", - "sections": [ - "REGIONS" - ], - "data": { - "value_type": "INT" - }, - "deck_name_regex": "FIP.+" -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FLUXNUM b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FLUXNUM deleted file mode 100644 index 4c5864c2e1..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FLUXNUM +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "FLUXNUM", - "sections": [ - "GRID" - ], - "data": { - "value_type": "INT" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FLUXREG b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FLUXREG deleted file mode 100644 index e235abac06..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FLUXREG +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "FLUXREG", - "sections": [ - "GRID" - ], - "data": { - "value_type": "INT" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FLUXTYPE b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FLUXTYPE deleted file mode 100644 index ca6e0bf54d..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FLUXTYPE +++ /dev/null @@ -1,7 +0,0 @@ -{ - "name": "FLUXTYPE", - "sections": [ - "GRID" - ], - "size": 1 -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FMTHMD b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FMTHMD deleted file mode 100644 index 88f078ca50..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FMTHMD +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "FMTHMD", - "sections": [ - "RUNSPEC" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FMTIN b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FMTIN deleted file mode 100644 index 23a43da6f3..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FMTIN +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "FMTIN", - "sections": [ - "RUNSPEC" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FMTOUT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FMTOUT deleted file mode 100644 index 642b47cbbb..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FMTOUT +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "FMTOUT", - "sections": [ - "RUNSPEC" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FMWSET b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FMWSET deleted file mode 100644 index 4967e06e68..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FMWSET +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "FMWSET", - "sections": [ - "SUMMARY" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FOAM b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FOAM deleted file mode 100644 index d71aacc019..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FOAM +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "FOAM", - "sections": [ - "RUNSPEC" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FOAMADS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FOAMADS deleted file mode 100644 index 49f92eeade..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FOAMADS +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "FOAMADS", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTSFUN" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "FoamDensity", - "1" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FOAMDCYO b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FOAMDCYO deleted file mode 100644 index d11ae8e49e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FOAMDCYO +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "FOAMDCYO", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTSFUN" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "1", - "Time" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FOAMDCYW b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FOAMDCYW deleted file mode 100644 index 4fc9e6557b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FOAMDCYW +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "FOAMDCYW", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTSFUN" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "1", - "Time" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FOAMFCN b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FOAMFCN deleted file mode 100644 index 310a0601a2..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FOAMFCN +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "FOAMFCN", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTSFUN" - }, - "items": [ - { - "name": "CAPILLARY_NUMBER", - "value_type": "INT" - }, - { - "name": "EXP", - "value_type": "DOUBLE", - "dimension": "1", - "default": 1 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FOAMFRM b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FOAMFRM deleted file mode 100644 index aec9e5a8eb..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FOAMFRM +++ /dev/null @@ -1,20 +0,0 @@ -{ - "name": "FOAMFRM", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTSFUN" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "1" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FOAMFSC b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FOAMFSC deleted file mode 100644 index 092302d03f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FOAMFSC +++ /dev/null @@ -1,29 +0,0 @@ -{ - "name": "FOAMFSC", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTSFUN" - }, - "items": [ - { - "name": "REF_SURF_CONC", - "value_type": "DOUBLE", - "dimension": "FoamSurfactantConcentration" - }, - { - "name": "EXPONENT", - "value_type": "DOUBLE", - "default": 1, - "dimension": "1" - }, - { - "name": "MIN_SURF_CONC", - "value_type": "DOUBLE", - "default": 1e-20, - "dimension": "FoamSurfactantConcentration" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FOAMFSO b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FOAMFSO deleted file mode 100644 index cdc7b97bc5..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FOAMFSO +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "FOAMFSO", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTSFUN" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "1", - "1" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FOAMFST b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FOAMFST deleted file mode 100644 index cabd336945..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FOAMFST +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "FOAMFST", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTSFUN" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "FoamDensity", - "SurfaceTension" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FOAMFSW b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FOAMFSW deleted file mode 100644 index 329f89ccd5..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FOAMFSW +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "FOAMFSW", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTSFUN" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "1", - "1" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FOAMMOB b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FOAMMOB deleted file mode 100644 index 630227deae..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FOAMMOB +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "FOAMMOB", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTPVT" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "FoamDensity", - "1" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FOAMMOBP b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FOAMMOBP deleted file mode 100644 index 9eca549c59..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FOAMMOBP +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "FOAMMOBP", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTPVT" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "Pressure", - "1" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FOAMMOBS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FOAMMOBS deleted file mode 100644 index 99be298690..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FOAMMOBS +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "FOAMMOBS", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTPVT" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "Length/Time", - "1" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FOAMOPTS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FOAMOPTS deleted file mode 100644 index e9b74921bf..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FOAMOPTS +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "FOAMOPTS", - "sections": [ - "PROPS" - ], - "size": 1, - "items": [ - { - "name": "TRANSPORT_PHASE", - "value_type": "STRING", - "default": "GAS" - }, - { - "name": "MODEL", - "value_type": "STRING" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FOAMROCK b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FOAMROCK deleted file mode 100644 index f2232ed781..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FOAMROCK +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "FOAMROCK", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTSFUN" - }, - "items": [ - { - "name": "ADSORPTION_INDEX", - "value_type": "INT", - "default": 1 - }, - { - "name": "ROCK_DENSITY", - "value_type": "DOUBLE", - "dimension": "Density" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FORMFEED b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FORMFEED deleted file mode 100644 index 592b56108a..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FORMFEED +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "FORMFEED", - "sections": [ - "RUNSPEC", - "GRID", - "EDIT", - "PROPS", - "REGIONS", - "SOLUTION", - "SUMMARY", - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "VALUE", - "value_type": "INT", - "default": 1 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FRICTION b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FRICTION deleted file mode 100644 index 86335d788c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FRICTION +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "FRICTION", - "sections": [ - "RUNSPEC" - ], - "size": 1, - "items": [ - { - "name": "NWFRIC", - "value_type": "INT", - "default": 0 - }, - { - "name": "NWFRIB", - "value_type": "INT", - "default": 1 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FULLIMP b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FULLIMP deleted file mode 100644 index e4d8e835a1..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/F/FULLIMP +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "FULLIMP", - "sections": [ - "RUNSPEC" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GAS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GAS deleted file mode 100644 index 637d7e5467..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GAS +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "GAS", - "sections": [ - "RUNSPEC" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GASBEGIN b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GASBEGIN deleted file mode 100644 index e68187e6e4..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GASBEGIN +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "GASBEGIN", - "sections": [ - "SCHEDULE" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GASCONC b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GASCONC deleted file mode 100644 index 397795d588..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GASCONC +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "GASCONC", - "sections": [ - "SOLUTION" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GASEND b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GASEND deleted file mode 100644 index 88e8e9f93e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GASEND +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "GASEND", - "sections": [ - "SCHEDULE" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GASFCOMP b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GASFCOMP deleted file mode 100644 index 108b57892d..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GASFCOMP +++ /dev/null @@ -1,38 +0,0 @@ -{ - "name": "GASFCOMP", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "GROUP", - "value_type": "STRING" - }, - { - "name": "VFP_TABLE_NUM", - "value_type": "INT", - "default": 0 - }, - { - "name": "ARTFICIAL_LIFT_QNTY", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "GAS_CONSUMPTION_RATE", - "value_type": "DOUBLE", - "dimension": "GasSurfaceVolume/Time", - "default": 0 - }, - { - "name": "COMPRESSION_LVL", - "value_type": "INT", - "default": 1 - }, - { - "name": "ACTION_SEQ_NUM", - "value_type": "INT", - "default": 1 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GASFDECR b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GASFDECR deleted file mode 100644 index cbfd26bf84..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GASFDECR +++ /dev/null @@ -1,69 +0,0 @@ -{ - "name": "GASFDECR", - "sections": [ - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "JAN", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "FEB", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "MAR", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "APR", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "MAY", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "JUN", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "JUL", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "AUG", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "SEP", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "OCT", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "NOV", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "DEC", - "value_type": "DOUBLE", - "default": 0 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GASFDELC b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GASFDELC deleted file mode 100644 index f4dcc90eab..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GASFDELC +++ /dev/null @@ -1,13 +0,0 @@ -{ - "name": "GASFDELC", - "sections": [ - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "VALUE", - "value_type": "INT" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GASFIELD b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GASFIELD deleted file mode 100644 index 4310ff9629..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GASFIELD +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "GASFIELD", - "sections": [ - "RUNSPEC" - ], - "size": 1, - "items": [ - { - "name": "FLAG_COMP", - "value_type": "STRING", - "default": "NO" - }, - { - "name": "FLAG_IT", - "value_type": "STRING", - "default": "NO" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GASFTARG b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GASFTARG deleted file mode 100644 index c8bc56adad..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GASFTARG +++ /dev/null @@ -1,69 +0,0 @@ -{ - "name": "GASFTARG", - "sections": [ - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "JAN", - "value_type": "DOUBLE", - "dimension": "Length*Length*Length/Time" - }, - { - "name": "FEB", - "value_type": "DOUBLE", - "dimension": "Length*Length*Length/Time" - }, - { - "name": "MAR", - "value_type": "DOUBLE", - "dimension": "Length*Length*Length/Time" - }, - { - "name": "APR", - "value_type": "DOUBLE", - "dimension": "Length*Length*Length/Time" - }, - { - "name": "MAY", - "value_type": "DOUBLE", - "dimension": "Length*Length*Length/Time" - }, - { - "name": "JUN", - "value_type": "DOUBLE", - "dimension": "Length*Length*Length/Time" - }, - { - "name": "JUL", - "value_type": "DOUBLE", - "dimension": "Length*Length*Length/Time" - }, - { - "name": "AUG", - "value_type": "DOUBLE", - "dimension": "Length*Length*Length/Time" - }, - { - "name": "SEP", - "value_type": "DOUBLE", - "dimension": "Length*Length*Length/Time" - }, - { - "name": "OCT", - "value_type": "DOUBLE", - "dimension": "Length*Length*Length/Time" - }, - { - "name": "NOV", - "value_type": "DOUBLE", - "dimension": "Length*Length*Length/Time" - }, - { - "name": "DEC", - "value_type": "DOUBLE", - "dimension": "Length*Length*Length/Time" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GASMONTH b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GASMONTH deleted file mode 100644 index 466ca91555..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GASMONTH +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "GASMONTH", - "sections": [ - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "MONTH", - "value_type": "STRING" - }, - { - "name": "WRITE_REPORT", - "value_type": "STRING", - "default": "NO" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GASPERIO b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GASPERIO deleted file mode 100644 index 251c98e746..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GASPERIO +++ /dev/null @@ -1,55 +0,0 @@ -{ - "name": "GASPERIO", - "sections": [ - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "NUM_PERIODS", - "value_type": "INT" - }, - { - "name": "NUM_MONTHS", - "value_type": "INT", - "default": 12 - }, - { - "name": "INITIAL_DCQ", - "value_type": "DOUBLE" - }, - { - "name": "SWING_REQ", - "value_type": "STRING", - "default": "PER" - }, - { - "name": "LIMIT_TIMESTEPS", - "value_type": "STRING", - "default": "YES" - }, - { - "name": "LIMIT_DCQ_RED_FACTOR", - "value_type": "DOUBLE", - "dimension": "1", - "default": 0 - }, - { - "name": "ANTICIPATED_DCQ_RED_FACTOR", - "value_type": "DOUBLE", - "dimension": "1", - "default": 1 - }, - { - "name": "MAX_ITERATIONS", - "value_type": "INT", - "default": 3 - }, - { - "name": "DCQ_CONV_TOLERANCE", - "value_type": "DOUBLE", - "dimension": "1", - "default": 0.1 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GASSATC b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GASSATC deleted file mode 100644 index 26669bb0cc..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GASSATC +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "GASSATC", - "sections": [ - "SOLUTION" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GASYEAR b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GASYEAR deleted file mode 100644 index 141116e9e7..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GASYEAR +++ /dev/null @@ -1,50 +0,0 @@ -{ - "name": "GASYEAR", - "sections": [ - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "NUM_YEARS", - "value_type": "INT" - }, - { - "name": "INITIAL_DCQ", - "value_type": "DOUBLE" - }, - { - "name": "SWING_REQ", - "value_type": "STRING", - "default": "YEAR" - }, - { - "name": "LIMIT_TIMESTEPS", - "value_type": "STRING", - "default": "YES" - }, - { - "name": "LIMIT_DCQ_RED_FACTOR", - "value_type": "DOUBLE", - "dimension": "1", - "default": 0 - }, - { - "name": "ANTICIPATED_DCQ_RED_FACTOR", - "value_type": "DOUBLE", - "dimension": "1", - "default": 1 - }, - { - "name": "MAX_ITERATIONS", - "value_type": "INT", - "default": 3 - }, - { - "name": "DCQ_CONV_TOLERANCE", - "value_type": "DOUBLE", - "dimension": "1", - "default": 0.1 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GCALECON b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GCALECON deleted file mode 100644 index b2e792bb91..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GCALECON +++ /dev/null @@ -1,29 +0,0 @@ -{ - "name": "GCALECON", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "GROUP", - "value_type": "STRING" - }, - { - "name": "MIN_ENERGY_PROD_RATE", - "value_type": "DOUBLE", - "dimension": "Energy/Time", - "default": 0 - }, - { - "name": "MIN_CALORIFIC_VAL", - "value_type": "DOUBLE", - "dimension": "Energy/GasSurfaceVolume", - "default": 0 - }, - { - "name": "FLAG_END_RUN", - "value_type": "STRING", - "default": "NO" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GCONCAL b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GCONCAL deleted file mode 100644 index 5d680bbecb..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GCONCAL +++ /dev/null @@ -1,28 +0,0 @@ -{ - "name": "GCONCAL", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "GROUP", - "value_type": "STRING" - }, - { - "name": "MEAN_CALORIFIC_VAL", - "value_type": "DOUBLE", - "dimension": "Energy/GasSurfaceVolume" - }, - { - "name": "ACTION", - "value_type": "STRING", - "default": "NONE" - }, - { - "name": "RATE_RED_FACTOR", - "value_type": "DOUBLE", - "dimension": "1", - "default": 0.9 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GCONENG b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GCONENG deleted file mode 100644 index a8da4a679b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GCONENG +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "GCONENG", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "GROUP", - "value_type": "STRING" - }, - { - "name": "ENERGY_PROD_RATE", - "value_type": "DOUBLE", - "dimension": "Energy/Time", - "default": 1e+20 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GCONINJE b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GCONINJE deleted file mode 100644 index 618124f223..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GCONINJE +++ /dev/null @@ -1,72 +0,0 @@ -{ - "name": "GCONINJE", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "GROUP", - "value_type": "STRING" - }, - { - "name": "PHASE", - "value_type": "STRING" - }, - { - "name": "CONTROL_MODE", - "value_type": "STRING", - "default": "NONE" - }, - { - "name": "SURFACE_TARGET", - "value_type": "UDA", - "default": 0 - }, - { - "name": "RESV_TARGET", - "value_type": "UDA", - "default": 0, - "dimension": "ReservoirVolume/Time" - }, - { - "name": "REINJ_TARGET", - "value_type": "UDA", - "default": 0, - "dimension": "1" - }, - { - "name": "VOIDAGE_TARGET", - "value_type": "UDA", - "default": 0, - "dimension": "1" - }, - { - "name": "FREE", - "value_type": "STRING", - "default": "YES" - }, - { - "name": "GUIDE_FRACTION", - "value_type": "DOUBLE", - "default": 0, - "dimension": "1" - }, - { - "name": "GUIDE_DEF", - "value_type": "STRING" - }, - { - "name": "REINJECT_GROUP", - "value_type": "STRING" - }, - { - "name": "VOIDAGE_GROUP", - "value_type": "STRING" - }, - { - "name": "WETGAS_TARGET", - "value_type": "DOUBLE", - "dimension": "GasSurfaceVolume/Time" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GCONPRI b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GCONPRI deleted file mode 100644 index 8322deca51..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GCONPRI +++ /dev/null @@ -1,101 +0,0 @@ -{ - "name": "GCONPRI", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "GROUP", - "value_type": "STRING" - }, - { - "name": "OIL_PROD_UPPER_LIMIT", - "value_type": "UDA", - "dimension": "LiquidSurfaceVolume/Time", - "default": 1e+200 - }, - { - "name": "PROCEDURE_OIL_LIMIT", - "value_type": "STRING", - "default": "NONE" - }, - { - "name": "WAT_PROD_UPPER_LIMIT", - "value_type": "UDA", - "dimension": "LiquidSurfaceVolume/Time", - "default": 1e+200 - }, - { - "name": "PROCEDURE_WAT_LIMIT", - "value_type": "STRING", - "default": "NONE" - }, - { - "name": "GAS_PROD_UPPER_LIMIT", - "value_type": "UDA", - "dimension": "GasSurfaceVolume/Time", - "default": 1e+200 - }, - { - "name": "PROCEDURE_GAS_LIMIT", - "value_type": "STRING", - "default": "NONE" - }, - { - "name": "LIQ_PROD_UPPER_LIMIT", - "value_type": "UDA", - "dimension": "LiquidSurfaceVolume/Time", - "default": 1e+200 - }, - { - "name": "PROCEDURE_LIQ_LIMIT", - "value_type": "STRING", - "default": "NONE" - }, - { - "name": "RES_FLUID_PROD_UPPER_LIMIT", - "value_type": "UDA", - "dimension": "ReservoirVolume/Time", - "default": 1e+200 - }, - { - "name": "RES_VOL_BALANCING_FRAC_UPPER_LIMIT", - "value_type": "UDA", - "dimension": "1", - "default": 1e+200 - }, - { - "name": "WET_GAS_PROD_UPPER_LIMIT", - "value_type": "UDA", - "dimension": "GasSurfaceVolume/Time", - "default": 1e+200 - }, - { - "name": "PROCEDURE_WET_GAS_LIMIT", - "value_type": "STRING", - "default": "NONE" - }, - { - "name": "SURF_GAS_BALANCING_FRAC_UPPER_LIMIT", - "value_type": "UDA", - "dimension": "1", - "default": 1e+200 - }, - { - "name": "SURF_WAT_BALANCING_FRAC_UPPER_LIMIT", - "value_type": "UDA", - "dimension": "1", - "default": 1e+200 - }, - { - "name": "UPPER_LIMIT", - "value_type": "UDA", - "default": 1e+200 - }, - { - "name": "PROCEDURE_LIMIT", - "value_type": "STRING", - "default": "NONE" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GCONPROD b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GCONPROD deleted file mode 100644 index 445f386241..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GCONPROD +++ /dev/null @@ -1,91 +0,0 @@ -{ - "name": "GCONPROD", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "GROUP", - "value_type": "STRING" - }, - { - "name": "CONTROL_MODE", - "value_type": "STRING", - "default": "NONE" - }, - { - "name": "OIL_TARGET", - "value_type": "UDA", - "dimension": "LiquidSurfaceVolume/Time", - "default": -9.99e+102 - }, - { - "name": "WATER_TARGET", - "value_type": "UDA", - "dimension": "LiquidSurfaceVolume/Time", - "default": -9.99e+102 - }, - { - "name": "GAS_TARGET", - "value_type": "UDA", - "dimension": "GasSurfaceVolume/Time", - "default": -9.99e+102 - }, - { - "name": "LIQUID_TARGET", - "value_type": "UDA", - "dimension": "LiquidSurfaceVolume/Time", - "default": -9.99e+102 - }, - { - "name": "EXCEED_PROC", - "value_type": "STRING", - "default": "NONE" - }, - { - "name": "RESPOND_TO_PARENT", - "value_type": "STRING", - "default": "YES" - }, - { - "name": "GUIDE_RATE", - "value_type": "DOUBLE" - }, - { - "name": "GUIDE_RATE_DEF", - "value_type": "STRING" - }, - { - "name": "WATER_EXCEED_PROCEDURE", - "value_type": "STRING" - }, - { - "name": "GAS_EXCEED_PROCEDURE", - "value_type": "STRING" - }, - { - "name": "LIQUID_EXCEED_PROCEDURE", - "value_type": "STRING" - }, - { - "name": "RESERVOIR_FLUID_TARGET", - "value_type": "DOUBLE", - "dimension": "ReservoirVolume/Time", - "default": -9.99e+102 - }, - { - "name": "RESERVOIR_VOLUME_BALANCE", - "value_type": "DOUBLE", - "dimension": "1" - }, - { - "name": "LINEAR_COMBINED_TARGET", - "value_type": "DOUBLE", - "dimension": "1" - }, - { - "name": "LIN_TARGET_EXCEED_PROCEDURE", - "value_type": "STRING" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GCONSALE b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GCONSALE deleted file mode 100644 index 8d4e09bd22..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GCONSALE +++ /dev/null @@ -1,34 +0,0 @@ -{ - "name": "GCONSALE", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "GROUP", - "value_type": "STRING" - }, - { - "name": "SALES_TARGET", - "value_type": "UDA", - "dimension": "GasSurfaceVolume/Time" - }, - { - "name": "MAX_SALES_RATE", - "value_type": "UDA", - "dimension": "GasSurfaceVolume/Time", - "default": 1e+20 - }, - { - "name": "MIN_SALES_RATE", - "value_type": "UDA", - "dimension": "GasSurfaceVolume/Time", - "default": -1e+20 - }, - { - "name": "MAX_PROC", - "value_type": "STRING", - "default": "NONE" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GCONSUMP b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GCONSUMP deleted file mode 100644 index 2911e594b4..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GCONSUMP +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "GCONSUMP", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "GROUP", - "value_type": "STRING" - }, - { - "name": "GAS_CONSUMP_RATE", - "value_type": "UDA", - "dimension": "GasSurfaceVolume/Time" - }, - { - "name": "GAS_IMPORT_RATE", - "value_type": "UDA", - "dimension": "GasSurfaceVolume/Time" - }, - { - "name": "NETWORK_NODE", - "value_type": "STRING" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GCONTOL b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GCONTOL deleted file mode 100644 index 366573fd94..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GCONTOL +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "GCONTOL", - "sections": [ - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "TOLERANCE_FRACTION", - "value_type": "DOUBLE" - }, - { - "name": "NUPCOL_VALUE", - "value_type": "INT" - }, - { - "name": "TOLERANCE_FRACTION_INJ", - "value_type": "DOUBLE", - "default": 0.001 - }, - { - "name": "MAX_IT_INJ", - "value_type": "INT", - "default": 5 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GCUTBACK b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GCUTBACK deleted file mode 100644 index 856e86b506..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GCUTBACK +++ /dev/null @@ -1,41 +0,0 @@ -{ - "name": "GCUTBACK", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "GROUP_NAME", - "value_type": "STRING" - }, - { - "name": "WATER_CUT_UPPER_LIM", - "value_type": "DOUBLE", - "dimension": "1" - }, - { - "name": "GAS_OIL_UPPER_LIM", - "value_type": "DOUBLE", - "dimension": "1" - }, - { - "name": "GAS_LIQ_UPPER_LIM", - "value_type": "DOUBLE", - "dimension": "1" - }, - { - "name": "WAT_GAS_UPPER_LIM", - "value_type": "DOUBLE", - "dimension": "1" - }, - { - "name": "RATE_CUTBACK_FACTOR", - "value_type": "DOUBLE", - "dimension": "1" - }, - { - "name": "CONTROL_PHASE", - "value_type": "STRING" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GCUTBACT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GCUTBACT deleted file mode 100644 index 799d432de9..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GCUTBACT +++ /dev/null @@ -1,53 +0,0 @@ -{ - "name": "GCUTBACT", - "sections": [ - "SCHEDULE" - ], - "records_set": [ - [ - { - "name": "GROUP", - "value_type": "STRING" - }, - { - "name": "RATE_CUTBACK", - "value_type": "DOUBLE", - "dimension": "1" - }, - { - "name": "CONTROL_PHASE", - "value_type": "STRING" - } - ], - [ - { - "name": "TRACER", - "value_type": "STRING" - }, - { - "name": "UPPER_RATE_LIM", - "value_type": "DOUBLE", - "dimension": "1", - "default": 1e+200 - }, - { - "name": "LOWER_RATE_LIM", - "value_type": "DOUBLE", - "dimension": "1", - "default": 1e+200 - }, - { - "name": "UPPER_CONC_LIM", - "value_type": "DOUBLE", - "dimension": "1", - "default": 1e+200 - }, - { - "name": "LOWER_CONC_LIM", - "value_type": "DOUBLE", - "dimension": "1", - "default": 1e+200 - } - ] - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GCVD b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GCVD deleted file mode 100644 index 923f231241..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GCVD +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "GCVD", - "sections": [ - "SOLUTION" - ], - "size": { - "keyword": "EQLDIMS", - "item": "NTEQUL" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "Length", - "GasSurfaceVolume/Length*Length*Length" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GDCQ b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GDCQ deleted file mode 100644 index 1245122748..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GDCQ +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "GDCQ", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "GROUP_NAME", - "value_type": "STRING" - }, - { - "name": "INIT_DCQ", - "value_type": "DOUBLE" - }, - { - "name": "DCQ_TYPE", - "value_type": "STRING", - "default": "VAR" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GDCQECON b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GDCQECON deleted file mode 100644 index ad0ebdcb41..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GDCQECON +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "GDCQECON", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "GROUP_NAME", - "value_type": "STRING" - }, - { - "name": "MIN_DCQ", - "value_type": "DOUBLE" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GDFILE b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GDFILE deleted file mode 100644 index 39fefc858f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GDFILE +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "GDFILE", - "sections": [ - "GRID" - ], - "size": 1, - "items": [ - { - "name": "filename", - "value_type": "STRING" - }, - { - "name": "formatted", - "value_type": "STRING", - "default": "U" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GDIMS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GDIMS deleted file mode 100644 index d259e8afbf..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GDIMS +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "GDIMS", - "sections": [ - "RUNSPEC" - ], - "size": 1, - "items": [ - { - "name": "MAX_NUM_GRAD_PARAMS", - "value_type": "INT", - "default": 0 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GDORIENT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GDORIENT deleted file mode 100644 index 3c940f1336..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GDORIENT +++ /dev/null @@ -1,34 +0,0 @@ -{ - "name": "GDORIENT", - "sections": [ - "GRID" - ], - "size": 1, - "items": [ - { - "name": "I", - "value_type": "STRING", - "default": "INC" - }, - { - "name": "J", - "value_type": "STRING", - "default": "INC" - }, - { - "name": "K", - "value_type": "STRING", - "default": "INC" - }, - { - "name": "Z", - "value_type": "STRING", - "default": "DOWN" - }, - { - "name": "HAND", - "value_type": "STRING", - "default": "RIGHT" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GDRILPOT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GDRILPOT deleted file mode 100644 index 1070a6255e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GDRILPOT +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "GDRILPOT", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "GROUP_NAME", - "value_type": "STRING" - }, - { - "name": "QNTY_TYPE", - "value_type": "STRING" - }, - { - "name": "MIN_POTENTIAL_RATE", - "value_type": "DOUBLE", - "default": 0 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GECON b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GECON deleted file mode 100644 index d1308d5a18..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GECON +++ /dev/null @@ -1,52 +0,0 @@ -{ - "name": "GECON", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "GROUP", - "value_type": "STRING" - }, - { - "name": "MIN_OIL_RATE", - "value_type": "UDA", - "default": 0 - }, - { - "name": "MIN_GAS_RATE", - "value_type": "UDA", - "default": 0 - }, - { - "name": "MAX_WCT", - "value_type": "UDA", - "default": 0 - }, - { - "name": "MAX_GOR", - "value_type": "UDA", - "default": 0 - }, - { - "name": "MAX_WATER_GAS_RATIO", - "value_type": "UDA", - "default": 0 - }, - { - "name": "WORKOVER", - "value_type": "STRING", - "default": "NONE" - }, - { - "name": "END_RUN", - "value_type": "STRING", - "default": "NO" - }, - { - "name": "MAX_OPEN_WELLS", - "value_type": "INT", - "default": 0 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GECONT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GECONT deleted file mode 100644 index 90e82d5f5d..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GECONT +++ /dev/null @@ -1,71 +0,0 @@ -{ - "name": "GECONT", - "sections": [ - "SCHEDULE" - ], - "records_set": [ - [ - { - "name": "GROUP", - "value_type": "STRING" - }, - { - "name": "PROCEDURE", - "value_type": "STRING", - "default": "NONE" - }, - { - "name": "END_RUN", - "value_type": "STRING", - "default": "NO" - }, - { - "name": "MAX_OPEN_WELLS", - "value_type": "INT", - "default": 0 - } - ], - [ - { - "name": "TRACER", - "value_type": "STRING" - }, - { - "name": "MAX_TOTAL_TRACER_RATE", - "value_type": "DOUBLE", - "dimension": "1", - "default": 1e+200 - }, - { - "name": "MAX_TOTAL_TRACER_CONC", - "value_type": "DOUBLE", - "dimension": "1", - "default": 1e+200 - }, - { - "name": "MAX_FREE_TRACER_RATE", - "value_type": "DOUBLE", - "dimension": "1", - "default": 1e+200 - }, - { - "name": "MAX_FREE_TRACER_CONC", - "value_type": "DOUBLE", - "dimension": "1", - "default": 1e+200 - }, - { - "name": "MAX_SOL_TRACER_RATE", - "value_type": "DOUBLE", - "dimension": "1", - "default": 1e+200 - }, - { - "name": "MAX_SOL_TRACER_CONC", - "value_type": "DOUBLE", - "dimension": "1", - "default": 1e+200 - } - ] - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GEFAC b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GEFAC deleted file mode 100644 index 9811521303..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GEFAC +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "GEFAC", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "GROUP", - "value_type": "STRING" - }, - { - "name": "EFFICIENCY_FACTOR", - "value_type": "DOUBLE", - "default": 1 - }, - { - "name": "TRANSFER_EXT_NET", - "value_type": "STRING", - "default": "YES" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GETDATA b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GETDATA deleted file mode 100644 index e3d6aeae5a..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GETDATA +++ /dev/null @@ -1,8 +0,0 @@ -{"name" : "GETDATA", -"sections" : ["GRID", "EDIT", "PROPS", "REGIONS", "SOLUTION"], -"size" : 1, -"items" : [ -{"name" : "FILENAME", "value_type" : "STRING"}, -{"name" : "FORMATTED", "value_type" : "STRING", "default" : "UNFORMATTED"}, -{"name" : "ZNAME", "value_type" : "STRING"}, -{"name" : "ZALT", "value_type" : "STRING"}]} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GETGLOB b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GETGLOB deleted file mode 100644 index 7c55c251b2..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GETGLOB +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "GETGLOB", - "sections": [ - "SOLUTION" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GI b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GI deleted file mode 100644 index f718fa2209..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GI +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "GI", - "sections": [ - "SOLUTION" - ], - "data": { - "value_type": "DOUBLE" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GIALL b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GIALL deleted file mode 100644 index c3e886459e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GIALL +++ /dev/null @@ -1,28 +0,0 @@ -{ - "name": "GIALL", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTPVT" - }, - "items": [ - { - "name": "PRESSURE", - "value_type": "DOUBLE", - "dimension": "Pressure" - }, - { - "name": "TABLE", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "1", - "1", - "1", - "1" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GIMODEL b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GIMODEL deleted file mode 100644 index 3b4357f3a6..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GIMODEL +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "GIMODEL", - "sections": [ - "RUNSPEC" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GINODE b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GINODE deleted file mode 100644 index d9953489ec..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GINODE +++ /dev/null @@ -1,20 +0,0 @@ -{ - "name": "GINODE", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTPVT" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "1" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GLIFTLIM b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GLIFTLIM deleted file mode 100644 index 9b95d59ff0..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GLIFTLIM +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "GLIFTLIM", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "GROUP_NAME", - "value_type": "STRING" - }, - { - "name": "MAX_LIFT_CAPACITY", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "MAX_NUM_WELL", - "value_type": "INT", - "default": 0 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GLIFTOPT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GLIFTOPT deleted file mode 100644 index f665e3042d..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GLIFTOPT +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "GLIFTOPT", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "GROUP_NAME", - "value_type": "STRING" - }, - { - "name": "MAX_LIFT_GAS_SUPPLY", - "value_type": "DOUBLE", - "default": -1e+20 - }, - { - "name": "MAX_TOTAL_GAS_RATE", - "value_type": "DOUBLE", - "default": -1e+20 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GMWSET b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GMWSET deleted file mode 100644 index 4948bec55d..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GMWSET +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "GMWSET", - "sections": [ - "SUMMARY" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GNETDP b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GNETDP deleted file mode 100644 index b83c3c21bf..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GNETDP +++ /dev/null @@ -1,51 +0,0 @@ -{ - "name": "GNETDP", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "FIXED_PRESSURE_GROUP", - "value_type": "STRING" - }, - { - "name": "PHASE_TYPE", - "value_type": "STRING", - "default": "GA" - }, - { - "name": "MIN_RATE_TRIGGER", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "MAX_RATE_TRIGGER", - "value_type": "DOUBLE", - "default": 1e+20 - }, - { - "name": "PRESSURE_INCR_SUBTRACT", - "value_type": "DOUBLE", - "dimension": "Pressure", - "default": 0 - }, - { - "name": "PRESSURE_INCR_ADD", - "value_type": "DOUBLE", - "dimension": "Pressure", - "default": 0 - }, - { - "name": "MIN_ALLOW_PRESSURE", - "value_type": "DOUBLE", - "dimension": "Pressure", - "default": 0 - }, - { - "name": "MAX_ALLOW_PRESSURE", - "value_type": "DOUBLE", - "dimension": "Pressure", - "default": 1e+20 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GNETINJE b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GNETINJE deleted file mode 100644 index a269266dee..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GNETINJE +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "GNETINJE", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "GROUP", - "value_type": "STRING" - }, - { - "name": "PHASE", - "value_type": "STRING" - }, - { - "name": "PRESSURE", - "value_type": "DOUBLE", - "dimension": "Pressure" - }, - { - "name": "VFP_TABLE", - "value_type": "INT", - "default": 0 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GNETPUMP b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GNETPUMP deleted file mode 100644 index 78499be185..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GNETPUMP +++ /dev/null @@ -1,38 +0,0 @@ -{ - "name": "GNETPUMP", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "GROUP", - "value_type": "STRING" - }, - { - "name": "PROD_RATE_SWITCH", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "PHASE_TYPE", - "value_type": "STRING", - "default": "OIL" - }, - { - "name": "NEW_VFT_TABLE_NUM", - "value_type": "INT", - "default": 4 - }, - { - "name": "NEW_ARTIFICIAL_LIFT_QNTY", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "NEW_GAS_CONUMPTION_RATE", - "value_type": "DOUBLE", - "dimension": "GasSurfaceVolume/Time", - "default": 0 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GPMAINT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GPMAINT deleted file mode 100644 index 3d1a898b1b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GPMAINT +++ /dev/null @@ -1,39 +0,0 @@ -{ - "name": "GPMAINT", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "GROUP", - "value_type": "STRING" - }, - { - "name": "FLOW_TARGET", - "value_type": "STRING" - }, - { - "name": "REGION", - "value_type": "INT" - }, - { - "name": "FIP_FAMILY", - "value_type": "STRING" - }, - { - "name": "PRESSURE_TARGET", - "value_type": "DOUBLE", - "dimension": "Pressure" - }, - { - "name": "PROP_CONSTANT", - "value_type": "DOUBLE", - "dimension": "ReservoirVolume/Time*Pressure" - }, - { - "name": "TIME_CONSTANT", - "value_type": "DOUBLE", - "dimension": "Time" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRADGRUP b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRADGRUP deleted file mode 100644 index dad814651a..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRADGRUP +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name": "GRADGRUP", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "MNENONIC", - "value_type": "STRING" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRADRESV b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRADRESV deleted file mode 100644 index 4e109112e6..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRADRESV +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name": "GRADRESV", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "MNENONIC", - "value_type": "STRING" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRADRFT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRADRFT deleted file mode 100644 index 23fd8d0ee7..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRADRFT +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name": "GRADRFT", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "MNENONIC", - "value_type": "STRING" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRADWELL b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRADWELL deleted file mode 100644 index 99674aac0c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRADWELL +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name": "GRADWELL", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "MNENONIC", - "value_type": "STRING" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRAVCONS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRAVCONS deleted file mode 100644 index e623e513fc..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRAVCONS +++ /dev/null @@ -1,13 +0,0 @@ -{ - "name": "GRAVCONS", - "sections": [ - "PROPS" - ], - "items": [ - { - "name": "MNENONIC", - "value_type": "DOUBLE", - "dimension": "Length*Length*Pressure/Mass" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRAVDR b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRAVDR deleted file mode 100644 index 10d4896656..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRAVDR +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "GRAVDR", - "sections": [ - "RUNSPEC" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRAVDRB b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRAVDRB deleted file mode 100644 index c251548545..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRAVDRB +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "GRAVDRB", - "sections": [ - "RUNSPEC" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRAVDRM b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRAVDRM deleted file mode 100644 index 20acf3b08c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRAVDRM +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "GRAVDRM", - "sections": [ - "RUNSPEC" - ], - "size": 1, - "items": [ - { - "name": "ALLOW_RE_INFL", - "value_type": "STRING", - "default": "YES" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRAVITY b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRAVITY deleted file mode 100644 index f3626f2e06..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRAVITY +++ /dev/null @@ -1,28 +0,0 @@ -{ - "name": "GRAVITY", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTPVT" - }, - "items": [ - { - "name": "API_GRAVITY", - "value_type": "DOUBLE", - "dimension": "1", - "comment": "Dimension should be API" - }, - { - "name": "WATER_SP_GRAVITY", - "value_type": "DOUBLE", - "default": 1 - }, - { - "name": "GAS_SP_GRAVITY", - "value_type": "DOUBLE", - "default": 0.7773 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRDREACH b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRDREACH deleted file mode 100644 index 085c667287..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRDREACH +++ /dev/null @@ -1,106 +0,0 @@ -{ - "name": "GRDREACH", - "sections": [ - "SCHEDULE" - ], - "records": [ - [ - { - "name": "RIVER", - "value_type": "STRING" - } - ], - [ - { - "name": "I", - "value_type": "INT" - }, - { - "name": "J", - "value_type": "INT" - }, - { - "name": "K", - "value_type": "INT" - }, - { - "name": "BRANCH_NAME", - "value_type": "STRING" - }, - { - "name": "DISTANCE_TO_START", - "value_type": "DOUBLE", - "dimension": "Length" - }, - { - "name": "DISTANCE_TO_END", - "value_type": "DOUBLE", - "dimension": "Length" - }, - { - "name": "RCH_CONNECT_TO", - "value_type": "INT" - }, - { - "name": "PENETRATION_DIRECTION", - "value_type": "STRING" - }, - { - "name": "GRID_BLOCK_COORD", - "value_type": "INT" - }, - { - "name": "CONTACT_AREA", - "value_type": "DOUBLE", - "dimension": "Length*Length" - }, - { - "name": "TABLE_NUM", - "value_type": "INT" - }, - { - "name": "PRODUCTIVITY_INDEX", - "value_type": "DOUBLE", - "dimension": "Length/Time*Pressure", - "default": 0 - }, - { - "name": "LENGTH_DEAD_GRID_BLOCK", - "value_type": "DOUBLE", - "dimension": "Length" - }, - { - "name": "OPTION_CONNECT_REACH", - "value_type": "INT", - "default": 0 - }, - { - "name": "ADJUSTMENT_REACH", - "value_type": "INT", - "default": 0 - }, - { - "name": "REMOVE_CAP_PRESSURE", - "value_type": "STRING", - "default": "NO" - }, - { - "name": "INFILTR_EQ", - "value_type": "INT", - "default": 0 - }, - { - "name": "HYDRAULIC_CONDUCTIVITY", - "value_type": "DOUBLE", - "dimension": "Length/Time", - "default": 0 - }, - { - "name": "RIVER_BED_THICKNESS", - "value_type": "DOUBLE", - "dimension": "Length", - "default": 0 - } - ] - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRID b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRID deleted file mode 100644 index 606defe97d..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRID +++ /dev/null @@ -1,4 +0,0 @@ -{ - "name": "GRID", - "sections": [] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRIDFILE b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRIDFILE deleted file mode 100644 index 2306a8fcb4..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRIDFILE +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "GRIDFILE", - "sections": [ - "GRID" - ], - "size": 1, - "items": [ - { - "name": "GRID", - "value_type": "INT", - "default": 0 - }, - { - "name": "EGRID", - "value_type": "INT", - "default": 1 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRIDOPTS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRIDOPTS deleted file mode 100644 index f85c5fad7e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRIDOPTS +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "GRIDOPTS", - "sections": [ - "RUNSPEC" - ], - "size": 1, - "items": [ - { - "name": "TRANMULT", - "value_type": "STRING", - "default": "NO" - }, - { - "name": "NRMULT", - "value_type": "INT", - "default": 0 - }, - { - "name": "NRPINC", - "value_type": "INT", - "default": 0 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRIDUNIT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRIDUNIT deleted file mode 100644 index b2d3149c94..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRIDUNIT +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "GRIDUNIT", - "sections": [ - "GRID" - ], - "size": 1, - "items": [ - { - "name": "LengthUnit", - "value_type": "STRING", - "default": "METRES" - }, - { - "name": "MAP", - "value_type": "STRING" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GROUP_PROBE b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GROUP_PROBE deleted file mode 100644 index 7b1201c804..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GROUP_PROBE +++ /dev/null @@ -1,270 +0,0 @@ -{ - "name": "GROUP_PROBE", - "sections": [ - "SUMMARY" - ], - "comment": "Some keywords need to be suffixed by a tracer name...", - "deck_names": [ - "GOPR", - "GOPRH", - "GOPRT", - "GOPRL", - "GOPRF", - "GOPRS", - "GOPT", - "GOPTH", - "GOPTF", - "GOPTS", - "GOIR", - "GOIRH", - "GOIRT", - "GOIRL", - "GOIT", - "GOITH", - "GOPP", - "GOPP2", - "GOPI", - "GOPI2", - "GOPGR", - "GOIGR", - "GWPR", - "GWPRH", - "GWPRT", - "GWPRL", - "GWPT", - "GWPTH", - "GWIR", - "GWIRH", - "GWIRT", - "GWIRL", - "GWIT", - "GWITH", - "GWPP", - "GWPP2", - "GWPI", - "GWPI2", - "GWPGR", - "GWIGR", - "GWPIR", - "GGPR", - "GGPRH", - "GGPRT", - "GGPRL", - "GGPRF", - "GGPRS", - "GGPT", - "GGPTH", - "GGPTF", - "GGPTS", - "GGIR", - "GGIRH", - "GGIRT", - "GGIRL", - "GGIT", - "GGITH", - "GGPP", - "GGPP2", - "GGPPS", - "GGPPS2", - "GGPPF", - "GGPPF2", - "GGPI", - "GGPI2", - "GGPGR", - "GGIGR", - "GSGR", - "GGSR", - "GSGT", - "GGST", - "GSMF", - "GFGR", - "GFGT", - "GFMF", - "GGCR", - "GGCT", - "GGIMR", - "GGIMT", - "GGLIR", - "GGQ", - "GLPR", - "GLPRH", - "GLPRT", - "GLPRL", - "GLPT", - "GLPTH", - "GJPR", - "GJPRH", - "GJPRT", - "GJPRL", - "GJPT", - "GJPTH", - "GVPR", - "GVPRT", - "GVPRL", - "GVPT", - "GVPGR", - "GVIR", - "GVIRT", - "GVIRL", - "GVIT", - "GWCT", - "GWCTH", - "GGOR", - "GGORH", - "GOGR", - "GOGRH", - "GWGR", - "GWGRH", - "GGLR", - "GGLRH", - "GMCTP", - "GMCTW", - "GMCTG", - "GMWPT", - "GMWPR", - "GMWPA", - "GMWPU", - "GMWPG", - "GMWPO", - "GMWPS", - "GMWPV", - "GMWPP", - "GMWPL", - "GMWIT", - "GMWIN", - "GMWIA", - "GMWIU", - "GMWIG", - "GMWIS", - "GMWIV", - "GMWIP", - "GMWDR", - "GMWDT", - "GMWWO", - "GMWWT", - "GEPR", - "GEPT", - "GEFF", - "GGSPR", - "GGSRL", - "GGSRU", - "GGSSP", - "GGSTP", - "GOSPR", - "GOSRL", - "GOSRU", - "GOSSP", - "GOSTP", - "GWSPR", - "GWSRL", - "GWSRU", - "GWSSP", - "GWSTP", - "GAPI", - "GSPR", - "GSPT", - "GSIR", - "GSIT", - "GSPC", - "GSIC", - "GTPRANI", - "GTPTANI", - "GTIRANI", - "GTITANI", - "GTPRCAT", - "GTPTCAT", - "GTIRCAT", - "GTITCAT", - "GTPCHEA", - "GTICHEA", - "GTPRHEA", - "GTPTHEA", - "GTIRHEA", - "GTITHEA", - "GMPR", - "GMPT", - "GMIR", - "GMIT", - "GTPRFOA", - "GTPTFOA", - "GTIRFOA", - "GTITFOA", - "GSGR", - "GGSR", - "GSGT", - "GGST", - "GGDC", - "GGDCQ", - "GMCPL", - "GPR", - "GPRDC", - "GGCR", - "GGCT", - "GGIMR", - "GGIMT", - "GPRFP", - "GGPRNBFP", - "GGLIR", - "GGCV", - "GGQ", - "GEPR", - "GEPT", - "GESR", - "GEST", - "GEDC", - "GEDCQ", - "GPR", - "GPRG", - "GPRW", - "GPRB", - "GPRBG", - "GPRBW", - "GALQ", - "GOPRNB", - "GWPRNB", - "GGPRNB", - "GLPRNB", - "GWIRNB", - "GGIRNB", - "GCPR", - "GCPC", - "GCPT", - "GCIR", - "GCIC", - "GCIT", - "GSPR", - "GSPT", - "GSIR", - "GSIT", - "GOPRL", - "GOIRL", - "GWPRL", - "GWIRL", - "GGPRL", - "GGIRL", - "GLPRL", - "GVPRL", - "GVIRL", - "GNPR", - "GNPT", - "GNIR", - "GNIT", - "GTPRSUR", - "GTPTSUR", - "GTIRSUR", - "GTITSUR", - "GTPRALK", - "GTPTALK", - "GTIRALK", - "GTITALK" - ], - "deck_name_regex": "GU.+|GTPR.+|GTPT.+|GTPC.+|GTIR.+|GTIT.+|GTIC.+|GTIRF.+|GTIRS.+|GTPRF.+|GTPRS.+|GTITF.+|GTITS.+|GTPTF.+|GTPTS.+|GTICF.+|GTICS.+|GTPCF.+|GTPCS.+", - "size": 1, - "items": [ - { - "name": "GROUPS", - "size_type": "ALL", - "value_type": "STRING" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRUPMAST b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRUPMAST deleted file mode 100644 index 426d6388f6..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRUPMAST +++ /dev/null @@ -1,25 +0,0 @@ -{ - "name": "GRUPMAST", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "MASTER_GROUP", - "value_type": "STRING" - }, - { - "name": "SLAVE_RESERVOIR", - "value_type": "STRING" - }, - { - "name": "SLAVE_GROUP", - "value_type": "STRING" - }, - { - "name": "LIMITING_FRACTION", - "value_type": "DOUBLE", - "dimension": "1" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRUPNET b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRUPNET deleted file mode 100644 index 1306be1236..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRUPNET +++ /dev/null @@ -1,42 +0,0 @@ -{ - "name": "GRUPNET", - "sections": [ - "SPECIAL", - "SCHEDULE" - ], - "items": [ - { - "name": "NAME", - "value_type": "STRING" - }, - { - "name": "TERMINAL_PRESSURE", - "value_type": "DOUBLE" - }, - { - "name": "VFP_TABLE", - "value_type": "INT", - "default": 0 - }, - { - "name": "ALQ", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "SUB_SEA_MANIFOLD", - "value_type": "STRING", - "default": "NO" - }, - { - "name": "LIFT_GAS_FLOW_THROUGH", - "value_type": "STRING", - "default": "NO" - }, - { - "name": "ALQ_SURFACE_EQV", - "value_type": "STRING", - "default": "NONE" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRUPRIG b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRUPRIG deleted file mode 100644 index ce8e4a478e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRUPRIG +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "GRUPRIG", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "GROUP", - "value_type": "STRING" - }, - { - "name": "WORKOVER_RIG_NUM", - "value_type": "INT", - "default": 0 - }, - { - "name": "DRILLING_RIG_NUM", - "value_type": "INT", - "default": 0 - }, - { - "name": "ADD_OR_REMOVE", - "value_type": "STRING", - "default": "ADD" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRUPSLAV b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRUPSLAV deleted file mode 100644 index 54d8d2d8eb..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRUPSLAV +++ /dev/null @@ -1,51 +0,0 @@ -{ - "name": "GRUPSLAV", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "SLAVE_GROUP", - "value_type": "STRING" - }, - { - "name": "MASTER_GROUP", - "value_type": "STRING" - }, - { - "name": "OIL_PROD_CONSTRAINTS", - "value_type": "STRING", - "default": "MAST" - }, - { - "name": "WAT_PROD_CONSTRAINTS", - "value_type": "STRING", - "default": "MAST" - }, - { - "name": "GAS_PROD_CONSTRAINTS", - "value_type": "STRING", - "default": "MAST" - }, - { - "name": "FLUID_VOL_PROD_CONSTRAINTS", - "value_type": "STRING", - "default": "MAST" - }, - { - "name": "OIL_INJ_PROD_CONSTRAINTS", - "value_type": "STRING", - "default": "MAST" - }, - { - "name": "WAT_INJ_PROD_CONSTRAINTS", - "value_type": "STRING", - "default": "MAST" - }, - { - "name": "GAS_INJ_PROD_CONSTRAINTS", - "value_type": "STRING", - "default": "MAST" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRUPTARG b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRUPTARG deleted file mode 100644 index 9c82795f30..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRUPTARG +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "GRUPTARG", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "GROUP", - "value_type": "STRING" - }, - { - "name": "TARGET", - "value_type": "STRING" - }, - { - "name": "NEW_VALUE", - "value_type": "DOUBLE", - "default": 1e+60 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRUPTREE b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRUPTREE deleted file mode 100644 index 92f68f9e95..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GRUPTREE +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "GRUPTREE", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "CHILD_GROUP", - "value_type": "STRING" - }, - { - "name": "PARENT_GROUP", - "value_type": "STRING", - "default": "FIELD" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GSATINJE b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GSATINJE deleted file mode 100644 index 90f30d7979..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GSATINJE +++ /dev/null @@ -1,32 +0,0 @@ -{ - "name": "GSATINJE", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "GROUP", - "value_type": "STRING" - }, - { - "name": "PHASE", - "value_type": "STRING" - }, - { - "name": "SURF_INJ_RATE", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "RES_INJ_RATE", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "MEAN_CALORIFIC", - "value_type": "DOUBLE", - "dimension": "Energy/GasSurfaceVolume", - "default": 0 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GSATPROD b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GSATPROD deleted file mode 100644 index 72bcb46b7e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GSATPROD +++ /dev/null @@ -1,42 +0,0 @@ -{ - "name": "GSATPROD", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "SATELLITE_GROUP_NAME_OR_GROUP_NAME_ROOT", - "value_type": "STRING" - }, - { - "name": "OIL_PRODUCTION_RATE", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "WATER_PRODUCTION_RATE", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "GAS_PRODUCTION_RATE", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "RES_FLUID_VOL_PRODUCTION_RATE", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "LIFT_GAS_SUPPLY_RATE", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "MEAN_CALORIFIC_VALUE", - "value_type": "DOUBLE", - "default": 0 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GSEPCOND b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GSEPCOND deleted file mode 100644 index 29d8a778d3..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GSEPCOND +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "GSEPCOND", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "GROUP", - "value_type": "STRING" - }, - { - "name": "SEPARATOR", - "value_type": "STRING" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GSSCPTST b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GSSCPTST deleted file mode 100644 index 215f2c6561..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GSSCPTST +++ /dev/null @@ -1,49 +0,0 @@ -{ - "name": "GSSCPTST", - "sections": [ - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "GROUP", - "value_type": "STRING" - }, - { - "name": "CONTROL_MODE", - "value_type": "STRING", - "default": "GRAT" - }, - { - "name": "TARGET_PROD_RATE", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "TARGET_PROD_PERIOD", - "value_type": "DOUBLE", - "dimension": "Time", - "default": 0 - }, - { - "name": "MAX_PROD_RATE_FLAG", - "value_type": "INT", - "default": 1 - }, - { - "name": "CONV_TOLERANCE", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "MAT_IT", - "value_type": "INT", - "default": 6 - }, - { - "name": "SUB_GRP_CONTROL_FLAG", - "value_type": "INT", - "default": 1 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GSWINGF b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GSWINGF deleted file mode 100644 index 9b9947b876..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GSWINGF +++ /dev/null @@ -1,132 +0,0 @@ -{ - "name": "GSWINGF", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "GROUP", - "value_type": "STRING" - }, - { - "name": "SWING_JAN", - "value_type": "DOUBLE", - "dimension": "1" - }, - { - "name": "SWING_FEB", - "value_type": "DOUBLE", - "dimension": "1" - }, - { - "name": "SWING_MAR", - "value_type": "DOUBLE", - "dimension": "1" - }, - { - "name": "SWING_APR", - "value_type": "DOUBLE", - "dimension": "1" - }, - { - "name": "SWING_MAY", - "value_type": "DOUBLE", - "dimension": "1" - }, - { - "name": "SWING_JUN", - "value_type": "DOUBLE", - "dimension": "1" - }, - { - "name": "SWING_JUL", - "value_type": "DOUBLE", - "dimension": "1" - }, - { - "name": "SWING_AUG", - "value_type": "DOUBLE", - "dimension": "1" - }, - { - "name": "SWING_SEP", - "value_type": "DOUBLE", - "dimension": "1" - }, - { - "name": "SWING_OCT", - "value_type": "DOUBLE", - "dimension": "1" - }, - { - "name": "SWING_NOV", - "value_type": "DOUBLE", - "dimension": "1" - }, - { - "name": "SWING_DEC", - "value_type": "DOUBLE", - "dimension": "1" - }, - { - "name": "PROFILE_JAN", - "value_type": "DOUBLE", - "dimension": "1" - }, - { - "name": "PROFILE_FEB", - "value_type": "DOUBLE", - "dimension": "1" - }, - { - "name": "PROFILE_MAR", - "value_type": "DOUBLE", - "dimension": "1" - }, - { - "name": "PROFILE_APR", - "value_type": "DOUBLE", - "dimension": "1" - }, - { - "name": "PROFILE_MAY", - "value_type": "DOUBLE", - "dimension": "1" - }, - { - "name": "PROFILE_JUN", - "value_type": "DOUBLE", - "dimension": "1" - }, - { - "name": "PROFILE_JUL", - "value_type": "DOUBLE", - "dimension": "1" - }, - { - "name": "PROFILE_AUG", - "value_type": "DOUBLE", - "dimension": "1" - }, - { - "name": "PROFILE_SEP", - "value_type": "DOUBLE", - "dimension": "1" - }, - { - "name": "PROFILE_OCT", - "value_type": "DOUBLE", - "dimension": "1" - }, - { - "name": "PROFILE_NOV", - "value_type": "DOUBLE", - "dimension": "1" - }, - { - "name": "PROFILE_DEC", - "value_type": "DOUBLE", - "dimension": "1" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GTADD b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GTADD deleted file mode 100644 index ec01d56f51..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GTADD +++ /dev/null @@ -1,25 +0,0 @@ -{ - "name": "GTADD", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "GROUP", - "value_type": "STRING" - }, - { - "name": "TARGET", - "value_type": "STRING" - }, - { - "name": "QUANTITY", - "value_type": "DOUBLE" - }, - { - "name": "NUM_ADDITIONS", - "value_type": "INT", - "default": 1 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GTMULT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GTMULT deleted file mode 100644 index 0a46b9b40a..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GTMULT +++ /dev/null @@ -1,25 +0,0 @@ -{ - "name": "GTMULT", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "GROUP", - "value_type": "STRING" - }, - { - "name": "TARGET", - "value_type": "STRING" - }, - { - "name": "QUANTITY", - "value_type": "DOUBLE" - }, - { - "name": "NUM_MULT", - "value_type": "INT", - "default": 1 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GUIDECAL b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GUIDECAL deleted file mode 100644 index c7deef944a..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GUIDECAL +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "GUIDECAL", - "sections": [ - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "COEFF_A", - "value_type": "DOUBLE" - }, - { - "name": "COEFF_B", - "value_type": "DOUBLE" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GUIDERAT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GUIDERAT deleted file mode 100644 index cc428963f5..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GUIDERAT +++ /dev/null @@ -1,70 +0,0 @@ -{ - "name": "GUIDERAT", - "sections": [ - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "MIN_CALC_TIME", - "value_type": "DOUBLE", - "dimension": "Time", - "default": 0 - }, - { - "name": "NOMINATED_PHASE", - "value_type": "STRING", - "default": "NONE" - }, - { - "name": "A", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "B", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "C", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "D", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "E", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "F", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "ALLOW_INCREASE", - "value_type": "STRING", - "default": "YES" - }, - { - "name": "DAMPING_FACTOR", - "value_type": "DOUBLE", - "default": 1 - }, - { - "name": "USE_FREE_GAS", - "value_type": "STRING", - "default": "NO" - }, - { - "name": "MIN_GUIDE_RATE", - "value_type": "DOUBLE", - "default": 1e-06 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GUPFREQ b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GUPFREQ deleted file mode 100644 index 9fc5339ba8..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GUPFREQ +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "GUPFREQ", - "sections": [ - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "UPDATE_FREQ_TYPE", - "value_type": "STRING", - "default": "ALL" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GWRTWCV b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GWRTWCV deleted file mode 100644 index 58cf4f45f7..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/G/GWRTWCV +++ /dev/null @@ -1,13 +0,0 @@ -{ - "name": "GWRTWCV", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELLS", - "value_type": "STRING", - "size_type": "ALL" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HALFTRAN b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HALFTRAN deleted file mode 100644 index 06695bcfc4..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HALFTRAN +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "HALFTRAN", - "sections": [ - "GRID" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HAxxxxxx b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HAxxxxxx deleted file mode 100644 index 84bd8fec51..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HAxxxxxx +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "HAxxxxxx", - "sections": [ - "PROPS", - "REGIONS" - ], - "deck_name": [ - "HASOWCR", - "HASOGCR", - "HASWL", - "HASWLPC", - "HASGLPC" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HBNUM b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HBNUM deleted file mode 100644 index 263e90d091..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HBNUM +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "HBNUM", - "sections": [ - "REGIONS" - ], - "data": { - "value_type": "INT" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HDISP b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HDISP deleted file mode 100644 index 83aa695340..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HDISP +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "HDISP", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTPVT" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "Length", - "Length" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HMAQUCT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HMAQUCT deleted file mode 100644 index e5bc1ddc6e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HMAQUCT +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "HMAQUCT", - "sections": [ - "SOLUTION" - ], - "items": [ - { - "name": "AQUIFER_ID", - "value_type": "INT" - }, - { - "name": "DERIVATIES_RESP_PERM_MULT", - "value_type": "STRING", - "default": "NO" - }, - { - "name": "DERIVATIES_RESP_OPEN_ANGLE_MULT", - "value_type": "STRING", - "default": "NO" - }, - { - "name": "DERIVATIES_RESP_AQUIFER_DEPTH", - "value_type": "STRING", - "default": "NO" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HMAQUFET b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HMAQUFET deleted file mode 100644 index 2d9a68abde..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HMAQUFET +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "HMAQUFET", - "sections": [ - "SOLUTION" - ], - "items": [ - { - "name": "AQUIFER_ID", - "value_type": "INT" - }, - { - "name": "DERIVATIES_RESP_WAT_VOL_MULT", - "value_type": "STRING", - "default": "NO" - }, - { - "name": "DERIVATIES_RESP_AQUIFER_PROD_INDEX_MULT", - "value_type": "STRING", - "default": "NO" - }, - { - "name": "DERIVATIES_RESP_AQUIFER_DEPTH", - "value_type": "STRING", - "default": "NO" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HMAQUNUM b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HMAQUNUM deleted file mode 100644 index b6ed49fed9..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HMAQUNUM +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "HMAQUNUM", - "sections": [ - "GRID" - ], - "items": [ - { - "name": "AQUIFER_ID", - "value_type": "INT" - }, - { - "name": "DERIVATIES_RESP_PORE_VOL_MULT", - "value_type": "STRING", - "default": "NO" - }, - { - "name": "DERIVATIES_RESP_AQUIFER_PERM_MULT", - "value_type": "STRING" - }, - { - "name": "DERIVATIES_RESP_AQUIFER_GRID_CON_TRANS", - "value_type": "STRING", - "default": "NO" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HMDIMS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HMDIMS deleted file mode 100644 index 499ade8f6e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HMDIMS +++ /dev/null @@ -1,54 +0,0 @@ -{ - "name": "HMDIMS", - "sections": [ - "RUNSPEC" - ], - "size": 1, - "items": [ - { - "name": "MAX_GRAD_REGIONS", - "value_type": "INT", - "default": 0 - }, - { - "name": "MAX_SUB_REGIONS", - "value_type": "INT", - "default": 0 - }, - { - "name": "MAX_GRADS", - "value_type": "INT", - "default": 0 - }, - { - "name": "MAX_FAULTS", - "value_type": "INT", - "default": 0 - }, - { - "name": "MAX_AQUIFER_PARAMS", - "value_type": "INT", - "default": 0 - }, - { - "name": "MAX_WELL_PARAMS", - "value_type": "INT", - "default": 0 - }, - { - "name": "UNUSED", - "value_type": "INT", - "default": 0 - }, - { - "name": "MAX_ROCK_GRAD_PARAMS", - "value_type": "INT", - "default": 0 - }, - { - "name": "MAX_WELL_CONN_PARAMS", - "value_type": "INT", - "default": 0 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HMFAULTS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HMFAULTS deleted file mode 100644 index ce2c14bf4a..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HMFAULTS +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name": "HMFAULTS", - "sections": [ - "GRID" - ], - "items": [ - { - "name": "FAULT_SEGMENT", - "value_type": "STRING" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HMMLAQUN b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HMMLAQUN deleted file mode 100644 index 44bd7b57ef..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HMMLAQUN +++ /dev/null @@ -1,30 +0,0 @@ -{ - "name": "HMMLAQUN", - "sections": [ - "GRID" - ], - "items": [ - { - "name": "AQUIFER_ID", - "value_type": "INT" - }, - { - "name": "AQUIFER_PORE_VOL_MULT", - "value_type": "DOUBLE", - "dimension": "1", - "default": 1 - }, - { - "name": "AQUIFER_PORE_PERM_MULT", - "value_type": "DOUBLE", - "dimension": "1", - "default": 1 - }, - { - "name": "AQUIFER_GRID_CONN_MULT", - "value_type": "DOUBLE", - "dimension": "1", - "default": 1 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HMMLCTAQ b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HMMLCTAQ deleted file mode 100644 index 05d0674cbb..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HMMLCTAQ +++ /dev/null @@ -1,30 +0,0 @@ -{ - "name": "HMMLCTAQ", - "sections": [ - "SOLUTION" - ], - "items": [ - { - "name": "AQUIFER_ID", - "value_type": "INT" - }, - { - "name": "AQUIFER_PERM_MULT", - "value_type": "DOUBLE", - "dimension": "1", - "default": 1 - }, - { - "name": "AQUIFER_ANGLE_MULT", - "value_type": "DOUBLE", - "dimension": "1", - "default": 1 - }, - { - "name": "AQUIFER_DEPTH_MULT", - "value_type": "DOUBLE", - "dimension": "1", - "default": 1 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HMMLFTAQ b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HMMLFTAQ deleted file mode 100644 index 377eebda79..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HMMLFTAQ +++ /dev/null @@ -1,30 +0,0 @@ -{ - "name": "HMMLFTAQ", - "sections": [ - "SOLUTION" - ], - "items": [ - { - "name": "AQUIFER_ID", - "value_type": "INT" - }, - { - "name": "AQUIFER_WAT_VOL_MULT", - "value_type": "DOUBLE", - "dimension": "1", - "default": 1 - }, - { - "name": "AQUIFER_PROD_INDEX_MULT", - "value_type": "DOUBLE", - "dimension": "1", - "default": 1 - }, - { - "name": "AQUIFER_DEPTH_MULT", - "value_type": "DOUBLE", - "dimension": "1", - "default": 1 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HMMLTWCN b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HMMLTWCN deleted file mode 100644 index 4b70f6dd5c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HMMLTWCN +++ /dev/null @@ -1,41 +0,0 @@ -{ - "name": "HMMLTWCN", - "sections": [ - "SOLUTION" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "GRID", - "value_type": "STRING", - "default": "FIELD" - }, - { - "name": "I", - "value_type": "INT" - }, - { - "name": "J", - "value_type": "INT" - }, - { - "name": "K", - "value_type": "INT" - }, - { - "name": "CTF", - "value_type": "DOUBLE", - "dimension": "1", - "default": 1 - }, - { - "name": "SKIN", - "value_type": "DOUBLE", - "dimension": "1", - "default": 1 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HMMULTFT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HMMULTFT deleted file mode 100644 index a53bd6f691..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HMMULTFT +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "HMMULTFT", - "sections": [ - "GRID" - ], - "items": [ - { - "name": "FAULT", - "value_type": "STRING" - }, - { - "name": "TRANS_MULT", - "value_type": "DOUBLE", - "dimension": "1", - "default": 1 - }, - { - "name": "DIFF_MULT", - "value_type": "DOUBLE", - "dimension": "1", - "default": 1 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HMMULTSG b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HMMULTSG deleted file mode 100644 index bfe97392cc..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HMMULTSG +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "HMMULTSG", - "sections": [ - "GRID" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} \ No newline at end of file diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HMMULTxx b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HMMULTxx deleted file mode 100644 index 2235b2d5bf..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HMMULTxx +++ /dev/null @@ -1,20 +0,0 @@ -{ - "name": "HMMULTxx", - "sections": [ - "GRID", - "EDIT" - ], - "deck_name": [ - "HMMULTX", - "HMMULTY", - "HMMULTZ", - "HMMULTPV", - "HMMULTR", - "HMMULTTH", - "HMMULTPV" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HMPROPS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HMPROPS deleted file mode 100644 index 65eb93c347..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HMPROPS +++ /dev/null @@ -1,7 +0,0 @@ -{ - "name": "HMPROPS", - "sections": [ - "PROPS", - "REGIONS" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HMROCK b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HMROCK deleted file mode 100644 index 5853c19415..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HMROCK +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "HMROCK", - "sections": [ - "PROPS" - ], - "items": [ - { - "name": "TABLE_NUMBER", - "value_type": "INT" - }, - { - "name": "CALCULATE_GRADIENTS", - "value_type": "INT", - "default": 0 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HMROCKT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HMROCKT deleted file mode 100644 index df133726ae..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HMROCKT +++ /dev/null @@ -1,20 +0,0 @@ -{ - "name": "HMROCKT", - "sections": [ - "PROPS" - ], - "items": [ - { - "name": "TABLE_NUMBER", - "value_type": "INT" - }, - { - "name": "CALCULATE_GRADIENTS_1", - "value_type": "INT" - }, - { - "name": "CALCULATE_GRADIENTS_2", - "value_type": "INT" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HMRREF b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HMRREF deleted file mode 100644 index 4739f6e4fa..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HMRREF +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "HMRREF", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "ROCKCOMP", - "item": "NTROCC" - }, - "items": [ - { - "name": "P_REF", - "value_type": "DOUBLE", - "dimension": "Pressure" - }, - { - "name": "P_DIM", - "value_type": "DOUBLE", - "dimension": "Pressure" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HMWELCON b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HMWELCON deleted file mode 100644 index e47c7ff02c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HMWELCON +++ /dev/null @@ -1,39 +0,0 @@ -{ - "name": "HMWELCON", - "sections": [ - "SOLUTION" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "GRID", - "value_type": "STRING", - "default": "FIELD" - }, - { - "name": "I", - "value_type": "INT" - }, - { - "name": "J", - "value_type": "INT" - }, - { - "name": "K", - "value_type": "INT" - }, - { - "name": "REQ_TRANS_FACTOR_GRAD", - "value_type": "STRING", - "default": "NO" - }, - { - "name": "REQ_SKIN_FACTOR_GRAD", - "value_type": "STRING", - "default": "NO" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HMWPIMLT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HMWPIMLT deleted file mode 100644 index be565ea22f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HMWPIMLT +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name": "HMWPIMLT", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HMxxxxxx b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HMxxxxxx deleted file mode 100644 index 3d7dfea8b5..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HMxxxxxx +++ /dev/null @@ -1,35 +0,0 @@ -{ - "name": "HMxxxxxx", - "sections": [ - "REGIONS" - ], - "deck_name": [ - "HMTRANX", - "HMTRANY", - "HMTRANZ", - "HMTRNXY", - "HMPORVM", - "HMSIGMA", - "HMPERMX", - "HMPERMY", - "HMPRMXY", - "HMPERMZ", - "HMSWCR", - "HMSGCR", - "HMSOWCR", - "HMSOGCR", - "HMSWL", - "HMKRW", - "HMKRO", - "HMKRG", - "HMKRWR", - "HMKRGR", - "HMKRORW", - "HMKRORG", - "HMPCW", - "HMPCG" - ], - "data": { - "value_type": "INT" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HRFIN b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HRFIN deleted file mode 100644 index 7539b26173..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HRFIN +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "HRFIN", - "sections": [ - "GRID" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HWKRO b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HWKRO deleted file mode 100644 index e7295f9880..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HWKRO +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "HWKRO", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HWKRORG b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HWKRORG deleted file mode 100644 index 0e8345822c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HWKRORG +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "HWKRORG", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HWKRORW b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HWKRORW deleted file mode 100644 index 1a3e833763..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HWKRORW +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "HWKRORW", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HWKRW b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HWKRW deleted file mode 100644 index 164d87fe92..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HWKRW +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "HWKRW", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HWKRWR b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HWKRWR deleted file mode 100644 index 281ec29bec..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HWKRWR +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "HWKRWR", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HWPCW b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HWPCW deleted file mode 100644 index 02e1f02a5d..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HWPCW +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "HWPCW", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "Pressure" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HWSNUM b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HWSNUM deleted file mode 100644 index 8276555291..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HWSNUM +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "HWSNUM", - "sections": [ - "REGIONS" - ], - "data": { - "value_type": "INT" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HWSOGCR b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HWSOGCR deleted file mode 100644 index 47d3b3970b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HWSOGCR +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "HWSOGCR", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HWSOWCR b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HWSOWCR deleted file mode 100644 index 8a00993294..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HWSOWCR +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "HWSOWCR", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HWSWCR b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HWSWCR deleted file mode 100644 index f2a666665f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HWSWCR +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "HWSWCR", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HWSWL b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HWSWL deleted file mode 100644 index f046a0ccb2..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HWSWL +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "HWSWL", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HWSWLPC b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HWSWLPC deleted file mode 100644 index 01f011b58c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HWSWLPC +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "HWSWLPC", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HWSWU b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HWSWU deleted file mode 100644 index a59f4adfd7..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HWSWU +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "HWSWU", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HXFIN b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HXFIN deleted file mode 100644 index c020b8c947..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HXFIN +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "HXFIN", - "sections": [ - "GRID" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HYDRHEAD b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HYDRHEAD deleted file mode 100644 index 343413907b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HYDRHEAD +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "HYDRHEAD", - "sections": [ - "PROPS" - ], - "size": 1, - "items": [ - { - "name": "REF_DEPTH", - "value_type": "DOUBLE", - "dimension": "Length" - }, - { - "name": "FRESHWATER_DENSITY", - "value_type": "DOUBLE", - "dimension": "Density" - }, - { - "name": "REMOVE_DEPTH_TERMS", - "value_type": "STRING", - "default": "NO" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HYFIN b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HYFIN deleted file mode 100644 index 40d98bd403..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HYFIN +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "HYFIN", - "sections": [ - "GRID" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HYMOBGDR b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HYMOBGDR deleted file mode 100644 index 53145110d4..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HYMOBGDR +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "HYMOBGDR", - "sections": [ - "PROPS" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HYST b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HYST deleted file mode 100644 index 6ed62f26db..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HYST +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "HYST", - "sections": [ - "RUNSPEC" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HYSTCHCK b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HYSTCHCK deleted file mode 100644 index d1c968684b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HYSTCHCK +++ /dev/null @@ -1,8 +0,0 @@ -{ - "name": "HYSTCHCK", - "sections": [ - "PROPS" - ], - "size": 1, - "items": [] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HZFIN b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HZFIN deleted file mode 100644 index 19901caf2d..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/H/HZFIN +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "HZFIN", - "sections": [ - "GRID" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/IHOST b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/IHOST deleted file mode 100644 index 01874859e4..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/IHOST +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "IHOST", - "sections": [ - "GRID" - ], - "items": [ - { - "name": "LGR", - "value_type": "STRING" - }, - { - "name": "PROCESS", - "value_type": "INT", - "default": 0 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/IMBNUM b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/IMBNUM deleted file mode 100644 index 3190466f6b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/IMBNUM +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "IMBNUM", - "sections": [ - "REGIONS" - ], - "data": { - "value_type": "INT" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/IMBNUMMF b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/IMBNUMMF deleted file mode 100644 index 59617164e8..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/IMBNUMMF +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "IMBNUMMF", - "sections": [ - "REGIONS" - ], - "data": { - "value_type": "INT" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/IMKRVD b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/IMKRVD deleted file mode 100644 index 12bb596c6d..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/IMKRVD +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "IMKRVD", - "size": { - "keyword": "ENDSCALE", - "item": "NUM_TABLES" - }, - "sections": [ - "PROPS" - ], - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "Length", - "1", - "1", - "1", - "1", - "1", - "1", - "1" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/IMPCVD b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/IMPCVD deleted file mode 100644 index 0f25396695..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/IMPCVD +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "IMPCVD", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "ENDSCALE", - "item": "NTENDP" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "Length", - "Pressure", - "Pressure" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/IMPES b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/IMPES deleted file mode 100644 index 6265a24116..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/IMPES +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "IMPES", - "sections": [ - "RUNSPEC" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/IMPLICIT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/IMPLICIT deleted file mode 100644 index 3511ba8526..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/IMPLICIT +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "IMPLICIT", - "sections": [ - "RUNSPEC" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/IMPORT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/IMPORT deleted file mode 100644 index c23f608de8..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/IMPORT +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "IMPORT", - "sections": [ - "GRID", - "EDIT", - "PROPS", - "REGIONS", - "SOLUTION" - ], - "size": 1, - "items": [ - { - "name": "FILE", - "value_type": "STRING" - }, - { - "name": "FORMATTED", - "value_type": "STRING", - "default": "UNFORMATTED" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/IMPTVD b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/IMPTVD deleted file mode 100644 index 8bba0f1e90..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/IMPTVD +++ /dev/null @@ -1,28 +0,0 @@ -{ - "name": "IMPTVD", - "size": { - "keyword": "ENDSCALE", - "item": "NUM_TABLES" - }, - "sections": [ - "PROPS" - ], - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "Length", - "1", - "1", - "1", - "1", - "1", - "1", - "1", - "1" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/IMSPCVD b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/IMSPCVD deleted file mode 100644 index 32b3169f6a..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/IMSPCVD +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "IMSPCVD", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "ENDSCALE", - "item": "NTENDP" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "Length", - "1", - "1" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/INCLUDE b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/INCLUDE deleted file mode 100644 index d7a405d7f7..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/INCLUDE +++ /dev/null @@ -1,20 +0,0 @@ -{ - "name": "INCLUDE", - "sections": [ - "RUNSPEC", - "GRID", - "EDIT", - "PROPS", - "REGIONS", - "SOLUTION", - "SUMMARY", - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "IncludeFile", - "value_type": "STRING" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/INIT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/INIT deleted file mode 100644 index ccaab9c31f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/INIT +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "INIT", - "sections": [ - "GRID" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/INRAD b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/INRAD deleted file mode 100644 index 990a5002a2..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/INRAD +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "INRAD", - "sections": [ - "GRID" - ], - "size": 1, - "items": [ - { - "name": "RADIUS", - "value_type": "DOUBLE", - "dimension": "Length" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/INSPEC b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/INSPEC deleted file mode 100644 index 76b265a982..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/INSPEC +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "INSPEC", - "sections": [ - "RUNSPEC" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/INTPC b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/INTPC deleted file mode 100644 index 25bee2156d..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/INTPC +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "INTPC", - "sections": [ - "PROPS" - ], - "size": 1, - "items": [ - { - "name": "PHASE", - "value_type": "STRING", - "default": "BOTH" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/IONROCK b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/IONROCK deleted file mode 100644 index b1a64e60b8..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/IONROCK +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "IONROCK", - "sections": [ - "GRID" - ], - "data": { - "value_type": "DOUBLE" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/IONXROCK b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/IONXROCK deleted file mode 100644 index 6ebb67d1b2..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/IONXROCK +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "IONXROCK", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTSFUN" - }, - "items": [ - { - "name": "VALUE", - "value_type": "DOUBLE", - "default": 0 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/IONXSURF b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/IONXSURF deleted file mode 100644 index d3785e8774..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/IONXSURF +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "IONXSURF", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTSFUN" - }, - "items": [ - { - "name": "MOLECULAR_WEIGHT", - "value_type": "DOUBLE" - }, - { - "name": "ION_EXCH_CONST", - "value_type": "DOUBLE", - "default": 0 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/IPCG b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/IPCG deleted file mode 100644 index 6c6e46f2d1..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/IPCG +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "IPCG", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "Pressure" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/IPCW b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/IPCW deleted file mode 100644 index 26857ce8ce..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/IPCW +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "IPCW", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "Pressure" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/ISGCR b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/ISGCR deleted file mode 100644 index 86376507ea..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/ISGCR +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "ISGCR", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/ISGL b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/ISGL deleted file mode 100644 index 63e576d82c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/ISGL +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "ISGL", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/ISGLPC b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/ISGLPC deleted file mode 100644 index 4e055e8c45..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/ISGLPC +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "ISGLPC", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/ISGU b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/ISGU deleted file mode 100644 index 0bb58fdff2..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/ISGU +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "ISGU", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/ISOGCR b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/ISOGCR deleted file mode 100644 index 46ed05839c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/ISOGCR +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "ISOGCR", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/ISOLNUM b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/ISOLNUM deleted file mode 100644 index 2f5eb305c1..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/ISOLNUM +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "ISOLNUM", - "sections": [ - "GRID" - ], - "data": { - "value_type": "INT" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/ISOWCR b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/ISOWCR deleted file mode 100644 index 2b33ed448d..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/ISOWCR +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "ISOWCR", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/ISWCR b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/ISWCR deleted file mode 100644 index efa242539c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/ISWCR +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "ISWCR", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/ISWL b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/ISWL deleted file mode 100644 index 2be2e80f0f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/ISWL +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "ISWL", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/ISWLPC b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/ISWLPC deleted file mode 100644 index 2328ff9c51..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/ISWLPC +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "ISWLPC", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/ISWU b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/ISWU deleted file mode 100644 index 79e762f328..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/I/ISWU +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "ISWU", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/J/JFUNC b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/J/JFUNC deleted file mode 100644 index 7ff81128a8..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/J/JFUNC +++ /dev/null @@ -1,41 +0,0 @@ -{ - "name": "JFUNC", - "sections": [ - "GRID" - ], - "size": 1, - "items": [ - { - "name": "FLAG", - "value_type": "STRING", - "default": "BOTH" - }, - { - "name": "OW_SURFACE_TENSION", - "value_type": "DOUBLE", - "dimension": "SurfaceTension", - "default": -1 - }, - { - "name": "GO_SURFACE_TENSION", - "value_type": "DOUBLE", - "dimension": "SurfaceTension", - "default": -1 - }, - { - "name": "ALPHA_FACTOR", - "value_type": "DOUBLE", - "default": 0.5 - }, - { - "name": "BETA_FACTOR", - "value_type": "DOUBLE", - "default": 0.5 - }, - { - "name": "DIRECTION", - "value_type": "STRING", - "default": "XY" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/J/JFUNCR b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/J/JFUNCR deleted file mode 100644 index 80885f45f8..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/J/JFUNCR +++ /dev/null @@ -1,42 +0,0 @@ -{ - "name": "JFUNCR", - "sections": [ - "GRID" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTSFUN" - }, - "items": [ - { - "name": "J_FUNCTION", - "value_type": "STRING", - "default": "BOTH" - }, - { - "name": "OIL_WAT_SURF_TENSTION", - "value_type": "DOUBLE" - }, - { - "name": "OIL_GAS_SURF_TENSTION", - "value_type": "DOUBLE" - }, - { - "name": "POROSITY_POWER", - "value_type": "DOUBLE", - "dimension": "1", - "default": 0.5 - }, - { - "name": "PERMEABILITY_POWER", - "value_type": "DOUBLE", - "dimension": "1", - "default": 0.5 - }, - { - "name": "PERM_DIRECTION", - "value_type": "STRING", - "default": "XY" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/K/KRNUM b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/K/KRNUM deleted file mode 100644 index 9a5e162a92..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/K/KRNUM +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "KRNUM", - "sections": [ - "REGIONS" - ], - "deck_name": [ - "KRNUMX", - "KRNUMX-", - "KRNUMY", - "KRNUMY-", - "KRNUMZ", - "KRNUMZ-", - "KRNUMR", - "KRNUMR-", - "KRNUMT", - "KRNUMT-" - ], - "data": { - "value_type": "INT" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/K/KRNUMMF b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/K/KRNUMMF deleted file mode 100644 index 2134a5b934..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/K/KRNUMMF +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "KRNUMMF", - "sections": [ - "REGIONS" - ], - "data": { - "value_type": "INT" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LAB b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LAB deleted file mode 100644 index 3af0e5b830..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LAB +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "LAB", - "sections": [ - "RUNSPEC" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LANGMPL b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LANGMPL deleted file mode 100644 index 38211e6246..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LANGMPL +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "LANGMPL", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LANGMUIR b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LANGMUIR deleted file mode 100644 index ba3cedbf88..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LANGMUIR +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "LANGMUIR", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "REGDIMS", - "item": "NTCREG" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "Pressure", - "GasSurfaceVolume/Length*Length*Length", - "GasSurfaceVolume/Length*Length*Length" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LANGSOLV b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LANGSOLV deleted file mode 100644 index 2505fd6499..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LANGSOLV +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "LANGSOLV", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "REGDIMS", - "item": "NTCREG" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "Pressure", - "GasSurfaceVolume/Length*Length*Length" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LCUNIT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LCUNIT deleted file mode 100644 index 75a4077d68..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LCUNIT +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "LCUNIT", - "sections": [ - "PROPS" - ], - "size": 1, - "items": [ - { - "name": "UNIT", - "value_type": "STRING", - "default": "UNIT" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LGR b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LGR deleted file mode 100644 index f49ad74cfc..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LGR +++ /dev/null @@ -1,49 +0,0 @@ -{ - "name": "LGR", - "sections": [ - "RUNSPEC" - ], - "size": 1, - "items": [ - { - "name": "MAXLGR", - "value_type": "INT", - "default": 0 - }, - { - "name": "MAXCLS", - "value_type": "INT", - "default": 0 - }, - { - "name": "MCOARS", - "value_type": "INT", - "default": 0 - }, - { - "name": "MAMALG", - "value_type": "INT", - "default": 0 - }, - { - "name": "MXLALG", - "value_type": "INT", - "default": 0 - }, - { - "name": "LSTACK", - "value_type": "INT", - "default": 0 - }, - { - "name": "INTERP", - "value_type": "STRING", - "default": "INTERP" - }, - { - "name": "NCHCOR", - "value_type": "INT", - "default": 0 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LGRCOPY b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LGRCOPY deleted file mode 100644 index 409995f722..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LGRCOPY +++ /dev/null @@ -1,8 +0,0 @@ -{ - "name": "LGRCOPY", - "sections": [ - "RUNSPEC", - "GRID", - "EDIT" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LGRFREE b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LGRFREE deleted file mode 100644 index 1d29d4b43f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LGRFREE +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name": "LGRFREE", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "LOCAL_GRID_REFINMENT", - "value_type": "STRING" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LGRLOCK b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LGRLOCK deleted file mode 100644 index c4981a0209..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LGRLOCK +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name": "LGRLOCK", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "LOCAL_GRID_REFINMENT", - "value_type": "STRING" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LGROFF b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LGROFF deleted file mode 100644 index 798b950175..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LGROFF +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "LGROFF", - "sections": [ - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "LOCAL_GRID_REFINMENT", - "value_type": "STRING" - }, - { - "name": "ACTIVE_WELLS", - "value_type": "INT", - "default": 0 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LGRON b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LGRON deleted file mode 100644 index 7be80c4eb1..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LGRON +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "LGRON", - "sections": [ - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "LOCAL_GRID_REFINMENT", - "value_type": "STRING" - }, - { - "name": "ACTIVE_WELLS", - "value_type": "INT", - "default": 0 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LICENSES b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LICENSES deleted file mode 100644 index deeec1a9b2..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LICENSES +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name": "LICENSE", - "sections": [ - "RUNSPEC" - ], - "items": [ - { - "name": "FEATURE", - "value_type": "STRING" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LIFTOPT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LIFTOPT deleted file mode 100644 index 4290ece3f3..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LIFTOPT +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "LIFTOPT", - "sections": [ - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "INCREMENT_SIZE", - "value_type": "DOUBLE" - }, - { - "name": "MIN_ECONOMIC_GRADIENT", - "value_type": "DOUBLE" - }, - { - "name": "MIN_INTERVAL_BETWEEN_GAS_LIFT_OPTIMIZATIONS", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "OPTIMISE_GAS_LIFT", - "value_type": "STRING", - "default": "YES" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LINCOM b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LINCOM deleted file mode 100644 index 11b3b042bf..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LINCOM +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "LINCOM", - "sections": [ - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "ALPHA", - "value_type": "UDA", - "default": 0 - }, - { - "name": "BETA", - "value_type": "UDA", - "default": 0 - }, - { - "name": "GAMMA", - "value_type": "UDA", - "default": 0 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LINKPERM b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LINKPERM deleted file mode 100644 index 5cee105d1a..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LINKPERM +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "LINKPERM", - "sections": [ - "GRID" - ], - "data": { - "value_type": "STRING" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LKRO b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LKRO deleted file mode 100644 index f98df17929..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LKRO +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "LKRO", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LKRORG b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LKRORG deleted file mode 100644 index 35cec4878f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LKRORG +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "LKRORG", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LKRORW b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LKRORW deleted file mode 100644 index 55a1a71067..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LKRORW +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "LKRORW", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LKRW b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LKRW deleted file mode 100644 index 05d94db3f2..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LKRW +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "LKRW", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LKRWR b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LKRWR deleted file mode 100644 index eab66534f9..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LKRWR +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "LKRWR", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LOAD b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LOAD deleted file mode 100644 index 2b918c3f8b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LOAD +++ /dev/null @@ -1,32 +0,0 @@ -{ - "name": "LOAD", - "sections": [ - "RUNSPEC" - ], - "size": 1, - "items": [ - { - "name": "FILE", - "value_type": "STRING" - }, - { - "name": "REPORT_STEP", - "value_type": "INT" - }, - { - "name": "NOSIM", - "value_type": "STRING", - "default": "SIM" - }, - { - "name": "FORMATTED", - "value_type": "STRING", - "default": "UNFORMATTED" - }, - { - "name": "REQUEST_SAVE_OUTPUT", - "value_type": "STRING", - "default": "NO" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LOWSALT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LOWSALT deleted file mode 100644 index ad820f7bee..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LOWSALT +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "LOWSALT", - "sections": [ - "RUNSPEC" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LPCW b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LPCW deleted file mode 100644 index 4a48eb62bd..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LPCW +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "LPCW", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "Pressure" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LSALTFNC b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LSALTFNC deleted file mode 100644 index e1593e8618..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LSALTFNC +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "LSALTFNC", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTSFUN" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "Pressure", - "1", - "1" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LSLTWNUM b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LSLTWNUM deleted file mode 100644 index 905b319fef..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LSLTWNUM +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "LSLTWNUM", - "sections": [ - "REGIONS" - ], - "data": { - "value_type": "INT" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LSNUM b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LSNUM deleted file mode 100644 index a6414ec80c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LSNUM +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "LSNUM", - "sections": [ - "REGIONS" - ], - "data": { - "value_type": "INT" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LSOGCR b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LSOGCR deleted file mode 100644 index be32a19083..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LSOGCR +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "LSOGCR", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LSOWCR b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LSOWCR deleted file mode 100644 index 8d23a9664b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LSOWCR +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "LSOWCR", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LSWCR b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LSWCR deleted file mode 100644 index 1a0b5d968f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LSWCR +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "LSWCR", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LSWL b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LSWL deleted file mode 100644 index 706af290fc..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LSWL +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "LSWL", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LSWLPC b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LSWLPC deleted file mode 100644 index bb7b157c06..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LSWLPC +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "LSWLPC", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LSWU b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LSWU deleted file mode 100644 index 50580f1ea8..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LSWU +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "LSWU", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LTOSIGMA b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LTOSIGMA deleted file mode 100644 index 07f6799ca0..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LTOSIGMA +++ /dev/null @@ -1,38 +0,0 @@ -{ - "name": "LTOSIGMA", - "sections": [ - "GRID" - ], - "size": 1, - "items": [ - { - "name": "FX", - "value_type": "DOUBLE", - "dimension": "1", - "default": 4 - }, - { - "name": "FY", - "value_type": "DOUBLE", - "dimension": "1", - "default": 4 - }, - { - "name": "FZ", - "value_type": "DOUBLE", - "dimension": "1", - "default": 4 - }, - { - "name": "FGD", - "value_type": "DOUBLE", - "dimension": "1", - "default": 0 - }, - { - "name": "OPTION", - "value_type": "STRING", - "default": "XONLY" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LWKRO b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LWKRO deleted file mode 100644 index 157db9acd8..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LWKRO +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "LWKRO", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LWKRORG b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LWKRORG deleted file mode 100644 index aff0b6b947..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LWKRORG +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "LWKRORG", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LWKRORW b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LWKRORW deleted file mode 100644 index 30d8e63a06..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LWKRORW +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "LWKRORW", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LWKRW b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LWKRW deleted file mode 100644 index 979df45411..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LWKRW +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "LWKRW", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LWKRWR b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LWKRWR deleted file mode 100644 index d170780f65..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LWKRWR +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "LWKRWR", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LWPCW b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LWPCW deleted file mode 100644 index 6dc876f03f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LWPCW +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "LWPCW", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "Pressure" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LWSLTNUM b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LWSLTNUM deleted file mode 100644 index e7d2f5982a..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LWSLTNUM +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "LWSLTNUM", - "sections": [ - "REGIONS" - ], - "data": { - "value_type": "INT" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LWSNUM b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LWSNUM deleted file mode 100644 index e8f623d65b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LWSNUM +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "LWSNUM", - "sections": [ - "REGIONS" - ], - "data": { - "value_type": "INT" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LWSOGCR b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LWSOGCR deleted file mode 100644 index fc607c79a2..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LWSOGCR +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "LWSOGCR", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LWSOWCR b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LWSOWCR deleted file mode 100644 index 75d24e6f65..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LWSOWCR +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "LWSOWCR", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LWSWCR b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LWSWCR deleted file mode 100644 index 081de324b7..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LWSWCR +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "LWSWCR", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LWSWL b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LWSWL deleted file mode 100644 index 9040023b41..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LWSWL +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "LWSWL", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LWSWLPC b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LWSWLPC deleted file mode 100644 index f754b8bcf7..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LWSWLPC +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "LWSWLPC", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LWSWU b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LWSWU deleted file mode 100644 index 211f1e1006..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LWSWU +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "LWSWU", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LX b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LX deleted file mode 100644 index e33e1f012f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LX +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "LX", - "sections": [ - "GRID" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "Length" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LXFIN b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LXFIN deleted file mode 100644 index db4d7bc0af..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LXFIN +++ /dev/null @@ -1,6 +0,0 @@ -{"name" : "LXFIN", -"sections" : ["GRID"], -"size" : 1, -"items" : [ -{"name" : "CELL_THICKNESS", "value_type" : "DOUBLE", "dimension" : "Length", "default_value" : 1.0}, -{"name" : "SIZE_OPTION", "value_type" : "STRING", "default_value" : "Linear"}]} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LY b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LY deleted file mode 100644 index ad67a8fc27..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LY +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "LY", - "sections": [ - "GRID" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "Length" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LYFIN b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LYFIN deleted file mode 100644 index fc91dfc3b2..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LYFIN +++ /dev/null @@ -1,6 +0,0 @@ -{"name" : "LYFIN", -"sections" : ["GRID"], -"size" : 1, -"items" : [ -{"name" : "CELL_THICKNESS", "value_type" : "DOUBLE", "dimension" : "Length", "default_value" : 1.0}, -{"name" : "SIZE_OPTION", "value_type" : "STRING", "default_value" : "Linear"}]} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LZ b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LZ deleted file mode 100644 index 124437cd30..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LZ +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "LZ", - "sections": [ - "GRID" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "Length" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LZFIN b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LZFIN deleted file mode 100644 index e456d01622..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/L/LZFIN +++ /dev/null @@ -1,6 +0,0 @@ -{"name" : "LZFIN", -"sections" : ["GRID"], -"size" : 1, -"items" : [ -{"name" : "CELL_THICKNESS", "value_type" : "DOUBLE", "dimension" : "Length", "default_value" : 1.0}, -{"name" : "SIZE_OPTION", "value_type" : "STRING", "default_value" : "Linear"}]} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MAPAXES b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MAPAXES deleted file mode 100644 index 7e50552985..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MAPAXES +++ /dev/null @@ -1,39 +0,0 @@ -{ - "name": "MAPAXES", - "sections": [ - "GRID" - ], - "size": 1, - "items": [ - { - "name": "X1", - "value_type": "DOUBLE", - "dimension": "Length" - }, - { - "name": "Y1", - "value_type": "DOUBLE", - "dimension": "Length" - }, - { - "name": "X2", - "value_type": "DOUBLE", - "dimension": "Length" - }, - { - "name": "Y2", - "value_type": "DOUBLE", - "dimension": "Length" - }, - { - "name": "X3", - "value_type": "DOUBLE", - "dimension": "Length" - }, - { - "name": "Y3", - "value_type": "DOUBLE", - "dimension": "Length" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MAPUNITS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MAPUNITS deleted file mode 100644 index 71a42fd4ea..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MAPUNITS +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "MAPUNITS", - "sections": [ - "GRID" - ], - "size": 1, - "items": [ - { - "name": "UNIT", - "value_type": "STRING", - "default": "METRES" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MASSFLOW b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MASSFLOW deleted file mode 100644 index 6f23757fe6..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MASSFLOW +++ /dev/null @@ -1,13 +0,0 @@ -{ - "name": "MASSFLOW", - "sections": [ - "PROPS" - ], - "items": [ - { - "name": "WORD", - "value_type": "STRING", - "size_type": "ALL" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MATCORR b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MATCORR deleted file mode 100644 index 1a126e6b0d..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MATCORR +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "MATCORR", - "sections": [ - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "NEWTON_IT_NUM", - "value_type": "INT", - "default": 12 - }, - { - "name": "NON_LIN_CONV_ERR", - "value_type": "DOUBLE", - "dimension": "1", - "default": 0.01 - }, - { - "name": "MATERIAL_BALANCE_ERR", - "value_type": "DOUBLE", - "dimension": "1", - "default": 1e-06 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MAXVALUE b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MAXVALUE deleted file mode 100644 index dd0a0037a5..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MAXVALUE +++ /dev/null @@ -1,42 +0,0 @@ -{ - "name": "MAXVALUE", - "sections": [ - "GRID", - "EDIT", - "PROPS" - ], - "items": [ - { - "name": "field", - "value_type": "STRING" - }, - { - "name": "value", - "value_type": "DOUBLE" - }, - { - "name": "I1", - "value_type": "INT" - }, - { - "name": "I2", - "value_type": "INT" - }, - { - "name": "J1", - "value_type": "INT" - }, - { - "name": "J2", - "value_type": "INT" - }, - { - "name": "K1", - "value_type": "INT" - }, - { - "name": "K2", - "value_type": "INT" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MEMORY b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MEMORY deleted file mode 100644 index f43e932fb1..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MEMORY +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "MEMORY", - "sections": [ - "RUNSPEC" - ], - "size": 1, - "items": [ - { - "name": "UNUSED", - "value_type": "INT" - }, - { - "name": "THOUSANDS_CHAR8", - "value_type": "INT" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MESSAGE b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MESSAGE deleted file mode 100644 index 9a5f83cb5c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MESSAGE +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "MESSAGE", - "sections": [ - "RUNSPEC", - "GRID", - "EDIT", - "PROPS", - "REGIONS", - "SOLUTION", - "SUMMARY", - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "MessageText", - "value_type": "STRING", - "size_type": "ALL" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MESSAGES b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MESSAGES deleted file mode 100644 index 9f9969ddb6..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MESSAGES +++ /dev/null @@ -1,81 +0,0 @@ -{ - "name": "MESSAGES", - "sections": [ - "RUNSPEC", - "GRID", - "EDIT", - "PROPS", - "REGIONS", - "SOLUTION", - "SUMMARY", - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "MESSAGE_PRINT_LIMIT", - "value_type": "INT", - "default": 1000000 - }, - { - "name": "COMMENT_PRINT_LIMIT", - "value_type": "INT", - "default": 1000000 - }, - { - "name": "WARNING_PRINT_LIMIT", - "value_type": "INT", - "default": 10000 - }, - { - "name": "PROBLEM_PRINT_LIMIT", - "value_type": "INT", - "default": 100 - }, - { - "name": "ERROR_PRINT_LIMIT", - "value_type": "INT", - "default": 100 - }, - { - "name": "BUG_PRINT_LIMIT", - "value_type": "INT", - "default": 100 - }, - { - "name": "MESSAGE_STOP_LIMIT", - "value_type": "INT", - "default": 1000000 - }, - { - "name": "COMMENT_STOP_LIMIT", - "value_type": "INT", - "default": 1000000 - }, - { - "name": "WARNING_STOP_LIMIT", - "value_type": "INT", - "default": 10000 - }, - { - "name": "PROBLEM_STOP_LIMIT", - "value_type": "INT", - "default": 100 - }, - { - "name": "ERROR_STOP_LIMIT", - "value_type": "INT", - "default": 10 - }, - { - "name": "BUG_STOP_LIMIT", - "value_type": "INT", - "default": 1 - }, - { - "name": "GROUP_PRINT_LIMIT", - "value_type": "INT", - "default": 10 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MESSOPTS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MESSOPTS deleted file mode 100644 index 03c815211e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MESSOPTS +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "MESSOPTS", - "sections": [ - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "MNEMONIC", - "value_type": "STRING" - }, - { - "name": "SEVERITY", - "value_type": "INT" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MESSSRVC b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MESSSRVC deleted file mode 100644 index 8afaf5853f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MESSSRVC +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "MESSSRVC", - "sections": [ - "RUNSPEC" - ], - "size": 1, - "items": [ - { - "name": "PRODUCE_MESSAGE", - "value_type": "STRING", - "default": "ON" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/METRIC b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/METRIC deleted file mode 100644 index bdc9671698..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/METRIC +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "METRIC", - "sections": [ - "RUNSPEC" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MINNNCT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MINNNCT deleted file mode 100644 index 8c4334f75c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MINNNCT +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "MINNNCT", - "sections": [ - "GRID" - ], - "size": 1, - "items": [ - { - "name": "CUTOFF_TRANSMISSIBILITY", - "value_type": "DOUBLE", - "dimension": "Transmissibility", - "default": 0 - }, - { - "name": "DIFFUSIVITY", - "value_type": "DOUBLE", - "dimension": "Length", - "default": 0 - }, - { - "name": "CUTOFF_THERMAL_TRANSMISSIBILITY", - "value_type": "DOUBLE", - "dimension": "Energy/AbsoluteTemperature*Time", - "default": 0 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MINPORV b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MINPORV deleted file mode 100644 index 4f8f6ea124..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MINPORV +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "MINPORV", - "sections": [ - "GRID" - ], - "size": 1, - "items": [ - { - "name": "MIN_PORE_VOL", - "value_type": "DOUBLE", - "dimension": "ReservoirVolume", - "default": 1e-06 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MINPV b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MINPV deleted file mode 100644 index 8787949fb3..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MINPV +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "MINPV", - "sections": [ - "GRID" - ], - "size": 1, - "items": [ - { - "name": "VALUE", - "value_type": "DOUBLE", - "default": 1e-06, - "dimension": "ReservoirVolume" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MINPVV b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MINPVV deleted file mode 100644 index 98590e16e3..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MINPVV +++ /dev/null @@ -1,11 +0,0 @@ -{ - "name": "MINPVV", - "sections": [ - "GRID" - ], - "data": { - "value_type": "DOUBLE", - "default": 1e-06, - "dimension": "ReservoirVolume" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MINVALUE b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MINVALUE deleted file mode 100644 index e011e66536..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MINVALUE +++ /dev/null @@ -1,42 +0,0 @@ -{ - "name": "MINVALUE", - "sections": [ - "GRID", - "EDIT", - "PROPS" - ], - "items": [ - { - "name": "field", - "value_type": "STRING" - }, - { - "name": "value", - "value_type": "DOUBLE" - }, - { - "name": "I1", - "value_type": "INT" - }, - { - "name": "I2", - "value_type": "INT" - }, - { - "name": "J1", - "value_type": "INT" - }, - { - "name": "J2", - "value_type": "INT" - }, - { - "name": "K1", - "value_type": "INT" - }, - { - "name": "K2", - "value_type": "INT" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MISC b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MISC deleted file mode 100644 index 2c4269f93a..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MISC +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "MISC", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "MISCIBLE", - "item": "NTMISC" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "1", - "1" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MISCIBLE b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MISCIBLE deleted file mode 100644 index 9904708be4..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MISCIBLE +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "MISCIBLE", - "sections": [ - "RUNSPEC" - ], - "size": 1, - "items": [ - { - "name": "NTMISC", - "value_type": "INT", - "default": 1 - }, - { - "name": "NSMISC", - "value_type": "INT", - "default": 20 - }, - { - "name": "TWOPOINT", - "value_type": "STRING", - "default": "NONE" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MISCNUM b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MISCNUM deleted file mode 100644 index fa971e50e7..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MISCNUM +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "MISCNUM", - "sections": [ - "REGIONS" - ], - "data": { - "value_type": "INT" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MLANG b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MLANG deleted file mode 100644 index c603a8ef1f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MLANG +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "MLANG", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "GasSurfaceVolume/Length*Length*Length" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MLANGSLV b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MLANGSLV deleted file mode 100644 index 9a386f702e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MLANGSLV +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "MLANGSLV", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "GasSurfaceVolume/Length*Length*Length" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MONITOR b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MONITOR deleted file mode 100644 index c8646f0e57..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MONITOR +++ /dev/null @@ -1,7 +0,0 @@ -{ - "name": "MONITOR", - "sections": [ - "RUNSPEC", - "SUMMARY" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MPFANUM b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MPFANUM deleted file mode 100644 index 31d1b57613..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MPFANUM +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "MPFANUM", - "sections": [ - "GRID" - ], - "data": { - "value_type": "INT" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MPFNNC b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MPFNNC deleted file mode 100644 index b75bbff27b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MPFNNC +++ /dev/null @@ -1,58 +0,0 @@ -{ - "name": "MPFNNC", - "sections": [ - "GRID" - ], - "records_set": [ - [ - { - "name": "IX", - "value_type": "INT" - }, - { - "name": "IY", - "value_type": "INT" - }, - { - "name": "IZ", - "value_type": "INT" - }, - { - "name": "JX", - "value_type": "INT" - }, - { - "name": "JY", - "value_type": "INT" - }, - { - "name": "JZ", - "value_type": "INT" - }, - { - "name": "TRANP", - "value_type": "DOUBLE", - "dimension": "Transmissibility" - } - ], - [ - { - "name": "KX", - "value_type": "INT" - }, - { - "name": "KY", - "value_type": "INT" - }, - { - "name": "KZ", - "value_type": "INT" - }, - { - "name": "TRANS", - "value_type": "DOUBLE", - "dimension": "Transmissibility" - } - ] - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MSFN b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MSFN deleted file mode 100644 index 3341a30d18..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MSFN +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "MSFN", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTSFUN" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "1", - "1", - "1" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MSGFILE b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MSGFILE deleted file mode 100644 index ecd9efb48f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MSGFILE +++ /dev/null @@ -1,13 +0,0 @@ -{ - "name": "MSGFILE", - "sections": [ - "RUNSPEC" - ], - "size": 1, - "items": [ - { - "name": "ENABLE_FLAG", - "value_type": "INT" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MULSGGD b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MULSGGD deleted file mode 100644 index 83f7f39e54..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MULSGGD +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "MULSGGD", - "sections": [ - "SCHEDULE" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MULSGGDV b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MULSGGDV deleted file mode 100644 index 5136eb37db..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MULSGGDV +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "MULSGGDV", - "sections": [ - "SCHEDULE" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MULTFLT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MULTFLT deleted file mode 100644 index 9d31689735..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MULTFLT +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "MULTFLT", - "sections": [ - "GRID", - "EDIT", - "SCHEDULE" - ], - "items": [ - { - "name": "fault", - "value_type": "STRING" - }, - { - "name": "factor", - "value_type": "DOUBLE" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MULTIN b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MULTIN deleted file mode 100644 index fc5ca5f5fd..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MULTIN +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "MULTIN", - "sections": [ - "RUNSPEC" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MULTIPLY b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MULTIPLY deleted file mode 100644 index ba93c942bb..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MULTIPLY +++ /dev/null @@ -1,45 +0,0 @@ -{ - "name": "MULTIPLY", - "sections": [ - "GRID", - "EDIT", - "PROPS", - "REGIONS", - "SOLUTION" - ], - "items": [ - { - "name": "field", - "value_type": "STRING" - }, - { - "name": "factor", - "value_type": "DOUBLE", - "dimension": "1" - }, - { - "name": "I1", - "value_type": "INT" - }, - { - "name": "I2", - "value_type": "INT" - }, - { - "name": "J1", - "value_type": "INT" - }, - { - "name": "J2", - "value_type": "INT" - }, - { - "name": "K1", - "value_type": "INT" - }, - { - "name": "K2", - "value_type": "INT" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MULTIREG b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MULTIREG deleted file mode 100644 index b655b2e189..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MULTIREG +++ /dev/null @@ -1,34 +0,0 @@ -{ - "name": "MULTIREG", - "sections": [ - "GRID", - "EDIT", - "PROPS", - "REGIONS", - "SOLUTION" - ], - "items": [ - { - "name": "ARRAY", - "value_type": "STRING", - "description": "The 3D array we will update" - }, - { - "name": "FACTOR", - "value_type": "DOUBLE", - "description": "The value we will multiply with", - "default": 0 - }, - { - "name": "REGION_NUMBER", - "value_type": "INT", - "description": "The region number we are interested in" - }, - { - "name": "REGION_NAME", - "value_type": "STRING", - "description": "The name of the region we are interested in", - "default": "M" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MULTNUM b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MULTNUM deleted file mode 100644 index 11fe6e44e3..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MULTNUM +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "MULTNUM", - "sections": [ - "GRID" - ], - "data": { - "value_type": "INT" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MULTOUT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MULTOUT deleted file mode 100644 index 5b15d6a08d..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MULTOUT +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "MULTOUT", - "sections": [ - "RUNSPEC" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MULTOUTS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MULTOUTS deleted file mode 100644 index 92706e6b71..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MULTOUTS +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "MULTOUTS", - "sections": [ - "RUNSPEC" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MULTPV b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MULTPV deleted file mode 100644 index 0f20bb85ce..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MULTPV +++ /dev/null @@ -1,11 +0,0 @@ -{ - "name": "MULTPV", - "sections": [ - "GRID", - "EDIT" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MULTREAL b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MULTREAL deleted file mode 100644 index 9207408960..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MULTREAL +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "MULTREAL", - "sections": [ - "RUNSPEC" - ], - "size": 1, - "items": [ - { - "name": "SESSION_SPEC", - "value_type": "STRING" - }, - { - "name": "STANDARD_LICENCE", - "value_type": "STRING", - "default": "YES" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MULTREGD b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MULTREGD deleted file mode 100644 index 19645b1342..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MULTREGD +++ /dev/null @@ -1,37 +0,0 @@ -{ - "name": "MULTREGD", - "sections": [ - "GRID", - "EDIT" - ], - "items": [ - { - "name": "FROM_REGION", - "value_type": "INT" - }, - { - "name": "TO_REGION", - "value_type": "INT" - }, - { - "name": "MULTIPLIER", - "value_type": "DOUBLE", - "dimension": "1" - }, - { - "name": "DIRECTION", - "value_type": "STRING", - "default": "XYZ" - }, - { - "name": "FLAG", - "value_type": "STRING", - "default": "ALL" - }, - { - "name": "CHOICE", - "value_type": "STRING", - "default": "M" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MULTREGH b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MULTREGH deleted file mode 100644 index d81336f37d..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MULTREGH +++ /dev/null @@ -1,37 +0,0 @@ -{ - "name": "MULTREGH", - "sections": [ - "GRID", - "EDIT" - ], - "items": [ - { - "name": "FROM_REGION", - "value_type": "INT" - }, - { - "name": "TO_REGION", - "value_type": "INT" - }, - { - "name": "MULTIPLIER", - "value_type": "DOUBLE", - "dimension": "1" - }, - { - "name": "DIRECTION", - "value_type": "STRING", - "default": "XYZ" - }, - { - "name": "FLAG", - "value_type": "STRING", - "default": "ALL" - }, - { - "name": "CHOICE", - "value_type": "STRING", - "default": "M" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MULTREGP b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MULTREGP deleted file mode 100644 index 9b4394de40..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MULTREGP +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "MULTREGP", - "sections": [ - "GRID", - "EDIT" - ], - "items": [ - { - "name": "REGION", - "value_type": "INT" - }, - { - "name": "MULTIPLIER", - "value_type": "DOUBLE" - }, - { - "name": "REGION_TYPE", - "value_type": "STRING", - "default": "M" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MULTREGT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MULTREGT deleted file mode 100644 index 10a91ad136..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MULTREGT +++ /dev/null @@ -1,37 +0,0 @@ -{ - "name": "MULTREGT", - "sections": [ - "GRID", - "EDIT", - "SCHEDULE" - ], - "items": [ - { - "name": "SRC_REGION", - "value_type": "INT" - }, - { - "name": "TARGET_REGION", - "value_type": "INT" - }, - { - "name": "TRAN_MULT", - "value_type": "DOUBLE" - }, - { - "name": "DIRECTIONS", - "value_type": "STRING", - "default": "XYZ" - }, - { - "name": "NNC_MULT", - "value_type": "STRING", - "default": "ALL" - }, - { - "name": "REGION_DEF", - "value_type": "STRING", - "default": "M" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MULTSIG b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MULTSIG deleted file mode 100644 index b2ae606ebe..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MULTSIG +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "MULTSIG", - "sections": [ - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "VALUE", - "value_type": "DOUBLE", - "dimension": "1" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MULTSIGV b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MULTSIGV deleted file mode 100644 index d72b5aae27..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MULTSIGV +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "MULTSIGV", - "sections": [ - "SCHEDULE" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MULT_XYZ b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MULT_XYZ deleted file mode 100644 index e3f1eca46f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/M/MULT_XYZ +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "MULT_XYZ", - "sections": [ - "GRID", - "EDIT" - ], - "deck_names": [ - "MULTTHT", - "MULTTHT-", - "MULTR", - "MULTR-", - "MULTX", - "MULTX-", - "MULTY", - "MULTY-", - "MULTZ", - "MULTZ-" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NARROW b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NARROW deleted file mode 100644 index c046f50b94..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NARROW +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "NARROW", - "sections": [ - "SUMMARY" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NCONSUMP b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NCONSUMP deleted file mode 100644 index 3be15d29c1..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NCONSUMP +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "NCONSUMP", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "NODE", - "value_type": "STRING" - }, - { - "name": "GAS_CONSUMPTION_RATE", - "value_type": "DOUBLE", - "dimension": "GasSurfaceVolume/Time", - "default": 0 - }, - { - "name": "REMOVAL_GROUP", - "value_type": "STRING" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NEFAC b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NEFAC deleted file mode 100644 index 3ec9fcd01a..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NEFAC +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "NEFAC", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "NODE", - "value_type": "STRING" - }, - { - "name": "EFF_FACTOR", - "value_type": "DOUBLE", - "dimension": "1", - "default": 1 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NETBALAN b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NETBALAN deleted file mode 100644 index e37fa84869..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NETBALAN +++ /dev/null @@ -1,49 +0,0 @@ -{ - "name": "NETBALAN", - "sections": [ - "SPECIAL", - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "TIME_INTERVAL", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "PRESSURE_CONVERGENCE_LIMT", - "value_type": "DOUBLE", - "default": 1e-05 - }, - { - "name": "MAX_ITER", - "value_type": "INT", - "default": 10 - }, - { - "name": "THP_CONVERGENCE_LIMIT", - "value_type": "DOUBLE", - "default": 0.01 - }, - { - "name": "MAX_ITER_THP", - "value_type": "INT", - "default": 10 - }, - { - "name": "TARGET_BALANCE_ERROR", - "value_type": "DOUBLE", - "default": 1e+20 - }, - { - "name": "MAX_BALANCE_ERROR", - "value_type": "DOUBLE", - "default": 1e+20 - }, - { - "name": "MIN_TIME_STEP", - "value_type": "DOUBLE" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NETCOMPA b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NETCOMPA deleted file mode 100644 index 86f764b500..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NETCOMPA +++ /dev/null @@ -1,63 +0,0 @@ -{ - "name": "NETCOMPA", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "INLET", - "value_type": "STRING" - }, - { - "name": "OUTLET", - "value_type": "STRING" - }, - { - "name": "GROUP", - "value_type": "STRING", - "default": "" - }, - { - "name": "PHASE", - "value_type": "STRING", - "default": "GAS" - }, - { - "name": "VFT_TABLE_NUM", - "value_type": "INT", - "default": 0 - }, - { - "name": "ALQ", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "GAS_CONSUMPTION_RATE", - "value_type": "DOUBLE", - "dimension": "GasSurfaceVolume/Time", - "default": 0 - }, - { - "name": "EXTRACTION_GROUP", - "value_type": "STRING", - "default": "" - }, - { - "name": "COMPRESSOR_TYPE", - "value_type": "STRING" - }, - { - "name": "NUM_COMPRESSION_LEVELS", - "value_type": "INT" - }, - { - "name": "ALQ_LEVEL1", - "value_type": "DOUBLE" - }, - { - "name": "COMP_SWITCH_SEQ_NUM", - "value_type": "INT" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NETWORK b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NETWORK deleted file mode 100644 index 4c1221788f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NETWORK +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "NETWORK", - "sections": [ - "RUNSPEC" - ], - "size": 1, - "items": [ - { - "name": "NODMAX", - "value_type": "INT" - }, - { - "name": "NBRMAX", - "value_type": "INT" - }, - { - "name": "NBCMAX", - "value_type": "INT", - "default": 20 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NEWTRAN b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NEWTRAN deleted file mode 100644 index b69c5b17b4..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NEWTRAN +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "NEWTRAN", - "sections": [ - "GRID" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NEXT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NEXT deleted file mode 100644 index 6e8e75ad1f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NEXT +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "NEXT", - "sections": [ - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "MAX_STEP", - "value_type": "DOUBLE", - "dimension": "Time" - }, - { - "name": "APPLY_TO_ALL", - "value_type": "STRING", - "default": "NO" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NEXTSTEP b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NEXTSTEP deleted file mode 100644 index 4cebd15ae6..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NEXTSTEP +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "NEXTSTEP", - "sections": [ - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "MAX_STEP", - "value_type": "DOUBLE", - "dimension": "Time" - }, - { - "name": "APPLY_TO_ALL", - "value_type": "STRING", - "default": "NO" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NEXTSTPL b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NEXTSTPL deleted file mode 100644 index 4049235536..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NEXTSTPL +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "NEXTSTPL", - "sections": [ - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "MAX_LENGTH", - "value_type": "DOUBLE", - "dimension": "Time" - }, - { - "name": "APPLY_TO_ALL", - "value_type": "STRING", - "default": "NO" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NINENUM b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NINENUM deleted file mode 100644 index 1ab15fd425..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NINENUM +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "NINENUM", - "sections": [ - "GRID" - ], - "data": { - "value_type": "INT" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NINEPOIN b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NINEPOIN deleted file mode 100644 index 374de74c8b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NINEPOIN +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "NINEPOIN", - "sections": [ - "RUNSPEC" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NMATOPTS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NMATOPTS deleted file mode 100644 index 7da060fe23..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NMATOPTS +++ /dev/null @@ -1,25 +0,0 @@ -{ - "name": "NMATOPTS", - "sections": [ - "GRID" - ], - "size": 1, - "items": [ - { - "name": "GEOMETRY", - "value_type": "STRING", - "default": "LINEAR" - }, - { - "name": "FRACTION_PORE_VOL", - "value_type": "DOUBLE", - "dimension": "1", - "default": 0.1 - }, - { - "name": "METHOD", - "value_type": "STRING", - "default": "FPORV" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NMATRIX b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NMATRIX deleted file mode 100644 index ebd4bdb47c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NMATRIX +++ /dev/null @@ -1,13 +0,0 @@ -{ - "name": "NMATRIX", - "sections": [ - "RUNSPEC" - ], - "size": 1, - "items": [ - { - "name": "NUM_SUB_CELLS", - "value_type": "INT" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NNC b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NNC deleted file mode 100644 index 0bdd4ddd06..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NNC +++ /dev/null @@ -1,94 +0,0 @@ -{ - "name": "NNC", - "sections": [ - "GRID" - ], - "items": [ - { - "name": "I1", - "value_type": "INT" - }, - { - "name": "J1", - "value_type": "INT" - }, - { - "name": "K1", - "value_type": "INT" - }, - { - "name": "I2", - "value_type": "INT" - }, - { - "name": "J2", - "value_type": "INT" - }, - { - "name": "K2", - "value_type": "INT" - }, - { - "name": "TRAN", - "value_type": "DOUBLE", - "dimension": "Transmissibility", - "default": 0 - }, - { - "name": "SIM_DEPENDENT1", - "value_type": "DOUBLE", - "dimension": "ContextDependent", - "default": 0 - }, - { - "name": "SIM_DEPENDENT2", - "comment": "This item is deprecated", - "value_type": "DOUBLE", - "dimension": "ContextDependent", - "default": 0 - }, - { - "name": "PRESSURE_TABLE1", - "value_type": "INT", - "default": 0 - }, - { - "name": "PRESSURE_TABLE2", - "value_type": "INT", - "default": 0 - }, - { - "name": "VE_FACE1", - "value_type": "STRING", - "default": "" - }, - { - "name": "VE_FACE2", - "value_type": "STRING", - "default": "" - }, - { - "name": "DIFFUSIVITY", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "SIM_DEPENDENT3", - "value_type": "DOUBLE", - "dimension": "ContextDependent", - "default": 0 - }, - { - "name": "VDFLOW_AREA", - "value_type": "DOUBLE", - "dimension": "Length*Length", - "default": 0 - }, - { - "name": "VDFLOW_PERM", - "value_type": "DOUBLE", - "dimension": "Permeability", - "default": 0 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NNEWTF b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NNEWTF deleted file mode 100644 index d2698c37a9..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NNEWTF +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "NNEWTF", - "sections": [ - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "NTHRBL", - "value_type": "INT" - }, - { - "name": "NLNHBL", - "value_type": "INT" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NOCASC b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NOCASC deleted file mode 100644 index 79c9fe2aeb..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NOCASC +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "NOCASC", - "sections": [ - "RUNSPEC" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NODEPROP b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NODEPROP deleted file mode 100644 index f4e6831547..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NODEPROP +++ /dev/null @@ -1,35 +0,0 @@ -{ - "name": "NODEPROP", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "NAME", - "value_type": "STRING" - }, - { - "name": "PRESSURE", - "value_type": "DOUBLE", - "dimension": "Pressure" - }, - { - "name": "AS_CHOKE", - "value_type": "STRING", - "default": "NO" - }, - { - "name": "CHOKE_GROUP", - "value_type": "STRING" - }, - { - "name": "SOURCE_SINK_GROUP", - "value_type": "STRING" - }, - { - "name": "NETWORK_VALUE_TYPE", - "value_type": "STRING", - "default": "PROD" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NODPPM b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NODPPM deleted file mode 100644 index 4a0aabc1c8..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NODPPM +++ /dev/null @@ -1,7 +0,0 @@ -{ - "name": "NODPPM", - "sections": [ - "RUNSPEC", - "GRID" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NOECHO b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NOECHO deleted file mode 100644 index 2168dc0520..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NOECHO +++ /dev/null @@ -1,13 +0,0 @@ -{ - "name": "NOECHO", - "sections": [ - "RUNSPEC", - "GRID", - "EDIT", - "PROPS", - "REGIONS", - "SOLUTION", - "SUMMARY", - "SCHEDULE" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NOGGF b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NOGGF deleted file mode 100644 index d120c6c00c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NOGGF +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "NOGGF", - "sections": [ - "GRID" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NOHMD b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NOHMD deleted file mode 100644 index fd5ff70f16..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NOHMD +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "NOHMD", - "sections": [ - "SOLUTION", - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "GRAD_PARAMS", - "value_type": "STRING", - "size_type": "ALL" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NOHMO b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NOHMO deleted file mode 100644 index 01784b853c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NOHMO +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "NOHMO", - "sections": [ - "SOLUTION", - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "GRAD_PARAMS", - "value_type": "STRING", - "size_type": "ALL" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NOHYST b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NOHYST deleted file mode 100644 index 99e2ac86db..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NOHYST +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "NOHYST", - "sections": [ - "RUNSPEC" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NOINSPEC b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NOINSPEC deleted file mode 100644 index 6349b26e23..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NOINSPEC +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "NOINSPEC", - "sections": [ - "RUNSPEC" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NOMONITO b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NOMONITO deleted file mode 100644 index d680f54b43..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NOMONITO +++ /dev/null @@ -1,7 +0,0 @@ -{ - "name": "NOMONITO", - "sections": [ - "RUNSPEC", - "SUMMARY" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NONNC b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NONNC deleted file mode 100644 index aaf30de091..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NONNC +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "NONNC", - "sections": [ - "RUNSPEC" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NORSSPEC b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NORSSPEC deleted file mode 100644 index 934f12cf0b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NORSSPEC +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "NORSSPEC", - "sections": [ - "RUNSPEC" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NOSIM b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NOSIM deleted file mode 100644 index a83f6430f6..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NOSIM +++ /dev/null @@ -1,7 +0,0 @@ -{ - "name": "NOSIM", - "sections": [ - "RUNSPEC", - "SCHEDULE" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NOWARN b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NOWARN deleted file mode 100644 index 796e8f6c39..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NOWARN +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "NOWARN", - "sections": [ - "RUNSPEC", - "GRID", - "EDIT", - "PROPS", - "REGIONS", - "SOLUTION", - "SUMMARY", - "SCHEDULE" - ], - "size": 0 -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NOWARNEP b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NOWARNEP deleted file mode 100644 index ac396b35b1..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NOWARNEP +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "NOWARNEP", - "sections": [ - "PROPS" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NRSOUT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NRSOUT deleted file mode 100644 index e406be15ed..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NRSOUT +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "NRSOUT", - "sections": [ - "RUNSPEC" - ], - "size": 1, - "items": [ - { - "name": "MAX_NUM", - "value_type": "INT", - "default": 3600 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NSTACK b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NSTACK deleted file mode 100644 index 3a2d5c5a98..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NSTACK +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "NSTACK", - "sections": [ - "RUNSPEC", - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "LINEAR_SOLVER_SIZE", - "value_type": "INT", - "default": 10 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NTG b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NTG deleted file mode 100644 index f04c7fc15e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NTG +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "NTG", - "sections": [ - "GRID" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NUMRES b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NUMRES deleted file mode 100644 index e50cd84a86..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NUMRES +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "NUMRES", - "sections": [ - "RUNSPEC" - ], - "size": 1, - "items": [ - { - "name": "num", - "value_type": "INT", - "default": 1 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NUPCOL b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NUPCOL deleted file mode 100644 index ef2b2057ae..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NUPCOL +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "NUPCOL", - "sections": [ - "RUNSPEC", - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "NUM_ITER", - "value_type": "INT", - "default": 12, - "comment": "The default is 3 in Eclipse100 and 2 in Eclipse300" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NWATREM b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NWATREM deleted file mode 100644 index c3fbb6bc7f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NWATREM +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "NWATREM", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "NODE", - "value_type": "STRING" - }, - { - "name": "WAX_RATE", - "value_type": "DOUBLE", - "dimension": "LiquidSurfaceVolume/Time", - "default": 1e+100 - }, - { - "name": "MAX_FRAC_REMOVAL", - "value_type": "DOUBLE", - "dimension": "1", - "default": 1 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NXFIN b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NXFIN deleted file mode 100644 index 87a4ae20c5..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NXFIN +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "NXFIN", - "sections": [ - "GRID" - ], - "data": { - "value_type": "INT" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NYFIN b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NYFIN deleted file mode 100644 index ad9fd824b5..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NYFIN +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "NYFIN", - "sections": [ - "GRID" - ], - "data": { - "value_type": "INT" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NZFIN b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NZFIN deleted file mode 100644 index 996be37158..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/N/NZFIN +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "NZFIN", - "sections": [ - "GRID" - ], - "data": { - "value_type": "INT" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/O/OFM b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/O/OFM deleted file mode 100644 index 98eea45f0d..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/O/OFM +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "OFM", - "sections": [ - "SUMMARY" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/O/OIL b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/O/OIL deleted file mode 100644 index b8b01932ce..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/O/OIL +++ /dev/null @@ -1,7 +0,0 @@ -{ - "name": "OIL", - "sections": [ - "RUNSPEC" - ], - "size": 0 -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/O/OILAPI b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/O/OILAPI deleted file mode 100644 index 49b525ae05..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/O/OILAPI +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "OILAPI", - "sections": [ - "SOLUTION" - ], - "data": { - "value_type": "DOUBLE" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/O/OILVISCT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/O/OILVISCT deleted file mode 100644 index 2b0f27c959..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/O/OILVISCT +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "OILVISCT", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTPVT" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "Temperature", - "Viscosity" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/O/OLDTRAN b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/O/OLDTRAN deleted file mode 100644 index a2f8ad8dae..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/O/OLDTRAN +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "OLDTRAN", - "sections": [ - "GRID" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/O/OLDTRANR b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/O/OLDTRANR deleted file mode 100644 index b40e837214..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/O/OLDTRANR +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "OLDTRANR", - "sections": [ - "GRID" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/O/OPERATE b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/O/OPERATE deleted file mode 100644 index 84f57ab3cf..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/O/OPERATE +++ /dev/null @@ -1,58 +0,0 @@ -{ - "name": "OPERATE", - "sections": [ - "GRID", - "EDIT", - "PROPS", - "REGIONS", - "SOLUTION" - ], - "items": [ - { - "name": "TARGET_ARRAY", - "value_type": "STRING" - }, - { - "name": "I1", - "value_type": "INT" - }, - { - "name": "I2", - "value_type": "INT" - }, - { - "name": "J1", - "value_type": "INT" - }, - { - "name": "J2", - "value_type": "INT" - }, - { - "name": "K1", - "value_type": "INT" - }, - { - "name": "K2", - "value_type": "INT" - }, - { - "name": "OPERATION", - "value_type": "STRING" - }, - { - "name": "ARRAY", - "value_type": "STRING" - }, - { - "name": "PARAM1", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "PARAM2", - "value_type": "DOUBLE", - "default": 0 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/O/OPERATER b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/O/OPERATER deleted file mode 100644 index 3b182659f8..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/O/OPERATER +++ /dev/null @@ -1,43 +0,0 @@ -{ - "name": "OPERATER", - "sections": [ - "GRID", - "EDIT", - "PROPS", - "REGIONS", - "SOLUTION" - ], - "items": [ - { - "name": "RESULT_ARRAY", - "value_type": "STRING" - }, - { - "name": "REGION_NUMBER", - "value_type": "INT" - }, - { - "name": "OPERATION", - "value_type": "STRING" - }, - { - "name": "ARRAY_PARAMETER", - "value_type": "STRING" - }, - { - "name": "PARAM1", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "PARAM2", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "REGION_NAME", - "value_type": "STRING", - "default": "OPERNUM" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/O/OPERNUM b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/O/OPERNUM deleted file mode 100644 index e5a7d1cd20..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/O/OPERNUM +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "OPERNUM", - "sections": [ - "GRID", - "REGIONS" - ], - "data": { - "value_type": "INT" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/O/OPTIONS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/O/OPTIONS deleted file mode 100644 index e1ebc07878..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/O/OPTIONS +++ /dev/null @@ -1,995 +0,0 @@ -{ - "name": "OPTIONS", - "sections": [ - "RUNSPEC", - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "ITEM1", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM2", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM3", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM4", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM5", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM6", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM7", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM8", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM9", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM10", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM11", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM12", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM13", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM14", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM15", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM16", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM17", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM18", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM19", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM20", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM21", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM22", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM23", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM24", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM25", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM26", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM27", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM28", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM29", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM30", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM31", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM32", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM33", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM34", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM35", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM36", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM37", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM38", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM39", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM40", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM41", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM42", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM43", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM44", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM45", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM46", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM47", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM48", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM49", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM50", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM51", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM52", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM53", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM54", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM55", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM56", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM57", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM58", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM59", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM60", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM61", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM62", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM63", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM64", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM65", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM66", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM67", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM68", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM69", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM70", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM71", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM72", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM73", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM74", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM75", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM76", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM77", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM78", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM79", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM80", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM81", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM82", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM83", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM84", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM85", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM86", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM87", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM88", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM89", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM90", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM91", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM92", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM93", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM94", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM95", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM96", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM97", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM98", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM99", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM100", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM101", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM102", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM103", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM104", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM105", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM106", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM107", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM108", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM109", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM110", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM111", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM112", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM113", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM114", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM115", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM116", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM117", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM118", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM119", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM120", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM121", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM122", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM123", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM124", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM125", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM126", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM127", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM128", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM129", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM130", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM131", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM132", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM133", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM134", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM135", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM136", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM137", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM138", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM139", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM140", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM141", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM142", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM143", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM144", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM145", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM146", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM147", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM148", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM149", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM150", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM151", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM152", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM153", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM154", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM155", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM156", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM157", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM158", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM159", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM160", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM161", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM162", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM163", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM164", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM165", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM166", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM167", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM168", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM169", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM170", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM171", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM172", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM173", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM174", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM175", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM176", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM177", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM178", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM179", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM180", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM181", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM182", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM183", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM184", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM185", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM186", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM187", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM188", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM189", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM190", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM191", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM192", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM193", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM194", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM195", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM196", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM197", - "value_type": "INT", - "default": 0 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/O/OUTRAD b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/O/OUTRAD deleted file mode 100644 index f92fa20727..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/O/OUTRAD +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "OUTRAD", - "sections": [ - "GRID" - ], - "size": 1, - "items": [ - { - "name": "RADIUS", - "value_type": "DOUBLE", - "dimension": "Length" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/O/OUTSOL b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/O/OUTSOL deleted file mode 100644 index 0f12d98442..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/O/OUTSOL +++ /dev/null @@ -1 +0,0 @@ -{"name" : "OUTSOL", "sections" : ["SOLUTION", "SCHEDULE"]} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/O/OVERBURD b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/O/OVERBURD deleted file mode 100644 index ac045066e8..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/O/OVERBURD +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "OVERBURD", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "ROCKCOMP", - "item": "NTROCC" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "Length", - "Pressure" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PARALLEL b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PARALLEL deleted file mode 100644 index 77716dca16..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PARALLEL +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "PARALLEL", - "sections": [ - "RUNSPEC" - ], - "size": 1, - "items": [ - { - "name": "NDMAIN", - "value_type": "INT", - "default": 1 - }, - { - "name": "MACHINE_TYPE", - "value_type": "STRING", - "default": "DISTRIBUTED" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PARAOPTS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PARAOPTS deleted file mode 100644 index d300c3938b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PARAOPTS +++ /dev/null @@ -1,53 +0,0 @@ -{ - "name": "PARAOPTS", - "sections": [ - "GRID" - ], - "size": 1, - "items": [ - { - "name": "METHOD", - "value_type": "STRING", - "default": "TREE" - }, - { - "name": "SET_PRINT", - "value_type": "INT", - "default": 0 - }, - { - "name": "SIZE", - "value_type": "INT", - "default": 0 - }, - { - "name": "NUM_BUFFERS", - "value_type": "INT", - "default": 2 - }, - { - "name": "VALUE_MEM", - "value_type": "INT", - "default": 0 - }, - { - "name": "VALUE_COARSE", - "value_type": "INT", - "default": 0 - }, - { - "name": "VALUE_NNC", - "value_type": "INT", - "default": 0 - }, - { - "name": "VALUE_PRT_FILE", - "value_type": "INT", - "default": 1 - }, - { - "name": "RESERVED", - "value_type": "STRING" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PARTTRAC b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PARTTRAC deleted file mode 100644 index e6e1bba7e2..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PARTTRAC +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "PARTTRAC", - "sections": [ - "RUNSPEC" - ], - "size": 1, - "items": [ - { - "name": "NPARTT", - "value_type": "INT", - "default": 0 - }, - { - "name": "NKPTMX", - "value_type": "INT", - "default": 0 - }, - { - "name": "NPKPMX", - "value_type": "INT", - "default": 0 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PATHS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PATHS deleted file mode 100644 index d08e83b5eb..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PATHS +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "PATHS", - "sections": [ - "RUNSPEC" - ], - "items": [ - { - "name": "PathName", - "value_type": "STRING" - }, - { - "name": "PathValue", - "value_type": "STRING" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PBUB b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PBUB deleted file mode 100644 index 400429c542..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PBUB +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "PBUB", - "sections": [ - "SOLUTION" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "Pressure" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PBVD b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PBVD deleted file mode 100644 index 40afbb608c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PBVD +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "PBVD", - "sections": [ - "SOLUTION" - ], - "size": { - "keyword": "EQLDIMS", - "item": "NTEQUL" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "Length", - "Pressure" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PCG b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PCG deleted file mode 100644 index 27a168fa6c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PCG +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "PCG", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "Pressure" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PCG32D b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PCG32D deleted file mode 100644 index 8b0ed8eb3c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PCG32D +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "PCG32D", - "sections": [ - "PROPS" - ], - "num_tables": { - "keyword": "TABDIMS", - "item": "NTSFUN" - }, - "items": [ - { - "name": "SOME_DATA", - "value_type": "DOUBLE", - "size_type": "ALL" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PCW b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PCW deleted file mode 100644 index c71ea965de..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PCW +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "PCW", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "Pressure" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PCW32D b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PCW32D deleted file mode 100644 index 2e341a04d1..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PCW32D +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "PCW32D", - "sections": [ - "PROPS" - ], - "num_tables": { - "keyword": "TABDIMS", - "item": "NTSFUN" - }, - "items": [ - { - "name": "SOME_DATA", - "value_type": "DOUBLE", - "size_type": "ALL" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PDEW b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PDEW deleted file mode 100644 index b5a19facd4..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PDEW +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "PDEW", - "sections": [ - "SOLUTION" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "Pressure" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PDVD b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PDVD deleted file mode 100644 index d13fc863de..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PDVD +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "PDVD", - "sections": [ - "SOLUTION" - ], - "size": { - "keyword": "EQLDIMS", - "item": "NTEQUL" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "Length", - "Pressure" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PEBI b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PEBI deleted file mode 100644 index ef90c81701..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PEBI +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "PEBI", - "sections": [ - "GRID" - ], - "size": 1, - "items": [ - { - "name": "NEG_TRANSMISSIBILITIES", - "value_type": "STRING", - "default": "No" - }, - { - "name": "AVOID_GRID_CALC", - "value_type": "STRING", - "default": "No" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PECOEFS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PECOEFS deleted file mode 100644 index bdde12b862..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PECOEFS +++ /dev/null @@ -1,65 +0,0 @@ -{ - "name": "PECOEFS", - "sections": [ - "PROPS" - ], - "items": [ - { - "name": "WAT_SALINITY", - "value_type": "DOUBLE", - "dimension": "1" - }, - { - "name": "TEMP", - "value_type": "DOUBLE", - "dimension": "Temperature" - }, - { - "name": "MINERAL_DENSITY", - "value_type": "DOUBLE", - "dimension": "Density" - }, - { - "name": "PHI_EFF_0", - "value_type": "DOUBLE", - "dimension": "Pressure" - }, - { - "name": "PHI_EFF_1", - "value_type": "DOUBLE", - "dimension": "Pressure" - }, - { - "name": "C_0", - "value_type": "DOUBLE", - "dimension": "1" - }, - { - "name": "C_K", - "value_type": "DOUBLE", - "dimension": "1" - }, - { - "name": "SHEAR_MOD", - "value_type": "DOUBLE", - "dimension": "Pressure" - }, - { - "name": "ALPHA", - "value_type": "DOUBLE", - "dimension": "1", - "default": 1 - }, - { - "name": "E", - "value_type": "DOUBLE", - "dimension": "1", - "default": 1 - }, - { - "name": "METHOD", - "value_type": "INT", - "default": 0 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PEDIMS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PEDIMS deleted file mode 100644 index 4a132a1392..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PEDIMS +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "PEDIMS", - "sections": [ - "RUNSPEC" - ], - "size": 1, - "items": [ - { - "name": "NUM_REGIONS", - "value_type": "INT", - "default": 0 - }, - { - "name": "MAX_PRESSURE_POINTS", - "value_type": "INT", - "default": 0 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PEGTABX b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PEGTABX deleted file mode 100644 index 8a2adffcfc..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PEGTABX +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "PEGTABX", - "sections": [ - "PROPS" - ], - "deck_names": [ - "PEGTAB0", - "PEGTAB1", - "PEGTAB2", - "PEGTAB3", - "PEGTAB4", - "PEGTAB5", - "PEGTAB6", - "PEGTAB7" - ], - "size": { - "keyword": "PEDIMS", - "item": "NUM_REGIONS" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "Pressure", - "Pressure" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PEKTABX b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PEKTABX deleted file mode 100644 index 38040a588c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PEKTABX +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "PEKTABX", - "sections": [ - "PROPS" - ], - "deck_names": [ - "PEKTAB0", - "PEKTAB1", - "PEKTAB2", - "PEKTAB3", - "PEKTAB4", - "PEKTAB5", - "PEKTAB6", - "PEKTAB7" - ], - "size": { - "keyword": "PEDIMS", - "item": "NUM_REGIONS" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "Pressure", - "Pressure" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PENUM b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PENUM deleted file mode 100644 index 7f25338aa4..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PENUM +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "PENUM", - "sections": [ - "REGIONS" - ], - "data": { - "value_type": "INT" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PERFORMANCE_PROBE b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PERFORMANCE_PROBE deleted file mode 100644 index 2a0baf4658..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PERFORMANCE_PROBE +++ /dev/null @@ -1,41 +0,0 @@ -{ - "name": "PERFORMANCE_PROBE", - "sections": [ - "SUMMARY" - ], - "deck_names": [ - "ELAPSED", - "HLINEARS", - "HSUMLINS", - "MAXDPR", - "MAXDSG", - "MAXDSO", - "MAXDSW", - "MEMORYTS", - "MLINEARS", - "MSUMLINS", - "MSUMNEWT", - "NBYTOT", - "NEWTON", - "NLINEARS", - "NLINSMIN", - "NLINSMAX", - "PERFORMA", - "STEPTYPE", - "TCPU", - "TCPUDAY", - "TCPUH", - "TCPUHT", - "TCPUSCH", - "TCPUTS", - "TCPUTSH", - "TCPUTSHT", - "TELAPDAY", - "TELAPLIN", - "TELAPTS", - "TIMESTEP", - "WNEWTON", - "ZIPEFF", - "ZIPEFFC" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PERMAVE b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PERMAVE deleted file mode 100644 index d1a369cdfe..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PERMAVE +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "PERMAVE", - "sections": [ - "GRID" - ], - "size": 1, - "items": [ - { - "name": "EXPO_0", - "value_type": "INT", - "default": -1 - }, - { - "name": "EXPO_1", - "value_type": "INT", - "default": -1 - }, - { - "name": "EXPO_2", - "value_type": "INT", - "default": -1 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PERMJFUN b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PERMJFUN deleted file mode 100644 index 4ee5a4a532..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PERMJFUN +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "PERMJFUN", - "sections": [ - "GRID" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "Permeability" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PERMR b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PERMR deleted file mode 100644 index fb437129ea..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PERMR +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "PERMR", - "sections": [ - "GRID" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "Permeability" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PERMTHT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PERMTHT deleted file mode 100644 index b07e018dc2..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PERMTHT +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "PERMTHT", - "sections": [ - "GRID" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "Permeability" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PERMX b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PERMX deleted file mode 100644 index bb4b995462..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PERMX +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "PERMX", - "sections": [ - "GRID" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "Permeability" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PERMXY b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PERMXY deleted file mode 100644 index b7d5eaaaf5..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PERMXY +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "PERMXY", - "sections": [ - "GRID" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "Permeability" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PERMY b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PERMY deleted file mode 100644 index 3bdf535b62..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PERMY +++ /dev/null @@ -1,11 +0,0 @@ -{ - "name": "PERMY", - "sections": [ - "GRID" - ], - "data": { - "value_type": "DOUBLE", - "default": 0, - "dimension": "Permeability" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PERMYZ b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PERMYZ deleted file mode 100644 index 8318cdb19b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PERMYZ +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "PERMYZ", - "sections": [ - "GRID" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "Permeability" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PERMZ b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PERMZ deleted file mode 100644 index 7bbe300dfe..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PERMZ +++ /dev/null @@ -1,11 +0,0 @@ -{ - "name": "PERMZ", - "sections": [ - "GRID" - ], - "data": { - "value_type": "DOUBLE", - "default": 0, - "dimension": "Permeability" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PERMZX b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PERMZX deleted file mode 100644 index ef22701a67..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PERMZX +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "PERMZX", - "sections": [ - "GRID" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "Permeability" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PETGRID b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PETGRID deleted file mode 100644 index dbcc8db372..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PETGRID +++ /dev/null @@ -1,13 +0,0 @@ -{ - "name": "PETGRID", - "sections": [ - "GRID" - ], - "size": 1, - "items": [ - { - "name": "FILE_NAME", - "value_type": "STRING" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PETOPTS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PETOPTS deleted file mode 100644 index c7352193d1..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PETOPTS +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "PETOPTS", - "sections": [ - "RUNSPEC" - ], - "size": 1, - "items": [ - { - "name": "OPTIONS", - "size_type": "ALL", - "value_type": "STRING" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PICOND b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PICOND deleted file mode 100644 index 63744870b7..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PICOND +++ /dev/null @@ -1,73 +0,0 @@ -{ - "name": "PICOND", - "sections": [ - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "MAX_INTERVAL_BELOW_DEWPOINT", - "value_type": "DOUBLE", - "dimension": "Pressure" - }, - { - "name": "MAX_INTERVAL_ABOVE_DEWPOINT", - "value_type": "DOUBLE", - "dimension": "Pressure" - }, - { - "name": "D_F", - "value_type": "DOUBLE", - "dimension": "1", - "default": 1 - }, - { - "name": "INCLUDE", - "value_type": "STRING", - "default": "NO" - }, - { - "name": "F_L", - "value_type": "DOUBLE", - "dimension": "1", - "default": 0 - }, - { - "name": "F_U", - "value_type": "DOUBLE", - "dimension": "1", - "default": 1.1 - }, - { - "name": "DELTA_WAT_SAT", - "value_type": "DOUBLE", - "dimension": "1" - }, - { - "name": "DELTA_PRESSURE", - "value_type": "DOUBLE" - }, - { - "name": "DELTA_FRAC_COMP", - "value_type": "DOUBLE", - "dimension": "1", - "default": 0.01 - }, - { - "name": "MAX_DELTA_TIME", - "value_type": "DOUBLE", - "dimension": "Time", - "default": -1 - }, - { - "name": "ADAPTIVE_ORD_CONTROL", - "value_type": "DOUBLE", - "default": -1 - }, - { - "name": "ADAPTIVE_ORD_MIN_SPACING", - "value_type": "DOUBLE", - "dimension": "Pressure" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PIMTDIMS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PIMTDIMS deleted file mode 100644 index 80a8fc9997..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PIMTDIMS +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "PIMTDIMS", - "sections": [ - "RUNSPEC" - ], - "size": 1, - "items": [ - { - "name": "NTPIMT", - "value_type": "INT", - "default": 0 - }, - { - "name": "NPPIMT", - "value_type": "INT", - "default": 0 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PIMULTAB b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PIMULTAB deleted file mode 100644 index 72db70cf04..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PIMULTAB +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "PIMULTAB", - "sections": [ - "SCHEDULE" - ], - "size": { - "keyword": "PIMTDIMS", - "item": "NTPIMT" - }, - "items": [ - { - "name": "TABLE", - "value_type": "DOUBLE", - "size_type": "ALL" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PINCH b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PINCH deleted file mode 100644 index 3326e903d2..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PINCH +++ /dev/null @@ -1,36 +0,0 @@ -{ - "name": "PINCH", - "sections": [ - "GRID" - ], - "size": 1, - "items": [ - { - "name": "THRESHOLD_THICKNESS", - "value_type": "DOUBLE", - "default": 0.001, - "dimension": "Length" - }, - { - "name": "CONTROL_OPTION", - "value_type": "STRING", - "default": "GAP" - }, - { - "name": "MAX_EMPTY_GAP", - "value_type": "DOUBLE", - "default": 1e+20, - "dimension": "Length" - }, - { - "name": "PINCHOUT_OPTION", - "value_type": "STRING", - "default": "TOPBOT" - }, - { - "name": "MULTZ_OPTION", - "value_type": "STRING", - "default": "TOP" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PINCHNUM b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PINCHNUM deleted file mode 100644 index 45e5cdddcc..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PINCHNUM +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "PINCHNUM", - "sections": [ - "GRID" - ], - "data": { - "value_type": "INT" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PINCHOUT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PINCHOUT deleted file mode 100644 index 2b5417cfc0..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PINCHOUT +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "PINCHOUT", - "sections": [ - "GRID" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PINCHREG b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PINCHREG deleted file mode 100644 index 7a00961b11..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PINCHREG +++ /dev/null @@ -1,35 +0,0 @@ -{ - "name": "PINCHREG", - "sections": [ - "GRID" - ], - "items": [ - { - "name": "THRESHOLD_THICKNESS", - "value_type": "DOUBLE", - "dimension": "Length", - "default": 0.001 - }, - { - "name": "OPTION1", - "value_type": "STRING", - "default": "GAP" - }, - { - "name": "MAX_GAP", - "value_type": "DOUBLE", - "dimension": "Length", - "default": 1e+20 - }, - { - "name": "OPTION2", - "value_type": "STRING", - "default": "TOPBOT" - }, - { - "name": "OPTION3", - "value_type": "STRING", - "default": "TOP" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PINCHXY b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PINCHXY deleted file mode 100644 index cdd30e5ccb..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PINCHXY +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "PINCHXY", - "sections": [ - "GRID" - ], - "size": 1, - "items": [ - { - "name": "THRESHOLD_XR", - "value_type": "DOUBLE", - "dimension": "Length", - "default": 0.001 - }, - { - "name": "THRESHOLD_YTHETA", - "value_type": "DOUBLE", - "dimension": "Length", - "default": 0.001 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLMIXNUM b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLMIXNUM deleted file mode 100644 index 694c58755c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLMIXNUM +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "PLMIXNUM", - "sections": [ - "REGIONS" - ], - "data": { - "value_type": "INT" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLMIXPAR b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLMIXPAR deleted file mode 100644 index 669aa0e93a..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLMIXPAR +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "PLMIXPAR", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "REGDIMS", - "item": "NPLMIX" - }, - "items": [ - { - "name": "TODD_LONGSTAFF", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": "1" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYADS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYADS deleted file mode 100644 index 8362f28276..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYADS +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "PLYADS", - "sections": [ - "SPECIAL", - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTSFUN" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "PolymerDensity", - "1" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYADSS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYADSS deleted file mode 100644 index a735457be0..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYADSS +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "PLYADSS", - "sections": [ - "PROPS" - ], - "num_tables": { - "keyword": "TABDIMS", - "item": "NTSFUN" - }, - "items": [ - { - "name": "POLYMER_C", - "value_type": "DOUBLE", - "dimension": "PolymerDensity" - }, - { - "name": "POLYMER_ADS_C", - "value_type": "DOUBLE", - "dimension": "1" - }, - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYATEMP b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYATEMP deleted file mode 100644 index abea8a9bc9..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYATEMP +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "PLYATEMP", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "Length" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYCAMAX b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYCAMAX deleted file mode 100644 index 95ed527c74..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYCAMAX +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "PLYCAMAX", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYDHFLF b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYDHFLF deleted file mode 100644 index 1888a59c9a..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYDHFLF +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "PLYDHFLF", - "sections": [ - "SPECIAL", - "PROPS", - "SCHEDULE" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTPVT" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "Temperature", - "Time" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYESAL b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYESAL deleted file mode 100644 index acd376c841..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYESAL +++ /dev/null @@ -1,6 +0,0 @@ -{"name" : "PLYESAL", - "sections" : ["PROPS"], - "size" : {"keyword" : "TABDIMS", - "item" : "NTSFUN"}, - "items" : [ - {"name" : "ALPHAP", "value_type" : "DOUBLE", "default_value" : 0.0}]} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYKRRF b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYKRRF deleted file mode 100644 index eefb8009f7..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYKRRF +++ /dev/null @@ -1,7 +0,0 @@ -{"name" : "PLYKRRF", -"sections" : ["PROPS"], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} \ No newline at end of file diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYMAX b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYMAX deleted file mode 100644 index f0cef11d36..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYMAX +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "PLYMAX", - "sections": [ - "SPECIAL", - "PROPS" - ], - "size": { - "keyword": "REGDIMS", - "item": "NPLMIX" - }, - "items": [ - { - "name": "MAX_POLYMER_CONCENTRATION", - "value_type": "DOUBLE", - "dimension": "PolymerDensity" - }, - { - "name": "MAX_SALT_CONCENTRATION", - "value_type": "DOUBLE", - "dimension": "PolymerDensity" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYOPTS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYOPTS deleted file mode 100644 index 628ec604b1..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYOPTS +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "PLYOPTS", - "sections": [ - "PROPS" - ], - "size": 1, - "items": [ - { - "name": "MIN_SWAT", - "value_type": "DOUBLE", - "default": 1e-06 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYRMDEN b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYRMDEN deleted file mode 100644 index fa05424c8f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYRMDEN +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "PLYRMDEN", - "sections": [ - "GRID" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "Mass/ReservoirVolume" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYROCK b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYROCK deleted file mode 100644 index c2cf71984e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYROCK +++ /dev/null @@ -1,38 +0,0 @@ -{ - "name": "PLYROCK", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTSFUN" - }, - "items": [ - { - "name": "IPV", - "value_type": "DOUBLE", - "dimension": "1" - }, - { - "name": "RRF", - "value_type": "DOUBLE", - "dimension": "1" - }, - { - "name": "ROCK_DENSITY", - "value_type": "DOUBLE", - "dimension": "Density" - }, - { - "name": "AI", - "value_type": "DOUBLE", - "default": 1, - "dimension": "1" - }, - { - "name": "MAX_ADSORPTION", - "value_type": "DOUBLE", - "dimension": "1" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYROCKM b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYROCKM deleted file mode 100644 index e666c9ae5e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYROCKM +++ /dev/null @@ -1,38 +0,0 @@ -{ - "name": "PLYROCKM", - "sections": [ - "SCHEDULE" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTSFUN" - }, - "items": [ - { - "name": "IPV", - "value_type": "DOUBLE", - "dimension": "1" - }, - { - "name": "RRF", - "value_type": "DOUBLE", - "dimension": "1" - }, - { - "name": "ROCK_DENSITY", - "value_type": "DOUBLE", - "dimension": "Density" - }, - { - "name": "AI", - "value_type": "DOUBLE", - "default": 1, - "dimension": "1" - }, - { - "name": "MAX_ADSORPTION", - "value_type": "DOUBLE", - "dimension": "1" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYSHEAR b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYSHEAR deleted file mode 100644 index 59dc6f9e1b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYSHEAR +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "PLYSHEAR", - "sections": [ - "SPECIAL", - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTPVT" - }, - "items": [ - { - "name": "WATER_VELOCITY", - "value_type": "DOUBLE", - "dimension": "Length/Time" - }, - { - "name": "VRF", - "value_type": "DOUBLE", - "dimension": "1" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYSHLOG b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYSHLOG deleted file mode 100644 index 3931ad8d83..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYSHLOG +++ /dev/null @@ -1,39 +0,0 @@ -{ - "name": "PLYSHLOG", - "size": 2, - "sections": [ - "SPECIAL", - "PROPS", - "SCHEDULE" - ], - "records": [ - [ - { - "name": "REF_POLYMER_CONCENTRATION", - "value_type": "DOUBLE", - "dimension": "PolymerDensity" - }, - { - "name": "REF_SALINITY", - "value_type": "DOUBLE", - "dimension": "Salinity" - }, - { - "name": "REF_TEMPERATURE", - "value_type": "DOUBLE", - "dimension": "Temperature" - } - ], - [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "1", - "1" - ] - } - ] - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYTRRF b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYTRRF deleted file mode 100644 index bae248a752..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYTRRF +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "PLYTRRF", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTSFUN" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "Temperature", - "1" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYTRRFA b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYTRRFA deleted file mode 100644 index 180add4ac3..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYTRRFA +++ /dev/null @@ -1,13 +0,0 @@ -{ - "name": "PLYTRRFA", - "sections": [ - "PROPS" - ], - "size": 1, - "items": [ - { - "name": "NBTRRF", - "value_type": "INT" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYVISC b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYVISC deleted file mode 100644 index cc1333e21c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYVISC +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "PLYVISC", - "sections": [ - "SPECIAL", - "PROPS", - "SCHEDULE" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTPVT" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "PolymerDensity", - "1" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYVISCS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYVISCS deleted file mode 100644 index 2f6740da99..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYVISCS +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "PLYVISCS", - "sections": [ - "PROPS", - "SCHEDULE" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTPVT" - }, - "items": [ - { - "name": "PC", - "value_type": "DOUBLE", - "dimension": "Mass/LiquidSurfaceVolume" - }, - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYVISCT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYVISCT deleted file mode 100644 index 086a415c5b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYVISCT +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "PLYVISCT", - "sections": [ - "PROPS", - "SCHEDULE" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTPVT" - }, - "items": [ - { - "name": "PC", - "value_type": "DOUBLE", - "dimension": "Mass/LiquidSurfaceVolume" - }, - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYVSCST b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYVSCST deleted file mode 100644 index 4858fd80f3..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PLYVSCST +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "PLYVSCST", - "sections": [ - "PROPS", - "SCHEDULE" - ], - "num_tables": { - "keyword": "TABDIMS", - "item": "NTPVT" - }, - "items": [ - { - "name": "PC1", - "value_type": "DOUBLE", - "dimension": "Mass/LiquidSurfaceVolume" - }, - { - "name": "MULT", - "value_type": "DOUBLE", - "size_type": "ALL" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PMAX b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PMAX deleted file mode 100644 index 28ad87dc22..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PMAX +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "PMAX", - "sections": [ - "PROPS" - ], - "size": 1, - "items": [ - { - "name": "MAX_PRESSURE", - "value_type": "DOUBLE", - "dimension": "Pressure" - }, - { - "name": "MAX_PRESSURE_CHECK", - "value_type": "DOUBLE", - "dimension": "Pressure", - "default": 0 - }, - { - "name": "MIN_PRESSURE_CHECK", - "value_type": "DOUBLE", - "dimension": "Pressure", - "default": 1e+20 - }, - { - "name": "NUM_NODES", - "value_type": "INT", - "default": 30 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PMISC b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PMISC deleted file mode 100644 index c47cccd360..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PMISC +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "PMISC", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "MISCIBLE", - "item": "NTMISC" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "Pressure", - "1" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/POLYMER b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/POLYMER deleted file mode 100644 index 690e2d06a3..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/POLYMER +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "POLYMER", - "sections": [ - "RUNSPEC" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PORO b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PORO deleted file mode 100644 index 1f87e50d3a..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PORO +++ /dev/null @@ -1,11 +0,0 @@ -{ - "name": "PORO", - "sections": [ - "GRID" - ], - "data": { - "value_type": "DOUBLE", - "default": 0, - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PORV b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PORV deleted file mode 100644 index bcfdbd10a3..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PORV +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "PORV", - "sections": [ - "EDIT" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "ReservoirVolume" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PPCWMAX b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PPCWMAX deleted file mode 100644 index 85e8eddab7..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PPCWMAX +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "PPCWMAX", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTSFUN" - }, - "items": [ - { - "name": "MAXIMUM_CAPILLARY_PRESSURE", - "value_type": "DOUBLE", - "default": 1e+20 - }, - { - "name": "MODIFY_CONNATE_SATURATION", - "value_type": "STRING", - "default": "NO" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PRESSURE b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PRESSURE deleted file mode 100644 index dff109eec9..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PRESSURE +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "PRESSURE", - "sections": [ - "SOLUTION" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "Pressure" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PRIORITY b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PRIORITY deleted file mode 100644 index 556bf1bd4e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PRIORITY +++ /dev/null @@ -1,94 +0,0 @@ -{ - "name": "PRIORITY", - "size": 1, - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "MIN_CALC_TIME", - "value_type": "DOUBLE", - "dimension": "Time" - }, - { - "name": "A1", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "B1", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "C1", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "D1", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "E1", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "F1", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "G1", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "H1", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "A2", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "B2", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "C2", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "D2", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "E2", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "F2", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "G2", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "H2", - "value_type": "DOUBLE", - "default": 0 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PROPS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PROPS deleted file mode 100644 index c3a9be853e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PROPS +++ /dev/null @@ -1,4 +0,0 @@ -{ - "name": "PROPS", - "sections": [] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PRORDER b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PRORDER deleted file mode 100644 index 20b85c2a1a..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PRORDER +++ /dev/null @@ -1,58 +0,0 @@ -{ - "name": "PRORDER", - "sections": [ - "SCHEDULE" - ], - "size": 2, - "records": [ - [ - { - "name": "NO1", - "value_type": "STRING" - }, - { - "name": "NO2", - "value_type": "STRING" - }, - { - "name": "NO3", - "value_type": "STRING" - }, - { - "name": "NO4", - "value_type": "STRING" - }, - { - "name": "NO5", - "value_type": "STRING" - } - ], - [ - { - "name": "OPT1", - "value_type": "STRING", - "default": "YES" - }, - { - "name": "OPT2", - "value_type": "STRING", - "default": "YES" - }, - { - "name": "OPT3", - "value_type": "STRING", - "default": "YES" - }, - { - "name": "OPT4", - "value_type": "STRING", - "default": "YES" - }, - { - "name": "OPT5", - "value_type": "STRING", - "default": "YES" - } - ] - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PRVD b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PRVD deleted file mode 100644 index daf54825d6..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PRVD +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "PRVD", - "sections": [ - "SOLUTION" - ], - "size": { - "keyword": "EQLDIMS", - "item": "NTEQUL" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "Length", - "Pressure" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PSTEADY b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PSTEADY deleted file mode 100644 index affd33f864..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PSTEADY +++ /dev/null @@ -1,60 +0,0 @@ -{ - "name": "PSTEADY", - "sections": [ - "RUNSPEC" - ], - "size": 1, - "items": [ - { - "name": "DAY", - "value_type": "INT" - }, - { - "name": "MONTH", - "value_type": "STRING" - }, - { - "name": "YEAR", - "value_type": "INT" - }, - { - "name": "DIFF", - "value_type": "DOUBLE" - }, - { - "name": "PRESSURE_TOL", - "value_type": "DOUBLE" - }, - { - "name": "OIL_TOL", - "value_type": "DOUBLE" - }, - { - "name": "WATER_TOL", - "value_type": "DOUBLE" - }, - { - "name": "GAS_TOL", - "value_type": "DOUBLE" - }, - { - "name": "BRINE_TOL", - "value_type": "DOUBLE" - }, - { - "name": "MAX_TIME", - "value_type": "DOUBLE", - "dimension": "Time" - }, - { - "name": "MIN_TIME", - "value_type": "DOUBLE", - "dimension": "Time" - }, - { - "name": "PIM_AQUIFERS", - "value_type": "STRING", - "default": "NO" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PSWRG b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PSWRG deleted file mode 100644 index 5b75c852d0..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PSWRG +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "PSWRG", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PSWRO b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PSWRO deleted file mode 100644 index 3dd8076aa9..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PSWRO +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "PSWRO", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PVCDO b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PVCDO deleted file mode 100644 index 06215805ab..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PVCDO +++ /dev/null @@ -1,37 +0,0 @@ -{ - "name": "PVCDO", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTPVT" - }, - "items": [ - { - "name": "P_REF", - "value_type": "DOUBLE", - "dimension": "Pressure" - }, - { - "name": "OIL_VOL_FACTOR", - "value_type": "DOUBLE", - "dimension": "1" - }, - { - "name": "OIL_COMPRESSIBILITY", - "value_type": "DOUBLE", - "dimension": "1/Pressure" - }, - { - "name": "OIL_VISCOSITY", - "value_type": "DOUBLE", - "dimension": "Viscosity" - }, - { - "name": "OIL_VISCOSIBILITY", - "value_type": "DOUBLE", - "dimension": "1/Pressure" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PVCO b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PVCO deleted file mode 100644 index 81051ff08e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PVCO +++ /dev/null @@ -1,25 +0,0 @@ -{ - "name": "PVCO", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTPVT" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "Pressure", - "GasSurfaceVolume/LiquidSurfaceVolume", - "ReservoirVolume/LiquidSurfaceVolume", - "Viscosity", - "1/Pressure", - "1/Pressure" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PVDG b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PVDG deleted file mode 100644 index 63432a38cb..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PVDG +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "PVDG", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTPVT" - }, - "items": [ - { - "name": "DATA", - "size_type": "ALL", - "value_type": "DOUBLE", - "dimension": [ - "Pressure", - "OilDissolutionFactor", - "Viscosity" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PVDO b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PVDO deleted file mode 100644 index e9c58b9221..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PVDO +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "PVDO", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTPVT" - }, - "items": [ - { - "name": "DATA", - "size_type": "ALL", - "value_type": "DOUBLE", - "dimension": [ - "Pressure", - "1", - "Viscosity" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PVDS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PVDS deleted file mode 100644 index be9c58ec41..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PVDS +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "PVDS", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTPVT" - }, - "items": [ - { - "name": "DATA", - "size_type": "ALL", - "value_type": "DOUBLE", - "dimension": [ - "Pressure", - "OilDissolutionFactor", - "Viscosity" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PVTG b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PVTG deleted file mode 100644 index 1be64d6728..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PVTG +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "PVTG", - "sections": [ - "PROPS" - ], - "num_tables": { - "keyword": "TABDIMS", - "item": "NTPVT" - }, - "items": [ - { - "name": "GAS_PRESSURE", - "value_type": "DOUBLE", - "dimension": "Pressure" - }, - { - "name": "DATA", - "size_type": "ALL", - "value_type": "DOUBLE", - "dimension": [ - "OilDissolutionFactor", - "OilDissolutionFactor", - "Viscosity" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PVTNUM b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PVTNUM deleted file mode 100644 index 4487b62017..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PVTNUM +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "PVTNUM", - "sections": [ - "REGIONS" - ], - "data": { - "value_type": "INT" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PVTO b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PVTO deleted file mode 100644 index bca43cefd8..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PVTO +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "PVTO", - "sections": [ - "PROPS" - ], - "num_tables": { - "keyword": "TABDIMS", - "item": "NTPVT" - }, - "items": [ - { - "name": "RS", - "value_type": "DOUBLE", - "dimension": "GasDissolutionFactor" - }, - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "Pressure", - "1", - "Viscosity" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PVTW b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PVTW deleted file mode 100644 index d5e8503656..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PVTW +++ /dev/null @@ -1,42 +0,0 @@ -{ - "name": "PVTW", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTPVT" - }, - "items": [ - { - "name": "P_REF", - "value_type": "DOUBLE", - "dimension": "Pressure" - }, - { - "name": "WATER_VOL_FACTOR", - "value_type": "DOUBLE", - "default": 1, - "dimension": "1" - }, - { - "name": "WATER_COMPRESSIBILITY", - "value_type": "DOUBLE", - "default": 4e-05, - "dimension": "1/Pressure" - }, - { - "name": "WATER_VISCOSITY", - "value_type": "DOUBLE", - "default": 0.5, - "dimension": "Viscosity", - "comment": "Default is 0.3 in Eclipse300" - }, - { - "name": "WATER_VISCOSIBILITY", - "value_type": "DOUBLE", - "default": 0, - "dimension": "1/Pressure" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PVTWSALT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PVTWSALT deleted file mode 100644 index 61958086dc..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PVTWSALT +++ /dev/null @@ -1,39 +0,0 @@ -{ - "name": "PVTWSALT", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTPVT" - }, - "alternating_records": [ - [ - { - "name": "P_REF", - "value_type": "DOUBLE", - "dimension": "Pressure" - }, - { - "name": "SALT_CONCENTRATION_REF", - "value_type": "DOUBLE", - "default": 0, - "dimension": "Density" - } - ], - [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "Density", - "1", - "1/Pressure", - "Viscosity", - "1/Pressure" - ] - } - ] - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PVT_M b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PVT_M deleted file mode 100644 index ab1484718a..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PVT_M +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "PVT_M", - "sections": [ - "RUNSPEC" - ], - "deck_names": [ - "PVT-M" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PVZG b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PVZG deleted file mode 100644 index 62c7999fa9..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PVZG +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "PVZG", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTPVT" - }, - "alternating_records": [ - [ - { - "name": "REF_TEMP", - "value_type": "DOUBLE", - "dimension": "Temperature" - } - ], - [ - { - "name": "table", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "Pressure", - "1", - "Viscosity" - ] - } - ] - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/Q/QDRILL b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/Q/QDRILL deleted file mode 100644 index d90ebcd577..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/Q/QDRILL +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "QDRILL", - "sections": [ - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "WELL_NAME", - "value_type": "STRING", - "size_type": "ALL" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/Q/QHRATING b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/Q/QHRATING deleted file mode 100644 index c5bab98429..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/Q/QHRATING +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "QHRATING", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "RIVRDIMS", - "item": "NRATTA" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "Length*Length*Length/Time", - "Length" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/Q/QMOBIL b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/Q/QMOBIL deleted file mode 100644 index 07ab0ca63d..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/Q/QMOBIL +++ /dev/null @@ -1,13 +0,0 @@ -{ - "name": "QMOBIL", - "sections": [ - "GRID" - ], - "size": 1, - "items": [ - { - "name": "MOBILE_END_POINT_CORRECTION", - "value_type": "STRING" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RADFIN b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RADFIN deleted file mode 100644 index 73bb4abbe2..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RADFIN +++ /dev/null @@ -1,54 +0,0 @@ -{ - "name": "RADFIN4", - "sections": [ - "GRID" - ], - "size": 1, - "items": [ - { - "name": "NAME", - "value_type": "STRING" - }, - { - "name": "I1", - "value_type": "INT" - }, - { - "name": "I2", - "value_type": "INT" - }, - { - "name": "J1", - "value_type": "INT" - }, - { - "name": "J2", - "value_type": "INT" - }, - { - "name": "K1", - "value_type": "INT" - }, - { - "name": "K2", - "value_type": "INT" - }, - { - "name": "NR", - "value_type": "INT" - }, - { - "name": "NTHETA", - "value_type": "INT" - }, - { - "name": "NZ", - "value_type": "INT" - }, - { - "name": "NWMAX", - "value_type": "INT", - "default": 1 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RADFIN4 b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RADFIN4 deleted file mode 100644 index f897f4b1ab..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RADFIN4 +++ /dev/null @@ -1,55 +0,0 @@ -{ - "name": "RADFIN4", - "sections": [ - "SPECIAL", - "GRID" - ], - "size": 1, - "items": [ - { - "name": "NAME", - "value_type": "STRING" - }, - { - "name": "I1", - "value_type": "INT" - }, - { - "name": "I2", - "value_type": "INT" - }, - { - "name": "J1", - "value_type": "INT" - }, - { - "name": "J2", - "value_type": "INT" - }, - { - "name": "K1", - "value_type": "INT" - }, - { - "name": "K2", - "value_type": "INT" - }, - { - "name": "NR", - "value_type": "INT" - }, - { - "name": "NTHETA", - "value_type": "INT" - }, - { - "name": "NZ", - "value_type": "INT" - }, - { - "name": "NWMAX", - "value_type": "INT", - "default": 1 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RADIAL b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RADIAL deleted file mode 100644 index ca32884624..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RADIAL +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "RADIAL", - "sections": [ - "RUNSPEC" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RAINFALL b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RAINFALL deleted file mode 100644 index e55a8ab332..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RAINFALL +++ /dev/null @@ -1,74 +0,0 @@ -{ - "name": "RAINFALL", - "sections": [ - "SOLUTION", - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "AQUIFER_ID", - "value_type": "INT" - }, - { - "name": "JAN_FLUX", - "value_type": "DOUBLE", - "dimension": "LiquidSurfaceVolume/Time*Length*Length" - }, - { - "name": "FEB_FLUX", - "value_type": "DOUBLE", - "dimension": "LiquidSurfaceVolume/Time*Length*Length" - }, - { - "name": "MAR_FLUX", - "value_type": "DOUBLE", - "dimension": "LiquidSurfaceVolume/Time*Length*Length" - }, - { - "name": "APR_FLUX", - "value_type": "DOUBLE", - "dimension": "LiquidSurfaceVolume/Time*Length*Length" - }, - { - "name": "MAI_FLUX", - "value_type": "DOUBLE", - "dimension": "LiquidSurfaceVolume/Time*Length*Length" - }, - { - "name": "JUN_FLUX", - "value_type": "DOUBLE", - "dimension": "LiquidSurfaceVolume/Time*Length*Length" - }, - { - "name": "JUL_FLUX", - "value_type": "DOUBLE", - "dimension": "LiquidSurfaceVolume/Time*Length*Length" - }, - { - "name": "AUG_FLUX", - "value_type": "DOUBLE", - "dimension": "LiquidSurfaceVolume/Time*Length*Length" - }, - { - "name": "SEP_FLUX", - "value_type": "DOUBLE", - "dimension": "LiquidSurfaceVolume/Time*Length*Length" - }, - { - "name": "OCT_FLUX", - "value_type": "DOUBLE", - "dimension": "LiquidSurfaceVolume/Time*Length*Length" - }, - { - "name": "NOV_FLUX", - "value_type": "DOUBLE", - "dimension": "LiquidSurfaceVolume/Time*Length*Length" - }, - { - "name": "DES_FLUX", - "value_type": "DOUBLE", - "dimension": "LiquidSurfaceVolume/Time*Length*Length" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RBEDCONT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RBEDCONT deleted file mode 100644 index 38b8b7affe..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RBEDCONT +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "RBEDCONT", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "RIVRDIMS", - "item": "MXTBGR" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "Length", - "Length*Length" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RCMASTS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RCMASTS deleted file mode 100644 index 6d5370549e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RCMASTS +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "RCMASTS", - "sections": [ - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "MIN_TSTEP", - "value_type": "DOUBLE", - "dimension": "Time" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/REACACT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/REACACT deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/REACHES b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/REACHES deleted file mode 100644 index 969bc6a1ea..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/REACHES +++ /dev/null @@ -1,101 +0,0 @@ -{ - "name": "REACHES", - "sections": [ - "SCHEDULE" - ], - "records": [ - [ - { - "name": "RIVER", - "value_type": "STRING" - }, - { - "name": "XPOS", - "value_type": "DOUBLE", - "dimension": "Length" - }, - { - "name": "YPOS", - "value_type": "DOUBLE", - "dimension": "Length" - }, - { - "name": "ZPOS", - "value_type": "DOUBLE", - "dimension": "Length" - }, - { - "name": "LENGTH1", - "value_type": "DOUBLE", - "dimension": "Length" - }, - { - "name": "INPUT_TYPE", - "value_type": "STRING" - } - ], - [ - { - "name": "START_REACH", - "value_type": "INT" - }, - { - "name": "END_REACH", - "value_type": "INT" - }, - { - "name": "OUTLET_REACH", - "value_type": "INT" - }, - { - "name": "BRANCH", - "value_type": "STRING" - }, - { - "name": "LENGTH2", - "value_type": "DOUBLE", - "dimension": "Length" - }, - { - "name": "DEPTH", - "value_type": "DOUBLE", - "dimension": "Length" - }, - { - "name": "PROFILE", - "value_type": "INT", - "default": 1 - }, - { - "name": "ROUGHNESS", - "value_type": "DOUBLE" - }, - { - "name": "XLENGTH", - "value_type": "DOUBLE", - "dimension": "Length" - }, - { - "name": "YLENGTH", - "value_type": "DOUBLE", - "dimension": "Length" - }, - { - "name": "REACH_LENGTH", - "value_type": "DOUBLE", - "dimension": "Length", - "default": 0 - }, - { - "name": "NUM_REACHES", - "value_type": "INT", - "default": 1 - }, - { - "name": "DEPTH_SOMETHING", - "value_type": "INT", - "default": 1 - } - ] - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/READDATA b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/READDATA deleted file mode 100644 index fde2ca002f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/READDATA +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "READDATA", - "sections": [ - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "INPUT_METHOD", - "value_type": "STRING", - "default": "FILE" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/REFINE b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/REFINE deleted file mode 100644 index 7ef7bb8986..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/REFINE +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "REFINE", - "sections": [ - "GRID", - "EDIT", - "PROPS", - "REGIONS", - "SOLUTION", - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "LGR", - "value_type": "STRING" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/REGDIMS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/REGDIMS deleted file mode 100644 index b37d9463b5..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/REGDIMS +++ /dev/null @@ -1,60 +0,0 @@ -{ - "name": "REGDIMS", - "sections": [ - "RUNSPEC" - ], - "size": 1, - "items": [ - { - "name": "NTFIP", - "value_type": "INT", - "default": 1 - }, - { - "name": "NMFIPR", - "value_type": "INT", - "default": 1 - }, - { - "name": "NRFREG", - "value_type": "INT", - "default": 0 - }, - { - "name": "NTFREG", - "value_type": "INT", - "default": 0 - }, - { - "name": "MAX_ETRACK", - "value_type": "INT", - "default": 0, - "E300": true - }, - { - "name": "NTCREG", - "value_type": "INT", - "default": 1 - }, - { - "name": "MAX_OPERNUM", - "value_type": "INT", - "default": 0 - }, - { - "name": "MAX_OPERATE_DWORK", - "value_type": "INT", - "default": 0 - }, - { - "name": "MAX_OPERATE_IWORK", - "value_type": "INT", - "default": 0 - }, - { - "name": "NPLMIX", - "value_type": "INT", - "default": 1 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/REGION2REGION_PROBE b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/REGION2REGION_PROBE deleted file mode 100644 index 305d8b402b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/REGION2REGION_PROBE +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "REGION2REGION_PROBE", - "sections": [ - "SUMMARY" - ], - "deck_names": [ - "ROFT", - "RGFT", - "RWFT" - ], - "items": [ - { - "name": "REGION1", - "value_type": "INT" - }, - { - "name": "REGION2", - "value_type": "INT" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/REGIONS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/REGIONS deleted file mode 100644 index dc2f13a31b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/REGIONS +++ /dev/null @@ -1,4 +0,0 @@ -{ - "name": "REGIONS", - "sections": [] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/REGION_PROBE b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/REGION_PROBE deleted file mode 100644 index 2488df51f4..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/REGION_PROBE +++ /dev/null @@ -1,112 +0,0 @@ -{ - "name": "REGION_PROBE", - "sections": [ - "SUMMARY" - ], - "comment": "Tracer keywords where the 2nd letter is a 'T' should be compounded with the tracer name", - "deck_names": [ - "ROSAT", - "ROIP", - "ROIPL", - "ROIPG", - "ROP", - "RPPO", - "ROVIS", - "RODEN", - "ROPR", - "ROPT", - "ROIR", - "ROIT", - "RWSAT", - "RWIP", - "RWP", - "RPPW", - "RWVIS", - "RWDEN", - "RWPR", - "RWPT", - "RWIR", - "RWIT", - "RGSAT", - "RGIP", - "RGIPL", - "RGIPG", - "RGP", - "RPPG", - "RGVIS", - "RGDEN", - "RGPR", - "RGPRF", - "RGPRS", - "RGPT", - "RGPTF", - "RGPTS", - "RGIR", - "RGIT", - "RGFTL", - "RGFTG", - "RPR", - "RPRH", - "RPRP", - "RPRGZ", - "RRS", - "RRV", - "RPPC", - "RRPV", - "ROPV", - "RWPV", - "RGPV", - "RHPV", - "RRTM", - "ROE", - "ROEW", - "ROEIW", - "ROEWW", - "ROEIG", - "ROEWG", - "RORMR", - "RORMW", - "RORMG", - "RORME", - "RORMS", - "RORMF", - "RORMX", - "RORMY", - "RORFR", - "RORFW", - "RORFG", - "RORFE", - "RORFS", - "RORFF", - "RORFX", - "RORFY", - "RTIPT", - "RAPI", - "RSIP", - "RSFT", - "RTIPTHEA", - "RCGC", - "RCSC", - "RTIPTFOA", - "RTFTTFOA", - "RTADSFOA", - "RTDCYFOA", - "RTMOBFOA", - "RCIP", - "RCFT", - "RCAD", - "RSIP", - "RSFT", - "RNIP", - "RNFT", - "RTIPTSUR", - "RTFTTSUR", - "RTADSUR" - ], - "CommentFip": "This regexp should work for region output of arbitrary named FIPxxxx regions. Current implementation is not entirely correct", - "CommentTracer": "???", - "deck_name_regex": "R[OGW]?[OIP][EPRT]_.+|RU.+|RTIPF.+|RTIPS.+|RTFTF.+|RTFTS.+|RTFTT.+|RTIPT.+|RTIPF.+|RTIPS.+|RTIP[1-9][0-9]*.+|RTFTT.+|RTFTF.+|RTFTS.+|RTFT[1-9][0-9]*.+|RTADS.+|RTDCY.+", - "data": { - "value_type": "INT" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RESIDNUM b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RESIDNUM deleted file mode 100644 index ce50312e04..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RESIDNUM +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "RESIDNUM", - "sections": [ - "REGIONS" - ], - "data": { - "value_type": "INT" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RESTART b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RESTART deleted file mode 100644 index 70b5241489..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RESTART +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "RESTART", - "sections": [ - "SOLUTION" - ], - "size": 1, - "items": [ - { - "name": "ROOTNAME", - "value_type": "STRING", - "default": "BASE" - }, - { - "name": "REPORTNUMBER", - "value_type": "INT" - }, - { - "name": "SAVEFILE", - "value_type": "STRING" - }, - { - "name": "SAVEFILE_FORMAT", - "value_type": "STRING", - "default": "UNFORMATTED" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RESVNUM b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RESVNUM deleted file mode 100644 index ef6cf66332..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RESVNUM +++ /dev/null @@ -1,13 +0,0 @@ -{ - "name": "RESVNUM", - "sections": [ - "GRID" - ], - "size": 1, - "items": [ - { - "name": "NEXT_RES", - "value_type": "INT" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RIVDEBUG b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RIVDEBUG deleted file mode 100644 index 2a4fec71a4..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RIVDEBUG +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "RIVDEBUG", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "RIVER", - "value_type": "STRING" - }, - { - "name": "DEBUG_CONTROL", - "value_type": "INT" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RIVERSYS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RIVERSYS deleted file mode 100644 index 6ed7ab46f0..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RIVERSYS +++ /dev/null @@ -1,34 +0,0 @@ -{ - "name": "RIVERSYS", - "sections": [ - "SOLUTION", - "SCHEDULE" - ], - "records": [ - [ - { - "name": "RIVER", - "value_type": "STRING" - }, - { - "name": "EQUATION", - "value_type": "STRING" - } - ], - [ - { - "name": "BRANCH_NR", - "value_type": "INT" - }, - { - "name": "BRANCH_NAME", - "value_type": "STRING" - }, - { - "name": "DOWNSTREAM_BC", - "value_type": "STRING", - "size_type": "ALL" - } - ] - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RIVRDIMS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RIVRDIMS deleted file mode 100644 index f3d5b488ca..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RIVRDIMS +++ /dev/null @@ -1,74 +0,0 @@ -{ - "name": "RIVRDIMS", - "sections": [ - "RUNSPEC" - ], - "size": 1, - "items": [ - { - "name": "MAX_RIVERS", - "value_type": "INT", - "default": 0 - }, - { - "name": "MAX_REACHES", - "value_type": "INT", - "default": 1 - }, - { - "name": "MAX_BRANCHES", - "value_type": "INT", - "default": 1 - }, - { - "name": "MAX_BLOCKS", - "value_type": "INT", - "default": 1 - }, - { - "name": "MXTBPR", - "value_type": "INT", - "default": 1 - }, - { - "name": "MXDPTB", - "value_type": "INT", - "default": 2 - }, - { - "name": "MXTBGR", - "value_type": "INT", - "default": 1 - }, - { - "name": "NMDEPT", - "value_type": "INT", - "default": 0 - }, - { - "name": "MXDEPT", - "value_type": "INT", - "default": 2 - }, - { - "name": "NMMAST", - "value_type": "INT", - "default": 0 - }, - { - "name": "MXMAST", - "value_type": "INT", - "default": 2 - }, - { - "name": "NRATTA", - "value_type": "INT", - "default": 0 - }, - { - "name": "MXRATE", - "value_type": "INT", - "default": 2 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RIVRPROP b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RIVRPROP deleted file mode 100644 index 38d83c0464..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RIVRPROP +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "RIVRPROP", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "RIVER", - "value_type": "STRING" - }, - { - "name": "REACH1", - "value_type": "INT" - }, - { - "name": "REACH2", - "value_type": "INT" - }, - { - "name": "ROUGHNESS", - "value_type": "DOUBLE" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RIVRXSEC b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RIVRXSEC deleted file mode 100644 index b906dd282a..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RIVRXSEC +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "RIVRXSEC", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "RIVRDIMS", - "item": "MXDPTB" - }, - "items": [ - { - "name": "DEPTH", - "value_type": "DOUBLE", - "dimension": "Length" - }, - { - "name": "WET_PERIMTER", - "value_type": "DOUBLE", - "dimension": "Length" - }, - { - "name": "AREA", - "value_type": "DOUBLE", - "dimension": "Length*Length" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RIVSALT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RIVSALT deleted file mode 100644 index 1df37bd94c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RIVSALT +++ /dev/null @@ -1,25 +0,0 @@ -{ - "name": "RIVSALT", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "RIVER", - "value_type": "STRING" - }, - { - "name": "SALINITY", - "value_type": "DOUBLE", - "dimension": "Mass/LiquidSurfaceVolume" - }, - { - "name": "BRANCH", - "value_type": "STRING" - }, - { - "name": "REACH", - "value_type": "INT" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RIVTRACE b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RIVTRACE deleted file mode 100644 index 6c17ccd498..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RIVTRACE +++ /dev/null @@ -1,33 +0,0 @@ -{ - "name": "RIVTRACE", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "RIVER", - "value_type": "STRING" - }, - { - "name": "TRACER", - "value_type": "STRING" - }, - { - "name": "TC", - "value_type": "DOUBLE" - }, - { - "name": "TCUM", - "value_type": "DOUBLE", - "dimension": "1/LiquidSurfaceVolume" - }, - { - "name": "BRANCH", - "value_type": "STRING" - }, - { - "name": "REACH", - "value_type": "INT" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RKTRMDIR b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RKTRMDIR deleted file mode 100644 index db7d818170..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RKTRMDIR +++ /dev/null @@ -1,7 +0,0 @@ -{ - "name": "RKTRMDIR", - "sections": [ - "PROPS" - ], - "size": 0 -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/ROCK b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/ROCK deleted file mode 100644 index 69d2796081..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/ROCK +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "ROCK", - "sections": [ - "PROPS" - ], - "size": "UNKNOWN", - "items": [ - { - "name": "PREF", - "value_type": "DOUBLE", - "default": 1.0132, - "dimension": "Pressure" - }, - { - "name": "COMPRESSIBILITY", - "value_type": "DOUBLE", - "default": 0, - "dimension": "1/Pressure" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/ROCK2D b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/ROCK2D deleted file mode 100644 index 03142ef71e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/ROCK2D +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "ROCK2D", - "sections": [ - "PROPS" - ], - "num_tables": { - "keyword": "ROCKCOMP", - "item": "NTROCC" - }, - "items": [ - { - "name": "PRESSURE", - "value_type": "DOUBLE", - "dimension": "Pressure" - }, - { - "name": "PVMULT", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": "1" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/ROCK2DTR b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/ROCK2DTR deleted file mode 100644 index b74a18e5a9..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/ROCK2DTR +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "ROCK2DTR", - "sections": [ - "PROPS" - ], - "num_tables": { - "keyword": "ROCKCOMP", - "item": "NTROCC" - }, - "items": [ - { - "name": "PRESSURE", - "value_type": "DOUBLE", - "dimension": "Pressure" - }, - { - "name": "TRANSMULT", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": "1" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/ROCKCOMP b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/ROCKCOMP deleted file mode 100644 index 55e59e748a..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/ROCKCOMP +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "ROCKCOMP", - "sections": [ - "RUNSPEC" - ], - "size": 1, - "items": [ - { - "name": "HYSTERESIS", - "value_type": "STRING", - "default": "REVERS" - }, - { - "name": "NTROCC", - "value_type": "INT", - "default": 1 - }, - { - "name": "WATER_COMPACTION", - "value_type": "STRING", - "default": "NO" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/ROCKFRAC b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/ROCKFRAC deleted file mode 100644 index 793dd944e7..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/ROCKFRAC +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "ROCKFRAC", - "sections": [ - "GRID" - ], - "data": { - "value_type": "DOUBLE" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/ROCKNUM b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/ROCKNUM deleted file mode 100644 index baf46b7da8..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/ROCKNUM +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "ROCKNUM", - "sections": [ - "REGIONS" - ], - "data": { - "value_type": "INT" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/ROCKOPTS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/ROCKOPTS deleted file mode 100644 index 76137b4f01..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/ROCKOPTS +++ /dev/null @@ -1,29 +0,0 @@ -{ - "name": "ROCKOPTS", - "sections": [ - "PROPS" - ], - "size": 1, - "items": [ - { - "name": "METHOD", - "value_type": "STRING", - "default": "PRESSURE" - }, - { - "name": "REF_PRESSURE", - "value_type": "STRING", - "default": "NOSTORE" - }, - { - "name": "TABLE_TYPE", - "value_type": "STRING", - "default": "PVTNUM" - }, - { - "name": "HYST_TYPE", - "value_type": "STRING", - "default": "DEFLATION" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/ROCKPAMA b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/ROCKPAMA deleted file mode 100644 index 60282f919a..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/ROCKPAMA +++ /dev/null @@ -1,61 +0,0 @@ -{ - "name": "ROCKPAMA", - "sections": [ - "PROPS" - ], - "items": [ - { - "name": "K", - "value_type": "DOUBLE", - "dimensions": "Pressure" - }, - { - "name": "M", - "value_type": "DOUBLE", - "dimensions": "Pressure" - }, - { - "name": "G", - "value_type": "DOUBLE", - "dimensions": "1/Pressure", - "default": 0 - }, - { - "name": "B", - "value_type": "DOUBLE", - "dimensions": "1/Pressure", - "default": 0 - }, - { - "name": "E1", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "f", - "value_type": "DOUBLE", - "default": 0.5 - }, - { - "name": "n", - "value_type": "DOUBLE", - "default": 3 - }, - { - "name": "g", - "value_type": "DOUBLE", - "default": 1 - }, - { - "name": "Bs", - "value_type": "DOUBLE", - "dimensions": "1/Pressure", - "default": 0 - }, - { - "name": "Es", - "value_type": "DOUBLE", - "default": 0 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/ROCKTAB b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/ROCKTAB deleted file mode 100644 index 00fa5a1eb3..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/ROCKTAB +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "ROCKTAB", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "ROCKCOMP", - "item": "NTROCC" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "Pressure", - "1", - "1", - "1", - "1" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/ROCKTABH b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/ROCKTABH deleted file mode 100644 index 28f87c554e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/ROCKTABH +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "ROCKTABH", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "ROCKCOMP", - "item": "NTROCC" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/ROCKTABW b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/ROCKTABW deleted file mode 100644 index 9449bdd974..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/ROCKTABW +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "ROCKTABW", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "ROCKCOMP", - "item": "NTROCC" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/ROCKTHSG b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/ROCKTHSG deleted file mode 100644 index 488200a608..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/ROCKTHSG +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "ROCKTHSG", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "ROCKCOMP", - "item": "NTROCC" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "Pressure", - "1" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/ROCKTSIG b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/ROCKTSIG deleted file mode 100644 index 945580f695..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/ROCKTSIG +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "ROCKTSIG", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "ROCKCOMP", - "item": "NTROCC" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "Pressure", - "1" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/ROCKV b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/ROCKV deleted file mode 100644 index 9d12524de5..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/ROCKV +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "ROCKV", - "sections": [ - "EDIT" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "ReservoirVolume" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/ROCKWNOD b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/ROCKWNOD deleted file mode 100644 index f255862355..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/ROCKWNOD +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "ROCKWNOD", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "ROCKCOMP", - "item": "NTROCC" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": "1" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RPTCPL b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RPTCPL deleted file mode 100644 index c984d2b3d0..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RPTCPL +++ /dev/null @@ -1,7 +0,0 @@ -{ - "name": "RPTCPL", - "sections": [ - "RUNSPEC" - ], - "size": 1 -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RPTGRID b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RPTGRID deleted file mode 100644 index 201109dda7..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RPTGRID +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "RPTGRID", - "sections": [ - "GRID" - ], - "size": 1, - "items": [ - { - "name": "DATA", - "size_type": "ALL", - "value_type": "STRING" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RPTGRIDL b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RPTGRIDL deleted file mode 100644 index 8b16b2cc4e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RPTGRIDL +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "RPTGRIDL", - "sections": [ - "GRID" - ], - "size": 1, - "items": [ - { - "name": "DATA", - "size_type": "ALL", - "value_type": "STRING" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RPTHMD b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RPTHMD deleted file mode 100644 index c6e143e21e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RPTHMD +++ /dev/null @@ -1,39 +0,0 @@ -{ - "name": "RPTHMD", - "sections": [ - "RUNSPEC" - ], - "size": 1, - "items": [ - { - "name": "ITEM1", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM2", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM3", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM4", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM5", - "value_type": "INT", - "default": 0 - }, - { - "name": "ITEM6", - "value_type": "INT", - "default": 0 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RPTHMG b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RPTHMG deleted file mode 100644 index cc68a0a83e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RPTHMG +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "RPTHMG", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "GROUP", - "value_type": "STRING" - }, - { - "name": "INCLUDE", - "value_type": "STRING" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RPTHMW b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RPTHMW deleted file mode 100644 index 4cc9e52271..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RPTHMW +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "RPTHMW", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "GROUP", - "value_type": "STRING" - }, - { - "name": "INCLUDE", - "value_type": "STRING", - "default": "ON" - }, - { - "name": "INCLUDE_RFT", - "value_type": "STRING", - "default": "OFF" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RPTINIT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RPTINIT deleted file mode 100644 index 75dbff56cc..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RPTINIT +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "RPTINIT", - "sections": [ - "GRID" - ], - "size": 1, - "items": [ - { - "name": "MNEMONICS_LIST", - "size_type": "ALL", - "value_type": "STRING" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RPTISOL b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RPTISOL deleted file mode 100644 index 7697f10f0a..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RPTISOL +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "RPTISOL", - "sections": [ - "GRID" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RPTONLY b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RPTONLY deleted file mode 100644 index 8f7d3dd9a4..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RPTONLY +++ /dev/null @@ -1,7 +0,0 @@ -{ - "name": "RPTONLY", - "sections": [ - "SUMMARY", - "SCHEDULE" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RPTONLYO b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RPTONLYO deleted file mode 100644 index b99e32c84e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RPTONLYO +++ /dev/null @@ -1,7 +0,0 @@ -{ - "name": "RPTONLYO", - "sections": [ - "SUMMARY", - "SCHEDULE" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RPTPROPS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RPTPROPS deleted file mode 100644 index 73124b0514..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RPTPROPS +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "RPTPROPS", - "sections": [ - "PROPS" - ], - "size": 1, - "items": [ - { - "name": "mnemonics", - "value_type": "STRING", - "size_type": "ALL" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RPTREGS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RPTREGS deleted file mode 100644 index 756c0e9ae6..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RPTREGS +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "RPTREGS", - "sections": [ - "REGIONS" - ], - "size": 1, - "items": [ - { - "name": "MNEMONIC_LIST", - "size_type": "ALL", - "value_type": "STRING" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RPTRST b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RPTRST deleted file mode 100644 index a6f6707aeb..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RPTRST +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "RPTRST", - "sections": [ - "SOLUTION", - "SCHEDULE" - ], - "deck_name": [ - "OUTSOL" - ], - "size": 1, - "items": [ - { - "name": "MNEMONIC_LIST", - "size_type": "ALL", - "value_type": "STRING" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RPTRUNSP b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RPTRUNSP deleted file mode 100644 index 4f417e2060..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RPTRUNSP +++ /dev/null @@ -1,7 +0,0 @@ -{ - "name": "RPTRUNSP", - "size": 0, - "sections": [ - "RUNSPEC" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RPTSCHED b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RPTSCHED deleted file mode 100644 index 2297d7f490..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RPTSCHED +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "RPTSCHED", - "sections": [ - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "MNEMONIC_LIST", - "size_type": "ALL", - "value_type": "STRING" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RPTSMRY b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RPTSMRY deleted file mode 100644 index 6b7a3a5e0f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RPTSMRY +++ /dev/null @@ -1,13 +0,0 @@ -{ - "name": "RPTSMRY", - "sections": [ - "SUMMARY" - ], - "size": 1, - "items": [ - { - "name": "WRITE", - "value_type": "INT" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RPTSOL b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RPTSOL deleted file mode 100644 index ea66108d43..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RPTSOL +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "RPTSOL", - "sections": [ - "SOLUTION" - ], - "size": 1, - "items": [ - { - "name": "mnemonics", - "value_type": "STRING", - "size_type": "ALL" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RS deleted file mode 100644 index 453e24e183..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RS +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "RS", - "sections": [ - "SOLUTION" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "GasDissolutionFactor" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RSCONST b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RSCONST deleted file mode 100644 index 646b9a9dbc..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RSCONST +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "RSCONST", - "sections": [ - "PROPS" - ], - "size": 1, - "items": [ - { - "name": "RS", - "value_type": "DOUBLE", - "dimension": "GasDissolutionFactor" - }, - { - "name": "PB", - "value_type": "DOUBLE", - "dimension": "Pressure" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RSCONSTT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RSCONSTT deleted file mode 100644 index e89874f4f4..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RSCONSTT +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "RSCONSTT", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTPVT" - }, - "items": [ - { - "name": "RS_CONSTT", - "value_type": "DOUBLE", - "dimension": "GasDissolutionFactor" - }, - { - "name": "PB_CONSTT", - "value_type": "DOUBLE", - "dimension": "Pressure" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RSGI b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RSGI deleted file mode 100644 index 730a17ac2f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RSGI +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "RSGI", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTPVT" - }, - "items": [ - { - "name": "DATA", - "size_type": "ALL", - "value_type": "DOUBLE", - "dimension": [ - "Pressure", - "1" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RSSPEC b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RSSPEC deleted file mode 100644 index 346c38189b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RSSPEC +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "RSSPEC", - "sections": [ - "RUNSPEC" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RSSSPEC b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RSSSPEC deleted file mode 100644 index 346c38189b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RSSSPEC +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "RSSPEC", - "sections": [ - "RUNSPEC" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RSVD b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RSVD deleted file mode 100644 index 15b168471e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RSVD +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "RSVD", - "sections": [ - "SOLUTION" - ], - "size": { - "keyword": "EQLDIMS", - "item": "NTEQUL" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "Length", - "GasDissolutionFactor" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RTEMP b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RTEMP deleted file mode 100644 index 216256c28c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RTEMP +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "RTEMP", - "sections": [ - "PROPS", - "SOLUTION" - ], - "items": [ - { - "name": "TEMP", - "value_type": "DOUBLE", - "default": 15.555, - "dimension": "Temperature" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RTEMPA b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RTEMPA deleted file mode 100644 index 638856edde..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RTEMPA +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "RTEMPA", - "sections": [ - "PROPS", - "SOLUTION" - ], - "items": [ - { - "name": "TEMP", - "value_type": "DOUBLE", - "default": 15.555, - "dimension": "Temperature" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RTEMPVD b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RTEMPVD deleted file mode 100644 index c3916834ed..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RTEMPVD +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "RTEMPVD", - "sections": [ - "PROPS", - "SOLUTION" - ], - "size": { - "keyword": "EQLDIMS", - "item": "NTEQUL" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "Length", - "Temperature" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RUNSPEC b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RUNSPEC deleted file mode 100644 index 8f4e5426b4..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RUNSPEC +++ /dev/null @@ -1,4 +0,0 @@ -{ - "name": "RUNSPEC", - "sections": [] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RUNSUM b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RUNSUM deleted file mode 100644 index cea8e0cec7..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RUNSUM +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "RUNSUM", - "sections": [ - "SUMMARY" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RV b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RV deleted file mode 100644 index aa314b93f6..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RV +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "RV", - "sections": [ - "SOLUTION" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "OilDissolutionFactor" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RVCONST b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RVCONST deleted file mode 100644 index 25817819ea..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RVCONST +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "RVCONST", - "sections": [ - "PROPS" - ], - "size": 1, - "items": [ - { - "name": "RV", - "value_type": "DOUBLE", - "dimension": "OilDissolutionFactor" - }, - { - "name": "DEWP", - "value_type": "DOUBLE", - "dimension": "Pressure" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RVCONSTT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RVCONSTT deleted file mode 100644 index fd3640b0f6..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RVCONSTT +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "RVCONSTT", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTPVT" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "dimension": [ - "OilDissolutionFactor", - "Pressure" - ], - "size_type": "ALL" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RVGI b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RVGI deleted file mode 100644 index 360cef7020..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RVGI +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "RVGI", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTPVT" - }, - "items": [ - { - "name": "DATA", - "size_type": "ALL", - "value_type": "DOUBLE", - "dimension": [ - "Pressure", - "1" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RVVD b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RVVD deleted file mode 100644 index df6180226f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/R/RVVD +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "RVVD", - "sections": [ - "SOLUTION" - ], - "size": { - "keyword": "EQLDIMS", - "item": "NTEQUL" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "Length", - "OilDissolutionFactor" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SALT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SALT deleted file mode 100644 index a76b9ab482..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SALT +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "SALT", - "sections": [ - "SOLUTION" - ], - "size": 1, - "items": [ - { - "name": "SALT_CONCENTRATION", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": "Mass/Length*Length*Length" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SALTNODE b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SALTNODE deleted file mode 100644 index cc1e68b237..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SALTNODE +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "SALTNODE", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTPVT" - }, - "items": [ - { - "name": "SALT_CONCENTRATION", - "size_type": "ALL", - "value_type": "DOUBLE", - "dimension": "Mass/Length*Length*Length" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SALTREST b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SALTREST deleted file mode 100644 index b47fec9b6e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SALTREST +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "SALTREST", - "sections": [ - "SOLUTION" - ], - "size": 1, - "items": [ - { - "name": "SALT_CONCENTRATION", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": "Mass/Length*Length*Length" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SALTVD b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SALTVD deleted file mode 100644 index 09fcd6fd68..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SALTVD +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "SALTVD", - "comment": "Hardcoded two columns. Multi-Component Brine Model not supported", - "sections": [ - "SOLUTION" - ], - "size": { - "keyword": "EQLDIMS", - "item": "NTEQUL" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "Length", - "Density" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SAMG b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SAMG deleted file mode 100644 index 56dfe51fe3..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SAMG +++ /dev/null @@ -1,6 +0,0 @@ -{"name" : "SAMG", -"sections" : ["RUNSPEC"], -"size" : 1, -"items" : [ -{"name" : "EPS", "value_type" : "DOUBLE", "default_value" : 0.0001}, -{"name" : "REUSE", "value_type" : "INT", "default_value" : 1}]} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SATNUM b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SATNUM deleted file mode 100644 index 229ec3e730..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SATNUM +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "SATNUM", - "sections": [ - "REGIONS" - ], - "data": { - "value_type": "INT" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SATOPTS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SATOPTS deleted file mode 100644 index a9ec21ba9c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SATOPTS +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "SATOPTS", - "sections": [ - "RUNSPEC" - ], - "size": 1, - "items": [ - { - "name": "options", - "value_type": "STRING", - "size_type": "ALL" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SAVE b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SAVE deleted file mode 100644 index f67639c63b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SAVE +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "SAVE", - "size": "UNKNOWN", - "sections": [ - "RUNSPEC", - "SCHEDULE" - ], - "items": [ - { - "name": "FILE_TYPE", - "value_type": "STRING", - "default": "UNFORMATTED" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SCALECRS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SCALECRS deleted file mode 100644 index b9867a7707..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SCALECRS +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "SCALECRS", - "sections": [ - "PROPS" - ], - "size": 1, - "items": [ - { - "name": "VALUE", - "value_type": "STRING", - "default": "NO" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SCALELIM b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SCALELIM deleted file mode 100644 index a204b0e3fe..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SCALELIM +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "SCALELIM", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "ENDSCALE", - "item": "NTENDP" - }, - "items": [ - { - "name": "SAT_LIMIT", - "value_type": "DOUBLE", - "default": 0 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SCDATAB b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SCDATAB deleted file mode 100644 index 4719b0c975..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SCDATAB +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "SCDATAB", - "sections": [ - "SCHEDULE" - ], - "size": { - "keyword": "SCDPDIMS", - "item": "NTSCDA" - }, - "items": [ - { - "name": "SCALE_DATA", - "size_type": "ALL", - "value_type": "DOUBLE", - "default": 0, - "dimension": [ - "1", - "1" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SCDETAB b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SCDETAB deleted file mode 100644 index 5b2d162259..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SCDETAB +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "SCDETAB", - "sections": [ - "SCHEDULE" - ], - "size": { - "keyword": "SCDPDIMS", - "item": "NTSCDE" - }, - "comment": "Unclear from the documentation whether the keyword should be slash terminated or not. Here it is assumed not", - "items": [ - { - "name": "SCALE_DATA", - "size_type": "ALL", - "value_type": "DOUBLE", - "default": 0, - "dimension": [ - "1", - "1" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SCDPDIMS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SCDPDIMS deleted file mode 100644 index ce3de164d4..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SCDPDIMS +++ /dev/null @@ -1,44 +0,0 @@ -{ - "name": "SCPDIMS", - "sections": [ - "RUNSPEC" - ], - "size": 1, - "items": [ - { - "name": "NTSCDP", - "value_type": "INT", - "default": 0 - }, - { - "name": "NPSCDP", - "value_type": "INT", - "default": 0 - }, - { - "name": "NTSCDA", - "value_type": "INT", - "default": 0 - }, - { - "name": "PSCDA", - "value_type": "INT", - "default": 0 - }, - { - "name": "UNUSED1", - "value_type": "INT", - "default": 0 - }, - { - "name": "UNUSED2", - "value_type": "INT", - "default": 0 - }, - { - "name": "NTSCDE", - "value_type": "INT", - "default": 0 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SCDPTAB b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SCDPTAB deleted file mode 100644 index 19da08d5cf..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SCDPTAB +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "SCDPTAB", - "sections": [ - "SCHEDULE" - ], - "size": { - "keyword": "SCDPDIMS", - "item": "NTSCDP" - }, - "items": [ - { - "name": "DATA", - "size_type": "ALL", - "value_type": "DOUBLE", - "dimension": [ - "1", - "1" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SCDPTRAC b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SCDPTRAC deleted file mode 100644 index 8d1fd3e9f6..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SCDPTRAC +++ /dev/null @@ -1,13 +0,0 @@ -{ - "name": "SCDPTRAC", - "sections": [ - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "TRACER", - "value_type": "STRING" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SCHEDULE b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SCHEDULE deleted file mode 100644 index 418a3f2ae1..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SCHEDULE +++ /dev/null @@ -1,4 +0,0 @@ -{ - "name": "SCHEDULE", - "sections": [] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SCVD b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SCVD deleted file mode 100644 index 5db74f176e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SCVD +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "SCVD", - "sections": [ - "SOLUTION" - ], - "size": { - "keyword": "EQLDIMS", - "item": "NTEQUL" - }, - "items": [ - { - "name": "DATA", - "size_type": "ALL", - "value_type": "DOUBLE", - "dimension": [ - "Length", - "1" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SDENSITY b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SDENSITY deleted file mode 100644 index 51281632f4..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SDENSITY +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "SDENSITY", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTPVT" - }, - "items": [ - { - "name": "SOLVENT_DENSITY", - "value_type": "DOUBLE", - "default": 1, - "dimension": "Density" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SEGMENT_PROBE b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SEGMENT_PROBE deleted file mode 100644 index a72cde1841..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SEGMENT_PROBE +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "SEGMENT_PROBE", - "sections": [ - "SUMMARY" - ], - "deck_names": [ - "SGFR", - "SOFR", - "SPR", - "SWFR", - "SPRD", - "SPRDF", - "SPRDH", - "SPRDA" - ], - "comment": "This list is incomplete", - "items": [ - { - "name": "Well", - "value_type": "STRING" - }, - { - "name": "Segment", - "value_type": "INT" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SEPARATE b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SEPARATE deleted file mode 100644 index ad2f6f9ca3..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SEPARATE +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "SEPARATE", - "sections": [ - "SUMMARY" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SEPVALS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SEPVALS deleted file mode 100644 index af11904fc3..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SEPVALS +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "SEPVALS", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "SEPARATOR", - "value_type": "STRING" - }, - { - "name": "BO", - "value_type": "DOUBLE", - "dimension": "1" - }, - { - "name": "RS", - "value_type": "DOUBLE", - "dimension": "1" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SFOAM b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SFOAM deleted file mode 100644 index b2a322c8fb..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SFOAM +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "SFOAM", - "sections": [ - "SOLUTION" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "Mass/Length*Length*Length" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SGAS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SGAS deleted file mode 100644 index b57db3887e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SGAS +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "SGAS", - "sections": [ - "SOLUTION" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SGCR b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SGCR deleted file mode 100644 index 5bd95ca9e1..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SGCR +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "SGCR", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SGCWMIS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SGCWMIS deleted file mode 100644 index ba6ac0e270..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SGCWMIS +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "SGCWMIS", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "MISCIBLE", - "item": "NTMISC" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "1", - "1" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SGF32D b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SGF32D deleted file mode 100644 index 861239a717..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SGF32D +++ /dev/null @@ -1,28 +0,0 @@ -{ - "name": "SGF32D", - "sections": [ - "PROPS" - ], - "records": [ - [ - { - "name": "SOIL", - "value_type": "DOUBLE", - "dimension": "1", - "size_type": "ALL" - } - ], - [ - { - "name": "SWAT", - "value_type": "DOUBLE", - "dimension": "1" - }, - { - "name": "KRG", - "value_type": "DOUBLE", - "dimension": "1" - } - ] - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SGFN b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SGFN deleted file mode 100644 index adb002875a..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SGFN +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "SGFN", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTSFUN" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "1", - "1", - "Pressure" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SGL b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SGL deleted file mode 100644 index 93ac9e4acd..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SGL +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "SGL", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SGLPC b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SGLPC deleted file mode 100644 index 78b988a1fa..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SGLPC +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "SGLPC", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SGOF b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SGOF deleted file mode 100644 index 7381768023..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SGOF +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "SGOF", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTSFUN" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "1", - "1", - "1", - "Pressure" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SGU b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SGU deleted file mode 100644 index aa43a668be..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SGU +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "SGU", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SGWFN b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SGWFN deleted file mode 100644 index f5f18f7d2e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SGWFN +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "SGWFN", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTSFUN" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "1", - "1", - "1", - "Pressure" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SHRATE b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SHRATE deleted file mode 100644 index 3f89771e21..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SHRATE +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "SHRATE", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTPVT" - }, - "items": [ - { - "name": "SHEAR_RATE", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": "1" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SIGMA b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SIGMA deleted file mode 100644 index 5c404ebe76..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SIGMA +++ /dev/null @@ -1,13 +0,0 @@ -{ - "name": "SIGMA", - "sections": [ - "GRID" - ], - "items": [ - { - "name": "COUPLING", - "value_type": "DOUBLE", - "dimension": "1/Length*Length" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SIGMAGD b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SIGMAGD deleted file mode 100644 index 56e883cc9c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SIGMAGD +++ /dev/null @@ -1,13 +0,0 @@ -{ - "name": "SIGMAGD", - "sections": [ - "GRID" - ], - "items": [ - { - "name": "COUPLING", - "value_type": "DOUBLE", - "dimension": "1/Length*Length" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SIGMAGDV b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SIGMAGDV deleted file mode 100644 index 368962915a..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SIGMAGDV +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "SIGMAGDV", - "sections": [ - "GRID" - ], - "data": { - "value_type": "DOUBLE" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SIGMATH b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SIGMATH deleted file mode 100644 index 10d3349691..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SIGMATH +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "SIGMATH", - "sections": [ - "GRID" - ], - "data": { - "value_type": "DOUBLE" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SIGMAV b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SIGMAV deleted file mode 100644 index 329136b6e4..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SIGMAV +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "SIGMAV", - "sections": [ - "GRID" - ], - "data": { - "value_type": "DOUBLE" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SIMULATE b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SIMULATE deleted file mode 100644 index 3eeb6b7836..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SIMULATE +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "SIMULATE", - "sections": [ - "SCHEDULE" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SKIP b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SKIP deleted file mode 100644 index 9eac34aac0..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SKIP +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "SKIP", - "size": 0, - "sections": [ - "RUNSPEC", - "GRID", - "EDIT", - "PROPS", - "REGIONS", - "SOLUTION", - "SUMMARY", - "SCHEDULE" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SKIP100 b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SKIP100 deleted file mode 100644 index 6b4239f2e7..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SKIP100 +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "SKIP100", - "size": 0, - "sections": [ - "RUNSPEC", - "GRID", - "EDIT", - "PROPS", - "REGIONS", - "SOLUTION", - "SUMMARY", - "SCHEDULE" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SKIP300 b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SKIP300 deleted file mode 100644 index 1afaf20296..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SKIP300 +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "SKIP300", - "size": 0, - "sections": [ - "RUNSPEC", - "GRID", - "EDIT", - "PROPS", - "REGIONS", - "SOLUTION", - "SUMMARY", - "SCHEDULE" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SKIPREST b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SKIPREST deleted file mode 100644 index 3b41a22865..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SKIPREST +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "SKIPREST", - "sections": [ - "SCHEDULE" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SKRO b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SKRO deleted file mode 100644 index f7539ca46b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SKRO +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "SKRO", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SKRORG b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SKRORG deleted file mode 100644 index c5666e1576..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SKRORG +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "SKRORG", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SKRORW b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SKRORW deleted file mode 100644 index 6cf0019a8a..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SKRORW +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "SKRORW", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SKRW b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SKRW deleted file mode 100644 index 4876ee2a7b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SKRW +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "SKRW", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SKRWR b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SKRWR deleted file mode 100644 index ab77e20a8d..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SKRWR +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "SKRWR", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SLAVES b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SLAVES deleted file mode 100644 index 4e784b691c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SLAVES +++ /dev/null @@ -1,29 +0,0 @@ -{ - "name": "SLAVES", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "SLAVE_RESERVOIR", - "value_type": "STRING" - }, - { - "name": "SLAVE_ECLBASE", - "value_type": "STRING" - }, - { - "name": "HOST_NAME", - "value_type": "STRING" - }, - { - "name": "DIRECTORY", - "value_type": "STRING" - }, - { - "name": "NUM_PE", - "value_type": "INT", - "default": 1 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SLGOF b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SLGOF deleted file mode 100644 index d310a09bce..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SLGOF +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "SLGOF", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTSFUN" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "1", - "1", - "1", - "Pressure" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SMRYDIMS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SMRYDIMS deleted file mode 100644 index d0c3c1e5db..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SMRYDIMS +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "SMRYDIMS", - "sections": [ - "RUNSPEC" - ], - "size": 1, - "items": [ - { - "name": "DIMS", - "value_type": "INT", - "default": 10000 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SMULTX b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SMULTX deleted file mode 100644 index 29eb813467..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SMULTX +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "SMULTX", - "sections": [ - "GRID" - ], - "data": { - "value_type": "DOUBLE" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SMULTY b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SMULTY deleted file mode 100644 index 3629a46239..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SMULTY +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "SMULTY", - "sections": [ - "GRID" - ], - "data": { - "value_type": "DOUBLE" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SMULTZ b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SMULTZ deleted file mode 100644 index 65abccb254..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SMULTZ +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "SMULTZ", - "sections": [ - "GRID" - ], - "data": { - "value_type": "DOUBLE" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SOCRS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SOCRS deleted file mode 100644 index 64783af26e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SOCRS +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "SOCRS", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SOF2 b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SOF2 deleted file mode 100644 index 986d2aced3..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SOF2 +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "SOF2", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTSFUN" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "1", - "1" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SOF3 b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SOF3 deleted file mode 100644 index 5859bf2c22..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SOF3 +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "SOF3", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTSFUN" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "1", - "1", - "1" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SOF32D b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SOF32D deleted file mode 100644 index 0149531b1f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SOF32D +++ /dev/null @@ -1,28 +0,0 @@ -{ - "name": "SOF32D", - "sections": [ - "PROPS" - ], - "records": [ - [ - { - "name": "SWAT", - "value_type": "DOUBLE", - "dimension": "1", - "size_type": "ALL" - } - ], - [ - { - "name": "SGAS", - "value_type": "DOUBLE", - "dimension": "1" - }, - { - "name": "KRO", - "value_type": "DOUBLE", - "dimension": "1" - } - ] - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SOGCR b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SOGCR deleted file mode 100644 index 0ffd7c7338..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SOGCR +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "SOGCR", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SOIL b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SOIL deleted file mode 100644 index eed683851b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SOIL +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "SOIL", - "sections": [ - "SOLUTION" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SOLUTION b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SOLUTION deleted file mode 100644 index a3088f5626..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SOLUTION +++ /dev/null @@ -1,4 +0,0 @@ -{ - "name": "SOLUTION", - "sections": [] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SOLVCONC b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SOLVCONC deleted file mode 100644 index b826ddef83..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SOLVCONC +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "SOLVCONC", - "sections": [ - "GRID" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "GasSurfaceVolume/Length*Length*Length" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SOLVDIMS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SOLVDIMS deleted file mode 100644 index d87ec35b44..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SOLVDIMS +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "SOLVDIMS", - "sections": [ - "RUNSPEC", - "GRID" - ], - "data": { - "value_type": "INT" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SOLVDIRS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SOLVDIRS deleted file mode 100644 index b38159892b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SOLVDIRS +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name": "SOLVDIRS", - "sections": [ - "GRID" - ], - "items": [ - { - "name": "DIRECTION", - "value_type": "STRING" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SOLVENT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SOLVENT deleted file mode 100644 index ef2b46209e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SOLVENT +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "SOLVENT", - "sections": [ - "RUNSPEC" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SOLVFRAC b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SOLVFRAC deleted file mode 100644 index 17b000868b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SOLVFRAC +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "SOLVFRAC", - "sections": [ - "SOLUTION" - ], - "data": { - "value_type": "DOUBLE" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SOLVNUM b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SOLVNUM deleted file mode 100644 index 16fb8e83d0..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SOLVNUM +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "SOLVNUM", - "sections": [ - "GRID" - ], - "data": { - "value_type": "INT" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SOLWNUM b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SOLWNUM deleted file mode 100644 index d261de2fc9..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SOLWNUM +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "SOLWNUM", - "sctions": [ - "GRID" - ], - "data": { - "value_type": "INT" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SOMGAS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SOMGAS deleted file mode 100644 index 37cd1166a9..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SOMGAS +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "SOMGAS", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTSFUN" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "1", - "1" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SOMWAT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SOMWAT deleted file mode 100644 index 269ab0c315..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SOMWAT +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "SOMWAT", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTSFUN" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "1", - "1" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SORWMIS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SORWMIS deleted file mode 100644 index 3ad2ed2d5c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SORWMIS +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "SORWMIS", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "MISCIBLE", - "item": "NTMISC" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "1", - "1" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SOWCR b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SOWCR deleted file mode 100644 index 24101b06e2..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SOWCR +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "SOWCR", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SPECGRID b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SPECGRID deleted file mode 100644 index 401d5c4efb..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SPECGRID +++ /dev/null @@ -1,34 +0,0 @@ -{ - "name": "SPECGRID", - "sections": [ - "GRID" - ], - "size": 1, - "items": [ - { - "name": "NX", - "value_type": "INT", - "default": 1 - }, - { - "name": "NY", - "value_type": "INT", - "default": 1 - }, - { - "name": "NZ", - "value_type": "INT", - "default": 1 - }, - { - "name": "NUMRES", - "value_type": "INT", - "default": 1 - }, - { - "name": "COORD_TYPE", - "value_type": "STRING", - "default": "F" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SPECHEAT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SPECHEAT deleted file mode 100644 index b02d0e42ec..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SPECHEAT +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "SPECHEAT", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTPVT" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "Temperature", - "Energy/Mass*AbsoluteTemperature", - "Energy/Mass*AbsoluteTemperature", - "Energy/Mass*AbsoluteTemperature" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SPECROCK b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SPECROCK deleted file mode 100644 index 6e184d623a..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SPECROCK +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "SPECROCK", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTSFUN" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "Temperature", - "Energy/Length*Length*Length*AbsoluteTemperature" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SPOLY b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SPOLY deleted file mode 100644 index ec906daf56..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SPOLY +++ /dev/null @@ -1,11 +0,0 @@ -{ - "name": "SPOLY", - "sections": [ - "SOLUTION", - "SPECIAL" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "Density" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SSFN b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SSFN deleted file mode 100644 index c2c57befa8..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SSFN +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "SSFN", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTSFUN" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "1", - "1", - "1" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SSGCR b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SSGCR deleted file mode 100644 index 917dcd14fa..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SSGCR +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "SSGCR", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SSGL b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SSGL deleted file mode 100644 index 4fbf1e172e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SSGL +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "SSGL", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SSOGCR b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SSOGCR deleted file mode 100644 index 54b06719ff..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SSOGCR +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "SSOGCR", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SSOL b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SSOL deleted file mode 100644 index a6882fc31e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SSOL +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "SSOL", - "sections": [ - "SOLUTION" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SSOWCR b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SSOWCR deleted file mode 100644 index 2bbc940b77..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SSOWCR +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "SSOWCR", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SSWCR b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SSWCR deleted file mode 100644 index 2bbc940b77..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SSWCR +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "SSOWCR", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SSWL b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SSWL deleted file mode 100644 index 6b6a3e85ef..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SSWL +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "SSWL", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SSWU b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SSWU deleted file mode 100644 index 998d19f58d..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SSWU +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "SSWU", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/START b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/START deleted file mode 100644 index 89521cbefe..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/START +++ /dev/null @@ -1,29 +0,0 @@ -{ - "name": "START", - "sections": [ - "RUNSPEC" - ], - "size": 1, - "items": [ - { - "name": "DAY", - "value_type": "INT", - "default": 1 - }, - { - "name": "MONTH", - "value_type": "STRING", - "default": "JAN" - }, - { - "name": "YEAR", - "value_type": "INT", - "default": 1983 - }, - { - "name": "TIME", - "value_type": "STRING", - "default": "00:00:00.000" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/STOG b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/STOG deleted file mode 100644 index caefa4144f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/STOG +++ /dev/null @@ -1,30 +0,0 @@ -{ - "name": "STOG", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTPVT" - }, - "alternating_records": [ - [ - { - "name": "REF_OIL_PHASE_PRESSURE", - "value_type": "DOUBLE", - "dimension": "Pressure" - } - ], - [ - { - "name": "table", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "Pressure", - "SurfaceTension" - ] - } - ] - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/STONE b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/STONE deleted file mode 100644 index ab15ab1735..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/STONE +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "STONE", - "sections": [ - "PROPS" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/STONE1 b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/STONE1 deleted file mode 100644 index 24d688732e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/STONE1 +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "STONE1", - "sections": [ - "PROPS" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/STONE1EX b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/STONE1EX deleted file mode 100644 index 154c58120f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/STONE1EX +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "STONE1EX", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTSFUN" - }, - "items": [ - { - "name": "EXP_VALUE", - "value_type": "DOUBLE", - "default": 1, - "dimension": "1" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/STONE2 b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/STONE2 deleted file mode 100644 index 8be7d20fd4..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/STONE2 +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "STONE2", - "sections": [ - "PROPS" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/STOW b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/STOW deleted file mode 100644 index a6b9981371..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/STOW +++ /dev/null @@ -1,30 +0,0 @@ -{ - "name": "STOW", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTPVT" - }, - "alternating_records": [ - [ - { - "name": "REF_OIL_PRESSURE", - "value_type": "DOUBLE", - "dimension": "Pressure" - } - ], - [ - { - "name": "table", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "Pressure", - "SurfaceTension" - ] - } - ] - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/STWG b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/STWG deleted file mode 100644 index d736c1f1e4..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/STWG +++ /dev/null @@ -1,30 +0,0 @@ -{ - "name": "STWG", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTPVT" - }, - "alternating_records": [ - [ - { - "name": "REF_OIL_PRESSURE", - "value_type": "DOUBLE", - "dimension": "Pressure" - } - ], - [ - { - "name": "table", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "Pressure", - "SurfaceTension" - ] - } - ] - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SUMMARY b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SUMMARY deleted file mode 100644 index c96931c302..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SUMMARY +++ /dev/null @@ -1,4 +0,0 @@ -{ - "name": "SUMMARY", - "sections": [] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SUMTHIN b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SUMTHIN deleted file mode 100644 index c0ec6332cb..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SUMTHIN +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "SUMTHIN", - "sections": [ - "SUMMARY", - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "TIME", - "value_type": "DOUBLE", - "dimension": "Time" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SURF b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SURF deleted file mode 100644 index 49251fcf58..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SURF +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "SURF", - "sections": [ - "SOLUTION" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "Mass/ReservoirVolume" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SURFACT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SURFACT deleted file mode 100644 index 1480e5d9b7..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SURFACT +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "SURFACT", - "sections": [ - "RUNSPEC" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SURFACTW b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SURFACTW deleted file mode 100644 index d357a0ed5f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SURFACTW +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "SURFACTW", - "sections": [ - "RUNSPEC" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SURFADDW b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SURFADDW deleted file mode 100644 index 234c5a04a3..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SURFADDW +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "SURFADDW", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTSFUN" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "1", - "1" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SURFADS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SURFADS deleted file mode 100644 index d9a119fb59..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SURFADS +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "SURFADS", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTSFUN" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "Mass/Length*Length*Length", - "1" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SURFCAPD b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SURFCAPD deleted file mode 100644 index 4e27853740..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SURFCAPD +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "SURFADS", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTSFUN" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "1", - "1" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SURFESAL b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SURFESAL deleted file mode 100644 index f24f305670..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SURFESAL +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "SURFESAL", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTSFUN" - }, - "items": [ - { - "name": "COEFF", - "value_type": "DOUBLE", - "dimension": "1" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SURFNUM b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SURFNUM deleted file mode 100644 index 784b765574..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SURFNUM +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "SURFNUM", - "sections": [ - "REGIONS" - ], - "data": { - "value_type": "INT" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SURFOPTS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SURFOPTS deleted file mode 100644 index 2f7ace76cd..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SURFOPTS +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "SURFOPTS", - "sections": [ - "PROPS" - ], - "size": 1, - "items": [ - { - "name": "MIN_SWAT", - "value_type": "DOUBLE", - "default": 1e-06 - }, - { - "name": "SMOOTHING", - "value_type": "DOUBLE", - "default": 1e-06 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SURFROCK b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SURFROCK deleted file mode 100644 index 9c9b9272f7..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SURFROCK +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "SURFROCK", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTSFUN" - }, - "items": [ - { - "name": "INDEX", - "value_type": "INT" - }, - { - "name": "MASS_DENSITY", - "value_type": "DOUBLE", - "dimension": "Mass/ReservoirVolume" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SURFST b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SURFST deleted file mode 100644 index 1658af3cbf..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SURFST +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "SURFST", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTPVT" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SURFSTES b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SURFSTES deleted file mode 100644 index ab72049f68..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SURFSTES +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "SURFSTES", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTPVT" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SURFVISC b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SURFVISC deleted file mode 100644 index 8865742b38..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SURFVISC +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "SURFVISC", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTPVT" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "Mass/ReservoirVolume", - "Viscosity" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SURFWNUM b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SURFWNUM deleted file mode 100644 index 6488ba8366..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SURFWNUM +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "SURFWNUM", - "sections": [ - "REGIONS" - ], - "data": { - "value_type": "INT" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SWAT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SWAT deleted file mode 100644 index c55016b652..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SWAT +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "SWAT", - "sections": [ - "SOLUTION" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SWATINIT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SWATINIT deleted file mode 100644 index cba0ce0836..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SWATINIT +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "SWATINIT", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SWCR b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SWCR deleted file mode 100644 index 6ae65495c8..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SWCR +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "SWCR", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SWF32D b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SWF32D deleted file mode 100644 index 2dcd2e432b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SWF32D +++ /dev/null @@ -1,28 +0,0 @@ -{ - "name": "SOF32D", - "sections": [ - "PROPS" - ], - "records": [ - [ - { - "name": "SOIL", - "value_type": "DOUBLE", - "dimension": "1", - "size_type": "ALL" - } - ], - [ - { - "name": "SGAS", - "value_type": "DOUBLE", - "dimension": "1" - }, - { - "name": "KRW", - "value_type": "DOUBLE", - "dimension": "1" - } - ] - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SWFN b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SWFN deleted file mode 100644 index 1d5d42a154..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SWFN +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "SWFN", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTSFUN" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "1", - "1", - "Pressure" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SWINGFAC b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SWINGFAC deleted file mode 100644 index 4c84737077..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SWINGFAC +++ /dev/null @@ -1,105 +0,0 @@ -{ - "name": "SWINGFAC", - "sections": [ - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "SWING_FACTOR1", - "value_type": "DOUBLE" - }, - { - "name": "SWING_FACTOR2", - "value_type": "DOUBLE" - }, - { - "name": "SWING_FACTOR3", - "value_type": "DOUBLE" - }, - { - "name": "SWING_FACTOR4", - "value_type": "DOUBLE" - }, - { - "name": "SWING_FACTOR5", - "value_type": "DOUBLE" - }, - { - "name": "SWING_FACTOR6", - "value_type": "DOUBLE" - }, - { - "name": "SWING_FACTOR7", - "value_type": "DOUBLE" - }, - { - "name": "SWING_FACTOR8", - "value_type": "DOUBLE" - }, - { - "name": "SWING_FACTOR9", - "value_type": "DOUBLE" - }, - { - "name": "SWING_FACTOR10", - "value_type": "DOUBLE" - }, - { - "name": "SWING_FACTOR11", - "value_type": "DOUBLE" - }, - { - "name": "SWING_FACTOR12", - "value_type": "DOUBLE" - }, - { - "name": "PROFILE_FACTOR1", - "value_type": "DOUBLE" - }, - { - "name": "PROFILE_FACTOR2", - "value_type": "DOUBLE" - }, - { - "name": "PROFILE_FACTOR3", - "value_type": "DOUBLE" - }, - { - "name": "PROFILE_FACTOR4", - "value_type": "DOUBLE" - }, - { - "name": "PROFILE_FACTOR5", - "value_type": "DOUBLE" - }, - { - "name": "PROFILE_FACTOR6", - "value_type": "DOUBLE" - }, - { - "name": "PROFILE_FACTOR7", - "value_type": "DOUBLE" - }, - { - "name": "PROFILE_FACTOR8", - "value_type": "DOUBLE" - }, - { - "name": "PROFILE_FACTOR9", - "value_type": "DOUBLE" - }, - { - "name": "PROFILE_FACTOR10", - "value_type": "DOUBLE" - }, - { - "name": "PROFILE_FACTOR11", - "value_type": "DOUBLE" - }, - { - "name": "PROFILE_FACTOR12", - "value_type": "DOUBLE" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SWL b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SWL deleted file mode 100644 index 5495ee03f4..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SWL +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "SWL", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SWLPC b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SWLPC deleted file mode 100644 index 5b783313bd..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SWLPC +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "SWLPC", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SWOF b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SWOF deleted file mode 100644 index f590b259f1..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SWOF +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "SWOF", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTSFUN" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "1", - "1", - "1", - "Pressure" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SWU b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SWU deleted file mode 100644 index a25f855a83..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/S/SWU +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "SWU", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TABDIMS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TABDIMS deleted file mode 100644 index 805b93e0d9..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TABDIMS +++ /dev/null @@ -1,135 +0,0 @@ -{ - "name": "TABDIMS", - "sections": [ - "RUNSPEC" - ], - "size": 1, - "items": [ - { - "name": "NTSFUN", - "value_type": "INT", - "default": 1 - }, - { - "name": "NTPVT", - "value_type": "INT", - "default": 1 - }, - { - "name": "NSSFUN", - "value_type": "INT", - "default": 20 - }, - { - "name": "NPPVT", - "value_type": "INT", - "default": 20 - }, - { - "name": "NTFIP", - "value_type": "INT", - "default": 1 - }, - { - "name": "NRPVT", - "value_type": "INT", - "default": 20 - }, - { - "name": "MAX_RV_NODES", - "value_type": "INT" - }, - { - "name": "NTENDP", - "value_type": "INT", - "default": 1, - "comment": "This item is ECLIPSE300 specific" - }, - { - "name": "NUM_STATE_EQ", - "value_type": "INT", - "default": 1, - "comment": "This item is ECLIPSE300 specific" - }, - { - "name": "NUM_EOS_RES", - "value_type": "INT", - "default": 1 - }, - { - "name": "NUM_EOS_SURFACE", - "value_type": "INT" - }, - { - "name": "MAX_FLUX_REGIONS", - "value_type": "INT", - "default": 10 - }, - { - "name": "MAX_THERMAL_REGIONS", - "value_type": "INT", - "default": 1 - }, - { - "name": "NTROCC", - "value_type": "INT" - }, - { - "name": "MAX_PRESSURE_MAINTAINANCE_REGIONS", - "value_type": "INT", - "default": 0 - }, - { - "name": "MAX_KVALUE_TABLES", - "value_type": "INT", - "default": 0 - }, - { - "name": "NTALPHA", - "value_type": "INT" - }, - { - "name": "ASPHALTENE_ASPKDAM_MAX_ROWS", - "value_type": "INT", - "default": 10 - }, - { - "name": "ASPHALTENE_ASPREWG_MAX_ROWS", - "value_type": "INT", - "default": 10 - }, - { - "name": "ASPHALTENE_ASPVISO_MAX_ROWS", - "value_type": "INT", - "default": 10 - }, - { - "name": "ITEM20_NOT_USED", - "value_type": "STRING" - }, - { - "name": "ASPHALTENE_ASPPW2D_MAX_COLUMNS", - "value_type": "INT", - "default": 5 - }, - { - "name": "ASPHALTENE_ASPPW2D_MAX_ROWS", - "value_type": "INT", - "default": 5 - }, - { - "name": "ASPHALTENE_ASPWETF_MAX_ROWS", - "value_type": "INT", - "default": 5 - }, - { - "name": "NUM_KVALUE_TABLES", - "value_type": "INT", - "default": 0 - }, - { - "name": "RESERVED", - "value_type": "STRING" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TBLK b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TBLK deleted file mode 100644 index 5a088a49cf..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TBLK +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "TBLK", - "deck_name_regex": "TBLK(F|S).{1,3}", - "sections": [ - "SOLUTION" - ], - "data": { - "value_type": "DOUBLE" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TEMP b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TEMP deleted file mode 100644 index eb0125eb55..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TEMP +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "TEMP", - "sections": [ - "RUNSPEC" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TEMPNODE b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TEMPNODE deleted file mode 100644 index cf2898912f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TEMPNODE +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "TEMPNODE", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NPPVT" - }, - "items": [ - { - "name": "TABLE_DATA", - "value_type": "DOUBLE", - "dimension": "Temperature" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TEMPTVD b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TEMPTVD deleted file mode 100644 index ff30f139a0..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TEMPTVD +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "TEMPTVD", - "sections": [ - "PROPS" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TEMPVD b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TEMPVD deleted file mode 100644 index d239c91de0..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TEMPVD +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "TEMPVD", - "sections": [ - "PROPS" - ], - "items": [ - { - "name": "DEPTH", - "value_type": "DOUBLE", - "dimension": "Length" - }, - { - "name": "TEMP", - "value_type": "DOUBLE", - "dimension": "Temperature" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/THCONR b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/THCONR deleted file mode 100644 index 49404f2ef8..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/THCONR +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "THCONR", - "sections": [ - "GRID" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "Energy/AbsoluteTemperature*Length*Time" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/THERMAL b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/THERMAL deleted file mode 100644 index 6fb8e1e3d7..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/THERMAL +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "THERMAL", - "sections": [ - "RUNSPEC" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/THPRES b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/THPRES deleted file mode 100644 index 28ef810434..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/THPRES +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "THPRES", - "sections": [ - "SOLUTION" - ], - "items": [ - { - "name": "REGION1", - "value_type": "INT" - }, - { - "name": "REGION2", - "value_type": "INT" - }, - { - "name": "VALUE", - "value_type": "DOUBLE", - "dimension": "Pressure" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/THPRESFT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/THPRESFT deleted file mode 100644 index 87710f08ba..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/THPRESFT +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "THPRESFT", - "sections": [ - "GRID" - ], - "items": [ - { - "name": "FAULT_NAME", - "value_type": "STRING" - }, - { - "name": "VALUE", - "value_type": "DOUBLE", - "dimension": "Pressure" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TIGHTEN b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TIGHTEN deleted file mode 100644 index 3f66175495..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TIGHTEN +++ /dev/null @@ -1,13 +0,0 @@ -{ - "name": "TIGHTEN", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "FACTOR", - "value_type": "DOUBLE", - "default_value": 1 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TIGHTENP b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TIGHTENP deleted file mode 100644 index 9c2796e527..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TIGHTENP +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "TIGHTEN", - "sections": [ - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "LINEAR_FACTOR", - "value_type": "DOUBLE", - "default_value": 1 - }, - { - "name": "MAX_LINEAR", - "value_type": "INT" - }, - { - "name": "NONLINEAR_FACTOR", - "value_type": "DOUBLE", - "default_value": 1 - }, - { - "name": "MAX_NONLINEAR", - "value_type": "INT" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TIME b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TIME deleted file mode 100644 index 9782d16f70..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TIME +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "TIME", - "sections": [ - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "step_list", - "value_type": "DOUBLE", - "dimension": "Time", - "size_type": "ALL" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TITLE b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TITLE deleted file mode 100644 index c3d4ba4121..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TITLE +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "TITLE", - "sections": [ - "RUNSPEC" - ], - "size": 1, - "items": [ - { - "name": "TitleText", - "value_type": "STRING", - "size_type": "ALL" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TLMIXPAR b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TLMIXPAR deleted file mode 100644 index 2d4b92643d..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TLMIXPAR +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "TLMIXPAR", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "MISCIBLE", - "item": "NTMISC" - }, - "items": [ - { - "name": "TL_VISCOSITY_PARAMETER", - "value_type": "DOUBLE", - "dimension": "1" - }, - { - "name": "TL_DENSITY_PARAMETER", - "value_type": "DOUBLE", - "dimension": "1" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TNUM b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TNUM deleted file mode 100644 index fcaf685929..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TNUM +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "TNUM", - "deck_name_regex": "TNUM(F|S).{1,3}", - "sections": [ - "REGIONS" - ], - "data": { - "value_type": "INT" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TOLCRIT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TOLCRIT deleted file mode 100644 index 41d4aadd9a..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TOLCRIT +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "TOLCRIT", - "sections": [ - "PROPS" - ], - "size": 1, - "items": [ - { - "name": "VALUE", - "value_type": "DOUBLE", - "default": 1e-06, - "dimension": "1" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TOPS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TOPS deleted file mode 100644 index 5fbe1b9415..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TOPS +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "TOPS", - "sections": [ - "GRID" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "Length" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TPAMEPS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TPAMEPS deleted file mode 100644 index 39d7234ba9..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TPAMEPS +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "TPAMEPS", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "REGDIMS", - "item": "NTCREG" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TPAMEPSS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TPAMEPSS deleted file mode 100644 index 39d7234ba9..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TPAMEPSS +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "TPAMEPS", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "REGDIMS", - "item": "NTCREG" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRACER b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRACER deleted file mode 100644 index d4241ae10b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRACER +++ /dev/null @@ -1,32 +0,0 @@ -{ - "name": "TRACER", - "sections": [ - "PROPS" - ], - "items": [ - { - "name": "NAME", - "value_type": "STRING" - }, - { - "name": "FLUID", - "value_type": "STRING" - }, - { - "name": "UNIT", - "value_type": "STRING" - }, - { - "name": "SOLUTION_PHASE", - "value_type": "STRING" - }, - { - "name": "NUM_PART_TABLE", - "value_type": "INT" - }, - { - "name": "ADSORB_PHASE", - "value_type": "STRING" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRACERKM b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRACERKM deleted file mode 100644 index e1f0bd80b5..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRACERKM +++ /dev/null @@ -1,38 +0,0 @@ -{ - "name": "TRACERKM", - "sections": [ - "PROPS" - ], - "size": "UNKNOWN", - "records": [ - [ - { - "name": "TRACER_NAME", - "value_type": "STRING" - }, - { - "name": "PARTITION_FUNCTION_TYPE", - "value_type": "STRING", - "default": "STANDARD" - } - ], - [ - { - "name": "PHASES", - "value_type": "STRING", - "size_type": "ALL" - } - ], - [ - { - "name": "TABLE", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimensions": [ - "Pressure", - "1" - ] - } - ] - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRACERKP b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRACERKP deleted file mode 100644 index 76d6987d71..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRACERKP +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "TRACERKP", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "PARTTRAC", - "item": "NKPTMX" - }, - "items": [ - { - "name": "TABLE", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "Pressure", - "1" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRACERS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRACERS deleted file mode 100644 index ab166b9932..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRACERS +++ /dev/null @@ -1,67 +0,0 @@ -{ - "name": "TRACERS", - "sections": [ - "RUNSPEC" - ], - "size": 1, - "items": [ - { - "name": "MAX_OIL_TRACERS", - "value_type": "INT", - "default": 0 - }, - { - "name": "MAX_WATER_TRACERS", - "value_type": "INT", - "default": 0 - }, - { - "name": "MAX_GAS_TRACERS", - "value_type": "INT", - "default": 0 - }, - { - "name": "MAX_ENV_TRACERS", - "value_type": "INT", - "default": 0 - }, - { - "name": "NUMERIC_DIFF", - "value_type": "STRING", - "default": "NODIFF" - }, - { - "name": "MAX_ITER", - "value_type": "INT", - "default": 12 - }, - { - "name": "MIN_ITER", - "value_type": "INT", - "default": 1 - }, - { - "name": "PASSIVE_NONLINEAR", - "value_type": "STRING", - "default": "NO" - }, - { - "name": "ONEOFF_LIN_TIGHT", - "value_type": "INT" - }, - { - "name": "ONEOFF_NLIN_TIGHT", - "value_type": "INT" - }, - { - "name": "TIGHTENING_FACTORS", - "value_type": "DOUBLE", - "default": 1 - }, - { - "name": "NTIGHTFACTORS", - "value_type": "INT", - "default": 0 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRACITVD b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRACITVD deleted file mode 100644 index 88aa4f666f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRACITVD +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "TRACITVD", - "sections": [ - "PROPS" - ], - "size": 1, - "items": [ - { - "name": "FLUX_LIMITER", - "value_type": "INT", - "default": 1 - }, - { - "name": "BOTH_TIMESTEP", - "value_type": "STRING", - "default": "YES" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRACTVD b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRACTVD deleted file mode 100644 index f8f2b37a9f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRACTVD +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "TRACTVD", - "sections": [ - "PROPS" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRADS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRADS deleted file mode 100644 index bf7f5e615f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRADS +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "TRADS", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTSFUN" - }, - "items": [ - { - "name": "DATA", - "size_type": "ALL", - "value_type": "DOUBLE" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRANGL b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRANGL deleted file mode 100644 index 103fd4a105..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRANGL +++ /dev/null @@ -1,37 +0,0 @@ -{ - "name": "TRANGL", - "sections": [ - "GRID" - ], - "items": [ - { - "name": "IL", - "value_type": "INT" - }, - { - "name": "JL", - "value_type": "INT" - }, - { - "name": "KL", - "value_type": "INT" - }, - { - "name": "IG", - "value_type": "INT" - }, - { - "name": "JG", - "value_type": "INT" - }, - { - "name": "KG", - "value_type": "INT" - }, - { - "name": "TRAN", - "value_type": "DOUBLE", - "dimension": "Transmissibility" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRANR b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRANR deleted file mode 100644 index 8092f3704c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRANR +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "TRANR", - "sections": [ - "EDIT" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "Transmissibility" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRANTHT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRANTHT deleted file mode 100644 index 1425139ea5..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRANTHT +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "TRANTHT", - "sections": [ - "EDIT" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "Transmissibility" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRANX b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRANX deleted file mode 100644 index c19f576cc1..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRANX +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "TRANX", - "sections": [ - "EDIT" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "Transmissibility" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRANY b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRANY deleted file mode 100644 index ce4ac5bfed..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRANY +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "TRANY", - "sections": [ - "EDIT" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "Transmissibility" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRANZ b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRANZ deleted file mode 100644 index 9260817980..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRANZ +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "TRANZ", - "sections": [ - "EDIT" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "Transmissibility" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRDCY b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRDCY deleted file mode 100644 index b308ae9ca8..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRDCY +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "TRDCY", - "sections": [ - "PROPS" - ], - "deck_name_regex": "TRDCY.+", - "size": { - "keyword": "TABDIMS", - "item": "NTPVT" - }, - "items": [ - { - "name": "HALF_TIME", - "value_type": "DOUBLE", - "dimension": "Time", - "default": 1e+20 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRDIF b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRDIF deleted file mode 100644 index 21caa0d24b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRDIF +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "TRDIF", - "sections": [ - "PROPS" - ], - "deck_name_regex": "TRDIF.+", - "size": { - "keyword": "TABDIMS", - "item": "NTPVT" - }, - "items": [ - { - "name": "HALF_TIME", - "value_type": "DOUBLE", - "dimension": "Time", - "default": 1e+20 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRDIS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRDIS deleted file mode 100644 index 9cdf5305b9..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRDIS +++ /dev/null @@ -1,49 +0,0 @@ -{ - "name": "TRDIS", - "sections": [ - "PROPS" - ], - "deck_name_regex": "TRDIS.+", - "size": { - "keyword": "TABDIMS", - "item": "NTPVT" - }, - "items": [ - { - "name": "D1TABLE", - "value_type": "INT" - }, - { - "name": "D2TABLE", - "value_type": "INT" - }, - { - "name": "D3TABLE", - "value_type": "INT" - }, - { - "name": "D4TABLE", - "value_type": "INT" - }, - { - "name": "D5TABLE", - "value_type": "INT" - }, - { - "name": "D6TABLE", - "value_type": "INT" - }, - { - "name": "D7TABLE", - "value_type": "INT" - }, - { - "name": "D8TABLE", - "value_type": "INT" - }, - { - "name": "D9TABLE", - "value_type": "INT" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRKPF b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRKPF deleted file mode 100644 index 900c619c75..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRKPF +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "TRKPF", - "sections": [ - "REGIONS" - ], - "deck_name_regex": "TRKPF.+", - "data": { - "value_type": "INT" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRNHD b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRNHD deleted file mode 100644 index cce82c6a3b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRNHD +++ /dev/null @@ -1,7 +0,0 @@ -{ - "name": "TRNHD", - "sections": [ - "PROPS" - ], - "deck_name_regex": "TRNHD.+" -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRPLPORO b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRPLPORO deleted file mode 100644 index 1034d90a2c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRPLPORO +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name": "TRPLPORO", - "sections": [ - "RUNSPEC" - ], - "items": [ - { - "name": "NUM_MATRIX", - "value_type": "INT" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRROCK b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRROCK deleted file mode 100644 index cf7344f1f2..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TRROCK +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "TRROCK", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTSFUN" - }, - "items": [ - { - "name": "ADSORPTION_INDEX", - "value_type": "INT" - }, - { - "name": "MASS_DENSITY", - "value_type": "DOUBLE", - "dimension": "Mass/Length*Length*Length" - }, - { - "name": "INIT_MODEL", - "value_type": "INT", - "default": 1 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TSTEP b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TSTEP deleted file mode 100644 index f747e08dba..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TSTEP +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "TSTEP", - "sections": [ - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "step_list", - "value_type": "DOUBLE", - "dimension": "Timestep", - "size_type": "ALL" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TUNING b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TUNING deleted file mode 100644 index 73f6771e6b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TUNING +++ /dev/null @@ -1,185 +0,0 @@ -{ - "name": "TUNING", - "size": 3, - "sections": [ - "SCHEDULE" - ], - "records": [ - [ - { - "name": "TSINIT", - "value_type": "DOUBLE", - "dimension": "Time", - "default": 1 - }, - { - "name": "TSMAXZ", - "value_type": "DOUBLE", - "dimension": "Time", - "default": 365 - }, - { - "name": "TSMINZ", - "value_type": "DOUBLE", - "dimension": "Time", - "default": 0.1 - }, - { - "name": "TSMCHP", - "value_type": "DOUBLE", - "dimension": "Time", - "default": 0.15 - }, - { - "name": "TSFMAX", - "value_type": "DOUBLE", - "default": 3 - }, - { - "name": "TSFMIN", - "value_type": "DOUBLE", - "default": 0.3 - }, - { - "name": "TSFCNV", - "value_type": "DOUBLE", - "default": 0.1 - }, - { - "name": "TFDIFF", - "value_type": "DOUBLE", - "default": 1.25 - }, - { - "name": "THRUPT", - "value_type": "DOUBLE", - "default": 1e+20 - }, - { - "name": "TMAXWC", - "value_type": "DOUBLE", - "dimension": "Time" - } - ], - [ - { - "name": "TRGTTE", - "value_type": "DOUBLE", - "default": 0.1 - }, - { - "name": "TRGCNV", - "value_type": "DOUBLE", - "default": 0.001 - }, - { - "name": "TRGMBE", - "value_type": "DOUBLE", - "default": 1e-07 - }, - { - "name": "TRGLCV", - "value_type": "DOUBLE", - "default": 0.0001 - }, - { - "name": "XXXTTE", - "value_type": "DOUBLE", - "default": 10 - }, - { - "name": "XXXCNV", - "value_type": "DOUBLE", - "default": 0.01 - }, - { - "name": "XXXMBE", - "value_type": "DOUBLE", - "default": 1e-06 - }, - { - "name": "XXXLCV", - "value_type": "DOUBLE", - "default": 0.001 - }, - { - "name": "XXXWFL", - "value_type": "DOUBLE", - "default": 0.001 - }, - { - "name": "TRGFIP", - "value_type": "DOUBLE", - "default": 0.025 - }, - { - "name": "TRGSFT", - "value_type": "DOUBLE" - }, - { - "name": "THIONX", - "value_type": "DOUBLE", - "default": 0.01 - }, - { - "name": "TRWGHT", - "value_type": "INT", - "default": 1 - } - ], - [ - { - "name": "NEWTMX", - "value_type": "INT", - "default": 12 - }, - { - "name": "NEWTMN", - "value_type": "INT", - "default": 1 - }, - { - "name": "LITMAX", - "value_type": "INT", - "default": 25 - }, - { - "name": "LITMIN", - "value_type": "INT", - "default": 1 - }, - { - "name": "MXWSIT", - "value_type": "INT", - "default": 8 - }, - { - "name": "MXWPIT", - "value_type": "INT", - "default": 8 - }, - { - "name": "DDPLIM", - "value_type": "DOUBLE", - "dimension": "Pressure", - "default": 1000000 - }, - { - "name": "DDSLIM", - "value_type": "DOUBLE", - "default": 1000000 - }, - { - "name": "TRGDPR", - "value_type": "DOUBLE", - "dimension": "Pressure", - "default": 1000000 - }, - { - "name": "XXXDPR", - "value_type": "DOUBLE", - "dimension": "Pressure" - } - ] - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TUNINGDP b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TUNINGDP deleted file mode 100644 index c87ea1366c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TUNINGDP +++ /dev/null @@ -1,25 +0,0 @@ -{ - "name": "TUNINGDP", - "sections": [ - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "TRGLCV", - "value_type": "DOUBLE" - }, - { - "name": "XXXLCV", - "value_type": "DOUBLE" - }, - { - "name": "TRGDDP", - "value_type": "DOUBLE" - }, - { - "name": "TRGDDS", - "value_type": "DOUBLE" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TUNINGH b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TUNINGH deleted file mode 100644 index af4b99c6fa..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TUNINGH +++ /dev/null @@ -1,34 +0,0 @@ -{ - "name": "TUNINGH", - "size": 1, - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "GRGLCV", - "value_type": "DOUBLE", - "default": 0.0001 - }, - { - "name": "GXXLCV", - "value_type": "DOUBLE", - "default": 0.001 - }, - { - "name": "GMSLCV", - "value_type": "DOUBLE", - "default": 1e-20 - }, - { - "name": "LGTMIN", - "value_type": "INT", - "default": 1 - }, - { - "name": "LGTMAX", - "value_type": "INT", - "default": 25 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TUNINGL b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TUNINGL deleted file mode 100644 index dcb4293389..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TUNINGL +++ /dev/null @@ -1,185 +0,0 @@ -{ - "name": "TUNINGL", - "size": 3, - "sections": [ - "SCHEDULE" - ], - "records": [ - [ - { - "name": "TSINIT", - "value_type": "DOUBLE", - "dimension": "Time", - "default": 1 - }, - { - "name": "TSMAXZ", - "value_type": "DOUBLE", - "dimension": "Time", - "default": 365 - }, - { - "name": "TSMINZ", - "value_type": "DOUBLE", - "dimension": "Time", - "default": 0.1 - }, - { - "name": "TSMCHP", - "value_type": "DOUBLE", - "dimension": "Time", - "default": 0.15 - }, - { - "name": "TSFMAX", - "value_type": "DOUBLE", - "default": 3 - }, - { - "name": "TSFMIN", - "value_type": "DOUBLE", - "default": 0.3 - }, - { - "name": "TSFCNV", - "value_type": "DOUBLE", - "default": 0.1 - }, - { - "name": "TFDIFF", - "value_type": "DOUBLE", - "default": 1.25 - }, - { - "name": "THRUPT", - "value_type": "DOUBLE", - "default": 1e+20 - }, - { - "name": "TMAXWC", - "value_type": "DOUBLE", - "dimension": "Time" - } - ], - [ - { - "name": "TRGTTE", - "value_type": "DOUBLE", - "default": 0.1 - }, - { - "name": "TRGCNV", - "value_type": "DOUBLE", - "default": 0.001 - }, - { - "name": "TRGMBE", - "value_type": "DOUBLE", - "default": 1e-07 - }, - { - "name": "TRGLCV", - "value_type": "DOUBLE", - "default": 0.0001 - }, - { - "name": "XXXTTE", - "value_type": "DOUBLE", - "default": 10 - }, - { - "name": "XXXCNV", - "value_type": "DOUBLE", - "default": 0.01 - }, - { - "name": "XXXMBE", - "value_type": "DOUBLE", - "default": 1e-06 - }, - { - "name": "XXXLCV", - "value_type": "DOUBLE", - "default": 0.001 - }, - { - "name": "XXXWFL", - "value_type": "DOUBLE", - "default": 0.001 - }, - { - "name": "TRGFIP", - "value_type": "DOUBLE", - "default": 0.025 - }, - { - "name": "TRGSFT", - "value_type": "DOUBLE" - }, - { - "name": "THIONX", - "value_type": "DOUBLE", - "default": 0.01 - }, - { - "name": "TRWGHT", - "value_type": "INT", - "default": 1 - } - ], - [ - { - "name": "NEWTMX", - "value_type": "INT", - "default": 12 - }, - { - "name": "NEWTMN", - "value_type": "INT", - "default": 1 - }, - { - "name": "LITMAX", - "value_type": "INT", - "default": 25 - }, - { - "name": "LITMIN", - "value_type": "INT", - "default": 1 - }, - { - "name": "MXWSIT", - "value_type": "INT", - "default": 8 - }, - { - "name": "MXWPIT", - "value_type": "INT", - "default": 8 - }, - { - "name": "DDPLIM", - "value_type": "DOUBLE", - "dimension": "Pressure", - "default": 1000000 - }, - { - "name": "DDSLIM", - "value_type": "DOUBLE", - "default": 1000000 - }, - { - "name": "TRGDPR", - "value_type": "DOUBLE", - "dimension": "Pressure", - "default": 1000000 - }, - { - "name": "XXXDPR", - "value_type": "DOUBLE", - "dimension": "Pressure" - } - ] - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TUNINGS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TUNINGS deleted file mode 100644 index a5dacca351..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TUNINGS +++ /dev/null @@ -1,191 +0,0 @@ -{ - "name": "TUNINGS", - "size": 4, - "sections": [ - "SCHEDULE" - ], - "records": [ - [ - { - "name": "LGR", - "value_type": "STRING" - } - ], - [ - { - "name": "TSINIT", - "value_type": "DOUBLE", - "dimension": "Time", - "default": 1 - }, - { - "name": "TSMAXZ", - "value_type": "DOUBLE", - "dimension": "Time", - "default": 365 - }, - { - "name": "TSMINZ", - "value_type": "DOUBLE", - "dimension": "Time", - "default": 0.1 - }, - { - "name": "TSMCHP", - "value_type": "DOUBLE", - "dimension": "Time", - "default": 0.15 - }, - { - "name": "TSFMAX", - "value_type": "DOUBLE", - "default": 3 - }, - { - "name": "TSFMIN", - "value_type": "DOUBLE", - "default": 0.3 - }, - { - "name": "TSFCNV", - "value_type": "DOUBLE", - "default": 0.1 - }, - { - "name": "TFDIFF", - "value_type": "DOUBLE", - "default": 1.25 - }, - { - "name": "THRUPT", - "value_type": "DOUBLE", - "default": 1e+20 - }, - { - "name": "TMAXWC", - "value_type": "DOUBLE", - "dimension": "Time" - } - ], - [ - { - "name": "TRGTTE", - "value_type": "DOUBLE", - "default": 0.1 - }, - { - "name": "TRGCNV", - "value_type": "DOUBLE", - "default": 0.001 - }, - { - "name": "TRGMBE", - "value_type": "DOUBLE", - "default": 1e-07 - }, - { - "name": "TRGLCV", - "value_type": "DOUBLE", - "default": 0.0001 - }, - { - "name": "XXXTTE", - "value_type": "DOUBLE", - "default": 10 - }, - { - "name": "XXXCNV", - "value_type": "DOUBLE", - "default": 0.01 - }, - { - "name": "XXXMBE", - "value_type": "DOUBLE", - "default": 1e-06 - }, - { - "name": "XXXLCV", - "value_type": "DOUBLE", - "default": 0.001 - }, - { - "name": "XXXWFL", - "value_type": "DOUBLE", - "default": 0.001 - }, - { - "name": "TRGFIP", - "value_type": "DOUBLE", - "default": 0.025 - }, - { - "name": "TRGSFT", - "value_type": "DOUBLE" - }, - { - "name": "THIONX", - "value_type": "DOUBLE", - "default": 0.01 - }, - { - "name": "TRWGHT", - "value_type": "INT", - "default": 1 - } - ], - [ - { - "name": "NEWTMX", - "value_type": "INT", - "default": 12 - }, - { - "name": "NEWTMN", - "value_type": "INT", - "default": 1 - }, - { - "name": "LITMAX", - "value_type": "INT", - "default": 25 - }, - { - "name": "LITMIN", - "value_type": "INT", - "default": 1 - }, - { - "name": "MXWSIT", - "value_type": "INT", - "default": 8 - }, - { - "name": "MXWPIT", - "value_type": "INT", - "default": 8 - }, - { - "name": "DDPLIM", - "value_type": "DOUBLE", - "dimension": "Pressure", - "default": 1000000 - }, - { - "name": "DDSLIM", - "value_type": "DOUBLE", - "default": 1000000 - }, - { - "name": "TRGDPR", - "value_type": "DOUBLE", - "dimension": "Pressure", - "default": 1000000 - }, - { - "name": "XXXDPR", - "value_type": "DOUBLE", - "dimension": "Pressure" - } - ] - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TVDP b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TVDP deleted file mode 100644 index 1dfeddfaea..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TVDP +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "TVDP", - "sections": [ - "SOLUTION" - ], - "deck_name_regex": "TVDP.+", - "size": { - "keyword": "EQLDIMS", - "item": "NTTRVD" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "Length", - "1" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TZONE b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TZONE deleted file mode 100644 index 7855bdfc85..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/T/TZONE +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "TZONE", - "sections": [ - "PROPS" - ], - "size": 1, - "items": [ - { - "name": "OIL_SWITCH", - "value_type": "STRING" - }, - { - "name": "WATER_SWITCH", - "value_type": "STRING" - }, - { - "name": "GAS_SWITCH", - "value_type": "STRING" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/U/UDADIMS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/U/UDADIMS deleted file mode 100644 index 3217a86a81..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/U/UDADIMS +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "UDADIMS", - "sections": [ - "RUNSPEC" - ], - "size": 1, - "items": [ - { - "name": "NUM_UDQ_REPLACE", - "value_type": "INT", - "default": 0 - }, - { - "name": "IGNORED", - "value_type": "INT", - "default": 0 - }, - { - "name": "TOTAL_UDQ_UNIQUE", - "value_type": "INT", - "default": 100 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/U/UDQ b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/U/UDQ deleted file mode 100644 index e6fcb62549..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/U/UDQ +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "UDQ", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "ACTION", - "value_type": "RAW_STRING" - }, - { - "name": "QUANTITY", - "value_type": "STRING" - }, - { - "name": "DATA", - "value_type": "RAW_STRING", - "size_type": "ALL" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/U/UDQDIMS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/U/UDQDIMS deleted file mode 100644 index edd69e2d01..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/U/UDQDIMS +++ /dev/null @@ -1,64 +0,0 @@ -{ - "name": "UDQDIMS", - "sections": [ - "RUNSPEC" - ], - "size": 1, - "items": [ - { - "name": "MAX_FUNCTIONS", - "value_type": "INT", - "default": 16 - }, - { - "name": "MAX_ITEMS", - "value_type": "INT", - "default": 16 - }, - { - "name": "MAX_CONNECTIONS", - "value_type": "INT", - "default": 0 - }, - { - "name": "MAX_FIELDS", - "value_type": "INT", - "default": 0 - }, - { - "name": "MAX_GROUP", - "value_type": "INT", - "default": 0 - }, - { - "name": "MAX_REGION", - "value_type": "INT", - "default": 0 - }, - { - "name": "MAX_SEGMENT", - "value_type": "INT", - "default": 0 - }, - { - "name": "MAX_WELL", - "value_type": "INT", - "default": 0 - }, - { - "name": "MAX_AQUIFER", - "value_type": "INT", - "default": 0 - }, - { - "name": "MAX_BLOCK", - "value_type": "INT", - "default": 0 - }, - { - "name": "RESTART_NEW_SEED", - "value_type": "STRING", - "default": "N" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/U/UDQPARAM b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/U/UDQPARAM deleted file mode 100644 index e94c70db1c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/U/UDQPARAM +++ /dev/null @@ -1,29 +0,0 @@ -{ - "name": "UDQPARAM", - "sections": [ - "RUNSPEC" - ], - "size": 1, - "items": [ - { - "name": "RANDOM_SEED", - "value_type": "INT", - "default": 1 - }, - { - "name": "RANGE", - "value_type": "DOUBLE", - "default": 1e+20 - }, - { - "name": "UNDEFINED_VALUE", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "CMP_EPSILON", - "value_type": "DOUBLE", - "default": 0.0001 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/U/UDT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/U/UDT deleted file mode 100644 index 69d6078629..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/U/UDT +++ /dev/null @@ -1,8 +0,0 @@ -{ - "name": "UDT", - "sections": [ - "SCHEDULE" - ], - "comment0": "This is a keyword that is not in use.", - "comment1": "If this keyword is in the eclipse file, the parser will parse the file, but the deck will not contain any UDT keyword." -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/U/UDTDIMS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/U/UDTDIMS deleted file mode 100644 index 4bb72ad0ec..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/U/UDTDIMS +++ /dev/null @@ -1,29 +0,0 @@ -{ - "name": "UDTDIMS", - "sections": [ - "RUNSPEC" - ], - "size": 1, - "items": [ - { - "name": "MAX_TABLES", - "value_type": "INT", - "default": 0 - }, - { - "name": "MAX_ROWS", - "value_type": "INT", - "default": 0 - }, - { - "name": "MAX_INTERPOLATION_POINTS", - "value_type": "INT", - "default": 0 - }, - { - "name": "MAX_DIMENSIONS", - "value_type": "INT", - "default": 0 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/U/UNCODHMD b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/U/UNCODHMD deleted file mode 100644 index f22c4a3f29..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/U/UNCODHMD +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "UNCODHMD", - "sections": [ - "RUNSPEC" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/U/UNIFIN b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/U/UNIFIN deleted file mode 100644 index 7a22b3ac39..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/U/UNIFIN +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "UNIFIN", - "sections": [ - "RUNSPEC" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/U/UNIFOUT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/U/UNIFOUT deleted file mode 100644 index 7012e1f5fb..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/U/UNIFOUT +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "UNIFOUT", - "sections": [ - "RUNSPEC" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/U/UNIFOUTS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/U/UNIFOUTS deleted file mode 100644 index 091e790c4e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/U/UNIFOUTS +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "UNIFOUTS", - "sections": [ - "RUNSPEC" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/U/UNIFSAVE b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/U/UNIFSAVE deleted file mode 100644 index a2ad0a82c5..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/U/UNIFSAVE +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "UNIFSAVE", - "sections": [ - "RUNSPEC" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/U/USECUPL b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/U/USECUPL deleted file mode 100644 index 0b018f59db..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/U/USECUPL +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "USECUPL", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "BASE", - "value_type": "STRING" - }, - { - "name": "FMT", - "value_type": "STRING" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/U/USEFLUX b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/U/USEFLUX deleted file mode 100644 index 49c26cef70..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/U/USEFLUX +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "USEFLUX", - "sections": [ - "GRID" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/U/USENOFLO b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/U/USENOFLO deleted file mode 100644 index 5d8894149d..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/U/USENOFLO +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "USENOFLO", - "sections": [ - "GRID" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/DFLOWR b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/DFLOWR deleted file mode 100644 index b12f2f4c3b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/DFLOWR +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "VDFLOWR", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTSFUN" - }, - "items": [ - { - "name": "BETA", - "value_type": "DOUBLE" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VAPOIL b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VAPOIL deleted file mode 100644 index 807aecc2c4..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VAPOIL +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "VAPOIL", - "sections": [ - "RUNSPEC" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VAPPARS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VAPPARS deleted file mode 100644 index 7c40a3b718..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VAPPARS +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "VAPPARS", - "sections": [ - "SOLUTION", - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "OIL_VAP_PROPENSITY", - "value_type": "DOUBLE" - }, - { - "name": "OIL_DENSITY_PROPENSITY", - "value_type": "DOUBLE" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VDFLOW b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VDFLOW deleted file mode 100644 index ee3a74845c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VDFLOW +++ /dev/null @@ -1,13 +0,0 @@ -{ - "name": "VDFLOW", - "sections": [ - "PROPS" - ], - "size": 1, - "items": [ - { - "name": "BETA", - "value_type": "DOUBLE" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VDFLOWR b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VDFLOWR deleted file mode 100644 index b12f2f4c3b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VDFLOWR +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "VDFLOWR", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTSFUN" - }, - "items": [ - { - "name": "BETA", - "value_type": "DOUBLE" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VE b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VE deleted file mode 100644 index e8397faba8..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VE +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "VE", - "sections": [ - "RUNSPEC" - ], - "size": 1, - "items": [ - { - "name": "MODEL_TYPE", - "value_type": "STRING", - "default": "NOCOMP" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VEDEBUG b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VEDEBUG deleted file mode 100644 index 2bcc79c114..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VEDEBUG +++ /dev/null @@ -1,43 +0,0 @@ -{ - "name": "VEDEBUG", - "sections": [ - "GRID" - ], - "size": 1, - "items": [ - { - "name": "I1", - "value_type": "INT" - }, - { - "name": "I2", - "value_type": "INT" - }, - { - "name": "J1", - "value_type": "INT" - }, - { - "name": "J2", - "value_type": "INT" - }, - { - "name": "K1", - "value_type": "INT" - }, - { - "name": "K2", - "value_type": "INT" - }, - { - "name": "DEBUG_LEVEL", - "value_type": "INT", - "default": 0 - }, - { - "name": "LGR", - "value_type": "STRING", - "default": " " - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VEFIN b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VEFIN deleted file mode 100644 index 9a5ec0b31c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VEFIN +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "VEFIN", - "sections": [ - "GRID" - ], - "size": 1, - "items": [ - { - "name": "VE", - "value_type": "STRING", - "default": "NO" - }, - { - "name": "NVEPT", - "value_type": "INT", - "default": 0 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VEFRAC b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VEFRAC deleted file mode 100644 index 86c0ca913e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VEFRAC +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "VEFRAC", - "sections": [ - "PROPS" - ], - "size": 1, - "items": [ - { - "name": "FRAC", - "value_type": "DOUBLE", - "default": 10 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VEFRACP b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VEFRACP deleted file mode 100644 index 0011f160da..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VEFRACP +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "VEFRACP", - "sections": [ - "PROPS" - ], - "size": 1, - "items": [ - { - "name": "FRAC", - "value_type": "DOUBLE", - "default": 1 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VEFRACPV b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VEFRACPV deleted file mode 100644 index 93b2474325..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VEFRACPV +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "VEFRACPV", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VEFRACV b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VEFRACV deleted file mode 100644 index 006a9a5908..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VEFRACV +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "VEFRACV", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VFPCHK b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VFPCHK deleted file mode 100644 index bdda572300..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VFPCHK +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "VFPCHK", - "sections": [ - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "BHP_LIMIT", - "value_type": "DOUBLE", - "default": 10000000000, - "dimension": "Pressure" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VFPIDIMS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VFPIDIMS deleted file mode 100644 index c8e834b45b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VFPIDIMS +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "VFPIDIMS", - "sections": [ - "RUNSPEC" - ], - "size": 1, - "items": [ - { - "name": "MAX_FLOW_TABLE", - "value_type": "INT", - "default": 0 - }, - { - "name": "MAX_THP_TABLE", - "value_type": "INT", - "default": 0 - }, - { - "name": "MAX_INJ_VFP_TABLE", - "value_type": "INT", - "default": 0 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VFPINJ b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VFPINJ deleted file mode 100644 index b30756e48b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VFPINJ +++ /dev/null @@ -1,63 +0,0 @@ -{ - "name": "VFPINJ", - "sections": [ - "SCHEDULE" - ], - "size": "UNKNOWN", - "records": [ - [ - { - "name": "TABLE", - "value_type": "INT" - }, - { - "name": "DATUM_DEPTH", - "value_type": "DOUBLE", - "dimension": "Length" - }, - { - "name": "RATE_TYPE", - "value_type": "STRING" - }, - { - "name": "PRESSURE_DEF", - "value_type": "STRING", - "default": "THP" - }, - { - "name": "UNITS", - "value_type": "STRING" - }, - { - "name": "BODY_DEF", - "value_type": "STRING", - "default": "BHP" - } - ], - [ - { - "name": "FLOW_VALUES", - "value_type": "DOUBLE", - "size_type": "ALL" - } - ], - [ - { - "name": "THP_VALUES", - "value_type": "DOUBLE", - "size_type": "ALL" - } - ], - [ - { - "name": "THP_INDEX", - "value_type": "INT" - }, - { - "name": "VALUES", - "value_type": "DOUBLE", - "size_type": "ALL" - } - ] - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VFPPDIMS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VFPPDIMS deleted file mode 100644 index 896dc3686d..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VFPPDIMS +++ /dev/null @@ -1,39 +0,0 @@ -{ - "name": "VFPPDIMS", - "sections": [ - "RUNSPEC" - ], - "size": 1, - "items": [ - { - "name": "MAX_FLOW_TABLE", - "value_type": "INT", - "default": 0 - }, - { - "name": "MAX_THP_TABLE", - "value_type": "INT", - "default": 0 - }, - { - "name": "MAX_WCT_TABLE", - "value_type": "INT", - "default": 0 - }, - { - "name": "MAX_GCT_TABLE", - "value_type": "INT", - "default": 0 - }, - { - "name": "MAX_ALQ_TABLE", - "value_type": "INT", - "default": 0 - }, - { - "name": "MAX_PROD_VFP_TABLE", - "value_type": "INT", - "default": 0 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VFPPROD b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VFPPROD deleted file mode 100644 index b68ccd3eb8..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VFPPROD +++ /dev/null @@ -1,108 +0,0 @@ -{ - "name": "VFPPROD", - "sections": [ - "SCHEDULE" - ], - "size": "UNKNOWN", - "records": [ - [ - { - "name": "TABLE", - "value_type": "INT" - }, - { - "name": "DATUM_DEPTH", - "value_type": "DOUBLE", - "dimension": "Length" - }, - { - "name": "RATE_TYPE", - "value_type": "STRING" - }, - { - "name": "WFR", - "value_type": "STRING" - }, - { - "name": "GFR", - "value_type": "STRING" - }, - { - "name": "PRESSURE_DEF", - "value_type": "STRING", - "default": "THP" - }, - { - "name": "ALQ_DEF", - "value_type": "STRING" - }, - { - "name": "UNITS", - "value_type": "STRING" - }, - { - "name": "BODY_DEF", - "value_type": "STRING", - "default": "BHP" - } - ], - [ - { - "name": "FLOW_VALUES", - "value_type": "DOUBLE", - "size_type": "ALL" - } - ], - [ - { - "name": "THP_VALUES", - "value_type": "DOUBLE", - "size_type": "ALL" - } - ], - [ - { - "name": "WFR_VALUES", - "value_type": "DOUBLE", - "size_type": "ALL" - } - ], - [ - { - "name": "GFR_VALUES", - "value_type": "DOUBLE", - "size_type": "ALL" - } - ], - [ - { - "name": "ALQ_VALUES", - "value_type": "DOUBLE", - "size_type": "ALL" - } - ], - [ - { - "name": "THP_INDEX", - "value_type": "INT" - }, - { - "name": "WFR_INDEX", - "value_type": "INT" - }, - { - "name": "GFR_INDEX", - "value_type": "INT" - }, - { - "name": "ALQ_INDEX", - "value_type": "INT" - }, - { - "name": "VALUES", - "value_type": "DOUBLE", - "size_type": "ALL" - } - ] - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VFPTABL b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VFPTABL deleted file mode 100644 index 599b25cfca..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VFPTABL +++ /dev/null @@ -1,13 +0,0 @@ -{ - "name": "VFPTABL", - "sections": [ - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "METHOD", - "value_type": "INT" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VISAGE b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VISAGE deleted file mode 100644 index e0b449a9fc..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VISAGE +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "VISAGE", - "sections": [ - "RUNSPEC" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VISCD b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VISCD deleted file mode 100644 index 11c76fe367..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VISCD +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "VISCD", - "sections": [ - "RUNSPEC" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VISCREF b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VISCREF deleted file mode 100644 index 8af7def5c8..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VISCREF +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "VISCREF", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTPVT" - }, - "items": [ - { - "name": "REFERENCE_PRESSURE", - "value_type": "DOUBLE", - "dimension": "Pressure" - }, - { - "name": "REFERENCE_RS", - "value_type": "DOUBLE", - "dimension": "GasDissolutionFactor" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VISDATES b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VISDATES deleted file mode 100644 index 8ad35e1d42..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VISDATES +++ /dev/null @@ -1,25 +0,0 @@ -{ - "name": "VISDATES", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "DAY", - "value_type": "INT" - }, - { - "name": "MONTH", - "value_type": "STRING" - }, - { - "name": "YEAR", - "value_type": "INT" - }, - { - "name": "TIMESTAMP", - "value_type": "STRING", - "default": "00:00:00" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VISOPTS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VISOPTS deleted file mode 100644 index a75d8cf6c7..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/V/VISOPTS +++ /dev/null @@ -1,47 +0,0 @@ -{ - "name": "VISOPTS", - "sections": [ - "SOLUTION" - ], - "items": [ - { - "name": "INIT_RUN", - "value_type": "STRING", - "default": "NO" - }, - { - "name": "EXIT", - "value_type": "STRING", - "default": "NO" - }, - { - "name": "ACTIVE", - "value_type": "STRING", - "default": "NO" - }, - { - "name": "REL_TOL", - "value_type": "DOUBLE", - "default": 0.05 - }, - { - "name": "UNUSED", - "value_type": "STRING" - }, - { - "name": "RETAIN_RESTART_FREQUENCY", - "value_type": "STRING", - "default": "NO" - }, - { - "name": "RETAIN_RESTART_CONTENT", - "value_type": "STRING", - "default": "NO" - }, - { - "name": "ERROR", - "value_type": "STRING", - "default": "ERROR" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WAGHYSTR b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WAGHYSTR deleted file mode 100644 index 0d4eecd9c9..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WAGHYSTR +++ /dev/null @@ -1,52 +0,0 @@ -{ - "name": "WAGHYSTR", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTSFUN" - }, - "description": "The EQUIL item is used when equilibrationg the model. The item should consist of one record for each PVT region", - "items": [ - { - "name": "LANDS_PARAMETER", - "value_type": "DOUBLE" - }, - { - "name": "SECONDARY_DRAINAGE_REDUCTION", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "GAS_MODEL", - "value_type": "STRING", - "default": "YES" - }, - { - "name": "RES_OIL", - "value_type": "STRING", - "default": "YES" - }, - { - "name": "WATER_MODEL", - "value_type": "STRING", - "default": "YES" - }, - { - "name": "IMB_LINEAR_FRACTION", - "value_type": "DOUBLE", - "default": 0.1 - }, - { - "name": "THREEPHASE_SAT_LIMIT", - "value_type": "DOUBLE", - "default": 0.001 - }, - { - "name": "RES_OIL_MOD_FRACTION", - "value_type": "DOUBLE", - "default": 1 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WAITBAL b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WAITBAL deleted file mode 100644 index ee593cd0e4..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WAITBAL +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "WAITBAL", - "sections": [ - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "WAIT_NETWORK_BALANCE", - "value_type": "STRING", - "default": "NO" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WALKALIN b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WALKALIN deleted file mode 100644 index a40583b3dd..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WALKALIN +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "WALKALIN", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "ALKALINE_CONCENTRAION", - "value_type": "UDA", - "dimension": "Mass/LiquidSurfaceVolume" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WALQCALC b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WALQCALC deleted file mode 100644 index adb5f9ccea..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WALQCALC +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "WALQCALC", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "ALQ_DEF", - "value_type": "STRING", - "default": "NONE" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WAPI b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WAPI deleted file mode 100644 index c6f780ed11..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WAPI +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "WAPI", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "API", - "value_type": "UDA" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WARN b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WARN deleted file mode 100644 index 06a0ca2ebc..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WARN +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "WARN", - "sections": [ - "RUNSPEC", - "GRID", - "EDIT", - "PROPS", - "REGIONS", - "SOLUTION", - "SUMMARY", - "SCHEDULE" - ], - "size": 0 -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WATER b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WATER deleted file mode 100644 index e393b3e462..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WATER +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "WATER", - "sections": [ - "RUNSPEC" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WATVISCT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WATVISCT deleted file mode 100644 index cbe19076b2..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WATVISCT +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "WATVISCT", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTPVT" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "Temperature", - "Viscosity" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WBHGLR b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WBHGLR deleted file mode 100644 index 44a668b067..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WBHGLR +++ /dev/null @@ -1,50 +0,0 @@ -{ - "name": "WBHGLR", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "MAX_GLR_CUTBACK", - "value_type": "DOUBLE", - "default": 1e+20, - "dimension": "1" - }, - { - "name": "MIN_GLR_CUTBACK_REVERSE", - "value_type": "DOUBLE", - "dimension": "1", - "default": 1e+20 - }, - { - "name": "RATE_CUTBACK_FACTOR", - "value_type": "DOUBLE", - "default": 1 - }, - { - "name": "PHASE", - "value_type": "STRING", - "default": "RESV" - }, - { - "name": "MAX_GLR_ELIMIT", - "value_type": "DOUBLE", - "default": 1e+20, - "dimension": "1" - }, - { - "name": "WORKOVER_ACTION", - "value_type": "STRING", - "default": "NONE" - }, - { - "name": "WORKOVER_REMOVE_CUTBACKS", - "value_type": "STRING", - "default": "NO" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WBOREVOL b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WBOREVOL deleted file mode 100644 index e02c73c8a5..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WBOREVOL +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "WBOREVOL", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "WELLBORE_VOL", - "value_type": "DOUBLE", - "default": 1e-05, - "dimension": "Length*Length*Length" - }, - { - "name": "START_BHP", - "value_type": "DOUBLE", - "dimension": "Pressure" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WCALCVAL b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WCALCVAL deleted file mode 100644 index fcf7817c10..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WCALCVAL +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "WCALCVAL", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "CALORIFIC_GAS_VALUE", - "value_type": "DOUBLE", - "dimension": "Energy/GasSurfaceVolume" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WCONHIST b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WCONHIST deleted file mode 100644 index c012f17e5b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WCONHIST +++ /dev/null @@ -1,69 +0,0 @@ -{ - "name": "WCONHIST", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "STATUS", - "value_type": "STRING", - "default": "OPEN" - }, - { - "name": "CMODE", - "value_type": "STRING" - }, - { - "name": "ORAT", - "value_type": "UDA", - "default": 0, - "dimension": "LiquidSurfaceVolume/Time" - }, - { - "name": "WRAT", - "value_type": "UDA", - "default": 0, - "dimension": "LiquidSurfaceVolume/Time" - }, - { - "name": "GRAT", - "value_type": "UDA", - "default": 0, - "dimension": "GasSurfaceVolume/Time" - }, - { - "name": "VFP_TABLE", - "value_type": "INT", - "default": 0, - "comment": "The default is a state variable" - }, - { - "name": "LIFT", - "value_type": "DOUBLE", - "default": 0, - "comment": "The default is a state variable" - }, - { - "name": "THP", - "value_type": "UDA", - "default": 0, - "dimension": "Pressure" - }, - { - "name": "BHP", - "value_type": "UDA", - "default": 0, - "dimension": "Pressure" - }, - { - "name": "NGLRAT", - "value_type": "DOUBLE", - "default": 0, - "dimension": "LiquidSurfaceVolume/Time" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WCONINJ b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WCONINJ deleted file mode 100644 index 10ad2735a4..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WCONINJ +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "WCONINJ", - "sections": [ - "SCHEDULE" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WCONINJE b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WCONINJE deleted file mode 100644 index fca6b7c972..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WCONINJE +++ /dev/null @@ -1,80 +0,0 @@ -{ - "name": "WCONINJE", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "TYPE", - "value_type": "STRING" - }, - { - "name": "STATUS", - "value_type": "STRING", - "default": "OPEN" - }, - { - "name": "CMODE", - "value_type": "STRING" - }, - { - "name": "RATE", - "value_type": "UDA" - }, - { - "name": "RESV", - "value_type": "UDA", - "dimension": "ReservoirVolume/Time" - }, - { - "name": "BHP", - "value_type": "UDA", - "dimension": "Pressure", - "default": 6895 - }, - { - "name": "THP", - "value_type": "UDA", - "dimension": "Pressure" - }, - { - "name": "VFP_TABLE", - "value_type": "INT", - "default": 0 - }, - { - "name": "VAPOIL_C", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "GAS_STEAM_RATIO", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "SURFACE_OIL_FRACTION", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "SURFACE_WATER_FRACTION", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "SURFACE_GAS_FRACTION", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "OIL_STEAM_RATIO", - "value_type": "DOUBLE", - "default": 0 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WCONINJH b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WCONINJH deleted file mode 100644 index 4017ec0fdc..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WCONINJH +++ /dev/null @@ -1,66 +0,0 @@ -{ - "name": "WCONINJH", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "TYPE", - "value_type": "STRING" - }, - { - "name": "STATUS", - "value_type": "STRING", - "default": "OPEN" - }, - { - "name": "RATE", - "value_type": "DOUBLE", - "dimension": "ContextDependent" - }, - { - "name": "BHP", - "value_type": "DOUBLE", - "dimension": "Pressure" - }, - { - "name": "THP", - "value_type": "DOUBLE", - "dimension": "Pressure" - }, - { - "name": "VFP_TABLE", - "value_type": "INT", - "default": 0 - }, - { - "name": "VAPOIL_C", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "SURFACE_OIL_FRACTION", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "SURFACE_WATER_FRACTION", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "SURFACE_GAS_FRACTION", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "CMODE", - "value_type": "STRING", - "default": "RATE" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WCONINJP b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WCONINJP deleted file mode 100644 index 0973d6d1fc..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WCONINJP +++ /dev/null @@ -1,74 +0,0 @@ -{ - "name": "WCONINJP", - "sections": [ - "SCHEDULE" - ], - "records": [ - [ - { - "name": "PATTERN_WELL", - "value_type": "STRING" - }, - { - "name": "INJECTOR_TYPE", - "value_type": "STRING" - }, - { - "name": "STATUS", - "value_type": "STRING", - "default": "OPEN" - }, - { - "name": "BHP_MAX", - "value_type": "DOUBLE", - "default": 6895, - "dimension": "Pressure" - }, - { - "name": "THP_MAX", - "value_type": "DOUBLE", - "dimensione": "Pressure" - }, - { - "name": "VFP_TABLE", - "value_type": "INT", - "default": 0 - }, - { - "name": "VOIDAGE_TARGET_MULTIPLIER", - "value_type": "DOUBLE", - "default": 1 - }, - { - "name": "OIL_FRACTION", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "WATER_FRACTION", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "GAS_FRACTION", - "value_type": "DOUBLE", - "default": 0 - } - ], - [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "PROD_FRACTION", - "value_type": "DOUBLE" - }, - { - "name": "FIPNUM_VALUE", - "value_type": "INT", - "default": 0 - } - ] - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WCONPROD b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WCONPROD deleted file mode 100644 index 52c6c91efc..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WCONPROD +++ /dev/null @@ -1,105 +0,0 @@ -{ - "name": "WCONPROD", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "STATUS", - "value_type": "STRING", - "default": "OPEN" - }, - { - "name": "CMODE", - "value_type": "STRING" - }, - { - "name": "ORAT", - "value_type": "UDA", - "default": 0, - "dimension": "LiquidSurfaceVolume/Time" - }, - { - "name": "WRAT", - "value_type": "UDA", - "default": 0, - "dimension": "LiquidSurfaceVolume/Time" - }, - { - "name": "GRAT", - "value_type": "UDA", - "default": 0, - "dimension": "GasSurfaceVolume/Time" - }, - { - "name": "LRAT", - "value_type": "UDA", - "default": 0, - "dimension": "LiquidSurfaceVolume/Time" - }, - { - "name": "RESV", - "value_type": "UDA", - "default": 0, - "dimension": "LiquidSurfaceVolume/Time" - }, - { - "name": "BHP", - "value_type": "UDA", - "default": 1.01325, - "dimension": "Pressure" - }, - { - "name": "THP", - "value_type": "UDA", - "default": 0, - "dimension": "Pressure" - }, - { - "name": "VFP_TABLE", - "value_type": "INT", - "default": 0 - }, - { - "name": "ALQ", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "E300_ITEM13", - "value_type": "DOUBLE" - }, - { - "name": "E300_ITEM14", - "value_type": "DOUBLE" - }, - { - "name": "E300_ITEM15", - "value_type": "DOUBLE" - }, - { - "name": "E300_ITEM16", - "value_type": "DOUBLE" - }, - { - "name": "E300_ITEM17", - "value_type": "DOUBLE" - }, - { - "name": "E300_ITEM18", - "value_type": "DOUBLE" - }, - { - "name": "E300_ITEM19", - "value_type": "DOUBLE" - }, - { - "name": "E300_ITEM20", - "value_type": "DOUBLE" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WCUTBACK b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WCUTBACK deleted file mode 100644 index 41df039d43..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WCUTBACK +++ /dev/null @@ -1,70 +0,0 @@ -{ - "name": "WCUTBACK", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "WCT_LIMIT", - "value_type": "DOUBLE" - }, - { - "name": "GOR_LIMIT", - "value_type": "DOUBLE" - }, - { - "name": "WGR_LIMIT", - "value_type": "DOUBLE" - }, - { - "name": "RATE_CUTBACK", - "value_type": "DOUBLE", - "default": 1 - }, - { - "name": "PHASE", - "value_type": "STRING" - }, - { - "name": "PRESSURE_LIMIT", - "value_type": "DOUBLE", - "default": 0, - "dimension": "Pressure" - }, - { - "name": "PRESSURE_LIMIT_REVERSE", - "value_type": "DOUBLE", - "default": 0, - "dimension": "Pressure" - }, - { - "name": "WCT_LIMIT_REVERSE", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "GOR_LIMIT_REVERSE", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "GLR_LIMIT_REVERSE", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "WGR_LIMIT_REVERSE", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "WORKOVER_REMOVE", - "value_type": "STRING", - "default": "NO" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WCUTBACT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WCUTBACT deleted file mode 100644 index 5a21e0e193..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WCUTBACT +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "WCUTBACT", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "RATE_CUTBACK", - "value_type": "DOUBLE", - "default": 1 - }, - { - "name": "PHASE", - "value_type": "STRING" - }, - { - "name": "WORKOVER_REMOVE", - "value_type": "STRING", - "default": "NO" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WCYCLE b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WCYCLE deleted file mode 100644 index e0136a1686..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WCYCLE +++ /dev/null @@ -1,41 +0,0 @@ -{ - "name": "WCYCLE", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "ON_TIME", - "value_type": "DOUBLE", - "default": 0, - "dimension": "Time" - }, - { - "name": "OFF_TIME", - "value_type": "DOUBLE", - "default": 0, - "dimension": "Time" - }, - { - "name": "START_TIME", - "value_type": "DOUBLE", - "default": 0, - "dimension": "Time" - }, - { - "name": "MAX_TIMESTEP", - "value_type": "DOUBLE", - "default": 0, - "dimension": "Time" - }, - { - "name": "CONTROLLED_TIMESTEP", - "value_type": "STRING", - "default": "NO" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WDFAC b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WDFAC deleted file mode 100644 index 2aca451c98..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WDFAC +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "WDFAC", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "DFACTOR", - "value_type": "DOUBLE", - "default": 0, - "dimension": "Time/GasSurfaceVolume" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WDFACCOR b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WDFACCOR deleted file mode 100644 index e4e8b822bb..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WDFACCOR +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "WDFACCOR", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELLNAME", - "value_type": "STRING" - }, - { - "name": "A", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "B", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "C", - "value_type": "DOUBLE", - "default": 0 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WDRILPRI b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WDRILPRI deleted file mode 100644 index 9e88751f67..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WDRILPRI +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "WDRILPRI", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "PRIORITY", - "value_type": "DOUBLE", - "default": -1 - }, - { - "name": "DRILLING_UNIT", - "value_type": "INT", - "default": 0 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WDRILRES b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WDRILRES deleted file mode 100644 index be3052fe08..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WDRILRES +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "WDRILRES", - "sections": [ - "SCHEDULE" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WDRILTIM b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WDRILTIM deleted file mode 100644 index 594e4d1b53..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WDRILTIM +++ /dev/null @@ -1,28 +0,0 @@ -{ - "name": "WDRILTIM", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "DRILL_TIME", - "value_type": "DOUBLE", - "dimension": "Time", - "default_value": 0 - }, - { - "name": "WORKOVER_CLOSE", - "value_type": "STRING", - "default_value": "NO" - }, - { - "name": "COMPARTMENT", - "value_type": "INT", - "default_value": 0 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WECON b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WECON deleted file mode 100644 index 740442fff5..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WECON +++ /dev/null @@ -1,90 +0,0 @@ -{ - "name": "WECON", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "MIN_OIL_PRODUCTION", - "value_type": "UDA", - "default": 0, - "dimension": "LiquidSurfaceVolume/Time" - }, - { - "name": "MIN_GAS_PRODUCTION", - "value_type": "UDA", - "default": 0, - "dimension": "GasSurfaceVolume/Time" - }, - { - "name": "MAX_WATER_CUT", - "value_type": "UDA", - "default": 0 - }, - { - "name": "MAX_GAS_OIL_RATIO", - "value_type": "UDA", - "default": 0 - }, - { - "name": "MAX_WATER_GAS_RATIO", - "value_type": "UDA", - "default": 0 - }, - { - "name": "WORKOVER_RATIO_LIMIT", - "value_type": "STRING", - "default": "NONE" - }, - { - "name": "END_RUN_FLAG", - "value_type": "STRING", - "default": "NO" - }, - { - "name": "FOLLOW_ON_WELL", - "value_type": "STRING", - "default": "'" - }, - { - "name": "LIMITED_QUANTITY", - "value_type": "STRING", - "default": "RATE" - }, - { - "name": "SECOND_MAX_WATER_CUT", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "WORKOVER_SECOND_WATER_CUT_LIMIT", - "value_type": "STRING" - }, - { - "name": "MAX_GAS_LIQUID_RATIO", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "MIN_LIQUID_PRODCUTION_RATE", - "value_type": "DOUBLE", - "default": 0, - "dimension": "LiquidSurfaceVolume/Time" - }, - { - "name": "MAX_TEMP", - "value_type": "DOUBLE", - "dimension": "Temperature" - }, - { - "name": "MIN_RES_FLUID_RATE", - "value_type": "DOUBLE", - "dimension": "ReservoirVolume/Time", - "default": 0 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WECONINJ b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WECONINJ deleted file mode 100644 index 73f3c87c1f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WECONINJ +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "WECONINJ", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "MIN_RATE", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "QUANTITY", - "value_type": "STRING", - "default": "RATE" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WECONT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WECONT deleted file mode 100644 index 1b41d4642c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WECONT +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "WECONT", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "WORKOVER", - "value_type": "STRING", - "default": "NONE" - }, - { - "name": "END_RUN_FLAG", - "value_type": "STRING", - "default": "NO" - }, - { - "name": "FOLLOW_ON_WELL", - "value_type": "STRING" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WEFAC b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WEFAC deleted file mode 100644 index dbb7b3431d..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WEFAC +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "WEFAC", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELLNAME", - "value_type": "STRING" - }, - { - "name": "EFFICIENCY_FACTOR", - "value_type": "DOUBLE", - "default": 1 - }, - { - "name": "EXTENDED_NETWORK_OPT", - "value_type": "STRING", - "default": "YES" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WELCNTL b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WELCNTL deleted file mode 100644 index ee84a92786..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WELCNTL +++ /dev/null @@ -1,20 +0,0 @@ -{ - "name": "WELCNTL", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "CMODE", - "value_type": "STRING" - }, - { - "name": "NEW_VALUE", - "value_type": "DOUBLE" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WELDEBUG b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WELDEBUG deleted file mode 100644 index f60d2daedd..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WELDEBUG +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "WELDEBUG", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "DEBUG_FLAG", - "value_type": "INT" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WELDRAW b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WELDRAW deleted file mode 100644 index 0713aa10c1..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WELDRAW +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "WELDRAW", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "MAX_DRAW", - "value_type": "UDA", - "dimension": "Pressure" - }, - { - "name": "PHASE", - "value_type": "STRING" - }, - { - "name": "USE_LIMIT", - "value_type": "STRING", - "default": "NO" - }, - { - "name": "GRID_BLOCKS", - "value_type": "STRING", - "default": "AVG" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WELEVNT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WELEVNT deleted file mode 100644 index 1e3426629d..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WELEVNT +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "WELEVNT", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "WPWEM_VALUE", - "value_type": "INT" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WELLDIMS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WELLDIMS deleted file mode 100644 index cf1727cc00..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WELLDIMS +++ /dev/null @@ -1,74 +0,0 @@ -{ - "name": "WELLDIMS", - "sections": [ - "RUNSPEC" - ], - "size": 1, - "items": [ - { - "name": "MAXWELLS", - "value_type": "INT", - "default": 0 - }, - { - "name": "MAXCONN", - "value_type": "INT", - "default": 0 - }, - { - "name": "MAXGROUPS", - "value_type": "INT", - "default": 0 - }, - { - "name": "MAX_GROUPSIZE", - "value_type": "INT", - "default": 0 - }, - { - "name": "MAX_STAGES", - "value_type": "INT", - "default": 5 - }, - { - "name": "MAX_STREAMS", - "value_type": "INT", - "default": 10 - }, - { - "name": "MAX_MIXTURES", - "value_type": "INT", - "default": 5 - }, - { - "name": "MAX_SEPARATORS", - "value_type": "INT", - "default": 4 - }, - { - "name": "MAX_MIXTURE_ITEMS", - "value_type": "INT", - "default": 3 - }, - { - "name": "MAX_COMPLETION_X", - "value_type": "INT", - "default": 0 - }, - { - "name": "MAX_WELLIST_PR_WELL", - "value_type": "INT", - "default": 1 - }, - { - "name": "MAX_DYNAMIC_WELLIST", - "value_type": "INT", - "default": 1 - }, - { - "name": "MAX_SECONDARY_WELLS", - "value_type": "INT", - "default": 1 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WELL_COMPLETION_PROBE b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WELL_COMPLETION_PROBE deleted file mode 100644 index afd07ae805..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WELL_COMPLETION_PROBE +++ /dev/null @@ -1,41 +0,0 @@ -{ - "name": "WELL_COMPLETION_PROBE", - "sections": [ - "SUMMARY" - ], - "deck_names": [ - "WOFRL", - "WOPRL", - "WOPTL", - "WOITL", - "WWFRL", - "WWPRL", - "WWPTL", - "WWIRL", - "WWITL", - "WGFRL", - "WGPRL", - "WGPTL", - "WLFRL", - "WLPTL", - "WVFRL", - "WVIRL", - "WVPTL", - "WVITL", - "WWCTL", - "WGORL", - "WOGRL", - "WWGRL", - "WGLRL" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "COMPLETION", - "value_type": "INT" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WELL_PROBE b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WELL_PROBE deleted file mode 100644 index 3096b8afc7..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WELL_PROBE +++ /dev/null @@ -1,238 +0,0 @@ -{ - "name": "WELL_PROBE", - "sections": [ - "SUMMARY" - ], - "comment": "Some keywords need to be suffixed by a number, some with the tracer name...", - "deck_names": [ - "WOPR", - "WOPRH", - "WOPRT", - "WOPRF", - "WOPRS", - "WOPT", - "WOPTH", - "WOPTF", - "WOPTS", - "WOIR", - "WOIRH", - "WOIRT", - "WOIT", - "WOITH", - "WOPP", - "WOPP2", - "WOPI", - "WOPI2", - "WOPGR", - "WOIGR", - "WWPR", - "WWPRH", - "WWPRT", - "WWPT", - "WWPTH", - "WWIR", - "WWIRH", - "WWIRT", - "WWIT", - "WWITH", - "WWPP", - "WWPP2", - "WWPI", - "WWIP", - "WWPI2", - "WWIP2", - "WWPGR", - "WWIGR", - "WWPIR", - "WGPR", - "WGPRH", - "WGPRT", - "WGPRF", - "WGPRS", - "WGPT", - "WGPTH", - "WGPTF", - "WGPTS", - "WGIR", - "WGIRH", - "WGIRT", - "WGIT", - "WGITH", - "WGPP", - "WGPP2", - "WGPPS", - "WGPPS2", - "WGPPF", - "WGPPF2", - "WGPI", - "WGIP", - "WGPI2", - "WGIP2", - "WGPGR", - "WGIGR", - "WGLIR", - "WGQ", - "WLPR", - "WLPRH", - "WLPRT", - "WLPT", - "WLPTH", - "WJPR", - "WJPRH", - "WJPRT", - "WJPT", - "WJPTH", - "WVPR", - "WVPRT", - "WVPT", - "WVPGR", - "WVIR", - "WVIRT", - "WVIT", - "WWCT", - "WWCTH", - "WGOR", - "WGORL", - "WGORH", - "WOGR", - "WOGRH", - "WWGR", - "WWGRH", - "WGLR", - "WGLRH", - "WBGLR", - "WBHP", - "WBHPH", - "WTHP", - "WTHPH", - "WPI", - "WBP", - "WBP4", - "WBP5", - "WBP9", - "WPI1", - "WPI4", - "WPI5", - "WPI9", - "WHD", - "WHDF", - "WSTAT", - "WMCTL", - "WMCON", - "WWVIR", - "WGVPR", - "WGVIR", - "WEPR", - "WEPT", - "WEFF", - "WEFFG", - "WALQ", - "WMVFP", - "WTHT", - "WMMW", - "WPWE0", - "WPWE1", - "WPWE2", - "WPWE3", - "WPWE4", - "WPWE5", - "WPWE6", - "WPWE7", - "WPWEM", - "WDRPR", - "WAPI", - "WSPR", - "WSPT", - "WSIR", - "WSIT", - "WSPC", - "WSIC", - "WTPRANI", - "WTPTANI", - "WTIRANI", - "WTITANI", - "WTPRCAT", - "WTPTCAT", - "WTIRCAT", - "WTITCAT", - "WTPCHEA", - "WTICHEA", - "WTPRHEA", - "WTPTHEA", - "WTIRHEA", - "WTITHEA", - "WTPR", - "WTPT", - "WTPC", - "WTIR", - "WTIT", - "WTIC", - "WTIRF", - "WTIRS", - "WTPRF", - "WTPRS", - "WTITF", - "WTITS", - "WTPTF", - "WTPTS", - "WTICF", - "WTICS", - "WTPCF", - "WTPCS", - "WMPR", - "WMPT", - "WMIR", - "WMIT", - "WTPRFOA", - "WTPTFOA", - "WTIRFOA", - "WTITFOA", - "WGDC", - "NGOPAS", - "WGPRFP", - "WTHPFP", - "WBHPFP", - "WGLIR", - "WOGLR", - "WGCV", - "WGQ", - "WEPR", - "WEPT", - "WEDC", - "WCPR", - "WCPC", - "WCPT", - "WCIR", - "WCIC", - "WCIT", - "WSPR", - "WSPT", - "WSIR", - "WSIT", - "WNPR", - "WNPT", - "WNIR", - "WNIT", - "WTPRSUR", - "WTPTSUR", - "WTIRSUR", - "WTITSUR", - "WTPRALK", - "WTPTALK", - "WTIRALK", - "WTITALK", - "WPIG", - "WPIW", - "WPIO", - "WPIL" - ], - "deck_name_regex": "WU.+|(WBHWC|WGFWC|WOFWC|WWFWC)[1-9][0-9]?|WTPR.+|WTPT.+|WTPC.+|WTIR.+|WTIT.+|WTIC.+", - "size": 1, - "items": [ - { - "name": "WELLS", - "value_type": "STRING", - "size_type": "ALL" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WELMOVEL b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WELMOVEL deleted file mode 100644 index 66165eb222..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WELMOVEL +++ /dev/null @@ -1,9 +0,0 @@ -{"name" : "WELMOVEL", -"sections" : ["SCHEDULE"], -"items" : [ -{"name" : "WELLNAME", "value_type" : "STRING"}, -{"name" : "LGRNAME", "value_type" : "STRING"}, -{"name" : "WELLHEAD_I", "value_type" : "INT"}, -{"name" : "WELLHEAD_J", "value_type" : "INT"}]} - - diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WELOPEN b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WELOPEN deleted file mode 100644 index 72c4738007..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WELOPEN +++ /dev/null @@ -1,37 +0,0 @@ -{ - "name": "WELOPEN", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "STATUS", - "value_type": "STRING", - "default": "OPEN" - }, - { - "name": "I", - "value_type": "INT" - }, - { - "name": "J", - "value_type": "INT" - }, - { - "name": "K", - "value_type": "INT" - }, - { - "name": "C1", - "value_type": "INT" - }, - { - "name": "C2", - "value_type": "INT" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WELOPENL b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WELOPENL deleted file mode 100644 index 344d874201..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WELOPENL +++ /dev/null @@ -1,41 +0,0 @@ -{ - "name": "WELOPENL", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "GRID", - "value_type": "STRING" - }, - { - "name": "STATUS", - "value_type": "STRING", - "default": "OPEN" - }, - { - "name": "I", - "value_type": "INT" - }, - { - "name": "J", - "value_type": "INT" - }, - { - "name": "K", - "value_type": "INT" - }, - { - "name": "C1", - "value_type": "INT" - }, - { - "name": "C2", - "value_type": "INT" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WELPI b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WELPI deleted file mode 100644 index ae6e30d426..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WELPI +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "WELPI", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL_NAME", - "value_type": "STRING" - }, - { - "name": "STEADY_STATE_PRODUCTIVITY_OR_INJECTIVITY_INDEX_VALUE", - "value_type": "DOUBLE" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WELPRI b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WELPRI deleted file mode 100644 index a917c3e93c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WELPRI +++ /dev/null @@ -1,32 +0,0 @@ -{ - "name": "WELPRI", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL_NAME", - "value_type": "STRING" - }, - { - "name": "PRI1", - "value_type": "INT", - "default": -1 - }, - { - "name": "SCALING1", - "value_type": "DOUBLE", - "default": 1 - }, - { - "name": "PRI2", - "value_type": "INT", - "default": -1 - }, - { - "name": "SCALING2", - "value_type": "DOUBLE", - "default": 1 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WELSEGS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WELSEGS deleted file mode 100644 index 6f3fb8c8f1..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WELSEGS +++ /dev/null @@ -1,117 +0,0 @@ -{ - "name": "WELSEGS", - "sections": [ - "SCHEDULE" - ], - "records": [ - [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "DEPTH", - "value_type": "DOUBLE", - "dimension": "Length" - }, - { - "name": "LENGTH", - "value_type": "DOUBLE", - "dimension": "Length", - "default": 0 - }, - { - "name": "WELLBORE_VOLUME", - "value_type": "DOUBLE", - "dimension": "Length*Length*Length", - "default": 1e-05 - }, - { - "name": "INFO_TYPE", - "value_type": "STRING" - }, - { - "name": "PRESSURE_COMPONENTS", - "value_type": "STRING", - "default": "HFA" - }, - { - "name": "FLOW_MODEL", - "value_type": "STRING", - "default": "HO" - }, - { - "name": "TOP_X", - "value_type": "DOUBLE", - "dimension": "Length", - "default": 0 - }, - { - "name": "TOP_Y", - "value_type": "DOUBLE", - "dimension": "Length", - "default": 0 - } - ], - [ - { - "name": "SEGMENT1", - "value_type": "INT" - }, - { - "name": "SEGMENT2", - "value_type": "INT" - }, - { - "name": "BRANCH", - "value_type": "INT" - }, - { - "name": "JOIN_SEGMENT", - "value_type": "INT" - }, - { - "name": "SEGMENT_LENGTH", - "value_type": "DOUBLE", - "dimension": "Length" - }, - { - "name": "DEPTH_CHANGE", - "value_type": "DOUBLE", - "dimension": "Length" - }, - { - "name": "DIAMETER", - "value_type": "DOUBLE", - "dimension": "Length" - }, - { - "name": "ROUGHNESS", - "value_type": "DOUBLE", - "dimension": "Length" - }, - { - "name": "AREA", - "value_type": "DOUBLE", - "dimension": "Length*Length" - }, - { - "name": "VOLUME", - "value_type": "DOUBLE", - "dimension": "Length*Length*Length" - }, - { - "name": "LENGTH_X", - "value_type": "DOUBLE", - "dimension": "Length", - "default": 0 - }, - { - "name": "LENGTH_Y", - "value_type": "DOUBLE", - "dimension": "Length", - "default": 0 - } - ] - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WELSOMIN b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WELSOMIN deleted file mode 100644 index 2af50c43b6..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WELSOMIN +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name": "WELSOMIN", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "SOMIN", - "value_type": "DOUBLE" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WELSPECL b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WELSPECL deleted file mode 100644 index 3e9458d04e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WELSPECL +++ /dev/null @@ -1,91 +0,0 @@ -{ - "name": "WELSPECL", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "GROUP", - "value_type": "STRING" - }, - { - "name": "LGR", - "value_type": "STRING" - }, - { - "name": "HEAD_I", - "value_type": "INT" - }, - { - "name": "HEAD_J", - "value_type": "INT" - }, - { - "name": "REF_DEPTH", - "value_type": "DOUBLE", - "dimension": "Length" - }, - { - "name": "PHASE", - "value_type": "STRING" - }, - { - "name": "D_RADIUS", - "value_type": "DOUBLE", - "default": 0, - "dimension": "Length" - }, - { - "name": "INFLOW_EQ", - "value_type": "STRING", - "default": "STD" - }, - { - "name": "AUTO_SHUTIN", - "value_type": "STRING", - "default": "SHUT" - }, - { - "name": "CROSSFLOW", - "value_type": "STRING", - "default": "YES" - }, - { - "name": "P_TABLE", - "value_type": "INT", - "default": 0 - }, - { - "name": "DENSITY_CALC", - "value_type": "STRING", - "default": "SEG" - }, - { - "name": "FIP_REGION", - "value_type": "INT", - "default": 0 - }, - { - "name": "FRONTSIM1", - "value_type": "STRING" - }, - { - "name": "FRONTSIM2", - "value_type": "STRING" - }, - { - "name": "well_model", - "value_type": "STRING", - "default": "STD" - }, - { - "name": "POLYMER_TABLE", - "value_type": "INT", - "default": 0 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WELSPECS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WELSPECS deleted file mode 100644 index 75e014139c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WELSPECS +++ /dev/null @@ -1,87 +0,0 @@ -{ - "name": "WELSPECS", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "GROUP", - "value_type": "STRING" - }, - { - "name": "HEAD_I", - "value_type": "INT" - }, - { - "name": "HEAD_J", - "value_type": "INT" - }, - { - "name": "REF_DEPTH", - "value_type": "DOUBLE", - "dimension": "Length" - }, - { - "name": "PHASE", - "value_type": "STRING" - }, - { - "name": "D_RADIUS", - "value_type": "DOUBLE", - "default": 0, - "dimension": "Length" - }, - { - "name": "INFLOW_EQ", - "value_type": "STRING", - "default": "STD" - }, - { - "name": "AUTO_SHUTIN", - "value_type": "STRING", - "default": "SHUT" - }, - { - "name": "CROSSFLOW", - "value_type": "STRING", - "default": "YES" - }, - { - "name": "P_TABLE", - "value_type": "INT", - "default": 0 - }, - { - "name": "DENSITY_CALC", - "value_type": "STRING", - "default": "SEG" - }, - { - "name": "FIP_REGION", - "value_type": "INT", - "default": 0 - }, - { - "name": "FRONTSIM1", - "value_type": "STRING" - }, - { - "name": "FRONTSIM2", - "value_type": "STRING" - }, - { - "name": "well_model", - "value_type": "STRING", - "default": "STD" - }, - { - "name": "POLYMER_TABLE", - "value_type": "INT", - "default": 0 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WELTARG b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WELTARG deleted file mode 100644 index 2b88ceac6e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WELTARG +++ /dev/null @@ -1,20 +0,0 @@ -{ - "name": "WELTARG", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "CMODE", - "value_type": "STRING" - }, - { - "name": "NEW_VALUE", - "value_type": "DOUBLE" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WFOAM b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WFOAM deleted file mode 100644 index 927de3e540..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WFOAM +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "WFOAM", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "FOAM_CONCENTRATION", - "value_type": "UDA", - "dimension": "FoamDensity" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WFRICSEG b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WFRICSEG deleted file mode 100644 index 448721ef0a..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WFRICSEG +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "WFRICSEG", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "TUBINGD", - "value_type": "DOUBLE", - "dimension": "Length" - }, - { - "name": "ROUGHNESS", - "value_type": "DOUBLE", - "dimension": "Length" - }, - { - "name": "FLOW_SCALING", - "value_type": "DOUBLE", - "default": 1 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WFRICSGL b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WFRICSGL deleted file mode 100644 index c77f840bb4..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WFRICSGL +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "WFRICSGL", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "TUBINGD", - "value_type": "DOUBLE", - "dimension": "Length" - }, - { - "name": "ROUGHNESS", - "value_type": "DOUBLE", - "dimension": "Length" - }, - { - "name": "FLOW_SCALING", - "value_type": "DOUBLE", - "default": 1 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WFRICTN b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WFRICTN deleted file mode 100644 index c03d063511..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WFRICTN +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "WFRICTN", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "TUBINGD", - "value_type": "DOUBLE", - "dimension": "Length" - }, - { - "name": "ROUGHNESS", - "value_type": "DOUBLE", - "dimension": "Length" - }, - { - "name": "FLOW_SCALING", - "value_type": "DOUBLE", - "default": 1 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WFRICTNL b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WFRICTNL deleted file mode 100644 index dbdb7622ca..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WFRICTNL +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "WFRICTNL", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "TUBINGD", - "value_type": "DOUBLE", - "dimension": "Length" - }, - { - "name": "ROUGHNESS", - "value_type": "DOUBLE", - "dimension": "Length" - }, - { - "name": "FLOW_SCALING", - "value_type": "DOUBLE", - "default": 1 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WGASPROD b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WGASPROD deleted file mode 100644 index 6114f0b0c7..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WGASPROD +++ /dev/null @@ -1,20 +0,0 @@ -{ - "name": "WGASPROD", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL_NAME", - "value_type": "STRING" - }, - { - "name": "INCREMENTAL_GAS_PRODUCTION_RATE", - "value_type": "DOUBLE" - }, - { - "name": "MAX_INCREMENTS", - "value_type": "INT" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WGORPEN b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WGORPEN deleted file mode 100644 index 41a5a00b6c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WGORPEN +++ /dev/null @@ -1,25 +0,0 @@ -{ - "name": "WGORPEN", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL_NAME", - "value_type": "STRING" - }, - { - "name": "BASE_GOR", - "value_type": "DOUBLE" - }, - { - "name": "MAX_OIL_RATE", - "value_type": "DOUBLE", - "dimension": "LiquidSurfaceVolume/Time" - }, - { - "name": "AVG_GOR0", - "value_type": "DOUBLE" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WGRUPCON b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WGRUPCON deleted file mode 100644 index 66eff82af5..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WGRUPCON +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "WGRUPCON", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "GROUP_CONTROLLED", - "value_type": "STRING", - "default": "YES" - }, - { - "name": "GUIDE_RATE", - "value_type": "DOUBLE", - "default": -1 - }, - { - "name": "PHASE", - "value_type": "STRING" - }, - { - "name": "SCALING_FACTOR", - "value_type": "DOUBLE", - "default": 1 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WH2NUM b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WH2NUM deleted file mode 100644 index eb21db27a2..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WH2NUM +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "WH2NUM", - "sections": [ - "REGIONS" - ], - "data": { - "value_type": "INT" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WH3NUM b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WH3NUM deleted file mode 100644 index d3433c79d4..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WH3NUM +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "WH3NUM", - "sections": [ - "REGIONS" - ], - "data": { - "value_type": "INT" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WHEDREFD b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WHEDREFD deleted file mode 100644 index 31eb111e38..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WHEDREFD +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "WHEDREFD", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "DEPTH", - "value_type": "DOUBLE", - "dimension": "Length" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WHISTCTL b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WHISTCTL deleted file mode 100644 index 37f4a13258..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WHISTCTL +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "WHISTCTL", - "sections": [ - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "CMODE", - "value_type": "STRING", - "default": "NONE" - }, - { - "name": "BPH_TERMINATE", - "value_type": "STRING", - "default": "NO" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WHTEMP b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WHTEMP deleted file mode 100644 index d7a747f15a..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WHTEMP +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "WHTEMP", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "VFP_TABLE", - "value_type": "INT" - }, - { - "name": "THP_TEMP", - "value_type": "DOUBLE", - "dimension": "Temperature" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WINJMULT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WINJMULT deleted file mode 100644 index ec1b5cfb58..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WINJMULT +++ /dev/null @@ -1,41 +0,0 @@ -{ - "name": "WINJMULT", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL_NAME", - "value_type": "STRING" - }, - { - "name": "FRACTURING_PRESSURE", - "value_type": "DOUBLE" - }, - { - "name": "MULTIPLIER_GRADIENT", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "MODE", - "value_type": "STRING", - "default": "WREV" - }, - { - "name": "I", - "value_type": "INT", - "default": -1 - }, - { - "name": "J", - "value_type": "INT", - "default": -1 - }, - { - "name": "K", - "value_type": "INT", - "default": -1 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WLIFT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WLIFT deleted file mode 100644 index bdbca2cb1d..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WLIFT +++ /dev/null @@ -1,66 +0,0 @@ -{ - "name": "WLIFT", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "TRIGGER_LIMIT", - "value_type": "DOUBLE", - "default_value": 0, - "comment": "The dimension here depends on the phase - must be handled in the application" - }, - { - "name": "TRIGGRE_PHASE", - "value_type": "STRING", - "default_value": "OIL" - }, - { - "name": "NEW_VFP_TABLE", - "value_type": "INT", - "default_value": 0 - }, - { - "name": "NEW_ALQ_VALUE", - "value_type": "DOUBLE", - "default_value": 0, - "comment": "The dimension here depends on the phase - must be handled in the application" - }, - { - "name": "NEW_WEFAC", - "value_type": "DOUBLE", - "default_value": 0 - }, - { - "name": "WWCT_LIMIT", - "value_type": "DOUBLE", - "default_value": 0 - }, - { - "name": "NEW_THP_LIMIT", - "value_type": "DOUBLE", - "default_value": 0, - "dimension": "Pressure" - }, - { - "name": "WGOR_LIMIT", - "value_type": "DOUBLE", - "default_value": 0 - }, - { - "name": "ALQ_SHIFT", - "value_type": "DOUBLE", - "default_value": 1e+20 - }, - { - "name": "THP_SHIFT", - "value_type": "DOUBLE", - "default_value": 1e+20, - "dimension": "Pressure" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WLIFTOPT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WLIFTOPT deleted file mode 100644 index 0a06ed7a3d..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WLIFTOPT +++ /dev/null @@ -1,42 +0,0 @@ -{ - "name": "WLIFTOPT", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "USE_OPTIMIZER", - "value_type": "STRING" - }, - { - "name": "MAX_LIFT_GAS_RATE", - "value_type": "DOUBLE", - "dimension": "GasSurfaceVolume/Time" - }, - { - "name": "WEIGHT_FACTOR", - "value_type": "DOUBLE", - "default": 1 - }, - { - "name": "MIN_LIFT_GAS_RATE", - "value_type": "DOUBLE", - "dimension": "GasSurfaceVolume/Time", - "default": 0 - }, - { - "name": "DELTA_GAS_RATE_WEIGHT_FACTOR", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "ALLOCATE_EXTRA_LIFT_GAS", - "value_type": "STRING", - "default": "NO" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WLIMTOL b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WLIMTOL deleted file mode 100644 index ad19d20168..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WLIMTOL +++ /dev/null @@ -1,13 +0,0 @@ -{ - "name": "WLIMTOL", - "sections": [ - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "TOLERANCE_FRACTION", - "value_type": "DOUBLE" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WLIST b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WLIST deleted file mode 100644 index 380b1a9000..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WLIST +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "WLIST", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "NAME", - "value_type": "STRING" - }, - { - "name": "ACTION", - "value_type": "STRING" - }, - { - "name": "WELLS", - "value_type": "STRING", - "size_type": "ALL" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WLISTARG b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WLISTARG deleted file mode 100644 index bd39ef7907..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WLISTARG +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "WLISTARG", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "CONTROL", - "value_type": "STRING" - }, - { - "name": "VALUES", - "value_type": "DOUBLE", - "size_type": "ALL" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WLISTNAM b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WLISTNAM deleted file mode 100644 index 5b2a5e4399..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WLISTNAM +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "WLISTNAM", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "LIST_NAME", - "value_type": "STRING" - }, - { - "name": "WELLS", - "value_type": "STRING", - "size_type": "ALL" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WNETCTRL b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WNETCTRL deleted file mode 100644 index 077d580f1f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WNETCTRL +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "WNETCTRL", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "CONTROL", - "value_type": "STRING", - "default": "THP" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WNETDP b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WNETDP deleted file mode 100644 index d6ec93fa69..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WNETDP +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "WNETDP", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "DP", - "value_type": "DOUBLE", - "default": 0, - "dimension": "Pressure" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WORKLIM b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WORKLIM deleted file mode 100644 index 641ede06dc..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WORKLIM +++ /dev/null @@ -1,13 +0,0 @@ -{ - "name": "WORKLIM", - "sections": [ - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "LIMIT", - "value_type": "DOUBLE" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WORKTHP b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WORKTHP deleted file mode 100644 index 11ae73c0fe..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WORKTHP +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "WORKTHP", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL_NAME", - "value_type": "STRING" - }, - { - "name": "WORK_OVER_PROCEDURE", - "value_type": "STRING", - "default": "NONE" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WPAVE b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WPAVE deleted file mode 100644 index 31df2491b9..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WPAVE +++ /dev/null @@ -1,29 +0,0 @@ -{ - "name": "WPAVE", - "sections": [ - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "WEIGTH_FACTOR1", - "value_type": "DOUBLE", - "default": 0.5 - }, - { - "name": "WEIGTH_FACTOR2", - "value_type": "DOUBLE", - "default": 1 - }, - { - "name": "DEPTH_CORRECTION", - "value_type": "STRING", - "default": "WELL" - }, - { - "name": "CONNECTION", - "value_type": "STRING", - "default": "OPEN" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WPAVEDEP b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WPAVEDEP deleted file mode 100644 index 4d4b04752d..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WPAVEDEP +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "WPAVEDEP", - "sections": [ - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "WELLNAME", - "value_type": "STRING" - }, - { - "name": "REFDEPTH", - "value_type": "DOUBLE", - "default": 0 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WPIMULT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WPIMULT deleted file mode 100644 index eaeee663a0..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WPIMULT +++ /dev/null @@ -1,37 +0,0 @@ -{ - "name": "WPIMULT", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "WELLPI", - "value_type": "DOUBLE", - "default": 1 - }, - { - "name": "I", - "value_type": "INT" - }, - { - "name": "J", - "value_type": "INT" - }, - { - "name": "K", - "value_type": "INT" - }, - { - "name": "FIRST", - "value_type": "INT" - }, - { - "name": "LAST", - "value_type": "INT" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WPIMULTL b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WPIMULTL deleted file mode 100644 index ef86112d24..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WPIMULTL +++ /dev/null @@ -1,42 +0,0 @@ -{ - "name": "WPIMULTL", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "WELLPI", - "value_type": "DOUBLE", - "default": 1 - }, - { - "name": "GRID", - "value_type": "STRING", - "default": "" - }, - { - "name": "I", - "value_type": "INT" - }, - { - "name": "J", - "value_type": "INT" - }, - { - "name": "K", - "value_type": "INT" - }, - { - "name": "FIRST", - "value_type": "INT" - }, - { - "name": "LAST", - "value_type": "INT" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WPITAB b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WPITAB deleted file mode 100644 index 8272a37245..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WPITAB +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "WPITAB", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "PI", - "value_type": "DOUBLE", - "default": 0 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WPLUG b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WPLUG deleted file mode 100644 index 915ea43f51..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WPLUG +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "WPLUG", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "LENGTH_TOP", - "value_type": "DOUBLE", - "dimension": "Length" - }, - { - "name": "LENGTH_BOTTOM", - "value_type": "DOUBLE", - "dimension": "Length" - }, - { - "name": "SOURCE", - "value_type": "STRING", - "default": "WELL" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WPOLYMER b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WPOLYMER deleted file mode 100644 index 90bd8a5083..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WPOLYMER +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "WPOLYMER", - "sections": [ - "SPECIAL", - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "POLYMER_CONCENTRATION", - "value_type": "UDA", - "dimension": "PolymerDensity" - }, - { - "name": "SALT_CONCENTRATION", - "value_type": "UDA", - "dimension": "PolymerDensity" - }, - { - "name": "GROUP_POLYMER_CONCENTRATION", - "value_type": "STRING" - }, - { - "name": "GROUP_SALT_CONCENTRATION", - "value_type": "STRING" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WPOLYRED b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WPOLYRED deleted file mode 100644 index 0fa6cab74e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WPOLYRED +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "WPOLYRED", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "POLYMER_VISCOSITY_RED", - "value_type": "DOUBLE", - "default": 1 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WPOTCALC b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WPOTCALC deleted file mode 100644 index 946d56b583..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WPOTCALC +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "WPOTCALC", - "size": 1, - "sections": [ - "RUNSPEC" - ], - "items": [ - { - "name": "FORCE_CALC", - "value_type": "STRING", - "default": "YES" - }, - { - "name": "USE_SEGMENT_VOLUMES", - "value_type": "STRING", - "default": "NO" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WREGROUP b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WREGROUP deleted file mode 100644 index d9ca7002e0..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WREGROUP +++ /dev/null @@ -1,35 +0,0 @@ -{ - "name": "WREGROUP", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "QUANTITY", - "value_type": "STRING", - "default": " " - }, - { - "name": "GROUP_UPPER", - "value_type": "STRING" - }, - { - "name": "UPPER_LIMIT", - "value_type": "DOUBLE", - "default": 1e+20 - }, - { - "name": "GROUP_LOWER", - "value_type": "STRING" - }, - { - "name": "LOWER_LIMIT", - "value_type": "DOUBLE", - "default": 0 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WRFT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WRFT deleted file mode 100644 index 9d9b0b9914..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WRFT +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name": "WRFT", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WRFTPLT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WRFTPLT deleted file mode 100644 index 60c37323ff..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WRFTPLT +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "WRFTPLT", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "OUTPUT_RFT", - "value_type": "STRING", - "default": "NO" - }, - { - "name": "OUTPUT_PLT", - "value_type": "STRING", - "default": "NO" - }, - { - "name": "OUTPUT_SEGMENT", - "value_type": "STRING", - "default": "NO" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSALT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSALT deleted file mode 100644 index d3b66a3798..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSALT +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "WSALT", - "sections": [ - "SCHEDULE" - ], - "comment": "UDA & size_type:ALL is not supported i.e Multi-Component Brine Model not supported", - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "CONCENTRATION", - "value_type": "UDA" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSCCLEAN b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSCCLEAN deleted file mode 100644 index 618775b988..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSCCLEAN +++ /dev/null @@ -1,42 +0,0 @@ -{ - "name": "WSCCLEAN", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "SCALE_MULTIPLIER", - "value_type": "DOUBLE", - "default": 1 - }, - { - "name": "I", - "value_type": "INT", - "default": -1 - }, - { - "name": "J", - "value_type": "INT", - "default": -1 - }, - { - "name": "K", - "value_type": "INT", - "default": -1 - }, - { - "name": "C1", - "value_type": "INT", - "default": -1 - }, - { - "name": "C2", - "value_type": "INT", - "default": -1 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSCCLENL b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSCCLENL deleted file mode 100644 index 362f7ecc99..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSCCLENL +++ /dev/null @@ -1,46 +0,0 @@ -{ - "name": "WSCCLENL", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "SCALE_MULTIPLIER", - "value_type": "DOUBLE", - "default": 1 - }, - { - "name": "LGR", - "value_type": "STRING" - }, - { - "name": "I", - "value_type": "INT", - "default": -1 - }, - { - "name": "J", - "value_type": "INT", - "default": -1 - }, - { - "name": "K", - "value_type": "INT", - "default": -1 - }, - { - "name": "C1", - "value_type": "INT", - "default": -1 - }, - { - "name": "C2", - "value_type": "INT", - "default": -1 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSCTAB b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSCTAB deleted file mode 100644 index 7211cd0786..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSCTAB +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "WSCTAB", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "SCALE_DEPOSITION_TABLE", - "value_type": "INT", - "default": 0 - }, - { - "name": "SCALE_DAMAGE_TABLE", - "value_type": "INT", - "default": 0 - }, - { - "name": "UNUSED", - "value_type": "STRING" - }, - { - "name": "SCALE_DISSOLUTION_TABLE", - "value_type": "INT", - "default": 0 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGAICD b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGAICD deleted file mode 100644 index 5ed58fe480..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGAICD +++ /dev/null @@ -1,113 +0,0 @@ -{ - "name": "WSEGAICD", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "SEGMENT1", - "value_type": "INT", - "default": 0 - }, - { - "name": "SEGMENT2", - "value_type": "INT", - "default": 0 - }, - { - "name": "AICD_STRENGTH", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "ICD_LENGTH", - "value_type": "DOUBLE", - "dimension": "Length", - "default": 12 - }, - { - "name": "RHO", - "value_type": "DOUBLE", - "dimension": "Mass/Length*Length*Length", - "default": 1000.25 - }, - { - "name": "VISCOSITY", - "value_type": "DOUBLE", - "dimension": "Viscosity", - "default": 1.45 - }, - { - "name": "WATER_LIMIT", - "value_type": "DOUBLE", - "default": 0.5 - }, - { - "name": "TRANSITION_WIDTH", - "value_type": "DOUBLE", - "default": 0.05 - }, - { - "name": "MAX_SOMETHING", - "value_type": "DOUBLE", - "default": 5 - }, - { - "name": "SCALING_METHOD", - "value_type": "INT", - "default": -1 - }, - { - "name": "MAX_QICD", - "value_type": "DOUBLE", - "dimension": "ReservoirVolume/Time" - }, - { - "name": "FLOW_RATE_EXPONENT", - "value_type": "DOUBLE" - }, - { - "name": "VISC_EXPONENT", - "value_type": "DOUBLE" - }, - { - "name": "ICD_FLAG", - "value_type": "STRING", - "default": "OPEN" - }, - { - "name": "OIL_FLOW_FRACTION", - "value_type": "DOUBLE", - "default": 1 - }, - { - "name": "WATER_FLOW_FRACTION", - "value_type": "DOUBLE", - "default": 1 - }, - { - "name": "GAS_FLOW_FRACTION", - "value_type": "DOUBLE", - "default": 1 - }, - { - "name": "OIL_VSIC_FRACTION", - "value_type": "DOUBLE", - "default": 1 - }, - { - "name": "WATER_VISC_FRACTION", - "value_type": "DOUBLE", - "default": 1 - }, - { - "name": "GAS_VISC_FRACTION", - "value_type": "DOUBLE", - "default": 1 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGDFIN b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGDFIN deleted file mode 100644 index c3941c5ed2..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGDFIN +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "WSEGDFIN", - "sections": [ - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGDFMD b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGDFMD deleted file mode 100644 index ecd8e9cef0..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGDFMD +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "WSEGDFMD", - "sections": [ - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "DRIFT_MODEL", - "value_type": "STRING", - "default": "ORIGINAL" - }, - { - "name": "INCLINATION_FACTOR", - "value_type": "STRING", - "default": "H-K" - }, - { - "name": "GAS_EFFECT", - "value_type": "STRING", - "default": "NO" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGDFPA b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGDFPA deleted file mode 100644 index 862e0b3aba..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGDFPA +++ /dev/null @@ -1,57 +0,0 @@ -{ - "name": "WSEGDFPA", - "sections": [ - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "GAS_LIQUID_VD_FACTOR", - "value_type": "DOUBLE", - "default": 1 - }, - { - "name": "A1", - "value_type": "DOUBLE" - }, - { - "name": "A2", - "value_type": "DOUBLE" - }, - { - "name": "C0_A", - "value_type": "DOUBLE", - "default": 1.2 - }, - { - "name": "C0_B", - "value_type": "DOUBLE" - }, - { - "name": "FV", - "value_type": "DOUBLE", - "default": 1 - }, - { - "name": "OIL_WATER_VD_FACTOR", - "value_type": "DOUBLE", - "default": -1 - }, - { - "name": "A", - "value_type": "DOUBLE" - }, - { - "name": "B1", - "value_type": "DOUBLE" - }, - { - "name": "B2", - "value_type": "DOUBLE" - }, - { - "name": "N", - "value_type": "DOUBLE" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGDIMS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGDIMS deleted file mode 100644 index 1a0bd1e1f2..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGDIMS +++ /dev/null @@ -1,29 +0,0 @@ -{ - "name": "WSEGDIMS", - "sections": [ - "RUNSPEC" - ], - "size": 1, - "items": [ - { - "name": "NSWLMX", - "value_type": "INT", - "default": 0 - }, - { - "name": "NSEGMX", - "value_type": "INT", - "default": 1 - }, - { - "name": "NLBRMX", - "value_type": "INT", - "default": 1 - }, - { - "name": "NCRDMX", - "value_type": "INT", - "default": 0 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGEXSS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGEXSS deleted file mode 100644 index 9b5cc6e8bd..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGEXSS +++ /dev/null @@ -1,38 +0,0 @@ -{ - "name": "WSEGEXSS", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "SEGMENT", - "value_type": "INT" - }, - { - "name": "TYPE", - "value_type": "STRING", - "default": "NONE" - }, - { - "name": "GAS_IMPORT_RATE", - "value_type": "DOUBLE", - "dimension": "GasSurfaceVolume/Time" - }, - { - "name": "R", - "value_type": "DOUBLE", - "default": 0, - "dimension": "LiquidSurfaceVolume/Time*Pressure" - }, - { - "name": "PEXT", - "value_type": "DOUBLE", - "default": 0, - "dimension": "Pressure" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGFLIM b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGFLIM deleted file mode 100644 index fd1ae1b116..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGFLIM +++ /dev/null @@ -1,53 +0,0 @@ -{ - "name": "WSEGFLIM", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "SEGMENT1", - "value_type": "INT" - }, - { - "name": "SEGMENT2", - "value_type": "INT" - }, - { - "name": "LIMITED_PHASE1", - "value_type": "STRING", - "default": "NONE" - }, - { - "name": "FLOW_LIMIT1", - "value_type": "DOUBLE", - "dimension": "LiquidSurfaceVolume/Time" - }, - { - "name": "A1", - "value_type": "DOUBLE" - }, - { - "name": "LIMITED_PHASE2", - "value_type": "STRING", - "default": "NONE" - }, - { - "name": "FLOW_LIMIT2", - "value_type": "DOUBLE", - "dimension": "LiquidSurfaceVolume/Time" - }, - { - "name": "A2", - "value_type": "DOUBLE" - }, - { - "name": "STATUS", - "value_type": "STRING", - "default": "OPEN" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGFMOD b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGFMOD deleted file mode 100644 index 60b777b697..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGFMOD +++ /dev/null @@ -1,49 +0,0 @@ -{ - "name": "WSEGFMOD", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "SEGMENT1", - "value_type": "INT" - }, - { - "name": "SEGMENT2", - "value_type": "INT" - }, - { - "name": "FLOW_MODEL", - "value_type": "STRING", - "default": "HO" - }, - { - "name": "GAS_LIQUID_VD_FACTOR", - "value_type": "DOUBLE" - }, - { - "name": "A", - "value_type": "DOUBLE" - }, - { - "name": "B", - "value_type": "DOUBLE" - }, - { - "name": "FV", - "value_type": "DOUBLE" - }, - { - "name": "B1", - "value_type": "DOUBLE" - }, - { - "name": "B2", - "value_type": "DOUBLE" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGINIT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGINIT deleted file mode 100644 index b854dc5ee7..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGINIT +++ /dev/null @@ -1,55 +0,0 @@ -{ - "name": "WSEGINIT", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "SEGMENT1", - "value_type": "INT" - }, - { - "name": "SEGMENT2", - "value_type": "INT" - }, - { - "name": "P0", - "value_type": "DOUBLE", - "dimension": "Pressure" - }, - { - "name": "W0", - "value_type": "DOUBLE" - }, - { - "name": "G0", - "value_type": "DOUBLE" - }, - { - "name": "RS", - "value_type": "DOUBLE" - }, - { - "name": "RV", - "value_type": "DOUBLE" - }, - { - "name": "API", - "value_type": "DOUBLE" - }, - { - "name": "POLYMER", - "value_type": "DOUBLE", - "dimension": "Mass/ReservoirVolume" - }, - { - "name": "BRINE", - "value_type": "DOUBLE", - "dimension": "Mass/ReservoirVolume" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGITER b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGITER deleted file mode 100644 index eaa3213976..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGITER +++ /dev/null @@ -1,29 +0,0 @@ -{ - "name": "WSEGITER", - "sections": [ - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "MAX_WELL_ITERATIONS", - "value_type": "INT", - "default": 20 - }, - { - "name": "MAX_TIMES_REDUCED", - "value_type": "INT", - "default": 5 - }, - { - "name": "REDUCTION_FACTOR", - "value_type": "DOUBLE", - "default": 0.3 - }, - { - "name": "INCREASING_FACTOR", - "value_type": "DOUBLE", - "default": 2 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGLABY b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGLABY deleted file mode 100644 index 18e636d79b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGLABY +++ /dev/null @@ -1,79 +0,0 @@ -{ - "name": "WSEGLABY", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "SEGMENT1", - "value_type": "INT" - }, - { - "name": "SEGMENT2", - "value_type": "INT" - }, - { - "name": "NCONFIG", - "value_type": "INT" - }, - { - "name": "CHANNELS", - "value_type": "INT", - "default": 2 - }, - { - "name": "A", - "value_type": "DOUBLE", - "default": 6e-05, - "dimension": "Length*Length" - }, - { - "name": "L1", - "value_type": "DOUBLE", - "default": 0.1863, - "dimension": "Length" - }, - { - "name": "L2", - "value_type": "DOUBLE", - "default": 0.2832, - "dimension": "Length" - }, - { - "name": "D", - "value_type": "DOUBLE", - "default": 0.006316, - "dimension": "Length" - }, - { - "name": "R", - "value_type": "DOUBLE", - "default": 1e-05, - "dimension": "Length" - }, - { - "name": "GAMMA_INLET", - "value_type": "DOUBLE", - "default": 0.35 - }, - { - "name": "GAMMA_OUTLET", - "value_type": "DOUBLE", - "default": 0.5 - }, - { - "name": "GAMMA_LAB", - "value_type": "DOUBLE", - "default": 0.5 - }, - { - "name": "STATUS", - "value_type": "STRING", - "default": "OPEN" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGLINK b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGLINK deleted file mode 100644 index 8c79819a0e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGLINK +++ /dev/null @@ -1,20 +0,0 @@ -{ - "name": "WSEGLINK", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "SEGMENT1", - "value_type": "INT" - }, - { - "name": "SEGMENT2", - "value_type": "INT" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGMULT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGMULT deleted file mode 100644 index 622610c724..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGMULT +++ /dev/null @@ -1,50 +0,0 @@ -{ - "name": "WSEGMULT", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "SEGMENT1", - "value_type": "INT" - }, - { - "name": "SEGMENT2", - "value_type": "INT" - }, - { - "name": "A", - "value_type": "DOUBLE", - "default": 1 - }, - { - "name": "B", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "C", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "D", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "E", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "GOR", - "value_type": "DOUBLE", - "default": 0 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGPROP b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGPROP deleted file mode 100644 index c9a19cf8e8..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGPROP +++ /dev/null @@ -1,53 +0,0 @@ -{ - "name": "WSEGPROP", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "SEGMENT1", - "value_type": "INT" - }, - { - "name": "SEGMENT2", - "value_type": "INT" - }, - { - "name": "D", - "value_type": "DOUBLE", - "dimension": "Length" - }, - { - "name": "R", - "value_type": "DOUBLE", - "dimension": "Length" - }, - { - "name": "A", - "value_type": "DOUBLE", - "dimension": "Length*Length" - }, - { - "name": "V", - "value_type": "DOUBLE", - "dimension": "Length*Length*Length" - }, - { - "name": "PIPEA", - "value_type": "DOUBLE", - "dimension": "Length*Length" - }, - { - "name": "CV", - "value_type": "DOUBLE" - }, - { - "name": "K", - "value_type": "DOUBLE" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGPULL b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGPULL deleted file mode 100644 index c9f0dc3fcd..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGPULL +++ /dev/null @@ -1,41 +0,0 @@ -{ - "name": "WSEGPULL", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "SEGMENT1", - "value_type": "INT" - }, - { - "name": "SEGMENT2", - "value_type": "INT" - }, - { - "name": "P", - "value_type": "DOUBLE" - }, - { - "name": "DP", - "value_type": "DOUBLE", - "dimension": "Pressure" - }, - { - "name": "OIL_RATE_LIMIT", - "value_type": "DOUBLE", - "dimension": "Volume/Time", - "default": 0 - }, - { - "name": "GRADIENT_FACTOR", - "value_type": "DOUBLE", - "dimension": "Pressure*Time/Volume", - "default": 0 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGSEP b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGSEP deleted file mode 100644 index 96b3fa823f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGSEP +++ /dev/null @@ -1,35 +0,0 @@ -{ - "name": "WSEGSEP", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "SEGMENT1", - "value_type": "INT" - }, - { - "name": "SEGMENT2", - "value_type": "INT" - }, - { - "name": "PHASE", - "value_type": "STRING", - "default": "NONE" - }, - { - "name": "EMAX", - "value_type": "DOUBLE", - "default": 1 - }, - { - "name": "HOLDUP_FRACTION", - "value_type": "DOUBLE", - "default": 0.01 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGSICD b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGSICD deleted file mode 100644 index 629a7664b0..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGSICD +++ /dev/null @@ -1,76 +0,0 @@ -{ - "name": "WSEGSICD", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "SEG1", - "value_type": "INT" - }, - { - "name": "SEG2", - "value_type": "INT" - }, - { - "name": "STRENGTH", - "value_type": "DOUBLE", - "dimension": "Pressure*Time*Time/GeometricVolume*GeometricVolume" - }, - { - "name": "LENGTH", - "value_type": "DOUBLE", - "dimension": "Length", - "default": 12 - }, - { - "name": "DENSITY_CALI", - "value_type": "DOUBLE", - "dimension": "Density", - "default": 1000.25 - }, - { - "name": "VISCOSITY_CALI", - "value_type": "DOUBLE", - "dimension": "Viscosity", - "default": 1.45 - }, - { - "name": "CRITICAL_VALUE", - "value_type": "DOUBLE", - "dimension": "1", - "default": 0.5 - }, - { - "name": "WIDTH_TRANS", - "value_type": "DOUBLE", - "dimension": "1", - "default": 0.05 - }, - { - "name": "MAX_VISC_RATIO", - "value_type": "DOUBLE", - "dimension": "1", - "default": 5 - }, - { - "name": "METHOD_SCALING_FACTOR", - "value_type": "INT", - "default": -1 - }, - { - "name": "MAX_ABS_RATE", - "value_type": "DOUBLE", - "dimension": "GeometricVolume/Time" - }, - { - "name": "STATUS", - "value_type": "STRING", - "default": "OPEN" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGSOLV b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGSOLV deleted file mode 100644 index d9cd83389c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGSOLV +++ /dev/null @@ -1,49 +0,0 @@ -{ - "name": "WSEGSOLV", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "USE_ITERATIVE_SOLVER", - "value_type": "STRING", - "default": "NO" - }, - { - "name": "MAX_LINEAR_ITER", - "value_type": "INT", - "default": 30 - }, - { - "name": "CONVERGENCE_TARGET", - "value_type": "DOUBLE", - "default": 1e-10 - }, - { - "name": "PC_FILL", - "value_type": "INT", - "default": 2 - }, - { - "name": "DROP_TOL", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "P_LIMIT", - "value_type": "DOUBLE", - "default": 1e-08 - }, - { - "name": "LOOP_THRESHOLD", - "value_type": "DOUBLE", - "dimension": "Length*Length*Length/Time", - "default": -1 - }, - { - "name": "LOOP_MULTIPLIER", - "value_type": "DOUBLE", - "default": -1 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGTABL b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGTABL deleted file mode 100644 index 35ce65fd6f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGTABL +++ /dev/null @@ -1,49 +0,0 @@ -{ - "name": "WSEGTABL", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "SEGMENT1", - "value_type": "INT" - }, - { - "name": "SEGMENT2", - "value_type": "INT" - }, - { - "name": "VFP", - "value_type": "INT", - "default": 0 - }, - { - "name": "VFP_COMPONENTS", - "value_type": "STRING", - "default": "FH" - }, - { - "name": "VFP_OUTLIER", - "value_type": "STRING" - }, - { - "name": "DP_SCALING", - "value_type": "STRING", - "default": "LEN" - }, - { - "name": "ALQ_VALUE", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "STATUS", - "value_type": "STRING", - "default": "OPEN" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGVALV b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGVALV deleted file mode 100644 index b951e4dd41..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSEGVALV +++ /dev/null @@ -1,55 +0,0 @@ -{ - "name": "WSEGVALV", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "SEGMENT_NUMBER", - "value_type": "INT" - }, - { - "name": "CV", - "value_type": "DOUBLE" - }, - { - "name": "AREA", - "value_type": "DOUBLE", - "dimension": "Length*Length" - }, - { - "name": "EXTRA_LENGTH", - "value_type": "DOUBLE", - "dimension": "Length" - }, - { - "name": "PIPE_D", - "value_type": "DOUBLE", - "dimension": "Length" - }, - { - "name": "ROUGHNESS", - "value_type": "DOUBLE", - "dimension": "Length" - }, - { - "name": "PIPE_A", - "value_type": "DOUBLE", - "dimension": "Length*Length" - }, - { - "name": "STATUS", - "value_type": "STRING", - "default": "OPEN" - }, - { - "name": "MAX_A", - "value_type": "DOUBLE", - "dimension": "Length*Length" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSOLVENT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSOLVENT deleted file mode 100644 index 976aa63261..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSOLVENT +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "WSOLVENT", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "SOLVENT_FRACTION", - "value_type": "UDA", - "dimension": "1" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSURFACT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSURFACT deleted file mode 100644 index 4d27bb9400..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WSURFACT +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "WSEGTABL", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "SURFACT", - "value_type": "UDA", - "dimension": "Mass/Length*Length*Length" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WTADD b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WTADD deleted file mode 100644 index 74c8c94bb3..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WTADD +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "WTADD", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "CONTROL", - "value_type": "STRING", - "comment": "The control mode seems to be a UDA??" - }, - { - "name": "SHIFT", - "value_type": "UDA" - }, - { - "name": "NUM", - "value_type": "INT", - "default": 1 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WTEMP b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WTEMP deleted file mode 100644 index 845d579baf..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WTEMP +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "WTEMP", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "TEMP", - "value_type": "DOUBLE", - "dimension": "Temperature" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WTEMPQ b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WTEMPQ deleted file mode 100644 index f5e7963aca..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WTEMPQ +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "WTEMPQ", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "LGR", - "value_type": "STRING" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WTEST b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WTEST deleted file mode 100644 index 20e078d524..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WTEST +++ /dev/null @@ -1,33 +0,0 @@ -{ - "name": "WTEST", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "INTERVAL", - "value_type": "DOUBLE", - "dimension": "Time" - }, - { - "name": "REASON", - "value_type": "STRING", - "default": "" - }, - { - "name": "TEST_NUM", - "value_type": "INT", - "default": 0 - }, - { - "name": "START_TIME", - "value_type": "DOUBLE", - "dimension": "Time", - "default": 0 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WTHPMAX b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WTHPMAX deleted file mode 100644 index 87ca4892c3..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WTHPMAX +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "WTHPMAX", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "MAX_THP_DESIGN_LIMIT", - "value_type": "DOUBLE", - "dimension": "Pressure" - }, - { - "name": "CONTROL", - "value_type": "STRING", - "default": "ORAT" - }, - { - "name": "CONTROL_LIMIT", - "value_type": "DOUBLE" - }, - { - "name": "THP_OPEN_LIMIT", - "value_type": "DOUBLE", - "dimension": "Pressure" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WTMULT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WTMULT deleted file mode 100644 index 075558103e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WTMULT +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "WTMULT", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "CONTROL", - "value_type": "STRING", - "comment": "The control mode seems to be a UDA??" - }, - { - "name": "FACTOR", - "value_type": "UDA" - }, - { - "name": "NUM", - "value_type": "INT", - "default": 1 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WTRACER b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WTRACER deleted file mode 100644 index 18fa77cac8..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WTRACER +++ /dev/null @@ -1,29 +0,0 @@ -{ - "name": "WTRACER", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "TRACER", - "value_type": "STRING" - }, - { - "name": "CONCENTRATION", - "value_type": "UDA" - }, - { - "name": "CUM_TRACER_FACTOR", - "value_type": "UDA" - }, - { - "name": "PRODUCTION_GROUP", - "value_type": "STRING", - "comment": "Defaulted means: use the concentration from the CONCENTRATION item" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WVFPDP b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WVFPDP deleted file mode 100644 index 254ef93c55..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WVFPDP +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "WVFPDP", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "DELTA_P", - "value_type": "DOUBLE", - "dimension": "Pressure" - }, - { - "name": "LOSS_SCALING_FACTOR", - "value_type": "DOUBLE", - "default": 1 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WVFPEXP b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WVFPEXP deleted file mode 100644 index 84eb6c8e22..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WVFPEXP +++ /dev/null @@ -1,32 +0,0 @@ -{ - "name": "WVFPEXP", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "EXPLICIT_IMPLICIT", - "value_type": "STRING", - "default": "IMP" - }, - { - "name": "CLOSE", - "value_type": "STRING", - "default": "NO" - }, - { - "name": "PREVENT_THP", - "value_type": "STRING", - "default": "NO" - }, - { - "name": "EXTRAPOLATION_CONTROL", - "value_type": "STRING", - "default": "WG" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WWPAVE b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WWPAVE deleted file mode 100644 index dd9c0febd7..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/W/WWPAVE +++ /dev/null @@ -1,32 +0,0 @@ -{ - "name": "WWPAVE", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "F1", - "value_type": "DOUBLE", - "default": 0.5 - }, - { - "name": "F2", - "value_type": "DOUBLE", - "default": 0.5 - }, - { - "name": "DEPTH_CORRECTION", - "value_type": "STRING", - "default": "WELL" - }, - { - "name": "WELL_CONNECTION", - "value_type": "STRING", - "default": "OPEN" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/Z/ZCORN b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/Z/ZCORN deleted file mode 100644 index a8b0dabf27..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/Z/ZCORN +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "ZCORN", - "sections": [ - "GRID" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "Length" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/Z/ZIPP2OFF b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/Z/ZIPP2OFF deleted file mode 100644 index edc47daac4..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/Z/ZIPP2OFF +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "ZIPP2OFF", - "sections": [ - "SCHEDULE" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/Z/ZIPPY2 b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/Z/ZIPPY2 deleted file mode 100644 index 7de5baa286..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/000_Eclipse100/Z/ZIPPY2 +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "ZIPPY2", - "sections": [ - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "name": "SETTINGS", - "value_type": "STRING", - "size_type": "ALL" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/B/BLOCK_PROBE300 b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/B/BLOCK_PROBE300 deleted file mode 100644 index 027f5594e8..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/B/BLOCK_PROBE300 +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "BLOCK_PROBE300", - "sections": [ - "SUMMARY" - ], - "comment": "E300 only", - "deck_names": [ - "BTEMP" - ], - "items": [ - { - "name": "I", - "value_type": "INT" - }, - { - "name": "J", - "value_type": "INT" - }, - { - "name": "K", - "value_type": "INT" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/C/CIRCLE b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/C/CIRCLE deleted file mode 100644 index 2caf6013c2..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/C/CIRCLE +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "CIRCLE", - "sections": [ - "GRID" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/C/COMPS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/C/COMPS deleted file mode 100644 index 16bedfe978..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/C/COMPS +++ /dev/null @@ -1,13 +0,0 @@ -{ - "name": "COMPS", - "sections": [ - "RUNSPEC" - ], - "size": 1, - "items": [ - { - "name": "NUM_COMPS", - "value_type": "INT" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/C/CREF b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/C/CREF deleted file mode 100644 index 23c89e6098..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/C/CREF +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "CREF", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NUM_STATE_EQ" - }, - "comment": "to set defaults for items of unspecified size.", - "items": [ - { - "name": "COMPRESSIBILITY", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "1/Pressure" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/C/CREFS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/C/CREFS deleted file mode 100644 index 2ff9d97955..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/C/CREFS +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "CREFS", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NUM_STATE_EQ" - }, - "comment": "to set defaults for items of unspecified size.", - "items": [ - { - "name": "COMPRESSIBILITY", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "1/Pressure" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/D/DREF b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/D/DREF deleted file mode 100644 index f627d65603..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/D/DREF +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "DREF", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NUM_STATE_EQ" - }, - "comment": "and this also cannot (yet?) be specified.", - "items": [ - { - "name": "DENSITY", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "Density" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/D/DREFS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/D/DREFS deleted file mode 100644 index a54501f78c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/D/DREFS +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "DREFS", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NUM_STATE_EQ" - }, - "comment": "and this also cannot (yet?) be specified.", - "items": [ - { - "name": "DENSITY", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "Density" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/D/DZV b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/D/DZV deleted file mode 100644 index 5b258f746c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/D/DZV +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "DZV", - "sections": [ - "GRID" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "Length" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/G/GASVISCT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/G/GASVISCT deleted file mode 100644 index e9ce495859..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/G/GASVISCT +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "GASVISCT", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTPVT" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "comment": "(given by the COMPS keyword). Fun!", - "dimension": [ - "ContextDependent" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/G/GCONPROD b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/G/GCONPROD deleted file mode 100644 index 9869bc63de..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/G/GCONPROD +++ /dev/null @@ -1,111 +0,0 @@ -{ - "name": "GCONPROD", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "GROUP", - "value_type": "STRING" - }, - { - "name": "CONTROL_MODE", - "value_type": "STRING", - "default": "NONE" - }, - { - "name": "OIL_TARGET", - "value_type": "UDA", - "dimension": "LiquidSurfaceVolume/Time", - "default": -9.99e+102 - }, - { - "name": "WATER_TARGET", - "value_type": "UDA", - "dimension": "LiquidSurfaceVolume/Time", - "default": -9.99e+102 - }, - { - "name": "GAS_TARGET", - "value_type": "UDA", - "dimension": "GasSurfaceVolume/Time", - "default": -9.99e+102 - }, - { - "name": "LIQUID_TARGET", - "value_type": "UDA", - "dimension": "LiquidSurfaceVolume/Time", - "default": -9.99e+102 - }, - { - "name": "EXCEED_PROC", - "value_type": "STRING", - "default": "NONE" - }, - { - "name": "RESPOND_TO_PARENT", - "value_type": "STRING", - "default": "YES" - }, - { - "name": "GUIDE_RATE", - "value_type": "DOUBLE" - }, - { - "name": "GUIDE_RATE_DEF", - "value_type": "STRING" - }, - { - "name": "WATER_EXCEED_PROCEDURE", - "value_type": "STRING" - }, - { - "name": "GAS_EXCEED_PROCEDURE", - "value_type": "STRING" - }, - { - "name": "LIQUID_EXCEED_PROCEDURE", - "value_type": "STRING" - }, - { - "name": "RESERVOIR_FLUID_TARGET", - "value_type": "DOUBLE", - "dimension": "ReservoirVolume/Time", - "default": -9.99e+102 - }, - { - "name": "RESERVOIR_VOLUME_BALANCE", - "value_type": "DOUBLE", - "dimension": "1" - }, - { - "name": "WET_GAS_TARGET", - "value_type": "DOUBLE", - "dimension": "1" - }, - { - "name": "CALORIFIC_TARGET", - "value_type": "DOUBLE", - "dimension": "1" - }, - { - "name": "SURFACE_GAS_BALANCE", - "value_type": "DOUBLE", - "dimension": "1" - }, - { - "name": "SURFACE_WATER_BALANCE", - "value_type": "DOUBLE", - "dimension": "1" - }, - { - "name": "LINEAR_COMBINED_TARGET", - "value_type": "DOUBLE", - "dimension": "1" - }, - { - "name": "LIN_TARGET_EXCEED_PROCEDURE", - "value_type": "STRING" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/H/HEATCR b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/H/HEATCR deleted file mode 100644 index c2462ba6d8..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/H/HEATCR +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "HEATCR", - "sections": [ - "GRID" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "Energy/Length*Length*Length*AbsoluteTemperature" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/H/HEATCRT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/H/HEATCRT deleted file mode 100644 index 085dec0775..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/H/HEATCRT +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "HEATCRT", - "sections": [ - "GRID" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "Energy/Length*Length*Length*AbsoluteTemperature*AbsoluteTemperature" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/L/LIVEOIL b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/L/LIVEOIL deleted file mode 100644 index 087cca5fb2..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/L/LIVEOIL +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "LIVEOIL", - "sections": [ - "RUNSPEC" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/M/MW b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/M/MW deleted file mode 100644 index e400562318..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/M/MW +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "MW", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NUM_STATE_EQ" - }, - "comment": "Also note that there is no dimension for this item because there is no unit for 'molar weight' yet", - "items": [ - { - "name": "MOLAR_WEIGHT", - "value_type": "DOUBLE", - "size_type": "ALL" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/M/MWS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/M/MWS deleted file mode 100644 index 798056a97d..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/M/MWS +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "MWS", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NUM_STATE_EQ" - }, - "comment": "Also note that there is no dimension for this item because there is no unit for 'molar weight' yet", - "items": [ - { - "name": "MOLAR_WEIGHT", - "value_type": "DOUBLE", - "size_type": "ALL" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/O/OILCOMPR b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/O/OILCOMPR deleted file mode 100644 index 7a000c66c9..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/O/OILCOMPR +++ /dev/null @@ -1,29 +0,0 @@ -{ - "name": "OILCOMPR", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTPVT" - }, - "items": [ - { - "name": "COMPRESSIBILITY", - "value_type": "DOUBLE", - "default": 0 - }, - { - "name": "EXPANSION_COEFF_LINEAR", - "value_type": "DOUBLE", - "dimension": "1/AbsoluteTemperature", - "default": 0 - }, - { - "name": "EXPANSION_COEFF_QUADRATIC", - "value_type": "DOUBLE", - "dimension": "1/AbsoluteTemperature*AbsoluteTemperature", - "default": 0 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/O/OILMW b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/O/OILMW deleted file mode 100644 index d6092a6121..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/O/OILMW +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "OILMW", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTPVT" - }, - "items": [ - { - "name": "MOLAR_WEIGHT", - "value_type": "DOUBLE" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/O/OILVTIM b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/O/OILVTIM deleted file mode 100644 index d1add421a1..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/O/OILVTIM +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name": "OILVTIM", - "sections": [ - "PROPS" - ], - "items": [ - { - "name": "INTERPOLATION_METHOD", - "value_type": "STRING" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/O/OPTIONS3 b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/O/OPTIONS3 deleted file mode 100644 index e5f09ab39a..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/O/OPTIONS3 +++ /dev/null @@ -1,1450 +0,0 @@ -{ - "name": "OPTIONS3", - "sections": [ - "RUNSPEC", - "SCHEDULE" - ], - "size": 1, - "items": [ - { - "default": 0, - "value_type": "INT", - "name": "ITEM1" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM2" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM3" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM4" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM5" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM6" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM7" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM8" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM9" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM10" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM11" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM12" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM13" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM14" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM15" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM16" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM17" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM18" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM19" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM20" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM21" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM22" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM23" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM24" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM25" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM26" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM27" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM28" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM29" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM30" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM31" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM32" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM33" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM34" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM35" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM36" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM37" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM38" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM39" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM40" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM41" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM42" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM43" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM44" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM45" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM46" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM47" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM48" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM49" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM50" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM51" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM52" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM53" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM54" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM55" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM56" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM57" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM58" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM59" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM60" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM61" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM62" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM63" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM64" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM65" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM66" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM67" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM68" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM69" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM70" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM71" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM72" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM73" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM74" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM75" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM76" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM77" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM78" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM79" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM80" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM81" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM82" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM83" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM84" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM85" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM86" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM87" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM88" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM89" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM90" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM91" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM92" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM93" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM94" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM95" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM96" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM97" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM98" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM99" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM100" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM101" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM102" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM103" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM104" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM105" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM106" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM107" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM108" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM109" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM110" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM111" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM112" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM113" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM114" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM115" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM116" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM117" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM118" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM119" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM120" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM121" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM122" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM123" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM124" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM125" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM126" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM127" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM128" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM129" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM130" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM131" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM132" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM133" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM134" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM135" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM136" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM137" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM138" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM139" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM140" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM141" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM142" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM143" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM144" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM145" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM146" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM147" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM148" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM149" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM150" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM151" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM152" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM153" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM154" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM155" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM156" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM157" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM158" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM159" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM160" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM161" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM162" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM163" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM164" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM165" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM166" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM167" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM168" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM169" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM170" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM171" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM172" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM173" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM174" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM175" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM176" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM177" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM178" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM179" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM180" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM181" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM182" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM183" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM184" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM185" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM186" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM187" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM188" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM189" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM190" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM191" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM192" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM193" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM194" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM195" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM196" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM197" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM198" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM199" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM200" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM201" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM202" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM203" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM204" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM205" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM206" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM207" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM208" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM209" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM210" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM211" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM212" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM213" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM214" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM215" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM216" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM217" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM218" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM219" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM220" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM221" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM222" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM223" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM224" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM225" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM226" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM227" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM228" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM229" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM230" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM231" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM232" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM233" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM234" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM235" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM236" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM237" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM238" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM239" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM240" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM241" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM242" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM243" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM244" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM245" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM246" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM247" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM248" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM249" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM250" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM251" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM252" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM253" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM254" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM255" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM256" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM257" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM258" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM259" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM260" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM261" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM262" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM263" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM264" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM265" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM266" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM267" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM268" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM269" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM270" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM271" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM272" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM273" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM274" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM275" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM276" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM277" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM278" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM279" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM280" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM281" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM282" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM283" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM284" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM285" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM286" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM287" - }, - { - "default": 0, - "value_type": "INT", - "name": "ITEM288" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/P/PREF b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/P/PREF deleted file mode 100644 index 782f9aff30..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/P/PREF +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "PREF", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NUM_STATE_EQ" - }, - "comment": "Also note that there is no default for this item because the default is specified by STCOND", - "items": [ - { - "name": "PRESSURE", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "Pressure" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/P/PREFS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/P/PREFS deleted file mode 100644 index 8bb93593d0..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/P/PREFS +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "PREFS", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NUM_STATE_EQ" - }, - "comment": "Also note that there is no default for this item because the default is specified by STCOND", - "items": [ - { - "name": "PRESSURE", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "Pressure" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/S/STCOND b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/S/STCOND deleted file mode 100644 index a8d1dfbb6d..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/S/STCOND +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "STCOND", - "sections": [ - "PROPS" - ], - "size": 1, - "items": [ - { - "name": "TEMPERATURE", - "value_type": "DOUBLE", - "dimension": "Temperature", - "default": 15.56 - }, - { - "name": "PRESSURE", - "value_type": "DOUBLE", - "dimension": "Pressure", - "default": 1.01325 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/T/TEMPI b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/T/TEMPI deleted file mode 100644 index 6a0fa41ec9..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/T/TEMPI +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "TEMPI", - "sections": [ - "SOLUTION" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "Temperature" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/T/TEMPVD b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/T/TEMPVD deleted file mode 100644 index 44f8bf02f8..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/T/TEMPVD +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "TEMPVD", - "sections": [ - "PROPS", - "SOLUTION" - ], - "size": { - "keyword": "EQLDIMS", - "item": "NTEQUL" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "Length", - "Temperature" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/T/THCGAS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/T/THCGAS deleted file mode 100644 index ec003c0e73..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/T/THCGAS +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "THCGAS", - "sections": [ - "GRID" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "Energy/AbsoluteTemperature*Length*Time" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/T/THCOIL b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/T/THCOIL deleted file mode 100644 index e322ab3d6a..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/T/THCOIL +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "THCOIL", - "sections": [ - "GRID" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "Energy/AbsoluteTemperature*Length*Time" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/T/THCONSF b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/T/THCONSF deleted file mode 100644 index 90c77134bc..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/T/THCONSF +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "THCONSF", - "sections": [ - "GRID" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/T/THCROCK b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/T/THCROCK deleted file mode 100644 index 78d76fc31f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/T/THCROCK +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "THCROCK", - "sections": [ - "GRID" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "Energy/AbsoluteTemperature*Length*Time" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/T/THCWATER b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/T/THCWATER deleted file mode 100644 index 5eb03403e8..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/T/THCWATER +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "THCWATER", - "sections": [ - "GRID" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "Energy/AbsoluteTemperature*Length*Time" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/T/THERMAL b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/T/THERMAL deleted file mode 100644 index 6fb8e1e3d7..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/T/THERMAL +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "THERMAL", - "sections": [ - "RUNSPEC" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/T/TREF b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/T/TREF deleted file mode 100644 index fc5bbc6e4d..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/T/TREF +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "TREF", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NUM_STATE_EQ" - }, - "comment": "Also note that there is no default for this item because the default is specified by STCOND", - "items": [ - { - "name": "TEMPERATURE", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "AbsoluteTemperature" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/T/TREFS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/T/TREFS deleted file mode 100644 index 5523ed9837..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/T/TREFS +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "TREFS", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NUM_STATE_EQ" - }, - "comment": "Also note that there is no default for this item because the default is specified by STCOND", - "items": [ - { - "name": "TEMPERATURE", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "AbsoluteTemperature" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/W/WATDENT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/W/WATDENT deleted file mode 100644 index eda20b9923..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/W/WATDENT +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "WATDENT", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTPVT" - }, - "comment": "FIELD units which is the same the 3e-4/K for METRIC but four orders of magnitude off!)", - "items": [ - { - "name": "REFERENCE_TEMPERATURE", - "value_type": "DOUBLE", - "dimension": "AbsoluteTemperature", - "default": 293.15 - }, - { - "name": "EXPANSION_COEFF_LINEAR", - "value_type": "DOUBLE", - "dimension": "1/AbsoluteTemperature", - "default": 0.0003 - }, - { - "name": "EXPANSION_COEFF_QUADRATIC", - "value_type": "DOUBLE", - "dimension": "1/AbsoluteTemperature*AbsoluteTemperature", - "default": 3e-06 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/W/WINJTEMP b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/W/WINJTEMP deleted file mode 100644 index 47905fd9cf..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/W/WINJTEMP +++ /dev/null @@ -1,35 +0,0 @@ -{ - "name": "WINJTEMP", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "STEAM_QUALITY", - "value_type": "DOUBLE", - "default": 1 - }, - { - "name": "TEMPERATURE", - "value_type": "DOUBLE", - "dimension": "Temperature", - "default": 15.56 - }, - { - "name": "PRESSURE", - "value_type": "DOUBLE", - "dimension": "Pressure", - "default": 0 - }, - { - "name": "ENTHALPY", - "value_type": "DOUBLE", - "dimension": "Energy/Mass", - "default": 0 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/Z/ZFACT1 b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/Z/ZFACT1 deleted file mode 100644 index 77591bf2d9..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/Z/ZFACT1 +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "ZFACT1", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NUM_STATE_EQ" - }, - "comment": "support default values for items of unknown size", - "items": [ - { - "name": "Z0", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "1" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/Z/ZFACT1S b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/Z/ZFACT1S deleted file mode 100644 index 640ec8800d..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/Z/ZFACT1S +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "ZFACT1S", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NUM_STATE_EQ" - }, - "comment": "support default values for items of unknown size", - "items": [ - { - "name": "Z0", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "1" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/Z/ZFACTOR b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/Z/ZFACTOR deleted file mode 100644 index e8ddc04390..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/Z/ZFACTOR +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "ZFACTOR", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NUM_STATE_EQ" - }, - "comment": "support default values for items of unknown size", - "items": [ - { - "name": "Z0", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "1" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/Z/ZFACTORS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/Z/ZFACTORS deleted file mode 100644 index 3239888d78..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/001_Eclipse300/Z/ZFACTORS +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "ZFACTORS", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NUM_STATE_EQ" - }, - "comment": "support default values for items of unknown size", - "items": [ - { - "name": "Z0", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "1" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/002_Frontsim/N/NOGRAV b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/002_Frontsim/N/NOGRAV deleted file mode 100644 index ff36a8ce28..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/002_Frontsim/N/NOGRAV +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "NOGRAV", - "sections": [ - "RUNSPEC" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/B/BC b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/B/BC deleted file mode 100644 index 0c16119af1..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/B/BC +++ /dev/null @@ -1,51 +0,0 @@ -{ - "name": "BC", - "sections": [ - "SOLUTION" - ], - "items": [ - { - "name": "I1", - "value_type": "INT" - }, - { - "name": "I2", - "value_type": "INT" - }, - { - "name": "J1", - "value_type": "INT" - }, - { - "name": "J2", - "value_type": "INT" - }, - { - "name": "K1", - "value_type": "INT" - }, - { - "name": "K2", - "value_type": "INT" - }, - { - "name": "TYPE", - "value_type": "STRING" - }, - { - "name": "DIRECTION", - "value_type": "STRING" - }, - { - "name": "COMPONENT", - "value_type": "STRING", - "default": "NONE" - }, - { - "name": "RATE", - "value_type": "DOUBLE", - "dimension": "Mass/Time*Length*Length", - "default": 0 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/E/EXIT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/E/EXIT deleted file mode 100644 index 4ed2cb2282..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/E/EXIT +++ /dev/null @@ -1,7 +0,0 @@ -{"name" : "EXIT", -"size" : 1, - "sections" : ["SCHEDULE"], - "items" : [ - {"name" : "STATUS_CODE", - "value_type" : "INT", - "default" : 0 }]} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/G/GASDENT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/G/GASDENT deleted file mode 100644 index 98362984c5..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/G/GASDENT +++ /dev/null @@ -1,30 +0,0 @@ -{ - "name": "GASDENT", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTPVT" - }, - "items": [ - { - "name": "REFERENCE_TEMPERATURE", - "value_type": "DOUBLE", - "dimension": "AbsoluteTemperature", - "default": 293.15 - }, - { - "name": "EXPANSION_COEFF_LINEAR", - "value_type": "DOUBLE", - "dimension": "1/AbsoluteTemperature", - "default": 0 - }, - { - "name": "EXPANSION_COEFF_QUADRATIC", - "value_type": "DOUBLE", - "dimension": "1/AbsoluteTemperature*AbsoluteTemperature", - "default": 0 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/G/GCOMPIDX b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/G/GCOMPIDX deleted file mode 100644 index 2d79b6385a..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/G/GCOMPIDX +++ /dev/null @@ -1,13 +0,0 @@ -{ - "name": "GCOMPIDX", - "sections": [ - "RUNSPEC" - ], - "size": 1, - "items": [ - { - "name": "GAS_COMPONENT_INDEX", - "value_type": "INT" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/G/GRUPRIG b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/G/GRUPRIG deleted file mode 100644 index 190723e727..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/G/GRUPRIG +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "GRUPRIG", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "GROUP_NAME", - "value_type": "STRING" - }, - { - "name": "WORKRIGNUM", - "value_type": "INT", - "default": 0 - }, - { - "name": "DRILRIGNUM", - "value_type": "INT", - "default": 0 - }, - { - "name": "ADD", - "value_type": "STRING", - "default": "ADD" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/M/MINPVFIL b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/M/MINPVFIL deleted file mode 100644 index 7ff5854f95..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/M/MINPVFIL +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "MINPVFIL", - "sections": [ - "GRID" - ], - "size": 1, - "items": [ - { - "name": "VALUE", - "value_type": "DOUBLE", - "default": 1e-06, - "dimension": "ReservoirVolume" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/O/OCOMPIDX b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/O/OCOMPIDX deleted file mode 100644 index 3f8a40b42b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/O/OCOMPIDX +++ /dev/null @@ -1,13 +0,0 @@ -{ - "name": "OCOMPIDX", - "sections": [ - "RUNSPEC" - ], - "size": 1, - "items": [ - { - "name": "OIL_COMPONENT_INDEX", - "value_type": "INT" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/O/OILDENT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/O/OILDENT deleted file mode 100644 index 754cac5d52..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/O/OILDENT +++ /dev/null @@ -1,30 +0,0 @@ -{ - "name": "OILDENT", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "TABDIMS", - "item": "NTPVT" - }, - "items": [ - { - "name": "REFERENCE_TEMPERATURE", - "value_type": "DOUBLE", - "dimension": "AbsoluteTemperature", - "default": 293.15 - }, - { - "name": "EXPANSION_COEFF_LINEAR", - "value_type": "DOUBLE", - "dimension": "1/AbsoluteTemperature", - "default": 0 - }, - { - "name": "EXPANSION_COEFF_QUADRATIC", - "value_type": "DOUBLE", - "dimension": "1/AbsoluteTemperature*AbsoluteTemperature", - "default": 0 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/P/PERMFACT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/P/PERMFACT deleted file mode 100644 index 3936e806fe..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/P/PERMFACT +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "PERMFACT", - "sections": [ - "PROPS" - ], - "items": [ - { - "name": "POROSITY", - "value_type": "DOUBLE", - "dimension": "1" - }, - { - "name": "PERMFACTMULT", - "value_type": "DOUBLE", - "dimension": "1" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/P/PINTDIMS b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/P/PINTDIMS deleted file mode 100644 index 6643918f73..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/P/PINTDIMS +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "PINTDIMS", - "sections": [ - "RUNSPEC" - ], - "size": 1, - "items": [ - { - "name": "NTSKWAT", - "value_type": "INT", - "default": 1 - }, - { - "name": "NTSKPOLY", - "value_type": "INT", - "default": 1 - }, - { - "name": "NTPMWINJ", - "value_type": "INT", - "default": 1 - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/P/PLYMWINJ b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/P/PLYMWINJ deleted file mode 100644 index 544eaa1a19..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/P/PLYMWINJ +++ /dev/null @@ -1,38 +0,0 @@ -{ - "name": "PLYMWINJ", - "sections": [ - "PROPS" - ], - "records": [ - [ - { - "name": "TABLE_NUMBER", - "value_type": "INT" - } - ], - [ - { - "name": "THROUGHPUT", - "value_type": "DOUBLE", - "dimension": "Length", - "size_type": "ALL" - } - ], - [ - { - "name": "VELOCITY", - "value_type": "DOUBLE", - "dimension": "Length/Time", - "size_type": "ALL" - } - ], - [ - { - "name": "MOLECULARWEIGHT", - "value_type": "DOUBLE", - "dimension": "1", - "size_type": "ALL" - } - ] - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/P/PLYVMH b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/P/PLYVMH deleted file mode 100644 index aa969c87b8..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/P/PLYVMH +++ /dev/null @@ -1,32 +0,0 @@ -{ - "name": "PLYVMH", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "REGDIMS", - "item": "NPLMIX" - }, - "items": [ - { - "name": "K_MH", - "value_type": "DOUBLE", - "dimension": "1" - }, - { - "name": "A_MH", - "value_type": "DOUBLE", - "dimension": "1" - }, - { - "name": "GAMMA", - "value_type": "DOUBLE", - "dimension": "1" - }, - { - "name": "KAPPA", - "value_type": "DOUBLE", - "dimension": "1" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/P/POLYMW b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/P/POLYMW deleted file mode 100644 index 7db077f17e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/P/POLYMW +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "POLYMW", - "sections": [ - "RUNSPEC" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/P/PRECSALT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/P/PRECSALT deleted file mode 100644 index e584e947f1..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/P/PRECSALT +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "PRECSALT", - "sections": [ - "RUNSPEC" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/P/PVTGW b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/P/PVTGW deleted file mode 100644 index 4c992bff8e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/P/PVTGW +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "PVTGW", - "sections": [ - "PROPS" - ], - "num_tables": { - "keyword": "TABDIMS", - "item": "NTPVT" - }, - "items": [ - { - "name": "GAS_PRESSURE", - "value_type": "DOUBLE", - "dimension": "Pressure" - }, - { - "name": "DATA", - "size_type": "ALL", - "value_type": "DOUBLE", - "dimension": [ - "OilDissolutionFactor", - "OilDissolutionFactor", - "Viscosity" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/P/PVTGWO b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/P/PVTGWO deleted file mode 100644 index 4912cadb00..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/P/PVTGWO +++ /dev/null @@ -1,28 +0,0 @@ -{ - "name": "PVTGWO", - "sections": [ - "PROPS" - ], - "num_tables": { - "keyword": "TABDIMS", - "item": "NTPVT" - }, - "items": [ - { - "name": "GAS_PRESSURE", - "value_type": "DOUBLE", - "dimension": "Pressure" - }, - { - "name": "DATA", - "size_type": "ALL", - "value_type": "DOUBLE", - "dimension": [ - "OilDissolutionFactor", - "OilDissolutionFactor", - "OilDissolutionFactor", - "Viscosity" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/P/PYACTION b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/P/PYACTION deleted file mode 100644 index 690393e611..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/P/PYACTION +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "PYACTION", - "sections": [ - "SCHEDULE" - ], - "size": 2, - "records": [ - [ - { - "name": "NAME", - "value_type": "STRING" - }, - { - "name": "RUN_COUNT", - "value_type": "STRING", - "default": "SINGLE" - } - ], - [ - { - "name": "FILENAME", - "value_type": "STRING" - } - ] - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/P/PYINPUT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/P/PYINPUT deleted file mode 100644 index 0c8db0608c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/P/PYINPUT +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "PYINPUT", - "sections": [ - "RUNSPEC", - "GRID", - "EDIT", - "PROPS", - "REGIONS", - "SOLUTION", - "SUMMARY", - "SCHEDULE" - ], - "code": { - "end": "PYEND" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/R/RHO b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/R/RHO deleted file mode 100644 index 17f6d482ba..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/R/RHO +++ /dev/null @@ -1,11 +0,0 @@ -{ - "name": "RHO", - "sections": [ - "GRID" - ], - "data": { - "value_type": "DOUBLE", - "default": 0, - "dimension": "Density" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/R/RWGSALT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/R/RWGSALT deleted file mode 100644 index 1a2ae3fdbb..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/R/RWGSALT +++ /dev/null @@ -1,29 +0,0 @@ -{ - "name": "RWGSALT", - "sections": [ - "PROPS" - ], - "num_tables": { - "keyword": "TABDIMS", - "item": "NTPVT" - }, - "items": [ - { - "name": "RESERVOIR_PRESSURE", - "value_type": "DOUBLE", - "dimension": "Pressure" - }, - { - "name": "SALT_CONCENTRATION", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": "Mass/Length*Length*Length" - }, - { - "name": "DATA", - "size_type": "ALL", - "value_type":"DOUBLE", - "dimension": "OilDissolutionFactor" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/S/SALTPVD b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/S/SALTPVD deleted file mode 100644 index 37cc63867d..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/S/SALTPVD +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "SALTPVD", - "sections": [ - "SOLUTION" - ], - "size": { - "keyword": "EQLDIMS", - "item": "NTEQUL" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "Length", - "Density", - "1" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/S/SALTSOL b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/S/SALTSOL deleted file mode 100644 index d8d81e4adc..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/S/SALTSOL +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "SALTSOL", - "sections": [ - "PROPS" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "Density" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/S/SKPRPOLY b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/S/SKPRPOLY deleted file mode 100644 index f6d34a8eb4..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/S/SKPRPOLY +++ /dev/null @@ -1,43 +0,0 @@ -{ - "name": "SKPRPOLY", - "sections": [ - "PROPS" - ], - "records": [ - [ - { - "name": "TABLE_NUMBER", - "value_type": "INT" - }, - { - "name": "POLYMERCONCENTRATION", - "value_type": "DOUBLE", - "dimension": "PolymerDensity" - } - ], - [ - { - "name": "THROUGHPUT", - "value_type": "DOUBLE", - "dimension": "Length", - "size_type": "ALL" - } - ], - [ - { - "name": "VELOCITY", - "value_type": "DOUBLE", - "dimension": "Length/Time", - "size_type": "ALL" - } - ], - [ - { - "name": "SKINPRESSURE", - "value_type": "DOUBLE", - "dimension": "Pressure", - "size_type": "ALL" - } - ] - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/S/SKPRWAT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/S/SKPRWAT deleted file mode 100644 index 83cb092e5a..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/S/SKPRWAT +++ /dev/null @@ -1,38 +0,0 @@ -{ - "name": "SKPRWAT", - "sections": [ - "PROPS" - ], - "records": [ - [ - { - "name": "TABLE_NUMBER", - "value_type": "INT" - } - ], - [ - { - "name": "THROUGHPUT", - "value_type": "DOUBLE", - "dimension": "Length", - "size_type": "ALL" - } - ], - [ - { - "name": "VELOCITY", - "value_type": "DOUBLE", - "dimension": "Length/Time", - "size_type": "ALL" - } - ], - [ - { - "name": "SKINPRESSURE", - "value_type": "DOUBLE", - "dimension": "Pressure", - "size_type": "ALL" - } - ] - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/S/SPOLYMW b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/S/SPOLYMW deleted file mode 100644 index e7a4bc47b1..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/S/SPOLYMW +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "SPOLYMW", - "sections": [ - "SOLUTION" - ], - "data": { - "value_type": "DOUBLE", - "dimension": "1" - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/T/TLPMIXPA b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/T/TLPMIXPA deleted file mode 100644 index 0ce31e8400..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/T/TLPMIXPA +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "TLPMIXPA", - "sections": [ - "PROPS" - ], - "size": { - "keyword": "MISCIBLE", - "item": "NTMISC" - }, - "items": [ - { - "name": "DATA", - "value_type": "DOUBLE", - "size_type": "ALL", - "dimension": [ - "Pressure", - "1" - ] - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/V/VAPWAT b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/V/VAPWAT deleted file mode 100644 index 5b8207df0a..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/V/VAPWAT +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "VAPWAT", - "sections": [ - "RUNSPEC" - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/W/WPMITAB b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/W/WPMITAB deleted file mode 100644 index cc6f5c9756..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/W/WPMITAB +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "WPMITAB", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "TABLE_NUMBER", - "value_type": "INT" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/W/WSKPTAB b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/W/WSKPTAB deleted file mode 100644 index 6b27fe77e9..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/900_OPM/W/WSKPTAB +++ /dev/null @@ -1,20 +0,0 @@ -{ - "name": "WSKPTAB", - "sections": [ - "SCHEDULE" - ], - "items": [ - { - "name": "WELL", - "value_type": "STRING" - }, - { - "name": "TABLE_NUMBER_WATER", - "value_type": "INT" - }, - { - "name": "TABLE_NUMBER_POLYMER", - "value_type": "INT" - } - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/keyword_list.cmake b/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/keyword_list.cmake deleted file mode 100644 index 430f978817..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/src/opm/parser/eclipse/share/keywords/keyword_list.cmake +++ /dev/null @@ -1,1115 +0,0 @@ -# In this file all the JSon files with keywords should be listed -# explicitly. In the root CMakeLists.txt which includes this file -# individual dependencies on all the Json files is established, in -# addition to an explicit dependency on this file. -# -# When a keyword is added here the parser will recognize the keyword and -# correctly internalize it as a DeckKeyword, but the simulator 'flow' in -# opm-simulators will not automatically do anything sensible with the keyword, -# you are therefore encouraged to go to the opm-simulators repository and update -# the file: opm/autodiff/MissingFeatures.cpp - -set( keywords - 000_Eclipse100/A/ACTDIMS - 000_Eclipse100/A/ACTION - 000_Eclipse100/A/ACTIONG - 000_Eclipse100/A/ACTIONR - 000_Eclipse100/A/ACTIONS - 000_Eclipse100/A/ACTIONW - 000_Eclipse100/A/ACTIONX - 000_Eclipse100/A/ACTNUM - 000_Eclipse100/A/ACTPARAM - 000_Eclipse100/A/ADD - 000_Eclipse100/A/ADDREG - 000_Eclipse100/A/ADDZCORN - 000_Eclipse100/A/ADSALNOD - 000_Eclipse100/A/ADSORP - 000_Eclipse100/A/AITS - 000_Eclipse100/A/AITSOFF - 000_Eclipse100/A/ALL - 000_Eclipse100/A/ALKADS - 000_Eclipse100/A/ALKALINE - 000_Eclipse100/A/ALKROCK - 000_Eclipse100/A/ALPOLADS - 000_Eclipse100/A/ALSURFAD - 000_Eclipse100/A/ALSURFST - 000_Eclipse100/A/AMALGAM - 000_Eclipse100/A/API - 000_Eclipse100/A/APIGROUP - 000_Eclipse100/A/APILIM - 000_Eclipse100/A/APIVD - 000_Eclipse100/A/AQANCONL - 000_Eclipse100/A/AQANNC - 000_Eclipse100/A/AQANTRC - 000_Eclipse100/A/AQUALIST - 000_Eclipse100/A/AQUANCON - 000_Eclipse100/A/AQUCHGAS - 000_Eclipse100/A/AQUCHWAT - 000_Eclipse100/A/AQUCON - 000_Eclipse100/A/AQUCT - 000_Eclipse100/A/AQUCWFAC - 000_Eclipse100/A/AQUDIMS - 000_Eclipse100/A/AQUFET - 000_Eclipse100/A/AQUFETP - 000_Eclipse100/A/AQUFLUX - 000_Eclipse100/A/AQUIFER_PROBE_ANALYTIC - 000_Eclipse100/A/AQUIFER_PROBE_NUMERIC - 000_Eclipse100/A/AQUNNC - 000_Eclipse100/A/AQUNUM - 000_Eclipse100/A/AQUTAB - 000_Eclipse100/A/AUTOCOAR - 000_Eclipse100/A/AUTOREF - 000_Eclipse100/B/BDENSITY - 000_Eclipse100/B/BIGMODEL - 000_Eclipse100/B/BGGI - 000_Eclipse100/B/BLACKOIL - 000_Eclipse100/B/BLOCK_PROBE - 000_Eclipse100/B/BOGI - 000_Eclipse100/B/BOUNDARY - 000_Eclipse100/B/BOX - 000_Eclipse100/B/BPARA - 000_Eclipse100/B/BPIDIMS - 000_Eclipse100/B/BRANPROP - 000_Eclipse100/B/BRINE - 000_Eclipse100/B/BTOBALFA - 000_Eclipse100/B/BTOBALFV - 000_Eclipse100/C/CALTRAC - 000_Eclipse100/C/CARFIN - 000_Eclipse100/C/CART - 000_Eclipse100/C/CBMOPTS - 000_Eclipse100/C/CECON - 000_Eclipse100/C/CECONT - 000_Eclipse100/C/COAL - 000_Eclipse100/C/COALADS - 000_Eclipse100/C/COALNUM - 000_Eclipse100/C/COALPP - 000_Eclipse100/C/COARSEN - 000_Eclipse100/C/COLLAPSE - 000_Eclipse100/C/COLUMNS - 000_Eclipse100/C/COMPDAT - 000_Eclipse100/C/COMPDATX - 000_Eclipse100/C/COMPFLSH - 000_Eclipse100/C/COMPIMB - 000_Eclipse100/C/COMPINJK - 000_Eclipse100/C/COMPLMPL - 000_Eclipse100/C/COMPLUMP - 000_Eclipse100/C/COMPOFF - 000_Eclipse100/C/COMPORD - 000_Eclipse100/C/COMPRIV - 000_Eclipse100/C/COMPRP - 000_Eclipse100/C/COMPRPL - 000_Eclipse100/C/COMPSEGL - 000_Eclipse100/C/COMPSEGS - 000_Eclipse100/C/COMPVE - 000_Eclipse100/C/COMPVEL - 000_Eclipse100/C/CONNECTION_PROBE - 000_Eclipse100/C/COORD - 000_Eclipse100/C/COORDSYS - 000_Eclipse100/C/COPY - 000_Eclipse100/C/COPYBOX - 000_Eclipse100/C/COPYREG - 000_Eclipse100/C/CPR - 000_Eclipse100/C/CPIFACT - 000_Eclipse100/C/CPIFACTL - 000_Eclipse100/C/CRITPERM - 000_Eclipse100/C/CSKIN - 000_Eclipse100/D/DATE - 000_Eclipse100/D/DATES - 000_Eclipse100/D/DATUM - 000_Eclipse100/D/DATUMR - 000_Eclipse100/D/DATUMRX - 000_Eclipse100/D/DCQDEFN - 000_Eclipse100/D/DEBUG - 000_Eclipse100/D/DELAYACT - 000_Eclipse100/D/DENSITY - 000_Eclipse100/D/DEPTH - 000_Eclipse100/D/DEPTHTAB - 000_Eclipse100/D/DEPTHZ - 000_Eclipse100/D/DIAGDISP - 000_Eclipse100/D/DIFF - 000_Eclipse100/D/DIFFC - 000_Eclipse100/D/DIFFCOAL - 000_Eclipse100/D/DIFFDP - 000_Eclipse100/D/DIFFMMF - 000_Eclipse100/D/DIFFMR - 000_Eclipse100/D/DIFFMTHT - 000_Eclipse100/D/DIFFMX - 000_Eclipse100/D/DIFFMY - 000_Eclipse100/D/DIFFMZ - 000_Eclipse100/D/DIFFR - 000_Eclipse100/D/DIFFTHT - 000_Eclipse100/D/DIFFUSE - 000_Eclipse100/D/DIFFX - 000_Eclipse100/D/DIFFY - 000_Eclipse100/D/DIFFZ - 000_Eclipse100/D/DIMENS - 000_Eclipse100/D/DIMPES - 000_Eclipse100/D/DIMPLICT - 000_Eclipse100/D/DISGAS - 000_Eclipse100/D/DISPDIMS - 000_Eclipse100/D/DISPERSE - 000_Eclipse100/D/DOMAINS - 000_Eclipse100/D/DPGRID - 000_Eclipse100/D/DPKRMOD - 000_Eclipse100/D/DPNUM - 000_Eclipse100/D/DR - 000_Eclipse100/D/DRILPRI - 000_Eclipse100/D/DRSDT - 000_Eclipse100/D/DRSDTR - 000_Eclipse100/D/DRV - 000_Eclipse100/D/DRVDT - 000_Eclipse100/D/DRVDTR - 000_Eclipse100/D/DSPDEINT - 000_Eclipse100/D/DTHETA - 000_Eclipse100/D/DTHETAV - 000_Eclipse100/D/DUALPERM - 000_Eclipse100/D/DUALPORO - 000_Eclipse100/D/DUMPFLUX - 000_Eclipse100/D/DUMPCUPL - 000_Eclipse100/D/DYNAMICR - 000_Eclipse100/D/DYNRDIMS - 000_Eclipse100/D/DX - 000_Eclipse100/D/DXV - 000_Eclipse100/D/DY - 000_Eclipse100/D/DYV - 000_Eclipse100/D/DZ - 000_Eclipse100/D/DZMATRIX - 000_Eclipse100/D/DZMTRX - 000_Eclipse100/D/DZMTRXV - 000_Eclipse100/D/DZNET - 000_Eclipse100/E/ECHO - 000_Eclipse100/E/ECLMC - 000_Eclipse100/E/EDIT - 000_Eclipse100/E/EDITNNC - 000_Eclipse100/E/EDITNNCR - 000_Eclipse100/E/EHYSTR - 000_Eclipse100/E/EHYSTRR - 000_Eclipse100/E/END - 000_Eclipse100/E/ENDACTIO - 000_Eclipse100/E/ENDBOX - 000_Eclipse100/E/ENDDYN - 000_Eclipse100/E/ENDINC - 000_Eclipse100/E/ENDFIN - 000_Eclipse100/E/ENDNUM - 000_Eclipse100/E/ENDPOINT_SPECIFIERS - 000_Eclipse100/E/ENDSCALE - 000_Eclipse100/E/ENDSKIP - 000_Eclipse100/E/ENKRVD - 000_Eclipse100/E/ENPCVD - 000_Eclipse100/E/ENPTVD - 000_Eclipse100/E/ENSPCVD - 000_Eclipse100/E/EPSDBGS - 000_Eclipse100/E/EPSDEBUG - 000_Eclipse100/E/EQLDIMS - 000_Eclipse100/E/EQLNUM - 000_Eclipse100/E/EQLOPTS - 000_Eclipse100/E/EQLZCORN - 000_Eclipse100/E/EQUALREG - 000_Eclipse100/E/EQUALS - 000_Eclipse100/E/EQUIL - 000_Eclipse100/E/ESSNODE - 000_Eclipse100/E/EXCAVATE - 000_Eclipse100/E/EXCEL - 000_Eclipse100/E/EXTFIN - 000_Eclipse100/E/EXTHOST - 000_Eclipse100/E/EXTRAPMS - 000_Eclipse100/E/EXTREPGL - 000_Eclipse100/F/FAULTDIM - 000_Eclipse100/F/FAULTS - 000_Eclipse100/F/FBHPDEF - 000_Eclipse100/F/FHERCHBL - 000_Eclipse100/F/FIELD - 000_Eclipse100/F/FIELD_PROBE - 000_Eclipse100/F/FILEUNIT - 000_Eclipse100/F/FILLEPS - 000_Eclipse100/F/FIPNUM - 000_Eclipse100/F/FIPOWG - 000_Eclipse100/F/FIPSEP - 000_Eclipse100/F/FIP_PROBE - 000_Eclipse100/F/FLUXNUM - 000_Eclipse100/F/FLUXREG - 000_Eclipse100/F/FLUXTYPE - 000_Eclipse100/F/FMTHMD - 000_Eclipse100/F/FMTIN - 000_Eclipse100/F/FMTOUT - 000_Eclipse100/F/FMWSET - 000_Eclipse100/F/FOAM - 000_Eclipse100/F/FOAMADS - 000_Eclipse100/F/FOAMDCYO - 000_Eclipse100/F/FOAMDCYW - 000_Eclipse100/F/FOAMFCN - 000_Eclipse100/F/FOAMFRM - 000_Eclipse100/F/FOAMFSC - 000_Eclipse100/F/FOAMFSO - 000_Eclipse100/F/FOAMFST - 000_Eclipse100/F/FOAMFSW - 000_Eclipse100/F/FOAMMOB - 000_Eclipse100/F/FOAMMOBP - 000_Eclipse100/F/FOAMMOBS - 000_Eclipse100/F/FOAMOPTS - 000_Eclipse100/F/FOAMROCK - 000_Eclipse100/F/FORMFEED - 000_Eclipse100/F/FRICTION - 000_Eclipse100/F/FULLIMP - 000_Eclipse100/G/GAS - 000_Eclipse100/G/GASBEGIN - 000_Eclipse100/G/GASCONC - 000_Eclipse100/G/GASEND - 000_Eclipse100/G/GASFCOMP - 000_Eclipse100/G/GASFDECR - 000_Eclipse100/G/GASFDELC - 000_Eclipse100/G/GASFIELD - 000_Eclipse100/G/GASFTARG - 000_Eclipse100/G/GASMONTH - 000_Eclipse100/G/GASPERIO - 000_Eclipse100/G/GASSATC - 000_Eclipse100/G/GASYEAR - 000_Eclipse100/G/GCALECON - 000_Eclipse100/G/GCONCAL - 000_Eclipse100/G/GCONENG - 000_Eclipse100/G/GCONINJE - 000_Eclipse100/G/GCONPRI - 000_Eclipse100/G/GCONPROD - 000_Eclipse100/G/GCONSALE - 000_Eclipse100/G/GCONSUMP - 000_Eclipse100/G/GCONTOL - 000_Eclipse100/G/GCUTBACK - 000_Eclipse100/G/GCUTBACT - 000_Eclipse100/G/GCVD - 000_Eclipse100/G/GDCQ - 000_Eclipse100/G/GDCQECON - 000_Eclipse100/G/GDFILE - 000_Eclipse100/G/GDIMS - 000_Eclipse100/G/GDORIENT - 000_Eclipse100/G/GDRILPOT - 000_Eclipse100/G/GECON - 000_Eclipse100/G/GECONT - 000_Eclipse100/G/GEFAC - 000_Eclipse100/G/GETDATA - 000_Eclipse100/G/GETGLOB - 000_Eclipse100/G/GI - 000_Eclipse100/G/GIALL - 000_Eclipse100/G/GIMODEL - 000_Eclipse100/G/GINODE - 000_Eclipse100/G/GLIFTLIM - 000_Eclipse100/G/GLIFTOPT - 000_Eclipse100/G/GMWSET - 000_Eclipse100/G/GNETDP - 000_Eclipse100/G/GNETINJE - 000_Eclipse100/G/GNETPUMP - 000_Eclipse100/G/GPMAINT - 000_Eclipse100/G/GRADGRUP - 000_Eclipse100/G/GRADRESV - 000_Eclipse100/G/GRADRFT - 000_Eclipse100/G/GRADWELL - 000_Eclipse100/G/GRAVCONS - 000_Eclipse100/G/GRAVDR - 000_Eclipse100/G/GRAVDRB - 000_Eclipse100/G/GRAVDRM - 000_Eclipse100/G/GRAVITY - 000_Eclipse100/G/GRDREACH - 000_Eclipse100/G/GRID - 000_Eclipse100/G/GRIDFILE - 000_Eclipse100/G/GRIDOPTS - 000_Eclipse100/G/GRIDUNIT - 000_Eclipse100/G/GROUP_PROBE - 000_Eclipse100/G/GRUPMAST - 000_Eclipse100/G/GRUPNET - 000_Eclipse100/G/GRUPRIG - 000_Eclipse100/G/GRUPSLAV - 000_Eclipse100/G/GRUPTARG - 000_Eclipse100/G/GRUPTREE - 000_Eclipse100/G/GSATINJE - 000_Eclipse100/G/GSATPROD - 000_Eclipse100/G/GSEPCOND - 000_Eclipse100/G/GSSCPTST - 000_Eclipse100/G/GSWINGF - 000_Eclipse100/G/GTADD - 000_Eclipse100/G/GTMULT - 000_Eclipse100/G/GUIDECAL - 000_Eclipse100/G/GUIDERAT - 000_Eclipse100/G/GUPFREQ - 000_Eclipse100/G/GWRTWCV - 000_Eclipse100/H/HALFTRAN - 000_Eclipse100/H/HAxxxxxx - 000_Eclipse100/H/HBNUM - 000_Eclipse100/H/HDISP - 000_Eclipse100/H/HMAQUCT - 000_Eclipse100/H/HMAQUFET - 000_Eclipse100/H/HMAQUNUM - 000_Eclipse100/H/HMDIMS - 000_Eclipse100/H/HMFAULTS - 000_Eclipse100/H/HMMLAQUN - 000_Eclipse100/H/HMMLCTAQ - 000_Eclipse100/H/HMMLFTAQ - 000_Eclipse100/H/HMMLTWCN - 000_Eclipse100/H/HMMULTxx - 000_Eclipse100/H/HMMULTFT - 000_Eclipse100/H/HMMULTSG - 000_Eclipse100/H/HMPROPS - 000_Eclipse100/H/HMROCK - 000_Eclipse100/H/HMROCKT - 000_Eclipse100/H/HMRREF - 000_Eclipse100/H/HMWELCON - 000_Eclipse100/H/HMWPIMLT - 000_Eclipse100/H/HMxxxxxx - 000_Eclipse100/H/HRFIN - 000_Eclipse100/H/HWKRO - 000_Eclipse100/H/HWKRORG - 000_Eclipse100/H/HWKRORW - 000_Eclipse100/H/HWKRW - 000_Eclipse100/H/HWKRWR - 000_Eclipse100/H/HWPCW - 000_Eclipse100/H/HWSNUM - 000_Eclipse100/H/HWSOGCR - 000_Eclipse100/H/HWSOWCR - 000_Eclipse100/H/HWSWCR - 000_Eclipse100/H/HWSWL - 000_Eclipse100/H/HWSWLPC - 000_Eclipse100/H/HWSWU - 000_Eclipse100/H/HXFIN - 000_Eclipse100/H/HYDRHEAD - 000_Eclipse100/H/HYFIN - 000_Eclipse100/H/HYMOBGDR - 000_Eclipse100/H/HYST - 000_Eclipse100/H/HYSTCHCK - 000_Eclipse100/H/HZFIN - 000_Eclipse100/I/IHOST - 000_Eclipse100/I/IMBNUM - 000_Eclipse100/I/IMBNUMMF - 000_Eclipse100/I/IMKRVD - 000_Eclipse100/I/IMPCVD - 000_Eclipse100/I/IMPES - 000_Eclipse100/I/IMPLICIT - 000_Eclipse100/I/IMPORT - 000_Eclipse100/I/IMPTVD - 000_Eclipse100/I/IMSPCVD - 000_Eclipse100/I/INCLUDE - 000_Eclipse100/I/INIT - 000_Eclipse100/I/INRAD - 000_Eclipse100/I/INSPEC - 000_Eclipse100/I/INTPC - 000_Eclipse100/I/IONROCK - 000_Eclipse100/I/IONXROCK - 000_Eclipse100/I/IONXSURF - 000_Eclipse100/I/IPCG - 000_Eclipse100/I/IPCW - 000_Eclipse100/I/ISGCR - 000_Eclipse100/I/ISGL - 000_Eclipse100/I/ISGLPC - 000_Eclipse100/I/ISGU - 000_Eclipse100/I/ISOGCR - 000_Eclipse100/I/ISOLNUM - 000_Eclipse100/I/ISOWCR - 000_Eclipse100/I/ISWCR - 000_Eclipse100/I/ISWL - 000_Eclipse100/I/ISWLPC - 000_Eclipse100/I/ISWU - 000_Eclipse100/J/JFUNC - 000_Eclipse100/J/JFUNCR - 000_Eclipse100/K/KRNUM - 000_Eclipse100/K/KRNUMMF - 000_Eclipse100/L/LAB - 000_Eclipse100/L/LANGMPL - 000_Eclipse100/L/LANGMUIR - 000_Eclipse100/L/LANGSOLV - 000_Eclipse100/L/LCUNIT - 000_Eclipse100/L/LGR - 000_Eclipse100/L/LGRCOPY - 000_Eclipse100/L/LGRFREE - 000_Eclipse100/L/LGRLOCK - 000_Eclipse100/L/LGROFF - 000_Eclipse100/L/LGRON - 000_Eclipse100/L/LICENSES - 000_Eclipse100/L/LIFTOPT - 000_Eclipse100/L/LINCOM - 000_Eclipse100/L/LINKPERM - 000_Eclipse100/L/LKRO - 000_Eclipse100/L/LKRORG - 000_Eclipse100/L/LKRORW - 000_Eclipse100/L/LKRW - 000_Eclipse100/L/LKRWR - 000_Eclipse100/L/LOAD - 000_Eclipse100/L/LOWSALT - 000_Eclipse100/L/LPCW - 000_Eclipse100/L/LSALTFNC - 000_Eclipse100/L/LSLTWNUM - 000_Eclipse100/L/LSNUM - 000_Eclipse100/L/LSOGCR - 000_Eclipse100/L/LSOWCR - 000_Eclipse100/L/LSWCR - 000_Eclipse100/L/LSWL - 000_Eclipse100/L/LSWLPC - 000_Eclipse100/L/LSWU - 000_Eclipse100/L/LTOSIGMA - 000_Eclipse100/L/LWKRO - 000_Eclipse100/L/LWKRORG - 000_Eclipse100/L/LWKRORW - 000_Eclipse100/L/LWKRW - 000_Eclipse100/L/LWKRWR - 000_Eclipse100/L/LWPCW - 000_Eclipse100/L/LWSLTNUM - 000_Eclipse100/L/LWSNUM - 000_Eclipse100/L/LWSOGCR - 000_Eclipse100/L/LWSOWCR - 000_Eclipse100/L/LWSWCR - 000_Eclipse100/L/LWSWL - 000_Eclipse100/L/LWSWLPC - 000_Eclipse100/L/LWSWU - 000_Eclipse100/L/LX - 000_Eclipse100/L/LXFIN - 000_Eclipse100/L/LY - 000_Eclipse100/L/LYFIN - 000_Eclipse100/L/LZ - 000_Eclipse100/L/LZFIN - 000_Eclipse100/M/MAPAXES - 000_Eclipse100/M/MAPUNITS - 000_Eclipse100/M/MASSFLOW - 000_Eclipse100/M/MATCORR - 000_Eclipse100/M/MAXVALUE - 000_Eclipse100/M/MEMORY - 000_Eclipse100/M/MESSAGE - 000_Eclipse100/M/MESSAGES - 000_Eclipse100/M/MESSOPTS - 000_Eclipse100/M/MESSSRVC - 000_Eclipse100/M/METRIC - 000_Eclipse100/M/MINNNCT - 000_Eclipse100/M/MINPORV - 000_Eclipse100/M/MINPV - 000_Eclipse100/M/MINPVV - 000_Eclipse100/M/MINVALUE - 000_Eclipse100/M/MISC - 000_Eclipse100/M/MISCIBLE - 000_Eclipse100/M/MISCNUM - 000_Eclipse100/M/MLANG - 000_Eclipse100/M/MLANGSLV - 000_Eclipse100/M/MONITOR - 000_Eclipse100/M/MPFANUM - 000_Eclipse100/M/MPFNNC - 000_Eclipse100/M/MSFN - 000_Eclipse100/M/MSGFILE - 000_Eclipse100/M/MULSGGD - 000_Eclipse100/M/MULSGGDV - 000_Eclipse100/M/MULTFLT - 000_Eclipse100/M/MULTIN - 000_Eclipse100/M/MULTOUT - 000_Eclipse100/M/MULTOUTS - 000_Eclipse100/M/MULTIPLY - 000_Eclipse100/M/MULTIREG - 000_Eclipse100/M/MULTNUM - 000_Eclipse100/M/MULTPV - 000_Eclipse100/M/MULTREAL - 000_Eclipse100/M/MULTREGD - 000_Eclipse100/M/MULTREGH - 000_Eclipse100/M/MULTREGP - 000_Eclipse100/M/MULTREGT - 000_Eclipse100/M/MULTSIG - 000_Eclipse100/M/MULTSIGV - 000_Eclipse100/M/MULT_XYZ - 000_Eclipse100/N/NARROW - 000_Eclipse100/N/NCONSUMP - 000_Eclipse100/N/NEFAC - 000_Eclipse100/N/NETBALAN - 000_Eclipse100/N/NETCOMPA - 000_Eclipse100/N/NETWORK - 000_Eclipse100/N/NEWTRAN - 000_Eclipse100/N/NEXT - 000_Eclipse100/N/NEXTSTEP - 000_Eclipse100/N/NEXTSTPL - 000_Eclipse100/N/NINENUM - 000_Eclipse100/N/NINEPOIN - 000_Eclipse100/N/NMATOPTS - 000_Eclipse100/N/NMATRIX - 000_Eclipse100/N/NNC - 000_Eclipse100/N/NNEWTF - 000_Eclipse100/N/NOCASC - 000_Eclipse100/N/NODEPROP - 000_Eclipse100/N/NODPPM - 000_Eclipse100/N/NOECHO - 000_Eclipse100/N/NOGGF - 000_Eclipse100/N/NOHMD - 000_Eclipse100/N/NOHMO - 000_Eclipse100/N/NOHYST - 000_Eclipse100/N/NOINSPEC - 000_Eclipse100/N/NOMONITO - 000_Eclipse100/N/NONNC - 000_Eclipse100/N/NORSSPEC - 000_Eclipse100/N/NOSIM - 000_Eclipse100/N/NOWARN - 000_Eclipse100/N/NOWARNEP - 000_Eclipse100/N/NRSOUT - 000_Eclipse100/N/NSTACK - 000_Eclipse100/N/NTG - 000_Eclipse100/N/NUMRES - 000_Eclipse100/N/NUPCOL - 000_Eclipse100/N/NWATREM - 000_Eclipse100/N/NXFIN - 000_Eclipse100/N/NYFIN - 000_Eclipse100/N/NZFIN - 000_Eclipse100/O/OFM - 000_Eclipse100/O/OIL - 000_Eclipse100/O/OILAPI - 000_Eclipse100/O/OILVISCT - 000_Eclipse100/O/OLDTRAN - 000_Eclipse100/O/OLDTRANR - 000_Eclipse100/O/OPERATE - 000_Eclipse100/O/OPERATER - 000_Eclipse100/O/OPERNUM - 000_Eclipse100/O/OPTIONS - 000_Eclipse100/O/OUTRAD - 000_Eclipse100/O/OUTSOL - 000_Eclipse100/O/OVERBURD - 000_Eclipse100/P/PARALLEL - 000_Eclipse100/P/PARAOPTS - 000_Eclipse100/P/PARTTRAC - 000_Eclipse100/P/PATHS - 000_Eclipse100/P/PBUB - 000_Eclipse100/P/PBVD - 000_Eclipse100/P/PCG - 000_Eclipse100/P/PCG32D - 000_Eclipse100/P/PCW - 000_Eclipse100/P/PCW32D - 000_Eclipse100/P/PDEW - 000_Eclipse100/P/PDVD - 000_Eclipse100/P/PEBI - 000_Eclipse100/P/PECOEFS - 000_Eclipse100/P/PEDIMS - 000_Eclipse100/P/PEGTABX - 000_Eclipse100/P/PEKTABX - 000_Eclipse100/P/PENUM - 000_Eclipse100/P/PERFORMANCE_PROBE - 000_Eclipse100/P/PERMAVE - 000_Eclipse100/P/PERMJFUN - 000_Eclipse100/P/PERMR - 000_Eclipse100/P/PERMTHT - 000_Eclipse100/P/PERMX - 000_Eclipse100/P/PERMXY - 000_Eclipse100/P/PERMY - 000_Eclipse100/P/PERMYZ - 000_Eclipse100/P/PERMZ - 000_Eclipse100/P/PERMZX - 000_Eclipse100/P/PETGRID - 000_Eclipse100/P/PETOPTS - 000_Eclipse100/P/PICOND - 000_Eclipse100/P/PIMTDIMS - 000_Eclipse100/P/PIMULTAB - 000_Eclipse100/P/PINCH - 000_Eclipse100/P/PINCHNUM - 000_Eclipse100/P/PINCHOUT - 000_Eclipse100/P/PINCHREG - 000_Eclipse100/P/PINCHXY - 000_Eclipse100/P/PLMIXNUM - 000_Eclipse100/P/PLMIXPAR - 000_Eclipse100/P/PLYADS - 000_Eclipse100/P/PLYADSS - 000_Eclipse100/P/PLYATEMP - 000_Eclipse100/P/PLYCAMAX - 000_Eclipse100/P/PLYDHFLF - 000_Eclipse100/P/PLYESAL - 000_Eclipse100/P/PLYKRRF - 000_Eclipse100/P/PLYMAX - 000_Eclipse100/P/PLYOPTS - 000_Eclipse100/P/PLYRMDEN - 000_Eclipse100/P/PLYROCK - 000_Eclipse100/P/PLYROCKM - 000_Eclipse100/P/PLYSHEAR - 000_Eclipse100/P/PLYSHLOG - 000_Eclipse100/P/PLYTRRF - 000_Eclipse100/P/PLYTRRFA - 000_Eclipse100/P/PLYVISC - 000_Eclipse100/P/PLYVISCS - 000_Eclipse100/P/PLYVISCT - 000_Eclipse100/P/PLYVSCST - 000_Eclipse100/P/PMAX - 000_Eclipse100/P/PMISC - 000_Eclipse100/P/POLYMER - 000_Eclipse100/P/PORO - 000_Eclipse100/P/PORV - 000_Eclipse100/P/PPCWMAX - 000_Eclipse100/P/PRESSURE - 000_Eclipse100/P/PROPS - 000_Eclipse100/P/PRIORITY - 000_Eclipse100/P/PRORDER - 000_Eclipse100/P/PRVD - 000_Eclipse100/P/PSTEADY - 000_Eclipse100/P/PSWRG - 000_Eclipse100/P/PSWRO - 000_Eclipse100/P/PVCDO - 000_Eclipse100/P/PVCO - 000_Eclipse100/P/PVDG - 000_Eclipse100/P/PVDO - 000_Eclipse100/P/PVDS - 000_Eclipse100/P/PVT_M - 000_Eclipse100/P/PVTG - 000_Eclipse100/P/PVTNUM - 000_Eclipse100/P/PVTO - 000_Eclipse100/P/PVTWSALT - 000_Eclipse100/P/PVTW - 000_Eclipse100/P/PVZG - 000_Eclipse100/Q/QDRILL - 000_Eclipse100/Q/QHRATING - 000_Eclipse100/Q/QMOBIL - 000_Eclipse100/R/RADFIN - 000_Eclipse100/R/RADFIN4 - 000_Eclipse100/R/RADIAL - 000_Eclipse100/R/RAINFALL - 000_Eclipse100/R/RBEDCONT - 000_Eclipse100/R/RCMASTS - 000_Eclipse100/R/REACHES - 000_Eclipse100/R/READDATA - 000_Eclipse100/R/REFINE - 000_Eclipse100/R/REGDIMS - 000_Eclipse100/R/RESIDNUM - 000_Eclipse100/R/REGION_PROBE - 000_Eclipse100/R/REGION2REGION_PROBE - 000_Eclipse100/R/REGIONS - 000_Eclipse100/R/RESTART - 000_Eclipse100/R/RESVNUM - 000_Eclipse100/R/RIVDEBUG - 000_Eclipse100/R/RIVERSYS - 000_Eclipse100/R/RIVRDIMS - 000_Eclipse100/R/RIVRPROP - 000_Eclipse100/R/RIVRXSEC - 000_Eclipse100/R/RIVSALT - 000_Eclipse100/R/RIVTRACE - 000_Eclipse100/R/RKTRMDIR - 000_Eclipse100/R/ROCK - 000_Eclipse100/R/ROCK2D - 000_Eclipse100/R/ROCK2DTR - 000_Eclipse100/R/ROCKCOMP - 000_Eclipse100/R/ROCKFRAC - 000_Eclipse100/R/ROCKNUM - 000_Eclipse100/R/ROCKOPTS - 000_Eclipse100/R/ROCKPAMA - 000_Eclipse100/R/ROCKTAB - 000_Eclipse100/R/ROCKTABH - 000_Eclipse100/R/ROCKTABW - 000_Eclipse100/R/ROCKTHSG - 000_Eclipse100/R/ROCKTSIG - 000_Eclipse100/R/ROCKV - 000_Eclipse100/R/ROCKWNOD - 000_Eclipse100/R/RPTCPL - 000_Eclipse100/R/RPTGRID - 000_Eclipse100/R/RPTGRIDL - 000_Eclipse100/R/RPTHMD - 000_Eclipse100/R/RPTHMG - 000_Eclipse100/R/RPTHMW - 000_Eclipse100/R/RPTINIT - 000_Eclipse100/R/RPTISOL - 000_Eclipse100/R/RPTONLY - 000_Eclipse100/R/RPTONLYO - 000_Eclipse100/R/RPTPROPS - 000_Eclipse100/R/RPTREGS - 000_Eclipse100/R/RPTRST - 000_Eclipse100/R/RPTRUNSP - 000_Eclipse100/R/RPTSCHED - 000_Eclipse100/R/RPTSMRY - 000_Eclipse100/R/RPTSOL - 000_Eclipse100/R/RS - 000_Eclipse100/R/RSCONST - 000_Eclipse100/R/RSCONSTT - 000_Eclipse100/R/RSGI - 000_Eclipse100/R/RSSPEC - 000_Eclipse100/R/RSVD - 000_Eclipse100/R/RTEMP - 000_Eclipse100/R/RTEMPA - 000_Eclipse100/R/RTEMPVD - 000_Eclipse100/R/RUNSPEC - 000_Eclipse100/R/RUNSUM - 000_Eclipse100/R/RV - 000_Eclipse100/R/RVCONST - 000_Eclipse100/R/RVCONSTT - 000_Eclipse100/R/RVGI - 000_Eclipse100/R/RVVD - 000_Eclipse100/S/SALT - 000_Eclipse100/S/SALTNODE - 000_Eclipse100/S/SALTREST - 000_Eclipse100/S/SALTVD - 000_Eclipse100/S/SAMG - 000_Eclipse100/S/SATNUM - 000_Eclipse100/S/SATOPTS - 000_Eclipse100/S/SAVE - 000_Eclipse100/S/SCALECRS - 000_Eclipse100/S/SCALELIM - 000_Eclipse100/S/SCDATAB - 000_Eclipse100/S/SCDETAB - 000_Eclipse100/S/SCDPDIMS - 000_Eclipse100/S/SCDPTAB - 000_Eclipse100/S/SCDPTRAC - 000_Eclipse100/S/SCHEDULE - 000_Eclipse100/S/SCVD - 000_Eclipse100/S/SDENSITY - 000_Eclipse100/S/SEGMENT_PROBE - 000_Eclipse100/S/SEPARATE - 000_Eclipse100/S/SEPVALS - 000_Eclipse100/S/SFOAM - 000_Eclipse100/S/SGAS - 000_Eclipse100/S/SGCR - 000_Eclipse100/S/SGCWMIS - 000_Eclipse100/S/SGF32D - 000_Eclipse100/S/SGFN - 000_Eclipse100/S/SGL - 000_Eclipse100/S/SGLPC - 000_Eclipse100/S/SGOF - 000_Eclipse100/S/SGU - 000_Eclipse100/S/SGWFN - 000_Eclipse100/S/SHRATE - 000_Eclipse100/S/SIGMA - 000_Eclipse100/S/SIGMAGDV - 000_Eclipse100/S/SIGMATH - 000_Eclipse100/S/SIGMAV - 000_Eclipse100/S/SIMULATE - 000_Eclipse100/S/SKIP - 000_Eclipse100/S/SKIP100 - 000_Eclipse100/S/SKIP300 - 000_Eclipse100/S/SKIPREST - 000_Eclipse100/S/SKRO - 000_Eclipse100/S/SKRORG - 000_Eclipse100/S/SKRORW - 000_Eclipse100/S/SKRW - 000_Eclipse100/S/SKRWR - 000_Eclipse100/S/SLAVES - 000_Eclipse100/S/SLGOF - 000_Eclipse100/S/SMRYDIMS - 000_Eclipse100/S/SMULTX - 000_Eclipse100/S/SMULTY - 000_Eclipse100/S/SMULTZ - 000_Eclipse100/S/SOCRS - 000_Eclipse100/S/SOF2 - 000_Eclipse100/S/SOF3 - 000_Eclipse100/S/SOF32D - 000_Eclipse100/S/SOGCR - 000_Eclipse100/S/SOIL - 000_Eclipse100/S/SOLUTION - 000_Eclipse100/S/SOLVCONC - 000_Eclipse100/S/SOLVDIMS - 000_Eclipse100/S/SOLVDIRS - 000_Eclipse100/S/SOLVENT - 000_Eclipse100/S/SOLVFRAC - 000_Eclipse100/S/SOLVNUM - 000_Eclipse100/S/SOMGAS - 000_Eclipse100/S/SOMWAT - 000_Eclipse100/S/SORWMIS - 000_Eclipse100/S/SOWCR - 000_Eclipse100/S/SPECGRID - 000_Eclipse100/S/SPECHEAT - 000_Eclipse100/S/SPECROCK - 000_Eclipse100/S/SPOLY - 000_Eclipse100/S/SSFN - 000_Eclipse100/S/SSGCR - 000_Eclipse100/S/SSGL - 000_Eclipse100/S/SSOGCR - 000_Eclipse100/S/SSOL - 000_Eclipse100/S/SSOWCR - 000_Eclipse100/S/SSWCR - 000_Eclipse100/S/SSWL - 000_Eclipse100/S/SSWU - 000_Eclipse100/S/START - 000_Eclipse100/S/STOG - 000_Eclipse100/S/STONE - 000_Eclipse100/S/STONE1 - 000_Eclipse100/S/STONE1EX - 000_Eclipse100/S/STONE2 - 000_Eclipse100/S/STOW - 000_Eclipse100/S/STWG - 000_Eclipse100/S/SUMMARY - 000_Eclipse100/S/SUMTHIN - 000_Eclipse100/S/SURF - 000_Eclipse100/S/SURFACT - 000_Eclipse100/S/SURFACTW - 000_Eclipse100/S/SURFADDW - 000_Eclipse100/S/SURFADS - 000_Eclipse100/S/SURFCAPD - 000_Eclipse100/S/SURFESAL - 000_Eclipse100/S/SURFNUM - 000_Eclipse100/S/SURFOPTS - 000_Eclipse100/S/SURFROCK - 000_Eclipse100/S/SURFST - 000_Eclipse100/S/SURFSTES - 000_Eclipse100/S/SURFVISC - 000_Eclipse100/S/SURFWNUM - 000_Eclipse100/S/SWAT - 000_Eclipse100/S/SWATINIT - 000_Eclipse100/S/SWCR - 000_Eclipse100/S/SWF32D - 000_Eclipse100/S/SWFN - 000_Eclipse100/S/SWINGFAC - 000_Eclipse100/S/SWL - 000_Eclipse100/S/SWLPC - 000_Eclipse100/S/SWOF - 000_Eclipse100/S/SWU - 000_Eclipse100/T/TABDIMS - 000_Eclipse100/T/TBLK - 000_Eclipse100/T/TEMP - 000_Eclipse100/T/TEMPNODE - 000_Eclipse100/T/TEMPTVD - 000_Eclipse100/T/THCONR - 000_Eclipse100/T/THERMAL - 000_Eclipse100/T/THPRES - 000_Eclipse100/T/THPRESFT - 000_Eclipse100/T/TIGHTEN - 000_Eclipse100/T/TIGHTENP - 000_Eclipse100/T/TIME - 000_Eclipse100/T/TITLE - 000_Eclipse100/T/TLMIXPAR - 000_Eclipse100/T/TNUM - 000_Eclipse100/T/TOLCRIT - 000_Eclipse100/T/TOPS - 000_Eclipse100/T/TPAMEPS - 000_Eclipse100/T/TPAMEPSS - 000_Eclipse100/T/TRACER - 000_Eclipse100/T/TRACERKM - 000_Eclipse100/T/TRACERKP - 000_Eclipse100/T/TRACERS - 000_Eclipse100/T/TRACITVD - 000_Eclipse100/T/TRACTVD - 000_Eclipse100/T/TRADS - 000_Eclipse100/T/TRANGL - 000_Eclipse100/T/TRANR - 000_Eclipse100/T/TRANTHT - 000_Eclipse100/T/TRANX - 000_Eclipse100/T/TRANY - 000_Eclipse100/T/TRANZ - 000_Eclipse100/T/TRDCY - 000_Eclipse100/T/TRDIF - 000_Eclipse100/T/TRDIS - 000_Eclipse100/T/TRKPF - 000_Eclipse100/T/TRNHD - 000_Eclipse100/T/TRPLPORO - 000_Eclipse100/T/TRROCK - 000_Eclipse100/T/TSTEP - 000_Eclipse100/T/TUNING - 000_Eclipse100/T/TUNINGDP - 000_Eclipse100/T/TUNINGH - 000_Eclipse100/T/TUNINGL - 000_Eclipse100/T/TUNINGS - 000_Eclipse100/T/TVDP - 000_Eclipse100/T/TZONE - 000_Eclipse100/U/UDQ - 000_Eclipse100/U/UDADIMS - 000_Eclipse100/U/UDQ - 000_Eclipse100/U/UDQDIMS - 000_Eclipse100/U/UDQPARAM - 000_Eclipse100/U/UDT - 000_Eclipse100/U/UDTDIMS - 000_Eclipse100/U/UNCODHMD - 000_Eclipse100/U/UNIFIN - 000_Eclipse100/U/UNIFOUT - 000_Eclipse100/U/UNIFOUTS - 000_Eclipse100/U/UNIFSAVE - 000_Eclipse100/U/USECUPL - 000_Eclipse100/U/USEFLUX - 000_Eclipse100/U/USENOFLO - 000_Eclipse100/V/VAPOIL - 000_Eclipse100/V/VAPPARS - 000_Eclipse100/V/VDFLOW - 000_Eclipse100/V/VDFLOWR - 000_Eclipse100/V/VE - 000_Eclipse100/V/VEDEBUG - 000_Eclipse100/V/VEFIN - 000_Eclipse100/V/VEFRAC - 000_Eclipse100/V/VEFRACP - 000_Eclipse100/V/VEFRACPV - 000_Eclipse100/V/VEFRACV - 000_Eclipse100/V/VFPCHK - 000_Eclipse100/V/VFPIDIMS - 000_Eclipse100/V/VFPINJ - 000_Eclipse100/V/VFPPDIMS - 000_Eclipse100/V/VFPPROD - 000_Eclipse100/V/VFPTABL - 000_Eclipse100/V/VISAGE - 000_Eclipse100/V/VISCD - 000_Eclipse100/V/VISCREF - 000_Eclipse100/V/VISDATES - 000_Eclipse100/V/VISOPTS - 000_Eclipse100/W/WAGHYSTR - 000_Eclipse100/W/WAITBAL - 000_Eclipse100/W/WALKALIN - 000_Eclipse100/W/WALQCALC - 000_Eclipse100/W/WAPI - 000_Eclipse100/W/WARN - 000_Eclipse100/W/WATER - 000_Eclipse100/W/WATVISCT - 000_Eclipse100/W/WBHGLR - 000_Eclipse100/W/WBOREVOL - 000_Eclipse100/W/WCALCVAL - 000_Eclipse100/W/WCONHIST - 000_Eclipse100/W/WCONINJ - 000_Eclipse100/W/WCONINJE - 000_Eclipse100/W/WCONINJH - 000_Eclipse100/W/WCONINJP - 000_Eclipse100/W/WCONPROD - 000_Eclipse100/W/WCUTBACK - 000_Eclipse100/W/WCUTBACT - 000_Eclipse100/W/WCYCLE - 000_Eclipse100/W/WDFAC - 000_Eclipse100/W/WDFACCOR - 000_Eclipse100/W/WDRILPRI - 000_Eclipse100/W/WDRILRES - 000_Eclipse100/W/WDRILTIM - 000_Eclipse100/W/WECON - 000_Eclipse100/W/WECONINJ - 000_Eclipse100/W/WECONT - 000_Eclipse100/W/WEFAC - 000_Eclipse100/W/WELCNTL - 000_Eclipse100/W/WELDEBUG - 000_Eclipse100/W/WELDRAW - 000_Eclipse100/W/WELEVNT - 000_Eclipse100/W/WELLDIMS - 000_Eclipse100/W/WELL_PROBE - 000_Eclipse100/W/WELL_COMPLETION_PROBE - 000_Eclipse100/W/WELMOVEL - 000_Eclipse100/W/WELOPEN - 000_Eclipse100/W/WELOPENL - 000_Eclipse100/W/WELPI - 000_Eclipse100/W/WELPRI - 000_Eclipse100/W/WELSEGS - 000_Eclipse100/W/WELSOMIN - 000_Eclipse100/W/WSEGSICD - 000_Eclipse100/W/WELSPECL - 000_Eclipse100/W/WELSPECS - 000_Eclipse100/W/WELTARG - 000_Eclipse100/W/WFOAM - 000_Eclipse100/W/WFRICSEG - 000_Eclipse100/W/WFRICSGL - 000_Eclipse100/W/WFRICTN - 000_Eclipse100/W/WFRICTNL - 000_Eclipse100/W/WGASPROD - 000_Eclipse100/W/WGORPEN - 000_Eclipse100/W/WGRUPCON - 000_Eclipse100/W/WH2NUM - 000_Eclipse100/W/WH3NUM - 000_Eclipse100/W/WHEDREFD - 000_Eclipse100/W/WHISTCTL - 000_Eclipse100/W/WHTEMP - 000_Eclipse100/W/WINJMULT - 000_Eclipse100/W/WLIFT - 000_Eclipse100/W/WLIFTOPT - 000_Eclipse100/W/WLIMTOL - 000_Eclipse100/W/WLIST - 000_Eclipse100/W/WLISTARG - 000_Eclipse100/W/WLISTNAM - 000_Eclipse100/W/WNETCTRL - 000_Eclipse100/W/WNETDP - 000_Eclipse100/W/WORKLIM - 000_Eclipse100/W/WORKTHP - 000_Eclipse100/W/WPAVE - 000_Eclipse100/W/WPAVEDEP - 000_Eclipse100/W/WPIMULT - 000_Eclipse100/W/WPIMULTL - 000_Eclipse100/W/WPITAB - 000_Eclipse100/W/WPLUG - 000_Eclipse100/W/WPOLYMER - 000_Eclipse100/W/WPOLYRED - 000_Eclipse100/W/WPOTCALC - 000_Eclipse100/W/WREGROUP - 000_Eclipse100/W/WRFT - 000_Eclipse100/W/WRFTPLT - 000_Eclipse100/W/WSALT - 000_Eclipse100/W/WSCCLEAN - 000_Eclipse100/W/WSCCLENL - 000_Eclipse100/W/WSCTAB - 000_Eclipse100/W/WSEGAICD - 000_Eclipse100/W/WSEGDFIN - 000_Eclipse100/W/WSEGDFMD - 000_Eclipse100/W/WSEGDFPA - 000_Eclipse100/W/WSEGDIMS - 000_Eclipse100/W/WSEGEXSS - 000_Eclipse100/W/WSEGFLIM - 000_Eclipse100/W/WSEGFMOD - 000_Eclipse100/W/WSEGINIT - 000_Eclipse100/W/WSEGITER - 000_Eclipse100/W/WSEGLABY - 000_Eclipse100/W/WSEGLINK - 000_Eclipse100/W/WSEGMULT - 000_Eclipse100/W/WSEGPROP - 000_Eclipse100/W/WSEGSEP - 000_Eclipse100/W/WSEGSICD - 000_Eclipse100/W/WSEGSOLV - 000_Eclipse100/W/WSEGTABL - 000_Eclipse100/W/WSEGVALV - 000_Eclipse100/W/WSOLVENT - 000_Eclipse100/W/WSURFACT - 000_Eclipse100/W/WTADD - 000_Eclipse100/W/WTEMP - 000_Eclipse100/W/WTEMPQ - 000_Eclipse100/W/WTEST - 000_Eclipse100/W/WTHPMAX - 000_Eclipse100/W/WTMULT - 000_Eclipse100/W/WTRACER - 000_Eclipse100/W/WVFPDP - 000_Eclipse100/W/WVFPEXP - 000_Eclipse100/W/WWPAVE - 000_Eclipse100/Z/ZCORN - 000_Eclipse100/Z/ZIPPY2 - 000_Eclipse100/Z/ZIPP2OFF - - 001_Eclipse300/B/BLOCK_PROBE300 - 001_Eclipse300/C/CIRCLE - 001_Eclipse300/C/COMPS - 001_Eclipse300/C/CREF - 001_Eclipse300/C/CREFS - 001_Eclipse300/D/DREF - 001_Eclipse300/D/DREFS - 001_Eclipse300/D/DZV - 001_Eclipse300/G/GASVISCT - 001_Eclipse300/G/GCONPROD - 001_Eclipse300/H/HEATCR - 001_Eclipse300/H/HEATCRT - 001_Eclipse300/L/LIVEOIL - 001_Eclipse300/M/MW - 001_Eclipse300/M/MWS - 001_Eclipse300/O/OILCOMPR - 001_Eclipse300/O/OILMW - 001_Eclipse300/O/OILVTIM - 001_Eclipse300/O/OPTIONS3 - 001_Eclipse300/P/PREF - 001_Eclipse300/P/PREFS - 001_Eclipse300/S/STCOND - 001_Eclipse300/T/TEMPI - 001_Eclipse300/T/TEMPVD - 001_Eclipse300/T/THCGAS - 001_Eclipse300/T/THCOIL - 001_Eclipse300/T/THCONSF - 001_Eclipse300/T/THCROCK - 001_Eclipse300/T/THCWATER - 001_Eclipse300/T/THERMAL - 001_Eclipse300/T/TREF - 001_Eclipse300/T/TREFS - 001_Eclipse300/W/WINJTEMP - 001_Eclipse300/W/WATDENT - 001_Eclipse300/Z/ZFACT1 - 001_Eclipse300/Z/ZFACT1S - 001_Eclipse300/Z/ZFACTOR - 001_Eclipse300/Z/ZFACTORS - 002_Frontsim/N/NOGRAV - - 900_OPM/B/BC - 900_OPM/E/EXIT - 900_OPM/G/GCOMPIDX - 900_OPM/G/GRUPRIG - 900_OPM/G/GASDENT - 900_OPM/M/MINPVFIL - 900_OPM/O/OCOMPIDX - 900_OPM/O/OILDENT - 900_OPM/P/PERMFACT - 900_OPM/P/PINTDIMS - 900_OPM/P/PLYVMH - 900_OPM/P/PLYMWINJ - 900_OPM/P/POLYMW - 900_OPM/P/PRECSALT - 900_OPM/P/PVTGW - 900_OPM/P/PVTGWO - 900_OPM/P/PYACTION - 900_OPM/P/PYINPUT - 900_OPM/R/RHO - 900_OPM/R/RWGSALT - 900_OPM/S/SALTPVD - 900_OPM/S/SALTSOL - 900_OPM/S/SKPRPOLY - 900_OPM/S/SKPRWAT - 900_OPM/S/SPOLYMW - 900_OPM/T/TLPMIXPA - 900_OPM/V/VAPWAT - 900_OPM/W/WPMITAB - 900_OPM/W/WSKPTAB) diff --git a/ThirdParty/custom-opm-common/opm-common/test_util/Deviation.hpp b/ThirdParty/custom-opm-common/opm-common/test_util/Deviation.hpp deleted file mode 100644 index b472033a82..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/test_util/Deviation.hpp +++ /dev/null @@ -1,32 +0,0 @@ -/* - Copyright 2016 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#ifndef DEVIATION_HPP -#define DEVIATION_HPP - -/*! \brief Deviation struct. - \details The member variables are default initialized to -1, - which is an invalid deviation value. - */ -struct Deviation { - double abs = -1; //!< Absolute deviation - double rel = -1; //!< Relative deviation -}; - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/test_util/EclFilesComparator.cpp b/ThirdParty/custom-opm-common/opm-common/test_util/EclFilesComparator.cpp deleted file mode 100644 index 9e8bb708c4..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/test_util/EclFilesComparator.cpp +++ /dev/null @@ -1,143 +0,0 @@ -/* - Copyright 2016 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include "EclFilesComparator.hpp" - -#include -#include - -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -// helper macro to handle error throws or not -#define HANDLE_ERROR(type, message) \ - { \ - if (throwOnError) \ - OPM_THROW(type, message); \ - else { \ - std::cerr << message << std::endl; \ - ++num_errors; \ - } \ - } - -using Opm::EclIO::EGrid; - -template -void ECLFilesComparator::printValuesForCell(const std::string& keyword, const std::string& reference, size_t kw_size, size_t cell, EGrid *grid, const T& value1, const T& value2) const { - if (grid) { - int nActive = grid->activeCells(); - int nTot = grid->totalNumberOfCells(); - - if (static_cast(kw_size) == nActive) { - auto ijk = grid->ijk_from_active_index(cell); - - ijk[0]++, ijk[1]++, ijk[2]++; - - std::cout << std::endl - << "\nKeyword: " << keyword << ", origin " << reference << "\n" - << "Global index (zero based) = " << cell << "\n" - << "Grid coordinate = (" << ijk[0] << ", " << ijk[1] << ", " << ijk[2] << ")" << "\n" - << "(first value, second value) = (" << value1 << ", " << value2 << ")\n\n"; - return; - } - - if (static_cast(kw_size) == nTot) { - - auto ijk = grid->ijk_from_global_index(cell); - - ijk[0]++, ijk[1]++, ijk[2]++; - - std::cout << std::endl - << "\nKeyword: " << keyword << ", origin " << reference << "\n\n" - << "Global index (zero based) = " << cell << "\n" - << "Grid coordinate = (" << ijk[0] << ", " << ijk[1] << ", " << ijk[2] << ")" << "\n" - << "(first value, second value) = (" << value1 << ", " << value2 << ")\n\n"; - return; - } - } - - std::cout << std::endl - << "\nKeyword: " << keyword << ", origin " << reference << "\n\n" - << "Value index = " << cell << "\n" - << "(first value, second value) = (" << value1 << ", " << value2 << ")\n\n"; -} - -template void ECLFilesComparator::printValuesForCell (const std::string& keyword, const std::string& reference, size_t kw_size, size_t cell, EGrid *grid, const bool& value1, const bool& value2) const; -template void ECLFilesComparator::printValuesForCell (const std::string& keyword, const std::string& reference, size_t kw_size, size_t cell, EGrid *grid, const int& value1, const int& value2) const; -template void ECLFilesComparator::printValuesForCell (const std::string& keyword, const std::string& reference, size_t kw_size, size_t cell, EGrid *grid, const double& value1, const double& value2) const; -template void ECLFilesComparator::printValuesForCell(const std::string& keyword, const std::string& reference, size_t kw_size, size_t cell, EGrid *grid, const std::string& value1, const std::string& value2) const; -// Hack to work around case where std::vector::const_reference is not a bool. If it is we will initialize printValuesForCell otherwise printValuesForCell::const_reference> -using boolConstReference = typename std::vector::const_reference; -using boolTypeHelper = typename std::remove_const::type>::type; -using boolType = typename std::conditional::value, char, boolTypeHelper>::type; -template void ECLFilesComparator::printValuesForCell (const std::string& keyword, const std::string& reference, size_t kw_size, size_t cell, EGrid *grid, const boolType& value1, const boolType& value2) const; - -ECLFilesComparator::ECLFilesComparator(const std::string& basename1, - const std::string& basename2, - double absToleranceArg, double relToleranceArg) : - rootName1(basename1), rootName2(basename2), - absTolerance(absToleranceArg), relTolerance(relToleranceArg) { -} - - -Deviation ECLFilesComparator::calculateDeviations(double val1, double val2) { - val1 = std::abs(val1); - val2 = std::abs(val2); - Deviation deviation; - if (val1 != 0 || val2 != 0) { - deviation.abs = std::abs(val1 - val2); - if (val1 != 0 && val2 != 0) { - deviation.rel = deviation.abs/(std::max(val1, val2)); - } - } - return deviation; -} - - -double ECLFilesComparator::median(std::vector vec) { - if (vec.empty()) { - return 0; - } - else { - size_t n = vec.size() / 2; - std::nth_element(vec.begin(), vec.begin() + n, vec.end()); - if (vec.size() % 2 == 0) { - return 0.5 * (vec[n-1] + vec[n]); - } - else { - return vec[n]; - } - } -} - - -double ECLFilesComparator::average(const std::vector& vec) { - if (vec.empty()) { - return 0; - } - double sum = std::accumulate(vec.begin(), vec.end(), 0.0); - return sum/vec.size(); -} diff --git a/ThirdParty/custom-opm-common/opm-common/test_util/EclFilesComparator.hpp b/ThirdParty/custom-opm-common/opm-common/test_util/EclFilesComparator.hpp deleted file mode 100644 index 193fc98dad..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/test_util/EclFilesComparator.hpp +++ /dev/null @@ -1,93 +0,0 @@ -/* - Copyright 2016 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#ifndef ECLFILESCOMPARATOR_HPP -#define ECLFILESCOMPARATOR_HPP - -#include "Deviation.hpp" - -#include -#include -#include -#include - -namespace Opm { namespace EclIO { - class EGrid; -}} // namespace Opm::ecl - -class ECLFilesComparator { -public: - ECLFilesComparator(const std::string& basename1, - const std::string& basename2, - double absTolerance, double relTolerance); - - void throwOnErrors(bool dothrow) { - throwOnError = dothrow; - } - - void doAnalysis(bool analize) { - analysis = analize; - } - - size_t getNoErrors() const { - return num_errors; - } - - //! \brief Returns the absolute tolerance stored as a private member variable in the class - double getAbsTolerance() const { - return absTolerance; - } - //! \brief Returns the relative tolerance stored as a private member variable in the class - double getRelTolerance() const { - return relTolerance; - } - - //! \brief Calculate deviations for two values. - //! \details Using absolute values of the input arguments: If one of the values are non-zero, the Deviation::abs returned is the difference between the two input values. In addition, if both values are non-zero, the Deviation::rel returned is the absolute deviation divided by the largest value. - static Deviation calculateDeviations(double val1, double val2); - //! \brief Calculate median of a vector. - //! \details Returning the median of the input vector, i.e. the middle value of the sorted vector if the number of elements is odd or the mean of the two middle values if the number of elements are even. Copy is intentional. - static double median(std::vector vec); - //! \brief Calculate average of a vector. - //! \details Returning the average of the input vector, i.e. the sum of all values divided by the number of elements. - static double average(const std::vector& vec); - -protected: - bool throwOnError = true; //!< Throw on first error - bool analysis = false; //!< Perform full error analysis - std::map> deviations; - mutable size_t num_errors = 0; - - std::string rootName1, rootName2; - - template - void printValuesForCell(const std::string& keyword, - const std::string& reference, - size_t kw_size, - size_t cell, - Opm::EclIO::EGrid *grid, - const T& value1, - const T& value2) const; - -private: - double absTolerance = 0; - double relTolerance = 0; -}; - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/test_util/EclRegressionTest.cpp b/ThirdParty/custom-opm-common/opm-common/test_util/EclRegressionTest.cpp deleted file mode 100644 index 0f8e333fa5..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/test_util/EclRegressionTest.cpp +++ /dev/null @@ -1,1267 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include "EclRegressionTest.hpp" - -#include -#include -#include -#include -#include - -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -// helper macro to handle error throws or not -#define HANDLE_ERROR(type, message) \ - { \ - if (throwOnError) \ - OPM_THROW(type, message); \ - else { \ - std::cerr << message << std::endl; \ - ++num_errors; \ - } \ - } - -namespace { - -template -std::vector sorted(std::vector v) { - std::sort(v.begin(), v.end()); - return v; -} - -} - - -using namespace Opm::EclIO; - -ECLRegressionTest::~ECLRegressionTest() -{ - delete grid1; - delete grid2; -} - - -static bool fileExists(const std::string& fileName) { - std::ifstream f(fileName); - return f.good(); -} - - -bool ECLRegressionTest::checkFileName(const std::string &rootName, const std::string &extension, std::string &filename) { - - if (fileExists(rootName + "." + extension)) { - filename = rootName + "." + extension; - return true; - } else if (fileExists(rootName + ".F" + extension)) { - filename = rootName + ".F" + extension; - return true; - } else { - filename.clear(); - return false; - } -} - - -template -bool operator==(const std::vector & t1, const std::vector & t2) -{ - return std::equal(t1.begin(), t1.end(), t2.begin(), t2.end()); -} - - -template -void ECLRegressionTest::compareFloatingPointVectors(const std::vector& t1, const std::vector& t2, const std::string& keyword, const std::string& reference) { - - if (typeid(T) != typeid(float) && typeid(T) != typeid(double)) { - HANDLE_ERROR(std::runtime_error, "\nMember function compareVectors should be used with floating point vectors "); - } - - if (t1.size() != t2.size()) { - HANDLE_ERROR(std::runtime_error, "\nError trying to compare two vectors with different size " << keyword << " - " << reference - << "\n > size of first vector : " << t1.size() << "\n > size of second vector: " << t2.size()); - } - - auto it = std::find(keywordDisallowNegatives.begin(), keywordDisallowNegatives.end(), keyword); - bool allowNegatives = it == keywordDisallowNegatives.end() ? true : false; - - it = std::find(keywordsStrictTol.begin(), keywordsStrictTol.end(), keyword); - bool strictTol = it != keywordsStrictTol.end() ? true : false; - - for (size_t i = 0; i < t1.size(); i++) { - deviationsForCell(static_cast(t1[i]), - static_cast(t2[i]), - keyword, reference, t1.size(), - i, allowNegatives, strictTol); - } -} - - -template -void ECLRegressionTest::compareVectors(const std::vector& t1, const std::vector& t2, const std::string& keyword, const std::string& reference) { - - if (t1.size() != t2.size()) { - HANDLE_ERROR(std::runtime_error, "\nError trying to compare two vectors with different size " << keyword << " - " << reference - << "\n > size of first vector : " << t1.size() << "\n > size of second vector: " << t2.size()); - } - - if (typeid(T) == typeid(float) || typeid(T) == typeid(double)) { - HANDLE_ERROR(std::runtime_error, "\nMember function compareVectors should not be used with floating point vectors "); - } - - bool result = t1 == t2 ? true : false ; - - if (!result) { - for (size_t i = 0; i < t1.size(); i++) { - deviationsForNonFloatingPoints(t1[i], t2[i], keyword, reference, t1.size(), i); - } - } -} - - -template -void ECLRegressionTest::deviationsForNonFloatingPoints(T val1, T val2, const std::string& keyword, const std::string& reference, size_t kw_size, size_t cell) -{ - if (val1 != val2) { - printValuesForCell(keyword, reference, kw_size, cell, grid1, val1, val2); - HANDLE_ERROR(std::runtime_error, "Non floating point values not identical "); - } -} - - -void ECLRegressionTest::deviationsForCell(double val1, double val2, const std::string& keyword, const std::string& reference, size_t kw_size, size_t cell, bool allowNegativeValues, bool useStrictTol) -{ - double absToleranceLoc = useStrictTol ? strictAbsTol : getAbsTolerance(); - double relToleranceLoc = useStrictTol ? strictAbsTol : getRelTolerance(); - - if (!allowNegativeValues) { - if (val1 < 0) { - if (std::abs(val1) > absToleranceLoc) { - printValuesForCell(keyword, reference, kw_size, cell, grid1, val1, val2); - HANDLE_ERROR(std::runtime_error, "Negative value in first file, " - << "which in absolute value exceeds the absolute tolerance of " << absToleranceLoc << "."); - } - val1 = 0; - } - - if (val2 < 0) { - if (std::abs(val2) > absToleranceLoc) { - printValuesForCell(keyword, reference, kw_size, cell, grid1, val1, val2); - HANDLE_ERROR(std::runtime_error, "Negative value in second file, " - << "which in absolute value exceeds the absolute tolerance of " << absToleranceLoc << "."); - } - val2 = 0; - } - } - - Deviation dev = calculateDeviations(val1, val2); - if (dev.abs > absToleranceLoc && (dev.rel > relToleranceLoc || dev.rel == -1)) { - if (analysis) { - std::string keywref = keyword + ": " + reference; - deviations[keywref].push_back(dev); - } else { - printValuesForCell(keyword, reference, kw_size, cell, grid1, val1, val2); - - if (useStrictTol) { - std::cout << "Keyword: " << keyword << " requires strict tolerances.\n" << std::endl; - } - - HANDLE_ERROR(std::runtime_error, "Deviations exceed tolerances." - << "\nThe absolute deviation is " << dev.abs << ", and the tolerance limit is " << absToleranceLoc << "." - << "\nThe relative deviation is " << dev.rel << ", and the tolerance limit is " << relToleranceLoc << "."); - } - } - - if (dev.abs != -1) { - absDeviation.push_back(dev.abs); - } - - if (dev.rel != -1) { - relDeviation.push_back(dev.rel); - } -} - - -void ECLRegressionTest::printDeviationReport() -{ - if (analysis) { - std::cout << " \n" << deviations.size() << " keyword" - << (deviations.size() > 1 ? "s":"") << " exhibit failures" << std::endl; - for (const auto& iter : deviations) { - std::cout << "\t" << iter.first << std::endl; - std::cout << "\t\tFails for " << iter.second.size() << " entries" << std::endl; - std::cout.precision(7); - double absErr = std::max_element(iter.second.begin(), iter.second.end(), - [](const Deviation& a, const Deviation& b) - { - return a.abs < b.abs; - })->abs; - double relErr = std::max_element(iter.second.begin(), iter.second.end(), - [](const Deviation& a, const Deviation& b) - { - return a.rel < b.rel; - })->rel; - std::cout << "\t\tLargest absolute error: " - << std::scientific << absErr << std::endl; - std::cout << "\t\tLargest relative error: " - << std::scientific << relErr << std::endl; - } - } -} - - -void ECLRegressionTest::compareKeywords(const std::vector &keywords1, const std::vector &keywords2, const std::string &reference) { - - if (!acceptExtraKeywords) { - if (keywords1 != keywords2) { - std::cout << "not same keywords in " << reference << std::endl; - - if (keywords1.size() > 50) { - printMissingKeywords(keywords1,keywords2); - } else { - printComparisonForKeywordLists(keywords1,keywords2); - } - OPM_THROW(std::runtime_error, "\nKeywords not identical in " << reference); - } - } else { - for (auto& keyword : keywords1) { - auto it1 = std::find(keywords2.begin(), keywords2.end(), keyword); - if (it1 == keywords2.end()) { - std::cout << "Keyword " << keyword << " missing in second file " << std::endl; - - if (keywords1.size() > 50) { - printMissingKeywords(keywords1, keywords2); - } else { - printComparisonForKeywordLists(keywords1, keywords2); - } - - OPM_THROW(std::runtime_error, "\nKeyword " << keyword << " missing in second file "); - } - } - - if (keywords2.size() > keywords1.size()) { - std::cout << "\nExtra keywords (" - << std::to_string(keywords2.size() - keywords1.size()) - << ") accepted in second file " << std::endl; - } - } -} - - -void ECLRegressionTest::checkSpesificKeyword(std::vector& keywords1, - std::vector& keywords2, - std::vector& arrayType1, - std::vector& arrayType2, - const std::string& reference) -{ - auto search1 = std::find(keywords1.begin(), keywords1.end(), spesificKeyword); - auto search2 = std::find(keywords2.begin(), keywords2.end(), spesificKeyword); - - if (search1 == keywords1.end() && search2 == keywords2.end()) { - std::cout << "Testing specific keyword \"" << spesificKeyword << "\" in " << reference << ". Keyword not found in any of the cases ." << std::endl; - OPM_THROW(std::runtime_error, "\nTesting spesific keyword \"" << spesificKeyword << "\" in " << reference << ". Keyword not found in any of the cases ."); - } - - eclArrType arrType; - if (search1 != keywords1.end()) { - int ind = std::distance(keywords1.begin(), search1); - arrType = arrayType1[ind]; - - if (search2 == keywords2.end()) { - std::cout << "Testing spesific kewyword in " << reference << ". Keyword found in fist case but not in second case." << std::endl; - OPM_THROW(std::runtime_error, "\nTesting spesific kewyword in " << reference << ". Keyword found in fist case but not in second case."); - } - - keywords1.clear(); - arrayType1.clear(); - keywords1.push_back(spesificKeyword); - arrayType1.push_back(arrType); - - keywords2.clear(); - arrayType2.clear(); - keywords2.push_back(spesificKeyword); - arrayType2.push_back(arrType); - } else { - if (search2 != keywords2.end()) { - std::cout << "Testing spesific kewyword in " << reference << ". Keyword not found in fist case but found in second case." << std::endl; - OPM_THROW(std::runtime_error, "\nTesting spesific kewyword in " << reference << ". Keyword not found in fist case but found in second case."); - } - - keywords1.clear(); - arrayType1.clear(); - - keywords2.clear(); - arrayType2.clear(); - } -} - - -void ECLRegressionTest::loadGrids() -{ - bool foundEGrid1, foundEGrid2; - std::string fileName1, fileName2; - - foundEGrid1 = checkFileName(rootName1, "EGRID", fileName1); - foundEGrid2 = checkFileName(rootName2, "EGRID", fileName2); - - if (foundEGrid1) { - std::cout << "\nLoading EGrid " << fileName1 << " .... "; - grid1 = new EGrid(fileName1); - std::cout << " done." << std::endl; - } - - if (foundEGrid2) { - std::cout << "Loading EGrid " << fileName2 << " .... "; - grid2 = new EGrid(fileName2); - std::cout << " done." << std::endl; - } - - if ((not foundEGrid1) || (not foundEGrid2)) { - std::cout << "\nWarning! Both grids could not be loaded. Not possible to reference cell values to grid indices." << std::endl; - std::cout << "Grid compare may also fail. SMRY, RFT, UNRST and INIT files can be checked \n" << std::endl; - } -} - - -void ECLRegressionTest::gridCompare() -{ - deviations.clear(); - - if ((grid1) && (not grid2)){ - std::string message ="test case egrid file " + rootName2 + ".EGRID could not be loaded"; - std::cout << message << std::endl; - OPM_THROW(std::runtime_error, message); - } - - if (grid1 && grid2) { - - std::cout << "comparing grids " << std::endl; - - const auto& dim1 = grid1->dimension(); - const auto& dim2 = grid2->dimension(); - - if (printKeywordOnly) { - - auto arrayList1 = grid1->getList(); - auto arrayList2 = grid2->getList(); - - std::vector keywords1; - std::vector arrayType1; - - for (auto& array : arrayList1) { - keywords1.push_back(std::get<0>(array)); - arrayType1.push_back(std::get<1>(array)); - } - - std::vector keywords2; - std::vector arrayType2; - - for (auto& array : arrayList2) { - keywords2.push_back(std::get<0>(array)); - arrayType2.push_back(std::get<1>(array)); - } - - printComparisonForKeywordLists(keywords1, keywords2, arrayType1, arrayType2); - return; - } - - std::cout << "\nComparing egrid files \n" << std::endl; - - std::cout << "Dimensions " << " ... "; - - if (dim1[0] != dim2[0] || dim1[1] != dim2[1] || dim1[2] != dim2[2]) { - OPM_THROW(std::runtime_error, "\n Grid1 and grid2 have different dimensions. " - << "\n grid1 : " << dim1[0] << "x" << dim1[1] << "x"<< dim1[2] - << "\n grid2 : " << dim2[0] << "x" << dim2[1] << "x"<< dim2[2]); - } - - std::cout << " done." << std::endl; - - std::cout << "Active cells " << " ... "; - - for (int k = 0; k < dim1[2]; k++) { - for (int j=0; j < dim1[1]; j++) { - for (int i = 0; i < dim2[0]; i++) { - if (grid1->active_index(i,j,k) != grid2->active_index(i,j,k)) { - OPM_THROW(std::runtime_error, "\nGrid1 and grid2 have different definition of active cells. " - " First difference found for cell i="<< i+1 << " j=" << j+1 << " k=" << k+1); - } - } - } - } - - std::cout << " done." << std::endl; - - std::cout << "X, Y and Z coordinates " << " ... "; - - std::array X1 = {0.0}; - std::array Y1 = {0.0}; - std::array Z1 = {0.0}; - - std::array X2 = {0.0}; - std::array Y2 = {0.0}; - std::array Z2 = {0.0}; - - for (int k = 0; k < dim1[2]; k++) { - for (int j = 0; j < dim1[1]; j++) { - for (int i = 0; i < dim1[0]; i++) { - if (grid1->active_index(i,j,k) > -1) { - grid1->getCellCorners({i,j,k}, X1, Y1, Z1); - grid2->getCellCorners({i,j,k}, X2, Y2, Z2); - - for (int n = 0; n < 8; n++) { - Deviation devX = calculateDeviations(X1[n], X2[n]); - Deviation devY = calculateDeviations(Y1[n], Y2[n]); - Deviation devZ = calculateDeviations(Z1[n], Z2[n]); - - if (devX.abs > strictAbsTol) { - if (analysis) { - deviations["xcoordinate"].push_back(devX); - } else { - OPM_THROW(std::runtime_error, "\nGrid1 and grid2 have different X, Y and/or Z coordinates . " - " First difference found for cell i="<< i+1 << " j=" << j+1 << " k=" << k+1); - } - } - - if (devY.abs > strictAbsTol) { - if (analysis) { - deviations["ycoordinate"].push_back(devY); - } else { - OPM_THROW(std::runtime_error, "\nGrid1 and grid2 have different X, Y and/or Z coordinates . " - " First difference found for cell i="<< i+1 << " j=" << j+1 << " k=" << k+1); - } - } - - if (devZ.abs > strictAbsTol) { - if (analysis) { - deviations["zcoordinate"].push_back(devZ); - } else { - OPM_THROW(std::runtime_error, "\nGrid1 and grid2 have different X, Y and/or Z coordinates . " - " First difference found for cell i="<< i+1 << " j=" << j+1 << " k=" << k+1); - } - } - } - } - } - } - } - - std::cout << " done." << std::endl; - - std::cout << "NNC indices " << " ... "; - - // check / compare NNC definitions - - if (grid1->hasKey("NNC1")) { - std::vector NNC11 = grid1->get("NNC1"); - std::vector NNC21 = grid1->get("NNC2"); - - if (!grid2->hasKey("NNC1")) { - OPM_THROW(std::runtime_error, "\nFirst Grid have NNC1 keyword but not second grid "); - } - - std::vector NNC12 = grid2->get("NNC1"); - std::vector NNC22 = grid2->get("NNC2"); - - if (NNC11.size() != NNC12.size() || NNC21.size() != NNC22.size()) { - OPM_THROW(std::runtime_error, "\n Grid1 and grid2 have different number of NNCs. " - << " \n Grid1: " << NNC11.size() << ", Grid2: " << NNC12.size() ); - } - - for (size_t n = 0; n < NNC11.size(); n++) { - if (NNC11[n] != NNC12[n] || NNC21[n] != NNC22[n]) { - std::cout << "Differences in NNCs. First found for " << NNC11[n] << " -> " << NNC21[n]; - std::cout << " not same as " << NNC12[n] << " -> " << NNC22[n] << std::endl; - - auto ijk1 = grid1->ijk_from_global_index(NNC11[n]-1); - auto ijk2 = grid1->ijk_from_global_index(NNC21[n]-1); - - std::cout << "In grid1 " << ijk1[0]+1 << "," << ijk1[1]+1 <<"," << ijk1[2]+1 << " -> " << ijk2[0]+1 << "," << ijk2[1]+1 <<"," << ijk2[2]+1 << std::endl; - - ijk1 = grid2->ijk_from_global_index(NNC12[n]-1); - ijk2 = grid2->ijk_from_global_index(NNC22[n]-1); - - std::cout << "In grid2 " << ijk1[0]+1 << "," << ijk1[1]+1 <<"," << ijk1[2]+1 << " -> " << ijk2[0]+1 << "," << ijk2[1]+1 <<"," << ijk2[2]+1 << std::endl; - - OPM_THROW(std::runtime_error, "\n Grid1 and grid2 have different definitions of NNCs. "); - } - } - } - - std::cout << " done." << std::endl; - - if (!deviations.empty()) { - printDeviationReport(); - } - - } else { - std::cout << "\n!Warning, grid files not found, hence not compared. \n" << std::endl; - } - -} - - -void ECLRegressionTest::results_init() -{ - std::string fileName1, fileName2; - - bool foundInit1 = checkFileName(rootName1, "INIT", fileName1); - bool foundInit2 = checkFileName(rootName2, "INIT", fileName2); - - if ((foundInit1) && (not foundInit2)){ - std::string message ="test case init file " + rootName2 + ".INIT not found"; - std::cout << message << std::endl; - OPM_THROW(std::runtime_error, message); - } - - if (foundInit1 && foundInit2) { - EclFile init1(fileName1); - std::cout << "\nLoading INIT file " << fileName1 << " .... done" << std::endl; - - EclFile init2(fileName2); - std::cout << "Loading INIT file " << fileName2 << " .... done\n" << std::endl; - - deviations.clear(); - - init1.loadData(); - init2.loadData(); - - std::string reference = "Init file"; - - auto arrayList1 = init1.getList(); - auto arrayList2 = init2.getList(); - - std::vector keywords1; - std::vector arrayType1; - - for (const auto& array : arrayList1) { - keywords1.push_back(std::get<0>(array)); - arrayType1.push_back(std::get<1>(array)); - } - - std::vector keywords2; - std::vector arrayType2; - - for (const auto& array : arrayList2) { - keywords2.push_back(std::get<0>(array)); - arrayType2.push_back(std::get<1>(array)); - } - - if (printKeywordOnly) { - printComparisonForKeywordLists(keywords1,keywords2, arrayType1, arrayType2); - } else { - std::cout << "\nComparing init files \n" << std::endl; - - if (spesificKeyword.empty()) { - if (keywords1.size() == keywords2.size() && keywords1 != keywords2) { - /* - If the keywords come in different order in the two files - we mark that as a test failure, but all comparisons are - still performed, and the keyword reordering can be - identified by the error message. - */ - auto kw1 = sorted(keywords1); - auto kw2 = sorted(keywords2); - compareKeywords(kw1,kw2,reference); - std::cerr << "Keyword reordering detected in INIT file" << std::endl; - /* - The keyword reordering should eventually be marked as a an - error, but temporarily during the refactoring of 3D - properties it is only marked with a message to stderr. - This is to avoid deviations between ci builds and - developers builds. December 2019 - Joakim Hove - */ - //HANDLE_ERROR(std::runtime_error, "Keyword reordering detected in INIT file"); - } else - compareKeywords(keywords1, keywords2, reference); - } else { - checkSpesificKeyword(keywords1, keywords2, arrayType1, arrayType2, reference); - } - - for (size_t i = 0; i < keywords1.size(); i++) { - auto it1 = std::find(keywords2.begin(), keywords2.end(), keywords1[i]); - int ind2 = std::distance(keywords2.begin(),it1); - - if (arrayType1[i] != arrayType2[ind2]) { - printComparisonForKeywordLists(keywords1, keywords2, arrayType1, arrayType2); - OPM_THROW(std::runtime_error, "\nArray with same name '"<< keywords1[i] << "', but of different type. Init file "); - } - - auto it = std::find(keywordsBlackList.begin(), keywordsBlackList.end(), keywords1[i]); - - if (it != keywordsBlackList.end()){ - std::cout << "Skipping " << keywords1[i] << std::endl; - } else { - std::cout << "Comparing " << keywords1[i] << " ... "; - - if (arrayType1[i] == INTE) { - auto vect1 = init1.get(keywords1[i]); - auto vect2 = init2.get(keywords2[ind2]); - compareVectors(vect1, vect2, keywords1[i],reference); - } else if (arrayType1[i] == REAL) { - auto vect1 = init1.get(keywords1[i]); - auto vect2 = init2.get(keywords2[ind2]); - compareFloatingPointVectors(vect1, vect2, keywords1[i], reference); - } else if (arrayType1[i] == DOUB) { - auto vect1 = init1.get(keywords1[i]); - auto vect2 = init2.get(keywords2[ind2]); - compareFloatingPointVectors(vect1, vect2, keywords1[i], reference); - } else if (arrayType1[i] == LOGI) { - auto vect1 = init1.get(keywords1[i]); - auto vect2 = init2.get(keywords2[ind2]); - compareVectors(vect1, vect2, keywords1[i], reference); - } else if (arrayType1[i] == CHAR) { - auto vect1 = init1.get(keywords1[i]); - auto vect2 = init2.get(keywords2[ind2]); - compareVectors(vect1, vect2, keywords1[i], reference); - } else if (arrayType1[i] == MESS) { - // shold not be any associated data - } else { - std::cout << "unknown array type " << std::endl; - exit(1); - } - - std::cout << " done." << std::endl; - } - } - - if (!deviations.empty()) { - printDeviationReport(); - } - } - } else { - std::cout << "\n!Warning, init files not found, hence not compared. \n" << std::endl; - } - -} - - -void ECLRegressionTest::results_rst() -{ - std::string fileName1, fileName2; - bool foundRst1 = checkFileName(rootName1,"UNRST",fileName1); - bool foundRst2 = checkFileName(rootName2,"UNRST",fileName2); - - if ((foundRst1) && (not foundRst2)){ - std::string message ="test case restart file " + rootName2 + ".UNRST not found"; - std::cout << message << std::endl; - OPM_THROW(std::runtime_error, message); - } - - if (foundRst1 && foundRst2) { - ERst rst1(fileName1); - std::cout << "\nLoading restart file " << fileName1 << " .... done" << std::endl; - - ERst rst2(fileName2); - std::cout << "Loading restart file " << fileName2 << " .... done\n" << std::endl; - - std::vector seqnums1 = rst1.listOfReportStepNumbers(); - std::vector seqnums2 = rst2.listOfReportStepNumbers(); - - deviations.clear(); - - if (spesificSequence > -1) { - auto search1 = std::find(seqnums1.begin(), seqnums1.end(), spesificSequence); - auto search2 = std::find(seqnums2.begin(), seqnums2.end(), spesificSequence); - - if (search1 == seqnums1.end()) { - OPM_THROW(std::runtime_error, "\nSpecified sequence " << spesificSequence << " not found in restart files for case 1"); - } - - if (search2 == seqnums2.end()) { - OPM_THROW(std::runtime_error, "\nSpecified sequence " << spesificSequence << " not found in restart files for case 2"); - } - - seqnums1.clear(); - seqnums1.push_back(spesificSequence); - - seqnums2.clear(); - seqnums2.push_back(spesificSequence); - - } else if (onlyLastSequence) { - - if (seqnums1.back() != seqnums2.back()) { - OPM_THROW(std::runtime_error, "\nLast sequence not same for for case 1 and case 2"); - } - - seqnums1.clear(); - seqnums1.push_back(seqnums2.back()); - - seqnums2.clear(); - seqnums2.push_back(seqnums1.back()); - } - - if (seqnums1 != seqnums2) { - std::vector seqnStrList1; - std::vector seqnStrList2; - - for (auto& val : seqnums1) { - seqnStrList1.push_back(std::to_string(val)); - } - - for (auto& val : seqnums2) { - seqnStrList2.push_back(std::to_string(val)); - } - std::cout << "\nrestart sequences " << std::endl; - - printComparisonForKeywordLists(seqnStrList1, seqnStrList2); - OPM_THROW(std::runtime_error, "\nRestart files not having the same report steps: "); - } - - for (int& seqn : seqnums1) { - std::cout << "\nUnified restart files, sequence " << std::to_string(seqn) << "\n" << std::endl; - - std::string reference = "Restart, sequence "+std::to_string(seqn); - - rst1.loadReportStepNumber(seqn); - rst2.loadReportStepNumber(seqn); - - auto arrays1 = rst1.listOfRstArrays(seqn); - auto arrays2 = rst2.listOfRstArrays(seqn); - - std::vector keywords1; - std::vector arrayType1; - for (const auto& array : arrays1) { - keywords1.push_back(std::get<0>(array)); - arrayType1.push_back(std::get<1>(array)); - } - - std::vector keywords2; - std::vector arrayType2; - - for (const auto& array : arrays2) { - keywords2.push_back(std::get<0>(array)); - arrayType2.push_back(std::get<1>(array)); - } - - if (integrationTest) { - std::vector keywords; - - for (size_t i = 0; i < keywords1.size(); i++) { - if (keywords1[i] == "PRESSURE" || - keywords1[i] == "SWAT" || - keywords1[i] =="SGAS") { - auto search2 = std::find(keywords2.begin(), keywords2.end(), keywords1[i]); - if (search2 != keywords2.end()) { - keywords.push_back(keywords1[i]); - } - } - } - - keywords1 = keywords2 = keywords; - - int nKeys = keywords.size(); - arrayType1.assign(nKeys, REAL); - arrayType2.assign(nKeys, REAL); - } - - if (printKeywordOnly) { - printComparisonForKeywordLists(keywords1, keywords2, arrayType1, arrayType2); - } else { - if (spesificKeyword.empty()) { - compareKeywords(keywords1, keywords2, reference); - } else { - checkSpesificKeyword(keywords1, keywords2, arrayType1, arrayType2, reference); - } - - for (size_t i = 0; i < keywords1.size(); i++) { - auto it1 = std::find(keywords2.begin(), keywords2.end(), keywords1[i]); - int ind2 = std::distance(keywords2.begin(), it1); - - if (arrayType1[i] != arrayType2[ind2]) { - printComparisonForKeywordLists(keywords1, keywords2, arrayType1, arrayType2); - OPM_THROW(std::runtime_error, "\nArray with same name '"<< keywords1[i] << "', but of different type. Restart file" << - " sequenze " << std::to_string(seqn)); - } - - auto it = std::find(keywordsBlackList.begin(), keywordsBlackList.end(), keywords1[i]); - - if (it != keywordsBlackList.end()){ - std::cout << "Skipping " << keywords1[i] << std::endl; - } else { - - std::cout << "Comparing " << keywords1[i] << " ... "; - - if (arrayType1[i] == INTE) { - auto vect1 = rst1.getRst(keywords1[i], seqn, 0); - auto vect2 = rst2.getRst(keywords2[ind2], seqn, 0); - compareVectors(vect1, vect2, keywords1[i], reference); - } else if (arrayType1[i] == REAL) { - auto vect1 = rst1.getRst(keywords1[i], seqn, 0); - auto vect2 = rst2.getRst(keywords2[ind2], seqn, 0); - compareFloatingPointVectors(vect1, vect2, keywords1[i], reference); - } else if (arrayType1[i] == DOUB) { - auto vect1 = rst1.getRst(keywords1[i], seqn, 0); - auto vect2 = rst2.getRst(keywords2[ind2], seqn, 0); - - // hack in order to not test doubhead[1], dependent on simulation results - // All ohter items in DOUBHEAD are tested with strict tolerances - if (keywords1[i]=="DOUBHEAD"){ - vect2[1] = vect1[1]; - } - compareFloatingPointVectors(vect1, vect2, keywords1[i], reference); - } else if (arrayType1[i] == LOGI) { - auto vect1 = rst1.getRst(keywords1[i], seqn, 0); - auto vect2 = rst2.getRst(keywords2[ind2], seqn, 0); - compareVectors(vect1, vect2, keywords1[i], reference); - } else if (arrayType1[i] == CHAR) { - auto vect1 = rst1.getRst(keywords1[i], seqn, 0); - auto vect2 = rst2.getRst(keywords2[ind2], seqn, 0); - compareVectors(vect1, vect2, keywords1[i], reference); - } else if (arrayType1[i] == MESS) { - // shold not be any associated data - } else { - std::cout << "unknown array type " << std::endl; - exit(1); - } - - std::cout << " done." << std::endl; - } - } - } - } - - if (!deviations.empty()) { - printDeviationReport(); - } - } else { - std::cout << "\n!Warning, restart files not found, hence not compared. \n" << std::endl; - } - -} - - -void ECLRegressionTest::results_smry() -{ - std::string fileName1, fileName2; - bool foundSmspec1 = checkFileName(rootName1, "SMSPEC", fileName1); - bool foundSmspec2 = checkFileName(rootName2, "SMSPEC", fileName2); - - if ((foundSmspec1) && (not foundSmspec2)){ - std::string message ="test case summary file " + rootName2 + ".SMSPEC not found"; - std::cout << message << std::endl; - OPM_THROW(std::runtime_error, message); - } - - if (foundSmspec1 && foundSmspec2) { - ESmry smry1(fileName1, loadBaseRunData); - smry1.LoadData(); - std::cout << "\nLoading summary file " << fileName1 << " .... done" << std::endl; - - ESmry smry2(fileName2, loadBaseRunData); - smry2.LoadData(); - std::cout << "\nLoading summary file " << fileName2 << " .... done" << std::endl; - - deviations.clear(); - - std::string reference = "Summary file"; - - std::cout << "\nComparing summary files " << std::endl; - - if (reportStepOnly){ - std::cout << " -- Values at report steps will be compared. Time steps in between reports are ignored " << std::endl; - } - - std::vector keywords1 = smry1.keywordList(); - std::vector keywords2 = smry2.keywordList(); - - std::vector arrayType1(keywords1.size(), REAL); - std::vector arrayType2 (keywords1.size(), REAL); - - if (integrationTest) { - std::vector keywords; - - for (size_t i = 0; i < keywords1.size(); i++) { - if (keywords1[i].substr(0,5) == "WOPR:" || - keywords1[i].substr(0,5) == "WWPR:" || - keywords1[i].substr(0,5) == "WGPR:" || - keywords1[i].substr(0,5) == "WBHP:" || - keywords1[i].substr(0,4) == "SPR:") { - auto search2 = std::find(keywords2.begin(), keywords2.end(), keywords1[i]); - if (search2 != keywords2.end()) { - keywords.push_back(keywords1[i]); - } - } - } - - keywords1 = keywords2 = keywords; - - int nKeys = keywords.size(); - - arrayType1.assign(nKeys, REAL); - arrayType2.assign(nKeys, REAL); - } - - if (printKeywordOnly) { - if (keywords1.size() < 50) { - printComparisonForKeywordLists(keywords1, keywords2); - } else { - printMissingKeywords(keywords1, keywords2); - } - } else { - if (spesificKeyword.empty()) { - compareKeywords(keywords1, keywords2, reference); - } else { - checkSpesificKeyword(keywords1, keywords2, arrayType1, arrayType2, reference); - } - - std::vector blackListed; - - for (std::vector::iterator keywit = keywords1.begin(); keywit != keywords1.end(); ++keywit) { - auto it = std::find(keywordsBlackList.begin(), keywordsBlackList.end(), *keywit ); - - if (it != keywordsBlackList.end()){ - blackListed.push_back(*keywit); - keywit = keywords1.erase(keywit); - if (keywit != keywords1.end()) - --keywit; - } - } - - std::cout << "\nChecking " << keywords1.size() << " vectors ... "; - - for (size_t i = 0; i < keywords1.size(); i++) { - - std::vector vect1; - std::vector vect2; - - if (reportStepOnly){ - vect1 = smry1.get_at_rstep( keywords1[i]); - vect2 = smry2.get_at_rstep( keywords1[i]); - } else { - vect1 = smry1.get( keywords1[i]); - vect2 = smry2.get( keywords1[i]); - } - - if (vect1.size() != vect2.size()) { - OPM_THROW(std::runtime_error, "\nKeyword " << keywords1[i] << " summary vector of different length (" - << vect1.size() << " != " << vect2.size() <<")"); - } - - compareFloatingPointVectors(vect1, vect2, keywords1[i], reference); - } - - std::cout << " done." << std::endl; - - if (blackListed.size()>0){ - std::cout << "Number of black listed vectors " << blackListed.size() << " (not compared) " << std::endl; - } - - if (!deviations.empty()) { - printDeviationReport(); - } - } - - namespace fs = Opm::filesystem; - std::string rsm_file = rootName2 + ".RSM"; - if (fs::is_regular_file(fs::path(rsm_file))) { - auto rsm = ERsm(rsm_file); - if (!cmp(smry2, rsm)) - HANDLE_ERROR(std::runtime_error, "The RSM file did not compare equal to the summary file"); - } - - } else { - std::cout << "\n!Warning, summary files not found, hence not compared. \n" << std::endl; - } - -} - - -void ECLRegressionTest::results_rft() -{ - std::string fileName1, fileName2; - bool foundRft1 = checkFileName(rootName1, "RFT", fileName1); - bool foundRft2 = checkFileName(rootName2, "RFT", fileName2); - - if ((foundRft1) && (not foundRft2)){ - std::string message ="test case rft file " + rootName2 + ".RFT not found"; - std::cout << message << std::endl; - OPM_THROW(std::runtime_error, message); - } - - if (foundRft1 && foundRft2) { - ERft rft1(fileName1); - std::cout << "\nLoading rft file " << fileName1 << " .... done" << std::endl; - - ERft rft2(fileName2); - std::cout << "Loading rft file " << fileName2 << " .... done\n" << std::endl; - - auto rftReportList1 = rft1.listOfRftReports(); - auto rftReportList2 = rft2.listOfRftReports(); - - deviations.clear(); - - if (rftReportList1 != rftReportList2) { - std::vector rftList1; - for (auto& report : rftReportList1) { - std::string well = std::get<0>(report); - std::tuple date = std::get<1>(report); - std::string str1 = well +" (" + std::to_string(std::get<0>(date)) + "/" + std::to_string(std::get<1>(date)) + "/" + std::to_string(std::get<2>(date)) + ")"; - rftList1.push_back(str1); - } - - std::vector rftList2; - for (auto& report : rftReportList2) { - std::string well = std::get<0>(report); - std::tuple date = std::get<1>(report); - std::string str2 = well +" (" + std::to_string(std::get<0>(date)) + "/" + std::to_string(std::get<1>(date)) + "/" + std::to_string(std::get<2>(date)) + ")"; - rftList2.push_back(str2); - } - - printComparisonForKeywordLists(rftList1, rftList2); - - OPM_THROW(std::runtime_error, "\nNot same RFTs in in RFT file "); - } - - for (auto& report : rftReportList2) { - std::string well = std::get<0>(report); - std::tuple date = std::get<1>(report); - - std::string dateStr = std::to_string(std::get<0>(date)) + "/" + std::to_string(std::get<1>(date)) + "/" + std::to_string(std::get<2>(date)); - - std::cout << "Well: " << well << " date: " << dateStr << std::endl; - - std::string reference = "RFT: " + well + ", " + dateStr; - - auto vectList1 = rft1.listOfRftArrays(well, date); - auto vectList2 = rft2.listOfRftArrays(well, date); - - std::vector keywords1; - std::vector arrayType1; - for (auto& array : vectList1 ) { - keywords1.push_back(std::get<0>(array)) ; - arrayType1.push_back(std::get<1>(array)) ; - } - - std::vector keywords2; - std::vector arrayType2; - for (auto& array : vectList2 ) { - keywords2.push_back(std::get<0>(array)) ; - arrayType2.push_back(std::get<1>(array)) ; - } - - if (printKeywordOnly) { - printComparisonForKeywordLists(keywords1, keywords2, arrayType1, arrayType2); - } else { - if (spesificKeyword.empty()) { - compareKeywords(keywords1, keywords2, reference); - } else { - checkSpesificKeyword(keywords1, keywords2, arrayType1, arrayType2, reference); - } - - for (auto& array : vectList1 ) { - std::string keyword = std::get<0>(array); - eclArrType arrayType = std::get<1>(array); - - auto it = std::find(keywordsBlackList.begin(), keywordsBlackList.end(), keyword); - - if (it != keywordsBlackList.end()){ - std::cout << "Skipping " << keyword << std::endl; - } else { - std::cout << "Comparing: " << keyword << " ... "; - - if (arrayType == INTE) { - auto vect1 = rft1.getRft(keyword, well, date); - auto vect2 = rft2.getRft(keyword, well, date); - compareVectors(vect1, vect2, keyword, reference); - } else if (arrayType == REAL) { - auto vect1 = rft1.getRft(keyword, well, date); - auto vect2 = rft2.getRft(keyword, well, date); - compareFloatingPointVectors(vect1, vect2, keyword, reference); - } else if (arrayType == DOUB) { - auto vect1 = rft1.getRft(keyword, well, date); - auto vect2 = rft2.getRft(keyword, well, date); - compareFloatingPointVectors(vect1, vect2, keyword, reference); - } else if (arrayType == LOGI) { - auto vect1 = rft1.getRft(keyword, well, date); - auto vect2 = rft2.getRft(keyword, well, date); - compareVectors(vect1, vect2, keyword, reference); - } else if (arrayType == CHAR) { - auto vect1 = rft1.getRft(keyword, well, date); - auto vect2 = rft2.getRft(keyword, well, date); - compareVectors(vect1, vect2, keyword, reference); - } else if (arrayType == MESS) { - // shold not be any associated data - } else { - std::cout << "unknown array type " << std::endl; - exit(1); - } - - std::cout << " done." << std::endl; - } - } - } - std::cout << std::endl; - } - - if (!deviations.empty()) { - printDeviationReport(); - } - } else { - std::cout << "\n!Warning, rft files not found, hence not compared. \n" << std::endl; - } -} - - -void ECLRegressionTest::printComparisonForKeywordLists(const std::vector& arrayList1, - const std::vector& arrayList2, - const std::vector& arrayType1, - const std::vector& arrayType2) const -{ - unsigned int maxLen = 0; - - std::vector arrTypeStrList = {"INTE", "REAL", "DOUB", "CHAR", "LOGI", "MESS"}; - - std::set commonList; - - for (auto& key : arrayList1) { - commonList.insert(key); - } - - for (auto& key : arrayList2) { - commonList.insert(key); - } - - for (auto& key : commonList) { - if (key.size() > maxLen) { - maxLen = key.size(); - } - } - - maxLen += 4; - - std::cout << std::endl; - - for (auto& it : commonList) { - auto it1 = std::find(arrayList1.begin(), arrayList1.end(), it); - int ind1 = std::distance(arrayList1.begin(), it1); - - auto it2 = std::find(arrayList2.begin(), arrayList2.end(), it); - int ind2 = std::distance(arrayList2.begin(),it2); - - if (arrayType1[ind1] != arrayType2[ind2]) { - std::cout << "\033[1;31m"; - } - - if (std::find(arrayList1.begin(), arrayList1.end(), it) != arrayList1.end()) { - std::cout << std::setw(maxLen) << it << " (" << arrTypeStrList[arrayType1[ind1]] << ") | "; - } else { - std::cout << std::setw(maxLen) << "" << " | "; - } - - if (std::find(arrayList2.begin(), arrayList2.end(), it) != arrayList2.end()) { - std::cout << std::setw(maxLen) << it << " (" << arrTypeStrList[arrayType2[ind2]] << ") "; - } else { - std::cout << std::setw(maxLen) << ""; - } - - if (arrayType1[ind1] != arrayType2[ind2]) { - std::cout << " !" << "\033[0m"; - } - - std::cout << std::endl; - } - - std::cout << std::endl << std::endl; -} - - -void ECLRegressionTest::printMissingKeywords(const std::vector& arrayList1, - const std::vector& arrayList2) const -{ - std::set commonList; - - for (auto& key : arrayList1) { - commonList.insert(key); - } - - for (auto& key : arrayList2) { - commonList.insert(key); - } - - std::cout << "\nKeywords found in second case, but missing in first case: \n" << std::endl; - - for (auto& it : commonList) { - if (std::find(arrayList1.begin(), arrayList1.end(), it) == arrayList1.end()) { - std::cout << " > '" << it << "'" << std::endl; - } - } - - std::cout << "\nKeywords found in first case, but missing in second case: \n" << std::endl; - - for (auto& it : commonList) { - if (std::find(arrayList2.begin(), arrayList2.end(), it) == arrayList2.end()) { - std::cout << " > '" << it << "'" << std::endl; - } - } -} - - -void ECLRegressionTest::printComparisonForKeywordLists(const std::vector& arrayList1, - const std::vector& arrayList2) const -{ - std::set commonList; - unsigned int maxLen = 0; - - for (auto& key : arrayList1) { - commonList.insert(key); - } - - for (auto& key : arrayList2) { - commonList.insert(key); - } - - for (auto& key : commonList) { - if (key.size() > maxLen) { - maxLen = key.size(); - } - } - - maxLen += 2; - - std::cout << std::endl; - - for (auto& it : commonList) { - if (std::find(arrayList1.begin(), arrayList1.end(), it) != arrayList1.end()) { - std::cout << std::setw(maxLen) << it << " | "; - } else { - std::cout << std::setw(maxLen) << "" << " | "; - } - - if (std::find(arrayList2.begin(), arrayList2.end(), it) != arrayList2.end()) { - std::cout << std::setw(maxLen) << it << ""; - } else { - std::cout << std::setw(maxLen) << "" ; - } - - std::cout << std::endl; - } - - std::cout << std::endl; -} diff --git a/ThirdParty/custom-opm-common/opm-common/test_util/EclRegressionTest.hpp b/ThirdParty/custom-opm-common/opm-common/test_util/EclRegressionTest.hpp deleted file mode 100644 index 3f042deffd..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/test_util/EclRegressionTest.hpp +++ /dev/null @@ -1,192 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#ifndef ECLREGRESSIONTEST_HPP -#define ECLREGRESSIONTEST_HPP - -#include "EclFilesComparator.hpp" - -#include - -namespace Opm { namespace EclIO { - class EGrid; -}} - -namespace EIOD = Opm::EclIO; - - -/*! \brief A class for executing a regression test for two ECLIPSE files. - \details This class inherits from ECLFilesComparator, which opens and - closes the input cases and stores keywordnames. - The three public functions gridCompare(), results() and - resultsForKeyword() can be invoked to compare griddata - or keyworddata for all keywords or a given keyword (resultsForKeyword()). - */ -class ECLRegressionTest: public ECLFilesComparator { -public: - //! \brief Sets up the regression test. - //! \param[in] basename1 Full path without file extension to the first case. - //! \param[in] basename2 Full path without file extension to the second case. - //! \param[in] absTolerance Tolerance for absolute deviation. - //! \param[in] relTolerance Tolerance for relative deviation. - //! \details This constructor only calls the constructor of the superclass, see the docs for ECLFilesComparator for more information. - ECLRegressionTest(const std::string& basename1, const std::string& basename2, - double absToleranceArg, double relToleranceArg): - ECLFilesComparator(basename1, basename2, absToleranceArg, relToleranceArg) {} - - ~ECLRegressionTest(); - - //! \brief Option to only compare last occurrence - void setOnlyLastReportNumber(bool onlyLastSequenceArg) { - this->onlyLastSequence = onlyLastSequenceArg; - } - - int countDev() { return deviations.size(); } - - // Accept extra keywords: If this switch is set to true the comparison - // will ignore extra keywords which are only present - // in the new simulation. - - void setReportStepOnly(bool reportStepOnlyArg) { - this->reportStepOnly = reportStepOnlyArg; - } - - void setAcceptExtraKeywords(bool acceptExtraKeywordsArg) { - this->acceptExtraKeywords = acceptExtraKeywordsArg; - } - - void setIntegrationTest(bool inregrationTestArg) { - this->integrationTest = inregrationTestArg; - } - - void setPrintKeywordOnly(bool printArg) { - this->printKeywordOnly = printArg; - } - - void compareSpesificKeyword(std::string keyword) { - this->spesificKeyword = std::move(keyword); - } - void compareSpesificRstReportStepNumber(int seqn) { - this->spesificSequence = seqn; - } - - void setLoadBaseRunData(bool loadArg) { - this->loadBaseRunData = loadArg; - } - - void loadGrids(); - void printDeviationReport(); - - void gridCompare(); - - void results_rst(); - void results_init(); - void results_smry(); - void results_rft(); - -private: - bool checkFileName(const std::string& rootName, const std::string& extension, std::string& filename); - - // Prints results stored in absDeviation and relDeviation. - void printResultsForKeyword(const std::string& keyword) const; - void printComparisonForKeywordLists(const std::vector& arrayList1, - const std::vector& arrayList2) const; - - void printComparisonForKeywordLists(const std::vector& arrayList1, - const std::vector& arrayList2, - const std::vector& arrayType1, - const std::vector& arrayType2) const; - - void printMissingKeywords(const std::vector& arrayList1, - const std::vector& arrayList2) const; - - void compareKeywords(const std::vector& keywords1, - const std::vector& keywords2, - const std::string& reference); - - void checkSpesificKeyword(std::vector& keywords1, - std::vector& keywords2, - std::vector& arrayType1, - std::vector& arrayType2, - const std::string& reference); - - template - void compareVectors(const std::vector& t1, const std::vector& t2, - const std::string& keyword, const std::string& reference); - - template - void compareFloatingPointVectors(const std::vector& t1, const std::vector &t2, - const std::string& keyword, const std::string& reference); - - // deviationsForCell throws an exception if both the absolute deviation AND the relative deviation - // are larger than absTolerance and relTolerance, respectively. In addition, - // if allowNegativeValues is passed as false, an exception will be thrown when the absolute value - // of a negative value exceeds absTolerance. If no exceptions are thrown, the absolute and relative deviations are added to absDeviation and relDeviation. - // void deviationsForCell(double val1, double val2, const std::string& keyword, const std::string reference, size_t kw_size, size_t cell, bool allowNegativeValues = true); - - void deviationsForCell(double val1, double val2, const std::string& keyword, - const std::string& reference, size_t kw_size, size_t cell, - bool allowNegativeValues, bool useStrictTol); - - template - void deviationsForNonFloatingPoints(T val1, T val2, const std::string& keyword, - const std::string& reference, - size_t kw_size, size_t cell); - - // These vectors store absolute and relative deviations, respecively. Note that they are whiped clean for every new keyword comparison. - std::vector absDeviation, relDeviation; - - // Keywords which should not contain negative values, i.e. uses allowNegativeValues = false in deviationsForCell(): - const std::vector keywordDisallowNegatives = {"SGAS", "SWAT", "PRESSURE"}; - - double strictAbsTol = 1e-6; - double strictRelTol = 1e-6; - - // keywords that triggers strict tolerances - const std::vector keywordsStrictTol = {"COORD", "ZCORN", "PORV", "DEPTH", "DX", "DY", "DZ", "PERMX", "PERMY", "PERMZ", "NTG", - "TRANX", "TRANY", "TRANZ", "TRANNNC", "SGRP", "SCON", "DOUBHEAD" - }; - // keywords that should not be compared - const std::vector keywordsBlackList = {"TCPU"}; - - bool reportStepOnly = false; - - // Only compare last occurrence - bool onlyLastSequence = false; - - bool integrationTest = false; - - bool printKeywordOnly = false; - - bool loadBaseRunData = false; - - // spesific keyword to be compared - std::string spesificKeyword; - - // spesific restart sequence to be compared - int spesificSequence = -1; - - // Accept extra keywords in the restart file of the 'new' simulation. - bool acceptExtraKeywords = false; - - Opm::EclIO::EGrid* grid1 = nullptr; - Opm::EclIO::EGrid* grid2 = nullptr; -}; - -#endif diff --git a/ThirdParty/custom-opm-common/opm-common/test_util/compareECL.cpp b/ThirdParty/custom-opm-common/opm-common/test_util/compareECL.cpp deleted file mode 100644 index 540fbc7112..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/test_util/compareECL.cpp +++ /dev/null @@ -1,262 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include "EclRegressionTest.hpp" - -#include - -#include -#include -#include -#include - -static void printHelp() { - std::cout << "\ncompareECL compares ECLIPSE files (restart (.RST), unified restart (.UNRST), initial (.INIT), summary (.SMRY), unified summary (.UNSMRY) or .RFT) and gridsizes (from .EGRID or .GRID file) from two simulations.\n" - << "The program takes four arguments:\n\n" - << "1. Case number 1, reference case (full path without extension)\n" - << "2. Case number 2, test case (full path without extension)\n" - << "3. Absolute tolerance\n" - << "4. Relative tolerance (between 0 and 1)\n\n" - << "In addition, the program takes these options (which must be given before the arguments):\n\n" - << "-a Run a full analysis of errors.\n" - << "-h Print help and exit.\n" - << "-d Use report steps only when comparing results from summary files.\n" - << "-i Execute integration test (regression test is default).\n" - << " The integration test compares SGAS, SWAT and PRESSURE in unified restart files, and WOPR, WGPR, WWPR and WBHP (all wells) in summary file. \n" - << "-k Specify specific keyword to compare (capitalized), for examples -k PRESSURE or -k WOPR:A-1H \n" - << "-l Only do comparison for the last Report Step. This option is only valid for restart files.\n" - << "-n Do not throw on errors.\n" - << "-p Print keywords in both cases and exit.\n" - << "-r compare a spesific report time step number in a restart file.\n" - << "-t Specify ECLIPSE filetype to compare, (default behaviour is that all files are compared if found). Different possible arguments are:\n" - << " -t UNRST \t Compare two unified restart files (.UNRST). This the default value, so it is the same as not passing option -t.\n" - << " -t EGRID \t Compare two EGrid files (.EGRID).\n" - << " -t INIT \t Compare two initial files (.INIT).\n" - << " -t RFT \t Compare two RFT files (.RFT).\n" - << " -t SMRY \t Compare two cases consistent of (unified) summary files.\n" - << "-x Allow extra keywords in case number 2. These additional keywords (not found in case number1) will be ignored in the comparison.\n" - << "\nExample usage of the program: \n\n" - << "compareECL -k PRESSURE 1e-3 1e-5\n" - << "compareECL -t INIT -k PORO 1e-3 1e-5\n" - << "compareECL -i 0.01 1e-6\n\n" - << "Exceptions are thrown (and hence program exits) when deviations are larger than the specified " - << "tolerances, or when the number of cells does not match -- either in the grid file or for a " - << "specific keyword. Information about the keyword, keyword occurrence (zero based) and cell " - << "coordinate is printed when an exception is thrown. For more information about how the cases " - << "are compared, see the documentation of the EclFilesComparator class.\n\n"; -} - - - -static bool has_result_files(const std::string& rootName) -{ - std::vector extList = { "EGRID", "INIT", "UNRST", "SMSPEC", "RFT" }; - - for (const auto& ext : extList) { - std::ifstream is(rootName + '.' + ext); - if (is) { - return true; - } - } - - return false; -} - -//------------------------------------------------// - -int main(int argc, char** argv) { - bool integrationTest = false; - bool onlyLastSequence = false; - bool reportStepOnly = false; - bool printKeywords = false; - bool specificKeyword = false; - bool specificReportStepNumber = false; - bool specificFileType = false; - bool throwOnError = true; - bool restartFile = false; - bool acceptExtraKeywords = false; - bool analysis = false; - char* keyword = nullptr; - int c = 0; - int reportStepNumber = -1; - std::string fileTypeString; - - while ((c = getopt(argc, argv, "hik:alnpt:Rr:x:d")) != -1) { - switch (c) { - case 'a': - analysis = true; - throwOnError = false; - break; - case 'h': - printHelp(); - return 0; - case 'd': - reportStepOnly = true; - break; - case 'i': - integrationTest = true; - break; - case 'k': - specificKeyword = true; - keyword = optarg; - break; - case 'l': - onlyLastSequence = true; - break; - case 'n': - throwOnError = false; - break; - case 'p': - printKeywords = true; - break; - case 'r': - specificReportStepNumber=true; - reportStepNumber = atoi(optarg); - break; - case 'R': - restartFile = true; - break; - case 't': - specificFileType = true; - fileTypeString=optarg; - break; - case 'x': - acceptExtraKeywords = true; - break; - case '?': - if (optopt == 'k' || optopt == 'm' || optopt == 's') { - std::cerr << "Option " << optopt << " requires a keyword as argument, see manual (-h) for more information." << std::endl; - return EXIT_FAILURE; - } - else if (optopt == 't') { - std::cerr << "Option t requires an ECLIPSE filetype as argument, see manual (-h) for more information." << std::endl; - return EXIT_FAILURE; - } - else { - std::cerr << "Unknown option." << std::endl; - return EXIT_FAILURE; - } - default: - return EXIT_FAILURE; - } - } - - int argOffset = optind; - - if (argc != argOffset + 4) { - std::cerr << "Error: The number of options and arguments given is not correct. " - << "Please run compareECL -h to see manual." << std::endl; - return EXIT_FAILURE; - } - - std::string basename1 = argv[argOffset]; - std::string basename2 = argv[argOffset + 1]; - double absTolerance = strtod(argv[argOffset + 2], nullptr); - double relTolerance = strtod(argv[argOffset + 3], nullptr); - - std::cout << "Comparing '" << basename1 << "' to '" << basename2 << "'." << std::endl; - - if (!has_result_files(basename1)){ - std::cerr << "No files found for reference case." << std::endl; - return EXIT_FAILURE; - } - - try { - ECLRegressionTest comparator(basename1, basename2, absTolerance, relTolerance); - - comparator.throwOnErrors(throwOnError); - comparator.doAnalysis(analysis); - comparator.setAcceptExtraKeywords(acceptExtraKeywords); - - if (integrationTest) { - comparator.setIntegrationTest(true); - } - - if (printKeywords) { - comparator.setPrintKeywordOnly(printKeywords); - } - - if (onlyLastSequence) { - comparator.setOnlyLastReportNumber(true); - } - - if (reportStepOnly) { - comparator.setReportStepOnly(true); - } - - if (specificKeyword) { - comparator.compareSpesificKeyword(keyword); - } - - if (specificReportStepNumber) { - comparator.compareSpesificRstReportStepNumber(reportStepNumber); - } - - if (restartFile) { - comparator.setLoadBaseRunData(true); - } - - comparator.loadGrids(); - - if (integrationTest && specificFileType) { - if (fileTypeString=="EGRID" || fileTypeString=="INIT" || fileTypeString=="RFT") { - std::cerr << "Integration test and spesific file type, only valid for UNRST and SMRY" << std::endl; - return EXIT_FAILURE; - } - } - - if (specificFileType) { - if (fileTypeString == "EGRID") { - comparator.gridCompare(); - } else if (fileTypeString == "INIT") { - comparator.results_init(); - } else if (fileTypeString == "UNRST") { - comparator.results_rst(); - } else if (fileTypeString == "SMRY") { - comparator.results_smry(); - } else if (fileTypeString == "RFT") { - comparator.results_rft(); - } else { - std::cerr << "Unknown ECLIPSE filetype specified with option -t. Please run compareECL -h to see manual." << std::endl; - return EXIT_FAILURE; - } - - } else if (integrationTest) { - comparator.results_rst(); - comparator.results_smry(); - } else { - comparator.gridCompare(); - comparator.results_init(); - comparator.results_rst(); - comparator.results_smry(); - comparator.results_rft(); - } - - if (comparator.getNoErrors() > 0) - OPM_THROW(std::runtime_error, comparator.getNoErrors() << " errors encountered in comparisons."); - } - - catch (const std::exception& e) { - std::cerr << "Program threw an exception: " << e.what() << std::endl; - return EXIT_FAILURE; - } - - std::cout << "\nProgram finished \n" << std::endl; - - return 0; -} diff --git a/ThirdParty/custom-opm-common/opm-common/test_util/convertECL.cpp b/ThirdParty/custom-opm-common/opm-common/test_util/convertECL.cpp deleted file mode 100644 index e2713b65ef..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/test_util/convertECL.cpp +++ /dev/null @@ -1,252 +0,0 @@ -#include -#include -#include -#include -#include - -#include -#include -#include - -using namespace Opm::EclIO; -using EclEntry = EclFile::EclEntry; - -template -void write(EclOutput& outFile, EclFile& file1, - const std::string& name, int index) -{ - auto vect = file1.get(index); - outFile.write(name, vect); -} - - -template -void write(EclOutput& outFile, ERst& file1, - const std::string& name, int index, int reportStepNumber) -{ - auto vect = file1.getRst(index, reportStepNumber); - outFile.write(name, vect); -} - -template -void write(EclOutput& outFile, ERst& file1, - const std::string& name, int index) -{ - auto vect = file1.get(index); - outFile.write(name, vect); -} - - -template -void writeArray(std::string name, eclArrType arrType, T& file1, int index, EclOutput& outFile) { - - if (arrType == INTE) { - write(outFile, file1, name, index); - } else if (arrType == REAL) { - write(outFile, file1, name,index); - } else if (arrType == DOUB) { - write(outFile, file1, name, index); - } else if (arrType == LOGI) { - write(outFile, file1, name, index); - } else if (arrType == CHAR) { - write(outFile, file1, name, index); - } else if (arrType == MESS) { - outFile.message(name); - } else { - std::cout << "unknown array type " << std::endl; - exit(1); - } -} - -template -void writeArray(std::string name, eclArrType arrType, T& file1, int index, int reportStepNumber, EclOutput& outFile) { - - if (arrType == INTE) { - write(outFile, file1, name, index, reportStepNumber); - } else if (arrType == REAL) { - write(outFile, file1, name, index, reportStepNumber); - } else if (arrType == DOUB) { - write(outFile, file1, name, index, reportStepNumber); - } else if (arrType == LOGI) { - write(outFile, file1, name, index, reportStepNumber); - } else if (arrType == CHAR) { - write(outFile, file1, name, index, reportStepNumber); - } else if (arrType == MESS) { - outFile.message(name); - } else { - std::cout << "unknown array type " << std::endl; - exit(1); - } -} - -void writeArrayList(std::vector& arrayList, EclFile file1, EclOutput& outFile) { - - for (size_t index = 0; index < arrayList.size(); index++) { - std::string name = std::get<0>(arrayList[index]); - eclArrType arrType = std::get<1>(arrayList[index]); - writeArray(name, arrType, file1, index, outFile); - } -} - -void writeArrayList(std::vector& arrayList, ERst file1, int reportStepNumber, EclOutput& outFile) { - - for (size_t index = 0; index < arrayList.size(); index++) { - std::string name = std::get<0>(arrayList[index]); - eclArrType arrType = std::get<1>(arrayList[index]); - writeArray(name, arrType, file1, index , reportStepNumber, outFile); - } -} - -static void printHelp() { - - std::cout << "\nconvertECL needs one argument which is the input file to be converted. If this is a binary file the output file will be formatted. If the input file is formatted the output will be binary. \n" - << "\nIn addition, the program takes these options (which must be given before the arguments):\n\n" - << "-h Print help and exit.\n" - << "-l list report step numbers in the selected restart file.\n" - << "-r extract and convert a spesific report time step number from a unified restart file. \n\n"; -} - -int main(int argc, char **argv) { - - int c = 0; - int reportStepNumber = -1; - bool specificReportStepNumber = false; - bool listProperties = false; - - while ((c = getopt(argc, argv, "hr:l")) != -1) { - switch (c) { - case 'h': - printHelp(); - return 0; - case 'l': - listProperties=true; - break; - case 'r': - specificReportStepNumber=true; - reportStepNumber = atoi(optarg); - break; - default: - return EXIT_FAILURE; - } - } - - int argOffset = optind; - - // start reading - auto start = std::chrono::system_clock::now(); - std::string filename = argv[argOffset]; - - EclFile file1(filename); - bool formattedOutput = file1.formattedInput() ? false : true; - - int p = filename.find_last_of("."); - int l = filename.length(); - - std::string rootN = filename.substr(0,p); - std::string extension = filename.substr(p,l-p); - std::string resFile; - - if (listProperties) { - - if (extension==".UNRST") { - - ERst rst1(filename); - rst1.loadData("INTEHEAD"); - - std::vector reportStepList=rst1.listOfReportStepNumbers(); - - for (auto seqn : reportStepList) { - - std::vector inteh = rst1.getRst("INTEHEAD", seqn, 0); - - std::cout << "Report step number: " - << std::setfill(' ') << std::setw(4) << seqn << " Date: " << inteh[66] << "/" - << std::setfill('0') << std::setw(2) << inteh[65] << "/" - << std::setfill('0') << std::setw(2) << inteh[64] << std::endl; - } - - std::cout << std::endl; - - } else { - std::cout << "\n!ERROR, option -l only only available for unified restart files (*.UNRST) " << std::endl; - exit(1); - } - - return 0; - } - - std::map to_formatted = {{".EGRID", ".FEGRID"}, {".INIT", ".FINIT"}, {".SMSPEC", ".FSMSPEC"}, - {".UNSMRY", ".FUNSMRY"}, {".UNRST", ".FUNRST"}, {".RFT", ".FRFT"}}; - - std::map to_binary = {{".FEGRID", ".EGRID"}, {".FINIT", ".INIT"}, {".FSMSPEC", ".SMSPEC"}, - {".FUNSMRY", ".UNSMRY"}, {".FUNRST", ".UNRST"}, {".FRFT", ".RFT"}}; - - if (formattedOutput) { - - auto search = to_formatted.find(extension); - - if (search != to_formatted.end()){ - resFile = rootN + search->second; - } else if (extension.substr(1,1)=="X"){ - resFile = rootN + ".F" + extension.substr(2); - } else if (extension.substr(1,1)=="S"){ - resFile = rootN + ".A" + extension.substr(2); - } else { - std::cout << "\n!ERROR, unknown file type for input file '" << rootN + extension << "'\n" << std::endl; - exit(1); - } - } else { - - auto search = to_binary.find(extension); - - if (search != to_binary.end()){ - resFile = rootN + search->second; - } else if (extension.substr(1,1)=="F"){ - resFile = rootN + ".X" + extension.substr(2); - } else if (extension.substr(1,1)=="A"){ - resFile = rootN + ".S" + extension.substr(2); - } else { - std::cout << "\n!ERROR, unknown file type for input file '" << rootN + extension << "'\n" << std::endl; - exit(1); - } - } - - std::cout << "\033[1;31m" << "\nconverting " << argv[argOffset] << " -> " << resFile << "\033[0m\n" << std::endl; - - EclOutput outFile(resFile, formattedOutput); - - if (specificReportStepNumber) { - - if (extension!=".UNRST") { - std::cout << "\n!ERROR, option -r only can only be used with unified restart files (*.UNRST) " << std::endl; - exit(1); - } - - ERst rst1(filename); - - if (!rst1.hasReportStepNumber(reportStepNumber)) { - std::cout << "\n!ERROR, selected unified restart file doesn't have report step number " << reportStepNumber << "\n" << std::endl; - exit(1); - } - - rst1.loadReportStepNumber(reportStepNumber); - - auto arrayList = rst1.listOfRstArrays(reportStepNumber); - - writeArrayList(arrayList, rst1, reportStepNumber, outFile); - - } else { - - file1.loadData(); - auto arrayList = file1.getList(); - - writeArrayList(arrayList, file1, outFile); - } - - auto end = std::chrono::system_clock::now(); - std::chrono::duration elapsed_seconds = end-start; - - std::cout << "runtime : " << argv[argOffset] << ": " << elapsed_seconds.count() << " seconds\n" << std::endl; - - return 0; -} diff --git a/ThirdParty/custom-opm-common/opm-common/test_util/summary.cpp b/ThirdParty/custom-opm-common/opm-common/test_util/summary.cpp deleted file mode 100644 index 57fea83f0e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/test_util/summary.cpp +++ /dev/null @@ -1,147 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include -#include -#include -#include -#include -#include - -#include - - -static void printHelp() { - - std::cout << "\nsummary needs a minimum of two arguments. First is smspec filename and then list of vectors \n" - << "\nIn addition, the program takes these options (which must be given before the arguments):\n\n" - << "-h Print help and exit.\n" - << "-l list all summary vectors.\n" - << "-r extract data only for report steps. \n\n"; -} - -void printHeader(const std::vector& keyList){ - - std::cout << "--" << std::setw(14) << keyList[0]; - - for (size_t n= 1; n < keyList.size(); n++){ - std::cout << std::setw(16) << keyList[n]; - } - - std::cout << std::endl; -} - -std::string formatString(float data){ - - std::stringstream stream; - - if (std::fabs(data) < 1e6){ - stream << std::fixed << std::setw(16) << std::setprecision(6) << data; - } else { - stream << std::scientific << std::setw(16) << std::setprecision(6) << data; - } - - return stream.str(); -} - -int main(int argc, char **argv) { - - int c = 0; - bool reportStepsOnly = false; - bool listKeys = false; - - while ((c = getopt(argc, argv, "hrl")) != -1) { - switch (c) { - case 'h': - printHelp(); - return 0; - case 'r': - reportStepsOnly=true; - break; - case 'l': - listKeys=true; - break; - default: - return EXIT_FAILURE; - } - } - - int argOffset = optind; - - std::string filename = argv[argOffset]; - Opm::EclIO::ESmry smryFile(filename); - - if (listKeys){ - auto list = smryFile.keywordList(); - - for (size_t n = 0; n < list.size(); n++){ - std::cout << std::setw(20) << list[n]; - - if (((n+1) % 5)==0){ - std::cout << std::endl; - } - } - - std::cout << std::endl; - - return 0; - } - - std::vector smryList; - for (int i=0; i> " << message << "\n\n"; - return EXIT_FAILURE; - } - - for (auto vect : list) - smryList.push_back(vect); - } - } - - if (smryList.size()==0){ - std::string message = "No summary keys specified on command line"; - std::cout << "\n!Runtime Error \n >> " << message << "\n\n"; - return EXIT_FAILURE; - } - - std::vector> smryData; - - for (auto key : smryList) { - std::vector vect = reportStepsOnly ? smryFile.get_at_rstep(key) : smryFile.get(key); - smryData.push_back(vect); - } - - printHeader(smryList); - - for (size_t s=0; s -#include -#include -#include -#include - -#include -#include - -#include -#include - -using namespace Opm::EclIO; -using EclEntry = EclFile::EclEntry; - - -static void printHelp() { - - std::cout << "\nSmall test program used to test performance for ESmry class. Two arguments needed.\n" - << "\nfirst name of smspec file, and second is vector list:\n" - << "\nExample\n > test_esmry_lod -p out.txt TEST.SMSPEC \"FOPR FGPR\" \n\n" - << "\nIn addition, the program takes these options (which must be given before the arguments):\n\n" - << "-h Print help and exit.\n" - << "-p write selected vectors to file .\n\n"; -} - - -std::vector splitString(std::string str){ - - std::vector res_vect; - - int p1 = 0; - - while (p1 != -1 ) { - p1 = str.find_first_not_of(' ', p1); - int p2 = str.find_first_of(" ", p1+1); - res_vect.push_back(str.substr(p1, p2 - p1) ); - p1 = p2; - } - - return res_vect; -} - - -int main(int argc, char **argv) { - - int c = 0; - bool output = false; - bool compare = false; - bool loadOnDemand = false; - std::string outFileName = ""; - std::string refFileName = ""; - - while ((c = getopt(argc, argv, "hp:c:l")) != -1) { - switch (c) { - case 'h': - printHelp(); - return 0; - case 'p': - output=true; - outFileName = optarg; - break; - case 'c': - compare = true; - refFileName = optarg; - break; - case 'l': - loadOnDemand = true; - break; - - default: - return EXIT_FAILURE; - } - } - - int argOffset = optind; - - if (compare) { - - std::cout << "\ncompare " << argv[argOffset] << " vs ref: " << refFileName << std::endl; - - std::string filename = argv[argOffset]; - - auto lap1 = std::chrono::system_clock::now(); - - ESmry smry1(filename, false); - ESmry smry2(refFileName, false); - - smry1.LoadData(); - smry2.LoadData(); - - auto kwlist1 = smry1.keywordList(); - auto kwlist2 = smry2.keywordList(); - - if (kwlist1.size() !=kwlist2.size()) - throw std::runtime_error("size of keyword lists differ"); - - for (size_t n = 0; n < kwlist1.size(); n++) - if (kwlist1[n] != kwlist1[n]) - throw std::runtime_error("keyword element differ"); - - std::cout << kwlist1.size() << " vs " << kwlist2.size() << std::endl; - - for (auto keyw : kwlist1){ - auto v1 = smry1.get(keyw); - auto v2 = smry2.get(keyw); - - if (v1.size() != v2.size()) - throw std::runtime_error("size of vector differ"); - - for (size_t m = 0; m < v1.size(); m++) { - - float absDiff = abs( v1[m]- v2[m]); - - if (v2[m] > 0.0) - absDiff = absDiff / v2[m]; - - if (absDiff > 0.0000001) { - std::cout << "not equal. keyword: " << keyw << " v1: " << v1[m] << " vs v2: " << v2[m] << std::endl; - exit(1); - } - } - } - - auto lap2 = std::chrono::system_clock::now(); - std::chrono::duration elapsed_seconds2 = lap2-lap1; - - - std::cout << "runtime for test : " << elapsed_seconds2.count() << " seconds\n" << std::endl; - exit(0); - } - /* - do { - std::cout << '\n' << "Press a key to continue..."; - } while ( std::cin.get() != '\n' ); - */ - - // start reading - auto start = std::chrono::system_clock::now(); - std::string filename = argv[argOffset]; - - - ESmry smry1(filename, true); - //ESmry smry1(filename, false); - - auto lap1 = std::chrono::system_clock::now(); - std::chrono::duration elapsed_seconds1 = lap1-start; - - - if (argc < 3) - throw std::invalid_argument("second argument should be a vector list, example \"FOPR FWCT\""); - - std::string inputVectors(argv[argOffset+1]); - std::vector vectKeyList = splitString(inputVectors); - - if (loadOnDemand) { - std::cout << "\nloading vectors "; - for (auto key : vectKeyList) - std::cout << key << " "; - - std::cout << "\n" << std::endl; - - smry1.LoadData(vectKeyList); - } else { - - std::cout << "\nloading all vectors \n" << std::endl; - smry1.LoadData(); - } - - auto lap2 = std::chrono::system_clock::now(); - std::chrono::duration elapsed_seconds2 = lap2-lap1; - - - std::vector> dataList; - - for (auto key : vectKeyList){ - auto vect = smry1.get_at_rstep(key); - dataList.push_back(vect); - } - - auto lap3 = std::chrono::system_clock::now(); - std::chrono::duration elapsed_seconds3 = lap3-lap2; - - - std::cout << "runtime : " << argv[argOffset] << ": " << elapsed_seconds1.count() << " seconds\n" << std::endl; - std::cout << "runtime loading vector list: " << elapsed_seconds2.count() << " seconds\n" << std::endl; - std::cout << "runtime getting vectors vector list: " << elapsed_seconds3.count() << " seconds\n" << std::endl; - - std::chrono::duration elapsed_total = lap3-start; - std::cout << "runtime total: " << elapsed_total.count() << " seconds\n" << std::endl; - - if (output){ - - int colw = 15; - std::cout << "write to file " << outFileName << std::endl; - - std::ofstream outfile; - outfile.open(outFileName); - - outfile << std::setw(colw) << "ts"; - for (auto key : vectKeyList) - outfile << std::setw(colw) << key; - - outfile << std::endl; - - - for (size_t n =1; n < dataList.size(); n++) - if (dataList[n].size() != dataList[n-1].size()) - throw std::runtime_error("size of vectors differs "); - - for (size_t t = 0; t < dataList[0].size(); t++){ - outfile << std::setw(colw) << t; - - for (size_t n = 0; n < dataList.size(); n++) - outfile << std::setw(colw) << std::scientific << std::setprecision(8) << dataList[n][t]; - - outfile << std::endl; - } - - outfile.close(); - } - - /* - do { - std::cout << '\n' << "Press a key to exit ..."; - } while ( std::cin.get() != '\n' ); - */ - - return 0; -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/BASE_SIM.DATA b/ThirdParty/custom-opm-common/opm-common/tests/BASE_SIM.DATA deleted file mode 100644 index e22ce991ff..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/BASE_SIM.DATA +++ /dev/null @@ -1,128 +0,0 @@ -RUNSPEC -OIL -GAS -WATER -DISGAS -VAPOIL -UNIFOUT -UNIFIN -DIMENS - 10 10 10 / - -START -- 0 -1 NOV 1979 / - -WELLDIMS --- Item 1: NWMAX (Maximum number of wells in model) --- Item 2: NCWMAX (Maximum number of connections per well) --- Item 3: NGMAX (Maximum number of groups in model--excluding FIELD) --- Item 4: NWGMAX (Maximum number of wells or child groups per group) --- NWMAX NCWMAX NGMAX NWGMAX - 6 3 1 6 -/ - -GRID -DXV -10*0.25 / -DYV -10*0.25 / -DZV -10*0.25 / -TOPS -100*0.25 / - -PORO -1000*0.2 / - -SOLUTION - - -SCHEDULE -RPTRST -BASIC=1 -/ -WELSPECS - 'OP_1' 'OP' 9 9 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / - 'OP_2' 'OP' 9 9 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / -/ -COMPDAT - 'OP_1' 9 9 1 1 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / - 'OP_2' 9 9 2 2 'OPEN' 1* 46.825 0.311 4332.346 1* 1* 'X' 22.123 / - 'OP_1' 9 9 3 3 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / -/ -WCONPROD - 'OP_1' 'OPEN' 'ORAT' 20000 4* 1000 / -/ -WCONINJE - 'OP_2' 'GAS' 'OPEN' 'RATE' 100 200 400 / -/ - -DATES -- 1 - 20 JAN 2011 / -/ -WELSPECS - 'OP_3' 'OP' 9 9 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / -/ -COMPDAT - 'OP_3' 9 9 1 1 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / -/ -WCONPROD - 'OP_3' 'OPEN' 'ORAT' 20000 4* 1000 / -/ - -DATES -- 2 - 15 JUN 2013 / -/ -COMPDAT - 'OP_2' 9 9 3 9 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / - 'OP_1' 9 9 7 7 'SHUT' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / -/ - -DATES -- 3 - 22 APR 2014 / -/ -WELSPECS - 'OP_4' 'OP' 9 9 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / -/ -COMPDAT - 'OP_4' 9 9 3 9 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / - 'OP_3' 9 9 3 9 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / -/ -WCONPROD - 'OP_4' 'OPEN' 'ORAT' 20000 4* 1000 / -/ - -DATES -- 4 - 30 AUG 2014 / -/ -WELSPECS - 'OP_5' 'OP' 9 9 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / -/ -COMPDAT - 'OP_5' 9 9 3 9 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / -/ -WCONPROD - 'OP_5' 'OPEN' 'ORAT' 20000 4* 1000 / -/ - -DATES -- 5 - 15 SEP 2014 / -/ -WCONPROD - 'OP_3' 'SHUT' 'ORAT' 20000 4* 1000 / -/ - -DATES -- 6 - 9 OCT 2014 / -/ -WELSPECS - 'OP_6' 'OP' 9 9 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / -/ -COMPDAT - 'OP_6' 9 9 3 9 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / -/ -WCONPROD - 'OP_6' 'OPEN' 'ORAT' 20000 4* 1000 / -/ -TSTEP -- 7 -10 / \ No newline at end of file diff --git a/ThirdParty/custom-opm-common/opm-common/tests/BASE_SIM_THPRES.DATA b/ThirdParty/custom-opm-common/opm-common/tests/BASE_SIM_THPRES.DATA deleted file mode 100644 index ee1c1b38f7..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/BASE_SIM_THPRES.DATA +++ /dev/null @@ -1,165 +0,0 @@ -RUNSPEC - -EQLOPTS - 'THPRES' / - -OIL -GAS -WATER -DISGAS -VAPOIL -UNIFOUT -UNIFIN -DIMENS - 10 10 10 / - -WELLDIMS --- Item 1: NWMAX (Maximum number of wells in model) --- Item 2: NCWMAX (Maximum number of connections per well) --- Item 3: NGMAX (Maximum number of groups in model--excluding FIELD) --- Item 4: NWGMAX (Maximum number of wells or child groups per group) --- NWMAX NCWMAX NGMAX NWGMAX - 6 3 1 6 -/ - -EQLDIMS - 10 / - -GRID -DXV -10*0.25 / -DYV -10*0.25 / -DZV -10*0.25 / -TOPS -100*0.25 / - -PORO -1000*0.2 / - -PROPS - -REGIONS - -EQLNUM - 100*1 - 100*2 - 100*3 - 100*4 - 100*5 - 100*6 - 100*7 - 100*8 - 100*9 - 100*10 -/ - -SOLUTION -THPRES -1 1 0.1 / -1 2 0.2 / -1 3 0.3 / -1 4 0.4 / -1 5 0.5 / -1 6 0.6 / -1 7 0.7 / -1 8 0.8 / -1 9 0.9 / -1 10 1.0 / --- Default pressures -2 2 / -/ - -START -- 0 -1 NOV 1979 / - -SCHEDULE -RPTRST -BASIC=1 -/ -WELSPECS - 'OP_1' 'OP' 9 9 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / - 'OP_2' 'OP' 9 9 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / -/ -COMPDAT - 'OP_1' 9 9 1 1 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / - 'OP_2' 9 9 2 2 'OPEN' 1* 46.825 0.311 4332.346 1* 1* 'X' 22.123 / - 'OP_1' 9 9 3 3 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / -/ -WCONPROD - 'OP_1' 'OPEN' 'ORAT' 20000 4* 1000 / -/ -WCONINJE - 'OP_2' 'GAS' 'OPEN' 'RATE' 100 200 400 / -/ - -DATES -- 1 - 20 JAN 2011 / -/ -WELSPECS - 'OP_3' 'OP' 9 9 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / -/ -COMPDAT - 'OP_3' 9 9 1 1 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / -/ -WCONPROD - 'OP_3' 'OPEN' 'ORAT' 20000 4* 1000 / -/ - -DATES -- 2 - 15 JUN 2013 / -/ -COMPDAT - 'OP_2' 9 9 3 9 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / - 'OP_1' 9 9 7 7 'SHUT' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / -/ - -DATES -- 3 - 22 APR 2014 / -/ -WELSPECS - 'OP_4' 'OP' 9 9 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / -/ -COMPDAT - 'OP_4' 9 9 3 9 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / - 'OP_3' 9 9 3 9 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / -/ -WCONPROD - 'OP_4' 'OPEN' 'ORAT' 20000 4* 1000 / -/ - -DATES -- 4 - 30 AUG 2014 / -/ -WELSPECS - 'OP_5' 'OP' 9 9 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / -/ -COMPDAT - 'OP_5' 9 9 3 9 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / -/ -WCONPROD - 'OP_5' 'OPEN' 'ORAT' 20000 4* 1000 / -/ - -DATES -- 5 - 15 SEP 2014 / -/ -WCONPROD - 'OP_3' 'SHUT' 'ORAT' 20000 4* 1000 / -/ - -DATES -- 6 - 9 OCT 2014 / -/ -WELSPECS - 'OP_6' 'OP' 9 9 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / -/ -COMPDAT - 'OP_6' 9 9 3 9 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / -/ -WCONPROD - 'OP_6' 'OPEN' 'ORAT' 20000 4* 1000 / -/ -TSTEP -- 7 -10 / diff --git a/ThirdParty/custom-opm-common/opm-common/tests/ECLFILE.FINIT b/ThirdParty/custom-opm-common/opm-common/tests/ECLFILE.FINIT deleted file mode 100644 index 2ef75f1897..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/ECLFILE.FINIT +++ /dev/null @@ -1,1737 +0,0 @@ - 'ICON ' 1875 'INTE' - 1 6 3 7 296 1 - 0 1 1 0 0 0 - 1 3 0 0 0 0 - 1 0 0 0 0 2 - 0 2 6 3 8 297 - 1 0 1 1 0 0 - 0 2 3 0 0 0 - 0 2 0 0 0 0 - 2 0 3 6 3 9 - 298 1 0 1 1 0 - 0 0 3 3 0 0 - 0 0 3 0 0 0 - 0 2 0 4 6 3 - 10 299 1 0 1 1 - 0 0 0 4 3 0 - 0 0 0 4 0 0 - 0 0 2 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 1 2 13 - 1 1512 -1000 0 -1 -1 - 0 0 0 1 3 0 - 0 0 0 1 0 0 - 0 0 1 0 2 2 - 13 2 1513 -1000 0 -1 - -1 0 0 0 2 3 - 0 0 0 0 2 0 - 0 0 0 1 0 3 - 2 13 3 1514 -1000 0 - -1 -1 0 0 0 3 - 3 0 0 0 0 3 - 0 0 0 0 1 0 - 4 2 13 8 1518 1 - 0 -1 -1 0 0 0 - 4 3 0 0 0 0 - 4 0 0 0 0 2 - 0 5 2 13 9 1519 - 1 0 -1 -1 0 0 - 0 5 3 0 0 0 - 0 5 0 0 0 0 - 2 0 6 2 13 10 - 1520 1 0 -1 -1 0 - 0 0 6 3 0 0 - 0 0 6 0 0 0 - 0 2 0 7 2 13 - 11 1521 1 0 -1 -1 - 0 0 0 7 3 0 - 0 0 0 7 0 0 - 0 0 2 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 1 10 4 7 451 1 - 0 1 1 0 0 0 - 1 3 0 0 0 0 - 1 0 0 0 0 2 - 0 2 10 4 8 452 - 1 0 1 1 0 0 - 0 2 3 0 0 0 - 0 2 0 0 0 0 - 2 0 3 10 4 9 - 453 1 0 1 1 0 - 0 0 3 3 0 0 - 0 0 3 0 0 0 - 0 2 0 4 10 4 - 10 454 1 0 1 1 - 0 0 0 4 3 0 - 0 0 0 4 0 0 - 0 0 2 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 1 - 6 19 7 2330 1 0 - 1 1 0 0 0 1 - 3 0 0 0 0 1 - 0 0 0 0 2 0 - 2 6 19 8 2331 1 - 0 1 1 0 0 0 - 2 3 0 0 0 0 - 2 0 0 0 0 2 - 0 3 6 19 9 2332 - 1 0 1 1 0 0 - 0 3 3 0 0 0 - 0 3 0 0 0 0 - 2 0 4 6 19 10 - 2333 1 0 1 1 0 - 0 0 4 3 0 0 - 0 0 4 0 0 0 - 0 2 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 1 12 20 9 - 2522 1 0 -1 -1 0 - 0 0 1 3 0 0 - 0 0 1 0 0 0 - 0 2 0 2 12 20 - 10 2523 1 0 -1 -1 - 0 0 0 2 3 0 - 0 0 0 2 0 0 - 0 0 2 0 3 12 - 20 11 2524 1 0 -1 - -1 0 0 0 3 3 - 0 0 0 0 3 0 - 0 0 0 2 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 - 'LOGIHEAD' 121 'LOGI' - T T F T F F T F T F F F F F F F T F T F F F F F F - F F F F F F T F F F F F F F F F F F F T F F F F F - F F F F F F F F F F F F F F F F F F F F F F F F F - F F F F F F F F F F F F T F F F F F F F F F F F T - F F F F F F F F F F F F F T T T F T F F F - 'PORV ' 3146 'REAL' - 0.31293492E+05 0.32195732E+05 0.33950355E+05 0.30794070E+05 - 0.28247045E+05 0.27887463E+05 0.25600133E+05 0.25630098E+05 - 0.26838662E+05 0.28037289E+05 0.27637756E+05 0.27537873E+05 - 0.28776428E+05 0.30804061E+05 0.31955988E+05 0.32172434E+05 - 0.31363406E+05 0.29455633E+05 0.28277010E+05 0.27138336E+05 - 0.28636590E+05 0.29096023E+05 0.27358080E+05 0.27767604E+05 - 0.28576658E+05 0.26698852E+05 0.29225904E+05 0.31406572E+05 - 0.33141305E+05 0.33670715E+05 0.30494424E+05 0.30514400E+05 - 0.33261195E+05 0.32382221E+05 0.31253508E+05 0.27897453E+05 - 0.27028465E+05 0.25350424E+05 0.28786414E+05 0.31663059E+05 - 0.30975842E+05 0.33453078E+05 0.33361074E+05 0.30684203E+05 - 0.29575494E+05 0.30334609E+05 0.29555518E+05 0.31273484E+05 - 0.28886301E+05 0.26479107E+05 0.27897453E+05 0.30164807E+05 - 0.29695355E+05 0.30564340E+05 0.32785074E+05 0.34679539E+05 - 0.32871652E+05 0.33051441E+05 0.31583152E+05 0.30134842E+05 - 0.31533178E+05 0.30294654E+05 0.29006160E+05 0.29555518E+05 - 0.29665389E+05 0.30134842E+05 0.32621939E+05 0.33454359E+05 - 0.34699516E+05 0.34929250E+05 0.33430996E+05 0.31163643E+05 - 0.30524387E+05 0.32921559E+05 0.31163643E+05 0.28816381E+05 - 0.28936240E+05 0.31772932E+05 0.29365711E+05 0.29905082E+05 - 0.32275586E+05 0.33700648E+05 0.34939203E+05 0.34729449E+05 - 0.32212387E+05 0.32661861E+05 0.32731748E+05 0.28686434E+05 - 0.28336842E+05 0.31802787E+05 0.33121246E+05 0.27726871E+05 - 0.29944225E+05 0.30155871E+05 0.33191191E+05 0.34219988E+05 - 0.33251121E+05 0.32971449E+05 0.33341020E+05 0.30034855E+05 - 0.30853850E+05 0.29075932E+05 0.29984867E+05 0.30574178E+05 - 0.26039488E+05 0.30833873E+05 0.32691666E+05 0.32671719E+05 - 0.31992516E+05 0.34100047E+05 0.34509566E+05 0.33500746E+05 - 0.31513045E+05 0.30843861E+05 0.28556541E+05 0.30674061E+05 - 0.34509566E+05 0.27837383E+05 0.29215768E+05 0.29155812E+05 - 0.32222244E+05 0.31573006E+05 0.33310969E+05 0.33750457E+05 - 0.33740469E+05 0.32252178E+05 0.30034811E+05 0.31143510E+05 - 0.31063602E+05 0.33780422E+05 0.30194912E+05 0.29275980E+05 - 0.30434926E+05 0.32302148E+05 0.33460797E+05 0.31882645E+05 - 0.30144682E+05 0.31553029E+05 0.31453117E+05 0.31772773E+05 - 0.31003674E+05 0.28176984E+05 0.29145850E+05 0.33391281E+05 - 0.31723217E+05 0.34021848E+05 0.34459621E+05 0.32282174E+05 - 0.30204609E+05 0.27517758E+05 0.29405547E+05 0.30404346E+05 - 0.27537734E+05 0.27308004E+05 0.26538906E+05 0.26828564E+05 - 0.32312451E+05 0.33241371E+05 0.32844020E+05 0.29725170E+05 - 0.28157008E+05 0.24840893E+05 0.24241598E+05 0.25510111E+05 - 0.25890799E+05 0.25838955E+05 0.24390695E+05 0.27996359E+05 - 0.26857797E+05 0.30384613E+05 0.31133742E+05 0.31506301E+05 - 0.30933832E+05 0.29974955E+05 0.25919695E+05 0.25250477E+05 - 0.25400303E+05 0.24275580E+05 0.25399545E+05 0.26608098E+05 - 0.26308455E+05 0.27247398E+05 0.33172863E+05 0.31017262E+05 - 0.31027771E+05 0.31233557E+05 0.28516729E+05 0.27497918E+05 - 0.25690027E+05 0.25430328E+05 0.26346709E+05 0.24790336E+05 - 0.27347275E+05 0.28725629E+05 0.28645723E+05 0.32542266E+05 - 0.33357012E+05 0.31288469E+05 0.29126016E+05 0.28197104E+05 - 0.25959713E+05 0.25040785E+05 0.25440320E+05 0.24371363E+05 - 0.27497100E+05 0.30233826E+05 0.31592199E+05 0.29045248E+05 - 0.30854145E+05 0.33316969E+05 0.33377230E+05 0.29175961E+05 - 0.27697686E+05 0.26768771E+05 0.25550191E+05 0.25610121E+05 - 0.25843322E+05 0.28895426E+05 0.30084004E+05 0.29284959E+05 - 0.31582211E+05 0.32482170E+05 0.32477719E+05 0.31779623E+05 - 0.31802895E+05 0.27837521E+05 0.26718828E+05 0.25829865E+05 - 0.25989678E+05 0.25536564E+05 0.24450744E+05 0.29065225E+05 - 0.31162715E+05 0.28376049E+05 0.31123832E+05 0.32917363E+05 - 0.30781525E+05 0.32002662E+05 0.28856334E+05 0.25440320E+05 - 0.23392709E+05 0.24591311E+05 0.25499629E+05 0.27147520E+05 - 0.29664506E+05 0.32720850E+05 0.30893037E+05 0.26059756E+05 - 0.26903369E+05 0.30192975E+05 0.31573133E+05 0.28856307E+05 - 0.29305781E+05 0.24801041E+05 0.25699990E+05 0.27512061E+05 - 0.29155088E+05 0.31741988E+05 0.33170281E+05 0.30693246E+05 - 0.23252980E+05 0.26523703E+05 0.28475279E+05 0.28956217E+05 - 0.28346930E+05 0.28606625E+05 0.27857500E+05 0.29705344E+05 - 0.30184844E+05 0.32181414E+05 0.32750730E+05 0.31112695E+05 - 0.30093916E+05 0.23312852E+05 0.23726416E+05 0.23889879E+05 - 0.26848607E+05 0.28077174E+05 0.27797498E+05 0.26888562E+05 - 0.29165900E+05 0.28158477E+05 0.32031512E+05 0.31831752E+05 - 0.32421045E+05 0.30992760E+05 0.10623605E+03 0.10768539E+03 - 0.11055093E+03 0.10555683E+03 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10735447E+03 - 0.10568723E+03 0.11282796E+03 0.10863295E+03 0.10395818E+03 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.10803342E+03 0.10732523E+03 0.10148100E+03 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.10583599E+03 0.00000000E+00 0.00000000E+00 - 0.10048225E+03 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.10311917E+03 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.10255973E+03 0.00000000E+00 - 0.00000000E+00 0.10080189E+03 0.10243997E+03 0.10783365E+03 - 0.10967150E+03 0.11583603E+03 0.10783363E+03 0.11083014E+03 - 0.10615562E+03 0.10847290E+03 0.11502522E+03 0.11530478E+03 - 0.10739417E+03 0.10639533E+03 0.10963155E+03 0.10959159E+03 - 0.10571604E+03 0.11182887E+03 0.11056158E+03 0.11083002E+03 - 0.11662325E+03 0.11630363E+03 0.11542466E+03 0.12253632E+03 - 0.12245629E+03 0.11794200E+03 0.11206887E+03 0.11930042E+03 - 0.11754247E+03 0.11743378E+03 0.11598143E+03 0.11578896E+03 - 0.12089863E+03 0.12289631E+03 0.12537342E+03 0.12325589E+03 - 0.12309608E+03 0.13008777E+03 0.12337606E+03 0.11734309E+03 - 0.11250874E+03 0.12317629E+03 0.12462769E+03 0.11020931E+03 - 0.10910687E+03 0.11874145E+03 0.12521391E+03 0.12876976E+03 - 0.12693190E+03 0.12856999E+03 0.13020883E+03 0.12937448E+03 - 0.12898730E+03 0.12709172E+03 0.12165807E+03 0.12665403E+03 - 0.12847859E+03 0.12038673E+03 0.12183856E+03 0.13616113E+03 - 0.13396370E+03 0.12992159E+03 0.12291642E+03 0.12764255E+03 - 0.12656047E+03 0.12851776E+03 0.12109592E+03 0.12240504E+03 - 0.13240613E+03 0.12524546E+03 0.11189812E+03 0.12524815E+03 - 0.13994409E+03 0.12510719E+03 0.11696918E+03 0.11377576E+03 - 0.11644595E+03 0.12255341E+03 0.11916074E+03 0.11939888E+03 - 0.11935942E+03 0.13907803E+03 0.13978362E+03 0.12553500E+03 - 0.12393044E+03 0.12175572E+03 0.10801438E+03 0.10494646E+03 - 0.10816577E+03 0.11015572E+03 0.12083524E+03 0.12492421E+03 - 0.12467054E+03 0.11781683E+03 0.14431230E+03 0.13435500E+03 - 0.12887097E+03 0.12069848E+03 0.11406659E+03 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.10485576E+03 0.11983801E+03 - 0.12166158E+03 0.11189207E+03 0.11282459E+03 0.14333134E+03 - 0.13494374E+03 0.12129669E+03 0.11667122E+03 0.10962412E+03 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10390363E+03 - 0.11658171E+03 0.11623255E+03 0.11648901E+03 0.11562918E+03 - 0.14280307E+03 0.13427724E+03 0.12724034E+03 0.12046513E+03 - 0.10858141E+03 0.10031608E+03 0.00000000E+00 0.10573891E+03 - 0.11683167E+03 0.11526813E+03 0.10713704E+03 0.11704788E+03 - 0.11448769E+03 0.14335947E+03 0.13814265E+03 0.13090150E+03 - 0.12803746E+03 0.12455584E+03 0.11724982E+03 0.11358054E+03 - 0.11556807E+03 0.11874965E+03 0.11657441E+03 0.11215923E+03 - 0.11518416E+03 0.11122835E+03 0.14249025E+03 0.13576633E+03 - 0.12694546E+03 0.12604740E+03 0.12760139E+03 0.12055053E+03 - 0.12122566E+03 0.12128091E+03 0.11862667E+03 0.12350296E+03 - 0.12226270E+03 0.11602060E+03 0.12005575E+03 0.13043117E+03 - 0.12545756E+03 0.11977297E+03 0.11858424E+03 0.11885519E+03 - 0.11969947E+03 0.12305045E+03 0.12021055E+03 0.12101392E+03 - 0.12118678E+03 0.11815720E+03 0.12233302E+03 0.12201340E+03 - 0.12199798E+03 0.11219497E+03 0.11313067E+03 0.11429444E+03 - 0.12262862E+03 0.12272558E+03 0.12319370E+03 0.12430133E+03 - 0.12526502E+03 0.12415163E+03 0.11886228E+03 0.12588874E+03 - 0.12081483E+03 0.12393587E+03 0.12000092E+03 0.11649546E+03 - 0.11702277E+03 0.11794170E+03 0.11546461E+03 0.12245962E+03 - 0.12409278E+03 0.12500761E+03 0.12344389E+03 0.11876625E+03 - 0.12524941E+03 0.13016350E+03 0.11710421E+03 0.11736393E+03 - 0.11066422E+03 0.11654343E+03 0.12113806E+03 0.12573268E+03 - 0.12541306E+03 0.13072682E+03 0.13269733E+03 0.12919217E+03 - 0.12469302E+03 0.13028378E+03 0.13811440E+03 0.12365661E+03 - 0.11820310E+03 0.11042755E+03 0.11514536E+03 0.11506547E+03 - 0.11490565E+03 0.11710308E+03 0.12725122E+03 0.13423340E+03 - 0.12976474E+03 0.12860611E+03 0.12880588E+03 0.14326855E+03 - 0.21846176E+05 0.22612439E+05 0.21595062E+05 0.22519967E+05 - 0.23577986E+05 0.24026523E+05 0.24443363E+05 0.23709371E+05 - 0.22427645E+05 0.22268803E+05 0.21856947E+05 0.20671037E+05 - 0.20555756E+05 0.22829895E+05 0.22891676E+05 0.23440416E+05 - 0.24242008E+05 0.24581635E+05 0.25247529E+05 0.25018158E+05 - 0.24617799E+05 0.24778908E+05 0.23913564E+05 0.24498627E+05 - 0.22051008E+05 0.21414275E+05 0.23252871E+05 0.22773172E+05 - 0.22508445E+05 0.23161920E+05 0.24994260E+05 0.25530934E+05 - 0.25148701E+05 0.25904154E+05 0.26412746E+05 0.27461145E+05 - 0.25985383E+05 0.23949908E+05 0.23017346E+05 0.24057691E+05 - 0.23705219E+05 0.24259561E+05 0.24986211E+05 0.24606477E+05 - 0.24168314E+05 0.25600771E+05 0.26449305E+05 0.26765049E+05 - 0.26898619E+05 0.26249377E+05 0.25290223E+05 0.24657115E+05 - 0.23744229E+05 0.24273781E+05 0.25075135E+05 0.25027896E+05 - 0.24590070E+05 0.26195926E+05 0.25737467E+05 0.27230711E+05 - 0.27345178E+05 0.25200598E+05 0.25315396E+05 0.26009625E+05 - 0.25079342E+05 0.24135162E+05 0.24090225E+05 0.24210902E+05 - 0.24292068E+05 0.24903328E+05 0.25321625E+05 0.25311861E+05 - 0.24933365E+05 0.25810291E+05 0.25501131E+05 0.26101963E+05 - 0.26537902E+05 0.25775061E+05 0.24848572E+05 0.25700680E+05 - 0.26527803E+05 0.26389186E+05 0.26379203E+05 0.24843531E+05 - 0.25836168E+05 0.24709154E+05 0.26596617E+05 0.27101830E+05 - 0.27486398E+05 0.27035236E+05 0.25540785E+05 0.25587254E+05 - 0.25849182E+05 0.26080553E+05 0.26728809E+05 0.26598967E+05 - 0.26858666E+05 0.25497258E+05 0.25751998E+05 0.25868223E+05 - 0.26774398E+05 0.26364297E+05 0.25101309E+05 0.23483002E+05 - 0.25204271E+05 0.25449477E+05 0.25919676E+05 0.27487855E+05 - 0.29545457E+05 0.28077174E+05 0.25765592E+05 0.24788783E+05 - 0.24384721E+05 0.24207402E+05 0.23770330E+05 0.24796607E+05 - 0.24176369E+05 0.26691627E+05 0.26661768E+05 0.28019172E+05 - 0.28013141E+05 0.29583484E+05 0.28529332E+05 0.28807988E+05 - 0.26200391E+05 0.25203277E+05 0.23811848E+05 0.25153252E+05 - 0.24389586E+05 0.24357918E+05 0.25685350E+05 0.27512951E+05 - 0.27997873E+05 0.28573391E+05 0.25880648E+05 0.29559746E+05 - 0.28365221E+05 0.25698945E+05 0.25235814E+05 0.24635484E+05 - 0.25251832E+05 0.24807432E+05 0.24946133E+05 0.26753105E+05 - 0.30330773E+05 0.25628105E+05 0.25841586E+05 0.26429424E+05 - 0.25738715E+05 0.26684119E+05 0.25635088E+05 0.23715705E+05 - 0.24510727E+05 0.25433197E+05 0.25353396E+05 0.25790883E+05 - 0.26756133E+05 0.28064391E+05 0.26335756E+05 0.25358137E+05 - 0.23969836E+05 0.22988307E+05 0.24789445E+05 0.25076354E+05 - 0.24374447E+05 0.26071494E+05 0.25216148E+05 0.25127070E+05 - 0.26314301E+05 0.26537846E+05 0.25873992E+05 0.24989275E+05 - 0.26443686E+05 0.25344354E+05 0.24296965E+05 0.23946906E+05 - 0.25187986E+05 0.25499061E+05 0.25414111E+05 0.25305916E+05 - 0.25037562E+05 0.24795053E+05 0.26447809E+05 0.26396570E+05 - 0.25785674E+05 0.24886979E+05 0.25072756E+05 0.25465611E+05 - 0.25376463E+05 0.25683072E+05 0.25114566E+05 0.24946273E+05 - 0.24387768E+05 0.25256168E+05 0.25823430E+05 0.26690742E+05 - 0.25426303E+05 0.25475545E+05 0.23939525E+05 0.24808262E+05 - 0.25995523E+05 0.26582979E+05 0.26688043E+05 0.26181818E+05 - 0.25998883E+05 0.25780379E+05 0.24449232E+05 0.25784637E+05 - 0.24156045E+05 0.23157121E+05 0.25195268E+05 0.25510230E+05 - 0.26840621E+05 0.26735574E+05 0.25848086E+05 0.25575072E+05 - 0.26336953E+05 0.25702844E+05 0.25235596E+05 0.23700969E+05 - 0.25052535E+05 0.22119121E+05 0.22836818E+05 0.24681221E+05 - 0.24041781E+05 0.24088273E+05 0.25124445E+05 0.25213928E+05 - 0.25687471E+05 0.26699004E+05 0.25106477E+05 0.25036125E+05 - 0.23707443E+05 0.24493334E+05 0.20465828E+05 0.21690631E+05 - 0.21668674E+05 0.22544188E+05 0.23034801E+05 0.25046875E+05 - 0.25357969E+05 0.25463580E+05 0.26876275E+05 0.27394441E+05 - 0.24974383E+05 0.23537455E+05 0.22324895E+05 0.20994662E+05 - 0.21584471E+05 0.22297830E+05 0.22748914E+05 0.22823721E+05 - 0.24508367E+05 0.24721762E+05 0.25543514E+05 0.26212525E+05 - 0.27279055E+05 0.25673262E+05 0.22713502E+05 0.21990576E+05 - 0.20622246E+05 0.21414943E+05 0.22358410E+05 0.22989836E+05 - 0.25141092E+05 0.25336768E+05 0.24701885E+05 0.25641520E+05 - 0.27955293E+05 0.29840408E+05 0.25038867E+05 0.23249084E+05 - 0.22338201E+05 0.22433930E+05 0.22867328E+05 0.23303061E+05 - 0.23303605E+05 0.24763322E+05 0.25774541E+05 0.25210785E+05 - 0.26586326E+05 0.26148715E+05 0.25933006E+05 0.24572330E+05 - 0.23194277E+05 0.22523656E+05 0.26019645E+05 0.26451848E+05 - 0.26439137E+05 0.27188270E+05 0.27275371E+05 0.27113934E+05 - 0.27017070E+05 0.26247102E+05 0.25137533E+05 0.25276691E+05 - 0.24231084E+05 0.23556941E+05 0.22894027E+05 0.25719984E+05 - 0.26092223E+05 0.26239359E+05 0.26838670E+05 0.27887453E+05 - 0.28017303E+05 0.28267012E+05 0.28856486E+05 0.27988477E+05 - 0.27208857E+05 0.26646227E+05 0.26861377E+05 0.26631881E+05 - 0.26319229E+05 0.26601621E+05 0.26159398E+05 0.26179383E+05 - 0.27627699E+05 0.27687629E+05 0.28177055E+05 0.29255795E+05 - 0.29375551E+05 0.30524234E+05 0.30169438E+05 0.29632342E+05 - 0.27128879E+05 0.26718695E+05 0.27189881E+05 0.27229818E+05 - 0.27487783E+05 0.27138201E+05 0.27797430E+05 0.27487795E+05 - 0.27937268E+05 0.30534193E+05 0.31153496E+05 0.29775111E+05 - 0.28766295E+05 0.28273072E+05 0.27570748E+05 0.27383221E+05 - 0.26921193E+05 0.27377912E+05 0.28486623E+05 0.29535395E+05 - 0.28296846E+05 0.29025990E+05 0.30044768E+05 0.29974879E+05 - 0.29295674E+05 0.28966061E+05 0.27987207E+05 0.29851980E+05 - 0.28853064E+05 0.29078885E+05 0.30424342E+05 0.30384398E+05 - 0.31632938E+05 0.30993684E+05 0.30464307E+05 0.30963689E+05 - 0.29874996E+05 0.29845029E+05 0.28306834E+05 0.28936096E+05 - 0.27906518E+05 0.28556521E+05 0.30227635E+05 0.31423148E+05 - 0.30414346E+05 0.29924918E+05 0.31033617E+05 0.30554182E+05 - 0.29205732E+05 0.29974859E+05 0.30594135E+05 0.28346770E+05 - 0.28826205E+05 0.28035773E+05 0.28336072E+05 0.28897230E+05 - 0.30104717E+05 0.29335629E+05 0.29495441E+05 0.30394389E+05 - 0.29175816E+05 0.29315623E+05 0.28406715E+05 0.29874998E+05 - 0.29385570E+05 0.29904961E+05 0.26185227E+05 0.26465338E+05 - 0.27485408E+05 0.28354641E+05 0.28785699E+05 0.28157078E+05 - 0.28776355E+05 0.29415607E+05 0.28316863E+05 0.27078342E+05 - 0.27937338E+05 0.28286928E+05 0.28306904E+05 0.26053879E+05 - 0.25492197E+05 0.24445367E+05 0.26051596E+05 0.29159709E+05 - 0.27737641E+05 0.26908607E+05 0.27957385E+05 0.28726459E+05 - 0.27108373E+05 0.27188279E+05 0.26349260E+05 0.28177125E+05 - 0.26366236E+05 0.27914436E+05 0.25259953E+05 0.26056531E+05 - 0.27583490E+05 0.26948561E+05 0.27218246E+05 0.27258197E+05 - 0.27327404E+05 0.25512820E+05 0.25096588E+05 0.24734781E+05 - 0.25315383E+05 0.26112664E+05 0.27146535E+05 0.26630754E+05 - 0.26216994E+05 0.25928709E+05 0.26509885E+05 0.26244689E+05 - 0.27450951E+05 0.26906688E+05 0.26624365E+05 0.24001861E+05 - 0.22655600E+05 0.23271004E+05 0.26439342E+05 0.25460479E+05 - 0.26111402E+05 0.26069576E+05 0.25230564E+05 0.25708758E+05 - 0.26293650E+05 0.25086594E+05 0.25432391E+05 0.24333930E+05 - 0.23281330E+05 0.21845279E+05 0.21969244E+05 0.24741312E+05 - 0.24181959E+05 0.25173209E+05 0.24091885E+05 0.23562510E+05 - 0.23033129E+05 0.23628986E+05 0.23781396E+05 0.23177787E+05 - 0.22334523E+05 0.22240689E+05 0.20534420E+05 0.19732770E+05 - 0.25641287E+05 0.24094561E+05 0.24045025E+05 0.23432645E+05 - 0.22204086E+05 0.22843342E+05 0.23107729E+05 0.22077469E+05 - 0.20189406E+05 0.20313203E+05 0.19540420E+05 0.18876281E+05 - 0.17836031E+05 0.22883408E+05 0.24026178E+05 0.21787994E+05 - 0.21754613E+05 0.22373898E+05 0.22443814E+05 0.20882416E+05 - 0.21132625E+05 0.19900570E+05 0.19327814E+05 0.19086389E+05 - 0.17944670E+05 0.18223590E+05 0.22841580E+05 0.22580512E+05 - 0.22128334E+05 0.20865598E+05 0.22094168E+05 0.22611234E+05 - 0.22619402E+05 0.21435395E+05 0.20795680E+05 0.20032490E+05 - 0.19069875E+05 0.19067643E+05 0.18401395E+05 0.20880920E+05 - 0.20226045E+05 0.20534850E+05 0.21927135E+05 0.22963594E+05 - 0.22947234E+05 0.22940641E+05 0.22274818E+05 0.22022195E+05 - 0.21286605E+05 0.19620904E+05 0.19676754E+05 0.19225400E+05 - 0.21620068E+05 0.20096371E+05 0.19750234E+05 0.22524174E+05 - 0.23027416E+05 0.23872502E+05 0.23533707E+05 0.23453795E+05 - 0.23922449E+05 0.21829348E+05 0.20955621E+05 0.20217824E+05 - 0.18939615E+05 0.20015227E+05 0.19682361E+05 0.20491188E+05 - 0.21553912E+05 0.23472482E+05 0.24084625E+05 0.23232723E+05 - 0.24324484E+05 0.23183342E+05 0.23375664E+05 0.23771537E+05 - 0.21108873E+05 0.20550605E+05 0.19358566E+05 0.19495771E+05 - 0.20193641E+05 0.20931488E+05 0.23302723E+05 0.22800633E+05 - 0.23310287E+05 0.23866049E+05 0.22139363E+05 0.21705408E+05 - 0.21662412E+05 0.21705443E+05 0.21758346E+05 0.20342873E+05 - 0.20593842E+05 0.19945873E+05 0.19701664E+05 0.20899896E+05 - 0.19958775E+05 0.22250027E+05 0.22004523E+05 0.22609441E+05 - 0.21813979E+05 0.22358877E+05 0.22028922E+05 0.21905176E+05 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.26289330E+05 0.26761518E+05 - 0.27228219E+05 0.27777580E+05 0.27368070E+05 0.27388047E+05 - 0.27388047E+05 0.27138338E+05 0.25110678E+05 0.22723490E+05 - 0.22244049E+05 0.22074246E+05 0.20965541E+05 0.27178279E+05 - 0.28050135E+05 0.28456771E+05 0.28586621E+05 0.28017299E+05 - 0.27907428E+05 0.27188268E+05 0.26948549E+05 0.25819840E+05 - 0.24411508E+05 0.23412674E+05 0.23692350E+05 0.21395029E+05 - 0.27997336E+05 0.28000199E+05 0.28276996E+05 0.28406844E+05 - 0.28027303E+05 0.28336939E+05 0.27218246E+05 0.25660064E+05 - 0.24771076E+05 0.24611287E+05 0.24051938E+05 0.23882137E+05 - 0.22074246E+05 0.27977359E+05 0.27219986E+05 0.28258824E+05 - 0.28566660E+05 0.26738803E+05 0.27348092E+05 0.26359248E+05 - 0.25060762E+05 0.24361553E+05 0.24701182E+05 0.24271684E+05 - 0.23402697E+05 0.21754621E+05 0.26918594E+05 0.27208256E+05 - 0.27011234E+05 0.26559000E+05 0.26598967E+05 0.26219344E+05 - 0.25829801E+05 0.25460234E+05 0.24601213E+05 0.24071855E+05 - 0.24071855E+05 0.22763385E+05 0.22503689E+05 0.27917361E+05 - 0.27907371E+05 0.26421797E+05 0.26159404E+05 0.26109475E+05 - 0.26319164E+05 0.25969570E+05 0.25799771E+05 0.24161666E+05 - 0.23572381E+05 0.23592357E+05 0.23522438E+05 0.23062977E+05 - 0.26209277E+05 0.25799758E+05 0.25692498E+05 0.25500096E+05 - 0.26199289E+05 0.27148178E+05 0.26488947E+05 0.25450166E+05 - 0.25400199E+05 0.23102918E+05 0.23182824E+05 0.23292695E+05 - 0.23402566E+05 0.25639305E+05 0.25799113E+05 0.26230258E+05 - 0.27158166E+05 0.27747488E+05 0.29045969E+05 0.27208119E+05 - 0.26628801E+05 0.26808562E+05 0.25140545E+05 0.25120568E+05 - 0.23772148E+05 0.24211633E+05 0.23382604E+05 0.25060637E+05 - 0.26808574E+05 0.27178143E+05 0.25799771E+05 0.27427863E+05 - 0.27477805E+05 0.27347957E+05 0.26279184E+05 0.25939607E+05 - 0.26648775E+05 0.25180496E+05 0.25120568E+05 0.24271562E+05 - 0.26029502E+05 0.26508924E+05 0.26648762E+05 0.27767465E+05 - 0.27427863E+05 0.27527746E+05 0.26898484E+05 0.26568844E+05 - 0.26219279E+05 0.26838555E+05 0.26658764E+05 0.25649947E+05 - 0.23732361E+05 0.25540256E+05 0.26968867E+05 0.26908459E+05 - 0.26498953E+05 0.26788613E+05 0.27208119E+05 0.27727512E+05 - 0.27308045E+05 0.27537803E+05 0.28266949E+05 0.27278105E+05 - 0.29984941E+05 0.24121971E+05 0.25440438E+05 0.26520205E+05 - 0.26858586E+05 0.26618879E+05 0.26838621E+05 0.26538973E+05 - 0.26798668E+05 0.27368043E+05 0.27098385E+05 0.27428000E+05 - 0.27008488E+05 0.28107209E+05 0.25030977E+05 0.25840037E+05 - 0.25532105E+05 0.25829854E+05 0.26129514E+05 0.25500248E+05 - 0.26459131E+05 0.25490262E+05 0.26939748E+05 0.26518271E+05 - 0.26618150E+05 0.26348473E+05 0.26478318E+05 0.25010938E+05 - 0.25879926E+05 0.25762520E+05 0.25320449E+05 0.25140670E+05 - 0.25080738E+05 0.26259363E+05 0.26569002E+05 0.26353555E+05 - 0.25749191E+05 0.25129932E+05 0.25199846E+05 0.25679273E+05 - 0.25980840E+05 0.26112363E+05 0.26941947E+05 0.25779898E+05 - 0.24471439E+05 0.24261684E+05 0.26119516E+05 0.25560168E+05 - 0.26306732E+05 0.25629320E+05 0.24330877E+05 0.24930158E+05 - 0.25199836E+05 0.26239506E+05 0.26513711E+05 0.25674074E+05 - 0.25400354E+05 0.24001998E+05 0.24371566E+05 0.24801064E+05 - 0.25490262E+05 0.25630402E+05 0.26158701E+05 0.26148713E+05 - 0.24121141E+05 0.24740398E+05 0.25470465E+05 0.27183117E+05 - 0.26214338E+05 0.25889783E+05 0.24371566E+05 0.25050775E+05 - 0.25370402E+05 0.26519062E+05 0.26592838E+05 0.26168688E+05 - 0.26098773E+05 0.26987711E+05 0.28495904E+05 0.25810006E+05 - 0.26453773E+05 0.26564684E+05 0.25420330E+05 0.26459131E+05 - 0.26009654E+05 0.25430330E+05 0.25560180E+05 0.25426625E+05 - 0.26278559E+05 0.26168688E+05 0.27157506E+05 0.28765580E+05 - 0.26169588E+05 0.25584633E+05 0.25776166E+05 0.24751111E+05 - 0.24980854E+05 0.24960879E+05 0.24980791E+05 0.24741074E+05 - 0.25019760E+05 0.26488240E+05 0.27107498E+05 0.26767906E+05 - 0.27716768E+05 0.26609131E+05 0.26174100E+05 0.25497199E+05 - 0.23692277E+05 0.24631189E+05 0.24601223E+05 0.24381420E+05 - 0.24081771E+05 0.25132631E+05 0.25858914E+05 0.27047486E+05 - 0.27886479E+05 0.27257234E+05 0.26159602E+05 0.25504713E+05 - 0.25388033E+05 0.24461328E+05 0.23882018E+05 0.24491303E+05 - 0.24041832E+05 0.23102932E+05 0.24035834E+05 0.25269637E+05 - 0.26228486E+05 0.25759049E+05 0.25968797E+05 0.24901002E+05 - 0.25364787E+05 0.25358717E+05 0.24850869E+05 0.24051818E+05 - 0.24431375E+05 0.24001877E+05 0.22953105E+05 0.22918760E+05 - 0.24480586E+05 0.24989973E+05 0.23961209E+05 0.24150982E+05 - 0.20368516E+05 0.21224613E+05 0.21955182E+05 0.21947896E+05 - 0.22246172E+05 0.23104408E+05 0.24007584E+05 0.23740992E+05 - 0.24357568E+05 0.23934795E+05 0.25332707E+05 0.24481316E+05 - 0.24551234E+05 0.22015049E+05 0.21884238E+05 0.21661561E+05 - 0.22626871E+05 0.22208846E+05 0.23371881E+05 0.23400148E+05 - 0.24574637E+05 0.25126285E+05 0.24840762E+05 0.25739826E+05 - 0.24481303E+05 0.24521256E+05 0.22737904E+05 0.22743320E+05 - 0.22491426E+05 0.22195520E+05 0.23860428E+05 0.23349500E+05 - 0.25096568E+05 0.25429404E+05 0.26172506E+05 0.26007582E+05 - 0.26221398E+05 0.25410229E+05 0.23931959E+05 0.23557420E+05 - 0.24385248E+05 0.23737949E+05 0.23308369E+05 0.23748898E+05 - 0.23591055E+05 0.24575748E+05 0.26639730E+05 0.26364959E+05 - 0.27857824E+05 0.27912125E+05 0.26972412E+05 0.25659936E+05 - 0.25590016E+05 0.25595166E+05 0.25088402E+05 0.24357148E+05 - 0.23224148E+05 0.23546072E+05 0.23699268E+05 0.25409629E+05 - 0.24738994E+05 0.28295414E+05 0.28357131E+05 0.27195316E+05 - 0.27002521E+05 0.26429102E+05 0.25946264E+05 0.26202691E+05 - 0.25240855E+05 0.23157564E+05 0.22957359E+05 0.22128861E+05 - 0.23089143E+05 0.23155904E+05 0.25112260E+05 0.25615420E+05 - 0.26363258E+05 0.25417018E+05 0.24970855E+05 0.25989666E+05 - 0.26704725E+05 0.25667307E+05 0.24590180E+05 0.23389502E+05 - 0.20933133E+05 0.21081711E+05 0.21638123E+05 0.23284609E+05 - 0.23944902E+05 0.25309068E+05 0.26029477E+05 0.25259883E+05 - 0.26112525E+05 0.27359043E+05 0.25208244E+05 0.22076965E+05 - 0.19787510E+05 0.20687377E+05 0.21263664E+05 0.22058486E+05 - 0.23282736E+05 0.23731543E+05 0.24127252E+05 0.24698535E+05 - 0.21873729E+05 0.25181709E+05 0.26233148E+05 0.26832734E+05 - 0.20997975E+05 0.20101994E+05 0.20836336E+05 0.20541254E+05 - 0.21460510E+05 0.22666576E+05 0.22889023E+05 0.23488928E+05 - 0.24073795E+05 0.20700236E+05 0.25112160E+05 0.26979672E+05 - 0.26547193E+05 0.25470703E+05 0.23377023E+05 0.22811697E+05 - 0.23086066E+05 0.22503201E+05 0.22785775E+05 0.24492041E+05 - 0.23603029E+05 0.23959139E+05 0.22884938E+05 0.24749791E+05 - 0.26961738E+05 0.27629131E+05 0.26116785E+05 0.26582154E+05 - 0.24170330E+05 0.23806143E+05 0.22962014E+05 0.23545691E+05 - 0.23350162E+05 0.23859471E+05 0.26362496E+05 0.23627184E+05 - 0.25028035E+05 0.26310301E+05 0.27278166E+05 0.25550424E+05 - 0.25392828E+05 0.24689818E+05 0.23735738E+05 0.23409246E+05 - 0.23805434E+05 0.24284344E+05 0.24011236E+05 0.23914000E+05 - 0.22377752E+05 0.24057285E+05 0.26330213E+05 0.26782672E+05 - 0.25517467E+05 0.25073805E+05 0.24159855E+05 0.24079967E+05 - 0.24545420E+05 0.24554879E+05 0.24309012E+05 0.23239062E+05 - 0.23198158E+05 0.22226348E+05 0.23487863E+05 0.24325693E+05 - 0.25483758E+05 0.25270877E+05 0.25866572E+05 0.26021049E+05 - 0.24342607E+05 0.23365486E+05 0.24708207E+05 0.24242482E+05 - 0.23869699E+05 0.24104123E+05 0.22630590E+05 0.23228711E+05 - 0.24622938E+05 0.24625875E+05 0.24280643E+05 0.25703510E+05 - 0.26714533E+05 0.25648303E+05 0.25130844E+05 0.24349674E+05 - 0.23867186E+05 0.24066262E+05 0.24898645E+05 0.21944580E+05 - 0.21967674E+05 0.23688264E+05 0.23561354E+05 0.24111818E+05 - 0.25200361E+05 0.25916139E+05 0.25490133E+05 0.25704680E+05 - 0.24740072E+05 0.23693291E+05 0.23891428E+05 0.25038826E+05 - 0.21637092E+05 0.20874289E+05 0.22060807E+05 0.22835738E+05 - 0.25029502E+05 0.26422381E+05 0.27787441E+05 0.26099420E+05 - 0.25713275E+05 0.25212693E+05 0.23880273E+05 0.24226342E+05 - 0.25198773E+05 0.21770439E+05 0.22045908E+05 0.23843273E+05 - 0.23205742E+05 0.24507074E+05 0.26588518E+05 0.27218109E+05 - 0.26189314E+05 0.25586701E+05 0.25731225E+05 0.24071434E+05 - 0.23539021E+05 0.25316238E+05 0.22544938E+05 0.22952920E+05 - 0.23357789E+05 0.25012199E+05 0.25306879E+05 0.25489320E+05 - 0.25839789E+05 0.24851053E+05 0.24495104E+05 0.24107027E+05 - 0.24195285E+05 0.23313197E+05 0.23720062E+05 0.23858072E+05 - 0.23873416E+05 0.24575842E+05 0.24851779E+05 0.25384885E+05 - 0.25448504E+05 0.24839496E+05 0.24903520E+05 0.24073205E+05 - 0.22826094E+05 0.22712041E+05 0.23847209E+05 0.23598865E+05 - 0.24190578E+05 0.24916746E+05 0.24289277E+05 0.24521750E+05 - 0.24404859E+05 0.24758125E+05 0.24980416E+05 0.25001232E+05 - 0.22820426E+05 0.22565771E+05 0.21513137E+05 0.23106621E+05 - 0.24050871E+05 0.22544160E+05 0.22501066E+05 0.22555428E+05 - 0.24163604E+05 0.23895439E+05 0.24421262E+05 0.25384061E+05 - 0.25043168E+05 0.24175652E+05 0.22725363E+05 0.22543938E+05 - 0.23503787E+05 0.23756344E+05 0.24157605E+05 0.24691248E+05 - 0.24481430E+05 0.24791061E+05 0.25140670E+05 0.26069586E+05 - 0.26828699E+05 0.26958547E+05 0.25859803E+05 0.25374967E+05 - 0.24315725E+05 0.24888270E+05 0.24925012E+05 0.25557605E+05 - 0.24973404E+05 0.24491400E+05 0.25220543E+05 0.25480258E+05 - 0.25869801E+05 0.26658881E+05 0.26870561E+05 0.27034035E+05 - 0.26169574E+05 0.25661684E+05 0.25078637E+05 0.24948766E+05 - 0.25160645E+05 0.24773633E+05 0.25240430E+05 0.26188438E+05 - 0.25611883E+05 0.25818822E+05 0.26644193E+05 0.26841012E+05 - 0.26541754E+05 0.26843701E+05 0.26383139E+05 0.25823490E+05 - 0.25199672E+05 0.24521391E+05 0.25182230E+05 0.25833025E+05 - 0.25792955E+05 0.25438809E+05 0.25871875E+05 0.26024340E+05 - 0.27550887E+05 0.27427732E+05 0.27803635E+05 0.27311359E+05 - 0.25767611E+05 0.25283061E+05 0.24591311E+05 0.24781088E+05 - 0.25885713E+05 0.25557406E+05 0.26378512E+05 0.26727299E+05 - 0.26416281E+05 0.26223607E+05 0.26417977E+05 0.27241844E+05 - 0.26481992E+05 0.25809381E+05 0.25272066E+05 0.24451473E+05 - 0.25290494E+05 0.25770498E+05 0.26314918E+05 0.26382035E+05 - 0.26668271E+05 0.25663773E+05 0.25212877E+05 0.25214896E+05 - 0.26801803E+05 0.26611398E+05 0.25933479E+05 0.26340191E+05 - 0.24351520E+05 0.25300412E+05 0.24661797E+05 0.26294062E+05 - 0.25723791E+05 0.25780746E+05 0.25059471E+05 0.25265771E+05 - 0.24554732E+05 0.25370264E+05 0.26092865E+05 0.26504566E+05 - 0.25837582E+05 0.26068789E+05 0.25299277E+05 0.24242107E+05 - 0.25526162E+05 0.25762934E+05 0.25421658E+05 0.25098129E+05 - 0.24555525E+05 0.24802293E+05 0.25271654E+05 0.25650510E+05 - 0.26499297E+05 0.25567637E+05 0.25999537E+05 0.24584584E+05 - 0.23951533E+05 0.23683293E+05 0.24520104E+05 0.24171529E+05 - 0.23632270E+05 0.23708578E+05 0.25140561E+05 0.24532238E+05 - 0.24865672E+05 0.26273150E+05 0.25396145E+05 0.26035814E+05 - 0.24684842E+05 0.23428791E+05 0.22291896E+05 0.19293191E+05 - 0.22033096E+05 0.23141461E+05 0.24090467E+05 0.24247193E+05 - 0.24172537E+05 0.24172477E+05 0.23571209E+05 0.25731855E+05 - 0.26802664E+05 0.25280891E+05 0.24771906E+05 0.22530004E+05 - 0.22270840E+05 0.22445383E+05 0.23268678E+05 0.23969801E+05 - 0.24199594E+05 0.25122932E+05 0.24971217E+05 0.25818199E+05 - 0.27064361E+05 0.26586672E+05 0.26178316E+05 0.25412250E+05 - 0.25164785E+05 0.24372768E+05 0.24773545E+05 0.25083910E+05 - 0.25456828E+05 0.26236645E+05 0.26000311E+05 0.26720680E+05 - 0.27028207E+05 0.28758697E+05 0.26129883E+05 0.26376211E+05 - 0.27404289E+05 0.26745463E+05 0.26738000E+05 0.26642381E+05 - 0.26841611E+05 0.26354848E+05 0.27260162E+05 0.27273607E+05 - 0.27362451E+05 0.27725742E+05 0.27256066E+05 0.25273139E+05 - 0.26377271E+05 0.27660896E+05 0.28200938E+05 0.28147162E+05 - 0.28077244E+05 0.27605746E+05 0.27670123E+05 0.27113914E+05 - 0.26482355E+05 0.27347947E+05 0.26758791E+05 0.27166715E+05 - 0.25006449E+05 0.26319562E+05 0.27614338E+05 0.28306938E+05 - 0.27997316E+05 0.27667703E+05 0.28010537E+05 0.27639186E+05 - 0.27239000E+05 0.27368070E+05 0.27666707E+05 0.27359445E+05 - 0.26401062E+05 0.24969602E+05 0.26724877E+05 0.27342463E+05 - 0.28406838E+05 0.28037289E+05 0.27368070E+05 0.27087283E+05 - 0.27919523E+05 0.27642545E+05 0.27166596E+05 0.27668666E+05 - 0.27649314E+05 0.27049635E+05 0.26454975E+05 0.27967615E+05 - 0.27762760E+05 0.27927398E+05 0.27577826E+05 0.26633201E+05 - 0.26037746E+05 0.27657240E+05 0.27355285E+05 0.27828146E+05 - 0.28105533E+05 0.28001209E+05 0.28028092E+05 0.28137230E+05 - 0.26783377E+05 0.27293928E+05 0.27527865E+05 0.27827535E+05 - 0.26841857E+05 0.25959629E+05 0.26041342E+05 0.26011121E+05 - 0.27348516E+05 0.27943955E+05 0.28618266E+05 0.28358900E+05 - 0.27877604E+05 0.26144078E+05 0.25666275E+05 0.25989660E+05 - 0.26868652E+05 0.26541637E+05 0.25841459E+05 0.25548195E+05 - 0.25507438E+05 0.27086438E+05 0.27595998E+05 0.27819764E+05 - 0.27339295E+05 0.27138521E+05 0.25754521E+05 0.25647076E+05 - 0.25430305E+05 0.26179449E+05 0.25524057E+05 0.25240750E+05 - 0.25158506E+05 0.25926439E+05 0.26728594E+05 0.27290127E+05 - 0.27816865E+05 0.27732971E+05 0.24864150E+05 0.24373035E+05 - 0.24681770E+05 0.24411441E+05 0.24501354E+05 0.24451412E+05 - 0.25496963E+05 0.25926805E+05 0.25486879E+05 0.25543256E+05 - 0.26899518E+05 0.26928285E+05 0.26977908E+05 0.24587959E+05 - 0.23841635E+05 0.24762039E+05 0.24651102E+05 0.24081783E+05 - 0.25130555E+05 0.24870859E+05 0.25692178E+05 0.25243479E+05 - 0.26167084E+05 0.27255908E+05 0.27329279E+05 0.26416324E+05 - 0.27238154E+05 0.26112145E+05 0.25969629E+05 0.26928496E+05 - 0.27557781E+05 0.26568936E+05 0.26409059E+05 0.26598834E+05 - 0.25809732E+05 0.26209291E+05 0.25739842E+05 0.25739842E+05 - 0.26788613E+05 0.25580010E+05 0.25692508E+05 0.26229240E+05 - 0.26169297E+05 0.28666391E+05 0.28576496E+05 0.27957223E+05 - 0.27497760E+05 0.27078227E+05 0.26399047E+05 0.25969551E+05 - 0.26079422E+05 0.26269201E+05 0.26618811E+05 0.26102088E+05 - 0.26389074E+05 0.26658744E+05 0.28626457E+05 0.28286857E+05 - 0.28326811E+05 0.27907301E+05 0.27028303E+05 0.26868518E+05 - 0.26838553E+05 0.26349127E+05 0.26456352E+05 0.26838553E+05 - 0.25831387E+05 0.26690426E+05 0.28057104E+05 0.28246902E+05 - 0.29245734E+05 0.28626457E+05 0.27407887E+05 0.27188115E+05 - 0.25919631E+05 0.26576199E+05 0.26840486E+05 0.26595520E+05 - 0.26189314E+05 0.26379092E+05 0.27460627E+05 0.28047117E+05 - 0.29505428E+05 0.30054787E+05 0.28976051E+05 0.27397898E+05 - 0.27028303E+05 0.26778623E+05 0.27218109E+05 0.27327033E+05 - 0.26909598E+05 0.26958412E+05 0.27248074E+05 0.26961162E+05 - 0.27787420E+05 0.28446668E+05 0.29375580E+05 0.28916119E+05 - 0.27737502E+05 0.26988352E+05 0.26489029E+05 0.26908539E+05 - 0.27352543E+05 0.26400617E+05 0.27687623E+05 0.27607715E+05 - 0.27760371E+05 0.28246945E+05 0.27807480E+05 0.28516650E+05 - 0.27967295E+05 0.27118287E+05 0.26778656E+05 0.25350418E+05 - 0.26049602E+05 0.27208250E+05 0.27122049E+05 0.27637049E+05 - 0.27876764E+05 0.27938471E+05 0.27827514E+05 0.28237057E+05 - 0.28636592E+05 0.28247045E+05 0.28247045E+05 0.26489068E+05 - 0.26289330E+05 0.26079572E+05 0.26529049E+05 0.27611191E+05 - 0.27787582E+05 0.27927418E+05 0.28027295E+05 0.28167117E+05 - 0.28476777E+05 0.28806391E+05 0.28916264E+05 0.28346930E+05 - 0.27158289E+05 0.26738805E+05 0.26469119E+05 0.27744852E+05 - 0.26403326E+05 0.27887463E+05 0.26848676E+05 0.26778750E+05 - 0.27398016E+05 0.27507908E+05 0.28117197E+05 0.29086066E+05 - 0.28237057E+05 0.28197074E+05 0.27148328E+05 0.27487932E+05 - 0.27574020E+05 0.28024842E+05 0.27465738E+05 0.27857336E+05 - 0.27027209E+05 0.27437967E+05 0.27218246E+05 0.27927418E+05 - 0.28007326E+05 0.27048443E+05 0.28097193E+05 0.27218246E+05 - 0.27356156E+05 0.27727084E+05 0.28019232E+05 0.27245012E+05 - 0.26433436E+05 0.26662111E+05 0.26938312E+05 0.27514494E+05 - 0.27778602E+05 0.27941807E+05 0.27437988E+05 0.27612229E+05 - 0.28434035E+05 0.28496756E+05 0.27775818E+05 0.27474898E+05 - 0.25012158E+05 0.25512449E+05 0.26693352E+05 0.27125861E+05 - 0.27299291E+05 0.27339496E+05 0.27759576E+05 0.28583660E+05 - 0.27393543E+05 0.28146814E+05 0.28789361E+05 0.28373375E+05 - 0.27945750E+05 0.24168188E+05 0.24093082E+05 0.25212287E+05 - 0.25919346E+05 0.26955250E+05 0.27075568E+05 0.27468592E+05 - 0.27741904E+05 0.28139377E+05 0.28066951E+05 0.28934693E+05 - 0.28398939E+05 0.27738939E+05 0.25827178E+05 0.25920363E+05 - 0.26357191E+05 0.27084574E+05 0.27491055E+05 0.27414459E+05 - 0.28090998E+05 0.28017824E+05 0.28622984E+05 0.28554188E+05 - 0.28234922E+05 0.28417354E+05 0.27856971E+05 0.27633135E+05 - 0.28126492E+05 0.28258348E+05 0.29182787E+05 0.28681076E+05 - 0.28728699E+05 0.28853064E+05 0.27995982E+05 0.29013143E+05 - 0.28595588E+05 0.28373164E+05 0.28905000E+05 0.27530373E+05 - 0.28546828E+05 0.29971232E+05 0.30322471E+05 0.28984061E+05 - 0.29782123E+05 0.29016002E+05 0.28266879E+05 0.27817406E+05 - 0.28058943E+05 0.28521445E+05 0.28475814E+05 0.27759961E+05 - 0.26068234E+05 0.29915311E+05 0.30389943E+05 0.30051445E+05 - 0.30614105E+05 0.30164656E+05 0.29365594E+05 0.28646436E+05 - 0.28266879E+05 0.27699748E+05 0.28089367E+05 0.27537602E+05 - 0.27290807E+05 0.27645707E+05 0.30594447E+05 0.30200059E+05 - 0.28913277E+05 0.29904938E+05 0.29315652E+05 0.29565359E+05 - 0.29125873E+05 0.28426691E+05 0.28759525E+05 0.28099350E+05 - 0.28019492E+05 0.28002328E+05 0.26560107E+05 0.31253596E+05 - 0.30279895E+05 0.28904023E+05 0.28566502E+05 0.28836207E+05 - 0.29984859E+05 0.29275691E+05 0.29405539E+05 0.28919953E+05 - 0.28032271E+05 0.28514381E+05 0.27768357E+05 0.27341734E+05 - 0.30884109E+05 0.30259998E+05 0.29324564E+05 0.28536613E+05 - 0.28426764E+05 0.29515492E+05 0.29925014E+05 0.29675305E+05 - 0.28512277E+05 0.27946492E+05 0.26857865E+05 0.27427182E+05 - 0.27217434E+05 0.30175010E+05 0.29840488E+05 0.28925803E+05 - 0.28796383E+05 0.28566674E+05 0.29335775E+05 0.30134842E+05 - 0.30324623E+05 0.28718590E+05 0.28595785E+05 0.27846682E+05 - 0.28535855E+05 0.28076406E+05 0.24528247E+04 0.24064507E+04 - 0.24312319E+04 0.25218093E+04 0.24041211E+04 0.23123643E+04 - 0.22513215E+04 0.22489214E+04 0.22263657E+04 0.21569392E+04 - 0.22126462E+04 0.22041135E+04 0.21943599E+04 0.24525867E+04 - 0.25206826E+04 0.25764514E+04 0.23948140E+04 0.23458950E+04 - 0.23823044E+04 0.23732891E+04 0.23025886E+04 0.22653867E+04 - 0.23725603E+04 0.23857085E+04 0.22603713E+04 0.23064478E+04 - 0.24910996E+04 0.25005430E+04 0.25050229E+04 0.23902075E+04 - 0.24226138E+04 0.25395979E+04 0.23282690E+04 0.24364207E+04 - 0.25139253E+04 0.24042852E+04 0.24345986E+04 0.23741213E+04 - 0.23663950E+04 0.24392366E+04 0.25062485E+04 0.25905032E+04 - 0.25978987E+04 0.24998245E+04 0.23808179E+04 0.22618689E+04 - 0.23598728E+04 0.24193279E+04 0.24190491E+04 0.23887124E+04 - 0.24073237E+04 0.23837087E+04 0.25480737E+04 0.27433877E+04 - 0.26836550E+04 0.26488818E+04 0.25236616E+04 0.24197278E+04 - 0.24164963E+04 0.23580869E+04 0.23164138E+04 0.24102185E+04 - 0.25021672E+04 0.24982148E+04 0.24007175E+04 0.25067708E+04 - 0.26107510E+04 0.26958066E+04 0.27172410E+04 0.26261455E+04 - 0.24764548E+04 0.23647581E+04 0.22758372E+04 0.23300486E+04 - 0.24810154E+04 0.25592229E+04 0.24251094E+04 0.23232949E+04 - 0.25662842E+04 0.25727012E+04 0.26580168E+04 0.25942466E+04 - 0.26067146E+04 0.25284561E+04 0.22942903E+04 0.23099438E+04 - 0.23571643E+04 0.24774751E+04 0.24942935E+04 0.24874175E+04 - 0.23915132E+04 0.24932834E+04 0.25950149E+04 0.25896475E+04 - 0.25440432E+04 0.25295198E+04 0.25271926E+04 0.24548799E+04 - 0.24991357E+04 0.25355896E+04 0.24175615E+04 0.24710024E+04 - 0.24698125E+04 0.24693513E+04 0.24778530E+04 0.24192607E+04 - 0.24658843E+04 0.25385234E+04 0.26272261E+04 0.25606794E+04 - 0.26034666E+04 0.24844951E+04 0.24845532E+04 0.24993501E+04 - 0.25682437E+04 0.25307551E+04 0.24392244E+04 0.23083887E+04 - 0.23824641E+04 0.25307263E+04 0.24998938E+04 0.25662402E+04 - 0.24607280E+04 0.26946614E+04 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.24701074E+04 0.25309414E+04 0.25382927E+04 0.25032554E+04 - 0.24110425E+04 0.25138596E+04 0.26172727E+04 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.24771387E+04 0.25112002E+04 0.25291133E+04 - 0.24714648E+04 0.25392344E+04 0.25372898E+04 0.25711846E+04 - 0.25776760E+04 0.27272754E+04 0.26602261E+04 0.25981479E+04 - 0.26644307E+04 0.24618030E+04 0.26255427E+04 0.24871675E+04 - 0.24435505E+04 0.24165391E+04 0.24007725E+04 0.25339631E+04 - 0.25415886E+04 0.26066658E+04 0.27524497E+04 0.27258127E+04 - 0.26376172E+04 0.24828765E+04 0.24566780E+04 0.25265217E+04 - 0.24073247E+04 0.24196843E+04 0.24342781E+04 0.23890903E+04 - 0.24497751E+04 0.25871201E+04 0.25767114E+04 0.26649919E+04 - 0.26492756E+04 0.25841162E+04 0.24889644E+04 0.24245298E+04 - 0.24883962E+04 0.24482727E+04 0.24093350E+04 0.23540396E+04 - 0.24250715E+04 0.24165596E+04 0.25444700E+04 0.26148982E+04 - 0.27184895E+04 0.26281641E+04 0.26012783E+04 0.25529946E+04 - 0.25869568E+04 0.23906079E+04 0.25274653E+04 0.23656643E+04 - 0.22961873E+04 0.22659924E+04 0.23900769E+04 0.24543191E+04 - 0.25065146E+04 0.26189973E+04 0.25519465E+04 0.26498296E+04 - 0.26570913E+04 0.25700471E+04 0.23059175E+04 0.22987329E+04 - 0.23391123E+04 0.23129946E+04 0.23110464E+04 0.22688020E+04 - 0.23605024E+04 0.25010820E+04 0.26582844E+04 0.27297336E+04 - 0.25339680E+04 0.25512888E+04 0.25317776E+04 0.23321340E+04 - 0.23553481E+04 0.22581074E+04 0.22423735E+04 0.22275132E+04 - 0.22770552E+04 0.23806890E+04 0.24301648E+04 0.26116262E+04 - 0.26128735E+04 0.24700447E+04 0.23469128E+04 0.24255488E+04 - 0.25080835E+04 0.24849653E+04 0.22680366E+04 0.22220649E+04 - 0.22991257E+04 0.23795088E+04 0.24371689E+04 0.25317783E+04 - 0.25599587E+04 0.24660496E+04 0.24693230E+04 0.23577446E+04 - 0.23537766E+04 0.25598560E+04 0.25708455E+04 0.23835923E+04 - 0.22527253E+04 0.23333049E+04 0.22809736E+04 0.23574094E+04 - 0.25364548E+04 0.25775732E+04 0.25209834E+04 0.24192200E+04 - 0.23686116E+04 0.22202632E+04 0.26221450E+04 0.25341226E+04 - 0.25061160E+04 0.22753335E+04 0.23127625E+04 0.22475623E+04 - 0.24008665E+04 0.25340645E+04 0.24886924E+04 0.24539658E+04 - 0.23712100E+04 0.22167957E+04 0.20773943E+04 0.24823469E+04 - 0.24081738E+04 0.24960500E+04 0.22717576E+04 0.22612947E+04 - 0.23331157E+04 0.23747512E+04 0.23495669E+04 0.23296064E+04 - 0.23613787E+04 0.23516099E+04 0.21112100E+04 0.19637524E+04 - 0.14934286E+05 0.15372728E+05 0.14671295E+05 0.15757901E+05 - 0.16556551E+05 0.17264785E+05 0.18430010E+05 0.18203562E+05 - 0.18288141E+05 0.17548715E+05 0.18466809E+05 0.18545877E+05 - 0.19993920E+05 0.16049581E+05 0.15442840E+05 0.15824102E+05 - 0.16355474E+05 0.16954678E+05 0.18537010E+05 0.18514568E+05 - 0.17551648E+05 0.17045820E+05 0.17613887E+05 0.17316070E+05 - 0.18219045E+05 0.19461242E+05 0.16172827E+05 0.14587717E+05 - 0.15041511E+05 0.16237459E+05 0.17771178E+05 0.18692580E+05 - 0.18134205E+05 0.18700744E+05 0.17890920E+05 0.17283076E+05 - 0.17305004E+05 0.17809209E+05 0.19473051E+05 0.15775716E+05 - 0.15061582E+05 0.14902105E+05 0.16098703E+05 0.17707453E+05 - 0.19220518E+05 0.18736961E+05 0.18216438E+05 0.17426268E+05 - 0.17584912E+05 0.18665846E+05 0.17980703E+05 0.19013941E+05 - 0.15443580E+05 0.15225855E+05 0.14986346E+05 0.15774026E+05 - 0.16876322E+05 0.18884682E+05 0.18130109E+05 0.17752371E+05 - 0.17672658E+05 0.17748312E+05 0.17879744E+05 0.17523469E+05 - 0.19150102E+05 0.16089289E+05 0.16274023E+05 0.16491846E+05 - 0.17090906E+05 0.17334227E+05 0.18479180E+05 0.18240305E+05 - 0.17310000E+05 0.16203941E+05 0.17141348E+05 0.17829844E+05 - 0.17541461E+05 0.18929338E+05 0.17190018E+05 0.17302014E+05 - 0.15878701E+05 0.15692501E+05 0.17193525E+05 0.16536053E+05 - 0.17179428E+05 0.16260091E+05 0.15961521E+05 0.17430701E+05 - 0.17678135E+05 0.17256459E+05 0.19131084E+05 0.18057492E+05 - 0.17430201E+05 0.16569553E+05 0.15880258E+05 0.16757248E+05 - 0.16608037E+05 0.17757979E+05 0.17117875E+05 0.18034592E+05 - 0.18058291E+05 0.17915945E+05 0.18198744E+05 0.19513275E+05 - 0.17791301E+05 0.17508395E+05 0.16656553E+05 0.17178906E+05 - 0.17886838E+05 0.17712574E+05 0.17581547E+05 0.17579822E+05 - 0.17369818E+05 0.18438357E+05 0.18614764E+05 0.17542023E+05 - 0.18171242E+05 0.18019531E+05 0.17660459E+05 0.18317564E+05 - 0.17761621E+05 0.18204887E+05 0.18569484E+05 0.19719891E+05 - 0.18291586E+05 0.17541537E+05 0.17159090E+05 0.16470824E+05 - 0.17435740E+05 0.17188555E+05 0.18039166E+05 0.18147475E+05 - 0.18037326E+05 0.17907754E+05 0.17341113E+05 0.18332689E+05 - 0.19474508E+05 0.18856771E+05 0.17555182E+05 0.17140027E+05 - 0.17262084E+05 0.17874990E+05 0.17328619E+05 0.18318201E+05 - 0.17569990E+05 0.16978506E+05 0.17161283E+05 0.17718082E+05 - 0.18936361E+05 0.18615662E+05 0.18171715E+05 0.17629080E+05 - 0.17222012E+05 0.17630727E+05 0.17365881E+05 0.15947625E+05 - 0.18539271E+05 0.17993273E+05 0.17813945E+05 0.18046332E+05 - 0.17137846E+05 0.17847867E+05 0.18606500E+05 0.17114734E+05 - 0.17047484E+05 0.16898680E+05 0.16674980E+05 0.17603619E+05 - 0.15564815E+05 0.20666771E+05 0.19313061E+05 0.19670125E+05 - 0.18433967E+05 0.18185871E+05 0.18170789E+05 0.17167297E+05 - 0.17728348E+05 0.18268553E+05 0.18232938E+05 0.17382010E+05 - 0.16465299E+05 0.15344422E+05 0.21620137E+05 0.20174287E+05 - 0.21614443E+05 0.19985812E+05 0.19422719E+05 0.19185557E+05 - 0.18808920E+05 0.17216986E+05 0.17562305E+05 0.17276658E+05 - 0.17313766E+05 0.14968214E+05 0.14674159E+05 0.21271910E+05 - 0.20465578E+05 0.19339953E+05 0.19727014E+05 0.19485672E+05 - 0.18603557E+05 0.18048451E+05 0.17593260E+05 0.16821533E+05 - 0.16359904E+05 0.15974924E+05 0.15337056E+05 0.15222011E+05 - 0.21784715E+05 0.21048523E+05 0.20491234E+05 0.19492338E+05 - 0.18742098E+05 0.18211172E+05 0.18410248E+05 0.17362736E+05 - 0.17404898E+05 0.17873539E+05 0.16072354E+05 0.15143405E+05 - 0.15299772E+05 0.22047303E+05 0.21428559E+05 0.20478586E+05 - 0.21038029E+05 0.19644676E+05 0.17326811E+05 0.16740162E+05 - 0.16836758E+05 0.17049471E+05 0.17180896E+05 0.16231544E+05 - 0.15202790E+05 0.15962436E+05 0.22948484E+05 0.22034754E+05 - 0.20515578E+05 0.19845445E+05 0.19609990E+05 0.18556104E+05 - 0.17795598E+05 0.16651166E+05 0.17656137E+05 0.16751111E+05 - 0.17004629E+05 0.16247858E+05 0.16592543E+05 0.23435633E+05 - 0.22579674E+05 0.22536701E+05 0.20158471E+05 0.20017869E+05 - 0.20136623E+05 0.18293602E+05 0.17083010E+05 0.18299016E+05 - 0.18021146E+05 0.17716543E+05 0.17764096E+05 0.16243532E+05 - 0.24870023E+05 0.23704582E+05 0.22474494E+05 0.21983174E+05 - 0.20281916E+05 0.19613797E+05 0.19368701E+05 0.18465229E+05 - 0.17788416E+05 0.17437260E+05 0.17399869E+05 0.17424178E+05 - 0.15462885E+05 0.24461061E+05 0.23598488E+05 0.20749299E+05 - 0.21253004E+05 0.20995490E+05 0.21129451E+05 0.19955061E+05 - 0.18665418E+05 0.18144117E+05 0.17820709E+05 0.16381358E+05 - 0.16262913E+05 0.15248217E+05 - 'XCON ' 1740 'DOUB' - 0.10229964295718D+03 0.45777926329463D-01 0.11184253518666D+05 - 0.31066310673215D+04 0.13790693546576D+01 0.33964980260969D+06 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.71135825235002D+03 0.16440310320074D+04 - 0.73568518218668D+00 0.17973923782141D+06 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.10229964295718D+03 - 0.45777926329463D-01 0.11184253518666D+05 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.66470308201202D+01 - 0.29744706667305D-02 0.72670906456371D+03 0.19916920751013D-02 - 0.11144709006910D+05 0.12229141733785D-01 0.33940699628179D+06 - 0.00000000000000D+00 0.00000000000000D+00 0.10000000000000D+01 - 0.00000000000000D+00 0.24834614416221D+03 0.76184797487754D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.10000000000000D+01 - 0.10000000000000D+01 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.66470308201202D+01 0.00000000000000D+00 - 0.00000000000000D+00 0.13451827875530D+03 0.40814546217229D+04 - 0.00000000000000D+00 0.24834614416221D+03 0.10000000000000D+01 - 0.00000000000000D+00 0.10000000000000D+01 0.10000000000000D+01 - 0.00000000000000D+00 0.14378202913254D+03 0.83683044046717D-01 - 0.15645592959954D+05 0.43573147756421D+04 0.25191205538139D+01 - 0.47405743691598D+06 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.69778805451542D+00 0.71175462293817D+03 - 0.25483622786853D+04 0.14831805761876D+01 0.27729918104061D+06 - -0.74414387525342D-02 0.00000000000000D+00 0.00000000000000D+00 - 0.14378202913254D+03 0.83683044046717D-01 0.15645592959954D+05 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.10335697047208D+02 0.60155124842324D-02 0.11246753849116D+04 - 0.20511019775300D-02 0.15604562841257D+05 0.12593923080396D-01 - 0.47380550884779D+06 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+01 0.00000000000000D+00 0.24756486338258D+03 - 0.76504777061304D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+01 0.10000000000000D+01 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.10335697047208D+02 - 0.00000000000000D+00 0.00000000000000D+00 0.18887277101067D+03 - 0.57185041182297D+04 0.00000000000000D+00 0.24756486338258D+03 - 0.10000000000000D+01 0.00000000000000D+00 0.10000000000000D+01 - 0.10000000000000D+01 -0.74414387525342D-02 0.24332292555806D+04 - 0.18543530151657D+00 0.26333635347848D+06 0.73020613322866D+05 - 0.55239354406168D+01 0.79041539075088D+07 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.13962292061893D+01 - 0.71243819671344D+03 0.51841690274403D+05 0.39508317784338D+01 - 0.56105694289642D+07 -0.14884408501193D-01 0.00000000000000D+00 - 0.00000000000000D+00 0.24332292555806D+04 0.18543530151657D+00 - 0.26333635347848D+06 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.21173181093456D+03 0.16135985588391D-01 - 0.22914685444876D+05 0.72638970310010D-01 0.26185883307357D+06 - 0.44600883561387D+00 0.78950818191714D+07 0.00000000000000D+00 - 0.00000000000000D+00 0.10000000000000D+01 0.00000000000000D+00 - 0.24584413116188D+03 0.86840748269471D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.10000000000000D+01 0.10000000000000D+01 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.21173181093456D+03 0.00000000000000D+00 0.00000000000000D+00 - 0.31909039135581D+04 0.95679229739406D+05 0.00000000000000D+00 - 0.24584413116188D+03 0.10000000000000D+01 0.00000000000000D+00 - 0.10000000000000D+01 0.10000000000000D+01 -0.14884408501193D-01 - 0.24175309321618D+03 0.26779024679314D-01 0.26047336753602D+05 - 0.71437323581114D+04 0.77492412728878D+00 0.76983212989897D+06 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.20962214306226D+01 0.71400291039254D+03 0.67626822545747D+04 - 0.74910327964935D+00 0.72863540109910D+06 -0.22355069141625D-01 - 0.00000000000000D+00 0.00000000000000D+00 0.24175309321618D+03 - 0.26779024679314D-01 0.26047336753602D+05 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.27859903146760D+02 - 0.30860454524288D-02 0.30017248984586D+04 0.34500000000000+106 - 0.34500000000000-104 0.98378511166218D-01 0.76779287324997D+06 - 0.00000000000000D+00 0.00000000000000D+00 0.10000000000000D+01 - 0.00000000000000D+00 0.24372954532363D+03 0.86464624967086D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.10000000000000D+01 - 0.10000000000000D+01 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.27859903146760D+02 0.00000000000000D+00 - 0.00000000000000D+00 0.31670696513357D+03 0.93509511150466D+04 - 0.00000000000000D+00 0.24372954532363D+03 0.10000000000000D+01 - 0.00000000000000D+00 0.10000000000000D+01 0.10000000000000D+01 - -0.22355069141625D-01 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 -0.87732158665995D+05 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.26372876541684D+07 - 0.00000000000000D+00 0.18473000374485D+03 0.00000000000000D+00 - 0.00000000000000D+00 -0.80038737008902D+10 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 -0.87732158665995D+05 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.12086837585003D+07 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.10000000000000D+01 - 0.00000000000000D+00 0.26918168103298D+03 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.10000000000000D+01 - 0.10000000000000D+01 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.12086837585003D+07 0.00000000000000D+00 - 0.00000000000000D+00 -0.40266673252774D+03 0.00000000000000D+00 - 0.12118869227443D+05 0.23950274340169D+03 0.10000000000000D+01 - 0.00000000000000D+00 0.10000000000000D+01 0.10000000000000D+01 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - -0.45011023687549D+03 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.13423256288528D+05 0.18118014735396D+00 0.18481107127176D+03 - 0.00000000000000D+00 0.00000000000000D+00 -0.44119961695810D+08 - 0.46488503012036D+02 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 -0.45011023687549D+03 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.66163952455540D+04 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+01 0.00000000000000D+00 0.26936741652794D+03 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+01 0.10000000000000D+01 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.66163952455540D+04 - 0.00000000000000D+00 0.00000000000000D+00 -0.20658834926193D+01 - 0.00000000000000D+00 0.61682396489192D+02 0.23466857556368D+03 - 0.10000000000000D+01 0.00000000000000D+00 0.10000000000000D+01 - 0.10000000000000D+01 0.46488503012036D+02 0.00000000000000D+00 - 0.00000000000000D+00 -0.28103731097151D+05 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.83786908964509D+06 0.36252396720222D+00 - 0.18497350489598D+03 0.00000000000000D+00 0.00000000000000D+00 - -0.30035237428853D+10 - 0.93629194908058D+02 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 -0.28103731097151D+05 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.44727028836560D+06 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+01 0.00000000000000D+00 0.26955395598671D+03 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+01 0.10000000000000D+01 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.44727028836560D+06 - 0.00000000000000D+00 0.00000000000000D+00 -0.12898847748419D+03 - 0.00000000000000D+00 0.38501748285879D+04 0.25837049615383D+03 - 0.10000000000000D+01 0.00000000000000D+00 0.10000000000000D+01 - 0.10000000000000D+01 0.93629194908058D+02 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 - 'KEYWORDS' 312 'CHAR' - 'TIME ' 'YEARS ' 'DAY ' 'MONTH ' 'YEAR ' 'FOPR ' 'FWPR ' - 'FGPR ' 'FOPRH ' 'FWPRH ' 'FGPRH ' 'FOPT ' 'FWPT ' 'FGPT ' - 'FGOR ' 'FGORH ' 'FWCT ' 'FWCTH ' 'RPR ' 'RPR ' 'WOPR ' - 'WOPR ' 'WOPR ' 'WOPR ' 'WOPR ' 'WOPR ' 'WOPR ' 'WOPR ' - 'WOPR ' 'WOPR ' 'WGPR ' 'WGPR ' 'WGPR ' 'WGPR ' 'WGPR ' - 'WGPR ' 'WGPR ' 'WGPR ' 'WGPR ' 'WGPR ' 'WWPR ' 'WWPR ' - 'WWPR ' 'WWPR ' 'WWPR ' 'WWPR ' 'WWPR ' 'WWPR ' 'WWPR ' - 'WWPR ' 'WOPRH ' 'WOPRH ' 'WOPRH ' 'WOPRH ' 'WOPRH ' 'WOPRH ' - 'WOPRH ' 'WOPRH ' 'WOPRH ' 'WOPRH ' 'WGPRH ' 'WGPRH ' 'WGPRH ' - 'WGPRH ' 'WGPRH ' 'WGPRH ' 'WGPRH ' 'WGPRH ' 'WGPRH ' 'WGPRH ' - 'WWPRH ' 'WWPRH ' 'WWPRH ' 'WWPRH ' 'WWPRH ' 'WWPRH ' 'WWPRH ' - 'WWPRH ' 'WWPRH ' 'WWPRH ' 'WOPT ' 'WOPT ' 'WOPT ' 'WOPT ' - 'WOPT ' 'WOPT ' 'WOPT ' 'WOPT ' 'WOPT ' 'WOPT ' 'WGPT ' - 'WGPT ' 'WGPT ' 'WGPT ' 'WGPT ' 'WGPT ' 'WGPT ' 'WGPT ' - 'WGPT ' 'WGPT ' 'WWPT ' 'WWPT ' 'WWPT ' 'WWPT ' 'WWPT ' - 'WWPT ' 'WWPT ' 'WWPT ' 'WWPT ' 'WWPT ' 'WOPTH ' 'WOPTH ' - 'WOPTH ' 'WOPTH ' 'WOPTH ' 'WOPTH ' 'WOPTH ' 'WOPTH ' 'WOPTH ' - 'WOPTH ' 'WGPTH ' 'WGPTH ' 'WGPTH ' 'WGPTH ' 'WGPTH ' 'WGPTH ' - 'WGPTH ' 'WGPTH ' 'WGPTH ' 'WGPTH ' 'WWPTH ' 'WWPTH ' 'WWPTH ' - 'WWPTH ' 'WWPTH ' 'WWPTH ' 'WWPTH ' 'WWPTH ' 'WWPTH ' 'WWPTH ' - 'WGOR ' 'WGOR ' 'WGOR ' 'WGOR ' 'WGOR ' 'WGOR ' 'WGOR ' - 'WGOR ' 'WGOR ' 'WGOR ' 'WWCT ' 'WWCT ' 'WWCT ' 'WWCT ' - 'WWCT ' 'WWCT ' 'WWCT ' 'WWCT ' 'WWCT ' 'WWCT ' 'WGORH ' - 'WGORH ' 'WGORH ' 'WGORH ' 'WGORH ' 'WGORH ' 'WGORH ' 'WGORH ' - 'WGORH ' 'WGORH ' 'WWCTH ' 'WWCTH ' 'WWCTH ' 'WWCTH ' 'WWCTH ' - 'WWCTH ' 'WWCTH ' 'WWCTH ' 'WWCTH ' 'WWCTH ' 'WGIR ' 'WGIR ' - 'WGIR ' 'WGIR ' 'WGIR ' 'WGIR ' 'WGIR ' 'WGIR ' 'WGIR ' - 'WGIR ' 'WWIR ' 'WWIR ' 'WWIR ' 'WWIR ' 'WWIR ' 'WWIR ' - 'WWIR ' 'WWIR ' 'WWIR ' 'WWIR ' 'WGIRH ' 'WGIRH ' 'WGIRH ' - 'WGIRH ' 'WGIRH ' 'WGIRH ' 'WGIRH ' 'WGIRH ' 'WGIRH ' 'WGIRH ' - 'WWIRH ' 'WWIRH ' 'WWIRH ' 'WWIRH ' 'WWIRH ' 'WWIRH ' 'WWIRH ' - 'WWIRH ' 'WWIRH ' 'WWIRH ' 'WBHP ' 'WBHP ' 'WBHP ' 'WBHP ' - 'WBHP ' 'WBHP ' 'WBHP ' 'WBHP ' 'WBHP ' 'WBHP ' 'WPIG ' - 'WPIG ' 'WPIG ' 'WPIG ' 'WPIG ' 'WPIG ' 'WPIG ' 'WPIG ' - 'WPIG ' 'WPIG ' 'WPIO ' 'WPIO ' 'WPIO ' 'WPIO ' 'WPIO ' - 'WPIO ' 'WPIO ' 'WPIO ' 'WPIO ' 'WPIO ' 'WPIL ' 'WPIL ' - 'WPIL ' 'WPIL ' 'WPIL ' 'WPIL ' 'WPIL ' 'WPIL ' 'WPIL ' - 'WPIL ' 'WPIW ' 'WPIW ' 'WPIW ' 'WPIW ' 'WPIW ' 'WPIW ' - 'WPIW ' 'WPIW ' 'WPIW ' 'WPIW ' 'WOPP ' 'WOPP ' 'WOPP ' - 'WOPP ' 'WOPP ' 'WOPP ' 'WOPP ' 'WOPP ' 'WOPP ' 'WOPP ' - 'WGPP ' 'WGPP ' 'WGPP ' 'WGPP ' 'WGPP ' 'WGPP ' 'WGPP ' - 'WGPP ' 'WGPP ' 'WGPP ' 'WWPP ' 'WWPP ' 'WWPP ' 'WWPP ' - 'WWPP ' 'WWPP ' 'WWPP ' 'WWPP ' 'WWPP ' 'WWPP ' 'BPR ' - 'BPR ' 'BWSAT ' 'BWSAT ' 'BGSAT ' 'BGSAT ' 'RPR ' 'RPR ' - 'ROIP ' 'ROIP ' 'RGIP ' 'RGIP ' - 'ENDSOL ' 0 'MESS' diff --git a/ThirdParty/custom-opm-common/opm-common/tests/ECLFILE.INIT b/ThirdParty/custom-opm-common/opm-common/tests/ECLFILE.INIT deleted file mode 100644 index 0f8cf95936d9f90d2e498fe7d81ec28d78d65baf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37224 zcmeHw2UJwcvNoWgC`uG0NHXV~1H&Hs8;qDSXT_WY>M2%`gmeNF<_YM9G9)R>VKgn|`y&|w`X9;oQJzpn*T2c=LD>)gg$x1x zkN64lJ3c}g9rHWWofhb{K&J)%I~EYkdxCkT7yZ$9@ru^gFMS1!TH7DN``;b`{g37= zL4LRM|naSf;m|zgRW8H z?`XQM>?gMR@67Guf0IGiDDn5dkRhP|kS+2O$q>;0=sN`Y9Uq~Lj`^MGP78Ee;Qv@aFy83+77@%t0>3?s zV%r#ON8vk7wmpLMkH%m}Isvh83<^*vL*Tb_XatKawHj*G~4GR`4RA z7s?R$?cp>nFeheFY?~8*5^oTc{b>Gct3%8F{s`wp0SaXZ=EQ88{zozd z^gogzP0(zkg8Viuj`GpJt{f}h)DDOvd|E@#ld#43DEzoI!|IaMYwqKK(ug{sI zM|5XXi}aVQ`0LzVYVH!EJ716|ICsa#lV9-J^f;&M!!@YAF#tKQ zm5`ZNgD8>Nh?+4DiB3zA-Qxz*tN%oL{~#13WTVzj1I;g6@Ofn(8YB`>rZF2iRpLnL z>WF-wQ7B#{g;f8c$ap^y`MQgdaPtjHmd2xD-9V1$(S@8YCSG_qBNOko#&JYz#^KAC zgZMbSD>6S+AbH3;L`Y?#pdMv0JUEKRyTVj3PK9cQ3cS7ixx~Nahrprskq_ z_a0O}9fmK1M{v44d%@{`Y67R5{b78zi$LpeAGCU%MS)r#ayL1n>F9Ni=q4RxJP1T( z?O{~k4&;cw9Lo`R_{tG2*5HW59_EP66i3x_Pt^5vNAciXRO$NTUCtWB?rTA9aS&P! zm!nnZ0GjK%bHpb|aU|lda>R0i&^S&BwV!;DuiOXkpJ@p4k$IAf5*;%XM?S`9|I=uE z)rBLb-o)vWc9heFXN1p9YpAS8sMiZ#E+6-xx-=OjUX7>;&%&3r^EqN~cxdi3 z7uDz2q49z=8hmHa@3zE;$*Yi~)r4YqcaGS8J$y>r&*@s4$&s*mgfA0Tp}Khr(mr2A zsb62zTymv-#t5k^#Sp(d0f~3D@Z~@`M>KN-M`XS@DyA7AyQM2aWup2<6ojNVLOVd&Z16g zE=O!Y6Gv>*bQHgTi;OKBkf>#W$orcSr7#Q8WzSIEs!*8^P+25ILDaic$}hhjc;f6L-|DmPhREKan&l0M&){v=7XtbsnIk{t7}u z`yeXvGtz1`P#iH5pFX#6M6c=Leasnn*f%16@($!3yNseK`;mJz2l=O2$g~wfg`5kj z6J79mR|;BlkD*?6E2>pf;i>foK5J9qYa5Ehkjcniy$YGbT9G8HiQ?=yWPkaH799yR zIiJVZxk~t;Wz3`)}0apYnbd&rA+d^2TZ=* zW+qp|l*zSgVk&i1nF^buOj+h$ra|s5^Re;~Q(d%>Dd^8;-rY@Ps`~^nRe61x^2Rev z`Sp6Hj;G8t#8fgZL1UT5Kf5xGW5=?^6pfh1U<;LdCTx*#Y36ILHe2LsHCt@rF}CQ2JhsS}VCLJXMy7tzd*$XOs=|S@tdS zDQ62)f8iaI(QO@*SaOTWSXRK~==(8s4$qn9%yCS!!D6QR=@hn%emz@abs<|MuZgMK z_J}FbZo7Z*y-gB52QlxRWSIITeoTH;08{v4EL(b6GFzhVF7x4b1ygD8ipkco64DEh ziRarhl|$2*isQ0OMaxE}oEgCG9e0Z@foA60soqTOyFpCmP-iCUNopH?^2sGkrF|k( zW~RraVHi`@_aal$?9P^6E5YtDz?dyo7R?rsyv;PL-DaxJRxrgwXENp5Sxn8@B&KqZ zGE=bFlqp+3m&rR)#qNFjJi8lr6!W!2p83+3Fs*V*55REmeehZxP1S4A*9AJhGYh+qIZRj6#Jf?G~+nN}- zrLTsUW-0=3PXO!Sg zeLBKs8zb^)9=InA5wlSr{8eX=Wq+#y(Fn1>ioo*+5unb8&l`J$_)La>K>!j=b&)X73|VC> zk(H%~a`h(U6}>{CbPIScQQ($Y!?&9oxEIbN&|(Av=TSf4l{?bv%8}(4g#2kyh#5N{ zW$(`*_ufH7g_j_F@Dl_dYeG2Z6+-yA2rZe7M6pSD+hB>PDU%RgJOccanTYPQ4+%yy z5rvWP;p{}v=_816+lC0aSVW)ZBC-2yWV50W7xX70)Br!WBi!#iK**~SgjIMTa8D^> zUw=io$b4`Y4nW+Ed(`Hxi0S_YVbiR@zr6twA|41xdm;4`ThL8~3`sMrqnN7=BSvkESn8{yt?4`EKhh)}IX z#QUL0Y_dXH*CK?eap6@|iPt-0@QnIJc8}}udb~YceNy12e-J@N{s`%Bg2>C=z>DsM zRCP5(T{D5}VNp254aO6-GkCe67_S|Z;BMmx?yk`YuQNmN=Ws+V?SZWAw@|5>h_DC# z@OU~LuP++HnVkc-7k2RMtpQKzNeDUi9MS9gfZK2l@o!#&H)kJW?sY*>lRZ2pSi||# zBE)j$g8$MDd}| zc;BcW>|{XqWfjOOvO!Lo1oh>bk!AN0DObIaFyaUjvqF#{9fr7vM-iVq3%vC_@JzT! zPv4FVeFiz&YACsU8>MGe=$^(1)oukSKj)0(x=`wSZbi!OFr@g|(lK|H?&A!p|CU4F zZzGE_!#m3@sNehz6%VJP!2dRKiUuNm+gYT(JBXwuTaa3uj65qHlm*5hSJo9pVV_au zV@Cb-P?Y4aLeYE;WWCsh%E^r=+@*!$k>RLuaYoHX9zJOm;6wlQcqj4zb>*8-x$PS& zhe;!Mpab1&jYXEYB;DKe#M{9H4QJ+~=DsT`qto!=@C>|rvkoQ0k5f6`c;A&!U)3Ci z6LuoInD-9tw)L)4j$R4j=U53Nc(+HXS82;7O;J(@o|HOA7c(N7`d=v1{Z3phyrQ^EM z69^rqQifONZm{*5g$MO7aQ)MC++TkLcey@zthf<&Taw|m@e}-q zvfy$45CXe5!9(2{o{yHn$4eg1DueLYY7%bG)W#is3p@zZgRMymJbN92o7QZ2s$GZg z5oI`1zr_ApBJ5`*Q!Ix47gs#2p>>O$VUrw$yVc8J%ZY_ejTM|ydc&bo3NBBJ@M?Dh zUOR=rQ8@z++N=NWw|2gFTAQ^$XjfI{N=N#&vO@964`VeHKS{#GNQd+BhafW zJS$hhr>{F+4w6QeuOqU8wuQvd7D7x0BN*4=S6%?$8)%c2 zbLCTds zkt|_^_%kAHdm3Jv3ys~~qwA~@g2(NJzqDuD&owO^&heX&rQ$>N4+MYr9qN}+zoDg` z`f1A$Q%wE!%NFntTMq9bVenq$1ut#^-i-VRUZ^!KyND?7Rzyx23*PG+Na?!<{JK&^ zq%5a#&+T|~It?EEUcjSyE7eaMQ48-Q+IkvzZ!aQc#ByXrw4kWEmg+kb36l4acu*7E zol4;9_J@!6d;|=p>x|Px`mLa4gQ(r-wCR(^p>a-!`$&CRg}8<55%Y2~62@AA>;0{* zZonf=#I6xVymBVZH$ld`cM#M`mp+4}0ZoX%>H=QcW$Lr4A%U18YD+16cK9Ij5{*Z? z`XgydHR8o9kT_>rn{FA8BxsCSiN=blZ<|_%RJBPo{#^wB!*z%VEcj6 z$N?ruI(`=MBP&^5ntXR zW&I5Bcut66)BP`{5A(1>!~{O#M`3)7Y9f#Hk-nWVNf9mU;OoxAe3vgGl z5hI?0vMUaXe9gC6(T46)?g|BFT&V^s31HyL$yozQ- z&r(KA;T?pUiy~s^bwu>rkI;bubPU@fFfW+eF9hyOCc(XzF@khQAZ+>v_>H4JtJ5bu z(&~=qiPPXI}Dx)^AYqF;Lg8B&niq1t@M)Cu|d$aKjCT{57*bv;Ov+y8oQ2QfGI;h4fR7mu-V4P8pjaVTutNcFOVg}LXvkfqK@Yy@-6LGjmyCm;UjSFe0Us~53i2{;WNk#5q~lW zAzzW(I|aGsY@{4}ill~~G(Ir_F>g%4^Vp2=v7UHStp)eh-f%4R!JEx<@TNQ-+%d+8 zQcp)*<3&VVlSEh_PkIKi90^YjBg*6fjVG;zr=KWn&1d78`ySX!>A<6M3jAdG2>0!e z*wr8DUPiDtp?m8mmo>wq^aOki72$v8Jc1kK@T&MI zxPH6A`!FAgPmJ)aXFVSD{EDYhj(B|X0$$pS!?n*~xFt!!>wGr+IVHhCM~tks4y-wV767HrXM# z*cLwfPr|e4418Mh5a8_szgs8Zn<9eO$>-ts;Tq!J>_y_tm55yZ9%04z;ZI{&{u=KQ z6q=5p)KCOeNx;Ke6CN`b!|9nDyw3U}u;&&;DqTeQ-Vns}8Hm`q$_N}e8J_0N290Sf`=@kHrjx@+y#NtSHbt#2KaY1 zL8$RuI2;@bhevd+lre?3oCo|j*n(T&gBT+YopFe*aXLIt-9Xrm?Fjdv zdur`xh|a%(&_SvQT0ar~D|#b9;u<`)x4~zTCVaOJgztq^I$oR+I`}do7KbAuQ4FEI zzajK;5BSUNgxj()a6Qlmz6*E5dz~NrzYamD{TT$%bv5YvIRx5!BV-SahYq1Jv?a&k zrk4emc^0sf1Kt?Vf?sJMjXN!YbBs1zCei*EIT60E3lSJ&f`~;lKKo(?{PP#W)!Y{@ z8U^3?>0Xbn!{?3*{QV{&xa=&QCvp(-TBB`EiFFu3&p@{$=|Nw_bhAOk%=ZZRbQqxr z%n|AV5uNc1uUU!6l^exK<&w35zSG$!hQ4ADuw z5PiN95djYoqY;eQMX!-QGlH(=$B{XiAa%VrqV;K<(L|%|j4|ZiNW@Ivi^x|A;P;V0 z0{<@f8?S(uKNaU1i){3~BY2d5T*u_cnSO|u)kbvoFvQy5K==!5I!-1dl8)nOl7|Qzy5=e{2ui1MP3|p(@7G7vHgUvD z+(Bdz5UU}NVAyruDU+Lrsaz&}$S{uv+PJ!m(gyLlpU+cJcok3xuP z0$jR^!RhO3IIrfyBYF*u1>Zw}^cZkSF2WS|Bl^vDBp>iWyvIuLEYF>Y-6s+31Ck$JMV5vX(i@a0@3F`jN_|$bCrDmOz;~)g z*4gREC^bgbC?3)ezeIwZA!2t^-Q-Ro)$gE zMg5RzC`Z5Fi=N>#h&|+t*h#aHYTq4M`jyDPaS6Framb9F2p($)qAps|b#Dn0D;Lr+ z14I{9Bl6BxM4|x6_Y07IyA_!RrbxYY8!6&F5k0XdqSgR|^t@vXQYYvlbFm*X?CTK9T7bY^atKZ~N1$gBf_8b(@sW(ku{DUXx{t_ybl$V3 z{_$W*ByGHgq_9K;D^P@n25o!`|Ey1<+63)UcfQUiGVh9l*DB2q70 zrepC1Qh55*FP)2+VutehhV*$?s6U<${t|V%S8+hJ?Qy!dpkqqOx$P(L!6P%o5#`er zysA^+9lC@3k5R~HeWNkVL-fvsF^zlD*yt=eXBDd;HZTKm(+sIE{s^&eN7A#PL3DmP zjr?a-G%o6e+y#&5UgsX|mp0UvlGI;UrLj+4@Lk@ty+`vSkZ>^z+2bZ6$BB=UQ$}rd z(=;OJ{%$%w_hBRc@pdG-G$TH;N87r=R~(HrGhJk>&p_FQY*fWvN6|(Vr1hj{O#(R+ zb=uaL)HAY3nm!Im_mh!QFbGLcm(ukr9eFcX(75+d6jscn@mWzMWxN6ZgEWoPDj?NW z5q#YlG)At2bmx7@C@I4DDno#A@9kb$Y`Z! z1j^k>MAQ?6eSMlX4XG+JfBNLS%RpB06FXV$S&@u4*%q z?+!v5Jxog*QH|`Qt;i~-`}YS;$XD2ioSPZQ6Z1gklRBgq5oG&+K@Qgq#b2+ZKyEM! z4sLHdgUIswgrZk-kZ(AW>a`4oNg_yBpl5;NcBmS39B)hNP;@{86^=S6auKEb(okeB zNkI0*V&o;2An*7S`i*Z9YiEQ?&qt`)U5u)T61*QV3Dx$C=>4!U$miv^)yptEi|j-G zbbmVmsS_U{{qrt*UQvqbT6Gi_S<~}}0(vH~5M?diD7FYfUZ2e2eYPwiN;{K?y3bW2 zdvPJ@3qR6Nolg{JUm<;m-XIE_>WF;V64Li@G*Po{AzBr^i1zwTL~Z6+q7bJ@daWxb z@~1x$rHML3X-qWfGjBUlJUWUfd^R8&x}(VOV-v_=-&16uwHoQ?dy6Pde@>LTQJ$N& z5}AlcMA7yvQQPc9)cPMFiak#eHOJ+o|A?++$R8DCXmU0gpuLQ!L~@8cPmA=PxsAv^ zjwGrwIz*%XDp9%`Ok^i`6V0ubL^E~@8Kg;wcK;7VyLvxS?>3)EZ+%W=HmDH!B~OS- z`aPmr;zm@Dy(WE(CK1&XGon3aCeg}TOEg4WiF)6~q+fj>qP$OmsEr#z)KBauN`1c& zl>Vt^7-9|EC{6nJIBcEt{9Ve=sw?tJhi>OV!M>PK| zBkCjiP@CN*GMGXX%J&lW;g5*gtOZ1KO9oMneL;ro`hJ(GV+@g~Z1N`Rqh*NtGiRc9 zM3E@Eye9qng^>O?)^(&6rin_@6rxr?fvC$S5S8Nxh`M_)QNLkJG~GTDEtNzv?8pu> zi2aagZ(dIZnUoOaoJ=yHuQO3S^qTbbjwedp9}`8XwM2cxPNJT&UfU3*J5fX}WCc;x zKSX*3-y%HXvWe$Gn~k;sUq@fdx^$ZH=^leN)(z; z5~)}lBAZf3dSAXl9Q zK8%MygPBbPO!Wr9dW911^!NjRxa(ufyFBcc=!w%FX)sS)gKLsQVdc0J*OX7gB0L?Y z5`$qnP7D^>yKzTb1;@_hV)u$=*paaZr_2*zzM=xRhDzevrnj(ORDeqZ%wV=D8CR2C zVR>Q)ZderI;KC)?TfPUohHl0&BUSvF@f_F9*1?MIq0LvQ*EIzt4fM{{9Zry7T1fMU@~74 zrX#w+NQIB1<3wSyv=`2gQH2TJ>z%+&}?5~^|Y*l<|MeZi#>hB$v% z6-G3^c7fi1Js&I&bH4@{`vt?YbTq6KZo=YI39Lt+#+^e}F#mQBm!e{DL5uR9m;j3a zCzx*<1hX}LVP^0grtY@5BISjvdre^`B?YU-KVTUt1GA=TTvpYBdDtviPmRD;xhC9` zj)Hah2$=Phhe_{IIOp^NmnNTr$s9FUzFQ8fhLHxVnEStUm37 zneR}TSW3Vw;0R0|!f;~LIb2DzfaNtySPUMEwrT&$+?cM-|ow3t-9<$GN9> zu|LFxoaQz@|qD?vDSA zD@_w&(QOYAjCkwGcXA3O-|p!I{P%90FJ2;o(%=oqh+m7aQUVa}?%H zskk)F7^d$7a7l9w4%(R0c(ew**S6rP%3ZwZA%1n7SKh z8}{Rj>Pzfn<p9@(SN-|XUDp#$g7vjStcHi!+Heu)!DeH z(ELC^6Dyp%IygYmLdUG-r$b>bZY-|4r_l;`TK9BZs}BPk`|SJ zckVxz{yZh*BgCIkvfB0TSkBs*a5G?8w+Srgq6+Rv=LBK-cYQkODU>6`@AR9RB{ntO zsnYS-!#cmSw-JkP9b2aMK%3<%zUZcQ?RHkz!9$$po*l2N_I_Z{_VPZ$dL2=xY#Hal z#2jCi$t=m^!AuvHZH3Ptw=eK@KKZFy&%eJ(SLQ9xXS0V>(3z7}qBA_UcC63(i5?y4 zglX0Qhk{dqvo7fv*?Ol<*0{&Idd>Zg%BcQ28{>?=>RNqc@lWdY9OaOrV-}MhDC;Jz zt5!WpQhHl|VSOR~7kljcAis9Q+QT{(r^vD81AciQzayWH{DkE~6zVNZ3z21LQxjlx zd^F2*#ra+(dkeqk3-$R$dkXE!vK2eJ@k`7Eok;(cy}0pWx-xQ4b~dtSvFehe6NcMP zVk!2$aA}&|5#9BJ%1$agiV@1`h&qicKJI^(xu0diKEIbU?;@*m(IiFRm4qd2v%ppC z(+J(=hH`6;3}OdapYl4LD{0)Z{?GL2NGD9Qb{*gKEi7}M&K2W&`zt!DS!o*`@|KO> zq2qSvxNGSpWnJk{im$X!B?0DuVH(7VRdXFP}7ksyqkWWYZv-bIQ(OB(MqEj9H z?evs{2SU1Ep^%Rde?~9VyJI=au7)2M+O?eZX-&OTmuZuP<=^%BReQGEm9=k*@`}2c zXF4{!8{XzVYGh^ZPqkX#lEv~X_dAs|b&pO3Z{+I_;hDOF&n#jts1Fg!>4+@)w+;bu zx0bR@7Kt|$VJgda*K4~O>xy*Bn_eEMIjo{PXvVR)wK*q)Zk6cFJDl)e{yzL?dUTW{ zOtYrvXx~qjj@8-8sgPW?;3Dhg;ll$>UbiYC&A0hsXUZ{7+a@OHkeP2gW zQ&uSZL}33pf`6BES8+J2hrK`RF*)P$ZtzMt(7xVq!`e7L=tsRrVBzLSI z@-

ci}9-Io&_?{L6ZbJGeV^r2K||iuvD&I>uXB2a+m=t$#o3ZzTWJtB{Wne^yEN zCwc~-820MDZ@*!}daOu?{Y-}54A$OS#S_b}PV2~5m=>b2UPlc6Lo3WQpw_u#{?F2^ zn8}a%(yhI8BF9utk9vEVWvKjdUckDtj`ShMlKyd5yQZ=@vrK1WF65)sFfI(;e->I*?jWJ9x@CVfjCcLOw$LSv}TI^b8g;sd?)_EySPMH8}g=yO?=z4hZ@F3U!BG%^F$SsGyTR{n@f8=h4omk6;}PJ)tJvZFtEmILu*+_ zzQVK+|5>{V`FCQc1v)LzX@O1)bXuU(0-YAG!s`@9#nSo$c-W zdysx-d;9(#q~l#M9~k^DH27=YF!){AJ|7A6`^%31CQ`lrvfpn)&YX7p{U$VM=kvRe z>i3u3eh;>fr!fXpzrXDGn~>34)YcDw7cQE^Y2)|%P`{nu@51@*{C*c2wDbEtsK4m1 z_V``MY3KL5(4d{)Z$hTszxj>^OLYYc3nN5Md%7Kke$aQ+pVMZqB|_x1r`wT^n=u04 Xjx3zLRG+pueHU3kmQue@MCLyLd^@}X diff --git a/ThirdParty/custom-opm-common/opm-common/tests/EMBEDDED_PYTHON.DATA b/ThirdParty/custom-opm-common/opm-common/tests/EMBEDDED_PYTHON.DATA deleted file mode 100644 index 4e73a873d3..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/EMBEDDED_PYTHON.DATA +++ /dev/null @@ -1,70 +0,0 @@ -RUNSPEC - -DIMENS - 10 10 3 / - - -GRID - -DX - 300*1000 / -DY - 300*1000 / -DZ - 100*20 100*30 100*50 / - -TOPS - 100*8325 / - -PORO - 300*0.3 / - -PERMX - 300*1 / - -PERMY - 300*1 / - -PERMZ - 300*1 / - -SCHEDULE - -PYACTION - WCLOSE UNLIMITED / - 'wclose.py' / - -WELSPECS - 'PROD1' 'G1' 10 10 8400 'OIL' / - 'PROD2' 'G1' 5 5 8400 'OIL' / - 'INJ' 'G1' 1 1 8335 'GAS' / -/ - -COMPDAT - 'PROD1' 10 10 3 3 'OPEN' 1* 1* 0.5 / - 'PROD2' 5 5 3 3 'SHUT' 1* 1* 0.5 / - 'INJ' 1 1 1 1 'OPEN' 1* 1* 0.5 / -/ - - -WCONPROD - 'PROD1' 'OPEN' 'ORAT' 20000 4* 1000 / -/ - -WCONINJE - 'INJ' 'GAS' 'OPEN' 'RATE' 100000 1* 9014 / -/ - -TSTEP -31 28 31 30 31 30 31 31 30 31 30 31 -31 28 31 30 31 30 31 31 30 31 30 31 -31 28 31 30 31 30 31 31 30 31 30 31 -31 28 31 30 31 30 31 31 30 31 30 31 -31 28 31 30 31 30 31 31 30 31 30 31 -31 28 31 30 31 30 31 31 30 31 30 31 -31 28 31 30 31 30 31 31 30 31 30 31 -31 28 31 30 31 30 31 31 30 31 30 31 -31 28 31 30 31 30 31 31 30 31 30 31 -31 28 31 30 31 30 31 31 30 31 30 31 / - -END diff --git a/ThirdParty/custom-opm-common/opm-common/tests/EXIT_TEST.DATA b/ThirdParty/custom-opm-common/opm-common/tests/EXIT_TEST.DATA deleted file mode 100644 index 3810e4de1a..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/EXIT_TEST.DATA +++ /dev/null @@ -1,550 +0,0 @@ --- This reservoir simulation deck is made available under the Open Database --- License: http://opendatacommons.org/licenses/odbl/1.0/. Any rights in --- individual contents of the database are licensed under the Database Contents --- License: http://opendatacommons.org/licenses/dbcl/1.0/ - --- Copyright (C) 2015 Statoil - --- This simulation is based on the data given in --- 'Comparison of Solutions to a Three-Dimensional --- Black-Oil Reservoir Simulation Problem' by Aziz S. Odeh, --- Journal of Petroleum Technology, January 1981 - - ---------------------------------------------------------------------------- ------------------------- SPE1 - CASE 1 ------------------------------------ ---------------------------------------------------------------------------- - -RUNSPEC --- ------------------------------------------------------------------------- - -TITLE - SPE1 - CASE 1 - -DIMENS - 10 10 3 / - --- The number of equilibration regions is inferred from the EQLDIMS --- keyword. -EQLDIMS -/ - --- The number of PVTW tables is inferred from the TABDIMS keyword; --- when no data is included in the keyword the default values are used. -TABDIMS -/ - -OIL -GAS -WATER -DISGAS --- As seen from figure 4 in Odeh, GOR is increasing with time, --- which means that dissolved gas is present - -FIELD - -START - 1 'DEC' 2014 / - -WELLDIMS --- Item 1: maximum number of wells in the model --- - there are two wells in the problem; injector and producer --- Item 2: maximum number of grid blocks connected to any one well --- - must be one as the wells are located at specific grid blocks --- Item 3: maximum number of groups in the model --- - we are dealing with only one 'group' --- Item 4: maximum number of wells in any one group --- - there must be two wells in a group as there are two wells in total - 5 1 1 2 / - -UNIFOUT - -UDQDIMS - 50 25 0 50 50 0 0 50 0 20 / - -GRID - --- The INIT keyword is used to request an .INIT file. The .INIT file --- is written before the simulation actually starts, and contains grid --- properties and saturation tables as inferred from the input --- deck. There are no other keywords which can be used to configure --- exactly what is written to the .INIT file. -INIT - - --- ------------------------------------------------------------------------- -NOECHO - -DX --- There are in total 300 cells with length 1000ft in x-direction - 300*1000 / -DY --- There are in total 300 cells with length 1000ft in y-direction - 300*1000 / -DZ --- The layers are 20, 30 and 50 ft thick, in each layer there are 100 cells - 100*20 100*30 100*50 / - -TOPS --- The depth of the top of each grid block - 100*8325 / - -PORO --- Constant porosity of 0.3 throughout all 300 grid cells - 300*0.3 / - -PERMX --- The layers have perm. 500mD, 50mD and 200mD, respectively. - 100*500 100*50 100*200 / - -PERMY --- Equal to PERMX - 100*500 100*50 100*200 / - -PERMZ --- Cannot find perm. in z-direction in Odeh's paper --- For the time being, we will assume PERMZ equal to PERMX and PERMY: - 100*500 100*50 100*200 / -ECHO - -PROPS --- ------------------------------------------------------------------------- - -PVTW --- Item 1: pressure reference (psia) --- Item 2: water FVF (rb per bbl or rb per stb) --- Item 3: water compressibility (psi^{-1}) --- Item 4: water viscosity (cp) --- Item 5: water 'viscosibility' (psi^{-1}) - --- Using values from Norne: --- In METRIC units: --- 277.0 1.038 4.67E-5 0.318 0.0 / --- In FIELD units: - 4017.55 1.038 3.22E-6 0.318 0.0 / - -ROCK --- Item 1: reference pressure (psia) --- Item 2: rock compressibility (psi^{-1}) - --- Using values from table 1 in Odeh: - 14.7 3E-6 / - -SWOF --- Column 1: water saturation --- - this has been set to (almost) equally spaced values from 0.12 to 1 --- Column 2: water relative permeability --- - generated from the Corey-type approx. formula --- the coeffisient is set to 10e-5, S_{orw}=0 and S_{wi}=0.12 --- Column 3: oil relative permeability when only oil and water are present --- - we will use the same values as in column 3 in SGOF. --- This is not really correct, but since only the first --- two values are of importance, this does not really matter --- Column 4: water-oil capillary pressure (psi) - -0.12 0 1 0 -0.18 4.64876033057851E-008 1 0 -0.24 0.000000186 0.997 0 -0.3 4.18388429752066E-007 0.98 0 -0.36 7.43801652892562E-007 0.7 0 -0.42 1.16219008264463E-006 0.35 0 -0.48 1.67355371900826E-006 0.2 0 -0.54 2.27789256198347E-006 0.09 0 -0.6 2.97520661157025E-006 0.021 0 -0.66 3.7654958677686E-006 0.01 0 -0.72 4.64876033057851E-006 0.001 0 -0.78 0.000005625 0.0001 0 -0.84 6.69421487603306E-006 0 0 -0.91 8.05914256198347E-006 0 0 -1 0.00001 0 0 / - - -SGOF --- Column 1: gas saturation --- Column 2: gas relative permeability --- Column 3: oil relative permeability when oil, gas and connate water are present --- Column 4: oil-gas capillary pressure (psi) --- - stated to be zero in Odeh's paper - --- Values in column 1-3 are taken from table 3 in Odeh's paper: -0 0 1 0 -0.001 0 1 0 -0.02 0 0.997 0 -0.05 0.005 0.980 0 -0.12 0.025 0.700 0 -0.2 0.075 0.350 0 -0.25 0.125 0.200 0 -0.3 0.190 0.090 0 -0.4 0.410 0.021 0 -0.45 0.60 0.010 0 -0.5 0.72 0.001 0 -0.6 0.87 0.0001 0 -0.7 0.94 0.000 0 -0.85 0.98 0.000 0 -0.88 0.984 0.000 0 / ---1.00 1.0 0.000 0 / --- Warning from Eclipse: first sat. value in SWOF + last sat. value in SGOF --- must not be greater than 1, but Eclipse still runs --- Flow needs the sum to be excactly 1 so I added a row with gas sat. = 0.88 --- The corresponding krg value was estimated by assuming linear rel. between --- gas sat. and krw. between gas sat. 0.85 and 1.00 (the last two values given) - -DENSITY --- Density (lb per ft³) at surface cond. of --- oil, water and gas, respectively (in that order) - --- Using values from Norne: --- In METRIC units: --- 859.5 1033.0 0.854 / --- In FIELD units: - 53.66 64.49 0.0533 / - -PVDG --- Column 1: gas phase pressure (psia) --- Column 2: gas formation volume factor (rb per Mscf) --- - in Odeh's paper the units are said to be given in rb per bbl, --- but this is assumed to be a mistake: FVF-values in Odeh's paper --- are given in rb per scf, not rb per bbl. This will be in --- agreement with conventions --- Column 3: gas viscosity (cP) - --- Using values from lower right table in Odeh's table 2: -14.700 166.666 0.008000 -264.70 12.0930 0.009600 -514.70 6.27400 0.011200 -1014.7 3.19700 0.014000 -2014.7 1.61400 0.018900 -2514.7 1.29400 0.020800 -3014.7 1.08000 0.022800 -4014.7 0.81100 0.026800 -5014.7 0.64900 0.030900 -9014.7 0.38600 0.047000 / - -PVTO --- Column 1: dissolved gas-oil ratio (Mscf per stb) --- Column 2: bubble point pressure (psia) --- Column 3: oil FVF for saturated oil (rb per stb) --- Column 4: oil viscosity for saturated oil (cP) - --- Use values from top left table in Odeh's table 2: -0.0010 14.7 1.0620 1.0400 / -0.0905 264.7 1.1500 0.9750 / -0.1800 514.7 1.2070 0.9100 / -0.3710 1014.7 1.2950 0.8300 / -0.6360 2014.7 1.4350 0.6950 / -0.7750 2514.7 1.5000 0.6410 / -0.9300 3014.7 1.5650 0.5940 / -1.2700 4014.7 1.6950 0.5100 - 9014.7 1.5790 0.7400 / -1.6180 5014.7 1.8270 0.4490 - 9014.7 1.7370 0.6310 / --- It is required to enter data for undersaturated oil for the highest GOR --- (i.e. the last row) in the PVTO table. --- In order to fulfill this requirement, values for oil FVF and viscosity --- at 9014.7psia and GOR=1.618 for undersaturated oil have been approximated: --- It has been assumed that there is a linear relation between the GOR --- and the FVF when keeping the pressure constant at 9014.7psia. --- From Odeh we know that (at 9014.7psia) the FVF is 2.357 at GOR=2.984 --- for saturated oil and that the FVF is 1.579 at GOR=1.27 for undersaturated oil, --- so it is possible to use the assumption described above. --- An equivalent approximation for the viscosity has been used. -/ - -SOLUTION --- ------------------------------------------------------------------------- - -EQUIL --- Item 1: datum depth (ft) --- Item 2: pressure at datum depth (psia) --- - Odeh's table 1 says that initial reservoir pressure is --- 4800 psi at 8400ft, which explains choice of item 1 and 2 --- Item 3: depth of water-oil contact (ft) --- - chosen to be directly under the reservoir --- Item 4: oil-water capillary pressure at the water oil contact (psi) --- - given to be 0 in Odeh's paper --- Item 5: depth of gas-oil contact (ft) --- - chosen to be directly above the reservoir --- Item 6: gas-oil capillary pressure at gas-oil contact (psi) --- - given to be 0 in Odeh's paper --- Item 7: RSVD-table --- Item 8: RVVD-table --- Item 9: Set to 0 as this is the only value supported by OPM - --- Item #: 1 2 3 4 5 6 7 8 9 - 8400 4800 8450 0 8300 0 1 0 0 / - -RSVD --- Dissolved GOR is initially constant with depth through the reservoir. --- The reason is that the initial reservoir pressure given is higher ----than the bubble point presssure of 4014.7psia, meaning that there is no --- free gas initially present. -8300 1.270 -8450 1.270 / - -SUMMARY --- ------------------------------------------------------------------------- - -FOPR - -WGOR -/ -WOPR -/ -WWPR -/ -WWCT -/ - - -FGOR - --- 2a) Pressures of the cell where the injector and producer are located -BPR -1 1 1 / -10 10 3 / -/ - --- 2b) Gas saturation at grid points given in Odeh's paper -BGSAT -1 1 1 / -1 1 2 / -1 1 3 / -10 1 1 / -10 1 2 / -10 1 3 / -10 10 1 / -10 10 2 / -10 10 3 / -/ - --- In order to compare Eclipse with Flow: -WBHP -/ - -WGIR - 'INJ' -/ - -WGIT - 'INJ' -/ - -WGPR -/ - -WGPT -/ - -WOPR -/ - -WOPT -/ - -WWIR -/ -WWIT -/ -WWPR -/ -WWPT -/ -WUBHP -/ -WUOPRL -/ -WUWCT -/ - -FOPR - -FUOPR - - -SCHEDULE --- ------------------------------------------------------------------------- -RPTSCHED - 'PRES' 'SGAS' 'RS' 'WELLS' 'WELSPECS' / - -RPTRST - 'BASIC=1' / - -UDQ - ASSIGN WUBHP 11 / - ASSIGN WUOPRL 20 / - ASSIGN WUBHP P2 12 / - ASSIGN WUBHP P3 13 / - ASSIGN WUBHP P4 14 / - UNITS WUBHP 'BARSA' / - UNITS WUOPRL 'SM3/DAY' / - DEFINE WUWCT WWPR / (WWPR + WOPR) / - UNITS WUWCT '1' / - DEFINE FUOPR SUM(WOPR) / - UNITS FUOPR 'SM3/DAY' / -/ - - - --- If no resolution (i.e. case 1), the two following lines must be added: -DRSDT - 0 / --- if DRSDT is set to 0, GOR cannot rise and free gas does not --- dissolve in undersaturated oil -> constant bubble point pressure - -WELSPECS --- Item #: 1 2 3 4 5 6 - 'P1' 'G1' 3 3 8400 'OIL' / - 'P2' 'G1' 4 4 8400 'OIL' / - 'P3' 'G1' 5 5 8400 'OIL' / - 'P4' 'G1' 6 6 8400 'OIL' / - 'INJ' 'G1' 1 1 8335 'GAS' / -/ --- Coordinates in item 3-4 are retrieved from Odeh's figure 1 and 2 --- Note that the depth at the midpoint of the well grid blocks --- has been used as reference depth for bottom hole pressure in item 5 - -COMPDAT --- Item #: 1 2 3 4 5 6 7 8 9 - 'P1' 3 3 3 3 'OPEN' 1* 1* 0.5 / - 'P2' 4 4 3 3 'OPEN' 1* 1* 0.5 / - 'P3' 5 5 3 3 'OPEN' 1* 1* 0.5 / - 'P4' 6 6 3 3 'OPEN' 1* 1* 0.5 / - 'INJ' 1 1 1 1 'OPEN' 1* 1* 0.5 / -/ --- Coordinates in item 2-5 are retreived from Odeh's figure 1 and 2 --- Item 9 is the well bore internal diameter, --- the radius is given to be 0.25ft in Odeh's paper - - -ACTIONX - 'SHUT_WELL' 100000 / - WWCT * > 0.50 / -/ - -EXIT - 99 / - - -ENDACTIO - - -WCONPROD --- Item #:1 2 3 4 5 9 - 'P1' 'OPEN' 'ORAT' 5000 4* 1000 / - 'P2' 'OPEN' 'ORAT' 5000 4* 1000 / - 'P3' 'OPEN' 'ORAT' 5000 4* 1000 / - 'P4' 'OPEN' 'ORAT' 5000 4* 1000 / -/ - --- It is stated in Odeh's paper that the maximum oil prod. rate --- is 20 000stb per day which explains the choice of value in item 4. --- The items > 4 are defaulted with the exception of item 9, --- the BHP lower limit, which is given to be 1000psia in Odeh's paper - -WCONINJE --- Item #:1 2 3 4 5 6 7 - 'INJ' 'GAS' 'OPEN' 'RATE' 100000 1* 9014 / -/ --- Stated in Odeh that gas inj. rate (item 5) is 100MMscf per day --- BHP upper limit (item 7) should not be exceeding the highest --- pressure in the PVT table=9014.7psia (default is 100 000psia) - -DATES - 1 'JAN' 2015 / -/ - -DATES - 1 'FEB' 2015 / -/ - -DATES - 1 'MAR' 2015 / -/ - -DATES - 1 'APR' 2015 / -/ - -DATES - 1 'MAI' 2015 / -/ - -DATES - 1 'JUN' 2015 / -/ - -DATES - 1 'JUL' 2015 / -/ - -DATES - 1 'AUG' 2015 / -/ - -DATES - 1 'SEP' 2015 / -/ - -DATES - 1 'OCT' 2015 / -/ - -DATES - 1 'NOV' 2015 / -/ - -DATES - 1 'DEC' 2015 / -/ - -DATES - 1 'JAN' 2016 / -/ - -DATES - 1 'FEB' 2016 / -/ - -DATES - 1 'MAR' 2016 / -/ - -DATES - 1 'APR' 2016 / -/ - -DATES - 1 'MAI' 2016 / -/ - -DATES - 1 'JUN' 2016 / -/ - -DATES - 1 'JUL' 2016 / -/ - -DATES - 1 'AUG' 2016 / -/ - -DATES - 1 'SEP' 2016 / -/ - -DATES - 1 'OCT' 2016 / -/ - -DATES - 1 'NOV' 2016 / -/ - -DATES - 1 'DEC' 2016 / -/ - - -END - diff --git a/ThirdParty/custom-opm-common/opm-common/tests/FIRST_SIM_THPRES.DATA b/ThirdParty/custom-opm-common/opm-common/tests/FIRST_SIM_THPRES.DATA deleted file mode 100644 index a8159bbba3..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/FIRST_SIM_THPRES.DATA +++ /dev/null @@ -1,166 +0,0 @@ -RUNSPEC - -EQLOPTS - 'THPRES' / - -OIL -GAS -WATER -DISGAS -VAPOIL -UNIFOUT -UNIFIN -DIMENS - 10 10 10 / - -WELLDIMS --- Item 1: NWMAX (Maximum number of wells in model) --- Item 2: NCWMAX (Maximum number of connections per well) --- Item 3: NGMAX (Maximum number of groups in model--excluding FIELD) --- Item 4: NWGMAX (Maximum number of wells or child groups per group) --- NWMAX NCWMAX NGMAX NWGMAX - 6 3 1 6 -/ - -EQLDIMS - 10 / - -GRID -DXV -10*0.25 / -DYV -10*0.25 / -DZV -10*0.25 / -TOPS -100*0.25 / - -PORO -1000*0.2 / - -PROPS - -REGIONS - -EQLNUM - 100*1 - 100*2 - 100*3 - 100*4 - 100*5 - 100*6 - 100*7 - 100*8 - 100*9 - 100*10 -/ - -SOLUTION -THPRES -1 1 0.1 / -1 2 0.2 / -1 3 0.3 / -1 4 0.4 / -1 5 0.5 / -1 6 0.6 / -1 7 0.7 / -1 8 0.8 / -1 9 0.9 / -1 10 1.0 / --- Default pressures -2 2 / -/ - -START -- 0 -1 NOV 1979 / - -SCHEDULE -SKIPREST -RPTRST -BASIC=1 -/ -WELSPECS - 'OP_1' 'OP' 9 9 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / - 'OP_2' 'OP' 9 9 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / -/ -COMPDAT - 'OP_1' 9 9 1 1 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / - 'OP_2' 9 9 2 2 'OPEN' 1* 46.825 0.311 4332.346 1* 1* 'X' 22.123 / - 'OP_1' 9 9 3 3 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / -/ -WCONPROD - 'OP_1' 'OPEN' 'ORAT' 20000 4* 1000 / -/ -WCONINJE - 'OP_2' 'GAS' 'OPEN' 'RATE' 100 200 400 / -/ - -DATES -- 1 - 20 JAN 2011 / -/ -WELSPECS - 'OP_3' 'OP' 9 9 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / -/ -COMPDAT - 'OP_3' 9 9 1 1 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / -/ -WCONPROD - 'OP_3' 'OPEN' 'ORAT' 20000 4* 1000 / -/ - -DATES -- 2 - 15 JUN 2013 / -/ -COMPDAT - 'OP_2' 9 9 3 9 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / - 'OP_1' 9 9 7 7 'SHUT' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / -/ - -DATES -- 3 - 22 APR 2014 / -/ -WELSPECS - 'OP_4' 'OP' 9 9 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / -/ -COMPDAT - 'OP_4' 9 9 3 9 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / - 'OP_3' 9 9 3 9 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / -/ -WCONPROD - 'OP_4' 'OPEN' 'ORAT' 20000 4* 1000 / -/ - -DATES -- 4 - 30 AUG 2014 / -/ -WELSPECS - 'OP_5' 'OP' 9 9 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / -/ -COMPDAT - 'OP_5' 9 9 3 9 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / -/ -WCONPROD - 'OP_5' 'OPEN' 'ORAT' 20000 4* 1000 / -/ - -DATES -- 5 - 15 SEP 2014 / -/ -WCONPROD - 'OP_3' 'SHUT' 'ORAT' 20000 4* 1000 / -/ - -DATES -- 6 - 9 OCT 2014 / -/ -WELSPECS - 'OP_6' 'OP' 9 9 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / -/ -COMPDAT - 'OP_6' 9 9 3 9 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / -/ -WCONPROD - 'OP_6' 'OPEN' 'ORAT' 20000 4* 1000 / -/ -TSTEP -- 7 -10 / diff --git a/ThirdParty/custom-opm-common/opm-common/tests/MODEL2_RESTART.DATA b/ThirdParty/custom-opm-common/opm-common/tests/MODEL2_RESTART.DATA deleted file mode 100644 index 060da3f439..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/MODEL2_RESTART.DATA +++ /dev/null @@ -1,28892 +0,0 @@ -RUNSPEC - - -DIMENS - 13 22 11 / - - -OIL - - -WATER - - -GAS - - -DISGAS - - -VAPOIL - - -METRIC - - -START - 1 'NOV' 2018 / - - -GRIDOPTS - 'YES' 0 / - - -EQLDIMS - 2 100 25 / - - -EQLOPTS - 'THPRES' / - - -REGDIMS - 2 1 1* 2 / - - -WELLDIMS - 10 15 3 10 / - - -TABDIMS - 10 1 50 60 2 60 / - - -VFPPDIMS - 40 20 20 20 0 60 / - - -FAULTDIM - 120 / - - -UNIFIN - - -UNIFOUT - - -GRID - - -NEWTRAN - - -GRIDFILE - 0 1 / - - -GRIDUNIT - 'METRES' / - - -INIT - - -SPECGRID - 13 22 11 1 'F' / - - -COORD - 2000 2000 2537 1999.651 2000.0873 2639.4337 2099.9391 2000 2540.4899 2099.5901 2000.0873 2642.9236 2199.8782 2000 2546.9799 2199.5292 - 2000.0873 2649.4136 2299.8172 2000 2550.4698 2299.4683 2000.0873 2652.9035 2399.7563 2000 2553.9598 2399.4073 2000.0873 2656.3935 2499.6954 2000 - 2557.4497 2499.3464 2000.0873 2659.8834 2599.6345 2000 2560.9397 2599.2855 2000.0873 2663.3734 2699.5736 2000 2564.4296 2699.2246 2000.0873 2666.8633 - 2799.5127 2000 2567.9196 2799.1637 2000.0873 2670.3533 2899.4517 2000 2571.4095 2899.1027 2000.0873 2673.8432 2999.3908 2000 2574.8995 2999.0418 - 2000.0873 2677.3332 3099.3299 2000 2578.3894 3098.9809 2000.0873 2680.8231 3199.269 2000 2581.8794 3198.92 2000.0873 2684.3131 3299.2081 2000 - 2585.3693 3298.8591 2000.0873 2687.803 2000 2099.9962 2536.1273 1999.651 2100.0835 2638.561 2099.9391 2099.9962 2539.6173 2099.5901 2100.0835 2642.051 - 2199.8782 2099.9962 2546.1072 2199.5292 2100.0835 2648.5409 2299.8172 2099.9962 2549.5972 2299.4683 2100.0835 2652.0309 2399.7563 2099.9962 2553.0871 2399.4073 - 2100.0835 2655.5208 2499.6954 2099.9962 2556.5771 2499.3464 2100.0835 2659.0108 2599.6345 2099.9962 2560.067 2599.2855 2100.0835 2662.5007 2699.5736 2099.9962 - 2563.557 2699.2246 2100.0835 2665.9907 2799.5127 2099.9962 2567.0469 2799.1637 2100.0835 2669.4806 2899.4517 2099.9962 2570.5369 2899.1027 2100.0835 2672.9706 - 2999.3908 2099.9962 2574.0268 2999.0418 2100.0835 2676.4605 3099.3299 2099.9962 2577.5168 3098.9809 2100.0835 2679.9504 3199.269 2099.9962 2581.0067 3198.92 - 2100.0835 2683.4404 3299.2081 2099.9962 2584.4967 3298.8591 2100.0835 2686.9303 2000 2199.9924 2535.2547 1999.651 2200.0796 2637.6883 2099.9391 2199.9924 - 2538.7446 2099.5901 2200.0796 2641.1783 2199.8782 2199.9924 2545.2346 2199.5292 2200.0796 2647.6682 2299.8172 2199.9924 2548.7245 2299.4683 2200.0796 2651.1582 - 2399.7563 2199.9924 2552.2145 2399.4073 2200.0796 2654.6481 2499.6954 2199.9924 2555.7044 2499.3464 2200.0796 2658.1381 2599.6345 2199.9924 2559.1944 2599.2855 - 2200.0796 2661.628 2699.5736 2199.9924 2562.6843 2699.2246 2200.0796 2665.118 2799.5127 2199.9924 2566.1743 2799.1637 2200.0796 2668.6079 2899.4517 2199.9924 - 2569.6642 2899.1027 2200.0796 2672.0979 2999.3908 2199.9924 2573.1542 2999.0418 2200.0796 2675.5878 3099.3299 2199.9924 2576.6441 3098.9809 2200.0796 2679.0778 - 3199.269 2199.9924 2580.1341 3198.92 2200.0796 2682.5677 3299.2081 2199.9924 2583.624 3298.8591 2200.0796 2686.0577 2000 2299.9886 2534.382 1999.651 - 2300.0758 2636.8157 2099.9391 2299.9886 2537.872 2099.5901 2300.0758 2640.3056 2199.8782 2299.9886 2544.3619 2199.5292 2300.0758 2646.7956 2299.8172 2299.9886 - 2547.8519 2299.4683 2300.0758 2650.2855 2399.7563 2299.9886 2551.3418 2399.4073 2300.0758 2653.7755 2499.6954 2299.9886 2554.8318 2499.3464 2300.0758 2657.2654 - 2599.6345 2299.9886 2558.3217 2599.2855 2300.0758 2660.7554 2699.5736 2299.9886 2561.8117 2699.2246 2300.0758 2664.2453 2799.5127 2299.9886 2565.3016 2799.1637 - 2300.0758 2667.7353 2899.4517 2299.9886 2568.7916 2899.1027 2300.0758 2671.2252 2999.3908 2299.9886 2572.2815 2999.0418 2300.0758 2674.7152 3099.3299 2299.9886 - 2575.7715 3098.9809 2300.0758 2678.2051 3199.269 2299.9886 2579.2614 3198.92 2300.0758 2681.6951 3299.2081 2299.9886 2582.7514 3298.8591 2300.0758 2685.185 - 2000 2399.9848 2533.5094 1999.651 2400.072 2635.943 2099.9391 2399.9848 2536.9993 2099.5901 2400.072 2639.433 2199.8782 2399.9848 2540.4893 2199.5292 - 2400.072 2642.9229 2299.8172 2399.9848 2546.9792 2299.4683 2400.072 2649.4129 2399.7563 2399.9848 2550.4692 2399.4073 2400.072 2652.9028 2499.6954 2399.9848 - 2553.9591 2499.3464 2400.072 2656.3928 2599.6345 2399.9848 2557.4491 2599.2855 2400.072 2659.8827 2699.5736 2399.9848 2560.939 2699.2246 2400.072 2663.3727 - 2799.5127 2399.9848 2564.429 2799.1637 2400.072 2666.8626 2899.4517 2399.9848 2567.9189 2899.1027 2400.072 2670.3526 2999.3908 2399.9848 2571.4089 2999.0418 - 2400.072 2673.8425 3099.3299 2399.9848 2574.8988 3098.9809 2400.072 2677.3325 3199.269 2399.9848 2578.3888 3198.92 2400.072 2680.8224 3299.2081 2399.9848 - 2581.8787 3298.8591 2400.072 2684.3124 2000 2499.981 2532.6367 1999.651 2500.0682 2635.0704 2099.9391 2499.981 2536.1267 2099.5901 2500.0682 2638.5603 - 2199.8782 2499.981 2539.6166 2199.5292 2500.0682 2642.0503 2299.8172 2499.981 2546.1066 2299.4683 2500.0682 2648.5402 2399.7563 2499.981 2549.5965 2399.4073 - 2500.0682 2652.0302 2499.6954 2499.981 2553.0865 2499.3464 2500.0682 2655.5201 2599.6345 2499.981 2556.5764 2599.2855 2500.0682 2659.0101 2699.5736 2499.981 - 2560.0664 2699.2246 2500.0682 2662.5 2799.5127 2499.981 2563.5563 2799.1637 2500.0682 2665.99 2899.4517 2499.981 2567.0463 2899.1027 2500.0682 2669.4799 - 2999.3908 2499.981 2570.5362 2999.0418 2500.0682 2672.9699 3099.3299 2499.981 2574.0262 3098.9809 2500.0682 2676.4598 3199.269 2499.981 2577.5161 3198.92 - 2500.0682 2679.9498 3299.2081 2499.981 2581.0061 3298.8591 2500.0682 2683.4397 2000 2599.9772 2531.7641 1999.651 2600.0644 2634.1977 2099.9391 2599.9772 - 2535.254 2099.5901 2600.0644 2637.6877 2199.8782 2599.9772 2538.744 2199.5292 2600.0644 2641.1776 2299.8172 2599.9772 2545.2339 2299.4683 2600.0644 2647.6676 - 2399.7563 2599.9772 2548.7239 2399.4073 2600.0644 2651.1575 2499.6954 2599.9772 2552.2138 2499.3464 2600.0644 2654.6475 2599.6345 2599.9772 2555.7038 2599.2855 - 2600.0644 2658.1374 2699.5736 2599.9772 2559.1937 2699.2246 2600.0644 2661.6274 2799.5127 2599.9772 2562.6837 2799.1637 2600.0644 2665.1173 2899.4517 2599.9772 - 2566.1736 2899.1027 2600.0644 2668.6073 2999.3908 2599.9772 2569.6636 2999.0418 2600.0644 2672.0972 3099.3299 2599.9772 2573.1535 3098.9809 2600.0644 2675.5872 - 3199.269 2599.9772 2576.6435 3198.92 2600.0644 2679.0771 3299.2081 2599.9772 2580.1334 3298.8591 2600.0644 2682.5671 2000 2699.9733 2530.8914 1999.651 - 2700.0606 2633.3251 2099.9391 2699.9733 2534.3814 2099.5901 2700.0606 2636.815 2199.8782 2699.9733 2537.8713 2199.5292 2700.0606 2640.305 2299.8172 2699.9733 - 2544.3613 2299.4683 2700.0606 2646.7949 2399.7563 2699.9733 2547.8512 2399.4073 2700.0606 2650.2849 2499.6954 2699.9733 2551.3412 2499.3464 2700.0606 2653.7748 - 2599.6345 2699.9733 2554.8311 2599.2855 2700.0606 2657.2648 2699.5736 2699.9733 2558.3211 2699.2246 2700.0606 2660.7547 2799.5127 2699.9733 2561.811 2799.1637 - 2700.0606 2664.2447 2899.4517 2699.9733 2565.301 2899.1027 2700.0606 2667.7346 2999.3908 2699.9733 2568.7909 2999.0418 2700.0606 2671.2246 3099.3299 2699.9733 - 2572.2809 3098.9809 2700.0606 2674.7145 3199.269 2699.9733 2575.7708 3198.92 2700.0606 2678.2045 3299.2081 2699.9733 2579.2608 3298.8591 2700.0606 2681.6944 - 2000 2799.9695 2533.0188 1999.651 2800.0568 2635.4524 2099.9391 2799.9695 2536.5087 2099.5901 2800.0568 2638.9424 2199.8782 2799.9695 2539.9987 2199.5292 - 2800.0568 2642.4323 2299.8172 2799.9695 2543.4886 2299.4683 2800.0568 2645.9223 2399.7563 2799.9695 2546.9786 2399.4073 2800.0568 2649.4122 2499.6954 2799.9695 - 2550.4685 2499.3464 2800.0568 2652.9022 2599.6345 2799.9695 2553.9585 2599.2855 2800.0568 2656.3921 2699.5736 2799.9695 2557.4484 2699.2246 2800.0568 2659.8821 - 2799.5127 2799.9695 2560.9384 2799.1637 2800.0568 2663.372 2899.4517 2799.9695 2564.4283 2899.1027 2800.0568 2666.862 2999.3908 2799.9695 2567.9183 2999.0418 - 2800.0568 2670.3519 3099.3299 2799.9695 2571.4082 3098.9809 2800.0568 2673.8419 3199.269 2799.9695 2574.8982 3198.92 2800.0568 2677.3318 3299.2081 2799.9695 - 2578.3881 3298.8591 2800.0568 2680.8218 2000 2899.9657 2532.1461 1999.651 2900.053 2634.5798 2099.9391 2899.9657 2535.6361 2099.5901 2900.053 2638.0697 - 2199.8782 2899.9657 2539.126 2199.5292 2900.053 2641.5597 2299.8172 2899.9657 2542.616 2299.4683 2900.053 2645.0496 2399.7563 2899.9657 2546.1059 2399.4073 - 2900.053 2648.5396 2499.6954 2899.9657 2549.5959 2499.3464 2900.053 2652.0295 2599.6345 2899.9657 2553.0858 2599.2855 2900.053 2655.5195 2699.5736 2899.9657 - 2556.5758 2699.2246 2900.053 2659.0094 2799.5127 2899.9657 2560.0657 2799.1637 2900.053 2662.4994 2899.4517 2899.9657 2563.5557 2899.1027 2900.053 2665.9893 - 2999.3908 2899.9657 2567.0456 2999.0418 2900.053 2669.4793 3099.3299 2899.9657 2570.5356 3098.9809 2900.053 2672.9692 3199.269 2899.9657 2574.0255 3198.92 - 2900.053 2676.4592 3299.2081 2899.9657 2577.5155 3298.8591 2900.053 2679.9491 2000 2999.9619 2531.2735 1999.651 3000.0492 2633.7071 2099.9391 2999.9619 - 2534.7634 2099.5901 3000.0492 2637.1971 2199.8782 2999.9619 2538.2534 2199.5292 3000.0492 2640.687 2299.8172 2999.9619 2541.7433 2299.4683 3000.0492 2644.177 - 2399.7563 2999.9619 2545.2333 2399.4073 3000.0492 2647.6669 2499.6954 2999.9619 2548.7232 2499.3464 3000.0492 2651.1569 2599.6345 2999.9619 2552.2132 2599.2855 - 3000.0492 2654.6468 2699.5736 2999.9619 2555.7031 2699.2246 3000.0492 2658.1368 2799.5127 2999.9619 2559.1931 2799.1637 3000.0492 2661.6267 2899.4517 2999.9619 - 2562.683 2899.1027 3000.0492 2665.1167 2999.3908 2999.9619 2566.173 2999.0418 3000.0492 2668.6066 3099.3299 2999.9619 2569.6629 3098.9809 3000.0492 2672.0966 - 3199.269 2999.9619 2573.1529 3198.92 3000.0492 2675.5865 3299.2081 2999.9619 2576.6428 3298.8591 3000.0492 2679.0765 2000 3099.9581 2529.5675 1999.651 - 3100.0454 2632.0011 2099.9391 3099.9581 2533.0574 2099.5901 3100.0454 2635.4911 2199.8782 3099.9581 2536.5474 2199.5292 3100.0454 2638.981 2299.8172 3099.9581 - 2540.8707 2299.4683 3100.0454 2643.3043 2399.7563 3099.9581 2544.3606 2399.4073 3100.0454 2646.7943 2499.6954 3099.9581 2547.8506 2499.3464 3100.0454 2650.2842 - 2599.6345 3099.9581 2551.3405 2599.2855 3100.0454 2653.7742 2699.5736 3099.9581 2554.8305 2699.2246 3100.0454 2657.2641 2799.5127 3099.9581 2558.3204 2799.1637 - 3100.0454 2660.7541 2899.4517 3099.9581 2561.8104 2899.1027 3100.0454 2664.244 2999.3908 3099.9581 2565.3003 2999.0418 3100.0454 2667.734 3099.3299 3099.9581 - 2568.7903 3098.9809 3100.0454 2671.2239 3199.269 3099.9581 2572.2802 3198.92 3100.0454 2674.7139 3299.2081 3099.9581 2575.7702 3298.8591 3100.0454 2678.2038 - 2000 3199.9543 2527.8615 1999.651 3200.0416 2630.2951 2099.9391 3199.9543 2531.3514 2099.5901 3200.0416 2633.7851 2199.8782 3199.9543 2534.8414 2199.5292 - 3200.0416 2637.275 2299.8172 3199.9543 2539.998 2299.4683 3200.0416 2642.4317 2399.7563 3199.9543 2543.488 2399.4073 3200.0416 2645.9216 2499.6954 3199.9543 - 2546.9779 2499.3464 3200.0416 2649.4116 2599.6345 3199.9543 2550.4679 2599.2855 3200.0416 2652.9015 2699.5736 3199.9543 2553.9578 2699.2246 3200.0416 2656.3915 - 2799.5127 3199.9543 2557.4478 2799.1637 3200.0416 2659.8814 2899.4517 3199.9543 2560.9377 2899.1027 3200.0416 2663.3714 2999.3908 3199.9543 2564.4277 2999.0418 - 3200.0416 2666.8613 3099.3299 3199.9543 2567.9176 3098.9809 3200.0416 2670.3513 3199.269 3199.9543 2571.4076 3198.92 3200.0416 2673.8412 3299.2081 3199.9543 - 2574.8975 3298.8591 3200.0416 2677.3312 2000 3299.9505 2526.1555 1999.651 3300.0378 2628.5892 2099.9391 3299.9505 2529.6455 2099.5901 3300.0378 2632.0791 - 2199.8782 3299.9505 2533.1354 2199.5292 3300.0378 2635.5691 2299.8172 3299.9505 2539.1254 2299.4683 3300.0378 2641.559 2399.7563 3299.9505 2542.6153 2399.4073 - 3300.0378 2645.049 2499.6954 3299.9505 2546.1053 2499.3464 3300.0378 2648.5389 2599.6345 3299.9505 2549.5952 2599.2855 3300.0378 2652.0289 2699.5736 3299.9505 - 2553.0852 2699.2246 3300.0378 2655.5188 2799.5127 3299.9505 2556.5751 2799.1637 3300.0378 2659.0088 2899.4517 3299.9505 2563.5651 2899.1027 3300.0378 2665.9987 - 2999.3908 3299.9505 2567.055 2999.0418 3300.0378 2669.4887 3099.3299 3299.9505 2570.545 3098.9809 3300.0378 2672.9786 3199.269 3299.9505 2574.0349 3198.92 - 3300.0378 2676.4686 3299.2081 3299.9505 2577.5248 3298.8591 3300.0378 2679.9585 2000 3399.9467 2524.4495 1999.651 3400.034 2626.8832 2099.9391 3399.9467 - 2527.9395 2099.5901 3400.034 2630.3731 2199.8782 3399.9467 2531.4294 2199.5292 3400.034 2633.8631 2299.8172 3399.9467 2538.2527 2299.4683 3400.034 2640.6864 - 2399.7563 3399.9467 2541.7426 2399.4073 3400.034 2644.1763 2499.6954 3399.9467 2545.2326 2499.3464 3400.034 2647.6663 2599.6345 3399.9467 2548.7225 2599.2855 - 3400.034 2651.1562 2699.5736 3399.9467 2552.2125 2699.2246 3400.034 2654.6462 2799.5127 3399.9467 2555.7024 2799.1637 3400.034 2658.1361 2899.4517 3399.9467 - 2566.1924 2899.1027 3400.034 2668.6261 2999.3908 3399.9467 2569.6823 2999.0418 3400.034 2672.116 3099.3299 3399.9467 2573.1723 3098.9809 3400.034 2675.606 - 3199.269 3399.9467 2576.6622 3198.92 3400.034 2679.0959 3299.2081 3399.9467 2580.1522 3298.8591 3400.034 2682.5859 2000 3499.9429 2517.7435 1999.651 - 3500.0301 2620.1772 2099.9391 3499.9429 2521.2335 2099.5901 3500.0301 2623.6671 2199.8782 3499.9429 2529.7234 2199.5292 3500.0301 2632.1571 2299.8172 3499.9429 - 2537.38 2299.4683 3500.0301 2639.8137 2399.7563 3499.9429 2540.87 2399.4073 3500.0301 2643.3037 2499.6954 3499.9429 2544.3599 2499.3464 3500.0301 2646.7936 - 2599.6345 3499.9429 2547.8499 2599.2855 3500.0301 2650.2836 2699.5736 3499.9429 2551.3398 2699.2246 3500.0301 2653.7735 2799.5127 3499.9429 2554.8298 2799.1637 - 3500.0301 2657.2635 2899.4517 3499.9429 2568.8197 2899.1027 3500.0301 2671.2534 2999.3908 3499.9429 2572.3097 2999.0418 3500.0301 2674.7434 3099.3299 3499.9429 - 2575.7996 3098.9809 3500.0301 2678.2333 3199.269 3499.9429 2579.2896 3198.92 3500.0301 2681.7232 3299.2081 3499.9429 2582.7795 3298.8591 3500.0301 2685.2132 - 2000 3599.9391 2516.0375 1999.651 3600.0263 2618.4712 2099.9391 3599.9391 2519.5275 2099.5901 3600.0263 2621.9611 2199.8782 3599.9391 2528.0174 2199.5292 - 3600.0263 2630.4511 2299.8172 3599.9391 2536.5074 2299.4683 3600.0263 2638.941 2399.7563 3599.9391 2539.9973 2399.4073 3600.0263 2642.431 2499.6954 3599.9391 - 2543.4873 2499.3464 3600.0263 2645.9209 2599.6345 3599.9391 2546.9772 2599.2855 3600.0263 2649.4109 2699.5736 3599.9391 2550.4672 2699.2246 3600.0263 2652.9008 - 2799.5127 3599.9391 2553.9571 2799.1637 3600.0263 2656.3908 2899.4517 3599.9391 2571.4471 2899.1027 3600.0263 2673.8807 2999.3908 3599.9391 2574.937 2999.0418 - 3600.0263 2677.3707 3099.3299 3599.9391 2578.427 3098.9809 3600.0263 2680.8606 3199.269 3599.9391 2581.9169 3198.92 3600.0263 2684.3506 3299.2081 3599.9391 - 2585.4069 3298.8591 3600.0263 2687.8405 2000 3699.9353 2514.3316 1999.651 3700.0225 2616.7652 2099.9391 3699.9353 2517.8215 2099.5901 3700.0225 2620.2552 - 2199.8782 3699.9353 2526.3115 2199.5292 3700.0225 2628.7451 2299.8172 3699.9353 2535.6347 2299.4683 3700.0225 2638.0684 2399.7563 3699.9353 2539.1247 2399.4073 - 3700.0225 2641.5583 2499.6954 3699.9353 2542.6146 2499.3464 3700.0225 2645.0483 2599.6345 3699.9353 2546.1046 2599.2855 3700.0225 2648.5382 2699.5736 3699.9353 - 2549.5945 2699.2246 3700.0225 2652.0282 2799.5127 3699.9353 2553.0845 2799.1637 3700.0225 2655.5181 2899.4517 3699.9353 2574.0744 2899.1027 3700.0225 2676.5081 - 2999.3908 3699.9353 2577.5644 2999.0418 3700.0225 2679.998 3099.3299 3699.9353 2581.0543 3098.9809 3700.0225 2683.488 3199.269 3699.9353 2584.5443 3198.92 - 3700.0225 2686.9779 3299.2081 3699.9353 2588.0342 3298.8591 3700.0225 2690.4679 2000 3799.9315 2512.6256 1999.651 3800.0187 2615.0592 2099.9391 3799.9315 - 2516.1155 2099.5901 3800.0187 2618.5492 2199.8782 3799.9315 2524.6055 2199.5292 3800.0187 2627.0391 2299.8172 3799.9315 2534.7621 2299.4683 3800.0187 2637.1957 - 2399.7563 3799.9315 2538.252 2399.4073 3800.0187 2640.6857 2499.6954 3799.9315 2541.742 2499.3464 3800.0187 2644.1756 2599.6345 3799.9315 2545.2319 2599.2855 - 3800.0187 2647.6656 2699.5736 3799.9315 2548.7219 2699.2246 3800.0187 2651.1555 2799.5127 3799.9315 2552.2118 2799.1637 3800.0187 2654.6455 2899.4517 3799.9315 - 2576.7018 2899.1027 3800.0187 2679.1354 2999.3908 3799.9315 2580.1917 2999.0418 3800.0187 2682.6254 3099.3299 3799.9315 2583.6817 3098.9809 3800.0187 2686.1153 - 3199.269 3799.9315 2587.1716 3198.92 3800.0187 2689.6053 3299.2081 3799.9315 2590.6616 3298.8591 3800.0187 2693.0952 2000 3899.9277 2510.9196 1999.651 - 3900.0149 2613.3532 2099.9391 3899.9277 2514.4095 2099.5901 3900.0149 2616.8432 2199.8782 3899.9277 2522.8995 2199.5292 3900.0149 2625.3331 2299.8172 3899.9277 - 2533.8894 2299.4683 3900.0149 2636.3231 2399.7563 3899.9277 2537.3794 2399.4073 3900.0149 2639.813 2499.6954 3899.9277 2540.8693 2499.3464 3900.0149 2643.303 - 2599.6345 3899.9277 2544.3593 2599.2855 3900.0149 2646.7929 2699.5736 3899.9277 2547.8492 2699.2246 3900.0149 2650.2829 2799.5127 3899.9277 2551.3392 2799.1637 - 3900.0149 2653.7728 2899.4517 3899.9277 2579.3291 2899.1027 3900.0149 2681.7628 2999.3908 3899.9277 2582.8191 2999.0418 3900.0149 2685.2527 3099.3299 3899.9277 - 2586.309 3098.9809 3900.0149 2688.7427 3199.269 3899.9277 2589.799 3198.92 3900.0149 2692.2326 3299.2081 3899.9277 2593.2889 3298.8591 3900.0149 2695.7226 - 2000 3999.9238 2509.2136 1999.651 4000.0111 2611.6473 2099.9391 3999.9238 2512.7035 2099.5901 4000.0111 2615.1372 2199.8782 3999.9238 2521.1935 2199.5292 - 4000.0111 2623.6272 2299.8172 3999.9238 2533.0168 2299.4683 4000.0111 2635.4504 2399.7563 3999.9238 2536.5067 2399.4073 4000.0111 2638.9404 2499.6954 3999.9238 - 2539.9967 2499.3464 4000.0111 2642.4303 2599.6345 3999.9238 2543.4866 2599.2855 4000.0111 2645.9203 2699.5736 3999.9238 2546.9766 2699.2246 4000.0111 2649.4102 - 2799.5127 3999.9238 2550.4665 2799.1637 4000.0111 2652.9002 2899.4517 3999.9238 2581.9565 2899.1027 4000.0111 2684.3901 2999.3908 3999.9238 2585.4464 2999.0418 - 4000.0111 2687.8801 3099.3299 3999.9238 2588.9364 3098.9809 4000.0111 2691.37 3199.269 3999.9238 2592.4263 3198.92 4000.0111 2694.86 3299.2081 3999.9238 - 2595.9163 3298.8591 4000.0111 2698.3499 2000 4099.92 2507.5076 1999.651 4100.0073 2609.9413 2099.9391 4099.92 2510.9976 2099.5901 4100.0073 2613.4312 - 2199.8782 4099.92 2519.4875 2199.5292 4100.0073 2621.9212 2299.8172 4099.92 2532.1441 2299.4683 4100.0073 2634.5778 2399.7563 4099.92 2535.6341 2399.4073 - 4100.0073 2638.0677 2499.6954 4099.92 2539.124 2499.3464 4100.0073 2641.5577 2599.6345 4099.92 2542.614 2599.2855 4100.0073 2645.0476 2699.5736 4099.92 - 2546.1039 2699.2246 4100.0073 2648.5376 2799.5127 4099.92 2549.5939 2799.1637 4100.0073 2652.0275 2899.4517 4099.92 2584.5838 2899.1027 4100.0073 2687.0175 - 2999.3908 4099.92 2588.0738 2999.0418 4100.0073 2690.5074 3099.3299 4099.92 2591.5637 3098.9809 4100.0073 2693.9974 3199.269 4099.92 2595.0537 3198.92 - 4100.0073 2697.4873 3299.2081 4099.92 2598.5436 3298.8591 4100.0073 2700.9773 2000 4199.9162 2505.8016 1999.651 4200.0035 2608.2353 2099.9391 4199.9162 - 2509.2916 2099.5901 4200.0035 2611.7252 2199.8782 4199.9162 2517.7815 2199.5292 4200.0035 2620.2152 2299.8172 4199.9162 2531.2715 2299.4683 4200.0035 2633.7051 - 2399.7563 4199.9162 2534.7614 2399.4073 4200.0035 2637.1951 2499.6954 4199.9162 2538.2514 2499.3464 4200.0035 2640.685 2599.6345 4199.9162 2541.7413 2599.2855 - 4200.0035 2644.175 2699.5736 4199.9162 2545.2313 2699.2246 4200.0035 2647.6649 2799.5127 4199.9162 2548.7212 2799.1637 4200.0035 2651.1549 2899.4517 4199.9162 - 2587.2112 2899.1027 4200.0035 2689.6448 2999.3908 4199.9162 2590.7011 2999.0418 4200.0035 2693.1348 3099.3299 4199.9162 2594.1911 3098.9809 4200.0035 2696.6247 - 3199.269 4199.9162 2597.681 3198.92 4200.0035 2700.1147 3299.2081 4199.9162 2601.171 3298.8591 4200.0035 2703.6046 / - - -ZCORN - 2537 2540.4899 2540.4899 2543.9799 2546.9799 2550.4698 2550.4698 2553.9598 2553.9598 2557.4497 2557.4497 2560.9397 2560.9397 2564.4296 2564.4296 2567.9196 - 2567.9196 2571.4095 2571.4095 2574.8995 2574.8995 2578.3894 2578.3894 2581.8794 2581.8794 2585.3693 2536.1273 2539.6173 2539.6173 2543.1072 2546.1072 2549.5972 - 2549.5972 2553.0871 2553.0871 2556.5771 2556.5771 2560.067 2560.067 2563.557 2563.557 2567.0469 2567.0469 2570.5369 2570.5369 2574.0268 2574.0268 2577.5168 - 2577.5168 2581.0067 2581.0067 2584.4967 2536.1273 2539.6173 2539.6173 2543.1072 2546.1072 2549.5972 2549.5972 2553.0871 2553.0871 2556.5771 2556.5771 2560.067 - 2560.067 2563.557 2563.557 2567.0469 2567.0469 2570.5369 2570.5369 2574.0268 2574.0268 2577.5168 2577.5168 2581.0067 2581.0067 2584.4967 2535.2547 2538.7446 - 2538.7446 2542.2346 2545.2346 2548.7245 2548.7245 2552.2145 2552.2145 2555.7044 2555.7044 2559.1944 2559.1944 2562.6843 2562.6843 2566.1743 2566.1743 2569.6642 - 2569.6642 2573.1542 2573.1542 2576.6441 2576.6441 2580.1341 2580.1341 2583.624 2535.2547 2538.7446 2538.7446 2542.2346 2545.2346 2548.7245 2548.7245 2552.2145 - 2552.2145 2555.7044 2555.7044 2559.1944 2559.1944 2562.6843 2562.6843 2566.1743 2566.1743 2569.6642 2569.6642 2573.1542 2573.1542 2576.6441 2576.6441 2580.1341 - 2580.1341 2583.624 2534.382 2537.872 2537.872 2541.3619 2544.3619 2547.8519 2547.8519 2551.3418 2551.3418 2554.8318 2554.8318 2558.3217 2558.3217 2561.8117 - 2561.8117 2565.3016 2565.3016 2568.7916 2568.7916 2572.2815 2572.2815 2575.7715 2575.7715 2579.2614 2579.2614 2582.7514 2534.382 2537.872 2537.872 2541.3619 - 2544.3619 2547.8519 2547.8519 2551.3418 2551.3418 2554.8318 2554.8318 2558.3217 2558.3217 2561.8117 2561.8117 2565.3016 2565.3016 2568.7916 2568.7916 2572.2815 - 2572.2815 2575.7715 2575.7715 2579.2614 2579.2614 2582.7514 2533.5094 2536.9993 2536.9993 2540.4893 2543.4893 2546.9792 2546.9792 2550.4692 2550.4692 2553.9591 - 2553.9591 2557.4491 2557.4491 2560.939 2560.939 2564.429 2564.429 2567.9189 2567.9189 2571.4089 2571.4089 2574.8988 2574.8988 2578.3888 2578.3888 2581.8787 - 2533.5094 2536.9993 2536.9993 2540.4893 2540.4893 2543.9792 2546.9792 2550.4692 2550.4692 2553.9591 2553.9591 2557.4491 2557.4491 2560.939 2560.939 2564.429 - 2564.429 2567.9189 2567.9189 2571.4089 2571.4089 2574.8988 2574.8988 2578.3888 2578.3888 2581.8787 2532.6367 2536.1267 2536.1267 2539.6166 2539.6166 2543.1066 - 2546.1066 2549.5965 2549.5965 2553.0865 2553.0865 2556.5764 2556.5764 2560.0664 2560.0664 2563.5563 2563.5563 2567.0463 2567.0463 2570.5362 2570.5362 2574.0262 - 2574.0262 2577.5161 2577.5161 2581.0061 2532.6367 2536.1267 2536.1267 2539.6166 2539.6166 2543.1066 2546.1066 2549.5965 2549.5965 2553.0865 2553.0865 2556.5764 - 2556.5764 2560.0664 2560.0664 2563.5563 2563.5563 2567.0463 2567.0463 2570.5362 2570.5362 2574.0262 2574.0262 2577.5161 2577.5161 2581.0061 2531.7641 2535.254 - 2535.254 2538.744 2538.744 2542.2339 2545.2339 2548.7239 2548.7239 2552.2138 2552.2138 2555.7038 2555.7038 2559.1937 2559.1937 2562.6837 2562.6837 2566.1736 - 2566.1736 2569.6636 2569.6636 2573.1535 2573.1535 2576.6435 2576.6435 2580.1334 2531.7641 2535.254 2535.254 2538.744 2538.744 2542.2339 2545.2339 2548.7239 - 2548.7239 2552.2138 2552.2138 2555.7038 2555.7038 2559.1937 2559.1937 2562.6837 2562.6837 2566.1736 2566.1736 2569.6636 2569.6636 2573.1535 2573.1535 2576.6435 - 2576.6435 2580.1334 2530.8914 2534.3814 2534.3814 2537.8713 2537.8713 2541.3613 2544.3613 2547.8512 2547.8512 2551.3412 2551.3412 2554.8311 2554.8311 2558.3211 - 2558.3211 2561.811 2561.811 2565.301 2565.301 2568.7909 2568.7909 2572.2809 2572.2809 2575.7708 2575.7708 2579.2608 2530.8914 2534.3814 2534.3814 2537.8713 - 2537.8713 2541.3613 2544.3613 2547.8512 2547.8512 2551.3412 2551.3412 2554.8311 2554.8311 2558.3211 2558.3211 2561.811 2561.811 2565.301 2565.301 2568.7909 - 2568.7909 2572.2809 2572.2809 2575.7708 2575.7708 2579.2608 2530.0188 2533.5087 2533.5087 2536.9987 2536.9987 2540.4886 2543.4886 2546.9786 2546.9786 2550.4685 - 2550.4685 2553.9585 2553.9585 2557.4484 2557.4484 2560.9384 2560.9384 2564.4283 2564.4283 2567.9183 2567.9183 2571.4082 2571.4082 2574.8982 2574.8982 2578.3881 - 2533.0188 2536.5087 2536.5087 2539.9987 2539.9987 2543.4886 2543.4886 2546.9786 2546.9786 2550.4685 2550.4685 2553.9585 2553.9585 2557.4484 2557.4484 2560.9384 - 2560.9384 2564.4283 2564.4283 2567.9183 2567.9183 2571.4082 2571.4082 2574.8982 2574.8982 2578.3881 2532.1461 2535.6361 2535.6361 2539.126 2539.126 2542.616 - 2542.616 2546.1059 2546.1059 2549.5959 2549.5959 2553.0858 2553.0858 2556.5758 2556.5758 2560.0657 2560.0657 2563.5557 2563.5557 2567.0456 2567.0456 2570.5356 - 2570.5356 2574.0255 2574.0255 2577.5155 2532.1461 2535.6361 2535.6361 2539.126 2539.126 2542.616 2542.616 2546.1059 2546.1059 2549.5959 2549.5959 2553.0858 - 2553.0858 2556.5758 2556.5758 2560.0657 2560.0657 2563.5557 2563.5557 2567.0456 2567.0456 2570.5356 2570.5356 2574.0255 2574.0255 2577.5155 2531.2735 2534.7634 - 2534.7634 2538.2534 2538.2534 2541.7433 2541.7433 2545.2333 2545.2333 2548.7232 2548.7232 2552.2132 2552.2132 2555.7031 2555.7031 2559.1931 2559.1931 2562.683 - 2562.683 2566.173 2566.173 2569.6629 2569.6629 2573.1529 2573.1529 2576.6428 2531.2735 2534.7634 2534.7634 2538.2534 2538.2534 2541.7433 2541.7433 2545.2333 - 2545.2333 2548.7232 2548.7232 2552.2132 2552.2132 2555.7031 2555.7031 2559.1931 2559.1931 2562.683 2562.683 2566.173 2566.173 2569.6629 2569.6629 2573.1529 - 2573.1529 2576.6428 2529.5675 2533.0574 2533.0574 2536.5474 2536.5474 2540.0373 2540.8707 2544.3606 2544.3606 2547.8506 2547.8506 2551.3405 2551.3405 2554.8305 - 2554.8305 2558.3204 2558.3204 2561.8104 2561.8104 2565.3003 2565.3003 2568.7903 2568.7903 2572.2802 2572.2802 2575.7702 2529.5675 2533.0574 2533.0574 2536.5474 - 2536.5474 2540.0373 2540.8707 2544.3606 2544.3606 2547.8506 2547.8506 2551.3405 2551.3405 2554.8305 2554.8305 2558.3204 2558.3204 2561.8104 2561.8104 2565.3003 - 2565.3003 2568.7903 2568.7903 2572.2802 2572.2802 2575.7702 2527.8615 2531.3514 2531.3514 2534.8414 2534.8414 2538.3313 2539.998 2543.488 2543.488 2546.9779 - 2546.9779 2550.4679 2550.4679 2553.9578 2553.9578 2557.4478 2557.4478 2560.9377 2560.9377 2564.4277 2564.4277 2567.9176 2567.9176 2571.4076 2571.4076 2574.8975 - 2527.8615 2531.3514 2531.3514 2534.8414 2534.8414 2538.3313 2539.998 2543.488 2543.488 2546.9779 2546.9779 2550.4679 2550.4679 2553.9578 2553.9578 2557.4478 - 2557.4478 2560.9377 2560.9377 2564.4277 2564.4277 2567.9176 2567.9176 2571.4076 2571.4076 2574.8975 2526.1555 2529.6455 2529.6455 2533.1354 2533.1354 2536.6254 - 2539.1254 2542.6153 2542.6153 2546.1053 2546.1053 2549.5952 2549.5952 2553.0852 2553.0852 2556.5751 2556.5751 2560.0651 2563.5651 2567.055 2567.055 2570.545 - 2570.545 2574.0349 2574.0349 2577.5248 2526.1555 2529.6455 2529.6455 2533.1354 2533.1354 2536.6254 2539.1254 2542.6153 2542.6153 2546.1053 2546.1053 2549.5952 - 2549.5952 2553.0852 2553.0852 2556.5751 2556.5751 2560.0651 2563.5651 2567.055 2567.055 2570.545 2570.545 2574.0349 2574.0349 2577.5248 2524.4495 2527.9395 - 2527.9395 2531.4294 2531.4294 2534.9194 2538.2527 2541.7426 2541.7426 2545.2326 2545.2326 2548.7225 2548.7225 2552.2125 2552.2125 2555.7024 2555.7024 2559.1924 - 2566.1924 2569.6823 2569.6823 2573.1723 2573.1723 2576.6622 2576.6622 2580.1522 2524.4495 2527.9395 2527.9395 2531.4294 2531.4294 2534.9194 2538.2527 2541.7426 - 2541.7426 2545.2326 2545.2326 2548.7225 2548.7225 2552.2125 2552.2125 2555.7024 2555.7024 2559.1924 2566.1924 2569.6823 2569.6823 2573.1723 2573.1723 2576.6622 - 2576.6622 2580.1522 2522.7435 2526.2335 2526.2335 2529.7234 2529.7234 2533.2134 2537.38 2540.87 2540.87 2544.3599 2544.3599 2547.8499 2547.8499 2551.3398 - 2551.3398 2554.8298 2554.8298 2558.3197 2568.8197 2572.3097 2572.3097 2575.7996 2575.7996 2579.2896 2579.2896 2582.7795 2517.7435 2521.2335 2521.2335 2524.7234 - 2529.7234 2533.2134 2537.38 2540.87 2540.87 2544.3599 2544.3599 2547.8499 2547.8499 2551.3398 2551.3398 2554.8298 2554.8298 2558.3197 2568.8197 2572.3097 - 2572.3097 2575.7996 2575.7996 2579.2896 2579.2896 2582.7795 2516.0375 2519.5275 2519.5275 2523.0174 2528.0174 2531.5074 2536.5074 2539.9973 2539.9973 2543.4873 - 2543.4873 2546.9772 2546.9772 2550.4672 2550.4672 2553.9571 2553.9571 2557.4471 2571.4471 2574.937 2574.937 2578.427 2578.427 2581.9169 2581.9169 2585.4069 - 2516.0375 2519.5275 2519.5275 2523.0174 2528.0174 2531.5074 2536.5074 2539.9973 2539.9973 2543.4873 2543.4873 2546.9772 2546.9772 2550.4672 2550.4672 2553.9571 - 2553.9571 2557.4471 2571.4471 2574.937 2574.937 2578.427 2578.427 2581.9169 2581.9169 2585.4069 2514.3316 2517.8215 2517.8215 2521.3115 2526.3115 2529.8014 - 2535.6347 2539.1247 2539.1247 2542.6146 2542.6146 2546.1046 2546.1046 2549.5945 2549.5945 2553.0845 2553.0845 2556.5744 2574.0744 2577.5644 2577.5644 2581.0543 - 2581.0543 2584.5443 2584.5443 2588.0342 2514.3316 2517.8215 2517.8215 2521.3115 2526.3115 2529.8014 2535.6347 2539.1247 2539.1247 2542.6146 2542.6146 2546.1046 - 2546.1046 2549.5945 2549.5945 2553.0845 2553.0845 2556.5744 2574.0744 2577.5644 2577.5644 2581.0543 2581.0543 2584.5443 2584.5443 2588.0342 2512.6256 2516.1155 - 2516.1155 2519.6055 2524.6055 2528.0954 2534.7621 2538.252 2538.252 2541.742 2541.742 2545.2319 2545.2319 2548.7219 2548.7219 2552.2118 2552.2118 2555.7018 - 2576.7018 2580.1917 2580.1917 2583.6817 2583.6817 2587.1716 2587.1716 2590.6616 2512.6256 2516.1155 2516.1155 2519.6055 2524.6055 2528.0954 2534.7621 2538.252 - 2538.252 2541.742 2541.742 2545.2319 2545.2319 2548.7219 2548.7219 2552.2118 2552.2118 2555.7018 2576.7018 2580.1917 2580.1917 2583.6817 2583.6817 2587.1716 - 2587.1716 2590.6616 2510.9196 2514.4095 2514.4095 2517.8995 2522.8995 2526.3894 2533.8894 2537.3794 2537.3794 2540.8693 2540.8693 2544.3593 2544.3593 2547.8492 - 2547.8492 2551.3392 2551.3392 2554.8291 2579.3291 2582.8191 2582.8191 2586.309 2586.309 2589.799 2589.799 2593.2889 2510.9196 2514.4095 2514.4095 2517.8995 - 2522.8995 2526.3894 2533.8894 2537.3794 2537.3794 2540.8693 2540.8693 2544.3593 2544.3593 2547.8492 2547.8492 2551.3392 2551.3392 2554.8291 2579.3291 2582.8191 - 2582.8191 2586.309 2586.309 2589.799 2589.799 2593.2889 2509.2136 2512.7035 2512.7035 2516.1935 2521.1935 2524.6834 2533.0168 2536.5067 2536.5067 2539.9967 - 2539.9967 2543.4866 2543.4866 2546.9766 2546.9766 2550.4665 2550.4665 2553.9565 2581.9565 2585.4464 2585.4464 2588.9364 2588.9364 2592.4263 2592.4263 2595.9163 - 2509.2136 2512.7035 2512.7035 2516.1935 2521.1935 2524.6834 2533.0168 2536.5067 2536.5067 2539.9967 2539.9967 2543.4866 2543.4866 2546.9766 2546.9766 2550.4665 - 2550.4665 2553.9565 2581.9565 2585.4464 2585.4464 2588.9364 2588.9364 2592.4263 2592.4263 2595.9163 2507.5076 2510.9976 2510.9976 2514.4875 2519.4875 2522.9775 - 2532.1441 2535.6341 2535.6341 2539.124 2539.124 2542.614 2542.614 2546.1039 2546.1039 2549.5939 2549.5939 2553.0838 2584.5838 2588.0738 2588.0738 2591.5637 - 2591.5637 2595.0537 2595.0537 2598.5436 2507.5076 2510.9976 2510.9976 2514.4875 2519.4875 2522.9775 2532.1441 2535.6341 2535.6341 2539.124 2539.124 2542.614 - 2542.614 2546.1039 2546.1039 2549.5939 2549.5939 2553.0838 2584.5838 2588.0738 2588.0738 2591.5637 2591.5637 2595.0537 2595.0537 2598.5436 2505.8016 2509.2916 - 2509.2916 2512.7815 2517.7815 2521.2715 2531.2715 2534.7614 2534.7614 2538.2514 2538.2514 2541.7413 2541.7413 2545.2313 2545.2313 2548.7212 2548.7212 2552.2112 - 2587.2112 2590.7011 2590.7011 2594.1911 2594.1911 2597.681 2597.681 2601.171 2546.9935 2550.4835 2550.4835 2553.9734 2556.9734 2560.4634 2560.4634 2563.9533 - 2563.9533 2567.4433 2567.4433 2570.9332 2570.9332 2574.4232 2574.4232 2577.9131 2577.9131 2581.4031 2581.4031 2584.893 2584.893 2588.383 2588.383 2591.8729 - 2591.8729 2595.3629 2546.1209 2549.6108 2549.6108 2553.1008 2556.1008 2559.5907 2559.5907 2563.0807 2563.0807 2566.5706 2566.5706 2570.0606 2570.0606 2573.5505 - 2573.5505 2577.0405 2577.0405 2580.5304 2580.5304 2584.0204 2584.0204 2587.5103 2587.5103 2591.0003 2591.0003 2594.4902 2546.1209 2549.6108 2549.6108 2553.1008 - 2556.1008 2559.5907 2559.5907 2563.0807 2563.0807 2566.5706 2566.5706 2570.0606 2570.0606 2573.5505 2573.5505 2577.0405 2577.0405 2580.5304 2580.5304 2584.0204 - 2584.0204 2587.5103 2587.5103 2591.0003 2591.0003 2594.4902 2545.2482 2548.7382 2548.7382 2552.2281 2555.2281 2558.7181 2558.7181 2562.208 2562.208 2565.698 - 2565.698 2569.1879 2569.1879 2572.6779 2572.6779 2576.1678 2576.1678 2579.6578 2579.6578 2583.1477 2583.1477 2586.6377 2586.6377 2590.1276 2590.1276 2593.6176 - 2545.2482 2548.7382 2548.7382 2552.2281 2555.2281 2558.7181 2558.7181 2562.208 2562.208 2565.698 2565.698 2569.1879 2569.1879 2572.6779 2572.6779 2576.1678 - 2576.1678 2579.6578 2579.6578 2583.1477 2583.1477 2586.6377 2586.6377 2590.1276 2590.1276 2593.6176 2544.3756 2547.8655 2547.8655 2551.3555 2554.3555 2557.8454 - 2557.8454 2561.3354 2561.3354 2564.8253 2564.8253 2568.3153 2568.3153 2571.8052 2571.8052 2575.2952 2575.2952 2578.7851 2578.7851 2582.2751 2582.2751 2585.765 - 2585.765 2589.255 2589.255 2592.7449 2544.3756 2547.8655 2547.8655 2551.3555 2554.3555 2557.8454 2557.8454 2561.3354 2561.3354 2564.8253 2564.8253 2568.3153 - 2568.3153 2571.8052 2571.8052 2575.2952 2575.2952 2578.7851 2578.7851 2582.2751 2582.2751 2585.765 2585.765 2589.255 2589.255 2592.7449 2543.5029 2546.9929 - 2546.9929 2550.4828 2553.4828 2556.9728 2556.9728 2560.4627 2560.4627 2563.9527 2563.9527 2567.4426 2567.4426 2570.9326 2570.9326 2574.4225 2574.4225 2577.9125 - 2577.9125 2581.4024 2581.4024 2584.8924 2584.8924 2588.3823 2588.3823 2591.8723 2543.5029 2546.9929 2546.9929 2550.4828 2550.4828 2553.9728 2556.9728 2560.4627 - 2560.4627 2563.9527 2563.9527 2567.4426 2567.4426 2570.9326 2570.9326 2574.4225 2574.4225 2577.9125 2577.9125 2581.4024 2581.4024 2584.8924 2584.8924 2588.3823 - 2588.3823 2591.8723 2542.6303 2546.1202 2546.1202 2549.6102 2549.6102 2553.1001 2556.1001 2559.5901 2559.5901 2563.08 2563.08 2566.57 2566.57 2570.0599 - 2570.0599 2573.5499 2573.5499 2577.0398 2577.0398 2580.5298 2580.5298 2584.0197 2584.0197 2587.5097 2587.5097 2590.9996 2542.6303 2546.1202 2546.1202 2549.6102 - 2549.6102 2553.1001 2556.1001 2559.5901 2559.5901 2563.08 2563.08 2566.57 2566.57 2570.0599 2570.0599 2573.5499 2573.5499 2577.0398 2577.0398 2580.5298 - 2580.5298 2584.0197 2584.0197 2587.5097 2587.5097 2590.9996 2541.7576 2545.2476 2545.2476 2548.7375 2548.7375 2552.2275 2555.2275 2558.7174 2558.7174 2562.2074 - 2562.2074 2565.6973 2565.6973 2569.1873 2569.1873 2572.6772 2572.6772 2576.1672 2576.1672 2579.6571 2579.6571 2583.1471 2583.1471 2586.637 2586.637 2590.127 - 2541.7576 2545.2476 2545.2476 2548.7375 2548.7375 2552.2275 2555.2275 2558.7174 2558.7174 2562.2074 2562.2074 2565.6973 2565.6973 2569.1873 2569.1873 2572.6772 - 2572.6772 2576.1672 2576.1672 2579.6571 2579.6571 2583.1471 2583.1471 2586.637 2586.637 2590.127 2540.885 2544.3749 2544.3749 2547.8649 2547.8649 2551.3548 - 2554.3548 2557.8448 2557.8448 2561.3347 2561.3347 2564.8247 2564.8247 2568.3146 2568.3146 2571.8046 2571.8046 2575.2945 2575.2945 2578.7844 2578.7844 2582.2744 - 2582.2744 2585.7643 2585.7643 2589.2543 2540.885 2544.3749 2544.3749 2547.8649 2547.8649 2551.3548 2554.3548 2557.8448 2557.8448 2561.3347 2561.3347 2564.8247 - 2564.8247 2568.3146 2568.3146 2571.8046 2571.8046 2575.2945 2575.2945 2578.7844 2578.7844 2582.2744 2582.2744 2585.7643 2585.7643 2589.2543 2540.0123 2543.5022 - 2543.5022 2546.9922 2546.9922 2550.4821 2553.4821 2556.9721 2556.9721 2560.462 2560.462 2563.952 2563.952 2567.4419 2567.4419 2570.9319 2570.9319 2574.4218 - 2574.4218 2577.9118 2577.9118 2581.4017 2581.4017 2584.8917 2584.8917 2588.3816 2543.0123 2546.5022 2546.5022 2549.9922 2549.9922 2553.4821 2553.4821 2556.9721 - 2556.9721 2560.462 2560.462 2563.952 2563.952 2567.4419 2567.4419 2570.9319 2570.9319 2574.4218 2574.4218 2577.9118 2577.9118 2581.4017 2581.4017 2584.8917 - 2584.8917 2588.3816 2542.1396 2545.6296 2545.6296 2549.1195 2549.1195 2552.6095 2552.6095 2556.0994 2556.0994 2559.5894 2559.5894 2563.0793 2563.0793 2566.5693 - 2566.5693 2570.0592 2570.0592 2573.5492 2573.5492 2577.0391 2577.0391 2580.5291 2580.5291 2584.019 2584.019 2587.509 2542.1396 2545.6296 2545.6296 2549.1195 - 2549.1195 2552.6095 2552.6095 2556.0994 2556.0994 2559.5894 2559.5894 2563.0793 2563.0793 2566.5693 2566.5693 2570.0592 2570.0592 2573.5492 2573.5492 2577.0391 - 2577.0391 2580.5291 2580.5291 2584.019 2584.019 2587.509 2541.267 2544.7569 2544.7569 2548.2469 2548.2469 2551.7368 2551.7368 2555.2268 2555.2268 2558.7167 - 2558.7167 2562.2067 2562.2067 2565.6966 2565.6966 2569.1866 2569.1866 2572.6765 2572.6765 2576.1665 2576.1665 2579.6564 2579.6564 2583.1464 2583.1464 2586.6363 - 2541.267 2544.7569 2544.7569 2548.2469 2548.2469 2551.7368 2551.7368 2555.2268 2555.2268 2558.7167 2558.7167 2562.2067 2562.2067 2565.6966 2565.6966 2569.1866 - 2569.1866 2572.6765 2572.6765 2576.1665 2576.1665 2579.6564 2579.6564 2583.1464 2583.1464 2586.6363 2539.561 2543.051 2543.051 2546.5409 2546.5409 2550.0309 - 2550.8642 2554.3541 2554.3541 2557.8441 2557.8441 2561.334 2561.334 2564.824 2564.824 2568.3139 2568.3139 2571.8039 2571.8039 2575.2938 2575.2938 2578.7838 - 2578.7838 2582.2737 2582.2737 2585.7637 2539.561 2543.051 2543.051 2546.5409 2546.5409 2550.0309 2550.8642 2554.3541 2554.3541 2557.8441 2557.8441 2561.334 - 2561.334 2564.824 2564.824 2568.3139 2568.3139 2571.8039 2571.8039 2575.2938 2575.2938 2578.7838 2578.7838 2582.2737 2582.2737 2585.7637 2537.855 2541.345 - 2541.345 2544.8349 2544.8349 2548.3249 2549.9915 2553.4815 2553.4815 2556.9714 2556.9714 2560.4614 2560.4614 2563.9513 2563.9513 2567.4413 2567.4413 2570.9312 - 2570.9312 2574.4212 2574.4212 2577.9111 2577.9111 2581.4011 2581.4011 2584.891 2537.855 2541.345 2541.345 2544.8349 2544.8349 2548.3249 2549.9915 2553.4815 - 2553.4815 2556.9714 2556.9714 2560.4614 2560.4614 2563.9513 2563.9513 2567.4413 2567.4413 2570.9312 2570.9312 2574.4212 2574.4212 2577.9111 2577.9111 2581.4011 - 2581.4011 2584.891 2536.149 2539.639 2539.639 2543.1289 2543.1289 2546.6189 2549.1189 2552.6088 2552.6088 2556.0988 2556.0988 2559.5887 2559.5887 2563.0787 - 2563.0787 2566.5686 2566.5686 2570.0586 2573.5586 2577.0485 2577.0485 2580.5385 2580.5385 2584.0284 2584.0284 2587.5184 2536.149 2539.639 2539.639 2543.1289 - 2543.1289 2546.6189 2549.1189 2552.6088 2552.6088 2556.0988 2556.0988 2559.5887 2559.5887 2563.0787 2563.0787 2566.5686 2566.5686 2570.0586 2573.5586 2577.0485 - 2577.0485 2580.5385 2580.5385 2584.0284 2584.0284 2587.5184 2534.443 2537.933 2537.933 2541.4229 2541.4229 2544.9129 2548.2462 2551.7362 2551.7362 2555.2261 - 2555.2261 2558.7161 2558.7161 2562.206 2562.206 2565.696 2565.696 2569.1859 2576.1859 2579.6759 2579.6759 2583.1658 2583.1658 2586.6558 2586.6558 2590.1457 - 2534.443 2537.933 2537.933 2541.4229 2541.4229 2544.9129 2548.2462 2551.7362 2551.7362 2555.2261 2555.2261 2558.7161 2558.7161 2562.206 2562.206 2565.696 - 2565.696 2569.1859 2576.1859 2579.6759 2579.6759 2583.1658 2583.1658 2586.6558 2586.6558 2590.1457 2532.7371 2536.227 2536.227 2539.717 2539.717 2543.2069 - 2547.3736 2550.8635 2550.8635 2554.3535 2554.3535 2557.8434 2557.8434 2561.3334 2561.3334 2564.8233 2564.8233 2568.3133 2578.8133 2582.3032 2582.3032 2585.7932 - 2585.7932 2589.2831 2589.2831 2592.7731 2527.7371 2531.227 2531.227 2534.717 2539.717 2543.2069 2547.3736 2550.8635 2550.8635 2554.3535 2554.3535 2557.8434 - 2557.8434 2561.3334 2561.3334 2564.8233 2564.8233 2568.3133 2578.8133 2582.3032 2582.3032 2585.7932 2585.7932 2589.2831 2589.2831 2592.7731 2526.0311 2529.521 - 2529.521 2533.011 2538.011 2541.5009 2546.5009 2549.9909 2549.9909 2553.4808 2553.4808 2556.9708 2556.9708 2560.4607 2560.4607 2563.9507 2563.9507 2567.4406 - 2581.4406 2584.9306 2584.9306 2588.4205 2588.4205 2591.9105 2591.9105 2595.4004 2526.0311 2529.521 2529.521 2533.011 2538.011 2541.5009 2546.5009 2549.9909 - 2549.9909 2553.4808 2553.4808 2556.9708 2556.9708 2560.4607 2560.4607 2563.9507 2563.9507 2567.4406 2581.4406 2584.9306 2584.9306 2588.4205 2588.4205 2591.9105 - 2591.9105 2595.4004 2524.3251 2527.815 2527.815 2531.305 2536.305 2539.7949 2545.6283 2549.1182 2549.1182 2552.6082 2552.6082 2556.0981 2556.0981 2559.5881 - 2559.5881 2563.078 2563.078 2566.568 2584.068 2587.5579 2587.5579 2591.0479 2591.0479 2594.5378 2594.5378 2598.0278 2524.3251 2527.815 2527.815 2531.305 - 2536.305 2539.7949 2545.6283 2549.1182 2549.1182 2552.6082 2552.6082 2556.0981 2556.0981 2559.5881 2559.5881 2563.078 2563.078 2566.568 2584.068 2587.5579 - 2587.5579 2591.0479 2591.0479 2594.5378 2594.5378 2598.0278 2522.6191 2526.109 2526.109 2529.599 2534.599 2538.0889 2544.7556 2548.2456 2548.2456 2551.7355 - 2551.7355 2555.2255 2555.2255 2558.7154 2558.7154 2562.2054 2562.2054 2565.6953 2586.6953 2590.1853 2590.1853 2593.6752 2593.6752 2597.1652 2597.1652 2600.6551 - 2522.6191 2526.109 2526.109 2529.599 2534.599 2538.0889 2544.7556 2548.2456 2548.2456 2551.7355 2551.7355 2555.2255 2555.2255 2558.7154 2558.7154 2562.2054 - 2562.2054 2565.6953 2586.6953 2590.1853 2590.1853 2593.6752 2593.6752 2597.1652 2597.1652 2600.6551 2520.9131 2524.4031 2524.4031 2527.893 2532.893 2536.383 - 2543.883 2547.3729 2547.3729 2550.8629 2550.8629 2554.3528 2554.3528 2557.8428 2557.8428 2561.3327 2561.3327 2564.8227 2589.3227 2592.8126 2592.8126 2596.3026 - 2596.3026 2599.7925 2599.7925 2603.2825 2520.9131 2524.4031 2524.4031 2527.893 2532.893 2536.383 2543.883 2547.3729 2547.3729 2550.8629 2550.8629 2554.3528 - 2554.3528 2557.8428 2557.8428 2561.3327 2561.3327 2564.8227 2589.3227 2592.8126 2592.8126 2596.3026 2596.3026 2599.7925 2599.7925 2603.2825 2519.2071 2522.6971 - 2522.6971 2526.187 2531.187 2534.677 2543.0103 2546.5003 2546.5003 2549.9902 2549.9902 2553.4802 2553.4802 2556.9701 2556.9701 2560.4601 2560.4601 2563.95 - 2591.95 2595.44 2595.44 2598.9299 2598.9299 2602.4199 2602.4199 2605.9098 2519.2071 2522.6971 2522.6971 2526.187 2531.187 2534.677 2543.0103 2546.5003 - 2546.5003 2549.9902 2549.9902 2553.4802 2553.4802 2556.9701 2556.9701 2560.4601 2560.4601 2563.95 2591.95 2595.44 2595.44 2598.9299 2598.9299 2602.4199 - 2602.4199 2605.9098 2517.5011 2520.9911 2520.9911 2524.481 2529.481 2532.971 2542.1377 2545.6276 2545.6276 2549.1176 2549.1176 2552.6075 2552.6075 2556.0975 - 2556.0975 2559.5874 2559.5874 2563.0773 2594.5773 2598.0673 2598.0673 2601.5572 2601.5572 2605.0472 2605.0472 2608.5371 2517.5011 2520.9911 2520.9911 2524.481 - 2529.481 2532.971 2542.1377 2545.6276 2545.6276 2549.1176 2549.1176 2552.6075 2552.6075 2556.0975 2556.0975 2559.5874 2559.5874 2563.0773 2594.5773 2598.0673 - 2598.0673 2601.5572 2601.5572 2605.0472 2605.0472 2608.5371 2515.7951 2519.2851 2519.2851 2522.775 2527.775 2531.265 2541.265 2544.7549 2544.7549 2548.2449 - 2548.2449 2551.7348 2551.7348 2555.2248 2555.2248 2558.7147 2558.7147 2562.2047 2597.2047 2600.6946 2600.6946 2604.1846 2604.1846 2607.6745 2607.6745 2611.1645 - 2546.9935 2550.4835 2550.4835 2553.9734 2556.9734 2560.4634 2560.4634 2563.9533 2563.9533 2567.4433 2567.4433 2570.9332 2570.9332 2574.4232 2574.4232 2577.9131 - 2577.9131 2581.4031 2581.4031 2584.893 2584.893 2588.383 2588.383 2591.8729 2591.8729 2595.3629 2546.1209 2549.6108 2549.6108 2553.1008 2556.1008 2559.5907 - 2559.5907 2563.0807 2563.0807 2566.5706 2566.5706 2570.0606 2570.0606 2573.5505 2573.5505 2577.0405 2577.0405 2580.5304 2580.5304 2584.0204 2584.0204 2587.5103 - 2587.5103 2591.0003 2591.0003 2594.4902 2546.1209 2549.6108 2549.6108 2553.1008 2556.1008 2559.5907 2559.5907 2563.0807 2563.0807 2566.5706 2566.5706 2570.0606 - 2570.0606 2573.5505 2573.5505 2577.0405 2577.0405 2580.5304 2580.5304 2584.0204 2584.0204 2587.5103 2587.5103 2591.0003 2591.0003 2594.4902 2545.2482 2548.7382 - 2548.7382 2552.2281 2555.2281 2558.7181 2558.7181 2562.208 2562.208 2565.698 2565.698 2569.1879 2569.1879 2572.6779 2572.6779 2576.1678 2576.1678 2579.6578 - 2579.6578 2583.1477 2583.1477 2586.6377 2586.6377 2590.1276 2590.1276 2593.6176 2545.2482 2548.7382 2548.7382 2552.2281 2555.2281 2558.7181 2558.7181 2562.208 - 2562.208 2565.698 2565.698 2569.1879 2569.1879 2572.6779 2572.6779 2576.1678 2576.1678 2579.6578 2579.6578 2583.1477 2583.1477 2586.6377 2586.6377 2590.1276 - 2590.1276 2593.6176 2544.3756 2547.8655 2547.8655 2551.3555 2554.3555 2557.8454 2557.8454 2561.3354 2561.3354 2564.8253 2564.8253 2568.3153 2568.3153 2571.8052 - 2571.8052 2575.2952 2575.2952 2578.7851 2578.7851 2582.2751 2582.2751 2585.765 2585.765 2589.255 2589.255 2592.7449 2544.3756 2547.8655 2547.8655 2551.3555 - 2554.3555 2557.8454 2557.8454 2561.3354 2561.3354 2564.8253 2564.8253 2568.3153 2568.3153 2571.8052 2571.8052 2575.2952 2575.2952 2578.7851 2578.7851 2582.2751 - 2582.2751 2585.765 2585.765 2589.255 2589.255 2592.7449 2543.5029 2546.9929 2546.9929 2550.4828 2553.4828 2556.9728 2556.9728 2560.4627 2560.4627 2563.9527 - 2563.9527 2567.4426 2567.4426 2570.9326 2570.9326 2574.4225 2574.4225 2577.9125 2577.9125 2581.4024 2581.4024 2584.8924 2584.8924 2588.3823 2588.3823 2591.8723 - 2543.5029 2546.9929 2546.9929 2550.4828 2550.4828 2553.9728 2556.9728 2560.4627 2560.4627 2563.9527 2563.9527 2567.4426 2567.4426 2570.9326 2570.9326 2574.4225 - 2574.4225 2577.9125 2577.9125 2581.4024 2581.4024 2584.8924 2584.8924 2588.3823 2588.3823 2591.8723 2542.6303 2546.1202 2546.1202 2549.6102 2549.6102 2553.1001 - 2556.1001 2559.5901 2559.5901 2563.08 2563.08 2566.57 2566.57 2570.0599 2570.0599 2573.5499 2573.5499 2577.0398 2577.0398 2580.5298 2580.5298 2584.0197 - 2584.0197 2587.5097 2587.5097 2590.9996 2542.6303 2546.1202 2546.1202 2549.6102 2549.6102 2553.1001 2556.1001 2559.5901 2559.5901 2563.08 2563.08 2566.57 - 2566.57 2570.0599 2570.0599 2573.5499 2573.5499 2577.0398 2577.0398 2580.5298 2580.5298 2584.0197 2584.0197 2587.5097 2587.5097 2590.9996 2541.7576 2545.2476 - 2545.2476 2548.7375 2548.7375 2552.2275 2555.2275 2558.7174 2558.7174 2562.2074 2562.2074 2565.6973 2565.6973 2569.1873 2569.1873 2572.6772 2572.6772 2576.1672 - 2576.1672 2579.6571 2579.6571 2583.1471 2583.1471 2586.637 2586.637 2590.127 2541.7576 2545.2476 2545.2476 2548.7375 2548.7375 2552.2275 2555.2275 2558.7174 - 2558.7174 2562.2074 2562.2074 2565.6973 2565.6973 2569.1873 2569.1873 2572.6772 2572.6772 2576.1672 2576.1672 2579.6571 2579.6571 2583.1471 2583.1471 2586.637 - 2586.637 2590.127 2540.885 2544.3749 2544.3749 2547.8649 2547.8649 2551.3548 2554.3548 2557.8448 2557.8448 2561.3347 2561.3347 2564.8247 2564.8247 2568.3146 - 2568.3146 2571.8046 2571.8046 2575.2945 2575.2945 2578.7844 2578.7844 2582.2744 2582.2744 2585.7643 2585.7643 2589.2543 2540.885 2544.3749 2544.3749 2547.8649 - 2547.8649 2551.3548 2554.3548 2557.8448 2557.8448 2561.3347 2561.3347 2564.8247 2564.8247 2568.3146 2568.3146 2571.8046 2571.8046 2575.2945 2575.2945 2578.7844 - 2578.7844 2582.2744 2582.2744 2585.7643 2585.7643 2589.2543 2540.0123 2543.5022 2543.5022 2546.9922 2546.9922 2550.4821 2553.4821 2556.9721 2556.9721 2560.462 - 2560.462 2563.952 2563.952 2567.4419 2567.4419 2570.9319 2570.9319 2574.4218 2574.4218 2577.9118 2577.9118 2581.4017 2581.4017 2584.8917 2584.8917 2588.3816 - 2543.0123 2546.5022 2546.5022 2549.9922 2549.9922 2553.4821 2553.4821 2556.9721 2556.9721 2560.462 2560.462 2563.952 2563.952 2567.4419 2567.4419 2570.9319 - 2570.9319 2574.4218 2574.4218 2577.9118 2577.9118 2581.4017 2581.4017 2584.8917 2584.8917 2588.3816 2542.1396 2545.6296 2545.6296 2549.1195 2549.1195 2552.6095 - 2552.6095 2556.0994 2556.0994 2559.5894 2559.5894 2563.0793 2563.0793 2566.5693 2566.5693 2570.0592 2570.0592 2573.5492 2573.5492 2577.0391 2577.0391 2580.5291 - 2580.5291 2584.019 2584.019 2587.509 2542.1396 2545.6296 2545.6296 2549.1195 2549.1195 2552.6095 2552.6095 2556.0994 2556.0994 2559.5894 2559.5894 2563.0793 - 2563.0793 2566.5693 2566.5693 2570.0592 2570.0592 2573.5492 2573.5492 2577.0391 2577.0391 2580.5291 2580.5291 2584.019 2584.019 2587.509 2541.267 2544.7569 - 2544.7569 2548.2469 2548.2469 2551.7368 2551.7368 2555.2268 2555.2268 2558.7167 2558.7167 2562.2067 2562.2067 2565.6966 2565.6966 2569.1866 2569.1866 2572.6765 - 2572.6765 2576.1665 2576.1665 2579.6564 2579.6564 2583.1464 2583.1464 2586.6363 2541.267 2544.7569 2544.7569 2548.2469 2548.2469 2551.7368 2551.7368 2555.2268 - 2555.2268 2558.7167 2558.7167 2562.2067 2562.2067 2565.6966 2565.6966 2569.1866 2569.1866 2572.6765 2572.6765 2576.1665 2576.1665 2579.6564 2579.6564 2583.1464 - 2583.1464 2586.6363 2539.561 2543.051 2543.051 2546.5409 2546.5409 2550.0309 2550.8642 2554.3541 2554.3541 2557.8441 2557.8441 2561.334 2561.334 2564.824 - 2564.824 2568.3139 2568.3139 2571.8039 2571.8039 2575.2938 2575.2938 2578.7838 2578.7838 2582.2737 2582.2737 2585.7637 2539.561 2543.051 2543.051 2546.5409 - 2546.5409 2550.0309 2550.8642 2554.3541 2554.3541 2557.8441 2557.8441 2561.334 2561.334 2564.824 2564.824 2568.3139 2568.3139 2571.8039 2571.8039 2575.2938 - 2575.2938 2578.7838 2578.7838 2582.2737 2582.2737 2585.7637 2537.855 2541.345 2541.345 2544.8349 2544.8349 2548.3249 2549.9915 2553.4815 2553.4815 2556.9714 - 2556.9714 2560.4614 2560.4614 2563.9513 2563.9513 2567.4413 2567.4413 2570.9312 2570.9312 2574.4212 2574.4212 2577.9111 2577.9111 2581.4011 2581.4011 2584.891 - 2537.855 2541.345 2541.345 2544.8349 2544.8349 2548.3249 2549.9915 2553.4815 2553.4815 2556.9714 2556.9714 2560.4614 2560.4614 2563.9513 2563.9513 2567.4413 - 2567.4413 2570.9312 2570.9312 2574.4212 2574.4212 2577.9111 2577.9111 2581.4011 2581.4011 2584.891 2536.149 2539.639 2539.639 2543.1289 2543.1289 2546.6189 - 2549.1189 2552.6088 2552.6088 2556.0988 2556.0988 2559.5887 2559.5887 2563.0787 2563.0787 2566.5686 2566.5686 2570.0586 2573.5586 2577.0485 2577.0485 2580.5385 - 2580.5385 2584.0284 2584.0284 2587.5184 2536.149 2539.639 2539.639 2543.1289 2543.1289 2546.6189 2549.1189 2552.6088 2552.6088 2556.0988 2556.0988 2559.5887 - 2559.5887 2563.0787 2563.0787 2566.5686 2566.5686 2570.0586 2573.5586 2577.0485 2577.0485 2580.5385 2580.5385 2584.0284 2584.0284 2587.5184 2534.443 2537.933 - 2537.933 2541.4229 2541.4229 2544.9129 2548.2462 2551.7362 2551.7362 2555.2261 2555.2261 2558.7161 2558.7161 2562.206 2562.206 2565.696 2565.696 2569.1859 - 2576.1859 2579.6759 2579.6759 2583.1658 2583.1658 2586.6558 2586.6558 2590.1457 2534.443 2537.933 2537.933 2541.4229 2541.4229 2544.9129 2548.2462 2551.7362 - 2551.7362 2555.2261 2555.2261 2558.7161 2558.7161 2562.206 2562.206 2565.696 2565.696 2569.1859 2576.1859 2579.6759 2579.6759 2583.1658 2583.1658 2586.6558 - 2586.6558 2590.1457 2532.7371 2536.227 2536.227 2539.717 2539.717 2543.2069 2547.3736 2550.8635 2550.8635 2554.3535 2554.3535 2557.8434 2557.8434 2561.3334 - 2561.3334 2564.8233 2564.8233 2568.3133 2578.8133 2582.3032 2582.3032 2585.7932 2585.7932 2589.2831 2589.2831 2592.7731 2527.7371 2531.227 2531.227 2534.717 - 2539.717 2543.2069 2547.3736 2550.8635 2550.8635 2554.3535 2554.3535 2557.8434 2557.8434 2561.3334 2561.3334 2564.8233 2564.8233 2568.3133 2578.8133 2582.3032 - 2582.3032 2585.7932 2585.7932 2589.2831 2589.2831 2592.7731 2526.0311 2529.521 2529.521 2533.011 2538.011 2541.5009 2546.5009 2549.9909 2549.9909 2553.4808 - 2553.4808 2556.9708 2556.9708 2560.4607 2560.4607 2563.9507 2563.9507 2567.4406 2581.4406 2584.9306 2584.9306 2588.4205 2588.4205 2591.9105 2591.9105 2595.4004 - 2526.0311 2529.521 2529.521 2533.011 2538.011 2541.5009 2546.5009 2549.9909 2549.9909 2553.4808 2553.4808 2556.9708 2556.9708 2560.4607 2560.4607 2563.9507 - 2563.9507 2567.4406 2581.4406 2584.9306 2584.9306 2588.4205 2588.4205 2591.9105 2591.9105 2595.4004 2524.3251 2527.815 2527.815 2531.305 2536.305 2539.7949 - 2545.6283 2549.1182 2549.1182 2552.6082 2552.6082 2556.0981 2556.0981 2559.5881 2559.5881 2563.078 2563.078 2566.568 2584.068 2587.5579 2587.5579 2591.0479 - 2591.0479 2594.5378 2594.5378 2598.0278 2524.3251 2527.815 2527.815 2531.305 2536.305 2539.7949 2545.6283 2549.1182 2549.1182 2552.6082 2552.6082 2556.0981 - 2556.0981 2559.5881 2559.5881 2563.078 2563.078 2566.568 2584.068 2587.5579 2587.5579 2591.0479 2591.0479 2594.5378 2594.5378 2598.0278 2522.6191 2526.109 - 2526.109 2529.599 2534.599 2538.0889 2544.7556 2548.2456 2548.2456 2551.7355 2551.7355 2555.2255 2555.2255 2558.7154 2558.7154 2562.2054 2562.2054 2565.6953 - 2586.6953 2590.1853 2590.1853 2593.6752 2593.6752 2597.1652 2597.1652 2600.6551 2522.6191 2526.109 2526.109 2529.599 2534.599 2538.0889 2544.7556 2548.2456 - 2548.2456 2551.7355 2551.7355 2555.2255 2555.2255 2558.7154 2558.7154 2562.2054 2562.2054 2565.6953 2586.6953 2590.1853 2590.1853 2593.6752 2593.6752 2597.1652 - 2597.1652 2600.6551 2520.9131 2524.4031 2524.4031 2527.893 2532.893 2536.383 2543.883 2547.3729 2547.3729 2550.8629 2550.8629 2554.3528 2554.3528 2557.8428 - 2557.8428 2561.3327 2561.3327 2564.8227 2589.3227 2592.8126 2592.8126 2596.3026 2596.3026 2599.7925 2599.7925 2603.2825 2520.9131 2524.4031 2524.4031 2527.893 - 2532.893 2536.383 2543.883 2547.3729 2547.3729 2550.8629 2550.8629 2554.3528 2554.3528 2557.8428 2557.8428 2561.3327 2561.3327 2564.8227 2589.3227 2592.8126 - 2592.8126 2596.3026 2596.3026 2599.7925 2599.7925 2603.2825 2519.2071 2522.6971 2522.6971 2526.187 2531.187 2534.677 2543.0103 2546.5003 2546.5003 2549.9902 - 2549.9902 2553.4802 2553.4802 2556.9701 2556.9701 2560.4601 2560.4601 2563.95 2591.95 2595.44 2595.44 2598.9299 2598.9299 2602.4199 2602.4199 2605.9098 - 2519.2071 2522.6971 2522.6971 2526.187 2531.187 2534.677 2543.0103 2546.5003 2546.5003 2549.9902 2549.9902 2553.4802 2553.4802 2556.9701 2556.9701 2560.4601 - 2560.4601 2563.95 2591.95 2595.44 2595.44 2598.9299 2598.9299 2602.4199 2602.4199 2605.9098 2517.5011 2520.9911 2520.9911 2524.481 2529.481 2532.971 - 2542.1377 2545.6276 2545.6276 2549.1176 2549.1176 2552.6075 2552.6075 2556.0975 2556.0975 2559.5874 2559.5874 2563.0773 2594.5773 2598.0673 2598.0673 2601.5572 - 2601.5572 2605.0472 2605.0472 2608.5371 2517.5011 2520.9911 2520.9911 2524.481 2529.481 2532.971 2542.1377 2545.6276 2545.6276 2549.1176 2549.1176 2552.6075 - 2552.6075 2556.0975 2556.0975 2559.5874 2559.5874 2563.0773 2594.5773 2598.0673 2598.0673 2601.5572 2601.5572 2605.0472 2605.0472 2608.5371 2515.7951 2519.2851 - 2519.2851 2522.775 2527.775 2531.265 2541.265 2544.7549 2544.7549 2548.2449 2548.2449 2551.7348 2551.7348 2555.2248 2555.2248 2558.7147 2558.7147 2562.2047 - 2597.2047 2600.6946 2600.6946 2604.1846 2604.1846 2607.6745 2607.6745 2611.1645 2556.9871 2560.477 2560.477 2563.967 2566.967 2570.4569 2570.4569 2573.9469 - 2573.9469 2577.4368 2577.4368 2580.9268 2580.9268 2584.4167 2584.4167 2587.9067 2587.9067 2591.3966 2591.3966 2594.8866 2594.8866 2598.3765 2598.3765 2601.8665 - 2601.8665 2605.3564 2556.1144 2559.6044 2559.6044 2563.0943 2566.0943 2569.5843 2569.5843 2573.0742 2573.0742 2576.5641 2576.5641 2580.0541 2580.0541 2583.544 - 2583.544 2587.034 2587.034 2590.5239 2590.5239 2594.0139 2594.0139 2597.5038 2597.5038 2600.9938 2600.9938 2604.4837 2556.1144 2559.6044 2559.6044 2563.0943 - 2566.0943 2569.5843 2569.5843 2573.0742 2573.0742 2576.5641 2576.5641 2580.0541 2580.0541 2583.544 2583.544 2587.034 2587.034 2590.5239 2590.5239 2594.0139 - 2594.0139 2597.5038 2597.5038 2600.9938 2600.9938 2604.4837 2555.2417 2558.7317 2558.7317 2562.2216 2565.2216 2568.7116 2568.7116 2572.2015 2572.2015 2575.6915 - 2575.6915 2579.1814 2579.1814 2582.6714 2582.6714 2586.1613 2586.1613 2589.6513 2589.6513 2593.1412 2593.1412 2596.6312 2596.6312 2600.1211 2600.1211 2603.6111 - 2555.2417 2558.7317 2558.7317 2562.2216 2565.2216 2568.7116 2568.7116 2572.2015 2572.2015 2575.6915 2575.6915 2579.1814 2579.1814 2582.6714 2582.6714 2586.1613 - 2586.1613 2589.6513 2589.6513 2593.1412 2593.1412 2596.6312 2596.6312 2600.1211 2600.1211 2603.6111 2554.3691 2557.859 2557.859 2561.349 2564.349 2567.8389 - 2567.8389 2571.3289 2571.3289 2574.8188 2574.8188 2578.3088 2578.3088 2581.7987 2581.7987 2585.2887 2585.2887 2588.7786 2588.7786 2592.2686 2592.2686 2595.7585 - 2595.7585 2599.2485 2599.2485 2602.7384 2554.3691 2557.859 2557.859 2561.349 2564.349 2567.8389 2567.8389 2571.3289 2571.3289 2574.8188 2574.8188 2578.3088 - 2578.3088 2581.7987 2581.7987 2585.2887 2585.2887 2588.7786 2588.7786 2592.2686 2592.2686 2595.7585 2595.7585 2599.2485 2599.2485 2602.7384 2553.4964 2556.9864 - 2556.9864 2560.4763 2563.4763 2566.9663 2566.9663 2570.4562 2570.4562 2573.9462 2573.9462 2577.4361 2577.4361 2580.9261 2580.9261 2584.416 2584.416 2587.906 - 2587.906 2591.3959 2591.3959 2594.8859 2594.8859 2598.3758 2598.3758 2601.8658 2553.4964 2556.9864 2556.9864 2560.4763 2560.4763 2563.9663 2566.9663 2570.4562 - 2570.4562 2573.9462 2573.9462 2577.4361 2577.4361 2580.9261 2580.9261 2584.416 2584.416 2587.906 2587.906 2591.3959 2591.3959 2594.8859 2594.8859 2598.3758 - 2598.3758 2601.8658 2552.6238 2556.1137 2556.1137 2559.6037 2559.6037 2563.0936 2566.0936 2569.5836 2569.5836 2573.0735 2573.0735 2576.5635 2576.5635 2580.0534 - 2580.0534 2583.5434 2583.5434 2587.0333 2587.0333 2590.5233 2590.5233 2594.0132 2594.0132 2597.5032 2597.5032 2600.9931 2552.6238 2556.1137 2556.1137 2559.6037 - 2559.6037 2563.0936 2566.0936 2569.5836 2569.5836 2573.0735 2573.0735 2576.5635 2576.5635 2580.0534 2580.0534 2583.5434 2583.5434 2587.0333 2587.0333 2590.5233 - 2590.5233 2594.0132 2594.0132 2597.5032 2597.5032 2600.9931 2551.7511 2555.2411 2555.2411 2558.731 2558.731 2562.221 2565.221 2568.7109 2568.7109 2572.2009 - 2572.2009 2575.6908 2575.6908 2579.1808 2579.1808 2582.6707 2582.6707 2586.1607 2586.1607 2589.6506 2589.6506 2593.1406 2593.1406 2596.6305 2596.6305 2600.1205 - 2551.7511 2555.2411 2555.2411 2558.731 2558.731 2562.221 2565.221 2568.7109 2568.7109 2572.2009 2572.2009 2575.6908 2575.6908 2579.1808 2579.1808 2582.6707 - 2582.6707 2586.1607 2586.1607 2589.6506 2589.6506 2593.1406 2593.1406 2596.6305 2596.6305 2600.1205 2550.8785 2554.3684 2554.3684 2557.8584 2557.8584 2561.3483 - 2564.3483 2567.8383 2567.8383 2571.3282 2571.3282 2574.8182 2574.8182 2578.3081 2578.3081 2581.7981 2581.7981 2585.288 2585.288 2588.778 2588.778 2592.2679 - 2592.2679 2595.7579 2595.7579 2599.2478 2550.8785 2554.3684 2554.3684 2557.8584 2557.8584 2561.3483 2564.3483 2567.8383 2567.8383 2571.3282 2571.3282 2574.8182 - 2574.8182 2578.3081 2578.3081 2581.7981 2581.7981 2585.288 2585.288 2588.778 2588.778 2592.2679 2592.2679 2595.7579 2595.7579 2599.2478 2550.0058 2553.4958 - 2553.4958 2556.9857 2556.9857 2560.4757 2563.4757 2566.9656 2566.9656 2570.4556 2570.4556 2573.9455 2573.9455 2577.4355 2577.4355 2580.9254 2580.9254 2584.4154 - 2584.4154 2587.9053 2587.9053 2591.3953 2591.3953 2594.8852 2594.8852 2598.3752 2553.0058 2556.4958 2556.4958 2559.9857 2559.9857 2563.4757 2563.4757 2566.9656 - 2566.9656 2570.4556 2570.4556 2573.9455 2573.9455 2577.4355 2577.4355 2580.9254 2580.9254 2584.4154 2584.4154 2587.9053 2587.9053 2591.3953 2591.3953 2594.8852 - 2594.8852 2598.3752 2552.1332 2555.6231 2555.6231 2559.1131 2559.1131 2562.603 2562.603 2566.093 2566.093 2569.5829 2569.5829 2573.0729 2573.0729 2576.5628 - 2576.5628 2580.0528 2580.0528 2583.5427 2583.5427 2587.0327 2587.0327 2590.5226 2590.5226 2594.0126 2594.0126 2597.5025 2552.1332 2555.6231 2555.6231 2559.1131 - 2559.1131 2562.603 2562.603 2566.093 2566.093 2569.5829 2569.5829 2573.0729 2573.0729 2576.5628 2576.5628 2580.0528 2580.0528 2583.5427 2583.5427 2587.0327 - 2587.0327 2590.5226 2590.5226 2594.0126 2594.0126 2597.5025 2551.2605 2554.7505 2554.7505 2558.2404 2558.2404 2561.7304 2561.7304 2565.2203 2565.2203 2568.7103 - 2568.7103 2572.2002 2572.2002 2575.6902 2575.6902 2579.1801 2579.1801 2582.6701 2582.6701 2586.16 2586.16 2589.65 2589.65 2593.1399 2593.1399 2596.6299 - 2551.2605 2554.7505 2554.7505 2558.2404 2558.2404 2561.7304 2561.7304 2565.2203 2565.2203 2568.7103 2568.7103 2572.2002 2572.2002 2575.6902 2575.6902 2579.1801 - 2579.1801 2582.6701 2582.6701 2586.16 2586.16 2589.65 2589.65 2593.1399 2593.1399 2596.6299 2549.5545 2553.0445 2553.0445 2556.5344 2556.5344 2560.0244 - 2560.8577 2564.3477 2564.3477 2567.8376 2567.8376 2571.3276 2571.3276 2574.8175 2574.8175 2578.3075 2578.3075 2581.7974 2581.7974 2585.2874 2585.2874 2588.7773 - 2588.7773 2592.2673 2592.2673 2595.7572 2549.5545 2553.0445 2553.0445 2556.5344 2556.5344 2560.0244 2560.8577 2564.3477 2564.3477 2567.8376 2567.8376 2571.3276 - 2571.3276 2574.8175 2574.8175 2578.3075 2578.3075 2581.7974 2581.7974 2585.2874 2585.2874 2588.7773 2588.7773 2592.2673 2592.2673 2595.7572 2547.8485 2551.3385 - 2551.3385 2554.8284 2554.8284 2558.3184 2559.9851 2563.475 2563.475 2566.965 2566.965 2570.4549 2570.4549 2573.9449 2573.9449 2577.4348 2577.4348 2580.9248 - 2580.9248 2584.4147 2584.4147 2587.9047 2587.9047 2591.3946 2591.3946 2594.8846 2547.8485 2551.3385 2551.3385 2554.8284 2554.8284 2558.3184 2559.9851 2563.475 - 2563.475 2566.965 2566.965 2570.4549 2570.4549 2573.9449 2573.9449 2577.4348 2577.4348 2580.9248 2580.9248 2584.4147 2584.4147 2587.9047 2587.9047 2591.3946 - 2591.3946 2594.8846 2546.1426 2549.6325 2549.6325 2553.1225 2553.1225 2556.6124 2559.1124 2562.6024 2562.6024 2566.0923 2566.0923 2569.5823 2569.5823 2573.0722 - 2573.0722 2576.5622 2576.5622 2580.0521 2583.5521 2587.0421 2587.0421 2590.532 2590.532 2594.022 2594.022 2597.5119 2546.1426 2549.6325 2549.6325 2553.1225 - 2553.1225 2556.6124 2559.1124 2562.6024 2562.6024 2566.0923 2566.0923 2569.5823 2569.5823 2573.0722 2573.0722 2576.5622 2576.5622 2580.0521 2583.5521 2587.0421 - 2587.0421 2590.532 2590.532 2594.022 2594.022 2597.5119 2544.4366 2547.9265 2547.9265 2551.4165 2551.4165 2554.9064 2558.2398 2561.7297 2561.7297 2565.2197 - 2565.2197 2568.7096 2568.7096 2572.1996 2572.1996 2575.6895 2575.6895 2579.1795 2586.1795 2589.6694 2589.6694 2593.1594 2593.1594 2596.6493 2596.6493 2600.1393 - 2544.4366 2547.9265 2547.9265 2551.4165 2551.4165 2554.9064 2558.2398 2561.7297 2561.7297 2565.2197 2565.2197 2568.7096 2568.7096 2572.1996 2572.1996 2575.6895 - 2575.6895 2579.1795 2586.1795 2589.6694 2589.6694 2593.1594 2593.1594 2596.6493 2596.6493 2600.1393 2542.7306 2546.2205 2546.2205 2549.7105 2549.7105 2553.2004 - 2557.3671 2560.8571 2560.8571 2564.347 2564.347 2567.8369 2567.8369 2571.3269 2571.3269 2574.8168 2574.8168 2578.3068 2588.8068 2592.2967 2592.2967 2595.7867 - 2595.7867 2599.2766 2599.2766 2602.7666 2537.7306 2541.2205 2541.2205 2544.7105 2549.7105 2553.2004 2557.3671 2560.8571 2560.8571 2564.347 2564.347 2567.8369 - 2567.8369 2571.3269 2571.3269 2574.8168 2574.8168 2578.3068 2588.8068 2592.2967 2592.2967 2595.7867 2595.7867 2599.2766 2599.2766 2602.7666 2536.0246 2539.5145 - 2539.5145 2543.0045 2548.0045 2551.4944 2556.4944 2559.9844 2559.9844 2563.4743 2563.4743 2566.9643 2566.9643 2570.4542 2570.4542 2573.9442 2573.9442 2577.4341 - 2591.4341 2594.9241 2594.9241 2598.414 2598.414 2601.904 2601.904 2605.3939 2536.0246 2539.5145 2539.5145 2543.0045 2548.0045 2551.4944 2556.4944 2559.9844 - 2559.9844 2563.4743 2563.4743 2566.9643 2566.9643 2570.4542 2570.4542 2573.9442 2573.9442 2577.4341 2591.4341 2594.9241 2594.9241 2598.414 2598.414 2601.904 - 2601.904 2605.3939 2534.3186 2537.8086 2537.8086 2541.2985 2546.2985 2549.7885 2555.6218 2559.1117 2559.1117 2562.6017 2562.6017 2566.0916 2566.0916 2569.5816 - 2569.5816 2573.0715 2573.0715 2576.5615 2594.0615 2597.5514 2597.5514 2601.0414 2601.0414 2604.5313 2604.5313 2608.0213 2534.3186 2537.8086 2537.8086 2541.2985 - 2546.2985 2549.7885 2555.6218 2559.1117 2559.1117 2562.6017 2562.6017 2566.0916 2566.0916 2569.5816 2569.5816 2573.0715 2573.0715 2576.5615 2594.0615 2597.5514 - 2597.5514 2601.0414 2601.0414 2604.5313 2604.5313 2608.0213 2532.6126 2536.1026 2536.1026 2539.5925 2544.5925 2548.0825 2554.7491 2558.2391 2558.2391 2561.729 - 2561.729 2565.219 2565.219 2568.7089 2568.7089 2572.1989 2572.1989 2575.6888 2596.6888 2600.1788 2600.1788 2603.6687 2603.6687 2607.1587 2607.1587 2610.6486 - 2532.6126 2536.1026 2536.1026 2539.5925 2544.5925 2548.0825 2554.7491 2558.2391 2558.2391 2561.729 2561.729 2565.219 2565.219 2568.7089 2568.7089 2572.1989 - 2572.1989 2575.6888 2596.6888 2600.1788 2600.1788 2603.6687 2603.6687 2607.1587 2607.1587 2610.6486 2530.9066 2534.3966 2534.3966 2537.8865 2542.8865 2546.3765 - 2553.8765 2557.3664 2557.3664 2560.8564 2560.8564 2564.3463 2564.3463 2567.8363 2567.8363 2571.3262 2571.3262 2574.8162 2599.3162 2602.8061 2602.8061 2606.2961 - 2606.2961 2609.786 2609.786 2613.276 2530.9066 2534.3966 2534.3966 2537.8865 2542.8865 2546.3765 2553.8765 2557.3664 2557.3664 2560.8564 2560.8564 2564.3463 - 2564.3463 2567.8363 2567.8363 2571.3262 2571.3262 2574.8162 2599.3162 2602.8061 2602.8061 2606.2961 2606.2961 2609.786 2609.786 2613.276 2529.2007 2532.6906 - 2532.6906 2536.1806 2541.1806 2544.6705 2553.0038 2556.4938 2556.4938 2559.9837 2559.9837 2563.4737 2563.4737 2566.9636 2566.9636 2570.4536 2570.4536 2573.9435 - 2601.9435 2605.4335 2605.4335 2608.9234 2608.9234 2612.4134 2612.4134 2615.9033 2529.2007 2532.6906 2532.6906 2536.1806 2541.1806 2544.6705 2553.0038 2556.4938 - 2556.4938 2559.9837 2559.9837 2563.4737 2563.4737 2566.9636 2566.9636 2570.4536 2570.4536 2573.9435 2601.9435 2605.4335 2605.4335 2608.9234 2608.9234 2612.4134 - 2612.4134 2615.9033 2527.4947 2530.9846 2530.9846 2534.4746 2539.4746 2542.9645 2552.1312 2555.6211 2555.6211 2559.1111 2559.1111 2562.601 2562.601 2566.091 - 2566.091 2569.5809 2569.5809 2573.0709 2604.5709 2608.0608 2608.0608 2611.5508 2611.5508 2615.0407 2615.0407 2618.5307 2527.4947 2530.9846 2530.9846 2534.4746 - 2539.4746 2542.9645 2552.1312 2555.6211 2555.6211 2559.1111 2559.1111 2562.601 2562.601 2566.091 2566.091 2569.5809 2569.5809 2573.0709 2604.5709 2608.0608 - 2608.0608 2611.5508 2611.5508 2615.0407 2615.0407 2618.5307 2525.7887 2529.2786 2529.2786 2532.7686 2537.7686 2541.2585 2551.2585 2554.7485 2554.7485 2558.2384 - 2558.2384 2561.7284 2561.7284 2565.2183 2565.2183 2568.7083 2568.7083 2572.1982 2607.1982 2610.6882 2610.6882 2614.1781 2614.1781 2617.6681 2617.6681 2621.158 - 2556.9871 2560.477 2560.477 2563.967 2566.967 2570.4569 2570.4569 2573.9469 2573.9469 2577.4368 2577.4368 2580.9268 2580.9268 2584.4167 2584.4167 2587.9067 - 2587.9067 2591.3966 2591.3966 2594.8866 2594.8866 2598.3765 2598.3765 2601.8665 2601.8665 2605.3564 2556.1144 2559.6044 2559.6044 2563.0943 2566.0943 2569.5843 - 2569.5843 2573.0742 2573.0742 2576.5641 2576.5641 2580.0541 2580.0541 2583.544 2583.544 2587.034 2587.034 2590.5239 2590.5239 2594.0139 2594.0139 2597.5038 - 2597.5038 2600.9938 2600.9938 2604.4837 2556.1144 2559.6044 2559.6044 2563.0943 2566.0943 2569.5843 2569.5843 2573.0742 2573.0742 2576.5641 2576.5641 2580.0541 - 2580.0541 2583.544 2583.544 2587.034 2587.034 2590.5239 2590.5239 2594.0139 2594.0139 2597.5038 2597.5038 2600.9938 2600.9938 2604.4837 2555.2417 2558.7317 - 2558.7317 2562.2216 2565.2216 2568.7116 2568.7116 2572.2015 2572.2015 2575.6915 2575.6915 2579.1814 2579.1814 2582.6714 2582.6714 2586.1613 2586.1613 2589.6513 - 2589.6513 2593.1412 2593.1412 2596.6312 2596.6312 2600.1211 2600.1211 2603.6111 2555.2417 2558.7317 2558.7317 2562.2216 2565.2216 2568.7116 2568.7116 2572.2015 - 2572.2015 2575.6915 2575.6915 2579.1814 2579.1814 2582.6714 2582.6714 2586.1613 2586.1613 2589.6513 2589.6513 2593.1412 2593.1412 2596.6312 2596.6312 2600.1211 - 2600.1211 2603.6111 2554.3691 2557.859 2557.859 2561.349 2564.349 2567.8389 2567.8389 2571.3289 2571.3289 2574.8188 2574.8188 2578.3088 2578.3088 2581.7987 - 2581.7987 2585.2887 2585.2887 2588.7786 2588.7786 2592.2686 2592.2686 2595.7585 2595.7585 2599.2485 2599.2485 2602.7384 2554.3691 2557.859 2557.859 2561.349 - 2564.349 2567.8389 2567.8389 2571.3289 2571.3289 2574.8188 2574.8188 2578.3088 2578.3088 2581.7987 2581.7987 2585.2887 2585.2887 2588.7786 2588.7786 2592.2686 - 2592.2686 2595.7585 2595.7585 2599.2485 2599.2485 2602.7384 2553.4964 2556.9864 2556.9864 2560.4763 2563.4763 2566.9663 2566.9663 2570.4562 2570.4562 2573.9462 - 2573.9462 2577.4361 2577.4361 2580.9261 2580.9261 2584.416 2584.416 2587.906 2587.906 2591.3959 2591.3959 2594.8859 2594.8859 2598.3758 2598.3758 2601.8658 - 2553.4964 2556.9864 2556.9864 2560.4763 2560.4763 2563.9663 2566.9663 2570.4562 2570.4562 2573.9462 2573.9462 2577.4361 2577.4361 2580.9261 2580.9261 2584.416 - 2584.416 2587.906 2587.906 2591.3959 2591.3959 2594.8859 2594.8859 2598.3758 2598.3758 2601.8658 2552.6238 2556.1137 2556.1137 2559.6037 2559.6037 2563.0936 - 2566.0936 2569.5836 2569.5836 2573.0735 2573.0735 2576.5635 2576.5635 2580.0534 2580.0534 2583.5434 2583.5434 2587.0333 2587.0333 2590.5233 2590.5233 2594.0132 - 2594.0132 2597.5032 2597.5032 2600.9931 2552.6238 2556.1137 2556.1137 2559.6037 2559.6037 2563.0936 2566.0936 2569.5836 2569.5836 2573.0735 2573.0735 2576.5635 - 2576.5635 2580.0534 2580.0534 2583.5434 2583.5434 2587.0333 2587.0333 2590.5233 2590.5233 2594.0132 2594.0132 2597.5032 2597.5032 2600.9931 2551.7511 2555.2411 - 2555.2411 2558.731 2558.731 2562.221 2565.221 2568.7109 2568.7109 2572.2009 2572.2009 2575.6908 2575.6908 2579.1808 2579.1808 2582.6707 2582.6707 2586.1607 - 2586.1607 2589.6506 2589.6506 2593.1406 2593.1406 2596.6305 2596.6305 2600.1205 2551.7511 2555.2411 2555.2411 2558.731 2558.731 2562.221 2565.221 2568.7109 - 2568.7109 2572.2009 2572.2009 2575.6908 2575.6908 2579.1808 2579.1808 2582.6707 2582.6707 2586.1607 2586.1607 2589.6506 2589.6506 2593.1406 2593.1406 2596.6305 - 2596.6305 2600.1205 2550.8785 2554.3684 2554.3684 2557.8584 2557.8584 2561.3483 2564.3483 2567.8383 2567.8383 2571.3282 2571.3282 2574.8182 2574.8182 2578.3081 - 2578.3081 2581.7981 2581.7981 2585.288 2585.288 2588.778 2588.778 2592.2679 2592.2679 2595.7579 2595.7579 2599.2478 2550.8785 2554.3684 2554.3684 2557.8584 - 2557.8584 2561.3483 2564.3483 2567.8383 2567.8383 2571.3282 2571.3282 2574.8182 2574.8182 2578.3081 2578.3081 2581.7981 2581.7981 2585.288 2585.288 2588.778 - 2588.778 2592.2679 2592.2679 2595.7579 2595.7579 2599.2478 2550.0058 2553.4958 2553.4958 2556.9857 2556.9857 2560.4757 2563.4757 2566.9656 2566.9656 2570.4556 - 2570.4556 2573.9455 2573.9455 2577.4355 2577.4355 2580.9254 2580.9254 2584.4154 2584.4154 2587.9053 2587.9053 2591.3953 2591.3953 2594.8852 2594.8852 2598.3752 - 2553.0058 2556.4958 2556.4958 2559.9857 2559.9857 2563.4757 2563.4757 2566.9656 2566.9656 2570.4556 2570.4556 2573.9455 2573.9455 2577.4355 2577.4355 2580.9254 - 2580.9254 2584.4154 2584.4154 2587.9053 2587.9053 2591.3953 2591.3953 2594.8852 2594.8852 2598.3752 2552.1332 2555.6231 2555.6231 2559.1131 2559.1131 2562.603 - 2562.603 2566.093 2566.093 2569.5829 2569.5829 2573.0729 2573.0729 2576.5628 2576.5628 2580.0528 2580.0528 2583.5427 2583.5427 2587.0327 2587.0327 2590.5226 - 2590.5226 2594.0126 2594.0126 2597.5025 2552.1332 2555.6231 2555.6231 2559.1131 2559.1131 2562.603 2562.603 2566.093 2566.093 2569.5829 2569.5829 2573.0729 - 2573.0729 2576.5628 2576.5628 2580.0528 2580.0528 2583.5427 2583.5427 2587.0327 2587.0327 2590.5226 2590.5226 2594.0126 2594.0126 2597.5025 2551.2605 2554.7505 - 2554.7505 2558.2404 2558.2404 2561.7304 2561.7304 2565.2203 2565.2203 2568.7103 2568.7103 2572.2002 2572.2002 2575.6902 2575.6902 2579.1801 2579.1801 2582.6701 - 2582.6701 2586.16 2586.16 2589.65 2589.65 2593.1399 2593.1399 2596.6299 2551.2605 2554.7505 2554.7505 2558.2404 2558.2404 2561.7304 2561.7304 2565.2203 - 2565.2203 2568.7103 2568.7103 2572.2002 2572.2002 2575.6902 2575.6902 2579.1801 2579.1801 2582.6701 2582.6701 2586.16 2586.16 2589.65 2589.65 2593.1399 - 2593.1399 2596.6299 2549.5545 2553.0445 2553.0445 2556.5344 2556.5344 2560.0244 2560.8577 2564.3477 2564.3477 2567.8376 2567.8376 2571.3276 2571.3276 2574.8175 - 2574.8175 2578.3075 2578.3075 2581.7974 2581.7974 2585.2874 2585.2874 2588.7773 2588.7773 2592.2673 2592.2673 2595.7572 2549.5545 2553.0445 2553.0445 2556.5344 - 2556.5344 2560.0244 2560.8577 2564.3477 2564.3477 2567.8376 2567.8376 2571.3276 2571.3276 2574.8175 2574.8175 2578.3075 2578.3075 2581.7974 2581.7974 2585.2874 - 2585.2874 2588.7773 2588.7773 2592.2673 2592.2673 2595.7572 2547.8485 2551.3385 2551.3385 2554.8284 2554.8284 2558.3184 2559.9851 2563.475 2563.475 2566.965 - 2566.965 2570.4549 2570.4549 2573.9449 2573.9449 2577.4348 2577.4348 2580.9248 2580.9248 2584.4147 2584.4147 2587.9047 2587.9047 2591.3946 2591.3946 2594.8846 - 2547.8485 2551.3385 2551.3385 2554.8284 2554.8284 2558.3184 2559.9851 2563.475 2563.475 2566.965 2566.965 2570.4549 2570.4549 2573.9449 2573.9449 2577.4348 - 2577.4348 2580.9248 2580.9248 2584.4147 2584.4147 2587.9047 2587.9047 2591.3946 2591.3946 2594.8846 2546.1426 2549.6325 2549.6325 2553.1225 2553.1225 2556.6124 - 2559.1124 2562.6024 2562.6024 2566.0923 2566.0923 2569.5823 2569.5823 2573.0722 2573.0722 2576.5622 2576.5622 2580.0521 2583.5521 2587.0421 2587.0421 2590.532 - 2590.532 2594.022 2594.022 2597.5119 2546.1426 2549.6325 2549.6325 2553.1225 2553.1225 2556.6124 2559.1124 2562.6024 2562.6024 2566.0923 2566.0923 2569.5823 - 2569.5823 2573.0722 2573.0722 2576.5622 2576.5622 2580.0521 2583.5521 2587.0421 2587.0421 2590.532 2590.532 2594.022 2594.022 2597.5119 2544.4366 2547.9265 - 2547.9265 2551.4165 2551.4165 2554.9064 2558.2398 2561.7297 2561.7297 2565.2197 2565.2197 2568.7096 2568.7096 2572.1996 2572.1996 2575.6895 2575.6895 2579.1795 - 2586.1795 2589.6694 2589.6694 2593.1594 2593.1594 2596.6493 2596.6493 2600.1393 2544.4366 2547.9265 2547.9265 2551.4165 2551.4165 2554.9064 2558.2398 2561.7297 - 2561.7297 2565.2197 2565.2197 2568.7096 2568.7096 2572.1996 2572.1996 2575.6895 2575.6895 2579.1795 2586.1795 2589.6694 2589.6694 2593.1594 2593.1594 2596.6493 - 2596.6493 2600.1393 2542.7306 2546.2205 2546.2205 2549.7105 2549.7105 2553.2004 2557.3671 2560.8571 2560.8571 2564.347 2564.347 2567.8369 2567.8369 2571.3269 - 2571.3269 2574.8168 2574.8168 2578.3068 2588.8068 2592.2967 2592.2967 2595.7867 2595.7867 2599.2766 2599.2766 2602.7666 2537.7306 2541.2205 2541.2205 2544.7105 - 2549.7105 2553.2004 2557.3671 2560.8571 2560.8571 2564.347 2564.347 2567.8369 2567.8369 2571.3269 2571.3269 2574.8168 2574.8168 2578.3068 2588.8068 2592.2967 - 2592.2967 2595.7867 2595.7867 2599.2766 2599.2766 2602.7666 2536.0246 2539.5145 2539.5145 2543.0045 2548.0045 2551.4944 2556.4944 2559.9844 2559.9844 2563.4743 - 2563.4743 2566.9643 2566.9643 2570.4542 2570.4542 2573.9442 2573.9442 2577.4341 2591.4341 2594.9241 2594.9241 2598.414 2598.414 2601.904 2601.904 2605.3939 - 2536.0246 2539.5145 2539.5145 2543.0045 2548.0045 2551.4944 2556.4944 2559.9844 2559.9844 2563.4743 2563.4743 2566.9643 2566.9643 2570.4542 2570.4542 2573.9442 - 2573.9442 2577.4341 2591.4341 2594.9241 2594.9241 2598.414 2598.414 2601.904 2601.904 2605.3939 2534.3186 2537.8086 2537.8086 2541.2985 2546.2985 2549.7885 - 2555.6218 2559.1117 2559.1117 2562.6017 2562.6017 2566.0916 2566.0916 2569.5816 2569.5816 2573.0715 2573.0715 2576.5615 2594.0615 2597.5514 2597.5514 2601.0414 - 2601.0414 2604.5313 2604.5313 2608.0213 2534.3186 2537.8086 2537.8086 2541.2985 2546.2985 2549.7885 2555.6218 2559.1117 2559.1117 2562.6017 2562.6017 2566.0916 - 2566.0916 2569.5816 2569.5816 2573.0715 2573.0715 2576.5615 2594.0615 2597.5514 2597.5514 2601.0414 2601.0414 2604.5313 2604.5313 2608.0213 2532.6126 2536.1026 - 2536.1026 2539.5925 2544.5925 2548.0825 2554.7491 2558.2391 2558.2391 2561.729 2561.729 2565.219 2565.219 2568.7089 2568.7089 2572.1989 2572.1989 2575.6888 - 2596.6888 2600.1788 2600.1788 2603.6687 2603.6687 2607.1587 2607.1587 2610.6486 2532.6126 2536.1026 2536.1026 2539.5925 2544.5925 2548.0825 2554.7491 2558.2391 - 2558.2391 2561.729 2561.729 2565.219 2565.219 2568.7089 2568.7089 2572.1989 2572.1989 2575.6888 2596.6888 2600.1788 2600.1788 2603.6687 2603.6687 2607.1587 - 2607.1587 2610.6486 2530.9066 2534.3966 2534.3966 2537.8865 2542.8865 2546.3765 2553.8765 2557.3664 2557.3664 2560.8564 2560.8564 2564.3463 2564.3463 2567.8363 - 2567.8363 2571.3262 2571.3262 2574.8162 2599.3162 2602.8061 2602.8061 2606.2961 2606.2961 2609.786 2609.786 2613.276 2530.9066 2534.3966 2534.3966 2537.8865 - 2542.8865 2546.3765 2553.8765 2557.3664 2557.3664 2560.8564 2560.8564 2564.3463 2564.3463 2567.8363 2567.8363 2571.3262 2571.3262 2574.8162 2599.3162 2602.8061 - 2602.8061 2606.2961 2606.2961 2609.786 2609.786 2613.276 2529.2007 2532.6906 2532.6906 2536.1806 2541.1806 2544.6705 2553.0038 2556.4938 2556.4938 2559.9837 - 2559.9837 2563.4737 2563.4737 2566.9636 2566.9636 2570.4536 2570.4536 2573.9435 2601.9435 2605.4335 2605.4335 2608.9234 2608.9234 2612.4134 2612.4134 2615.9033 - 2529.2007 2532.6906 2532.6906 2536.1806 2541.1806 2544.6705 2553.0038 2556.4938 2556.4938 2559.9837 2559.9837 2563.4737 2563.4737 2566.9636 2566.9636 2570.4536 - 2570.4536 2573.9435 2601.9435 2605.4335 2605.4335 2608.9234 2608.9234 2612.4134 2612.4134 2615.9033 2527.4947 2530.9846 2530.9846 2534.4746 2539.4746 2542.9645 - 2552.1312 2555.6211 2555.6211 2559.1111 2559.1111 2562.601 2562.601 2566.091 2566.091 2569.5809 2569.5809 2573.0709 2604.5709 2608.0608 2608.0608 2611.5508 - 2611.5508 2615.0407 2615.0407 2618.5307 2527.4947 2530.9846 2530.9846 2534.4746 2539.4746 2542.9645 2552.1312 2555.6211 2555.6211 2559.1111 2559.1111 2562.601 - 2562.601 2566.091 2566.091 2569.5809 2569.5809 2573.0709 2604.5709 2608.0608 2608.0608 2611.5508 2611.5508 2615.0407 2615.0407 2618.5307 2525.7887 2529.2786 - 2529.2786 2532.7686 2537.7686 2541.2585 2551.2585 2554.7485 2554.7485 2558.2384 2558.2384 2561.7284 2561.7284 2565.2183 2565.2183 2568.7083 2568.7083 2572.1982 - 2607.1982 2610.6882 2610.6882 2614.1781 2614.1781 2617.6681 2617.6681 2621.158 2566.9806 2570.4705 2570.4705 2573.9605 2576.9605 2580.4504 2580.4504 2583.9404 - 2583.9404 2587.4303 2587.4303 2590.9203 2590.9203 2594.4102 2594.4102 2597.9002 2597.9002 2601.3901 2601.3901 2604.8801 2604.8801 2608.37 2608.37 2611.86 - 2611.86 2615.3499 2566.1079 2569.5979 2569.5979 2573.0878 2576.0878 2579.5778 2579.5778 2583.0677 2583.0677 2586.5577 2586.5577 2590.0476 2590.0476 2593.5376 - 2593.5376 2597.0275 2597.0275 2600.5175 2600.5175 2604.0074 2604.0074 2607.4974 2607.4974 2610.9873 2610.9873 2614.4773 2566.1079 2569.5979 2569.5979 2573.0878 - 2576.0878 2579.5778 2579.5778 2583.0677 2583.0677 2586.5577 2586.5577 2590.0476 2590.0476 2593.5376 2593.5376 2597.0275 2597.0275 2600.5175 2600.5175 2604.0074 - 2604.0074 2607.4974 2607.4974 2610.9873 2610.9873 2614.4773 2565.2353 2568.7252 2568.7252 2572.2152 2575.2152 2578.7051 2578.7051 2582.1951 2582.1951 2585.685 - 2585.685 2589.175 2589.175 2592.6649 2592.6649 2596.1549 2596.1549 2599.6448 2599.6448 2603.1348 2603.1348 2606.6247 2606.6247 2610.1147 2610.1147 2613.6046 - 2565.2353 2568.7252 2568.7252 2572.2152 2575.2152 2578.7051 2578.7051 2582.1951 2582.1951 2585.685 2585.685 2589.175 2589.175 2592.6649 2592.6649 2596.1549 - 2596.1549 2599.6448 2599.6448 2603.1348 2603.1348 2606.6247 2606.6247 2610.1147 2610.1147 2613.6046 2564.3626 2567.8526 2567.8526 2571.3425 2574.3425 2577.8325 - 2577.8325 2581.3224 2581.3224 2584.8124 2584.8124 2588.3023 2588.3023 2591.7923 2591.7923 2595.2822 2595.2822 2598.7722 2598.7722 2602.2621 2602.2621 2605.7521 - 2605.7521 2609.242 2609.242 2612.732 2564.3626 2567.8526 2567.8526 2571.3425 2574.3425 2577.8325 2577.8325 2581.3224 2581.3224 2584.8124 2584.8124 2588.3023 - 2588.3023 2591.7923 2591.7923 2595.2822 2595.2822 2598.7722 2598.7722 2602.2621 2602.2621 2605.7521 2605.7521 2609.242 2609.242 2612.732 2563.49 2566.9799 - 2566.9799 2570.4699 2573.4699 2576.9598 2576.9598 2580.4498 2580.4498 2583.9397 2583.9397 2587.4297 2587.4297 2590.9196 2590.9196 2594.4096 2594.4096 2597.8995 - 2597.8995 2601.3895 2601.3895 2604.8794 2604.8794 2608.3694 2608.3694 2611.8593 2563.49 2566.9799 2566.9799 2570.4699 2570.4699 2573.9598 2576.9598 2580.4498 - 2580.4498 2583.9397 2583.9397 2587.4297 2587.4297 2590.9196 2590.9196 2594.4096 2594.4096 2597.8995 2597.8995 2601.3895 2601.3895 2604.8794 2604.8794 2608.3694 - 2608.3694 2611.8593 2562.6173 2566.1073 2566.1073 2569.5972 2569.5972 2573.0872 2576.0872 2579.5771 2579.5771 2583.0671 2583.0671 2586.557 2586.557 2590.047 - 2590.047 2593.5369 2593.5369 2597.0269 2597.0269 2600.5168 2600.5168 2604.0068 2604.0068 2607.4967 2607.4967 2610.9867 2562.6173 2566.1073 2566.1073 2569.5972 - 2569.5972 2573.0872 2576.0872 2579.5771 2579.5771 2583.0671 2583.0671 2586.557 2586.557 2590.047 2590.047 2593.5369 2593.5369 2597.0269 2597.0269 2600.5168 - 2600.5168 2604.0068 2604.0068 2607.4967 2607.4967 2610.9867 2561.7447 2565.2346 2565.2346 2568.7246 2568.7246 2572.2145 2575.2145 2578.7045 2578.7045 2582.1944 - 2582.1944 2585.6844 2585.6844 2589.1743 2589.1743 2592.6643 2592.6643 2596.1542 2596.1542 2599.6442 2599.6442 2603.1341 2603.1341 2606.6241 2606.6241 2610.114 - 2561.7447 2565.2346 2565.2346 2568.7246 2568.7246 2572.2145 2575.2145 2578.7045 2578.7045 2582.1944 2582.1944 2585.6844 2585.6844 2589.1743 2589.1743 2592.6643 - 2592.6643 2596.1542 2596.1542 2599.6442 2599.6442 2603.1341 2603.1341 2606.6241 2606.6241 2610.114 2560.872 2564.362 2564.362 2567.8519 2567.8519 2571.3419 - 2574.3419 2577.8318 2577.8318 2581.3218 2581.3218 2584.8117 2584.8117 2588.3017 2588.3017 2591.7916 2591.7916 2595.2816 2595.2816 2598.7715 2598.7715 2602.2615 - 2602.2615 2605.7514 2605.7514 2609.2414 2560.872 2564.362 2564.362 2567.8519 2567.8519 2571.3419 2574.3419 2577.8318 2577.8318 2581.3218 2581.3218 2584.8117 - 2584.8117 2588.3017 2588.3017 2591.7916 2591.7916 2595.2816 2595.2816 2598.7715 2598.7715 2602.2615 2602.2615 2605.7514 2605.7514 2609.2414 2559.9994 2563.4893 - 2563.4893 2566.9793 2566.9793 2570.4692 2573.4692 2576.9592 2576.9592 2580.4491 2580.4491 2583.9391 2583.9391 2587.429 2587.429 2590.919 2590.919 2594.4089 - 2594.4089 2597.8989 2597.8989 2601.3888 2601.3888 2604.8788 2604.8788 2608.3687 2562.9994 2566.4893 2566.4893 2569.9793 2569.9793 2573.4692 2573.4692 2576.9592 - 2576.9592 2580.4491 2580.4491 2583.9391 2583.9391 2587.429 2587.429 2590.919 2590.919 2594.4089 2594.4089 2597.8989 2597.8989 2601.3888 2601.3888 2604.8788 - 2604.8788 2608.3687 2562.1267 2565.6167 2565.6167 2569.1066 2569.1066 2572.5965 2572.5965 2576.0865 2576.0865 2579.5764 2579.5764 2583.0664 2583.0664 2586.5563 - 2586.5563 2590.0463 2590.0463 2593.5362 2593.5362 2597.0262 2597.0262 2600.5161 2600.5161 2604.0061 2604.0061 2607.496 2562.1267 2565.6167 2565.6167 2569.1066 - 2569.1066 2572.5965 2572.5965 2576.0865 2576.0865 2579.5764 2579.5764 2583.0664 2583.0664 2586.5563 2586.5563 2590.0463 2590.0463 2593.5362 2593.5362 2597.0262 - 2597.0262 2600.5161 2600.5161 2604.0061 2604.0061 2607.496 2561.254 2564.744 2564.744 2568.2339 2568.2339 2571.7239 2571.7239 2575.2138 2575.2138 2578.7038 - 2578.7038 2582.1937 2582.1937 2585.6837 2585.6837 2589.1736 2589.1736 2592.6636 2592.6636 2596.1535 2596.1535 2599.6435 2599.6435 2603.1334 2603.1334 2606.6234 - 2561.254 2564.744 2564.744 2568.2339 2568.2339 2571.7239 2571.7239 2575.2138 2575.2138 2578.7038 2578.7038 2582.1937 2582.1937 2585.6837 2585.6837 2589.1736 - 2589.1736 2592.6636 2592.6636 2596.1535 2596.1535 2599.6435 2599.6435 2603.1334 2603.1334 2606.6234 2559.5481 2563.038 2563.038 2566.528 2566.528 2570.0179 - 2570.8512 2574.3412 2574.3412 2577.8311 2577.8311 2581.3211 2581.3211 2584.811 2584.811 2588.301 2588.301 2591.7909 2591.7909 2595.2809 2595.2809 2598.7708 - 2598.7708 2602.2608 2602.2608 2605.7507 2559.5481 2563.038 2563.038 2566.528 2566.528 2570.0179 2570.8512 2574.3412 2574.3412 2577.8311 2577.8311 2581.3211 - 2581.3211 2584.811 2584.811 2588.301 2588.301 2591.7909 2591.7909 2595.2809 2595.2809 2598.7708 2598.7708 2602.2608 2602.2608 2605.7507 2557.8421 2561.332 - 2561.332 2564.822 2564.822 2568.3119 2569.9786 2573.4685 2573.4685 2576.9585 2576.9585 2580.4484 2580.4484 2583.9384 2583.9384 2587.4283 2587.4283 2590.9183 - 2590.9183 2594.4082 2594.4082 2597.8982 2597.8982 2601.3881 2601.3881 2604.8781 2557.8421 2561.332 2561.332 2564.822 2564.822 2568.3119 2569.9786 2573.4685 - 2573.4685 2576.9585 2576.9585 2580.4484 2580.4484 2583.9384 2583.9384 2587.4283 2587.4283 2590.9183 2590.9183 2594.4082 2594.4082 2597.8982 2597.8982 2601.3881 - 2601.3881 2604.8781 2556.1361 2559.626 2559.626 2563.116 2563.116 2566.6059 2569.1059 2572.5959 2572.5959 2576.0858 2576.0858 2579.5758 2579.5758 2583.0657 - 2583.0657 2586.5557 2586.5557 2590.0456 2593.5456 2597.0356 2597.0356 2600.5255 2600.5255 2604.0155 2604.0155 2607.5054 2556.1361 2559.626 2559.626 2563.116 - 2563.116 2566.6059 2569.1059 2572.5959 2572.5959 2576.0858 2576.0858 2579.5758 2579.5758 2583.0657 2583.0657 2586.5557 2586.5557 2590.0456 2593.5456 2597.0356 - 2597.0356 2600.5255 2600.5255 2604.0155 2604.0155 2607.5054 2554.4301 2557.92 2557.92 2561.41 2561.41 2564.8999 2568.2333 2571.7232 2571.7232 2575.2132 - 2575.2132 2578.7031 2578.7031 2582.1931 2582.1931 2585.683 2585.683 2589.173 2596.173 2599.6629 2599.6629 2603.1529 2603.1529 2606.6428 2606.6428 2610.1328 - 2554.4301 2557.92 2557.92 2561.41 2561.41 2564.8999 2568.2333 2571.7232 2571.7232 2575.2132 2575.2132 2578.7031 2578.7031 2582.1931 2582.1931 2585.683 - 2585.683 2589.173 2596.173 2599.6629 2599.6629 2603.1529 2603.1529 2606.6428 2606.6428 2610.1328 2552.7241 2556.2141 2556.2141 2559.704 2559.704 2563.194 - 2567.3606 2570.8506 2570.8506 2574.3405 2574.3405 2577.8305 2577.8305 2581.3204 2581.3204 2584.8104 2584.8104 2588.3003 2598.8003 2602.2903 2602.2903 2605.7802 - 2605.7802 2609.2702 2609.2702 2612.7601 2547.7241 2551.2141 2551.2141 2554.704 2559.704 2563.194 2567.3606 2570.8506 2570.8506 2574.3405 2574.3405 2577.8305 - 2577.8305 2581.3204 2581.3204 2584.8104 2584.8104 2588.3003 2598.8003 2602.2903 2602.2903 2605.7802 2605.7802 2609.2702 2609.2702 2612.7601 2546.0181 2549.5081 - 2549.5081 2552.998 2557.998 2561.488 2566.488 2569.9779 2569.9779 2573.4679 2573.4679 2576.9578 2576.9578 2580.4478 2580.4478 2583.9377 2583.9377 2587.4277 - 2601.4277 2604.9176 2604.9176 2608.4076 2608.4076 2611.8975 2611.8975 2615.3875 2546.0181 2549.5081 2549.5081 2552.998 2557.998 2561.488 2566.488 2569.9779 - 2569.9779 2573.4679 2573.4679 2576.9578 2576.9578 2580.4478 2580.4478 2583.9377 2583.9377 2587.4277 2601.4277 2604.9176 2604.9176 2608.4076 2608.4076 2611.8975 - 2611.8975 2615.3875 2544.3121 2547.8021 2547.8021 2551.292 2556.292 2559.782 2565.6153 2569.1053 2569.1053 2572.5952 2572.5952 2576.0852 2576.0852 2579.5751 - 2579.5751 2583.0651 2583.0651 2586.555 2604.055 2607.545 2607.545 2611.0349 2611.0349 2614.5249 2614.5249 2618.0148 2544.3121 2547.8021 2547.8021 2551.292 - 2556.292 2559.782 2565.6153 2569.1053 2569.1053 2572.5952 2572.5952 2576.0852 2576.0852 2579.5751 2579.5751 2583.0651 2583.0651 2586.555 2604.055 2607.545 - 2607.545 2611.0349 2611.0349 2614.5249 2614.5249 2618.0148 2542.6062 2546.0961 2546.0961 2549.5861 2554.5861 2558.076 2564.7427 2568.2326 2568.2326 2571.7226 - 2571.7226 2575.2125 2575.2125 2578.7025 2578.7025 2582.1924 2582.1924 2585.6824 2606.6824 2610.1723 2610.1723 2613.6623 2613.6623 2617.1522 2617.1522 2620.6422 - 2542.6062 2546.0961 2546.0961 2549.5861 2554.5861 2558.076 2564.7427 2568.2326 2568.2326 2571.7226 2571.7226 2575.2125 2575.2125 2578.7025 2578.7025 2582.1924 - 2582.1924 2585.6824 2606.6824 2610.1723 2610.1723 2613.6623 2613.6623 2617.1522 2617.1522 2620.6422 2540.9002 2544.3901 2544.3901 2547.8801 2552.8801 2556.37 - 2563.87 2567.36 2567.36 2570.8499 2570.8499 2574.3399 2574.3399 2577.8298 2577.8298 2581.3198 2581.3198 2584.8097 2609.3097 2612.7997 2612.7997 2616.2896 - 2616.2896 2619.7796 2619.7796 2623.2695 2540.9002 2544.3901 2544.3901 2547.8801 2552.8801 2556.37 2563.87 2567.36 2567.36 2570.8499 2570.8499 2574.3399 - 2574.3399 2577.8298 2577.8298 2581.3198 2581.3198 2584.8097 2609.3097 2612.7997 2612.7997 2616.2896 2616.2896 2619.7796 2619.7796 2623.2695 2539.1942 2542.6841 - 2542.6841 2546.1741 2551.1741 2554.664 2562.9974 2566.4873 2566.4873 2569.9773 2569.9773 2573.4672 2573.4672 2576.9572 2576.9572 2580.4471 2580.4471 2583.9371 - 2611.9371 2615.427 2615.427 2618.917 2618.917 2622.4069 2622.4069 2625.8969 2539.1942 2542.6841 2542.6841 2546.1741 2551.1741 2554.664 2562.9974 2566.4873 - 2566.4873 2569.9773 2569.9773 2573.4672 2573.4672 2576.9572 2576.9572 2580.4471 2580.4471 2583.9371 2611.9371 2615.427 2615.427 2618.917 2618.917 2622.4069 - 2622.4069 2625.8969 2537.4882 2540.9781 2540.9781 2544.4681 2549.4681 2552.958 2562.1247 2565.6147 2565.6147 2569.1046 2569.1046 2572.5946 2572.5946 2576.0845 - 2576.0845 2579.5745 2579.5745 2583.0644 2614.5644 2618.0544 2618.0544 2621.5443 2621.5443 2625.0343 2625.0343 2628.5242 2537.4882 2540.9781 2540.9781 2544.4681 - 2549.4681 2552.958 2562.1247 2565.6147 2565.6147 2569.1046 2569.1046 2572.5946 2572.5946 2576.0845 2576.0845 2579.5745 2579.5745 2583.0644 2614.5644 2618.0544 - 2618.0544 2621.5443 2621.5443 2625.0343 2625.0343 2628.5242 2535.7822 2539.2722 2539.2722 2542.7621 2547.7621 2551.2521 2561.2521 2564.742 2564.742 2568.232 - 2568.232 2571.7219 2571.7219 2575.2119 2575.2119 2578.7018 2578.7018 2582.1918 2617.1918 2620.6817 2620.6817 2624.1717 2624.1717 2627.6616 2627.6616 2631.1516 - 2566.9806 2570.4705 2570.4705 2573.9605 2576.9605 2580.4504 2580.4504 2583.9404 2583.9404 2587.4303 2587.4303 2590.9203 2590.9203 2594.4102 2594.4102 2597.9002 - 2597.9002 2601.3901 2601.3901 2604.8801 2604.8801 2608.37 2608.37 2611.86 2611.86 2615.3499 2566.1079 2569.5979 2569.5979 2573.0878 2576.0878 2579.5778 - 2579.5778 2583.0677 2583.0677 2586.5577 2586.5577 2590.0476 2590.0476 2593.5376 2593.5376 2597.0275 2597.0275 2600.5175 2600.5175 2604.0074 2604.0074 2607.4974 - 2607.4974 2610.9873 2610.9873 2614.4773 2566.1079 2569.5979 2569.5979 2573.0878 2576.0878 2579.5778 2579.5778 2583.0677 2583.0677 2586.5577 2586.5577 2590.0476 - 2590.0476 2593.5376 2593.5376 2597.0275 2597.0275 2600.5175 2600.5175 2604.0074 2604.0074 2607.4974 2607.4974 2610.9873 2610.9873 2614.4773 2565.2353 2568.7252 - 2568.7252 2572.2152 2575.2152 2578.7051 2578.7051 2582.1951 2582.1951 2585.685 2585.685 2589.175 2589.175 2592.6649 2592.6649 2596.1549 2596.1549 2599.6448 - 2599.6448 2603.1348 2603.1348 2606.6247 2606.6247 2610.1147 2610.1147 2613.6046 2565.2353 2568.7252 2568.7252 2572.2152 2575.2152 2578.7051 2578.7051 2582.1951 - 2582.1951 2585.685 2585.685 2589.175 2589.175 2592.6649 2592.6649 2596.1549 2596.1549 2599.6448 2599.6448 2603.1348 2603.1348 2606.6247 2606.6247 2610.1147 - 2610.1147 2613.6046 2564.3626 2567.8526 2567.8526 2571.3425 2574.3425 2577.8325 2577.8325 2581.3224 2581.3224 2584.8124 2584.8124 2588.3023 2588.3023 2591.7923 - 2591.7923 2595.2822 2595.2822 2598.7722 2598.7722 2602.2621 2602.2621 2605.7521 2605.7521 2609.242 2609.242 2612.732 2564.3626 2567.8526 2567.8526 2571.3425 - 2574.3425 2577.8325 2577.8325 2581.3224 2581.3224 2584.8124 2584.8124 2588.3023 2588.3023 2591.7923 2591.7923 2595.2822 2595.2822 2598.7722 2598.7722 2602.2621 - 2602.2621 2605.7521 2605.7521 2609.242 2609.242 2612.732 2563.49 2566.9799 2566.9799 2570.4699 2573.4699 2576.9598 2576.9598 2580.4498 2580.4498 2583.9397 - 2583.9397 2587.4297 2587.4297 2590.9196 2590.9196 2594.4096 2594.4096 2597.8995 2597.8995 2601.3895 2601.3895 2604.8794 2604.8794 2608.3694 2608.3694 2611.8593 - 2563.49 2566.9799 2566.9799 2570.4699 2570.4699 2573.9598 2576.9598 2580.4498 2580.4498 2583.9397 2583.9397 2587.4297 2587.4297 2590.9196 2590.9196 2594.4096 - 2594.4096 2597.8995 2597.8995 2601.3895 2601.3895 2604.8794 2604.8794 2608.3694 2608.3694 2611.8593 2562.6173 2566.1073 2566.1073 2569.5972 2569.5972 2573.0872 - 2576.0872 2579.5771 2579.5771 2583.0671 2583.0671 2586.557 2586.557 2590.047 2590.047 2593.5369 2593.5369 2597.0269 2597.0269 2600.5168 2600.5168 2604.0068 - 2604.0068 2607.4967 2607.4967 2610.9867 2562.6173 2566.1073 2566.1073 2569.5972 2569.5972 2573.0872 2576.0872 2579.5771 2579.5771 2583.0671 2583.0671 2586.557 - 2586.557 2590.047 2590.047 2593.5369 2593.5369 2597.0269 2597.0269 2600.5168 2600.5168 2604.0068 2604.0068 2607.4967 2607.4967 2610.9867 2561.7447 2565.2346 - 2565.2346 2568.7246 2568.7246 2572.2145 2575.2145 2578.7045 2578.7045 2582.1944 2582.1944 2585.6844 2585.6844 2589.1743 2589.1743 2592.6643 2592.6643 2596.1542 - 2596.1542 2599.6442 2599.6442 2603.1341 2603.1341 2606.6241 2606.6241 2610.114 2561.7447 2565.2346 2565.2346 2568.7246 2568.7246 2572.2145 2575.2145 2578.7045 - 2578.7045 2582.1944 2582.1944 2585.6844 2585.6844 2589.1743 2589.1743 2592.6643 2592.6643 2596.1542 2596.1542 2599.6442 2599.6442 2603.1341 2603.1341 2606.6241 - 2606.6241 2610.114 2560.872 2564.362 2564.362 2567.8519 2567.8519 2571.3419 2574.3419 2577.8318 2577.8318 2581.3218 2581.3218 2584.8117 2584.8117 2588.3017 - 2588.3017 2591.7916 2591.7916 2595.2816 2595.2816 2598.7715 2598.7715 2602.2615 2602.2615 2605.7514 2605.7514 2609.2414 2560.872 2564.362 2564.362 2567.8519 - 2567.8519 2571.3419 2574.3419 2577.8318 2577.8318 2581.3218 2581.3218 2584.8117 2584.8117 2588.3017 2588.3017 2591.7916 2591.7916 2595.2816 2595.2816 2598.7715 - 2598.7715 2602.2615 2602.2615 2605.7514 2605.7514 2609.2414 2559.9994 2563.4893 2563.4893 2566.9793 2566.9793 2570.4692 2573.4692 2576.9592 2576.9592 2580.4491 - 2580.4491 2583.9391 2583.9391 2587.429 2587.429 2590.919 2590.919 2594.4089 2594.4089 2597.8989 2597.8989 2601.3888 2601.3888 2604.8788 2604.8788 2608.3687 - 2562.9994 2566.4893 2566.4893 2569.9793 2569.9793 2573.4692 2573.4692 2576.9592 2576.9592 2580.4491 2580.4491 2583.9391 2583.9391 2587.429 2587.429 2590.919 - 2590.919 2594.4089 2594.4089 2597.8989 2597.8989 2601.3888 2601.3888 2604.8788 2604.8788 2608.3687 2562.1267 2565.6167 2565.6167 2569.1066 2569.1066 2572.5965 - 2572.5965 2576.0865 2576.0865 2579.5764 2579.5764 2583.0664 2583.0664 2586.5563 2586.5563 2590.0463 2590.0463 2593.5362 2593.5362 2597.0262 2597.0262 2600.5161 - 2600.5161 2604.0061 2604.0061 2607.496 2562.1267 2565.6167 2565.6167 2569.1066 2569.1066 2572.5965 2572.5965 2576.0865 2576.0865 2579.5764 2579.5764 2583.0664 - 2583.0664 2586.5563 2586.5563 2590.0463 2590.0463 2593.5362 2593.5362 2597.0262 2597.0262 2600.5161 2600.5161 2604.0061 2604.0061 2607.496 2561.254 2564.744 - 2564.744 2568.2339 2568.2339 2571.7239 2571.7239 2575.2138 2575.2138 2578.7038 2578.7038 2582.1937 2582.1937 2585.6837 2585.6837 2589.1736 2589.1736 2592.6636 - 2592.6636 2596.1535 2596.1535 2599.6435 2599.6435 2603.1334 2603.1334 2606.6234 2561.254 2564.744 2564.744 2568.2339 2568.2339 2571.7239 2571.7239 2575.2138 - 2575.2138 2578.7038 2578.7038 2582.1937 2582.1937 2585.6837 2585.6837 2589.1736 2589.1736 2592.6636 2592.6636 2596.1535 2596.1535 2599.6435 2599.6435 2603.1334 - 2603.1334 2606.6234 2559.5481 2563.038 2563.038 2566.528 2566.528 2570.0179 2570.8512 2574.3412 2574.3412 2577.8311 2577.8311 2581.3211 2581.3211 2584.811 - 2584.811 2588.301 2588.301 2591.7909 2591.7909 2595.2809 2595.2809 2598.7708 2598.7708 2602.2608 2602.2608 2605.7507 2559.5481 2563.038 2563.038 2566.528 - 2566.528 2570.0179 2570.8512 2574.3412 2574.3412 2577.8311 2577.8311 2581.3211 2581.3211 2584.811 2584.811 2588.301 2588.301 2591.7909 2591.7909 2595.2809 - 2595.2809 2598.7708 2598.7708 2602.2608 2602.2608 2605.7507 2557.8421 2561.332 2561.332 2564.822 2564.822 2568.3119 2569.9786 2573.4685 2573.4685 2576.9585 - 2576.9585 2580.4484 2580.4484 2583.9384 2583.9384 2587.4283 2587.4283 2590.9183 2590.9183 2594.4082 2594.4082 2597.8982 2597.8982 2601.3881 2601.3881 2604.8781 - 2557.8421 2561.332 2561.332 2564.822 2564.822 2568.3119 2569.9786 2573.4685 2573.4685 2576.9585 2576.9585 2580.4484 2580.4484 2583.9384 2583.9384 2587.4283 - 2587.4283 2590.9183 2590.9183 2594.4082 2594.4082 2597.8982 2597.8982 2601.3881 2601.3881 2604.8781 2556.1361 2559.626 2559.626 2563.116 2563.116 2566.6059 - 2569.1059 2572.5959 2572.5959 2576.0858 2576.0858 2579.5758 2579.5758 2583.0657 2583.0657 2586.5557 2586.5557 2590.0456 2593.5456 2597.0356 2597.0356 2600.5255 - 2600.5255 2604.0155 2604.0155 2607.5054 2556.1361 2559.626 2559.626 2563.116 2563.116 2566.6059 2569.1059 2572.5959 2572.5959 2576.0858 2576.0858 2579.5758 - 2579.5758 2583.0657 2583.0657 2586.5557 2586.5557 2590.0456 2593.5456 2597.0356 2597.0356 2600.5255 2600.5255 2604.0155 2604.0155 2607.5054 2554.4301 2557.92 - 2557.92 2561.41 2561.41 2564.8999 2568.2333 2571.7232 2571.7232 2575.2132 2575.2132 2578.7031 2578.7031 2582.1931 2582.1931 2585.683 2585.683 2589.173 - 2596.173 2599.6629 2599.6629 2603.1529 2603.1529 2606.6428 2606.6428 2610.1328 2554.4301 2557.92 2557.92 2561.41 2561.41 2564.8999 2568.2333 2571.7232 - 2571.7232 2575.2132 2575.2132 2578.7031 2578.7031 2582.1931 2582.1931 2585.683 2585.683 2589.173 2596.173 2599.6629 2599.6629 2603.1529 2603.1529 2606.6428 - 2606.6428 2610.1328 2552.7241 2556.2141 2556.2141 2559.704 2559.704 2563.194 2567.3606 2570.8506 2570.8506 2574.3405 2574.3405 2577.8305 2577.8305 2581.3204 - 2581.3204 2584.8104 2584.8104 2588.3003 2598.8003 2602.2903 2602.2903 2605.7802 2605.7802 2609.2702 2609.2702 2612.7601 2547.7241 2551.2141 2551.2141 2554.704 - 2559.704 2563.194 2567.3606 2570.8506 2570.8506 2574.3405 2574.3405 2577.8305 2577.8305 2581.3204 2581.3204 2584.8104 2584.8104 2588.3003 2598.8003 2602.2903 - 2602.2903 2605.7802 2605.7802 2609.2702 2609.2702 2612.7601 2546.0181 2549.5081 2549.5081 2552.998 2557.998 2561.488 2566.488 2569.9779 2569.9779 2573.4679 - 2573.4679 2576.9578 2576.9578 2580.4478 2580.4478 2583.9377 2583.9377 2587.4277 2601.4277 2604.9176 2604.9176 2608.4076 2608.4076 2611.8975 2611.8975 2615.3875 - 2546.0181 2549.5081 2549.5081 2552.998 2557.998 2561.488 2566.488 2569.9779 2569.9779 2573.4679 2573.4679 2576.9578 2576.9578 2580.4478 2580.4478 2583.9377 - 2583.9377 2587.4277 2601.4277 2604.9176 2604.9176 2608.4076 2608.4076 2611.8975 2611.8975 2615.3875 2544.3121 2547.8021 2547.8021 2551.292 2556.292 2559.782 - 2565.6153 2569.1053 2569.1053 2572.5952 2572.5952 2576.0852 2576.0852 2579.5751 2579.5751 2583.0651 2583.0651 2586.555 2604.055 2607.545 2607.545 2611.0349 - 2611.0349 2614.5249 2614.5249 2618.0148 2544.3121 2547.8021 2547.8021 2551.292 2556.292 2559.782 2565.6153 2569.1053 2569.1053 2572.5952 2572.5952 2576.0852 - 2576.0852 2579.5751 2579.5751 2583.0651 2583.0651 2586.555 2604.055 2607.545 2607.545 2611.0349 2611.0349 2614.5249 2614.5249 2618.0148 2542.6062 2546.0961 - 2546.0961 2549.5861 2554.5861 2558.076 2564.7427 2568.2326 2568.2326 2571.7226 2571.7226 2575.2125 2575.2125 2578.7025 2578.7025 2582.1924 2582.1924 2585.6824 - 2606.6824 2610.1723 2610.1723 2613.6623 2613.6623 2617.1522 2617.1522 2620.6422 2542.6062 2546.0961 2546.0961 2549.5861 2554.5861 2558.076 2564.7427 2568.2326 - 2568.2326 2571.7226 2571.7226 2575.2125 2575.2125 2578.7025 2578.7025 2582.1924 2582.1924 2585.6824 2606.6824 2610.1723 2610.1723 2613.6623 2613.6623 2617.1522 - 2617.1522 2620.6422 2540.9002 2544.3901 2544.3901 2547.8801 2552.8801 2556.37 2563.87 2567.36 2567.36 2570.8499 2570.8499 2574.3399 2574.3399 2577.8298 - 2577.8298 2581.3198 2581.3198 2584.8097 2609.3097 2612.7997 2612.7997 2616.2896 2616.2896 2619.7796 2619.7796 2623.2695 2540.9002 2544.3901 2544.3901 2547.8801 - 2552.8801 2556.37 2563.87 2567.36 2567.36 2570.8499 2570.8499 2574.3399 2574.3399 2577.8298 2577.8298 2581.3198 2581.3198 2584.8097 2609.3097 2612.7997 - 2612.7997 2616.2896 2616.2896 2619.7796 2619.7796 2623.2695 2539.1942 2542.6841 2542.6841 2546.1741 2551.1741 2554.664 2562.9974 2566.4873 2566.4873 2569.9773 - 2569.9773 2573.4672 2573.4672 2576.9572 2576.9572 2580.4471 2580.4471 2583.9371 2611.9371 2615.427 2615.427 2618.917 2618.917 2622.4069 2622.4069 2625.8969 - 2539.1942 2542.6841 2542.6841 2546.1741 2551.1741 2554.664 2562.9974 2566.4873 2566.4873 2569.9773 2569.9773 2573.4672 2573.4672 2576.9572 2576.9572 2580.4471 - 2580.4471 2583.9371 2611.9371 2615.427 2615.427 2618.917 2618.917 2622.4069 2622.4069 2625.8969 2537.4882 2540.9781 2540.9781 2544.4681 2549.4681 2552.958 - 2562.1247 2565.6147 2565.6147 2569.1046 2569.1046 2572.5946 2572.5946 2576.0845 2576.0845 2579.5745 2579.5745 2583.0644 2614.5644 2618.0544 2618.0544 2621.5443 - 2621.5443 2625.0343 2625.0343 2628.5242 2537.4882 2540.9781 2540.9781 2544.4681 2549.4681 2552.958 2562.1247 2565.6147 2565.6147 2569.1046 2569.1046 2572.5946 - 2572.5946 2576.0845 2576.0845 2579.5745 2579.5745 2583.0644 2614.5644 2618.0544 2618.0544 2621.5443 2621.5443 2625.0343 2625.0343 2628.5242 2535.7822 2539.2722 - 2539.2722 2542.7621 2547.7621 2551.2521 2561.2521 2564.742 2564.742 2568.232 2568.232 2571.7219 2571.7219 2575.2119 2575.2119 2578.7018 2578.7018 2582.1918 - 2617.1918 2620.6817 2620.6817 2624.1717 2624.1717 2627.6616 2627.6616 2631.1516 2576.9741 2580.4641 2580.4641 2583.954 2586.954 2590.444 2590.444 2593.9339 - 2593.9339 2597.4239 2597.4239 2600.9138 2600.9138 2604.4038 2604.4038 2607.8937 2607.8937 2611.3837 2611.3837 2614.8736 2614.8736 2618.3636 2618.3636 2621.8535 - 2621.8535 2625.3435 2576.1015 2579.5914 2579.5914 2583.0814 2586.0814 2589.5713 2589.5713 2593.0613 2593.0613 2596.5512 2596.5512 2600.0412 2600.0412 2603.5311 - 2603.5311 2607.0211 2607.0211 2610.511 2610.511 2614.001 2614.001 2617.4909 2617.4909 2620.9809 2620.9809 2624.4708 2576.1015 2579.5914 2579.5914 2583.0814 - 2586.0814 2589.5713 2589.5713 2593.0613 2593.0613 2596.5512 2596.5512 2600.0412 2600.0412 2603.5311 2603.5311 2607.0211 2607.0211 2610.511 2610.511 2614.001 - 2614.001 2617.4909 2617.4909 2620.9809 2620.9809 2624.4708 2575.2288 2578.7188 2578.7188 2582.2087 2585.2087 2588.6987 2588.6987 2592.1886 2592.1886 2595.6786 - 2595.6786 2599.1685 2599.1685 2602.6585 2602.6585 2606.1484 2606.1484 2609.6383 2609.6383 2613.1283 2613.1283 2616.6182 2616.6182 2620.1082 2620.1082 2623.5981 - 2575.2288 2578.7188 2578.7188 2582.2087 2585.2087 2588.6987 2588.6987 2592.1886 2592.1886 2595.6786 2595.6786 2599.1685 2599.1685 2602.6585 2602.6585 2606.1484 - 2606.1484 2609.6383 2609.6383 2613.1283 2613.1283 2616.6182 2616.6182 2620.1082 2620.1082 2623.5981 2574.3561 2577.8461 2577.8461 2581.336 2584.336 2587.826 - 2587.826 2591.3159 2591.3159 2594.8059 2594.8059 2598.2958 2598.2958 2601.7858 2601.7858 2605.2757 2605.2757 2608.7657 2608.7657 2612.2556 2612.2556 2615.7456 - 2615.7456 2619.2355 2619.2355 2622.7255 2574.3561 2577.8461 2577.8461 2581.336 2584.336 2587.826 2587.826 2591.3159 2591.3159 2594.8059 2594.8059 2598.2958 - 2598.2958 2601.7858 2601.7858 2605.2757 2605.2757 2608.7657 2608.7657 2612.2556 2612.2556 2615.7456 2615.7456 2619.2355 2619.2355 2622.7255 2573.4835 2576.9734 - 2576.9734 2580.4634 2583.4634 2586.9533 2586.9533 2590.4433 2590.4433 2593.9332 2593.9332 2597.4232 2597.4232 2600.9131 2600.9131 2604.4031 2604.4031 2607.893 - 2607.893 2611.383 2611.383 2614.8729 2614.8729 2618.3629 2618.3629 2621.8528 2573.4835 2576.9734 2576.9734 2580.4634 2580.4634 2583.9533 2586.9533 2590.4433 - 2590.4433 2593.9332 2593.9332 2597.4232 2597.4232 2600.9131 2600.9131 2604.4031 2604.4031 2607.893 2607.893 2611.383 2611.383 2614.8729 2614.8729 2618.3629 - 2618.3629 2621.8528 2572.6108 2576.1008 2576.1008 2579.5907 2579.5907 2583.0807 2586.0807 2589.5706 2589.5706 2593.0606 2593.0606 2596.5505 2596.5505 2600.0405 - 2600.0405 2603.5304 2603.5304 2607.0204 2607.0204 2610.5103 2610.5103 2614.0003 2614.0003 2617.4902 2617.4902 2620.9802 2572.6108 2576.1008 2576.1008 2579.5907 - 2579.5907 2583.0807 2586.0807 2589.5706 2589.5706 2593.0606 2593.0606 2596.5505 2596.5505 2600.0405 2600.0405 2603.5304 2603.5304 2607.0204 2607.0204 2610.5103 - 2610.5103 2614.0003 2614.0003 2617.4902 2617.4902 2620.9802 2571.7382 2575.2281 2575.2281 2578.7181 2578.7181 2582.208 2585.208 2588.698 2588.698 2592.1879 - 2592.1879 2595.6779 2595.6779 2599.1678 2599.1678 2602.6578 2602.6578 2606.1477 2606.1477 2609.6377 2609.6377 2613.1276 2613.1276 2616.6176 2616.6176 2620.1075 - 2571.7382 2575.2281 2575.2281 2578.7181 2578.7181 2582.208 2585.208 2588.698 2588.698 2592.1879 2592.1879 2595.6779 2595.6779 2599.1678 2599.1678 2602.6578 - 2602.6578 2606.1477 2606.1477 2609.6377 2609.6377 2613.1276 2613.1276 2616.6176 2616.6176 2620.1075 2570.8655 2574.3555 2574.3555 2577.8454 2577.8454 2581.3354 - 2584.3354 2587.8253 2587.8253 2591.3153 2591.3153 2594.8052 2594.8052 2598.2952 2598.2952 2601.7851 2601.7851 2605.2751 2605.2751 2608.765 2608.765 2612.255 - 2612.255 2615.7449 2615.7449 2619.2349 2570.8655 2574.3555 2574.3555 2577.8454 2577.8454 2581.3354 2584.3354 2587.8253 2587.8253 2591.3153 2591.3153 2594.8052 - 2594.8052 2598.2952 2598.2952 2601.7851 2601.7851 2605.2751 2605.2751 2608.765 2608.765 2612.255 2612.255 2615.7449 2615.7449 2619.2349 2569.9929 2573.4828 - 2573.4828 2576.9728 2576.9728 2580.4627 2583.4627 2586.9527 2586.9527 2590.4426 2590.4426 2593.9326 2593.9326 2597.4225 2597.4225 2600.9125 2600.9125 2604.4024 - 2604.4024 2607.8924 2607.8924 2611.3823 2611.3823 2614.8723 2614.8723 2618.3622 2572.9929 2576.4828 2576.4828 2579.9728 2579.9728 2583.4627 2583.4627 2586.9527 - 2586.9527 2590.4426 2590.4426 2593.9326 2593.9326 2597.4225 2597.4225 2600.9125 2600.9125 2604.4024 2604.4024 2607.8924 2607.8924 2611.3823 2611.3823 2614.8723 - 2614.8723 2618.3622 2572.1202 2575.6102 2575.6102 2579.1001 2579.1001 2582.5901 2582.5901 2586.08 2586.08 2589.57 2589.57 2593.0599 2593.0599 2596.5499 - 2596.5499 2600.0398 2600.0398 2603.5298 2603.5298 2607.0197 2607.0197 2610.5097 2610.5097 2613.9996 2613.9996 2617.4896 2572.1202 2575.6102 2575.6102 2579.1001 - 2579.1001 2582.5901 2582.5901 2586.08 2586.08 2589.57 2589.57 2593.0599 2593.0599 2596.5499 2596.5499 2600.0398 2600.0398 2603.5298 2603.5298 2607.0197 - 2607.0197 2610.5097 2610.5097 2613.9996 2613.9996 2617.4896 2571.2476 2574.7375 2574.7375 2578.2275 2578.2275 2581.7174 2581.7174 2585.2074 2585.2074 2588.6973 - 2588.6973 2592.1873 2592.1873 2595.6772 2595.6772 2599.1672 2599.1672 2602.6571 2602.6571 2606.1471 2606.1471 2609.637 2609.637 2613.127 2613.127 2616.6169 - 2571.2476 2574.7375 2574.7375 2578.2275 2578.2275 2581.7174 2581.7174 2585.2074 2585.2074 2588.6973 2588.6973 2592.1873 2592.1873 2595.6772 2595.6772 2599.1672 - 2599.1672 2602.6571 2602.6571 2606.1471 2606.1471 2609.637 2609.637 2613.127 2613.127 2616.6169 2569.5416 2573.0315 2573.0315 2576.5215 2576.5215 2580.0114 - 2580.8448 2584.3347 2584.3347 2587.8247 2587.8247 2591.3146 2591.3146 2594.8046 2594.8046 2598.2945 2598.2945 2601.7845 2601.7845 2605.2744 2605.2744 2608.7644 - 2608.7644 2612.2543 2612.2543 2615.7443 2569.5416 2573.0315 2573.0315 2576.5215 2576.5215 2580.0114 2580.8448 2584.3347 2584.3347 2587.8247 2587.8247 2591.3146 - 2591.3146 2594.8046 2594.8046 2598.2945 2598.2945 2601.7845 2601.7845 2605.2744 2605.2744 2608.7644 2608.7644 2612.2543 2612.2543 2615.7443 2567.8356 2571.3256 - 2571.3256 2574.8155 2574.8155 2578.3054 2579.9721 2583.4621 2583.4621 2586.952 2586.952 2590.442 2590.442 2593.9319 2593.9319 2597.4219 2597.4219 2600.9118 - 2600.9118 2604.4018 2604.4018 2607.8917 2607.8917 2611.3817 2611.3817 2614.8716 2567.8356 2571.3256 2571.3256 2574.8155 2574.8155 2578.3054 2579.9721 2583.4621 - 2583.4621 2586.952 2586.952 2590.442 2590.442 2593.9319 2593.9319 2597.4219 2597.4219 2600.9118 2600.9118 2604.4018 2604.4018 2607.8917 2607.8917 2611.3817 - 2611.3817 2614.8716 2566.1296 2569.6196 2569.6196 2573.1095 2573.1095 2576.5995 2579.0995 2582.5894 2582.5894 2586.0794 2586.0794 2589.5693 2589.5693 2593.0593 - 2593.0593 2596.5492 2596.5492 2600.0392 2603.5392 2607.0291 2607.0291 2610.5191 2610.5191 2614.009 2614.009 2617.499 2566.1296 2569.6196 2569.6196 2573.1095 - 2573.1095 2576.5995 2579.0995 2582.5894 2582.5894 2586.0794 2586.0794 2589.5693 2589.5693 2593.0593 2593.0593 2596.5492 2596.5492 2600.0392 2603.5392 2607.0291 - 2607.0291 2610.5191 2610.5191 2614.009 2614.009 2617.499 2564.4236 2567.9136 2567.9136 2571.4035 2571.4035 2574.8935 2578.2268 2581.7168 2581.7168 2585.2067 - 2585.2067 2588.6967 2588.6967 2592.1866 2592.1866 2595.6766 2595.6766 2599.1665 2606.1665 2609.6565 2609.6565 2613.1464 2613.1464 2616.6364 2616.6364 2620.1263 - 2564.4236 2567.9136 2567.9136 2571.4035 2571.4035 2574.8935 2578.2268 2581.7168 2581.7168 2585.2067 2585.2067 2588.6967 2588.6967 2592.1866 2592.1866 2595.6766 - 2595.6766 2599.1665 2606.1665 2609.6565 2609.6565 2613.1464 2613.1464 2616.6364 2616.6364 2620.1263 2562.7176 2566.2076 2566.2076 2569.6975 2569.6975 2573.1875 - 2577.3542 2580.8441 2580.8441 2584.3341 2584.3341 2587.824 2587.824 2591.314 2591.314 2594.8039 2594.8039 2598.2939 2608.7939 2612.2838 2612.2838 2615.7738 - 2615.7738 2619.2637 2619.2637 2622.7537 2557.7176 2561.2076 2561.2076 2564.6975 2569.6975 2573.1875 2577.3542 2580.8441 2580.8441 2584.3341 2584.3341 2587.824 - 2587.824 2591.314 2591.314 2594.8039 2594.8039 2598.2939 2608.7939 2612.2838 2612.2838 2615.7738 2615.7738 2619.2637 2619.2637 2622.7537 2556.0117 2559.5016 - 2559.5016 2562.9916 2567.9916 2571.4815 2576.4815 2579.9715 2579.9715 2583.4614 2583.4614 2586.9514 2586.9514 2590.4413 2590.4413 2593.9313 2593.9313 2597.4212 - 2611.4212 2614.9111 2614.9111 2618.4011 2618.4011 2621.891 2621.891 2625.381 2556.0117 2559.5016 2559.5016 2562.9916 2567.9916 2571.4815 2576.4815 2579.9715 - 2579.9715 2583.4614 2583.4614 2586.9514 2586.9514 2590.4413 2590.4413 2593.9313 2593.9313 2597.4212 2611.4212 2614.9111 2614.9111 2618.4011 2618.4011 2621.891 - 2621.891 2625.381 2554.3057 2557.7956 2557.7956 2561.2856 2566.2856 2569.7755 2575.6088 2579.0988 2579.0988 2582.5887 2582.5887 2586.0787 2586.0787 2589.5686 - 2589.5686 2593.0586 2593.0586 2596.5485 2614.0485 2617.5385 2617.5385 2621.0284 2621.0284 2624.5184 2624.5184 2628.0083 2554.3057 2557.7956 2557.7956 2561.2856 - 2566.2856 2569.7755 2575.6088 2579.0988 2579.0988 2582.5887 2582.5887 2586.0787 2586.0787 2589.5686 2589.5686 2593.0586 2593.0586 2596.5485 2614.0485 2617.5385 - 2617.5385 2621.0284 2621.0284 2624.5184 2624.5184 2628.0083 2552.5997 2556.0896 2556.0896 2559.5796 2564.5796 2568.0695 2574.7362 2578.2261 2578.2261 2581.7161 - 2581.7161 2585.206 2585.206 2588.696 2588.696 2592.1859 2592.1859 2595.6759 2616.6759 2620.1658 2620.1658 2623.6558 2623.6558 2627.1457 2627.1457 2630.6357 - 2552.5997 2556.0896 2556.0896 2559.5796 2564.5796 2568.0695 2574.7362 2578.2261 2578.2261 2581.7161 2581.7161 2585.206 2585.206 2588.696 2588.696 2592.1859 - 2592.1859 2595.6759 2616.6759 2620.1658 2620.1658 2623.6558 2623.6558 2627.1457 2627.1457 2630.6357 2550.8937 2554.3836 2554.3836 2557.8736 2562.8736 2566.3635 - 2573.8635 2577.3535 2577.3535 2580.8434 2580.8434 2584.3334 2584.3334 2587.8233 2587.8233 2591.3133 2591.3133 2594.8032 2619.3032 2622.7932 2622.7932 2626.2831 - 2626.2831 2629.7731 2629.7731 2633.263 2550.8937 2554.3836 2554.3836 2557.8736 2562.8736 2566.3635 2573.8635 2577.3535 2577.3535 2580.8434 2580.8434 2584.3334 - 2584.3334 2587.8233 2587.8233 2591.3133 2591.3133 2594.8032 2619.3032 2622.7932 2622.7932 2626.2831 2626.2831 2629.7731 2629.7731 2633.263 2549.1877 2552.6777 - 2552.6777 2556.1676 2561.1676 2564.6576 2572.9909 2576.4808 2576.4808 2579.9708 2579.9708 2583.4607 2583.4607 2586.9507 2586.9507 2590.4406 2590.4406 2593.9306 - 2621.9306 2625.4205 2625.4205 2628.9105 2628.9105 2632.4004 2632.4004 2635.8904 2549.1877 2552.6777 2552.6777 2556.1676 2561.1676 2564.6576 2572.9909 2576.4808 - 2576.4808 2579.9708 2579.9708 2583.4607 2583.4607 2586.9507 2586.9507 2590.4406 2590.4406 2593.9306 2621.9306 2625.4205 2625.4205 2628.9105 2628.9105 2632.4004 - 2632.4004 2635.8904 2547.4817 2550.9717 2550.9717 2554.4616 2559.4616 2562.9516 2572.1182 2575.6082 2575.6082 2579.0981 2579.0981 2582.5881 2582.5881 2586.078 - 2586.078 2589.568 2589.568 2593.0579 2624.5579 2628.0479 2628.0479 2631.5378 2631.5378 2635.0278 2635.0278 2638.5177 2547.4817 2550.9717 2550.9717 2554.4616 - 2559.4616 2562.9516 2572.1182 2575.6082 2575.6082 2579.0981 2579.0981 2582.5881 2582.5881 2586.078 2586.078 2589.568 2589.568 2593.0579 2624.5579 2628.0479 - 2628.0479 2631.5378 2631.5378 2635.0278 2635.0278 2638.5177 2545.7757 2549.2657 2549.2657 2552.7556 2557.7556 2561.2456 2571.2456 2574.7355 2574.7355 2578.2255 - 2578.2255 2581.7154 2581.7154 2585.2054 2585.2054 2588.6953 2588.6953 2592.1853 2627.1853 2630.6752 2630.6752 2634.1652 2634.1652 2637.6551 2637.6551 2641.1451 - 2576.9741 2580.4641 2580.4641 2583.954 2586.954 2590.444 2590.444 2593.9339 2593.9339 2597.4239 2597.4239 2600.9138 2600.9138 2604.4038 2604.4038 2607.8937 - 2607.8937 2611.3837 2611.3837 2614.8736 2614.8736 2618.3636 2618.3636 2621.8535 2621.8535 2625.3435 2576.1015 2579.5914 2579.5914 2583.0814 2586.0814 2589.5713 - 2589.5713 2593.0613 2593.0613 2596.5512 2596.5512 2600.0412 2600.0412 2603.5311 2603.5311 2607.0211 2607.0211 2610.511 2610.511 2614.001 2614.001 2617.4909 - 2617.4909 2620.9809 2620.9809 2624.4708 2576.1015 2579.5914 2579.5914 2583.0814 2586.0814 2589.5713 2589.5713 2593.0613 2593.0613 2596.5512 2596.5512 2600.0412 - 2600.0412 2603.5311 2603.5311 2607.0211 2607.0211 2610.511 2610.511 2614.001 2614.001 2617.4909 2617.4909 2620.9809 2620.9809 2624.4708 2575.2288 2578.7188 - 2578.7188 2582.2087 2585.2087 2588.6987 2588.6987 2592.1886 2592.1886 2595.6786 2595.6786 2599.1685 2599.1685 2602.6585 2602.6585 2606.1484 2606.1484 2609.6383 - 2609.6383 2613.1283 2613.1283 2616.6182 2616.6182 2620.1082 2620.1082 2623.5981 2575.2288 2578.7188 2578.7188 2582.2087 2585.2087 2588.6987 2588.6987 2592.1886 - 2592.1886 2595.6786 2595.6786 2599.1685 2599.1685 2602.6585 2602.6585 2606.1484 2606.1484 2609.6383 2609.6383 2613.1283 2613.1283 2616.6182 2616.6182 2620.1082 - 2620.1082 2623.5981 2574.3561 2577.8461 2577.8461 2581.336 2584.336 2587.826 2587.826 2591.3159 2591.3159 2594.8059 2594.8059 2598.2958 2598.2958 2601.7858 - 2601.7858 2605.2757 2605.2757 2608.7657 2608.7657 2612.2556 2612.2556 2615.7456 2615.7456 2619.2355 2619.2355 2622.7255 2574.3561 2577.8461 2577.8461 2581.336 - 2584.336 2587.826 2587.826 2591.3159 2591.3159 2594.8059 2594.8059 2598.2958 2598.2958 2601.7858 2601.7858 2605.2757 2605.2757 2608.7657 2608.7657 2612.2556 - 2612.2556 2615.7456 2615.7456 2619.2355 2619.2355 2622.7255 2573.4835 2576.9734 2576.9734 2580.4634 2583.4634 2586.9533 2586.9533 2590.4433 2590.4433 2593.9332 - 2593.9332 2597.4232 2597.4232 2600.9131 2600.9131 2604.4031 2604.4031 2607.893 2607.893 2611.383 2611.383 2614.8729 2614.8729 2618.3629 2618.3629 2621.8528 - 2573.4835 2576.9734 2576.9734 2580.4634 2580.4634 2583.9533 2586.9533 2590.4433 2590.4433 2593.9332 2593.9332 2597.4232 2597.4232 2600.9131 2600.9131 2604.4031 - 2604.4031 2607.893 2607.893 2611.383 2611.383 2614.8729 2614.8729 2618.3629 2618.3629 2621.8528 2572.6108 2576.1008 2576.1008 2579.5907 2579.5907 2583.0807 - 2586.0807 2589.5706 2589.5706 2593.0606 2593.0606 2596.5505 2596.5505 2600.0405 2600.0405 2603.5304 2603.5304 2607.0204 2607.0204 2610.5103 2610.5103 2614.0003 - 2614.0003 2617.4902 2617.4902 2620.9802 2572.6108 2576.1008 2576.1008 2579.5907 2579.5907 2583.0807 2586.0807 2589.5706 2589.5706 2593.0606 2593.0606 2596.5505 - 2596.5505 2600.0405 2600.0405 2603.5304 2603.5304 2607.0204 2607.0204 2610.5103 2610.5103 2614.0003 2614.0003 2617.4902 2617.4902 2620.9802 2571.7382 2575.2281 - 2575.2281 2578.7181 2578.7181 2582.208 2585.208 2588.698 2588.698 2592.1879 2592.1879 2595.6779 2595.6779 2599.1678 2599.1678 2602.6578 2602.6578 2606.1477 - 2606.1477 2609.6377 2609.6377 2613.1276 2613.1276 2616.6176 2616.6176 2620.1075 2571.7382 2575.2281 2575.2281 2578.7181 2578.7181 2582.208 2585.208 2588.698 - 2588.698 2592.1879 2592.1879 2595.6779 2595.6779 2599.1678 2599.1678 2602.6578 2602.6578 2606.1477 2606.1477 2609.6377 2609.6377 2613.1276 2613.1276 2616.6176 - 2616.6176 2620.1075 2570.8655 2574.3555 2574.3555 2577.8454 2577.8454 2581.3354 2584.3354 2587.8253 2587.8253 2591.3153 2591.3153 2594.8052 2594.8052 2598.2952 - 2598.2952 2601.7851 2601.7851 2605.2751 2605.2751 2608.765 2608.765 2612.255 2612.255 2615.7449 2615.7449 2619.2349 2570.8655 2574.3555 2574.3555 2577.8454 - 2577.8454 2581.3354 2584.3354 2587.8253 2587.8253 2591.3153 2591.3153 2594.8052 2594.8052 2598.2952 2598.2952 2601.7851 2601.7851 2605.2751 2605.2751 2608.765 - 2608.765 2612.255 2612.255 2615.7449 2615.7449 2619.2349 2569.9929 2573.4828 2573.4828 2576.9728 2576.9728 2580.4627 2583.4627 2586.9527 2586.9527 2590.4426 - 2590.4426 2593.9326 2593.9326 2597.4225 2597.4225 2600.9125 2600.9125 2604.4024 2604.4024 2607.8924 2607.8924 2611.3823 2611.3823 2614.8723 2614.8723 2618.3622 - 2572.9929 2576.4828 2576.4828 2579.9728 2579.9728 2583.4627 2583.4627 2586.9527 2586.9527 2590.4426 2590.4426 2593.9326 2593.9326 2597.4225 2597.4225 2600.9125 - 2600.9125 2604.4024 2604.4024 2607.8924 2607.8924 2611.3823 2611.3823 2614.8723 2614.8723 2618.3622 2572.1202 2575.6102 2575.6102 2579.1001 2579.1001 2582.5901 - 2582.5901 2586.08 2586.08 2589.57 2589.57 2593.0599 2593.0599 2596.5499 2596.5499 2600.0398 2600.0398 2603.5298 2603.5298 2607.0197 2607.0197 2610.5097 - 2610.5097 2613.9996 2613.9996 2617.4896 2572.1202 2575.6102 2575.6102 2579.1001 2579.1001 2582.5901 2582.5901 2586.08 2586.08 2589.57 2589.57 2593.0599 - 2593.0599 2596.5499 2596.5499 2600.0398 2600.0398 2603.5298 2603.5298 2607.0197 2607.0197 2610.5097 2610.5097 2613.9996 2613.9996 2617.4896 2571.2476 2574.7375 - 2574.7375 2578.2275 2578.2275 2581.7174 2581.7174 2585.2074 2585.2074 2588.6973 2588.6973 2592.1873 2592.1873 2595.6772 2595.6772 2599.1672 2599.1672 2602.6571 - 2602.6571 2606.1471 2606.1471 2609.637 2609.637 2613.127 2613.127 2616.6169 2571.2476 2574.7375 2574.7375 2578.2275 2578.2275 2581.7174 2581.7174 2585.2074 - 2585.2074 2588.6973 2588.6973 2592.1873 2592.1873 2595.6772 2595.6772 2599.1672 2599.1672 2602.6571 2602.6571 2606.1471 2606.1471 2609.637 2609.637 2613.127 - 2613.127 2616.6169 2569.5416 2573.0315 2573.0315 2576.5215 2576.5215 2580.0114 2580.8448 2584.3347 2584.3347 2587.8247 2587.8247 2591.3146 2591.3146 2594.8046 - 2594.8046 2598.2945 2598.2945 2601.7845 2601.7845 2605.2744 2605.2744 2608.7644 2608.7644 2612.2543 2612.2543 2615.7443 2569.5416 2573.0315 2573.0315 2576.5215 - 2576.5215 2580.0114 2580.8448 2584.3347 2584.3347 2587.8247 2587.8247 2591.3146 2591.3146 2594.8046 2594.8046 2598.2945 2598.2945 2601.7845 2601.7845 2605.2744 - 2605.2744 2608.7644 2608.7644 2612.2543 2612.2543 2615.7443 2567.8356 2571.3256 2571.3256 2574.8155 2574.8155 2578.3054 2579.9721 2583.4621 2583.4621 2586.952 - 2586.952 2590.442 2590.442 2593.9319 2593.9319 2597.4219 2597.4219 2600.9118 2600.9118 2604.4018 2604.4018 2607.8917 2607.8917 2611.3817 2611.3817 2614.8716 - 2567.8356 2571.3256 2571.3256 2574.8155 2574.8155 2578.3054 2579.9721 2583.4621 2583.4621 2586.952 2586.952 2590.442 2590.442 2593.9319 2593.9319 2597.4219 - 2597.4219 2600.9118 2600.9118 2604.4018 2604.4018 2607.8917 2607.8917 2611.3817 2611.3817 2614.8716 2566.1296 2569.6196 2569.6196 2573.1095 2573.1095 2576.5995 - 2579.0995 2582.5894 2582.5894 2586.0794 2586.0794 2589.5693 2589.5693 2593.0593 2593.0593 2596.5492 2596.5492 2600.0392 2603.5392 2607.0291 2607.0291 2610.5191 - 2610.5191 2614.009 2614.009 2617.499 2566.1296 2569.6196 2569.6196 2573.1095 2573.1095 2576.5995 2579.0995 2582.5894 2582.5894 2586.0794 2586.0794 2589.5693 - 2589.5693 2593.0593 2593.0593 2596.5492 2596.5492 2600.0392 2603.5392 2607.0291 2607.0291 2610.5191 2610.5191 2614.009 2614.009 2617.499 2564.4236 2567.9136 - 2567.9136 2571.4035 2571.4035 2574.8935 2578.2268 2581.7168 2581.7168 2585.2067 2585.2067 2588.6967 2588.6967 2592.1866 2592.1866 2595.6766 2595.6766 2599.1665 - 2606.1665 2609.6565 2609.6565 2613.1464 2613.1464 2616.6364 2616.6364 2620.1263 2564.4236 2567.9136 2567.9136 2571.4035 2571.4035 2574.8935 2578.2268 2581.7168 - 2581.7168 2585.2067 2585.2067 2588.6967 2588.6967 2592.1866 2592.1866 2595.6766 2595.6766 2599.1665 2606.1665 2609.6565 2609.6565 2613.1464 2613.1464 2616.6364 - 2616.6364 2620.1263 2562.7176 2566.2076 2566.2076 2569.6975 2569.6975 2573.1875 2577.3542 2580.8441 2580.8441 2584.3341 2584.3341 2587.824 2587.824 2591.314 - 2591.314 2594.8039 2594.8039 2598.2939 2608.7939 2612.2838 2612.2838 2615.7738 2615.7738 2619.2637 2619.2637 2622.7537 2557.7176 2561.2076 2561.2076 2564.6975 - 2569.6975 2573.1875 2577.3542 2580.8441 2580.8441 2584.3341 2584.3341 2587.824 2587.824 2591.314 2591.314 2594.8039 2594.8039 2598.2939 2608.7939 2612.2838 - 2612.2838 2615.7738 2615.7738 2619.2637 2619.2637 2622.7537 2556.0117 2559.5016 2559.5016 2562.9916 2567.9916 2571.4815 2576.4815 2579.9715 2579.9715 2583.4614 - 2583.4614 2586.9514 2586.9514 2590.4413 2590.4413 2593.9313 2593.9313 2597.4212 2611.4212 2614.9111 2614.9111 2618.4011 2618.4011 2621.891 2621.891 2625.381 - 2556.0117 2559.5016 2559.5016 2562.9916 2567.9916 2571.4815 2576.4815 2579.9715 2579.9715 2583.4614 2583.4614 2586.9514 2586.9514 2590.4413 2590.4413 2593.9313 - 2593.9313 2597.4212 2611.4212 2614.9111 2614.9111 2618.4011 2618.4011 2621.891 2621.891 2625.381 2554.3057 2557.7956 2557.7956 2561.2856 2566.2856 2569.7755 - 2575.6088 2579.0988 2579.0988 2582.5887 2582.5887 2586.0787 2586.0787 2589.5686 2589.5686 2593.0586 2593.0586 2596.5485 2614.0485 2617.5385 2617.5385 2621.0284 - 2621.0284 2624.5184 2624.5184 2628.0083 2554.3057 2557.7956 2557.7956 2561.2856 2566.2856 2569.7755 2575.6088 2579.0988 2579.0988 2582.5887 2582.5887 2586.0787 - 2586.0787 2589.5686 2589.5686 2593.0586 2593.0586 2596.5485 2614.0485 2617.5385 2617.5385 2621.0284 2621.0284 2624.5184 2624.5184 2628.0083 2552.5997 2556.0896 - 2556.0896 2559.5796 2564.5796 2568.0695 2574.7362 2578.2261 2578.2261 2581.7161 2581.7161 2585.206 2585.206 2588.696 2588.696 2592.1859 2592.1859 2595.6759 - 2616.6759 2620.1658 2620.1658 2623.6558 2623.6558 2627.1457 2627.1457 2630.6357 2552.5997 2556.0896 2556.0896 2559.5796 2564.5796 2568.0695 2574.7362 2578.2261 - 2578.2261 2581.7161 2581.7161 2585.206 2585.206 2588.696 2588.696 2592.1859 2592.1859 2595.6759 2616.6759 2620.1658 2620.1658 2623.6558 2623.6558 2627.1457 - 2627.1457 2630.6357 2550.8937 2554.3836 2554.3836 2557.8736 2562.8736 2566.3635 2573.8635 2577.3535 2577.3535 2580.8434 2580.8434 2584.3334 2584.3334 2587.8233 - 2587.8233 2591.3133 2591.3133 2594.8032 2619.3032 2622.7932 2622.7932 2626.2831 2626.2831 2629.7731 2629.7731 2633.263 2550.8937 2554.3836 2554.3836 2557.8736 - 2562.8736 2566.3635 2573.8635 2577.3535 2577.3535 2580.8434 2580.8434 2584.3334 2584.3334 2587.8233 2587.8233 2591.3133 2591.3133 2594.8032 2619.3032 2622.7932 - 2622.7932 2626.2831 2626.2831 2629.7731 2629.7731 2633.263 2549.1877 2552.6777 2552.6777 2556.1676 2561.1676 2564.6576 2572.9909 2576.4808 2576.4808 2579.9708 - 2579.9708 2583.4607 2583.4607 2586.9507 2586.9507 2590.4406 2590.4406 2593.9306 2621.9306 2625.4205 2625.4205 2628.9105 2628.9105 2632.4004 2632.4004 2635.8904 - 2549.1877 2552.6777 2552.6777 2556.1676 2561.1676 2564.6576 2572.9909 2576.4808 2576.4808 2579.9708 2579.9708 2583.4607 2583.4607 2586.9507 2586.9507 2590.4406 - 2590.4406 2593.9306 2621.9306 2625.4205 2625.4205 2628.9105 2628.9105 2632.4004 2632.4004 2635.8904 2547.4817 2550.9717 2550.9717 2554.4616 2559.4616 2562.9516 - 2572.1182 2575.6082 2575.6082 2579.0981 2579.0981 2582.5881 2582.5881 2586.078 2586.078 2589.568 2589.568 2593.0579 2624.5579 2628.0479 2628.0479 2631.5378 - 2631.5378 2635.0278 2635.0278 2638.5177 2547.4817 2550.9717 2550.9717 2554.4616 2559.4616 2562.9516 2572.1182 2575.6082 2575.6082 2579.0981 2579.0981 2582.5881 - 2582.5881 2586.078 2586.078 2589.568 2589.568 2593.0579 2624.5579 2628.0479 2628.0479 2631.5378 2631.5378 2635.0278 2635.0278 2638.5177 2545.7757 2549.2657 - 2549.2657 2552.7556 2557.7556 2561.2456 2571.2456 2574.7355 2574.7355 2578.2255 2578.2255 2581.7154 2581.7154 2585.2054 2585.2054 2588.6953 2588.6953 2592.1853 - 2627.1853 2630.6752 2630.6752 2634.1652 2634.1652 2637.6551 2637.6551 2641.1451 2579.4725 2582.9624 2582.9624 2586.4524 2589.4524 2592.9423 2592.9423 2596.4323 - 2596.4323 2599.9222 2599.9222 2603.4122 2603.4122 2606.9021 2606.9021 2610.3921 2610.3921 2613.882 2613.882 2617.372 2617.372 2620.8619 2620.8619 2624.3519 - 2624.3519 2627.8418 2578.5998 2582.0898 2582.0898 2585.5797 2588.5797 2592.0697 2592.0697 2595.5596 2595.5596 2599.0496 2599.0496 2602.5395 2602.5395 2606.0295 - 2606.0295 2609.5194 2609.5194 2613.0094 2613.0094 2616.4993 2616.4993 2619.9893 2619.9893 2623.4792 2623.4792 2626.9692 2578.5998 2582.0898 2582.0898 2585.5797 - 2588.5797 2592.0697 2592.0697 2595.5596 2595.5596 2599.0496 2599.0496 2602.5395 2602.5395 2606.0295 2606.0295 2609.5194 2609.5194 2613.0094 2613.0094 2616.4993 - 2616.4993 2619.9893 2619.9893 2623.4792 2623.4792 2626.9692 2577.7272 2581.2171 2581.2171 2584.7071 2587.7071 2591.197 2591.197 2594.687 2594.687 2598.1769 - 2598.1769 2601.6669 2601.6669 2605.1568 2605.1568 2608.6468 2608.6468 2612.1367 2612.1367 2615.6267 2615.6267 2619.1166 2619.1166 2622.6066 2622.6066 2626.0965 - 2577.7272 2581.2171 2581.2171 2584.7071 2587.7071 2591.197 2591.197 2594.687 2594.687 2598.1769 2598.1769 2601.6669 2601.6669 2605.1568 2605.1568 2608.6468 - 2608.6468 2612.1367 2612.1367 2615.6267 2615.6267 2619.1166 2619.1166 2622.6066 2622.6066 2626.0965 2576.8545 2580.3445 2580.3445 2583.8344 2586.8344 2590.3244 - 2590.3244 2593.8143 2593.8143 2597.3043 2597.3043 2600.7942 2600.7942 2604.2842 2604.2842 2607.7741 2607.7741 2611.2641 2611.2641 2614.754 2614.754 2618.244 - 2618.244 2621.7339 2621.7339 2625.2239 2576.8545 2580.3445 2580.3445 2583.8344 2586.8344 2590.3244 2590.3244 2593.8143 2593.8143 2597.3043 2597.3043 2600.7942 - 2600.7942 2604.2842 2604.2842 2607.7741 2607.7741 2611.2641 2611.2641 2614.754 2614.754 2618.244 2618.244 2621.7339 2621.7339 2625.2239 2575.9819 2579.4718 - 2579.4718 2582.9618 2585.9618 2589.4517 2589.4517 2592.9417 2592.9417 2596.4316 2596.4316 2599.9216 2599.9216 2603.4115 2603.4115 2606.9015 2606.9015 2610.3914 - 2610.3914 2613.8814 2613.8814 2617.3713 2617.3713 2620.8613 2620.8613 2624.3512 2575.9819 2579.4718 2579.4718 2582.9618 2582.9618 2586.4517 2589.4517 2592.9417 - 2592.9417 2596.4316 2596.4316 2599.9216 2599.9216 2603.4115 2603.4115 2606.9015 2606.9015 2610.3914 2610.3914 2613.8814 2613.8814 2617.3713 2617.3713 2620.8613 - 2620.8613 2624.3512 2575.1092 2578.5992 2578.5992 2582.0891 2582.0891 2585.5791 2588.5791 2592.069 2592.069 2595.559 2595.559 2599.0489 2599.0489 2602.5389 - 2602.5389 2606.0288 2606.0288 2609.5188 2609.5188 2613.0087 2613.0087 2616.4987 2616.4987 2619.9886 2619.9886 2623.4786 2575.1092 2578.5992 2578.5992 2582.0891 - 2582.0891 2585.5791 2588.5791 2592.069 2592.069 2595.559 2595.559 2599.0489 2599.0489 2602.5389 2602.5389 2606.0288 2606.0288 2609.5188 2609.5188 2613.0087 - 2613.0087 2616.4987 2616.4987 2619.9886 2619.9886 2623.4786 2574.2366 2577.7265 2577.7265 2581.2165 2581.2165 2584.7064 2587.7064 2591.1964 2591.1964 2594.6863 - 2594.6863 2598.1763 2598.1763 2601.6662 2601.6662 2605.1562 2605.1562 2608.6461 2608.6461 2612.1361 2612.1361 2615.626 2615.626 2619.116 2619.116 2622.6059 - 2574.2366 2577.7265 2577.7265 2581.2165 2581.2165 2584.7064 2587.7064 2591.1964 2591.1964 2594.6863 2594.6863 2598.1763 2598.1763 2601.6662 2601.6662 2605.1562 - 2605.1562 2608.6461 2608.6461 2612.1361 2612.1361 2615.626 2615.626 2619.116 2619.116 2622.6059 2573.3639 2576.8539 2576.8539 2580.3438 2580.3438 2583.8338 - 2586.8338 2590.3237 2590.3237 2593.8137 2593.8137 2597.3036 2597.3036 2600.7936 2600.7936 2604.2835 2604.2835 2607.7735 2607.7735 2611.2634 2611.2634 2614.7534 - 2614.7534 2618.2433 2618.2433 2621.7333 2573.3639 2576.8539 2576.8539 2580.3438 2580.3438 2583.8338 2586.8338 2590.3237 2590.3237 2593.8137 2593.8137 2597.3036 - 2597.3036 2600.7936 2600.7936 2604.2835 2604.2835 2607.7735 2607.7735 2611.2634 2611.2634 2614.7534 2614.7534 2618.2433 2618.2433 2621.7333 2572.4913 2575.9812 - 2575.9812 2579.4712 2579.4712 2582.9611 2585.9611 2589.4511 2589.4511 2592.941 2592.941 2596.431 2596.431 2599.9209 2599.9209 2603.4109 2603.4109 2606.9008 - 2606.9008 2610.3908 2610.3908 2613.8807 2613.8807 2617.3707 2617.3707 2620.8606 2575.4913 2578.9812 2578.9812 2582.4712 2582.4712 2585.9611 2585.9611 2589.4511 - 2589.4511 2592.941 2592.941 2596.431 2596.431 2599.9209 2599.9209 2603.4109 2603.4109 2606.9008 2606.9008 2610.3908 2610.3908 2613.8807 2613.8807 2617.3707 - 2617.3707 2620.8606 2574.6186 2578.1086 2578.1086 2581.5985 2581.5985 2585.0885 2585.0885 2588.5784 2588.5784 2592.0684 2592.0684 2595.5583 2595.5583 2599.0483 - 2599.0483 2602.5382 2602.5382 2606.0282 2606.0282 2609.5181 2609.5181 2613.0081 2613.0081 2616.498 2616.498 2619.988 2574.6186 2578.1086 2578.1086 2581.5985 - 2581.5985 2585.0885 2585.0885 2588.5784 2588.5784 2592.0684 2592.0684 2595.5583 2595.5583 2599.0483 2599.0483 2602.5382 2602.5382 2606.0282 2606.0282 2609.5181 - 2609.5181 2613.0081 2613.0081 2616.498 2616.498 2619.988 2573.746 2577.2359 2577.2359 2580.7259 2580.7259 2584.2158 2584.2158 2587.7058 2587.7058 2591.1957 - 2591.1957 2594.6857 2594.6857 2598.1756 2598.1756 2601.6656 2601.6656 2605.1555 2605.1555 2608.6455 2608.6455 2612.1354 2612.1354 2615.6254 2615.6254 2619.1153 - 2573.746 2577.2359 2577.2359 2580.7259 2580.7259 2584.2158 2584.2158 2587.7058 2587.7058 2591.1957 2591.1957 2594.6857 2594.6857 2598.1756 2598.1756 2601.6656 - 2601.6656 2605.1555 2605.1555 2608.6455 2608.6455 2612.1354 2612.1354 2615.6254 2615.6254 2619.1153 2572.04 2575.5299 2575.5299 2579.0199 2579.0199 2582.5098 - 2583.3432 2586.8331 2586.8331 2590.3231 2590.3231 2593.813 2593.813 2597.303 2597.303 2600.7929 2600.7929 2604.2828 2604.2828 2607.7728 2607.7728 2611.2627 - 2611.2627 2614.7527 2614.7527 2618.2426 2572.04 2575.5299 2575.5299 2579.0199 2579.0199 2582.5098 2583.3432 2586.8331 2586.8331 2590.3231 2590.3231 2593.813 - 2593.813 2597.303 2597.303 2600.7929 2600.7929 2604.2828 2604.2828 2607.7728 2607.7728 2611.2627 2611.2627 2614.7527 2614.7527 2618.2426 2570.334 2573.8239 - 2573.8239 2577.3139 2577.3139 2580.8038 2582.4705 2585.9604 2585.9604 2589.4504 2589.4504 2592.9403 2592.9403 2596.4303 2596.4303 2599.9202 2599.9202 2603.4102 - 2603.4102 2606.9001 2606.9001 2610.3901 2610.3901 2613.88 2613.88 2617.37 2570.334 2573.8239 2573.8239 2577.3139 2577.3139 2580.8038 2582.4705 2585.9604 - 2585.9604 2589.4504 2589.4504 2592.9403 2592.9403 2596.4303 2596.4303 2599.9202 2599.9202 2603.4102 2603.4102 2606.9001 2606.9001 2610.3901 2610.3901 2613.88 - 2613.88 2617.37 2568.628 2572.1179 2572.1179 2575.6079 2575.6079 2579.0978 2581.5978 2585.0878 2585.0878 2588.5777 2588.5777 2592.0677 2592.0677 2595.5576 - 2595.5576 2599.0476 2599.0476 2602.5375 2606.0375 2609.5275 2609.5275 2613.0174 2613.0174 2616.5074 2616.5074 2619.9973 2568.628 2572.1179 2572.1179 2575.6079 - 2575.6079 2579.0978 2581.5978 2585.0878 2585.0878 2588.5777 2588.5777 2592.0677 2592.0677 2595.5576 2595.5576 2599.0476 2599.0476 2602.5375 2606.0375 2609.5275 - 2609.5275 2613.0174 2613.0174 2616.5074 2616.5074 2619.9973 2566.922 2570.412 2570.412 2573.9019 2573.9019 2577.3919 2580.7252 2584.2151 2584.2151 2587.7051 - 2587.7051 2591.195 2591.195 2594.685 2594.685 2598.1749 2598.1749 2601.6649 2608.6649 2612.1548 2612.1548 2615.6448 2615.6448 2619.1347 2619.1347 2622.6247 - 2566.922 2570.412 2570.412 2573.9019 2573.9019 2577.3919 2580.7252 2584.2151 2584.2151 2587.7051 2587.7051 2591.195 2591.195 2594.685 2594.685 2598.1749 - 2598.1749 2601.6649 2608.6649 2612.1548 2612.1548 2615.6448 2615.6448 2619.1347 2619.1347 2622.6247 2565.216 2568.706 2568.706 2572.1959 2572.1959 2575.6859 - 2579.8525 2583.3425 2583.3425 2586.8324 2586.8324 2590.3224 2590.3224 2593.8123 2593.8123 2597.3023 2597.3023 2600.7922 2611.2922 2614.7822 2614.7822 2618.2721 - 2618.2721 2621.7621 2621.7621 2625.252 2560.216 2563.706 2563.706 2567.1959 2572.1959 2575.6859 2579.8525 2583.3425 2583.3425 2586.8324 2586.8324 2590.3224 - 2590.3224 2593.8123 2593.8123 2597.3023 2597.3023 2600.7922 2611.2922 2614.7822 2614.7822 2618.2721 2618.2721 2621.7621 2621.7621 2625.252 2558.51 2562 - 2562 2565.4899 2570.4899 2573.9799 2578.9799 2582.4698 2582.4698 2585.9598 2585.9598 2589.4497 2589.4497 2592.9397 2592.9397 2596.4296 2596.4296 2599.9196 - 2613.9196 2617.4095 2617.4095 2620.8995 2620.8995 2624.3894 2624.3894 2627.8794 2558.51 2562 2562 2565.4899 2570.4899 2573.9799 2578.9799 2582.4698 - 2582.4698 2585.9598 2585.9598 2589.4497 2589.4497 2592.9397 2592.9397 2596.4296 2596.4296 2599.9196 2613.9196 2617.4095 2617.4095 2620.8995 2620.8995 2624.3894 - 2624.3894 2627.8794 2556.804 2560.294 2560.294 2563.7839 2568.7839 2572.2739 2578.1072 2581.5972 2581.5972 2585.0871 2585.0871 2588.5771 2588.5771 2592.067 - 2592.067 2595.557 2595.557 2599.0469 2616.5469 2620.0369 2620.0369 2623.5268 2623.5268 2627.0168 2627.0168 2630.5067 2556.804 2560.294 2560.294 2563.7839 - 2568.7839 2572.2739 2578.1072 2581.5972 2581.5972 2585.0871 2585.0871 2588.5771 2588.5771 2592.067 2592.067 2595.557 2595.557 2599.0469 2616.5469 2620.0369 - 2620.0369 2623.5268 2623.5268 2627.0168 2627.0168 2630.5067 2555.0981 2558.588 2558.588 2562.078 2567.078 2570.5679 2577.2346 2580.7245 2580.7245 2584.2145 - 2584.2145 2587.7044 2587.7044 2591.1944 2591.1944 2594.6843 2594.6843 2598.1743 2619.1743 2622.6642 2622.6642 2626.1542 2626.1542 2629.6441 2629.6441 2633.1341 - 2555.0981 2558.588 2558.588 2562.078 2567.078 2570.5679 2577.2346 2580.7245 2580.7245 2584.2145 2584.2145 2587.7044 2587.7044 2591.1944 2591.1944 2594.6843 - 2594.6843 2598.1743 2619.1743 2622.6642 2622.6642 2626.1542 2626.1542 2629.6441 2629.6441 2633.1341 2553.3921 2556.882 2556.882 2560.372 2565.372 2568.8619 - 2576.3619 2579.8519 2579.8519 2583.3418 2583.3418 2586.8318 2586.8318 2590.3217 2590.3217 2593.8117 2593.8117 2597.3016 2621.8016 2625.2916 2625.2916 2628.7815 - 2628.7815 2632.2715 2632.2715 2635.7614 2553.3921 2556.882 2556.882 2560.372 2565.372 2568.8619 2576.3619 2579.8519 2579.8519 2583.3418 2583.3418 2586.8318 - 2586.8318 2590.3217 2590.3217 2593.8117 2593.8117 2597.3016 2621.8016 2625.2916 2625.2916 2628.7815 2628.7815 2632.2715 2632.2715 2635.7614 2551.6861 2555.176 - 2555.176 2558.666 2563.666 2567.1559 2575.4893 2578.9792 2578.9792 2582.4692 2582.4692 2585.9591 2585.9591 2589.4491 2589.4491 2592.939 2592.939 2596.429 - 2624.429 2627.9189 2627.9189 2631.4089 2631.4089 2634.8988 2634.8988 2638.3888 2551.6861 2555.176 2555.176 2558.666 2563.666 2567.1559 2575.4893 2578.9792 - 2578.9792 2582.4692 2582.4692 2585.9591 2585.9591 2589.4491 2589.4491 2592.939 2592.939 2596.429 2624.429 2627.9189 2627.9189 2631.4089 2631.4089 2634.8988 - 2634.8988 2638.3888 2549.9801 2553.4701 2553.4701 2556.96 2561.96 2565.4499 2574.6166 2578.1066 2578.1066 2581.5965 2581.5965 2585.0865 2585.0865 2588.5764 - 2588.5764 2592.0664 2592.0664 2595.5563 2627.0563 2630.5463 2630.5463 2634.0362 2634.0362 2637.5262 2637.5262 2641.0161 2549.9801 2553.4701 2553.4701 2556.96 - 2561.96 2565.4499 2574.6166 2578.1066 2578.1066 2581.5965 2581.5965 2585.0865 2585.0865 2588.5764 2588.5764 2592.0664 2592.0664 2595.5563 2627.0563 2630.5463 - 2630.5463 2634.0362 2634.0362 2637.5262 2637.5262 2641.0161 2548.2741 2551.7641 2551.7641 2555.254 2560.254 2563.744 2573.744 2577.2339 2577.2339 2580.7239 - 2580.7239 2584.2138 2584.2138 2587.7038 2587.7038 2591.1937 2591.1937 2594.6837 2629.6837 2633.1736 2633.1736 2636.6636 2636.6636 2640.1535 2640.1535 2643.6435 - 2579.4725 2582.9624 2582.9624 2586.4524 2589.4524 2592.9423 2592.9423 2596.4323 2596.4323 2599.9222 2599.9222 2603.4122 2603.4122 2606.9021 2606.9021 2610.3921 - 2610.3921 2613.882 2613.882 2617.372 2617.372 2620.8619 2620.8619 2624.3519 2624.3519 2627.8418 2578.5998 2582.0898 2582.0898 2585.5797 2588.5797 2592.0697 - 2592.0697 2595.5596 2595.5596 2599.0496 2599.0496 2602.5395 2602.5395 2606.0295 2606.0295 2609.5194 2609.5194 2613.0094 2613.0094 2616.4993 2616.4993 2619.9893 - 2619.9893 2623.4792 2623.4792 2626.9692 2578.5998 2582.0898 2582.0898 2585.5797 2588.5797 2592.0697 2592.0697 2595.5596 2595.5596 2599.0496 2599.0496 2602.5395 - 2602.5395 2606.0295 2606.0295 2609.5194 2609.5194 2613.0094 2613.0094 2616.4993 2616.4993 2619.9893 2619.9893 2623.4792 2623.4792 2626.9692 2577.7272 2581.2171 - 2581.2171 2584.7071 2587.7071 2591.197 2591.197 2594.687 2594.687 2598.1769 2598.1769 2601.6669 2601.6669 2605.1568 2605.1568 2608.6468 2608.6468 2612.1367 - 2612.1367 2615.6267 2615.6267 2619.1166 2619.1166 2622.6066 2622.6066 2626.0965 2577.7272 2581.2171 2581.2171 2584.7071 2587.7071 2591.197 2591.197 2594.687 - 2594.687 2598.1769 2598.1769 2601.6669 2601.6669 2605.1568 2605.1568 2608.6468 2608.6468 2612.1367 2612.1367 2615.6267 2615.6267 2619.1166 2619.1166 2622.6066 - 2622.6066 2626.0965 2576.8545 2580.3445 2580.3445 2583.8344 2586.8344 2590.3244 2590.3244 2593.8143 2593.8143 2597.3043 2597.3043 2600.7942 2600.7942 2604.2842 - 2604.2842 2607.7741 2607.7741 2611.2641 2611.2641 2614.754 2614.754 2618.244 2618.244 2621.7339 2621.7339 2625.2239 2576.8545 2580.3445 2580.3445 2583.8344 - 2586.8344 2590.3244 2590.3244 2593.8143 2593.8143 2597.3043 2597.3043 2600.7942 2600.7942 2604.2842 2604.2842 2607.7741 2607.7741 2611.2641 2611.2641 2614.754 - 2614.754 2618.244 2618.244 2621.7339 2621.7339 2625.2239 2575.9819 2579.4718 2579.4718 2582.9618 2585.9618 2589.4517 2589.4517 2592.9417 2592.9417 2596.4316 - 2596.4316 2599.9216 2599.9216 2603.4115 2603.4115 2606.9015 2606.9015 2610.3914 2610.3914 2613.8814 2613.8814 2617.3713 2617.3713 2620.8613 2620.8613 2624.3512 - 2575.9819 2579.4718 2579.4718 2582.9618 2582.9618 2586.4517 2589.4517 2592.9417 2592.9417 2596.4316 2596.4316 2599.9216 2599.9216 2603.4115 2603.4115 2606.9015 - 2606.9015 2610.3914 2610.3914 2613.8814 2613.8814 2617.3713 2617.3713 2620.8613 2620.8613 2624.3512 2575.1092 2578.5992 2578.5992 2582.0891 2582.0891 2585.5791 - 2588.5791 2592.069 2592.069 2595.559 2595.559 2599.0489 2599.0489 2602.5389 2602.5389 2606.0288 2606.0288 2609.5188 2609.5188 2613.0087 2613.0087 2616.4987 - 2616.4987 2619.9886 2619.9886 2623.4786 2575.1092 2578.5992 2578.5992 2582.0891 2582.0891 2585.5791 2588.5791 2592.069 2592.069 2595.559 2595.559 2599.0489 - 2599.0489 2602.5389 2602.5389 2606.0288 2606.0288 2609.5188 2609.5188 2613.0087 2613.0087 2616.4987 2616.4987 2619.9886 2619.9886 2623.4786 2574.2366 2577.7265 - 2577.7265 2581.2165 2581.2165 2584.7064 2587.7064 2591.1964 2591.1964 2594.6863 2594.6863 2598.1763 2598.1763 2601.6662 2601.6662 2605.1562 2605.1562 2608.6461 - 2608.6461 2612.1361 2612.1361 2615.626 2615.626 2619.116 2619.116 2622.6059 2574.2366 2577.7265 2577.7265 2581.2165 2581.2165 2584.7064 2587.7064 2591.1964 - 2591.1964 2594.6863 2594.6863 2598.1763 2598.1763 2601.6662 2601.6662 2605.1562 2605.1562 2608.6461 2608.6461 2612.1361 2612.1361 2615.626 2615.626 2619.116 - 2619.116 2622.6059 2573.3639 2576.8539 2576.8539 2580.3438 2580.3438 2583.8338 2586.8338 2590.3237 2590.3237 2593.8137 2593.8137 2597.3036 2597.3036 2600.7936 - 2600.7936 2604.2835 2604.2835 2607.7735 2607.7735 2611.2634 2611.2634 2614.7534 2614.7534 2618.2433 2618.2433 2621.7333 2573.3639 2576.8539 2576.8539 2580.3438 - 2580.3438 2583.8338 2586.8338 2590.3237 2590.3237 2593.8137 2593.8137 2597.3036 2597.3036 2600.7936 2600.7936 2604.2835 2604.2835 2607.7735 2607.7735 2611.2634 - 2611.2634 2614.7534 2614.7534 2618.2433 2618.2433 2621.7333 2572.4913 2575.9812 2575.9812 2579.4712 2579.4712 2582.9611 2585.9611 2589.4511 2589.4511 2592.941 - 2592.941 2596.431 2596.431 2599.9209 2599.9209 2603.4109 2603.4109 2606.9008 2606.9008 2610.3908 2610.3908 2613.8807 2613.8807 2617.3707 2617.3707 2620.8606 - 2575.4913 2578.9812 2578.9812 2582.4712 2582.4712 2585.9611 2585.9611 2589.4511 2589.4511 2592.941 2592.941 2596.431 2596.431 2599.9209 2599.9209 2603.4109 - 2603.4109 2606.9008 2606.9008 2610.3908 2610.3908 2613.8807 2613.8807 2617.3707 2617.3707 2620.8606 2574.6186 2578.1086 2578.1086 2581.5985 2581.5985 2585.0885 - 2585.0885 2588.5784 2588.5784 2592.0684 2592.0684 2595.5583 2595.5583 2599.0483 2599.0483 2602.5382 2602.5382 2606.0282 2606.0282 2609.5181 2609.5181 2613.0081 - 2613.0081 2616.498 2616.498 2619.988 2574.6186 2578.1086 2578.1086 2581.5985 2581.5985 2585.0885 2585.0885 2588.5784 2588.5784 2592.0684 2592.0684 2595.5583 - 2595.5583 2599.0483 2599.0483 2602.5382 2602.5382 2606.0282 2606.0282 2609.5181 2609.5181 2613.0081 2613.0081 2616.498 2616.498 2619.988 2573.746 2577.2359 - 2577.2359 2580.7259 2580.7259 2584.2158 2584.2158 2587.7058 2587.7058 2591.1957 2591.1957 2594.6857 2594.6857 2598.1756 2598.1756 2601.6656 2601.6656 2605.1555 - 2605.1555 2608.6455 2608.6455 2612.1354 2612.1354 2615.6254 2615.6254 2619.1153 2573.746 2577.2359 2577.2359 2580.7259 2580.7259 2584.2158 2584.2158 2587.7058 - 2587.7058 2591.1957 2591.1957 2594.6857 2594.6857 2598.1756 2598.1756 2601.6656 2601.6656 2605.1555 2605.1555 2608.6455 2608.6455 2612.1354 2612.1354 2615.6254 - 2615.6254 2619.1153 2572.04 2575.5299 2575.5299 2579.0199 2579.0199 2582.5098 2583.3432 2586.8331 2586.8331 2590.3231 2590.3231 2593.813 2593.813 2597.303 - 2597.303 2600.7929 2600.7929 2604.2828 2604.2828 2607.7728 2607.7728 2611.2627 2611.2627 2614.7527 2614.7527 2618.2426 2572.04 2575.5299 2575.5299 2579.0199 - 2579.0199 2582.5098 2583.3432 2586.8331 2586.8331 2590.3231 2590.3231 2593.813 2593.813 2597.303 2597.303 2600.7929 2600.7929 2604.2828 2604.2828 2607.7728 - 2607.7728 2611.2627 2611.2627 2614.7527 2614.7527 2618.2426 2570.334 2573.8239 2573.8239 2577.3139 2577.3139 2580.8038 2582.4705 2585.9604 2585.9604 2589.4504 - 2589.4504 2592.9403 2592.9403 2596.4303 2596.4303 2599.9202 2599.9202 2603.4102 2603.4102 2606.9001 2606.9001 2610.3901 2610.3901 2613.88 2613.88 2617.37 - 2570.334 2573.8239 2573.8239 2577.3139 2577.3139 2580.8038 2582.4705 2585.9604 2585.9604 2589.4504 2589.4504 2592.9403 2592.9403 2596.4303 2596.4303 2599.9202 - 2599.9202 2603.4102 2603.4102 2606.9001 2606.9001 2610.3901 2610.3901 2613.88 2613.88 2617.37 2568.628 2572.1179 2572.1179 2575.6079 2575.6079 2579.0978 - 2581.5978 2585.0878 2585.0878 2588.5777 2588.5777 2592.0677 2592.0677 2595.5576 2595.5576 2599.0476 2599.0476 2602.5375 2606.0375 2609.5275 2609.5275 2613.0174 - 2613.0174 2616.5074 2616.5074 2619.9973 2568.628 2572.1179 2572.1179 2575.6079 2575.6079 2579.0978 2581.5978 2585.0878 2585.0878 2588.5777 2588.5777 2592.0677 - 2592.0677 2595.5576 2595.5576 2599.0476 2599.0476 2602.5375 2606.0375 2609.5275 2609.5275 2613.0174 2613.0174 2616.5074 2616.5074 2619.9973 2566.922 2570.412 - 2570.412 2573.9019 2573.9019 2577.3919 2580.7252 2584.2151 2584.2151 2587.7051 2587.7051 2591.195 2591.195 2594.685 2594.685 2598.1749 2598.1749 2601.6649 - 2608.6649 2612.1548 2612.1548 2615.6448 2615.6448 2619.1347 2619.1347 2622.6247 2566.922 2570.412 2570.412 2573.9019 2573.9019 2577.3919 2580.7252 2584.2151 - 2584.2151 2587.7051 2587.7051 2591.195 2591.195 2594.685 2594.685 2598.1749 2598.1749 2601.6649 2608.6649 2612.1548 2612.1548 2615.6448 2615.6448 2619.1347 - 2619.1347 2622.6247 2565.216 2568.706 2568.706 2572.1959 2572.1959 2575.6859 2579.8525 2583.3425 2583.3425 2586.8324 2586.8324 2590.3224 2590.3224 2593.8123 - 2593.8123 2597.3023 2597.3023 2600.7922 2611.2922 2614.7822 2614.7822 2618.2721 2618.2721 2621.7621 2621.7621 2625.252 2560.216 2563.706 2563.706 2567.1959 - 2572.1959 2575.6859 2579.8525 2583.3425 2583.3425 2586.8324 2586.8324 2590.3224 2590.3224 2593.8123 2593.8123 2597.3023 2597.3023 2600.7922 2611.2922 2614.7822 - 2614.7822 2618.2721 2618.2721 2621.7621 2621.7621 2625.252 2558.51 2562 2562 2565.4899 2570.4899 2573.9799 2578.9799 2582.4698 2582.4698 2585.9598 - 2585.9598 2589.4497 2589.4497 2592.9397 2592.9397 2596.4296 2596.4296 2599.9196 2613.9196 2617.4095 2617.4095 2620.8995 2620.8995 2624.3894 2624.3894 2627.8794 - 2558.51 2562 2562 2565.4899 2570.4899 2573.9799 2578.9799 2582.4698 2582.4698 2585.9598 2585.9598 2589.4497 2589.4497 2592.9397 2592.9397 2596.4296 - 2596.4296 2599.9196 2613.9196 2617.4095 2617.4095 2620.8995 2620.8995 2624.3894 2624.3894 2627.8794 2556.804 2560.294 2560.294 2563.7839 2568.7839 2572.2739 - 2578.1072 2581.5972 2581.5972 2585.0871 2585.0871 2588.5771 2588.5771 2592.067 2592.067 2595.557 2595.557 2599.0469 2616.5469 2620.0369 2620.0369 2623.5268 - 2623.5268 2627.0168 2627.0168 2630.5067 2556.804 2560.294 2560.294 2563.7839 2568.7839 2572.2739 2578.1072 2581.5972 2581.5972 2585.0871 2585.0871 2588.5771 - 2588.5771 2592.067 2592.067 2595.557 2595.557 2599.0469 2616.5469 2620.0369 2620.0369 2623.5268 2623.5268 2627.0168 2627.0168 2630.5067 2555.0981 2558.588 - 2558.588 2562.078 2567.078 2570.5679 2577.2346 2580.7245 2580.7245 2584.2145 2584.2145 2587.7044 2587.7044 2591.1944 2591.1944 2594.6843 2594.6843 2598.1743 - 2619.1743 2622.6642 2622.6642 2626.1542 2626.1542 2629.6441 2629.6441 2633.1341 2555.0981 2558.588 2558.588 2562.078 2567.078 2570.5679 2577.2346 2580.7245 - 2580.7245 2584.2145 2584.2145 2587.7044 2587.7044 2591.1944 2591.1944 2594.6843 2594.6843 2598.1743 2619.1743 2622.6642 2622.6642 2626.1542 2626.1542 2629.6441 - 2629.6441 2633.1341 2553.3921 2556.882 2556.882 2560.372 2565.372 2568.8619 2576.3619 2579.8519 2579.8519 2583.3418 2583.3418 2586.8318 2586.8318 2590.3217 - 2590.3217 2593.8117 2593.8117 2597.3016 2621.8016 2625.2916 2625.2916 2628.7815 2628.7815 2632.2715 2632.2715 2635.7614 2553.3921 2556.882 2556.882 2560.372 - 2565.372 2568.8619 2576.3619 2579.8519 2579.8519 2583.3418 2583.3418 2586.8318 2586.8318 2590.3217 2590.3217 2593.8117 2593.8117 2597.3016 2621.8016 2625.2916 - 2625.2916 2628.7815 2628.7815 2632.2715 2632.2715 2635.7614 2551.6861 2555.176 2555.176 2558.666 2563.666 2567.1559 2575.4893 2578.9792 2578.9792 2582.4692 - 2582.4692 2585.9591 2585.9591 2589.4491 2589.4491 2592.939 2592.939 2596.429 2624.429 2627.9189 2627.9189 2631.4089 2631.4089 2634.8988 2634.8988 2638.3888 - 2551.6861 2555.176 2555.176 2558.666 2563.666 2567.1559 2575.4893 2578.9792 2578.9792 2582.4692 2582.4692 2585.9591 2585.9591 2589.4491 2589.4491 2592.939 - 2592.939 2596.429 2624.429 2627.9189 2627.9189 2631.4089 2631.4089 2634.8988 2634.8988 2638.3888 2549.9801 2553.4701 2553.4701 2556.96 2561.96 2565.4499 - 2574.6166 2578.1066 2578.1066 2581.5965 2581.5965 2585.0865 2585.0865 2588.5764 2588.5764 2592.0664 2592.0664 2595.5563 2627.0563 2630.5463 2630.5463 2634.0362 - 2634.0362 2637.5262 2637.5262 2641.0161 2549.9801 2553.4701 2553.4701 2556.96 2561.96 2565.4499 2574.6166 2578.1066 2578.1066 2581.5965 2581.5965 2585.0865 - 2585.0865 2588.5764 2588.5764 2592.0664 2592.0664 2595.5563 2627.0563 2630.5463 2630.5463 2634.0362 2634.0362 2637.5262 2637.5262 2641.0161 2548.2741 2551.7641 - 2551.7641 2555.254 2560.254 2563.744 2573.744 2577.2339 2577.2339 2580.7239 2580.7239 2584.2138 2584.2138 2587.7038 2587.7038 2591.1937 2591.1937 2594.6837 - 2629.6837 2633.1736 2633.1736 2636.6636 2636.6636 2640.1535 2640.1535 2643.6435 2589.466 2592.956 2592.956 2596.4459 2599.4459 2602.9359 2602.9359 2606.4258 - 2606.4258 2609.9158 2609.9158 2613.4057 2613.4057 2616.8957 2616.8957 2620.3856 2620.3856 2623.8756 2623.8756 2627.3655 2627.3655 2630.8555 2630.8555 2634.3454 - 2634.3454 2637.8354 2588.5934 2592.0833 2592.0833 2595.5733 2598.5733 2602.0632 2602.0632 2605.5532 2605.5532 2609.0431 2609.0431 2612.5331 2612.5331 2616.023 - 2616.023 2619.513 2619.513 2623.0029 2623.0029 2626.4929 2626.4929 2629.9828 2629.9828 2633.4728 2633.4728 2636.9627 2588.5934 2592.0833 2592.0833 2595.5733 - 2598.5733 2602.0632 2602.0632 2605.5532 2605.5532 2609.0431 2609.0431 2612.5331 2612.5331 2616.023 2616.023 2619.513 2619.513 2623.0029 2623.0029 2626.4929 - 2626.4929 2629.9828 2629.9828 2633.4728 2633.4728 2636.9627 2587.7207 2591.2107 2591.2107 2594.7006 2597.7006 2601.1906 2601.1906 2604.6805 2604.6805 2608.1705 - 2608.1705 2611.6604 2611.6604 2615.1504 2615.1504 2618.6403 2618.6403 2622.1303 2622.1303 2625.6202 2625.6202 2629.1102 2629.1102 2632.6001 2632.6001 2636.0901 - 2587.7207 2591.2107 2591.2107 2594.7006 2597.7006 2601.1906 2601.1906 2604.6805 2604.6805 2608.1705 2608.1705 2611.6604 2611.6604 2615.1504 2615.1504 2618.6403 - 2618.6403 2622.1303 2622.1303 2625.6202 2625.6202 2629.1102 2629.1102 2632.6001 2632.6001 2636.0901 2586.8481 2590.338 2590.338 2593.828 2596.828 2600.3179 - 2600.3179 2603.8079 2603.8079 2607.2978 2607.2978 2610.7878 2610.7878 2614.2777 2614.2777 2617.7677 2617.7677 2621.2576 2621.2576 2624.7476 2624.7476 2628.2375 - 2628.2375 2631.7275 2631.7275 2635.2174 2586.8481 2590.338 2590.338 2593.828 2596.828 2600.3179 2600.3179 2603.8079 2603.8079 2607.2978 2607.2978 2610.7878 - 2610.7878 2614.2777 2614.2777 2617.7677 2617.7677 2621.2576 2621.2576 2624.7476 2624.7476 2628.2375 2628.2375 2631.7275 2631.7275 2635.2174 2585.9754 2589.4654 - 2589.4654 2592.9553 2595.9553 2599.4453 2599.4453 2602.9352 2602.9352 2606.4252 2606.4252 2609.9151 2609.9151 2613.4051 2613.4051 2616.895 2616.895 2620.385 - 2620.385 2623.8749 2623.8749 2627.3649 2627.3649 2630.8548 2630.8548 2634.3448 2585.9754 2589.4654 2589.4654 2592.9553 2592.9553 2596.4453 2599.4453 2602.9352 - 2602.9352 2606.4252 2606.4252 2609.9151 2609.9151 2613.4051 2613.4051 2616.895 2616.895 2620.385 2620.385 2623.8749 2623.8749 2627.3649 2627.3649 2630.8548 - 2630.8548 2634.3448 2585.1028 2588.5927 2588.5927 2592.0827 2592.0827 2595.5726 2598.5726 2602.0626 2602.0626 2605.5525 2605.5525 2609.0424 2609.0424 2612.5324 - 2612.5324 2616.0223 2616.0223 2619.5123 2619.5123 2623.0022 2623.0022 2626.4922 2626.4922 2629.9821 2629.9821 2633.4721 2585.1028 2588.5927 2588.5927 2592.0827 - 2592.0827 2595.5726 2598.5726 2602.0626 2602.0626 2605.5525 2605.5525 2609.0424 2609.0424 2612.5324 2612.5324 2616.0223 2616.0223 2619.5123 2619.5123 2623.0022 - 2623.0022 2626.4922 2626.4922 2629.9821 2629.9821 2633.4721 2584.2301 2587.72 2587.72 2591.21 2591.21 2594.6999 2597.6999 2601.1899 2601.1899 2604.6798 - 2604.6798 2608.1698 2608.1698 2611.6597 2611.6597 2615.1497 2615.1497 2618.6396 2618.6396 2622.1296 2622.1296 2625.6195 2625.6195 2629.1095 2629.1095 2632.5994 - 2584.2301 2587.72 2587.72 2591.21 2591.21 2594.6999 2597.6999 2601.1899 2601.1899 2604.6798 2604.6798 2608.1698 2608.1698 2611.6597 2611.6597 2615.1497 - 2615.1497 2618.6396 2618.6396 2622.1296 2622.1296 2625.6195 2625.6195 2629.1095 2629.1095 2632.5994 2583.3574 2586.8474 2586.8474 2590.3373 2590.3373 2593.8273 - 2596.8273 2600.3172 2600.3172 2603.8072 2603.8072 2607.2971 2607.2971 2610.7871 2610.7871 2614.277 2614.277 2617.767 2617.767 2621.2569 2621.2569 2624.7469 - 2624.7469 2628.2368 2628.2368 2631.7268 2583.3574 2586.8474 2586.8474 2590.3373 2590.3373 2593.8273 2596.8273 2600.3172 2600.3172 2603.8072 2603.8072 2607.2971 - 2607.2971 2610.7871 2610.7871 2614.277 2614.277 2617.767 2617.767 2621.2569 2621.2569 2624.7469 2624.7469 2628.2368 2628.2368 2631.7268 2582.4848 2585.9747 - 2585.9747 2589.4647 2589.4647 2592.9546 2595.9546 2599.4446 2599.4446 2602.9345 2602.9345 2606.4245 2606.4245 2609.9144 2609.9144 2613.4044 2613.4044 2616.8943 - 2616.8943 2620.3843 2620.3843 2623.8742 2623.8742 2627.3642 2627.3642 2630.8541 2585.4848 2588.9747 2588.9747 2592.4647 2592.4647 2595.9546 2595.9546 2599.4446 - 2599.4446 2602.9345 2602.9345 2606.4245 2606.4245 2609.9144 2609.9144 2613.4044 2613.4044 2616.8943 2616.8943 2620.3843 2620.3843 2623.8742 2623.8742 2627.3642 - 2627.3642 2630.8541 2584.6121 2588.1021 2588.1021 2591.592 2591.592 2595.082 2595.082 2598.5719 2598.5719 2602.0619 2602.0619 2605.5518 2605.5518 2609.0418 - 2609.0418 2612.5317 2612.5317 2616.0217 2616.0217 2619.5116 2619.5116 2623.0016 2623.0016 2626.4915 2626.4915 2629.9815 2584.6121 2588.1021 2588.1021 2591.592 - 2591.592 2595.082 2595.082 2598.5719 2598.5719 2602.0619 2602.0619 2605.5518 2605.5518 2609.0418 2609.0418 2612.5317 2612.5317 2616.0217 2616.0217 2619.5116 - 2619.5116 2623.0016 2623.0016 2626.4915 2626.4915 2629.9815 2583.7395 2587.2294 2587.2294 2590.7194 2590.7194 2594.2093 2594.2093 2597.6993 2597.6993 2601.1892 - 2601.1892 2604.6792 2604.6792 2608.1691 2608.1691 2611.6591 2611.6591 2615.149 2615.149 2618.639 2618.639 2622.1289 2622.1289 2625.6189 2625.6189 2629.1088 - 2583.7395 2587.2294 2587.2294 2590.7194 2590.7194 2594.2093 2594.2093 2597.6993 2597.6993 2601.1892 2601.1892 2604.6792 2604.6792 2608.1691 2608.1691 2611.6591 - 2611.6591 2615.149 2615.149 2618.639 2618.639 2622.1289 2622.1289 2625.6189 2625.6189 2629.1088 2582.0335 2585.5234 2585.5234 2589.0134 2589.0134 2592.5033 - 2593.3367 2596.8266 2596.8266 2600.3166 2600.3166 2603.8065 2603.8065 2607.2965 2607.2965 2610.7864 2610.7864 2614.2764 2614.2764 2617.7663 2617.7663 2621.2563 - 2621.2563 2624.7462 2624.7462 2628.2362 2582.0335 2585.5234 2585.5234 2589.0134 2589.0134 2592.5033 2593.3367 2596.8266 2596.8266 2600.3166 2600.3166 2603.8065 - 2603.8065 2607.2965 2607.2965 2610.7864 2610.7864 2614.2764 2614.2764 2617.7663 2617.7663 2621.2563 2621.2563 2624.7462 2624.7462 2628.2362 2580.3275 2583.8175 - 2583.8175 2587.3074 2587.3074 2590.7974 2592.464 2595.954 2595.954 2599.4439 2599.4439 2602.9339 2602.9339 2606.4238 2606.4238 2609.9138 2609.9138 2613.4037 - 2613.4037 2616.8937 2616.8937 2620.3836 2620.3836 2623.8736 2623.8736 2627.3635 2580.3275 2583.8175 2583.8175 2587.3074 2587.3074 2590.7974 2592.464 2595.954 - 2595.954 2599.4439 2599.4439 2602.9339 2602.9339 2606.4238 2606.4238 2609.9138 2609.9138 2613.4037 2613.4037 2616.8937 2616.8937 2620.3836 2620.3836 2623.8736 - 2623.8736 2627.3635 2578.6215 2582.1115 2582.1115 2585.6014 2585.6014 2589.0914 2591.5914 2595.0813 2595.0813 2598.5713 2598.5713 2602.0612 2602.0612 2605.5512 - 2605.5512 2609.0411 2609.0411 2612.5311 2616.0311 2619.521 2619.521 2623.011 2623.011 2626.5009 2626.5009 2629.9909 2578.6215 2582.1115 2582.1115 2585.6014 - 2585.6014 2589.0914 2591.5914 2595.0813 2595.0813 2598.5713 2598.5713 2602.0612 2602.0612 2605.5512 2605.5512 2609.0411 2609.0411 2612.5311 2616.0311 2619.521 - 2619.521 2623.011 2623.011 2626.5009 2626.5009 2629.9909 2576.9155 2580.4055 2580.4055 2583.8954 2583.8954 2587.3854 2590.7187 2594.2087 2594.2087 2597.6986 - 2597.6986 2601.1886 2601.1886 2604.6785 2604.6785 2608.1685 2608.1685 2611.6584 2618.6584 2622.1484 2622.1484 2625.6383 2625.6383 2629.1283 2629.1283 2632.6182 - 2576.9155 2580.4055 2580.4055 2583.8954 2583.8954 2587.3854 2590.7187 2594.2087 2594.2087 2597.6986 2597.6986 2601.1886 2601.1886 2604.6785 2604.6785 2608.1685 - 2608.1685 2611.6584 2618.6584 2622.1484 2622.1484 2625.6383 2625.6383 2629.1283 2629.1283 2632.6182 2575.2095 2578.6995 2578.6995 2582.1894 2582.1894 2585.6794 - 2589.8461 2593.336 2593.336 2596.826 2596.826 2600.3159 2600.3159 2603.8059 2603.8059 2607.2958 2607.2958 2610.7858 2621.2858 2624.7757 2624.7757 2628.2657 - 2628.2657 2631.7556 2631.7556 2635.2456 2570.2095 2573.6995 2573.6995 2577.1894 2582.1894 2585.6794 2589.8461 2593.336 2593.336 2596.826 2596.826 2600.3159 - 2600.3159 2603.8059 2603.8059 2607.2958 2607.2958 2610.7858 2621.2858 2624.7757 2624.7757 2628.2657 2628.2657 2631.7556 2631.7556 2635.2456 2568.5036 2571.9935 - 2571.9935 2575.4835 2580.4835 2583.9734 2588.9734 2592.4634 2592.4634 2595.9533 2595.9533 2599.4433 2599.4433 2602.9332 2602.9332 2606.4232 2606.4232 2609.9131 - 2623.9131 2627.4031 2627.4031 2630.893 2630.893 2634.383 2634.383 2637.8729 2568.5036 2571.9935 2571.9935 2575.4835 2580.4835 2583.9734 2588.9734 2592.4634 - 2592.4634 2595.9533 2595.9533 2599.4433 2599.4433 2602.9332 2602.9332 2606.4232 2606.4232 2609.9131 2623.9131 2627.4031 2627.4031 2630.893 2630.893 2634.383 - 2634.383 2637.8729 2566.7976 2570.2875 2570.2875 2573.7775 2578.7775 2582.2674 2588.1008 2591.5907 2591.5907 2595.0807 2595.0807 2598.5706 2598.5706 2602.0606 - 2602.0606 2605.5505 2605.5505 2609.0405 2626.5405 2630.0304 2630.0304 2633.5204 2633.5204 2637.0103 2637.0103 2640.5003 2566.7976 2570.2875 2570.2875 2573.7775 - 2578.7775 2582.2674 2588.1008 2591.5907 2591.5907 2595.0807 2595.0807 2598.5706 2598.5706 2602.0606 2602.0606 2605.5505 2605.5505 2609.0405 2626.5405 2630.0304 - 2630.0304 2633.5204 2633.5204 2637.0103 2637.0103 2640.5003 2565.0916 2568.5815 2568.5815 2572.0715 2577.0715 2580.5614 2587.2281 2590.7181 2590.7181 2594.208 - 2594.208 2597.698 2597.698 2601.1879 2601.1879 2604.6779 2604.6779 2608.1678 2629.1678 2632.6578 2632.6578 2636.1477 2636.1477 2639.6377 2639.6377 2643.1276 - 2565.0916 2568.5815 2568.5815 2572.0715 2577.0715 2580.5614 2587.2281 2590.7181 2590.7181 2594.208 2594.208 2597.698 2597.698 2601.1879 2601.1879 2604.6779 - 2604.6779 2608.1678 2629.1678 2632.6578 2632.6578 2636.1477 2636.1477 2639.6377 2639.6377 2643.1276 2563.3856 2566.8756 2566.8756 2570.3655 2575.3655 2578.8555 - 2586.3555 2589.8454 2589.8454 2593.3354 2593.3354 2596.8253 2596.8253 2600.3152 2600.3152 2603.8052 2603.8052 2607.2951 2631.7951 2635.2851 2635.2851 2638.775 - 2638.775 2642.265 2642.265 2645.7549 2563.3856 2566.8756 2566.8756 2570.3655 2575.3655 2578.8555 2586.3555 2589.8454 2589.8454 2593.3354 2593.3354 2596.8253 - 2596.8253 2600.3152 2600.3152 2603.8052 2603.8052 2607.2951 2631.7951 2635.2851 2635.2851 2638.775 2638.775 2642.265 2642.265 2645.7549 2561.6796 2565.1696 - 2565.1696 2568.6595 2573.6595 2577.1495 2585.4828 2588.9727 2588.9727 2592.4627 2592.4627 2595.9526 2595.9526 2599.4426 2599.4426 2602.9325 2602.9325 2606.4225 - 2634.4225 2637.9124 2637.9124 2641.4024 2641.4024 2644.8923 2644.8923 2648.3823 2561.6796 2565.1696 2565.1696 2568.6595 2573.6595 2577.1495 2585.4828 2588.9727 - 2588.9727 2592.4627 2592.4627 2595.9526 2595.9526 2599.4426 2599.4426 2602.9325 2602.9325 2606.4225 2634.4225 2637.9124 2637.9124 2641.4024 2641.4024 2644.8923 - 2644.8923 2648.3823 2559.9736 2563.4636 2563.4636 2566.9535 2571.9535 2575.4435 2584.6101 2588.1001 2588.1001 2591.59 2591.59 2595.08 2595.08 2598.5699 - 2598.5699 2602.0599 2602.0599 2605.5498 2637.0498 2640.5398 2640.5398 2644.0297 2644.0297 2647.5197 2647.5197 2651.0096 2559.9736 2563.4636 2563.4636 2566.9535 - 2571.9535 2575.4435 2584.6101 2588.1001 2588.1001 2591.59 2591.59 2595.08 2595.08 2598.5699 2598.5699 2602.0599 2602.0599 2605.5498 2637.0498 2640.5398 - 2640.5398 2644.0297 2644.0297 2647.5197 2647.5197 2651.0096 2558.2676 2561.7576 2561.7576 2565.2475 2570.2475 2573.7375 2583.7375 2587.2274 2587.2274 2590.7174 - 2590.7174 2594.2073 2594.2073 2597.6973 2597.6973 2601.1872 2601.1872 2604.6772 2639.6772 2643.1671 2643.1671 2646.6571 2646.6571 2650.147 2650.147 2653.637 - 2589.466 2592.956 2592.956 2596.4459 2599.4459 2602.9359 2602.9359 2606.4258 2606.4258 2609.9158 2609.9158 2613.4057 2613.4057 2616.8957 2616.8957 2620.3856 - 2620.3856 2623.8756 2623.8756 2627.3655 2627.3655 2630.8555 2630.8555 2634.3454 2634.3454 2637.8354 2588.5934 2592.0833 2592.0833 2595.5733 2598.5733 2602.0632 - 2602.0632 2605.5532 2605.5532 2609.0431 2609.0431 2612.5331 2612.5331 2616.023 2616.023 2619.513 2619.513 2623.0029 2623.0029 2626.4929 2626.4929 2629.9828 - 2629.9828 2633.4728 2633.4728 2636.9627 2588.5934 2592.0833 2592.0833 2595.5733 2598.5733 2602.0632 2602.0632 2605.5532 2605.5532 2609.0431 2609.0431 2612.5331 - 2612.5331 2616.023 2616.023 2619.513 2619.513 2623.0029 2623.0029 2626.4929 2626.4929 2629.9828 2629.9828 2633.4728 2633.4728 2636.9627 2587.7207 2591.2107 - 2591.2107 2594.7006 2597.7006 2601.1906 2601.1906 2604.6805 2604.6805 2608.1705 2608.1705 2611.6604 2611.6604 2615.1504 2615.1504 2618.6403 2618.6403 2622.1303 - 2622.1303 2625.6202 2625.6202 2629.1102 2629.1102 2632.6001 2632.6001 2636.0901 2587.7207 2591.2107 2591.2107 2594.7006 2597.7006 2601.1906 2601.1906 2604.6805 - 2604.6805 2608.1705 2608.1705 2611.6604 2611.6604 2615.1504 2615.1504 2618.6403 2618.6403 2622.1303 2622.1303 2625.6202 2625.6202 2629.1102 2629.1102 2632.6001 - 2632.6001 2636.0901 2586.8481 2590.338 2590.338 2593.828 2596.828 2600.3179 2600.3179 2603.8079 2603.8079 2607.2978 2607.2978 2610.7878 2610.7878 2614.2777 - 2614.2777 2617.7677 2617.7677 2621.2576 2621.2576 2624.7476 2624.7476 2628.2375 2628.2375 2631.7275 2631.7275 2635.2174 2586.8481 2590.338 2590.338 2593.828 - 2596.828 2600.3179 2600.3179 2603.8079 2603.8079 2607.2978 2607.2978 2610.7878 2610.7878 2614.2777 2614.2777 2617.7677 2617.7677 2621.2576 2621.2576 2624.7476 - 2624.7476 2628.2375 2628.2375 2631.7275 2631.7275 2635.2174 2585.9754 2589.4654 2589.4654 2592.9553 2595.9553 2599.4453 2599.4453 2602.9352 2602.9352 2606.4252 - 2606.4252 2609.9151 2609.9151 2613.4051 2613.4051 2616.895 2616.895 2620.385 2620.385 2623.8749 2623.8749 2627.3649 2627.3649 2630.8548 2630.8548 2634.3448 - 2585.9754 2589.4654 2589.4654 2592.9553 2592.9553 2596.4453 2599.4453 2602.9352 2602.9352 2606.4252 2606.4252 2609.9151 2609.9151 2613.4051 2613.4051 2616.895 - 2616.895 2620.385 2620.385 2623.8749 2623.8749 2627.3649 2627.3649 2630.8548 2630.8548 2634.3448 2585.1028 2588.5927 2588.5927 2592.0827 2592.0827 2595.5726 - 2598.5726 2602.0626 2602.0626 2605.5525 2605.5525 2609.0424 2609.0424 2612.5324 2612.5324 2616.0223 2616.0223 2619.5123 2619.5123 2623.0022 2623.0022 2626.4922 - 2626.4922 2629.9821 2629.9821 2633.4721 2585.1028 2588.5927 2588.5927 2592.0827 2592.0827 2595.5726 2598.5726 2602.0626 2602.0626 2605.5525 2605.5525 2609.0424 - 2609.0424 2612.5324 2612.5324 2616.0223 2616.0223 2619.5123 2619.5123 2623.0022 2623.0022 2626.4922 2626.4922 2629.9821 2629.9821 2633.4721 2584.2301 2587.72 - 2587.72 2591.21 2591.21 2594.6999 2597.6999 2601.1899 2601.1899 2604.6798 2604.6798 2608.1698 2608.1698 2611.6597 2611.6597 2615.1497 2615.1497 2618.6396 - 2618.6396 2622.1296 2622.1296 2625.6195 2625.6195 2629.1095 2629.1095 2632.5994 2584.2301 2587.72 2587.72 2591.21 2591.21 2594.6999 2597.6999 2601.1899 - 2601.1899 2604.6798 2604.6798 2608.1698 2608.1698 2611.6597 2611.6597 2615.1497 2615.1497 2618.6396 2618.6396 2622.1296 2622.1296 2625.6195 2625.6195 2629.1095 - 2629.1095 2632.5994 2583.3574 2586.8474 2586.8474 2590.3373 2590.3373 2593.8273 2596.8273 2600.3172 2600.3172 2603.8072 2603.8072 2607.2971 2607.2971 2610.7871 - 2610.7871 2614.277 2614.277 2617.767 2617.767 2621.2569 2621.2569 2624.7469 2624.7469 2628.2368 2628.2368 2631.7268 2583.3574 2586.8474 2586.8474 2590.3373 - 2590.3373 2593.8273 2596.8273 2600.3172 2600.3172 2603.8072 2603.8072 2607.2971 2607.2971 2610.7871 2610.7871 2614.277 2614.277 2617.767 2617.767 2621.2569 - 2621.2569 2624.7469 2624.7469 2628.2368 2628.2368 2631.7268 2582.4848 2585.9747 2585.9747 2589.4647 2589.4647 2592.9546 2595.9546 2599.4446 2599.4446 2602.9345 - 2602.9345 2606.4245 2606.4245 2609.9144 2609.9144 2613.4044 2613.4044 2616.8943 2616.8943 2620.3843 2620.3843 2623.8742 2623.8742 2627.3642 2627.3642 2630.8541 - 2585.4848 2588.9747 2588.9747 2592.4647 2592.4647 2595.9546 2595.9546 2599.4446 2599.4446 2602.9345 2602.9345 2606.4245 2606.4245 2609.9144 2609.9144 2613.4044 - 2613.4044 2616.8943 2616.8943 2620.3843 2620.3843 2623.8742 2623.8742 2627.3642 2627.3642 2630.8541 2584.6121 2588.1021 2588.1021 2591.592 2591.592 2595.082 - 2595.082 2598.5719 2598.5719 2602.0619 2602.0619 2605.5518 2605.5518 2609.0418 2609.0418 2612.5317 2612.5317 2616.0217 2616.0217 2619.5116 2619.5116 2623.0016 - 2623.0016 2626.4915 2626.4915 2629.9815 2584.6121 2588.1021 2588.1021 2591.592 2591.592 2595.082 2595.082 2598.5719 2598.5719 2602.0619 2602.0619 2605.5518 - 2605.5518 2609.0418 2609.0418 2612.5317 2612.5317 2616.0217 2616.0217 2619.5116 2619.5116 2623.0016 2623.0016 2626.4915 2626.4915 2629.9815 2583.7395 2587.2294 - 2587.2294 2590.7194 2590.7194 2594.2093 2594.2093 2597.6993 2597.6993 2601.1892 2601.1892 2604.6792 2604.6792 2608.1691 2608.1691 2611.6591 2611.6591 2615.149 - 2615.149 2618.639 2618.639 2622.1289 2622.1289 2625.6189 2625.6189 2629.1088 2583.7395 2587.2294 2587.2294 2590.7194 2590.7194 2594.2093 2594.2093 2597.6993 - 2597.6993 2601.1892 2601.1892 2604.6792 2604.6792 2608.1691 2608.1691 2611.6591 2611.6591 2615.149 2615.149 2618.639 2618.639 2622.1289 2622.1289 2625.6189 - 2625.6189 2629.1088 2582.0335 2585.5234 2585.5234 2589.0134 2589.0134 2592.5033 2593.3367 2596.8266 2596.8266 2600.3166 2600.3166 2603.8065 2603.8065 2607.2965 - 2607.2965 2610.7864 2610.7864 2614.2764 2614.2764 2617.7663 2617.7663 2621.2563 2621.2563 2624.7462 2624.7462 2628.2362 2582.0335 2585.5234 2585.5234 2589.0134 - 2589.0134 2592.5033 2593.3367 2596.8266 2596.8266 2600.3166 2600.3166 2603.8065 2603.8065 2607.2965 2607.2965 2610.7864 2610.7864 2614.2764 2614.2764 2617.7663 - 2617.7663 2621.2563 2621.2563 2624.7462 2624.7462 2628.2362 2580.3275 2583.8175 2583.8175 2587.3074 2587.3074 2590.7974 2592.464 2595.954 2595.954 2599.4439 - 2599.4439 2602.9339 2602.9339 2606.4238 2606.4238 2609.9138 2609.9138 2613.4037 2613.4037 2616.8937 2616.8937 2620.3836 2620.3836 2623.8736 2623.8736 2627.3635 - 2580.3275 2583.8175 2583.8175 2587.3074 2587.3074 2590.7974 2592.464 2595.954 2595.954 2599.4439 2599.4439 2602.9339 2602.9339 2606.4238 2606.4238 2609.9138 - 2609.9138 2613.4037 2613.4037 2616.8937 2616.8937 2620.3836 2620.3836 2623.8736 2623.8736 2627.3635 2578.6215 2582.1115 2582.1115 2585.6014 2585.6014 2589.0914 - 2591.5914 2595.0813 2595.0813 2598.5713 2598.5713 2602.0612 2602.0612 2605.5512 2605.5512 2609.0411 2609.0411 2612.5311 2616.0311 2619.521 2619.521 2623.011 - 2623.011 2626.5009 2626.5009 2629.9909 2578.6215 2582.1115 2582.1115 2585.6014 2585.6014 2589.0914 2591.5914 2595.0813 2595.0813 2598.5713 2598.5713 2602.0612 - 2602.0612 2605.5512 2605.5512 2609.0411 2609.0411 2612.5311 2616.0311 2619.521 2619.521 2623.011 2623.011 2626.5009 2626.5009 2629.9909 2576.9155 2580.4055 - 2580.4055 2583.8954 2583.8954 2587.3854 2590.7187 2594.2087 2594.2087 2597.6986 2597.6986 2601.1886 2601.1886 2604.6785 2604.6785 2608.1685 2608.1685 2611.6584 - 2618.6584 2622.1484 2622.1484 2625.6383 2625.6383 2629.1283 2629.1283 2632.6182 2576.9155 2580.4055 2580.4055 2583.8954 2583.8954 2587.3854 2590.7187 2594.2087 - 2594.2087 2597.6986 2597.6986 2601.1886 2601.1886 2604.6785 2604.6785 2608.1685 2608.1685 2611.6584 2618.6584 2622.1484 2622.1484 2625.6383 2625.6383 2629.1283 - 2629.1283 2632.6182 2575.2095 2578.6995 2578.6995 2582.1894 2582.1894 2585.6794 2589.8461 2593.336 2593.336 2596.826 2596.826 2600.3159 2600.3159 2603.8059 - 2603.8059 2607.2958 2607.2958 2610.7858 2621.2858 2624.7757 2624.7757 2628.2657 2628.2657 2631.7556 2631.7556 2635.2456 2570.2095 2573.6995 2573.6995 2577.1894 - 2582.1894 2585.6794 2589.8461 2593.336 2593.336 2596.826 2596.826 2600.3159 2600.3159 2603.8059 2603.8059 2607.2958 2607.2958 2610.7858 2621.2858 2624.7757 - 2624.7757 2628.2657 2628.2657 2631.7556 2631.7556 2635.2456 2568.5036 2571.9935 2571.9935 2575.4835 2580.4835 2583.9734 2588.9734 2592.4634 2592.4634 2595.9533 - 2595.9533 2599.4433 2599.4433 2602.9332 2602.9332 2606.4232 2606.4232 2609.9131 2623.9131 2627.4031 2627.4031 2630.893 2630.893 2634.383 2634.383 2637.8729 - 2568.5036 2571.9935 2571.9935 2575.4835 2580.4835 2583.9734 2588.9734 2592.4634 2592.4634 2595.9533 2595.9533 2599.4433 2599.4433 2602.9332 2602.9332 2606.4232 - 2606.4232 2609.9131 2623.9131 2627.4031 2627.4031 2630.893 2630.893 2634.383 2634.383 2637.8729 2566.7976 2570.2875 2570.2875 2573.7775 2578.7775 2582.2674 - 2588.1008 2591.5907 2591.5907 2595.0807 2595.0807 2598.5706 2598.5706 2602.0606 2602.0606 2605.5505 2605.5505 2609.0405 2626.5405 2630.0304 2630.0304 2633.5204 - 2633.5204 2637.0103 2637.0103 2640.5003 2566.7976 2570.2875 2570.2875 2573.7775 2578.7775 2582.2674 2588.1008 2591.5907 2591.5907 2595.0807 2595.0807 2598.5706 - 2598.5706 2602.0606 2602.0606 2605.5505 2605.5505 2609.0405 2626.5405 2630.0304 2630.0304 2633.5204 2633.5204 2637.0103 2637.0103 2640.5003 2565.0916 2568.5815 - 2568.5815 2572.0715 2577.0715 2580.5614 2587.2281 2590.7181 2590.7181 2594.208 2594.208 2597.698 2597.698 2601.1879 2601.1879 2604.6779 2604.6779 2608.1678 - 2629.1678 2632.6578 2632.6578 2636.1477 2636.1477 2639.6377 2639.6377 2643.1276 2565.0916 2568.5815 2568.5815 2572.0715 2577.0715 2580.5614 2587.2281 2590.7181 - 2590.7181 2594.208 2594.208 2597.698 2597.698 2601.1879 2601.1879 2604.6779 2604.6779 2608.1678 2629.1678 2632.6578 2632.6578 2636.1477 2636.1477 2639.6377 - 2639.6377 2643.1276 2563.3856 2566.8756 2566.8756 2570.3655 2575.3655 2578.8555 2586.3555 2589.8454 2589.8454 2593.3354 2593.3354 2596.8253 2596.8253 2600.3152 - 2600.3152 2603.8052 2603.8052 2607.2951 2631.7951 2635.2851 2635.2851 2638.775 2638.775 2642.265 2642.265 2645.7549 2563.3856 2566.8756 2566.8756 2570.3655 - 2575.3655 2578.8555 2586.3555 2589.8454 2589.8454 2593.3354 2593.3354 2596.8253 2596.8253 2600.3152 2600.3152 2603.8052 2603.8052 2607.2951 2631.7951 2635.2851 - 2635.2851 2638.775 2638.775 2642.265 2642.265 2645.7549 2561.6796 2565.1696 2565.1696 2568.6595 2573.6595 2577.1495 2585.4828 2588.9727 2588.9727 2592.4627 - 2592.4627 2595.9526 2595.9526 2599.4426 2599.4426 2602.9325 2602.9325 2606.4225 2634.4225 2637.9124 2637.9124 2641.4024 2641.4024 2644.8923 2644.8923 2648.3823 - 2561.6796 2565.1696 2565.1696 2568.6595 2573.6595 2577.1495 2585.4828 2588.9727 2588.9727 2592.4627 2592.4627 2595.9526 2595.9526 2599.4426 2599.4426 2602.9325 - 2602.9325 2606.4225 2634.4225 2637.9124 2637.9124 2641.4024 2641.4024 2644.8923 2644.8923 2648.3823 2559.9736 2563.4636 2563.4636 2566.9535 2571.9535 2575.4435 - 2584.6101 2588.1001 2588.1001 2591.59 2591.59 2595.08 2595.08 2598.5699 2598.5699 2602.0599 2602.0599 2605.5498 2637.0498 2640.5398 2640.5398 2644.0297 - 2644.0297 2647.5197 2647.5197 2651.0096 2559.9736 2563.4636 2563.4636 2566.9535 2571.9535 2575.4435 2584.6101 2588.1001 2588.1001 2591.59 2591.59 2595.08 - 2595.08 2598.5699 2598.5699 2602.0599 2602.0599 2605.5498 2637.0498 2640.5398 2640.5398 2644.0297 2644.0297 2647.5197 2647.5197 2651.0096 2558.2676 2561.7576 - 2561.7576 2565.2475 2570.2475 2573.7375 2583.7375 2587.2274 2587.2274 2590.7174 2590.7174 2594.2073 2594.2073 2597.6973 2597.6973 2601.1872 2601.1872 2604.6772 - 2639.6772 2643.1671 2643.1671 2646.6571 2646.6571 2650.147 2650.147 2653.637 2599.4595 2602.9495 2602.9495 2606.4394 2609.4394 2612.9294 2612.9294 2616.4193 - 2616.4193 2619.9093 2619.9093 2623.3992 2623.3992 2626.8892 2626.8892 2630.3791 2630.3791 2633.8691 2633.8691 2637.359 2637.359 2640.849 2640.849 2644.3389 - 2644.3389 2647.8289 2598.5869 2602.0768 2602.0768 2605.5668 2608.5668 2612.0567 2612.0567 2615.5467 2615.5467 2619.0366 2619.0366 2622.5266 2622.5266 2626.0165 - 2626.0165 2629.5065 2629.5065 2632.9964 2632.9964 2636.4864 2636.4864 2639.9763 2639.9763 2643.4663 2643.4663 2646.9562 2598.5869 2602.0768 2602.0768 2605.5668 - 2608.5668 2612.0567 2612.0567 2615.5467 2615.5467 2619.0366 2619.0366 2622.5266 2622.5266 2626.0165 2626.0165 2629.5065 2629.5065 2632.9964 2632.9964 2636.4864 - 2636.4864 2639.9763 2639.9763 2643.4663 2643.4663 2646.9562 2597.7142 2601.2042 2601.2042 2604.6941 2607.6941 2611.1841 2611.1841 2614.674 2614.674 2618.164 - 2618.164 2621.6539 2621.6539 2625.1439 2625.1439 2628.6338 2628.6338 2632.1238 2632.1238 2635.6137 2635.6137 2639.1037 2639.1037 2642.5936 2642.5936 2646.0836 - 2597.7142 2601.2042 2601.2042 2604.6941 2607.6941 2611.1841 2611.1841 2614.674 2614.674 2618.164 2618.164 2621.6539 2621.6539 2625.1439 2625.1439 2628.6338 - 2628.6338 2632.1238 2632.1238 2635.6137 2635.6137 2639.1037 2639.1037 2642.5936 2642.5936 2646.0836 2596.8416 2600.3315 2600.3315 2603.8215 2606.8215 2610.3114 - 2610.3114 2613.8014 2613.8014 2617.2913 2617.2913 2620.7813 2620.7813 2624.2712 2624.2712 2627.7612 2627.7612 2631.2511 2631.2511 2634.7411 2634.7411 2638.231 - 2638.231 2641.721 2641.721 2645.2109 2596.8416 2600.3315 2600.3315 2603.8215 2606.8215 2610.3114 2610.3114 2613.8014 2613.8014 2617.2913 2617.2913 2620.7813 - 2620.7813 2624.2712 2624.2712 2627.7612 2627.7612 2631.2511 2631.2511 2634.7411 2634.7411 2638.231 2638.231 2641.721 2641.721 2645.2109 2595.9689 2599.4589 - 2599.4589 2602.9488 2605.9488 2609.4388 2609.4388 2612.9287 2612.9287 2616.4187 2616.4187 2619.9086 2619.9086 2623.3986 2623.3986 2626.8885 2626.8885 2630.3785 - 2630.3785 2633.8684 2633.8684 2637.3584 2637.3584 2640.8483 2640.8483 2644.3383 2595.9689 2599.4589 2599.4589 2602.9488 2602.9488 2606.4388 2609.4388 2612.9287 - 2612.9287 2616.4187 2616.4187 2619.9086 2619.9086 2623.3986 2623.3986 2626.8885 2626.8885 2630.3785 2630.3785 2633.8684 2633.8684 2637.3584 2637.3584 2640.8483 - 2640.8483 2644.3383 2595.0963 2598.5862 2598.5862 2602.0762 2602.0762 2605.5661 2608.5661 2612.0561 2612.0561 2615.546 2615.546 2619.036 2619.036 2622.5259 - 2622.5259 2626.0159 2626.0159 2629.5058 2629.5058 2632.9958 2632.9958 2636.4857 2636.4857 2639.9757 2639.9757 2643.4656 2595.0963 2598.5862 2598.5862 2602.0762 - 2602.0762 2605.5661 2608.5661 2612.0561 2612.0561 2615.546 2615.546 2619.036 2619.036 2622.5259 2622.5259 2626.0159 2626.0159 2629.5058 2629.5058 2632.9958 - 2632.9958 2636.4857 2636.4857 2639.9757 2639.9757 2643.4656 2594.2236 2597.7136 2597.7136 2601.2035 2601.2035 2604.6935 2607.6935 2611.1834 2611.1834 2614.6734 - 2614.6734 2618.1633 2618.1633 2621.6533 2621.6533 2625.1432 2625.1432 2628.6332 2628.6332 2632.1231 2632.1231 2635.6131 2635.6131 2639.103 2639.103 2642.593 - 2594.2236 2597.7136 2597.7136 2601.2035 2601.2035 2604.6935 2607.6935 2611.1834 2611.1834 2614.6734 2614.6734 2618.1633 2618.1633 2621.6533 2621.6533 2625.1432 - 2625.1432 2628.6332 2628.6332 2632.1231 2632.1231 2635.6131 2635.6131 2639.103 2639.103 2642.593 2593.351 2596.8409 2596.8409 2600.3309 2600.3309 2603.8208 - 2606.8208 2610.3108 2610.3108 2613.8007 2613.8007 2617.2907 2617.2907 2620.7806 2620.7806 2624.2706 2624.2706 2627.7605 2627.7605 2631.2505 2631.2505 2634.7404 - 2634.7404 2638.2304 2638.2304 2641.7203 2593.351 2596.8409 2596.8409 2600.3309 2600.3309 2603.8208 2606.8208 2610.3108 2610.3108 2613.8007 2613.8007 2617.2907 - 2617.2907 2620.7806 2620.7806 2624.2706 2624.2706 2627.7605 2627.7605 2631.2505 2631.2505 2634.7404 2634.7404 2638.2304 2638.2304 2641.7203 2592.4783 2595.9683 - 2595.9683 2599.4582 2599.4582 2602.9482 2605.9482 2609.4381 2609.4381 2612.9281 2612.9281 2616.418 2616.418 2619.908 2619.908 2623.3979 2623.3979 2626.8879 - 2626.8879 2630.3778 2630.3778 2633.8678 2633.8678 2637.3577 2637.3577 2640.8477 2595.4783 2598.9683 2598.9683 2602.4582 2602.4582 2605.9482 2605.9482 2609.4381 - 2609.4381 2612.9281 2612.9281 2616.418 2616.418 2619.908 2619.908 2623.3979 2623.3979 2626.8879 2626.8879 2630.3778 2630.3778 2633.8678 2633.8678 2637.3577 - 2637.3577 2640.8477 2594.6057 2598.0956 2598.0956 2601.5856 2601.5856 2605.0755 2605.0755 2608.5655 2608.5655 2612.0554 2612.0554 2615.5454 2615.5454 2619.0353 - 2619.0353 2622.5253 2622.5253 2626.0152 2626.0152 2629.5052 2629.5052 2632.9951 2632.9951 2636.4851 2636.4851 2639.975 2594.6057 2598.0956 2598.0956 2601.5856 - 2601.5856 2605.0755 2605.0755 2608.5655 2608.5655 2612.0554 2612.0554 2615.5454 2615.5454 2619.0353 2619.0353 2622.5253 2622.5253 2626.0152 2626.0152 2629.5052 - 2629.5052 2632.9951 2632.9951 2636.4851 2636.4851 2639.975 2593.733 2597.223 2597.223 2600.7129 2600.7129 2604.2029 2604.2029 2607.6928 2607.6928 2611.1828 - 2611.1828 2614.6727 2614.6727 2618.1627 2618.1627 2621.6526 2621.6526 2625.1426 2625.1426 2628.6325 2628.6325 2632.1225 2632.1225 2635.6124 2635.6124 2639.1024 - 2593.733 2597.223 2597.223 2600.7129 2600.7129 2604.2029 2604.2029 2607.6928 2607.6928 2611.1828 2611.1828 2614.6727 2614.6727 2618.1627 2618.1627 2621.6526 - 2621.6526 2625.1426 2625.1426 2628.6325 2628.6325 2632.1225 2632.1225 2635.6124 2635.6124 2639.1024 2592.027 2595.517 2595.517 2599.0069 2599.0069 2602.4969 - 2603.3302 2606.8202 2606.8202 2610.3101 2610.3101 2613.8001 2613.8001 2617.29 2617.29 2620.78 2620.78 2624.2699 2624.2699 2627.7599 2627.7599 2631.2498 - 2631.2498 2634.7398 2634.7398 2638.2297 2592.027 2595.517 2595.517 2599.0069 2599.0069 2602.4969 2603.3302 2606.8202 2606.8202 2610.3101 2610.3101 2613.8001 - 2613.8001 2617.29 2617.29 2620.78 2620.78 2624.2699 2624.2699 2627.7599 2627.7599 2631.2498 2631.2498 2634.7398 2634.7398 2638.2297 2590.321 2593.811 - 2593.811 2597.3009 2597.3009 2600.7909 2602.4576 2605.9475 2605.9475 2609.4375 2609.4375 2612.9274 2612.9274 2616.4174 2616.4174 2619.9073 2619.9073 2623.3973 - 2623.3973 2626.8872 2626.8872 2630.3772 2630.3772 2633.8671 2633.8671 2637.357 2590.321 2593.811 2593.811 2597.3009 2597.3009 2600.7909 2602.4576 2605.9475 - 2605.9475 2609.4375 2609.4375 2612.9274 2612.9274 2616.4174 2616.4174 2619.9073 2619.9073 2623.3973 2623.3973 2626.8872 2626.8872 2630.3772 2630.3772 2633.8671 - 2633.8671 2637.357 2588.6151 2592.105 2592.105 2595.595 2595.595 2599.0849 2601.5849 2605.0748 2605.0748 2608.5648 2608.5648 2612.0547 2612.0547 2615.5447 - 2615.5447 2619.0346 2619.0346 2622.5246 2626.0246 2629.5145 2629.5145 2633.0045 2633.0045 2636.4944 2636.4944 2639.9844 2588.6151 2592.105 2592.105 2595.595 - 2595.595 2599.0849 2601.5849 2605.0748 2605.0748 2608.5648 2608.5648 2612.0547 2612.0547 2615.5447 2615.5447 2619.0346 2619.0346 2622.5246 2626.0246 2629.5145 - 2629.5145 2633.0045 2633.0045 2636.4944 2636.4944 2639.9844 2586.9091 2590.399 2590.399 2593.889 2593.889 2597.3789 2600.7122 2604.2022 2604.2022 2607.6921 - 2607.6921 2611.1821 2611.1821 2614.672 2614.672 2618.162 2618.162 2621.6519 2628.6519 2632.1419 2632.1419 2635.6318 2635.6318 2639.1218 2639.1218 2642.6117 - 2586.9091 2590.399 2590.399 2593.889 2593.889 2597.3789 2600.7122 2604.2022 2604.2022 2607.6921 2607.6921 2611.1821 2611.1821 2614.672 2614.672 2618.162 - 2618.162 2621.6519 2628.6519 2632.1419 2632.1419 2635.6318 2635.6318 2639.1218 2639.1218 2642.6117 2585.2031 2588.693 2588.693 2592.183 2592.183 2595.6729 - 2599.8396 2603.3295 2603.3295 2606.8195 2606.8195 2610.3094 2610.3094 2613.7994 2613.7994 2617.2893 2617.2893 2620.7793 2631.2793 2634.7692 2634.7692 2638.2592 - 2638.2592 2641.7491 2641.7491 2645.2391 2580.2031 2583.693 2583.693 2587.183 2592.183 2595.6729 2599.8396 2603.3295 2603.3295 2606.8195 2606.8195 2610.3094 - 2610.3094 2613.7994 2613.7994 2617.2893 2617.2893 2620.7793 2631.2793 2634.7692 2634.7692 2638.2592 2638.2592 2641.7491 2641.7491 2645.2391 2578.4971 2581.987 - 2581.987 2585.477 2590.477 2593.9669 2598.9669 2602.4569 2602.4569 2605.9468 2605.9468 2609.4368 2609.4368 2612.9267 2612.9267 2616.4167 2616.4167 2619.9066 - 2633.9066 2637.3966 2637.3966 2640.8865 2640.8865 2644.3765 2644.3765 2647.8664 2578.4971 2581.987 2581.987 2585.477 2590.477 2593.9669 2598.9669 2602.4569 - 2602.4569 2605.9468 2605.9468 2609.4368 2609.4368 2612.9267 2612.9267 2616.4167 2616.4167 2619.9066 2633.9066 2637.3966 2637.3966 2640.8865 2640.8865 2644.3765 - 2644.3765 2647.8664 2576.7911 2580.2811 2580.2811 2583.771 2588.771 2592.261 2598.0943 2601.5842 2601.5842 2605.0742 2605.0742 2608.5641 2608.5641 2612.0541 - 2612.0541 2615.544 2615.544 2619.034 2636.534 2640.0239 2640.0239 2643.5139 2643.5139 2647.0038 2647.0038 2650.4938 2576.7911 2580.2811 2580.2811 2583.771 - 2588.771 2592.261 2598.0943 2601.5842 2601.5842 2605.0742 2605.0742 2608.5641 2608.5641 2612.0541 2612.0541 2615.544 2615.544 2619.034 2636.534 2640.0239 - 2640.0239 2643.5139 2643.5139 2647.0038 2647.0038 2650.4938 2575.0851 2578.5751 2578.5751 2582.065 2587.065 2590.555 2597.2216 2600.7116 2600.7116 2604.2015 - 2604.2015 2607.6915 2607.6915 2611.1814 2611.1814 2614.6714 2614.6714 2618.1613 2639.1613 2642.6513 2642.6513 2646.1412 2646.1412 2649.6312 2649.6312 2653.1211 - 2575.0851 2578.5751 2578.5751 2582.065 2587.065 2590.555 2597.2216 2600.7116 2600.7116 2604.2015 2604.2015 2607.6915 2607.6915 2611.1814 2611.1814 2614.6714 - 2614.6714 2618.1613 2639.1613 2642.6513 2642.6513 2646.1412 2646.1412 2649.6312 2649.6312 2653.1211 2573.3791 2576.8691 2576.8691 2580.359 2585.359 2588.849 - 2596.349 2599.8389 2599.8389 2603.3289 2603.3289 2606.8188 2606.8188 2610.3088 2610.3088 2613.7987 2613.7987 2617.2887 2641.7887 2645.2786 2645.2786 2648.7686 - 2648.7686 2652.2585 2652.2585 2655.7485 2573.3791 2576.8691 2576.8691 2580.359 2585.359 2588.849 2596.349 2599.8389 2599.8389 2603.3289 2603.3289 2606.8188 - 2606.8188 2610.3088 2610.3088 2613.7987 2613.7987 2617.2887 2641.7887 2645.2786 2645.2786 2648.7686 2648.7686 2652.2585 2652.2585 2655.7485 2571.6731 2575.1631 - 2575.1631 2578.653 2583.653 2587.143 2595.4763 2598.9663 2598.9663 2602.4562 2602.4562 2605.9462 2605.9462 2609.4361 2609.4361 2612.9261 2612.9261 2616.416 - 2644.416 2647.906 2647.906 2651.3959 2651.3959 2654.8859 2654.8859 2658.3758 2571.6731 2575.1631 2575.1631 2578.653 2583.653 2587.143 2595.4763 2598.9663 - 2598.9663 2602.4562 2602.4562 2605.9462 2605.9462 2609.4361 2609.4361 2612.9261 2612.9261 2616.416 2644.416 2647.906 2647.906 2651.3959 2651.3959 2654.8859 - 2654.8859 2658.3758 2569.9672 2573.4571 2573.4571 2576.9471 2581.9471 2585.437 2594.6037 2598.0936 2598.0936 2601.5836 2601.5836 2605.0735 2605.0735 2608.5635 - 2608.5635 2612.0534 2612.0534 2615.5434 2647.0434 2650.5333 2650.5333 2654.0233 2654.0233 2657.5132 2657.5132 2661.0032 2569.9672 2573.4571 2573.4571 2576.9471 - 2581.9471 2585.437 2594.6037 2598.0936 2598.0936 2601.5836 2601.5836 2605.0735 2605.0735 2608.5635 2608.5635 2612.0534 2612.0534 2615.5434 2647.0434 2650.5333 - 2650.5333 2654.0233 2654.0233 2657.5132 2657.5132 2661.0032 2568.2612 2571.7511 2571.7511 2575.2411 2580.2411 2583.731 2593.731 2597.221 2597.221 2600.7109 - 2600.7109 2604.2009 2604.2009 2607.6908 2607.6908 2611.1808 2611.1808 2614.6707 2649.6707 2653.1607 2653.1607 2656.6506 2656.6506 2660.1406 2660.1406 2663.6305 - 2599.4595 2602.9495 2602.9495 2606.4394 2609.4394 2612.9294 2612.9294 2616.4193 2616.4193 2619.9093 2619.9093 2623.3992 2623.3992 2626.8892 2626.8892 2630.3791 - 2630.3791 2633.8691 2633.8691 2637.359 2637.359 2640.849 2640.849 2644.3389 2644.3389 2647.8289 2598.5869 2602.0768 2602.0768 2605.5668 2608.5668 2612.0567 - 2612.0567 2615.5467 2615.5467 2619.0366 2619.0366 2622.5266 2622.5266 2626.0165 2626.0165 2629.5065 2629.5065 2632.9964 2632.9964 2636.4864 2636.4864 2639.9763 - 2639.9763 2643.4663 2643.4663 2646.9562 2598.5869 2602.0768 2602.0768 2605.5668 2608.5668 2612.0567 2612.0567 2615.5467 2615.5467 2619.0366 2619.0366 2622.5266 - 2622.5266 2626.0165 2626.0165 2629.5065 2629.5065 2632.9964 2632.9964 2636.4864 2636.4864 2639.9763 2639.9763 2643.4663 2643.4663 2646.9562 2597.7142 2601.2042 - 2601.2042 2604.6941 2607.6941 2611.1841 2611.1841 2614.674 2614.674 2618.164 2618.164 2621.6539 2621.6539 2625.1439 2625.1439 2628.6338 2628.6338 2632.1238 - 2632.1238 2635.6137 2635.6137 2639.1037 2639.1037 2642.5936 2642.5936 2646.0836 2597.7142 2601.2042 2601.2042 2604.6941 2607.6941 2611.1841 2611.1841 2614.674 - 2614.674 2618.164 2618.164 2621.6539 2621.6539 2625.1439 2625.1439 2628.6338 2628.6338 2632.1238 2632.1238 2635.6137 2635.6137 2639.1037 2639.1037 2642.5936 - 2642.5936 2646.0836 2596.8416 2600.3315 2600.3315 2603.8215 2606.8215 2610.3114 2610.3114 2613.8014 2613.8014 2617.2913 2617.2913 2620.7813 2620.7813 2624.2712 - 2624.2712 2627.7612 2627.7612 2631.2511 2631.2511 2634.7411 2634.7411 2638.231 2638.231 2641.721 2641.721 2645.2109 2596.8416 2600.3315 2600.3315 2603.8215 - 2606.8215 2610.3114 2610.3114 2613.8014 2613.8014 2617.2913 2617.2913 2620.7813 2620.7813 2624.2712 2624.2712 2627.7612 2627.7612 2631.2511 2631.2511 2634.7411 - 2634.7411 2638.231 2638.231 2641.721 2641.721 2645.2109 2595.9689 2599.4589 2599.4589 2602.9488 2605.9488 2609.4388 2609.4388 2612.9287 2612.9287 2616.4187 - 2616.4187 2619.9086 2619.9086 2623.3986 2623.3986 2626.8885 2626.8885 2630.3785 2630.3785 2633.8684 2633.8684 2637.3584 2637.3584 2640.8483 2640.8483 2644.3383 - 2595.9689 2599.4589 2599.4589 2602.9488 2602.9488 2606.4388 2609.4388 2612.9287 2612.9287 2616.4187 2616.4187 2619.9086 2619.9086 2623.3986 2623.3986 2626.8885 - 2626.8885 2630.3785 2630.3785 2633.8684 2633.8684 2637.3584 2637.3584 2640.8483 2640.8483 2644.3383 2595.0963 2598.5862 2598.5862 2602.0762 2602.0762 2605.5661 - 2608.5661 2612.0561 2612.0561 2615.546 2615.546 2619.036 2619.036 2622.5259 2622.5259 2626.0159 2626.0159 2629.5058 2629.5058 2632.9958 2632.9958 2636.4857 - 2636.4857 2639.9757 2639.9757 2643.4656 2595.0963 2598.5862 2598.5862 2602.0762 2602.0762 2605.5661 2608.5661 2612.0561 2612.0561 2615.546 2615.546 2619.036 - 2619.036 2622.5259 2622.5259 2626.0159 2626.0159 2629.5058 2629.5058 2632.9958 2632.9958 2636.4857 2636.4857 2639.9757 2639.9757 2643.4656 2594.2236 2597.7136 - 2597.7136 2601.2035 2601.2035 2604.6935 2607.6935 2611.1834 2611.1834 2614.6734 2614.6734 2618.1633 2618.1633 2621.6533 2621.6533 2625.1432 2625.1432 2628.6332 - 2628.6332 2632.1231 2632.1231 2635.6131 2635.6131 2639.103 2639.103 2642.593 2594.2236 2597.7136 2597.7136 2601.2035 2601.2035 2604.6935 2607.6935 2611.1834 - 2611.1834 2614.6734 2614.6734 2618.1633 2618.1633 2621.6533 2621.6533 2625.1432 2625.1432 2628.6332 2628.6332 2632.1231 2632.1231 2635.6131 2635.6131 2639.103 - 2639.103 2642.593 2593.351 2596.8409 2596.8409 2600.3309 2600.3309 2603.8208 2606.8208 2610.3108 2610.3108 2613.8007 2613.8007 2617.2907 2617.2907 2620.7806 - 2620.7806 2624.2706 2624.2706 2627.7605 2627.7605 2631.2505 2631.2505 2634.7404 2634.7404 2638.2304 2638.2304 2641.7203 2593.351 2596.8409 2596.8409 2600.3309 - 2600.3309 2603.8208 2606.8208 2610.3108 2610.3108 2613.8007 2613.8007 2617.2907 2617.2907 2620.7806 2620.7806 2624.2706 2624.2706 2627.7605 2627.7605 2631.2505 - 2631.2505 2634.7404 2634.7404 2638.2304 2638.2304 2641.7203 2592.4783 2595.9683 2595.9683 2599.4582 2599.4582 2602.9482 2605.9482 2609.4381 2609.4381 2612.9281 - 2612.9281 2616.418 2616.418 2619.908 2619.908 2623.3979 2623.3979 2626.8879 2626.8879 2630.3778 2630.3778 2633.8678 2633.8678 2637.3577 2637.3577 2640.8477 - 2595.4783 2598.9683 2598.9683 2602.4582 2602.4582 2605.9482 2605.9482 2609.4381 2609.4381 2612.9281 2612.9281 2616.418 2616.418 2619.908 2619.908 2623.3979 - 2623.3979 2626.8879 2626.8879 2630.3778 2630.3778 2633.8678 2633.8678 2637.3577 2637.3577 2640.8477 2594.6057 2598.0956 2598.0956 2601.5856 2601.5856 2605.0755 - 2605.0755 2608.5655 2608.5655 2612.0554 2612.0554 2615.5454 2615.5454 2619.0353 2619.0353 2622.5253 2622.5253 2626.0152 2626.0152 2629.5052 2629.5052 2632.9951 - 2632.9951 2636.4851 2636.4851 2639.975 2594.6057 2598.0956 2598.0956 2601.5856 2601.5856 2605.0755 2605.0755 2608.5655 2608.5655 2612.0554 2612.0554 2615.5454 - 2615.5454 2619.0353 2619.0353 2622.5253 2622.5253 2626.0152 2626.0152 2629.5052 2629.5052 2632.9951 2632.9951 2636.4851 2636.4851 2639.975 2593.733 2597.223 - 2597.223 2600.7129 2600.7129 2604.2029 2604.2029 2607.6928 2607.6928 2611.1828 2611.1828 2614.6727 2614.6727 2618.1627 2618.1627 2621.6526 2621.6526 2625.1426 - 2625.1426 2628.6325 2628.6325 2632.1225 2632.1225 2635.6124 2635.6124 2639.1024 2593.733 2597.223 2597.223 2600.7129 2600.7129 2604.2029 2604.2029 2607.6928 - 2607.6928 2611.1828 2611.1828 2614.6727 2614.6727 2618.1627 2618.1627 2621.6526 2621.6526 2625.1426 2625.1426 2628.6325 2628.6325 2632.1225 2632.1225 2635.6124 - 2635.6124 2639.1024 2592.027 2595.517 2595.517 2599.0069 2599.0069 2602.4969 2603.3302 2606.8202 2606.8202 2610.3101 2610.3101 2613.8001 2613.8001 2617.29 - 2617.29 2620.78 2620.78 2624.2699 2624.2699 2627.7599 2627.7599 2631.2498 2631.2498 2634.7398 2634.7398 2638.2297 2592.027 2595.517 2595.517 2599.0069 - 2599.0069 2602.4969 2603.3302 2606.8202 2606.8202 2610.3101 2610.3101 2613.8001 2613.8001 2617.29 2617.29 2620.78 2620.78 2624.2699 2624.2699 2627.7599 - 2627.7599 2631.2498 2631.2498 2634.7398 2634.7398 2638.2297 2590.321 2593.811 2593.811 2597.3009 2597.3009 2600.7909 2602.4576 2605.9475 2605.9475 2609.4375 - 2609.4375 2612.9274 2612.9274 2616.4174 2616.4174 2619.9073 2619.9073 2623.3973 2623.3973 2626.8872 2626.8872 2630.3772 2630.3772 2633.8671 2633.8671 2637.357 - 2590.321 2593.811 2593.811 2597.3009 2597.3009 2600.7909 2602.4576 2605.9475 2605.9475 2609.4375 2609.4375 2612.9274 2612.9274 2616.4174 2616.4174 2619.9073 - 2619.9073 2623.3973 2623.3973 2626.8872 2626.8872 2630.3772 2630.3772 2633.8671 2633.8671 2637.357 2588.6151 2592.105 2592.105 2595.595 2595.595 2599.0849 - 2601.5849 2605.0748 2605.0748 2608.5648 2608.5648 2612.0547 2612.0547 2615.5447 2615.5447 2619.0346 2619.0346 2622.5246 2626.0246 2629.5145 2629.5145 2633.0045 - 2633.0045 2636.4944 2636.4944 2639.9844 2588.6151 2592.105 2592.105 2595.595 2595.595 2599.0849 2601.5849 2605.0748 2605.0748 2608.5648 2608.5648 2612.0547 - 2612.0547 2615.5447 2615.5447 2619.0346 2619.0346 2622.5246 2626.0246 2629.5145 2629.5145 2633.0045 2633.0045 2636.4944 2636.4944 2639.9844 2586.9091 2590.399 - 2590.399 2593.889 2593.889 2597.3789 2600.7122 2604.2022 2604.2022 2607.6921 2607.6921 2611.1821 2611.1821 2614.672 2614.672 2618.162 2618.162 2621.6519 - 2628.6519 2632.1419 2632.1419 2635.6318 2635.6318 2639.1218 2639.1218 2642.6117 2586.9091 2590.399 2590.399 2593.889 2593.889 2597.3789 2600.7122 2604.2022 - 2604.2022 2607.6921 2607.6921 2611.1821 2611.1821 2614.672 2614.672 2618.162 2618.162 2621.6519 2628.6519 2632.1419 2632.1419 2635.6318 2635.6318 2639.1218 - 2639.1218 2642.6117 2585.2031 2588.693 2588.693 2592.183 2592.183 2595.6729 2599.8396 2603.3295 2603.3295 2606.8195 2606.8195 2610.3094 2610.3094 2613.7994 - 2613.7994 2617.2893 2617.2893 2620.7793 2631.2793 2634.7692 2634.7692 2638.2592 2638.2592 2641.7491 2641.7491 2645.2391 2580.2031 2583.693 2583.693 2587.183 - 2592.183 2595.6729 2599.8396 2603.3295 2603.3295 2606.8195 2606.8195 2610.3094 2610.3094 2613.7994 2613.7994 2617.2893 2617.2893 2620.7793 2631.2793 2634.7692 - 2634.7692 2638.2592 2638.2592 2641.7491 2641.7491 2645.2391 2578.4971 2581.987 2581.987 2585.477 2590.477 2593.9669 2598.9669 2602.4569 2602.4569 2605.9468 - 2605.9468 2609.4368 2609.4368 2612.9267 2612.9267 2616.4167 2616.4167 2619.9066 2633.9066 2637.3966 2637.3966 2640.8865 2640.8865 2644.3765 2644.3765 2647.8664 - 2578.4971 2581.987 2581.987 2585.477 2590.477 2593.9669 2598.9669 2602.4569 2602.4569 2605.9468 2605.9468 2609.4368 2609.4368 2612.9267 2612.9267 2616.4167 - 2616.4167 2619.9066 2633.9066 2637.3966 2637.3966 2640.8865 2640.8865 2644.3765 2644.3765 2647.8664 2576.7911 2580.2811 2580.2811 2583.771 2588.771 2592.261 - 2598.0943 2601.5842 2601.5842 2605.0742 2605.0742 2608.5641 2608.5641 2612.0541 2612.0541 2615.544 2615.544 2619.034 2636.534 2640.0239 2640.0239 2643.5139 - 2643.5139 2647.0038 2647.0038 2650.4938 2576.7911 2580.2811 2580.2811 2583.771 2588.771 2592.261 2598.0943 2601.5842 2601.5842 2605.0742 2605.0742 2608.5641 - 2608.5641 2612.0541 2612.0541 2615.544 2615.544 2619.034 2636.534 2640.0239 2640.0239 2643.5139 2643.5139 2647.0038 2647.0038 2650.4938 2575.0851 2578.5751 - 2578.5751 2582.065 2587.065 2590.555 2597.2216 2600.7116 2600.7116 2604.2015 2604.2015 2607.6915 2607.6915 2611.1814 2611.1814 2614.6714 2614.6714 2618.1613 - 2639.1613 2642.6513 2642.6513 2646.1412 2646.1412 2649.6312 2649.6312 2653.1211 2575.0851 2578.5751 2578.5751 2582.065 2587.065 2590.555 2597.2216 2600.7116 - 2600.7116 2604.2015 2604.2015 2607.6915 2607.6915 2611.1814 2611.1814 2614.6714 2614.6714 2618.1613 2639.1613 2642.6513 2642.6513 2646.1412 2646.1412 2649.6312 - 2649.6312 2653.1211 2573.3791 2576.8691 2576.8691 2580.359 2585.359 2588.849 2596.349 2599.8389 2599.8389 2603.3289 2603.3289 2606.8188 2606.8188 2610.3088 - 2610.3088 2613.7987 2613.7987 2617.2887 2641.7887 2645.2786 2645.2786 2648.7686 2648.7686 2652.2585 2652.2585 2655.7485 2573.3791 2576.8691 2576.8691 2580.359 - 2585.359 2588.849 2596.349 2599.8389 2599.8389 2603.3289 2603.3289 2606.8188 2606.8188 2610.3088 2610.3088 2613.7987 2613.7987 2617.2887 2641.7887 2645.2786 - 2645.2786 2648.7686 2648.7686 2652.2585 2652.2585 2655.7485 2571.6731 2575.1631 2575.1631 2578.653 2583.653 2587.143 2595.4763 2598.9663 2598.9663 2602.4562 - 2602.4562 2605.9462 2605.9462 2609.4361 2609.4361 2612.9261 2612.9261 2616.416 2644.416 2647.906 2647.906 2651.3959 2651.3959 2654.8859 2654.8859 2658.3758 - 2571.6731 2575.1631 2575.1631 2578.653 2583.653 2587.143 2595.4763 2598.9663 2598.9663 2602.4562 2602.4562 2605.9462 2605.9462 2609.4361 2609.4361 2612.9261 - 2612.9261 2616.416 2644.416 2647.906 2647.906 2651.3959 2651.3959 2654.8859 2654.8859 2658.3758 2569.9672 2573.4571 2573.4571 2576.9471 2581.9471 2585.437 - 2594.6037 2598.0936 2598.0936 2601.5836 2601.5836 2605.0735 2605.0735 2608.5635 2608.5635 2612.0534 2612.0534 2615.5434 2647.0434 2650.5333 2650.5333 2654.0233 - 2654.0233 2657.5132 2657.5132 2661.0032 2569.9672 2573.4571 2573.4571 2576.9471 2581.9471 2585.437 2594.6037 2598.0936 2598.0936 2601.5836 2601.5836 2605.0735 - 2605.0735 2608.5635 2608.5635 2612.0534 2612.0534 2615.5434 2647.0434 2650.5333 2650.5333 2654.0233 2654.0233 2657.5132 2657.5132 2661.0032 2568.2612 2571.7511 - 2571.7511 2575.2411 2580.2411 2583.731 2593.731 2597.221 2597.221 2600.7109 2600.7109 2604.2009 2604.2009 2607.6908 2607.6908 2611.1808 2611.1808 2614.6707 - 2649.6707 2653.1607 2653.1607 2656.6506 2656.6506 2660.1406 2660.1406 2663.6305 2609.4531 2612.943 2612.943 2616.433 2619.433 2622.9229 2622.9229 2626.4129 - 2626.4129 2629.9028 2629.9028 2633.3928 2633.3928 2636.8827 2636.8827 2640.3727 2640.3727 2643.8626 2643.8626 2647.3526 2647.3526 2650.8425 2650.8425 2654.3325 - 2654.3325 2657.8224 2608.5804 2612.0704 2612.0704 2615.5603 2618.5603 2622.0503 2622.0503 2625.5402 2625.5402 2629.0302 2629.0302 2632.5201 2632.5201 2636.0101 - 2636.0101 2639.5 2639.5 2642.99 2642.99 2646.4799 2646.4799 2649.9699 2649.9699 2653.4598 2653.4598 2656.9498 2608.5804 2612.0704 2612.0704 2615.5603 - 2618.5603 2622.0503 2622.0503 2625.5402 2625.5402 2629.0302 2629.0302 2632.5201 2632.5201 2636.0101 2636.0101 2639.5 2639.5 2642.99 2642.99 2646.4799 - 2646.4799 2649.9699 2649.9699 2653.4598 2653.4598 2656.9498 2607.7078 2611.1977 2611.1977 2614.6877 2617.6877 2621.1776 2621.1776 2624.6676 2624.6676 2628.1575 - 2628.1575 2631.6475 2631.6475 2635.1374 2635.1374 2638.6274 2638.6274 2642.1173 2642.1173 2645.6073 2645.6073 2649.0972 2649.0972 2652.5872 2652.5872 2656.0771 - 2607.7078 2611.1977 2611.1977 2614.6877 2617.6877 2621.1776 2621.1776 2624.6676 2624.6676 2628.1575 2628.1575 2631.6475 2631.6475 2635.1374 2635.1374 2638.6274 - 2638.6274 2642.1173 2642.1173 2645.6073 2645.6073 2649.0972 2649.0972 2652.5872 2652.5872 2656.0771 2606.8351 2610.3251 2610.3251 2613.815 2616.815 2620.305 - 2620.305 2623.7949 2623.7949 2627.2849 2627.2849 2630.7748 2630.7748 2634.2648 2634.2648 2637.7547 2637.7547 2641.2447 2641.2447 2644.7346 2644.7346 2648.2246 - 2648.2246 2651.7145 2651.7145 2655.2045 2606.8351 2610.3251 2610.3251 2613.815 2616.815 2620.305 2620.305 2623.7949 2623.7949 2627.2849 2627.2849 2630.7748 - 2630.7748 2634.2648 2634.2648 2637.7547 2637.7547 2641.2447 2641.2447 2644.7346 2644.7346 2648.2246 2648.2246 2651.7145 2651.7145 2655.2045 2605.9625 2609.4524 - 2609.4524 2612.9424 2615.9424 2619.4323 2619.4323 2622.9223 2622.9223 2626.4122 2626.4122 2629.9022 2629.9022 2633.3921 2633.3921 2636.8821 2636.8821 2640.372 - 2640.372 2643.862 2643.862 2647.3519 2647.3519 2650.8419 2650.8419 2654.3318 2605.9625 2609.4524 2609.4524 2612.9424 2612.9424 2616.4323 2619.4323 2622.9223 - 2622.9223 2626.4122 2626.4122 2629.9022 2629.9022 2633.3921 2633.3921 2636.8821 2636.8821 2640.372 2640.372 2643.862 2643.862 2647.3519 2647.3519 2650.8419 - 2650.8419 2654.3318 2605.0898 2608.5798 2608.5798 2612.0697 2612.0697 2615.5597 2618.5597 2622.0496 2622.0496 2625.5396 2625.5396 2629.0295 2629.0295 2632.5195 - 2632.5195 2636.0094 2636.0094 2639.4994 2639.4994 2642.9893 2642.9893 2646.4793 2646.4793 2649.9692 2649.9692 2653.4592 2605.0898 2608.5798 2608.5798 2612.0697 - 2612.0697 2615.5597 2618.5597 2622.0496 2622.0496 2625.5396 2625.5396 2629.0295 2629.0295 2632.5195 2632.5195 2636.0094 2636.0094 2639.4994 2639.4994 2642.9893 - 2642.9893 2646.4793 2646.4793 2649.9692 2649.9692 2653.4592 2604.2172 2607.7071 2607.7071 2611.1971 2611.1971 2614.687 2617.687 2621.177 2621.177 2624.6669 - 2624.6669 2628.1569 2628.1569 2631.6468 2631.6468 2635.1368 2635.1368 2638.6267 2638.6267 2642.1166 2642.1166 2645.6066 2645.6066 2649.0965 2649.0965 2652.5865 - 2604.2172 2607.7071 2607.7071 2611.1971 2611.1971 2614.687 2617.687 2621.177 2621.177 2624.6669 2624.6669 2628.1569 2628.1569 2631.6468 2631.6468 2635.1368 - 2635.1368 2638.6267 2638.6267 2642.1166 2642.1166 2645.6066 2645.6066 2649.0965 2649.0965 2652.5865 2603.3445 2606.8344 2606.8344 2610.3244 2610.3244 2613.8143 - 2616.8143 2620.3043 2620.3043 2623.7942 2623.7942 2627.2842 2627.2842 2630.7741 2630.7741 2634.2641 2634.2641 2637.754 2637.754 2641.244 2641.244 2644.7339 - 2644.7339 2648.2239 2648.2239 2651.7138 2603.3445 2606.8344 2606.8344 2610.3244 2610.3244 2613.8143 2616.8143 2620.3043 2620.3043 2623.7942 2623.7942 2627.2842 - 2627.2842 2630.7741 2630.7741 2634.2641 2634.2641 2637.754 2637.754 2641.244 2641.244 2644.7339 2644.7339 2648.2239 2648.2239 2651.7138 2602.4718 2605.9618 - 2605.9618 2609.4517 2609.4517 2612.9417 2615.9417 2619.4316 2619.4316 2622.9216 2622.9216 2626.4115 2626.4115 2629.9015 2629.9015 2633.3914 2633.3914 2636.8814 - 2636.8814 2640.3713 2640.3713 2643.8613 2643.8613 2647.3512 2647.3512 2650.8412 2605.4718 2608.9618 2608.9618 2612.4517 2612.4517 2615.9417 2615.9417 2619.4316 - 2619.4316 2622.9216 2622.9216 2626.4115 2626.4115 2629.9015 2629.9015 2633.3914 2633.3914 2636.8814 2636.8814 2640.3713 2640.3713 2643.8613 2643.8613 2647.3512 - 2647.3512 2650.8412 2604.5992 2608.0891 2608.0891 2611.5791 2611.5791 2615.069 2615.069 2618.559 2618.559 2622.0489 2622.0489 2625.5389 2625.5389 2629.0288 - 2629.0288 2632.5188 2632.5188 2636.0087 2636.0087 2639.4987 2639.4987 2642.9886 2642.9886 2646.4786 2646.4786 2649.9685 2604.5992 2608.0891 2608.0891 2611.5791 - 2611.5791 2615.069 2615.069 2618.559 2618.559 2622.0489 2622.0489 2625.5389 2625.5389 2629.0288 2629.0288 2632.5188 2632.5188 2636.0087 2636.0087 2639.4987 - 2639.4987 2642.9886 2642.9886 2646.4786 2646.4786 2649.9685 2603.7265 2607.2165 2607.2165 2610.7064 2610.7064 2614.1964 2614.1964 2617.6863 2617.6863 2621.1763 - 2621.1763 2624.6662 2624.6662 2628.1562 2628.1562 2631.6461 2631.6461 2635.1361 2635.1361 2638.626 2638.626 2642.116 2642.116 2645.6059 2645.6059 2649.0959 - 2603.7265 2607.2165 2607.2165 2610.7064 2610.7064 2614.1964 2614.1964 2617.6863 2617.6863 2621.1763 2621.1763 2624.6662 2624.6662 2628.1562 2628.1562 2631.6461 - 2631.6461 2635.1361 2635.1361 2638.626 2638.626 2642.116 2642.116 2645.6059 2645.6059 2649.0959 2602.0206 2605.5105 2605.5105 2609.0005 2609.0005 2612.4904 - 2613.3237 2616.8137 2616.8137 2620.3036 2620.3036 2623.7936 2623.7936 2627.2835 2627.2835 2630.7735 2630.7735 2634.2634 2634.2634 2637.7534 2637.7534 2641.2433 - 2641.2433 2644.7333 2644.7333 2648.2232 2602.0206 2605.5105 2605.5105 2609.0005 2609.0005 2612.4904 2613.3237 2616.8137 2616.8137 2620.3036 2620.3036 2623.7936 - 2623.7936 2627.2835 2627.2835 2630.7735 2630.7735 2634.2634 2634.2634 2637.7534 2637.7534 2641.2433 2641.2433 2644.7333 2644.7333 2648.2232 2600.3146 2603.8045 - 2603.8045 2607.2945 2607.2945 2610.7844 2612.4511 2615.941 2615.941 2619.431 2619.431 2622.9209 2622.9209 2626.4109 2626.4109 2629.9008 2629.9008 2633.3908 - 2633.3908 2636.8807 2636.8807 2640.3707 2640.3707 2643.8606 2643.8606 2647.3506 2600.3146 2603.8045 2603.8045 2607.2945 2607.2945 2610.7844 2612.4511 2615.941 - 2615.941 2619.431 2619.431 2622.9209 2622.9209 2626.4109 2626.4109 2629.9008 2629.9008 2633.3908 2633.3908 2636.8807 2636.8807 2640.3707 2640.3707 2643.8606 - 2643.8606 2647.3506 2598.6086 2602.0985 2602.0985 2605.5885 2605.5885 2609.0784 2611.5784 2615.0684 2615.0684 2618.5583 2618.5583 2622.0483 2622.0483 2625.5382 - 2625.5382 2629.0282 2629.0282 2632.5181 2636.0181 2639.5081 2639.5081 2642.998 2642.998 2646.488 2646.488 2649.9779 2598.6086 2602.0985 2602.0985 2605.5885 - 2605.5885 2609.0784 2611.5784 2615.0684 2615.0684 2618.5583 2618.5583 2622.0483 2622.0483 2625.5382 2625.5382 2629.0282 2629.0282 2632.5181 2636.0181 2639.5081 - 2639.5081 2642.998 2642.998 2646.488 2646.488 2649.9779 2596.9026 2600.3925 2600.3925 2603.8825 2603.8825 2607.3724 2610.7058 2614.1957 2614.1957 2617.6857 - 2617.6857 2621.1756 2621.1756 2624.6656 2624.6656 2628.1555 2628.1555 2631.6455 2638.6455 2642.1354 2642.1354 2645.6254 2645.6254 2649.1153 2649.1153 2652.6053 - 2596.9026 2600.3925 2600.3925 2603.8825 2603.8825 2607.3724 2610.7058 2614.1957 2614.1957 2617.6857 2617.6857 2621.1756 2621.1756 2624.6656 2624.6656 2628.1555 - 2628.1555 2631.6455 2638.6455 2642.1354 2642.1354 2645.6254 2645.6254 2649.1153 2649.1153 2652.6053 2595.1966 2598.6866 2598.6866 2602.1765 2602.1765 2605.6665 - 2609.8331 2613.3231 2613.3231 2616.813 2616.813 2620.303 2620.303 2623.7929 2623.7929 2627.2829 2627.2829 2630.7728 2641.2728 2644.7628 2644.7628 2648.2527 - 2648.2527 2651.7427 2651.7427 2655.2326 2590.1966 2593.6866 2593.6866 2597.1765 2602.1765 2605.6665 2609.8331 2613.3231 2613.3231 2616.813 2616.813 2620.303 - 2620.303 2623.7929 2623.7929 2627.2829 2627.2829 2630.7728 2641.2728 2644.7628 2644.7628 2648.2527 2648.2527 2651.7427 2651.7427 2655.2326 2588.4906 2591.9806 - 2591.9806 2595.4705 2600.4705 2603.9605 2608.9605 2612.4504 2612.4504 2615.9404 2615.9404 2619.4303 2619.4303 2622.9203 2622.9203 2626.4102 2626.4102 2629.9002 - 2643.9002 2647.3901 2647.3901 2650.8801 2650.8801 2654.37 2654.37 2657.86 2588.4906 2591.9806 2591.9806 2595.4705 2600.4705 2603.9605 2608.9605 2612.4504 - 2612.4504 2615.9404 2615.9404 2619.4303 2619.4303 2622.9203 2622.9203 2626.4102 2626.4102 2629.9002 2643.9002 2647.3901 2647.3901 2650.8801 2650.8801 2654.37 - 2654.37 2657.86 2586.7846 2590.2746 2590.2746 2593.7645 2598.7645 2602.2545 2608.0878 2611.5778 2611.5778 2615.0677 2615.0677 2618.5577 2618.5577 2622.0476 - 2622.0476 2625.5376 2625.5376 2629.0275 2646.5275 2650.0175 2650.0175 2653.5074 2653.5074 2656.9974 2656.9974 2660.4873 2586.7846 2590.2746 2590.2746 2593.7645 - 2598.7645 2602.2545 2608.0878 2611.5778 2611.5778 2615.0677 2615.0677 2618.5577 2618.5577 2622.0476 2622.0476 2625.5376 2625.5376 2629.0275 2646.5275 2650.0175 - 2650.0175 2653.5074 2653.5074 2656.9974 2656.9974 2660.4873 2585.0786 2588.5686 2588.5686 2592.0585 2597.0585 2600.5485 2607.2152 2610.7051 2610.7051 2614.1951 - 2614.1951 2617.685 2617.685 2621.175 2621.175 2624.6649 2624.6649 2628.1549 2649.1549 2652.6448 2652.6448 2656.1348 2656.1348 2659.6247 2659.6247 2663.1147 - 2585.0786 2588.5686 2588.5686 2592.0585 2597.0585 2600.5485 2607.2152 2610.7051 2610.7051 2614.1951 2614.1951 2617.685 2617.685 2621.175 2621.175 2624.6649 - 2624.6649 2628.1549 2649.1549 2652.6448 2652.6448 2656.1348 2656.1348 2659.6247 2659.6247 2663.1147 2583.3727 2586.8626 2586.8626 2590.3526 2595.3526 2598.8425 - 2606.3425 2609.8325 2609.8325 2613.3224 2613.3224 2616.8124 2616.8124 2620.3023 2620.3023 2623.7923 2623.7923 2627.2822 2651.7822 2655.2722 2655.2722 2658.7621 - 2658.7621 2662.2521 2662.2521 2665.742 2583.3727 2586.8626 2586.8626 2590.3526 2595.3526 2598.8425 2606.3425 2609.8325 2609.8325 2613.3224 2613.3224 2616.8124 - 2616.8124 2620.3023 2620.3023 2623.7923 2623.7923 2627.2822 2651.7822 2655.2722 2655.2722 2658.7621 2658.7621 2662.2521 2662.2521 2665.742 2581.6667 2585.1566 - 2585.1566 2588.6466 2593.6466 2597.1365 2605.4699 2608.9598 2608.9598 2612.4498 2612.4498 2615.9397 2615.9397 2619.4297 2619.4297 2622.9196 2622.9196 2626.4096 - 2654.4096 2657.8995 2657.8995 2661.3894 2661.3894 2664.8794 2664.8794 2668.3693 2581.6667 2585.1566 2585.1566 2588.6466 2593.6466 2597.1365 2605.4699 2608.9598 - 2608.9598 2612.4498 2612.4498 2615.9397 2615.9397 2619.4297 2619.4297 2622.9196 2622.9196 2626.4096 2654.4096 2657.8995 2657.8995 2661.3894 2661.3894 2664.8794 - 2664.8794 2668.3693 2579.9607 2583.4506 2583.4506 2586.9406 2591.9406 2595.4305 2604.5972 2608.0871 2608.0871 2611.5771 2611.5771 2615.067 2615.067 2618.557 - 2618.557 2622.0469 2622.0469 2625.5369 2657.0369 2660.5268 2660.5268 2664.0168 2664.0168 2667.5067 2667.5067 2670.9967 2579.9607 2583.4506 2583.4506 2586.9406 - 2591.9406 2595.4305 2604.5972 2608.0871 2608.0871 2611.5771 2611.5771 2615.067 2615.067 2618.557 2618.557 2622.0469 2622.0469 2625.5369 2657.0369 2660.5268 - 2660.5268 2664.0168 2664.0168 2667.5067 2667.5067 2670.9967 2578.2547 2581.7446 2581.7446 2585.2346 2590.2346 2593.7245 2603.7245 2607.2145 2607.2145 2610.7044 - 2610.7044 2614.1944 2614.1944 2617.6843 2617.6843 2621.1743 2621.1743 2624.6642 2659.6642 2663.1542 2663.1542 2666.6441 2666.6441 2670.1341 2670.1341 2673.624 - 2609.4531 2612.943 2612.943 2616.433 2619.433 2622.9229 2622.9229 2626.4129 2626.4129 2629.9028 2629.9028 2633.3928 2633.3928 2636.8827 2636.8827 2640.3727 - 2640.3727 2643.8626 2643.8626 2647.3526 2647.3526 2650.8425 2650.8425 2654.3325 2654.3325 2657.8224 2608.5804 2612.0704 2612.0704 2615.5603 2618.5603 2622.0503 - 2622.0503 2625.5402 2625.5402 2629.0302 2629.0302 2632.5201 2632.5201 2636.0101 2636.0101 2639.5 2639.5 2642.99 2642.99 2646.4799 2646.4799 2649.9699 - 2649.9699 2653.4598 2653.4598 2656.9498 2608.5804 2612.0704 2612.0704 2615.5603 2618.5603 2622.0503 2622.0503 2625.5402 2625.5402 2629.0302 2629.0302 2632.5201 - 2632.5201 2636.0101 2636.0101 2639.5 2639.5 2642.99 2642.99 2646.4799 2646.4799 2649.9699 2649.9699 2653.4598 2653.4598 2656.9498 2607.7078 2611.1977 - 2611.1977 2614.6877 2617.6877 2621.1776 2621.1776 2624.6676 2624.6676 2628.1575 2628.1575 2631.6475 2631.6475 2635.1374 2635.1374 2638.6274 2638.6274 2642.1173 - 2642.1173 2645.6073 2645.6073 2649.0972 2649.0972 2652.5872 2652.5872 2656.0771 2607.7078 2611.1977 2611.1977 2614.6877 2617.6877 2621.1776 2621.1776 2624.6676 - 2624.6676 2628.1575 2628.1575 2631.6475 2631.6475 2635.1374 2635.1374 2638.6274 2638.6274 2642.1173 2642.1173 2645.6073 2645.6073 2649.0972 2649.0972 2652.5872 - 2652.5872 2656.0771 2606.8351 2610.3251 2610.3251 2613.815 2616.815 2620.305 2620.305 2623.7949 2623.7949 2627.2849 2627.2849 2630.7748 2630.7748 2634.2648 - 2634.2648 2637.7547 2637.7547 2641.2447 2641.2447 2644.7346 2644.7346 2648.2246 2648.2246 2651.7145 2651.7145 2655.2045 2606.8351 2610.3251 2610.3251 2613.815 - 2616.815 2620.305 2620.305 2623.7949 2623.7949 2627.2849 2627.2849 2630.7748 2630.7748 2634.2648 2634.2648 2637.7547 2637.7547 2641.2447 2641.2447 2644.7346 - 2644.7346 2648.2246 2648.2246 2651.7145 2651.7145 2655.2045 2605.9625 2609.4524 2609.4524 2612.9424 2615.9424 2619.4323 2619.4323 2622.9223 2622.9223 2626.4122 - 2626.4122 2629.9022 2629.9022 2633.3921 2633.3921 2636.8821 2636.8821 2640.372 2640.372 2643.862 2643.862 2647.3519 2647.3519 2650.8419 2650.8419 2654.3318 - 2605.9625 2609.4524 2609.4524 2612.9424 2612.9424 2616.4323 2619.4323 2622.9223 2622.9223 2626.4122 2626.4122 2629.9022 2629.9022 2633.3921 2633.3921 2636.8821 - 2636.8821 2640.372 2640.372 2643.862 2643.862 2647.3519 2647.3519 2650.8419 2650.8419 2654.3318 2605.0898 2608.5798 2608.5798 2612.0697 2612.0697 2615.5597 - 2618.5597 2622.0496 2622.0496 2625.5396 2625.5396 2629.0295 2629.0295 2632.5195 2632.5195 2636.0094 2636.0094 2639.4994 2639.4994 2642.9893 2642.9893 2646.4793 - 2646.4793 2649.9692 2649.9692 2653.4592 2605.0898 2608.5798 2608.5798 2612.0697 2612.0697 2615.5597 2618.5597 2622.0496 2622.0496 2625.5396 2625.5396 2629.0295 - 2629.0295 2632.5195 2632.5195 2636.0094 2636.0094 2639.4994 2639.4994 2642.9893 2642.9893 2646.4793 2646.4793 2649.9692 2649.9692 2653.4592 2604.2172 2607.7071 - 2607.7071 2611.1971 2611.1971 2614.687 2617.687 2621.177 2621.177 2624.6669 2624.6669 2628.1569 2628.1569 2631.6468 2631.6468 2635.1368 2635.1368 2638.6267 - 2638.6267 2642.1166 2642.1166 2645.6066 2645.6066 2649.0965 2649.0965 2652.5865 2604.2172 2607.7071 2607.7071 2611.1971 2611.1971 2614.687 2617.687 2621.177 - 2621.177 2624.6669 2624.6669 2628.1569 2628.1569 2631.6468 2631.6468 2635.1368 2635.1368 2638.6267 2638.6267 2642.1166 2642.1166 2645.6066 2645.6066 2649.0965 - 2649.0965 2652.5865 2603.3445 2606.8344 2606.8344 2610.3244 2610.3244 2613.8143 2616.8143 2620.3043 2620.3043 2623.7942 2623.7942 2627.2842 2627.2842 2630.7741 - 2630.7741 2634.2641 2634.2641 2637.754 2637.754 2641.244 2641.244 2644.7339 2644.7339 2648.2239 2648.2239 2651.7138 2603.3445 2606.8344 2606.8344 2610.3244 - 2610.3244 2613.8143 2616.8143 2620.3043 2620.3043 2623.7942 2623.7942 2627.2842 2627.2842 2630.7741 2630.7741 2634.2641 2634.2641 2637.754 2637.754 2641.244 - 2641.244 2644.7339 2644.7339 2648.2239 2648.2239 2651.7138 2602.4718 2605.9618 2605.9618 2609.4517 2609.4517 2612.9417 2615.9417 2619.4316 2619.4316 2622.9216 - 2622.9216 2626.4115 2626.4115 2629.9015 2629.9015 2633.3914 2633.3914 2636.8814 2636.8814 2640.3713 2640.3713 2643.8613 2643.8613 2647.3512 2647.3512 2650.8412 - 2605.4718 2608.9618 2608.9618 2612.4517 2612.4517 2615.9417 2615.9417 2619.4316 2619.4316 2622.9216 2622.9216 2626.4115 2626.4115 2629.9015 2629.9015 2633.3914 - 2633.3914 2636.8814 2636.8814 2640.3713 2640.3713 2643.8613 2643.8613 2647.3512 2647.3512 2650.8412 2604.5992 2608.0891 2608.0891 2611.5791 2611.5791 2615.069 - 2615.069 2618.559 2618.559 2622.0489 2622.0489 2625.5389 2625.5389 2629.0288 2629.0288 2632.5188 2632.5188 2636.0087 2636.0087 2639.4987 2639.4987 2642.9886 - 2642.9886 2646.4786 2646.4786 2649.9685 2604.5992 2608.0891 2608.0891 2611.5791 2611.5791 2615.069 2615.069 2618.559 2618.559 2622.0489 2622.0489 2625.5389 - 2625.5389 2629.0288 2629.0288 2632.5188 2632.5188 2636.0087 2636.0087 2639.4987 2639.4987 2642.9886 2642.9886 2646.4786 2646.4786 2649.9685 2603.7265 2607.2165 - 2607.2165 2610.7064 2610.7064 2614.1964 2614.1964 2617.6863 2617.6863 2621.1763 2621.1763 2624.6662 2624.6662 2628.1562 2628.1562 2631.6461 2631.6461 2635.1361 - 2635.1361 2638.626 2638.626 2642.116 2642.116 2645.6059 2645.6059 2649.0959 2603.7265 2607.2165 2607.2165 2610.7064 2610.7064 2614.1964 2614.1964 2617.6863 - 2617.6863 2621.1763 2621.1763 2624.6662 2624.6662 2628.1562 2628.1562 2631.6461 2631.6461 2635.1361 2635.1361 2638.626 2638.626 2642.116 2642.116 2645.6059 - 2645.6059 2649.0959 2602.0206 2605.5105 2605.5105 2609.0005 2609.0005 2612.4904 2613.3237 2616.8137 2616.8137 2620.3036 2620.3036 2623.7936 2623.7936 2627.2835 - 2627.2835 2630.7735 2630.7735 2634.2634 2634.2634 2637.7534 2637.7534 2641.2433 2641.2433 2644.7333 2644.7333 2648.2232 2602.0206 2605.5105 2605.5105 2609.0005 - 2609.0005 2612.4904 2613.3237 2616.8137 2616.8137 2620.3036 2620.3036 2623.7936 2623.7936 2627.2835 2627.2835 2630.7735 2630.7735 2634.2634 2634.2634 2637.7534 - 2637.7534 2641.2433 2641.2433 2644.7333 2644.7333 2648.2232 2600.3146 2603.8045 2603.8045 2607.2945 2607.2945 2610.7844 2612.4511 2615.941 2615.941 2619.431 - 2619.431 2622.9209 2622.9209 2626.4109 2626.4109 2629.9008 2629.9008 2633.3908 2633.3908 2636.8807 2636.8807 2640.3707 2640.3707 2643.8606 2643.8606 2647.3506 - 2600.3146 2603.8045 2603.8045 2607.2945 2607.2945 2610.7844 2612.4511 2615.941 2615.941 2619.431 2619.431 2622.9209 2622.9209 2626.4109 2626.4109 2629.9008 - 2629.9008 2633.3908 2633.3908 2636.8807 2636.8807 2640.3707 2640.3707 2643.8606 2643.8606 2647.3506 2598.6086 2602.0985 2602.0985 2605.5885 2605.5885 2609.0784 - 2611.5784 2615.0684 2615.0684 2618.5583 2618.5583 2622.0483 2622.0483 2625.5382 2625.5382 2629.0282 2629.0282 2632.5181 2636.0181 2639.5081 2639.5081 2642.998 - 2642.998 2646.488 2646.488 2649.9779 2598.6086 2602.0985 2602.0985 2605.5885 2605.5885 2609.0784 2611.5784 2615.0684 2615.0684 2618.5583 2618.5583 2622.0483 - 2622.0483 2625.5382 2625.5382 2629.0282 2629.0282 2632.5181 2636.0181 2639.5081 2639.5081 2642.998 2642.998 2646.488 2646.488 2649.9779 2596.9026 2600.3925 - 2600.3925 2603.8825 2603.8825 2607.3724 2610.7058 2614.1957 2614.1957 2617.6857 2617.6857 2621.1756 2621.1756 2624.6656 2624.6656 2628.1555 2628.1555 2631.6455 - 2638.6455 2642.1354 2642.1354 2645.6254 2645.6254 2649.1153 2649.1153 2652.6053 2596.9026 2600.3925 2600.3925 2603.8825 2603.8825 2607.3724 2610.7058 2614.1957 - 2614.1957 2617.6857 2617.6857 2621.1756 2621.1756 2624.6656 2624.6656 2628.1555 2628.1555 2631.6455 2638.6455 2642.1354 2642.1354 2645.6254 2645.6254 2649.1153 - 2649.1153 2652.6053 2595.1966 2598.6866 2598.6866 2602.1765 2602.1765 2605.6665 2609.8331 2613.3231 2613.3231 2616.813 2616.813 2620.303 2620.303 2623.7929 - 2623.7929 2627.2829 2627.2829 2630.7728 2641.2728 2644.7628 2644.7628 2648.2527 2648.2527 2651.7427 2651.7427 2655.2326 2590.1966 2593.6866 2593.6866 2597.1765 - 2602.1765 2605.6665 2609.8331 2613.3231 2613.3231 2616.813 2616.813 2620.303 2620.303 2623.7929 2623.7929 2627.2829 2627.2829 2630.7728 2641.2728 2644.7628 - 2644.7628 2648.2527 2648.2527 2651.7427 2651.7427 2655.2326 2588.4906 2591.9806 2591.9806 2595.4705 2600.4705 2603.9605 2608.9605 2612.4504 2612.4504 2615.9404 - 2615.9404 2619.4303 2619.4303 2622.9203 2622.9203 2626.4102 2626.4102 2629.9002 2643.9002 2647.3901 2647.3901 2650.8801 2650.8801 2654.37 2654.37 2657.86 - 2588.4906 2591.9806 2591.9806 2595.4705 2600.4705 2603.9605 2608.9605 2612.4504 2612.4504 2615.9404 2615.9404 2619.4303 2619.4303 2622.9203 2622.9203 2626.4102 - 2626.4102 2629.9002 2643.9002 2647.3901 2647.3901 2650.8801 2650.8801 2654.37 2654.37 2657.86 2586.7846 2590.2746 2590.2746 2593.7645 2598.7645 2602.2545 - 2608.0878 2611.5778 2611.5778 2615.0677 2615.0677 2618.5577 2618.5577 2622.0476 2622.0476 2625.5376 2625.5376 2629.0275 2646.5275 2650.0175 2650.0175 2653.5074 - 2653.5074 2656.9974 2656.9974 2660.4873 2586.7846 2590.2746 2590.2746 2593.7645 2598.7645 2602.2545 2608.0878 2611.5778 2611.5778 2615.0677 2615.0677 2618.5577 - 2618.5577 2622.0476 2622.0476 2625.5376 2625.5376 2629.0275 2646.5275 2650.0175 2650.0175 2653.5074 2653.5074 2656.9974 2656.9974 2660.4873 2585.0786 2588.5686 - 2588.5686 2592.0585 2597.0585 2600.5485 2607.2152 2610.7051 2610.7051 2614.1951 2614.1951 2617.685 2617.685 2621.175 2621.175 2624.6649 2624.6649 2628.1549 - 2649.1549 2652.6448 2652.6448 2656.1348 2656.1348 2659.6247 2659.6247 2663.1147 2585.0786 2588.5686 2588.5686 2592.0585 2597.0585 2600.5485 2607.2152 2610.7051 - 2610.7051 2614.1951 2614.1951 2617.685 2617.685 2621.175 2621.175 2624.6649 2624.6649 2628.1549 2649.1549 2652.6448 2652.6448 2656.1348 2656.1348 2659.6247 - 2659.6247 2663.1147 2583.3727 2586.8626 2586.8626 2590.3526 2595.3526 2598.8425 2606.3425 2609.8325 2609.8325 2613.3224 2613.3224 2616.8124 2616.8124 2620.3023 - 2620.3023 2623.7923 2623.7923 2627.2822 2651.7822 2655.2722 2655.2722 2658.7621 2658.7621 2662.2521 2662.2521 2665.742 2583.3727 2586.8626 2586.8626 2590.3526 - 2595.3526 2598.8425 2606.3425 2609.8325 2609.8325 2613.3224 2613.3224 2616.8124 2616.8124 2620.3023 2620.3023 2623.7923 2623.7923 2627.2822 2651.7822 2655.2722 - 2655.2722 2658.7621 2658.7621 2662.2521 2662.2521 2665.742 2581.6667 2585.1566 2585.1566 2588.6466 2593.6466 2597.1365 2605.4699 2608.9598 2608.9598 2612.4498 - 2612.4498 2615.9397 2615.9397 2619.4297 2619.4297 2622.9196 2622.9196 2626.4096 2654.4096 2657.8995 2657.8995 2661.3894 2661.3894 2664.8794 2664.8794 2668.3693 - 2581.6667 2585.1566 2585.1566 2588.6466 2593.6466 2597.1365 2605.4699 2608.9598 2608.9598 2612.4498 2612.4498 2615.9397 2615.9397 2619.4297 2619.4297 2622.9196 - 2622.9196 2626.4096 2654.4096 2657.8995 2657.8995 2661.3894 2661.3894 2664.8794 2664.8794 2668.3693 2579.9607 2583.4506 2583.4506 2586.9406 2591.9406 2595.4305 - 2604.5972 2608.0871 2608.0871 2611.5771 2611.5771 2615.067 2615.067 2618.557 2618.557 2622.0469 2622.0469 2625.5369 2657.0369 2660.5268 2660.5268 2664.0168 - 2664.0168 2667.5067 2667.5067 2670.9967 2579.9607 2583.4506 2583.4506 2586.9406 2591.9406 2595.4305 2604.5972 2608.0871 2608.0871 2611.5771 2611.5771 2615.067 - 2615.067 2618.557 2618.557 2622.0469 2622.0469 2625.5369 2657.0369 2660.5268 2660.5268 2664.0168 2664.0168 2667.5067 2667.5067 2670.9967 2578.2547 2581.7446 - 2581.7446 2585.2346 2590.2346 2593.7245 2603.7245 2607.2145 2607.2145 2610.7044 2610.7044 2614.1944 2614.1944 2617.6843 2617.6843 2621.1743 2621.1743 2624.6642 - 2659.6642 2663.1542 2663.1542 2666.6441 2666.6441 2670.1341 2670.1341 2673.624 2619.4466 2622.9366 2622.9366 2626.4265 2629.4265 2632.9165 2632.9165 2636.4064 - 2636.4064 2639.8964 2639.8964 2643.3863 2643.3863 2646.8762 2646.8762 2650.3662 2650.3662 2653.8561 2653.8561 2657.3461 2657.3461 2660.836 2660.836 2664.326 - 2664.326 2667.8159 2618.5739 2622.0639 2622.0639 2625.5538 2628.5538 2632.0438 2632.0438 2635.5337 2635.5337 2639.0237 2639.0237 2642.5136 2642.5136 2646.0036 - 2646.0036 2649.4935 2649.4935 2652.9835 2652.9835 2656.4734 2656.4734 2659.9634 2659.9634 2663.4533 2663.4533 2666.9433 2618.5739 2622.0639 2622.0639 2625.5538 - 2628.5538 2632.0438 2632.0438 2635.5337 2635.5337 2639.0237 2639.0237 2642.5136 2642.5136 2646.0036 2646.0036 2649.4935 2649.4935 2652.9835 2652.9835 2656.4734 - 2656.4734 2659.9634 2659.9634 2663.4533 2663.4533 2666.9433 2617.7013 2621.1912 2621.1912 2624.6812 2627.6812 2631.1711 2631.1711 2634.6611 2634.6611 2638.151 - 2638.151 2641.641 2641.641 2645.1309 2645.1309 2648.6209 2648.6209 2652.1108 2652.1108 2655.6008 2655.6008 2659.0907 2659.0907 2662.5807 2662.5807 2666.0706 - 2617.7013 2621.1912 2621.1912 2624.6812 2627.6812 2631.1711 2631.1711 2634.6611 2634.6611 2638.151 2638.151 2641.641 2641.641 2645.1309 2645.1309 2648.6209 - 2648.6209 2652.1108 2652.1108 2655.6008 2655.6008 2659.0907 2659.0907 2662.5807 2662.5807 2666.0706 2616.8286 2620.3186 2620.3186 2623.8085 2626.8085 2630.2985 - 2630.2985 2633.7884 2633.7884 2637.2784 2637.2784 2640.7683 2640.7683 2644.2583 2644.2583 2647.7482 2647.7482 2651.2382 2651.2382 2654.7281 2654.7281 2658.2181 - 2658.2181 2661.708 2661.708 2665.198 2616.8286 2620.3186 2620.3186 2623.8085 2626.8085 2630.2985 2630.2985 2633.7884 2633.7884 2637.2784 2637.2784 2640.7683 - 2640.7683 2644.2583 2644.2583 2647.7482 2647.7482 2651.2382 2651.2382 2654.7281 2654.7281 2658.2181 2658.2181 2661.708 2661.708 2665.198 2615.956 2619.4459 - 2619.4459 2622.9359 2625.9359 2629.4258 2629.4258 2632.9158 2632.9158 2636.4057 2636.4057 2639.8957 2639.8957 2643.3856 2643.3856 2646.8756 2646.8756 2650.3655 - 2650.3655 2653.8555 2653.8555 2657.3454 2657.3454 2660.8354 2660.8354 2664.3253 2615.956 2619.4459 2619.4459 2622.9359 2622.9359 2626.4258 2629.4258 2632.9158 - 2632.9158 2636.4057 2636.4057 2639.8957 2639.8957 2643.3856 2643.3856 2646.8756 2646.8756 2650.3655 2650.3655 2653.8555 2653.8555 2657.3454 2657.3454 2660.8354 - 2660.8354 2664.3253 2615.0833 2618.5733 2618.5733 2622.0632 2622.0632 2625.5532 2628.5532 2632.0431 2632.0431 2635.5331 2635.5331 2639.023 2639.023 2642.513 - 2642.513 2646.0029 2646.0029 2649.4929 2649.4929 2652.9828 2652.9828 2656.4728 2656.4728 2659.9627 2659.9627 2663.4527 2615.0833 2618.5733 2618.5733 2622.0632 - 2622.0632 2625.5532 2628.5532 2632.0431 2632.0431 2635.5331 2635.5331 2639.023 2639.023 2642.513 2642.513 2646.0029 2646.0029 2649.4929 2649.4929 2652.9828 - 2652.9828 2656.4728 2656.4728 2659.9627 2659.9627 2663.4527 2614.2107 2617.7006 2617.7006 2621.1906 2621.1906 2624.6805 2627.6805 2631.1705 2631.1705 2634.6604 - 2634.6604 2638.1504 2638.1504 2641.6403 2641.6403 2645.1303 2645.1303 2648.6202 2648.6202 2652.1102 2652.1102 2655.6001 2655.6001 2659.0901 2659.0901 2662.58 - 2614.2107 2617.7006 2617.7006 2621.1906 2621.1906 2624.6805 2627.6805 2631.1705 2631.1705 2634.6604 2634.6604 2638.1504 2638.1504 2641.6403 2641.6403 2645.1303 - 2645.1303 2648.6202 2648.6202 2652.1102 2652.1102 2655.6001 2655.6001 2659.0901 2659.0901 2662.58 2613.338 2616.828 2616.828 2620.3179 2620.3179 2623.8079 - 2626.8079 2630.2978 2630.2978 2633.7878 2633.7878 2637.2777 2637.2777 2640.7677 2640.7677 2644.2576 2644.2576 2647.7476 2647.7476 2651.2375 2651.2375 2654.7275 - 2654.7275 2658.2174 2658.2174 2661.7074 2613.338 2616.828 2616.828 2620.3179 2620.3179 2623.8079 2626.8079 2630.2978 2630.2978 2633.7878 2633.7878 2637.2777 - 2637.2777 2640.7677 2640.7677 2644.2576 2644.2576 2647.7476 2647.7476 2651.2375 2651.2375 2654.7275 2654.7275 2658.2174 2658.2174 2661.7074 2612.4654 2615.9553 - 2615.9553 2619.4453 2619.4453 2622.9352 2625.9352 2629.4252 2629.4252 2632.9151 2632.9151 2636.4051 2636.4051 2639.895 2639.895 2643.385 2643.385 2646.8749 - 2646.8749 2650.3649 2650.3649 2653.8548 2653.8548 2657.3448 2657.3448 2660.8347 2615.4654 2618.9553 2618.9553 2622.4453 2622.4453 2625.9352 2625.9352 2629.4252 - 2629.4252 2632.9151 2632.9151 2636.4051 2636.4051 2639.895 2639.895 2643.385 2643.385 2646.8749 2646.8749 2650.3649 2650.3649 2653.8548 2653.8548 2657.3448 - 2657.3448 2660.8347 2614.5927 2618.0827 2618.0827 2621.5726 2621.5726 2625.0626 2625.0626 2628.5525 2628.5525 2632.0425 2632.0425 2635.5324 2635.5324 2639.0224 - 2639.0224 2642.5123 2642.5123 2646.0023 2646.0023 2649.4922 2649.4922 2652.9822 2652.9822 2656.4721 2656.4721 2659.9621 2614.5927 2618.0827 2618.0827 2621.5726 - 2621.5726 2625.0626 2625.0626 2628.5525 2628.5525 2632.0425 2632.0425 2635.5324 2635.5324 2639.0224 2639.0224 2642.5123 2642.5123 2646.0023 2646.0023 2649.4922 - 2649.4922 2652.9822 2652.9822 2656.4721 2656.4721 2659.9621 2613.7201 2617.21 2617.21 2620.7 2620.7 2624.1899 2624.1899 2627.6799 2627.6799 2631.1698 - 2631.1698 2634.6598 2634.6598 2638.1497 2638.1497 2641.6397 2641.6397 2645.1296 2645.1296 2648.6196 2648.6196 2652.1095 2652.1095 2655.5995 2655.5995 2659.0894 - 2613.7201 2617.21 2617.21 2620.7 2620.7 2624.1899 2624.1899 2627.6799 2627.6799 2631.1698 2631.1698 2634.6598 2634.6598 2638.1497 2638.1497 2641.6397 - 2641.6397 2645.1296 2645.1296 2648.6196 2648.6196 2652.1095 2652.1095 2655.5995 2655.5995 2659.0894 2612.0141 2615.504 2615.504 2618.994 2618.994 2622.4839 - 2623.3173 2626.8072 2626.8072 2630.2972 2630.2972 2633.7871 2633.7871 2637.2771 2637.2771 2640.767 2640.767 2644.257 2644.257 2647.7469 2647.7469 2651.2369 - 2651.2369 2654.7268 2654.7268 2658.2168 2612.0141 2615.504 2615.504 2618.994 2618.994 2622.4839 2623.3173 2626.8072 2626.8072 2630.2972 2630.2972 2633.7871 - 2633.7871 2637.2771 2637.2771 2640.767 2640.767 2644.257 2644.257 2647.7469 2647.7469 2651.2369 2651.2369 2654.7268 2654.7268 2658.2168 2610.3081 2613.798 - 2613.798 2617.288 2617.288 2620.7779 2622.4446 2625.9346 2625.9346 2629.4245 2629.4245 2632.9145 2632.9145 2636.4044 2636.4044 2639.8944 2639.8944 2643.3843 - 2643.3843 2646.8743 2646.8743 2650.3642 2650.3642 2653.8542 2653.8542 2657.3441 2610.3081 2613.798 2613.798 2617.288 2617.288 2620.7779 2622.4446 2625.9346 - 2625.9346 2629.4245 2629.4245 2632.9145 2632.9145 2636.4044 2636.4044 2639.8944 2639.8944 2643.3843 2643.3843 2646.8743 2646.8743 2650.3642 2650.3642 2653.8542 - 2653.8542 2657.3441 2608.6021 2612.0921 2612.0921 2615.582 2615.582 2619.072 2621.572 2625.0619 2625.0619 2628.5519 2628.5519 2632.0418 2632.0418 2635.5318 - 2635.5318 2639.0217 2639.0217 2642.5117 2646.0117 2649.5016 2649.5016 2652.9916 2652.9916 2656.4815 2656.4815 2659.9715 2608.6021 2612.0921 2612.0921 2615.582 - 2615.582 2619.072 2621.572 2625.0619 2625.0619 2628.5519 2628.5519 2632.0418 2632.0418 2635.5318 2635.5318 2639.0217 2639.0217 2642.5117 2646.0117 2649.5016 - 2649.5016 2652.9916 2652.9916 2656.4815 2656.4815 2659.9715 2606.8961 2610.3861 2610.3861 2613.876 2613.876 2617.366 2620.6993 2624.1893 2624.1893 2627.6792 - 2627.6792 2631.1692 2631.1692 2634.6591 2634.6591 2638.149 2638.149 2641.639 2648.639 2652.1289 2652.1289 2655.6189 2655.6189 2659.1088 2659.1088 2662.5988 - 2606.8961 2610.3861 2610.3861 2613.876 2613.876 2617.366 2620.6993 2624.1893 2624.1893 2627.6792 2627.6792 2631.1692 2631.1692 2634.6591 2634.6591 2638.149 - 2638.149 2641.639 2648.639 2652.1289 2652.1289 2655.6189 2655.6189 2659.1088 2659.1088 2662.5988 2605.1901 2608.6801 2608.6801 2612.17 2612.17 2615.66 - 2619.8266 2623.3166 2623.3166 2626.8065 2626.8065 2630.2965 2630.2965 2633.7864 2633.7864 2637.2764 2637.2764 2640.7663 2651.2663 2654.7563 2654.7563 2658.2462 - 2658.2462 2661.7362 2661.7362 2665.2261 2600.1901 2603.6801 2603.6801 2607.17 2612.17 2615.66 2619.8266 2623.3166 2623.3166 2626.8065 2626.8065 2630.2965 - 2630.2965 2633.7864 2633.7864 2637.2764 2637.2764 2640.7663 2651.2663 2654.7563 2654.7563 2658.2462 2658.2462 2661.7362 2661.7362 2665.2261 2598.4841 2601.9741 - 2601.9741 2605.464 2610.464 2613.954 2618.954 2622.4439 2622.4439 2625.9339 2625.9339 2629.4238 2629.4238 2632.9138 2632.9138 2636.4037 2636.4037 2639.8937 - 2653.8937 2657.3836 2657.3836 2660.8736 2660.8736 2664.3635 2664.3635 2667.8535 2598.4841 2601.9741 2601.9741 2605.464 2610.464 2613.954 2618.954 2622.4439 - 2622.4439 2625.9339 2625.9339 2629.4238 2629.4238 2632.9138 2632.9138 2636.4037 2636.4037 2639.8937 2653.8937 2657.3836 2657.3836 2660.8736 2660.8736 2664.3635 - 2664.3635 2667.8535 2596.7782 2600.2681 2600.2681 2603.7581 2608.7581 2612.248 2618.0813 2621.5713 2621.5713 2625.0612 2625.0612 2628.5512 2628.5512 2632.0411 - 2632.0411 2635.5311 2635.5311 2639.021 2656.521 2660.011 2660.011 2663.5009 2663.5009 2666.9909 2666.9909 2670.4808 2596.7782 2600.2681 2600.2681 2603.7581 - 2608.7581 2612.248 2618.0813 2621.5713 2621.5713 2625.0612 2625.0612 2628.5512 2628.5512 2632.0411 2632.0411 2635.5311 2635.5311 2639.021 2656.521 2660.011 - 2660.011 2663.5009 2663.5009 2666.9909 2666.9909 2670.4808 2595.0722 2598.5621 2598.5621 2602.0521 2607.0521 2610.542 2617.2087 2620.6986 2620.6986 2624.1886 - 2624.1886 2627.6785 2627.6785 2631.1685 2631.1685 2634.6584 2634.6584 2638.1484 2659.1484 2662.6383 2662.6383 2666.1283 2666.1283 2669.6182 2669.6182 2673.1082 - 2595.0722 2598.5621 2598.5621 2602.0521 2607.0521 2610.542 2617.2087 2620.6986 2620.6986 2624.1886 2624.1886 2627.6785 2627.6785 2631.1685 2631.1685 2634.6584 - 2634.6584 2638.1484 2659.1484 2662.6383 2662.6383 2666.1283 2666.1283 2669.6182 2669.6182 2673.1082 2593.3662 2596.8561 2596.8561 2600.3461 2605.3461 2608.836 - 2616.336 2619.826 2619.826 2623.3159 2623.3159 2626.8059 2626.8059 2630.2958 2630.2958 2633.7858 2633.7858 2637.2757 2661.7757 2665.2657 2665.2657 2668.7556 - 2668.7556 2672.2456 2672.2456 2675.7355 2593.3662 2596.8561 2596.8561 2600.3461 2605.3461 2608.836 2616.336 2619.826 2619.826 2623.3159 2623.3159 2626.8059 - 2626.8059 2630.2958 2630.2958 2633.7858 2633.7858 2637.2757 2661.7757 2665.2657 2665.2657 2668.7556 2668.7556 2672.2456 2672.2456 2675.7355 2591.6602 2595.1501 - 2595.1501 2598.6401 2603.6401 2607.13 2615.4634 2618.9533 2618.9533 2622.4433 2622.4433 2625.9332 2625.9332 2629.4232 2629.4232 2632.9131 2632.9131 2636.4031 - 2664.4031 2667.893 2667.893 2671.383 2671.383 2674.8729 2674.8729 2678.3629 2591.6602 2595.1501 2595.1501 2598.6401 2603.6401 2607.13 2615.4634 2618.9533 - 2618.9533 2622.4433 2622.4433 2625.9332 2625.9332 2629.4232 2629.4232 2632.9131 2632.9131 2636.4031 2664.4031 2667.893 2667.893 2671.383 2671.383 2674.8729 - 2674.8729 2678.3629 2589.9542 2593.4442 2593.4442 2596.9341 2601.9341 2605.4241 2614.5907 2618.0807 2618.0807 2621.5706 2621.5706 2625.0606 2625.0606 2628.5505 - 2628.5505 2632.0405 2632.0405 2635.5304 2667.0304 2670.5204 2670.5204 2674.0103 2674.0103 2677.5003 2677.5003 2680.9902 2589.9542 2593.4442 2593.4442 2596.9341 - 2601.9341 2605.4241 2614.5907 2618.0807 2618.0807 2621.5706 2621.5706 2625.0606 2625.0606 2628.5505 2628.5505 2632.0405 2632.0405 2635.5304 2667.0304 2670.5204 - 2670.5204 2674.0103 2674.0103 2677.5003 2677.5003 2680.9902 2588.2482 2591.7382 2591.7382 2595.2281 2600.2281 2603.7181 2613.7181 2617.208 2617.208 2620.698 - 2620.698 2624.1879 2624.1879 2627.6779 2627.6779 2631.1678 2631.1678 2634.6578 2669.6578 2673.1477 2673.1477 2676.6377 2676.6377 2680.1276 2680.1276 2683.6176 - 2619.4466 2622.9366 2622.9366 2626.4265 2629.4265 2632.9165 2632.9165 2636.4064 2636.4064 2639.8964 2639.8964 2643.3863 2643.3863 2646.8762 2646.8762 2650.3662 - 2650.3662 2653.8561 2653.8561 2657.3461 2657.3461 2660.836 2660.836 2664.326 2664.326 2667.8159 2618.5739 2622.0639 2622.0639 2625.5538 2628.5538 2632.0438 - 2632.0438 2635.5337 2635.5337 2639.0237 2639.0237 2642.5136 2642.5136 2646.0036 2646.0036 2649.4935 2649.4935 2652.9835 2652.9835 2656.4734 2656.4734 2659.9634 - 2659.9634 2663.4533 2663.4533 2666.9433 2618.5739 2622.0639 2622.0639 2625.5538 2628.5538 2632.0438 2632.0438 2635.5337 2635.5337 2639.0237 2639.0237 2642.5136 - 2642.5136 2646.0036 2646.0036 2649.4935 2649.4935 2652.9835 2652.9835 2656.4734 2656.4734 2659.9634 2659.9634 2663.4533 2663.4533 2666.9433 2617.7013 2621.1912 - 2621.1912 2624.6812 2627.6812 2631.1711 2631.1711 2634.6611 2634.6611 2638.151 2638.151 2641.641 2641.641 2645.1309 2645.1309 2648.6209 2648.6209 2652.1108 - 2652.1108 2655.6008 2655.6008 2659.0907 2659.0907 2662.5807 2662.5807 2666.0706 2617.7013 2621.1912 2621.1912 2624.6812 2627.6812 2631.1711 2631.1711 2634.6611 - 2634.6611 2638.151 2638.151 2641.641 2641.641 2645.1309 2645.1309 2648.6209 2648.6209 2652.1108 2652.1108 2655.6008 2655.6008 2659.0907 2659.0907 2662.5807 - 2662.5807 2666.0706 2616.8286 2620.3186 2620.3186 2623.8085 2626.8085 2630.2985 2630.2985 2633.7884 2633.7884 2637.2784 2637.2784 2640.7683 2640.7683 2644.2583 - 2644.2583 2647.7482 2647.7482 2651.2382 2651.2382 2654.7281 2654.7281 2658.2181 2658.2181 2661.708 2661.708 2665.198 2616.8286 2620.3186 2620.3186 2623.8085 - 2626.8085 2630.2985 2630.2985 2633.7884 2633.7884 2637.2784 2637.2784 2640.7683 2640.7683 2644.2583 2644.2583 2647.7482 2647.7482 2651.2382 2651.2382 2654.7281 - 2654.7281 2658.2181 2658.2181 2661.708 2661.708 2665.198 2615.956 2619.4459 2619.4459 2622.9359 2625.9359 2629.4258 2629.4258 2632.9158 2632.9158 2636.4057 - 2636.4057 2639.8957 2639.8957 2643.3856 2643.3856 2646.8756 2646.8756 2650.3655 2650.3655 2653.8555 2653.8555 2657.3454 2657.3454 2660.8354 2660.8354 2664.3253 - 2615.956 2619.4459 2619.4459 2622.9359 2622.9359 2626.4258 2629.4258 2632.9158 2632.9158 2636.4057 2636.4057 2639.8957 2639.8957 2643.3856 2643.3856 2646.8756 - 2646.8756 2650.3655 2650.3655 2653.8555 2653.8555 2657.3454 2657.3454 2660.8354 2660.8354 2664.3253 2615.0833 2618.5733 2618.5733 2622.0632 2622.0632 2625.5532 - 2628.5532 2632.0431 2632.0431 2635.5331 2635.5331 2639.023 2639.023 2642.513 2642.513 2646.0029 2646.0029 2649.4929 2649.4929 2652.9828 2652.9828 2656.4728 - 2656.4728 2659.9627 2659.9627 2663.4527 2615.0833 2618.5733 2618.5733 2622.0632 2622.0632 2625.5532 2628.5532 2632.0431 2632.0431 2635.5331 2635.5331 2639.023 - 2639.023 2642.513 2642.513 2646.0029 2646.0029 2649.4929 2649.4929 2652.9828 2652.9828 2656.4728 2656.4728 2659.9627 2659.9627 2663.4527 2614.2107 2617.7006 - 2617.7006 2621.1906 2621.1906 2624.6805 2627.6805 2631.1705 2631.1705 2634.6604 2634.6604 2638.1504 2638.1504 2641.6403 2641.6403 2645.1303 2645.1303 2648.6202 - 2648.6202 2652.1102 2652.1102 2655.6001 2655.6001 2659.0901 2659.0901 2662.58 2614.2107 2617.7006 2617.7006 2621.1906 2621.1906 2624.6805 2627.6805 2631.1705 - 2631.1705 2634.6604 2634.6604 2638.1504 2638.1504 2641.6403 2641.6403 2645.1303 2645.1303 2648.6202 2648.6202 2652.1102 2652.1102 2655.6001 2655.6001 2659.0901 - 2659.0901 2662.58 2613.338 2616.828 2616.828 2620.3179 2620.3179 2623.8079 2626.8079 2630.2978 2630.2978 2633.7878 2633.7878 2637.2777 2637.2777 2640.7677 - 2640.7677 2644.2576 2644.2576 2647.7476 2647.7476 2651.2375 2651.2375 2654.7275 2654.7275 2658.2174 2658.2174 2661.7074 2613.338 2616.828 2616.828 2620.3179 - 2620.3179 2623.8079 2626.8079 2630.2978 2630.2978 2633.7878 2633.7878 2637.2777 2637.2777 2640.7677 2640.7677 2644.2576 2644.2576 2647.7476 2647.7476 2651.2375 - 2651.2375 2654.7275 2654.7275 2658.2174 2658.2174 2661.7074 2612.4654 2615.9553 2615.9553 2619.4453 2619.4453 2622.9352 2625.9352 2629.4252 2629.4252 2632.9151 - 2632.9151 2636.4051 2636.4051 2639.895 2639.895 2643.385 2643.385 2646.8749 2646.8749 2650.3649 2650.3649 2653.8548 2653.8548 2657.3448 2657.3448 2660.8347 - 2615.4654 2618.9553 2618.9553 2622.4453 2622.4453 2625.9352 2625.9352 2629.4252 2629.4252 2632.9151 2632.9151 2636.4051 2636.4051 2639.895 2639.895 2643.385 - 2643.385 2646.8749 2646.8749 2650.3649 2650.3649 2653.8548 2653.8548 2657.3448 2657.3448 2660.8347 2614.5927 2618.0827 2618.0827 2621.5726 2621.5726 2625.0626 - 2625.0626 2628.5525 2628.5525 2632.0425 2632.0425 2635.5324 2635.5324 2639.0224 2639.0224 2642.5123 2642.5123 2646.0023 2646.0023 2649.4922 2649.4922 2652.9822 - 2652.9822 2656.4721 2656.4721 2659.9621 2614.5927 2618.0827 2618.0827 2621.5726 2621.5726 2625.0626 2625.0626 2628.5525 2628.5525 2632.0425 2632.0425 2635.5324 - 2635.5324 2639.0224 2639.0224 2642.5123 2642.5123 2646.0023 2646.0023 2649.4922 2649.4922 2652.9822 2652.9822 2656.4721 2656.4721 2659.9621 2613.7201 2617.21 - 2617.21 2620.7 2620.7 2624.1899 2624.1899 2627.6799 2627.6799 2631.1698 2631.1698 2634.6598 2634.6598 2638.1497 2638.1497 2641.6397 2641.6397 2645.1296 - 2645.1296 2648.6196 2648.6196 2652.1095 2652.1095 2655.5995 2655.5995 2659.0894 2613.7201 2617.21 2617.21 2620.7 2620.7 2624.1899 2624.1899 2627.6799 - 2627.6799 2631.1698 2631.1698 2634.6598 2634.6598 2638.1497 2638.1497 2641.6397 2641.6397 2645.1296 2645.1296 2648.6196 2648.6196 2652.1095 2652.1095 2655.5995 - 2655.5995 2659.0894 2612.0141 2615.504 2615.504 2618.994 2618.994 2622.4839 2623.3173 2626.8072 2626.8072 2630.2972 2630.2972 2633.7871 2633.7871 2637.2771 - 2637.2771 2640.767 2640.767 2644.257 2644.257 2647.7469 2647.7469 2651.2369 2651.2369 2654.7268 2654.7268 2658.2168 2612.0141 2615.504 2615.504 2618.994 - 2618.994 2622.4839 2623.3173 2626.8072 2626.8072 2630.2972 2630.2972 2633.7871 2633.7871 2637.2771 2637.2771 2640.767 2640.767 2644.257 2644.257 2647.7469 - 2647.7469 2651.2369 2651.2369 2654.7268 2654.7268 2658.2168 2610.3081 2613.798 2613.798 2617.288 2617.288 2620.7779 2622.4446 2625.9346 2625.9346 2629.4245 - 2629.4245 2632.9145 2632.9145 2636.4044 2636.4044 2639.8944 2639.8944 2643.3843 2643.3843 2646.8743 2646.8743 2650.3642 2650.3642 2653.8542 2653.8542 2657.3441 - 2610.3081 2613.798 2613.798 2617.288 2617.288 2620.7779 2622.4446 2625.9346 2625.9346 2629.4245 2629.4245 2632.9145 2632.9145 2636.4044 2636.4044 2639.8944 - 2639.8944 2643.3843 2643.3843 2646.8743 2646.8743 2650.3642 2650.3642 2653.8542 2653.8542 2657.3441 2608.6021 2612.0921 2612.0921 2615.582 2615.582 2619.072 - 2621.572 2625.0619 2625.0619 2628.5519 2628.5519 2632.0418 2632.0418 2635.5318 2635.5318 2639.0217 2639.0217 2642.5117 2646.0117 2649.5016 2649.5016 2652.9916 - 2652.9916 2656.4815 2656.4815 2659.9715 2608.6021 2612.0921 2612.0921 2615.582 2615.582 2619.072 2621.572 2625.0619 2625.0619 2628.5519 2628.5519 2632.0418 - 2632.0418 2635.5318 2635.5318 2639.0217 2639.0217 2642.5117 2646.0117 2649.5016 2649.5016 2652.9916 2652.9916 2656.4815 2656.4815 2659.9715 2606.8961 2610.3861 - 2610.3861 2613.876 2613.876 2617.366 2620.6993 2624.1893 2624.1893 2627.6792 2627.6792 2631.1692 2631.1692 2634.6591 2634.6591 2638.149 2638.149 2641.639 - 2648.639 2652.1289 2652.1289 2655.6189 2655.6189 2659.1088 2659.1088 2662.5988 2606.8961 2610.3861 2610.3861 2613.876 2613.876 2617.366 2620.6993 2624.1893 - 2624.1893 2627.6792 2627.6792 2631.1692 2631.1692 2634.6591 2634.6591 2638.149 2638.149 2641.639 2648.639 2652.1289 2652.1289 2655.6189 2655.6189 2659.1088 - 2659.1088 2662.5988 2605.1901 2608.6801 2608.6801 2612.17 2612.17 2615.66 2619.8266 2623.3166 2623.3166 2626.8065 2626.8065 2630.2965 2630.2965 2633.7864 - 2633.7864 2637.2764 2637.2764 2640.7663 2651.2663 2654.7563 2654.7563 2658.2462 2658.2462 2661.7362 2661.7362 2665.2261 2600.1901 2603.6801 2603.6801 2607.17 - 2612.17 2615.66 2619.8266 2623.3166 2623.3166 2626.8065 2626.8065 2630.2965 2630.2965 2633.7864 2633.7864 2637.2764 2637.2764 2640.7663 2651.2663 2654.7563 - 2654.7563 2658.2462 2658.2462 2661.7362 2661.7362 2665.2261 2598.4841 2601.9741 2601.9741 2605.464 2610.464 2613.954 2618.954 2622.4439 2622.4439 2625.9339 - 2625.9339 2629.4238 2629.4238 2632.9138 2632.9138 2636.4037 2636.4037 2639.8937 2653.8937 2657.3836 2657.3836 2660.8736 2660.8736 2664.3635 2664.3635 2667.8535 - 2598.4841 2601.9741 2601.9741 2605.464 2610.464 2613.954 2618.954 2622.4439 2622.4439 2625.9339 2625.9339 2629.4238 2629.4238 2632.9138 2632.9138 2636.4037 - 2636.4037 2639.8937 2653.8937 2657.3836 2657.3836 2660.8736 2660.8736 2664.3635 2664.3635 2667.8535 2596.7782 2600.2681 2600.2681 2603.7581 2608.7581 2612.248 - 2618.0813 2621.5713 2621.5713 2625.0612 2625.0612 2628.5512 2628.5512 2632.0411 2632.0411 2635.5311 2635.5311 2639.021 2656.521 2660.011 2660.011 2663.5009 - 2663.5009 2666.9909 2666.9909 2670.4808 2596.7782 2600.2681 2600.2681 2603.7581 2608.7581 2612.248 2618.0813 2621.5713 2621.5713 2625.0612 2625.0612 2628.5512 - 2628.5512 2632.0411 2632.0411 2635.5311 2635.5311 2639.021 2656.521 2660.011 2660.011 2663.5009 2663.5009 2666.9909 2666.9909 2670.4808 2595.0722 2598.5621 - 2598.5621 2602.0521 2607.0521 2610.542 2617.2087 2620.6986 2620.6986 2624.1886 2624.1886 2627.6785 2627.6785 2631.1685 2631.1685 2634.6584 2634.6584 2638.1484 - 2659.1484 2662.6383 2662.6383 2666.1283 2666.1283 2669.6182 2669.6182 2673.1082 2595.0722 2598.5621 2598.5621 2602.0521 2607.0521 2610.542 2617.2087 2620.6986 - 2620.6986 2624.1886 2624.1886 2627.6785 2627.6785 2631.1685 2631.1685 2634.6584 2634.6584 2638.1484 2659.1484 2662.6383 2662.6383 2666.1283 2666.1283 2669.6182 - 2669.6182 2673.1082 2593.3662 2596.8561 2596.8561 2600.3461 2605.3461 2608.836 2616.336 2619.826 2619.826 2623.3159 2623.3159 2626.8059 2626.8059 2630.2958 - 2630.2958 2633.7858 2633.7858 2637.2757 2661.7757 2665.2657 2665.2657 2668.7556 2668.7556 2672.2456 2672.2456 2675.7355 2593.3662 2596.8561 2596.8561 2600.3461 - 2605.3461 2608.836 2616.336 2619.826 2619.826 2623.3159 2623.3159 2626.8059 2626.8059 2630.2958 2630.2958 2633.7858 2633.7858 2637.2757 2661.7757 2665.2657 - 2665.2657 2668.7556 2668.7556 2672.2456 2672.2456 2675.7355 2591.6602 2595.1501 2595.1501 2598.6401 2603.6401 2607.13 2615.4634 2618.9533 2618.9533 2622.4433 - 2622.4433 2625.9332 2625.9332 2629.4232 2629.4232 2632.9131 2632.9131 2636.4031 2664.4031 2667.893 2667.893 2671.383 2671.383 2674.8729 2674.8729 2678.3629 - 2591.6602 2595.1501 2595.1501 2598.6401 2603.6401 2607.13 2615.4634 2618.9533 2618.9533 2622.4433 2622.4433 2625.9332 2625.9332 2629.4232 2629.4232 2632.9131 - 2632.9131 2636.4031 2664.4031 2667.893 2667.893 2671.383 2671.383 2674.8729 2674.8729 2678.3629 2589.9542 2593.4442 2593.4442 2596.9341 2601.9341 2605.4241 - 2614.5907 2618.0807 2618.0807 2621.5706 2621.5706 2625.0606 2625.0606 2628.5505 2628.5505 2632.0405 2632.0405 2635.5304 2667.0304 2670.5204 2670.5204 2674.0103 - 2674.0103 2677.5003 2677.5003 2680.9902 2589.9542 2593.4442 2593.4442 2596.9341 2601.9341 2605.4241 2614.5907 2618.0807 2618.0807 2621.5706 2621.5706 2625.0606 - 2625.0606 2628.5505 2628.5505 2632.0405 2632.0405 2635.5304 2667.0304 2670.5204 2670.5204 2674.0103 2674.0103 2677.5003 2677.5003 2680.9902 2588.2482 2591.7382 - 2591.7382 2595.2281 2600.2281 2603.7181 2613.7181 2617.208 2617.208 2620.698 2620.698 2624.1879 2624.1879 2627.6779 2627.6779 2631.1678 2631.1678 2634.6578 - 2669.6578 2673.1477 2673.1477 2676.6377 2676.6377 2680.1276 2680.1276 2683.6176 2629.4401 2632.9301 2632.9301 2636.42 2639.42 2642.91 2642.91 2646.3999 - 2646.3999 2649.8899 2649.8899 2653.3798 2653.3798 2656.8698 2656.8698 2660.3597 2660.3597 2663.8497 2663.8497 2667.3396 2667.3396 2670.8296 2670.8296 2674.3195 - 2674.3195 2677.8095 2628.5675 2632.0574 2632.0574 2635.5474 2638.5474 2642.0373 2642.0373 2645.5273 2645.5273 2649.0172 2649.0172 2652.5072 2652.5072 2655.9971 - 2655.9971 2659.4871 2659.4871 2662.977 2662.977 2666.467 2666.467 2669.9569 2669.9569 2673.4469 2673.4469 2676.9368 2628.5675 2632.0574 2632.0574 2635.5474 - 2638.5474 2642.0373 2642.0373 2645.5273 2645.5273 2649.0172 2649.0172 2652.5072 2652.5072 2655.9971 2655.9971 2659.4871 2659.4871 2662.977 2662.977 2666.467 - 2666.467 2669.9569 2669.9569 2673.4469 2673.4469 2676.9368 2627.6948 2631.1848 2631.1848 2634.6747 2637.6747 2641.1647 2641.1647 2644.6546 2644.6546 2648.1446 - 2648.1446 2651.6345 2651.6345 2655.1245 2655.1245 2658.6144 2658.6144 2662.1044 2662.1044 2665.5943 2665.5943 2669.0843 2669.0843 2672.5742 2672.5742 2676.0642 - 2627.6948 2631.1848 2631.1848 2634.6747 2637.6747 2641.1647 2641.1647 2644.6546 2644.6546 2648.1446 2648.1446 2651.6345 2651.6345 2655.1245 2655.1245 2658.6144 - 2658.6144 2662.1044 2662.1044 2665.5943 2665.5943 2669.0843 2669.0843 2672.5742 2672.5742 2676.0642 2626.8222 2630.3121 2630.3121 2633.8021 2636.8021 2640.292 - 2640.292 2643.782 2643.782 2647.2719 2647.2719 2650.7619 2650.7619 2654.2518 2654.2518 2657.7418 2657.7418 2661.2317 2661.2317 2664.7217 2664.7217 2668.2116 - 2668.2116 2671.7016 2671.7016 2675.1915 2626.8222 2630.3121 2630.3121 2633.8021 2636.8021 2640.292 2640.292 2643.782 2643.782 2647.2719 2647.2719 2650.7619 - 2650.7619 2654.2518 2654.2518 2657.7418 2657.7418 2661.2317 2661.2317 2664.7217 2664.7217 2668.2116 2668.2116 2671.7016 2671.7016 2675.1915 2625.9495 2629.4395 - 2629.4395 2632.9294 2635.9294 2639.4194 2639.4194 2642.9093 2642.9093 2646.3993 2646.3993 2649.8892 2649.8892 2653.3792 2653.3792 2656.8691 2656.8691 2660.3591 - 2660.3591 2663.849 2663.849 2667.339 2667.339 2670.8289 2670.8289 2674.3189 2625.9495 2629.4395 2629.4395 2632.9294 2632.9294 2636.4194 2639.4194 2642.9093 - 2642.9093 2646.3993 2646.3993 2649.8892 2649.8892 2653.3792 2653.3792 2656.8691 2656.8691 2660.3591 2660.3591 2663.849 2663.849 2667.339 2667.339 2670.8289 - 2670.8289 2674.3189 2625.0769 2628.5668 2628.5668 2632.0568 2632.0568 2635.5467 2638.5467 2642.0367 2642.0367 2645.5266 2645.5266 2649.0166 2649.0166 2652.5065 - 2652.5065 2655.9965 2655.9965 2659.4864 2659.4864 2662.9764 2662.9764 2666.4663 2666.4663 2669.9563 2669.9563 2673.4462 2625.0769 2628.5668 2628.5668 2632.0568 - 2632.0568 2635.5467 2638.5467 2642.0367 2642.0367 2645.5266 2645.5266 2649.0166 2649.0166 2652.5065 2652.5065 2655.9965 2655.9965 2659.4864 2659.4864 2662.9764 - 2662.9764 2666.4663 2666.4663 2669.9563 2669.9563 2673.4462 2624.2042 2627.6942 2627.6942 2631.1841 2631.1841 2634.6741 2637.6741 2641.164 2641.164 2644.654 - 2644.654 2648.1439 2648.1439 2651.6339 2651.6339 2655.1238 2655.1238 2658.6138 2658.6138 2662.1037 2662.1037 2665.5937 2665.5937 2669.0836 2669.0836 2672.5736 - 2624.2042 2627.6942 2627.6942 2631.1841 2631.1841 2634.6741 2637.6741 2641.164 2641.164 2644.654 2644.654 2648.1439 2648.1439 2651.6339 2651.6339 2655.1238 - 2655.1238 2658.6138 2658.6138 2662.1037 2662.1037 2665.5937 2665.5937 2669.0836 2669.0836 2672.5736 2623.3316 2626.8215 2626.8215 2630.3115 2630.3115 2633.8014 - 2636.8014 2640.2914 2640.2914 2643.7813 2643.7813 2647.2713 2647.2713 2650.7612 2650.7612 2654.2512 2654.2512 2657.7411 2657.7411 2661.2311 2661.2311 2664.721 - 2664.721 2668.211 2668.211 2671.7009 2623.3316 2626.8215 2626.8215 2630.3115 2630.3115 2633.8014 2636.8014 2640.2914 2640.2914 2643.7813 2643.7813 2647.2713 - 2647.2713 2650.7612 2650.7612 2654.2512 2654.2512 2657.7411 2657.7411 2661.2311 2661.2311 2664.721 2664.721 2668.211 2668.211 2671.7009 2622.4589 2625.9489 - 2625.9489 2629.4388 2629.4388 2632.9287 2635.9287 2639.4187 2639.4187 2642.9086 2642.9086 2646.3986 2646.3986 2649.8885 2649.8885 2653.3785 2653.3785 2656.8684 - 2656.8684 2660.3584 2660.3584 2663.8483 2663.8483 2667.3383 2667.3383 2670.8282 2625.4589 2628.9489 2628.9489 2632.4388 2632.4388 2635.9287 2635.9287 2639.4187 - 2639.4187 2642.9086 2642.9086 2646.3986 2646.3986 2649.8885 2649.8885 2653.3785 2653.3785 2656.8684 2656.8684 2660.3584 2660.3584 2663.8483 2663.8483 2667.3383 - 2667.3383 2670.8282 2624.5862 2628.0762 2628.0762 2631.5661 2631.5661 2635.0561 2635.0561 2638.546 2638.546 2642.036 2642.036 2645.5259 2645.5259 2649.0159 - 2649.0159 2652.5058 2652.5058 2655.9958 2655.9958 2659.4857 2659.4857 2662.9757 2662.9757 2666.4656 2666.4656 2669.9556 2624.5862 2628.0762 2628.0762 2631.5661 - 2631.5661 2635.0561 2635.0561 2638.546 2638.546 2642.036 2642.036 2645.5259 2645.5259 2649.0159 2649.0159 2652.5058 2652.5058 2655.9958 2655.9958 2659.4857 - 2659.4857 2662.9757 2662.9757 2666.4656 2666.4656 2669.9556 2623.7136 2627.2035 2627.2035 2630.6935 2630.6935 2634.1834 2634.1834 2637.6734 2637.6734 2641.1633 - 2641.1633 2644.6533 2644.6533 2648.1432 2648.1432 2651.6332 2651.6332 2655.1231 2655.1231 2658.6131 2658.6131 2662.103 2662.103 2665.593 2665.593 2669.0829 - 2623.7136 2627.2035 2627.2035 2630.6935 2630.6935 2634.1834 2634.1834 2637.6734 2637.6734 2641.1633 2641.1633 2644.6533 2644.6533 2648.1432 2648.1432 2651.6332 - 2651.6332 2655.1231 2655.1231 2658.6131 2658.6131 2662.103 2662.103 2665.593 2665.593 2669.0829 2622.0076 2625.4976 2625.4976 2628.9875 2628.9875 2632.4775 - 2633.3108 2636.8007 2636.8007 2640.2907 2640.2907 2643.7806 2643.7806 2647.2706 2647.2706 2650.7605 2650.7605 2654.2505 2654.2505 2657.7404 2657.7404 2661.2304 - 2661.2304 2664.7203 2664.7203 2668.2103 2622.0076 2625.4976 2625.4976 2628.9875 2628.9875 2632.4775 2633.3108 2636.8007 2636.8007 2640.2907 2640.2907 2643.7806 - 2643.7806 2647.2706 2647.2706 2650.7605 2650.7605 2654.2505 2654.2505 2657.7404 2657.7404 2661.2304 2661.2304 2664.7203 2664.7203 2668.2103 2620.3016 2623.7916 - 2623.7916 2627.2815 2627.2815 2630.7715 2632.4381 2635.9281 2635.9281 2639.418 2639.418 2642.908 2642.908 2646.3979 2646.3979 2649.8879 2649.8879 2653.3778 - 2653.3778 2656.8678 2656.8678 2660.3577 2660.3577 2663.8477 2663.8477 2667.3376 2620.3016 2623.7916 2623.7916 2627.2815 2627.2815 2630.7715 2632.4381 2635.9281 - 2635.9281 2639.418 2639.418 2642.908 2642.908 2646.3979 2646.3979 2649.8879 2649.8879 2653.3778 2653.3778 2656.8678 2656.8678 2660.3577 2660.3577 2663.8477 - 2663.8477 2667.3376 2618.5956 2622.0856 2622.0856 2625.5755 2625.5755 2629.0655 2631.5655 2635.0554 2635.0554 2638.5454 2638.5454 2642.0353 2642.0353 2645.5253 - 2645.5253 2649.0152 2649.0152 2652.5052 2656.0052 2659.4951 2659.4951 2662.9851 2662.9851 2666.475 2666.475 2669.965 2618.5956 2622.0856 2622.0856 2625.5755 - 2625.5755 2629.0655 2631.5655 2635.0554 2635.0554 2638.5454 2638.5454 2642.0353 2642.0353 2645.5253 2645.5253 2649.0152 2649.0152 2652.5052 2656.0052 2659.4951 - 2659.4951 2662.9851 2662.9851 2666.475 2666.475 2669.965 2616.8896 2620.3796 2620.3796 2623.8695 2623.8695 2627.3595 2630.6928 2634.1828 2634.1828 2637.6727 - 2637.6727 2641.1627 2641.1627 2644.6526 2644.6526 2648.1426 2648.1426 2651.6325 2658.6325 2662.1225 2662.1225 2665.6124 2665.6124 2669.1024 2669.1024 2672.5923 - 2616.8896 2620.3796 2620.3796 2623.8695 2623.8695 2627.3595 2630.6928 2634.1828 2634.1828 2637.6727 2637.6727 2641.1627 2641.1627 2644.6526 2644.6526 2648.1426 - 2648.1426 2651.6325 2658.6325 2662.1225 2662.1225 2665.6124 2665.6124 2669.1024 2669.1024 2672.5923 2615.1837 2618.6736 2618.6736 2622.1636 2622.1636 2625.6535 - 2629.8202 2633.3101 2633.3101 2636.8001 2636.8001 2640.29 2640.29 2643.78 2643.78 2647.2699 2647.2699 2650.7599 2661.2599 2664.7498 2664.7498 2668.2398 - 2668.2398 2671.7297 2671.7297 2675.2197 2610.1837 2613.6736 2613.6736 2617.1636 2622.1636 2625.6535 2629.8202 2633.3101 2633.3101 2636.8001 2636.8001 2640.29 - 2640.29 2643.78 2643.78 2647.2699 2647.2699 2650.7599 2661.2599 2664.7498 2664.7498 2668.2398 2668.2398 2671.7297 2671.7297 2675.2197 2608.4777 2611.9676 - 2611.9676 2615.4576 2620.4576 2623.9475 2628.9475 2632.4375 2632.4375 2635.9274 2635.9274 2639.4174 2639.4174 2642.9073 2642.9073 2646.3973 2646.3973 2649.8872 - 2663.8872 2667.3772 2667.3772 2670.8671 2670.8671 2674.3571 2674.3571 2677.847 2608.4777 2611.9676 2611.9676 2615.4576 2620.4576 2623.9475 2628.9475 2632.4375 - 2632.4375 2635.9274 2635.9274 2639.4174 2639.4174 2642.9073 2642.9073 2646.3973 2646.3973 2649.8872 2663.8872 2667.3772 2667.3772 2670.8671 2670.8671 2674.3571 - 2674.3571 2677.847 2606.7717 2610.2616 2610.2616 2613.7516 2618.7516 2622.2415 2628.0749 2631.5648 2631.5648 2635.0548 2635.0548 2638.5447 2638.5447 2642.0347 - 2642.0347 2645.5246 2645.5246 2649.0146 2666.5146 2670.0045 2670.0045 2673.4945 2673.4945 2676.9844 2676.9844 2680.4744 2606.7717 2610.2616 2610.2616 2613.7516 - 2618.7516 2622.2415 2628.0749 2631.5648 2631.5648 2635.0548 2635.0548 2638.5447 2638.5447 2642.0347 2642.0347 2645.5246 2645.5246 2649.0146 2666.5146 2670.0045 - 2670.0045 2673.4945 2673.4945 2676.9844 2676.9844 2680.4744 2605.0657 2608.5556 2608.5556 2612.0456 2617.0456 2620.5355 2627.2022 2630.6922 2630.6922 2634.1821 - 2634.1821 2637.6721 2637.6721 2641.162 2641.162 2644.652 2644.652 2648.1419 2669.1419 2672.6319 2672.6319 2676.1218 2676.1218 2679.6118 2679.6118 2683.1017 - 2605.0657 2608.5556 2608.5556 2612.0456 2617.0456 2620.5355 2627.2022 2630.6922 2630.6922 2634.1821 2634.1821 2637.6721 2637.6721 2641.162 2641.162 2644.652 - 2644.652 2648.1419 2669.1419 2672.6319 2672.6319 2676.1218 2676.1218 2679.6118 2679.6118 2683.1017 2603.3597 2606.8497 2606.8497 2610.3396 2615.3396 2618.8296 - 2626.3296 2629.8195 2629.8195 2633.3095 2633.3095 2636.7994 2636.7994 2640.2894 2640.2894 2643.7793 2643.7793 2647.2693 2671.7693 2675.2592 2675.2592 2678.7492 - 2678.7492 2682.2391 2682.2391 2685.7291 2603.3597 2606.8497 2606.8497 2610.3396 2615.3396 2618.8296 2626.3296 2629.8195 2629.8195 2633.3095 2633.3095 2636.7994 - 2636.7994 2640.2894 2640.2894 2643.7793 2643.7793 2647.2693 2671.7693 2675.2592 2675.2592 2678.7492 2678.7492 2682.2391 2682.2391 2685.7291 2601.6537 2605.1437 - 2605.1437 2608.6336 2613.6336 2617.1236 2625.4569 2628.9469 2628.9469 2632.4368 2632.4368 2635.9268 2635.9268 2639.4167 2639.4167 2642.9067 2642.9067 2646.3966 - 2674.3966 2677.8866 2677.8866 2681.3765 2681.3765 2684.8665 2684.8665 2688.3564 2601.6537 2605.1437 2605.1437 2608.6336 2613.6336 2617.1236 2625.4569 2628.9469 - 2628.9469 2632.4368 2632.4368 2635.9268 2635.9268 2639.4167 2639.4167 2642.9067 2642.9067 2646.3966 2674.3966 2677.8866 2677.8866 2681.3765 2681.3765 2684.8665 - 2684.8665 2688.3564 2599.9477 2603.4377 2603.4377 2606.9276 2611.9276 2615.4176 2624.5843 2628.0742 2628.0742 2631.5642 2631.5642 2635.0541 2635.0541 2638.5441 - 2638.5441 2642.034 2642.034 2645.524 2677.024 2680.5139 2680.5139 2684.0039 2684.0039 2687.4938 2687.4938 2690.9838 2599.9477 2603.4377 2603.4377 2606.9276 - 2611.9276 2615.4176 2624.5843 2628.0742 2628.0742 2631.5642 2631.5642 2635.0541 2635.0541 2638.5441 2638.5441 2642.034 2642.034 2645.524 2677.024 2680.5139 - 2680.5139 2684.0039 2684.0039 2687.4938 2687.4938 2690.9838 2598.2418 2601.7317 2601.7317 2605.2217 2610.2217 2613.7116 2623.7116 2627.2015 2627.2015 2630.6915 - 2630.6915 2634.1814 2634.1814 2637.6714 2637.6714 2641.1613 2641.1613 2644.6513 2679.6513 2683.1412 2683.1412 2686.6312 2686.6312 2690.1211 2690.1211 2693.6111 - 2629.4401 2632.9301 2632.9301 2636.42 2639.42 2642.91 2642.91 2646.3999 2646.3999 2649.8899 2649.8899 2653.3798 2653.3798 2656.8698 2656.8698 2660.3597 - 2660.3597 2663.8497 2663.8497 2667.3396 2667.3396 2670.8296 2670.8296 2674.3195 2674.3195 2677.8095 2628.5675 2632.0574 2632.0574 2635.5474 2638.5474 2642.0373 - 2642.0373 2645.5273 2645.5273 2649.0172 2649.0172 2652.5072 2652.5072 2655.9971 2655.9971 2659.4871 2659.4871 2662.977 2662.977 2666.467 2666.467 2669.9569 - 2669.9569 2673.4469 2673.4469 2676.9368 2628.5675 2632.0574 2632.0574 2635.5474 2638.5474 2642.0373 2642.0373 2645.5273 2645.5273 2649.0172 2649.0172 2652.5072 - 2652.5072 2655.9971 2655.9971 2659.4871 2659.4871 2662.977 2662.977 2666.467 2666.467 2669.9569 2669.9569 2673.4469 2673.4469 2676.9368 2627.6948 2631.1848 - 2631.1848 2634.6747 2637.6747 2641.1647 2641.1647 2644.6546 2644.6546 2648.1446 2648.1446 2651.6345 2651.6345 2655.1245 2655.1245 2658.6144 2658.6144 2662.1044 - 2662.1044 2665.5943 2665.5943 2669.0843 2669.0843 2672.5742 2672.5742 2676.0642 2627.6948 2631.1848 2631.1848 2634.6747 2637.6747 2641.1647 2641.1647 2644.6546 - 2644.6546 2648.1446 2648.1446 2651.6345 2651.6345 2655.1245 2655.1245 2658.6144 2658.6144 2662.1044 2662.1044 2665.5943 2665.5943 2669.0843 2669.0843 2672.5742 - 2672.5742 2676.0642 2626.8222 2630.3121 2630.3121 2633.8021 2636.8021 2640.292 2640.292 2643.782 2643.782 2647.2719 2647.2719 2650.7619 2650.7619 2654.2518 - 2654.2518 2657.7418 2657.7418 2661.2317 2661.2317 2664.7217 2664.7217 2668.2116 2668.2116 2671.7016 2671.7016 2675.1915 2626.8222 2630.3121 2630.3121 2633.8021 - 2636.8021 2640.292 2640.292 2643.782 2643.782 2647.2719 2647.2719 2650.7619 2650.7619 2654.2518 2654.2518 2657.7418 2657.7418 2661.2317 2661.2317 2664.7217 - 2664.7217 2668.2116 2668.2116 2671.7016 2671.7016 2675.1915 2625.9495 2629.4395 2629.4395 2632.9294 2635.9294 2639.4194 2639.4194 2642.9093 2642.9093 2646.3993 - 2646.3993 2649.8892 2649.8892 2653.3792 2653.3792 2656.8691 2656.8691 2660.3591 2660.3591 2663.849 2663.849 2667.339 2667.339 2670.8289 2670.8289 2674.3189 - 2625.9495 2629.4395 2629.4395 2632.9294 2632.9294 2636.4194 2639.4194 2642.9093 2642.9093 2646.3993 2646.3993 2649.8892 2649.8892 2653.3792 2653.3792 2656.8691 - 2656.8691 2660.3591 2660.3591 2663.849 2663.849 2667.339 2667.339 2670.8289 2670.8289 2674.3189 2625.0769 2628.5668 2628.5668 2632.0568 2632.0568 2635.5467 - 2638.5467 2642.0367 2642.0367 2645.5266 2645.5266 2649.0166 2649.0166 2652.5065 2652.5065 2655.9965 2655.9965 2659.4864 2659.4864 2662.9764 2662.9764 2666.4663 - 2666.4663 2669.9563 2669.9563 2673.4462 2625.0769 2628.5668 2628.5668 2632.0568 2632.0568 2635.5467 2638.5467 2642.0367 2642.0367 2645.5266 2645.5266 2649.0166 - 2649.0166 2652.5065 2652.5065 2655.9965 2655.9965 2659.4864 2659.4864 2662.9764 2662.9764 2666.4663 2666.4663 2669.9563 2669.9563 2673.4462 2624.2042 2627.6942 - 2627.6942 2631.1841 2631.1841 2634.6741 2637.6741 2641.164 2641.164 2644.654 2644.654 2648.1439 2648.1439 2651.6339 2651.6339 2655.1238 2655.1238 2658.6138 - 2658.6138 2662.1037 2662.1037 2665.5937 2665.5937 2669.0836 2669.0836 2672.5736 2624.2042 2627.6942 2627.6942 2631.1841 2631.1841 2634.6741 2637.6741 2641.164 - 2641.164 2644.654 2644.654 2648.1439 2648.1439 2651.6339 2651.6339 2655.1238 2655.1238 2658.6138 2658.6138 2662.1037 2662.1037 2665.5937 2665.5937 2669.0836 - 2669.0836 2672.5736 2623.3316 2626.8215 2626.8215 2630.3115 2630.3115 2633.8014 2636.8014 2640.2914 2640.2914 2643.7813 2643.7813 2647.2713 2647.2713 2650.7612 - 2650.7612 2654.2512 2654.2512 2657.7411 2657.7411 2661.2311 2661.2311 2664.721 2664.721 2668.211 2668.211 2671.7009 2623.3316 2626.8215 2626.8215 2630.3115 - 2630.3115 2633.8014 2636.8014 2640.2914 2640.2914 2643.7813 2643.7813 2647.2713 2647.2713 2650.7612 2650.7612 2654.2512 2654.2512 2657.7411 2657.7411 2661.2311 - 2661.2311 2664.721 2664.721 2668.211 2668.211 2671.7009 2622.4589 2625.9489 2625.9489 2629.4388 2629.4388 2632.9287 2635.9287 2639.4187 2639.4187 2642.9086 - 2642.9086 2646.3986 2646.3986 2649.8885 2649.8885 2653.3785 2653.3785 2656.8684 2656.8684 2660.3584 2660.3584 2663.8483 2663.8483 2667.3383 2667.3383 2670.8282 - 2625.4589 2628.9489 2628.9489 2632.4388 2632.4388 2635.9287 2635.9287 2639.4187 2639.4187 2642.9086 2642.9086 2646.3986 2646.3986 2649.8885 2649.8885 2653.3785 - 2653.3785 2656.8684 2656.8684 2660.3584 2660.3584 2663.8483 2663.8483 2667.3383 2667.3383 2670.8282 2624.5862 2628.0762 2628.0762 2631.5661 2631.5661 2635.0561 - 2635.0561 2638.546 2638.546 2642.036 2642.036 2645.5259 2645.5259 2649.0159 2649.0159 2652.5058 2652.5058 2655.9958 2655.9958 2659.4857 2659.4857 2662.9757 - 2662.9757 2666.4656 2666.4656 2669.9556 2624.5862 2628.0762 2628.0762 2631.5661 2631.5661 2635.0561 2635.0561 2638.546 2638.546 2642.036 2642.036 2645.5259 - 2645.5259 2649.0159 2649.0159 2652.5058 2652.5058 2655.9958 2655.9958 2659.4857 2659.4857 2662.9757 2662.9757 2666.4656 2666.4656 2669.9556 2623.7136 2627.2035 - 2627.2035 2630.6935 2630.6935 2634.1834 2634.1834 2637.6734 2637.6734 2641.1633 2641.1633 2644.6533 2644.6533 2648.1432 2648.1432 2651.6332 2651.6332 2655.1231 - 2655.1231 2658.6131 2658.6131 2662.103 2662.103 2665.593 2665.593 2669.0829 2623.7136 2627.2035 2627.2035 2630.6935 2630.6935 2634.1834 2634.1834 2637.6734 - 2637.6734 2641.1633 2641.1633 2644.6533 2644.6533 2648.1432 2648.1432 2651.6332 2651.6332 2655.1231 2655.1231 2658.6131 2658.6131 2662.103 2662.103 2665.593 - 2665.593 2669.0829 2622.0076 2625.4976 2625.4976 2628.9875 2628.9875 2632.4775 2633.3108 2636.8007 2636.8007 2640.2907 2640.2907 2643.7806 2643.7806 2647.2706 - 2647.2706 2650.7605 2650.7605 2654.2505 2654.2505 2657.7404 2657.7404 2661.2304 2661.2304 2664.7203 2664.7203 2668.2103 2622.0076 2625.4976 2625.4976 2628.9875 - 2628.9875 2632.4775 2633.3108 2636.8007 2636.8007 2640.2907 2640.2907 2643.7806 2643.7806 2647.2706 2647.2706 2650.7605 2650.7605 2654.2505 2654.2505 2657.7404 - 2657.7404 2661.2304 2661.2304 2664.7203 2664.7203 2668.2103 2620.3016 2623.7916 2623.7916 2627.2815 2627.2815 2630.7715 2632.4381 2635.9281 2635.9281 2639.418 - 2639.418 2642.908 2642.908 2646.3979 2646.3979 2649.8879 2649.8879 2653.3778 2653.3778 2656.8678 2656.8678 2660.3577 2660.3577 2663.8477 2663.8477 2667.3376 - 2620.3016 2623.7916 2623.7916 2627.2815 2627.2815 2630.7715 2632.4381 2635.9281 2635.9281 2639.418 2639.418 2642.908 2642.908 2646.3979 2646.3979 2649.8879 - 2649.8879 2653.3778 2653.3778 2656.8678 2656.8678 2660.3577 2660.3577 2663.8477 2663.8477 2667.3376 2618.5956 2622.0856 2622.0856 2625.5755 2625.5755 2629.0655 - 2631.5655 2635.0554 2635.0554 2638.5454 2638.5454 2642.0353 2642.0353 2645.5253 2645.5253 2649.0152 2649.0152 2652.5052 2656.0052 2659.4951 2659.4951 2662.9851 - 2662.9851 2666.475 2666.475 2669.965 2618.5956 2622.0856 2622.0856 2625.5755 2625.5755 2629.0655 2631.5655 2635.0554 2635.0554 2638.5454 2638.5454 2642.0353 - 2642.0353 2645.5253 2645.5253 2649.0152 2649.0152 2652.5052 2656.0052 2659.4951 2659.4951 2662.9851 2662.9851 2666.475 2666.475 2669.965 2616.8896 2620.3796 - 2620.3796 2623.8695 2623.8695 2627.3595 2630.6928 2634.1828 2634.1828 2637.6727 2637.6727 2641.1627 2641.1627 2644.6526 2644.6526 2648.1426 2648.1426 2651.6325 - 2658.6325 2662.1225 2662.1225 2665.6124 2665.6124 2669.1024 2669.1024 2672.5923 2616.8896 2620.3796 2620.3796 2623.8695 2623.8695 2627.3595 2630.6928 2634.1828 - 2634.1828 2637.6727 2637.6727 2641.1627 2641.1627 2644.6526 2644.6526 2648.1426 2648.1426 2651.6325 2658.6325 2662.1225 2662.1225 2665.6124 2665.6124 2669.1024 - 2669.1024 2672.5923 2615.1837 2618.6736 2618.6736 2622.1636 2622.1636 2625.6535 2629.8202 2633.3101 2633.3101 2636.8001 2636.8001 2640.29 2640.29 2643.78 - 2643.78 2647.2699 2647.2699 2650.7599 2661.2599 2664.7498 2664.7498 2668.2398 2668.2398 2671.7297 2671.7297 2675.2197 2610.1837 2613.6736 2613.6736 2617.1636 - 2622.1636 2625.6535 2629.8202 2633.3101 2633.3101 2636.8001 2636.8001 2640.29 2640.29 2643.78 2643.78 2647.2699 2647.2699 2650.7599 2661.2599 2664.7498 - 2664.7498 2668.2398 2668.2398 2671.7297 2671.7297 2675.2197 2608.4777 2611.9676 2611.9676 2615.4576 2620.4576 2623.9475 2628.9475 2632.4375 2632.4375 2635.9274 - 2635.9274 2639.4174 2639.4174 2642.9073 2642.9073 2646.3973 2646.3973 2649.8872 2663.8872 2667.3772 2667.3772 2670.8671 2670.8671 2674.3571 2674.3571 2677.847 - 2608.4777 2611.9676 2611.9676 2615.4576 2620.4576 2623.9475 2628.9475 2632.4375 2632.4375 2635.9274 2635.9274 2639.4174 2639.4174 2642.9073 2642.9073 2646.3973 - 2646.3973 2649.8872 2663.8872 2667.3772 2667.3772 2670.8671 2670.8671 2674.3571 2674.3571 2677.847 2606.7717 2610.2616 2610.2616 2613.7516 2618.7516 2622.2415 - 2628.0749 2631.5648 2631.5648 2635.0548 2635.0548 2638.5447 2638.5447 2642.0347 2642.0347 2645.5246 2645.5246 2649.0146 2666.5146 2670.0045 2670.0045 2673.4945 - 2673.4945 2676.9844 2676.9844 2680.4744 2606.7717 2610.2616 2610.2616 2613.7516 2618.7516 2622.2415 2628.0749 2631.5648 2631.5648 2635.0548 2635.0548 2638.5447 - 2638.5447 2642.0347 2642.0347 2645.5246 2645.5246 2649.0146 2666.5146 2670.0045 2670.0045 2673.4945 2673.4945 2676.9844 2676.9844 2680.4744 2605.0657 2608.5556 - 2608.5556 2612.0456 2617.0456 2620.5355 2627.2022 2630.6922 2630.6922 2634.1821 2634.1821 2637.6721 2637.6721 2641.162 2641.162 2644.652 2644.652 2648.1419 - 2669.1419 2672.6319 2672.6319 2676.1218 2676.1218 2679.6118 2679.6118 2683.1017 2605.0657 2608.5556 2608.5556 2612.0456 2617.0456 2620.5355 2627.2022 2630.6922 - 2630.6922 2634.1821 2634.1821 2637.6721 2637.6721 2641.162 2641.162 2644.652 2644.652 2648.1419 2669.1419 2672.6319 2672.6319 2676.1218 2676.1218 2679.6118 - 2679.6118 2683.1017 2603.3597 2606.8497 2606.8497 2610.3396 2615.3396 2618.8296 2626.3296 2629.8195 2629.8195 2633.3095 2633.3095 2636.7994 2636.7994 2640.2894 - 2640.2894 2643.7793 2643.7793 2647.2693 2671.7693 2675.2592 2675.2592 2678.7492 2678.7492 2682.2391 2682.2391 2685.7291 2603.3597 2606.8497 2606.8497 2610.3396 - 2615.3396 2618.8296 2626.3296 2629.8195 2629.8195 2633.3095 2633.3095 2636.7994 2636.7994 2640.2894 2640.2894 2643.7793 2643.7793 2647.2693 2671.7693 2675.2592 - 2675.2592 2678.7492 2678.7492 2682.2391 2682.2391 2685.7291 2601.6537 2605.1437 2605.1437 2608.6336 2613.6336 2617.1236 2625.4569 2628.9469 2628.9469 2632.4368 - 2632.4368 2635.9268 2635.9268 2639.4167 2639.4167 2642.9067 2642.9067 2646.3966 2674.3966 2677.8866 2677.8866 2681.3765 2681.3765 2684.8665 2684.8665 2688.3564 - 2601.6537 2605.1437 2605.1437 2608.6336 2613.6336 2617.1236 2625.4569 2628.9469 2628.9469 2632.4368 2632.4368 2635.9268 2635.9268 2639.4167 2639.4167 2642.9067 - 2642.9067 2646.3966 2674.3966 2677.8866 2677.8866 2681.3765 2681.3765 2684.8665 2684.8665 2688.3564 2599.9477 2603.4377 2603.4377 2606.9276 2611.9276 2615.4176 - 2624.5843 2628.0742 2628.0742 2631.5642 2631.5642 2635.0541 2635.0541 2638.5441 2638.5441 2642.034 2642.034 2645.524 2677.024 2680.5139 2680.5139 2684.0039 - 2684.0039 2687.4938 2687.4938 2690.9838 2599.9477 2603.4377 2603.4377 2606.9276 2611.9276 2615.4176 2624.5843 2628.0742 2628.0742 2631.5642 2631.5642 2635.0541 - 2635.0541 2638.5441 2638.5441 2642.034 2642.034 2645.524 2677.024 2680.5139 2680.5139 2684.0039 2684.0039 2687.4938 2687.4938 2690.9838 2598.2418 2601.7317 - 2601.7317 2605.2217 2610.2217 2613.7116 2623.7116 2627.2015 2627.2015 2630.6915 2630.6915 2634.1814 2634.1814 2637.6714 2637.6714 2641.1613 2641.1613 2644.6513 - 2679.6513 2683.1412 2683.1412 2686.6312 2686.6312 2690.1211 2690.1211 2693.6111 2639.4337 2642.9236 2642.9236 2646.4136 2649.4136 2652.9035 2652.9035 2656.3935 - 2656.3935 2659.8834 2659.8834 2663.3734 2663.3734 2666.8633 2666.8633 2670.3533 2670.3533 2673.8432 2673.8432 2677.3332 2677.3332 2680.8231 2680.8231 2684.3131 - 2684.3131 2687.803 2638.561 2642.051 2642.051 2645.5409 2648.5409 2652.0309 2652.0309 2655.5208 2655.5208 2659.0108 2659.0108 2662.5007 2662.5007 2665.9907 - 2665.9907 2669.4806 2669.4806 2672.9706 2672.9706 2676.4605 2676.4605 2679.9504 2679.9504 2683.4404 2683.4404 2686.9303 2638.561 2642.051 2642.051 2645.5409 - 2648.5409 2652.0309 2652.0309 2655.5208 2655.5208 2659.0108 2659.0108 2662.5007 2662.5007 2665.9907 2665.9907 2669.4806 2669.4806 2672.9706 2672.9706 2676.4605 - 2676.4605 2679.9504 2679.9504 2683.4404 2683.4404 2686.9303 2637.6883 2641.1783 2641.1783 2644.6682 2647.6682 2651.1582 2651.1582 2654.6481 2654.6481 2658.1381 - 2658.1381 2661.628 2661.628 2665.118 2665.118 2668.6079 2668.6079 2672.0979 2672.0979 2675.5878 2675.5878 2679.0778 2679.0778 2682.5677 2682.5677 2686.0577 - 2637.6883 2641.1783 2641.1783 2644.6682 2647.6682 2651.1582 2651.1582 2654.6481 2654.6481 2658.1381 2658.1381 2661.628 2661.628 2665.118 2665.118 2668.6079 - 2668.6079 2672.0979 2672.0979 2675.5878 2675.5878 2679.0778 2679.0778 2682.5677 2682.5677 2686.0577 2636.8157 2640.3056 2640.3056 2643.7956 2646.7956 2650.2855 - 2650.2855 2653.7755 2653.7755 2657.2654 2657.2654 2660.7554 2660.7554 2664.2453 2664.2453 2667.7353 2667.7353 2671.2252 2671.2252 2674.7152 2674.7152 2678.2051 - 2678.2051 2681.6951 2681.6951 2685.185 2636.8157 2640.3056 2640.3056 2643.7956 2646.7956 2650.2855 2650.2855 2653.7755 2653.7755 2657.2654 2657.2654 2660.7554 - 2660.7554 2664.2453 2664.2453 2667.7353 2667.7353 2671.2252 2671.2252 2674.7152 2674.7152 2678.2051 2678.2051 2681.6951 2681.6951 2685.185 2635.943 2639.433 - 2639.433 2642.9229 2645.9229 2649.4129 2649.4129 2652.9028 2652.9028 2656.3928 2656.3928 2659.8827 2659.8827 2663.3727 2663.3727 2666.8626 2666.8626 2670.3526 - 2670.3526 2673.8425 2673.8425 2677.3325 2677.3325 2680.8224 2680.8224 2684.3124 2635.943 2639.433 2639.433 2642.9229 2642.9229 2646.4129 2649.4129 2652.9028 - 2652.9028 2656.3928 2656.3928 2659.8827 2659.8827 2663.3727 2663.3727 2666.8626 2666.8626 2670.3526 2670.3526 2673.8425 2673.8425 2677.3325 2677.3325 2680.8224 - 2680.8224 2684.3124 2635.0704 2638.5603 2638.5603 2642.0503 2642.0503 2645.5402 2648.5402 2652.0302 2652.0302 2655.5201 2655.5201 2659.0101 2659.0101 2662.5 - 2662.5 2665.99 2665.99 2669.4799 2669.4799 2672.9699 2672.9699 2676.4598 2676.4598 2679.9498 2679.9498 2683.4397 2635.0704 2638.5603 2638.5603 2642.0503 - 2642.0503 2645.5402 2648.5402 2652.0302 2652.0302 2655.5201 2655.5201 2659.0101 2659.0101 2662.5 2662.5 2665.99 2665.99 2669.4799 2669.4799 2672.9699 - 2672.9699 2676.4598 2676.4598 2679.9498 2679.9498 2683.4397 2634.1977 2637.6877 2637.6877 2641.1776 2641.1776 2644.6676 2647.6676 2651.1575 2651.1575 2654.6475 - 2654.6475 2658.1374 2658.1374 2661.6274 2661.6274 2665.1173 2665.1173 2668.6073 2668.6073 2672.0972 2672.0972 2675.5872 2675.5872 2679.0771 2679.0771 2682.5671 - 2634.1977 2637.6877 2637.6877 2641.1776 2641.1776 2644.6676 2647.6676 2651.1575 2651.1575 2654.6475 2654.6475 2658.1374 2658.1374 2661.6274 2661.6274 2665.1173 - 2665.1173 2668.6073 2668.6073 2672.0972 2672.0972 2675.5872 2675.5872 2679.0771 2679.0771 2682.5671 2633.3251 2636.815 2636.815 2640.305 2640.305 2643.7949 - 2646.7949 2650.2849 2650.2849 2653.7748 2653.7748 2657.2648 2657.2648 2660.7547 2660.7547 2664.2447 2664.2447 2667.7346 2667.7346 2671.2246 2671.2246 2674.7145 - 2674.7145 2678.2045 2678.2045 2681.6944 2633.3251 2636.815 2636.815 2640.305 2640.305 2643.7949 2646.7949 2650.2849 2650.2849 2653.7748 2653.7748 2657.2648 - 2657.2648 2660.7547 2660.7547 2664.2447 2664.2447 2667.7346 2667.7346 2671.2246 2671.2246 2674.7145 2674.7145 2678.2045 2678.2045 2681.6944 2632.4524 2635.9424 - 2635.9424 2639.4323 2639.4323 2642.9223 2645.9223 2649.4122 2649.4122 2652.9022 2652.9022 2656.3921 2656.3921 2659.8821 2659.8821 2663.372 2663.372 2666.862 - 2666.862 2670.3519 2670.3519 2673.8419 2673.8419 2677.3318 2677.3318 2680.8218 2635.4524 2638.9424 2638.9424 2642.4323 2642.4323 2645.9223 2645.9223 2649.4122 - 2649.4122 2652.9022 2652.9022 2656.3921 2656.3921 2659.8821 2659.8821 2663.372 2663.372 2666.862 2666.862 2670.3519 2670.3519 2673.8419 2673.8419 2677.3318 - 2677.3318 2680.8218 2634.5798 2638.0697 2638.0697 2641.5597 2641.5597 2645.0496 2645.0496 2648.5396 2648.5396 2652.0295 2652.0295 2655.5195 2655.5195 2659.0094 - 2659.0094 2662.4994 2662.4994 2665.9893 2665.9893 2669.4793 2669.4793 2672.9692 2672.9692 2676.4592 2676.4592 2679.9491 2634.5798 2638.0697 2638.0697 2641.5597 - 2641.5597 2645.0496 2645.0496 2648.5396 2648.5396 2652.0295 2652.0295 2655.5195 2655.5195 2659.0094 2659.0094 2662.4994 2662.4994 2665.9893 2665.9893 2669.4793 - 2669.4793 2672.9692 2672.9692 2676.4592 2676.4592 2679.9491 2633.7071 2637.1971 2637.1971 2640.687 2640.687 2644.177 2644.177 2647.6669 2647.6669 2651.1569 - 2651.1569 2654.6468 2654.6468 2658.1368 2658.1368 2661.6267 2661.6267 2665.1167 2665.1167 2668.6066 2668.6066 2672.0966 2672.0966 2675.5865 2675.5865 2679.0765 - 2633.7071 2637.1971 2637.1971 2640.687 2640.687 2644.177 2644.177 2647.6669 2647.6669 2651.1569 2651.1569 2654.6468 2654.6468 2658.1368 2658.1368 2661.6267 - 2661.6267 2665.1167 2665.1167 2668.6066 2668.6066 2672.0966 2672.0966 2675.5865 2675.5865 2679.0765 2632.0011 2635.4911 2635.4911 2638.981 2638.981 2642.471 - 2643.3043 2646.7943 2646.7943 2650.2842 2650.2842 2653.7742 2653.7742 2657.2641 2657.2641 2660.7541 2660.7541 2664.244 2664.244 2667.734 2667.734 2671.2239 - 2671.2239 2674.7139 2674.7139 2678.2038 2632.0011 2635.4911 2635.4911 2638.981 2638.981 2642.471 2643.3043 2646.7943 2646.7943 2650.2842 2650.2842 2653.7742 - 2653.7742 2657.2641 2657.2641 2660.7541 2660.7541 2664.244 2664.244 2667.734 2667.734 2671.2239 2671.2239 2674.7139 2674.7139 2678.2038 2630.2951 2633.7851 - 2633.7851 2637.275 2637.275 2640.765 2642.4317 2645.9216 2645.9216 2649.4116 2649.4116 2652.9015 2652.9015 2656.3915 2656.3915 2659.8814 2659.8814 2663.3714 - 2663.3714 2666.8613 2666.8613 2670.3513 2670.3513 2673.8412 2673.8412 2677.3312 2630.2951 2633.7851 2633.7851 2637.275 2637.275 2640.765 2642.4317 2645.9216 - 2645.9216 2649.4116 2649.4116 2652.9015 2652.9015 2656.3915 2656.3915 2659.8814 2659.8814 2663.3714 2663.3714 2666.8613 2666.8613 2670.3513 2670.3513 2673.8412 - 2673.8412 2677.3312 2628.5892 2632.0791 2632.0791 2635.5691 2635.5691 2639.059 2641.559 2645.049 2645.049 2648.5389 2648.5389 2652.0289 2652.0289 2655.5188 - 2655.5188 2659.0088 2659.0088 2662.4987 2665.9987 2669.4887 2669.4887 2672.9786 2672.9786 2676.4686 2676.4686 2679.9585 2628.5892 2632.0791 2632.0791 2635.5691 - 2635.5691 2639.059 2641.559 2645.049 2645.049 2648.5389 2648.5389 2652.0289 2652.0289 2655.5188 2655.5188 2659.0088 2659.0088 2662.4987 2665.9987 2669.4887 - 2669.4887 2672.9786 2672.9786 2676.4686 2676.4686 2679.9585 2626.8832 2630.3731 2630.3731 2633.8631 2633.8631 2637.353 2640.6864 2644.1763 2644.1763 2647.6663 - 2647.6663 2651.1562 2651.1562 2654.6462 2654.6462 2658.1361 2658.1361 2661.6261 2668.6261 2672.116 2672.116 2675.606 2675.606 2679.0959 2679.0959 2682.5859 - 2626.8832 2630.3731 2630.3731 2633.8631 2633.8631 2637.353 2640.6864 2644.1763 2644.1763 2647.6663 2647.6663 2651.1562 2651.1562 2654.6462 2654.6462 2658.1361 - 2658.1361 2661.6261 2668.6261 2672.116 2672.116 2675.606 2675.606 2679.0959 2679.0959 2682.5859 2625.1772 2628.6671 2628.6671 2632.1571 2632.1571 2635.647 - 2639.8137 2643.3037 2643.3037 2646.7936 2646.7936 2650.2836 2650.2836 2653.7735 2653.7735 2657.2635 2657.2635 2660.7534 2671.2534 2674.7434 2674.7434 2678.2333 - 2678.2333 2681.7232 2681.7232 2685.2132 2620.1772 2623.6671 2623.6671 2627.1571 2632.1571 2635.647 2639.8137 2643.3037 2643.3037 2646.7936 2646.7936 2650.2836 - 2650.2836 2653.7735 2653.7735 2657.2635 2657.2635 2660.7534 2671.2534 2674.7434 2674.7434 2678.2333 2678.2333 2681.7232 2681.7232 2685.2132 2618.4712 2621.9611 - 2621.9611 2625.4511 2630.4511 2633.941 2638.941 2642.431 2642.431 2645.9209 2645.9209 2649.4109 2649.4109 2652.9008 2652.9008 2656.3908 2656.3908 2659.8807 - 2673.8807 2677.3707 2677.3707 2680.8606 2680.8606 2684.3506 2684.3506 2687.8405 2618.4712 2621.9611 2621.9611 2625.4511 2630.4511 2633.941 2638.941 2642.431 - 2642.431 2645.9209 2645.9209 2649.4109 2649.4109 2652.9008 2652.9008 2656.3908 2656.3908 2659.8807 2673.8807 2677.3707 2677.3707 2680.8606 2680.8606 2684.3506 - 2684.3506 2687.8405 2616.7652 2620.2552 2620.2552 2623.7451 2628.7451 2632.2351 2638.0684 2641.5583 2641.5583 2645.0483 2645.0483 2648.5382 2648.5382 2652.0282 - 2652.0282 2655.5181 2655.5181 2659.0081 2676.5081 2679.998 2679.998 2683.488 2683.488 2686.9779 2686.9779 2690.4679 2616.7652 2620.2552 2620.2552 2623.7451 - 2628.7451 2632.2351 2638.0684 2641.5583 2641.5583 2645.0483 2645.0483 2648.5382 2648.5382 2652.0282 2652.0282 2655.5181 2655.5181 2659.0081 2676.5081 2679.998 - 2679.998 2683.488 2683.488 2686.9779 2686.9779 2690.4679 2615.0592 2618.5492 2618.5492 2622.0391 2627.0391 2630.5291 2637.1957 2640.6857 2640.6857 2644.1756 - 2644.1756 2647.6656 2647.6656 2651.1555 2651.1555 2654.6455 2654.6455 2658.1354 2679.1354 2682.6254 2682.6254 2686.1153 2686.1153 2689.6053 2689.6053 2693.0952 - 2615.0592 2618.5492 2618.5492 2622.0391 2627.0391 2630.5291 2637.1957 2640.6857 2640.6857 2644.1756 2644.1756 2647.6656 2647.6656 2651.1555 2651.1555 2654.6455 - 2654.6455 2658.1354 2679.1354 2682.6254 2682.6254 2686.1153 2686.1153 2689.6053 2689.6053 2693.0952 2613.3532 2616.8432 2616.8432 2620.3331 2625.3331 2628.8231 - 2636.3231 2639.813 2639.813 2643.303 2643.303 2646.7929 2646.7929 2650.2829 2650.2829 2653.7728 2653.7728 2657.2628 2681.7628 2685.2527 2685.2527 2688.7427 - 2688.7427 2692.2326 2692.2326 2695.7226 2613.3532 2616.8432 2616.8432 2620.3331 2625.3331 2628.8231 2636.3231 2639.813 2639.813 2643.303 2643.303 2646.7929 - 2646.7929 2650.2829 2650.2829 2653.7728 2653.7728 2657.2628 2681.7628 2685.2527 2685.2527 2688.7427 2688.7427 2692.2326 2692.2326 2695.7226 2611.6473 2615.1372 - 2615.1372 2618.6272 2623.6272 2627.1171 2635.4504 2638.9404 2638.9404 2642.4303 2642.4303 2645.9203 2645.9203 2649.4102 2649.4102 2652.9002 2652.9002 2656.3901 - 2684.3901 2687.8801 2687.8801 2691.37 2691.37 2694.86 2694.86 2698.3499 2611.6473 2615.1372 2615.1372 2618.6272 2623.6272 2627.1171 2635.4504 2638.9404 - 2638.9404 2642.4303 2642.4303 2645.9203 2645.9203 2649.4102 2649.4102 2652.9002 2652.9002 2656.3901 2684.3901 2687.8801 2687.8801 2691.37 2691.37 2694.86 - 2694.86 2698.3499 2609.9413 2613.4312 2613.4312 2616.9212 2621.9212 2625.4111 2634.5778 2638.0677 2638.0677 2641.5577 2641.5577 2645.0476 2645.0476 2648.5376 - 2648.5376 2652.0275 2652.0275 2655.5175 2687.0175 2690.5074 2690.5074 2693.9974 2693.9974 2697.4873 2697.4873 2700.9773 2609.9413 2613.4312 2613.4312 2616.9212 - 2621.9212 2625.4111 2634.5778 2638.0677 2638.0677 2641.5577 2641.5577 2645.0476 2645.0476 2648.5376 2648.5376 2652.0275 2652.0275 2655.5175 2687.0175 2690.5074 - 2690.5074 2693.9974 2693.9974 2697.4873 2697.4873 2700.9773 2608.2353 2611.7252 2611.7252 2615.2152 2620.2152 2623.7051 2633.7051 2637.1951 2637.1951 2640.685 - 2640.685 2644.175 2644.175 2647.6649 2647.6649 2651.1549 2651.1549 2654.6448 2689.6448 2693.1348 2693.1348 2696.6247 2696.6247 2700.1147 2700.1147 2703.6046 / - - -ACTNUM - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 / - - -FLUXNUM - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 / - - -PORO - 0.31330001 0.32229999 0.33989999 0.30829999 0.28279999 0.27919999 0.2563 0.25659999 0.2687 0.2807 0.27669999 0.2757 0.2881 0.30840001 0.31990001 0.32210001 - 0.31400001 0.2949 0.28310001 0.27169999 0.28670001 0.2913 0.2739 0.278 0.2861 0.26730001 0.29260001 0.31439999 0.33180001 0.3371 0.3053 0.3055 - 0.333 0.3242 0.31290001 0.2793 0.27059999 0.2538 0.28819999 0.317 0.31009999 0.33489999 0.33399999 0.30720001 0.29609999 0.3037 0.29589999 0.31310001 - 0.28920001 0.2651 0.2793 0.30199999 0.29730001 0.30599999 0.32820001 0.34720001 0.32910001 0.33090001 0.31619999 0.3017 0.31569999 0.30329999 0.2904 0.29589999 - 0.29699999 0.3017 0.32659999 0.33489999 0.34740001 0.3497 0.33469999 0.31200001 0.30559999 0.32960001 0.31200001 0.28850001 0.2897 0.31810001 0.294 0.2994 - 0.3231 0.33739999 0.34979999 0.3477 0.32249999 0.32699999 0.32769999 0.2872 0.28369999 0.3184 0.33160001 0.27759999 0.29980001 0.3019 0.33230001 0.34259999 - 0.33289999 0.3301 0.33379999 0.30070001 0.3089 0.2911 0.30019999 0.30610001 0.26069999 0.3087 0.32730001 0.32710001 0.32030001 0.3414 0.34549999 0.33539999 - 0.31549999 0.30880001 0.2859 0.3071 0.34549999 0.27869999 0.29249999 0.29190001 0.32260001 0.3161 0.3335 0.33790001 0.3378 0.3229 0.30070001 0.3118 - 0.31099999 0.3382 0.30230001 0.2931 0.30469999 0.32339999 0.33500001 0.31920001 0.30180001 0.3159 0.31490001 0.31810001 0.31040001 0.28209999 0.29179999 0.33430001 - 0.31760001 0.34060001 0.345 0.32319999 0.30239999 0.2755 0.29440001 0.3044 0.2757 0.27340001 0.26570001 0.26859999 0.32350001 0.3328 0.32879999 0.2976 - 0.28189999 0.24869999 0.2427 0.2554 0.25920001 0.25870001 0.24420001 0.28029999 0.26890001 0.30419999 0.31169999 0.3154 0.30970001 0.3001 0.2595 0.25279999 - 0.2543 0.243 0.2543 0.26640001 0.26339999 0.2728 0.3321 0.3105 0.31060001 0.3127 0.28549999 0.2753 0.2572 0.25459999 0.26370001 0.2482 - 0.27379999 0.28760001 0.2868 0.3258 0.3339 0.3132 0.29159999 0.2823 0.2599 0.2507 0.25470001 0.2439 0.2753 0.30270001 0.3163 0.29080001 - 0.3089 0.3335 0.33410001 0.29210001 0.2773 0.26800001 0.25580001 0.25639999 0.2586 0.28929999 0.3012 0.29319999 0.31619999 0.32519999 0.3251 0.31810001 - 0.3184 0.27869999 0.26750001 0.2586 0.26019999 0.25549999 0.2448 0.29100001 0.31200001 0.2841 0.3116 0.32949999 0.30809999 0.3204 0.28889999 0.25470001 - 0.2342 0.2462 0.25510001 0.27180001 0.29699999 0.3276 0.30930001 0.26089999 0.26930001 0.30219999 0.3161 0.28889999 0.29339999 0.2483 0.25729999 0.27520001 - 0.29190001 0.31779999 0.3321 0.3073 0.23280001 0.26550001 0.285 0.2899 0.28380001 0.28639999 0.2789 0.2974 0.3019 0.3222 0.32789999 0.31150001 - 0.30129999 0.2334 0.2375 0.23909999 0.26879999 0.2811 0.27829999 0.2692 0.292 0.2816 0.32069999 0.31869999 0.32460001 0.31029999 0.10636 0.1078 - 0.11068 0.10568 0 0 0 0 0 0 0 0 0 0.10748 0.1058 0.11296 0.10876 0.10408 - 0 0 0 0 0 0 0 0 0.10816 0.10744 0.1016 0 0 0 0 0 - 0 0 0 0 0 0.10596 0 0 0.1006 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0.10324 0 0 0 0.10268 0 0 0.10092 0.10256 0.10796 - 0.1098 0.11596 0.10796 0.11096 0.10628 0.1086 0.11516 0.11544 0.10752 0.10652 0.10976 0.10972 0.10584 0.11196 0.11068 0.11096 - 0.11676 0.11644 0.11556 0.12268 0.1226 0.11808 0.1122 0.11944 0.11768 0.11768 0.11612 0.11592 0.12104 0.12304 0.12552001 0.1234 - 0.12324 0.13023999 0.12352 0.11748 0.11264 0.12332 0.12564 0.11152 0.10996 0.11888 0.12536 0.12892 0.12707999 0.12872 0.1304 0.12972 - 0.12928 0.12724 0.1218 0.12775999 0.1312 0.1224 0.12268 0.13631999 0.13412 0.13147999 0.12552001 0.13079999 0.12936001 0.13072 0.1224 0.12304 - 0.13256 0.12676001 0.11436 0.12831999 0.1424 0.12831999 0.12336 0.12136 0.12376 0.12868001 0.12332 0.12204 0.12084 0.13924 0.14136 0.13060001 - 0.1328 0.13416 0.1224 0.12088 0.12348 0.12228 0.13004 0.13084 0.12824 0.11952 0.14448 0.13772 0.13732 0.13451999 0.13352001 0 - 0 0 0.11832 0.12936001 0.1274 0.11504 0.11432 0.14448 0.14015999 0.13072 0.1312 0.12912001 0 0 0 0.11568 - 0.124 0.12048 0.11896 0.11676 0.14448 0.13891999 0.13500001 0.13168 0.12264 0.11568 0 0.11868 0.12627999 0.12024 0.1096 0.11836 - 0.11512 0.14448 0.14040001 0.13416 0.13332 0.13276 0.12695999 0.12312 0.1238 0.12448 0.11956 0.11352 0.1156 0.11144 0.1432 0.13668001 - 0.12775999 0.12756 0.13104001 0.12515999 0.12627999 0.12583999 0.12176 0.12527999 0.123 0.11616 0.1202 0.13112 0.12620001 0.12032 0.1192 0.12016 - 0.12164 0.12544 0.12252 0.12276 0.1222 0.11856 0.12248 0.12216 0.12236 0.11252 0.11336 0.11452 0.12308 0.1234 0.12412 0.12540001 - 0.12620001 0.1248 0.11916 0.12604 0.12096 0.12408 0.12012 0.1166 0.11716 0.11808 0.1156 0.12264 0.1244 0.12532 0.12384 0.11904 - 0.12540001 0.13032 0.11724 0.11748 0.11076 0.11668 0.12128 0.12588 0.12556 0.13088 0.13271999 0.12936001 0.12488 0.13044 0.13828 0.1238 - 0.11832 0.11052 0.11528 0.1152 0.11504 0.11724 0.1274 0.13424 0.12992001 0.12876 0.12896 0.14343999 0.2331 0.2412 0.23019999 0.2396 - 0.2499 0.25350001 0.25659999 0.24770001 0.23289999 0.22930001 0.2227 0.2086 0.20649999 0.24089999 0.2414 0.24690001 0.25470001 0.257 0.2624 0.25830001 - 0.2525 0.25260001 0.2422 0.2473 0.2221 0.2156 0.24250001 0.23729999 0.2342 0.2403 0.25799999 0.26199999 0.25650001 0.2626 0.26629999 0.27540001 - 0.2606 0.2405 0.2316 0.248 0.24420001 0.24950001 0.25619999 0.25119999 0.2456 0.259 0.26640001 0.2685 0.26930001 0.26280001 0.2534 0.24789999 - 0.2422 0.2474 0.25510001 0.25400001 0.24879999 0.26429999 0.25909999 0.2735 0.27410001 0.25229999 0.25350001 0.26100001 0.2525 0.244 0.24330001 0.2441 - 0.2445 0.25029999 0.2543 0.25409999 0.2502 0.259 0.25600001 0.2624 0.2674 0.26050001 0.2498 0.2579 0.2658 0.2642 0.26409999 0.24879999 - 0.259 0.248 0.2674 0.273 0.27759999 0.2739 0.25960001 0.257 0.2588 0.26109999 0.2676 0.26629999 0.26890001 0.25549999 0.25870001 0.2606 - 0.27059999 0.2674 0.25560001 0.23999999 0.2545 0.2552 0.2595 0.27520001 0.2958 0.2811 0.25850001 0.24950001 0.2463 0.2454 0.2419 0.2534 - 0.2481 0.27309999 0.2705 0.28209999 0.28060001 0.29629999 0.28619999 0.29010001 0.26480001 0.25560001 0.2422 0.25659999 0.24969999 0.25040001 0.26910001 0.2863 - 0.28690001 0.28889999 0.26069999 0.29800001 0.2879 0.26190001 0.25760001 0.2516 0.25799999 0.25389999 0.25600001 0.28639999 0.3247 0.27129999 0.27039999 0.2744 - 0.26640001 0.27669999 0.26530001 0.24429999 0.25130001 0.25979999 0.2588 0.26339999 0.28850001 0.30289999 0.2827 0.27039999 0.25400001 0.2427 0.26100001 0.26190001 - 0.2518 0.2669 0.25670001 0.25529999 0.26719999 0.2834 0.27540001 0.26499999 0.2798 0.2678 0.2563 0.2516 0.26199999 0.26190001 0.25839999 0.25600001 - 0.25279999 0.2502 0.27669999 0.27379999 0.26629999 0.257 0.25940001 0.26359999 0.26199999 0.26339999 0.25529999 0.25170001 0.24519999 0.2536 0.25940001 0.27320001 - 0.2568 0.25560001 0.2403 0.25029999 0.2631 0.26910001 0.26969999 0.26359999 0.26089999 0.25850001 0.24529999 0.25940001 0.2465 0.2332 0.25220001 0.2554 - 0.26879999 0.2685 0.2599 0.257 0.2642 0.25780001 0.2538 0.2394 0.25479999 0.23010001 0.234 0.2502 0.2422 0.24240001 0.2527 0.2536 - 0.25799999 0.2678 0.25240001 0.25350001 0.24240001 0.25369999 0.2165 0.2246 0.2212 0.2281 0.2325 0.25229999 0.25510001 0.25569999 0.2696 0.27590001 - 0.25459999 0.2439 0.2362 0.22130001 0.2221 0.22660001 0.2298 0.23029999 0.24699999 0.24869999 0.25639999 0.26269999 0.2746 0.26249999 0.2376 0.23720001 - 0.21179999 0.21619999 0.2247 0.2313 0.25330001 0.2554 0.2484 0.25709999 0.27959999 0.29960001 0.25569999 0.24429999 0.2448 0.2246 0.2289 0.23360001 - 0.235 0.25029999 0.2606 0.25389999 0.26660001 0.2615 0.26050001 0.25150001 0.2447 0.2483 0.26050001 0.26480001 0.2647 0.27219999 0.27340001 0.2737 - 0.2755 0.27110001 0.26350001 0.26890001 0.2615 0.25749999 0.25310001 0.25749999 0.26120001 0.26269999 0.2687 0.27919999 0.28049999 0.28299999 0.28979999 0.28310001 - 0.27739999 0.2746 0.27990001 0.2809 0.26350001 0.26629999 0.26190001 0.26210001 0.2766 0.27720001 0.28209999 0.2929 0.29409999 0.30559999 0.30320001 0.30070001 - 0.2782 0.26750001 0.27219999 0.2726 0.27520001 0.27169999 0.27829999 0.27520001 0.27970001 0.3057 0.31189999 0.29809999 0.28799999 0.285 0.27700001 0.2744 - 0.26949999 0.27410001 0.2852 0.29570001 0.28330001 0.2906 0.3008 0.3001 0.2933 0.28999999 0.2802 0.3001 0.28909999 0.2911 0.3046 0.30419999 - 0.31670001 0.31029999 0.30500001 0.31 0.29910001 0.29879999 0.2834 0.2897 0.27970001 0.2859 0.3026 0.31459999 0.30450001 0.29960001 0.3107 0.30590001 - 0.2924 0.3001 0.30630001 0.28380001 0.2886 0.28290001 0.28369999 0.28929999 0.30140001 0.29370001 0.29530001 0.30430001 0.29210001 0.29350001 0.28439999 0.29910001 - 0.2942 0.2994 0.2701 0.27239999 0.28560001 0.29390001 0.2897 0.28189999 0.2881 0.29449999 0.28349999 0.27110001 0.27970001 0.2832 0.2834 0.2755 - 0.2739 0.27039999 0.28749999 0.3001 0.27770001 0.2694 0.27990001 0.28760001 0.2714 0.27219999 0.2638 0.28209999 0.27689999 0.29809999 0.27559999 0.28299999 - 0.28259999 0.26980001 0.27250001 0.27289999 0.2753 0.2595 0.2572 0.25299999 0.25709999 0.2656 0.2762 0.2728 0.26859999 0.26199999 0.26609999 0.26409999 - 0.2791 0.2782 0.2802 0.2561 0.2422 0.24779999 0.2647 0.25490001 0.26140001 0.26100001 0.25260001 0.25780001 0.26550001 0.25850001 0.27020001 0.2667 - 0.26069999 0.24680001 0.2491 0.24770001 0.2421 0.252 0.2412 0.2359 0.2306 0.23909999 0.2484 0.2529 0.25479999 0.26120001 0.24510001 0.23800001 - 0.25670001 0.2412 0.24070001 0.23459999 0.22229999 0.2287 0.2353 0.23360001 0.2246 0.23819999 0.2378 0.23549999 0.2261 0.2291 0.2405 0.2181 - 0.21780001 0.22400001 0.2247 0.2129 0.22409999 0.22220001 0.2279 0.23469999 0.2282 0.2368 0.23019999 0.2263 0.22149999 0.2089 0.2212 0.2274 - 0.2316 0.2264 0.2291 0.2316 0.23019999 0.2392 0.2376 0.2174 0.20999999 0.2114 0.22409999 0.234 0.234 0.236 0.2332 0.237 - 0.2377 0.228 0.23810001 0.2413 0.2353 0.2183 0.21170001 0.2378 0.2402 0.2466 0.24240001 0.24250001 0.25060001 0.2341 0.2325 0.2335 - 0.2286 0.22499999 0.2207 0.22660001 0.2342 0.25 0.25170001 0.2393 0.2485 0.2369 0.24150001 0.25220001 0.2325 0.2377 0.2217 0.2228 - 0.22840001 0.233 0.2529 0.2411 0.23999999 0.24150001 0.2225 0.2192 0.2235 0.2321 0.24510001 0.2384 0.2413 0.2318 0.2254 0.23270001 - 0.21600001 0.23360001 0.2263 0.2299 0.2227 0.23270001 0.2369 0.2462 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0.26320001 0.26789999 0.2726 0.27810001 0.27399999 0.27419999 0.27419999 0.27169999 0.25139999 0.22750001 - 0.2227 0.221 0.20990001 0.2721 0.28080001 0.28490001 0.28619999 0.28049999 0.27939999 0.27219999 0.26980001 0.25850001 0.24439999 0.2344 0.23720001 0.2142 - 0.28029999 0.28029999 0.28310001 0.28439999 0.28060001 0.28369999 0.27250001 0.25690001 0.248 0.2464 0.24079999 0.23909999 0.221 0.28009999 0.27250001 0.28290001 - 0.28600001 0.26769999 0.27379999 0.26390001 0.2509 0.2439 0.2473 0.243 0.2343 0.21780001 0.26949999 0.27239999 0.27039999 0.26589999 0.26629999 0.26249999 - 0.2586 0.25490001 0.2463 0.241 0.241 0.2279 0.2253 0.27950001 0.27939999 0.26449999 0.26190001 0.26140001 0.26350001 0.25999999 0.25830001 0.2419 - 0.236 0.2362 0.23549999 0.2309 0.2624 0.25830001 0.2572 0.25529999 0.26230001 0.27180001 0.26519999 0.25479999 0.2543 0.2313 0.2321 0.2332 - 0.2343 0.25670001 0.25830001 0.2626 0.2719 0.27779999 0.29080001 0.27239999 0.26660001 0.26840001 0.25170001 0.25150001 0.23800001 0.24240001 0.2341 0.2509 - 0.26840001 0.2721 0.25830001 0.2746 0.27509999 0.27379999 0.2631 0.2597 0.26679999 0.25209999 0.25150001 0.243 0.2606 0.26539999 0.26679999 0.278 - 0.2746 0.27559999 0.26930001 0.266 0.26249999 0.2687 0.2669 0.2568 0.2376 0.25569999 0.27000001 0.2694 0.26530001 0.26820001 0.27239999 0.27759999 - 0.27340001 0.2757 0.28299999 0.27309999 0.30019999 0.24150001 0.25470001 0.26550001 0.26890001 0.2665 0.2687 0.26570001 0.2683 0.27399999 0.27129999 0.2746 - 0.27039999 0.2814 0.25060001 0.25870001 0.25560001 0.2586 0.26159999 0.25529999 0.2649 0.2552 0.26969999 0.26550001 0.2665 0.2638 0.2651 0.25040001 - 0.25909999 0.2579 0.25350001 0.25170001 0.2511 0.26289999 0.266 0.2638 0.25780001 0.2516 0.25229999 0.25709999 0.26010001 0.26140001 0.26969999 0.2581 - 0.245 0.2429 0.2615 0.2559 0.2633 0.25659999 0.2436 0.24959999 0.25229999 0.26269999 0.26539999 0.257 0.2543 0.2403 0.244 0.2483 - 0.2552 0.25650001 0.26190001 0.26179999 0.24150001 0.24770001 0.255 0.2721 0.2624 0.25920001 0.244 0.25080001 0.25400001 0.26550001 0.26609999 0.26199999 - 0.2613 0.27020001 0.28529999 0.25839999 0.26480001 0.26589999 0.2545 0.2649 0.2604 0.25459999 0.2559 0.25440001 0.2631 0.26199999 0.2719 0.28799999 - 0.26199999 0.2561 0.25799999 0.24779999 0.25009999 0.2499 0.25009999 0.24770001 0.25029999 0.26519999 0.2714 0.26800001 0.2775 0.26640001 0.26199999 0.2552 - 0.23720001 0.2466 0.2463 0.2441 0.2411 0.25139999 0.25889999 0.27079999 0.27919999 0.27289999 0.26190001 0.25529999 0.25409999 0.2449 0.23909999 0.24519999 - 0.24070001 0.2313 0.2404 0.25299999 0.2626 0.2579 0.25999999 0.2493 0.25389999 0.2538 0.24879999 0.24079999 0.2446 0.2403 0.2298 0.22920001 - 0.24510001 0.2502 0.23989999 0.2418 0.2316 0.2412 0.2484 0.24590001 0.24510001 0.2498 0.25440001 0.24699999 0.24950001 0.242 0.25369999 0.24510001 - 0.2458 0.2412 0.2404 0.2379 0.2472 0.2396 0.2484 0.2447 0.25319999 0.25569999 0.2502 0.2577 0.24510001 0.2455 0.2394 0.24079999 - 0.2395 0.23649999 0.25220001 0.24439999 0.2597 0.25999999 0.26499999 0.26140001 0.2626 0.25440001 0.2396 0.2401 0.25009999 0.2456 0.24259999 0.24770001 - 0.24590001 0.25459999 0.27309999 0.26730001 0.2798 0.27970001 0.2705 0.25690001 0.25619999 0.25709999 0.25409999 0.24969999 0.242 0.2483 0.24959999 0.26480001 - 0.25389999 0.28580001 0.28470001 0.27320001 0.27110001 0.26460001 0.25999999 0.2656 0.2606 0.2456 0.24879999 0.2411 0.248 0.2438 0.2597 0.2615 - 0.26719999 0.25670001 0.25 0.26019999 0.27110001 0.26879999 0.26899999 0.264 0.23810001 0.23630001 0.23649999 0.2485 0.25049999 0.26089999 0.26570001 0.2529 - 0.26320001 0.28310001 0.27849999 0.27200001 0.25330001 0.2536 0.25060001 0.2511 0.257 0.25490001 0.2536 0.255 0.2296 0.25940001 0.27810001 0.30509999 - 0.26480001 0.26269999 0.2604 0.24699999 0.24959999 0.2561 0.2516 0.25170001 0.25080001 0.2291 0.26230001 0.2872 0.29210001 0.28619999 0.2676 0.26550001 - 0.26910001 0.25889999 0.25799999 0.2723 0.25529999 0.25009999 0.2374 0.25310001 0.2744 0.28200001 0.27020001 0.2807 0.2624 0.2633 0.25619999 0.26280001 - 0.2588 0.25350001 0.27070001 0.2413 0.25299999 0.26390001 0.27450001 0.2622 0.2649 0.2608 0.25409999 0.25400001 0.26109999 0.2685 0.26440001 0.259 - 0.22840001 0.244 0.2669 0.27250001 0.2613 0.25760001 0.2489 0.25049999 0.25909999 0.2633 0.264 0.25420001 0.2518 0.22660001 0.2419 0.2518 - 0.26300001 0.25830001 0.26230001 0.26320001 0.24779999 0.241 0.25889999 0.2563 0.25299999 0.25310001 0.234 0.2463 0.26409999 0.2617 0.25229999 0.26199999 - 0.26910001 0.2581 0.255 0.25040001 0.2476 0.25060001 0.25749999 0.23360001 0.24330001 0.26730001 0.26120001 0.25670001 0.25929999 0.26089999 0.2552 0.25819999 - 0.25170001 0.2437 0.24779999 0.26069999 0.2396 0.2385 0.2552 0.2572 0.26629999 0.26930001 0.2782 0.2613 0.25729999 0.2563 0.2458 0.25189999 - 0.26440001 0.2509 0.25690001 0.27469999 0.25760001 0.257 0.2674 0.27250001 0.2622 0.25760001 0.2642 0.2499 0.2458 0.26480001 0.25920001 0.26539999 - 0.26339999 0.27160001 0.2631 0.25650001 0.25870001 0.2491 0.25099999 0.25260001 0.25510001 0.245 0.2472 0.25529999 0.25659999 0.26370001 0.26409999 0.26350001 - 0.25940001 0.25139999 0.25470001 0.25170001 0.2445 0.2438 0.25260001 0.2454 0.25040001 0.25830001 0.2552 0.25960001 0.2559 0.25709999 0.25729999 0.2577 - 0.23810001 0.2421 0.23199999 0.2446 0.2485 0.2474 0.2457 0.245 0.2608 0.2554 0.25780001 0.26359999 0.25659999 0.2462 0.2359 0.2359 - 0.24339999 0.2429 0.2421 0.2472 0.24510001 0.2482 0.25170001 0.26100001 0.26859999 0.26989999 0.25889999 0.2543 0.2441 0.25040001 0.25130001 0.2559 - 0.25 0.24519999 0.2525 0.25510001 0.259 0.2669 0.26910001 0.27090001 0.26249999 0.25799999 0.2529 0.25220001 0.25189999 0.248 0.25279999 0.2624 - 0.25670001 0.2588 0.26710001 0.26910001 0.26609999 0.26910001 0.26519999 0.26069999 0.2552 0.2455 0.25209999 0.25889999 0.2588 0.2554 0.25979999 0.26120001 - 0.27630001 0.27489999 0.27849999 0.27419999 0.2599 0.25619999 0.2462 0.2481 0.25960001 0.25690001 0.26550001 0.2692 0.2658 0.26320001 0.2647 0.27289999 - 0.26589999 0.2604 0.25639999 0.2448 0.25319999 0.2586 0.2651 0.2665 0.2701 0.2599 0.25409999 0.25299999 0.26859999 0.26719999 0.26159999 0.2674 - 0.2438 0.25330001 0.2475 0.2658 0.26249999 0.2647 0.25740001 0.25830001 0.2493 0.2561 0.2626 0.26719999 0.26190001 0.26100001 0.2536 0.2449 - 0.25940001 0.26289999 0.26190001 0.2615 0.2563 0.25740001 0.2599 0.2613 0.26820001 0.25940001 0.26030001 0.2493 0.24779999 0.24869999 0.25920001 0.25749999 - 0.2534 0.25459999 0.2694 0.26190001 0.2638 0.2746 0.26280001 0.2615 0.25409999 0.2502 0.2462 0.2173 0.249 0.25740001 0.2658 0.26750001 - 0.26859999 0.27039999 0.25909999 0.2755 0.2719 0.26280001 0.26570001 0.2482 0.24860001 0.25080001 0.25729999 0.2638 0.26629999 0.2771 0.2757 0.2802 - 0.28740001 0.273 0.2721 0.2676 0.26719999 0.25889999 0.2626 0.26530001 0.26989999 0.27950001 0.2771 0.2836 0.28119999 0.29440001 0.27309999 0.27430001 - 0.28349999 0.27500001 0.27309999 0.27110001 0.27360001 0.27090001 0.28310001 0.2845 0.28510001 0.28650001 0.2802 0.2705 0.27559999 0.2827 0.2841 0.2818 - 0.2811 0.2771 0.2811 0.27900001 0.27469999 0.28479999 0.2791 0.28459999 0.27419999 0.27559999 0.27880001 0.2834 0.28029999 0.27700001 0.28169999 0.28150001 - 0.28060001 0.2843 0.2886 0.28619999 0.27779999 0.27770001 0.27689999 0.2737 0.28439999 0.2807 0.27399999 0.27489999 0.28659999 0.2859 0.2825 0.28850001 - 0.28889999 0.28369999 0.28330001 0.28169999 0.27790001 0.27959999 0.27610001 0.2701 0.2669 0.2854 0.28310001 0.2886 0.29190001 0.2913 0.2924 0.28169999 - 0.26809999 0.27320001 0.27559999 0.27860001 0.27430001 0.2667 0.26820001 0.2678 0.28169999 0.2881 0.2956 0.2938 0.2791 0.2617 0.25690001 0.26019999 - 0.26899999 0.26980001 0.26370001 0.26100001 0.26019999 0.27630001 0.28189999 0.285 0.28119999 0.27169999 0.25780001 0.25670001 0.25459999 0.26210001 0.25690001 0.25510001 - 0.2545 0.26179999 0.26989999 0.27610001 0.28259999 0.28330001 0.25960001 0.25099999 0.24779999 0.24439999 0.24529999 0.2448 0.25560001 0.26030001 0.25549999 0.25619999 - 0.27039999 0.27200001 0.27430001 0.26390001 0.24789999 0.2494 0.24680001 0.2411 0.2516 0.249 0.25729999 0.25260001 0.26230001 0.2739 0.27579999 0.26809999 - 0.27270001 0.26140001 0.25999999 0.2696 0.27590001 0.266 0.26440001 0.26629999 0.25839999 0.2624 0.2577 0.2577 0.26820001 0.2561 0.2572 0.2626 - 0.26199999 0.287 0.2861 0.27990001 0.2753 0.27110001 0.26429999 0.25999999 0.26109999 0.26300001 0.2665 0.2613 0.2642 0.2669 0.28659999 0.2832 - 0.2836 0.27939999 0.27059999 0.26899999 0.2687 0.2638 0.2649 0.2687 0.2586 0.26719999 0.2809 0.28279999 0.29280001 0.28659999 0.2744 0.27219999 - 0.2595 0.26609999 0.26879999 0.26640001 0.2622 0.26409999 0.27489999 0.28080001 0.29539999 0.30090001 0.29010001 0.27430001 0.27059999 0.26809999 0.27250001 0.2737 - 0.2696 0.26989999 0.2728 0.26989999 0.2782 0.28479999 0.29409999 0.2895 0.27770001 0.27020001 0.26519999 0.2694 0.2739 0.26449999 0.27720001 0.2764 - 0.27790001 0.28279999 0.2784 0.28549999 0.28 0.27149999 0.26809999 0.2538 0.2608 0.27239999 0.27169999 0.27669999 0.2791 0.27970001 0.27860001 0.2827 - 0.28670001 0.28279999 0.28279999 0.26519999 0.26320001 0.26109999 0.2656 0.2766 0.2782 0.27959999 0.28060001 0.28200001 0.28510001 0.28839999 0.2895 0.28380001 - 0.2719 0.26769999 0.26499999 0.27779999 0.26449999 0.27919999 0.26879999 0.26809999 0.27430001 0.27540001 0.28150001 0.29120001 0.2827 0.2823 0.27180001 0.27520001 - 0.2762 0.28080001 0.2755 0.27939999 0.27079999 0.27469999 0.27250001 0.27959999 0.28040001 0.27079999 0.28130001 0.27250001 0.27410001 0.27790001 0.28080001 0.27739999 - 0.26899999 0.2703 0.2719 0.2766 0.27849999 0.2798 0.27469999 0.27649999 0.28490001 0.28569999 0.27849999 0.27540001 0.26289999 0.26539999 0.27450001 0.27630001 - 0.27610001 0.27520001 0.27869999 0.28659999 0.2746 0.28220001 0.28870001 0.2845 0.28009999 0.25870001 0.25299999 0.2606 0.2649 0.27320001 0.27289999 0.27599999 - 0.27829999 0.28209999 0.2814 0.29010001 0.28470001 0.278 0.271 0.26899999 0.2705 0.27559999 0.27790001 0.27590001 0.28200001 0.2809 0.2868 0.28619999 - 0.28299999 0.28479999 0.2791 0.27990001 0.28560001 0.2859 0.2942 0.28830001 0.28819999 0.28909999 0.28040001 0.29049999 0.28650001 0.2843 0.28960001 0.27579999 - 0.28580001 0.30039999 0.30410001 0.29049999 0.29820001 0.29049999 0.28299999 0.27849999 0.28080001 0.28569999 0.28529999 0.27810001 0.26109999 0.29949999 0.30419999 0.3008 - 0.30649999 0.30199999 0.294 0.2868 0.28299999 0.27720001 0.2814 0.27590001 0.27340001 0.27689999 0.30630001 0.30230001 0.28940001 0.2994 0.29350001 0.296 - 0.29159999 0.28459999 0.28780001 0.28150001 0.2807 0.28049999 0.266 0.31290001 0.30309999 0.28929999 0.28600001 0.28870001 0.30019999 0.2931 0.29440001 0.28940001 - 0.28080001 0.28560001 0.27810001 0.27379999 0.30919999 0.30289999 0.29350001 0.28569999 0.28459999 0.29550001 0.29960001 0.29710001 0.2852 0.2798 0.26890001 0.2746 - 0.27250001 0.3021 0.2987 0.2895 0.28830001 0.28600001 0.29370001 0.3017 0.30360001 0.2872 0.2863 0.27880001 0.28569999 0.2811 0.2474 0.24259999 - 0.245 0.25400001 0.242 0.2326 0.2263 0.22589999 0.2235 0.2164 0.2219 0.221 0.22 0.24779999 0.2545 0.25999999 0.24150001 0.23639999 - 0.23989999 0.2388 0.2315 0.22759999 0.23819999 0.2394 0.22679999 0.2314 0.25220001 0.2529 0.25319999 0.2414 0.2445 0.2561 0.23459999 0.24529999 - 0.2529 0.24169999 0.2446 0.2385 0.2377 0.2475 0.25400001 0.26230001 0.26280001 0.2527 0.2405 0.22830001 0.23800001 0.2438 0.2436 0.2404 - 0.2422 0.23980001 0.25920001 0.27869999 0.2723 0.2685 0.25560001 0.2449 0.24439999 0.2383 0.2339 0.2432 0.25229999 0.2518 0.2419 0.25569999 - 0.26589999 0.27419999 0.27610001 0.26660001 0.25119999 0.2397 0.2305 0.2358 0.2509 0.2586 0.2449 0.23450001 0.2626 0.26280001 0.27110001 0.26429999 - 0.26530001 0.25709999 0.2331 0.23450001 0.23909999 0.2511 0.25260001 0.25170001 0.2418 0.25600001 0.26589999 0.2649 0.2599 0.2581 0.25760001 0.25 - 0.2543 0.25780001 0.2456 0.25080001 0.25040001 0.25009999 0.25529999 0.24869999 0.25299999 0.25999999 0.2687 0.26159999 0.26570001 0.25330001 0.25310001 0.25440001 - 0.26120001 0.25709999 0.2475 0.2387 0.2457 0.2604 0.25670001 0.26300001 0.2518 0.27540001 0 0 0 0 0 0 - 0.25639999 0.26190001 0.26190001 0.25760001 0.2475 0.25749999 0.2676 0 0 0 0 0 0 0.25819999 0.2608 0.2617 - 0.25479999 0.26089999 0.2599 0.26269999 0.26280001 0.27759999 0.2705 0.264 0.27090001 0.25040001 0.27489999 0.25929999 0.2536 0.24959999 0.24680001 0.25940001 - 0.25920001 0.26499999 0.2791 0.27599999 0.26679999 0.25130001 0.2489 0.26570001 0.252 0.25189999 0.25189999 0.2457 0.25049999 0.26320001 0.26100001 0.26899999 - 0.2669 0.26010001 0.25080001 0.2448 0.26269999 0.2572 0.2516 0.244 0.2494 0.2467 0.2581 0.2638 0.27309999 0.26350001 0.26069999 0.25639999 - 0.26069999 0.25299999 0.26620001 0.2476 0.23819999 0.23280001 0.24339999 0.2481 0.2518 0.26210001 0.25549999 0.26530001 0.26640001 0.25909999 0.2436 0.24150001 - 0.2441 0.2392 0.2367 0.23029999 0.2378 0.25040001 0.266 0.27329999 0.25369999 0.2561 0.2563 0.245 0.24590001 0.2342 0.2308 0.2274 - 0.2306 0.2394 0.24330001 0.2613 0.26159999 0.2473 0.2367 0.24770001 0.26230001 0.25830001 0.2343 0.2281 0.2344 0.241 0.2454 0.2536 - 0.2561 0.24690001 0.2475 0.2397 0.24349999 0.26710001 0.2667 0.24590001 0.23119999 0.23819999 0.2317 0.2384 0.25549999 0.25839999 0.25240001 0.2436 - 0.24339999 0.2335 0.27360001 0.26300001 0.2588 0.234 0.2369 0.22939999 0.24429999 0.2572 0.25139999 0.24690001 0.24079999 0.23100001 0.2229 0.2595 - 0.25049999 0.25850001 0.23450001 0.23270001 0.2395 0.24330001 0.2404 0.2378 0.241 0.2429 0.2237 0.2145 0.193 0.19760001 0.1874 0.1997 - 0.2079 0.21439999 0.22589999 0.22 0.2181 0.2076 0.21699999 0.2221 0.2448 0.20720001 0.19840001 0.20209999 0.20730001 0.2129 0.23 0.2263 - 0.21089999 0.20119999 0.2051 0.1992 0.21789999 0.2441 0.2078 0.1866 0.1913 0.205 0.22239999 0.2313 0.22130001 0.2246 0.2113 0.2016 - 0.1996 0.2167 0.25029999 0.20119999 0.1913 0.1882 0.20200001 0.22050001 0.23710001 0.2286 0.21960001 0.2076 0.20829999 0.22040001 0.2194 0.2396 - 0.19509999 0.19159999 0.1876 0.1964 0.2088 0.23190001 0.2209 0.2146 0.2121 0.21259999 0.2142 0.21250001 0.2349 0.20100001 0.2026 0.2043 - 0.21070001 0.21259999 0.2254 0.22130001 0.20900001 0.1948 0.20559999 0.21349999 0.2105 0.2274 0.212 0.21269999 0.1943 0.1912 0.2086 0.1998 - 0.2068 0.19509999 0.1909 0.2079 0.2103 0.20469999 0.226 0.21969999 0.2114 0.2001 0.191 0.2008 0.1983 0.2114 0.2032 0.21349999 - 0.2131 0.21070001 0.213 0.2269 0.21359999 0.2095 0.19850001 0.20389999 0.2115 0.2087 0.20649999 0.2059 0.20280001 0.2145 0.2157 0.20209999 - 0.2077 0.2137 0.2087 0.2156 0.20819999 0.21250001 0.2159 0.22840001 0.2111 0.2017 0.1964 0.1876 0.1974 0.1929 0.21170001 0.2122 - 0.2101 0.2077 0.20020001 0.21070001 0.2228 0.2148 0.199 0.19320001 0.1934 0.19859999 0.19050001 0.2133 0.20389999 0.1963 0.19760001 0.2031 - 0.21610001 0.2115 0.20550001 0.19840001 0.1928 0.1963 0.1919 0.17479999 0.2147 0.2078 0.2051 0.2071 0.19599999 0.2034 0.2113 0.1937 - 0.19230001 0.1901 0.18709999 0.1971 0.17399999 0.2384 0.22239999 0.2261 0.2115 0.20819999 0.2076 0.19580001 0.20190001 0.2079 0.2077 0.1983 - 0.1884 0.1763 0.24869999 0.23199999 0.2485 0.2297 0.22310001 0.2203 0.21600001 0.1979 0.2023 0.1999 0.2014 0.1754 0.1736 0.24420001 - 0.2352 0.2226 0.2273 0.2247 0.2148 0.2088 0.2041 0.19599999 0.192 0.1891 0.1837 0.185 0.2494 0.2414 0.23559999 0.2247 - 0.2166 0.211 0.214 0.2026 0.2042 0.2115 0.19230001 0.184 0.1893 0.2516 0.245 0.2348 0.2421 0.2269 0.2008 0.1947 - 0.19660001 0.2001 0.2034 0.1946 0.1856 0.1989 0.26120001 0.25130001 0.23459999 0.2278 0.22589999 0.2145 0.20640001 0.1938 0.20630001 0.1971 - 0.20280001 0.1979 0.2067 0.26620001 0.25690001 0.257 0.2306 0.2297 0.2317 0.2111 0.19769999 0.2122 0.2098 0.20900001 0.2148 0.2014 - 0.2823 0.26930001 0.25569999 0.2507 0.2318 0.2246 0.22220001 0.2122 0.2045 0.2009 0.2033 0.2094 0.1912 0.27810001 0.26840001 0.2362 - 0.24240001 0.23989999 0.2419 0.2289 0.2145 0.2089 0.2061 0.1925 0.19660001 0.19 / - - -PERMX - 1835.5062 2015.5477 2111.7188 1344.7683 533.9363 477.7154 214.5887 206.4378 300.8278 412.8377 395.1414 465.5812 629.7773 1232.8535 2111.7188 2111.7188 - 1471.3752 577.7822 461.9631 304.8977 560.2421 666.0286 423.3065 390.8799 511.7166 236.0136 481.4735 978.1274 1732.2271 2111.7188 837.4858 759.6498 - 1633.7034 1344.7214 971.0086 467.5963 323.7184 157.6078 572.5417 961.6612 678.1173 1669.1399 1823.944 791.0202 494.0363 707.9207 663.6674 889.5562 - 529.7734 273.1078 360.3785 860.7498 455.0613 602.0996 1625.2343 2111.7188 1162.7588 1254.4137 683.7661 654.3041 1210.4473 695.1713 446.8186 496.1324 - 506.4912 476.2398 1063.2804 1225.6702 2111.7188 2007.642 1372.7366 818.3238 730.7878 1374.6965 639.8861 346.3532 288.2728 618.9993 258.3409 349.6381 - 739.6832 1516.8531 2111.7188 2111.7188 779.0459 891.4606 1122.8322 373.4048 296.4292 718.0179 912.1812 130.8847 319.1232 360.4253 1152.7889 1850.8021 - 1119.0825 1180.4637 1225.5825 584.6403 757.6827 386.4494 450.4486 498.0877 132.6705 461.0417 862.4823 803.7451 813.4599 1361.3136 2075.8218 2024.5028 - 1173.4429 875.8046 343.7793 487.8349 1451.2843 222.4592 282.9179 273.5111 929.19 1044.7981 1793.7264 2111.7188 2111.7188 1708.14 676.8158 773.5212 - 510.6752 1026.4462 503.1313 277.5438 356.6501 837.9479 1025.6746 1034.5648 624.0527 1062.156 1397.2246 1117.6523 666.5977 218.4934 241.6878 1539.5936 - 726.4703 1375.4078 1269.1835 747.5977 546.6178 199.5293 392.1617 760.3504 207.5712 197.5951 135.2826 163.3079 960.9667 1347.5187 1360.6899 593.7618 - 354.5762 137.3822 109.033 125.4705 104.8838 107.3908 87.9689 174.8102 126.8751 621.1848 1292.1864 1383.1964 1114.7292 793.1685 187.5363 139.1028 - 106.0331 69.3027 90.1666 147.3328 141.9779 130.7995 1618.3416 788.3914 1002.462 1084.952 425.6536 240 202.4457 129.1237 124.612 88.7972 - 216.5924 248.3579 219.5802 656.0502 831.5312 570.6349 348.5008 307.05 196.0978 167.6618 134.3327 64.7461 206.2982 504.7088 550.2088 266.8976 - 393.6544 859.4594 818.9687 256.4853 234.0225 331.7187 205.4359 167.5014 156.848 331.7448 411.2803 255.769 666.2398 858.3581 938.067 633.0998 - 744.2181 260.5631 255.1189 210.0878 264.6574 140.4349 72.4093 354.6469 582.4141 349.9752 760.9163 1105.3748 552.1892 1040.3353 392.9898 118.9727 - 90.6939 145.969 143.7704 197.3922 399.551 1166.7904 1031.0667 238.4045 267.9085 699.1678 904.6838 350.1151 519.4791 180.3185 282.4134 392.3439 - 383.3658 815.7012 1705.6853 913.832 103.902 243.2908 359.9547 456.0602 416.6019 527.9058 366.9651 580.834 649.8339 680.6439 1091.3804 1288.0033 - 829.0481 104.9628 120.2317 83.7548 225.6395 303.5269 303.325 195.4351 513.4079 348.8654 735.4431 1099.1039 1933.3523 1565.2159 77.7231 71.9066 - 108.2312 86.2509 49.5284 37.7691 40.9832 39.9559 30.9379 42.4426 33.2103 24.1751 39.4799 78.2819 66.1717 112.5896 94.739 86.9649 - 40.8261 29.2099 20.128 43.1184 32.9548 41.4389 23.5069 21.8464 108.3433 84.7173 47.0562 38.0809 30.4635 14.4292 20.0461 30.6653 - 36.1041 28.6594 30.4098 24.5641 48.5536 124.133 36.1268 52.7116 54.4861 56.4254 28.9362 35.3117 52.5646 61.2111 44.8667 73.6633 - 48.8903 62.7922 69.7781 65.9709 48.4385 46.8707 81.2153 51.9491 54.9813 49.5445 72.3209 62.1183 41.4985 98.3508 98.6728 138.6632 - 225.2851 366.1465 137.7992 199.3695 105.9542 142.768 246.299 361.3995 133.5868 137.3955 197.8374 222.4184 122.3331 214.81 191.1087 151.6208 - 243.9274 233.4687 225.4228 368.0688 435.0099 404.5871 239.5325 509.8431 431.1891 240.8804 310.1693 263.5911 319.8214 410.059 543.0995 408.3729 - 364.0423 766.1422 540.6747 379.2597 263.601 553.6259 447.9133 162.8759 167.2839 312.9024 543.3718 538.5771 538.0543 504.1193 731.0768 836.2917 - 1025.0913 751.4666 422.5239 569.4338 858.9604 474.9936 528.7591 1316.554 787.7165 649.2421 378.4546 623.644 576.4764 634.1631 464.8308 385.3944 - 577.3735 428.313 277.9087 790.066 1985.1304 623.2723 332.9473 292.5677 282.1743 649.291 453.3374 308.58 296.3696 943.8685 1219.9252 612.4048 - 793.3875 893.6044 350.7522 339.2526 361.2889 362.2321 795.358 1118.8969 621.5139 259.5862 1663.0133 756.886 923.7293 641.5622 787.8837 178.2708 - 236.3626 170.756 292.2133 666.298 577.6335 195.9782 187.5372 1639.0388 1168.6078 495.2155 834.6464 842.541 303.1635 203.899 203.7352 325.6849 - 413.2136 298.7187 268.6586 187.6449 2111.7188 1144.8356 750.2461 667.3317 375.7072 228.7324 235.4731 417.681 657.6313 285.8139 170.6516 408.2525 - 254.4466 2111.7188 1647.3616 1027.5735 843.4177 898.3184 771.1738 477.4631 566.6493 623.275 438.0999 257.4376 299.7537 204.9679 1889.7517 1754.0214 - 660.027 472.7372 581.9915 456.3634 628.1044 707.6641 672.3088 792.3682 535.1029 425.2539 499.0529 1002.4663 655.6668 372.6696 305.7944 310.8465 - 362.1832 536.9163 616.12 644.4827 526.035 417.1261 690.7047 638.4467 679.1859 205.103 186.1152 164.2237 302.2903 356.5808 325.9809 472.8285 - 590.7175 520.3088 400.2255 751.4505 506.9982 658.3922 382.95 243.32 225.5715 229.8358 170.9402 297.7143 421.5705 562.475 584.1708 467.3551 - 648.156 738.7544 322.5639 300.9947 167.8144 274.3965 381.3663 486.457 454.8811 811.56 1053.3622 713.3416 479.6321 751.9 1368.2367 533.877 - 290.8048 122.9318 280.5555 288.1882 249.5538 355.6661 833.358 1246.9871 1234.8733 619.603 624.2625 2097.4446 23.7348 36.2784 24.9129 69.4303 - 118.8419 179.8147 178.4617 109.4402 72.0807 67.1282 59.7007 46.9747 25.421 26.9442 32.2253 73.9759 151.4837 135.4704 205.7579 200.6595 - 135.6834 118.0492 66.8078 80.1518 41.1221 33.9168 30.7424 38.8747 47.568 92.9887 115.8303 142.5788 109.6709 122.4221 129.7432 176.4166 - 101.9916 52.6764 41.2175 50.208 48.6002 74.2224 98.1837 74.7288 53.0956 93.9432 101.7621 97.6398 147.7624 95.335 64.6728 79.8534 - 41.5382 47.7952 100.578 76.4614 66.2705 97.4247 78.4922 172.8777 128.2563 48.9205 64.0472 92.7153 72.3842 36.8735 48.1341 53.9492 - 59.7341 49.0957 67.4709 53.8558 47.7077 74.9671 64.9877 89.0727 155.1228 141.1251 44.6453 49.971 73.0154 89.7581 85.8816 45.4891 - 88.1225 44.3454 96.2759 112.7593 180.7612 158.5534 140.1075 81.4451 74.3968 100.5717 113.3881 83.2809 99.5275 52.8532 60.9994 76.2432 - 90.989 110.0552 62.9083 47.1346 74.0421 70.1551 87.2884 190.2391 430.1492 196.4931 44.3089 41.0297 57.6609 62.7503 39.1407 80.4677 - 89.5223 123.9066 114.6422 206.394 261.643 325.6764 224.9659 251.2432 111.4131 98.987 52.811 88.2517 58.0709 61.9389 127.5271 240.8202 - 208.3336 271.316 90.682 474.7468 292.481 99.9331 94.6653 78.9071 80.7407 73.5356 59.7069 383.9699 809.2808 148.0853 105.1804 98.2549 - 99.3272 142.3561 116.0433 49.6415 49.1276 95.154 85.4806 99.2004 440.1301 557.4366 191.998 177.5088 57.9802 34.4332 62.9588 97.6651 - 60.8748 94.7461 62.3063 54.3836 99.4606 461.0094 336.9807 188.0047 469.121 207.5456 105.7434 72.4739 95.3515 85.5938 57.7427 61.3307 - 50.255 51.0126 609.4655 381.6431 268.8015 197.4553 191.81 153.8003 133.4952 79.4274 45.2908 50.4711 48.7072 67.9517 68.5729 618.9235 - 325.1558 277.9003 96.6566 92.3185 104.6705 141.5787 113.6147 112.0307 86.4321 68.2651 43.9545 74.9038 248.2064 185.0905 250.2829 208.2394 - 220.2881 217.7153 172.0085 139.5181 125.065 84.2856 52.9694 33.0136 52.2277 72.2814 140.0938 171.7275 93.5374 112.6309 154.1942 136.9106 - 184.322 218.6823 76.4096 80.8159 45.1942 72.6463 34.2594 58.7236 46.2881 49.577 55.8005 165.4233 139.2439 157.9172 274.9688 290.8512 - 82.0038 70.8162 32.5967 35.73 34.5131 24.7533 34.6729 45.6204 101.1464 100.8251 135.0185 181.4969 316.0786 133.7026 46.0994 40.354 - 20.2902 15.1211 22.404 41.1039 102.5341 157.817 107.4382 129.3987 334.5028 472.6504 80.2408 57.2366 55.1492 21.3979 24.461 31.9614 - 52.442 114.2986 172.3286 115.1691 181.9416 113.4954 103.6808 68.0413 49.5885 41.5781 177.9481 151.8746 175.993 205.5271 186.9308 149.8975 - 160.5601 92.9552 79.8957 172.711 195.9555 201.0581 127.5465 136.7018 172.3517 160.3231 266.6965 313.4895 240.3934 279.3987 294.6633 248.2758 - 223.6488 188.8436 406.5624 414.1472 152.0576 167.5309 127.0988 142.3072 230.1274 222.5326 378.3311 424.2508 313.2647 494.6965 605.8978 939.8867 - 368.4412 145.8863 157.971 166.7285 166.7694 154.7865 227.955 227.0458 266.4644 682.8434 629.4464 602.8146 562.0067 811.7446 204.6871 184.2971 - 122.358 173.038 257.1339 406.9266 412.1231 386.944 595.9158 451.4378 425.5544 527.0059 275.9688 452.8737 338.3929 359.2856 490.1383 326.7324 - 714.0737 963.2402 550.8903 525.674 374.7413 455.0845 310.2305 457.6384 294.4151 425.7555 580.9781 489.7793 231.3659 316.0352 727.1912 646.645 - 301.5466 623.7959 949.2799 366.035 424.4772 364.7725 430.6331 245.0887 407.0375 200.5521 203.0029 391.3262 337.5117 275.3136 224.859 552.0752 - 519.3696 919.2531 121.5235 123.3242 177.7156 303.9731 163.6645 115.3362 150.4583 257.0925 237.3147 147.9798 181.0611 187.3728 252.2937 145.6211 - 108.0525 123.7053 210.6858 350.6252 178.3312 106.8149 132.2133 219.9324 114.9868 126.3815 76.1436 132.389 285.3692 753.4882 201.9203 183.6142 - 196.9422 89.5646 114.3098 139.8874 197.4633 119.8974 83.1238 43.3941 66.5125 163.1079 294.7867 209.9687 154.187 82.5419 95.8657 84.833 - 187.3642 259.8099 230.0569 83.7848 44.6451 53.9703 165.7331 122.4357 149.3107 157.4211 81.6496 80.3396 113.5761 95.5183 198.8104 98.8763 - 87.9482 49.8768 69.8809 70.6013 59.6935 141.4003 87.1805 70.9634 39.3035 55.8657 93.9952 105.66 100.6925 91.6561 36.5424 39.9499 - 118.8991 56.3715 92.0456 72.2465 44.3314 44.7443 46.7247 63.1611 39.5768 70.6752 77.4786 64.6967 42.441 41.1589 87.5615 38.4541 - 35.0892 24.092 31.4859 20.3573 46.2215 37.1579 50.6364 74.3488 50.8865 59.4587 53.8991 77.268 44.7273 21.6723 20.9545 43.7991 - 41.803 38.3511 60.1034 50.4806 44.5732 55.7352 50.9954 18.1072 16.357 22.4202 41.6155 48.7623 53.8037 54.2862 50.6395 80.4415 - 77.8482 37.8594 50.364 66.236 27.9327 16.0323 17.8684 57.7692 80.828 61.0607 63.1917 72.648 121.1755 93.1895 96.056 38.5629 - 33.0683 15.7672 18.6106 28.2003 43.0557 125.0325 114.0159 60.6253 114.384 91.7525 112.6961 163.6112 77.1148 55.7096 12.1795 16.784 - 21.233 38.9037 83.3443 68.953 50.9673 57.7066 36.0204 51.7857 55.4096 43.5009 55.215 26.3271 31.6365 15.8974 12.409 21.7925 - 14.9614 35.1314 22.3908 39.7878 40.1079 54.3314 40.9975 42.0247 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 - 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 - 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 - 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 - 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 - 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 - 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 - 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 - 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 - 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 - 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 - 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 - 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 - 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 - 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 - 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 - 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 - 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 - 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 1673.3688 261.2408 387.2961 356.2555 544.936 545.4903 486.8528 498.8266 456.4528 218.3564 60.7258 - 55.0352 44.4676 29.7133 315.4126 425.2119 579.6929 552.1215 503.7321 487.5439 408.7695 406.7824 272.8423 135.6636 99.692 110.8264 44.5115 - 365.6227 358.5486 379.4268 495.7794 528.2711 580.7343 350.2987 229.2004 192.8937 154.8797 147.3805 127.4048 65.1269 307.7986 270.507 407.3644 - 572.004 308.8585 361.4467 258.5384 180.0562 145.5538 183.6693 159.912 137.8569 85.0526 164.6801 215.5223 182.3903 181.7269 184.8508 178.0636 - 249.424 244.7449 160.8764 139.2705 127.627 94.3263 91.4751 295.9733 271.6552 155.2347 141.9156 134.7623 183.7717 208.1051 232.3397 150.1528 - 144.5935 129.87 119.6036 100.3487 160.019 130.0677 117.6391 104.4151 164.0209 216.0105 214.5103 165.3651 198.3741 99.1168 89.2351 96.0066 - 115.475 96.9995 120.21 132.8044 174.7397 226.1713 425.4786 283.6855 227.6954 324.1342 184.7878 182.84 107.2033 140.1723 37.4056 84.861 - 118.8803 153.6436 84.8962 272.1945 298.8053 333.9451 230.0617 229.1081 341.7441 180.2422 207.0054 68.2184 108.5228 83.0303 127.6723 491.3092 - 324.1676 326.3297 272.3515 268.5321 249.0471 287.2179 342.5068 232.9016 44.0214 75.0332 193.684 192.2003 202.6987 221.821 265.8274 375.342 - 318.0426 377.292 491.8716 343.9078 1012.4245 45.4204 94.7807 130.8174 171.3447 191.0578 217.2275 189.6838 218.4779 337.7836 312.1014 353.7156 - 266.1949 413.8274 82.5396 111.7676 110.978 125.5556 158.0386 111.8798 187.7063 127.709 257.4045 255.5773 257.9376 233.9559 167.0122 105.3907 - 148.1825 128.4872 115.0022 113.8197 113.9198 161.2061 189.7297 191.975 151.9105 122.0876 118.0828 112.2451 162.6131 141.5293 203.9014 175.6885 - 88.5732 75.984 141.8182 113.4463 160.6014 131.7888 72.5106 87.578 92.7773 176.02 196.2296 146.4161 121.2502 64.5329 71.6427 83.0373 - 97.5166 111.6812 139.1861 124.481 52.5003 68.3277 136.025 252.559 186.4586 134.6674 62.4041 82.5363 85.8661 134.4012 150.8364 156.2723 - 122.4582 150.1535 246.6304 144.8974 188.9854 177.2593 100.6686 150.2699 114.4402 98.7989 104.3748 145.3746 220.4933 170.6459 176.0547 339.9981 - 132.6947 109.1464 127.3263 89.0046 91.4172 80.6038 87.8967 115.3395 149.5328 270.0302 271.9234 190.3856 236.3076 151.1292 129.3039 91.9972 - 58.7585 91.6137 78.3373 85.4036 95.3758 164.1012 225.8039 259.3394 322.6695 239.2915 105.1939 107.8114 106.1593 95.7786 91.9916 94.4566 - 93.4005 81.622 114.9776 174.7409 162.6011 146.4573 166.5891 68.37 83.7014 96.3781 102.6051 94.5474 119.1796 98.6425 59.6193 65.5751 - 92.2904 98.8101 69.6628 66.7157 47.1416 53.9494 53.1284 57.7054 56.9085 69.7358 99.2386 64.7389 79.2031 47.785 82.865 60.3149 - 57.8887 63.9699 48.778 37.7208 60.6604 45.588 59.9962 65.5995 81.8473 94.3016 70.612 90.85 51.9635 57.0554 78.0249 56.4298 - 34.8786 28.3046 61.5113 62.5216 100.5975 101.6035 153.6287 112.4102 100.7204 73.5144 41.8952 78.7202 87.7556 68.833 46.5424 58.7455 - 60.1038 95.3626 227.8242 187.1625 199.8898 171.1142 117.9212 67.1989 121.0987 98.4695 64.6666 57.4594 54.0778 76.5155 85.4632 202.5938 - 193.8879 204.0129 181.8022 102.2869 123.9557 166.3477 125.4966 143.5353 114.0687 62.3011 79.1198 69.3544 122.7342 88.0077 116.6302 88.0289 - 104.1635 80.4157 88.4404 129.5715 167.4514 158.4007 179.6916 163.8373 59.8674 66.0414 60.1828 69.8179 68.8473 101.2648 149.4001 79.2802 - 177.315 228.099 237.0262 194.1412 101.4842 107.0816 98.4409 95.3638 139.698 112.4648 115.3832 102.4567 28.4583 88.9898 148.8048 460.4017 - 140.1942 168.4036 135.3225 81.5417 93.6741 141.8219 99.7754 137.5633 122.6572 34.345 104.8605 253.7357 407.567 427.1194 171.9031 172.9271 - 217.0981 163.7788 163.1051 232.2168 140.2747 127.9662 51.8132 74.6063 207.1227 279.9063 174.9224 274.6711 154.9401 208.3208 172.8716 263.5746 - 205.6379 170.7691 470.0739 54.1236 95.5077 141.0339 190.6491 122.3886 171.5401 180.5345 161.3484 169.8325 211.704 346.1924 283.5905 235.2462 - 38.9133 69.6375 213.8245 236.8663 182.2163 186.8974 119.2618 114.7003 205.7537 255.0903 303.2356 152.7293 146.6164 44.1689 80.1637 131.7887 - 195.4391 176.161 201.799 190.6418 93.514 103.9066 192.9083 193.2258 141.452 95.6386 80.3272 132.2607 270.6169 191.1803 138.2585 206.0253 - 254.5444 193.8531 173.4933 140.8392 124.4606 119.0935 136.2393 102.402 183.7035 362.3573 302.2612 231.0562 186.482 174.0271 163.6376 190.6901 - 131.0052 96.4406 101.9416 184.2278 166.496 200.1913 298.5894 240.0836 307.6649 338.7377 414.2082 221.6351 203.1056 190.5535 124.6593 132.6648 - 170.3657 200.6118 264.2135 523.419 223.742 270.3176 268.9993 309.7751 223.3992 201.627 199.2478 109.6194 83.1512 196.4154 267.3787 321.8378 - 255.5537 338.89 234.242 211.5783 212.7948 120.6533 138.7972 135.1045 134.2286 78.3954 90.2297 189.4637 190.9723 229.0182 212.2124 228.6863 - 194.9451 171.0203 222.8407 147.9416 92.4704 88.8853 105.6056 59.8133 117.4296 167.9707 140.157 184.4619 151.668 169.1357 161.458 208.7456 - 91.6504 82.2898 52.2801 75.2536 75.7279 80.8493 95.7052 93.8953 175.2949 134.3809 189.5202 231.6799 186.0389 127.0053 72.4335 67.9084 - 86.5462 61.5307 48.6936 60.5349 53.2397 66.2457 89.5297 134.7524 155.0583 149.6197 95.7638 79.5878 54.5347 60.4059 76.1634 93.4821 - 59.8564 53.7652 66.5281 80.6105 103.2255 132.8322 143.1596 154.8486 113.6975 96.1423 82.2372 72.0313 72.2545 53.9965 68.5412 90.8604 - 86.4512 94.5445 136.9108 134.8899 135.0245 137.7504 123.7387 95.3819 75.6332 60.6903 69.634 84.5194 74.1491 76.8932 105.2649 84.3608 - 147.0534 201.4217 171.5603 154.6202 90.7631 87.832 71.9502 67.4888 85.997 65.1753 100.1377 94.4828 96.6706 99.6507 100.3352 124.2363 - 96.8175 84.8131 68.2704 69.8191 78.2476 84.1669 96.9368 94.2024 90.0036 65.7915 52.966 56.0909 89.5303 90.3754 79.2286 119.1948 - 81.5312 92.6393 55.0726 93.393 81.3476 77.7931 55.6026 53.8443 44.4644 57.2056 83.4561 111.3854 84.9433 159.7144 88.0676 66.4133 - 100.146 73.142 65.1253 76.1677 64.5857 53.491 76.9817 79.5934 107.6319 81.8471 152.1021 93.1706 76.0439 70.6451 78.053 66.9729 - 61.8716 69.9372 117.4242 92.4249 92.5659 180.1662 110.9947 207.8327 106.9851 94.6822 63.0206 20.1297 61.759 87.1555 124.0655 123.391 - 138.1456 163.5688 105.6776 234.3367 255.3382 159.8399 165.4535 77.7331 73.173 65.6057 100.0603 124.5709 130.836 218.723 238.6866 290.2843 - 403.9698 240.8185 214.8955 166.0291 156.7564 114.1609 133.168 145.1755 188.6407 299.363 270.2811 334.455 317.8305 529.0039 202.6116 207.7191 - 278.9254 204.8303 194.4372 200.308 210.5136 199.2939 351.3454 416.5692 425.7969 397.6774 338.2312 184.5478 226.6361 357.1487 348.3659 271.4774 - 275.8703 278.2089 295.8452 274.4742 290.6999 501.8053 369.3132 411.9433 185.5693 215.9531 272.8445 320.8418 353.3722 288.0148 345.0267 325.975 - 390.1527 332.8426 347.2978 365.985 269.0728 221.1372 239.1961 244.7388 309.171 273.4527 254.6455 271.631 399.071 341.0053 258.0191 278.587 - 332.4164 321.1663 286.8325 271.436 254.3048 277.2791 221.0089 175.8638 160.3286 362.2468 318.7387 343.5227 295.9022 338.6343 399.7289 257.2359 - 136.0522 169.0118 177.3097 209.1107 169.7694 130.7369 169.6409 210.142 302.6786 310.8516 487.5135 425.1813 177.6854 81.2613 65.1791 72.9181 - 104.0906 122.941 105.5674 100.3892 119.1199 223.8128 276.2365 312.9451 267.2723 130.3006 68.7258 60.0014 60.683 74.5716 69.8275 61.5723 - 65.5855 107.24 148.6366 249.6948 383.7864 302.6476 87.0211 60.4612 46.1529 39.96 37.2743 40.8513 62.9963 91.2675 76.78 89.8719 - 152.6387 190.4597 213.4113 107.018 49.5481 43.5282 39.2836 29.4616 46.3919 51.3114 72.8781 58.6394 105.1566 176.2728 227.4197 187.9093 - 1537.9719 945.2286 656.942 1124.3998 1427.5575 980.4561 1003.0983 864.5892 564.7726 570.8199 480.4196 552.2142 748.8906 671.2055 583.0094 596.1724 - 614.401 2011.1168 2294.228 1781.0016 1328.7747 993.6736 659.3694 486.6402 577.4764 575.0311 1202.8533 742.4132 697.5323 734.7238 2017.7032 1792.4231 - 1990.403 1618.0542 1013.5611 928.8891 832.0757 570.3922 573.6624 986.9634 650.9683 771.1487 1391.578 1832.6809 2918.0581 2628.9148 1535.6818 1276.1024 - 785.6083 857.7108 926.9007 659.2988 622.5881 707.5726 1189.7777 1331.3008 2918.0581 2918.0581 2918.0581 1885.7234 1497.0737 1212.1324 1267.9728 1187.1271 - 773.8052 1047.1711 1148.5717 1093.553 1480.1451 1972.35 2918.0581 2918.0581 2025.3407 1480.7601 1034.0107 1085.8342 1232.9792 701.7455 1429.8289 1317.6113 - 1716.9093 2079.0339 1478.25 2470.5723 2165.6108 1495.9412 1173.6448 517.0347 669.8399 1209.5897 1002.973 1346.8119 1352.4618 1480.5892 1370.7949 1615.1713 - 2869.4788 1972.7026 2121.0361 930.9452 833.3069 643.8161 886.514 1135.5682 1419.8164 1337.2284 1344.9297 1796.5903 2266.7419 2699.5247 2729.571 1713.3811 - 1013.6143 882.1042 782.6268 1366.2858 695.7008 1525.4904 843.1208 811.6458 1028.4139 1279.6848 1936.368 2460.0486 1541.9268 1488.3906 837.5623 1158.3192 - 1140.954 1465.012 1124.3358 1314.5038 788.6508 1035.2644 963.2789 1183.8097 1241.4829 724.7795 1219.4342 810.0953 855.1368 972.4328 1186.6953 1090.7689 - 680.6031 818.0662 949.0014 855.4174 865.2973 1079.9369 845.5716 943.8387 1448.9414 1323.6025 755.5622 933.7256 474.4154 462.2372 713.8615 894.8049 - 827.9568 741.2349 924.6899 1279.9691 804.3965 1370.0063 1482.2252 1233.5138 964.7535 353.2004 257.3307 376.2535 470.1775 689.3132 628.3024 618.4364 - 939.592 1151.1788 1013.5554 1406.6039 945.528 785.478 713.952 528.1935 621.6627 814.5513 934.3513 716.417 861.8392 948.1976 1214.1901 1222.8878 - 1031.1102 1226.6143 927.1553 751.6292 1157.7821 1190.4008 1990.3367 1191.6115 1256.6497 1088.2083 801.4263 1364.7699 1390.5944 1387.8022 1932.2839 893.278 - 999.9846 1869.2142 2436.1033 1362.1875 2194.8369 1367.2444 938.884 807.293 970.7839 1469.4875 1542.8564 1199.9819 504.709 2157.8914 2686.6021 1997.7921 - 2918.0581 2432.1604 1639.5265 1156.9221 852.2868 793.8665 1359.8926 1124.8041 1079.314 1112.0188 2699.1523 2389.9873 1312.7849 1930.1235 2004.6599 1738.0963 - 1592.879 1179.1246 1399.5676 1257.0812 1481.4762 1391.5874 678.3906 2918.0581 2388.1543 1186.335 1280.4001 1358.884 2451.3613 2101.5811 2307.3254 1716.2838 - 1188.1863 1751.7886 1353.6172 905.7305 2918.0581 2592.5112 1846.2245 1527.35 1187.4386 2313.261 2800.5022 2918.0581 1930.6243 1508.6959 919.548 1104.0549 - 1010.1436 2270.45 1750.9409 1269.825 1321.5636 1362.181 2562.668 2918.0581 2918.0581 2174.6416 2300.1992 1753.027 2211.387 1588.7722 1351.8169 1193.1716 - 1464.8945 2051.8284 1408.6296 746.2598 707.9864 713.9908 470.7639 299.6147 322.2991 267.0201 311.9378 1299.2123 1982.0297 2294.2217 1630.6919 1340.6858 - 1180.423 877.1582 832.862 879.4121 741.7058 559.8414 381.2835 478.3057 1794.4216 2258.7468 2222.864 1320.625 1806.6794 2422.2256 968.6685 1157.538 - 1444.4561 1077.3569 877.561 609.7127 786.5135 1470.3539 1795.5275 2662.0879 2662.0879 2603.4946 1553.078 669.9897 853.2554 1092.0809 1150.7288 960.9066 - 844.0786 656.312 2390.0422 2662.0879 2662.0879 2662.0879 2662.0879 1493.2687 1138.799 1155.1241 783.9057 1084.4532 1420.7109 1171.285 675.545 1815.6569 - 2465.0896 2662.0879 2662.0879 2662.0879 2301.092 1410.5076 1015.6109 1002.6713 1594.5425 2433.7441 1297.5005 509.8071 1888.385 2238.1787 2662.0879 2662.0879 - 2662.0879 2662.0879 1263.1765 1287.8177 1132.3564 1488.1598 1808.6525 1649.6796 761.9393 2068.4702 2662.0879 2662.0879 2662.0879 2422.5132 2533.8145 2120.5254 - 2129.5652 2236.0996 1149.8912 1233.7991 1406.5537 1042.5177 2375.791 2611.3125 2662.0879 2662.0879 2662.0879 2568.8538 2662.0879 1981.4448 1741.8549 1839.0636 - 1847.6627 1783.3215 1023.0886 1602.7318 1801.0565 2662.0879 2662.0879 2662.0879 1588.7517 2662.0879 2192.4878 2473.1782 2662.0879 2662.0879 2662.0879 1303.4512 - 2526.7756 2662.0879 2662.0879 2662.0879 1683.7157 2140.2471 2435.6025 2008.2535 2662.0879 2662.0879 2662.0879 2635.3774 942.7556 2523.9712 2662.0879 2662.0879 - 2153.7998 2554.2976 2626.7483 2648.9944 2662.0879 2662.0879 2662.0879 2558.9668 2435.9036 1038.9041 2662.0879 2560.7698 2495.6367 1799.6478 1702.2985 2662.0879 - 2662.0879 2662.0879 2662.0879 2662.0879 2662.0879 1652.7094 1114.2906 2662.0879 2071.8108 2435.1763 2195.6399 1631.598 2303.1162 2662.0879 2662.0879 2662.0879 - 2662.0879 2007.5162 1546.8276 1394.8892 2662.0879 2662.0879 2265.3899 1475.4612 1673.9508 1834.1332 2662.0879 2662.0879 2662.0879 2538.2383 2190.4573 2492.8108 - 2045.3254 2217.0557 2662.0879 1480.8469 1023.9514 920.3008 1528.0886 1581.4594 1586.3474 1992.8542 1776.8274 2065.4236 1972.1637 1620.3883 1165.8844 1131.173 - 1490.0565 1194.0476 1130.5846 817.8041 1242.0809 1666.4741 2662.0879 2662.0879 1373.8031 1487.3064 1699.326 1526.5171 1231.9231 898.6443 858.4734 1076.4897 - 957.7324 1229.751 1475.1863 2324.0693 2662.0879 1321.2087 985.2148 1414.6412 2551.7437 1835.7957 1091.0983 758.3306 994.9932 1097.6656 1079.8345 1700.9094 - 1931.7128 1799.0635 1762.7377 1216.4827 1523.4106 2430.3137 2306.2715 1398.4363 846.7829 980.3734 745.0041 1098.9984 1941.7446 2470.3494 1975.5361 1841.8973 - 1859.9613 1696.4552 2662.0879 2662.0879 2617.1228 1107.3608 978.4128 806.0371 1239.3074 2096.7363 2090.4331 1623.7731 1460.4525 1675.2725 1060.8165 2662.0879 - 2490.5215 2337.0615 1190.5721 1073.8059 1308.4609 1729.7877 1732.2186 1476.7338 1690.9126 1906.0239 1388.9343 961.0165 46.1231 53.0388 38.8656 82.2449 - 95.9246 164.7866 276.4631 293.5925 330.4747 175.7835 201.0585 347.7252 709.0985 130.4687 92.9814 110.9682 195.1426 257.2592 534.2729 367.6163 - 166.7372 128.6062 142.7344 123.8679 372.0639 1013.5383 192.9785 67.2262 114.3956 256.1424 629.4108 1249.8596 355.5381 496.8278 233.882 129.2971 - 111.9648 227.3593 1145.4507 113.2984 86.5124 94.9929 302.0461 1002.8964 1534.6758 638.4684 390.9348 285.7927 252.3576 288.5418 256.083 520.4119 - 109.775 110.6396 103.1546 288.4793 436.9071 1431.7738 819.3083 372.5082 341.8567 220.0752 301.8868 245.5839 628.6451 187.5038 212.0258 446.8885 - 711.2964 781.8807 1002.3691 715.6282 600.8367 175.5899 268.4001 318.0368 352.5285 367.6892 291.5653 448.9542 245.4772 336.0622 719.9534 455.6142 - 431.4272 265.843 181.7511 365.7657 412.2166 278.1533 771.6592 659.1513 591.7092 441.0886 229.029 364.2134 426.1334 763.0237 455.1385 450.8184 - 709.6573 936.0976 620.5972 1362.3542 641.6523 521.9012 290.0144 748.2177 1293.5634 885.4771 1139.8805 806.7581 1000.6599 1618.1003 1254.1814 845.9832 - 1136.7194 608.9044 767.9382 1281.1218 1137.0912 1602.8248 1580.6398 2521.293 2236.5503 1505.5 845.5929 402.5196 704.2455 790.6681 826.2651 1079.525 - 923.301 1460.3402 992.3151 1813.7269 2258.5859 2521.293 2061.5183 1297.4155 788.7605 1447.7582 947.8471 612.4908 522.197 524.5153 585.8287 793.7578 - 1983.8685 1872.8301 2521.293 2160.5515 1472.9586 1511.4939 1663.5585 638.0475 515.071 381.5046 417.8253 1063.0854 459.5348 848.2012 1256.5686 795.9512 - 685.3807 634.6384 1127.6689 1971.6069 597.5592 1105.7002 790.9061 1072.057 435.4443 562.62 793.3102 456.4588 1172.5645 1016.3428 1323.8207 1073.5267 - 764.5461 673.0531 1309.1865 727.3297 1792.5408 1103.9506 829.9794 1248.6581 1221.8535 714.6914 888.5589 594.6298 847.5729 338.1613 335.0607 815.986 - 518.2972 349.5293 817.0961 774.8094 865.0497 728.1528 1444.7341 513.2236 284.0356 388.7322 402.0323 623.8098 861.6846 582.0569 805.3513 493.0244 - 439.8405 391.7534 641.0275 374.4687 487.0023 803.3285 449.7823 489.3006 669.6713 693.7151 652.9311 472.0953 968.9354 497.0555 238.6519 98.1489 - 207.0017 406.5865 384.3234 486.7072 474.5873 1255.1542 998.8135 671.7075 411.353 507.9999 566.8845 321.7262 240.0744 166.179 506.0168 451.204 - 761.4321 722.1391 1416.4434 1129.7362 726.2606 1123.8989 576.2388 565.6989 791.7581 273.321 224.9192 460.4702 621.3973 768.0264 905.631 383.5766 - 1231.3551 1008.5057 831.2705 1084.4749 593.1015 660.4116 625.2281 369.2252 339.8404 349.7904 452.9926 482.0576 233.4436 856.6553 1076.8588 420.1747 - 785.8428 1029.699 1010.6412 634.5325 330.1749 497.525 490.101 112.9563 163.2864 135.1401 / - - -NTG - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.0099999998 0.0099999998 - 0.0099999998 0.0099999998 0 0 0 0 0 0 0 0 0 0.0099999998 0.0099999998 0.0099999998 0.0099999998 0.0099999998 - 0 0 0 0 0 0 0 0 0.0099999998 0.0099999998 0.0099999998 0 0 0 0 0 - 0 0 0 0 0 0.0099999998 0 0 0.0099999998 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0.0099999998 0 0 0 0.0099999998 0 0 0.0099999998 0.0099999998 0.0099999998 - 0.0099999998 0.0099999998 0.0099999998 0.0099999998 0.0099999998 0.0099999998 0.0099999998 0.0099999998 0.0099999998 0.0099999998 0.0099999998 0.0099999998 0.0099999998 0.0099999998 0.0099999998 0.0099999998 - 0.0099999998 0.0099999998 0.0099999998 0.0099999998 0.0099999998 0.0099999998 0.0099999998 0.0099999998 0.0099999998 0.0099910004 0.0099999998 0.0099999998 0.0099999998 0.0099999998 0.0099999998 0.0099999998 - 0.0099999998 0.0099999998 0.0099999998 0.0099999998 0.0099999998 0.0099999998 0.0099309999 0.0098940004 0.0099339997 0.0099999998 0.0099999998 0.0099999998 0.0099999998 0.0099999998 0.009997 0.0099849999 - 0.0099889999 0.0099999998 0.0099999998 0.0099250004 0.0098040001 0.0098470002 0.009943 0.0099999998 0.0099999998 0.0098930001 0.0098040001 0.0097700004 0.0097949998 0.0098430002 0.0099050002 0.0099600004 - 0.0099999998 0.0098919999 0.0097960001 0.0097719999 0.0098390002 0.0097610001 0.0094929999 0.0093860002 0.00942 0.0095349997 0.0096739996 0.0097949998 0.0098890001 0.0099999998 0.0098999999 0.0096230004 - 0.0093430001 0.0090859998 0.008835 0.0086920001 0.0087700002 0.0090190005 0.0093029998 0.0095589999 0.0097329998 0.0098689999 0.0099999998 0.0097669996 0.0093949996 0.0089830002 0.0085530002 0 - 0 0 0.0088719996 0.0092749996 0.0095610004 0.0097380001 0.009881 0.0099320002 0.0096389996 0.0092890002 0.0089029996 0.0085000005 0 0 0 0.0089910002 - 0.0094130002 0.0096589997 0.0098040001 0.0099149998 0.0098949997 0.0096760001 0.0094349999 0.0091589997 0.0088640004 0.0086820005 0 0.0089199999 0.0092599997 0.009598 0.0097869998 0.0099010002 - 0.0099569997 0.0099339997 0.0098489998 0.0097669996 0.0096150003 0.009393 0.0092460001 0.0092359995 0.0093459999 0.0095469998 0.0097620003 0.0098919999 0.0099759996 0.009993 0.009962 0.009943 - 0.0099459998 0.0098930001 0.009749 0.0096429996 0.0096110003 0.0096490001 0.009749 0.0098700002 0.0099520003 0.0099999998 0.0099999998 0.0099590002 0.0099510001 0.0099640004 0.0099600004 0.0099029997 - 0.0098519996 0.0098209996 0.0098230001 0.0098630004 0.0099290004 0.0099780001 0.0099999998 0.0099999998 0.0099820001 0.0099809999 0.0099889999 0.0099919997 0.0099750003 0.0099569997 0.0099370005 0.0099240001 - 0.0099299997 0.0099600004 0.0099870004 0.0099999998 0.0099999998 0.0099999998 0.0099999998 0.0099999998 0.0099999998 0.0099999998 0.0099999998 0.009997 0.0099870004 0.0099780001 0.0099799996 0.0099889999 - 0.0099999998 0.0099999998 0.0099999998 0.0099999998 0.0099999998 0.0099999998 0.0099999998 0.0099999998 0.0099999998 0.0099999998 0.0099999998 0.0099989995 0.009997 0.0099999998 0.0099999998 0.0099999998 - 0.0099999998 0.0099999998 0.0099999998 0.0099999998 0.0099999998 0.0099999998 0.0099999998 0.0099999998 0.0099999998 0.0099999998 0.0099999998 0.0099999998 0.93830001 0.93849999 0.93919998 0.94099998 - 0.94459999 0.94889998 0.95370001 0.95829999 0.9641 0.97229999 0.98259997 0.9921 0.99659997 0.94880003 0.94929999 0.95050001 0.95289999 0.9576 0.96329999 0.96969998 - 0.97610003 0.98210001 0.9885 0.99180001 0.99400002 0.99440002 0.95999998 0.96069998 0.96219999 0.96499997 0.96990001 0.9756 0.98159999 0.98760003 0.99299997 0.99830002 - 0.99830002 0.99699998 0.995 0.97119999 0.97180003 0.9734 0.97640002 0.98070002 0.98519999 0.9896 0.99400002 0.99800003 1 1 0.99919999 0.99580002 - 0.98150003 0.98229998 0.98400003 0.98650002 0.98949999 0.99229997 0.99449998 0.99680001 0.99879998 1 0.99980003 0.99769998 0.99440002 0.9903 0.99129999 0.99290001 - 0.99470001 0.99610001 0.99690002 0.99730003 0.99769998 0.99769998 0.99730003 0.99589998 0.99360001 0.99059999 0.99589998 0.99769998 0.99910003 1 1 0.99970001 - 0.99870002 0.9975 0.99580002 0.9939 0.99129999 0.98820001 0.98500001 0.99680001 1 1 1 1 1 0.99910003 0.99659997 0.99379998 - 0.99059999 0.98710001 0.98320001 0.97960001 0.99150002 0.99839997 1 1 1 1 0.99790001 0.99470001 0.99119997 0.98760003 0.98379999 0.97970003 - 0.9756 0.97850001 0.98680001 0.99440002 0.99949998 0.99959999 0.99800003 0.99419999 0.99059999 0.98720002 0.98430002 0.98140001 0.97790003 0.97390002 0.95560002 0.96210003 - 0.977 0.99019998 0.9939 0.99309999 0.98640001 0.9824 0.98079997 0.98030001 0.9799 0.97820002 0.9756 0.93519998 0.93519998 0.94569999 0.95679998 0.96429998 - 0.9673 0.9655 0.96740001 0.97189999 0.97649997 0.98009998 0.98079997 0.98030001 0.9285 0.92760003 0.93260002 0.93889999 0.94480002 0.9483 0.95090002 0.95859998 - 0.9691 0.97799999 0.9835 0.98540002 0.986 0.9375 0.94059998 0.94400001 0.94620001 0.94749999 0.94910002 0.95289999 0.96249998 0.97460002 0.98470002 0.98970002 - 0.99159998 0.99220002 0.9569 0.96509999 0.96929997 0.96950001 0.9677 0.96719998 0.96969998 0.97619998 0.98460001 0.99229997 0.99580002 0.9971 0.99669999 0.9781 - 0.99110001 0.99769998 0.99739999 0.99229997 0.9892 0.98900002 0.99070001 0.99400002 0.99769998 0.99849999 0.99790001 0.99519998 0.98110002 0.99400002 1 1 - 0.99970001 0.99690002 0.9957 0.99629998 0.9975 0.9982 0.99550003 0.99119997 0.98439997 0.96240002 0.97689998 0.9874 0.99379998 0.99489999 0.99540001 0.99540001 - 0.99680001 0.9975 0.99589998 0.98879999 0.97920001 0.9666 0.94639999 0.96670002 0.98049998 0.98949999 0.99190003 0.9939 0.99519998 0.99699998 0.99730003 0.99409997 - 0.98210001 0.96619999 0.94630003 0.94980001 0.97280002 0.9849 0.99110001 0.99220002 0.99339998 0.99519998 0.99739999 0.99809998 0.9946 0.97920001 0.95709997 0.92820001 - 0.97479999 0.99150002 0.99589998 0.99510002 0.99370003 0.9932 0.99559999 0.99849999 1 0.99720001 0.98040003 0.95279998 0.91360003 1 1 0.99839997 - 0.9928 0.99049997 0.99019998 0.99409997 0.99839997 1 0.99669999 0.97820002 0.949 0.90820003 1 1 1 1 0.99879998 0.99180001 - 0.98180002 0.96929997 0.9551 0.9411 0.92769998 0.91589999 0.90560001 1 1 1 1 1 1 1 0.99690002 0.98979998 - 0.98199999 0.97149998 0.96079999 0.94919997 1 1 1 1 1 1 1 1 1 1 0.99620003 0.98659998 - 0.9763 1 1 1 1 1 1 1 1 1 1 1 1 0.9932 0.99650002 0.99910003 - 1 1 1 1 1 1 1 1 1 1 1 0.99589998 0.99919999 1 1 1 - 1 1 1 1 1 1 1 1 0.9989 1 1 1 1 1 1 1 - 1 1 1 1 1 0.99220002 1 1 1 1 1 1 1 1 1 1 - 1 1 0.97060001 0.9727 0.96350002 0.9659 0.99479997 1 1 1 1 1 1 1 1 0.94679999 - 0.93180001 0.90509999 0.90719998 0.97280002 1 1 1 1 1 1 1 1 0.9533 0.9375 0.91759998 0.92180002 - 0.97719997 1 1 1 0.99379998 0.98430002 0.97689998 0.9788 0.98580003 0.98430002 0.98400003 0.97729999 0.97719997 0.99080002 0.99739999 0.99489999 - 0.98470002 0.96829998 0.95130002 0.93830001 0.93650001 0.94019997 1 1 1 1 1 0.99839997 0.99150002 0.9716 0.94230002 0.91350001 - 0.89410001 0.88620001 0.88300002 1 1 1 1 1 1 0.98940003 0.95850003 0.9174 0.87760001 0.85250002 0.83880001 0.8301 - 1 1 1 1 1 1 0.98320001 0.94620001 0.89969999 0.8538 0.82270002 0.80250001 0.78979999 1 1 1 - 1 1 1 0.98199999 0.94410002 0.89630002 0.84909999 0.81419998 0.78729999 0.7705 0.99339998 0.99879998 1 1 1 0.99550003 - 0.97780001 0.9479 0.90829998 0.866 0.8294 0.79809999 0.77539998 0.96160001 0.9641 0.97229999 0.97960001 0.98250002 0.98180002 0.97320002 0.95630002 0.92970002 - 0.89660001 0.86159998 0.82740003 0.79769999 0.9199 0.92150003 0.93379998 0.9483 0.9598 0.96920002 0.972 0.96829998 0.95499998 0.93360001 0.90240002 0.86690003 - 0.82950002 0.89060003 0.89270002 0.90509999 0.92140001 0.94 0.958 0.972 0.98000002 0.97890002 0.9691 0.94370002 0.90899998 0.86559999 0.87419999 0.87589997 - 0.88489997 0.8994 0.92250001 0.94679999 0.97240001 0.98940003 0.99519998 0.9914 0.97039998 0.93629998 0.88880002 0.85430002 0.85430002 0.86119998 0.87510002 0.89920002 - 0.92510003 0.95359999 0.97350001 0.9835 0.98070002 0.96200001 0.93099999 0.8908 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 0.88050002 0.88090003 0.88489997 0.89359999 0.90869999 0.926 0.94480002 0.9623 0.9774 0.99019998 0.99970001 1 - 1 0.9138 0.9113 0.91159999 0.91640002 0.92799997 0.94199997 0.95740002 0.97170001 0.98379999 0.99400002 1 1 1 0.95090002 0.94550002 - 0.94019997 0.93959999 0.9472 0.95649999 0.96749997 0.97920001 0.98879999 0.99610001 0.99970001 1 1 0.98229998 0.97610003 0.96759999 0.9619 0.95990002 - 0.9605 0.96640003 0.97659999 0.98750001 0.99680001 0.99910003 0.99830002 1 1 0.99669999 0.98839998 0.97659999 0.96079999 0.94940001 0.95060003 0.96069998 - 0.97549999 0.99119997 0.99720001 0.99659997 0.99720001 1 0.99910003 0.98760003 0.96969998 0.94400001 0.92379999 0.91890001 0.9321 0.95090002 0.96810001 0.98070002 - 0.9878 0.99129999 1 1 0.98610002 0.95599997 0.9152 0.88700002 0.88020003 0.89319998 0.91600001 0.93809998 0.95700002 0.97119999 0.98079997 1 - 0.99330002 0.96749997 0.90619999 0.81260002 0.78210002 0.81669998 0.8495 0.87949997 0.90700001 0.9321 0.95249999 0.96969998 0.95380002 0.97189999 0.94440001 0.88050002 - 0.79390001 0.76609999 0.80110002 0.8326 0.86080003 0.88609999 0.91079998 0.93430001 0.96100003 0.90460002 0.95850003 0.94050002 0.90990001 0.89099997 0.87459999 0.86019999 - 0.85890001 0.87019998 0.88419998 0.9005 0.92559999 0.95910001 0.96509999 0.97899997 0.98369998 0.98089999 0.9677 0.94809997 0.92220002 0.9052 0.8973 0.89700001 - 0.90329999 0.94230002 0.97500002 0.98030001 0.99040002 0.99809998 0.99489999 0.9756 0.95969999 0.94779998 0.93519998 0.92269999 0.91280001 0.90549999 0.90920001 0.92439997 - 0.98089999 0.98710001 0.98760003 0.98400003 0.9777 0.9745 0.97180003 0.96240002 0.94840002 0.93370003 0.92189997 0.91530001 0.9224 0.98199999 0.97210002 0.96710002 - 0.97009999 0.9795 0.98729998 0.98979998 0.9835 0.97049999 0.95550001 0.94700003 0.94459999 0.95349997 0.96820003 0.94410002 0.93330002 0.94209999 0.96350002 0.98220003 - 0.9939 0.99489999 0.98640001 0.97359997 0.96509999 0.96149999 0.96810001 0.94050002 0.90380001 0.88709998 0.90310001 0.9404 0.97299999 0.99449998 1 0.99629998 - 0.98409998 0.9734 0.96530002 0.96160001 0.9041 0.8761 0.8653 0.88889998 0.94099998 0.98229998 1 1 1 0.9849 0.9727 0.96289998 - 0.95420003 0.86870003 0.85900003 0.86879998 0.90189999 0.95469999 0.99550003 1 1 0.99379998 0.97509998 0.96439999 0.95880002 0.95719999 0.87080002 0.86570001 - 0.8876 0.92199999 0.963 0.99489999 1 0.99879998 0.9763 0.95550001 0.94959998 0.95270002 0.96069998 0.93559998 0.93129998 0.93279999 0.94209999 0.96450001 - 0.98220003 0.9892 0.97890002 0.95670003 0.93470001 0.93269998 0.94520003 0.96280003 0.96719998 0.96560001 0.9526 0.94569999 0.95480001 0.9641 0.972 0.97130001 - 0.95859998 0.9332 0.92839998 0.94580001 0.96899998 0.91229999 0.91670001 0.92140001 0.92760003 0.93669999 0.94840002 0.9641 0.97710001 0.98199999 0.96450001 0.95679998 - 0.96679997 0.97920001 0.99900001 0.99989998 1 1 1 1 1 1 1 0.99900001 0.99730003 0.99510002 0.99299997 0.99989998 - 1 1 1 1 1 1 0.99970001 0.99910003 0.99809998 0.99580002 0.9928 0.99040002 1 1 0.99959999 0.99919999 - 0.9989 0.99879998 0.99870002 0.99860001 0.99860001 0.99870002 0.99599999 0.99169999 0.98860002 1 1 0.9989 0.99779999 0.99720001 0.99699998 0.9975 - 0.99830002 0.9989 0.99949998 0.99720001 0.99260002 0.98799998 1 1 0.9982 0.99599999 0.99470001 0.99400002 0.995 0.9975 0.99919999 0.99940002 - 0.9971 0.99229997 0.98680001 1 1 0.99760002 0.99379998 0.99110001 0.9885 0.98860002 0.99339998 0.99779999 0.99900001 0.9971 0.99250001 0.98619998 - 1 1 0.9975 0.99040002 0.98110002 0.97509998 0.97469997 0.97930002 0.98610002 0.99180001 0.99479997 0.99309999 0.98769999 1 0.99879998 0.991 - 0.98519999 0.98110002 0.97180003 0.96090001 0.95920002 0.96469998 0.97350001 0.98280001 0.9892 0.98680001 1 0.98729998 0.9677 0.95340002 0.94709998 0.93980002 - 0.93370003 0.93229997 0.93430001 0.93779999 0.94370002 0.95789999 0.96749997 0.99680001 0.97259998 0.9375 0.90649998 0.88889998 0.88590002 0.90009999 0.90740001 0.90750003 - 0.90100002 0.89499998 0.91079998 0.93510002 0.98689997 0.96310002 0.93339998 0.90880001 0.8969 0.89600003 0.90539998 0.90969998 0.90979999 0.9077 0.90679997 0.92250001 - 0.94279999 0.97500002 0.96319997 0.95069999 0.9429 0.9425 0.94450003 0.94660002 0.9443 0.93980002 0.93940002 0.94330001 0.9623 0.97799999 0.95789999 0.96270001 - 0.9677 0.97369999 0.98019999 0.98390001 0.98220003 0.97399998 0.96399999 0.9598 0.96090001 0.96890002 0.97390002 0.93540001 0.95819998 0.9795 0.99379998 1 - 1 0.99739999 0.98549998 0.97280002 0.96520001 0.96139997 0.95990002 0.95569998 0.91299999 0.95599997 0.99150002 1 1 1 0.99550003 0.98299998 - 0.9716 0.96380001 0.9598 0.95709997 0.9515 0.90020001 0.96609998 1 1 1 1 0.98650002 0.97530001 0.96759999 0.96280003 0.96020001 - 0.95819998 0.95459998 0.93489999 0.99379998 1 1 1 0.98720002 0.97670001 0.9702 0.96689999 0.96539998 0.96399999 0.96240002 0.95969999 1 - 1 1 1 1 0.97970003 0.9745 0.97210002 0.97180003 0.972 0.97109997 0.96929997 0.96640003 1 1 1 1 - 1 0.9849 0.98110002 0.98000002 0.98070002 0.98150003 0.98009998 0.97729999 0.9734 1 1 1 1 1 0.99470001 0.99059999 - 0.98970002 0.99059999 0.99150002 0.9896 0.98549998 0.98009998 0.95889997 0.972 0.99690002 1 1 1 0.99870002 0.99720001 0.99769998 0.9982 - 0.99599999 0.99119997 0.98470002 0.93279999 0.96270001 0.99370003 1 1 1 1 0.99970001 0.99940002 0.99879998 0.99629998 0.9921 0.98650002 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 0.99989998 1 1 1 1 1 1 1 1 1 - 1 0.99989998 0.99970001 0.99949998 1 1 1 1 1 1 1 1 1 1 1 0.99959999 - 0.9993 1 1 1 1 1 1 1 1 1 1 1 0.99980003 0.9993 1 1 - 1 1 1 1 1 1 1 1 1 1 0.99940002 1 1 1 1 1 - 1 1 1 1 1 1 1 0.99940002 1 1 1 1 1 1 1 1 - 1 1 1 0.99989998 0.99940002 1 1 1 1 1 1 1 1 1 1 1 - 0.99949998 0.99919999 0.99809998 0.9982 0.99919999 1 1 1 1 1 1 1 0.99919999 0.9989 0.99900001 0.98329997 - 0.98379999 0.98750001 0.99190003 0.99589998 0.99860001 0.99980003 1 0.99980003 0.99919999 0.99860001 0.99849999 0.99879998 0.95249999 0.96240002 0.97350001 0.98290002 - 0.98989999 0.9946 0.99720001 0.99849999 0.99870002 0.99860001 0.99839997 0.99849999 0.9989 0.93529999 0.95340002 0.96850002 0.97960001 0.9878 0.99330002 0.9964 - 0.99800003 0.99849999 0.99860001 0.99860001 0.99870002 0.99900001 0.95410001 0.96460003 0.97539997 0.98390001 0.99040002 0.99479997 0.99730003 0.99860001 0.9989 0.9989 - 0.9989 0.99900001 0.9993 0.98839998 0.98580003 0.98940003 0.99309999 0.99599999 0.99800003 0.99919999 0.99959999 0.99949998 0.9993 0.99919999 0.9993 0.99940002 - 1 0.99870002 0.99809998 0.9989 0.99989998 1 1 1 0.99989998 0.99949998 0.9993 0.99940002 0.99959999 1 1 1 - 1 1 1 1 1 0.99980003 0.99940002 0.9993 0.99940002 0.99959999 1 1 1 1 1 1 - 1 1 0.99970001 0.99940002 0.99940002 0.99949998 0.99970001 1 1 1 1 1 1 1 1 0.99959999 - 0.99949998 0.99959999 0.99970001 0.99980003 1 1 1 1 1 1 1 1 0.99989998 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.099260002 0.099299997 - 0.099349998 0.099399999 0.099459998 0.099529997 0.099600002 0.09967 0.09973 0.099789999 0.099830002 0.099849999 0.099859998 0.099090002 0.099150002 0.099210002 0.09928 0.099349998 - 0.099420004 0.0995 0.099579997 0.099650003 0.099720001 0.099770002 0.099780001 0.099789999 0.098889999 0.098980002 0.09905 0.099129997 0.099200003 0.09928 0.099359997 0.099440001 - 0.099519998 0.099590003 0.099650003 0.099660002 0.09967 0.098669998 0.098779999 0.098870002 0.098970003 0.099040002 0.09911 0.099189997 0.099270001 0.099349998 0.099420004 0.099480003 - 0.099509999 0.099519998 0.098420002 0.098549999 0.09866 0.09877 0.098849997 0.098920003 0.098990001 0.099069998 0.099150002 0.09922 0.099289998 0.099330001 0.099359997 0.09815 - 0.098300003 0.098420002 0.098530002 0.098619998 0.098700002 0.09877 0.098849997 0.098930001 0.098999999 0.099079996 0.099140003 0.099189997 0.097840004 0.098010004 0.09815 0.098269999 - 0.098370001 0.098459996 0.098540001 0.098619998 0.098700002 0.098779999 0.098860003 0.09894 0.099019997 0.097510003 0.097709998 0.09787 0.097999997 0.098119996 0.098219998 0.098310001 - 0.098389998 0.098470002 0.098549999 0.098640002 0.098750003 0.098849997 0.097170003 0.097390004 0.097580001 0.097750001 0.097889997 0.097999997 0.098099999 0.098200001 0.098279998 0.098360002 - 0.098439999 0.098549999 0.098669998 0.096819997 0.09708 0.0973 0.097499996 0.097690001 0.097840004 0.097960003 0 0 0 0 0 0 - 0.096450001 0.096749999 0.097029999 0.097290002 0.09753 0.097740002 0.097920001 0 0 0 0 0 0 0.096050002 0.0964 0.096749999 - 0.097110003 0.097439997 0.097740002 0.097989999 0.098200001 0.098360002 0.098459996 0.098530002 0.098470002 0.09843 0.095619999 0.096029997 0.09646 0.096929997 0.097390004 0.097800002 - 0.098169997 0.098480001 0.098729998 0.09888 0.098980002 0.098920003 0.098820001 0.095200002 0.095640004 0.096160002 0.096749999 0.097350001 0.097910002 0.098410003 0.098839998 0.099169999 - 0.099380001 0.099469997 0.099359997 0.099160001 0.094829999 0.095289998 0.095859997 0.096589997 0.097350001 0.098070003 0.098700002 0.099239998 0.099629998 0.099859998 0.0999 0.099689998 - 0.099349998 0.094599999 0.095040001 0.095640004 0.096510001 0.097450003 0.098310001 0.099040002 0.099660002 0.1 0.1 0.1 0.099859998 0.099310003 0.094769999 0.095279999 - 0.095919997 0.096809998 0.097750001 0.098630004 0.099380001 0.1 0.1 0.1 0.1 0.099739999 0.098899998 0.095299996 0.095880002 0.096510001 0.097269997 0.098070003 - 0.098860003 0.09956 0.1 0.1 0.1 0.1 0.099270001 0.09804 0.095729999 0.096299998 0.096890002 0.09753 0.098200001 0.098849997 0.099430002 0.099950001 - 0.1 0.1 0.099890001 0.098480001 0.096780002 0.09595 0.096490003 0.09702 0.097549997 0.098070003 0.098559998 0.098999999 0.09939 0.099780001 0.1 0.099430002 - 0.097429998 0.095200002 0.09595 0.096450001 0.096919999 0.097350001 0.097740002 0.09809 0.098389998 0.098640002 0.099009998 0.099509999 0.098590001 0.096079998 0.093309999 0.095770001 - 0.09623 0.096639998 0.096989997 0.097290002 0.09753 0.097719997 0.097850002 0.097970001 0.098099999 0.096929997 0.094489999 0.09166 0.77469999 0.77880001 0.78380001 0.79000002 - 0.79729998 0.80620003 0.8168 0.82840002 0.83950001 0.84630001 0.852 0.83600003 0.81770003 0.7755 0.77920002 0.78390002 0.7899 0.79729998 0.80690002 0.81910002 - 0.83319998 0.84820002 0.85979998 0.87029999 0.83710003 0.79820001 0.77920002 0.78259999 0.78719997 0.79299998 0.80000001 0.80909997 0.8204 0.83359998 0.8477 0.85829997 - 0.86799997 0.82279998 0.77890003 0.78500003 0.78820002 0.79269999 0.79790002 0.80400002 0.81160003 0.82059997 0.83050001 0.84039998 0.8452 0.84789997 0.82050002 0.79449999 - 0.79250002 0.7956 0.79970002 0.80409998 0.80919999 0.81529999 0.82169998 0.82819998 0.83420002 0.83579999 0.83569998 0.82560003 0.81620002 0.80140001 0.80419999 0.80809999 - 0.81209999 0.81629997 0.82080001 0.82520002 0.82920003 0.83279997 0.83469999 0.83609998 0.83429998 0.83340001 0.8118 0.81440002 0.81809998 0.82169998 0.82520002 0.82859999 - 0.83170003 0.8344 0.83710003 0.83939999 0.8416 0.84399998 0.84750003 0.8229 0.82550001 0.829 0.83240002 0.8355 0.83850002 0.84100002 0.8434 0.84570003 - 0.8484 0.8513 0.85540003 0.861 0.83389997 0.83670002 0.84009999 0.84350002 0.84670001 0.84969997 0.8524 0.85479999 0.85750002 0.86059999 0.86400002 0.86900002 - 0.87589997 0.84420002 0.84719998 0.8506 0.85409999 0.85769999 0.86110002 0.86440003 0.86750001 0.8707 0.87470001 0.87900001 0.88429999 0.89209998 0.8531 0.85619998 - 0.85949999 0.86320001 0.86720002 0.87110001 0.87510002 0.87889999 0.88319999 0.88819999 0.89359999 0.90109998 0.91070002 0.85979998 0.86269999 0.86589998 0.86949998 0.87339997 - 0.87730002 0.88120002 0.88529998 0.88959998 0.89429998 0.89920002 0.90600002 0.91339999 0.86449999 0.86690003 0.86949998 0.87239999 0.87540001 0.87849998 0.88160002 0.88459998 - 0.88749999 0.88999999 0.89230001 0.89420003 0.89560002 0.86790001 0.86940002 0.87089998 0.87260002 0.87449998 0.87629998 0.87779999 0.87910002 0.87959999 0.87889999 0.87760001 - 0.875 0.8714 0.87029999 0.87050003 0.8707 0.87110001 0.87159997 0.87190002 0.87180001 0.87099999 0.8689 0.8653 0.86070001 0.85439998 0.84630001 0.8721 - 0.87099999 0.86970001 0.8689 0.8682 0.8671 0.86540002 0.86299998 0.85890001 0.8531 0.84579998 0.83590001 0.82380003 0.87449998 0.87279999 0.87059999 0.86849999 - 0.86629999 0.86409998 0.86129999 0.85799998 0.85290003 0.84609997 0.83679998 0.824 0.80919999 0.87730002 0.87550002 0.87300003 0.87 0.86680001 0.86390001 0.86080003 - 0.8574 0.85250002 0.84570003 0.8351 0.82010001 0.8035 0.87959999 0.87769997 0.87529999 0.87220001 0.86909997 0.86610001 0.86320001 0.86019999 0.85619998 0.85089999 - 0.83950001 0.82200003 0.80369997 0.88139999 0.87980002 0.87769997 0.87519997 0.8725 0.87010002 0.86760002 0.86510003 0.86260003 0.86000001 0.84869999 0.82800001 0.8075 - 0.88200003 0.8811 0.87970001 0.8779 0.87599999 0.8743 0.87269998 0.87120003 0.87 0.86900002 0.85689998 0.83310002 0.80970001 0.88059998 0.88010001 0.87919998 - 0.87779999 0.87620002 0.87449998 0.87279999 0.87120003 0.86860001 0.86570001 0.852 0.82819998 0.8035 / - - -COPY - 'PERMX' 'PERMY' / -/ - - -PERMZ - 697.4924 765.9081 802.4531 511.012 202.8958 181.5319 81.5437 78.4464 114.3146 156.8783 150.1537 176.9209 239.3154 468.4843 802.4531 802.4531 - 559.1226 219.5572 175.546 115.8611 212.892 253.0909 160.8565 148.5344 194.4523 89.6852 182.9599 371.6884 658.2463 802.4531 318.2446 288.6669 - 620.8073 510.9941 368.9833 177.6866 123.013 59.891 217.5658 365.4312 257.6846 634.2731 693.0987 300.5877 187.7338 269.0099 252.1936 338.0314 - 201.3139 103.781 136.9438 327.0849 172.9233 228.7979 617.589 802.4531 441.8483 476.6772 259.8311 248.6356 459.9699 264.1651 169.7911 188.5303 - 192.4667 180.9711 404.0465 465.7547 802.4531 762.9039 521.6399 310.963 277.6994 522.3847 243.1567 131.6142 109.5437 235.2197 98.1696 132.8625 - 281.0796 576.4042 802.4531 802.4531 296.0374 338.755 426.6762 141.8938 112.6431 272.8468 346.6288 49.7362 121.2668 136.9616 438.0598 703.3048 - 425.2513 448.5762 465.7213 222.1633 287.9194 146.8508 171.1705 189.2733 50.4148 175.1958 327.7433 305.4231 309.1147 517.2991 788.8123 769.311 - 445.9083 332.8058 130.6361 185.3773 551.488 84.5345 107.5088 103.9342 353.0922 397.0233 681.616 802.4531 802.4531 649.0932 257.19 293.9381 - 194.0566 390.0495 191.1899 105.4667 135.527 318.4202 389.7563 393.1346 237.14 403.6193 530.9454 424.7079 253.3071 83.0275 91.8414 585.0456 - 276.0587 522.655 482.2897 284.0871 207.7148 75.8211 149.0215 288.9331 78.877 75.0861 51.4074 62.057 365.1674 512.0571 517.0622 225.6295 - 134.739 52.2052 41.4325 47.6788 39.8558 40.8085 33.4282 66.4279 48.2125 236.0502 491.0308 525.6146 423.5971 301.404 71.2638 52.859 - 40.2926 26.335 34.2633 55.9865 53.9516 49.7038 614.9698 299.5887 380.9355 412.2818 161.7484 91.2 76.9294 49.067 47.3526 33.7429 - 82.3051 94.376 83.4405 249.2991 315.9818 216.8413 132.4303 116.679 74.5172 63.7115 51.0464 24.6035 78.3933 191.7894 209.0793 101.4211 - 149.5887 326.5946 311.2081 97.4644 88.9286 126.0531 78.0656 63.6505 59.6022 126.063 156.2865 97.1922 253.1711 326.1761 356.4655 240.5779 - 282.8029 99.014 96.9452 79.8334 100.5698 53.3653 27.5155 134.7658 221.3173 132.9906 289.1482 420.0424 209.8319 395.3274 149.3361 45.2096 - 34.4637 55.4682 54.6327 75.009 151.8294 443.3803 391.8053 90.5937 101.8052 265.6838 343.7798 133.0437 197.402 68.521 107.3171 149.0907 - 145.679 309.9664 648.1604 347.2562 39.4827 92.4505 136.7828 173.3029 158.3087 200.6042 139.4467 220.7169 246.9369 258.6447 414.7245 489.4413 - 315.0383 39.8859 45.688 31.8268 85.743 115.3402 115.2635 74.2653 195.095 132.5688 279.4684 417.6595 734.6739 594.782 29.5348 27.3245 - 41.1278 32.7753 18.8208 14.3523 15.5736 15.1832 11.7564 16.1282 12.6199 9.1865 15.0024 29.7471 25.1453 42.7841 36.0008 33.0466 - 15.5139 11.0998 7.6487 16.385 12.5228 15.7468 8.9326 8.3016 41.1705 32.1926 17.8814 14.4707 11.5761 5.4831 7.6175 11.6528 - 13.7196 10.8906 11.5557 9.3344 18.4504 47.1705 13.7282 20.0304 20.7047 21.4416 10.9958 13.4185 19.9746 23.2602 17.0493 27.9921 - 18.5783 23.861 26.5157 25.0689 18.4066 17.8109 30.8618 19.7407 20.8929 18.8269 27.4819 23.6049 15.7694 37.3733 37.4957 52.692 - 85.6083 139.1357 52.3637 75.7604 40.2626 54.2518 93.5936 137.3318 50.763 52.2103 75.1782 84.519 46.4866 81.6278 72.6213 57.6159 - 92.6924 88.7181 85.6607 139.8661 165.3037 153.7431 91.0223 193.7404 163.8519 91.5345 117.8643 100.1646 121.5321 155.8224 206.3778 155.1817 - 138.3361 291.134 205.4564 144.1187 100.1684 210.3778 170.2071 61.8928 63.5679 118.9029 206.4813 204.6593 204.4606 191.5653 277.8092 317.7909 - 389.5347 285.5573 160.5591 216.3848 326.4049 180.4976 200.9285 500.2905 299.3323 246.712 143.8127 236.9847 219.061 240.982 176.6357 146.4499 - 219.4019 162.759 105.6053 300.2251 754.3495 236.8435 126.52 111.1757 107.2262 246.7306 172.2682 117.2604 112.6204 358.67 463.5716 232.7138 - 301.4872 339.5697 133.2858 128.916 137.2898 137.6482 302.2361 425.1808 236.1753 98.6428 631.9451 287.6167 351.0171 243.7936 299.3958 67.7429 - 89.8178 64.8873 111.041 253.1932 219.5007 74.4717 71.2641 622.8347 444.071 188.1819 317.1656 320.1656 115.2021 77.4816 77.4194 123.7603 - 157.0212 113.5131 102.0903 71.3051 802.4531 435.0375 285.0935 253.586 142.7687 86.9183 89.4798 158.7188 249.8999 108.6093 64.8476 155.136 - 96.6897 802.4531 625.9974 390.4779 320.4987 341.361 293.0461 181.436 215.3267 236.8445 166.4779 97.8263 113.9064 77.8878 718.1057 666.5281 - 250.8103 179.6401 221.1568 173.4181 238.6797 268.9124 255.4773 301.0999 203.3391 161.5965 189.6401 380.9372 249.1534 141.6145 116.2019 118.1217 - 137.6296 204.0282 234.1256 244.9034 199.8933 158.5079 262.4678 242.6097 258.0906 77.9391 70.7238 62.405 114.8703 135.5007 123.8727 179.6748 - 224.4727 197.7174 152.0857 285.5512 192.6593 250.189 145.521 92.4616 85.7172 87.3376 64.9573 113.1314 160.1968 213.7405 221.9849 177.5949 - 246.2993 280.7267 122.5743 114.378 63.7695 104.2707 144.9192 184.8537 172.8548 308.3928 400.2776 271.0698 182.2602 285.722 519.9299 202.8733 - 110.5058 46.7141 106.6111 109.5115 94.8305 135.1531 316.676 473.8551 469.2518 235.4491 237.2198 797.0289 5.2217 7.9812 5.4808 15.2747 - 26.1452 39.5592 39.2616 24.0768 15.8577 14.7682 13.1342 10.3344 5.5926 5.9277 7.0896 16.2747 33.3264 29.8035 45.2668 44.1451 - 29.8504 25.9708 14.6977 17.6334 9.0469 7.4617 6.7633 8.5524 10.465 20.4575 25.4827 31.3673 24.1276 26.9329 28.5435 38.8116 - 22.4381 11.5888 9.0679 11.0458 10.692 16.3289 21.6004 16.4403 11.681 20.6675 22.3877 21.4807 32.5077 20.9737 14.228 17.5677 - 9.1384 10.5149 22.1271 16.8215 14.5795 21.4334 17.2683 38.0331 28.2164 10.7625 14.0904 20.3974 15.9245 8.1122 10.5895 11.8688 - 13.1415 10.801 14.8436 11.8483 10.4957 16.4928 14.2973 19.596 34.127 31.0475 9.822 10.9936 16.0634 19.7468 18.894 10.0076 - 19.387 9.756 21.1807 24.8071 39.7675 34.8817 30.8237 17.9179 16.3673 22.1258 24.9454 18.3218 21.8961 11.6277 13.4199 16.7735 - 20.0176 24.2122 13.8398 10.3696 16.2893 15.4341 19.2034 41.8526 94.6328 43.2285 9.748 9.0265 12.6854 13.8051 8.6109 17.7029 - 19.6949 27.2595 25.2213 45.4067 57.5615 71.6488 49.4925 55.2735 24.5109 21.7771 11.6184 19.4154 12.7756 13.6265 28.056 52.9804 - 45.8334 59.6895 19.95 104.4443 64.3458 21.9853 20.8264 17.3596 17.763 16.1778 13.1355 84.4734 178.0418 32.5788 23.1397 21.6161 - 21.852 31.3183 25.5295 10.9211 10.8081 20.9339 18.8057 21.8241 96.8286 122.6361 42.2396 39.0519 12.7556 7.5753 13.8509 21.4863 - 13.3925 20.8441 13.7074 11.9644 21.8813 101.4221 74.1358 41.361 103.2066 45.66 23.2635 15.9442 20.9773 18.8306 12.7034 13.4928 - 11.0561 11.2228 134.0824 83.9615 59.1363 43.4402 42.1982 33.8361 29.3689 17.474 9.964 11.1036 10.7156 14.9494 15.086 136.1632 - 71.5343 61.1381 21.2644 20.3101 23.0275 31.1473 24.9952 24.6468 19.0151 15.0183 9.67 16.4788 54.6054 40.7199 55.0622 45.8127 - 48.4634 47.8974 37.8419 30.694 27.5143 18.5428 11.6533 7.263 11.4901 15.9019 30.8206 37.78 20.5782 24.7788 33.9227 30.1203 - 40.5508 48.1101 16.8101 17.7795 9.9427 15.9822 7.5371 12.9192 10.1834 10.9069 12.2761 36.3931 30.6336 34.7418 60.4931 63.9873 - 18.0408 15.5796 7.1713 7.8606 7.5929 5.4457 7.628 10.0365 22.2522 22.1815 29.7041 39.9293 69.5373 29.4146 10.1419 8.8779 - 4.4638 3.3266 4.9289 9.0429 22.5575 34.7197 23.6364 28.4677 73.5906 103.9831 17.653 12.5921 12.1328 4.7075 5.3814 7.0315 - 11.5372 25.1457 37.9123 25.3372 40.0271 24.969 22.8098 14.9691 10.9095 9.1472 39.1486 33.4124 38.7185 45.216 41.1248 32.9775 - 35.3232 20.4502 17.577 37.9964 43.1102 44.2328 28.0602 30.0744 37.9174 35.2711 58.6732 68.9677 52.8865 61.4677 64.8259 54.6207 - 49.2027 41.5456 89.4437 91.1124 33.4527 36.8568 27.9617 31.3076 50.628 48.9572 83.2328 93.3352 68.9182 108.8332 133.2975 206.7751 - 81.0571 32.095 34.7536 36.6803 36.6893 34.053 50.1501 49.9501 58.6222 150.2255 138.4782 132.6192 123.6415 178.5838 45.0312 40.5454 - 26.9188 38.0684 56.5695 89.5239 90.6671 85.1277 131.1015 99.3163 93.622 115.9413 60.7131 99.6322 74.4464 79.0428 107.8304 71.8811 - 157.0962 211.9128 121.1959 115.6483 82.4431 100.1186 68.2507 100.6805 64.7713 93.6662 127.8152 107.7514 50.9005 69.5277 159.9821 142.2619 - 66.3402 137.2351 208.8416 80.5277 93.385 80.2499 94.7393 53.9195 89.5482 44.1215 44.6606 86.0918 74.2526 60.569 49.469 121.4565 - 114.2613 202.2357 26.7352 27.1313 39.0974 66.8741 36.0062 25.374 33.1008 56.5603 52.2092 32.5555 39.8334 41.222 55.5046 32.0366 - 23.7715 27.2152 46.3509 77.1375 39.2329 23.4993 29.0869 48.3851 25.2971 27.8039 16.7516 29.1256 62.7812 165.7674 44.4225 40.3951 - 43.3273 19.7042 25.1481 30.7752 43.4419 26.3774 18.2872 9.5467 14.6328 35.8837 64.8531 46.1931 33.9211 18.1592 21.0905 18.6633 - 41.2201 57.1582 50.6125 18.4327 9.8219 11.8735 36.4613 26.9359 32.8484 34.6326 17.9629 17.6747 24.9867 21.014 43.7383 21.7528 - 19.3486 10.9729 15.3738 15.5323 13.1326 31.1081 19.1797 15.6119 8.6468 12.2905 20.6789 23.2452 22.1523 20.1643 8.0393 8.789 - 26.1578 12.4017 20.25 15.8942 9.7529 9.8437 10.2794 13.8954 8.7069 15.5485 17.0453 14.2333 9.337 9.0549 19.2635 8.4599 - 7.7196 5.3002 6.9269 4.4786 10.1687 8.1747 11.14 16.3567 11.195 13.0809 11.8578 16.999 9.84 4.7679 4.61 9.6358 - 9.1967 8.4373 13.2227 11.1057 9.8061 12.2617 11.219 3.9836 3.5985 4.9324 9.1554 10.7277 11.8368 11.943 11.1407 17.6971 - 17.1266 8.3291 11.0801 14.5719 6.1452 3.5271 3.9311 12.7092 17.7822 13.4333 13.9022 15.9826 26.6586 20.5017 21.1323 8.4838 - 7.275 3.4688 4.0943 6.2041 9.4723 27.5071 25.0835 13.3376 25.1645 20.1856 24.7931 35.9945 16.9653 12.2561 2.6795 3.6925 - 4.6713 8.5588 18.3358 15.1697 11.2128 12.6955 7.9245 11.3929 12.1901 9.5702 12.1473 5.792 6.96 3.4974 2.73 4.7943 - 3.2915 7.7289 4.926 8.7533 8.8237 11.9529 9.0194 9.2454 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 - 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 - 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 - 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 - 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 - 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 - 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 - 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 - 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 - 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 - 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 - 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 - 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 - 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 - 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 - 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 - 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 - 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 - 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 1221.5592 96.6591 143.2996 131.8145 201.6263 201.8314 180.1355 184.5658 168.8875 80.7919 22.4686 - 20.363 16.453 10.9939 116.7027 157.3284 214.4864 204.2849 186.3809 180.3912 151.2447 150.5095 100.9517 50.1955 36.8861 41.0058 16.4693 - 135.2804 132.663 140.3879 183.4384 195.4603 214.8717 129.6105 84.8041 71.3707 57.3055 54.5308 47.1398 24.0969 113.8855 100.0876 150.7248 - 211.6415 114.2776 133.7353 95.6592 66.6208 53.8549 67.9576 59.1674 51.007 31.4694 60.9316 79.7432 67.4844 67.2389 68.3948 65.8835 - 92.2869 90.5556 59.5243 51.5301 47.222 34.9007 33.8458 109.5101 100.5124 57.4368 52.5088 49.862 67.9955 76.9989 85.9657 55.5565 - 53.4996 48.0519 44.2533 37.129 59.207 48.1251 43.5265 38.6336 60.6877 79.9239 79.3688 61.1851 73.3984 36.6732 33.017 35.5224 - 42.7258 35.8898 44.4777 49.1376 64.6537 83.6834 157.4271 104.9637 84.2473 119.9296 68.3715 67.6508 39.6652 51.8637 13.8401 31.3986 - 43.9857 56.8481 31.4116 100.712 110.558 123.5597 85.1228 84.77 126.4453 66.6896 76.592 25.2408 40.1534 30.7212 47.2388 181.7844 - 119.942 120.742 100.7701 99.3569 92.1474 106.2706 126.7275 86.1736 16.2879 27.7623 71.6631 71.1141 74.9985 82.0738 98.3561 138.8765 - 117.6758 139.598 181.9925 127.2459 374.5971 16.8056 35.0688 48.4024 63.3975 70.6914 80.3742 70.183 80.8368 124.9799 115.4775 130.8748 - 98.4921 153.1161 30.5396 41.354 41.0618 46.4556 58.4743 41.3955 69.4513 47.2523 95.2397 94.5636 95.4369 86.5637 61.7945 38.9946 - 54.8275 47.5403 42.5508 42.1133 42.1503 59.6463 70.2 71.0308 56.2069 45.1724 43.6906 41.5307 60.1668 52.3658 75.4435 65.0047 - 32.7721 28.1141 52.4727 41.9751 59.4225 48.7619 26.8289 32.4039 34.3276 65.1274 72.6049 54.174 44.8626 23.8772 26.5078 30.7238 - 36.0811 41.322 51.4989 46.058 19.4251 25.2813 50.3292 93.4468 68.9897 49.8269 23.0895 30.5384 31.7705 49.7284 55.8095 57.8208 - 45.3095 55.5568 91.2533 53.6121 69.9246 65.586 37.2474 55.5998 42.3429 36.5556 38.6187 53.7886 81.5825 63.139 65.1402 125.7993 - 49.097 40.3842 47.1107 32.9317 33.8244 29.8234 32.5218 42.6756 55.3271 99.9112 100.6117 70.4427 87.4338 55.9178 47.8424 34.039 - 21.7407 33.8971 28.9848 31.5993 35.289 60.7174 83.5474 95.9556 119.3877 88.5378 38.9217 39.8902 39.2789 35.4381 34.0369 34.9489 - 34.5582 30.2001 42.5417 64.6541 60.1624 54.1892 61.638 25.2969 30.9695 35.6599 37.9639 34.9825 44.0964 36.4977 22.0591 24.2628 - 34.1474 36.5597 25.7752 24.6848 17.4424 19.9613 19.6575 21.351 21.0561 25.8022 36.7183 23.9534 29.3052 17.6804 30.6601 22.3165 - 21.4188 23.6689 18.0479 13.9567 22.4444 16.8676 22.1986 24.2718 30.2835 34.8916 26.1264 33.6145 19.2265 21.1105 28.8692 20.879 - 12.9051 10.4727 22.7592 23.133 37.2211 37.5933 56.8426 41.5918 37.2666 27.2003 15.5012 29.1265 32.4696 25.4682 17.2207 21.7358 - 22.2384 35.2842 84.295 69.2501 73.9592 63.3123 43.6309 24.8636 44.8065 36.4337 23.9266 21.26 20.0088 28.3107 31.6214 74.9597 - 71.7385 75.4848 67.2668 37.8462 45.8636 61.5486 46.4338 53.1081 42.2054 23.0514 29.2743 25.6611 45.4117 32.5628 43.1532 32.5707 - 38.5405 29.7538 32.7229 47.9415 61.957 58.6083 66.4859 60.6198 22.151 24.4353 22.2677 25.8326 25.4735 37.468 55.278 29.3337 - 65.6065 84.3966 87.6997 71.8323 37.5491 39.6202 36.4231 35.2846 51.6883 41.612 42.6918 37.909 10.5296 32.9262 55.0578 170.3486 - 51.8719 62.3093 50.0693 30.1704 34.6594 52.4741 36.9169 50.8984 45.3831 12.7077 38.7984 93.8822 150.7998 158.0342 63.6041 63.983 - 80.3263 60.5981 60.3489 85.9202 51.9016 47.3475 19.1709 27.6043 76.6354 103.5653 64.7213 101.6283 57.3278 77.0787 63.9625 97.5226 - 76.086 63.1846 173.9273 20.0257 35.3379 52.1826 70.5402 45.2838 63.4698 66.7978 59.6989 62.838 78.3305 128.0912 104.9285 87.0411 - 14.3979 25.7659 79.1151 87.6405 67.42 69.1521 44.1269 42.4391 76.1289 94.3834 112.1972 56.5098 54.2481 16.3425 29.6606 48.7618 - 72.3125 65.1796 74.6656 70.5375 34.6002 38.4454 71.3761 71.4935 52.3372 35.3863 29.7211 48.9365 100.1283 70.7367 51.1557 76.2293 - 94.1814 71.7256 64.1925 52.1105 46.0504 44.0646 50.4085 37.8887 67.9703 134.0722 111.8366 85.4908 68.9983 64.39 60.5459 70.5553 - 48.4719 35.683 37.7184 68.1643 61.6035 74.0708 110.4781 88.8309 113.836 125.333 153.257 82.005 75.1491 70.5048 46.124 49.086 - 63.0353 74.2264 97.759 193.665 82.7845 100.0175 99.5297 114.6168 82.6577 74.602 73.7217 40.5592 30.766 72.6737 98.9301 119.08 - 94.5549 125.3893 86.6695 78.284 78.7341 44.6417 51.3549 49.9887 49.6646 29.0063 33.385 70.1016 70.6598 84.7367 78.5186 84.6139 - 72.1297 63.2775 82.4511 54.7384 34.214 32.8875 39.0741 22.1309 43.449 62.1492 51.8581 68.2509 56.1172 62.5802 59.7394 77.2359 - 33.9106 30.4472 19.3436 27.8438 28.0193 29.9142 35.4109 34.7413 64.8591 49.7209 70.1225 85.7215 68.8344 46.992 26.8004 25.1261 - 32.0221 22.7664 20.4513 25.4246 22.3607 27.8232 37.6025 56.596 65.1245 62.8403 40.2208 33.4269 22.9046 25.3705 31.9886 39.2625 - 25.1397 22.5814 27.9418 33.8564 43.3547 55.7895 60.127 65.0364 47.753 40.3797 34.5396 30.2532 30.3469 22.6785 28.7873 38.1614 - 36.3095 39.7087 57.5025 56.6537 56.7103 57.8552 51.9703 40.0604 31.7659 25.4899 29.2463 35.4982 31.1426 32.2951 44.2112 35.4315 - 61.7624 84.5971 72.0553 64.9405 38.1205 36.8894 30.2191 28.3453 36.1187 27.3736 42.0578 39.6828 40.6017 41.8533 42.1408 52.1792 - 40.6633 35.6215 28.6735 29.324 32.864 35.3501 40.7135 39.565 37.8015 27.6324 22.2457 23.5582 37.6027 37.9577 33.276 50.0618 - 34.2431 38.9085 23.1305 39.2251 34.166 32.6731 23.3531 22.6146 18.675 24.0263 35.0515 46.7819 35.6762 67.0801 36.9884 27.8936 - 42.0613 30.7197 27.3526 31.9904 27.126 22.4662 32.3323 33.4292 45.2054 34.3758 63.8829 39.1317 31.9385 29.6709 32.7823 28.1286 - 25.9861 29.3736 49.3182 38.8185 38.8777 75.6698 46.6178 87.2897 44.9337 39.7665 26.4687 8.4545 25.9388 36.6053 52.1075 51.8242 - 58.0211 68.6989 44.3846 98.4214 107.242 67.1328 69.4905 32.6479 30.7327 27.5544 42.0253 52.3198 54.9511 91.8637 100.2484 121.9194 - 169.6673 101.1438 90.2561 69.7322 65.8377 47.9476 55.9306 60.9737 79.2291 125.7325 113.5181 140.4711 133.4888 222.1816 85.0969 87.242 - 117.1487 86.0287 81.6636 84.1294 88.4157 83.7034 147.5651 174.9591 178.8347 167.0245 142.0571 77.5101 95.1872 150.0024 146.3137 114.0205 - 115.8655 116.8477 124.255 115.2792 122.0939 210.7582 155.1116 173.0162 77.9391 90.7003 114.5947 134.7536 148.4163 120.9662 144.9112 136.9095 - 163.8641 139.7939 145.8651 153.7137 113.0106 92.8776 100.4623 102.7903 129.8518 114.8501 106.9511 114.085 167.6098 143.2222 108.368 117.0065 - 139.6149 134.8898 120.4697 114.0031 106.808 116.4572 92.8237 73.8628 67.338 152.1436 133.8702 144.2795 124.2789 142.2264 167.8862 108.0391 - 57.1419 70.9849 74.4701 87.8265 71.3031 54.9095 71.2492 88.2596 127.125 130.5577 204.7556 178.5761 74.6279 34.1297 27.3752 30.6256 - 43.718 51.6352 44.3383 42.1635 50.0304 94.0014 116.0193 131.4369 112.2544 54.7262 28.8648 25.2006 25.4868 31.3201 29.3275 25.8604 - 27.5459 45.0408 62.4273 104.8718 161.1903 127.112 36.5489 25.3937 19.3842 16.7832 15.6552 17.1576 26.4584 38.3323 32.2476 37.7462 - 64.1083 79.9931 89.6328 44.9475 20.8102 18.2819 16.4991 12.3739 19.4846 21.5508 30.6088 24.6285 44.1658 74.0346 95.5163 78.9219 - 1245.7572 765.6351 532.123 910.7639 1156.3215 794.1694 812.5096 700.3173 457.4658 462.3641 389.1399 447.2935 606.6014 543.6765 472.2376 482.8996 - 497.6648 1629.0046 1858.3247 1442.6113 1076.3075 804.8757 534.0892 394.1786 467.7559 465.7752 974.3112 601.3547 565.0012 595.1263 1634.3396 1451.8627 - 1612.2264 1310.6239 820.9845 752.4001 673.9813 462.0176 464.6665 799.4404 527.2844 624.6304 1127.1782 1484.4716 2363.627 2129.4209 1243.9022 1033.6429 - 636.3427 694.7457 750.7896 534.032 504.2964 573.1338 963.72 1078.3536 2363.627 2363.627 2363.627 1527.4359 1212.6298 981.8273 1027.058 961.5729 - 626.7822 848.2086 930.343 885.7779 1198.9176 1597.6035 2363.627 2363.627 1640.526 1199.4156 837.5487 879.5258 998.7132 568.4139 1158.1614 1067.2651 - 1390.6965 1684.0175 1197.3824 2001.1636 1754.1448 1211.7124 950.6523 418.7981 542.5703 979.7677 812.4081 1090.9176 1095.494 1199.2772 1110.3439 1308.2887 - 2324.2778 1597.8892 1718.0393 754.0656 674.9786 521.491 718.0764 919.8103 1150.0513 1083.155 1089.3931 1455.2382 1836.061 2186.615 2210.9526 1387.8387 - 821.0275 714.5044 633.9277 1106.6915 563.5176 1235.6472 682.9279 657.433 833.0153 1036.5447 1568.4581 1992.6394 1248.9607 1205.5964 678.4254 938.2386 - 924.1727 1186.6597 910.712 1064.748 638.8071 838.5641 780.2559 958.8859 1005.6011 587.0714 987.7417 656.1772 692.6608 787.6706 961.2232 883.5228 - 551.2886 662.6336 768.6912 692.8881 700.8908 874.7489 684.913 764.5093 1173.6426 1072.118 612.0054 756.3177 384.2765 374.4121 578.2278 724.792 - 670.645 600.4003 748.9988 1036.775 651.5612 1109.7052 1200.6024 999.1462 781.4503 286.0923 208.4379 304.7654 380.8438 558.3438 508.9249 500.9335 - 761.0696 932.4548 820.9799 1139.3491 765.8776 636.2372 578.3011 427.8368 503.5468 659.7866 756.8246 580.2978 698.0897 768.0401 983.494 990.5391 - 835.1993 993.5576 750.9958 608.8196 937.8035 964.2246 1612.1727 965.2053 1017.8862 881.4487 649.1553 1105.4636 1126.3815 1124.1199 1565.15 723.5551 - 809.9875 1514.0635 1973.2437 1103.3718 1777.8179 1107.4679 760.4961 653.9073 786.335 1190.2849 1249.7137 971.9854 408.8143 1747.892 2176.1477 1618.2117 - 2363.627 1970.0499 1328.0165 937.1069 690.3523 643.0319 1101.5129 911.0913 874.2443 900.7352 2186.3135 1935.8898 1063.3558 1563.4 1623.7745 1407.858 - 1290.2321 955.0909 1133.6498 1018.2358 1199.9957 1127.1858 549.4963 2363.627 1934.405 960.9313 1037.1241 1100.696 1985.6027 1702.2806 1868.9336 1390.1899 - 962.4309 1418.9487 1096.4299 733.6417 2363.627 2099.9341 1495.4419 1237.1534 961.8253 1873.7415 2268.4067 2363.627 1563.8057 1222.0437 744.8339 894.2845 - 818.2163 1839.0645 1418.2622 1028.5582 1070.4666 1103.3666 2075.761 2363.627 2363.627 1761.4597 1863.1614 1419.9519 1791.2234 1286.9055 648.8721 572.7224 - 703.1494 984.8776 676.1422 358.2047 339.8335 342.7156 225.9667 143.815 154.7036 128.1696 149.7301 623.6219 951.3742 1101.2264 782.7321 643.5292 - 566.603 421.0359 399.7737 422.1178 356.0188 268.7239 183.0161 229.5867 861.3224 1084.1985 1066.9747 633.9 867.2061 1162.6682 464.9608 555.6182 - 693.3389 517.1313 421.2293 292.6621 377.5265 705.7698 861.8531 1277.8021 1277.8021 1249.6774 745.4774 321.5951 409.5626 524.1989 552.3498 461.2351 - 405.1577 315.0298 1147.2202 1277.8021 1277.8021 1277.8021 1277.8021 716.7689 546.6235 554.4596 376.2747 520.5375 681.9412 562.2168 324.2616 871.5153 - 1183.243 1277.8021 1277.8021 1277.8021 1104.5242 677.0436 487.4932 481.2822 765.3804 1168.1971 622.8002 244.7074 906.4248 1074.3258 1277.8021 1277.8021 - 1277.8021 1277.8021 606.3247 618.1525 543.5311 714.3167 868.1531 791.8462 365.7308 992.8657 1277.8021 1277.8021 1277.8021 1162.8063 1216.231 1017.8522 - 1022.1913 1073.3278 551.9478 592.2236 675.1458 500.4085 1140.3796 1253.4299 1277.8021 1277.8021 1277.8021 1233.0498 1277.8021 951.0935 836.0903 882.7505 - 886.8781 855.9943 491.0825 769.3113 864.5071 1277.8021 1277.8021 1277.8021 762.6008 1277.8021 1052.3942 1187.1255 1277.8021 1277.8021 1277.8021 625.6566 - 1212.8523 1277.8021 1277.8021 1277.8021 808.1835 1027.3186 1169.0892 963.9617 1277.8021 1277.8021 1277.8021 1264.9812 452.5226 1211.5061 1277.8021 1277.8021 - 1033.8239 1226.0629 1260.8391 1271.5173 1277.8021 1277.8021 1277.8021 1228.3041 1169.2336 498.6739 1277.8021 1229.1694 1197.9056 863.8309 817.1033 1277.8021 - 1277.8021 1277.8021 1277.8021 1277.8021 1277.8021 793.3005 534.8595 1277.8021 994.4692 1168.8846 1053.9071 783.1671 1105.4957 1277.8021 1277.8021 1277.8021 - 1277.8021 963.6078 742.4772 669.5468 1277.8021 1277.8021 1087.3871 708.2214 803.4964 880.3839 1277.8021 1277.8021 1277.8021 1218.3544 1051.4194 1196.5492 - 981.7562 1064.1866 1277.8021 710.8065 491.4966 441.7444 733.4825 759.1005 761.4467 956.57 852.8771 991.4033 946.6385 777.7864 559.6245 542.963 - 715.2271 573.1428 542.6806 392.546 596.1989 799.9075 1277.8021 1277.8021 659.4255 713.907 815.6765 732.7282 591.3231 431.3492 412.0673 516.7151 - 459.7115 590.2805 708.0894 1115.5532 1277.8021 634.1802 472.9031 679.0278 1224.8369 881.1819 523.7272 363.9987 477.5967 526.8795 518.3206 816.4365 - 927.2221 863.5505 846.1141 583.9117 731.2371 1166.5505 1107.0103 671.2494 406.4558 470.5792 357.602 527.5192 932.0374 1185.7677 948.2573 884.1107 - 892.7814 814.2985 1277.8021 1277.8021 1256.2189 531.5332 469.6382 386.8978 594.8676 1006.4334 1003.4079 779.4111 701.0172 804.1307 509.1919 1277.8021 - 1195.4503 1121.7896 571.4746 515.4268 628.0612 830.2981 831.4649 708.8322 811.638 914.8915 666.6885 461.2879 5.0735 5.8343 4.2752 9.0469 - 10.5517 18.1265 30.4109 32.2952 36.3522 19.3362 22.1164 38.2498 78.0008 14.3516 10.228 12.2065 21.4657 28.2985 58.77 40.4378 - 18.3411 14.1467 15.7008 13.6255 40.927 111.4892 21.2276 7.3949 12.5835 28.1757 69.2352 137.4846 39.1092 54.6511 25.727 14.2227 - 12.3161 25.0095 125.9996 12.4628 9.5164 10.4492 33.2251 110.3186 168.8143 70.2315 43.0028 31.4372 27.7593 31.7396 28.1691 57.2453 - 12.0752 12.1704 11.347 31.7327 48.0598 157.4951 90.1239 40.9759 37.6042 24.2083 33.2075 27.0142 69.151 20.6254 23.3228 49.1577 - 78.2426 86.0069 110.2606 78.7191 66.092 19.3149 29.524 34.984 38.7781 40.4458 32.0722 49.385 27.0025 36.9668 79.1949 50.1176 - 47.457 29.2427 19.9926 40.2342 45.3438 30.5969 84.8825 72.5066 65.088 48.5197 25.1932 40.0635 46.8747 83.9326 50.0652 49.59 - 78.0623 102.9707 68.2657 149.859 70.5817 57.4091 31.9016 82.3039 142.292 97.4025 125.3869 88.7434 110.0726 177.991 137.9599 93.0582 - 125.0391 66.9795 84.4732 140.9234 125.08 176.3107 173.8704 277.3422 246.0205 165.605 93.0152 44.2772 77.467 86.9735 90.8892 118.7477 - 101.5631 160.6374 109.1547 199.51 248.4445 277.3422 226.767 142.7157 86.7637 159.2534 104.2632 67.374 57.4417 57.6967 64.4412 87.3134 - 218.2255 206.0113 277.3422 237.6607 162.0255 166.2643 182.9914 70.1852 56.6578 41.9655 45.9608 116.9394 50.5488 93.3021 138.2225 87.5546 - 75.3919 69.8102 124.0436 216.8768 65.7315 121.627 86.9997 117.9263 47.8989 61.8882 87.2641 50.2105 128.9821 111.7977 145.6203 118.0879 - 84.1001 74.0358 144.0105 80.0063 197.1795 121.4346 91.2977 137.3524 134.4039 78.6161 97.7415 65.4093 93.233 37.1977 36.8567 89.7585 - 57.0127 38.4482 89.8806 85.229 95.1555 80.0968 158.9208 56.4546 31.2439 42.7605 44.2236 68.6191 94.7853 64.0263 88.5886 54.2327 - 48.3825 43.0929 70.513 41.1916 53.5702 88.3661 49.4761 53.8231 73.6638 76.3087 71.8224 51.9305 106.5829 54.6761 26.2517 10.7964 - 22.7702 44.7245 42.2756 53.5378 52.2046 138.067 109.8695 73.8878 45.2488 55.88 62.3573 35.3899 26.4082 18.2797 55.6618 49.6324 - 83.7575 79.4353 155.8088 124.271 79.8887 123.6289 63.3863 62.2269 87.0934 30.0653 24.7411 50.6517 68.3537 84.4829 99.6194 42.1934 - 135.4491 110.9356 91.4398 119.2922 65.2412 72.6453 68.7751 40.6148 37.3824 38.4769 49.8292 53.0263 25.6788 94.2321 118.4545 46.2192 - 86.4427 113.2669 111.1705 69.7986 36.3192 54.7277 53.9111 12.4252 17.9615 14.8654 / - - -RPTGRID - 'ALLNNC' / - - -EDIT - - -PROPS - - -NOECHO - - -PVTO - 18.9 50 1.09923 1.204 75 1.09498 1.257 100 1.09102 1.31 125 1.08732 1.361 150 1.08385 1.411 - 175 1.08058 1.461 200 1.07751 1.51 225 1.0746 1.558 250 1.07184 1.606 275 1.06923 1.653 300 - 1.06674 1.699 325 1.06438 1.744 350 1.06213 1.789 375 1.05997 1.833 400 1.05792 1.877 425 1.05595 - 1.92 450 1.05406 1.962 / - 28.8 75 1.12493 1.099 100 1.12036 1.148 125 1.1161 1.197 150 1.11211 1.246 175 1.10837 1.294 - 200 1.10485 1.341 225 1.10153 1.387 250 1.0984 1.433 275 1.09543 1.478 300 1.09261 1.523 325 - 1.08994 1.567 350 1.08739 1.611 375 1.08496 1.654 400 1.08264 1.696 425 1.08043 1.738 450 1.0783 - 1.779 / - 39.1 100 1.15053 1.004 125 1.14565 1.05 150 1.1411 1.096 175 1.13684 1.142 200 1.13284 1.187 - 225 1.12908 1.231 250 1.12553 1.275 275 1.12218 1.318 300 1.119 1.361 325 1.11599 1.403 350 - 1.11313 1.445 375 1.1104 1.486 400 1.1078 1.527 425 1.10532 1.568 450 1.10295 1.607 / - 49.6 125 1.17648 0.918 150 1.17129 0.962 175 1.16645 1.004 200 1.16192 1.047 225 1.15767 1.089 - 250 1.15367 1.13 275 1.1499 1.172 300 1.14633 1.212 325 1.14296 1.253 350 1.13975 1.292 375 - 1.1367 1.332 400 1.1338 1.371 425 1.13103 1.41 450 1.12839 1.448 / - 60.6 150 1.20304 0.841 175 1.19755 0.881 200 1.19243 0.921 225 1.18763 0.96 250 1.18313 0.999 - 275 1.17889 1.038 300 1.1749 1.076 325 1.17111 1.115 350 1.16753 1.152 375 1.16413 1.19 400 - 1.1609 1.227 425 1.15782 1.264 450 1.15488 1.3 / - 72 175 1.23042 0.771 200 1.22463 0.808 225 1.21922 0.844 250 1.21416 0.881 275 1.20941 0.917 - 300 1.20493 0.953 325 1.2007 0.989 350 1.19671 1.025 375 1.19292 1.06 400 1.18932 1.095 425 - 1.1859 1.13 450 1.18264 1.164 / - 84 200 1.25879 0.707 225 1.2527 0.741 250 1.24701 0.775 275 1.24168 0.809 300 1.23667 0.842 - 325 1.23195 0.876 350 1.22749 0.909 375 1.22328 0.942 400 1.21928 0.975 425 1.21548 1.008 450 - 1.21187 1.04 / - 96.6 225 1.28834 0.649 250 1.28194 0.68 275 1.27596 0.712 300 1.27036 0.743 325 1.26509 0.774 - 350 1.26012 0.805 375 1.25543 0.836 400 1.25099 0.866 425 1.24678 0.897 450 1.24277 0.927 / - 110.4 251.1 1.32061 0.614 275 1.31417 0.621 300 1.30786 0.65 325 1.30195 0.679 350 1.29639 0.707 - 375 1.29115 0.736 400 1.28619 0.764 425 1.2815 0.792 450 1.27705 0.821 / - 126.7625 275 1.35536054 0.60127 300 1.34850797 0.63066 325 1.34210625 0.65998 350 1.3361068 0.68921 375 1.3304683 0.71835 - 400 1.32515529 0.74738 425 1.32013715 0.77631 450 1.31538723 0.80512 / - 145.95479 300 1.39634977 0.59898 325 1.38882555 0.63029 350 1.38180073 0.66164 375 1.37522109 0.69301 400 1.36904056 0.72438 - 425 1.36321966 0.75575 450 1.3577243 0.7871 / - 167.58502 325 1.44287612 0.58627 350 1.43457426 0.61894 375 1.42682851 0.65178 400 1.41957803 0.68477 425 1.41277119 0.71789 - 450 1.40636377 0.75111 / - 192.00758 350 1.49575462 0.56355 375 1.48655392 0.5969 400 1.47797528 0.63057 425 1.46995016 0.66453 450 1.46242042 0.69874 / - 219.61513 375 1.55587341 0.53212 400 1.54563738 0.56541 425 1.53609955 0.59915 450 1.52718249 0.63332 / - 250.84133 400 1.62419059 0.494 425 1.61276798 0.52646 450 1.60213068 0.5595 / - 286.16345 425 1.70172854 0.45166 450 1.6889549 0.48259 / -/ - - -PVTG - 50 6.15e-06 0.02505 0.013753 0 0.025046 0.013759 / - 75 6.59e-06 0.016466 0.014284 / - 100 8.44e-06 0.01223 0.014937 / - 125 1.148e-05 0.009731 0.01573 / - 150 1.584e-05 0.0081 0.01667 / - 175 2.175e-05 0.006964 0.017755 / - 200 2.943e-05 0.006136 0.018976 / - 225 3.914e-05 0.005513 0.020319 / - 251.1 5.169e-05 0.005013 0.021834 0 0.005009 0.021839 / - 275 7.7191e-05 0.00468039 0.02343518 0 0.00448039 0.02323518 / - 300 0.000112319 0.00435637 0.02561585 7.7191e-05 0.0043568 0.02485907 / - 325 0.000157253 0.0040941 0.02823784 0.000112319 0.00409042 0.02712667 7.7191e-05 0.00408759 0.02629041 / - 350 0.000213008 0.00388322 0.03140336 0.000157253 0.00387354 0.02984042 0.000112319 0.00386606 0.02863235 7.7191e-05 0.00386035 0.02772051 / - 375 0.000280386 0.00371691 0.03524343 0.000213008 0.00369913 0.0331121 0.000157253 0.00368519 0.03143059 0.000112319 0.00367437 0.03012872 7.7191e-05 0.00366612 0.0291442 / - 400 0.000359957 0.00359066 0.03995291 0.000280386 0.00356257 0.03709296 0.000213008 0.0035402 0.03480953 0.000157253 0.00352254 0.03300917 0.000112319 0.00350877 0.0316147 - 7.7191e-05 0.00349825 0.03055916 / - 425 0.000452048 0.00350133 0.04585229 0.000359957 0.00346083 0.04201382 0.000280386 0.003428 0.03894387 0.000213008 0.00340162 0.03650144 0.000157253 0.00338067 0.03457936 - 0.000112319 0.0033643 0.03309163 7.7191e-05 0.00335177 0.03196541 / - 450 0.000556755 0.00344657 0.05346838 0.000452048 0.00339181 0.04824922 0.000359957 0.00334657 0.04410294 0.000280386 0.00330958 0.0408063 0.000213008 0.00327969 0.03819505 - 0.000157253 0.00325584 0.03614602 0.000112319 0.00323716 0.03456257 7.7191e-05 0.00322285 0.03336476 / -/ - - -PVTW - 277 1.038 4.67e-05 0.318 0 / - - -DENSITY - 856.5 1033 0.85204 / - - -ROCK - 277 6.11423e-05 / - - -SWOF - 0.1 0 1 5 0.12045 9.6958e-07 0.9862 2.2918 0.14091 5.6822e-06 0.96584 1.0081 0.16136 2.0403e-05 0.93981 0.66124 - 0.18182 5.8712e-05 0.90818 0.50115 0.20227 0.00013428 0.87185 0.40172 0.22273 0.0002641 0.83129 0.33433 0.24318 0.00046949 0.78694 0.2859 - 0.26364 0.00077612 0.73929 0.24953 0.28409 0.0012146 0.68893 0.22124 0.30455 0.0018209 0.63654 0.19865 0.325 0.0026376 0.58284 0.18021 - 0.34545 0.003714 0.52859 0.16487 0.36591 0.0051554 0.4747 0.15214 0.38636 0.0070157 0.42204 0.14122 0.40682 0.009371 0.37127 0.13174 - 0.42727 0.012317 0.32297 0.12344 0.44773 0.015965 0.27764 0.11611 0.46818 0.020441 0.23565 0.1096 0.48864 0.025888 0.19728 0.10379 - 0.50909 0.032468 0.1627 0.098564 0.52955 0.040363 0.13196 0.09384 0.55 0.049979 0.10544 0.089592 0.57045 0.061472 0.08267 0.085716 - 0.59091 0.07506 0.063335 0.082161 0.61136 0.091037 0.047196 0.078888 0.63182 0.10973 0.033989 0.075861 0.65227 0.1315 0.023436 0.073056 - 0.67273 0.15679 0.015254 0.070449 0.69318 0.18617 0.0091624 0.068018 0.71364 0.22044 0.0048858 0.065746 0.73409 0.2621 0.0022892 0.063627 - 0.75455 0.31901 0.00095312 0.061632 0.775 0.38232 0.0003764 0.059826 0.79545 0.43215 0.00013031 0.058129 0.81591 0.48314 2.7034e-05 0.056453 - 0.83636 0.53541 6.3467e-08 0.054791 0.85682 0.5934 0 0.053113 0.87727 0.65148 0 0.051435 0.89773 0.70957 0 0.046058 - 0.91818 0.76765 0 0.039718 0.93864 0.82574 0 0.029817 0.95909 0.88383 0 0.019878 0.97955 0.94191 0 0.009939 - 1 1 0 0 / - 0.1 0 1 5 0.12045 4.2647e-07 0.99071 2.4057 0.14091 2.6546e-06 0.97575 1.1487 0.16136 1.0052e-05 0.95559 0.78136 - 0.18182 3.0826e-05 0.93006 0.60341 0.20227 7.4304e-05 0.89984 0.4902 0.22273 0.0001526 0.86518 0.41201 0.24318 0.00028144 0.82631 0.35499 - 0.26364 0.00048037 0.78353 0.31161 0.28409 0.0007733 0.73723 0.27754 0.30455 0.0011891 0.68793 0.25007 0.325 0.0017625 0.63622 0.22748 - 0.34545 0.0025344 0.5828 0.20855 0.36591 0.0035915 0.52842 0.19273 0.38636 0.004983 0.47413 0.1791 0.40682 0.0067765 0.42074 0.16719 - 0.42727 0.0090583 0.369 0.15671 0.44773 0.011929 0.31957 0.14743 0.46818 0.015506 0.27305 0.13915 0.48864 0.019925 0.2299 0.13173 - 0.50909 0.025341 0.19048 0.12503 0.52955 0.031934 0.155 0.11896 0.55 0.0401 0.12403 0.11347 0.57045 0.050021 0.097201 0.10846 - 0.59091 0.06195 0.074255 0.10384 0.61136 0.076229 0.054995 0.09958 0.63182 0.093262 0.039176 0.095632 0.65227 0.11354 0.026523 0.091962 - 0.67273 0.13769 0.016738 0.088546 0.69318 0.16659 0.0095172 0.085355 0.71364 0.20157 0.0045528 0.082365 0.73409 0.24668 0.001706 0.079575 - 0.75455 0.31551 0.00046629 0.076944 0.775 0.39328 0.00011956 0.074592 0.79545 0.44643 4.1394e-05 0.072391 0.81591 0.49995 8.5875e-06 0.070196 - 0.83636 0.55387 2.0161e-08 0.068006 0.85682 0.60961 0 0.065811 0.87727 0.66538 0 0.063615 0.89773 0.72115 0 0.055137 - 0.91818 0.77692 0 0.045021 0.93864 0.83269 0 0.033775 0.95909 0.88846 0 0.022517 0.97955 0.94423 0 0.011258 - 1 1 0 0 / - 0.1 0 1 5 0.12045 1.1424e-06 0.98517 2.0861 0.14091 6.5359e-06 0.9644 0.81722 0.16136 2.3024e-05 0.93853 0.54898 - 0.18182 6.4998e-05 0.90756 0.42158 0.20227 0.00014656 0.8723 0.34092 0.22273 0.00028511 0.83309 0.28536 0.24318 0.00050233 0.7903 0.24488 - 0.26364 0.0008242 0.74432 0.2141 0.28409 0.0012815 0.69565 0.18992 0.30455 0.0019104 0.64485 0.17043 0.325 0.0027533 0.59256 0.15438 - 0.34545 0.0038594 0.53946 0.14093 0.36591 0.005334 0.48638 0.12968 0.38636 0.0072303 0.43416 0.11999 0.40682 0.0096239 0.38347 0.11152 - 0.42727 0.01261 0.33491 0.10406 0.44773 0.016301 0.28903 0.097448 0.46818 0.020823 0.24625 0.091549 0.48864 0.026322 0.2069 0.08626 - 0.50909 0.032963 0.17122 0.081482 0.52955 0.040937 0.13932 0.077148 0.55 0.050667 0.11164 0.073232 0.57045 0.062331 0.087773 0.069651 - 0.59091 0.076182 0.067427 0.066355 0.61136 0.092564 0.050387 0.063313 0.63182 0.11187 0.036402 0.060496 0.65227 0.13458 0.025198 0.05788 - 0.67273 0.16126 0.016489 0.055446 0.69318 0.19266 0.0099822 0.053173 0.71364 0.22984 0.0053891 0.051047 0.73409 0.2758 0.0025616 0.049068 - 0.75455 0.3369 0.0010468 0.047209 0.775 0.42385 0.00038843 0.045487 0.79545 0.4744 0.00015097 0.043971 0.81591 0.52636 4.0017e-05 0.042469 - 0.83636 0.57969 3.5694e-06 0.040979 0.85682 0.63304 0 0.039502 0.87727 0.68544 0 0.038033 0.89773 0.73785 0 0.034263 - 0.91818 0.79026 0 0.029068 0.93864 0.84269 0 0.022224 0.95909 0.89512 0 0.014816 0.97955 0.94756 0 0.0074081 - 1 1 0 0 / - 0.08 0 1 5 0.10044 1.7015e-06 0.9808 2.0756 0.12089 8.5861e-06 0.95737 0.81953 0.14133 3.2897e-05 0.92961 0.56906 - 0.16178 8.804e-05 0.89825 0.43347 0.18222 0.00018786 0.86364 0.34883 0.20267 0.00034957 0.82594 0.29123 0.22311 0.00059324 0.78537 0.24953 - 0.24356 0.00094198 0.74218 0.21794 0.264 0.0014223 0.69669 0.19319 0.28444 0.0021106 0.64901 0.17409 0.30489 0.0030188 0.60009 0.1581 - 0.32533 0.0041919 0.55045 0.14456 0.34578 0.0056814 0.50063 0.13297 0.36622 0.0075453 0.45117 0.12295 0.38667 0.0098493 0.4026 0.11421 - 0.40711 0.012701 0.35557 0.10657 0.42756 0.016285 0.31092 0.099897 0.448 0.020628 0.26882 0.093909 0.46844 0.025852 0.22957 0.088514 - 0.48889 0.032095 0.19343 0.083632 0.50933 0.039516 0.16056 0.079195 0.52978 0.048289 0.13107 0.075146 0.55022 0.058815 0.10534 0.071465 - 0.57067 0.071434 0.083259 0.068103 0.59111 0.086277 0.06434 0.064995 0.61156 0.10369 0.048398 0.062113 0.632 0.12406 0.035226 0.059435 - 0.65244 0.14788 0.024595 0.05694 0.67289 0.17571 0.016258 0.05461 0.69333 0.20925 0.010227 0.052451 0.71378 0.24952 0.0059528 0.050429 - 0.73422 0.29846 0.0030811 0.048526 0.75467 0.36127 0.0013595 0.046731 0.77511 0.45379 0.00048939 0.045033 0.79556 0.52696 0.0001933 0.043535 - 0.816 0.57769 5.7016e-05 0.042105 0.83644 0.63049 1.3243e-05 0.040689 0.85689 0.68442 1.347e-06 0.039282 0.87733 0.7316 0 0.037879 - 0.89778 0.77634 0 0.035086 0.91822 0.82107 0 0.029724 0.93867 0.8658 0 0.023453 0.95911 0.91054 0 0.015636 - 0.97956 0.95527 0 0.0078178 1 1 0 0 / - 0.13 0 1 5 0.15023 6.7001e-07 0.98606 1.7908 0.17047 6.2199e-06 0.96514 0.80801 0.1907 2.448e-05 0.93844 0.53713 - 0.21093 6.6748e-05 0.90658 0.4018 0.23116 0.00014799 0.8699 0.31996 0.2514 0.00028722 0.82877 0.26504 0.27163 0.00050801 0.78361 0.22561 - 0.29186 0.00083914 0.73492 0.19594 0.31209 0.0013152 0.68333 0.1728 0.33233 0.0019778 0.62954 0.15427 0.35256 0.0028759 0.57435 0.13908 - 0.37279 0.0040923 0.51863 0.12655 0.39302 0.0056971 0.46337 0.11594 0.41326 0.0077656 0.40941 0.10681 0.43349 0.010397 0.35751 0.098886 - 0.45372 0.013707 0.30835 0.091934 0.47395 0.01783 0.26245 0.085793 0.49419 0.022919 0.22023 0.08033 0.51442 0.029152 0.18198 0.075441 - 0.53465 0.036734 0.14785 0.07104 0.55488 0.045897 0.11786 0.067059 0.57512 0.056905 0.09195 0.06344 0.59535 0.070059 0.069947 0.060137 - 0.61558 0.085766 0.051695 0.057116 0.63581 0.10463 0.037041 0.054352 0.65605 0.12693 0.025399 0.051799 0.67628 0.15327 0.016439 0.049433 - 0.69651 0.18445 0.0098331 0.047236 0.71674 0.22177 0.0052583 0.045189 0.73698 0.26808 0.0023986 0.043278 0.75721 0.33636 0.00089607 0.041484 - 0.77744 0.40179 0.00034342 0.039908 0.79767 0.45268 0.00011429 0.038453 0.81791 0.50479 2.0072e-05 0.037016 0.83814 0.55815 5.5321e-08 0.035594 - 0.85837 0.61336 0 0.034198 0.8786 0.66862 0 0.032804 0.89884 0.72387 0 0.029002 0.91907 0.77912 0 0.024588 - 0.9393 0.83434 0 0.018501 0.95953 0.88956 0 0.012334 0.97977 0.94478 0 0.006167 1 1 0 0 / - 0.1 0 1 4.4449 0.12045 1.4167e-06 0.9786 1.4707 0.14091 8.0173e-06 0.94918 0.3445 0.16136 2.7957e-05 0.91339 0.20755 - 0.18182 7.8028e-05 0.87185 0.14484 0.20227 0.00017422 0.82598 0.10506 0.22273 0.00033614 0.77661 0.077212 0.24318 0.00058805 0.72451 0.056337 - 0.26364 0.00095881 0.67046 0.039822 0.28409 0.0014824 0.61528 0.026121 0.30455 0.0021987 0.55978 0.014269 0.325 0.0031539 0.50474 0.0036805 - 0.34545 0.0044016 0.45091 -0.006058 0.36591 0.0060566 0.39925 -0.015226 0.38636 0.0081753 0.35025 -0.024143 0.40682 0.010837 0.30427 -0.033018 - 0.42727 0.014144 0.26163 -0.042032 0.44773 0.018212 0.22254 -0.051367 0.46818 0.023172 0.1871 -0.061217 0.48864 0.029171 0.15534 -0.071794 - 0.50909 0.036377 0.12719 -0.083349 0.52955 0.044973 0.10255 -0.096194 0.55 0.055377 0.081571 -0.11099 0.57045 0.067736 0.063742 -0.12827 - 0.59091 0.082261 0.048718 -0.14886 0.61136 0.09923 0.036253 -0.17401 0.63182 0.11895 0.026097 -0.2057 0.65227 0.14175 0.018006 -0.2472 - 0.67273 0.16799 0.011743 -0.30481 0.69318 0.19814 0.0070783 -0.39136 0.71364 0.23277 0.003798 -0.53285 0.73409 0.27375 0.0017973 -0.83199 - 0.75455 0.32568 0.00075808 -2.0703 0.775 0.38172 0.00030217 -2.791 0.79545 0.43109 0.00010477 -2.855 0.81591 0.48207 2.1771e-05 -3.4363 - 0.83636 0.53537 5.1175e-08 -4.787 0.85682 0.5934 0 -4.8281 0.87727 0.65148 0 -4.8302 0.89773 0.70957 0 -4.8323 - 0.91818 0.76765 0 -4.8344 0.93864 0.82574 0 -4.8365 0.95909 0.88383 0 -4.8387 0.97955 0.94191 0 -4.8408 - 1 1 0 -4.8429 / - 0.1 0 1 4.5989 0.12045 6.3717e-07 0.98498 1.6816 0.14091 3.7973e-06 0.96236 0.52276 0.16136 1.3981e-05 0.93334 0.31942 - 0.18182 4.1598e-05 0.89823 0.22522 0.20227 9.7921e-05 0.85824 0.16526 0.22273 0.00019738 0.81405 0.12318 0.24318 0.00035848 0.76625 0.091612 - 0.26364 0.00060397 0.71553 0.066626 0.28409 0.00096146 0.66262 0.045891 0.30455 0.0014641 0.60829 0.027944 0.325 0.0021513 0.55333 0.011904 - 0.34545 0.0030698 0.49856 -0.0028532 0.36591 0.0043182 0.44495 -0.01675 0.38636 0.0059514 0.39324 -0.030275 0.40682 0.0080448 0.34399 -0.043745 - 0.42727 0.010695 0.29765 -0.057437 0.44773 0.014015 0.25461 -0.071633 0.46818 0.018134 0.21512 -0.086633 0.48864 0.023202 0.17933 -0.10277 - 0.50909 0.02939 0.14729 -0.12044 0.52955 0.036896 0.11898 -0.14012 0.55 0.046149 0.094668 -0.16288 0.57045 0.057338 0.073864 -0.18955 - 0.59091 0.07072 0.056239 -0.22146 0.61136 0.086638 0.041555 -0.26065 0.63182 0.10548 0.029563 -0.3103 0.65227 0.12769 0.020007 -0.37575 - 0.67273 0.15381 0.012635 -0.4674 0.69318 0.18452 0.0071982 -0.60656 0.71364 0.22079 0.0034573 -0.83664 0.73409 0.26555 0.0013061 -1.3301 - 0.75455 0.32682 0.0003637 -3.4111 0.775 0.39309 9.5984e-05 -4.5962 0.79545 0.44609 3.3281e-05 -4.6177 0.81591 0.49961 6.9155e-06 -4.8036 - 0.83636 0.55386 1.6256e-08 -5.2338 0.85682 0.60961 0 -5.248 0.87727 0.66538 0 -5.2499 0.89773 0.72115 0 -5.2517 - 0.91818 0.77692 0 -5.2536 0.93864 0.83269 0 -5.2554 0.95909 0.88846 0 -5.2573 0.97955 0.94423 0 -5.2591 - 1 1 0 -5.261 / - 0.1 0 1 4.2434 0.12045 1.7997e-06 0.97563 0.85016 0.14091 9.9359e-06 0.94417 0.057453 0.16136 3.3885e-05 0.90713 0.028086 - 0.18182 9.2543e-05 0.86504 0.014268 0.20227 0.00020333 0.81914 0.0053689 0.22273 0.0003875 0.77016 -0.00091404 0.24318 0.00067119 0.71878 -0.0056545 - 0.26364 0.0010853 0.66568 -0.0094093 0.28409 0.0016661 0.61159 -0.012536 0.30455 0.0024559 0.55724 -0.015284 0.325 0.0035039 0.50332 -0.017779 - 0.34545 0.0048669 0.45052 -0.020109 0.36591 0.0066667 0.39974 -0.02234 0.38636 0.0089626 0.35146 -0.024549 0.40682 0.011839 0.30601 -0.026786 - 0.42727 0.015404 0.26373 -0.029094 0.44773 0.01978 0.22484 -0.031516 0.46818 0.025109 0.18946 -0.034103 0.48864 0.03155 0.15764 -0.036924 - 0.50909 0.039284 0.12936 -0.040058 0.52955 0.048513 0.10451 -0.043572 0.55 0.059696 0.083297 -0.047645 0.57045 0.073009 0.065217 -0.052417 - 0.59091 0.088697 0.049948 -0.058166 0.61136 0.1071 0.037252 -0.065327 0.63182 0.12858 0.026889 -0.074445 0.65227 0.15356 0.018618 -0.086425 - 0.67273 0.18251 0.0122 -0.1029 0.69318 0.21601 0.0074087 -0.12735 0.71364 0.25478 0.0040218 -0.16832 0.73409 0.30089 0.0019287 -0.26545 - 0.75455 0.35763 0.00079906 -0.58295 0.775 0.42744 0.0003012 -2.9988 0.79545 0.47697 0.00011726 -3.0107 0.81591 0.52778 3.1136e-05 -3.0559 - 0.83636 0.58009 2.783e-06 -3.8062 0.85682 0.63304 0 -4.6818 0.87727 0.68544 0 -4.684 0.89773 0.73785 0 -4.6861 - 0.91818 0.79026 0 -4.6883 0.93864 0.84269 0 -4.6904 0.95909 0.89512 0 -4.6926 0.97955 0.94756 0 -4.6948 - 1 1 0 -4.6969 / - 0.08 0 1 4.2434 0.10044 3.0149e-06 0.9653 0.85484 0.12089 1.4724e-05 0.92731 0.059623 0.14133 5.3654e-05 0.8857 0.031834 - 0.16178 0.00013819 0.84132 0.016757 0.18222 0.00028666 0.79468 0.0072314 0.20267 0.00052168 0.74621 0.00061093 0.22311 0.00086923 0.69633 -0.004328 - 0.24356 0.0013589 0.64551 -0.0082174 0.264 0.0020244 0.59422 -0.011391 0.28444 0.0029637 0.54312 -0.0141 0.30489 0.0041892 0.49281 -0.016564 - 0.32533 0.0057567 0.44375 -0.018857 0.34578 0.0077292 0.39634 -0.02104 0.36622 0.010178 0.35098 -0.023164 0.38667 0.013184 0.30799 -0.025277 - 0.40711 0.016877 0.2678 -0.027421 0.42756 0.021485 0.23097 -0.029651 0.448 0.02703 0.19718 -0.031999 0.46844 0.033659 0.16646 -0.034508 - 0.48889 0.041534 0.13882 -0.037243 0.50933 0.050834 0.11421 -0.040269 0.52978 0.061761 0.092519 -0.043644 0.55022 0.074773 0.073917 -0.047514 - 0.57067 0.090237 0.058171 -0.052053 0.59111 0.10826 0.044805 -0.057428 0.61156 0.12918 0.03363 -0.064034 0.632 0.15338 0.024451 -0.072311 - 0.65244 0.18127 0.017073 -0.082879 0.67289 0.21332 0.011302 -0.096754 0.69333 0.25095 0.0071286 -0.11713 0.71378 0.29461 0.0041673 -0.15025 - 0.73422 0.34516 0.0021716 -0.22137 0.75467 0.40478 0.00096898 -0.42119 0.77511 0.47823 0.00035542 -1.9 0.79556 0.53784 0.0001412 -3.0027 - 0.816 0.58637 4.1744e-05 -3.0156 0.83644 0.63594 9.7031e-06 -3.0526 0.85689 0.68559 9.8824e-07 -4.2931 0.87733 0.7316 0 -4.6829 - 0.89778 0.77634 0 -4.6852 0.91822 0.82107 0 -4.6876 0.93867 0.8658 0 -4.6899 0.95911 0.91054 0 -4.6923 - 0.97956 0.95527 0 -4.6946 1 1 0 -4.6969 / - 0.13 0 1 4.1487 0.15023 1.0441e-06 0.97785 0.75831 0.17047 9.0103e-06 0.9472 0.080514 0.1907 3.4084e-05 0.91007 0.039842 - 0.21093 9.0335e-05 0.86767 0.021432 0.23116 0.00019585 0.82081 0.010666 0.2514 0.00037313 0.77026 0.0035329 0.27163 0.00064969 0.71683 -0.0015839 - 0.29186 0.0010586 0.66137 -0.0055284 0.31209 0.0016393 0.60476 -0.008736 0.33233 0.0024387 0.54788 -0.011447 0.35256 0.0035117 0.49159 -0.013814 - 0.37279 0.0049512 0.43683 -0.01593 0.39302 0.0068341 0.38438 -0.01788 0.41326 0.0092424 0.33477 -0.019736 0.43349 0.012284 0.28844 -0.021547 - 0.45372 0.016085 0.24573 -0.023356 0.47395 0.020789 0.20684 -0.025204 0.49419 0.02656 0.17188 -0.027133 0.51442 0.033588 0.14083 -0.029195 - 0.53465 0.042087 0.11361 -0.031461 0.55488 0.052298 0.090048 -0.034007 0.57512 0.064492 0.069938 -0.036929 0.59535 0.078971 0.053033 -0.040365 - 0.61558 0.09614 0.03912 -0.044539 0.63581 0.11658 0.028014 -0.049877 0.65605 0.14052 0.019218 -0.057069 0.67628 0.16846 0.01246 -0.067593 - 0.69651 0.20102 0.0074781 -0.084443 0.71674 0.23912 0.0040218 -0.11673 0.73698 0.28457 0.0018528 -0.20149 0.75721 0.34421 0.00070412 -1.6788 - 0.77744 0.40252 0.0002726 -2.9369 0.79767 0.45276 9.0889e-05 -2.9469 0.81791 0.50442 1.5991e-05 -3.1597 0.83814 0.55799 4.5076e-08 -4.3436 - 0.85837 0.61336 0 -4.5856 0.8786 0.66862 0 -4.5877 0.89884 0.72387 0 -4.5898 0.91907 0.77912 0 -4.5918 - 0.9393 0.83434 0 -4.5939 0.95953 0.88956 0 -4.596 0.97977 0.94478 0 -4.598 1 1 0 -4.6001 / - - -SGOF - 0 0 1 0 0.020455 3.5434e-05 0.97736 0 0.040909 0.00018977 0.94777 0 0.061364 0.00051835 0.91342 0 - 0.081818 0.0010714 0.87524 0 0.10227 0.0018975 0.83382 0 0.12273 0.0030453 0.78967 0 0.14318 0.0045646 0.7433 0 - 0.16364 0.0065067 0.69523 0 0.18409 0.0089249 0.64601 0 0.20455 0.011958 0.59622 0 0.225 0.015606 0.54656 0 - 0.24545 0.019926 0.49756 0 0.26591 0.024985 0.44971 0 0.28636 0.030852 0.40348 0 0.30682 0.037597 0.35925 0 - 0.32727 0.045295 0.31733 0 0.34773 0.054024 0.278 0 0.36818 0.063864 0.24144 0 0.38864 0.07507 0.20819 0 - 0.40909 0.087598 0.17792 0 0.42955 0.10152 0.15059 0 0.45 0.11694 0.12613 0 0.47045 0.13395 0.10444 0 - 0.49091 0.15264 0.085379 0 0.51136 0.17311 0.068809 0 0.53182 0.19548 0.054554 0 0.55227 0.21985 0.042437 0 - 0.57273 0.24664 0.03249 0 0.59318 0.27576 0.02428 0 0.61364 0.30735 0.017601 0 0.63409 0.3416 0.012279 0 - 0.65455 0.37878 0.0081492 0 0.675 0.41924 0.0050523 0 0.69545 0.46349 0.0028382 0 0.71591 0.51233 0.0013629 0 - 0.73636 0.56709 0.00048824 0 0.75682 0.63252 0.00011309 0 0.77727 0.72762 8.614e-06 0 0.79773 0.77825 8.5726e-08 0 - 0.81818 0.82268 0 0 0.83864 0.86701 0 0 0.85909 0.91134 0 0 0.87955 0.95567 0 0 - 0.9 1 0 0 / - 0 0 1 0 0.020455 0.00039005 0.92874 0 0.040909 0.0013755 0.86417 0 0.061364 0.0029709 0.80162 0 - 0.081818 0.005208 0.74006 0 0.10227 0.0081261 0.67956 0 0.12273 0.011769 0.62039 0 0.14318 0.016181 0.56294 0 - 0.16364 0.021413 0.50759 0 0.18409 0.027514 0.45472 0 0.20455 0.034674 0.40508 0 0.225 0.042832 0.35857 0 - 0.24545 0.05204 0.31535 0 0.26591 0.062354 0.27551 0 0.28636 0.07383 0.23906 0 0.30682 0.086523 0.20599 0 - 0.32727 0.10049 0.17621 0 0.34773 0.11578 0.1496 0 0.36818 0.13245 0.126 0 0.38864 0.15074 0.10558 0 - 0.40909 0.17053 0.087751 0 0.42955 0.19185 0.072276 0 0.45 0.21472 0.058947 0 0.47045 0.23916 0.047558 0 - 0.49091 0.2652 0.037909 0 0.51136 0.29284 0.02981 0 0.53182 0.32207 0.023082 0 0.55227 0.35288 0.017556 0 - 0.57273 0.38544 0.013185 0 0.59318 0.41952 0.009691 0 0.61364 0.45502 0.0069341 0 0.63409 0.49186 0.0048015 0 - 0.65455 0.52997 0.0031916 0 0.675 0.56922 0.0020129 0 0.69545 0.60948 0.0011835 0 0.71591 0.65061 0.00063059 0 - 0.73636 0.69247 0.00028941 0 0.75682 0.7349 0.00011438 0 0.77727 0.77762 3.4147e-05 0 0.79773 0.82042 6.512e-06 0 - 0.81818 0.86097 4.2714e-07 0 0.83864 0.89547 1.3933e-08 0 0.85909 0.93005 0 0 0.87955 0.96503 0 0 - 0.9 1 0 0 / - 0 0 1 0 0.020455 0.00075573 0.90365 0 0.040909 0.0023674 0.82794 0 0.061364 0.0047606 0.75924 0 - 0.081818 0.0079147 0.69397 0 0.10227 0.012221 0.63141 0 0.12273 0.01856 0.57143 0 0.14318 0.025087 0.51413 0 - 0.16364 0.032157 0.45972 0 0.18409 0.040163 0.40842 0 0.20455 0.04928 0.36088 0 0.225 0.059425 0.31684 0 - 0.24545 0.07063 0.27632 0 0.26591 0.082936 0.23935 0 0.28636 0.096384 0.20588 0 0.30682 0.11101 0.1758 0 - 0.32727 0.12687 0.14899 0 0.34773 0.14398 0.12528 0 0.36818 0.16239 0.10448 0 0.38864 0.18232 0.086673 0 - 0.40909 0.20362 0.071297 0 0.42955 0.22632 0.058096 0 0.45 0.25044 0.046854 0 0.47045 0.27598 0.037359 0 - 0.49091 0.30296 0.029414 0 0.51136 0.33136 0.022832 0 0.53182 0.36119 0.017437 0 0.55227 0.39241 0.013071 0 - 0.57273 0.42517 0.009676 0 0.59318 0.45924 0.0070053 0 0.61364 0.49453 0.0049331 0 0.63409 0.53096 0.0033589 0 - 0.65455 0.56844 0.0021935 0 0.675 0.60682 0.0013581 0 0.69545 0.64597 0.00078371 0 0.71591 0.68571 0.00041029 0 - 0.73636 0.72585 0.00018604 0 0.75682 0.7661 7.4146e-05 0 0.77727 0.80609 2.3354e-05 0 0.79773 0.84531 5.194e-06 0 - 0.81818 0.88128 6.3271e-07 0 0.83864 0.91094 2.1121e-08 0 0.85909 0.94014 0 0 0.87955 0.97007 0 0 - 0.9 1 0 0 / - 0 0 1 0 0.020444 0.00075499 0.90308 0 0.040889 0.0023655 0.82925 0 0.061333 0.0047564 0.7637 0 - 0.081778 0.0079077 0.70133 0 0.10222 0.012209 0.64117 0 0.12267 0.018538 0.58298 0 0.14311 0.030261 0.52696 0 - 0.16356 0.037924 0.47364 0 0.184 0.046389 0.42296 0 0.20444 0.055678 0.37515 0 0.22489 0.065816 0.3304 0 - 0.24533 0.076828 0.28886 0 0.26578 0.088742 0.25063 0 0.28622 0.1017 0.21609 0 0.30667 0.11573 0.1852 0 - 0.32711 0.13077 0.15751 0 0.34756 0.14686 0.13287 0 0.368 0.16403 0.11113 0 0.38844 0.18231 0.092106 0 - 0.40889 0.20174 0.075602 0 0.42933 0.22254 0.061725 0 0.44978 0.24463 0.04996 0 0.47022 0.26795 0.039984 0 - 0.49067 0.29256 0.031602 0 0.51111 0.31846 0.024632 0 0.53156 0.34566 0.018898 0 0.552 0.37419 0.014239 0 - 0.57244 0.40431 0.01066 0 0.59289 0.43575 0.0078107 0 0.61333 0.46849 0.0055794 0 0.63378 0.50248 0.0038658 0 - 0.65422 0.53768 0.0025802 0 0.67467 0.57404 0.0016431 0 0.69511 0.61152 0.00099503 0 0.71556 0.65008 0.00058035 0 - 0.736 0.68938 0.00031061 0 0.75644 0.72923 0.00014732 0 0.77689 0.76936 5.8273e-05 0 0.79733 0.80941 1.7083e-05 0 - 0.81778 0.84882 2.9261e-06 0 0.83822 0.88597 4.0662e-07 0 0.85867 0.91594 5.3646e-08 0 0.87911 0.94323 0 0 - 0.89956 0.97163 0 0 0.92 1 0 0 / - 0 0 1 0 0.020233 0.00074082 0.90377 0 0.040465 0.0023245 0.827 0 0.060698 0.0046708 0.75647 0 - 0.08093 0.0077593 0.68941 0 0.10116 0.011943 0.62526 0 0.1214 0.018064 0.56397 0 0.14163 0.024274 0.5057 0 - 0.16186 0.031481 0.45065 0 0.18209 0.039729 0.39903 0 0.20233 0.049064 0.351 0 0.22256 0.059534 0.30669 0 - 0.24279 0.071188 0.26614 0 0.26302 0.084145 0.22952 0 0.28326 0.098445 0.1967 0 0.30349 0.11408 0.16739 0 - 0.32372 0.1311 0.14141 0 0.34395 0.14954 0.11854 0 0.36419 0.16945 0.098578 0 0.38442 0.19084 0.081274 0 - 0.40465 0.21375 0.066392 0 0.42488 0.2382 0.053694 0 0.44512 0.26419 0.042951 0 0.46535 0.29173 0.033942 0 - 0.48558 0.3208 0.026459 0 0.50581 0.35139 0.020321 0 0.52605 0.38359 0.015416 0 0.54628 0.41719 0.011473 0 - 0.56651 0.45213 0.0083483 0 0.58674 0.48831 0.0059146 0 0.60698 0.52562 0.0040572 0 0.62721 0.56394 0.0026743 0 - 0.64744 0.60311 0.0016759 0 0.66767 0.64296 0.00098314 0 0.68791 0.6833 0.00052712 0 0.70814 0.72389 0.0002483 0 - 0.72837 0.76448 9.5655e-05 0 0.7486 0.80476 2.608e-05 0 0.76884 0.84428 4.9237e-06 0 0.78907 0.88037 6.6221e-07 0 - 0.8093 0.90997 5.3789e-08 0 0.82953 0.9396 0 0 0.84977 0.96981 0 0 0.87 1 0 0 / - 0 0 1 0 0.020455 0 0.94617 0 0.040909 0 0.89233 0 0.061364 0 0.8385 0 - 0.081818 0 0.78466 0 0.10227 0 0.73083 0 0.12273 0 0.67699 0 0.14318 0 0.62316 0 - 0.16364 0 0.57565 0 0.18409 0 0.57081 0 0.20455 9.0568e-05 0.5565 0 0.225 0.00034404 0.53708 0 - 0.24545 0.00085229 0.51365 0 0.26591 0.0017107 0.48631 0 0.28636 0.0030185 0.45543 0 0.30682 0.0048808 0.42169 0 - 0.32727 0.007411 0.38581 0 0.34773 0.010732 0.34859 0 0.36818 0.014979 0.31087 0 0.38864 0.020466 0.27364 0 - 0.40909 0.027253 0.23775 0 0.42955 0.035507 0.20379 0 0.45 0.045421 0.17226 0 0.47045 0.057203 0.14349 0 - 0.49091 0.071075 0.11769 0 0.51136 0.087271 0.094934 0 0.53182 0.10604 0.075191 0 0.55227 0.12765 0.058351 0 - 0.57273 0.15281 0.044541 0 0.59318 0.18154 0.033185 0 0.61364 0.21411 0.023992 0 0.63409 0.25088 0.016709 0 - 0.65455 0.29227 0.011088 0 0.675 0.33879 0.0068915 0 0.69545 0.39114 0.003897 0 0.71591 0.45036 0.0018968 0 - 0.73636 0.51818 0.0006983 0 0.75682 0.60088 0.0001681 0 0.77727 0.72382 1.3191e-05 0 0.79773 0.77803 1.4481e-07 0 - 0.81818 0.82268 0 0 0.83864 0.86701 0 0 0.85909 0.91134 0 0 0.87955 0.95567 0 0 - 0.9 1 0 0 / - 0 0 1 0 0.020455 0 0.94791 0 0.040909 0 0.89581 0 0.061364 0 0.84372 0 - 0.081818 0 0.79163 0 0.10227 0 0.73953 0 0.12273 0 0.68744 0 0.14318 0 0.63535 0 - 0.16364 0 0.58326 0 0.18409 0 0.53116 0 0.20455 0 0.47907 0 0.225 0 0.42698 0 - 0.24545 0 0.39718 0 0.26591 0.00062521 0.3685 0 0.28636 0.0018047 0.33457 0 0.30682 0.0038753 0.30103 0 - 0.32727 0.0072979 0.26975 0 0.34773 0.012668 0.23585 0 0.36818 0.019949 0.20316 0 0.38864 0.029513 0.17266 0 - 0.40909 0.041271 0.14473 0 0.42955 0.055354 0.11963 0 0.45 0.071916 0.097505 0 0.47045 0.091114 0.078339 0 - 0.49091 0.1131 0.062012 0 0.51136 0.138 0.048324 0 0.53182 0.16597 0.037027 0 0.55227 0.1971 0.027847 0 - 0.57273 0.2319 0.020695 0 0.59318 0.27004 0.015061 0 0.61364 0.31147 0.010679 0 0.63409 0.35613 0.0073385 0 - 0.65455 0.4039 0.0048502 0 0.675 0.45461 0.0030494 0 0.69545 0.50803 0.0017936 0 0.71591 0.56386 0.00096075 0 - 0.73636 0.62174 0.00044665 0 0.75682 0.68136 0.0001801 0 0.77727 0.74197 5.5274e-05 0 0.79773 0.80302 1.091e-05 0 - 0.81818 0.85752 7.3933e-07 0 0.83864 0.89473 2.7866e-08 0 0.85909 0.93005 0 0 0.87955 0.96503 0 0 - 0.9 1 0 0 / - 0 0 1 0 0.020455 0 0.94727 0 0.040909 0 0.89455 0 0.061364 0 0.84182 0 - 0.081818 0 0.7891 0 0.10227 0 0.73637 0 0.12273 0 0.68365 0 0.14318 0 0.63092 0 - 0.16364 0 0.57819 0 0.18409 0 0.52547 0 0.20455 0 0.47274 0 0.225 0 0.44273 0 - 0.24545 0 0.40713 0 0.26591 0 0.36712 0 0.28636 0.0018993 0.32545 0 0.30682 0.0041059 0.28613 0 - 0.32727 0.008525 0.25145 0 0.34773 0.015809 0.21629 0 0.36818 0.025423 0.18372 0 0.38864 0.037624 0.15424 0 - 0.40909 0.052186 0.12777 0 0.42955 0.069165 0.10442 0 0.45 0.088648 0.084159 0 0.47045 0.11073 0.066861 0 - 0.49091 0.1355 0.052331 0 0.51136 0.16303 0.040314 0 0.53182 0.19341 0.030527 0 0.55227 0.2267 0.022681 0 - 0.57273 0.26329 0.016658 0 0.59318 0.30286 0.011977 0 0.61364 0.34531 0.008386 0 0.63409 0.39057 0.0056875 0 - 0.65455 0.4385 0.0037084 0 0.675 0.48891 0.0022997 0 0.69545 0.54154 0.0013348 0 0.71591 0.59609 0.00070705 0 - 0.73636 0.65215 0.00032724 0 0.75682 0.70929 0.00013405 0 0.77727 0.76664 4.3761e-05 0 0.79773 0.82325 1.0198e-05 0 - 0.81818 0.87316 1.3222e-06 0 0.83864 0.9091 5.069e-08 0 0.85909 0.94014 0 0 0.87955 0.97007 0 0 - 0.9 1 0 0 / - 0 0 1 0 0.020444 0 0.94827 0 0.040889 0 0.89653 0 0.061333 0 0.84479 0 - 0.081778 0 0.79305 0 0.10222 0 0.74131 0 0.12267 0 0.68957 0 0.14311 0 0.63784 0 - 0.16356 0 0.5861 0 0.184 0 0.53436 0 0.20444 0 0.49602 0 0.22489 0 0.46171 0 - 0.24533 0 0.42108 0 0.255 0.001608 1* 0 0.26578 0.0024152 0.37934 0 0.28622 0.0042696 0.33673 0 - 0.30667 0.0095311 0.29487 0 0.32711 0.017339 0.25695 0 0.34756 0.027177 0.22215 0 0.368 0.038802 0.18991 0 - 0.38844 0.052179 0.16028 0 0.40889 0.067325 0.13342 0 0.42933 0.084574 0.10994 0 0.44978 0.10382 0.089533 0 - 0.47022 0.12502 0.071927 0 0.49067 0.14825 0.056955 0 0.51111 0.17359 0.044408 0 0.53156 0.2011 0.034048 0 - 0.552 0.23085 0.025626 0 0.57244 0.2634 0.01917 0 0.59289 0.29832 0.014044 0 0.61333 0.33564 0.010041 0 - 0.63378 0.37539 0.0069742 0 0.65422 0.41753 0.0046768 0 0.67467 0.46203 0.0030013 0 0.69511 0.50895 0.0018385 0 - 0.71556 0.55832 0.0010882 0 0.736 0.60957 0.00059416 0 0.75644 0.6624 0.00028978 0 0.77689 0.7164 0.00011933 0 - 0.79733 0.77101 3.7202e-05 0 0.81778 0.82535 7.0176e-06 0 0.83822 0.87691 1.0414e-06 0 0.85867 0.91272 1.4869e-07 0 - 0.87911 0.94323 0 0 0.89956 0.97163 0 0 0.92 1 0 0 / - 0 0 1 0 0.020233 0 0.94896 0 0.040465 0 0.89791 0 0.060698 0 0.84687 0 - 0.08093 0 0.79582 0 0.10116 0 0.74477 0 0.1214 0 0.69373 0 0.14163 0 0.64268 0 - 0.16186 0 0.59164 0 0.18209 0 0.54059 0 0.20233 0 0.48955 0 0.22256 0 0.44128 0 - 0.24279 0 0.41191 0 0.26302 0 0.37357 0 0.27417 0.00074854 1* 0 0.28326 0.0012548 0.33289 0 - 0.30349 0.0026718 0.29087 0 0.32372 0.0062922 0.25185 0 0.34395 0.012766 0.2158 0 0.36419 0.022002 0.18244 0 - 0.38442 0.033913 0.15198 0 0.40465 0.048563 0.1247 0 0.42488 0.066056 0.10078 0 0.44512 0.086512 0.080203 0 - 0.46535 0.11005 0.062849 0 0.48558 0.13679 0.048463 0 0.50581 0.16685 0.036761 0 0.52605 0.20057 0.02754 0 - 0.54628 0.2377 0.020241 0 0.56651 0.27822 0.014555 0 0.58674 0.32206 0.010202 0 0.60698 0.3691 0.0069357 0 - 0.62721 0.41915 0.0045409 0 0.64744 0.47194 0.0028349 0 0.66767 0.52713 0.0016632 0 0.68791 0.58429 0.00089648 0 - 0.70814 0.64291 0.00042767 0 0.72837 0.7024 0.00016875 0 0.7486 0.76204 4.8004e-05 0 0.76884 0.82087 9.4898e-06 0 - 0.78907 0.87196 1.3294e-06 0 0.8093 0.90831 1.143e-07 0 0.82953 0.9396 0 0 0.84977 0.96981 0 0 - 0.87 1 0 0 / - - -REGIONS - - -EQLNUM - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 - 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 - 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 1 0 0 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 - 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 1 - 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 0 0 0 0 0 0 - 2 2 2 2 2 2 2 0 0 0 0 0 0 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 / - - -FIPNUM - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 - 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 - 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 1 0 0 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 - 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 1 - 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 0 0 0 0 0 0 - 2 2 2 2 2 2 2 0 0 0 0 0 0 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 / - - -SATNUM - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 3 3 3 3 3 3 3 3 3 3 - 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 - 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 - 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 - 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 - 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 - 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 - 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 - 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 - 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 - 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 - 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 - 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 - 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 - 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 - 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 - 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 - 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 - 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 - 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 - 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 - 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 - 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 - 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 - 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 - 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 - 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 - 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 - 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 - 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 - 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 - 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 - 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 - 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 - 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 - 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 - 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 - 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 - 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 - 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 - 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 - 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 - 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 - 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 - 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 - 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 - 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 - 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 - 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 - 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 - 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 - 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 - 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 - 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 - 5 5 5 5 5 5 5 5 5 5 / - - -SOLUTION - - -RESTART - 'restart/MODEL2' 20 / - -RPTRST - 'BASIC = 2' 'PBPD' / - - - -RSVD - 2561.59 122.3 2597 110 2660.7 106.77 2697 106.77 / - 2584.2 122.41 2599.9 110 2663.6 106.77 2699.9 106.77 / - - -THPRES - 1 2 / -/ - - -SUMMARY - - -DATE - - -FOPR - - -FWPR - - -FGPR - - -FOPRH - - -FWPRH - - -FGPRH - - -FOPT - - -FWPT - - -FGPT - - -FGOR - - -FGORH - - -FWCT - - -FWCTH - - -RPR - / - - -WOPR - 'PROD*' / - - -WGPR - 'PROD*' / - - -WWPR - 'PROD*' / - - -WOPRH - 'PROD*' / - - -WGPRH - 'PROD*' / - - -WWPRH - 'PROD*' / - - -WOPT - 'PROD*' / - - -WGPT - 'PROD*' / - - -WWPT - 'PROD*' / - - -WOPTH - 'PROD*' / - - -WGPTH - 'PROD*' / - - -WWPTH - 'PROD*' / - - -WGOR - 'PROD*' / - - -WWCT - 'PROD*' / - - -WGORH - 'PROD*' / - - -WWCTH - 'PROD*' / - - -WGIR - 'INJ*' / - - -WWIR - 'INJ*' / - - -WGIRH - 'INJ*' / - - -WWIRH - 'INJ*' / - - -WBHP - 'PROD*' 'INJ*' / - - -WPIG - 'PROD*' / - - -WPIO - 'PROD*' / - - -WPIL - 'PROD*' / - - -WPIW - 'PROD*' / - - -WOPP - 'PROD*' / - - -WGPP - 'PROD*' / - - -WWPP - 'PROD*' / - - -BPR - 2 11 2 / - 11 13 9 / -/ - - -BWSAT - 2 11 2 / - 11 13 9 / -/ - - -BGSAT - 2 11 2 / - 11 13 9 / -/ - - -RPR - / - - -ROIP - / - - -RGIP - / - - -SCHEDULE - -SKIPREST - -RPTRST - 'BASIC=2' / - - -VFPPROD - 5 2594.57 'LIQ' 'WCT' 'GLR' 'THP' ' ' 'METRIC' 'BHP' / - 350 600 850 1100 1350 1600 1850 2100 2350 2600 2850 3100 3350 3600 3850 4100 - 4350 4600 4850 5100 5350 5600 5850 6100 6350 6600 6850 7100 7350 7600 7850 8100 - 8350 8600 8850 9100 / - 10 11.71 13.71 16.05 18.79 22 25.75 30.15 35.3 41.33 48.39 56.65 66.33 77.66 90.92 106.45 - 124.63 145.91 170.83 200 / - 0 0.0526316 0.105263 0.157895 0.210526 0.263158 0.315789 0.368421 0.421053 0.473684 0.526316 0.578947 0.631579 0.68421 0.736842 0.789474 - 0.842105 0.894737 0.947368 1 / - 1 1.6748 2.80494 4.6977 7.86768 13.1768 22.0684 36.96 61.9005 103.671 173.627 290.79 487.013 815.647 1366.04 2287.84 - 3831.67 6417.26 10747.6 18000 / - 0 / - 1 1 1 1 192.49 192.3 192.36 192.56 192.86 193.25 193.72 194.26 194.86 195.53 196.27 197.06 - 197.92 198.83 199.8 200.84 201.93 203.07 204.28 205.54 206.86 208.23 209.66 211.15 212.69 214.29 215.95 217.66 - 219.42 221.24 223.12 225.05 227.03 229.07 231.17 233.32 / - 1 1 2 1 192.4 192.2 192.25 192.45 192.75 193.13 193.6 194.14 194.74 195.41 196.15 196.94 - 197.8 198.71 199.68 200.72 201.81 202.96 204.16 205.42 206.74 208.12 209.55 211.04 212.58 214.18 215.84 217.55 - 219.32 221.14 223.02 224.95 226.94 228.98 231.08 233.23 / - 1 1 3 1 192.24 192.02 192.05 192.24 192.53 192.92 193.38 193.92 194.52 195.19 195.92 196.72 - 197.57 198.49 199.46 200.5 201.59 202.74 203.95 205.21 206.53 207.91 209.34 210.83 212.38 213.98 215.64 217.35 - 219.12 220.95 222.83 224.76 226.76 228.8 230.9 233.06 / - 1 1 4 1 191.94 191.67 191.66 191.82 192.1 192.47 192.92 193.45 194.05 194.71 195.44 196.23 - 197.09 198 198.98 200.01 201.11 202.26 203.47 204.74 206.06 207.44 208.88 210.38 211.93 213.54 215.2 216.92 - 218.7 220.53 222.42 224.36 226.36 228.41 230.52 232.69 / - 1 1 5 1 190.72 189.91 189.64 189.7 189.92 190.25 190.69 191.21 191.8 192.48 193.22 194.03 - 194.91 195.85 196.85 197.92 199.05 200.24 201.49 202.8 204.17 205.59 207.08 208.61 210.2 211.84 213.54 215.3 - 217.11 218.98 220.91 222.89 224.93 227.03 229.18 231.38 / - 1 1 6 1 186.35 183.68 183.22 183.12 183.26 183.56 184 184.54 185.19 185.92 186.74 187.64 - 188.62 189.67 190.79 191.98 193.24 194.57 195.96 197.42 198.94 200.52 202.16 203.85 205.59 207.4 209.26 211.18 - 213.16 215.19 217.26 219.4 221.6 223.85 226.16 228.53 / - 1 1 7 1 173.63 168.66 167.75 167.43 167.57 167.96 168.55 169.3 170.18 171.18 172.3 173.52 - 174.84 176.24 177.71 179.26 180.9 182.61 184.37 186.17 188.06 190.01 192.02 194.06 196.17 198.33 200.56 202.82 - 205.12 207.49 209.9 212.37 214.88 217.44 220.06 223.03 / - 1 1 8 1 144.09 136.95 135.85 136.03 136.77 137.87 139.23 140.85 142.59 144.47 146.48 148.55 - 150.73 152.99 155.47 157.87 160.29 162.79 165.31 167.89 170.53 173.49 176.2 178.92 181.71 184.53 187.36 190.24 - 193.67 196.62 199.6 202.6 205.64 208.72 211.83 214.97 / - 1 1 9 1 93.34 89.18 90.35 92.34 94.73 97.35 100.2 103.14 106.27 109.45 112.8 116.14 - 119.66 123.1 126.73 130.28 134 137.73 141.34 145.12 148.87 152.68 156.55 160.28 164.27 168.02 171.83 176.03 - 179.82 183.64 187.45 191.81 195.64 199.51 203.38 207.26 / - 1 1 10 1 56.22 58.22 61.1 64.25 67.57 71.02 74.58 78.25 82.04 85.93 89.92 94.01 - 98.19 102.45 106.78 111.18 115.66 120.21 124.82 129.49 134 138.76 143.56 148.42 153.04 157.94 162.89 167.56 - 172.57 177.28 182.38 187.17 192.32 197.29 201.98 206.95 / - 1 1 11 1 44.08 47.48 50.9 54.43 58.06 61.8 65.66 69.64 73.75 77.99 82.34 86.81 - 91.4 96.09 101.48 106.68 111.9 117.18 122.48 127.81 133.38 138.85 144.39 149.98 155.63 161.33 167.01 172.72 - 178.51 184.35 190.24 196.18 201.77 207.79 213.86 219.53 / - 1 1 12 1 39.43 43.86 47.84 51.83 56.07 60.56 65.27 70.17 75.25 80.48 85.86 91.38 - 97.02 102.79 108.66 114.54 120.41 126.37 132.41 138.54 144.75 151.04 158.31 165.43 172.44 179.54 186.44 193.44 - 200.61 207.67 214.78 221.94 229.17 236.45 243.8 251.22 / - 1 1 13 1 34.64 40.34 46.33 52.44 58.14 64.35 70.67 77.26 84.16 90.62 97.47 104.74 - 112.16 119.7 127.38 135.18 143.1 151.14 158.45 166.71 175.04 183.36 191.73 200.17 208.68 217.29 225.09 233.87 - 243.3 252.75 262.52 273.84 283.55 293.53 303.35 313.43 / - 1 1 14 1 29.83 39.81 49.7 59.07 67.62 76.16 85.51 93.77 103.38 112.15 121.35 131.37 - 141.24 151.67 161.52 172.27 183.1 193.52 204.77 216.2 227.81 238.83 250.53 262.48 274.68 286.96 299.34 311.84 - 324.46 337.2 350.1 363.15 377.15 391.71 406.36 420.96 / - 1 1 15 1 31.57 47.52 61.61 74.53 87.19 100.08 112.26 125.55 139.28 152.02 166.47 181.45 - 195.92 209.53 225.17 240.66 256.87 272.61 289.53 306.64 323.52 341.17 359.46 378.06 396.96 416.09 434.5 454.52 - 473.57 493.85 514.86 535.83 557.71 580.68 603.24 626.12 / - 1 1 16 1 42.86 63.84 84.74 104.22 123.02 142.7 162.59 183.28 204.1 225.21 248.55 270.16 - 294.28 319.18 343.5 367.97 394.76 421.68 449.8 477.8 507.47 537.13 568.29 600.16 631.96 665.02 698.75 733.33 - 769.53 806.8 844.98 883.9 922.99 962.86 1003.19 1043.04 / - 1 1 17 1 60.64 92.83 124.82 155.49 186.26 217.91 251.05 285.12 320.69 359.44 397.83 439.45 - 480.35 524.92 570.66 615.59 664.67 715.67 768.4 822.53 878.11 935.86 995.87 1057.31 1119.06 1179.8 1237.49 1289.83 - 1333.94 1375.69 1424.34 1470.85 1521.05 1572.78 1623.98 1674.98 / - 1 1 18 1 89.26 140.83 190.87 242.62 296.08 352.8 412.97 477.04 545.32 617.02 692.35 772.57 - 857.21 946.41 1038.69 1132.99 1230.05 1319.47 1406.98 1496.6 1590.3 1685.84 1784.94 1885.32 1987.17 2089.28 2194.58 2302.82 - 2408.89 2520.59 2633.74 2749.39 2866.32 2984.44 3104.49 3229.07 / - 1 1 19 1 134.38 213.76 298.54 392.9 495.95 607.27 728.14 859.74 1004.66 1156.38 1301.93 1444.29 - 1588.51 1747.35 1901.18 2060.16 2231.95 2400.56 2572.06 2753.02 2933.71 3123.08 3316.77 3514.3 3711.47 3917.77 4130.02 4343.19 - 4566.9 4786.71 5018.9 5246.12 5485.49 5732.05 5966.8 6219.99 / - 1 1 20 1 204.37 326.79 475.3 664.22 878.39 1122.51 1369 1612.84 1871.32 2156.63 2437.7 2748.17 - 3058.84 3401.97 3745.89 4097.19 4495.93 4876.23 5273.55 5680.9 6105.55 6532.34 6982.35 7433.38 7910.58 8390.54 8891.77 9377.22 - 9905.19 10435.13 10978.09 11544.42 12118.24 12681.16 13287.87 13925.25 / - 1 2 1 1 194.33 194.13 194.18 194.38 194.68 195.07 195.53 196.07 196.68 197.35 198.08 198.88 - 199.73 200.65 201.62 202.66 203.75 204.9 206.1 207.37 208.69 210.07 211.5 212.99 214.54 216.14 217.8 219.51 - 221.28 223.11 224.99 226.92 228.91 230.96 233.06 235.22 / - 1 2 2 1 194.24 194.02 194.07 194.26 194.56 194.95 195.41 195.95 196.55 197.22 197.96 198.75 - 199.61 200.52 201.5 202.53 203.63 204.78 205.98 207.25 208.57 209.95 211.38 212.88 214.42 216.03 217.69 219.4 - 221.17 223 224.88 226.82 228.82 230.86 232.97 235.13 / - 1 2 3 1 194.07 193.83 193.86 194.04 194.34 194.72 195.19 195.72 196.33 197 197.73 198.52 - 199.38 200.3 201.27 202.31 203.4 204.55 205.76 207.03 208.35 209.73 211.17 212.66 214.21 215.82 217.48 219.2 - 220.97 222.8 224.68 226.63 228.62 230.67 232.78 234.94 / - 1 2 4 1 193.74 193.42 193.4 193.55 193.83 194.2 194.65 195.18 195.77 196.44 197.17 197.96 - 198.82 199.74 200.71 201.75 202.85 204 205.21 206.48 207.81 209.2 210.64 212.14 213.69 215.31 216.98 218.7 - 220.48 222.32 224.21 226.16 228.17 230.23 232.35 234.52 / - 1 2 5 1 192.41 191.34 191.16 191.22 191.44 191.77 192.21 192.73 193.33 194 194.74 195.56 - 196.44 197.38 198.39 199.46 200.59 201.78 203.03 204.35 205.72 207.15 208.64 210.19 211.8 213.46 215.19 216.97 - 218.81 220.7 222.64 224.63 226.68 228.78 230.94 233.15 / - 1 2 6 1 187.76 184.94 184.38 184.31 184.45 184.77 185.21 185.77 186.43 187.18 188.02 188.93 - 189.92 190.98 192.11 193.27 194.53 195.86 197.26 198.72 200.25 201.83 203.48 205.19 206.96 208.8 210.68 212.63 - 214.63 216.67 218.77 220.93 223.14 225.39 227.71 230.08 / - 1 2 7 1 174.61 169.36 168.43 168.14 168.26 168.67 169.26 170.02 170.92 171.95 173.08 174.32 - 175.64 177.07 178.56 180.16 181.81 183.54 185.31 187.16 189.07 191.03 193.05 195.13 197.27 199.45 201.69 203.98 - 206.32 208.72 211.17 213.63 216.17 218.76 221.39 224.07 / - 1 2 8 1 144.48 136.96 135.93 136.11 136.78 137.9 139.28 141.02 142.8 144.72 146.73 148.86 - 151.08 153.36 155.71 158.32 160.8 163.34 165.9 168.52 171.17 174.21 176.93 179.72 182.54 185.38 188.27 191.17 - 194.12 197.65 200.66 203.71 206.79 209.9 213.05 216.23 / - 1 2 9 1 93.26 89.14 90.41 92.38 94.84 97.49 100.31 103.33 106.41 109.67 113.05 116.41 - 119.96 123.46 127.13 130.7 134.46 138.09 141.86 145.69 149.47 153.32 157.04 160.95 164.74 168.74 172.55 176.84 - 180.67 184.55 188.41 192.29 196.71 200.61 204.54 208.47 / - 1 2 10 1 56.29 58.42 61.33 64.5 67.85 71.31 74.93 78.64 82.46 86.38 90.41 94.53 - 98.75 103.04 107.41 111.84 116.36 120.95 125.59 130.1 134.84 139.64 144.48 149.11 154.03 158.97 163.67 168.67 - 173.73 178.48 183.6 188.38 193.66 198.49 203.53 208.57 / - 1 2 11 1 44.1 47.63 51.07 54.64 58.3 62.08 65.98 70 74.15 78.42 82.82 87.33 - 91.96 96.69 102.14 107.38 112.66 117.98 123.33 128.7 134.15 139.84 145.43 151.07 156.76 162.52 168.25 174.01 - 179.85 185.75 191.69 197.31 203.33 209.41 215.1 221.26 / - 1 2 12 1 39.32 43.94 47.99 52.04 56.31 60.84 65.59 70.53 75.65 80.92 86.35 91.91 - 97.6 103.41 109.32 115.24 121.16 127.16 133.25 139.42 145.68 152.02 159.17 166.36 173.48 180.58 187.73 194.79 - 202.03 209.15 216.33 223.56 230.85 238.2 245.62 253.1 / - 1 2 13 1 34.53 40.34 46.44 52.62 58.38 64.64 71.04 77.63 84.57 91.07 97.97 105.29 - 112.75 120.34 128.06 135.91 143.88 151.97 159.33 167.64 176.02 184.39 192.81 201.3 209.87 218.53 226.39 235.23 - 244.42 253.64 263.83 275.3 285.32 295.14 305 315.02 / - 1 2 14 1 29.71 39.84 49.81 59.27 67.84 76.43 85.83 94.14 103.79 113.46 121.85 131.92 - 141.84 152.32 162.21 173.01 183.78 194.37 205.68 217.16 228.83 239.91 251.66 263.66 275.93 288.27 300.72 313.28 - 325.96 338.77 351.74 364.86 378.55 393.22 408.03 422.83 / - 1 2 15 1 31.56 47.54 61.68 74.66 87.38 100.55 113.12 126.3 139.66 152.76 166.94 181.96 - 196.5 210.17 225.89 241.42 257.67 273.46 290.43 307.67 324.52 342.22 360.56 379.23 398.21 417.42 435.92 455.33 - 475.15 495.5 516.59 537.65 558.62 581.58 604.59 627.8 / - 1 2 16 1 42.81 63.83 84.78 104.46 123.44 142.9 162.82 183.53 204.4 225.54 248.95 270.61 - 294.79 319.75 342.58 368.68 395.5 422.58 450.61 478.65 508.34 538.02 569.2 601.08 632.9 666.04 699.83 734.43 - 769.76 807.1 845.43 884.65 924.04 963.9 1003.94 1044.84 / - 1 2 17 1 60.55 92.89 124.83 155.7 186.38 218.06 251.22 285.97 321.79 359.62 398.04 439.69 - 480.63 525.2 570.95 616.57 664.91 715.85 768.57 822.74 878.52 936.06 996.01 1057.35 1119.34 1180.44 1238.35 1292.01 - 1333.5 1380 1426.88 1475.42 1525.36 1579.6 1631.5 1681.85 / - 1 2 18 1 89.11 140.87 190.86 242.7 296.41 352.96 413.11 477.09 545.27 616.95 692.13 772.23 - 856.64 945.7 1038.01 1132.35 1229.36 1320.06 1408.95 1501.44 1595.87 1685.71 1778.57 1871.77 1964.51 2060.28 2157.28 2258.57 - 2355.86 2460.68 2563.48 2671.44 2775.87 2884.63 2992.63 3107.17 / - 1 2 19 1 134.19 213.59 298.12 392.96 495.03 607.23 727.25 859.22 1000.85 1151.42 1301.44 1444.42 - 1589.23 1748.86 1904.7 2065.83 2239.9 2410.45 2583.86 2766.46 2948.66 3140.39 3336.01 3533.55 3735.03 3943.56 4155.15 4373.49 - 4599.97 4821.66 5056.12 5282.47 5527.75 5776.54 6014.49 6270.17 / - 1 2 20 1 204.16 326.67 473.59 661.17 873.8 1116.09 1364.1 1607.81 1872.8 2148.45 2441.67 2753.57 - 3065.8 3410.85 3756.47 4109.69 4512.33 4899.42 5300.32 5709.5 6142.59 6574.49 7029.66 7485.69 7968.17 8453.24 8959.46 9450 - 9983.04 10518.49 11067.34 11639.91 12219.79 12789.02 13402.08 14046.22 / - 1 3 1 1 196.16 195.95 196 196.19 196.49 196.88 197.35 197.88 198.49 199.16 199.89 200.69 - 201.55 202.46 203.44 204.47 205.57 206.72 207.93 209.19 210.51 211.89 213.33 214.82 216.37 217.98 219.64 221.36 - 223.13 224.96 226.85 228.79 230.79 232.84 234.94 237.11 / - 1 3 2 1 196.07 195.84 195.88 196.07 196.37 196.75 197.22 197.76 198.36 199.03 199.76 200.56 - 201.42 202.33 203.31 204.35 205.44 206.59 207.8 209.07 210.39 211.77 213.21 214.71 216.26 217.86 219.53 221.25 - 223.02 224.85 226.74 228.68 230.68 232.74 234.85 237.01 / - 1 3 3 1 195.89 195.64 195.66 195.85 196.14 196.52 196.99 197.52 198.13 198.8 199.53 200.32 - 201.18 202.1 203.08 204.11 205.21 206.36 207.57 208.84 210.16 211.55 212.99 214.48 216.04 217.64 219.31 221.03 - 222.81 224.64 226.53 228.48 230.48 232.54 234.65 236.82 / - 1 3 4 1 195.51 195.16 195.14 195.29 195.56 195.92 196.37 196.9 197.5 198.16 198.89 199.69 - 200.55 201.46 202.44 203.48 204.58 205.73 206.95 208.22 209.55 210.94 212.39 213.89 215.45 217.07 218.74 220.47 - 222.26 224.1 226 227.96 229.97 232.04 234.16 236.34 / - 1 3 5 1 194.02 192.88 192.67 192.74 192.95 193.29 193.72 194.24 194.85 195.52 196.27 197.08 - 197.96 198.91 199.92 200.99 202.13 203.32 204.58 205.9 207.28 208.71 210.21 211.76 213.37 215.04 216.77 218.56 - 220.4 222.3 224.26 226.28 228.35 230.48 232.66 234.9 / - 1 3 6 1 189.13 186.17 185.54 185.45 185.59 185.91 186.35 186.91 187.58 188.33 189.17 190.09 - 191.09 192.16 193.3 194.52 195.81 197.16 198.59 200.07 201.56 203.16 204.81 206.53 208.31 210.14 212.04 214 - 216.01 218.08 220.21 222.39 224.64 226.92 229.26 231.65 / - 1 3 7 1 174.78 169.99 168.99 168.77 168.91 169.32 169.93 170.71 171.62 172.66 173.82 175.08 - 176.42 177.85 179.37 180.98 182.64 184.4 186.2 188.09 190.03 192.01 194.06 196.17 198.31 200.53 202.8 205.11 - 207.47 209.89 212.36 214.87 217.44 220.04 222.7 225.4 / - 1 3 8 1 144.35 136.76 135.88 136 136.79 137.95 139.36 141.01 142.94 144.89 146.94 149.12 - 151.34 153.68 156.08 158.72 161.25 163.8 166.43 169.06 171.77 174.53 177.63 180.46 183.3 186.2 189.11 192.07 - 195.07 198.08 201.69 204.78 207.9 211.05 214.24 217.46 / - 1 3 9 1 93.34 89.19 90.41 92.46 94.9 97.63 100.47 103.51 106.62 109.9 113.2 116.68 - 120.13 123.77 127.51 131.11 134.91 138.56 142.38 146.23 149.98 153.83 157.71 161.66 165.45 169.48 173.31 177.2 - 181.51 185.41 189.34 193.26 197.75 201.7 205.68 209.67 / - 1 3 10 1 56.43 58.63 61.54 64.75 68.12 71.63 75.24 78.98 82.83 86.83 90.9 95.05 - 99.3 103.63 107.93 112.5 117.05 121.51 126.18 130.9 135.68 140.51 145.4 150.06 155.02 160.01 164.74 169.79 - 174.89 179.68 184.85 189.67 194.91 199.85 205.03 210.18 / - 1 3 11 1 44.13 47.77 51.24 54.84 58.54 62.35 66.29 70.35 74.54 78.86 83.29 87.85 - 92.52 97.29 102.72 108.02 113.32 118.69 124.08 129.6 135.09 140.65 146.46 152.16 157.9 163.71 169.48 175.3 - 181.2 187.15 192.79 198.82 204.9 211.03 216.78 222.99 / - 1 3 12 1 39.23 44 48.14 52.24 56.55 61.11 65.9 70.89 76.04 81.36 86.83 92.44 - 98.17 104.03 109.98 115.93 121.9 127.95 134.09 140.31 146.61 153 160.02 167.3 174.64 181.81 188.87 195.96 - 203.16 210.63 217.87 225.18 232.53 239.95 247.44 255 / - 1 3 13 1 34.43 40.34 46.53 52.79 58.61 64.93 71.39 77.99 84.97 91.53 98.46 105.83 - 113.34 120.98 128.75 136.64 144.66 152.8 160.21 168.57 176.99 185.42 193.89 202.43 211.06 219.77 227.68 236.58 - 245.54 254.83 265.13 276.76 286.79 296.75 306.68 316.75 / - 1 3 14 1 29.67 39.87 49.89 59.42 68.05 76.7 86.14 94.51 104.2 113.91 122.35 132.49 - 142.43 152.96 162.91 173.75 184.57 195.22 206.59 218.13 229.84 240.98 252.79 264.85 277.17 289.58 302.09 314.72 - 327.46 340.34 353.38 366.58 379.94 394.29 409.24 424.29 / - 1 3 15 1 31.44 47.57 61.74 74.77 87.56 100.79 113.14 126.65 140.04 153.19 167.42 182.48 - 197.07 210.81 226.64 242.17 258.46 274.31 291.32 308.65 325.9 343.26 361.65 380.39 399.45 418.74 437.32 456.82 - 476.71 497.54 518.31 539.45 560.94 582.64 605.95 629.66 / - 1 3 16 1 42.76 63.81 85.07 104.56 123.72 143.09 163.05 183.79 204.7 225.88 249.34 271.06 - 295.28 320.29 343.86 369.35 396.22 423.35 451.41 479.48 509.19 538.89 570.09 601.97 633.79 667.01 700.85 735.5 - 770.75 807.81 846.29 885.31 925.04 964.77 1005.18 1045.41 / - 1 3 17 1 60.45 92.82 124.83 155.76 186.51 218.21 251.38 286.35 322.39 359.79 398.24 439.89 - 480.86 525.45 571.21 617.83 665.1 715.96 768.6 822.85 879.01 936.18 995.32 1056.75 1119.1 1180.95 1239.33 1293.48 - 1336.75 1385.06 1433.4 1483.73 1536.03 1591.07 1644.67 1696.74 / - 1 3 18 1 88.98 140.93 190.8 242.77 296.53 353.13 413.24 477.13 545.21 616.85 691.87 771.79 - 855.99 944.87 1037.22 1131.62 1228.5 1316.8 1400.37 1488.31 1575.42 1665.84 1760.26 1855.57 1950.82 2048.09 2144.54 2247.31 - 2345.37 2450.57 2556.02 2662.51 2771.92 2879.55 2989.93 3110.22 / - 1 3 19 1 133.99 213.41 297.69 392.3 495.11 605.93 727 858.65 999.97 1150.34 1300.83 1444.45 - 1589.89 1750.17 1906.83 2069.82 2246.41 2419.29 2595.8 2779.04 2964.12 3156.8 3354.15 3555.91 3759.76 3970.54 4184.42 4405.15 - 4633.92 4858.36 5095.15 5324.44 5572.16 5823.26 6064.45 6322.88 / - 1 3 20 1 203.95 326.55 471.01 657.85 872.83 1115.31 1359.14 1608.38 1874.3 2151.18 2445.73 2759.12 - 3072.94 3419.93 3767.3 4122.57 4527.43 4918.64 5324.91 5736.17 6176.61 6615.67 7076.61 7530.85 8018.68 8516.84 9019.34 9524.7 - 10053.46 10604.5 11160.1 11729.62 12325.91 12901.77 13521.84 14157.75 / - 1 4 1 1 197.99 197.77 197.81 198 198.3 198.69 199.15 199.69 200.3 200.97 201.7 202.5 - 203.35 204.27 205.25 206.28 207.38 208.53 209.74 211.01 212.33 213.72 215.16 216.65 218.2 219.81 221.48 223.2 - 224.98 226.81 228.7 230.65 232.65 234.71 236.82 238.99 / - 1 4 2 1 197.89 197.65 197.69 197.88 198.17 198.56 199.02 199.56 200.17 200.84 201.57 202.36 - 203.22 204.14 205.12 206.15 207.25 208.4 209.61 210.88 212.21 213.59 215.03 216.53 218.08 219.69 221.36 223.08 - 224.86 226.7 228.59 230.54 232.54 234.6 236.71 238.88 / - 1 4 3 1 197.71 197.44 197.47 197.65 197.94 198.32 198.78 199.32 199.92 200.59 201.33 202.12 - 202.98 203.9 204.87 205.91 207.01 208.16 209.37 210.64 211.97 213.36 214.8 216.3 217.85 219.47 221.13 222.86 - 224.64 226.48 228.37 230.32 232.33 234.39 236.51 238.68 / - 1 4 4 1 197.27 196.91 196.87 197.02 197.28 197.65 198.1 198.62 199.22 199.89 200.62 201.41 - 202.27 203.19 204.17 205.21 206.31 207.47 208.68 209.96 211.29 212.68 214.13 215.64 217.2 218.82 220.5 222.24 - 224.03 225.88 227.78 229.74 231.76 233.83 235.96 238.15 / - 1 4 5 1 195.64 194.41 194.2 194.26 194.47 194.81 195.24 195.76 196.36 197.04 197.79 198.6 - 199.49 200.44 201.45 202.52 203.66 204.86 206.12 207.45 208.83 210.27 211.77 213.33 214.95 216.63 218.36 220.15 - 222.01 223.91 225.88 227.9 229.98 232.11 234.3 236.55 / - 1 4 6 1 190.03 187.17 186.69 186.6 186.74 187.05 187.5 188.06 188.73 189.48 190.32 191.25 - 192.25 193.33 194.48 195.7 196.99 198.35 199.77 201.26 202.82 204.44 206.12 207.87 209.63 211.49 213.4 215.37 - 217.39 219.47 221.61 223.8 226.05 228.36 230.72 233.14 / - 1 4 7 1 175.67 170.57 169.55 169.33 169.49 169.92 170.54 171.33 172.27 173.33 174.48 175.76 - 177.13 178.59 180.13 181.73 183.42 185.21 187.06 188.95 190.92 192.94 195.01 197.13 199.32 201.57 203.84 206.19 - 208.58 211.04 213.51 216.06 218.65 221.29 223.98 226.72 / - 1 4 8 1 144.68 136.66 135.78 135.91 136.73 137.92 139.36 141.04 142.9 144.98 147.08 149.29 - 151.56 153.93 156.35 158.85 161.61 164.22 166.89 169.57 172.32 175.09 178.27 181.12 184.03 186.97 189.92 192.93 - 195.95 199.01 202.69 205.81 208.97 212.17 215.39 218.66 / - 1 4 9 1 92.97 89.25 90.47 92.55 95.01 97.76 100.63 103.69 106.82 110.12 113.45 116.94 - 120.42 124.08 127.69 131.5 135.35 139.06 142.9 146.66 150.57 154.45 158.37 162.38 166.2 170.29 174.14 178 - 182.35 186.28 190.26 194.23 198.75 202.77 206.79 210.84 / - 1 4 10 1 56.59 58.83 61.76 64.99 68.4 71.93 75.58 79.35 83.23 87.22 91.31 95.49 - 99.76 104.12 108.55 113.04 117.6 122.24 126.94 131.7 136.52 141.39 146.06 151.02 156.02 160.77 165.81 170.91 - 175.72 180.88 186.1 190.96 196.25 201.16 206.43 211.43 / - 1 4 11 1 44.16 47.91 51.42 55.04 58.77 62.62 66.59 70.69 74.93 79.28 83.76 88.36 - 93.07 97.89 103.3 108.72 114.06 119.49 124.92 130.49 136.03 141.63 147.3 153.24 159.04 164.89 170.72 176.59 - 182.54 188.21 194.24 200.32 206.46 212.24 218.46 224.73 / - 1 4 12 1 39.16 44.07 48.28 52.44 56.79 61.39 66.21 71.24 76.44 81.8 87.31 92.96 - 98.74 104.64 110.64 116.63 122.64 128.73 134.92 141.19 147.54 153.98 160.68 168.22 175.67 182.85 190.08 197.31 - 204.58 211.8 219.1 226.79 234.22 241.71 249.27 256.47 / - 1 4 13 1 34.36 40.35 46.63 52.96 58.84 65.21 71.71 78.36 85.37 91.97 98.96 106.37 - 113.93 121.61 129.43 137.37 145.44 153.63 161.09 169.5 177.97 186.45 194.97 203.56 212.24 221.01 228.98 237.93 - 247.69 256 266.1 277.99 288.25 298.29 308.36 318.48 / - 1 4 14 1 29.65 39.9 49.96 59.56 68.25 76.96 86.45 94.88 104.6 114.1 122.85 133.11 - 143.03 153.6 163.6 174.49 185.36 196.06 207.49 219.08 230.86 242.04 253.91 266.02 278.42 290.88 303.46 316.16 - 328.96 341.91 355.02 368.28 381.72 395.32 410.37 425.61 / - 1 4 15 1 31.44 47.59 61.8 75.01 87.84 101.02 113.84 127.3 140.4 153.33 167.88 182.99 - 197.63 211.44 227.32 242.91 259.25 275.15 292.2 309.58 326.88 344.3 362.72 381.52 400.66 420.04 438.7 458.53 - 478.26 499.16 520.01 541.22 562.8 583.62 608.02 632.16 / - 1 4 16 1 42.72 63.81 85.1 104.65 123.86 143.28 163.27 184.04 204.98 226.21 249.69 271.49 - 295.77 320.82 344 369.98 396.93 424.09 452.17 480.27 510 539.82 570.94 602.82 634.62 667.91 701.82 736.5 - 771.99 807.91 846.45 885.66 925.67 965.77 1005.99 1046.68 / - 1 4 17 1 60.35 92.78 124.99 155.82 186.63 218.36 251.54 286.5 322.54 359.94 398.41 440.06 - 481.06 525.65 571.68 617.1 665.22 715.99 768.55 822.92 879.02 936.19 995.3 1056.44 1119.05 1181.02 1240.2 1295.36 - 1340.26 1390.21 1440.25 1492.26 1546.19 1601.98 1659.01 1712.99 / - 1 4 18 1 88.83 140.79 190.74 242.92 296.65 353.28 413.49 477.18 545.13 616.71 691.76 771.29 - 855.31 943.97 1036.28 1130.78 1227.47 1316.62 1401.17 1489.68 1578.65 1669.21 1764.44 1860.73 1957.13 2055.4 2154.31 2258.32 - 2356.05 2462.48 2569.3 2677.05 2787.74 2898.61 3010.71 3132.4 / - 1 4 19 1 133.79 213.23 297.28 392.31 494.11 605.84 725.63 858.08 998.69 1149.19 1300.14 1444.37 - 1590.46 1751.42 1908.86 2072.7 2243.76 2426.5 2608.26 2791.55 2978.11 3174.65 3374.63 3579.04 3785.6 3996.37 4215.28 4435.59 - 4669.67 4893.84 5136.19 5368.71 5615.2 5872.49 6117.01 6378.4 / - 1 4 20 1 203.74 326.43 468.43 654.52 868.16 1108.76 1358.67 1604.74 1875.86 2153.96 2449.91 2764.83 - 3080.34 3429.35 3778.43 4135.91 4510.57 4940.12 5346.38 5763.49 6208.44 6649.64 7116.61 7582.63 8076.38 8580.94 9089.38 9600.7 - 10135.4 10692.96 11255.7 11832.46 12436.08 13019.33 13646.81 14290.47 / - 1 5 1 1 199.88 199.62 199.65 199.83 200.12 200.51 200.97 201.51 202.11 202.78 203.51 204.31 - 205.16 206.08 207.06 208.1 209.19 210.34 211.56 212.82 214.15 215.54 216.98 218.48 220.03 221.64 223.31 225.04 - 226.82 228.66 230.55 232.5 234.51 236.57 238.68 240.86 / - 1 5 2 1 199.78 199.5 199.52 199.7 199.99 200.38 200.84 201.37 201.97 202.64 203.38 204.17 - 205.03 205.95 206.92 207.96 209.06 210.21 211.42 212.69 214.02 215.41 216.85 218.35 219.9 221.52 223.19 224.91 - 226.7 228.54 230.43 232.38 234.39 236.45 238.57 240.75 / - 1 5 3 1 199.58 199.28 199.29 199.46 199.75 200.13 200.59 201.12 201.73 202.39 203.13 203.92 - 204.78 205.7 206.67 207.71 208.81 209.96 211.18 212.45 213.78 215.16 216.61 218.11 219.67 221.28 222.95 224.68 - 226.47 228.31 230.21 232.16 234.17 236.24 238.36 240.54 / - 1 5 4 1 199.09 198.68 198.61 198.73 198.98 199.33 199.77 200.29 200.89 201.55 202.28 203.07 - 203.93 204.85 205.83 206.87 207.97 209.13 210.35 211.63 212.97 214.37 215.82 217.34 218.91 220.53 222.22 223.96 - 225.76 227.61 229.53 231.5 233.52 235.6 237.74 239.94 / - 1 5 5 1 197.29 195.94 195.7 195.73 195.92 196.24 196.67 197.18 197.78 198.46 199.21 200.03 - 200.92 201.88 202.9 203.99 205.14 206.35 207.63 208.97 210.37 211.82 213.33 214.9 216.52 218.2 219.95 221.74 - 223.6 225.52 227.49 229.52 231.61 233.75 235.95 238.21 / - 1 5 6 1 191.37 188.32 187.79 187.62 187.77 188.09 188.55 189.12 189.79 190.56 191.39 192.33 - 193.34 194.43 195.6 196.83 198.14 199.52 200.96 202.47 204.03 205.65 207.34 209.09 210.91 212.78 214.71 216.7 - 218.72 220.83 222.99 225.21 227.47 229.79 232.16 234.59 / - 1 5 7 1 176.55 171.17 170.11 169.84 170 170.44 171.09 171.9 172.83 173.9 175.09 176.39 - 177.78 179.27 180.8 182.44 184.16 185.96 187.82 189.74 191.75 193.79 195.91 198.07 200.27 202.55 204.86 207.23 - 209.65 212.12 214.64 217.21 219.83 222.49 225.21 227.97 / - 1 5 8 1 144.99 136.49 135.62 135.76 136.6 137.81 139.28 141 142.89 144.9 147.16 149.41 - 151.71 154.13 156.58 159.13 161.92 164.59 167.26 170.02 172.82 175.62 178.49 181.74 184.7 187.66 190.68 193.73 - 196.79 199.91 203.03 206.8 210.01 213.24 216.51 219.82 / - 1 5 9 1 93.09 89.32 90.55 92.64 95.11 97.84 100.79 103.82 107.04 110.3 113.72 117.24 - 120.74 124.43 128.06 131.88 135.6 139.54 143.44 147.22 151.17 155.1 159.05 162.92 166.99 170.88 174.99 178.9 - 183.29 187.22 191.2 195.2 199.23 203.83 207.9 212 / - 1 5 10 1 56.71 59.05 61.97 65.23 68.67 72.25 75.95 79.77 83.69 87.71 91.83 96.05 - 100.35 104.74 109.2 113.73 118.31 122.99 127.72 132.52 137.37 142.05 146.98 151.97 157.02 161.8 166.89 172.03 - 176.88 182.08 186.98 192.26 197.19 202.55 207.81 212.85 / - 1 5 11 1 44.21 48.06 51.62 55.29 59.06 62.94 66.96 71.1 75.37 79.76 84.28 88.92 - 93.67 98.53 103.81 109.38 114.74 120.22 125.77 131.38 136.97 142.62 148.33 154.1 159.93 165.82 171.71 177.61 - 183.55 189.59 195.68 201.82 208.02 213.85 220.13 226.47 / - 1 5 12 1 39.12 44.15 48.45 52.67 57.06 61.7 66.57 71.63 76.87 82.27 87.82 93.51 - 99.33 105.27 111.3 117.32 123.38 129.52 135.75 142.06 148.46 154.95 161.51 169.11 176.69 183.88 191.28 198.49 - 205.79 213.27 220.63 228.05 235.53 243.07 250.67 258.35 / - 1 5 13 1 34.31 40.38 46.76 53.16 59.16 65.52 72.06 78.74 85.79 92.43 99.46 106.92 - 114.51 122.24 130.1 138.09 146.21 154.45 161.96 170.41 178.94 187.46 196.03 204.68 213.42 222.24 230.26 239.27 - 249.09 256.84 267.33 279.35 289.54 299.82 310.05 320.23 / - 1 5 14 1 29.64 39.95 50.08 59.73 68.47 77.33 86.76 95.24 105.01 114.54 123.34 133.65 - 143.63 154.24 164.29 175.23 186.15 196.9 208.37 220.03 231.86 243.1 255.02 267.19 279.64 292.18 304.82 317.58 - 330.44 343.46 356.64 369.98 383.48 397.16 411.89 427.25 / - 1 5 15 1 31.43 47.66 61.87 75.21 88.21 101.24 113.75 127.62 140.76 154.79 168.35 183.5 - 197.23 212.06 228 243.65 260.04 275.99 293.08 310.5 327.85 345.31 363.79 382.64 401.85 421.31 440.05 459.97 - 479.77 500.76 521.68 542.96 564.61 585.5 609.03 632.15 / - 1 5 16 1 42.67 63.79 85.13 104.74 124 143.47 163.49 184.29 205.26 226.53 250.04 271.9 - 296.24 321.34 346.23 370.6 397.61 424.81 452.92 481.05 510.79 540.97 571.74 603.64 635.64 668.73 702.74 737.47 - 772.98 808.41 847.05 886.4 926.24 966.32 1007.04 1047.48 / - 1 5 17 1 60.26 92.77 124.98 155.89 186.74 218.64 251.7 286.66 322.69 360.08 398.56 440.19 - 481.22 525.81 571.84 618.74 665.3 715.97 768.42 822.7 878.9 936.09 995.18 1055.48 1118.32 1180.92 1240.5 1297.01 - 1343.95 1395.39 1447.2 1501.68 1556.55 1612.86 1672.87 1728.71 / - 1 5 18 1 88.67 140.83 190.64 242.97 296.77 353.58 413.61 477.26 545.04 616.56 691.43 770.74 - 854.54 942.97 1035.17 1129.79 1225.61 1316.27 1401.46 1491.4 1580.98 1673.5 1769.69 1866.67 1964.61 2064.15 2162.76 2269.61 - 2368.67 2476.43 2584.65 2693.81 2806.01 2918.38 3032.21 3154.24 / - 1 5 19 1 133.59 213.04 296.86 391.57 494.15 604.41 725.26 856.03 997.72 1147.98 1300.52 1444.2 - 1590.91 1752.59 1910.83 2075.57 2247.59 2431.56 2615.85 2802.09 2991.73 3190.62 3394.26 3601.61 3808.83 4025.85 4246.82 4470.24 - 4707.01 4934.62 5179.59 5415.34 5664.68 5924.6 6172.59 6436.88 / - 1 5 20 1 203.52 326.33 465.11 651.18 862.93 1107.9 1352.99 1605.18 1865.41 2156.81 2454.24 2751.27 - 3088.02 3417.81 3790.16 4149.82 4526.82 4955.41 5367.67 5787.86 6234.52 6684.69 7160.31 7633.05 8125.75 8636.99 9159.79 9668.23 - 10218.78 10772.99 11353.58 11938.53 12536.32 13141.28 13776.8 14428.61 / - 1 6 1 1 201.99 201.6 201.57 201.73 202 202.37 202.83 203.36 203.95 204.62 205.35 206.14 - 206.99 207.91 208.89 209.92 211.02 212.17 213.38 214.65 215.98 217.36 218.81 220.31 221.86 223.48 225.15 226.88 - 228.66 230.5 232.4 234.35 236.36 238.43 240.55 242.73 / - 1 6 2 1 201.89 201.48 201.44 201.59 201.87 202.24 202.69 203.22 203.81 204.48 205.21 206 - 206.85 207.77 208.75 209.78 210.88 212.03 213.24 214.51 215.84 217.23 218.67 220.17 221.73 223.35 225.02 226.75 - 228.53 230.38 232.28 234.23 236.24 238.31 240.44 242.62 / - 1 6 3 1 201.68 201.25 201.21 201.35 201.62 201.99 202.44 202.96 203.56 204.22 204.95 205.74 - 206.6 207.51 208.49 209.53 210.62 211.78 212.99 214.26 215.59 216.98 218.42 219.93 221.49 223.1 224.78 226.51 - 228.3 230.14 232.05 234 236.02 238.09 240.22 242.4 / - 1 6 4 1 201.12 200.54 200.4 200.49 200.69 201.04 201.48 202 202.59 203.25 203.98 204.77 - 205.63 206.55 207.53 208.57 209.67 210.84 212.06 213.34 214.68 216.08 217.53 219.05 220.62 222.25 223.94 225.69 - 227.49 229.35 231.27 233.24 235.28 237.36 239.51 241.71 / - 1 6 5 1 199.19 197.55 197.14 197.16 197.36 197.68 198.11 198.63 199.23 199.91 200.67 201.49 - 202.38 203.34 204.37 205.46 206.57 207.79 209.06 210.4 211.8 213.27 214.79 216.37 218.02 219.72 221.48 223.3 - 225.17 227.11 229.1 231.15 233.24 235.39 237.6 239.87 / - 1 6 6 1 192.96 189.57 188.85 188.72 188.85 189.15 189.6 190.17 190.84 191.61 192.47 193.41 - 194.44 195.54 196.72 197.97 199.28 200.63 202.08 203.59 205.18 206.82 208.53 210.3 212.14 214.03 215.98 217.98 - 220.04 222.16 224.34 226.57 228.84 231.18 233.58 236.04 / - 1 6 7 1 177.66 171.73 170.62 170.36 170.52 170.95 171.59 172.4 173.37 174.46 175.66 176.97 - 178.39 179.87 181.46 183.12 184.86 186.65 188.54 190.48 192.52 194.6 196.75 198.95 201.18 203.48 205.84 208.23 - 210.68 213.18 215.73 218.33 220.97 223.67 226.42 229.21 / - 1 6 8 1 144.97 136.32 135.31 135.56 136.41 137.66 139.16 140.91 142.84 144.88 147.05 149.43 - 151.8 154.26 156.74 159.33 161.94 164.88 167.61 170.4 173.21 176.09 179.01 182.32 185.31 188.32 191.38 194.46 - 197.59 200.75 203.92 207.75 211 214.29 217.61 220.95 / - 1 6 9 1 92.66 89.4 90.62 92.74 95.24 98.02 101 104.06 107.3 110.57 114.01 117.45 - 121.06 124.77 128.42 132.26 136.01 139.97 143.8 147.77 151.77 155.74 159.73 163.64 167.75 171.68 175.85 179.81 - 183.81 188.23 192.26 196.26 200.29 204.92 209.02 213.17 / - 1 6 10 1 56.87 59.25 62.22 65.52 69.01 72.63 76.37 80.21 84.16 88.21 92.36 96.61 - 100.94 105.35 109.85 114.4 119.02 123.73 128.5 133.33 138.21 142.92 147.9 152.93 157.72 162.83 167.96 172.83 - 178.04 183.29 188.23 193.56 198.53 203.94 208.96 214.3 / - 1 6 11 1 44.27 48.23 51.84 55.55 59.37 63.3 67.35 71.53 75.83 80.26 84.82 89.49 - 94.27 99.16 104.4 110.04 115.5 120.99 126.53 132.13 137.91 143.61 149.36 155.18 161.06 167 172.93 178.88 - 184.88 190.97 197.12 203.32 209.18 215.46 221.8 227.75 / - 1 6 12 1 39.09 44.23 48.62 52.91 57.35 62.04 66.94 72.05 77.32 82.76 88.35 94.07 - 99.93 105.91 111.97 118.02 124.12 130.3 136.57 142.93 149.38 155.91 162.52 169.99 177.69 185.08 192.35 199.82 - 207.18 214.74 222.16 229.65 237.19 244.81 252.48 260.24 / - 1 6 13 1 34.27 40.43 46.89 53.37 59.51 65.84 72.42 79.14 86.23 92.98 99.97 107.47 - 115.1 122.87 130.78 138.81 146.97 155.25 162.81 171.32 179.89 188.46 197.09 205.79 214.58 223.46 231.53 240.6 - 250.48 259.69 268.21 280.39 291.03 301.33 311.63 321.96 / - 1 6 14 1 29.63 40.01 50.2 59.9 68.71 77.73 87.08 95.62 105.42 114.99 123.83 134.18 - 144.25 154.86 164.96 175.95 187.08 197.72 209.24 220.95 232.84 244.13 256.1 268.34 280.85 293.45 306.16 318.97 - 331.91 344.99 358.24 371.66 385.24 398.98 412.9 428.37 / - 1 6 15 1 31.42 47.69 61.95 75.37 88.44 101.47 114.11 127.93 141.11 155.2 168.8 183.99 - 197.78 212.65 228.66 244.42 260.81 276.81 293.94 311.41 328.81 346.31 364.82 383.72 402.98 422.53 442.19 461.36 - 481.24 502.31 523.31 544.67 566.38 587.34 610.55 634.29 / - 1 6 16 1 42.62 63.78 85.18 104.83 124.13 143.65 163.71 184.53 205.53 226.84 250.38 272.28 - 296.69 321.83 346.77 371.18 398.27 425.49 453.63 481.97 511.54 541.53 572.51 604.4 636.69 669.45 703.56 738.38 - 773.92 809.36 847 886.43 926.45 966.86 1007.46 1048.14 / - 1 6 17 1 60.16 92.7 124.98 155.95 187.02 219.05 251.86 286.8 322.83 360.2 398.69 440.29 - 481.34 525.94 571.94 618.93 665.32 715.87 768.39 822.47 878.58 935.83 994.93 1054.79 1117.86 1180.37 1241.19 1298.45 - 1347.23 1400.58 1454.2 1510.42 1567.07 1625.28 1686.97 1745.8 / - 1 6 18 1 88.51 140.85 190.56 243.02 296.97 353.7 413.73 477.43 544.94 616.36 691.08 770.17 - 853.71 941.89 1033.9 1128.64 1224.74 1314.88 1400.79 1491.11 1582.01 1675.24 1772.3 1870.48 1969.67 2070.26 2171.32 2277.73 - 2379.88 2488.9 2598.38 2709.18 2822.79 2936.61 3052.02 3175.38 / - 1 6 19 1 133.37 212.85 296.46 391.53 493.02 604.33 723.81 855.17 996.71 1146.7 1300.28 1439.62 - 1591.26 1745.65 1912.73 2078.44 2251.39 2436.54 2623.29 2809.71 3002.39 3204.02 3409.89 3620.41 3833.36 4055.05 4275.22 4504.96 - 4744.98 4976.17 5220.78 5463.64 5716.49 5975.05 6231.19 6498.83 / - 1 6 20 1 203.29 326.24 461.6 648.2 861.92 1101.26 1352.38 1602.02 1866.98 2145.4 2441.73 2757.53 - 3096.04 3427.76 3802.45 4166.23 4543.85 4978.79 5390 5813.06 6258.55 6715.57 7194.06 7677.92 8180.61 8699.07 9220.06 9745.14 - 10302.83 10864.85 11442.81 12046.99 12653.89 13263 13911.66 14572.37 / - 1 7 1 1 204.11 203.58 203.5 203.62 203.88 204.24 204.68 205.2 205.79 206.45 207.18 207.97 - 208.82 209.73 210.71 211.74 212.84 213.99 215.2 216.47 217.8 219.18 220.63 222.13 223.69 225.31 226.98 228.71 - 230.5 232.34 234.24 236.2 238.21 240.28 242.41 244.59 / - 1 7 2 1 204 203.46 203.37 203.49 203.74 204.1 204.54 205.06 205.65 206.31 207.04 207.82 - 208.68 209.59 210.56 211.6 212.69 213.85 215.06 216.33 217.66 219.04 220.49 221.99 223.55 225.17 226.84 228.58 - 230.36 232.21 234.11 236.07 238.09 240.16 242.29 244.47 / - 1 7 3 1 203.79 203.23 203.13 203.24 203.49 203.84 204.28 204.8 205.39 206.05 206.77 207.56 - 208.41 209.33 210.3 211.34 212.43 213.59 214.8 216.07 217.4 218.79 220.23 221.74 223.3 224.92 226.6 228.33 - 230.12 231.97 233.87 235.84 237.85 239.93 242.06 244.25 / - 1 7 4 1 203.14 202.39 202.12 202.19 202.4 202.74 203.16 203.67 204.25 204.91 205.64 206.43 - 207.28 208.2 209.18 210.23 211.33 212.49 213.72 215 216.35 217.75 219.21 220.73 222.31 223.94 225.63 227.38 - 229.19 231.06 232.98 234.96 236.99 239.09 241.24 243.45 / - 1 7 5 1 201.03 199.18 198.66 198.65 198.82 199.13 199.55 200.06 200.66 201.34 202.09 202.91 - 203.8 204.76 205.79 206.88 208.04 209.26 210.54 211.88 213.29 214.76 216.28 217.87 219.51 221.18 222.95 224.78 - 226.66 228.6 230.6 232.66 234.78 236.95 239.19 241.47 / - 1 7 6 1 194.45 190.78 189.95 189.78 189.87 190.16 190.6 191.16 191.83 192.6 193.46 194.41 - 195.44 196.55 197.73 198.99 200.32 201.72 203.19 204.72 206.32 207.98 209.66 211.45 213.3 215.2 217.17 219.19 - 221.28 223.42 225.62 227.88 230.19 232.56 234.97 237.45 / - 1 7 7 1 178.75 172.23 171.06 170.79 170.94 171.37 172.01 172.84 173.81 174.92 176.15 177.46 - 178.89 180.41 182.02 183.72 185.46 187.3 189.21 191.19 193.23 195.33 197.52 199.74 202.03 204.36 206.74 209.17 - 211.65 214.18 216.76 219.4 222.07 224.81 227.59 230.41 / - 1 7 8 1 145.43 136.07 135.04 135.28 136.16 137.43 138.96 140.74 142.68 144.77 146.98 149.4 - 151.81 154.3 156.83 159.46 162.11 165.1 167.86 170.71 173.56 176.49 179.46 182.42 185.86 188.91 192.03 195.14 - 198.32 201.52 204.76 208.03 211.95 215.29 218.65 222.05 / - 1 7 9 1 92.83 89.42 90.71 92.83 95.43 98.23 101.17 104.3 107.48 110.84 114.3 117.76 - 121.39 124.98 128.78 132.65 136.41 140.4 144.24 148.26 152.2 156.27 160.31 164.35 168.52 172.5 176.72 180.74 - 184.77 189.26 193.33 197.4 201.48 206.14 210.25 214.4 / - 1 7 10 1 57.03 59.48 62.5 65.86 69.37 73.01 76.77 80.66 84.63 88.71 92.89 97.16 - 101.52 105.97 110.49 115.08 119.73 124.47 129.27 134.13 138.84 143.8 148.81 153.88 158.72 163.87 169.04 173.95 - 179.2 184.5 189.48 194.86 199.88 205.34 210.41 215.8 / - 1 7 11 1 44.32 48.4 52.08 55.84 59.7 63.66 67.74 71.95 76.29 80.76 85.35 90.05 - 94.87 99.8 104.91 110.7 116.27 121.76 127.38 133.02 138.68 144.59 150.4 156.26 162.19 168.17 174.16 180.16 - 186.21 192.36 198.56 204.44 210.73 217.07 223.48 229.48 / - 1 7 12 1 39.06 44.33 48.82 53.18 57.66 62.38 67.32 72.46 77.77 83.25 88.87 94.63 - 100.53 106.55 112.65 118.73 124.86 131.09 137.4 143.8 150.29 156.87 163.53 170.86 178.64 186.14 193.41 200.98 - 208.38 215.89 223.36 231.24 238.86 246.54 254.29 262.12 / - 1 7 13 1 34.24 40.51 47.05 53.6 59.96 66.16 72.78 79.53 86.66 93.84 100.49 108.02 - 115.7 123.51 131.45 139.52 147.72 155.24 163.66 172.21 180.83 189.46 198.13 206.88 215.73 224.66 232.79 241.91 - 251.85 261.12 269.38 281.66 292.19 302.64 313.2 323.7 / - 1 7 14 1 29.56 40.08 50.33 60.08 68.94 78.24 87.4 95.99 105.83 115.69 124.32 134.71 - 144.84 155.47 165.62 176.65 187.78 198.52 210.09 221.84 233.79 245.59 257.17 269.46 282.04 294.7 307.48 320.35 - 333.35 346.51 359.82 373.31 386.96 400.78 414.78 428.95 / - 1 7 15 1 31.41 47.72 62.03 75.5 88.62 101.7 114.7 128.23 141.45 155.59 169.24 184.47 - 198.31 213.23 229.29 245.13 261.56 277.61 294.79 312.29 329.39 347.28 365.83 384.76 404.06 423.7 443.44 462.7 - 482.66 503.8 524.89 546.31 568.1 589.85 612.4 634.21 / - 1 7 16 1 42.56 63.75 85.2 104.92 124.26 143.82 163.92 184.77 205.8 227.12 250.71 272.63 - 297.11 322.3 346.18 371.74 398.87 426.33 454.3 482.91 512.25 542.54 573.23 605.11 637.12 670.09 704.22 739.15 - 774.76 810.22 847.33 886.3 926.48 967.15 1008.03 1049.16 / - 1 7 17 1 60.05 92.7 124.97 156.23 187.44 219.18 252.36 286.94 322.96 360.31 398.78 440.37 - 481.41 526.02 572 618.97 665.28 715.71 768.09 822.03 878.05 935.38 994.51 1054.38 1116.61 1180.08 1241.34 1298.17 - 1350.66 1405.95 1461.24 1519.23 1578.65 1637.83 1701.19 1762.48 / - 1 7 18 1 88.35 140.8 190.43 243.04 297.07 353.81 413.89 477.44 544.82 616.13 690.68 769.54 - 852.8 940.73 1032.48 1127.28 1222.72 1315.96 1401.64 1492.94 1584.96 1679.34 1777.5 1876.83 1977.32 2078.76 2181.75 2289.47 - 2393.24 2502.96 2614.72 2727.11 2841.34 2957.87 3075.05 3199.89 / - 1 7 19 1 133.15 212.66 295.96 390.6 493.02 604.25 723.49 853.04 995.68 1145.33 1298.99 1438.96 - 1592.97 1746.54 1914.52 2081.2 2255.2 2441.45 2629.48 2817.15 3011.45 3213.12 3423.27 3637.8 3854.87 4081.48 4304.83 4538.3 - 4778.85 5017.31 5265.99 5512.68 5769.34 6031.7 6291.74 6563.19 / - 1 7 20 1 203.06 326.16 457.93 644.96 856.65 1093.97 1344.56 1599.51 1868.58 2148.41 2446.38 2764.06 - 3104.4 3438.24 3815.36 4182.34 4561.74 4959.79 5413.5 5839.6 6288.07 6744.5 7228.32 7725.35 8231.51 8750.35 9287.13 9820.7 - 10376.2 10956.88 11543.78 12157.3 12773.92 13392.7 14036.26 14721.24 / - 1 8 1 1 206.22 205.57 205.43 205.52 205.76 206.1 206.54 207.05 207.63 208.29 209.01 209.79 - 210.64 211.55 212.53 213.56 214.65 215.8 217.01 218.28 219.61 221 222.44 223.95 225.51 227.13 228.8 230.53 - 232.32 234.17 236.07 238.03 240.05 242.13 244.26 246.45 / - 1 8 2 1 206.11 205.44 205.29 205.38 205.62 205.96 206.39 206.9 207.49 208.14 208.86 209.65 - 210.5 211.41 212.38 213.41 214.5 215.66 216.87 218.14 219.47 220.85 222.3 223.8 225.36 226.98 228.66 230.39 - 232.18 234.03 235.94 237.9 239.92 242 244.13 246.32 / - 1 8 3 1 205.9 205.2 205.04 205.13 205.36 205.69 206.12 206.63 207.22 207.87 208.59 209.38 - 210.22 211.13 212.11 213.14 214.23 215.39 216.6 217.87 219.2 220.59 222.04 223.54 225.11 226.73 228.4 230.14 - 231.93 233.78 235.69 237.66 239.68 241.76 243.89 246.09 / - 1 8 4 1 205.15 204.24 203.88 203.91 204.11 204.42 204.84 205.34 205.92 206.57 207.29 208.07 - 208.93 209.85 210.83 211.87 212.97 214.14 215.36 216.65 217.99 219.4 220.86 222.38 223.96 225.6 227.3 229.06 - 230.87 232.74 234.67 236.66 238.7 240.81 242.97 245.18 / - 1 8 5 1 202.87 200.53 200.12 200.05 200.19 200.48 200.88 201.38 201.97 202.65 203.4 204.22 - 205.12 206.08 207.11 208.21 209.38 210.6 211.9 213.25 214.67 216.15 217.69 219.3 220.96 222.68 224.45 226.29 - 228.18 230.13 232.14 234.18 236.3 238.49 240.73 243.02 / - 1 8 6 1 195.91 191.73 190.9 190.71 190.8 191.08 191.52 192.09 192.76 193.54 194.41 195.37 - 196.38 197.49 198.68 199.95 201.29 202.71 204.18 205.73 207.35 209.02 210.77 212.57 214.44 216.37 218.35 220.36 - 222.46 224.62 226.84 229.12 231.45 233.83 236.28 238.78 / - 1 8 7 1 179.79 172.65 171.41 171.12 171.26 171.69 172.34 173.18 174.17 175.29 176.53 177.86 - 179.32 180.87 182.51 184.2 185.99 187.86 189.81 191.81 193.85 195.99 198.21 200.46 202.77 205.15 207.58 210.04 - 212.56 215.13 217.74 220.41 223.13 225.89 228.7 231.56 / - 1 8 8 1 145.08 135.79 134.73 134.99 135.88 137.17 138.7 140.51 142.47 144.58 146.82 149.14 - 151.73 154.26 156.83 159.5 162.19 164.97 168.04 170.93 173.86 176.8 179.82 182.83 186.33 189.43 192.59 195.77 - 199 202.24 205.53 208.86 212.2 216.23 219.64 223.1 / - 1 8 9 1 92.69 89.53 90.81 93.02 95.57 98.43 101.39 104.54 107.74 111.11 114.5 118.06 - 121.71 125.32 129.14 132.87 136.81 140.64 144.7 148.74 152.69 156.85 160.96 165.07 169.08 173.31 177.37 181.65 - 185.74 190.3 194.41 198.53 202.7 206.85 211.58 215.79 / - 1 8 10 1 57.13 59.74 62.8 66.19 69.74 73.4 77.19 81.06 85.06 89.21 93.41 97.71 - 102.1 106.58 111.13 115.75 120.43 125.2 129.86 134.74 139.68 144.67 149.72 154.57 159.71 164.9 170.12 175.07 - 180.36 185.36 190.74 196.17 201.24 206.75 211.87 217.31 / - 1 8 11 1 44.38 48.59 52.34 56.14 60.03 64.02 68.14 72.38 76.75 81.25 85.87 90.62 - 95.47 100.43 105.49 111.34 116.94 122.56 128.14 133.91 139.61 145.39 151.42 157.34 163.31 169.34 175.38 181.43 - 187.54 193.74 199.64 205.93 212.28 218.69 224.72 231.22 / - 1 8 12 1 39.06 44.46 49.04 53.46 57.98 62.73 67.7 72.88 78.22 83.73 89.39 95.19 - 101.13 107.19 113.32 119.44 125.61 131.88 138.23 144.67 151.21 157.83 164.53 171.71 179.39 187.03 194.67 202.13 - 209.76 217.34 224.87 232.48 240.14 247.89 255.69 263.57 / - 1 8 13 1 34.22 40.6 47.23 53.83 60.28 66.49 73.14 79.94 87.09 94.3 101 108.57 - 116.29 124.14 132.12 140.24 148.48 156.04 164.5 173.1 181.76 190.44 199.16 207.97 216.87 225.86 234.03 243.22 - 253.41 262.54 270.52 282.55 293.24 303.93 314.75 325.33 / - 1 8 14 1 29.58 40.16 50.45 60.26 69.25 78.58 87.72 96.35 106.23 115.38 124.81 135.23 - 145.4 156.08 166.27 177.35 188.42 199.3 210.91 222.72 234.71 246.58 258.21 270.56 283.2 295.93 308.77 321.71 - 334.77 348 361.38 374.94 388.66 402.55 416.62 430.87 / - 1 8 15 1 31.41 47.75 62.11 75.63 88.8 101.92 115.25 128.53 141.78 156.04 169.67 184.94 - 198.83 213.8 229.89 245.81 262.28 278.38 295.6 313.15 330.32 348.21 366.8 385.75 405.1 424.79 444.42 463.73 - 484.01 505.24 526.4 547.9 569.76 591.85 614.19 636.05 / - 1 8 16 1 42.5 63.72 85.22 104.99 124.38 143.98 164.11 184.98 206.04 227.39 251 272.95 - 297.47 322.72 346.64 372.24 399.41 426.96 454.93 483.67 512.91 543.4 573.88 605.76 638.04 670.66 704.71 739.71 - 775.43 811.01 848.08 885.95 926.24 967.16 1007.84 1049.62 / - 1 8 17 1 59.94 92.6 124.94 156.38 187.54 219.31 252.64 287.08 323.08 360.41 398.85 440.41 - 481.42 526.04 572.02 618.95 665.2 715.49 767.72 821.5 877.35 934.69 993.9 1054.1 1115.24 1178.87 1241.1 1299.83 - 1353.94 1410.74 1468.24 1528.09 1589.38 1650.56 1716.4 1778.54 / - 1 8 18 1 88.18 140.68 190.35 243.08 297.15 353.92 413.98 477.44 544.77 615.96 690.26 768.87 - 851.85 939.48 1030.96 1125.67 1221.46 1315.19 1403.19 1494.44 1587.7 1684.21 1782.84 1883.43 1985.24 2088.15 2192.6 2301.11 - 2407.21 2518.52 2631.87 2745.94 2861.92 2980.24 3099.28 3225.67 / - 1 8 19 1 132.93 212.47 295.44 389.65 493.02 602.73 723.05 852.38 991.33 1143.9 1292.47 1438.23 - 1592.92 1747.31 1916.21 2083.94 2258.91 2437.78 2635.81 2824.68 3023.9 3223.55 3434.64 3651.53 3871.67 4099.48 4330.03 4568.08 - 4813.07 5056.18 5309.35 5556.87 5821.8 6088.26 6348.07 6628.81 / - 1 8 20 1 202.84 326.12 452.41 641.8 851.96 1093.08 1343.87 1594.82 1864.98 2151.54 2451.26 2770.9 - 3090.6 3449.32 3798.25 4198.39 4580.63 4981.51 5438.35 5867.66 6319.32 6775.2 7264.37 7765.84 8270.14 8803.72 9349.64 9883.2 - 10457.14 11036.83 11644.28 12256.8 12895.07 13524.49 14178.78 14874.62 / - 1 9 1 1 208.33 207.54 207.35 207.42 207.63 207.96 208.39 208.89 209.47 210.12 210.83 211.62 - 212.46 213.37 214.34 215.37 216.46 217.61 218.82 220.09 221.42 222.81 224.25 225.76 227.32 228.94 230.61 232.35 - 234.14 235.99 237.9 239.86 241.88 243.96 246.09 248.29 / - 1 9 2 1 208.21 207.41 207.21 207.27 207.49 207.81 208.24 208.74 209.32 209.97 210.68 211.46 - 212.31 213.22 214.19 215.22 216.31 217.46 218.67 219.94 221.27 222.66 224.1 225.61 227.17 228.79 230.47 232.2 - 234 235.85 237.75 239.72 241.74 243.82 245.96 248.15 / - 1 9 3 1 207.99 207.15 206.92 206.96 207.17 207.49 207.9 208.4 208.97 209.62 210.33 211.11 - 211.96 212.87 213.84 214.87 215.96 217.11 218.32 219.6 220.93 222.32 223.76 225.27 226.84 228.46 230.14 231.88 - 233.68 235.53 237.44 239.41 241.44 243.53 245.67 247.87 / - 1 9 4 1 207.14 205.94 205.63 205.61 205.77 206.07 206.46 206.95 207.52 208.17 208.89 209.67 - 210.53 211.45 212.43 213.47 214.58 215.75 216.99 218.28 219.63 221.04 222.51 224.03 225.62 227.26 228.96 230.72 - 232.54 234.42 236.35 238.34 240.39 242.5 244.67 246.89 / - 1 9 5 1 204.66 202.04 201.55 201.45 201.56 201.82 202.21 202.7 203.29 203.96 204.71 205.53 - 206.42 207.39 208.42 209.52 210.68 211.91 213.21 214.57 215.99 217.47 219.02 220.63 222.3 224.02 225.81 227.66 - 229.57 231.54 233.57 235.66 237.8 240 242.27 244.58 / - 1 9 6 1 197.31 192.81 191.86 191.61 191.67 191.94 192.37 192.92 193.6 194.37 195.25 196.21 - 197.25 198.38 199.59 200.87 202.23 203.66 205.15 206.67 208.3 210 211.76 213.58 215.46 217.41 219.42 221.48 - 223.61 225.79 228.04 230.33 232.66 235.07 237.54 240.06 / - 1 9 7 1 179.91 172.87 171.66 171.35 171.48 171.91 172.57 173.41 174.41 175.55 176.8 178.17 - 179.65 181.22 182.88 184.6 186.43 188.33 190.3 192.31 194.42 196.58 198.81 201.07 203.44 205.87 208.34 210.85 - 213.4 216.01 218.67 221.36 224.11 226.92 229.77 232.66 / - 1 9 8 1 145.47 135.47 134.42 134.68 135.59 136.89 138.45 140.28 142.27 144.39 146.65 148.98 - 151.6 154.16 156.75 159.45 162.19 165.02 168.13 171.07 174.05 177.03 180.1 183.17 186.31 189.87 193.09 196.31 - 199.6 202.89 206.24 209.62 213.02 217.12 220.59 224.1 / - 1 9 9 1 92.53 89.65 90.99 93.2 95.76 98.64 101.62 104.78 107.99 111.38 114.79 118.36 - 121.92 125.66 129.5 133.25 137.22 141.07 145.15 149.08 153.2 157.37 161.52 165.74 169.83 174.12 178.21 182.57 - 186.7 190.86 195.5 199.69 203.9 208.12 212.94 217.19 / - 1 9 10 1 57.28 60.01 63.13 66.54 70.09 73.79 77.6 81.51 85.52 89.65 93.87 98.18 - 102.59 107.08 111.65 116.3 121 125.77 130.62 135.54 140.51 145.54 150.64 155.52 160.69 165.93 170.9 176.19 - 181.53 186.57 192 197.09 202.6 207.74 213.33 218.83 / - 1 9 11 1 44.45 48.8 52.61 56.45 60.36 64.39 68.54 72.81 77.22 81.75 86.4 91.18 - 96.07 101.06 106.16 111.97 117.63 123.26 128.98 134.69 140.54 146.36 152.25 158.19 164.2 170.26 176.32 182.45 - 188.59 194.79 201.08 207.43 213.84 220.31 226.4 232.96 / - 1 9 12 1 39.07 44.61 49.27 53.74 58.29 63.08 68.08 73.29 78.67 84.22 89.91 95.75 - 101.72 107.82 113.99 120.15 126.36 132.66 139.06 145.54 152.12 158.78 165.53 172.35 180.3 188.06 195.71 203.23 - 210.95 218.57 226.38 234.05 241.79 249.6 257.48 265.44 / - 1 9 13 1 34.21 40.71 47.41 54.06 60.56 66.81 73.5 80.34 87.51 94.65 101.5 109.11 - 116.87 124.76 132.79 140.95 149.23 156.83 165.34 173.97 182.68 191.41 200.19 209.04 217.99 227.04 235.26 244.5 - 254.76 262.63 271.98 283.4 294.17 305.02 316.09 326.59 / - 1 9 14 1 29.6 40.24 50.58 60.44 69.56 78.6 88.04 96.7 106.62 116.73 125.28 135.75 - 145.96 156.68 166.92 178.03 189.31 200.07 211.73 223.57 235.61 247.54 259.21 271.62 284.33 297.13 310.04 323.03 - 336.17 349.46 362.91 376.54 390.33 404.3 418.44 432.76 / - 1 9 15 1 31.39 47.78 62.19 75.76 88.98 102.14 115.5 128.82 142.11 155.75 170.08 185.38 - 199.32 214.34 230.47 246.46 262.97 279.22 296.38 313.96 331.18 349.11 367.72 386.71 406.07 425.81 445.52 465.68 - 485.28 506.61 527.84 549.41 571.34 593.5 615.89 637.8 / - 1 9 16 1 42.44 63.69 85.24 105.06 124.49 144.39 164.29 185.18 206.26 227.63 251.27 273.25 - 297.78 323.1 347.28 372.69 399.88 427.49 455.49 484.35 513.51 544 574.48 606.33 638.79 671.16 705.12 740.03 - 775.86 811.59 848.65 886.53 925.72 966.13 1007.71 1049.51 / - 1 9 17 1 59.83 92.58 125.01 156.4 187.61 219.43 252.76 287.2 323.18 360.48 398.88 440.42 - 481.39 526 571.97 618.88 665.05 715.19 767.27 820.88 876.54 933.73 993.01 1053.43 1114.51 1177.29 1240.51 1300.07 - 1357.15 1415.69 1475.39 1536.76 1599.47 1661.87 1728.65 1792.27 / - 1 9 18 1 88.01 140.51 190.25 243.05 297.21 354 414.08 477.43 544.62 615.64 689.81 768.17 - 850.83 938.13 1029.31 1123.8 1219.95 1314.18 1403.23 1494.48 1589.36 1688.3 1787.1 1889.68 1992.83 2097.88 2204.02 2314.05 - 2424.2 2534.87 2650.04 2765.86 2883.67 3003.95 3124.98 3253.02 / - 1 9 19 1 132.71 212.28 294.62 389.59 491.84 602.66 720.81 850.74 990.2 1137.96 1290.98 1437.44 - 1592.83 1748.07 1918.88 2089.42 2262.7 2442.79 2642.1 2832.39 3033.08 3233.07 3446.43 3663.39 3889.11 4117.5 4350.48 4588.98 - 4841.81 5086.59 5348.33 5600.92 5871.2 6142.39 6407.08 6688.22 / - 1 9 20 1 202.61 326.11 452.32 636.67 847.33 1085.81 1337.65 1589.51 1860.5 2142.98 2456.51 2778.12 - 3099.94 3461.08 3812.6 4215.54 4600.68 5004.57 5418.63 5897.49 6352.52 6812.14 7300.63 7807.54 8318.72 8848.26 9398.92 9948.5 - 10522.19 11122.95 11741.52 12365.33 13004.4 13667.28 14322.86 15014.81 / - 1 10 1 1 210.4 209.51 209.27 209.3 209.5 209.82 210.23 210.73 211.3 211.94 212.65 213.43 - 214.27 215.18 216.15 217.18 218.26 219.41 220.62 221.89 223.22 224.61 226.05 227.56 229.12 230.74 232.42 234.15 - 235.95 237.8 239.71 241.67 243.7 245.78 247.92 250.12 / - 1 10 2 1 210.28 209.37 209.13 209.16 209.35 209.67 210.08 210.57 211.14 211.79 212.5 213.27 - 214.12 215.02 215.99 217.02 218.11 219.26 220.47 221.73 223.06 224.45 225.9 227.4 228.96 230.58 232.26 234 - 235.8 237.65 239.56 241.53 243.55 245.64 247.78 249.98 / - 1 10 3 1 210.02 209.05 208.77 208.78 208.96 209.26 209.67 210.16 210.72 211.36 212.07 212.85 - 213.69 214.59 215.56 216.59 217.68 218.83 220.04 221.31 222.65 224.04 225.48 226.99 228.56 230.18 231.87 233.61 - 235.41 237.27 239.18 241.16 243.19 245.28 247.42 249.63 / - 1 10 4 1 209.07 207.67 207.27 207.21 207.35 207.62 208 208.49 209.05 209.7 210.41 211.2 - 212.05 212.97 213.95 215 216.1 217.25 218.49 219.78 221.13 222.55 224.02 225.56 227.16 228.81 230.52 232.3 - 234.13 236.02 237.97 239.97 242.04 244.16 246.34 248.58 / - 1 10 5 1 206.41 203.48 202.91 202.74 202.82 203.04 203.43 203.92 204.5 205.18 205.9 206.72 - 207.62 208.59 209.62 210.73 211.9 213.14 214.45 215.81 217.25 218.74 220.3 221.92 223.61 225.35 227.15 229.02 - 230.94 232.92 234.95 237.05 239.2 241.41 243.69 246.01 / - 1 10 6 1 198.71 193.6 192.73 192.43 192.41 192.68 193.1 193.66 194.33 195.11 195.98 196.95 - 198.01 199.15 200.37 201.66 203.03 204.47 205.98 207.56 209.21 210.93 212.71 214.55 216.42 218.38 220.41 222.5 - 224.65 226.86 229.12 231.45 233.82 236.26 238.75 241.3 / - 1 10 7 1 180.8 173.09 171.81 171.47 171.58 172.01 172.57 173.42 174.42 175.56 176.81 178.19 - 179.86 181.46 183.15 184.9 186.76 188.69 190.7 192.74 194.88 197.08 199.35 201.64 204.02 206.49 208.98 211.54 - 214.17 216.81 219.51 222.24 225.04 227.88 230.77 233.7 / - 1 10 8 1 145.29 135.12 134.04 134.37 135.29 136.6 138.19 140.04 142.05 144.19 146.47 148.86 - 151.32 154.06 156.69 159.42 162.22 165.03 167.94 171.15 174.17 177.19 180.31 183.42 186.61 189.84 193.51 196.79 - 200.12 203.5 206.88 210.32 213.77 217.27 221.48 225.05 / - 1 10 9 1 92.41 89.82 91.17 93.38 95.96 98.8 101.84 104.95 108.24 111.65 115.07 118.66 - 122.24 126 129.72 133.63 137.62 141.5 145.61 149.56 153.71 157.91 161.98 166.2 170.45 174.86 179.05 183.46 - 187.67 191.87 196.58 200.83 205.11 209.4 213.71 218.6 / - 1 10 10 1 57.42 60.32 63.46 66.87 70.46 74.17 78 81.95 85.99 90.14 94.38 98.73 - 103.16 107.68 112.28 116.96 121.69 126.5 131.38 136.33 141.34 146.41 151.3 156.46 161.68 166.96 171.97 177.31 - 182.37 187.78 193.26 198.4 203.96 209.15 214.81 220.05 / - 1 10 11 1 44.55 49.04 52.89 56.76 60.7 64.76 68.94 73.24 77.68 82.24 86.93 91.74 - 96.66 101.69 106.82 112.6 118.31 124.06 129.73 135.57 141.47 147.33 153.27 159.26 165.32 171.42 177.54 183.72 - 189.91 196.17 202.52 208.93 215.4 221.51 228.08 234.71 / - 1 10 12 1 39.11 44.79 49.51 54.02 58.61 63.43 68.47 73.71 79.12 84.7 90.44 96.31 - 102.32 108.45 114.66 120.85 127.1 133.45 139.88 146.41 153.03 159.73 166.52 173.39 180.97 189.04 196.79 204.31 - 212.14 219.79 227.56 235.28 243.07 250.93 258.87 266.88 / - 1 10 13 1 34.22 40.84 47.6 54.3 60.66 67.13 73.88 80.74 87.94 95.11 102 109.65 - 117.44 125.37 133.44 141.64 149.97 157.62 166.17 174.85 183.6 192.37 201.2 210.1 219.1 228.2 236.47 245.78 - 256.09 265.56 273.43 284.55 295.04 306.02 317.04 328.25 / - 1 10 14 1 29.63 40.31 50.7 60.62 69.98 78.88 88.35 97.06 107.01 117.15 125.74 136.24 - 146.51 157.27 167.55 178.7 190.03 200.82 212.52 224.4 236.48 248.55 260.07 272.64 285.42 298.29 311.26 324.32 - 337.53 350.89 364.41 378.1 391.96 406 420.22 434.61 / - 1 10 15 1 31.38 47.8 62.31 75.88 89.15 102.35 115.74 129.1 142.42 156.13 170.49 185.82 - 201.18 214.85 231.02 247.11 263.6 280.04 297.11 314.74 332.4 349.95 368.59 387.6 406.98 426.75 446.82 466.89 - 486.45 507.88 529.19 550.83 572.82 595.04 617.5 639.8 / - 1 10 16 1 42.37 63.65 85.25 105.24 124.59 144.71 164.46 185.36 206.47 227.85 251.5 273.5 - 298.07 323.4 348.62 373.08 400.3 427.93 455.98 484.86 514.03 544.51 574.98 606.82 639.26 671.56 705.44 740.24 - 775.98 812.32 848.96 886.89 925.49 965.39 1007.13 1049.29 / - 1 10 17 1 59.72 92.49 124.94 156.41 187.67 219.52 252.83 287.29 323.25 360.5 398.87 440.36 - 481.83 525.87 571.83 618.74 664.82 714.82 766.72 820.32 875.6 932.9 991.79 1052.32 1113.51 1175.93 1239.27 1300.57 - 1359.53 1419.84 1480.76 1543.68 1607.84 1671.8 1739.96 1805.41 / - 1 10 18 1 87.83 140.34 190.08 243 297.31 354.12 414.09 477.39 544.43 615.28 689.32 767.42 - 849.76 936.71 1027.53 1121.76 1218.08 1312.85 1402.44 1494.26 1590.51 1689.3 1788.8 1891.98 1997.17 2104.36 2213.09 2325.7 - 2439.06 2551.3 2667.89 2786.82 2906.76 3028.08 3152.38 3282.22 / - 1 10 19 1 132.48 212.1 294.22 388.64 490.59 601.17 720.41 848.92 989.03 1136.4 1289.41 1436.57 - 1592.71 1748.83 1912.78 2092.09 2266.56 2447.95 2648.59 2840.43 3042.67 3244.36 3457.84 3677.34 3905.69 4136.11 4368.61 4611.86 - 4866.84 5114.73 5381 5639.11 5911.31 6192.15 6462.21 6748.85 / - 1 10 20 1 202.39 326.15 452.36 632.44 838.66 1078.58 1329.71 1582.67 1858.02 2146.48 2448.59 2770.34 - 3110 3473.54 3827.97 4203.44 4622.02 5029.19 5446.75 5929.35 6388.02 6851.64 7339.6 7847.2 8362.94 8904.48 9459.68 10010.95 - 10592.85 11200.46 11816.38 12462.18 13113.8 13785.04 14462.08 15167.82 / - 1 11 1 1 212.45 211.46 211.17 211.18 211.36 211.67 212.07 212.56 213.12 213.76 214.47 215.24 - 216.08 216.98 217.95 218.97 220.06 221.21 222.42 223.68 225.01 226.4 227.84 229.35 230.91 232.53 234.21 235.95 - 237.74 239.6 241.51 243.48 245.5 247.59 249.73 251.93 / - 1 11 2 1 212.33 211.32 211.03 211.03 211.21 211.51 211.91 212.4 212.96 213.6 214.3 215.08 - 215.92 216.82 217.78 218.81 219.89 221.04 222.25 223.52 224.85 226.23 227.68 229.18 230.75 232.37 234.05 235.79 - 237.59 239.44 241.35 243.32 245.35 247.44 249.58 251.79 / - 1 11 3 1 212.02 210.94 210.61 210.58 210.73 211.02 211.41 211.89 212.45 213.08 213.78 214.55 - 215.39 216.29 217.26 218.29 219.37 220.53 221.74 223.01 224.34 225.73 227.18 228.69 230.26 231.89 233.58 235.32 - 237.13 238.99 240.91 242.89 244.92 247.02 249.17 251.38 / - 1 11 4 1 210.93 209.37 208.84 208.76 208.89 209.16 209.54 210.01 210.57 211.21 211.92 212.7 - 213.55 214.46 215.44 216.49 217.6 218.77 220 221.3 222.66 224.07 225.55 227.09 228.69 230.35 232.06 233.84 - 235.68 237.57 239.53 241.54 243.61 245.74 247.93 250.17 / - 1 11 5 1 208.07 204.87 204.06 203.89 203.96 204.2 204.57 205.05 205.63 206.3 207.05 207.88 - 208.78 209.75 210.8 211.92 213.1 214.35 215.66 217.04 218.49 220 221.52 223.15 224.84 226.59 228.4 230.27 - 232.21 234.2 236.25 238.37 240.54 242.77 245.06 247.41 / - 1 11 6 1 200.03 194.49 193.39 193.07 193.08 193.32 193.73 194.29 194.96 195.75 196.64 197.62 - 198.68 199.83 201.07 202.38 203.76 205.23 206.71 208.32 209.98 211.72 213.52 215.38 217.31 219.31 221.36 223.47 - 225.64 227.88 230.14 232.49 234.89 237.35 239.87 242.45 / - 1 11 7 1 181.59 173.17 171.82 171.45 171.55 171.88 172.54 173.39 174.41 175.56 176.85 178.23 - 179.74 181.36 183.29 185.06 186.96 188.93 190.97 193.05 195.23 197.47 199.77 202.11 204.53 207 209.57 212.13 - 214.81 217.52 220.26 223.05 225.89 228.78 231.7 234.69 / - 1 11 8 1 145.61 134.71 133.67 134 134.88 136.23 137.92 139.8 141.83 144.01 146.29 148.71 - 151.22 153.79 156.66 159.39 162.22 165.07 168.01 170.97 174.32 177.42 180.52 183.7 186.89 190.15 193.87 197.23 - 200.59 204.02 207.46 210.95 214.46 218.03 221.62 225.94 / - 1 11 9 1 92.17 89.99 91.35 93.57 96.16 99 102.06 105.19 108.49 111.84 115.36 118.87 - 122.56 126.34 130.08 134.02 137.86 141.93 145.87 150.05 154.22 158.29 162.56 166.81 171.09 175.29 179.73 184.02 - 188.57 192.87 197.17 201.97 206.31 210.67 215.05 220.04 / - 1 11 10 1 57.63 60.63 63.78 67.23 70.84 74.56 78.42 82.39 86.45 90.63 94.9 99.27 - 103.73 108.28 112.91 117.62 122.38 127.22 132.13 137.12 142.17 147.05 152.2 157.4 162.67 167.69 173.04 178.43 - 183.53 189 194.16 199.71 205.33 210.57 216.28 221.58 / - 1 11 11 1 44.68 49.29 53.18 57.07 61.05 65.13 69.34 73.68 78.15 82.74 87.46 92.3 - 97.26 102.32 107.49 113.11 118.99 124.75 130.53 136.35 142.23 148.31 154.28 160.33 166.43 172.58 178.75 184.98 - 191.24 197.55 203.96 210.43 216.56 223.13 229.76 236 / - 1 11 12 1 39.19 44.98 49.76 54.31 58.93 63.78 68.86 74.13 79.58 85.19 90.96 96.87 - 102.91 109.08 115.33 121.56 127.85 134.23 140.71 147.27 153.93 160.68 167.51 174.42 181.85 189.8 197.7 205.61 - 213.33 221.02 228.83 236.85 244.71 252.64 260.65 268.74 / - 1 11 13 1 34.26 40.97 47.79 54.54 60.95 67.46 74.28 81.13 88.37 95.57 102.5 110.19 - 118.01 125.98 134.08 142.32 150.69 158.39 166.98 175.7 184.5 193.33 202.2 211.15 220.2 229.35 237.67 247.03 - 257.4 266.93 274.84 286.04 295.86 306.92 318.11 329.31 / - 1 11 14 1 29.66 40.39 50.83 60.8 70.05 79.53 88.67 97.41 107.4 117.57 126.19 136.73 - 147.03 157.83 168.17 179.36 190.72 201.56 213.29 225.21 237.32 249.43 260.98 273.59 286.46 299.4 312.43 325.56 - 338.84 352.26 365.85 379.61 393.54 407.66 421.94 436.41 / - 1 11 15 1 31.37 47.82 62.5 76 89.31 102.56 115.99 129.37 142.72 156.46 170.87 186.24 - 201.27 215.34 231.53 247.66 264.18 280.54 297.79 315.45 333.25 350.74 369.39 388.42 407.82 427.59 447.42 467.84 - 487.48 509.01 530.4 552.12 574.18 596.24 618.98 641.32 / - 1 11 16 1 42.31 63.59 85.45 105.52 124.76 144.83 164.61 185.53 206.65 228.05 251.69 273.71 - 298.3 323.65 349.33 373.4 400.63 428.28 456.37 485.28 514.46 544.93 575.39 607.21 639.61 671.85 705.63 740.31 - 775.92 811.85 848.92 886.95 925.59 964.86 1005.44 1047.84 / - 1 11 17 1 59.6 92.42 124.87 156.39 187.7 219.94 252.87 287.32 323.27 360.48 398.8 440.23 - 481.74 525.63 571.59 618.49 664.51 714.34 766.06 819.46 874.52 931.72 990.23 1050.81 1112.15 1174.09 1237.45 1299.94 - 1353.39 1410.72 1468.13 1527.22 1588.03 1650.47 1713.17 1773.66 / - 1 11 18 1 87.65 140.18 189.97 242.94 297.33 354.14 414.07 477.32 544.21 614.87 688.77 766.61 - 848.61 935.19 1025.63 1119.54 1215.77 1311.27 1401.48 1493.9 1590.61 1690.13 1790.09 1894.42 2000.41 2108.47 2217.5 2332.19 - 2448.11 2562.26 2681.8 2803.98 2927.09 3051.47 3180.09 3311.63 / - 1 11 19 1 132.25 211.94 293.56 387.68 490.59 601.1 718.09 848.15 985.54 1134.74 1287.85 1435.73 - 1586.31 1749.65 1914.61 2094.99 2270.67 2453.43 2640.57 2848.97 3052.76 3256.36 3470.13 3692.29 3920.7 4153.15 4390.79 4636.13 - 4889.8 5143.69 5408.44 5673.22 5948.96 6230.01 6510.14 6803.25 / - 1 11 20 1 202.19 326.26 452.65 626.61 833.37 1071.41 1321.93 1583.31 1855.76 2142.09 2454.45 2778.45 - 3120.91 3461.42 3844.51 4222.96 4645.13 5055.62 5476.95 5920.75 6426.32 6894.1 7386.17 7893.15 8413.58 8956.77 9516.81 10081.63 - 10658.28 11270.23 11902.42 12542.19 13211.51 13889.23 14559.24 15290.01 / - 1 12 1 1 214.44 213.38 213.06 213.05 213.21 213.51 213.9 214.38 214.94 215.57 216.27 217.04 - 217.88 218.77 219.74 220.76 221.84 222.99 224.2 225.46 226.79 228.17 229.62 231.12 232.69 234.31 235.99 237.73 - 239.52 241.38 243.29 245.27 247.3 249.38 251.53 253.73 / - 1 12 2 1 214.32 213.24 212.91 212.89 213.05 213.34 213.73 214.21 214.77 215.4 216.1 216.87 - 217.71 218.6 219.57 220.59 221.67 222.82 224.03 225.29 226.62 228.01 229.45 230.96 232.52 234.14 235.82 237.56 - 239.36 241.22 243.13 245.11 247.14 249.23 251.37 253.58 / - 1 12 3 1 213.95 212.76 212.37 212.31 212.44 212.71 213.09 213.56 214.11 214.73 215.43 216.2 - 217.03 217.93 218.89 219.92 221.01 222.16 223.37 224.64 225.97 227.36 228.81 230.33 231.9 233.53 235.22 236.97 - 238.77 240.64 242.56 244.55 246.59 248.69 250.85 253.06 / - 1 12 4 1 212.74 211 210.37 210.25 210.35 210.59 210.96 211.42 211.97 212.6 213.31 214.09 - 214.94 215.86 216.84 217.89 219 220.18 221.41 222.71 224.08 225.5 226.99 228.54 230.14 231.81 233.54 235.33 - 237.18 239.08 241.05 243.07 245.15 247.29 249.49 251.74 / - 1 12 5 1 209.64 206.17 205.24 205.01 205.05 205.27 205.63 206.1 206.67 207.33 208.08 208.91 - 209.81 210.79 211.84 212.96 214.15 215.4 216.73 218.12 219.57 221.09 222.66 224.31 226.01 227.78 229.61 231.5 - 233.45 235.46 237.53 239.62 241.82 244.07 246.38 248.75 / - 1 12 6 1 201.23 195.05 193.97 193.61 193.6 193.82 194.23 194.78 195.46 196.25 197.14 198.13 - 199.21 200.38 201.6 202.93 204.33 205.81 207.36 208.99 210.68 212.44 214.26 216.15 218.07 220.09 222.16 224.3 - 226.5 228.77 231.09 233.47 235.9 238.4 240.95 243.53 / - 1 12 7 1 182.28 173.11 171.69 171.28 171.27 171.68 172.34 173.2 174.23 175.41 176.72 178.15 - 179.66 181.3 183.04 184.86 187.01 189.02 191.1 193.25 195.43 197.72 200.07 202.45 204.91 207.43 210.01 212.62 - 215.34 218.12 220.93 223.77 226.65 229.59 232.56 235.59 / - 1 12 8 1 145.9 134.24 133.21 133.62 134.54 135.92 137.56 139.46 141.61 143.81 146.15 148.57 - 151.1 153.73 156.6 159.39 162.22 165.15 168.09 171.13 174.48 177.63 180.78 184.01 187.28 190.55 193.9 197.71 - 201.13 204.55 208.05 211.56 215.15 218.75 222.4 226.09 / - 1 12 9 1 92.14 90.08 91.53 93.77 96.36 99.21 102.28 105.43 108.75 112.11 115.64 119.17 - 122.88 126.56 130.44 134.4 138.27 142.36 146.33 150.54 154.59 158.84 163.14 167.42 171.62 175.98 180.46 184.75 - 189.32 193.68 198.13 203.06 207.48 211.92 216.37 220.84 / - 1 12 10 1 57.88 60.95 64.13 67.58 71.2 74.96 78.82 82.81 86.92 91.12 95.42 99.81 - 104.3 108.87 113.53 118.27 123.07 127.93 132.89 137.91 142.78 147.91 153.1 158.35 163.37 168.71 174.12 179.24 - 184.7 190.22 195.42 201.03 206.3 212 217.32 223.12 / - 1 12 11 1 44.86 49.55 53.47 57.4 61.41 65.52 69.76 74.12 78.62 83.25 88 92.87 - 97.86 102.95 108.15 113.63 119.67 125.44 131.32 137.22 143.15 149.09 155.1 161.39 167.54 173.74 179.96 186.25 - 192.56 198.93 205.04 211.55 218.12 224.75 231.45 237.75 / - 1 12 12 1 39.31 45.18 50.01 54.61 59.27 64.15 69.25 74.55 80.04 85.69 91.49 97.43 - 103.51 109.71 116 122.26 128.59 135.01 141.53 148.13 154.83 161.62 168.49 175.45 182.48 190.72 198.76 206.67 - 214.44 222.25 230.32 238.06 245.97 253.96 262.43 270.6 / - 1 12 13 1 34.34 41.12 47.98 54.78 61.5 67.79 74.66 81.53 88.8 96.04 103.01 110.72 - 118.58 126.58 134.72 142.99 151.39 159.13 167.77 176.54 185.39 194.26 203.18 212.19 221.28 230.48 238.84 248.26 - 258.69 268.27 276.23 287.49 297.38 307.36 319.03 330.4 / - 1 12 14 1 29.69 40.47 50.96 60.98 70.33 79.71 88.98 97.76 107.78 117.98 126.64 137.21 - 147.54 158.37 168.75 179.99 191.39 202.27 214.03 225.98 238.12 250.27 262.54 274.49 287.42 300.44 313.54 326.74 - 340.08 353.58 367.24 381.06 395.06 409.24 423.59 438.13 / - 1 12 15 1 31.35 47.84 62.57 76.12 89.48 102.76 116.22 129.63 143.01 157.43 171.22 186.63 - 201.7 215.79 232.01 248.16 264.71 281.55 298.39 316.09 333.99 351.44 370.11 389.15 408.55 428.33 448.49 468.61 - 488.32 509.95 531.44 553.23 575.36 597.48 620.27 642.66 / - 1 12 16 1 42.24 63.54 85.46 105.57 125.24 144.93 164.73 185.68 206.84 228.21 251.85 273.86 - 298.63 323.83 349.81 373.63 400.86 428.51 456.73 485.56 514.76 545.22 575.65 607.45 639.82 672.02 705.71 740.28 - 775.75 811.61 848.48 886.58 925.33 964.67 1004.6 1045.8 / - 1 12 17 1 59.48 92.37 124.79 156.35 187.71 219.96 252.88 287.29 323.23 360.4 399.64 440 - 482.5 525.28 571.21 618.11 664.13 713.79 765.34 818.52 873.42 930.28 988.51 1048.84 1110.34 1172.54 1235.17 1298.68 - 1353.18 1411.8 1469.75 1530.13 1591.35 1655.65 1719.35 1780.89 / - 1 12 18 1 87.48 140.01 189.85 242.86 297.3 354.13 414 477.18 543.92 614.39 688.17 765.78 - 847.46 933.13 1023.63 1117.17 1213.33 1309.11 1399.91 1492.92 1590.23 1690.46 1791.21 1896.35 2003.22 2112.24 2222.21 2338.11 - 2455.25 2570.32 2691.04 2814.55 2939.75 3066.75 3199.16 3333.38 / - 1 12 19 1 132.03 211.81 293.13 386.76 489.33 599.46 717.76 845.81 984.32 1133.02 1286.25 1434.87 - 1586.28 1750.58 1916.57 2098.04 2275.16 2459.33 2648.05 2858.04 3063.63 3269.25 3484.83 3707.48 3938.66 4174.31 4414.41 4659.24 - 4918.14 5170.98 5442 5705.54 5988.48 6272.38 6555.47 6851.71 / - 1 12 20 1 202 326.45 453.28 620.43 828.94 1064.42 1315.05 1575.3 1851.3 2146.39 2443.88 2787.49 - 3114.11 3476.3 3862.44 4244.21 4635.27 5084.39 5509.63 5957.46 6412.01 6940.08 7436.59 7948.36 8468.65 9016.64 9579.26 10160.51 - 10739.7 11357.14 11983.62 12640.94 13304.9 14001.55 14678.87 15400.65 / - 1 13 1 1 216.38 215.27 214.92 214.89 215.05 215.33 215.71 216.19 216.74 217.37 218.06 218.83 - 219.66 220.56 221.51 222.53 223.62 224.76 225.97 227.23 228.56 229.94 231.39 232.89 234.45 236.07 237.75 239.49 - 241.29 243.15 245.07 247.04 249.07 251.16 253.31 255.52 / - 1 13 2 1 216.25 215.13 214.77 214.73 214.88 215.16 215.54 216.01 216.56 217.19 217.88 218.65 - 219.48 220.37 221.33 222.35 223.43 224.58 225.78 227.05 228.37 229.76 231.2 232.71 234.27 235.9 237.58 239.32 - 241.12 242.98 244.89 246.87 248.9 251 253.15 255.36 / - 1 13 3 1 215.79 214.52 214.09 214 214.11 214.37 214.73 215.19 215.74 216.36 217.05 217.81 - 218.64 219.54 220.5 221.52 222.61 223.76 224.97 226.24 227.57 228.97 230.42 231.94 233.51 235.14 236.84 238.59 - 240.4 242.27 244.2 246.19 248.24 250.34 252.51 254.73 / - 1 13 4 1 214.42 212.4 211.82 211.67 211.74 211.97 212.32 212.78 213.32 213.95 214.65 215.43 - 216.28 217.19 218.18 219.23 220.35 221.53 222.77 224.08 225.44 226.87 228.36 229.91 231.52 233.19 234.93 236.72 - 238.57 240.48 242.46 244.49 246.58 248.73 250.94 253.21 / - 1 13 5 1 211.09 207.07 206.3 205.95 205.98 206.19 206.55 207.02 207.59 208.26 209.01 209.81 - 210.72 211.7 212.75 213.88 215.07 216.34 217.67 219.07 220.53 222.06 223.65 225.31 227.03 228.82 230.66 232.57 - 234.54 236.57 238.66 240.81 243.02 245.29 247.62 250.01 / - 1 13 6 1 202.29 195.67 194.4 193.99 193.94 194.15 194.56 195.11 195.79 196.58 197.48 198.48 - 199.58 200.76 202.03 203.35 204.78 206.28 207.85 209.5 211.21 213 214.83 216.75 218.73 220.78 222.89 225.07 - 227.3 229.59 231.91 234.32 236.79 239.32 241.9 244.54 / - 1 13 7 1 182.83 172.9 171.3 170.88 170.87 171.29 171.96 172.84 173.88 175.07 176.4 177.86 - 179.43 181.07 182.84 184.7 186.65 188.65 191.07 193.26 195.53 197.82 200.22 202.67 205.15 207.73 210.35 213.04 - 215.75 218.58 221.41 224.33 227.29 230.3 233.34 236.42 / - 1 13 8 1 145.51 133.51 132.74 133.11 134.18 135.59 137.28 139.21 141.3 143.62 145.97 148.43 - 150.99 153.64 156.37 159.39 162.26 165.19 168.21 171.25 174.38 177.84 181.08 184.36 187.64 191 194.36 198.28 - 201.72 205.24 208.76 212.35 215.95 219.61 223.3 227 / - 1 13 9 1 92.04 90.26 91.67 93.92 96.57 99.43 102.46 105.67 108.94 112.38 115.93 119.48 - 123.21 126.9 130.8 134.64 138.68 142.8 146.79 151.03 155.11 159.39 163.56 167.93 172.28 176.67 181.19 185.53 - 190.14 194.54 198.97 203.93 208.46 213.06 217.63 222.2 / - 1 13 10 1 58.15 61.27 64.48 67.95 71.59 75.37 79.26 83.26 87.35 91.57 95.94 100.36 - 104.87 109.47 114.16 118.8 123.63 128.52 133.46 138.5 143.6 148.77 154 159.29 164.35 169.74 175.19 180.35 - 185.86 191.43 196.69 202.35 207.67 213.43 218.81 224.67 / - 1 13 11 1 45.06 49.82 53.78 57.74 61.78 65.92 70.19 74.58 79.1 83.76 88.54 93.44 - 98.46 103.59 108.81 114.14 120.33 126.23 132.04 138 143.95 150.05 156.1 162.22 168.41 174.63 180.89 187.21 - 193.59 200 206.46 213.04 219.67 226.37 232.69 239.5 / - 1 13 12 1 39.44 45.39 50.28 54.92 59.61 64.52 69.65 74.99 80.51 86.19 92.02 97.99 - 104.1 110.34 116.68 122.97 129.34 135.79 142.35 148.99 155.73 162.55 169.47 176.47 183.54 191.38 199.53 207.6 - 215.55 223.46 231.56 239.6 247.58 255.64 263.79 272.02 / - 1 13 13 1 34.44 41.28 48.19 55.04 61.73 68.13 75.03 81.93 89.23 96.67 103.51 111.26 - 119.15 127.18 135.35 143.65 152.09 159.86 168.53 177.33 186.24 195.17 204.15 213.2 222.34 231.59 239.99 250.39 - 259.95 269.58 277.59 288.9 298.85 308.89 319.45 330.95 / - 1 13 14 1 29.73 40.56 51.1 61.17 70.71 80.09 89.29 98.11 108.16 118.38 127.08 137.67 - 148.04 158.9 169.3 180.57 192.01 202.94 214.73 226.71 238.88 251.05 262.97 275.32 288.28 301.39 314.55 327.83 - 341.24 354.81 368.53 382.42 396.48 410.73 425.15 439.75 / - 1 13 15 1 31.33 47.87 62.64 76.24 89.64 102.97 116.45 129.89 143.29 158.04 171.53 186.97 - 201.33 216.21 232.45 248.61 265.17 282.02 298.87 316.61 334.55 352.02 370.71 389.76 409.15 428.92 449.06 469.17 - 488.89 510.61 532.2 554.08 576.29 598.78 621.32 643.74 / - 1 13 16 1 42.17 63.49 85.46 105.61 125.38 145.02 164.84 185.79 207.03 228.56 251.97 275.17 - 298.62 323.92 349.9 373.75 400.98 428.61 456.8 485.66 514.86 545.32 575.73 607.5 639.83 671.99 705.6 740.08 - 775.44 811.2 847.89 885.85 924.67 964.21 1004.28 1044.88 / - 1 13 17 1 59.36 92.24 124.71 156.3 187.78 219.94 252.86 287.18 323.1 360.23 399.78 439.66 - 482.28 524.77 570.62 617.55 664.85 713.11 764.53 817.53 872.23 928.84 986.81 1046.88 1108.21 1170.91 1234.21 1295.74 - 1352.31 1411.55 1472.63 1532.59 1596.49 1659.69 1724.05 1788.12 / - 1 13 18 1 87.3 139.85 189.62 242.75 297.18 354.05 413.85 476.91 543.51 613.79 687.42 764.7 - 846.36 931.69 1021.76 1114.95 1211.12 1305.45 1398.31 1491.97 1589.86 1690.5 1792.3 1898.22 2005.97 2115.38 2226.97 2343.75 - 2461.99 2578.52 2700.47 2824.21 2951.72 3080.12 3215.56 3349.54 / - 1 13 19 1 131.82 211.71 292.37 386.78 489.26 599.44 715.56 843.51 981.34 1127.49 1280.95 1429.55 - 1586.44 1753.19 1918.8 2090.53 2280.07 2465.76 2656.25 2868.05 3075.28 3283.2 3500.88 3724 3958.2 4194.42 4441.1 4690.84 - 4945.18 5205.02 5478.12 5745.18 6031.12 6317.88 6599.6 6904.42 / - 1 13 20 1 201.85 326.78 454.3 613.16 821 1051.72 1307.07 1569.13 1849.42 2140.36 2451.28 2777.69 - 3126.93 3492.56 3857.81 4267.32 4662.52 5116.02 5545.54 5997.37 6457.07 6990.41 7492.28 8008.36 8529.18 9082.38 9651.38 10232.62 - 10818.11 11440.81 12072.77 12736.14 13420.15 14108.11 14803.86 15537.95 / - 1 14 1 1 218.23 217.12 216.75 216.71 216.86 217.13 217.51 217.98 218.53 219.15 219.84 220.6 - 221.43 222.32 223.28 224.3 225.38 226.52 227.72 228.98 230.31 231.69 233.14 234.64 236.2 237.82 239.51 241.25 - 243.04 244.9 246.82 248.8 250.83 252.92 255.08 257.29 / - 1 14 2 1 218.08 216.92 216.54 216.48 216.62 216.89 217.26 217.72 218.27 218.89 219.58 220.34 - 221.17 222.06 223.01 224.03 225.11 226.25 227.46 228.72 230.05 231.43 232.88 234.38 235.95 237.57 239.25 241 - 242.8 244.66 246.58 248.56 250.6 252.69 254.85 257.06 / - 1 14 3 1 217.54 216.21 215.72 215.61 215.7 215.94 216.29 216.74 217.27 217.89 218.57 219.33 - 220.17 221.07 222.03 223.04 224.13 225.28 226.49 227.77 229.1 230.5 231.96 233.48 235.06 236.7 238.4 240.16 - 241.98 243.86 245.8 247.79 249.85 251.97 254.14 256.37 / - 1 14 4 1 215.99 213.81 213.17 212.98 213.02 213.23 213.57 214.01 214.55 215.17 215.87 216.64 - 217.49 218.41 219.39 220.45 221.57 222.75 223.99 225.3 226.67 228.11 229.61 231.17 232.79 234.47 236.22 238.02 - 239.89 241.81 243.8 245.85 247.95 250.12 252.34 254.63 / - 1 14 5 1 212.38 208.08 207.09 206.8 206.79 206.98 207.32 207.78 208.34 209 209.75 210.59 - 211.5 212.49 213.55 214.69 215.89 217.17 218.51 219.93 221.41 222.95 224.56 226.24 227.96 229.73 231.59 233.52 - 235.51 237.56 239.67 241.85 244.08 246.37 248.73 251.14 / - 1 14 6 1 202.15 195.99 194.62 194.17 194.08 194.29 194.69 195.24 195.92 196.73 197.64 198.65 - 199.76 200.96 202.25 203.6 205.05 206.58 208.18 209.84 211.59 213.4 215.29 217.21 219.23 221.31 223.46 225.67 - 227.93 230.24 232.63 235.08 237.59 240.16 242.78 245.47 / - 1 14 7 1 182.31 172.5 170.81 170.24 170.3 170.71 171.39 172.27 173.33 174.55 175.91 177.37 - 178.97 180.68 182.48 184.35 186.34 188.41 190.56 193.09 195.41 197.79 200.2 202.7 205.27 207.87 210.55 213.29 - 216.08 218.9 221.79 224.78 227.81 230.88 234 237.15 / - 1 14 8 1 145.67 132.99 132.37 132.76 133.85 135.28 137.01 138.97 141.08 143.43 145.81 148.3 - 150.89 153.57 156.33 159.38 162.3 165.28 168.32 171.44 174.59 178.1 181.38 184.67 188.04 191.42 194.88 198.33 - 202.36 205.91 209.53 213.15 216.84 220.57 224.31 228.1 / - 1 14 9 1 91.93 90.45 91.88 94.13 96.74 99.67 102.7 105.93 109.21 112.66 116.14 119.79 - 123.43 127.25 131.16 135.02 139.09 143.06 147.25 151.31 155.63 159.95 164.14 168.55 172.94 177.37 181.71 186.31 - 190.72 195.41 199.89 204.39 209.44 214.01 218.62 223.26 / - 1 14 10 1 58.43 61.61 64.84 68.33 71.98 75.77 79.68 83.73 87.84 92.07 96.4 100.84 - 105.36 109.98 114.67 119.46 124.31 129.23 134.21 139.29 144.42 149.63 154.89 159.96 165.33 170.76 175.94 181.47 - 187.03 192.3 197.96 203.29 209.04 214.86 220.29 226.22 / - 1 14 11 1 45.28 50.11 54.12 58.11 62.17 66.34 70.64 75.06 79.61 84.29 89.1 94.03 - 99.07 104.23 109.49 114.84 120.98 126.94 132.87 138.78 144.86 151.01 157.1 163.27 169.51 175.78 182.08 188.46 - 194.9 201.36 207.89 214.52 221.22 227.56 234.37 241.25 / - 1 14 12 1 39.61 45.64 50.57 55.25 59.97 64.91 70.08 75.44 80.99 86.7 92.56 98.57 - 104.71 110.98 117.35 123.68 130.08 136.58 143.16 149.84 156.62 163.48 170.43 177.47 184.59 192.02 200.24 208.5 - 216.63 224.6 232.6 240.88 248.81 256.93 265.13 273.41 / - 1 14 13 1 34.56 41.47 48.42 55.31 62.04 68.48 75.41 82.32 89.67 97.09 104.01 111.79 - 119.71 127.77 135.97 144.3 152.76 160.57 169.26 178.09 187.05 196.05 205.08 214.18 223.37 232.66 241.1 251.56 - 261.16 270.84 278.9 290.27 300.27 310.37 320.58 331.32 / - 1 14 14 1 29.78 40.67 51.25 61.38 71.02 80.44 89.61 98.46 108.54 118.78 127.52 138.13 - 148.54 159.4 169.83 181.11 192.58 203.53 215.36 227.38 239.57 251.66 263.65 276.05 289.03 302.2 315.44 328.79 - 342.28 355.91 369.7 383.66 397.78 412.09 426.57 441.24 / - 1 14 15 1 31.32 47.9 62.72 76.37 89.81 103.17 116.68 130.13 143.55 158.06 171.82 187.27 - 202.75 216.55 232.81 248.99 265.55 282.09 299.23 316.96 334.92 352.42 371.13 390.18 409.57 429.32 449.43 469.51 - 489.18 510.87 532.51 554.49 576.79 599.28 621.95 644.41 / - 1 14 16 1 42.1 63.44 85.46 105.65 125.45 145.1 164.92 185.87 207.1 228.65 252.03 274.63 - 298.62 323.88 349.86 373.7 400.94 428.7 456.68 485.48 514.64 545.09 575.48 607.22 639.53 671.65 705.19 739.57 - 774.81 810.9 846.94 884.72 923.34 962.79 1003.05 1043.91 / - 1 14 17 1 59.24 92.13 124.62 156.52 187.99 219.86 253.06 286.99 322.83 359.93 399.64 439.18 - 481.67 524.01 569.77 616.7 663.33 712.19 763.48 816.36 870.78 927.14 984.83 1044.62 1105.87 1168.47 1231.92 1293.88 - 1353.03 1411.1 1472.95 1535.81 1599.03 1663.57 1729.41 1795.28 / - 1 14 18 1 87.13 139.72 189.46 242.62 297.01 353.82 413.55 476.45 542.87 612.95 686.36 763.59 - 845.03 930.07 1019.69 1112.74 1208.69 1303.07 1396.42 1492.06 1589.34 1690.65 1793.19 1900.02 2008.24 2119.14 2235.19 2349.65 - 2468.91 2588.35 2710.21 2835.42 2964.35 3094.77 3230.76 3366.36 / - 1 14 19 1 131.62 211.67 292.07 385.94 487.95 597.76 715.31 842.74 980.08 1126.17 1279.29 1428.72 - 1586.58 1746.92 1921.23 2094.4 2285.38 2472.76 2665.13 2866.61 3087.98 3298.29 3518.28 3743.83 3978.61 4218.42 4468.66 4719.3 - 4978.84 5241.59 5514.05 5788.48 6072.89 6367.36 6653.84 6956.21 / - 1 14 20 1 201.75 327.26 455.64 607.29 813.48 1041.49 1300.74 1561.27 1841.5 2132.72 2452.84 2789.12 - 3141.4 3488.79 3879.48 4293.27 4692.58 5112.15 5585.47 6041.77 6506.93 6994.22 7553.07 8074.63 8602.08 9155.94 9729.53 10315.83 - 10905.25 11533.61 12183.42 12842.37 13532.53 14228.48 14953.4 15672.58 / - 1 15 1 1 220 218.9 218.54 218.5 218.64 218.91 219.28 219.75 220.29 220.91 221.6 222.36 - 223.18 224.07 225.03 226.04 227.12 228.26 229.46 230.72 232.04 233.43 234.87 236.37 237.93 239.56 241.24 242.98 - 244.78 246.64 248.56 250.53 252.57 254.67 256.82 259.03 / - 1 15 2 1 219.8 218.64 218.24 218.18 218.3 218.56 218.93 219.38 219.92 220.54 221.23 221.98 - 222.81 223.69 224.65 225.66 226.74 227.88 229.09 230.35 231.67 233.06 234.51 236.01 237.58 239.2 240.89 242.63 - 244.44 246.3 248.23 250.21 252.25 254.35 256.51 258.73 / - 1 15 3 1 219.12 217.76 217.17 217.06 217.15 217.39 217.74 218.19 218.73 219.34 220.03 220.79 - 221.62 222.51 223.47 224.5 225.59 226.74 227.95 229.23 230.57 231.97 233.43 234.95 236.53 238.17 239.88 241.64 - 243.46 245.35 247.29 249.29 251.36 253.48 255.66 257.9 / - 1 15 4 1 217.39 215.03 214.22 214.04 214.09 214.3 214.64 215.09 215.63 216.25 216.96 217.73 - 218.59 219.51 220.5 221.56 222.68 223.87 225.13 226.45 227.83 229.28 230.79 232.31 233.94 235.64 237.39 239.21 - 241.09 243.03 245.03 247.09 249.21 251.39 253.63 255.93 / - 1 15 5 1 213.49 208.92 207.8 207.46 207.36 207.55 207.88 208.34 208.91 209.58 210.31 211.14 - 212.06 213.05 214.13 215.27 216.49 217.78 219.14 220.56 222.06 223.62 225.25 226.94 228.7 230.53 232.41 234.36 - 236.37 238.45 240.59 242.78 245.04 247.36 249.71 252.15 / - 1 15 6 1 202.81 196.02 194.57 194.09 194.01 194.19 194.58 195.13 195.82 196.63 197.56 198.59 - 199.71 200.94 202.23 203.62 205.1 206.65 208.29 209.97 211.75 213.61 215.53 217.5 219.56 221.68 223.85 226.1 - 228.41 230.78 233.2 235.69 238.24 240.85 243.52 246.24 / - 1 15 7 1 182.35 171.8 170.11 169.53 169.6 170.02 170.7 171.59 172.67 173.9 175.28 176.78 - 178.41 180.15 181.96 183.89 185.92 188 190.19 192.45 194.79 197.55 200.05 202.61 205.2 207.88 210.62 213.39 - 216.24 219.14 222.08 225.09 228.19 231.31 234.5 237.73 / - 1 15 8 1 145.14 132.64 132.03 132.44 133.54 134.99 136.73 138.71 140.84 143.12 145.64 148.17 - 150.81 153.51 156.31 159.18 162.35 165.37 168.46 171.59 174.78 178.03 181.67 185.05 188.45 191.88 195.39 198.91 - 202.51 206.61 210.3 213.98 217.75 221.52 225.35 229.23 / - 1 15 9 1 91.83 90.65 92.1 94.36 96.99 99.92 102.96 106.14 109.49 112.95 116.44 120.12 - 123.77 127.61 131.41 135.42 139.51 143.5 147.72 151.81 156.16 160.35 164.74 169.18 173.49 177.95 182.46 187.1 - 191.55 196.29 200.81 205.36 210.47 215.09 219.75 224.44 / - 1 15 10 1 58.75 61.98 65.23 68.74 72.42 76.23 80.16 84.19 88.35 92.6 96.95 101.4 - 105.95 110.59 115.31 120.12 125.01 129.95 134.96 140.07 145.24 150.48 155.55 160.9 166.31 171.79 177 182.58 - 187.87 193.51 199.22 204.61 210.42 215.87 221.78 227.3 / - 1 15 11 1 45.55 50.45 54.49 58.52 62.61 66.81 71.13 75.57 80.15 84.85 89.69 94.64 - 99.71 104.89 110.17 115.55 121.54 127.66 133.59 139.6 145.66 151.78 157.9 164.32 170.6 176.91 183.27 189.7 - 196.19 202.71 208.99 215.61 222.35 229.16 236.04 242.52 / - 1 15 12 1 39.84 45.92 50.9 55.62 60.37 65.34 70.53 75.93 81.5 87.24 93.13 99.16 - 105.33 111.63 118.04 124.41 130.84 137.37 143.98 150.7 157.5 164.4 171.39 178.46 185.62 192.85 200.89 209.26 - 217.55 225.7 233.82 241.91 250.11 258.56 266.83 275.2 / - 1 15 13 1 34.73 41.7 48.69 55.62 62.38 68.85 75.81 82.75 90.12 97.57 104.52 112.33 - 120.27 128.36 136.58 144.93 153.42 161.91 169.97 178.82 187.8 196.87 205.96 215.12 224.35 233.69 242.17 252.68 - 262.32 272.05 280.14 290.04 301.62 311.77 322.04 332.41 / - 1 15 14 1 29.9 40.79 51.43 61.6 71.11 80.76 89.94 98.82 108.91 119.18 127.94 138.57 - 149 159.87 170.31 181.61 193.08 204.05 215.89 227.92 240.13 252.26 264.25 276.66 289.64 302.82 316.13 329.57 - 343.13 356.83 370.69 384.71 398.89 413.26 427.8 442.52 / - 1 15 15 1 31.32 47.94 62.82 76.52 89.99 103.38 116.91 130.37 143.8 158.69 172.07 187.51 - 201.91 216.78 233.05 249.24 265.8 282.32 299.44 317.14 335.06 352.54 371.25 390.31 409.69 429.42 449.5 469.53 - 489.18 510.76 532.32 554.25 576.55 598.21 621.03 644.35 / - 1 15 16 1 42.04 63.4 85.47 105.7 125.51 145.17 165.1 185.9 207.03 229.53 252.01 274.23 - 298.57 323.7 349.61 373.41 400.67 428.44 456.3 484.99 514.06 544.38 574.67 606.33 638.65 670.77 704.26 738.54 - 773.65 809.59 845.44 883.05 921.54 960.9 1001.04 1041.97 / - 1 15 17 1 59.13 92.09 124.54 156.43 187.87 219.67 252.95 286.69 322.43 359.41 399 438.49 - 480.83 522.96 568.52 615.32 662.99 710.87 762.05 814.87 869.04 925.16 982.75 1042.37 1103.2 1165.56 1228.56 1290.74 - 1350.41 1410.33 1471.51 1534.94 1598.74 1663.89 1730.47 1796.99 / - 1 15 18 1 86.99 139.63 189.31 242.41 296.74 353.41 413.04 475.75 541.87 611.66 684.9 761.89 - 843.18 928.16 1017.67 1110.29 1205.72 1301.53 1394.07 1490.32 1589 1690.46 1796.02 1901.23 2010.82 2122.78 2239.75 2354.9 - 2476.05 2598.56 2720.41 2846.9 2977.47 3113.16 3246.72 3384.12 / - 1 15 19 1 131.47 211.73 291.95 385.14 486.82 597.45 713.18 839.56 977.55 1124.39 1277.01 1427.41 - 1586.83 1747.94 1923.53 2098.37 2290.78 2480.15 2674.61 2878.09 3101.51 3314.5 3537.1 3765.32 4001 4244.58 4495.78 4752.54 - 5015.04 5278.13 5557.49 5834.15 6123.76 6417.11 6712.57 7019.1 / - 1 15 20 1 201.74 327.99 457.48 599.64 806.8 1032.53 1286.42 1546.06 1833.81 2129.01 2444.7 2784.53 - 3134.86 3508.94 3903.95 4289.84 4726.46 5150.76 5589.9 6091.42 6562.62 7055.67 7555.67 8148.86 8683.67 9243.18 9816.48 10402.43 - 11006.42 11638.89 12295.1 12960.42 13657.98 14375.41 15100.35 15839.87 / - 1 16 1 1 221.66 220.62 220.27 220.23 220.37 220.64 221.01 221.48 222.02 222.63 223.32 224.08 - 224.9 225.78 226.73 227.75 228.82 229.96 231.16 232.42 233.74 235.12 236.56 238.07 239.63 241.25 242.93 244.68 - 246.48 248.34 250.26 252.24 254.28 256.37 258.53 260.75 / - 1 16 2 1 221.37 220.24 219.84 219.77 219.89 220.15 220.51 220.96 221.5 222.11 222.79 223.55 - 224.37 225.25 226.2 227.22 228.3 229.44 230.64 231.9 233.23 234.61 236.06 237.57 239.14 240.76 242.45 244.2 - 246.01 247.88 249.8 251.79 253.84 255.94 258.11 260.33 / - 1 16 3 1 220.55 219.17 218.54 218.4 218.48 218.7 219.04 219.49 220.01 220.62 221.31 222.06 - 222.89 223.78 224.74 225.77 226.86 228.02 229.24 230.52 231.86 233.27 234.73 236.26 237.85 239.5 241.21 242.98 - 244.82 246.71 248.66 250.68 252.75 254.88 257.08 259.33 / - 1 16 4 1 218.59 216.1 215.21 214.99 215.02 215.22 215.54 215.98 216.51 217.13 217.83 218.6 - 219.46 220.38 221.37 222.43 223.56 224.76 226.02 227.35 228.74 230.2 231.72 233.31 234.95 236.66 238.44 240.27 - 242.16 244.12 246.14 248.22 250.36 252.56 254.82 257.15 / - 1 16 5 1 214.36 209.25 208.14 207.78 207.72 207.88 208.2 208.64 209.2 209.87 210.62 211.46 - 212.39 213.4 214.48 215.65 216.88 218.19 219.57 221.01 222.53 224.12 225.77 227.49 229.27 231.07 232.99 234.97 - 237.01 239.11 241.28 243.51 245.8 248.15 250.56 253.04 / - 1 16 6 1 203.22 195.8 194.28 193.69 193.59 193.77 194.15 194.71 195.41 196.23 197.17 198.21 - 199.36 200.61 201.94 203.37 204.88 206.47 208.11 209.85 211.67 213.57 215.53 217.54 219.64 221.81 224.04 226.32 - 228.68 231.11 233.59 236.13 238.73 241.39 244.11 246.89 / - 1 16 7 1 182.42 171.19 169.35 168.78 168.86 169.29 169.99 170.91 172.01 173.26 174.66 176.2 - 177.85 179.6 181.47 183.44 185.51 187.62 189.86 192.17 194.52 196.98 199.93 202.5 205.18 207.92 210.68 213.53 - 216.43 219.36 222.38 225.44 228.54 231.75 234.97 238.29 / - 1 16 8 1 145.16 132.31 131.61 132.15 133.26 134.71 136.49 138.47 140.61 142.9 145.32 147.98 - 150.64 153.39 156.23 159.15 162.15 165.45 168.58 171.76 175.01 178.31 181.99 185.4 188.87 192.36 195.92 199.51 - 203.14 207.36 211.07 214.86 218.65 222.53 226.4 230.35 / - 1 16 9 1 91.7 90.88 92.34 94.63 97.27 100.16 103.26 106.44 109.8 113.2 116.78 120.46 - 124.13 127.99 131.8 135.82 139.78 143.95 148.2 152.32 156.7 160.91 165.33 169.64 174.16 178.66 183.21 187.66 - 192.39 196.92 201.74 206.34 210.98 216.18 220.89 225.63 / - 1 16 10 1 59.12 62.41 65.68 69.22 72.92 76.72 80.67 84.73 88.9 93.16 97.53 102 - 106.57 111.22 115.97 120.8 125.71 130.68 135.72 140.86 145.86 151.12 156.44 161.83 167.29 172.5 178.07 183.69 - 189.02 194.72 200.49 205.92 211.79 217.3 223.27 228.85 / - 1 16 11 1 45.9 50.85 54.94 59 63.12 67.34 71.68 76.15 80.74 85.47 90.32 95.29 - 100.38 105.58 110.88 116.29 122.1 128.31 134.32 140.43 146.57 152.73 158.9 165.14 171.45 177.78 184.16 190.62 - 197.15 203.75 210.37 217.06 223.87 230.74 237.24 244.23 / - 1 16 12 1 40.15 46.29 51.3 56.05 60.83 65.83 71.04 76.46 82.06 87.82 93.73 99.79 - 105.98 112.3 118.73 125.14 131.61 138.16 144.81 151.55 158.38 165.31 172.33 179.43 186.62 193.89 201.49 209.93 - 218.42 226.57 234.93 243.12 251.36 259.75 268.08 276.5 / - 1 16 13 1 34.98 42.02 49.02 55.97 62.83 69.27 76.25 83.21 90.61 98.12 105.05 112.87 - 120.84 128.94 137.18 145.55 154.05 161.9 170.62 179.49 188.48 197.6 206.77 215.99 225.27 234.65 243.16 253.72 - 263.4 273.17 281.29 291.23 302.86 313.07 323.38 333.81 / - 1 16 14 1 30.18 40.96 51.66 61.88 71.58 80.73 90.29 99.19 109.29 119.57 128.35 138.98 - 149.43 160.29 170.75 182.04 193.51 204.47 216.31 228.33 240.42 252.65 264.64 277.06 290.04 303.19 316.51 330.02 - 343.67 357.45 371.38 385.46 399.7 414.12 428.72 443.49 / - 1 16 15 1 31.41 48.01 62.94 76.69 90.2 103.6 117.13 130.61 144.03 158.91 172.28 187.69 - 203.36 216.89 233.13 249.34 265.83 282.33 299.42 317.07 334.92 352.34 370.97 389.96 409.3 429.01 449.07 469.04 - 489.57 510.12 531.58 553.41 575.61 598.16 619.83 642.69 / - 1 16 16 1 41.98 63.37 85.5 105.75 125.57 145.22 165.28 185.9 206.96 229.42 251.82 275.22 - 298.15 323.34 349.15 372.82 399.96 427.67 455.57 484.04 512.96 543.12 573.24 604.71 636.83 669.27 702.39 736.62 - 771.64 807.43 843.08 880.43 918.57 957.5 997.19 1037.66 / - 1 16 17 1 59.04 91.93 124.48 156.34 187.71 219.4 252.56 286.23 321.85 358.66 398.03 437.45 - 479.65 521.52 566.83 613.34 661.48 708.79 759.94 812.63 866.54 922.23 979.22 1038.25 1098.51 1160.41 1223.14 1285.46 - 1345.42 1406.42 1467.7 1531.64 1596.1 1661.82 1729.02 1798.58 / - 1 16 18 1 86.88 139.6 189.19 242.17 296.35 352.75 412.09 474.64 540.45 609.79 682.7 759.5 - 840.39 925.11 1013.81 1105.82 1200.8 1296.75 1391.12 1486.84 1586.35 1688.5 1794.98 1901.41 2012.08 2127.39 2243.21 2359.84 - 2482.19 2606.16 2733.33 2861.84 2992.64 3127.18 3262.7 3400.54 / - 1 16 19 1 131.38 211.94 292.09 385.27 486.78 595.5 712.75 838.59 974.3 1118.9 1273.26 1424.72 - 1578.6 1747.78 1924.7 2101.35 2286.11 2486.72 2683.65 2889.39 3097.84 3334.44 3556.37 3787.72 4026.63 4273.48 4526.82 4785.06 - 5051.21 5321.75 5600.81 5886.84 6179.19 6476.66 6778.39 7087.76 / - 1 16 20 1 201.88 329.09 459.97 601.21 801.21 1031.41 1282.03 1539.52 1818.6 2121.85 2436.7 2782.73 - 3129.45 3502.22 3900 4320.52 4730.75 5193.88 5639.32 6098.17 6624.86 7124.36 7632.35 8163.43 8774.48 9341.02 9920.82 10513.8 - 11126.4 11752.64 12413.33 13094.78 13800.91 14527.74 15260.71 16012.25 / - 1 17 1 1 223.16 222.19 221.87 221.85 221.99 222.26 222.64 223.1 223.64 224.25 224.94 225.69 - 226.51 227.39 228.34 229.35 230.43 231.57 232.76 234.02 235.34 236.73 238.17 239.67 241.23 242.86 244.54 246.28 - 248.09 249.95 251.87 253.86 255.9 258 260.16 262.38 / - 1 17 2 1 222.76 221.68 221.29 221.22 221.33 221.58 221.94 222.39 222.92 223.53 224.21 224.96 - 225.78 226.67 227.62 228.63 229.71 230.85 232.05 233.32 234.65 236.04 237.49 239 240.57 242.2 243.89 245.65 - 247.46 249.34 251.27 253.27 255.32 257.43 259.61 261.84 / - 1 17 3 1 221.76 220.21 219.63 219.5 219.57 219.8 220.14 220.58 221.11 221.72 222.41 223.16 - 223.99 224.89 225.85 226.88 227.98 229.14 230.36 231.65 233 234.41 235.88 237.42 239.02 240.68 242.4 244.19 - 246.03 247.94 249.87 251.9 253.99 256.14 258.35 260.62 / - 1 17 4 1 219.53 216.63 215.94 215.68 215.67 215.85 216.16 216.58 217.1 217.72 218.42 219.19 - 220.05 220.97 221.97 223.04 224.18 225.39 226.66 228 229.41 230.88 232.41 234.01 235.68 237.41 239.2 241.05 - 242.97 244.95 246.99 249.09 251.25 253.48 255.77 258.11 / - 1 17 5 1 214.36 209.51 208.14 207.75 207.68 207.82 208.13 208.58 209.15 209.81 210.58 211.43 - 212.37 213.4 214.5 215.68 216.94 218.27 219.67 221.1 222.64 224.26 225.94 227.69 229.51 231.39 233.34 235.35 - 237.43 239.57 241.78 244.05 246.38 248.77 251.23 253.74 / - 1 17 6 1 203.32 195.32 193.56 192.98 192.84 192.99 193.37 193.92 194.62 195.46 196.42 197.49 - 198.66 199.94 201.31 202.74 204.28 205.91 207.62 209.41 211.28 213.19 215.2 217.29 219.44 221.67 223.96 226.28 - 228.7 231.19 233.73 236.32 238.99 241.72 244.51 247.35 / - 1 17 7 1 182.34 170.37 168.53 167.99 168.09 168.55 169.27 170.21 171.34 172.61 174.05 175.61 - 177.31 179.11 180.99 183 185.1 187.26 189.54 191.9 194.34 196.81 199.4 202.46 205.19 207.99 210.81 213.72 - 216.7 219.7 222.78 225.92 229.09 232.33 235.63 239.01 / - 1 17 8 1 144.47 131.98 131.31 131.87 133 134.48 136.27 138.26 140.42 142.72 145.15 147.83 - 150.5 153.26 156.12 159.06 162.09 165.41 168.59 171.83 175.13 178.48 181.9 185.75 189.27 192.84 196.44 200.09 - 203.79 207.54 211.87 215.71 219.59 223.51 227.48 231.48 / - 1 17 9 1 91.63 91.16 92.66 94.96 97.63 100.52 103.62 106.81 110.17 113.58 117.16 120.75 - 124.53 128.4 132.23 136.26 140.23 144.43 148.51 152.85 157.03 161.49 165.78 170.28 174.84 179.38 183.97 188.46 - 193.23 197.8 202.68 207.32 212.01 217.27 222.03 226.83 / - 1 17 10 1 59.61 62.92 66.22 69.79 73.5 77.33 81.28 85.34 89.5 93.81 98.18 102.66 - 107.23 111.9 116.66 121.51 126.31 131.3 136.36 141.48 146.7 151.98 157.34 162.77 167.98 173.52 179.13 184.46 - 190.18 195.93 201.37 207.23 212.75 218.71 224.31 230.38 / - 1 17 11 1 46.39 51.38 55.51 59.61 63.76 68 72.36 76.84 81.45 86.18 91.04 96.03 - 101.13 106.34 111.65 117.07 122.68 129.04 135.17 141.2 147.38 153.56 159.88 166.17 172.51 178.87 185.31 191.82 - 198.4 205.05 211.73 218.48 225.34 231.86 238.84 245.91 / - 1 17 12 1 40.62 46.8 51.83 56.58 61.39 66.41 71.65 77.09 82.7 88.48 94.41 100.48 - 106.68 113.02 119.45 125.91 132.41 138.99 145.65 152.41 159.26 166.21 173.25 180.37 187.59 194.89 202.26 210.5 - 219.09 227.4 235.68 243.98 252.55 260.97 269.23 277.71 / - 1 17 13 1 35.36 42.49 49.51 56.43 63.06 69.76 76.75 83.73 91.14 98.51 105.62 113.45 - 121.42 129.53 137.77 146.15 154.54 163.11 171.22 180.07 189.07 198.19 207.44 216.73 226.08 235.5 244.02 254.64 - 264.35 274.15 282.28 292.26 303.94 314.19 324.55 335.02 / - 1 17 14 1 30.54 41.28 51.96 62.23 71.71 81.28 90.68 99.59 109.68 119.97 128.75 139.38 - 149.8 160.67 171.1 182.38 193.83 204.76 216.57 228.55 240.61 252.71 264.72 277.09 290.02 303.13 316.42 329.9 - 343.59 357.48 371.5 385.67 399.98 414.46 429.09 443.91 / - 1 17 15 1 31.75 48.13 63.11 76.92 90.45 103.85 117.38 130.84 144.25 159.1 172.41 187.77 - 203.35 216.85 233.01 249.13 265.53 281.94 298.95 316.51 334.32 351.65 370.18 389.04 408.25 427.81 447.72 466.96 - 487.48 508.43 529.79 551.52 573.6 596.02 617.52 640.57 / - 1 17 16 1 42.06 63.42 85.58 105.84 125.64 145.26 165.27 185.82 206.81 228.59 251.48 274.75 - 297.56 322.65 348.35 371.83 398.71 426.15 453.78 482.05 510.79 540.8 570.73 602.01 633.91 665.78 698.95 732.89 - 767.58 803 838.26 875.19 912.9 951.36 990.59 1030.56 / - 1 17 17 1 59 91.88 124.45 156.26 187.51 219.02 252 285.5 320.97 357.57 396.72 435.81 - 477.76 519.33 564.41 610.61 658.46 705.38 756.16 808.4 861.83 916.96 973.34 1031.76 1091.39 1152.71 1214.97 1278.39 - 1337.48 1399 1461.95 1525.36 1590.93 1657.95 1724.58 1794.58 / - 1 17 18 1 86.84 139.72 189.15 241.93 295.69 351.78 410.71 472.77 538.13 607.03 679.36 755.65 - 835.77 919.84 1007.79 1099.17 1193.55 1289.21 1384.08 1481.62 1581.59 1685.35 1791.55 1901.06 2013.06 2127.39 2244.13 2362.98 - 2486.72 2612.26 2741.01 2871.37 3004.06 3140.5 3278.16 3418.15 / - 1 17 19 1 131.42 212.42 292.95 384.81 485.63 594.94 711.55 836.4 969.17 1114 1267.87 1416.12 - 1576.55 1746 1917.73 2103.12 2289.93 2492.59 2692.3 2900.52 3112.27 3350.91 3576.63 3811.42 4053.73 4302.49 4558.64 4822.84 - 5094.29 5366.18 5652.81 5946.44 6236.35 6542.61 6851.76 7159.37 / - 1 17 20 1 202.26 330.76 463.38 606.89 796.43 1020.76 1267.1 1526.84 1812.9 2106.04 2435.37 2769.32 - 3130.15 3518.08 3895.99 4316.92 4761.49 5197.63 5686.38 6154.97 6643.48 7198.7 7716.79 8257.11 8812.56 9381.63 10038.92 10640.25 - 11262.42 11893.87 12556.55 13247.87 13964.88 14694 15451.72 16230.38 / - 1 18 1 1 224.46 223.59 223.31 223.3 223.46 223.73 224.11 224.57 225.11 225.72 226.41 227.16 - 227.98 228.86 229.81 230.82 231.89 233.03 234.23 235.49 236.81 238.2 239.64 241.15 242.71 244.34 246.02 247.77 - 249.58 251.45 253.38 255.36 257.41 259.52 261.69 263.92 / - 1 18 2 1 223.91 222.88 222.5 222.43 222.54 222.78 223.14 223.58 224.11 224.72 225.4 226.15 - 226.97 227.85 228.8 229.82 230.9 232.04 233.25 234.52 235.85 237.25 238.7 240.22 241.8 243.44 245.14 246.9 - 248.73 250.61 252.56 254.56 256.63 258.75 260.94 263.19 / - 1 18 3 1 222.67 221.09 220.45 220.3 220.36 220.57 220.9 221.34 221.86 222.47 223.15 223.91 - 224.74 225.64 226.61 227.64 228.74 229.91 231.14 232.44 233.8 235.22 236.71 238.26 239.87 241.55 243.28 245.08 - 246.95 248.87 250.85 252.9 255.01 257.17 259.4 261.69 / - 1 18 4 1 220.1 217.03 216.11 215.84 215.83 216 216.31 216.73 217.26 217.88 218.58 219.37 - 220.23 221.17 222.19 223.27 224.43 225.65 226.94 228.3 229.73 231.23 232.79 234.41 236.1 237.86 239.67 241.56 - 243.5 245.51 247.53 249.67 251.87 254.13 256.45 258.83 / - 1 18 5 1 214.5 209.07 207.67 207.23 207.13 207.26 207.56 208 208.57 209.24 210.02 210.89 - 211.84 212.89 214.02 215.22 216.46 217.82 219.26 220.76 222.35 224 225.72 227.52 229.38 231.31 233.3 235.37 - 237.5 239.69 241.95 244.27 246.61 249.06 251.57 254.15 / - 1 18 6 1 203.13 194.4 192.62 192.02 191.86 192.01 192.39 192.95 193.66 194.51 195.49 196.59 - 197.79 199.1 200.47 201.97 203.55 205.22 206.98 208.81 210.69 212.69 214.75 216.89 219.11 221.36 223.71 226.13 - 228.61 231.16 233.75 236.42 239.16 241.96 244.82 247.73 / - 1 18 7 1 181.21 169.44 167.45 167.11 167.26 167.77 168.53 169.5 170.66 171.98 173.45 175.06 - 176.75 178.6 180.55 182.56 184.71 186.95 189.28 191.65 194.14 196.71 199.3 202.01 204.79 208.07 210.99 213.97 - 216.97 220.07 223.2 226.41 229.68 232.98 236.36 239.79 / - 1 18 8 1 144.31 131.66 131.04 131.65 132.79 134.33 136.13 138.12 140.28 142.58 145.03 147.59 - 150.4 153.18 156.06 159.02 162.06 165.18 168.61 171.88 175.21 178.6 182.05 185.55 189.49 193.11 196.78 200.5 - 204.27 208.13 212.03 216.51 220.47 224.48 228.52 232.61 / - 1 18 9 1 91.76 91.54 93.1 95.43 98.13 101.02 104.13 107.32 110.67 114.07 117.65 121.23 - 125.02 128.78 132.73 136.77 140.74 144.94 149.05 153.4 157.61 162.11 166.41 170.94 175.53 179.98 184.6 189.27 - 194.08 198.7 203.35 208.31 213.04 217.81 223.18 228.03 / - 1 18 10 1 60.29 63.6 66.97 70.58 74.31 78.15 82.1 86.15 90.31 94.61 98.98 103.45 - 108.02 112.69 117.35 122.19 127.11 132.12 137.18 142.33 147.56 152.88 158.26 163.46 168.97 174.54 180.19 185.56 - 191.32 196.77 202.61 208.52 214.09 220.11 225.76 231.9 / - 1 18 11 1 47.16 52.15 56.34 60.48 64.66 68.92 73.28 77.76 82.37 87.1 91.95 96.93 - 102.02 107.22 112.54 117.95 123.46 129.83 136 142.12 148.23 154.4 160.68 166.98 173.55 179.95 186.42 192.97 - 199.6 205.96 212.72 219.5 226.35 233.32 240.38 247.04 / - 1 18 12 1 41.41 47.57 52.59 57.33 62.16 67.21 72.47 77.91 83.52 89.3 95.23 101.3 - 107.5 113.83 120.24 126.72 133.27 139.87 146.54 153.3 160.16 167.11 174.15 181.28 188.51 195.82 203.21 210.69 - 219.32 228.02 236.4 244.89 253.34 261.77 270.33 278.73 / - 1 18 13 1 36.02 43.26 50.29 57.17 63.6 70.4 77.32 84.39 91.78 98.91 106.27 114.09 - 122.05 130.14 138.29 146.6 155.06 163.64 171.71 180.54 189.5 198.6 207.82 217.18 226.62 236.11 244.65 255.32 - 264.8 274.89 283 294.57 304.73 315 325.38 335.88 / - 1 18 14 1 31.24 41.97 52.54 62.73 72.09 81.76 91.17 100.06 110.12 120.4 129.15 139.75 - 150.11 160.91 171.34 182.56 193.59 204.84 216.57 228.49 240.47 252.62 264.2 276.67 289.5 302.5 315.67 329.03 - 342.6 356.37 370.36 384.56 398.97 413.56 428.3 443.19 / - 1 18 15 1 32.44 48.51 63.31 77.28 90.8 104.17 117.67 131.09 144.44 159.02 172.41 187.69 - 202.98 216.54 232.58 248.44 264.81 281.07 297.91 315.21 332.91 350.03 368.38 387.07 406.1 425.47 445.19 464.83 - 485.01 505.18 526.27 547.72 569.52 591.28 612.9 635.34 / - 1 18 16 1 42.52 63.51 85.57 106.02 125.78 145.31 164.94 185.67 206.53 228.77 250.9 273.82 - 296.57 321.43 346.77 369.79 396.3 423.42 450.73 478.64 506.99 536.59 566.11 597 628.55 660.43 692.89 726.45 - 760.71 795.67 830.93 866.79 903.91 941.76 980.33 1019.63 / - 1 18 17 1 59.06 91.74 124.49 155.89 187.27 218.51 251.31 284.5 319.64 355.88 394.73 433.4 - 474.98 515.98 560.56 606.27 653.66 699.99 750.27 801.94 854.66 909.06 964.57 1022.09 1080.74 1141.11 1202.48 1265.18 - 1325.92 1387.79 1450.93 1515.25 1580.78 1647.88 1716.81 1785.99 / - 1 18 18 1 86.95 140.1 189.3 241.67 294.84 350.22 408.46 469.85 534.26 602.42 674.54 750.04 - 829.13 912.31 998.97 1089.41 1182.83 1278.89 1374.24 1471.74 1573.65 1677.49 1784.7 1895.45 2008.72 2124.55 2242.89 2365.5 - 2488.9 2616.18 2746.73 2879.12 3014.03 3152.6 3292.74 3435.3 / - 1 18 19 1 131.72 213.39 294.45 385.35 485.36 592.25 707.61 830.99 964.06 1104.94 1255.13 1407.87 - 1569.59 1739.93 1913.35 2102.03 2290.33 2486.15 2701.25 2911.15 3127.95 3350.98 3599.91 3839 4082.97 4336.1 4595.03 4864.67 - 5139.02 5423.65 5707.27 6005.24 6305.55 6612.91 6931.33 7246.55 / - 1 18 20 1 203.12 333.42 468.35 614.57 789.59 1012.23 1259.62 1517.22 1791.82 2092.98 2420.46 2763.76 - 3119.85 3503.36 3893.21 4315.45 4762.4 5199.34 5689.99 6166.93 6702.47 7212.02 7742.79 8348.84 8916.05 9496.69 10083.88 10693.47 - 11415.14 12062.95 12740.23 13438.23 14156.93 14896.01 15665.14 16459.33 / - 1 19 1 1 225.46 224.68 224.43 224.43 224.59 224.87 225.25 225.71 226.25 226.86 227.55 228.3 - 229.12 230 230.95 231.97 233.04 234.18 235.39 236.65 237.98 239.36 240.82 242.33 243.9 245.53 247.23 248.98 - 250.8 252.68 254.61 256.61 258.67 260.79 262.97 265.21 / - 1 19 2 1 224.68 223.65 223.26 223.17 223.25 223.5 223.85 224.3 224.83 225.43 226.12 226.87 - 227.69 228.58 229.54 230.57 231.65 232.81 234.02 235.3 236.64 238.05 239.52 241.05 242.64 244.3 246.02 247.79 - 249.63 251.54 253.49 255.49 257.58 259.72 261.93 264.2 / - 1 19 3 1 223.1 221.27 220.67 220.48 220.52 220.71 221.02 221.45 221.97 222.57 223.25 224.01 - 224.85 225.76 226.73 227.78 228.9 230.08 231.33 232.64 234.02 235.47 236.98 238.55 240.19 241.89 243.65 245.48 - 247.37 249.33 251.34 253.42 255.56 257.76 260.03 262.35 / - 1 19 4 1 220.11 216.78 215.6 215.28 215.24 215.39 215.69 216.11 216.63 217.26 217.97 218.77 - 219.65 220.61 221.64 222.7 223.88 225.13 226.45 227.84 229.3 230.83 232.43 234.1 235.83 237.63 239.49 241.42 - 243.42 245.47 247.6 249.78 252.03 254.35 256.72 259.16 / - 1 19 5 1 214.17 208.16 206.74 206.22 206.05 206.15 206.44 206.88 207.44 208.12 208.9 209.79 - 210.77 211.84 213 214.24 215.56 216.96 218.44 219.99 221.59 223.29 225.07 226.92 228.84 230.83 232.88 235.01 - 237.21 239.47 241.79 244.14 246.6 249.12 251.71 254.35 / - 1 19 6 1 202.74 193.53 191.6 190.94 190.81 190.97 191.37 191.96 192.68 193.56 194.56 195.69 - 196.92 198.26 199.7 201.24 202.82 204.54 206.34 208.23 210.2 212.21 214.33 216.53 218.81 221.16 223.54 226.03 - 228.59 231.21 233.91 236.63 239.46 242.34 245.29 248.28 / - 1 19 7 1 180.96 168.45 166.51 166.2 166.42 166.98 167.79 168.8 170 171.35 172.86 174.5 - 176.23 178.13 180.14 182.24 184.4 186.69 189.07 191.48 194.02 196.64 199.28 202.04 204.87 207.72 211.21 214.2 - 217.31 220.48 223.66 226.95 230.3 233.66 237.12 240.63 / - 1 19 8 1 143.46 131.35 130.93 131.6 132.87 134.44 136.23 138.22 140.4 142.73 145.18 147.75 - 150.56 153.34 156.22 159.18 162.22 165.34 168.79 172.06 175.4 178.8 182.27 185.8 189.77 193.43 197.13 200.89 - 204.7 208.55 212.46 216.99 221 225.07 229.18 233.34 / - 1 19 9 1 92.42 92.25 94.07 96.57 99.32 102.23 105.31 108.45 111.76 115.12 118.65 122.2 - 125.94 129.67 133.59 137.6 141.56 145.74 149.83 154.17 158.36 162.86 167.18 171.72 176.13 180.78 185.42 190.11 - 194.71 199.6 204.28 209.29 214.06 218.87 224.29 229.18 / - 1 19 10 1 61.55 64.95 68.59 72.32 76.09 79.92 83.83 87.85 91.96 96.16 100.47 104.88 - 109.39 114 118.61 123.4 128.28 133.25 138.29 143.41 148.63 153.94 159.08 164.52 170.03 175.62 180.96 186.67 - 192.46 197.94 203.81 209.37 215.36 221.43 227.12 233.31 / - 1 19 11 1 48.79 53.85 58.23 62.45 66.65 70.89 75.22 79.65 84.2 88.86 93.64 98.54 - 103.56 108.69 113.93 119.28 124.72 130.95 137.1 143.15 149.29 155.49 161.76 168.02 174.32 180.7 187.17 193.71 - 200.34 207.04 213.83 220.64 227.54 234.14 241.21 248.37 / - 1 19 12 1 43.24 49.34 54.29 59 63.86 68.9 74.12 79.51 85.07 90.79 96.65 102.66 - 108.79 115.05 121.36 127.77 134.29 140.91 147.57 154.3 161.12 168.03 175.03 182.13 189.31 196.57 203.92 211.35 - 219.15 227.91 236.45 245.16 253.55 262.12 270.66 279.35 / - 1 19 13 1 37.7 45.12 51.93 58.49 65.07 71.76 78.55 85.61 92.92 99.9 107.22 114.95 - 122.81 130.81 138.93 147.19 155.57 164.07 172.02 180.77 189.64 198.65 207.79 217.06 226.46 235.98 244.32 254.28 - 265.12 274.67 283 294.65 304.82 315.09 325.48 335.98 / - 1 19 14 1 32.77 43.64 54.24 63.93 73.24 82.26 92.02 100.78 110.78 120.56 129.62 140.05 - 150.35 161.05 171.35 182.46 193.32 204.47 216.09 227.76 239.7 251.04 263.64 275.39 288.06 300.89 313.88 327.06 - 340.43 354 367.77 381.74 395.91 410.29 424.87 439.66 / - 1 19 15 1 33.88 49.78 64.26 77.91 91.22 104.74 118 131.42 144.62 157.97 172.22 187.34 - 202.42 215.73 231.52 247.2 263.34 279.18 295.83 312.96 329.88 347.19 365.23 383.59 402.28 421.29 440.64 459.88 - 478.57 499.4 520.1 541.14 562.53 584.2 605.84 627.35 / - 1 19 16 1 42.41 64.39 86.05 106.1 125.51 145.04 164.86 185.42 206.04 226.83 249.93 271.55 - 294.73 319.11 343.98 366.32 392.29 418.75 445.39 472.89 500.62 529.55 558.52 588.8 619.75 650.57 682.81 715.73 - 749.32 783.58 817.48 853.13 889.46 926.49 964.22 1002.64 / - 1 19 17 1 60.19 91.76 124.69 156.01 186.55 217.98 249.88 283.1 317.84 353.54 391.88 429.8 - 470.77 510.9 554.53 599.77 646.02 691.37 740.61 791.18 842.7 895.87 950.04 1006.28 1063.58 1122.68 1182.85 1244.6 - 1306.22 1368.68 1432.26 1497.16 1563.62 1631.69 1700.79 1771.29 / - 1 19 18 1 87.45 140.56 189.78 241.49 293.61 347.91 405.05 465.3 529.02 596.32 667 741.91 - 819.38 901.25 985.88 1074.99 1167.36 1262.5 1358.6 1457.66 1559.66 1665.33 1774.08 1886.07 2000 2118.39 2238.56 2361.79 - 2488.3 2616.85 2748.81 2884.14 3021.55 3162.59 3305.54 3452.63 / - 1 19 19 1 132.62 215.41 297.38 387.2 484.84 589.74 703.19 824.75 955.4 1094.25 1242.08 1395.92 - 1557.9 1728.89 1904.45 2093.25 2284.07 2482.42 2698.46 2912.03 3133.69 3360.98 3596.3 3856.86 4108.4 4366.48 4632.99 4906.93 - 5188.7 5478.5 5773.59 6077.48 6381.95 6699.46 7019.99 7348.33 / - 1 19 20 1 204.94 337.95 476.15 625.56 789.01 997.98 1240.93 1495.2 1777.71 2076.78 2402.33 2739.89 - 3104.04 3488.06 3887.65 4308.8 4742.92 5212.59 5706.17 6184.93 6723.31 7241.32 7825.53 8380.03 8950.79 9538.24 10212.63 10838.33 - 11485.3 12153 12841.37 13544.92 14392.48 15151.54 15931.63 16732.6 / - 1 20 1 1 225.58 224.71 224.38 224.33 224.46 224.71 225.06 225.51 226.04 226.65 227.33 228.09 - 228.91 229.81 230.77 231.79 232.89 234.04 235.26 236.55 237.9 239.31 240.79 242.33 243.93 245.6 247.32 249.11 - 250.97 252.88 254.86 256.9 259 261.16 263.38 265.67 / - 1 20 2 1 224.51 223.3 222.72 222.57 222.62 222.83 223.16 223.58 224.1 224.71 225.39 226.15 - 226.98 227.88 228.85 229.9 231.01 232.18 233.43 234.74 236.11 237.55 239.06 240.63 242.26 243.96 245.73 247.55 - 249.44 251.39 253.41 255.49 257.63 259.83 262.1 264.43 / - 1 20 3 1 222.68 220.57 219.7 219.45 219.44 219.61 219.91 220.32 220.84 221.45 222.14 222.92 - 223.77 224.7 225.7 226.78 227.92 229.14 230.43 231.78 233.2 234.69 236.25 237.88 239.57 241.32 243.15 245.03 - 246.99 249 251.09 253.23 255.44 257.7 260 262.41 / - 1 20 4 1 219.56 215.67 214.56 214.15 214.04 214.15 214.41 214.82 215.33 215.96 216.68 217.49 - 218.38 219.36 220.42 221.56 222.78 224.07 225.43 226.87 228.38 229.96 231.62 233.34 235.13 236.99 238.92 240.92 - 242.98 245.12 247.32 249.58 251.91 254.31 256.77 259.29 / - 1 20 5 1 213.6 207.07 205.55 205.02 204.86 204.95 205.24 205.68 206.26 206.96 207.77 208.68 - 209.69 210.77 211.96 213.24 214.6 216.04 217.57 219.17 220.83 222.59 224.43 226.34 228.3 230.35 232.48 234.68 - 236.95 239.29 241.66 244.14 246.68 249.29 251.97 254.71 / - 1 20 6 1 202.14 192.4 190.43 189.82 189.71 189.91 190.34 190.93 191.7 192.6 193.64 194.8 - 196.07 197.45 198.93 200.46 202.13 203.9 205.75 207.69 209.67 211.77 213.96 216.22 218.51 220.93 223.41 225.97 - 228.6 231.27 234.04 236.87 239.78 242.72 245.75 248.86 / - 1 20 7 1 180.41 167.45 165.55 165.28 165.58 166.2 167.08 168.2 169.48 170.91 172.47 174.17 - 175.98 177.93 179.95 182.07 184.3 186.62 189.01 191.49 194.07 196.7 199.44 202.23 205.11 208.01 211.04 214.07 - 217.78 221.01 224.25 227.6 230.97 234.44 237.97 241.51 / - 1 20 8 1 143.13 131.65 131.76 132.56 133.9 135.5 137.3 139.28 141.43 143.71 146.12 148.63 - 151.39 154.13 156.96 159.88 162.88 165.97 169.13 172.65 175.99 179.39 182.87 186.41 190.01 194.06 197.77 201.55 - 205.38 209.26 213.19 217.17 221.19 225.85 229.99 234.17 / - 1 20 9 1 94.5 95.27 97.52 100.04 102.72 105.51 108.45 111.45 114.55 117.83 121.14 124.64 - 128.15 131.85 135.53 139.43 143.27 147.36 151.37 155.65 159.81 164.27 168.56 173.07 177.47 182.11 186.73 191.27 - 196 200.88 205.55 210.27 215.31 220.11 224.95 230.41 / - 1 20 10 1 65.5 69.45 73.38 77.17 80.89 84.59 88.33 92.12 96.01 100 104.09 108.22 - 112.52 116.93 121.45 126.08 130.81 135.5 140.42 145.43 150.57 155.8 161.11 166.24 171.69 177.23 182.52 188.18 - 193.93 199.36 205.2 210.72 216.68 222.29 228.37 234.07 / - 1 20 11 1 53.58 58.96 63.54 67.81 71.97 76.13 80.33 84.6 88.95 93.4 97.94 102.61 - 107.38 112.27 117.27 122.37 127.59 133.69 139.62 145.41 151.41 157.48 163.55 169.64 175.82 182.09 188.44 194.88 - 201.4 208 214.32 221.06 227.84 234.69 241.68 248.29 / - 1 20 12 1 48.49 54.02 58.85 63.61 68.43 73.38 78.46 83.69 89.07 94.58 100.23 106.01 - 111.92 117.89 123.94 130.1 136.38 142.77 149.27 155.89 162.61 169.4 176.21 183.1 190.08 197.16 204.34 211.6 - 218.95 226.98 235.43 243.93 252.61 260.93 269.44 277.91 / - 1 20 13 1 43.14 50.03 56.26 62.5 68.87 75.43 82.23 89.2 95.54 102.59 109.91 117.37 - 124.95 132.66 140.49 148.45 156.54 163.97 172.29 180.74 188.42 198.05 206.91 215.87 224.82 234.06 242.5 252 - 261.63 270.41 282.14 292.18 302.34 312.61 322.92 333.33 / - 1 20 14 1 37.52 48.4 58.42 67.6 76.23 85.51 93.75 103.32 113.06 120.93 130.87 140.72 - 150.77 160.58 171.07 181.83 192.4 202.96 214.21 225.64 237.25 248.68 259.67 271.83 284.17 296.7 309.36 322.21 - 335.25 348.48 361.91 375.53 389.35 403.37 417.59 432 / - 1 20 15 1 37.54 53.57 67.82 80.98 93.54 106.26 118.72 131.05 145.05 157.16 171.57 186.23 - 198.71 213.4 228.66 243.73 259.57 274.74 291.15 307.84 323.91 341.04 358.63 376.54 394.57 413.09 431.76 449.47 - 469.3 489.13 509.28 529.77 550.6 570.17 592.67 613.37 / - 1 20 16 1 44.53 68.19 88.76 107.92 126.34 145.2 164.94 184.84 204.79 224.77 247.11 267.1 - 290.34 314.04 335.81 359.36 384.64 410.15 436.01 462.73 489.66 517.89 545.85 575.32 605.43 635.34 666.73 698.77 - 731.45 763.85 797.33 831.98 867.29 903.26 939.9 977.17 / - 1 20 17 1 64.01 94.92 126.61 156.06 185.95 216.21 247.76 280.93 314.86 349.56 385.08 424.13 - 461.9 502.15 544.64 588.39 632.02 676.05 723.84 772.64 822.73 874.5 926.95 981.64 1037.28 1094.39 1153.27 1213.2 - 1274.94 1337.82 1402.19 1468.12 1535.42 1603.6 1673.69 1745.15 / - 1 20 18 1 92.46 141.29 190.68 241.24 292.12 345.08 401.38 460.3 523.04 588.8 657.47 731 - 806.22 886.42 968.03 1054.83 1145.11 1238.67 1333.77 1434.27 1538.02 1645.05 1754.99 1868.08 1984.29 2103.66 2226.12 2351.57 - 2480.07 2611.51 2746.19 2883.65 3024.05 3167.85 3314.13 3463.29 / - 1 20 19 1 136.7 220.19 302.1 391.09 486.33 588.71 698.92 817.62 944.73 1081 1226.04 1379.84 - 1542.55 1714.22 1891.64 2081.23 2275.03 2476.39 2692.06 2909.43 3134.14 3366.1 3605.31 3866.03 4122.13 4385.77 4656.88 4935.27 - 5222.42 5517.87 5819.09 6129.48 6447.4 6769.62 7102.37 7438.88 / - 1 20 20 1 209.5 346.76 489.74 643.09 808.43 986.32 1176.79 1379.82 1636.52 1927.26 2234.15 2564.83 - 2914.16 3288.54 3670.62 4089.14 4536.17 4980.26 5478.98 5968.34 6480.56 7016.14 7575.7 8174.71 8752.91 9388.01 10022.87 10636.63 - 11352.86 12014.16 12696.58 13501.76 14233.37 14986.23 15883.58 16686.59 / - 2 1 1 1 194.21 194.03 194.08 194.28 194.59 194.98 195.44 195.98 196.58 197.25 197.98 198.77 - 199.62 200.53 201.5 202.53 203.62 204.76 205.96 207.21 208.52 209.89 211.32 212.8 214.33 215.92 217.57 219.27 - 221.02 222.83 224.7 226.62 228.59 230.62 232.71 234.85 / - 2 1 2 1 194.12 193.93 193.98 194.17 194.47 194.86 195.33 195.86 196.46 197.13 197.86 198.65 - 199.51 200.42 201.39 202.41 203.5 204.64 205.84 207.1 208.41 209.78 211.21 212.69 214.22 215.81 217.46 219.16 - 220.92 222.73 224.6 226.52 228.5 230.53 232.62 234.76 / - 2 1 3 1 193.96 193.74 193.78 193.97 194.26 194.65 195.11 195.64 196.24 196.91 197.64 198.43 - 199.28 200.19 201.16 202.19 203.28 204.42 205.63 206.88 208.2 209.57 211 212.48 214.02 215.61 217.26 218.96 - 220.72 222.54 224.41 226.34 228.32 230.35 232.44 234.58 / - 2 1 4 1 193.66 193.4 193.41 193.59 193.88 194.25 194.71 195.24 195.84 196.51 197.24 198.03 - 198.88 199.79 200.77 201.8 202.88 204.03 205.23 206.49 207.81 209.19 210.62 212.1 213.64 215.24 216.9 218.6 - 220.37 222.19 224.06 225.99 227.98 230.02 232.12 234.27 / - 2 1 5 1 192.71 192.04 191.93 192.02 192.25 192.6 193.03 193.55 194.14 194.8 195.53 196.32 - 197.18 198.1 199.09 200.13 201.23 202.4 203.62 204.9 206.24 207.64 209.09 210.6 212.17 213.79 215.48 217.21 - 219.01 220.86 222.77 224.73 226.74 228.82 230.94 233.13 / - 2 1 6 1 189.4 186.93 186.39 186.34 186.48 186.78 187.21 187.73 188.36 189.07 189.86 190.72 - 191.66 192.68 193.75 194.89 196.1 197.36 198.7 200.09 201.55 203.07 204.65 206.25 207.95 209.7 211.52 213.39 - 215.32 217.31 219.35 221.45 223.61 225.81 228.06 230.37 / - 2 1 7 1 178.32 173.4 172.48 172.22 172.26 172.6 173.12 173.79 174.59 175.5 176.53 177.65 - 178.86 180.14 181.51 182.96 184.49 186.09 187.74 189.47 191.26 193.11 195.02 197 199.03 201.08 203.22 205.41 - 207.66 209.96 212.31 214.71 217.16 219.65 222.2 224.8 / - 2 1 8 1 151.46 144.04 142.82 142.67 143.08 143.91 145.03 146.36 147.87 149.53 151.33 153.19 - 155.18 157.23 159.38 161.6 164.1 166.45 168.86 171.29 173.8 176.33 178.92 181.56 184.21 187.37 190.14 192.91 - 195.75 198.6 201.51 204.45 207.42 210.44 213.49 216.57 / - 2 1 9 1 101.52 96.07 96.79 98.43 100.46 102.81 105.35 108.12 110.97 114.02 117.1 120.24 - 123.56 126.83 130.3 133.78 137.21 140.78 144.36 148 151.53 155.25 158.88 162.7 166.35 170.05 174.12 177.84 - 181.55 185.28 189.52 193.28 197.07 200.86 204.69 209.1 / - 2 1 10 1 60.9 62.5 65.18 68.17 71.32 74.62 78.06 81.61 85.26 89.02 92.89 96.86 - 100.92 105.06 109.28 113.59 117.98 122.27 126.77 131.34 135.97 140.65 145.14 149.91 154.71 159.28 164.15 169.08 - 173.71 178.71 183.42 188.55 193.23 198.15 203.07 207.72 / - 2 1 11 1 46.99 50.18 53.51 56.97 60.52 64.18 67.96 71.85 75.87 80.01 84.28 88.66 - 93.15 98.04 103.21 108.21 113.33 118.54 123.82 129.09 134.43 139.84 145.31 150.84 156.43 162.08 167.75 173.47 - 179.27 185.13 191.03 196.99 202.6 208.59 214.63 220.28 / - 2 1 12 1 42.37 46.54 50.32 54.16 58.26 62.61 67.18 71.94 76.88 81.98 87.24 92.64 - 98.18 103.84 109.61 115.41 121.29 127.25 133.31 139.43 145.6 151.85 159.08 166.28 173.14 180.2 187.24 194.23 - 201.2 208.23 215.32 222.48 230.06 236.98 244.32 251.73 / - 2 1 13 1 37.54 43.17 48.4 53.8 59.68 65.63 71.69 77.73 84.38 91.22 98.24 105.41 - 112.74 120.2 127.79 135.52 143.37 151.25 158.31 167.51 175.83 184.15 191.34 199.72 208.18 216.08 224.68 233.38 - 244.41 251.89 261.75 271.37 281.23 290.89 300.6 310.46 / - 2 1 14 1 32.72 41.53 50.93 59.94 68.58 77.01 85.79 94.42 103.95 112.19 121.83 131.61 - 141.55 151.93 162.47 172.52 182.71 193.72 204.95 216.36 227.83 239.33 250.49 262.61 274.8 287.06 299.42 311.91 - 324.54 337.31 350.24 363.32 377.35 391.91 406.55 421.14 / - 2 1 15 1 33.02 48.38 62.15 75.06 87.71 99.91 112.65 125.71 139.55 152 166.68 181.62 - 195 209.66 225.16 240.66 256.95 272.67 289.6 306.75 323.4 341.33 359.62 378.21 397.1 416.09 435.2 453.78 - 473.72 493.99 514.6 535.57 557.78 580.81 604.14 627.65 / - 2 1 16 1 43.58 64.37 85.14 104.26 123.28 142.76 162.76 183.41 204.2 225.29 248.61 270.22 - 294.38 319.32 341.93 368.11 394.75 421.81 449.91 478.01 507.39 537.82 568.97 600.24 632.03 665.09 698.82 733.41 - 769.93 806.88 845.05 883.98 923.06 962.93 1003.26 1043.11 / - 2 1 17 1 61.13 93.13 125.03 155.35 186.36 217.98 251.1 285.19 320.81 359.55 397.93 439.54 - 480.6 525.16 570.89 615.66 664.73 715.74 768.46 822.58 878.17 935.91 996.05 1057.36 1119.18 1180.07 1237.44 1289.84 - 1334.04 1375.72 1424.38 1470.88 1521.82 1572.81 1624.02 1675.02 / - 2 1 18 1 89.56 140.94 190.95 242.66 296.15 352.88 413.05 477.22 545.5 617.07 692.4 772.62 - 857.26 946.45 1038.73 1133.03 1230.09 1319.51 1407.01 1496.64 1590.33 1685.87 1784.97 1885.35 1987.2 2089.31 2194.6 2302.85 - 2408.92 2520.61 2633.76 2749.41 2866.34 2984.46 3104.51 3229.1 / - 2 1 19 1 134.54 213.81 298.6 392.96 496.1 607.31 728.18 859.78 1004.69 1156.41 1301.96 1444.32 - 1588.54 1747.38 1901.2 2060.18 2231.98 2400.58 2572.08 2753.03 2933.73 3123.09 3316.79 3514.32 3711.48 3917.79 4130.04 4343.2 - 4566.16 4786.72 5018.92 5246.13 5485.5 5732.06 5966.81 6224.62 / - 2 1 20 1 204.42 326.85 475.44 664.25 878.42 1122.53 1369.03 1612.87 1871.34 2156.65 2437.71 2748.19 - 3058.85 3401.99 3745.9 4097.2 4495.94 4876.25 5273.56 5680.91 6105.56 6532.35 6982.36 7433.38 7910.59 8390.55 8891.78 9377.23 - 9905.19 10435.14 10978.1 11544.43 12118.25 12681.17 13287.88 13925.26 / - 2 2 1 1 196.05 195.85 195.9 196.1 196.4 196.79 197.26 197.79 198.4 199.07 199.8 200.59 - 201.44 202.35 203.32 204.35 205.44 206.58 207.79 209.04 210.36 211.73 213.16 214.64 216.18 217.77 219.42 221.13 - 222.89 224.71 226.58 228.5 230.48 232.52 234.61 236.76 / - 2 2 2 1 195.95 195.75 195.79 195.99 196.29 196.67 197.14 197.67 198.28 198.94 199.67 200.47 - 201.32 202.23 203.2 204.23 205.32 206.46 207.67 208.93 210.24 211.61 213.04 214.53 216.07 217.66 219.31 221.02 - 222.78 224.6 226.48 228.4 230.39 232.42 234.52 236.67 / - 2 2 3 1 195.79 195.55 195.59 195.77 196.07 196.45 196.91 197.45 198.05 198.71 199.44 200.24 - 201.09 202 202.97 204 205.09 206.24 207.44 208.7 210.02 211.39 212.82 214.31 215.85 217.45 219.11 220.81 - 222.58 224.4 226.28 228.21 230.19 232.23 234.33 236.48 / - 2 2 4 1 195.47 195.2 195.21 195.38 195.67 196.05 196.5 197.04 197.64 198.3 199.03 199.82 - 200.68 201.59 202.56 203.6 204.69 205.83 207.04 208.3 209.62 211 212.43 213.92 215.47 217.07 218.73 220.44 - 222.21 224.04 225.92 227.85 229.85 231.89 233.99 236.15 / - 2 2 5 1 194.4 193.69 193.56 193.62 193.85 194.19 194.63 195.14 195.74 196.41 197.14 197.94 - 198.81 199.74 200.74 201.79 202.91 204.07 205.3 206.58 207.93 209.33 210.79 212.31 213.88 215.51 217.2 218.94 - 220.74 222.6 224.5 226.47 228.5 230.58 232.72 234.91 / - 2 2 6 1 190.85 188.05 187.63 187.56 187.71 188.01 188.43 188.96 189.59 190.3 191.09 191.96 - 192.91 193.92 195.01 196.16 197.39 198.67 200.03 201.44 202.92 204.46 206.05 207.7 209.41 211.18 213 214.85 - 216.79 218.79 220.84 222.95 225.12 227.35 229.63 231.96 / - 2 2 7 1 178.51 174.11 173.21 172.96 173 173.34 173.88 174.56 175.37 176.3 177.35 178.49 - 179.71 181.02 182.41 183.88 185.43 187.03 188.72 190.47 192.28 194.14 196.08 198.08 200.13 202.24 204.41 206.63 - 208.87 211.19 213.57 215.99 218.47 220.99 223.57 226.2 / - 2 2 8 1 151.56 144.16 142.89 142.76 143.19 144.05 145.19 146.56 148.1 149.79 151.6 153.52 - 155.55 157.64 159.83 162.06 164.39 167.02 169.44 171.94 174.48 177.05 179.68 182.34 185.05 188.26 191.04 193.87 - 196.74 199.64 202.59 205.56 208.57 211.63 214.71 217.83 / - 2 2 9 1 101.6 96.06 96.81 98.43 100.49 102.91 105.48 108.21 111.14 114.13 117.31 120.5 - 123.87 127.16 130.65 134.07 137.64 141.26 144.79 148.44 152.11 155.86 159.47 163.34 167.02 170.76 174.88 178.62 - 182.41 186.18 190.48 194.29 198.13 201.97 205.84 210.33 / - 2 2 10 1 61.03 62.7 65.4 68.4 71.6 74.94 78.4 81.99 85.67 89.48 93.38 97.38 - 101.47 105.65 109.9 114.25 118.52 122.99 127.54 132.14 136.8 141.29 146.05 150.86 155.7 160.31 165.22 169.87 - 174.86 179.91 184.62 189.78 194.59 199.61 204.34 209.34 / - 2 2 11 1 47.04 50.34 53.68 57.17 60.76 64.46 68.27 72.21 76.27 80.45 84.75 89.18 - 93.71 98.5 103.81 108.91 114.05 119.25 124.53 129.98 135.37 140.83 146.35 151.93 157.57 163.27 168.99 174.76 - 180.61 186.52 192.48 198.49 204.16 210.2 216.31 222.01 / - 2 2 12 1 42.29 46.63 50.48 54.37 58.5 62.89 67.49 72.3 77.28 82.42 87.72 93.17 - 98.75 104.46 110.27 116.11 122.03 128.04 134.15 140.31 146.53 152.83 159.94 167.26 174.31 181.25 188.37 195.4 - 202.62 209.71 216.86 224.08 231.37 238.72 246.13 253.61 / - 2 2 13 1 37.43 43.18 48.54 54.03 59.92 65.92 72.02 78.1 84.79 91.67 98.74 105.96 - 113.33 120.84 128.48 136.25 144.15 152.08 159.25 168.46 176.8 185.18 192.42 200.85 209.37 217.32 225.98 234.73 - 245.25 253.09 263.06 272.83 282.69 292.5 302.27 312.18 / - 2 2 14 1 32.68 41.56 51 60.1 68.8 77.27 86.2 94.79 104.35 112.64 122.33 132.18 - 142.15 152.57 163.17 173.26 183.67 194.58 205.86 217.32 228.85 240.47 251.61 263.8 276.05 288.37 300.8 313.35 - 326.04 338.89 351.89 365.04 378.76 393.42 408.22 423.02 / - 2 2 15 1 33 48.42 62.21 75.28 87.9 100.17 112.94 126.09 139.93 152.43 167.15 182.14 - 195.23 210.3 225.86 241.41 257.74 273.52 290.5 307.7 324.41 342.38 360.72 379.38 398.36 417.55 436.62 455.28 - 475.3 495.65 516.34 537.38 559.25 582.42 605.94 629.32 / - 2 2 16 1 43.54 64.36 85.2 104.37 123.44 143.09 162.98 183.67 204.51 225.63 249.02 270.68 - 294.89 319.88 342.63 368.79 395.63 422.59 450.73 479.24 508.26 538.7 569.88 601.16 632.98 666.12 699.9 734.5 - 770.16 807.17 845.5 884.72 924.11 963.97 1004 1044.91 / - 2 2 17 1 61.04 93.1 125.03 155.83 186.48 218.13 251.26 285.87 321.43 359.73 398.14 439.78 - 480.87 525.44 571.18 616.64 664.97 715.91 768.63 822.8 878.77 936.12 996.06 1057.4 1119.46 1180.64 1238.3 1291.96 - 1333.89 1380.03 1426.92 1475.46 1525.39 1579.63 1631.51 1681.89 / - 2 2 18 1 89.41 141.01 190.94 242.74 296.48 353.05 413.18 477.27 545.46 617 692.18 772.28 - 856.68 945.75 1038.05 1132.39 1229.4 1320.1 1408.99 1501.31 1595.9 1685.74 1778.6 1871.8 1964.54 2060.31 2157.31 2258.6 - 2355.89 2460.7 2563.5 2671.47 2775.89 2884.65 2992.65 3109.23 / - 2 2 19 1 134.34 213.64 298.19 393.02 495.18 607.27 727.29 859.26 1000.88 1151.45 1301.47 1444.45 - 1589.25 1748.88 1904.72 2065.86 2239.92 2410.47 2583.88 2766.48 2948.68 3140.41 3336.02 3533.56 3735.04 3943.58 4155.16 4373.5 - 4599.99 4821.67 5056.14 5282.48 5527.77 5776.55 6014.5 6270.18 / - 2 2 20 1 204.22 326.73 473.72 661.21 873.83 1116.12 1364.12 1613.46 1872.82 2148.47 2441.69 2753.59 - 3065.82 3410.86 3756.48 4109.7 4512.35 4899.43 5300.34 5709.51 6142.6 6574.5 7029.67 7485.7 7968.18 8453.25 8959.46 9450.01 - 9983.05 10518.5 11067.35 11639.91 12219.8 12789.03 13402.09 14046.23 / - 2 3 1 1 197.88 197.67 197.72 197.92 198.22 198.6 199.07 199.61 200.21 200.88 201.61 202.4 - 203.26 204.17 205.14 206.17 207.26 208.41 209.61 210.87 212.19 213.56 214.99 216.48 218.02 219.62 221.27 222.98 - 224.75 226.57 228.45 230.38 232.37 234.41 236.5 238.66 / - 2 3 2 1 197.78 197.56 197.61 197.8 198.09 198.48 198.94 199.48 200.08 200.75 201.48 202.27 - 203.13 204.04 205.01 206.04 207.13 208.28 209.49 210.75 212.07 213.44 214.87 216.36 217.9 219.5 221.16 222.87 - 224.64 226.46 228.34 230.27 232.26 234.31 236.41 238.56 / - 2 3 3 1 197.61 197.36 197.39 197.57 197.87 198.25 198.71 199.25 199.85 200.52 201.25 202.04 - 202.89 203.81 204.78 205.81 206.9 208.05 209.26 210.52 211.84 213.21 214.65 216.14 217.68 219.29 220.94 222.66 - 224.43 226.25 228.13 230.07 232.06 234.11 236.21 238.37 / - 2 3 4 1 197.28 196.99 197 197.16 197.44 197.81 198.27 198.79 199.39 200.05 200.78 201.57 - 202.43 203.34 204.31 205.35 206.44 207.59 208.8 210.06 211.39 212.77 214.2 215.7 217.25 218.86 220.52 222.24 - 224.01 225.85 227.73 229.68 231.67 233.73 235.84 238 / - 2 3 5 1 196.09 195.29 195.06 195.13 195.36 195.7 196.13 196.65 197.24 197.91 198.65 199.45 - 200.32 201.25 202.25 203.31 204.43 205.61 206.85 208.15 209.5 210.92 212.4 213.93 215.52 217.17 218.88 220.64 - 222.45 224.32 226.24 228.21 230.25 232.34 234.48 236.69 / - 2 3 6 1 192.29 189.29 188.87 188.79 188.94 189.24 189.66 190.2 190.82 191.54 192.33 193.21 - 194.15 195.17 196.27 197.42 198.65 199.94 201.3 202.72 204.21 205.76 207.37 209.04 210.77 212.56 214.41 216.32 - 218.28 220.29 222.36 224.46 226.64 228.87 231.16 233.51 / - 2 3 7 1 179.48 174.85 173.9 173.56 173.68 174.04 174.58 175.28 176.1 177.05 178.11 179.26 - 180.51 181.83 183.25 184.74 186.3 187.95 189.65 191.43 193.24 195.15 197.12 199.13 201.19 203.32 205.52 207.76 - 210.06 212.41 214.79 217.24 219.74 222.29 224.9 227.55 / - 2 3 8 1 151.62 144.15 142.9 142.79 143.24 144.04 145.2 146.6 148.17 149.97 151.83 153.8 - 155.83 157.98 160.21 162.47 164.84 167.49 169.98 172.53 175.08 177.71 180.36 183.08 185.84 188.61 191.92 194.8 - 197.69 200.64 203.61 206.64 209.69 212.78 215.91 219.07 / - 2 3 9 1 101.68 95.99 96.78 98.48 100.58 102.96 105.61 108.36 111.32 114.33 117.53 120.74 - 124.14 127.49 131.02 134.47 138.08 141.6 145.3 148.96 152.68 156.49 160.13 164.04 167.73 171.44 175.63 179.41 - 183.24 187.06 190.9 195.28 199.15 203.06 206.98 210.93 / - 2 3 10 1 61.18 62.92 65.6 68.65 71.87 75.25 78.74 82.36 86.08 89.92 93.86 97.81 - 101.93 106.14 110.41 114.77 119.21 123.72 128.29 132.93 137.64 142.16 146.96 151.81 156.43 161.33 166.29 170.98 - 176.02 180.75 185.86 190.64 195.85 201.01 205.87 210.95 / - 2 3 11 1 47.1 50.5 53.86 57.38 61 64.73 68.58 72.56 76.66 80.88 85.23 89.69 - 94.27 99.02 104.41 109.53 114.77 120.05 125.37 130.72 136.31 141.81 147.38 153.01 158.71 164.46 170.23 176.05 - 181.96 187.92 193.94 199.63 205.72 211.83 217.99 223.74 / - 2 3 12 1 42.22 46.71 50.64 54.57 58.74 63.16 67.81 72.65 77.67 82.86 88.2 93.69 - 99.32 105.07 110.92 116.81 122.77 128.83 134.99 141.19 147.46 153.81 160.79 168.2 175.34 182.48 189.51 196.76 - 203.75 211.19 218.41 225.7 233.05 240.47 247.95 255.5 / - 2 3 13 1 37.33 43.19 48.64 54.28 60.15 66.2 72.16 78.47 85.2 92.13 99.23 106.5 - 113.92 121.47 129.16 136.98 144.93 152.69 160.13 169.39 177.78 186.2 193.49 201.98 210.55 218.56 227.27 236.08 - 246.38 254.28 264.08 274.29 284.16 294.04 303.95 314.21 / - 2 3 14 1 32.63 41.58 51.08 60.25 69.01 77.54 86.51 95.16 104.76 113.38 122.83 132.75 - 142.75 153.21 163.86 174.01 184.47 195.42 206.77 218.29 229.86 241.55 252.74 264.98 277.29 289.68 302.17 314.79 - 327.55 340.46 353.54 366.76 380.14 394.49 409.43 424.47 / - 2 3 15 1 32.99 48.44 62.28 75.4 88.09 100.65 113.22 126.89 140.31 152.87 167.62 182.65 - 197.22 210.94 226.58 242.22 258.54 274.37 291.4 308.65 325.41 343.43 361.81 380.54 399.59 418.88 438.02 456.76 - 476.86 497.29 518.06 539.18 560.67 583.49 607.17 631.19 / - 2 3 16 1 43.51 64.35 85.24 104.76 123.7 143.29 163.21 183.92 204.8 225.96 249.4 271.13 - 295.4 320.43 343.53 369.46 396.35 423.47 451.52 480.16 509.11 539.56 570.76 602.05 633.86 667.09 700.92 735.57 - 770.46 807.89 846.36 885.38 925.11 964.84 1005.25 1045.48 / - 2 3 17 1 60.94 93.1 125.04 155.9 186.61 218.28 251.43 286.41 322.13 359.89 398.34 439.98 - 481.1 525.68 571.43 617.89 665.17 716.02 768.66 822.91 879.06 936.24 995.37 1056.8 1119.22 1181.06 1239.27 1293.44 - 1336.86 1385.1 1433.44 1483.76 1536.07 1591.11 1644.7 1696.78 / - 2 3 18 1 89.27 141.07 190.88 242.81 296.61 353.21 413.32 477.32 545.39 616.9 691.92 771.83 - 856.03 944.91 1037.26 1131.66 1228.54 1316.84 1400.41 1488.34 1575.45 1665.87 1760.29 1855.6 1950.85 2048.11 2145.11 2247.33 - 2345.4 2450.6 2556.04 2662.53 2771.95 2879.57 2989.95 3110.24 / - 2 3 19 1 134.15 213.47 297.75 392.36 495.25 605.97 727.03 858.69 1000 1150.37 1300.87 1444.48 - 1589.91 1750.2 1906.86 2069.84 2246.43 2419.31 2595.82 2779.06 2964.14 3156.82 3354.17 3555.93 3759.78 3970.56 4184.44 4405.16 - 4633.94 4858.38 5095.16 5324.45 5572.17 5823.28 6064.46 6322.89 / - 2 3 20 1 204.01 326.61 471.15 657.88 872.86 1115.34 1359.16 1608.4 1874.32 2151.2 2445.75 2759.13 - 3072.95 3419.94 3767.32 4122.59 4527.44 4918.63 5324.92 5736.18 6176.62 6615.68 7076.62 7530.86 8018.69 8516.85 9019.35 9524.71 - 10053.47 10604.5 11160.1 11729.63 12325.92 12901.78 13521.84 14157.76 / - 2 4 1 1 199.71 199.49 199.54 199.73 200.03 200.41 200.88 201.41 202.02 202.69 203.42 204.21 - 205.06 205.98 206.95 207.98 209.07 210.22 211.43 212.69 214.01 215.39 216.82 218.31 219.86 221.46 223.12 224.83 - 226.6 228.43 230.31 232.25 234.24 236.29 238.39 240.55 / - 2 4 2 1 199.61 199.38 199.42 199.6 199.9 200.29 200.75 201.28 201.89 202.55 203.29 204.08 - 204.93 205.85 206.82 207.85 208.94 210.09 211.3 212.56 213.88 215.26 216.7 218.19 219.73 221.34 223 224.71 - 226.49 228.31 230.2 232.13 234.13 236.18 238.28 240.44 / - 2 4 3 1 199.43 199.17 199.19 199.38 199.67 200.05 200.51 201.04 201.65 202.31 203.04 203.84 - 204.69 205.61 206.58 207.61 208.7 209.85 211.06 212.33 213.65 215.03 216.46 217.96 219.51 221.11 222.77 224.49 - 226.27 228.1 229.98 231.92 233.92 235.97 238.08 240.25 / - 2 4 4 1 199.08 198.75 198.74 198.89 199.17 199.54 199.99 200.51 201.11 201.77 202.5 203.29 - 204.15 205.06 206.04 207.07 208.17 209.32 210.53 211.8 213.12 214.51 215.95 217.45 219 220.61 222.28 224 - 225.79 227.62 229.52 231.46 233.47 235.53 237.65 239.82 / - 2 4 5 1 197.74 196.85 196.58 196.65 196.87 197.21 197.64 198.16 198.75 199.42 200.16 200.96 - 201.83 202.77 203.77 204.83 205.95 207.13 208.38 209.68 211.04 212.46 213.95 215.48 217.08 218.74 220.45 222.22 - 224.05 225.94 227.88 229.88 231.93 234.04 236.21 238.43 / - 2 4 6 1 193.2 190.52 189.97 189.9 190.05 190.35 190.79 191.33 191.97 192.69 193.5 194.39 - 195.35 196.39 197.5 198.64 199.88 201.19 202.57 204.01 205.5 207.06 208.67 210.35 212.09 213.89 215.75 217.67 - 219.64 221.68 223.77 225.92 228.13 230.39 232.71 235.06 / - 2 4 7 1 180.43 175.45 174.51 174.18 174.3 174.67 175.22 175.93 176.77 177.73 178.81 179.9 - 181.16 182.5 183.91 185.41 187.14 188.79 190.52 192.32 194.17 196.1 198.09 200.12 202.22 204.38 206.6 208.86 - 211.18 213.55 215.98 218.47 221 223.56 226.19 228.87 / - 2 4 8 1 152 144.09 142.84 142.75 143.14 144.05 145.22 146.65 148.25 149.98 151.98 153.99 - 156.06 158.24 160.48 162.82 165.23 167.67 170.46 173.01 175.64 178.32 181.01 183.77 186.55 189.39 192.26 195.65 - 198.61 201.6 204.61 207.67 210.76 213.89 217.07 220.27 / - 2 4 9 1 101.15 96.01 96.8 98.54 100.66 103.07 105.74 108.51 111.42 114.52 117.65 120.97 - 124.28 127.78 131.23 134.87 138.51 142.07 145.8 149.51 153.26 156.94 160.8 164.55 168.48 172.23 176.03 180.21 - 184.04 187.93 191.82 196.25 200.17 204.14 208.1 212.1 / - 2 4 10 1 61.26 63.1 65.82 68.87 72.14 75.55 79.08 82.68 86.44 90.3 94.26 98.32 - 102.47 106.71 111.03 115.41 119.89 124.44 129.05 133.73 138.26 143.03 147.87 152.76 157.41 162.36 167.36 172.09 - 177.17 181.95 187.11 191.93 197.16 202.03 207.27 212.51 / - 2 4 11 1 47.16 50.66 54.04 57.58 61.24 65 68.89 72.9 77.04 81.31 85.69 90.2 - 94.82 99.55 104.99 110.23 115.51 120.84 126.21 131.61 137.08 142.8 148.42 154.1 159.84 165.64 171.46 177.34 - 183.3 189.32 195.04 201.14 207.29 213.45 219.23 225.48 / - 2 4 12 1 42.17 46.79 50.8 54.78 58.98 63.44 68.12 73 78.06 83.29 88.68 94.21 - 99.88 105.68 111.57 117.5 123.51 129.62 135.82 142.07 148.39 154.79 161.64 169.13 176.37 183.52 190.8 197.93 - 205.17 212.37 219.96 227.31 234.73 242.22 249.77 257.39 / - 2 4 13 1 37.26 43.2 48.74 54.5 60.38 66.48 72.48 78.83 85.6 92.57 99.73 107.04 - 114.5 122.11 129.84 137.71 145.71 153.52 161 170.32 178.75 187.22 194.57 203.11 211.73 219.79 228.57 237.43 - 247.79 255.45 265.34 275.43 285.69 295.57 305.76 315.93 / - 2 4 14 1 32.6 41.57 51.15 60.39 69.22 77.8 86.45 95.52 105.16 113.83 123.33 133.29 - 143.34 153.85 164.54 174.74 185.26 196.26 207.67 219.24 230.87 242.62 253.86 266.16 278.53 290.98 303.54 316.22 - 329.05 342.04 355.18 368.48 381.92 395.51 410.56 425.8 / - 2 4 15 1 32.99 48.47 62.34 75.52 88.27 101.2 113.5 126.75 140.67 153.35 168.09 183.16 - 197.78 211.57 227.3 243 259.33 275.22 292.29 309.59 326.92 344.46 362.88 381.68 400.8 420.18 439.4 458.23 - 478.41 498.91 519.76 540.95 562.52 584.47 608.27 632.52 / - 2 4 16 1 43.46 64.34 85.28 104.97 124.11 143.48 163.43 184.17 205.09 226.29 249.76 271.56 - 295.89 320.96 344.59 370.12 397.05 424.21 452.29 480.56 509.92 540.4 571.6 602.9 634.7 667.99 701.89 736.58 - 771.85 807.99 846.53 885.73 925.74 965.84 1006.06 1046.75 / - 2 4 17 1 60.86 93.05 125.04 155.96 186.72 218.43 251.59 286.59 322.65 360.04 398.51 440.15 - 481.3 525.88 571.63 617.17 665.28 716.05 768.61 822.98 879.08 936.24 995.35 1056.49 1119.17 1181.12 1240.15 1295.32 - 1340.36 1390.24 1440.29 1492.3 1546.23 1602.02 1659.05 1713.03 / - 2 4 18 1 89.13 140.93 190.82 242.97 296.73 353.36 413.56 477.36 545.32 616.77 691.81 771.34 - 855.35 944.01 1036.32 1130.82 1227.51 1316.66 1401.21 1489.71 1578.68 1669.24 1764.47 1860.76 1957.16 2055.43 2154.34 2258.34 - 2356.07 2462.5 2569.32 2677.07 2787.76 2898.63 3010.73 3132.42 / - 2 4 19 1 133.94 213.28 297.35 392.37 494.25 605.88 725.66 858.11 998.72 1149.23 1300.17 1444.4 - 1590.49 1751.45 1908.88 2072.73 2243.78 2426.52 2608.28 2791.57 2978.13 3174.67 3374.65 3579.06 3785.61 3996.39 4215.3 4435.6 - 4669.68 4893.86 5136.2 5368.72 5615.21 5872.51 6117.02 6378.41 / - 2 4 20 1 203.8 326.5 468.57 654.55 868.19 1108.79 1358.7 1604.76 1875.88 2153.98 2449.93 2764.85 - 3080.35 3429.37 3778.44 4135.93 4510.58 4940.13 5346.39 5763.51 6208.45 6649.65 7116.61 7582.64 8076.39 8580.95 9089.39 9600.71 - 10135.41 10692.97 11255.71 11832.46 12436.09 13019.34 13646.82 14290.48 / - 2 5 1 1 201.6 201.34 201.37 201.56 201.85 202.23 202.7 203.23 203.83 204.5 205.23 206.02 - 206.88 207.79 208.76 209.8 210.89 212.04 213.24 214.51 215.83 217.21 218.65 220.14 221.69 223.29 224.96 226.67 - 228.45 230.28 232.16 234.11 236.1 238.16 240.27 242.43 / - 2 5 2 1 201.5 201.23 201.25 201.43 201.72 202.1 202.56 203.09 203.7 204.36 205.09 205.89 - 206.74 207.65 208.63 209.66 210.75 211.9 213.11 214.38 215.7 217.08 218.52 220.01 221.56 223.17 224.83 226.55 - 228.33 230.16 232.05 233.99 235.99 238.04 240.16 242.32 / - 2 5 3 1 201.3 201.01 201.02 201.19 201.48 201.86 202.32 202.85 203.45 204.11 204.84 205.64 - 206.49 207.4 208.38 209.41 210.51 211.66 212.87 214.13 215.46 216.84 218.28 219.77 221.33 222.93 224.6 226.32 - 228.1 229.93 231.82 233.77 235.77 237.83 239.95 242.12 / - 2 5 4 1 200.9 200.53 200.49 200.64 200.9 201.27 201.72 202.24 202.83 203.5 204.22 205.02 - 205.87 206.78 207.76 208.8 209.89 211.05 212.26 213.53 214.86 216.24 217.69 219.19 220.75 222.36 224.04 225.77 - 227.55 229.39 231.29 233.25 235.26 237.33 239.45 241.63 / - 2 5 5 1 199.4 198.31 198.11 198.17 198.39 198.72 199.15 199.67 200.27 200.93 201.67 202.48 - 203.35 204.29 205.29 206.36 207.48 208.67 209.91 211.22 212.59 214.02 215.5 217.04 218.65 220.31 222.03 223.8 - 225.64 227.53 229.48 231.49 233.55 235.67 237.85 240.08 / - 2 5 6 1 194.6 191.72 191.11 191.03 191.18 191.49 191.92 192.46 193.1 193.83 194.64 195.53 - 196.5 197.54 198.65 199.83 201.08 202.4 203.78 205.23 206.75 208.29 209.92 211.62 213.38 215.21 217.09 219.02 - 221.01 223.06 225.16 227.32 229.54 231.81 234.15 236.54 / - 2 5 7 1 181.35 176.01 175.07 174.76 174.87 175.24 175.8 176.52 177.31 178.28 179.36 180.55 - 181.83 183.18 184.63 186.15 187.76 189.44 191.17 192.98 194.86 196.99 199.01 201.07 203.2 205.39 207.61 209.92 - 212.26 214.67 217.11 219.63 222.18 224.79 227.46 230.17 / - 2 5 8 1 152.34 143.96 142.77 142.58 143.05 143.97 145.17 146.63 148.26 150.02 151.94 154.11 - 156.22 158.45 160.72 163.11 165.55 168.03 170.59 173.46 176.14 178.83 181.59 184.4 187.22 190.1 193 196.47 - 199.47 202.49 205.56 208.67 211.8 214.98 218.19 221.44 / - 2 5 9 1 101.28 96.05 96.84 98.59 100.74 103.17 105.81 108.67 111.61 114.74 117.9 121.24 - 124.57 128.09 131.56 135.24 138.83 142.55 146.31 149.96 153.75 157.55 161.47 165.24 169.23 173.02 176.87 181.1 - 184.95 188.84 192.74 197.22 201.18 205.18 209.21 213.25 / - 2 5 10 1 61.43 63.32 66.02 69.11 72.4 75.83 79.4 83.08 86.88 90.78 94.77 98.87 - 103.05 107.33 111.67 116.09 120.6 125.18 129.82 134.34 139.09 143.91 148.78 153.44 158.4 163.39 168.14 173.21 - 178.33 183.15 188.35 193.22 198.5 203.41 208.63 213.95 / - 2 5 11 1 47.23 50.83 54.25 57.83 61.52 65.33 69.25 73.3 77.48 81.78 86.21 90.75 - 95.41 100.17 105.59 110.89 116.18 121.57 126.96 132.5 138.01 143.6 149.25 155.18 160.97 166.82 172.7 178.62 - 184.64 190.38 196.49 202.64 208.84 215.07 220.91 227.22 / - 2 5 12 1 42.13 46.89 50.97 55.01 59.26 63.75 68.47 73.39 78.49 83.76 89.18 94.75 - 100.46 106.31 112.23 118.2 124.26 130.41 136.65 142.95 149.31 155.76 162.48 170.04 177.38 184.73 191.92 199.27 - 206.58 213.84 221.18 228.58 236.04 243.58 251.18 258.85 / - 2 5 13 1 37.21 43.24 48.86 54.69 60.63 66.79 73.11 79.21 86.02 93.03 100.23 107.58 - 115.09 122.74 130.52 138.43 146.48 154.34 161.87 171.23 179.55 188.24 195.63 204.22 212.9 221.01 229.84 238.77 - 249.19 256.29 266.56 276.78 286.95 297.09 307.23 317.67 / - 2 5 14 1 32.36 41.62 51.25 60.56 69.44 78.07 86.76 95.89 105.56 114.27 123.82 133.83 - 143.93 154.49 165.23 175.48 186.04 197.1 208.55 220.19 231.88 243.67 254.97 267.32 279.76 292.28 304.9 317.65 - 330.55 343.6 356.81 370.18 383.69 397.36 412.08 427.44 / - 2 5 15 1 32.98 48.5 62.41 75.64 88.45 101.15 113.78 127.07 141.03 153.97 168.55 183.67 - 198.33 212.19 228.11 243.74 260.12 276.05 293.18 310.52 327.49 345.48 363.94 382.79 401.99 421.45 440.76 459.66 - 479.92 500.5 521.42 542.69 564.33 586.35 609.28 633.63 / - 2 5 16 1 43.41 64.33 85.42 105.06 124.25 143.66 163.66 184.42 205.36 226.61 250.1 271.98 - 296.36 321.48 344.71 370.73 397.73 424.93 453.03 481.85 510.72 541.19 572.4 603.72 635.51 668.8 702.81 737.54 - 772.95 808.49 847.13 886.48 926.31 966.38 1007.1 1047.55 / - 2 5 17 1 60.76 93.06 125.18 156.03 186.84 218.69 251.75 286.74 322.8 360.18 398.66 440.28 - 481.46 526.05 571.99 618.3 665.36 716.03 768.48 822.76 878.95 936.15 995.23 1055.53 1118.44 1181.02 1240.44 1296.97 - 1344.05 1395.43 1447.23 1501.72 1556.59 1612.89 1672.91 1728.75 / - 2 5 18 1 88.97 140.97 190.72 243.02 296.85 353.61 413.69 477.39 545.22 616.61 691.48 770.79 - 854.58 943.02 1035.21 1129.83 1225.65 1316.31 1401.49 1491.43 1581.01 1673.53 1769.72 1866.7 1964.64 2064.17 2162.79 2269.64 - 2368.7 2476.46 2584.67 2693.84 2806.03 2918.41 3032.23 3154.26 / - 2 5 19 1 133.73 213.1 296.93 391.64 494.29 604.45 725.3 856.07 997.75 1148.01 1300.55 1444.23 - 1590.93 1752.61 1910.85 2075.59 2247.61 2431.58 2615.87 2802.11 2991.75 3190.64 3394.28 3601.62 3808.84 4025.87 4246.84 4470.25 - 4707.03 4934.63 5179.6 5415.35 5664.7 5924.61 6172.6 6436.89 / - 2 5 20 1 203.58 326.39 465.24 651.21 862.96 1107.93 1353.01 1605.2 1865.43 2156.83 2454.26 2751.28 - 3088.04 3417.83 3790.17 4149.84 4526.84 4955.42 5367.68 5787.88 6234.54 6684.69 7160.32 7633.06 8125.76 8637 9159.81 9668.24 - 10218.79 10773 11353.59 11938.54 12536.33 13141.29 13776.8 14428.62 / - 2 6 1 1 203.71 203.32 203.3 203.45 203.73 204.1 204.55 205.08 205.67 206.34 207.06 207.85 - 208.71 209.62 210.59 211.62 212.71 213.86 215.07 216.34 217.66 219.04 220.48 221.97 223.53 225.13 226.8 228.52 - 230.3 232.13 234.02 235.97 237.97 240.03 242.14 244.31 / - 2 6 2 1 203.61 203.2 203.17 203.32 203.59 203.96 204.41 204.94 205.53 206.2 206.92 207.71 - 208.57 209.48 210.45 211.48 212.57 213.72 214.93 216.2 217.52 218.9 220.34 221.84 223.39 225 226.67 228.39 - 230.17 232.01 233.9 235.85 237.85 239.91 242.03 244.2 / - 2 6 3 1 203.41 202.98 202.93 203.08 203.35 203.71 204.16 204.68 205.28 205.94 206.67 207.46 - 208.31 209.22 210.2 211.23 212.32 213.47 214.68 215.95 217.27 218.66 220.1 221.59 223.15 224.76 226.43 228.15 - 229.94 231.77 233.67 235.62 237.63 239.69 241.81 243.99 / - 2 6 4 1 202.96 202.43 202.34 202.45 202.7 203.04 203.48 203.99 204.58 205.24 205.96 206.75 - 207.6 208.51 209.49 210.52 211.62 212.77 213.99 215.26 216.59 217.98 219.43 220.94 222.5 224.12 225.8 227.53 - 229.32 231.17 233.07 235.04 237.05 239.13 241.26 243.44 / - 2 6 5 1 201.31 200.01 199.72 199.73 199.91 200.23 200.64 201.15 201.74 202.4 203.14 203.95 - 204.83 205.77 206.78 207.85 208.98 210.18 211.44 212.76 214.14 215.57 217.07 218.62 220.22 221.89 223.62 225.4 - 227.24 229.14 231.1 233.11 235.18 237.31 239.5 241.74 / - 2 6 6 1 196.22 192.84 192.3 192.17 192.29 192.57 192.99 193.53 194.17 194.9 195.71 196.61 - 197.58 198.63 199.76 200.95 202.22 203.55 204.95 206.42 207.95 209.53 211.18 212.89 214.66 216.5 218.39 220.3 - 222.31 224.39 226.51 228.7 230.94 233.25 235.6 238 / - 2 6 7 1 182.53 176.66 175.63 175.3 175.4 175.77 176.34 177.01 177.88 178.86 179.96 181.16 - 182.45 183.82 185.29 186.84 188.47 190.16 191.92 193.77 195.68 197.62 199.66 201.75 204.13 206.34 208.6 210.94 - 213.32 215.74 218.22 220.77 223.36 225.99 228.68 231.42 / - 2 6 8 1 152.37 143.68 142.61 142.43 142.91 143.84 145.07 146.56 148.2 150.01 151.96 154 - 156.32 158.58 160.9 163.32 165.78 168.33 170.93 173.86 176.58 179.31 182.12 184.94 187.84 190.77 193.71 196.72 - 200.27 203.35 206.47 209.62 212.8 216.03 219.28 222.58 / - 2 6 9 1 100.97 96.09 96.88 98.59 100.83 103.31 105.99 108.87 111.83 114.98 118.15 121.51 - 124.86 128.41 131.89 135.6 139.21 143 146.68 150.52 154.33 158.19 162.15 165.96 170 173.85 177.72 182.01 - 185.9 189.85 193.77 197.75 202.23 206.25 210.33 214.41 / - 2 6 10 1 61.61 63.55 66.26 69.39 72.73 76.2 79.81 83.52 87.34 91.27 95.3 99.42 - 103.63 107.94 112.31 116.76 121.3 125.91 130.41 135.14 139.93 144.78 149.69 154.39 159.39 164.42 169.21 174.32 - 179.15 184.35 189.6 194.51 199.84 204.8 210.07 215.07 / - 2 6 11 1 47.31 51.01 54.48 58.1 61.83 65.68 69.64 73.73 77.94 82.28 86.74 91.32 - 96.01 100.81 106.19 111.61 116.95 122.37 127.81 133.39 138.95 144.58 150.27 156.03 161.86 167.74 173.68 179.64 - 185.66 191.77 197.93 204.14 210.4 216.26 222.58 228.95 / - 2 6 12 1 42.1 46.99 51.16 55.26 59.55 64.09 68.85 73.8 78.94 84.24 89.71 95.31 - 101.06 106.94 112.9 118.9 125 131.19 137.48 143.82 150.22 156.72 163.3 170.92 178.39 185.75 192.99 200.44 - 207.78 215.31 222.71 230.17 237.71 245.32 252.99 260.73 / - 2 6 13 1 37.18 43.29 49 54.9 60.9 67.11 73.4 79.61 86.46 93.51 100.74 108.13 - 115.68 123.36 131.19 139.15 147.24 155.42 162.72 172.13 180.68 189.24 196.68 205.33 214.06 223.61 231.11 240.09 - 250.58 257.73 267.43 277.76 288.44 298.66 308.8 319.27 / - 2 6 14 1 32.34 41.68 51.38 60.73 69.67 78.36 87.18 96.26 105.97 114.72 124.3 134.36 - 144.5 155.11 165.9 176.2 186.81 197.92 209.42 221.1 232.86 244.71 256.06 268.47 280.96 293.55 306.24 319.06 - 332.02 345.14 358.42 371.86 385.44 399.18 413.09 428.56 / - 2 6 15 1 32.98 48.55 62.51 75.77 88.64 101.69 114.06 127.89 141.38 154.68 169.01 184.16 - 198.88 212.79 228.77 244.46 260.89 276.87 294.04 311.43 328.6 346.47 364.98 383.87 403.13 422.67 442.07 461.91 - 481.39 502.05 523.05 544.39 566.1 588.19 610.67 633.23 / - 2 6 16 1 43.35 64.3 85.57 105.15 124.39 143.85 163.88 184.66 205.64 226.92 250.44 272.36 - 296.82 321.97 346.9 371.32 398.37 425.61 453.75 482.66 511.47 541.95 573.17 604.48 636.47 669.53 703.64 738.45 - 773.99 809.44 847.08 886.5 926.53 966.93 1007.52 1048.21 / - 2 6 17 1 60.66 92.99 125.17 156.08 187.02 219.12 251.91 286.89 322.94 360.3 398.79 440.38 - 481.58 526.17 572.17 618.99 665.38 715.93 768.45 822.47 878.63 935.89 994.98 1054.84 1117.98 1180.47 1241.14 1298.41 - 1347.32 1400.62 1454.24 1510.45 1567.11 1625.31 1687.01 1745.84 / - 2 6 18 1 88.81 140.99 190.64 243.06 297.06 353.78 413.81 477.61 545.12 616.41 691.12 770.21 - 853.75 941.93 1033.94 1128.67 1224.78 1314.92 1400.83 1491.15 1582.04 1675.28 1772.33 1870.51 1969.7 2070.29 2171.35 2277.75 - 2379.91 2488.93 2598.4 2709.2 2822.81 2936.63 3052.04 3175.4 / - 2 6 19 1 133.52 212.9 296.54 391.59 494.29 604.37 723.85 855.2 996.74 1146.73 1300.31 1439.64 - 1591.28 1745.67 1912.76 2078.46 2251.41 2436.56 2623.31 2809.73 3002.41 3204.04 3409.91 3620.43 3833.37 4055.07 4275.24 4504.97 - 4745 4976.18 5220.79 5463.65 5716.5 5975.06 6231.2 6498.84 / - 2 6 20 1 203.35 326.3 461.72 648.23 861.94 1101.29 1352.41 1602.05 1867 2145.42 2441.74 2757.55 - 3096.05 3427.77 3802.47 4166.25 4543.86 4978.8 5390.02 5813.07 6258.56 6715.58 7194.07 7677.94 8180.62 8699.08 9220.07 9745.15 - 10302.84 10864.86 11442.81 12047 12653.89 13263 13911.67 14572.38 / - 2 7 1 1 205.83 205.31 205.23 205.35 205.61 205.96 206.41 206.92 207.52 208.17 208.9 209.68 - 210.53 211.44 212.42 213.45 214.54 215.69 216.89 218.16 219.48 220.87 222.3 223.8 225.36 226.97 228.63 230.36 - 232.14 233.98 235.87 237.82 239.83 241.89 244.01 246.19 / - 2 7 2 1 205.72 205.18 205.09 205.21 205.47 205.82 206.26 206.78 207.37 208.03 208.75 209.54 - 210.39 211.3 212.27 213.3 214.39 215.54 216.75 218.02 219.34 220.72 222.16 223.66 225.22 226.83 228.5 230.22 - 232.01 233.85 235.74 237.69 239.7 241.77 243.89 246.07 / - 2 7 3 1 205.51 204.95 204.85 204.96 205.21 205.57 206 206.52 207.11 207.77 208.49 209.27 - 210.12 211.04 212.01 213.04 214.13 215.28 216.49 217.76 219.08 220.47 221.91 223.41 224.97 226.58 228.25 229.98 - 231.76 233.61 235.5 237.46 239.47 241.54 243.66 245.85 / - 2 7 4 1 205.01 204.32 204.15 204.21 204.43 204.76 205.18 205.69 206.27 206.92 207.64 208.42 - 209.27 210.18 211.16 212.19 213.29 214.44 215.66 216.93 218.27 219.66 221.11 222.62 224.19 225.81 227.49 229.23 - 231.03 232.88 234.8 236.77 238.79 240.87 243.01 245.21 / - 2 7 5 1 203.21 201.61 201.26 201.23 201.39 201.68 202.09 202.58 203.17 203.83 204.56 205.37 - 206.24 207.18 208.19 209.26 210.4 211.6 212.86 214.18 215.57 217.01 218.51 220.08 221.7 223.39 225.13 226.93 - 228.79 230.71 232.69 234.72 236.81 238.95 241.14 243.4 / - 2 7 6 1 197.83 194.07 193.36 193.21 193.32 193.61 194.03 194.57 195.21 195.94 196.77 197.67 - 198.65 199.72 200.81 202.01 203.29 204.63 206.04 207.52 209.05 210.66 212.32 214.05 215.85 217.7 219.61 221.59 - 223.63 225.71 227.85 230.06 232.29 234.6 236.97 239.4 / - 2 7 7 1 183.67 177.2 176.05 175.76 175.86 176.22 176.74 177.47 178.35 179.35 180.46 181.67 - 182.98 184.38 185.88 187.45 189.11 190.81 192.61 194.48 196.41 198.4 200.46 202.58 204.76 206.99 209.28 211.89 - 214.3 216.76 219.28 221.85 224.48 227.14 229.86 232.64 / - 2 7 8 1 152.89 143.47 142.38 142.19 142.68 143.63 144.88 146.4 148.07 149.92 151.9 153.97 - 156.17 158.63 160.99 163.45 165.98 168.54 171.19 173.86 176.94 179.72 182.57 185.45 188.38 191.37 194.35 197.41 - 200.48 204.16 207.33 210.51 213.76 217.02 220.33 223.68 / - 2 7 9 1 101.16 96.16 96.93 98.68 100.93 103.48 106.17 109.02 112.05 115.14 118.41 121.69 - 125.16 128.6 132.23 135.8 139.59 143.4 147.13 151.05 154.92 158.82 162.64 166.66 170.55 174.66 178.56 182.5 - 186.9 190.86 194.84 198.87 203.41 207.45 211.53 215.62 / - 2 7 10 1 61.78 63.75 66.52 69.71 73.09 76.59 80.22 83.96 87.81 91.76 95.81 99.97 - 104.21 108.54 112.94 117.43 121.85 126.48 131.18 135.94 140.77 145.65 150.35 155.34 160.38 165.17 170.28 175.43 - 180.31 185.55 190.48 195.81 200.79 206.2 211.51 216.57 / - 2 7 11 1 47.39 51.2 54.73 58.39 62.17 66.05 70.04 74.16 78.41 82.78 87.27 91.88 - 96.61 101.44 106.7 112.27 117.62 123.1 128.66 134.13 139.89 145.56 151.3 157.11 162.98 168.91 174.91 180.92 - 186.99 193.15 199.37 205.65 211.56 217.87 224.25 230.23 / - 2 7 12 1 42.09 47.1 51.36 55.53 59.87 64.44 69.23 74.22 79.39 84.73 90.23 95.87 - 101.66 107.58 113.57 119.61 125.75 131.98 138.31 144.68 151.14 157.68 164.3 171.59 179.34 186.8 194.26 201.59 - 209.17 216.46 224.23 231.77 239.37 247.05 254.8 262.61 / - 2 7 13 1 37.16 43.36 49.16 55.14 61.19 67.44 73.84 80.01 86.89 93.98 101.25 108.69 - 116.27 124 131.86 139.86 147.99 156.22 163.57 173.02 181.62 190.23 197.73 206.42 215.21 224.09 232.36 241.41 - 251.96 259.15 268.27 279.01 289.5 299.95 310.36 320.77 / - 2 7 14 1 32.34 41.76 51.57 60.92 69.91 78.64 87.98 96.63 106.38 114.91 124.79 134.89 - 145.07 155.72 166.55 176.9 187.46 198.72 210.26 222 233.81 245.72 257.12 269.59 282.15 294.8 307.56 320.44 - 333.47 346.66 360.01 373.52 387.16 400.98 414.97 429.14 / - 2 7 15 1 32.98 48.61 62.77 75.91 88.82 102.14 114.47 128.39 141.72 155.07 169.45 184.64 - 199.4 213.36 229.4 245.15 261.64 277.68 294.89 312.4 329.52 347.44 365.99 384.91 404.21 423.84 442.76 463.27 - 482.81 503.55 524.62 546.03 567.81 589.97 612.52 634.07 / - 2 7 16 1 43.3 64.28 85.6 105.24 124.51 144.02 164.08 184.9 205.9 227.21 250.77 272.71 - 297.24 322.44 347.41 371.87 398.97 426.25 454.42 483.41 512.18 542.66 573.88 605.19 637.46 670.17 704.29 739.22 - 774.83 810.3 847.41 886.37 926.55 967.22 1008.1 1049.23 / - 2 7 17 1 60.55 92.9 125.17 156.13 187.54 219.25 252.22 287.04 323.07 360.41 398.88 440.46 - 481.64 526.25 572.23 619.03 665.35 715.77 768.15 822.09 878.1 935.44 994.57 1054.43 1116.72 1180.18 1241.3 1298.13 - 1350.76 1405.99 1461.28 1519.27 1578.69 1637.87 1701.22 1762.48 / - 2 7 18 1 88.64 140.83 190.56 243.08 297.15 353.89 413.96 477.62 545 616.18 690.73 769.59 - 852.85 940.77 1032.52 1127.32 1222.75 1316 1401.67 1492.97 1584.99 1679.37 1777.53 1876.86 1977.35 2078.79 2181.77 2289.49 - 2393.27 2502.98 2614.74 2727.14 2841.36 2957.89 3075.07 3199.91 / - 2 7 19 1 133.3 212.71 296.03 390.66 493.16 604.29 723.52 853.07 995.71 1145.37 1299.03 1438.98 - 1592.99 1746.57 1914.54 2081.23 2255.22 2441.48 2629.5 2817.17 3011.47 3213.14 3423.29 3637.81 3854.89 4081.5 4304.85 4538.31 - 4778.87 5017.33 5266 5512.69 5769.35 6031.71 6291.76 6563.2 / - 2 7 20 1 203.12 326.22 458.06 644.99 856.68 1094 1344.58 1599.53 1868.6 2148.42 2446.39 2764.08 - 3104.41 3438.25 3815.37 4182.36 4561.76 4959.8 5413.51 5839.61 6288.08 6744.52 7228.33 7725.37 8231.53 8750.36 9287.14 9820.71 - 10376.21 10956.89 11543.78 12157.3 12773.92 13392.71 14036.27 14721.24 / - 2 8 1 1 207.94 207.29 207.15 207.25 207.48 207.83 208.26 208.77 209.35 210.01 210.73 211.51 - 212.36 213.27 214.23 215.26 216.35 217.5 218.71 219.98 221.3 222.68 224.12 225.62 227.18 228.79 230.46 232.19 - 233.97 235.81 237.71 239.67 241.68 243.75 245.87 248.05 / - 2 8 2 1 207.83 207.16 207.02 207.11 207.34 207.68 208.11 208.62 209.21 209.86 210.58 211.36 - 212.21 213.11 214.08 215.11 216.2 217.35 218.56 219.83 221.15 222.54 223.98 225.48 227.03 228.65 230.32 232.05 - 233.83 235.68 237.58 239.53 241.54 243.61 245.74 247.92 / - 2 8 3 1 207.62 206.92 206.77 206.85 207.08 207.42 207.85 208.36 208.94 209.59 210.31 211.09 - 211.94 212.85 213.81 214.85 215.94 217.09 218.29 219.56 220.89 222.27 223.72 225.22 226.78 228.39 230.06 231.8 - 233.58 235.43 237.33 239.29 241.3 243.38 245.51 247.69 / - 2 8 4 1 207.03 206.18 205.94 205.97 206.16 206.47 206.88 207.37 207.94 208.59 209.3 210.08 - 210.93 211.84 212.82 213.85 214.95 216.1 217.32 218.6 219.93 221.33 222.78 224.3 225.87 227.5 229.18 230.93 - 232.73 234.59 236.51 238.48 240.51 242.6 244.75 246.95 / - 2 8 5 1 205.06 203.21 202.69 202.66 202.81 203.1 203.5 204 204.59 205.25 205.99 206.8 - 207.69 208.63 209.64 210.72 211.86 213.06 214.29 215.61 217 218.44 219.95 221.52 223.15 224.84 226.59 228.4 - 230.27 232.19 234.18 236.22 238.32 240.48 242.7 244.97 / - 2 8 6 1 199.4 195.27 194.43 194.23 194.31 194.58 194.99 195.52 196.16 196.89 197.71 198.62 - 199.61 200.68 201.82 203.04 204.33 205.68 207.11 208.6 210.16 211.74 213.42 215.16 216.97 218.84 220.77 222.76 - 224.81 226.92 229.09 231.31 233.59 235.94 238.33 240.79 / - 2 8 7 1 183.92 177.78 176.45 176.13 176.22 176.53 177.1 177.84 178.73 179.75 180.86 182.09 - 183.43 184.86 186.38 187.98 189.63 191.39 193.22 195.12 197.08 199.08 201.18 203.33 205.55 207.8 210.13 212.52 - 214.94 217.73 220.29 222.88 225.54 228.24 231.01 233.81 / - 2 8 8 1 152.84 143.19 142.07 141.87 142.37 143.34 144.61 146.14 147.84 149.72 151.74 153.85 - 156.08 158.6 160.99 163.49 166.07 168.67 171.37 174.08 176.89 180.04 182.95 185.87 188.86 191.89 194.93 198.04 - 201.15 204.34 208.1 211.36 214.65 217.97 221.33 224.73 / - 2 8 9 1 100.82 96.15 96.97 98.81 101.08 103.6 106.36 109.22 112.27 115.38 118.66 121.96 - 125.45 128.91 132.57 136.15 139.97 143.68 147.56 151.49 155.33 159.32 163.3 167.38 171.31 175.45 179.43 183.43 - 187.85 191.88 195.95 200.01 204.08 208.74 212.85 217.01 / - 2 8 10 1 61.95 64 66.83 70.05 73.44 76.98 80.63 84.39 88.27 92.25 96.33 100.51 - 104.69 109.04 113.47 117.97 122.55 127.21 131.94 136.73 141.6 146.29 151.26 156.28 161.37 166.2 171.35 176.55 - 181.47 186.76 191.73 197.11 202.13 207.6 212.68 218.08 / - 2 8 11 1 47.47 51.41 55 58.7 62.5 66.41 70.44 74.59 78.87 83.27 87.8 92.44 - 97.2 102.07 107.29 112.92 118.38 123.86 129.41 135.02 140.65 146.54 152.33 158.18 164.1 170.09 176.13 182.2 - 188.32 194.54 200.82 206.78 213.11 219.49 225.93 231.97 / - 2 8 12 1 42.09 47.24 51.6 55.82 60.18 64.79 69.61 74.63 79.84 85.21 90.75 96.43 - 102.26 108.21 114.24 120.32 126.5 132.77 139.15 145.55 152.05 158.63 165.3 172.45 180.28 187.85 195.31 202.83 - 210.35 217.91 225.43 233.01 240.66 248.39 256.19 264.06 / - 2 8 13 1 37.14 43.45 49.35 55.38 61.48 67.77 74.25 80.43 87.33 94.45 101.76 109.23 - 116.86 124.63 132.53 140.57 148.74 157.02 164.41 173.9 182.55 191.21 198.75 207.5 216.34 225.28 233.6 242.7 - 253.32 260.57 269.74 279.89 290.49 301.14 311.97 322.39 / - 2 8 14 1 32.34 41.84 51.73 61.11 70.15 78.92 88.15 97 106.78 116.17 125.28 135.42 - 145.64 156.33 167.2 177.59 188.3 199.5 211.09 222.87 234.73 246.7 258.16 270.69 283.31 296.03 308.85 321.8 - 334.9 348.16 361.58 375.14 388.86 402.75 416.82 431.06 / - 2 8 15 1 32.97 48.64 62.85 76.04 89 102.36 114.75 128.85 142.05 156.03 169.87 185.1 - 198.97 213.92 230 245.81 262.36 278.45 295.71 313.22 330.72 348.37 366.96 385.9 405.24 424.93 443.95 463.87 - 484.17 504.98 526.13 547.62 569.47 591.69 614.3 635.9 / - 2 8 16 1 43.25 64.25 85.62 105.31 124.63 144.18 164.27 185.11 206.14 227.47 251.07 273.04 - 297.6 322.86 347.87 372.37 399.53 427 455.04 484.12 512.83 543.32 574.53 605.84 637.82 670.74 704.79 739.78 - 775.5 811.02 848.16 886.02 926.31 967.23 1007.9 1049.68 / - 2 8 17 1 60.44 92.89 125.14 156.51 187.64 219.38 252.68 287.18 323.19 360.51 398.95 440.5 - 481.65 526.27 572.24 619.01 665.26 715.55 767.78 821.56 877.41 934.74 993.95 1053.97 1115.14 1178.97 1241.27 1300 - 1353.92 1410.78 1468.28 1528.13 1589.41 1650.59 1716.44 1778.57 / - 2 8 18 1 88.48 140.82 190.43 243.12 297.23 354 414.05 477.61 544.94 616.01 690.31 768.92 - 851.9 939.52 1031 1125.71 1221.49 1315.23 1403.5 1494.47 1587.73 1684.24 1782.87 1883.46 1985.27 2088.18 2192.63 2301.14 - 2407.24 2518.54 2631.89 2745.96 2861.94 2980.27 3099.31 3225.7 / - 2 8 19 1 133.09 212.52 295.52 389.71 493.16 602.77 723.08 852.42 991.36 1143.93 1292.5 1438.26 - 1592.94 1747.33 1916.24 2085.39 2258.93 2437.8 2635.83 2824.7 3023.92 3223.57 3434.65 3651.55 3871.68 4099.5 4330.05 4568.09 - 4813.09 5056.2 5309.37 5556.88 5821.81 6088.27 6348.08 6628.82 / - 2 8 20 1 202.89 326.18 452.54 641.83 851.99 1093.11 1343.89 1594.84 1865 2151.56 2451.27 2770.91 - 3090.61 3449.34 3798.27 4198.41 4580.64 4981.52 5438.36 5867.67 6319.33 6775.21 7264.38 7765.85 8270.15 8803.73 9349.65 9883.21 - 10457.15 11036.83 11644.28 12256.81 12895.08 13524.5 14178.79 14874.63 / - 2 9 1 1 210.05 209.27 209.08 209.14 209.36 209.69 210.11 210.61 211.19 211.84 212.55 213.33 - 214.18 215.08 216.05 217.08 218.17 219.31 220.52 221.79 223.11 224.49 225.94 227.43 228.99 230.61 232.28 234.01 - 235.8 237.64 239.54 241.5 243.52 245.59 247.72 249.9 / - 2 9 2 1 209.93 209.13 208.94 209 209.21 209.54 209.96 210.46 211.04 211.68 212.4 213.18 - 214.02 214.93 215.89 216.92 218.01 219.16 220.37 221.63 222.96 224.34 225.78 227.28 228.84 230.46 232.13 233.86 - 235.65 237.5 239.4 241.36 243.38 245.45 247.58 249.77 / - 2 9 3 1 209.71 208.89 208.68 208.73 208.94 209.27 209.69 210.19 210.76 211.41 212.12 212.9 - 213.74 214.65 215.62 216.65 217.73 218.88 220.09 221.36 222.69 224.07 225.51 227.02 228.58 230.19 231.87 233.6 - 235.39 237.24 239.15 241.11 243.13 245.21 247.34 249.53 / - 2 9 4 1 209.03 208.03 207.65 207.66 207.84 208.14 208.55 209.04 209.61 210.25 210.96 211.74 - 212.59 213.5 214.47 215.51 216.61 217.76 218.98 220.26 221.6 223 224.45 225.97 227.54 229.18 230.87 232.62 - 234.43 236.29 238.22 240.2 242.24 244.33 246.49 248.7 / - 2 9 5 1 206.89 204.77 204.12 204.04 204.16 204.43 204.82 205.31 205.89 206.55 207.29 208.09 - 208.97 209.92 210.94 212.02 213.17 214.38 215.65 216.99 218.39 219.85 221.37 222.96 224.6 226.31 228.07 229.89 - 231.74 233.68 235.67 237.72 239.83 242 244.23 246.52 / - 2 9 6 1 200.41 196.19 195.44 195.19 195.23 195.47 195.87 196.39 197.03 197.76 198.59 199.5 - 200.49 201.57 202.72 203.95 205.25 206.61 208.05 209.56 211.13 212.77 214.47 216.23 218.06 219.95 221.9 223.88 - 225.95 228.08 230.27 232.52 234.82 237.18 239.6 242.08 / - 2 9 7 1 184.93 178.15 176.75 176.4 176.42 176.78 177.36 178.11 179.01 180.03 181.17 182.42 - 183.78 185.24 186.78 188.41 190.09 191.87 193.73 195.66 197.63 199.7 201.82 204.01 206.26 208.54 210.91 213.33 - 215.8 218.32 220.9 223.85 226.55 229.29 232.08 234.93 / - 2 9 8 1 153.26 142.86 141.55 141.49 142.02 143.02 144.31 145.86 147.6 149.48 151.52 153.68 - 155.92 158.29 160.9 163.45 166.07 168.71 171.46 174.22 177.07 179.97 183.24 186.24 189.25 192.33 195.42 198.59 - 201.76 204.99 208.83 212.14 215.49 218.86 222.28 225.73 / - 2 9 9 1 100.85 96.23 97.09 98.95 101.24 103.77 106.55 109.42 112.43 115.61 118.84 122.24 - 125.75 129.22 132.9 136.51 140.35 144.09 147.99 151.81 155.82 159.82 163.88 167.87 172.05 176.05 180.28 184.32 - 188.39 192.92 197.01 201.14 205.31 210 214.18 218.41 / - 2 9 10 1 62.03 64.27 67.15 70.38 73.8 77.35 81 84.79 88.68 92.68 96.78 100.97 - 105.26 109.64 114.1 118.63 123.23 127.93 132.69 137.52 142.42 147.16 152.16 157.22 162.06 167.23 172.42 177.35 - 182.63 187.97 192.99 198.42 203.49 209.01 214.14 219.59 / - 2 9 11 1 47.56 51.64 55.28 59.01 62.84 66.78 70.84 75.02 79.33 83.77 88.32 93 - 97.8 102.7 107.79 113.57 119.04 124.62 130.25 135.9 141.58 147.33 153.35 159.25 165.22 171.26 177.36 183.48 - 189.65 195.93 201.91 208.28 214.67 221.11 227.18 233.71 / - 2 9 12 1 42.11 47.4 51.84 56.11 60.5 65.14 69.99 75.05 80.29 85.7 91.27 96.99 - 102.85 108.84 114.91 121.03 127.25 133.57 139.98 146.42 152.96 159.59 166.3 173.3 181 188.88 196.35 204.06 - 211.55 219.14 226.94 234.59 242.31 250.11 257.98 265.93 / - 2 9 13 1 37.14 43.56 49.54 55.62 61.77 68.1 74.63 80.89 87.76 94.92 102.26 109.78 - 117.44 125.25 133.2 141.28 149.49 157.81 165.24 174.78 183.48 192.18 199.77 208.57 217.47 226.45 234.83 243.99 - 254.67 261.97 271.2 280.71 291.4 302.55 313.29 323.99 / - 2 9 14 1 32.36 41.92 51.85 61.29 70.39 79.2 88.62 97.35 107.17 116.73 125.75 135.93 - 146.2 156.93 167.83 178.27 189.05 200.27 211.9 223.73 235.63 247.64 259.16 271.75 284.44 297.23 310.12 323.14 - 336.3 349.63 363.12 376.74 390.53 404.49 418.63 432.95 / - 2 9 15 1 32.86 48.67 62.92 76.17 89.18 102.58 115.54 129.14 142.38 156.54 170.29 185.55 - 199.46 214.46 230.58 246.5 263.04 279.19 296.49 314.12 331.65 349.27 367.88 386.86 406.22 425.95 445.05 465.06 - 485.45 506.34 527.57 549.13 571.04 593.33 616 637.66 / - 2 9 16 1 43.19 64.21 85.64 105.38 124.74 144.33 164.45 185.31 206.37 227.72 251.33 273.34 - 297.92 323.24 347.2 372.82 400.01 427.61 455.61 484.71 513.43 543.91 575.11 606.41 638.77 671.24 705.19 740.1 - 775.92 811.66 848.72 886.61 925.8 966.2 1007.78 1049.58 / - 2 9 17 1 60.34 92.79 125.1 156.54 187.71 219.5 252.8 287.3 323.29 360.58 398.98 440.51 - 481.62 526.23 572.19 618.94 665.11 715.25 767.33 820.93 876.59 933.78 993.06 1053.48 1114.41 1177.4 1240.66 1300.03 - 1357.13 1415.73 1475.43 1536.8 1599.51 1661.9 1728.69 1792.3 / - 2 9 18 1 88.31 140.65 190.33 243.09 297.3 354.08 414.15 477.6 544.79 615.69 689.86 768.21 - 850.87 938.18 1029.35 1123.84 1219.99 1314.22 1403.27 1494.52 1589.98 1688.33 1787.13 1889.71 1992.85 2097.91 2204.04 2314.07 - 2422.27 2534.9 2650.07 2765.89 2883.69 3003.97 3125 3253.05 / - 2 9 19 1 132.86 212.33 294.69 389.65 491.98 602.7 720.85 850.78 990.23 1138 1291.01 1437.46 - 1592.85 1748.09 1918.91 2089.45 2262.72 2442.81 2642.12 2832.41 3033.1 3233.09 3446.44 3663.4 3889.13 4117.51 4350.5 4589 - 4841.83 5086.61 5348.35 5600.93 5871.21 6142.41 6407.1 6693.33 / - 2 9 20 1 202.67 326.17 452.44 636.7 847.36 1085.84 1337.68 1589.53 1860.52 2143 2456.53 2778.14 - 3099.96 3461.09 3812.62 4215.55 4600.69 5004.58 5418.64 5897.5 6352.54 6812.15 7300.64 7807.56 8318.73 8848.27 9398.93 9948.51 - 10522.2 11122.96 11741.53 12365.34 13004.41 13657.13 14322.87 15014.81 / - 2 10 1 1 212.12 211.23 210.99 211.03 211.23 211.54 211.95 212.45 213.02 213.66 214.37 215.15 - 215.99 216.89 217.86 218.88 219.97 221.12 222.32 223.59 224.91 226.3 227.74 229.24 230.8 232.41 234.09 235.82 - 237.61 239.46 241.36 243.32 245.34 247.42 249.55 251.74 / - 2 10 2 1 212 211.1 210.85 210.88 211.07 211.39 211.8 212.29 212.86 213.5 214.21 214.99 - 215.83 216.73 217.7 218.72 219.81 220.96 222.16 223.43 224.76 226.14 227.58 229.08 230.64 232.26 233.93 235.67 - 237.46 239.31 241.21 243.18 245.2 247.27 249.41 251.6 / - 2 10 3 1 211.79 210.85 210.58 210.6 210.78 211.09 211.49 211.98 212.55 213.19 213.9 214.67 - 215.51 216.41 217.38 218.41 219.49 220.64 221.85 223.12 224.44 225.83 227.27 228.78 230.34 231.96 233.64 235.37 - 237.16 239.02 240.93 242.89 244.92 247 249.14 251.33 / - 2 10 4 1 211 209.86 209.38 209.34 209.49 209.77 210.16 210.64 211.2 211.83 212.54 213.32 - 214.17 215.08 216.05 217.09 218.19 219.36 220.58 221.86 223.21 224.61 226.08 227.6 229.18 230.82 232.52 234.27 - 236.08 237.95 239.88 241.87 243.92 246.02 248.18 250.4 / - 2 10 5 1 208.64 206.06 205.53 205.39 205.48 205.73 206.1 206.58 207.15 207.81 208.54 209.35 - 210.23 211.18 212.2 213.29 214.44 215.66 216.94 218.29 219.69 221.16 222.68 224.27 225.92 227.63 229.41 231.24 - 233.13 235.08 237.09 239.16 241.29 243.48 245.73 248.03 / - 2 10 6 1 201.84 197.23 196.25 195.98 196.01 196.24 196.64 197.17 197.8 198.54 199.38 200.3 - 201.31 202.4 203.56 204.8 206.12 207.5 208.91 210.43 212.02 213.67 215.4 217.18 219.03 220.94 222.91 224.95 - 227.04 229.19 231.41 233.68 235.98 238.37 240.81 243.32 / - 2 10 7 1 185.87 178.41 176.94 176.55 176.56 176.92 177.49 178.25 179.15 180.2 181.34 182.62 - 184 185.48 187.06 188.69 190.43 192.25 194.14 196.1 198.11 200.21 202.37 204.59 206.86 209.2 211.6 214.06 - 216.58 219.13 221.75 224.42 227.14 230.27 233.11 235.99 / - 2 10 8 1 153.1 142.5 141.19 141.14 141.68 142.69 144.01 145.58 147.34 149.25 151.31 153.49 - 155.76 158.15 160.64 163.37 166.02 168.7 171.47 174.31 177.17 180.12 183.44 186.5 189.56 192.69 195.84 199.06 - 202.31 205.58 208.91 212.86 216.27 219.69 223.17 226.68 / - 2 10 9 1 100.47 96.35 97.22 99.09 101.39 103.94 106.68 109.63 112.65 115.85 119.09 122.51 - 125.93 129.54 133.1 136.87 140.57 144.5 148.43 152.28 156.32 160.35 164.43 168.44 172.69 176.8 181.11 185.21 - 189.34 193.93 198.1 202.29 206.51 210.74 215.55 219.82 / - 2 10 10 1 62.22 64.58 67.48 70.73 74.15 77.73 81.41 85.22 89.14 93.16 97.29 101.51 - 105.82 110.23 114.72 119.28 123.92 128.65 133.44 138.12 143.04 148.02 153.06 158.17 163.05 168.25 173.49 178.46 - 183.79 188.83 194.24 199.34 204.85 210 215.61 221.11 / - 2 10 11 1 47.68 51.89 55.57 59.33 63.18 67.15 71.24 75.45 79.79 84.26 88.85 93.56 - 98.39 103.33 108.37 114.2 119.79 125.32 130.99 136.68 142.5 148.3 154.16 160.1 166.1 172.17 178.3 184.49 - 190.71 196.98 203.35 209.78 216.23 222.73 228.86 235.46 / - 2 10 12 1 42.15 47.59 52.09 56.4 60.83 65.49 70.38 75.46 80.74 86.18 91.79 97.54 - 103.44 109.47 115.58 121.74 128 134.35 140.81 147.29 153.87 160.54 167.29 174.13 181.89 189.71 197.43 205.15 - 212.74 220.37 228.12 235.82 243.96 251.83 259.78 267.8 / - 2 10 13 1 37.16 43.7 49.74 55.87 62.05 68.42 74.99 81.29 88.19 95.39 102.77 110.31 - 118.02 125.86 133.85 141.98 150.24 158.53 166.07 175.64 184.39 193.14 201.5 209.63 218.58 227.62 236.04 245.25 - 256 263.35 272.64 282.22 292.26 303.53 314.49 325.35 / - 2 10 14 1 32.39 42.01 51.98 61.48 70.62 79.48 88.54 97.71 107.56 117.15 126.21 136.43 - 146.74 157.52 168.46 178.94 190.03 201.02 212.69 224.56 236.5 248.56 260.12 272.76 285.54 298.39 311.35 324.44 - 337.67 351.06 364.62 378.31 392.17 406.2 420.41 434.8 / - 2 10 15 1 32.85 48.7 63 76.3 89.53 102.79 115.45 129.41 142.69 156.89 170.69 185.99 - 199.93 214.97 231.13 247.13 263.67 279.88 297.23 314.9 332.46 350.11 368.75 387.75 407.13 426.89 446.05 466.85 - 486.63 507.61 528.91 550.54 572.52 594.88 617.61 639.31 / - 2 10 16 1 43.13 64.17 85.65 105.44 124.84 144.59 164.62 185.49 206.57 227.94 251.56 273.6 - 298.21 323.54 347.78 373.21 400.42 428.05 456.1 485.22 513.95 544.43 575.61 606.9 638.95 671.64 705.51 740.31 - 776.05 812.03 849.03 886.96 925.56 965.46 1007.2 1049.35 / - 2 10 17 1 60.22 92.77 125.14 156.55 187.76 219.58 252.88 287.39 323.36 360.61 398.97 440.45 - 481.52 526.09 572.05 618.8 664.89 714.88 766.78 820.38 875.66 932.77 991.84 1052.37 1113.41 1176.04 1239.37 1300.54 - 1359.51 1419.88 1480.79 1543.71 1607.88 1671.79 1740 1805.45 / - 2 10 18 1 88.14 140.48 190.16 243.05 297.4 354.2 414.17 477.56 544.6 615.33 689.37 767.46 - 849.8 936.75 1027.57 1121.8 1218.12 1312.9 1402.48 1494.3 1590.55 1689.33 1788.83 1892.01 1997.2 2104.39 2213.12 2325.72 - 2439.09 2551.32 2667.92 2786.84 2906.78 3028.1 3152.4 3282.24 / - 2 10 19 1 132.63 212.16 294.3 388.7 490.73 601.21 720.45 848.95 989.06 1136.43 1289.45 1436.6 - 1592.73 1748.85 1912.81 2092.11 2266.59 2447.98 2648.61 2840.45 3042.69 3244.38 3457.86 3677.35 3905.71 4136.12 4368.62 4611.87 - 4866.86 5114.75 5381.01 5639.12 5911.32 6192.17 6462.22 6748.87 / - 2 10 20 1 202.45 326.21 452.48 632.47 838.69 1078.61 1329.74 1582.69 1858.04 2146.5 2448.61 2770.36 - 3110.02 3473.56 3827.98 4203.46 4622.04 5029.2 5446.76 5929.36 6388.03 6851.65 7339.61 7847.21 8362.95 8904.49 9459.69 10010.96 - 10592.86 11200.47 11816.38 12462.19 13113.81 13785.05 14462.09 15167.83 / - 2 11 1 1 214.17 213.18 212.9 212.91 213.09 213.39 213.79 214.28 214.84 215.48 216.18 216.96 - 217.79 218.69 219.66 220.68 221.76 222.91 224.12 225.38 226.7 228.09 229.53 231.03 232.59 234.21 235.88 237.62 - 239.41 241.26 243.17 245.13 247.15 249.23 251.37 253.57 / - 2 11 2 1 214.05 213.04 212.75 212.75 212.93 213.23 213.63 214.12 214.68 215.32 216.02 216.79 - 217.63 218.53 219.49 220.52 221.6 222.75 223.95 225.22 226.54 227.93 229.37 230.87 232.43 234.05 235.73 237.46 - 239.25 241.1 243.01 244.98 247 249.09 251.23 253.42 / - 2 11 3 1 213.8 212.74 212.42 212.4 212.57 212.86 213.25 213.73 214.29 214.92 215.63 216.4 - 217.23 218.13 219.09 220.12 221.2 222.35 223.56 224.83 226.15 227.54 228.98 230.49 232.05 233.67 235.35 237.09 - 238.89 240.74 242.66 244.63 246.66 248.74 250.89 253.09 / - 2 11 4 1 212.89 211.44 211.01 210.93 211.05 211.32 211.69 212.16 212.71 213.34 214.05 214.82 - 215.66 216.57 217.54 218.58 219.68 220.84 222.07 223.35 224.7 226.11 227.58 229.1 230.69 232.34 234.04 235.81 - 237.63 239.52 241.46 243.46 245.52 247.63 249.81 252.04 / - 2 11 5 1 210.34 207.45 206.85 206.67 206.73 206.95 207.31 207.78 208.34 208.99 209.72 210.53 - 211.41 212.35 213.37 214.46 215.62 216.84 218.12 219.47 220.89 222.36 223.9 225.51 227.17 228.89 230.68 232.53 - 234.44 236.4 238.43 240.52 242.67 244.87 247.14 249.46 / - 2 11 6 1 203.19 198.17 197.06 196.73 196.72 196.93 197.31 197.83 198.46 199.2 200.04 200.97 - 201.98 203.08 204.25 205.51 206.83 208.23 209.7 211.24 212.85 214.53 216.27 218.08 219.95 221.84 223.84 225.9 - 228.02 230.19 232.43 234.73 237.08 239.5 241.97 244.5 / - 2 11 7 1 186.72 178.55 176.98 176.51 176.56 176.91 177.48 178.23 179.16 180.22 181.4 182.68 - 184.08 185.59 187.19 188.89 190.63 192.49 194.43 196.43 198.47 200.6 202.81 205.07 207.37 209.76 212.2 214.7 - 217.24 219.85 222.52 225.24 228.01 230.82 233.69 237 / - 2 11 8 1 153.19 141.98 140.75 140.74 141.32 142.36 143.7 145.3 147.07 149.02 151.09 153.3 - 155.63 158.02 160.54 163.14 165.99 168.75 171.52 174.4 177.29 180.27 183.3 186.72 189.85 193 196.23 199.47 - 202.78 206.1 209.48 212.91 216.98 220.48 224 227.58 / - 2 11 9 1 100.61 96.47 97.36 99.18 101.55 104.11 106.87 109.83 112.87 116.09 119.34 122.79 - 126.22 129.85 133.44 137.23 140.95 144.91 148.74 152.75 156.82 160.78 164.88 169.04 173.32 177.44 181.81 186.05 - 190.26 194.93 199.17 203.42 207.7 212.01 216.89 221.24 / - 2 11 10 1 62.45 64.89 67.81 71.07 74.52 78.1 81.83 85.65 89.6 93.64 97.79 102.04 - 106.39 110.82 115.34 119.93 124.6 129.36 134.02 138.9 143.86 148.87 153.96 158.84 164.03 169.28 174.26 179.58 - 184.95 190.04 195.51 200.65 206.21 211.42 217.08 222.35 / - 2 11 11 1 47.83 52.15 55.87 59.65 63.53 67.53 71.65 75.89 80.26 84.76 89.38 94.13 - 98.98 103.95 109.03 114.74 120.47 126.11 131.83 137.55 143.42 149.26 155.18 161.16 167.21 173.33 179.51 185.76 - 192.03 198.36 204.79 211.28 217.79 223.93 230.54 237.22 / - 2 11 12 1 42.24 47.79 52.34 56.7 61.15 65.85 70.77 75.89 81.19 86.67 92.31 98.1 - 104.03 110.1 116.25 122.45 128.74 135.14 141.63 148.15 154.77 161.48 168.28 175.16 182.55 190.67 198.51 206.23 - 213.92 221.79 229.61 237.38 245.23 253.15 261.15 269.23 / - 2 11 13 1 37.21 43.84 49.94 56.12 62.35 68.75 75.36 81.78 88.62 95.85 103.27 110.85 - 118.59 126.47 134.49 142.65 150.95 159.3 166.88 176.5 185.29 194.09 202.5 210.68 219.67 228.76 237.24 246.5 - 257.32 264.71 274.06 283.69 293.43 304.03 315.14 326.3 / - 2 11 14 1 32.43 42.07 52.12 61.67 70.86 79.76 89.37 98.06 107.95 117.57 126.66 136.92 - 147.27 158.08 169.08 179.6 190.72 201.75 213.46 225.36 237.34 249.43 261.03 273.72 286.57 299.5 312.53 325.69 - 338.99 352.45 366.07 379.82 393.75 407.85 422.13 436.6 / - 2 11 15 1 32.84 48.73 63.07 76.48 89.67 103 116.22 129.68 142.99 157.22 171.07 186.41 - 200.39 215.46 231.64 247.72 264.25 280.97 297.91 315.62 333.21 350.9 369.55 388.57 407.96 427.73 447.5 467.35 - 487.66 508.74 530.12 551.83 573.88 596.29 619.08 640.89 / - 2 11 16 1 43.06 64.13 85.66 105.5 124.94 145.02 164.77 185.66 206.75 228.13 251.75 273.81 - 298.45 323.78 349.04 373.53 400.75 428.4 456.49 485.64 514.38 544.85 576.01 607.29 639.69 671.93 705.7 740.38 - 775.99 812.24 848.99 887.02 925.66 964.93 1005.5 1047.9 / - 2 11 17 1 60.1 92.65 125.07 156.53 187.8 219.96 252.92 287.43 323.38 360.59 398.89 440.32 - 482.48 525.85 571.81 618.55 664.57 714.4 766.12 819.52 874.57 931.77 990.28 1050.86 1112.05 1174.19 1237.54 1299.9 - 1353.37 1410.77 1468.17 1527.26 1588.07 1650.5 1713.21 1773.7 / - 2 11 18 1 87.96 140.3 190.05 242.98 297.42 354.22 414.14 477.49 544.37 614.92 688.82 766.65 - 848.66 935.23 1025.67 1119.58 1215.81 1311.31 1401.51 1493.94 1590.64 1690.16 1790.12 1894.45 2000.44 2108.5 2217.53 2332.22 - 2448.14 2562.29 2681.83 2804 2927.12 3051.49 3180.11 3311.66 / - 2 11 19 1 132.4 212 293.63 387.75 490.72 601.14 718.13 848.18 985.57 1134.78 1287.89 1435.76 - 1586.33 1749.67 1914.64 2095.01 2270.69 2453.45 2640.59 2848.99 3052.78 3256.38 3470.15 3692.31 3920.71 4153.17 4390.81 4636.14 - 4889.82 5143.71 5408.45 5673.23 5948.97 6230.02 6510.15 6803.26 / - 2 11 20 1 202.24 326.32 452.78 626.64 833.4 1071.44 1321.96 1583.33 1855.78 2142.11 2454.47 2778.47 - 3120.93 3461.43 3844.53 4222.98 4645.14 5055.63 5476.97 5920.76 6426.33 6894.12 7386.18 7893.16 8413.59 8956.78 9516.82 10081.64 - 10658.29 11270.24 11902.43 12542.2 13211.52 13889.24 14559.25 15290.02 / - 2 12 1 1 216.16 215.1 214.78 214.77 214.93 215.23 215.62 216.1 216.66 217.29 217.99 218.76 - 219.59 220.49 221.45 222.47 223.55 224.69 225.9 227.16 228.49 229.87 231.31 232.81 234.37 235.99 237.67 239.4 - 241.2 243.05 244.96 246.93 248.95 251.04 253.18 255.38 / - 2 12 2 1 216.04 214.96 214.63 214.61 214.77 215.06 215.45 215.93 216.49 217.12 217.82 218.59 - 219.42 220.32 221.28 222.3 223.38 224.53 225.73 226.99 228.32 229.7 231.14 232.65 234.21 235.83 237.5 239.24 - 241.04 242.89 244.8 246.77 248.8 250.88 253.03 255.23 / - 2 12 3 1 215.75 214.6 214.23 214.18 214.32 214.6 214.98 215.45 216 216.63 217.32 218.09 - 218.92 219.82 220.78 221.8 222.89 224.03 225.24 226.51 227.83 229.22 230.67 232.17 233.74 235.36 237.05 238.79 - 240.59 242.45 244.37 246.34 248.38 250.47 252.62 254.83 / - 2 12 4 1 214.7 213.11 212.63 212.46 212.56 212.82 213.18 213.65 214.2 214.83 215.53 216.3 - 217.15 218.06 219.03 220.07 221.18 222.35 223.58 224.87 226.22 227.63 229.1 230.63 232.22 233.84 235.56 237.33 - 239.16 241.04 242.99 245 247.07 249.19 251.38 253.62 / - 2 12 5 1 211.94 208.78 207.95 207.75 207.81 208.03 208.39 208.86 209.42 210.07 210.8 211.61 - 212.5 213.45 214.48 215.58 216.74 217.97 219.27 220.63 222.05 223.49 225.05 226.66 228.34 230.08 231.88 233.74 - 235.67 237.65 239.69 241.8 243.96 246.18 248.46 250.79 / - 2 12 6 1 204.36 198.76 197.63 197.27 197.25 197.46 197.83 198.35 198.99 199.74 200.58 201.52 - 202.55 203.66 204.85 206.13 207.47 208.89 210.38 211.9 213.53 215.23 216.99 218.82 220.71 222.67 224.7 226.78 - 228.93 231.14 233.4 235.7 238.08 240.53 243.03 245.59 / - 2 12 7 1 187.46 178.4 176.89 176.38 176.41 176.74 177.31 178.07 179 180.08 181.28 182.61 - 184.01 185.54 187.17 188.9 190.71 192.56 194.55 196.6 198.71 200.87 203.11 205.42 207.8 210.2 212.69 215.24 - 217.84 220.48 223.19 225.96 228.78 231.64 234.56 237.53 / - 2 12 8 1 152.93 141.51 140.33 140.34 140.86 141.92 143.3 144.91 146.81 148.79 150.9 153.14 - 155.47 157.92 160.44 163.07 166.01 168.76 171.62 174.49 177.47 180.46 183.54 186.66 190.19 193.41 196.64 199.94 - 203.25 206.63 210.03 213.51 217.03 221.21 224.81 228.43 / - 2 12 9 1 100.45 96.59 97.5 99.33 101.66 104.29 107.06 109.98 113.09 116.26 119.6 122.97 - 126.52 130.05 133.78 137.6 141.34 145.32 149.18 153.22 157.17 161.31 165.45 169.64 173.76 178.11 182.3 186.75 - 191.01 195.33 200.17 204.52 208.88 213.25 218.22 222.65 / - 2 12 10 1 62.72 65.2 68.13 71.42 74.88 78.49 82.24 86.09 90.06 94.13 98.3 102.58 - 106.95 111.41 115.85 120.47 125.16 129.92 134.76 139.68 144.67 149.73 154.61 159.77 165 170 175.33 180.69 - 185.79 191.25 196.77 201.96 207.58 212.84 218.56 223.88 / - 2 12 11 1 48.02 52.42 56.17 59.98 63.89 67.92 72.06 76.33 80.73 85.26 89.92 94.69 - 99.58 104.58 109.69 115.35 121.15 126.8 132.57 138.32 144.17 150.04 156.19 162.22 168.32 174.49 180.73 187.03 - 193.36 199.74 206.23 212.4 218.94 225.55 232.23 238.51 / - 2 12 12 1 42.36 47.99 52.6 57 61.49 66.21 71.16 76.31 81.65 87.16 92.83 98.66 - 104.63 110.73 116.92 123.16 129.49 135.93 142.45 149.01 155.67 162.42 169.26 176.19 183.19 191.39 199.4 207.29 - 215.04 223.02 230.87 238.6 246.86 254.86 262.94 271.1 / - 2 12 13 1 37.3 44 50.15 56.37 62.64 69.09 75.73 82.19 89.06 96.32 103.77 111.38 - 119.16 127.07 135.13 143.32 151.66 159.84 167.66 177.33 186.15 195.02 203.73 211.71 220.75 229.89 238.41 247.73 - 258.6 266.04 275.45 285.14 294.94 304.84 316.04 328.66 / - 2 12 14 1 32.37 42.16 52.25 61.86 71.1 80.04 89.69 98.41 108.33 117.98 127.11 137.4 - 147.78 158.62 169.65 180.23 191.39 202.46 214.2 226.13 238.14 250.27 261.9 274.61 287.53 300.54 313.65 326.88 - 340.25 353.77 367.45 381.27 395.26 409.44 423.79 438.32 / - 2 12 15 1 32.83 48.76 63.15 76.74 90 103.2 116.53 129.95 143.28 156.88 171.42 186.8 - 201.76 215.91 232.12 248.23 264.78 281.54 298.52 316.26 333.56 351.6 370.27 389.3 408.69 428.47 448.48 468.12 - 488.5 509.68 531.15 552.93 575.05 597.53 620.37 643.39 / - 2 12 16 1 42.99 64.09 85.68 105.78 125.02 145.12 164.89 185.81 206.91 228.3 251.91 273.97 - 298.62 323.97 349.82 373.77 400.99 428.63 456.73 485.92 514.68 545.14 576.27 607.53 639.9 672.09 705.78 740.34 - 775.82 811.61 848.55 886.66 925.4 964.74 1004.67 1045.87 / - 2 12 17 1 59.98 92.56 124.99 156.49 187.8 220.02 252.93 287.4 323.34 360.5 398.95 440.09 - 481.68 525.5 571.42 618.17 664.14 713.85 765.4 818.58 873.48 930.33 988.56 1048.89 1110.24 1172.64 1235.27 1298.64 - 1353.16 1411.84 1469.79 1530.17 1591.39 1655.69 1719.39 1780.93 / - 2 12 18 1 87.78 140.15 189.93 242.9 297.39 354.21 414.08 477.35 544.08 614.44 688.21 765.83 - 847.5 933.18 1023.67 1117.21 1213.37 1309.15 1399.94 1492.95 1590.26 1690.49 1791.24 1896.38 2003.25 2112.27 2222.24 2338.14 - 2455.27 2570.34 2691.06 2814.58 2939.77 3066.77 3200.62 3333.41 / - 2 12 19 1 132.18 211.86 293.21 386.82 489.47 599.5 717.8 845.84 984.35 1133.06 1286.29 1434.9 - 1586.31 1750.61 1916.59 2098.06 2275.18 2459.36 2648.07 2858.07 3063.65 3269.27 3484.85 3707.5 3938.67 4174.33 4414.42 4659.26 - 4918.16 5170.99 5442.01 5705.55 5988.5 6272.39 6555.48 6851.72 / - 2 12 20 1 202.06 326.51 453.4 620.47 828.97 1064.45 1315.08 1575.33 1851.32 2146.41 2443.9 2787.51 - 3114.12 3476.31 3862.45 4244.23 4635.29 5084.41 5509.64 5957.48 6412.02 6940.09 7436.6 7948.38 8468.67 9016.65 9579.27 10160.52 - 10739.71 11357.15 11983.63 12640.95 13304.91 14001.56 14678.88 15400.66 / - 2 13 1 1 218.1 216.99 216.64 216.61 216.77 217.05 217.43 217.9 218.46 219.08 219.78 220.54 - 221.37 222.27 223.22 224.24 225.32 226.47 227.67 228.93 230.26 231.64 233.08 234.58 236.14 237.76 239.44 241.18 - 242.97 244.82 246.74 248.71 250.74 252.82 254.97 257.17 / - 2 13 2 1 217.97 216.85 216.49 216.45 216.6 216.88 217.26 217.74 218.29 218.91 219.61 220.37 - 221.2 222.09 223.05 224.07 225.15 226.29 227.5 228.76 230.08 231.46 232.91 234.41 235.97 237.59 239.27 241.01 - 242.8 244.66 246.57 248.54 250.57 252.66 254.81 257.01 / - 2 13 3 1 217.61 216.38 215.96 215.89 216.01 216.27 216.64 217.1 217.64 218.26 218.96 219.72 - 220.55 221.44 222.4 223.42 224.5 225.65 226.85 228.12 229.45 230.84 232.29 233.79 235.36 236.99 238.68 240.42 - 242.23 244.09 246.01 247.99 250.03 252.13 254.29 256.5 / - 2 13 4 1 216.42 214.67 214.03 213.9 213.98 214.21 214.57 215.02 215.56 216.18 216.88 217.65 - 218.49 219.4 220.37 221.41 222.52 223.69 224.92 226.21 227.57 228.98 230.46 232 233.6 235.26 236.98 238.76 - 240.6 242.5 244.46 246.48 248.56 250.7 252.9 255.15 / - 2 13 5 1 213.41 209.99 209.03 208.79 208.8 209 209.34 209.8 210.35 211 211.73 212.54 - 213.43 214.39 215.42 216.52 217.7 218.94 220.24 221.62 223.05 224.55 226.12 227.75 229.44 231.2 233.01 234.89 - 236.83 238.83 240.9 243.02 245.17 247.41 249.71 252.06 / - 2 13 6 1 205.32 199.44 198.09 197.69 197.64 197.83 198.2 198.72 199.36 200.11 200.96 201.91 - 202.95 204.07 205.28 206.57 207.91 209.35 210.87 212.45 214.1 215.83 217.62 219.48 221.41 223.39 225.4 227.52 - 229.69 231.93 234.23 236.59 239.01 241.49 244.02 246.62 / - 2 13 7 1 187.15 178.13 176.54 176.02 176.03 176.37 176.95 177.73 178.68 179.77 180.99 182.34 - 183.8 185.34 187 188.75 190.59 192.52 194.51 196.59 198.76 200.99 203.26 205.63 208.05 210.53 213.04 215.64 - 218.3 220.99 223.76 226.57 229.45 232.36 235.33 238.36 / - 2 13 8 1 153.17 140.98 139.8 139.87 140.44 141.55 142.96 144.62 146.45 148.45 150.69 152.95 - 155.34 157.81 160.38 163.04 165.75 168.82 171.67 174.64 177.61 180.69 183.77 186.95 190.58 193.82 197.14 200.46 - 203.87 207.27 210.76 214.28 217.8 222.06 225.67 229.34 / - 2 13 9 1 100.27 96.64 97.58 99.48 101.82 104.42 107.26 110.19 113.32 116.5 119.86 123.25 - 126.82 130.37 134.12 137.81 141.72 145.55 149.62 153.55 157.67 161.85 166.03 170.13 174.4 178.8 183.02 187.52 - 191.82 196.15 200.99 205.4 209.89 214.41 218.92 224.02 / - 2 13 10 1 63 65.53 68.48 71.76 75.26 78.9 82.64 86.5 90.48 94.56 98.75 103.04 - 107.43 111.9 116.47 121.12 125.83 130.62 135.51 140.46 145.49 150.36 155.5 160.71 165.98 171.02 176.4 181.81 - 186.95 192.46 197.67 203.28 208.55 214.26 219.6 225.42 / - 2 13 11 1 48.23 52.7 56.49 60.33 64.27 68.32 72.49 76.79 81.22 85.78 90.46 95.26 - 100.18 105.21 110.35 115.86 121.83 127.58 133.32 139.19 145.09 151 156.99 163.06 169.43 175.65 181.94 188 - 194.4 200.83 207.31 213.89 220.5 227.17 233.47 240.26 / - 2 13 12 1 42.51 48.22 52.88 57.32 61.84 66.59 71.57 76.75 82.12 87.66 93.36 99.22 - 105.22 111.36 117.59 123.87 130.24 136.71 143.27 149.87 156.56 163.35 170.24 177.2 184.25 192.06 200.39 208.22 - 216.15 224.13 232.12 240.14 248.11 256.16 264.3 272.51 / - 2 13 13 1 37.41 44.17 50.38 56.64 62.95 69.43 76.1 82.59 89.5 96.79 104.27 111.92 - 119.72 127.67 135.76 143.98 152.35 159.92 168.42 178.12 187 195.93 204.69 212.72 221.81 231 239.56 248.92 - 259.86 267.34 276.8 286.55 296.41 306.37 316.43 329.56 / - 2 13 14 1 32.42 42.26 52.4 62.05 71.34 80.33 90 98.76 108.71 118.39 127.55 137.87 - 148.27 159.15 170.2 180.81 192.02 203.13 214.9 226.86 238.9 250.97 262.7 275.44 288.39 301.48 314.67 327.98 - 341.42 355.01 368.74 382.63 396.69 410.93 425.34 439.94 / - 2 13 15 1 32.82 48.79 63.23 76.87 90.16 103.41 116.82 130.2 143.56 157.18 171.73 187.14 - 202.56 216.33 232.55 248.68 265.24 281.78 299 316.79 334.12 352.18 370.87 389.9 409.29 429.06 449.06 468.68 - 489.08 510.34 531.9 553.78 575.97 598.51 621.41 643.53 / - 2 13 16 1 42.92 64.04 85.74 105.93 125.28 145.22 165 185.92 207.05 229.29 252.03 274.07 - 298.7 324.06 350.02 373.88 401.11 428.73 456.92 485.99 514.78 545.23 576.34 607.57 639.91 672.06 705.67 740.15 - 775.51 811.5 847.96 885.92 924.74 964.28 1004.35 1044.95 / - 2 13 17 1 59.86 92.52 124.91 156.43 187.76 220.01 252.89 287.3 323.21 360.33 399.77 439.75 - 482.49 524.99 570.83 617.61 664.16 713.17 764.58 817.59 872.28 928.89 986.86 1046.93 1108.11 1171.02 1234.31 1295.71 - 1352.29 1411.59 1472.67 1532.63 1596.53 1659.73 1724.09 1788.16 / - 2 13 18 1 87.61 140 189.79 242.79 297.28 354.13 413.92 477.07 543.67 613.84 687.47 764.74 - 846.4 931.73 1021.8 1114.99 1211.16 1305.49 1398.35 1492 1589.89 1690.54 1792.33 1898.25 2006 2115.41 2227 2343.77 - 2462.01 2578.55 2700.5 2824.24 2951.75 3080.15 3215.58 3349.56 / - 2 13 19 1 131.97 211.76 292.44 386.84 489.4 599.48 715.6 843.54 981.37 1127.52 1284.81 1429.57 - 1586.47 1753.22 1918.83 2090.56 2280.09 2465.78 2656.27 2868.07 3075.3 3283.22 3500.89 3724.01 3958.22 4194.43 4441.11 4690.86 - 4948.68 5205.04 5478.13 5745.2 6031.14 6317.89 6599.62 6904.44 / - 2 13 20 1 201.91 326.84 454.42 613.19 821.02 1051.75 1307.09 1569.15 1849.44 2140.38 2451.3 2777.71 - 3126.94 3492.58 3857.82 4267.34 4662.54 5116.04 5545.56 5997.39 6457.08 6990.43 7492.3 8008.38 8529.2 9082.39 9651.39 10232.63 - 10818.12 11440.82 12072.78 12736.15 13420.16 14108.12 14803.87 15537.96 / - 2 14 1 1 219.95 218.83 218.47 218.43 218.58 218.85 219.23 219.7 220.24 220.87 221.56 222.32 - 223.14 224.04 224.99 226.01 227.09 228.23 229.43 230.69 232.01 233.39 234.83 236.34 237.9 239.52 241.19 242.93 - 244.73 246.59 248.5 250.47 252.5 254.59 256.74 258.95 / - 2 14 2 1 219.83 218.69 218.31 218.26 218.4 218.67 219.04 219.51 220.05 220.67 221.36 222.12 - 222.95 223.84 224.79 225.81 226.89 228.03 229.23 230.49 231.81 233.2 234.64 236.14 237.7 239.32 241 242.74 - 244.54 246.4 248.32 250.29 252.32 254.42 256.57 258.78 / - 2 14 3 1 219.37 218.09 217.65 217.55 217.66 217.9 218.26 218.71 219.25 219.86 220.55 221.31 - 222.13 223.03 223.98 225 226.09 227.23 228.44 229.7 231.03 232.42 233.87 235.38 236.95 238.58 240.27 242.02 - 243.83 245.7 247.63 249.62 251.66 253.77 255.93 258.15 / - 2 14 4 1 218.01 216.14 215.39 215.22 215.28 215.5 215.85 216.29 216.83 217.44 218.14 218.91 - 219.75 220.65 221.63 222.67 223.78 224.95 226.19 227.49 228.84 230.27 231.75 233.3 234.91 236.58 238.31 240.1 - 241.95 243.86 245.84 247.87 249.96 252.11 254.32 256.59 / - 2 14 5 1 214.74 210.79 209.99 209.6 209.61 209.81 210.14 210.6 211.15 211.8 212.54 213.36 - 214.25 215.18 216.22 217.33 218.51 219.76 221.08 222.46 223.91 225.43 227.01 228.65 230.36 232.13 233.97 235.86 - 237.82 239.84 241.93 244.07 246.27 248.54 250.86 253.25 / - 2 14 6 1 206.24 199.7 198.33 197.89 197.82 198 198.36 198.88 199.52 200.28 201.15 202.11 - 203.16 204.3 205.52 206.83 208.22 209.68 211.2 212.81 214.49 216.25 218.07 219.96 221.92 223.91 226 228.15 - 230.36 232.64 234.97 237.37 239.83 242.31 244.89 247.52 / - 2 14 7 1 187.56 177.78 176.01 175.51 175.49 175.81 176.4 177.19 178.15 179.27 180.52 181.88 - 183.36 184.96 186.66 188.42 190.3 192.27 194.32 196.41 198.63 200.9 203.27 205.64 208.13 210.68 213.28 215.9 - 218.61 221.38 224.21 227.06 229.99 232.98 236 239.09 / - 2 14 8 1 153.35 140.29 139.24 139.31 140.03 141.17 142.62 144.31 146.18 148.21 150.37 152.78 - 155.2 157.7 160.32 163.01 165.77 168.61 171.77 174.78 177.8 180.92 184.06 187.29 190.52 194.27 197.61 201.03 - 204.46 207.96 211.51 215.06 218.69 222.33 226.71 230.44 / - 2 14 9 1 100.01 96.78 97.74 99.65 102 104.61 107.46 110.41 113.48 116.75 120.05 123.53 - 127.12 130.69 134.47 138.18 142.12 145.97 150.07 154.03 158.18 162.23 166.49 170.75 175.05 179.28 183.75 188.06 - 192.63 197.01 201.42 206.36 210.84 215.36 219.91 225.15 / - 2 14 10 1 63.29 65.85 68.82 72.15 75.65 79.3 83.08 86.95 90.95 95.06 99.27 103.59 - 107.99 112.5 117.09 121.77 126.51 131.33 136.25 141.24 146.1 151.21 156.39 161.64 166.68 172.03 177.46 182.61 - 188.11 193.67 198.93 204.6 209.92 215.69 221.09 226.97 / - 2 14 11 1 48.47 53.01 56.84 60.7 64.67 68.75 72.95 77.27 81.73 86.31 91.02 95.85 - 100.79 105.85 111.02 116.38 122.41 128.27 134.04 139.96 145.88 151.96 157.99 164.1 170.29 176.54 182.86 189.25 - 195.71 202.2 208.74 215.37 222.05 228.37 235.15 242 / - 2 14 12 1 42.69 48.47 53.18 57.66 62.21 66.99 72 77.21 82.6 88.18 93.91 99.8 - 105.83 112 118.27 124.59 130.99 137.5 144.09 150.72 157.45 164.28 171.2 178.21 185.3 192.7 201.14 209.3 - 217.23 225.18 233.37 241.43 249.35 257.45 266.05 274.34 / - 2 14 13 1 37.54 44.37 50.63 56.93 63.27 69.79 76.49 83.01 89.94 97.26 104.77 112.45 - 120.28 128.26 136.37 144.63 153.03 161.27 170.13 178.86 187.81 196.6 205.62 213.69 222.83 232.07 240.67 250.08 - 261.07 268.59 278.11 287.91 297.82 307.83 317.96 329.49 / - 2 14 14 1 32.49 42.38 52.56 62.26 71.6 80.62 90.32 99.11 109.09 118.79 127.98 138.32 - 148.75 159.64 170.72 181.35 192.58 203.72 215.53 227.53 239.59 251.67 263.43 276.18 289.14 302.3 315.57 328.96 - 342.47 356.13 369.92 383.86 397.98 412.28 426.76 441.43 / - 2 14 15 1 32.81 48.82 63.31 77 90.34 103.61 117.05 130.45 143.82 158.12 172.02 187.43 - 202.51 216.67 232.92 249 265.62 282.03 299.37 317.14 334.98 352.58 371.29 390.33 409.71 429.45 449.22 468.77 - 489.36 510.6 532.21 554.18 576.47 599.08 622.04 644.21 / - 2 14 16 1 42.86 64 85.87 105.97 125.7 145.3 165.08 186 207.12 228.98 252.09 274.39 - 298.7 324.02 349.98 373.83 401.07 428.66 456.8 485.81 514.81 545 576.09 607.3 639.6 671.72 705.26 739.64 - 774.88 810.74 847.01 884.79 923.41 962.86 1003.11 1043.97 / - 2 14 17 1 59.75 92.4 124.82 156.55 188.09 219.93 253.04 287.11 322.94 360.03 399.61 439.27 - 481.88 524.23 569.98 616.76 664.24 712.25 763.54 816.36 870.83 927.19 984.88 1044.67 1105.77 1168.58 1232.02 1293.88 - 1353.01 1411.15 1473 1535.85 1599.07 1663.61 1729.45 1795.31 / - 2 14 18 1 87.44 139.86 189.54 242.66 297.1 353.9 413.63 476.61 543.03 613 686.41 763.64 - 845.08 930.11 1019.73 1112.78 1208.73 1303.11 1396.45 1492.1 1589.37 1690.68 1793.22 1900.05 2008.27 2119.17 2235.21 2349.68 - 2468.94 2588.37 2710.24 2835.44 2964.37 3094.8 3230.78 3366.39 / - 2 14 19 1 131.78 211.73 292.15 386 488.08 597.8 715.34 842.77 980.11 1126.2 1279.33 1428.74 - 1586.61 1746.94 1921.26 2094.43 2285.4 2472.78 2665.15 2866.63 3088 3298.31 3518.3 3743.85 3978.63 4218.44 4468.68 4719.31 - 4978.86 5241.61 5514.07 5788.49 6072.9 6367.37 6653.85 6956.22 / - 2 14 20 1 201.81 327.33 455.76 607.32 813.51 1041.52 1300.76 1561.29 1841.52 2132.74 2452.86 2789.14 - 3141.42 3488.81 3879.5 4293.29 4692.59 5112.17 5585.48 6041.79 6506.94 6994.23 7553.08 8074.65 8602.09 9155.95 9729.55 10315.84 - 10905.26 11533.62 12183.43 12842.38 13532.54 14228.49 14953.41 15672.59 / - 2 15 1 1 221.72 220.62 220.26 220.22 220.36 220.63 221 221.47 222.01 222.63 223.32 224.08 - 224.9 225.79 226.74 227.75 228.83 229.97 231.17 232.43 233.75 235.13 236.57 238.07 239.63 241.25 242.93 244.67 - 246.47 248.33 250.24 252.22 254.25 256.35 258.5 260.71 / - 2 15 2 1 221.56 220.42 220.04 219.98 220.11 220.37 220.74 221.2 221.74 222.36 223.04 223.8 - 224.62 225.51 226.46 227.48 228.55 229.69 230.89 232.15 233.47 234.86 236.3 237.8 239.36 240.99 242.67 244.41 - 246.21 248.07 249.99 251.97 254 256.1 258.26 260.47 / - 2 15 3 1 220.98 219.67 219.19 219.06 219.15 219.38 219.73 220.17 220.7 221.31 222 222.75 - 223.57 224.46 225.42 226.44 227.52 228.67 229.87 231.15 232.48 233.87 235.33 236.84 238.42 240.06 241.75 243.51 - 245.33 247.2 249.14 251.14 253.19 255.31 257.48 259.72 / - 2 15 4 1 219.43 217.3 216.63 216.43 216.46 216.66 216.99 217.42 217.95 218.56 219.25 220.02 - 220.86 221.77 222.75 223.79 224.9 226.08 227.32 228.62 229.99 231.42 232.92 234.47 236.09 237.77 239.51 241.32 - 243.18 245.11 247.09 249.14 251.24 253.41 255.64 257.93 / - 2 15 5 1 215.87 211.65 210.61 210.3 210.27 210.44 210.76 211.2 211.75 212.39 213.12 213.94 - 214.84 215.81 216.86 217.98 219.18 220.44 221.77 223.17 224.64 226.17 227.77 229.44 231.16 232.96 234.81 236.7 - 238.67 240.72 242.82 244.99 247.22 249.51 251.86 254.27 / - 2 15 6 1 206.95 199.84 198.34 197.86 197.76 197.93 198.28 198.8 199.45 200.21 201.09 202.07 - 203.14 204.29 205.54 206.87 208.28 209.78 211.35 212.97 214.69 216.48 218.32 220.25 222.24 224.3 226.43 228.6 - 230.85 233.17 235.55 237.99 240.47 243.03 245.65 248.33 / - 2 15 7 1 187.8 177.26 175.31 174.79 174.76 175.1 175.69 176.5 177.48 178.6 179.88 181.28 - 182.8 184.43 186.13 187.96 189.88 191.88 193.94 196.11 198.35 200.67 203.05 205.51 208.07 210.63 213.3 216.03 - 218.81 221.61 224.49 227.44 230.41 233.46 236.56 239.71 / - 2 15 8 1 152.86 139.62 138.85 138.92 139.66 140.82 142.3 144.01 145.91 147.97 150.18 152.63 - 155.06 157.61 160.25 162.98 165.78 168.66 171.63 174.91 178 181.14 184.37 187.62 190.91 194.29 198.12 201.6 - 205.09 208.66 212.27 215.89 219.59 223.29 227.07 231.57 / - 2 15 9 1 99.88 96.93 97.91 99.83 102.19 104.83 107.64 110.65 113.73 117.01 120.33 123.82 - 127.33 131.02 134.69 138.56 142.36 146.39 150.33 154.51 158.69 162.78 167.08 171.37 175.71 179.97 184.49 188.83 - 193.46 197.88 202.34 207.33 211.86 216.43 221.04 225.68 / - 2 15 10 1 63.55 66.22 69.22 72.56 76.08 79.75 83.52 87.44 91.45 95.58 99.81 104.14 - 108.58 113.1 117.72 122.42 127.2 132.05 136.83 141.83 146.91 152.06 157.28 162.31 167.65 173.05 178.53 183.72 - 189.27 194.54 200.19 205.91 211.29 217.12 222.57 228.52 / - 2 15 11 1 48.75 53.35 57.22 61.12 65.11 69.21 73.44 77.79 82.26 86.87 91.6 96.46 - 101.43 106.51 111.7 117 123.07 128.98 134.86 140.73 146.79 152.73 158.99 165.14 171.37 177.68 184.05 190.5 - 197.01 203.56 210.16 216.85 223.18 229.96 236.81 243.74 / - 2 15 12 1 42.92 48.77 53.52 58.03 62.61 67.42 72.45 77.69 83.12 88.71 94.48 100.39 - 106.45 112.65 118.95 125.31 131.76 138.3 144.91 151.57 158.34 165.2 172.15 179.2 186.32 193.53 201.79 210.11 - 218.15 226.28 234.38 242.68 250.91 259.09 267.35 275.7 / - 2 15 13 1 37.72 44.62 50.92 57.25 63.62 70.16 76.89 83.44 90.4 97.75 105.29 112.99 - 120.84 128.84 136.98 145.27 153.68 162.24 170.83 179.58 188.39 197.43 206.5 214.63 223.81 233.09 241.73 251.18 - 262.23 269.78 279.35 289.2 299.16 309.23 319.41 331 / - 2 15 14 1 32.71 42.52 52.75 62.5 71.87 80.93 90.65 99.47 109.47 119.19 128.4 138.78 - 149.21 160.11 171.2 181.85 193.08 204.24 216.06 228.07 240.16 252.26 264.03 276.79 289.75 302.92 316.27 329.75 - 343.34 357.07 370.91 384.92 399.1 413.45 427.99 442.71 / - 2 15 15 1 32.94 48.88 63.41 77.15 90.52 103.82 117.27 130.69 144.07 158.68 172.28 187.68 - 202.75 216.9 233.16 249.25 265.87 282.72 299.58 317.29 335.12 352.7 371.41 390.46 409.84 429.56 449.29 469.55 - 489.31 510.47 532.03 553.94 576.23 598.9 621.92 644.14 / - 2 15 16 1 42.79 63.96 85.88 106.02 125.76 145.36 165.14 186.04 207.13 229.48 252.07 274.68 - 298.58 323.84 349.74 373.54 400.79 428.42 456.41 485.34 514.26 544.29 575.27 606.41 638.72 670.84 704.33 738.61 - 773.72 809.65 845.51 883.12 921.61 960.97 1001.11 1042.03 / - 2 15 17 1 59.64 92.29 124.74 156.57 187.97 219.74 253.01 286.81 322.54 359.52 399.03 438.58 - 481.04 523.17 568.73 615.38 662.28 710.93 762.1 814.93 869.09 925.21 982.8 1042.42 1103.09 1165.47 1228.66 1290.98 - 1350.38 1409.77 1471.55 1534.98 1598.78 1663.94 1730.51 1797.02 / - 2 15 18 1 87.29 139.76 189.39 242.45 296.83 353.49 413.11 475.9 542.03 611.71 684.95 761.93 - 843.23 928.2 1017.71 1110.34 1205.77 1300.95 1394.1 1490.36 1589.04 1690.49 1796.05 1901.26 2010.85 2122.81 2239.77 2354.93 - 2476.08 2598.58 2720.43 2846.93 2977.5 3113.19 3246.74 3384.14 / - 2 15 19 1 131.63 211.78 292.02 385.21 486.95 597.49 713.21 839.59 977.58 1124.42 1277.05 1427.43 - 1586.86 1747.97 1923.55 2098.39 2290.8 2480.17 2674.63 2878.11 3101.53 3314.52 3537.12 3765.34 4001.02 4244.6 4495.8 4752.56 - 5015.06 5278.15 5557.5 5834.16 6123.77 6417.13 6712.58 7019.11 / - 2 15 20 1 201.8 328.06 457.6 599.68 806.83 1032.57 1286.44 1546.09 1833.83 2129.03 2444.72 2784.55 - 3134.88 3508.96 3903.97 4289.86 4726.47 5150.77 5589.92 6091.43 6562.63 7055.68 7555.68 8148.88 8683.68 9243.19 9816.49 10402.44 - 11006.43 11638.91 12295.11 12960.43 13657.99 14375.42 15100.37 15839.87 / - 2 16 1 1 223.38 222.34 222 221.96 222.1 222.38 222.75 223.21 223.75 224.37 225.06 225.81 - 226.63 227.52 228.47 229.48 230.55 231.69 232.89 234.15 235.47 236.85 238.29 239.79 241.35 242.97 244.65 246.39 - 248.19 250.05 251.96 253.94 255.98 258.07 260.23 262.44 / - 2 16 2 1 223.15 222.04 221.66 221.59 221.72 221.98 222.34 222.8 223.33 223.94 224.63 225.38 - 226.2 227.09 228.03 229.05 230.12 231.26 232.46 233.72 235.05 236.43 237.87 239.38 240.94 242.57 244.25 246 - 247.8 249.66 251.59 253.57 255.61 257.71 259.88 262.1 / - 2 16 3 1 222.43 221.11 220.52 220.41 220.49 220.73 221.07 221.52 222.05 222.65 223.34 224.09 - 224.92 225.81 226.76 227.79 228.87 230.02 231.23 232.51 233.84 235.24 236.7 238.23 239.81 241.45 243.16 244.92 - 246.75 248.63 250.58 252.58 254.65 256.77 258.96 261.2 / - 2 16 4 1 220.66 218.35 217.53 217.33 217.37 217.57 217.9 218.34 218.87 219.48 220.18 220.95 - 221.79 222.71 223.69 224.75 225.87 227.05 228.3 229.62 231 232.44 233.95 235.52 237.15 238.79 240.55 242.37 - 244.25 246.19 248.2 250.26 252.39 254.57 256.82 259.12 / - 2 16 5 1 216.76 212.27 210.99 210.66 210.62 210.78 211.09 211.53 212.08 212.73 213.47 214.3 - 215.21 216.19 217.26 218.39 219.6 220.83 222.18 223.6 225.09 226.64 228.27 229.95 231.71 233.53 235.41 237.36 - 239.37 241.44 243.58 245.77 248.04 250.36 252.74 255.18 / - 2 16 6 1 207.4 199.63 198.02 197.5 197.39 197.54 197.9 198.41 199.07 199.85 200.74 201.72 - 202.81 203.99 205.27 206.63 208.07 209.6 211.21 212.86 214.62 216.45 218.35 220.32 222.34 224.44 226.62 228.86 - 231.15 233.51 235.94 238.42 240.98 243.59 246.26 248.98 / - 2 16 7 1 187.89 176.51 174.56 174.03 174.02 174.36 174.97 175.79 176.79 177.94 179.24 180.67 - 182.22 183.88 185.62 187.49 189.45 191.49 193.6 195.82 198.11 200.44 202.88 205.4 207.97 210.61 213.35 216.12 - 218.94 221.84 224.79 227.76 230.81 233.92 237.06 240.27 / - 2 16 8 1 152.88 139.22 138.46 138.54 139.3 140.48 141.98 143.71 145.62 147.7 149.92 152.27 - 154.88 157.48 160.18 162.96 165.83 168.75 171.75 175.09 178.21 181.4 184.67 187.97 191.33 194.75 198.65 202.17 - 205.76 209.35 213.03 216.72 220.49 224.27 228.12 231.99 / - 2 16 9 1 99.8 97.09 98.1 100.05 102.42 105.07 107.89 110.91 114.01 117.3 120.63 124.14 - 127.66 131.37 135.06 138.95 142.78 146.83 150.78 155 159.07 163.33 167.67 171.88 176.25 180.67 185.23 189.62 - 194.29 198.76 203.26 207.8 212.89 217.51 222.17 226.86 / - 2 16 10 1 63.91 66.63 69.66 73 76.56 80.23 84.04 87.97 92 96.14 100.38 104.73 - 109.18 113.73 118.37 122.97 127.77 132.64 137.58 142.62 147.73 152.91 158.17 163.24 168.62 174.07 179.26 184.82 - 190.43 195.74 201.45 206.84 212.66 218.12 224.06 229.6 / - 2 16 11 1 49.1 53.76 57.67 61.6 65.62 69.75 73.99 78.36 82.86 87.48 92.24 97.11 - 102.1 107.2 112.41 117.73 123.64 129.71 135.59 141.56 147.58 153.67 159.78 165.96 172.45 178.81 185.23 191.73 - 197.99 204.61 211.25 217.92 224.69 231.54 238.46 244.99 / - 2 16 12 1 43.24 49.14 53.93 58.47 63.07 67.91 72.97 78.23 83.68 89.3 95.08 101.02 - 107.1 113.32 119.66 126.06 132.53 139.1 145.73 152.43 159.22 166.11 173.09 180.17 187.33 194.57 202.14 210.82 - 219.02 227.34 235.49 243.68 251.92 260.29 268.61 277.02 / - 2 16 13 1 37.98 44.95 51.27 57.62 64.02 70.58 77.33 83.91 90.89 98.26 105.82 113.54 - 121.41 129.42 137.58 145.88 154.31 162.88 171.49 180.09 189.07 198.17 207.31 215.5 224.72 234.05 242.71 252.21 - 263.32 270.88 280.49 290.38 300.39 310.5 320.73 332.39 / - 2 16 14 1 32.92 42.73 52.99 62.78 72.18 81.26 91 99.84 109.85 119.58 128.81 139.22 - 149.63 160.54 171.63 182.28 193.51 204.67 216.48 228.48 240.55 252.65 264.42 277.18 290.15 303.3 316.65 330.21 - 343.9 357.7 371.61 385.67 399.91 414.32 428.91 443.68 / - 2 16 15 1 33.03 48.95 63.55 77.32 90.72 104.04 117.5 130.93 144.31 158.91 172.49 187.86 - 202.9 217.02 233.23 249.29 265.9 282.74 299.57 317.15 334.86 352.5 371.13 390.11 409.45 429.15 449.14 469.17 - 488.74 509.82 531.28 553.1 575.27 597.82 620.73 643.17 / - 2 16 16 1 42.75 63.94 85.9 106.08 125.82 145.42 165.17 186.03 207.07 229.49 251.89 274.46 - 298.3 323.48 349.28 372.95 400.08 427.79 455.58 484.38 513.49 543.03 573.84 604.79 636.91 668.98 702.46 736.69 - 771.71 807.5 843.15 880.5 918.64 957.57 997.26 1037.72 / - 2 16 17 1 59.56 92.21 124.68 156.48 187.81 219.47 252.62 286.36 321.96 358.76 398.12 437.54 - 479.85 521.73 567.04 613.41 661.3 708.85 760 812.69 866.6 922.28 979.27 1038.3 1098.77 1160.32 1223.25 1285.56 - 1345.39 1406.47 1467.74 1531.68 1596.13 1661.86 1729.06 1798.62 / - 2 16 18 1 87.18 139.74 189.28 242.21 296.44 352.83 412.17 474.8 540.6 609.84 682.75 759.55 - 840.44 925.15 1013.85 1105.86 1200.84 1296.79 1391.16 1486.87 1586.39 1688.53 1795.01 1901.44 2012.11 2127.42 2243.24 2359.87 - 2482.22 2606.19 2733.36 2861.87 2993.72 3127.2 3262.73 3400.57 / - 2 16 19 1 131.54 211.99 292.17 385.33 486.9 595.54 712.78 838.63 974.33 1118.94 1273.3 1424.74 - 1578.63 1747.8 1924.72 2101.37 2286.14 2486.74 2683.67 2889.41 3097.86 3334.46 3556.39 3787.74 4026.65 4273.5 4526.83 4785.08 - 5051.23 5321.76 5600.82 5890.45 6179.2 6476.67 6778.41 7087.78 / - 2 16 20 1 201.94 329.15 460.09 601.25 801.24 1031.45 1282.06 1539.54 1818.62 2121.87 2436.72 2782.75 - 3129.47 3502.23 3900.02 4320.53 4730.77 5193.9 5639.33 6098.18 6624.87 7124.38 7632.37 8163.44 8774.49 9341.03 9920.83 10513.81 - 11126.41 11752.65 12413.34 13094.79 13800.92 14527.75 15260.73 16012.26 / - 2 17 1 1 224.9 223.94 223.63 223.61 223.76 224.04 224.41 224.87 225.41 226.03 226.71 227.46 - 228.28 229.17 230.12 231.13 232.2 233.33 234.53 235.79 237.11 238.49 239.93 241.43 242.99 244.61 246.29 248.03 - 249.83 251.7 253.62 255.6 257.64 259.74 261.89 264.11 / - 2 17 2 1 224.56 223.5 223.13 223.07 223.19 223.45 223.81 224.26 224.79 225.4 226.08 226.83 - 227.65 228.54 229.48 230.5 231.57 232.71 233.91 235.18 236.5 237.89 239.33 240.84 242.41 244.04 245.73 247.48 - 249.29 251.16 253.09 255.08 257.13 259.24 261.41 263.64 / - 2 17 3 1 223.67 222.33 221.72 221.58 221.65 221.87 222.21 222.65 223.17 223.78 224.46 225.21 - 226.03 226.92 227.88 228.9 229.99 231.15 232.36 233.64 234.99 236.39 237.86 239.39 240.98 242.64 244.35 246.13 - 247.97 249.86 251.82 253.84 255.92 258.06 260.26 262.52 / - 2 17 4 1 221.62 219.18 218.28 218.04 218.05 218.23 218.55 218.97 219.5 220.11 220.8 221.57 - 222.42 223.34 224.32 225.38 226.51 227.71 228.97 230.3 231.69 233.15 234.67 236.26 237.9 239.62 241.39 243.23 - 245.13 247.09 249.12 251.21 253.35 255.56 257.83 260.16 / - 2 17 5 1 217.35 212.31 211.15 210.74 210.66 210.78 211.08 211.51 212.05 212.69 213.44 214.27 - 215.18 216.18 217.26 218.41 219.64 220.94 222.32 223.76 225.28 226.86 228.51 230.23 232.02 233.87 235.79 237.77 - 239.82 241.93 244.1 246.3 248.6 250.96 253.39 255.87 / - 2 17 6 1 207.55 199.11 197.41 196.83 196.67 196.79 197.13 197.64 198.3 199.09 200 201.01 - 202.13 203.34 204.65 206.05 207.53 209.06 210.71 212.43 214.23 216.11 218.06 220.05 222.14 224.3 226.53 228.83 - 231.19 233.6 236.09 238.64 241.26 243.92 246.66 249.46 / - 2 17 7 1 187.82 175.68 173.73 173.21 173.23 173.6 174.23 175.07 176.1 177.29 178.6 180.06 - 181.65 183.35 185.15 187.02 189.03 191.12 193.27 195.53 197.88 200.3 202.76 205.33 207.96 210.63 213.44 216.27 - 219.17 222.13 225.18 228.23 231.36 234.55 237.77 241.06 / - 2 17 8 1 152.17 138.84 138.09 138.18 138.97 140.17 141.68 143.43 145.36 147.45 149.68 152.06 - 154.56 157.33 160.05 162.85 165.75 168.72 171.76 174.88 178.36 181.62 184.95 188.32 191.74 195.22 198.73 202.77 - 206.4 210.08 213.81 217.59 221.4 225.27 229.2 233.13 / - 2 17 9 1 99.67 97.29 98.34 100.28 102.67 105.38 108.21 111.17 114.33 117.56 120.97 124.4 - 128.03 131.76 135.46 139.37 143.22 147.29 151.27 155.5 159.6 163.9 168.1 172.51 176.92 181.38 185.76 190.41 - 194.88 199.64 204.19 208.78 213.92 218.6 223.31 228.06 / - 2 17 10 1 64.42 67.12 70.18 73.56 77.13 80.83 84.64 88.56 92.62 96.77 101.03 105.38 - 109.76 114.31 118.95 123.68 128.5 133.39 138.35 143.42 148.56 153.78 158.83 164.17 169.59 174.78 180.32 185.93 - 191.25 196.94 202.7 208.14 214.02 219.54 225.53 231.13 / - 2 17 11 1 49.59 54.29 58.24 62.21 66.26 70.41 74.67 79.06 83.56 88.2 92.96 97.84 - 102.84 107.95 113.17 118.5 124.24 130.39 136.34 142.4 148.4 154.62 160.77 166.99 173.29 179.66 186.12 192.64 - 199.24 205.92 212.62 219.33 226.17 232.66 239.63 246.66 / - 2 17 12 1 43.73 49.65 54.46 59.01 63.64 68.51 73.58 78.86 84.33 89.96 95.76 101.71 - 107.8 114.03 120.39 126.84 133.35 139.94 146.58 153.29 160.1 167.01 174.01 181.11 188.29 195.57 202.92 211.13 - 219.7 228.18 236.52 244.83 253.11 261.52 269.78 278.24 / - 2 17 13 1 38.38 45.42 51.76 58.1 64.51 71.08 77.83 84.35 91.44 98.82 106.38 114.11 - 121.99 130.01 138.17 146.47 154.91 163.47 172.08 180.68 189.65 198.76 207.98 216.23 225.52 234.89 243.57 253.1 - 264.27 271.83 281.47 291.39 301.43 311.59 321.86 333.58 / - 2 17 14 1 33.46 43.06 53.31 63.15 72.56 81.65 91.4 100.25 110.24 119.98 129.21 139.57 - 150.02 160.91 171.99 182.62 193.83 204.95 216.73 228.67 240.73 252.79 264.5 277.21 290.13 303.25 316.57 330.1 - 343.83 357.74 371.74 385.89 400.19 414.65 429.29 444.1 / - 2 17 15 1 33.38 49.08 63.74 77.56 90.97 104.29 117.75 131.16 144.52 159.1 172.61 187.93 - 202.93 216.97 233.12 249.09 265.6 282.35 299.1 316.61 334.25 351.81 370.33 389.19 408.39 427.95 447.71 467.7 - 487.13 508.12 529.48 551.2 573.27 595.67 618.43 640.7 / - 2 17 16 1 42.82 63.96 85.81 106.17 125.89 145.46 165.16 185.96 206.92 229.26 251.55 273.65 - 297.71 322.79 348.48 371.97 398.82 426.26 453.79 482.39 510.99 540.7 571.34 602.09 633.99 665.81 699.02 732.95 - 767.65 803.07 838.32 875.26 912.97 951.43 990.66 1030.63 / - 2 17 17 1 59.52 92.06 124.66 156.4 187.61 219.09 252.07 285.63 321.08 357.68 396.82 435.9 - 477.97 519.54 564.61 610.68 658.52 705.45 756.22 808.46 861.88 917.02 973.39 1031.81 1091.72 1152.61 1215.08 1278.49 - 1337.44 1399.04 1461.99 1525.4 1590.97 1657.99 1724.62 1794.62 / - 2 17 18 1 87.15 139.86 189.23 241.97 295.78 351.86 410.78 472.85 538.29 607.08 679.41 755.69 - 835.81 919.88 1007.84 1099.21 1193.59 1289.25 1384.11 1481.66 1581.62 1685.38 1791.58 1901.1 2013.09 2127.42 2244.16 2363.01 - 2486.75 2612.28 2741.04 2871.4 3004.09 3140.52 3278.18 3418.17 / - 2 17 19 1 131.58 212.47 293.02 384.88 485.76 594.98 711.59 836.43 969.2 1114.03 1267.91 1416.14 - 1576.58 1746.03 1917.75 2103.15 2289.95 2492.62 2692.33 2900.54 3112.29 3350.93 3576.65 3811.44 4053.75 4302.51 4558.66 4822.85 - 5094.31 5366.2 5652.82 5946.46 6236.37 6542.63 6851.77 7159.39 / - 2 17 20 1 202.32 330.83 463.5 606.93 796.46 1020.79 1267.13 1526.86 1812.92 2106.06 2435.39 2769.34 - 3130.17 3518.09 3896.01 4316.94 4761.5 5196.33 5686.39 6154.98 6643.49 7198.71 7716.8 8257.12 8812.58 9381.64 10038.93 10640.26 - 11262.43 11893.88 12556.56 13247.89 13964.89 14694.01 15451.73 16230.39 / - 2 18 1 1 226.22 225.37 225.1 225.1 225.26 225.54 225.91 226.38 226.92 227.53 228.22 228.97 - 229.79 230.67 231.62 232.63 233.7 234.84 236.03 237.29 238.61 240 241.44 242.94 244.5 246.13 247.81 249.56 - 251.36 253.23 255.16 257.14 259.19 261.29 263.45 265.68 / - 2 18 2 1 225.73 224.73 224.37 224.31 224.43 224.69 225.04 225.49 226.02 226.63 227.31 228.06 - 228.88 229.76 230.71 231.72 232.8 233.94 235.15 236.41 237.74 239.13 240.59 242.1 243.67 245.31 247.01 248.77 - 250.59 252.46 254.41 256.41 258.47 260.59 262.77 265.01 / - 2 18 3 1 224.6 223.11 222.52 222.39 222.46 222.68 223.01 223.45 223.97 224.58 225.26 226.01 - 226.84 227.74 228.7 229.73 230.83 231.99 233.21 234.5 235.86 237.28 238.76 240.3 241.9 243.57 245.3 247.09 - 248.95 250.86 252.84 254.87 256.94 259.11 261.33 263.61 / - 2 18 4 1 222.21 219.36 218.5 218.25 218.25 218.43 218.74 219.17 219.69 220.31 221.01 221.79 - 222.64 223.57 224.58 225.65 226.8 227.95 229.23 230.58 231.99 233.47 235.01 236.62 238.3 240.04 241.84 243.71 - 245.64 247.63 249.69 251.8 253.98 256.23 258.53 260.9 / - 2 18 5 1 217.52 211.92 210.71 210.25 210.14 210.25 210.53 210.95 211.5 212.15 212.9 213.75 - 214.68 215.7 216.8 217.98 219.24 220.57 221.98 223.46 225.01 226.63 228.32 230.08 231.91 233.81 235.78 237.76 - 239.85 242.01 244.24 246.53 248.88 251.3 253.78 256.32 / - 2 18 6 1 206.34 198.25 196.48 195.87 195.69 195.79 196.15 196.67 197.34 198.14 199.07 200.11 - 201.25 202.5 203.84 205.27 206.76 208.36 210.05 211.83 213.68 215.61 217.57 219.65 221.8 224.02 226.31 228.67 - 231.07 233.56 236.12 238.74 241.42 244.15 246.96 249.83 / - 2 18 7 1 186.68 174.76 172.76 172.31 172.38 172.79 173.46 174.34 175.4 176.62 177.98 179.49 - 181.07 182.81 184.66 186.61 188.62 190.76 192.99 195.31 197.66 200.13 202.69 205.27 207.97 210.73 213.53 216.43 - 219.43 222.42 225.55 228.72 231.93 235.19 238.52 241.88 / - 2 18 8 1 151.99 138.47 137.72 137.82 138.66 139.9 141.43 143.18 145.12 147.23 149.51 151.92 - 154.43 157.06 159.96 162.78 165.7 168.69 171.77 174.91 178.13 181.72 185.08 188.49 191.97 195.5 199.09 202.73 - 206.93 210.73 214.55 218.4 222.3 226.24 230.22 234.26 / - 2 18 9 1 99.59 97.56 98.68 100.67 103.11 105.82 108.64 111.6 114.77 117.99 121.41 124.84 - 128.47 132.09 135.92 139.7 143.7 147.63 151.79 155.84 160.16 164.33 168.71 173.16 177.49 181.98 186.52 191.21 - 195.72 200.53 205.12 209.76 214.43 219.68 224.45 229.25 / - 2 18 10 1 65.03 67.76 70.9 74.33 77.91 81.62 85.44 89.35 93.42 97.51 101.75 106.09 - 110.54 115.09 119.73 124.47 129.3 134.19 139.18 144.26 149.22 154.44 159.74 165.12 170.57 175.8 181.37 186.69 - 192.39 198.13 203.57 209.43 214.95 220.93 226.54 232.64 / - 2 18 11 1 50.34 55.04 59.06 63.08 67.16 71.33 75.6 79.98 84.48 89.11 93.86 98.74 - 103.73 108.84 114.06 119.38 124.91 131.18 137.25 143.21 149.34 155.47 161.76 168.01 174.34 180.76 187.25 193.82 - 200.47 207.19 213.92 220.36 227.18 234.13 241.16 248.27 / - 2 18 12 1 44.52 50.43 55.22 59.76 64.43 69.31 74.4 79.69 85.15 90.79 96.58 102.53 - 108.62 114.85 121.2 127.68 134.23 140.84 147.46 154.18 161 167.91 174.91 182.02 189.21 196.49 203.86 211.32 - 220.22 228.64 237.22 245.49 253.94 262.36 270.91 279.72 / - 2 18 13 1 39.06 46.17 52.5 58.83 65.18 71.72 78.36 84.93 92.1 99.48 107.03 114.75 - 122.61 130.62 138.77 147.05 155.46 163.91 172.35 181.16 190.1 199.17 207.37 216.66 226.05 235.49 244.18 253.74 - 264.98 272.51 282.16 292.1 302.16 312.34 322.63 334.41 / - 2 18 14 1 34.04 43.82 53.87 63.69 73.09 82.17 91.38 100.71 110.68 120.41 129.56 139.94 - 150.34 161.2 172.23 182.8 193.7 205.03 216.74 228.53 240.6 252.56 264.17 276.79 289.61 302.62 315.82 329.23 - 342.84 356.64 370.62 384.8 399.2 413.77 428.5 443.38 / - 2 18 15 1 34.11 49.45 64.08 77.71 91.24 104.62 117.78 131.41 144.72 158.25 172.62 187.86 - 202.74 216.66 232.69 248.53 264.89 281.03 298.07 315.39 332.84 350.19 368.54 387.21 406.24 425.61 445.26 464.96 - 484.11 504.85 525.93 547.38 569.18 591.33 613.83 635.82 / - 2 18 16 1 42.95 64.1 85.99 106 125.77 145.51 165.1 185.8 206.63 228.71 250.97 273.21 - 296.72 321.57 346.9 369.91 396.43 423.54 450.74 478.87 507.19 536.48 566.73 597.08 628.63 660.1 692.96 726.52 - 760.77 795.73 830.46 866.86 903.98 941.83 980.4 1019.7 / - 2 18 17 1 59.58 92.02 124.7 156.03 187.13 218.58 251.37 284.62 319.76 355.99 394.83 433.49 - 475.19 516.19 560.77 606.33 653.72 700.05 750.33 802 854.72 909.11 964.62 1022.14 1081.1 1140.98 1202.6 1265.29 - 1325.86 1387.83 1450.97 1515.29 1580.82 1647.92 1716.85 1786.03 / - 2 18 18 1 87.27 140.24 189.38 241.72 294.93 350.3 408.53 469.9 534.42 602.47 674.5 750.08 - 829.17 912.36 999.02 1089.45 1182.87 1278.93 1374.28 1471.77 1573.68 1677.53 1784.73 1895.48 2008.75 2124.58 2242.92 2365.53 - 2488.93 2616.21 2746.76 2879.15 3014.05 3152.63 3292.76 3435.32 / - 2 18 19 1 131.88 213.44 294.53 385.42 485.49 592.29 707.65 831.02 964.09 1104.98 1255.16 1407.9 - 1569.62 1740.3 1913.37 2102.05 2290.36 2486.17 2701.27 2911.18 3127.21 3351 3599.94 3839.02 4082.99 4336.13 4595.05 4864.69 - 5139.04 5423.67 5707.29 6005.25 6305.57 6612.93 6931.35 7246.56 / - 2 18 20 1 203.18 333.48 468.47 614.6 789.63 1012.26 1259.64 1517.24 1791.85 2093 2420.48 2763.78 - 3119.86 3503.37 3893.23 4315.47 4762.42 5199.36 5690 6166.94 6702.49 7212.04 7742.8 8348.86 8916.07 9496.71 10083.89 10693.49 - 11415.16 12062.97 12740.25 13438.24 14156.94 14896.03 15665.15 16459.34 / - 2 19 1 1 227.24 226.48 226.25 226.26 226.42 226.71 227.09 227.55 228.09 228.71 229.39 230.14 - 230.96 231.84 232.79 233.8 234.88 236.02 237.22 238.48 239.81 241.19 242.64 244.15 245.72 247.35 249.04 250.8 - 252.61 254.48 256.42 258.42 260.47 262.59 264.77 267 / - 2 19 2 1 226.52 225.54 225.17 225.09 225.2 225.45 225.8 226.24 226.76 227.37 228.05 228.8 - 229.62 230.5 231.46 232.48 233.56 234.71 235.92 237.2 238.54 239.94 241.4 242.93 244.52 246.17 247.88 249.65 - 251.49 253.39 255.35 257.37 259.45 261.59 263.79 266.05 / - 2 19 3 1 225.05 223.46 222.78 222.6 222.64 222.84 223.16 223.59 224.11 224.71 225.39 226.15 - 226.99 227.89 228.86 229.9 231.01 232.19 233.43 234.74 236.11 237.55 239.05 240.62 242.25 243.94 245.69 247.51 - 249.39 251.34 253.35 255.41 257.54 259.74 261.99 264.31 / - 2 19 4 1 222.24 219.13 218.13 217.79 217.74 217.87 218.16 218.57 219.08 219.69 220.39 221.18 - 222.05 222.99 224.01 225.11 226.27 227.51 228.82 230.2 231.65 233.16 234.75 236.4 238.11 239.89 241.74 243.65 - 245.63 247.67 249.78 251.95 254.18 256.48 258.84 261.26 / - 2 19 5 1 217.22 211.26 209.74 209.19 209.05 209.14 209.42 209.85 210.4 211.06 211.83 212.7 - 213.64 214.68 215.81 217.02 218.32 219.69 221.14 222.66 224.26 225.93 227.68 229.5 231.38 233.34 235.37 237.41 - 239.57 241.8 244.09 246.45 248.88 251.37 253.92 256.54 / - 2 19 6 1 205.96 197.38 195.39 194.79 194.63 194.77 195.13 195.67 196.36 197.19 198.15 199.19 - 200.37 201.64 203.02 204.49 206.06 207.71 209.41 211.23 213.14 215.12 217.18 219.32 221.5 223.78 226.14 228.57 - 231.04 233.61 236.25 238.95 241.72 244.53 247.43 250.39 / - 2 19 7 1 186.29 173.76 171.77 171.39 171.52 171.98 172.69 173.62 174.7 175.84 177.23 178.75 - 180.4 182.31 184.21 186.2 188.3 190.44 192.72 195.09 197.49 200.03 202.64 205.27 208.03 210.86 213.71 216.68 - 219.72 222.77 225.97 229.2 232.49 235.85 239.28 242.72 / - 2 19 8 1 151.1 138.11 137.37 137.57 138.5 139.78 141.33 143.14 145.13 147.27 149.55 151.96 - 154.48 157.11 160.02 162.86 165.79 168.79 171.88 175.05 178.28 181.91 185.29 188.73 192.24 195.8 199.43 203.1 - 206.84 211.13 214.98 218.89 222.84 226.85 230.91 235.01 / - 2 19 9 1 99.6 98.11 99.52 101.72 104.19 106.87 109.68 112.63 115.76 118.95 122.33 125.74 - 129.33 132.93 136.72 140.48 144.46 148.37 152.53 156.58 160.9 165.07 169.46 173.92 178.25 182.76 187.33 191.82 - 196.59 201.17 206.05 210.73 215.44 220.75 225.55 230.4 / - 2 19 10 1 66.16 69.04 72.44 76 79.64 83.34 87.12 91.01 95 99.08 103.27 107.49 - 111.88 116.37 120.96 125.66 130.45 135.31 140.27 145.33 150.28 155.49 160.79 166.17 171.35 176.87 182.46 187.79 - 193.52 198.94 204.76 210.66 216.22 222.24 227.89 234.04 / - 2 19 11 1 51.88 56.67 60.9 65.03 69.14 73.29 77.53 81.86 86.3 90.87 95.54 100.34 - 105.26 110.3 115.44 120.7 126.06 132.29 138.34 144.34 150.34 156.43 162.63 168.86 175.18 181.57 188.06 194.63 - 201.28 207.97 214.72 221.51 228.38 235.37 242.01 249.14 / - 2 19 12 1 46.31 52.17 56.88 61.43 66.12 71 76.06 81.3 86.71 92.28 98.01 103.89 - 109.91 116.06 122.35 128.76 135.3 141.9 148.5 155.18 161.95 168.83 175.79 182.86 190.02 197.27 204.61 212.04 - 220.12 228.6 237.41 245.84 254.23 262.92 271.34 280.03 / - 2 19 13 1 40.76 47.97 54.11 60.23 66.65 72.97 79.43 86.15 93.26 100.56 108.04 115.67 - 123.45 131.38 139.44 147.64 155.97 164.12 171.84 181.41 190.27 199.26 207.22 216.37 225.68 235.13 244 253.65 - 265.06 272.46 282.12 292.05 302.11 312.28 322.56 332.97 / - 2 19 14 1 35.82 45.51 55.62 65.16 74.25 83.13 92.44 101.44 111.35 120.29 130.03 140.31 - 150.6 161.34 172.26 182.71 193.44 204.67 216.16 227.91 239.83 251.63 263.05 275.51 288.16 301 314.03 327.26 - 340.67 354.26 368.02 381.99 396.16 410.53 425.11 439.89 / - 2 19 15 1 35.54 50.76 65.09 78.59 91.74 105.09 117.51 131.08 144.84 158.72 172.42 187.51 - 201.14 215.86 231.62 247.29 263.42 279.18 295.98 313.13 329.93 347.35 365.38 383.74 402.42 421.43 440.61 458.97 - 478.69 499.03 519.72 540.75 562.13 583.86 605.94 627.12 / - 2 19 16 1 42.9 64.97 86.29 106.41 125.78 145.18 165.03 185.55 206.15 226.92 250.01 271.29 - 294.88 319.25 344.11 366.43 392.41 418.76 445.47 473.12 500.63 529.51 559.16 588.89 619.83 650.65 682.88 715.8 - 749.38 783.65 817.56 853.2 889.53 926.56 964.29 1002.71 / - 2 19 17 1 60.71 92.07 124.9 156.13 186.66 218.05 249.94 283.23 317.96 353.54 391.98 429.9 - 470.98 511.11 554.74 599.83 646.25 691.43 740.67 791.22 842.76 895.87 950.09 1006.33 1064 1122.52 1182.99 1244.73 - 1306.14 1368.73 1432.3 1497.2 1563.66 1631.74 1700.83 1771.33 / - 2 19 18 1 87.75 140.71 189.86 241.53 293.71 348 405.13 465.47 529.19 596.37 667.05 741.95 - 819.43 901.29 985.92 1075.03 1167.4 1262.54 1358.64 1457.69 1559.7 1665.37 1774.11 1886.1 2000.03 2118.43 2238.59 2361.82 - 2488.77 2616.88 2748.84 2884.16 3021.58 3162.62 3305.57 3452.66 / - 2 19 19 1 132.78 215.46 297.46 387.27 484.97 589.78 703.23 824.79 955.44 1094.28 1242.11 1395.95 - 1557.93 1728.92 1904.48 2093.27 2284.09 2482.44 2698.49 2912.05 3133.71 3361 3596.32 3856.89 4108.42 4366.5 4633.02 4906.94 - 5188.72 5478.52 5773.61 6077.5 6381.97 6699.48 7020.01 7348.35 / - 2 19 20 1 205.01 338.02 476.28 625.6 789.04 998.01 1240.96 1495.22 1777.74 2076.81 2402.35 2739.91 - 3104.06 3488.07 3887.67 4308.81 4742.94 5212.61 5706.19 6184.95 6723.33 7241.34 7825.54 8381.78 8950.81 9538.26 10212.65 10838.35 - 11485.32 12153.02 12841.39 13544.94 14392.49 15151.56 15931.65 16732.61 / - 2 20 1 1 227.39 226.54 226.23 226.18 226.31 226.57 226.93 227.38 227.91 228.52 229.21 229.96 - 230.78 231.68 232.64 233.66 234.75 235.91 237.13 238.41 239.76 241.17 242.64 244.18 245.78 247.44 249.17 250.96 - 252.81 254.72 256.69 258.73 260.82 262.98 265.2 267.49 / - 2 20 2 1 226.37 225.21 224.66 224.52 224.59 224.8 225.13 225.56 226.08 226.69 227.37 228.13 - 228.96 229.86 230.83 231.87 232.98 234.15 235.39 236.7 238.07 239.51 241.01 242.58 244.21 245.9 247.66 249.48 - 251.36 253.31 255.32 257.4 259.53 261.73 263.99 266.31 / - 2 20 3 1 224.64 222.67 221.94 221.67 221.64 221.79 222.08 222.48 222.99 223.59 224.27 225.04 - 225.88 226.8 227.8 228.87 230.01 231.21 232.49 233.84 235.25 236.74 238.29 239.9 241.59 243.34 245.15 247.03 - 248.97 250.98 253.06 255.2 257.4 259.66 261.99 264.39 / - 2 20 4 1 221.71 218.3 217 216.61 216.51 216.62 216.89 217.3 217.81 218.43 219.14 219.95 - 220.84 221.81 222.86 223.99 225.19 226.47 227.82 229.24 230.74 232.31 233.95 235.65 237.43 239.27 241.19 243.17 - 245.22 247.33 249.51 251.71 254.03 256.41 258.85 261.36 / - 2 20 5 1 216.65 210.17 208.55 208.02 207.86 207.95 208.22 208.65 209.22 209.9 210.69 211.58 - 212.56 213.62 214.79 216.04 217.37 218.79 220.28 221.84 223.49 225.22 227.02 228.9 230.85 232.84 234.94 237.1 - 239.34 241.64 244.02 246.46 248.95 251.53 254.17 256.88 / - 2 20 6 1 205.38 196.25 194.23 193.66 193.53 193.69 194.08 194.65 195.37 196.21 197.19 198.29 - 199.5 200.82 202.24 203.76 205.37 207.02 208.81 210.68 212.64 214.68 216.76 218.96 221.23 223.59 226.01 228.47 - 231.05 233.69 236.41 239.16 242.01 244.93 247.91 250.96 / - 2 20 7 1 185.73 172.72 170.69 170.42 170.64 171.17 171.95 172.82 173.96 175.23 176.67 178.22 - 179.91 181.71 183.63 185.65 187.76 189.99 192.27 194.96 197.47 200.03 202.7 205.4 208.23 211.13 214.04 217.08 - 220.18 223.29 226.52 229.76 233.11 236.57 240 243.58 / - 2 20 8 1 150.98 137.99 137.47 137.95 139.03 140.39 142.01 143.84 145.83 147.97 150.23 152.61 - 155.11 157.72 160.43 163.41 166.32 169.31 172.38 175.53 178.77 182.08 185.81 189.27 192.8 196.39 200.04 203.74 - 207.5 211.31 215.69 219.62 223.6 227.63 231.71 235.84 / - 2 20 9 1 101.01 100.71 102.5 104.76 107.21 109.8 112.52 115.36 118.32 121.46 124.64 128 - 131.39 134.98 138.55 142.21 146.1 149.92 154.01 158.01 162.29 166.43 170.8 175.06 179.57 184.07 188.63 193.1 - 197.86 202.43 207.31 211.98 216.68 221.44 226.78 231.63 / - 2 20 10 1 69.77 73.31 77.09 80.74 84.32 87.89 91.51 95.16 98.94 102.81 106.73 110.82 - 115.02 119.33 123.76 128.17 132.8 137.53 142.36 147.33 152.19 157.33 162.56 167.88 173.01 178.47 184.02 189.3 - 194.99 200.37 206.15 211.63 217.54 223.53 229.15 234.8 / - 2 20 11 1 56.44 61.71 66.24 70.44 74.53 78.58 82.68 86.83 91.07 95.4 99.84 104.39 - 109.06 113.85 118.75 123.77 129.21 135.11 140.83 146.58 152.44 158.39 164.48 170.59 176.79 183.09 189.47 195.88 - 202.36 208.93 215.58 222.27 228.68 235.51 242.48 249.53 / - 2 20 12 1 51.44 56.74 61.44 66.05 70.73 75.52 80.45 85.52 90.74 96.11 101.61 107.27 - 113.05 118.97 125.02 131.19 137.46 143.79 150.23 156.79 163.47 170.24 177.05 183.94 190.93 198.02 205.2 212.48 - 219.81 227.82 236.56 245.01 253.38 261.69 270.18 278.64 / - 2 20 13 1 46.19 52.77 58.35 64.15 70.14 76.4 82.89 89.59 96.48 103.54 110.75 118.11 - 125.61 133.25 141.02 148.92 156.6 163.82 173.04 181.48 190.05 198.76 206.18 215.08 224.11 234.17 241.73 251.13 - 262.75 272.55 279.39 289.11 299.08 309.23 319.44 329.72 / - 2 20 14 1 40.69 50.35 59.72 68.82 77.27 86.06 94.57 104.01 112.41 121.48 131.35 140.99 - 151.11 161.5 171.36 181.88 192.12 203.17 214.4 225.8 237.27 248.27 259.82 271.95 284.27 296.79 309.49 322.38 - 335.46 348.74 362.17 375.79 389.6 403.61 417.83 432.24 / - 2 20 15 1 39.08 54.55 68.67 81.57 94.15 106.76 119.14 131.4 145.32 157.4 171.77 186.4 - 199.27 213.53 228.65 243.82 259.64 274.84 291.29 308.02 323.95 341.23 358.81 376.54 394.73 413.24 430.88 449.64 - 468.83 488.63 508.77 529.24 550.05 571.19 591.28 612.75 / - 2 20 16 1 45.56 68.81 89.2 108.29 126.63 145.42 165.11 184.98 204.9 224.86 247.18 267.22 - 290.5 314.18 337.32 359.5 384.71 410.27 436.13 463.15 489.59 517.7 546.54 575.4 605.41 635.42 666.8 698.84 - 731.38 764.35 797.42 832.07 867.38 903.35 939.97 977.24 / - 2 20 17 1 64.18 95.27 126.66 156.21 186.05 216.28 247.82 281.06 314.97 349.67 385.19 424.23 - 463.24 502.38 544.71 588.45 630.18 676.11 723.9 772.7 822.79 874.56 927.01 981.72 1037.05 1094.59 1153.51 1213.52 - 1274.99 1337.98 1402.23 1468.16 1535.4 1603.64 1673.73 1745.2 / - 2 20 18 1 92.74 141.45 190.77 241.29 292.22 345.17 401.46 460.48 523.23 588.85 657.52 731.05 - 806.26 886.46 968.08 1054.87 1145.14 1238.71 1333.81 1434.31 1538.06 1645.08 1755.02 1868.11 1984.33 2103.69 2226.15 2351.6 - 2480.1 2611.54 2746.22 2883.68 3024.08 3167.87 3314.16 3463.32 / - 2 20 19 1 136.86 220.24 302.19 391.16 486.47 588.76 698.97 817.66 944.77 1081.03 1226.07 1379.87 - 1542.58 1714.25 1891.67 2081.25 2275.05 2476.42 2692.09 2909.46 3134.17 3366.12 3605.33 3866.06 4122.15 4385.79 4656.9 4935.3 - 5222.44 5517.89 5819.11 6129.5 6447.42 6769.64 7102.39 7438.9 / - 2 20 20 1 209.56 346.83 489.87 643.13 808.46 986.35 1176.82 1379.85 1636.54 1927.29 2234.17 2564.86 - 2914.18 3288.56 3670.64 4089.16 4536.19 4980.28 5479 5968.36 6480.57 7016.16 7575.72 8174.73 8752.92 9388.03 10022.89 10636.65 - 11352.87 12014.18 12696.6 13501.78 14233.39 14986.25 15883.6 16686.61 / - 3 1 1 1 196.22 196.04 196.1 196.3 196.61 197 197.46 197.99 198.6 199.26 199.99 200.78 - 201.63 202.53 203.5 204.52 205.6 206.74 207.93 209.18 210.49 211.85 213.27 214.74 216.27 217.85 219.49 221.18 - 222.93 224.73 226.58 228.49 230.46 232.48 234.55 236.68 / - 3 1 2 1 196.13 195.94 196 196.19 196.49 196.88 197.35 197.88 198.48 199.15 199.87 200.66 - 201.51 202.42 203.38 204.41 205.49 206.63 207.82 209.07 210.38 211.74 213.16 214.63 216.16 217.74 219.38 221.08 - 222.83 224.63 226.49 228.4 230.37 232.39 234.46 236.59 / - 3 1 3 1 195.97 195.76 195.8 195.99 196.29 196.67 197.13 197.66 198.26 198.93 199.65 200.44 - 201.29 202.2 203.16 204.19 205.27 206.41 207.61 208.86 210.17 211.53 212.95 214.43 215.96 217.54 219.19 220.88 - 222.63 224.44 226.3 228.22 230.19 232.21 234.29 236.42 / - 3 1 4 1 195.68 195.42 195.44 195.61 195.9 196.28 196.73 197.26 197.86 198.52 199.25 200.04 - 200.89 201.8 202.76 203.79 204.87 206.02 207.21 208.47 209.78 211.15 212.57 214.05 215.58 217.18 218.82 220.52 - 222.28 224.09 225.95 227.88 229.85 231.88 233.97 236.11 / - 3 1 5 1 194.95 194.49 194.39 194.46 194.71 195.06 195.49 196.01 196.6 197.26 197.98 198.77 - 199.62 200.53 201.51 202.54 203.63 204.79 206 207.26 208.59 209.97 211.41 212.9 214.45 216.06 217.72 219.44 - 221.22 223.05 224.94 226.88 228.88 230.93 233.04 235.2 / - 3 1 6 1 192.15 190.13 189.77 189.72 189.87 190.17 190.58 191.09 191.68 192.36 193.12 193.95 - 194.86 195.83 196.87 197.97 199.14 200.37 201.67 203.03 204.45 205.93 207.47 209.06 210.72 212.44 214.2 216.02 - 217.89 219.83 221.82 223.86 225.96 228.12 230.34 232.61 / - 3 1 7 1 182.27 178.14 177.34 177.06 177.13 177.43 177.9 178.51 179.24 180.09 181.02 182.05 - 183.18 184.38 185.67 187.03 188.46 189.97 191.55 193.19 194.85 196.62 198.46 200.34 202.29 204.3 206.36 208.48 - 210.66 212.87 215.15 217.49 219.87 222.31 224.8 227.35 / - 3 1 8 1 158.81 151.36 150.2 149.83 150.07 150.67 151.53 152.6 153.87 155.27 156.84 158.52 - 160.31 162.18 164.14 166.19 168.29 170.48 172.73 175.32 177.7 180.13 182.58 185.1 187.67 190.26 192.92 195.62 - 198.34 201.12 203.94 207.38 210.29 213.24 216.22 219.25 / - 3 1 9 1 111.38 104.21 104.27 105.43 107.13 109.14 111.4 113.86 116.55 119.29 122.21 125.16 - 128.17 131.34 134.6 137.8 141.13 144.52 148 151.41 154.97 158.46 161.95 165.81 169.38 172.93 176.54 180.14 - 184.2 187.87 191.53 195.23 198.93 203.22 206.96 210.74 / - 3 1 10 1 66.59 67.64 70.05 72.83 75.81 78.96 82.24 85.64 89.1 92.73 96.46 100.3 - 104.22 108.24 112.35 116.55 120.84 125.02 129.43 133.9 138.44 142.81 147.45 152.12 156.58 161.35 165.86 170.7 - 175.6 180.19 185.24 189.9 194.76 199.36 204.22 209 / - 3 1 11 1 50.35 53.36 56.59 59.98 63.46 67.04 70.73 74.54 78.47 82.52 86.69 90.98 - 95.38 100.42 105.32 110.27 115.21 120.34 125.44 130.63 135.89 141.4 146.81 152.29 157.84 163.4 169.03 174.74 - 180.51 186 191.85 197.76 203.73 209.33 215.38 221.48 / - 3 1 12 1 45.63 49.54 53.15 56.86 60.85 65.08 69.51 74.14 78.95 83.92 89.05 94.33 - 99.74 105.3 110.94 116.63 122.41 128.3 134.28 140.36 146.54 152.97 160.2 167.36 174.25 181.16 188.09 195.06 - 201.99 208.99 216.38 223.53 230.75 238.03 245.37 252.73 / - 3 1 13 1 40.85 46.27 51.19 56.14 61.31 66.76 72.56 78.66 85.26 91.76 98.57 105.73 - 112.74 120.22 127.4 134.95 142.64 150.46 158.42 166.52 174.7 182.89 191.12 199.42 207.78 216.23 224.78 233.42 - 242.73 252.74 262.45 272.06 281.9 291.56 301.26 311.11 / - 3 1 14 1 36.93 43.96 52.65 61.14 69.35 78.13 86.19 95.33 104.24 112.67 122.29 131.96 - 142.09 152.4 162.5 172.17 183.01 194.03 205.25 216.51 227.79 238.82 250.75 262.84 275 287.23 299.57 312.04 - 324.66 337.42 350.33 363.41 377.43 392.01 406.69 421.31 / - 3 1 15 1 35.12 49.53 62.96 75.64 88.44 100.56 113.21 125.82 139.98 152.38 166.99 181.88 - 195.96 209.88 225.36 240.83 257.09 272.8 289.71 306.84 323.48 341.42 359.75 378.37 397.3 415.5 435.2 453.99 - 473.93 494.19 514.8 535.76 557.97 580.99 604.32 627.82 / - 3 1 16 1 44.24 65.09 85.72 104.72 123.66 142.7 163.01 183.61 204.38 225.44 248.73 270.32 - 294.46 319.39 342.07 368.29 394.82 421.97 450.07 477.88 507.54 537.96 569.11 599.81 632.37 665.43 699.16 733.75 - 769.47 806.98 845.15 884.08 923.16 963.02 1003.35 1043.19 / - 3 1 17 1 61.8 93.55 125.32 155.56 186.51 217.94 251.19 285.54 320.89 359.69 398.06 439.67 - 480.72 525.27 571 615.96 665.03 716.03 768.41 822.66 878.25 935.98 996.1 1057.43 1119.24 1180.05 1237.49 1289.89 - 1334.35 1375.82 1424.39 1470.9 1520.86 1572.86 1624.29 1675.07 / - 3 1 18 1 89.97 141.16 191.07 242.74 296.19 352.98 413.15 477.32 545.59 617.29 692.63 772.68 - 857.32 946.51 1038.79 1133.08 1230.14 1319.55 1407.06 1496.69 1590.38 1686.13 1785.01 1885.39 1987.24 2089.35 2194.64 2302.88 - 2408.95 2520.65 2633.8 2749.44 2866.37 2984.49 3104.54 3229.13 / - 3 1 19 1 134.75 213.9 298.64 393.04 496.17 607.49 728.23 859.82 1004.73 1156.45 1302 1444.36 - 1588.58 1747.41 1901.23 2060.21 2232.01 2400.61 2572.1 2753.06 2933.76 3123.12 3316.81 3514.34 3711.51 3917.81 4130.06 4343.22 - 4566.18 4786.74 5018.94 5246.15 5485.51 5732.08 5966.83 6224.63 / - 3 1 20 1 204.52 326.91 475.5 664.4 878.45 1122.57 1369.06 1612.91 1871.36 2156.67 2437.74 2748.21 - 3058.88 3402.01 3745.92 4097.22 4495.96 4876.26 5273.57 5680.93 6105.58 6532.36 6982.38 7433.4 7910.61 8390.56 8891.79 9377.25 - 9905.21 10435.15 10978.11 11544.44 12118.26 12681.18 13287.89 13925.27 / - 3 2 1 1 198.06 197.87 197.92 198.12 198.42 198.81 199.27 199.81 200.41 201.08 201.8 202.59 - 203.44 204.35 205.32 206.34 207.43 208.57 209.76 211.02 212.33 213.69 215.11 216.59 218.12 219.71 221.35 223.05 - 224.8 226.61 228.47 230.39 232.36 234.38 236.46 238.6 / - 3 2 2 1 197.97 197.76 197.81 198.01 198.31 198.69 199.16 199.69 200.29 200.96 201.68 202.47 - 203.32 204.23 205.2 206.23 207.31 208.45 209.65 210.9 212.21 213.58 215 216.48 218.01 219.6 221.24 222.94 - 224.7 226.51 228.37 230.29 232.26 234.29 236.37 238.51 / - 3 2 3 1 197.8 197.57 197.61 197.79 198.09 198.47 198.93 199.47 200.07 200.73 201.46 202.25 - 203.1 204.01 204.97 206 207.08 208.23 209.42 210.68 211.99 213.36 214.78 216.26 217.8 219.39 221.04 222.74 - 224.49 226.31 228.17 230.09 232.07 234.1 236.19 238.33 / - 3 2 4 1 197.49 197.22 197.23 197.4 197.69 198.07 198.53 199.06 199.65 200.32 201.04 201.83 - 202.68 203.59 204.56 205.59 206.68 207.82 209.02 210.28 211.59 212.96 214.39 215.87 217.41 219.01 220.66 222.37 - 224.13 225.94 227.82 229.74 231.72 233.76 235.85 238 / - 3 2 5 1 196.66 196.16 195.99 196.09 196.34 196.68 197.12 197.64 198.23 198.88 199.61 200.4 - 201.26 202.17 203.15 204.19 205.28 206.44 207.65 208.92 210.26 211.64 213.09 214.59 216.15 217.77 219.44 221.17 - 222.95 224.79 226.68 228.63 230.64 232.7 234.82 236.99 / - 3 2 6 1 193.65 191.47 191.09 190.99 191.15 191.46 191.89 192.41 193.02 193.71 194.47 195.31 - 196.22 197.2 198.25 199.32 200.49 201.73 203.04 204.4 205.83 207.31 208.86 210.47 212.13 213.86 215.64 217.49 - 219.39 221.34 223.36 225.43 227.55 229.72 231.95 234.23 / - 3 2 7 1 183.35 178.97 178.11 177.85 177.92 178.22 178.7 179.32 180.06 180.92 181.88 182.93 - 184.07 185.29 186.59 187.95 189.41 190.94 192.54 194.2 195.92 197.72 199.57 201.45 203.42 205.45 207.54 209.69 - 211.88 214.14 216.45 218.81 221.21 223.68 226.19 228.76 / - 3 2 8 1 159.31 151.45 150.19 149.95 150.22 150.84 151.73 152.83 154.11 155.56 157.16 158.88 - 160.68 162.6 164.6 166.66 168.82 171.05 173.31 175.66 178.4 180.84 183.35 185.91 188.5 191.15 193.84 196.56 - 199.34 202.16 205.01 207.91 211.46 214.44 217.47 220.54 / - 3 2 9 1 110.97 104.06 104.24 105.43 107.17 109.2 111.49 113.97 116.68 119.46 122.34 125.4 - 128.45 131.66 134.85 138.18 141.55 144.97 148.34 151.93 155.37 159 162.53 166.07 170.04 173.64 177.27 180.95 - 185.06 188.78 192.49 196.24 199.99 203.79 208.14 211.96 / - 3 2 10 1 66.72 67.83 70.22 73.03 76.08 79.27 82.58 85.97 89.51 93.17 96.94 100.81 - 104.77 108.82 112.97 117.07 121.37 125.74 130.18 134.69 139.05 143.67 148.35 152.82 157.56 162.37 166.92 171.81 - 176.41 181.38 186.04 191.14 196.13 200.83 205.77 210.62 / - 3 2 11 1 50.44 53.52 56.78 60.19 63.7 67.32 71.05 74.9 78.86 82.96 87.17 91.5 - 95.94 100.97 105.92 110.89 115.96 121.05 126.29 131.52 136.82 142.2 147.64 153.38 158.97 164.59 170.26 176.03 - 181.53 187.39 193.3 199.26 205.29 210.94 217.05 222.77 / - 3 2 12 1 45.58 49.65 53.32 57.07 61.09 65.35 69.83 74.5 79.34 84.36 89.53 94.85 - 100.31 105.91 111.59 117.33 123.16 129.09 135.12 141.25 147.47 153.78 161.07 168.35 175.25 182.33 189.23 196.41 - 203.41 210.47 217.6 224.8 232.06 239.39 246.78 254.24 / - 3 2 13 1 40.74 46.29 51.31 56.32 61.55 67.05 72.89 79.38 85.55 92.62 99.53 106.27 - 113.5 121.24 128.09 135.68 143.42 151.29 159.3 167.45 175.68 183.91 192.19 200.54 208.96 217.47 226.07 234.77 - 243.85 253.63 263.76 273.52 283.37 293.17 303.19 313.13 / - 3 2 14 1 36.81 43.98 52.73 61.3 69.57 78.4 86.51 95.7 104.64 113.13 122.8 132.51 - 142.68 153.04 163.19 172.92 183.81 194.89 206.16 217.47 228.45 239.89 251.87 264.03 276.24 288.54 300.94 313.48 - 326.16 339 351.98 365.13 378.84 393.54 408.37 423.2 / - 3 2 15 1 35.1 49.56 63.03 75.8 88.63 100.8 113.5 126.15 140.36 152.81 167.46 182.4 - 195.42 210.52 226.05 241.58 257.89 273.65 290.61 307.79 324.49 342.48 360.85 379.55 398.55 416.83 435.98 455.49 - 475.51 495.85 516.53 537.57 559.44 582.6 606.12 629.49 / - 3 2 16 1 44.2 65.08 85.76 104.83 123.81 143.05 163.23 183.87 204.68 225.78 249.13 270.78 - 294.97 319.96 342.69 368.98 395.71 422.76 450.88 479.26 508.41 538.84 570.02 600.74 633.32 666.45 700.24 734.84 - 769.77 807.28 845.6 884.82 924.21 964.07 1004.09 1045 / - 3 2 17 1 61.71 93.49 125.33 155.81 186.64 218.25 251.35 285.49 321.46 359.87 398.28 439.91 - 480.99 525.56 571.29 616.25 665.26 716.2 768.71 822.88 878.51 936.19 996.13 1057.47 1119.52 1180.7 1238.35 1292.02 - 1335.6 1380.13 1426.93 1475.48 1525.43 1579.67 1631.71 1681.93 / - 3 2 18 1 89.83 141.22 191.06 242.82 296.52 353.15 413.29 477.36 545.54 617.22 692.41 772.34 - 856.75 945.81 1038.1 1132.44 1229.44 1320.14 1409.04 1500.82 1595.96 1685.91 1778.64 1871.84 1965 2060.35 2157.35 2258.63 - 2355.92 2460.74 2563.53 2671.5 2775.92 2884.68 2992.68 3109.27 / - 3 2 19 1 134.56 213.73 298.22 393.1 495.25 607.44 727.34 859.3 1000.92 1151.49 1301.5 1444.49 - 1589.3 1748.92 1904.75 2065.89 2239.95 2410.5 2583.91 2766.51 2948.7 3140.43 3336.05 3533.59 3735.06 3943.6 4155.18 4373.53 - 4600.01 4821.69 5056.16 5282.5 5527.78 5776.57 6014.51 6270.2 / - 3 2 20 1 204.32 326.79 473.78 661.36 873.87 1116.15 1364.15 1613.5 1872.85 2148.49 2441.71 2753.61 - 3065.84 3410.88 3756.5 4109.72 4512.36 4899.45 5300.35 5709.53 6142.61 6574.52 7029.68 7485.71 7968.2 8453.26 8959.48 9450.03 - 9983.06 10518.51 11067.36 11639.92 12219.81 12789.04 13402.1 14046.24 / - 3 3 1 1 199.89 199.69 199.74 199.93 200.23 200.62 201.09 201.62 202.22 202.89 203.62 204.41 - 205.26 206.17 207.14 208.16 209.25 210.39 211.59 212.84 214.16 215.52 216.95 218.43 219.97 221.56 223.21 224.91 - 226.67 228.48 230.35 232.27 234.25 236.28 238.37 240.51 / - 3 3 2 1 199.8 199.58 199.63 199.82 200.12 200.5 200.96 201.5 202.1 202.76 203.49 204.28 - 205.13 206.04 207.01 208.04 209.13 210.27 211.47 212.72 214.04 215.41 216.83 218.31 219.85 221.44 223.09 224.8 - 226.56 228.37 230.24 232.17 234.15 236.18 238.27 240.42 / - 3 3 3 1 199.62 199.38 199.41 199.6 199.89 200.27 200.73 201.27 201.87 202.53 203.26 204.05 - 204.9 205.81 206.78 207.81 208.89 210.04 211.24 212.5 213.81 215.18 216.61 218.09 219.63 221.23 222.88 224.59 - 226.35 228.16 230.04 231.96 233.95 235.99 238.08 240.23 / - 3 3 4 1 199.3 199.01 199.02 199.2 199.48 199.86 200.32 200.84 201.44 202.11 202.84 203.63 - 204.48 205.39 206.36 207.39 208.48 209.62 210.82 212.08 213.4 214.78 216.21 217.69 219.24 220.84 222.49 224.2 - 225.97 227.79 229.67 231.6 233.59 235.63 237.73 239.89 / - 3 3 5 1 198.35 197.82 197.62 197.72 197.96 198.31 198.75 199.26 199.85 200.51 201.24 202.03 - 202.89 203.8 204.78 205.82 206.92 208.08 209.3 210.58 211.91 213.31 214.76 216.27 217.83 219.45 221.13 222.87 - 224.66 226.51 228.41 230.37 232.39 234.46 236.59 238.77 / - 3 3 6 1 195.1 192.8 192.28 192.23 192.38 192.69 193.11 193.63 194.24 194.93 195.7 196.55 - 197.47 198.46 199.52 200.65 201.84 203.1 204.42 205.8 207.25 208.74 210.26 211.87 213.55 215.28 217.08 218.93 - 220.84 222.81 224.83 226.91 229.05 231.25 233.5 235.81 / - 3 3 7 1 184.38 179.69 178.82 178.57 178.65 178.95 179.44 180.07 180.83 181.7 182.67 183.75 - 184.9 186.12 187.45 188.85 190.32 191.88 193.5 195.16 196.9 198.72 200.6 202.54 204.54 206.59 208.67 210.84 - 213.07 215.35 217.69 220.08 222.52 225.01 227.56 230.15 / - 3 3 8 1 159.24 151.57 150.23 150.01 150.3 150.94 151.86 153 154.29 155.78 157.41 159.14 - 161 162.95 164.97 167.09 169.29 171.54 173.86 176.25 179.01 181.51 184.08 186.65 189.3 191.99 194.7 197.49 - 200.3 203.15 206.05 208.99 211.96 215.62 218.69 221.79 / - 3 3 9 1 110.96 104.01 104.22 105.39 107.16 109.22 111.57 114.08 116.74 119.61 122.52 125.64 - 128.72 131.96 135.17 138.55 141.95 145.32 148.83 152.44 155.93 159.6 163.17 166.73 170.67 174.33 178 181.73 - 185.44 189.67 193.42 197.2 201.03 204.86 209.29 213.17 / - 3 3 10 1 66.77 68.04 70.43 73.27 76.34 79.57 82.88 86.34 89.92 93.61 97.41 101.32 - 105.31 109.3 113.46 117.71 122.04 126.45 130.93 135.48 139.87 144.53 149.25 153.76 158.54 163.39 167.98 172.91 - 177.56 182.57 187.27 192.37 197.15 202.24 207.3 212.23 / - 3 3 11 1 50.54 53.7 56.96 60.4 63.94 67.59 71.36 75.25 79.26 83.39 87.64 92.01 - 96.49 101.51 106.58 111.59 116.7 121.84 127.13 132.4 137.76 143.18 148.68 154.24 159.86 165.54 171.26 177.02 - 182.87 188.78 194.75 200.77 206.46 212.56 218.74 224.5 / - 3 3 12 1 45.54 49.75 53.49 57.28 61.33 65.63 70.14 74.85 79.73 84.79 90 95.37 - 100.88 106.52 112.24 118.02 123.9 129.87 135.95 142.13 148.4 154.76 161.93 169.33 176.42 183.37 190.52 197.58 - 204.83 211.96 219.15 226.41 233.74 241.14 248.6 256.13 / - 3 3 13 1 40.64 46.31 51.42 56.5 61.79 67.34 73.21 79.76 86.38 93.14 100.1 106.66 - 114.09 121.5 128.77 136.41 144.2 152.12 160.18 168.38 176.65 184.94 193.27 201.67 210.14 218.71 227.36 236.12 - 244.97 254.82 265.07 274.97 284.84 294.71 304.87 314.86 / - 3 3 14 1 36.72 43.99 52.81 61.45 69.78 78.68 86.83 96.06 104.49 113.58 123.29 133.05 - 143.28 153.69 163.88 173.66 184.6 195.73 207.06 218.43 229.46 240.96 253 265.21 277.49 289.85 302.32 314.92 - 327.67 340.57 353.63 366.85 380.23 394.61 409.59 424.66 / - 3 3 15 1 35.08 49.63 63.1 76.03 88.82 101.04 113.78 126.48 140.73 153.24 167.93 182.91 - 195.82 211.16 226.74 242.32 258.68 274.5 291.51 308.73 325.48 343.52 361.94 380.72 399.79 418.15 437.38 456.97 - 477.07 497.49 518.25 539.37 560.85 583.67 607.35 631.36 / - 3 3 16 1 44.2 65.07 85.8 104.93 123.96 143.59 163.46 184.12 204.97 226.11 249.52 271.23 - 295.47 320.51 343.31 369.64 396.51 423.52 451.68 479.83 509.25 539.7 570.89 601.63 634.2 667.42 701.25 735.91 - 770.88 808 846.46 885.48 925.2 964.94 1005.34 1045.57 / - 3 3 17 1 61.61 93.43 125.33 156.11 186.76 218.4 251.52 286.42 322.41 360.03 398.47 440.11 - 481.23 525.8 571.54 616.78 665.45 716.31 768.74 822.99 879.07 936.31 995.44 1056.87 1119.28 1181.12 1239.33 1293.49 - 1336.91 1385.2 1433.37 1483.79 1536.1 1591.15 1644.76 1696.83 / - 3 3 18 1 89.68 141.14 191 242.89 296.66 353.32 413.42 477.41 545.48 617.12 692.15 771.9 - 856.1 944.97 1037.31 1131.71 1228.59 1316.88 1400.46 1488.39 1575.5 1666.13 1760.33 1855.64 1950.89 2048.15 2145.15 2247.36 - 2345.43 2450.63 2556.07 2662.57 2771.98 2879.6 2989.98 3110.26 / - 3 3 19 1 134.37 213.55 297.79 392.45 495.33 606.14 727.08 858.73 1000.04 1150.41 1300.9 1444.52 - 1589.96 1750.24 1906.89 2069.87 2246.46 2419.34 2596.45 2779.09 2964.17 3156.85 3354.19 3555.95 3759.8 3970.58 4184.46 4405.18 - 4633.96 4858.4 5095.18 5324.47 5572.18 5823.3 6064.48 6322.9 / - 3 3 20 1 204.11 326.68 471.21 658.03 872.9 1115.37 1363.76 1608.44 1874.35 2151.22 2445.77 2759.16 - 3072.98 3419.96 3767.34 4122.61 4527.46 4921.34 5324.94 5736.19 6176.64 6615.69 7076.63 7530.88 8018.71 8516.86 9019.36 9524.72 - 10053.48 10604.51 11160.11 11729.64 12325.93 12901.79 13521.85 14157.77 / - 3 4 1 1 201.72 201.51 201.55 201.75 202.05 202.43 202.89 203.43 204.03 204.7 205.43 206.22 - 207.07 207.98 208.95 209.98 211.06 212.21 213.41 214.67 215.98 217.35 218.78 220.27 221.81 223.4 225.05 226.76 - 228.52 230.34 232.22 234.14 236.13 238.17 240.26 242.41 / - 3 4 2 1 201.62 201.4 201.44 201.62 201.92 202.31 202.77 203.3 203.9 204.57 205.3 206.09 - 206.94 207.85 208.82 209.85 210.94 212.08 213.28 214.54 215.86 217.23 218.66 220.14 221.69 223.28 224.94 226.65 - 228.41 230.23 232.11 234.04 236.02 238.06 240.16 242.31 / - 3 4 3 1 201.44 201.19 201.21 201.4 201.69 202.07 202.53 203.06 203.66 204.33 205.06 205.85 - 206.7 207.61 208.58 209.61 210.7 211.84 213.05 214.31 215.62 217 218.43 219.92 221.46 223.06 224.71 226.42 - 228.19 230.01 231.89 233.83 235.82 237.86 239.96 242.11 / - 3 4 4 1 201.1 200.81 200.81 200.98 201.27 201.65 202.1 202.63 203.23 203.89 204.62 205.41 - 206.26 207.18 208.15 209.18 210.27 211.42 212.62 213.88 215.2 216.58 218.02 219.51 221.05 222.66 224.32 226.03 - 227.8 229.63 231.51 233.45 235.45 237.5 239.6 241.76 / - 3 4 5 1 200.04 199.36 199.24 199.32 199.54 199.87 200.3 200.81 201.4 202.06 202.79 203.59 - 204.45 205.37 206.36 207.41 208.52 209.69 210.92 212.2 213.55 214.96 216.42 217.94 219.51 221.14 222.82 224.56 - 226.36 228.22 230.13 232.1 234.12 236.21 238.34 240.54 / - 3 4 6 1 196.54 194.07 193.5 193.44 193.59 193.9 194.32 194.84 195.45 196.15 196.92 197.77 - 198.7 199.69 200.75 201.88 203.08 204.34 205.67 207.06 208.51 210.03 211.6 213.24 214.94 216.7 218.52 220.39 - 222.29 224.27 226.31 228.4 230.55 232.76 235.03 237.35 / - 3 4 7 1 185.38 180.43 179.49 179.22 179.31 179.62 180.12 180.76 181.53 182.41 183.4 184.49 - 185.67 186.92 188.26 189.68 191.18 192.75 194.38 196.08 197.85 199.69 201.6 203.55 205.57 207.65 209.79 211.99 - 214.25 216.55 218.88 221.3 223.77 226.29 228.87 231.49 / - 3 4 8 1 159.42 151.55 150.21 150 150.31 150.98 151.83 152.98 154.31 155.92 157.59 159.36 - 161.25 163.24 165.29 167.46 169.7 171.98 174.35 176.78 179.24 182.14 184.71 187.36 190.05 192.76 195.54 198.36 - 201.2 204.1 207.05 210.02 213.04 216.11 219.86 223.01 / - 3 4 9 1 110.57 103.96 104.21 105.41 107.2 109.29 111.61 114.19 116.88 119.77 122.7 125.73 - 128.97 132.17 135.51 138.92 142.29 145.78 149.31 152.82 156.48 160.04 163.82 167.42 171.04 175.09 178.76 182.5 - 186.26 190.5 194.34 198.17 202.04 205.92 210.42 214.34 / - 3 4 10 1 66.94 68.19 70.65 73.51 76.61 79.83 83.21 86.7 90.32 94.04 97.88 101.73 - 105.76 109.87 114.06 118.35 122.72 127.16 131.68 136.06 140.7 145.39 149.9 154.69 159.52 164.13 169.04 174.02 - 178.71 183.76 188.51 193.65 198.44 203.55 208.74 213.61 / - 3 4 11 1 50.63 53.87 57.14 60.6 64.18 67.87 71.67 75.6 79.65 83.82 88.11 92.52 - 97.04 101.96 107.17 112.21 117.38 122.63 127.83 133.29 138.69 144.16 149.7 155.31 160.99 166.73 172.49 178.3 - 184.21 190.18 196.2 201.91 208.02 214.19 220.42 226.25 / - 3 4 12 1 45.51 49.85 53.66 57.49 61.57 65.9 70.45 75.19 80.12 85.22 90.48 95.88 - 101.44 107.12 112.88 118.71 124.63 130.66 136.78 143.01 149.33 155.74 162.79 170.27 177.45 184.6 191.66 198.94 - 205.96 213.44 220.7 228.03 235.42 242.89 250.42 258.02 / - 3 4 13 1 40.56 46.32 51.53 56.68 62.02 67.63 73.53 79.95 86.78 93.58 100.59 107.2 - 114.68 121.98 129.45 137.14 144.97 152.95 161.05 169.3 177.62 185.96 194.34 202.8 211.32 219.94 228.66 237.47 - 246.37 256 266.04 276.42 286.36 296.24 306.42 316.58 / - 3 4 14 1 36.67 44.02 52.88 61.6 69.99 78.94 87.14 96.43 104.89 114.03 123.79 133.6 - 143.87 154.32 164.57 174.4 185.39 196.57 207.96 219.39 230.48 242.03 254.12 266.39 278.73 291.15 303.69 316.36 - 329.17 342.14 355.27 368.56 382.02 395.65 411.17 426 / - 3 4 15 1 35.06 49.65 63.16 76.14 89 101.27 114.06 126.8 141.1 153.67 168.4 183.42 - 196.96 211.79 227.43 243.06 259.47 275.34 292.4 309.68 326.47 344.56 363.02 381.86 401 419.99 439 458.44 - 478.61 499.11 519.95 541.14 562.7 584.65 608.45 632.69 / - 3 4 16 1 44.28 65.05 85.84 105.03 124.11 143.78 163.68 184.37 205.26 226.44 249.87 271.66 - 295.96 321.05 344.27 370.28 397.23 424.26 452.45 481.01 510.07 540.53 571.74 602.49 635.03 668.32 702.22 736.9 - 771.59 808.1 846.63 885.83 925.84 965.93 1006.15 1046.84 / - 3 4 17 1 61.53 93.45 125.33 156.17 186.88 218.55 251.68 286.65 322.74 360.19 398.64 440.27 - 481.43 526 571.74 618.35 665.57 716.34 768.69 823.06 879.15 936.32 995.42 1056.56 1119.23 1181.18 1240.2 1295.37 - 1340.41 1390.34 1440.37 1492.32 1546.26 1602.06 1659.11 1713.08 / - 3 4 18 1 89.53 141.14 190.94 243.04 296.78 353.47 413.66 477.45 545.4 616.98 691.87 771.4 - 855.41 944.07 1036.38 1130.87 1227.56 1316.71 1401.26 1489.76 1578.81 1669.02 1764.51 1860.8 1957.2 2055.46 2154.37 2258.38 - 2356.11 2462.54 2569.35 2677.1 2787.79 2898.66 3010.75 3132.45 / - 3 4 19 1 134.17 213.37 297.38 392.45 494.32 606.05 725.71 858.16 998.77 1149.27 1300.21 1444.44 - 1590.53 1751.48 1908.91 2072.76 2243.81 2426.55 2608.31 2791.6 2978.15 3174.7 3374.67 3579.08 3785.64 3996.41 4215.32 4435.62 - 4669.7 4893.88 5136.22 5368.73 5615.23 5872.52 6117.04 6378.42 / - 3 4 20 1 203.89 326.56 468.63 654.7 868.23 1108.82 1358.73 1604.8 1875.91 2154.01 2449.95 2764.87 - 3080.37 3429.39 3778.46 4135.95 4510.6 4940.15 5346.41 5763.52 6208.47 6649.66 7116.63 7582.66 8076.41 8580.96 9089.4 9600.72 - 10135.42 10692.98 11255.71 11832.47 12436.1 13019.35 13646.83 14290.49 / - 3 5 1 1 203.61 203.36 203.39 203.57 203.87 204.25 204.71 205.24 205.84 206.51 207.24 208.03 - 208.88 209.79 210.76 211.79 212.88 214.02 215.23 216.49 217.81 219.18 220.61 222.1 223.64 225.24 226.9 228.61 - 230.38 232.2 234.08 236.01 238 240.05 242.15 244.31 / - 3 5 2 1 203.51 203.24 203.27 203.45 203.74 204.12 204.58 205.11 205.71 206.38 207.1 207.9 - 208.75 209.66 210.63 211.66 212.75 213.89 215.1 216.36 217.68 219.05 220.48 221.97 223.52 225.12 226.77 228.49 - 230.26 232.08 233.96 235.9 237.89 239.94 242.04 244.2 / - 3 5 3 1 203.32 203.03 203.04 203.21 203.5 203.88 204.33 204.86 205.46 206.13 206.86 207.65 - 208.5 209.41 210.38 211.41 212.5 213.65 214.85 216.11 217.43 218.81 220.24 221.73 223.28 224.88 226.54 228.26 - 230.03 231.86 233.74 235.68 237.68 239.73 241.83 243.99 / - 3 5 4 1 202.96 202.63 202.62 202.79 203.06 203.43 203.88 204.41 205 205.66 206.39 207.18 - 208.03 208.94 209.92 210.95 212.04 213.19 214.39 215.66 216.98 218.36 219.8 221.29 222.84 224.45 226.11 227.84 - 229.61 231.45 233.33 235.28 237.28 239.34 241.45 243.62 / - 3 5 5 1 201.76 200.95 200.73 200.81 201.04 201.38 201.81 202.32 202.91 203.58 204.31 205.11 - 205.97 206.9 207.89 208.94 210.05 211.22 212.46 213.75 215.1 216.51 217.98 219.51 221.1 222.74 224.44 226.2 - 228.02 229.89 231.82 233.8 235.85 237.95 240.09 242.29 / - 3 5 6 1 197.97 195.13 194.7 194.62 194.75 195.04 195.46 195.98 196.59 197.29 198.07 198.93 - 199.86 200.87 201.94 203.09 204.3 205.58 206.92 208.33 209.79 211.31 212.89 214.54 216.24 218.01 219.84 221.72 - 223.67 225.67 227.74 229.86 232.04 234.25 236.54 238.89 / - 3 5 7 1 186.36 181.04 180.1 179.82 179.9 180.23 180.73 181.39 182.17 183.07 184.06 185.17 - 186.36 187.65 189.01 190.44 191.96 193.56 195.21 196.95 198.75 200.61 202.52 204.51 206.56 208.67 210.82 213.05 - 215.33 217.67 220.06 222.5 225.01 227.54 230.14 232.8 / - 3 5 8 1 159.57 151.46 150.13 149.93 150.25 150.86 151.81 152.98 154.34 155.87 157.57 159.49 - 161.42 163.46 165.54 167.75 170.04 172.35 174.77 177.21 179.73 182.32 185.31 188 190.71 193.49 196.32 199.16 - 202.07 205.02 207.99 211.01 214.08 217.18 220.33 224.2 / - 3 5 9 1 110.63 103.93 104.14 105.44 107.25 109.36 111.7 114.31 117.02 119.86 122.9 125.96 - 129.22 132.45 135.85 139.21 142.71 146.24 149.8 153.34 157.05 160.65 164.46 168.12 171.78 175.88 179.59 183.37 - 187.13 190.91 195.25 199.12 203.05 206.97 210.95 215.51 / - 3 5 10 1 67.12 68.41 70.87 73.74 76.84 80.12 83.55 87.09 90.74 94.44 98.31 102.27 - 106.33 110.47 114.69 119.01 123.41 127.89 132.26 136.86 141.53 146.26 150.8 155.64 160.51 165.15 170.11 174.81 - 179.85 184.96 189.74 194.94 199.77 204.9 209.79 215.08 / - 3 5 11 1 50.73 54.05 57.35 60.84 64.46 68.18 72.02 75.99 80.08 84.29 88.62 93.07 - 97.63 102.51 107.79 112.92 118.1 123.35 128.67 134.02 139.62 145.14 150.73 156.39 162.11 167.9 173.72 179.58 - 185.55 191.57 197.29 203.41 209.58 215.81 221.66 227.98 / - 3 5 12 1 45.49 49.96 53.85 57.73 61.85 66.21 70.79 75.58 80.54 85.68 90.97 96.42 - 102.01 107.74 113.54 119.4 125.37 131.44 137.61 143.88 150.25 156.72 163.63 171.19 178.47 185.63 192.86 200.1 - 207.37 214.61 221.92 229.63 237.1 244.63 252.24 259.48 / - 3 5 13 1 40.51 46.36 51.65 56.88 62.28 67.93 73.88 80.53 87.2 94.04 101.09 107.93 - 115.26 122.61 130.13 137.86 145.74 153.76 161.92 170.21 178.58 186.97 195.41 203.91 212.49 221.16 229.93 238.8 - 247.77 256.83 267.27 277.47 287.87 297.76 308.21 318.32 / - 3 5 14 1 36.62 44.07 52.98 61.77 70.21 79.21 87.46 96.79 105.33 114.48 124.37 134.14 - 144.46 154.96 165.25 175.14 186.18 197.4 208.84 220.34 231.48 243.65 255.23 267.55 279.96 292.44 305.04 317.78 - 330.66 343.7 356.9 370.27 383.8 397.5 412.25 427.65 / - 3 5 15 1 35.06 49.69 63.23 76.26 89.18 101.51 114.34 127.13 141.45 154.09 168.86 183.93 - 197.52 212.4 228.11 243.8 260.26 276.18 293.28 310.61 327.46 345.59 364.09 382.98 402.19 421.5 440.35 459.87 - 480.12 500.7 521.61 542.88 564.52 586.53 609.45 633.8 / - 3 5 16 1 44.24 65.04 85.87 105.26 124.3 143.97 163.9 184.62 205.54 226.76 250.22 272.08 - 296.44 321.57 345.31 370.89 397.9 425.09 453.19 481.48 510.86 541.33 572.53 603.31 635.84 669.13 703.14 737.86 - 772.57 808.6 847.23 886.58 926.41 966.48 1007.19 1047.64 / - 3 5 17 1 61.44 93.38 125.33 156.23 186.99 218.69 251.84 286.81 322.89 360.32 398.8 440.4 - 481.59 526.16 571.9 617.58 665.65 716.31 768.56 822.84 879.03 936.22 995.3 1055.6 1118.51 1181.08 1240.5 1297.02 - 1344.1 1395.53 1447.32 1501.75 1556.63 1612.95 1672.97 1728.8 / - 3 5 18 1 89.38 141.17 190.85 243.09 296.89 353.61 413.79 477.49 545.31 616.82 691.69 770.85 - 854.64 943.08 1035.27 1129.88 1225.69 1316.36 1401.54 1491.48 1581.07 1673.31 1769.76 1866.74 1964.68 2064.21 2162.82 2269.67 - 2368.73 2476.49 2584.71 2693.87 2806.06 2918.44 3032.25 3154.29 / - 3 5 19 1 133.96 213.18 296.97 391.72 494.36 604.64 725.35 856.12 997.79 1148.05 1299.67 1444.27 - 1590.98 1752.65 1910.88 2075.62 2247.64 2431.61 2615.9 2802.13 2991.78 3190.67 3394.3 3601.65 3808.87 4025.89 4246.86 4470.27 - 4707.05 4934.65 5179.62 5415.37 5664.71 5924.63 6172.62 6436.91 / - 3 5 20 1 203.67 326.46 465.3 651.36 863 1107.96 1353.05 1605.25 1865.45 2156.86 2454.28 2751.31 - 3088.06 3417.85 3790.19 4149.86 4526.85 4955.44 5367.7 5787.89 6234.55 6684.71 7160.33 7633.07 8133.3 8637.02 9159.82 9668.26 - 10218.8 10773.01 11353.6 11938.54 12536.34 13141.3 13776.81 14428.63 / - 3 6 1 1 205.73 205.34 205.31 205.47 205.75 206.12 206.57 207.09 207.69 208.35 209.07 209.86 - 210.71 211.62 212.59 213.62 214.71 215.85 217.06 218.32 219.64 221.01 222.45 223.94 225.48 227.09 228.74 230.46 - 232.23 234.06 235.94 237.88 239.88 241.93 244.04 246.2 / - 3 6 2 1 205.62 205.22 205.19 205.34 205.61 205.98 206.43 206.96 207.55 208.21 208.94 209.72 - 210.57 211.48 212.45 213.48 214.57 215.72 216.92 218.18 219.5 220.88 222.31 223.81 225.35 226.96 228.62 230.33 - 232.11 233.94 235.82 237.76 239.76 241.81 243.92 246.09 / - 3 6 3 1 205.42 205 204.95 205.1 205.37 205.73 206.18 206.7 207.3 207.96 208.68 209.47 - 210.32 211.23 212.2 213.23 214.32 215.46 216.67 217.93 219.25 220.63 222.07 223.56 225.11 226.72 228.38 230.1 - 231.87 233.71 235.59 237.54 239.54 241.59 243.71 245.87 / - 3 6 4 1 205.05 204.56 204.48 204.6 204.86 205.21 205.65 206.17 206.76 207.41 208.14 208.92 - 209.77 210.68 211.65 212.68 213.77 214.92 216.13 217.4 218.72 220.11 221.55 223.04 224.6 226.21 227.88 229.6 - 231.38 233.22 235.12 237.07 239.08 241.14 243.26 245.44 / - 3 6 5 1 203.68 202.67 202.37 202.41 202.62 202.94 203.36 203.87 204.45 205.11 205.84 206.63 - 207.5 208.42 209.41 210.47 211.58 212.76 213.99 215.29 216.64 218.06 219.53 221.07 222.66 224.31 226.01 227.78 - 229.6 231.48 233.42 235.41 237.47 239.58 241.74 243.96 / - 3 6 6 1 199.67 196.45 195.86 195.77 195.91 196.2 196.61 197.14 197.75 198.46 199.24 200.11 - 201.05 202.06 203.14 204.29 205.5 206.74 208.09 209.51 210.98 212.52 214.13 215.79 217.52 219.31 221.15 223.06 - 225.03 227.05 229.12 231.25 233.44 235.69 238 240.36 / - 3 6 7 1 187.61 181.71 180.69 180.42 180.49 180.81 181.32 181.98 182.77 183.68 184.69 185.8 - 187.02 188.32 189.71 191.18 192.7 194.31 196 197.75 199.58 201.47 203.42 205.44 207.52 209.65 211.83 214.09 - 216.4 218.77 221.17 223.65 226.18 228.77 231.4 234.09 / - 3 6 8 1 160.14 151.39 150.01 149.8 150.05 150.75 151.73 152.92 154.31 155.88 157.6 159.42 - 161.37 163.6 165.73 167.98 170.27 172.67 175.12 177.61 180.18 182.8 185.45 188.59 191.34 194.17 197.04 199.93 - 202.89 205.88 208.9 211.97 215.09 218.23 221.42 224.65 / - 3 6 9 1 110.85 103.84 104.14 105.47 107.3 109.45 111.82 114.41 117.2 120.06 123.12 126.19 - 129.36 132.73 136.06 139.55 143.11 146.61 150.22 153.87 157.63 161.27 165.12 168.82 172.55 176.68 180.44 184.26 - 188.07 191.9 196.26 200.13 204.08 208.04 212.06 216.68 / - 3 6 10 1 67.3 68.63 71.05 74 77.14 80.48 83.94 87.47 91.15 94.93 98.82 102.81 - 106.9 111.07 115.32 119.67 124.11 128.45 133.02 137.65 142.36 146.89 151.7 156.58 161.23 166.17 171.17 175.91 - 181 185.8 190.98 195.84 201.11 206.29 211.22 216.47 / - 3 6 11 1 50.83 54.25 57.58 61.12 64.77 68.54 72.42 76.42 80.54 84.79 89.15 93.63 - 98.22 103 108.41 113.56 118.83 124.15 129.52 134.91 140.39 146.13 151.76 157.47 163.24 169.08 174.94 180.86 - 186.88 192.62 198.73 204.91 211.14 217.43 223.34 229.72 / - 3 6 12 1 45.48 50.08 54.05 57.99 62.15 66.55 71.17 75.99 80.99 86.16 91.49 96.98 - 102.61 108.37 114.2 120.1 126.11 132.22 138.44 144.76 151.17 157.68 164.28 172.11 179.48 186.66 194.06 201.26 - 208.57 216.07 223.45 230.89 238.4 245.98 253.64 261.36 / - 3 6 13 1 40.48 46.41 51.8 57.09 62.55 68.26 74.24 80.98 87.64 94.52 101.6 108.86 - 115.85 123.25 130.82 138.58 146.5 154.57 162.77 171.11 179.53 187.97 196.46 205.01 213.64 222.37 231.2 240.12 - 249.15 258.27 268.14 278.79 289.12 299.32 309.79 319.91 / - 3 6 14 1 36.32 44.03 53.1 61.95 70.45 79.49 87.79 97.17 105.75 114.93 124.86 134.67 - 145.03 155.58 165.92 175.86 186.95 198.22 209.7 221.25 232.46 244.15 256.31 268.7 281.16 293.72 306.38 319.19 - 332.14 345.24 358.51 371.95 385.55 399.33 413.28 428.78 / - 3 6 15 1 34.96 49.73 63.41 76.4 89.37 101.74 114.62 127.48 141.8 154.51 169.31 184.42 - 198.08 213 228.77 244.52 261.03 277 294.15 311.52 328.42 346.59 365.14 384.06 403.33 422.52 441.66 461.26 - 481.6 502.25 523.24 544.58 566.28 588.37 610.85 634.8 / - 3 6 16 1 44.23 65.04 85.91 105.61 124.76 144.16 164.12 184.86 205.81 227.07 250.56 272.46 - 296.89 322.06 345.86 371.5 398.54 425.78 453.9 482.73 511.61 542.09 573.3 604.38 636.59 669.85 703.96 738.77 - 773.87 809.54 847.18 886.6 926.62 967.03 1007.62 1048.29 / - 3 6 17 1 61.33 93.31 125.46 156.29 187.11 219.23 251.99 286.96 323.03 360.45 398.92 440.5 - 481.7 526.28 572.28 618.66 665.66 716.21 768.4 822.51 878.71 935.96 995.05 1054.91 1118.04 1180.53 1241.2 1298.46 - 1347.37 1400.71 1454.32 1510.49 1567.15 1625.37 1687.07 1745.89 / - 3 6 18 1 89.23 141.09 190.77 243.14 297.1 353.89 413.91 477.7 545.21 616.62 691.33 770.27 - 853.81 941.99 1034 1128.73 1224.83 1315.7 1400.88 1491.2 1582.09 1675.33 1772.37 1870.55 1969.73 2070.33 2171.39 2277.79 - 2379.94 2488.96 2598.43 2709.24 2822.85 2936.66 3052.07 3175.43 / - 3 6 19 1 133.75 212.99 296.57 391.67 494.36 604.53 723.9 855.25 996.78 1146.77 1300.35 1439.69 - 1591.33 1745.7 1912.79 2078.49 2251.44 2436.59 2623.34 2809.76 3002.44 3204.07 3409.93 3620.45 3833.39 4055.5 4275.26 4504.99 - 4745.02 4976.2 5220.81 5463.67 5716.52 5975.08 6231.22 6498.86 / - 3 6 20 1 203.44 326.37 461.79 648.37 861.98 1101.33 1352.44 1602.09 1867.03 2145.44 2441.77 2757.57 - 3096.08 3427.79 3802.48 4166.27 4543.88 4978.82 5390.03 5813.08 6258.57 6715.59 7194.08 7677.95 8180.64 8699.1 9220.08 9745.17 - 10302.86 10864.87 11442.83 12047.01 12653.9 13263.02 13911.68 14572.39 / - 3 7 1 1 207.84 207.32 207.24 207.37 207.62 207.98 208.42 208.94 209.53 210.19 210.91 211.69 - 212.54 213.45 214.42 215.44 216.53 217.68 218.88 220.14 221.46 222.84 224.28 225.77 227.32 228.92 230.59 232.3 - 234.08 235.91 237.8 239.74 241.75 243.8 245.91 248.08 / - 3 7 2 1 207.73 207.2 207.11 207.23 207.49 207.84 208.28 208.8 209.39 210.04 210.76 211.55 - 212.4 213.3 214.27 215.3 216.39 217.54 218.74 220 221.32 222.7 224.14 225.63 227.18 228.79 230.45 232.17 - 233.95 235.78 237.67 239.62 241.62 243.68 245.79 247.97 / - 3 7 3 1 207.53 206.97 206.87 206.98 207.23 207.59 208.02 208.54 209.13 209.78 210.5 211.29 - 212.13 213.04 214.01 215.04 216.13 217.28 218.48 219.75 221.07 222.45 223.88 225.38 226.93 228.54 230.21 231.93 - 233.71 235.54 237.44 239.39 241.39 243.45 245.57 247.74 / - 3 7 4 1 207.11 206.47 206.33 206.42 206.65 206.99 207.42 207.93 208.51 209.16 209.88 210.66 - 211.51 212.42 213.39 214.42 215.51 216.66 217.87 219.14 220.46 221.85 223.29 224.79 226.35 227.96 229.63 231.36 - 233.15 234.99 236.89 238.85 240.86 242.93 245.06 247.24 / - 3 7 5 1 205.59 204.4 203.99 203.98 204.15 204.46 204.86 205.36 205.94 206.6 207.33 208.12 - 208.99 209.92 210.91 211.97 213.09 214.28 215.52 216.83 218.19 219.61 221.09 222.62 224.22 225.87 227.59 229.36 - 231.19 233.08 235.02 237.03 239.09 241.2 243.38 245.61 / - 3 7 6 1 201.31 197.76 197.04 196.9 197 197.27 197.67 198.19 198.8 199.5 200.29 201.16 - 202.1 203.12 204.21 205.37 206.6 207.9 209.26 210.69 212.19 213.75 215.37 217.05 218.75 220.54 222.4 224.32 - 226.3 228.34 230.43 232.59 234.81 237.08 239.41 241.8 / - 3 7 7 1 187.91 182.34 181.23 180.92 180.98 181.3 181.81 182.48 183.28 184.21 185.23 186.36 - 187.49 188.8 190.2 191.68 193.22 194.85 196.55 198.32 200.15 202.06 204.03 206.07 208.15 210.31 212.51 214.79 - 217.12 219.51 221.93 224.43 226.98 229.58 232.6 235.32 / - 3 7 8 1 160.34 151.23 149.81 149.6 149.85 150.57 151.56 152.78 154.19 155.79 157.55 159.4 - 161.39 163.48 165.84 168.12 170.46 172.89 175.39 177.93 180.54 183.22 185.91 188.68 191.91 194.78 197.68 200.64 - 203.65 206.67 209.75 212.88 216.03 219.23 222.48 225.75 / - 3 7 9 1 110.47 103.84 104.14 105.46 107.35 109.57 111.97 114.57 117.38 120.25 123.24 126.43 - 129.62 133.01 136.36 139.87 143.35 147 150.69 154.4 158.05 161.88 165.6 169.52 173.29 177.1 181.31 185.16 - 189.02 192.94 197.33 201.25 205.23 209.2 213.23 217.27 / - 3 7 10 1 67.38 68.86 71.31 74.28 77.5 80.86 84.31 87.9 91.61 95.41 99.33 103.35 - 107.46 111.66 115.95 120.2 124.65 129.17 133.77 138.44 143.18 147.75 152.6 157.52 162.2 167.19 172.24 177.02 - 182.16 187 192.23 197.13 202.45 207.41 212.66 217.97 / - 3 7 11 1 50.94 54.45 57.84 61.42 65.11 68.9 72.82 76.85 81 85.28 89.68 94.19 - 98.82 103.56 109.01 114.28 119.5 124.88 130.27 135.8 141.32 146.92 152.58 158.32 164.12 169.99 175.92 181.88 - 187.89 194 200.17 206.4 212.7 218.63 225.01 231.47 / - 3 7 12 1 45.48 50.21 54.26 58.26 62.46 66.9 71.55 76.4 81.44 86.64 92.01 97.53 - 103.2 109 114.86 120.81 126.85 133.01 139.27 145.63 152.09 158.64 165.29 172.79 180.47 187.86 195.12 202.59 - 209.96 217.53 224.97 232.48 240.06 247.72 255.44 263.24 / - 3 7 13 1 40.46 46.48 51.96 57.33 62.84 68.6 74.61 81.38 87.8 94.69 102.11 109.42 - 116.29 123.81 132.16 139.29 147.26 155.37 163.62 172 180.47 188.96 197.49 206.1 214.78 223.56 232.45 241.43 - 250.52 259.7 269.31 279.71 290.18 300.87 311.02 321.42 / - 3 7 14 1 36.3 44.11 53.23 62.14 70.7 79.78 88.12 97.54 106.17 115.38 125.39 135.19 - 145.6 156.19 166.58 176.57 187.7 199.02 210.55 222.14 233.41 245.7 257.38 269.82 282.35 294.97 307.7 320.57 - 333.59 346.76 360.1 373.61 387.29 401.14 415.16 429.36 / - 3 7 15 1 34.96 49.77 63.62 76.53 89.56 101.98 114.89 128.46 142.14 154.9 169.75 184.9 - 198.23 213.58 229.4 245.25 261.77 277.8 294.99 312.41 329.38 347.56 366.15 385.11 404.41 423.69 442.91 462.6 - 483.01 503.75 524.81 546.22 568 590.15 612.7 635.66 / - 3 7 16 1 44.29 65.01 85.94 105.7 124.88 144.33 164.33 185.1 206.07 227.35 250.89 272.81 - 297.31 322.54 346.46 372.05 399.14 426.42 454.57 483.5 512.32 542.8 574.01 605.45 637.29 670.48 704.61 739.54 - 774.92 810.41 847.51 886.47 926.65 967.32 1008.19 1049.31 / - 3 7 17 1 61.23 93.32 125.44 156.35 187.69 219.36 252.43 287.1 323.17 360.56 399.01 440.58 - 481.76 526.36 572.34 619.28 665.62 716.04 768.23 822.17 878.18 935.51 994.63 1054.5 1116.79 1180.24 1241.35 1298.19 - 1350.81 1406.09 1461.36 1519.31 1578.74 1637.92 1701.29 1762.4 / - 3 7 18 1 89.06 141.04 190.68 243.16 297.19 354 414.06 477.71 545.09 616.39 690.94 769.65 - 852.9 940.83 1032.58 1127.37 1222.8 1316.04 1401.72 1493.02 1585.05 1679.43 1777.57 1876.9 1977.39 2078.83 2181.81 2289.53 - 2393.3 2503.01 2614.78 2727.17 2841.39 2957.93 3075.1 3199.94 / - 3 7 19 1 133.53 212.8 296.07 390.74 493.23 604.45 723.57 853.12 995.76 1145.41 1299.06 1439.03 - 1593.04 1746.6 1914.58 2081.26 2255.25 2441.51 2629.53 2817.2 3011.49 3213.17 3423.32 3637.84 3854.91 4081.52 4304.87 4538.33 - 4778.89 5017.35 5266.02 5512.71 5769.37 6031.73 6291.77 6563.22 / - 3 7 20 1 203.22 326.3 458.12 645.13 856.72 1094.04 1344.62 1599.58 1868.63 2148.45 2446.42 2764.1 - 3104.44 3438.28 3815.39 4182.38 4561.77 4959.82 5413.53 5839.63 6288.09 6744.53 7228.34 7725.38 8231.54 8750.38 9287.15 9820.73 - 10376.22 10956.9 11543.8 12157.31 12773.93 13392.72 14036.28 14721.25 / - 3 8 1 1 209.96 209.3 209.17 209.26 209.5 209.84 210.27 210.78 211.37 212.02 212.74 213.52 - 214.36 215.27 216.24 217.26 218.35 219.5 220.7 221.96 223.28 224.66 226.1 227.59 229.14 230.75 232.42 234.14 - 235.92 237.76 239.65 241.6 243.6 245.66 247.78 249.96 / - 3 8 2 1 209.84 209.18 209.03 209.12 209.36 209.7 210.13 210.64 211.22 211.87 212.59 213.37 - 214.22 215.12 216.09 217.12 218.2 219.35 220.55 221.82 223.14 224.52 225.96 227.45 229 230.61 232.28 234 - 235.78 237.62 239.51 241.46 243.47 245.54 247.66 249.83 / - 3 8 3 1 209.63 208.94 208.79 208.87 209.1 209.44 209.86 210.37 210.95 211.6 212.32 213.1 - 213.95 214.85 215.82 216.85 217.93 219.08 220.29 221.55 222.87 224.26 225.69 227.19 228.74 230.36 232.02 233.75 - 235.53 237.37 239.27 241.22 243.23 245.3 247.42 249.6 / - 3 8 4 1 209.17 208.38 208.17 208.21 208.41 208.73 209.15 209.64 210.22 210.86 211.58 212.36 - 213.2 214.11 215.07 216.1 217.2 218.35 219.56 220.83 222.15 223.54 224.99 226.49 228.05 229.67 231.35 233.09 - 234.88 236.73 238.64 240.6 242.62 244.7 246.84 249.03 / - 3 8 5 1 207.5 205.92 205.51 205.47 205.62 205.9 206.3 206.78 207.36 208.01 208.73 209.53 - 210.39 211.32 212.31 213.37 214.5 215.68 216.93 218.24 219.61 221.04 222.53 224.08 225.69 227.36 229.09 230.88 - 232.72 234.63 236.59 238.61 240.68 242.82 245.01 247.26 / - 3 8 6 1 202.93 198.81 198.17 197.98 198.04 198.29 198.68 199.19 199.8 200.5 201.29 202.16 - 203.11 204.13 205.23 206.4 207.64 208.94 210.32 211.76 213.26 214.84 216.47 218.16 219.92 221.74 223.62 225.56 - 227.56 229.62 231.72 233.9 236.13 238.42 240.77 243.17 / - 3 8 7 1 189.04 182.88 181.74 181.34 181.39 181.7 182.21 182.89 183.69 184.55 185.59 186.73 - 187.97 189.31 190.73 192.23 193.78 195.44 197.17 198.98 200.85 202.77 204.77 206.84 208.97 211.14 213.39 215.7 - 218.05 220.47 222.94 225.47 228.06 230.68 233.37 236.12 / - 3 8 8 1 160.5 150.71 149.53 149.21 149.56 150.28 151.29 152.53 153.97 155.61 157.4 159.28 - 161.31 163.44 165.64 168.18 170.59 173.03 175.58 178.15 180.82 183.54 186.28 189.11 191.95 195.32 198.27 201.28 - 204.34 207.41 210.55 213.73 216.93 220.18 223.48 226.8 / - 3 8 9 1 110.68 103.87 104.17 105.55 107.45 109.65 112.11 114.73 117.49 120.45 123.46 126.67 - 129.88 133.17 136.66 140.2 143.7 147.38 151.09 154.76 158.59 162.49 166.24 170.22 174.05 177.88 182.16 186.06 - 189.99 193.95 197.91 202.39 206.42 210.46 214.54 218.62 / - 3 8 10 1 67.56 69.05 71.61 74.61 77.85 81.2 84.71 88.33 92.06 95.89 99.84 103.88 - 107.94 112.17 116.47 120.85 125.33 129.89 134.52 139.23 143.79 148.61 153.5 158.19 163.18 168.21 173 178.13 - 183.31 188.2 193.48 198.42 203.8 208.8 214.11 219.17 / - 3 8 11 1 51.05 54.68 58.12 61.73 65.45 69.27 73.21 77.28 81.46 85.77 90.2 94.75 - 99.41 104.19 109.61 114.93 120.26 125.67 131.11 136.69 142.25 147.89 153.6 159.39 165.24 171.16 177.14 183.15 - 189.22 195.39 201.62 207.91 213.86 220.25 226.7 232.75 / - 3 8 12 1 45.49 50.36 54.51 58.56 62.78 67.25 71.93 76.82 81.89 87.13 92.53 98.09 - 103.8 109.63 115.53 121.51 127.6 133.8 140.1 146.5 153.01 159.6 166.29 173.65 181.23 188.91 196.18 203.74 - 211.15 218.68 226.17 233.72 241.72 249.45 257.25 264.69 / - 3 8 13 1 40.45 46.58 52.15 57.58 63.14 68.93 75.05 81.78 88.24 95.16 102.62 109.97 - 116.89 124.69 132.18 140.01 148.01 156.16 164.45 172.88 181.4 189.93 198.52 207.17 215.91 224.75 233.69 242.73 - 251.87 261.11 270.46 280.59 291.54 302.15 312.63 323.04 / - 3 8 14 1 36.28 44.19 53.37 62.34 70.94 80.06 88.44 97.9 106.57 115.83 125.88 135.72 - 146.16 156.79 167.22 177.26 188.44 199.8 211.38 223.02 234.41 246.68 258.41 270.92 283.52 296.2 309 321.93 - 335.02 348.26 361.67 375.25 389 402.92 417.02 431.29 / - 3 8 15 1 34.96 49.81 63.7 76.67 89.74 102.21 115.16 128.24 142.47 155.28 170.18 185.36 - 199.2 214.13 230.13 245.97 262.5 278.57 295.81 313.27 330.37 348.5 367.12 386.11 405.44 425.07 444.58 463.87 - 484.37 505.18 526.32 547.81 569.65 591.87 614.48 637.5 / - 3 8 16 1 44.23 64.99 86.13 105.77 125.01 144.49 164.52 185.31 206.31 227.62 251.18 273.14 - 297.68 322.97 348.03 372.56 399.68 427.01 455.2 484.15 512.98 543.45 574.66 606.19 637.91 671.05 705.1 740.09 - 775.59 811.13 848.26 886.12 926.41 967.33 1007.99 1049.77 / - 3 8 17 1 61.12 93.22 125.42 156.62 187.79 219.5 252.77 287.24 323.29 360.65 399.09 440.63 - 481.78 526.38 572.34 619.27 665.53 715.82 767.86 821.63 877.48 934.82 994.02 1053.92 1115.21 1179.04 1241.32 1299.85 - 1353.97 1410.88 1468.36 1528.16 1589.46 1650.65 1716.51 1778.62 / - 3 8 18 1 88.9 141.03 190.54 243.2 297.28 354.11 414.15 477.71 545.03 616.21 690.51 768.98 - 851.95 939.58 1031.05 1125.76 1221.54 1315.28 1403.2 1494.52 1587.79 1683.92 1782.91 1883.5 1985.31 2088.21 2192.67 2301.17 - 2407.27 2518.58 2631.92 2746 2861.97 2980.3 3099.34 3225.73 / - 3 8 19 1 133.3 212.61 295.56 389.8 493.23 602.93 723.13 852.46 991.4 1143.97 1292.54 1438.3 - 1592.99 1747.37 1916.27 2083.9 2258.96 2437.83 2635.86 2824.73 3023.94 3223.6 3434.68 3651.57 3871.71 4099.52 4330.07 4568.11 - 4813.11 5056.22 5309.39 5556.9 5821.83 6088.29 6348.1 6628.84 / - 3 8 20 1 202.99 326.26 452.6 641.97 852.03 1093.15 1343.93 1594.89 1865.02 2151.59 2451.3 2770.94 - 3090.64 3449.36 3798.29 4198.43 4580.66 4981.54 5438.38 5867.69 6319.34 6775.23 7264.4 7765.87 8270.16 8803.75 9349.66 9883.22 - 10457.17 11036.85 11644.29 12256.82 12895.09 13524.51 14178.8 14874.64 / - 3 9 1 1 212.06 211.28 211.09 211.16 211.37 211.7 212.12 212.63 213.2 213.85 214.56 215.34 - 216.18 217.09 218.05 219.08 220.16 221.31 222.51 223.78 225.1 226.48 227.91 229.41 230.96 232.57 234.24 235.97 - 237.75 239.59 241.48 243.44 245.45 247.51 249.64 251.82 / - 3 9 2 1 211.94 211.15 210.95 211.01 211.23 211.56 211.97 212.48 213.05 213.7 214.41 215.19 - 216.03 216.93 217.9 218.92 220.01 221.16 222.36 223.62 224.95 226.33 227.76 229.26 230.81 232.43 234.1 235.82 - 237.61 239.45 241.34 243.3 245.31 247.38 249.5 251.69 / - 3 9 3 1 211.73 210.91 210.7 210.75 210.96 211.29 211.7 212.2 212.78 213.42 214.13 214.91 - 215.75 216.66 217.62 218.65 219.73 220.88 222.09 223.35 224.67 226.05 227.49 228.99 230.55 232.16 233.83 235.56 - 237.35 239.19 241.09 243.05 245.06 247.14 249.26 251.45 / - 3 9 4 1 211.19 210.24 209.96 209.96 210.14 210.44 210.84 211.33 211.89 212.53 213.24 214.02 - 214.86 215.76 216.73 217.76 218.85 220 221.21 222.48 223.81 225.2 226.65 228.16 229.72 231.35 233.03 234.77 - 236.57 238.42 240.34 242.31 244.33 246.42 248.56 250.76 / - 3 9 5 1 209.33 207.5 207.05 206.95 207.07 207.33 207.7 208.18 208.74 209.39 210.11 210.9 - 211.77 212.7 213.7 214.76 215.89 217.08 218.34 219.65 221.02 222.46 223.95 225.51 227.13 228.8 230.54 232.33 - 234.19 236.1 238.07 240.1 242.19 244.34 246.54 248.8 / - 3 9 6 1 204.5 199.97 199.12 198.91 198.96 199.21 199.59 200.1 200.71 201.42 202.21 203.09 - 204.05 205.09 206.2 207.38 208.63 209.95 211.34 212.75 214.27 215.86 217.51 219.22 221 222.84 224.74 226.7 - 228.71 230.8 232.94 235.14 237.4 239.71 242.08 244.51 / - 3 9 7 1 190.11 183.3 182.08 181.65 181.69 181.99 182.51 183.13 183.94 184.88 185.93 187.09 - 188.35 189.71 191.15 192.65 194.26 195.95 197.71 199.54 201.45 203.39 205.43 207.53 209.69 211.9 214.18 216.53 - 218.92 221.37 223.88 226.45 229.06 231.74 234.47 237.25 / - 3 9 8 1 160.98 150.38 149.17 148.84 149.19 149.92 150.95 152.22 153.67 155.34 157.15 159.07 - 161.14 163.31 165.55 167.92 170.59 173.08 175.67 178.33 181.01 183.78 186.57 189.45 192.34 195.31 198.81 201.85 - 204.96 208.09 211.28 214.51 217.76 221.08 224.43 227.81 / - 3 9 9 1 110.34 103.9 104.17 105.64 107.56 109.78 112.2 114.89 117.67 120.58 123.68 126.81 - 130.14 133.45 136.97 140.43 144.06 147.77 151.41 155.2 159.04 162.84 166.86 170.72 174.78 178.68 182.61 186.96 - 190.94 194.96 198.99 203.55 207.62 211.75 215.87 220.01 / - 3 9 10 1 67.73 69.33 71.91 74.95 78.17 81.58 85.1 88.75 92.51 96.37 100.34 104.34 - 108.5 112.75 117.08 121.5 126.01 130.6 135.27 139.82 144.61 149.47 154.4 159.12 164.16 169.23 174.06 179.23 - 184.13 189.4 194.36 199.72 204.74 210.2 215.57 220.68 / - 3 9 11 1 51.16 54.93 58.41 62.04 65.79 69.64 73.61 77.71 81.93 86.27 90.73 95.31 - 100.01 104.81 110.13 115.58 120.92 126.39 131.94 137.41 143.18 148.86 154.62 160.45 166.36 172.33 178.36 184.43 - 190.55 196.77 203.06 209.03 215.42 221.87 228.39 234.5 / - 3 9 12 1 45.52 50.54 54.76 58.85 63.11 67.6 72.32 77.23 82.33 87.61 93.05 98.64 - 104.39 110.26 116.2 122.22 128.35 134.59 140.93 147.37 153.92 160.56 167.29 174.3 182.16 189.79 197.43 204.89 - 212.35 219.91 227.68 235.3 243 250.78 258.63 266.56 / - 3 9 13 1 40.46 46.7 52.35 57.83 63.43 69.27 75.5 81.96 88.67 95.63 102.79 110.51 - 117.47 125.32 133.51 140.72 148.77 156.96 165.29 173.76 182.32 190.9 199.54 208.24 217.03 225.92 234.91 244.01 - 253.21 262.52 271.92 281.42 292.46 303.22 313.95 324.64 / - 3 9 14 1 36.28 44.28 53.51 62.53 71.19 80.34 88.77 98.26 107.79 116.26 126.35 136.29 - 146.72 157.39 167.35 177.95 189.16 200.57 212.19 223.87 235.59 247.63 259.42 271.98 284.65 297.4 310.27 323.27 - 336.42 349.73 363.21 376.86 390.68 404.67 418.84 433.19 / - 3 9 15 1 34.96 49.85 63.78 76.8 89.92 102.43 115.42 129.21 142.8 155.65 170.59 185.81 - 200.63 214.67 230.67 246.6 263.18 279.31 296.59 314.09 331.64 349.4 368.05 387.06 406.41 426.01 445.8 465.07 - 485.65 506.54 527.76 549.31 571.23 593.51 616.18 639.25 / - 3 9 16 1 44.17 64.96 86.21 105.84 125.11 144.64 164.7 185.51 206.54 227.86 251.45 273.44 - 298 323.35 348.45 373.01 400.16 427.57 455.76 484.82 513.57 544.05 575.24 606.35 638.47 671.55 705.51 740.42 - 776.02 811.64 848.82 886.71 925.89 966.29 1007.87 1049.66 / - 3 9 17 1 61.02 93.21 125.39 156.75 187.86 219.62 252.89 287.37 323.4 360.72 399.12 440.63 - 481.74 526.34 572.29 619.19 665.38 715.52 767.41 821.01 876.67 933.85 993.13 1053.43 1114.47 1177.46 1240.71 1300.09 - 1357.19 1415.82 1475.51 1536.81 1599.56 1661.97 1728.76 1792.35 / - 3 9 18 1 88.73 140.86 190.45 243.17 297.35 354.19 414.23 477.69 544.87 615.89 690.06 768.28 - 850.93 938.23 1029.41 1123.89 1220.04 1314.27 1403.32 1494.57 1589.8 1688.5 1787.17 1889.75 1992.89 2097.95 2204.08 2314.11 - 2422.58 2534.93 2650.1 2765.92 2883.72 3004 3125.03 3253.08 / - 3 9 19 1 133.08 212.42 294.73 389.74 492.05 602.86 720.9 850.82 990.27 1138.04 1291.05 1437.51 - 1592.9 1748.12 1918.94 2089.48 2262.75 2442.84 2642.15 2832.44 3033.12 3233.12 3446.47 3663.43 3889.16 4117.54 4350.52 4589.02 - 4841.85 5086.63 5348.37 5600.95 5871.23 6142.42 6407.11 6693.34 / - 3 9 20 1 202.76 326.25 452.51 636.84 847.4 1085.88 1337.72 1589.57 1860.55 2143.02 2456.56 2778.16 - 3099.98 3461.11 3812.64 4215.57 4600.71 5004.6 5418.66 5897.51 6352.55 6812.17 7300.65 7807.57 8318.75 8848.28 9398.94 9948.53 - 10522.21 11122.98 11741.55 12365.35 13004.42 13656.67 14322.88 15014.82 / - 3 10 1 1 214.14 213.25 213.01 213.04 213.24 213.56 213.97 214.46 215.03 215.67 216.38 217.16 - 218 218.9 219.86 220.88 221.97 223.11 224.32 225.58 226.9 228.28 229.72 231.22 232.77 234.38 236.05 237.78 - 239.57 241.41 243.31 245.27 247.28 249.35 251.48 253.67 / - 3 10 2 1 214.02 213.11 212.87 212.9 213.09 213.41 213.81 214.31 214.88 215.52 216.23 217 - 217.84 218.74 219.7 220.73 221.81 222.95 224.16 225.42 226.74 228.13 229.56 231.06 232.62 234.23 235.9 237.63 - 239.42 241.26 243.16 245.12 247.14 249.21 251.34 253.53 / - 3 10 3 1 213.8 212.87 212.61 212.63 212.82 213.13 213.54 214.03 214.59 215.23 215.94 216.71 - 217.55 218.45 219.42 220.44 221.53 222.67 223.88 225.14 226.46 227.85 229.29 230.79 232.34 233.96 235.63 237.36 - 239.15 241 242.9 244.86 246.88 248.96 251.09 253.28 / - 3 10 4 1 213.17 212.08 211.73 211.69 211.84 212.12 212.51 212.99 213.55 214.18 214.88 215.65 - 216.49 217.39 218.36 219.39 220.48 221.63 222.84 224.12 225.45 226.84 228.29 229.8 231.37 233 234.69 236.43 - 238.24 240.1 242.02 244 246.03 248.13 250.28 252.49 / - 3 10 5 1 211.13 209.03 208.36 208.26 208.37 208.63 209.01 209.48 210.05 210.7 211.42 212.22 - 213.08 214.02 215.02 216.09 217.22 218.42 219.68 221 222.38 223.83 225.34 226.86 228.49 230.18 231.93 233.74 - 235.61 237.54 239.52 241.57 243.68 245.84 248.06 250.34 / - 3 10 6 1 205.48 201.07 200.08 199.81 199.83 200.05 200.42 200.92 201.52 202.23 203.02 203.91 - 204.87 205.91 207.03 208.22 209.49 210.82 212.22 213.69 215.23 216.83 218.5 220.24 222.03 223.89 225.79 227.75 - 229.8 231.9 234.06 236.29 238.57 240.91 243.31 245.76 / - 3 10 7 1 191.11 183.61 182.25 181.85 181.86 182.16 182.62 183.31 184.13 185.08 186.15 187.33 - 188.61 189.99 191.46 192.99 194.63 196.35 198.14 200.01 201.94 203.92 205.99 208.13 210.33 212.57 214.89 217.27 - 219.71 222.19 224.75 227.35 230.02 232.72 235.49 238.32 / - 3 10 8 1 160.86 150.02 148.78 148.46 148.81 149.56 150.6 151.89 153.38 155.05 156.89 158.87 - 160.93 163.14 165.45 167.81 170.28 173.08 175.68 178.38 181.11 183.93 186.81 189.7 192.68 195.67 198.74 202.33 - 205.5 208.71 211.94 215.23 218.54 221.91 225.32 228.75 / - 3 10 9 1 110.43 103.88 104.24 105.72 107.67 109.9 112.35 115 117.85 120.78 123.9 127.05 - 130.4 133.73 137.27 140.76 144.42 148.03 151.82 155.64 159.52 163.34 167.38 171.29 175.48 179.45 183.44 187.85 - 191.9 195.97 200.06 204.18 208.84 213.01 217.2 221.44 / - 3 10 10 1 67.92 69.64 72.23 75.26 78.52 81.95 85.5 89.17 92.91 96.79 100.77 104.86 - 109.05 113.34 117.7 122.14 126.69 131.31 135.84 140.59 145.43 150.32 155.04 160.06 165.13 169.97 175.13 180.34 - 185.29 190.6 195.61 201.03 206.1 211.61 216.75 222.2 / - 3 10 11 1 51.29 55.19 58.71 62.36 66.14 70.02 74.02 78.14 82.39 86.76 91.26 95.87 - 100.6 105.44 110.63 116.23 121.67 127.14 132.68 138.29 143.93 149.65 155.64 161.52 167.47 173.49 179.58 185.7 - 191.88 198.16 204.15 210.53 216.98 223.5 229.64 236.25 / - 3 10 12 1 45.57 50.74 55.02 59.15 63.43 67.96 72.7 77.65 82.78 88.09 93.57 99.2 - 104.98 110.89 116.86 122.93 129.09 135.37 141.76 148.24 154.83 161.51 168.29 175.14 183.06 190.82 198.47 205.99 - 213.72 221.35 228.86 236.88 244.65 252.5 260.43 268.43 / - 3 10 13 1 40.48 46.84 52.56 58.09 63.73 69.6 75.87 82.36 89.38 96.1 103.29 111.05 - 118.56 125.93 134.16 141.41 149.51 157.74 166.12 174.63 183.23 191.86 200.55 209.29 218.14 227.08 236.12 245.28 - 254.54 263.9 273.36 282.92 293.32 304.21 315.15 326.01 / - 3 10 14 1 36.29 44.38 53.65 62.72 71.43 80.63 89.09 98.61 108.18 116.69 126.81 136.81 - 147.27 157.98 167.98 178.62 189.87 201.32 212.97 224.7 236.62 248.11 260.37 272.99 285.74 298.57 311.5 324.56 - 337.78 351.16 364.71 378.43 392.32 406.38 420.63 435.05 / - 3 10 15 1 34.96 49.9 63.86 77 90.09 102.75 115.67 129.49 143.12 156.06 171 186.25 - 201.1 215.18 231.31 247.18 263.81 280.01 297.33 314.87 332.19 350.25 368.93 387.95 407.32 427.08 446.8 466.15 - 486.83 507.81 529.1 550.73 572.71 595.06 617.78 640.91 / - 3 10 16 1 44.11 64.92 86.22 105.9 125.22 144.77 164.87 185.7 206.74 228.08 251.67 273.7 - 298.28 323.66 347.74 373.4 400.58 428.2 456.25 485.37 514.1 544.57 575.74 607.45 638.94 671.94 705.81 740.62 - 776.14 812.35 849.14 887.06 925.66 965.55 1007.29 1049.44 / - 3 10 17 1 60.91 93.1 125.33 156.76 187.91 219.7 252.96 287.45 323.47 360.75 399.1 440.58 - 481.64 526.21 572.16 619.04 665.15 715.14 766.86 820.4 875.73 932.71 991.91 1052.44 1113.48 1176.1 1239.42 1300.6 - 1359.56 1419.97 1480.88 1543.78 1607.93 1671.85 1740.08 1805.49 / - 3 10 18 1 88.55 140.69 190.35 243.13 297.45 354.29 414.27 477.65 544.69 615.52 689.56 767.52 - 849.86 936.81 1027.62 1121.85 1218.17 1312.95 1402.53 1494.35 1590.6 1689.39 1788.87 1892.04 1997.24 2104.42 2213.16 2325.76 - 2439.71 2551.36 2667.95 2786.87 2906.81 3028.13 3152.43 3282.27 / - 3 10 19 1 132.86 212.25 294.34 388.78 490.8 601.37 720.5 848.99 989.11 1136.47 1289.48 1436.64 - 1592.78 1748.89 1912.84 2092.14 2266.62 2448 2648.64 2840.48 3042.72 3244.4 3457.89 3677.38 3905.73 4136.15 4368.64 4611.89 - 4866.88 5114.77 5381.04 5639.14 5911.34 6192.19 6462.24 6748.88 / - 3 10 20 1 202.55 326.29 452.54 632.61 838.73 1078.65 1329.78 1582.74 1858.07 2146.53 2448.63 2770.38 - 3110.04 3473.58 3828 4203.48 4622.05 5029.22 5446.78 5929.38 6388.04 6851.67 7339.63 7847.23 8362.96 8904.5 9459.7 10010.97 - 10592.87 11200.48 11816.4 12462.2 13113.82 13785.07 14462.1 15167.84 / - 3 11 1 1 216.18 215.2 214.91 214.92 215.1 215.4 215.81 216.29 216.86 217.49 218.2 218.97 - 219.8 220.7 221.66 222.68 223.77 224.91 226.11 227.37 228.7 230.08 231.52 233.01 234.57 236.18 237.86 239.59 - 241.37 243.22 245.12 247.08 249.1 251.18 253.31 255.5 / - 3 11 2 1 216.06 215.06 214.77 214.77 214.95 215.25 215.65 216.13 216.69 217.33 218.03 218.8 - 219.64 220.54 221.5 222.52 223.6 224.74 225.95 227.21 228.53 229.91 231.35 232.85 234.41 236.02 237.7 239.43 - 241.22 243.07 244.97 246.93 248.95 251.03 253.16 255.36 / - 3 11 3 1 215.84 214.81 214.5 214.5 214.67 214.97 215.36 215.84 216.4 217.03 217.74 218.5 - 219.34 220.24 221.2 222.22 223.3 224.45 225.65 226.91 228.24 229.62 231.06 232.56 234.12 235.74 237.41 239.15 - 240.94 242.79 244.7 246.66 248.68 250.77 252.9 255.1 / - 3 11 4 1 215.1 213.87 213.44 213.36 213.45 213.72 214.1 214.57 215.13 215.75 216.46 217.23 - 218.07 218.97 219.94 220.97 222.06 223.22 224.44 225.72 227.05 228.45 229.91 231.43 233.01 234.64 236.34 238.09 - 239.91 241.78 243.7 245.69 247.73 249.83 251.99 254.2 / - 3 11 5 1 212.86 210.51 209.72 209.56 209.64 209.88 210.24 210.7 211.26 211.9 212.62 213.41 - 214.28 215.22 216.22 217.3 218.43 219.64 220.9 222.24 223.63 225.09 226.61 228.19 229.83 231.53 233.29 235.12 - 237 238.94 240.93 242.99 245.11 247.28 249.49 251.78 / - 3 11 6 1 206.87 201.84 200.83 200.53 200.54 200.75 201.12 201.62 202.23 202.94 203.74 204.63 - 205.61 206.66 207.8 209 210.28 211.59 213 214.49 216.05 217.67 219.36 221.11 222.93 224.81 226.75 228.76 - 230.82 232.95 235.14 237.39 239.7 242.04 244.46 246.95 / - 3 11 7 1 192.01 183.8 182.35 181.91 181.9 182.14 182.65 183.34 184.18 185.15 186.23 187.43 - 188.74 190.14 191.64 193.23 194.87 196.62 198.44 200.35 202.32 204.34 206.45 208.63 210.86 213.14 215.51 217.93 - 220.41 222.95 225.53 228.18 230.88 233.65 236.45 239.32 / - 3 11 8 1 161.24 149.61 148.19 148.01 148.4 149.17 150.25 151.55 153.07 154.79 156.64 158.64 - 160.76 162.97 165.31 167.75 170.22 172.81 175.7 178.43 181.23 184.05 186.96 189.9 192.92 196 199.09 202.78 - 205.97 209.24 212.52 215.87 219.26 222.68 226.15 229.65 / - 3 11 9 1 110.03 103.94 104.32 105.82 107.74 110.03 112.5 115.16 118.03 120.98 124.12 127.29 - 130.55 134.01 137.45 141.09 144.67 148.42 152.24 156 159.9 163.85 167.93 171.87 175.86 180.08 184.17 188.3 - 192.83 196.97 201.13 205.31 210.05 214.29 218.56 222.85 / - 3 11 10 1 68.15 69.95 72.55 75.6 78.88 82.33 85.87 89.55 93.35 97.26 101.27 105.39 - 109.6 113.92 118.31 122.79 127.22 131.86 136.58 141.37 146.24 150.95 155.93 160.99 166.11 170.99 176.19 181.14 - 186.44 191.81 196.87 202.33 207.46 213.03 218.22 223.73 / - 3 11 11 1 51.46 55.47 59.01 62.69 66.49 70.4 74.43 78.58 82.86 87.26 91.79 96.43 - 101.19 106.06 111.12 116.87 122.33 127.89 133.51 139.16 144.85 150.61 156.45 162.36 168.34 174.4 180.52 186.71 - 192.92 199.2 205.58 212.03 218.55 224.7 231.33 238.01 / - 3 11 12 1 45.66 50.95 55.28 59.45 63.77 68.32 73.09 78.07 83.24 88.58 94.09 99.75 - 105.57 111.51 117.53 123.63 129.84 136.16 142.58 149.11 155.74 162.46 169.28 176.17 183.73 191.59 199.38 207.07 - 214.82 222.57 230.36 238.1 245.92 253.83 261.81 269.87 / - 3 11 13 1 40.55 46.99 52.77 58.35 64.03 69.94 76.4 82.76 89.94 96.57 103.8 111.58 - 118.81 126.54 134.44 142.11 150.23 158.51 166.93 175.49 184.13 192.81 201.55 210.34 219.23 228.22 237.32 246.53 - 255.84 265.26 274.78 284.4 294.13 304.71 316.22 326.96 / - 3 11 14 1 36.34 44.48 53.8 62.92 71.67 80.91 89.41 98.97 108.36 117.12 127.26 137.29 - 147.79 158.55 168.6 179.28 190.57 202.05 213.74 225.5 237.46 248.99 261.28 273.95 286.77 299.68 312.68 325.82 - 339.1 352.55 366.16 379.95 393.91 408.05 422.36 436.85 / - 3 11 15 1 34.96 49.94 63.94 77.27 90.26 103.31 115.92 129.33 143.41 156.58 171.38 186.67 - 201.55 215.67 231.83 247.73 264.39 280.64 298.02 315.59 332.82 351.04 369.73 388.77 408.16 427.92 447.67 467.1 - 487.87 508.94 530.31 552.01 574.06 596.47 619.25 642.43 / - 3 11 16 1 44.06 64.89 86.23 105.95 125.31 144.89 165.02 185.87 206.92 228.28 251.87 273.91 - 298.52 323.9 348.04 373.72 400.92 428.55 456.64 485.78 514.53 544.98 576.14 607.84 639.29 672.23 706 740.69 - 776.08 811.99 849.09 887.12 925.76 965.03 1005.6 1047.99 / - 3 11 17 1 60.79 92.98 125.36 156.74 187.95 219.86 253.01 287.49 323.49 360.73 399.03 440.44 - 482 525.96 571.91 618.79 664.83 714.66 766.2 819.59 874.65 931.78 990.35 1050.92 1112.12 1174.25 1237.59 1299.96 - 1353.43 1410.86 1468.25 1527.33 1588.12 1650.57 1713.29 1773.74 / - 3 11 18 1 88.37 140.52 190.17 243.06 297.47 354.33 414.24 477.58 544.46 615.11 689.02 766.71 - 848.71 935.29 1025.73 1119.64 1215.86 1311.36 1401.57 1493.99 1590.7 1690.22 1790.17 1894.49 2000.47 2108.54 2217.57 2332.26 - 2448.17 2562.32 2681.86 2804.04 2927.15 3051.52 3180.14 3311.69 / - 3 11 19 1 132.63 212.09 293.68 387.83 490.79 601.29 718.18 848.23 985.61 1134.82 1287.92 1435.8 - 1586.38 1749.71 1914.67 2095.05 2270.72 2453.48 2640.62 2849.01 3052.81 3256.41 3470.17 3692.34 3920.74 4153.19 4390.83 4636.16 - 4889.84 5143.73 5408.48 5673.25 5948.99 6230.04 6510.17 6803.28 / - 3 11 20 1 202.34 326.4 452.84 626.78 833.44 1071.48 1322 1583.38 1855.81 2142.13 2454.49 2778.49 - 3120.95 3461.45 3844.55 4223 4645.16 5055.65 5476.98 5920.78 6426.34 6894.13 7386.19 7893.18 8413.61 8956.79 9516.84 10081.66 - 10658.3 11270.26 11902.44 12542.21 13211.54 13889.25 14559.26 15290.03 / - 3 12 1 1 218.18 217.12 216.8 216.78 216.95 217.24 217.63 218.11 218.67 219.3 220 220.77 - 221.6 222.49 223.45 224.47 225.55 226.69 227.9 229.16 230.48 231.86 233.3 234.8 236.36 237.97 239.64 241.38 - 243.17 245.02 246.92 248.89 250.91 252.99 255.13 257.32 / - 3 12 2 1 218.05 216.98 216.65 216.63 216.79 217.08 217.47 217.95 218.5 219.13 219.83 220.6 - 221.43 222.32 223.28 224.3 225.38 226.53 227.73 228.99 230.31 231.69 233.13 234.63 236.19 237.81 239.48 241.21 - 243.01 244.86 246.76 248.73 250.75 252.83 254.97 257.17 / - 3 12 3 1 217.81 216.69 216.33 216.29 216.44 216.72 217.11 217.58 218.13 218.76 219.45 220.22 - 221.05 221.94 222.9 223.92 225 226.15 227.35 228.61 229.94 231.32 232.76 234.26 235.82 237.44 239.12 240.86 - 242.65 244.51 246.42 248.39 250.42 252.5 254.65 256.85 / - 3 12 4 1 216.93 215.57 214.99 214.9 215.01 215.26 215.62 216.08 216.63 217.25 217.95 218.72 - 219.55 220.45 221.42 222.45 223.54 224.7 225.92 227.2 228.54 229.94 231.4 232.92 234.5 236.14 237.84 239.6 - 241.42 243.3 245.24 247.23 249.29 251.4 253.57 255.8 / - 3 12 5 1 214.48 211.63 210.99 210.78 210.82 211.03 211.38 211.83 212.38 213.01 213.73 214.52 - 215.39 216.33 217.34 218.41 219.56 220.77 222.04 223.38 224.78 226.25 227.78 229.37 231.03 232.74 234.51 236.35 - 238.24 240.2 242.21 244.29 246.42 248.61 250.87 253.18 / - 3 12 6 1 208.16 202.7 201.56 201.2 201.16 201.35 201.7 202.19 202.79 203.5 204.31 205.2 - 206.18 207.24 208.39 209.61 210.9 212.27 213.71 215.21 216.79 218.43 220.14 221.92 223.77 225.67 227.6 229.63 - 231.72 233.88 236.09 238.37 240.7 243.1 245.56 248.07 / - 3 12 7 1 191.91 183.85 182.29 181.81 181.79 182.02 182.53 183.22 184.07 185.05 186.17 187.4 - 188.71 190.14 191.67 193.28 194.99 196.75 198.61 200.55 202.56 204.65 206.77 208.99 211.28 213.63 216.01 218.48 - 221.01 223.59 226.22 228.92 231.67 234.48 237.33 240.25 / - 3 12 8 1 161.58 149.03 147.7 147.55 147.97 148.79 149.88 151.22 152.77 154.5 156.4 158.43 - 160.56 162.84 165.19 167.65 170.2 172.79 175.49 178.51 181.35 184.26 187.18 190.19 193.22 196.34 199.5 202.67 - 206.45 209.74 213.1 216.48 219.93 223.42 226.93 230.51 / - 3 12 9 1 110.19 104 104.4 105.86 107.85 110.12 112.65 115.33 118.15 121.18 124.26 127.53 - 130.81 134.3 137.75 141.43 145.03 148.81 152.53 156.44 160.38 164.37 168.3 172.46 176.48 180.75 184.85 188.99 - 193.6 197.88 202.15 206.41 210.7 215.55 219.88 224.25 / - 3 12 10 1 68.32 70.23 72.86 75.95 79.23 82.68 86.27 89.98 93.8 97.73 101.77 105.91 - 110.15 114.4 118.82 123.31 127.89 132.56 137.32 142.14 147.05 151.8 156.82 161.92 166.8 172.01 177.25 182.25 - 187.6 192.67 198.12 203.26 208.82 214.02 219.69 225.26 / - 3 12 11 1 51.67 55.75 59.32 63.03 66.85 70.79 74.85 79.02 83.33 87.76 92.32 96.99 - 101.78 106.69 111.7 117.5 123 128.58 134.25 139.93 145.76 151.57 157.45 163.41 169.45 175.55 181.73 187.97 - 194.24 200.58 207.02 213.53 219.71 226.33 233.02 239.77 / - 3 12 12 1 45.79 51.16 55.55 59.76 64.11 68.69 73.49 78.5 83.7 89.07 94.61 100.31 - 106.16 112.14 118.2 124.34 130.58 136.94 143.4 149.97 156.64 163.41 170.27 177.19 184.38 192.54 200.44 208.14 - 215.85 223.79 231.62 239.66 247.56 255.53 263.59 271.73 / - 3 12 13 1 40.64 47.15 52.99 58.62 64.34 70.29 76.82 83.22 90.37 97.1 104.3 112.12 - 119.78 127.15 134.92 143.53 150.94 159.25 167.71 176.31 185.02 193.75 202.53 211.36 220.3 229.34 238.49 247.75 - 257.12 266.59 276.17 285.85 295.63 305.52 316.71 328.04 / - 3 12 14 1 36.39 44.58 53.95 63.12 71.92 81.19 89.73 99.32 108.74 117.54 127.71 137.77 - 148.3 159.09 169.18 179.91 191.24 202.76 214.48 226.28 238.26 249.82 262.15 274.84 287.73 300.72 313.8 327.01 - 340.36 353.87 367.55 381.41 395.43 409.64 424.02 438.57 / - 3 12 15 1 34.96 49.98 64.02 77.4 90.44 103.33 116.16 130.26 143.7 157.17 171.72 187.06 - 201.97 216.12 232.31 248.23 264.92 281.19 298.62 316.24 333.66 351.75 370.46 389.5 408.89 428.66 448.41 467.87 - 488.73 509.88 531.34 553.12 575.24 597.71 620.55 643.77 / - 3 12 16 1 43.99 64.85 86.24 106.01 125.4 145.29 165.14 186.02 207.09 228.44 252.03 274.07 - 298.7 324.09 349.81 373.95 401.16 428.79 456.89 486.06 514.82 545.27 576.4 608.19 639.51 672.39 706.08 740.64 - 775.91 811.7 848.65 886.76 925.5 964.84 1004.76 1045.96 / - 3 12 17 1 60.67 92.95 125.28 156.7 187.96 220.14 253.02 287.46 323.45 360.64 399.07 440.21 - 481.8 525.61 571.53 618.42 664.4 714.11 765.48 818.65 873.51 930.4 988.63 1048.96 1110.31 1172.71 1235.32 1298.7 - 1353.21 1411.94 1469.87 1530.23 1591.45 1655.76 1719.47 1780.97 / - 3 12 18 1 88.21 140.35 190.06 242.98 297.44 354.32 414.16 477.44 544.16 614.63 688.41 765.89 - 847.56 933.23 1023.72 1117.27 1213.42 1309.2 1400 1493.01 1590.32 1690.55 1791.28 1896.42 2003.29 2112.3 2222.28 2338.18 - 2455.31 2570.38 2691.1 2814.62 2939.8 3066.8 3200.6 3333.44 / - 3 12 19 1 132.41 211.95 293.26 387.82 489.54 599.65 717.85 845.88 984.4 1133.1 1286.33 1434.95 - 1586.35 1750.64 1916.62 2098.1 2275.22 2459.39 2648.1 2858.09 3063.67 3269.3 3484.87 3707.53 3938.7 4174.35 4414.45 4659.28 - 4918.18 5171.01 5442.04 5705.57 5988.52 6272.41 6555.5 6851.74 / - 3 12 20 1 202.16 326.6 453.46 620.6 829.01 1064.48 1315.12 1575.37 1851.34 2146.44 2443.93 2787.53 - 3114.15 3476.33 3862.48 4244.25 4635.31 5084.42 5509.66 5957.49 6412.04 6940.11 7436.62 7948.39 8468.69 9016.67 9579.29 10160.54 - 10739.73 11357.16 11983.64 12640.97 13304.92 14001.58 14678.89 15400.67 / - 3 13 1 1 220.11 219.01 218.66 218.63 218.78 219.06 219.45 219.92 220.47 221.1 221.79 222.55 - 223.38 224.28 225.23 226.25 227.33 228.47 229.67 230.93 232.25 233.63 235.07 236.57 238.13 239.74 241.42 243.15 - 244.95 246.8 248.71 250.67 252.7 254.78 256.93 259.13 / - 3 13 2 1 219.99 218.86 218.51 218.47 218.62 218.9 219.28 219.75 220.3 220.92 221.62 222.38 - 223.21 224.1 225.06 226.07 227.15 228.29 229.49 230.76 232.08 233.46 234.9 236.4 237.96 239.57 241.25 242.99 - 244.78 246.63 248.54 250.51 252.54 254.62 256.77 258.97 / - 3 13 3 1 219.7 218.51 218.11 218.04 218.17 218.44 218.81 219.27 219.82 220.44 221.13 221.89 - 222.72 223.61 224.57 225.58 226.66 227.81 229.01 230.27 231.6 232.98 234.43 235.93 237.49 239.11 240.8 242.54 - 244.34 246.19 248.11 250.09 252.12 254.21 256.36 258.57 / - 3 13 4 1 218.69 217.2 216.54 216.4 216.48 216.71 217.06 217.51 218.04 218.66 219.35 220.11 - 220.95 221.85 222.82 223.85 224.94 226.1 227.32 228.61 229.95 231.36 232.83 234.36 235.95 237.6 239.31 241.08 - 242.91 244.8 246.75 248.76 250.82 252.95 255.13 257.37 / - 3 13 5 1 215.99 212.87 212.01 211.79 211.83 212.03 212.38 212.83 213.38 214.02 214.74 215.54 - 216.41 217.35 218.37 219.45 220.6 221.82 223.11 224.41 225.82 227.3 228.84 230.44 232.11 233.84 235.63 237.49 - 239.4 241.37 243.4 245.5 247.65 249.86 252.14 254.47 / - 3 13 6 1 209.3 203.19 202.02 201.62 201.57 201.75 202.1 202.59 203.2 203.91 204.73 205.64 - 206.63 207.71 208.87 210.1 211.42 212.8 214.26 215.8 217.35 219.02 220.75 222.55 224.42 226.36 228.36 230.42 - 232.54 234.73 236.97 239.28 241.65 244.05 246.54 249.09 / - 3 13 7 1 192.54 183.74 182.07 181.54 181.44 181.71 182.22 182.91 183.77 184.78 185.91 187.16 - 188.52 189.96 191.52 193.17 194.91 196.74 198.61 200.59 202.65 204.78 206.98 209.22 211.55 213.95 216.41 218.9 - 221.48 224.12 226.81 229.55 232.35 235.22 238.13 241.09 / - 3 13 8 1 161.01 148.51 147.17 147.07 147.53 148.29 149.42 150.78 152.35 154.12 156.15 158.22 - 160.4 162.71 165.09 167.6 170.15 172.82 175.56 178.63 181.52 184.43 187.44 190.47 193.59 196.76 199.94 203.21 - 206.48 210.4 213.77 217.22 220.71 224.22 227.79 231.38 / - 3 13 9 1 109.66 104.07 104.43 105.96 107.97 110.25 112.76 115.5 118.34 121.38 124.48 127.77 - 131.08 134.47 138.07 141.62 145.4 149.08 152.95 156.9 160.77 164.78 168.85 173.05 177.11 181.42 185.56 189.74 - 193.96 198.66 202.96 207.32 211.75 216.73 221.17 225.63 / - 3 13 10 1 68.6 70.55 73.2 76.28 79.6 83.07 86.68 90.41 94.26 98.21 102.27 106.37 - 110.62 114.98 119.43 123.95 128.56 133.26 138.05 142.92 147.65 152.64 157.71 162.58 167.77 173.02 178.02 183.36 - 188.76 193.87 199.38 204.57 210.19 215.44 221.17 226.5 / - 3 13 11 1 51.9 56.04 59.65 63.38 67.23 71.19 75.28 79.48 83.82 88.28 92.86 97.56 - 102.38 107.32 112.36 118.04 123.68 129.37 134.99 140.8 146.51 152.52 158.46 164.46 170.55 176.7 182.93 189.23 - 195.56 201.95 208.46 214.65 221.27 227.95 234.71 241.07 / - 3 13 12 1 45.95 51.4 55.84 60.09 64.46 69.07 73.9 78.94 84.17 89.57 95.14 100.87 - 106.75 112.77 118.87 125.05 131.33 137.72 144.22 150.83 157.54 164.35 171.25 178.2 185.22 193.21 201.27 209.24 - 216.96 225.01 232.87 240.86 248.81 256.84 264.95 273.15 / - 3 13 13 1 40.76 47.33 53.22 58.9 64.66 70.64 77.2 83.91 90.71 97.95 104.81 112.65 - 120.35 127.75 135.55 143.47 151.63 159.98 168.47 177.1 185.86 194.65 203.48 212.36 221.35 230.44 239.64 248.95 - 258.36 267.89 277.52 287.26 297.1 307.05 317.11 328.52 / - 3 13 14 1 36.47 44.7 54.11 63.33 72.17 81.48 90.06 99.67 109.34 117.95 128.15 138.24 - 148.79 159.61 169.74 180.5 191.87 203.42 215.18 227.01 239.02 250.6 262.95 275.67 288.6 301.66 314.83 328.11 - 341.53 355.11 368.86 382.77 396.86 411.14 425.59 440.2 / - 3 13 15 1 34.96 50.03 64.11 77.53 90.61 103.92 116.4 130.34 143.98 157.47 172.04 187.4 - 201.45 216.54 232.74 248.77 265.38 281.66 299.1 316.77 334.56 352.34 371.06 390.11 409.49 429.25 448.99 468.43 - 489.31 510.55 532.1 553.97 576.16 598.69 621.59 644.85 / - 3 13 16 1 43.93 64.81 86.25 106.05 125.48 145.52 165.25 186.13 207.22 228.57 252.15 274.17 - 298.79 324.19 349.5 374.06 401.28 428.89 456.96 486.14 514.92 545.37 576.47 608.23 639.52 672.35 705.97 740.44 - 775.6 811.58 848.06 886.02 924.84 964.37 1004.44 1045.04 / - 3 13 17 1 60.56 92.83 125.2 156.64 187.92 220.12 252.98 287.36 323.33 360.47 399.12 439.88 - 482.11 525.1 570.94 617.85 663.8 713.43 764.66 817.66 872.35 928.96 986.93 1047 1108.17 1171.08 1234.37 1295.77 - 1352.35 1411.69 1472.75 1532.69 1596.6 1659.8 1724.17 1788.2 / - 3 13 18 1 88.03 140.19 189.91 242.87 297.33 354.24 414.02 477.16 543.76 614.03 687.66 764.8 - 846.46 931.78 1021.86 1115.04 1211.21 1307.02 1398.4 1492.06 1589.95 1690.6 1792.37 1898.3 2006.04 2115.45 2227.04 2343.81 - 2462.05 2578.59 2700.53 2824.27 2951.78 3080.18 3215.61 3349.59 / - 3 13 19 1 132.2 211.85 292.49 386.93 489.47 599.63 715.65 843.58 981.41 1127.56 1284.84 1429.62 - 1586.51 1753.25 1918.86 2090.59 2280.12 2465.81 2656.3 2868.1 3075.33 3283.24 3500.92 3724.04 3958.24 4194.46 4441.14 4690.88 - 4948.71 5205.06 5478.15 5745.22 6031.16 6317.91 6599.64 6904.46 / - 3 13 20 1 202.01 326.92 454.48 613.33 821.06 1051.78 1307.13 1569.2 1849.47 2140.41 2451.33 2777.73 - 3126.97 3492.6 3857.84 4267.36 4662.55 5116.05 5545.58 5997.4 6457.1 6990.44 7492.31 8008.4 8529.21 9082.41 9651.41 10232.64 - 10818.13 11440.83 12072.8 12736.17 13420.17 14108.13 14803.89 15537.97 / - 3 14 1 1 221.96 220.85 220.49 220.45 220.59 220.86 221.24 221.71 222.26 222.88 223.57 224.33 - 225.15 226.04 227 228.01 229.09 230.23 231.43 232.69 234.01 235.39 236.83 238.33 239.89 241.5 243.18 244.91 - 246.71 248.56 250.47 252.44 254.47 256.56 258.71 260.91 / - 3 14 2 1 221.84 220.7 220.33 220.28 220.42 220.69 221.07 221.53 222.08 222.7 223.39 224.15 - 224.97 225.86 226.82 227.83 228.91 230.05 231.25 232.51 233.83 235.21 236.65 238.15 239.71 241.33 243 244.74 - 246.54 248.39 250.3 252.28 254.31 256.39 258.54 260.75 / - 3 14 3 1 221.47 220.23 219.8 219.72 219.83 220.08 220.45 220.9 221.44 222.05 222.74 223.5 - 224.32 225.21 226.16 227.18 228.26 229.4 230.6 231.87 233.19 234.58 236.02 237.53 239.09 240.72 242.41 244.15 - 245.95 247.82 249.74 251.72 253.76 255.86 258.01 260.23 / - 3 14 4 1 220.29 218.55 217.9 217.74 217.81 218.03 218.38 218.82 219.35 219.97 220.66 221.42 - 222.26 223.16 224.13 225.16 226.26 227.43 228.65 229.94 231.3 232.71 234.19 235.72 237.32 238.98 240.7 242.48 - 244.32 246.21 248.17 250.19 252.26 254.4 256.59 258.85 / - 3 14 5 1 217.34 213.98 213 212.72 212.72 212.9 213.23 213.67 214.21 214.84 215.56 216.36 - 217.23 218.18 219.2 220.29 221.45 222.68 223.97 225.33 226.76 228.25 229.81 231.43 233.11 234.85 236.66 238.53 - 240.47 242.46 244.51 246.63 248.81 251.01 253.3 255.66 / - 3 14 6 1 209.73 203.73 202.33 201.89 201.81 201.97 202.31 202.79 203.4 204.12 204.94 205.86 - 206.87 207.96 209.14 210.39 211.73 213.14 214.62 216.15 217.78 219.48 221.24 223.08 224.98 226.94 228.98 231.07 - 233.23 235.41 237.69 240.04 242.44 244.91 247.44 250.02 / - 3 14 7 1 193.01 183.27 181.57 181.01 180.9 181.17 181.69 182.4 183.28 184.3 185.44 186.72 - 188.11 189.6 191.2 192.89 194.64 196.51 198.46 200.49 202.56 204.74 206.99 209.31 211.66 214.11 216.62 219.2 - 221.81 224.5 227.26 230.07 232.92 235.84 238.81 241.84 / - 3 14 8 1 161.2 147.84 146.56 146.53 146.97 147.85 149.02 150.42 152.03 153.84 155.78 158 - 160.22 162.57 165 167.53 170.13 172.85 175.59 178.45 181.65 184.65 187.72 190.79 193.97 197.15 200.43 203.72 - 207.09 210.52 214.53 218.04 221.57 225.18 228.79 232.48 / - 3 14 9 1 109.79 104.14 104.53 106.07 108.1 110.4 112.92 115.68 118.54 121.53 124.71 127.93 - 131.35 134.76 138.38 141.96 145.76 149.48 153.38 157.22 161.25 165.3 169.41 173.46 177.74 181.88 186.28 190.5 - 194.76 199.52 203.86 208.25 212.67 217.12 222.18 226.79 / - 3 14 10 1 68.89 70.88 73.55 76.65 79.99 83.48 87.11 90.86 94.72 98.64 102.72 106.9 - 111.18 115.56 120.04 124.59 129.23 133.97 138.62 143.5 148.45 153.49 158.59 163.51 168.74 174.04 179.08 184.46 - 189.59 195.08 200.64 205.88 211.56 216.87 222.66 228.04 / - 3 14 11 1 52.15 56.36 60 63.76 67.63 71.62 75.73 79.96 84.32 88.81 93.42 98.14 - 102.99 107.95 113.02 118.56 124.36 130.05 135.77 141.56 147.41 153.29 159.25 165.29 171.64 177.85 183.86 190.19 - 196.59 203.03 209.53 216.14 222.82 229.57 235.95 242.82 / - 3 14 12 1 46.14 51.66 56.15 60.43 64.84 69.47 74.33 79.4 84.65 90.09 95.69 101.45 - 107.36 113.41 119.55 125.77 132.08 138.51 145.05 151.69 158.43 165.28 172.22 179.21 186.26 193.86 202.02 210.15 - 218.04 226.2 234.12 242.15 250.05 258.51 266.7 274.98 / - 3 14 13 1 40.9 47.54 53.48 59.2 65 71.01 77.59 84.25 91.16 98.43 105.31 113.19 - 120.91 128.35 136.17 144.13 152.31 160.68 169.2 177.87 186.67 195.52 204.4 213.34 222.37 231.5 240.75 250.1 - 259.57 269.14 278.83 288.62 298.52 308.52 318.64 328.86 / - 3 14 14 1 36.56 44.83 54.29 63.55 72.44 81.77 90.38 100.02 109.72 118.36 128.58 138.7 - 149.27 160.11 170.26 181.04 192.43 204.02 215.81 227.67 239.71 251.31 263.67 276.4 289.35 302.48 315.73 329.09 - 342.58 356.23 370.04 384.02 398.17 412.51 427.02 441.68 / - 3 14 15 1 34.97 50.08 64.2 77.66 90.79 104.18 116.64 130.62 144.25 157.49 172.33 187.69 - 201.76 216.88 233.1 249.15 265.75 282.04 299.47 317.13 334.94 352.75 371.49 390.53 409.9 429.64 449.36 468.76 - 489.6 510.81 532.41 554.37 576.65 599.26 622.22 645.54 / - 3 14 16 1 43.86 64.74 86.26 106.1 125.55 145.6 165.33 186.2 207.29 228.65 252.21 274.2 - 298.79 324.15 349.87 374.01 401.24 428.82 456.86 485.96 514.7 545.14 576.22 607.95 639.21 672.01 705.55 739.93 - 774.97 810.49 847.11 884.89 923.51 962.96 1003.21 1044.07 / - 3 14 17 1 60.44 92.71 125.12 156.57 187.97 220.05 252.87 287.17 323.07 360.18 399.72 439.39 - 481.99 524.34 570.09 617 663.56 712.5 763.62 816.44 870.91 927.26 984.95 1044.74 1105.83 1168.64 1232.08 1293.9 - 1353.07 1411.15 1473.08 1535.92 1599.13 1663.69 1729.53 1795.36 / - 3 14 18 1 87.87 140.06 189.66 242.74 297.14 354.01 413.72 476.7 543.11 613.19 686.6 763.7 - 845.13 930.17 1019.79 1112.84 1208.78 1303.16 1396.51 1492.15 1589.43 1690.74 1793.26 1900.09 2008.78 2119.21 2235.25 2349.71 - 2468.97 2588.41 2710.27 2835.48 2964.4 3094.83 3230.82 3366.42 / - 3 14 19 1 132.01 211.82 292.2 386.08 488.15 597.95 715.39 842.82 980.15 1126.24 1279.36 1428.79 - 1586.66 1746.98 1921.29 2094.46 2285.43 2472.81 2665.18 2866.66 3088.03 3298.34 3518.33 3743.87 3978.66 4218.46 4468.7 4719.34 - 4978.88 5241.63 5514.09 5788.51 6072.92 6367.39 6653.87 6956.24 / - 3 14 20 1 201.91 327.41 455.83 607.46 813.55 1041.55 1300.8 1561.34 1841.55 2132.77 2452.88 2789.17 - 3141.44 3488.83 3879.52 4293.31 4692.61 5112.19 5585.5 6041.8 6506.96 6994.25 7553.1 8074.66 8602.11 9155.97 9729.56 10315.86 - 10905.28 11533.64 12183.45 12842.39 13532.56 14228.5 14953.49 15672.61 / - 3 15 1 1 223.73 222.63 222.27 222.23 222.37 222.64 223.02 223.48 224.02 224.64 225.33 226.08 - 226.91 227.79 228.74 229.76 230.83 231.97 233.17 234.43 235.75 237.13 238.57 240.07 241.62 243.24 244.92 246.66 - 248.45 250.31 252.22 254.2 256.23 258.32 260.47 262.68 / - 3 15 2 1 223.6 222.47 222.1 222.04 222.18 222.44 222.81 223.27 223.81 224.43 225.11 225.87 - 226.69 227.58 228.53 229.54 230.62 231.75 232.95 234.21 235.53 236.91 238.35 239.85 241.41 243.03 244.71 246.45 - 248.25 250.1 252.02 254 256.03 258.12 260.27 262.49 / - 3 15 3 1 223.12 221.85 221.39 221.29 221.38 221.62 221.97 222.42 222.95 223.56 224.24 225 - 225.82 226.71 227.66 228.67 229.75 230.9 232.1 233.37 234.7 236.09 237.54 239.05 240.62 242.25 243.94 245.69 - 247.5 249.37 251.3 253.29 255.34 257.45 259.62 261.84 / - 3 15 4 1 221.74 219.9 219.15 218.97 219.02 219.22 219.55 219.99 220.52 221.13 221.82 222.58 - 223.41 224.31 225.28 226.32 227.42 228.59 229.82 231.12 232.47 233.89 235.37 236.92 238.53 240.19 241.92 243.71 - 245.56 247.48 249.45 251.48 253.58 255.73 257.94 260.21 / - 3 15 5 1 218.5 214.63 213.68 213.39 213.38 213.55 213.87 214.31 214.85 215.49 216.21 217.02 - 217.9 218.86 219.89 220.94 222.11 223.35 224.66 226.03 227.47 228.98 230.56 232.19 233.9 235.66 237.49 239.38 - 241.34 243.35 245.43 247.57 249.77 252.03 254.36 256.74 / - 3 15 6 1 210.48 203.81 202.38 201.87 201.78 201.93 202.26 202.75 203.36 204.09 204.92 205.85 - 206.88 207.99 209.19 210.47 211.82 213.25 214.76 216.35 218.01 219.74 221.52 223.39 225.32 227.33 229.4 231.53 - 233.71 235.97 238.3 240.68 243.13 245.64 248.22 250.84 / - 3 15 7 1 193.29 182.77 180.88 180.25 180.19 180.46 180.98 181.7 182.59 183.63 184.73 186.03 - 187.44 188.96 190.55 192.26 194.07 195.97 197.95 199.98 202.31 204.54 206.81 209.19 211.63 214.14 216.68 219.31 - 222.01 224.77 227.56 230.43 233.36 236.35 239.38 242.47 / - 3 15 8 1 160.73 147.11 146.02 146.04 146.51 147.43 148.63 150.07 151.73 153.56 155.53 157.66 - 160.06 162.43 164.9 167.49 170.13 172.88 175.69 178.58 181.53 184.87 187.99 191.12 194.35 197.59 200.93 204.28 - 207.71 211.2 214.69 218.88 222.47 226.15 229.84 233.6 / - 3 15 9 1 109.31 104.16 104.64 106.2 108.25 110.56 113.1 115.82 118.75 121.75 124.95 128.19 - 131.63 135.06 138.71 142.31 145.98 149.89 153.82 157.68 161.75 165.73 169.87 174.06 178.39 182.56 187 191.27 - 195.58 199.92 204.78 209.21 213.68 218.18 223.31 227.89 / - 3 15 10 1 69.2 71.24 73.91 77.03 80.38 83.91 87.56 91.29 95.17 99.15 103.25 107.45 - 111.75 116.16 120.66 125.24 129.78 134.52 139.35 144.27 149.26 154.33 159.23 164.43 169.7 174.74 180.14 185.57 - 190.74 196.29 201.53 207.19 212.52 218.29 223.69 229.59 / - 3 15 11 1 52.44 56.71 60.39 64.17 68.08 72.09 76.22 80.48 84.86 89.37 94 98.75 - 103.63 108.61 113.7 119.08 125.04 130.74 136.56 142.33 148.21 154.24 160.24 166.33 172.49 178.73 185.04 191.43 - 197.89 204.39 210.94 217.62 224.37 230.76 237.63 244.57 / - 3 15 12 1 46.38 51.97 56.5 60.81 65.25 69.91 74.8 79.89 85.17 90.63 96.25 102.04 - 107.98 114.06 120.24 126.49 132.84 139.3 145.87 152.54 159.32 166.2 173.18 180.2 187.29 194.46 202.68 210.96 - 219.15 227.07 235.23 243.4 251.61 259.76 268.01 276.34 / - 3 15 13 1 41.09 47.8 53.79 59.53 65.36 71.4 78.01 84.69 91.62 98.91 105.83 113.73 - 121.47 128.94 136.78 144.76 152.97 161.36 169.9 178.59 187.41 196.34 205.27 214.26 223.34 232.52 241.81 251.2 - 260.71 270.34 280.06 289.91 299.86 309.92 320.09 330.36 / - 3 15 14 1 36.69 44.99 54.5 63.8 72.72 82.08 90.72 100.38 109.49 118.76 129 139.14 - 149.73 160.57 170.75 181.54 192.94 204.53 216.34 228.21 240.28 251.9 264.28 277.01 289.95 303.1 316.44 329.88 - 343.45 357.17 371.04 385.08 399.29 413.69 428.25 442.96 / - 3 15 15 1 34.99 50.13 64.31 77.82 90.97 104.07 117.37 131.16 144.5 158.07 172.58 187.94 - 201.99 217.11 233.34 249.41 266.01 282.73 299.69 317.31 335.08 352.87 371.62 390.66 410.03 429.74 448.88 469.65 - 489.55 510.7 532.23 554.13 576.41 599.08 622.1 645.48 / - 3 15 16 1 43.79 64.74 86.28 106.15 125.61 145.67 165.39 186.24 207.3 228.74 252.18 274.43 - 298.67 323.98 349.91 373.73 400.96 428.51 456.57 485.48 514.12 544.42 575.4 607.06 638.33 671.13 704.62 738.9 - 773.81 809.65 845.61 883.22 921.71 961.06 1001.21 1042.12 / - 3 15 17 1 60.34 92.61 125.04 156.68 188.12 219.86 253.1 286.88 322.67 359.66 399.16 438.71 - 481.15 523.29 568.83 615.62 663.21 711.18 762.18 815 869.16 925.28 982.87 1042.49 1103.16 1165.53 1228.72 1291.04 - 1350.44 1409.78 1471.64 1535.05 1598.82 1664.03 1730.6 1797.07 / - 3 15 18 1 87.72 139.97 189.52 242.53 296.89 353.6 413.21 476 542.11 611.9 685.14 761.99 - 843.29 928.26 1017.77 1110.39 1205.82 1301.38 1394.16 1490.41 1589.09 1690.55 1796.09 1901.3 2010.89 2122.85 2239.81 2354.97 - 2476.11 2598.62 2720.47 2846.96 2977.53 3113.22 3246.78 3384.17 / - 3 15 19 1 131.86 211.87 292.08 385.29 487.02 597.64 713.26 839.64 977.62 1124.46 1277.08 1427.48 - 1586.91 1748 1923.59 2098.42 2290.83 2480.2 2674.66 2878.14 3101.56 3314.55 3537.15 3765.37 4001.04 4244.62 4495.83 4752.58 - 5015.09 5278.17 5557.52 5834.18 6123.79 6417.15 6712.6 7019.13 / - 3 15 20 1 201.9 328.15 457.67 599.82 806.87 1032.6 1286.49 1546.13 1833.86 2129.05 2444.75 2784.57 - 3134.9 3508.98 3903.99 4289.88 4726.49 5150.79 5589.94 6091.45 6562.65 7055.7 7555.7 8148.89 8683.7 9243.21 9816.51 10402.46 - 11006.44 11638.92 12295.13 12960.44 13658 14375.44 15100.38 15839.89 / - 3 16 1 1 225.39 224.35 224.01 223.97 224.12 224.39 224.76 225.22 225.76 226.38 227.07 227.82 - 228.64 229.52 230.47 231.49 232.56 233.69 234.89 236.15 237.47 238.85 240.29 241.79 243.34 244.96 246.64 248.38 - 250.18 252.03 253.95 255.93 257.96 260.06 262.21 264.42 / - 3 16 2 1 225.21 224.12 223.75 223.7 223.83 224.09 224.45 224.91 225.45 226.06 226.74 227.49 - 228.31 229.2 230.15 231.16 232.23 233.37 234.57 235.82 237.14 238.53 239.97 241.47 243.03 244.65 246.33 248.07 - 249.88 251.74 253.66 255.64 257.67 259.77 261.93 264.15 / - 3 16 3 1 224.59 223.32 222.84 222.71 222.8 223.02 223.37 223.81 224.33 224.94 225.61 226.36 - 227.18 228.07 229.02 230.04 231.12 232.26 233.47 234.74 236.07 237.47 238.92 240.44 242.01 243.65 245.35 247.11 - 248.93 250.81 252.75 254.74 256.8 258.92 261.1 263.34 / - 3 16 4 1 223 220.91 220.23 220.01 220.03 220.22 220.54 220.96 221.48 222.08 222.77 223.53 - 224.36 225.27 226.24 227.28 228.39 229.56 230.8 232.11 233.47 234.91 236.4 237.96 239.58 241.26 243 244.81 - 246.67 248.6 250.59 252.64 254.75 256.92 259.15 261.44 / - 3 16 5 1 219.43 215.29 214.21 213.87 213.81 213.96 214.26 214.69 215.22 215.85 216.57 217.38 - 218.27 219.23 220.27 221.39 222.57 223.83 225.15 226.54 228.01 229.53 231.13 232.79 234.52 236.31 238.16 240.08 - 242.06 244.11 246.22 248.35 250.58 252.87 255.23 257.64 / - 3 16 6 1 210.96 203.72 202.09 201.58 201.45 201.58 201.91 202.4 203.02 203.76 204.61 205.54 - 206.59 207.72 208.95 210.25 211.64 213.11 214.65 216.26 217.96 219.73 221.57 223.46 225.45 227.5 229.61 231.78 - 234.03 236.34 238.72 241.13 243.63 246.2 248.82 251.5 / - 3 16 7 1 193.4 182.02 180.12 179.49 179.42 179.7 180.24 180.98 181.83 182.88 184.07 185.4 - 186.84 188.39 190.02 191.77 193.63 195.57 197.56 199.67 201.86 204.12 206.43 208.84 211.58 214.1 216.73 219.42 - 222.18 224.96 227.84 230.77 233.74 236.78 239.88 243.04 / - 3 16 8 1 160.16 146.6 145.58 145.52 146.09 147.02 148.24 149.69 151.38 153.25 155.26 157.43 - 159.73 162.14 164.83 167.44 170.14 172.92 175.78 178.71 181.71 184.78 188.27 191.47 194.74 198.05 201.42 204.87 - 208.33 211.88 215.44 219.09 223.38 227.13 230.9 234.74 / - 3 16 9 1 109.04 104.26 104.78 106.3 108.37 110.74 113.31 116.04 118.98 122 125.13 128.47 - 131.82 135.38 138.92 142.67 146.37 150.3 154.13 158.16 162.11 166.27 170.44 174.67 178.84 183.25 187.51 192.05 - 196.4 200.79 205.7 210.18 214.69 219.25 223.85 229.08 / - 3 16 10 1 69.55 71.6 74.33 77.48 80.85 84.37 88.02 91.8 95.7 99.7 103.81 108.03 - 112.35 116.77 121.19 125.79 130.47 135.23 140.1 145.05 150.07 154.96 160.12 165.36 170.39 175.75 181.19 186.36 - 191.89 197.49 202.79 208.5 213.88 219.71 225.17 231.13 / - 3 16 11 1 52.8 57.12 60.85 64.66 68.59 72.63 76.78 81.06 85.46 89.98 94.63 99.4 - 104.29 109.3 114.41 119.62 125.63 131.47 137.29 143.2 149.11 155.01 161.23 167.36 173.57 179.86 186.22 192.66 - 199.18 205.73 212.35 218.7 225.49 232.35 239.29 245.84 / - 3 16 12 1 46.71 52.35 56.91 61.26 65.72 70.41 75.32 80.43 85.73 91.21 96.86 102.67 - 108.63 114.73 120.95 127.24 133.62 140.11 146.7 153.4 160.21 167.12 174.13 181.16 188.29 195.5 203.28 211.68 - 220.02 228.12 236.25 244.62 252.87 260.97 269.27 277.66 / - 3 16 13 1 41.36 48.14 54.16 59.93 65.78 71.83 78.46 85.16 92.12 99.43 106.37 114.28 - 122.04 129.53 137.38 145.37 153.6 162.01 170.56 179.25 188.09 197.06 206.06 215.11 224.24 233.46 242.79 252.23 - 261.77 271.43 281.2 291.09 301.08 311.19 321.41 331.75 / - 3 16 14 1 36.9 45.21 54.76 64.1 73.05 82.42 91.09 100.76 110.6 119.16 129.41 139.56 - 150.15 161 171.18 181.98 193.37 204.96 216.69 228.62 240.67 252.28 264.66 277.41 290.35 303.48 316.82 330.35 - 344.01 357.81 371.75 385.84 400.11 414.56 429.17 443.93 / - 3 16 15 1 35.21 50.2 64.45 78 91.18 104.3 117.23 131.4 144.73 158.93 172.79 188.11 - 202.15 217.23 233.42 249.45 266.03 282.4 299.67 317.24 334.96 352.67 371.33 390.31 409.64 429.34 448.44 468.71 - 488.98 510.06 531.49 553.29 575.46 598 620.9 644.18 / - 3 16 16 1 43.75 64.73 86.32 106.21 125.74 145.72 165.42 186.23 207.24 228.99 252.01 274.55 - 298.4 323.62 349.45 373.14 400.25 427.73 455.73 484.53 513.27 543.16 573.97 605.44 636.51 669.27 702.74 736.98 - 771.8 807.54 843.25 880.6 918.74 957.66 997.35 1037.81 / - 3 16 17 1 60.25 92.52 124.98 156.54 187.96 219.59 252.71 286.42 322.1 358.91 398.25 437.66 - 479.97 521.85 567.15 613.64 661.11 709.1 760.08 812.77 866.67 922.36 979.34 1038.37 1098.75 1160.38 1223.31 1285.61 - 1345.45 1406.47 1467.84 1531.76 1596.2 1661.93 1729.16 1798.67 / - 3 16 18 1 87.61 139.96 189.4 242.29 296.5 352.94 412.27 474.89 540.69 610.03 682.94 759.61 - 840.5 925.21 1013.91 1105.91 1200.89 1296.84 1391.21 1486.93 1586.45 1688.59 1795.06 1901.49 2012.15 2127.46 2243.28 2359.9 - 2482.25 2606.22 2733.39 2861.9 2993.75 3127.23 3262.76 3400.6 / - 3 16 19 1 131.77 212.08 292.23 385.42 486.98 595.69 712.83 838.67 974.37 1118.98 1273.34 1424.79 - 1578.68 1747.84 1924.76 2101.41 2286.17 2486.78 2683.7 2889.44 3097.89 3334.49 3556.41 3787.76 4026.67 4273.53 4526.86 4785.1 - 5051.25 5321.78 5600.84 5890.47 6179.22 6476.69 6778.43 7087.8 / - 3 16 20 1 202.04 329.24 460.16 601.39 801.28 1031.48 1282.1 1539.59 1818.65 2121.9 2436.75 2782.78 - 3129.49 3502.26 3900.04 4320.56 4730.79 5193.92 5639.35 6098.2 6624.89 7124.39 7632.39 8163.46 8774.51 9341.05 9920.85 10513.83 - 11126.43 11752.67 12413.36 13094.81 13800.94 14527.76 15260.74 16012.28 / - 3 17 1 1 226.92 225.98 225.67 225.65 225.81 226.08 226.46 226.92 227.46 228.07 228.76 229.51 - 230.33 231.21 232.16 233.17 234.24 235.38 236.57 237.83 239.15 240.53 241.96 243.46 245.02 246.64 248.32 250.06 - 251.86 253.72 255.64 257.62 259.66 261.75 263.91 266.13 / - 3 17 2 1 226.65 225.62 225.26 225.21 225.34 225.6 225.96 226.41 226.95 227.56 228.24 228.99 - 229.81 230.69 231.64 232.65 233.72 234.86 236.06 237.32 238.64 240.02 241.47 242.97 244.54 246.16 247.85 249.6 - 251.4 253.27 255.2 257.18 259.23 261.34 263.5 265.73 / - 3 17 3 1 225.85 224.58 224.08 223.94 224.01 224.22 224.56 224.99 225.51 226.12 226.8 227.55 - 228.37 229.26 230.21 231.23 232.32 233.47 234.68 235.96 237.29 238.69 240.15 241.66 243.23 244.88 246.59 248.36 - 250.19 252.08 254.03 256.04 258.11 260.24 262.44 264.69 / - 3 17 4 1 223.98 221.74 220.9 220.68 220.71 220.89 221.21 221.64 222.16 222.77 223.46 224.23 - 225.07 225.98 226.96 228.01 229.13 230.31 231.56 232.88 234.26 235.71 237.22 238.79 240.43 242.13 243.89 245.71 - 247.54 249.49 251.5 253.58 255.71 257.9 260.16 262.48 / - 3 17 5 1 220.04 215.38 214.29 213.92 213.84 213.98 214.27 214.7 215.23 215.87 216.6 217.42 - 218.32 219.3 220.35 221.49 222.69 223.97 225.32 226.74 228.23 229.78 231.41 233.05 234.8 236.63 238.52 240.47 - 242.49 244.57 246.71 248.92 251.19 253.53 255.92 258.38 / - 3 17 6 1 211 203.15 201.52 200.94 200.73 200.85 201.18 201.66 202.28 203.03 203.89 204.86 - 205.93 207.09 208.35 209.69 211.11 212.62 214.21 215.84 217.58 219.4 221.29 223.25 225.28 227.36 229.54 231.77 - 234.08 236.43 238.87 241.37 243.93 246.55 249.23 251.98 / - 3 17 7 1 192.44 181.2 179.3 178.67 178.63 178.92 179.48 180.18 181.12 182.21 183.44 184.76 - 186.24 187.83 189.53 191.29 193.18 195.17 197.24 199.37 201.61 203.93 206.29 208.76 211.3 213.92 216.56 219.31 - 222.43 225.29 228.23 231.24 234.29 237.41 240.59 243.83 / - 3 17 8 1 160.08 146.17 145.15 145.1 145.68 146.62 147.85 149.34 151.05 152.93 154.98 157.17 - 159.49 161.92 164.46 167.3 170.05 172.88 175.8 178.79 181.86 185 188.2 191.82 195.14 198.51 201.95 205.44 - 208.99 212.59 216.24 219.93 223.7 228.14 231.98 235.9 / - 3 17 9 1 108.75 104.38 104.95 106.51 108.59 110.95 113.57 116.31 119.2 122.28 125.43 128.78 - 132.15 135.72 139.28 143.06 146.78 150.74 154.59 158.65 162.63 166.82 171.02 175.17 179.49 183.95 188.25 192.83 - 197.22 201.66 206.14 211.15 215.72 220.33 224.99 230.28 / - 3 17 10 1 69.96 72.06 74.84 78.02 81.42 84.95 88.61 92.4 96.3 100.32 104.44 108.66 - 112.92 117.34 121.87 126.49 131.19 135.98 140.87 145.84 150.69 155.81 161.01 166.29 171.36 176.76 181.93 187.46 - 193.04 198.34 204.03 209.42 215.23 220.7 226.64 232.2 / - 3 17 11 1 53.28 57.65 61.41 65.27 69.23 73.29 77.46 81.75 86.16 90.69 95.35 100.13 - 105.03 110.04 115.17 120.4 126.33 132.22 138.03 143.94 149.91 155.96 162.02 168.17 174.4 180.71 187.11 193.57 - 200.12 206.75 213.41 220.13 226.99 233.91 240.48 247.53 / - 3 17 12 1 47.2 52.87 57.45 61.81 66.3 71.01 75.94 81.07 86.39 91.88 97.54 103.36 - 109.33 115.45 121.7 128.03 134.44 140.94 147.56 154.28 161.1 168.03 175.05 182.11 189.25 196.49 203.82 212.25 - 220.76 228.97 237.28 245.56 253.81 262.2 270.84 279.31 / - 3 17 13 1 41.78 48.62 54.65 60.43 66.28 72.34 78.8 85.51 92.67 99.99 106.94 114.86 - 122.63 130.12 137.97 145.96 154.18 162.59 171.15 179.84 188.67 197.63 206.69 215.82 225.01 234.27 243.64 253.11 - 262.69 272.38 282.18 292.1 302.13 312.28 322.54 332.92 / - 3 17 14 1 37.24 45.56 55.12 64.48 73.44 82.82 91.49 101.16 110.97 119.57 129.81 139.95 - 150.53 161.37 171.54 182.31 193.69 205.25 216.92 228.84 240.85 252.41 264.74 277.44 290.33 303.43 316.73 330.25 - 343.95 357.85 371.89 386.07 400.41 414.9 429.55 444.35 / - 3 17 15 1 35.47 50.35 64.64 78.24 91.44 104.72 117.35 131.01 144.94 158.48 172.92 188.19 - 202.15 217.18 233.3 249.25 265.74 282.01 299.2 316.71 334.36 351.99 370.54 389.39 408.58 428.13 447.09 467.01 - 487.37 508.36 529.71 551.4 573.45 595.85 618.61 641.72 / - 3 17 16 1 43.56 64.75 86.38 106.3 125.74 145.77 165.41 186.16 207.09 228.75 251.66 274.08 - 297.81 322.93 348.66 372.15 398.99 426.26 453.94 482.42 510.96 540.84 571.47 602.74 633.58 666.1 699.3 733.24 - 767.74 803.14 838.42 875.36 913.06 951.52 990.75 1030.72 / - 3 17 17 1 60.21 92.42 124.94 156.47 187.76 219.21 252.15 285.7 321.21 357.82 396.95 436.03 - 478.08 519.66 564.72 610.91 658.14 705.69 756.3 808.53 861.95 917.09 973.46 1031.88 1091.78 1152.67 1215.14 1278.55 - 1337.5 1399.03 1462.09 1525.49 1591.04 1658.04 1724.7 1794.67 / - 3 17 18 1 87.57 140.08 189.35 242.05 295.85 351.97 410.88 472.94 538.38 607.27 679.6 755.76 - 835.87 919.93 1007.89 1099.26 1193.64 1289.3 1384.17 1481.72 1581.68 1685.44 1791.62 1901.14 2013.14 2127.46 2244.2 2363.05 - 2486.79 2612.32 2741.08 2871.43 3004.12 3140.55 3278.22 3418.2 / - 3 17 19 1 131.81 212.56 293.09 384.96 485.83 595.13 711.64 836.48 969.25 1114.07 1267.95 1416.19 - 1576.63 1746.06 1917.79 2103.18 2289.99 2492.65 2692.36 2900.57 3112.32 3350.96 3576.68 3811.47 4053.78 4302.53 4558.69 4822.88 - 5094.33 5366.22 5652.84 5946.48 6236.39 6542.65 6851.8 7159.41 / - 3 17 20 1 202.42 330.92 463.57 607.07 796.5 1020.83 1267.17 1526.91 1812.95 2106.09 2435.42 2769.37 - 3130.2 3518.12 3896.03 4316.96 4761.53 5196.35 5686.41 6155.01 6643.51 7198.73 7716.82 8257.14 8812.6 9381.67 10038.95 10640.28 - 11262.45 11893.9 12556.58 13247.91 13964.91 14694.02 15451.75 16230.41 / - 3 18 1 1 228.27 227.43 227.17 227.17 227.34 227.62 228 228.46 229.01 229.62 230.3 231.06 - 231.87 232.76 233.7 234.71 235.78 236.92 238.11 239.37 240.69 242.07 243.51 245.01 246.57 248.19 249.88 251.62 - 253.42 255.28 257.21 259.19 261.23 263.33 265.5 267.72 / - 3 18 2 1 227.84 226.87 226.53 226.48 226.61 226.87 227.23 227.68 228.21 228.82 229.5 230.25 - 231.07 231.95 232.9 233.91 234.99 236.13 237.33 238.59 239.92 241.31 242.76 244.27 245.84 247.47 249.16 250.92 - 252.73 254.61 256.55 258.54 260.6 262.72 264.89 267.13 / - 3 18 3 1 226.81 225.53 224.92 224.78 224.85 225.06 225.4 225.83 226.35 226.95 227.62 228.38 - 229.2 230.09 231.05 232.07 233.16 234.32 235.54 236.82 238.17 239.58 241.05 242.59 244.19 245.85 247.57 249.35 - 251.2 253.11 255.07 257.1 259.19 261.34 263.56 265.83 / - 3 18 4 1 224.6 222.2 221.27 221.01 220.99 221.16 221.46 221.87 222.38 222.99 223.68 224.44 - 225.29 226.21 227.2 228.26 229.39 230.59 231.86 233.19 234.59 236.06 237.59 239.19 240.85 242.57 244.36 246.21 - 248.13 250.1 252.15 254.25 256.41 258.64 260.93 263.28 / - 3 18 5 1 220.24 215.26 213.89 213.47 213.37 213.48 213.77 214.19 214.72 215.37 216.11 216.94 - 217.85 218.85 219.93 221.09 222.32 223.63 225.01 226.41 227.93 229.53 231.19 232.92 234.72 236.59 238.53 240.53 - 242.59 244.73 246.92 249.18 251.51 253.89 256.34 258.86 / - 3 18 6 1 210.79 202.36 200.6 199.93 199.76 199.87 200.19 200.69 201.31 202.08 202.96 203.95 - 205.05 206.24 207.53 208.9 210.37 211.92 213.52 215.23 217.02 218.89 220.83 222.85 224.91 227.07 229.3 231.6 - 233.97 236.41 238.89 241.46 244.09 246.78 249.54 252.35 / - 3 18 7 1 192.22 180.3 178.32 177.76 177.76 178.1 178.64 179.43 180.39 181.51 182.77 184.17 - 185.68 187.27 189.01 190.85 192.79 194.78 196.9 199.11 201.41 203.74 206.19 208.73 211.33 213.97 216.72 219.5 - 222.38 225.33 228.31 231.73 234.88 238.06 241.33 244.65 / - 3 18 8 1 159.31 145.74 144.73 144.69 145.28 146.23 147.49 149.01 150.73 152.65 154.72 156.94 - 159.28 161.74 164.3 167.17 169.94 172.81 175.75 178.78 181.88 185.06 188.3 191.61 195.38 198.82 202.33 205.9 - 209.56 213.25 216.98 220.76 224.58 228.46 233.05 237.04 / - 3 18 9 1 108.54 104.56 105.2 106.83 108.92 111.31 113.93 116.67 119.56 122.66 125.82 129.18 - 132.55 136.02 139.7 143.35 147.23 151.03 155.09 159.03 163.18 167.4 171.52 175.81 180.16 184.45 189 193.38 - 198.06 202.54 207.06 212.13 216.75 221.41 226.12 230.87 / - 3 18 10 1 70.5 72.69 75.52 78.75 82.17 85.73 89.39 93.18 97.08 101.08 105.2 109.36 - 113.68 118.11 122.64 127.27 131.98 136.77 141.51 146.49 151.55 156.7 161.92 166.97 172.33 177.78 182.98 188.55 - 193.85 199.52 205.27 210.7 216.57 222.09 228.09 233.7 / - 3 18 11 1 54.01 58.39 62.22 66.14 70.13 74.21 78.38 82.67 87.08 91.6 96.26 101.03 - 105.92 110.93 116.05 121.27 127.01 133.04 138.94 144.82 150.75 156.8 163.01 169.19 175.45 181.8 188.23 194.75 - 201.34 208.02 214.73 221.51 228.42 234.99 242.03 249.16 / - 3 18 12 1 48 53.64 58.21 62.58 67.1 71.83 76.77 81.91 87.23 92.72 98.38 104.19 - 110.16 116.27 122.52 128.89 135.33 141.84 148.46 155.19 162.01 168.95 175.95 183.01 190.17 197.42 204.76 212.44 - 221.04 229.68 237.97 246.22 254.75 263.28 271.57 280.37 / - 3 18 13 1 42.49 49.39 55.38 61.13 66.97 73 79.37 86.13 93.06 100.22 107.59 115.5 - 122.69 130.73 138.46 147.25 154.72 163.1 171.63 180.29 189.09 198 207.04 216.21 225.49 234.83 244.24 253.74 - 263.34 273.05 282.87 292.81 302.86 313.03 323.32 333.72 / - 3 18 14 1 38.05 46.38 55.74 65.02 73.98 83.33 91.98 101.61 111.07 119.99 130.22 140.32 - 150.87 161.66 171.77 182.5 193.82 205.32 216.92 228.77 240.71 252.17 264.41 277.01 289.81 302.8 315.99 329.38 - 342.97 356.76 370.77 384.99 399.42 414.03 428.76 443.64 / - 3 18 15 1 36.18 50.75 64.98 78.42 91.8 104.95 117.64 131.73 145.07 158.54 172.92 188.12 - 201.97 216.88 232.86 248.68 265.03 281.04 298.11 315.49 332.94 350.38 368.75 387.41 406.43 425.79 444.54 464.23 - 484.36 505.08 526.16 547.6 569.38 591.51 614.01 636.87 / - 3 18 16 1 43.48 64.9 86.57 106.48 125.87 145.82 165.36 186.01 206.81 227.93 251.08 272.94 - 296.82 321.72 347.08 370.09 396.59 423.6 450.89 479.02 507.29 536.62 566.86 597.74 628.2 660.38 693.24 726.8 - 760.86 795.32 830.56 866.96 904.08 941.92 980.49 1019.79 / - 3 18 17 1 60.28 92.36 125 156.25 187.13 218.7 251.46 284.7 319.9 356.13 394.96 433.62 - 475.31 516.31 560.88 606.57 653.84 700.3 750.41 802.07 854.79 909.18 964.69 1022.21 1081.16 1141.05 1202.66 1265.35 - 1325.92 1387.8 1451.09 1515.4 1580.92 1647.93 1716.89 1786.08 / - 3 18 18 1 87.69 140.46 189.51 241.8 295 350.41 408.63 469.94 534.51 602.66 674.44 750.14 - 829.23 912.41 999.07 1089.5 1182.92 1278.98 1374.33 1471.83 1573.74 1677.58 1784.78 1895.52 2008.79 2124.62 2242.96 2365.57 - 2488.97 2616.24 2746.8 2879.19 3014.09 3152.66 3292.8 3435.36 / - 3 18 19 1 132.11 213.54 294.59 385.51 485.57 592.44 707.7 831.07 964.14 1105.02 1255.21 1407.95 - 1569.67 1740.34 1913.41 2102.09 2290.39 2486.21 2701.3 2911.21 3127.24 3351.03 3599.97 3839.05 4083.02 4336.15 4595.07 4864.72 - 5139.06 5423.69 5707.31 6005.28 6305.59 6612.95 6931.37 7246.58 / - 3 18 20 1 203.28 333.58 468.54 614.75 789.67 1012.3 1259.69 1517.29 1791.88 2093.03 2420.51 2763.81 - 3119.89 3503.4 3893.25 4315.49 4762.44 5199.38 5690.02 6166.96 6702.51 7212.06 7742.82 8348.88 8916.09 9496.73 10083.91 10693.51 - 11415.18 12062.99 12740.26 13438.26 14156.96 14896.04 15665.17 16459.36 / - 3 19 1 1 229.31 228.58 228.35 228.37 228.54 228.83 229.21 229.67 230.22 230.83 231.52 232.27 - 233.09 233.97 234.92 235.93 237 238.14 239.34 240.6 241.92 243.31 244.75 246.26 247.83 249.46 251.15 252.9 - 254.71 256.58 258.52 260.51 262.56 264.68 266.85 269.09 / - 3 19 2 1 228.65 227.71 227.36 227.3 227.42 227.67 228.02 228.47 229 229.6 230.28 231.03 - 231.85 232.74 233.69 234.71 235.79 236.93 238.14 239.42 240.75 242.15 243.61 245.13 246.72 248.36 250.07 251.84 - 253.67 255.56 257.52 259.53 261.61 263.74 265.94 268.2 / - 3 19 3 1 227.28 225.92 225.18 225.01 225.06 225.27 225.59 226.02 226.53 227.13 227.81 228.57 - 229.4 230.3 231.27 232.3 233.41 234.58 235.82 237.12 238.48 239.92 241.41 242.97 244.59 246.28 248.03 249.84 - 251.71 253.65 255.65 257.71 259.83 262.01 264.26 266.57 / - 3 19 4 1 224.66 221.77 220.82 220.51 220.47 220.62 220.91 221.31 221.83 222.44 223.14 223.91 - 224.78 225.71 226.72 227.81 228.97 230.19 231.49 232.86 234.29 235.79 237.36 239 240.7 242.47 244.3 246.2 - 248.16 250.13 252.22 254.37 256.59 258.87 261.22 263.62 / - 3 19 5 1 219.97 214.39 212.96 212.47 212.32 212.41 212.68 213.1 213.64 214.29 215.04 215.88 - 216.82 217.85 218.96 220.15 221.42 222.76 224.19 225.67 227.2 228.84 230.56 232.35 234.2 236.13 238.13 240.19 - 242.32 244.52 246.79 249.12 251.51 253.97 256.5 259.08 / - 3 19 6 1 210.43 201.35 199.51 198.91 198.73 198.84 199.17 199.68 200.33 201.12 202.03 203.06 - 204.18 205.38 206.7 208.12 209.63 211.22 212.9 214.67 216.47 218.4 220.4 222.48 224.63 226.83 229.13 231.5 - 233.95 236.46 239.04 241.66 244.38 247.16 250.01 252.92 / - 3 19 7 1 191.83 179.29 177.31 176.82 176.88 177.21 177.85 178.68 179.69 180.83 182.13 183.56 - 185.12 186.79 188.53 190.41 192.41 194.49 196.62 198.88 201.23 203.61 206.13 208.72 211.34 214.08 216.89 219.78 - 222.68 225.7 228.79 231.9 235.12 238.75 242.1 245.51 / - 3 19 8 1 159.01 145.33 144.32 144.29 144.89 145.9 147.21 148.79 150.55 152.5 154.59 156.82 - 159.18 161.65 164.23 166.92 169.93 172.82 175.79 178.85 181.98 185.18 188.46 191.8 195.21 199.09 202.64 206.24 - 209.91 213.63 217.41 221.25 225.13 229.07 233.07 237.83 / - 3 19 9 1 108.39 104.87 105.84 107.59 109.77 112.15 114.8 117.54 120.42 123.5 126.64 129.97 - 133.33 136.78 140.44 144.08 147.94 151.74 155.79 159.73 163.87 167.95 172.24 176.55 180.92 185.23 189.8 194.21 - 198.91 203.43 207.99 212.6 217.76 222.47 227.22 232.02 / - 3 19 10 1 71.5 73.85 76.97 80.34 83.83 87.39 91.02 94.76 98.6 102.55 106.61 110.71 - 114.98 119.36 123.85 128.43 133.11 137.88 142.6 147.55 152.6 157.74 162.73 168.01 173.39 178.55 184.06 189.66 - 194.98 200.68 206.09 211.93 217.85 223.4 229.45 235.1 / - 3 19 11 1 55.44 59.93 64.02 68.06 72.09 76.16 80.3 84.54 88.89 93.35 97.93 102.63 - 107.44 112.38 117.43 122.59 128.16 134.17 140 145.83 151.85 157.88 163.88 170.25 176.52 182.87 189.31 195.85 - 202.47 208.83 215.6 222.4 229.28 236.3 243.4 250.11 / - 3 19 12 1 49.74 55.33 59.84 64.24 68.8 73.53 78.44 83.53 88.8 94.23 99.82 105.56 - 111.46 117.49 123.67 129.98 136.42 142.95 149.54 156.23 163.02 169.91 176.83 183.85 190.97 198.18 205.49 212.89 - 220.94 229.68 238.16 246.57 255.23 263.6 272.26 280.67 / - 3 19 13 1 44.21 51.17 57.02 62.64 68.35 74.3 80.58 87.33 94.47 101.59 108.92 116.35 - 123.68 131.31 139.05 147.02 155.18 163.48 171.92 180.5 189.17 197.97 206.91 215.99 225.21 234.55 244.03 253.61 - 263.26 273 282.83 292.76 302.81 312.98 323.25 333.64 / - 3 19 14 1 39.62 48.11 57.38 66.48 75.15 84.31 92.84 102.34 111.15 120.56 130.69 140.62 - 151.12 161.81 172.29 182.39 193.58 204.96 216.43 228.15 239.37 251.04 263.29 275.73 288.36 301.18 314.2 327.4 - 340.8 354.4 368.2 382.2 396.41 410.81 425.39 440.16 / - 3 19 15 1 37.54 52.07 66 79.27 92.49 105.1 118.09 131.34 145.25 157.96 172.73 187.76 - 202.33 216.08 231.8 247.34 263.56 279.3 296.08 313.23 330.03 347.53 365.6 383.94 402.61 421.5 440.53 459 - 478.93 499.27 519.95 540.97 562.35 584.08 606.16 628.58 / - 3 19 16 1 43.74 65.76 86.87 106.89 126.17 145.49 165.29 185.72 206.32 227.07 250.12 271.07 - 294.98 319.4 343.52 366.62 392.59 418.92 445.63 473.26 500.64 529.65 559.3 589.44 619.35 650.94 683.17 716.08 - 749.47 783.48 817.66 853.3 889.63 926.65 964.38 1002.8 / - 3 19 17 1 61.42 92.52 125.21 156.36 186.82 218.17 250.03 283.3 318.1 353.69 392.11 430.03 - 471.1 511.23 554.85 600.07 644.66 691.68 740.75 791.3 842.83 895.93 950.16 1006.4 1063.9 1122.58 1183.05 1244.79 - 1306.2 1368.66 1432.45 1497.34 1563.79 1631.7 1700.82 1771.38 / - 3 19 18 1 88.19 140.93 189.99 241.61 293.77 348.12 405.24 465.56 529.28 596.57 667.25 742.02 - 819.49 901.35 985.98 1075.08 1167.46 1262.59 1358.7 1457.75 1559.75 1665.42 1774.16 1886.04 2000.07 2118.47 2238.63 2361.86 - 2488.81 2616.92 2748.88 2884.2 3021.61 3162.66 3305.6 3452.69 / - 3 19 19 1 133.02 215.55 297.52 387.36 485.05 590.72 703.28 824.84 955.48 1094.33 1242.16 1396 - 1557.98 1728.96 1904.52 2093.31 2284.13 2482.48 2698.52 2912.08 3133.74 3361.03 3596.35 3856.92 4108.45 4366.53 4633.04 4906.97 - 5188.75 5478.55 5773.63 6077.52 6381.99 6699.5 7020.04 7348.37 / - 3 19 20 1 205.11 338.11 476.35 625.75 789.09 998.05 1241.01 1495.27 1777.77 2076.84 2402.38 2739.94 - 3104.09 3488.1 3887.7 4308.84 4742.96 5212.63 5706.21 6184.97 6723.35 7241.36 7825.57 8381.86 8950.83 9538.28 10212.67 10838.37 - 11485.34 12153.04 12841.41 13544.96 14392.51 15151.58 15931.67 16732.63 / - 3 20 1 1 229.48 228.65 228.36 228.33 228.46 228.72 229.09 229.54 230.07 230.68 231.37 232.12 - 232.95 233.84 234.8 235.82 236.91 238.07 239.28 240.57 241.91 243.32 244.79 246.33 247.93 249.59 251.31 253.09 - 254.94 256.85 258.82 260.85 262.95 265.1 267.32 269.6 / - 3 20 2 1 228.52 227.4 226.94 226.8 226.86 227.07 227.39 227.82 228.34 228.94 229.62 230.37 - 231.2 232.1 233.06 234.1 235.2 236.37 237.61 238.91 240.28 241.71 243.21 244.77 246.4 248.09 249.84 251.66 - 253.54 255.48 257.49 259.55 261.69 263.88 266.14 268.46 / - 3 20 3 1 226.9 225.15 224.35 224.09 224.08 224.23 224.53 224.93 225.44 226.04 226.72 227.49 - 228.33 229.25 230.24 231.3 232.44 233.64 234.91 236.25 237.66 239.14 240.68 242.29 243.96 245.71 247.51 249.38 - 251.32 253.32 255.38 257.51 259.71 261.96 264.28 266.66 / - 3 20 4 1 224.14 220.94 219.73 219.35 219.27 219.39 219.66 220.06 220.58 221.19 221.9 222.7 - 223.58 224.54 225.58 226.7 227.9 229.16 230.5 231.9 233.34 234.89 236.52 238.21 239.97 241.8 243.7 245.67 - 247.7 249.8 251.97 254.2 256.5 258.86 261.29 263.78 / - 3 20 5 1 219.42 213.32 211.84 211.31 211.15 211.23 211.49 211.91 212.46 213.12 213.89 214.76 - 215.73 216.78 217.93 219.15 220.46 221.85 223.32 224.84 226.46 228.16 229.93 231.78 233.7 235.7 237.76 239.87 - 242.07 244.35 246.69 249.11 251.59 254.14 256.75 259.43 / - 3 20 6 1 209.85 200.36 198.35 197.77 197.62 197.76 198.12 198.65 199.34 200.16 201.1 202.12 - 203.28 204.55 205.91 207.37 208.92 210.57 212.25 214.07 215.97 217.95 220.01 222.15 224.33 226.62 228.99 231.44 - 233.95 236.5 239.16 241.9 244.69 247.54 250.47 253.48 / - 3 20 7 1 191.27 178.24 176.19 175.82 175.97 176.38 177.07 177.95 179 180.2 181.53 183 - 184.58 186.27 188.09 190 192.05 194.14 196.37 198.65 201.07 203.51 206.09 208.76 211.46 214.27 217.16 220.06 - 223.09 226.19 229.3 232.53 235.82 239.13 242.55 246.02 / - 3 20 8 1 158.26 144.93 143.96 144.09 144.88 146 147.43 149.07 150.89 152.85 154.96 157.2 - 159.56 162.04 164.62 167.3 170.09 173.19 176.16 179.24 182.39 185.61 188.92 192.29 195.73 199.23 203.22 206.85 - 210.54 214.3 218.1 221.96 225.88 229.85 233.87 237.95 / - 3 20 9 1 109.2 106.95 108.25 110.12 112.33 114.7 117.23 119.9 122.75 125.68 128.71 131.95 - 135.21 138.68 142.13 145.68 149.46 153.18 157.18 161.08 165.2 169.26 173.54 177.73 182.08 186.5 190.86 195.48 - 199.93 204.68 209.24 213.84 219 223.7 228.45 233.24 / - 3 20 10 1 74.78 77.89 81.43 84.92 88.33 91.73 95.22 98.74 102.39 106.15 109.96 113.94 - 118.03 122.25 126.47 130.9 135.42 140.05 144.83 149.52 154.49 159.56 164.49 169.72 175.04 180.15 185.62 191.18 - 196.45 202.12 207.49 213.29 218.76 224.7 230.27 236.34 / - 3 20 11 1 59.73 64.87 69.35 73.5 77.5 81.47 85.46 89.51 93.64 97.87 102.2 106.65 - 111.21 115.9 120.7 125.62 131.17 136.83 142.49 148.17 153.93 159.82 165.71 171.97 178.12 184.37 190.44 196.85 - 203.34 209.93 216.6 223.31 230.1 236.6 243.53 250.56 / - 3 20 12 1 54.71 59.82 64.4 68.92 73.47 78.13 82.91 87.83 92.89 98.11 103.47 108.98 - 114.63 120.43 126.36 132.43 138.62 144.95 151.4 157.98 164.64 171.34 178.09 184.93 191.88 198.93 206.08 213.33 - 220.66 228.97 237.4 245.85 254.22 262.53 271.02 279.48 / - 3 20 13 1 49.62 55.89 61.18 66.47 72.05 77.91 84.05 90.43 97.03 103.85 110.86 118.05 - 125.38 132.79 140.36 148.07 155.94 163.95 172.04 180.27 188.64 197.16 205.81 214.6 223.52 232.58 241.78 251.12 - 260.59 270.2 279.95 289.84 299.86 310 320.19 330.46 / - 3 20 14 1 44.5 52.88 61.52 70.03 78.42 86.62 95.66 104.01 112.7 122.27 131.7 141.54 - 151.66 161.61 171.04 181.71 192.56 203.49 214.69 226.05 236.83 248.14 260.06 272.17 284.47 296.97 309.65 322.53 - 335.59 348.85 362.31 375.97 389.83 403.89 418.15 432.56 / - 3 20 15 1 41.22 55.91 69.51 82.29 94.99 107.45 119.74 131.91 145.75 157.79 172.08 186.66 - 198.71 213.75 228.84 243.98 259.78 274.96 291.39 308.11 324.09 341.41 359.03 376.77 394.94 413.04 431.67 449.61 - 469.08 488.87 509 529.47 550.27 571.41 592.9 614.73 / - 3 20 16 1 46.82 69.54 89.89 108.66 127.01 145.75 165.37 185.18 205.08 225.01 247.29 267.32 - 290.59 314.32 337.51 359.69 384.89 410.3 436.29 463.3 489.74 517.84 546.67 575.99 605 635.74 667.12 698.94 - 731.47 764.36 797.54 832.18 867.49 903.45 940.07 977.33 / - 3 20 17 1 64.51 95.77 126.8 156.45 186.22 216.41 247.91 281.13 315.1 349.83 385.34 424.37 - 462.23 502.5 544.98 588.72 630.44 676.2 723.98 772.78 822.87 874.63 927.08 981.79 1037.12 1094.65 1153.58 1213.28 - 1274.82 1337.95 1402.48 1468.4 1535.42 1603.44 1673.79 1745.26 / - 3 20 18 1 93.21 141.64 190.91 241.38 292.29 345.29 401.57 460.56 523.32 589.07 657.74 731.12 - 806.33 886.52 968.14 1054.92 1145.2 1238.76 1333.86 1434.36 1538.1 1645.13 1755.07 1868.16 1984.37 2103.74 2226.2 2351.64 - 2480.14 2611.58 2746.26 2883.72 3024.12 3167.91 3314.2 3463.36 / - 3 20 19 1 137.07 220.33 302.25 391.25 486.56 588.94 699.02 817.71 944.82 1081.08 1226.12 1379.91 - 1542.62 1714.29 1891.71 2081.29 2275.09 2476.46 2692.12 2909.49 3134.2 3366.15 3605.36 3866.09 4122.18 4385.82 4656.93 4935.33 - 5222.47 5517.92 5819.14 6129.53 6447.45 6769.66 7102.42 7438.93 / - 3 20 20 1 209.67 346.93 489.95 643.29 808.51 986.39 1176.86 1379.89 1636.58 1927.32 2234.2 2564.89 - 2914.21 3288.59 3670.67 4089.19 4536.22 4980.3 5479.02 5968.38 6480.59 7016.18 7575.74 8174.75 8752.95 9388.05 10022.91 10636.67 - 11352.9 12014.2 12696.62 13501.8 14233.41 14986.27 15883.62 16686.63 / - 4 1 1 1 198.57 198.4 198.46 198.66 198.97 199.35 199.82 200.35 200.95 201.61 202.34 203.13 - 203.97 204.87 205.84 206.85 207.93 209.06 210.25 211.5 212.8 214.15 215.56 217.03 218.55 220.13 221.76 223.44 - 225.18 226.97 228.82 230.72 232.68 234.69 236.75 238.87 / - 4 1 2 1 198.49 198.3 198.36 198.56 198.86 199.24 199.71 200.24 200.84 201.5 202.23 203.01 - 203.86 204.76 205.72 206.74 207.82 208.95 210.14 211.39 212.69 214.05 215.46 216.93 218.45 220.02 221.66 223.34 - 225.08 226.88 228.73 230.63 232.59 234.6 236.67 238.78 / - 4 1 3 1 198.33 198.12 198.17 198.36 198.65 199.04 199.5 200.03 200.63 201.29 202.01 202.8 - 203.64 204.55 205.51 206.53 207.61 208.74 209.93 211.18 212.48 213.84 215.26 216.72 218.25 219.83 221.46 223.15 - 224.89 226.69 228.54 230.45 232.41 234.43 236.5 238.62 / - 4 1 4 1 198.03 197.78 197.8 197.98 198.27 198.65 199.1 199.63 200.23 200.89 201.61 202.4 - 203.24 204.15 205.11 206.13 207.21 208.35 209.54 210.79 212.1 213.46 214.88 216.35 217.88 219.46 221.1 222.79 - 224.54 226.35 228.2 230.11 232.08 234.1 236.18 238.31 / - 4 1 5 1 197.43 197.06 197.02 197.15 197.41 197.77 198.21 198.73 199.32 199.97 200.69 201.47 - 202.32 203.23 204.19 205.22 206.3 207.44 208.64 209.9 211.22 212.59 214.01 215.5 217.04 218.63 220.28 221.98 - 223.75 225.56 227.43 229.36 231.34 233.37 235.46 237.61 / - 4 1 6 1 195.15 193.69 193.27 193.28 193.45 193.77 194.18 194.69 195.28 195.95 196.69 197.5 - 198.38 199.32 200.33 201.41 202.54 203.74 205 206.32 207.7 209.13 210.63 212.19 213.8 215.44 217.17 218.95 - 220.8 222.7 224.65 226.67 228.73 230.86 233.04 235.27 / - 4 1 7 1 187.26 183.1 182.37 182.13 182.19 182.45 182.88 183.43 184.1 184.87 185.74 186.7 - 187.74 188.87 190.07 191.35 192.69 194.11 195.59 197.15 198.76 200.44 202.19 203.96 205.82 207.74 209.72 211.76 - 213.86 216.01 218.21 220.48 222.8 225.17 227.59 230.06 / - 4 1 8 1 166.24 158.98 157.67 157.21 157.35 157.82 158.53 159.45 160.54 161.77 163.14 164.6 - 166.2 167.88 169.66 171.51 173.45 175.47 177.56 179.68 181.89 184.17 186.87 189.27 191.73 194.21 196.77 199.37 - 202 204.69 207.42 210.2 213.06 215.97 218.9 221.88 / - 4 1 9 1 122.23 113.47 112.92 113.58 114.81 116.51 118.45 120.65 122.98 125.46 128.12 130.84 - 133.7 136.63 139.59 142.72 145.83 149.08 152.26 155.52 159.08 162.44 165.8 169.22 172.63 176.45 179.95 183.44 - 186.98 190.52 194.61 198.2 201.84 205.48 209.16 212.87 / - 4 1 10 1 73.38 73.81 75.85 78.39 81.14 84.09 87.18 90.37 93.72 97.2 100.79 104.48 - 108.2 112.09 116.08 120.16 124.32 128.39 132.69 137.06 141.28 145.76 150.29 154.63 159.26 163.94 168.38 173.15 - 177.65 182.53 187.15 191.94 196.73 201.26 205.96 210.68 / - 4 1 11 1 54.36 57.14 60.27 63.57 66.97 70.46 74.07 77.79 81.64 85.59 89.67 93.85 - 98.53 103.27 107.99 112.75 117.68 122.69 127.71 132.81 137.99 143.25 148.58 153.97 159.43 164.93 170.48 176.12 - 181.82 187.58 193.4 198.89 204.8 210.77 216.35 222.41 / - 4 1 12 1 49.25 52.92 56.36 60 63.89 68.01 72.33 76.83 81.51 86.35 91.35 96.5 - 101.79 107.22 112.71 118.29 123.98 129.77 135.67 141.66 147.76 154.3 161.44 168.36 175.22 182.2 189.07 196.04 - 203.28 210.31 217.38 224.5 231.68 238.93 246.25 253.58 / - 4 1 13 1 44.64 49.78 54.42 59.12 64.07 69.32 74.93 80.85 87.04 93.48 100.13 106.97 - 114 121.21 128.58 136.1 143.78 151.61 159.54 167.58 175.69 183.82 192 200.26 208.62 217.07 225.61 234.25 - 243.56 253.57 263.27 273.1 282.71 292.36 302.34 311.9 / - 4 1 14 1 40.79 47.16 54.86 62.86 70.52 78.88 87.57 95.22 104.33 113.49 122.98 132.82 - 142.72 151.96 162.19 172.78 183.57 194.54 205.69 217.03 228.56 240.29 251.12 263.18 275.3 287.51 299.83 312.28 - 324.88 337.62 350.52 363.58 377.58 392.16 406.82 421.42 / - 4 1 15 1 37.81 51.1 64.14 76.67 88.89 101.45 114 126.55 140.48 152.94 167.47 182.03 - 194.88 210.22 225.46 241.1 256.75 273.02 289.91 306.75 323.63 341.55 359.86 378.47 397.39 416.16 434.55 454.23 - 474.21 494.46 515.06 536.02 558.22 581.23 604.56 628.05 / - 4 1 16 1 44.85 66.06 86.24 105.36 124.15 143.17 163.39 183.02 204.64 225.67 248.34 270.5 - 294.6 319.51 342.17 368.38 394.96 422.05 450.25 478.09 507.73 538.14 569.15 599.99 632.54 665.59 699.32 733.9 - 770.68 807.84 844.92 883.84 922.92 962.79 1003.47 1043.31 / - 4 1 17 1 62.7 94.01 125.58 155.89 186.76 218.01 251.34 285.04 320.98 359.76 398.2 439.6 - 480.89 525.43 571.14 616.1 665.17 716.17 768.68 823.01 879.13 936.08 995.91 1057.52 1119.33 1179.86 1237.55 1289.96 - 1333.49 1375.89 1424.45 1470.96 1520.92 1572.91 1624.35 1675.3 / - 4 1 18 1 90.54 141.45 191.27 242.87 296.28 353.04 413.28 477.44 545.71 617.4 692.74 772.95 - 857.61 946.59 1038.86 1133.14 1230.2 1319.61 1407.12 1496.75 1590.43 1686.18 1785.03 1885.69 1987.18 2089.25 2194.95 2302.93 - 2409 2520.69 2633.84 2749.49 2866.41 2984.54 3104.58 3229.17 / - 4 1 19 1 135.07 214.03 298.71 393.12 496.27 607.58 728.44 860.04 1004.79 1156.51 1302.05 1444.41 - 1588.63 1747.47 1901.29 2060.27 2232.05 2400.65 2572.14 2753.1 2933.79 3123.15 3316.84 3514.38 3711.54 3917.84 4130.09 4343.25 - 4566.2 4786.77 5018.96 5246.17 5485.54 5732.1 5966.85 6224.65 / - 4 1 20 1 204.66 326.95 475.58 664.47 878.51 1122.61 1369.1 1612.94 1871.42 2156.71 2437.77 2748.24 - 3058.91 3402.03 3745.95 4097.25 4495.98 4877.6 5273.6 5680.95 6105.6 6532.38 6982.39 7433.42 7910.63 8390.58 8891.81 9377.26 - 9905.22 10435.17 10978.12 11544.45 12118.28 12681.2 13287.91 13925.28 / - 4 2 1 1 200.41 200.22 200.28 200.48 200.78 201.17 201.63 202.17 202.77 203.43 204.16 204.94 - 205.79 206.69 207.66 208.68 209.76 210.89 212.08 213.33 214.64 216 217.41 218.88 220.41 221.99 223.62 225.31 - 227.06 228.86 230.71 232.62 234.58 236.6 238.67 240.8 / - 4 2 2 1 200.32 200.12 200.17 200.37 200.67 201.05 201.52 202.05 202.65 203.31 204.04 204.82 - 205.67 206.58 207.54 208.56 209.64 210.78 211.97 213.22 214.52 215.89 217.3 218.77 220.3 221.88 223.52 225.21 - 226.96 228.76 230.62 232.53 234.49 236.51 238.58 240.71 / - 4 2 3 1 200.16 199.93 199.97 200.16 200.46 200.84 201.3 201.83 202.43 203.09 203.82 204.6 - 205.45 206.36 207.32 208.34 209.42 210.56 211.75 213 214.31 215.67 217.09 218.57 220.09 221.68 223.32 225.01 - 226.76 228.57 230.42 232.34 234.31 236.33 238.4 240.54 / - 4 2 4 1 199.85 199.58 199.6 199.77 200.06 200.44 200.9 201.42 202.02 202.68 203.41 204.19 - 205.04 205.95 206.91 207.94 209.02 210.16 211.35 212.61 213.92 215.28 216.7 218.18 219.71 221.3 222.95 224.64 - 226.4 228.21 230.07 231.99 233.96 235.99 238.07 240.21 / - 4 2 5 1 199.18 198.79 198.72 198.83 199.08 199.43 199.87 200.38 200.97 201.62 202.34 203.13 - 203.97 204.88 205.85 206.88 207.96 209.11 210.31 211.58 212.9 214.27 215.7 217.19 218.74 220.34 222 223.71 - 225.48 227.31 229.19 231.13 233.12 235.16 237.27 239.42 / - 4 2 6 1 196.66 195.12 194.64 194.62 194.79 195.09 195.5 196.01 196.6 197.27 198.02 198.83 - 199.72 200.68 201.7 202.78 203.93 205.14 206.42 207.75 209.15 210.6 212.11 213.67 215.29 216.97 218.71 220.51 - 222.36 224.27 226.24 228.27 230.33 232.46 234.65 236.9 / - 4 2 7 1 188.34 184 183.16 182.94 183.01 183.29 183.72 184.29 184.98 185.77 186.65 187.63 - 188.69 189.83 191.05 192.3 193.67 195.11 196.61 198.18 199.82 201.52 203.28 205.11 206.99 208.94 210.95 212.98 - 215.1 217.28 219.51 221.8 224.14 226.53 228.98 231.49 / - 4 2 8 1 166.8 159.04 157.82 157.38 157.54 158.02 158.76 159.71 160.83 162.09 163.46 164.98 - 166.6 168.33 170.12 172.02 174 176.06 178.15 180.35 182.6 184.88 187.26 189.69 192.58 195.12 197.71 200.33 - 203.01 205.74 208.51 211.33 214.19 217.14 220.08 223.12 / - 4 2 9 1 121.69 113.36 112.81 113.5 114.79 116.52 118.5 120.69 123.09 125.61 128.3 131.05 - 133.94 136.86 139.91 143.08 146.2 149.37 152.71 156.01 159.3 162.97 166.36 169.79 173.28 177.16 180.7 184.24 - 187.84 191.43 195.07 199.22 202.91 206.6 210.34 214.09 / - 4 2 10 1 73.4 73.93 76.04 78.61 81.4 84.39 87.48 90.74 94.12 97.63 101.19 104.91 - 108.73 112.66 116.68 120.79 124.83 129.09 133.43 137.83 142.09 146.61 151.18 155.56 160.22 164.67 169.43 174.25 - 178.78 183.69 188.28 193.22 197.87 202.74 207.52 212.3 / - 4 2 11 1 54.46 57.32 60.46 63.78 67.21 70.74 74.39 78.15 82.03 86.03 90.14 94.37 - 98.96 103.83 108.57 113.45 118.42 123.36 128.55 133.7 138.93 144.23 149.6 155.05 160.56 166.1 171.71 177.4 - 183.16 188.97 194.48 200.39 206.35 211.97 218.02 224.14 / - 4 2 12 1 49.23 53.04 56.55 60.21 64.14 68.29 72.65 77.19 81.9 86.78 91.82 97.02 - 102.36 107.82 113.36 118.98 124.71 130.55 136.5 142.55 148.69 155.11 162.32 169.35 176.39 183.37 190.36 197.4 - 204.41 211.49 218.93 226.11 233.36 240.68 248.07 255.09 / - 4 2 13 1 44.52 49.82 54.55 59.32 64.32 69.61 75.25 81.22 87.45 93.93 100.62 107.51 - 114.59 121.84 129.26 136.84 144.56 152.44 160.42 168.51 176.66 184.84 193.07 201.39 209.8 218.3 226.9 235.6 - 244.69 254.77 264.59 274.56 284.18 294.09 303.99 313.92 / - 4 2 14 1 40.7 47.17 54.95 63.02 70.75 79.16 87.89 96.31 104.74 114.02 123.48 133.37 - 142.77 152.6 162.88 173.52 184.36 195.39 206.6 217.99 229.58 241.36 252.24 264.36 276.55 288.82 301.2 313.72 - 326.38 339.2 352.17 365.3 379 393.68 408.5 423.3 / - 4 2 15 1 37.78 51.12 64.21 76.8 89.08 101.69 114.29 126.87 140.86 153.37 167.94 181.51 - 195.47 210.86 226.15 241.85 257.55 273.87 290.8 307.91 324.64 342.61 360.97 379.65 398.65 417.5 435.98 455.73 - 475.78 496.12 516.79 537.83 559.69 582.84 606.36 630.08 / - 4 2 16 1 44.89 66.05 86.29 105.46 124.35 143.36 163.61 183.82 204.94 226.01 249.33 270.96 - 295.11 320.08 342.8 369.07 395.7 422.84 451.1 478.93 508.6 539.03 569.54 600.91 633.49 666.61 700.39 734.99 - 770.91 807.56 845.36 884.58 923.97 963.83 1004.22 1045.11 / - 4 2 17 1 62.62 93.95 125.74 155.96 186.89 218.44 251.5 286 321.52 359.95 398.42 440.07 - 481.16 525.71 571.43 616.4 665.4 716.34 768.85 823.22 879.36 936.29 996.08 1057.56 1119.61 1180.67 1238.42 1292.08 - 1333.57 1380.2 1426.99 1475.54 1525.49 1579.73 1631.77 1682.18 / - 4 2 18 1 90.4 141.53 191.25 242.95 296.61 353.21 413.42 477.49 545.66 617.33 692.51 772.6 - 857.03 945.89 1038.18 1132.51 1229.51 1320.2 1409.1 1500.88 1596.01 1685.97 1778.66 1872.13 1964.93 2060.26 2157.67 2258.68 - 2355.97 2460.78 2563.58 2671.54 2775.97 2884.72 2992.72 3109.31 / - 4 2 19 1 134.88 213.87 298.29 393.19 495.36 607.53 728.21 859.52 1000.98 1151.55 1301.55 1444.54 - 1589.34 1748.98 1904.81 2065.95 2239.99 2410.54 2583.94 2766.54 2948.74 3140.46 3336.08 3533.62 3735.09 3943.63 4155.21 4373.55 - 4600.03 4821.72 5056.18 5282.52 5527.8 5776.59 6014.54 6270.22 / - 4 2 20 1 204.46 326.84 473.87 661.42 873.92 1116.2 1364.19 1613.54 1872.9 2148.55 2441.74 2753.65 - 3065.87 3410.91 3756.53 4109.75 4512.39 4899.47 5300.38 5709.55 6142.63 6574.54 7029.7 7485.73 7968.22 8453.28 8959.5 9450.05 - 9983.08 10518.53 11067.37 11639.93 12219.83 12789.06 13402.11 14046.25 / - 4 3 1 1 202.24 202.05 202.1 202.29 202.59 202.98 203.44 203.98 204.58 205.24 205.97 206.76 - 207.6 208.51 209.48 210.5 211.58 212.72 213.91 215.16 216.47 217.83 219.25 220.73 222.26 223.84 225.48 227.18 - 228.93 230.74 232.6 234.51 236.48 238.51 240.59 242.72 / - 4 3 2 1 202.15 201.94 201.99 202.18 202.48 202.86 203.32 203.86 204.46 205.12 205.85 206.63 - 207.48 208.39 209.35 210.38 211.46 212.6 213.79 215.05 216.35 217.72 219.14 220.61 222.15 223.73 225.38 227.07 - 228.83 230.63 232.49 234.41 236.38 238.41 240.49 242.63 / - 4 3 3 1 201.98 201.74 201.78 201.96 202.26 202.64 203.1 203.63 204.23 204.89 205.62 206.41 - 207.25 208.16 209.13 210.15 211.23 212.37 213.57 214.82 216.13 217.5 218.92 220.4 221.93 223.52 225.17 226.87 - 228.62 230.43 232.3 234.22 236.19 238.22 240.3 242.44 / - 4 3 4 1 201.66 201.38 201.39 201.57 201.85 202.23 202.68 203.21 203.81 204.47 205.2 205.98 - 206.83 207.74 208.71 209.73 210.82 211.96 213.16 214.41 215.73 217.1 218.52 220 221.54 223.13 224.78 226.49 - 228.24 230.06 231.93 233.86 235.84 237.87 239.96 242.11 / - 4 3 5 1 200.91 200.47 200.38 200.49 200.73 201.08 201.51 202.02 202.61 203.26 203.99 204.77 - 205.62 206.53 207.5 208.53 209.62 210.77 211.98 213.25 214.57 215.95 217.39 218.89 220.44 222.05 223.71 225.43 - 227.21 229.04 230.93 232.88 234.88 236.93 239.05 241.21 / - 4 3 6 1 198.17 196.28 195.96 195.93 196.09 196.39 196.8 197.31 197.9 198.57 199.32 200.14 - 201.03 201.99 203.02 204.11 205.26 206.48 207.76 209.1 210.5 211.96 213.48 215.07 216.71 218.41 220.17 221.99 - 223.86 225.8 227.79 229.82 231.92 234.07 236.27 238.53 / - 4 3 7 1 189.44 184.86 183.97 183.73 183.8 184.06 184.51 185.09 185.78 186.58 187.48 188.46 - 189.54 190.69 191.93 193.24 194.63 196.09 197.61 199.2 200.82 202.54 204.33 206.18 208.09 210.06 212.09 214.18 - 216.32 218.53 220.79 223.08 225.44 227.87 230.34 232.87 / - 4 3 8 1 166.58 159.12 157.91 157.48 157.66 158.17 158.93 159.9 161.04 162.32 163.74 165.29 - 166.95 168.68 170.53 172.47 174.49 176.56 178.72 180.95 183.22 185.57 187.99 190.43 192.95 195.98 198.59 201.27 - 203.99 206.75 209.56 212.42 215.32 218.26 221.25 224.33 / - 4 3 9 1 121.81 113.23 112.76 113.47 114.79 116.54 118.54 120.76 123.15 125.75 128.42 131.26 - 134.13 137.14 140.21 143.31 146.58 149.8 153.17 156.5 159.84 163.51 166.95 170.39 173.91 177.44 181.43 185.02 - 188.67 192.31 195.98 200.21 203.93 207.7 211.47 215.29 / - 4 3 10 1 73.55 74.12 76.2 78.8 81.66 84.65 87.81 91.1 94.52 98 101.65 105.4 - 109.26 113.22 117.28 121.29 125.5 129.79 134.16 138.41 142.9 147.46 151.84 156.49 161.19 165.68 170.48 175.02 - 179.92 184.52 189.51 194.42 199.17 204.18 209.05 213.74 / - 4 3 11 1 54.57 57.49 60.64 63.99 67.45 71.02 74.71 78.5 82.42 86.46 90.62 94.89 - 99.39 104.39 109.23 114.12 119.09 124.15 129.24 134.58 139.86 145.21 150.63 156.13 161.69 167.28 172.94 178.69 - 184.5 190.03 195.93 201.89 207.92 213.58 219.7 225.88 / - 4 3 12 1 49.22 53.16 56.73 60.42 64.37 68.56 72.95 77.53 82.29 87.21 92.3 97.53 - 102.92 108.43 114 119.67 125.45 131.34 137.33 143.42 149.62 155.91 163.19 170.33 177.39 184.53 191.5 198.76 - 205.83 212.98 220.15 227.38 234.68 242.04 249.48 256.98 / - 4 3 13 1 44.41 49.86 54.67 59.51 64.56 69.9 75.58 81.58 87.86 94.38 101.12 108.05 - 115.18 122.48 129.94 137.57 145.34 153.27 161.29 169.43 177.63 185.86 194.15 202.52 210.98 219.54 228.19 236.95 - 245.8 255.96 265.89 275.79 285.65 295.83 305.67 315.65 / - 4 3 14 1 40.63 47.18 55.03 63.18 70.97 79.43 88.21 96.14 105.15 114.5 123.98 133.91 - 144.05 153.45 163.57 174.27 185.15 196.23 207.5 218.95 230.59 242.42 253.36 265.54 277.79 290.13 302.57 315.16 - 327.89 340.77 353.81 367.01 380.39 394.75 409.72 424.71 / - 4 3 15 1 37.69 51.15 64.28 76.93 89.27 101.93 114.57 127.2 141.24 153.8 168.41 183.32 - 196.05 211.5 226.95 242.59 258.81 274.71 291.7 308.67 325.63 343.65 362.06 380.81 399.89 418.83 437.39 457.23 - 477.34 497.76 518.51 539.63 561.11 583.91 607.59 631.59 / - 4 3 16 1 44.86 66.06 86.35 105.57 124.5 143.56 163.84 184.45 205.24 226.34 249.71 271.41 - 295.61 320.63 343.41 369.74 396.44 423.71 451.89 479.76 509.45 539.89 571.07 601.81 634.37 667.58 701.41 736.06 - 771.52 808.27 846.22 885.24 924.96 964.69 1005.46 1045.68 / - 4 3 17 1 62.52 93.99 125.74 156.43 187.01 218.59 251.67 286.54 321.79 360.11 398.62 440.27 - 481.39 525.95 571.68 616.63 665.59 716.44 769.08 823.33 879.47 936.41 995.54 1056.96 1119.37 1181.2 1239.4 1293.56 - 1336.97 1385.27 1433.44 1483.85 1536.16 1591.21 1644.82 1697.08 / - 4 3 18 1 90.25 141.4 191.2 243.02 296.74 353.37 413.56 477.54 545.6 617.23 692.26 772.16 - 856.37 945.05 1037.39 1131.78 1228.66 1316.94 1400.52 1488.36 1575.56 1666.19 1760.34 1855.27 1951.24 2048.06 2144.48 2247.41 - 2345.48 2450.68 2556.12 2662.61 2772.02 2879.64 2990.01 3110.3 / - 4 3 19 1 134.69 213.69 297.86 392.54 495.42 606.23 727.29 858.94 1000.1 1150.47 1300.95 1444.57 - 1590 1750.3 1906.95 2069.94 2246.5 2419.38 2597.75 2779.12 2964.2 3156.88 3354.23 3555.98 3759.83 3970.61 4184.49 4405.21 - 4633.99 4858.42 5095.21 5324.5 5572.21 5823.32 6064.5 6322.93 / - 4 3 20 1 204.25 326.72 471.29 658.09 872.95 1115.42 1363.8 1608.48 1874.4 2151.28 2445.81 2759.19 - 3073.01 3419.99 3767.37 4122.63 4527.48 4918.6 5324.96 5736.22 6176.66 6615.71 7076.65 7530.9 8018.73 8516.88 9019.38 9524.74 - 10053.5 10604.53 11160.13 11729.65 12325.95 12901.81 13521.87 14157.78 / - 4 4 1 1 204.08 203.86 203.91 204.11 204.4 204.79 205.25 205.79 206.39 207.05 207.78 208.57 - 209.41 210.32 211.29 212.31 213.4 214.54 215.73 216.99 218.3 219.67 221.09 222.57 224.1 225.69 227.34 229.04 - 230.79 232.61 234.47 236.39 238.37 240.4 242.49 244.63 / - 4 4 2 1 203.98 203.76 203.8 203.99 204.28 204.67 205.13 205.66 206.26 206.92 207.65 208.44 - 209.29 210.2 211.16 212.19 213.27 214.41 215.61 216.87 218.18 219.55 220.97 222.45 223.98 225.58 227.22 228.93 - 230.68 232.5 234.37 236.29 238.27 240.3 242.39 244.53 / - 4 4 3 1 203.8 203.55 203.58 203.76 204.06 204.44 204.9 205.43 206.03 206.69 207.42 208.2 - 209.05 209.96 210.93 211.96 213.04 214.18 215.38 216.64 217.95 219.32 220.74 222.23 223.76 225.36 227.01 228.71 - 230.47 232.29 234.16 236.08 238.07 240.1 242.19 244.34 / - 4 4 4 1 203.46 203.17 203.18 203.35 203.64 204.01 204.47 205 205.59 206.26 206.98 207.77 - 208.62 209.53 210.5 211.53 212.61 213.75 214.96 216.21 217.53 218.9 220.33 221.82 223.36 224.96 226.61 228.32 - 230.08 231.9 233.78 235.71 237.7 239.74 241.84 243.99 / - 4 4 5 1 202.62 202.13 202.03 202.13 202.36 202.7 203.13 203.65 204.24 204.9 205.62 206.41 - 207.26 208.18 209.15 210.19 211.28 212.44 213.65 214.92 216.25 217.64 219.08 220.58 222.14 223.76 225.43 227.16 - 228.94 230.78 232.68 234.63 236.64 238.71 240.83 243 / - 4 4 6 1 199.63 197.61 197.27 197.22 197.36 197.65 198.06 198.56 199.16 199.83 200.59 201.41 - 202.31 203.28 204.31 205.42 206.58 207.81 209.1 210.45 211.86 213.33 214.86 216.45 218.1 219.81 221.58 223.41 - 225.29 227.24 229.24 231.3 233.42 235.59 237.82 240.11 / - 4 4 7 1 190.51 185.5 184.68 184.44 184.5 184.78 185.23 185.82 186.52 187.34 188.25 189.25 - 190.34 191.52 192.77 194.1 195.48 196.96 198.51 200.12 201.8 203.55 205.36 207.24 209.17 211.13 213.19 215.3 - 217.47 219.7 221.99 224.33 226.73 229.18 231.69 234.23 / - 4 4 8 1 167.06 159.22 157.94 157.52 157.71 158.24 159.03 160.02 161.19 162.49 163.95 165.53 - 167.22 168.99 170.88 172.85 174.88 177.01 179.22 181.46 183.8 186.2 188.65 191.13 193.7 196.31 199.44 202.15 - 204.91 207.72 210.58 213.48 216.41 219.4 222.44 225.5 / - 4 4 9 1 121.48 113.15 112.67 113.44 114.74 116.5 118.59 120.82 123.24 125.81 128.57 131.39 - 134.37 137.4 140.46 143.65 146.96 150.19 153.5 156.98 160.37 163.78 167.58 171.06 174.6 178.14 182.12 185.78 - 189.44 193.16 196.88 200.65 204.95 208.77 212.6 216.46 / - 4 4 10 1 73.72 74.32 76.4 79.02 81.92 84.94 88.13 91.46 94.86 98.42 102.11 105.89 - 109.78 113.77 117.75 121.91 126.16 130.49 134.9 139.18 143.71 148.31 152.73 157.41 161.9 166.68 171.53 176.12 - 181.06 185.7 190.74 195.44 200.42 205.51 210.35 215.32 / - 4 4 11 1 54.69 57.68 60.83 64.2 67.69 71.3 75.01 78.85 82.81 86.89 91.08 95.39 - 99.82 104.94 109.8 114.78 119.83 124.93 130.08 135.31 140.62 146.19 151.66 157.2 162.82 168.46 174.17 179.97 - 185.51 191.42 197.38 203.4 209.08 215.2 221.38 227.17 / - 4 4 12 1 49.21 53.28 56.91 60.63 64.61 68.83 73.26 77.88 82.67 87.64 92.76 98.04 - 103.47 109.02 114.64 120.36 126.18 132.12 138.16 144.3 150.55 156.89 164.04 171.26 178.56 185.58 192.79 199.93 - 207.25 214.46 221.7 228.99 236.36 243.79 251.3 258.87 / - 4 4 13 1 44.33 49.88 54.79 59.69 64.8 70.18 75.9 81.94 88.26 94.82 101.61 108.59 - 115.76 123.11 130.62 138.29 146.12 154.1 162.16 170.35 178.6 186.88 195.22 203.64 212.16 220.77 229.48 238.29 - 247.21 256.83 267.19 277.24 287.18 297.37 307.35 317.38 / - 4 4 14 1 40.56 47.2 55.1 63.33 71.18 79.69 88.52 96.71 105.56 114.96 124.48 134.45 - 144.64 154.1 164.27 175.01 185.94 197.07 208.4 219.9 231.6 243.49 254.49 266.72 279.03 291.43 303.94 316.59 - 329.39 342.34 355.46 368.73 382.17 395.79 411.29 424.08 / - 4 4 15 1 37.67 51.22 64.35 77.05 89.46 102.17 114.86 127.52 141.6 154.22 168.88 183.83 - 196.62 212.13 227.66 243.33 259.48 275.56 292.59 309.84 326.62 344.69 363.14 381.96 401.11 420.13 438.78 458.7 - 478.89 499.38 520.21 541.4 562.95 584.9 608.69 632.92 / - 4 4 16 1 44.97 66.05 86.4 105.66 124.65 143.75 164.06 184.7 205.52 226.67 250.07 271.84 - 296.1 321.16 344 370.38 397.34 424.48 452.66 480.56 510.26 540.72 571.92 602.66 635.2 668.48 702.38 737.06 - 772.55 809.2 846.38 885.58 925.59 965.69 1006.27 1046.96 / - 4 4 17 1 62.43 93.95 125.76 156.49 187.13 218.74 251.83 286.77 322.83 360.27 398.8 440.44 - 481.59 526.15 571.88 617.5 665.71 716.47 769.02 823.29 879.48 936.42 995.51 1056.65 1119.32 1181.26 1240.27 1295.44 - 1340.48 1390.41 1440.33 1492.39 1546.33 1602.56 1659.17 1713.33 / - 4 4 18 1 90.11 141.44 191.14 243.17 296.86 353.53 413.8 477.58 545.52 617.09 691.97 771.66 - 855.68 944.15 1036.45 1130.94 1227.62 1316.77 1401.32 1489.82 1578.87 1669.07 1764.53 1860.43 1957.56 2055.37 2154.25 2258.42 - 2356.15 2462.58 2569.4 2677.14 2787.83 2898.7 3010.79 3132.48 / - 4 4 19 1 134.48 213.51 297.45 392.55 494.42 606.13 725.92 858.37 998.82 1149.32 1300.26 1444.49 - 1590.58 1751.55 1908.98 2072.82 2250.98 2426.59 2608.34 2791.64 2978.19 3174.73 3374.71 3579.12 3785.67 3996.44 4215.35 4435.65 - 4669.73 4893.9 5136.25 5368.76 5615.25 5872.55 6117.06 6378.45 / - 4 4 20 1 204.04 326.61 468.71 654.77 868.28 1108.87 1358.77 1604.84 1875.96 2154.07 2449.98 2764.9 - 3080.4 3429.42 3778.49 4135.97 4510.62 4940.18 5346.43 5763.54 6208.49 6649.68 7116.65 7582.68 8076.43 8580.98 9089.42 9600.74 - 10135.44 10692.99 11255.73 11832.49 12436.12 13019.37 13646.84 14290.5 / - 4 5 1 1 205.97 205.72 205.75 205.93 206.23 206.61 207.07 207.6 208.2 208.86 209.59 210.38 - 211.23 212.14 213.1 214.13 215.21 216.36 217.56 218.81 220.12 221.49 222.92 224.4 225.94 227.54 229.19 230.89 - 232.65 234.47 236.34 238.27 240.25 242.29 244.39 246.53 / - 4 5 2 1 205.86 205.6 205.63 205.81 206.1 206.48 206.94 207.47 208.07 208.73 209.46 210.25 - 211.1 212.01 212.97 214 215.09 216.23 217.43 218.68 220 221.37 222.8 224.28 225.82 227.42 229.07 230.77 - 232.54 234.36 236.23 238.16 240.14 242.18 244.28 246.43 / - 4 5 3 1 205.67 205.39 205.4 205.58 205.87 206.24 206.7 207.23 207.83 208.49 209.22 210 - 210.85 211.76 212.73 213.76 214.84 215.99 217.19 218.45 219.76 221.13 222.56 224.05 225.59 227.19 228.84 230.55 - 232.32 234.14 236.01 237.95 239.93 241.98 244.08 246.23 / - 4 5 4 1 205.32 204.99 204.99 205.15 205.43 205.81 206.26 206.79 207.38 208.04 208.77 209.56 - 210.41 211.32 212.29 213.31 214.4 215.55 216.75 218.01 219.33 220.7 222.14 223.63 225.17 226.77 228.43 230.14 - 231.91 233.74 235.62 237.56 239.55 241.6 243.71 245.87 / - 4 5 5 1 204.36 203.82 203.63 203.74 203.98 204.32 204.76 205.27 205.86 206.52 207.24 208.03 - 208.89 209.8 210.78 211.82 212.91 214.07 215.29 216.56 217.9 219.29 220.74 222.24 223.81 225.43 227.11 228.84 - 230.64 232.49 234.39 236.35 238.37 240.45 242.58 244.76 / - 4 5 6 1 201.12 198.9 198.41 198.37 198.54 198.84 199.25 199.77 200.37 201.05 201.81 202.65 - 203.55 204.53 205.57 206.68 207.85 209.09 210.39 211.75 213.18 214.67 216.17 217.78 219.45 221.18 222.97 224.82 - 226.73 228.68 230.7 232.77 234.9 237.08 239.33 241.63 / - 4 5 7 1 191.55 186.16 185.32 185.07 185.14 185.43 185.89 186.48 187.2 188.03 188.95 189.98 - 191.09 192.28 193.55 194.88 196.3 197.8 199.37 201.01 202.72 204.46 206.3 208.2 210.17 212.19 214.27 216.41 - 218.61 220.84 223.15 225.52 227.94 230.42 232.96 235.55 / - 4 5 8 1 167.5 159.09 157.77 157.48 157.68 158.23 159.04 160.05 161.25 162.58 164.07 165.69 - 167.42 169.22 171.14 173.16 175.23 177.4 179.65 181.93 184.31 186.76 189.23 191.78 194.39 197.02 199.72 203 - 205.79 208.65 211.55 214.48 217.47 220.5 223.57 226.69 / - 4 5 9 1 121.6 113.04 112.63 113.37 114.75 116.53 118.58 120.89 123.33 125.93 128.72 131.57 - 134.6 137.64 140.79 144.01 147.23 150.64 153.97 157.49 160.92 164.39 168.21 171.73 175.32 178.9 182.55 186.6 - 190.27 194.02 197.78 201.6 205.95 209.83 213.7 217.63 / - 4 5 10 1 73.9 74.52 76.61 79.24 82.13 85.22 88.46 91.78 95.27 98.87 102.59 106.41 - 110.33 114.25 118.36 122.56 126.84 131.21 135.47 139.96 144.53 148.93 153.62 158.35 162.87 167.7 172.59 177.21 - 182.2 186.89 191.97 196.72 201.75 206.55 211.68 216.8 / - 4 5 11 1 54.82 57.87 61.04 64.44 67.96 71.6 75.36 79.24 83.23 87.35 91.59 95.94 - 100.4 105.51 110.47 115.42 120.52 125.64 130.92 136.19 141.55 146.98 152.48 158.05 163.7 169.41 175.15 180.95 - 186.84 192.8 198.82 204.9 210.64 216.82 223.06 228.9 / - 4 5 12 1 49.22 53.41 57.12 60.87 64.88 69.13 73.6 78.25 83.08 88.09 93.25 98.57 - 104.04 109.63 115.29 121.05 126.92 132.9 138.98 145.17 151.47 157.86 164.89 172.19 179.58 186.8 193.92 201.09 - 208.38 215.94 223.24 230.6 238.03 245.54 253.11 260.76 / - 4 5 13 1 44.27 49.93 54.93 59.9 65.06 70.49 76.24 82.31 88.67 95.28 102.1 109.13 - 116.35 123.74 131.3 139.02 146.89 154.92 163.03 171.26 179.56 187.89 196.28 204.75 213.33 221.99 230.76 239.63 - 248.6 257.98 268.1 278.59 288.69 298.89 309.03 319.12 / - 4 5 14 1 40.52 47.24 55.2 63.5 71.44 79.97 88.83 97.08 105.97 115.41 124.97 134.99 - 145.22 154.73 164.95 175.74 186.72 197.9 209.28 220.85 232.6 244.54 255.59 267.88 280.26 292.72 305.3 318.01 - 330.88 343.9 357.08 370.43 383.95 397.64 412.38 427.76 / - 4 5 15 1 37.66 51.28 64.43 77.17 89.64 102.4 115.13 127.85 141.96 154.65 169.34 184.33 - 197.18 212.74 228.4 244.07 260.39 276.39 293.47 310.77 327.6 345.72 364.2 383.08 402.3 421.41 440.14 460.14 - 480.4 500.97 521.88 543.14 564.77 586.78 609.69 634.03 / - 4 5 16 1 44.94 66.03 86.67 105.76 124.79 144.36 164.28 184.94 205.8 226.99 250.42 272.26 - 296.57 321.68 344.94 371 398.06 425.2 453.4 481.6 511.06 541.52 572.71 603.48 636.01 669.29 703.3 738.02 - 773.52 809.49 847.19 886.32 926.16 966.23 1007.32 1047.75 / - 4 5 17 1 62.33 93.88 125.75 156.55 187.24 218.87 251.99 286.92 322.98 360.41 398.95 440.57 - 481.75 526.32 572.04 618.62 665.79 716.44 768.89 823.08 879.36 936.32 995.39 1055.69 1118.59 1181.16 1240.57 1297.09 - 1344.17 1395.59 1447.38 1501.81 1556.69 1613.01 1673.03 1729.07 / - 4 5 18 1 89.96 141.47 191.04 243.22 296.98 353.67 413.92 477.61 545.43 616.93 691.79 771.11 - 854.9 943.16 1035.34 1129.95 1225.76 1316.42 1401.61 1491.54 1581.12 1673.36 1769.78 1866.74 1965.04 2064.12 2162.7 2269.72 - 2368.78 2476.54 2584.75 2693.91 2806.11 2918.48 3032.29 3154.33 / - 4 5 19 1 134.28 213.32 297.04 391.81 494.46 604.73 725.55 856.32 997.85 1148.11 1300.02 1444.32 - 1591.02 1752.71 1910.95 2075.69 2247.68 2431.65 2615.93 2802.17 2991.81 3190.7 3394.33 3601.68 3808.89 4025.92 4246.89 4470.3 - 4707.08 4934.67 5179.65 5415.4 5664.74 5924.66 6172.64 6436.93 / - 4 5 20 1 203.82 326.5 465.39 651.43 863.05 1108 1353.09 1605.28 1865.51 2156.92 2454.31 2751.34 - 3088.09 3417.88 3790.22 4149.88 4526.88 4955.47 5367.72 5787.92 6234.57 6684.73 7160.35 7633.09 8133.32 8637.04 9159.84 9668.27 - 10218.82 10773.03 11353.61 11938.56 12536.35 13141.32 13776.83 14428.65 / - 4 6 1 1 208.08 207.7 207.67 207.83 208.11 208.47 208.93 209.45 210.04 210.7 211.43 212.21 - 213.06 213.97 214.93 215.96 217.04 218.19 219.39 220.64 221.96 223.33 224.76 226.25 227.79 229.38 231.04 232.75 - 234.52 236.34 238.21 240.15 242.14 244.18 246.28 248.44 / - 4 6 2 1 207.98 207.58 207.55 207.7 207.98 208.34 208.79 209.32 209.91 210.57 211.29 212.08 - 212.92 213.83 214.8 215.83 216.91 218.05 219.25 220.51 221.83 223.2 224.63 226.12 227.66 229.26 230.91 232.63 - 234.39 236.22 238.1 240.03 242.02 244.07 246.17 248.33 / - 4 6 3 1 207.78 207.36 207.32 207.46 207.73 208.1 208.54 209.07 209.66 210.32 211.04 211.83 - 212.67 213.58 214.55 215.58 216.66 217.8 219.01 220.27 221.58 222.96 224.39 225.88 227.42 229.02 230.68 232.39 - 234.16 235.99 237.87 239.81 241.8 243.85 245.96 248.12 / - 4 6 4 1 207.41 206.95 206.89 207.03 207.29 207.65 208.09 208.61 209.2 209.86 210.58 211.37 - 212.22 213.12 214.09 215.12 216.21 217.35 218.56 219.82 221.14 222.52 223.95 225.44 226.99 228.6 230.26 231.98 - 233.75 235.58 237.47 239.41 241.41 243.47 245.58 247.74 / - 4 6 5 1 206.34 205.62 205.32 205.37 205.57 205.89 206.31 206.81 207.39 208.05 208.77 209.56 - 210.41 211.33 212.31 213.35 214.46 215.62 216.84 218.13 219.47 220.87 222.33 223.85 225.43 227.06 228.75 230.5 - 232.31 234.17 236.1 238.07 240.1 242.19 244.33 246.52 / - 4 6 6 1 202.83 200.33 199.71 199.63 199.76 200.04 200.44 200.94 201.54 202.22 202.99 203.82 - 204.73 205.72 206.77 207.88 209.07 210.32 211.63 213.01 214.45 215.94 217.5 219.12 220.8 222.54 224.34 226.2 - 228.12 230.06 232.1 234.19 236.34 238.55 240.82 243.15 / - 4 6 7 1 191.96 187 186.02 185.72 185.78 186.06 186.52 187.12 187.84 188.68 189.61 190.64 - 191.76 192.97 194.27 195.63 197.07 198.59 200.18 201.85 203.56 205.35 207.21 209.14 211.13 213.16 215.27 217.44 - 219.67 221.95 224.3 226.7 229.13 231.64 234.2 236.83 / - 4 6 8 1 167.77 159.05 157.71 157.41 157.61 158.17 158.9 159.93 161.14 162.48 163.99 165.62 - 167.54 169.38 171.35 173.4 175.51 177.73 180.01 182.34 184.77 187.26 189.77 192.37 195.02 197.7 200.46 203.26 - 206.08 209.53 212.46 215.46 218.49 221.57 224.69 227.85 / - 4 6 9 1 121.3 113 112.59 113.35 114.76 116.56 118.65 120.93 123.45 126.08 128.83 131.76 - 134.73 137.88 141.08 144.3 147.63 151.07 154.44 157.86 161.47 164.98 168.53 172.44 176.05 179.68 183.37 187.48 - 191.2 194.97 198.73 202.57 206.42 210.89 214.81 218.79 / - 4 6 10 1 73.98 74.68 76.81 79.47 82.41 85.56 88.8 92.2 95.71 99.35 103.09 106.87 - 110.81 114.84 118.98 123.21 127.52 131.76 136.21 140.74 145.35 149.79 154.51 159.28 163.84 168.71 173.34 178.31 - 183.01 188.07 192.83 198 203.08 207.93 213.09 218.18 / - 4 6 11 1 54.94 58.07 61.28 64.71 68.28 71.96 75.75 79.67 83.7 87.85 92.12 96.5 - 100.99 106.08 111.1 116.14 121.28 126.45 131.76 137.08 142.48 147.95 153.5 159.12 164.82 170.58 176.37 182.22 - 188.17 194.18 200.26 206.02 212.19 218.43 224.29 230.64 / - 4 6 12 1 49.23 53.55 57.33 61.13 65.18 69.47 73.97 78.66 83.53 88.57 93.77 99.13 - 104.63 110.25 115.94 121.74 127.65 133.68 139.81 146.04 152.38 158.82 165.53 173.1 180.59 187.82 195.05 202.43 - 209.79 217.11 224.45 231.86 239.34 246.89 254.52 262.22 / - 4 6 13 1 44.23 49.99 55.08 60.12 65.34 70.82 76.61 82.72 89.11 95.75 102.61 109.68 - 116.93 124.37 131.97 139.74 147.66 155.73 163.88 172.16 180.51 188.89 197.33 205.86 214.48 223.2 232.03 240.95 - 249.98 259.11 269.31 279.62 289.94 300.39 310.61 320.86 / - 4 6 14 1 40.48 47.3 55.32 63.68 71.83 80.26 89.17 97.27 106.38 115.86 125.45 135.52 - 145.79 155.36 165.63 176.46 187.49 198.72 210.14 221.76 233.57 245.57 256.68 269.03 281.47 293.99 306.64 319.42 - 332.35 345.44 358.69 372.12 385.7 399.47 413.4 428.89 / - 4 6 15 1 37.66 51.33 64.54 77.33 89.84 102.63 115.41 128.16 142.31 155.06 169.79 184.83 - 197.73 213.34 229.06 244.79 261.26 277.21 294.34 311.68 328.56 346.72 365.25 384.16 403.45 422.64 441.46 461.54 - 481.87 502.52 523.5 544.84 566.53 588.61 611.1 635.04 / - 4 6 16 1 44.9 66.02 86.7 105.85 124.93 144.61 164.5 185.19 206.07 227.3 250.76 272.64 - 297.03 322.18 345.95 371.59 398.71 425.89 454.12 482.72 511.81 542.27 573.48 604.24 636.75 670.01 704.12 738.92 - 774.46 810.75 847.38 886.34 926.36 966.77 1007.74 1048.41 / - 4 6 17 1 62.25 93.89 125.75 156.61 187.35 219.14 252.14 287.07 323.12 360.54 399.08 440.67 - 481.87 526.44 572.34 617.82 665.8 716.34 768.67 822.84 879.04 936.06 995.15 1055 1118.13 1180.61 1241.27 1298.53 - 1347.44 1400.78 1454.38 1510.55 1567.21 1625.43 1687.13 1746.16 / - 4 6 18 1 89.8 141.32 190.96 243.26 297.19 353.95 414.04 477.82 545.32 616.73 691.43 770.53 - 854.06 942.07 1034.07 1128.79 1224.9 1315.76 1400.94 1491.26 1582.15 1675.38 1772.71 1870.55 1970.09 2070.23 2171.27 2277.83 - 2379.99 2489.01 2598.48 2709.28 2822.89 2936.7 3052.11 3175.47 / - 4 6 19 1 134.06 213.13 296.64 391.77 494.46 604.62 725.24 855.45 996.84 1146.83 1300.4 1439.73 - 1591.37 1745.76 1912.85 2078.55 2251.48 2436.63 2623.37 2809.79 3003.76 3204.1 3409.97 3620.48 3833.43 4055.53 4275.29 4505.02 - 4745.05 4976.22 5220.84 5463.69 5716.54 5975.1 6231.24 6498.88 / - 4 6 20 1 203.59 326.42 461.87 648.44 862.03 1101.37 1352.48 1602.13 1867.08 2145.5 2441.8 2757.6 - 3096.11 3427.82 3802.51 4166.3 4543.9 4978.85 5390.06 5813.11 6258.59 6715.62 7194.1 7677.97 8180.66 8699.11 9220.1 9745.19 - 10302.88 10864.89 11442.84 12047.02 12653.91 13263.03 13911.69 14572.41 / - 4 7 1 1 210.2 209.68 209.6 209.73 209.98 210.34 210.78 211.3 211.88 212.54 213.26 214.04 - 214.89 215.79 216.76 217.79 218.87 220.01 221.21 222.47 223.79 225.16 226.59 228.08 229.63 231.23 232.88 234.6 - 236.37 238.19 240.08 242.02 244.01 246.06 248.17 250.33 / - 4 7 2 1 210.09 209.56 209.47 209.59 209.85 210.2 210.64 211.16 211.75 212.4 213.12 213.9 - 214.75 215.65 216.62 217.65 218.73 219.87 221.08 222.34 223.65 225.03 226.46 227.95 229.49 231.09 232.75 234.47 - 236.24 238.07 239.95 241.89 243.89 245.94 248.05 250.21 / - 4 7 3 1 209.89 209.33 209.23 209.35 209.6 209.95 210.39 210.9 211.49 212.14 212.86 213.64 - 214.49 215.39 216.36 217.39 218.47 219.62 220.82 222.08 223.4 224.77 226.21 227.7 229.25 230.85 232.51 234.23 - 236 237.83 239.72 241.66 243.66 245.72 247.83 250 / - 4 7 4 1 209.51 208.92 208.8 208.9 209.14 209.48 209.91 210.42 211.01 211.66 212.37 213.16 - 214 214.91 215.87 216.9 217.99 219.13 220.34 221.6 222.92 224.3 225.74 227.23 228.78 230.39 232.06 233.78 - 235.56 237.4 239.29 241.24 243.24 245.3 247.42 249.6 / - 4 7 5 1 208.28 207.23 206.97 206.98 207.15 207.46 207.86 208.36 208.94 209.59 210.31 211.1 - 211.95 212.87 213.85 214.9 216 217.17 218.4 219.67 221 222.41 223.88 225.4 226.98 228.62 230.32 232.08 - 233.89 235.76 237.69 239.68 241.73 243.83 245.98 248.2 / - 4 7 6 1 204.54 201.47 200.96 200.83 200.94 201.2 201.59 202.08 202.68 203.36 204.12 204.95 - 205.87 206.85 207.9 209.02 210.21 211.47 212.79 214.17 215.62 217.13 218.7 220.34 222.04 223.8 225.62 227.5 - 229.44 231.44 233.49 235.6 237.77 240 242.28 244.62 / - 4 7 7 1 193.2 187.62 186.6 186.29 186.33 186.6 187.06 187.66 188.39 189.24 190.19 191.24 - 192.38 193.59 194.9 196.29 197.76 199.31 200.91 202.6 204.36 206.17 208.06 210.01 212.03 214.09 216.23 218.43 - 220.69 223 225.36 227.8 230.28 232.82 235.42 238.08 / - 4 7 8 1 168.42 158.95 157.57 157.25 157.45 157.93 158.76 159.81 161.04 162.44 163.95 165.62 - 167.4 169.26 171.46 173.55 175.7 177.96 180.3 182.67 185.14 187.68 190.24 192.89 195.56 198.31 201.12 203.95 - 206.84 209.78 213.34 216.38 219.47 222.59 225.76 228.97 / - 4 7 9 1 121.33 112.9 112.56 113.35 114.8 116.63 118.73 121.04 123.51 126.23 129 131.95 - 134.95 138.11 141.29 144.6 147.98 151.37 154.9 158.36 162.02 165.58 169.16 173.12 176.79 180.48 184.2 187.94 - 192.17 195.97 199.79 203.67 207.54 212.02 215.96 219.97 / - 4 7 10 1 74.16 74.9 77.01 79.73 82.75 85.89 89.19 92.61 96.16 99.82 103.52 107.4 - 111.36 115.42 119.59 123.85 128.05 132.46 136.95 141.52 145.95 150.64 155.4 159.96 164.81 169.72 174.4 179.41 - 184.15 189.26 194.07 199.28 204.15 209.31 214.52 219.48 / - 4 7 11 1 55.08 58.28 61.53 65.01 68.62 72.33 76.15 80.1 84.16 88.34 92.64 97.06 - 101.59 106.58 111.72 116.77 121.96 127.25 132.47 137.96 143.41 148.93 154.52 160.19 165.93 171.75 177.59 183.49 - 189.5 195.57 201.34 207.51 213.75 220.05 225.97 232.37 / - 4 7 12 1 49.25 53.7 57.56 61.41 65.5 69.82 74.35 79.08 83.98 89.05 94.29 99.68 - 105.23 110.88 116.61 122.44 128.39 134.46 140.63 146.91 153.3 159.78 166.35 173.98 181.46 188.84 196.32 203.6 - 210.99 218.57 225.97 233.45 241 248.62 256.32 264.1 / - 4 7 13 1 44.21 50.07 55.25 60.36 65.64 71.16 76.98 83.12 89.55 96.23 103.13 110.24 - 117.53 125 132.64 140.45 148.41 156.53 164.72 173.05 181.45 189.87 198.37 206.95 215.63 224.4 233.28 242.27 - 251.35 260.54 270.15 280.54 291.33 301.7 312.18 322.59 / - 4 7 14 1 40.45 47.25 55.45 63.88 72.28 80.55 89.5 98.34 106.8 116.31 125.94 136.04 - 146.36 155.97 166.29 177.16 188.24 199.51 210.98 222.65 234.52 246.58 257.75 270.15 282.65 295.25 307.95 320.8 - 333.8 346.96 360.28 373.78 387.44 401.28 415.29 429.95 / - 4 7 15 1 37.67 51.38 64.63 77.47 90.03 102.87 115.68 128.47 142.65 155.46 170.23 185.3 - 198.26 213.91 229.69 245.48 262.01 278.01 295.18 312.57 329.5 347.69 366.26 385.2 404.53 423.29 442.72 462.88 - 483.29 504.02 525.07 546.48 568.25 590.4 612.94 635.89 / - 4 7 16 1 44.96 66.01 86.74 105.95 125.06 144.78 164.71 185.42 206.34 227.59 251.08 272.99 - 297.45 322.65 346.47 372.17 399.31 426.64 454.79 483.41 512.51 542.99 574.19 604.95 637.45 670.65 704.77 739.69 - 775.29 811.63 847.7 886.2 926.38 967.05 1008.31 1049.43 / - 4 7 17 1 62.15 93.8 125.87 156.66 187.52 219.55 252.3 287.22 323.25 360.65 399.18 440.75 - 481.93 526.51 572.48 619.18 665.76 716.18 768.37 822.4 878.5 935.61 994.73 1054.59 1116.87 1180.32 1241.43 1299.15 - 1350.88 1406.16 1461.42 1519.37 1578.8 1637.99 1701.35 1762.68 / - 4 7 18 1 89.64 141.34 190.88 243.29 297.28 354.06 414.2 477.83 545.21 616.5 691.04 769.9 - 853.15 940.91 1032.65 1127.44 1223.85 1316.11 1401.78 1493.08 1585.1 1679.48 1777.92 1876.91 1977.74 2079.23 2181.69 2289.58 - 2393.35 2503.06 2614.82 2727.21 2841.43 2957.97 3075.14 3199.98 / - 4 7 19 1 133.85 212.94 296.14 390.84 493.33 604.54 723.77 853.31 995.81 1145.46 1299.11 1439.07 - 1593.09 1746.66 1914.64 2081.32 2255.29 2441.55 2629.57 2817.24 3011.53 3213.21 3423.35 3637.87 3854.94 4081.55 4304.9 4538.36 - 4778.92 5017.38 5266.05 5512.74 5769.39 6031.75 6291.8 6563.24 / - 4 7 20 1 203.36 326.34 458.2 645.2 856.77 1094.08 1344.66 1599.61 1868.68 2148.51 2446.45 2764.13 - 3104.47 3438.3 3815.42 4182.41 4561.8 4959.85 5413.55 5839.65 6288.11 6744.55 7228.36 7725.41 8231.56 8750.4 9287.17 9820.75 - 10376.24 10956.92 11543.81 12157.33 12773.94 13392.74 14036.29 14721.27 / - 4 8 1 1 212.31 211.66 211.53 211.62 211.86 212.2 212.63 213.14 213.72 214.37 215.09 215.87 - 216.71 217.62 218.58 219.61 220.69 221.83 223.03 224.29 225.61 226.99 228.42 229.91 231.46 233.06 234.72 236.44 - 238.21 240.04 241.93 243.87 245.88 247.93 250.04 252.21 / - 4 8 2 1 212.2 211.54 211.4 211.49 211.72 212.06 212.49 213 213.58 214.23 214.95 215.73 - 216.57 217.47 218.44 219.46 220.55 221.69 222.89 224.15 225.47 226.85 228.28 229.77 231.32 232.92 234.59 236.3 - 238.08 239.91 241.8 243.75 245.75 247.81 249.92 252.09 / - 4 8 3 1 211.99 211.3 211.15 211.23 211.46 211.8 212.23 212.73 213.31 213.96 214.68 215.46 - 216.3 217.2 218.17 219.19 220.28 221.42 222.63 223.89 225.21 226.58 228.02 229.51 231.06 232.67 234.33 236.05 - 237.83 239.67 241.56 243.51 245.51 247.57 249.69 251.86 / - 4 8 4 1 211.6 210.84 210.66 210.72 210.93 211.26 211.68 212.18 212.75 213.4 214.11 214.89 - 215.73 216.64 217.6 218.63 219.71 220.86 222.07 223.33 224.65 226.03 227.47 228.97 230.52 232.14 233.81 235.53 - 237.32 239.16 241.06 243.01 245.02 247.09 249.22 251.4 / - 4 8 5 1 210.2 208.96 208.55 208.53 208.69 208.98 209.37 209.86 210.43 211.08 211.8 212.58 - 213.44 214.36 215.34 216.39 217.5 218.68 219.91 221.21 222.56 223.97 225.44 226.96 228.55 230.2 231.9 233.67 - 235.49 237.37 239.3 241.3 243.35 245.46 247.63 249.85 / - 4 8 6 1 206.19 202.76 202.04 201.89 201.98 202.24 202.62 203.12 203.72 204.4 205.17 206.01 - 206.93 207.92 208.99 210.12 211.32 212.59 213.92 215.32 216.74 218.27 219.86 221.52 223.23 225.01 226.85 228.74 - 230.69 232.7 234.77 236.9 239.09 241.34 243.65 246.01 / - 4 8 7 1 194.4 188.25 187.12 186.77 186.79 187.05 187.5 188.11 188.85 189.7 190.67 191.73 - 192.89 194.14 195.46 196.87 198.36 199.93 201.57 203.27 205.06 206.91 208.83 210.8 212.85 214.96 217.12 219.35 - 221.65 223.98 226.39 228.85 231.37 233.95 236.57 239.26 / - 4 8 8 1 168.6 158.76 157.33 156.99 157.11 157.68 158.52 159.59 160.85 162.27 163.81 165.51 - 167.33 169.26 171.25 173.38 175.8 178.11 180.49 182.92 185.44 188.02 190.63 193.33 196.08 198.85 201.71 204.58 - 207.53 210.53 213.55 217.24 220.39 223.55 226.78 230.05 / - 4 8 9 1 121.01 112.87 112.49 113.37 114.84 116.7 118.82 121.15 123.64 126.3 129.17 132.08 - 135.16 138.27 141.55 144.89 148.23 151.71 155.32 158.85 162.56 166.16 169.8 173.47 177.51 181.26 185.04 188.84 - 193.12 196.97 200.88 204.78 208.72 212.71 217.26 221.29 / - 4 8 10 1 74.33 75.13 77.29 80.04 83.09 86.25 89.58 93.03 96.55 100.22 104.01 107.92 - 111.91 116 120.2 124.36 128.72 133.17 137.69 142.1 146.76 151.49 156.04 160.89 165.78 170.46 175.45 180.51 - 185.29 190.46 195.31 200.57 205.49 210.7 215.68 220.98 / - 4 8 11 1 55.21 58.52 61.82 65.33 68.96 72.7 76.55 80.53 84.62 88.83 93.17 97.62 - 102.18 107.06 112.34 117.49 122.68 127.95 133.3 138.69 144.16 149.9 155.54 161.26 167.05 172.91 178.81 184.77 - 190.83 196.61 202.78 209.01 215.3 221.25 227.65 234.12 / - 4 8 12 1 49.28 53.86 57.81 61.71 65.82 70.17 74.74 79.49 84.42 89.53 94.81 100.24 - 105.82 111.51 117.27 123.15 129.14 135.24 141.46 147.78 154.21 160.73 167.35 174.85 182.41 189.89 197.38 204.76 - 212.38 219.72 227.49 235.04 242.66 250.35 258.13 265.98 / - 4 8 13 1 44.2 50.16 55.45 60.62 65.94 71.5 77.35 83.52 89.98 96.7 103.64 110.78 - 118.12 125.64 133.32 141.17 149.17 157.33 165.56 173.93 182.37 190.85 199.39 208.03 216.76 225.59 234.53 243.57 - 252.71 261.95 271.3 281.78 292.38 302.98 313.46 323.87 / - 4 8 14 1 40.43 47.34 55.6 64.09 72.34 80.84 89.83 98.71 107.21 116.76 126.43 136.57 - 146.92 156.38 166.94 177.86 188.98 200.29 211.81 223.52 235.44 247.56 258.78 271.25 283.82 296.47 309.25 322.16 - 335.23 348.46 361.85 375.41 389.15 403.06 417.14 431.41 / - 4 8 15 1 37.6 51.43 64.72 77.72 90.22 103.1 115.95 128.78 142.99 155.83 170.66 185.77 - 198.78 214.47 230.29 246.14 262.73 278.79 296 313.43 330.4 348.63 367.23 386.21 405.57 424.39 443.91 464.16 - 484.65 505.45 526.58 548.06 569.9 592.12 614.72 637.73 / - 4 8 16 1 44.96 65.99 86.76 106.15 125.42 144.94 164.9 185.64 206.58 227.85 251.38 273.32 - 297.82 323.08 347.04 372.68 399.86 427.23 455.41 483.81 513.17 543.64 574.84 605.74 638.07 671.21 705.26 740.25 - 775.96 812.35 849.08 885.84 926.13 967.05 1008.12 1049.89 / - 4 8 17 1 62.04 93.71 125.84 156.71 188.03 219.69 252.92 287.36 323.38 360.75 399.25 440.79 - 481.94 526.54 572.49 619.4 665.67 715.95 768.18 821.95 877.8 934.92 994.11 1054.01 1115.29 1179.12 1241.19 1299.22 - 1354.04 1410.95 1468.43 1528.23 1589.53 1650.71 1716.57 1778.71 / - 4 8 18 1 89.47 141.34 190.74 243.33 297.36 354.16 414.28 477.83 545.14 616.28 690.61 769.23 - 852.2 939.66 1031.13 1125.83 1221.6 1315.35 1402.63 1494.58 1588.02 1683.97 1783.25 1883.51 1984.85 2088.62 2192.54 2301.22 - 2407.32 2518.62 2631.97 2746.04 2862.01 2980.34 3099.38 3225.77 / - 4 8 19 1 133.63 212.75 295.63 389.9 493.33 603.02 723.32 852.66 991.46 1144.02 1292.59 1438.35 - 1593.04 1747.43 1916.34 2083.97 2259 2437.87 2635.9 2824.77 3023.98 3223.63 3434.71 3651.61 3871.74 4099.55 4330.1 4568.14 - 4813.14 5056.24 5309.41 5556.93 5821.85 6088.32 6348.13 6628.86 / - 4 8 20 1 203.14 326.3 452.69 642.04 852.08 1093.19 1343.97 1594.93 1864.21 2151.65 2451.33 2770.97 - 3090.67 3449.39 3798.32 4198.46 4580.69 4981.56 5438.4 5867.71 6319.36 6775.25 7264.42 7765.89 8270.19 8803.77 9349.69 9883.24 - 10457.19 11036.87 11644.31 12256.84 12895.1 13524.53 14178.82 14874.66 / - 4 9 1 1 214.41 213.64 213.45 213.52 213.73 214.06 214.48 214.98 215.56 216.2 216.92 217.69 - 218.53 219.43 220.4 221.42 222.5 223.65 224.85 226.11 227.43 228.8 230.24 231.73 233.28 234.88 236.55 238.27 - 240.05 241.88 243.77 245.72 247.73 249.79 251.91 254.08 / - 4 9 2 1 214.3 213.51 213.32 213.38 213.59 213.92 214.34 214.84 215.41 216.06 216.77 217.54 - 218.38 219.28 220.25 221.27 222.35 223.5 224.7 225.96 227.28 228.66 230.09 231.58 233.13 234.74 236.41 238.13 - 239.91 241.74 243.64 245.59 247.59 249.66 251.78 253.95 / - 4 9 3 1 214.09 213.27 213.06 213.12 213.33 213.65 214.07 214.56 215.14 215.78 216.49 217.27 - 218.11 219.01 219.97 221 222.08 223.22 224.43 225.69 227.01 228.39 229.82 231.32 232.87 234.48 236.15 237.87 - 239.65 241.49 243.39 245.34 247.35 249.42 251.54 253.72 / - 4 9 4 1 213.64 212.75 212.5 212.53 212.72 213.02 213.43 213.92 214.49 215.12 215.83 216.61 - 217.45 218.35 219.31 220.34 221.42 222.57 223.78 225.04 226.37 227.75 229.19 230.69 232.25 233.87 235.54 237.27 - 239.06 240.91 242.81 244.78 246.79 248.87 251 253.19 / - 4 9 5 1 212.09 210.61 210.08 210.01 210.14 210.42 210.8 211.28 211.84 212.48 213.19 213.98 - 214.83 215.75 216.74 217.79 218.9 220.07 221.31 222.61 223.96 225.38 226.86 228.4 230 231.66 233.38 235.16 - 236.99 238.89 240.84 242.85 244.92 247.05 249.23 251.47 / - 4 9 6 1 207.79 204 203.14 202.94 202.99 203.22 203.59 204.08 204.67 205.35 206.11 206.96 - 207.89 208.88 209.96 211.1 212.31 213.59 214.94 216.35 217.83 219.37 220.97 222.64 224.37 226.17 228.02 229.94 - 231.87 233.91 236 238.16 240.37 242.64 244.98 247.37 / - 4 9 7 1 195.54 188.68 187.52 187.14 187.13 187.39 187.84 188.45 189.2 190.06 191.04 192.12 - 193.3 194.57 195.93 197.34 198.86 200.46 202.13 203.88 205.67 207.55 209.51 211.53 213.59 215.73 217.94 220.2 - 222.52 224.91 227.34 229.85 232.41 235.02 237.68 240.4 / - 4 9 8 1 168.89 158.46 156.99 156.59 156.72 157.32 158.18 159.27 160.55 162 163.6 165.31 - 167.16 169.13 171.16 173.33 175.58 177.88 180.59 183.1 185.63 188.27 190.93 193.68 196.48 199.31 202.22 205.15 - 208.15 211.2 214.28 217.42 221.24 224.46 227.75 231.07 / - 4 9 9 1 121.23 112.85 112.49 113.35 114.85 116.72 118.86 121.25 123.77 126.45 129.35 132.28 - 135.31 138.51 141.82 145.12 148.55 152.06 155.56 159.26 162.88 166.72 170.42 174.14 178.24 182.04 185.87 189.73 - 193.62 197.99 201.94 205.91 209.94 213.96 218.04 222.69 / - 4 9 10 1 74.51 75.4 77.59 80.36 83.39 86.61 89.97 93.4 96.98 100.69 104.5 108.43 - 112.46 116.49 120.69 125 129.39 133.87 138.43 142.87 147.57 152.34 156.93 161.82 166.75 171.46 176.51 181.3 - 186.44 191.3 196.55 201.48 206.83 212.1 217.13 222.48 / - 4 9 11 1 55.35 58.78 62.11 65.65 69.31 73.07 76.95 80.96 85.08 89.33 93.69 98.17 - 102.77 107.54 112.95 118.12 123.4 128.75 134.14 139.57 145.08 150.68 156.35 162.1 167.92 173.82 179.78 185.77 - 191.83 197.99 204.22 210.51 216.47 222.87 229.33 235.41 / - 4 9 12 1 49.33 54.05 58.08 62.01 66.15 70.53 75.12 79.9 84.87 90.01 95.32 100.79 - 106.41 112.13 117.94 123.85 129.88 136.03 142.28 148.65 155.12 161.69 168.35 175.5 183.35 190.94 198.43 205.99 - 213.57 221.16 228.68 236.27 243.94 251.69 259.52 267.42 / - 4 9 13 1 44.22 50.29 55.66 60.88 66.24 71.84 77.72 83.92 90.42 97.17 104.15 111.33 - 118.7 126.26 133.99 141.88 149.93 158.12 166.39 174.8 183.29 191.82 200.41 209.1 217.88 226.77 235.76 244.85 - 254.05 263.36 272.76 282.62 293.3 304.06 314.79 325.47 / - 4 9 14 1 40.43 47.44 55.76 64.29 72.8 81.14 90.15 99.07 107.61 117.19 126.9 137.09 - 147.48 157.6 167.58 178.54 189.7 201.06 212.62 224.37 236.33 248.5 259.79 272.31 284.95 297.68 310.52 323.5 - 336.63 349.92 363.39 377.02 390.82 404.81 418.96 433.3 / - 4 9 15 1 37.61 51.47 64.93 77.87 90.56 103.33 116.21 129.07 143.32 156.2 171.07 186.23 - 200.66 215 230.87 246.76 263.41 279.52 296.78 314.25 331.26 349.53 368.16 387.16 406.55 425.42 445.02 465.35 - 485.93 506.81 528.02 549.57 571.48 593.76 616.42 639.49 / - 4 9 16 1 44.91 65.97 86.79 106.48 125.65 145.09 165.08 185.83 206.8 228.09 251.64 273.61 - 298.14 323.46 348.55 373.14 400.34 427.76 455.98 484.93 513.77 544.24 575.42 606.32 638.63 671.71 705.66 740.57 - 776.38 812.86 849.64 886.42 925.61 966.01 1008 1049.78 / - 4 9 17 1 61.93 93.68 125.8 157.06 188.11 219.8 253.04 287.48 323.48 360.82 399.29 440.8 - 481.91 526.5 572.44 619.32 665.52 715.65 767.72 821.32 876.98 933.95 993.23 1053.5 1114.56 1177.54 1240.79 1299.84 - 1357.26 1415.89 1475.58 1536.87 1599.62 1662.03 1728.82 1792.45 / - 4 9 18 1 89.31 141.17 190.65 243.3 297.43 354.26 414.37 477.81 544.99 615.99 690.16 768.52 - 851.17 938.31 1029.48 1123.96 1220.1 1314.33 1403.38 1494.63 1589.86 1688.55 1786.89 1889.76 1992.89 2098.36 2203.96 2314.16 - 2422.63 2534.98 2650.14 2765.97 2883.77 3004.04 3125.07 3253.12 / - 4 9 19 1 133.4 212.56 294.8 389.84 492.14 602.95 721.08 851.01 990.33 1138.09 1291.1 1437.55 - 1592.95 1748.18 1919.99 2089.55 2262.79 2442.88 2642.19 2832.48 3033.16 3233.15 3446.5 3663.46 3889.19 4117.57 4350.55 4589.04 - 4841.88 5086.66 5348.4 5600.98 5871.25 6142.45 6407.14 6693.37 / - 4 9 20 1 202.91 326.3 452.59 636.91 847.45 1085.92 1337.76 1589.61 1860.61 2143.09 2456.59 2778.2 - 3100.01 3461.14 3812.67 4215.6 4600.74 5004.62 5418.68 5897.54 6352.57 6812.19 7300.67 7807.6 8318.78 8848.3 9398.96 9948.55 - 10522.23 11122.99 11741.56 12365.37 13004.43 13656.68 14322.9 15014.84 / - 4 10 1 1 216.49 215.6 215.37 215.4 215.6 215.92 216.33 216.82 217.39 218.03 218.74 219.51 - 220.35 221.25 222.21 223.23 224.31 225.45 226.65 227.91 229.23 230.61 232.05 233.54 235.09 236.7 238.37 240.09 - 241.87 243.71 245.61 247.56 249.57 251.64 253.76 255.94 / - 4 10 2 1 216.37 215.47 215.23 215.26 215.45 215.77 216.18 216.67 217.24 217.87 218.58 219.35 - 220.19 221.09 222.05 223.07 224.16 225.3 226.5 227.76 229.08 230.46 231.89 233.39 234.94 236.55 238.22 239.94 - 241.73 243.57 245.46 247.42 249.43 251.5 253.62 255.81 / - 4 10 3 1 216.16 215.23 214.97 214.99 215.18 215.49 215.9 216.39 216.95 217.59 218.3 219.07 - 219.91 220.81 221.77 222.79 223.87 225.02 226.22 227.48 228.8 230.18 231.62 233.11 234.67 236.28 237.95 239.68 - 241.46 243.3 245.2 247.16 249.17 251.25 253.37 255.56 / - 4 10 4 1 215.65 214.61 214.29 214.27 214.44 214.73 215.12 215.6 216.16 216.79 217.49 218.26 - 219.1 220 220.96 221.98 223.07 224.22 225.42 226.69 228.01 229.4 230.84 232.35 233.91 235.53 237.21 238.95 - 240.74 242.59 244.5 246.47 248.5 250.58 252.72 254.92 / - 4 10 5 1 213.91 212.1 211.57 211.46 211.56 211.81 212.17 212.64 213.2 213.83 214.54 215.33 - 216.18 217.1 218.09 219.14 220.26 221.44 222.68 223.99 225.36 226.79 228.28 229.83 231.43 233.1 234.82 236.61 - 238.45 240.36 242.32 244.34 246.42 248.55 250.75 253 / - 4 10 6 1 209.33 204.93 204.06 203.83 203.87 204.09 204.46 204.95 205.54 206.22 206.99 207.85 - 208.78 209.79 210.87 212.03 213.21 214.5 215.86 217.28 218.78 220.34 221.96 223.64 225.39 227.21 229.08 231.01 - 233.01 235.07 237.19 239.36 241.6 243.89 246.25 248.66 / - 4 10 7 1 196.61 189.04 187.81 187.38 187.36 187.61 188.06 188.67 189.42 190.3 191.3 192.4 - 193.6 194.89 196.27 197.71 199.25 200.88 202.58 204.36 206.21 208.1 210.09 212.14 214.26 216.42 218.66 220.97 - 223.34 225.75 228.23 230.77 233.36 236.01 238.73 241.49 / - 4 10 8 1 168.97 158.11 156.51 156.08 156.31 156.91 157.79 158.9 160.2 161.67 163.3 165.03 - 166.92 168.92 171.02 173.19 175.49 177.87 180.29 183.15 185.74 188.42 191.17 193.94 196.8 199.68 202.64 205.66 - 208.69 211.8 214.95 218.13 221.38 224.65 228.66 232.04 / - 4 10 9 1 120.87 112.78 112.5 113.39 114.9 116.8 118.95 121.31 123.91 126.61 129.44 132.47 - 135.53 138.76 142 145.41 148.87 152.34 155.95 159.68 163.32 167.19 170.94 174.77 178.6 182.81 186.71 190.61 - 194.56 199.01 203.01 207.05 211.13 215.24 219.36 224.1 / - 4 10 10 1 74.69 75.63 77.9 80.68 83.73 86.97 90.31 93.81 97.42 101.15 104.99 108.87 - 112.92 117.06 121.29 125.63 130.06 134.57 138.99 143.64 148.37 152.95 157.81 162.74 167.46 172.47 177.56 182.4 - 187.59 192.5 197.8 202.78 208.18 213.23 218.58 224 / - 4 10 11 1 55.51 59.06 62.42 65.97 69.65 73.45 77.36 81.39 85.54 89.82 94.22 98.73 - 103.36 108.09 113.55 118.83 124.06 129.46 134.87 140.44 146 151.64 157.36 163.16 169.03 174.98 180.99 187.04 - 193.15 199.37 205.66 211.63 218.02 224.49 231.02 237.16 / - 4 10 12 1 49.4 54.27 58.34 62.31 66.48 70.88 75.51 80.32 85.32 90.5 95.84 101.34 - 106.99 112.76 118.6 124.56 130.63 136.81 143.11 149.51 156.03 162.64 169.35 176.35 184.06 191.97 199.48 207.01 - 214.76 222.39 230.18 237.85 245.59 253.41 261.31 269.29 / - 4 10 13 1 44.25 50.44 55.88 61.14 66.54 72.18 78.09 84.33 90.85 97.64 104.65 111.87 - 119.28 126.88 134.65 142.58 150.68 158.91 167.21 175.67 184.21 192.78 201.42 210.15 218.99 227.93 236.97 246.12 - 255.38 264.74 274.21 283.77 294.17 305.06 316 326.85 / - 4 10 14 1 40.44 47.55 55.91 64.5 73.2 81.43 90.48 99.43 108.01 117.62 127.36 137.59 - 148.03 158.2 168.21 179.21 190.41 201.81 213.4 225.2 237.2 249.41 260.75 273.33 286.04 298.84 311.75 324.79 - 337.99 351.36 364.89 378.59 392.47 406.52 420.75 435.16 / - 4 10 15 1 37.62 51.52 65.08 78.01 90.76 103.55 116.46 129.36 143.64 156.56 171.47 186.66 - 200.06 215.52 231.42 247.35 264.05 280.22 297.52 315.03 332.08 350.38 369.03 388.06 407.47 426.37 446.82 466.44 - 487.11 508.08 529.36 550.98 572.96 595.3 618.02 641.14 / - 4 10 16 1 44.85 65.94 86.81 106.54 125.75 145.23 165.25 186.02 207 228.31 251.87 273.88 - 298.42 323.77 348.91 373.53 400.76 428.2 456.46 485.45 514.29 544.75 575.92 607.42 639.1 672.1 705.97 740.77 - 776.51 813.09 849.95 886.77 925.36 965.26 1007.42 1049.56 / - 4 10 17 1 61.82 93.57 125.74 157.08 188.16 219.89 253.11 287.57 323.55 360.86 399.28 440.75 - 481.81 526.36 572.3 619.18 665.29 715.27 767.17 820.58 876.04 932.81 992.01 1052.53 1113.57 1176.18 1239.5 1300.67 - 1359.63 1420.04 1480.94 1543.83 1607.99 1671.92 1740.14 1805.6 / - 4 10 18 1 89.14 140.99 190.55 243.25 297.53 354.32 414.4 477.77 544.8 615.63 689.67 767.76 - 850.1 936.89 1027.7 1121.92 1218.23 1313.01 1402.6 1494.41 1590.66 1689.44 1788.58 1892.46 1997.23 2104.84 2213.03 2325.81 - 2439.75 2551.4 2668 2786.92 2906.85 3028.17 3152.47 3282.31 / - 4 10 19 1 133.18 212.38 294.41 388.89 490.93 601.45 720.68 849.32 989.16 1136.52 1289.53 1436.69 - 1592.83 1748.95 1912.9 2092.21 2266.66 2448.04 2648.68 2840.52 3042.75 3244.44 3457.92 3677.41 3905.77 4136.18 4368.67 4611.92 - 4866.91 5114.8 5381.07 5639.17 5911.36 6192.21 6462.26 6748.91 / - 4 10 20 1 202.7 326.34 452.63 632.68 838.78 1078.69 1329.82 1582.77 1858.12 2146.59 2448.66 2770.42 - 3110.07 3473.61 3828.03 4203.5 4622.08 5029.24 5446.8 5929.4 6388.07 6851.69 7339.65 7847.26 8362.99 8904.52 9459.72 10010.99 - 10592.89 11200.5 11816.42 12462.22 13113.83 13785.09 14462.12 15167.86 / - 4 11 1 1 218.53 217.55 217.27 217.28 217.46 217.76 218.16 218.65 219.21 219.85 220.55 221.32 - 222.15 223.05 224.01 225.03 226.11 227.25 228.45 229.71 231.03 232.41 233.84 235.34 236.89 238.5 240.17 241.9 - 243.68 245.53 247.43 249.38 251.4 253.47 255.6 257.78 / - 4 11 2 1 218.42 217.42 217.13 217.13 217.31 217.61 218.01 218.49 219.05 219.69 220.39 221.16 - 221.99 222.89 223.85 224.87 225.95 227.09 228.29 229.55 230.87 232.25 233.69 235.18 236.74 238.35 240.02 241.75 - 243.53 245.38 247.28 249.23 251.25 253.32 255.45 257.64 / - 4 11 3 1 218.2 217.17 216.86 216.86 217.03 217.33 217.72 218.2 218.76 219.4 220.1 220.87 - 221.7 222.6 223.56 224.58 225.66 226.8 228 229.26 230.58 231.96 233.4 234.9 236.45 238.07 239.74 241.47 - 243.26 245.1 247.01 248.97 250.99 253.06 255.2 257.39 / - 4 11 4 1 217.6 216.43 216.05 215.99 216.13 216.4 216.78 217.25 217.8 218.42 219.12 219.89 - 220.72 221.62 222.58 223.6 224.69 225.83 227.04 228.31 229.64 231.03 232.47 233.98 235.55 237.17 238.86 240.6 - 242.4 244.26 246.17 248.15 250.18 252.28 254.42 256.63 / - 4 11 5 1 215.66 213.59 213 212.84 212.91 213.13 213.48 213.93 214.48 215.11 215.81 216.6 - 217.45 218.37 219.36 220.41 221.53 222.72 223.96 225.27 226.64 228.08 229.57 231.13 232.75 234.43 236.17 237.96 - 239.82 241.74 243.72 245.76 247.85 250.01 252.22 254.5 / - 4 11 6 1 210.78 205.97 204.97 204.67 204.67 204.87 205.22 205.7 206.28 206.96 207.73 208.59 - 209.53 210.54 211.63 212.8 214.04 215.34 216.72 218.16 219.67 221.25 222.89 224.59 226.37 228.2 230.05 232.01 - 234.03 236.11 238.25 240.45 242.72 245.04 247.42 249.86 / - 4 11 7 1 197.59 189.29 187.96 187.5 187.42 187.67 188.12 188.75 189.51 190.41 191.42 192.53 - 193.75 195.07 196.48 197.95 199.52 201.18 202.91 204.73 206.61 208.54 210.56 212.65 214.81 217.03 219.29 221.64 - 224.05 226.51 229.03 231.61 234.25 236.95 239.69 242.51 / - 4 11 8 1 169 157.41 156.09 155.65 155.89 156.5 157.39 158.53 159.86 161.34 162.99 164.78 - 166.7 168.71 170.85 173.09 175.38 177.8 180.3 182.84 185.82 188.51 191.3 194.16 197.04 200.01 202.99 206.06 - 209.18 212.32 215.54 218.78 222.08 225.43 228.81 232.95 / - 4 11 9 1 121.05 112.76 112.52 113.42 114.96 116.87 119.05 121.42 123.98 126.76 129.61 132.67 - 135.75 138.92 142.27 145.71 149.13 152.7 156.33 159.95 163.77 167.51 171.46 175.3 179.18 183.49 187.49 191.48 - 195.5 199.53 204.08 208.19 212.33 216.5 220.7 224.93 / - 4 11 10 1 74.8 75.93 78.16 80.97 84.07 87.3 90.7 94.22 97.85 101.61 105.41 109.38 - 113.46 117.63 121.89 126.26 130.58 135.1 139.72 144.41 149.18 153.79 158.69 163.67 168.42 173.49 178.32 183.5 - 188.74 193.7 199.05 204.08 209.54 214.64 220.05 225.22 / - 4 11 11 1 55.7 59.34 62.72 66.3 70.01 73.83 77.77 81.83 86.01 90.32 94.74 99.29 - 103.94 108.71 114.07 119.47 124.81 130.17 135.7 141.16 146.92 152.6 158.37 164.22 170.14 176.13 182.2 188.31 - 194.48 200.75 206.74 213.13 219.58 226.11 232.27 238.91 / - 4 11 12 1 49.5 54.49 58.62 62.62 66.82 71.25 75.9 80.74 85.78 90.98 96.36 101.89 - 107.58 113.39 119.27 125.26 131.37 137.59 143.93 150.38 156.93 163.58 170.34 177.18 184.95 192.79 200.56 208.31 - 215.95 223.61 231.36 239.07 246.86 254.74 262.69 270.73 / - 4 11 13 1 44.32 50.6 56.1 61.41 66.85 72.52 78.46 84.73 91.29 98.11 105.15 112.41 - 119.86 127.49 135.29 143.27 151.4 159.67 168.03 176.52 185.11 193.73 202.42 211.2 220.08 229.07 238.17 247.37 - 256.69 266.1 275.63 285.26 294.99 305.96 317.07 328.18 / - 4 11 14 1 40.48 47.66 56.07 64.7 73.45 81.72 90.8 99.34 108.4 118.12 127.82 138.07 - 148.55 158.86 168.83 179.87 191.1 202.54 214.17 226 238.04 250.28 261.66 274.29 287.08 299.95 312.93 326.05 - 339.31 352.74 366.34 380.11 394.06 408.18 422.48 436.97 / - 4 11 15 1 37.62 51.57 65.16 78.14 91.21 103.76 116.71 129.64 143.94 156.89 171.86 187.08 - 200.35 216 231.93 247.9 264.63 280.85 298.2 315.75 332.84 351.17 369.84 388.89 408.31 427.22 446.96 467.39 - 488.15 509.21 530.58 552.27 574.31 596.72 619.49 642.67 / - 4 11 16 1 44.9 65.91 86.82 106.6 125.85 145.35 165.4 186.19 207.19 228.51 252.07 274.09 - 298.66 324.02 348.14 373.86 401.09 428.61 456.85 485.86 514.72 545.17 576.32 607.4 639.46 672.39 706.16 740.84 - 776.44 812.94 849.33 886.82 925.46 964.73 1005.72 1048.11 / - 4 11 17 1 61.71 93.55 125.67 157.06 188.19 219.94 253.15 287.61 323.58 360.84 399.21 440.61 - 481.63 526.12 572.06 618.93 664.97 714.79 766.51 819.77 874.95 931.79 990.45 1051.02 1112.21 1174.34 1237.67 1300.04 - 1353.5 1410.93 1468.32 1527.4 1588.19 1650.63 1713.35 1773.85 / - 4 11 18 1 88.96 140.82 190.37 243.19 297.55 354.41 414.37 477.7 544.57 615.22 689.12 766.95 - 848.95 935.37 1025.8 1119.71 1215.93 1311.43 1401.63 1494.05 1590.76 1690.28 1790.24 1894.91 2000.47 2108.96 2218.05 2332.3 - 2448.22 2562.37 2681.91 2804.08 2927.19 3051.56 3179.05 3311.73 / - 4 11 19 1 132.96 212.22 293.75 387.95 490.89 601.38 718.36 848.41 985.67 1134.87 1287.97 1435.85 - 1586.42 1749.77 1914.73 2095.12 2270.76 2453.52 2640.66 2849.05 3052.85 3256.45 3470.21 3692.37 3920.77 4153.23 4390.86 4636.19 - 4889.87 5143.76 5408.5 5673.28 5949.01 6230.06 6510.2 6803.31 / - 4 11 20 1 202.49 326.45 452.93 626.85 833.49 1071.52 1322.04 1583.41 1855.87 2142.2 2454.53 2778.53 - 3120.98 3461.48 3844.58 4223.02 4645.19 5055.67 5477.01 5920.81 6426.37 6894.15 7386.21 7893.21 8413.64 8956.82 9516.86 10081.68 - 10658.33 11270.28 11902.46 12542.23 13211.55 13889.28 14559.28 15290.05 / - 4 12 1 1 220.53 219.48 219.16 219.14 219.31 219.6 219.99 220.47 221.03 221.65 222.35 223.12 - 223.95 224.84 225.8 226.82 227.9 229.04 230.24 231.5 232.82 234.2 235.63 237.13 238.68 240.3 241.97 243.7 - 245.48 247.33 249.23 251.19 253.21 255.29 257.42 259.61 / - 4 12 2 1 220.41 219.34 219.01 218.99 219.15 219.44 219.83 220.31 220.86 221.49 222.19 222.95 - 223.78 224.68 225.63 226.65 227.73 228.87 230.07 231.33 232.65 234.03 235.47 236.96 238.52 240.13 241.81 243.54 - 245.32 247.17 249.08 251.04 253.06 255.14 257.27 259.46 / - 4 12 3 1 220.19 219.08 218.74 218.71 218.87 219.15 219.54 220.01 220.57 221.19 221.89 222.65 - 223.48 224.38 225.33 226.35 227.43 228.57 229.77 231.03 232.35 233.73 235.17 236.67 238.23 239.84 241.52 243.25 - 245.04 246.89 248.8 250.76 252.79 254.87 257 259.2 / - 4 12 4 1 219.49 218.19 217.73 217.63 217.74 217.99 218.35 218.8 219.34 219.96 220.66 221.42 - 222.25 223.14 224.1 225.13 226.22 227.37 228.58 229.85 231.18 232.58 234.03 235.54 237.12 238.75 240.44 242.19 - 244 245.87 247.8 249.79 251.83 253.93 256.1 258.32 / - 4 12 5 1 217.32 214.99 214.19 214.01 214.08 214.3 214.65 215.1 215.65 216.28 216.99 217.77 - 218.63 219.56 220.55 221.61 222.74 223.93 225.18 226.5 227.88 229.33 230.83 232.4 234.03 235.73 237.48 239.29 - 241.16 243.1 245.05 247.11 249.22 251.4 253.63 255.92 / - 4 12 6 1 212.12 206.67 205.64 205.31 205.3 205.49 205.84 206.31 206.9 207.58 208.36 209.23 - 210.18 211.2 212.31 213.49 214.71 216.02 217.41 218.87 220.4 221.99 223.66 225.38 227.18 229.04 230.96 232.94 - 234.98 237.09 239.26 241.49 243.78 246.13 248.51 250.98 / - 4 12 7 1 197.46 189.38 187.89 187.41 187.35 187.59 188.04 188.67 189.45 190.36 191.37 192.51 - 193.75 195.1 196.53 198.06 199.67 201.33 203.11 204.95 206.88 208.87 210.91 213.04 215.24 217.51 219.84 222.21 - 224.66 227.17 229.75 232.36 235.05 237.8 240.6 243.45 / - 4 12 8 1 169.37 156.96 155.55 155.15 155.42 156.06 156.99 158.14 159.5 161.03 162.71 164.51 - 166.46 168.53 170.67 172.95 175.32 177.75 180.3 182.92 185.57 188.69 191.49 194.39 197.34 200.31 203.37 206.47 - 209.61 212.83 216.07 219.39 222.74 226.15 229.6 233.08 / - 4 12 9 1 120.52 112.76 112.48 113.46 115.01 116.96 119.15 121.54 124.12 126.92 129.79 132.78 - 135.97 139.17 142.54 145.91 149.46 153.05 156.64 160.37 164.23 168 171.81 175.86 179.78 183.74 188.13 192.19 - 196.32 200.48 204.64 209.3 213.51 217.75 222.03 226.33 / - 4 12 10 1 75.05 76.23 78.48 81.3 84.41 87.66 91.09 94.63 98.29 102.01 105.9 109.9 - 114 118.2 122.49 126.76 131.23 135.8 140.44 145.17 149.77 154.63 159.57 164.32 169.38 174.5 179.38 184.6 - 189.56 194.9 199.93 205.38 210.49 216.05 221.23 226.74 / - 4 12 11 1 55.92 59.63 63.04 66.64 70.37 74.22 78.19 82.28 86.49 90.82 95.28 99.85 - 104.54 109.34 114.57 120.11 125.46 130.91 136.43 142.03 147.66 153.38 159.38 165.27 171.24 177.29 183.14 189.31 - 195.52 201.79 208.17 214.62 221.15 227.32 233.96 240.67 / - 4 12 12 1 49.65 54.72 58.9 62.94 67.16 71.62 76.3 81.17 86.24 91.48 96.88 102.45 - 108.17 114.02 119.94 125.96 132.11 138.37 144.75 151.24 157.83 164.53 171.32 178.21 185.61 193.75 201.63 209.39 - 217.14 224.83 232.62 240.63 248.49 256.44 264.47 272.59 / - 4 12 13 1 44.42 50.77 56.33 61.68 67.16 72.87 78.84 85.14 91.73 98.58 105.66 112.95 - 120.43 128.09 135.93 143.94 152.11 160.41 168.81 177.35 185.99 194.66 203.4 212.23 221.16 230.2 239.34 248.6 - 257.97 267.44 277.02 286.71 296.5 306.39 317.57 328.89 / - 4 12 14 1 40.55 47.79 56.24 64.91 73.7 82.01 91.12 99.7 108.8 118.52 128.27 138.55 - 149.06 159.4 169.42 180.5 191.77 203.24 214.91 226.77 238.84 251.11 262.52 275.19 288.04 300.99 314.05 327.23 - 340.57 354.07 367.73 381.57 395.58 409.77 424.14 438.7 / - 4 12 15 1 37.63 51.61 65.25 78.28 91.45 103.98 116.96 129.91 144.23 157.21 172.2 187.47 - 201.33 216.46 232.41 248.4 265.15 281.4 298.81 316.4 333.53 351.87 370.56 389.63 409.05 428.49 448.47 468.16 - 489 510.15 531.6 553.38 575.49 597.95 620.79 644.01 / - 4 12 16 1 44.89 65.87 86.84 106.65 125.93 145.45 165.52 186.34 207.35 228.67 252.23 274.24 - 298.84 324.2 348.33 374.1 401.34 429 457.1 486.15 515.02 545.46 576.58 608.08 639.67 672.55 706.23 740.79 - 776.27 812.63 849.51 886.45 925.19 964.52 1004.89 1046.08 / - 4 12 17 1 61.59 93.45 125.69 157.02 188.2 220.32 253.17 287.58 323.54 360.76 399.07 440.38 - 482.63 525.77 571.67 618.55 664.54 714.24 765.78 818.95 873.76 930.5 988.72 1049.05 1110.4 1172.79 1235.4 1298.78 - 1353.29 1412.02 1469.94 1530.3 1591.51 1655.82 1719.53 1781.08 / - 4 12 18 1 88.79 140.66 190.26 243.1 297.53 354.4 414.29 477.57 544.28 614.74 688.51 766.13 - 847.79 933.31 1023.8 1117.34 1213.48 1309.27 1400.06 1493.07 1590.37 1690.61 1791.35 1896.84 2003.28 2111.73 2222.77 2338.23 - 2455.35 2570.43 2691.14 2814.66 2939.85 3066.85 3198.79 3333.48 / - 4 12 19 1 132.74 212.09 293.33 387.93 489.63 599.74 718.03 846.07 984.45 1133.15 1286.38 1434.99 - 1586.4 1750.7 1916.69 2098.17 2275.26 2459.43 2648.14 2858.13 3063.71 3269.33 3484.91 3707.56 3938.73 4174.39 4414.48 4659.31 - 4918.21 5171.04 5442.07 5705.6 5988.54 6272.43 6555.53 6851.77 / - 4 12 20 1 202.31 326.65 453.55 620.68 829.06 1064.53 1315.16 1575.41 1851.4 2146.5 2443.96 2787.56 - 3114.18 3476.36 3862.5 4244.27 4635.33 5084.45 5509.68 5957.52 6412.06 6940.13 7436.64 7948.42 8468.71 9016.69 9579.31 10160.56 - 10739.75 11357.18 11983.66 12640.99 13304.94 14001.6 14678.91 15400.69 / - 4 13 1 1 222.46 221.36 221.02 220.99 221.14 221.42 221.8 222.28 222.83 223.45 224.15 224.91 - 225.74 226.63 227.58 228.6 229.68 230.81 232.01 233.27 234.59 235.97 237.41 238.9 240.46 242.07 243.75 245.48 - 247.27 249.12 251.02 252.99 255.01 257.09 259.23 261.42 / - 4 13 2 1 222.34 221.22 220.86 220.83 220.98 221.26 221.64 222.11 222.66 223.28 223.97 224.74 - 225.56 226.45 227.41 228.42 229.5 230.64 231.84 233.1 234.42 235.8 237.24 238.73 240.29 241.9 243.58 245.31 - 247.1 248.95 250.86 252.82 254.85 256.93 259.07 261.27 / - 4 13 3 1 222.1 220.93 220.55 220.5 220.63 220.9 221.28 221.74 222.29 222.91 223.6 224.36 - 225.19 226.08 227.03 228.05 229.13 230.27 231.47 232.73 234.05 235.43 236.87 238.37 239.93 241.55 243.22 244.96 - 246.75 248.6 250.52 252.49 254.51 256.6 258.75 260.95 / - 4 13 4 1 221.25 219.85 219.34 219.2 219.25 219.5 219.85 220.3 220.84 221.46 222.15 222.91 - 223.74 224.64 225.6 226.62 227.71 228.86 230.07 231.35 232.68 234.08 235.54 237.06 238.63 240.27 241.97 243.72 - 245.54 247.42 249.35 251.34 253.4 255.51 257.68 259.91 / - 4 13 5 1 218.86 216.3 215.38 215.15 215.18 215.37 215.71 216.15 216.68 217.31 218.01 218.8 - 219.65 220.58 221.58 222.65 223.78 224.98 226.24 227.57 228.96 230.42 231.94 233.52 235.16 236.86 238.63 240.46 - 242.35 244.3 246.31 248.38 250.51 252.7 254.95 257.26 / - 4 13 6 1 213.31 207.44 206.26 205.87 205.81 205.97 206.3 206.76 207.34 208.02 208.8 209.68 - 210.63 211.67 212.79 213.98 215.25 216.58 218 219.48 221.03 222.65 224.34 226.09 227.91 229.79 231.74 233.71 - 235.79 237.92 240.12 242.38 244.7 247.09 249.53 252.03 / - 4 13 7 1 198.15 189.32 187.71 187.18 187.1 187.32 187.77 188.4 189.19 190.11 191.16 192.33 - 193.6 194.95 196.41 197.97 199.62 201.35 203.16 205.02 206.98 209.02 211.14 213.29 215.53 217.85 220.23 222.67 - 225.15 227.71 230.34 233.02 235.75 238.55 241.4 244.31 / - 4 13 8 1 169.27 156.33 155.01 154.64 154.94 155.61 156.57 157.76 159.14 160.71 162.4 164.26 - 166.25 168.32 170.54 172.86 175.24 177.75 180.34 182.96 185.7 188.47 191.34 194.69 197.65 200.72 203.8 206.97 - 210.19 213.42 216.74 220.07 223.48 226.93 230.4 233.95 / - 4 13 9 1 120.65 112.75 112.5 113.46 115.03 116.99 119.2 121.66 124.26 127.01 129.97 132.98 - 136.09 139.42 142.73 146.22 149.8 153.34 157.04 160.8 164.54 168.49 172.34 176.43 180.39 184.39 188.83 192.92 - 197.06 201.24 205.46 210.28 214.62 218.96 223.32 227.7 / - 4 13 10 1 75.32 76.54 78.8 81.63 84.73 88.04 91.48 95.01 98.68 102.48 106.39 110.41 - 114.54 118.68 122.98 127.39 131.89 136.49 141.17 145.74 150.57 155.47 160.21 165.24 170.35 175.23 180.43 185.7 - 190.71 196.1 201.18 206.69 211.85 217.47 222.71 228.28 / - 4 13 11 1 56.17 59.94 63.38 67 70.76 74.63 78.62 82.73 86.97 91.33 95.82 100.42 - 105.13 109.96 115.06 120.69 126.12 131.66 137.17 142.9 148.57 154.33 160.17 166.1 172.1 178.18 184.34 190.57 - 196.83 203.16 209.6 216.12 222.31 228.94 235.65 242.43 / - 4 13 12 1 49.81 54.97 59.2 63.27 67.52 72.01 76.71 81.62 86.71 91.98 97.41 103.01 - 108.77 114.65 120.61 126.67 132.86 139.16 145.57 152.09 158.72 165.46 172.3 179.23 186.24 194.47 202.52 210.45 - 218.25 226.05 233.87 241.83 249.75 257.75 265.84 274.01 / - 4 13 13 1 44.55 50.96 56.57 61.97 67.49 73.23 79.23 85.55 92.18 99.06 106.17 113.48 - 121 128.7 136.57 144.61 152.81 161.14 169.57 178.14 186.84 195.57 204.36 213.23 222.21 231.3 240.5 249.8 - 259.22 268.74 278.38 288.12 297.97 307.92 318.39 329.79 / - 4 13 14 1 40.63 47.92 56.41 65.13 73.96 82.31 91.45 100.06 109.19 118.99 128.71 139.02 - 149.55 159.92 169.97 181.08 192.4 203.91 215.6 227.5 239.59 250.86 263.33 276.01 288.91 301.94 315.08 328.34 - 341.74 355.3 369.03 382.93 397.01 411.27 425.71 440.34 / - 4 13 15 1 37.65 51.66 65.34 78.41 91.63 104.19 117.2 130.17 144.51 157.51 172.52 187.81 - 201.72 216.87 232.84 248.92 265.61 281.88 299.29 316.93 334.11 352.46 371.17 390.24 409.66 429.31 448.44 468.72 - 489.58 510.82 532.36 554.22 576.41 598.94 621.83 645.09 / - 4 13 16 1 44.83 65.84 86.97 106.7 126.01 145.55 165.63 186.45 207.48 228.8 252.34 274.35 - 298.92 324.3 350 374.22 401.46 429.1 457.17 486.25 515.12 545.55 576.65 608.35 639.68 672.51 706.12 740.59 - 775.95 812.18 848.91 885.92 924.52 964.05 1004.57 1045.16 / - 4 13 17 1 61.47 93.33 125.61 156.96 188.16 220.31 253.13 287.48 323.41 360.59 399.69 440.05 - 481.52 525.26 571.09 617.98 663.94 713.56 764.96 817.96 872.56 929.06 987.02 1047.09 1108.26 1171.17 1234.45 1295.85 - 1352.42 1411.76 1472.82 1532.76 1596.67 1659.86 1724.23 1788.31 / - 4 13 18 1 88.62 140.5 190.11 243 297.42 354.32 414.15 477.28 543.87 614.13 687.76 765.26 - 846.69 931.86 1021.93 1115.11 1211.27 1307.09 1398.47 1492.12 1590.01 1690.65 1792.45 1897.94 2006.04 2115.43 2227.52 2343.86 - 2462.1 2578.63 2700.58 2825.33 2951.83 3080.22 3215.66 3349.63 / - 4 13 19 1 132.53 211.99 292.56 387.04 489.57 599.72 717.75 843.76 981.47 1127.61 1284.89 1429.67 - 1586.56 1753.31 1918.92 2090.66 2280.17 2465.85 2656.34 2868.14 3075.36 3283.28 3500.95 3724.07 3958.27 4194.49 4441.17 4690.91 - 4948.73 5205.09 5478.18 5745.25 6031.18 6317.93 6599.66 6904.48 / - 4 13 20 1 202.16 326.98 454.57 613.4 821.11 1051.83 1307.17 1569.24 1849.53 2140.47 2451.36 2777.77 - 3127 3492.63 3857.87 4267.39 4662.58 5116.08 5545.6 5997.43 6457.12 6990.46 7492.33 8008.42 8529.24 9082.43 9651.43 10232.66 - 10818.16 11440.85 12072.82 12736.19 13420.19 14108.15 14803.91 15537.99 / - 4 14 1 1 224.32 223.2 222.84 222.8 222.95 223.22 223.6 224.07 224.61 225.23 225.92 226.68 - 227.51 228.4 229.35 230.36 231.44 232.58 233.77 235.03 236.35 237.73 239.17 240.66 242.22 243.84 245.51 247.24 - 249.04 250.89 252.8 254.76 256.79 258.87 261.02 263.22 / - 4 14 2 1 224.2 223.06 222.69 222.64 222.78 223.05 223.43 223.89 224.44 225.06 225.75 226.5 - 227.33 228.22 229.17 230.18 231.26 232.4 233.59 234.85 236.17 237.55 238.99 240.49 242.04 243.66 245.34 247.07 - 248.86 250.72 252.63 254.6 256.62 258.71 260.85 263.06 / - 4 14 3 1 223.91 222.69 222.28 222.21 222.33 222.59 222.95 223.41 223.95 224.56 225.25 226.01 - 226.83 227.72 228.67 229.68 230.76 231.9 233.1 234.36 235.68 237.06 238.5 240.01 241.57 243.19 244.87 246.61 - 248.41 250.26 252.18 254.16 256.19 258.28 260.43 262.64 / - 4 14 4 1 222.89 221.39 220.73 220.58 220.65 220.88 221.22 221.66 222.19 222.8 223.48 224.24 - 225.07 225.96 226.92 227.95 229.04 230.19 231.41 232.69 234.03 235.43 236.9 238.42 240.01 241.65 243.36 245.13 - 246.95 248.84 250.79 252.79 254.86 256.98 259.17 261.41 / - 4 14 5 1 220.24 217.19 216.3 216.06 216.07 216.27 216.6 217.04 217.57 218.2 218.91 219.7 - 220.56 221.49 222.5 223.57 224.72 225.88 227.15 228.49 229.9 231.37 232.9 234.49 236.15 237.88 239.66 241.51 - 243.41 245.38 247.41 249.51 251.66 253.87 256.14 258.47 / - 4 14 6 1 214.33 207.8 206.58 206.15 206.07 206.22 206.54 207.01 207.59 208.28 209.07 209.95 - 210.92 211.98 213.11 214.32 215.61 216.97 218.41 219.92 221.5 223.14 224.81 226.59 228.44 230.36 232.34 234.38 - 236.49 238.66 240.89 243.19 245.55 247.97 250.45 252.98 / - 4 14 7 1 198.67 188.92 187.26 186.7 186.6 186.82 187.28 187.92 188.73 189.66 190.73 191.92 - 193.22 194.62 196.12 197.72 199.37 201.14 203 204.93 206.95 209 211.16 213.39 215.69 218.03 220.46 222.96 - 225.52 228.12 230.8 233.54 236.34 239.19 242.1 245.07 / - 4 14 8 1 169.5 155.68 154.28 154.09 154.43 155.14 156.14 157.27 158.69 160.27 162.12 164.01 - 166.02 168.16 170.4 172.76 175.19 177.74 180.38 183.05 185.84 188.66 191.59 194.53 198.01 201.14 204.28 207.51 - 210.76 214.09 217.48 220.87 224.35 227.85 231.41 235.03 / - 4 14 9 1 120.16 112.67 112.53 113.51 115.1 117.09 119.31 121.73 124.41 127.18 130.08 133.19 - 136.33 139.68 143.01 146.53 150.03 153.71 157.44 161.15 165.01 169 172.88 176.82 181 185.05 189.13 193.67 - 197.85 202.08 206.34 210.65 215.52 219.91 224.36 228.92 / - 4 14 10 1 75.59 76.85 79.14 81.99 85.1 88.43 91.86 95.44 99.14 102.95 106.89 110.86 - 115 119.25 123.58 128.02 132.55 137.18 141.72 146.5 151.36 156.31 161.08 166.16 171.31 176.23 181.48 186.49 - 191.86 196.95 202.44 208 213.21 218.47 224.19 229.82 / - 4 14 11 1 56.43 60.27 63.73 67.38 71.16 75.06 79.07 83.21 87.47 91.86 96.37 101 - 105.74 110.6 115.56 121.32 126.86 132.34 137.99 143.65 149.48 155.28 161.17 167.14 173.19 179.32 185.53 191.82 - 198.14 204.53 211.03 217.23 223.86 230.55 237.33 243.71 / - 4 14 12 1 50.01 55.24 59.52 63.63 67.9 72.41 77.15 82.08 87.2 92.49 97.96 103.59 - 109.37 115.29 121.29 127.39 133.61 139.94 146.39 152.95 159.62 166.39 173.26 180.23 187.29 195.12 203.28 211.37 - 219.35 227.25 235.12 243.12 251.35 259.42 267.59 275.84 / - 4 14 13 1 44.7 51.18 56.84 62.28 67.83 73.6 79.63 85.98 92.63 99.54 106.68 114.02 - 121.57 129.29 137.19 145.26 153.49 161.84 170.3 178.9 187.64 196.44 205.29 214.21 223.24 232.37 241.61 250.96 - 260.43 270 279.69 289.49 299.39 309.4 319.51 329.72 / - 4 14 14 1 40.74 48.08 56.61 65.37 74.23 82.61 91.78 100.86 109.58 119.4 129.15 139.48 - 150.03 160.42 170.5 181.63 192.96 204.5 216.24 228.16 240.28 251.57 264.05 276.75 289.66 302.76 315.98 329.32 - 342.79 356.42 370.21 384.18 398.32 412.64 427.14 441.83 / - 4 14 15 1 37.67 51.72 65.44 78.56 91.8 104.41 117.43 130.43 144.77 157.79 172.8 188.11 - 201.66 217.22 233.33 249.32 265.99 282.25 299.66 317.28 334.58 352.87 371.6 390.66 410.08 429.71 448.81 469.06 - 489.87 511.08 532.68 554.63 576.9 599.51 622.46 645.77 / - 4 14 16 1 44.7 65.81 87.05 106.75 126.09 145.63 165.71 186.53 207.56 228.88 252.4 274.38 - 298.92 324.27 349.56 374.17 401.43 429.03 457.06 486.1 514.89 545.32 576.4 608.12 639.38 672.17 705.7 740.08 - 775.31 811.4 847.98 885.04 923.18 962.62 1003.33 1044.19 / - 4 14 17 1 61.36 93.22 125.53 156.9 188.08 220.23 253.02 287.29 323.15 360.3 399.71 439.56 - 482.15 524.5 570.24 617.13 663.35 712.64 763.91 816.73 871.2 927.36 985.04 1044.83 1105.92 1168.72 1232.16 1293.98 - 1353.14 1411.23 1473.15 1535.99 1599.2 1663.76 1729.6 1795.47 / - 4 14 18 1 88.46 140.37 189.86 242.87 297.23 354.1 413.86 476.82 543.23 613.3 686.7 763.92 - 845.36 930.24 1019.86 1112.91 1208.85 1303.22 1396.57 1492.22 1589.49 1690.8 1793.33 1899.75 2008.78 2119.2 2235.62 2349.76 - 2469.02 2588.46 2710.32 2835.52 2964.45 3096.66 3230.86 3366.46 / - 4 14 19 1 132.34 211.96 292.27 386.2 488.25 598.04 715.57 843 980.21 1126.3 1279.41 1428.84 - 1586.7 1747.04 1921.36 2094.53 2285.47 2472.85 2665.22 2866.7 3088.07 3298.38 3518.36 3743.91 3978.69 4218.5 4468.73 4719.37 - 4978.91 5241.66 5514.12 5788.54 6072.95 6367.42 6653.9 6956.27 / - 4 14 20 1 202.06 327.47 455.91 607.53 813.6 1041.6 1300.85 1561.37 1841.61 2132.83 2452.92 2789.2 - 3141.47 3488.86 3879.55 4293.33 4692.64 5112.21 5585.53 6041.83 6506.98 6994.27 7553.13 8074.69 8602.13 9156 9729.58 10315.88 - 10905.3 11533.66 12183.47 12842.41 13532.58 14228.52 14945.64 15672.63 / - 4 15 1 1 226.08 224.99 224.63 224.59 224.73 225 225.37 225.84 226.38 227 227.68 228.44 - 229.26 230.15 231.1 232.11 233.18 234.32 235.52 236.77 238.09 239.47 240.91 242.41 243.96 245.58 247.26 248.99 - 250.79 252.64 254.55 256.52 258.55 260.64 262.79 264.99 / - 4 15 2 1 225.96 224.84 224.47 224.42 224.56 224.82 225.2 225.66 226.2 226.81 227.5 228.25 - 229.08 229.96 230.91 231.92 233 234.13 235.33 236.59 237.91 239.28 240.72 242.22 243.78 245.4 247.07 248.81 - 250.61 252.46 254.37 256.35 258.38 260.47 262.62 264.82 / - 4 15 3 1 225.58 224.36 223.93 223.84 223.94 224.19 224.55 225 225.53 226.14 226.82 227.57 - 228.39 229.28 230.23 231.24 232.32 233.46 234.66 235.93 237.25 238.63 240.08 241.58 243.15 244.77 246.45 248.2 - 250 251.86 253.79 255.77 257.81 259.91 262.07 264.28 / - 4 15 4 1 224.37 222.8 222.07 221.88 221.89 222.1 222.44 222.87 223.4 224.01 224.69 225.45 - 226.28 227.18 228.14 229.17 230.27 231.43 232.65 233.94 235.29 236.7 238.17 239.68 241.27 242.93 244.64 246.42 - 248.26 250.16 252.12 254.14 256.22 258.35 260.55 262.81 / - 4 15 5 1 221.44 218.15 217.14 216.84 216.82 216.99 217.3 217.72 218.25 218.87 219.58 220.37 - 221.23 222.17 223.18 224.27 225.42 226.64 227.93 229.28 230.7 232.18 233.73 235.35 237.03 238.77 240.57 242.44 - 244.37 246.36 248.41 250.53 252.7 254.94 257.2 259.56 / - 4 15 6 1 214.59 208.16 206.65 206.19 206.09 206.23 206.55 207.01 207.6 208.3 209.1 210 - 210.96 212.03 213.19 214.42 215.73 217.12 218.58 220.12 221.73 223.41 225.13 226.95 228.83 230.78 232.8 234.88 - 237.03 239.24 241.52 243.86 246.22 248.68 251.2 253.79 / - 4 15 7 1 199 188.46 186.68 186.01 185.9 186.12 186.58 187.23 188.05 189.01 190.1 191.32 - 192.65 194.08 195.59 197.23 198.95 200.77 202.67 204.62 206.68 208.82 211.03 213.28 215.64 218.07 220.56 223.09 - 225.71 228.39 231.14 233.92 236.79 239.71 242.69 245.72 / - 4 15 8 1 169.04 154.95 153.56 153.46 153.88 154.65 155.61 156.87 158.32 159.94 161.7 163.62 - 165.66 167.98 170.27 172.66 175.17 177.75 180.41 183.14 185.98 188.85 191.83 194.88 197.94 201.56 204.76 208.06 - 211.37 214.77 218.19 221.69 225.24 228.81 232.45 236.12 / - 4 15 9 1 119.64 112.67 112.56 113.58 115.19 117.19 119.43 121.88 124.57 127.36 130.28 133.41 - 136.57 139.83 143.3 146.75 150.37 153.97 157.76 161.58 165.48 169.34 173.43 177.41 181.63 185.71 189.84 194.43 - 198.65 202.92 207.24 211.59 216.52 220.96 225.45 229.98 / - 4 15 10 1 75.88 77.12 79.5 82.36 85.5 88.85 92.29 95.89 99.61 103.45 107.34 111.39 - 115.56 119.83 124.19 128.65 133.08 137.72 142.45 147.26 152.16 156.92 161.96 167.08 171.99 177.24 182.54 187.59 - 193.01 198.15 203.69 208.92 214.58 219.88 225.67 231.05 / - 4 15 11 1 56.73 60.63 64.12 67.8 71.61 75.53 79.57 83.73 88.01 92.42 96.95 101.6 - 106.37 111.25 116.24 121.87 127.48 133.03 138.73 144.41 150.21 156.04 161.96 168.18 174.28 180.46 186.72 192.76 - 199.16 205.59 212.09 218.7 225.4 232.17 238.56 245.46 / - 4 15 12 1 50.26 55.56 59.88 64.02 68.32 72.86 77.62 82.57 87.72 93.04 98.53 104.18 - 109.99 115.95 121.98 128.12 134.36 140.73 147.21 153.8 160.5 167.31 174.22 181.23 188.33 195.51 203.98 212.26 - 220.23 228.35 236.34 244.38 252.55 260.68 268.9 277.21 / - 4 15 13 1 44.9 51.44 57.15 62.63 68.2 74 80.05 86.43 93.1 100.03 107.2 114.57 - 122.14 129.89 137.81 145.9 154.16 162.52 171 179.62 188.4 197.26 206.17 215.14 224.21 233.39 242.68 252.07 - 261.58 271.2 280.94 290.78 300.74 310.8 320.96 331.23 / - 4 15 14 1 40.9 48.27 56.84 65.63 74.52 82.94 92.13 100.89 109.96 119.81 129.61 139.92 - 150.48 160.89 170.98 182.13 193.47 205.01 216.76 228.71 240.85 252.16 264.66 277.36 290.27 303.39 316.69 330.11 - 343.66 357.36 371.21 385.24 399.44 413.82 428.38 443.12 / - 4 15 15 1 37.71 51.8 65.56 78.72 91.99 104.62 117.67 130.67 145.03 158.05 173.06 188.35 - 201.9 217.44 233.61 249.58 266.24 282.49 299.87 317.47 335.12 352.99 371.72 390.8 410.21 429.63 449.1 469.07 - 489.83 510.97 532.49 554.39 576.67 599.33 622.35 645.72 / - 4 15 16 1 44.57 65.78 87.07 106.8 126.15 145.82 165.77 186.56 207.56 228.86 252.38 274.32 - 298.81 324.09 349.73 373.89 401.16 428.71 456.67 485.57 514.31 544.61 575.58 607.23 638.49 671.29 704.77 739.05 - 774.15 810.08 846.81 883.36 921.37 960.72 1001.33 1042.25 / - 4 15 17 1 61.26 93.11 125.45 156.82 188.09 220.05 252.96 286.99 322.76 359.79 399.33 438.88 - 481.31 523.44 568.98 615.75 663.34 711.31 762.48 815.11 869.36 925.38 982.97 1042.58 1103.25 1165.62 1228.8 1290.93 - 1350.52 1409.85 1471.71 1535.12 1598.89 1664.1 1730.66 1797.18 / - 4 15 18 1 88.31 140.29 189.72 242.66 296.98 353.65 413.35 476.12 542.23 612.01 685.25 762.22 - 843.51 928.33 1017.84 1110.46 1205.88 1301.66 1394.23 1490.48 1589.15 1690.6 1795.99 1901.38 2011.34 2122.84 2240.26 2355.02 - 2476.16 2598.67 2720.52 2847.01 2977.58 3113.26 3246.82 3384.22 / - 4 15 19 1 132.19 212.01 292.15 385.41 487.12 597.72 715.22 839.82 977.68 1124.52 1277.14 1427.53 - 1586.96 1748.07 1923.65 2098.49 2290.87 2480.24 2674.7 2878.17 3101.6 3314.59 3537.19 3765.4 4001.08 4244.66 4495.86 4752.61 - 5015.12 5278.2 5557.55 5834.21 6123.82 6417.17 6712.63 7019.16 / - 4 15 20 1 202.05 328.21 457.76 599.89 806.92 1038.09 1286.53 1546.17 1833.92 2129.12 2444.78 2784.61 - 3134.93 3509.01 3904.02 4289.91 4726.52 5150.82 5589.96 6091.47 6562.68 7055.72 7555.73 8148.92 8683.73 9243.23 9816.53 10402.48 - 11006.47 11638.95 12295.15 12960.46 13658.03 14375.45 15100.4 15839.91 / - 4 16 1 1 227.74 226.71 226.37 226.33 226.47 226.74 227.12 227.58 228.12 228.73 229.42 230.17 - 230.99 231.88 232.82 233.84 234.91 236.04 237.24 238.5 239.81 241.19 242.63 244.13 245.68 247.3 248.98 250.72 - 252.51 254.37 256.28 258.26 260.29 262.38 264.53 266.74 / - 4 16 2 1 227.6 226.53 226.17 226.12 226.25 226.52 226.89 227.34 227.88 228.49 229.18 229.93 - 230.75 231.63 232.58 233.59 234.66 235.8 236.99 238.25 239.57 240.95 242.39 243.89 245.44 247.06 248.74 250.48 - 252.28 254.14 256.05 258.03 260.07 262.16 264.31 266.53 / - 4 16 3 1 227.08 225.86 225.41 225.3 225.39 225.63 225.98 226.42 226.95 227.55 228.23 228.98 - 229.8 230.68 231.63 232.65 233.72 234.87 236.07 237.33 238.66 240.05 241.5 243.01 244.58 246.21 247.9 249.65 - 251.46 253.33 255.27 257.26 259.31 261.42 263.59 265.82 / - 4 16 4 1 225.65 223.85 223.12 222.91 222.95 223.14 223.46 223.89 224.41 225.01 225.69 226.45 - 227.28 228.18 229.14 230.18 231.28 232.44 233.67 234.97 236.32 237.74 239.22 240.77 242.37 244.04 245.77 247.56 - 249.42 251.33 253.31 255.34 257.44 259.6 261.82 264.1 / - 4 16 5 1 222.4 218.6 217.62 217.3 217.26 217.42 217.73 218.15 218.68 219.3 220.02 220.81 - 221.68 222.63 223.66 224.75 225.92 227.16 228.46 229.78 231.22 232.72 234.3 235.93 237.63 239.4 241.23 243.12 - 245.08 247.1 249.18 251.32 253.53 255.8 258.12 260.51 / - 4 16 6 1 215.12 208.02 206.48 205.97 205.83 205.94 206.25 206.7 207.29 208 208.81 209.72 - 210.72 211.81 212.99 214.25 215.58 217 218.5 220.07 221.71 223.41 225.2 227.06 228.99 230.98 233.02 235.15 - 237.35 239.61 241.93 244.32 246.75 249.26 251.84 254.47 / - 4 16 7 1 198.23 187.72 185.92 185.24 185.13 185.35 185.82 186.49 187.33 188.31 189.43 190.67 - 192.03 193.51 195.05 196.72 198.49 200.35 202.26 204.29 206.4 208.59 210.82 213.16 215.57 218.05 220.57 223.18 - 225.86 228.6 231.38 234.24 237.17 240.15 243.18 246.29 / - 4 16 8 1 168.92 154.17 153.05 152.97 153.4 154.12 155.18 156.46 157.95 159.6 161.42 163.38 - 165.46 167.65 170.15 172.6 175.13 177.75 180.46 183.28 186.14 189.09 192.1 195.18 198.32 201.52 205.29 208.61 - 212.02 215.45 218.97 222.51 226.13 229.78 233.5 237.27 / - 4 16 9 1 119.69 112.67 112.55 113.66 115.3 117.32 119.57 122.04 124.69 127.56 130.5 133.55 - 136.82 140.1 143.6 147.07 150.72 154.35 158.18 161.95 165.87 169.86 173.98 178 182.06 186.38 190.55 194.77 - 199.46 203.78 208.14 212.55 217 222.03 226.57 231.15 / - 4 16 10 1 76.19 77.49 79.85 82.76 85.95 89.28 92.77 96.39 100.12 103.92 107.88 111.96 - 116.14 120.44 124.73 129.19 133.76 138.43 143.18 148.03 152.76 157.76 162.84 167.73 172.95 178.24 183.29 188.69 - 193.83 199.35 204.94 210.22 215.94 221.3 227.15 232.59 / - 4 16 11 1 57.09 61.04 64.58 68.29 72.12 76.07 80.13 84.3 88.61 93.03 97.58 102.25 - 107.04 111.94 116.94 122.42 128.18 133.83 139.48 145.28 151.12 156.99 162.94 168.99 175.12 181.33 187.62 193.99 - 200.44 206.93 213.49 220.17 226.52 233.33 240.22 247.19 / - 4 16 12 1 50.6 55.96 60.3 64.47 68.8 73.36 78.14 83.12 88.29 93.63 99.14 104.82 - 110.65 116.63 122.7 128.87 135.14 141.53 148.04 154.66 161.39 168.22 175.16 182.2 189.34 196.56 204.6 212.99 - 221.11 229.42 237.52 245.6 253.82 261.89 270.16 278.95 / - 4 16 13 1 45.19 51.79 57.53 63.03 68.62 74.44 80.51 86.91 93.6 100.55 107.73 115.12 - 122.71 130.48 138.42 146.53 154.79 163.16 171.65 180.29 189.07 197.99 206.97 216.01 225.13 234.34 243.67 253.11 - 262.65 272.31 282.09 291.98 301.98 312.08 322.29 332.61 / - 4 16 14 1 41.11 48.52 57.13 65.94 74.85 83.29 92.49 101.27 110.35 120.21 130 140.34 - 150.91 161.32 171.42 182.56 193.9 205.44 217.17 229.11 241.24 252.55 265.05 277.77 290.67 303.77 317.08 330.58 - 344.22 358 371.92 386 400.26 414.69 429.3 444.1 / - 4 16 15 1 37.9 51.91 65.71 78.91 92.21 104.86 117.9 130.91 145.26 158.28 173.27 188.52 - 203.2 217.56 233.7 249.62 266.27 282.51 299.85 317.4 334.74 352.8 371.45 390.46 409.83 429.23 448.66 468.58 - 489.27 510.33 531.76 553.55 575.71 598.24 621.15 644.41 / - 4 16 16 1 44.53 65.78 87.11 106.87 126.21 146.04 165.8 186.56 207.51 228.74 252.2 274.09 - 298.54 323.73 349.51 373.31 400.46 427.95 455.84 484.62 513.2 543.35 574.15 605.61 636.68 669.42 702.9 737.12 - 772.14 807.92 844.46 881.4 918.39 957.3 997.48 1037.94 / - 4 16 17 1 61.19 93.01 125.39 156.73 188.21 219.77 252.85 286.54 322.18 359.04 398.43 437.84 - 480.12 522 567.29 613.78 660.36 709.23 760.37 812.96 866.88 922.45 979.43 1038.46 1098.56 1160.46 1223.39 1285.69 - 1345.52 1406.54 1467.91 1531.83 1596.27 1662.02 1729.23 1798.78 / - 4 16 18 1 88.2 140.27 189.6 242.42 296.59 353.03 412.41 475.02 540.81 610.14 683.04 759.83 - 840.72 925.28 1013.99 1105.98 1200.96 1296.9 1391.28 1486.99 1586.51 1688.65 1795.13 1901.56 2012.58 2127.45 2242.7 2359.96 - 2482.31 2606.27 2733.44 2861.95 2993.8 3127.28 3262.81 3400.64 / - 4 16 19 1 132.11 212.23 292.3 385.54 487.08 595.78 713.01 838.85 974.43 1119.03 1273.39 1424.84 - 1578.73 1747.9 1924.82 2101.48 2286.21 2486.82 2683.74 2889.48 3097.92 3334.53 3556.45 3787.8 4026.71 4273.56 4526.89 4785.13 - 5051.28 5321.82 5600.87 5890.5 6179.25 6476.72 6778.46 7087.82 / - 4 16 20 1 202.19 329.3 460.25 601.46 801.33 1031.53 1282.15 1539.63 1818.72 2121.96 2436.79 2782.81 - 3129.53 3502.29 3900.07 4320.59 4730.82 5193.94 5639.38 6098.23 6624.91 7124.41 7632.41 8163.49 8774.54 9341.08 9920.87 10513.85 - 11126.45 11752.69 12413.38 13094.83 13800.96 14527.79 15260.76 16012.3 / - 4 17 1 1 229.28 228.34 228.04 228.02 228.17 228.45 228.83 229.29 229.83 230.44 231.13 231.88 - 232.7 233.58 234.53 235.54 236.61 237.74 238.94 240.19 241.51 242.89 244.33 245.82 247.38 249 250.68 252.42 - 254.22 256.07 257.99 259.97 262 264.1 266.25 268.47 / - 4 17 2 1 229.06 228.06 227.72 227.68 227.81 228.08 228.44 228.9 229.43 230.04 230.73 231.48 - 232.29 233.18 234.12 235.13 236.2 237.34 238.53 239.79 241.11 242.49 243.93 245.43 247 248.62 250.3 252.04 - 253.84 255.71 257.63 259.61 261.65 263.75 265.91 268.13 / - 4 17 3 1 228.36 227.15 226.68 226.56 226.64 226.87 227.21 227.64 228.17 228.77 229.44 230.19 - 231.01 231.89 232.84 233.85 234.93 236.08 237.28 238.55 239.89 241.28 242.74 244.25 245.83 247.47 249.17 250.93 - 252.76 254.64 256.58 258.59 260.65 262.77 264.96 267.2 / - 4 17 4 1 226.67 224.77 223.94 223.71 223.72 223.89 224.2 224.62 225.13 225.73 226.41 227.16 - 227.99 228.9 229.87 230.91 232.02 233.19 234.43 235.73 237.1 238.54 240.03 241.59 243.22 244.9 246.65 248.47 - 250.34 252.27 254.27 256.33 258.45 260.63 262.87 265.17 / - 4 17 5 1 223.05 218.98 217.86 217.48 217.39 217.52 217.8 218.21 218.73 219.35 220.06 220.86 - 221.74 222.7 223.74 224.85 226.03 227.29 228.61 230.01 231.47 233 234.6 236.27 238 239.8 241.66 243.59 - 245.58 247.63 249.75 251.93 254.17 256.48 258.85 261.28 / - 4 17 6 1 215.34 207.51 205.92 205.35 205.14 205.24 205.55 206.01 206.61 207.31 208.14 209.07 - 210.09 211.21 212.42 213.71 215.09 216.54 218.08 219.67 221.36 223.12 224.95 226.86 228.82 230.87 232.98 235.17 - 237.42 239.72 242.11 244.56 247.06 249.63 252.27 254.97 / - 4 17 7 1 198.2 187.06 185.03 184.43 184.33 184.56 185.05 185.74 186.6 187.62 188.75 190.02 - 191.42 192.93 194.54 196.22 197.89 199.79 201.77 203.8 205.95 208.18 210.49 212.83 215.29 217.82 220.43 223.06 - 225.8 228.6 231.44 234.71 237.72 240.76 243.88 247.07 / - 4 17 8 1 168.25 153.69 152.57 152.5 152.86 153.67 154.74 156.04 157.54 159.22 161.06 163.04 - 165.16 167.4 169.77 172.25 175.05 177.73 180.51 183.37 186.3 189.29 192.36 195.51 198.71 201.97 205.3 209.2 - 212.66 216.18 219.74 223.36 227.06 230.77 234.57 238.39 / - 4 17 9 1 119.11 112.69 112.62 113.77 115.41 117.43 119.75 122.25 124.91 127.72 130.74 133.82 - 137.1 140.4 143.8 147.42 150.99 154.75 158.48 162.41 166.36 170.39 174.38 178.6 182.7 187.07 191.28 195.54 - 199.85 204.65 209.06 213.51 218.01 223.11 227.7 232.34 / - 4 17 10 1 76.55 77.91 80.32 83.27 86.48 89.83 93.34 96.97 100.66 104.52 108.49 112.58 - 116.78 120.99 125.39 129.88 134.46 139.16 143.95 148.63 153.58 158.61 163.72 168.65 173.91 178.95 184.34 189.78 - 194.97 200.54 205.82 211.52 216.88 222.71 228.17 234.13 / - 4 17 11 1 57.56 61.56 65.15 68.9 72.76 76.73 80.8 85 89.31 93.74 98.3 102.98 - 107.77 112.68 117.7 123.01 128.91 134.56 140.23 146.07 151.92 157.94 163.93 170.01 176.18 182.44 188.78 195.2 - 201.7 208.24 214.55 221.22 228.01 234.89 241.85 248.42 / - 4 17 12 1 51.1 56.48 60.84 65.03 69.4 73.98 78.78 83.77 88.95 94.31 99.83 105.52 - 111.36 117.35 123.47 129.66 135.96 142.37 148.89 155.53 162.28 169.13 176.09 183.15 190.31 197.57 204.91 213.36 - 221.85 230.21 238.29 246.54 254.99 263.13 271.74 280.18 / - 4 17 13 1 45.63 52.29 58.03 63.54 69.14 74.95 81.04 87.45 94.16 101.12 108.31 115.7 - 123.3 131.07 139.01 147.13 155.4 163.75 172.24 180.87 189.65 198.58 207.63 216.74 225.92 235.18 244.54 254.01 - 263.59 273.28 283.09 293.01 303.03 313.17 323.42 333.78 / - 4 17 14 1 41.46 48.91 57.52 66.34 75.25 83.7 92.9 101.59 110.76 120.62 130.39 140.73 - 151.29 161.7 171.78 182.9 194.21 205.73 217.43 229.33 241.42 252.68 265.14 277.8 290.66 303.73 317 330.48 - 344.16 358.04 372.06 386.23 400.55 415.03 429.69 444.53 / - 4 17 15 1 38.24 52.06 65.91 79.14 92.47 105.12 118.16 131.15 145.48 158.46 173.4 188.6 - 203.23 217.52 233.58 249.42 265.97 282.12 299.39 316.87 334.14 352.11 370.66 389.54 408.77 428.03 447.31 467.1 - 487.69 508.64 529.97 551.66 573.7 596.1 618.85 641.95 / - 4 17 16 1 44.31 65.81 87.02 106.94 126.28 145.92 165.79 186.49 207.36 228.49 251.86 273.68 - 297.94 323.05 348.77 372.3 399.21 426.42 454.06 482.62 511.03 541.02 571.65 602.91 633.74 666.26 699.45 733.38 - 768.07 803.48 839.65 876.16 912.7 951.16 990.87 1030.84 / - 4 17 17 1 61.16 92.98 125.37 156.63 188.01 219.4 252.3 285.82 321.3 357.96 397.12 436.2 - 478.24 519.82 564.87 611.05 657.45 705.83 756.59 808.82 862.24 917.19 973.56 1031.97 1091.6 1152.76 1215.22 1278.63 - 1337.57 1399.1 1462.17 1525.56 1591.11 1658.12 1724.78 1794.79 / - 4 17 18 1 88.18 140.4 189.55 242.18 295.93 352.07 411.02 473.07 538.5 607.38 679.71 755.98 - 836.1 920.01 1007.97 1099.33 1193.71 1289.36 1384.24 1481.78 1581.74 1685.5 1791.7 1901.21 2013.53 2127.47 2244.19 2363.1 - 2486.84 2612.37 2741.13 2871.48 3004.17 3140.6 3278.26 3418.25 / - 4 17 19 1 132.15 212.71 293.16 385.08 485.94 595.22 711.85 836.66 969.31 1114.13 1268 1420.06 - 1576.68 1746.13 1917.85 2103.25 2290.03 2492.69 2692.4 2900.61 3112.35 3351 3576.72 3811.5 4053.82 4302.57 4558.72 4822.91 - 5094.36 5366.26 5652.88 5946.51 6236.42 6542.68 6851.82 7159.44 / - 4 17 20 1 202.58 330.98 463.66 607.14 796.56 1020.88 1267.22 1526.95 1813.02 2106.16 2435.45 2769.4 - 3130.23 3518.15 3896.06 4316.99 4761.56 5197.43 5686.44 6155.03 6643.54 7198.76 7716.85 8257.17 8812.63 9381.69 10038.97 10640.3 - 11262.47 11893.93 12556.61 13247.93 13964.93 14694.05 15451.77 16230.44 / - 4 18 1 1 230.65 229.83 229.57 229.58 229.75 230.03 230.41 230.88 231.42 232.03 232.72 233.47 - 234.29 235.17 236.11 237.12 238.19 239.33 240.52 241.78 243.1 244.47 245.91 247.41 248.97 250.59 252.27 254.01 - 255.82 257.68 259.6 261.58 263.62 265.72 267.88 270.1 / - 4 18 2 1 230.28 229.35 229.03 228.99 229.12 229.39 229.75 230.2 230.74 231.35 232.03 232.78 - 233.59 234.48 235.42 236.43 237.51 238.65 239.85 241.11 242.43 243.82 245.26 246.77 248.34 249.96 251.65 253.4 - 255.21 257.09 259.02 261.01 263.06 265.17 267.34 269.58 / - 4 18 3 1 229.35 228.13 227.64 227.5 227.56 227.77 228.1 228.53 229.05 229.64 230.32 231.06 - 231.88 232.77 233.72 234.74 235.82 236.97 238.19 239.47 240.81 242.21 243.68 245.21 246.8 248.45 250.17 251.95 - 253.79 255.69 257.65 259.67 261.75 263.9 266.1 268.37 / - 4 18 4 1 227.32 225.15 224.24 224 224 224.18 224.48 224.9 225.41 226.02 226.7 227.47 - 228.31 229.22 230.2 231.26 232.38 233.57 234.82 236.15 237.54 238.99 240.51 242.09 243.74 245.45 247.23 249.07 - 250.97 252.93 254.96 257.04 259.19 261.36 263.64 265.97 / - 4 18 5 1 223.28 218.67 217.5 217.07 216.96 217.06 217.33 217.74 218.26 218.89 219.61 220.42 - 221.32 222.3 223.36 224.49 225.7 226.98 228.34 229.77 231.27 232.84 234.48 236.18 237.96 239.8 241.7 243.68 - 245.71 247.82 249.99 252.17 254.47 256.83 259.25 261.74 / - 4 18 6 1 215.23 206.81 205.02 204.4 204.17 204.27 204.57 205.04 205.64 206.36 207.21 208.16 - 209.21 210.36 211.6 212.93 214.34 215.84 217.42 219.04 220.78 222.6 224.49 226.45 228.49 230.59 232.74 234.99 - 237.3 239.69 242.14 244.64 247.22 249.86 252.57 255.34 / - 4 18 7 1 198.01 186.16 184.05 183.5 183.45 183.73 184.25 184.97 185.86 186.9 188.09 189.4 - 190.74 192.28 193.89 195.63 197.48 199.42 201.4 203.52 205.73 208.01 210.34 212.79 215.31 217.86 220.53 223.27 - 226.04 228.92 231.86 234.87 237.91 241.04 244.24 247.47 / - 4 18 8 1 167.47 153.22 152.1 152.04 152.41 153.23 154.32 155.63 157.15 158.85 160.71 162.71 - 164.87 167.15 169.55 172.05 174.66 177.61 180.41 183.31 186.3 189.35 192.48 195.69 198.96 202.3 205.7 209.2 - 213.27 216.86 220.51 224.2 227.95 231.77 235.63 239.54 / - 4 18 9 1 119.09 112.72 112.72 113.94 115.63 117.67 119.99 122.54 125.2 128.02 131.05 134.15 - 137.35 140.77 144.18 147.82 151.41 155.19 158.94 162.9 166.79 170.84 174.96 179.22 183.36 187.56 192.02 196.32 - 200.67 205.52 209.98 214.48 219.03 223.63 228.84 233.53 / - 4 18 10 1 77.04 78.46 80.96 83.96 87.21 90.57 94.09 97.67 101.41 105.26 109.23 113.32 - 117.44 121.74 126.15 130.64 135.24 139.95 144.58 149.46 154.43 159.49 164.39 169.59 174.89 179.96 185.39 190.56 - 196.1 201.72 207.05 212.8 218.22 224.1 229.61 235.64 / - 4 18 11 1 58.26 62.27 65.95 69.76 73.66 77.64 81.72 85.92 90.23 94.66 99.2 103.87 - 108.66 113.56 118.58 123.7 129.61 135.38 141.13 146.9 152.75 158.72 164.72 170.82 177 183.27 189.63 196.08 - 202.6 209.22 215.87 222.6 229.45 236.39 242.97 250.05 / - 4 18 12 1 51.9 57.25 61.61 65.82 70.21 74.82 79.63 84.63 89.81 95.16 100.68 106.36 - 112.19 118.18 124.3 130.54 136.86 143.27 149.8 156.44 163.19 170.04 177.01 184.08 191.25 198.51 205.87 213.84 - 222.41 230.73 238.99 247.48 255.81 264.2 272.75 281.24 / - 4 18 13 1 46.36 53.06 58.77 64.25 69.82 75.62 81.71 88.13 94.84 101.79 108.97 116.35 - 123.93 131.68 139.61 147.7 155.95 164.27 172.73 181.33 190.08 198.97 208 217.17 226.44 235.77 245.17 254.67 - 264.28 273.99 283.81 293.72 303.76 313.92 324.19 334.59 / - 4 18 14 1 42.05 49.73 58.18 66.92 75.48 84.23 93.41 102.48 111.2 121.03 130.79 141.1 - 151.63 161.98 172.01 183.08 194.34 205.8 217.44 229.27 241.29 252.44 264.81 277.38 290.14 303.11 316.26 329.62 - 343.18 356.96 370.95 385.15 399.57 414.16 428.91 443.82 / - 4 18 15 1 38.85 52.45 66.12 79.53 92.52 105.45 118.45 131.39 145.67 158.58 173.41 188.52 - 201.87 217.21 233.1 248.85 265.26 281.25 298.25 315.65 332.58 350.5 368.86 387.57 406.63 425.69 444.75 464.31 - 484.68 505.39 526.45 547.86 569.63 591.76 614.25 637.1 / - 4 18 16 1 44.37 65.97 87.19 107.13 126.41 145.85 165.75 186.34 207.08 228.05 251.28 272.82 - 296.96 321.83 345.61 370.27 396.82 423.7 450.99 479.22 507.22 536.81 567.04 597.91 628.36 660.54 693.39 726.95 - 761.19 796.15 831.82 867.78 903.69 941.53 980.62 1019.91 / - 4 18 17 1 61.22 92.87 125.34 156.58 187.32 218.89 251.33 284.82 319.99 356.27 395.14 433.79 - 475.47 516.47 560.85 606.71 653.8 700.44 750.71 802.33 855.07 909.28 964.78 1022.3 1080.98 1141.13 1202.75 1265.43 - 1326 1387.88 1451.16 1515.47 1580.99 1648.02 1716.97 1786.18 / - 4 18 18 1 88.3 140.78 189.72 241.89 295.09 350.51 408.75 470.07 534.63 602.78 674.55 750.37 - 829.46 912.49 999.15 1089.58 1182.99 1279.05 1374.4 1471.89 1573.8 1677.64 1784.85 1895.6 2008.54 2124.63 2242.96 2365.62 - 2489.02 2616.29 2746.85 2879.23 3014.14 3152.71 3292.84 3435.4 / - 4 18 19 1 132.46 213.68 294.66 385.63 485.67 592.54 707.88 831.25 964.2 1105.08 1255.26 1408 - 1569.72 1740.01 1913.47 2102.16 2290.44 2486.25 2701.34 2911.25 3128 3351.07 3600.01 3839.09 4083.06 4336.19 4595.11 4864.75 - 5139.1 5423.72 5707.35 6005.31 6305.62 6612.98 6931.41 7246.61 / - 4 18 20 1 203.44 333.65 468.63 614.83 789.73 1012.35 1259.74 1517.34 1791.94 2093.1 2420.55 2763.85 - 3119.93 3503.43 3893.28 4315.52 4762.47 5199.42 5690.05 6166.99 6702.53 7212.08 7742.84 8348.91 8916.12 9496.76 10083.94 10693.53 - 11415.21 12063.01 12740.29 13438.29 14156.99 14896.07 15665.2 16459.38 / - 4 19 1 1 231.73 231.01 230.79 230.82 230.99 231.28 231.67 232.14 232.68 233.29 233.98 234.73 - 235.55 236.43 237.38 238.39 239.46 240.6 241.8 243.06 244.38 245.76 247.21 248.71 250.28 251.91 253.59 255.34 - 257.15 259.02 260.95 262.94 264.99 267.1 269.27 271.51 / - 4 19 2 1 231.12 230.21 229.89 229.84 229.97 230.23 230.59 231.04 231.57 232.17 232.85 233.6 - 234.42 235.3 236.26 237.27 238.35 239.49 240.7 241.97 243.3 244.7 246.15 247.67 249.25 250.9 252.6 254.37 - 256.19 258.08 260.03 262.04 264.11 266.24 268.43 270.69 / - 4 19 3 1 229.85 228.56 227.94 227.77 227.82 228.02 228.34 228.77 229.28 229.88 230.55 231.3 - 232.13 233.02 233.99 235.02 236.12 237.28 238.51 239.81 241.17 242.59 244.08 245.63 247.25 248.93 250.67 252.47 - 254.34 256.27 258.26 260.31 262.42 264.6 266.84 269.14 / - 4 19 4 1 227.41 224.96 223.96 223.63 223.58 223.71 223.99 224.39 224.89 225.49 226.17 226.94 - 227.79 228.72 229.72 230.79 231.94 233.15 234.44 235.79 237.21 238.7 240.26 241.88 243.57 245.32 247.14 249.02 - 250.97 252.98 255.06 257.2 259.4 261.66 263.99 266.38 / - 4 19 5 1 223.03 218.06 216.59 216.09 215.94 216.02 216.27 216.67 217.19 217.83 218.56 219.39 - 220.31 221.31 222.4 223.57 224.81 226.14 227.53 229.01 230.55 232.17 233.86 235.62 237.45 239.35 241.32 243.36 - 245.46 247.59 249.82 252.12 254.49 256.92 259.42 261.98 / - 4 19 6 1 214.35 205.9 203.95 203.34 203.15 203.24 203.55 204.03 204.65 205.4 206.28 207.26 - 208.34 209.53 210.77 212.14 213.6 215.14 216.77 218.48 220.27 222.1 224.05 226.08 228.18 230.35 232.6 234.88 - 237.27 239.73 242.26 244.86 247.5 250.23 253.03 255.89 / - 4 19 7 1 197.63 185.02 183.03 182.55 182.55 182.87 183.44 184.2 185.14 186.2 187.35 188.7 - 190.16 191.74 193.39 195.18 197.08 199.07 201.1 203.27 205.53 207.88 210.25 212.76 215.35 217.96 220.69 223.5 - 226.38 229.28 232.3 235.39 238.5 241.72 245 248.31 / - 4 19 8 1 167.29 152.77 151.65 151.59 151.97 152.8 153.9 155.24 156.77 158.5 160.41 162.46 - 164.64 166.96 169.39 171.93 174.57 177.31 180.4 183.33 186.34 189.44 192.6 195.85 199.16 202.54 205.98 209.49 - 213.06 217.26 220.97 224.73 228.55 232.43 236.37 240.38 / - 4 19 9 1 118.48 112.83 113.11 114.46 116.22 118.33 120.64 123.22 125.89 128.72 131.75 134.83 - 138.02 141.43 144.83 148.47 152.06 155.73 159.6 163.55 167.45 171.51 175.65 179.74 184.09 188.31 192.8 197.13 - 201.52 205.95 210.9 215.44 220.04 224.68 229.37 234.69 / - 4 19 10 1 77.9 79.5 82.31 85.47 88.76 92.13 95.61 99.2 102.85 106.66 110.58 114.62 - 118.69 122.95 127.32 131.78 136.35 140.88 145.65 150.51 155.47 160.3 165.43 170.64 175.66 181.02 186.48 191.67 - 197.24 202.54 208.24 213.64 219.49 224.99 230.97 236.57 / - 4 19 11 1 59.57 63.73 67.7 71.64 75.58 79.57 83.62 87.77 92.02 96.38 100.86 105.46 - 110.17 115 119.94 125 130.77 136.51 142.19 147.98 153.85 159.8 165.79 171.88 178.06 184.34 190.71 197.17 - 203.73 210.37 217.05 223.49 230.32 237.28 244.33 251.47 / - 4 19 12 1 53.59 58.89 63.2 67.49 71.93 76.54 81.33 86.28 91.4 96.69 102.14 107.75 - 113.51 119.41 125.47 131.66 137.99 144.39 150.88 157.48 164.19 171.01 177.93 184.96 192.1 199.33 206.67 214.04 - 222.33 230.74 239.39 247.78 256.19 264.65 273.17 281.85 / - 4 19 13 1 48.1 54.81 60.38 65.73 71.19 76.93 82.99 89.37 96 102.88 109.98 117.27 - 124.76 132.44 140.28 148.29 156.42 164.65 173.02 181.53 190.19 198.99 207.93 217.01 226.23 235.58 245.07 254.63 - 264.25 273.96 283.77 293.68 303.71 313.85 324.11 334.48 / - 4 19 14 1 43.47 51.35 59.84 68.36 76.49 85.21 94.26 102.73 111.86 121.51 131.27 141.47 - 151.89 161.61 172.02 182.97 194.12 205.44 216.96 228.65 240.53 251.47 263.69 276.1 288.7 301.5 314.48 327.66 - 341.04 354.62 368.39 382.37 396.55 410.94 425.54 440.34 / - 4 19 15 1 40.23 53.82 67.12 80.31 93.07 106.03 118.9 131.66 145.85 158.52 173.21 188.17 - 201.26 216.42 231.97 247.51 263.79 279.42 296.26 313.39 329.92 347.65 365.71 384.1 402.81 420.95 440.6 459.27 - 479.26 499.58 520.26 541.28 562.64 584.34 606.4 628.82 / - 4 19 16 1 45.15 66.85 87.51 107.21 126.48 145.97 165.69 186.05 206.59 227.31 250.32 271.24 - 295.12 319.51 343.62 366.79 392.82 419.15 445.72 473.46 500.83 529.83 559.48 589.61 619.51 651.09 683.33 716.23 - 749.81 784.07 819.02 854.18 889.2 926.78 964.5 1002.92 / - 4 19 17 1 62.39 93.02 125.51 156.43 187.07 218.21 250.19 283.42 318.19 353.83 392.07 430.2 - 471.26 511.4 555 600.21 644.8 691.82 741.05 791.56 843.09 896.03 950.26 1006.49 1063.96 1122.67 1183.13 1244.87 - 1306.28 1368.74 1432.53 1497.41 1563.86 1631.78 1700.9 1771.42 / - 4 19 18 1 88.8 141.19 190.2 241.75 293.86 348.21 405.38 465.69 529.4 596.69 667.36 742.25 - 819.72 901.43 986.06 1075.16 1167.53 1262.66 1358.76 1457.82 1559.82 1665.48 1774.23 1886.11 1999.94 2118.5 2238.65 2361.91 - 2488.86 2616.97 2749.51 2884.25 3021.66 3162.71 3305.65 3452.74 / - 4 19 19 1 133.35 215.69 297.6 387.49 485.16 590.82 703.47 825.03 955.55 1094.39 1242.21 1396.06 - 1558.04 1729.02 1904.58 2093.38 2284.18 2482.52 2698.57 2912.13 3133.78 3361.07 3612.56 3856.96 4108.49 4366.57 4633.08 4907.01 - 5188.78 5478.58 5773.67 6077.56 6382.02 6699.54 7020.07 7348.4 / - 4 19 20 1 205.27 338.18 476.44 625.83 789.15 998.11 1241.06 1495.32 1777.83 2076.9 2402.42 2739.98 - 3104.12 3488.14 3887.73 4308.87 4743 5212.67 5706.25 6185 6723.38 7241.39 7825.59 8380.06 8950.86 9538.31 10212.7 10838.4 - 11485.37 12153.07 12841.44 13544.99 14392.54 15151.61 15931.7 16732.66 / - 4 20 1 1 231.91 231.11 230.84 230.81 230.96 231.22 231.59 232.04 232.58 233.19 233.87 234.63 - 235.45 236.34 237.3 238.32 239.41 240.56 241.78 243.06 244.41 245.81 247.28 248.82 250.41 252.07 253.79 255.57 - 257.42 259.32 261.29 263.32 265.41 267.56 269.78 272.05 / - 4 20 2 1 231.01 229.94 229.5 229.37 229.45 229.66 229.99 230.42 230.94 231.54 232.22 232.98 - 233.8 234.7 235.67 236.7 237.8 238.97 240.2 241.5 242.87 244.3 245.79 247.35 248.97 250.65 252.4 254.21 - 256.09 258.03 260.03 262.09 264.22 266.41 268.66 270.97 / - 4 20 3 1 229.49 227.96 227.11 226.86 226.85 227.02 227.31 227.72 228.23 228.82 229.51 230.27 - 231.11 232.02 233.01 234.07 235.19 236.39 237.66 238.99 240.4 241.87 243.4 245 246.67 248.4 250.2 252.07 - 253.99 255.99 258.04 260.16 262.35 264.6 266.91 269.28 / - 4 20 4 1 226.91 223.92 222.86 222.48 222.38 222.49 222.75 223.15 223.65 224.26 224.96 225.74 - 226.62 227.57 228.6 229.7 230.89 232.14 233.47 234.87 236.34 237.88 239.49 241.17 242.92 244.74 246.62 248.57 - 250.59 252.67 254.83 257.04 259.33 261.67 264.09 266.56 / - 4 20 5 1 222.5 217 215.44 214.92 214.75 214.83 215.09 215.5 216.03 216.68 217.44 218.29 - 219.24 220.28 221.4 222.6 223.89 225.26 226.7 228.23 229.79 231.47 233.21 235.04 236.93 238.9 240.93 243.04 - 245.22 247.47 249.78 252.17 254.57 257.1 259.68 262.34 / - 4 20 6 1 213.78 204.78 202.79 202.21 202.04 202.16 202.49 203 203.65 204.43 205.34 206.35 - 207.45 208.66 209.97 211.38 212.89 214.48 216.16 217.92 219.72 221.65 223.65 225.74 227.91 230.1 232.42 234.81 - 237.28 239.81 242.42 245.07 247.82 250.63 253.52 256.45 / - 4 20 7 1 196.19 183.96 181.91 181.54 181.62 182.01 182.64 183.45 184.38 185.49 186.75 188.12 - 189.64 191.26 192.97 194.81 196.72 198.76 200.9 203.07 205.38 207.79 210.22 212.78 215.43 218.1 220.91 223.79 - 226.69 229.72 232.82 235.93 239.16 242.46 245.78 249.21 / - 4 20 8 1 166.3 152.32 151.21 151.15 151.55 152.45 153.64 155.07 156.69 158.48 160.42 162.5 - 164.71 167.06 169.52 172.08 174.74 177.5 180.35 183.29 186.62 189.74 192.95 196.23 199.59 203.01 206.5 210.05 - 213.66 217.33 221.06 225.44 229.29 233.21 237.17 241.2 / - 4 20 9 1 118.34 114.08 114.83 116.36 118.25 120.4 122.72 125.19 127.82 130.66 133.55 136.56 - 139.78 143.02 146.35 149.91 153.44 157.05 160.88 164.68 168.7 172.76 176.89 180.99 185.34 189.56 193.83 198.38 - 202.76 207.2 212.14 216.68 221.27 225.91 230.6 235.33 / - 4 20 10 1 80.67 83.27 86.54 89.74 93 96.24 99.54 102.97 106.45 110.1 113.85 117.65 - 121.64 125.75 129.87 134.18 138.61 143.16 147.68 152.45 157.34 162.33 167.17 172.34 177.31 182.63 188.05 193.2 - 198.73 203.99 209.66 215.02 220.84 226.3 232.26 237.82 / - 4 20 11 1 63.56 68.57 72.97 77.04 80.98 84.86 88.76 92.7 96.73 100.85 105.08 109.42 - 113.89 118.47 123.18 128.19 133.73 139.14 144.66 150.23 155.91 161.73 167.61 173.58 179.66 185.83 192.1 198.47 - 204.92 211.13 217.74 224.39 231.13 238.01 244.53 251.56 / - 4 20 12 1 58.36 63.3 67.83 72.26 76.71 81.24 85.88 90.66 95.58 100.65 105.86 111.23 - 116.74 122.4 128.2 134.14 140.22 146.44 152.79 159.27 165.88 172.57 179.33 186.19 193.15 200.18 207.28 214.49 - 221.78 230.04 238.71 247.07 255.41 263.77 272.05 280.63 / - 4 20 13 1 53.47 59.42 64.45 69.55 74.92 80.58 86.51 92.68 99.09 105.72 112.55 119.58 - 126.79 134.17 141.73 149.42 157.2 165.13 173.21 181.44 189.81 198.33 206.98 215.74 224.63 233.66 242.83 252.14 - 261.6 271.19 280.93 290.8 300.8 310.93 321.1 331.36 / - 4 20 14 1 48.33 56.19 63.9 71.75 79.83 88.28 95.81 104.73 113.8 122.95 132.6 142.44 - 152.06 161.31 171.71 182.31 193.1 204.08 215.25 226.61 238.11 248.57 260.46 272.54 284.81 297.28 309.94 322.79 - 335.84 349.08 362.52 376.16 390 404.05 418.29 432.03 / - 4 20 15 1 44.04 57.63 70.9 83.53 95.35 107.41 119.82 132.66 145.78 158.37 172.58 186.42 - 199.15 214.06 228.93 244.19 259.38 275.17 291.57 308 324.24 341.53 359 376.9 395.11 413.23 430.83 449.95 - 469.41 489.19 509.32 529.78 550.57 571.71 593.19 615.01 / - 4 20 16 1 48.63 70.53 90.38 109 127.32 146.24 165.62 185.08 205.36 225.27 247.49 267.5 - 290.73 314.43 337.34 359.86 385.1 410.39 436.51 463.19 489.83 518.03 546.85 575.93 605.17 635.9 667.28 699.31 - 731.99 765.32 797.85 832.38 866.93 903.59 940.19 977.46 / - 4 20 17 1 64.81 96.33 127.29 156.81 186.49 216.61 248.07 281.25 315.2 349.95 385.54 424.55 - 462.3 502.67 545.13 588.86 631.11 676.54 724.31 773.18 823.01 874.73 927.18 981.88 1037.21 1094.74 1153.61 1213.16 - 1274.9 1338.03 1402.56 1468.48 1535.5 1603.53 1673.63 1745.11 / - 4 20 18 1 93.81 141.99 191.13 241.52 292.38 345.39 401.72 460.7 523.45 589.19 657.86 731.38 - 806.59 886.61 968.22 1055 1145.27 1238.83 1333.94 1434.42 1538.17 1645.2 1755.14 1868.21 1984.39 2103.8 2226.26 2351.7 - 2480.2 2611.64 2746.32 2883.78 3024.18 3167.97 3314.25 3463.41 / - 4 20 19 1 137.42 220.45 302.32 391.38 486.67 589.04 699.23 817.92 944.89 1081.14 1226.18 1379.97 - 1542.68 1714.35 1891.77 2081.35 2275.14 2476.5 2692.17 2909.54 3134.25 3366.2 3605.4 3866.13 4122.22 4385.86 4656.97 4935.37 - 5222.51 5517.96 5819.17 6129.57 6447.48 6769.7 7102.45 7438.96 / - 4 20 20 1 209.83 346.99 490.04 643.37 808.57 986.45 1176.91 1379.94 1636.63 1927.37 2234.24 2564.93 - 2914.24 3288.62 3670.7 4089.22 4536.25 4980.33 5479.06 5968.41 6480.62 7016.21 7575.77 8174.78 8752.97 9388.07 10022.93 10636.7 - 11352.93 12014.23 12696.65 13501.83 14233.44 14986.3 15883.65 16686.66 / - 5 1 1 1 201.32 201.16 201.22 201.42 201.73 202.11 202.58 203.11 203.71 204.37 205.09 205.87 - 206.72 207.62 208.58 209.59 210.66 211.79 212.98 214.22 215.51 216.86 218.27 219.73 221.24 222.81 224.43 226.11 - 227.84 229.63 231.47 233.36 235.31 237.31 239.37 241.47 / - 5 1 2 1 201.24 201.06 201.12 201.32 201.62 202.01 202.47 203 203.6 204.26 204.98 205.76 - 206.61 207.51 208.46 209.48 210.55 211.68 212.87 214.11 215.41 216.76 218.16 219.62 221.14 222.71 224.34 226.02 - 227.75 229.54 231.38 233.27 235.22 237.23 239.28 241.39 / - 5 1 3 1 201.09 200.88 200.93 201.12 201.42 201.8 202.26 202.79 203.39 204.05 204.77 205.55 - 206.4 207.3 208.26 209.27 210.35 211.48 212.66 213.91 215.2 216.56 217.97 219.43 220.95 222.52 224.15 225.83 - 227.57 229.36 231.2 233.1 235.05 237.06 239.12 241.23 / - 5 1 4 1 200.8 200.55 200.58 200.76 201.05 201.42 201.88 202.41 203 203.66 204.38 205.17 - 206.01 206.91 207.87 208.89 209.96 211.1 212.29 213.53 214.83 216.19 217.6 219.07 220.59 222.16 223.8 225.48 - 227.22 229.02 230.87 232.77 234.73 236.74 238.81 240.93 / - 5 1 5 1 200.24 199.93 199.92 200.08 200.36 200.72 201.16 201.68 202.27 202.93 203.65 204.43 - 205.27 206.18 207.14 208.16 209.24 210.37 211.57 212.82 214.12 215.49 216.9 218.38 219.91 221.49 223.13 224.83 - 226.58 228.38 230.24 232.16 234.13 236.15 238.23 240.36 / - 5 1 6 1 198.41 197.35 197.09 197.1 197.28 197.58 197.99 198.49 199.07 199.72 200.45 201.25 - 202.11 203.04 204.03 205.08 206.2 207.37 208.61 209.91 211.26 212.67 214.15 215.68 217.26 218.9 220.59 222.33 - 224.14 226 227.92 229.89 231.92 234 236.14 238.33 / - 5 1 7 1 192.09 188.27 187.61 187.4 187.46 187.7 188.11 188.64 189.28 190.01 190.8 191.7 - 192.68 193.74 194.88 196.08 197.35 198.7 200.11 201.59 203.13 204.73 206.39 208.12 209.91 211.76 213.66 215.63 - 217.62 219.7 221.83 224.03 226.28 228.58 230.94 233.36 / - 5 1 8 1 173.27 166.6 165.38 164.92 164.96 165.29 165.9 166.69 167.63 168.72 169.93 171.26 - 172.69 174.2 175.83 177.55 179.34 181.19 183.13 185.15 187.23 189.35 191.54 193.8 196.12 198.47 200.89 203.38 - 205.89 208.47 211.1 213.78 216.5 219.28 222.1 224.97 / - 5 1 9 1 133.34 124.05 122.89 122.97 123.79 125.06 126.61 128.5 130.54 132.73 135.07 137.6 - 140.16 142.83 145.6 148.41 151.49 154.47 157.48 160.58 163.7 167.19 170.4 173.67 176.94 180.28 184.03 187.43 - 190.84 194.29 197.76 201.27 204.8 208.91 212.51 216.14 / - 5 1 10 1 81.61 81.23 82.83 85 87.47 90.14 93.02 96.02 99.19 102.49 105.93 109.4 - 113.06 116.82 120.68 124.49 128.52 132.63 136.64 140.89 145.2 149.36 153.78 158.02 162.55 166.86 171.5 175.87 - 180.61 185.33 189.82 194.51 199.12 203.73 208.2 212.96 / - 5 1 11 1 59.15 61.67 64.68 67.87 71.18 74.58 78.1 81.72 85.46 89.31 93.28 97.63 - 102.14 106.62 111.24 115.97 120.67 125.62 130.55 135.57 140.66 145.84 151.09 156.41 161.77 167.19 172.71 178.29 - 183.61 189.3 195.04 200.84 206.31 212.21 218.18 223.74 / - 5 1 12 1 53.26 56.72 60.07 63.65 67.47 71.49 75.69 80.07 84.62 89.33 94.2 99.22 - 104.39 109.66 115.01 120.48 126.06 131.75 137.55 143.46 149.48 156.09 163.11 169.92 176.74 183.63 190.45 197.45 - 204.36 211.34 218.38 225.5 232.69 239.95 247.28 254.62 / - 5 1 13 1 48.91 53.75 58.12 62.6 67.34 72.41 77.84 83.59 89.61 95.87 102.35 109.04 - 115.92 122.98 130.22 137.62 145.19 152.91 160.79 168.81 176.9 185.02 193.2 201.42 209.73 218.13 226.64 235.24 - 244.8 254.47 264.35 273.93 283.52 293.38 303.09 312.64 / - 5 1 14 1 44.83 51.19 57.85 64.93 72.35 80.18 88.33 96.7 105.58 114.78 123.53 132.8 - 142.77 152.86 163.16 173.67 184.39 195.29 206.38 217.67 229.15 240.65 252.57 262.95 276.34 288.53 300.85 312.67 - 324.23 336.9 349.74 362.74 375.86 390.35 406.7 418.65 / - 5 1 15 1 41.26 53.24 65.67 77.89 90.09 101.84 114.33 127.47 139.66 153.75 168.17 182.19 - 195.49 210.7 225.75 241.64 257.63 273.7 290.11 306.62 323.89 341.79 360.07 378.66 397.42 416.15 434.71 454.37 - 474.34 494.64 515.28 536.28 558.98 581.56 604.88 628.37 / - 5 1 16 1 46.2 67.36 87.08 105.85 124.57 143.81 162.98 182.98 205.06 226.05 247.76 270.55 - 294.83 319.71 342.37 368.54 395.08 422.17 450.29 478.28 507.98 538.4 568.53 600.23 632.77 665.81 699.53 734.11 - 770.88 807.44 845.16 884.08 923.15 963.02 1003.35 1043.19 / - 5 1 17 1 63.9 94.72 126.18 156.35 186.73 218.31 251.58 285.24 321.15 359.89 398.3 439.42 - 481.08 525.64 571.33 616.31 665.36 716.35 768.86 823.18 879.25 936.22 996.51 1058.15 1119.25 1180.22 1237.65 1290.05 - 1333.57 1375.98 1424.54 1470.49 1521 1572.99 1624.43 1675.37 / - 5 1 18 1 91.32 141.89 191.57 243.07 296.43 353.04 413.35 477.6 545.87 617.55 692.88 773.09 - 857.74 946.91 1039.18 1133.45 1230.29 1319.7 1407.2 1496.83 1590.51 1686.26 1785.1 1885.76 1987.24 2089.32 2195.02 2303.31 - 2408.74 2520.39 2635.03 2749.87 2866.47 2984.59 3104.63 3229.24 / - 5 1 19 1 135.52 214.25 298.83 393.19 496.41 607.69 728.55 860.14 1005.05 1156.76 1302.11 1444.47 - 1588.69 1747.53 1901.35 2060.32 2232.13 2400.74 2572.23 2753.19 2933.83 3123.2 3316.89 3514.42 3711.58 3917.88 4130.13 4343.28 - 4566.24 4786.8 5019 5246.2 5485.57 5732.14 5966.88 6224.68 / - 5 1 20 1 204.88 327.03 475.7 664.56 878.72 1122.68 1369.16 1612.99 1871.47 2156.78 2437.85 2748.33 - 3058.94 3402.07 3745.98 4097.29 4496.02 4880.4 5273.63 5680.98 6105.63 6532.41 6982.42 7433.44 7910.66 8390.6 8891.84 9377.29 - 9905.25 10435.19 10978.14 11544.47 12118.31 12681.22 13287.93 13925.3 / - 5 2 1 1 203.16 202.98 203.04 203.24 203.54 203.93 204.39 204.92 205.52 206.18 206.91 207.69 - 208.54 209.44 210.4 211.42 212.49 213.62 214.81 216.05 217.35 218.71 220.12 221.58 223.1 224.68 226.31 227.99 - 229.73 231.52 233.37 235.27 237.22 239.23 241.3 243.41 / - 5 2 2 1 203.07 202.88 202.94 203.13 203.43 203.82 204.28 204.81 205.41 206.07 206.79 207.58 - 208.42 209.32 210.28 211.3 212.38 213.51 214.7 215.94 217.24 218.6 220.01 221.48 223 224.57 226.2 227.89 - 229.63 231.42 233.27 235.18 237.13 239.14 241.21 243.33 / - 5 2 3 1 202.91 202.7 202.74 202.93 203.22 203.61 204.07 204.6 205.19 205.85 206.58 207.36 - 208.21 209.11 210.07 211.09 212.17 213.3 214.49 215.73 217.04 218.39 219.81 221.27 222.8 224.38 226.01 227.7 - 229.44 231.24 233.09 234.99 236.95 238.97 241.04 243.16 / - 5 2 4 1 202.61 202.35 202.37 202.55 202.84 203.21 203.67 204.2 204.79 205.45 206.18 206.96 - 207.8 208.71 209.67 210.69 211.77 212.9 214.1 215.34 216.65 218.01 219.43 220.9 222.42 224.01 225.64 227.34 - 229.08 230.88 232.74 234.65 236.62 238.64 240.71 242.84 / - 5 2 5 1 202.03 201.69 201.66 201.8 202.07 202.43 202.87 203.39 203.98 204.64 205.36 206.14 - 206.99 207.89 208.86 209.88 210.96 212.1 213.3 214.55 215.86 217.23 218.65 220.13 221.67 223.26 224.91 226.61 - 228.36 230.18 232.05 233.97 235.95 237.98 240.07 242.21 / - 5 2 6 1 200 198.8 198.5 198.5 198.68 198.98 199.39 199.89 200.47 201.12 201.85 202.65 - 203.52 204.45 205.44 206.5 207.62 208.8 210.04 211.35 212.71 214.13 215.61 217.15 218.74 220.4 222.11 223.88 - 225.7 227.59 229.52 231.52 233.57 235.68 237.84 240.04 / - 5 2 7 1 193.29 189.23 188.46 188.27 188.34 188.6 189.01 189.54 190.18 190.92 191.76 192.67 - 193.67 194.74 195.89 197.11 198.4 199.77 201.16 202.65 204.21 205.83 207.52 209.26 211.07 212.94 214.87 216.86 - 218.9 221.01 223.17 225.39 227.64 229.97 232.35 234.79 / - 5 2 8 1 173.89 166.79 165.59 165.14 165.17 165.55 166.17 166.97 167.95 169.05 170.3 171.66 - 173.1 174.66 176.31 178.06 179.87 181.77 183.75 185.81 187.91 190.1 192.34 194.63 196.97 199.38 201.84 204.34 - 206.91 209.53 212.2 214.91 217.67 220.48 223.35 226.25 / - 5 2 9 1 133 123.8 122.73 122.86 123.69 124.99 126.61 128.49 130.56 132.83 135.2 137.69 - 140.37 143.07 145.85 148.71 151.83 154.85 157.88 161.01 164.14 167.69 170.94 174.27 177.59 180.98 184.36 188.21 - 191.69 195.18 198.72 202.27 205.86 209.47 213.68 217.36 / - 5 2 10 1 81.63 81.31 82.97 85.19 87.69 90.43 93.3 96.37 99.58 102.91 106.31 109.88 - 113.57 117.37 121.14 125.11 129.17 133.15 137.36 141.65 145.8 150.19 154.65 158.93 163.51 167.86 172.53 176.95 - 181.73 186.21 191 195.82 200.36 205.05 209.75 214.58 / - 5 2 11 1 59.27 61.85 64.87 68.09 71.42 74.86 78.42 82.08 85.86 89.75 93.76 98.04 - 102.67 107.23 111.87 116.6 121.42 126.29 131.39 136.45 141.59 146.82 152.11 157.48 162.89 168.36 173.93 179.27 - 184.94 190.68 196.48 202.34 207.86 213.82 219.41 225.47 / - 5 2 12 1 53.29 56.87 60.26 63.86 67.71 71.76 76 80.42 85.01 89.76 94.68 99.74 - 104.95 110.26 115.66 121.16 126.79 132.53 138.38 144.34 150.4 156.9 164 171.03 177.74 184.71 191.57 198.54 - 205.78 212.82 219.93 227.11 234.37 241.69 249.09 256.51 / - 5 2 13 1 48.81 53.81 58.26 62.8 67.59 72.7 78.17 83.96 90.01 96.32 102.84 109.57 - 116.5 123.61 130.9 138.35 145.97 153.74 161.67 169.74 177.87 186.04 194.28 202.55 210.91 219.37 227.93 236.59 - 245.93 255.67 265.74 275.39 285.28 294.99 304.74 314.65 / - 5 2 14 1 44.75 51.2 57.94 65.1 72.58 80.45 88.65 97.07 105.99 115.23 124.03 133.35 - 143.37 153.5 163.86 174.41 185.18 196.14 207.29 218.63 230.17 241.84 253.68 264.13 277.58 289.84 302.22 314.11 - 325.73 338.47 351.38 364.45 376.86 391.44 408.38 420.21 / - 5 2 15 1 41.23 53.27 65.78 78.02 90.31 102.09 115.21 127.8 140.27 154.17 168.64 182.71 - 196.07 211.38 226.48 242.38 258.43 274.97 291.01 307.57 324.89 342.84 361.18 379.84 398.49 417.09 436.14 455.87 - 475.92 496.3 517.02 538.1 560.01 583.17 606.68 630.39 / - 5 2 16 1 46.21 67.38 87.14 105.96 124.73 144.01 163.43 183.67 205.36 226.38 248.17 271.17 - 295.35 320.28 342.99 369.23 395.83 422.96 451.11 479.13 508.85 539.29 570.09 601.15 633.72 666.83 700.61 735.2 - 771.11 807.73 845.61 884.81 924.2 964.05 1004.08 1044.99 / - 5 2 17 1 63.82 94.73 126.19 156.43 187.26 218.47 251.74 285.58 321.33 360.07 398.52 440.19 - 481.36 525.92 571.62 616.6 665.59 716.52 769.03 823.39 879.52 936.42 996.37 1058.18 1119.99 1180.74 1238.51 1292.18 - 1333.52 1380.29 1428.05 1475.63 1525.57 1579.81 1631.85 1682.25 / - 5 2 18 1 91.18 141.76 191.54 243.15 296.76 353.31 413.49 477.65 545.82 617.48 692.66 772.69 - 857.16 946.21 1038.49 1132.81 1229.6 1320.29 1409.18 1500.68 1596.09 1685.77 1778.73 1872.2 1965 2060.32 2157.73 2259.05 - 2355.71 2460.48 2563.22 2671.92 2776.02 2884.77 2992.77 3109.37 / - 5 2 19 1 135.34 214.08 298.41 393.25 495.5 607.65 728.32 859.62 1001.23 1155.81 1301.62 1444.6 - 1589.4 1749.04 1904.87 2066 2240.08 2410.63 2584.03 2766.64 2948.78 3140.51 3336.13 3533.66 3735.14 3943.67 4155.25 4373.59 - 4599.99 4821.75 5056.22 5282.56 5527.84 5776.63 6014.57 6270.25 / - 5 2 20 1 204.68 326.91 473.98 661.52 878.35 1116.26 1364.25 1613.59 1872.95 2148.6 2441.82 2753.73 - 3065.91 3410.95 3756.57 4109.78 4512.42 4899.5 5300.41 5709.58 6142.66 6574.56 7029.72 7485.76 7968.24 8453.3 8959.53 9450.07 - 9983.1 10518.56 11067.4 11639.95 12219.86 12789.08 13402.13 14046.27 / - 5 3 1 1 205 204.8 204.86 205.05 205.35 205.74 206.2 206.74 207.33 208 208.72 209.51 - 210.35 211.26 212.22 213.24 214.31 215.45 216.64 217.89 219.19 220.55 221.96 223.43 224.96 226.54 228.17 229.86 - 231.61 233.4 235.26 237.17 239.13 241.15 243.22 245.34 / - 5 3 2 1 204.91 204.7 204.75 204.94 205.24 205.62 206.09 206.62 207.22 207.88 208.6 209.39 - 210.23 211.14 212.1 213.12 214.2 215.33 216.52 217.77 219.08 220.44 221.85 223.32 224.85 226.43 228.06 229.76 - 231.5 233.3 235.16 237.07 239.03 241.05 243.12 245.25 / - 5 3 3 1 204.74 204.51 204.55 204.73 205.03 205.41 205.87 206.4 206.99 207.66 208.38 209.16 - 210.01 210.91 211.88 212.9 213.98 215.11 216.31 217.56 218.86 220.22 221.64 223.11 224.64 226.22 227.86 229.55 - 231.3 233.11 234.96 236.88 238.85 240.87 242.94 245.07 / - 5 3 4 1 204.42 204.15 204.16 204.34 204.63 205 205.46 205.98 206.58 207.24 207.96 208.75 - 209.6 210.5 211.47 212.49 213.57 214.71 215.9 217.15 218.46 219.82 221.24 222.72 224.25 225.84 227.48 229.18 - 230.93 232.74 234.61 236.52 238.5 240.52 242.61 244.74 / - 5 3 5 1 203.79 203.42 203.38 203.52 203.78 204.14 204.58 205.1 205.69 206.35 207.07 207.85 - 208.7 209.6 210.57 211.6 212.68 213.82 215.02 216.28 217.6 218.97 220.4 221.88 223.42 225.02 226.67 228.38 - 230.14 231.96 233.84 235.77 237.76 239.8 241.89 244.05 / - 5 3 6 1 201.52 200.19 199.91 199.85 200.04 200.35 200.77 201.27 201.86 202.52 203.26 204.07 - 204.95 205.89 206.89 207.96 209.08 210.27 211.52 212.83 214.16 215.59 217.07 218.62 220.23 221.89 223.61 225.39 - 227.23 229.12 231.07 233.08 235.14 237.26 239.43 241.67 / - 5 3 7 1 194.45 190.16 189.33 189.12 189.18 189.44 189.85 190.39 191.04 191.78 192.62 193.55 - 194.56 195.65 196.81 198.05 199.36 200.74 202.18 203.7 205.28 206.92 208.63 210.4 212.19 214.09 216.04 218.05 - 220.12 222.25 224.43 226.67 228.98 231.33 233.74 236.2 / - 5 3 8 1 174.48 166.94 165.68 165.3 165.34 165.74 166.37 167.2 168.2 169.34 170.61 171.98 - 173.47 175.07 176.75 178.5 180.37 182.3 184.31 186.36 188.53 190.75 193.05 195.37 197.78 200.24 202.72 205.28 - 207.89 210.55 213.24 216 218.81 221.66 224.56 227.51 / - 5 3 9 1 132.9 123.6 122.61 122.77 123.63 124.97 126.61 128.53 130.62 132.88 135.33 137.85 - 140.48 143.3 146.11 149 151.99 155.23 158.3 161.47 164.64 167.89 171.47 174.8 178.2 181.61 185.08 188.55 - 192.52 196.05 199.65 203.24 206.89 210.55 214.84 218.56 / - 5 3 10 1 81.76 81.48 83.15 85.41 87.94 90.72 93.62 96.72 99.96 103.27 106.75 110.36 - 114.09 117.81 121.72 125.72 129.82 133.83 138.08 142.41 146.59 151.03 155.3 159.84 164.46 168.85 173.57 178.03 - 182.86 187.38 192.17 196.79 201.71 206.51 211.29 215.91 / - 5 3 11 1 59.39 62.04 65.06 68.3 71.67 75.14 78.73 82.43 86.25 90.18 94.23 98.45 - 103.19 107.84 112.5 117.3 122.16 127.07 132.08 137.17 142.35 147.79 153.14 158.33 163.8 169.31 174.88 180.55 - 186.28 192.07 197.92 203.46 209.42 215.44 221.08 227.2 / - 5 3 12 1 53.31 57.01 60.44 64.07 67.94 72.03 76.31 80.76 85.39 90.19 95.14 100.25 - 105.51 110.85 116.29 121.85 127.52 133.31 139.21 145.21 151.32 157.71 164.89 172.01 178.91 185.88 192.86 199.9 - 206.91 214 221.48 228.73 236.05 243.45 250.92 258.03 / - 5 3 13 1 48.71 53.86 58.4 63 67.84 72.99 78.49 84.31 90.42 96.76 103.33 110.11 - 117.08 124.24 131.57 139.08 146.74 154.56 162.54 170.66 178.84 187.06 195.35 203.67 212.08 220.6 229.22 237.94 - 246.76 256.87 266.77 276.85 286.75 296.61 306.42 316.38 / - 5 3 14 1 44.67 51.2 58.02 65.26 72.8 80.73 89.05 97.48 106.4 115.68 124.53 133.9 - 143.96 154.15 164.55 175.15 185.97 196.98 208.19 219.58 231.17 242.96 254.47 265.31 278.82 291.14 303.59 315.54 - 327.23 340.04 353.02 366.16 378.65 392.92 409.6 421.57 / - 5 3 15 1 41.2 53.3 65.85 78.15 90.67 102.77 115.5 128.12 140.91 154.6 169.1 183.23 - 196.65 212.04 227.24 243.12 259.22 275.81 291.9 308.82 325.89 343.89 362.27 381 399.73 418.42 437.55 457.37 - 477.49 497.95 518.75 539.91 561.44 584.24 607.91 631.9 / - 5 3 16 1 46.18 67.39 87.36 106.06 124.88 144.2 163.82 184.5 205.66 226.71 249.44 271.69 - 295.85 320.83 343.6 369.9 396.57 423.73 452.04 479.96 509.71 540.14 570.55 602.04 634.6 667.8 701.62 736.26 - 771.72 809.05 846.46 885.47 925.19 964.92 1005.32 1045.55 / - 5 3 17 1 63.73 94.7 126.2 156.51 187.38 218.89 251.9 286.58 322.41 360.24 398.72 440.4 - 481.6 526.16 571.87 616.83 665.78 716.63 769.05 823.5 879.64 936.54 995.69 1057.58 1119.95 1181.17 1239.49 1293.66 - 1337.06 1385.36 1433.52 1483.94 1536.25 1591.3 1644.9 1697.16 / - 5 3 18 1 91.04 141.84 191.49 243.22 296.89 353.48 413.63 477.7 545.76 617.38 692.4 772.29 - 856.51 945.37 1037.7 1132.08 1228.75 1317.03 1400.6 1488.15 1575.64 1666.26 1760.42 1856 1951.31 2048.12 2145.53 2247.78 - 2345.91 2450.38 2555.77 2663.92 2772.08 2879.7 2990.07 3106.52 / - 5 3 19 1 135.14 213.9 297.98 392.6 495.56 606.35 727.4 859.04 1000.35 1150.71 1301.02 1444.64 - 1590.06 1750.36 1907.01 2069.99 2246.59 2419.47 2597.78 2779.22 2964.25 3156.92 3354.27 3556.03 3759.87 3970.65 4184.53 4405.25 - 4634.03 4858.46 5095.25 5324.53 5572.24 5823.36 6064.53 6322.96 / - 5 3 20 1 204.48 326.8 471.41 658.19 873.16 1115.48 1363.85 1608.53 1874.45 2151.32 2445.88 2759.28 - 3073.05 3420.03 3767.4 4122.67 4527.52 4918.63 5325 5736.25 6176.69 6615.74 7076.67 7530.92 8018.76 8516.91 9019.41 9524.77 - 10053.52 10604.56 11160.15 11729.67 12325.97 12901.83 13521.89 14157.8 / - 5 4 1 1 206.83 206.62 206.67 206.87 207.16 207.55 208.01 208.54 209.14 209.81 210.53 211.32 - 212.16 213.07 214.03 215.05 216.13 217.27 218.46 219.71 221.02 222.38 223.8 225.27 226.8 228.39 230.03 231.72 - 233.47 235.28 237.14 239.05 241.02 243.05 245.13 247.26 / - 5 4 2 1 206.73 206.52 206.56 206.75 207.05 207.43 207.89 208.42 209.02 209.68 210.41 211.19 - 212.04 212.95 213.91 214.93 216.01 217.15 218.34 219.59 220.9 222.26 223.68 225.16 226.69 228.28 229.92 231.61 - 233.37 235.17 237.03 238.95 240.92 242.95 245.03 247.17 / - 5 4 3 1 206.56 206.32 206.35 206.53 206.82 207.21 207.66 208.19 208.79 209.45 210.18 210.96 - 211.81 212.72 213.68 214.7 215.78 216.92 218.12 219.37 220.68 222.04 223.46 224.94 226.47 228.06 229.71 231.41 - 233.16 234.97 236.83 238.75 240.73 242.76 244.84 246.98 / - 5 4 4 1 206.22 205.94 205.95 206.13 206.41 206.79 207.24 207.77 208.36 209.02 209.75 210.53 - 211.38 212.29 213.25 214.28 215.36 216.5 217.7 218.95 220.26 221.63 223.06 224.54 226.07 227.67 229.31 231.02 - 232.78 234.59 236.46 238.39 240.37 242.4 244.49 246.64 / - 5 4 5 1 205.53 205.14 205.07 205.2 205.45 205.8 206.24 206.76 207.34 208 208.72 209.5 - 210.35 211.26 212.23 213.25 214.34 215.49 216.69 217.95 219.27 220.65 222.08 223.58 225.12 226.73 228.39 230.1 - 231.88 233.71 235.59 237.53 239.53 241.58 243.69 245.85 / - 5 4 6 1 203.04 201.59 201.15 201.15 201.33 201.63 202.05 202.55 203.14 203.81 204.55 205.36 - 206.23 207.18 208.19 209.26 210.4 211.6 212.86 214.19 215.57 217.02 218.52 220.08 221.71 223.39 225.13 226.93 - 228.78 230.68 232.61 234.63 236.71 238.84 241.03 243.28 / - 5 4 7 1 195.58 190.87 190.07 189.86 189.94 190.21 190.63 191.18 191.84 192.6 193.46 194.4 - 195.42 196.53 197.71 198.93 200.26 201.66 203.12 204.65 206.25 207.92 209.65 211.44 213.29 215.21 217.19 219.23 - 221.29 223.44 225.65 227.92 230.25 232.63 235.07 237.56 / - 5 4 8 1 174.28 167.11 165.75 165.33 165.43 165.84 166.49 167.35 168.38 169.55 170.82 172.24 - 173.77 175.4 177.13 178.91 180.8 182.78 184.83 186.92 189.11 191.36 193.68 196.06 198.52 201.03 203.57 206.17 - 208.82 211.51 214.25 217.06 219.9 222.79 225.74 228.73 / - 5 4 9 1 132.56 123.45 122.45 122.65 123.57 124.91 126.58 128.53 130.69 132.98 135.4 138.01 - 140.68 143.44 146.39 149.31 152.31 155.37 158.73 161.93 165.14 168.44 171.74 175.41 178.83 182.26 185.77 189.29 - 193.32 196.91 200.55 204.2 207.9 211.61 215.37 219.75 / - 5 4 10 1 81.91 81.66 83.33 85.63 88.19 90.97 93.94 97.07 100.29 103.68 107.2 110.84 - 114.5 118.35 122.29 126.33 130.31 134.52 138.8 142.96 147.38 151.86 156.17 160.76 165.15 169.85 174.31 179.11 - 183.65 188.55 193.39 198.02 202.96 207.88 212.79 217.5 / - 5 4 11 1 59.53 62.23 65.25 68.51 71.91 75.42 79.04 82.78 86.64 90.61 94.7 98.9 - 103.69 108.38 113.07 117.92 122.82 127.86 132.91 138.05 143.27 148.57 153.95 159.4 164.92 170.48 176.1 181.82 - 187.61 193.46 199.01 204.96 210.98 217.05 222.75 228.94 / - 5 4 12 1 53.34 57.14 60.63 64.27 68.17 72.29 76.61 81.1 85.77 90.61 95.61 100.76 - 106.06 111.45 116.93 122.53 128.25 134.09 140.03 146.09 152.25 158.51 165.75 172.99 179.9 187.03 194 201.07 - 208.33 215.48 222.7 230 237.38 244.82 252.33 259.93 / - 5 4 13 1 48.63 53.91 58.54 63.2 68.09 73.27 78.81 84.67 90.81 97.2 103.82 110.64 - 117.66 124.87 132.25 139.8 147.51 155.39 163.41 171.59 179.82 188.09 196.42 204.79 213.26 221.83 230.51 239.28 - 248.16 258.06 268.07 278.08 288.22 298.14 308.1 318.11 / - 5 4 14 1 44.62 51.21 58.1 65.42 73.02 81 89.37 97.85 106.81 116.13 125.11 134.47 - 144.55 154.79 165.24 175.89 186.75 197.82 209.08 220.54 232.18 244.03 255.58 266.48 280.05 292.44 304.95 316.98 - 328.73 341.61 354.66 367.87 380.43 393.94 411.18 423.29 / - 5 4 15 1 41.1 53.33 65.92 78.28 90.85 102.69 115.92 128.45 141.29 155.03 169.57 183.74 - 197.21 212.66 227.92 243.86 260.01 276.65 292.79 309.83 326.88 344.92 363.34 382.14 401.22 419.72 438.94 458.84 - 479.04 499.58 520.46 541.69 563.3 585.23 609.01 633.24 / - 5 4 16 1 46.15 67.39 87.47 106.3 125.23 144.4 164.62 184.29 205.94 227.04 249.21 272.12 - 296.34 321.36 344.19 370.54 397.28 424.51 452.81 480.77 510.53 540.98 571.48 602.9 635.43 668.7 702.59 737.26 - 772.75 809.15 846.63 885.82 925.82 965.91 1006.13 1046.81 / - 5 4 17 1 63.64 94.64 126.35 156.85 187.5 219.04 252.06 286.89 322.91 360.4 398.9 440.57 - 481.8 526.36 572.07 618.36 665.9 716.65 769.19 823.46 879.65 936.55 995.66 1057.26 1119.89 1181.23 1240.37 1295.54 - 1340.57 1390.5 1440.38 1492.47 1546.41 1602.07 1659.25 1713.41 / - 5 4 18 1 90.9 141.76 191.44 243.29 297.01 353.63 413.87 477.74 545.68 617.24 692.12 771.79 - 855.81 944.46 1036.76 1131.23 1227.71 1316.86 1401.4 1489.9 1578.94 1669.62 1764.6 1860.5 1957.63 2055.44 2154.31 2258.79 - 2356.59 2462.28 2569.05 2678.47 2787.89 2898.76 3010.84 3132.54 / - 5 4 19 1 134.94 213.72 297.57 392.61 494.55 606.25 727.12 858.47 999.07 1149.56 1300.33 1444.56 - 1590.64 1751.61 1909.03 2072.88 2251.06 2426.68 2608.43 2791.73 2978.24 3174.78 3374.75 3579.16 3785.71 3996.48 4215.39 4435.69 - 4669.77 4893.93 5136.28 5368.79 5615.28 5872.59 6117.09 6378.48 / - 5 4 20 1 204.26 326.68 468.83 654.86 868.49 1108.93 1358.83 1604.89 1876.01 2154.11 2450.06 2764.99 - 3080.44 3429.45 3778.53 4136.01 4510.66 4940.21 5346.46 5763.57 6208.52 6649.71 7116.67 7582.7 8076.46 8581.01 9089.45 9600.77 - 10135.47 10693.02 11255.76 11832.51 12436.14 13019.39 13646.87 14290.52 / - 5 5 1 1 208.72 208.47 208.51 208.69 208.99 209.37 209.83 210.36 210.96 211.62 212.34 213.13 - 213.98 214.88 215.85 216.87 217.95 219.09 220.29 221.54 222.85 224.21 225.64 227.11 228.65 230.24 231.88 233.58 - 235.34 237.15 239.02 240.94 242.91 244.95 247.03 249.17 / - 5 5 2 1 208.62 208.36 208.39 208.57 208.86 209.24 209.7 210.23 210.83 211.49 212.22 213 - 213.85 214.76 215.72 216.74 217.83 218.97 220.16 221.41 222.72 224.09 225.51 226.99 228.53 230.12 231.77 233.47 - 235.22 237.04 238.91 240.83 242.81 244.84 246.93 249.07 / - 5 5 3 1 208.43 208.15 208.17 208.35 208.64 209.01 209.47 210 210.59 211.25 211.98 212.76 - 213.61 214.52 215.48 216.51 217.59 218.73 219.93 221.18 222.49 223.86 225.29 226.77 228.3 229.9 231.55 233.25 - 235.01 236.82 238.7 240.62 242.6 244.64 246.73 248.88 / - 5 5 4 1 208.08 207.76 207.76 207.93 208.21 208.58 209.03 209.56 210.15 210.81 211.54 212.32 - 213.17 214.08 215.04 216.07 217.15 218.3 219.5 220.75 222.07 223.44 224.87 226.35 227.89 229.49 231.14 232.85 - 234.61 236.43 238.31 240.24 242.23 244.27 246.37 248.52 / - 5 5 5 1 207.3 206.84 206.75 206.86 207.11 207.45 207.88 208.4 208.98 209.63 210.35 211.14 - 211.99 212.9 213.87 214.9 215.99 217.14 218.34 219.61 220.94 222.32 223.76 225.25 226.81 228.42 230.08 231.81 - 233.59 235.43 237.32 239.27 241.27 243.33 245.45 247.62 / - 5 5 6 1 204.55 202.97 202.47 202.46 202.62 202.92 203.33 203.83 204.42 205.09 205.83 206.64 - 207.53 208.48 209.49 210.57 211.72 212.92 214.19 215.52 216.91 218.36 219.87 221.45 223.08 224.77 226.52 228.32 - 230.19 232.12 234.1 236.14 238.24 240.39 242.6 244.87 / - 5 5 7 1 196.22 191.68 190.82 190.59 190.66 190.92 191.34 191.9 192.56 193.33 194.2 195.15 - 196.19 197.3 198.5 199.77 201.12 202.54 204.03 205.59 207.21 208.85 210.61 212.42 214.31 216.25 218.25 220.31 - 222.43 224.61 226.85 229.15 231.5 233.89 236.36 238.88 / - 5 5 8 1 174.79 167.04 165.76 165.34 165.44 165.87 166.55 167.43 168.48 169.67 170.98 172.43 - 173.99 175.66 177.42 179.24 181.17 183.19 185.25 187.41 189.64 191.94 194.27 196.69 199.19 201.7 204.32 206.99 - 209.68 212.43 215.23 218.06 220.95 223.89 226.88 229.91 / - 5 5 9 1 132.68 123.19 122.36 122.58 123.5 124.88 126.57 128.54 130.7 133.06 135.54 138.12 - 140.88 143.68 146.67 149.64 152.68 155.77 159.17 162.39 165.66 169 172.34 176.06 179.52 182.99 186.51 190.04 - 193.66 197.75 201.44 205.14 208.9 212.66 216.47 220.3 / - 5 5 10 1 81.99 81.84 83.51 85.8 88.44 91.24 94.25 97.37 100.68 104.11 107.66 111.25 - 115.03 118.91 122.89 126.83 130.98 135.21 139.35 143.73 148.19 152.49 157.05 161.68 166.11 170.85 175.35 180.2 - 184.77 189.73 194.37 199.28 204.25 208.99 213.99 219.03 / - 5 5 11 1 59.67 62.43 65.45 68.74 72.17 75.71 79.37 83.15 87.05 91.07 95.2 99.44 - 104.22 108.96 113.74 118.63 123.57 128.65 133.75 138.93 144.2 149.54 154.97 160.47 166.04 171.65 177.32 183.1 - 188.94 194.5 200.45 206.45 212.53 218.25 224.43 230.67 / - 5 5 12 1 53.38 57.29 60.83 64.51 68.44 72.59 76.94 81.47 86.17 91.05 96.09 101.28 - 106.62 112.05 117.57 123.22 128.98 134.86 140.85 146.96 153.16 159.47 166.59 173.96 181.06 188.07 195.28 202.41 - 209.74 216.96 224.25 231.61 239.05 246.57 254.16 261.82 / - 5 5 13 1 48.58 53.97 58.69 63.41 68.35 73.58 79.14 85.04 91.22 97.65 104.31 111.18 - 118.24 125.49 132.92 140.52 148.28 156.2 164.28 172.5 180.78 189.1 197.48 205.91 214.43 223.05 231.78 240.62 - 249.56 258.91 269.31 279.44 289.5 299.67 309.78 319.86 / - 5 5 14 1 44.58 51.24 58.2 65.59 73.25 81.28 89.69 98.23 107.22 116.58 126.09 135.05 - 145.14 155.42 165.92 176.62 187.53 198.64 209.96 221.48 233.18 245.08 256.69 267.65 281.28 293.73 306.31 318.4 - 329.55 343.17 356.28 369.56 382.19 395.78 412.27 424.45 / - 5 5 15 1 41.09 53.4 66 78.4 91.04 103.36 116.2 128.77 142.3 155.45 170.03 183.38 - 197.78 213.28 228.6 244.59 260.79 277.48 293.68 310.77 327.86 345.95 364.41 383.26 402.34 421 440.3 460.28 - 480.57 501.18 522.13 543.44 565.11 587.11 610.02 634.35 / - 5 5 16 1 46.16 67.38 87.51 106.66 125.55 144.59 164.84 185.35 206.22 227.36 250.72 272.55 - 296.81 321.88 344.77 371.16 398.04 425.31 453.56 481.55 511.32 541.77 572.66 603.72 636.23 669.51 703.51 738.22 - 773.72 809.65 847.22 886.56 926.39 966.45 1007.16 1047.61 / - 5 5 17 1 63.56 94.67 126.34 157.02 187.61 219.17 252.22 287.12 323.13 360.54 399.05 440.7 - 481.97 526.53 572.23 617.48 665.98 716.62 769.07 823.25 879.52 936.45 995.54 1056.3 1119.16 1181.14 1240.67 1297.19 - 1344.27 1395.68 1447.39 1501.9 1556.78 1613.09 1673.11 1729.14 / - 5 5 18 1 90.74 141.74 191.34 243.42 297.12 353.77 414 477.78 545.59 617.08 691.93 771.24 - 855.02 943.47 1035.65 1130.24 1225.85 1316.51 1401.69 1491.89 1581.2 1673.43 1769.85 1866.81 1965.11 2064.18 2162.77 2270.1 - 2369.22 2476.24 2584.39 2693.51 2806.16 2918.54 3032.34 3154.38 / - 5 5 19 1 134.73 213.54 297.15 391.88 494.59 606.18 725.65 856.42 998.09 1148.35 1300.09 1444.39 - 1591.08 1752.77 1911 2075.74 2247.76 2431.74 2616.71 2802.27 2991.86 3190.75 3394.38 3601.72 3808.94 4025.96 4246.93 4470.34 - 4707.12 4934.71 5179.69 5415.43 5664.77 5924.69 6172.68 6436.96 / - 5 5 20 1 204.04 326.58 465.5 651.52 863.25 1108.07 1353.15 1605.33 1865.56 2156.96 2454.39 2751.42 - 3088.13 3417.91 3790.25 4149.92 4526.91 4955.5 5367.75 5787.95 6234.6 6684.76 7160.38 7633.12 8133.35 8637.06 9159.87 9668.3 - 10218.85 10773.06 11353.64 11938.58 12536.37 13141.34 13776.86 14428.67 / - 5 6 1 1 210.83 210.45 210.43 210.59 210.86 211.23 211.68 212.21 212.8 213.46 214.18 214.96 - 215.81 216.71 217.68 218.7 219.78 220.92 222.12 223.37 224.69 226.05 227.48 228.96 230.5 232.09 233.74 235.44 - 237.2 239.02 240.89 242.82 244.8 246.84 248.94 251.09 / - 5 6 2 1 210.73 210.34 210.31 210.46 210.74 211.11 211.55 212.08 212.67 213.33 214.05 214.83 - 215.68 216.58 217.55 218.57 219.65 220.79 221.99 223.25 224.56 225.93 227.35 228.83 230.37 231.97 233.62 235.32 - 237.09 238.9 240.78 242.71 244.69 246.73 248.83 250.98 / - 5 6 3 1 210.54 210.12 210.09 210.23 210.5 210.87 211.31 211.83 212.42 213.08 213.8 214.59 - 215.43 216.34 217.3 218.33 219.41 220.55 221.75 223 224.32 225.69 227.12 228.6 230.14 231.74 233.39 235.1 - 236.86 238.68 240.56 242.49 244.48 246.52 248.62 250.78 / - 5 6 4 1 210.18 209.72 209.66 209.8 210.06 210.42 210.86 211.38 211.97 212.63 213.35 214.13 - 214.98 215.88 216.85 217.88 218.96 220.1 221.3 222.56 223.88 225.25 226.68 228.17 229.71 231.31 232.97 234.68 - 236.45 238.28 240.16 242.1 244.09 246.14 248.24 250.4 / - 5 6 5 1 209.3 208.67 208.51 208.59 208.8 209.13 209.56 210.06 210.64 211.29 212 212.79 - 213.63 214.54 215.51 216.54 217.63 218.79 220 221.26 222.59 223.98 225.42 226.93 228.49 230.1 231.78 233.51 - 235.3 237.14 239.04 241 243.02 245.09 247.22 249.4 / - 5 6 6 1 206.32 204.23 203.83 203.76 203.89 204.17 204.57 205.06 205.64 206.31 207.05 207.86 - 208.74 209.7 210.72 211.81 212.96 214.17 215.45 216.8 218.2 219.67 221.2 222.78 224.43 226.14 227.91 229.73 - 231.62 233.55 235.55 237.6 239.71 241.88 244.11 246.39 / - 5 6 7 1 197.58 192.42 191.56 191.3 191.34 191.6 192.02 192.57 193.25 194.02 194.9 195.87 - 196.92 198.05 199.27 200.56 201.92 203.36 204.85 206.43 208.07 209.78 211.56 213.4 215.31 217.28 219.31 221.36 - 223.51 225.71 227.98 230.31 232.69 235.13 237.63 240.18 / - 5 6 8 1 175.53 167.08 165.75 165.31 165.41 165.85 166.54 167.44 168.51 169.74 171.07 172.55 - 174.14 175.85 177.61 179.5 181.48 183.53 185.63 187.84 190.12 192.42 194.83 197.29 199.82 202.37 205 207.73 - 210.48 213.27 216.15 219.03 221.97 224.96 227.99 231.07 / - 5 6 9 1 132.48 123.07 122.27 122.49 123.45 124.84 126.55 128.55 130.76 133.11 135.64 138.27 - 141.09 143.94 146.86 149.95 153.03 156.17 159.38 162.87 166.19 169.54 172.94 176.41 180.23 183.74 187.32 190.9 - 194.54 198.64 202.35 206.09 209.89 213.7 217.57 221.45 / - 5 6 10 1 82.16 81.98 83.66 86.01 88.67 91.56 94.58 97.77 101.11 104.51 108.08 111.77 - 115.57 119.48 123.37 127.46 131.64 135.91 140.08 144.5 148.99 153.33 157.93 162.35 167.06 171.85 176.39 181.29 - 185.9 190.9 195.59 200.55 205.31 210.36 215.35 220.41 / - 5 6 11 1 59.81 62.63 65.68 69.01 72.47 76.06 79.76 83.58 87.51 91.56 95.72 100 - 104.7 109.55 114.35 119.29 124.33 129.33 134.59 139.82 145.13 150.52 155.99 161.54 167.16 172.82 178.54 184.37 - 189.94 195.88 201.88 207.95 213.68 219.85 226.1 231.94 / - 5 6 12 1 53.42 57.46 61.06 64.77 68.74 72.93 77.31 81.88 86.62 91.53 96.6 101.83 - 107.2 112.66 118.22 123.91 129.72 135.64 141.67 147.82 154.07 160.43 167.43 174.7 182.07 189.09 196.4 203.57 - 210.86 218.12 225.79 233.22 240.73 248.31 255.98 263.72 / - 5 6 13 1 48.53 54.04 58.85 63.64 68.64 73.91 79.51 85.44 91.66 98.12 104.82 111.72 - 118.83 126.12 133.59 141.23 149.04 157.01 165.13 173.4 181.73 190.1 198.53 207.01 215.58 224.26 233.05 241.94 - 250.94 260.03 270.2 280.47 291 301.18 311.37 321.59 / - 5 6 14 1 44.55 51.29 58.33 65.78 73.49 81.57 90.03 98.65 107.63 117.03 126.43 135.61 - 145.72 156.05 166.59 177.34 188.3 199.46 210.82 222.39 234.15 246.11 257.77 268.79 282.48 295 307.65 319.8 - 331.01 344.7 357.89 371.24 383.93 397.6 413.29 425.55 / - 5 6 15 1 41.08 53.46 66.1 78.75 91.23 103.75 116.47 129.09 142.66 155.86 170.48 183.88 - 198.33 213.87 229.26 245.31 261.56 278.3 294.54 311.68 328.82 346.95 365.45 384.35 402.9 422.02 441.61 461.68 - 482.05 502.74 523.77 545.15 566.87 588.95 611.42 635.35 / - 5 6 16 1 46.12 67.37 87.55 106.76 125.69 144.8 165.06 185.67 206.49 227.67 251.06 272.93 - 297.26 322.38 346.93 371.75 398.83 426 454.28 482.29 512.07 542.53 573.72 604.48 636.98 670.23 704.33 739.13 - 774.66 810.04 847.17 886.58 926.59 966.99 1007.58 1048.26 / - 5 6 17 1 63.47 94.6 126.34 157.07 187.72 219.31 252.38 287.27 323.28 360.66 399.18 440.81 - 482.09 526.65 572.34 618.9 665.99 716.52 768.84 823 879.2 936.19 995.29 1055.61 1118.69 1180.59 1241.37 1298.63 - 1347.54 1400.87 1454.47 1510.64 1567.3 1625.51 1687.22 1746.24 / - 5 6 18 1 90.59 141.76 191.26 243.46 297.33 354.05 414.12 477.95 545.49 616.88 691.57 770.66 - 854.19 942.38 1034.38 1129.09 1224.99 1315.85 1401.02 1491.34 1582.23 1675.46 1772.78 1870.62 1970.16 2070.3 2171.33 2278.22 - 2380.42 2488.7 2598.12 2708.87 2822.95 2936.76 3052.16 3175.52 / - 5 6 19 1 134.52 213.34 296.76 391.83 494.59 604.73 725.34 855.55 997.08 1147.06 1300.47 1439.8 - 1591.43 1745.82 1912.91 2078.61 2251.56 2436.72 2623.47 2809.89 3001.75 3204.15 3410.01 3620.53 3833.47 4054.31 4275.33 4505.06 - 4745.09 4976.26 5220.88 5463.73 5716.58 5975.14 6231.27 6498.91 / - 5 6 20 1 203.82 326.49 461.99 648.54 862.23 1101.43 1352.54 1602.18 1867.13 2145.55 2441.88 2757.68 - 3096.15 3427.86 3802.55 4166.33 4543.94 4978.88 5390.09 5813.14 6258.62 6715.64 7194.13 7678 8180.69 8699.14 9220.14 9745.21 - 10302.9 10864.92 11442.87 12047.04 12653.93 13263.06 13911.72 14572.43 / - 5 7 1 1 212.95 212.44 212.36 212.49 212.74 213.1 213.54 214.05 214.64 215.29 216.01 216.79 - 217.64 218.54 219.51 220.53 221.61 222.75 223.95 225.2 226.52 227.89 229.31 230.8 232.34 233.93 235.59 237.3 - 239.06 240.88 242.76 244.7 246.68 248.73 250.83 252.99 / - 5 7 2 1 212.85 212.32 212.24 212.36 212.61 212.97 213.4 213.92 214.51 215.16 215.88 216.66 - 217.5 218.41 219.37 220.39 221.47 222.61 223.81 225.07 226.38 227.75 229.18 230.67 232.21 233.81 235.46 237.17 - 238.94 240.76 242.64 244.58 246.57 248.61 250.72 252.87 / - 5 7 3 1 212.65 212.1 212 212.12 212.37 212.72 213.16 213.67 214.25 214.91 215.62 216.4 - 217.25 218.15 219.12 220.14 221.22 222.36 223.56 224.82 226.14 227.51 228.94 230.42 231.97 233.57 235.22 236.94 - 238.71 240.53 242.41 244.35 246.35 248.4 250.5 252.66 / - 5 7 4 1 212.27 211.68 211.57 211.67 211.92 212.26 212.7 213.21 213.79 214.44 215.16 215.94 - 216.78 217.69 218.65 219.68 220.76 221.9 223.11 224.37 225.68 227.06 228.49 229.98 231.53 233.13 234.79 236.51 - 238.28 240.11 242 243.94 245.94 248 250.11 252.28 / - 5 7 5 1 211.29 210.5 210.26 210.28 210.46 210.75 211.17 211.66 212.24 212.88 213.6 214.38 - 215.23 216.14 217.12 218.15 219.25 220.4 221.62 222.9 224.23 225.63 227.08 228.59 230.16 231.79 233.47 235.22 - 237.01 238.86 240.77 242.74 244.76 246.84 248.97 251.17 / - 5 7 6 1 208.05 205.65 205.05 204.96 205.08 205.36 205.75 206.24 206.83 207.5 208.24 209.06 - 209.96 210.92 211.95 213.05 214.21 215.44 216.73 218.09 219.5 220.98 222.47 224.06 225.72 227.44 229.22 231.06 - 232.95 234.91 236.93 239 241.13 243.32 245.57 247.88 / - 5 7 7 1 198.72 193.16 192.23 191.91 191.95 192.2 192.62 193.18 193.86 194.64 195.53 196.5 - 197.56 198.71 199.95 201.26 202.65 204.08 205.61 207.21 208.88 210.62 212.43 214.3 216.2 218.2 220.26 222.38 - 224.56 226.79 229.09 231.42 233.83 236.31 238.83 241.41 / - 5 7 8 1 176.26 167.04 165.6 165.19 165.3 165.74 166.45 167.37 168.35 169.58 170.95 172.42 - 174.03 175.75 177.78 179.68 181.69 183.79 185.93 188.19 190.5 192.86 195.31 197.82 200.37 203 205.68 208.42 - 211.18 214.06 216.99 219.94 222.95 225.99 229.06 232.19 / - 5 7 9 1 132.27 122.96 122.14 122.43 123.4 124.83 126.57 128.59 130.8 133.2 135.71 138.4 - 141.17 144.14 147.11 150.17 153.39 156.57 159.8 163.36 166.72 170.11 173.56 177.05 180.94 184.54 188.13 191.76 - 195.46 199.15 203.39 207.14 210.96 214.78 218.69 222.61 / - 5 7 10 1 82.33 82.18 83.85 86.27 88.98 91.91 94.95 98.17 101.48 104.96 108.56 112.27 - 116.11 119.94 123.96 128.09 132.3 136.44 140.81 145.26 149.58 154.16 158.8 163.27 168.02 172.57 177.44 182.06 - 187.04 191.73 196.82 201.83 206.63 211.73 216.78 221.67 / - 5 7 11 1 59.95 62.85 65.94 69.31 72.81 76.43 80.16 84.01 87.97 92.06 96.25 100.56 - 105.17 110.14 115.02 119.97 125 130.12 135.29 140.54 146.05 151.49 157.01 162.6 168.03 173.75 179.51 185.34 - 191.26 197.25 203.32 209.44 215.23 221.47 227.77 233.68 / - 5 7 12 1 53.46 57.62 61.3 65.05 69.06 73.28 77.69 82.29 87.07 92.01 97.12 102.38 - 107.79 113.28 118.88 124.61 130.45 136.42 142.49 148.69 154.98 161.38 168.06 175.6 182.94 190.3 197.51 204.9 - 212.26 219.58 226.99 234.47 242.03 249.67 257.38 265.17 / - 5 7 13 1 48.5 54.13 59.03 63.89 68.94 74.25 79.88 85.84 92.09 98.6 105.33 112.27 - 119.42 126.75 134.26 141.94 149.79 157.81 165.97 174.29 182.67 191.09 199.57 208.1 216.73 225.46 234.3 243.25 - 252.31 261.46 271.05 281.74 292.15 302.49 312.94 323.33 / - 5 7 14 1 44.53 51.35 58.46 65.99 73.76 81.88 90.36 99.04 108.05 117.48 126.63 136.14 - 146.29 156.66 167.25 178.04 189.04 200.25 211.66 223.28 235.1 247.11 259.27 271.18 283.67 296.25 308.96 321.18 - 334.16 346.22 359.47 372.9 385.65 399.39 415.17 426.57 / - 5 7 15 1 41.08 53.51 66.2 78.89 91.43 104.09 116.78 129.4 143 156.26 170.92 184.37 - 198.85 214.45 229.95 246 262.31 279.09 295.39 312.23 329.75 347.92 366.46 385.39 404.7 423.86 442.87 463.03 - 483.48 504.24 525.35 546.8 568.59 590.73 613.27 636.21 / - 5 7 16 1 46.09 67.36 87.59 106.85 125.82 144.97 165.27 185.91 206.75 227.96 251.39 273.28 - 297.69 322.85 346.2 372.31 399.44 426.65 454.96 483.11 512.78 543.24 574.43 605.19 637.68 670.86 704.98 739.89 - 775.49 811 847.49 886.44 926.61 967.28 1008.14 1049.27 / - 5 7 17 1 63.37 94.51 126.34 157.13 187.83 219.84 252.53 287.41 323.41 360.78 399.28 440.89 - 482.16 526.73 572.44 619.35 665.95 716.36 768.54 822.56 878.66 935.74 994.87 1055.19 1117.43 1180.3 1241.53 1299.25 - 1350.98 1406.25 1461.51 1519.46 1578.89 1638.07 1701.44 1762.76 / - 5 7 18 1 90.44 141.77 191.18 243.49 297.42 354.16 414.28 478 545.37 616.65 691.17 770.03 - 853.28 941.21 1032.95 1127.73 1223.95 1316.2 1401.87 1493.16 1585.18 1679.56 1777.99 1876.98 1977.81 2079.3 2181.75 2289.96 - 2393.8 2503.55 2614.46 2726.8 2841.49 2958.02 3075.2 3200.03 / - 5 7 19 1 134.31 213.15 296.26 390.91 493.46 604.66 723.87 853.41 996.05 1145.7 1299.18 1439.14 - 1592.94 1746.72 1914.7 2081.38 2255.37 2441.64 2629.66 2817.34 3011.58 3213.25 3423.4 3637.92 3854.99 4081.59 4304.94 4538.4 - 4778.96 5017.41 5266.09 5512.77 5769.42 6031.79 6291.84 6563.27 / - 5 7 20 1 203.59 326.42 458.32 645.29 857.5 1094.14 1344.72 1599.67 1868.73 2148.56 2446.53 2764.21 - 3104.51 3438.34 3815.46 4182.44 4561.83 4959.88 5413.58 5839.68 6288.14 6744.58 7228.39 7725.44 8231.59 8750.43 9287.21 9820.78 - 10376.27 10956.95 11543.84 12157.35 12773.96 13392.77 14050.98 14721.29 / - 5 8 1 1 215.07 214.42 214.29 214.38 214.62 214.96 215.39 215.9 216.48 217.13 217.84 218.62 - 219.46 220.37 221.33 222.35 223.43 224.57 225.77 227.03 228.34 229.71 231.14 232.63 234.17 235.77 237.43 239.14 - 240.91 242.74 244.62 246.56 248.56 250.61 252.71 254.88 / - 5 8 2 1 214.96 214.3 214.16 214.25 214.48 214.82 215.25 215.76 216.34 216.99 217.7 218.48 - 219.32 220.22 221.19 222.21 223.29 224.43 225.63 226.89 228.2 229.58 231.01 232.49 234.04 235.64 237.3 239.01 - 240.78 242.61 244.49 246.43 248.43 250.48 252.59 254.76 / - 5 8 3 1 214.75 214.07 213.92 214 214.23 214.57 215 215.5 216.08 216.73 217.44 218.22 - 219.06 219.96 220.93 221.95 223.03 224.17 225.37 226.63 227.95 229.32 230.75 232.24 233.79 235.39 237.05 238.77 - 240.54 242.37 244.26 246.2 248.2 250.26 252.37 254.54 / - 5 8 4 1 214.37 213.64 213.47 213.55 213.77 214.1 214.52 215.03 215.6 216.25 216.96 217.74 - 218.58 219.48 220.45 221.47 222.56 223.7 224.9 226.16 227.48 228.86 230.29 231.78 233.33 234.94 236.61 238.33 - 240.1 241.94 243.83 245.78 247.78 249.85 251.96 254.14 / - 5 8 5 1 213.25 212.25 211.86 211.85 212.02 212.31 212.71 213.2 213.76 214.4 215.12 215.9 - 216.74 217.65 218.62 219.66 220.76 221.92 223.14 224.42 225.75 227.15 228.61 230.13 231.7 233.34 235.03 236.78 - 238.59 240.45 242.37 244.36 246.39 248.49 250.64 252.85 / - 5 8 6 1 209.75 207.01 206.29 206.16 206.24 206.49 206.87 207.36 207.93 208.6 209.34 210.17 - 211.06 212.03 213.06 214.16 215.33 216.56 217.86 219.22 220.65 222.14 223.69 225.3 226.98 228.71 230.51 232.37 - 234.29 236.26 238.3 240.4 242.52 244.73 247 249.32 / - 5 8 7 1 200 193.82 192.8 192.46 192.47 192.7 193.11 193.67 194.36 195.15 196.05 197.04 - 198.12 199.29 200.54 201.86 203.27 204.75 206.3 207.92 209.62 211.38 213.21 215.09 217.05 219.08 221.16 223.31 - 225.52 227.78 230.11 232.49 234.94 237.44 240.01 242.63 / - 5 8 8 1 176.16 166.92 165.37 164.95 165.06 165.53 166.16 167.08 168.18 169.44 170.84 172.37 - 173.99 175.74 177.6 179.52 181.56 183.68 186.15 188.44 190.81 193.21 195.71 198.27 200.87 203.55 206.28 209.05 - 211.89 214.78 217.76 220.74 223.82 226.93 230.08 233.27 / - 5 8 9 1 132.31 122.86 122.07 122.36 123.38 124.8 126.56 128.64 130.86 133.25 135.82 138.49 - 141.34 144.24 147.33 150.42 153.7 156.95 160.24 163.58 167.24 170.68 174.18 177.73 181.31 185.28 188.95 192.67 - 196.38 200.17 203.95 208.26 212.13 216.01 219.94 223.88 / - 5 8 10 1 82.41 82.39 84.11 86.56 89.3 92.22 95.32 98.57 101.91 105.41 109.04 112.78 - 116.55 120.5 124.56 128.71 132.81 137.13 141.53 146.02 150.37 155 159.45 164.18 168.98 173.57 178.48 183.15 - 188.17 192.91 198.05 202.86 207.96 213.12 218.03 223.16 / - 5 8 11 1 60.11 63.09 66.23 69.63 73.16 76.8 80.56 84.44 88.43 92.55 96.77 101.12 - 105.64 110.73 115.63 120.66 125.76 130.91 136.12 141.42 146.8 152.27 157.82 163.44 169.14 174.92 180.73 186.6 - 192.59 198.63 204.75 210.56 216.79 223.08 229.01 235.42 / - 5 8 12 1 53.51 57.81 61.57 65.35 69.38 73.63 78.08 82.71 87.51 92.49 97.63 102.94 - 108.38 113.91 119.55 125.31 131.2 137.2 143.32 149.55 155.89 162.34 168.88 176.47 183.93 191.31 198.57 206.05 - 213.45 221.04 228.51 236.06 243.7 251.4 259.19 267.06 / - 5 8 13 1 48.49 54.24 59.24 64.16 69.25 74.59 80.25 86.25 92.53 99.07 105.84 112.82 - 120.01 127.38 134.93 142.65 150.55 158.6 166.81 175.18 183.6 192.08 200.59 209.17 217.86 226.65 235.55 244.55 - 253.66 262.88 272.2 282.64 293.2 303.77 314.23 324.96 / - 5 8 14 1 44.52 51.43 58.63 66.21 74.3 82.18 90.7 99.41 108.46 117.93 127.56 136.67 - 146.85 157.27 167.89 178.73 189.78 201.03 212.49 224.15 236.02 248.09 260.31 271.16 284.83 297.48 310.26 322.54 - 335.59 347.71 361.03 374.53 387.35 401.16 417.03 428.49 / - 5 8 15 1 41.02 53.57 66.4 79.04 91.62 104.33 117.05 129.71 142.76 156.64 171.35 185.71 - 199.37 215 230.58 246.66 263.03 279.86 296.2 313.09 330.65 348.85 367.44 386.39 405.74 425.06 444.06 464.31 - 484.84 505.69 526.87 548.4 570.24 592.45 615.05 638.05 / - 5 8 16 1 46.1 67.35 87.62 106.93 125.95 145.44 165.46 186.12 207 228.22 251.68 273.61 - 298.05 323.28 347.12 372.82 399.99 427.35 455.59 483.77 513.44 543.9 575.08 605.84 638.3 671.43 705.47 740.45 - 776.16 812.21 848.28 886.08 926.37 967.28 1007.94 1049.72 / - 5 8 17 1 63.26 94.5 126.44 157.17 188.06 219.98 252.95 287.55 323.53 360.87 399.35 440.94 - 482.17 526.75 572.69 619.58 665.86 716.13 768.23 822.03 877.96 935.14 994.26 1054.6 1115.85 1179.1 1241.29 1299.32 - 1354.14 1411.04 1468.52 1528.32 1589.61 1650.8 1716.66 1778.79 / - 5 8 18 1 90.27 141.6 191.03 243.53 297.51 354.26 414.37 478 545.24 616.43 690.75 769.36 - 852.33 939.96 1031.42 1126.12 1221.69 1315.44 1402.71 1494.66 1588.09 1683.79 1783.33 1883.58 1984.92 2088.69 2192.61 2301.08 - 2407.75 2519.12 2631.61 2745.63 2862.07 2980.4 3099.43 3225.82 / - 5 8 19 1 134.09 212.96 295.74 389.96 493.46 603.13 723.43 852.76 991.69 1144.25 1292.66 1438.41 - 1593.1 1747.48 1916.39 2084.03 2259.09 2437.95 2635.99 2824.87 3024.03 3223.68 3434.76 3651.65 3871.78 4099.59 4330.13 4568.18 - 4813.18 5056.28 5309.45 5556.96 5821.88 6088.35 6348.16 6628.89 / - 5 8 20 1 203.37 326.38 452.81 642.13 852.28 1093.25 1344.03 1594.98 1863.8 2151.7 2451.41 2771.05 - 3090.71 3449.43 3798.35 4198.49 4580.72 4981.59 5438.43 5867.75 6319.39 6775.28 7264.45 7765.93 8270.22 8803.8 9349.72 9883.27 - 10457.21 11036.89 11644.34 12256.86 12895.12 13524.56 14178.84 14874.68 / - 5 9 1 1 217.17 216.4 216.21 216.28 216.49 216.82 217.24 217.74 218.32 218.96 219.67 220.45 - 221.28 222.18 223.14 224.17 225.25 226.39 227.59 228.84 230.16 231.53 232.96 234.45 236 237.6 239.26 240.98 - 242.75 244.58 246.47 248.41 250.42 252.47 254.59 256.76 / - 5 9 2 1 217.06 216.27 216.08 216.14 216.35 216.68 217.1 217.6 218.17 218.81 219.52 220.3 - 221.14 222.04 223 224.02 225.1 226.24 227.44 228.7 230.02 231.39 232.82 234.31 235.86 237.46 239.12 240.84 - 242.62 244.45 246.34 248.28 250.29 252.34 254.46 256.63 / - 5 9 3 1 216.85 216.04 215.83 215.88 216.09 216.42 216.83 217.33 217.9 218.55 219.25 220.03 - 220.87 221.77 222.73 223.75 224.83 225.97 227.17 228.43 229.75 231.12 232.56 234.05 235.6 237.2 238.87 240.59 - 242.37 244.2 246.09 248.04 250.04 252.11 254.23 256.4 / - 5 9 4 1 216.46 215.6 215.36 215.4 215.6 215.91 216.32 216.81 217.38 218.02 218.73 219.5 - 220.34 221.24 222.2 223.22 224.31 225.45 226.65 227.91 229.23 230.61 232.05 233.54 235.1 236.71 238.37 240.1 - 241.88 243.72 245.62 247.57 249.59 251.65 253.78 255.96 / - 5 9 5 1 215.16 213.99 213.5 213.45 213.58 213.85 214.23 214.71 215.26 215.9 216.61 217.38 - 218.23 219.14 220.11 221.15 222.25 223.42 224.64 225.93 227.28 228.68 230.14 231.66 233.24 234.88 236.58 238.34 - 240.15 242.03 243.96 245.95 248 250.1 252.27 254.49 / - 5 9 6 1 211.4 208.09 207.46 207.26 207.31 207.52 207.89 208.37 208.95 209.62 210.37 211.17 - 212.06 213.03 214.07 215.19 216.36 217.61 218.92 220.29 221.73 223.24 224.8 226.43 228.13 229.88 231.69 233.57 - 235.51 237.51 239.56 241.67 243.84 246.07 248.36 250.7 / - 5 9 7 1 201.21 194.43 193.23 192.87 192.86 193.09 193.5 194.07 194.76 195.56 196.48 197.47 - 198.57 199.75 201.02 202.38 203.81 205.32 206.88 208.54 210.26 212.05 213.9 215.83 217.83 219.87 221.99 224.17 - 226.42 228.71 231.07 233.49 235.98 238.52 241.1 243.76 / - 5 9 8 1 176.78 166.62 165.07 164.63 164.74 165.12 165.85 166.8 167.93 169.19 170.62 172.18 - 173.87 175.63 177.52 179.52 181.57 183.73 185.98 188.27 191.02 193.5 196.02 198.64 201.31 204.02 206.8 209.65 - 212.52 215.47 218.47 221.49 224.63 227.78 231 234.27 / - 5 9 9 1 132.06 122.77 121.98 122.32 123.33 124.81 126.59 128.65 130.93 133.34 135.9 138.64 - 141.51 144.44 147.46 150.67 153.86 157.25 160.6 164.01 167.47 171.25 174.8 178.39 182.02 185.69 189.79 193.54 - 197.33 201.15 204.99 209.41 213.32 217.29 221.26 225.29 / - 5 9 10 1 82.58 82.58 84.34 86.82 89.62 92.56 95.69 98.92 102.33 105.86 109.45 113.21 - 117.08 121.06 125.15 129.2 133.46 137.82 142.26 146.58 151.17 155.84 160.32 165.1 169.68 174.57 179.53 184.24 - 189.31 194.1 199.29 204.14 209.3 214.23 219.47 224.66 / - 5 9 11 1 60.27 63.36 66.53 69.95 73.5 77.18 80.96 84.87 88.89 93.04 97.3 101.67 - 106.16 111.29 116.3 121.29 126.43 131.62 136.95 142.29 147.72 153.23 158.83 164.5 170.25 176.08 181.94 187.87 - 193.91 200.01 205.83 212.05 218.34 224.7 230.69 237.16 / - 5 9 12 1 53.57 58.01 61.84 65.65 69.71 73.98 78.46 83.12 87.96 92.97 98.15 103.49 - 108.96 114.53 120.21 126.01 131.94 137.98 144.14 150.42 156.8 163.29 169.87 177.13 184.87 192.35 199.82 207.2 - 214.63 222.18 229.7 237.31 245.36 253.14 261 268.51 / - 5 9 13 1 48.5 54.38 59.46 64.43 69.56 74.94 80.63 86.65 92.96 99.54 106.34 113.36 - 120.59 128 135.6 143.36 151.3 159.39 167.65 176.05 184.53 193.05 201.61 210.24 218.98 227.82 236.77 245.84 - 255 264.28 273.66 283.49 294.13 304.86 315.83 326.22 / - 5 9 14 1 44.52 51.54 58.79 66.6 74.44 82.48 91.04 99.79 108.87 118.36 127.62 137.19 - 147.42 157.87 168.53 179.41 190.5 201.79 213.29 225 236.91 249.03 261.21 273.72 285.96 298.68 311.52 323.88 - 335.99 349.18 362.57 376.13 389.02 402.9 418.85 430.37 / - 5 9 15 1 41.04 53.63 66.5 79.18 91.81 104.55 117.31 130.01 143.68 157 171.77 186.56 - 199.86 215.54 231.16 247.28 263.71 280.6 296.99 314.26 331.51 349.75 368.36 387.35 406.72 426.09 445.17 465.51 - 486.13 507.06 528.32 549.92 571.82 594.09 616.75 639.81 / - 5 9 16 1 46.06 67.32 87.65 107.01 126.07 145.74 165.64 186.32 207.22 228.47 251.95 273.89 - 298.37 323.66 347.11 373.29 400.47 427.89 456.16 484.88 514.03 544.49 575.66 606.42 638.85 671.93 705.87 740.77 - 776.58 812.74 848.99 886.66 925.84 966.24 1007.81 1049.6 / - 5 9 17 1 63.16 94.41 126.4 157.2 188.47 220.1 253.27 287.67 323.64 360.95 399.39 440.95 - 482.14 526.71 572.63 619.5 665.7 715.83 767.9 821.49 877.14 934.4 993.37 1053.79 1115.11 1177.69 1240.8 1299.67 - 1357.36 1415.99 1475.67 1536.96 1599.71 1662.11 1728.91 1792.53 / - 5 9 18 1 90.11 141.61 190.94 243.5 297.58 354.36 414.43 477.98 545.14 616.14 690.3 768.65 - 851.3 938.61 1029.78 1124.24 1220.19 1314.42 1403.47 1494.71 1589.35 1688.63 1786.96 1889.83 1992.95 2098.42 2204.02 2314.02 - 2422.51 2535.48 2649.79 2765.55 2883.83 3004.1 3125.12 3253.17 / - 5 9 19 1 133.87 212.78 294.92 389.91 492.28 603.06 721.19 851.11 990.56 1138.31 1291.17 1437.62 - 1593.01 1748.24 1920.05 2089.6 2262.87 2442.96 2642.28 2832.57 3033.21 3233.2 3446.55 3663.51 3889.23 4117.61 4350.59 4589.09 - 4841.93 5086.69 5348.44 5601.02 5871.28 6142.48 6407.17 6693.4 / - 5 9 20 1 203.14 326.37 452.71 637.01 847.65 1085.98 1337.81 1589.66 1860.66 2143.13 2456.67 2778.28 - 3100.05 3461.18 3812.71 4215.64 4600.78 5004.66 5418.71 5897.57 6352.6 6812.22 7300.7 7807.64 8318.81 8848.33 9398.99 9948.58 - 10522.26 11123.02 11741.59 12365.39 13004.45 13656.71 14322.92 15014.87 / - 5 10 1 1 219.25 218.36 218.13 218.16 218.36 218.68 219.09 219.58 220.15 220.78 221.49 222.26 - 223.1 224 224.96 225.98 227.06 228.2 229.39 230.65 231.97 233.34 234.78 236.27 237.81 239.42 241.08 242.8 - 244.58 246.42 248.31 250.26 252.26 254.33 256.44 258.62 / - 5 10 2 1 219.13 218.23 217.99 218.02 218.22 218.53 218.94 219.43 220 220.63 221.34 222.11 - 222.95 223.84 224.8 225.82 226.9 228.04 229.24 230.5 231.82 233.19 234.63 236.12 237.67 239.27 240.94 242.66 - 244.44 246.28 248.17 250.12 252.13 254.19 256.31 258.49 / - 5 10 3 1 218.92 217.99 217.74 217.76 217.95 218.26 218.66 219.15 219.72 220.36 221.06 221.83 - 222.67 223.56 224.52 225.54 226.63 227.77 228.97 230.22 231.54 232.92 234.35 235.85 237.4 239.01 240.67 242.4 - 244.18 246.02 247.91 249.87 251.88 253.94 256.07 258.25 / - 5 10 4 1 218.49 217.5 217.2 217.2 217.38 217.68 218.07 218.56 219.12 219.75 220.46 221.22 - 222.06 222.96 223.92 224.94 226.02 227.16 228.37 229.63 230.95 232.33 233.77 235.26 236.82 238.43 240.11 241.83 - 243.62 245.47 247.37 249.33 251.35 253.42 255.55 257.74 / - 5 10 5 1 217.03 215.52 214.98 214.9 215.01 215.27 215.65 216.11 216.67 217.3 218.01 218.78 - 219.63 220.54 221.51 222.55 223.66 224.82 226.05 227.34 228.69 230.1 231.58 233.11 234.7 236.35 238.06 239.83 - 241.66 243.55 245.49 247.5 249.56 251.68 253.86 256.09 / - 5 10 6 1 212.97 209.29 208.43 208.21 208.24 208.46 208.82 209.29 209.86 210.53 211.27 212.1 - 213.01 213.98 215.03 216.16 217.35 218.6 219.93 221.32 222.77 224.29 225.88 227.52 229.23 230.96 232.79 234.69 - 236.64 238.66 240.73 242.87 245.07 247.32 249.63 252 / - 5 10 7 1 202.35 194.84 193.58 193.17 193.14 193.36 193.77 194.33 195.03 195.85 196.77 197.8 - 198.92 200.1 201.39 202.77 204.23 205.76 207.37 209.06 210.79 212.62 214.51 216.48 218.49 220.58 222.73 224.96 - 227.23 229.57 231.96 234.42 236.95 239.53 242.15 244.84 / - 5 10 8 1 176.89 166.16 164.67 164.21 164.32 164.7 165.44 166.4 167.55 168.87 170.3 171.89 - 173.61 175.44 177.34 179.38 181.51 183.69 185.99 188.36 190.77 193.29 196.27 198.91 201.64 204.4 207.24 210.14 - 213.07 216.08 219.14 222.22 225.38 228.58 231.86 235.16 / - 5 10 9 1 132.29 122.61 121.92 122.25 123.32 124.81 126.62 128.7 130.96 133.39 136.02 138.74 - 141.63 144.63 147.68 150.92 154.15 157.45 160.94 164.38 167.89 171.74 175.38 179.03 182.72 186.44 190.6 194.42 - 198.27 202.14 206.06 210.01 214.53 218.54 222.61 226.68 / - 5 10 10 1 82.76 82.85 84.62 87.11 89.91 92.91 96.02 99.32 102.75 106.25 109.92 113.7 - 117.6 121.62 125.62 129.82 134.11 138.5 142.8 147.34 151.96 156.44 161.2 166.01 170.63 175.57 180.28 185.33 - 190.12 195.29 200.15 205.43 210.38 215.62 220.92 225.98 / - 5 10 11 1 60.46 63.64 66.84 70.28 73.85 77.55 81.37 85.3 89.36 93.53 97.82 102.23 - 106.75 111.8 116.91 121.99 127.11 132.4 137.64 143.17 148.64 154.2 159.84 165.56 171.36 177.23 183.15 189.14 - 194.91 201.05 207.26 213.55 219.9 225.9 232.37 238.92 / - 5 10 12 1 53.66 58.24 62.12 65.96 70.04 74.34 78.85 83.54 88.41 93.46 98.67 104.04 - 109.55 115.16 120.87 126.71 132.68 138.76 144.96 151.28 157.7 164.23 170.86 177.98 185.62 193.23 200.87 208.35 - 215.82 223.41 231.21 238.88 246.64 254.47 262.39 270.39 / - 5 10 13 1 48.54 54.54 59.69 64.7 69.87 75.28 81 87.05 93.4 100 106.84 113.9 - 121.16 128.61 136.25 144.06 152.04 160.18 168.48 176.92 185.44 194.01 202.62 211.3 220.09 228.98 237.99 247.1 - 256.33 265.66 275.1 284.64 295.01 305.87 316.77 327.6 / - 5 10 14 1 44.54 51.66 58.96 66.74 74.9 82.78 91.37 100.23 109.27 118.79 128.62 137.7 - 147.97 158.46 169.17 180.08 191.21 202.54 214.08 225.82 237.78 249.94 262.17 274.74 287.05 299.84 312.75 325.17 - 338.35 350.61 364.06 377.7 390.65 404.6 420.64 432.22 / - 5 10 15 1 41.06 53.69 66.59 79.32 92 104.78 117.57 130.3 144.06 157.36 172.17 186.67 - 200.34 216.05 231.71 247.86 264.35 281.29 297.73 315.19 332.33 350.6 369.24 388.24 407.63 427.04 446.18 466.61 - 487.32 508.33 529.67 551.33 573.3 595.63 618.35 641.47 / - 5 10 16 1 46.02 67.3 87.68 107.08 126.17 145.88 165.81 186.51 207.42 228.69 252.17 274.16 - 298.66 323.97 349.08 373.69 400.89 428.34 456.65 485.07 514.56 545.01 576.16 606.91 639.33 672.32 706.18 740.97 - 776.71 813.28 849.54 887.01 925.6 965.49 1007.22 1049.37 / - 5 10 17 1 63.05 94.31 126.34 157.49 188.52 220.18 253.34 287.76 323.71 360.98 399.38 440.9 - 482.04 526.57 572.5 619.36 665.48 715.45 767.34 820.75 876.2 933.63 992.14 1052.68 1114.11 1176.69 1239.6 1301.37 - 1359.73 1420.14 1481.04 1543.89 1608.08 1672 1740.22 1805.68 / - 5 10 18 1 89.94 141.44 190.85 243.46 297.67 354.42 414.5 477.94 544.96 615.78 689.8 767.9 - 850.22 937.19 1027.99 1122.2 1218.32 1313.1 1402.68 1494.49 1590.74 1689.52 1788.65 1892.53 1997.3 2104.91 2213.1 2325.67 - 2438.04 2551.91 2668.55 2786.5 2906.91 3028.22 3152.53 3282.36 / - 5 10 19 1 133.64 212.6 294.53 388.96 491.06 601.57 720.79 849.42 989.39 1136.74 1289.6 1436.76 - 1592.89 1749.01 1912.96 2092.27 2266.74 2448.13 2648.78 2840.62 3042.8 3244.49 3457.97 3677.46 3905.81 4136.22 4368.71 4611.96 - 4866.95 5114.84 5381.11 5639.2 5911.39 6192.25 6462.3 6748.94 / - 5 10 20 1 202.93 326.42 452.75 633.08 838.97 1078.76 1329.87 1582.83 1858.17 2146.64 2448.74 2770.5 - 3110.11 3473.65 3828.07 4203.54 4622.12 5029.28 5446.83 5929.44 6388.1 6851.72 7339.68 7847.29 8363.02 8904.55 9459.75 10011.02 - 10592.92 11200.53 11816.44 12462.24 13113.86 13785.12 14462.14 15167.88 / - 5 11 1 1 221.29 220.31 220.03 220.04 220.22 220.52 220.92 221.41 221.97 222.6 223.3 224.07 - 224.91 225.8 226.76 227.78 228.86 229.99 231.19 232.45 233.77 235.14 236.58 238.07 239.62 241.23 242.89 244.62 - 246.4 248.24 250.13 252.09 254.1 256.17 258.29 260.47 / - 5 11 2 1 221.17 220.18 219.89 219.89 220.07 220.37 220.77 221.25 221.81 222.45 223.15 223.92 - 224.75 225.64 226.6 227.62 228.7 229.84 231.04 232.3 233.61 234.99 236.42 237.92 239.47 241.08 242.74 244.47 - 246.25 248.09 249.99 251.94 253.95 256.02 258.15 260.34 / - 5 11 3 1 220.96 219.93 219.63 219.62 219.8 220.09 220.49 220.97 221.53 222.16 222.86 223.63 - 224.46 225.35 226.31 227.33 228.41 229.55 230.75 232.01 233.33 234.7 236.14 237.63 239.19 240.8 242.47 244.19 - 245.98 247.82 249.72 251.68 253.69 255.77 257.9 260.08 / - 5 11 4 1 220.48 219.35 218.99 218.95 219.1 219.38 219.76 220.24 220.79 221.41 222.11 222.88 - 223.71 224.6 225.56 226.58 227.66 228.8 230.01 231.27 232.59 233.98 235.42 236.92 238.48 240.1 241.77 243.51 - 245.3 247.15 249.06 251.03 253.05 255.14 257.28 259.48 / - 5 11 5 1 218.82 217.11 216.45 216.31 216.4 216.63 216.99 217.45 217.99 218.62 219.32 220.1 - 220.94 221.85 222.83 223.87 224.98 226.15 227.39 228.68 230.04 231.46 232.94 234.48 236.08 237.75 239.47 241.25 - 243.09 244.99 246.95 248.97 251.04 253.17 255.36 257.61 / - 5 11 6 1 214.46 210.41 209.4 209.12 209.11 209.3 209.64 210.1 210.66 211.32 212.07 212.9 - 213.8 214.79 215.85 216.98 218.18 219.45 220.78 222.19 223.66 225.19 226.79 228.46 230.19 231.98 233.83 235.75 - 237.72 239.76 241.86 244.02 246.24 248.52 250.84 253.24 / - 5 11 7 1 202.43 195.19 193.79 193.34 193.28 193.49 193.9 194.46 195.17 195.99 196.93 197.97 - 199.11 200.34 201.64 203.04 204.52 206.09 207.73 209.45 211.24 213.07 215 217 219.07 221.2 223.37 225.63 - 227.96 230.34 232.77 235.27 237.84 240.45 243.13 245.87 / - 5 11 8 1 177.37 165.77 164.14 163.72 163.75 164.24 165.01 165.99 167.16 168.5 169.98 171.61 - 173.33 175.19 177.16 179.19 181.36 183.61 185.95 188.33 190.82 193.36 196 198.7 201.88 204.73 207.6 210.56 - 213.57 216.61 219.73 222.9 226.1 229.36 232.68 236.02 / - 5 11 9 1 131.9 122.53 121.84 122.22 123.31 124.79 126.63 128.76 131.04 133.49 136.14 138.89 - 141.8 144.78 147.91 151.08 154.43 157.76 161.29 164.77 168.3 171.9 175.85 179.56 183.34 187.17 191.01 195.28 - 199.19 203.14 207.13 211.14 215.19 219.81 223.93 228.1 / - 5 11 10 1 82.94 83.12 84.91 87.41 90.23 93.25 96.39 99.71 103.11 106.69 110.39 114.2 - 118.13 122.07 126.2 130.43 134.76 139.02 143.51 148.09 152.75 157.26 162.07 166.68 171.59 176.57 181.32 186.42 - 191.26 196.48 201.39 206.73 211.72 217.02 222.09 227.49 / - 5 11 11 1 60.67 63.93 67.15 70.61 74.21 77.93 81.78 85.74 89.82 94.03 98.35 102.78 - 107.33 112.28 117.52 122.62 127.82 133.1 138.47 143.88 149.38 154.97 160.64 166.39 172.22 178.13 184.11 190.14 - 196.23 202.43 208.7 215.04 221.06 227.52 234.06 240.21 / - 5 11 12 1 53.78 58.48 62.41 66.27 70.38 74.71 79.24 83.96 88.87 93.94 99.19 104.59 - 110.14 115.78 121.54 127.42 133.42 139.54 145.78 152.14 158.6 165.17 171.85 178.61 186.51 194.26 201.9 209.43 - 217.01 224.85 232.4 240.46 248.29 256.19 264.19 272.27 / - 5 11 13 1 48.61 54.71 59.92 64.98 70.18 75.63 81.38 87.46 93.83 100.47 107.35 114.44 - 121.73 129.22 136.89 144.74 152.76 160.95 169.29 177.78 186.35 194.97 203.61 212.34 221.18 230.13 239.18 248.35 - 257.64 267.03 276.52 286.13 295.83 306.77 317.85 328.93 / - 5 11 14 1 44.59 51.79 59.13 67.12 75.16 83.08 91.7 100.6 109.67 119.22 129.08 138.79 - 148.5 159.03 169.78 180.74 191.9 203.27 214.84 226.62 238.61 250.81 261.71 275.7 286.74 300.95 313.93 326.42 - 339.67 351.99 365.51 379.21 392.23 406.25 422.37 434 / - 5 11 15 1 41.08 53.75 66.69 79.46 92.18 105 117.82 130.58 144.36 157.69 172.56 187.09 - 200.79 216.53 232.22 248.41 264.93 281.92 298.41 315.79 333.09 351.39 370.04 389.07 408.47 427.89 447.07 467.57 - 488.37 509.47 530.89 552.62 574.65 597.05 619.82 642.99 / - 5 11 16 1 46.01 67.27 87.89 107.14 126.27 146 165.96 186.68 207.61 228.88 252.37 274.37 - 298.9 324.21 349.38 374.02 401.23 428.69 457.05 485.86 514.99 545.42 576.56 607.43 639.68 672.6 706.37 741.04 - 776.64 813.14 850 887.06 925.69 964.95 1005.52 1047.92 / - 5 11 17 1 62.95 94.27 126.28 157.52 188.56 220.24 253.39 287.8 323.73 360.96 399.31 440.78 - 481.86 526.33 572.26 619.11 665.16 714.97 766.68 819.88 875.11 932.3 990.58 1051.17 1112.75 1174.84 1237.78 1300.14 - 1353.6 1411.03 1468.41 1527.49 1588.28 1650.72 1713.43 1773.93 / - 5 11 18 1 89.76 141.27 190.67 243.39 297.7 354.51 414.47 477.87 544.73 615.37 689.25 767.09 - 849.08 935.66 1026.09 1119.99 1216.01 1311.52 1401.72 1494.14 1590.84 1690.35 1790.31 1894.98 2000.54 2109.03 2218.12 2332.17 - 2448.05 2562.88 2682.47 2803.66 2927.25 3051.62 3179.45 3311.78 / - 5 11 19 1 133.42 212.44 293.87 388.01 491.02 601.49 718.47 848.51 985.89 1135.09 1288.04 1435.92 - 1586.49 1749.83 1914.79 2095.17 2270.84 2453.61 2640.75 2849.15 3052.9 3256.49 3470.25 3692.41 3920.82 4153.27 4390.9 4636.23 - 4889.91 5143.8 5408.54 5673.32 5949.05 6234.63 6510.23 6803.34 / - 5 11 20 1 202.72 326.53 453.04 626.94 833.68 1071.72 1322.1 1583.47 1855.92 2142.24 2454.61 2778.61 - 3121.02 3461.53 3844.62 4223.06 4645.22 5055.71 5477.04 5920.84 6426.4 6894.18 7386.24 7893.24 8413.67 8956.85 9516.89 10081.71 - 10658.36 11270.31 11902.49 12542.25 13211.58 13889.31 14559.31 15290.07 / - 5 12 1 1 223.29 222.23 221.91 221.9 222.07 222.36 222.75 223.23 223.78 224.41 225.11 225.87 - 226.7 227.6 228.55 229.57 230.65 231.78 232.98 234.24 235.56 236.93 238.37 239.86 241.41 243.02 244.69 246.42 - 248.2 250.04 251.95 253.9 255.92 257.99 260.12 262.31 / - 5 12 2 1 223.17 222.1 221.77 221.75 221.91 222.2 222.59 223.07 223.62 224.25 224.95 225.71 - 226.54 227.43 228.39 229.4 230.48 231.62 232.82 234.08 235.4 236.77 238.21 239.7 241.25 242.87 244.53 246.26 - 248.05 249.89 251.79 253.75 255.77 257.84 259.98 262.17 / - 5 12 3 1 222.95 221.85 221.5 221.48 221.63 221.92 222.3 222.78 223.33 223.95 224.65 225.41 - 226.24 227.13 228.09 229.11 230.18 231.32 232.52 233.78 235.1 236.48 237.91 239.41 240.96 242.58 244.25 245.98 - 247.77 249.61 251.52 253.48 255.5 257.58 259.71 261.9 / - 5 12 4 1 222.38 221.15 220.73 220.66 220.78 221.04 221.41 221.88 222.42 223.04 223.73 224.49 - 225.32 226.21 227.17 228.19 229.27 230.41 231.62 232.88 234.21 235.59 237.04 238.54 240.1 241.73 243.41 245.15 - 246.95 248.8 250.72 252.69 254.73 256.82 258.97 261.17 / - 5 12 5 1 220.51 218.46 217.82 217.63 217.69 217.9 218.24 218.68 219.22 219.84 220.54 221.31 - 222.15 223.07 224.05 225.09 226.21 227.38 228.62 229.93 231.29 232.72 234.21 235.77 237.38 239.05 240.79 242.58 - 244.43 246.34 248.31 250.35 252.44 254.58 256.79 259.06 / - 5 12 6 1 215.84 211.16 210.13 209.82 209.8 209.98 210.31 210.77 211.33 211.99 212.75 213.58 - 214.5 215.49 216.56 217.71 218.92 220.21 221.56 222.99 224.47 226.03 227.65 229.33 231.04 232.85 234.73 236.67 - 238.67 240.73 242.86 245.04 247.29 249.6 251.97 254.39 / - 5 12 7 1 203.33 195.35 193.85 193.36 193.27 193.46 193.86 194.43 195.14 195.98 196.93 197.99 - 199.15 200.41 201.75 203.18 204.67 206.27 207.94 209.7 211.52 213.42 215.36 217.41 219.51 221.69 223.93 226.21 - 228.57 231 233.49 236.04 238.64 241.31 244.04 246.81 / - 5 12 8 1 177.33 165.33 163.68 163.25 163.29 163.79 164.57 165.58 166.78 168.15 169.64 171.3 - 173.08 174.98 176.95 179.06 181.27 183.53 185.91 188.37 190.87 193.48 196.16 198.87 201.68 204.55 207.93 210.95 - 213.99 217.11 220.27 223.5 226.78 230.09 233.46 236.89 / - 5 12 9 1 132.07 122.46 121.79 122.2 123.27 124.81 126.67 128.78 131.07 133.59 136.21 139.05 - 141.94 144.98 148.09 151.33 154.61 158.08 161.52 165.16 168.73 172.36 176.35 180.1 183.9 187.76 191.66 196.06 - 200.08 204.11 208.17 212.25 216.37 221.08 225.27 229.5 / - 5 12 10 1 83.08 83.4 85.2 87.71 90.55 93.57 96.76 100.11 103.53 107.14 110.86 114.63 - 118.57 122.62 126.78 131.04 135.26 139.7 144.23 148.84 153.33 158.09 162.94 167.59 172.54 177.29 182.37 187.52 - 192.4 197.67 202.64 208.03 213.07 218.43 223.56 229.01 / - 5 12 11 1 60.92 64.23 67.47 70.95 74.58 78.32 82.19 86.18 90.29 94.53 98.87 103.34 - 107.92 112.76 118.08 123.24 128.53 133.81 139.2 144.75 150.29 155.92 161.64 167.44 173.32 179.28 185.32 191.39 - 197.54 203.8 210.13 216.16 222.61 229.14 235.3 241.96 / - 5 12 12 1 53.95 58.72 62.7 66.6 70.73 75.08 79.64 84.4 89.33 94.44 99.71 105.15 - 110.73 116.42 122.2 128.12 134.16 140.32 146.6 152.99 159.5 166.11 172.82 179.63 187.17 195.02 202.81 210.51 - 218.28 226.06 233.89 241.68 249.56 257.52 265.57 273.7 / - 5 12 13 1 48.72 54.89 60.16 65.26 70.5 75.99 81.76 87.87 94.27 100.94 107.85 114.98 - 122.3 129.83 137.53 145.42 153.47 161.69 170.08 178.62 187.24 195.91 204.59 213.37 222.26 231.25 240.36 249.58 - 258.92 268.36 277.92 287.58 297.35 307.21 318.76 330.03 / - 5 12 14 1 44.67 51.94 59.32 67.38 75.25 83.38 92.04 100.96 110.06 119.64 129.53 138.81 - 149.01 159.58 170.37 181.37 192.57 203.97 215.58 227.39 239.41 251.64 264.08 276.59 287.7 302 315.05 327.61 - 340.92 353.31 366.9 380.67 393.74 407.83 422.47 438.57 / - 5 12 15 1 41.1 53.81 66.79 79.61 92.36 105.21 118.06 130.85 144.24 158.01 172.91 187.82 - 201.23 216.99 232.7 248.91 265.45 282.47 299.01 316.57 333.78 352.09 370.76 389.8 409.21 428.63 447.81 468.35 - 489.24 510.43 531.93 553.73 575.83 598.29 621.11 644.33 / - 5 12 16 1 45.97 67.25 87.91 107.2 126.46 146.11 166.09 186.83 207.77 229.04 252.53 274.52 - 299.07 324.4 348.52 374.25 401.47 428.93 457.3 486.4 515.28 545.71 576.82 607.68 639.89 672.76 706.44 741 - 776.47 812.82 849.66 886.69 925.42 964.75 1004.68 1045.87 / - 5 12 17 1 62.84 94.16 126.2 157.48 188.57 220.26 253.4 287.77 323.7 360.88 399.17 440.55 - 481.82 525.98 571.87 618.73 664.73 714.42 765.95 819.12 873.92 930.85 988.85 1049.2 1110.94 1173.29 1235.51 1298.88 - 1353.39 1412.11 1470.04 1530.39 1591.6 1655.91 1719.62 1781.17 / - 5 12 18 1 89.59 141.1 190.55 243.31 297.67 354.5 414.4 477.74 544.43 614.88 688.65 766.26 - 847.91 934.08 1024.08 1117.61 1213.57 1309.36 1400.15 1493.15 1590.45 1690.68 1791.43 1896.91 2003.35 2111.8 2222.83 2338.09 - 2455.19 2570.93 2691.7 2814.24 2939.91 3066.9 3198.85 3333.54 / - 5 12 19 1 133.21 212.31 293.45 388 489.77 599.86 718.13 846.16 984.67 1133.36 1286.45 1435.06 - 1586.46 1750.76 1916.74 2098.22 2275.34 2459.51 2648.23 2858.23 3063.76 3269.38 3484.95 3707.61 3939.65 4174.43 4414.52 4659.35 - 4918.25 5171.08 5442.11 5705.63 5988.58 6272.47 6555.56 6851.8 / - 5 12 20 1 202.54 326.73 453.67 620.77 829.25 1064.72 1315.22 1575.46 1851.45 2146.55 2444.04 2787.65 - 3114.22 3476.4 3862.54 4244.31 4635.37 5084.49 5509.72 5957.55 6412.09 6940.16 7436.67 7948.46 8468.75 9016.72 9579.34 10160.59 - 10739.78 11357.21 11983.69 12641.01 13304.97 14001.63 14678.94 15400.72 / - 5 13 1 1 225.22 224.12 223.78 223.75 223.9 224.18 224.56 225.03 225.58 226.21 226.9 227.66 - 228.49 229.38 230.33 231.35 232.42 233.56 234.76 236.02 237.33 238.71 240.15 241.64 243.19 244.81 246.48 248.2 - 249.99 251.84 253.74 255.7 257.72 259.8 261.94 264.13 / - 5 13 2 1 225.1 223.98 223.63 223.59 223.74 224.02 224.4 224.87 225.42 226.04 226.73 227.49 - 228.32 229.21 230.16 231.18 232.25 233.39 234.59 235.85 237.16 238.54 239.98 241.47 243.03 244.64 246.31 248.04 - 249.83 251.68 253.58 255.54 257.57 259.65 261.78 263.98 / - 5 13 3 1 224.88 223.72 223.35 223.31 223.45 223.72 224.1 224.57 225.12 225.74 226.43 227.19 - 228.01 228.9 229.86 230.87 231.95 233.08 234.28 235.54 236.86 238.24 239.68 241.17 242.73 244.34 246.02 247.75 - 249.54 251.39 253.3 255.26 257.29 259.37 261.51 263.71 / - 5 13 4 1 224.18 222.85 222.37 222.25 222.35 222.59 222.94 223.39 223.93 224.54 225.23 225.98 - 226.81 227.7 228.66 229.67 230.76 231.9 233.11 234.38 235.71 237.1 238.55 240.06 241.63 243.26 244.95 246.7 - 248.5 250.37 252.3 254.28 256.33 258.43 260.59 262.81 / - 5 13 5 1 222.09 219.8 218.95 218.76 218.8 219.01 219.35 219.79 220.33 220.95 221.65 222.43 - 223.27 224.19 225.18 226.23 227.35 228.53 229.78 231.1 232.47 233.91 235.41 236.98 238.55 240.24 241.99 243.8 - 245.67 247.6 249.59 251.63 253.74 255.91 258.14 260.43 / - 5 13 6 1 217.08 212 210.71 210.36 210.32 210.49 210.81 211.27 211.84 212.51 213.26 214.11 - 215.04 216.05 217.13 218.25 219.48 220.77 222.15 223.59 225.09 226.67 228.32 230.03 231.8 233.64 235.54 237.51 - 239.54 241.63 243.78 246 248.28 250.61 252.98 255.44 / - 5 13 7 1 204.08 195.21 193.67 193.14 193.04 193.23 193.63 194.21 194.93 195.79 196.76 197.83 - 199 200.29 201.66 203.13 204.68 206.31 207.99 209.79 211.65 213.59 215.61 217.67 219.82 222.04 224.33 226.68 - 229.07 231.55 234.09 236.7 239.36 242.06 244.84 247.68 / - 5 13 8 1 177.68 164.7 163.09 162.6 162.77 163.31 164.12 165.16 166.39 167.77 169.32 171.01 - 172.83 174.73 176.78 178.93 181.14 183.49 185.92 188.38 190.97 193.64 196.33 199.13 201.96 204.89 207.88 210.89 - 214.52 217.67 220.89 224.17 227.46 230.84 234.25 237.73 / - 5 13 9 1 131.61 122.32 121.71 122.14 123.27 124.83 126.71 128.84 131.16 133.64 136.35 139.14 - 142.12 145.14 148.32 151.6 154.91 158.41 161.87 165.41 169.15 172.82 176.54 180.65 184.49 188.38 192.33 196.32 - 200.79 204.88 209.06 213.28 217.5 221.74 226.58 230.89 / - 5 13 10 1 83.32 83.68 85.45 87.99 90.88 93.92 97.14 100.46 103.96 107.58 111.27 115.13 - 119.09 123.17 127.36 131.53 135.91 140.38 144.94 149.4 154.12 158.92 163.56 168.5 173.5 178.29 183.41 188.3 - 193.54 198.51 203.88 208.94 214.43 219.57 225.02 230.54 / - 5 13 11 1 61.17 64.54 67.81 71.31 74.96 78.73 82.63 86.64 90.78 95.04 99.41 103.91 - 108.52 113.24 118.67 123.95 129.18 134.59 140.02 145.61 151.2 156.87 162.64 168.48 174.42 180.43 186.52 192.65 - 198.85 204.83 211.2 217.65 224.17 230.77 236.99 243.71 / - 5 13 12 1 54.13 58.98 63.01 66.94 71.09 75.47 80.06 84.84 89.8 94.94 100.24 105.71 - 111.33 117.05 122.88 128.83 134.9 141.1 147.41 153.85 160.39 167.04 173.8 180.65 187.81 195.96 203.86 211.57 - 219.31 227.28 235.15 242.9 251.19 259.23 267.35 275.56 / - 5 13 13 1 48.85 55.09 60.41 65.56 70.84 76.35 82.15 88.29 94.72 101.42 108.36 115.51 - 122.87 130.43 138.16 146.08 154.17 162.42 170.84 179.42 188.1 196.83 205.55 214.38 223.31 232.35 241.51 250.78 - 260.17 269.66 279.27 288.99 298.82 308.75 319.18 330.57 / - 5 13 14 1 44.77 52.09 59.51 67.62 75.8 83.69 92.38 101.33 110.46 120.06 129.97 139.29 - 149.51 160.11 170.92 181.95 193.19 204.63 216.27 228.11 240.16 252.41 264.88 277.41 288.57 302.95 316.08 328.71 - 342.09 354.54 368.2 382.03 395.16 409.31 424.02 440.2 / - 5 13 15 1 41.13 53.88 66.89 79.75 92.55 105.43 118.3 131.12 145.35 158.31 173.22 188.36 - 201.61 217.4 233.13 249.36 265.91 282.94 299.5 316.73 334.34 352.68 371.37 390.41 409.82 429.22 448.4 468.92 - 489.83 511.1 532.7 554.57 576.75 599.27 622.15 645.41 / - 5 13 16 1 45.92 67.22 87.93 107.26 126.78 146.21 166.19 186.94 207.9 229.17 252.65 274.63 - 299.16 324.5 348.61 374.38 401.59 429.22 457.38 486.48 515.38 545.81 576.89 608.31 639.9 672.72 706.33 740.8 - 776.15 812.37 849.06 885.95 924.75 964.28 1004.35 1044.94 / - 5 13 17 1 62.73 94.04 126.13 157.43 188.53 220.6 253.36 287.67 323.57 360.72 399.34 440.22 - 482.41 525.47 571.29 618.17 664.13 713.73 765.13 818.13 872.72 929.41 987.15 1047.23 1108.8 1171.68 1234.56 1295.96 - 1352.53 1411.86 1472.92 1532.86 1596.76 1659.95 1724.32 1788.4 / - 5 13 18 1 89.42 140.95 190.41 243.2 297.56 354.42 414.26 477.45 544.03 614.28 687.9 765.4 - 846.81 932.13 1022.21 1115.38 1211.36 1307.18 1398.55 1492.21 1590.09 1690.73 1792.52 1898.78 2006.11 2115.5 2227.59 2343.73 - 2461.93 2579.13 2701.13 2824.92 2951.89 3080.28 3215.72 3349.69 / - 5 13 19 1 133 212.22 292.69 387.11 489.7 599.84 717.85 843.86 981.68 1127.83 1284.96 1429.73 - 1586.62 1752.23 1918.98 2090.71 2280.25 2465.94 2656.43 2868.24 3075.42 3283.33 3501 3724.12 3958.32 4194.53 4441.21 4690.95 - 4948.78 5205.13 5478.22 5745.29 6031.22 6317.97 6599.7 6904.52 / - 5 13 20 1 202.39 327.06 454.69 613.5 821.3 1052.01 1307.23 1569.29 1849.58 2140.52 2451.45 2777.85 - 3127.04 3492.67 3857.91 4267.42 4662.62 5116.12 5545.63 5997.47 6457.16 6990.49 7492.36 8008.46 8529.27 9082.47 9651.46 10232.7 - 10818.19 11440.88 12072.85 12736.22 13420.22 14108.17 14803.93 15538.02 / - 5 14 1 1 227.08 225.96 225.6 225.56 225.71 225.98 226.36 226.82 227.37 227.99 228.68 229.44 - 230.26 231.15 232.1 233.11 234.19 235.32 236.52 237.78 239.09 240.47 241.91 243.4 244.96 246.57 248.24 249.98 - 251.77 253.61 255.52 257.49 259.51 261.59 263.73 265.93 / - 5 14 2 1 226.95 225.82 225.45 225.4 225.54 225.81 226.19 226.65 227.2 227.82 228.51 229.26 - 230.09 230.97 231.92 232.94 234.01 235.15 236.34 237.6 238.92 240.3 241.73 243.23 244.78 246.4 248.07 249.8 - 251.59 253.45 255.35 257.32 259.35 261.43 263.57 265.77 / - 5 14 3 1 226.71 225.53 225.13 225.07 225.19 225.46 225.83 226.29 226.83 227.44 228.13 228.88 - 229.71 230.59 231.54 232.56 233.63 234.77 235.97 237.22 238.54 239.92 241.36 242.86 244.42 246.03 247.71 249.44 - 251.24 253.09 255 256.97 259 261.09 263.24 265.44 / - 5 14 4 1 225.86 224.44 223.9 223.75 223.82 224.04 224.38 224.82 225.35 225.95 226.63 227.39 - 228.21 229.1 230.05 231.07 232.16 233.3 234.51 235.79 237.12 238.52 239.97 241.49 243.07 244.71 246.4 248.16 - 249.98 251.86 253.8 255.79 257.85 259.96 262.14 264.37 / - 5 14 5 1 223.51 220.99 220.05 219.8 219.81 219.99 220.31 220.74 221.27 221.88 222.58 223.35 - 224.2 225.12 226.11 227.17 228.29 229.49 230.74 232.07 233.45 234.91 236.42 238 239.63 241.33 243.1 244.92 - 246.81 248.76 250.76 252.83 254.96 257.15 259.4 261.71 / - 5 14 6 1 218.15 212.41 211.2 210.78 210.69 210.83 211.13 211.58 212.13 212.8 213.56 214.41 - 215.34 216.36 217.46 218.63 219.88 221.2 222.6 224.06 225.59 227.2 228.87 230.6 232.41 234.28 236.21 238.21 - 240.23 242.35 244.54 246.79 249.1 251.48 253.91 256.41 / - 5 14 7 1 204.67 195.02 193.35 192.76 192.63 192.8 193.2 193.77 194.5 195.37 196.36 197.47 - 198.68 199.99 201.4 202.87 204.45 206.13 207.88 209.72 211.63 213.59 215.65 217.78 219.99 222.23 224.57 226.98 - 229.45 231.98 234.56 237.22 239.94 242.72 245.56 248.44 / - 5 14 8 1 177.39 163.93 162.44 162.01 162.23 162.8 163.65 164.72 165.98 167.42 168.99 170.72 - 172.54 174.52 176.61 178.8 181.06 183.45 185.88 188.44 191.08 193.76 196.55 199.41 202.29 205.28 208.29 211.4 - 214.57 218.32 221.62 224.93 228.33 231.77 235.25 238.79 / - 5 14 9 1 131.71 122.26 121.66 122.12 123.28 124.8 126.71 128.91 131.24 133.75 136.43 139.3 - 142.24 145.36 148.51 151.81 155.2 158.62 162.24 165.81 169.59 173.29 177.05 180.87 185.09 189.02 193.01 197.04 - 201.12 205.7 209.89 214.11 218.39 222.7 227.14 232.19 / - 5 14 10 1 83.56 83.9 85.76 88.31 91.19 94.29 97.49 100.88 104.39 107.98 111.75 115.63 - 119.62 123.73 127.84 132.14 136.55 141.06 145.48 150.15 154.9 159.52 164.42 169.41 174.19 179.29 184.46 189.39 - 194.69 199.71 205.13 210.24 215.79 220.98 226.5 231.77 / - 5 14 11 1 61.45 64.87 68.17 71.69 75.36 79.16 83.08 87.12 91.28 95.56 99.97 104.49 - 109.12 113.87 119.2 124.53 129.84 135.29 140.74 146.32 151.93 157.64 163.43 169.31 175.27 181.31 187.43 193.64 - 199.88 206.2 212.63 219.14 225.32 231.96 238.67 245.47 / - 5 14 12 1 54.34 59.27 63.34 67.3 71.48 75.89 80.5 85.31 90.3 95.46 100.79 106.29 - 111.94 117.7 123.56 129.54 135.65 141.88 148.23 154.7 161.28 167.97 174.76 181.65 188.64 196.62 204.68 212.66 - 220.4 228.39 236.39 244.43 252.43 260.53 268.7 276.98 / - 5 14 13 1 49.01 55.32 60.7 65.88 71.19 76.73 82.55 88.71 95.18 101.9 108.87 116.05 - 123.44 131.02 138.79 146.73 154.85 163.13 171.58 180.18 188.92 197.7 206.48 215.35 224.33 233.42 242.63 251.94 - 261.38 270.92 280.58 290.35 300.24 310.22 320.32 330.94 / - 5 14 14 1 44.89 52.28 59.73 67.87 76.01 84.01 92.72 101.69 110.85 120.48 130.4 140.22 - 150 160.61 171.44 182.49 193.75 205.23 216.9 228.78 240.84 253.12 265.54 278.15 289.32 303.77 316.99 329.7 - 343.14 355.65 369.38 383.27 396.45 410.66 425.06 441.68 / - 5 14 15 1 41.18 53.96 67.01 79.91 92.74 105.65 118.54 131.38 145.62 158.6 173.51 188.7 - 201.93 217.75 233.62 249.73 266.29 283.31 299.86 317.55 334.72 353.09 371.79 390.84 410.23 429.62 448.77 469.26 - 490.12 511.38 533.02 554.98 577.25 599.84 622.79 646.09 / - 5 14 16 1 45.85 67.2 87.95 107.42 126.85 146.29 166.28 187.01 207.97 229.25 252.71 274.66 - 299.16 324.46 348.57 374.33 401.56 429.19 457.27 486.31 515.16 545.58 576.64 607.64 639.6 672.38 705.91 740.28 - 775.51 811.59 847.55 884.81 923.42 962.85 1003.1 1043.95 / - 5 14 17 1 62.62 93.93 126.13 157.36 188.45 220.52 253.26 287.49 323.31 360.43 399.04 439.74 - 482.14 524.71 570.44 617.32 663.27 712.82 764.08 816.9 871.3 927.7 985.16 1044.96 1106.46 1169.23 1232.27 1294.09 - 1353.25 1411.33 1473.25 1536.08 1599.3 1663.85 1729.68 1795.55 / - 5 14 18 1 89.27 140.82 190.16 243.07 297.37 354.2 413.97 476.99 543.39 613.45 686.84 764.05 - 845.49 930.51 1020.14 1113.18 1208.94 1303.31 1396.66 1492.3 1589.57 1690.88 1793.41 1899.83 2008.85 2119.27 2234.06 2349.64 - 2468.86 2590.31 2710.85 2836.12 2964.51 3094.47 3230.92 3366.52 / - 5 14 19 1 132.81 212.18 292.39 386.27 488.39 598.16 715.68 843.1 980.42 1126.51 1279.48 1428.9 - 1586.77 1747.1 1921.41 2094.58 2285.56 2472.94 2665.31 2866.79 3088.12 3298.43 3518.41 3743.96 3978.74 4218.54 4468.78 4719.41 - 4978.96 5241.7 5514.16 5788.58 6072.98 6367.46 6653.94 6956.31 / - 5 14 20 1 202.3 327.55 456.04 607.63 813.79 1041.78 1300.91 1561.43 1841.66 2132.88 2453 2789.28 - 3141.51 3488.9 3879.59 4293.37 4692.67 5112.25 5585.56 6041.86 6507.02 6994.31 7553.16 8074.73 8602.17 9156.03 9729.62 10315.92 - 10905.33 11533.69 12183.5 12842.44 13532.61 14228.54 14945.67 15672.66 / - 5 15 1 1 228.84 227.75 227.39 227.35 227.49 227.76 228.13 228.59 229.14 229.75 230.44 231.2 - 232.02 232.9 233.85 234.86 235.94 237.07 238.27 239.52 240.84 242.22 243.65 245.15 246.7 248.32 249.99 251.73 - 253.52 255.37 257.28 259.25 261.28 263.36 265.51 267.71 / - 5 15 2 1 228.72 227.6 227.23 227.18 227.32 227.58 227.96 228.42 228.96 229.57 230.26 231.01 - 231.83 232.72 233.67 234.68 235.75 236.89 238.08 239.34 240.65 242.03 243.47 244.97 246.52 248.14 249.81 251.55 - 253.34 255.19 257.11 259.08 261.11 263.19 265.34 267.55 / - 5 15 3 1 228.41 227.22 226.8 226.72 226.84 227.09 227.45 227.9 228.44 229.05 229.73 230.48 - 231.3 232.19 233.13 234.15 235.22 236.36 237.56 238.81 240.13 241.51 242.96 244.46 246.02 247.64 249.32 251.06 - 252.86 254.72 256.63 258.61 260.65 262.74 264.89 267.11 / - 5 15 4 1 227.38 225.88 225.22 225.06 225.12 225.33 225.67 226.1 226.62 227.23 227.91 228.66 - 229.48 230.37 231.33 232.35 233.44 234.59 235.81 237.08 238.42 239.83 241.29 242.81 244.4 246.05 247.75 249.52 - 251.35 253.24 255.19 257.2 259.26 261.39 263.58 265.83 / - 5 15 5 1 224.74 221.75 220.96 220.66 220.57 220.75 221.06 221.49 222.02 222.64 223.34 224.12 - 224.97 225.9 226.85 227.92 229.05 230.25 231.52 232.86 234.26 235.72 237.25 238.84 240.5 242.22 244 245.85 - 247.75 249.72 251.75 253.85 256 258.21 260.49 262.82 / - 5 15 6 1 218.99 212.61 211.34 210.88 210.77 210.89 211.19 211.63 212.19 212.86 213.63 214.5 - 215.45 216.48 217.6 218.79 220.06 221.41 222.83 224.32 225.88 227.52 229.22 230.99 232.78 234.68 236.65 238.69 - 240.79 242.95 245.18 247.47 249.82 252.24 254.72 257.25 / - 5 15 7 1 205.07 194.46 192.72 192.11 191.96 192.12 192.52 193.11 193.85 194.74 195.75 196.88 - 198.12 199.44 200.88 202.42 204.05 205.77 207.57 209.41 211.38 213.41 215.53 217.72 219.94 222.27 224.67 227.14 - 229.64 232.24 234.9 237.62 240.39 243.23 246.13 249.1 / - 5 15 8 1 177.54 163.23 161.74 161.38 161.65 162.27 163.17 164.28 165.58 167.04 168.66 170.42 - 172.31 174.32 176.44 178.66 181 183.41 185.93 188.5 191.19 193.92 196.77 199.68 202.63 205.68 208.75 211.93 - 215.16 218.42 221.76 225.74 229.22 232.74 236.28 239.9 / - 5 15 9 1 130.95 122.2 121.63 122.11 123.24 124.83 126.77 128.93 131.34 133.88 136.58 139.47 - 142.43 145.5 148.75 152.08 155.44 158.96 162.61 166.21 169.88 173.77 177.57 181.43 185.69 189.67 193.69 197.77 - 201.9 206.54 210.77 215.05 219.37 223.74 228.15 233.21 / - 5 15 10 1 83.82 84.21 86.09 88.66 91.56 94.68 97.91 101.31 104.8 108.46 112.24 116.15 - 120.09 124.21 128.43 132.77 137.21 141.58 146.2 150.9 155.69 160.34 165.29 170.05 175.14 180.28 185.21 190.48 - 195.5 200.9 206.01 211.54 216.74 222.4 227.69 233.31 / - 5 15 11 1 61.75 65.23 68.56 72.11 75.81 79.63 83.57 87.63 91.82 96.12 100.55 105.09 - 109.74 114.52 119.72 125.19 130.59 136 141.57 147.18 152.83 158.58 164.42 170.34 176.35 182.44 188.62 194.88 - 201.18 207.55 214.04 220.23 226.86 233.56 240.35 246.74 / - 5 15 12 1 54.61 59.6 63.71 67.7 71.91 76.34 80.98 85.81 90.82 96.01 101.37 106.89 - 112.57 118.37 124.26 130.27 136.41 142.67 149.05 155.55 162.16 168.89 175.71 182.64 189.67 197.02 205.41 213.55 - 221.47 229.42 237.41 245.69 253.65 261.79 270.03 278.36 / - 5 15 13 1 49.23 55.6 61.02 66.23 71.57 77.13 82.98 89.16 95.65 102.4 109.39 116.59 - 124.01 131.61 139.4 147.37 155.51 163.82 172.28 180.91 189.69 198.53 207.37 216.29 225.31 234.45 243.69 253.05 - 262.53 272.12 281.83 291.65 301.58 311.63 321.77 332.03 / - 5 15 14 1 45.06 52.5 59.99 68.15 76.32 84.34 93.08 102.07 111.24 120.88 130.83 140.36 - 150.46 161.08 171.93 182.99 194.26 205.74 217.42 229.32 241.42 253.71 266.14 278.76 289.93 304.4 317.7 330.49 - 344.01 356.58 370.37 384.33 399.62 411.82 426.28 442.96 / - 5 15 15 1 41.24 54.05 67.14 80.08 92.94 105.87 118.78 131.63 145.88 158.86 173.77 188.94 - 202.17 217.97 233.87 249.99 266.54 283.54 300.08 317.73 334.87 353.21 371.92 390.98 410.37 429.23 448.85 469.28 - 490.09 511.28 532.85 554.74 577.01 599.66 622.67 646.04 / - 5 15 16 1 45.79 67.19 87.98 107.7 126.92 146.37 166.34 187.06 207.99 229.24 252.69 274.6 - 299.05 324.29 349.89 374.05 401.29 428.88 456.89 485.84 514.57 544.86 575.82 607.15 638.72 671.5 704.98 739.25 - 774.35 810.27 846.15 883.12 921.6 960.95 1001.09 1042 / - 5 15 17 1 62.51 93.83 126.06 157.28 188.33 220.34 253.05 287.19 322.91 359.92 399.45 439.06 - 481.52 523.66 569.18 615.94 662.59 711.49 762.65 815.28 869.52 925.72 983.08 1042.7 1103.79 1166.13 1228.91 1290.95 - 1350.62 1410.53 1471.82 1535.22 1599 1664.19 1730.75 1797.27 / - 5 15 18 1 89.13 140.74 190.02 242.86 297.12 353.74 413.46 476.29 542.39 612.16 685.39 762.35 - 843.64 928.6 1018.12 1110.73 1205.97 1300.95 1394.31 1490.56 1589.23 1690.68 1795.73 1901.45 2011.41 2122.91 2240.33 2355.55 - 2476.01 2598.48 2721.04 2847.6 2977.64 3113.32 3246.88 3384.28 / - 5 15 19 1 132.66 212.24 292.27 385.48 487.26 597.84 715.33 839.91 977.89 1124.73 1277.21 1427.59 - 1587.02 1748.13 1923.71 2098.55 2290.96 2480.33 2674.79 2878.27 3101.65 3314.64 3537.23 3765.45 4001.13 4244.7 4495.9 4752.65 - 5015.16 5278.24 5557.59 5834.25 6123.86 6417.21 6712.67 7019.19 / - 5 15 20 1 202.29 328.29 457.88 599.99 807.11 1038.27 1286.59 1546.23 1833.97 2129.17 2444.86 2784.69 - 3134.97 3509.05 3904.06 4289.95 4726.56 5150.85 5590 6091.51 6562.71 7055.75 7555.76 8148.96 8683.76 9243.27 9816.56 10402.51 - 11006.5 11638.98 12295.18 12960.5 13658.05 14375.48 15100.43 15839.94 / - 5 16 1 1 230.5 229.46 229.12 229.09 229.23 229.5 229.88 230.34 230.88 231.49 232.18 232.93 - 233.75 234.63 235.58 236.59 237.66 238.8 239.99 241.25 242.56 243.94 245.38 246.87 248.43 250.05 251.72 253.46 - 255.25 257.11 259.02 260.99 263.02 265.11 267.26 269.47 / - 5 16 2 1 230.37 229.32 228.96 228.92 229.05 229.32 229.69 230.15 230.69 231.3 231.98 232.73 - 233.55 234.43 235.38 236.39 237.46 238.6 239.79 241.05 242.36 243.74 245.18 246.68 248.23 249.85 251.53 253.26 - 255.06 256.92 258.83 260.8 262.84 264.93 267.08 269.29 / - 5 16 3 1 229.95 228.76 228.33 228.24 228.35 228.59 228.94 229.39 229.92 230.52 231.2 231.95 - 232.77 233.65 234.6 235.61 236.69 237.82 239.02 240.28 241.61 242.99 244.43 245.94 247.51 249.13 250.82 252.56 - 254.37 256.24 258.16 260.15 262.19 264.3 266.46 268.68 / - 5 16 4 1 228.69 227.13 226.41 226.21 226.24 226.44 226.75 227.18 227.69 228.29 228.96 229.71 - 230.54 231.43 232.39 233.41 234.51 235.66 236.88 238.17 239.52 240.93 242.4 243.94 245.53 247.19 248.91 250.7 - 252.54 254.44 256.41 258.43 260.52 262.66 264.87 267.13 / - 5 16 5 1 225.74 222.51 221.48 221.16 221.11 221.26 221.56 221.97 222.49 223.1 223.8 224.58 - 225.44 226.37 227.38 228.45 229.6 230.82 232.1 233.45 234.87 236.36 237.91 239.52 241.2 242.94 244.75 246.62 - 248.55 250.55 252.6 254.72 256.9 259.15 261.45 263.81 / - 5 16 6 1 219.58 212.75 211.18 210.67 210.54 210.64 210.93 211.37 211.94 212.62 213.4 214.28 - 215.25 216.3 217.44 218.66 219.96 221.33 222.76 224.29 225.89 227.56 229.3 231.11 232.99 234.93 236.92 239 - 241.15 243.36 245.63 247.97 250.37 252.84 255.37 257.93 / - 5 16 7 1 204.25 193.9 191.98 191.34 191.19 191.35 191.76 192.36 193.12 194.03 195.06 196.22 - 197.5 198.85 200.32 201.9 203.57 205.33 207.14 209.06 211.07 213.16 215.33 217.54 219.85 222.24 224.69 227.18 - 229.77 232.43 235.14 237.9 240.74 243.66 246.63 249.65 / - 5 16 8 1 177.18 162.37 160.92 160.76 161.08 161.75 162.69 163.75 165.09 166.57 168.21 170 - 171.9 173.94 176.27 178.56 180.92 183.39 185.95 188.59 191.31 194.14 197.01 199.96 203.01 206.07 209.25 212.45 - 215.75 219.12 222.5 225.97 229.47 233.71 237.33 241.03 / - 5 16 9 1 130.37 122.11 121.55 122.05 123.26 124.88 126.84 129.02 131.38 134.02 136.74 139.6 - 142.64 145.73 149.01 152.31 155.76 159.31 162.86 166.63 170.33 174.26 178.1 181.99 185.95 190.32 194.39 198.52 - 202.69 206.92 211.67 216 220.37 224.79 229.26 233.77 / - 5 16 10 1 84.09 84.53 86.45 89.05 91.98 95.08 98.36 101.78 105.29 108.96 112.77 116.62 - 120.66 124.79 129.04 133.41 137.73 142.28 146.92 151.66 156.28 161.18 166.16 170.96 176.09 181.01 186.25 191.57 - 196.64 202.09 207.25 212.84 218.1 223.82 229.16 234.84 / - 5 16 11 1 62.11 65.65 69.01 72.6 76.32 80.17 84.13 88.21 92.41 96.73 101.17 105.73 - 110.41 115.2 120.18 125.78 131.27 136.71 142.31 147.94 153.74 159.52 165.4 171.37 177.42 183.57 189.79 196.11 - 202.18 208.59 215.08 221.69 228.38 235.16 241.56 248.47 / - 5 16 12 1 54.96 60.01 64.15 68.17 72.4 76.85 81.52 86.37 91.4 96.61 101.99 107.53 - 113.23 119.06 124.99 131.02 137.19 143.47 149.88 156.4 163.04 169.8 176.65 183.62 190.67 197.83 205.8 214.11 - 222.36 230.49 238.6 246.7 254.93 263.4 271.72 280.12 / - 5 16 13 1 49.53 55.96 61.41 66.64 72 77.58 83.45 89.65 96.15 102.92 109.93 117.15 - 124.58 132.2 140.01 147.99 156.15 164.47 172.95 181.58 190.38 199.28 208.18 217.16 226.22 235.4 244.69 254.08 - 263.6 273.23 282.98 292.85 302.83 312.92 323.12 333.42 / - 5 16 14 1 45.29 52.8 60.31 68.48 76.67 84.71 93.45 102.46 111.64 121.29 131.25 140.76 - 150.89 161.52 172.36 183.42 194.69 206.16 217.84 229.72 241.81 253.93 266.53 279.16 290.32 304.78 318.1 330.96 - 344.57 357.21 371.07 385.08 400.44 412.66 427.17 443.93 / - 5 16 15 1 41.35 54.18 67.31 80.28 93.16 106.1 119.02 131.87 146.11 159.09 173.97 189.12 - 202.32 218.09 234 250.03 266.57 283.56 300.06 317.67 334.74 353.02 371.64 390.64 409.98 428.82 448.41 468.8 - 489.54 510.65 532.11 553.9 576.05 598.58 621.47 644.74 / - 5 16 16 1 45.7 67.19 88.02 107.76 126.98 146.42 166.37 187.05 207.93 229.12 252.51 274.37 - 298.77 323.93 349.03 373.46 400.59 428.12 456.06 484.89 513.47 543.6 574.39 605.56 636.9 669.64 703.11 737.33 - 772.33 808.11 844.51 880.54 918.62 957.53 997.22 1037.67 / - 5 16 17 1 62.44 93.75 126 157.19 188.17 220.07 252.94 286.74 322.34 359.17 398.54 438.02 - 480.34 522.22 567.5 613.97 661.42 709.41 760.54 813.04 867.03 922.79 980 1038.57 1099.1 1160.98 1223.5 1285.77 - 1345.63 1406.65 1468.01 1531.92 1596.31 1662.13 1729.32 1798.87 / - 5 16 18 1 89.03 140.72 189.91 242.63 296.73 353.13 412.52 475.19 540.97 610.29 683.18 759.96 - 840.85 925.55 1014.26 1106.25 1201.05 1296.99 1391.37 1487.08 1586.59 1688.72 1795.21 1901.64 2012.65 2127.52 2242.77 2360.46 - 2482.17 2606.1 2733.96 2862.51 2993.86 3127.34 3262.87 3400.7 / - 5 16 19 1 132.58 212.46 292.42 385.61 487.22 595.9 713.12 838.95 974.64 1119.24 1273.46 1424.91 - 1578.79 1747.96 1924.88 2101.53 2286.29 2486.91 2683.83 2889.57 3097.98 3334.58 3556.5 3787.85 4026.76 4273.61 4526.94 4785.18 - 5051.32 5321.86 5600.91 5886.87 6179.29 6476.76 6778.49 7087.86 / - 5 16 20 1 202.43 329.39 460.37 601.57 801.53 1031.72 1282.21 1539.69 1818.77 2122.01 2436.87 2782.9 - 3129.57 3502.33 3900.12 4320.63 4730.86 5193.98 5639.42 6098.26 6624.95 7124.45 7632.45 8163.53 8774.58 9341.12 9920.91 10513.89 - 11126.49 11752.73 12413.41 13094.86 13800.99 14527.82 15260.79 16012.33 / - 5 17 1 1 232.04 231.1 230.8 230.78 230.93 231.21 231.58 232.05 232.59 233.2 233.89 234.64 - 235.46 236.34 237.28 238.29 239.36 240.5 241.69 242.95 244.26 245.64 247.08 248.57 250.13 251.75 253.42 255.16 - 256.96 258.82 260.73 262.71 264.74 266.84 268.99 271.2 / - 5 17 2 1 231.86 230.87 230.54 230.51 230.65 230.92 231.28 231.74 232.28 232.89 233.57 234.32 - 235.14 236.02 236.96 237.97 239.04 240.18 241.37 242.63 243.95 245.32 246.76 248.26 249.82 251.44 253.12 254.86 - 256.66 258.52 260.44 262.42 264.46 266.56 268.71 270.93 / - 5 17 3 1 231.27 230.09 229.66 229.55 229.65 229.88 230.23 230.67 231.19 231.79 232.47 233.22 - 234.03 234.91 235.86 236.87 237.95 239.09 240.3 241.56 242.89 244.28 245.73 247.24 248.82 250.45 252.15 253.9 - 255.72 257.6 259.53 261.53 263.59 265.71 267.88 270.12 / - 5 17 4 1 229.74 227.97 227.24 227.03 227.05 227.23 227.54 227.96 228.47 229.07 229.75 230.5 - 231.33 232.22 233.19 234.22 235.32 236.49 237.72 239.01 240.37 241.8 243.28 244.83 246.44 248.12 249.86 251.66 - 253.52 255.44 257.42 259.47 261.57 263.74 265.97 268.26 / - 5 17 5 1 226.42 222.95 221.66 221.31 221.25 221.39 221.67 222.09 222.61 223.22 223.93 224.71 - 225.58 226.53 227.55 228.64 229.81 231.05 232.35 233.73 235.17 236.68 238.26 239.9 241.56 243.33 245.17 247.07 - 249.04 251.07 253.16 255.32 257.54 259.82 262.16 264.57 / - 5 17 6 1 219.85 212.32 210.65 210.09 209.92 210.01 210.29 210.73 211.3 211.98 212.78 213.67 - 214.67 215.75 216.91 218.16 219.47 220.89 222.37 223.94 225.58 227.3 229.07 230.92 232.85 234.85 236.9 239.04 - 241.24 243.51 245.84 248.22 250.68 253.21 255.8 258.45 / - 5 17 7 1 204.26 193.1 191.09 190.48 190.35 190.54 190.97 191.59 192.38 193.3 194.37 195.56 - 196.86 198.28 199.8 201.38 203.09 204.9 206.79 208.73 210.8 212.94 215.17 217.43 219.81 222.26 224.78 227.34 - 230 232.73 235.52 238.36 241.28 244.26 247.31 250.4 / - 5 17 8 1 176.69 161.62 160.4 160.24 160.57 161.26 162.12 163.28 164.64 166.16 167.84 169.66 - 171.62 173.7 175.89 178.2 180.61 183.38 185.99 188.68 191.47 194.33 197.26 200.27 203.36 206.52 209.74 213.02 - 216.39 219.8 223.26 226.81 230.38 234.04 238.41 242.2 / - 5 17 9 1 130.35 122.05 121.51 122.05 123.3 124.97 126.94 129.13 131.54 134.12 136.93 139.8 - 142.8 145.98 149.2 152.61 156.03 159.59 163.25 166.92 170.79 174.6 178.63 182.57 186.57 190.62 195.1 199.27 - 203.49 207.76 212.09 216.95 221.38 225.85 230.38 234.95 / - 5 17 10 1 84.4 84.9 86.88 89.53 92.48 95.6 98.89 102.28 105.84 109.53 113.28 117.22 - 121.27 125.43 129.69 133.95 138.42 143 147.67 152.25 157.09 162.02 166.79 171.88 177.05 182 187.29 192.35 - 197.78 202.93 208.49 213.75 219.44 224.8 230.63 236.07 / - 5 17 11 1 62.57 66.15 69.57 73.2 76.96 80.83 84.8 88.9 93.1 97.44 101.89 106.46 - 111.14 115.94 120.85 126.49 132.01 137.53 143.08 148.72 154.49 160.29 166.19 172.17 178.25 184.42 190.67 197.01 - 203.44 209.91 216.45 223.13 229.48 236.29 243.19 250.17 / - 5 17 12 1 55.46 60.53 64.7 68.74 73.01 77.49 82.17 87.03 92.08 97.3 102.69 108.24 - 113.95 119.81 125.77 131.83 138.01 144.31 150.73 157.27 163.93 170.7 177.58 184.57 191.65 198.83 206.35 214.74 - 223.18 231.3 239.66 247.76 256.13 264.54 272.91 281.35 / - 5 17 13 1 49.99 56.46 61.92 67.16 72.52 78.1 83.99 90.21 96.72 103.5 110.51 117.74 - 125.17 132.8 140.61 148.59 156.75 165.07 173.54 182.18 190.97 199.87 208.85 217.9 227.02 236.23 245.55 254.99 - 264.54 274.2 283.98 293.88 303.9 314.02 324.27 334.62 / - 5 17 14 1 45.65 53.22 60.74 68.83 76.9 85.13 93.87 102.88 112.04 121.7 131.65 140.95 - 151.27 161.89 172.72 183.76 195 206.45 218.09 229.94 241.97 254.17 266.41 279.2 290.31 304.75 318.03 330.86 - 344.52 357.25 371.2 385.3 400.73 412.95 427.51 444.35 / - 5 17 15 1 41.71 54.37 67.55 80.55 93.44 106.37 119.25 132.11 146.33 159.27 174.1 189.2 - 202.34 218.05 233.88 249.83 266.27 283.17 299.59 317.13 334.14 352.33 370.85 389.72 408.93 427.62 447.06 467.32 - 487.96 508.96 530.33 552.01 574.04 596.43 619.17 642.27 / - 5 17 16 1 45.74 67.24 88.12 107.58 127.06 146.47 166.37 186.98 207.78 228.87 252.17 273.89 - 298.18 323.25 348.23 372.46 399.33 426.6 454.27 482.89 511.29 541.28 571.89 603.02 633.97 666.47 699.66 733.59 - 768.27 803.67 839.49 875.45 912.93 951.38 990.59 1030.56 / - 5 17 17 1 62.42 93.7 125.9 157.1 187.95 219.7 252.23 286.01 321.46 358.09 397.24 436.39 - 478.46 520.04 565.07 611.23 657.45 706.01 756.76 808.86 862.3 917.52 974.33 1032.06 1091.98 1153.29 1215.33 1278.74 - 1337.68 1399.21 1462.27 1525.66 1591.21 1658.24 1724.89 1794.88 / - 5 17 18 1 89 140.84 189.86 242.39 296.08 352.17 411.07 473.24 538.66 607.53 679.85 756.11 - 836.23 920.28 1008.24 1099.6 1193.8 1289.45 1384.33 1481.87 1581.82 1685.58 1791.77 1901.29 2013.6 2127.54 2244.26 2363.58 - 2486.71 2612.22 2741.61 2872.01 3004.23 3140.67 3278.32 3418.31 / - 5 17 19 1 132.63 212.93 293.28 385.16 486.08 595.34 711.96 836.76 969.52 1114.34 1268.08 1420.13 - 1576.74 1746.19 1917.91 2103.31 2290.11 2492.78 2692.49 2900.7 3112.41 3351.05 3576.77 3811.55 4053.87 4302.62 4558.77 4822.96 - 5094.41 5366.3 5652.92 5946.55 6236.46 6542.72 6851.86 7159.48 / - 5 17 20 1 202.82 331.07 463.79 607.25 796.76 1021.07 1267.28 1527.01 1813.07 2106.21 2435.53 2769.49 - 3130.28 3518.2 3896.11 4317.03 4761.6 5197.47 5686.48 6155.07 6643.57 7198.8 7716.89 8257.21 8812.66 9381.73 10039.01 10640.33 - 11262.51 11893.96 12556.65 13247.97 13964.97 14694.08 15451.8 16230.47 / - 5 18 1 1 233.43 232.62 232.37 232.38 232.55 232.83 233.21 233.68 234.22 234.84 235.52 236.27 - 237.09 237.97 238.92 239.93 241 242.13 243.32 244.58 245.89 247.27 248.71 250.21 251.77 253.39 255.07 256.8 - 258.6 260.46 262.38 264.36 266.4 268.5 270.66 272.88 / - 5 18 2 1 233.12 232.21 231.9 231.87 232.02 232.28 232.65 233.11 233.64 234.25 234.93 235.68 - 236.5 237.38 238.33 239.34 240.41 241.54 242.74 244 245.32 246.7 248.15 249.65 251.22 252.84 254.53 256.28 - 258.08 259.95 261.88 263.87 265.92 268.03 270.19 272.42 / - 5 18 3 1 232.29 231.12 230.67 230.54 230.62 230.84 231.18 231.61 232.13 232.73 233.4 234.15 - 234.96 235.85 236.8 237.82 238.9 240.04 241.25 242.53 243.86 245.26 246.72 248.25 249.83 251.48 253.19 254.96 - 256.79 258.68 260.64 262.65 264.73 266.86 269.06 271.32 / - 5 18 4 1 230.43 228.55 227.7 227.45 227.44 227.6 227.89 228.3 228.81 229.4 230.08 230.83 - 231.66 232.56 233.54 234.58 235.69 236.87 238.12 239.43 240.81 242.25 243.76 245.33 246.97 248.66 250.43 252.25 - 254.14 256.09 258.1 260.18 262.32 264.52 266.78 269.1 / - 5 18 5 1 226.7 222.67 221.37 220.97 220.87 220.99 221.27 221.67 222.19 222.81 223.52 224.32 - 225.21 226.17 227.22 228.33 229.53 230.79 232.07 233.48 234.96 236.5 238.12 239.8 241.55 243.36 245.25 247.19 - 249.21 251.28 253.43 255.63 257.9 260.23 262.63 265.09 / - 5 18 6 1 219.77 211.55 209.8 209.19 208.98 209.05 209.32 209.76 210.34 211.04 211.85 212.77 - 213.78 214.89 216.09 217.38 218.75 220.2 221.74 223.35 225 226.77 228.61 230.52 232.51 234.57 236.67 238.87 - 241.13 243.47 245.87 248.31 250.84 253.44 256.1 258.81 / - 5 18 7 1 204.09 192.21 190.21 189.61 189.46 189.71 190.16 190.81 191.62 192.59 193.69 194.92 - 196.26 197.72 199.24 200.9 202.65 204.51 206.41 208.45 210.56 212.77 215.01 217.37 219.81 222.33 224.88 227.54 - 230.28 233.05 235.92 238.86 241.83 244.9 248.04 251.23 / - 5 18 8 1 176.49 161.09 159.89 159.73 160.08 160.69 161.65 162.83 164.2 165.74 167.45 169.29 - 171.27 173.38 175.61 177.95 180.39 182.94 185.59 188.62 191.47 194.39 197.4 200.48 203.64 206.89 210.21 213.57 - 217 220.48 224.02 227.62 231.28 235.01 238.79 242.62 / - 5 18 9 1 129.69 122 121.48 122.09 123.37 125.1 127.08 129.32 131.75 134.35 137.09 140.06 - 143.07 146.27 149.52 152.95 156.39 159.99 163.67 167.36 171.27 175.11 179.02 183.16 187.2 191.29 195.82 200.03 - 204.3 208.62 212.99 217.92 222.39 226.92 231.5 236.13 / - 5 18 10 1 84.78 85.37 87.45 90.13 93.15 96.29 99.59 102.98 106.55 110.24 114 117.93 - 121.99 126.06 130.33 134.7 139.18 143.77 148.3 153.07 157.93 162.67 167.69 172.81 177.74 183.01 188.34 193.44 - 198.91 204.11 209.72 215.03 220.78 226.18 232.08 237.58 / - 5 18 11 1 63.22 66.85 70.36 74.05 77.85 81.73 85.72 89.81 94.02 98.34 102.79 107.35 - 112.02 116.82 121.72 127.19 132.83 138.33 143.91 149.65 155.43 161.26 167.18 173.2 179.31 185.51 191.81 198.19 - 204.66 211.18 217.47 224.13 230.92 237.79 244.76 251.33 / - 5 18 12 1 56.25 61.31 65.46 69.55 73.85 78.35 83.04 87.91 92.95 98.17 103.55 109.1 - 114.8 120.65 126.64 132.73 138.92 145.22 151.64 158.18 164.84 171.61 178.49 185.49 192.58 199.78 207.07 214.97 - 223.53 232.05 240.33 248.63 256.98 265.39 273.96 282.42 / - 5 18 13 1 50.75 57.25 62.66 67.88 73.21 78.78 84.68 90.9 97.41 104.18 111.18 118.39 - 125.81 133.42 141.21 149.17 157.3 165.6 174.05 182.66 191.41 200.26 209.23 218.35 227.56 236.83 246.19 255.65 - 265.23 274.91 284.71 294.63 304.66 314.81 325.07 335.46 / - 5 18 14 1 46.26 53.89 61.43 69.26 77.31 85.68 94.39 103.35 112.49 122.13 132.06 141.48 - 151.52 162.08 172.88 183.95 195.13 206.48 217.97 229.72 241.62 253.76 266.1 277.19 289.78 304.14 317.31 330 - 343.54 356.15 370.06 384.19 399.75 411.98 426.63 443.63 / - 5 18 15 1 42.39 54.79 67.85 80.93 93.81 106.71 119.55 132.35 146.53 159.39 174.1 189.13 - 202.15 217.75 233.33 249.11 265.56 282.3 298.55 315.91 332.72 350.72 369.06 387.74 406.78 425.26 444.5 464.56 - 484.96 505.71 526.8 548.21 569.97 592.09 614.57 637.41 / - 5 18 16 1 46.08 67.41 88.14 107.72 127.1 146.52 166.32 186.83 207.5 228.43 251.59 272.96 - 297.2 322.03 346.64 370.43 396.94 423.88 451.12 479.49 507.49 537.06 567.28 598.09 628.59 660.76 693.6 727.15 - 761.39 796.34 831.64 867.8 903.92 941.75 980.32 1019.6 / - 5 18 17 1 62.49 93.65 125.95 157.06 187.7 219.19 251.36 285 320.15 356.4 395.26 433.99 - 475.69 516.69 560.98 606.9 652.54 700.62 750.88 802.41 855.22 909.62 965.64 1022.37 1081.33 1141.69 1202.86 1265.54 - 1326.11 1387.98 1451.27 1515.57 1581.08 1648.13 1717.08 1786.29 / - 5 18 18 1 89.12 141.24 190.03 242.1 295.24 350.61 408.73 470.25 534.8 602.93 674.7 750.51 - 829.59 912.76 999.43 1089.85 1183.09 1279.14 1374.49 1471.98 1573.88 1677.72 1785.08 1895.67 2008.62 2124.7 2243.03 2366.04 - 2488.93 2616.17 2747.29 2879.72 3014.2 3152.78 3292.91 3435.46 / - 5 18 19 1 132.94 213.91 294.79 385.71 485.82 592.66 707.99 831.36 964.41 1105.29 1255.33 1408.07 - 1569.78 1740.07 1913.54 2102.22 2290.52 2486.33 2701.43 2911.34 3127.08 3351.12 3600.06 3839.14 4083.11 4336.24 4595.16 4864.8 - 5139.15 5423.77 5707.39 6005.35 6305.66 6613.02 6931.45 7246.65 / - 5 18 20 1 203.68 333.73 468.76 614.94 789.94 1012.55 1259.8 1517.4 1792 2093.15 2420.63 2763.93 - 3119.98 3503.48 3893.33 4315.57 4762.51 5199.45 5690.09 6167.03 6702.57 7212.12 7742.88 8348.95 8916.16 9496.8 10083.98 10693.57 - 11415.24 12063.05 12740.33 13438.33 14157.03 14896.1 15665.23 16459.42 / - 5 19 1 1 234.53 233.83 233.63 233.66 233.84 234.14 234.52 234.99 235.54 236.15 236.84 237.59 - 238.41 239.29 240.24 241.25 242.32 243.45 244.65 245.91 247.23 248.61 250.05 251.56 253.12 254.75 256.43 258.18 - 259.98 261.85 263.78 265.77 267.82 269.93 272.09 274.32 / - 5 19 2 1 233.99 233.12 232.81 232.78 232.92 233.18 233.54 234 234.53 235.14 235.82 236.57 - 237.38 238.27 239.22 240.23 241.31 242.45 243.65 244.92 246.25 247.64 249.1 250.61 252.19 253.83 255.53 257.29 - 259.11 260.99 262.94 264.94 267.01 269.14 271.32 273.57 / - 5 19 3 1 232.82 231.59 231.08 230.92 230.96 231.16 231.48 231.9 232.41 233.01 233.68 234.42 - 235.24 236.13 237.09 238.12 239.21 240.37 241.6 242.89 244.24 245.66 247.14 248.69 250.29 251.97 253.7 255.5 - 257.36 259.28 261.26 263.31 265.41 267.58 269.81 272.1 / - 5 19 4 1 230.55 228.32 227.35 227.05 227.01 227.16 227.44 227.84 228.35 228.95 229.63 230.39 - 231.24 232.16 233.15 234.22 235.35 236.56 237.84 239.18 240.59 242.07 243.61 245.22 246.89 248.63 250.44 252.31 - 254.24 256.24 258.3 260.42 262.61 264.86 267.17 269.55 / - 5 19 5 1 226.47 221.87 220.49 220.03 219.89 219.98 220.24 220.63 221.15 221.78 222.5 223.32 - 224.23 225.22 226.29 227.44 228.67 229.97 231.29 232.74 234.26 235.86 237.52 239.26 241.06 242.94 244.88 246.89 - 248.97 251.11 253.32 255.6 257.94 260.34 262.81 265.34 / - 5 19 6 1 219.46 210.62 208.74 208.13 207.94 208.02 208.31 208.76 209.36 210.08 210.92 211.87 - 212.92 214.06 215.27 216.59 218 219.5 221.08 222.75 224.49 226.31 228.17 230.15 232.2 234.32 236.52 238.79 - 241.1 243.51 245.99 248.53 251.15 253.83 256.56 259.38 / - 5 19 7 1 203.72 191.24 189.1 188.6 188.55 188.82 189.33 190.03 190.87 191.87 193.01 194.28 - 195.66 197.16 198.72 200.43 202.24 204.14 206.14 208.18 210.35 212.61 214.95 217.33 219.83 222.42 225.03 227.76 - 230.57 233.44 236.35 239.37 242.46 245.57 248.79 252.08 / - 5 19 8 1 175.57 160.61 159.39 159.23 159.59 160.21 161.19 162.38 163.77 165.34 167.06 168.93 - 170.94 173.08 175.34 177.71 180.19 182.77 185.46 188.24 191.44 194.41 197.46 200.59 203.8 207.08 210.43 213.85 - 217.33 220.88 224.49 228.17 231.91 235.7 239.56 243.56 / - 5 19 9 1 129.22 121.95 121.52 122.29 123.71 125.48 127.54 129.79 132.24 134.86 137.62 140.6 - 143.62 146.75 150.08 153.42 156.97 160.57 164.19 167.97 171.75 175.75 179.67 183.84 187.9 192.02 196.19 200.83 - 205.13 209.49 213.9 218.37 223.4 227.98 232.61 237.28 / - 5 19 10 1 85.47 86.26 88.62 91.52 94.55 97.7 100.99 104.36 107.89 111.54 115.26 119.16 - 123.19 127.23 131.46 135.8 140.27 144.84 149.34 154.1 158.96 163.7 168.73 173.86 178.79 184.08 189.13 194.55 - 199.72 205.28 210.56 216.26 221.65 227.5 232.99 238.99 / - 5 19 11 1 64.39 68.22 72.05 75.89 79.74 83.63 87.59 91.64 95.79 100.05 104.42 108.91 - 113.51 118.23 123.07 128.39 134 139.43 145.07 150.68 156.42 162.16 168.26 174.27 180.38 186.59 192.62 199 - 205.48 212.04 218.66 225.35 232.19 238.69 245.68 252.76 / - 5 19 12 1 57.87 62.89 67.05 71.25 75.6 80.11 84.77 89.59 94.58 99.73 105.04 110.51 - 116.13 121.91 127.83 133.9 140.09 146.36 152.74 159.23 165.85 172.57 179.42 186.37 193.43 200.6 207.86 215.23 - 223.52 232.2 240.6 249 257.44 265.91 274.39 283.04 / - 5 19 13 1 52.52 58.95 64.23 69.34 74.57 80.1 85.98 92.15 98.6 105.29 112.2 119.33 - 126.66 134.18 141.89 149.76 157.81 166.02 174.39 182.91 191.56 200.29 209.17 218.2 227.36 236.67 246.12 255.65 - 265.26 274.96 284.76 294.67 304.7 314.84 325.1 335.48 / - 5 19 14 1 47.71 55.5 62.99 70.64 78.49 86.67 95.25 104 113.16 122.71 131.98 141.52 - 151.75 162.2 172.86 183.71 194.76 206 217.43 229.05 240.85 252.85 265.03 277.21 289.79 302.59 315.59 328.06 - 341.4 353.79 367.5 381.41 396.73 408.59 423.07 440.13 / - 5 19 15 1 43.81 56.15 68.97 81.68 94.51 106.86 120.01 132.67 145.64 159.33 173.91 188.19 - 201.55 216.95 232.19 247.87 264.09 279.76 296.56 313.42 330.16 347.87 365.91 384.27 402.81 421.56 439.84 459.53 - 479.57 499.93 520.63 541.63 562.98 584.67 606.72 629.13 / - 5 19 16 1 47.21 68.33 88.53 108.13 127.18 146.64 166.27 186.55 207.03 227.69 250.64 271.52 - 295.36 319.71 342.52 366.94 392.95 419.32 445.95 473.74 501.1 530.09 559.6 589.72 619.74 651.31 683.54 716.44 - 750.01 784.27 819.04 853.36 889.43 926.44 964.16 1002.57 / - 5 19 17 1 63.67 93.81 126.15 156.79 187.46 218.21 250.43 283.62 318.35 353.95 391.92 430.4 - 471.49 511.62 555.2 600.4 646.1 692.01 741.2 791.55 843.18 896.45 951.01 1006.52 1064.19 1123.28 1183.25 1244.98 - 1306.38 1368.84 1432.63 1497.51 1563.96 1631.9 1701.02 1771.53 / - 5 19 18 1 89.62 141.43 190.52 241.96 294.02 348.32 405.5 465.88 529.57 596.84 667.51 742.39 - 819.86 901.71 986.35 1075.44 1167.63 1262.75 1358.86 1457.91 1559.9 1665.57 1774.39 1885.78 2000.01 2118.57 2238.73 2362.24 - 2488.81 2616.89 2748.82 2884.66 3021.73 3162.77 3305.72 3452.8 / - 5 19 19 1 133.84 215.93 297.72 387.57 485.3 590.95 703.59 825.13 955.77 1094.61 1242.29 1396.13 - 1558.11 1729.09 1904.65 2093.44 2284.26 2482.6 2698.65 2912.21 3133.84 3361.13 3612.62 3857.01 4108.54 4366.62 4633.13 4907.06 - 5188.83 5478.63 5773.71 6077.6 6382.07 6699.58 7020.11 7348.44 / - 5 19 20 1 205.52 338.27 476.58 625.94 789.36 998.18 1241.12 1495.38 1777.89 2076.96 2402.5 2740.06 - 3104.17 3488.19 3887.78 4308.92 4743.04 5212.71 5706.29 6185.04 6723.42 7241.43 7825.63 8381.51 8950.9 9538.35 10212.74 10838.44 - 11485.41 12153.11 12841.48 13545.02 14392.58 15151.65 15931.73 16732.7 / - 5 20 1 1 234.75 233.98 233.71 233.7 233.85 234.12 234.48 234.94 235.48 236.09 236.78 237.53 - 238.36 239.25 240.2 241.23 242.31 243.46 244.68 245.96 247.3 248.71 250.17 251.7 253.3 254.95 256.67 258.45 - 260.29 262.19 264.16 266.19 268.27 270.42 272.64 274.91 / - 5 20 2 1 233.9 232.87 232.46 232.35 232.43 232.65 232.99 233.42 233.95 234.55 235.23 235.98 - 236.81 237.7 238.67 239.7 240.8 241.97 243.2 244.49 245.85 247.28 248.77 250.32 251.94 253.62 255.37 257.17 - 259.04 260.98 262.97 265.03 267.15 269.33 271.58 273.89 / - 5 20 3 1 232.48 231.02 230.29 230.04 230.03 230.19 230.49 230.89 231.4 231.99 232.67 233.43 - 234.26 235.17 236.15 237.2 238.33 239.52 240.78 242.11 243.51 244.97 246.5 248.09 249.75 251.48 253.27 255.13 - 257.05 259.03 261.08 263.19 265.37 267.61 269.91 272.28 / - 5 20 4 1 230.07 227.51 226.29 225.93 225.85 225.97 226.24 226.63 227.14 227.74 228.44 229.22 - 230.09 231.03 232.06 233.16 234.33 235.58 236.89 238.28 239.74 241.27 242.87 244.54 246.27 248.01 249.88 251.82 - 253.83 255.9 258.04 260.24 262.51 264.84 267.24 269.71 / - 5 20 5 1 225.96 221.05 219.42 218.91 218.74 218.82 219.07 219.47 220 220.64 221.38 222.22 - 223.15 224.17 225.27 226.46 227.73 229.07 230.5 232 233.57 235.22 236.95 238.74 240.55 242.5 244.51 246.59 - 248.74 250.96 253.25 255.61 258.04 260.53 263.09 265.72 / - 5 20 6 1 218.38 209.56 207.59 207.01 206.84 206.94 207.25 207.73 208.36 209.11 209.98 210.96 - 212.04 213.19 214.46 215.83 217.29 218.84 220.47 222.18 223.98 225.81 227.77 229.81 231.92 234.11 236.38 238.68 - 241.1 243.58 246.14 248.77 251.44 254.21 257.05 259.96 / - 5 20 7 1 202.28 190.03 187.98 187.58 187.61 187.95 188.51 189.26 190.17 191.2 192.39 193.7 - 195.11 196.65 198.3 200.06 201.87 203.82 205.87 207.98 210.19 212.51 214.91 217.34 219.91 222.56 225.23 228.03 - 230.91 233.81 236.83 239.93 243.05 246.28 249.59 252.92 / - 5 20 8 1 174.55 160.13 158.9 158.75 159.11 159.75 160.74 161.95 163.36 164.97 166.74 168.65 - 170.71 172.9 175.2 177.62 180.15 182.77 185.49 188.31 191.22 194.23 197.33 200.89 204.15 207.48 210.88 214.35 - 217.87 221.47 225.12 228.84 232.62 236.45 240.35 244.3 / - 5 20 9 1 129.1 122.26 122.45 123.55 125.1 126.97 129.07 131.35 133.78 136.36 139.09 142.04 - 145.02 148.11 151.38 154.68 158.18 161.67 165.34 169.12 172.89 176.9 180.84 184.84 189.09 193.22 197.41 202.05 - 206.36 210.72 215.14 219.6 224.12 229.22 233.85 238.52 / - 5 20 10 1 87.69 89.6 92.48 95.39 98.39 101.49 104.63 107.87 111.27 114.73 118.36 122.12 - 125.92 129.9 134 138.11 142.45 146.91 151.32 156.01 160.81 165.48 170.47 175.55 180.45 185.7 190.72 196.1 - 201.23 206.76 212 217.68 223.03 228.85 234.31 240.29 / - 5 20 11 1 68.11 72.93 77.23 81.22 85.07 88.85 92.64 96.48 100.4 104.42 108.55 112.8 - 117.17 121.65 126.26 131.61 136.81 142.06 147.41 152.86 158.47 164.27 170.06 175.97 181.74 187.83 194.02 200.3 - 206.68 213.15 219.67 225.94 232.61 239.43 246.34 252.87 / - 5 20 12 1 62.44 67.29 71.78 76.15 80.5 84.92 89.44 94.09 98.87 103.79 108.85 114.07 - 119.43 124.95 130.62 136.43 142.38 148.48 154.72 161.09 167.59 174.17 180.83 187.6 194.49 201.49 208.61 215.82 - 223.13 231.7 240.08 248.42 256.72 265.04 273.4 281.83 / - 5 20 13 1 57.79 63.41 68.22 73.16 78.37 83.85 89.58 95.56 101.76 108.19 114.84 121.68 - 128.72 135.95 143.36 150.94 158.7 166.61 174.69 182.88 191.18 199.63 208.22 216.96 225.85 234.88 244.06 253.38 - 262.84 272.45 282.18 292.02 302.01 312.11 322.26 332.51 / - 5 20 14 1 52.69 60.22 66.84 74.09 81.47 89.32 97.62 106.27 115.22 123.7 132.72 142.35 - 152.2 162.27 172.54 183.03 193.72 204.61 215.69 226.97 238.44 250.1 261.54 273.91 285.83 298.29 310.94 323.23 - 336.25 348.08 361.44 375 387.93 401.26 415.36 429.67 / - 5 20 15 1 48.22 60.16 72.75 84.96 96.93 108.79 120.49 133.71 145.41 159.2 173.31 185.49 - 199.69 214.59 229.24 244.6 260.38 275.51 291.88 307.82 324.49 341.72 359.19 377.07 395.13 412.42 431.01 450.18 - 469.69 489.54 509.72 530.19 550.98 572.11 593.58 615.4 / - 5 20 16 1 50.9 71.94 91.32 110.01 127.89 146.96 165.07 184.54 205.8 225.58 247.8 267.79 - 290.98 314.63 336.3 360.02 385.23 410.55 436.73 463.32 490.1 518.29 547.1 575.32 605.4 636.13 667.5 699.52 - 732.19 765.29 798.91 831.92 867.18 903.11 939.69 976.94 / - 5 20 17 1 65.57 97.25 127.96 157.25 186.9 216.94 248.32 281.46 315.36 350.09 385.66 424.74 - 461.7 502.89 545.34 589.06 630.31 676.72 724.49 773.33 823.18 875.07 927.2 981.92 1038.03 1094.87 1153.69 1213.28 - 1275.01 1338.14 1402.67 1468.59 1535.06 1603.65 1673.75 1745.22 / - 5 20 18 1 94.69 142.3 191.46 241.74 292.54 345.5 401.83 460.89 523.63 589.36 658.01 731.52 - 806.73 886.92 968.54 1055.31 1145.38 1238.93 1334.03 1434.51 1538.26 1645.28 1755.22 1868.3 1984.47 2103.88 2226.3 2351.83 - 2480.23 2611.64 2746.51 2883.85 3024.25 3168.04 3314.32 3463.47 / - 5 20 19 1 137.92 220.68 302.45 391.45 486.82 589.17 699.36 818.03 945.14 1081.23 1226.26 1380.05 - 1542.75 1714.43 1891.84 2081.42 2275.22 2476.58 2692.25 2909.6 3134.31 3366.26 3605.46 3866.19 4122.28 4385.92 4657.02 4935.42 - 5222.56 5518.01 5819.22 6129.62 6447.53 6769.75 7102.5 7439.01 / - 5 20 20 1 210.08 347.08 490.18 643.48 808.79 986.52 1176.98 1380 1636.69 1927.43 2234.31 2564.98 - 2914.3 3288.67 3670.75 4089.27 4536.29 4980.38 5479.1 5968.45 6480.67 7016.25 7575.81 8174.82 8753.01 9388.11 10022.97 10636.74 - 11352.97 12014.27 12696.69 13501.87 14233.48 14986.34 15883.69 16686.71 / - 6 1 1 1 204.54 204.38 204.45 204.65 204.95 205.34 205.8 206.34 206.93 207.59 208.31 209.09 - 209.93 210.83 211.79 212.8 213.87 214.99 216.17 217.41 218.7 220.04 221.44 222.9 224.41 225.97 227.59 229.26 - 230.99 232.77 234.6 236.48 238.42 240.42 242.46 244.56 / - 6 1 2 1 204.46 204.29 204.35 204.55 204.85 205.24 205.7 206.23 206.82 207.48 208.2 208.98 - 209.82 210.72 211.68 212.69 213.76 214.88 216.07 217.3 218.59 219.94 221.34 222.8 224.31 225.87 227.49 229.17 - 230.89 232.67 234.51 236.4 238.34 240.33 242.38 244.49 / - 6 1 3 1 204.31 204.11 204.16 204.36 204.66 205.04 205.5 206.03 206.62 207.28 208 208.78 - 209.62 210.52 211.48 212.49 213.56 214.69 215.87 217.11 218.4 219.75 221.15 222.61 224.12 225.69 227.31 228.99 - 230.72 232.5 234.34 236.23 238.17 240.17 242.22 244.33 / - 6 1 4 1 204.03 203.79 203.82 204 204.29 204.67 205.12 205.65 206.24 206.9 207.62 208.4 - 209.24 210.14 211.1 212.11 213.19 214.32 215.5 216.74 218.04 219.39 220.79 222.26 223.77 225.34 226.97 228.65 - 230.38 232.17 234.01 235.91 237.86 239.87 241.92 244.04 / - 6 1 5 1 203.48 203.18 203.17 203.33 203.61 203.98 204.43 204.95 205.54 206.2 206.92 207.7 - 208.54 209.44 210.4 211.42 212.49 213.63 214.82 216.06 217.36 218.72 220.13 221.6 223.13 224.7 226.34 228.03 - 229.77 231.57 233.42 235.32 237.29 239.3 241.37 243.49 / - 6 1 6 1 202.06 201.4 201.11 201.16 201.35 201.67 202.08 202.58 203.16 203.81 204.52 205.32 - 206.17 207.09 208.06 209.1 210.19 211.35 212.56 213.82 215.15 216.53 217.98 219.48 221.04 222.66 224.33 226.06 - 227.85 229.69 231.59 233.54 235.55 237.61 239.73 241.9 / - 6 1 7 1 197.04 193.68 193.11 192.93 193 193.24 193.63 194.14 194.75 195.45 196.23 197.09 - 198 199.01 200.09 201.24 202.45 203.73 205.08 206.5 207.97 209.51 211.11 212.78 214.5 216.29 218.13 220.03 - 221.99 224 226.06 228.19 230.37 232.59 234.89 237.24 / - 6 1 8 1 181.21 174.34 173.2 172.78 172.77 173.08 173.6 174.28 175.13 176.1 177.2 178.4 - 179.71 181.11 182.57 184.15 185.81 187.54 189.35 191.21 193.16 195.17 197.25 199.37 201.57 203.83 206.15 208.51 - 210.94 213.42 215.96 218.55 221.19 223.88 226.62 229.42 / - 6 1 9 1 144.79 135.17 133.78 133.62 134.01 134.9 136.1 137.57 139.28 141.16 143.22 145.39 - 147.71 150.26 152.79 155.39 158.09 160.87 163.68 166.59 169.8 172.82 175.85 178.96 182.07 185.26 188.46 192.16 - 195.44 198.78 202.12 205.53 208.95 212.42 215.91 219.45 / - 6 1 10 1 91.5 90.17 91.08 92.82 94.95 97.34 99.93 102.75 105.73 108.79 112.04 115.34 - 118.84 122.44 126.03 129.83 133.72 137.53 141.57 145.5 149.68 153.93 158.02 162.4 166.57 171.06 175.31 179.8 - 184.16 188.76 193.26 197.75 202.11 206.74 211.12 215.81 / - 6 1 11 1 64.96 67.15 69.99 73.05 76.24 79.53 82.91 86.42 90.04 93.77 97.95 102.14 - 106.41 110.8 115.25 119.75 124.5 129.24 134.07 138.99 143.99 149.07 154.23 159.44 164.72 170.09 175.53 180.74 - 186.29 191.91 197.59 202.96 208.74 214.6 220.07 225.98 / - 6 1 12 1 57.73 61.08 64.36 67.9 71.65 75.57 79.67 83.93 88.36 92.95 97.69 102.58 - 107.59 112.69 117.92 123.27 128.74 134.33 140.04 145.85 151.77 158.61 165.46 172.18 178.8 185.57 192.34 199.09 - 205.92 212.82 219.8 226.85 233.98 241.18 248.45 255.74 / - 6 1 13 1 53.73 58.23 62.35 66.62 71.18 76.11 81.39 86.97 92.81 98.9 105.21 111.73 - 118.45 125.36 132.46 139.72 147.16 154.76 162.52 170.43 178.38 186.39 194.49 202.69 210.99 219.39 227.91 236.53 - 246.09 255.97 265.54 275.08 284.92 294.46 304.13 314.07 / - 6 1 14 1 49.48 55.68 61.85 68.18 74.89 82.2 90.26 98.4 106.95 115.85 125.05 134.51 - 144.22 154.17 163.55 174.58 184.31 195.72 206.6 217.13 229.14 239.65 252.62 262.95 274.91 286.95 299.12 311.42 - 323.86 336.46 349.22 362.14 376.01 390.45 404.98 419.45 / - 6 1 15 1 46.54 56.19 67.84 79.72 91.61 103.54 115.51 127.85 140.93 154.85 167.69 181.51 - 196.38 211.1 226.33 242.1 258.21 273.12 289.67 306.8 324.29 342.18 360.42 378.69 396.75 415.65 435 454.63 - 474.58 494.86 515.48 536.46 559.15 581.74 605.1 628.63 / - 6 1 16 1 48.65 69.15 88.31 106.67 125.41 144.74 163.67 183.72 205.17 226.61 247.84 270.99 - 295.2 319.31 342.69 368.8 395.32 422.38 450.48 478.44 508.12 538.57 568.6 600.5 633.08 666.12 699.82 734.39 - 770.79 807.34 845.49 884.4 923.46 963.32 1003.64 1043.47 / - 6 1 17 1 65.48 95.71 126.85 157.02 187.13 218.77 251.95 285.56 321.41 359.96 398.49 438.76 - 481.21 525.8 571.55 616.58 665.62 716.6 769.1 823.41 879.19 936.43 996.71 1058.34 1119.44 1180.39 1238.02 1290.43 - 1332.33 1376.36 1425.06 1472 1522.1 1573.1 1624.54 1675.47 / - 6 1 18 1 92.38 142.32 192.01 243.38 296.66 353.17 413.49 477.69 546.03 617.76 693.08 773.27 - 857.93 947.09 1039.34 1133.6 1230.65 1320.05 1407.55 1496.93 1590.61 1686.36 1785.2 1885.85 1987.34 2089.41 2195.1 2303.39 - 2408.83 2520.47 2635.1 2749.95 2866.89 2985.04 3105.1 3230.99 / - 6 1 19 1 136.16 214.57 299.01 394.02 496.49 607.86 728.7 860.28 1005.18 1156.88 1302.39 1444.76 - 1588.77 1747.62 1901.42 2060.39 2232.2 2400.81 2572.29 2753.25 2933.94 3124.8 3316.67 3512.06 3711.63 3917.94 4130.18 4343.34 - 4566.29 4786.85 5019.05 5246.25 5485.61 5732.19 5966.93 6224.72 / - 6 1 20 1 205.22 327.16 475.77 664.69 878.83 1122.93 1369.41 1613.06 1871.53 2156.84 2437.9 2748.38 - 3059.05 3402.17 3746.04 4097.34 4496.06 4880.45 5273.68 5681.02 6105.67 6532.44 6982.45 7433.48 7910.69 8390.64 8891.88 9377.33 - 9905.29 10435.22 10978.17 11544.49 12118.34 12681.25 13287.96 13925.33 / - 6 2 1 1 206.38 206.21 206.27 206.47 206.77 207.16 207.62 208.15 208.75 209.41 210.13 210.91 - 211.75 212.65 213.61 214.62 215.7 216.82 218.01 219.25 220.54 221.89 223.3 224.76 226.27 227.84 229.47 231.14 - 232.88 234.66 236.5 238.4 240.34 242.35 244.4 246.51 / - 6 2 2 1 206.3 206.11 206.16 206.36 206.66 207.05 207.51 208.04 208.63 209.29 210.02 210.8 - 211.64 212.54 213.5 214.51 215.59 216.71 217.9 219.14 220.44 221.79 223.19 224.65 226.17 227.74 229.37 231.05 - 232.78 234.57 236.41 238.31 240.26 242.26 244.32 246.43 / - 6 2 3 1 206.14 205.93 205.97 206.16 206.46 206.84 207.3 207.83 208.43 209.09 209.81 210.59 - 211.43 212.33 213.29 214.31 215.38 216.51 217.69 218.94 220.23 221.59 222.99 224.46 225.98 227.55 229.18 230.86 - 232.59 234.38 236.23 238.13 240.08 242.09 244.15 246.26 / - 6 2 4 1 205.84 205.59 205.62 205.8 206.08 206.46 206.92 207.44 208.04 208.7 209.42 210.2 - 211.04 211.94 212.9 213.92 214.99 216.12 217.31 218.56 219.86 221.21 222.62 224.09 225.61 227.19 228.82 230.51 - 232.25 234.04 235.89 237.8 239.76 241.77 243.84 245.96 / - 6 2 5 1 205.27 204.95 204.94 205.1 205.38 205.75 206.2 206.72 207.31 207.97 208.69 209.47 - 210.32 211.22 212.18 213.2 214.28 215.42 216.61 217.86 219.16 220.52 221.94 223.42 224.94 226.53 228.17 229.86 - 231.61 233.42 235.28 237.19 239.16 241.18 243.26 245.39 / - 6 2 6 1 203.66 202.83 202.58 202.63 202.84 203.16 203.58 204.08 204.66 205.31 206.04 206.83 - 207.68 208.6 209.57 210.61 211.72 212.88 214.1 215.37 216.71 218.11 219.56 221.07 222.64 224.26 225.94 227.68 - 229.48 231.33 233.23 235.2 237.21 239.29 241.42 243.6 / - 6 2 7 1 198.31 194.72 194.03 193.86 193.95 194.2 194.6 195.11 195.72 196.42 197.21 198.08 - 199.03 200.05 201.15 202.32 203.55 204.85 206.21 207.64 209.14 210.66 212.28 213.96 215.7 217.5 219.36 221.28 - 223.26 225.3 227.39 229.55 231.76 234.03 236.35 238.72 / - 6 2 8 1 181.17 174.61 173.47 173.07 173.09 173.4 173.93 174.64 175.5 176.5 177.62 178.85 - 180.19 181.59 183.11 184.72 186.41 188.18 189.84 191.74 193.71 195.75 197.83 200 202.23 204.51 206.84 209.24 - 211.7 214.21 216.77 219.38 222.05 224.77 227.88 230.72 / - 6 2 9 1 144.92 134.89 133.58 133.47 133.89 134.81 136.04 137.55 139.29 141.21 143.29 145.5 - 147.85 150.28 153.01 155.63 158.37 161.14 164.02 166.93 169.94 173.27 176.38 179.51 182.71 185.95 189.2 192.51 - 196.29 199.68 203.09 206.55 210.01 213.54 217.08 220.67 / - 6 2 10 1 91.58 90.24 91.26 93 95.16 97.62 100.24 103.09 106.04 109.19 112.4 115.81 - 119.33 122.86 126.59 130.42 134.19 138.2 142.27 146.24 150.46 154.53 158.87 163.04 167.5 171.75 176.33 180.66 - 185.22 189.87 194.34 198.94 203.52 208.22 212.67 217.43 / - 6 2 11 1 65.08 67.33 70.18 73.27 76.48 79.81 83.24 86.78 90.44 94.22 98.34 102.63 - 106.92 111.36 115.84 120.45 125.13 130.02 134.9 139.86 144.91 150.05 155.26 160.51 165.84 171 176.47 182.01 - 187.62 193.29 198.67 204.45 210.29 215.78 221.73 227.7 / - 6 2 12 1 57.8 61.23 64.55 68.1 71.88 75.84 79.97 84.28 88.74 93.37 98.15 103.09 - 108.14 113.29 118.56 123.96 129.47 135.11 140.86 146.72 152.69 159.42 166.39 173.13 179.79 186.65 193.45 200.44 - 207.33 214.3 221.34 228.46 235.65 242.92 250.26 257.62 / - 6 2 13 1 53.65 58.32 62.51 66.84 71.44 76.39 81.71 87.33 93.21 99.34 105.7 112.26 - 119.03 125.99 133.13 140.44 147.93 155.58 163.39 171.34 179.35 187.41 195.56 203.81 212.17 220.63 229.2 237.88 - 247.22 257.22 266.93 276.76 286.39 296.06 305.79 315.67 / - 6 2 14 1 49.39 55.69 61.95 68.35 75.12 82.77 90.59 98.78 107.37 116.31 125.55 135.06 - 144.82 154.81 165.03 175.11 185.1 196.57 207.62 218.09 229.48 240.72 252.26 264.13 276.15 288.26 300.48 312.85 - 325.36 338.03 350.86 363.85 377.01 391.54 406.26 421.02 / - 6 2 15 1 46.49 56.22 67.94 79.86 91.81 103.79 115.81 128.76 141.32 155.28 168.34 182.03 - 196.97 211.8 227.02 242.85 259 274.3 290.57 307.75 325.3 343.23 361.53 380.16 398.64 416.99 436.42 456.14 - 476.17 496.52 517.22 538.29 560.18 583.36 606.91 630.67 / - 6 2 16 1 48.62 69.18 88.36 106.98 125.57 144.93 163.9 183.98 204.91 226.95 248.59 271.45 - 295.72 320.3 343.31 369.48 396.07 423.17 451.29 479.29 508.99 539.46 569.52 601.43 634.03 667.14 700.9 735.48 - 770.5 807.63 845.94 885.13 924.51 964.36 1004.38 1045.27 / - 6 2 17 1 65.4 95.72 127.02 157.1 187.26 218.92 252.12 285.74 321.6 360.29 398.7 440.11 - 481.49 526.08 571.85 616.87 665.85 716.77 769.27 823.62 879.52 936.64 996.58 1058.38 1119.72 1180.91 1238.89 1292.57 - 1333.9 1380.67 1427.02 1475.74 1525.69 1579.92 1631.96 1682.36 / - 6 2 18 1 92.24 142.39 191.98 243.46 296.98 353.49 413.62 477.74 545.99 617.69 692.86 772.88 - 857.35 946.38 1038.65 1132.96 1229.96 1320.64 1409.53 1500.55 1596.19 1685.64 1778.83 1872.29 1965.09 2060.41 2157.82 2259.14 - 2355.79 2460.56 2563.3 2672 2776.46 2885.22 2993.25 3107.11 / - 6 2 19 1 135.97 214.4 298.6 393.36 495.58 607.81 728.47 859.76 1004.36 1155.93 1301.9 1444.89 - 1589.49 1749.12 1904.94 2066.08 2240.15 2410.7 2584.09 2766.7 2948.89 3138.84 3335.91 3533.42 3735.19 3943.72 4155.31 4373.64 - 4594.6 4821.8 5056.27 5282.6 5527.88 5776.68 6014.61 6270.29 / - 6 2 20 1 205.02 327.05 474.06 661.64 878.46 1116.51 1364.49 1613.66 1873.02 2148.66 2441.88 2753.79 - 3066.01 3411.05 3756.62 4109.83 4512.47 4899.55 5300.46 5709.62 6142.7 6574.6 7029.76 7485.79 7968.28 8453.34 8959.57 9450.11 - 9983.14 10518.59 11067.43 11639.98 12219.89 12789.12 13402.17 14046.3 / - 6 3 1 1 208.22 208.03 208.08 208.28 208.58 208.97 209.43 209.96 210.56 211.22 211.94 212.73 - 213.57 214.47 215.43 216.45 217.52 218.65 219.84 221.08 222.38 223.74 225.14 226.61 228.13 229.7 231.33 233.02 - 234.76 236.55 238.4 240.3 242.26 244.27 246.33 248.45 / - 6 3 2 1 208.13 207.93 207.98 208.17 208.47 208.86 209.32 209.85 210.44 211.1 211.83 212.61 - 213.45 214.35 215.31 216.33 217.41 218.54 219.73 220.97 222.27 223.62 225.04 226.5 228.02 229.6 231.23 232.92 - 234.66 236.45 238.3 240.2 242.16 244.17 246.24 248.36 / - 6 3 3 1 207.96 207.74 207.78 207.97 208.26 208.64 209.1 209.63 210.23 210.89 211.61 212.39 - 213.24 214.14 215.1 216.12 217.19 218.32 219.51 220.76 222.06 223.42 224.83 226.3 227.82 229.4 231.03 232.72 - 234.46 236.26 238.11 240.02 241.98 243.99 246.06 248.19 / - 6 3 4 1 207.65 207.39 207.41 207.59 207.87 208.25 208.7 209.23 209.82 210.48 211.21 211.99 - 212.83 213.74 214.7 215.72 216.79 217.93 219.12 220.37 221.67 223.03 224.45 225.92 227.45 229.03 230.66 232.36 - 234.1 235.91 237.76 239.68 241.64 243.66 245.74 247.87 / - 6 3 5 1 207.05 206.73 206.71 206.87 207.15 207.52 207.97 208.49 209.08 209.74 210.46 211.25 - 212.09 213 213.96 214.98 216.06 217.2 218.4 219.65 220.96 222.32 223.75 225.22 226.76 228.35 229.99 231.69 - 233.45 235.26 237.13 239.05 241.02 243.06 245.14 247.28 / - 6 3 6 1 205.24 204.36 204.05 204.07 204.26 204.57 204.98 205.48 206.06 206.71 207.44 208.23 - 209.09 210.01 211 212.05 213.16 214.33 215.56 216.85 218.2 219.61 221.07 222.6 224.18 225.82 227.52 229.28 - 231.09 232.95 234.86 236.84 238.87 240.95 243.1 245.29 / - 6 3 7 1 199.53 195.72 194.97 194.79 194.86 195.11 195.51 196.02 196.64 197.35 198.14 199.02 - 199.98 201.01 202.12 203.3 204.54 205.86 207.24 208.69 210.21 211.78 213.42 215.12 216.89 218.71 220.6 222.51 - 224.51 226.57 228.69 230.86 233.1 235.38 237.73 240.13 / - 6 3 8 1 181.83 174.83 173.68 173.28 173.31 173.63 174.18 174.92 175.8 176.83 177.97 179.23 - 180.5 181.93 183.47 185.1 186.81 188.58 190.44 192.38 194.39 196.47 198.58 200.79 203.06 205.36 207.74 210.18 - 212.68 215.22 217.82 220.48 223.19 225.94 228.76 231.62 / - 6 3 9 1 144.35 134.61 133.37 133.23 133.77 134.73 135.99 137.54 139.3 141.26 143.37 145.62 - 147.98 150.48 153.05 155.89 158.66 161.47 164.38 167.32 170.35 173.41 176.89 180.06 183.32 186.57 189.91 193.24 - 196.65 200.53 204.01 207.51 211.05 214.62 218.23 221.86 / - 6 3 10 1 91.6 90.38 91.4 93.21 95.41 97.86 100.55 103.38 106.41 109.59 112.83 116.27 - 119.82 123.38 127.15 130.88 134.82 138.86 142.8 146.98 151.23 155.34 159.73 163.93 168.44 172.73 177.35 181.72 - 186.33 190.77 195.49 200.2 204.91 209.42 214.22 218.75 / - 6 3 11 1 65.22 67.52 70.37 73.48 76.73 80.09 83.56 87.14 90.84 94.65 98.73 103.12 - 107.49 111.94 116.5 121.15 125.86 130.68 135.59 140.58 145.66 150.82 156.06 161.38 166.74 172.17 177.69 183.29 - 188.95 194.68 200.1 205.94 211.84 217.39 223.4 229.02 / - 6 3 12 1 57.86 61.38 64.73 68.31 72.11 76.11 80.28 84.62 89.12 93.79 98.62 103.6 - 108.69 113.88 119.2 124.64 130.2 135.88 141.68 147.59 153.61 160.23 167.27 174.11 180.96 187.73 194.74 201.52 - 208.75 215.78 222.89 230.07 237.33 244.67 252.08 259.51 / - 6 3 13 1 53.57 58.39 62.67 67.05 71.69 76.68 82.03 87.68 93.61 99.78 106.18 112.79 - 119.61 126.61 133.8 141.16 148.7 156.4 164.26 172.26 180.32 188.43 196.63 204.94 213.35 221.87 230.49 239.23 - 248.35 258.11 268.24 278 287.87 297.68 307.73 317.7 / - 6 3 14 1 49.32 55.69 62.04 68.52 75.35 83.06 90.92 99.15 107.78 116.76 126.05 135.6 - 145.41 155.45 165.72 175.85 185.89 197.41 208.53 219.05 230.49 241.79 253.34 265.3 277.38 289.56 301.85 314.28 - 326.86 339.6 352.5 365.56 378.79 393.02 407.85 422.78 / - 6 3 15 1 46.44 56.24 68.08 79.99 92.01 104.03 116.1 129.3 141.7 155.71 169.52 182.55 - 197.54 212.47 227.71 243.59 259.79 275.83 291.47 308.7 326.29 344.27 362.62 381.32 399.99 418.32 437.83 457.63 - 477.73 498.17 518.95 540.09 561.6 584.44 608.15 632.19 / - 6 3 16 1 48.56 69.18 88.48 107.3 125.73 145.13 164.13 184.24 205.84 227.28 249.85 271.91 - 296.22 321.15 343.92 370.15 396.8 423.94 452.1 480.12 509.85 540.32 570.55 602.33 634.91 668.1 701.92 736.55 - 771.11 808.34 846.79 885.79 925.5 965.22 1005.61 1045.84 / - 6 3 17 1 65.33 95.67 127.03 157.17 187.92 219.07 252.28 286.24 321.77 360.46 398.9 440.55 - 481.72 526.33 572.1 617.11 666.04 716.87 769.29 823.73 879.86 936.76 995.89 1057.78 1119.93 1181.34 1239.88 1294.42 - 1337.44 1385.74 1434.04 1484.05 1536.36 1591.41 1645.01 1697.26 / - 6 3 18 1 92.11 142.26 191.93 243.54 297.12 353.65 413.76 477.79 545.93 617.58 692.6 772.48 - 856.69 945.54 1037.86 1132.22 1229.11 1317.38 1400.95 1487.94 1575.74 1666.36 1760.51 1856.1 1951.4 2048.21 2145.62 2247.86 - 2345.99 2450.45 2555.84 2664 2772.51 2880.15 2990.54 3109.43 / - 6 3 19 1 135.78 214.22 298.16 392.72 495.64 606.51 727.55 859.18 1000.48 1150.83 1301.3 1444.92 - 1590.15 1750.44 1907.09 2070.06 2246.67 2419.54 2595.4 2779.28 2964.35 3157.03 3356.06 3555.78 3759.93 3970.71 4184.58 4405.3 - 4634.08 4858.5 5095.29 5324.57 5572.28 5823.41 6064.58 6323 / - 6 3 20 1 204.81 326.93 471.49 658.31 873.27 1115.73 1364.09 1608.6 1874.51 2151.38 2445.94 2759.33 - 3073.15 3420.13 3767.46 4122.72 4527.57 4921.43 5325.04 5736.29 6176.73 6615.78 7076.71 7530.96 8018.8 8516.95 9019.45 9524.81 - 10053.56 10604.6 11160.19 11729.7 12326.01 12901.87 13521.92 14157.84 / - 6 4 1 1 210.05 209.85 209.9 210.09 210.39 210.78 211.24 211.77 212.37 213.03 213.75 214.54 - 215.38 216.28 217.25 218.26 219.34 220.47 221.66 222.91 224.21 225.57 226.99 228.46 229.98 231.56 233.2 234.89 - 236.63 238.43 240.28 242.19 244.16 246.18 248.25 250.37 / - 6 4 2 1 209.96 209.74 209.79 209.98 210.28 210.66 211.12 211.65 212.25 212.91 213.63 214.42 - 215.26 216.16 217.13 218.15 219.22 220.36 221.55 222.79 224.1 225.46 226.87 228.34 229.87 231.45 233.09 234.78 - 236.52 238.33 240.18 242.09 244.06 246.08 248.15 250.28 / - 6 4 3 1 209.79 209.55 209.58 209.77 210.06 210.44 210.9 211.43 212.02 212.69 213.41 214.19 - 215.04 215.94 216.9 217.92 219 220.14 221.33 222.58 223.88 225.24 226.66 228.13 229.66 231.24 232.88 234.57 - 236.32 238.13 239.99 241.9 243.87 245.89 247.97 250.1 / - 6 4 4 1 209.46 209.18 209.2 209.37 209.66 210.03 210.49 211.02 211.61 212.27 212.99 213.78 - 214.62 215.52 216.49 217.51 218.59 219.73 220.92 222.17 223.48 224.84 226.26 227.74 229.27 230.86 232.5 234.2 - 235.95 237.76 239.62 241.54 243.52 245.55 247.63 249.77 / - 6 4 5 1 208.83 208.5 208.47 208.61 208.88 209.24 209.69 210.21 210.8 211.46 212.18 212.96 - 213.81 214.71 215.68 216.7 217.78 218.92 220.12 221.38 222.69 224.06 225.49 226.97 228.51 230.11 231.76 233.47 - 235.23 237.05 238.92 240.85 242.84 244.88 246.97 249.12 / - 6 4 6 1 206.81 205.7 205.44 205.46 205.64 205.95 206.36 206.86 207.44 208.1 208.82 209.62 - 210.48 211.41 212.4 213.45 214.57 215.74 216.98 218.28 219.63 221.05 222.52 224.06 225.65 227.3 229.01 230.77 - 232.59 234.47 236.41 238.4 240.45 242.56 244.72 246.94 / - 6 4 7 1 200.73 196.5 195.78 195.6 195.68 195.95 196.35 196.87 197.5 198.22 199.03 199.93 - 200.9 201.95 203.07 204.26 205.53 206.82 208.22 209.69 211.22 212.81 214.47 216.19 217.98 219.82 221.73 223.7 - 225.73 227.81 229.95 232.16 234.42 236.71 239.08 241.51 / - 6 4 8 1 182.44 175.06 173.82 173.42 173.46 173.8 174.37 175.12 176.03 177.01 178.18 179.46 - 180.81 182.29 183.87 185.53 187.28 189.08 190.98 192.96 195.01 197.09 199.28 201.52 203.83 206.17 208.6 211.08 - 213.6 216.2 218.84 221.54 224.28 227.08 229.94 232.84 / - 6 4 9 1 144.01 134.34 133.16 133.06 133.65 134.64 135.94 137.52 139.31 141.3 143.46 145.73 - 148.15 150.66 153.28 155.97 158.96 161.81 164.76 167.74 170.81 173.9 177.08 180.6 183.9 187.2 190.59 193.98 - 197.43 200.9 204.92 208.46 212.06 215.68 219.34 223.03 / - 6 4 10 1 91.73 90.47 91.58 93.42 95.65 98.13 100.81 103.71 106.77 109.91 113.25 116.72 - 120.21 123.9 127.7 131.46 135.45 139.35 143.5 147.71 151.81 156.16 160.35 164.83 169.38 173.71 178.38 182.79 - 187.45 191.93 196.68 201.38 206.2 210.83 215.74 220.36 / - 6 4 11 1 65.37 67.71 70.56 73.69 76.97 80.37 83.87 87.49 91.23 95.09 99.06 103.6 - 107.99 112.52 117.09 121.77 126.6 131.46 136.41 141.45 146.58 151.79 157.08 162.44 167.85 173.33 178.91 184.56 - 190.28 195.72 201.54 207.44 213 219 225.07 230.75 / - 6 4 12 1 57.93 61.52 64.91 68.51 72.34 76.37 80.57 84.95 89.5 94.21 99.08 104.1 - 109.23 114.47 119.83 125.32 130.93 136.66 142.5 148.46 154.53 161.04 168.16 175.08 181.95 188.89 195.86 202.88 - 209.88 216.96 224.44 231.69 239.02 246.42 253.5 261.04 / - 6 4 13 1 53.5 58.46 62.82 67.26 71.95 76.96 82.34 88.03 94 100.22 106.66 113.32 - 120.18 127.23 134.47 141.88 149.46 157.21 165.13 173.18 181.29 189.45 197.7 206.06 214.53 223.1 231.79 240.58 - 249.46 259.3 269.55 279.46 289.33 299.22 309.41 319.42 / - 6 4 14 1 49.26 55.69 62.13 68.68 75.57 83.34 91.24 99.52 108.19 117.21 126.54 136.15 - 146 156.09 166.41 176.59 186.69 198.25 209.42 220.01 231.5 242.85 255.99 266.47 278.62 290.86 303.21 315.71 - 328.36 341.16 354.13 367.27 380.57 394.04 408.97 424.1 / - 6 4 15 1 46.19 56.27 68.16 80.12 92.2 104.28 116.38 129.8 142.08 156.14 169.99 183.07 - 198.1 213.1 228.4 244.33 260.58 276.67 292.37 309.64 327.28 345.3 363.69 382.46 401.2 419.62 439.22 459.1 - 479.28 499.8 520.66 541.87 563.46 585.44 609.26 633.54 / - 6 4 16 1 48.54 69.17 88.7 107.41 126.03 145.32 164.36 184.5 206.56 227.61 250.2 272.35 - 296.7 321.68 344.51 370.82 397.51 424.69 452.87 480.93 510.67 541.16 571.42 603.19 635.74 669.01 702.88 737.55 - 772.7 808.44 846.96 886.14 926.14 966.21 1006.42 1047.1 / - 6 4 17 1 65.25 95.66 127.04 157.24 188.04 219.49 252.44 286.89 322.82 360.61 399.08 440.71 - 481.93 526.53 572.31 617.31 666.16 716.9 769.23 823.69 879.87 936.76 995.87 1057.46 1120.08 1181.41 1240.76 1295.92 - 1340.95 1390.88 1440.9 1492.59 1546.52 1601.16 1659.35 1713.52 / - 6 4 18 1 91.97 142.31 191.86 243.6 297.24 353.8 414 477.84 545.86 617.45 692.32 771.98 - 855.99 944.64 1036.92 1131.38 1228.07 1317.21 1401.75 1490 1579.05 1669.72 1764.7 1860.59 1957.72 2055.52 2154.4 2258.87 - 2356.67 2462.36 2569.12 2678.55 2788.33 2899.23 3011.32 3131.62 / - 6 4 19 1 135.58 214.04 297.76 392.73 494.64 606.42 727.27 858.61 999.19 1149.68 1300.6 1444.84 - 1590.72 1751.69 1909.11 2072.95 2251.14 2426.75 2608.1 2791.79 2978.34 3174.89 3376.54 3578.92 3785.77 3996.54 4215.44 4435.74 - 4669.83 4893.98 5136.33 5368.84 5615.32 5872.64 6117.14 6378.52 / - 6 4 20 1 204.6 326.82 468.91 654.99 868.6 1109.18 1359.07 1604.96 1876.07 2154.17 2450.12 2765.05 - 3080.55 3429.56 3778.58 4136.06 4510.7 4940.26 5346.5 5763.62 6208.56 6649.75 7116.71 7582.74 8076.5 8581.04 9089.5 9600.81 - 10135.51 10693.05 11255.79 11832.54 12436.18 13019.43 13646.9 14290.56 / - 6 5 1 1 211.94 211.7 211.74 211.92 212.22 212.6 213.06 213.59 214.18 214.84 215.57 216.35 - 217.2 218.1 219.06 220.08 221.16 222.3 223.49 224.74 226.04 227.41 228.82 230.3 231.83 233.41 235.05 236.75 - 238.5 240.3 242.17 244.08 246.05 248.08 250.16 252.29 / - 6 5 2 1 211.84 211.59 211.62 211.8 212.1 212.48 212.93 213.46 214.06 214.72 215.44 216.23 - 217.07 217.97 218.94 219.96 221.04 222.17 223.37 224.62 225.92 227.29 228.71 230.18 231.71 233.3 234.94 236.64 - 238.39 240.2 242.06 243.98 245.95 247.98 250.06 252.2 / - 6 5 3 1 211.66 211.39 211.41 211.58 211.87 212.25 212.7 213.23 213.83 214.49 215.21 215.99 - 216.84 217.74 218.71 219.73 220.81 221.95 223.14 224.39 225.7 227.06 228.48 229.96 231.49 233.08 234.72 236.42 - 238.18 239.99 241.85 243.77 245.75 247.78 249.87 252.01 / - 6 5 4 1 211.32 211.01 211.01 211.17 211.45 211.83 212.28 212.8 213.4 214.06 214.78 215.56 - 216.41 217.31 218.28 219.3 220.38 221.52 222.72 223.97 225.28 226.65 228.07 229.55 231.09 232.68 234.33 236.03 - 237.79 239.61 241.48 243.4 245.38 247.42 249.51 251.66 / - 6 5 5 1 210.64 210.25 210.2 210.34 210.6 210.96 211.4 211.92 212.5 213.16 213.88 214.66 - 215.51 216.42 217.38 218.41 219.49 220.64 221.84 223.1 224.41 225.79 227.22 228.71 230.25 231.85 233.51 235.22 - 236.99 238.82 240.7 242.64 244.63 246.68 248.79 250.95 / - 6 5 6 1 208.36 207.15 206.84 206.83 206.99 207.29 207.69 208.19 208.77 209.42 210.15 210.95 - 211.81 212.75 213.74 214.8 215.93 217.11 218.36 219.67 221.04 222.47 223.96 225.51 227.11 228.77 230.49 232.26 - 234.1 235.99 237.94 239.94 242.01 244.13 246.3 248.54 / - 6 5 7 1 201.89 197.39 196.6 196.4 196.47 196.72 197.12 197.65 198.28 199 199.82 200.72 - 201.71 202.77 203.91 205.12 206.4 207.75 209.17 210.65 212.2 213.82 215.51 217.25 219.02 220.89 222.82 224.81 - 226.86 228.97 231.14 233.37 235.66 238 240.4 242.86 / - 6 5 8 1 183.03 175.06 173.89 173.49 173.54 173.89 174.47 175.25 176.12 177.18 178.37 179.68 - 181.07 182.58 184.19 185.89 187.64 189.51 191.45 193.47 195.56 197.69 199.91 202.19 204.52 206.93 209.4 211.93 - 214.48 217.12 219.81 222.54 225.34 228.19 231.08 234.03 / - 6 5 9 1 144.15 134.08 132.97 132.92 133.54 134.5 135.83 137.43 139.24 141.25 143.54 145.85 - 148.29 150.84 153.5 156.24 159.06 162.17 165.15 168.21 171.29 174.42 177.64 181.22 184.54 187.86 191.26 194.69 - 198.2 201.71 205.3 209.39 213.05 216.72 220.44 224.18 / - 6 5 10 1 91.88 90.62 91.76 93.6 95.85 98.39 101.11 104.03 107.08 110.31 113.69 117.11 - 120.72 124.44 128.15 132.07 136.09 140.03 144.21 148.28 152.59 156.98 161.21 165.73 170.05 174.69 179.1 183.86 - 188.34 193.08 197.88 202.48 207.26 212.11 217.19 221.92 / - 6 5 11 1 65.53 67.92 70.75 73.9 77.21 80.65 84.2 87.86 91.64 95.54 99.55 104.09 - 108.57 113.08 117.75 122.47 127.34 132.25 137.24 142.33 147.5 152.76 158.09 163.51 168.97 174.5 180.13 185.83 - 191.28 197.09 202.98 208.93 214.54 220.61 226.3 232.47 / - 6 5 12 1 58 61.68 65.11 68.73 72.59 76.65 80.89 85.3 89.89 94.64 99.55 104.61 - 109.78 115.06 120.47 126 131.65 137.43 143.32 149.33 155.44 161.83 169.03 176.05 183.1 190.04 196.98 204.22 - 211.28 218.43 225.65 232.95 240.33 247.78 255.31 262.93 / - 6 5 13 1 53.45 58.54 62.98 67.48 72.22 77.26 82.67 88.39 94.4 100.66 107.15 113.85 - 120.76 127.85 135.14 142.6 150.23 158.02 165.98 174.09 182.24 190.46 198.77 207.18 215.7 224.33 233.07 241.92 - 250.85 260.46 270.51 280.59 290.85 300.75 310.95 321.15 / - 6 5 14 1 49.22 55.71 62.23 68.86 75.8 83.62 91.56 99.89 108.6 117.66 127.04 136.69 - 146.59 156.73 167.09 177.54 188.08 198.46 210.3 220.95 232.5 243.94 257.1 267.64 279.84 292.14 304.56 317.13 - 329.84 342.72 355.75 368.96 382.34 395.87 410.03 425.26 / - 6 5 15 1 46.15 56.31 68.24 80.25 92.39 104.52 116.67 130.13 142.45 156.56 170.78 183.58 - 198.66 213.71 229.08 245.06 261.36 277.5 293.25 310.57 328.26 346.33 364.76 383.58 402.4 420.9 440.58 460.54 - 480.81 501.4 522.33 543.62 565.28 587.33 610.8 634.66 / - 6 5 16 1 48.51 69.17 88.75 107.51 126.25 145.52 164.73 184.76 206.84 227.93 249.78 272.77 - 297.18 322.2 345.09 371.44 398.19 425.41 453.71 481.71 511.46 541.96 572.86 604.02 636.54 669.82 703.8 738.5 - 773.87 809.75 847.55 886.88 926.7 966.75 1007.46 1047.89 / - 6 5 17 1 65.16 95.6 127.04 157.31 188.15 219.63 252.6 287.35 323.39 360.76 399.24 440.85 - 482.1 526.7 572.47 617.45 666.23 716.87 769.3 823.48 879.74 936.66 995.75 1056.49 1119.35 1181.31 1241.06 1297.57 - 1344.64 1396.06 1447.84 1502.02 1556.89 1613.2 1673.22 1729.25 / - 6 5 18 1 91.82 142.36 191.8 243.74 297.35 353.95 414.13 477.88 545.77 617.29 692.12 771.43 - 855.2 943.64 1035.81 1130.39 1226.21 1316.86 1402.04 1492 1581.3 1673.53 1769.95 1866.9 1965.2 2064.27 2162.85 2270.18 - 2369.3 2476.31 2584.47 2695.32 2806.6 2919.01 3032.81 3154.91 / - 6 5 19 1 135.38 213.86 297.34 391.99 494.68 606.34 725.8 856.56 998.22 1148.47 1299.77 1444.67 - 1591.17 1752.86 1911.08 2075.82 2247.82 2431.81 2616.07 2802.33 2991.97 3190.87 3392.45 3601.48 3809 4025.58 4246.99 4470.39 - 4707.17 4934.76 5179.74 5415.48 5664.81 5924.74 6172.72 6437.01 / - 6 5 20 1 204.38 326.72 465.6 651.65 863.37 1108.31 1353.38 1605.4 1865.62 2157.02 2454.45 2751.47 - 3088.24 3418.02 3790.3 4149.97 4526.96 4955.55 5367.8 5787.99 6234.65 6684.8 7160.42 7633.16 8133.4 8637.1 9159.92 9668.34 - 10218.89 10773.09 11353.67 11938.61 12536.39 13141.38 13776.89 14428.7 / - 6 6 1 1 214.06 213.68 213.66 213.82 214.09 214.46 214.91 215.43 216.03 216.68 217.4 218.18 - 219.03 219.93 220.89 221.91 222.99 224.13 225.32 226.58 227.88 229.25 230.67 232.15 233.68 235.27 236.91 238.61 - 240.37 242.18 244.05 245.97 247.95 249.98 252.07 254.21 / - 6 6 2 1 213.96 213.57 213.54 213.7 213.97 214.34 214.78 215.31 215.9 216.55 217.27 218.06 - 218.9 219.8 220.76 221.79 222.87 224 225.2 226.45 227.76 229.12 230.55 232.02 233.56 235.15 236.79 238.5 - 240.25 242.07 243.94 245.86 247.84 249.87 251.96 254.11 / - 6 6 3 1 213.77 213.36 213.32 213.47 213.74 214.1 214.55 215.07 215.66 216.32 217.03 217.82 - 218.66 219.56 220.53 221.55 222.63 223.77 224.96 226.22 227.53 228.89 230.32 231.8 233.33 234.92 236.57 238.28 - 240.04 241.85 243.72 245.65 247.63 249.67 251.76 253.91 / - 6 6 4 1 213.41 212.96 212.91 213.05 213.31 213.67 214.11 214.63 215.22 215.87 216.59 217.37 - 218.22 219.12 220.08 221.11 222.19 223.33 224.53 225.78 227.09 228.46 229.89 231.37 232.91 234.51 236.16 237.87 - 239.64 241.46 243.33 245.26 247.25 249.3 251.39 253.55 / - 6 6 5 1 212.68 212.13 212.01 212.1 212.34 212.68 213.1 213.61 214.19 214.84 215.56 216.34 - 217.18 218.09 219.05 220.08 221.17 222.31 223.51 224.78 226.1 227.48 228.91 230.4 231.95 233.56 235.23 236.95 - 238.72 240.56 242.45 244.39 246.4 248.46 250.57 252.74 / - 6 6 6 1 210.17 208.64 208.18 208.16 208.32 208.62 209.02 209.52 210.1 210.75 211.48 212.29 - 213.16 214.09 215.09 216.16 217.29 218.48 219.73 221.05 222.43 223.86 225.36 226.92 228.53 230.21 231.94 233.69 - 235.55 237.46 239.42 241.45 243.53 245.67 247.87 250.13 / - 6 6 7 1 203.34 198.2 197.38 197.16 197.22 197.47 197.87 198.4 199.04 199.77 200.6 201.51 - 202.51 203.58 204.73 205.96 207.22 208.59 210.03 211.53 213.1 214.74 216.44 218.21 220.05 221.94 223.9 225.91 - 227.99 230.13 232.29 234.55 236.86 239.24 241.67 244.15 / - 6 6 8 1 183.09 175.16 173.95 173.53 173.57 173.93 174.47 175.25 176.2 177.28 178.5 179.84 - 181.26 182.8 184.44 186.18 187.97 189.88 191.86 193.92 196.02 198.22 200.48 202.82 205.18 207.64 210.15 212.72 - 215.33 218.01 220.75 223.52 226.36 229.25 232.2 235.19 / - 6 6 9 1 143.97 133.75 132.71 132.78 133.36 134.41 135.77 137.4 139.26 141.32 143.52 145.98 - 148.46 151.05 153.74 156.52 159.37 162.3 165.55 168.63 171.77 174.99 178.22 181.53 185.21 188.59 192.04 195.49 - 199.01 202.54 206.17 210.33 214.04 217.76 221.53 225.33 / - 6 6 10 1 91.94 90.79 91.9 93.8 96.09 98.65 101.44 104.37 107.48 110.75 114.08 117.6 - 121.24 124.88 128.73 132.68 136.58 140.7 144.92 149.03 153.37 157.59 162.07 166.63 170.99 175.68 180.13 184.93 - 189.46 194.25 198.85 203.73 208.57 213.45 218.2 223.33 / - 6 6 11 1 65.68 68.12 70.98 74.16 77.51 80.99 84.59 88.29 92.1 96.03 100.08 104.56 - 109.13 113.72 118.37 123.19 127.99 132.92 138.08 143.21 148.43 153.73 159.11 164.57 170.08 175.66 181.06 186.79 - 192.6 198.47 204.41 210.04 216.09 222.22 227.97 234.2 / - 6 6 12 1 58.08 61.86 65.34 68.99 72.89 76.98 81.26 85.71 90.33 95.11 100.06 105.15 - 110.35 115.67 121.11 126.69 132.38 138.2 144.14 150.19 156.35 162.61 169.68 177.01 184.08 191.06 198.25 205.37 - 212.69 219.9 227.18 234.55 242 249.53 257.13 264.82 / - 6 6 13 1 53.42 58.63 63.16 67.72 72.51 77.59 83.03 88.8 94.84 101.13 107.65 114.39 - 121.33 128.47 135.8 143.3 150.98 158.83 166.83 174.98 183.19 191.46 199.82 208.28 216.86 225.54 234.34 243.25 - 252.23 261.29 271.73 281.93 292.11 302.26 312.42 322.88 / - 6 6 14 1 49.2 55.75 62.35 69.05 76.05 83.92 91.91 100.28 109.01 118.11 127.53 137.22 - 147.17 157.35 167.76 178.25 189.1 199.27 211.16 222.5 233.47 244.97 258.18 268.8 281.05 293.41 305.9 318.53 - 331.31 344.25 357.36 370.63 384.08 397.69 411.48 426.36 / - 6 6 15 1 46.13 56.36 68.34 80.41 92.59 104.76 116.95 130.44 142.81 156.97 170.33 184.09 - 199.21 214.31 229.85 245.78 262.13 278.32 294.12 311.49 329.22 347.33 365.8 384.66 403.54 422.13 441.9 461.94 - 482.29 502.95 523.97 545.33 567.06 589.18 611.7 635.68 / - 6 6 16 1 48.47 69.17 88.8 107.61 126.4 145.71 165.53 185.19 207.11 228.23 251.29 273.15 - 297.63 322.7 345.64 372.03 398.85 426.14 454.46 482.45 512.22 542.73 573.63 604.79 637.29 670.53 704.62 739.41 - 774.93 810.3 847.5 886.9 926.91 967.3 1007.88 1048.54 / - 6 6 17 1 65.07 95.57 127.18 157.73 188.26 219.76 252.75 287.5 323.53 360.88 399.37 440.96 - 482.21 526.83 572.59 618.2 666.24 716.77 769.08 823.15 879.42 936.41 995.5 1055.8 1118.87 1181.25 1241.76 1298.17 - 1347.91 1401.25 1454.84 1510.76 1567.41 1625.62 1687.33 1746.35 / - 6 6 18 1 91.66 142.21 191.7 243.78 297.46 354.23 414.25 478.05 545.67 617.09 691.76 770.85 - 854.36 942.55 1034.54 1129.24 1225.35 1315.84 1401.37 1491.59 1582.41 1675.56 1772.88 1870.72 1970.25 2070.39 2171.41 2278.31 - 2380.5 2488.78 2598.2 2708.95 2823.38 2937.24 3052.65 3176.06 / - 6 6 19 1 135.17 213.67 296.95 391.95 494.68 604.9 725.49 855.68 997.21 1147.18 1300.74 1440.06 - 1591.52 1745.9 1912.99 2078.68 2251.63 2436.79 2623.53 2809.96 3001.86 3204.27 3410.13 3622.5 3833.53 4054.12 4275.39 4505.12 - 4745.14 4976.31 5220.93 5463.77 5716.62 5975.19 6231.32 6498.95 / - 6 6 20 1 204.16 326.63 462.08 648.66 862.34 1101.67 1352.77 1602.25 1867.2 2145.61 2441.94 2757.74 - 3096.25 3427.97 3802.6 4166.15 4543.99 4978.93 5390.13 5813.18 6258.67 6715.68 7194.16 7678.04 8180.74 8699.18 9220.18 9745.25 - 10302.94 10864.96 11442.9 12047.08 12653.96 13263.09 13911.76 14572.46 / - 6 7 1 1 216.18 215.66 215.59 215.71 215.97 216.33 216.77 217.28 217.87 218.52 219.24 220.02 - 220.86 221.76 222.72 223.74 224.82 225.96 227.15 228.41 229.72 231.08 232.51 233.99 235.52 237.12 238.77 240.47 - 242.23 244.05 245.92 247.85 249.84 251.88 253.97 256.12 / - 6 7 2 1 216.07 215.55 215.47 215.59 215.84 216.2 216.64 217.15 217.73 218.39 219.1 219.88 - 220.72 221.63 222.59 223.61 224.69 225.83 227.02 228.28 229.59 230.95 232.38 233.86 235.4 236.99 238.64 240.35 - 242.11 243.93 245.8 247.73 249.72 251.76 253.86 256.01 / - 6 7 3 1 215.88 215.33 215.24 215.36 215.61 215.96 216.39 216.91 217.49 218.14 218.86 219.64 - 220.48 221.38 222.34 223.36 224.44 225.58 226.78 228.03 229.35 230.71 232.14 233.62 235.16 236.76 238.41 240.12 - 241.89 243.71 245.58 247.52 249.51 251.55 253.65 255.81 / - 6 7 4 1 215.51 214.92 214.81 214.92 215.16 215.51 215.94 216.45 217.03 217.68 218.4 219.18 - 220.02 220.92 221.88 222.91 223.99 225.13 226.33 227.58 228.9 230.27 231.7 233.19 234.73 236.33 237.99 239.7 - 241.47 243.29 245.18 247.11 249.11 251.16 253.27 255.43 / - 6 7 5 1 214.7 213.98 213.78 213.84 214.05 214.37 214.78 215.28 215.85 216.5 217.21 217.99 - 218.83 219.73 220.7 221.72 222.81 223.96 225.17 226.43 227.75 229.14 230.58 232.08 233.63 235.24 236.91 238.64 - 240.43 242.27 244.17 246.12 248.14 250.2 252.33 254.51 / - 6 7 6 1 211.95 210.15 209.55 209.47 209.6 209.87 210.26 210.75 211.32 211.97 212.7 213.51 - 214.38 215.32 216.32 217.4 218.53 219.73 221 222.32 223.71 225.16 226.67 228.24 229.87 231.56 233.31 235.12 - 236.99 238.91 240.89 242.93 245.02 247.18 249.39 251.66 / - 6 7 7 1 204.27 199.11 198.16 197.88 197.89 198.13 198.53 199.05 199.69 200.43 201.27 202.18 - 203.19 204.28 205.44 206.68 208 209.39 210.84 212.37 213.97 215.63 217.36 219.13 220.97 222.89 224.87 226.92 - 229.02 231.19 233.41 235.7 238.04 240.45 242.91 245.42 / - 6 7 8 1 183.9 175.2 173.93 173.48 173.5 173.82 174.43 175.22 176.18 177.29 178.54 179.9 - 181.35 182.93 184.61 186.39 188.25 190.16 192.18 194.28 196.43 198.67 200.99 203.36 205.77 208.28 210.84 213.43 - 216.11 218.84 221.63 224.45 227.34 230.28 233.27 236.31 / - 6 7 9 1 144.28 133.57 132.56 132.66 133.26 134.33 135.71 137.36 139.25 141.33 143.58 145.97 - 148.48 151.24 153.97 156.78 159.68 162.67 165.72 169.1 172.27 175.5 178.82 182.16 185.53 189.36 192.83 196.37 - 199.91 203.53 207.14 210.8 215.05 218.81 222.64 226.48 / - 6 7 10 1 92.1 90.91 92.07 94.03 96.38 98.97 101.79 104.74 107.88 111.11 114.53 118.08 - 121.75 125.43 129.3 133.29 137.22 141.38 145.45 149.77 154.16 158.41 162.93 167.28 171.94 176.38 181.15 185.69 - 190.58 195.42 200.07 205 209.72 214.64 219.61 224.74 / - 6 7 11 1 65.83 68.34 71.23 74.46 77.85 81.36 84.98 88.72 92.56 96.52 100.6 105.01 - 109.69 114.29 119.02 123.83 128.74 133.71 138.77 143.93 149.18 154.51 159.92 165.41 170.98 176.59 182.27 188.06 - 193.92 199.84 205.48 211.53 217.64 223.41 229.63 235.94 / - 6 7 12 1 58.15 62.04 65.58 69.28 73.21 77.33 81.64 86.12 90.78 95.6 100.58 105.7 - 110.94 116.29 121.77 127.38 133.12 138.98 144.96 151.05 157.25 163.56 170.51 177.91 185.08 192.26 199.36 206.51 - 213.79 221.05 228.71 236.15 243.67 251.27 258.95 266.28 / - 6 7 13 1 53.4 58.73 63.35 67.98 72.82 77.94 83.4 89.2 95.27 101.6 108.16 114.94 - 121.92 129.1 136.46 144.01 151.73 159.62 167.67 175.87 184.13 192.45 200.86 209.38 218.01 226.75 235.6 244.57 - 253.6 262.71 272.59 282.91 293.27 303.82 313.99 324.34 / - 6 7 14 1 49.18 55.81 62.49 69.27 76.32 84.23 92.25 100.67 109.43 118.56 128.02 137.75 - 147.74 157.96 168.42 179.07 189.84 200.07 212 223.39 234.42 246.29 258.03 271.54 282.23 294.66 307.21 319.9 - 332.75 345.77 358.94 372.29 385.8 399.48 413.34 427.38 / - 6 7 15 1 46.11 56.43 68.45 80.57 92.79 105.01 117.24 130.76 143.16 157.37 171.9 184.57 - 199.74 214.88 230.48 246.47 262.88 279.12 294.97 312.38 330.15 348.3 366.81 385.7 404.63 423.3 443.15 463.28 - 483.71 504.46 525.55 546.98 568.78 590.97 613.55 636.55 / - 6 7 16 1 48.45 69.17 88.84 107.71 126.53 145.89 165.93 186.14 207.37 228.52 251.63 273.54 - 298.05 323.17 346.16 372.58 399.58 426.86 455.14 483.15 512.93 543.44 573.94 605.5 637.99 671.16 705.27 740.17 - 775.76 811.16 847.82 886.76 926.93 967.58 1008.44 1049.56 / - 6 7 17 1 64.97 95.52 127.17 157.79 188.37 219.89 252.91 287.72 323.66 360.99 399.46 441.04 - 482.28 526.91 572.66 619.19 666.2 716.6 768.78 822.79 878.88 935.95 995.08 1055.38 1117.62 1180.48 1241.92 1298.03 - 1351.56 1406.63 1461.88 1519.58 1579 1638.18 1701.55 1762.87 / - 6 7 18 1 91.51 142.23 191.61 243.8 297.65 354.34 414.37 478.1 545.56 616.86 691.36 770.22 - 853.45 941.39 1033.12 1127.88 1224.3 1315.96 1402.2 1493.27 1585.29 1679.66 1778.08 1877.07 1977.9 2079.39 2181.84 2290.05 - 2393.88 2503.63 2614.54 2726.88 2842.99 2958.5 3075.69 3200.58 / - 6 7 19 1 134.95 213.48 296.44 391.02 493.56 604.82 724.02 853.55 996.18 1145.81 1299.45 1439.4 - 1592.78 1746.8 1914.78 2081.45 2255.44 2441.71 2629.73 2817.4 3011.69 3213.37 3423.52 3639.88 3855.05 4081.65 4304.99 4538.46 - 4779.02 5017.46 5266.14 5512.82 5769.47 6031.84 6291.88 6563.32 / - 6 7 20 1 203.93 326.56 458.42 645.42 857.61 1094.38 1344.95 1599.74 1868.79 2148.62 2446.59 2764.27 - 3104.61 3438.45 3815.51 4182.5 4561.88 4959.92 5413.63 5839.73 6288.18 6744.62 7228.43 7725.48 8231.64 8750.47 9287.25 9820.82 - 10376.31 10956.99 11543.87 12157.38 12773.99 13392.81 14051.02 14721.33 / - 6 8 1 1 218.29 217.65 217.51 217.61 217.85 218.19 218.62 219.13 219.71 220.35 221.07 221.84 - 222.68 223.58 224.54 225.56 226.64 227.78 228.98 230.23 231.54 232.91 234.34 235.82 237.36 238.96 240.61 242.32 - 244.09 245.91 247.79 249.72 251.71 253.76 255.86 258.02 / - 6 8 2 1 218.18 217.53 217.39 217.48 217.72 218.06 218.48 218.99 219.57 220.22 220.93 221.71 - 222.55 223.45 224.41 225.43 226.51 227.65 228.84 230.1 231.41 232.78 234.21 235.69 237.23 238.83 240.48 242.19 - 243.96 245.78 247.66 249.6 251.59 253.64 255.74 257.9 / - 6 8 3 1 217.98 217.3 217.15 217.24 217.47 217.81 218.23 218.74 219.32 219.96 220.68 221.45 - 222.29 223.19 224.15 225.17 226.25 227.39 228.59 229.85 231.16 232.53 233.96 235.44 236.99 238.59 240.24 241.96 - 243.73 245.55 247.43 249.37 251.37 253.42 255.53 257.69 / - 6 8 4 1 217.61 216.88 216.72 216.79 217.01 217.35 217.77 218.27 218.85 219.49 220.2 220.98 - 221.82 222.72 223.68 224.7 225.78 226.93 228.12 229.38 230.7 232.07 233.5 234.99 236.54 238.14 239.8 241.52 - 243.29 245.12 247.01 248.96 250.96 253.01 255.13 257.3 / - 6 8 5 1 216.7 215.81 215.55 215.56 215.74 216.04 216.44 216.92 217.49 218.12 218.83 219.61 - 220.45 221.35 222.32 223.35 224.44 225.59 226.8 228.07 229.4 230.78 232.23 233.73 235.29 236.91 238.59 240.32 - 242.11 243.96 245.87 247.83 249.85 251.93 254.07 256.26 / - 6 8 6 1 213.69 211.38 210.87 210.74 210.83 211.08 211.45 211.92 212.49 213.14 213.87 214.67 - 215.54 216.49 217.5 218.58 219.72 220.93 222.21 223.54 224.94 226.4 227.92 229.5 231.14 232.84 234.6 236.43 - 238.31 240.25 242.25 244.3 246.42 248.6 250.83 253.12 / - 6 8 7 1 205.61 199.77 198.81 198.46 198.47 198.7 199.09 199.61 200.26 201.01 201.85 202.79 - 203.79 204.89 206.08 207.33 208.67 210.08 211.56 213.12 214.73 216.4 218.15 219.97 221.86 223.81 225.82 227.89 - 230.02 232.22 234.45 236.76 239.14 241.57 244.06 246.61 / - 6 8 8 1 184.66 175.15 173.75 173.3 173.34 173.66 174.28 175.09 176.07 177.2 178.47 179.87 - 181.28 182.86 184.56 186.37 188.25 190.2 192.26 194.39 196.6 198.84 201.4 203.83 206.29 208.84 211.45 214.1 - 216.83 219.61 222.45 225.32 228.26 231.26 234.29 237.39 / - 6 8 9 1 144.09 133.4 132.42 132.46 133.16 134.25 135.65 137.33 139.24 141.35 143.62 146.04 - 148.58 151.24 154.17 157.05 160 163.02 166.13 169.29 172.76 176.06 179.4 182.8 186.23 189.72 193.62 197.22 - 200.82 204.49 208.17 211.91 215.66 220.01 223.83 227.72 / - 6 8 10 1 92.26 91.11 92.28 94.26 96.64 99.3 102.1 105.12 108.24 111.54 114.99 118.56 - 122.17 125.97 129.88 133.76 137.85 142.05 146.15 150.51 154.74 159.23 163.79 168.18 172.88 177.36 182.19 186.76 - 191.7 196.36 201.28 206.02 211.04 216.02 221.04 225.92 / - 6 8 11 1 65.99 68.58 71.52 74.78 78.19 81.73 85.38 89.14 93.02 97.01 101.12 105.41 - 110.2 114.87 119.66 124.48 129.49 134.5 139.61 144.8 150.09 155.47 160.93 166.47 172.09 177.75 183.48 189.32 - 195.24 200.88 206.91 213.02 219.19 225.02 231.31 237.21 / - 6 8 12 1 58.23 62.25 65.85 69.58 73.53 77.69 82.02 86.54 91.22 96.08 101.09 106.25 - 111.52 116.91 122.43 128.08 133.86 139.76 145.78 151.91 158.16 164.51 171.14 178.64 186.08 193.27 200.47 207.84 - 215.18 222.5 229.91 237.39 244.96 252.61 260.34 268.16 / - 6 8 13 1 53.39 58.86 63.57 68.26 73.13 78.28 83.78 89.6 95.71 102.07 108.67 115.48 - 122.51 129.73 137.13 144.72 152.48 160.41 168.51 176.75 185.05 193.42 201.89 210.46 219.14 227.94 236.85 245.87 - 254.96 264.13 273.41 283.8 294.64 305.11 315.54 325.98 / - 6 8 14 1 49.18 55.89 62.65 69.49 76.6 84.54 92.59 101.05 109.85 119.02 128.51 138.28 - 148.3 158.57 169.06 179.78 190.37 200.86 212.83 224.38 235.34 247.26 259.06 271.07 283.39 295.88 308.5 321.26 - 334.18 347.26 360.5 373.92 387.5 401.25 415.18 429.3 / - 6 8 15 1 45.91 56.5 68.56 80.72 93 105.24 117.52 131.07 143.5 157.76 172.32 185.04 - 200.25 215.5 231.12 247.14 263.6 279.23 295.79 313.24 331.05 349.23 367.78 386.71 405.66 424.4 444.35 464.56 - 485.08 505.9 527.06 548.57 570.45 592.7 615.35 638.4 / - 6 8 16 1 48.42 69.16 88.88 107.8 126.66 146.05 166.26 185.92 207.62 228.79 252.17 274.05 - 298.42 323.6 346.63 373.09 400.21 427.45 455.77 483.81 513.6 544.11 575.05 606.16 638.61 671.73 705.76 740.74 - 776.43 812.44 848.56 886.41 926.68 967.58 1008.24 1050 / - 6 8 17 1 64.89 95.43 127.15 157.84 188.48 220.31 253.05 287.85 323.78 361.09 399.54 441.09 - 482.3 526.94 572.69 619.58 666.12 716.37 768.4 822.26 878.18 935.26 994.46 1054.8 1116.03 1179.28 1241.68 1299.02 - 1354.52 1411.42 1468.89 1528.44 1589.73 1650.91 1716.77 1778.9 / - 6 8 18 1 91.36 142.23 191.53 243.84 297.73 354.44 414.5 478.1 545.43 616.59 690.94 769.55 - 852.5 940.13 1031.59 1126.27 1222.01 1315.78 1402.96 1494.77 1588.2 1683.81 1783.43 1883.67 1985.01 2088.77 2192.7 2301.17 - 2407.83 2519.2 2631.69 2745.7 2863.59 2980.88 3099.93 3226.37 / - 6 8 19 1 134.74 213.29 295.93 390.08 493.56 603.29 723.58 852.89 991.81 1144.37 1292.92 1438.67 - 1593.19 1747.56 1916.47 2084.1 2259.16 2438.02 2636.06 2824.94 3024.14 3223.8 3434.88 3649.5 3870.38 4099.65 4330.19 4568.24 - 4813.24 5056.33 5309.5 5557.01 5821.93 6088.4 6348.21 6628.94 / - 6 8 20 1 203.71 326.52 452.91 642.26 852.39 1093.49 1344.25 1595.05 1864.23 2151.76 2451.47 2771.1 - 3090.81 3449.54 3798.4 4198.55 4580.77 4981.64 5438.48 5867.79 6319.43 6775.32 7264.48 7765.98 8270.26 8803.84 9349.76 9883.32 - 10457.26 11036.93 11644.37 12256.89 12895.15 13524.6 14178.88 14874.72 / - 6 9 1 1 220.39 219.62 219.44 219.5 219.72 220.05 220.47 220.97 221.54 222.18 222.89 223.67 - 224.5 225.4 226.36 227.38 228.46 229.6 230.8 232.05 233.36 234.73 236.16 237.65 239.19 240.79 242.45 244.16 - 245.93 247.76 249.64 251.58 253.58 255.63 257.74 259.91 / - 6 9 2 1 220.28 219.5 219.31 219.37 219.58 219.91 220.33 220.83 221.4 222.04 222.75 223.53 - 224.36 225.26 226.22 227.24 228.32 229.46 230.65 231.91 233.22 234.59 236.02 237.51 239.05 240.65 242.31 244.03 - 245.8 247.63 249.51 251.45 253.45 255.51 257.62 259.78 / - 6 9 3 1 220.08 219.27 219.07 219.12 219.33 219.65 220.07 220.57 221.14 221.78 222.49 223.26 - 224.1 225 225.96 226.98 228.06 229.2 230.39 231.65 232.96 234.34 235.77 237.26 238.8 240.4 242.06 243.78 - 245.55 247.39 249.27 251.22 253.22 255.28 257.39 259.56 / - 6 9 4 1 219.69 218.84 218.62 218.66 218.86 219.18 219.59 220.09 220.66 221.3 222 222.78 - 223.61 224.51 225.47 226.49 227.57 228.71 229.91 231.17 232.49 233.86 235.3 236.79 238.34 239.94 241.61 243.33 - 245.11 246.94 248.84 250.79 252.79 254.86 256.97 259.15 / - 6 9 5 1 218.66 217.58 217.22 217.18 217.32 217.6 217.98 218.46 219.01 219.64 220.34 221.12 - 221.95 222.86 223.82 224.85 225.94 227.09 228.31 229.58 230.91 232.31 233.76 235.27 236.84 238.47 240.16 241.9 - 243.71 245.57 247.49 249.47 251.5 253.6 255.75 257.95 / - 6 9 6 1 215.38 212.73 212.01 211.86 211.94 212.18 212.55 213.02 213.58 214.24 214.97 215.77 - 216.66 217.61 218.63 219.72 220.87 222.09 223.37 224.72 226.12 227.6 229.13 230.72 232.33 234.05 235.83 237.67 - 239.57 241.53 243.55 245.63 247.77 249.97 252.22 254.54 / - 6 9 7 1 206.9 200.41 199.33 198.97 198.94 199.16 199.54 200.07 200.71 201.46 202.32 203.26 - 204.3 205.42 206.62 207.9 209.24 210.68 212.18 213.76 215.4 217.09 218.88 220.73 222.64 224.62 226.66 228.75 - 230.92 233.15 235.43 237.78 240.19 242.67 245.19 247.76 / - 6 9 8 1 184.57 175.01 173.53 173.04 173.02 173.39 174.01 174.84 175.85 176.94 178.21 179.63 - 181.16 182.8 184.52 186.36 188.29 190.31 192.38 194.56 196.82 199.11 201.51 203.98 206.51 209.07 211.72 214.44 - 217.47 220.3 223.2 226.12 229.12 232.17 235.26 238.41 / - 6 9 9 1 143.63 133.24 132.28 132.35 133.07 134.18 135.56 137.27 139.2 141.37 143.67 146.11 - 148.68 151.37 154.17 157.25 160.26 163.35 166.51 169.72 173.25 176.59 179.99 183.43 186.93 190.46 194.04 198.07 - 201.77 205.47 209.24 213.01 216.85 220.7 225.15 229.09 / - 6 9 10 1 92.33 91.31 92.48 94.53 96.94 99.62 102.45 105.49 108.63 111.96 115.44 118.96 - 122.67 126.5 130.32 134.36 138.49 142.55 146.86 151.25 155.52 160.04 164.42 169.08 173.82 178.35 183.22 187.84 - 192.83 197.53 202.51 207.29 212.37 217.4 222.29 227.4 / - 6 9 11 1 66.15 68.85 71.82 75.1 78.54 82.1 85.78 89.57 93.48 97.51 101.64 105.9 - 110.74 115.5 120.26 125.18 130.16 135.29 140.43 145.68 151.01 156.43 161.93 167.52 173.19 178.91 184.69 190.59 - 196.23 202.25 208.34 214.51 220.34 226.63 232.99 238.95 / - 6 9 12 1 58.32 62.47 66.13 69.88 73.86 78.04 82.41 86.95 91.67 96.56 101.61 106.8 - 112.11 117.54 123.1 128.78 134.6 140.54 146.6 152.77 159.06 165.46 171.95 179.5 186.93 194.27 201.52 208.98 - 216.36 223.95 231.42 238.98 246.62 254.34 262.14 270.04 / - 6 9 13 1 53.4 59.01 63.81 68.54 73.45 78.63 84.15 90 96.14 102.54 109.17 116.02 - 123.09 130.35 137.8 145.42 153.23 161.2 169.34 177.62 185.98 194.39 202.91 211.53 220.27 229.12 238.09 247.17 - 256.3 265.53 274.87 284.66 295.62 306.29 316.88 327.59 / - 6 9 14 1 49.19 56 62.83 69.73 76.96 84.84 92.93 101.43 110.26 119.46 128.99 138.8 - 148.86 159.17 169.7 180.46 191.09 201.63 213.64 225.23 236.23 248.21 260.06 272.09 284.52 297.08 309.76 322.59 - 335.57 348.72 362.03 375.52 389.17 402.99 416.99 431.18 / - 6 9 15 1 45.92 56.57 68.69 80.88 93.19 105.48 117.79 131.37 143.84 158.12 172.74 185.5 - 200.75 216.15 231.7 247.76 264.28 279.97 296.58 314.07 331.91 350.13 368.71 387.66 406.16 425.43 445.46 465.77 - 486.37 507.27 528.51 550.09 572.04 594.35 617.06 640.17 / - 6 9 16 1 48.37 69.15 88.91 107.89 126.78 146.21 166.44 186.81 207.84 229.03 252.43 274.35 - 298.74 323.97 347.09 373.55 400.7 427.99 456.34 484.52 514.2 544.71 575.88 606.74 639.16 672.22 706.16 741.06 - 776.85 812.96 849.12 886.99 926.16 966.54 1008.11 1049.89 / - 6 9 17 1 64.79 95.43 127.12 157.87 188.56 220.54 253.48 287.98 323.89 361.17 399.57 441.1 - 482.27 526.91 572.9 619.75 665.96 716.08 768.08 821.63 877.36 934.52 993.57 1053.99 1115.3 1177.7 1240.98 1300.05 - 1357.73 1416.37 1476.04 1537.09 1599.83 1662.23 1729.02 1792.64 / - 6 9 18 1 91.19 142.06 191.37 243.81 297.81 354.53 414.56 478.08 545.33 616.34 690.49 768.84 - 851.48 938.79 1029.94 1124.4 1220.51 1314.77 1403.8 1494.82 1589.46 1687.43 1787.06 1889.92 1993.04 2098.51 2204.11 2314.11 - 2422.59 2535.56 2649.87 2765.63 2883.38 3004.57 3125.63 3253.72 / - 6 9 19 1 134.52 213.11 295.42 390.02 492.38 603.22 721.34 851.25 990.68 1138.43 1291.43 1437.88 - 1593.09 1748.32 1920.13 2089.68 2262.94 2443.03 2642.35 2832.64 3033.32 3233.32 3446.67 3663.63 3889.26 4117.67 4350.64 4589.14 - 4841.98 5086.75 5348.49 5601.06 5871.33 6142.54 6407.22 6693.45 / - 6 9 20 1 203.48 326.51 452.82 637.13 847.76 1086.22 1338.04 1589.73 1860.72 2143.19 2456.72 2778.33 - 3100.15 3461.29 3812.76 4215.69 4600.82 5004.7 5418.76 5897.61 6352.64 6812.26 7300.73 7807.69 8318.85 8848.38 9399.03 9948.62 - 10522.3 11123.06 11741.63 12365.43 13004.49 13656.75 14322.96 15014.9 / - 6 10 1 1 222.47 221.59 221.35 221.39 221.59 221.9 222.31 222.81 223.37 224.01 224.72 225.49 - 226.32 227.22 228.17 229.19 230.27 231.41 232.61 233.86 235.17 236.55 237.98 239.46 241.01 242.61 244.27 245.99 - 247.77 249.6 251.48 253.43 255.43 257.49 259.61 261.78 / - 6 10 2 1 222.36 221.46 221.22 221.25 221.45 221.76 222.17 222.66 223.23 223.86 224.57 225.34 - 226.17 227.07 228.03 229.04 230.12 231.26 232.46 233.71 235.03 236.4 237.83 239.32 240.87 242.47 244.13 245.85 - 247.63 249.46 251.35 253.3 255.3 257.36 259.48 261.65 / - 6 10 3 1 222.15 221.23 220.97 221 221.19 221.5 221.9 222.39 222.96 223.59 224.3 225.07 - 225.9 226.8 227.75 228.77 229.85 230.99 232.19 233.44 234.76 236.13 237.57 239.06 240.6 242.21 243.87 245.59 - 247.37 249.21 251.1 253.05 255.06 257.12 259.24 261.42 / - 6 10 4 1 221.76 220.79 220.51 220.52 220.71 221.01 221.41 221.9 222.46 223.09 223.8 224.57 - 225.4 226.29 227.25 228.27 229.35 230.49 231.69 232.95 234.27 235.65 237.08 238.57 240.13 241.73 243.4 245.13 - 246.91 248.75 250.65 252.6 254.61 256.68 258.81 260.99 / - 6 10 5 1 220.56 219.31 218.81 218.74 218.86 219.12 219.49 219.96 220.51 221.14 221.84 222.61 - 223.45 224.35 225.32 226.35 227.45 228.61 229.82 231.1 232.44 233.84 235.3 236.82 238.4 240.03 241.72 243.48 - 245.29 247.16 249.08 251.07 253.11 255.22 257.38 259.59 / - 6 10 6 1 217 214.02 213.15 212.94 212.98 213.19 213.54 214 214.56 215.21 215.94 216.74 - 217.62 218.58 219.6 220.7 221.86 223.08 224.38 225.74 227.16 228.65 230.2 231.81 233.48 235.22 237.01 238.87 - 240.79 242.77 244.81 246.91 249.07 251.29 253.57 255.9 / - 6 10 7 1 207.61 200.95 199.74 199.34 199.3 199.49 199.87 200.39 201.04 201.8 202.67 203.63 - 204.68 205.82 207.04 208.33 209.71 211.17 212.7 214.3 215.96 217.7 219.52 221.4 223.33 225.34 227.42 229.56 - 231.75 234.01 236.34 238.72 241.17 243.68 246.23 248.85 / - 6 10 8 1 185.2 174.64 173.19 172.62 172.61 172.99 173.63 174.42 175.44 176.61 177.93 179.38 - 180.93 182.61 184.39 186.27 188.22 190.28 192.43 194.63 196.93 199.31 201.73 204.25 206.84 209.46 212.16 214.93 - 217.74 220.62 223.56 226.55 229.58 233.03 236.19 239.39 / - 6 10 9 1 143.89 133.08 132.15 132.25 132.98 134.08 135.52 137.25 139.2 141.35 143.67 146.19 - 148.79 151.5 154.34 157.27 160.49 163.61 166.81 170.08 173.43 177.12 180.57 184.07 187.61 191.21 194.85 198.95 - 202.69 206.46 210.27 214.15 218.02 221.93 225.91 230.48 / - 6 10 10 1 92.49 91.49 92.72 94.8 97.23 99.9 102.8 105.82 109.03 112.39 115.82 119.43 - 123.18 126.93 130.89 134.95 138.97 143.22 147.56 151.79 156.3 160.86 165.28 169.98 174.5 179.34 183.95 188.92 - 193.62 198.71 203.5 208.57 213.7 218.61 223.73 228.9 / - 6 10 11 1 66.35 69.14 72.13 75.43 78.89 82.47 86.18 90 93.94 98 102.17 106.46 - 111.22 116.08 120.93 125.83 130.82 135.95 141.12 146.55 151.92 157.39 162.94 168.58 174.05 179.83 185.65 191.55 - 197.55 203.63 209.78 215.62 221.9 228.25 234.23 240.7 / - 6 10 12 1 58.42 62.72 66.42 70.19 74.2 78.4 82.8 87.37 92.12 97.04 102.12 107.36 - 112.7 118.16 123.76 129.48 135.34 141.32 147.42 153.63 159.96 166.4 172.94 180.16 187.86 195.31 202.56 210.12 - 217.54 225.09 232.61 240.21 247.9 255.68 263.54 271.48 / - 6 10 13 1 53.43 59.19 64.05 68.82 73.77 78.98 84.52 90.4 96.58 103.01 109.67 116.56 - 123.66 130.96 138.45 146.12 153.97 161.98 170.16 178.49 186.89 195.35 203.92 212.59 221.38 230.28 239.31 248.44 - 257.63 266.92 276.31 285.82 296.51 307.34 318.18 328.9 / - 6 10 14 1 49.22 56.13 63.01 69.96 77.24 85.15 93.28 101.8 110.67 119.89 129.45 139.31 - 149.42 159.76 170.34 181.13 191.8 202.38 214.42 226.06 237.1 249.11 261.02 274.74 285.61 298.24 310.99 323.88 - 336.93 350.15 363.53 377.08 390.79 404.69 418.77 433.03 / - 6 10 15 1 45.94 56.65 68.84 81.03 93.39 105.71 118.05 131.65 144.17 158.48 173.14 185.94 - 201.22 216.66 232.25 248.34 264.92 280.66 297.32 314.85 332.73 350.97 369.58 388.56 407.08 426.37 446.46 466.87 - 487.56 508.55 529.86 551.52 573.53 595.91 618.67 641.83 / - 6 10 16 1 48.34 69.14 88.95 107.97 127.12 146.35 166.61 187.15 208.04 229.25 252.66 274.61 - 299.02 324.29 347.78 373.94 401.12 428.55 456.83 485.48 514.73 545.23 576.44 607.23 639.63 672.61 706.47 741.26 - 776.98 812.66 849.42 887.33 925.92 965.8 1007.52 1049.66 / - 6 10 17 1 64.69 95.33 127.06 157.88 189.06 220.63 253.71 288.07 323.96 361.2 399.56 441.05 - 482.18 526.78 572.77 619.6 665.73 715.7 767.57 820.98 876.42 933.84 992.35 1052.88 1114.3 1176.51 1239.69 1300.56 - 1360.11 1420.51 1481.41 1544.01 1608.2 1672.12 1740.34 1805.79 / - 6 10 18 1 91.02 142.04 191.28 243.77 297.86 354.59 414.62 478.05 545.15 615.98 689.99 768.08 - 850.4 937.36 1028.15 1122.36 1218.64 1313.45 1403.01 1494.6 1590.84 1689.63 1788.75 1892.63 1997.4 2105 2213.19 2325.76 - 2439.49 2551.99 2668.63 2786.58 2906.46 3029.81 3153.03 3282.92 / - 6 10 19 1 134.3 212.93 294.72 389.07 492.38 601.73 720.94 849.56 989.51 1136.86 1289.86 1437.01 - 1592.98 1749.09 1913.03 2092.34 2266.81 2448.2 2648.85 2840.69 3042.91 3244.6 3458.09 3677.58 3905.87 4136.28 4368.77 4612.02 - 4867.01 5114.89 5381.16 5639.26 5911.44 6192.3 6462.35 6748.99 / - 6 10 20 1 203.27 326.56 452.86 633.21 839.09 1078.99 1330.1 1582.9 1858.24 2146.7 2448.8 2770.56 - 3110.21 3473.76 3828.12 4203.59 4622.17 5029.32 5446.88 5929.48 6388.14 6851.76 7339.71 7847.34 8363.07 8904.6 9459.79 10011.07 - 10592.97 11200.57 11816.48 12462.28 13113.89 13785.16 14462.18 15167.92 / - 6 11 1 1 224.52 223.54 223.26 223.27 223.45 223.75 224.15 224.63 225.2 225.83 226.53 227.3 - 228.13 229.02 229.98 230.99 232.07 233.21 234.41 235.66 236.98 238.35 239.78 241.27 242.82 244.42 246.09 247.81 - 249.59 251.42 253.32 255.27 257.27 259.34 261.46 263.64 / - 6 11 2 1 224.4 223.41 223.12 223.13 223.3 223.6 224 224.48 225.04 225.68 226.38 227.14 - 227.97 228.87 229.82 230.84 231.92 233.06 234.25 235.51 236.83 238.2 239.63 241.12 242.67 244.28 245.94 247.66 - 249.44 251.28 253.17 255.12 257.13 259.2 261.32 263.5 / - 6 11 3 1 224.19 223.17 222.86 222.86 223.03 223.33 223.73 224.21 224.77 225.4 226.1 226.86 - 227.69 228.59 229.54 230.56 231.64 232.77 233.97 235.23 236.55 237.92 239.35 240.85 242.4 244 245.67 247.39 - 249.18 251.02 252.91 254.87 256.88 258.95 261.07 263.26 / - 6 11 4 1 223.77 222.69 222.35 222.33 222.49 222.77 223.16 223.64 224.19 224.82 225.51 226.28 - 227.11 228 228.96 229.98 231.06 232.2 233.4 234.65 235.97 237.35 238.79 240.28 241.84 243.45 245.12 246.85 - 248.64 250.48 252.39 254.35 256.37 258.44 260.58 262.77 / - 6 11 5 1 222.39 220.96 220.34 220.22 220.31 220.55 220.91 221.36 221.9 222.52 223.22 223.99 - 224.82 225.72 226.69 227.72 228.82 229.98 231.2 232.48 233.83 235.23 236.7 238.22 239.81 241.45 243.16 244.92 - 246.75 248.63 250.57 252.57 254.63 256.75 258.93 261.16 / - 6 11 6 1 218.54 214.96 214.09 213.85 213.87 214.08 214.42 214.88 215.43 216.08 216.82 217.63 - 218.52 219.48 220.51 221.61 222.79 224.03 225.33 226.66 228.1 229.6 231.17 232.79 234.49 236.24 238.06 239.94 - 241.88 243.88 245.94 248.06 250.24 252.48 254.78 257.14 / - 6 11 7 1 208.71 201.34 200.04 199.54 199.48 199.67 200.05 200.58 201.24 202.01 202.87 203.85 - 204.92 206.08 207.32 208.65 210.05 211.54 213.08 214.71 216.42 218.2 220.04 221.96 223.92 225.97 228.08 230.25 - 232.49 234.8 237.15 239.58 242.07 244.62 247.21 249.88 / - 6 11 8 1 185.75 174.28 172.69 172.12 172.14 172.52 173.12 173.99 175.03 176.21 177.56 179.03 - 180.63 182.35 184.13 186.05 188.07 190.19 192.35 194.63 196.99 199.39 201.89 204.47 207.07 209.78 212.52 215.34 - 218.23 221.15 224.15 227.21 230.3 233.46 236.67 239.92 / - 6 11 9 1 143.6 132.94 131.94 132.15 132.87 134.02 135.48 137.23 139.21 141.38 143.72 146.21 - 148.9 151.64 154.51 157.48 160.73 163.88 167.11 170.42 173.8 177.24 181.06 184.66 188.28 191.94 195.64 199.39 - 203.62 207.45 211.33 215.25 219.21 223.2 227.25 231.91 / - 6 11 10 1 92.66 91.73 92.97 95.07 97.53 100.22 103.1 106.19 109.43 112.75 116.26 119.91 - 123.59 127.47 131.45 135.55 139.6 143.88 148.08 152.53 157.07 161.46 166.13 170.88 175.44 180.33 184.98 190 - 194.75 199.89 204.73 209.85 214.77 220 225.18 230.41 / - 6 11 11 1 66.57 69.44 72.44 75.76 79.24 82.85 86.59 90.44 94.4 98.49 102.69 107.01 - 111.69 116.66 121.52 126.5 131.57 136.73 141.94 147.25 152.66 158.15 163.74 169.4 175.15 180.98 186.86 192.81 - 198.87 205 210.85 217.12 223.45 229.87 235.91 242.45 / - 6 11 12 1 58.57 62.97 66.72 70.51 74.54 78.77 83.2 87.8 92.58 97.53 102.64 107.91 - 113.29 118.79 124.42 130.19 136.08 142.09 148.23 154.49 160.86 167.34 173.92 180.79 188.6 196.18 203.6 211.26 - 218.72 226.31 234.11 241.78 249.55 257.4 265.33 273.36 / - 6 11 13 1 53.5 59.37 64.29 69.11 74.09 79.33 84.9 90.81 97.01 103.47 110.17 117.1 - 124.23 131.56 139.09 146.8 154.69 162.75 170.97 179.35 187.79 196.31 204.92 213.64 222.48 231.44 240.51 249.7 - 258.94 268.28 277.74 287.3 296.97 307.87 318.91 329.97 / - 6 11 14 1 49.28 56.27 63.2 70.2 77.63 85.46 93.62 102.17 111.07 120.33 129.92 139.8 - 149.94 160.34 170.95 181.79 192.49 203.12 215.18 226.86 237.94 249.99 261.93 275.7 286.64 299.35 312.17 325.13 - 338.25 351.53 364.98 378.59 392.37 406.33 420.48 434.81 / - 6 11 15 1 45.98 56.72 68.95 81.18 93.58 105.94 118.31 131.94 144.48 158.82 173.53 186.37 - 201.68 217.15 232.76 248.89 265.5 281.3 298.01 315.58 333.48 351.76 370.38 389.38 407.92 427.22 447.35 467.83 - 488.61 509.69 531.09 552.81 574.89 597.34 620.15 643.37 / - 6 11 16 1 48.3 69.13 89.11 108.34 127.34 146.48 166.77 187.39 208.23 229.45 252.86 274.82 - 299.26 324.53 348.52 374.27 401.46 428.9 457.23 485.98 515.16 545.65 576.85 607.62 639.99 672.9 706.65 741.32 - 776.92 812.51 849.38 887.39 926.01 965.26 1005.82 1048.21 / - 6 11 17 1 64.58 95.23 127.11 157.88 189.09 220.68 253.76 288.11 323.98 361.18 399.49 440.92 - 482.01 526.54 572.53 619.36 665.41 715.21 766.91 820.11 875.33 932.51 990.79 1051.37 1112.94 1175.02 1237.86 1300.53 - 1353.98 1411.41 1468.78 1527.57 1588.4 1650.84 1713.55 1774.04 / - 6 11 18 1 90.86 141.88 191.18 243.71 297.92 354.68 414.6 477.98 544.93 615.57 689.44 767.27 - 849.25 935.83 1026.25 1120.14 1216.34 1311.86 1402.05 1494.25 1591.13 1690.46 1790.41 1895.08 2000.63 2109.12 2218.21 2332.25 - 2448.14 2562.96 2682.55 2803.74 2926.8 3053.28 3179.3 3312.34 / - 6 11 19 1 134.08 212.77 294.05 388.13 491.13 601.7 718.61 848.65 986.01 1135.2 1288.29 1436.17 - 1586.57 1749.91 1914.86 2095.25 2270.92 2453.68 2640.81 2849.22 3053.01 3256.61 3470.37 3692.53 3920.88 4153.33 4390.96 4636.29 - 4889.97 5143.85 5408.6 5673.37 5949.09 6234.67 6510.28 6803.39 / - 6 11 20 1 203.07 326.67 453.16 627.07 833.8 1071.82 1322.32 1583.54 1855.99 2142.31 2454.67 2778.67 - 3121.12 3461.63 3844.67 4223.11 4645.27 5055.76 5477.09 5920.89 6426.44 6894.22 7386.28 7893.29 8413.72 8956.89 9516.93 10081.75 - 10658.4 11270.35 11902.53 12542.29 13211.61 13889.35 14559.34 15290.11 / - 6 12 1 1 226.51 225.46 225.14 225.13 225.3 225.59 225.98 226.45 227.01 227.64 228.33 229.1 - 229.93 230.82 231.77 232.79 233.86 235 236.2 237.45 238.77 240.14 241.57 243.07 244.62 246.22 247.89 249.61 - 251.4 253.24 255.13 257.09 259.1 261.17 263.3 265.48 / - 6 12 2 1 226.4 225.33 225 224.98 225.15 225.43 225.82 226.3 226.85 227.48 228.18 228.94 - 229.77 230.66 231.61 232.63 233.7 234.84 236.04 237.29 238.61 239.98 241.42 242.91 244.46 246.07 247.74 249.46 - 251.24 253.08 254.98 256.94 258.95 261.02 263.15 265.34 / - 6 12 3 1 226.18 225.08 224.74 224.71 224.87 225.15 225.54 226.01 226.56 227.19 227.88 228.65 - 229.47 230.37 231.32 232.33 233.41 234.55 235.75 237 238.32 239.7 241.13 242.62 244.18 245.79 247.45 249.18 - 250.97 252.81 254.71 256.67 258.69 260.76 262.89 265.08 / - 6 12 4 1 225.71 224.52 224.13 224.07 224.21 224.47 224.85 225.31 225.86 226.48 227.17 227.93 - 228.76 229.65 230.6 231.62 232.7 233.84 235.04 236.3 237.62 239 240.44 241.94 243.49 245.11 246.79 248.52 - 250.31 252.17 254.08 256.04 258.07 260.15 262.29 264.49 / - 6 12 5 1 224.12 222.38 221.73 221.57 221.64 221.87 222.21 222.66 223.2 223.81 224.51 225.27 - 226.11 227.01 227.98 229.02 230.12 231.29 232.51 233.8 235.15 236.57 238.04 239.58 241.17 242.83 244.55 246.32 - 248.16 250.05 252.01 254.02 256.1 258.23 260.42 262.67 / - 6 12 6 1 219.96 216.01 215 214.69 214.67 214.84 215.16 215.61 216.16 216.8 217.53 218.34 - 219.24 220.2 221.25 222.36 223.54 224.8 226.12 227.5 228.96 230.47 232.06 233.71 235.42 237.19 239.03 240.93 - 242.9 244.92 247.01 249.15 251.33 253.6 255.93 258.32 / - 6 12 7 1 209.56 201.52 200.1 199.62 199.53 199.7 200.07 200.6 201.26 202.05 202.94 203.93 - 205.03 206.18 207.45 208.8 210.24 211.75 213.35 215.02 216.76 218.54 220.43 222.38 224.4 226.49 228.63 230.85 - 233.13 235.48 237.88 240.35 242.88 245.48 248.12 250.84 / - 6 12 8 1 185.4 173.72 172.14 171.59 171.63 171.99 172.66 173.54 174.59 175.82 177.19 178.7 - 180.3 182.04 183.9 185.86 187.88 190.03 192.26 194.56 196.96 199.45 201.97 204.59 207.28 210 212.83 215.71 - 218.63 221.64 224.7 227.79 230.97 234.17 237.45 240.78 / - 6 12 9 1 143.27 132.67 131.83 132.01 132.79 133.96 135.41 137.18 139.18 141.42 143.79 146.3 - 148.94 151.79 154.69 157.69 160.77 164.16 167.43 170.77 174.18 177.66 181.21 185.14 188.81 192.54 196.35 200.2 - 204.06 208.42 212.37 216.36 220.39 224.45 228.56 232.71 / - 6 12 10 1 92.85 91.97 93.22 95.31 97.79 100.55 103.45 106.56 109.78 113.17 116.71 120.3 - 124.09 128 132.02 136.01 140.23 144.54 148.78 153.26 157.63 162.28 166.99 171.53 176.38 181.03 186.02 190.77 - 195.88 200.72 205.96 210.89 216.12 221.4 226.46 231.73 / - 6 12 11 1 66.82 69.74 72.77 76.1 79.61 83.24 87 90.88 94.88 98.99 103.22 107.57 - 112.09 117.19 122.12 127.17 132.24 137.42 142.76 148.12 153.57 159.11 164.73 170.45 176.25 182.13 188.06 194.06 - 200.18 206.03 212.28 218.61 225.01 231.06 237.6 244.21 / - 6 12 12 1 58.75 63.23 67.02 70.84 74.89 79.15 83.6 88.23 93.04 98.02 103.17 108.47 - 113.89 119.42 125.09 130.89 136.82 142.87 149.05 155.34 161.75 168.27 174.89 181.61 189.26 197 204.66 212.33 - 219.9 227.52 235.28 243.01 250.82 258.72 266.72 274.8 / - 6 12 13 1 53.62 59.57 64.54 69.4 74.42 79.69 85.29 91.22 97.45 103.95 110.68 117.63 - 124.8 132.17 139.72 147.47 155.39 163.49 171.76 180.19 188.68 197.25 205.9 214.68 223.56 232.57 241.69 250.93 - 260.22 269.62 279.13 288.75 298.48 308.71 319.83 331.07 / - 6 12 14 1 49.37 56.42 63.39 70.44 77.99 85.78 93.96 102.55 111.47 120.76 130.37 140.28 - 150.46 160.88 171.54 182.42 193.38 203.83 215.92 227.63 238.79 250.82 262.79 276.59 287.61 300.38 313.28 326.31 - 339.49 352.84 366.36 380.03 393.88 407.91 422.13 436.53 / - 6 12 15 1 46.02 56.8 69.06 81.34 93.78 106.17 118.57 132.21 144.78 159.13 173.88 186.84 - 202.11 217.6 233.24 249.39 266.02 282.8 298.62 316.23 334.17 352.46 371.1 390.11 408.66 428.7 448.09 468.6 - 489.47 510.64 532.12 553.93 576.08 598.58 621.46 644.72 / - 6 12 16 1 48.27 69.11 89.2 108.45 127.43 146.6 166.9 187.54 208.39 229.61 253.02 274.98 - 299.44 324.72 349.65 374.51 401.7 429.14 457.48 486.27 515.47 545.95 577.11 607.86 640.2 673.06 706.73 741.27 - 776.74 812.76 848.93 887.01 925.74 965.06 1004.98 1046.16 / - 6 12 17 1 64.48 95.19 127.04 158.14 189.11 220.71 253.77 288.08 323.95 361.1 399.35 440.7 - 481.73 526.2 572.14 618.98 664.98 714.66 766.18 819.17 874.14 931.06 989.06 1049.4 1111.13 1173.47 1235.6 1299.27 - 1353.77 1412.49 1470.41 1530.52 1591.73 1656.03 1719.74 1781.28 / - 6 12 18 1 90.69 141.73 190.98 243.62 297.9 354.67 414.52 477.86 544.64 615.08 688.84 766.44 - 848.09 934.25 1024.24 1117.76 1213.89 1309.7 1400.48 1493.27 1590.56 1690.79 1791.53 1897.01 2003.45 2111.89 2222.93 2338.18 - 2455.27 2571.01 2691.79 2814.32 2939.46 3066.41 3201.23 3334.12 / - 6 12 19 1 133.86 212.64 293.64 388.12 489.88 600.02 718.28 846.3 984.79 1133.48 1286.7 1435.31 - 1586.55 1750.84 1916.82 2098.3 2275.41 2459.58 2648.3 2858.3 3063.88 3269.5 3485.07 3707.73 3939.71 4174.49 4414.58 4659.4 - 4918.31 5171.14 5442.16 5705.69 5988.63 6272.52 6555.62 6851.85 / - 6 12 20 1 202.89 326.87 453.78 620.9 829.36 1064.82 1315.43 1575.53 1851.52 2146.61 2444.1 2787.71 - 3114.33 3476.51 3862.6 4244.36 4635.42 5084.53 5509.76 5957.6 6412.14 6940.2 7436.71 7948.51 8468.79 9016.77 9579.39 10160.64 - 10739.82 11357.25 11983.74 12641.05 13305.01 14001.66 14678.98 15400.76 / - 6 13 1 1 228.44 227.35 227 226.97 227.13 227.41 227.79 228.26 228.81 229.43 230.13 230.89 - 231.71 232.6 233.55 234.57 235.64 236.78 237.98 239.23 240.55 241.92 243.36 244.85 246.4 248.01 249.68 251.4 - 253.19 255.03 256.93 258.89 260.91 262.98 265.12 267.31 / - 6 13 2 1 228.33 227.21 226.86 226.82 226.97 227.25 227.63 228.1 228.65 229.27 229.96 230.72 - 231.55 232.44 233.39 234.4 235.48 236.61 237.81 239.07 240.38 241.76 243.19 244.68 246.24 247.85 249.52 251.25 - 253.03 254.88 256.78 258.74 260.76 262.83 264.97 267.16 / - 6 13 3 1 228.11 226.96 226.59 226.54 226.69 226.96 227.34 227.8 228.35 228.97 229.66 230.42 - 231.24 232.13 233.08 234.1 235.17 236.31 237.51 238.76 240.08 241.46 242.89 244.39 245.94 247.55 249.22 250.95 - 252.74 254.59 256.49 258.46 260.48 262.56 264.7 266.89 / - 6 13 4 1 227.55 226.28 225.84 225.75 225.86 226.11 226.47 226.93 227.46 228.08 228.76 229.52 - 230.34 231.23 232.19 233.2 234.28 235.42 236.62 237.89 239.21 240.6 242.04 243.54 245.1 246.73 248.41 250.15 - 251.94 253.8 255.72 257.69 259.73 261.82 263.97 266.18 / - 6 13 5 1 225.73 223.81 223.03 222.83 222.87 223.08 223.41 223.84 224.37 224.98 225.67 226.44 - 227.27 228.18 229.15 230.19 231.29 232.46 233.7 234.99 236.35 237.77 239.26 240.8 242.41 244.08 245.81 247.6 - 249.45 251.36 253.32 255.36 257.45 259.6 261.81 264.07 / - 6 13 6 1 221.25 216.69 215.64 215.3 215.26 215.42 215.73 216.18 216.73 217.37 218.11 218.93 - 219.83 220.81 221.86 222.99 224.19 225.46 226.79 228.2 229.67 231.21 232.81 234.44 236.18 237.98 239.84 241.77 - 243.75 245.81 247.92 250.1 252.33 254.63 256.99 259.41 / - 6 13 7 1 210.33 201.58 200.05 199.51 199.39 199.55 199.91 200.43 201.1 201.89 202.8 203.81 - 204.93 206.13 207.43 208.81 210.25 211.8 213.43 215.13 216.91 218.77 220.69 222.66 224.73 226.86 229.06 231.33 - 233.64 236.04 238.5 241.02 243.61 246.24 248.94 251.71 / - 6 13 8 1 185.79 173.25 171.64 171.08 171.08 171.5 172.18 173.07 174.16 175.42 176.82 178.34 - 180 181.79 183.68 185.64 187.74 189.94 192.18 194.54 197.01 199.5 202.1 204.8 207.5 210.33 213.22 216.12 - 219.12 222.17 225.25 228.41 231.61 234.89 238.23 241.6 / - 6 13 9 1 143.43 132.54 131.72 131.92 132.68 133.87 135.38 137.17 139.19 141.41 143.85 146.39 - 149.06 151.87 154.87 157.9 161.02 164.23 167.74 171.12 174.57 178.09 181.67 185.32 189.37 193.14 196.97 200.85 - 204.78 208.78 213.34 217.43 221.54 225.69 229.87 234.09 / - 6 13 10 1 92.94 92.21 93.43 95.59 98.1 100.84 103.8 106.89 110.18 113.6 117.1 120.78 - 124.6 128.53 132.46 136.6 140.85 145.04 149.47 154 158.4 163.09 167.62 172.43 177.33 182.02 187.05 191.85 - 197.01 201.9 207.2 212.18 217.46 222.53 227.92 233.26 / - 6 13 11 1 67.09 70.05 73.1 76.46 79.99 83.65 87.43 91.33 95.36 99.5 103.75 108.13 - 112.62 117.7 122.73 127.8 132.91 138.2 143.44 148.83 154.47 160.06 165.73 171.49 177.34 183.02 189.01 195.05 - 201.17 207.4 213.71 220.1 226.16 232.68 239.28 245.49 / - 6 13 12 1 58.95 63.51 67.34 71.18 75.26 79.55 84.02 88.68 93.52 98.53 103.71 109.04 - 114.49 120.06 125.76 131.6 137.56 143.65 149.86 156.19 162.64 169.2 175.86 182.62 189.91 197.94 205.72 213.4 - 221.07 228.74 236.54 244.56 252.45 260.42 268.49 276.65 / - 6 13 13 1 53.76 59.78 64.81 69.71 74.76 80.06 85.68 91.64 97.9 104.42 111.18 118.17 - 125.37 132.76 140.35 148.13 156.09 164.22 172.52 180.98 189.54 198.16 206.87 215.69 224.62 233.68 242.85 252.12 - 261.47 270.92 280.49 290.17 299.96 309.85 320.26 331.61 / - 6 13 14 1 49.47 56.58 63.6 70.7 78.28 86.1 94.31 102.92 111.88 121.18 130.82 140.76 - 150.96 161.41 172.09 183 194.01 205.1 216.62 228.35 240.17 251.6 263.59 277.42 290.22 301.33 314.3 327.41 - 340.66 354.07 367.65 381.39 395.3 409.39 423.67 438.15 / - 6 13 15 1 46.08 56.89 69.18 81.5 93.97 106.4 118.82 132.48 145.07 159.44 174.2 187.41 - 202.5 218.02 233.68 249.84 266.48 283.27 299.1 316.76 334.73 353.05 371.71 390.72 409.75 429.31 448.68 469.17 - 490.06 511.32 532.9 554.79 577.01 599.58 622.51 645.82 / - 6 13 16 1 48.23 69.1 89.22 108.51 127.52 146.76 167 187.65 208.52 229.74 253.13 275.08 - 299.53 324.82 349.96 374.63 401.83 429.25 457.56 486.58 515.57 546.05 577.19 607.91 640.21 673.02 706.62 741.07 - 776.42 812.51 848.52 886.27 925.07 964.59 1004.65 1045.24 / - 6 13 17 1 64.37 95.08 126.97 158.09 189.07 220.69 253.73 287.98 323.82 360.94 399.12 440.36 - 481.54 525.69 571.56 618.42 664.38 713.98 765.37 818.35 872.94 929.62 987.35 1047.43 1108.99 1171.86 1234.64 1296.34 - 1352.9 1412.24 1473.29 1532.99 1596.88 1660.07 1724.44 1788.51 / - 6 13 18 1 90.52 141.58 190.86 243.52 297.79 354.59 414.38 477.57 544.24 614.48 688.09 765.58 - 846.98 932.3 1022.37 1115.53 1211.68 1307.52 1398.88 1492.32 1590.2 1691.06 1792.62 1898.88 2006.21 2115.59 2227.68 2343.82 - 2462.02 2579.22 2701.21 2825 2951.44 3079.78 3217.6 3350.26 / - 6 13 19 1 133.66 212.55 292.88 387.23 489.82 600 718 845.55 981.81 1127.94 1285.21 1429.97 - 1586.71 1752.63 1919.06 2090.78 2280.32 2466.01 2656.5 2868.31 3075.53 3283.45 3501.12 3725.85 3958.38 4194.6 4441.27 4691 - 4948.84 5205.18 5478.28 5745.34 6031.27 6318.02 6599.75 6904.57 / - 6 13 20 1 202.74 327.2 454.81 613.63 821.42 1052.12 1307.45 1569.36 1849.65 2140.58 2451.51 2777.91 - 3127.14 3492.78 3857.97 4267.48 4662.67 5116.16 5545.68 5997.51 6457.2 6990.54 7492.4 8008.51 8529.32 9082.51 9651.51 10232.74 - 10818.23 11440.93 12072.89 12736.26 13420.25 14108.21 14803.97 15538.06 / - 6 14 1 1 230.3 229.19 228.83 228.79 228.93 229.21 229.59 230.05 230.6 231.22 231.91 232.66 - 233.49 234.37 235.32 236.34 237.41 238.54 239.74 240.99 242.31 243.69 245.12 246.61 248.17 249.78 251.45 253.18 - 254.97 256.81 258.72 260.68 262.7 264.78 266.92 269.12 / - 6 14 2 1 230.18 229.05 228.68 228.64 228.78 229.05 229.42 229.89 230.43 231.05 231.74 232.49 - 233.31 234.2 235.15 236.16 237.24 238.37 239.57 240.82 242.14 243.51 244.95 246.44 248 249.61 251.28 253.01 - 254.8 256.65 258.56 260.52 262.54 264.62 266.76 268.96 / - 6 14 3 1 229.96 228.79 228.4 228.35 228.48 228.75 229.12 229.58 230.12 230.74 231.42 232.18 - 233 233.89 234.84 235.85 236.92 238.06 239.25 240.51 241.83 243.2 244.64 246.13 247.69 249.3 250.98 252.71 - 254.5 256.35 258.26 260.23 262.25 264.34 266.48 268.68 / - 6 14 4 1 229.26 227.91 227.42 227.3 227.38 227.62 227.97 228.41 228.94 229.55 230.23 230.98 - 231.8 232.69 233.64 234.65 235.73 236.87 238.08 239.34 240.67 242.06 243.5 245.01 246.58 248.21 249.9 251.65 - 253.45 255.32 257.25 259.23 261.28 263.38 265.54 267.77 / - 6 14 5 1 227.2 224.96 224.21 223.95 223.95 224.13 224.43 224.85 225.37 225.98 226.66 227.42 - 228.26 229.17 230.14 231.19 232.3 233.48 234.72 236.03 237.4 238.83 240.33 241.89 243.51 245.2 246.94 248.74 - 250.61 252.54 254.53 256.57 258.68 260.85 263.08 265.37 / - 6 14 6 1 222.36 217.41 216.2 215.71 215.65 215.8 216.1 216.54 217.09 217.74 218.49 219.32 - 220.23 221.22 222.25 223.39 224.6 225.89 227.25 228.67 230.17 231.73 233.36 235.06 236.82 238.65 240.54 242.5 - 244.52 246.6 248.75 250.95 253.22 255.56 257.95 260.38 / - 6 14 7 1 210.99 201.31 199.72 199.15 199.01 199.16 199.52 200.05 200.73 201.54 202.47 203.5 - 204.64 205.85 207.18 208.59 210.09 211.68 213.35 215.09 216.88 218.78 220.76 222.8 224.92 227.07 229.33 231.65 - 234.03 236.48 238.98 241.56 244.2 246.9 249.66 252.47 / - 6 14 8 1 186.1 172.58 171 170.43 170.49 170.97 171.67 172.6 173.73 175.02 176.46 178.01 - 179.71 181.54 183.48 185.48 187.63 189.87 192.16 194.57 197.07 199.61 202.27 205 207.78 210.65 213.59 216.58 - 219.66 222.76 225.94 229.18 232.44 235.79 239.16 242.61 / - 6 14 9 1 143.01 132.42 131.62 131.83 132.61 133.82 135.33 137.14 139.21 141.46 143.86 146.42 - 149.19 152.03 154.98 158.12 161.27 164.51 167.84 171.48 174.97 178.52 182.15 185.83 189.93 193.75 197.62 201.55 - 205.52 209.55 214.12 218.26 222.45 226.75 231.07 235.41 / - 6 14 10 1 93.14 92.39 93.7 95.88 98.41 101.18 104.17 107.28 110.59 113.98 117.56 121.26 - 125.1 128.96 133.03 137.2 141.34 145.7 150.17 154.54 159.18 163.9 168.47 173.33 178.01 183.01 187.79 192.93 - 197.82 203.09 208.07 213.48 218.55 223.94 229.39 234.59 / - 6 14 11 1 67.37 70.38 73.46 76.84 80.39 84.07 87.88 91.81 95.86 100.02 104.3 108.7 - 113.22 118.2 123.35 128.43 133.62 138.89 144.26 149.68 155.2 160.81 166.52 172.31 178.19 184.15 190.2 196.3 - 202.47 208.76 214.78 221.2 227.71 234.3 240.52 247.24 / - 6 14 12 1 59.18 63.81 67.69 71.55 75.65 79.97 84.47 89.16 94.02 99.06 104.26 109.62 - 115.11 120.71 126.44 132.31 138.31 144.43 150.67 157.04 163.53 170.12 176.82 183.62 190.53 198.64 206.59 214.27 - 222.16 229.94 237.77 245.75 253.69 261.72 269.85 278.06 / - 6 14 13 1 53.93 60.03 65.11 70.04 75.12 80.45 86.09 92.08 98.36 104.91 111.7 118.71 - 125.93 133.36 140.98 148.78 156.77 164.92 173.25 181.75 190.37 199.05 207.81 216.67 225.66 234.76 243.97 253.29 - 262.68 272.18 281.8 291.53 301.37 311.33 321.39 331.99 / - 6 14 14 1 49.61 56.77 63.84 70.97 78.58 86.43 94.66 103.3 112.27 121.6 131.26 141.22 - 151.45 161.91 172.62 183.55 193.9 205.94 216.61 229.01 240.24 252.3 264.64 276.85 289.3 302.14 315.2 328.38 - 341.7 355.18 368.81 382.61 396.58 410.74 425.08 439.62 / - 6 14 15 1 46.15 56.99 69.32 81.81 94.18 106.63 119.07 132.74 145.35 159.72 174.49 187.71 - 202.81 218.36 234.04 250.22 266.85 283.4 299.48 317.12 335.11 353.46 372.13 391.15 410.38 429.14 449.05 469.51 - 490.36 511.59 533.22 555.21 577.52 600.16 623.15 646.51 / - 6 14 16 1 48.2 69.09 89.25 108.57 127.6 147.15 167.09 187.73 208.6 229.82 253.2 275.11 - 299.53 324.78 349.92 374.58 401.79 429.18 457.45 486.46 515.36 545.83 576.95 607.63 639.9 672.68 706.2 740.56 - 775.78 811.85 847.8 885.13 923.73 963.17 1003.41 1044.25 / - 6 14 17 1 64.27 94.98 126.89 158.03 188.99 220.97 253.63 287.79 323.56 360.64 399.72 439.89 - 481.27 524.94 570.71 617.57 663.53 713.06 764.32 817.12 871.49 927.92 985.37 1045.16 1106.65 1169.42 1232.34 1294.48 - 1353.63 1411.7 1473.62 1536.21 1599.42 1663.97 1729.81 1795.67 / - 6 14 18 1 90.37 141.45 190.7 243.39 297.6 354.38 414.1 477.11 543.6 613.65 687.04 764.23 - 845.66 930.68 1020.3 1113.34 1209.25 1303.61 1396.98 1492.42 1589.68 1690.98 1793.51 1899.93 2008.94 2119.36 2235.44 2349.73 - 2468.95 2590.05 2710.94 2836.2 2964.08 3095.15 3232.78 3367.08 / - 6 14 19 1 133.48 212.51 292.59 386.39 488.51 598.32 715.82 843.23 980.55 1126.63 1279.73 1429.14 - 1586.85 1747.18 1921.49 2094.66 2285.63 2473.01 2665.38 2866.86 3088.24 3298.55 3518.53 3744.07 3978.8 4218.6 4468.84 4719.47 - 4979.01 5241.76 5514.21 5788.64 6073.03 6367.51 6653.99 6956.35 / - 6 14 20 1 202.65 327.71 456.16 607.77 813.9 1041.88 1301.12 1561.5 1841.72 2132.94 2453.06 2789.34 - 3141.62 3489.01 3879.64 4293.43 4692.73 5112.3 5585.61 6041.91 6507.06 6994.35 7553.2 8074.78 8602.22 9156.08 9729.66 10315.96 - 10905.37 11533.74 12183.54 12842.48 13532.64 14228.58 14945.71 15672.69 / - 6 15 1 1 232.07 230.98 230.62 230.57 230.72 230.99 231.36 231.82 232.36 232.98 233.67 234.42 - 235.24 236.13 237.07 238.09 239.16 240.29 241.49 242.74 244.06 245.43 246.87 248.36 249.92 251.53 253.2 254.93 - 256.73 258.58 260.48 262.45 264.48 266.56 268.7 270.91 / - 6 15 2 1 231.95 230.83 230.46 230.41 230.55 230.82 231.19 231.65 232.19 232.8 233.49 234.24 - 235.06 235.95 236.89 237.9 238.98 240.11 241.3 242.56 243.88 245.25 246.69 248.18 249.74 251.35 253.03 254.76 - 256.55 258.4 260.31 262.28 264.31 266.39 268.54 270.74 / - 6 15 3 1 231.7 230.53 230.13 230.06 230.18 230.44 230.8 231.25 231.79 232.4 233.08 233.84 - 234.65 235.54 236.48 237.49 238.57 239.7 240.9 242.15 243.47 244.85 246.29 247.79 249.34 250.96 252.64 254.37 - 256.17 258.02 259.94 261.91 263.94 266.03 268.18 270.39 / - 6 15 4 1 230.82 229.41 228.87 228.71 228.77 228.98 229.31 229.75 230.27 230.87 231.54 232.29 - 233.11 234 234.95 235.97 237.05 238.19 239.4 240.67 242 243.4 244.85 246.37 247.95 249.58 251.28 253.04 - 254.86 256.73 258.67 260.67 262.73 264.85 267.02 269.26 / - 6 15 5 1 228.47 226.01 225.05 224.78 224.77 224.94 225.25 225.67 226.18 226.79 227.48 228.24 - 229.09 230 230.98 232.04 233.16 234.35 235.6 236.92 238.3 239.75 241.26 242.84 244.47 246.17 247.94 249.76 - 251.65 253.6 255.61 257.68 259.81 262 264.25 266.57 / - 6 15 6 1 223.25 217.66 216.41 215.95 215.84 215.95 216.24 216.66 217.2 217.85 218.6 219.43 - 220.35 221.35 222.44 223.6 224.83 226.14 227.52 228.98 230.5 232.09 233.75 235.48 237.28 239.14 241.06 243.06 - 245.11 247.23 249.38 251.62 253.93 256.31 258.74 261.24 / - 6 15 7 1 211.45 200.97 199.16 198.55 198.39 198.52 198.89 199.43 200.12 200.94 201.89 202.93 - 204.1 205.36 206.72 208.17 209.71 211.34 213.02 214.81 216.68 218.63 220.65 222.75 224.89 227.13 229.44 231.82 - 234.24 236.75 239.32 241.96 244.67 247.41 250.24 253.13 / - 6 15 8 1 185.82 171.84 170.2 169.82 169.91 170.4 171.15 172.13 173.29 174.62 176.09 177.7 - 179.44 181.29 183.27 185.34 187.51 189.8 192.14 194.6 197.16 199.75 202.46 205.25 208.07 211 214 217.05 - 220.18 223.33 226.62 229.95 233.3 236.73 240.2 243.71 / - 6 15 9 1 143.08 132.3 131.51 131.71 132.55 133.75 135.31 137.14 139.22 141.48 143.94 146.52 - 149.26 152.2 155.17 158.25 161.53 164.8 168.16 171.6 175.37 178.97 182.63 186.36 190.15 194.37 198.28 202.26 - 206.28 210.36 214.49 219.18 223.42 227.7 232.04 236.42 / - 6 15 10 1 93.34 92.64 93.98 96.14 98.75 101.54 104.51 107.68 110.96 114.43 118.03 121.69 - 125.53 129.51 133.6 137.68 141.97 146.37 150.7 155.28 159.95 164.49 169.32 173.98 178.95 184 188.83 194.02 - 198.95 204.28 209.31 214.77 219.9 225.35 230.57 236.13 / - 6 15 11 1 67.68 70.74 73.85 77.25 80.83 84.54 88.37 92.32 96.39 100.57 104.88 109.3 - 113.84 118.71 123.98 129.07 134.33 139.6 144.99 150.54 156.1 161.76 167.5 173.34 179.27 185.29 191.39 197.54 - 203.49 209.78 216.19 222.68 229.25 235.48 242.19 248.99 / - 6 15 12 1 59.46 64.15 68.07 71.96 76.09 80.43 84.95 89.66 94.55 99.61 104.84 110.23 - 115.75 121.39 127.15 133.04 139.07 145.22 151.49 157.89 164.41 171.03 177.77 184.61 191.55 199.27 207.32 215.33 - 223.23 231.12 239 247.01 255.27 263.38 271.58 279.88 / - 6 15 13 1 54.16 60.32 65.44 70.41 75.51 80.86 86.53 92.53 98.84 105.41 112.22 119.25 - 126.5 133.95 141.59 149.42 157.43 165.61 173.95 182.47 191.14 199.89 208.71 217.62 226.64 235.79 245.05 254.4 - 263.83 273.38 283.05 292.83 302.72 312.73 322.85 333.08 / - 6 15 14 1 49.79 57.01 64.12 71.28 78.91 86.78 95.03 103.68 112.67 122.02 131.7 141.67 - 151.91 162.39 173.1 184.04 195.19 206.45 217.13 229.56 241.56 252.89 265.24 277.46 289.9 302.76 315.9 329.16 - 342.56 356.1 369.79 383.65 397.68 411.89 426.29 440.88 / - 6 15 15 1 46.26 57.11 69.47 81.9 94.39 106.86 119.32 133 145.61 159.98 174.75 188.31 - 203.05 218.59 234.28 250.47 267.11 283.64 299.69 317.3 335.26 353.58 372.26 391.29 410.51 429.25 449.12 469.53 - 490.32 511.49 533.04 554.97 577.29 599.99 623.05 646.47 / - 6 15 16 1 48.2 69.09 89.29 108.63 127.67 147.29 167.16 187.77 208.61 229.81 253.18 275.05 - 299.42 324.61 348.63 374.3 401.52 429.01 457.07 485.99 514.78 545.12 576.14 607.32 639.02 671.8 705.26 739.52 - 774.62 810.53 846.06 883.44 921.92 961.26 1001.39 1042.3 / - 6 15 17 1 64.18 94.88 126.82 157.95 188.87 220.79 253.42 287.5 323.17 360.14 399.43 439.21 - 481.46 523.89 569.46 616.19 662.23 711.74 762.88 815.51 869.73 925.93 983.28 1042.9 1103.98 1166.31 1228.97 1291.33 - 1351 1410.61 1472.18 1535.35 1599.13 1664.31 1730.87 1797.39 / - 6 15 18 1 90.24 141.36 190.45 243.22 297.35 353.92 413.59 476.42 542.61 612.36 685.58 762.53 - 843.81 928.77 1018.28 1110.88 1206.29 1301.18 1394.63 1490.68 1589.35 1690.79 1796.15 1901.55 2011.51 2123 2240.42 2355.64 - 2476.1 2598.57 2721.12 2847.68 2979.22 3112.85 3246.33 3384.84 / - 6 15 19 1 133.33 212.57 292.46 385.6 487.39 598.01 715.52 840.05 978.02 1124.85 1277.45 1427.83 - 1587.11 1748.21 1923.79 2098.62 2291.03 2480.4 2674.86 2878.33 3101.77 3314.76 3537.35 3765.57 4001.19 4244.77 4495.97 4752.71 - 5015.22 5278.3 5557.65 5834.3 6123.91 6417.26 6712.72 7019.25 / - 6 15 20 1 202.65 328.43 458.01 600.13 807.23 1038.38 1286.8 1546.3 1834.04 2129.23 2444.92 2784.75 - 3135.08 3509.16 3904.11 4290 4726.61 5150.91 5590.05 6091.56 6562.76 7055.8 7555.8 8149.01 8683.81 9243.32 9816.61 10402.56 - 11006.55 11639.02 12295.22 12960.54 13658.1 14375.52 15100.48 15839.98 / - 6 16 1 1 233.72 232.69 232.35 232.32 232.46 232.73 233.1 233.57 234.11 234.72 235.4 236.16 - 236.98 237.86 238.81 239.81 240.89 242.02 243.21 244.47 245.78 247.16 248.59 250.09 251.65 253.26 254.94 256.67 - 258.46 260.32 262.23 264.2 266.23 268.32 270.46 272.67 / - 6 16 2 1 233.6 232.54 232.19 232.15 232.29 232.55 232.92 233.38 233.92 234.53 235.22 235.97 - 236.79 237.67 238.61 239.62 240.69 241.83 243.02 244.28 245.59 246.97 248.4 249.9 251.46 253.07 254.75 256.48 - 258.28 260.13 262.05 264.02 266.05 268.14 270.29 272.5 / - 6 16 3 1 233.27 232.12 231.71 231.63 231.75 231.99 232.35 232.8 233.33 233.94 234.62 235.37 - 236.18 237.07 238.01 239.02 240.09 241.23 242.43 243.69 245.01 246.39 247.83 249.33 250.89 252.51 254.2 255.94 - 257.74 259.6 261.52 263.5 265.54 267.64 269.8 272.02 / - 6 16 4 1 232.17 230.7 230.12 229.92 229.96 230.15 230.47 230.89 231.4 232 232.67 233.41 - 234.23 235.12 236.07 237.09 238.18 239.32 240.54 241.81 243.15 244.55 246.02 247.54 249.13 250.78 252.49 254.26 - 256.09 257.99 259.94 261.95 264.03 266.16 268.36 270.61 / - 6 16 5 1 229.51 226.83 225.77 225.44 225.39 225.53 225.81 226.22 226.72 227.32 228.01 228.77 - 229.62 230.54 231.53 232.59 233.72 234.92 236.19 237.52 238.92 240.39 241.92 243.51 245.17 246.89 248.68 250.53 - 252.44 254.41 256.45 258.55 260.71 262.93 265.21 267.55 / - 6 16 6 1 223.88 217.64 216.32 215.78 215.65 215.75 216.04 216.46 217.01 217.67 218.43 219.28 - 220.22 221.25 222.33 223.51 224.78 226.11 227.53 229.01 230.57 232.19 233.89 235.66 237.49 239.4 241.36 243.39 - 245.45 247.62 249.85 252.15 254.5 256.92 259.41 261.95 / - 6 16 7 1 210.67 200.3 198.43 197.79 197.62 197.76 198.12 198.67 199.38 200.23 201.2 202.26 - 203.45 204.75 206.15 207.64 209.22 210.89 212.61 214.45 216.36 218.36 220.44 222.55 224.78 227.07 229.44 231.84 - 234.34 236.91 239.55 242.25 245 247.83 250.73 253.69 / - 6 16 8 1 185.43 170.98 169.39 169.04 169.26 169.81 170.62 171.64 172.85 174.22 175.73 177.39 - 179.16 181.07 183.08 185.2 187.42 189.75 192.17 194.66 197.27 199.93 202.71 205.51 208.43 211.38 214.44 217.57 - 220.73 223.99 227.31 230.69 234.17 237.64 241.22 244.82 / - 6 16 9 1 142.25 132.18 131.37 131.63 132.46 133.7 135.27 137.13 139.25 141.54 143.99 146.65 - 149.41 152.3 155.38 158.49 161.69 165.11 168.5 171.97 175.52 179.42 183.12 186.89 190.73 194.62 198.96 202.98 - 207.05 211.18 215.36 219.59 224.41 228.75 233.14 237.58 / - 6 16 10 1 93.55 92.91 94.3 96.5 99.09 101.94 104.93 108.12 111.42 114.9 118.47 122.21 - 126.07 130.07 134.08 138.29 142.62 146.89 151.41 156.02 160.52 165.31 170.18 174.88 179.89 184.71 189.86 194.79 - 200.08 205.11 210.55 215.68 221.25 226.48 232.04 237.66 / - 6 16 11 1 68.04 71.14 74.3 77.73 81.34 85.07 88.92 92.89 96.98 101.18 105.5 109.94 - 114.5 119.17 124.57 129.8 135.01 140.32 145.82 151.26 156.84 162.52 168.49 174.37 180.11 186.15 192.29 198.51 - 204.77 211.12 217.59 224.14 230.37 237.07 243.85 250.25 / - 6 16 12 1 59.82 64.57 68.51 72.44 76.6 80.96 85.5 90.23 95.14 100.22 105.47 110.87 - 116.43 122.1 127.88 133.8 139.85 146.02 152.32 158.75 165.29 171.94 178.71 185.58 192.56 199.63 207.74 215.95 - 224.07 231.95 240.09 248.24 256.44 264.6 272.86 281.21 / - 6 16 13 1 54.48 60.69 65.84 70.83 75.95 81.32 87.01 93.03 99.35 105.94 112.77 119.82 - 127.08 134.54 142.2 150.04 158.06 166.25 174.62 183.14 191.83 200.65 209.54 218.5 227.57 236.76 246.06 255.43 - 264.9 274.49 284.2 294.02 303.97 314.02 324.19 334.47 / - 6 16 14 1 50.04 57.32 64.46 71.64 79.28 87.16 95.42 104.08 113.08 122.43 132.12 142.1 - 152.34 162.82 173.54 184.48 195.63 206.87 217.54 229.95 241.94 253.27 265.63 277.85 290.3 303.13 316.27 329.61 - 343.1 356.7 370.46 384.38 398.46 412.73 427.18 441.82 / - 6 16 15 1 46.41 57.26 69.66 82.08 94.63 107.1 119.57 133.24 145.85 160.21 174.96 188.49 - 203.2 218.71 234.32 250.52 267.13 284 299.68 317.24 335.13 353.38 371.98 390.94 409.95 428.75 448.69 469.05 - 489.77 510.86 532.31 554.14 576.34 598.91 621.86 645.17 / - 6 16 16 1 48.18 69.11 89.34 108.71 127.75 147.35 167.19 187.72 208.56 229.69 253 274.83 - 299.14 324.25 348.17 373.72 400.81 428.32 456.24 485.05 513.68 543.86 574.71 605.4 637.21 669.93 703.39 737.6 - 772.6 808.37 844.53 880.81 918.93 957.84 997.52 1037.97 / - 6 16 17 1 64.11 94.8 126.77 157.87 188.71 220.52 253.03 287.05 322.6 359.39 398.72 438.17 - 480.5 522.46 567.77 614.22 660.71 709.66 760.78 813.26 867.24 923 979.74 1038.77 1099.29 1161.17 1223.68 1285.88 - 1346 1407.01 1468.37 1532.06 1596.47 1662.25 1729.44 1798.99 / - 6 16 18 1 90.14 141.35 190.34 242.95 296.96 353.31 412.65 475.32 541.19 610.49 683.38 760.14 - 841.03 925.72 1014.42 1106.41 1201.36 1297.3 1391.69 1487.19 1586.7 1688.83 1795.31 1901.74 2012.75 2127.62 2242.86 2360.56 - 2482.25 2606.19 2734.04 2862.59 2993.45 3126.88 3262.34 3402.62 / - 6 16 19 1 133.25 212.79 292.62 385.73 487.35 596.07 713.27 839.09 974.77 1119.36 1273.71 1425.15 - 1578.88 1748.04 1924.96 2101.61 2286.37 2486.98 2683.9 2889.64 3098.09 3334.7 3556.62 3787.97 4026.83 4273.67 4527 4785.24 - 5051.38 5321.92 5600.97 5886.92 6179.35 6476.81 6778.54 7087.91 / - 6 16 20 1 202.79 329.53 460.51 601.71 801.65 1031.82 1282.42 1539.76 1818.84 2122.08 2436.93 2782.96 - 3129.68 3502.44 3900.17 4320.68 4730.91 5194.04 5639.47 6098.31 6625 7124.49 7632.49 8163.58 8774.63 9341.16 9920.95 10513.93 - 11126.54 11752.77 12417.31 13094.91 13801.04 14527.86 15260.83 16012.38 / - 6 17 1 1 235.26 234.33 234.02 234.01 234.16 234.44 234.81 235.27 235.82 236.43 237.11 237.87 - 238.68 239.56 240.51 241.52 242.59 243.72 244.91 246.17 247.48 248.86 250.3 251.79 253.35 254.97 256.64 258.38 - 260.17 262.03 263.94 265.92 267.95 270.05 272.2 274.41 / - 6 17 2 1 235.12 234.15 233.83 233.8 233.94 234.21 234.58 235.04 235.58 236.19 236.87 237.62 - 238.44 239.32 240.26 241.27 242.34 243.47 244.67 245.92 247.24 248.62 250.05 251.55 253.11 254.73 256.4 258.14 - 259.94 261.8 263.72 265.69 267.73 269.82 271.98 274.19 / - 6 17 3 1 234.62 233.49 233.09 233 233.11 233.35 233.7 234.14 234.67 235.27 235.95 236.7 - 237.51 238.39 239.34 240.35 241.42 242.56 243.76 245.02 246.34 247.73 249.18 250.68 252.25 253.88 255.57 257.32 - 259.13 261 262.93 264.92 266.97 269.08 271.25 273.48 / - 6 17 4 1 233.26 231.73 231.01 230.81 230.83 231.01 231.32 231.74 232.25 232.84 233.51 234.26 - 235.08 235.97 236.93 237.95 239.05 240.2 241.43 242.71 244.07 245.48 246.96 248.5 250.1 251.76 253.49 255.28 - 257.13 259.04 261.01 263.05 265.14 267.3 269.51 271.79 / - 6 17 5 1 230.24 227.07 226 225.65 225.58 225.71 225.99 226.39 226.9 227.5 228.19 228.97 - 229.82 230.75 231.76 232.84 233.99 235.21 236.49 237.85 239.27 240.76 242.32 243.94 245.63 247.38 249.19 251.07 - 253.02 255.02 257.09 259.23 261.42 263.68 266 268.38 / - 6 17 6 1 224.2 217.51 215.82 215.28 215.11 215.18 215.45 215.87 216.42 217.09 217.85 218.72 - 219.68 220.73 221.86 223.07 224.35 225.73 227.17 228.7 230.3 231.97 233.71 235.49 237.38 239.33 241.35 243.44 - 245.59 247.82 250.1 252.43 254.85 257.33 259.87 262.48 / - 6 17 7 1 210.72 199.52 197.63 196.99 196.82 196.96 197.33 197.9 198.63 199.49 200.49 201.61 - 202.84 204.16 205.57 207.1 208.73 210.44 212.25 214.1 216.07 218.13 220.26 222.43 224.72 227.08 229.51 232.02 - 234.56 237.2 239.92 242.69 245.51 248.41 251.38 254.41 / - 6 17 8 1 185.37 170.06 168.75 168.45 168.68 169.27 170.11 171.16 172.4 173.81 175.24 176.92 - 178.73 180.67 182.72 184.85 187.35 189.72 192.18 194.75 197.39 200.11 202.92 205.81 208.77 211.81 214.94 218.11 - 221.35 224.68 228.03 231.48 234.96 238.58 242.22 245.92 / - 6 17 9 1 141.59 132.07 131.28 131.55 132.4 133.64 135.26 137.16 139.28 141.58 144.1 146.75 - 149.58 152.49 155.51 158.74 161.97 165.42 168.85 172.36 175.94 179.89 183.63 187.44 191.31 195.25 199.25 203.71 - 207.83 212.01 216.24 220.53 224.86 229.8 234.25 238.74 / - 6 17 10 1 93.76 93.22 94.66 96.92 99.54 102.37 105.41 108.58 111.94 115.38 119.02 122.78 - 126.66 130.58 134.71 138.94 143.3 147.59 152.14 156.78 161.32 166.14 170.8 175.79 180.84 185.7 190.9 195.87 - 201.22 206.29 211.79 216.97 222.6 227.88 233.5 238.88 / - 6 17 11 1 68.47 71.64 74.85 78.33 81.97 85.72 89.59 93.57 97.67 101.88 106.21 110.66 - 115.23 119.91 125.18 130.46 135.73 141.11 146.58 152.14 157.75 163.47 169.27 175.18 181.17 187.26 193.44 199.71 - 206.03 212.43 218.6 225.19 231.87 238.63 245.04 251.95 / - 6 17 12 1 60.33 65.1 69.07 73.04 77.22 81.61 86.17 90.92 95.84 100.93 106.18 111.6 - 117.17 122.87 128.68 134.61 140.67 146.86 153.18 159.61 166.17 172.85 179.63 186.53 193.53 200.63 208.31 216.62 - 224.9 232.96 241.05 249.19 257.39 265.74 274.05 282.47 / - 6 17 13 1 54.96 61.2 66.36 71.35 76.48 81.85 87.56 93.6 99.93 106.52 113.35 120.41 - 127.67 135.14 142.8 150.64 158.66 166.85 175.21 183.74 192.42 201.27 210.24 219.27 228.39 237.61 246.95 256.33 - 265.84 275.45 285.19 295.05 305.03 315.13 325.34 335.67 / - 6 17 14 1 50.42 57.77 64.93 72.1 79.72 87.59 95.86 104.51 113.49 122.84 132.53 142.5 - 152.73 163.2 173.89 184.81 195.95 207.16 217.79 230.17 242.12 253.4 265.71 277.83 291.99 303.08 316.18 329.49 - 342.99 356.69 370.55 384.54 398.69 413.01 427.5 442.19 / - 6 17 15 1 46.89 57.51 69.92 82.36 94.91 107.38 119.83 133.48 146.06 160.4 175.09 188.57 - 203.22 218.67 234.19 250.31 266.84 283.61 299.21 316.7 334.53 352.69 371.19 390.02 408.89 427.85 447.33 467.57 - 488.19 509.17 530.53 552.26 574.34 596.78 619.57 642.71 / - 6 17 16 1 48.27 69.18 89.45 108.8 127.83 147.4 167.19 187.65 208.42 229.45 252.66 274.17 - 298.55 323.57 347.35 372.73 399.57 426.8 454.45 483.05 511.51 541.55 572.22 602.54 634.27 666.77 699.94 733.87 - 768.54 803.94 839.71 875.56 913.24 951.69 990.89 1030.86 / - 6 17 17 1 64.08 94.69 126.76 157.79 188.51 220.15 252.46 286.33 321.72 358.31 397.42 436.54 - 478.62 520.28 565.35 611.49 657.71 706.26 757 809.04 862.52 917.74 974.29 1032.26 1092.17 1153.47 1215.73 1278.78 - 1338.05 1399.57 1462.63 1525.79 1591.25 1658.39 1725.02 1795 / - 6 17 18 1 90.11 141.48 190.37 242.71 296.31 352.35 411.18 473.38 538.89 607.74 680.05 756.3 - 836.41 920.45 1008.41 1099.76 1194.11 1289.76 1384.65 1481.98 1581.94 1685.69 1791.88 1901.39 2013.7 2127.63 2244.35 2363.67 - 2486.8 2612.3 2741.7 2872.1 3004.84 3140.23 3277.83 3420.14 / - 6 17 19 1 133.31 213.28 293.48 385.29 486.21 595.51 712.11 836.9 969.65 1114.46 1268.33 1420.37 - 1576.83 1746.27 1917.99 2103.39 2290.19 2492.86 2692.56 2900.77 3112.51 3351.16 3576.88 3811.67 4053.93 4302.68 4558.83 4823.02 - 5094.47 5366.36 5652.98 5946.61 6236.51 6542.77 6851.92 7159.53 / - 6 17 20 1 203.18 331.21 463.93 607.4 796.89 1021.18 1267.5 1527.09 1813.14 2106.28 2435.6 2769.55 - 3130.39 3518.3 3896.17 4317.09 4761.65 5197.11 5686.53 6155.12 6643.62 7198.84 7716.93 8257.27 8812.71 9381.78 10039.06 10640.38 - 11262.56 11894.01 12556.69 13248.01 13965.01 14694.13 15451.84 16222.63 / - 6 18 1 1 236.67 235.86 235.62 235.63 235.8 236.09 236.47 236.94 237.48 238.09 238.78 239.53 - 240.35 241.23 242.17 243.18 244.25 245.38 246.58 247.83 249.15 250.52 251.96 253.46 255.01 256.63 258.31 260.05 - 261.85 263.71 265.62 267.6 269.64 271.74 273.89 276.11 / - 6 18 2 1 236.41 235.53 235.24 235.22 235.37 235.64 236.01 236.47 237.01 237.62 238.3 239.05 - 239.86 240.74 241.69 242.7 243.77 244.9 246.1 247.36 248.68 250.06 251.5 253 254.56 256.19 257.87 259.61 - 261.42 263.28 265.21 267.19 269.24 271.34 273.51 275.73 / - 6 18 3 1 235.68 234.56 234.14 234.04 234.13 234.36 234.71 235.14 235.67 236.27 236.94 237.69 - 238.5 239.38 240.33 241.35 242.42 243.57 244.77 246.04 247.37 248.77 250.22 251.74 253.32 254.96 256.67 258.43 - 260.26 262.14 264.09 266.1 268.16 270.29 272.48 274.73 / - 6 18 4 1 233.99 232.37 231.49 231.26 231.26 231.43 231.73 232.14 232.65 233.24 233.91 234.66 - 235.49 236.39 237.35 238.39 239.5 240.67 241.9 243.21 244.58 246.01 247.51 249.07 250.69 252.38 254.13 255.94 - 257.82 259.76 261.76 263.82 265.94 268.13 270.38 272.69 / - 6 18 5 1 230.55 227.11 225.76 225.36 225.26 225.37 225.64 226.03 226.54 227.15 227.85 228.64 - 229.51 230.45 231.48 232.58 233.75 235 236.32 237.7 239.16 240.69 242.28 243.94 245.66 247.46 249.32 251.24 - 253.23 255.28 257.35 259.54 261.78 264.09 266.46 268.9 / - 6 18 6 1 224.16 216.67 214.99 214.39 214.19 214.25 214.51 214.93 215.49 216.16 216.95 217.84 - 218.82 219.89 221.06 222.31 223.64 225.06 226.52 228.09 229.74 231.46 233.25 235.12 237.04 239.05 241.13 243.28 - 245.5 247.77 250.12 252.54 255.03 257.56 260.18 262.86 / - 6 18 7 1 210.58 198.65 196.69 196.08 195.94 196.11 196.51 197.11 197.86 198.77 199.8 200.95 - 202.21 203.55 205.03 206.61 208.28 210.04 211.86 213.8 215.82 217.94 220.09 222.36 224.71 227.14 229.6 232.18 - 234.82 237.54 240.3 243.15 246.08 249.04 252.1 255.22 / - 6 18 8 1 184.63 169.42 168.2 167.9 168.14 168.74 169.59 170.66 171.82 173.23 174.8 176.51 - 178.35 180.31 182.39 184.59 186.89 189.3 191.8 194.4 197.42 200.22 203.1 206.06 209.12 212.23 215.41 218.66 - 221.98 225.36 228.8 232.32 235.89 239.53 243.23 247.03 / - 6 18 9 1 141.5 131.96 131.19 131.45 132.32 133.63 135.29 137.21 139.35 141.71 144.23 146.93 - 149.73 152.71 155.76 159.01 162.28 165.64 169.22 172.76 176.38 180.08 184.15 188 191.91 195.9 199.94 204.46 - 208.63 212.85 217.14 221.47 225.86 230.3 235.37 239.93 / - 6 18 10 1 94.04 93.59 95.11 97.47 100.13 102.98 106.04 109.22 112.58 116.04 119.68 123.45 - 127.27 131.27 135.41 139.67 143.89 148.35 152.92 157.4 162.15 167 171.7 176.72 181.54 186.7 191.65 196.95 - 202.35 207.47 212.65 218.25 223.53 229.28 234.66 240.39 / - 6 18 11 1 69.07 72.3 75.61 79.17 82.84 86.61 90.49 94.47 98.57 102.77 107.1 111.54 - 116.1 120.78 125.89 131.28 136.62 141.98 147.41 152.97 158.7 164.44 170.27 176.21 182.24 188.36 194.31 200.6 - 206.98 213.42 219.93 226.58 233.32 239.72 246.61 253.59 / - 6 18 12 1 61.11 65.88 69.85 73.88 78.1 82.5 87.08 91.82 96.74 101.82 107.07 112.48 - 118.05 123.76 129.6 135.53 141.59 147.78 154.09 160.53 167.08 173.76 180.55 187.45 194.46 201.57 208.78 216.86 - 225.31 233.71 241.98 249.96 258.47 266.86 275.1 283.57 / - 6 18 13 1 55.75 61.99 67.11 72.08 77.19 82.56 88.27 94.32 100.64 107.22 114.04 121.08 - 128.32 135.77 143.41 151.23 159.22 167.39 175.72 184.22 192.87 201.68 210.65 219.77 228.97 238.25 247.6 257 - 266.52 276.16 285.92 295.8 305.79 315.91 326.15 336.51 / - 6 18 14 1 51.06 58.48 65.63 72.74 80.1 88.15 96.38 104.99 113.95 123.28 132.94 142.87 - 153.06 163.48 174.13 185 195.28 207.22 217.77 230.1 241.97 253.15 265.38 277.4 291.25 302.43 315.41 328.58 - 341.95 355.54 369.33 383.35 397.59 412.02 426.61 441.36 / - 6 18 15 1 47.62 57.98 70.3 82.79 95.3 107.73 120.13 133.74 146.25 160.52 175.1 188.13 - 203.04 218.36 233.73 249.74 266.13 282.39 298.16 315.47 333.1 351.08 369.39 388.05 406.92 425.49 444.77 464.81 - 485.19 505.92 527.01 548.46 570.26 592.44 614.97 637.84 / - 6 18 16 1 48.85 69.39 89.48 108.81 127.97 147.08 167.15 187.51 208.14 229.01 252.09 273.37 - 297.57 322.35 345.74 370.68 397.18 424.09 451.3 479.65 507.71 537.33 567.61 597.52 628.89 661.05 693.89 727.43 - 761.66 796.61 831.86 867.13 904.23 942.06 980.62 1019.9 / - 6 18 17 1 64.16 94.7 126.81 157.74 188.25 219.65 251.74 285.28 320.41 356.63 395.44 434.14 - 475.85 516.94 561.25 607.15 653.77 700.87 751.1 802.55 855.35 909.83 965.6 1022.57 1081.53 1141.88 1203.38 1265.52 - 1326.48 1388.35 1451.63 1515.7 1581.21 1648.29 1717.23 1786.42 / - 6 18 18 1 90.25 141.87 190.47 242.43 295.47 350.79 408.87 470.39 535.02 603.14 674.9 750.69 - 829.77 912.94 999.6 1090.01 1183.41 1279.45 1374.82 1472.1 1574 1677.84 1785.19 1895.78 2008.72 2124.8 2243.12 2366.14 - 2489.02 2616.26 2747.38 2879.81 3014.76 3152.38 3292.46 3434.96 / - 6 18 19 1 133.62 214.26 294.99 385.83 485.96 592.83 708.15 831.5 964.55 1105.42 1255.59 1408.32 - 1569.88 1739.87 1913.62 2102.3 2290.6 2486.41 2701.51 2911.41 3127.19 3351.23 3600.17 3839.25 4083.18 4336.31 4595.22 4864.86 - 5139.21 5423.83 5707.45 6005.42 6305.72 6613.08 6931.5 7246.71 / - 6 18 20 1 204.05 333.88 468.91 615.09 790.07 1012.66 1260.03 1517.48 1792.07 2093.22 2420.7 2764 - 3120.08 3503.59 3893.39 4315.63 4762.57 5199.51 5690.15 6167.08 6702.63 7212.17 7742.93 8349.01 8916.21 9496.86 10084.04 10693.62 - 11415.3 12063.1 12740.38 13438.38 14157.08 14896.15 15665.28 16459.46 / - 6 19 1 1 237.81 237.12 236.93 236.97 237.15 237.45 237.84 238.31 238.85 239.47 240.15 240.91 - 241.73 242.61 243.55 244.56 245.63 246.77 247.96 249.22 250.54 251.92 253.36 254.86 256.43 258.05 259.73 261.48 - 263.28 265.15 267.08 269.06 271.11 273.21 275.38 277.61 / - 6 19 2 1 237.32 236.48 236.2 236.18 236.32 236.59 236.96 237.41 237.95 238.56 239.24 239.99 - 240.81 241.69 242.64 243.65 244.73 245.86 247.07 248.33 249.66 251.05 252.5 254.01 255.58 257.22 258.92 260.67 - 262.49 264.37 266.31 268.31 270.38 272.5 274.68 276.93 / - 6 19 3 1 236.25 235.08 234.61 234.47 234.53 234.74 235.07 235.49 236.01 236.6 237.27 238.02 - 238.84 239.73 240.68 241.71 242.8 243.95 245.17 246.46 247.81 249.22 250.69 252.23 253.83 255.5 257.23 259.02 - 260.87 262.78 264.76 266.79 268.89 271.05 273.27 275.56 / - 6 19 4 1 234.14 232.2 231.3 230.99 230.94 231.07 231.35 231.74 232.24 232.83 233.5 234.26 - 235.1 236.01 236.99 238.05 239.17 240.37 241.63 242.96 244.36 245.83 247.36 248.96 250.62 252.35 254.14 256 - 257.92 259.91 261.95 264.07 266.24 268.48 270.78 273.14 / - 6 19 5 1 230.36 226.32 224.93 224.46 224.32 224.4 224.64 225.03 225.54 226.15 226.86 227.67 - 228.56 229.53 230.58 231.71 232.92 234.21 235.56 236.99 238.5 240.07 241.71 243.43 245.21 247.06 248.98 250.96 - 252.96 255.08 257.27 259.52 261.83 264.22 266.66 269.17 / - 6 19 6 1 223.87 215.83 213.95 213.36 213.16 213.23 213.5 213.94 214.52 215.21 216.03 216.94 - 217.93 219.04 220.24 221.53 222.9 224.36 225.9 227.52 229.22 231 232.81 234.74 236.75 238.82 240.97 243.2 - 245.49 247.82 250.25 252.76 255.33 257.96 260.67 263.42 / - 6 19 7 1 210.24 197.69 195.67 195.07 194.99 195.22 195.68 196.31 197.1 198.04 199.11 200.3 - 201.6 203.02 204.5 206.12 207.84 209.65 211.56 213.5 215.59 217.76 220.01 222.29 224.71 227.2 229.77 232.37 - 235.09 237.89 240.72 243.65 246.66 249.7 252.85 256.05 / - 6 19 8 1 183.88 168.88 167.66 167.36 167.61 168.22 169.09 170.08 171.35 172.79 174.37 176.11 - 177.97 179.97 182.08 184.31 186.65 189.09 191.63 194.27 197 199.82 202.73 206.12 209.21 212.38 215.62 218.94 - 222.33 225.78 229.31 232.9 236.55 240.29 244.14 248.02 / - 6 19 9 1 140.97 131.86 131.1 131.38 132.32 133.73 135.41 137.41 139.64 142.01 144.55 147.25 - 150.12 153.07 156.19 159.37 162.75 166.13 169.61 173.3 176.94 180.66 184.46 188.64 192.59 196.6 200.68 204.82 - 209.45 213.72 218.04 222.42 226.86 231.35 235.9 241.09 / - 6 19 10 1 94.52 94.21 96.15 98.61 101.33 104.22 107.28 110.45 113.8 117.23 120.85 124.6 - 128.39 132.37 136.49 140.6 144.93 149.38 153.77 158.41 163.16 167.79 172.72 177.75 182.59 187.76 192.73 198.06 - 203.15 208.64 213.85 219.49 224.81 230.61 236.04 241.82 / - 6 19 11 1 70.09 73.57 77.22 80.93 84.68 88.47 92.32 96.26 100.29 104.43 108.68 113.06 - 117.55 122.17 127.14 132.5 137.77 143.07 148.57 154.1 159.65 165.35 171.16 177.07 183.08 189.2 195.41 201.72 - 208.13 214.59 221.14 227.44 234.2 241.05 247.99 254.56 / - 6 19 12 1 62.66 67.4 71.46 75.62 79.89 84.29 88.84 93.54 98.4 103.42 108.6 113.93 - 119.42 125.06 130.85 136.78 142.81 148.95 155.21 161.59 168.1 174.73 181.47 188.34 195.31 202.39 209.58 216.87 - 225.35 233.93 242.21 250.61 258.99 267.37 275.89 284.27 / - 6 19 13 1 57.53 63.63 68.64 73.51 78.53 83.9 89.61 95.6 101.86 108.36 115.09 122.04 - 129.2 136.56 144.1 151.84 159.74 167.82 176.07 184.48 193.04 201.77 210.64 219.67 228.85 238.16 247.54 257.01 - 266.56 276.22 285.97 295.85 305.84 315.95 326.18 336.53 / - 6 19 14 1 52.56 60.13 67.15 74.05 81.21 89.16 97.24 105.73 114.62 123.86 133.41 143.23 - 153.31 163.61 174.15 184.89 195.5 205.95 217.92 229.45 241.18 252.18 264.25 276.09 289.84 300.74 313.5 326.47 - 339.63 353 366.59 380.38 394.38 408.58 423 437.63 / - 6 19 15 1 49.06 59.41 71.49 83.73 96.03 108.31 120.57 134.06 146.4 160.48 174.93 187.44 - 202.35 217.45 232.64 248.5 264.66 280.62 296.13 313.18 330.55 348.23 366.24 384.43 402.95 421 440.14 459.8 - 479.8 500.14 520.83 541.88 563.27 585.01 607.12 629.56 / - 6 19 16 1 50.21 70.28 89.9 109.08 127.92 147.14 167.1 187.27 207.67 228.27 251.1 271.96 - 295.74 320.03 343.98 367.2 393.18 419.36 446.13 473.9 501.32 530.36 559.92 589.26 620.05 651.61 683.82 716.71 - 750.28 784.53 819.02 853.43 889.74 926.75 964.46 1002.86 / - 6 19 17 1 65.36 94.88 127.02 157.5 188.01 218.68 250.82 283.94 318.62 354.18 391.38 430.55 - 471.03 511.81 555.48 600.66 644.71 692.26 741.45 791.77 843.41 896.66 950.73 1006.73 1064.39 1123.47 1183.35 1244.86 - 1306.76 1369.22 1433 1497.65 1563.85 1632.05 1701.17 1771.68 / - 6 19 18 1 90.74 142.09 190.96 242.3 294.26 348.5 405.64 466.01 529.8 597.06 667.71 742.48 - 820.05 901.88 986.52 1075.6 1167.96 1263.08 1359.2 1458.03 1560.02 1665.68 1774.5 1885.86 2000.12 2118.68 2238.83 2362.34 - 2488.9 2616.98 2748.91 2884.75 3022.21 3162.45 3305.35 3452.38 / - 6 19 19 1 134.54 216.28 297.93 387.69 485.45 591.13 703.75 825.28 955.98 1094.74 1242.73 1396.4 - 1558.2 1729.62 1904.74 2093.53 2284.34 2482.69 2698.73 2912.29 3133.95 3361.23 3612.72 3857.12 4108.61 4366.69 4633.2 4907.13 - 5188.9 5478.7 5773.78 6077.67 6382.13 6699.64 7020.17 7348.5 / - 6 19 20 1 205.89 338.42 476.72 626.09 789.49 998.43 1241.36 1495.47 1777.97 2077.03 2402.57 2740.13 - 3104.27 3488.28 3887.84 4308.98 4743.1 5212.77 5706.35 6185.09 6723.48 7241.48 7825.68 8381.57 8950.96 9538.41 10212.79 10838.5 - 11485.47 12153.16 12841.53 13545.08 14392.63 15151.7 15931.79 16732.75 / - 6 20 1 1 238.05 237.3 237.05 237.05 237.21 237.48 237.85 238.31 238.85 239.46 240.15 240.9 - 241.73 242.62 243.58 244.6 245.68 246.83 248.05 249.32 250.66 252.07 253.53 255.06 256.65 258.31 260.02 261.8 - 263.64 265.54 267.5 269.52 271.61 273.76 275.96 278.23 / - 6 20 2 1 237.26 236.27 235.88 235.79 235.88 236.11 236.45 236.89 237.41 238.02 238.7 239.45 - 240.28 241.17 242.14 243.17 244.27 245.43 246.66 247.95 249.31 250.73 252.22 253.77 255.38 257.06 258.8 260.6 - 262.47 264.39 266.39 268.44 270.55 272.73 274.97 277.28 / - 6 20 3 1 235.94 234.54 233.92 233.68 233.67 233.83 234.12 234.52 235.02 235.62 236.29 237.04 - 237.87 238.78 239.76 240.8 241.92 243.11 244.36 245.69 247.08 248.53 250.05 251.64 253.3 255.02 256.8 258.65 - 260.56 262.54 264.58 266.69 268.86 271.09 273.38 275.74 / - 6 20 4 1 233.69 231.34 230.27 229.89 229.8 229.91 230.17 230.56 231.06 231.65 232.34 233.11 - 233.97 234.91 235.92 237.01 238.17 239.41 240.71 242.09 243.54 245.06 246.64 248.3 250.02 251.81 253.67 255.6 - 257.59 259.65 261.77 263.96 266.21 268.53 270.92 273.37 / - 6 20 5 1 229.88 225.32 223.88 223.36 223.19 223.26 223.5 223.89 224.4 225.03 225.76 226.58 - 227.49 228.5 229.58 230.75 232 233.33 234.73 236.21 237.76 239.39 241.1 242.87 244.72 246.63 248.62 250.68 - 252.81 255 257.27 259.6 261.95 264.42 266.96 269.56 / - 6 20 6 1 223.35 214.75 212.83 212.25 212.07 212.16 212.46 212.92 213.52 214.25 215.09 216.04 - 217.09 218.2 219.44 220.77 222.19 223.69 225.28 226.95 228.71 230.5 232.41 234.41 236.47 238.62 240.84 243.1 - 245.46 247.9 250.42 253 255.65 258.35 261.14 264.01 / - 6 20 7 1 208.73 196.5 194.48 194.05 194.05 194.33 194.84 195.53 196.38 197.37 198.45 199.68 - 201.03 202.49 204.06 205.73 207.45 209.31 211.27 213.32 215.41 217.64 219.95 222.29 224.77 227.33 229.96 232.63 - 235.42 238.28 241.18 244.19 247.28 250.39 253.61 256.91 / - 6 20 8 1 183.4 168.36 167.14 166.84 167.1 167.71 168.51 169.61 170.89 172.35 173.96 175.71 - 177.61 179.63 181.78 184.04 186.41 188.89 191.48 194.17 196.96 199.85 202.82 205.87 209 212.21 215.49 218.84 - 222.79 226.3 229.88 233.52 237.23 241 244.83 248.72 / - 6 20 9 1 140.2 131.76 131.19 131.83 133 134.6 136.42 138.48 140.72 143.12 145.66 148.34 - 151.19 154.13 157.23 160.39 163.75 167.12 170.6 174.3 177.96 181.7 185.53 189.74 193.71 197.75 201.84 206 - 210.21 214.93 219.26 223.65 228.1 232.6 237.15 241.75 / - 6 20 10 1 96.11 97.08 99.39 102.02 104.72 107.62 110.58 113.66 116.91 120.23 123.73 127.29 - 131.03 134.92 138.81 142.93 147.03 151.38 155.86 160.27 164.97 169.55 174.45 179.45 184.26 189.4 194.34 199.65 - 204.71 210.16 215.34 220.95 226.24 231.57 237.4 242.85 / - 6 20 11 1 73.5 78.11 82.28 86.15 89.86 93.52 97.2 100.94 104.75 108.68 112.71 116.86 - 121.12 125.51 130.58 135.53 140.55 145.67 150.88 156.27 161.68 167.27 172.97 178.77 184.69 190.7 196.82 203.04 - 209.03 215.42 221.86 228.39 235.06 241.4 248.24 255.18 / - 6 20 12 1 67.03 71.88 76.35 80.66 84.94 89.25 93.66 98.17 102.81 107.58 112.5 117.57 - 122.79 128.17 133.7 139.37 145.2 151.17 157.29 163.55 169.91 176.36 182.92 189.59 196.39 203.3 210.33 217.47 - 224.98 233.48 241.76 250.02 258.39 266.43 274.8 283.24 / - 6 20 13 1 62.62 67.93 72.56 77.39 82.47 87.78 93.33 99.12 105.13 111.37 117.82 124.47 - 131.33 138.39 145.63 153.06 160.67 168.45 176.4 184.52 192.8 201.24 209.84 218.59 227.42 236.39 245.51 254.77 - 264.18 273.74 283.45 293.29 303.28 313.37 323.52 333.76 / - 6 20 14 1 57.66 64.82 71.07 77.41 84.1 91.31 99.52 107.98 116.57 125.48 134.66 144.11 - 153.8 163.73 173.87 183.87 193.72 205.16 216.14 227.33 237.74 249.27 261.01 272.42 286.07 296.31 308.59 321.21 - 334.02 347.03 360.25 373.66 387.28 401.09 415.11 429.33 / - 6 20 15 1 53.59 63.68 75.22 86.9 98.29 109.6 122.15 133.52 146.76 160.37 172.7 186.07 - 200.57 214.97 229.85 245.25 260.96 276.27 291.36 307.97 324.88 341.99 359.52 377.37 395.15 412.51 431.32 450.47 - 469.96 489.78 509.94 530.44 551.29 572.48 594.01 615.86 / - 6 20 16 1 53.87 73.67 92.66 110.87 129.12 146.91 165.95 185.21 206.22 226.16 247.5 268.24 - 291.35 314.95 337.6 360.23 385.47 410.62 436.91 463.41 490.29 518.54 547.41 575.65 605.72 636.44 667.8 699.81 - 732.32 764.43 798.3 832.24 867.5 903.42 939.99 977.24 / - 6 20 17 1 66.68 98.41 128.55 157.42 186.69 217.43 248.73 281.79 315.62 350.32 385.85 424.89 - 461.82 503.12 545.63 589.33 630.58 676.98 724.74 773.29 823.41 875.29 927.42 982.13 1038.23 1095.6 1153.37 1213.71 - 1275.44 1338.57 1402.82 1468.73 1535.1 1603.81 1673.91 1745.38 / - 6 20 18 1 95.84 142.99 191.95 241.6 292.79 345.69 401.98 461.02 523.86 589.58 658.23 731.72 - 806.93 887.1 968.72 1055.48 1145.74 1239.29 1334.41 1434.64 1538.39 1645.37 1755.34 1868.41 1984.59 2103.99 2226.41 2351.93 - 2480.33 2611.74 2746.61 2884.1 3024.53 3167.88 3314.13 3463.24 / - 6 20 19 1 138.59 221.04 302.66 391.58 486.95 589.36 699.53 818.19 945.29 1082.14 1226.56 1380.16 - 1542.86 1714.53 1891.94 2081.52 2275.31 2476.67 2692.33 2909.69 3134.4 3366.35 3605.55 3866.27 4122.36 4385.99 4657.1 4935.49 - 5222.64 5518.08 5821.89 6129.69 6447.6 6769.81 7102.56 7439.07 / - 6 20 20 1 210.45 347.24 490.32 643.64 808.93 986.79 1177.25 1380.09 1636.78 1927.51 2234.38 2565.07 - 2914.38 3288.75 3670.82 4089.33 4536.36 4980.44 5479.16 5968.51 6480.72 7016.3 7575.86 8174.87 8753.06 9388.16 10023.02 10636.8 - 11353.03 12014.33 12696.75 13501.93 14233.54 14986.4 15883.75 16686.76 / - 7 1 1 1 208.31 208.15 208.22 208.43 208.73 209.12 209.58 210.11 210.7 211.36 212.08 212.86 - 213.7 214.59 215.55 216.56 217.62 218.74 219.92 221.15 222.44 223.78 225.18 226.63 228.13 229.69 231.3 232.97 - 234.69 236.46 238.29 240.17 242.1 244.09 246.13 248.22 / - 7 1 2 1 208.23 208.06 208.13 208.33 208.63 209.01 209.48 210 210.6 211.26 211.98 212.75 - 213.59 214.49 215.44 216.45 217.52 218.64 219.82 221.05 222.34 223.68 225.08 226.53 228.03 229.59 231.21 232.88 - 234.6 236.37 238.2 240.08 242.02 244.01 246.05 248.14 / - 7 1 3 1 208.08 207.89 207.95 208.14 208.44 208.82 209.28 209.81 210.4 211.06 211.78 212.56 - 213.4 214.29 215.24 216.26 217.32 218.45 219.62 220.86 222.15 223.49 224.89 226.34 227.85 229.41 231.03 232.7 - 234.42 236.2 238.03 239.92 241.86 243.85 245.89 247.99 / - 7 1 4 1 207.8 207.58 207.61 207.79 208.09 208.46 208.92 209.44 210.04 210.69 211.41 212.19 - 213.03 213.92 214.88 215.89 216.96 218.09 219.27 220.5 221.79 223.14 224.54 226 227.51 229.08 230.7 232.37 - 234.1 235.88 237.72 239.61 241.55 243.55 245.6 247.71 / - 7 1 5 1 207.27 206.98 206.98 207.14 207.42 207.79 208.24 208.76 209.35 210 210.72 211.5 - 212.34 213.24 214.2 215.21 216.28 217.41 218.6 219.84 221.14 222.49 223.9 225.36 226.88 228.45 230.08 231.76 - 233.5 235.29 237.14 239.04 240.99 243 245.06 247.18 / - 7 1 6 1 206.1 205.59 205.46 205.55 205.77 206.1 206.53 207.03 207.61 208.26 208.97 209.75 - 210.59 211.49 212.46 213.48 214.56 215.7 216.9 218.16 219.47 220.84 222.27 223.76 225.3 226.89 228.54 230.25 - 232.02 233.83 235.71 237.64 239.62 241.66 243.75 245.9 / - 7 1 7 1 201.91 199.38 198.89 198.77 198.87 199.12 199.51 200 200.59 201.27 202.02 202.82 - 203.71 204.68 205.72 206.83 208 209.23 210.53 211.89 213.32 214.8 216.35 217.96 219.63 221.36 223.15 224.99 - 226.9 228.86 230.88 232.95 235.07 237.25 239.49 241.79 / - 7 1 8 1 188.68 182.41 181.29 180.89 180.88 181.13 181.58 182.19 182.93 183.8 184.78 185.87 - 187.05 188.32 189.68 191.09 192.61 194.21 195.88 197.62 199.43 201.29 203.24 205.24 207.31 209.43 211.63 213.88 - 216.19 218.54 220.97 223.45 225.97 228.56 231.2 233.9 / - 7 1 9 1 156.71 146.88 145.32 144.87 145.14 145.73 146.71 147.93 149.34 150.95 152.72 154.6 - 156.64 158.8 161.03 163.4 165.82 168.59 171.22 173.87 176.63 179.4 182.28 185.17 188.14 191.13 194.2 197.31 - 200.92 204.11 207.35 210.63 213.94 217.3 220.68 224.12 / - 7 1 10 1 103.36 100.77 100.94 102.12 103.84 105.89 108.24 110.75 113.43 116.33 119.31 122.49 - 125.7 129.13 132.54 136.16 139.88 143.54 147.44 151.23 155.28 159.18 163.38 167.38 171.6 175.7 180.03 184.37 - 188.75 192.96 197.41 201.65 206.15 210.43 214.72 219.55 / - 7 1 11 1 72.02 73.8 76.43 79.31 82.31 85.43 88.67 92.03 95.65 99.5 103.37 107.38 - 111.5 115.73 120.05 124.48 129.01 133.63 138.36 143.17 148.07 153.05 158.09 163.2 168.41 173.69 179.05 184.17 - 189.64 195.19 200.43 206.08 211.81 217.17 222.96 228.4 / - 7 1 12 1 62.83 66.07 69.34 72.84 76.52 80.36 84.35 88.5 92.81 97.26 101.87 106.6 - 111.44 116.42 121.53 126.77 132.13 137.62 143.22 148.94 155.22 161.91 168.42 174.96 181.44 188.15 194.66 201.59 - 208.35 215.19 222.1 229.1 236.17 243.31 250.48 257.73 / - 7 1 13 1 59.17 63.29 67.18 71.29 75.71 80.5 85.63 91.05 96.73 102.65 108.79 115.14 - 121.7 128.45 135.39 142.51 149.8 157.26 164.9 172.65 180.46 188.35 196.34 204.43 212.64 220.96 229.4 237.94 - 247.72 257.57 267.07 276.68 286.25 296.04 305.77 315.45 / - 7 1 14 1 54.92 60.85 66.66 72.65 79.06 85.94 93.27 101.02 109.21 117.75 126.62 135.79 - 145.23 154.93 164.88 175.08 185.5 196.15 207.01 218.08 229.38 240.89 252.55 264.36 276.25 288.23 300.34 312.6 - 325.01 337.57 350.3 363.19 377.02 391.43 405.94 420.39 / - 7 1 15 1 52.41 60.46 71 81.96 93.41 105.01 116.55 129.29 142.63 155.77 168.42 182.8 - 197.08 212.01 227.36 242.62 257.39 273.74 290.45 307.52 324.95 342.77 360.97 379.49 398.32 417.38 435.48 455.08 - 475 495.24 515.84 536.8 559.46 582.03 605.37 629.23 / - 7 1 16 1 52.38 71.47 90.04 107.97 126.56 145.19 164.8 184.77 205.02 227.45 248.15 271.65 - 295.79 319.74 343.17 369.22 395.49 422.75 450.15 478.74 508.38 538.8 568.81 600.68 633.26 666.34 700.1 734.42 - 770.26 807.8 845.95 884.83 923.89 963.73 1004.03 1043.86 / - 7 1 17 1 67.56 97.15 128 157.55 187.92 219.13 252.39 286.05 321.84 360.1 398.79 439.75 - 481.44 525.99 571.71 616.77 665.88 716.73 769.33 823.73 879.01 936.73 996.99 1058.61 1119.69 1180.63 1238.22 1290.63 - 1332.52 1376.55 1425.24 1470.5 1521.37 1573.52 1625.01 1675.94 / - 7 1 18 1 93.81 143.03 192.63 243.72 297.02 353.45 413.71 477.87 546.17 617.92 693.35 773.53 - 858.18 947.32 1039.56 1134.24 1230.85 1320.24 1407.82 1497.41 1591.02 1686.97 1785.9 1885.98 1987.46 2089.53 2195.22 2303.5 - 2408.94 2520.58 2635.21 2750.05 2866.99 2985.13 3105.19 3231.08 / - 7 1 19 1 137.04 215.03 299.31 394.21 496.61 607.98 728.91 860.47 1005.36 1157.05 1302.54 1444.9 - 1595.62 1747.96 1901.52 2060.49 2232.3 2400.9 2572.38 2753.34 2934.02 3124.88 3316.75 3512.13 3713.28 3917.23 4131.65 4344.81 - 4561.94 4786.91 5019.12 5246.32 5485.67 5732.26 5966.99 6224.78 / - 7 1 20 1 205.7 327.38 475.87 664.86 878.98 1123.06 1369.53 1613.35 1871.62 2156.93 2437.98 2748.46 - 3059.12 3402.24 3746.16 4097.47 4496.2 4880.51 5273.74 5681.08 6105.72 6532.5 6982.5 7433.53 7910.74 8390.69 8891.94 9377.38 - 9905.34 10435.27 10978.22 11544.53 12118.4 12681.3 13288.01 13925.38 / - 7 2 1 1 210.15 209.98 210.04 210.24 210.55 210.93 211.39 211.92 212.52 213.18 213.9 214.68 - 215.52 216.42 217.37 218.38 219.45 220.58 221.76 222.99 224.28 225.63 227.03 228.49 230 231.56 233.18 234.85 - 236.58 238.36 240.2 242.08 244.03 246.02 248.07 250.17 / - 7 2 2 1 210.07 209.88 209.94 210.14 210.44 210.83 211.29 211.82 212.41 213.07 213.79 214.57 - 215.41 216.31 217.26 218.28 219.34 220.47 221.65 222.89 224.18 225.53 226.93 228.39 229.9 231.46 233.08 234.76 - 236.49 238.27 240.1 241.99 243.94 245.94 247.99 250.09 / - 7 2 3 1 209.91 209.71 209.76 209.95 210.24 210.63 211.09 211.61 212.21 212.87 213.59 214.37 - 215.21 216.1 217.06 218.07 219.14 220.27 221.45 222.69 223.98 225.33 226.74 228.19 229.71 231.28 232.9 234.57 - 236.31 238.09 239.93 241.82 243.77 245.77 247.82 249.93 / - 7 2 4 1 209.62 209.38 209.41 209.59 209.88 210.26 210.71 211.24 211.83 212.49 213.21 213.99 - 214.83 215.73 216.68 217.7 218.77 219.9 221.08 222.32 223.62 224.97 226.38 227.84 229.36 230.93 232.55 234.24 - 235.97 237.76 239.6 241.5 243.46 245.46 247.52 249.64 / - 7 2 5 1 209.06 208.75 208.75 208.91 209.19 209.56 210.01 210.53 211.12 211.78 212.49 213.28 - 214.12 215.02 215.98 216.99 218.07 219.2 220.39 221.64 222.94 224.29 225.71 227.18 228.7 230.28 231.91 233.6 - 235.35 237.15 239 240.91 242.87 244.89 246.96 249.08 / - 7 2 6 1 207.76 207.22 207.08 207.13 207.34 207.66 208.08 208.57 209.15 209.8 210.52 211.3 - 212.15 213.06 214.03 215.06 216.15 217.3 218.51 219.77 221.1 222.48 223.92 225.42 226.97 228.58 230.24 231.96 - 233.74 235.57 237.45 239.39 241.39 243.44 245.54 247.7 / - 7 2 7 1 203.23 200.52 199.9 199.78 199.88 200.14 200.53 201.03 201.62 202.3 203.06 203.9 - 204.81 205.79 206.84 207.96 209.15 210.4 211.72 213.1 214.54 216.05 217.62 219.21 220.89 222.63 224.43 226.3 - 228.21 230.19 232.23 234.32 236.48 238.69 240.95 243.28 / - 7 2 8 1 189.47 182.77 181.64 181.25 181.25 181.51 181.97 182.6 183.36 184.25 185.25 186.36 - 187.57 188.87 190.23 191.7 193.24 194.87 196.58 198.35 200.17 202.08 204.06 206.1 208.21 210.35 212.59 214.88 - 217.22 219.61 222.07 224.59 227.16 229.78 232.46 235.19 / - 7 2 9 1 156.44 146.45 144.97 144.67 144.89 145.59 146.6 147.85 149.29 150.93 152.73 154.64 - 156.72 158.91 161.17 163.57 166.04 168.63 171.5 174.25 177.06 179.88 182.81 185.75 188.77 191.81 194.93 198.07 - 201.28 205.01 208.31 211.63 215 218.42 221.86 225.34 / - 7 2 10 1 103.44 100.89 101.1 102.32 104.07 106.14 108.48 111.07 113.77 116.63 119.71 122.93 - 126.17 129.63 133.07 136.73 140.34 144.18 147.94 151.94 155.83 159.98 163.97 168.25 172.34 176.65 181.03 185.24 - 189.66 194.14 198.68 202.99 207.31 211.91 216.27 220.65 / - 7 2 11 1 72.16 73.98 76.61 79.53 82.57 85.72 89 92.4 95.93 99.92 103.86 107.89 - 112.03 116.29 120.71 125.17 129.75 134.42 139.18 144.04 148.99 154.02 159.1 164.26 169.52 174.86 179.98 185.44 - 190.96 196.56 201.86 207.57 212.95 218.77 224.62 230.11 / - 7 2 12 1 62.91 66.23 69.51 73.04 76.75 80.62 84.65 88.84 93.19 97.69 102.34 107.1 - 111.99 117.01 122.16 127.45 132.86 138.39 144.04 149.8 155.99 162.75 169.35 175.9 182.54 189.21 195.94 202.67 - 209.47 216.66 223.64 230.7 237.84 245.06 251.94 259.23 / - 7 2 13 1 59.11 63.4 67.36 71.51 75.96 80.79 85.95 91.41 97.12 103.08 109.27 115.67 - 122.27 129.07 136.06 143.22 150.56 158.08 165.76 173.57 181.42 189.36 197.4 205.55 213.82 222.19 230.69 239.29 - 248.86 258.55 268.46 278.09 287.73 297.66 307.43 317.05 / - 7 2 14 1 54.81 60.86 66.77 72.84 79.3 86.23 93.6 101.4 109.62 118.21 127.12 136.34 - 145.83 155.58 165.58 175.82 186.3 197 207.92 219.05 230.39 241.96 253.66 265.53 277.49 289.54 301.71 314.03 - 326.51 339.14 351.93 364.9 378.43 392.95 407.61 421.97 / - 7 2 15 1 52.34 60.48 71.08 82.11 93.64 105.27 117.04 129.63 143.02 156.2 168.9 183.32 - 197.67 212.65 228.05 243.36 259.15 274.59 291.35 308.47 325.95 343.82 362.08 380.66 399.57 418.72 436.9 456.58 - 476.58 496.91 517.58 538.62 560.49 583.65 607.17 630.92 / - 7 2 16 1 52.36 71.48 90.1 108.49 126.83 145.39 165.04 185.03 205.33 227.78 248.72 272.12 - 296.3 320.3 343.79 369.91 396.24 423.53 451.49 479.58 509.26 539.69 569.73 601.61 634.21 667.37 701.18 735.77 - 770.49 808.09 846.86 885.57 924.94 964.77 1004.78 1045.65 / - 7 2 17 1 67.5 97.11 128.02 157.98 188.05 219.59 252.68 286.23 322.02 360.49 399.01 439.27 - 481.72 526.27 572 617.06 666.12 717.11 769.5 823.94 879.27 936.94 996.86 1058.64 1119.98 1181.15 1239.1 1292.77 - 1334.09 1380.86 1426.82 1476.14 1526.1 1580.35 1632.43 1682.84 / - 7 2 18 1 93.69 143.05 192.61 243.93 297.17 353.77 413.85 477.92 546.13 617.85 693.13 773.13 - 857.6 946.62 1038.87 1133.16 1230.16 1320.82 1409.71 1500.96 1596.6 1686.25 1779.52 1872.42 1965.22 2060.53 2157.94 2259.25 - 2355.91 2460.67 2563.41 2672.1 2776.56 2885.31 2993.34 3106.69 / - 7 2 19 1 136.86 214.87 299.24 393.56 495.71 607.94 728.67 859.95 1004.54 1156.1 1302.05 1445.03 - 1589.81 1749.47 1905.05 2066.17 2240.25 2410.79 2584.18 2766.79 2948.97 3138.92 3335.99 3533.49 3736.84 3943.02 4154.5 4375.15 - 4594.79 4821.86 5056.34 5282.66 5527.94 5776.75 6014.68 6270.35 / - 7 2 20 1 205.5 327.26 474.16 661.82 878.61 1116.64 1364.61 1613.94 1873.11 2148.74 2441.95 2753.86 - 3066.08 3411.11 3756.75 4109.97 4512.61 4899.62 5300.52 5709.68 6142.76 6574.65 7029.81 7485.85 7968.34 8453.39 8959.63 9450.17 - 9983.19 10518.64 11067.47 11640.02 12219.95 12789.17 13402.21 14046.35 / - 7 3 1 1 211.99 211.8 211.86 212.06 212.36 212.75 213.21 213.74 214.33 214.99 215.71 216.49 - 217.34 218.24 219.19 220.21 221.28 222.41 223.59 224.83 226.12 227.48 228.88 230.34 231.86 233.43 235.05 236.73 - 238.47 240.25 242.1 243.99 245.94 247.95 250 252.12 / - 7 3 2 1 211.9 211.7 211.76 211.95 212.25 212.63 213.09 213.62 214.22 214.88 215.6 216.38 - 217.22 218.12 219.08 220.09 221.17 222.29 223.48 224.72 226.02 227.37 228.77 230.24 231.75 233.32 234.95 236.63 - 238.37 240.16 242 243.9 245.85 247.86 249.92 252.03 / - 7 3 3 1 211.74 211.52 211.56 211.75 212.05 212.43 212.89 213.41 214.01 214.67 215.39 216.17 - 217.01 217.91 218.87 219.89 220.96 222.09 223.27 224.51 225.81 227.17 228.57 230.04 231.56 233.13 234.76 236.44 - 238.18 239.97 241.82 243.72 245.67 247.68 249.75 251.86 / - 7 3 4 1 211.43 211.18 211.2 211.38 211.67 212.04 212.5 213.03 213.62 214.28 215 215.78 - 216.62 217.52 218.48 219.5 220.57 221.7 222.89 224.13 225.43 226.79 228.2 229.67 231.19 232.77 234.4 236.09 - 237.83 239.63 241.48 243.39 245.35 247.36 249.43 251.55 / - 7 3 5 1 210.84 210.53 210.52 210.68 210.95 211.32 211.77 212.3 212.89 213.54 214.26 215.05 - 215.89 216.79 217.75 218.77 219.85 220.99 222.18 223.43 224.73 226.09 227.51 228.99 230.52 232.1 233.74 235.44 - 237.19 238.99 240.85 242.77 244.74 246.77 248.85 250.98 / - 7 3 6 1 209.41 208.79 208.55 208.61 208.82 209.15 209.57 210.07 210.64 211.29 212.01 212.8 - 213.65 214.56 215.53 216.56 217.66 218.81 220.03 221.3 222.63 224.02 225.46 226.97 228.53 230.14 231.82 233.55 - 235.34 237.18 239.08 241.04 243.05 245.12 247.24 249.42 / - 7 3 7 1 204.53 201.6 200.92 200.78 200.87 201.13 201.52 202.02 202.61 203.29 204.06 204.9 - 205.82 206.81 207.87 209.01 210.2 211.47 212.8 214.2 215.66 217.18 218.76 220.4 222.11 223.87 225.7 227.58 - 229.53 231.53 233.59 235.69 237.87 240.09 242.38 244.72 / - 7 3 8 1 189.42 183.07 181.93 181.54 181.54 181.81 182.29 182.93 183.72 184.63 185.66 186.79 - 188.02 189.32 190.73 192.24 193.82 195.47 197.21 198.99 200.87 202.81 204.83 206.91 209.03 211.23 213.5 215.83 - 218.2 220.64 223.14 225.7 228.3 230.96 233.68 236.46 / - 7 3 9 1 156.16 146.2 144.72 144.45 144.71 145.45 146.48 147.76 149.25 150.91 152.75 154.69 - 156.8 159.03 161.33 163.77 166.26 168.88 171.53 174.31 177.4 180.32 183.3 186.29 189.37 192.46 195.64 198.82 - 202.08 205.36 209.24 212.61 216.04 219.5 223 226.54 / - 7 3 10 1 103.43 100.97 101.22 102.51 104.29 106.4 108.76 111.33 114.11 117 120.11 123.27 - 126.64 130.01 133.61 137.17 140.94 144.82 148.62 152.66 156.58 160.77 164.8 169.12 173.25 177.61 181.83 186.29 - 190.72 195.2 199.64 204.31 208.71 213.39 217.81 222.26 / - 7 3 11 1 72.3 74.16 76.79 79.74 82.82 86.01 89.33 92.77 96.33 100.31 104.31 108.37 - 112.59 116.9 121.26 125.87 130.48 135.2 140.01 144.91 149.9 154.98 160.11 165.32 170.39 175.75 181.19 186.7 - 192.28 197.59 203.29 209.06 214.49 220.37 225.88 231.84 / - 7 3 12 1 62.98 66.39 69.69 73.24 76.98 80.88 84.95 89.18 93.56 98.1 102.8 107.6 - 112.53 117.6 122.8 128.13 133.58 139.16 144.86 150.67 156.59 163.58 170.27 177.01 183.64 190.44 197.23 204.02 - 210.88 217.83 224.86 231.97 239.15 246.41 253.75 261.12 / - 7 3 13 1 59.05 63.51 67.54 71.73 76.22 81.07 86.27 91.76 97.52 103.52 109.75 116.19 - 122.84 129.69 136.72 143.94 151.33 158.89 166.62 174.48 182.39 190.38 198.47 206.67 214.99 223.43 231.97 240.63 - 249.69 259.75 269.57 279.55 289.21 299.15 309.09 319.08 / - 7 3 14 1 54.7 60.87 66.88 73.01 79.54 86.51 93.94 101.77 110.03 118.66 127.62 136.88 - 146.42 156.22 166.27 176.56 187.09 197.84 208.82 220.01 231.41 243.03 254.78 266.71 278.72 290.84 303.08 315.46 - 328 340.7 353.57 366.61 379.81 394.02 408.82 423.73 / - 7 3 15 1 52.27 60.51 71.16 82.26 94.01 105.52 117.79 129.97 143.41 155.93 169.37 183.84 - 198.24 213.29 228.74 244.35 259.2 275.44 292.24 309.41 326.95 344.86 363.17 381.82 400.81 420.04 438.31 458.07 - 478.15 498.56 519.31 540.43 561.91 584.73 608.42 632.44 / - 7 3 16 1 52.33 71.49 90.18 108.6 126.99 145.6 165.27 185.29 205.63 228.11 249.13 272.57 - 296.8 319.8 344.4 370.59 396.97 424.3 452.3 480.42 510.11 540.55 570.62 602.51 635.1 668.33 702.21 736.89 - 771.12 808.8 847.24 886.23 925.93 965.64 1006.02 1046.22 / - 7 3 17 1 67.42 97.06 128.04 158.11 188.18 219.74 252.84 286.41 322.2 360.67 399.21 439.75 - 481.95 526.52 572.26 617.31 666.31 717.21 769.62 824.04 879.62 937.06 996.18 1058.05 1119.74 1181.57 1240.1 1294.63 - 1337.63 1385.94 1434.23 1484.45 1536.78 1590.92 1645.49 1698.66 / - 7 3 18 1 93.55 143.13 192.56 244 297.48 353.93 413.99 477.97 546.07 617.75 692.87 772.69 - 856.95 945.78 1038.08 1132.43 1229.31 1317.57 1401.13 1488.22 1576.14 1666.27 1761.2 1856.23 1951.53 2048.33 2145.74 2247.97 - 2346.11 2450.56 2555.95 2664.1 2772.61 2880.24 2990.63 3109.52 / - 7 3 19 1 136.67 214.69 298.82 392.92 495.77 606.64 727.75 859.37 1000.65 1150.99 1301.45 1445.07 - 1590.47 1750.78 1907.19 2070.16 2246.77 2419.64 2595.49 2779.37 2964.44 3157.11 3356.14 3555.86 3761.57 3970 4183.78 4406.84 - 4634.33 4858.57 5095.37 5324.64 5572.34 5823.48 6064.64 6323.06 / - 7 3 20 1 205.3 327.14 471.59 658.49 873.42 1115.86 1364.21 1608.88 1874.6 2151.47 2446.02 2759.41 - 3073.22 3420.2 3767.59 4122.86 4527.7 4918.38 5325.11 5739.76 6176.79 6615.83 7076.76 7531.02 8018.86 8517 9019.51 9524.87 - 10053.61 10604.64 11160.23 11729.74 12326.07 12901.91 13521.97 14157.88 / - 7 4 1 1 213.82 213.62 213.67 213.87 214.17 214.55 215.02 215.55 216.14 216.8 217.52 218.31 - 219.15 220.05 221.01 222.03 223.1 224.23 225.42 226.66 227.96 229.31 230.72 232.19 233.71 235.29 236.92 238.6 - 240.34 242.14 243.99 245.89 247.85 249.86 251.93 254.05 / - 7 4 2 1 213.73 213.52 213.57 213.76 214.06 214.44 214.9 215.43 216.02 216.68 217.41 218.19 - 219.03 219.93 220.89 221.91 222.98 224.11 225.3 226.55 227.85 229.2 230.61 232.08 233.6 235.18 236.81 238.5 - 240.24 242.04 243.89 245.79 247.75 249.77 251.84 253.96 / - 7 4 3 1 213.56 213.33 213.37 213.55 213.85 214.23 214.68 215.21 215.81 216.47 217.19 217.97 - 218.81 219.71 220.67 221.69 222.77 223.9 225.09 226.33 227.64 228.99 230.41 231.87 233.4 234.98 236.61 238.3 - 240.04 241.84 243.7 245.61 247.57 249.59 251.66 253.78 / - 7 4 4 1 213.24 212.97 212.99 213.17 213.45 213.83 214.28 214.81 215.4 216.06 216.78 217.57 - 218.41 219.31 220.27 221.29 222.37 223.5 224.69 225.94 227.24 228.6 230.02 231.49 233.02 234.6 236.24 237.93 - 239.68 241.49 243.35 245.26 247.23 249.25 251.33 253.46 / - 7 4 5 1 212.63 212.3 212.28 212.44 212.72 213.09 213.54 214.06 214.65 215.31 216.03 216.81 - 217.66 218.56 219.52 220.54 221.63 222.76 223.96 225.21 226.52 227.89 229.31 230.79 232.32 233.91 235.56 237.26 - 239.02 240.83 242.7 244.62 246.6 248.63 250.72 252.87 / - 7 4 6 1 211 210.33 210.06 210.11 210.32 210.64 211.05 211.55 212.13 212.78 213.49 214.28 - 215.13 216.05 217.03 218.07 219.17 220.33 221.54 222.82 224.16 225.55 227.01 228.52 230.09 231.71 233.4 235.14 - 236.94 238.79 240.7 242.67 244.69 246.77 248.91 251.1 / - 7 4 7 1 205.77 202.45 201.82 201.68 201.78 202.04 202.44 202.94 203.54 204.24 205.01 205.87 - 206.8 207.81 208.88 210.03 211.24 212.52 213.83 215.24 216.71 218.25 219.86 221.52 223.24 225.03 226.87 228.78 - 230.75 232.77 234.86 237 239.2 241.45 243.77 246.14 / - 7 4 8 1 190.11 183.3 182.15 181.76 181.77 182.05 182.54 183.2 184 184.93 185.98 187.14 - 188.4 189.73 191.17 192.7 194.31 196.01 197.75 199.59 201.5 203.49 205.54 207.63 209.82 212.07 214.37 216.72 - 219.14 221.63 224.16 226.76 229.41 232.11 234.87 237.68 / - 7 4 9 1 156.33 145.86 144.46 144.16 144.54 145.31 146.38 147.68 149.21 150.9 152.75 154.76 - 156.89 159.15 161.49 163.97 166.5 169.16 171.86 174.66 177.53 180.74 183.76 186.8 189.93 193.08 196.31 199.54 - 202.86 206.19 209.58 213.56 217.05 220.56 224.12 227.71 / - 7 4 10 1 103.53 101.11 101.38 102.67 104.47 106.61 109.04 111.63 114.4 117.37 120.43 123.7 - 127.1 130.51 134.13 137.73 141.54 145.3 149.29 153.18 157.33 161.34 165.63 169.74 174.17 178.38 182.83 187.33 - 191.68 196.2 200.76 205.52 210.06 214.56 219.35 223.86 / - 7 4 11 1 72.46 74.35 76.98 79.94 83.06 86.3 89.65 93.12 96.72 100.68 104.76 108.89 - 113.11 117.44 121.91 126.45 131.1 135.84 140.68 145.62 150.64 155.75 160.94 166.18 171.5 176.91 182.41 187.97 - 193.29 198.97 204.72 210.17 216.04 221.98 227.55 233.56 / - 7 4 12 1 63.07 66.54 69.87 73.44 77.2 81.14 85.24 89.51 93.93 98.52 103.25 108.1 - 113.07 118.18 123.43 128.8 134.31 139.93 145.68 151.53 157.5 164.39 171.2 177.95 184.63 191.52 198.34 205.37 - 212.3 219.31 226.4 233.58 240.83 248.16 255.58 263.01 / - 7 4 13 1 59 63.61 67.71 71.95 76.47 81.35 86.58 92.11 97.91 103.95 110.23 116.72 - 123.41 130.3 137.39 144.65 152.09 159.7 167.48 175.39 183.35 191.39 199.53 207.79 216.17 224.66 233.26 241.98 - 250.81 260.95 270.88 280.79 290.68 300.89 310.78 320.81 / - 7 4 14 1 54.61 60.88 66.98 73.19 79.77 86.79 94.26 102.14 110.43 119.11 128.12 137.43 - 147.01 156.86 166.96 177.3 187.88 198.68 209.72 220.96 232.42 244.09 255.9 267.88 279.96 292.13 304.44 316.89 - 329.5 342.27 355.21 368.31 381.59 395.04 409.95 425.05 / - 7 4 15 1 52.2 60.53 71.24 82.4 94.21 105.77 117.68 130.3 143.78 156.36 169.84 184.36 - 198.87 213.92 229.43 244.38 259.88 276.28 293.13 310.35 327.93 345.89 364.24 382.96 402.03 421.35 439.7 459.54 - 479.69 500.18 521.01 542.21 563.77 586.21 609.53 633.78 / - 7 4 16 1 52.21 71.51 90.23 108.71 127.15 145.8 165.5 185.55 205.92 228.44 249.49 273.01 - 297.29 320.34 344.99 371.23 397.83 425.05 453.19 481.22 510.93 541.39 571.48 603.37 635.94 669.25 703.18 737.91 - 772.31 808.91 847.41 886.58 926.56 966.63 1007.03 1047.49 / - 7 4 17 1 67.34 97.06 128.05 158.19 188.31 219.89 253 286.58 322.37 360.96 399.39 440.97 - 482.16 526.72 572.46 617.51 666.44 717.24 769.56 824.01 880.17 937.06 996.15 1057.73 1119.87 1181.64 1240.98 1296.12 - 1341.15 1391.08 1441.09 1492.95 1546.94 1602.36 1659.82 1714.01 / - 7 4 18 1 93.41 143 192.49 244.07 297.6 354.09 414.23 478.01 545.99 617.62 692.59 772.23 - 856.25 944.87 1037.14 1131.59 1228.27 1317.4 1401.93 1490.41 1579.45 1669.63 1765.38 1860.72 1957.85 2055.64 2154.51 2258.98 - 2356.79 2462.47 2569.23 2678.65 2788.43 2899.33 3011.41 3131.72 / - 7 4 19 1 136.47 214.51 298.37 392.92 495.84 606.55 727.47 858.8 999.37 1149.84 1300.75 1444.98 - 1591.04 1752.03 1909.22 2073.05 2251.24 2426.85 2606.77 2791.88 2978.42 3174.98 3376.62 3578.99 3783.15 3998.36 4214.64 4434.88 - 4668.76 4894.05 5136.4 5368.9 5615.38 5872.71 6117.2 6378.58 / - 7 4 20 1 205.09 327.03 469.02 655.16 868.75 1109.31 1359.19 1605.24 1876.16 2154.25 2450.2 2765.12 - 3080.62 3429.62 3778.71 4136.2 4510.84 4940.33 5346.56 5763.68 6208.62 6649.8 7116.76 7582.8 8076.56 8581.09 9089.56 9600.86 - 10135.56 10693.11 11255.84 11832.58 12436.24 13019.47 13646.95 14290.6 / - 7 5 1 1 215.71 215.48 215.51 215.7 215.99 216.37 216.83 217.36 217.96 218.62 219.34 220.12 - 220.96 221.87 222.83 223.84 224.92 226.05 227.24 228.49 229.79 231.15 232.57 234.04 235.56 237.14 238.78 240.47 - 242.22 244.02 245.87 247.78 249.75 251.77 253.85 255.98 / - 7 5 2 1 215.62 215.37 215.4 215.58 215.88 216.26 216.71 217.24 217.83 218.49 219.22 220 - 220.84 221.74 222.7 223.72 224.8 225.93 227.12 228.37 229.67 231.03 232.45 233.92 235.45 237.03 238.67 240.36 - 242.11 243.91 245.77 247.68 249.65 251.67 253.75 255.88 / - 7 5 3 1 215.44 215.17 215.19 215.37 215.66 216.03 216.49 217.02 217.61 218.27 218.99 219.77 - 220.62 221.52 222.48 223.5 224.58 225.71 226.9 228.15 229.46 230.82 232.23 233.71 235.23 236.82 238.46 240.15 - 241.9 243.71 245.57 247.49 249.46 251.48 253.56 255.7 / - 7 5 4 1 215.1 214.8 214.8 214.97 215.25 215.62 216.08 216.6 217.19 217.85 218.57 219.35 - 220.2 221.1 222.06 223.08 224.16 225.3 226.49 227.74 229.05 230.41 231.83 233.31 234.84 236.43 238.07 239.77 - 241.53 243.34 245.2 247.12 249.1 251.13 253.22 255.36 / - 7 5 5 1 214.45 214.09 214.07 214.22 214.49 214.86 215.3 215.83 216.42 217.07 217.79 218.58 - 219.42 220.33 221.29 222.32 223.4 224.54 225.74 226.99 228.3 229.67 231.1 232.58 234.12 235.72 237.37 239.08 - 240.84 242.66 244.53 246.46 248.45 250.49 252.59 254.74 / - 7 5 6 1 212.62 211.75 211.47 211.51 211.7 212.02 212.43 212.93 213.51 214.16 214.88 215.67 - 216.53 217.45 218.43 219.48 220.58 221.75 222.98 224.27 225.62 227.02 228.49 230.01 231.59 233.24 234.93 236.69 - 238.5 240.37 242.3 244.28 246.33 248.42 250.58 252.78 / - 7 5 7 1 206.99 203.42 202.71 202.55 202.63 202.89 203.28 203.79 204.39 205.09 205.87 206.73 - 207.67 208.69 209.78 210.94 212.17 213.46 214.83 216.26 217.75 219.31 220.93 222.61 224.36 226.17 228.04 229.93 - 231.92 233.97 236.08 238.24 240.47 242.75 245.09 247.49 / - 7 5 8 1 190.76 183.46 182.28 181.89 181.9 182.19 182.7 183.37 184.2 185.15 186.23 187.42 - 188.7 190.05 191.53 193.09 194.74 196.47 198.24 200.12 202.08 204.1 206.19 208.32 210.55 212.83 215.18 217.57 - 220.03 222.56 225.15 227.77 230.46 233.22 236.02 238.87 / - 7 5 9 1 156.05 145.54 144.2 143.95 144.36 145.17 146.19 147.53 149.07 150.79 152.67 154.69 - 156.84 159.27 161.68 164.18 166.75 169.45 172.23 175.04 177.95 180.89 184.26 187.33 190.49 193.67 196.95 200.24 - 203.61 206.99 210.44 213.91 218.03 221.59 225.22 228.86 / - 7 5 10 1 103.64 101.19 101.55 102.86 104.69 106.86 109.27 111.94 114.73 117.74 120.83 124.14 - 127.47 131.01 134.55 138.3 142.01 145.95 149.97 153.9 158.09 162.13 166.47 170.62 175.09 179.34 183.83 188.18 - 192.77 197.34 201.95 206.46 211.28 215.92 220.83 225.45 / - 7 5 11 1 72.63 74.56 77.17 80.15 83.3 86.58 89.97 93.48 97.12 101 105.21 109.37 - 113.66 118.06 122.56 127.15 131.84 136.62 141.51 146.49 151.56 156.71 161.95 167.24 172.6 178.07 183.62 188.93 - 194.6 200.34 206.15 211.65 217.58 223.17 229.21 235.29 / - 7 5 12 1 63.17 66.7 70.06 73.65 77.44 81.4 85.54 89.84 94.31 98.94 103.71 108.6 - 113.62 118.77 124.06 129.48 135.03 140.7 146.49 152.4 158.41 165.02 172.07 178.92 185.79 192.59 199.62 206.44 - 213.42 220.78 227.94 235.18 242.5 249.91 257.4 264.53 / - 7 5 13 1 58.97 63.7 67.89 72.17 76.73 81.64 86.89 92.46 98.3 104.39 110.7 117.24 - 123.98 130.92 138.05 145.36 152.85 160.51 168.34 176.29 184.3 192.39 200.59 208.91 217.33 225.88 234.54 243.32 - 252.2 261.81 272.17 282.24 292.21 302.43 312.46 322.53 / - 7 5 14 1 54.56 60.9 67.08 73.36 80 87.07 94.59 102.51 110.84 119.56 128.61 137.97 - 147.6 157.5 167.64 178.03 188.66 199.52 210.6 221.91 233.42 245.14 257 269.04 281.18 293.42 305.79 318.31 - 330.98 343.82 356.83 370.01 383.35 396.88 411.47 426.23 / - 7 5 15 1 52.16 60.57 71.32 82.53 94.41 106.02 118.07 130.63 144.15 157.5 170.32 184.88 - 199.46 214.54 230.11 246 261.04 277.12 294.02 311.28 328.91 346.91 365.3 384.08 403.22 421.41 441.06 460.98 - 481.22 501.78 522.69 543.95 565.59 587.62 611.06 634.91 / - 7 5 16 1 52.19 71.52 90.28 108.83 127.3 146 165.73 185.81 206.2 228.76 249.85 273.43 - 297.76 322.41 345.58 371.85 398.58 425.77 453.94 482 511.72 542.19 572.29 604.19 636.75 670.07 704.11 738.87 - 773.5 809.4 848 887.32 927.12 967.17 1007.86 1048.28 / - 7 5 17 1 67.26 97 128.2 158.25 188.93 220.21 253.16 287.11 323.39 361.1 399.54 441.1 - 482.32 526.89 572.63 617.66 666.52 717.21 769.44 823.8 880.04 936.96 996.03 1057.25 1119.53 1181.55 1241.28 1297.78 - 1344.84 1396.26 1448.03 1502.53 1557.31 1613.64 1673.71 1729.75 / - 7 5 18 1 93.27 143.04 192.42 244.13 297.71 354.23 414.35 478.05 545.9 617.47 692.27 771.68 - 855.44 943.88 1036.03 1130.6 1226.41 1317.05 1402.22 1492.41 1581.78 1673.92 1770.63 1867.03 1965.33 2064.39 2162.97 2270.3 - 2369.41 2476.42 2584.58 2695.43 2806.7 2919.11 3032.9 3155 / - 7 5 19 1 136.27 214.33 297.64 392.19 494.81 606.48 726 856.75 998.4 1148.63 1299.92 1444.81 - 1591.49 1753.19 1911.19 2075.92 2247.92 2431.9 2614.75 2802.42 2992.05 3190.95 3392.53 3601.55 3808.73 4027 4246.18 4469.52 - 4708.96 4934.82 5179.81 5415.54 5664.87 5924.81 6172.79 6437.07 / - 7 5 20 1 204.87 326.93 465.7 651.82 867.76 1108.44 1353.5 1605.68 1865.71 2157.11 2454.53 2751.54 - 3088.31 3418.09 3790.43 4150.11 4527.1 4955.62 5367.86 5788.05 6234.71 6684.85 7160.47 7633.21 8133.46 8637.16 9159.98 9668.4 - 10218.94 10773.14 11353.72 11938.65 12536.43 13141.43 13776.94 14428.75 / - 7 6 1 1 217.83 217.46 217.44 217.6 217.87 218.24 218.69 219.21 219.8 220.46 221.17 221.96 - 222.8 223.7 224.66 225.68 226.75 227.89 229.08 230.33 231.63 232.99 234.41 235.89 237.42 239 240.64 242.34 - 244.09 245.9 247.76 249.68 251.65 253.68 255.76 257.9 / - 7 6 2 1 217.73 217.34 217.32 217.48 217.75 218.12 218.56 219.08 219.67 220.33 221.05 221.83 - 222.67 223.57 224.53 225.55 226.63 227.76 228.96 230.21 231.51 232.87 234.29 235.77 237.3 238.88 240.53 242.22 - 243.98 245.79 247.65 249.57 251.54 253.57 255.66 257.8 / - 7 6 3 1 217.54 217.14 217.11 217.25 217.52 217.89 218.33 218.85 219.44 220.1 220.82 221.6 - 222.44 223.34 224.3 225.32 226.4 227.53 228.73 229.98 231.28 232.65 234.07 235.54 237.08 238.67 240.31 242.01 - 243.77 245.58 247.44 249.37 251.34 253.38 255.47 257.61 / - 7 6 4 1 217.2 216.75 216.7 216.84 217.1 217.46 217.91 218.43 219.01 219.67 220.38 221.16 - 222.01 222.91 223.87 224.89 225.97 227.11 228.3 229.56 230.87 232.23 233.66 235.13 236.67 238.26 239.91 241.62 - 243.38 245.19 247.06 248.99 250.97 253.01 255.11 257.26 / - 7 6 5 1 216.53 216.03 215.94 216.06 216.31 216.65 217.09 217.6 218.18 218.83 219.55 220.33 - 221.17 222.08 223.04 224.06 225.15 226.29 227.49 228.74 230.06 231.43 232.86 234.35 235.89 237.49 239.15 240.86 - 242.63 244.46 246.34 248.28 250.27 252.32 254.43 256.59 / - 7 6 6 1 214.47 213.37 212.99 212.99 213.15 213.45 213.85 214.34 214.91 215.56 216.28 217.07 - 217.93 218.85 219.84 220.89 222 223.17 224.41 225.7 227.05 228.47 229.94 231.47 233.06 234.71 236.41 238.18 - 240 241.88 243.82 245.82 247.87 249.98 252.15 254.37 / - 7 6 7 1 208.49 204.32 203.58 203.39 203.46 203.71 204.1 204.61 205.22 205.92 206.71 207.59 - 208.54 209.57 210.67 211.85 213.05 214.35 215.73 217.18 218.69 220.27 221.91 223.62 225.38 227.21 229.11 231.06 - 233.07 235.15 237.28 239.47 241.73 244.04 246.38 248.81 / - 7 6 8 1 191.69 183.57 182.42 182 182 182.3 182.81 183.5 184.34 185.31 186.41 187.62 - 188.93 190.32 191.82 193.42 195.1 196.86 198.68 200.59 202.59 204.65 206.76 208.96 211.22 213.55 215.92 218.37 - 220.89 223.46 226.07 228.75 231.49 234.29 237.13 240.04 / - 7 6 9 1 155.79 145.23 143.93 143.73 144.18 144.96 146.09 147.46 149.03 150.78 152.71 154.76 - 156.95 159.26 161.85 164.4 167.03 169.75 172.57 175.42 178.39 181.38 184.46 187.92 191.12 194.34 197.64 200.95 - 204.36 207.79 211.3 214.82 218.4 222.03 226.3 230.02 / - 7 6 10 1 103.66 101.35 101.68 103.05 104.87 107.11 109.57 112.22 115.1 118.07 121.26 124.51 - 127.96 131.53 135.1 138.89 142.63 146.59 150.49 154.62 158.65 162.93 167.31 171.5 175.74 180.31 184.84 189.23 - 193.87 198.48 203 207.7 212.55 217.18 222.17 226.94 / - 7 6 11 1 72.8 74.77 77.38 80.38 83.58 86.91 90.35 93.91 97.58 101.38 105.68 109.89 - 114.24 118.64 123.18 127.86 132.59 137.42 142.34 147.36 152.48 157.68 162.96 168.3 173.71 179.23 184.55 190.19 - 195.92 201.71 207.22 213.14 219.13 224.77 230.87 236.6 / - 7 6 12 1 63.28 66.88 70.28 73.9 77.73 81.73 85.91 90.25 94.74 99.4 104.21 109.13 - 114.19 119.38 124.71 130.17 135.76 141.47 147.31 153.25 159.31 165.81 172.94 179.88 186.76 193.73 200.72 207.78 - 214.82 221.94 229.15 236.44 243.81 251.26 258.8 266.41 / - 7 6 13 1 58.95 63.82 68.08 72.43 77.03 81.96 87.26 92.86 98.73 104.85 111.2 117.77 - 124.56 131.54 138.71 146.06 153.6 161.3 169.18 177.18 185.24 193.39 201.64 210.01 218.49 227.09 235.81 244.64 - 253.59 262.65 273.08 283.29 293.71 303.95 314.14 324.27 / - 7 6 14 1 54.53 60.94 67.21 73.56 80.26 87.37 94.93 102.9 111.26 120.01 129.1 138.5 - 148.18 158.12 168.32 178.75 189.43 200.33 211.47 222.83 234.41 246.17 258.08 270.18 282.38 294.69 307.12 319.71 - 332.45 345.35 358.43 371.68 385.1 398.7 412.48 427.34 / - 7 6 15 1 52.12 60.56 71.43 82.91 94.62 106.27 118.71 130.96 144.56 157.41 170.78 185.38 - 200.01 215.14 230.77 246.72 261.81 277.94 294.89 312.19 329.87 347.91 366.34 385.16 404.36 422.64 442.37 462.38 - 482.7 503.34 524.32 545.66 567.37 589.47 611.96 635.92 / - 7 6 16 1 52.17 71.58 90.34 108.94 127.45 146.74 165.99 186.07 206.93 229.07 250.2 273.82 - 298.21 322.51 346.14 372.44 399.23 426.46 454.66 482.74 512.48 542.95 573.2 604.96 637.5 670.8 704.94 739.78 - 774.48 810.34 847.95 887.34 927.34 967.71 1008.28 1048.93 / - 7 6 17 1 67.19 96.99 128.2 158.32 189.05 220.42 253.32 287.97 323.78 361.23 399.67 441.21 - 482.44 527.02 572.74 619.06 666.53 717.11 769.4 823.46 879.72 936.7 995.78 1056.08 1119.13 1181.49 1241.98 1297.25 - 1348.12 1401.45 1455.04 1511.27 1567.81 1626.08 1687.82 1746.85 / - 7 6 18 1 93.12 143.07 192.35 244.25 297.82 354.5 414.47 478.09 545.8 617.27 692.02 771.1 - 854.6 942.79 1034.76 1129.44 1225.55 1314.94 1401.55 1491.99 1582.81 1675.95 1773.54 1870.85 1970.38 2070.51 2171.53 2278.42 - 2380.61 2488.89 2598.31 2709.05 2823.49 2937.34 3052.75 3176.15 / - 7 6 19 1 136.06 214.14 297.24 392.14 494.81 605.04 725.69 855.87 997.38 1147.34 1300.62 1444.47 - 1591.83 1746.2 1913.1 2078.78 2251.72 2436.89 2623.63 2810.05 3003.91 3204.35 3410.2 3622.57 3833.26 4054.95 4277.42 4504.23 - 4746.93 4976.38 5221 5463.84 5716.68 5975.25 6231.39 6499.01 / - 7 6 20 1 204.65 326.84 462.19 648.84 862.5 1101.81 1352.89 1602.52 1867.29 2145.69 2442.02 2757.81 - 3096.32 3428.04 3802.72 4165.46 4544.12 4979 5390.19 5813.24 6258.73 6715.74 7194.22 7678.1 8180.8 8699.24 9220.24 9745.31 - 10303 10865.01 11442.95 12047.12 12654 13263.15 13911.8 14572.51 / - 7 7 1 1 219.95 219.44 219.36 219.49 219.75 220.1 220.54 221.06 221.64 222.29 223.01 223.79 - 224.63 225.53 226.49 227.51 228.58 229.72 230.91 232.16 233.47 234.83 236.25 237.73 239.26 240.85 242.5 244.2 - 245.96 247.77 249.64 251.56 253.54 255.58 257.67 259.82 / - 7 7 2 1 219.85 219.32 219.25 219.37 219.62 219.98 220.41 220.93 221.51 222.16 222.88 223.66 - 224.5 225.4 226.36 227.38 228.45 229.59 230.78 232.03 233.34 234.71 236.13 237.61 239.14 240.73 242.38 244.08 - 245.84 247.65 249.52 251.45 253.43 255.47 257.56 259.71 / - 7 7 3 1 219.65 219.11 219.02 219.14 219.39 219.74 220.18 220.69 221.27 221.92 222.64 223.42 - 224.26 225.16 226.12 227.14 228.22 229.35 230.55 231.8 233.11 234.47 235.9 237.38 238.91 240.5 242.15 243.86 - 245.62 247.44 249.31 251.24 253.22 255.26 257.36 259.51 / - 7 7 4 1 219.3 218.72 218.61 218.72 218.96 219.3 219.74 220.25 220.83 221.48 222.19 222.97 - 223.81 224.71 225.67 226.69 227.77 228.91 230.11 231.36 232.67 234.04 235.47 236.95 238.49 240.09 241.74 243.45 - 245.21 247.04 248.91 250.85 252.84 254.88 256.99 259.14 / - 7 7 5 1 218.59 217.93 217.78 217.86 218.08 218.41 218.84 219.34 219.92 220.56 221.28 222.05 - 222.89 223.79 224.76 225.78 226.86 228.01 229.21 230.47 231.78 233.16 234.59 236.08 237.63 239.24 240.9 242.62 - 244.39 246.23 248.11 250.06 252.06 254.12 256.23 258.41 / - 7 7 6 1 216.3 214.84 214.43 214.38 214.51 214.79 215.17 215.65 216.22 216.86 217.58 218.37 - 219.23 220.15 221.14 222.19 223.31 224.49 225.73 227.03 228.39 229.82 231.3 232.85 234.45 236.11 237.84 239.62 - 241.46 243.36 245.31 247.33 249.4 251.53 253.72 255.96 / - 7 7 7 1 209.96 205.32 204.44 204.2 204.23 204.46 204.84 205.34 205.94 206.65 207.44 208.32 - 209.28 210.32 211.43 212.61 213.87 215.2 216.6 218.07 219.6 221.2 222.86 224.59 226.38 228.22 230.12 232.1 - 234.13 236.23 238.39 240.61 242.89 245.23 247.63 250.09 / - 7 7 8 1 191.81 183.69 182.48 182.03 182 182.3 182.83 183.52 184.38 185.37 186.49 187.73 - 189.07 190.52 192.02 193.65 195.37 197.18 199.03 200.98 203.02 205.13 207.3 209.52 211.83 214.21 216.62 219.12 - 221.68 224.3 226.96 229.69 232.47 235.32 238.21 241.16 / - 7 7 9 1 156.16 144.92 143.6 143.53 143.95 144.82 145.98 147.39 148.99 150.78 152.73 154.82 - 157.06 159.4 161.87 164.44 167.31 170.08 172.92 175.84 178.83 181.91 185 188.2 191.4 195.04 198.4 201.77 - 205.21 208.7 212.19 215.77 219.37 223.05 226.75 231.16 / - 7 7 10 1 103.78 101.5 101.85 103.21 105.12 107.37 109.88 112.57 115.41 118.47 121.69 124.96 - 128.44 131.94 135.65 139.33 143.24 147.24 151.17 155.34 159.4 163.73 167.91 172.38 176.66 181.27 185.66 190.29 - 194.76 199.49 204.19 208.95 213.58 218.53 223.24 228.29 / - 7 7 11 1 72.97 74.98 77.62 80.67 83.91 87.28 90.75 94.34 98.04 101.87 106.17 110.45 - 114.79 119.28 123.85 128.47 133.22 138.2 143.17 148.24 153.39 158.64 163.76 169.16 174.6 180.12 185.75 191.46 - 197.23 202.75 208.65 214.62 220.27 226.37 232.54 238.32 / - 7 7 12 1 63.39 67.08 70.53 74.18 78.05 82.08 86.29 90.66 95.19 99.89 104.72 109.68 - 114.77 120 125.36 130.86 136.49 142.25 148.12 154.11 160.21 166.42 173.61 180.83 187.73 194.86 201.83 208.92 - 216.21 223.4 230.67 238.03 245.47 253 260.61 268.3 / - 7 7 13 1 58.94 63.94 68.29 72.7 77.35 82.31 87.63 93.26 99.17 105.32 111.71 118.32 - 125.14 132.15 139.37 146.76 154.34 162.09 170.02 178.07 186.18 194.37 202.68 211.1 219.63 228.29 237.06 245.96 - 254.96 264.08 273.95 284.62 294.96 305.21 315.72 325.87 / - 7 7 14 1 54.52 61 67.36 73.78 80.53 87.69 95.28 103.29 111.68 120.47 129.6 139.03 - 148.75 158.74 168.98 179.46 190.18 201.13 212.32 223.73 235.36 247.18 259.14 271.3 283.56 295.93 308.43 321.08 - 333.89 346.87 360.01 373.33 386.83 400.5 414.35 428.38 / - 7 7 15 1 52.09 60.63 71.54 83.17 94.83 106.52 119.3 131.28 144.91 158.44 171.23 185.87 - 200.54 215.71 231.4 247.41 262.31 278.74 295.73 313.08 330.8 348.88 367.35 386.2 405.45 423.81 443.63 463.73 - 484.12 504.84 525.9 547.31 569.09 591.26 613.82 636.79 / - 7 7 16 1 52.15 71.59 90.62 109.05 127.66 147.13 166.22 186.31 207.8 229.36 251.13 274.18 - 298.64 323.03 346.65 373 399.83 427.11 455.34 483.44 513.19 543.67 573.94 605.68 638.2 671.43 705.6 740.56 - 775.8 811.2 848.27 887.2 927.35 968 1008.84 1049.95 / - 7 7 17 1 67.1 96.91 128.2 158.38 189.15 220.56 253.47 288.12 324.07 361.34 399.77 441.29 - 482.51 527.1 572.82 618.11 666.5 716.94 769.1 823.02 879.18 936.25 995.36 1055.65 1117.88 1180.72 1242.14 1298.07 - 1351.77 1406.83 1462.08 1520.09 1579.38 1638.62 1702.05 1763.38 / - 7 7 18 1 92.97 142.92 192.24 244.27 298.01 354.62 414.59 478.27 545.69 617.05 691.63 770.47 - 853.69 941.62 1033.34 1128.09 1224.51 1315.38 1402.39 1493.66 1585.68 1680.05 1778.74 1877.2 1978.02 2079.51 2181.96 2290.16 - 2394 2503.74 2614.65 2726.98 2843.09 2958.6 3075.79 3200.67 / - 7 7 19 1 135.85 213.95 296.74 391.23 493.69 604.96 724.22 853.73 996.35 1145.98 1299.6 1439.54 - 1593.03 1747.1 1914.89 2081.55 2255.54 2441.81 2629.82 2817.5 3013.47 3213.46 3423.6 3639.96 3854.77 4078.79 4306.96 4537.57 - 4777.99 5017.53 5266.21 5512.88 5769.53 6031.9 6291.94 6563.38 / - 7 7 20 1 204.43 326.77 458.53 645.6 857.77 1094.52 1345.07 1600.01 1868.89 2148.7 2446.66 2764.34 - 3104.69 3438.52 3815.63 4181.24 4562.02 4959.99 5413.69 5839.79 6288.24 6744.67 7228.48 7718.56 8231.7 8750.53 9287.31 9820.88 - 10376.36 10957.04 11543.93 12157.43 12774.03 13392.86 14051.07 14721.38 / - 7 8 1 1 222.06 221.42 221.29 221.39 221.62 221.97 222.4 222.9 223.48 224.13 224.84 225.62 - 226.45 227.35 228.31 229.33 230.41 231.54 232.74 233.99 235.3 236.66 238.09 239.57 241.1 242.7 244.35 246.05 - 247.82 249.63 251.51 253.44 255.43 257.47 259.57 261.72 / - 7 8 2 1 221.96 221.3 221.17 221.26 221.5 221.84 222.26 222.77 223.35 223.99 224.71 225.48 - 226.32 227.22 228.18 229.2 230.27 231.41 232.6 233.86 235.17 236.53 237.96 239.44 240.98 242.57 244.22 245.93 - 247.69 249.51 251.39 253.32 255.31 257.35 259.45 261.61 / - 7 8 3 1 221.76 221.09 220.94 221.03 221.26 221.59 222.02 222.52 223.1 223.75 224.46 225.23 - 226.07 226.97 227.93 228.95 230.03 231.16 232.36 233.61 234.92 236.29 237.72 239.2 240.74 242.34 243.99 245.7 - 247.46 249.29 251.16 253.1 255.09 257.14 259.24 261.4 / - 7 8 4 1 221.39 220.68 220.51 220.59 220.81 221.14 221.56 222.07 222.64 223.29 224 224.77 - 225.61 226.51 227.47 228.49 229.57 230.71 231.9 233.16 234.47 235.84 237.27 238.76 240.3 241.9 243.56 245.27 - 247.04 248.87 250.75 252.69 254.69 256.74 258.85 261.02 / - 7 8 5 1 220.63 219.8 219.57 219.61 219.8 220.12 220.52 221.02 221.58 222.22 222.93 223.7 - 224.54 225.44 226.4 227.43 228.51 229.65 230.86 232.12 233.44 234.82 236.26 237.75 239.3 240.92 242.58 244.31 - 246.09 247.93 249.83 251.78 253.79 255.86 257.99 260.17 / - 7 8 6 1 218.09 216.35 215.85 215.66 215.78 216.05 216.43 216.91 217.47 218.12 218.84 219.63 - 220.49 221.42 222.42 223.48 224.6 225.79 227.04 228.36 229.73 231.17 232.66 234.18 235.79 237.47 239.21 241.01 - 242.86 244.77 246.74 248.77 250.85 253 255.2 257.46 / - 7 8 7 1 211.38 206.06 205.14 204.86 204.88 205.09 205.47 205.97 206.58 207.29 208.09 208.98 - 209.96 211.01 212.14 213.35 214.62 215.97 217.34 218.83 220.38 222 223.69 225.45 227.26 229.14 231.08 233.09 - 235.16 237.29 239.48 241.73 244.04 246.38 248.81 251.3 / - 7 8 8 1 192.66 183.72 182.38 181.91 181.9 182.2 182.73 183.45 184.33 185.33 186.47 187.73 - 189.11 190.58 192.12 193.79 195.55 197.39 199.31 201.28 203.36 205.52 207.74 210 212.36 214.78 217.27 219.79 - 222.4 225.07 227.78 230.56 233.4 236.3 239.24 242.24 / - 7 8 9 1 156.01 144.54 143.39 143.34 143.78 144.67 145.86 147.29 148.93 150.75 152.74 154.89 - 157.15 159.54 162.04 164.66 167.37 170.39 173.27 176.26 179.28 182.4 185.57 188.79 192.05 195.4 199.17 202.63 - 206.09 209.64 213.19 216.82 220.45 224.15 227.87 231.67 / - 7 8 10 1 103.91 101.6 102.03 103.45 105.39 107.65 110.16 112.91 115.78 118.87 122.04 125.41 - 128.83 132.45 136.19 139.91 143.85 147.73 151.85 155.88 160.16 164.53 168.75 173.26 177.59 182.24 186.67 191.34 - 195.86 200.65 205.4 210.04 214.89 219.89 224.66 229.76 / - 7 8 11 1 73.13 75.22 77.9 80.98 84.25 87.65 91.15 94.77 98.5 102.36 106.61 110.94 - 115.33 119.86 124.45 129.17 133.97 138.86 143.86 148.95 154.13 159.41 164.77 170.21 175.71 181.28 186.96 192.72 - 198.23 204.12 210.07 216.11 221.82 227.98 233.77 240.06 / - 7 8 12 1 63.51 67.29 70.8 74.49 78.37 82.44 86.67 91.07 95.64 100.37 105.24 110.23 - 115.36 120.62 126.03 131.56 137.23 143.02 148.94 154.97 161.12 167.37 174.44 181.6 188.72 195.87 202.93 210.24 - 217.31 224.54 232.19 239.62 247.13 254.73 262.42 269.75 / - 7 8 13 1 58.94 64.08 68.53 72.99 77.67 82.66 88 93.66 99.6 105.79 112.22 118.87 - 125.72 132.78 140.03 147.47 155.08 162.88 170.85 178.94 187.1 195.35 203.7 212.18 220.77 229.48 238.31 247.26 - 256.32 265.5 274.79 285.53 296.03 306.51 316.96 327.37 / - 7 8 14 1 54.52 61.07 67.53 74.02 80.81 88 95.63 103.68 112.1 120.92 130.09 139.56 - 149.32 159.35 169.63 180.15 190.92 201.92 213.15 224.6 236.29 248.15 260.18 272.39 284.72 297.16 309.72 322.44 - 335.32 348.36 361.57 374.96 388.53 402.27 416.2 430.3 / - 7 8 15 1 52.07 60.71 71.67 83.35 95.04 106.77 119.58 131.6 145.25 158.82 171.66 186.34 - 201.06 216.27 232 248.07 263.35 279.52 296.55 313.94 331.69 349.81 368.31 387.2 406.49 424.91 444.82 465.01 - 485.49 506.28 527.42 548.9 570.75 592.99 615.61 638.64 / - 7 8 16 1 52.13 71.6 90.67 109.14 127.94 147.34 166.42 186.54 207.52 229.62 251.12 274.51 - 299 324.11 347.12 373.51 400.38 427.7 455.97 484.1 513.85 544.33 575.21 606.34 638.83 672.01 706.1 741.13 - 775.98 811.91 849.01 886.85 927.11 968 1008.65 1050.4 / - 7 8 17 1 67.01 96.83 128.19 158.67 189.26 220.7 253.62 288.26 324.19 361.44 399.84 441.34 - 482.53 527.13 572.84 618.54 666.42 716.71 768.73 822.48 878.49 935.56 994.75 1055.07 1116.29 1179.52 1241.91 1299.24 - 1354.73 1411.63 1469.09 1528.94 1590.09 1651.33 1717.27 1779.41 / - 7 8 18 1 92.81 142.94 192.16 244.28 298.09 354.71 414.72 478.27 545.56 616.79 691.2 769.8 - 852.74 940.37 1031.81 1126.48 1223.24 1315.98 1402.6 1495.17 1588.59 1684.2 1783.16 1883.8 1985.13 2088.9 2192.82 2301.28 - 2407.94 2519.31 2631.8 2745.81 2863.69 2980.98 3100.02 3226.46 / - 7 8 19 1 135.64 213.77 296.23 390.27 493.69 603.44 723.78 853.08 991.99 1144.54 1298.2 1438.81 - 1593.5 1747.87 1916.58 2084.2 2259.25 2438.11 2636.15 2825.03 3024.23 3223.89 3434.96 3649.58 3871.19 4099.34 4332.13 4567.35 - 4812.2 5056.41 5309.58 5557.08 5821.99 6088.47 6348.28 6629 / - 7 8 20 1 204.2 326.73 453.02 642.43 852.54 1093.62 1344.38 1594.89 1864.32 2151.85 2451.55 2771.18 - 3090.89 3449.61 3798.53 4198.69 4580.91 4981.7 5438.54 5867.85 6319.49 6775.37 7264.54 7766.03 8270.33 8803.9 9349.83 9883.38 - 10457.32 11036.98 11644.43 12256.95 12895.19 13524.65 14178.93 14874.77 / - 7 9 1 1 224.17 223.4 223.22 223.28 223.5 223.83 224.25 224.74 225.32 225.96 226.67 227.44 - 228.28 229.17 230.13 231.15 232.23 233.36 234.56 235.81 237.12 238.49 239.91 241.4 242.94 244.53 246.19 247.9 - 249.66 251.49 253.37 255.3 257.3 259.35 261.45 263.61 / - 7 9 2 1 224.06 223.28 223.09 223.15 223.37 223.69 224.11 224.61 225.18 225.82 226.53 227.3 - 228.14 229.03 229.99 231.01 232.09 233.22 234.42 235.67 236.98 238.35 239.78 241.26 242.8 244.4 246.06 247.77 - 249.54 251.36 253.24 255.18 257.17 259.22 261.33 263.49 / - 7 9 3 1 223.86 223.05 222.85 222.91 223.12 223.44 223.86 224.35 224.92 225.57 226.27 227.04 - 227.88 228.78 229.73 230.75 231.83 232.97 234.16 235.42 236.73 238.1 239.53 241.01 242.56 244.16 245.81 247.53 - 249.3 251.12 253.01 254.95 256.95 259 261.11 263.28 / - 7 9 4 1 223.48 222.63 222.41 222.46 222.66 222.98 223.39 223.88 224.45 225.09 225.8 226.57 - 227.4 228.3 229.26 230.28 231.36 232.5 233.69 234.95 236.26 237.64 239.07 240.56 242.1 243.71 245.37 247.08 - 248.86 250.69 252.58 254.53 256.53 258.59 260.7 262.88 / - 7 9 5 1 222.63 221.64 221.34 221.33 221.5 221.79 222.19 222.67 223.23 223.86 224.56 225.33 - 226.17 227.07 228.03 229.05 230.13 231.28 232.48 233.75 235.07 236.45 237.9 239.4 240.95 242.57 244.25 245.98 - 247.77 249.62 251.52 253.48 255.5 257.58 259.72 261.91 / - 7 9 6 1 219.82 217.78 217.06 216.92 217 217.24 217.61 218.07 218.63 219.27 219.98 220.77 - 221.64 222.57 223.57 224.64 225.77 226.96 228.22 229.55 230.93 232.38 233.89 235.46 237.09 238.78 240.52 242.33 - 244.2 246.13 248.11 250.16 252.26 254.43 256.65 258.93 / - 7 9 7 1 212.74 206.89 205.76 205.44 205.43 205.63 205.99 206.49 207.1 207.82 208.63 209.53 - 210.51 211.58 212.73 213.95 215.22 216.59 218.03 219.53 221.11 222.76 224.48 226.26 228.1 230.01 231.98 233.98 - 236.08 238.24 240.46 242.74 245.08 247.48 249.95 252.47 / - 7 9 8 1 193.45 183.66 182.22 181.72 181.7 181.99 182.52 183.25 184.14 185.18 186.36 187.62 - 189.03 190.54 192.15 193.85 195.62 197.5 199.47 201.52 203.61 205.81 208.08 210.39 212.8 215.28 217.81 220.39 - 223.05 225.77 228.56 231.37 234.27 237.22 240.21 243.27 / - 7 9 9 1 156.23 144.31 143.19 143.08 143.61 144.53 145.73 147.19 148.85 150.7 152.72 154.89 - 157.2 159.64 162.21 164.88 167.63 170.48 173.4 176.66 179.75 182.9 186.11 189.39 192.72 196.13 199.56 203.45 - 207.02 210.59 214.24 217.9 221.63 225.37 229.18 233 / - 7 9 10 1 103.94 101.77 102.2 103.68 105.62 107.94 110.47 113.2 116.14 119.2 122.46 125.87 - 129.31 132.96 136.61 140.48 144.31 148.38 152.53 156.59 160.92 165.11 169.58 173.89 178.51 182.93 187.68 192.2 - 196.97 201.81 206.46 211.3 216.2 220.98 226.08 230.93 / - 7 9 11 1 73.3 75.48 78.2 81.3 84.59 88.01 91.55 95.2 98.96 102.85 107 111.46 - 115.92 120.44 125.12 129.88 134.71 139.64 144.68 149.82 155.04 160.36 165.77 171.26 176.81 182.43 188.17 193.68 - 199.54 205.49 211.51 217.22 223.37 229.59 235.45 241.8 / - 7 9 12 1 63.63 67.53 71.08 74.79 78.7 82.8 87.06 91.49 96.09 100.85 105.75 110.78 - 115.94 121.25 126.69 132.26 137.97 143.8 149.76 155.83 162.01 168.31 175.07 182.49 189.71 196.87 204.1 211.37 - 218.69 225.99 233.38 240.85 248.42 256.07 263.81 271.63 / - 7 9 13 1 58.96 64.25 68.77 73.28 77.99 83.01 88.38 94.07 100.03 106.26 112.72 119.4 - 126.3 133.4 140.69 148.17 155.83 163.66 171.67 179.81 188.02 196.31 204.72 213.24 221.89 230.65 239.54 248.55 - 257.67 266.9 276.25 286.4 297.02 307.7 318.31 328.99 / - 7 9 14 1 54.53 61.18 67.72 74.26 81.09 88.32 95.98 104.06 112.52 121.37 130.58 140.09 - 149.89 159.95 170.27 180.84 191.64 202.69 213.96 225.46 237.19 249.1 261.18 273.45 285.85 298.35 310.99 323.77 - 336.71 349.82 363.1 376.56 390.2 404.01 418.01 432.19 / - 7 9 15 1 52.06 60.8 71.8 83.51 95.25 107.02 119.86 131.94 145.59 159.47 172.11 186.8 - 201.66 216.81 232.58 248.7 264.66 280.26 297.34 314.77 332.55 350.71 369.24 388.15 407.46 425.94 445.93 466.21 - 486.78 507.65 528.86 550.42 572.34 594.64 617.32 640.41 / - 7 9 16 1 52.11 71.6 90.71 109.23 128.06 147.51 166.6 186.75 208.33 229.87 252.53 274.81 - 299.32 324.49 347.55 373.96 400.86 428.24 456.54 484.69 514.46 544.93 575.4 606.92 639.39 672.51 706.5 741.44 - 776.4 812.42 849.57 887.43 926.59 967.6 1008.52 1050.29 / - 7 9 17 1 66.92 96.78 128.27 158.8 189.34 220.82 253.74 288.39 324.29 361.51 399.88 441.35 - 482.5 527.1 572.8 619.4 666.27 716.41 768.27 821.94 877.67 934.59 993.86 1054.26 1115.56 1178.59 1241.21 1300.27 - 1357.95 1416.58 1476.24 1537.57 1600.15 1662.62 1729.48 1793.15 / - 7 9 18 1 92.65 142.93 192 244.28 298.16 354.79 414.78 478.25 545.46 616.5 690.75 769.09 - 851.72 939.02 1030.16 1124.6 1220.7 1314.96 1403.99 1495.22 1590.11 1687.43 1787.43 1890.05 1993.17 2098.64 2204.23 2314.22 - 2422.71 2535.68 2649.97 2765.74 2883.48 3004.68 3125.73 3253.81 / - 7 9 19 1 135.42 213.59 295.72 390.22 492.51 603.37 721.54 851.43 990.86 1138.59 1291.57 1438.02 - 1593.41 1748.62 1919.25 2089.4 2263.04 2443.12 2642.44 2832.73 3033.41 3233.4 3446.75 3663.71 3887.19 4117.36 4347.53 4591.37 - 4840.94 5086.82 5348.56 5601.13 5871.39 6142.6 6407.29 6693.51 / - 7 9 20 1 203.98 326.73 452.93 637.31 847.91 1086.35 1338.16 1590 1860.81 2155.16 2456.8 2778.41 - 3100.22 3461.36 3812.88 4215.82 4600.96 5004.77 5418.82 5897.68 6352.7 6812.32 7300.79 7807.75 8318.92 8848.44 9399.08 9948.68 - 10522.36 11123.12 11741.68 12365.48 13004.53 13656.81 14323.01 15014.96 / - 7 10 1 1 226.25 225.37 225.13 225.17 225.37 225.68 226.09 226.58 227.15 227.79 228.49 229.26 - 230.09 230.99 231.94 232.96 234.04 235.17 236.37 237.62 238.93 240.3 241.73 243.22 244.76 246.36 248.02 249.73 - 251.5 253.33 255.22 257.16 259.16 261.21 263.32 265.49 / - 7 10 2 1 226.13 225.24 225 225.03 225.23 225.54 225.95 226.44 227.01 227.64 228.35 229.12 - 229.95 230.84 231.8 232.82 233.89 235.03 236.22 237.48 238.79 240.16 241.59 243.08 244.62 246.22 247.88 249.59 - 251.37 253.2 255.08 257.03 259.03 261.08 263.2 265.37 / - 7 10 3 1 225.93 225.01 224.76 224.78 224.98 225.28 225.69 226.18 226.74 227.38 228.08 228.85 - 229.68 230.58 231.53 232.55 233.63 234.76 235.96 237.22 238.53 239.9 241.33 242.82 244.36 245.97 247.63 249.34 - 251.12 252.95 254.84 256.79 258.79 260.85 262.97 265.14 / - 7 10 4 1 225.54 224.58 224.3 224.32 224.5 224.8 225.21 225.69 226.25 226.89 227.59 228.36 - 229.19 230.08 231.04 232.06 233.14 234.28 235.47 236.73 238.05 239.42 240.85 242.34 243.89 245.5 247.16 248.89 - 250.66 252.5 254.4 256.35 258.36 260.42 262.54 264.72 / - 7 10 5 1 224.58 223.42 223.03 222.97 223.1 223.37 223.74 224.21 224.76 225.39 226.08 226.85 - 227.68 228.58 229.54 230.56 231.65 232.8 234.01 235.28 236.61 237.99 239.44 240.95 242.52 244.14 245.83 247.57 - 249.37 251.23 253.15 255.12 257.15 259.25 261.39 263.6 / - 7 10 6 1 221.5 218.92 218.29 218.09 218.13 218.35 218.69 219.14 219.69 220.32 221.03 221.82 - 222.69 223.62 224.62 225.7 226.83 228.04 229.31 230.64 232.04 233.5 235.02 236.6 238.25 239.95 241.72 243.54 - 245.43 247.37 249.38 251.45 253.57 255.76 258 260.31 / - 7 10 7 1 214.02 207.43 206.28 205.9 205.86 206.03 206.39 206.89 207.5 208.22 209.04 209.95 - 210.95 212.03 213.19 214.43 215.75 217.14 218.58 220.11 221.72 223.39 225.14 226.95 228.82 230.74 232.74 234.81 - 236.94 239.14 241.39 243.71 246.09 248.53 251 253.56 / - 7 10 8 1 194.19 183.37 181.89 181.37 181.34 181.64 182.19 182.93 183.84 184.9 186.1 187.42 - 188.85 190.37 192.02 193.77 195.61 197.5 199.51 201.61 203.78 206 208.32 210.72 213.15 215.68 218.27 220.93 - 223.62 226.4 229.24 232.12 235.07 238.08 241.14 244.24 / - 7 10 9 1 156.02 144.09 142.99 142.91 143.46 144.39 145.62 147.02 148.7 150.56 152.59 154.9 - 157.24 159.71 162.31 165.02 167.83 170.73 173.73 176.79 180.2 183.4 186.68 190.01 193.39 196.83 200.33 203.88 - 207.91 211.58 215.26 219.02 222.79 226.63 230.48 234.39 / - 7 10 10 1 104.08 101.95 102.41 103.88 105.88 108.19 110.79 113.54 116.51 119.59 122.88 126.23 - 129.78 133.36 137.15 141.05 144.92 149.02 153.04 157.31 161.47 165.9 170.42 174.77 179.44 183.9 188.7 193.26 - 198.08 202.74 207.67 212.57 217.36 222.35 227.51 232.42 / - 7 10 11 1 73.49 75.78 78.5 81.62 84.93 88.38 91.95 95.63 99.42 103.34 107.38 111.99 - 116.46 121.01 125.73 130.51 135.34 140.43 145.5 150.68 155.95 161.32 166.77 172.09 177.69 183.35 189.09 194.93 - 200.86 206.86 212.58 218.71 224.92 230.78 237.12 243.55 / - 7 10 12 1 63.76 67.78 71.37 75.1 79.04 83.16 87.45 91.91 96.54 101.33 106.27 111.34 - 116.53 121.87 127.35 132.96 138.7 144.58 150.57 156.68 162.91 169.25 175.69 183.18 190.56 197.86 205.07 212.51 - 219.86 227.43 234.89 242.43 250.07 257.79 265.6 273.5 / - 7 10 13 1 59.01 64.44 69.03 73.57 78.32 83.36 88.75 94.47 100.47 106.73 113.22 119.94 - 126.87 134.01 141.34 148.87 156.57 164.44 172.49 180.67 188.93 197.27 205.72 214.3 223 231.82 240.76 249.82 - 259 268.29 277.7 287.22 297.92 308.77 319.62 330.3 / - 7 10 14 1 54.57 61.31 67.91 74.5 81.37 88.64 96.33 104.44 112.93 121.81 131.05 140.6 - 150.45 160.55 170.91 181.51 192.36 203.44 214.75 226.29 238.06 250 262.13 274.47 286.94 299.51 312.21 325.06 - 338.07 351.25 364.6 378.12 391.83 405.72 419.79 434.04 / - 7 10 15 1 52.07 60.89 71.93 83.68 95.46 107.26 120.12 132.24 145.92 160.04 172.58 187.24 - 202.2 217.32 233.13 249.28 265.3 280.95 298.08 315.55 333.37 351.55 370.11 389.05 408.37 426.88 446.94 467.31 - 487.96 508.93 530.21 551.84 573.83 596.19 618.93 642.08 / - 7 10 16 1 51.99 71.61 90.75 109.36 128.18 147.65 166.78 186.94 208.95 230.08 252.02 275.08 - 299.61 324.8 347.92 374.38 401.28 428.8 457.12 485.22 514.98 545.46 576.31 607.42 639.87 672.9 706.82 741.64 - 777.05 812.64 849.87 887.77 926.35 966.22 1007.93 1050.06 / - 7 10 17 1 66.82 96.69 128.23 158.82 189.4 221.29 253.82 288.55 324.36 361.55 399.87 441.31 - 482.41 526.97 572.93 619.82 666.05 716.03 767.76 821.2 876.72 933.53 992.64 1053.15 1114.56 1176.59 1239.91 1300.79 - 1360.32 1420.73 1481.61 1544.5 1608.62 1672.48 1740.76 1806.27 / - 7 10 18 1 92.49 142.77 191.91 244.24 298.22 354.87 414.82 478.22 545.28 616.17 690.25 768.33 - 850.64 937.6 1028.37 1122.56 1218.83 1313.64 1403.2 1495 1591.23 1690.11 1789.12 1892.76 1997.52 2105.13 2213.31 2325.88 - 2439.6 2552.11 2668.74 2786.69 2906.57 3029.91 3153.13 3283.01 / - 7 10 19 1 135.2 213.41 295.02 389.27 492.51 601.88 721.14 849.74 989.69 1137.02 1290 1437.15 - 1593.29 1749.39 1913.14 2092.45 2266.91 2448.29 2648.95 2840.78 3043 3244.69 3458.17 3677.65 3903.47 4135.97 4368.43 4614.23 - 4865.98 5114.97 5381.24 5639.33 5911.51 6192.37 6462.42 6749.06 / - 7 10 20 1 203.77 326.78 452.97 633.39 839.24 1079.13 1330.22 1583.16 1858.33 2146.78 2448.88 2770.64 - 3110.28 3473.83 3828.24 4203.72 4622.3 5029.39 5446.94 5929.54 6388.2 6851.82 7339.77 7847.41 8363.13 8904.66 9459.84 10011.13 - 10593.03 11200.63 11816.54 12462.33 13113.94 13785.22 14462.23 15167.97 / - 7 11 1 1 228.29 227.31 227.03 227.05 227.23 227.53 227.93 228.41 228.97 229.6 230.3 231.07 - 231.9 232.79 233.75 234.76 235.84 236.98 238.17 239.42 240.74 242.11 243.54 245.03 246.57 248.17 249.83 251.55 - 253.33 255.16 257.05 259 261 263.06 265.18 267.36 / - 7 11 2 1 228.18 227.19 226.9 226.91 227.08 227.38 227.78 228.26 228.82 229.46 230.16 230.92 - 231.75 232.64 233.6 234.61 235.69 236.83 238.02 239.28 240.59 241.96 243.39 244.88 246.43 248.03 249.69 251.41 - 253.19 255.02 256.91 258.86 260.87 262.93 265.05 267.23 / - 7 11 3 1 227.97 226.95 226.65 226.65 226.82 227.12 227.51 227.99 228.55 229.18 229.88 230.65 - 231.48 232.37 233.32 234.34 235.41 236.55 237.75 239 240.32 241.69 243.12 244.61 246.16 247.76 249.43 251.15 - 252.93 254.77 256.66 258.61 260.62 262.68 264.81 266.99 / - 7 11 4 1 227.57 226.51 226.18 226.17 226.33 226.62 227.02 227.49 228.05 228.68 229.37 230.14 - 230.97 231.86 232.81 233.83 234.91 236.05 237.24 238.5 239.82 241.19 242.63 244.12 245.67 247.28 248.95 250.67 - 252.46 254.3 256.2 258.15 260.17 262.24 264.37 266.56 / - 7 11 5 1 226.45 225.13 224.66 224.55 224.65 224.89 225.25 225.7 226.24 226.86 227.55 228.31 - 229.14 230.04 231 232.03 233.12 234.27 235.48 236.75 238.09 239.48 240.94 242.46 244.03 245.67 247.36 249.11 - 250.92 252.79 254.71 256.7 258.74 260.84 263 265.22 / - 7 11 6 1 223.08 220.17 219.3 219.07 219.1 219.3 219.64 220.09 220.63 221.27 221.98 222.78 - 223.65 224.59 225.6 226.68 227.83 229.05 230.33 231.67 233.08 234.55 236.09 237.69 239.35 241.07 242.86 244.7 - 246.61 248.54 250.57 252.65 254.8 257.01 259.28 261.61 / - 7 11 7 1 215.21 207.92 206.65 206.18 206.12 206.29 206.65 207.14 207.76 208.49 209.32 210.24 - 211.25 212.35 213.53 214.79 216.13 217.55 219.02 220.59 222.22 223.92 225.68 227.53 229.44 231.41 233.45 235.53 - 237.7 239.93 242.23 244.58 247 249.46 252 254.6 / - 7 11 8 1 194 183.08 181.5 180.94 180.9 181.19 181.74 182.49 183.42 184.51 185.74 187.06 - 188.53 190.12 191.81 193.56 195.45 197.42 199.48 201.59 203.82 206.12 208.46 210.91 213.43 216.02 218.64 221.35 - 224.13 226.95 229.85 232.8 235.8 238.87 241.99 245.16 / - 7 11 9 1 155.75 143.88 142.8 142.74 143.31 144.2 145.44 146.93 148.63 150.52 152.58 154.79 - 157.15 159.79 162.42 165.16 168 170.95 173.98 177.1 180.29 183.87 187.21 190.6 194.05 197.55 201.11 204.72 - 208.39 212.55 216.31 220.13 223.98 227.86 231.81 235.77 / - 7 11 10 1 104.12 102.08 102.62 104.12 106.14 108.48 111.06 113.88 116.82 119.98 123.23 126.67 - 130.26 133.86 137.69 141.49 145.52 149.49 153.72 158.02 162.23 166.7 171.03 175.65 180.1 184.87 189.42 194.33 - 198.98 203.9 208.89 213.68 218.68 223.73 228.66 233.92 / - 7 11 11 1 73.7 76.07 78.81 81.95 85.28 88.76 92.35 96.06 99.88 103.83 107.9 112.45 - 117.01 121.64 126.34 131.14 136.08 141.08 146.18 151.39 156.69 162.08 167.56 173.13 178.79 184.5 190.29 196.19 - 202.17 207.89 214.01 220.2 226.08 232.4 238.81 244.83 / - 7 11 12 1 63.92 68.05 71.67 75.42 79.38 83.53 87.85 92.34 97 101.82 106.8 111.89 - 117.13 122.5 128.01 133.66 139.44 145.35 151.38 157.54 163.81 170.18 176.66 183.83 191.48 198.89 206.11 213.64 - 221.03 228.56 236.06 243.66 251.35 259.12 266.99 274.95 / - 7 11 13 1 59.09 64.64 69.28 73.87 78.65 83.72 89.14 94.88 100.91 107.2 113.72 120.47 - 127.44 134.61 141.98 149.54 157.29 165.21 173.3 181.53 189.83 198.22 206.72 215.35 224.09 232.96 241.96 251.07 - 260.31 269.66 279.13 288.71 298.76 309.69 320.71 331.65 / - 7 11 14 1 54.63 61.45 68.1 74.75 81.66 88.96 96.68 104.82 113.34 122.25 131.51 141.1 - 150.98 161.13 171.53 182.17 193.06 204.17 215.52 227.1 238.91 250.87 263.04 275.43 287.98 300.62 313.39 326.31 - 339.38 352.63 366.04 379.64 393.41 407.37 421.51 435.84 / - 7 11 15 1 52.11 60.99 72.06 83.84 95.66 107.5 120.39 132.53 146.23 160.38 172.98 187.67 - 202.65 217.81 233.65 249.83 265.87 281.59 298.77 316.27 334.12 352.33 370.91 389.87 409.21 427.73 447.82 468.27 - 489.02 510.07 531.44 553.14 575.19 597.62 620.42 643.61 / - 7 11 16 1 51.97 71.61 90.79 109.74 128.29 147.78 166.95 187.12 209.13 230.28 253.33 275.3 - 299.85 325.05 348.22 374.7 401.76 429.15 457.55 485.64 515.42 545.88 576.76 607.82 640.23 673.2 707.01 741.71 - 777.17 812.53 849.83 887.82 926.44 965.68 1006.23 1048.61 / - 7 11 17 1 66.72 96.62 128.17 158.82 189.44 221.34 254.31 288.59 324.39 361.53 399.8 441.18 - 482.24 526.73 572.69 619.58 665.74 715.55 767.23 820.42 875.63 932.61 991.07 1051.64 1113.2 1175.11 1238.09 1299.29 - 1354.19 1411.62 1468.98 1528.06 1588.82 1650.37 1713.93 1774.5 / - 7 11 18 1 92.34 142.75 191.81 244.18 298.28 354.95 414.82 478.15 545.06 615.77 689.7 767.52 - 849.48 936.07 1026.47 1120.35 1216.53 1312.06 1402.24 1494.64 1591.52 1690.95 1790.79 1895.22 2000.76 2109.25 2218.33 2332.37 - 2449.62 2563.08 2682.66 2803.85 2926.9 3053.38 3179.4 3312.44 / - 7 11 19 1 134.99 213.26 294.35 388.32 491.26 601.86 718.81 848.83 986.18 1135.36 1288.44 1436.31 - 1586.86 1750.2 1914.97 2095.35 2271.02 2453.77 2640.9 2849.32 3053.1 3256.7 3470.45 3692.61 3921.02 4155.72 4390.62 4632.87 - 4892.45 5143.93 5408.68 5673.44 5949.16 6234.74 6510.35 6803.46 / - 7 11 20 1 203.57 326.89 453.26 627.25 833.95 1071.96 1322.44 1583.8 1856.08 2142.39 2454.75 2778.75 - 3121.2 3461.7 3844.8 4223.24 4645.4 5055.82 5477.15 5920.95 6426.5 6894.28 7386.33 7893.36 8413.78 8956.96 9516.99 10081.82 - 10658.46 11270.41 11902.59 12542.34 13211.66 13889.41 14559.4 15290.17 / - 7 12 1 1 230.29 229.24 228.92 228.91 229.07 229.36 229.75 230.23 230.79 231.41 232.11 232.87 - 233.7 234.59 235.54 236.56 237.63 238.77 239.96 241.22 242.53 243.9 245.33 246.82 248.37 249.98 251.64 253.36 - 255.14 256.98 258.87 260.83 262.83 264.9 267.03 269.21 / - 7 12 2 1 230.17 229.11 228.78 228.77 228.93 229.22 229.6 230.08 230.63 231.26 231.96 232.72 - 233.54 234.44 235.39 236.4 237.48 238.61 239.81 241.06 242.38 243.75 245.18 246.67 248.22 249.83 251.49 253.21 - 254.99 256.83 258.73 260.68 262.69 264.76 266.89 269.07 / - 7 12 3 1 229.96 228.86 228.53 228.5 228.66 228.94 229.33 229.8 230.35 230.98 231.67 232.43 - 233.26 234.15 235.1 236.12 237.19 238.33 239.52 240.78 242.09 243.47 244.9 246.39 247.94 249.55 251.22 252.94 - 254.72 256.56 258.46 260.42 262.43 264.5 266.63 268.82 / - 7 12 4 1 229.55 228.39 228.02 227.98 228.12 228.39 228.77 229.24 229.79 230.41 231.1 231.86 - 232.69 233.58 234.53 235.55 236.62 237.76 238.96 240.21 241.53 242.91 244.34 245.84 247.39 249.01 250.68 252.41 - 254.19 256.04 257.95 259.91 261.93 264.01 266.14 268.34 / - 7 12 5 1 228.22 226.75 226.19 225.99 226.07 226.29 226.64 227.09 227.62 228.23 228.92 229.68 - 230.52 231.41 232.38 233.4 234.5 235.65 236.87 238.15 239.49 240.89 242.35 243.87 245.45 247.09 248.8 250.56 - 252.38 254.26 256.2 258.19 260.25 262.37 264.54 266.78 / - 7 12 6 1 224.55 221.31 220.29 219.99 219.98 220.15 220.46 220.9 221.43 222.06 222.78 223.57 - 224.44 225.39 226.41 227.49 228.65 229.88 231.17 232.53 233.95 235.44 236.99 238.61 240.29 242.03 243.83 245.7 - 247.63 249.62 251.67 253.78 255.96 258.19 260.48 262.84 / - 7 12 7 1 216.28 208.2 206.82 206.35 206.25 206.4 206.74 207.23 207.85 208.59 209.43 210.37 - 211.4 212.52 213.72 215.01 216.38 217.8 219.32 220.91 222.58 224.32 226.13 227.99 229.93 231.94 234.02 236.16 - 238.36 240.64 242.96 245.36 247.82 250.34 252.93 255.56 / - 7 12 8 1 194.54 182.57 180.97 180.41 180.38 180.68 181.25 182.03 182.99 184.08 185.33 186.71 - 188.21 189.83 191.52 193.35 195.27 197.29 199.35 201.54 203.81 206.12 208.55 211.05 213.6 216.24 218.95 221.7 - 224.54 227.44 230.38 233.4 236.48 239.59 242.78 246.03 / - 7 12 9 1 155.96 143.68 142.53 142.58 143.1 144.07 145.34 146.85 148.57 150.48 152.57 154.81 - 157.19 159.72 162.37 165.31 168.18 171.16 174.24 177.39 180.62 183.93 187.63 191.09 194.63 198.23 201.87 205.55 - 209.28 213.05 217.35 221.23 225.15 229.12 233.13 237.18 / - 7 12 10 1 104.26 102.26 102.78 104.36 106.38 108.77 111.37 114.17 117.18 120.31 123.64 127.12 - 130.64 134.37 138.1 142.06 146.13 150.13 154.39 158.56 162.98 167.49 171.86 176.53 181.02 185.84 190.44 195.4 - 200.1 205.08 209.87 214.96 220.01 224.95 230.1 235.43 / - 7 12 11 1 73.96 76.37 79.13 82.28 85.64 89.14 92.76 96.5 100.35 104.33 108.42 112.85 - 117.56 122.2 126.95 131.84 136.81 141.85 147 152.25 157.59 163.03 168.56 174.18 179.89 185.65 191.49 197.14 - 203.16 209.26 215.44 221.69 227.63 234.02 240.05 246.58 / - 7 12 12 1 64.13 68.32 71.98 75.75 79.74 83.91 88.26 92.78 97.47 102.32 107.33 112.46 - 117.73 123.13 128.68 134.37 140.18 146.13 152.2 158.39 164.7 171.11 177.64 184.46 192.21 199.75 207.13 214.77 - 222.2 229.77 237.56 245.22 252.98 260.84 268.78 276.82 / - 7 12 13 1 59.22 64.85 69.55 74.18 78.99 84.08 89.52 95.3 101.35 107.67 114.23 121.01 - 128.01 135.21 142.62 150.21 157.99 165.95 174.09 182.37 190.72 199.16 207.7 216.38 225.17 234.09 243.14 252.3 - 261.59 271 280.53 290.17 299.92 310.16 321.29 332.48 / - 7 12 14 1 54.73 61.61 68.31 75 81.95 89.28 97.03 105.2 113.75 122.68 131.98 141.59 - 151.5 161.68 172.12 182.81 193.73 204.88 216.26 227.87 239.71 251.7 263.9 276.32 288.93 301.66 314.51 327.49 - 340.63 353.95 367.43 381.09 394.93 408.96 423.17 437.56 / - 7 12 15 1 52.17 61.09 72.28 84.01 95.87 107.74 120.65 132.82 146.54 160.7 173.34 188.08 - 203.09 218.27 234.13 250.33 266.4 282.15 299.37 316.92 334.8 353.04 371.63 390.6 409.94 428.47 448.57 469.04 - 489.88 511.02 532.48 554.26 576.38 598.86 621.72 644.96 / - 7 12 16 1 51.95 71.61 90.83 109.81 128.53 147.9 167.14 187.3 209.3 230.45 252.63 275.46 - 300.03 325.23 348.42 374.94 402.08 429.39 457.8 486.42 515.72 546.17 577.31 608.07 640.45 673.36 707.09 741.66 - 777.11 812.25 849.38 887.45 926.17 965.48 1005.39 1046.56 / - 7 12 17 1 66.62 96.55 128.11 158.78 189.88 221.37 254.33 288.56 324.35 361.45 399.66 440.95 - 481.96 526.39 572.32 619.21 665.31 714.99 766.5 819.48 874.44 931.35 989.34 1049.67 1111.39 1173.72 1235.83 1299.5 - 1353.99 1412.71 1470.62 1530.96 1592.14 1656.32 1720.09 1781.69 / - 7 12 18 1 92.17 142.59 191.62 244.09 298.26 354.95 414.74 478.03 544.77 615.29 689.1 766.69 - 848.32 934.49 1024.46 1117.97 1214.09 1309.91 1400.67 1493.66 1590.94 1691.17 1791.9 1897.15 2003.58 2112.02 2223.05 2338.3 - 2455.39 2571.13 2691.9 2814.43 2939.57 3066.52 3201.34 3334.22 / - 7 12 19 1 134.78 213.12 293.94 388.31 490.01 600.18 718.48 846.48 984.97 1133.64 1286.85 1435.46 - 1586.84 1751.14 1916.93 2098.41 2275.51 2459.68 2648.39 2858.4 3063.97 3269.58 3485.15 3707.81 3939.86 4171.87 4414.23 4661.54 - 4920.77 5171.21 5442.24 5705.76 5988.7 6272.58 6555.68 6851.92 / - 7 12 20 1 203.39 327.09 453.89 621.09 829.52 1064.96 1315.55 1575.79 1851.61 2146.7 2444.18 2787.79 - 3114.4 3476.58 3862.72 4244.49 4635.54 5084.6 5509.83 5957.67 6412.2 6940.26 7436.76 7948.58 8468.86 9016.83 9579.45 10160.7 - 10739.88 11357.31 11983.79 12641.11 13305.06 14001.72 14679.03 15400.81 / - 7 13 1 1 232.22 231.12 230.78 230.75 230.9 231.19 231.57 232.04 232.59 233.21 233.9 234.66 - 235.49 236.38 237.33 238.34 239.41 240.55 241.74 243 244.31 245.68 247.12 248.61 250.16 251.77 253.43 255.16 - 256.94 258.78 260.68 262.64 264.65 266.72 268.85 271.04 / - 7 13 2 1 232.1 230.99 230.64 230.6 230.75 231.03 231.41 231.88 232.43 233.05 233.74 234.5 - 235.33 236.21 237.17 238.18 239.25 240.39 241.58 242.84 244.15 245.52 246.96 248.45 250 251.61 253.28 255 - 256.79 258.63 260.53 262.49 264.5 266.58 268.71 270.9 / - 7 13 3 1 231.89 230.74 230.37 230.33 230.47 230.75 231.12 231.59 232.14 232.76 233.45 234.21 - 235.03 235.92 236.87 237.88 238.95 240.09 241.28 242.54 243.85 245.23 246.66 248.16 249.71 251.32 252.99 254.72 - 256.5 258.35 260.25 262.21 264.23 266.31 268.44 270.63 / - 7 13 4 1 231.43 230.19 229.78 229.7 229.82 230.08 230.45 230.9 231.44 232.06 232.75 233.5 - 234.32 235.21 236.16 237.18 238.25 239.39 240.59 241.85 243.16 244.54 245.98 247.48 249.04 250.65 252.33 254.06 - 255.86 257.71 259.62 261.59 263.62 265.7 267.85 270.05 / - 7 13 5 1 229.88 228.26 227.53 227.33 227.37 227.58 227.9 228.34 228.86 229.46 230.15 230.91 - 231.73 232.63 233.6 234.63 235.72 236.88 238.1 239.39 240.74 242.15 243.62 245.15 246.75 248.4 250.11 251.89 - 253.72 255.61 257.57 259.58 261.65 263.79 265.98 268.23 / - 7 13 6 1 225.89 222.04 221.01 220.68 220.64 220.8 221.11 221.54 222.08 222.71 223.42 224.23 - 225.1 226.06 227.09 228.19 229.36 230.6 231.9 233.28 234.72 236.23 237.8 239.44 241.14 242.9 244.73 246.62 - 248.58 250.55 252.63 254.77 256.97 259.23 261.55 263.94 / - 7 13 7 1 216.67 208.33 206.78 206.27 206.15 206.3 206.63 207.13 207.76 208.51 209.37 210.32 - 211.38 212.5 213.73 215.04 216.43 217.91 219.46 221.1 222.8 224.54 226.39 228.31 230.3 232.35 234.48 236.65 - 238.9 241.22 243.61 246.04 248.55 251.12 253.75 256.44 / - 7 13 8 1 195.01 181.98 180.39 179.85 179.83 180.16 180.75 181.55 182.53 183.66 184.94 186.36 - 187.9 189.52 191.29 193.15 195.12 197.14 199.3 201.53 203.86 206.22 208.69 211.03 213.6 216.28 219.03 221.81 - 224.68 227.59 230.9 233.98 237.1 240.3 243.56 246.85 / - 7 13 9 1 155.61 143.36 142.36 142.42 142.96 143.95 145.24 146.77 148.51 150.45 152.56 154.83 - 157.25 159.81 162.49 165.28 168.38 171.39 174.5 177.69 180.96 184.31 187.74 191.56 195.13 198.77 202.46 206.22 - 210.06 213.95 217.86 222.32 226.31 230.35 234.44 238.58 / - 7 13 10 1 104.41 102.45 102.99 104.57 106.65 109.03 111.69 114.51 117.55 120.71 124.06 127.49 - 131.12 134.88 138.64 142.63 146.58 150.77 155.07 159.27 163.73 168.07 172.7 177.17 181.95 186.53 191.46 196.15 - 201.22 206.02 211.1 215.99 221.18 226.34 231.55 236.63 / - 7 13 11 1 74.22 76.68 79.46 82.64 86.01 89.54 93.19 96.95 100.83 104.83 108.95 113.25 - 118.07 122.77 127.54 132.48 137.47 142.51 147.82 153.1 158.49 163.97 169.55 175.22 180.73 186.56 192.44 198.39 - 204.47 210.62 216.87 222.8 229.18 235.64 241.73 248.33 / - 7 13 12 1 64.35 68.62 72.31 76.1 80.11 84.31 88.68 93.23 97.95 102.83 107.87 113.04 - 118.34 123.78 129.36 135.07 140.92 146.9 153.01 159.24 165.58 172.04 178.6 185.27 192.87 200.55 208.19 215.83 - 223.37 230.97 238.71 246.43 254.24 262.15 270.15 278.24 / - 7 13 13 1 59.37 65.09 69.84 74.5 79.34 84.46 89.92 95.72 101.8 108.15 114.74 121.55 - 128.58 135.81 143.25 150.87 158.68 166.67 174.84 183.17 191.58 200.07 208.67 217.39 226.23 235.2 244.29 253.51 - 262.85 272.31 281.89 291.59 301.4 311.33 322.13 333.46 / - 7 13 14 1 54.85 61.78 68.53 75.27 82.25 89.61 97.39 105.58 114.15 123.11 132.43 142.07 - 152.01 162.21 172.68 183.4 194.37 205.56 216.97 228.61 240.47 252.48 264.7 277.14 289.8 302.61 315.53 328.59 - 341.8 355.18 368.72 382.45 396.35 410.45 424.72 439.19 / - 7 13 15 1 52.25 61.2 72.42 84.18 96.08 107.98 120.91 133.1 146.83 161.01 173.66 188.43 - 203.48 218.69 234.56 250.78 266.25 282.62 299.86 317.45 335.37 353.63 372.23 391.21 410.55 429.07 449.15 469.61 - 490.47 511.7 533.25 555.11 577.31 599.86 622.77 646.06 / - 7 13 16 1 51.93 71.6 90.87 109.88 128.68 148.01 167.84 187.58 209.43 230.58 253.86 275.56 - 300.12 325.33 348.52 375.06 402.2 429.53 457.88 486.27 515.83 546.28 577.39 608.12 640.47 673.33 706.99 741.46 - 776.79 812.11 848.77 886.71 925.51 965.01 1005.06 1045.64 / - 7 13 17 1 66.53 96.44 128.04 158.74 189.85 221.35 254.29 288.46 324.23 361.29 399.42 440.62 - 481.52 525.88 571.74 618.66 664.72 714.31 765.69 818.48 873.24 929.91 987.64 1047.7 1109.26 1172.11 1234.88 1296.58 - 1353.13 1412.46 1473.5 1533.43 1596.51 1660.32 1724.75 1788.88 / - 7 13 18 1 92.01 142.45 191.48 243.99 298.15 354.87 414.6 477.74 544.37 614.69 688.36 765.83 - 847.22 932.52 1022.59 1115.74 1211.88 1307.72 1399.07 1492.71 1590.57 1691.43 1792.99 1899.02 2006.34 2115.72 2227.81 2343.94 - 2462.14 2579.33 2701.32 2825.11 2951.55 3079.88 3217.7 3350.36 / - 7 13 19 1 134.58 213.03 293.56 387.42 489.95 600.16 718.2 845.73 981.98 1128.1 1285.37 1430.12 - 1587 1752.3 1919.16 2090.89 2280.43 2466.1 2656.59 2868.4 3075.62 3283.53 3501.2 3725.93 3958.52 4194.74 4442.64 4689.11 - 4944.9 5205.26 5478.36 5745.42 6031.34 6318.09 6599.82 6904.64 / - 7 13 20 1 203.25 327.42 454.92 616.18 821.57 1052.26 1307.57 1569.62 1849.74 2140.67 2451.59 2777.99 - 3127.22 3492.85 3858.09 4267.61 4662.8 5116.23 5545.74 5997.58 6457.27 6990.6 7492.46 8008.58 8529.39 9082.58 9651.57 10232.81 - 10818.29 11440.99 12072.95 12736.32 13420.31 14108.25 14804.03 15538.11 / - 7 14 1 1 234.08 232.97 232.61 232.57 232.71 232.99 233.36 233.83 234.38 234.99 235.68 236.44 - 237.26 238.15 239.1 240.11 241.18 242.31 243.51 244.76 246.08 247.45 248.88 250.38 251.93 253.54 255.21 256.93 - 258.72 260.57 262.47 264.43 266.45 268.53 270.66 272.86 / - 7 14 2 1 233.96 232.83 232.46 232.42 232.56 232.83 233.2 233.67 234.21 234.83 235.52 236.27 - 237.09 237.98 238.93 239.94 241.01 242.15 243.34 244.59 245.91 247.28 248.72 250.21 251.76 253.37 255.04 256.77 - 258.56 260.4 262.31 264.27 266.29 268.37 270.51 272.71 / - 7 14 3 1 233.74 232.58 232.19 232.13 232.27 232.53 232.9 233.36 233.91 234.52 235.21 235.96 - 236.78 237.67 238.62 239.63 240.7 241.83 243.03 244.28 245.6 246.98 248.41 249.9 251.46 253.07 254.74 256.47 - 258.26 260.11 262.02 263.98 266.01 268.09 270.23 272.43 / - 7 14 4 1 233.19 231.89 231.43 231.32 231.42 231.66 232.02 232.46 233 233.6 234.29 235.04 - 235.86 236.74 237.69 238.71 239.78 240.92 242.12 243.38 244.7 246.09 247.53 249.03 250.6 252.22 253.9 255.64 - 257.44 259.3 261.22 263.2 265.24 267.34 269.49 271.71 / - 7 14 5 1 231.39 229.61 228.71 228.48 228.5 228.69 229.01 229.43 229.95 230.55 231.23 231.99 - 232.82 233.72 234.69 235.72 236.82 237.99 239.22 240.51 241.87 243.29 244.77 246.31 247.92 249.59 251.31 253.1 - 254.95 256.87 258.84 260.87 262.96 265.11 267.33 269.6 / - 7 14 6 1 227.05 222.84 221.53 221.17 221.11 221.25 221.55 221.98 222.51 223.15 223.87 224.68 - 225.57 226.53 227.58 228.69 229.88 231.14 232.46 233.86 235.27 236.8 238.4 240.06 241.78 243.58 245.43 247.35 - 249.33 251.38 253.49 255.66 257.89 260.18 262.54 264.95 / - 7 14 7 1 217.4 208.18 206.6 206.03 205.87 205.97 206.31 206.81 207.44 208.2 209.07 210.05 - 211.12 212.29 213.55 214.89 216.32 217.83 219.39 221.06 222.81 224.62 226.52 228.48 230.49 232.59 234.76 237 - 239.31 241.68 244.1 246.6 249.16 251.79 254.48 257.22 / - 7 14 8 1 194.52 181.48 179.76 179.25 179.26 179.62 180.24 181.07 182.07 183.24 184.55 186.01 - 187.58 189.15 190.94 192.84 194.84 196.9 199.09 201.37 203.68 206.13 208.65 211.21 213.88 216.62 219.39 222.27 - 225.22 228.19 231.26 234.39 237.55 240.79 244.09 247.43 / - 7 14 9 1 155.2 143.18 142.19 142.2 142.83 143.84 145.14 146.69 148.46 150.42 152.56 154.85 - 157.31 159.9 162.61 165.44 168.38 171.63 174.77 178 181.31 184.7 188.17 191.7 195.66 199.34 203.08 206.88 - 210.74 214.66 218.63 222.65 227.35 231.51 235.7 239.92 / - 7 14 10 1 104.55 102.57 103.21 104.82 106.93 109.33 111.98 114.86 117.88 121.11 124.42 127.94 - 131.6 135.28 139.18 143.07 147.19 151.41 155.57 159.99 164.29 168.87 173.54 178.05 182.88 187.51 192.48 197.22 - 202.35 207.19 212.33 217.27 222.53 227.57 232.83 238.15 / - 7 14 11 1 74.5 77.01 79.81 83.01 86.41 89.96 93.63 97.42 101.32 105.35 109.5 113.77 - 118.57 123.37 128.21 133.12 138.14 143.28 148.49 153.81 159.22 164.73 170.33 176.03 181.82 187.7 193.63 199.64 - 205.77 211.65 217.92 224.28 230.73 236.83 243.41 250.09 / - 7 14 12 1 64.6 68.93 72.67 76.48 80.52 84.74 89.14 93.71 98.45 103.36 108.43 113.63 - 118.96 124.43 130.04 135.79 141.67 147.68 153.82 160.08 166.46 172.96 179.56 186.26 193.5 201.28 209.06 216.66 - 224.52 232.17 239.95 247.63 255.85 263.83 271.91 280.09 / - 7 14 13 1 59.55 65.35 70.14 74.84 79.71 84.85 90.34 96.16 102.27 108.64 115.25 122.09 - 129.15 136.41 143.87 151.52 159.36 167.38 175.57 183.94 192.41 200.96 209.61 218.37 227.26 236.27 245.41 254.68 - 264.07 273.58 283.21 292.96 302.83 312.81 322.86 333.42 / - 7 14 14 1 55 61.99 68.78 75.56 82.57 89.95 97.75 105.97 114.56 123.54 132.88 142.54 - 152.5 162.73 173.21 183.95 194.94 206.16 217.61 229.28 241.17 253.18 265.42 277.88 290.55 303.43 316.43 329.57 - 342.85 356.29 369.9 383.69 397.65 411.8 426.14 440.67 / - 7 14 15 1 52.35 61.33 72.57 84.37 96.29 108.22 121.16 133.37 147.11 161.29 173.96 188.74 - 203.8 219.04 234.93 251.15 266.63 283 300.23 317.81 335.75 354.03 372.66 391.63 410.96 429.46 449.52 469.95 - 490.76 511.97 533.57 555.53 577.82 600.44 623.41 646.75 / - 7 14 16 1 51.92 71.6 90.91 109.95 128.77 148.1 168.12 187.89 209.51 230.66 253.93 275.6 - 300.12 325.3 348.82 375.02 402.17 429.54 457.77 486.46 515.61 546.05 577.15 607.85 640.17 673 706.58 740.94 - 776.15 811.86 847.81 885.57 924.16 963.59 1003.82 1044.66 / - 7 14 17 1 66.44 96.35 127.98 158.68 189.77 221.28 254.19 288.28 323.97 360.99 399.05 440.15 - 482.16 525.13 570.9 617.81 663.87 713.4 764.64 817.31 871.79 928.2 985.65 1045.43 1106.92 1169.67 1232.58 1294.71 - 1353.59 1411.92 1473.83 1536.14 1599.84 1664.17 1730.06 1795.99 / - 7 14 18 1 91.87 142.33 191.33 243.87 297.97 354.66 414.32 477.29 543.73 613.87 687.3 764.47 - 845.9 930.91 1020.53 1113.55 1209.45 1303.8 1397.17 1492.8 1590.05 1691.35 1793.99 1900.06 2009.08 2119.49 2235.06 2349.85 - 2469.07 2588.96 2711.05 2836.32 2964.18 3095.25 3232.88 3367.19 / - 7 14 19 1 134.4 213 292.89 386.58 488.64 598.49 716.07 843.42 980.72 1126.79 1279.88 1429.28 - 1587.14 1747.46 1921.6 2094.76 2285.73 2473.11 2665.47 2866.95 3088.33 3298.64 3518.61 3744.16 3978.94 4218.75 4466.08 4722.19 - 4978.57 5241.84 5514.29 5788.71 6073.11 6367.58 6654.06 6956.42 / - 7 14 20 1 203.16 327.93 456.27 607.96 814.06 1042.02 1301.25 1561.75 1841.82 2133.03 2453.14 2789.42 - 3141.69 3489.08 3879.77 4293.55 4692.85 5112.37 5585.67 6041.98 6507.13 6994.41 7553.25 8074.85 8602.29 9156.15 9729.72 10316.03 - 10905.43 11533.8 12183.6 12842.55 13532.7 14228.63 14945.76 15672.75 / - 7 15 1 1 235.84 234.75 234.4 234.35 234.49 234.76 235.14 235.6 236.14 236.76 237.44 238.2 - 239.02 239.9 240.85 241.86 242.93 244.06 245.26 246.51 247.83 249.2 250.63 252.13 253.68 255.29 256.96 258.69 - 260.48 262.33 264.24 266.2 268.23 270.31 272.45 274.65 / - 7 15 2 1 235.72 234.61 234.25 234.2 234.33 234.6 234.97 235.43 235.97 236.58 237.27 238.02 - 238.84 239.73 240.67 241.68 242.75 243.89 245.08 246.33 247.65 249.02 250.46 251.95 253.51 255.12 256.79 258.52 - 260.31 262.16 264.07 266.04 268.06 270.15 272.29 274.49 / - 7 15 3 1 235.5 234.35 233.96 233.9 234.02 234.28 234.65 235.11 235.64 236.25 236.94 237.69 - 238.51 239.39 240.34 241.35 242.42 243.55 244.74 246 247.31 248.69 250.13 251.62 253.18 254.79 256.47 258.2 - 259.99 261.85 263.76 265.73 267.76 269.84 271.99 274.2 / - 7 15 4 1 234.78 233.43 232.93 232.79 232.87 233.1 233.44 233.88 234.4 235 235.68 236.43 - 237.24 238.13 239.08 240.09 241.17 242.31 243.51 244.77 246.1 247.49 248.94 250.45 252.02 253.65 255.34 257.09 - 258.9 260.77 262.7 264.69 266.74 268.85 271.01 273.24 / - 7 15 5 1 232.71 230.63 229.73 229.46 229.45 229.61 229.91 230.32 230.83 231.43 232.11 232.86 - 233.69 234.6 235.57 236.61 237.72 238.89 240.13 241.43 242.8 244.23 245.73 247.29 248.91 250.59 252.34 254.15 - 256.01 257.94 259.94 261.99 264.1 266.28 268.51 270.81 / - 7 15 6 1 227.99 223.17 221.94 221.41 221.33 221.46 221.75 222.17 222.7 223.34 224.07 224.89 - 225.79 226.77 227.79 228.92 230.12 231.4 232.75 234.17 235.65 237.21 238.83 240.53 242.28 244.1 245.99 247.95 - 249.96 252.04 254.19 256.4 258.67 261 263.39 265.85 / - 7 15 7 1 217.93 207.91 206.12 205.5 205.32 205.43 205.75 206.24 206.89 207.66 208.55 209.54 - 210.65 211.84 213.13 214.51 215.95 217.5 219.13 220.84 222.63 224.5 226.41 228.42 230.51 232.67 234.9 237.19 - 239.53 241.96 244.46 247.02 249.65 252.32 255.07 257.88 / - 7 15 8 1 194.76 180.76 179.08 178.62 178.66 179.05 179.7 180.57 181.61 182.82 184.09 185.57 - 187.17 188.9 190.7 192.65 194.69 196.84 199.04 201.37 203.78 206.24 208.82 211.48 214.17 216.98 219.86 222.76 - 225.77 228.81 231.96 235.16 238.39 241.71 245.09 248.51 / - 7 15 9 1 155.28 143 142.03 142.05 142.7 143.73 145.05 146.55 148.34 150.31 152.56 154.89 - 157.37 159.99 162.74 165.6 168.58 171.65 175.05 178.32 181.67 185.1 188.61 192.19 195.84 199.93 203.72 207.57 - 211.47 215.44 219.46 223.54 227.67 232.42 236.66 240.96 / - 7 15 10 1 104.59 102.77 103.39 105.08 107.18 109.65 112.32 115.18 118.27 121.46 124.86 128.4 - 131.99 135.8 139.73 143.64 147.8 151.9 156.25 160.71 165.05 169.66 174.15 178.93 183.54 188.48 193.21 198.3 - 203.14 208.37 213.32 218.56 223.61 228.97 234.29 239.68 / - 7 15 11 1 74.8 77.36 80.2 83.42 86.85 90.42 94.11 97.92 101.85 105.9 110.07 114.36 - 119.08 123.97 128.83 133.78 138.89 143.98 149.31 154.67 160.12 165.67 171.32 177.06 182.9 188.83 194.57 200.62 - 206.75 213 219.34 225.76 231.87 238.44 245.09 251.36 / - 7 15 12 1 64.89 69.29 73.06 76.9 80.96 85.21 89.63 94.23 98.99 103.93 109.02 114.26 - 119.61 125.11 130.75 136.52 142.43 148.47 154.64 160.93 167.34 173.87 180.51 187.25 194.09 201.93 209.86 217.72 - 225.36 233.25 241.16 249.13 257.07 265.1 273.24 281.47 / - 7 15 13 1 59.79 65.65 70.49 75.22 80.11 85.27 90.78 96.62 102.75 109.15 115.78 122.64 - 129.72 137 144.49 152.16 160.02 168.06 176.28 184.67 193.2 201.81 210.51 219.32 228.25 237.31 246.49 255.79 - 265.23 274.79 284.47 294.27 304.19 314.23 324.32 334.52 / - 7 15 14 1 55.19 62.24 69.07 75.88 82.91 90.31 98.13 106.36 114.97 123.96 133.32 143 - 152.97 163.21 173.71 184.46 195.45 206.68 218.14 229.83 241.74 253.77 266.02 278.48 291.15 304.05 317.14 330.35 - 343.71 357.22 370.89 384.74 398.76 412.97 427.37 441.95 / - 7 15 15 1 52.49 61.49 72.75 84.58 96.52 108.47 121.42 133.63 147.38 161.56 174.2 188.99 - 204.04 219.27 235.18 251.41 266.89 283.24 300.44 317.99 335.89 354.15 372.78 391.77 411.09 429.57 449.59 469.97 - 490.73 511.87 533.39 555.3 577.59 600.27 623.31 646.71 / - 7 15 16 1 52.02 71.62 90.96 110.02 128.85 148.18 168.29 188.04 209.53 230.65 253.91 275.54 - 300.01 325.13 349.01 374.74 401.9 429.23 457.39 485.67 515.03 545.35 576.34 606.96 639.3 672.12 705.65 739.91 - 774.99 810.54 846.3 883.88 922.35 961.68 1001.81 1042.71 / - 7 15 17 1 66.35 96.26 128 158.77 189.66 221.1 253.99 287.98 323.58 360.49 398.94 439.46 - 480.65 524.08 569.65 616.44 662.58 712.08 763.2 815.82 869.96 926.22 983.57 1043.17 1104.24 1166.56 1229.21 1291.56 - 1351.23 1409.97 1472.4 1535.79 1599.57 1664.68 1731.08 1797.65 / - 7 15 18 1 91.73 142.25 191.18 243.7 297.69 354.2 413.81 476.59 542.74 612.58 685.84 762.78 - 844.05 929 1018.51 1111.1 1206.48 1300.93 1394.83 1491.06 1589.72 1691.15 1796.09 1901.69 2011.64 2123.13 2240.55 2355.77 - 2476.22 2598.69 2721.23 2847.79 2977.32 3112.95 3246.44 3384.94 / - 7 15 19 1 134.26 213.07 292.77 385.8 487.52 598.19 715.72 842.51 978.19 1125.01 1277.6 1427.98 - 1587.4 1748.49 1923.9 2098.73 2291.14 2480.5 2674.96 2878.42 3101.86 3314.85 3537.44 3765.65 4001.33 4244.91 4496.1 4755.34 - 5014.79 5278.38 5557.72 5832.53 6123.99 6417.33 6712.79 7019.32 / - 7 15 20 1 203.16 328.67 458.12 600.33 807.39 1038.52 1286.93 1546.55 1834.13 2129.32 2445.01 2784.83 - 3135.15 3509.23 3904.24 4290.13 4726.74 5150.98 5590.12 6091.63 6562.82 7055.86 7555.87 8149.09 8683.88 9243.39 9816.68 10402.62 - 11006.61 11639.09 12295.29 12960.6 13658.16 14375.58 15100.54 15840.04 / - 7 16 1 1 237.5 236.47 236.13 236.1 236.24 236.51 236.88 237.34 237.88 238.5 239.18 239.93 - 240.75 241.64 242.58 243.59 244.66 245.79 246.99 248.24 249.55 250.93 252.36 253.86 255.41 257.03 258.7 260.43 - 262.23 264.08 265.99 267.96 269.98 272.07 274.22 276.42 / - 7 16 2 1 237.38 236.32 235.97 235.93 236.07 236.34 236.71 237.16 237.7 238.32 239 239.75 - 240.57 241.45 242.39 243.4 244.47 245.6 246.8 248.05 249.37 250.74 252.18 253.67 255.23 256.84 258.52 260.25 - 262.04 263.9 265.81 267.78 269.81 271.9 274.05 276.25 / - 7 16 3 1 237.11 235.98 235.6 235.53 235.65 235.91 236.27 236.72 237.25 237.86 238.54 239.29 - 240.1 240.98 241.93 242.94 244.01 245.14 246.34 247.59 248.91 250.29 251.72 253.22 254.78 256.4 258.08 259.81 - 261.61 263.47 265.39 267.36 269.4 271.49 273.65 275.86 / - 7 16 4 1 236.18 234.78 234.24 234.08 234.13 234.34 234.66 235.09 235.61 236.2 236.88 237.62 - 238.44 239.32 240.27 241.28 242.37 243.51 244.72 245.99 247.32 248.72 250.17 251.69 253.27 254.91 256.61 258.38 - 260.2 262.08 264.03 266.03 268.09 270.21 272.4 274.64 / - 7 16 5 1 233.79 231.41 230.4 230.11 230.08 230.24 230.53 230.94 231.45 232.05 232.73 233.49 - 234.33 235.24 236.22 237.27 238.39 239.58 240.83 242.15 243.54 244.99 246.5 248.08 249.72 251.42 253.19 255.02 - 256.91 258.86 260.88 262.96 265.1 267.3 269.56 271.85 / - 7 16 6 1 228.67 223.23 221.92 221.43 221.24 221.35 221.62 222.04 222.58 223.22 223.96 224.76 - 225.67 226.66 227.74 228.89 230.12 231.42 232.8 234.25 235.77 237.36 239.02 240.75 242.54 244.4 246.33 248.33 - 250.39 252.51 254.7 256.95 259.23 261.61 264.05 266.56 / - 7 16 7 1 217.69 207.29 205.42 204.77 204.57 204.67 204.99 205.5 206.15 206.94 207.85 208.87 - 210 211.23 212.56 213.97 215.45 217.04 218.71 220.47 222.31 224.22 226.18 228.25 230.39 232.6 234.88 237.21 - 239.63 242.12 244.68 247.31 249.98 252.74 255.56 258.44 / - 7 16 8 1 194.89 179.88 178.26 177.88 177.99 178.44 179.14 180.05 181.09 182.32 183.71 185.22 - 186.87 188.62 190.5 192.47 194.57 196.74 199.03 201.37 203.84 206.4 208.99 211.71 214.51 217.33 220.28 223.29 - 226.34 229.49 232.66 235.94 239.28 242.65 246.11 249.64 / - 7 16 9 1 154.74 142.83 141.88 141.91 142.58 143.56 144.9 146.48 148.29 150.29 152.47 154.82 - 157.44 160.1 162.88 165.78 168.79 171.9 175.1 178.65 182.04 185.51 189.06 192.69 196.38 200.14 204.36 208.26 - 212.22 216.24 220.31 224.45 228.63 232.87 237.75 242.11 / - 7 16 10 1 104.74 102.97 103.65 105.33 107.5 109.96 112.69 115.58 118.68 121.89 125.31 128.81 - 132.5 136.33 140.17 144.24 148.27 152.55 156.94 161.24 165.81 170.26 174.99 179.82 184.47 189.46 194.23 199.37 - 204.26 209.2 214.55 219.6 224.95 230.38 235.58 241.01 / - 7 16 11 1 75.13 77.75 80.63 83.89 87.34 90.94 94.66 98.48 102.43 106.49 110.68 114.99 - 119.49 124.56 129.47 134.44 139.58 144.78 150.01 155.38 160.85 166.62 172.1 177.87 183.74 189.69 195.74 201.84 - 208.03 214.34 220.38 226.84 233.39 240.03 246.31 253.09 / - 7 16 12 1 65.27 69.72 73.52 77.4 81.48 85.75 90.2 94.81 99.6 104.55 109.66 114.93 - 120.31 125.83 131.49 137.28 143.21 149.28 155.47 161.78 168.22 174.78 181.44 188.22 195.1 202.53 210.56 218.57 - 226.39 234.24 242.15 250.12 258.24 266.33 274.52 282.81 / - 7 16 13 1 60.13 66.04 70.9 75.65 80.56 85.74 91.27 97.13 103.28 109.69 116.33 123.21 - 130.3 137.6 145.1 152.78 160.66 168.71 176.94 185.34 193.91 202.59 211.35 220.2 229.18 238.27 247.49 256.84 - 266.31 275.91 285.64 295.48 305.45 315.53 325.66 335.91 / - 7 16 14 1 55.46 62.57 69.43 76.25 83.29 90.71 98.53 106.77 115.38 124.38 133.75 143.43 - 153.4 163.65 174.15 184.89 195.88 207.1 218.56 230.24 242.12 254.15 266.4 278.87 291.54 304.42 317.52 330.81 - 344.26 357.84 371.58 385.49 399.57 413.83 428.28 442.92 / - 7 16 15 1 52.69 61.69 72.97 84.82 96.78 108.73 121.67 133.86 147.62 161.8 174.89 189.17 - 204.19 219.38 235.25 251.45 266.92 283.26 300.43 317.93 335.76 353.95 372.5 391.42 410.71 429.16 449.15 469.48 - 490.17 511.23 532.66 554.46 576.64 599.19 622.12 645.42 / - 7 16 16 1 52.04 71.68 91.03 110.11 128.93 148.25 168.35 188.4 209.48 230.54 253.74 275.32 - 299.73 324.77 348.54 374.15 401.19 428.46 456.45 485.21 513.93 544.09 574.91 605.35 637.49 670.27 703.78 737.99 - 772.97 807.86 843.93 881.25 919.36 958.26 997.93 1038.37 / - 7 16 17 1 66.3 96.19 127.95 158.78 189.51 220.83 253.59 287.54 323.01 359.74 398.03 438.43 - 480.49 522.65 567.97 614.48 660.43 710 761.1 813.57 867.46 923.29 980.02 1039.05 1099.56 1161.42 1223.78 1286.12 - 1346.23 1407.24 1468.59 1532.49 1596.92 1662.63 1729.57 1799.18 / - 7 16 18 1 91.64 142.24 191.07 243.45 297.33 353.59 412.88 475.5 541.33 610.72 683.65 760.4 - 841.27 925.95 1014.65 1106.62 1201.56 1297.49 1391.88 1487.58 1587.07 1689.38 1795.67 1901.88 2012.89 2127.75 2242.99 2360.68 - 2482.38 2606.3 2734.16 2862.7 2993.56 3126.98 3262.45 3402.73 / - 7 16 19 1 134.19 213.29 292.93 385.93 487.48 596.25 713.47 839.28 974.95 1119.53 1273.86 1425.3 - 1585.79 1748.33 1925.08 2101.72 2286.47 2487.08 2684 2889.73 3098.18 3334.79 3556.71 3788.05 4026.96 4273.81 4527.14 4785.38 - 5054.22 5322 5601.05 5889.93 6179.42 6476.88 6778.62 7087.99 / - 7 16 20 1 203.31 329.76 460.62 601.91 801.82 1031.97 1282.55 1540.02 1818.94 2122.17 2437.02 2783.04 - 3129.76 3502.52 3900.3 4320.81 4731.04 5194.11 5639.54 6098.38 6625.07 7124.56 7632.56 8163.65 8774.7 9341.23 9921.02 10513.99 - 11126.61 11752.84 12417.37 13094.97 13801.1 14527.92 15260.88 16012.44 / - 7 17 1 1 239.04 238.1 237.8 237.79 237.94 238.22 238.59 239.05 239.59 240.21 240.89 241.64 - 242.46 243.34 244.29 245.29 246.36 247.5 248.69 249.94 251.26 252.63 254.07 255.56 257.12 258.74 260.41 262.15 - 263.94 265.79 267.71 269.68 271.71 273.81 275.96 278.17 / - 7 17 2 1 238.92 237.95 237.64 237.61 237.76 238.03 238.4 238.86 239.4 240.01 240.69 241.44 - 242.26 243.14 244.08 245.09 246.16 247.29 248.48 249.74 251.05 252.43 253.86 255.36 256.92 258.53 260.21 261.95 - 263.74 265.6 267.51 269.49 271.52 273.62 275.77 277.98 / - 7 17 3 1 238.51 237.42 237.03 236.96 237.08 237.32 237.68 238.13 238.66 239.26 239.94 240.68 - 241.5 242.38 243.32 244.33 245.41 246.54 247.74 249 250.32 251.7 253.14 254.65 256.21 257.84 259.52 261.27 - 263.07 264.94 266.87 268.85 270.9 273 275.17 277.39 / - 7 17 4 1 237.31 235.87 235.28 235.08 235.11 235.29 235.61 236.02 236.53 237.12 237.79 238.53 - 239.34 240.23 241.18 242.2 243.29 244.44 245.65 246.93 248.27 249.68 251.15 252.68 254.27 255.93 257.64 259.42 - 261.26 263.16 265.13 267.15 269.23 271.38 273.58 275.85 / - 7 17 5 1 234.57 231.93 230.84 230.48 230.41 230.53 230.8 231.2 231.69 232.29 232.97 233.73 - 234.57 235.49 236.48 237.54 238.68 239.88 241.15 242.49 243.89 245.37 246.9 248.51 250.17 251.91 253.7 255.56 - 257.48 259.47 261.52 263.63 265.81 268.04 270.34 272.7 / - 7 17 6 1 229.04 222.93 221.48 220.95 220.78 220.85 221.11 221.52 222.05 222.69 223.44 224.28 - 225.21 226.23 227.33 228.51 229.77 231.11 232.53 234 235.54 237.18 238.88 240.65 242.49 244.4 246.38 248.43 - 250.54 252.72 254.96 257.27 259.6 262.04 264.54 267.11 / - 7 17 7 1 217.73 206.56 204.57 203.93 203.74 203.86 204.2 204.73 205.41 206.22 207.16 208.19 - 209.35 210.62 211.98 213.43 214.98 216.6 218.31 220.12 222.01 223.98 226.03 228.12 230.32 232.6 234.95 237.37 - 239.83 242.39 245.02 247.72 250.46 253.29 256.18 259.14 / - 7 17 8 1 194 178.96 177.46 177.17 177.34 177.85 178.6 179.51 180.64 181.92 183.34 184.9 - 186.58 188.38 190.3 192.33 194.45 196.7 199.02 201.43 203.95 206.56 209.24 211.99 214.83 217.76 220.75 223.83 - 226.94 230.16 233.41 236.76 240.18 243.63 247.17 250.74 / - 7 17 9 1 153.91 142.66 141.73 141.78 142.46 143.45 144.81 146.42 148.25 150.27 152.48 154.87 - 157.4 160.08 163.03 165.96 169.01 172.16 175.4 178.73 182.15 185.93 189.53 193.19 196.93 200.74 204.61 208.97 - 212.98 217.05 221.18 225.36 229.61 233.9 238.26 243.27 / - 7 17 10 1 104.89 103.18 103.94 105.66 107.87 110.37 113.08 116.03 119.1 122.38 125.76 129.33 - 133.05 136.8 140.77 144.86 148.92 153.23 157.47 161.98 166.59 171.07 175.84 180.47 185.4 190.16 195.26 200.13 - 205.39 210.37 215.78 220.88 226.3 231.5 237.04 242.54 / - 7 17 11 1 75.53 78.21 81.16 84.47 87.96 91.58 95.31 99.15 103.11 107.18 111.38 115.7 - 120.14 125.17 130.17 135.22 140.32 145.52 150.86 156.26 161.77 167.38 173.09 178.9 184.81 190.81 196.91 203.06 - 209.02 215.32 221.76 228.28 234.9 241.17 247.94 254.8 / - 7 17 12 1 65.78 70.26 74.09 78.02 82.14 86.43 90.89 95.52 100.31 105.27 110.4 115.68 - 121.09 126.63 132.29 138.1 144.04 150.12 156.32 162.65 169.11 175.68 182.37 189.16 196.07 203.07 210.9 219.08 - 227.22 235.25 243.27 251.29 259.44 267.48 275.72 284.06 / - 7 17 13 1 60.63 66.56 71.43 76.19 81.11 86.3 91.85 97.72 103.87 110.28 116.94 123.81 - 130.91 138.21 145.7 153.39 161.26 169.31 177.54 185.93 194.5 203.23 212.07 220.98 230 239.13 248.38 257.76 - 267.27 276.9 286.65 296.53 306.54 316.64 326.81 337.11 / - 7 17 14 1 55.87 63.04 69.92 76.72 83.75 91.16 98.98 107.21 115.81 124.81 134.16 143.84 - 153.8 164.02 174.5 185.23 196.2 207.39 218.81 230.46 242.29 254.27 266.47 278.89 291.52 304.36 317.42 330.7 - 344.18 357.87 371.7 385.69 399.83 414.15 428.64 443.32 / - 7 17 15 1 53.01 61.98 73.22 85.13 97.08 109.01 121.94 134.11 147.81 161.94 175.58 189.25 - 204.21 219.34 235.13 251.25 266.62 282.87 299.96 317.39 335.16 353.26 371.71 390.5 409.65 427.94 447.79 468 - 488.59 509.55 530.88 552.58 574.64 597.05 619.83 642.96 / - 7 17 16 1 52.23 71.77 91.15 110.22 129.02 148.31 168.36 188.34 209.34 230.29 253.4 274.84 - 299.14 324.09 347.3 373.15 399.94 426.94 454.66 483.08 511.76 541.77 572.42 602.64 634.56 667.11 700.34 734.25 - 768.91 803.41 839.08 875.99 913.66 952.1 991.3 1031.26 / - 7 17 17 1 66.27 96.14 127.86 158.44 189.3 220.45 253.03 286.77 322.14 358.67 397.29 436.8 - 478.84 520.47 565.31 611.75 657.32 706.6 757.33 809.33 862.82 918.03 974.13 1032.54 1092.44 1153.73 1215.58 1279.02 - 1338.28 1399.8 1462.85 1526.22 1591.77 1658.81 1725.08 1795.11 / - 7 17 18 1 91.62 142.36 191.03 243.19 296.68 352.62 411.38 473.55 539.03 607.98 680.32 756.55 - 836.65 920.68 1008.64 1099.98 1194.32 1289.95 1384.85 1482.37 1582.31 1686.05 1792.24 1901.53 2013.84 2127.77 2244.48 2363.8 - 2486.93 2612.43 2741.82 2872.21 3004.95 3140.34 3277.94 3420.25 / - 7 17 19 1 134.25 213.78 293.79 385.49 486.35 595.7 712.32 837.09 969.83 1114.63 1268.49 1420.52 - 1577.12 1746.56 1918.11 2103.5 2290.29 2492.96 2692.66 2900.87 3112.61 3351.26 3576.97 3811.76 4054.07 4302.81 4558.96 4824.15 - 5091.46 5366.44 5653.06 5946.69 6236.59 6542.85 6851.99 7164.59 / - 7 17 20 1 203.71 331.45 464.05 607.6 797.06 1021.34 1268.32 1527.35 1813.24 2106.37 2435.69 2769.64 - 3130.47 3518.38 3896.29 4317.22 4761.78 5197.18 5686.61 6155.19 6643.7 7198.91 7717 8257.34 8812.79 9381.86 10039.13 10640.45 - 11262.63 11894.08 12556.76 13248.08 13965.08 14694.19 15451.9 16222.69 / - 7 18 1 1 240.44 239.64 239.4 239.41 239.58 239.87 240.26 240.72 241.27 241.88 242.57 243.32 - 244.13 245.01 245.96 246.97 248.04 249.17 250.36 251.61 252.93 254.3 255.74 257.24 258.79 260.41 262.09 263.83 - 265.63 267.48 269.4 271.38 273.41 275.51 277.67 279.88 / - 7 18 2 1 240.24 239.38 239.1 239.09 239.25 239.52 239.9 240.36 240.89 241.51 242.19 242.94 - 243.75 244.63 245.58 246.58 247.65 248.79 249.98 251.24 252.55 253.93 255.37 256.87 258.43 260.05 261.73 263.47 - 265.28 267.14 269.06 271.04 273.08 275.19 277.35 279.57 / - 7 18 3 1 239.6 238.54 238.15 238.07 238.17 238.42 238.76 239.2 239.73 240.33 241.01 241.75 - 242.57 243.45 244.39 245.41 246.48 247.62 248.82 250.09 251.42 252.81 254.26 255.77 257.34 258.98 260.68 262.44 - 264.25 266.13 268.07 270.08 272.14 274.26 276.44 278.69 / - 7 18 4 1 238.08 236.56 235.84 235.61 235.62 235.79 236.09 236.5 237 237.59 238.26 239.01 - 239.83 240.72 241.68 242.71 243.8 244.97 246.2 247.49 248.85 250.27 251.76 253.31 254.93 256.6 258.34 260.15 - 262.01 263.94 265.93 267.98 270.09 272.26 274.5 276.8 / - 7 18 5 1 234.93 231.78 230.66 230.26 230.16 230.26 230.52 230.91 231.41 232 232.69 233.47 - 234.32 235.26 236.27 237.35 238.51 239.74 241.04 242.4 243.84 245.35 246.92 248.56 250.27 252.04 253.88 255.78 - 257.74 259.78 261.87 264.03 266.25 268.54 270.88 273.3 / - 7 18 6 1 229.04 222.5 220.7 220.11 219.88 219.95 220.2 220.61 221.15 221.81 222.57 223.42 - 224.37 225.42 226.55 227.77 229.07 230.44 231.9 233.41 235.02 236.7 238.46 240.28 242.16 244.13 246.17 248.28 - 250.45 252.69 254.98 257.35 259.79 262.3 264.87 267.5 / - 7 18 7 1 217.49 205.7 203.64 203.03 202.87 203.01 203.38 203.94 204.64 205.49 206.44 207.52 - 208.72 210.02 211.43 212.93 214.48 216.17 217.94 219.8 221.75 223.73 225.84 228.03 230.3 232.64 235.03 237.52 - 240.08 242.72 245.4 248.17 251.02 253.93 256.89 259.93 / - 7 18 8 1 193.82 178.02 176.88 176.58 176.76 177.28 178 178.96 180.11 181.42 182.88 184.48 - 186.2 188.05 190.02 192.1 194.29 196.58 198.97 201.46 204.04 206.7 209.45 212.28 215.19 218.17 221.21 224.36 - 227.57 230.84 234.19 237.6 241.08 244.62 248.24 251.91 / - 7 18 9 1 153.5 142.5 141.58 141.65 142.28 143.35 144.73 146.36 148.2 150.26 152.51 154.93 - 157.5 160.21 163.05 166.17 169.25 172.43 175.71 179.08 182.54 186.08 190 193.71 197.5 201.35 205.27 209.26 - 213.75 217.87 222.05 226.3 230.59 234.95 239.36 243.83 / - 7 18 10 1 105.04 103.41 104.29 106.11 108.36 110.88 113.62 116.55 119.68 122.97 126.36 129.95 - 133.6 137.45 141.44 145.42 149.63 153.96 158.23 162.76 167.19 171.92 176.5 181.38 186.36 191.15 196.29 201.21 - 206.51 211.55 216.64 222.16 227.37 232.89 238.49 243.86 / - 7 18 11 1 76.07 78.83 81.89 85.28 88.81 92.45 96.19 100.03 103.98 108.05 112.25 116.56 - 121 125.9 130.99 136.02 141.14 146.34 151.68 157.19 162.72 168.35 174.09 179.93 185.88 191.66 197.77 203.99 - 210.25 216.61 223.1 229.3 235.95 242.69 249.52 255.97 / - 7 18 12 1 66.56 71.04 74.9 78.89 83.05 87.36 91.82 96.46 101.25 106.2 111.32 116.59 - 122.02 127.57 133.24 139.04 144.98 151.04 157.24 163.57 170.02 176.59 183.28 190.09 197 204.02 211.14 219.63 - 227.71 235.96 243.95 252.12 260.29 268.6 277.18 285.59 / - 7 18 13 1 61.46 67.34 72.19 76.92 81.82 87.03 92.59 98.46 104.61 111.01 117.64 124.5 - 131.58 138.85 146.33 153.99 161.83 169.86 178.05 186.42 194.95 203.65 212.51 221.51 230.6 239.78 249.06 258.46 - 267.99 277.64 287.41 297.31 307.34 317.42 327.62 337.95 / - 7 18 14 1 56.55 63.78 70.63 77.38 84.37 91.74 99.52 107.7 116.28 125.25 134.58 144.21 - 154.13 164.31 174.74 185.41 196.32 207.45 218.81 230.38 242.11 254.01 266.13 278.45 290.97 303.71 316.66 329.81 - 343.17 356.75 370.55 384.57 398.81 413.23 427.82 442.56 / - 7 18 15 1 53.56 62.6 73.69 85.59 97.48 109.37 122.25 134.36 148.01 162.06 174.49 189.16 - 204.02 219.03 234.7 250.68 265.89 281.98 298.91 316.16 333.73 351.65 369.91 388.53 407.5 425.58 445.23 465.24 - 485.59 506.29 527.36 548.78 570.56 592.71 615.22 638.1 / - 7 18 16 1 52.74 71.94 91.35 110.4 129.04 148.37 168.03 187.71 209.07 229.87 252.83 274.05 - 298.17 322.87 346.09 371.1 397.56 424.22 451.61 479.68 507.96 537.56 567.81 597.62 629.19 661.4 694.28 727.81 - 762.03 796.04 831.19 867.56 904.65 942.47 981.02 1020.29 / - 7 18 17 1 66.37 96.15 127.92 158.39 189.06 219.92 252.32 285.77 320.83 356.98 395.29 434.4 - 476.07 517.13 561.45 607.42 652.66 701.22 751.42 802.86 855.66 910.12 965.34 1022.84 1081.79 1142.13 1203.14 1265.76 - 1326.71 1388.58 1451.85 1516.14 1581.64 1648.82 1717.21 1786.43 / - 7 18 18 1 91.76 142.56 191.13 242.92 295.84 351.08 409.1 470.53 535.17 603.38 675.17 750.95 - 830.02 913.17 999.83 1090.23 1183.61 1279.64 1375.02 1472.49 1574.38 1678.21 1785.55 1895.92 2009.44 2124.94 2243.26 2366.27 - 2489.14 2616.38 2747.5 2879.93 3014.88 3152.49 3292.57 3435.07 / - 7 18 19 1 134.57 214.76 295.3 386.04 486.09 593.03 708.37 831.7 964.74 1105.59 1255.75 1408.47 - 1570.18 1740.16 1913.74 2102.41 2290.71 2496.1 2701.61 2911.51 3127.29 3351.32 3600.27 3839.35 4083.31 4336.44 4595.35 4864.99 - 5139.33 5423.92 5707.53 6005.5 6305.81 6613.15 6931.58 7246.79 / - 7 18 20 1 204.58 334.13 469.03 615.29 790.25 1012.82 1260.17 1517.75 1792.18 2093.32 2420.79 2764.09 - 3120.17 3503.67 3893.52 4315.75 4762.7 5199.59 5690.22 6167.16 6702.7 7212.24 7743 8349.08 8916.29 9496.93 10084.11 10693.7 - 11415.37 12063.17 12740.45 13438.45 14157.15 14896.22 15665.35 16459.53 / - 7 19 1 1 241.62 240.95 240.77 240.81 241 241.3 241.69 242.16 242.71 243.33 244.01 244.77 - 245.58 246.47 247.41 248.42 249.49 250.62 251.82 253.07 254.39 255.77 257.21 258.71 260.27 261.89 263.58 265.32 - 267.12 268.99 270.91 272.89 274.94 277.04 279.21 281.43 / - 7 19 2 1 241.19 240.38 240.12 240.11 240.27 240.54 240.91 241.37 241.91 242.52 243.2 243.95 - 244.77 245.65 246.6 247.61 248.68 249.82 251.02 252.28 253.61 254.99 256.44 257.95 259.52 261.15 262.85 264.6 - 266.42 268.29 270.23 272.23 274.28 276.4 278.58 280.82 / - 7 19 3 1 240.21 239.11 238.67 238.56 238.63 238.86 239.19 239.62 240.14 240.73 241.41 242.15 - 242.97 243.86 244.81 245.83 246.92 248.07 249.29 250.57 251.91 253.32 254.79 256.32 257.92 259.57 261.29 263.08 - 264.92 266.83 268.79 270.82 272.91 275.07 277.28 279.55 / - 7 19 4 1 238.28 236.59 235.67 235.38 235.35 235.49 235.77 236.17 236.67 237.26 237.93 238.68 - 239.51 240.42 241.4 242.45 243.56 244.75 246.01 247.33 248.72 250.18 251.7 253.28 254.93 256.65 258.43 260.28 - 262.18 264.16 266.19 268.29 270.45 272.67 274.96 277.31 / - 7 19 5 1 234.78 231.3 229.88 229.41 229.26 229.33 229.57 229.95 230.45 231.05 231.75 232.54 - 233.41 234.37 235.41 236.53 237.72 238.98 240.32 241.73 243.22 244.77 246.39 248.08 249.84 251.67 253.57 255.53 - 257.56 259.66 261.82 264.04 266.34 268.69 271.11 273.59 / - 7 19 6 1 228.79 221.53 219.73 219.12 218.91 218.96 219.21 219.63 220.18 220.85 221.63 222.52 - 223.51 224.59 225.75 227.01 228.35 229.77 231.27 232.86 234.52 236.22 238.03 239.92 241.88 243.91 246.02 248.2 - 250.43 252.75 255.14 257.59 260.12 262.7 265.36 268.08 / - 7 19 7 1 217.18 204.75 202.64 202.08 201.96 202.14 202.54 203.13 203.87 204.75 205.76 206.89 - 208.13 209.43 210.88 212.42 214.06 215.8 217.63 219.49 221.49 223.58 225.75 227.95 230.28 232.69 235.18 237.7 - 240.34 243.06 245.81 248.66 251.59 254.59 257.63 260.76 / - 7 19 8 1 193.02 177.46 176.3 176.01 176.2 176.72 177.45 178.44 179.6 180.94 182.42 184.04 - 185.71 187.58 189.57 191.67 193.88 196.2 198.62 201.13 203.74 206.44 209.23 212.1 215.06 218.1 221.21 224.4 - 227.96 231.31 234.74 238.23 241.83 245.51 249.23 253 / - 7 19 9 1 153.32 142.35 141.43 141.52 142.16 143.25 144.65 146.31 148.22 150.34 152.64 155.09 - 157.69 160.43 163.31 166.3 169.59 172.8 176.12 179.52 183.01 186.59 190.55 194.3 198.12 202.02 205.98 210.01 - 214.1 218.72 222.95 227.24 231.59 236 240.46 244.98 / - 7 19 10 1 105.3 103.79 105 106.97 109.31 111.89 114.66 117.64 120.74 124.03 127.41 130.99 - 134.62 138.46 142.44 146.41 150.61 154.78 159.2 163.74 168.17 172.91 177.5 182.4 187.13 192.2 197.08 202.32 - 207.32 212.72 217.85 223.42 228.66 234.23 239.59 245.3 / - 7 19 11 1 76.95 79.97 83.4 86.96 90.57 94.21 97.92 101.72 105.62 109.64 113.77 118.03 - 122.41 127.19 132.25 137.2 142.27 147.53 152.84 158.18 163.67 169.28 174.99 180.81 186.74 192.77 198.9 205.13 - 211.42 217.51 223.97 230.56 237.26 243.62 250.48 257.44 / - 7 19 12 1 68.04 72.53 76.56 80.67 84.87 89.19 93.63 98.22 102.95 107.84 112.88 118.08 - 123.43 128.93 134.58 140.34 146.22 152.23 158.38 164.65 171.05 177.57 184.22 190.98 197.86 204.85 211.95 219.68 - 227.8 236.26 244.4 252.52 260.93 269.37 277.58 286.31 / - 7 19 13 1 63.2 68.92 73.67 78.32 83.2 88.42 93.96 99.78 105.86 112.18 118.73 125.5 - 132.48 139.67 147.05 154.62 162.38 170.31 178.42 186.69 195.13 203.74 212.51 221.43 230.51 239.74 249.11 258.57 - 268.13 277.79 287.56 297.46 307.41 317.48 327.67 337.98 / - 7 19 14 1 58.1 65.47 72.13 78.69 85.52 92.75 100.39 108.46 116.96 125.84 135.05 144.56 - 154.36 164.42 174.73 185.28 196.06 207.07 218.29 229.71 241.26 253.01 264.97 277.13 289.49 302.05 314.82 327.79 - 340.95 354.33 367.92 381.71 395.71 409.92 424.34 438.96 / - 7 19 15 1 54.8 64.03 74.95 86.28 98.23 109.96 122.71 134.66 148.16 162.03 174.25 188.76 - 203.43 218.23 233.68 249.44 265.02 280.21 296.89 313.88 331.18 348.8 366.76 385.05 403.68 421.32 440.6 460.22 - 480.19 500.51 521.18 542.19 563.56 585.29 607.37 629.81 / - 7 19 16 1 54.23 72.81 91.71 110.5 129.28 148.49 167.22 187 208.61 229.14 251.74 272.64 - 296.33 320.54 342.49 367.64 393.57 419.55 446.44 473.87 501.57 530.59 560.11 589.38 620.34 651.95 684.22 717.1 - 750.65 783.88 818.25 853.86 890.16 927.16 964.86 1003.26 / - 7 19 17 1 67.59 96.43 128.12 158.47 188.29 219.37 251.41 284.44 319.04 354.53 391.61 430.82 - 470.31 511.83 555.68 600.93 644.71 692.58 741.78 792.09 843.61 896.85 950.78 1007 1064.66 1123.73 1183.35 1245.11 - 1307 1369.45 1433.23 1498.1 1564.54 1632.79 1701.06 1771.59 / - 7 19 18 1 92.26 142.72 191.63 242.59 294.64 348.8 405.87 466.2 529.95 597.3 668 742.74 - 820.3 902.12 986.76 1075.83 1168.17 1263.28 1359.4 1458.43 1560.42 1666.07 1774.88 1885.79 2000.63 2118.82 2238.96 2362.47 - 2489.03 2617.11 2750.1 2884.87 3022.33 3162.57 3305.46 3452.49 / - 7 19 19 1 135.49 216.79 298.25 387.9 485.58 591.32 703.98 825.49 956.17 1094.92 1242.9 1396.56 - 1558.53 1729.94 1904.86 2093.65 2284.46 2482.8 2698.84 2912.4 3134.05 3361.33 3612.82 3857.22 4108.74 4366.81 4633.32 4907.24 - 5188.99 5478.79 5773.87 6077.75 6382.22 6699.73 7020.25 7348.58 / - 7 19 20 1 206.43 338.66 476.87 626.3 789.68 998.6 1241.51 1495.75 1778.08 2077.14 2402.67 2740.22 - 3104.36 3488.37 3887.96 4309.1 4743.22 5212.85 5706.43 6185.17 6723.55 7241.56 7825.76 8381.09 8951.03 9538.49 10212.87 10838.57 - 11485.54 12153.24 12841.61 13545.16 14392.71 15151.78 15931.86 16732.83 / - 7 20 1 1 241.91 241.18 240.95 240.95 241.11 241.39 241.77 242.23 242.77 243.38 244.07 244.83 - 245.65 246.54 247.49 248.51 249.6 250.75 251.96 253.24 254.58 255.98 257.44 258.97 260.56 262.21 263.92 265.69 - 267.53 269.43 271.39 273.41 275.49 277.63 279.84 282.11 / - 7 20 2 1 241.17 240.22 239.86 239.78 239.88 240.12 240.46 240.9 241.43 242.04 242.72 243.47 - 244.3 245.19 246.15 247.18 248.28 249.44 250.66 251.95 253.31 254.73 256.21 257.76 259.37 261.04 262.78 264.58 - 266.44 268.36 270.35 272.4 274.51 276.68 278.91 281.21 / - 7 20 3 1 239.94 238.61 238.03 237.81 237.82 237.99 238.29 238.7 239.2 239.8 240.47 241.22 - 242.05 242.96 243.93 244.97 246.09 247.27 248.52 249.84 251.22 252.67 254.19 255.77 257.42 259.13 260.91 262.75 - 264.65 266.62 268.66 270.75 272.91 275.14 277.42 279.77 / - 7 20 4 1 237.85 235.77 234.77 234.39 234.25 234.37 234.64 235.03 235.53 236.13 236.81 237.58 - 238.44 239.37 240.38 241.46 242.61 243.84 245.14 246.51 247.88 249.39 250.96 252.61 254.32 256.1 257.95 259.86 - 261.84 263.89 266 268.17 270.42 272.72 275.1 277.53 / - 7 20 5 1 234.32 230.31 228.77 228.28 228.13 228.2 228.45 228.84 229.36 229.98 230.7 231.51 - 232.42 233.41 234.48 235.64 236.87 238.12 239.51 240.97 242.5 244.11 245.79 247.55 249.37 251.27 253.23 255.27 - 257.37 259.55 261.79 264.1 266.48 268.92 271.43 274.01 / - 7 20 6 1 228.29 220.5 218.62 218 217.81 217.9 218.18 218.62 219.2 219.91 220.7 221.62 - 222.64 223.75 224.96 226.26 227.64 229.11 230.67 232.3 233.97 235.77 237.64 239.59 241.62 243.72 245.9 248.11 - 250.43 252.83 255.3 257.84 260.45 263.1 265.85 268.67 / - 7 20 7 1 215.68 203.59 201.46 201.02 200.99 201.24 201.7 202.35 203.14 204.04 205.09 206.26 - 207.55 208.94 210.43 211.97 213.67 215.45 217.33 219.3 221.3 223.44 225.67 227.99 230.33 232.8 235.36 237.94 - 240.65 243.43 246.3 249.18 252.19 255.27 258.38 261.6 / - 7 20 8 1 192.07 176.91 175.74 175.45 175.64 176.13 176.92 177.92 179.11 180.4 181.9 183.53 - 185.31 187.21 189.23 191.36 193.61 195.96 198.42 200.98 203.63 206.37 209.21 212.14 215.16 218.25 221.44 224.69 - 228.02 231.43 234.9 238.44 242.05 245.73 249.47 253.28 / - 7 20 9 1 152.52 142.19 141.29 141.4 142.16 143.4 144.95 146.75 148.7 150.88 153.28 155.78 - 158.41 161.18 164.06 167.06 170.16 173.56 176.9 180.35 183.88 187.49 191.2 195.3 199.16 203.09 207.08 211.14 - 215.26 219.43 224.14 228.45 232.82 237.24 241.72 246.25 / - 7 20 10 1 106.09 105.85 107.51 109.71 112.16 114.77 117.53 120.43 123.5 126.67 130.02 133.44 - 137.07 140.72 144.6 148.48 152.59 156.84 161.04 165.53 169.94 174.64 179.21 184.09 188.81 193.86 198.71 203.93 - 208.91 214.29 219.38 224.54 230.14 235.41 241.01 246.39 / - 7 20 11 1 79.96 84.27 88.26 91.95 95.5 99.02 102.58 106.2 109.91 113.73 117.66 121.71 - 125.94 130.71 135.39 140.12 145.01 149.99 155.13 160.33 165.7 171.2 176.81 182.53 188.36 194.3 200.34 206.18 - 212.4 218.68 225.05 231.56 237.77 244.45 251.24 257.65 / - 7 20 12 1 72.26 77.16 81.63 85.89 90.09 94.31 98.59 102.97 107.46 112.09 116.87 121.8 - 126.89 132.13 137.52 143.07 148.76 154.61 160.6 166.72 172.94 179.26 185.7 192.27 198.97 205.79 212.73 219.77 - 227.47 235.88 244.05 252.16 260.24 268.5 276.76 285.17 / - 7 20 13 1 68.04 73.06 77.6 82.34 87.3 92.46 97.85 103.45 109.28 115.32 121.58 128.05 - 134.72 141.59 148.66 155.92 163.36 170.99 178.79 186.77 194.93 203.25 211.73 220.38 229.18 238.15 247.27 256.54 - 265.97 275.53 285.18 294.97 304.91 314.95 325.05 335.25 / - 7 20 14 1 63.32 70.06 75.97 82 88.43 95.38 102.81 110.63 118.82 127.35 136.2 145.34 - 154.75 164.43 174.37 184.54 194.95 205.6 216.44 227.43 238.62 250.03 261.64 273.47 285.5 297.73 310.16 322.79 - 335.57 348.55 361.73 375.12 388.71 402.51 416.51 430.72 / - 7 20 15 1 59.01 68.29 78.55 89.19 100.37 111.81 123.02 135.6 148.6 160.13 173.47 187.49 - 201.37 215.94 230.92 246.13 260.22 275.89 292.13 308.67 325.53 342.71 360.21 378.04 396.2 413.08 431.85 450.97 - 470.42 490.21 510.34 530.82 551.62 572.77 594.26 616.1 / - 7 20 16 1 57.64 76.13 94.6 112.44 130.32 148.39 167.21 186.34 205.51 227.01 246.79 268.94 - 291.95 315.12 336.11 360.75 385.6 410.85 437.23 462.96 490.55 518.76 546.77 575.86 605.99 636.76 668.19 700.06 - 731.72 765.31 798.09 832.68 867.92 903.84 940.41 977.64 / - 7 20 17 1 68.64 100.01 129.85 158.5 187.57 217.76 249.34 282.3 316.06 350.68 386.18 425.17 - 462.06 503.32 545.81 589.56 630.94 677.34 725.09 773.52 823.72 875.59 927.72 982.42 1038.37 1095.86 1153.63 1213.96 - 1275.69 1338.81 1403.33 1469.24 1536.52 1604.79 1673.54 1745.01 / - 7 20 18 1 97.34 143.77 192.43 242.13 293.19 345.99 402.22 461.21 524 589.82 658.52 731.11 - 807.19 887.35 968.97 1055.71 1145.96 1239.5 1334.63 1435.09 1538.83 1645.74 1755.73 1868.57 1984.74 2104.14 2226.55 2352.08 - 2480.47 2611.88 2746.74 2884.23 3024.66 3168.01 3314.25 3464.53 / - 7 20 19 1 139.56 221.56 302.95 391.79 487.09 589.54 699.76 818.41 945.49 1082.33 1226.74 1380.52 - 1543.22 1714.88 1892.07 2081.64 2275.43 2476.78 2692.45 2909.81 3134.51 3366.45 3605.65 3866.38 4122.47 4386.1 4657.2 4935.58 - 5224.25 5518.17 5821.98 6129.78 6447.69 6769.9 7102.65 7439.16 / - 7 20 20 1 211 347.48 490.44 643.85 809.11 986.96 1177.4 1380.4 1636.89 1927.62 2234.49 2565.16 - 2914.47 3288.84 3670.91 4089.42 4536.44 4980.52 5479.24 5968.59 6480.8 7016.38 7575.94 8174.94 8753.13 9388.23 10023.09 10636.88 - 11353.11 12014.41 12696.83 13502.01 14233.62 14986.48 15883.83 16686.84 / - 8 1 1 1 212.72 212.57 212.64 212.84 213.15 213.54 214 214.53 215.12 215.78 216.49 217.27 - 218.11 219 219.95 220.96 222.02 223.14 224.31 225.54 226.82 228.16 229.55 231 232.5 234.06 235.66 237.32 - 239.04 240.81 242.63 244.5 246.43 248.41 250.44 252.53 / - 8 1 2 1 212.64 212.48 212.54 212.75 213.05 213.44 213.89 214.42 215.02 215.67 216.39 217.17 - 218 218.9 219.85 220.86 221.92 223.04 224.21 225.44 226.73 228.07 229.46 230.91 232.41 233.96 235.57 237.23 - 238.95 240.72 242.54 244.42 246.35 248.33 250.37 252.46 / - 8 1 3 1 212.5 212.31 212.37 212.57 212.86 213.25 213.71 214.23 214.83 215.48 216.2 216.98 - 217.81 218.71 219.66 220.67 221.73 222.85 224.03 225.26 226.54 227.88 229.28 230.73 232.23 233.79 235.4 237.06 - 238.78 240.56 242.38 244.26 246.19 248.18 250.22 252.31 / - 8 1 4 1 212.22 212 212.04 212.23 212.52 212.9 213.35 213.88 214.47 215.12 215.84 216.62 - 217.46 218.35 219.3 220.31 221.38 222.5 223.68 224.91 226.2 227.54 228.94 230.39 231.9 233.46 235.08 236.75 - 238.47 240.25 242.08 243.96 245.9 247.89 249.94 252.04 / - 8 1 5 1 211.7 211.42 211.43 211.59 211.87 212.24 212.69 213.21 213.8 214.46 215.17 215.95 - 216.79 217.69 218.64 219.65 220.72 221.85 223.03 224.27 225.56 226.91 228.32 229.78 231.29 232.86 234.48 236.16 - 237.89 239.68 241.52 243.41 245.36 247.36 249.42 251.53 / - 8 1 6 1 210.67 210.26 210.2 210.32 210.57 210.92 211.35 211.86 212.44 213.09 213.8 214.58 - 215.42 216.32 217.28 218.3 219.37 220.51 221.7 222.95 224.25 225.62 227.03 228.51 230.04 231.62 233.26 234.96 - 236.71 238.52 240.38 242.29 244.26 246.29 248.37 250.5 / - 8 1 7 1 207.24 205.45 205.05 204.97 205.09 205.35 205.74 206.22 206.79 207.44 208.17 208.98 - 209.85 210.79 211.8 212.87 214.01 215.21 216.47 217.8 219.18 220.63 222.13 223.7 225.32 227.01 228.75 230.55 - 232.41 234.32 236.3 238.33 240.41 242.55 244.74 246.99 / - 8 1 8 1 196.6 190.7 189.72 189.36 189.35 189.57 189.98 190.53 191.21 192 192.9 193.89 - 194.98 196.15 197.38 198.71 200.11 201.59 203.15 204.78 206.45 208.21 210.03 211.92 213.87 215.89 217.96 220.1 - 222.3 224.56 226.86 229.24 231.67 234.16 236.7 239.29 / - 8 1 9 1 167.98 158.85 157.27 156.73 156.83 157.26 158.05 159.07 160.29 161.69 163.21 164.89 - 166.69 168.58 170.61 172.74 174.92 177.22 179.6 182.02 184.55 187.15 189.78 192.5 195.25 198.09 201.4 204.36 - 207.37 210.4 213.5 216.63 219.82 223.05 226.32 229.64 / - 8 1 10 1 117.92 113.3 112.7 113.26 114.46 116.11 118.07 120.27 122.73 125.3 128.03 130.97 - 133.97 137.18 140.4 143.71 147.24 150.72 154.44 158.06 161.88 165.63 169.59 173.55 177.58 181.54 185.8 189.84 - 194.1 198.16 202.25 206.81 210.95 215.13 219.31 223.52 / - 8 1 11 1 80.91 81.96 84.25 86.82 89.58 92.49 95.72 99.03 102.47 106.04 109.75 113.61 - 117.57 121.65 125.85 130.15 134.57 139.08 143.7 148.41 153.18 158.04 163.01 167.82 172.92 178.1 183.36 188.39 - 193.77 199.22 204.38 209.95 215.56 220.85 226.56 231.93 / - 8 1 12 1 68.77 71.83 75.11 78.6 82.21 85.96 89.85 93.88 98.05 102.35 106.79 111.37 - 116.09 120.95 125.95 131.07 136.33 141.71 147.21 152.97 159.56 165.88 172.17 178.55 184.97 191.46 197.96 204.54 - 211.48 218.25 225.09 232.01 238.65 245.71 252.8 259.96 / - 8 1 13 1 65.29 69.02 72.76 76.73 81.03 85.7 90.69 95.95 101.46 107.21 113.18 119.37 - 125.76 132.34 139.12 146.09 153.23 160.55 168.04 175.61 183.26 191.01 198.88 206.86 214.97 223.19 231.53 240.26 - 249.94 259.4 269.02 278.34 287.95 297.56 307.21 316.83 / - 8 1 14 1 61.13 66.77 72.21 77.89 84.01 90.63 97.7 105.22 113.17 121.48 130.12 139.07 - 148.31 157.81 167.58 177.6 187.86 198.35 209.07 220.01 231.18 242.58 254.21 265.99 277.86 289.84 301.96 314.23 - 326.58 339.09 351.76 364.61 378.4 392.77 407.23 421.66 / - 8 1 15 1 58.29 66.1 75.02 85.21 95.9 107.27 119.27 130.43 143.31 156.59 170.08 184.24 - 198.77 213.18 227.32 242.85 258.74 274.99 291.6 308.59 325.95 343.71 361.84 380.3 399.07 418.08 436.81 456.77 - 476.21 496.45 517.03 537.99 558.07 581.01 604.25 626.72 / - 8 1 16 1 57.26 74.44 92.31 110.03 127.99 147 165.66 186.24 206.39 228.26 249.25 272.64 - 296.66 318.59 343.92 369.69 395.91 423.32 451.45 480.12 508.82 538.84 569.17 601.02 633.56 666.61 700.35 734.61 - 770.53 808.13 846.35 885.3 924.42 964.29 1004.57 1044.38 / - 8 1 17 1 70.32 99.12 129.37 158.87 189.03 220.09 252.4 286.79 322.49 359.31 399.28 438.81 - 481.82 526.05 571.98 617.03 666.1 716.92 769.56 824.07 879.43 937.14 997.38 1058.98 1120.05 1180.95 1238.5 1290.9 - 1334.19 1376.81 1425.04 1470.75 1522.3 1573.75 1625.25 1676.16 / - 8 1 18 1 95.74 144.09 193.5 244.41 297.57 353.9 414.07 478.16 546.41 618.11 693.5 773.77 - 858.53 947.65 1039.86 1134.55 1231.12 1320.49 1408.06 1497.65 1591.24 1687.19 1786.11 1886.15 1987.54 2092 2195.66 2303.93 - 2409.09 2520.73 2635.36 2750.19 2867.12 2985.26 3105.31 3228.99 / - 8 1 19 1 138.26 215.7 299.76 394.52 496.83 608.17 729.06 860.73 1005.61 1157.28 1302.73 1445.09 - 1595.81 1748.14 1901.91 2060.87 2232.7 2401.03 2572.5 2753.46 2934.13 3124.99 3316.86 3512.24 3713.38 3917.33 4131.75 4344.89 - 4562.03 4785.47 5017.39 5247.63 5486.97 5725.96 5968.6 6224.86 / - 8 1 20 1 206.4 327.71 476.06 664.96 879.19 1123.25 1369.69 1613.5 1871.97 2157.27 2438.09 2748.56 - 3059.21 3402.33 3746.25 4097.56 4496.28 4880.52 5273.89 5681.23 6105.87 6532.57 6982.56 7433.6 7910.8 8390.76 8892.02 9377.46 - 9905.41 10435.34 10978.28 11544.58 12118.47 12681.36 13288.07 13925.44 / - 8 2 1 1 214.56 214.39 214.46 214.66 214.97 215.35 215.81 216.34 216.94 217.59 218.31 219.09 - 219.93 220.82 221.78 222.79 223.85 224.97 226.15 227.38 228.67 230.02 231.41 232.86 234.37 235.93 237.55 239.21 - 240.94 242.71 244.54 246.42 248.36 250.35 252.39 254.49 / - 8 2 2 1 214.48 214.3 214.36 214.56 214.86 215.25 215.71 216.24 216.83 217.49 218.21 218.98 - 219.82 220.72 221.67 222.68 223.75 224.87 226.05 227.28 228.57 229.91 231.31 232.77 234.27 235.84 237.45 239.12 - 240.84 242.62 244.45 246.34 248.28 250.27 252.31 254.41 / - 8 2 3 1 214.33 214.13 214.18 214.37 214.67 215.05 215.51 216.04 216.63 217.29 218.01 218.79 - 219.62 220.52 221.47 222.48 223.55 224.67 225.85 227.09 228.38 229.72 231.13 232.58 234.09 235.65 237.27 238.94 - 240.67 242.45 244.28 246.17 248.11 250.11 252.15 254.26 / - 8 2 4 1 214.04 213.81 213.84 214.02 214.31 214.69 215.15 215.67 216.26 216.92 217.64 218.42 - 219.26 220.15 221.11 222.12 223.19 224.31 225.49 226.73 228.03 229.37 230.78 232.24 233.75 235.32 236.94 238.61 - 240.34 242.13 243.97 245.86 247.81 249.81 251.86 253.97 / - 8 2 5 1 213.49 213.2 213.2 213.37 213.64 214.01 214.46 214.99 215.58 216.23 216.95 217.73 - 218.57 219.47 220.42 221.44 222.51 223.64 224.83 226.07 227.37 228.72 230.13 231.59 233.11 234.69 236.32 238 - 239.74 241.54 243.38 245.29 247.24 249.25 251.32 253.44 / - 8 2 6 1 212.38 211.94 211.85 211.96 212.2 212.54 212.97 213.48 214.06 214.71 215.43 216.21 - 217.05 217.95 218.91 219.93 221.01 222.15 223.35 224.6 225.91 227.28 228.7 230.19 231.72 233.32 234.96 236.67 - 238.43 240.24 242.11 244.04 246.02 248.06 250.15 252.29 / - 8 2 7 1 208.63 206.69 206.16 206.07 206.2 206.47 206.86 207.35 207.93 208.59 209.33 210.14 - 211.03 211.98 213 214.09 215.24 216.46 217.73 219.07 220.48 221.94 223.46 225.05 226.69 228.35 230.1 231.92 - 233.79 235.72 237.71 239.75 241.86 244.02 246.23 248.51 / - 8 2 8 1 197.42 191.18 190.16 189.8 189.8 190.03 190.45 191.02 191.71 192.52 193.43 194.45 - 195.55 196.75 198 199.35 200.78 202.29 203.87 205.53 207.23 209.02 210.88 212.8 214.78 216.83 218.94 221.11 - 223.34 225.63 227.98 230.39 232.85 235.38 237.95 240.59 / - 8 2 9 1 168.22 158.57 157 156.48 156.62 157.06 157.88 158.93 160.19 161.61 163.17 164.89 - 166.74 168.67 170.74 172.92 175.14 177.5 179.93 182.4 184.98 187.63 190.3 193.08 195.88 198.77 201.68 204.68 - 208.2 211.31 214.46 217.64 220.89 224.17 227.5 230.87 / - 8 2 10 1 117.66 113.38 112.78 113.38 114.65 116.33 118.32 120.54 122.98 125.64 128.39 131.29 - 134.4 137.54 140.9 144.24 147.81 151.32 155.08 158.74 162.6 166.39 170.39 174.29 178.35 182.47 186.72 190.86 - 195.01 199.37 203.53 207.71 212.37 216.6 220.86 225.13 / - 8 2 11 1 81.01 82.11 84.43 87.04 89.84 92.79 96.03 99.39 102.85 106.47 110.24 114.09 - 118.14 122.26 126.5 130.84 135.3 139.86 144.52 149.27 153.94 158.83 163.8 168.87 174.03 179.26 184.57 189.64 - 195.08 200.59 205.8 211.43 216.73 222.44 228.21 233.64 / - 8 2 12 1 68.85 71.99 75.28 78.79 82.43 86.22 90.15 94.22 98.43 102.77 107.25 111.87 - 116.64 121.54 126.58 131.75 137.06 142.48 148.03 153.69 160.2 166.76 173.21 179.59 186.14 192.69 199.24 205.88 - 212.6 219.41 226.3 233.26 240.31 247.45 254.6 261.84 / - 8 2 13 1 65.27 69.16 72.95 76.95 81.28 85.98 91 96.3 101.85 107.64 113.66 119.89 - 126.33 132.96 139.79 146.8 153.99 161.36 168.89 176.52 184.22 192.02 199.94 207.98 216.14 224.41 232.81 241.32 - 251.08 260.65 270.42 280.03 289.61 299.16 308.87 318.85 / - 8 2 14 1 61.03 66.8 72.34 78.08 84.26 90.92 98.03 105.59 113.57 121.93 130.62 139.61 - 148.89 158.45 168.27 178.33 188.65 199.2 209.97 220.97 232.19 243.65 255.33 267.17 279.1 291.14 303.33 315.67 - 328.08 340.66 353.41 366.32 379.81 394.29 408.91 423.53 / - 8 2 15 1 58.22 66.12 75.25 85.36 96.11 107.53 119.57 130.77 143.71 157.02 170.56 184.77 - 199.35 213.82 228.02 243.6 259.53 275.83 292.5 309.54 326.95 344.75 362.94 381.47 400.32 419.42 438.78 458.27 - 476.12 498.1 518.77 539.8 558.71 582.62 606.05 628.4 / - 8 2 16 1 57.24 74.46 92.38 110.15 128.16 147.2 166.62 186.51 206.69 228.84 249.67 273.1 - 297.17 319.17 344.55 370.38 396.71 424.11 452.26 481.15 509.7 539.32 570.09 601.95 634.51 667.64 701.43 735.71 - 770.77 808.43 847.27 886.05 925.49 965.52 1005.8 1046.17 / - 8 2 17 1 70.24 99.08 129.4 158.95 189.16 220.25 252.58 286.97 322.67 360.55 399.49 439.62 - 482.1 526.6 572.27 617.32 666.34 717.1 769.77 824.29 879.67 937.34 997.25 1059.01 1120.33 1181.47 1239.38 1293.06 - 1334.36 1381.13 1427.08 1476.39 1526.35 1580.59 1632.67 1683.07 / - 8 2 18 1 95.61 144.13 193.49 244.5 297.72 354.07 414.21 478.22 546.37 618.04 693.28 773.38 - 857.95 946.95 1039.18 1133.44 1230.43 1321.08 1409.96 1501.26 1596.82 1686.47 1779.73 1872.58 1965.29 2061.86 2159.65 2259.68 - 2356.06 2460.82 2565.09 2672.24 2776.7 2885.44 2993.47 3106.81 / - 8 2 19 1 138.08 215.54 299.69 393.87 495.92 608.09 728.84 860.21 1004.78 1156.32 1302.25 1445.22 - 1590 1749.65 1905.43 2066.55 2240.64 2410.92 2584.3 2766.91 2949.08 3139.02 3336.1 3533.59 3736.94 3943.11 4154.6 4375.24 - 4594.66 4820.41 5054.63 5287.54 5529.25 5778.4 6016.29 6270.43 / - 8 2 20 1 206.2 327.59 474.34 661.92 878.82 1116.83 1364.77 1614.09 1873.45 2149.06 2442.06 2753.97 - 3066.18 3411.21 3756.84 4110.06 4512.69 4897.51 5300.68 5709.84 6142.9 6574.73 7029.87 7485.92 7968.4 8453.46 8959.72 9450.25 - 9983.26 10518.71 11067.53 11640.07 12220.02 12789.23 13402.28 14046.42 / - 8 3 1 1 216.4 216.22 216.28 216.48 216.78 217.16 217.62 218.15 218.75 219.41 220.13 220.91 - 221.75 222.64 223.6 224.61 225.68 226.81 227.99 229.22 230.52 231.86 233.27 234.72 236.23 237.8 239.42 241.1 - 242.83 244.61 246.45 248.34 250.28 252.28 254.33 256.44 / - 8 3 2 1 216.31 216.12 216.18 216.37 216.67 217.06 217.51 218.04 218.64 219.3 220.02 220.8 - 221.64 222.53 223.49 224.5 225.57 226.7 227.88 229.12 230.41 231.76 233.16 234.62 236.13 237.7 239.32 241 - 242.73 244.51 246.35 248.25 250.19 252.19 254.25 256.36 / - 8 3 3 1 216.15 215.94 215.99 216.18 216.47 216.85 217.31 217.84 218.43 219.09 219.81 220.59 - 221.43 222.33 223.28 224.3 225.37 226.49 227.68 228.92 230.21 231.56 232.97 234.43 235.94 237.51 239.13 240.81 - 242.55 244.33 246.18 248.07 250.02 252.02 254.08 256.19 / - 8 3 4 1 215.85 215.61 215.63 215.82 216.1 216.48 216.94 217.46 218.05 218.71 219.43 220.21 - 221.05 221.95 222.91 223.92 224.99 226.12 227.31 228.55 229.84 231.2 232.6 234.07 235.59 237.16 238.79 240.47 - 242.21 244 245.85 247.75 249.7 251.71 253.78 255.89 / - 8 3 5 1 215.28 214.97 214.97 215.13 215.41 215.78 216.23 216.75 217.34 218 218.72 219.5 - 220.34 221.24 222.2 223.22 224.29 225.42 226.61 227.86 229.16 230.52 231.93 233.4 234.93 236.51 238.15 239.84 - 241.58 243.38 245.24 247.15 249.12 251.14 253.21 255.34 / - 8 3 6 1 214.07 213.58 213.48 213.58 213.81 214.15 214.58 215.08 215.66 216.31 217.03 217.81 - 218.65 219.56 220.52 221.55 222.63 223.77 224.98 226.23 227.55 228.93 230.36 231.85 233.39 234.99 236.65 238.36 - 240.13 241.96 243.84 245.78 247.77 249.82 251.92 254.08 / - 8 3 7 1 209.98 207.86 207.27 207.18 207.29 207.55 207.94 208.43 209.01 209.67 210.42 211.24 - 212.13 213.09 214.12 215.22 216.38 217.61 218.89 220.24 221.65 223.13 224.66 226.26 227.92 229.63 231.41 233.25 - 235.14 237.09 239.11 241.18 243.3 245.49 247.73 250.01 / - 8 3 8 1 198.15 191.56 190.53 190.17 190.17 190.42 190.84 191.42 192.14 192.97 193.9 194.93 - 196.06 197.25 198.55 199.93 201.39 202.93 204.54 206.22 207.95 209.78 211.67 213.63 215.65 217.72 219.87 222.08 - 224.34 226.66 229.05 231.5 234 236.56 239.17 241.85 / - 8 3 9 1 168.13 158.28 156.68 156.22 156.31 156.87 157.71 158.8 160.08 161.54 163.12 164.87 - 166.76 168.72 170.83 173.05 175.32 177.72 180.21 182.73 185.36 188.02 190.79 193.62 196.46 199.41 202.38 205.42 - 208.5 211.65 215.37 218.62 221.93 225.26 228.65 232.07 / - 8 3 10 1 117.53 113.42 112.92 113.55 114.81 116.51 118.52 120.82 123.28 125.91 128.76 131.68 - 134.83 138 141.28 144.77 148.23 151.92 155.55 159.42 163.18 167.15 171.03 175.13 179.23 183.39 187.49 191.83 - 196.03 200.53 204.79 209.04 213.31 218.08 222.4 226.75 / - 8 3 11 1 81.12 82.28 84.61 87.27 90.1 93.09 96.26 99.72 103.23 106.91 110.7 114.62 - 118.63 122.78 127.05 131.42 135.91 140.5 145.19 149.97 154.84 159.78 164.8 169.93 175.13 180.42 185.49 190.9 - 196.39 201.61 207.22 212.91 218.26 224.03 229.47 235.35 / - 8 3 12 1 68.95 72.15 75.45 78.98 82.65 86.47 90.44 94.55 98.8 103.19 107.71 112.37 - 117.18 122.13 127.22 132.43 137.78 143.25 148.85 154.55 160.97 167.63 174.11 180.53 187.16 193.75 200.52 207.22 - 214.01 220.88 227.83 234.87 241.99 249.19 256.42 263.72 / - 8 3 13 1 65.24 69.29 73.13 77.18 81.53 86.26 91.31 96.65 102.24 108.07 114.13 120.41 - 126.89 133.57 140.45 147.5 154.75 162.16 169.75 177.42 185.17 193.02 201 209.09 217.3 225.64 234.09 242.66 - 251.92 261.89 271.59 281.43 291.08 300.77 310.53 320.45 / - 8 3 14 1 60.93 66.82 72.46 78.28 84.51 91.2 98.36 105.95 113.98 122.38 131.11 140.15 - 149.48 159.09 168.95 179.07 189.43 200.04 210.87 221.93 233.2 244.71 256.44 268.34 280.34 292.45 304.7 317.1 - 329.58 342.23 355.05 368.04 381.2 395.36 410.12 424.99 / - 8 3 15 1 58.15 66.13 75.34 85.52 96.33 107.79 119.87 131.31 144.1 157.45 171.03 185.29 - 199.93 213.93 228.71 244.34 260.33 276.68 293.4 310.48 327.94 345.79 364.03 382.63 401.56 420.74 440.18 459.75 - 477.69 499.75 520.49 541.6 562.44 583.68 607.28 630.26 / - 8 3 16 1 57.16 74.48 92.45 110.27 128.33 147.41 166.89 186.77 206.99 229.21 250.06 273.55 - 297.67 319.73 345.15 371.19 397.5 424.88 453.06 481.97 510.55 540.18 570.98 602.84 635.4 668.6 702.46 736.32 - 771.39 809.16 847.66 886.72 926.49 966.21 1006.56 1047.23 / - 8 3 17 1 70.17 99.04 129.42 159.03 189.29 220.41 253.54 287.14 322.85 360.38 399.69 440.62 - 482.34 526.85 572.53 617.57 666.54 717.41 769.8 824.4 879.79 937.47 996.57 1058.42 1120.09 1181.9 1240.39 1294.92 - 1337.9 1386.21 1434.49 1484.7 1537.02 1589.91 1645.73 1698.88 / - 8 3 18 1 95.49 144.06 193.46 244.69 298 354.37 414.34 478.26 546.31 617.94 693.03 772.94 - 857.3 946.11 1038.38 1132.71 1229.58 1317.83 1401.38 1488.21 1576.37 1667.19 1761.41 1856.38 1951.6 2049.64 2146.18 2248.39 - 2346.26 2450.71 2556.09 2664.24 2772.75 2880.37 2990.76 3111.01 / - 8 3 19 1 137.89 215.37 299.27 393.91 495.99 606.79 727.92 859.64 1000.9 1151.21 1301.65 1445.26 - 1590.65 1750.96 1907.58 2070.54 2247.17 2419.77 2595.61 2779.49 2964.55 3157.22 3356.25 3555.96 3761.67 3970.1 4183.88 4406.93 - 4634.42 4857.11 5093.66 5322.88 5573.65 5825.14 6066.28 6323.14 / - 8 3 20 1 205.99 327.48 471.78 658.6 873.63 1116.05 1364.37 1609.03 1874.94 2151.78 2446.13 2759.51 - 3073.32 3420.29 3767.68 4122.95 4527.79 4917.05 5325.28 5739.93 6176.93 6615.9 7076.82 7531.09 8018.93 8517.07 9019.6 9524.94 - 10053.69 10604.71 11160.29 11729.8 12326.14 12901.98 13522.04 14157.95 / - 8 4 1 1 218.23 218.04 218.09 218.29 218.59 218.97 219.43 219.96 220.56 221.22 221.94 222.72 - 223.56 224.46 225.42 226.43 227.5 228.63 229.82 231.06 232.35 233.7 235.11 236.57 238.09 239.66 241.29 242.97 - 244.71 246.5 248.34 250.24 252.19 254.2 256.26 258.38 / - 8 4 2 1 218.14 217.94 217.99 218.18 218.48 218.86 219.32 219.85 220.44 221.1 221.82 222.6 - 223.45 224.34 225.3 226.32 227.39 228.52 229.7 230.94 232.24 233.59 235 236.47 237.98 239.56 241.19 242.87 - 244.61 246.4 248.24 250.14 252.1 254.11 256.17 258.29 / - 8 4 3 1 217.98 217.75 217.79 217.98 218.27 218.65 219.11 219.64 220.23 220.89 221.61 222.39 - 223.23 224.13 225.09 226.11 227.18 228.31 229.5 230.74 232.04 233.39 234.8 236.27 237.79 239.36 240.99 242.68 - 244.42 246.21 248.06 249.96 251.92 253.93 256 258.12 / - 8 4 4 1 217.66 217.4 217.43 217.6 217.89 218.27 218.72 219.25 219.84 220.5 221.22 222 - 222.84 223.74 224.7 225.72 226.79 227.92 229.11 230.36 231.66 233.01 234.43 235.89 237.42 239 240.63 242.32 - 244.07 245.86 247.72 249.63 251.59 253.61 255.68 257.81 / - 8 4 5 1 217.06 216.74 216.74 216.9 217.17 217.54 217.99 218.51 219.11 219.76 220.48 221.26 - 222.11 223.01 223.97 224.99 226.07 227.2 228.39 229.64 230.95 232.31 233.73 235.21 236.74 238.32 239.97 241.66 - 243.42 245.22 247.09 249.01 250.98 253.01 255.09 257.23 / - 8 4 6 1 215.73 215.21 215.08 215.16 215.38 215.7 216.12 216.63 217.2 217.85 218.57 219.35 - 220.19 221.1 222.07 223.1 224.19 225.34 226.55 227.82 229.14 230.53 231.97 233.47 235.02 236.63 238.3 240.03 - 241.81 243.65 245.55 247.5 249.5 251.56 253.68 255.85 / - 8 4 7 1 211.29 208.8 208.33 208.21 208.28 208.55 208.94 209.44 210.02 210.7 211.45 212.28 - 213.18 214.16 215.2 216.31 217.48 218.68 219.98 221.34 222.77 224.27 225.82 227.43 229.11 230.85 232.65 234.51 - 236.42 238.4 240.43 242.51 244.66 246.86 249.12 251.44 / - 8 4 8 1 198.95 191.89 190.83 190.47 190.48 190.73 191.16 191.76 192.48 193.33 194.28 195.34 - 196.49 197.71 199.03 200.44 201.93 203.5 205.14 206.83 208.62 210.48 212.4 214.4 216.45 218.55 220.74 222.99 - 225.29 227.65 230.08 232.56 235.11 237.7 240.36 243.07 / - 8 4 9 1 167.89 157.99 156.36 155.97 156.09 156.68 157.56 158.66 159.97 161.46 163.11 164.87 - 166.78 168.82 170.93 173.19 175.49 177.93 180.45 183.01 185.7 188.41 191.23 194.11 197.01 200.01 203.03 206.13 - 209.29 212.47 215.72 219 222.93 226.32 229.76 233.25 / - 8 4 10 1 117.12 113.52 113.02 113.67 115 116.73 118.77 121.04 123.58 126.24 129.05 132.08 - 135.16 138.46 141.77 145.3 148.79 152.53 156.18 159.91 163.9 167.76 171.83 175.97 180.01 184.21 188.46 192.64 - 197.08 201.35 205.96 210.32 214.69 219.55 223.94 228.36 / - 8 4 11 1 81.29 82.46 84.79 87.49 90.36 93.38 96.55 100.05 103.63 107.32 111.14 115.1 - 119.19 123.38 127.69 132.11 136.64 141.27 146 150.83 155.75 160.74 165.8 170.98 175.99 181.3 186.7 192.16 - 197.39 202.98 208.65 214.01 219.81 225.64 231.13 237.08 / - 8 4 12 1 69.05 72.31 75.62 79.17 82.87 86.72 90.72 94.88 99.17 103.6 108.16 112.87 - 117.72 122.72 127.85 133.11 138.5 144.02 149.66 155.41 161.73 168.47 175.03 181.64 188.19 194.81 201.56 208.3 - 215.42 222.36 229.38 236.48 243.67 250.94 257.88 265.24 / - 8 4 13 1 65.22 69.42 73.31 77.4 81.78 86.54 91.62 96.99 102.63 108.5 114.61 120.93 - 127.46 134.18 141.1 148.21 155.5 162.97 170.6 178.32 186.13 194.03 202.06 210.2 218.47 226.86 235.37 244 - 253.04 262.79 272.91 282.67 292.55 302.4 312.22 322.19 / - 8 4 14 1 60.85 66.84 72.58 78.46 84.75 91.49 98.7 106.32 114.38 122.83 131.61 140.69 - 150.07 159.72 169.63 179.8 190.22 200.87 211.77 222.88 234.21 245.77 257.56 269.52 281.58 293.75 306.07 318.52 - 331.08 343.8 356.69 369.75 382.98 396.82 411.7 426.32 / - 8 4 15 1 58.1 66.15 75.42 85.67 96.54 108.05 120.17 131.87 144.49 157.89 171.51 185.81 - 200.49 214.56 229.4 245.08 261.12 277.52 294.28 311.42 328.93 346.82 365.1 383.77 402.78 422.04 441.57 461.22 - 479.23 501.37 522.19 543.37 564.3 584.66 608.38 634.22 / - 8 4 16 1 57.13 74.57 92.51 110.39 128.85 147.61 167.12 187.03 207.29 229.63 250.43 274 - 298.16 320.3 345.75 371.91 398.21 425.62 453.83 482.76 511.37 541.49 571.84 603.7 636.24 669.52 703.43 737.33 - 772.43 809.27 847.84 887.08 927.14 967.19 1007.58 1048.01 / - 8 4 17 1 70.11 99.01 129.57 159.11 189.42 220.83 253.83 287.31 323.02 361.37 399.87 440.87 - 482.54 527.05 572.74 617.77 666.66 717.45 769.85 824.38 879.83 937.47 996.54 1058.1 1120.05 1181.97 1241.27 1296.41 - 1341.43 1391.35 1441.35 1493.23 1547.19 1601.7 1660.06 1714.24 / - 8 4 18 1 95.35 144.02 193.4 244.76 298.14 354.53 414.48 478.31 546.23 617.81 692.75 772.49 - 856.6 945.2 1037.45 1131.86 1228.55 1317.66 1402.18 1490.48 1579.68 1669.84 1765.6 1861.55 1957.91 2056.91 2155.96 2259.39 - 2356.94 2462.62 2569.37 2678.8 2788.57 2899.47 3011.54 3133.19 / - 8 4 19 1 137.7 215.19 298.82 393.23 496.06 606.7 727.65 859.06 999.98 1150.06 1300.95 1445.18 - 1591.23 1752.21 1909.6 2073.42 2251.64 2426.98 2606.87 2792 2979.67 3175.09 3376.73 3579.09 3783.25 3998.46 4214.74 4434.97 - 4668.85 4895.79 5134.68 5367.16 5620.47 5874.36 6118.85 6378.66 / - 8 4 20 1 205.78 327.36 469.2 655.28 868.96 1109.5 1359.35 1609.56 1876.49 2154.57 2450.3 2765.23 - 3080.72 3429.72 3778.81 4136.29 4510.92 4940.49 5346.72 5763.84 6208.78 6649.88 7116.83 7582.87 8076.64 8581.17 9089.64 9600.94 - 10135.64 10693.18 11255.9 11832.64 12436.31 13019.54 13647.02 14290.67 / - 8 5 1 1 220.13 219.89 219.93 220.12 220.41 220.79 221.25 221.78 222.37 223.03 223.75 224.53 - 225.38 226.28 227.23 228.25 229.32 230.46 231.64 232.89 234.19 235.54 236.95 238.42 239.94 241.52 243.15 244.84 - 246.58 248.38 250.23 252.14 254.1 256.12 258.19 260.31 / - 8 5 2 1 220.03 219.79 219.82 220.01 220.3 220.68 221.13 221.66 222.25 222.91 223.63 224.42 - 225.26 226.16 227.12 228.13 229.21 230.34 231.53 232.77 234.07 235.43 236.84 238.31 239.83 241.41 243.04 244.73 - 246.48 248.28 250.13 252.04 254 256.02 258.09 260.22 / - 8 5 3 1 219.86 219.59 219.62 219.8 220.09 220.46 220.92 221.44 222.04 222.69 223.41 224.2 - 225.04 225.94 226.9 227.91 228.99 230.12 231.31 232.56 233.86 235.22 236.63 238.1 239.63 241.21 242.84 244.53 - 246.28 248.08 249.94 251.85 253.81 255.83 257.91 260.04 / - 8 5 4 1 219.53 219.23 219.24 219.41 219.69 220.06 220.51 221.04 221.63 222.29 223.01 223.79 - 224.63 225.53 226.49 227.51 228.59 229.72 230.91 232.16 233.46 234.83 236.24 237.72 239.24 240.83 242.47 244.16 - 245.91 247.72 249.58 251.5 253.47 255.5 257.58 259.71 / - 8 5 5 1 218.89 218.54 218.52 218.67 218.95 219.31 219.76 220.28 220.87 221.53 222.25 223.03 - 223.87 224.77 225.74 226.76 227.84 228.98 230.17 231.42 232.73 234.1 235.52 237 238.54 240.13 241.78 243.48 - 245.24 247.05 248.93 250.85 252.83 254.87 256.96 259.11 / - 8 5 6 1 217.4 216.79 216.62 216.67 216.88 217.2 217.62 218.12 218.69 219.34 220.05 220.83 - 221.68 222.59 223.56 224.6 225.69 226.84 228.06 229.33 230.66 232.05 233.5 235.01 236.57 238.19 239.87 241.61 - 243.4 245.25 247.16 249.12 251.14 253.22 255.35 257.54 / - 8 5 7 1 212.57 209.86 209.24 209.12 209.22 209.48 209.87 210.37 210.95 211.63 212.39 213.22 - 214.13 215.11 216.16 217.28 218.47 219.72 221.04 222.43 223.87 225.38 226.95 228.58 230.28 232.03 233.85 235.73 - 237.63 239.63 241.68 243.79 245.97 248.2 250.48 252.83 / - 8 5 8 1 198.88 192.14 191.06 190.69 190.69 190.95 191.4 192 192.75 193.61 194.59 195.67 - 196.84 198.08 199.43 200.87 202.4 204 205.67 207.39 209.21 211.11 213.07 215.1 217.17 219.34 221.56 223.84 - 226.19 228.59 231.05 233.58 236.17 238.8 241.5 244.25 / - 8 5 9 1 168.1 157.56 156.06 155.63 155.87 156.49 157.39 158.45 159.78 161.28 162.94 164.72 - 166.66 168.72 170.85 173.12 175.49 178.16 180.73 183.33 186.04 188.83 191.64 194.58 197.53 200.58 203.65 206.82 - 210.03 213.26 216.57 219.9 223.3 226.73 230.86 234.4 / - 8 5 10 1 116.97 113.57 113.17 113.85 115.19 116.94 119.01 121.31 123.82 126.57 129.41 132.39 - 135.59 138.82 142.27 145.7 149.37 152.98 156.83 160.6 164.63 168.53 172.64 176.66 180.9 185.14 189.44 193.67 - 198.15 202.47 207.07 211.49 215.99 220.47 225.46 229.96 / - 8 5 11 1 81.43 82.65 84.98 87.7 90.61 93.67 96.87 100.36 103.99 107.72 111.61 115.62 - 119.7 123.98 128.33 132.79 137.37 142.04 146.82 151.69 156.66 161.69 166.62 171.8 177.09 182.46 187.9 193.42 - 198.7 204.35 210.08 215.49 221.35 226.85 232.79 238.38 / - 8 5 12 1 69.15 72.48 75.8 79.36 83.09 86.97 91.01 95.2 99.54 104 108.61 113.37 - 118.27 123.3 128.48 133.79 139.22 144.79 150.47 156.27 162.33 169.15 175.95 182.57 189.28 196.03 202.84 209.64 - 216.54 223.52 230.59 237.74 244.97 252.29 259.69 267.13 / - 8 5 13 1 65.21 69.55 73.49 77.62 82.03 86.81 91.93 97.34 103.01 108.93 115.08 121.44 - 128.02 134.79 141.76 148.92 156.25 163.77 171.45 179.22 187.07 195.03 203.11 211.31 219.63 228.08 236.65 245.33 - 254.14 263.96 273.92 284.12 294.01 303.93 313.9 324.22 / - 8 5 14 1 60.77 66.86 72.69 78.64 84.98 91.77 99.02 106.69 114.79 123.27 132.1 141.23 - 150.66 160.35 170.32 180.53 191 201.7 212.65 223.82 235.21 246.82 258.66 270.68 282.81 295.05 307.43 319.94 - 332.56 345.35 358.31 371.44 384.75 398.23 412.78 427.97 / - 8 5 15 1 58.05 66.17 75.5 85.81 96.74 108.3 120.46 132.26 144.87 158.45 172.03 186.32 - 201.06 215.18 230.09 245.82 261.91 278.35 295.17 312.35 329.9 347.83 366.16 384.89 403.97 423.32 442.93 462.66 - 480.75 502.97 523.86 545.12 566.12 586.55 609.38 633.65 / - 8 5 16 1 57.11 74.58 92.57 110.51 129.01 147.81 167.35 187.28 207.57 229.95 250.79 274.42 - 298.63 321.17 346.32 372.52 398.89 426.34 454.58 483.53 512.16 541.98 572.65 604.52 637.05 670.34 704.35 738.97 - 773.42 809.78 848.45 887.83 927.7 967.73 1008.41 1048.81 / - 8 5 17 1 70.03 98.96 129.65 159.29 189.54 220.98 253.99 287.48 323.18 361.51 400.03 441.52 - 482.71 527.22 572.9 617.92 666.74 717.42 769.73 824.17 879.94 937.36 996.42 1057.62 1119.33 1181.88 1241.58 1298.07 - 1345.12 1396.53 1448.3 1502.67 1557.57 1613.89 1673.95 1729.98 / - 8 5 18 1 95.21 144.06 193.32 244.82 298.26 354.67 414.71 478.35 546.14 617.66 692.44 771.95 - 855.83 944.21 1036.34 1130.88 1226.69 1317.31 1402.98 1492.65 1582.01 1674.14 1770.84 1867.86 1965.39 2064.36 2164.42 2270.71 - 2369.57 2476.57 2584.72 2695.57 2806.84 2919.25 3033.02 3155.13 / - 8 5 19 1 137.5 215.01 298.41 392.5 495.03 606.63 726.18 857.01 998.64 1148.85 1300.12 1445.01 - 1591.67 1753.38 1911.57 2076.29 2248.27 2432.04 2614.47 2802.54 2992.17 3191.06 3392.63 3601.66 3808.83 4027.1 4246.28 4469.62 - 4704.16 4936.56 5178.09 5413.8 5663.05 5926.46 6174.44 6437.15 / - 8 5 20 1 205.57 327.26 465.89 651.94 867.97 1108.63 1353.67 1605.83 1866.03 2157.42 2454.64 2751.64 - 3088.41 3418.19 3790.51 4150.2 4527.18 4955.78 5368.01 5788.2 6234.88 6684.93 7160.54 7633.29 8133.54 8637.23 9160.06 9668.48 - 10219.02 10773.22 11353.79 11938.71 12536.48 13141.5 13777.01 14428.82 / - 8 6 1 1 222.24 221.87 221.86 222.01 222.29 222.66 223.11 223.63 224.22 224.87 225.59 226.37 - 227.21 228.11 229.07 230.08 231.16 232.29 233.48 234.73 236.03 237.39 238.8 240.27 241.8 243.38 245.02 246.71 - 248.46 250.27 252.12 254.04 256.01 258.03 260.11 262.24 / - 8 6 2 1 222.15 221.76 221.74 221.9 222.17 222.54 222.99 223.51 224.09 224.75 225.47 226.25 - 227.09 227.99 228.95 229.96 231.04 232.17 233.36 234.61 235.91 237.27 238.69 240.16 241.68 243.27 244.91 246.6 - 248.35 250.16 252.02 253.93 255.9 257.93 260.01 262.14 / - 8 6 3 1 221.96 221.56 221.53 221.68 221.95 222.32 222.76 223.28 223.87 224.52 225.24 226.02 - 226.86 227.76 228.72 229.74 230.81 231.95 233.14 234.38 235.69 237.05 238.47 239.94 241.47 243.06 244.7 246.39 - 248.15 249.95 251.82 253.73 255.71 257.74 259.82 261.96 / - 8 6 4 1 221.62 221.19 221.14 221.28 221.54 221.9 222.35 222.86 223.45 224.1 224.82 225.6 - 226.44 227.34 228.3 229.32 230.4 231.53 232.73 233.98 235.28 236.65 238.07 239.54 241.08 242.66 244.31 246.01 - 247.77 249.58 251.45 253.37 255.35 257.38 259.47 261.62 / - 8 6 5 1 220.97 220.47 220.4 220.52 220.78 221.13 221.57 222.08 222.67 223.32 224.04 224.82 - 225.66 226.56 227.52 228.54 229.62 230.76 231.96 233.21 234.53 235.9 237.32 238.8 240.34 241.94 243.59 245.3 - 247.07 248.89 250.77 252.7 254.69 256.73 258.83 260.99 / - 8 6 6 1 219.3 218.51 218.2 218.22 218.4 218.71 219.11 219.6 220.18 220.82 221.53 222.32 - 223.16 224.08 225.05 226.09 227.19 228.35 229.57 230.85 232.19 233.59 235.05 236.57 238.14 239.77 241.47 243.21 - 245.01 246.87 248.79 250.76 252.79 254.88 257.02 259.23 / - 8 6 7 1 214.13 210.86 210.28 210.1 210.14 210.39 210.78 211.27 211.86 212.55 213.31 214.15 - 215.07 216.06 217.09 218.22 219.41 220.68 222.01 223.41 224.87 226.4 227.99 229.64 231.35 233.13 234.97 236.87 - 238.82 240.84 242.92 245.06 247.26 249.51 251.83 254.2 / - 8 6 8 1 199.89 192.44 191.29 190.89 190.87 191.13 191.58 192.19 192.95 193.83 194.83 195.93 - 197.12 198.42 199.77 201.24 202.8 204.43 206.14 207.89 209.76 211.68 213.68 215.76 217.87 220.07 222.33 224.66 - 227.05 229.48 231.99 234.57 237.19 239.87 242.61 245.41 / - 8 6 9 1 168.08 157.22 155.78 155.38 155.66 156.31 157.16 158.33 159.69 161.22 162.92 164.74 - 166.72 168.79 171 173.28 175.69 178.15 180.74 183.42 186.43 189.26 192.12 195.09 198.07 201.15 204.31 207.48 - 210.75 214.03 217.4 220.79 224.25 227.74 231.29 234.88 / - 8 6 10 1 116.7 113.69 113.33 114.02 115.35 117.12 119.22 121.6 124.14 126.86 129.8 132.81 - 136.04 139.3 142.78 146.25 149.95 153.59 157.31 161.29 165.16 169.3 173.3 177.51 181.79 185.96 190.3 194.69 - 199.01 203.59 208 212.69 217.19 221.75 226.9 231.51 / - 8 6 11 1 81.59 82.86 85.16 87.92 90.88 93.99 97.24 100.65 104.42 108.18 112.12 116.14 - 120.3 124.53 129 133.5 138.11 142.83 147.65 152.4 157.39 162.48 167.62 172.85 178.19 183.61 189.11 194.38 - 200.01 205.72 211.14 216.97 222.89 228.45 234.45 240.1 / - 8 6 12 1 69.27 72.66 76.01 79.6 83.37 87.28 91.36 95.59 99.96 104.46 109.11 113.9 - 118.83 123.91 129.12 134.47 139.95 145.56 151.28 157.13 163.08 169.95 176.75 183.5 190.36 197.09 203.93 210.98 - 217.94 224.98 232.12 239.33 246.64 254.03 261.5 269.01 / - 8 6 13 1 65.2 69.69 73.7 77.88 82.33 87.13 92.28 97.72 103.43 109.38 115.57 121.97 - 128.59 135.41 142.42 149.62 157 164.56 172.29 180.11 188.01 196.02 204.15 212.41 220.78 229.29 237.91 246.65 - 255.52 264.8 275.15 285.25 295.29 305.45 315.57 325.67 / - 8 6 14 1 60.72 66.91 72.83 78.85 85.24 92.08 99.37 107.07 115.2 123.72 132.58 141.76 - 151.23 160.98 170.98 181.25 191.76 202.51 213.51 224.74 236.19 247.86 259.75 271.83 284.02 296.32 308.77 321.33 - 334.02 346.88 359.92 373.12 386.5 400.06 413.79 429.09 / - 8 6 15 1 58.02 66.23 75.61 85.97 96.96 108.55 120.76 133.09 145.27 158.87 172.51 186.83 - 201.61 216.58 230.75 246.54 262.68 279.17 296.03 313.26 330.85 348.83 367.2 385.97 405.11 424.54 444.24 463.66 - 482.22 504.52 525.49 546.82 567.9 588.39 610.78 634.65 / - 8 6 16 1 57.04 74.6 92.63 110.7 129.16 148.01 167.58 187.54 207.85 230.26 251.14 274.8 - 299.09 322.1 346.87 373.11 399.65 427.03 455.29 484.26 512.91 543.35 573.43 605.29 637.79 671.07 705.19 739.34 - 774.37 810.73 848.41 887.87 927.92 968.28 1008.83 1050.04 / - 8 6 17 1 69.95 98.9 129.66 159.62 189.66 221.11 254.14 287.64 323.33 361.66 400.16 441.63 - 482.83 527.35 573.02 618.02 666.75 717.33 769.51 823.84 880.14 937.11 996.17 1056.45 1119.03 1181.82 1242.29 1298.53 - 1348.82 1401.73 1455.31 1511.42 1568.1 1626.32 1688.06 1747.08 / - 8 6 18 1 95.08 144.1 193.25 244.93 298.37 354.8 414.83 478.38 546.04 617.47 692.19 771.37 - 854.93 943.12 1035.07 1129.73 1225.83 1315.2 1401.8 1492.23 1583.04 1676.17 1773.75 1871.67 1970.44 2070.47 2172.99 2278.84 - 2380.77 2489.04 2598.45 2709.19 2823.63 2937.48 3052.88 3176.28 / - 8 6 19 1 137.3 214.82 297.84 392.45 495.06 605.19 725.87 856.13 997.62 1147.57 1299.91 1444.67 - 1592.01 1746.37 1913.48 2079.14 2252.08 2437.03 2623.75 2810.17 3001.39 3204.47 3410.31 3622.68 3833.36 4055.05 4277.52 4504.33 - 4747.03 4978.16 5223.02 5462.07 5714.87 5981.47 6233.04 6499.09 / - 8 6 20 1 205.35 327.18 462.37 648.96 862.71 1102 1353.06 1602.67 1867.61 2146.01 2442.13 2757.91 - 3096.43 3428.14 3802.81 4165.55 4544.21 4979.16 5390.35 5813.39 6258.89 6715.82 7194.29 7678.17 8180.89 8699.32 9229.64 9745.39 - 10303.07 10865.08 11443.03 12047.19 12654.05 13263.22 13911.88 14572.58 / - 8 7 1 1 224.36 223.86 223.78 223.91 224.17 224.52 224.96 225.48 226.06 226.71 227.43 228.2 - 229.04 229.94 230.9 231.91 232.99 234.12 235.31 236.56 237.87 239.23 240.65 242.12 243.65 245.24 246.88 248.58 - 250.33 252.14 254.01 255.93 257.9 259.93 262.02 264.16 / - 8 7 2 1 224.26 223.74 223.67 223.79 224.05 224.4 224.84 225.35 225.93 226.58 227.3 228.08 - 228.91 229.81 230.77 231.79 232.86 234 235.19 236.44 237.74 239.11 240.52 242 243.53 245.12 246.76 248.46 - 250.22 252.03 253.89 255.82 257.79 259.83 261.91 264.06 / - 8 7 3 1 224.08 223.54 223.45 223.57 223.82 224.17 224.61 225.12 225.7 226.35 227.06 227.84 - 228.68 229.58 230.54 231.56 232.63 233.77 234.96 236.21 237.51 238.88 240.3 241.78 243.31 244.9 246.54 248.25 - 250 251.82 253.69 255.61 257.59 259.63 261.72 263.86 / - 8 7 4 1 223.72 223.15 223.05 223.15 223.4 223.75 224.18 224.69 225.27 225.92 226.63 227.41 - 228.25 229.15 230.1 231.12 232.2 233.34 234.53 235.78 237.09 238.46 239.88 241.36 242.9 244.49 246.14 247.85 - 249.61 251.43 253.3 255.23 257.22 259.26 261.36 263.51 / - 8 7 5 1 223.05 222.42 222.28 222.38 222.61 222.95 223.38 223.88 224.46 225.11 225.82 226.6 - 227.44 228.34 229.3 230.32 231.4 232.54 233.74 235 236.31 237.68 239.11 240.6 242.14 243.74 245.4 247.12 - 248.89 250.71 252.6 254.54 256.53 258.58 260.69 262.86 / - 8 7 6 1 221.18 220.17 219.74 219.72 219.87 220.15 220.54 221.02 221.59 222.22 222.93 223.71 - 224.56 225.47 226.45 227.49 228.59 229.76 230.98 232.27 233.61 235.02 236.48 238.01 239.59 241.23 242.93 244.69 - 246.51 248.38 250.31 252.3 254.35 256.46 258.62 260.84 / - 8 7 7 1 215.66 211.95 211.16 210.95 211 211.23 211.6 212.08 212.67 213.35 214.11 214.96 - 215.88 216.89 217.96 219.1 220.31 221.59 222.94 224.35 225.83 227.38 228.99 230.67 232.4 234.2 236.06 237.94 - 239.93 241.97 244.07 246.24 248.46 250.74 253.08 255.48 / - 8 7 8 1 200.9 192.67 191.43 190.99 190.97 191.21 191.67 192.29 193.06 193.96 194.97 196.09 - 197.31 198.64 200.05 201.52 203.1 204.77 206.52 208.34 210.21 212.18 214.22 216.34 218.49 220.73 223.04 225.41 - 227.85 230.32 232.88 235.5 238.17 240.89 243.68 246.53 / - 8 7 9 1 168.06 156.87 155.46 155.12 155.43 156.04 157.01 158.21 159.6 161.17 162.89 164.76 - 166.76 168.89 171.13 173.46 175.89 178.44 181.04 183.75 186.51 189.38 192.66 195.64 198.72 201.81 205 208.21 - 211.5 214.82 218.23 221.67 225.19 228.76 232.34 236 / - 8 7 10 1 116.69 113.81 113.44 114.15 115.55 117.36 119.49 121.85 124.47 127.21 130.1 133.22 - 136.4 139.78 143.18 146.79 150.38 154.21 157.96 161.98 165.88 170.07 174.11 178.36 182.52 186.9 191.29 195.6 - 200.09 204.72 209.17 213.93 218.47 223.05 227.67 232.93 / - 8 7 11 1 81.73 83.07 85.37 88.18 91.2 94.35 97.63 101.05 104.83 108.68 112.6 116.66 - 120.84 125.16 129.57 134.1 138.74 143.48 148.32 153.27 158.3 163.43 168.63 173.9 179.29 184.5 190.02 195.63 - 201.32 206.74 212.56 218.46 224.02 230.05 235.71 241.83 / - 8 7 12 1 69.4 72.86 76.26 79.88 83.68 87.64 91.74 96 100.4 104.94 109.62 114.44 - 119.41 124.52 129.78 135.16 140.68 146.33 152.1 157.98 163.98 170.58 177.61 184.46 191.33 198.14 205.03 212.04 - 219.04 226.44 233.64 240.93 248.3 255.77 262.9 270.52 / - 8 7 13 1 65.21 69.84 73.93 78.16 82.64 87.48 92.66 98.13 103.87 109.85 116.07 122.51 - 129.17 136.02 143.07 150.31 157.74 165.35 173.12 180.99 188.94 197 205.18 213.49 221.92 230.48 239.16 247.96 - 256.88 265.92 276.03 286.27 296.78 306.96 317.16 327.4 / - 8 7 14 1 60.68 66.97 72.99 79.08 85.52 92.4 99.72 107.46 115.62 124.17 133.07 142.29 - 151.8 161.59 171.64 181.95 192.51 203.31 214.35 225.63 237.14 248.87 260.81 272.96 285.21 297.58 310.09 322.71 - 335.47 348.39 361.5 374.77 388.23 401.86 415.67 430.14 / - 8 7 15 1 58 66.29 75.73 86.15 97.19 108.82 121.05 132.93 145.65 159.28 172.96 187.32 - 202.14 216.95 231.39 247.24 263.43 279.97 296.87 314.14 331.78 349.8 368.2 387 406.19 425.71 445.5 465 - 483.64 506.03 527.07 548.47 569.62 590.18 612.63 635.51 / - 8 7 16 1 57.03 74.63 92.84 110.99 129.31 148.2 167.8 187.79 208.12 230.56 251.48 275.16 - 299.51 322.17 347.41 373.67 400.25 427.67 455.97 484.96 513.62 544.07 574.16 606.01 638.5 671.7 705.84 740.77 - 775.2 811.59 848.74 887.75 927.94 968.57 1009.39 1050.48 / - 8 7 17 1 69.87 98.88 129.66 159.68 189.78 221.27 254.3 288.15 324.3 361.89 400.25 441.7 - 482.89 527.43 573.09 619.35 666.72 717.17 769.28 823.4 879.6 936.66 995.75 1056.03 1118.06 1181.06 1242.45 1298.36 - 1352.06 1407.11 1462.34 1520.35 1579.69 1638.89 1702.3 1763.61 / - 8 7 18 1 94.93 143.97 193.18 244.96 298.47 355.05 414.94 478.52 545.93 617.24 691.8 770.75 - 854.02 941.95 1033.64 1128.37 1224.79 1316.15 1402.64 1494.04 1585.99 1680.27 1778.96 1878.02 1978.07 2079.47 2183.41 2290.57 - 2394.16 2503.89 2614.8 2727.13 2843.23 2958.74 3075.92 3200.8 / - 8 7 19 1 137.09 214.64 297.19 391.53 493.9 605.11 724.41 853.99 996.59 1146.2 1299.81 1439.73 - 1592.61 1747.28 1915.26 2081.92 2255.89 2441.95 2629.95 2817.62 3013.59 3214.94 3423.71 3640.07 3854.88 4078.88 4307.06 4537.67 - 4778.09 5019.37 5268.25 5511.11 5767.71 6029.68 6293.61 6563.46 / - 8 7 20 1 205.13 327.11 458.71 645.73 857.98 1094.71 1345.24 1600.16 1869.2 2149.01 2446.77 2764.44 - 3104.79 3438.62 3815.72 4182.37 4562.1 4960.14 5413.84 5839.95 6288.39 6744.75 7228.56 7718.64 8231.79 8750.61 9287.4 9820.96 - 10376.44 10957.12 11544 12157.49 12774.09 13392.93 14051.14 14721.45 / - 8 8 1 1 226.48 225.84 225.71 225.81 226.05 226.39 226.82 227.32 227.9 228.55 229.26 230.03 - 230.87 231.77 232.72 233.74 234.82 235.95 237.14 238.39 239.7 241.06 242.48 243.96 245.49 247.08 248.73 250.44 - 252.19 254.01 255.88 257.81 259.79 261.83 263.92 266.07 / - 8 8 2 1 226.38 225.72 225.59 225.68 225.92 226.26 226.69 227.19 227.77 228.42 229.13 229.9 - 230.74 231.63 232.59 233.61 234.68 235.82 237.01 238.26 239.57 240.93 242.36 243.83 245.37 246.96 248.61 250.31 - 252.07 253.89 255.76 257.69 259.68 261.72 263.81 265.96 / - 8 8 3 1 226.18 225.51 225.37 225.45 225.69 226.02 226.45 226.95 227.53 228.17 228.88 229.66 - 230.5 231.39 232.35 233.37 234.44 235.58 236.77 238.02 239.33 240.7 242.12 243.6 245.14 246.73 248.38 250.09 - 251.85 253.67 255.54 257.48 259.46 261.51 263.61 265.76 / - 8 8 4 1 225.82 225.11 224.95 225.03 225.25 225.58 226.01 226.51 227.08 227.73 228.44 229.21 - 230.05 230.94 231.9 232.92 234 235.14 236.33 237.58 238.89 240.26 241.69 243.17 244.71 246.31 247.96 249.67 - 251.44 253.27 255.15 257.08 259.07 261.12 263.23 265.39 / - 8 8 5 1 225.13 224.36 224.15 224.21 224.42 224.74 225.15 225.65 226.22 226.86 227.57 228.34 - 229.18 230.08 231.04 232.06 233.14 234.28 235.48 236.74 238.05 239.43 240.86 242.35 243.9 245.5 247.16 248.88 - 250.66 252.49 254.38 256.33 258.33 260.39 262.51 264.68 / - 8 8 6 1 223.03 221.68 221.18 221.11 221.24 221.51 221.88 222.36 222.91 223.55 224.26 225.04 - 225.89 226.8 227.78 228.83 229.94 231.11 232.34 233.63 234.99 236.4 237.88 239.41 241.01 242.66 244.38 246.15 - 247.98 249.87 251.82 253.82 255.89 258.01 260.19 262.42 / - 8 8 7 1 217.14 212.79 211.94 211.7 211.74 211.95 212.32 212.8 213.39 214.08 214.85 215.7 - 216.64 217.65 218.73 219.89 221.12 222.37 223.74 225.17 226.67 228.24 229.87 231.56 233.32 235.14 237.03 238.98 - 240.99 243.06 245.19 247.38 249.63 251.94 254.31 256.72 / - 8 8 8 1 201.86 192.7 191.48 190.96 190.93 191.18 191.65 192.29 193.07 193.97 195.01 196.15 - 197.4 198.75 200.2 201.73 203.32 205.02 206.81 208.67 210.61 212.59 214.68 216.83 219.05 221.32 223.67 226.1 - 228.58 231.1 233.71 236.37 239.1 241.87 244.71 247.6 / - 8 8 9 1 168.5 156.37 155.03 154.84 155.12 155.84 156.84 158.08 159.5 161.11 162.87 164.77 - 166.82 168.98 171.25 173.64 176.12 178.7 181.35 184.12 186.94 189.82 192.81 195.86 199.33 202.48 205.73 209.04 - 212.35 215.76 219.18 222.67 226.18 229.78 233.42 237.12 / - 8 8 10 1 116.72 113.87 113.6 114.34 115.77 117.61 119.76 122.15 124.74 127.56 130.48 133.55 - 136.84 140.15 143.68 147.21 150.96 154.67 158.62 162.48 166.61 170.62 174.92 179.05 183.41 187.85 192.15 196.63 - 201.17 205.62 210.36 214.9 219.76 224.39 229.06 234.32 / - 8 8 11 1 81.88 83.3 85.64 88.49 91.54 94.72 98.03 101.47 105.23 109.11 113.09 117.2 - 121.43 125.79 130.24 134.8 139.48 144.26 149.15 154.13 159.21 164.39 169.63 174.75 180.14 185.64 191.23 196.89 - 202.31 208.11 213.98 219.56 225.57 231.66 237.38 243.56 / - 8 8 12 1 69.54 73.08 76.52 80.18 84.01 87.99 92.12 96.41 100.85 105.42 110.14 115 - 120 125.15 130.44 135.86 141.42 147.1 152.91 158.84 164.87 171.36 178.47 185.4 192.29 199.2 206.28 213.36 - 220.43 227.58 234.83 242.17 249.59 257.11 264.71 272.4 / - 8 8 13 1 65.23 70 74.18 78.45 82.97 87.83 93.03 98.53 104.3 110.33 116.58 123.06 - 129.75 136.64 143.73 151.01 158.48 166.13 173.95 181.86 189.86 197.97 206.21 214.57 223.05 231.67 240.4 249.26 - 258.24 267.33 276.87 287.53 297.93 308.26 318.72 329.13 / - 8 8 14 1 60.67 67.06 73.17 79.33 85.81 92.72 100.07 107.85 116.04 124.63 133.56 142.82 - 152.36 162.19 172.29 182.64 193.24 204.09 215.18 226.5 238.06 249.85 261.85 274.06 286.38 298.81 311.39 324.07 - 336.89 349.88 363.05 376.4 389.93 403.63 417.52 431.59 / - 8 8 15 1 57.99 66.37 75.87 86.44 97.42 109.08 121.35 133.26 146 159.67 173.47 187.79 - 202.65 217.72 232.39 247.91 264.16 280.75 297.69 315 332.68 350.73 369.17 388 407.23 426.82 446.69 466.8 - 486.7 507.47 528.59 549.46 571.28 591.9 614.42 637.35 / - 8 8 16 1 57.03 74.65 92.95 111.09 129.45 148.38 168 188.01 208.37 230.82 251.78 275.49 - 299.88 324.12 347.88 374.19 400.79 428.27 456.6 485.6 514.29 544.73 574.82 606.66 639.13 672.27 706.34 741.35 - 775.91 812.32 849.49 887.41 927.7 968.57 1009.2 1050.93 / - 8 8 17 1 69.79 98.8 129.67 159.75 190.36 221.65 254.44 288.97 324.81 361.99 400.33 441.75 - 482.91 527.46 573.11 618.36 666.64 716.94 769.04 822.87 878.9 935.96 995.14 1055.44 1117.23 1179.86 1242.22 1299.54 - 1355.01 1411.91 1469.36 1529.2 1590.43 1651.62 1717.52 1779.65 / - 8 8 18 1 94.78 143.98 193.05 244.97 298.63 355.15 415.07 478.56 545.8 616.98 691.38 770.08 - 853.07 940.69 1032.11 1126.77 1223.53 1316.24 1402.86 1495.41 1588.82 1684.42 1783.38 1884.61 1985.99 2088.85 2194.27 2302.86 - 2408.1 2519.46 2631.95 2745.95 2863.84 2981.12 3100.16 3226.59 / - 8 8 19 1 136.88 214.46 296.68 390.58 493.91 603.64 723.96 853.33 992.23 1144.76 1298.41 1439 - 1593.69 1748.04 1916.95 2084.57 2259.6 2438.24 2636.28 2825.15 3021.72 3224.01 3435.07 3649.68 3871.29 4099.44 4332.23 4567.44 - 4812.3 5058.27 5311.63 5559.14 5820.15 6086.24 6354.86 6629.09 / - 8 8 20 1 204.91 327.07 453.21 642.56 852.76 1093.81 1344.54 1594.91 1863.92 2152.15 2451.66 2771.28 - 3090.99 3449.7 3798.62 4198.78 4580.99 4981.85 5438.7 5868.01 6319.63 6775.45 7264.62 7766.12 8270.42 8803.99 9349.91 9883.46 - 10457.39 11037.06 11644.5 12257.01 12895.25 13524.72 14179 14874.84 / - 8 9 1 1 228.58 227.82 227.64 227.7 227.92 228.25 228.67 229.16 229.74 230.38 231.09 231.86 - 232.69 233.59 234.54 235.56 236.63 237.77 238.96 240.21 241.52 242.89 244.31 245.79 247.33 248.92 250.57 252.28 - 254.05 255.87 257.74 259.68 261.67 263.71 265.81 267.97 / - 8 9 2 1 228.48 227.7 227.51 227.57 227.79 228.11 228.53 229.03 229.6 230.24 230.95 231.72 - 232.56 233.45 234.41 235.42 236.5 237.63 238.83 240.08 241.39 242.75 244.18 245.66 247.2 248.79 250.45 252.15 - 253.92 255.74 257.62 259.55 261.55 263.59 265.7 267.86 / - 8 9 3 1 228.28 227.48 227.28 227.34 227.55 227.87 228.29 228.78 229.35 229.99 230.7 231.47 - 232.3 233.2 234.16 235.17 236.25 237.39 238.58 239.83 241.14 242.51 243.94 245.42 246.96 248.56 250.21 251.92 - 253.69 255.51 257.39 259.33 261.32 263.37 265.48 267.64 / - 8 9 4 1 227.91 227.07 226.85 226.9 227.1 227.42 227.83 228.32 228.89 229.53 230.24 231.01 - 231.84 232.74 233.69 234.71 235.79 236.93 238.12 239.38 240.69 242.06 243.49 244.97 246.52 248.12 249.78 251.49 - 253.26 255.09 256.98 258.92 260.92 262.97 265.09 267.26 / - 8 9 5 1 227.17 226.25 225.98 225.99 226.17 226.47 226.87 227.36 227.92 228.55 229.26 230.03 - 230.86 231.76 232.72 233.74 234.82 235.96 237.16 238.42 239.74 241.11 242.55 244.04 245.6 247.21 248.87 250.6 - 252.38 254.22 256.12 258.07 260.09 262.16 264.28 266.46 / - 8 9 6 1 224.82 223.22 222.58 222.46 222.55 222.79 223.15 223.61 224.16 224.79 225.5 226.28 - 227.13 228.04 229.03 230.08 231.19 232.37 233.61 234.91 236.28 237.7 239.19 240.74 242.34 244.01 245.74 247.53 - 249.37 251.27 253.23 255.25 257.33 259.47 261.66 263.92 / - 8 9 7 1 218.56 213.71 212.71 212.41 212.39 212.58 212.93 213.4 213.99 214.67 215.45 216.31 - 217.25 218.27 219.36 220.54 221.78 223.1 224.48 225.94 227.46 229.04 230.7 232.42 234.2 236.05 237.96 239.94 - 241.94 244.03 246.19 248.42 250.7 253.04 255.44 257.9 / - 8 9 8 1 201.88 192.72 191.35 190.85 190.8 191.04 191.51 192.15 192.95 193.89 194.95 196.1 - 197.37 198.75 200.23 201.8 203.46 205.17 206.99 208.9 210.88 212.91 215.04 217.24 219.51 221.85 224.23 226.7 - 229.23 231.83 234.47 237.18 239.96 242.8 245.68 248.63 / - 8 9 9 1 168.43 156.06 154.76 154.59 154.89 155.64 156.67 157.93 159.4 161.05 162.86 164.79 - 166.87 169.07 171.39 173.81 176.33 178.97 181.68 184.47 187.34 190.31 193.33 196.41 199.59 203.2 206.47 209.84 - 213.23 216.68 220.2 223.73 227.34 230.96 234.66 238.37 / - 8 9 10 1 116.75 114 113.76 114.53 115.95 117.81 119.98 122.44 125.06 127.85 130.86 133.96 - 137.28 140.62 144.19 147.75 151.53 155.28 159.26 163.17 167.34 171.39 175.73 179.91 184.31 188.61 193.14 197.54 - 202.12 206.76 211.55 216.15 220.78 225.74 230.47 235.24 / - 8 9 11 1 82.03 83.55 85.92 88.79 91.87 95.09 98.43 101.9 105.54 109.58 113.57 117.74 - 121.98 126.36 130.81 135.5 140.22 145.04 149.97 154.99 159.94 165.15 170.44 175.8 181.24 186.79 192.43 197.84 - 203.62 209.48 215.41 221.04 227.11 232.85 239.05 245.3 / - 8 9 12 1 69.69 73.32 76.81 80.49 84.34 88.35 92.51 96.83 101.3 105.91 110.65 115.55 - 120.59 125.77 131.1 136.56 142.15 147.88 153.73 159.69 165.77 171.96 179.14 186.22 193.25 200.2 207.38 214.49 - 221.81 229.03 236.35 243.75 251.25 258.84 266.51 274.28 / - 8 9 13 1 65.27 70.18 74.44 78.75 83.3 88.18 93.41 98.94 104.74 110.79 117.08 123.6 - 130.33 137.26 144.39 151.71 159.22 166.91 174.77 182.73 190.78 198.93 207.22 215.63 224.17 232.84 241.63 250.54 - 259.58 268.73 278 288.41 298.97 309.54 320 330.41 / - 8 9 14 1 60.68 67.17 73.37 79.58 86.1 93.04 100.43 108.24 116.45 125.07 134.05 143.34 - 152.93 162.79 172.93 183.32 193.96 204.85 215.98 227.35 238.96 250.8 262.86 275.13 287.51 300.02 312.66 325.39 - 338.28 351.34 364.58 378 391.6 405.38 419.34 433.48 / - 8 9 15 1 57.98 66.47 76.01 86.81 97.64 109.34 121.63 134.12 146.35 160.05 173.89 188.25 - 203.15 218.42 232.67 248.54 264.85 281.49 298.47 315.82 333.53 351.62 370.09 388.95 408.21 427.84 447.8 467.5 - 488.43 508.84 530.04 550.97 572.86 593.55 616.13 639.11 / - 8 9 16 1 57.02 74.71 93.01 111.19 129.59 148.55 168.19 188.22 208.61 231.07 252.06 275.8 - 300.2 324.5 348.3 374.64 401.28 428.8 457.17 486.19 514.89 545.33 575.41 607.25 639.69 672.77 706.74 741.68 - 776.39 812.84 850.06 888 927.17 968.17 1009.07 1050.82 / - 8 9 17 1 69.7 98.73 129.76 159.79 190.45 221.78 254.57 289.1 324.91 362.06 400.36 441.77 - 482.88 527.43 573.07 618.72 666.49 716.65 768.59 822.25 878.08 935 994.25 1054.63 1115.91 1178.93 1241.53 1300.57 - 1358.24 1416.87 1476.52 1537.84 1600.51 1662.95 1729.77 1793.39 / - 8 9 18 1 94.62 143.98 192.96 244.95 298.71 355.23 415.13 478.54 545.7 616.69 690.93 769.38 - 852.04 939.35 1030.47 1124.89 1220.96 1315.23 1404.24 1495.46 1589.76 1688.5 1787.65 1890.85 1994.03 2098.59 2204.09 2315.81 - 2422.86 2535.83 2650.12 2765.88 2885.6 3004.82 3125.86 3253.95 / - 8 9 19 1 136.67 214.27 296.17 390.53 492.73 603.52 721.72 851.69 991.09 1138.81 1291.78 1438.21 - 1593.59 1748.79 1919.04 2089.21 2263.39 2443.24 2642.57 2832.86 3033.53 3233.52 3446.87 3663.82 3887.3 4117.46 4347.62 4591.47 - 4841.05 5085.75 5350.68 5603.23 5869.54 6140.36 6404.87 6693.6 / - 8 9 20 1 204.7 327.07 453.11 637.45 848.13 1086.54 1338.33 1590.15 1861.13 2155.46 2456.91 2778.51 - 3100.32 3461.46 3812.97 4215.91 4601.05 5004.92 5418.98 5897.84 6352.84 6812.4 7300.86 7807.83 8319.01 8848.52 9399.16 9948.76 - 10532.64 11123.2 11741.76 12365.55 13004.6 13656.88 14323.09 15015.03 / - 8 10 1 1 230.66 229.78 229.55 229.59 229.79 230.1 230.51 231 231.57 232.2 232.91 233.68 - 234.51 235.4 236.36 237.37 238.45 239.58 240.78 242.03 243.34 244.7 246.13 247.61 249.15 250.75 252.41 254.12 - 255.89 257.71 259.6 261.54 263.53 265.58 267.69 269.86 / - 8 10 2 1 230.55 229.66 229.42 229.46 229.65 229.97 230.37 230.86 231.43 232.06 232.77 233.54 - 234.37 235.26 236.22 237.23 238.31 239.44 240.64 241.89 243.2 244.57 245.99 247.48 249.02 250.62 252.27 253.99 - 255.76 257.58 259.47 261.41 263.4 265.46 267.57 269.73 / - 8 10 3 1 230.35 229.44 229.19 229.21 229.41 229.71 230.12 230.61 231.17 231.81 232.51 233.28 - 234.11 235 235.96 236.97 238.05 239.18 240.38 241.63 242.94 244.31 245.74 247.23 248.77 250.37 252.03 253.74 - 255.51 257.34 259.23 261.17 263.17 265.23 267.34 269.51 / - 8 10 4 1 229.97 229.02 228.74 228.76 228.94 229.25 229.65 230.13 230.69 231.33 232.03 232.8 - 233.63 234.52 235.48 236.49 237.57 238.71 239.9 241.16 242.47 243.84 245.27 246.76 248.31 249.91 251.58 253.29 - 255.07 256.91 258.8 260.74 262.75 264.81 266.93 269.11 / - 8 10 5 1 229.16 228.08 227.74 227.71 227.86 228.15 228.53 229.01 229.56 230.19 230.89 231.65 - 232.48 233.38 234.34 235.36 236.44 237.58 238.78 240.04 241.36 242.74 244.18 245.68 247.24 248.85 250.53 252.26 - 254.05 255.9 257.8 259.77 261.79 263.86 266 268.19 / - 8 10 6 1 226.54 224.56 223.91 223.72 223.73 223.96 224.32 224.77 225.32 225.95 226.66 227.44 - 228.3 229.22 230.21 231.27 232.39 233.57 234.82 236.13 237.48 238.9 240.4 241.96 243.58 245.26 247 248.8 - 250.66 252.58 254.56 256.6 258.7 260.86 263.07 265.35 / - 8 10 7 1 219.91 214.34 213.28 212.93 212.89 213.07 213.41 213.88 214.47 215.16 215.94 216.81 - 217.77 218.8 219.92 221.11 222.37 223.7 225.11 226.59 228.14 229.75 231.42 233.13 234.94 236.82 238.76 240.77 - 242.83 244.96 247.16 249.41 251.73 254.1 256.54 259.03 / - 8 10 8 1 202.7 192.52 191.16 190.58 190.52 190.76 191.24 191.89 192.7 193.66 194.74 195.94 - 197.25 198.66 200.14 201.75 203.44 205.23 207.1 209.01 211.04 213.15 215.33 217.55 219.87 222.26 224.72 227.22 - 229.81 232.46 235.17 237.92 240.76 243.65 246.59 249.6 / - 8 10 9 1 168.32 155.77 154.51 154.27 154.67 155.44 156.49 157.77 159.18 160.84 162.66 164.63 - 166.74 169.14 171.51 173.99 176.56 179.24 181.99 184.84 187.76 190.76 193.85 196.99 200.21 203.47 206.81 210.68 - 214.12 217.65 221.2 224.83 228.48 232.2 235.94 239.75 / - 8 10 10 1 116.76 114.07 113.87 114.68 116.16 118.06 120.25 122.69 125.38 128.19 131.17 134.37 - 137.62 141.1 144.58 148.28 151.97 155.89 159.74 163.86 167.87 172.16 176.31 180.77 185.04 189.55 193.94 198.59 - 203.22 207.91 212.5 217.4 222.09 227.1 231.88 236.71 / - 8 10 11 1 82.21 83.83 86.22 89.1 92.21 95.45 98.82 102.33 105.96 110.01 114.09 118.25 - 122.53 126.93 131.47 136.09 140.83 145.68 150.64 155.69 160.85 166.1 171.44 176.85 182.34 187.94 193.35 199.1 - 204.93 210.85 216.48 222.53 228.67 234.46 240.73 246.62 / - 8 10 12 1 69.86 73.59 77.1 80.8 84.68 88.71 92.9 97.26 101.76 106.39 111.18 116.11 - 121.18 126.4 131.76 137.26 142.89 148.65 154.54 160.54 166.66 172.89 179.77 187.11 194.23 201.2 208.46 215.61 - 222.89 230.16 237.53 244.98 252.53 260.17 267.9 275.72 / - 8 10 13 1 65.33 70.39 74.71 79.05 83.63 88.53 93.79 99.35 105.18 111.26 117.59 124.14 - 130.9 137.87 145.04 152.41 159.95 167.68 175.59 183.59 191.68 199.89 208.22 216.69 225.28 233.99 242.84 251.81 - 260.91 270.12 279.45 288.89 299.87 310.61 321.32 332.01 / - 8 10 14 1 60.72 67.31 73.57 79.83 86.39 93.37 100.78 108.62 116.86 125.51 134.52 143.86 - 153.49 163.39 173.56 183.99 194.67 205.6 216.77 228.18 239.83 251.71 263.83 276.16 288.61 301.19 313.9 326.69 - 339.64 352.77 366.08 379.57 393.24 407.09 421.12 435.34 / - 8 10 15 1 58 66.59 76.16 87.04 97.87 109.6 121.91 134.63 146.69 160.42 174.31 188.7 - 203.63 218.94 233.56 249.13 265.49 282.18 299.22 316.6 334.35 352.46 370.96 389.84 409.12 428.78 448.81 469.15 - 489.62 510.12 531.39 552.4 574.35 594.22 617.74 640.77 / - 8 10 16 1 56.95 74.73 93.06 111.29 129.71 148.71 168.37 188.42 208.82 231.29 252.3 276.07 - 300.48 323.81 348.68 375.04 401.84 429.26 457.66 486.71 515.42 545.85 575.93 607.74 640.16 673.17 707.05 741.88 - 776.81 813.07 850.38 888.36 926.93 966.79 1008.49 1050.6 / - 8 10 17 1 69.62 98.66 129.72 159.82 190.51 221.87 254.65 289.19 324.98 362.1 400.35 441.72 - 482.79 527.3 572.95 619.5 666.27 716.28 768.04 821.61 877.14 933.85 993.03 1053.53 1114.92 1176.93 1240.23 1301.09 - 1360.62 1421.01 1481.89 1544.77 1608.86 1672.83 1741.09 1806.55 / - 8 10 18 1 94.47 143.82 192.81 244.93 298.76 355.29 415.16 478.51 545.52 616.36 690.44 768.62 - 850.97 937.92 1028.68 1122.85 1219.1 1313.91 1403.46 1495.24 1591.46 1690.34 1789.34 1893.56 1998.39 2105.07 2213.16 2327.48 - 2439.67 2552.26 2668.89 2786.84 2906.71 3030.05 3153.27 3283.15 / - 8 10 19 1 136.45 214.11 295.47 389.58 492.72 602.03 721.33 850 989.93 1137.24 1290.21 1437.35 - 1593.47 1749.56 1913.49 2092.8 2267.25 2448.42 2649.08 2840.91 3043.12 3244.8 3458.29 3678.54 3903.57 4136.08 4368.53 4614.33 - 4866.08 5113.89 5383.35 5641.46 5913.67 6190.21 6459.98 6749.15 / - 8 10 20 1 204.49 327.12 453.15 633.53 839.46 1079.32 1330.39 1583.32 1858.64 2147.08 2448.99 2770.74 - 3110.39 3473.93 3828.34 4234.24 4622.39 5029.54 5447.09 5929.7 6388.34 6851.9 7339.85 7847.5 8363.22 8904.74 9459.92 10011.21 - 10593.11 11200.71 11816.62 12462.41 13114.01 13785.29 14462.31 15168.04 / - 8 11 1 1 232.71 231.73 231.46 231.47 231.65 231.95 232.35 232.83 233.39 234.02 234.72 235.49 - 236.32 237.21 238.16 239.18 240.25 241.39 242.58 243.83 245.14 246.51 247.94 249.43 250.97 252.57 254.23 255.94 - 257.72 259.55 261.44 263.38 265.38 267.44 269.56 271.73 / - 8 11 2 1 232.6 231.61 231.32 231.33 231.51 231.81 232.21 232.69 233.25 233.88 234.58 235.34 - 236.17 237.06 238.02 239.03 240.11 241.24 242.43 243.69 245 246.37 247.8 249.28 250.83 252.43 254.09 255.81 - 257.58 259.41 261.3 263.25 265.25 267.31 269.43 271.6 / - 8 11 3 1 232.39 231.38 231.08 231.08 231.25 231.55 231.94 232.43 232.98 233.61 234.31 235.07 - 235.9 236.79 237.75 238.76 239.84 240.97 242.17 243.42 244.73 246.1 247.53 249.02 250.57 252.17 253.83 255.55 - 257.33 259.16 261.05 263 265.01 267.07 269.19 271.37 / - 8 11 4 1 232 230.94 230.62 230.61 230.77 231.07 231.46 231.93 232.49 233.12 233.81 234.58 - 235.4 236.3 237.25 238.26 239.34 240.48 241.67 242.93 244.24 245.62 247.05 248.54 250.09 251.7 253.36 255.08 - 256.87 258.7 260.6 262.55 264.57 266.63 268.76 270.94 / - 8 11 5 1 231.1 229.85 229.43 229.35 229.48 229.73 230.1 230.56 231.11 231.73 232.42 233.18 - 234.01 234.9 235.86 236.88 237.96 239.1 240.31 241.58 242.9 244.29 245.73 247.24 248.8 250.43 252.11 253.85 - 255.65 257.51 259.42 261.4 263.43 265.52 267.67 269.88 / - 8 11 6 1 228.18 225.86 225.01 224.8 224.83 225.03 225.37 225.81 226.35 226.97 227.68 228.46 - 229.31 230.23 231.23 232.29 233.42 234.61 235.87 237.19 238.57 240.02 241.53 243.11 244.74 246.44 248.2 250.02 - 251.9 253.84 255.84 257.89 260.01 262.19 264.42 266.72 / - 8 11 7 1 221.15 214.84 213.75 213.34 213.25 213.41 213.75 214.22 214.81 215.5 216.3 217.18 - 218.13 219.18 220.31 221.52 222.81 224.16 225.59 227.1 228.67 230.31 232 233.77 235.61 237.52 239.5 241.54 - 243.64 245.81 248.03 250.32 252.64 255.06 257.53 260.07 / - 8 11 8 1 203.45 192.31 190.78 190.21 190.13 190.36 190.83 191.5 192.33 193.31 194.42 195.65 - 196.96 198.41 199.96 201.6 203.33 205.14 207.05 209.05 211.13 213.25 215.48 217.79 220.13 222.58 225.09 227.67 - 230.29 233 235.78 238.61 241.48 244.44 247.45 250.51 / - 8 11 9 1 168.67 155.49 154.26 154.04 154.46 155.24 156.24 157.54 159.05 160.73 162.58 164.58 - 166.72 168.99 171.39 173.89 176.71 179.45 182.27 185.19 188.17 191.23 194.37 197.57 200.84 204.17 207.56 211.01 - 214.54 218.61 222.24 225.91 229.66 233.42 237.26 241.12 / - 8 11 10 1 116.85 114.21 114.03 114.86 116.38 118.26 120.52 122.98 125.65 128.54 131.55 134.78 - 138.06 141.46 145.08 148.7 152.54 156.5 160.39 164.54 168.6 172.93 177.12 181.38 185.95 190.32 194.94 199.63 - 204.18 208.91 213.7 218.4 223.4 228.19 233.31 238.19 / - 8 11 11 1 82.42 84.12 86.52 89.42 92.55 95.83 99.22 102.76 106.42 110.43 114.55 118.75 - 123.09 127.55 132.07 136.79 141.57 146.46 151.45 156.55 161.75 167.05 172.44 177.69 183.21 188.82 194.54 200.35 - 206.24 211.87 217.91 224.02 229.81 236.07 241.97 248.36 / - 8 11 12 1 70.05 73.86 77.4 81.12 85.02 89.08 93.31 97.69 102.22 106.89 111.71 116.67 - 121.78 127.03 132.43 137.96 143.63 149.43 155.35 161.39 167.55 173.82 180.39 187.82 195.07 202.37 209.55 216.74 - 224.06 231.6 239.03 246.55 254.18 261.89 269.69 277.6 / - 8 11 13 1 65.42 70.61 74.99 79.36 83.97 88.89 94.17 99.76 105.62 111.74 118.09 124.67 - 131.47 138.48 145.68 153.09 160.68 168.45 176.4 184.45 192.59 200.84 209.22 217.73 226.37 235.14 244.04 253.06 - 262.21 271.48 280.87 290.38 300.36 311.21 322.16 333.09 / - 8 11 14 1 60.79 67.46 73.78 80.09 86.68 93.69 101.14 109.01 117.28 125.95 134.99 144.35 - 154.02 163.97 174.18 184.65 195.37 206.33 217.54 228.98 240.67 252.59 264.74 277.13 289.66 302.31 315.08 327.93 - 340.96 354.15 367.52 381.08 394.82 408.74 422.85 437.14 / - 8 11 15 1 58.04 66.71 76.32 87.22 98.09 109.85 122.19 135.08 147.02 160.77 174.75 189.13 - 204.09 219.42 233.86 249.68 266.07 282.82 299.9 317.32 335.1 353.24 371.76 390.66 409.95 429.63 449.69 470.11 - 490.68 509.46 532.61 553.69 575.71 598.11 619.21 642.3 / - 8 11 16 1 56.95 74.76 93.12 111.37 129.83 148.85 168.54 188.6 209.01 231.48 252.5 276.28 - 300.73 324.07 348.97 375.36 402.24 429.61 458.06 487.13 515.85 546.27 576.4 608.14 640.52 673.46 707.25 741.95 - 777.26 812.93 850.35 888.42 927.03 966.26 1006.79 1049.15 / - 8 11 17 1 69.53 98.57 129.68 159.82 190.56 221.93 254.7 289.24 325.01 362.08 400.28 441.59 - 482.62 527.06 572.72 619.82 665.95 715.8 767.38 820.75 876.05 932.52 991.47 1052.02 1113.55 1175.09 1238.41 1300.24 - 1354.49 1411.91 1469.27 1528.33 1589.03 1649.69 1714.29 1774.82 / - 8 11 18 1 94.32 143.81 192.71 244.87 298.79 355.34 415.15 478.44 545.29 615.96 689.9 767.82 - 849.81 936.39 1026.78 1120.63 1216.79 1312.34 1402.5 1494.89 1591.76 1691.18 1791.01 1896.02 2001.64 2109.2 2218.18 2334 - 2449.78 2563.24 2682.82 2804 2927.05 3053.52 3179.54 3312.57 / - 8 11 19 1 136.24 213.96 295.11 388.63 491.48 602.01 720.89 849.09 986.42 1135.58 1288.65 1436.51 - 1587.05 1750.38 1915.32 2095.7 2271.36 2453.9 2641.03 2849.45 3053.22 3256.81 3472.05 3692.72 3921.13 4155.83 4390.72 4632.97 - 4892.55 5142.86 5407.46 5675.61 5951.33 6232.61 6507.91 6803.55 / - 8 11 20 1 204.29 327.23 453.45 627.4 834.16 1072.15 1322.62 1583.95 1856.39 2142.69 2454.86 2778.85 - 3121.3 3461.8 3844.89 4223.33 4645.49 5055.97 5477.31 5921.12 6426.65 6894.36 7386.41 7893.46 8413.88 8957.04 9517.06 10081.9 - 10658.54 11270.5 11902.67 12542.42 13211.72 13889.49 14559.47 15290.24 / - 8 12 1 1 234.7 233.66 233.34 233.33 233.5 233.79 234.18 234.65 235.21 235.83 236.53 237.29 - 238.12 239.01 239.96 240.97 242.05 243.18 244.37 245.63 246.94 248.31 249.74 251.23 252.77 254.38 256.04 257.76 - 259.53 261.37 263.26 265.21 267.22 269.28 271.4 273.58 / - 8 12 2 1 234.59 233.53 233.21 233.19 233.35 233.64 234.03 234.5 235.06 235.68 236.38 237.14 - 237.97 238.86 239.81 240.82 241.89 243.03 244.22 245.48 246.79 248.16 249.59 251.08 252.62 254.23 255.89 257.61 - 259.39 261.23 263.12 265.07 267.08 269.15 271.27 273.45 / - 8 12 3 1 234.38 233.29 232.96 232.93 233.09 233.37 233.76 234.23 234.78 235.41 236.1 236.86 - 237.69 238.58 239.53 240.54 241.62 242.75 243.94 245.2 246.51 247.88 249.32 250.81 252.35 253.96 255.62 257.35 - 259.13 260.97 262.86 264.82 266.83 268.9 271.02 273.21 / - 8 12 4 1 233.99 232.85 232.49 232.45 232.59 232.87 233.25 233.72 234.27 234.89 235.59 236.35 - 237.17 238.06 239.01 240.03 241.1 242.24 243.43 244.69 246 247.38 248.81 250.3 251.86 253.47 255.13 256.86 - 258.65 260.49 262.39 264.35 266.37 268.44 270.57 272.76 / - 8 12 5 1 232.92 231.54 231.04 230.91 231 231.23 231.58 232.03 232.56 233.18 233.86 234.62 - 235.44 236.34 237.29 238.31 239.4 240.54 241.75 243.02 244.35 245.75 247.2 248.71 250.28 251.92 253.61 255.36 - 257.17 259.04 260.97 262.95 265 267.1 269.26 271.48 / - 8 12 6 1 229.7 227.1 226.1 225.81 225.8 225.94 226.27 226.71 227.24 227.87 228.58 229.36 - 230.22 231.15 232.15 233.18 234.31 235.52 236.78 238.12 239.52 240.98 242.51 244.1 245.75 247.46 249.24 251.08 - 252.98 254.94 256.96 259.04 261.18 263.38 265.65 267.97 / - 8 12 7 1 222.28 215.28 213.99 213.54 213.45 213.6 213.92 214.39 214.98 215.68 216.48 217.37 - 218.36 219.43 220.57 221.8 223.11 224.49 225.95 227.46 229.07 230.74 232.48 234.29 236.17 238.09 240.1 242.18 - 244.32 246.52 248.79 251.12 253.5 255.95 258.47 261.05 / - 8 12 8 1 204.1 191.87 190.29 189.71 189.62 189.86 190.34 191.02 191.87 192.87 194.01 195.24 - 196.61 198.09 199.68 201.33 203.11 204.98 206.93 208.94 211.07 213.28 215.56 217.89 220.32 222.83 225.37 228.01 - 230.72 233.49 236.3 239.2 242.15 245.15 248.23 251.36 / - 8 12 9 1 168.42 155.24 154.02 153.82 154.25 154.99 156.07 157.4 158.92 160.63 162.51 164.54 - 166.71 169.01 171.43 173.98 176.63 179.38 182.23 185.43 188.48 191.61 194.83 198.12 201.45 204.85 208.32 211.84 - 215.42 219.05 223.26 227.02 230.82 234.67 238.59 242.53 / - 8 12 10 1 116.87 114.34 114.14 115.05 116.56 118.5 120.74 123.23 125.97 128.83 131.93 135.1 - 138.5 141.92 145.58 149.23 153.11 156.95 161.04 165.05 169.32 173.48 177.94 182.23 186.85 191.27 195.94 200.48 - 205.28 210.07 214.76 219.66 224.72 229.56 234.45 239.68 / - 8 12 11 1 82.66 84.41 86.83 89.74 92.91 96.21 99.63 103.19 106.88 110.73 115.02 119.26 - 123.61 128.12 132.72 137.38 142.19 147.1 152.12 157.25 162.47 167.8 173.22 178.73 184.3 189.96 195.74 201.61 - 207.23 213.24 219.33 225.13 231.37 237.69 243.65 250.11 / - 8 12 12 1 70.27 74.15 77.72 81.46 85.38 89.47 93.72 98.13 102.69 107.39 112.24 117.24 - 122.38 127.67 133.09 138.66 144.36 150.2 156.16 162.24 168.44 174.75 181.17 188.46 195.85 203.21 210.58 217.87 - 225.22 232.72 240.2 247.78 255.45 263.21 271.08 279.03 / - 8 12 13 1 65.56 70.84 75.27 79.68 84.32 89.26 94.56 100.18 106.07 112.21 118.6 125.21 - 132.04 139.08 146.32 153.75 161.38 169.19 177.19 185.29 193.48 201.77 210.2 218.76 227.44 236.26 245.21 254.29 - 263.5 272.82 282.27 291.83 301.51 312.07 323.15 334.31 / - 8 12 14 1 60.89 67.62 74.01 80.35 86.99 94.02 101.49 109.4 117.69 126.38 135.45 144.84 - 154.54 164.52 174.77 185.28 196.04 207.04 218.28 229.75 241.47 253.42 265.61 278.02 290.64 303.36 316.2 329.12 - 342.21 355.47 368.91 382.53 396.33 410.33 424.5 438.86 / - 8 12 15 1 58.12 66.84 76.48 87.41 98.61 110.1 122.46 135.38 147.33 161.1 175.22 189.54 - 204.52 219.88 234.61 250.19 266.6 283.37 300.51 317.97 335.78 353.94 372.48 391.39 410.68 430.36 450.43 470.89 - 491.54 510.41 533.66 554.81 576.9 599.36 620.51 643.65 / - 8 12 16 1 56.95 74.78 93.17 111.46 130.24 148.98 168.68 188.77 209.18 231.65 252.68 276.45 - 300.91 325.73 349.17 375.6 402.48 429.85 458.31 487.42 516.15 546.56 576.75 608.39 640.74 673.62 707.32 741.91 - 777.09 812.62 849.91 888.05 926.76 966.06 1005.95 1047.11 / - 8 12 17 1 69.44 98.48 129.62 160.1 190.58 222.2 254.71 289.22 324.98 362 400.14 441.37 - 482.34 526.72 572.57 619.45 665.53 715.25 766.84 819.81 874.86 931.26 989.73 1050.05 1111.75 1173.54 1236.16 1299.82 - 1354.3 1413 1470.9 1531.24 1592.42 1656.68 1720.46 1782.04 / - 8 12 18 1 94.16 143.67 192.61 244.79 298.8 355.38 415.1 478.31 545 615.48 689.29 767 - 848.65 934.81 1024.77 1118.26 1214.35 1310.18 1400.93 1493.9 1591.37 1691.4 1792.12 1897.95 2004.44 2112.97 2222.9 2339.93 - 2455.55 2571.28 2692.06 2814.58 2939.71 3068.78 3201.48 3334.36 / - 8 12 19 1 136.04 213.83 294.39 388.63 490.23 600.33 718.68 846.74 985.2 1133.86 1287.06 1435.65 - 1587.02 1751.32 1917.27 2098.76 2275.85 2459.81 2648.51 2858.53 3064.1 3269.7 3485.26 3707.92 3939.97 4171.97 4414.34 4659.12 - 4920.87 5173.85 5441.04 5704.5 5990.98 6274.97 6553.26 6852.01 / - 8 12 20 1 204.12 327.44 454.16 621.24 829.73 1065.15 1315.73 1575.95 1851.92 2146.99 2461.38 2787.9 - 3114.51 3476.68 3862.82 4244.59 4635.63 5084.75 5509.98 5957.83 6468.31 6940.34 7436.83 7948.68 8468.95 9016.92 9579.54 10160.79 - 10739.97 11357.4 11983.87 12641.19 13305.14 14001.8 14679.11 15400.89 / - 8 13 1 1 236.64 235.55 235.2 235.17 235.33 235.61 235.99 236.46 237.01 237.63 238.32 239.08 - 239.91 240.79 241.74 242.76 243.83 244.96 246.16 247.41 248.72 250.09 251.52 253.01 254.56 256.17 257.83 259.55 - 261.34 263.17 265.07 267.03 269.04 271.11 273.24 275.42 / - 8 13 2 1 236.53 235.42 235.06 235.03 235.18 235.46 235.84 236.31 236.86 237.48 238.17 238.93 - 239.75 240.64 241.59 242.6 243.67 244.8 246 247.25 248.56 249.94 251.37 252.86 254.41 256.01 257.68 259.4 - 261.19 263.03 264.92 266.88 268.89 270.97 273.1 275.28 / - 8 13 3 1 236.31 235.17 234.81 234.76 234.91 235.18 235.56 236.02 236.57 237.19 237.88 238.64 - 239.46 240.35 241.3 242.31 243.38 244.51 245.71 246.96 248.28 249.65 251.08 252.57 254.12 255.73 257.4 259.13 - 260.91 262.75 264.65 266.61 268.63 270.7 272.84 275.03 / - 8 13 4 1 235.91 234.7 234.3 234.24 234.37 234.64 235.01 235.47 236.01 236.62 237.31 238.07 - 238.89 239.78 240.73 241.74 242.81 243.95 245.14 246.4 247.71 249.09 250.53 252.02 253.58 255.19 256.86 258.59 - 260.38 262.23 264.13 266.1 268.12 270.2 272.34 274.54 / - 8 13 5 1 234.63 233.1 232.52 232.35 232.4 232.61 232.94 233.37 233.89 234.5 235.18 235.93 - 236.75 237.64 238.6 239.62 240.71 241.86 243.07 244.35 245.68 247.08 248.54 250.06 251.65 253.29 254.99 256.75 - 258.57 260.46 262.4 264.4 266.46 268.58 270.76 272.99 / - 8 13 6 1 231.09 227.92 226.9 226.58 226.55 226.71 227.01 227.44 227.96 228.58 229.28 230.07 - 230.93 231.86 232.87 233.95 235.1 236.31 237.59 238.94 240.36 241.84 243.38 244.99 246.66 248.39 250.19 252.05 - 253.97 255.96 258 260.11 262.28 264.51 266.8 269.15 / - 8 13 7 1 223.27 215.55 214.08 213.58 213.46 213.58 213.9 214.36 214.96 215.67 216.48 217.39 - 218.39 219.48 220.66 221.89 223.23 224.64 226.13 227.69 229.33 231.04 232.79 234.64 236.56 238.55 240.6 242.71 - 244.89 247.14 249.44 251.82 254.26 256.76 259.32 261.94 / - 8 13 8 1 203.78 191.34 189.74 189.15 189.07 189.33 189.83 190.53 191.41 192.41 193.57 194.86 - 196.26 197.78 199.41 201.09 202.91 204.83 206.84 208.89 211.06 213.32 215.62 218.03 220.51 223.05 225.65 228.34 - 231.1 233.9 236.79 239.75 242.75 245.84 248.98 252.17 / - 8 13 9 1 168.11 154.99 153.69 153.6 153.98 154.81 155.91 157.25 158.8 160.54 162.44 164.5 - 166.7 169.03 171.49 174.06 176.75 179.54 182.43 185.42 188.77 191.94 195.2 198.53 201.93 205.41 208.97 212.6 - 216.26 219.97 223.74 227.55 231.98 235.92 239.9 243.93 / - 8 13 10 1 116.97 114.41 114.31 115.2 116.78 118.75 121.01 123.53 126.23 129.18 132.23 135.51 - 138.84 142.39 145.96 149.77 153.54 157.56 161.52 165.73 169.86 174.25 178.52 183.09 187.49 192.23 196.75 201.53 - 206.39 211.08 215.97 220.93 225.77 230.94 235.89 241.19 / - 8 13 11 1 82.91 84.71 87.15 90.08 93.27 96.6 100.05 103.64 107.35 111.19 115.47 119.79 - 124.2 128.7 133.32 138.08 142.92 147.87 152.93 158.1 163.37 168.74 174.21 179.77 185.39 191.11 196.65 202.55 - 208.54 214.61 220.4 226.62 232.92 238.88 245.33 251.4 / - 8 13 12 1 70.51 74.45 78.05 81.82 85.76 89.88 94.15 98.59 103.18 107.91 112.79 117.82 - 122.99 128.31 133.77 139.37 145.1 150.97 156.97 163.09 169.32 175.67 182.13 189.09 196.76 204.21 211.59 218.98 - 226.39 233.92 241.68 249.33 257.07 264.92 272.86 280.89 / - 8 13 13 1 65.73 71.09 75.57 80.02 84.68 89.65 94.97 100.61 106.52 112.7 119.11 125.75 - 132.61 139.68 146.95 154.41 162.07 169.92 177.94 186.1 194.34 202.69 211.16 219.77 228.5 237.37 246.36 255.49 - 264.75 274.13 283.63 293.25 302.99 312.84 323.61 334.93 / - 8 13 14 1 61.02 67.81 74.24 80.63 87.3 94.36 101.86 109.78 118.1 126.82 135.91 145.32 - 155.05 165.05 175.33 185.87 196.67 207.71 218.98 230.48 242.23 254.2 266.41 278.85 291.52 304.33 317.23 330.22 - 343.37 356.7 370.2 383.89 397.76 411.82 426.06 440.49 / - 8 13 15 1 58.21 66.99 76.65 87.6 98.63 110.36 122.73 135.66 147.64 161.42 175.55 189.9 - 204.92 220.3 235.6 250.65 267.07 283.85 300.99 318.5 336.34 354.53 373.08 391.99 411.28 430.96 451.01 471.45 - 492.14 511.08 534.43 555.67 577.83 600.35 621.56 644.74 / - 8 13 16 1 56.95 74.8 93.22 111.54 130.34 149.09 168.81 188.9 209.32 231.79 252.83 276.55 - 301 325.45 349.27 375.72 402.61 429.95 458.39 487.5 516.26 546.67 577.41 608.44 640.76 673.59 707.22 741.72 - 776.32 812.17 849.31 887.31 926.1 965.59 1005.63 1046.19 / - 8 13 17 1 69.35 98.39 129.57 160.06 190.55 222.31 254.99 289.12 324.86 361.84 399.91 441.04 - 481.9 526.22 572.02 618.89 664.94 714.58 766.03 818.91 873.65 930.3 988.03 1048.08 1109.62 1172.1 1235.21 1296.9 - 1353.44 1412.76 1473.79 1533.71 1596.55 1660.69 1725.12 1789.24 / - 8 13 18 1 94.01 143.65 192.48 244.68 298.7 355.31 414.94 478.03 544.6 614.88 688.56 766.14 - 847.55 932.83 1022.9 1116.03 1212.15 1307.99 1399.33 1492.96 1590.81 1691.66 1793.21 1898.68 2007.2 2116.65 2227.66 2343.69 - 2462.3 2579.49 2701.47 2825.26 2951.69 3080.02 3217.85 3350.5 / - 8 13 19 1 135.84 213.74 294.01 387.74 490.17 600.32 718.41 845.99 982.22 1128.33 1285.57 1430.31 - 1587.19 1752.48 1919.51 2102.19 2280.76 2466.24 2656.72 2868.53 3075.75 3283.66 3501.32 3726.04 3958.64 4194.84 4443.35 4689.21 - 4945.01 5207.86 5477.17 5744.14 6033.56 6320.44 6602.47 6904.74 / - 8 13 20 1 203.98 327.77 455.11 616.34 821.79 1052.45 1307.75 1569.78 1850.05 2140.97 2451.71 2778.09 - 3127.32 3492.95 3858.19 4267.7 4662.88 5116.37 5545.9 5997.74 6457.43 6990.68 7492.54 8008.68 8529.49 9082.67 9651.66 10232.9 - 10818.38 11441.07 12073.04 12736.4 13420.38 14108.32 14811.85 15538.19 / - 8 14 1 1 238.5 237.39 237.03 236.99 237.14 237.41 237.79 238.25 238.8 239.42 240.1 240.86 - 241.68 242.57 243.51 244.52 245.6 246.73 247.92 249.18 250.49 251.86 253.29 254.78 256.33 257.94 259.61 261.34 - 263.12 264.96 266.87 268.83 270.84 272.92 275.05 277.24 / - 8 14 2 1 238.38 237.25 236.89 236.84 236.98 237.25 237.63 238.09 238.64 239.25 239.94 240.7 - 241.52 242.4 243.35 244.36 245.43 246.56 247.76 249.01 250.33 251.7 253.13 254.62 256.17 257.78 259.45 261.18 - 262.96 264.81 266.71 268.67 270.69 272.77 274.9 277.1 / - 8 14 3 1 238.17 237.01 236.62 236.57 236.7 236.97 237.34 237.8 238.34 238.95 239.64 240.39 - 241.21 242.1 243.05 244.06 245.13 246.26 247.45 248.71 250.02 251.4 252.83 254.32 255.88 257.49 259.16 260.89 - 262.67 264.52 266.43 268.39 270.41 272.49 274.63 276.83 / - 8 14 4 1 237.71 236.45 236.02 235.93 236.04 236.29 236.65 237.1 237.64 238.25 238.93 239.68 - 240.5 241.39 242.33 243.34 244.42 245.55 246.75 248.01 249.32 250.7 252.14 253.64 255.2 256.81 258.49 260.22 - 262.02 263.87 265.79 267.76 269.79 271.88 274.03 276.23 / - 8 14 5 1 236.18 234.53 233.87 233.59 233.63 233.82 234.14 234.56 235.08 235.68 236.36 237.11 - 237.93 238.83 239.79 240.81 241.9 243.06 244.28 245.56 246.9 248.31 249.78 251.31 252.9 254.55 256.27 258.04 - 259.88 261.77 263.73 265.74 267.82 269.96 272.15 274.41 / - 8 14 6 1 232.31 228.82 227.51 227.16 227.1 227.25 227.54 227.96 228.48 229.1 229.81 230.6 - 231.47 232.42 233.44 234.53 235.69 236.92 238.22 239.59 241.02 242.52 244.09 245.72 247.39 249.12 250.95 252.83 - 254.78 256.8 258.87 261.01 263.2 265.46 267.79 270.17 / - 8 14 7 1 224.07 215.49 213.91 213.37 213.23 213.34 213.65 214.12 214.72 215.44 216.27 217.2 - 218.2 219.31 220.51 221.79 223.16 224.61 226.13 227.73 229.41 231.12 232.95 234.84 236.8 238.83 240.93 243.08 - 245.31 247.61 249.98 252.41 254.89 257.44 260.06 262.74 / - 8 14 8 1 204.21 190.87 189.12 188.56 188.5 188.77 189.3 190.03 190.93 191.99 193.16 194.48 - 195.92 197.48 199.14 200.87 202.74 204.7 206.75 208.85 211.08 213.39 215.74 218.21 220.75 223.37 226.02 228.78 - 231.61 234.46 237.42 240.41 243.49 246.63 249.81 253.06 / - 8 14 9 1 167.73 154.61 153.46 153.39 153.79 154.63 155.76 157.12 158.69 160.45 162.38 164.46 - 166.69 169.06 171.55 174.16 176.89 179.71 182.64 185.67 188.78 191.98 195.58 198.96 202.41 205.94 209.53 213.19 - 216.91 220.7 224.57 228.53 232.5 237.12 241.18 245.29 / - 8 14 10 1 117.08 114.55 114.47 115.4 116.96 118.96 121.25 123.83 126.56 129.54 132.62 135.84 - 139.28 142.86 146.46 150.3 154.12 158.17 162.17 166.42 170.58 175.02 179.34 183.95 188.4 193.19 197.76 202.59 - 207.28 212.24 217.04 222.04 227.1 232.05 237.34 242.39 / - 8 14 11 1 83.17 85.02 87.48 90.44 93.65 97.01 100.49 104.1 107.84 111.71 115.93 120.33 - 124.75 129.29 133.93 138.71 143.66 148.65 153.75 158.96 164.27 169.68 174.99 180.58 186.26 192.01 197.84 203.8 - 209.84 215.63 221.82 228.1 234.07 240.5 247.02 253.15 / - 8 14 12 1 70.78 74.78 78.42 82.2 86.18 90.31 94.61 99.07 103.69 108.46 113.37 118.42 - 123.62 128.97 134.46 140.09 145.85 151.75 157.78 163.93 170.21 176.59 183.09 189.69 197.22 204.85 212.43 220.03 - 227.54 235.11 242.82 250.52 258.32 266.22 274.21 282.3 / - 8 14 13 1 65.93 71.37 75.89 80.37 85.06 90.05 95.39 101.05 106.99 113.19 119.63 126.3 - 133.18 140.28 147.57 155.07 162.75 170.62 178.67 186.89 195.19 203.59 212.1 220.75 229.53 238.44 247.48 256.66 - 265.96 275.39 284.94 294.62 304.42 314.33 324.36 335.34 / - 8 14 14 1 61.18 68.02 74.51 80.93 87.62 94.71 102.23 110.18 118.51 127.25 136.36 145.79 - 155.54 165.56 175.86 186.42 197.24 208.31 219.62 231.15 242.92 254.91 267.14 279.59 292.28 305.17 318.14 331.21 - 344.42 357.81 371.38 385.13 399.06 413.18 427.48 441.98 / - 8 14 15 1 58.32 67.16 76.84 87.81 99.15 110.61 123 135.94 147.93 161.72 175.85 190.2 - 205.24 220.65 235.97 251.03 267.45 284.22 301.36 318.86 336.72 354.94 373.5 392.42 411.69 431.35 451.38 471.78 - 492.02 511.35 534.76 556.09 578.34 600.93 622.2 645.43 / - 8 14 16 1 56.96 74.83 93.28 111.62 130.44 149.2 168.91 188.98 209.41 231.87 253.45 276.59 - 301 324.66 349.23 375.68 402.57 429.89 458.28 487.32 516.04 546.44 576.79 608.17 640.46 673.26 706.81 741.21 - 775.68 811.39 848.36 886.17 924.75 964.16 1004.39 1045.21 / - 8 14 17 1 69.27 98.33 129.59 160.01 190.48 222.24 255.02 288.94 324.6 361.55 399.54 440.56 - 481.27 525.46 571.18 618.05 664.09 713.67 764.99 817.68 872.2 928.6 986.04 1045.81 1107.28 1170.02 1232.92 1295.04 - 1352.84 1412.22 1474.13 1536.35 1600.12 1664.54 1730.43 1796.35 / - 8 14 18 1 93.87 143.54 192.24 244.56 298.52 355.1 414.67 477.57 543.97 614.06 687.51 764.99 - 846.23 931.22 1020.84 1113.84 1209.72 1305.49 1397.44 1493.06 1590.29 1691.59 1794.22 1900.5 2009.92 2120.4 2235.43 2349.62 - 2469.23 2589.12 2711.2 2836.47 2964.33 3096.57 3233.03 3367.33 / - 8 14 19 1 135.67 213.72 293.35 386.9 488.86 598.65 716.28 843.68 980.96 1127.01 1280.08 1429.48 - 1587.33 1755.69 1921.94 2095.09 2286.07 2473.24 2665.6 2867.07 3088.45 3298.76 3518.73 3744.27 3979.05 4218.85 4466.18 4722.3 - 4978.68 5244.37 5516.95 5787.47 6071.8 6370.02 6656.65 6956.52 / - 8 14 20 1 203.9 328.28 456.46 608.12 814.28 1042.22 1301.42 1561.91 1842.12 2133.32 2453.26 2789.53 - 3141.8 3489.18 3879.86 4293.64 4692.94 5112.53 5585.82 6042.13 6507.28 6994.49 7553.33 8074.95 8602.39 9156.25 9729.81 10316.12 - 10905.52 11533.88 12183.69 12842.63 13532.78 14228.71 14952.97 15672.83 / - 8 15 1 1 240.26 239.17 238.82 238.78 238.92 239.19 239.56 240.02 240.56 241.18 241.87 242.62 - 243.44 244.32 245.27 246.28 247.35 248.48 249.67 250.93 252.24 253.61 255.05 256.54 258.09 259.7 261.37 263.1 - 264.89 266.73 268.64 270.6 272.63 274.71 276.85 279.04 / - 8 15 2 1 240.15 239.04 238.67 238.62 238.76 239.03 239.4 239.86 240.4 241.01 241.7 242.45 - 243.27 244.15 245.1 246.1 247.18 248.31 249.5 250.75 252.07 253.44 254.87 256.37 257.92 259.53 261.2 262.93 - 264.72 266.57 268.48 270.44 272.47 274.55 276.69 278.89 / - 8 15 3 1 239.93 238.78 238.39 238.33 238.46 238.72 239.09 239.55 240.08 240.7 241.38 242.13 - 242.95 243.83 244.78 245.79 246.86 247.99 249.18 250.44 251.75 253.12 254.56 256.05 257.61 259.22 260.89 262.63 - 264.42 266.27 268.18 270.15 272.17 274.26 276.4 278.61 / - 8 15 4 1 239.35 238.06 237.59 237.48 237.57 237.81 238.16 238.6 239.13 239.73 240.41 241.16 - 241.97 242.86 243.8 244.81 245.89 247.02 248.22 249.48 250.8 252.18 253.63 255.13 256.69 258.32 260 261.74 - 263.55 265.41 267.33 269.31 271.35 273.45 275.61 277.83 / - 8 15 5 1 237.55 235.77 234.94 234.67 234.67 234.83 235.13 235.54 236.05 236.65 237.32 238.07 - 238.9 239.79 240.76 241.79 242.89 244.05 245.28 246.57 247.93 249.35 250.8 252.34 253.95 255.62 257.35 259.14 - 261 262.91 264.89 266.92 269.02 271.18 273.4 275.68 / - 8 15 6 1 233.31 229.21 228 227.49 227.41 227.54 227.82 228.23 228.75 229.38 230.09 230.89 - 231.77 232.73 233.76 234.87 236.05 237.25 238.57 239.96 241.42 242.94 244.53 246.19 247.92 249.7 251.56 253.48 - 255.46 257.5 259.61 261.78 264.02 266.31 268.67 271.09 / - 8 15 7 1 224.67 215.21 213.59 212.92 212.75 212.85 213.15 213.62 214.23 214.96 215.79 216.74 - 217.78 218.92 220.15 221.47 222.87 224.35 225.92 227.53 229.25 231.04 232.91 234.85 236.86 238.95 241.07 243.29 - 245.58 247.94 250.36 252.85 255.38 258 260.68 263.42 / - 8 15 8 1 204.53 190.18 188.46 187.93 187.89 188.2 188.75 189.51 190.44 191.53 192.76 194.1 - 195.57 197.17 198.88 200.69 202.56 204.57 206.68 208.83 211.11 213.48 215.93 218.41 221.02 223.7 226.41 229.24 - 232.13 235.06 238.09 241.18 244.31 247.53 250.81 254.13 / - 8 15 9 1 167.84 154.38 153.24 153.12 153.6 154.46 155.6 156.99 158.5 160.28 162.22 164.32 - 166.7 169.09 171.62 174.27 177.03 179.89 182.86 185.93 189.08 192.33 195.66 199.06 202.91 206.48 210.12 213.83 - 217.61 221.45 225.35 229.31 233.33 237.41 241.54 246.47 / - 8 15 10 1 117.07 114.68 114.58 115.55 117.19 119.22 121.54 124.09 126.9 129.84 133.01 136.26 - 139.73 143.23 146.97 150.71 154.69 158.63 162.81 166.93 171.31 175.59 180.15 184.57 189.31 193.86 198.77 203.44 - 208.39 213.18 218.26 223.32 228.44 233.45 238.8 243.91 / - 8 15 11 1 83.45 85.36 87.85 90.84 94.07 97.46 100.96 104.59 108.35 112.24 116.26 120.85 - 125.32 129.88 134.56 139.43 144.29 149.3 154.43 159.66 164.99 170.43 175.97 181.61 187.35 193.14 199.03 204.74 - 210.82 216.98 223.24 229.2 235.61 242.11 248.25 254.9 / - 8 15 12 1 71.09 75.15 78.82 82.63 86.63 90.8 95.12 99.6 104.25 109.04 113.98 119.05 - 124.28 129.65 135.16 140.82 146.61 152.54 158.6 164.78 171.08 177.5 184.03 190.67 197.84 205.57 213.29 220.84 - 228.44 236.28 244.04 251.69 259.54 267.49 275.54 283.7 / - 8 15 13 1 66.19 71.69 76.26 80.76 85.47 90.48 95.85 101.53 107.49 113.71 120.17 126.85 - 133.76 140.88 148.19 155.71 163.41 171.3 179.38 187.63 195.99 204.45 213.01 221.7 230.52 239.47 248.55 257.77 - 267.12 276.6 286.2 295.92 305.77 315.74 325.83 336.03 / - 8 15 14 1 61.39 68.29 74.81 81.26 87.98 95.08 102.61 110.58 118.92 127.67 136.8 146.25 - 156.01 166.04 176.35 186.92 197.75 208.83 220.14 231.7 243.5 255.51 267.75 280.21 292.89 305.81 318.85 332 - 345.29 358.75 372.37 386.18 400.17 414.35 428.71 443.26 / - 8 15 15 1 58.48 67.37 77.06 88.04 99.22 110.87 123.27 136.21 148.21 161.99 176.12 190.46 - 205.48 220.89 236.22 251.29 267.7 284.46 301.57 319.04 336.86 355.05 373.62 392.55 411.82 431.46 451.44 471.8 - 491.98 511.25 534.58 555.85 578.12 600.77 622.09 645.38 / - 8 15 16 1 57.07 74.86 93.35 111.82 130.53 149.29 168.98 189.03 209.84 231.87 253.13 276.54 - 300.89 325.91 348.99 375.4 402.3 429.58 457.89 486.85 515.46 545.74 576.06 607.28 639.59 672.38 705.89 740.18 - 775.2 810.07 846.86 884.48 922.94 962.26 1002.37 1043.26 / - 8 15 17 1 69.19 98.25 129.54 159.94 190.42 222.07 254.82 288.65 324.21 361.04 398.96 439.88 - 480.94 524.41 569.93 616.68 662.8 712.36 763.56 816.06 870.37 926.62 983.96 1043.55 1104.6 1166.91 1229.55 1291.89 - 1351.55 1410.27 1472.69 1536.08 1599.85 1664.84 1731.44 1798.02 / - 8 15 18 1 93.74 143.46 192.1 244.4 298.24 354.64 414.16 476.88 542.98 612.77 686.06 763.09 - 844.39 929.31 1018.82 1111.39 1206.76 1301.19 1395.09 1491.32 1589.96 1691.39 1795.48 1902.12 2012.46 2124.02 2240.43 2355.55 - 2476.38 2598.85 2721.39 2847.95 2977.47 3113.1 3246.58 3385.08 / - 8 15 19 1 135.54 213.79 293.23 386.12 487.74 598.34 715.94 842.77 978.44 1125.24 1277.81 1428.18 - 1587.59 1748.68 1924.25 2099.06 2291.47 2480.64 2675.09 2878.54 3101.99 3314.97 3537.56 3765.76 4001.44 4245.02 4496.21 4755.44 - 5014.9 5277.93 5560.34 5834.85 6122.69 6416 6715.38 7019.42 / - 8 15 20 1 203.91 329.03 458.32 600.5 807.61 1038.72 1287.11 1546.72 1834.43 2129.61 2445.13 2784.95 - 3135.26 3509.33 3904.33 4290.23 4726.83 5151.13 5590.28 6091.78 6562.97 7055.94 7555.95 8149.19 8683.98 9243.48 9816.77 10402.7 - 11006.7 11639.18 12295.37 12960.68 13658.24 14375.65 15100.63 15840.12 / - 8 16 1 1 241.92 240.89 240.55 240.52 240.66 240.93 241.31 241.77 242.31 242.92 243.6 244.36 - 245.17 246.06 247 248.01 249.08 250.21 251.4 252.66 253.97 255.34 256.78 258.27 259.83 261.44 263.11 264.84 - 266.63 268.48 270.39 272.36 274.39 276.47 278.62 280.82 / - 8 16 2 1 241.8 240.75 240.4 240.36 240.5 240.76 241.13 241.59 242.13 242.74 243.43 244.18 - 244.99 245.87 246.82 247.83 248.9 250.03 251.22 252.47 253.79 255.16 256.6 258.09 259.64 261.26 262.93 264.66 - 266.46 268.31 270.22 272.19 274.22 276.3 278.45 280.66 / - 8 16 3 1 241.57 240.47 240.09 240.03 240.16 240.42 240.78 241.24 241.77 242.38 243.06 243.81 - 244.63 245.51 246.45 247.46 248.53 249.66 250.85 252.11 253.42 254.8 256.23 257.73 259.29 260.9 262.58 264.31 - 266.11 267.96 269.88 271.85 273.88 275.97 278.12 280.33 / - 8 16 4 1 240.79 239.47 238.97 238.83 238.9 239.12 239.46 239.89 240.41 241.01 241.68 242.43 - 243.24 244.12 245.07 246.08 247.16 248.3 249.5 250.76 252.09 253.48 254.93 256.44 258.01 259.65 261.34 263.09 - 264.91 266.78 268.72 270.71 272.77 274.88 277.06 279.29 / - 8 16 5 1 238.68 236.77 235.73 235.43 235.4 235.55 235.84 236.25 236.75 237.34 238.01 238.76 - 239.59 240.49 241.46 242.5 243.6 244.78 246.02 247.32 248.69 250.13 251.63 253.19 254.81 256.5 258.25 260.06 - 261.93 263.87 265.87 267.93 270.05 272.23 274.47 276.78 / - 8 16 6 1 234.05 229.35 228.08 227.52 227.4 227.51 227.78 228.19 228.71 229.34 230.06 230.87 - 231.76 232.73 233.74 234.87 236.07 237.34 238.69 240.11 241.59 243.15 244.77 246.47 248.23 250.05 251.94 253.9 - 255.92 258.01 260.16 262.38 264.65 267 269.4 271.87 / - 8 16 7 1 225.04 214.8 212.87 212.24 212.04 212.13 212.43 212.9 213.52 214.27 215.13 216.11 - 217.15 218.32 219.59 220.94 222.38 223.9 225.51 227.19 228.92 230.77 232.68 234.67 236.74 238.84 241.05 243.34 - 245.69 248.11 250.59 253.12 255.74 258.43 261.17 263.99 / - 8 16 8 1 203.83 189.26 187.63 187.18 187.22 187.57 188.18 188.98 189.95 191.07 192.34 193.73 - 195.25 196.89 198.64 200.46 202.42 204.49 206.6 208.85 211.18 213.56 216.07 218.66 221.29 224.03 226.86 229.71 - 232.67 235.71 238.78 241.95 245.18 248.45 251.81 255.24 / - 8 16 9 1 167.31 154.16 153.03 152.92 153.42 154.3 155.39 156.79 158.4 160.2 162.17 164.3 - 166.57 168.99 171.53 174.38 177.17 180.08 183.09 186.2 189.4 192.68 196.06 199.52 203.05 207.04 210.73 214.49 - 218.32 222.21 226.17 230.19 234.26 238.4 242.59 246.84 / - 8 16 10 1 117.17 114.75 114.74 115.75 117.42 119.49 121.85 124.42 127.21 130.23 133.35 136.69 - 140.1 143.73 147.38 151.27 155.14 159.26 163.32 167.63 172.05 176.36 180.97 185.43 190.22 194.82 199.48 204.5 - 209.28 214.34 219.48 224.44 229.61 234.85 239.96 245.43 / - 8 16 11 1 83.75 85.72 88.26 91.29 94.55 97.96 101.48 105.14 108.92 112.83 116.86 121.39 - 125.93 130.5 135.24 140.09 145.05 150.1 155.25 160.52 165.9 171.38 176.96 182.64 188.18 194.04 199.96 205.97 - 212.1 218.33 224.28 230.67 237.14 243.28 249.91 256.64 / - 8 16 12 1 71.47 75.58 79.3 83.15 87.17 91.36 95.7 100.2 104.87 109.69 114.65 119.74 - 124.99 130.38 135.91 141.58 147.4 153.35 159.43 165.63 171.96 178.41 184.97 191.64 198.42 206.19 214.06 221.87 - 229.47 237.24 245.01 252.92 261.08 269.1 277.23 285.46 / - 8 16 13 1 66.55 72.09 76.68 81.21 85.94 90.97 96.35 102.05 108.03 114.26 120.73 127.43 - 134.35 141.48 148.81 156.34 164.05 171.95 180.04 188.3 196.73 205.24 213.86 222.59 231.45 240.44 249.56 258.81 - 268.2 277.72 287.36 297.13 307.03 317.04 327.18 337.44 / - 8 16 14 1 61.68 68.64 75.19 81.65 88.37 95.49 103.03 110.99 119.34 128.1 137.23 146.69 - 156.45 166.48 176.79 187.36 198.18 209.25 220.56 232.1 243.89 255.9 268.15 280.61 293.29 306.2 319.24 332.47 - 345.85 359.38 373.07 386.93 400.98 415.21 429.62 444.22 / - 8 16 15 1 58.7 67.63 77.32 88.32 99.5 111.15 123.54 136.48 148.47 162.24 176.34 190.65 - 205.64 221 236.29 251.33 267.73 284.48 301.55 318.97 336.73 354.85 373.34 392.2 411.44 431.06 451.01 471.32 - 491.95 510.61 533.85 555.01 577.16 599.68 620.89 644.08 / - 8 16 16 1 57.12 74.93 93.44 111.9 130.62 149.37 169.03 189.04 209.58 231.75 254.05 276.32 - 300.62 325.56 348.52 374.82 401.6 428.92 457.07 485.91 514.36 544.48 574.97 605.66 637.78 670.53 704.02 738.27 - 773.01 807.89 844.49 881.84 919.94 958.83 998.49 1038.93 / - 8 16 17 1 69.14 98.17 129.5 159.87 190.41 221.8 254.43 288.21 323.64 360.3 398.03 438.85 - 480.5 522.98 568.18 614.72 660.66 710.29 761.47 813.96 867.87 923.69 980.41 1039.42 1099.92 1161.77 1224.12 1286.44 - 1346.55 1407.54 1468.89 1532.78 1597.2 1662.74 1729.95 1799.55 / - 8 16 18 1 93.66 143.47 191.99 244.16 297.83 353.96 413.24 475.79 541.56 610.91 683.87 760.71 - 841.61 926.26 1014.96 1106.91 1201.84 1297.75 1392.15 1487.83 1587.32 1689.62 1796.01 1902.31 2013.68 2128.61 2243.91 2360.5 - 2482.54 2606.47 2734.32 2862.85 2993.71 3127.13 3262.59 3402.87 / - 8 16 19 1 135.48 214.01 293.39 386.25 487.71 596.4 713.7 839.54 975.19 1119.76 1274.07 1425.5 - 1585.99 1748.51 1925.43 2102.05 2286.79 2487.22 2684.14 2889.86 3098.3 3334.92 3556.83 3788.17 4027.08 4273.92 4527.25 4785.48 - 5054.32 5321.57 5600.57 5888.37 6178.15 6475.54 6778.79 7088.08 / - 8 16 20 1 204.06 330.14 460.82 602.09 802.05 1032.18 1282.74 1540.19 1819.25 2122.47 2437.14 2783.16 - 3129.87 3502.62 3900.4 4320.91 4731.14 5194.26 5639.69 6098.52 6625.2 7124.65 7632.64 8163.75 8774.8 9341.33 9921.12 10514.08 - 11126.7 11752.93 12417.46 13095.06 13801.19 14528 15260.96 16012.52 / - 8 17 1 1 243.46 242.53 242.23 242.21 242.36 242.64 243.02 243.48 244.02 244.63 245.32 246.07 - 246.88 247.76 248.71 249.72 250.78 251.92 253.11 254.36 255.68 257.05 258.48 259.98 261.53 263.15 264.82 266.56 - 268.35 270.21 272.12 274.09 276.12 278.21 280.36 282.57 / - 8 17 2 1 243.34 242.38 242.07 242.04 242.19 242.46 242.83 243.29 243.83 244.44 245.12 245.87 - 246.69 247.57 248.51 249.52 250.59 251.72 252.91 254.17 255.48 256.86 258.29 259.79 261.34 262.96 264.63 266.37 - 268.16 270.02 271.93 273.91 275.94 278.03 280.18 282.4 / - 8 17 3 1 243.01 241.96 241.59 241.54 241.66 241.92 242.28 242.73 243.26 243.86 244.54 245.29 - 246.1 246.98 247.92 248.93 250 251.14 252.33 253.59 254.9 256.28 257.72 259.22 260.78 262.4 264.09 265.83 - 267.63 269.49 271.41 273.39 275.44 277.54 279.7 281.92 / - 8 17 4 1 241.97 240.62 240.08 239.91 239.95 240.16 240.48 240.9 241.41 242 242.67 243.42 - 244.23 245.11 246.06 247.08 248.16 249.3 250.51 251.78 253.12 254.52 255.98 257.5 259.09 260.73 262.44 264.21 - 266.04 267.93 269.88 271.9 273.97 276.1 278.3 280.55 / - 8 17 5 1 239.51 237.28 236.13 235.81 235.76 235.9 236.19 236.58 237.09 237.68 238.36 239.12 - 239.95 240.86 241.84 242.89 244.01 245.21 246.46 247.79 249.18 250.63 252.16 253.74 255.39 257.1 258.88 260.72 - 262.63 264.59 266.62 268.67 270.82 273.04 275.32 277.66 / - 8 17 6 1 234.46 229.14 227.66 227.16 227 227.08 227.34 227.74 228.26 228.89 229.62 230.44 - 231.35 232.35 233.42 234.58 235.81 237.07 238.45 239.9 241.42 243.02 244.69 246.42 248.23 250.1 252.04 254.05 - 256.12 258.26 260.46 262.73 265.07 267.46 269.93 272.45 / - 8 17 7 1 225.2 214.12 212.13 211.47 211.26 211.35 211.65 212.14 212.77 213.54 214.43 215.43 - 216.53 217.74 219.04 220.39 221.88 223.44 225.1 226.83 228.65 230.51 232.49 234.54 236.66 238.87 241.14 243.45 - 245.87 248.35 250.91 253.53 256.2 258.95 261.77 264.65 / - 8 17 8 1 203.85 188.4 186.74 186.38 186.5 186.92 187.58 188.44 189.46 190.63 191.94 193.37 - 194.94 196.61 198.41 200.29 202.3 204.4 206.59 208.87 211.27 213.72 216.29 218.91 221.65 224.41 227.3 230.22 - 233.26 236.37 239.5 242.75 246.07 249.41 252.86 256.34 / - 8 17 9 1 166.7 153.94 152.83 152.73 153.25 154.07 155.25 156.67 158.3 160.12 162.12 164.28 - 166.58 169.03 171.61 174.31 177.13 180.27 183.32 186.47 189.71 193.05 196.47 199.98 203.56 207.22 210.94 215.16 - 219.05 222.99 227.01 231.08 235.22 239.41 243.66 247.98 / - 8 17 10 1 117.28 114.89 114.91 115.99 117.67 119.76 122.15 124.8 127.61 130.65 133.79 137.08 - 140.6 144.26 147.94 151.86 155.75 159.9 164 168.34 172.61 177.15 181.58 186.31 190.88 195.78 200.49 205.57 - 210.4 215.51 220.46 225.72 230.78 236.07 241.42 246.65 / - 8 17 11 1 84.1 86.15 88.76 91.84 95.14 98.57 102.12 105.78 109.57 113.5 117.55 121.93 - 126.57 131.23 135.97 140.8 145.78 150.8 155.97 161.25 166.64 172.14 177.74 183.45 189.26 195.16 201.13 207.19 - 213.06 219.32 225.67 232.12 238.25 244.86 251.56 257.88 / - 8 17 12 1 71.97 76.14 79.9 83.79 87.85 92.06 96.42 100.93 105.61 110.44 115.42 120.53 - 125.79 131.18 136.73 142.41 148.23 154.19 160.28 166.5 172.85 179.31 185.9 192.59 199.39 206.52 214.48 222.51 - 230.27 238.26 246.14 254.08 262.18 270.26 278.44 286.73 / - 8 17 13 1 67.07 72.63 77.23 81.76 86.49 91.55 96.95 102.66 108.64 114.88 121.35 128.05 - 134.97 142.1 149.43 156.96 164.67 172.57 180.64 188.9 197.33 205.92 214.6 223.38 232.28 241.3 250.45 259.74 - 269.15 278.7 288.38 298.18 308.12 318.18 328.36 338.66 / - 8 17 14 1 62.12 69.14 75.68 82.14 88.85 95.96 103.49 111.43 119.78 128.54 137.66 147.1 - 156.84 166.87 177.15 187.7 198.5 209.54 220.81 232.32 244.06 256.03 268.23 280.64 293.29 306.15 319.15 332.36 - 345.79 359.43 373.21 387.15 401.25 415.53 429.98 444.62 / - 8 17 15 1 59.04 68 77.68 88.66 99.8 111.45 123.82 136.73 148.65 162.43 176.47 190.73 - 205.66 220.96 235.64 251.12 267.43 284.09 301.09 318.44 336.13 354.16 372.55 391.28 410.38 429.84 449.67 469.86 - 490.39 508.92 532.09 553.13 575.16 597.54 618.6 641.62 / - 8 17 16 1 57.32 75.05 93.57 111.91 130.71 149.43 169.03 188.97 209.43 231.52 253.7 275.84 - 300.03 324.88 347.7 373.82 400.36 427.4 455.28 483.92 512.19 542.16 572.71 602.96 634.85 667.37 700.58 734.54 - 769.13 803.43 839.65 876.58 914.24 952.67 991.86 1031.81 / - 8 17 17 1 69.14 98.14 129.4 159.79 190.37 221.43 253.87 287.5 322.77 359.23 397.11 437.22 - 477.89 520.81 565.59 611.99 657.54 706.89 757.68 809.76 863.15 918.42 974.52 1032.91 1092.8 1154.08 1215.92 1279.35 - 1338.6 1400.1 1463.15 1526.52 1592.05 1659.09 1725.45 1795.48 / - 8 17 18 1 93.65 143.61 191.94 243.91 297.24 353.02 411.74 473.85 539.27 608.17 680.55 756.88 - 836.95 921 1008.95 1100.27 1194.6 1290.21 1385.12 1482.63 1582.56 1686.29 1792.47 1901.97 2013.55 2128.58 2245.36 2363.66 - 2487.1 2612.59 2741.98 2872.37 3005.1 3140.49 3278.09 3420.39 / - 8 17 19 1 135.55 214.51 294.26 385.81 486.58 595.86 712.55 837.36 970.08 1114.87 1268.71 1420.73 - 1577.32 1746.75 1925.13 2103.83 2290.62 2493.1 2692.8 2901 3112.74 3351.39 3577.1 3811.88 4054.19 4302.93 4559.08 4824.26 - 5091.57 5369.43 5652.6 5942.24 6239.44 6541.53 6852.1 7164.69 / - 8 17 20 1 204.46 331.81 464.25 607.79 797.3 1021.55 1273.77 1527.53 1813.56 2106.67 2435.82 2769.75 - 3130.59 3518.49 3896.4 4317.32 4761.88 5197.23 5686.76 6155.33 6643.83 7199 7717.09 8257.45 8812.88 9381.96 10039.23 10640.54 - 11262.73 11894.17 12556.86 13248.18 13965.17 14694.28 15451.98 16227.72 / - 8 18 1 1 244.87 244.06 243.82 243.84 244.01 244.3 244.68 245.15 245.69 246.3 246.99 247.74 - 248.56 249.44 250.38 251.39 252.46 253.59 254.78 256.03 257.35 258.72 260.16 261.66 263.21 264.83 266.51 268.24 - 270.04 271.9 273.81 275.79 277.83 279.92 282.08 284.29 / - 8 18 2 1 244.71 243.86 243.59 243.59 243.75 244.03 244.41 244.87 245.41 246.02 246.7 247.45 - 248.27 249.15 250.09 251.1 252.17 253.3 254.49 255.75 257.06 258.44 259.88 261.37 262.93 264.55 266.23 267.97 - 269.77 271.63 273.55 275.53 277.57 279.67 281.83 284.04 / - 8 18 3 1 244.16 243.15 242.78 242.71 242.83 243.08 243.43 243.88 244.41 245.01 245.69 246.43 - 247.25 248.13 249.07 250.08 251.16 252.29 253.49 254.76 256.08 257.47 258.91 260.42 261.99 263.62 265.32 267.07 - 268.88 270.76 272.69 274.69 276.74 278.86 281.04 283.27 / - 8 18 4 1 242.79 241.37 240.77 240.55 240.57 240.75 241.05 241.46 241.96 242.55 243.21 243.95 - 244.77 245.65 246.61 247.63 248.72 249.88 251.1 252.39 253.74 255.15 256.63 258.17 259.78 261.44 263.17 264.96 - 266.82 268.74 270.71 272.75 274.86 277.02 279.24 281.53 / - 8 18 5 1 239.92 237.3 236.15 235.75 235.65 235.75 236 236.38 236.87 237.47 238.13 238.9 - 239.74 240.66 241.66 242.73 243.87 245.08 246.37 247.72 249.14 250.63 252.18 253.8 255.49 257.24 259.06 260.94 - 262.89 264.9 266.97 269.11 271.31 273.58 275.9 278.29 / - 8 18 6 1 234.51 228.77 226.95 226.38 226.19 226.24 226.48 226.87 227.4 228.04 228.78 229.62 - 230.55 231.57 232.68 233.86 235.11 236.45 237.87 239.37 240.94 242.58 244.3 246.09 247.95 249.88 251.85 253.91 - 256.05 258.25 260.52 262.85 265.25 267.72 270.24 272.84 / - 8 18 7 1 224.62 213.3 211.22 210.59 210.4 210.51 210.84 211.35 212.01 212.81 213.73 214.76 - 215.9 217.14 218.45 219.88 221.41 223.03 224.73 226.52 228.35 230.3 232.34 234.45 236.64 238.87 241.21 243.63 - 246.12 248.64 251.28 253.98 256.75 259.59 262.47 265.45 / - 8 18 8 1 202.84 187.34 186.06 185.74 185.88 186.33 187.01 187.9 188.95 190.16 191.51 192.99 - 194.6 196.32 198.16 200.12 202.17 204.34 206.59 208.93 211.36 213.88 216.5 219.2 221.97 224.82 227.76 230.78 - 233.88 237.04 240.28 243.58 246.97 250.41 253.9 257.49 / - 8 18 9 1 166.02 153.73 152.63 152.54 153.07 153.92 155.11 156.55 158.21 160.05 162.07 164.26 - 166.6 169.08 171.69 174.43 177.28 180.25 183.33 186.76 190.05 193.43 196.9 200.45 204.08 207.79 211.57 215.42 - 219.79 223.79 227.86 231.99 236.18 240.44 244.75 249.13 / - 8 18 10 1 117.39 115.02 115.1 116.28 118.02 120.16 122.57 125.21 128.08 131.09 134.32 137.63 - 141.17 144.74 148.55 152.36 156.41 160.43 164.71 168.92 173.39 177.77 182.43 186.96 191.81 196.48 201.51 206.32 - 211.52 216.45 221.68 226.74 232.11 237.46 242.69 248.16 / - 8 18 11 1 84.55 86.7 89.44 92.61 95.95 99.4 102.95 106.62 110.42 114.34 118.39 122.61 - 127.38 132.03 136.76 141.61 146.58 151.69 156.88 162.18 167.6 173.12 178.75 184.49 190.33 196.02 202.04 208.13 - 214.3 220.62 227.03 233.14 239.72 246.39 252.71 259.54 / - 8 18 12 1 72.72 76.93 80.75 84.71 88.8 93.03 97.39 101.91 106.58 111.41 116.39 121.51 - 126.77 132.15 137.69 143.36 149.18 155.13 161.21 167.43 173.77 180.23 186.82 193.52 200.33 207.25 214.75 222.89 - 231.01 238.93 246.9 254.92 263.02 271.28 279.5 287.85 / - 8 18 13 1 67.91 73.41 77.98 82.5 87.24 92.32 97.73 103.44 109.41 115.63 122.09 128.77 - 135.67 142.77 150.08 157.57 165.26 173.12 181.17 189.39 197.79 206.36 215.09 223.95 232.91 241.97 251.14 260.45 - 269.88 279.45 289.14 298.96 308.91 319 329.21 339.54 / - 8 18 14 1 62.84 69.92 76.41 82.81 89.49 96.55 104.05 111.95 120.28 129.01 138.09 147.49 - 157.19 167.16 177.4 187.89 198.62 209.6 220.81 232.25 243.91 255.8 267.9 280.23 292.77 305.49 318.37 331.47 - 344.77 358.31 372.06 386.05 400.24 414.62 429.16 443.86 / - 8 18 15 1 59.62 68.58 78.22 89.13 100.08 111.82 124.14 137 148.84 162.55 176.47 190.64 - 205.47 220.66 235.74 250.54 266.7 283.2 300.03 317.2 334.7 352.55 370.75 389.31 408.23 427.5 447.14 467.12 - 487.42 505.66 528.58 549.32 571.08 593.2 613.02 636.76 / - 8 18 16 1 57.8 75.26 93.82 112.12 130.88 149.48 168.99 188.82 209.12 231 252.95 275.06 - 299.06 323.65 346.04 371.79 397.97 424.67 452.23 480.52 508.39 537.95 568.03 597.93 629.47 661.66 694.53 728.1 - 762.25 796.04 831.76 868.14 905.22 943.03 981.57 1020.84 / - 8 18 17 1 69.24 98.22 129.48 159.74 189.73 220.9 253.17 286.51 321.47 357.44 395.06 434.82 - 475.04 517.47 561.74 607.66 652.58 701.52 751.8 803.28 855.98 910.52 965.73 1023.22 1082.16 1142.48 1203.4 1266.09 - 1327.03 1388.89 1452.15 1516.44 1581.93 1649.11 1717.59 1786.8 / - 8 18 18 1 93.79 143.6 192.1 243.63 296.24 351.32 409.46 470.83 535.41 603.58 675.41 751.29 - 830.37 913.49 1000.15 1090.53 1183.9 1279.92 1375.29 1472.75 1574.63 1678.45 1785.79 1896.36 2009.29 2125.7 2244.07 2366.21 - 2489.32 2616.55 2747.67 2880.09 3015.03 3152.65 3292.72 3437.4 / - 8 18 19 1 135.88 215.5 295.95 386.37 486.32 593.19 708.6 831.97 964.99 1105.83 1255.98 1408.69 - 1570.39 1740.36 1914.09 2102.76 2291.05 2496.25 2701.76 2911.65 3127.42 3351.45 3600.4 3839.47 4083.44 4336.56 4595.47 4865.1 - 5139.44 5420.82 5710.52 6005.01 6301.34 6616.01 6931.69 7246.89 / - 8 18 20 1 205.34 334.5 469.23 615.48 790.49 1013.04 1260.37 1517.93 1792.5 2093.63 2420.92 2764.21 - 3120.29 3503.78 3893.63 4315.86 4762.8 5199.73 5690.36 6167.29 6702.82 7212.34 7743.09 8349.18 8916.4 9497.04 10084.21 10693.8 - 11415.47 12063.27 12740.55 13438.55 14157.25 14896.32 15665.45 16459.62 / - 8 19 1 1 246.08 245.42 245.24 245.29 245.49 245.79 246.18 246.65 247.2 247.82 248.5 249.26 - 250.07 250.96 251.9 252.91 253.98 255.11 256.31 257.56 258.88 260.26 261.69 263.19 264.75 266.37 268.05 269.8 - 271.6 273.46 275.38 277.36 279.41 281.51 283.67 285.9 / - 8 19 2 1 245.7 244.92 244.68 244.68 244.84 245.12 245.5 245.96 246.5 247.11 247.79 248.54 - 249.36 250.24 251.19 252.2 253.27 254.41 255.61 256.87 258.19 259.57 261.02 262.52 264.09 265.72 267.41 269.16 - 270.98 272.85 274.78 276.77 278.83 280.94 283.12 285.35 / - 8 19 3 1 244.82 243.77 243.37 243.28 243.37 243.6 243.94 244.37 244.9 245.49 246.17 246.92 - 247.73 248.62 249.57 250.59 251.67 252.82 254.03 255.31 256.64 258.05 259.51 261.04 262.63 264.28 266 267.77 - 269.61 271.51 273.47 275.49 277.58 279.72 281.93 284.19 / - 8 19 4 1 243.04 241.46 240.68 240.41 240.38 240.53 240.82 241.21 241.71 242.29 242.96 243.71 - 244.54 245.44 246.41 247.45 248.56 249.74 250.99 252.3 253.68 255.12 256.64 258.21 259.85 261.56 263.33 265.16 - 267.06 269.01 271.04 273.12 275.27 277.48 279.76 282.09 / - 8 19 5 1 239.81 236.62 235.42 234.95 234.8 234.87 235.11 235.49 235.98 236.58 237.25 238.02 - 238.89 239.83 240.85 241.95 243.13 244.38 245.7 247.1 248.56 250.09 251.7 253.37 255.11 256.92 258.79 260.74 - 262.75 264.82 266.96 269.16 271.43 273.76 276.16 278.62 / - 8 19 6 1 234.3 227.75 226.03 225.43 225.22 225.27 225.52 225.92 226.45 227.11 227.87 228.74 - 229.7 230.75 231.89 233.12 234.4 235.79 237.26 238.81 240.43 242.14 243.91 245.76 247.66 249.65 251.72 253.86 - 256.07 258.33 260.68 263.1 265.58 268.12 270.74 273.43 / - 8 19 7 1 224.34 212.23 210.18 209.61 209.48 209.63 210 210.55 211.25 212.09 213.05 214.08 - 215.26 216.54 217.93 219.41 220.98 222.6 224.36 226.2 228.13 230.14 232.19 234.36 236.62 238.95 241.32 243.81 - 246.37 249.01 251.68 254.46 257.32 260.24 263.21 266.27 / - 8 19 8 1 202.52 186.59 185.46 185.14 185.28 185.74 186.44 187.33 188.4 189.63 191 192.51 - 194.15 195.9 197.78 199.77 201.86 204.06 206.36 208.76 211.25 213.83 216.51 219.27 222.12 225.05 228.06 231.15 - 234.32 237.56 240.9 244.33 247.81 251.35 254.95 258.62 / - 8 19 9 1 165.81 153.52 152.43 152.36 152.84 153.76 154.98 156.44 158.11 159.98 162.03 164.25 - 166.61 169.12 171.78 174.57 177.47 180.48 183.61 186.83 190.42 193.85 197.36 200.96 204.64 208.39 212.22 216.13 - 220.1 224.61 228.73 232.92 237.17 241.48 245.85 250.29 / - 8 19 10 1 117.62 115.16 115.45 116.81 118.67 120.91 123.37 126.04 128.94 131.97 135.21 138.52 - 142.06 145.64 149.45 153.26 157.32 161.34 165.63 169.84 174.33 178.72 183.4 187.95 192.82 197.52 202.58 207.42 - 212.66 217.63 222.66 228 233.42 238.64 244.09 249.62 / - 8 19 11 1 85.26 87.68 90.82 94.17 97.57 101.02 104.56 108.2 111.96 115.83 119.84 123.97 - 128.68 133.3 137.97 142.82 147.79 152.79 158.04 163.32 168.72 174.24 179.66 185.38 191.21 197.15 203.19 209.3 - 215.5 221.5 227.92 234.44 241.07 247.35 254.15 260.57 / - 8 19 12 1 74.11 78.42 82.46 86.54 90.67 94.9 99.25 103.72 108.33 113.08 117.98 123.04 - 128.25 133.61 139.09 144.7 150.45 156.34 162.36 168.52 174.81 181.23 187.77 194.43 201.21 208.1 215.1 222.97 - 231.24 239.27 247.32 255.41 263.57 271.81 280.21 288.59 / - 8 19 13 1 69.57 74.91 79.41 83.89 88.66 93.76 99.15 104.8 110.71 116.85 123.22 129.82 - 136.62 143.63 150.84 158.24 165.84 173.61 181.57 189.7 198 206.47 215.11 223.91 232.88 242.01 251.25 260.6 - 270.05 279.62 289.3 299.12 309.07 319.14 329.34 339.67 / - 8 19 14 1 64.44 71.59 77.87 84.1 90.63 97.57 104.93 112.74 121 129.63 138.6 147.88 - 157.45 167.3 177.41 187.77 198.38 209.22 220.3 231.59 243.11 254.85 266.8 278.97 291.34 303.83 316.53 329.44 - 342.55 355.87 369.41 383.16 397.12 411.29 425.67 440.26 / - 8 19 15 1 60.88 69.89 79.49 89.88 100.85 112.42 124.59 136.95 148.96 162.42 176.14 190.24 - 204.88 219.87 234.14 249.26 265.19 281.44 298.02 314.92 332.15 349.71 367.6 385.83 404.41 423.33 442.59 462.19 - 481.54 499.85 522.48 542.73 564.07 585.77 607.82 628.47 / - 8 19 16 1 59.15 76.09 94.19 112.5 130.88 149.59 168.92 188.54 208.38 230.26 251.8 273.66 - 297.23 321.02 343.08 368.34 393.97 419.98 447.07 474.55 502.01 530.85 560.33 589.7 620.63 652.21 684.46 717.39 - 750.64 783.82 818.81 854.44 890.73 927.72 965.41 1003.79 / - 8 19 17 1 69.5 98.57 129.68 159.48 189.47 219.9 251.77 285.19 319.7 355.1 391.59 431.24 - 470.67 512.16 555.96 601.17 644.94 692.88 742.14 792.42 844.03 897.25 951.17 1007.38 1065.02 1124.08 1183.7 1245.44 - 1307.32 1369.77 1433.54 1498.4 1564.83 1633.08 1701.44 1771.96 / - 8 19 18 1 94.29 143.71 192.56 243.33 295.22 349.26 406.24 466.5 530.2 597.5 668.23 743.07 - 820.65 902.45 987.08 1076.13 1168.46 1263.56 1359.62 1458.7 1560.68 1666.32 1775.12 1886.25 2000.71 2119.48 2239.68 2362.56 - 2489.21 2617.28 2750.27 2885.04 3022.49 3162.73 3305.62 3452.65 / - 8 19 19 1 136.8 217.53 298.73 388.24 485.82 591.49 704.22 825.77 956.44 1095.17 1243.14 1396.78 - 1558.74 1730.15 1905.24 2094.02 2284.81 2482.95 2698.99 2912.54 3134.19 3361.46 3612.96 3857.35 4108.87 4366.94 4633.44 4907.36 - 5189.13 5478.92 5776.57 6077.3 6381.72 6702.35 7020.37 7348.7 / - 8 19 20 1 207.2 339.04 477.08 626.5 789.93 998.83 1241.72 1495.94 1778.42 2077.46 2402.81 2740.35 - 3104.48 3488.49 3888.08 4309.21 4743.32 5212.98 5706.55 6185.28 6723.65 7241.66 7825.86 8381.19 8951.13 9538.6 10212.98 10838.68 - 11485.65 12153.34 12841.71 13545.26 14392.82 15151.88 15931.97 16732.93 / - 8 20 1 1 246.4 245.7 245.48 245.5 245.66 245.95 246.32 246.79 247.33 247.94 248.63 249.39 - 250.21 251.1 252.06 253.08 254.16 255.31 256.52 257.79 259.13 260.53 261.99 263.51 265.1 266.75 268.46 270.23 - 272.07 273.96 275.92 277.94 280.02 282.16 284.36 286.62 / - 8 20 2 1 245.72 244.81 244.47 244.4 244.52 244.76 245.11 245.56 246.09 246.69 247.38 248.13 - 248.95 249.85 250.81 251.84 252.93 254.09 255.31 256.6 257.95 259.37 260.85 262.39 264 265.67 267.4 269.19 - 271.05 272.97 274.95 276.99 279.1 281.27 283.5 285.79 / - 8 20 3 1 244.58 243.32 242.77 242.58 242.6 242.79 243.09 243.51 244.02 244.61 245.29 246.04 - 246.87 247.77 248.74 249.78 250.89 252.07 253.32 254.63 256.01 257.45 258.96 260.54 262.18 263.89 265.66 267.49 - 269.39 271.35 273.37 275.46 277.61 279.83 282.11 284.45 / - 8 20 4 1 242.64 240.81 239.8 239.44 239.35 239.46 239.72 240.11 240.6 241.19 241.86 242.63 - 243.47 244.39 245.39 246.46 247.61 248.83 250.11 251.47 252.9 254.4 255.96 257.59 259.3 261.06 262.9 264.8 - 266.77 268.8 270.9 273.06 275.29 277.58 279.94 282.37 / - 8 20 5 1 239.38 235.91 234.34 233.86 233.7 233.77 234.02 234.4 234.9 235.51 236.22 237.03 - 237.92 238.9 239.95 241.09 242.31 243.6 244.97 246.42 247.93 249.53 251.19 252.89 254.67 256.54 258.49 260.5 - 262.58 264.74 266.96 269.25 271.6 274.02 276.51 279.07 / - 8 20 6 1 233.84 226.88 224.95 224.37 224.17 224.23 224.5 224.92 225.48 226.16 226.96 227.85 - 228.85 229.94 231.12 232.39 233.74 235.16 236.65 238.25 239.93 241.69 243.53 245.44 247.43 249.49 251.59 253.8 - 256.08 258.44 260.87 263.37 265.94 268.55 271.26 274.04 / - 8 20 7 1 223.83 211.08 209.07 208.59 208.52 208.73 209.16 209.75 210.5 211.37 212.37 213.49 - 214.72 216 217.43 218.95 220.58 222.29 224.1 225.94 227.92 229.99 232.15 234.33 236.64 239.04 241.52 244.03 - 246.66 249.37 252.16 254.97 257.9 260.91 263.96 267.11 / - 8 20 8 1 202.02 186.02 184.88 184.55 184.7 185.16 185.87 186.79 187.87 189.12 190.52 192.05 - 193.71 195.5 197.41 199.43 201.56 203.79 206.13 208.57 211.11 213.74 216.46 219.27 222.17 225.15 228.21 231.36 - 234.58 237.89 241.27 244.72 248.25 251.85 255.52 259.25 / - 8 20 9 1 164.99 153.32 152.24 152.18 152.67 153.61 154.84 156.35 158.09 160.03 162.16 164.43 - 166.86 169.44 172.15 174.98 177.93 180.98 184.14 187.44 190.82 194.29 198.16 201.82 205.56 209.37 213.24 217.18 - 221.19 225.27 229.41 234.1 238.38 242.72 247.12 251.57 / - 8 20 10 1 117.88 116.14 117.07 118.79 120.86 123.19 125.71 128.4 131.24 134.28 137.41 140.67 - 144.14 147.66 151.4 155.14 159.13 163.1 167.35 171.54 176.01 180.39 185.07 189.62 194.49 199.18 204.23 209.05 - 213.94 219.23 224.24 229.56 234.69 240.15 245.4 250.89 / - 8 20 11 1 88.02 91.65 95.32 98.77 102.13 105.5 108.92 112.42 116.02 119.72 123.54 127.84 - 132.14 136.53 140.98 145.67 150.37 155.29 160.3 165.46 170.75 176.16 181.49 187.13 192.87 198.72 204.68 210.44 - 216.54 222.74 229.08 235.14 241.65 248.28 254.55 261.34 / - 8 20 12 1 78.27 83.26 87.73 91.96 96.07 100.17 104.31 108.56 112.92 117.42 122.07 126.86 - 131.81 136.92 142.18 147.6 153.16 158.88 164.73 170.69 176.77 182.97 189.3 195.76 202.36 209.08 215.92 222.87 - 231.01 239 247.22 255.04 263.1 271.21 279.41 287.48 / - 8 20 13 1 74.16 78.94 83.44 88.12 92.96 97.99 103.22 108.66 114.31 120.16 126.23 132.5 - 138.98 145.67 152.55 159.64 166.91 174.37 182.02 189.85 197.86 206.04 214.39 222.91 231.6 240.45 249.46 258.63 - 267.96 277.45 287.09 296.88 306.82 316.86 326.97 337.19 / - 8 20 14 1 69.71 76.02 81.62 87.38 93.6 100.33 107.5 115.07 122.99 131.26 139.85 148.75 - 157.93 167.39 177.11 187.09 197.32 207.79 218.51 229.45 240.62 252.02 263.64 275.4 287.35 299.51 311.87 324.44 - 337.21 350.19 363.37 376.76 390.36 404.16 418.17 432.39 / - 8 20 15 1 65.26 74.19 82.98 92.46 103.35 114.41 125.09 136.69 149.22 162.05 175.11 188.89 - 203.03 217.03 230.64 245.76 261.31 277.15 293.29 309.75 326.46 343.57 360.79 378.53 396.6 415.01 433.75 452.82 - 472.17 491.78 511.92 531.36 552.14 573.25 594.72 614.64 / - 8 20 16 1 62.79 79.46 96.94 114.31 132.13 149.44 168.07 187.87 206.92 228.25 247.61 269.96 - 292.85 315.31 336.91 361.47 385.91 411.34 437.65 464.57 490.98 519.15 547.41 576.19 606.29 637.03 668.43 700.27 - 732.49 764.62 798.62 833.27 868.51 904.41 940.97 978.19 / - 8 20 17 1 71.6 102.06 131.26 159.44 188.81 218.59 250.23 281.99 316.67 351.27 386.7 425.6 - 462.46 503.66 546.11 589.81 631.16 677.62 725.44 773.96 824.15 875.69 928.13 982.81 1038.75 1096.1 1153.99 1214.31 - 1276.03 1339.14 1403.65 1469.55 1536.83 1605.06 1673.93 1745.4 / - 8 20 18 1 99.39 144.91 193.41 242.9 293.62 346.48 402.6 461.52 524.26 590.02 658.74 731.18 - 807.56 887.69 969.1 1056.03 1146.27 1239.8 1334.93 1435.38 1539.11 1646.01 1755.99 1869.11 1985.32 2104.62 2227.08 2352.27 - 2480.66 2612.06 2746.93 2884.41 3024.84 3168.18 3314.42 3464.7 / - 8 20 19 1 140.87 222.31 303.45 392.12 487.34 589.72 699.99 818.7 945.76 1082.6 1226.99 1380.76 - 1543.44 1715.1 1892.49 2082.07 2275.84 2476.95 2692.61 2909.96 3134.66 3366.59 3605.79 3866.53 4122.6 4386.23 4657.33 4935.71 - 5224.37 5518.28 5819.49 6132.19 6447.26 6770.02 7102.77 7439.28 / - 8 20 20 1 211.78 347.86 490.65 644.03 809.37 987.18 1177.61 1380.6 1637.69 1927.97 2234.62 2565.29 - 2914.6 3288.96 3671.03 4089.54 4536.55 4980.63 5479.33 5968.67 6480.9 7016.48 7576.04 8175.04 8753.23 9388.32 10023.18 10636.99 - 11353.22 12014.52 12696.94 13502.12 14233.72 14986.58 15883.94 16686.95 / - 9 1 1 1 217.88 217.73 217.81 218.01 218.32 218.71 219.17 219.69 220.29 220.94 221.66 222.44 - 223.27 224.16 225.11 226.11 227.17 228.29 229.46 230.69 231.97 233.3 234.69 236.13 237.63 239.18 240.78 242.44 - 244.15 245.92 247.73 249.6 251.52 253.5 255.53 257.61 / - 9 1 2 1 217.8 217.65 217.71 217.92 218.22 218.61 219.07 219.59 220.19 220.84 221.56 222.33 - 223.17 224.06 225.01 226.01 227.07 228.19 229.36 230.59 231.87 233.21 234.6 236.04 237.54 239.09 240.7 242.35 - 244.07 245.83 247.65 249.52 251.45 253.42 255.45 257.54 / - 9 1 3 1 217.66 217.49 217.54 217.74 218.04 218.42 218.88 219.41 220 220.66 221.37 222.15 - 222.98 223.87 224.82 225.83 226.89 228.01 229.18 230.41 231.69 233.03 234.42 235.87 237.37 238.92 240.53 242.19 - 243.9 245.67 247.49 249.37 251.29 253.27 255.31 257.39 / - 9 1 4 1 217.4 217.18 217.23 217.41 217.71 218.08 218.54 219.06 219.66 220.31 221.03 221.8 - 222.64 223.53 224.48 225.49 226.55 227.67 228.84 230.08 231.36 232.7 234.1 235.55 237.05 238.61 240.22 241.88 - 243.6 245.37 247.2 249.08 251.01 253 255.04 257.13 / - 9 1 5 1 216.88 216.61 216.63 216.8 217.08 217.45 217.9 218.42 219.01 219.66 220.38 221.15 - 221.99 222.89 223.84 224.85 225.92 227.04 228.22 229.45 230.74 232.09 233.49 234.95 236.46 238.02 239.64 241.31 - 243.04 244.82 246.66 248.55 250.49 252.48 254.53 256.64 / - 9 1 6 1 215.88 215.52 215.48 215.62 215.89 216.25 216.69 217.21 217.79 218.45 219.16 219.94 - 220.78 221.68 222.64 223.65 224.73 225.86 227.05 228.29 229.59 230.95 232.36 233.83 235.35 236.93 238.56 240.25 - 242 243.79 245.65 247.55 249.52 251.53 253.6 255.73 / - 9 1 7 1 213.14 212.08 211.64 211.6 211.74 212.03 212.41 212.9 213.46 214.11 214.83 215.62 - 216.47 217.4 218.38 219.43 220.55 221.72 222.96 224.25 225.61 227.03 228.5 230.03 231.62 233.27 234.98 236.75 - 238.57 240.45 242.38 244.37 246.42 248.53 250.68 252.89 / - 9 1 8 1 204.75 199.43 198.56 198.25 198.25 198.47 198.85 199.36 199.99 200.73 201.56 202.48 - 203.49 204.58 205.75 206.99 208.28 209.67 211.13 212.66 214.26 215.92 217.65 219.44 221.27 223.2 225.18 227.22 - 229.32 231.48 233.7 235.99 238.3 240.7 243.15 245.66 / - 9 1 9 1 179.75 171.01 169.54 168.98 169.01 169.39 170.04 170.9 171.95 173.16 174.45 175.93 - 177.5 179.22 181.04 182.95 184.93 187.03 189.21 191.44 193.77 196.14 198.62 201.16 203.73 206.4 209.12 211.88 - 214.71 217.61 220.53 223.52 226.56 229.65 232.8 235.99 / - 9 1 10 1 133.54 127.1 126.18 126.34 127.1 128.3 129.8 131.64 133.75 136.02 138.47 141.06 - 143.85 146.71 149.77 152.86 156.1 159.37 162.79 166.23 169.86 173.43 177.23 180.92 184.71 188.85 192.66 196.52 - 200.4 204.32 208.27 212.69 216.7 220.75 224.81 228.92 / - 9 1 11 1 92.08 92.12 93.78 95.98 98.47 101.19 104.1 107.19 110.43 113.82 117.37 121.05 - 124.87 128.81 132.78 136.95 141.23 145.61 150.08 154.64 159.32 164.09 168.72 173.64 178.64 183.73 188.6 193.81 - 198.79 204.13 209.53 214.64 220.15 225.36 230.99 236.28 / - 9 1 12 1 75.96 78.66 81.86 85.3 88.85 92.49 96.24 100.12 104.14 108.31 112.62 117.08 - 121.69 126.43 131.32 136.34 141.49 146.76 152.28 158.46 164.66 170.72 176.89 183.11 189.4 195.7 202.1 208.58 - 215.44 222.12 228.55 235.37 242.27 249.21 256.22 263.37 / - 9 1 13 1 72.07 75.62 79.22 83.05 87.27 91.82 96.67 101.77 107.12 112.71 118.51 124.52 - 130.74 137.16 143.77 150.58 157.57 164.74 172.03 179.42 186.9 194.51 202.25 210.12 218.11 226.22 234.46 243.35 - 252.91 262.43 271.69 280.99 290.56 300.01 309.31 319.27 / - 9 1 14 1 68.21 73.53 78.59 83.98 89.85 96.22 103.05 110.35 118.06 126.14 134.55 143.27 - 152.29 161.59 171.16 180.99 191.07 201.38 211.94 222.73 233.76 245.02 256.51 268.15 279.88 291.74 303.76 315.93 - 328.27 340.78 353.47 366.34 380.54 394.93 409.38 423.68 / - 9 1 15 1 65.06 72.63 80.85 89.71 99.5 110.05 121.22 133.04 145.42 158.32 171.71 185.55 - 199.77 214.37 229.35 244.71 260.44 276.55 293.04 309.79 325.91 344.48 362.53 379.84 398 418.22 435.54 454.93 - 474.65 494.69 515.09 535.86 557.88 580.72 603.88 627.21 / - 9 1 16 1 63.88 78.49 95.2 112.43 130.18 148.63 167.55 186.87 208.15 228.25 250.84 274.05 - 295.66 319.83 345.06 370.43 396.89 424.22 452.02 479.47 508.38 538.7 569.77 601.57 634.08 667.09 700.01 734.21 - 770.99 808.56 846.74 885.65 924.72 964.59 1004.9 1044.76 / - 9 1 17 1 73.14 101.8 131.32 160.32 190.06 221.03 253.58 287.87 323.46 360.18 400.03 439.52 - 482.43 526.57 572.18 617.47 666.5 717.28 769.8 824.34 879.68 937.46 997.78 1058.73 1120.53 1181.39 1238.88 1291.28 - 1332.94 1377.18 1424.79 1471.08 1521.1 1574.06 1625.58 1676.46 / - 9 1 18 1 98.3 145.6 194.76 245.4 298.38 354.57 414.63 478.63 546.75 618.44 693.79 774.01 - 858.75 947.97 1040.28 1134.97 1231.49 1321.18 1408.39 1498.03 1591.55 1687.49 1786.41 1886.43 1987.81 2092.28 2195.92 2304.18 - 2409.63 2521.25 2634.32 2751.48 2868.43 2986.72 3105.49 3227.93 / - 9 1 19 1 139.93 216.66 300.94 395 497.19 608.44 729.26 860.92 1005.94 1157.59 1303.01 1445.35 - 1596.07 1748.39 1902.13 2061.08 2232.91 2401.5 2572.93 2753.89 2934.53 3125.15 3317.01 3516.22 3713.52 3917.46 4131.88 4345.02 - 4562.16 4785.59 5017.51 5247.75 5487.08 5730.1 5968.71 6221.89 / - 9 1 20 1 207.38 328.2 477.88 665.14 879.38 1123.51 1369.92 1613.71 1872.17 2157.45 2438.47 2748.95 - 3059.35 3402.45 3746.38 4097.68 4496.39 4875.36 5274.01 5681.33 6105.97 6537.51 6981.73 7438.39 7908.59 8390.85 8892.14 9377.56 - 9905.51 10435.43 10988.21 11544.65 12118.58 12681.46 13288.16 13925.53 / - 9 2 1 1 219.72 219.56 219.63 219.83 220.14 220.52 220.98 221.51 222.1 222.76 223.48 224.26 - 225.09 225.99 226.94 227.94 229.01 230.13 231.3 232.53 233.82 235.16 236.55 238 239.5 241.06 242.67 244.33 - 246.05 247.82 249.65 251.53 253.46 255.44 257.48 259.57 / - 9 2 2 1 219.64 219.47 219.53 219.73 220.03 220.42 220.88 221.41 222 222.66 223.37 224.15 - 224.99 225.88 226.83 227.84 228.9 230.03 231.2 232.43 233.72 235.06 236.45 237.9 239.41 240.97 242.58 244.24 - 245.96 247.74 249.56 251.44 253.38 255.36 257.4 259.5 / - 9 2 3 1 219.49 219.3 219.35 219.55 219.85 220.23 220.69 221.21 221.81 222.46 223.18 223.96 - 224.79 225.69 226.64 227.65 228.71 229.84 231.01 232.24 233.53 234.87 236.27 237.72 239.23 240.79 242.4 244.07 - 245.79 247.57 249.4 251.28 253.22 255.21 257.25 259.35 / - 9 2 4 1 219.21 218.99 219.02 219.21 219.5 219.88 220.33 220.86 221.45 222.11 222.82 223.6 - 224.44 225.33 226.28 227.29 228.36 229.48 230.66 231.9 233.19 234.53 235.93 237.39 238.9 240.46 242.08 243.75 - 245.48 247.26 249.09 250.98 252.92 254.92 256.97 259.07 / - 9 2 5 1 218.68 218.39 218.4 218.57 218.85 219.22 219.67 220.19 220.78 221.44 222.15 222.93 - 223.77 224.67 225.62 226.63 227.7 228.83 230.02 231.25 232.55 233.9 235.31 236.77 238.28 239.85 241.48 243.16 - 244.9 246.68 248.53 250.43 252.38 254.38 256.44 258.56 / - 9 2 6 1 217.63 217.25 217.21 217.36 217.62 217.98 218.42 218.94 219.52 220.17 220.89 221.67 - 222.51 223.41 224.37 225.39 226.47 227.6 228.79 230.04 231.34 232.71 234.12 235.6 237.13 238.71 240.35 242.05 - 243.8 245.61 247.47 249.39 251.36 253.38 255.46 257.6 / - 9 2 7 1 214.59 213.31 212.94 212.83 212.98 213.26 213.66 214.14 214.72 215.37 216.1 216.89 - 217.76 218.69 219.69 220.75 221.88 223.06 224.31 225.62 226.99 228.42 229.91 231.45 233.05 234.71 236.43 238.18 - 240.01 241.9 243.86 245.86 247.93 250.05 252.23 254.46 / - 9 2 8 1 205.73 200.01 199.12 198.79 198.79 199.02 199.4 199.93 200.57 201.32 202.17 203.11 - 204.14 205.23 206.42 207.69 209.03 210.44 211.91 213.46 215.09 216.78 218.53 220.33 222.22 224.17 226.18 228.25 - 230.38 232.56 234.82 237.13 239.5 241.93 244.42 246.96 / - 9 2 9 1 180.09 170.81 169.3 168.79 168.83 169.24 169.92 170.8 171.82 173.06 174.45 175.97 - 177.58 179.33 181.2 183.16 185.18 187.32 189.55 191.82 194.21 196.63 199.16 201.75 204.37 207.09 209.87 212.68 - 215.57 218.49 221.49 224.54 227.62 230.77 233.97 237.21 / - 9 2 10 1 133.59 127.13 126.23 126.42 127.24 128.43 130 131.86 133.95 136.24 138.79 141.41 - 144.17 147.13 150.14 153.34 156.56 159.93 163.39 166.86 170.54 174.15 177.82 181.72 185.52 189.39 193.66 197.59 - 201.55 205.52 209.54 214.03 218.11 222.22 226.36 230.53 / - 9 2 11 1 92.21 92.25 93.96 96.2 98.74 101.49 104.42 107.55 110.81 114.27 117.8 121.51 - 125.36 129.33 133.42 137.63 141.95 146.38 150.89 155.5 160.04 164.83 169.72 174.69 179.74 184.6 189.79 195.07 - 200.09 205.49 210.61 216.11 221.68 226.94 232.63 237.98 / - 9 2 12 1 76.06 78.83 82.02 85.48 89.06 92.74 96.54 100.46 104.52 108.73 113.09 117.59 - 122.24 127.03 131.96 137.02 142.21 147.53 152.96 159.2 165.49 171.58 177.88 184.08 190.41 196.92 203.38 209.92 - 216.56 223.27 230.08 236.96 243.94 250.94 258.03 265.24 / - 9 2 13 1 72.12 75.76 79.41 83.28 87.51 92.1 96.98 102.12 107.51 113.13 118.98 125.04 - 131.31 137.77 144.43 151.28 158.32 165.54 172.88 180.31 187.85 195.51 203.31 211.22 219.27 227.44 235.73 244.41 - 254.06 263.48 273.09 282.39 291.99 301.59 311.25 320.86 / - 9 2 14 1 68.12 73.59 78.75 84.19 90.11 96.52 103.38 110.71 118.46 126.59 135.04 143.81 - 152.88 162.22 171.84 181.72 191.85 202.23 212.83 223.68 234.76 246.08 257.63 269.32 281.12 293.04 305.12 317.37 - 329.77 342.36 355.11 368.05 381.56 396.05 410.69 425.26 / - 9 2 15 1 64.99 72.64 80.93 89.87 99.82 110.32 121.53 133.39 145.82 158.76 172.2 186.08 - 200.36 215.02 230.05 245.46 261.24 277.4 293.93 310.85 326.92 345.53 363.64 381.01 399.71 419.56 436.96 456.43 - 476.23 496.35 516.83 537.67 559.35 582.33 605.68 628.89 / - 9 2 16 1 63.84 78.53 95.36 112.56 130.36 148.85 167.8 187.14 208.46 228.6 251.25 274.52 - 296.6 320.41 345.68 371.12 397.64 425 452.84 481.07 509.26 539.6 570.69 602.49 635.03 668.11 701.09 735.31 - 771.23 808.86 847.65 886.4 925.79 965.83 1006.15 1046.56 / - 9 2 17 1 73.24 101.77 131.35 160.41 190.19 221.2 253.75 288.05 323.64 360.37 400.24 439.76 - 482.71 526.86 572.71 617.77 666.74 717.45 769.98 824.56 879.93 937.67 997.66 1058.87 1120.82 1181.92 1239.79 1293.45 - 1334.72 1381.5 1427.2 1476.73 1526.69 1580.45 1633 1683.38 / - 9 2 18 1 98.19 145.51 194.75 245.49 298.53 354.75 414.77 478.69 546.76 618.37 693.57 773.61 - 858.17 947.28 1039.6 1134.33 1230.8 1321.42 1410.39 1501.59 1597.14 1686.78 1780.03 1872.86 1965.57 2062.14 2159.91 2259.93 - 2356.59 2461.33 2564.05 2671 2778.06 2886.81 2993.64 3106.98 / - 9 2 19 1 139.75 216.5 300.35 394.34 496.28 608.36 729.03 860.4 1005.12 1156.64 1302.53 1445.48 - 1590.24 1749.9 1905.66 2066.77 2240.86 2411.39 2584.73 2767.33 2949.48 3139.17 3336.25 3533.73 3737.07 3943.25 4154.73 4375.37 - 4594.79 4820.52 5054.75 5287.66 5529.35 5778.52 6016.4 6272.07 / - 9 2 20 1 207.18 328.09 474.64 662.1 879.02 1117.09 1365 1614.3 1873.65 2149.24 2442.44 2754.34 - 3066.32 3411.33 3756.96 4110.18 4512.8 4898.31 5300.79 5709.94 6143 6579.72 7029.04 7490.71 7966.17 8453.56 8959.83 9450.35 - 9983.37 10518.8 11067.62 11640.15 12220.13 12789.33 13402.37 14046.5 / - 9 3 1 1 221.56 221.39 221.45 221.65 221.95 222.33 222.79 223.32 223.92 224.58 225.29 226.07 - 226.91 227.81 228.76 229.77 230.84 231.96 233.14 234.37 235.66 237.01 238.41 239.86 241.37 242.93 244.55 246.22 - 247.95 249.72 251.56 253.44 255.38 257.38 259.43 261.53 / - 9 3 2 1 221.48 221.29 221.35 221.54 221.84 222.23 222.69 223.22 223.81 224.47 225.19 225.96 - 226.8 227.7 228.65 229.66 230.73 231.85 233.03 234.27 235.56 236.9 238.3 239.76 241.27 242.83 244.45 246.12 - 247.85 249.63 251.47 253.36 255.3 257.29 259.34 261.45 / - 9 3 3 1 221.32 221.12 221.16 221.35 221.65 222.03 222.49 223.02 223.61 224.27 224.99 225.76 - 226.6 227.5 228.45 229.46 230.53 231.66 232.84 234.07 235.37 236.71 238.11 239.57 241.08 242.65 244.27 245.95 - 247.67 249.46 251.29 253.19 255.13 257.13 259.18 261.29 / - 9 3 4 1 221.03 220.79 220.82 221 221.29 221.67 222.12 222.65 223.24 223.9 224.62 225.39 - 226.23 227.13 228.09 229.1 230.17 231.29 232.48 233.72 235.01 236.36 237.76 239.22 240.74 242.31 243.93 245.61 - 247.35 249.14 250.98 252.87 254.82 256.83 258.89 261 / - 9 3 5 1 220.47 220.17 220.17 220.34 220.62 220.99 221.44 221.96 222.55 223.21 223.92 224.7 - 225.54 226.44 227.4 228.42 229.49 230.62 231.81 233.05 234.35 235.7 237.11 238.58 240.1 241.68 243.31 245 - 246.74 248.54 250.39 252.3 254.26 256.27 258.34 260.46 / - 9 3 6 1 219.37 218.97 218.92 219.05 219.3 219.66 220.1 220.61 221.2 221.85 222.57 223.35 - 224.19 225.09 226.05 227.07 228.15 229.29 230.49 231.74 233.05 234.42 235.84 237.32 238.86 240.45 242.1 243.8 - 245.56 247.38 249.25 251.17 253.15 255.19 257.28 259.43 / - 9 3 7 1 216.01 214.57 214.07 214.02 214.16 214.44 214.84 215.32 215.9 216.55 217.28 218.08 - 218.95 219.89 220.89 221.96 223.09 224.28 225.54 226.86 228.24 229.68 231.18 232.74 234.36 236.04 237.77 239.57 - 241.42 243.34 245.31 247.34 249.42 251.57 253.76 256.02 / - 9 3 8 1 206.66 200.5 199.59 199.27 199.27 199.5 199.89 200.42 201.08 201.85 202.71 203.66 - 204.71 205.83 207.04 208.33 209.69 211.12 212.63 214.21 215.86 217.56 219.35 221.21 223.12 225.09 227.13 229.24 - 231.41 233.62 235.9 238.25 240.66 243.12 245.64 248.22 / - 9 3 9 1 180.04 170.56 169.04 168.55 168.6 169.03 169.73 170.61 171.69 172.97 174.39 175.95 - 177.6 179.4 181.2 183.19 185.25 187.43 189.69 192 194.42 196.92 199.45 202.08 204.75 207.51 210.57 213.43 - 216.38 219.36 222.41 225.51 228.65 231.86 235.1 238.4 / - 9 3 10 1 133.25 127.16 126.31 126.53 127.35 128.6 130.2 132.09 134.2 136.53 139.03 141.67 - 144.55 147.47 150.59 153.74 157.08 160.42 163.92 167.5 171.08 174.87 178.58 182.53 186.37 190.26 194.2 198.61 - 202.66 206.72 210.8 214.91 219.51 223.69 227.9 232.13 / - 9 3 11 1 92.27 92.41 94.16 96.42 98.99 101.77 104.75 107.9 111.22 114.67 118.28 122.03 - 125.91 129.92 134.06 138.31 142.67 147.01 151.57 156.21 160.94 165.78 170.71 175.73 180.58 185.75 190.99 196.01 - 201.39 206.85 212.02 217.58 222.85 228.53 233.88 239.69 / - 9 3 12 1 76.17 79 82.18 85.66 89.27 92.99 96.83 100.79 104.9 109.15 113.55 118.09 - 122.78 127.62 132.59 137.7 142.93 148.3 153.78 159.93 166.32 172.56 178.77 185.19 191.57 198.15 204.66 211.27 - 217.96 224.74 231.61 238.57 245.61 252.68 259.84 266.7 / - 9 3 13 1 72.18 75.9 79.6 83.5 87.76 92.37 97.28 102.46 107.89 113.56 119.45 125.56 - 131.87 138.38 145.09 151.99 159.07 166.34 173.73 181.21 188.8 196.51 204.36 212.33 220.43 228.65 237 245.47 - 254.9 264.73 274.27 283.79 293.64 303.2 312.9 322.89 / - 9 3 14 1 68.04 73.63 78.89 84.4 90.36 96.81 103.71 111.07 118.87 127.03 135.53 144.35 - 153.46 162.85 172.52 182.45 192.63 203.06 213.73 224.63 235.76 247.13 258.74 270.49 282.35 294.35 306.49 318.8 - 331.28 343.93 356.75 369.76 382.95 397.55 412.35 427.13 / - 9 3 15 1 64.94 72.65 81.02 90.04 100.05 110.59 121.84 133.73 146.22 159.2 172.68 186.6 - 200.94 215.66 230.74 246.2 262.03 278.24 294.83 311.79 328.81 345.64 364.73 381.75 400.95 419.5 438.36 457.92 - 477.79 498 518.55 539.47 560.76 583.39 606.9 630.74 / - 9 3 16 1 63.64 78.56 95.43 112.75 130.54 149.07 168.04 187.41 208.77 228.94 251.65 274.97 - 296.72 320.98 346.29 371.9 398.37 425.77 453.81 482.04 510.12 540.47 571.58 603.39 635.92 669.07 702.61 736.38 - 771.85 809.58 848.05 887.08 926.81 966.54 1006.94 1047.65 / - 9 3 17 1 73.18 101.74 131.38 160.5 190.33 221.78 253.93 288.22 323.82 360.55 400.44 439.97 - 482.95 527.12 572.99 618.01 666.93 717.56 770.12 824.67 880.06 937.81 996.98 1058.72 1120.58 1182.35 1240.8 1295.31 - 1338.28 1386.58 1434.62 1485.05 1537.36 1591.34 1646.07 1699.2 / - 9 3 18 1 98.06 145.54 194.71 245.57 298.67 355.04 414.9 478.73 546.71 618.28 693.32 773.17 - 857.53 946.44 1038.8 1133.09 1229.96 1318.18 1401.72 1487.25 1576.68 1667.49 1761.71 1856.66 1951.87 2049.92 2146.44 2248.63 - 2346.78 2451.21 2556.58 2663 2774.1 2881.74 2990.93 3106.99 / - 9 3 19 1 139.57 216.33 299.93 394.39 496.34 607.06 728.12 859.83 1001.23 1151.52 1301.93 1445.53 - 1590.9 1751.22 1907.82 2070.76 2247.39 2420.23 2596.05 2779.91 2964.95 3157.37 3356.41 3556.1 3761.81 3970.23 4184.01 4407.06 - 4629.94 4857.23 5093.78 5322.99 5573.76 5825.26 6066.4 6324.79 / - 9 3 20 1 206.98 327.98 472.07 658.78 873.84 1116.31 1364.6 1609.24 1875.13 2151.96 2446.5 2759.88 - 3073.45 3420.42 3767.8 4123.07 4527.9 4918.65 5325.39 5740.03 6177.03 6610.39 7075.98 7530.04 8023.98 8517.17 9019.71 9525.05 - 10053.79 10604.81 11160.38 11729.88 12326.25 12902.08 13522.13 14158.04 / - 9 4 1 1 223.4 223.21 223.26 223.46 223.76 224.14 224.6 225.13 225.73 226.39 227.1 227.89 - 228.72 229.62 230.58 231.59 232.66 233.79 234.97 236.21 237.5 238.85 240.25 241.71 243.23 244.8 246.42 248.1 - 249.83 251.62 253.46 255.35 257.3 259.3 261.36 263.47 / - 9 4 2 1 223.31 223.11 223.16 223.35 223.65 224.03 224.49 225.02 225.62 226.27 226.99 227.77 - 228.61 229.51 230.47 231.48 232.55 233.68 234.86 236.1 237.39 238.74 240.15 241.61 243.12 244.69 246.32 248 - 249.73 251.52 253.36 255.26 257.21 259.21 261.27 263.39 / - 9 4 3 1 223.15 222.93 222.97 223.16 223.45 223.83 224.29 224.82 225.41 226.07 226.79 227.57 - 228.41 229.3 230.26 231.27 232.35 233.47 234.66 235.9 237.19 238.54 239.95 241.41 242.93 244.5 246.13 247.81 - 249.55 251.34 253.18 255.08 257.04 259.04 261.11 263.22 / - 9 4 4 1 222.84 222.59 222.61 222.79 223.08 223.46 223.91 224.44 225.03 225.69 226.4 227.18 - 228.02 228.92 229.88 230.9 231.97 233.1 234.28 235.53 236.82 238.18 239.59 241.05 242.57 244.15 245.78 247.47 - 249.21 251 252.85 254.76 256.72 258.73 260.8 262.92 / - 9 4 5 1 222.25 221.94 221.94 222.11 222.38 222.75 223.2 223.73 224.32 224.97 225.69 226.47 - 227.31 228.21 229.17 230.19 231.27 232.4 233.59 234.84 236.14 237.5 238.91 240.39 241.91 243.5 245.13 246.83 - 248.58 250.38 252.24 254.15 256.12 258.15 260.23 262.36 / - 9 4 6 1 221.09 220.66 220.58 220.7 220.95 221.29 221.73 222.24 222.82 223.47 224.19 224.97 - 225.81 226.72 227.68 228.71 229.79 230.93 232.13 233.39 234.7 236.08 237.51 238.99 240.54 242.14 243.79 245.5 - 247.27 249.1 250.98 252.91 254.91 256.95 259.06 261.21 / - 9 4 7 1 217.38 215.63 215.23 215.16 215.28 215.55 215.93 216.42 216.99 217.65 218.38 219.18 - 220.06 221 222.01 223.09 224.23 225.44 226.71 228.04 229.44 230.89 232.41 233.99 235.62 237.32 239.08 240.9 - 242.77 244.7 246.69 248.73 250.83 252.99 255.21 257.49 / - 9 4 8 1 207.56 200.95 200 199.67 199.66 199.89 200.3 200.85 201.52 202.3 203.16 204.13 - 205.2 206.35 207.58 208.9 210.28 211.75 213.27 214.88 216.56 218.31 220.12 221.99 223.94 225.96 228.03 230.16 - 232.36 234.63 236.94 239.33 241.77 244.27 246.82 249.44 / - 9 4 9 1 179.96 170.21 168.76 168.28 168.35 168.8 169.48 170.42 171.56 172.84 174.22 175.81 - 177.52 179.3 181.24 183.29 185.38 187.61 189.93 192.28 194.76 197.31 199.89 202.57 205.33 208.11 210.99 213.89 - 216.88 219.9 223 226.15 229.34 232.59 236.21 239.57 / - 9 4 10 1 132.73 127.16 126.36 126.61 127.49 128.73 130.36 132.27 134.4 136.81 139.34 142.02 - 144.84 147.89 150.96 154.23 157.51 160.98 164.44 168.06 171.76 175.44 179.35 183.16 187.22 191.15 195.14 199.18 - 203.68 207.86 212.04 216.22 220.44 225.15 229.44 233.75 / - 9 4 11 1 92.44 92.54 94.34 96.64 99.24 102.06 105.08 108.25 111.6 115.11 118.76 122.55 - 126.47 130.52 134.6 138.88 143.27 147.77 152.37 157.06 161.83 166.73 171.71 176.54 181.67 186.89 191.9 197.26 - 202.7 207.87 213.44 219.06 224.38 230.12 235.53 241.4 / - 9 4 12 1 76.29 79.18 82.35 85.84 89.48 93.24 97.12 101.13 105.27 109.57 114.01 118.59 - 123.33 128.2 133.22 138.37 143.65 149.06 154.59 160.51 166.98 173.44 179.67 186.16 192.58 199.13 205.69 212.34 - 219.37 226.22 233.16 239.83 246.92 254.09 261.3 268.58 / - 9 4 13 1 72.22 76.04 79.79 83.73 88 92.64 97.59 102.81 108.28 113.98 119.92 126.07 - 132.43 138.99 145.74 152.69 159.82 167.14 174.58 182.11 189.75 197.52 205.41 213.44 221.59 229.87 238.28 246.81 - 256.03 265.97 275.65 285.25 295.11 304.81 314.56 324.49 / - 9 4 14 1 67.97 73.67 79.03 84.6 90.6 97.09 104.04 111.44 119.27 127.47 136.02 144.88 - 154.04 163.48 173.2 183.17 193.41 203.89 214.62 225.58 236.76 248.19 259.85 271.66 283.59 295.64 307.85 320.23 - 332.77 345.5 358.39 371.47 384.74 398.6 413.49 428.47 / - 9 4 15 1 64.89 72.65 81.11 90.2 100.26 110.86 122.14 134.08 146.62 159.64 173.15 187.13 - 201.52 216.29 231.43 246.94 262.83 279.08 295.72 312.73 330.01 346.68 365.81 382.9 402.16 420.81 441.61 459.38 - 479.34 499.62 520.25 541.24 562.62 584.37 608 632.07 / - 9 4 16 1 63.61 78.65 95.51 113.04 130.71 149.29 168.33 187.69 209.06 229.28 252.02 275.41 - 298.67 321.52 346.88 372.54 399.08 426.52 454.65 482.87 510.95 541.31 572.44 604.24 636.75 669.99 703.75 737.39 - 772.89 809.7 848.23 887.44 927.46 967.55 1007.97 1048.44 / - 9 4 17 1 73.26 101.72 131.4 160.83 190.53 221.94 254.1 288.39 323.99 361.15 400.62 440.39 - 483.15 527.4 573.19 618.21 667.05 717.79 770.06 824.65 880.08 937.82 996.97 1058.61 1120.54 1182.42 1241.68 1296.8 - 1341.81 1391.73 1441.65 1493.58 1547.53 1601.17 1660.38 1714.55 / - 9 4 18 1 97.93 145.55 194.65 245.74 298.94 355.2 415.04 478.78 546.63 618.15 693.04 772.73 - 856.83 945.54 1037.87 1132.25 1228.92 1318.01 1402.52 1489.72 1579.99 1670.14 1765.9 1863 1958.19 2057.18 2156.22 2259.64 - 2357.46 2463.12 2569.86 2677.53 2789.93 2900.9 3011.71 3129.22 / - 9 4 19 1 139.38 216.16 299.49 393.7 496.41 606.96 727.84 859.26 1000.31 1150.37 1301.23 1445.45 - 1591.48 1752.47 1909.84 2073.64 2251.87 2427.44 2608.43 2792.42 2980.07 3175.25 3376.88 3579.24 3787.67 3998.59 4214.87 4435.09 - 4668.99 4895.91 5134.81 5367.27 5620.58 5874.49 6118.96 6380.35 / - 9 4 20 1 206.77 327.87 469.5 655.45 869.17 1109.76 1359.58 1609.77 1876.68 2154.75 2450.68 2765.6 - 3080.86 3429.84 3778.94 4136.41 4511.03 4940.61 5346.83 5763.94 6208.89 6650.05 7121.96 7581.81 8081.71 8581.27 9089.76 9601.05 - 10135.74 10693.28 11256 11832.72 12436.42 13019.64 13647.11 14290.76 / - 9 5 1 1 225.29 225.06 225.1 225.29 225.58 225.96 226.42 226.95 227.54 228.2 228.92 229.7 - 230.54 231.44 232.4 233.41 234.48 235.61 236.8 238.04 239.34 240.69 242.1 243.56 245.08 246.66 248.29 249.97 - 251.71 253.5 255.35 257.25 259.21 261.22 263.29 265.41 / - 9 5 2 1 225.2 224.96 224.99 225.18 225.47 225.85 226.31 226.83 227.43 228.08 228.8 229.58 - 230.42 231.32 232.28 233.3 234.37 235.5 236.68 237.93 239.22 240.58 241.99 243.45 244.97 246.55 248.18 249.87 - 251.61 253.4 255.25 257.16 259.11 261.13 263.2 265.32 / - 9 5 3 1 225.03 224.77 224.79 224.97 225.26 225.64 226.1 226.62 227.21 227.87 228.59 229.37 - 230.21 231.11 232.07 233.08 234.16 235.29 236.47 237.72 239.02 240.37 241.78 243.25 244.77 246.35 247.98 249.67 - 251.41 253.21 255.06 256.97 258.93 260.95 263.02 265.15 / - 9 5 4 1 224.7 224.41 224.42 224.6 224.88 225.25 225.7 226.23 226.82 227.48 228.19 228.98 - 229.82 230.72 231.67 232.69 233.77 234.9 236.09 237.33 238.63 239.99 241.41 242.88 244.4 245.98 247.62 249.31 - 251.06 252.86 254.72 256.63 258.6 260.62 262.7 264.83 / - 9 5 5 1 224.08 223.74 223.73 223.88 224.16 224.52 224.97 225.49 226.08 226.74 227.46 228.24 - 229.08 229.98 230.94 231.96 233.04 234.17 235.37 236.62 237.92 239.29 240.71 242.19 243.72 245.31 246.95 248.65 - 250.41 252.22 254.08 256.01 257.98 260.01 262.1 264.25 / - 9 5 6 1 222.81 222.31 222.22 222.32 222.56 222.9 223.33 223.84 224.42 225.07 225.79 226.57 - 227.41 228.32 229.28 230.31 231.4 232.54 233.75 235.01 236.33 237.71 239.14 240.64 242.19 243.79 245.46 247.18 - 248.96 250.79 252.68 254.63 256.63 258.69 260.8 262.98 / - 9 5 7 1 218.73 216.79 216.25 216.18 216.3 216.57 216.97 217.46 218.03 218.7 219.44 220.25 - 221.14 222.09 223.11 224.2 225.36 226.58 227.86 229.21 230.62 232.09 233.62 235.22 236.87 238.58 240.35 242.18 - 244.07 245.99 248 250.07 252.19 254.38 256.62 258.92 / - 9 5 8 1 207.97 201.25 200.33 199.96 199.96 200.2 200.62 201.18 201.86 202.66 203.56 204.53 - 205.62 206.79 208.04 209.38 210.8 212.3 213.87 215.47 217.19 218.97 220.82 222.74 224.72 226.75 228.87 231.05 - 233.29 235.57 237.93 240.36 242.83 245.37 247.97 250.63 / - 9 5 9 1 180.02 169.91 168.47 168.01 168.1 168.52 169.27 170.24 171.35 172.68 174.13 175.75 - 177.49 179.36 181.29 183.36 185.54 187.76 190.12 192.57 195.05 197.65 200.28 203.03 205.83 208.66 211.6 214.56 - 217.61 220.71 223.84 227.05 230.3 233.6 236.97 240.36 / - 9 5 10 1 132.55 127.16 126.42 126.74 127.61 128.91 130.56 132.49 134.66 137.03 139.66 142.37 - 145.22 148.2 151.41 154.63 158.03 161.44 165.05 168.62 172.35 176.17 179.96 183.98 187.89 192.05 196.09 200.17 - 204.7 208.89 213.17 217.49 221.8 226.12 230.96 235.34 / - 9 5 11 1 92.54 92.71 94.52 96.85 99.49 102.33 105.39 108.6 111.97 115.51 119.18 122.99 - 126.94 131.03 135.23 139.55 143.99 148.53 153.18 157.91 162.73 167.47 172.48 177.58 182.77 188.04 193.1 198.51 - 204.01 209.23 214.86 220.19 225.91 231.33 237.19 243.12 / - 9 5 12 1 76.41 79.35 82.52 86.02 89.68 93.48 97.4 101.45 105.64 109.98 114.46 119.09 - 123.87 128.79 133.85 139.05 144.37 149.82 155.39 161.08 167.77 174.21 180.71 187.14 193.74 200.35 206.97 213.68 - 220.49 227.38 234.36 241.43 248.59 255.83 263.11 270.47 / - 9 5 13 1 72.25 76.18 79.98 83.96 88.25 92.91 97.89 103.15 108.66 114.41 120.38 126.58 - 132.98 139.59 146.39 153.39 160.57 167.93 175.42 183 190.69 198.51 206.46 214.54 222.75 231.09 239.55 248.13 - 256.84 266.85 276.67 286.7 296.58 306.42 316.24 326.22 / - 9 5 14 1 67.9 73.7 79.16 84.8 90.85 97.38 104.37 111.8 119.67 127.92 136.51 145.42 - 154.62 164.11 173.87 183.9 194.18 204.72 215.5 226.52 237.76 249.24 260.95 272.82 284.81 296.94 309.21 321.65 - 334.26 347.05 360.02 373.18 386.51 400.03 414.58 429.71 / - 9 5 15 1 64.85 72.66 81.19 90.35 100.48 111.12 122.63 134.64 147 160.08 173.63 187.65 - 202.08 216.92 232.12 247.68 263.61 279.92 296.6 313.66 330.99 347.7 366.87 384.5 403.36 422.08 442.99 460.82 - 480.85 501.22 521.92 542.99 564.43 586.26 609 633.18 / - 9 5 16 1 63.49 78.68 95.58 113.16 130.88 149.5 168.56 187.96 209.35 229.61 252.37 275.83 - 299.14 322.05 347.45 373.16 399.76 427.23 455.4 482.81 511.75 542.12 573.24 605.06 637.55 670.81 704.79 738.36 - 773.87 810.2 848.83 888.19 928.04 968.11 1008.83 1049.27 / - 9 5 17 1 73.21 101.69 131.48 161.02 191.11 222.09 254.31 288.56 324.15 361.36 400.78 441.59 - 483.32 527.76 573.36 618.36 667.13 717.77 770.04 824.44 879.97 937.71 996.85 1058.13 1119.82 1182.34 1242 1297.54 - 1345.51 1396.91 1448.68 1503.03 1557.91 1614.22 1674.29 1730.3 / - 9 5 18 1 97.79 145.43 194.6 245.8 299.06 355.34 415.2 478.82 546.54 617.99 692.72 772.18 - 856.07 944.56 1036.76 1131.27 1227.07 1317.67 1403.32 1492.98 1582.32 1674.44 1771.15 1868.15 1965.66 2065.92 2164.69 2270.96 - 2370.08 2477.07 2585.21 2694.3 2808.17 2920.68 3033.2 3155.3 / - 9 5 19 1 139.19 215.98 299.08 392.97 495.38 606.89 726.37 857.21 998.97 1149.16 1300.41 1445.28 - 1591.93 1753.63 1911.81 2076.51 2248.48 2432.49 2616.52 2802.96 2992.56 3191.22 3392.79 3601.8 3808.97 4027.24 4246.42 4469.74 - 4704.17 4936.68 5178.21 5413.91 5663.15 5926.59 6174.56 6438.85 / - 9 5 20 1 206.56 327.77 466.19 652.12 868.19 1108.89 1353.9 1606.05 1866.23 2157.6 2455.01 2751.98 - 3088.55 3418.32 3790.63 4150.33 4527.29 4955.9 5368.12 5788.31 6234.98 6685.09 7154.48 7632.23 8124.9 8637.34 9160.18 9668.59 - 10219.13 10773.32 11353.88 11938.8 12536.55 13141.6 13777.11 14428.91 / - 9 6 1 1 227.41 227.04 227.03 227.19 227.46 227.83 228.28 228.8 229.39 230.04 230.76 231.54 - 232.38 233.27 234.23 235.25 236.32 237.45 238.64 239.88 241.18 242.54 243.95 245.42 246.94 248.52 250.16 251.85 - 253.59 255.39 257.25 259.16 261.12 263.14 265.22 267.35 / - 9 6 2 1 227.31 226.94 226.92 227.07 227.35 227.71 228.16 228.68 229.27 229.92 230.64 231.42 - 232.26 233.15 234.11 235.13 236.2 237.33 238.52 239.76 241.06 242.42 243.84 245.3 246.83 248.41 250.05 251.74 - 253.48 255.29 257.14 259.05 261.02 263.04 265.12 267.25 / - 9 6 3 1 227.14 226.74 226.71 226.86 227.13 227.5 227.94 228.46 229.05 229.7 230.42 231.2 - 232.04 232.93 233.89 234.91 235.98 237.11 238.3 239.55 240.85 242.21 243.62 245.09 246.62 248.2 249.84 251.53 - 253.28 255.09 256.95 258.86 260.83 262.86 264.93 267.07 / - 9 6 4 1 226.8 226.37 226.33 226.47 226.74 227.1 227.54 228.06 228.64 229.29 230.01 230.79 - 231.63 232.53 233.48 234.5 235.58 236.71 237.9 239.15 240.45 241.82 243.23 244.71 246.24 247.82 249.47 251.16 - 252.92 254.72 256.59 258.51 260.48 262.51 264.6 266.74 / - 9 6 5 1 226.16 225.68 225.61 225.73 225.99 226.34 226.78 227.3 227.88 228.53 229.25 230.03 - 230.87 231.77 232.73 233.75 234.83 235.96 237.16 238.41 239.72 241.09 242.51 243.99 245.53 247.12 248.77 250.47 - 252.24 254.05 255.93 257.86 259.84 261.88 263.98 266.13 / - 9 6 6 1 224.77 224.11 223.93 223.98 224.18 224.5 224.91 225.41 225.98 226.63 227.34 228.12 - 228.96 229.87 230.83 231.86 232.95 234.1 235.31 236.58 237.91 239.29 240.74 242.24 243.8 245.42 247.09 248.82 - 250.61 252.46 254.36 256.32 258.34 260.41 262.54 264.73 / - 9 6 7 1 220.36 218.06 217.39 217.26 217.35 217.6 217.97 218.45 219.03 219.69 220.43 221.24 - 222.13 223.09 224.12 225.22 226.38 227.61 228.91 230.27 231.69 233.17 234.72 236.33 238 239.74 241.53 243.38 - 245.29 247.26 249.29 251.38 253.54 255.74 258.01 260.34 / - 9 6 8 1 209.1 201.65 200.66 200.25 200.24 200.47 200.89 201.45 202.14 202.96 203.87 204.89 - 205.97 207.16 208.44 209.81 211.26 212.78 214.38 216.04 217.76 219.58 221.47 223.42 225.44 227.51 229.66 231.87 - 234.15 236.49 238.88 241.34 243.87 246.45 249.09 251.79 / - 9 6 9 1 180.31 169.64 168.16 167.73 167.81 168.31 169.09 170.02 171.21 172.57 174.07 175.68 - 177.46 179.35 181.36 183.43 185.65 187.91 190.32 192.8 195.32 197.95 200.68 203.43 206.3 209.19 212.19 215.24 - 218.31 221.47 224.66 227.93 231.23 234.6 238.02 241.48 / - 9 6 10 1 132.4 127.22 126.52 126.86 127.76 129.09 130.72 132.72 134.92 137.33 139.91 142.64 - 145.61 148.62 151.76 155.13 158.47 162.01 165.54 169.27 173.04 176.81 180.73 184.79 188.75 192.77 197.04 201.17 - 205.35 209.99 214.28 218.61 223.04 227.5 232.46 236.93 / - 9 6 11 1 92.72 92.88 94.7 97.06 99.73 102.62 105.72 108.99 112.41 115.96 119.69 123.54 - 127.53 131.65 135.89 140.25 144.72 149.31 153.85 158.63 163.48 168.42 173.48 178.63 183.62 188.91 194.3 199.76 - 204.99 210.59 215.92 221.66 227.45 232.93 238.84 244.42 / - 9 6 12 1 76.53 79.54 82.72 86.24 89.93 93.76 97.72 101.82 106.05 110.42 114.95 119.62 - 124.43 129.39 134.49 139.73 145.1 150.59 156.2 161.93 168.38 175.07 181.59 188.07 194.75 201.4 207.99 215.02 - 221.88 228.84 235.89 243.03 250.26 257.57 264.56 271.98 / - 9 6 13 1 72.27 76.34 80.18 84.21 88.53 93.21 98.22 103.51 109.06 114.85 120.87 127.1 - 133.55 140.2 147.04 154.08 161.31 168.72 176.26 183.89 191.63 199.5 207.5 215.63 223.89 232.29 240.81 249.45 - 258.21 267.7 277.94 287.91 297.79 307.94 317.91 327.94 / - 9 6 14 1 67.86 73.76 79.31 85.01 91.11 97.68 104.71 112.17 120.07 128.36 136.99 145.94 - 155.19 164.73 174.54 184.61 194.94 205.52 216.36 227.43 238.73 250.26 262.03 273.97 286.02 298.21 310.55 323.06 - 335.74 348.6 361.64 374.86 388.27 401.86 415.6 430.84 / - 9 6 15 1 64.82 72.69 81.29 90.52 100.7 111.39 122.96 135.28 147.38 160.51 174.1 188.16 - 202.64 217.52 232.79 248.4 264.39 280.74 297.47 314.57 332.02 348.71 367.9 386.59 404.49 424.72 444.3 462.21 - 482.32 502.76 523.55 544.68 566.2 588.09 610.4 634.18 / - 9 6 16 1 63.47 78.71 95.8 113.29 131.04 149.71 168.8 188.22 209.64 229.94 252.73 276.22 - 298.66 322.56 348 373.75 400.41 427.92 456.11 483.55 512.51 542.89 574.02 605.83 638.3 671.53 705.62 739.59 - 774.82 811.15 848.8 888.23 928.27 968.68 1009.27 1050.52 / - 9 6 17 1 73.29 101.64 131.65 161.09 191.23 222.23 254.77 288.72 324.3 362.47 400.91 442.05 - 483.44 527.88 573.48 618.46 667.14 717.67 769.82 824.11 880.19 937.47 996.62 1056.96 1119.36 1182.28 1242.71 1297.8 - 1349.22 1402.11 1455.69 1511.78 1568.45 1626.66 1688.4 1747.4 / - 9 6 18 1 97.67 145.42 194.5 245.86 299.17 355.47 415.38 478.85 546.44 617.8 692.46 771.6 - 855.17 943.47 1035.49 1130.12 1226.21 1315.56 1402.14 1492.56 1583.44 1676.47 1774.05 1871.96 1970.71 2070.73 2173.25 2279.09 - 2381.27 2489.54 2598.93 2709.66 2822.14 2938.91 3053.06 3176.46 / - 9 6 19 1 138.99 215.8 298.51 392.93 495.41 605.45 726.07 856.33 997.96 1147.87 1300.7 1444.94 - 1592.26 1754.71 1913.71 2079.36 2252.29 2437.49 2623.54 2810.59 3001.77 3204.63 3410.45 3622.83 3833.5 4055.19 4277.66 4504.46 - 4747.16 4978.28 5223.14 5462.19 5714.98 5981.6 6233.16 6500.81 / - 9 6 20 1 206.35 327.69 462.68 649.14 862.93 1102.26 1353.29 1602.88 1867.8 2146.19 2442.5 2758.25 - 3096.57 3428.27 3802.93 4166.32 4544.32 4980.67 5390.46 5813.49 6259 6715.97 7194.47 7679.91 8179.76 8699.42 9229.76 9745.51 - 10303.18 10865.19 11443.13 12047.27 12654.12 13263.33 13911.98 14572.68 / - 9 7 1 1 229.53 229.03 228.96 229.08 229.34 229.7 230.13 230.65 231.23 231.88 232.59 233.37 - 234.21 235.11 236.06 237.08 238.15 239.28 240.47 241.72 243.02 244.38 245.8 247.27 248.8 250.38 252.02 253.71 - 255.47 257.27 259.13 261.05 263.02 265.05 267.13 269.27 / - 9 7 2 1 229.43 228.92 228.84 228.97 229.22 229.57 230.01 230.52 231.11 231.76 232.47 233.25 - 234.08 234.98 235.94 236.95 238.03 239.16 240.35 241.6 242.9 244.26 245.68 247.15 248.68 250.26 251.9 253.6 - 255.35 257.16 259.02 260.94 262.92 264.95 267.03 269.17 / - 9 7 3 1 229.25 228.72 228.63 228.75 229 229.35 229.79 230.3 230.88 231.53 232.24 233.02 - 233.86 234.75 235.71 236.73 237.8 238.93 240.12 241.37 242.68 244.04 245.46 246.93 248.46 250.05 251.69 253.39 - 255.14 256.95 258.82 260.74 262.72 264.75 266.84 268.98 / - 9 7 4 1 228.9 228.34 228.24 228.35 228.59 228.94 229.37 229.88 230.46 231.11 231.82 232.6 - 233.43 234.33 235.29 236.31 237.38 238.52 239.71 240.96 242.27 243.63 245.05 246.53 248.06 249.65 251.3 253 - 254.76 256.58 258.45 260.37 262.36 264.39 266.49 268.64 / - 9 7 5 1 228.24 227.62 227.49 227.59 227.82 228.16 228.59 229.09 229.67 230.32 231.03 231.81 - 232.65 233.55 234.51 235.53 236.61 237.74 238.94 240.19 241.51 242.87 244.3 245.79 247.33 248.92 250.58 252.29 - 254.06 255.88 257.76 259.7 261.69 263.74 265.84 268 / - 9 7 6 1 226.71 225.84 225.57 225.58 225.75 226.05 226.45 226.94 227.5 228.14 228.85 229.62 - 230.46 231.37 232.34 233.37 234.46 235.61 236.82 238.1 239.43 240.82 242.27 243.78 245.34 246.97 248.65 250.39 - 252.19 254.05 255.96 257.93 259.96 262.05 264.19 266.39 / - 9 7 7 1 221.95 219.08 218.38 218.21 218.29 218.52 218.89 219.37 219.94 220.61 221.35 222.17 - 223.07 224.04 225.08 226.19 227.36 228.61 229.91 231.29 232.73 234.23 235.79 237.42 239.11 240.86 242.64 244.51 - 246.45 248.44 250.5 252.61 254.79 257.02 259.31 261.66 / - 9 7 8 1 209.78 201.99 200.86 200.46 200.42 200.65 201.06 201.63 202.33 203.15 204.09 205.12 - 206.25 207.47 208.75 210.14 211.62 213.17 214.8 216.51 218.26 220.12 222.04 224.03 226.09 228.22 230.38 232.64 - 234.96 237.35 239.79 242.28 244.85 247.48 250.16 252.9 / - 9 7 9 1 180.53 169.3 167.86 167.45 167.56 168.08 168.85 169.86 171.07 172.45 173.98 175.66 - 177.48 179.38 181.43 183.58 185.8 188.15 190.55 193.08 195.69 198.33 201.09 203.87 206.76 209.74 212.72 215.85 - 218.97 222.2 225.49 228.79 232.17 235.58 239.06 242.58 / - 9 7 10 1 132.13 127.25 126.58 126.95 127.92 129.23 130.93 132.91 135.13 137.63 140.24 143 - 145.91 149.05 152.22 155.62 159.01 162.48 166.15 169.92 173.65 177.54 181.5 185.44 189.62 193.68 198 202.17 - 206.4 210.68 215.43 219.82 224.25 228.72 233.3 238.44 / - 9 7 11 1 92.91 93.05 94.86 97.26 100.01 102.97 106.09 109.38 112.83 116.45 120.17 124.1 - 128.12 132.19 136.45 140.84 145.34 149.95 154.67 159.48 164.38 169.37 174.48 179.44 184.71 190.06 195.5 200.71 - 206.29 211.96 217.33 223.14 228.62 234.52 240.5 246.14 / - 9 7 12 1 76.66 79.74 82.96 86.51 90.24 94.1 98.1 102.23 106.5 110.9 115.46 120.16 - 125.01 130.01 135.15 140.42 145.83 151.36 157.01 162.79 168.98 175.75 182.5 188.99 195.76 202.44 209.26 216.08 - 222.99 229.99 237.09 244.27 251.55 258.92 266.37 273.86 / - 9 7 13 1 72.3 76.51 80.41 84.49 88.84 93.56 98.6 103.92 109.49 115.31 121.36 127.64 - 134.12 140.81 147.7 154.78 162.05 169.5 177.09 184.76 192.55 200.47 208.53 216.71 225.03 233.48 242.05 250.75 - 259.57 268.51 278.83 288.94 299.28 309.13 319.24 329.68 / - 9 7 14 1 67.83 73.84 79.48 85.25 91.4 98.01 105.08 112.56 120.49 128.81 137.48 146.47 - 155.76 165.34 175.19 185.31 195.69 206.32 217.19 228.32 239.68 251.27 263.09 275.09 287.21 299.46 311.87 324.44 - 337.19 350.12 363.23 376.52 390 403.67 417.48 431.9 / - 9 7 15 1 64.81 72.75 81.41 90.71 100.94 111.8 123.5 135.36 148 160.92 174.55 188.65 - 203.18 218.11 233.43 249.1 265.14 281.54 298.31 315.46 332.99 349.68 368.91 387.62 405.58 424.95 444.09 463.55 - 483.74 504.26 525.12 546.33 567.91 589.88 612.24 635.02 / - 9 7 16 1 63.38 78.75 95.94 113.41 131.39 149.91 169.03 188.85 209.91 230.72 253.06 276.58 - 300.04 323.04 348.52 374.41 401.01 428.56 456.78 485.08 513.23 543.61 574.74 606.54 639 672.17 706.28 740.39 - 775.66 812.01 849.13 888.11 928.3 968.99 1009.86 1050.99 / - 9 7 17 1 73.22 101.6 131.66 161.17 191.35 222.37 255.49 288.88 324.44 362.58 401.01 442.36 - 483.5 527.96 573.55 618.52 667.11 717.51 769.52 823.67 879.89 937.03 996.2 1056.54 1118.12 1181.52 1242.87 1298.77 - 1352.46 1407.49 1462.72 1520.61 1580.04 1639.23 1702.64 1763.94 / - 9 7 18 1 97.53 145.46 194.44 245.94 299.27 355.67 415.5 478.98 546.33 617.57 692.07 770.98 - 854.27 942.31 1034.07 1128.76 1225.18 1315.33 1402.98 1494.37 1586.31 1680.57 1779.26 1878.31 1978.35 2079.73 2183.68 2290.83 - 2394.66 2504.38 2615.27 2727.59 2841.73 2960.18 3076.1 3200.98 / - 9 7 19 1 138.79 215.61 297.85 392.01 494.25 605.38 724.6 855.7 996.93 1146.51 1300.09 1440 - 1592.42 1747.51 1915.5 2082.14 2256.1 2442.41 2630.37 2818.04 3013.54 3215.11 3423.87 3640.22 3855.03 4079.02 4307.2 4537.8 - 4778.22 5019.49 5268.38 5511.22 5767.82 6029.79 6293.73 6565.19 / - 9 7 20 1 206.14 327.62 459.02 645.9 858.21 1094.97 1345.47 1600.38 1869.4 2149.2 2447.13 2764.78 - 3104.93 3438.75 3815.84 4182.09 4562.22 4960.25 5413.95 5840.05 6288.49 6744.92 7228.73 7724.7 8230.66 8750.72 9287.52 9821.07 - 10376.55 10957.23 11544.1 12157.59 12774.17 13393.04 14051.24 14721.55 / - 9 8 1 1 231.65 231.01 230.88 230.98 231.22 231.56 231.99 232.49 233.07 233.72 234.43 235.2 - 236.04 236.93 237.89 238.9 239.98 241.11 242.3 243.55 244.85 246.22 247.63 249.11 250.64 252.23 253.87 255.57 - 257.33 259.14 261.01 262.94 264.91 266.95 269.04 271.19 / - 9 8 2 1 231.55 230.9 230.76 230.86 231.09 231.43 231.86 232.37 232.94 233.59 234.3 235.07 - 235.91 236.8 237.76 238.78 239.85 240.98 242.17 243.42 244.73 246.09 247.51 248.99 250.52 252.11 253.75 255.46 - 257.21 259.03 260.9 262.82 264.8 266.84 268.93 271.08 / - 9 8 3 1 231.36 230.69 230.55 230.64 230.87 231.2 231.63 232.13 232.71 233.35 234.06 234.84 - 235.67 236.57 237.53 238.54 239.62 240.75 241.94 243.19 244.5 245.86 247.28 248.76 250.29 251.89 253.53 255.24 - 257 258.81 260.68 262.61 264.6 266.64 268.73 270.88 / - 9 8 4 1 231 230.3 230.14 230.22 230.44 230.78 231.2 231.7 232.28 232.92 233.63 234.4 - 235.24 236.13 237.09 238.11 239.18 240.32 241.51 242.76 244.07 245.44 246.86 248.34 249.88 251.48 253.13 254.83 - 256.6 258.42 260.3 262.23 264.22 266.26 268.37 270.52 / - 9 8 5 1 230.32 229.56 229.37 229.43 229.65 229.97 230.39 230.89 231.46 232.1 232.81 233.59 - 234.42 235.32 236.28 237.3 238.38 239.52 240.71 241.97 243.28 244.65 246.08 247.57 249.12 250.72 252.38 254.09 - 255.87 257.69 259.58 261.52 263.52 265.58 267.69 269.86 / - 9 8 6 1 228.62 227.54 227.17 227.11 227.25 227.52 227.9 228.37 228.92 229.55 230.26 231.03 - 231.87 232.77 233.74 234.77 235.87 237.03 238.25 239.53 240.86 242.26 243.72 245.24 246.82 248.46 250.15 251.91 - 253.72 255.59 257.52 259.51 261.55 263.65 265.81 268.03 / - 9 8 7 1 223.5 220.21 219.36 219.13 219.16 219.37 219.72 220.19 220.76 221.43 222.15 222.98 - 223.88 224.85 225.9 227.02 228.21 229.46 230.79 232.18 233.63 235.15 236.73 238.38 240.09 241.86 243.7 245.6 - 247.55 249.57 251.65 253.79 255.99 258.25 260.57 262.95 / - 9 8 8 1 210.79 202.24 201.01 200.56 200.5 200.71 201.12 201.7 202.41 203.24 204.19 205.25 - 206.4 207.64 208.98 210.4 211.88 213.47 215.13 216.88 218.7 220.56 222.52 224.55 226.66 228.83 231.04 233.34 - 235.71 238.14 240.63 243.16 245.78 248.45 251.18 253.98 / - 9 8 9 1 180.72 168.89 167.5 167.1 167.29 167.81 168.64 169.68 170.93 172.35 173.92 175.62 - 177.47 179.43 181.52 183.7 186 188.35 190.84 193.38 196.04 198.78 201.54 204.43 207.33 210.35 213.42 216.52 - 219.71 222.96 226.26 229.63 233.06 236.57 240.11 243.7 / - 9 8 10 1 131.85 127.29 126.68 127.08 128.03 129.41 131.13 133.15 135.39 137.86 140.49 143.36 - 146.3 149.37 152.68 155.99 159.54 163.05 166.76 170.45 174.34 178.18 182.18 186.26 190.31 194.59 198.75 203.18 - 207.46 211.78 216.16 221.03 225.51 230.04 234.61 239.23 / - 9 8 11 1 93.01 93.24 95.07 97.55 100.27 103.29 106.46 109.78 113.27 116.9 120.69 124.58 - 128.63 132.8 137.11 141.53 146.07 150.72 155.48 160.34 165.13 170.15 175.26 180.48 185.8 191.21 196.41 201.96 - 207.6 212.98 218.76 224.62 230.16 236.12 241.76 247.87 / - 9 8 12 1 76.81 79.96 83.22 86.81 90.56 94.46 98.49 102.65 106.95 111.39 115.98 120.72 - 125.6 130.63 135.81 141.12 146.56 152.13 157.82 163.64 169.72 176.57 183.29 190.07 196.77 203.49 210.34 217.4 - 224.37 231.44 238.61 245.86 253.21 260.65 268.18 275.75 / - 9 8 13 1 72.35 76.7 80.67 84.79 89.17 93.91 98.97 104.32 109.93 115.79 121.87 128.18 - 134.7 141.43 148.35 155.47 162.78 170.28 177.91 185.63 193.47 201.44 209.55 217.78 226.15 234.66 243.29 252.04 - 260.92 269.92 279.68 289.91 300.51 310.69 320.81 331.27 / - 9 8 14 1 67.81 73.93 79.67 85.51 91.7 98.33 105.43 112.96 120.91 129.26 137.96 146.99 - 156.32 165.94 175.83 186 196.42 207.09 218.02 229.19 240.61 252.25 264.13 276.19 288.37 300.69 313.16 325.8 - 338.62 351.62 364.8 378.16 391.72 405.46 419.33 433.36 / - 9 8 15 1 64.8 72.83 81.56 90.91 101.19 112.1 123.98 135.98 148.63 161.33 175 189.13 - 203.7 218.67 234.04 249.78 265.87 282.31 299.13 316.32 333.88 351.52 368.95 388.62 406.17 426.05 445.28 466.81 - 485.1 505.7 526.63 547.92 569.57 591.6 614.03 636.87 / - 9 8 16 1 63.33 78.84 96.01 113.62 131.91 150.09 169.24 189.61 210.17 231.06 253.37 276.91 - 300.49 323.48 348.99 375.03 401.56 429.16 457.41 485.77 513.89 544.28 575.4 607.2 639.63 672.74 706.77 740.78 - 776.33 812.74 849.88 887.76 928.07 969.01 1010.29 1051.47 / - 9 8 17 1 73.28 101.54 131.67 161.23 191.46 222.76 255.63 289.03 324.58 362.68 401.08 442.41 - 483.52 527.99 573.57 618.52 667.02 717.28 769.15 823.14 879.2 936.35 995.6 1055.95 1117.12 1180.32 1242.64 1299.95 - 1355.41 1412.3 1469.74 1529.48 1590.78 1651.97 1717.87 1779.98 / - 9 8 18 1 97.38 145.32 194.36 245.95 299.43 355.81 415.59 478.98 546.2 617.31 691.65 770.31 - 853.31 941.06 1032.54 1127.16 1223.92 1315.58 1403.2 1495.73 1589.15 1684.73 1784.61 1884.9 1986.27 2089.12 2194.54 2303.12 - 2408.6 2519.95 2632.42 2746.41 2862.31 2982.55 3100.34 3226.77 / - 9 8 19 1 138.58 215.43 297.35 391.95 494.26 603.9 724.25 853.55 992.56 1145.07 1298.69 1439.27 - 1593.94 1748.28 1917.19 2084.79 2259.81 2438.64 2636.7 2825.56 3023.28 3224.17 3435.23 3649.83 3871.44 4099.58 4332.37 4567.58 - 4812.44 5058.39 5311.76 5559.25 5820.26 6086.36 6354.98 6630.82 / - 9 8 20 1 205.92 327.58 453.51 642.74 852.99 1094.07 1344.77 1595.04 1864.12 2152.34 2452.01 2771.62 - 3091.13 3449.83 3798.75 4198.91 4581.11 4981.96 5438.8 5868.12 6319.73 6775.63 7264.77 7766.3 8277.01 8804.1 9350.04 9883.57 - 10457.51 11037.17 11644.61 12257.11 12895.33 13524.83 14179.11 14874.95 / - 9 9 1 1 233.75 232.99 232.81 232.87 233.09 233.42 233.84 234.34 234.91 235.55 236.26 237.03 - 237.86 238.75 239.71 240.72 241.8 242.93 244.12 245.37 246.68 248.04 249.46 250.94 252.48 254.07 255.72 257.42 - 259.19 261 262.88 264.81 266.8 268.84 270.94 273.09 / - 9 9 2 1 233.65 232.87 232.69 232.75 232.96 233.29 233.71 234.21 234.78 235.42 236.12 236.89 - 237.73 238.62 239.58 240.59 241.67 242.8 243.99 245.24 246.55 247.91 249.34 250.81 252.35 253.94 255.59 257.3 - 259.06 260.88 262.76 264.69 266.68 268.72 270.82 272.98 / - 9 9 3 1 233.45 232.66 232.46 232.52 232.73 233.05 233.47 233.97 234.54 235.17 235.88 236.65 - 237.48 238.38 239.33 240.35 241.42 242.56 243.75 245 246.31 247.67 249.1 250.58 252.12 253.71 255.36 257.07 - 258.84 260.66 262.54 264.47 266.46 268.51 270.61 272.77 / - 9 9 4 1 233.09 232.26 232.04 232.09 232.29 232.61 233.03 233.52 234.09 234.72 235.43 236.2 - 237.03 237.93 238.88 239.9 240.98 242.11 243.31 244.56 245.87 247.24 248.66 250.15 251.69 253.29 254.94 256.65 - 258.42 260.25 262.13 264.07 266.07 268.12 270.23 272.39 / - 9 9 5 1 232.39 231.5 231.25 231.28 231.47 231.78 232.19 232.68 233.25 233.88 234.59 235.36 - 236.19 237.09 238.04 239.06 240.14 241.28 242.48 243.74 245.05 246.43 247.86 249.35 250.9 252.5 254.16 255.89 - 257.66 259.5 261.39 263.34 265.35 267.41 269.53 271.71 / - 9 9 6 1 230.46 229.18 228.64 228.54 228.65 228.9 229.27 229.73 230.27 230.9 231.6 232.37 - 233.21 234.12 235.09 236.13 237.23 238.39 239.62 240.91 242.25 243.66 245.13 246.66 248.25 249.9 251.6 253.37 - 255.2 257.08 259.02 261.03 263.08 265.2 267.37 269.6 / - 9 9 7 1 224.98 221.06 220.15 219.88 219.88 220.08 220.42 220.88 221.45 222.11 222.86 223.7 - 224.61 225.59 226.65 227.78 228.99 230.26 231.6 233.01 234.48 236.02 237.63 239.3 241.03 242.82 244.68 246.6 - 248.55 250.6 252.71 254.87 257.1 259.39 261.74 264.15 / - 9 9 8 1 211.68 202.27 200.98 200.5 200.44 200.65 201.07 201.65 202.38 203.23 204.2 205.25 - 206.43 207.71 209.07 210.52 212.07 213.69 215.36 217.14 219 220.93 222.94 224.99 227.13 229.35 231.64 233.96 - 236.37 238.85 241.39 244 246.65 249.37 252.16 255 / - 9 9 9 1 180.74 168.43 167.13 166.77 166.96 167.55 168.41 169.51 170.79 172.24 173.85 175.6 - 177.47 179.48 181.61 183.83 186.16 188.58 191.12 193.72 196.44 199.18 202.05 204.94 207.95 210.99 214.12 217.32 - 220.54 223.85 227.18 230.6 234.04 237.6 241.17 244.81 / - 9 9 10 1 131.72 127.32 126.79 127.18 128.19 129.55 131.3 133.34 135.61 138.16 140.82 143.63 - 146.69 149.8 153.02 156.48 159.93 163.62 167.26 171.1 174.9 178.91 182.87 186.98 191.17 195.32 199.72 203.98 - 208.52 212.9 217.33 222.25 226.79 231.37 236 240.67 / - 9 9 11 1 93.2 93.45 95.34 97.85 100.6 103.61 106.82 110.18 113.69 117.36 121.17 125.13 - 129.21 133.42 137.76 142.22 146.8 151.36 156.14 161.03 166.03 171.09 176.25 181.53 186.89 192.08 197.6 203.21 - 208.58 214.34 220.18 225.72 231.7 237.35 243.43 249.6 / - 9 9 12 1 76.96 80.21 83.51 87.11 90.9 94.82 98.88 103.07 107.4 111.88 116.5 121.27 - 126.19 131.26 136.47 141.81 147.29 152.9 158.64 164.49 170.46 177.19 184.19 190.99 197.73 204.54 211.6 218.45 - 225.47 232.89 240.12 247.45 254.87 261.99 269.57 277.25 / - 9 9 13 1 72.4 76.91 80.94 85.1 89.5 94.26 99.35 104.73 110.37 116.26 122.38 128.72 - 135.28 142.05 149.01 156.17 163.52 171.05 178.73 186.5 194.38 202.4 210.56 218.85 227.27 235.82 244.51 253.32 - 262.26 271.32 280.49 290.79 301.56 311.97 322.36 332.77 / - 9 9 14 1 67.81 74.05 79.89 85.77 92 98.66 105.79 113.34 121.33 129.71 138.45 147.52 - 156.88 166.54 176.47 186.67 197.13 207.85 218.82 230.04 241.5 253.2 265.13 277.26 289.51 301.89 314.43 327.14 - 340.02 353.09 366.34 379.77 393.4 407.21 421.14 435.25 / - 9 9 15 1 64.81 72.93 81.72 91.12 101.43 112.67 124.28 136.51 149.05 161.72 175.43 189.6 - 204.2 219.22 234.62 250.41 266.56 283.05 299.91 317.14 334.74 352.78 369.88 389.56 408.56 427.08 446.39 466.07 - 486.38 507.06 528.07 549.43 571.15 593.25 615.73 638.62 / - 9 9 16 1 63.34 78.88 96.09 113.77 132.06 150.27 169.44 189.43 210.41 232.04 253.65 277.22 - 301.19 323.86 349.42 375.48 402.04 429.69 457.98 486.69 514.5 544.88 575.99 607.78 640.19 673.23 707.17 741.76 - 776.76 813.26 850.45 888.35 927.56 968.62 1009.59 1051.4 / - 9 9 17 1 73.21 101.46 131.67 161.28 191.56 222.89 255.76 289.17 325.3 362.76 401.11 442.42 - 483.49 527.96 573.53 618.72 666.87 717 768.89 822.52 878.39 935.39 994.72 1055.15 1116.22 1179.4 1241.96 1300.99 - 1358.64 1417.26 1476.9 1538.13 1600.88 1663.3 1730.11 1793.73 / - 9 9 18 1 97.24 145.33 194.22 245.94 299.51 355.89 415.69 479 546.06 617.01 691.2 769.61 - 852.3 939.72 1030.89 1125.29 1222.42 1315.6 1403.35 1495.79 1590.08 1687.85 1787.94 1891.15 1994.31 2098.86 2204.35 2316.07 - 2423.34 2536.32 2650.58 2766.34 2884.06 3003.1 3126.04 3254.13 / - 9 9 19 1 138.38 215.26 296.84 391.01 493.08 603.79 721.92 851.91 991.43 1139.11 1292.05 1438.48 - 1593.85 1749.03 1918.89 2088.44 2263.6 2443.65 2642.99 2833.27 3033.9 3233.67 3447.02 3663.97 3887.45 4117.6 4347.75 4591.61 - 4841.18 5085.88 5350.81 5603.35 5869.65 6140.49 6404.99 6695.35 / - 9 9 20 1 205.71 327.58 453.42 637.63 848.36 1086.81 1338.57 1590.37 1861.33 2155.65 2457.26 2778.84 - 3100.46 3461.59 3813.1 4216.03 4601.17 5005.03 5419.09 5897.95 6352.94 6812.58 7301.01 7808.01 8311.46 8848.64 9399.27 9948.88 - 10532.76 11123.3 11741.87 12365.65 13004.69 13656.99 14323.19 15015.13 / - 9 10 1 1 235.83 234.96 234.72 234.76 234.96 235.28 235.68 236.17 236.74 237.38 238.08 238.85 - 239.68 240.57 241.52 242.54 243.61 244.75 245.94 247.19 248.5 249.86 251.29 252.77 254.31 255.9 257.55 259.26 - 261.03 262.85 264.73 266.67 268.66 270.71 272.82 274.98 / - 9 10 2 1 235.73 234.84 234.6 234.63 234.83 235.14 235.55 236.04 236.6 237.24 237.94 238.71 - 239.54 240.43 241.39 242.4 243.48 244.61 245.8 247.05 248.36 249.73 251.15 252.63 254.17 255.77 257.42 259.13 - 260.9 262.73 264.61 266.55 268.54 270.59 272.7 274.86 / - 9 10 3 1 235.53 234.62 234.37 234.4 234.59 234.9 235.3 235.79 236.35 236.99 237.69 238.46 - 239.29 240.18 241.13 242.15 243.22 244.36 245.55 246.8 248.11 249.48 250.91 252.39 253.93 255.53 257.18 258.9 - 260.67 262.49 264.38 266.32 268.32 270.37 272.48 274.65 / - 9 10 4 1 235.16 234.21 233.94 233.95 234.14 234.44 234.84 235.33 235.89 236.52 237.22 237.99 - 238.82 239.71 240.67 241.68 242.76 243.89 245.09 246.34 247.65 249.02 250.45 251.94 253.48 255.09 256.75 258.46 - 260.24 262.07 263.96 265.9 267.9 269.96 272.08 274.25 / - 9 10 5 1 234.44 233.4 233.09 233.08 233.25 233.54 233.94 234.42 234.97 235.6 236.3 237.07 - 237.9 238.79 239.75 240.76 241.84 242.98 244.18 245.44 246.76 248.13 249.57 251.06 252.61 254.22 255.89 257.62 - 259.4 261.24 263.14 265.1 267.11 269.18 271.31 273.5 / - 9 10 6 1 232.24 230.74 230.07 229.87 229.95 230.18 230.53 230.99 231.53 232.15 232.85 233.62 - 234.46 235.37 236.35 237.39 238.5 239.66 240.9 242.19 243.55 244.97 246.44 247.98 249.58 251.24 252.97 254.75 - 256.59 258.49 260.44 262.46 264.53 266.66 268.85 271.1 / - 9 10 7 1 226.39 221.8 220.82 220.5 220.48 220.66 221 221.46 222.03 222.69 223.45 224.29 - 225.21 226.21 227.28 228.43 229.65 230.94 232.3 233.73 235.19 236.74 238.37 240.06 241.82 243.64 245.53 247.48 - 249.49 251.57 253.7 255.9 258.16 260.48 262.86 265.3 / - 9 10 8 1 212.63 202.28 200.89 200.36 200.27 200.47 200.88 201.47 202.2 203.07 204.06 205.16 - 206.36 207.67 209.04 210.53 212.1 213.76 215.51 217.33 219.2 221.17 223.23 225.35 227.52 229.78 232.12 234.52 - 236.98 239.49 242.09 244.74 247.46 250.23 253.07 255.97 / - 9 10 9 1 181.21 168 166.77 166.45 166.68 167.3 168.2 169.33 170.65 172.04 173.66 175.44 - 177.34 179.37 181.52 183.77 186.12 188.57 191.14 193.77 196.49 199.64 202.54 205.51 208.58 211.67 214.87 218.09 - 221.41 224.75 228.19 231.64 235.19 238.75 242.39 246.08 / - 9 10 10 1 131.33 127.4 126.85 127.31 128.31 129.73 131.51 133.58 135.88 138.39 141.14 143.99 - 146.99 150.22 153.48 156.98 160.46 164.03 167.86 171.62 175.59 179.51 183.64 187.81 191.94 196.24 200.69 205 - 209.37 214.02 218.5 223.03 228.07 232.71 237.39 242.12 / - 9 10 11 1 93.34 93.7 95.61 98.15 100.93 103.9 107.18 110.58 114.11 117.81 121.65 125.63 - 129.72 133.96 138.32 142.8 147.41 152.12 156.95 161.89 166.92 172.04 177.24 182.34 187.74 193.22 198.8 204.16 - 209.89 215.7 221.24 227.2 233.25 238.96 245.11 250.92 / - 9 10 12 1 77.14 80.48 83.81 87.43 91.23 95.18 99.27 103.5 107.86 112.37 117.03 121.83 - 126.79 131.89 137.13 142.51 148.03 153.68 159.45 165.34 171.35 177.8 184.88 191.8 198.68 205.58 212.67 219.76 - 226.84 234.03 241.3 248.68 256.15 263.71 271.37 279.12 / - 9 10 13 1 72.48 77.14 81.22 85.41 89.84 94.62 99.74 105.14 110.81 116.73 122.88 129.26 - 135.86 142.66 149.67 156.86 164.25 171.83 179.54 187.36 195.29 203.35 211.56 219.9 228.37 236.98 245.72 254.59 - 263.58 272.7 281.93 291.63 302.16 313.13 323.68 334.02 / - 9 10 14 1 67.83 74.2 80.11 86.03 92.3 99 106.15 113.73 121.74 130.15 138.93 148.04 - 157.44 167.13 177.1 187.34 197.84 208.6 219.6 230.86 242.36 254.11 266.09 278.29 290.61 303.06 315.67 328.44 - 341.39 354.53 367.84 381.35 395.04 408.93 422.92 437.1 / - 9 10 15 1 64.83 73.05 81.89 91.32 101.67 112.94 124.57 136.83 149.11 162.12 175.86 190.05 - 204.69 219.74 235.18 251 267.2 283.75 300.66 317.92 335.56 353.62 370.75 390.45 409.65 428.02 447.17 469.14 - 487.57 508.33 529.41 550.85 572.63 594.79 617.34 640.28 / - 9 10 16 1 63.32 78.92 96.16 113.88 132.19 150.44 169.63 190.13 210.62 232.27 253.89 277.49 - 301.77 324.18 349.79 375.88 402.46 430.15 458.48 487.21 515.04 545.41 576.51 608.28 640.66 673.63 707.48 741.97 - 776.89 813.49 850.77 888.71 927.34 967.26 1009.02 1051.19 / - 9 10 17 1 73.22 101.39 131.71 161.61 191.63 222.99 255.85 290.1 325.24 362.8 401.1 442.37 - 483.4 527.83 573.41 619.83 666.65 716.62 768.34 821.79 877.45 934.24 993.51 1054.04 1115.41 1177.4 1240.67 1301.52 - 1361.03 1421.41 1482.27 1545.15 1609.27 1673.2 1741.43 1806.88 / - 9 10 18 1 97.09 145.33 194.14 245.91 299.56 355.96 415.71 478.97 545.9 616.65 690.71 768.85 - 851.23 938.3 1029.1 1123.25 1219.46 1314.29 1403.81 1495.57 1591.79 1690.66 1789.64 1893.86 1998.68 2105.35 2213.43 2327.74 - 2438.05 2552.75 2669.35 2787.29 2907.15 3028.37 3153.45 3283.33 / - 9 10 19 1 138.17 215.1 296.46 390.06 493.08 602.3 721.52 851.19 990.26 1137.54 1290.49 1437.61 - 1593.73 1749.8 1913.71 2093.03 2267.47 2448.82 2649.5 2841.31 3043.49 3244.96 3458.45 3678.69 3903.72 4136.22 4368.66 4614.47 - 4866.22 5114.03 5383.49 5641.58 5913.78 6190.32 6460.1 6756.17 / - 9 10 20 1 205.51 327.63 453.46 633.71 839.7 1079.58 1330.62 1583.53 1858.84 2147.27 2449.35 2771.08 - 3110.52 3474.06 3828.47 4234.37 4622.52 5029.66 5447.2 5929.81 6388.44 6852.06 7340.01 7847.65 8363.45 8904.86 9460.03 10011.33 - 10593.22 11200.83 11816.73 12462.51 13114.1 13785.41 14462.41 15168.15 / - 9 11 1 1 237.88 236.91 236.63 236.64 236.82 237.12 237.52 238.01 238.57 239.2 239.89 240.66 - 241.49 242.38 243.33 244.34 245.42 246.55 247.74 248.99 250.3 251.67 253.1 254.58 256.12 257.72 259.38 261.09 - 262.86 264.69 266.58 268.52 270.52 272.57 274.69 276.86 / - 9 11 2 1 237.77 236.79 236.5 236.51 236.69 236.99 237.38 237.87 238.42 239.05 239.75 240.52 - 241.35 242.24 243.19 244.2 245.28 246.41 247.6 248.85 250.16 251.53 252.96 254.44 255.99 257.59 259.24 260.96 - 262.73 264.56 266.45 268.39 270.39 272.45 274.56 276.73 / - 9 11 3 1 237.57 236.56 236.26 236.26 236.44 236.73 237.13 237.61 238.17 238.8 239.49 240.26 - 241.08 241.97 242.93 243.94 245.01 246.15 247.34 248.59 249.9 251.27 252.7 254.19 255.73 257.33 258.99 260.71 - 262.48 264.32 266.21 268.15 270.15 272.22 274.33 276.51 / - 9 11 4 1 237.19 236.14 235.82 235.81 235.97 236.26 236.65 237.13 237.68 238.31 239.01 239.77 - 240.6 241.49 242.44 243.46 244.53 245.67 246.86 248.12 249.43 250.8 252.23 253.72 255.27 256.87 258.54 260.26 - 262.04 263.87 265.77 267.72 269.73 271.79 273.91 276.09 / - 9 11 5 1 236.41 235.24 234.86 234.81 234.95 235.22 235.6 236.07 236.61 237.24 237.93 238.69 - 239.52 240.41 241.36 242.38 243.46 244.6 245.8 247.06 248.38 249.76 251.2 252.69 254.25 255.86 257.54 259.27 - 261.06 262.91 264.82 266.78 268.8 270.88 273.02 275.22 / - 9 11 6 1 233.94 232.07 231.31 231.11 231.15 231.36 231.69 232.13 232.66 233.28 233.97 234.74 - 235.58 236.49 237.47 238.52 239.63 240.8 242.04 243.35 244.71 246.14 247.63 249.18 250.8 252.47 254.21 256 - 257.85 259.77 261.75 263.78 265.88 268.03 270.24 272.51 / - 9 11 7 1 227.71 222.6 221.45 220.99 220.94 221.11 221.43 221.89 222.46 223.13 223.89 224.74 - 225.68 226.69 227.78 228.9 230.14 231.45 232.83 234.28 235.8 237.38 239.04 240.76 242.54 244.4 246.31 248.29 - 250.34 252.44 254.61 256.85 259.14 261.47 263.88 266.36 / - 9 11 8 1 212.57 202.06 200.6 200.04 199.94 200.13 200.55 201.15 201.9 202.79 203.8 204.9 - 206.14 207.47 208.9 210.43 212.04 213.71 215.5 217.36 219.31 221.34 223.4 225.58 227.83 230.15 232.5 234.96 - 237.48 240.07 242.7 245.41 248.19 251.03 253.91 256.87 / - 9 11 9 1 181.13 167.69 166.47 166.12 166.39 167.04 167.96 169.03 170.37 171.88 173.55 175.36 - 177.31 179.4 181.6 183.9 186.3 188.81 191.4 194.09 196.86 199.74 202.67 205.7 208.79 212.36 215.6 218.9 - 222.25 225.7 229.21 232.73 236.34 239.98 243.7 247.43 / - 9 11 10 1 130.86 127.44 126.96 127.41 128.46 129.88 131.68 133.81 136.14 138.68 141.39 144.35 - 147.38 150.54 153.94 157.34 160.99 164.6 168.3 172.27 176.15 180.24 184.27 188.53 192.81 197.16 201.46 206.02 - 210.44 215.15 219.68 224.26 228.89 234.06 238.8 243.59 / - 9 11 11 1 93.54 93.95 95.89 98.45 101.27 104.27 107.5 110.97 114.54 118.26 122.13 126.14 - 130.3 134.57 138.97 143.49 148.13 152.89 157.76 162.74 167.64 172.81 178.04 183.37 188.82 194.37 199.71 205.41 - 211.2 216.73 222.67 228.69 234.4 240.57 246.39 252.66 / - 9 11 12 1 77.34 80.76 84.11 87.75 91.58 95.56 99.67 103.93 108.33 112.87 117.56 122.4 - 127.38 132.52 137.79 143.21 148.76 154.45 160.26 166.19 172.23 178.39 185.54 192.61 199.63 206.58 213.76 220.88 - 227.93 235.16 242.81 250.25 257.8 265.04 272.76 280.57 / - 9 11 13 1 72.6 77.39 81.51 85.73 90.18 94.99 100.12 105.56 111.26 117.2 123.39 129.8 - 136.43 143.27 150.31 157.55 164.98 172.6 180.35 188.21 196.19 204.3 212.55 220.93 229.46 238.12 246.91 255.83 - 264.88 274.06 283.35 292.77 303.02 313.78 324.62 335.39 / - 9 11 14 1 67.89 74.37 80.33 86.31 92.61 99.33 106.51 114.12 122.15 130.59 139.4 148.53 - 157.98 167.71 177.72 187.99 198.53 209.32 220.37 231.66 243.2 254.98 267 279.26 291.66 304.19 316.86 329.7 - 342.72 355.92 369.3 382.88 396.64 410.59 424.65 438.9 / - 9 11 15 1 64.88 73.18 82.06 91.54 101.92 113.21 124.86 137.14 149.77 162.74 176.27 190.49 - 205.16 220.23 235.7 251.56 267.79 284.39 301.34 318.65 336.31 354.09 371.55 391.27 410.48 428.87 448.78 468.52 - 488.62 509.46 530.63 552.14 573.99 596.21 618.81 641.81 / - 9 11 16 1 63.34 78.97 96.24 113.98 132.32 150.6 169.81 190.65 210.82 231.83 254.1 277.71 - 302.01 324.44 350.09 376.2 402.79 430.5 458.87 487.64 516.67 545.84 576.92 608.67 641.02 673.92 707.67 741.61 - 776.83 813.35 850.73 888.77 927.44 966.74 1008.03 1049.77 / - 9 11 17 1 73.18 101.33 131.76 161.65 191.68 223.21 255.9 290.28 325.94 362.86 401.03 442.25 - 483.23 527.6 573.18 618.76 666.34 716.14 767.69 820.99 876.37 932.92 991.96 1052.54 1114.04 1175.56 1238.85 1300.53 - 1354.91 1412.31 1469.65 1528.71 1589.48 1649.96 1714.65 1775.16 / - 9 11 18 1 96.95 145.18 194.05 245.86 299.6 355.99 415.7 478.9 545.68 616.28 690.17 768.05 - 850.09 936.78 1027.2 1121.03 1217.16 1312.72 1402.86 1495.23 1592.09 1691.49 1791.31 1896.32 2001.93 2109.48 2218.45 2334.27 - 2449.05 2563.72 2683.28 2804.46 2927.48 3051.76 3179.73 3312.76 / - 9 11 19 1 137.97 214.94 295.78 390.03 491.86 602.27 721.08 849.32 986.75 1135.89 1288.93 1436.78 - 1587.3 1750.63 1915.55 2095.93 2271.58 2454.31 2641.42 2849.84 3053.59 3256.98 3472.21 3692.87 3921.29 4155.98 4390.86 4633.1 - 4892.69 5142.99 5407.6 5675.74 5951.45 6232.72 6508.03 6801 / - 9 11 20 1 205.32 327.75 453.76 627.58 834.41 1072.42 1322.85 1584.17 1856.59 2142.88 2455.21 2779.19 - 3121.44 3461.94 3845.02 4223.46 4645.61 5056.09 5477.42 5921.23 6426.76 6894.53 7386.56 7893.63 8414.08 8957.17 9517.18 10082.02 - 10668.87 11270.61 11902.78 12542.53 13211.82 13889.6 14559.58 15290.35 / - 9 12 1 1 239.88 238.83 238.52 238.5 238.67 238.96 239.35 239.83 240.38 241.01 241.7 242.46 - 243.29 244.18 245.13 246.14 247.21 248.35 249.54 250.79 252.1 253.47 254.9 256.38 257.93 259.53 261.19 262.91 - 264.68 266.52 268.41 270.36 272.36 274.42 276.54 278.72 / - 9 12 2 1 239.77 238.71 238.38 238.37 238.53 238.82 239.21 239.68 240.24 240.86 241.56 242.32 - 243.14 244.03 244.98 245.99 247.07 248.2 249.39 250.64 251.95 253.32 254.75 256.24 257.78 259.39 261.05 262.77 - 264.54 266.38 268.27 270.22 272.22 274.29 276.41 278.59 / - 9 12 3 1 239.56 238.47 238.14 238.12 238.27 238.56 238.94 239.42 239.97 240.59 241.28 242.04 - 242.87 243.76 244.71 245.72 246.79 247.93 249.12 250.37 251.69 253.06 254.49 255.97 257.52 259.13 260.79 262.51 - 264.29 266.12 268.02 269.97 271.98 274.05 276.17 278.35 / - 9 12 4 1 239.17 238.04 237.68 237.64 237.79 238.07 238.45 238.92 239.47 240.09 240.78 241.54 - 242.36 243.25 244.2 245.22 246.29 247.43 248.62 249.88 251.19 252.56 253.99 255.49 257.04 258.64 260.31 262.03 - 263.82 265.66 267.56 269.51 271.53 273.6 275.73 277.92 / - 9 12 5 1 238.3 236.99 236.54 236.45 236.56 236.81 237.17 237.62 238.16 238.77 239.46 240.22 - 241.04 241.93 242.88 243.9 244.98 246.12 247.32 248.59 249.91 251.29 252.74 254.24 255.8 257.43 259.11 260.85 - 262.65 264.51 266.42 268.4 270.43 272.53 274.68 276.89 / - 9 12 6 1 235.52 233.41 232.5 232.23 232.17 232.37 232.69 233.13 233.66 234.27 234.97 235.74 - 236.59 237.5 238.49 239.54 240.66 241.85 243.1 244.41 245.79 247.23 248.73 250.25 251.88 253.57 255.32 257.14 - 259.01 260.95 262.94 265 267.12 269.29 271.53 273.83 / - 9 12 7 1 228.9 223.05 221.76 221.34 221.25 221.39 221.7 222.15 222.72 223.39 224.16 225.02 - 225.96 226.99 228.09 229.28 230.51 231.85 233.25 234.73 236.27 237.89 239.57 241.33 243.15 245.03 246.98 249 - 251.08 253.18 255.39 257.66 259.99 262.39 264.85 267.37 / - 9 12 8 1 213.32 201.69 200.17 199.58 199.46 199.66 200.08 200.69 201.46 202.37 203.38 204.54 - 205.8 207.16 208.63 210.2 211.82 213.57 215.4 217.31 219.27 221.35 223.5 225.73 228 230.37 232.82 235.33 - 237.88 240.53 243.24 246.02 248.84 251.74 254.71 257.73 / - 9 12 9 1 180.99 167.38 166.12 165.84 166.13 166.79 167.66 168.82 170.18 171.72 173.41 175.26 - 177.24 179.35 181.59 183.94 186.4 188.97 191.63 194.39 197.24 200.16 203.15 206.24 209.38 212.6 215.89 219.25 - 223.15 226.65 230.21 233.82 237.51 241.21 245.01 248.82 / - 9 12 10 1 130.6 127.52 127.02 127.54 128.58 130.06 131.89 134 136.36 138.98 141.72 144.63 - 147.77 150.97 154.28 157.83 161.38 165.17 168.91 172.92 176.84 180.84 185.05 189.36 193.58 197.97 202.44 206.84 - 211.52 216.05 220.87 225.5 230.19 234.93 240.22 245.07 / - 9 12 11 1 93.7 94.22 96.17 98.77 101.61 104.64 107.83 111.36 114.97 118.71 122.62 126.65 - 130.83 135.11 139.53 144.08 148.74 153.53 158.42 163.42 168.53 173.75 179.03 184.41 189.91 195.24 200.91 206.66 - 212.51 218.09 224.09 229.8 235.95 242.19 248.07 254.41 / - 9 12 12 1 77.58 81.05 84.43 88.09 91.95 95.95 100.09 104.38 108.81 113.38 118.1 122.97 - 127.99 133.15 138.46 143.91 149.5 155.22 161.07 167.03 173.12 179.32 186.16 193.31 200.46 207.56 214.76 221.99 - 229.29 236.59 243.98 251.48 259.07 266.76 274.55 282.44 / - 9 12 13 1 72.76 77.64 81.81 86.06 90.54 95.36 100.52 105.98 111.71 117.68 123.9 130.34 - 137 143.87 150.94 158.22 165.68 173.34 181.15 189.06 197.08 205.23 213.53 221.96 230.53 239.24 248.08 257.06 - 266.16 275.39 284.74 294.22 303.81 314.66 325.66 336.69 / - 9 12 14 1 68 74.54 80.57 86.59 92.92 99.67 106.88 114.51 122.56 131.03 139.86 149.02 - 158.5 168.27 178.32 188.63 199.2 210.02 221.1 232.42 243.99 255.81 267.86 280.16 292.64 305.24 317.99 330.89 - 343.98 357.25 370.7 384.34 398.17 412.17 426.3 440.63 / - 9 12 15 1 64.97 73.32 82.24 91.75 102.17 113.48 125.15 137.45 150.31 162.94 176.65 190.91 - 205.6 220.7 236.19 252.07 268.32 284.95 301.95 319.3 336.99 354.79 372.27 392 411.21 429.6 449.52 469.29 - 491.6 510.41 531.66 553.25 575.17 597.45 620.11 643.15 / - 9 12 16 1 63.31 79.01 96.31 114.08 132.44 150.95 169.97 190.82 211 232.72 254.27 277.88 - 302.19 324.63 350.29 376.54 403.14 430.74 459.12 487.93 516.35 546.14 577.19 608.92 641.24 674.08 707.75 742.19 - 776.65 813.03 850.29 888.42 927.19 966.55 1006.52 1048.48 / - 9 12 17 1 73.1 101.25 131.72 161.63 192.13 223.31 255.92 290.26 325.91 362.84 400.9 442.02 - 482.95 527.25 572.81 619.62 665.91 715.59 766.96 820.08 875.19 931.48 990.23 1050.57 1112.24 1174.02 1236.61 1300.25 - 1354.72 1413.41 1471.3 1531.62 1592.82 1657.13 1720.87 1782.4 / - 9 12 18 1 96.81 145.17 193.87 245.79 299.6 356.03 415.63 478.78 545.39 615.8 689.56 767.23 - 848.92 935.2 1025.19 1118.66 1214.72 1310.56 1401.29 1494.25 1591.7 1691.84 1792.43 1898.25 2004.73 2113.25 2223.18 2340.21 - 2457.39 2571.76 2692.52 2815.04 2940.13 3067.04 3198.78 3334.56 / - 9 12 19 1 137.77 214.82 295.07 389.11 490.58 600.59 718.88 846.97 985.53 1134.17 1287.34 1435.93 - 1587.28 1751.56 1917.51 2098.99 2276.07 2460.21 2648.9 2858.92 3064.47 3269.86 3485.42 3708.08 3940.12 4172.12 4414.48 4659.26 - 4921.01 5173.98 5441.17 5704.63 5991.1 6275.09 6553.38 6849.47 / - 9 12 20 1 205.15 327.97 454.46 623.23 829.98 1065.42 1315.96 1576.17 1852.12 2147.19 2461.73 2788.22 - 3114.65 3476.82 3862.95 4244.71 4635.75 5084.86 5510.09 5957.95 6468.41 6940.51 7436.99 7948.85 8469.17 9017.05 9579.66 10160.92 - 10740.09 11357.51 11983.99 12641.3 13305.24 14001.92 14679.22 15401 / - 9 13 1 1 241.81 240.72 240.38 240.35 240.5 240.78 241.17 241.64 242.18 242.81 243.5 244.26 - 245.08 245.97 246.91 247.93 249 250.13 251.32 252.57 253.89 255.26 256.69 258.17 259.72 261.33 262.99 264.71 - 266.49 268.33 270.22 272.18 274.19 276.25 278.38 280.56 / - 9 13 2 1 241.7 240.59 240.24 240.21 240.36 240.64 241.02 241.49 242.03 242.65 243.35 244.1 - 244.93 245.81 246.76 247.77 248.84 249.98 251.17 252.42 253.73 255.1 256.53 258.02 259.57 261.18 262.84 264.56 - 266.34 268.18 270.08 272.03 274.04 276.11 278.24 280.43 / - 9 13 3 1 241.49 240.35 239.99 239.95 240.09 240.37 240.74 241.21 241.76 242.37 243.06 243.82 - 244.64 245.53 246.48 247.49 248.56 249.69 250.89 252.14 253.45 254.82 256.26 257.75 259.29 260.9 262.57 264.29 - 266.07 267.92 269.81 271.77 273.79 275.86 277.99 280.18 / - 9 13 4 1 241.1 239.91 239.51 239.46 239.59 239.86 240.23 240.69 241.24 241.85 242.54 243.3 - 244.12 245 245.95 246.96 248.04 249.17 250.36 251.62 252.93 254.31 255.74 257.24 258.79 260.4 262.07 263.8 - 265.58 267.43 269.33 271.29 273.32 275.39 277.53 279.73 / - 9 13 5 1 240.06 238.63 238.11 237.97 238.04 238.27 238.61 239.06 239.58 240.19 240.87 241.62 - 242.44 243.33 244.28 245.3 246.38 247.53 248.73 250 251.33 252.72 254.17 255.68 257.25 258.88 260.57 262.32 - 264.13 266 267.93 269.92 271.96 274.07 276.23 278.46 / - 9 13 6 1 236.97 234.4 233.4 233.1 233.08 233.24 233.54 233.95 234.47 235.08 235.77 236.54 - 237.39 238.31 239.3 240.36 241.49 242.68 243.94 245.27 246.66 248.12 249.64 251.22 252.87 254.57 256.35 258.18 - 260.07 262.03 264.05 266.13 268.27 270.47 272.73 275.05 / - 9 13 7 1 229.95 223.33 221.96 221.48 221.35 221.47 221.77 222.22 222.78 223.46 224.24 225.11 - 226.07 227.11 228.24 229.45 230.72 232.08 233.51 235.02 236.6 238.25 239.96 241.73 243.58 245.5 247.5 249.55 - 251.67 253.86 256.09 258.4 260.78 263.22 265.72 268.28 / - 9 13 8 1 213.96 201.37 199.67 199.06 198.94 199.14 199.57 200.19 200.98 201.91 202.96 204.14 - 205.43 206.83 208.33 209.94 211.6 213.38 215.26 217.22 219.22 221.35 223.55 225.82 228.14 230.56 233.06 235.6 - 238.24 240.95 243.73 246.54 249.45 252.42 255.43 258.52 / - 9 13 9 1 181.31 167.09 165.84 165.55 165.87 166.48 167.44 168.62 170 171.56 173.29 175.16 - 177.17 179.32 181.59 183.97 186.47 189.08 191.78 194.59 197.48 200.47 203.54 206.69 209.93 213.24 216.6 220.02 - 223.5 227.05 230.66 234.9 238.65 242.45 246.31 250.22 / - 9 13 10 1 130.66 127.55 127.14 127.67 128.74 130.24 132.1 134.23 136.62 139.21 141.97 144.99 - 148.07 151.39 154.74 158.33 161.91 165.58 169.52 173.39 177.54 181.58 185.84 190.03 194.46 198.78 203.29 207.87 - 212.39 217.18 221.81 226.75 231.5 236.29 241.65 246.56 / - 9 13 11 1 93.92 94.5 96.47 99.09 101.96 105.02 108.23 111.7 115.39 119.17 123.1 127.2 - 131.37 135.73 140.18 144.76 149.47 154.29 159.23 164.27 169.43 174.49 179.83 185.25 190.75 196.38 202.1 207.61 - 213.49 219.46 225.16 231.29 237.5 243.38 249.75 255.75 / - 9 13 12 1 77.84 81.36 84.77 88.45 92.33 96.36 100.53 104.84 109.3 113.9 118.65 123.55 - 128.6 133.8 139.14 144.62 150.24 155.99 161.87 167.88 174 180.24 186.58 193.98 201.29 208.54 215.7 223.11 - 230.44 237.7 245.14 252.69 260.33 268.08 275.93 283.87 / - 9 13 13 1 72.94 77.91 82.12 86.4 90.91 95.75 100.94 106.42 112.17 118.17 124.42 130.89 - 137.57 144.47 151.58 158.88 166.38 174.07 181.92 189.88 197.96 206.15 214.49 222.97 231.58 240.34 249.23 258.25 - 267.41 276.69 286.1 295.63 305.29 315.06 326.13 337.38 / - 9 13 14 1 68.14 74.74 80.82 86.88 93.24 100.02 107.25 114.91 122.98 131.46 140.32 149.51 - 159.01 168.8 178.87 189.22 199.84 210.69 221.8 233.15 244.74 256.58 268.66 280.98 293.53 306.21 319.03 332.01 - 345.16 358.49 372.01 385.71 399.61 413.66 427.86 442.25 / - 9 13 15 1 65.07 73.47 82.43 91.98 102.46 113.75 125.44 137.75 150.64 163.78 176.99 191.28 - 206 221.12 236.63 252.52 268.78 285.42 302.44 319.83 337.56 355.64 372.87 392.6 411.8 429.72 450.1 469.86 - 490.16 511.08 532.42 554.09 576.09 598.44 621.15 644.24 / - 9 13 16 1 63.35 79.06 96.39 114.3 132.56 151.11 170.37 190.96 211.15 233.34 254.4 277.99 - 302.29 324.74 350.39 376.76 403.26 430.84 459.2 488.01 516.46 546.24 577.27 608.97 641.25 674.05 707.65 742 - 776.34 812.59 849.69 887.69 926.54 966.09 1006.21 1046.85 / - 9 13 17 1 73.03 101.18 131.68 161.6 192.12 223.3 255.89 290.17 325.79 362.68 400.66 441.7 - 482.52 526.75 572.24 619.3 665.32 714.92 766.33 819.09 873.99 930.04 988.53 1048.6 1110.11 1172.41 1235.66 1297.34 - 1353.86 1413.17 1473.24 1534.1 1596.63 1661.18 1725.57 1789.64 / - 9 13 18 1 96.66 145.08 193.75 245.69 299.5 355.96 415.48 478.5 544.99 615.21 688.83 766.37 - 847.82 933.73 1023.32 1116.43 1212.52 1308.38 1399.69 1493.3 1591.14 1691.99 1793.52 1898.98 2007.49 2116.93 2227.93 2343.96 - 2464.16 2579.96 2701.92 2825.7 2952.11 3080.43 3218.05 3350.7 / - 9 13 19 1 137.58 214.74 294.69 388.23 490.53 600.58 718.6 846.23 984.46 1132.66 1285.86 1430.58 - 1587.44 1752.73 1919.74 2102.43 2280.98 2466.64 2657.11 2868.92 3076.11 3283.82 3501.47 3726.2 3958.79 4194.99 4442.73 4690.87 - 4945.15 5208 5477.31 5744.27 6033.68 6320.56 6602.59 6902.18 / - 9 13 20 1 205.02 328.31 455.42 616.53 822.05 1052.72 1307.99 1569.81 1849.23 2141.17 2452.05 2778.41 - 3127.47 3493.08 3858.32 4267.83 4663 5116.48 5546.01 5997.86 6457.54 6990.85 7492.69 8008.86 8529.69 9082.8 9651.78 10233.02 - 10818.5 11441.19 12073.15 12736.51 13420.48 14108.42 14804.19 15538.3 / - 9 14 1 1 243.67 242.56 242.21 242.17 242.31 242.59 242.96 243.43 243.97 244.59 245.28 246.03 - 246.85 247.74 248.69 249.7 250.77 251.9 253.09 254.34 255.66 257.03 258.46 259.95 261.5 263.1 264.77 266.5 - 268.28 270.12 272.02 273.98 275.99 278.07 280.2 282.39 / - 9 14 2 1 243.56 242.43 242.07 242.02 242.16 242.43 242.81 243.27 243.82 244.43 245.12 245.87 - 246.69 247.58 248.53 249.54 250.61 251.74 252.93 254.18 255.5 256.87 258.3 259.79 261.34 262.95 264.61 266.34 - 268.12 269.97 271.87 273.83 275.84 277.92 280.05 282.25 / - 9 14 3 1 243.35 242.19 241.81 241.75 241.89 242.15 242.52 242.98 243.53 244.14 244.83 245.58 - 246.4 247.28 248.23 249.24 250.31 251.44 252.64 253.89 255.2 256.57 258.01 259.5 261.05 262.66 264.33 266.06 - 267.84 269.69 271.59 273.55 275.57 277.65 279.79 281.98 / - 9 14 4 1 242.94 241.72 241.3 241.22 241.34 241.6 241.96 242.42 242.95 243.57 244.25 245 - 245.82 246.7 247.65 248.66 249.73 250.86 252.06 253.31 254.63 256.01 257.44 258.94 260.49 262.1 263.78 265.51 - 267.3 269.15 271.06 273.03 275.06 277.14 279.28 281.49 / - 9 14 5 1 241.67 240.13 239.54 239.35 239.39 239.59 239.91 240.34 240.86 241.45 242.13 242.88 - 243.7 244.58 245.54 246.56 247.64 248.79 250 251.27 252.61 254 255.46 256.98 258.56 260.2 261.9 263.66 - 265.49 267.37 269.31 271.31 273.37 275.5 277.68 279.92 / - 9 14 6 1 238.24 235.4 234.11 233.78 233.73 233.87 234.17 234.58 235.09 235.7 236.4 237.17 - 238.03 238.95 239.95 241.03 242.17 243.38 244.65 246 247.41 248.88 250.42 252.02 253.69 255.42 257.21 259.07 - 260.99 262.93 264.97 267.08 269.25 271.48 273.77 276.12 / - 9 14 7 1 230.83 223.51 221.95 221.37 221.22 221.33 221.62 222.06 222.63 223.32 224.11 225 - 225.97 227.02 228.17 229.41 230.72 232.11 233.57 235.12 236.73 238.4 240.15 241.98 243.88 245.85 247.87 249.97 - 252.14 254.37 256.66 259.02 261.45 263.94 266.49 269.09 / - 9 14 8 1 213.54 200.84 199.09 198.49 198.38 198.59 199.04 199.68 200.5 201.46 202.55 203.73 - 205.06 206.5 208.04 209.69 211.39 213.22 215.14 217.15 219.21 221.38 223.64 225.98 228.35 230.84 233.4 235.99 - 238.69 241.46 244.26 247.16 250.12 253.14 256.2 259.35 / - 9 14 9 1 181.02 166.8 165.56 165.29 165.55 166.25 167.22 168.43 169.83 171.42 173.17 175.07 - 177.11 179.29 181.59 184.01 186.55 189.2 191.94 194.79 197.73 200.76 203.87 207.07 210.35 213.7 217.13 220.64 - 224.23 227.9 231.61 235.37 239.18 243.05 247.6 251.6 / - 9 14 10 1 130.71 127.63 127.2 127.77 128.89 130.38 132.26 134.42 136.84 139.51 142.31 145.27 - 148.46 151.71 155.2 158.69 162.44 166.16 169.97 174.05 178.04 182.32 186.48 190.86 195.17 199.71 204.27 208.78 - 213.47 218.33 223.01 227.75 232.81 237.66 242.57 248.06 / - 9 14 11 1 94.11 94.78 96.78 99.43 102.33 105.41 108.66 112.05 115.83 119.66 123.6 127.71 - 131.97 136.3 140.84 145.46 150.2 155.06 159.89 164.96 170.14 175.43 180.82 186.28 191.83 197.51 203.01 208.85 - 214.79 220.48 226.58 232.77 238.65 245 251.44 257.5 / - 9 14 12 1 78.11 81.69 85.14 88.85 92.75 96.81 101 105.34 109.83 114.46 119.23 124.16 - 129.23 134.46 139.83 145.34 150.99 156.77 162.68 168.72 174.88 181.15 187.54 194.61 202 209.39 216.71 224.05 - 231.4 238.89 246.62 254.23 261.95 269.77 277.69 285.72 / - 9 14 13 1 73.16 78.21 82.46 86.77 91.3 96.16 101.37 106.87 112.65 118.68 124.94 131.44 - 138.15 145.08 152.21 159.53 167.06 174.77 182.67 190.69 198.81 207.05 215.43 223.95 232.61 241.41 250.34 259.41 - 268.62 277.95 287.41 297 306.71 316.54 326.49 337.81 / - 9 14 14 1 68.31 74.97 81.1 87.19 93.58 100.38 107.63 115.31 123.4 131.9 140.77 149.98 - 159.5 169.31 179.4 189.77 200.4 211.3 222.44 233.81 245.43 257.29 269.38 281.72 294.29 307.06 319.96 333.01 - 346.22 359.62 373.2 386.97 400.92 415.03 429.28 443.74 / - 9 14 15 1 65.2 73.66 82.65 92.33 102.87 114.02 125.72 138.04 150.94 164.09 177.3 191.59 - 206.33 221.48 237.01 252.9 269.16 285.8 302.81 320.18 337.94 356.05 374.21 393.02 412.22 431.61 450.46 470.19 - 492.51 511.34 532.74 554.5 576.59 599.01 621.78 644.92 / - 9 14 16 1 63.4 79.12 96.47 114.4 132.67 151.68 170.85 191.05 211.24 233.44 254.47 278.03 - 302.29 324.7 350.36 376.72 403.23 430.78 459.09 487.84 516.95 546.02 577.03 608.7 640.96 673.71 707.23 741.6 - 775.7 811.8 848.74 886.55 925.2 964.68 1004.98 1045.88 / - 9 14 17 1 72.95 101.11 131.63 161.55 192.05 223.24 255.79 289.99 325.54 362.39 400.3 441.22 - 481.89 526 571.4 618.46 664.47 714.01 765.29 817.95 872.55 928.8 986.55 1046.33 1107.77 1169.97 1233.37 1295.48 - 1352.74 1412.63 1474.53 1535.6 1600.47 1665.05 1730.94 1796.8 / - 9 14 18 1 96.53 145.06 193.6 245.56 299.32 355.75 415.2 478.03 544.36 614.39 687.78 765.22 - 846.51 931.6 1021.26 1114.24 1210.09 1305.87 1397.8 1493.4 1590.62 1692.12 1794.53 1900.8 2010.21 2120.68 2235.68 2349.89 - 2471.05 2588.42 2711.65 2836.92 2964.75 3094.48 3233.23 3367.53 / - 9 14 19 1 137.42 214.72 294.41 387.39 489.22 598.91 716.47 843.92 981.29 1127.32 1280.37 1429.75 - 1587.59 1755.94 1922.18 2095.32 2286.29 2473.64 2665.98 2867.43 3088.81 3298.93 3518.89 3744.43 3979.21 4219.93 4466.33 4722.44 - 4978.82 5244.51 5517.08 5787.61 6071.93 6370.15 6656.78 6959.28 / - 9 14 20 1 204.94 328.82 456.83 608.31 814.54 1042.49 1301.67 1562.13 1842.33 2141.68 2453.6 2789.85 - 3141.95 3489.32 3880 4293.77 4693.07 5112.65 5585.93 6042.25 6507.39 6994.66 7553.48 8075.12 8602.61 9156.38 9729.94 10316.25 - 10905.64 11534 12183.81 12842.75 13532.89 14228.81 14945.93 15672.94 / - 9 15 1 1 245.44 244.35 243.99 243.95 244.09 244.36 244.74 245.2 245.74 246.36 247.04 247.79 - 248.61 249.5 250.44 251.45 252.52 253.65 254.84 256.1 257.41 258.78 260.21 261.71 263.26 264.87 266.53 268.26 - 270.05 271.89 273.8 275.76 277.78 279.86 282 284.2 / - 9 15 2 1 245.32 244.22 243.85 243.8 243.94 244.21 244.58 245.04 245.58 246.19 246.88 247.63 - 248.45 249.33 250.27 251.28 252.35 253.48 254.68 255.93 257.24 258.61 260.05 261.54 263.09 264.7 266.37 268.1 - 269.89 271.73 273.64 275.6 277.62 279.71 281.84 284.04 / - 9 15 3 1 245.11 243.96 243.58 243.52 243.65 243.91 244.28 244.74 245.27 245.88 246.57 247.32 - 248.13 249.02 249.96 250.97 252.04 253.17 254.36 255.62 256.93 258.3 259.74 261.23 262.79 264.4 266.07 267.8 - 269.59 271.44 273.35 275.31 277.34 279.42 281.57 283.77 / - 9 15 4 1 244.64 243.39 242.95 242.86 242.96 243.21 243.56 244.01 244.54 245.14 245.82 246.57 - 247.39 248.27 249.21 250.22 251.29 252.43 253.62 254.88 256.2 257.58 259.02 260.52 262.07 263.69 265.37 267.11 - 268.91 270.77 272.68 274.66 276.69 278.78 280.94 283.15 / - 9 15 5 1 243.09 241.44 240.77 240.53 240.53 240.7 241.01 241.42 241.92 242.51 243.18 243.93 - 244.74 245.63 246.59 247.61 248.7 249.85 251.07 252.35 253.69 255.1 256.57 258.1 259.69 261.35 263.06 264.84 - 266.68 268.58 270.54 272.56 274.64 276.78 278.99 281.25 / - 9 15 6 1 239.31 235.9 234.7 234.21 234.14 234.26 234.54 234.95 235.46 236.07 236.77 237.55 - 238.41 239.35 240.37 241.45 242.61 243.79 245.08 246.45 247.88 249.37 250.94 252.57 254.26 256.02 257.84 259.73 - 261.68 263.69 265.77 267.91 270.11 272.38 274.7 277.09 / - 9 15 7 1 231.5 223.31 221.59 221.01 220.83 220.92 221.2 221.65 222.22 222.92 223.73 224.63 - 225.63 226.7 227.88 229.14 230.48 231.91 233.41 234.99 236.65 238.38 240.15 242.02 243.97 245.99 248.07 250.23 - 252.45 254.72 257.07 259.49 261.98 264.51 267.12 269.8 / - 9 15 8 1 213.93 200.19 198.45 197.87 197.78 198.01 198.49 199.16 200 200.98 202.11 203.36 - 204.73 206.17 207.75 209.44 211.23 213.06 215.04 217.1 219.25 221.44 223.75 226.15 228.62 231.13 233.75 236.45 - 239.19 242.02 244.93 247.87 250.91 254.01 257.16 260.39 / - 9 15 9 1 180.65 166.53 165.24 165.03 165.31 166.02 167.02 168.24 169.67 171.28 172.94 174.86 - 176.92 179.11 181.43 183.87 186.64 189.32 192.11 195 197.98 201.06 204.22 207.47 210.79 214.2 217.68 221.24 - 224.86 228.56 232.32 236.15 240.04 244.03 248.1 252.21 / - 9 15 10 1 130.6 127.72 127.31 127.9 129 130.56 132.47 134.67 137.11 139.74 142.64 145.64 - 148.77 152.14 155.55 159.2 162.84 166.74 170.59 174.71 178.74 182.85 187.27 191.54 196.05 200.47 205.14 209.82 - 214.57 219.24 224.22 229.02 234.14 239.05 244.01 249.03 / - 9 15 11 1 94.35 95.08 97.12 99.79 102.73 105.84 109.11 112.53 116.24 120.16 124.15 128.23 - 132.54 136.94 141.42 146.06 150.82 155.71 160.7 165.82 171.04 176.37 181.8 187.11 192.7 198.38 204.19 210.1 - 215.77 221.84 228 233.87 240.2 246.61 252.67 259.25 / - 9 15 12 1 78.43 82.06 85.55 89.29 93.22 97.3 101.52 105.89 110.4 115.05 119.85 124.8 - 129.89 135.14 140.53 146.07 151.75 157.56 163.5 169.57 175.76 182.06 188.48 195.01 202.67 210.21 217.69 225.08 - 232.53 240.06 247.74 255.4 263.18 271.05 279.03 287.11 / - 9 15 13 1 73.44 78.55 82.84 87.17 91.72 96.61 101.84 107.36 113.16 119.2 125.49 132.01 - 138.74 145.68 152.83 160.18 167.72 175.46 183.38 191.46 199.63 207.93 216.35 224.91 233.6 242.44 251.42 260.53 - 269.78 279.16 288.67 298.3 308.06 317.95 327.95 338.08 / - 9 15 14 1 68.53 75.26 81.43 87.54 93.95 100.77 108.02 115.72 123.82 132.33 141.22 150.44 - 159.97 169.79 179.9 190.27 200.91 211.81 222.97 234.37 246.01 257.88 269.99 282.32 294.9 307.71 320.69 333.83 - 347.12 360.57 374.21 388.04 402.06 416.2 430.51 445.02 / - 9 15 15 1 65.37 73.88 82.9 92.54 103.05 114.3 126.01 138.33 151.23 164.04 177.58 191.86 - 206.58 221.73 237.26 253.16 269.42 286.04 303.02 320.36 338.08 356.17 374.7 392.17 412.34 431.71 450.53 469.97 - 492.46 511.23 532.55 554.25 576.35 598.82 621.66 644.86 / - 9 15 16 1 63.54 79.19 96.59 114.5 132.77 151.8 171.12 191.11 211.26 233.44 254.46 277.97 - 302.18 325.97 350.11 376.45 403.06 430.47 458.71 487.37 516.37 545.32 576.22 607.81 640.09 672.84 706.31 740.57 - 775.21 810.48 847.23 884.87 923.4 962.79 1002.98 1043.95 / - 9 15 17 1 72.88 101.05 131.59 161.49 191.94 223.07 255.59 289.71 325.15 361.89 399.73 440.54 - 481.03 524.95 570.15 617.09 663.19 712.7 763.86 816.34 870.72 927.05 984.48 1044.07 1105.1 1166.99 1230.01 1292.34 - 1351.98 1410.69 1473.1 1536.48 1600.24 1665.36 1731.95 1798.51 / - 9 15 18 1 96.41 144.99 193.47 245.4 299.05 355.3 414.7 477.34 543.37 613.1 686.34 763.32 - 844.68 929.71 1019.25 1111.79 1207.13 1301.54 1395.46 1491.67 1590.3 1691.71 1795.28 1902.43 2012.76 2124.31 2240.71 2355.83 - 2478.14 2600.81 2721.83 2848.38 2977.89 3113.49 3249.15 3385.28 / - 9 15 19 1 137.29 214.8 294.28 387.49 488.1 598.61 716.14 843.02 978.77 1125.55 1278.1 1428.45 - 1587.86 1748.93 1924.49 2099.29 2291.7 2481.04 2675.47 2878.9 3102.36 3315.15 3537.72 3765.92 4001.6 4245.17 4496.36 4755.59 - 5015.04 5278.07 5560.47 5834.98 6122.82 6416.12 6715.51 7022.18 / - 9 15 20 1 204.96 329.57 458.63 600.7 807.88 1038.99 1287.35 1546.94 1834.64 2129.81 2445.47 2785.26 - 3135.41 3509.47 3904.47 4290.36 4726.96 5151.26 5590.4 6091.9 6563.08 7056.1 7556.1 8149.35 8684.19 9243.61 9816.89 10402.82 - 11006.83 11639.31 12295.49 12960.81 13658.36 14375.76 15100.75 15840.23 / - 9 16 1 1 247.1 246.07 245.73 245.7 245.84 246.11 246.48 246.94 247.48 248.1 248.78 249.53 - 250.35 251.23 252.18 253.18 254.25 255.38 256.58 257.83 259.14 260.51 261.95 263.44 264.99 266.6 268.28 270.01 - 271.8 273.65 275.55 277.52 279.55 281.63 283.78 285.98 / - 9 16 2 1 246.98 245.93 245.58 245.54 245.68 245.95 246.32 246.77 247.31 247.92 248.61 249.36 - 250.17 251.05 252 253.01 254.07 255.21 256.4 257.65 258.96 260.34 261.77 263.26 264.82 266.43 268.1 269.83 - 271.62 273.47 275.38 277.35 279.38 281.47 283.61 285.82 / - 9 16 3 1 246.76 245.67 245.3 245.24 245.37 245.64 246 246.46 246.99 247.6 248.28 249.03 - 249.85 250.72 251.67 252.68 253.74 254.88 256.07 257.32 258.64 260.01 261.44 262.94 264.49 266.11 267.78 269.52 - 271.31 273.16 275.08 277.05 279.08 281.17 283.32 285.52 / - 9 16 4 1 246.13 244.87 244.4 244.29 244.38 244.61 244.95 245.39 245.91 246.51 247.19 247.93 - 248.75 249.63 250.57 251.58 252.65 253.79 254.99 256.25 257.57 258.95 260.4 261.9 263.47 265.1 266.78 268.53 - 270.34 272.2 274.13 276.12 278.17 280.27 282.44 284.66 / - 9 16 5 1 244.28 242.51 241.68 241.4 241.38 241.53 241.82 242.22 242.72 243.31 243.98 244.72 - 245.54 246.43 247.39 248.42 249.52 250.68 251.91 253.2 254.56 255.98 257.46 259.01 260.62 262.3 264.03 265.83 - 267.69 269.61 271.59 273.63 275.74 277.91 280.13 282.42 / - 9 16 6 1 240.11 236.11 234.87 234.41 234.27 234.33 234.6 235 235.51 236.12 236.83 237.62 - 238.49 239.41 240.43 241.53 242.71 243.96 245.28 246.67 248.12 249.65 251.24 252.91 254.63 256.43 258.29 260.21 - 262.2 264.25 266.37 268.55 270.79 273.1 275.47 277.9 / - 9 16 7 1 231.93 222.93 221.02 220.39 220.18 220.25 220.53 220.97 221.56 222.27 223.09 224.02 - 225.04 226.16 227.34 228.64 230.02 231.48 233.03 234.65 236.35 238.13 239.95 241.87 243.87 245.94 248.09 250.3 - 252.58 254.9 257.32 259.8 262.35 264.97 267.65 270.38 / - 9 16 8 1 214.17 199.3 197.66 197.15 197.11 197.39 197.9 198.62 199.49 200.52 201.68 202.97 - 204.35 205.87 207.5 209.23 211.02 212.95 214.98 217.09 219.25 221.54 223.92 226.33 228.86 231.48 234.17 236.89 - 239.73 242.65 245.59 248.64 251.76 254.91 258.16 261.47 / - 9 16 9 1 180.14 166.26 164.97 164.7 165.07 165.81 166.82 167.98 169.42 171.05 172.84 174.78 - 176.87 179.09 181.45 183.93 186.52 189.22 192.03 194.95 198.25 201.37 204.58 207.87 211.25 214.71 218.24 221.85 - 225.53 229.28 233.1 236.99 240.94 244.96 249.04 253.17 / - 9 16 10 1 130.66 127.75 127.43 127.99 129.16 130.71 132.65 134.93 137.39 140.06 142.92 146.01 - 149.18 152.58 156.03 159.59 163.39 167.17 171.21 175.19 179.45 183.6 188.07 192.38 196.77 201.41 206.13 210.73 - 215.53 220.4 225.19 230.28 235.19 240.44 245.46 250.54 / - 9 16 11 1 94.56 95.4 97.49 100.21 103.18 106.32 109.61 113.05 116.64 120.64 124.67 128.85 - 133.12 137.55 142.06 146.79 151.58 156.5 161.53 166.68 171.76 177.12 182.58 188.14 193.78 199.51 205.37 211.03 - 217.06 223.19 229.05 235.35 241.74 247.79 254.35 260.53 / - 9 16 12 1 78.8 82.5 86.03 89.82 93.78 97.89 102.13 106.51 111.04 115.71 120.53 125.49 - 130.61 135.87 141.28 146.84 152.53 158.37 164.33 170.42 176.64 182.97 189.42 195.98 203.06 210.91 218.37 225.86 - 233.41 241.21 248.92 256.54 264.36 272.29 280.32 288.47 / - 9 16 13 1 73.82 78.96 83.29 87.64 92.21 97.11 102.36 107.9 113.71 119.77 126.07 132.6 - 139.35 146.3 153.46 160.82 168.37 176.12 184.05 192.16 200.4 208.75 217.21 225.81 234.54 243.41 252.42 261.57 - 270.86 280.28 289.83 299.51 309.32 319.25 329.31 339.49 / - 9 16 14 1 68.85 75.63 81.82 87.94 94.36 101.19 108.45 116.14 124.25 132.78 141.67 150.89 - 160.42 170.24 180.34 190.71 201.35 212.24 223.38 234.77 246.4 258.27 270.39 282.73 295.3 308.09 321.11 334.33 - 347.7 361.24 374.94 388.82 402.89 417.06 431.42 445.98 / - 9 16 15 1 65.62 74.16 83.21 92.9 103.36 114.6 126.29 138.6 151.49 164.29 177.8 192.05 - 206.74 221.85 237.34 253.21 269.46 286.06 303 320.29 337.94 355.96 374.25 391.81 411.95 431.49 450.08 470.25 - 490.21 510.59 531.81 553.4 575.38 597.73 620.46 643.55 / - 9 16 16 1 63.65 79.29 96.66 114.61 132.88 151.89 171.03 191.12 211.22 233.34 254.29 277.77 - 301.91 324.49 349.64 375.86 402.36 429.71 457.88 486.42 515.27 544.05 574.78 606.19 638.28 670.99 704.44 738.66 - 773.21 808.3 844.87 882.24 920.41 959.37 999.11 1039.62 / - 9 16 17 1 72.72 100.99 131.56 161.42 191.8 222.8 255.2 289.27 324.59 361.12 398.8 439.52 - 479.81 523.52 568.47 615.13 661.05 710.64 761.75 814.11 868.23 924.13 980.94 1039.94 1100.42 1162.09 1224.58 1286.89 - 1346.98 1407.97 1469.3 1533.19 1597.59 1663.23 1730.45 1800.05 / - 9 16 18 1 96.34 144.99 193.36 245.17 298.65 354.63 413.78 476.26 541.96 611.25 684.15 760.94 - 841.91 926.67 1015.39 1107.32 1202.22 1298.11 1392.52 1488.18 1587.66 1689.94 1796.33 1902.62 2013.99 2128.91 2244.19 2360.77 - 2482.36 2608.35 2734.77 2863.29 2994.13 3127.53 3262.8 3403.07 / - 9 16 19 1 137.25 215.03 294.41 386.75 488.07 596.68 713.9 839.8 975.53 1120.08 1274.37 1425.78 - 1586.26 1748.77 1925.67 2102.29 2287.01 2487.62 2684.52 2890.22 3098.64 3335.09 3557 3788.33 4027.24 4274.08 4527.4 4785.63 - 5054.47 5321.71 5600.71 5887.37 6178.28 6475.67 6774.99 7090.76 / - 9 16 20 1 205.12 330.68 461.14 602.29 802.34 1032.46 1282.99 1540.42 1819.47 2122.67 2437.49 2783.48 - 3130.03 3502.77 3900.54 4321.05 4731.27 5194.39 5639.82 6098.65 6625.32 7124.8 7632.79 8163.9 8775 9341.46 9921.25 10514.21 - 11126.79 11753.06 12417.59 13095.18 13801.31 14528.12 15261.07 16012.64 / - 9 17 1 1 248.64 247.7 247.4 247.39 247.54 247.82 248.19 248.66 249.2 249.81 250.49 251.24 - 252.06 252.94 253.88 254.89 255.96 257.09 258.28 259.54 260.85 262.22 263.66 265.15 266.71 268.32 269.99 271.73 - 273.52 275.37 277.28 279.26 281.29 283.38 285.53 287.73 / - 9 17 2 1 248.52 247.56 247.25 247.22 247.37 247.64 248.01 248.47 249.01 249.62 250.31 251.06 - 251.87 252.75 253.69 254.7 255.77 256.9 258.09 259.34 260.66 262.03 263.47 264.96 266.52 268.13 269.81 271.54 - 273.34 275.19 277.1 279.08 281.11 283.2 285.35 287.56 / - 9 17 3 1 248.25 247.23 246.88 246.83 246.96 247.23 247.59 248.04 248.57 249.18 249.86 250.61 - 251.42 252.3 253.24 254.25 255.32 256.45 257.64 258.9 260.21 261.59 263.03 264.52 266.08 267.7 269.38 271.12 - 272.92 274.77 276.69 278.67 280.71 282.8 284.96 287.18 / - 9 17 4 1 247.37 246.08 245.59 245.45 245.51 245.73 246.06 246.49 247 247.6 248.27 249.01 - 249.82 250.7 251.65 252.66 253.74 254.88 256.08 257.35 258.68 260.07 261.53 263.04 264.62 266.26 267.96 269.72 - 271.54 273.42 275.37 277.37 279.44 281.56 283.75 285.99 / - 9 17 5 1 245.16 243.25 242.23 241.91 241.86 241.99 242.27 242.66 243.15 243.74 244.4 245.15 - 245.98 246.88 247.85 248.89 249.99 251.17 252.41 253.72 255.1 256.54 258.05 259.62 261.25 262.95 264.71 266.53 - 268.42 270.37 272.38 274.45 276.59 278.79 281.05 283.37 / - 9 17 6 1 240.58 236.22 234.67 234.07 233.92 234 234.25 234.64 235.15 235.76 236.48 237.28 - 238.17 239.14 240.19 241.32 242.53 243.76 245.11 246.53 248.03 249.59 251.22 252.93 254.7 256.54 258.44 260.41 - 262.45 264.55 266.72 268.95 271.25 273.61 276.04 278.53 / - 9 17 7 1 232.14 222.29 220.33 219.67 219.44 219.48 219.78 220.23 220.82 221.55 222.39 223.35 - 224.4 225.55 226.8 228.13 229.56 231.06 232.62 234.29 236.04 237.87 239.78 241.76 243.79 245.92 248.12 250.4 - 252.75 255.16 257.62 260.17 262.79 265.47 268.22 271.02 / - 9 17 8 1 213.37 198.5 196.77 196.33 196.37 196.72 197.3 198.06 198.98 200.05 201.25 202.57 - 204.02 205.59 207.25 209.03 210.88 212.86 214.91 217.08 219.34 221.64 224.08 226.6 229.15 231.83 234.59 237.38 - 240.29 243.28 246.29 249.42 252.58 255.85 259.18 262.55 / - 9 17 9 1 179.54 166 164.7 164.46 164.84 165.59 166.55 167.81 169.27 170.92 172.73 174.71 - 176.83 179.09 181.47 183.99 186.62 189.36 192.22 195.17 198.22 201.37 204.61 208.3 211.72 215.23 218.82 222.48 - 226.22 230.03 233.91 237.85 241.87 245.94 250.08 254.29 / - 9 17 10 1 130.73 127.84 127.49 128.12 129.27 130.91 132.88 135.15 137.64 140.4 143.28 146.32 - 149.61 152.95 156.53 160.12 163.96 167.77 171.68 175.86 179.97 184.36 188.64 193.23 197.67 202.35 206.93 211.78 - 216.49 221.41 226.4 231.3 236.52 241.55 246.92 252.06 / - 9 17 11 1 94.84 95.77 97.94 100.72 103.72 106.89 110.2 113.66 117.27 121.23 125.31 129.49 - 133.8 138.23 142.8 147.46 152.26 157.19 162.24 167.4 172.68 178.07 183.57 189.18 194.65 200.41 206.27 212.26 - 218.35 224.19 230.45 236.81 242.85 249.38 256 262.25 / - 9 17 12 1 79.28 83.04 86.64 90.49 94.49 98.62 102.88 107.28 111.82 116.5 121.32 126.29 - 131.41 136.68 142.1 147.67 153.37 159.21 165.19 171.29 177.52 183.88 190.35 196.93 203.62 211.31 219.11 226.69 - 234.4 242.12 249.84 257.71 265.84 273.84 281.95 290.17 / - 9 17 13 1 74.35 79.51 83.84 88.21 92.79 97.72 102.98 108.53 114.35 120.41 126.72 133.24 - 139.99 146.94 154.1 161.45 169 176.74 184.67 192.77 201.06 209.47 217.99 226.62 235.39 244.29 253.33 262.5 - 271.81 281.26 290.84 300.56 310.41 320.38 330.48 340.71 / - 9 17 14 1 69.32 76.16 82.33 88.45 94.86 101.67 108.93 116.61 124.71 133.23 142.11 151.31 - 160.83 170.63 180.71 191.06 201.66 212.52 223.63 234.98 246.57 258.4 270.46 282.76 295.29 308.05 321.03 334.25 - 347.69 361.33 375.12 389.07 403.17 417.38 431.79 446.39 / - 9 17 15 1 65.98 74.57 83.62 93.2 103.76 114.92 126.59 138.87 151.73 164.5 177.93 192.13 - 206.76 221.8 237.22 253 269.15 285.66 302.53 319.76 337.34 355.27 373.45 390.87 410.89 430.27 448.71 468.76 - 488.61 508.98 530 551.5 573.35 595.57 618.14 641.07 / - 9 17 16 1 63.94 79.45 96.82 114.76 132.99 151.97 171.05 191.01 211.08 233.11 253.93 277.29 - 301.32 324.2 348.82 374.88 401.12 428.18 456.1 484.43 512.39 541.72 572.28 603.48 635.34 667.83 701 734.93 - 768.77 803.83 840.02 876.98 914.71 953.21 992.48 1032.5 / - 9 17 17 1 72.45 101 131.56 161.35 191.6 222.42 254.64 288.57 323.73 359.97 397.44 437.89 - 477.88 521.35 566.05 612.41 657.94 707.24 757.98 809.89 863.51 918.87 975.06 1033.43 1093.3 1154.56 1216.39 1279.8 - 1339.04 1400.53 1463.56 1526.92 1592.44 1659.3 1725.96 1795.98 / - 9 17 18 1 96.34 144.95 193.31 244.93 297.97 353.62 412.31 474.32 539.67 608.46 680.83 757.11 - 837.25 921.41 1009.39 1100.68 1194.98 1290.58 1385.49 1482.98 1582.9 1686.78 1792.79 1902.29 2013.85 2128.88 2245.65 2363.94 - 2486.97 2614.38 2742.43 2872.8 3005.52 3140.89 3278.29 3420.6 / - 9 17 19 1 137.33 215.53 294.96 387.08 486.94 596.14 712.75 837.7 972.01 1115.19 1269.01 1421.02 - 1577.59 1747.01 1925.38 2104.08 2290.85 2493.51 2693.18 2901.37 3113.08 3351.57 3577.27 3812.05 4054.35 4303.09 4561.12 4824.42 - 5091.72 5369.57 5652.74 5942.38 6239.58 6541.67 6850.67 7158.16 / - 9 17 20 1 205.53 332.38 464.58 607.99 797.6 1022.24 1274.03 1527.77 1813.78 2106.88 2436.17 2770.08 - 3130.75 3518.64 3896.55 4317.46 4762.02 5196.43 5686.89 6155.46 6643.96 7199.15 7717.23 8257.58 8813.05 9382.1 10039.36 10640.67 - 11262.87 11894.31 12556.99 13248.31 13965.3 14694.41 15452.1 16221.63 / - 9 18 1 1 250.04 249.24 249 249.01 249.19 249.48 249.86 250.33 250.87 251.48 252.17 252.92 - 253.73 254.62 255.56 256.57 257.64 258.77 259.96 261.21 262.52 263.9 265.33 266.83 268.39 270 271.68 273.41 - 275.21 277.07 278.98 280.96 282.99 285.09 287.24 289.46 / - 9 18 2 1 249.91 249.08 248.81 248.82 248.98 249.26 249.64 250.1 250.64 251.25 251.94 252.69 - 253.5 254.38 255.32 256.33 257.4 258.53 259.72 260.98 262.29 263.67 265.1 266.6 268.16 269.77 271.45 273.19 - 274.99 276.85 278.76 280.74 282.78 284.88 287.03 289.25 / - 9 18 3 1 249.45 248.48 248.14 248.09 248.22 248.47 248.83 249.28 249.81 250.42 251.09 251.84 - 252.65 253.53 254.48 255.49 256.56 257.69 258.89 260.15 261.47 262.85 264.3 265.8 267.37 269 270.68 272.43 - 274.24 276.11 278.04 280.03 282.08 284.2 286.37 288.6 / - 9 18 4 1 248.24 246.91 246.36 246.17 246.21 246.4 246.72 247.13 247.64 248.23 248.9 249.64 - 250.45 251.34 252.29 253.31 254.39 255.54 256.76 258.04 259.38 260.79 262.26 263.79 265.39 267.04 268.76 270.55 - 272.39 274.3 276.26 278.29 280.38 282.53 284.74 287.02 / - 9 18 5 1 245.63 243.39 242.21 241.86 241.78 241.9 242.16 242.55 243.04 243.63 244.31 245.07 - 245.9 246.82 247.8 248.87 250 251.2 252.47 253.8 255.21 256.68 258.22 259.82 261.49 263.22 265.02 266.83 - 268.76 270.75 272.81 274.93 277.11 279.35 281.66 284.03 / - 9 18 6 1 240.69 235.69 233.93 233.37 233.17 233.22 233.45 233.83 234.34 234.96 235.68 236.5 - 237.41 238.41 239.49 240.65 241.89 243.21 244.6 246.07 247.6 249.22 250.9 252.6 254.42 256.32 258.28 260.31 - 262.41 264.57 266.8 269.1 271.46 273.88 276.38 278.93 / - 9 18 7 1 232.14 221.54 219.46 218.81 218.6 218.68 218.98 219.45 220.08 220.83 221.7 222.69 - 223.78 224.97 226.25 227.63 229.06 230.61 232.25 233.97 235.78 237.67 239.59 241.64 243.76 245.96 248.23 250.58 - 252.96 255.45 258.01 260.64 263.35 266.09 268.93 271.83 / - 9 18 8 1 213.26 197.43 195.9 195.58 195.69 196.09 196.71 197.52 198.49 199.6 200.86 202.23 - 203.73 205.34 207.04 208.85 210.77 212.79 214.9 217.12 219.41 221.81 224.28 226.84 229.48 232.21 235.03 237.92 - 240.87 243.93 247.04 250.24 253.48 256.82 260.2 263.68 / - 9 18 9 1 179.41 165.74 164.45 164.22 164.62 165.31 166.36 167.64 169.12 170.79 172.64 174.64 - 176.79 179.08 181.51 184.06 186.73 189.51 192.4 195.4 198.5 201.7 204.98 208.35 211.82 215.36 219.41 223.13 - 226.92 230.79 234.73 238.74 242.81 246.95 251.15 255.42 / - 9 18 10 1 130.79 127.93 127.6 128.25 129.44 131.13 133.18 135.47 138.01 140.73 143.71 146.78 - 150.01 153.46 156.95 160.68 164.42 168.4 172.35 176.57 180.71 184.93 189.46 193.85 198.58 203.13 207.94 212.63 - 217.6 222.57 227.46 232.57 237.59 242.93 248.07 253.58 / - 9 18 11 1 95.22 96.23 98.56 101.42 104.46 107.65 110.98 114.45 118.06 121.92 126.09 130.26 - 134.57 139.01 143.59 148.31 153.13 158.08 163.15 168.34 173.64 178.87 184.38 190 195.73 201.53 207.44 213.17 - 219.29 225.51 231.82 237.85 244.34 250.93 257.17 263.93 / - 9 18 12 1 79.97 83.81 87.53 91.46 95.49 99.64 103.91 108.32 112.85 117.53 122.34 127.3 - 132.41 137.67 143.07 148.62 154.32 160.15 166.12 172.22 178.45 184.8 191.28 197.87 204.57 211.61 219.47 227.43 - 235.12 242.81 250.77 258.77 266.59 274.88 283.04 291.31 / - 9 18 13 1 75.19 80.29 84.61 88.97 93.58 98.54 103.81 109.36 115.16 121.21 127.49 134 - 140.71 147.64 154.77 162.1 169.61 177.32 185.21 193.28 201.53 209.96 218.55 227.25 236.05 244.98 254.03 263.23 - 272.55 282.02 291.61 301.34 311.21 321.21 331.33 341.59 / - 9 18 14 1 70.1 76.97 83.07 89.14 95.51 102.29 109.51 117.15 125.24 133.73 142.57 151.73 - 161.19 170.94 180.96 191.25 201.8 212.59 223.63 234.91 246.42 258.16 270.14 282.34 294.76 307.41 320.28 333.38 - 346.7 360.24 374.02 388.03 402.19 416.51 430.99 445.65 / - 9 18 15 1 66.59 75.21 84.23 93.75 104.08 115.32 126.92 139.14 151.94 164.94 177.93 192.04 - 206.57 221.48 236.77 252.42 268.42 284.77 301.47 318.52 335.91 353.65 371.46 388.86 408.72 427.91 446.13 465.97 - 485.57 507.97 526.44 547.65 569.23 591.18 613.49 636.17 / - 9 18 16 1 64.54 79.71 97.09 114.87 133.16 151.54 170.95 190.87 210.79 232.69 253.32 276.51 - 300.34 322.93 347.19 372.85 398.73 425.46 452.84 481.03 508.57 537.48 567.64 598.46 629.97 662.11 694.95 728.49 - 761.86 796.44 832.13 868.55 905.7 943.58 982.19 1021.53 / - 9 18 17 1 72.09 101.12 131.62 161.3 191.35 221.9 253.91 287.59 322.43 358.3 395.37 435.5 - 476.11 518.01 562.2 608.08 652.98 701.86 752.1 803.39 856.35 910.97 966.26 1023.74 1082.66 1142.97 1203.87 1266.55 - 1327.47 1389.32 1452.57 1516.84 1582.33 1649.15 1718.1 1787.3 / - 9 18 18 1 96.49 145.1 193.41 244.66 297.08 352.01 410.04 471.31 535.82 603.92 675.69 751.52 - 830.68 913.91 1000.59 1090.95 1184.29 1280.29 1375.67 1473.11 1574.98 1678.79 1786.12 1896.68 2009.59 2126 2244.37 2366.49 - 2489.27 2618.2 2748.13 2880.53 3015.46 3153.06 3292.93 3437.6 / - 9 18 19 1 137.67 216.53 296.66 386.88 486.7 594.61 708.81 832.24 965.34 1107.84 1256.29 1408.98 - 1570.67 1740.63 1914.35 2103.02 2291.29 2496.67 2702.16 2912.03 3127.77 3351.63 3600.58 3839.65 4083.61 4336.72 4597.4 4865.26 - 5139.6 5420.98 5710.67 6005.15 6301.49 6616.15 6930.33 7245.41 / - 9 18 20 1 206.42 335.06 469.57 615.69 790.81 1013.34 1260.64 1518.18 1800.27 2093.85 2421.29 2764.55 - 3120.45 3503.94 3893.78 4316 4762.95 5232.81 5690.5 6167.42 6702.95 7212.48 7743.22 8349.29 8916.52 9497.18 10084.35 10693.94 - 11415.61 12063.41 12740.69 13438.69 14157.38 14896.46 15665.58 16459.74 / - 9 19 1 1 251.28 250.63 250.46 250.51 250.71 251.01 251.41 251.88 252.43 253.05 253.73 254.49 - 255.3 256.18 257.13 258.14 259.21 260.34 261.53 262.79 264.1 265.48 266.92 268.41 269.97 271.59 273.27 275.01 - 276.81 278.67 280.6 282.58 284.62 286.72 288.88 291.1 / - 9 19 2 1 250.95 250.21 249.98 249.99 250.16 250.45 250.82 251.29 251.83 252.44 253.12 253.87 - 254.69 255.57 256.52 257.53 258.6 259.73 260.93 262.19 263.51 264.89 266.34 267.84 269.41 271.03 272.72 274.47 - 276.28 278.15 280.08 282.07 284.12 286.23 288.4 290.63 / - 9 19 3 1 250.16 249.18 248.81 248.73 248.84 249.08 249.43 249.87 250.39 250.99 251.67 252.41 - 253.23 254.11 255.06 256.08 257.16 258.31 259.51 260.79 262.12 263.52 264.98 266.5 268.09 269.73 271.44 273.21 - 275.04 276.93 278.89 280.9 282.98 285.12 287.32 289.58 / - 9 19 4 1 248.54 247.06 246.41 246.15 246.14 246.29 246.58 246.97 247.47 248.05 248.72 249.46 - 250.28 251.18 252.14 253.18 254.28 255.45 256.69 257.99 259.37 260.8 262.3 263.87 265.5 267.19 268.95 270.77 - 272.66 274.61 276.62 278.69 280.83 283.03 285.29 287.61 / - 9 19 5 1 245.57 242.92 241.67 241.14 241.01 241.1 241.35 241.72 242.21 242.81 243.49 244.26 - 245.12 246.05 247.07 248.16 249.32 250.56 251.86 253.24 254.63 256.14 257.73 259.38 261.11 262.9 264.75 266.67 - 268.66 270.72 272.84 275.02 277.27 279.58 281.96 284.4 / - 9 19 6 1 240.51 234.94 233.06 232.47 232.24 232.28 232.52 232.91 233.43 234.07 234.81 235.66 - 236.58 237.61 238.72 239.92 241.2 242.56 244 245.52 247.09 248.76 250.5 252.32 254.21 256.17 258.2 260.27 - 262.44 264.68 266.99 269.37 271.82 274.33 276.89 279.54 / - 9 19 7 1 231.9 220.5 218.44 217.85 217.69 217.81 218.15 218.66 219.32 220.11 221.02 222.04 - 223.17 224.4 225.69 227.12 228.63 230.23 231.92 233.66 235.52 237.46 239.49 241.59 243.74 246 248.34 250.76 - 253.25 255.78 258.42 261.13 263.92 266.74 269.67 272.66 / - 9 19 8 1 212.96 196.38 195.28 194.96 195.06 195.47 196.1 196.93 197.91 199.05 200.32 201.73 - 203.25 204.89 206.65 208.51 210.48 212.55 214.72 216.99 219.35 221.8 224.35 226.98 229.69 232.5 235.38 238.34 - 241.4 244.55 247.75 251.03 254.37 257.78 261.26 264.81 / - 9 19 9 1 178.62 165.49 164.21 163.99 164.4 165.11 166.17 167.47 168.98 170.68 172.55 174.58 - 176.76 179.08 181.54 184.13 186.84 189.66 192.6 195.64 198.79 202.03 205.36 208.79 212.3 215.89 219.57 223.33 - 227.64 231.57 235.57 239.63 243.77 247.97 252.24 256.58 / - 9 19 10 1 131.04 128.02 127.71 128.41 129.75 131.55 133.68 136.04 138.62 141.38 144.32 147.49 - 150.73 154.21 157.72 161.34 165.21 169.07 173.18 177.24 181.58 185.83 190.39 194.81 199.3 204.14 208.8 213.72 - 218.51 223.59 228.68 233.83 238.9 244.3 249.49 254.74 / - 9 19 11 1 95.81 97.01 99.75 102.76 105.87 109.09 112.43 115.89 119.48 123.27 127.42 131.59 - 135.87 140.25 144.82 149.45 154.32 159.11 164.15 169.31 174.59 179.99 185.5 191.13 196.63 202.46 208.36 214.37 - 220.52 226.43 232.76 239.19 245.73 251.94 258.66 265 / - 9 19 12 1 81.2 85.23 89.28 93.33 97.41 101.56 105.8 110.15 114.62 119.24 124 128.91 - 133.96 139.15 144.49 149.98 155.61 161.38 167.29 173.33 179.51 185.82 192.25 198.8 205.47 212.25 219.64 227.66 - 235.51 243.33 251.4 259.25 267.39 275.34 283.79 292.09 / - 9 19 13 1 76.75 81.72 86.02 90.38 95.06 100.04 105.28 110.78 116.52 122.49 128.68 135.1 - 141.73 148.56 155.59 162.82 170.25 177.86 185.65 193.63 201.79 210.11 218.62 227.29 236.12 245.12 254.22 263.44 - 272.77 282.22 291.81 301.53 311.38 321.37 331.48 341.73 / - 9 19 14 1 71.74 78.57 84.48 90.4 96.64 103.31 110.42 118 126.01 134.39 143.11 152.15 - 161.49 171.12 181.02 191.17 201.59 212.24 223.14 234.27 245.64 257.23 269.04 281.08 293.34 305.82 318.51 331.42 - 344.54 357.89 371.45 385.15 399.06 413.18 427.52 442.07 / - 9 19 15 1 67.86 76.58 85.51 94.77 104.87 115.79 127.37 139.44 151.55 164.25 177.67 191.6 - 205.94 220.64 235.71 251.13 266.9 283.01 299.45 316.24 333.34 350.79 368.1 385.18 404.62 423.44 440.92 460.92 - 480.11 502.22 522.8 540.96 562.13 583.65 605.54 627.78 / - 9 19 16 1 66.11 80.54 97.51 115.2 133.48 151.39 170.17 190.61 210.27 231.87 252.26 275.1 - 298.51 319.71 344.25 369.4 394.61 420.69 447.66 475.27 502.94 530.44 560 590.22 621.13 652.67 684.88 717.77 - 750.39 784.22 819.18 854.84 891.19 928.25 966.01 1004.47 / - 9 19 17 1 72.5 101.52 131.79 160.99 190.54 221.33 252.94 286.28 320.6 355.96 392.37 431.93 - 470.56 512.7 556.43 601.59 645.34 693.23 742.44 792.61 844.39 897.69 951.71 1007.91 1065.53 1124.57 1184.17 1245.9 - 1307.77 1370.2 1433.96 1498.81 1565.24 1632.84 1701.96 1772.46 / - 9 19 18 1 96.99 145 193.88 244.37 296.07 349.96 406.83 466.98 530.61 597.85 668.53 743.31 - 820.96 902.87 987.53 1076.56 1168.87 1263.94 1359.55 1459.08 1561.04 1666.66 1775.46 1886.58 2001.03 2119.79 2239.98 2362.85 - 2489.32 2618.69 2750.75 2885.51 3022.94 3162.95 3305.83 3454.74 / - 9 19 19 1 138.6 218.57 299.45 388.75 486.2 591.78 704.43 826.05 956.8 1095.52 1243.46 1397.09 - 1559.04 1730.43 1905.52 2094.28 2285.07 2483.38 2699.42 2912.94 3134.38 3361.65 3613.15 3857.53 4109.05 4367.11 4633.61 4907.53 - 5189.29 5479.08 5776.73 6077.46 6381.87 6702.5 7023.22 7347.34 / - 9 19 20 1 208.29 339.61 477.42 626.71 790.25 999.14 1242 1496.21 1778.67 2077.7 2403.19 2740.71 - 3104.65 3488.65 3888.24 4309.36 4743.47 5213.13 5706.69 6185.42 6723.79 7241.78 7825.96 8381.79 8951.26 9538.75 10213.13 10838.83 - 11485.79 12153.49 12841.86 13545.4 14392.96 15152.03 15932.11 16733.07 / - 9 20 1 1 251.65 250.98 250.77 250.79 250.96 251.25 251.63 252.1 252.64 253.26 253.94 254.7 - 255.52 256.41 257.37 258.39 259.47 260.62 261.83 263.1 264.43 265.83 267.29 268.81 270.4 272.04 273.75 275.52 - 277.35 279.25 281.2 283.22 285.29 287.43 289.63 291.89 / - 9 20 2 1 251.02 250.15 249.83 249.78 249.9 250.16 250.51 250.96 251.49 252.1 252.78 253.54 - 254.36 255.25 256.21 257.24 258.33 259.49 260.71 261.99 263.34 264.76 266.23 267.77 269.38 271.04 272.77 274.56 - 276.41 278.33 280.3 282.34 284.45 286.61 288.83 291.12 / - 9 20 3 1 249.96 248.77 248.26 248.09 248.13 248.33 248.64 249.06 249.57 250.17 250.85 251.6 - 252.43 253.33 254.3 255.34 256.44 257.62 258.86 260.17 261.54 262.98 264.49 266.06 267.69 269.39 271.15 272.98 - 274.87 276.82 278.84 280.92 283.06 285.27 287.54 289.87 / - 9 20 4 1 248.18 246.45 245.64 245.27 245.16 245.28 245.54 245.92 246.41 246.99 247.67 248.43 - 249.26 250.18 251.17 252.24 253.37 254.58 255.86 257.21 258.63 260.12 261.68 263.3 264.99 266.74 268.57 270.46 - 272.41 274.43 276.52 278.67 280.89 283.17 285.52 287.93 / - 9 20 5 1 245.18 242.21 240.63 240.15 239.99 240.06 240.3 240.67 241.17 241.77 242.47 243.26 - 244.14 245.11 246.15 247.28 248.48 249.76 251.11 252.54 254.04 255.61 257.26 258.97 260.76 262.61 264.54 266.53 - 268.54 270.67 272.87 275.14 277.47 279.88 282.34 284.88 / - 9 20 6 1 240.09 233.81 232.02 231.43 231.21 231.27 231.53 231.94 232.49 233.15 233.93 234.78 - 235.75 236.81 237.96 239.2 240.53 241.93 243.42 244.99 246.64 248.36 250.16 252 253.95 255.98 258.08 260.26 - 262.5 264.82 267.19 269.65 272.18 274.78 277.46 280.18 / - 9 20 7 1 231.43 219.37 217.29 216.81 216.73 216.92 217.32 217.88 218.59 219.42 220.34 221.41 - 222.58 223.86 225.23 226.7 228.26 229.86 231.6 233.43 235.35 237.35 239.38 241.55 243.8 246.13 248.48 250.97 - 253.53 256.17 258.85 261.64 264.5 267.44 270.41 273.5 / - 9 20 8 1 211.63 195.8 194.68 194.35 194.46 194.87 195.51 196.35 197.35 198.51 199.8 201.23 - 202.78 204.45 206.24 208.14 210.14 212.25 214.46 216.77 219.17 221.67 224.26 226.94 229.71 232.56 235.5 238.51 - 241.61 244.79 248.05 251.38 254.79 258.27 261.82 265.45 / - 9 20 9 1 177.75 165.25 163.98 163.76 164.19 164.91 165.99 167.31 168.84 170.56 172.45 174.4 - 176.6 178.94 181.43 184.22 186.98 189.86 192.86 195.98 199.21 202.54 205.95 209.44 213.03 216.7 220.44 224.26 - 228.14 232.1 236.13 240.75 244.94 249.18 253.49 257.86 / - 9 20 10 1 131.28 128.2 128.28 129.42 131.12 133.07 135.31 137.75 140.37 143.21 146.15 149.23 - 152.45 155.9 159.37 163.08 166.8 170.62 174.73 178.79 183.14 187.41 191.98 196.41 200.92 205.77 210.43 215.35 - 220.14 225.22 230.14 235.27 240.48 245.58 251.04 256.26 / - 9 20 11 1 97.84 100.51 103.67 106.83 109.98 113.17 116.43 119.78 123.39 127.16 131 134.94 - 139.06 143.3 147.63 152.17 156.82 161.59 166.51 171.42 176.6 181.92 187.35 192.91 198.33 204.08 209.91 215.84 - 221.59 227.75 234.01 239.99 246.43 252.97 259.17 265.9 / - 9 20 12 1 85.21 90.3 94.79 98.95 102.95 106.92 110.94 115.06 119.29 123.66 128.18 132.85 - 137.67 142.65 147.78 153.06 158.5 164.07 169.76 175.58 181.53 187.61 193.83 200.19 206.68 213.3 220.03 227.65 - 235.43 243.26 251.06 258.84 266.81 274.79 282.92 290.92 / - 9 20 13 1 81.08 85.72 90.22 94.83 99.58 104.48 109.57 114.84 120.3 125.97 131.84 137.93 - 144.23 150.73 157.43 164.34 171.44 178.74 186.22 193.89 201.75 209.78 217.99 226.37 234.92 243.64 252.53 261.58 - 270.8 280.18 289.71 299.4 309.24 319.17 329.19 339.32 / - 9 20 14 1 76.93 82.82 88.14 93.69 99.74 106.26 113.19 120.51 128.18 136.19 144.53 153.17 - 162.1 171.32 180.82 190.58 200.61 210.89 221.41 232.19 243.2 254.44 265.92 277.63 289.56 301.71 314.07 326.65 - 339.42 352.33 365.45 378.78 392.32 406.07 420.03 434.2 / - 9 20 15 1 72.46 81.01 89.06 97.53 106.67 117.15 127.92 139.36 151.36 163.87 176.83 190.24 - 204.06 218.26 232.84 247.78 263.07 278.72 294.71 311.04 327.69 344.13 361.38 377.86 397 415.33 433.97 451.46 - 470.73 489.66 511.79 529.29 549.61 570.49 591.72 613.29 / - 9 20 16 1 70.3 83.91 100.32 117.23 134.47 152.09 170.08 188.44 208.9 227.7 249.28 271.45 - 292.32 314.27 337.98 362.13 386.61 412.23 438.45 465.31 490.72 518.56 547.32 576.74 606.79 637.5 668.67 700.5 - 732.63 765.02 798.99 833.63 868.93 904.9 941.53 978.83 / - 9 20 17 1 75.99 104.91 133.35 161.28 189.74 219.93 251.09 282.6 315.84 352.16 387.51 426.14 - 463.09 504.21 546.58 589.29 631.56 677.98 725.56 774.1 824.49 875.42 928.64 983.22 1039.27 1095.59 1154.48 1214.79 - 1276.49 1339.6 1404.1 1469.98 1536.89 1604.39 1674.47 1745.92 / - 9 20 18 1 102.08 146.51 194.8 244 294.05 347.21 402.85 462.03 524.68 590.38 659.04 731.11 - 807.85 888.09 969.56 1056.47 1146.69 1240.2 1335.34 1435.77 1539.48 1646.38 1756.34 1869.45 1985.56 2104.95 2227.4 2352.8 - 2481.11 2612.98 2747.48 2884.95 3025.36 3168.41 3314.65 3464.92 / - 9 20 19 1 142.66 223.33 304.16 392.66 487.73 590.01 700.2 818.97 946.14 1082.95 1227.34 1381.08 - 1543.75 1715.4 1892.78 2082.35 2276.11 2477.44 2693.09 2910.42 3134.86 3366.79 3605.98 3866.72 4122.79 4386.42 4657.51 4935.89 - 5224.54 5518.45 5819.65 6132.36 6447.42 6769.58 7105.17 7441.84 / - 9 20 20 1 212.88 348.45 490.99 644.24 809.66 987.5 1177.9 1380.87 1637.94 1928.21 2235.05 2565.69 - 2914.77 3289.13 3671.19 4089.69 4536.71 4980.77 5479.48 5968.81 6481 7016.56 7576.1 8175.08 8753.36 9388.46 10023.31 10637.13 - 11353.37 12014.67 12697.08 13502.26 14233.87 14986.73 15884.08 16687.1 / - 10 1 1 1 223.92 223.78 223.85 224.06 224.37 224.75 225.21 225.74 226.34 226.99 227.71 228.48 - 229.31 230.2 231.15 232.15 233.21 234.32 235.49 236.72 237.99 239.33 240.71 242.15 243.65 245.19 246.79 248.45 - 250.15 251.91 253.73 255.59 257.51 259.48 261.51 263.58 / - 10 1 2 1 223.85 223.69 223.76 223.97 224.27 224.66 225.12 225.64 226.24 226.89 227.61 228.38 - 229.21 230.1 231.05 232.06 233.11 234.23 235.4 236.62 237.9 239.23 240.62 242.06 243.56 245.11 246.71 248.36 - 250.07 251.83 253.65 255.51 257.43 259.41 261.43 263.51 / - 10 1 3 1 223.71 223.54 223.6 223.8 224.1 224.48 224.94 225.46 226.06 226.71 227.43 228.2 - 229.03 229.92 230.87 231.88 232.93 234.05 235.22 236.45 237.73 239.06 240.45 241.89 243.39 244.94 246.54 248.2 - 249.91 251.68 253.49 255.36 257.29 259.26 261.29 263.37 / - 10 1 4 1 223.45 223.24 223.29 223.48 223.77 224.15 224.61 225.13 225.72 226.37 227.09 227.86 - 228.7 229.59 230.54 231.54 232.6 233.72 234.89 236.12 237.41 238.74 240.13 241.58 243.08 244.64 246.24 247.91 - 249.62 251.39 253.21 255.09 257.01 259 261.03 263.12 / - 10 1 5 1 222.95 222.69 222.7 222.88 223.16 223.53 223.98 224.51 225.09 225.75 226.46 227.24 - 228.07 228.96 229.92 230.92 231.99 233.11 234.29 235.52 236.81 238.15 239.55 241 242.51 244.07 245.68 247.35 - 249.08 250.86 252.69 254.57 256.51 258.5 260.55 262.64 / - 10 1 6 1 221.97 221.62 221.59 221.74 222.01 222.37 222.81 223.33 223.91 224.56 225.28 226.06 - 226.9 227.79 228.75 229.76 230.84 231.96 233.15 234.39 235.69 237.04 238.45 239.92 241.44 243.01 244.64 246.33 - 248.07 249.86 251.71 253.61 255.57 257.58 259.64 261.76 / - 10 1 7 1 219.73 219.02 218.78 218.78 218.93 219.23 219.63 220.12 220.69 221.34 222.05 222.83 - 223.68 224.59 225.56 226.6 227.7 228.85 230.07 231.35 232.68 234.08 235.53 237.04 238.6 240.23 241.91 243.65 - 245.44 247.29 249.2 251.16 253.18 255.25 257.38 259.56 / - 10 1 8 1 212.6 208.62 207.9 207.64 207.66 207.88 208.24 208.73 209.33 210.02 210.8 211.67 - 212.62 213.65 214.75 215.93 217.18 218.49 219.88 221.33 222.85 224.43 226.08 227.79 229.56 231.4 233.3 235.26 - 237.27 239.32 241.46 243.66 245.92 248.24 250.61 253.04 / - 10 1 9 1 192.37 183.57 182.2 181.65 181.62 181.91 182.45 183.17 184.06 185.1 186.28 187.59 - 189 190.49 192.11 193.83 195.64 197.5 199.48 201.54 203.64 205.84 208.12 210.47 212.86 215.34 217.88 220.46 - 223.13 225.85 228.62 231.46 234.35 237.29 240.29 243.35 / - 10 1 10 1 150.46 142.12 140.86 140.77 141.32 142.22 143.49 145.01 146.76 148.7 150.81 153.09 - 155.51 158.07 160.91 163.73 166.66 169.68 172.8 176.01 179.29 182.92 186.37 189.84 193.36 196.93 200.55 204.21 - 208.31 212.07 215.87 219.7 223.56 227.47 231.4 235.89 / - 10 1 11 1 105.93 104.51 105.36 107.03 109.11 111.49 114.13 116.94 119.96 123.11 126.46 129.95 - 133.6 137.28 141.17 145.17 149.28 153.52 157.87 162.15 166.68 171.31 175.81 180.6 185.48 190.17 195.2 200.28 - 205.15 210.37 215.33 220.68 225.74 231.23 236.38 242 / - 10 1 12 1 84.77 86.99 90.02 93.29 96.66 100.13 103.74 107.48 111.37 115.41 119.61 123.95 - 128.43 133.07 137.84 142.74 147.77 153.15 159.13 164.92 170.77 176.63 182.7 188.64 194.74 201.17 207.47 213.87 - 220.35 226.93 233.59 239.99 246.76 253.61 260.59 267.65 / - 10 1 13 1 79.82 83.23 86.69 90.43 94.57 99.01 103.72 108.67 113.86 119.27 124.89 130.73 - 136.78 143.02 149.47 156.11 162.95 169.92 177 184.2 191.53 199 206.61 214.34 222.21 230.21 238.33 247.62 - 257 266.09 275.29 284.59 293.91 303.28 312.63 322.08 / - 10 1 14 1 76.31 81.22 85.93 91.09 96.73 102.86 109.47 116.54 124.02 131.86 140.04 148.53 - 157.33 166.41 175.77 185.4 195.28 205.4 215.78 226.4 237.27 248.38 259.71 271.17 282.75 294.47 306.36 318.42 - 330.65 343.06 355.65 368.42 382.52 396.82 411.18 425.46 / - 10 1 15 1 72.97 80.22 88.01 96.4 105.52 115.4 126.02 137.33 149.21 161.65 174.62 188.05 - 201.91 216.18 230.86 245.95 261.43 277.32 293.6 310.29 327.38 344.88 362.78 381.03 399.61 418.45 437.57 456.96 - 476.62 496.62 516.97 537.7 560.12 582.93 605.57 629.21 / - 10 1 16 1 72.43 84.15 99.43 116.12 133.36 151.18 169.54 189.71 209.04 230.68 253.01 273.66 - 297.31 321.47 346.15 371.76 398.12 424.83 451.37 480.05 509.49 539.73 570.73 602.46 634.9 667.85 701.5 736.03 - 772.75 809.16 847.29 886.16 925.19 965.02 1005.3 1045.13 / - 10 1 17 1 77.35 105.39 133.84 162.47 191.9 222.51 255.3 289.41 324.73 361.45 401.15 440.58 - 483.38 527.39 570.9 618.19 667.15 717.67 770.34 824.82 880.13 937.86 998.13 1059.05 1121.17 1181.79 1239.3 1291.77 - 1332.24 1377.37 1425.13 1471.56 1521.56 1574.5 1626.87 1676.88 / - 10 1 18 1 101.69 147.66 196.48 246.66 299.49 355.54 415.33 479.36 547.37 618.99 694.27 774.42 - 859.11 948.27 1040.53 1135.34 1231.94 1321.66 1408.86 1498.48 1591.98 1687.91 1786.82 1886.38 1989.31 2092.66 2196.27 2304.52 - 2409.97 2521.58 2634.65 2751.8 2868.73 2987.02 3107.06 3228.65 / - 10 1 19 1 142.2 218 301.9 395.72 497.74 608.88 730.26 861.19 1006.15 1157.93 1303.39 1445.72 - 1596.44 1748.74 1902.44 2061.38 2233.21 2401.79 2573.19 2755.17 2934.78 3122.32 3319.29 3514.76 3711.82 3917.65 4132.08 4345.19 - 4562.34 4785.75 5017.67 5247.91 5487.22 5732.19 5968.86 6222.03 / - 10 1 20 1 208.76 328.95 478.34 665.76 879.58 1123.79 1370.24 1614.01 1872.44 2157.71 2438.71 2749.18 - 3077.72 3402.85 3746.76 4097.84 4496.55 4875.52 5274.16 5681.47 6106.1 6537.64 6981.85 7438.52 7908.71 8388.63 8893.91 9382.43 - 9900.96 10430.81 10988.33 11544.76 12118.73 12681.59 13302.63 13925.66 / - 10 2 1 1 225.77 225.61 225.68 225.88 226.18 226.57 227.03 227.56 228.15 228.81 229.53 230.3 - 231.14 232.03 232.98 233.98 235.05 236.16 237.34 238.56 239.85 241.18 242.58 244.02 245.52 247.07 248.68 250.34 - 252.06 253.83 255.65 257.52 259.45 261.43 263.46 265.55 / - 10 2 2 1 225.69 225.52 225.58 225.78 226.09 226.47 226.93 227.46 228.05 228.71 229.42 230.2 - 231.03 231.93 232.88 233.88 234.95 236.06 237.24 238.47 239.75 241.09 242.48 243.93 245.43 246.98 248.59 250.25 - 251.97 253.74 255.56 257.44 259.37 261.35 263.39 265.48 / - 10 2 3 1 225.54 225.35 225.41 225.61 225.9 226.29 226.74 227.27 227.86 228.52 229.23 230.01 - 230.85 231.74 232.69 233.7 234.76 235.88 237.05 238.28 239.57 240.91 242.3 243.75 245.25 246.81 248.42 250.09 - 251.81 253.58 255.4 257.28 259.21 261.2 263.24 265.33 / - 10 2 4 1 225.27 225.05 225.09 225.27 225.57 225.95 226.4 226.93 227.52 228.17 228.89 229.66 - 230.5 231.39 232.34 233.35 234.42 235.54 236.72 237.95 239.24 240.58 241.98 243.43 244.93 246.49 248.11 249.78 - 251.5 253.28 255.11 256.99 258.93 260.92 262.97 265.06 / - 10 2 5 1 224.74 224.47 224.48 224.65 224.94 225.31 225.76 226.28 226.87 227.52 228.24 229.02 - 229.85 230.75 231.7 232.71 233.78 234.91 236.09 237.32 238.62 239.96 241.37 242.83 244.34 245.91 247.53 249.21 - 250.94 252.72 254.56 256.45 258.4 260.4 262.46 264.57 / - 10 2 6 1 223.72 223.36 223.33 223.47 223.74 224.1 224.54 225.06 225.65 226.3 227.02 227.8 - 228.64 229.54 230.5 231.51 232.59 233.72 234.91 236.16 237.46 238.82 240.23 241.7 243.23 244.81 246.45 248.14 - 249.89 251.69 253.54 255.46 257.42 259.44 261.52 263.65 / - 10 2 7 1 221.26 220.47 220.13 220.13 220.31 220.6 221 221.49 222.06 222.7 223.42 224.2 - 225.07 225.99 226.97 228.01 229.11 230.28 231.5 232.78 234.13 235.53 236.99 238.51 240.06 241.7 243.39 245.14 - 246.95 248.81 250.73 252.71 254.75 256.84 258.99 261.19 / - 10 2 8 1 213.66 209.37 208.54 208.29 208.31 208.53 208.91 209.4 210.01 210.72 211.52 212.41 - 213.37 214.42 215.54 216.73 218 219.33 220.74 222.22 223.76 225.37 227 228.73 230.53 232.39 234.32 236.31 - 238.36 240.46 242.63 244.86 247.15 249.5 251.9 254.35 / - 10 2 9 1 192.16 183.48 182.05 181.54 181.52 181.83 182.39 183.15 184.07 185.13 186.34 187.67 - 189.12 190.68 192.31 194.07 195.92 197.82 199.84 201.94 204.13 206.35 208.67 211.07 213.51 216.04 218.63 221.26 - 223.98 226.76 229.57 232.46 235.41 238.4 241.45 244.56 / - 10 2 10 1 150.12 142.08 140.87 140.81 141.4 142.33 143.62 145.17 146.95 148.92 151.06 153.37 - 155.82 158.42 161.15 163.99 167.12 170.19 173.34 176.58 179.91 183.31 187.06 190.63 194.24 197.88 201.56 205.28 - 209.05 213.26 217.13 221.03 224.96 228.93 232.92 236.97 / - 10 2 11 1 106.06 104.69 105.57 107.24 109.36 111.8 114.44 117.31 120.33 123.55 126.93 130.47 - 134.07 137.87 141.8 145.84 150 154.14 158.51 162.99 167.57 172.25 176.79 181.63 186.56 191.3 196.39 201.24 - 206.44 211.4 216.73 222.14 227.26 232.8 238.01 243.27 / - 10 2 12 1 84.88 87.16 90.17 93.48 96.88 100.4 104.05 107.83 111.76 115.84 120.08 124.46 - 128.99 133.66 138.47 143.42 148.49 153.68 159.74 165.71 171.58 177.57 183.61 189.74 195.9 202.15 208.5 214.94 - 221.47 228.08 234.79 241.58 248.42 255.34 262.39 269.52 / - 10 2 13 1 79.89 83.38 86.89 90.65 94.81 99.28 104.02 109.01 114.24 119.69 125.36 131.25 - 137.34 143.63 150.13 156.81 163.69 170.72 177.84 185.09 192.47 200 207.65 215.44 223.37 231.42 239.6 248.7 - 258.18 267.41 276.63 285.89 295.44 304.86 314.16 324.1 / - 10 2 14 1 76.24 81.32 86.11 91.3 96.99 103.16 109.79 116.9 124.42 132.3 140.53 149.06 - 157.91 167.04 176.44 186.12 196.06 206.24 216.67 227.35 238.27 249.43 260.82 272.34 283.98 295.77 307.72 319.84 - 332.14 344.62 357.29 370.13 383.94 398.35 412.87 427.36 / - 10 2 15 1 72.86 80.24 88.11 96.58 105.75 115.67 126.33 137.68 149.61 162.09 175.1 188.59 - 202.5 216.83 231.56 246.69 262.23 278.17 294.5 311.24 328.38 345.93 363.89 382.21 400.87 419.8 439 458.46 - 478.2 498.27 518.71 539.51 561.15 584.08 607.37 630.9 / - 10 2 16 1 72.36 84.19 99.69 116.25 133.55 151.41 169.8 189.99 209.36 231.03 253.43 274.13 - 297.83 322.05 346.77 372.59 398.87 425.08 452.2 480.9 510.37 540.63 571.65 603.39 635.84 668.87 702.57 737.12 - 772.99 809.96 848.21 886.9 926.26 966.27 1006.56 1046.93 / - 10 2 17 1 77.3 105.37 133.89 162.57 192.04 223.11 255.47 289.59 324.92 361.65 401.37 440.83 - 483.65 527.68 571.45 618.49 667.38 718.02 770.52 825.05 880.37 938.07 998.01 1059.1 1121.17 1182.32 1240.55 1293.97 - 1335.23 1381.7 1427.68 1477.21 1527.16 1579.04 1633.46 1683.81 / - 10 2 18 1 101.58 147.62 196.49 246.89 299.7 355.74 415.62 479.42 547.34 618.92 694.05 774.02 - 858.54 947.58 1039.86 1134.71 1231.27 1321.91 1410.86 1502.04 1597.57 1687.2 1780.44 1872.38 1967.05 2062.52 2160.26 2260.27 - 2356.93 2461.67 2564.37 2671.45 2778.37 2887.11 2995.19 3106.81 / - 10 2 19 1 142.03 217.84 301.32 395.06 497.85 608.8 729.39 860.67 1005.33 1156.98 1302.92 1445.85 - 1590.59 1750.24 1905.97 2067.07 2241.16 2411.68 2585 2767.6 2950.26 3139.65 3338.53 3536.13 3735.38 3943.44 4154.92 4375.54 - 4594.96 4820.68 5054.92 5287.82 5529.5 5778.24 6016.56 6272.22 / - 10 2 20 1 208.56 328.83 475.11 662.41 879.22 1117.37 1365.32 1614.59 1873.93 2149.49 2442.68 2754.58 - 3066.75 3411.72 3757.34 4110.35 4512.96 4898.47 5300.95 5710.08 6143.14 6579.85 7029.15 7490.84 7966.29 8451.31 8958.52 9455.23 - 9978.81 10514.05 11067.75 11640.25 12220.28 12789.46 13402.5 14046.64 / - 10 3 1 1 227.61 227.43 227.5 227.7 228 228.38 228.84 229.37 229.97 230.62 231.34 232.12 - 232.96 233.85 234.8 235.81 236.88 238 239.17 240.41 241.69 243.03 244.43 245.88 247.39 248.95 250.56 252.23 - 253.95 255.73 257.56 259.44 261.38 263.37 265.41 267.51 / - 10 3 2 1 227.52 227.34 227.4 227.6 227.9 228.28 228.74 229.27 229.86 230.52 231.24 232.01 - 232.85 233.74 234.7 235.71 236.77 237.89 239.07 240.3 241.59 242.93 244.33 245.79 247.29 248.85 250.47 252.14 - 253.86 255.64 257.47 259.35 261.29 263.29 265.33 267.43 / - 10 3 3 1 227.37 227.17 227.22 227.41 227.71 228.09 228.55 229.07 229.67 230.32 231.04 231.82 - 232.66 233.55 234.5 235.51 236.58 237.7 238.88 240.11 241.4 242.75 244.15 245.6 247.11 248.67 250.29 251.96 - 253.69 255.47 257.3 259.19 261.13 263.13 265.18 267.28 / - 10 3 4 1 227.08 226.85 226.88 227.07 227.36 227.74 228.19 228.72 229.31 229.96 230.68 231.46 - 232.3 233.19 234.15 235.16 236.23 237.35 238.53 239.77 241.06 242.41 243.81 245.27 246.78 248.35 249.97 251.64 - 253.37 255.16 257 258.89 260.83 262.84 264.89 267 / - 10 3 5 1 226.54 226.25 226.26 226.43 226.71 227.08 227.53 228.05 228.64 229.29 230.01 230.79 - 231.63 232.53 233.48 234.5 235.57 236.7 237.88 239.12 240.42 241.77 243.18 244.64 246.16 247.74 249.36 251.05 - 252.79 254.58 256.43 258.33 260.29 262.3 264.36 266.48 / - 10 3 6 1 225.46 225.09 225.06 225.2 225.47 225.83 226.27 226.79 227.38 228.03 228.75 229.53 - 230.37 231.27 232.23 233.25 234.33 235.47 236.66 237.91 239.22 240.58 242 243.48 245.01 246.6 248.24 249.94 - 251.69 253.5 255.37 257.29 259.27 261.3 263.38 265.52 / - 10 3 7 1 222.74 221.88 221.44 221.43 221.59 221.88 222.28 222.77 223.34 223.99 224.71 225.49 - 226.35 227.27 228.26 229.31 230.42 231.59 232.83 234.12 235.48 236.89 238.36 239.9 241.49 243.14 244.85 246.61 - 248.44 250.32 252.26 254.25 256.3 258.41 260.58 262.8 / - 10 3 8 1 214.68 209.95 209.14 208.87 208.9 209.12 209.5 210 210.62 211.34 212.15 213.05 - 214.03 215.09 216.23 217.45 218.74 220.09 221.52 222.99 224.56 226.19 227.89 229.66 231.48 233.37 235.33 237.34 - 239.42 241.53 243.73 245.99 248.31 250.69 253.13 255.62 / - 10 3 9 1 192.57 183.33 181.89 181.38 181.37 181.69 182.27 183.05 184 185.11 186.32 187.69 - 189.17 190.77 192.44 194.24 196.13 198.12 200.15 202.3 204.53 206.8 209.18 211.62 214.11 216.69 219.34 222.02 - 224.79 227.62 230.49 233.43 236.44 239.48 242.59 245.75 / - 10 3 10 1 150.2 141.95 140.88 140.86 141.42 142.44 143.73 145.3 147.1 149.09 151.26 153.6 - 156.14 158.78 161.54 164.42 167.41 170.69 173.88 177.17 180.53 183.97 187.48 191.37 195.03 198.78 202.55 206.34 - 210.17 214.03 218.38 222.35 226.34 230.38 234.45 238.57 / - 10 3 11 1 106.14 104.82 105.74 107.48 109.63 112.07 114.77 117.64 120.73 123.99 127.35 130.91 - 134.62 138.46 142.43 146.41 150.6 154.89 159.31 163.83 168.27 172.98 177.77 182.67 187.39 192.44 197.28 202.48 - 207.73 212.75 218.14 223.25 228.78 234 239.65 244.97 / - 10 3 12 1 85.01 87.34 90.33 93.65 97.11 100.67 104.35 108.18 112.15 116.27 120.54 124.97 - 129.54 134.25 139.1 144.09 149.21 154.45 160.43 166.41 172.39 178.5 184.54 190.71 197.06 203.37 209.78 216.28 - 222.87 229.55 236.32 243.18 250.09 257.07 264.2 270.97 / - 10 3 13 1 79.96 83.53 87.09 90.87 95.05 99.55 104.32 109.35 114.62 120.12 125.83 131.76 - 137.9 144.24 150.78 157.51 164.44 171.51 178.69 185.98 193.42 200.99 208.7 216.54 224.52 232.63 240.86 249.49 - 259.08 268.72 278.02 287.3 296.87 306.45 316.09 325.7 / - 10 3 14 1 76.17 81.4 86.28 91.52 97.24 103.45 110.12 117.26 124.82 132.75 141.01 149.6 - 158.48 167.66 177.12 186.84 196.83 207.08 217.56 228.29 239.27 250.48 261.93 273.51 285.21 297.06 309.08 321.27 - 333.64 346.19 358.92 371.84 384.94 399.44 414.15 428.93 / - 10 3 15 1 72.77 80.25 88.2 96.75 105.97 115.95 126.64 138.02 150.01 162.53 175.58 189.11 - 203.09 217.47 232.26 247.44 263.03 279.01 295.4 312.19 329.38 346.98 364.99 383.38 402.12 421.13 440.42 459.95 - 479.76 499.91 520.43 541.31 562.57 585.16 608.62 632.42 / - 10 3 16 1 72.3 84.23 99.78 116.39 133.73 151.63 170.05 190.27 209.67 231.37 253.82 274.59 - 298.34 322.61 347.43 373.26 399.6 426.86 454.06 481.73 511.22 541.49 572.53 604.27 636.74 669.83 703.61 738.18 - 773.61 810.19 848.61 887.58 927.27 966.98 1007.34 1048.01 / - 10 3 17 1 77.26 105.37 133.93 162.67 192.19 223.3 255.65 289.76 325.1 361.83 401.57 441.04 - 483.89 527.94 573.04 618.73 667.57 718.16 770.56 825.16 880.51 938.21 997.34 1058.52 1120.94 1182.76 1241.26 1295.84 - 1338.79 1386.88 1435.12 1485.54 1537.83 1591.37 1646.52 1699.63 / - 10 3 18 1 101.47 147.59 196.46 246.97 299.84 355.92 415.75 479.46 547.33 618.82 693.8 773.58 - 857.9 946.75 1039.07 1133.99 1230.44 1318.66 1402.28 1487.38 1577.11 1667.91 1762.12 1857.05 1952.25 2050.3 2146.8 2248.97 - 2347.12 2451.54 2556.9 2665.83 2774.41 2882.03 2992.46 3111.02 / - 10 3 19 1 141.85 217.68 300.89 395.11 496.91 607.49 728.47 860.1 1001.44 1151.86 1302.32 1445.91 - 1591.25 1751.56 1908.13 2071.06 2247.71 2420.53 2596.31 2780.18 2965.74 3157.84 3358.67 3558.48 3760.11 3970.43 4184.19 4407.23 - 4629.24 4857.39 5093.95 5323.14 5573.91 5825.43 6066.55 6324.93 / - 10 3 20 1 208.36 328.72 472.54 659.08 874.04 1116.6 1364.92 1609.53 1875.41 2152.21 2446.74 2760.12 - 3073.88 3420.8 3768.18 4123.24 4528.06 4918.82 5325.55 5740.17 6177.17 6610.52 7076.1 7530.17 8024.1 8514.92 9016.89 9529.93 - 10059.01 10600.04 11160.51 11730 12326.4 12902.22 13522.27 14158.17 / - 10 4 1 1 229.44 229.25 229.31 229.51 229.81 230.19 230.65 231.18 231.78 232.43 233.15 233.93 - 234.77 235.67 236.62 237.63 238.7 239.82 241 242.24 243.53 244.88 246.28 247.74 249.25 250.82 252.44 254.11 - 255.84 257.62 259.46 261.35 263.3 265.3 267.35 269.46 / - 10 4 2 1 229.36 229.16 229.21 229.41 229.7 230.09 230.55 231.07 231.67 232.33 233.04 233.82 - 234.66 235.56 236.51 237.52 238.59 239.72 240.9 242.13 243.43 244.78 246.18 247.64 249.15 250.72 252.34 254.01 - 255.74 257.53 259.37 261.26 263.21 265.21 267.27 269.37 / - 10 4 3 1 229.2 228.98 229.02 229.21 229.51 229.89 230.35 230.87 231.47 232.12 232.84 233.62 - 234.46 235.36 236.31 237.32 238.39 239.52 240.7 241.94 243.23 244.58 245.99 247.45 248.96 250.53 252.15 253.83 - 255.57 257.35 259.19 261.09 263.04 265.04 267.1 269.22 / - 10 4 4 1 228.9 228.65 228.68 228.86 229.15 229.53 229.98 230.51 231.1 231.75 232.47 233.25 - 234.09 234.99 235.94 236.96 238.03 239.15 240.34 241.58 242.88 244.23 245.63 247.1 248.62 250.19 251.82 253.5 - 255.24 257.03 258.87 260.78 262.73 264.74 266.8 268.92 / - 10 4 5 1 228.32 228.02 228.03 228.19 228.47 228.84 229.29 229.82 230.41 231.06 231.78 232.56 - 233.4 234.3 235.26 236.27 237.35 238.48 239.67 240.91 242.21 243.57 244.98 246.45 247.97 249.55 251.19 252.88 - 254.63 256.43 258.28 260.19 262.16 264.18 266.25 268.38 / - 10 4 6 1 227.2 226.82 226.78 226.92 227.19 227.55 227.99 228.51 229.1 229.76 230.48 231.26 - 232.1 233 233.97 234.99 236.07 237.21 238.41 239.66 240.97 242.34 243.76 245.25 246.78 248.38 250.03 251.73 - 253.5 255.31 257.19 259.11 261.1 263.14 265.23 267.38 / - 10 4 7 1 224.18 223.13 222.71 222.68 222.83 223.11 223.5 223.99 224.56 225.21 225.93 226.72 - 227.58 228.51 229.5 230.56 231.68 232.86 234.11 235.42 236.78 238.21 239.7 241.25 242.85 244.52 246.24 248.02 - 249.86 251.75 253.71 255.72 257.78 259.91 262.09 264.34 / - 10 4 8 1 215.66 210.51 209.67 209.38 209.39 209.62 210 210.52 211.15 211.88 212.71 213.62 - 214.63 215.69 216.85 218.08 219.39 220.78 222.23 223.75 225.32 226.98 228.71 230.5 232.36 234.28 236.26 238.29 - 240.4 242.57 244.81 247.1 249.45 251.87 254.34 256.86 / - 10 4 9 1 192.96 183.05 181.66 181.15 181.14 181.48 182.08 182.88 183.86 185 186.27 187.65 - 189.17 190.81 192.55 194.35 196.29 198.32 200.43 202.59 204.87 207.19 209.62 212.12 214.66 217.3 220 222.74 - 225.56 228.45 231.37 234.37 237.43 240.52 243.69 246.91 / - 10 4 10 1 149.75 141.94 140.84 140.86 141.51 142.52 143.87 145.47 147.29 149.32 151.52 153.88 - 156.4 159.06 161.93 164.85 167.87 171 174.22 177.75 181.16 184.64 188.2 191.82 195.83 199.6 203.43 207.35 - 211.27 215.22 219.2 223.66 227.73 231.85 235.98 240.16 / - 10 4 11 1 106.22 105.01 105.95 107.69 109.87 112.37 115.07 118.01 121.13 124.37 127.82 131.42 - 135.16 138.95 142.95 147.08 151.3 155.64 160.11 164.5 169.16 173.91 178.76 183.46 188.47 193.57 198.47 203.72 - 208.73 214.1 219.55 224.72 230.3 235.58 241.3 246.67 / - 10 4 12 1 85.14 87.53 90.49 93.83 97.32 100.93 104.65 108.52 112.53 116.69 121.01 125.47 - 130.08 134.84 139.73 144.76 149.92 155.21 160.99 167.16 173.23 179.35 185.47 191.81 198 204.36 211.06 217.62 - 224.28 231.02 237.86 244.44 251.44 258.48 265.6 272.86 / - 10 4 13 1 80.04 83.68 87.28 91.1 95.29 99.81 104.62 109.69 115 120.53 126.3 132.27 - 138.45 144.84 151.43 158.21 165.18 172.3 179.53 186.87 194.36 201.98 209.74 217.64 225.68 233.84 242.13 250.55 - 260.21 269.7 279.41 288.7 298.52 308.06 317.75 327.74 / - 10 4 14 1 76.11 81.47 86.44 91.73 97.5 103.75 110.45 117.62 125.22 133.18 141.5 150.13 - 159.06 168.29 177.79 187.57 197.61 207.91 218.45 229.23 240.26 251.53 263.03 274.67 286.44 298.35 310.44 322.69 - 335.13 347.75 360.55 373.54 386.72 400.92 415.3 430.28 / - 10 4 15 1 72.73 80.26 88.29 96.91 106.2 116.22 126.96 138.37 150.41 162.97 176.06 189.64 - 203.67 218.11 232.95 248.19 263.82 279.86 296.3 313.13 330.37 348.01 366.08 384.53 403.35 422.44 441.81 461.41 - 481.31 501.54 522.12 543.08 564.42 586.63 609.73 633.76 / - 10 4 16 1 72.25 84.27 99.86 116.53 133.92 151.86 170.3 190.54 209.99 231.71 254.2 275.35 - 298.83 323.34 348.07 373.91 400.32 427.61 454.31 482.54 512.05 542.33 573.39 605.13 637.57 670.74 704.57 739.19 - 774.64 810.32 848.8 888.45 927.93 967.98 1008.37 1048.81 / - 10 4 17 1 77.22 105.36 134.17 162.77 192.38 223.46 255.82 289.93 325.27 362 401.75 441.21 - 484.1 528.15 573.67 618.93 667.69 718.19 770.5 825.14 880.52 938.22 997.32 1058.7 1120.91 1182.85 1242.15 1297.34 - 1342.34 1392.25 1442.02 1494.06 1548 1601.63 1660.83 1714.99 / - 10 4 18 1 101.35 147.56 196.41 247.05 299.98 356.18 415.88 479.51 547.25 618.69 693.52 773.09 - 857.2 945.84 1038.15 1132.62 1229.41 1318.51 1403 1490.04 1580.42 1671.28 1766.31 1863.39 1959.67 2057.55 2156.58 2259.97 - 2357.8 2463.45 2570.18 2677.85 2790.24 2901.21 3013.24 3133.22 / - 10 4 19 1 141.67 217.51 300.45 394.43 496.96 607.42 728.19 859.53 1000.52 1150.71 1301.62 1445.83 - 1591.83 1752.81 1910.16 2073.94 2252.18 2427.74 2606.21 2792.69 2980.32 3175.73 3373.61 3581.65 3785.95 3998.79 4215.06 4440.58 - 4669.17 4896.08 5134.98 5367.42 5620.73 5874.66 6119.12 6380.5 / - 10 4 20 1 208.16 328.62 469.97 655.76 869.38 1110.06 1359.9 1610.06 1876.95 2155 2450.92 2765.83 - 3081.28 3430.23 3779.31 4136.58 4511.19 4940.77 5346.99 5764.09 6209.03 6650.18 7122.09 7581.94 8081.84 8579.02 9086.93 9605.92 - 10140.99 10688.5 11256.13 11832.84 12436.57 13019.78 13647.25 14290.9 / - 10 5 1 1 231.34 231.11 231.15 231.34 231.64 232.02 232.47 233 233.59 234.25 234.97 235.75 - 236.59 237.49 238.44 239.45 240.52 241.65 242.84 244.08 245.37 246.72 248.13 249.59 251.11 252.68 254.31 255.99 - 257.72 259.51 261.36 263.26 265.21 267.22 269.28 271.4 / - 10 5 2 1 231.25 231.01 231.05 231.23 231.53 231.91 232.36 232.89 233.48 234.14 234.86 235.64 - 236.47 237.37 238.33 239.34 240.41 241.54 242.72 243.97 245.26 246.61 248.02 249.48 251 252.57 254.2 255.88 - 257.62 259.41 261.26 263.16 265.12 267.13 269.19 271.31 / - 10 5 3 1 231.08 230.82 230.85 231.03 231.32 231.7 232.16 232.68 233.27 233.93 234.65 235.43 - 236.27 237.16 238.12 239.14 240.21 241.34 242.52 243.76 245.06 246.41 247.82 249.29 250.81 252.38 254.01 255.7 - 257.44 259.23 261.08 262.98 264.94 266.96 269.02 271.14 / - 10 5 4 1 230.76 230.48 230.49 230.66 230.95 231.32 231.77 232.3 232.89 233.55 234.26 235.04 - 235.88 236.78 237.74 238.75 239.83 240.96 242.14 243.39 244.69 246.04 247.46 248.92 250.45 252.03 253.66 255.35 - 257.09 258.89 260.75 262.65 264.62 266.64 268.71 270.84 / - 10 5 5 1 230.16 229.82 229.81 229.97 230.25 230.62 231.06 231.58 232.17 232.83 233.55 234.33 - 235.17 236.07 237.03 238.05 239.12 240.26 241.45 242.7 244 245.36 246.78 248.25 249.78 251.37 253.01 254.71 - 256.46 258.27 260.13 262.05 264.02 266.05 268.13 270.27 / - 10 5 6 1 228.97 228.56 228.51 228.64 228.89 229.25 229.69 230.2 230.79 231.44 232.16 232.94 - 233.79 234.69 235.66 236.68 237.76 238.9 240.1 241.36 242.68 244.05 245.48 246.97 248.51 250.11 251.77 253.48 - 255.25 257.07 258.96 260.89 262.89 264.94 267.04 269.2 / - 10 5 7 1 225.6 224.32 223.93 223.83 223.98 224.26 224.66 225.15 225.72 226.38 227.11 227.91 - 228.78 229.71 230.71 231.78 232.91 234.11 235.36 236.68 238.06 239.5 241 242.55 244.17 245.85 247.59 249.35 - 251.2 253.12 255.09 257.12 259.21 261.36 263.57 265.83 / - 10 5 8 1 216.58 210.95 210.1 209.81 209.81 210.04 210.43 210.95 211.59 212.34 213.18 214.11 - 215.11 216.21 217.39 218.64 219.98 221.39 222.87 224.4 226.02 227.71 229.47 231.28 233.17 235.12 237.14 239.22 - 241.34 243.55 245.82 248.15 250.54 252.97 255.48 258.05 / - 10 5 9 1 192.65 182.79 181.38 180.85 180.87 181.23 181.84 182.66 183.67 184.83 186.14 187.58 - 189.1 190.78 192.56 194.45 196.39 198.46 200.63 202.83 205.16 207.57 210.02 212.57 215.19 217.85 220.61 223.41 - 226.29 229.23 232.21 235.27 238.38 241.54 244.76 248.04 / - 10 5 10 1 149.41 141.93 140.87 140.92 141.57 142.64 143.98 145.6 147.45 149.5 151.72 154.17 - 156.72 159.42 162.24 165.28 168.34 171.51 174.77 178.12 181.79 185.32 188.91 192.58 196.32 200.12 204.33 208.26 - 212.27 216.34 220.42 224.52 229.11 233.29 237.51 241.77 / - 10 5 11 1 106.38 105.15 106.16 107.93 110.14 112.64 115.4 118.33 121.48 124.8 128.28 131.85 - 135.62 139.53 143.57 147.74 151.9 156.27 160.74 165.34 170.04 174.84 179.52 184.49 189.56 194.44 199.66 204.97 - 210.03 215.45 220.63 226.19 231.47 237.17 242.55 248.38 / - 10 5 12 1 85.28 87.72 90.65 94.01 97.54 101.18 104.95 108.85 112.91 117.11 121.46 125.97 - 130.62 135.42 140.36 145.43 150.64 155.97 161.55 167.91 174.05 180.2 186.45 192.77 199.16 205.57 212.08 218.69 - 225.39 232.18 239.07 246.04 253.11 260.22 267.42 274.75 / - 10 5 13 1 80.12 83.82 87.48 91.32 95.53 100.08 104.92 110.02 115.37 120.95 126.76 132.78 - 139 145.44 152.07 158.9 165.92 173.09 180.36 187.76 195.3 202.97 210.79 218.74 226.83 235.05 243.39 251.87 - 261.04 270.93 280.58 290.15 299.99 309.66 319.41 329.34 / - 10 5 14 1 76.05 81.54 86.6 91.94 97.75 104.03 110.77 117.98 125.61 133.62 141.98 150.66 - 159.64 168.91 178.46 188.29 198.37 208.72 219.33 230.17 241.25 252.57 264.13 275.83 287.66 299.64 311.79 324.11 - 336.62 349.3 362.18 375.24 388.49 401.92 416.85 431.54 / - 10 5 15 1 72.68 80.27 88.37 97.08 106.42 116.49 127.26 138.72 150.8 163.41 176.54 190.16 - 204.24 218.74 233.64 248.93 264.62 280.7 297.18 314.06 331.35 349.03 367.14 385.66 404.55 423.73 443.18 462.86 - 482.82 503.13 523.79 544.82 566.23 588.03 611.25 634.88 / - 10 5 16 1 72.2 84.28 99.95 116.67 134.1 152.08 170.55 190.81 210.29 232.05 254.55 276.15 - 299.32 323.87 348.65 374.53 401 428.33 455.06 483.32 512.84 543.14 574.19 605.94 638.36 671.57 705.49 740.15 - 775.61 810.83 849.41 888.72 928.51 968.54 1009.23 1049.64 / - 10 5 17 1 77.17 105.33 134.2 163.1 192.78 223.62 255.99 290.1 325.44 362.16 401.9 441.36 - 484.26 528.33 572.85 619.08 667.77 718.16 770.48 824.93 880.42 938.11 997.21 1058.27 1120.2 1182.77 1242.48 1297.94 - 1346.06 1397.43 1448.99 1503.54 1558.39 1614.68 1674.75 1730.74 / - 10 5 18 1 101.22 147.46 196.35 247.2 300.1 356.33 416.02 479.55 547.17 618.53 693.2 772.58 - 856.44 944.86 1037.05 1131.64 1227.56 1318.16 1403.8 1493.57 1582.76 1674.85 1771.56 1868.55 1966.05 2066.29 2165.05 2271.3 - 2370.43 2477.4 2585.53 2694.61 2808.48 2920.98 3034.7 3155.72 / - 10 5 19 1 141.48 217.34 300.04 394.41 495.93 607.32 726.81 857.48 999.19 1149.51 1300.8 1445.66 - 1592.28 1753.98 1912.13 2076.81 2248.77 2432.79 2615.14 2803.23 2992.81 3192.35 3393.24 3604.21 3811.54 4027.44 4246.6 4469.92 - 4708.1 4936.85 5178.38 5414.07 5663.3 5926.76 6174.72 6439 / - 10 5 20 1 207.95 328.52 466.66 652.43 868.39 1109.19 1354.22 1606.34 1866.5 2157.86 2455.25 2752.2 - 3088.97 3418.71 3790.98 4150.5 4527.45 4956.06 5368.27 5788.46 6235.13 6685.23 7154.61 7632.37 8125.03 8642.61 9157.35 9665.74 - 10224.4 10778.94 11354.02 11938.92 12536.66 13141.74 13777.25 14429.05 / - 10 6 1 1 233.46 233.09 233.08 233.24 233.51 233.88 234.33 234.85 235.44 236.09 236.81 237.59 - 238.42 239.32 240.28 241.29 242.36 243.49 244.68 245.92 247.22 248.57 249.98 251.45 252.97 254.55 256.18 257.87 - 259.61 261.41 263.26 265.17 267.13 269.14 271.22 273.34 / - 10 6 2 1 233.36 232.99 232.97 233.13 233.4 233.77 234.21 234.73 235.32 235.98 236.69 237.47 - 238.31 239.2 240.16 241.17 242.25 243.38 244.56 245.8 247.1 248.46 249.87 251.34 252.86 254.44 256.07 257.76 - 259.5 261.3 263.16 265.06 267.03 269.05 271.12 273.25 / - 10 6 3 1 233.19 232.8 232.77 232.92 233.19 233.56 234 234.52 235.11 235.76 236.48 237.25 - 238.09 238.99 239.95 240.96 242.03 243.16 244.35 245.59 246.89 248.25 249.66 251.13 252.66 254.24 255.87 257.56 - 259.31 261.11 262.97 264.88 266.84 268.87 270.94 273.07 / - 10 6 4 1 232.86 232.44 232.4 232.54 232.81 233.17 233.61 234.13 234.71 235.36 236.08 236.86 - 237.7 238.59 239.55 240.57 241.64 242.77 243.96 245.21 246.51 247.87 249.28 250.76 252.28 253.87 255.51 257.2 - 258.95 260.76 262.62 264.54 266.51 268.53 270.62 272.75 / - 10 6 5 1 232.24 231.76 231.7 231.83 232.08 232.44 232.87 233.39 233.97 234.62 235.34 236.12 - 236.96 237.86 238.82 239.83 240.91 242.05 243.24 244.49 245.8 247.16 248.58 250.06 251.59 253.19 254.83 256.53 - 258.29 260.11 261.98 263.9 265.88 267.92 270.01 272.16 / - 10 6 6 1 231 230.42 230.3 230.39 230.62 230.95 231.38 231.88 232.46 233.11 233.82 234.6 - 235.44 236.35 237.31 238.34 239.42 240.56 241.77 243.03 244.35 245.72 247.16 248.65 250.2 251.8 253.47 255.19 - 256.97 258.8 260.69 262.64 264.64 266.7 268.82 270.99 / - 10 6 7 1 227.3 225.68 225.11 225.03 225.14 225.4 225.78 226.26 226.83 227.48 228.2 229.01 - 229.88 230.82 231.83 232.9 234.04 235.24 236.5 237.83 239.22 240.67 242.18 243.76 245.39 247.08 248.84 250.66 - 252.53 254.46 256.46 258.51 260.62 262.79 265.02 267.31 / - 10 6 8 1 217.81 211.47 210.53 210.21 210.2 210.42 210.8 211.32 211.97 212.72 213.57 214.52 - 215.55 216.67 217.87 219.16 220.52 221.93 223.43 225.01 226.66 228.38 230.15 232 233.92 235.91 237.97 240.07 - 242.25 244.49 246.79 249.16 251.58 254.07 256.61 259.22 / - 10 6 9 1 193.27 182.48 181.08 180.59 180.61 180.99 181.63 182.48 183.52 184.68 186.02 187.49 - 189.08 190.75 192.57 194.49 196.51 198.58 200.79 203.08 205.42 207.88 210.41 212.98 215.66 218.41 221.19 224.07 - 226.98 229.98 233.04 236.14 239.32 242.53 245.82 249.16 / - 10 6 10 1 149.03 141.93 140.91 140.99 141.66 142.73 144.12 145.75 147.63 149.73 151.98 154.4 - 156.98 159.78 162.64 165.62 168.72 172.02 175.32 178.71 182.19 186 189.64 193.35 197.13 200.98 204.88 209.22 - 213.26 217.35 221.52 225.75 229.99 234.74 239.04 243.36 / - 10 6 11 1 106.46 105.34 106.34 108.15 110.39 112.93 115.7 118.71 121.89 125.21 128.72 132.38 - 136.19 140.14 144.12 148.31 152.62 157.03 161.55 166.19 170.75 175.58 180.51 185.53 190.39 195.57 200.85 205.9 - 211.33 216.49 222.03 227.66 232.99 238.76 244.19 250.1 / - 10 6 12 1 85.42 87.91 90.83 94.2 97.76 101.44 105.26 109.21 113.3 117.55 121.94 126.49 - 131.18 136.02 141 146.11 151.36 156.73 162.22 168.52 174.88 181.05 187.44 193.74 200.16 206.79 213.36 220.02 - 226.79 233.65 240.6 247.64 254.78 261.96 268.87 276.21 / - 10 6 13 1 80.21 83.98 87.68 91.56 95.78 100.35 105.23 110.37 115.76 121.38 127.23 133.29 - 139.56 146.04 152.72 159.6 166.66 173.88 181.2 188.64 196.23 203.96 211.82 219.83 227.97 236.24 244.65 253.18 - 261.83 271.8 281.58 291.59 301.14 310.95 321.08 331.06 / - 10 6 14 1 76.01 81.6 86.77 92.16 98 104.32 111.11 118.34 126.01 134.06 142.46 151.18 - 160.21 169.52 179.12 188.99 199.13 209.53 220.18 231.08 242.22 253.6 265.21 276.97 288.86 300.91 313.12 325.51 - 338.08 350.84 363.78 376.92 390.24 403.75 417.9 432.68 / - 10 6 15 1 72.66 80.29 88.46 97.24 106.64 116.75 127.57 139.06 151.18 163.84 177.01 190.68 - 204.8 219.35 234.31 249.66 265.39 281.52 298.05 314.98 332.31 350.04 368.18 386.75 405.7 424.97 444.51 464.25 - 484.3 504.68 525.42 546.52 567.99 589.87 612.14 635.89 / - 10 6 16 1 72.16 84.32 100.03 116.81 134.27 152.29 170.8 191.08 210.59 232.38 254.91 276.63 - 299.78 324.37 349.3 375.12 401.65 429.02 456.55 484.06 513.6 543.9 574.96 606.71 639.11 672.29 706.32 741.06 - 776.55 811.79 849.39 888.77 928.75 969.11 1009.68 1050.88 / - 10 6 17 1 77.12 105.3 134.23 163.28 192.91 223.77 256.16 290.26 325.63 362.3 402.03 441.47 - 484.38 528.46 574.21 619.18 667.78 718.07 770.25 824.6 880.11 937.87 996.97 1057.28 1119.75 1182.73 1243.21 1297.51 - 1349.77 1402.64 1456.01 1512.29 1568.93 1627.13 1688.87 1747.85 / - 10 6 18 1 101.1 147.46 196.29 247.26 300.33 356.46 416.22 479.58 547.07 618.34 692.86 772.01 - 855.62 943.78 1035.78 1130.5 1226.72 1316.06 1402.62 1493.02 1583.88 1676.89 1774.47 1872.36 1971.09 2071.09 2173.62 2279.44 - 2381.62 2489.87 2599.26 2709.97 2825.29 2939.22 3054.62 3178.14 / - 10 6 19 1 141.29 217.16 299.62 393.65 495.96 605.91 726.41 856.6 998.18 1148.23 1299.8 1445.32 - 1592.61 1755.06 1914.04 2079.66 2252.58 2437.79 2623.1 2810.86 3003.2 3205.77 3410.89 3625.23 3836.08 4055.39 4277.85 4504.64 - 4747.35 4978.45 5223.32 5462.35 5715.12 5981.77 6233.32 6500.96 / - 10 6 20 1 207.75 328.44 463.15 649.45 863.13 1102.57 1353.61 1603.18 1868.07 2146.45 2442.75 2758.47 - 3096.98 3428.66 3803.27 4165.05 4544.49 4976.56 5390.61 5813.64 6259.15 6716.11 7194.6 7680.05 8179.89 8704.73 9226.94 9742.69 - 10308.47 10870.86 11443.27 12047.4 12654.25 13263.47 13912.12 14572.82 / - 10 7 1 1 235.58 235.08 235.01 235.14 235.39 235.75 236.19 236.7 237.28 237.93 238.65 239.42 - 240.26 241.15 242.11 243.12 244.2 245.33 246.51 247.76 249.06 250.42 251.83 253.3 254.83 256.41 258.04 259.74 - 261.49 263.29 265.15 267.06 269.03 271.06 273.14 275.27 / - 10 7 2 1 235.48 234.97 234.89 235.02 235.28 235.63 236.07 236.58 237.16 237.81 238.52 239.3 - 240.14 241.03 241.99 243 244.08 245.21 246.39 247.64 248.94 250.3 251.71 253.18 254.71 256.29 257.93 259.63 - 261.38 263.18 265.04 266.96 268.93 270.95 273.04 275.17 / - 10 7 3 1 235.3 234.77 234.69 234.81 235.06 235.41 235.85 236.36 236.94 237.59 238.3 239.08 - 239.91 240.81 241.77 242.78 243.85 244.99 246.17 247.42 248.72 250.08 251.5 252.97 254.5 256.08 257.73 259.42 - 261.17 262.98 264.84 266.76 268.74 270.77 272.85 274.99 / - 10 7 4 1 234.96 234.4 234.31 234.42 234.66 235.01 235.44 235.95 236.53 237.18 237.89 238.67 - 239.5 240.4 241.36 242.37 243.45 244.58 245.77 247.02 248.33 249.69 251.11 252.58 254.11 255.7 257.35 259.05 - 260.8 262.61 264.48 266.41 268.38 270.42 272.51 274.65 / - 10 7 5 1 234.32 233.71 233.58 233.68 233.91 234.26 234.68 235.19 235.77 236.41 237.13 237.9 - 238.74 239.64 240.6 241.62 242.69 243.83 245.02 246.28 247.59 248.95 250.38 251.86 253.4 254.99 256.64 258.35 - 260.12 261.94 263.81 265.75 267.74 269.78 271.88 274.04 / - 10 7 6 1 233 232.24 232.04 232.09 232.29 232.61 233.02 233.52 234.09 234.73 235.44 236.21 - 237.05 237.96 238.92 239.95 241.03 242.18 243.38 244.65 245.97 247.35 248.79 250.29 251.84 253.46 255.13 256.86 - 258.64 260.48 262.38 264.34 266.35 268.43 270.55 272.74 / - 10 7 7 1 228.96 226.83 226.3 226.15 226.19 226.44 226.81 227.29 227.86 228.51 229.24 230.04 - 230.92 231.87 232.88 233.96 235.11 236.32 237.6 238.94 240.3 241.77 243.3 244.89 246.54 248.25 250.03 251.86 - 253.76 255.71 257.73 259.8 261.94 264.13 266.38 268.69 / - 10 7 8 1 219.04 211.96 210.9 210.53 210.49 210.69 211.08 211.61 212.27 213.01 213.88 214.84 - 215.89 217.03 218.26 219.56 220.95 222.41 223.94 225.52 227.2 228.95 230.77 232.66 234.62 236.63 238.72 240.87 - 243.09 245.38 247.71 250.11 252.58 255.11 257.7 260.35 / - 10 7 9 1 193.24 182.23 180.81 180.32 180.36 180.75 181.4 182.28 183.34 184.56 185.93 187.4 - 189.03 190.78 192.64 194.56 196.62 198.78 200.99 203.32 205.74 208.2 210.77 213.42 216.11 218.91 221.78 224.68 - 227.68 230.71 233.83 236.98 240.22 243.52 246.85 250.25 / - 10 7 10 1 149.15 141.84 140.88 141.03 141.73 142.83 144.25 145.93 147.83 149.93 152.21 154.66 - 157.31 160.06 162.96 166.06 169.19 172.43 175.87 179.31 182.82 186.42 190.37 194.12 197.95 201.84 205.8 209.81 - 214.28 218.42 222.61 226.86 231.19 235.6 240.51 244.93 / - 10 7 11 1 106.63 105.48 106.53 108.36 110.66 113.25 116.08 119.11 122.29 125.68 129.22 132.92 - 136.69 140.66 144.76 148.99 153.34 157.79 162.22 166.87 171.64 176.52 181.5 186.33 191.47 196.71 201.75 207.14 - 212.63 217.85 223.45 228.78 234.52 239.96 245.85 251.39 / - 10 7 12 1 85.56 88.11 91.06 94.45 98.05 101.79 105.64 109.62 113.75 118.03 122.46 127.03 - 131.76 136.63 141.65 146.8 152.09 157.5 163.03 169.1 175.57 181.92 188.32 194.7 201.16 207.76 214.37 221.09 - 227.9 234.8 241.8 248.89 256.08 263.36 270.68 278.09 / - 10 7 13 1 80.31 84.16 87.91 91.84 96.09 100.7 105.6 110.77 116.18 121.84 127.72 133.82 - 140.13 146.65 153.37 160.29 167.4 174.66 182.02 189.52 197.15 204.93 212.85 220.91 229.1 237.43 245.89 254.48 - 263.19 272.63 282.52 292.78 302.64 312.46 322.61 332.77 / - 10 7 14 1 75.99 81.69 86.95 92.41 98.29 104.66 111.47 118.73 126.42 134.51 142.94 151.7 - 160.77 170.13 179.77 189.69 199.87 210.32 221.02 231.97 243.17 254.6 266.27 278.09 290.05 302.16 314.43 326.89 - 339.53 352.36 365.37 378.58 391.97 405.55 419.33 433.76 / - 10 7 15 1 72.65 80.33 88.59 97.43 106.88 117.03 127.88 139.4 151.55 164.27 177.47 191.18 - 205.34 219.94 234.96 250.36 266.15 282.33 298.9 315.87 333.24 351.02 369.2 387.8 406.8 426.15 445.77 465.59 - 485.72 506.18 526.99 548.16 569.71 591.65 613.98 636.74 / - 10 7 16 1 72.13 84.38 100.19 116.94 134.44 152.51 171.04 191.34 210.87 232.69 255.25 277.85 - 300.21 324.85 349.81 375.68 402.32 429.67 457.23 484.77 514.32 544.62 575.68 607.42 639.8 672.92 706.99 741.83 - 777.39 812.66 849.74 888.66 928.8 969.43 1010.26 1051.35 / - 10 7 17 1 77.07 105.27 134.25 163.36 193.04 223.92 256.33 290.42 325.84 362.43 402.13 441.56 - 484.45 528.55 574.28 619.23 667.75 718.09 769.96 824.15 879.59 937.42 996.55 1056.87 1118.52 1181.98 1243.39 1299.32 - 1353.01 1408.03 1463.06 1521.13 1580.52 1639.71 1703.12 1764.39 / - 10 7 18 1 100.97 147.45 196.23 247.3 300.43 356.58 416.33 479.6 546.95 618.12 692.53 771.38 - 854.61 942.61 1034.37 1129.15 1225.7 1315.84 1403.46 1494.83 1586.83 1680.99 1779.67 1878.72 1978.73 2080.09 2184.05 2291.18 - 2395.01 2504.72 2615.6 2727.91 2842.04 2960.49 3077.67 3202.65 / - 10 7 19 1 141.1 216.98 299.23 392.73 494.8 605.8 724.95 855.97 997.16 1146.88 1300.49 1440.37 - 1592.77 1747.84 1915.83 2082.45 2256.39 2442.71 2630.65 2818.32 3012.29 3215.59 3424.32 3636.5 3857.65 4079.21 4307.39 4537.98 - 4778.41 5019.67 5268.56 5511.38 5767.97 6029.96 6293.89 6565.35 / - 10 7 20 1 207.54 328.38 459.5 646.21 858.41 1095.29 1345.79 1600.68 1869.67 2149.46 2447.38 2765 - 3105.35 3439.13 3816.18 4181.24 4562.38 4960.4 5414.1 5840.2 6288.63 6745.06 7228.86 7724.85 8230.79 8749.63 9294.03 9818.26 - 10373.51 10962.93 11544.24 12157.71 12774.28 13393.19 14051.39 14721.69 / - 10 8 1 1 237.7 237.06 236.94 237.03 237.27 237.61 238.04 238.55 239.12 239.77 240.48 241.25 - 242.09 242.98 243.94 244.95 246.02 247.15 248.34 249.59 250.89 252.25 253.67 255.14 256.67 258.26 259.9 261.6 - 263.35 265.16 267.03 268.95 270.93 272.96 275.05 277.19 / - 10 8 2 1 237.6 236.95 236.82 236.92 237.15 237.49 237.92 238.42 239 239.64 240.35 241.13 - 241.96 242.86 243.81 244.83 245.9 247.03 248.22 249.47 250.77 252.13 253.55 255.02 256.55 258.14 259.78 261.48 - 263.24 265.05 266.92 268.84 270.82 272.85 274.94 277.09 / - 10 8 3 1 237.41 236.75 236.61 236.7 236.93 237.27 237.69 238.2 238.77 239.42 240.12 240.9 - 241.73 242.63 243.58 244.6 245.67 246.8 247.99 249.24 250.55 251.91 253.33 254.8 256.34 257.92 259.57 261.27 - 263.03 264.84 266.71 268.64 270.62 272.65 274.75 276.9 / - 10 8 4 1 237.07 236.37 236.21 236.29 236.52 236.85 237.27 237.78 238.35 238.99 239.7 240.47 - 241.31 242.2 243.16 244.18 245.25 246.38 247.58 248.83 250.13 251.5 252.92 254.4 255.93 257.53 259.17 260.88 - 262.64 264.46 266.33 268.26 270.25 272.29 274.39 276.55 / - 10 8 5 1 236.4 235.65 235.46 235.53 235.74 236.07 236.49 236.99 237.56 238.2 238.91 239.68 - 240.52 241.41 242.37 243.39 244.47 245.6 246.8 248.05 249.37 250.74 252.16 253.65 255.19 256.79 258.45 260.16 - 261.93 263.76 265.64 267.58 269.58 271.63 273.74 275.9 / - 10 8 6 1 234.97 234.02 233.72 233.72 233.88 234.18 234.57 235.05 235.61 236.25 236.95 237.72 - 238.56 239.46 240.43 241.45 242.54 243.69 244.9 246.17 247.5 248.88 250.33 251.84 253.4 255.02 256.7 258.44 - 260.24 262.09 264.01 265.98 268 270.09 272.23 274.43 / - 10 8 7 1 230.57 228.07 227.31 227.12 227.17 227.39 227.75 228.21 228.77 229.41 230.14 230.95 - 231.83 232.78 233.8 234.89 236.05 237.27 238.56 239.92 241.33 242.82 244.36 245.97 247.64 249.37 251.17 253.02 - 254.94 256.91 258.95 261.05 263.2 265.42 267.69 270.03 / - 10 8 8 1 220.22 212.23 211.11 210.71 210.66 210.86 211.24 211.77 212.43 213.21 214.09 215.08 - 216.15 217.28 218.53 219.86 221.27 222.77 224.33 225.97 227.69 229.45 231.31 233.23 235.23 237.29 239.42 241.59 - 243.86 246.18 248.57 251.02 253.52 256.1 258.73 261.43 / - 10 8 9 1 193.88 181.86 180.47 180.01 180.07 180.49 181.18 182.09 183.18 184.41 185.81 187.35 - 189.01 190.76 192.66 194.67 196.73 198.94 201.24 203.58 206.05 208.6 211.19 213.89 216.66 219.46 222.37 225.3 - 228.35 231.46 234.6 237.84 241.14 244.47 247.88 251.33 / - 10 8 10 1 148.86 141.86 140.93 141.1 141.81 142.93 144.38 146.08 148 150.13 152.44 154.91 - 157.59 160.38 163.35 166.41 169.66 172.94 176.31 179.9 183.46 187.1 190.82 194.9 198.78 202.72 206.72 210.78 - 214.9 219.49 223.74 228.04 232.39 236.8 241.27 246.39 / - 10 8 11 1 106.81 105.68 106.74 108.64 110.97 113.58 116.44 119.49 122.73 126.15 129.67 133.39 - 137.26 141.26 145.4 149.67 153.94 158.43 163.02 167.72 172.54 177.46 182.26 187.36 192.56 197.58 202.94 208.39 - 213.6 219.21 224.53 230.25 236.06 241.56 247.51 253.11 / - 10 8 12 1 85.7 88.33 91.32 94.74 98.37 102.14 106.03 110.05 114.21 118.52 122.98 127.59 - 132.35 137.26 142.31 147.5 152.82 158.27 163.84 169.67 176.22 182.78 189.2 195.66 202.3 208.8 215.64 222.41 - 229.28 236.25 243.32 250.48 257.74 265.09 272.49 279.98 / - 10 8 13 1 80.39 84.36 88.17 92.15 96.42 101.05 105.98 111.17 116.62 122.31 128.23 134.36 - 140.71 147.26 154.02 160.98 168.13 175.43 182.85 190.39 198.07 205.9 213.87 221.98 230.22 238.61 247.12 255.77 - 264.53 273.42 283.39 293.8 303.88 313.96 324.06 334.22 / - 10 8 14 1 75.98 81.8 87.16 92.68 98.6 104.99 111.84 119.12 126.84 134.96 143.43 152.22 - 161.33 170.73 180.42 190.38 200.6 211.09 221.84 232.84 244.09 255.58 267.3 279.19 291.21 303.39 315.73 328.25 - 340.96 353.85 366.94 380.21 393.68 407.33 421.18 435.22 / - 10 8 15 1 72.65 80.4 88.73 97.64 107.14 117.32 128.2 139.75 151.92 164.68 177.92 191.66 - 205.87 220.51 235.57 251.04 266.88 283.11 299.73 316.74 334.14 351.96 370.17 388.8 407.85 427.26 446.96 466.87 - 487.08 507.62 528.5 549.75 571.36 593.36 615.76 638.58 / - 10 8 16 1 72.11 84.45 100.31 117.09 134.61 152.71 171.3 191.58 211.14 232.97 255.57 277.35 - 300.59 325.29 350.29 376.19 403.01 430.27 457.86 485.43 514.98 545.29 576.34 608.07 640.43 673.49 707.47 742.41 - 778.06 813.4 850.49 888.33 928.59 969.46 1010.7 1051.84 / - 10 8 17 1 77.01 105.22 134.27 163.43 193.17 224.44 256.49 290.57 325.98 362.74 402.2 442.71 - 484.47 528.59 574.3 619.23 667.66 717.86 769.68 823.62 879.4 936.74 995.95 1056.29 1117.54 1180.8 1243.17 1300.51 - 1355.97 1413.34 1470.21 1529.99 1591.28 1652.45 1718.34 1780.43 / - 10 8 18 1 100.84 147.33 196.11 247.32 300.53 356.69 416.43 479.69 546.82 617.86 692.11 770.71 - 853.66 941.36 1032.84 1127.56 1224.45 1316.46 1403.68 1496.33 1589.67 1685.15 1785.03 1885.31 1986.65 2089.48 2194.91 2303.47 - 2408.95 2520.29 2632.75 2746.74 2862.62 2982.87 3101.92 3228.47 / - 10 8 19 1 140.9 216.81 298.74 392.68 494.81 604.32 724.59 853.81 992.79 1145.44 1299.09 1439.64 - 1594.3 1748.61 1917.52 2085.11 2260.11 2447.66 2636.98 2825.84 3022.04 3224.65 3435.68 3650.24 3874.08 4099.77 4332.56 4567.77 - 4812.63 5058.57 5311.94 5559.42 5820.41 6086.53 6355.15 6630.98 / - 10 8 20 1 207.33 328.34 454 643.05 853.19 1094.4 1345.09 1595.34 1864.4 2152.6 2452.25 2771.84 - 3091.54 3450.2 3799.08 4199.09 4581.28 4982.12 5438.96 5868.27 6319.86 6775.77 7264.91 7766.45 8277.14 8802.99 9356.56 9890.27 - 10454.49 11033.9 11644.75 12257.25 12895.45 13524.98 14179.25 14875.09 / - 10 9 1 1 239.8 239.04 238.86 238.93 239.15 239.47 239.89 240.39 240.96 241.6 242.31 243.08 - 243.91 244.8 245.76 246.77 247.85 248.98 250.17 251.42 252.72 254.08 255.5 256.98 258.51 260.1 261.75 263.45 - 265.21 267.03 268.9 270.83 272.81 274.85 276.95 279.1 / - 10 9 2 1 239.7 238.93 238.74 238.81 239.02 239.35 239.77 240.26 240.83 241.47 242.18 242.95 - 243.78 244.67 245.63 246.64 247.72 248.85 250.04 251.29 252.59 253.96 255.38 256.85 258.39 259.98 261.63 263.33 - 265.09 266.91 268.78 270.71 272.7 274.74 276.84 278.99 / - 10 9 3 1 239.51 238.72 238.52 238.58 238.79 239.12 239.53 240.03 240.6 241.24 241.94 242.71 - 243.54 244.44 245.39 246.41 247.48 248.61 249.8 251.05 252.36 253.72 255.15 256.63 258.16 259.75 261.4 263.11 - 264.87 266.69 268.57 270.5 272.49 274.53 276.63 278.79 / - 10 9 4 1 239.16 238.33 238.12 238.16 238.37 238.69 239.1 239.59 240.16 240.8 241.5 242.27 - 243.11 244 244.95 245.97 247.04 248.18 249.37 250.62 251.93 253.3 254.72 256.2 257.74 259.34 260.99 262.7 - 264.47 266.29 268.17 270.11 272.11 274.15 276.26 278.42 / - 10 9 5 1 238.47 237.59 237.34 237.37 237.57 237.88 238.29 238.78 239.34 239.98 240.68 241.45 - 242.28 243.18 244.14 245.15 246.23 247.37 248.57 249.82 251.13 252.51 253.94 255.42 256.97 258.57 260.24 261.95 - 263.73 265.56 267.45 269.4 271.4 273.46 275.58 277.75 / - 10 9 6 1 236.88 235.74 235.35 235.28 235.41 235.68 236.05 236.52 237.07 237.7 238.4 239.16 - 240 240.9 241.87 242.89 243.98 245.14 246.35 247.62 248.96 250.35 251.81 253.32 254.9 256.53 258.22 259.97 - 261.78 263.65 265.57 267.56 269.6 271.7 273.86 276.07 / - 10 9 7 1 232.13 229.04 228.22 227.99 228.02 228.22 228.57 229.03 229.58 230.23 230.96 231.77 - 232.66 233.62 234.65 235.75 236.92 238.16 239.46 240.83 242.27 243.77 245.33 246.96 248.61 250.36 252.18 254.05 - 255.99 257.99 260.06 262.18 264.36 266.6 268.91 271.27 / - 10 9 8 1 221.35 212.49 211.26 210.8 210.72 210.91 211.28 211.81 212.48 213.27 214.16 215.16 - 216.26 217.45 218.72 220.08 221.49 223.01 224.62 226.29 228.05 229.87 231.77 233.71 235.75 237.85 240.03 242.27 - 244.55 246.92 249.36 251.85 254.41 257.04 259.71 262.45 / - 10 9 9 1 194.1 181.46 180.1 179.66 179.77 180.23 180.94 181.88 182.99 184.28 185.72 187.27 - 188.98 190.78 192.73 194.74 196.89 199.14 201.45 203.88 206.41 208.97 211.65 214.37 217.2 220.11 223.04 226.07 - 229.17 232.29 235.51 238.75 242.09 245.49 248.92 252.45 / - 10 9 10 1 148.33 141.88 140.98 141.15 141.89 143.06 144.5 146.22 148.17 150.31 152.65 155.2 - 157.88 160.7 163.71 166.84 170.05 173.35 176.87 180.38 184.1 187.79 191.55 195.39 199.61 203.59 207.65 211.76 - 215.93 220.16 224.88 229.23 233.64 238.1 242.61 247.17 / - 10 9 11 1 106.9 105.89 106.97 108.92 111.28 113.91 116.79 119.87 123.13 126.57 130.17 133.92 - 137.82 141.78 145.95 150.24 154.65 159.19 163.82 168.56 173.24 178.2 183.25 188.4 193.39 198.72 204.13 209.33 - 214.9 220.57 225.95 231.73 237.23 243.16 248.77 254.85 / - 10 9 12 1 85.86 88.58 91.61 95.05 98.7 102.5 106.42 110.47 114.67 119.01 123.5 128.15 - 132.94 137.88 142.97 148.19 153.55 159.04 164.65 170.38 176.82 183.53 190.08 196.58 203.3 210 216.64 223.46 - 230.67 237.7 244.84 252.07 259.03 266.43 273.94 281.48 / - 10 9 13 1 80.47 84.58 88.46 92.46 96.75 101.4 106.36 111.58 117.06 122.79 128.74 134.91 - 141.29 147.88 154.68 161.67 168.86 176.21 183.66 191.25 198.98 206.86 214.88 223.03 231.33 239.77 248.34 257.04 - 265.87 274.82 284.21 294.74 305.02 315.25 325.61 335.93 / - 10 9 14 1 75.99 81.94 87.39 92.96 98.91 105.33 112.21 119.51 127.27 135.42 143.92 152.75 - 161.89 171.33 181.05 191.05 201.32 211.85 222.64 233.68 244.98 256.53 268.31 280.26 292.35 304.59 317 329.58 - 342.36 355.32 368.47 381.82 395.36 409.09 423.01 437.13 / - 10 9 15 1 72.67 80.49 88.9 97.86 107.39 117.61 128.51 140.09 152.29 165.08 178.36 192.13 - 206.38 221.06 236.16 251.68 267.58 283.86 300.52 317.57 335.01 352.85 371.1 389.76 408.84 428.3 448.07 468.07 - 488.37 508.99 529.94 551.26 572.94 595.01 617.47 640.34 / - 10 9 16 1 72.1 84.5 100.41 117.22 134.78 152.9 172.17 191.81 211.6 233.23 255.85 277.67 - 300.92 325.68 350.77 376.64 403.49 430.81 457.75 486.03 515.59 545.89 576.93 608.66 640.98 673.98 707.87 742.74 - 778.5 813.93 851.08 888.93 928.09 969.1 1010.01 1051.77 / - 10 9 17 1 76.96 105.17 134.45 163.49 193.27 224.58 256.63 290.71 326.09 363.61 402.24 442.23 - 484.44 528.8 574.26 619.16 667.51 717.58 769.23 823 878.82 935.78 995.07 1055.5 1116.24 1179.88 1242.51 1301.57 - 1359.2 1417.81 1477.43 1538.64 1601.38 1663.78 1730.59 1794.18 / - 10 9 18 1 100.7 147.3 196.04 247.35 300.61 356.87 416.5 479.68 546.68 617.55 691.66 770.01 - 852.64 940.02 1031.2 1125.7 1222.96 1316.11 1403.46 1496.25 1590.53 1687.56 1789.3 1891.55 1994.69 2099.23 2206.33 2316.43 - 2423.68 2536.66 2650.91 2766.66 2884.37 3006.57 3127.63 3255.83 / - 10 9 19 1 140.7 216.64 298.24 391.73 493.63 604.21 722.26 852.17 991.66 1139.48 1292.45 1438.85 - 1594.21 1749.37 1919.22 2089.47 2263.9 2443.93 2643.28 2833.55 3034.17 3234.13 3447.46 3664.38 3887.53 4117.8 4347.94 4591.8 - 4841.38 5086.06 5351 5603.52 5869.8 6140.65 6405.15 6695.51 / - 10 9 20 1 207.13 328.35 453.94 637.94 848.57 1087.14 1338.89 1590.67 1861.61 2155.92 2457.5 2779.07 - 3100.86 3461.96 3813.43 4216.2 4601.33 5005.19 5419.25 5898.1 6353.08 6812.72 7301.14 7808.15 8311.6 8855.56 9398.21 9955.62 - 10529.77 11119.99 11742.02 12365.79 13004.82 13657.14 14323.34 15015.28 / - 10 10 1 1 241.88 241.01 240.78 240.82 241.02 241.33 241.74 242.23 242.79 243.43 244.13 244.9 - 245.73 246.62 247.57 248.59 249.66 250.79 251.98 253.23 254.54 255.9 257.33 258.81 260.34 261.94 263.59 265.3 - 267.06 268.88 270.76 272.69 274.68 276.73 278.83 280.99 / - 10 10 2 1 241.78 240.89 240.66 240.69 240.89 241.2 241.61 242.1 242.66 243.3 244 244.77 - 245.6 246.49 247.44 248.45 249.53 250.66 251.85 253.1 254.41 255.77 257.2 258.68 260.21 261.81 263.46 265.17 - 266.93 268.76 270.64 272.57 274.56 276.61 278.72 280.88 / - 10 10 3 1 241.59 240.68 240.43 240.46 240.65 240.96 241.37 241.86 242.42 243.05 243.75 244.52 - 245.35 246.24 247.19 248.21 249.28 250.41 251.61 252.86 254.16 255.53 256.96 258.44 259.98 261.57 263.23 264.94 - 266.71 268.53 270.41 272.35 274.35 276.4 278.5 280.67 / - 10 10 4 1 241.22 240.28 240.01 240.03 240.21 240.52 240.92 241.41 241.97 242.6 243.3 244.07 - 244.89 245.79 246.74 247.76 248.83 249.96 251.16 252.41 253.72 255.09 256.52 258 259.54 261.14 262.8 264.52 - 266.29 268.12 270 271.95 273.95 276 278.12 280.29 / - 10 10 5 1 240.52 239.51 239.21 239.21 239.39 239.68 240.08 240.56 241.12 241.75 242.45 243.21 - 244.04 244.94 245.89 246.91 247.99 249.12 250.32 251.58 252.89 254.27 255.7 257.19 258.74 260.35 262.01 263.73 - 265.51 267.35 269.25 271.2 273.21 275.28 277.4 279.59 / - 10 10 6 1 238.72 237.38 236.89 236.76 236.85 237.09 237.44 237.89 238.43 239.05 239.74 240.5 - 241.34 242.24 243.2 244.23 245.33 246.48 247.7 248.98 250.33 251.73 253.19 254.72 256.3 257.94 259.65 261.41 - 263.23 265.11 267.05 269.05 271.11 273.22 275.39 277.62 / - 10 10 7 1 233.61 230.08 229.1 228.79 228.77 228.94 229.26 229.71 230.27 230.92 231.63 232.44 - 233.33 234.3 235.34 236.45 237.63 238.89 240.2 241.59 243.04 244.56 246.15 247.8 249.51 251.29 253.13 255.03 - 256.99 259.02 261.11 263.26 265.47 267.74 270.08 272.47 / - 10 10 8 1 222.41 212.53 211.22 210.73 210.63 210.81 211.19 211.73 212.41 213.21 214.13 215.15 - 216.27 217.45 218.75 220.14 221.62 223.18 224.81 226.5 228.29 230.16 232.1 234.11 236.19 238.32 240.54 242.83 - 245.18 247.6 250.07 252.62 255.23 257.9 260.64 263.43 / - 10 10 9 1 194.28 180.98 179.65 179.29 179.44 179.94 180.69 181.66 182.82 184.14 185.61 187.21 - 188.94 190.81 192.78 194.85 197.05 199.33 201.7 204.19 206.72 209.38 212.12 214.9 217.79 220.72 223.75 226.85 - 229.98 233.21 236.46 239.81 243.18 246.64 250.15 253.69 / - 10 10 10 1 147.99 141.8 141 141.21 141.99 143.15 144.64 146.39 148.36 150.54 152.9 155.44 - 158.15 161.06 164.06 167.23 170.46 173.87 177.32 180.98 184.61 188.48 192.29 196.17 200.13 204.48 208.58 212.74 - 216.97 221.25 225.59 230.44 234.9 239.41 243.98 248.6 / - 10 10 11 1 107.09 106.07 107.21 109.18 111.57 114.25 117.15 120.28 123.57 127.04 130.67 134.39 - 138.32 142.38 146.58 150.91 155.37 159.81 164.49 169.26 174.13 179.13 184.23 189.2 194.48 199.85 205.03 210.57 - 216.21 221.58 227.37 232.87 238.78 244.39 250.44 256.59 / - 10 10 12 1 86.03 88.85 91.91 95.36 99.04 102.87 106.82 110.9 115.13 119.5 124.03 128.71 - 133.54 138.51 143.63 148.89 154.28 159.81 165.46 171.23 177.42 184.2 190.86 197.5 204.23 211.03 217.9 224.78 - 231.76 238.84 246.02 253.3 260.69 268.16 275.74 283.36 / - 10 10 13 1 80.58 84.83 88.75 92.78 97.09 101.76 106.74 112 117.51 123.26 129.24 135.45 - 141.87 148.5 155.34 162.37 169.59 176.98 184.48 192.11 199.89 207.81 215.87 224.08 232.43 240.92 249.55 258.3 - 267.18 276.19 285.32 295.26 306.03 316.5 326.87 337.19 / - 10 10 14 1 76.03 82.1 87.63 93.24 99.22 105.67 112.57 119.91 127.68 135.86 144.4 153.27 - 162.44 171.92 181.68 191.71 202.02 212.59 223.42 234.5 245.84 257.43 269.27 281.3 293.45 305.76 318.23 330.89 - 343.72 356.75 369.97 383.39 397 410.8 424.79 438.99 / - 10 10 15 1 72.7 80.61 89.07 98.07 107.64 117.89 128.82 140.42 152.65 165.46 178.79 192.59 - 206.87 221.59 236.73 252.28 268.23 284.56 301.27 318.36 335.83 353.71 371.98 390.66 409.76 429.26 449.08 469.17 - 489.55 510.26 531.29 552.68 574.43 596.55 619.07 641.99 / - 10 10 16 1 72.11 84.57 100.5 117.35 134.93 153.08 172.11 192.03 211.85 233.47 256.1 278.87 - 301.22 326 351.28 377.04 403.91 431.27 459.26 486.55 516.12 546.42 577.44 609.15 641.45 674.37 708.18 742.94 - 778.63 814.18 851.41 889.3 927.88 967.75 1009.46 1051.57 / - 10 10 17 1 76.9 105.12 134.44 163.54 193.74 224.68 256.95 290.81 326.17 364.02 402.23 443.37 - 484.35 528.67 574.14 619.02 667.29 717.2 768.68 822.26 877.88 934.64 993.86 1054.4 1115.25 1177.9 1241.23 1302.1 - 1361.59 1421.96 1482.8 1545.59 1609.77 1673.68 1741.91 1807.34 / - 10 10 18 1 100.57 147.32 195.96 247.32 300.73 356.94 416.55 479.65 546.51 617.18 691.17 769.26 - 851.57 938.6 1029.43 1123.67 1219.97 1314.8 1404.3 1496.04 1591.91 1691.09 1790.05 1894.26 1999.07 2105.72 2213.8 2328.11 - 2437.86 2553.1 2669.69 2787.62 2907.46 3028.66 3155.04 3285.02 / - 10 10 19 1 140.5 216.48 297.43 390.78 493.63 602.72 721.87 851.45 990.5 1137.92 1290.88 1437.99 - 1594.09 1750.14 1923.36 2093.35 2267.77 2449.11 2649.79 2841.59 3043.76 3245.41 3458.89 3679.08 3904.1 4136.42 4368.85 4614.66 - 4866.42 5114.21 5383.68 5641.75 5913.94 6190.49 6460.27 6756.33 / - 10 10 20 1 206.93 328.4 453.94 634.02 839.91 1079.92 1330.95 1583.84 1859.12 2147.53 2449.59 2771.32 - 3110.92 3474.43 3828.79 4234.54 4622.69 5029.81 5447.36 5929.97 6388.58 6852.2 7340.15 7847.8 8363.58 8896.99 9458.95 10010.11 - 10600.47 11197.52 11816.88 12462.65 13114.23 13785.57 14462.56 15168.29 / - 10 11 1 1 243.93 242.96 242.68 242.7 242.88 243.18 243.58 244.06 244.62 245.25 245.95 246.71 - 247.54 248.43 249.38 250.4 251.47 252.6 253.79 255.04 256.35 257.72 259.14 260.62 262.16 263.76 265.42 267.13 - 268.9 270.72 272.61 274.55 276.54 278.6 280.71 282.88 / - 10 11 2 1 243.83 242.84 242.56 242.57 242.75 243.05 243.44 243.92 244.48 245.11 245.81 246.57 - 247.4 248.29 249.24 250.26 251.33 252.46 253.65 254.9 256.21 257.58 259 260.49 262.03 263.63 265.28 267 - 268.77 270.59 272.48 274.42 276.42 278.47 280.59 282.75 / - 10 11 3 1 243.63 242.62 242.33 242.33 242.5 242.8 243.19 243.67 244.23 244.86 245.56 246.32 - 247.15 248.04 248.99 250 251.07 252.21 253.4 254.65 255.96 257.33 258.75 260.24 261.78 263.38 265.04 266.75 - 268.53 270.36 272.24 274.19 276.19 278.25 280.36 282.53 / - 10 11 4 1 243.26 242.21 241.89 241.88 242.05 242.34 242.73 243.21 243.76 244.39 245.09 245.85 - 246.68 247.57 248.52 249.53 250.6 251.74 252.93 254.18 255.5 256.87 258.3 259.78 261.33 262.93 264.59 266.31 - 268.09 269.92 271.82 273.76 275.77 277.83 279.96 282.13 / - 10 11 5 1 242.54 241.42 241.06 241.03 241.18 241.46 241.84 242.31 242.86 243.49 244.18 244.94 - 245.77 246.66 247.61 248.63 249.71 250.84 252.04 253.3 254.61 255.99 257.43 258.92 260.47 262.08 263.75 265.48 - 267.27 269.11 271.01 272.97 274.99 277.06 279.2 281.39 / - 10 11 6 1 240.48 238.92 238.32 238.13 238.18 238.37 238.71 239.15 239.68 240.29 240.98 241.75 - 242.58 243.48 244.45 245.48 246.58 247.74 248.97 250.26 251.61 253.02 254.49 256.03 257.62 259.28 260.99 262.77 - 264.61 266.5 268.46 270.47 272.55 274.68 276.87 279.12 / - 10 11 7 1 235 230.81 229.75 229.39 229.34 229.5 229.81 230.24 230.79 231.44 232.17 232.99 - 233.89 234.87 235.92 237.05 238.25 239.52 240.86 242.26 243.74 245.28 246.89 248.56 250.3 252.1 253.97 255.9 - 257.9 259.95 262.07 264.22 266.46 268.77 271.13 273.56 / - 10 11 8 1 222.9 212.54 211.11 210.51 210.4 210.57 210.95 211.5 212.18 212.99 213.92 214.97 - 216.11 217.35 218.68 220.11 221.62 223.18 224.86 226.61 228.45 230.36 232.31 234.37 236.5 238.71 240.98 243.29 - 245.7 248.17 250.71 253.32 255.97 258.7 261.49 264.35 / - 10 11 9 1 194.58 180.44 179.23 178.92 179.11 179.65 180.44 181.46 182.64 183.99 185.5 187.14 - 188.92 190.82 192.83 194.95 197.08 199.4 201.82 204.32 206.92 209.63 212.39 215.23 218.17 221.14 224.23 227.34 - 230.56 233.85 237.16 240.57 244 247.52 251.07 254.7 / - 10 11 10 1 147.8 141.84 141.05 141.27 142.07 143.25 144.76 146.53 148.53 150.73 153.11 155.73 - 158.47 161.36 164.46 167.61 170.94 174.32 177.87 181.46 185.27 189.03 192.88 196.96 200.96 205.04 209.52 213.73 - 218.01 222.35 226.74 231.19 236.17 240.74 245.36 250.04 / - 10 11 11 1 107.18 106.27 107.45 109.45 111.89 114.58 117.53 120.66 123.98 127.46 131.11 134.92 - 138.88 142.98 147.13 151.48 155.96 160.57 165.29 170.1 175.02 179.87 185 190.23 195.56 200.72 206.22 211.82 - 217.19 222.94 228.43 234.35 240.32 246 252.12 257.91 / - 10 11 12 1 86.23 89.13 92.21 95.69 99.39 103.24 107.23 111.34 115.6 120.01 124.56 129.27 - 134.13 139.14 144.29 149.59 155.02 160.58 166.26 172.07 178 184.84 191.63 198.4 205.12 212.07 218.97 225.82 - 232.85 240.28 247.54 254.89 261.97 269.5 277.13 284.86 / - 10 11 13 1 80.72 85.09 89.04 93.11 97.44 102.13 107.14 112.42 117.96 123.74 129.75 135.99 - 142.45 149.11 155.98 163.06 170.32 177.75 185.29 192.97 200.78 208.75 216.86 225.12 233.52 242.06 250.74 259.54 - 268.48 277.55 286.74 296.05 306.55 317.21 327.9 338.49 / - 10 11 14 1 76.1 82.29 87.87 93.53 99.54 106.01 112.94 120.3 128.1 136.3 144.87 153.78 - 162.99 172.5 182.29 192.36 202.7 213.31 224.17 235.3 246.67 258.3 270.18 282.27 294.51 306.89 319.42 332.14 - 345.05 358.14 371.43 384.91 398.59 412.46 426.53 440.79 / - 10 11 15 1 72.76 80.75 89.25 98.3 107.9 118.17 129.13 140.74 152.99 165.83 179.21 193.03 - 207.34 222.09 237.26 252.84 268.83 285.21 301.96 319.09 336.6 354.5 372.8 391.49 410.6 430.12 449.96 470.13 - 490.6 511.39 532.51 553.97 575.78 597.97 620.54 643.52 / - 10 11 16 1 72.14 84.65 100.6 117.69 135.08 153.25 172.88 192.23 212.9 233.68 256.31 279.44 - 301.47 326.26 351.58 377.37 404.25 431.62 459.78 486.98 516.56 546.85 577.85 609.54 641.81 674.66 708.36 743 - 778.57 814.05 851.39 889.38 928 967.25 1008.49 1050.17 / - 10 11 17 1 76.84 105.07 134.42 163.85 193.85 224.75 257.55 290.87 326.2 364.01 402.16 443.25 - 484.18 528.44 573.91 618.77 666.97 716.72 768.21 821.4 876.8 933.32 992.31 1052.91 1113.98 1176.08 1239.42 1299.58 - 1355.48 1412.87 1470.19 1529.17 1589.99 1649.67 1715.13 1775.63 / - 10 11 18 1 100.43 147.18 195.8 247.27 300.76 356.97 416.53 479.62 546.29 616.78 690.63 768.45 - 850.43 937.08 1027.53 1121.46 1217.67 1313.24 1403.35 1495.7 1592.54 1692.04 1791.73 1896.74 2002.33 2109.86 2218.83 2334.64 - 2447.79 2564.07 2683.62 2804.79 2927.8 3052.07 3181.39 3314.47 / - 10 11 19 1 140.31 216.34 296.76 390.75 492.41 602.69 721.48 849.58 988.92 1136.27 1289.33 1437.15 - 1587.65 1750.96 1915.87 2096.25 2271.88 2454.6 2641.7 2850.13 3053.86 3257.43 3472.64 3694.04 3921.66 4156.18 4391.05 4633.28 - 4892.89 5143.18 5407.79 5675.92 5951.61 6232.89 6508.2 6801.16 / - 10 11 20 1 206.75 328.53 454.24 627.9 834.62 1072.76 1323.18 1584.47 1856.87 2143.15 2455.46 2779.43 - 3121.83 3462.3 3845.34 4223.63 4645.77 5056.25 5477.57 5921.39 6426.9 6894.68 7386.7 7893.78 8414.21 8957.45 9524.31 10090.94 - 10657.41 11278.25 11902.93 12542.68 13211.95 13889.76 14559.73 15290.49 / - 10 12 1 1 245.93 244.89 244.57 244.56 244.73 245.02 245.41 245.88 246.44 247.06 247.76 248.52 - 249.34 250.23 251.18 252.19 253.27 254.4 255.59 256.84 258.15 259.52 260.94 262.43 263.97 265.57 267.23 268.95 - 270.72 272.55 274.44 276.39 278.39 280.45 282.57 284.74 / - 10 12 2 1 245.82 244.76 244.44 244.43 244.59 244.88 245.27 245.74 246.29 246.92 247.61 248.37 - 249.2 250.09 251.04 252.05 253.12 254.25 255.44 256.7 258.01 259.37 260.8 262.29 263.83 265.43 267.09 268.81 - 270.58 272.42 274.3 276.25 278.26 280.32 282.44 284.61 / - 10 12 3 1 245.62 244.54 244.2 244.18 244.34 244.62 245.01 245.48 246.03 246.66 247.35 248.11 - 248.93 249.82 250.77 251.78 252.86 253.99 255.18 256.43 257.74 259.11 260.54 262.03 263.57 265.18 266.84 268.56 - 270.33 272.17 274.06 276.01 278.02 280.08 282.2 284.38 / - 10 12 4 1 245.24 244.11 243.76 243.72 243.87 244.15 244.53 245 245.55 246.17 246.86 247.62 - 248.44 249.33 250.28 251.29 252.37 253.5 254.69 255.95 257.26 258.63 260.06 261.55 263.1 264.71 266.37 268.1 - 269.88 271.72 273.61 275.57 277.58 279.65 281.78 283.96 / - 10 12 5 1 244.48 243.24 242.83 242.76 242.88 243.14 243.51 243.97 244.51 245.13 245.82 246.58 - 247.4 248.29 249.24 250.25 251.33 252.47 253.66 254.92 256.24 257.62 259.06 260.56 262.11 263.73 265.4 267.14 - 268.93 270.78 272.69 274.66 276.68 278.77 280.91 283.11 / - 10 12 6 1 242.13 240.36 239.57 239.33 239.35 239.53 239.85 240.27 240.79 241.4 242.09 242.85 - 243.69 244.59 245.56 246.6 247.7 248.87 250.11 251.4 252.76 254.18 255.67 257.21 258.82 260.49 262.22 263.99 - 265.84 267.76 269.73 271.76 273.86 276.01 278.22 280.5 / - 10 12 7 1 236.26 231.38 230.24 229.83 229.75 229.88 230.18 230.61 231.16 231.81 232.55 233.38 - 234.29 235.28 236.35 237.49 238.71 240 241.36 242.79 244.29 245.86 247.49 249.2 250.96 252.8 254.7 256.62 - 258.64 260.73 262.89 265.1 267.38 269.73 272.13 274.59 / - 10 12 8 1 223.77 212.29 210.78 210.19 210.04 210.19 210.56 211.11 211.81 212.64 213.59 214.66 - 215.83 217.1 218.47 219.9 221.45 223.08 224.8 226.6 228.46 230.41 232.44 234.55 236.74 238.96 241.29 243.68 - 246.15 248.68 251.25 253.92 256.65 259.44 262.28 265.2 / - 10 12 9 1 194.44 180.1 178.89 178.59 178.8 179.35 180.16 181.19 182.41 183.81 185.35 187.04 - 188.79 190.73 192.79 194.95 197.22 199.6 202.06 204.63 207.28 210.02 212.84 215.75 218.74 221.8 224.92 228.14 - 231.41 234.77 238.15 241.63 245.13 248.73 252.36 256.07 / - 10 12 10 1 147.59 141.87 141.07 141.32 142.15 143.38 144.91 146.7 148.73 150.95 153.37 155.97 - 158.74 161.72 164.78 167.97 171.36 174.78 178.37 182.07 185.79 189.73 193.62 197.59 201.81 205.93 210.11 214.73 - 219.06 223.45 227.9 232.4 236.97 242.08 246.76 251.5 / - 10 12 11 1 107.37 106.5 107.7 109.74 112.2 114.92 117.89 121.05 124.39 127.93 131.62 135.4 - 139.38 143.5 147.76 152.16 156.68 161.32 165.94 170.8 175.75 180.8 185.98 191.26 196.4 201.86 207.42 212.76 - 218.49 224.31 229.86 235.84 241.51 247.61 253.4 259.65 / - 10 12 12 1 86.47 89.43 92.53 96.02 99.75 103.63 107.65 111.8 116.08 120.52 125.11 129.85 - 134.74 139.78 144.96 150.29 155.75 161.35 167.07 172.91 178.88 185.45 192.32 199.21 206.07 213.03 220.04 227.12 - 234.21 241.41 248.71 256.11 263.62 271.22 278.93 286.74 / - 10 12 13 1 80.9 85.36 89.35 93.45 97.8 102.51 107.54 112.85 118.41 124.22 130.27 136.54 - 143.02 149.72 156.62 163.73 171.04 178.51 186.1 193.82 201.68 209.69 217.84 226.14 234.59 243.18 251.9 260.77 - 269.76 278.88 288.13 297.5 307 318.1 328.97 339.82 / - 10 12 14 1 76.21 82.48 88.13 93.82 99.86 106.36 113.31 120.7 128.52 136.74 145.34 154.27 - 163.51 173.06 182.9 193 203.37 214.01 224.91 236.06 247.46 259.12 271.03 283.18 295.49 307.95 320.55 333.34 - 346.31 359.47 372.82 386.37 400.12 414.06 428.2 442.53 / - 10 12 15 1 72.86 80.89 89.44 98.52 108.16 118.45 129.43 141.06 153.33 166.18 179.6 193.46 - 207.79 222.56 237.75 253.35 269.36 285.78 302.58 319.75 337.28 355.21 373.52 392.23 411.34 430.86 450.7 470.9 - 491.47 512.35 533.55 555.08 576.96 599.21 621.84 644.86 / - 10 12 16 1 72.2 84.73 100.7 117.89 135.22 153.41 173.04 192.41 212.54 233.86 256.49 279.87 - 301.66 326.45 351.79 377.61 404.49 431.86 460.12 487.28 516.87 547.14 578.12 609.79 642.03 674.82 708.43 742.95 - 778.39 813.74 850.96 889.04 927.76 967.08 1006.99 1048.9 / - 10 12 17 1 76.78 105.02 134.39 163.84 193.89 224.79 257.58 290.86 326.17 363.94 402.03 443.03 - 483.9 528.09 573.55 618.99 666.55 716.17 767.48 820.46 875.62 931.87 990.58 1050.95 1112.38 1174.55 1238 1300.86 - 1355.3 1413.98 1471.84 1532.08 1593.33 1657.63 1721.37 1782.88 / - 10 12 18 1 100.3 147.17 195.71 247.2 300.76 356.98 416.46 479.49 546 616.3 690.02 767.63 - 849.27 935.51 1025.53 1119.09 1215.24 1311.09 1401.79 1494.72 1592.15 1692.28 1792.85 1898.67 2005.14 2113.65 2223.56 2340.59 - 2457.75 2572.11 2692.87 2815.38 2940.45 3067.35 3199.68 3336.32 / - 10 12 19 1 140.12 216.23 296.43 389.84 492.37 601.06 719.22 847.23 985.78 1134.56 1287.74 1436.31 - 1587.63 1751.91 1917.83 2099.31 2276.38 2460.51 2649.18 2859.21 3064.74 3270.31 3485.83 3710.09 3940.49 4172.33 4414.68 4659.44 - 4921.21 5174.17 5441.36 5704.81 5991.27 6275.25 6553.56 6849.64 / - 10 12 20 1 206.59 328.74 454.95 623.55 830.19 1065.76 1316.29 1576.47 1852.41 2147.45 2461.98 2788.47 - 3115.05 3477.17 3863.26 4244.89 4635.91 5085.03 5510.25 5958.11 6468.56 6940.66 7437.12 7949 8469.32 9017.3 9579.99 10164.33 - 10738.82 11345.23 11984.15 12641.45 13305.39 14002.08 14679.37 15401.15 / - 10 13 1 1 247.87 246.78 246.43 246.41 246.56 246.84 247.22 247.69 248.24 248.86 249.55 250.31 - 251.13 252.02 252.97 253.98 255.05 256.18 257.37 258.62 259.94 261.3 262.73 264.22 265.76 267.37 269.03 270.75 - 272.53 274.36 276.26 278.21 280.22 282.28 284.41 286.59 / - 10 13 2 1 247.76 246.65 246.3 246.27 246.42 246.7 247.08 247.55 248.09 248.71 249.4 250.16 - 250.98 251.87 252.82 253.83 254.9 256.03 257.22 258.47 259.79 261.16 262.58 264.07 265.62 267.22 268.89 270.61 - 272.38 274.22 276.12 278.07 280.08 282.15 284.27 286.46 / - 10 13 3 1 247.55 246.42 246.06 246.01 246.16 246.43 246.81 247.28 247.82 248.44 249.13 249.89 - 250.71 251.59 252.54 253.55 254.62 255.76 256.95 258.2 259.51 260.88 262.31 263.8 265.35 266.96 268.62 270.34 - 272.12 273.96 275.86 277.82 279.83 281.9 284.03 286.21 / - 10 13 4 1 247.17 245.98 245.59 245.54 245.67 245.94 246.31 246.77 247.32 247.93 248.62 249.38 - 250.2 251.08 252.03 253.04 254.11 255.25 256.44 257.69 259.01 260.38 261.81 263.3 264.86 266.46 268.13 269.86 - 271.64 273.49 275.39 277.35 279.37 281.45 283.58 285.77 / - 10 13 5 1 246.31 244.96 244.48 244.37 244.47 244.71 245.06 245.51 246.04 246.65 247.34 248.09 - 248.91 249.79 250.74 251.76 252.83 253.97 255.17 256.43 257.76 259.14 260.58 262.09 263.65 265.27 266.95 268.7 - 270.5 272.36 274.27 276.25 278.29 280.39 282.54 284.75 / - 10 13 6 1 243.64 241.66 240.63 240.34 240.33 240.49 240.79 241.21 241.72 242.32 243 243.76 - 244.6 245.5 246.48 247.52 248.64 249.81 251.06 252.37 253.74 255.17 256.67 258.24 259.86 261.55 263.3 265.11 - 266.98 268.91 270.9 272.95 275.07 277.25 279.48 281.78 / - 10 13 7 1 237.39 231.99 230.54 230.08 229.96 230.08 230.36 230.79 231.33 231.98 232.73 233.57 - 234.5 235.5 236.59 237.76 239 240.31 241.7 243.15 244.68 246.28 247.95 249.68 251.47 253.3 255.24 257.24 - 259.3 261.43 263.63 265.88 268.2 270.59 273.03 275.54 / - 10 13 8 1 224.02 211.9 210.33 209.66 209.51 209.67 210.06 210.62 211.34 212.19 213.16 214.26 - 215.46 216.76 218.16 219.63 221.21 222.89 224.65 226.49 228.38 230.38 232.47 234.63 236.84 239.15 241.53 243.99 - 246.51 249.08 251.74 254.46 257.26 260.09 263.01 265.99 / - 10 13 9 1 194.47 179.76 178.56 178.27 178.49 179.06 179.89 180.94 182.18 183.54 185.11 186.82 - 188.66 190.64 192.73 194.95 197.27 199.7 202.24 204.87 207.6 210.41 213.31 216.28 219.32 222.44 225.64 228.91 - 232.26 235.66 239.14 242.67 246.29 249.95 253.65 257.45 / - 10 13 10 1 146.87 141.81 141.11 141.4 142.25 143.46 145.02 146.83 148.87 151.12 153.56 156.27 - 159.07 162.02 165.11 168.41 171.75 175.3 178.86 182.6 186.44 190.29 194.37 198.39 202.48 206.82 211.06 215.36 - 220.12 224.56 229.07 233.63 238.25 242.93 248.17 252.97 / - 10 13 11 1 107.56 106.71 107.95 110.03 112.51 115.26 118.25 121.45 124.82 128.38 132.07 135.94 - 139.95 144.11 148.41 152.73 157.28 161.94 166.73 171.64 176.63 181.73 186.75 192.06 197.48 202.99 208.32 214.01 - 219.8 225.33 231.28 236.94 243.06 249.23 255.08 261.41 / - 10 13 12 1 86.73 89.74 92.87 96.39 100.13 104.04 108.09 112.27 116.58 121.05 125.66 130.43 - 135.35 140.42 145.64 150.99 156.49 162.12 167.87 173.75 179.76 185.87 192.97 200.01 207 213.94 220.95 228.23 - 235.29 242.53 249.88 257.33 264.89 272.55 280.31 288.18 / - 10 13 13 1 81.11 85.65 89.68 93.81 98.18 102.91 107.96 113.29 118.88 124.72 130.79 137.09 - 143.6 150.33 157.26 164.4 171.73 179.25 186.89 194.65 202.56 210.61 218.81 227.15 235.64 244.28 253.05 261.96 - 271.01 280.18 289.48 298.91 308.47 318.53 329.51 340.61 / - 10 13 14 1 76.36 82.7 88.4 94.13 100.2 106.72 113.69 121.1 128.94 137.19 145.8 154.76 - 164.03 173.6 183.46 193.6 204.01 214.68 225.6 236.78 248.21 259.89 271.82 284.01 296.39 308.92 321.6 334.45 - 347.49 360.71 374.13 387.74 401.55 415.56 429.76 444.17 / - 10 13 15 1 72.98 81.06 89.65 98.77 108.43 118.74 129.73 141.38 153.65 166.52 179.95 193.84 - 208.2 222.99 238.2 253.81 269.83 286.25 303.07 320.28 337.86 355.8 374.13 392.85 411.96 431.47 451.27 471.46 - 492.05 513.02 534.32 555.93 577.89 600.2 622.88 645.94 / - 10 13 16 1 72.27 84.78 100.86 118.01 135.36 153.55 173.18 192.56 213.3 234.01 256.62 279.98 - 301.76 326.56 351.89 377.73 404.61 431.97 460.2 487.38 516.98 547.25 578.2 609.83 642.04 674.78 708.33 742.76 - 778.08 813.3 850.37 888.32 927.13 966.64 1006.7 1047.29 / - 10 13 17 1 76.73 104.94 134.36 163.82 193.89 225.01 257.56 290.77 326.64 363.79 401.8 442.7 - 483.47 527.6 572.98 619.33 665.96 715.5 766.67 819.56 874.42 930.43 988.89 1048.99 1110.57 1172.96 1236.27 1297.96 - 1354.45 1413.74 1473.32 1534.63 1596.96 1661.68 1726.07 1790.12 / - 10 13 18 1 100.17 147.04 195.6 247.11 300.65 356.93 416.31 479.22 545.6 615.73 689.29 766.78 - 848.16 934.03 1023.66 1116.87 1213.03 1308.9 1400.18 1493.78 1591.78 1692.43 1793.95 1900.54 2007.89 2117.33 2228.32 2346.21 - 2464.53 2580.32 2702.26 2826.03 2952.44 3080.74 3216.1 3352.44 / - 10 13 19 1 139.94 216.15 295.67 388.96 491.08 601.01 718.94 846.49 984.72 1133.06 1286.26 1430.95 - 1587.8 1753.07 1920.07 2102.75 2281.29 2466.93 2657.39 2869.21 3076.39 3284.27 3501.88 3726.58 3960.02 4195.2 4441.46 4691.05 - 4945.35 5208.18 5477.5 5744.46 6033.85 6320.73 6602.76 6902.35 / - 10 13 20 1 206.47 329.09 455.9 616.85 822.25 1053.08 1308.32 1569.34 1849.36 2141.44 2452.31 2778.65 - 3127.85 3493.43 3858.63 4268 4663.17 5116.64 5546.17 5998.03 6457.7 6990.99 7492.83 8009.01 8529.84 9083.08 9652.09 10233.41 - 10827.42 11439.8 12073.31 12736.67 13420.63 14108.54 14802.34 15538.45 / - 10 14 1 1 249.73 248.62 248.26 248.23 248.37 248.64 249.02 249.49 250.03 250.65 251.34 252.09 - 252.91 253.79 254.74 255.75 256.82 257.95 259.14 260.4 261.71 263.08 264.51 266 267.54 269.15 270.82 272.54 - 274.32 276.16 278.06 280.02 282.03 284.1 286.23 288.42 / - 10 14 2 1 249.62 248.49 248.13 248.08 248.22 248.5 248.87 249.33 249.88 250.49 251.18 251.93 - 252.75 253.64 254.59 255.59 256.66 257.8 258.99 260.24 261.55 262.92 264.35 265.84 267.39 269 270.66 272.39 - 274.17 276.01 277.91 279.87 281.88 283.96 286.09 288.28 / - 10 14 3 1 249.41 248.25 247.87 247.82 247.95 248.22 248.59 249.05 249.59 250.21 250.89 251.65 - 252.47 253.35 254.3 255.31 256.38 257.51 258.7 259.95 261.26 262.64 264.07 265.56 267.11 268.72 270.38 272.11 - 273.9 275.74 277.64 279.6 281.62 283.7 285.83 288.03 / - 10 14 4 1 249.01 247.8 247.39 247.32 247.45 247.71 248.07 248.53 249.06 249.68 250.36 251.11 - 251.93 252.81 253.76 254.77 255.84 256.97 258.17 259.42 260.73 262.11 263.54 265.04 266.59 268.2 269.87 271.6 - 273.39 275.24 277.15 279.11 281.14 283.22 285.36 287.56 / - 10 14 5 1 247.98 246.53 246 245.84 245.91 246.13 246.46 246.9 247.42 248.02 248.7 249.45 - 250.26 251.15 252.1 253.11 254.19 255.33 256.54 257.81 259.13 260.52 261.97 263.48 265.05 266.68 268.37 270.12 - 271.94 273.81 275.74 277.73 279.78 281.89 284.06 286.28 / - 10 14 6 1 244.98 242.63 241.45 241.14 241.1 241.25 241.54 241.95 242.45 243.06 243.74 244.5 - 245.34 246.26 247.24 248.29 249.42 250.61 251.86 253.19 254.57 256.03 257.54 259.12 260.77 262.47 264.24 266.07 - 267.97 269.92 271.94 274.02 276.13 278.33 280.6 282.92 / - 10 14 7 1 238.33 232.18 230.61 230.1 229.94 230.04 230.31 230.73 231.28 231.94 232.7 233.55 - 234.49 235.52 236.62 237.81 239.08 240.42 241.84 243.32 244.86 246.49 248.2 249.97 251.81 253.72 255.7 257.74 - 259.82 262 264.24 266.54 268.91 271.34 273.84 276.39 / - 10 14 8 1 224.58 211.44 209.74 209.13 208.98 209.14 209.54 210.12 210.86 211.74 212.74 213.84 - 215.08 216.41 217.85 219.39 220.98 222.7 224.51 226.41 228.38 230.4 232.54 234.76 237.05 239.38 241.82 244.33 - 246.87 249.52 252.24 255.02 257.84 260.75 263.73 266.78 / - 10 14 9 1 194.25 179.44 178.24 177.96 178.19 178.77 179.62 180.65 181.91 183.34 184.93 186.67 - 188.55 190.56 192.69 194.94 197.3 199.64 202.21 204.87 207.63 210.49 213.43 216.45 219.57 222.76 226.29 229.66 - 233.08 236.57 240.12 243.74 247.42 251.15 254.97 258.83 / - 10 14 10 1 146.57 141.84 141.15 141.46 142.31 143.59 145.16 147 149.06 151.34 153.82 156.48 - 159.3 162.38 165.51 168.76 172.22 175.72 179.43 183.14 187.01 190.99 194.97 199.19 203.33 207.54 212.01 216.37 - 220.79 225.69 230.25 234.87 239.54 244.28 249.07 254.46 / - 10 14 11 1 107.66 106.93 108.2 110.31 112.83 115.62 118.63 121.87 125.25 128.83 132.55 136.42 - 140.46 144.64 148.96 153.41 157.99 162.7 167.53 172.32 177.36 182.49 187.73 193.09 198.31 203.86 209.51 215.26 - 220.77 226.69 232.35 238.43 244.62 250.46 256.77 262.74 / - 10 14 12 1 87 90.07 93.23 96.78 100.55 104.49 108.56 112.77 117.11 121.6 126.24 131.03 - 135.98 141.08 146.32 151.71 157.23 162.89 168.68 174.6 180.63 186.78 193.59 200.7 207.83 214.91 222.02 229.16 - 236.43 243.94 251.36 258.88 266.51 274.25 282.09 289.61 / - 10 14 13 1 81.35 85.97 90.03 94.19 98.58 103.33 108.41 113.76 119.37 125.23 131.33 137.65 - 144.19 150.94 157.9 165.06 172.42 179.97 187.67 195.48 203.42 211.51 219.75 228.14 236.67 245.35 254.16 263.12 - 272.21 281.44 290.79 300.28 309.89 319.62 329.48 340.69 / - 10 14 14 1 76.54 82.95 88.7 94.46 100.56 107.09 114.09 121.51 129.36 137.63 146.26 155.23 - 164.52 174.11 183.99 194.15 204.59 215.29 226.24 237.44 248.89 260.59 272.54 284.73 297.17 309.78 322.54 335.46 - 348.56 361.84 375.32 388.99 402.86 416.93 431.2 445.67 / - 10 14 15 1 73.12 81.26 89.88 99.02 108.71 119.03 130.03 141.69 153.97 166.84 180.27 194.16 - 208.54 223.36 238.58 254.2 270.22 286.64 303.45 320.65 338.24 356.22 374.56 393.28 412.38 431.87 451.63 471.78 - 492.34 513.29 534.64 556.35 578.39 600.77 623.51 646.63 / - 10 14 16 1 72.37 84.88 100.97 118.13 135.82 154.17 173.3 192.66 213.83 234.11 256.7 280.02 - 301.76 326.53 351.85 377.79 404.58 431.91 460.09 487.41 516.76 547.03 577.96 609.56 641.75 674.44 707.92 742.24 - 777.44 812.51 849.41 887.18 925.79 965.24 1005.5 1046.35 / - 10 14 17 1 76.67 104.88 134.33 163.78 193.82 224.95 257.46 291.21 326.17 363.51 401.43 442.23 - 482.85 526.85 572.14 618.87 665.11 714.58 765.63 818.34 872.97 928.73 986.9 1046.73 1108.24 1170.52 1234 1296.1 - 1353.2 1413.21 1475.09 1536.09 1601.05 1665.59 1731.44 1797.29 / - 10 14 18 1 100.05 147.07 195.38 246.99 300.49 356.73 416.02 478.76 544.97 614.92 688.25 765.63 - 846.85 931.89 1021.61 1114.7 1210.6 1306.4 1398.3 1493.23 1591.07 1692.57 1794.96 1901.21 2010.62 2121.08 2235.43 2350.25 - 2471.42 2588.78 2712 2837.26 2965.07 3094.8 3231.32 3369.25 / - 10 14 19 1 139.79 216.14 295.4 388.13 489.78 599.34 716.81 844.19 981.55 1127.73 1280.77 1430.13 - 1587.95 1756.03 1922.51 2095.64 2286.61 2473.94 2666.27 2867.7 3089.09 3299.36 3519.29 3744.8 3979.56 4220.14 4466.53 4722.63 - 4979.02 5244.71 5517.26 5787.79 6072.1 6370.33 6656.96 6959.45 / - 10 14 20 1 206.4 329.6 457.33 608.64 814.75 1042.85 1302 1562.44 1842.62 2141.95 2453.85 2790.09 - 3142.33 3489.67 3880.3 4293.95 4693.24 5112.82 5586.09 6042.42 6507.55 6994.81 7553.62 8075.28 8602.76 9156.66 9730.25 10316.65 - 10906.08 11543.47 12183.98 12842.92 13533.04 14228.95 14944.24 15673.1 / - 10 15 1 1 251.49 250.41 250.05 250.01 250.15 250.42 250.8 251.26 251.8 252.41 253.1 253.85 - 254.67 255.55 256.5 257.51 258.58 259.71 260.9 262.15 263.46 264.83 266.26 267.76 269.3 270.91 272.58 274.31 - 276.09 277.94 279.84 281.8 283.82 285.9 288.04 290.23 / - 10 15 2 1 251.38 250.28 249.91 249.86 250 250.27 250.64 251.1 251.64 252.25 252.94 253.69 - 254.51 255.39 256.33 257.34 258.41 259.54 260.73 261.99 263.3 264.67 266.1 267.59 269.14 270.75 272.42 274.15 - 275.94 277.78 279.68 281.65 283.67 285.75 287.89 290.08 / - 10 15 3 1 251.17 250.03 249.65 249.59 249.72 249.98 250.35 250.81 251.34 251.96 252.64 253.39 - 254.2 255.09 256.03 257.04 258.11 259.24 260.43 261.68 263 264.37 265.8 267.29 268.85 270.46 272.13 273.86 - 275.65 277.49 279.4 281.37 283.39 285.47 287.61 289.81 / - 10 15 4 1 250.76 249.55 249.12 249.04 249.15 249.4 249.76 250.21 250.74 251.35 252.03 252.78 - 253.59 254.47 255.42 256.43 257.5 258.63 259.82 261.08 262.39 263.77 265.2 266.7 268.26 269.87 271.55 273.28 - 275.08 276.93 278.84 280.81 282.85 284.94 287.08 289.29 / - 10 15 5 1 249.46 247.92 247.32 247.12 247.15 247.34 247.66 248.08 248.59 249.18 249.85 250.6 - 251.41 252.3 253.25 254.27 255.35 256.5 257.7 258.98 260.31 261.71 263.17 264.69 266.27 267.91 269.62 271.38 - 273.21 275.09 277.04 279.05 281.12 283.24 285.43 287.68 / - 10 15 6 1 246.11 243.33 242.16 241.76 241.66 241.77 242.04 242.42 242.92 243.51 244.19 244.96 - 245.8 246.72 247.71 248.78 249.91 251.12 252.39 253.73 255.13 256.61 258.14 259.75 261.42 263.15 264.95 266.81 - 268.73 270.71 272.76 274.87 277.05 279.28 281.58 283.94 / - 10 15 7 1 239.08 232.03 230.44 229.86 229.65 229.73 230 230.42 230.97 231.64 232.41 233.27 - 234.23 235.28 236.41 237.62 238.92 240.3 241.75 243.27 244.85 246.52 248.27 250.09 251.97 253.93 255.94 258.03 - 260.19 262.42 264.7 267.05 269.48 271.96 274.52 277.12 / - 10 15 8 1 224.94 210.89 209.14 208.54 208.4 208.58 208.99 209.59 210.36 211.26 212.3 213.46 - 214.73 216.07 217.55 219.12 220.8 222.57 224.38 226.32 228.35 230.47 232.66 234.9 237.25 239.68 242.15 244.73 - 247.38 250.07 252.86 255.71 258.64 261.6 264.66 267.78 / - 10 15 9 1 194.47 179.13 177.93 177.66 177.9 178.5 179.33 180.41 181.7 183.15 184.77 186.47 - 188.37 190.4 192.55 194.83 197.22 199.72 202.32 205.03 207.84 210.74 213.72 216.8 219.96 223.21 226.53 229.93 - 233.41 236.96 240.58 244.3 248.12 251.96 255.85 259.8 / - 10 15 10 1 146.08 141.89 141.21 141.54 142.42 143.67 145.26 147.12 149.21 151.5 154.01 156.77 - 159.63 162.65 165.91 169.2 172.62 176.25 179.89 183.75 187.59 191.61 195.72 199.83 204.18 208.44 212.78 217.38 - 221.86 226.4 231.43 236.11 240.85 245.65 250.5 255.41 / - 10 15 11 1 107.86 107.15 108.48 110.64 113.19 116.01 119.04 122.3 125.71 129.32 133.09 136.99 - 141.05 145.27 149.62 154.11 158.61 163.34 168.19 173.16 178.25 183.43 188.52 193.89 199.39 204.99 210.7 216.19 - 222.08 228.06 233.77 239.92 245.76 252.08 258.05 264.5 / - 10 15 12 1 87.31 90.43 93.64 97.22 101.02 104.98 109.08 113.31 117.68 122.19 126.86 131.67 - 136.64 141.76 147.03 152.44 157.99 163.68 169.5 175.44 181.51 187.69 193.99 201.36 208.63 215.71 223.02 230.25 - 237.56 245.03 252.49 260.07 267.75 275.54 283.44 291.44 / - 10 15 13 1 81.65 86.33 90.43 94.61 99.02 103.8 108.89 114.26 119.9 125.78 131.89 138.23 - 144.79 151.56 158.54 165.71 173.09 180.66 188.41 196.28 204.27 212.4 220.67 229.1 237.67 246.38 255.24 264.24 - 273.37 282.64 292.05 301.58 311.24 321.03 330.94 340.98 / - 10 15 14 1 76.78 83.26 89.04 94.83 100.94 107.49 114.5 121.93 129.8 138.07 146.72 155.7 - 165 174.6 184.49 194.66 205.1 215.81 226.78 238.01 249.48 261.19 273.14 285.33 297.77 310.45 323.29 336.29 - 349.45 362.8 376.34 390.07 404 418.12 432.44 446.97 / - 10 15 15 1 73.31 81.5 90.15 99.31 109 119.33 130.33 141.99 154.26 167.13 180.55 194.43 - 208.79 223.61 238.84 254.47 270.48 286.88 303.66 320.83 338.39 356.34 374.7 393.42 412.51 431.96 451.68 471.79 - 492.28 513.16 534.44 556.1 578.15 600.59 623.4 646.57 / - 10 15 16 1 72.5 84.99 101.09 118.26 135.82 154.04 173.4 192.73 213.86 234.12 256.69 279.97 - 301.65 326.36 351.77 377.52 404.31 431.6 459.71 487.22 516.18 546.32 577.15 608.68 640.88 673.57 706.99 741.21 - 776.28 811.18 847.9 885.5 923.99 963.34 1003.51 1044.43 / - 10 15 17 1 76.62 104.83 134.44 163.73 193.73 224.79 257.28 291.23 326.52 363.01 400.87 441.55 - 481.99 525.8 570.89 617.76 663.83 713.28 764.28 816.73 871.15 926.74 984.83 1044.47 1105.58 1167.4 1230.65 1292.96 - 1352.59 1411.27 1473.67 1537.02 1600.77 1665.95 1732.5 1799.03 / - 10 15 18 1 99.95 147 195.25 246.84 300.23 356.3 415.54 478.06 543.99 613.64 686.8 763.71 - 845.02 930 1019.61 1112.26 1207.65 1303.39 1395.96 1492.15 1590.67 1692.36 1795.71 1902.84 2013.17 2124.71 2241.1 2356.2 - 2478.51 2601.17 2722.18 2848.73 2978.22 3113.81 3247.29 3386.99 / - 10 15 19 1 139.68 216.22 295.28 388.23 489.71 599.05 716.48 843.29 979.04 1125.97 1278.51 1428.83 - 1587.8 1749.28 1924.83 2099.61 2292.02 2481.34 2675.77 2879.18 3102.64 3315.59 3538.13 3766.3 4003.67 4245.39 4496.57 4755.79 - 5015.25 5278.27 5560.66 5835.17 6123 6416.29 6715.7 7022.36 / - 10 15 20 1 206.42 330.36 459.17 601.04 808.09 1039.36 1287.69 1547.26 1834.93 2130.08 2451.73 2785.51 - 3135.8 3509.81 3904.77 4290.55 4727.14 5151.43 5590.57 6092.07 6563.24 7056.25 7556.26 8149.51 8684.34 9243.88 9817.21 10403.17 - 11007.28 11639.74 12295.65 12960.97 13658.51 14375.91 15100.92 15840.39 / - 10 16 1 1 253.15 252.13 251.79 251.76 251.9 252.17 252.54 253 253.54 254.16 254.84 255.59 - 256.41 257.29 258.23 259.24 260.31 261.44 262.63 263.88 265.2 266.57 268 269.49 271.05 272.66 274.33 276.06 - 277.85 279.69 281.6 283.57 285.59 287.68 289.82 292.02 / - 10 16 2 1 253.04 251.99 251.64 251.6 251.74 252.01 252.38 252.84 253.38 253.99 254.67 255.42 - 256.24 257.12 258.06 259.07 260.14 261.27 262.46 263.71 265.02 266.4 267.83 269.32 270.87 272.49 274.16 275.89 - 277.68 279.53 281.43 283.4 285.43 287.51 289.66 291.86 / - 10 16 3 1 252.83 251.74 251.37 251.31 251.45 251.71 252.07 252.53 253.06 253.67 254.35 255.1 - 255.92 256.8 257.74 258.74 259.81 260.94 262.14 263.39 264.7 266.08 267.51 269 270.56 272.17 273.84 275.58 - 277.37 279.22 281.13 283.1 285.13 287.22 289.37 291.58 / - 10 16 4 1 252.31 251.1 250.67 250.57 250.67 250.91 251.26 251.71 252.23 252.84 253.51 254.26 - 255.07 255.95 256.89 257.9 258.97 260.1 261.3 262.56 263.87 265.25 266.69 268.19 269.76 271.38 273.06 274.8 - 276.6 278.46 280.38 282.37 284.41 286.51 288.67 290.89 / - 10 16 5 1 250.72 249.07 248.39 248.13 248.13 248.29 248.59 248.99 249.49 250.08 250.74 251.48 - 252.3 253.18 254.14 255.16 256.24 257.4 258.62 259.9 261.24 262.65 264.13 265.66 267.26 268.92 270.64 272.42 - 274.27 276.18 278.14 280.17 282.26 284.41 286.63 288.9 / - 10 16 6 1 246.98 243.64 242.43 241.99 241.86 241.95 242.2 242.58 243.07 243.67 244.35 245.13 - 245.98 246.91 247.92 249 250.15 251.38 252.67 254.04 255.47 256.97 258.54 260.17 261.87 263.64 265.47 267.36 - 269.32 271.34 273.43 275.58 277.79 280.06 282.4 284.8 / - 10 16 7 1 239.58 231.76 229.91 229.29 229.08 229.14 229.4 229.82 230.38 231.05 231.84 232.73 - 233.71 234.79 235.95 237.17 238.5 239.91 241.41 242.97 244.62 246.34 248.13 250 251.91 253.92 256 258.15 - 260.36 262.65 264.98 267.4 269.89 272.44 275.06 277.73 / - 10 16 8 1 224.31 210.05 208.39 207.84 207.75 207.97 208.42 209.05 209.85 210.8 211.87 213.06 - 214.34 215.76 217.28 218.9 220.62 222.39 224.3 226.3 228.38 230.51 232.76 235.1 237.51 239.96 242.53 245.18 - 247.86 250.65 253.52 256.45 259.43 262.5 265.64 268.82 / - 10 16 9 1 194.05 178.82 177.63 177.36 177.62 178.19 179.08 180.18 181.49 182.92 184.55 186.34 - 188.27 190.33 192.52 194.82 197.25 199.79 202.44 205.18 208.03 210.98 214.02 217.15 220.38 223.67 227.05 230.51 - 234.04 237.65 241.33 245.08 248.9 252.79 256.75 260.77 / - 10 16 10 1 145.61 141.87 141.24 141.58 142.48 143.79 145.41 147.29 149.4 151.73 154.27 156.99 - 159.97 163.02 166.21 169.53 173.12 176.69 180.47 184.25 188.26 192.23 196.38 200.63 204.86 209.35 213.74 218.19 - 222.93 227.53 232.19 237.37 242.16 247.02 251.94 256.91 / - 10 16 11 1 108.05 107.4 108.79 110.98 113.56 116.42 119.49 122.77 126.2 129.83 133.62 137.54 - 141.61 145.84 150.21 154.71 159.35 164.12 169.01 173.86 178.97 184.2 189.51 194.92 200.47 205.86 211.6 217.43 - 223.05 229.07 235.19 241.02 247.31 253.27 259.73 266.25 / - 10 16 12 1 87.66 90.85 94.11 97.73 101.57 105.57 109.69 113.94 118.32 122.85 127.53 132.37 - 137.35 142.49 147.78 153.21 158.78 164.49 170.33 176.3 182.39 188.6 194.93 201.76 209.14 216.53 223.79 231.1 - 238.67 246.17 253.59 261.22 268.95 276.79 284.74 292.81 / - 10 16 13 1 82.04 86.77 90.89 95.09 99.53 104.32 109.43 114.82 120.47 126.36 132.49 138.84 - 145.41 152.19 159.18 166.37 173.75 181.34 189.11 197.03 205.08 213.24 221.55 230.01 238.61 247.36 256.25 265.28 - 274.45 283.76 293.21 302.79 312.5 322.33 332.3 342.39 / - 10 16 14 1 77.12 83.65 89.45 95.25 101.37 107.93 114.94 122.37 130.25 138.53 147.18 156.16 - 165.46 175.05 184.94 195.1 205.54 216.23 227.19 238.4 249.87 261.58 273.54 285.74 298.17 310.83 323.73 336.81 - 350.06 363.47 377.07 390.85 404.83 419.01 433.38 447.96 / - 10 16 15 1 73.58 81.81 90.48 99.65 109.33 119.65 130.64 142.28 154.54 167.39 180.78 194.63 - 208.96 223.73 238.92 254.52 270.52 286.9 303.64 320.76 338.26 356.14 374.41 393.08 412.13 431.54 451.23 471.28 - 491.71 512.51 533.69 555.24 577.18 599.49 622.19 645.25 / - 10 16 16 1 72.69 85.18 101.23 118.4 136.09 154.52 173.46 192.74 213.82 234.01 256.52 279.77 - 301.38 325.99 351.33 376.93 403.62 430.85 458.89 486.88 515.08 545.05 575.71 607.05 639.06 671.72 705.13 739.3 - 774.27 809 845.53 882.87 920.99 959.92 999.62 1040.1 / - 10 16 17 1 76.6 104.86 134.42 163.67 193.58 224.53 256.9 290.8 325.96 362.28 399.94 440.53 - 480.77 524.37 569.22 615.79 661.69 711.22 762.27 814.57 868.66 924.29 981.29 1040.35 1100.9 1162.25 1225.22 1287.51 - 1347.58 1408.55 1469.87 1533.74 1598.1 1663.88 1731.06 1800.62 / - 10 16 18 1 99.88 146.98 195.15 246.6 299.84 355.63 414.63 476.98 542.58 611.78 684.62 761.34 - 842.26 926.96 1015.76 1107.8 1202.75 1298.61 1393.03 1488.67 1588.12 1690.39 1796.77 1903.04 2014.4 2128.7 2244.58 2361.15 - 2484.65 2608.72 2735.13 2863.63 2994.47 3127.86 3263.31 3401.05 / - 10 16 19 1 139.65 216.47 295.42 387.5 488.66 597.14 714.25 840.06 975.81 1122.61 1274.77 1426.17 - 1586.63 1749.12 1926.02 2102.61 2287.32 2487.94 2684.82 2890.51 3098.92 3335.53 3557.41 3788.71 4027.59 4274.3 4527.61 4785.84 - 5054.68 5321.91 5600.9 5887.56 6178.47 6475.84 6774.43 7090.93 / - 10 16 20 1 206.6 331.49 461.66 602.79 802.56 1032.85 1283.34 1540.75 1819.77 2122.96 2437.77 2783.74 - 3130.42 3503.12 3900.85 4321.23 4731.46 5194.57 5640 6098.82 6625.49 7124.96 7632.95 8164.06 8775.16 9341.72 9921.55 10514.55 - 11125.61 11753.5 12417.77 13095.36 13801.48 14528.28 15261.22 16012.81 / - 10 17 1 1 254.69 253.76 253.46 253.45 253.6 253.88 254.25 254.72 255.26 255.87 256.55 257.3 - 258.12 259 259.94 260.95 262.02 263.15 264.34 265.59 266.91 268.28 269.71 271.21 272.76 274.37 276.05 277.78 - 279.57 281.42 283.33 285.3 287.33 289.42 291.57 293.78 / - 10 17 2 1 254.58 253.62 253.31 253.29 253.43 253.71 254.08 254.54 255.08 255.69 256.37 257.12 - 257.94 258.82 259.76 260.76 261.83 262.96 264.15 265.41 266.72 268.09 269.53 271.02 272.58 274.19 275.86 277.6 - 279.39 281.24 283.16 285.13 287.16 289.25 291.4 293.61 / - 10 17 3 1 254.35 253.34 253.01 252.96 253.1 253.36 253.73 254.18 254.72 255.33 256 256.75 - 257.57 258.44 259.39 260.39 261.46 262.59 263.78 265.04 266.35 267.73 269.16 270.66 272.21 273.83 275.51 277.24 - 279.04 280.9 282.81 284.79 286.82 288.92 291.07 293.29 / - 10 17 4 1 253.61 252.4 251.94 251.82 251.91 252.13 252.47 252.91 253.43 254.02 254.7 255.44 - 256.25 257.13 258.07 259.08 260.16 261.29 262.49 263.76 265.08 266.47 267.92 269.43 271 272.63 274.32 276.08 - 277.89 279.76 281.7 283.7 285.75 287.87 290.05 292.28 / - 10 17 5 1 251.66 249.89 249.12 248.8 248.75 248.88 249.15 249.54 250.02 250.6 251.26 252 - 252.82 253.71 254.67 255.69 256.79 257.96 259.19 260.49 261.85 263.28 264.77 266.32 267.94 269.63 271.37 273.18 - 275.05 276.99 278.98 281.04 283.16 285.35 287.59 289.9 / - 10 17 6 1 247.52 243.86 242.33 241.83 241.66 241.72 241.95 242.33 242.82 243.41 244.11 244.89 - 245.75 246.7 247.73 248.83 250.01 251.27 252.59 253.99 255.45 256.99 258.6 260.27 262.01 263.82 265.69 267.63 - 269.63 271.7 273.84 276.04 278.3 280.63 283.02 285.47 / - 10 17 7 1 239.85 231.21 229.28 228.62 228.35 228.41 228.67 229.1 229.68 230.36 231.16 232.08 - 233.09 234.2 235.39 236.68 238.05 239.5 241.04 242.62 244.31 246.09 247.93 249.86 251.85 253.92 256.03 258.24 - 260.52 262.87 265.29 267.78 270.31 272.93 275.61 278.36 / - 10 17 8 1 224.45 209.28 207.52 207.06 207.04 207.31 207.81 208.5 209.34 210.32 211.43 212.66 - 214.01 215.47 217 218.67 220.44 222.31 224.22 226.27 228.41 230.64 232.9 235.3 237.78 240.29 242.93 245.65 - 248.4 251.27 254.21 257.22 260.26 263.42 266.64 269.9 / - 10 17 9 1 193.51 178.53 177.33 177.08 177.34 177.93 178.83 179.92 181.24 182.74 184.4 186.2 - 188.15 190.24 192.47 194.81 197.28 199.85 202.54 205.33 208.22 211.21 214.29 217.46 220.72 224.1 227.53 231.04 - 234.66 238.32 242.08 245.91 249.79 253.75 257.77 261.86 / - 10 17 10 1 145.39 141.92 141.31 141.66 142.58 143.91 145.51 147.41 149.54 151.9 154.54 157.3 - 160.22 163.3 166.64 170 173.48 177.23 180.94 184.88 188.8 192.95 197.05 201.34 205.73 210.08 214.71 219.22 - 223.79 228.67 233.39 238.17 243.49 248.41 253.39 258.43 / - 10 17 11 1 108.24 107.66 109.13 111.39 114 116.91 120.01 123.31 126.76 130.42 134.22 138.16 - 142.28 146.54 150.93 155.47 160.02 164.8 169.7 174.73 179.88 185.15 190.32 195.76 201.31 206.99 212.78 218.37 - 224.34 230.42 236.23 242.48 248.84 254.87 261.4 267.56 / - 10 17 12 1 88.11 91.37 94.71 98.4 102.28 106.3 110.45 114.71 119.1 123.64 128.33 133.17 - 138.16 143.3 148.6 154.03 159.62 165.33 171.19 177.17 183.28 189.51 195.87 202.33 209.53 217.07 224.6 232.07 - 239.56 247.07 254.73 262.31 270.09 277.98 285.99 294.1 / - 10 17 13 1 82.58 87.32 91.47 95.68 100.15 104.97 110.09 115.49 121.14 127.04 133.16 139.51 - 146.08 152.86 159.84 167.02 174.4 181.98 189.74 197.69 205.8 214.02 222.37 230.85 239.48 248.25 257.16 266.22 - 275.42 284.76 294.23 303.85 313.59 323.47 333.48 343.61 / - 10 17 14 1 77.63 84.19 89.98 95.77 101.89 108.44 115.44 122.86 130.73 139.01 147.64 156.61 - 165.88 175.46 185.32 195.46 205.86 216.53 227.45 238.62 250.04 261.71 273.62 285.77 298.16 310.79 323.65 336.75 - 350.07 363.59 377.27 391.12 405.15 419.37 433.79 448.4 / - 10 17 15 1 73.97 82.25 90.93 100.07 109.72 120 130.96 142.56 154.79 167.6 180.92 194.71 - 208.98 223.68 238.8 254.31 270.21 286.5 303.17 320.22 337.65 355.44 373.6 392.14 411.06 430.28 449.84 469.78 - 490.1 510.8 531.88 553.33 575.14 597.32 619.86 642.76 / - 10 17 16 1 72.99 85.39 101.38 118.57 136.21 154.22 173.48 192.69 213.69 233.76 256.17 279.31 - 300.77 325.29 350.52 375.94 402.24 429.32 457.1 485.02 512.9 542.73 573.21 604.35 636.13 668.56 701.68 735.57 - 770.2 804.53 840.68 877.6 915.29 953.76 992.99 1032.98 / - 10 17 17 1 76.61 104.88 134.3 163.6 193.38 224.16 256.35 290.11 325.11 361.22 398.6 438.91 - 478.83 522.21 566.8 613.07 658.59 707.82 758.5 810.35 863.94 919.04 975.4 1033.85 1093.79 1154.52 1217.03 1280.43 - 1339.64 1401.12 1464.13 1527.47 1592.88 1660.01 1726.63 1796.62 / - 10 17 18 1 99.89 146.92 195.12 246.33 299.17 354.63 413.17 475.03 540.3 609.01 681.31 757.51 - 837.61 921.71 1009.76 1101.17 1195.52 1291.08 1386.01 1483.48 1583.38 1687.24 1793.33 1902.72 2015.34 2129.29 2246.04 2364.33 - 2487.34 2614.76 2742.8 2873.15 3005.87 3141.23 3278.79 3418.69 / - 10 17 19 1 139.74 216.98 296.24 387.84 487.52 596.58 713.11 837.97 972.51 1115.62 1269.43 1421.41 - 1577.96 1747.37 1925.73 2104.41 2291.17 2493.83 2693.49 2901.67 3113.36 3352.01 3577.69 3812.43 4054.7 4303.31 4561.34 4824.63 - 5091.92 5369.78 5652.94 5942.58 6239.77 6541.85 6850.86 7158.34 / - 10 17 20 1 207.02 333.2 465.1 608.34 797.83 1022.65 1274.39 1528.1 1814.09 2107.18 2436.45 2770.35 - 3131.15 3519 3896.86 4317.66 4762.21 5197.53 5687.07 6155.64 6644.13 7199.31 7717.39 8257.74 8813.2 9382.33 10039.63 10640.99 - 11263.27 11894.49 12557.17 13248.48 13965.48 14694.58 15452.26 16221.8 / - 10 18 1 1 256.1 255.3 255.06 255.08 255.25 255.54 255.92 256.39 256.93 257.55 258.23 258.98 - 259.8 260.68 261.62 262.63 263.7 264.83 266.02 267.27 268.58 269.96 271.39 272.89 274.44 276.06 277.74 279.47 - 281.27 283.12 285.04 287.01 289.05 291.14 293.29 295.51 / - 10 18 2 1 255.98 255.15 254.9 254.9 255.07 255.35 255.73 256.19 256.73 257.35 258.03 258.78 - 259.59 260.47 261.42 262.42 263.49 264.62 265.81 267.07 268.38 269.76 271.19 272.69 274.24 275.86 277.54 279.27 - 281.07 282.93 284.84 286.82 288.86 290.95 293.11 295.33 / - 10 18 3 1 255.61 254.67 254.35 254.32 254.45 254.72 255.08 255.53 256.07 256.67 257.35 258.1 - 258.91 259.79 260.73 261.74 262.81 263.94 265.14 266.39 267.71 269.09 270.53 272.04 273.6 275.22 276.91 278.65 - 280.46 282.32 284.25 286.24 288.28 290.39 292.56 294.78 / - 10 18 4 1 254.54 253.3 252.8 252.64 252.7 252.91 253.23 253.65 254.17 254.76 255.43 256.17 - 256.98 257.86 258.81 259.83 260.91 262.05 263.26 264.54 265.87 267.27 268.74 270.26 271.85 273.5 275.21 276.98 - 278.82 280.72 282.67 284.69 286.77 288.91 291.11 293.38 / - 10 18 5 1 252.19 250.26 249.28 248.86 248.78 248.9 249.16 249.54 250.02 250.6 251.27 252.02 - 252.84 253.74 254.72 255.77 256.89 258.07 259.33 260.65 262.04 263.5 265.02 266.61 268.26 269.98 271.76 273.6 - 275.51 277.49 279.52 281.62 283.78 286.01 288.3 290.65 / - 10 18 6 1 247.69 243.4 241.68 241.14 240.95 240.99 241.22 241.6 242.1 242.7 243.41 244.21 - 245.1 246.08 247.14 248.27 249.49 250.78 252.14 253.58 255.09 256.62 258.27 259.99 261.78 263.64 265.57 267.57 - 269.63 271.76 273.96 276.22 278.55 280.94 283.4 285.92 / - 10 18 7 1 239.9 230.51 228.46 227.8 227.55 227.62 227.91 228.36 228.94 229.66 230.49 231.43 - 232.48 233.62 234.86 236.18 237.6 239.1 240.64 242.31 244.06 245.88 247.79 249.77 251.83 253.93 256.14 258.42 - 260.77 263.2 265.67 268.23 270.87 273.57 276.35 279.17 / - 10 18 8 1 224.4 208.3 206.51 206.18 206.27 206.63 207.2 207.94 208.83 209.86 211.02 212.29 - 213.69 215.19 216.79 218.5 220.3 222.22 224.2 226.3 228.49 230.75 233.1 235.56 238.07 240.7 243.38 246.16 - 248.98 251.92 254.93 257.98 261.14 264.38 267.65 271.02 / - 10 18 9 1 192.86 178.24 177.05 176.8 177.04 177.68 178.56 179.7 181.04 182.55 184.24 186.08 - 188.07 190.19 192.45 194.83 197.34 199.96 202.68 205.52 208.46 211.49 214.63 217.85 221.16 224.56 228.05 231.61 - 235.26 238.98 242.77 246.68 250.63 254.68 258.77 262.94 / - 10 18 10 1 145.42 141.96 141.34 141.75 142.68 143.99 145.65 147.57 149.75 152.16 154.76 157.55 - 160.6 163.72 166.98 170.48 174 177.64 181.55 185.41 189.49 193.55 197.84 202.08 206.5 211.01 215.49 220.25 - 224.88 229.58 234.59 239.43 244.33 249.8 254.84 259.94 / - 10 18 11 1 108.44 107.99 109.63 111.94 114.6 117.54 120.69 124.01 127.5 131.14 134.96 138.94 - 143.03 147.27 151.66 156.2 160.87 165.67 170.61 175.66 180.66 185.94 191.34 196.82 202.41 207.87 213.68 219.6 - 225.63 231.41 237.62 243.94 249.94 256.44 262.59 269.26 / - 10 18 12 1 88.73 92.09 95.56 99.36 103.3 107.35 111.5 115.75 120.14 124.67 129.35 134.18 - 139.15 144.28 149.56 154.99 160.56 166.28 172.12 178.1 184.21 190.45 196.8 203.28 209.86 217.44 225.14 232.8 - 240.27 247.91 255.58 263.39 271.11 279.05 287.1 295.27 / - 10 18 13 1 83.41 88.11 92.26 96.48 100.99 105.84 110.97 116.36 122 127.88 133.98 140.31 - 146.85 153.6 160.55 167.7 175.05 182.59 190.32 198.23 206.33 214.61 223.02 231.54 240.19 248.97 257.9 266.97 - 276.17 285.52 295.01 304.64 314.4 324.3 334.34 344.5 / - 10 18 14 1 78.46 85.01 90.73 96.48 102.56 109.08 116.04 123.45 131.3 139.54 148.13 157.05 - 166.28 175.8 185.6 195.67 206.01 216.61 227.46 238.55 249.89 261.47 273.29 285.34 297.63 310.15 322.89 335.87 - 349.07 362.52 376.2 390.11 404.25 418.57 433.06 447.73 / - 10 18 15 1 74.61 82.95 91.6 100.65 110.21 120.42 131.31 142.84 155 167.71 180.91 194.62 - 208.78 223.35 238.34 253.71 269.46 285.59 302.09 318.96 336.19 353.79 371.77 390.14 408.88 427.87 447.24 466.96 - 487.04 507.49 528.29 549.46 571.01 592.92 615.2 637.85 / - 10 18 16 1 73.49 85.78 101.69 118.63 136.06 154.43 173.46 192.53 213.41 233.31 255.57 278.53 - 299.75 324.02 348.88 373.91 399.79 426.59 454.05 481.6 509.06 538.48 568.57 599.32 630.75 662.85 695.63 729.12 - 763.32 797.13 832.78 869.16 906.27 944.12 982.69 1022.01 / - 10 18 17 1 76.73 105.05 134.38 163.56 193.12 223.63 255.64 289.14 323.75 359.55 396.54 436.53 - 475.95 518.64 562.96 608.75 653.63 702.42 752.61 803.86 856.78 911.25 966.61 1024.16 1083.15 1142.85 1204.52 1267.18 - 1328.08 1389.91 1453.14 1517.41 1582.61 1649.86 1718.8 1787.98 / - 10 18 18 1 100.05 147.03 195.26 246.03 298.29 353.03 410.9 472.05 536.46 604.47 676.18 751.93 - 831.04 914.21 1000.97 1091.43 1184.84 1280.84 1376.2 1473.62 1575.47 1679.37 1786.57 1897.12 2010.02 2126.41 2244.78 2366.89 - 2489.66 2618.58 2748.5 2880.89 3015.81 3153.4 3293.45 3435.91 / - 10 18 19 1 140.1 217.99 297.68 388.3 487.29 595.07 709.17 832.52 965.64 1108.5 1256.72 1409.39 - 1571.06 1741.01 1914.7 2103.37 2291.62 2497 2702.47 2912.34 3128.07 3352.06 3601.01 3840.04 4083.96 4336.95 4597.62 4865.48 - 5139.81 5421.19 5710.88 6005.36 6308.85 6616.35 6930.52 7245.6 / - 10 18 20 1 207.93 335.91 470.09 616.05 791.04 1013.76 1261.02 1518.53 1800.59 2094.16 2421.57 2764.82 - 3120.86 3504.31 3894.09 4316.21 4763.14 5233.01 5690.69 6167.61 6703.13 7212.66 7743.39 8349.46 8916.68 9497.37 10084.58 10694.22 - 11415.96 12063.6 12740.88 13438.87 14157.57 14896.64 15675.08 16459.91 / - 10 19 1 1 257.35 256.72 256.55 256.61 256.8 257.11 257.5 257.98 258.53 259.15 259.83 260.58 - 261.4 262.28 263.23 264.24 265.3 266.44 267.63 268.88 270.2 271.57 273.01 274.51 276.07 277.68 279.36 281.1 - 282.9 284.76 286.68 288.66 290.7 292.8 294.96 297.18 / - 10 19 2 1 257.08 256.36 256.14 256.17 256.34 256.63 257.02 257.48 258.02 258.64 259.32 260.07 - 260.89 261.77 262.71 263.72 264.79 265.93 267.12 268.38 269.7 271.08 272.52 274.02 275.59 277.21 278.9 280.64 - 282.45 284.31 286.24 288.23 290.28 292.38 294.55 296.78 / - 10 19 3 1 256.38 255.45 255.11 255.05 255.17 255.42 255.78 256.22 256.75 257.35 258.03 258.78 - 259.59 260.47 261.42 262.44 263.51 264.66 265.86 267.13 268.46 269.85 271.31 272.83 274.41 276.05 277.75 279.52 - 281.34 283.23 285.18 287.19 289.26 291.39 293.58 295.83 / - 10 19 4 1 254.91 253.53 252.93 252.71 252.72 252.89 253.19 253.59 254.09 254.68 255.35 256.09 - 256.91 257.8 258.76 259.79 260.89 262.05 263.29 264.58 265.95 267.37 268.87 270.42 272.04 273.73 275.47 277.28 - 279.16 281.09 283.09 285.15 287.28 289.46 291.71 294.02 / - 10 19 5 1 252.19 249.99 248.74 248.21 248.09 248.18 248.42 248.79 249.28 249.86 250.54 251.3 - 252.14 253.07 254.07 255.14 256.29 257.52 258.81 260.17 261.6 263.1 264.67 266.31 268.01 269.78 271.56 273.47 - 275.44 277.47 279.57 281.73 283.96 286.25 288.61 291.03 / - 10 19 6 1 247.56 242.71 240.91 240.28 240.07 240.11 240.33 240.71 241.22 241.84 242.57 243.39 - 244.31 245.32 246.41 247.58 248.81 250.14 251.55 253.04 254.6 256.24 257.95 259.73 261.59 263.52 265.51 267.58 - 269.72 271.92 274.2 276.49 278.9 281.38 283.93 286.54 / - 10 19 7 1 239.72 229.54 227.47 226.87 226.69 226.79 227.1 227.58 228.2 228.95 229.82 230.81 - 231.89 233.07 234.35 235.68 237.14 238.69 240.33 242.04 243.85 245.69 247.65 249.7 251.82 254.02 256.26 258.61 - 261.04 263.54 266.11 268.73 271.45 274.24 277.1 280.03 / - 10 19 8 1 223.21 207.19 205.88 205.55 205.64 206.01 206.59 207.36 208.28 209.34 210.53 211.84 - 213.27 214.82 216.47 218.23 220.09 222.05 224.1 226.26 228.5 230.84 233.26 235.77 238.37 241.06 243.83 246.68 - 249.6 252.59 255.67 258.81 262.03 265.34 268.71 272.16 / - 10 19 9 1 192.1 177.95 176.76 176.52 176.77 177.43 178.33 179.48 180.84 182.38 184.1 185.97 - 187.99 190.15 192.44 194.86 197.41 200.07 202.84 205.72 208.7 211.79 214.97 218.25 221.61 225.07 228.61 232.23 - 235.94 239.72 243.58 247.51 251.52 255.6 259.75 263.97 / - 10 19 10 1 145.44 142.01 141.4 141.83 142.78 144.11 145.81 147.81 150.06 152.54 155.19 158.03 - 161.03 164.27 167.57 170.99 174.66 178.33 182.1 186.16 190.15 194.37 198.55 202.97 207.33 211.88 216.51 221.11 - 225.99 230.74 235.56 240.69 245.65 250.67 256.27 261.43 / - 10 19 11 1 108.74 108.54 110.53 113.03 115.77 118.78 121.94 125.26 128.74 132.39 136.18 140.12 - 144.24 148.45 152.83 157.35 162.01 166.81 171.59 176.62 181.78 187.07 192.47 197.76 203.35 209.05 214.89 220.53 - 226.57 232.71 238.97 244.93 251.38 257.49 264.12 270.38 / - 10 19 12 1 89.79 93.37 97.24 101.22 105.24 109.29 113.4 117.6 121.94 126.41 131.02 135.78 - 140.7 145.76 150.98 156.34 161.85 167.5 173.3 179.23 185.29 191.48 197.8 204.24 210.79 217.69 225.43 233.26 - 240.85 248.44 256.22 264.02 271.98 279.83 287.91 296.11 / - 10 19 13 1 84.88 89.49 93.66 97.94 102.53 107.39 112.5 117.85 123.42 129.23 135.25 141.48 - 147.93 154.58 161.43 168.49 175.74 183.18 190.82 198.64 206.64 214.82 223.17 231.7 240.4 249.23 258.18 267.25 - 276.45 285.78 295.26 304.87 314.61 324.5 334.52 344.67 / - 10 19 14 1 80.1 86.53 92.09 97.71 103.7 110.12 117.01 124.37 132.14 140.27 148.74 157.54 - 166.64 176.03 185.7 195.64 205.84 216.3 227 237.95 249.14 260.56 272.22 284.1 296.22 308.56 321.13 333.92 - 346.93 360.16 373.63 387.32 401.23 415.36 429.72 444.3 / - 10 19 15 1 75.93 84.38 92.9 101.69 111.04 121.06 131.77 143.15 155.11 167.62 180.66 194.18 - 208.12 222.48 237.24 252.38 267.89 283.77 300.01 316.61 333.56 350.87 368.54 386.57 404.89 423.52 442.5 461.84 - 481.53 501.58 521.99 542.76 563.89 585.37 607.21 629.41 / - 10 19 16 1 74.54 86.75 102.28 119.02 136.36 154.13 172.8 192.23 211.78 232.51 254.54 277.16 - 297.8 321.58 345.82 370.27 395.76 422 448.87 474.69 502.62 531.44 560.93 591.08 621.91 653.4 685.56 718.41 - 750.69 784.91 819.83 855.45 891.77 928.79 966.51 1004.94 / - 10 19 17 1 77.95 105.45 134.5 163.28 192.84 222.78 254.71 287.3 321.04 357.24 393.55 432.96 - 471.34 513.55 557.19 602.27 645.97 693.79 742.96 793.09 844.72 897.58 952.06 1008.32 1066.02 1124.29 1184.83 1246.54 - 1308.38 1370.8 1434.54 1499.38 1565.41 1633.36 1702.66 1773.15 / - 10 19 18 1 100.56 147.02 195.71 245.66 296.97 350.99 407.71 467.74 531.21 598.41 669.02 743.73 - 821.33 903.18 987.91 1077.05 1169.33 1264.48 1360.09 1459.22 1561.53 1667.19 1775.93 1887.03 2001.47 2120.22 2240.4 2363.26 - 2489.71 2619.08 2751.14 2885.88 3023.31 3163.51 3306.38 3453.38 / - 10 19 19 1 141.04 220.05 300.53 389.54 486.8 592.25 704.8 826.34 957.1 1095.97 1243.91 1397.52 - 1559.44 1730.83 1905.89 2094.65 2285.42 2483.72 2699.75 2913.27 3134.88 3362.11 3613.6 3857.95 4109.43 4367.36 4633.85 4907.76 - 5190.42 5479.31 5776.95 6077.68 6382.08 6702.71 7023.43 7347.54 / - 10 19 20 1 209.82 340.46 477.95 627.07 790.49 999.57 1242.4 1496.57 1779 2078.02 2403.5 2740.99 - 3105.08 3489.04 3888.58 4309.58 4743.68 5213.33 5706.89 6185.61 6723.98 7241.96 7826.14 8380.07 8951.37 9538.85 10213.27 10839.01 - 11486.03 12153.68 12842.06 13545.6 14393.16 15152.22 15932.3 16733.26 / - 10 20 1 1 257.78 257.13 256.93 256.97 257.14 257.44 257.82 258.29 258.83 259.45 260.14 260.89 - 261.72 262.61 263.56 264.58 265.66 266.8 268.01 269.28 270.62 272.01 273.47 274.99 276.58 278.22 279.92 281.69 - 283.52 285.41 287.36 289.38 291.45 293.59 295.78 298.04 / - 10 20 2 1 257.2 256.37 256.07 256.04 256.17 256.43 256.79 257.24 257.77 258.38 259.07 259.82 - 260.64 261.54 262.5 263.52 264.61 265.76 266.98 268.27 269.61 271.02 272.5 274.03 275.63 277.29 279.02 280.8 - 282.65 284.56 286.54 288.57 290.67 292.83 295.05 297.33 / - 10 20 3 1 256.23 255.1 254.63 254.48 254.54 254.74 255.07 255.49 256.01 256.6 257.28 258.04 - 258.86 259.76 260.73 261.76 262.87 264.04 265.28 266.58 267.95 269.38 270.88 272.45 274.08 275.77 277.52 279.34 - 281.23 283.17 285.18 287.26 289.39 291.59 293.85 296.18 / - 10 20 4 1 254.59 252.97 252.21 251.88 251.82 251.94 252.2 252.59 253.07 253.66 254.33 255.08 - 255.92 256.83 257.81 258.87 260 261.21 262.48 263.82 265.23 266.71 268.25 269.86 271.54 273.29 275.1 276.98 - 278.92 280.93 283.01 285.15 287.35 289.62 291.95 294.35 / - 10 20 5 1 251.83 249.26 247.75 247.27 247.12 247.18 247.42 247.79 248.28 248.87 249.56 250.35 - 251.21 252.17 253.2 254.31 255.5 256.76 258.1 259.52 261 262.56 264.18 265.88 267.65 269.49 271.39 273.37 - 275.41 277.52 279.7 281.91 284.21 286.59 289.04 291.56 / - 10 20 6 1 247.18 241.83 239.89 239.28 239.08 239.13 239.37 239.77 240.3 240.95 241.71 242.56 - 243.52 244.53 245.66 246.88 248.18 249.55 251.02 252.55 254.17 255.87 257.64 259.45 261.37 263.37 265.44 267.58 - 269.77 272.06 274.41 276.84 279.33 281.89 284.52 287.23 / - 10 20 7 1 239.28 228.43 226.37 225.86 225.75 225.91 226.27 226.8 227.47 228.27 229.18 230.21 - 231.34 232.57 233.84 235.26 236.77 238.37 240.05 241.83 243.63 245.57 247.59 249.7 251.88 254.1 256.45 258.87 - 261.37 263.9 266.55 269.28 272.04 274.91 277.86 280.88 / - 10 20 8 1 222.74 206.34 205.26 204.93 205.01 205.39 205.98 206.76 207.69 208.77 209.98 211.32 - 212.78 214.35 216.04 217.83 219.72 221.72 223.81 226 228.29 230.67 233.14 235.7 238.35 241.08 243.9 246.8 - 249.78 252.84 255.98 259.2 262.49 265.86 269.31 272.83 / - 10 20 9 1 191.2 177.68 176.49 176.25 176.52 177.15 178.1 179.27 180.65 182.22 183.96 185.86 - 187.78 189.95 192.26 194.7 197.27 199.95 202.74 205.65 208.66 211.79 215.02 218.34 221.76 225.66 229.28 232.97 - 236.75 240.59 244.52 248.51 252.58 256.72 260.93 265.21 / - 10 20 10 1 145.67 142.11 141.5 141.99 143.16 144.73 146.63 148.79 151.14 153.69 156.4 159.27 - 162.37 165.54 168.84 172.27 175.94 179.61 183.41 187.5 191.53 195.79 200.01 204.48 208.87 213.44 218.1 222.72 - 227.61 232.36 237.18 242.31 247.26 252.27 257.34 263.01 / - 10 20 11 1 109.87 111.19 113.75 116.53 119.42 122.42 125.56 128.79 132.18 135.74 139.4 143.25 - 147.2 151.31 155.48 159.87 164.4 169.07 173.89 178.69 183.77 188.99 194.33 199.56 205.09 210.72 216.5 222.09 - 228.06 234.15 239.97 246.24 252.21 258.67 264.79 271.44 / - 10 20 12 1 93.39 98.45 102.93 106.97 110.84 114.69 118.6 122.59 126.7 130.95 135.34 139.88 - 144.58 149.43 154.43 159.58 164.86 170.27 175.83 181.52 187.35 193.32 199.43 205.68 212.07 218.58 225.69 233.45 - 241.04 248.61 256.17 263.93 271.69 279.62 287.43 295.47 / - 10 20 13 1 89 93.58 98.09 102.65 107.31 112.09 117.01 122.1 127.38 132.86 138.56 144.46 - 150.58 156.9 163.43 170.16 177.09 184.22 191.54 199.04 206.74 214.62 222.67 230.91 239.32 247.9 256.66 265.58 - 274.67 283.93 293.34 302.92 312.63 322.44 332.34 342.37 / - 10 20 14 1 85.1 90.58 95.7 101.09 106.98 113.3 120.01 127.09 134.51 142.27 150.35 158.74 - 167.42 176.39 185.65 195.19 204.99 215.06 225.39 235.97 246.79 257.87 269.18 280.73 292.51 304.51 316.74 329.19 - 341.86 354.75 367.87 381.2 394.75 408.52 422.5 436.71 / - 10 20 15 1 80.76 88.85 96.43 104.47 113.22 122.7 132.91 143.81 155.29 167.3 179.8 192.77 - 206.18 220.02 234.26 248.89 263.92 279.32 295.1 311.23 327.72 344.56 361.73 379.16 396.92 415.04 433.5 452.31 - 471.47 490.97 510.81 531 551.54 572.42 593.66 615.23 / - 10 20 16 1 78.15 90.32 105.15 120.99 137.1 154.77 172.1 191.46 209.6 230.25 251.55 271.54 - 293 316.04 339.41 363.2 388.07 413.56 439.43 464.16 491.55 519.58 548.27 577.6 607.6 638.24 669.55 701.52 - 732.45 765.71 799.64 834.24 869.5 905.43 942.03 979.3 / - 10 20 17 1 81.67 108.53 135.92 163.16 191.69 221.42 252.08 284.26 317.34 352.2 388.61 427.18 - 464.07 505.08 547.34 589.84 632.22 678.57 725.91 774.45 824.93 875.67 929 983.59 1039.72 1096.14 1155.12 1215.45 - 1277.14 1340.22 1404.71 1470.58 1536.44 1605.12 1675.19 1746.63 / - 10 20 18 1 105.3 148.75 196.53 245.05 295.35 348.27 403.77 462.81 525.35 590.87 659.53 731.32 - 808.22 888.41 969.92 1056.94 1147.26 1240.75 1335.9 1436.29 1540 1646.88 1756.79 1869.89 1985.98 2105.4 2227.84 2353.22 - 2481.53 2613.39 2747.88 2885.34 3025.74 3169.06 3315.27 3464.35 / - 10 20 19 1 145.06 224.82 305.22 393.45 488.34 590.49 700.58 819.27 946.42 1083.4 1227.81 1381.53 - 1544.18 1715.82 1893.18 2082.74 2276.48 2477.8 2693.44 2910.76 3135.42 3367.33 3606.49 3867.21 4123.06 4386.67 4657.76 4936.13 - 5224.78 5519.5 5819.89 6132.59 6447.65 6769.8 7105.38 7442.05 / - 10 20 20 1 214.42 349.3 491.53 644.59 809.9 987.9 1178.29 1381.24 1638.28 1928.54 2235.35 2565.98 - 2915.24 3289.56 3671.41 4089.91 4536.91 4980.97 5479.67 5969.01 6481.19 7016.75 7576.28 8175.27 8753.43 9388.5 10023.32 10637.11 - 11353.57 12014.87 12697.29 13502.46 14234.07 14986.93 15884.28 16687.3 / - 11 1 1 1 230.99 230.85 230.93 231.14 231.45 231.83 232.29 232.82 233.41 234.07 234.78 235.56 - 236.39 237.28 238.22 239.22 240.28 241.39 242.56 243.78 245.06 246.39 247.77 249.21 250.7 252.24 253.84 255.49 - 257.2 258.95 260.76 262.62 264.54 266.51 268.53 270.6 / - 11 1 2 1 230.92 230.77 230.84 231.05 231.35 231.74 232.2 232.73 233.32 233.97 234.69 235.46 - 236.29 237.18 238.13 239.13 240.19 241.3 242.47 243.69 244.97 246.3 247.68 249.12 250.61 252.16 253.76 255.41 - 257.11 258.87 260.68 262.55 264.46 266.43 268.46 270.53 / - 11 1 3 1 230.78 230.62 230.68 230.88 231.18 231.57 232.02 232.55 233.14 233.79 234.51 235.28 - 236.11 237 237.95 238.95 240.01 241.13 242.29 243.52 244.8 246.13 247.52 248.96 250.45 252 253.6 255.25 - 256.96 258.72 260.54 262.4 264.32 266.29 268.32 270.4 / - 11 1 4 1 230.53 230.33 230.38 230.57 230.87 231.25 231.7 232.23 232.82 233.47 234.18 234.96 - 235.79 236.68 237.63 238.63 239.69 240.81 241.98 243.2 244.48 245.82 247.21 248.65 250.15 251.7 253.31 254.97 - 256.68 258.44 260.26 262.13 264.06 266.04 268.07 270.15 / - 11 1 5 1 230.04 229.79 229.81 229.99 230.27 230.65 231.1 231.62 232.21 232.86 233.57 234.35 - 235.18 236.08 237.03 238.03 239.1 240.21 241.39 242.62 243.91 245.25 246.64 248.09 249.6 251.15 252.77 254.43 - 256.15 257.93 259.75 261.64 263.57 265.56 267.6 269.69 / - 11 1 6 1 229.09 228.75 228.73 228.88 229.15 229.52 229.96 230.48 231.07 231.72 232.43 233.21 - 234.05 234.94 235.9 236.91 237.98 239.11 240.29 241.53 242.82 244.18 245.58 247.04 248.56 250.13 251.76 253.44 - 255.18 256.97 258.81 260.71 262.66 264.67 266.73 268.84 / - 11 1 7 1 227.14 226.6 226.47 226.55 226.77 227.1 227.52 228.02 228.6 229.24 229.96 230.74 - 231.58 232.48 233.45 234.48 235.56 236.71 237.91 239.18 240.5 241.87 243.31 244.8 246.35 247.96 249.62 251.33 - 253.1 254.93 256.82 258.76 260.75 262.8 264.91 267.07 / - 11 1 8 1 221.18 218.42 217.82 217.62 217.67 217.88 218.26 218.74 219.32 219.99 220.75 221.59 - 222.5 223.49 224.54 225.67 226.86 228.08 229.41 230.81 232.26 233.79 235.37 237.01 238.72 240.49 242.33 244.22 - 246.17 248.18 250.25 252.38 254.57 256.82 259.12 261.49 / - 11 1 9 1 204.8 196.67 195.37 194.88 194.82 195.05 195.51 196.14 196.93 197.85 198.89 200.04 - 201.3 202.63 204.08 205.63 207.26 208.97 210.74 212.61 214.56 216.59 218.66 220.82 223.06 225.37 227.71 230.14 - 232.64 235.19 237.8 240.48 243.21 246.01 248.86 251.77 / - 11 1 10 1 167.23 158.24 156.79 156.48 156.77 157.52 158.58 159.89 161.33 163.02 164.89 166.91 - 169.08 171.38 173.81 176.35 179.19 181.96 184.82 187.76 190.77 193.84 197 200.23 203.52 206.87 210.28 213.74 - 217.24 220.79 224.88 228.54 232.26 236 239.81 243.7 / - 11 1 11 1 121.99 119.56 119.47 120.43 121.99 123.95 126.2 128.73 131.43 134.36 137.42 140.68 - 144.1 147.58 151.28 155.11 158.94 163 167.18 171.29 175.66 179.93 184.49 189.13 193.62 198.42 203.03 207.99 - 212.72 217.82 222.67 227.91 232.87 238.12 243.17 248.54 / - 11 1 12 1 95.68 97.31 100 102.94 106.05 109.31 112.74 116.32 120.06 123.96 128.01 132.21 - 136.57 141.07 145.7 150.47 155.97 161.45 166.88 172.44 178.07 183.81 189.59 195.47 201.46 207.54 213.72 220 - 226.37 232.83 239.34 245.94 252.66 259.48 265.97 272.95 / - 11 1 13 1 88.76 92.01 95.35 99.06 103.12 107.45 112.02 116.81 121.81 127.04 132.48 138.14 - 144.01 150.09 156.37 162.84 169.46 176.2 183.08 190.12 197.3 204.63 212.1 219.7 227.45 235.32 244.06 253.19 - 262.08 270.98 280.19 289.16 298.29 307.68 316.93 326.29 / - 11 1 14 1 85.59 89.97 94.46 99.39 104.81 110.7 117.11 123.96 131.2 138.8 146.74 155 - 163.57 172.42 181.57 190.98 200.65 210.58 220.77 231.22 241.92 252.87 264 275.25 286.66 298.22 309.97 321.89 - 334 346.29 358.76 371.8 385.79 399.94 414.11 428.31 / - 11 1 15 1 82.2 89.03 96.38 104.3 113 122.49 132.75 143.69 155.22 167.34 180 193.12 - 206.69 220.69 235.12 249.97 265.24 280.91 297 313.51 330.43 347.77 365.51 383.62 402.04 420.74 439.73 459.05 - 478.71 498.71 519.09 539.85 562.3 585.16 608.29 631.46 / - 11 1 16 1 81.18 92.05 105.38 120.77 137.29 154.03 172.58 192.13 211.45 232 253.9 276.21 - 299.41 323.52 348.36 372.71 398.46 425.49 453.27 481.82 511.16 541.29 572.2 603.84 636.18 669.05 702.64 737.11 - 773.77 811.21 848.65 887.45 926.9 963.46 1004.39 1043.26 / - 11 1 17 1 84.41 110.17 137.38 165.17 194.37 225.2 256.78 290.36 325.79 363.29 401.21 442.15 - 484.52 528.63 572.08 619.31 667.97 718.52 771.22 825.62 881.65 937.71 998.66 1059.62 1121.67 1182.22 1239.67 1292.1 - 1332.5 1377.8 1424.11 1472.13 1522.19 1575.1 1627.5 1677.46 / - 11 1 18 1 106.13 150.63 198.86 248.64 301.02 356.84 416.55 480.46 548.34 619.83 695.04 775.09 - 859.74 948.8 1040.99 1135.76 1232.27 1322.02 1409.41 1499.07 1593.31 1688.49 1787.39 1885.16 1988 2093.19 2196.75 2304.99 - 2410.44 2522.04 2635.09 2752.24 2869.14 2987.45 3107.48 3229.04 / - 11 1 19 1 145.27 219.87 303.27 396.78 498.6 609.55 730.81 861.66 1006.53 1158.23 1308.15 1446.18 - 1596.94 1749.21 1902.87 2061.79 2233.63 2402.19 2573.56 2755.54 2935.1 3122.66 3319.63 3515.08 3712.13 3922.65 4132.53 4345.61 - 4566.5 4786.03 5017.91 5248.14 5487.43 5732.42 5969.08 6222.23 / - 11 1 20 1 210.67 330.02 479.05 666.24 879.95 1124.03 1370.59 1614.42 1881.6 2158.07 2439.04 2749.5 - 3078.03 3403.12 3747.04 4098.29 4496.94 4875.87 5274.39 5681.66 6106.3 6537.83 6982.01 7438.7 7908.87 8388.78 8884.33 9382.6 - 9901.12 10430.96 10991.86 11547.96 12123.49 12686.04 13292.91 13925.83 / - 11 2 1 1 232.84 232.68 232.75 232.96 233.26 233.65 234.11 234.64 235.23 235.89 236.6 237.38 - 238.21 239.1 240.05 241.06 242.12 243.23 244.4 245.63 246.91 248.25 249.64 251.08 252.58 254.13 255.73 257.39 - 259.1 260.87 262.69 264.56 266.48 268.46 270.49 272.57 / - 11 2 2 1 232.76 232.6 232.66 232.86 233.17 233.55 234.01 234.54 235.13 235.79 236.5 237.28 - 238.11 239 239.95 240.96 242.02 243.14 244.31 245.53 246.82 248.15 249.54 250.99 252.49 254.04 255.64 257.3 - 259.02 260.78 262.6 264.48 266.4 268.38 270.41 272.5 / - 11 2 3 1 232.62 232.43 232.49 232.69 232.99 233.37 233.83 234.36 234.95 235.6 236.32 237.1 - 237.93 238.82 239.77 240.78 241.84 242.96 244.13 245.36 246.64 247.98 249.37 250.82 252.32 253.87 255.48 257.14 - 258.86 260.63 262.45 264.32 266.25 268.23 270.27 272.36 / - 11 2 4 1 232.35 232.14 232.18 232.37 232.66 233.04 233.5 234.02 234.61 235.27 235.98 236.76 - 237.59 238.48 239.44 240.44 241.51 242.63 243.8 245.03 246.32 247.66 249.05 250.5 252.01 253.56 255.18 256.84 - 258.56 260.34 262.16 264.04 265.98 267.96 270.01 272.1 / - 11 2 5 1 231.84 231.57 231.59 231.77 232.05 232.42 232.87 233.4 233.99 234.64 235.35 236.13 - 236.97 237.86 238.81 239.82 240.89 242.01 243.19 244.43 245.72 247.06 248.46 249.92 251.43 252.99 254.61 256.29 - 258.02 259.8 261.63 263.52 265.47 267.47 269.52 271.62 / - 11 2 6 1 230.84 230.49 230.47 230.62 230.89 231.25 231.7 232.22 232.8 233.46 234.17 234.95 - 235.79 236.69 237.65 238.66 239.73 240.87 242.05 243.3 244.6 245.95 247.36 248.83 250.36 251.93 253.57 255.26 - 257 258.8 260.65 262.56 264.52 266.54 268.61 270.73 / - 11 2 7 1 228.75 228.16 227.99 228.04 228.25 228.57 228.98 229.48 230.05 230.7 231.42 232.2 - 233.04 233.95 234.92 235.95 237.04 238.19 239.4 240.67 242 243.39 244.83 246.33 247.89 249.51 251.18 252.91 - 254.7 256.54 258.44 260.39 262.41 264.47 266.6 268.78 / - 11 2 8 1 222.33 219.32 218.59 218.39 218.44 218.67 219.04 219.52 220.11 220.78 221.55 222.39 - 223.32 224.31 225.39 226.53 227.74 229.02 230.36 231.77 233.25 234.79 236.4 238.07 239.8 241.59 243.45 245.36 - 247.34 249.35 251.45 253.6 255.82 258.09 260.43 262.82 / - 11 2 9 1 205.38 196.63 195.38 194.88 194.83 195.08 195.54 196.2 197 197.95 199.01 200.2 - 201.49 202.88 204.34 205.92 207.59 209.34 211.14 213.06 215.05 217.12 219.23 221.45 223.73 226.08 228.47 230.95 - 233.49 236.1 238.75 241.48 244.27 247.1 250 252.97 / - 11 2 10 1 166.98 158.14 156.73 156.46 156.78 157.56 158.59 159.91 161.45 163.17 165.07 167.13 - 169.33 171.66 174.12 176.7 179.39 182.19 185.08 188.07 191.4 194.54 197.76 201.05 204.38 207.78 211.26 214.78 - 218.35 221.97 225.64 229.34 233.63 237.44 241.29 245.19 / - 11 2 11 1 122.01 119.72 119.67 120.66 122.26 124.25 126.53 129.05 131.82 134.74 137.88 141.11 - 144.56 148.16 151.9 155.65 159.63 163.74 167.8 172.11 176.54 180.85 185.46 189.93 194.69 199.29 204.2 209.21 - 214 219.16 224.06 229.01 234.37 239.43 244.79 250.22 / - 11 2 12 1 95.8 97.45 100.16 103.14 106.29 109.6 113.06 116.68 120.46 124.39 128.49 132.73 - 137.12 141.66 146.34 151.15 156.49 162.08 167.61 173.16 178.91 184.68 190.63 196.57 202.61 208.76 215 221.34 - 227.77 234.29 240.87 247.53 254.33 260.82 267.77 274.82 / - 11 2 13 1 88.84 92.17 95.55 99.27 103.35 107.71 112.31 117.14 122.19 127.46 132.95 138.65 - 144.57 150.69 157.02 163.54 170.2 176.99 183.92 191.01 198.24 205.62 213.14 220.8 228.59 236.52 244.83 254.04 - 263.33 272.31 281.53 290.63 299.8 309.14 318.46 327.89 / - 11 2 14 1 85.53 90.1 94.64 99.61 105.07 111 117.43 124.31 131.59 139.24 147.22 155.53 - 164.14 173.05 182.24 191.7 201.43 211.42 221.66 232.16 242.91 253.91 265.1 276.41 287.88 299.51 311.32 323.31 - 335.48 347.84 360.39 373.13 387.22 401.53 415.52 430.2 / - 11 2 15 1 82.09 89.05 96.49 104.49 113.23 122.77 133.06 144.04 155.62 167.78 180.47 193.66 - 207.28 221.33 235.81 250.71 266.03 281.76 297.9 314.45 331.42 348.81 366.62 384.8 403.3 422.08 441.16 460.55 - 480.29 500.38 520.84 541.67 563.35 586.32 609.66 633.15 / - 11 2 16 1 81.11 92.08 105.48 120.92 137.49 154.76 172.84 192.43 212.47 232.36 254.33 276.86 - 299.94 324.09 348.99 374.09 399.21 426.28 454.1 482.67 512.03 542.19 573.11 604.76 637.13 670.07 703.71 738.2 - 774.01 811.99 850.01 888.17 927.47 967.4 1005.61 1045.05 / - 11 2 17 1 84.29 110.17 137.46 165.28 194.52 225.37 256.96 290.56 326.89 363.5 402.45 442.41 - 484.8 528.93 572.38 619.6 668.38 718.69 771.39 825.85 881.87 937.93 998.63 1059.66 1121.68 1182.76 1240.92 1294.3 - 1335.6 1382.14 1428.19 1477.8 1527.81 1580.52 1634.09 1684.41 / - 11 2 18 1 106.03 150.58 198.88 248.74 301.19 357.02 416.7 480.51 548.3 619.76 694.81 774.7 - 859.17 948.11 1040.31 1135.13 1231.61 1322.28 1411.34 1502.7 1598.17 1687.78 1781.02 1872.77 1968.27 2063.05 2160.75 2258.62 - 2357.4 2462.12 2564.81 2671.21 2778.81 2887.53 2995.58 3107 / - 11 2 19 1 145.1 219.72 303.22 396.85 498.69 609.52 729.94 861.13 1005.71 1157.28 1303.23 1446.31 - 1591.07 1750.72 1906.4 2067.48 2241.58 2412.08 2585.37 2767.97 2950.6 3139.98 3338.87 3536.45 3735.69 3941.59 4160.38 4375.96 - 4595.3 4820.96 5055.15 5288.05 5529.71 5771.29 6016.77 6272.42 / - 11 2 20 1 210.48 329.91 475.82 662.89 879.58 1117.62 1365.67 1614.99 1874.31 2149.85 2443.01 2754.9 - 3067.05 3412 3757.62 4110.79 4513.35 4897.48 5301.17 5710.28 6143.34 6580.04 7029.32 7491.02 7966.46 8451.47 8961.81 9455.4 - 9978.98 10514.21 11081.22 11643.52 12225.03 12793.92 13407.12 14046.82 / - 11 3 1 1 234.68 234.51 234.57 234.78 235.08 235.46 235.92 236.45 237.05 237.7 238.42 239.2 - 240.03 240.93 241.88 242.88 243.95 245.07 246.24 247.47 248.76 250.1 251.49 252.94 254.45 256 257.62 259.28 - 261 262.77 264.6 266.48 268.41 270.4 272.44 274.53 / - 11 3 2 1 234.6 234.42 234.48 234.68 234.98 235.36 235.82 236.35 236.94 237.6 238.32 239.09 - 239.93 240.82 241.77 242.78 243.85 244.97 246.14 247.37 248.66 250 251.4 252.85 254.35 255.91 257.52 259.19 - 260.91 262.69 264.51 266.4 268.33 270.32 272.36 274.46 / - 11 3 3 1 234.45 234.25 234.3 234.5 234.8 235.18 235.64 236.16 236.75 237.41 238.13 238.9 - 239.74 240.63 241.59 242.59 243.66 244.78 245.96 247.19 248.48 249.82 251.22 252.67 254.18 255.74 257.35 259.02 - 260.74 262.52 264.35 266.24 268.17 270.17 272.21 274.31 / - 11 3 4 1 234.17 233.94 233.98 234.16 234.46 234.84 235.29 235.81 236.41 237.06 237.78 238.55 - 239.39 240.29 241.24 242.25 243.32 244.44 245.62 246.85 248.14 249.49 250.89 252.34 253.85 255.42 257.04 258.71 - 260.44 262.22 264.05 265.94 267.89 269.88 271.93 274.04 / - 11 3 5 1 233.63 233.36 233.37 233.54 233.82 234.2 234.65 235.17 235.76 236.41 237.13 237.91 - 238.74 239.64 240.6 241.61 242.68 243.8 244.99 246.23 247.52 248.87 250.28 251.74 253.26 254.83 256.45 258.13 - 259.87 261.66 263.5 265.4 267.36 269.36 271.42 273.54 / - 11 3 6 1 232.59 232.23 232.2 232.35 232.62 232.98 233.43 233.95 234.53 235.19 235.91 236.69 - 237.53 238.43 239.39 240.41 241.48 242.62 243.81 245.06 246.36 247.72 249.14 250.61 252.14 253.73 255.37 257.06 - 258.81 260.62 262.48 264.4 266.37 268.4 270.48 272.61 / - 11 3 7 1 230.3 229.66 229.47 229.51 229.69 230 230.41 230.9 231.47 232.12 232.83 233.62 - 234.46 235.38 236.35 237.39 238.49 239.64 240.86 242.14 243.48 244.88 246.33 247.84 249.41 251.04 252.73 254.47 - 256.28 258.13 260.04 262.01 264.04 266.12 268.26 270.45 / - 11 3 8 1 223.43 220.02 219.36 219.1 219.15 219.38 219.75 220.25 220.84 221.53 222.31 223.16 - 224.1 225.11 226.2 227.35 228.58 229.88 231.25 232.68 234.18 235.7 237.33 239.02 240.77 242.59 244.47 246.41 - 248.42 250.49 252.61 254.79 257.04 259.34 261.71 264.13 / - 11 3 9 1 205.92 196.6 195.28 194.8 194.76 195.03 195.52 196.2 197.03 197.98 199.07 200.28 - 201.6 203.03 204.56 206.14 207.85 209.64 211.52 213.45 215.48 217.6 219.79 222.01 224.34 226.75 229.18 231.71 - 234.31 236.97 239.66 242.45 245.28 248.17 251.13 254.14 / - 11 3 10 1 166.74 158.05 156.61 156.38 156.8 157.55 158.66 160.01 161.58 163.33 165.26 167.35 - 169.58 171.95 174.44 177.06 179.79 182.62 185.56 188.58 191.7 194.9 198.49 201.84 205.24 208.72 212.23 215.81 - 219.45 223.14 226.88 230.66 234.49 238.34 242.82 246.78 / - 11 3 11 1 122.13 119.85 119.84 120.87 122.49 124.51 126.82 129.41 132.17 135.17 138.28 141.61 - 145.09 148.64 152.4 156.3 160.33 164.33 168.58 172.94 177.22 181.77 186.21 190.95 195.76 200.41 205.38 210.15 - 215.28 220.17 225.45 230.46 235.88 240.99 246.42 251.63 / - 11 3 12 1 95.93 97.6 100.31 103.34 106.53 109.88 113.38 117.03 120.85 124.83 128.96 133.24 - 137.67 142.25 146.97 151.82 157.01 162.76 168.36 174.05 179.75 185.55 191.49 197.47 203.78 209.98 216.28 222.68 - 229.17 235.45 242.11 248.83 255.62 262.56 269.58 276.27 / - 11 3 13 1 88.92 92.33 95.75 99.48 103.58 107.97 112.61 117.48 122.57 127.89 133.42 139.17 - 145.13 151.29 157.66 164.23 170.94 177.78 184.76 191.89 199.17 206.6 214.18 221.89 229.74 237.72 245.84 255.13 - 264.27 273.63 282.87 292.1 301.34 310.73 320.4 329.91 / - 11 3 14 1 85.47 90.23 94.81 99.83 105.33 111.29 117.75 124.67 131.99 139.68 147.71 156.06 - 164.72 173.67 182.91 192.42 202.21 212.25 222.54 233.09 243.89 254.95 266.19 277.57 289.1 300.8 312.67 324.73 - 336.97 349.4 362.02 374.83 388.22 402.62 417.19 431.77 / - 11 3 15 1 81.99 89.07 96.6 104.67 113.47 123.05 133.37 144.39 156.02 168.22 180.95 194.18 - 207.87 221.98 236.51 251.46 266.82 282.6 298.79 315.39 332.42 349.85 367.72 385.96 404.55 423.41 442.57 462.05 - 481.87 502.03 522.57 543.48 564.78 587.89 610.92 634.68 / - 11 3 16 1 81.05 92.12 105.76 121.07 137.68 155.13 173.11 192.71 213.26 232.71 254.74 277.32 - 300.45 324.66 349.6 374.16 399.95 427.06 454.9 483.5 512.88 543.05 573.99 605.64 638.02 671.03 704.74 739.25 - 774.62 812.21 850.39 887.13 928.46 968.1 1006.38 1045.62 / - 11 3 17 1 84.25 110.18 137.51 165.75 194.68 225.55 257.14 290.75 327.08 363.68 402.72 442.62 - 485.05 529.18 572.64 619.85 668.56 718.9 771.43 825.95 882.01 938.07 997.95 1059.54 1121.45 1183.2 1241.64 1296.18 - 1339.18 1387.25 1435.67 1486.15 1538.49 1590.26 1647.16 1700.23 / - 11 3 18 1 105.92 150.52 198.88 248.83 301.5 357.33 416.88 480.56 548.24 619.66 694.56 774.25 - 858.52 947.28 1039.52 1134.41 1230.77 1319.04 1402.77 1488.05 1577.71 1668.5 1762.7 1857.59 1952.78 2050.83 2147.3 2249.45 - 2347.6 2451.99 2557.34 2666.27 2774.84 2882.43 2992.85 3106.41 / - 11 3 19 1 144.94 219.56 302.63 396.17 497.74 609.43 729.02 860.57 1001.81 1152.15 1302.64 1446.39 - 1591.73 1752.05 1908.57 2071.48 2248.14 2420.94 2596.69 2781.59 2966.08 3158.17 3359.01 3558.8 3760.42 3968.56 4189.64 4407.63 - 4629.6 4857.66 5094.19 5330.01 5574.11 5825.68 6066.77 6325.13 / - 11 3 20 1 210.28 329.8 473.25 659.56 874.4 1116.85 1365.27 1609.94 1875.8 2152.56 2447.08 2760.44 - 3074.19 3421.09 3768.46 4123.68 4528.44 4921.84 5325.77 5740.38 6177.37 6610.71 7076.28 7530.36 8024.28 8515.08 9017.07 9530.1 - 10059.18 10600.19 11155.79 11742.94 12331.15 12906.68 13526.89 14158.36 / - 11 4 1 1 236.52 236.33 236.39 236.59 236.89 237.28 237.74 238.26 238.86 239.51 240.23 241.01 - 241.85 242.74 243.7 244.71 245.77 246.9 248.08 249.31 250.6 251.94 253.34 254.8 256.31 257.87 259.49 261.16 - 262.89 264.67 266.51 268.4 270.34 272.33 274.38 276.49 / - 11 4 2 1 236.43 236.24 236.29 236.49 236.79 237.17 237.63 238.16 238.75 239.41 240.13 240.9 - 241.74 242.64 243.59 244.6 245.67 246.79 247.97 249.21 250.5 251.84 253.24 254.7 256.21 257.78 259.39 261.07 - 262.8 264.58 266.42 268.31 270.25 272.25 274.3 276.41 / - 11 4 3 1 236.28 236.06 236.11 236.3 236.6 236.98 237.44 237.96 238.56 239.21 239.93 240.71 - 241.55 242.44 243.4 244.41 245.47 246.6 247.78 249.02 250.31 251.66 253.06 254.52 256.03 257.59 259.22 260.89 - 262.62 264.41 266.25 268.14 270.09 272.09 274.14 276.25 / - 11 4 4 1 235.98 235.74 235.77 235.96 236.25 236.63 237.08 237.6 238.2 238.85 239.57 240.35 - 241.19 242.08 243.04 244.05 245.12 246.25 247.43 248.67 249.96 251.31 252.72 254.18 255.69 257.26 258.89 260.57 - 262.3 264.09 265.94 267.83 269.79 271.79 273.85 275.97 / - 11 4 5 1 235.42 235.13 235.14 235.31 235.59 235.96 236.41 236.94 237.53 238.18 238.9 239.68 - 240.52 241.41 242.37 243.39 244.46 245.59 246.77 248.02 249.32 250.67 252.08 253.55 255.07 256.65 258.28 259.97 - 261.71 263.51 265.36 267.27 269.23 271.25 273.32 275.44 / - 11 4 6 1 234.33 233.96 233.93 234.08 234.34 234.71 235.15 235.67 236.26 236.91 237.63 238.41 - 239.26 240.16 241.12 242.14 243.22 244.36 245.55 246.8 248.11 249.48 250.9 252.38 253.92 255.51 257.15 258.86 - 260.61 262.43 264.3 266.22 268.2 270.24 272.33 274.48 / - 11 4 7 1 231.83 231.11 230.87 230.88 231.06 231.37 231.77 232.26 232.83 233.47 234.19 234.97 - 235.82 236.74 237.72 238.76 239.86 241.03 242.25 243.54 244.88 246.29 247.75 249.27 250.86 252.5 254.19 255.95 - 257.76 259.63 261.56 263.55 265.6 267.7 269.86 272.07 / - 11 4 8 1 224.49 220.66 219.99 219.75 219.79 220.01 220.39 220.89 221.49 222.19 222.98 223.82 - 224.76 225.79 226.89 228.06 229.31 230.63 232.01 233.47 234.99 236.57 238.22 239.94 241.72 243.57 245.48 247.45 - 249.48 251.57 253.73 255.92 258.19 260.53 262.92 265.38 / - 11 4 9 1 205.69 196.44 195.16 194.67 194.63 194.91 195.41 196.11 196.96 197.95 199.08 200.3 - 201.65 203.11 204.67 206.33 208.04 209.88 211.8 213.81 215.86 218.02 220.25 222.53 224.91 227.36 229.88 232.43 - 235.08 237.79 240.54 243.37 246.27 249.21 252.21 255.28 / - 11 4 10 1 166.86 157.92 156.57 156.37 156.82 157.6 158.73 160.11 161.71 163.49 165.45 167.57 - 169.83 172.24 174.77 177.42 180.19 183.06 186.04 189.11 192.27 195.51 198.84 202.24 206.07 209.62 213.22 216.86 - 220.56 224.32 228.11 231.96 235.86 239.8 243.78 248.38 / - 11 4 11 1 122.17 119.98 120.06 121.1 122.76 124.8 127.14 129.73 132.55 135.53 138.74 142.1 - 145.55 149.2 153.01 156.83 160.89 165.06 169.36 173.59 178.09 182.49 187.17 191.96 196.59 201.53 206.29 211.38 - 216.27 221.51 226.51 231.91 237.02 242.57 247.79 253.33 / - 11 4 12 1 96.07 97.78 100.47 103.54 106.77 110.15 113.69 117.39 121.24 125.25 129.42 133.75 - 138.22 142.84 147.6 152.49 157.52 163.33 169.11 174.81 180.59 186.54 192.54 198.57 204.71 210.96 217.3 223.75 - 230.28 236.92 243.65 250.43 257.3 264.3 270.99 278.15 / - 11 4 13 1 89.01 92.49 95.96 99.69 103.81 108.22 112.9 117.81 122.95 128.31 133.88 139.68 - 145.68 151.89 158.31 164.92 171.68 178.56 185.59 192.78 200.11 207.59 215.22 222.98 230.89 238.93 247.1 255.93 - 265.45 274.75 284.21 293.51 302.87 312.31 321.93 331.52 / - 11 4 14 1 85.43 90.35 94.99 100.05 105.59 111.59 118.07 125.02 132.38 140.11 148.19 156.58 - 165.29 174.29 183.57 193.14 202.97 213.07 223.42 234.02 244.88 255.98 267.29 278.73 290.32 302.08 314.02 326.15 - 338.46 350.96 363.64 376.52 389.6 403.68 418.39 433.23 / - 11 4 15 1 81.91 89.09 96.7 104.85 113.7 123.32 133.68 144.74 156.42 168.65 181.43 194.71 - 208.45 222.61 237.2 252.2 267.61 283.44 299.68 316.33 333.4 350.88 368.79 387.1 405.78 424.72 443.97 463.52 - 483.42 503.67 524.28 545.27 566.64 588.91 612.55 636.02 / - 11 4 16 1 81 92.16 105.85 121.22 137.88 155.54 173.37 192.99 213.58 233.06 255.12 277.77 - 300.95 325.21 350.2 375.43 400.67 427.81 455.68 484.31 513.7 543.89 574.84 606.49 638.86 671.93 705.71 740.27 - 775.65 812.84 851.23 887.48 929.12 969.09 1007.4 1047.72 / - 11 4 17 1 84.13 110.18 137.56 165.85 195.02 225.72 257.93 291.08 327.25 363.85 403.39 442.79 - 485.26 529.39 572.85 620.04 668.69 718.94 771.37 825.94 882.01 938.27 997.95 1058.8 1121.42 1183.29 1242.52 1297.21 - 1342.76 1392.43 1442.58 1494.69 1548.66 1602.27 1661.47 1715.6 / - 11 4 18 1 105.82 150.42 198.84 249.02 301.64 357.5 417.13 480.6 548.17 619.54 694.27 773.76 - 857.82 946.37 1038.6 1133 1229.75 1318.9 1403.6 1489.91 1581.02 1671.87 1767.96 1863.94 1960.2 2058.08 2157.08 2260.44 - 2358.28 2463.91 2570.62 2680.84 2790.68 2901.63 3013.63 3128.66 / - 11 4 19 1 144.76 219.4 302.19 395.49 497.8 608.1 728.74 859.99 1000.9 1151 1301.95 1446.32 - 1592.31 1753.3 1910.61 2074.36 2252.62 2428.15 2606.6 2793.06 2980.67 3176.09 3373.95 3581.98 3786.26 3996.92 4220.48 4440.96 - 4666.58 4896.35 5135.22 5367.64 5620.94 5874.9 6119.34 6380.71 / - 11 4 20 1 210.08 329.7 470.69 656.24 869.74 1110.31 1360.27 1610.47 1877.33 2155.35 2451.25 2766.16 - 3081.59 3430.51 3779.6 4137.02 4511.56 4935.69 5347.21 5764.3 6209.24 6650.37 7122.26 7582.14 8082.01 8579.18 9087.12 9606.09 - 10141.16 10688.66 11251.23 11828.04 12441.33 13024.27 13651.87 14291.09 / - 11 5 1 1 238.41 238.19 238.23 238.42 238.72 239.1 239.55 240.08 240.68 241.33 242.05 242.83 - 243.67 244.56 245.52 246.53 247.6 248.73 249.91 251.15 252.44 253.79 255.19 256.65 258.17 259.74 261.36 263.04 - 264.78 266.56 268.41 270.3 272.25 274.26 276.32 278.43 / - 11 5 2 1 238.32 238.09 238.13 238.32 238.61 238.99 239.45 239.97 240.56 241.22 241.94 242.72 - 243.56 244.45 245.41 246.42 247.49 248.62 249.8 251.04 252.33 253.68 255.09 256.55 258.07 259.64 261.26 262.94 - 264.68 266.47 268.31 270.21 272.16 274.17 276.23 278.35 / - 11 5 3 1 238.16 237.91 237.94 238.12 238.41 238.79 239.25 239.77 240.36 241.02 241.74 242.51 - 243.35 244.25 245.21 246.22 247.29 248.42 249.6 250.84 252.14 253.49 254.9 256.36 257.88 259.45 261.08 262.76 - 264.5 266.29 268.13 270.04 271.99 274 276.07 278.18 / - 11 5 4 1 237.85 237.57 237.59 237.76 238.05 238.42 238.88 239.4 239.99 240.65 241.36 242.14 - 242.98 243.88 244.83 245.85 246.92 248.05 249.24 250.48 251.78 253.13 254.54 256.01 257.53 259.1 260.73 262.42 - 264.16 265.96 267.81 269.72 271.68 273.69 275.76 277.89 / - 11 5 5 1 237.26 236.93 236.93 237.09 237.37 237.74 238.19 238.71 239.3 239.95 240.67 241.45 - 242.29 243.19 244.15 245.16 246.24 247.37 248.56 249.81 251.11 252.47 253.88 255.36 256.88 258.47 260.1 261.8 - 263.55 265.35 267.21 269.13 271.1 273.12 275.21 277.34 / - 11 5 6 1 236.1 235.71 235.67 235.81 236.07 236.43 236.88 237.39 237.98 238.64 239.36 240.14 - 240.98 241.88 242.85 243.87 244.95 246.09 247.29 248.55 249.86 251.23 252.66 254.14 255.68 257.28 258.93 260.64 - 262.41 264.23 266.11 268.04 270.03 272.07 274.17 276.33 / - 11 5 7 1 233.32 232.51 232.18 232.18 232.35 232.64 233.04 233.53 234.1 234.75 235.47 236.25 - 237.11 238.03 239.01 240.06 241.17 242.35 243.58 244.88 246.23 247.65 249.12 250.66 252.25 253.91 255.62 257.39 - 259.22 261.11 263.05 265.06 267.12 269.24 271.42 273.65 / - 11 5 8 1 225.5 221.34 220.53 220.28 220.32 220.54 220.92 221.42 222.02 222.73 223.53 224.41 - 225.37 226.42 227.54 228.73 230 231.34 232.74 234.22 235.77 237.38 239.06 240.8 242.61 244.44 246.38 248.38 - 250.45 252.57 254.76 257 259.31 261.68 264.12 266.6 / - 11 5 9 1 206.17 196.29 194.97 194.45 194.43 194.72 195.24 195.96 196.81 197.84 198.99 200.27 - 201.66 203.12 204.72 206.41 208.21 210.05 212.02 214.07 216.2 218.37 220.66 223.02 225.42 227.92 230.49 233.1 - 235.8 238.57 241.37 244.26 247.21 250.22 253.27 256.4 / - 11 5 10 1 166.62 157.8 156.55 156.38 156.79 157.65 158.81 160.15 161.77 163.57 165.55 167.69 - 169.97 172.4 174.95 177.63 180.59 183.51 186.52 189.63 192.84 196.12 199.5 202.95 206.47 210.07 214.13 217.87 - 221.65 225.47 229.34 233.27 237.23 241.24 245.3 249.4 / - 11 5 11 1 122.22 120.16 120.24 121.31 122.99 125.06 127.43 130.08 132.89 135.95 139.13 142.52 - 146.07 149.76 153.51 157.47 161.57 165.65 169.97 174.41 178.77 183.4 188.14 192.74 197.66 202.4 207.46 212.61 - 217.55 222.86 227.91 233.37 238.54 244.15 249.43 255.03 / - 11 5 12 1 96.22 97.97 100.63 103.73 107 110.42 114 117.73 121.62 125.68 129.89 134.25 - 138.76 143.42 148.22 153.16 158.23 163.87 169.76 175.58 181.4 187.42 193.45 199.68 205.87 212.18 218.58 225.09 - 231.69 238.39 245.19 251.73 258.65 265.66 272.8 280.05 / - 11 5 13 1 89.1 92.65 96.16 99.9 104.04 108.48 113.19 118.14 123.32 128.72 134.34 140.18 - 146.23 152.49 158.95 165.61 172.41 179.35 186.43 193.66 201.05 208.58 216.26 224.08 232.04 240.13 248.36 256.71 - 266.3 276 285.39 294.91 304.42 313.92 323.59 333.55 / - 11 5 14 1 85.39 90.46 95.16 100.27 105.84 111.89 118.4 125.38 132.78 140.55 148.67 157.11 - 165.86 174.91 184.24 193.85 203.74 213.89 224.3 234.96 245.86 257.02 268.38 279.89 291.54 303.36 315.37 327.56 - 339.94 352.51 365.26 378.22 391.36 404.7 419.51 434.55 / - 11 5 15 1 81.82 89.11 96.79 105.02 113.93 123.59 133.99 145.08 156.81 169.08 181.9 195.22 - 209.01 223.24 237.88 252.93 268.4 284.27 300.56 317.26 334.37 351.9 369.86 388.23 406.98 426.01 445.34 464.97 - 484.94 505.27 525.96 547.02 568.47 590.32 613.57 637.7 / - 11 5 16 1 80.95 92.2 105.95 121.37 138.08 155.88 173.63 193.31 213.88 233.41 255.49 278.32 - 301.53 325.74 350.77 376.11 401.36 428.54 456.43 485.08 514.49 544.69 575.65 607.3 639.64 672.77 706.61 741.22 - 776.63 812.84 851.34 888.24 929.68 969.64 1007.44 1048.52 / - 11 5 17 1 84.09 110.18 137.68 165.95 195.17 225.88 258.39 291.9 327.41 364 403.55 442.93 - 485.43 529.57 573.03 620.19 668.78 718.9 771.25 825.73 881.9 938.45 997.83 1058.33 1120.72 1183.22 1242.86 1297.05 - 1346.48 1397.64 1449.56 1504.19 1559.06 1615.33 1675.39 1731.35 / - 11 5 18 1 105.7 150.37 198.78 249.1 301.77 357.67 417.27 480.64 548.13 619.38 693.96 773.22 - 857.06 945.4 1037.51 1132.03 1228.53 1318.57 1404.31 1492.35 1583.36 1676.16 1772.14 1869.1 1966.58 2066.8 2165.56 2271.78 - 2370.9 2477.86 2585.98 2695.05 2808.92 2921.41 3035.1 3154.69 / - 11 5 19 1 144.58 219.23 301.75 395.48 496.76 608 727.35 857.95 999.56 1149.81 1301.13 1446.16 - 1592.77 1754.47 1912.58 2077.24 2249.17 2433.21 2615.35 2803.61 2993.17 3192.71 3393.57 3604.55 3811.85 4025.56 4244.41 4475.64 - 4707 4937.12 5178.62 5414.29 5670.44 5927 6174.94 6439.2 / - 11 5 20 1 209.88 329.61 467.38 653.23 868.75 1109.44 1359.77 1606.75 1878.89 2158.21 2455.59 2752.5 - 3089.28 3419 3791.25 4150.94 4527.82 4959.77 5368.48 5788.67 6235.34 6685.42 7154.79 7632.56 8125.22 8642.77 9157.54 9665.91 - 10224.57 10779.11 11349.04 11933.95 12555.38 13146.25 13781.89 14429.24 / - 11 6 1 1 240.53 240.17 240.16 240.32 240.6 240.97 241.41 241.93 242.52 243.17 243.89 244.67 - 245.5 246.4 247.36 248.37 249.44 250.57 251.75 252.99 254.29 255.64 257.05 258.51 260.03 261.61 263.24 264.92 - 266.66 268.46 270.31 272.21 274.17 276.19 278.26 280.38 / - 11 6 2 1 240.44 240.07 240.05 240.21 240.49 240.85 241.3 241.82 242.41 243.06 243.78 244.55 - 245.39 246.29 247.24 248.25 249.33 250.45 251.64 252.88 254.18 255.53 256.94 258.41 259.93 261.5 263.13 264.82 - 266.56 268.36 270.21 272.12 274.08 276.09 278.16 280.29 / - 11 6 3 1 240.27 239.88 239.86 240.01 240.28 240.65 241.09 241.61 242.2 242.85 243.57 244.34 - 245.18 246.08 247.03 248.05 249.12 250.25 251.43 252.67 253.97 255.33 256.74 258.21 259.73 261.31 262.94 264.63 - 266.37 268.17 270.03 271.93 273.9 275.92 277.99 280.12 / - 11 6 4 1 239.95 239.53 239.5 239.64 239.91 240.27 240.71 241.23 241.81 242.47 243.18 243.96 - 244.79 245.69 246.65 247.66 248.74 249.87 251.05 252.3 253.6 254.96 256.37 257.84 259.37 260.95 262.59 264.28 - 266.03 267.83 269.69 271.6 273.57 275.59 277.67 279.81 / - 11 6 5 1 239.34 238.88 238.81 238.95 239.2 239.56 240 240.51 241.1 241.75 242.46 243.24 - 244.08 244.98 245.94 246.95 248.03 249.16 250.35 251.6 252.91 254.27 255.69 257.17 258.7 260.29 261.93 263.63 - 265.39 267.2 269.07 270.99 272.97 275 277.09 279.24 / - 11 6 6 1 238.15 237.61 237.51 237.62 237.86 238.21 238.65 239.16 239.74 240.39 241.1 241.88 - 242.73 243.63 244.59 245.62 246.7 247.84 249.04 250.3 251.61 252.99 254.42 255.91 257.45 259.05 260.71 262.43 - 264.2 266.03 267.91 269.86 271.85 273.91 276.02 278.18 / - 11 6 7 1 235.09 234.05 233.59 233.49 233.64 233.91 234.3 234.78 235.34 235.99 236.71 237.49 - 238.35 239.27 240.26 241.32 242.44 243.62 244.86 246.17 247.53 248.96 250.45 252 253.6 255.27 257 258.78 - 260.63 262.54 264.5 266.52 268.6 270.74 272.93 275.18 / - 11 6 8 1 226.82 221.98 221.12 220.81 220.82 221.04 221.41 221.91 222.53 223.24 224.05 224.95 - 225.93 226.99 228.12 229.31 230.6 231.96 233.39 234.89 236.47 238.11 239.81 241.58 243.4 245.3 247.27 249.31 - 251.4 253.56 255.78 258.06 260.41 262.81 265.25 267.78 / - 11 6 9 1 206.23 196.06 194.72 194.21 194.18 194.48 195.01 195.75 196.65 197.7 198.85 200.15 - 201.58 203.11 204.75 206.45 208.28 210.2 212.22 214.28 216.46 218.72 221.02 223.43 225.92 228.44 231.06 233.76 - 236.49 239.31 242.2 245.12 248.13 251.2 254.31 257.5 / - 11 6 10 1 166.47 157.73 156.45 156.38 156.83 157.71 158.84 160.26 161.9 163.74 165.74 167.91 - 170.23 172.69 175.28 177.99 180.82 183.76 186.8 190.17 193.41 196.74 200.16 203.66 207.23 210.88 214.59 218.38 - 222.66 226.6 230.56 234.56 238.59 242.68 246.82 251 / - 11 6 11 1 122.36 120.31 120.45 121.55 123.26 125.35 127.75 130.39 133.28 136.32 139.59 143.02 - 146.54 150.26 154.12 158.13 162.14 166.39 170.76 175.07 179.64 184.33 188.89 193.76 198.73 203.52 208.64 213.56 - 218.84 223.88 229.31 234.48 240.06 245.34 251.07 256.46 / - 11 6 12 1 96.38 98.18 100.79 103.92 107.22 110.69 114.3 118.07 122.01 126.11 130.36 134.76 - 139.31 144.01 148.85 153.83 158.94 164.29 170.37 176.36 182.2 188.3 194.36 200.57 206.81 213.16 219.6 226.15 - 232.8 239.55 246.39 253.33 260.32 267.4 274.62 281.51 / - 11 6 13 1 89.19 92.8 96.36 100.12 104.27 108.74 113.47 118.46 123.69 129.14 134.81 140.69 - 146.79 153.09 159.6 166.3 173.15 180.13 187.26 194.54 201.98 209.56 217.29 225.16 233.17 241.32 249.6 258.01 - 267.12 276.95 286.54 296.08 305.88 315.52 325.24 335.15 / - 11 6 14 1 85.34 90.56 95.34 100.48 106.1 112.18 118.72 125.73 133.17 140.98 149.14 157.63 - 166.43 175.52 184.9 194.56 204.49 214.69 225.16 235.87 246.83 258.04 269.46 281.03 292.75 304.63 316.7 328.96 - 341.4 354.04 366.87 379.89 393.11 406.52 420.56 435.71 / - 11 6 15 1 81.74 89.12 96.88 105.19 114.16 123.86 134.3 145.43 157.2 169.52 182.37 195.74 - 209.57 223.86 238.56 253.66 269.17 285.09 301.43 318.17 335.33 352.9 370.9 389.31 408.13 427.25 446.66 466.38 - 486.43 506.83 527.6 548.74 570.26 592.18 614.48 638.71 / - 11 6 16 1 80.91 92.22 106.04 121.52 138.27 156.11 173.89 193.59 214.18 234 255.86 278.78 - 302 326.25 351.33 377.11 402.02 429.24 457.16 485.83 515.25 545.45 576.41 608.07 640.38 673.5 707.45 742.13 - 777.55 813.77 851.3 890.44 929.91 970.19 1010.52 1049.18 / - 11 6 17 1 84.06 110.17 137.85 166.05 195.31 226.04 258.56 292.36 327.57 364.14 403.68 443.05 - 485.56 529.71 573.43 620.29 668.79 718.98 771.03 825.39 881.59 938.84 997.59 1057.17 1120.26 1183.18 1243.59 1297.87 - 1350.2 1402.87 1456.61 1512.96 1569.6 1627.77 1689.52 1748.47 / - 11 6 18 1 105.59 150.32 198.74 249.16 301.89 357.89 417.39 480.68 548.03 619.19 693.61 772.67 - 856.24 944.31 1036.24 1130.89 1227.07 1316.48 1403.14 1493.8 1584.49 1677.47 1775.05 1872.91 1971.62 2072.95 2174.13 2279.93 - 2382.1 2490.33 2599.71 2710.41 2825.72 2939.65 3055.02 3178.54 / - 11 6 19 1 144.4 219.06 301.34 394.71 496.8 606.58 726.96 857.31 998.55 1148.52 1300.08 1445.83 - 1593.1 1755.54 1914.49 2080.08 2252.99 2438.2 2621.66 2811.24 3003.56 3206.13 3411.22 3625.57 3836.41 4055.45 4275.66 4510.42 - 4747.7 4978.74 5223.56 5462.57 5715.32 5982.01 6233.54 6501.16 / - 11 6 20 1 209.69 329.53 463.88 649.93 863.49 1102.81 1353.99 1603.59 1868.45 2146.81 2443.09 2758.78 - 3097.29 3428.95 3803.55 4165.48 4544.84 4976.07 5390.82 5813.85 6259.36 6716.3 7194.79 7680.24 8180.08 8704.9 9227.12 9742.86 - 10308.64 10871.03 11449.03 12042.26 12649.61 13272.45 13916.79 14573.01 / - 11 7 1 1 242.66 242.16 242.09 242.22 242.48 242.83 243.27 243.78 244.37 245.01 245.73 246.5 - 247.34 248.23 249.19 250.2 251.27 252.4 253.59 254.83 256.13 257.49 258.9 260.37 261.89 263.47 265.11 266.8 - 268.54 270.35 272.2 274.11 276.08 278.1 280.18 282.31 / - 11 7 2 1 242.56 242.05 241.98 242.11 242.36 242.72 243.15 243.67 244.25 244.9 245.61 246.38 - 247.22 248.12 249.07 250.08 251.16 252.29 253.47 254.72 256.02 257.37 258.79 260.25 261.78 263.36 265 266.69 - 268.44 270.24 272.1 274.01 275.98 278 280.08 282.22 / - 11 7 3 1 242.39 241.86 241.78 241.9 242.15 242.5 242.94 243.45 244.03 244.68 245.39 246.17 - 247 247.9 248.85 249.87 250.94 252.07 253.26 254.5 255.8 257.16 258.58 260.05 261.57 263.16 264.8 266.49 - 268.24 270.04 271.91 273.82 275.79 277.82 279.9 282.04 / - 11 7 4 1 242.06 241.5 241.41 241.52 241.77 242.11 242.55 243.06 243.64 244.28 244.99 245.77 - 246.61 247.5 248.46 249.47 250.55 251.68 252.87 254.11 255.42 256.78 258.2 259.67 261.2 262.78 264.43 266.13 - 267.88 269.69 271.55 273.48 275.45 277.48 279.57 281.71 / - 11 7 5 1 241.43 240.82 240.7 240.8 241.04 241.38 241.81 242.32 242.89 243.54 244.25 245.03 - 245.86 246.76 247.72 248.74 249.81 250.95 252.14 253.39 254.7 256.07 257.49 258.97 260.5 262.1 263.75 265.45 - 267.21 269.03 270.91 272.84 274.82 276.87 278.96 281.12 / - 11 7 6 1 240.2 239.51 239.35 239.42 239.64 239.97 240.39 240.89 241.47 242.11 242.82 243.6 - 244.44 245.34 246.3 247.33 248.41 249.55 250.75 252.01 253.33 254.71 256.14 257.64 259.19 260.79 262.46 264.18 - 265.96 267.79 269.69 271.64 273.64 275.71 277.82 280 / - 11 7 7 1 236.83 235.42 234.85 234.74 234.85 235.1 235.47 235.94 236.49 237.13 237.85 238.63 - 239.49 240.42 241.41 242.47 243.6 244.79 246.04 247.36 248.73 250.17 251.67 253.24 254.86 256.54 258.29 260.09 - 261.95 263.88 265.86 267.9 270 272.15 274.37 276.64 / - 11 7 8 1 228.13 222.53 221.58 221.26 221.24 221.44 221.81 222.31 222.92 223.64 224.46 225.37 - 226.36 227.44 228.6 229.83 231.12 232.51 233.97 235.49 237.09 238.75 240.48 242.29 244.16 246.1 248.1 250.14 - 252.27 254.47 256.73 259.05 261.43 263.86 266.36 268.93 / - 11 7 9 1 207.02 195.88 194.49 193.94 193.92 194.23 194.78 195.53 196.45 197.52 198.73 200.07 - 201.52 203.05 204.72 206.5 208.37 210.29 212.34 214.48 216.67 218.98 221.37 223.8 226.34 228.95 231.6 234.35 - 237.16 240.02 242.96 245.97 249.02 252.15 255.34 258.57 / - 11 7 10 1 166.27 157.68 156.43 156.34 156.86 157.72 158.92 160.37 162.04 163.9 165.94 168.14 - 170.5 172.99 175.61 178.36 181.23 184.21 187.29 190.47 193.74 197.37 200.83 204.38 208 211.69 215.46 219.29 - 223.19 227.16 231.66 235.78 239.93 244.11 248.33 252.58 / - 11 7 11 1 122.42 120.5 120.64 121.76 123.49 125.62 128.06 130.77 133.64 136.77 140.07 143.47 - 147.09 150.85 154.66 158.68 162.84 167.14 171.39 175.9 180.52 185.05 189.86 194.79 199.55 204.65 209.55 214.79 - 220.13 225.23 230.72 235.94 241.59 246.92 252.32 258.17 / - 11 7 12 1 96.53 98.38 100.98 104.13 107.5 111.02 114.68 118.49 122.46 126.58 130.86 135.3 - 139.89 144.62 149.5 154.52 159.66 164.94 170.95 177.06 183.01 189.18 195.28 201.53 207.96 214.37 220.88 227.49 - 234.2 241.01 247.92 254.93 261.99 268.8 276.02 283.4 / - 11 7 13 1 89.3 92.98 96.59 100.38 104.56 109.05 113.82 118.85 124.11 129.59 135.3 141.22 - 147.35 153.69 160.24 166.99 173.88 180.91 188.09 195.42 202.9 210.53 218.31 226.24 234.3 242.51 250.84 259.31 - 267.9 277.81 287.54 297.5 307.02 316.81 326.91 336.86 / - 11 7 14 1 85.33 90.67 95.54 100.73 106.38 112.5 119.07 126.11 133.58 141.43 149.62 158.15 - 166.99 176.13 185.55 195.26 205.23 215.48 225.99 236.76 247.78 259.04 270.52 282.15 293.93 305.88 318.01 330.33 - 342.85 355.55 368.45 381.55 394.84 408.32 422 436.79 / - 11 7 15 1 81.72 89.17 97 105.37 114.39 124.14 134.61 145.77 157.58 169.94 182.83 196.24 - 210.12 224.45 239.2 254.36 269.92 285.89 302.27 319.06 336.26 353.87 371.9 390.36 409.22 428.43 447.94 467.74 - 487.87 508.35 529.19 550.4 571.99 593.98 616.33 639.04 / - 11 7 16 1 80.88 92.29 106.14 121.67 138.46 156.34 174.15 193.87 214.47 234.34 256.21 279.15 - 302.52 326.73 351.85 377.71 402.85 429.89 457.84 486.53 515.97 546.17 577.13 608.78 641.07 674.12 708.12 742.9 - 778.4 814.63 851.64 890.34 929.94 970.51 1011.26 1050.2 / - 11 7 17 1 83.93 110.16 137.89 166.15 195.54 226.2 258.73 292.52 327.72 364.27 403.78 443.14 - 485.71 529.79 574.76 620.34 668.76 718.83 770.73 824.95 881.06 938.77 997.17 1057.23 1119.03 1182.43 1243.78 1299.7 - 1353.46 1408.47 1463.66 1521.81 1581.2 1640.37 1703.78 1765.01 / - 11 7 18 1 105.47 150.27 198.69 249.22 302.09 358.02 417.51 480.7 547.91 618.96 693.23 772.05 - 855.35 943.15 1034.83 1129.54 1226.05 1316.27 1403.99 1495.47 1587.45 1681.58 1780.24 1879.27 1979.27 2080.59 2184.56 2291.67 - 2395.5 2505.18 2616.05 2728.35 2845.34 2960.92 3078.08 3203.05 / - 11 7 19 1 144.22 218.89 300.77 394.67 495.67 606.47 725.49 856.43 997.53 1147.17 1300.84 1440.87 - 1593.26 1748.3 1916.29 2082.88 2256.8 2443.14 2631.05 2818.7 3013.83 3215.96 3424.67 3636.83 3857.99 4082.02 4305.24 4535.53 - 4784.99 5019.95 5268.81 5511.61 5768.17 6038.75 6294.12 6565.56 / - 11 7 20 1 209.48 329.48 460.23 646.7 858.78 1095.54 1346.18 1601.09 1870.06 2149.82 2447.72 2765.32 - 3105.66 3439.43 3816.46 4182.56 4562.74 4960.69 5414.31 5840.41 6288.82 6745.25 7231.21 7725.05 8230.98 8749.8 9294.22 9818.44 - 10373.68 10963.13 11550.06 12152.46 12769.37 13407.13 14056.08 14721.89 / - 11 8 1 1 244.78 244.15 244.02 244.12 244.36 244.7 245.13 245.63 246.21 246.85 247.56 248.33 - 249.17 250.06 251.02 252.03 253.1 254.23 255.42 256.67 257.97 259.33 260.74 262.21 263.74 265.33 266.97 268.66 - 270.42 272.22 274.09 276.01 277.98 280.01 282.1 284.24 / - 11 8 2 1 244.68 244.04 243.91 244 244.24 244.58 245.01 245.51 246.09 246.73 247.44 248.21 - 249.05 249.94 250.9 251.91 252.98 254.11 255.3 256.54 257.85 259.21 260.62 262.1 263.62 265.21 266.85 268.55 - 270.3 272.11 273.98 275.9 277.87 279.9 281.99 284.13 / - 11 8 3 1 244.5 243.84 243.7 243.79 244.02 244.36 244.79 245.29 245.86 246.51 247.22 247.99 - 248.82 249.72 250.67 251.69 252.76 253.89 255.08 256.33 257.63 258.99 260.41 261.88 263.41 265 266.64 268.34 - 270.1 271.91 273.78 275.7 277.68 279.71 281.8 283.95 / - 11 8 4 1 244.16 243.47 243.31 243.4 243.62 243.96 244.38 244.88 245.45 246.1 246.81 247.58 - 248.41 249.31 250.26 251.28 252.35 253.48 254.67 255.92 257.23 258.59 260.01 261.49 263.02 264.61 266.26 267.96 - 269.72 271.54 273.41 275.34 277.32 279.36 281.46 283.61 / - 11 8 5 1 243.51 242.77 242.59 242.65 242.87 243.2 243.62 244.12 244.69 245.33 246.04 246.81 - 247.64 248.54 249.5 250.51 251.59 252.73 253.92 255.17 256.48 257.85 259.28 260.76 262.3 263.9 265.55 267.26 - 269.03 270.86 272.74 274.67 276.67 278.72 280.82 282.99 / - 11 8 6 1 242.23 241.37 241.13 241.16 241.35 241.66 242.07 242.56 243.12 243.76 244.47 245.24 - 246.08 246.98 247.94 248.96 250.04 251.19 252.39 253.65 254.98 256.36 257.8 259.29 260.85 262.46 264.13 265.86 - 267.65 269.49 271.39 273.35 275.37 277.44 279.57 281.76 / - 11 8 7 1 238.52 236.71 236 235.86 235.94 236.18 236.53 237 237.55 238.19 238.91 239.7 - 240.56 241.5 242.5 243.57 244.7 245.9 247.16 248.49 249.88 251.33 252.85 254.42 256.06 257.76 259.52 261.34 - 263.22 265.16 267.17 269.23 271.35 273.52 275.74 278.03 / - 11 8 8 1 229.39 223.04 221.96 221.59 221.55 221.73 222.09 222.59 223.21 223.94 224.77 225.69 - 226.7 227.8 228.97 230.23 231.55 232.95 234.44 236 237.63 239.33 241.07 242.91 244.82 246.79 248.83 250.92 - 253.09 255.32 257.61 259.97 262.39 264.88 267.42 270.02 / - 11 8 9 1 207.09 195.57 194.18 193.67 193.65 193.98 194.55 195.32 196.27 197.37 198.61 199.95 - 201.44 203.04 204.75 206.52 208.44 210.45 212.52 214.69 216.96 219.31 221.69 224.2 226.78 229.4 232.13 234.94 - 237.78 240.72 243.7 246.77 249.9 253.07 256.32 259.63 / - 11 8 10 1 166.04 157.64 156.43 156.35 156.85 157.78 159.01 160.49 162.11 163.99 166.05 168.27 - 170.65 173.16 175.95 178.74 181.64 184.66 187.78 191.01 194.33 197.73 201.23 205.1 208.77 212.52 216.33 220.22 - 224.17 228.19 232.27 236.87 241.1 245.43 249.77 254.13 / - 11 8 11 1 122.48 120.64 120.87 122 123.78 125.94 128.4 131.11 134.06 137.16 140.48 143.98 - 147.56 151.35 155.28 159.34 163.42 167.74 172.17 176.73 181.21 185.97 190.84 195.57 200.62 205.51 210.73 216.03 - 221.12 226.58 231.79 237.41 242.74 248.52 253.97 259.9 / - 11 8 12 1 96.69 98.58 101.21 104.41 107.83 111.38 115.07 118.91 122.91 127.07 131.39 135.86 - 140.48 145.24 150.16 155.21 160.39 165.71 171.52 177.72 183.84 190.02 196.2 202.48 208.89 215.34 221.89 228.55 - 235.3 242.16 249.12 256.18 263.33 270.54 277.84 285.29 / - 11 8 13 1 89.43 93.18 96.85 100.69 104.89 109.41 114.2 119.25 124.54 130.06 135.8 141.75 - 147.92 154.3 160.89 167.68 174.62 181.69 188.91 196.29 203.82 211.5 219.33 227.31 235.42 243.68 252.07 260.6 - 269.24 278.63 288.47 298.39 308.51 318.31 328.31 338.29 / - 11 8 14 1 85.33 90.8 95.77 101.01 106.7 112.85 119.45 126.5 134 141.88 150.11 158.67 - 167.55 176.72 186.19 195.94 205.96 216.25 226.81 237.63 248.7 260.02 271.56 283.25 295.09 307.1 319.3 331.69 - 344.27 357.04 370.01 383.18 396.54 410.1 423.85 437.8 / - 11 8 15 1 81.73 89.24 97.15 105.59 114.66 124.44 134.93 146.11 157.94 170.36 183.28 196.72 - 210.64 225.02 239.82 255.04 270.66 286.67 303.09 319.92 337.15 354.8 372.87 391.36 410.27 429.55 449.14 469.04 - 489.25 509.8 530.72 552 573.67 595.72 618.11 640.88 / - 11 8 16 1 80.86 92.36 106.26 122.01 138.64 156.55 174.39 194.13 214.74 235.65 256.54 279.49 - 302.9 327.18 352.33 378.22 403.67 430.49 458.48 487.18 516.63 546.83 577.79 609.42 641.7 674.68 708.61 743.47 - 779.06 815.36 852.38 889.59 927.9 970.53 1011.69 1050.66 / - 11 8 17 1 83.9 110.15 137.93 166.34 195.88 226.36 258.89 292.75 327.85 364.39 403.85 443.2 - 485.88 529.83 573.98 620.34 668.66 718.6 770.36 824.42 880.36 938.08 996.57 1056.5 1118.05 1181.25 1243.57 1300.9 - 1356.44 1413.87 1470.71 1530.69 1591.96 1653.11 1716.98 1781.06 / - 11 8 18 1 105.35 150.16 198.58 249.3 302.19 358.12 417.67 480.71 547.79 618.7 692.84 771.38 - 854.24 941.9 1033.3 1127.95 1224.8 1315.56 1404.22 1496.97 1590.37 1685.74 1785.6 1885.87 1987.18 2089.99 2195.43 2303.96 - 2409.44 2520.75 2633.2 2747.18 2863.05 2983.3 3102.33 3228.87 / - 11 8 19 1 144.03 218.72 300.12 393.74 495.64 606.4 725.13 854.27 993.15 1145.74 1299.46 1440.14 - 1594.31 1749.07 1917.98 2085.54 2260.52 2448.09 2637.38 2826.24 3021.97 3225.02 3436.75 3650.58 3874.42 4102.61 4330.45 4565.29 - 4819.29 5058.84 5312.19 5559.64 5820.62 6086.76 6355.38 6631.2 / - 11 8 20 1 209.29 329.45 456.58 643.54 853.55 1094.64 1345.49 1595.75 1864.78 2152.97 2452.59 2772.16 - 3091.85 3450.5 3799.36 4199.51 4581.63 4982.4 5439.17 5868.48 6320.06 6775.96 7265.1 7766.65 8277.33 8803.17 9356.75 9890.45 - 10454.67 11034.12 11650.63 12263.07 12890.4 13538.31 14171.95 14875.29 / - 11 9 1 1 246.88 246.13 245.95 246.01 246.23 246.56 246.98 247.48 248.05 248.69 249.39 250.16 - 250.99 251.89 252.84 253.85 254.93 256.06 257.25 258.49 259.8 261.16 262.58 264.05 265.58 267.17 268.82 270.52 - 272.28 274.09 275.96 277.89 279.87 281.91 284 286.15 / - 11 9 2 1 246.78 246.01 245.83 245.89 246.11 246.44 246.85 247.35 247.92 248.56 249.27 250.04 - 250.87 251.76 252.71 253.73 254.8 255.93 257.12 258.37 259.67 261.03 262.45 263.93 265.46 267.05 268.7 270.4 - 272.16 273.97 275.85 277.77 279.76 281.79 283.89 286.04 / - 11 9 3 1 246.6 245.81 245.62 245.68 245.89 246.21 246.63 247.12 247.69 248.33 249.04 249.8 - 250.64 251.53 252.48 253.5 254.57 255.7 256.89 258.14 259.45 260.81 262.23 263.71 265.24 266.83 268.48 270.18 - 271.95 273.76 275.64 277.57 279.55 281.59 283.69 285.85 / - 11 9 4 1 246.25 245.43 245.22 245.27 245.48 245.8 246.21 246.7 247.27 247.91 248.61 249.38 - 250.21 251.1 252.06 253.07 254.15 255.28 256.47 257.72 259.03 260.39 261.82 263.3 264.83 266.43 268.08 269.79 - 271.55 273.38 275.25 277.19 279.18 281.23 283.33 285.49 / - 11 9 5 1 245.59 244.71 244.47 244.5 244.7 245.01 245.42 245.91 246.47 247.11 247.81 248.58 - 249.41 250.31 251.26 252.28 253.36 254.49 255.69 256.94 258.26 259.63 261.05 262.54 264.08 265.69 267.34 269.06 - 270.83 272.66 274.55 276.5 278.5 280.55 282.67 284.84 / - 11 9 6 1 244.21 243.18 242.86 242.84 243 243.28 243.67 244.15 244.7 245.33 246.03 246.8 - 247.64 248.54 249.5 250.52 251.61 252.75 253.96 255.23 256.55 257.94 259.38 260.89 262.45 264.07 265.75 267.49 - 269.28 271.14 273.05 275.02 277.05 279.13 281.28 283.48 / - 11 9 7 1 240.15 237.97 237.13 236.92 236.95 237.15 237.49 237.94 238.48 239.11 239.82 240.61 - 241.48 242.42 243.42 244.5 245.64 246.85 248.12 249.46 250.87 252.33 253.87 255.46 257.11 258.83 260.61 262.45 - 264.36 266.32 268.34 270.43 272.57 274.77 277.04 279.36 / - 11 9 8 1 230.6 223.4 222.24 221.81 221.71 221.89 222.25 222.75 223.38 224.12 224.96 225.88 - 226.91 228.03 229.22 230.51 231.87 233.31 234.82 236.41 238.07 239.78 241.58 243.46 245.4 247.41 249.49 251.62 - 253.83 256.1 258.44 260.83 263.3 265.83 268.42 271.07 / - 11 9 9 1 207.83 195.2 193.83 193.35 193.36 193.7 194.3 195.1 196.08 197.18 198.45 199.86 - 201.38 203.03 204.74 206.59 208.55 210.56 212.71 214.95 217.22 219.63 222.11 224.63 227.27 229.98 232.72 235.57 - 238.48 241.43 244.48 247.6 250.76 254.02 257.31 260.68 / - 11 9 10 1 165.78 157.5 156.43 156.38 156.89 157.85 159.05 160.54 162.25 164.16 166.25 168.5 - 170.91 173.46 176.15 178.96 182.06 185.12 188.28 191.55 194.91 198.37 201.91 205.53 209.23 213.35 217.21 221.15 - 225.16 229.23 233.36 237.56 241.81 246.63 251.01 255.49 / - 11 9 11 1 122.64 120.83 121.05 122.23 124.04 126.23 128.72 131.49 134.43 137.6 140.96 144.42 - 148.1 151.93 155.81 159.9 164.12 168.48 172.96 177.39 182.09 186.89 191.59 196.59 201.7 206.63 211.92 216.99 - 222.41 227.62 233.2 238.53 244.28 249.73 255.63 261.2 / - 11 9 12 1 96.84 98.82 101.49 104.71 108.16 111.74 115.46 119.34 123.37 127.56 131.91 136.41 - 141.07 145.87 150.81 155.9 161.12 166.47 171.95 178.35 184.66 190.86 197.12 203.44 209.89 216.54 223.15 229.87 - 236.69 243.62 250.64 257.77 265 271.94 279.29 286.74 / - 11 9 13 1 89.58 93.41 97.14 101.01 105.22 109.76 114.59 119.66 124.99 130.54 136.31 142.3 - 148.51 154.92 161.55 168.37 175.35 182.46 189.73 197.15 204.73 212.46 220.34 228.36 236.53 244.84 253.29 261.87 - 270.58 279.41 289.32 299.39 309.5 319.79 329.87 340.01 / - 11 9 14 1 85.36 90.95 96.02 101.3 107.01 113.19 119.82 126.9 134.42 142.33 150.6 159.19 - 168.1 177.32 186.82 196.61 206.68 217.01 227.61 238.47 249.59 260.97 272.57 284.32 296.23 308.31 320.57 333.02 - 345.66 358.5 371.54 384.78 398.21 411.84 425.67 439.69 / - 11 9 15 1 81.74 89.33 97.32 105.82 114.92 124.73 135.25 146.46 158.31 170.76 183.72 197.19 - 211.15 225.56 240.41 255.69 271.35 287.42 303.88 320.74 338.01 355.7 373.79 392.31 411.25 430.59 450.27 470.26 - 490.55 511.19 532.18 553.53 575.27 597.38 619.82 642.64 / - 11 9 16 1 80.86 92.43 106.39 122.33 138.83 156.75 174.61 194.37 215 235.26 256.83 279.82 - 303.24 327.57 352.76 378.68 404.84 431.04 459.06 487.78 517.23 547.43 578.38 610.01 642.25 675.16 709 743.81 - 779.5 815.89 852.95 890.7 927.38 970.15 1011 1050.56 / - 11 9 17 1 83.86 110.13 137.96 166.62 196 226.87 259.04 292.89 327.97 364.47 403.89 443.21 - 485.85 529.81 575.29 620.27 668.51 718.32 770 823.79 879.55 937.12 995.69 1056.06 1116.75 1180.34 1242.9 1301.97 - 1359.68 1418.36 1477.89 1539.34 1602.07 1664.45 1730.9 1794.82 / - 11 9 18 1 105.24 150.1 198.52 249.3 302.27 358.22 417.74 480.75 547.64 618.4 692.39 770.67 - 853.23 940.57 1031.66 1126.09 1223.31 1316.57 1403.77 1497.03 1591.23 1688.15 1789.89 1892.11 1995.23 2099.74 2206.85 2316.92 - 2424.16 2537.14 2651.36 2767.11 2884.81 3007.01 3128.04 3256.24 / - 11 9 19 1 143.84 218.56 299.62 392.8 494.46 604.92 722.8 853.58 992.03 1139.77 1292.81 1439.36 - 1594.71 1749.83 1919.68 2089.68 2264.31 2444.32 2643.68 2833.94 3034.54 3235.81 3447.81 3664.72 3890.42 4120.68 4350.9 4589.29 - 4838.45 5092.91 5351.26 5603.76 5870.02 6140.89 6405.38 6695.73 / - 11 9 20 1 209.09 329.46 454.68 640.47 848.93 1087.39 1339.3 1591.08 1861.99 2156.28 2457.83 2779.39 - 3101.17 3462.26 3813.72 4216.6 4601.68 5005.47 5419.46 5898.32 6353.28 6812.91 7301.34 7808.36 8311.79 8855.74 9398.37 9955.8 - 10529.95 11120.22 11747.98 12371.69 13010.5 13669.77 14316 15015.48 / - 11 10 1 1 248.97 248.1 247.86 247.9 248.1 248.42 248.83 249.32 249.88 250.52 251.22 251.98 - 252.81 253.71 254.66 255.67 256.74 257.87 259.06 260.31 261.62 262.98 264.4 265.88 267.42 269.01 270.66 272.36 - 274.13 275.95 277.82 279.76 281.74 283.79 285.89 288.05 / - 11 10 2 1 248.87 247.98 247.75 247.78 247.98 248.29 248.7 249.19 249.75 250.39 251.09 251.85 - 252.68 253.57 254.53 255.54 256.61 257.74 258.93 260.18 261.49 262.85 264.27 265.75 267.29 268.88 270.53 272.24 - 274 275.83 277.7 279.64 281.63 283.67 285.78 287.93 / - 11 10 3 1 248.68 247.77 247.53 247.56 247.75 248.06 248.46 248.95 249.51 250.15 250.85 251.61 - 252.44 253.34 254.29 255.3 256.37 257.51 258.7 259.95 261.25 262.62 264.04 265.52 267.06 268.65 270.31 272.02 - 273.78 275.6 277.48 279.42 281.41 283.46 285.57 287.73 / - 11 10 4 1 248.32 247.38 247.12 247.14 247.32 247.63 248.03 248.51 249.08 249.71 250.41 251.17 - 252 252.89 253.85 254.86 255.93 257.07 258.26 259.51 260.82 262.19 263.61 265.1 266.64 268.24 269.89 271.6 - 273.37 275.2 277.09 279.03 281.02 283.08 285.19 287.36 / - 11 10 5 1 247.64 246.63 246.34 246.34 246.52 246.81 247.21 247.69 248.25 248.88 249.58 250.34 - 251.17 252.07 253.02 254.04 255.11 256.25 257.45 258.7 260.01 261.39 262.82 264.31 265.86 267.46 269.12 270.84 - 272.62 274.46 276.35 278.3 280.31 282.38 284.5 286.68 / - 11 10 6 1 246.12 244.91 244.5 244.43 244.55 244.81 245.18 245.64 246.18 246.81 247.5 248.26 - 249.1 249.99 250.95 251.98 253.07 254.21 255.43 256.7 258.03 259.42 260.87 262.38 263.95 265.58 267.27 269.02 - 270.83 272.69 274.61 276.59 278.63 280.73 282.89 285.1 / - 11 10 7 1 241.7 238.95 238.05 237.79 237.79 237.98 238.31 238.75 239.29 239.92 240.64 241.43 - 242.3 243.25 244.26 245.35 246.51 247.73 249.02 250.37 251.79 253.27 254.82 256.43 258.11 259.85 261.65 263.51 - 265.43 267.42 269.47 271.58 273.75 275.98 278.27 280.6 / - 11 10 8 1 231.75 223.57 222.34 221.86 221.77 221.92 222.27 222.77 223.4 224.15 225.01 225.96 - 227.01 228.15 229.37 230.68 232.04 233.52 235.06 236.68 238.38 240.16 242 243.92 245.87 247.92 250.05 252.24 - 254.49 256.81 259.18 261.63 264.15 266.73 269.37 272.06 / - 11 10 9 1 208.55 194.82 193.43 192.98 193.03 193.41 194.03 194.86 195.87 197.03 198.32 199.76 - 201.33 202.97 204.76 206.66 208.67 210.73 212.92 215.21 217.54 220 222.54 225.12 227.82 230.55 233.39 236.31 - 239.25 242.3 245.41 248.55 251.78 255.07 258.39 261.81 / - 11 10 10 1 165.98 157.47 156.35 156.34 156.94 157.87 159.14 160.66 162.4 164.33 166.45 168.74 - 171.18 173.76 176.48 179.33 182.3 185.39 188.58 192.09 195.5 199 202.59 206.26 210.01 213.84 218.11 222.1 - 226.16 230.28 234.47 238.72 243.03 247.4 252.36 256.86 / - 11 10 11 1 122.71 120.98 121.28 122.49 124.33 126.55 129.07 131.83 134.84 138.05 141.38 144.93 - 148.65 152.43 156.43 160.56 164.82 169.08 173.59 178.22 182.96 187.62 192.56 197.62 202.52 207.76 212.81 218.23 - 223.71 228.97 234.62 240.01 245.82 251.33 257.3 262.93 / - 11 10 12 1 97.01 99.09 101.78 105.01 108.49 112.11 115.87 119.77 123.84 128.06 132.44 136.97 - 141.66 146.49 151.47 156.59 161.85 167.24 172.75 178.93 185.38 191.7 198 204.39 210.88 217.51 224.16 230.92 - 237.79 244.76 251.83 259.01 266.29 273.67 281.1 288.63 / - 11 10 13 1 89.73 93.67 97.44 101.34 105.56 110.13 114.97 120.08 125.43 131.02 136.83 142.85 - 149.1 155.55 162.2 169.07 176.08 183.24 190.54 198.01 205.63 213.41 221.33 229.41 237.63 245.99 254.49 263.13 - 271.89 280.78 290.13 300.27 310.54 320.81 331.07 341.36 / - 11 10 14 1 85.4 91.14 96.28 101.59 107.34 113.54 120.2 127.3 134.85 142.79 151.09 159.72 - 168.66 177.91 187.45 197.27 207.38 217.75 228.39 239.29 250.45 261.87 273.54 285.36 297.34 309.48 321.8 334.32 - 347.03 359.93 373.04 386.34 399.85 413.55 427.45 441.55 / - 11 10 15 1 81.78 89.46 97.5 106.05 115.19 125.02 135.57 146.8 158.67 171.15 184.15 197.65 - 211.64 226.09 240.97 256.29 272.01 288.12 304.63 321.53 338.83 356.54 374.67 393.21 412.17 431.54 451.3 471.37 - 491.76 512.48 533.54 554.97 576.77 598.95 621.42 644.3 / - 11 10 16 1 80.87 92.54 106.59 122.48 139 156.96 175.42 194.59 215.23 236.5 257.09 280.1 - 303.71 327.9 353.14 379.08 405.26 431.5 459.56 488.31 517.76 547.95 578.89 610.5 642.71 675.56 709.3 744 - 779.63 816.12 853.28 891.1 927.15 968.8 1010.43 1052.22 / - 11 10 17 1 83.83 110.1 138.13 166.68 196.09 226.99 259.14 293 328.06 364.52 403.88 443.17 - 485.77 529.69 575.27 620.13 668.29 718.07 769.45 823.05 878.61 935.97 994.48 1054.96 1115.77 1178.36 1241.63 1302.52 - 1362.07 1422.53 1483.28 1546.31 1610.46 1674.36 1742.58 1807.98 / - 11 10 18 1 105.12 150.08 198.45 249.28 302.34 358.36 417.77 480.72 547.47 618.05 691.9 769.92 - 852.16 939.14 1029.88 1124.06 1221.46 1315.27 1404.87 1496.68 1591.52 1690.02 1791.59 1894.83 1999.62 2106.25 2215.96 2328.61 - 2438.34 2553.58 2670.15 2788.07 2907.9 3032.19 3155.46 3285.44 / - 11 10 19 1 143.66 218.41 299.14 392.75 494.46 604.83 722.4 851.91 990.87 1138.21 1291.24 1438.5 - 1594.59 1750.61 1922.32 2093.79 2268.19 2449.51 2650.2 2841.99 3044.13 3245.77 3460.74 3679.42 3904.44 4139.31 4371.81 4612.16 - 4863.49 5121.06 5383.94 5641.99 5914.17 6190.71 6460.51 6756.57 / - 11 10 20 1 208.9 329.52 454.78 634.52 844.5 1080.17 1331.36 1584.25 1859.51 2147.89 2449.94 2771.65 - 3111.23 3474.73 3829.07 4234.94 4623.03 5030.09 5447.57 5930.19 6388.78 6852.4 7340.34 7848.01 8363.78 8912 9459.12 10010.29 - 10600.65 11197.76 11813.45 12468.62 13120.03 13793.24 14455.17 15168.5 / - 11 11 1 1 251.02 250.05 249.77 249.78 249.97 250.27 250.67 251.15 251.71 252.34 253.04 253.8 - 254.63 255.52 256.47 257.48 258.55 259.68 260.87 262.12 263.43 264.79 266.22 267.7 269.24 270.83 272.49 274.2 - 275.97 277.79 279.67 281.61 283.61 285.66 287.77 289.93 / - 11 11 2 1 250.91 249.93 249.65 249.66 249.84 250.14 250.53 251.02 251.57 252.2 252.9 253.66 - 254.49 255.38 256.33 257.34 258.42 259.55 260.74 261.99 263.29 264.66 266.08 267.57 269.11 270.7 272.36 274.07 - 275.84 277.66 279.55 281.49 283.48 285.54 287.65 289.81 / - 11 11 3 1 250.72 249.72 249.42 249.42 249.6 249.9 250.29 250.77 251.33 251.96 252.65 253.42 - 254.24 255.13 256.08 257.1 258.17 259.3 260.49 261.74 263.05 264.42 265.84 267.33 268.87 270.46 272.12 273.83 - 275.61 277.43 279.32 281.26 283.26 285.32 287.43 289.6 / - 11 11 4 1 250.36 249.31 249 248.99 249.16 249.45 249.84 250.32 250.87 251.5 252.2 252.96 - 253.78 254.67 255.62 256.64 257.71 258.84 260.04 261.29 262.6 263.97 265.4 266.88 268.43 270.03 271.69 273.41 - 275.18 277.01 278.9 280.85 282.85 284.92 287.03 289.21 / - 11 11 5 1 249.65 248.54 248.2 248.17 248.32 248.61 248.99 249.46 250.02 250.64 251.33 252.1 - 252.92 253.81 254.77 255.78 256.86 257.99 259.19 260.44 261.76 263.13 264.57 266.06 267.61 269.22 270.89 272.61 - 274.4 276.24 278.14 280.09 282.11 284.18 286.31 288.5 / - 11 11 6 1 247.95 246.55 246.04 245.9 245.98 246.21 246.56 247.01 247.54 248.15 248.84 249.6 - 250.43 251.33 252.29 253.31 254.4 255.56 256.77 258.05 259.39 260.78 262.24 263.76 265.35 266.99 268.69 270.45 - 272.27 274.15 276.08 278.08 280.13 282.25 284.42 286.65 / - 11 11 7 1 243.17 240.01 238.84 238.53 238.5 238.67 238.98 239.41 239.95 240.58 241.3 242.1 - 242.98 243.94 244.96 246.06 247.23 248.46 249.77 251.14 252.58 254.08 255.65 257.29 258.94 260.7 262.53 264.41 - 266.37 268.38 270.46 272.6 274.79 277.05 279.38 281.76 / - 11 11 8 1 232.82 223.73 222.29 221.77 221.65 221.8 222.14 222.64 223.28 224.05 224.92 225.89 - 226.97 228.13 229.35 230.69 232.12 233.62 235.2 236.87 238.6 240.39 242.27 244.23 246.26 248.36 250.53 252.74 - 255.05 257.42 259.86 262.36 264.91 267.55 270.24 273 / - 11 11 9 1 208.45 194.27 193 192.59 192.68 193.09 193.75 194.62 195.65 196.85 198.19 199.66 - 201.25 202.98 204.79 206.74 208.76 210.89 213.13 215.47 217.86 220.37 222.94 225.61 228.37 231.16 234.07 237.05 - 240.06 243.18 246.32 249.57 252.88 256.22 259.65 263.11 / - 11 11 10 1 165.66 157.46 156.36 156.37 156.93 157.93 159.23 160.78 162.48 164.43 166.57 168.97 - 171.44 174.06 176.82 179.71 182.72 185.85 189.08 192.42 195.86 199.64 203.28 207 210.8 214.69 218.64 222.67 - 227.16 231.34 235.59 239.9 244.27 248.69 253.18 257.73 / - 11 11 11 1 122.87 121.18 121.47 122.72 124.59 126.85 129.39 132.21 135.21 138.44 141.86 145.38 - 149.12 153.01 156.95 161.12 165.4 169.82 174.37 178.88 183.65 188.54 193.53 198.4 203.59 208.62 213.99 219.47 - 224.71 230.33 235.71 241.49 246.99 252.94 258.57 264.67 / - 11 11 12 1 97.2 99.37 102.08 105.33 108.84 112.49 116.28 120.22 124.31 128.56 132.97 137.53 - 142.25 147.12 152.13 157.29 162.58 168 173.55 179.37 185.89 192.45 198.87 205.35 211.87 218.54 225.42 232.24 - 239.17 246.21 253.35 260.6 267.95 275.02 282.55 290.14 / - 11 11 13 1 89.9 93.94 97.75 101.68 105.92 110.5 115.37 120.51 125.89 131.5 137.34 143.4 - 149.68 156.17 162.86 169.76 176.82 184.01 191.36 198.87 206.53 214.35 222.32 230.45 238.72 247.13 255.68 264.37 - 273.19 282.14 291.21 300.76 311.49 321.96 332.38 342.61 / - 11 11 14 1 85.48 91.34 96.55 101.89 107.66 113.89 120.58 127.7 135.27 143.24 151.57 160.23 - 169.21 178.49 188.07 197.93 208.06 218.47 229.14 240.08 251.28 262.74 274.45 286.35 298.4 310.61 322.99 335.57 - 348.35 361.32 374.49 387.86 401.44 415.21 429.18 443.35 / - 11 11 15 1 81.85 89.6 97.7 106.29 115.45 125.31 135.88 147.13 159.03 171.53 184.57 198.1 - 212.11 226.59 241.5 256.84 272.61 288.77 305.32 322.26 339.59 357.33 375.47 394.03 413 432.39 452.19 472.35 - 492.83 513.64 534.78 556.28 578.14 600.37 622.9 645.83 / - 11 11 16 1 80.9 92.65 106.76 122.63 139.17 157.15 175.76 194.8 215.45 236.73 257.32 280.34 - 303.97 328.16 353.44 379.41 404.99 431.86 459.97 488.74 518.2 548.38 579.29 610.88 643.07 675.85 709.48 744.06 - 779.57 815.98 853.25 891.16 929.57 968.29 1009.46 1050.82 / - 11 11 17 1 83.79 110.08 138.13 166.73 196.16 227.07 259.21 293.06 328.1 364.51 403.81 443.05 - 485.6 529.47 575.05 619.88 667.97 717.61 768.88 822.19 877.52 934.65 992.93 1053.47 1114.42 1176.54 1240.58 1299.63 - 1355.99 1413.45 1470.69 1529.89 1590.69 1650.35 1715.8 1776.29 / - 11 11 18 1 104.99 150.04 198.31 249.25 302.42 358.4 417.77 480.66 547.23 617.6 691.35 769.11 - 851.01 937.62 1027.98 1121.85 1218.02 1313.72 1403.94 1496.35 1593.36 1692.65 1792.31 1897.31 2002.88 2110.4 2219.34 2335.15 - 2449.7 2564.56 2684.09 2805.26 2928.25 3052.5 3181.82 3314.88 / - 11 11 19 1 143.47 218.28 298.46 391.82 493.25 603.36 722.02 850.17 989.66 1136.56 1289.7 1437.68 - 1587.91 1751.44 1916.31 2096.69 2272.3 2455 2657.07 2850.53 3054.24 3257.79 3473 3694.37 3922 4159.07 4394.02 4636.44 - 4889.99 5140.06 5408.05 5676.17 5951.84 6233.12 6508.44 6801.39 / - 11 11 20 1 208.73 329.65 455.07 628.4 835.5 1073.01 1323.61 1584.89 1857.26 2151.77 2455.81 2779.76 - 3122.14 3462.61 3845.64 4224.02 4646.1 5056.52 5477.79 5921.62 6427.11 6894.88 7386.89 7893.99 8414.41 8957.63 9524.49 10082.51 - 10657.59 11278.49 11899.53 12539.01 13217.96 13897.29 14567.28 15290.7 / - 11 12 1 1 253.02 251.97 251.66 251.65 251.82 252.11 252.5 252.97 253.53 254.15 254.85 255.61 - 256.43 257.32 258.27 259.28 260.35 261.48 262.67 263.92 265.23 266.6 268.02 269.51 271.05 272.65 274.31 276.02 - 277.79 279.62 281.51 283.45 285.45 287.51 289.63 291.8 / - 11 12 2 1 252.91 251.85 251.53 251.52 251.68 251.97 252.36 252.83 253.39 254.01 254.71 255.47 - 256.29 257.18 258.13 259.14 260.21 261.34 262.53 263.78 265.09 266.46 267.88 269.37 270.91 272.51 274.17 275.88 - 277.66 279.49 281.38 283.32 285.33 287.39 289.5 291.68 / - 11 12 3 1 252.72 251.63 251.3 251.28 251.44 251.72 252.11 252.58 253.13 253.76 254.45 255.21 - 256.03 256.92 257.87 258.88 259.95 261.08 262.27 263.52 264.83 266.2 267.63 269.12 270.66 272.26 273.92 275.64 - 277.42 279.25 281.14 283.09 285.09 287.16 289.28 291.45 / - 11 12 4 1 252.34 251.22 250.87 250.83 250.98 251.26 251.64 252.11 252.66 253.28 253.97 254.73 - 255.55 256.44 257.39 258.4 259.47 260.61 261.8 263.05 264.36 265.74 267.17 268.65 270.2 271.81 273.47 275.19 - 276.97 278.81 280.7 282.66 284.67 286.74 288.86 291.04 / - 11 12 5 1 251.63 250.42 250.03 249.98 250.11 250.38 250.76 251.22 251.77 252.38 253.07 253.83 - 254.65 255.54 256.49 257.51 258.58 259.72 260.91 262.17 263.49 264.86 266.3 267.79 269.35 270.96 272.63 274.36 - 276.15 277.99 279.9 281.86 283.88 285.96 288.1 290.3 / - 11 12 6 1 249.68 248.07 247.45 247.25 247.29 247.49 247.82 248.25 248.77 249.37 250.05 250.81 - 251.64 252.53 253.49 254.52 255.61 256.77 257.99 259.27 260.62 262.03 263.49 265.02 266.62 268.27 269.98 271.76 - 273.59 275.49 277.44 279.46 281.53 283.66 285.86 288.11 / - 11 12 7 1 244.51 240.71 239.56 239.09 239.03 239.18 239.48 239.91 240.44 241.08 241.8 242.61 - 243.49 244.46 245.5 246.61 247.79 249.05 250.32 251.72 253.18 254.7 256.3 257.95 259.68 261.47 263.32 265.24 - 267.22 269.26 271.37 273.54 275.77 278.07 280.42 282.84 / - 11 12 8 1 233.79 223.62 222.08 221.52 221.38 221.51 221.85 222.36 223.01 223.79 224.68 225.67 - 226.74 227.93 229.22 230.59 232.05 233.59 235.21 236.91 238.66 240.52 242.45 244.46 246.53 248.66 250.88 253.17 - 255.53 257.95 260.43 262.99 265.61 268.3 271.06 273.86 / - 11 12 9 1 209.05 193.65 192.48 192.15 192.3 192.76 193.47 194.37 195.44 196.68 198.05 199.56 - 201.19 202.96 204.82 206.79 208.89 211.07 213.35 215.72 218.2 220.75 223.38 226.1 228.92 231.77 234.75 237.79 - 240.87 244.06 247.28 250.6 253.99 257.4 260.91 264.45 / - 11 12 10 1 165.3 157.33 156.37 156.4 156.98 158.01 159.27 160.83 162.62 164.6 166.77 169.11 - 171.6 174.24 177.03 180.09 183.14 186.31 189.59 192.97 196.45 200.03 203.97 207.75 211.6 215.53 219.54 223.62 - 227.78 232.42 236.72 241.08 245.51 250 254.55 259.16 / - 11 12 11 1 122.95 121.32 121.7 122.98 124.88 127.17 129.75 132.56 135.63 138.89 142.28 145.89 - 149.66 153.5 157.57 161.78 166.1 170.44 175 179.7 184.52 189.26 194.29 199.42 204.42 209.74 215.18 220.4 - 226.01 231.38 237.13 242.63 248.54 254.17 260.25 266 / - 11 12 12 1 97.42 99.66 102.4 105.66 109.19 112.88 116.7 120.67 124.79 129.07 133.51 138.1 - 142.85 147.75 152.8 157.98 163.31 168.77 174.36 180.07 186.49 193.19 199.62 206.26 212.87 219.57 226.42 233.28 - 240.26 247.34 254.54 261.83 269.24 276.74 284.36 292.03 / - 11 12 13 1 90.12 94.23 98.08 102.03 106.28 110.89 115.79 120.94 126.35 131.99 137.86 143.95 - 150.26 156.78 163.51 170.45 177.55 184.79 192.17 199.72 207.43 215.29 223.3 231.47 239.79 248.25 256.85 265.59 - 274.46 283.47 292.6 301.86 311.96 322.58 333.29 343.95 / - 11 12 14 1 85.62 91.56 96.82 102.21 108 114.25 120.96 128.1 135.69 143.68 152.04 160.73 - 169.75 179.07 188.67 198.56 208.73 219.17 229.87 240.84 252.07 263.56 275.3 287.27 299.39 311.67 324.13 336.77 - 349.61 362.65 375.88 389.32 402.96 416.8 430.84 445.08 / - 11 12 15 1 81.96 89.76 97.9 106.53 115.73 125.61 136.19 147.46 159.37 171.89 184.97 198.52 - 212.56 227.06 241.99 257.36 273.14 289.34 305.94 322.91 340.27 358.03 376.19 394.76 413.74 433.13 452.94 473.15 - 493.72 514.62 535.84 557.41 579.35 601.62 624.2 647.17 / - 11 12 16 1 80.97 92.76 106.89 122.77 139.33 157.32 176.15 195 215.64 237.14 257.5 280.52 - 304.16 328.36 353.66 379.66 406.15 432.11 460.23 489.03 518.51 548.68 579.56 611.13 643.29 676 709.54 744.01 - 779.4 815.65 852.81 890.82 929.33 968.11 1007.96 1049.56 / - 11 12 17 1 83.66 110.02 138.12 166.74 196.39 227.12 259.24 293.06 328.08 364.45 403.68 442.82 - 485.33 529.13 574.68 619.51 667.55 717.06 768.15 821.25 876.34 933.19 991.2 1051.51 1112.63 1175.01 1238.41 1300.92 - 1355.82 1414.58 1472.36 1532.81 1594.04 1656.45 1722.06 1783.54 / - 11 12 18 1 104.87 149.92 198.23 249.19 302.42 358.4 417.7 480.54 546.94 617.13 690.75 768.29 - 849.85 936.05 1025.98 1119.49 1215.6 1311.58 1402.38 1495.38 1592.78 1693.01 1793.43 1899.24 2005.69 2114.19 2224.09 2341.11 - 2458.24 2572.61 2693.35 2815.86 2940.91 3067.77 3200.12 3336.76 / - 11 12 19 1 143.3 218.17 297.83 390.91 493.24 603.34 719.75 847.69 986.15 1134.85 1288.12 1436.83 - 1588.12 1752.38 1918.28 2099.76 2276.8 2460.92 2649.58 2859.61 3065.13 3270.67 3486.18 3710.43 3940.83 4172.79 4417.68 4662.55 - 4918.34 5171.03 5441.63 5712.62 5991.52 6275.49 6553.8 6849.87 / - 11 12 20 1 208.58 329.87 455.68 624.06 830.55 1066.02 1316.72 1576.89 1852.8 2147.82 2462.33 2788.8 - 3115.37 3477.47 3863.56 4245.27 4636.22 5085.28 5510.47 5958.34 6468.76 6940.86 7437.31 7949.21 8469.52 9017.5 9580.18 10164.53 - 10739.01 11345.48 11992.29 12637.8 13301.39 14009.63 14686.86 15401.36 / - 11 13 1 1 254.95 253.86 253.52 253.5 253.65 253.93 254.31 254.78 255.33 255.95 256.64 257.4 - 258.22 259.11 260.06 261.07 262.14 263.27 264.46 265.71 267.02 268.39 269.81 271.3 272.84 274.45 276.11 277.83 - 279.6 281.44 283.33 285.28 287.29 289.35 291.48 293.66 / - 11 13 2 1 254.85 253.74 253.39 253.36 253.51 253.79 254.17 254.64 255.19 255.81 256.5 257.25 - 258.08 258.96 259.91 260.92 261.99 263.12 264.31 265.56 266.87 268.24 269.67 271.16 272.7 274.3 275.97 277.69 - 279.46 281.3 283.19 285.14 287.15 289.22 291.34 293.52 / - 11 13 3 1 254.65 253.52 253.15 253.11 253.26 253.53 253.91 254.38 254.92 255.54 256.23 256.99 - 257.81 258.69 259.64 260.65 261.72 262.85 264.04 265.3 266.61 267.98 269.4 270.89 272.44 274.04 275.71 277.43 - 279.21 281.05 282.94 284.9 286.91 288.98 291.1 293.29 / - 11 13 4 1 254.27 253.09 252.7 252.65 252.78 253.05 253.43 253.89 254.43 255.05 255.73 256.49 - 257.31 258.19 259.14 260.15 261.22 262.36 263.55 264.8 266.11 267.49 268.92 270.41 271.96 273.57 275.23 276.96 - 278.74 280.59 282.49 284.44 286.46 288.54 290.67 292.86 / - 11 13 5 1 253.52 252.23 251.78 251.69 251.81 252.06 252.42 252.87 253.41 254.02 254.7 255.46 - 256.28 257.16 258.11 259.12 260.2 261.33 262.53 263.79 265.11 266.48 267.92 269.42 270.98 272.6 274.27 276.01 - 277.8 279.66 281.57 283.54 285.57 287.66 289.81 292.01 / - 11 13 6 1 251.26 249.46 248.73 248.46 248.44 248.61 248.91 249.32 249.83 250.42 251.1 251.85 - 252.67 253.57 254.53 255.56 256.66 257.82 259.05 260.34 261.7 263.12 264.6 266.15 267.75 269.42 271.15 272.94 - 274.8 276.71 278.68 280.72 282.81 284.97 287.18 289.46 / - 11 13 7 1 245.71 241.24 239.99 239.54 239.37 239.5 239.78 240.2 240.74 241.37 242.1 242.91 - 243.81 244.79 245.84 246.94 248.13 249.41 250.75 252.17 253.65 255.21 256.83 258.52 260.27 262.09 263.98 265.93 - 267.94 270.02 272.17 274.38 276.64 278.98 281.37 283.83 / - 11 13 8 1 234.64 223.35 221.72 221.11 220.94 221.07 221.41 221.92 222.58 223.38 224.29 225.31 - 226.4 227.62 228.94 230.34 231.84 233.42 235.09 236.8 238.62 240.53 242.51 244.57 246.66 248.87 251.15 253.49 - 255.91 258.37 260.92 263.55 266.23 268.99 271.79 274.67 / - 11 13 9 1 208.79 193.29 192.12 191.8 191.95 192.43 193.15 194.08 195.19 196.46 197.87 199.43 - 201.11 202.92 204.84 206.87 209 211.23 213.56 215.99 218.52 221.13 223.82 226.6 229.47 232.41 235.45 238.55 - 241.71 244.95 248.28 251.63 255.1 258.59 262.18 265.83 / - 11 13 10 1 164.9 157.31 156.3 156.37 157.04 158.03 159.36 160.95 162.76 164.78 166.97 169.34 - 171.87 174.55 177.37 180.32 183.4 186.77 190.09 193.52 197.05 200.68 204.4 208.2 212.4 216.39 220.45 224.59 - 228.8 233.07 237.42 242.29 246.78 251.33 255.94 260.61 / - 11 13 11 1 123.12 121.52 121.88 123.21 125.15 127.47 130.07 132.95 136 139.29 142.76 146.34 - 150.14 154.09 158.19 162.33 166.69 171.18 175.78 180.36 185.21 190.18 195.26 200.21 205.49 210.87 216.07 221.64 - 226.99 232.74 238.55 244.11 250.1 255.78 261.94 267.75 / - 11 13 12 1 97.66 99.96 102.72 106.01 109.57 113.29 117.14 121.14 125.29 129.6 134.06 138.69 - 143.46 148.39 153.47 158.69 164.05 169.54 175.16 180.91 186.92 193.71 200.4 207.16 213.86 220.6 227.48 234.32 - 241.63 248.78 256.04 263.41 270.52 278.08 285.75 293.53 / - 11 13 13 1 90.35 94.53 98.42 102.4 106.67 111.3 116.22 121.4 126.83 132.5 138.4 144.52 - 150.85 157.4 164.16 171.12 178.27 185.56 192.98 200.57 208.31 216.21 224.27 232.48 240.84 249.35 258 266.78 - 275.71 284.77 293.96 303.27 312.72 323.04 333.9 344.85 / - 11 13 14 1 85.78 91.8 97.12 102.53 108.35 114.63 121.35 128.51 136.12 144.13 152.51 161.23 - 170.26 179.61 189.25 199.18 209.37 219.84 230.56 241.56 252.81 264.32 276.09 288.11 300.31 312.66 325.18 337.89 - 350.79 363.89 377.19 390.69 404.39 418.3 432.41 446.72 / - 11 13 15 1 82.09 89.93 98.12 106.79 116.01 125.91 136.5 147.78 159.7 172.23 185.33 198.92 - 212.98 227.49 242.44 257.81 273.61 289.81 306.43 323.45 340.85 358.62 376.8 395.37 414.35 433.73 453.52 473.72 - 494.33 515.32 536.64 558.29 580.3 602.6 625.24 648.26 / - 11 13 16 1 81.06 92.89 107.02 122.92 139.84 157.48 176.44 195.17 215.81 237.29 257.64 280.64 - 304.27 328.49 353.76 379.79 406.04 432.22 460.32 489.12 518.61 548.78 579.64 611.18 643.3 675.96 709.44 743.81 - 779.08 815.21 852.21 890.1 928.26 965.69 1007.66 1047.95 / - 11 13 17 1 83.63 109.99 138.11 166.74 196.48 227.13 259.23 292.97 327.97 364.97 403.45 443.66 - 484.9 528.64 574.12 618.94 666.96 716.41 767.34 820.26 875.14 931.76 989.5 1049.55 1110.51 1173.43 1236.69 1298.43 - 1354.99 1414.36 1474.02 1535.31 1597.68 1662.39 1726.77 1790.8 / - 11 13 18 1 104.75 149.88 198.14 249.11 302.33 358.34 417.55 480.28 546.55 616.53 690.02 767.44 - 848.75 934.57 1024.12 1117.27 1213.4 1309.4 1400.79 1494.44 1592.41 1693.15 1794.54 1901.12 2008.45 2117.87 2228.85 2346.74 - 2465.03 2580.81 2702.73 2826.49 2952.89 3081.18 3217.97 3352.88 / - 11 13 19 1 143.13 218.11 297.46 390.04 491.96 601.72 719.48 846.94 985.09 1133.36 1286.65 1431.25 - 1588.29 1753.55 1920.53 2103.2 2281.72 2467.34 2657.79 2869.62 3076.78 3284.64 3502.24 3726.93 3960.36 4195.65 4439.31 4691.05 - 4948.87 5205.09 5477.77 5744.71 6034.1 6320.96 6603.01 6902.59 / - 11 13 20 1 208.47 330.22 456.72 617.36 822.62 1053.33 1308.76 1569.38 1850.09 2141.82 2452.67 2779 - 3128.18 3493.74 3858.93 4268.38 4663.48 5116.89 5546.39 5998.26 6457.92 6991.2 7493.03 8009.22 8530.04 9083.28 9652.27 10233.61 - 10827.61 11440.05 12071.79 12745.3 13416.84 14104.65 14814.84 15538.66 / - 11 14 1 1 256.82 255.71 255.35 255.32 255.46 255.73 256.11 256.58 257.12 257.74 258.43 259.18 - 260 260.88 261.83 262.84 263.91 265.04 266.23 267.48 268.79 270.16 271.59 273.08 274.63 276.23 277.9 279.62 - 281.4 283.24 285.13 287.09 289.1 291.17 293.3 295.49 / - 11 14 2 1 256.71 255.59 255.22 255.18 255.32 255.59 255.97 256.43 256.97 257.59 258.27 259.03 - 259.85 260.73 261.68 262.69 263.76 264.89 266.08 267.33 268.64 270.01 271.44 272.93 274.48 276.08 277.75 279.47 - 281.25 283.09 284.99 286.95 288.96 291.03 293.16 295.35 / - 11 14 3 1 256.51 255.35 254.97 254.92 255.06 255.32 255.7 256.16 256.7 257.31 258 258.75 - 259.57 260.45 261.4 262.41 263.48 264.61 265.8 267.05 268.36 269.73 271.16 272.65 274.2 275.81 277.47 279.2 - 280.98 282.83 284.73 286.69 288.7 290.78 292.91 295.1 / - 11 14 4 1 256.12 254.91 254.51 254.44 254.56 254.82 255.19 255.64 256.18 256.79 257.48 258.23 - 259.05 259.93 260.87 261.88 262.95 264.08 265.28 266.53 267.84 269.22 270.65 272.14 273.7 275.31 276.98 278.71 - 280.49 282.34 284.25 286.21 288.23 290.32 292.46 294.65 / - 11 14 5 1 255.26 253.89 253.39 253.27 253.36 253.59 253.94 254.38 254.91 255.51 256.19 256.94 - 257.76 258.64 259.59 260.6 261.67 262.81 264.01 265.27 266.59 267.97 269.42 270.92 272.48 274.11 275.79 277.54 - 279.34 281.2 283.12 285.1 287.15 289.25 291.4 293.62 / - 11 14 6 1 252.67 250.67 249.75 249.42 249.37 249.51 249.79 250.19 250.69 251.28 251.96 252.71 - 253.54 254.44 255.41 256.45 257.56 258.73 259.97 261.28 262.65 264.08 265.58 267.14 268.76 270.45 272.2 274.01 - 275.88 277.79 279.78 281.84 283.96 286.14 288.38 290.68 / - 11 14 7 1 246.74 241.56 240.21 239.62 239.48 239.58 239.85 240.27 240.8 241.44 242.17 243 - 243.91 244.9 245.98 247.13 248.35 249.61 250.98 252.42 253.94 255.53 257.18 258.9 260.69 262.55 264.48 266.47 - 268.52 270.65 272.83 275.08 277.4 279.77 282.22 284.72 / - 11 14 8 1 235.37 222.97 221.27 220.63 220.45 220.57 220.91 221.44 222.11 222.92 223.86 224.9 - 226.06 227.31 228.63 230.07 231.61 233.23 234.94 236.73 238.57 240.52 242.55 244.66 246.84 249.06 251.39 253.79 - 256.26 258.77 261.38 264.06 266.81 269.61 272.49 275.44 / - 11 14 9 1 208.78 192.94 191.77 191.45 191.61 192.1 192.84 193.79 194.92 196.21 197.65 199.23 - 200.94 202.78 204.74 206.81 208.99 211.28 213.68 216.17 218.76 221.44 224.22 227.08 230.02 233.03 236.12 239.28 - 242.52 245.85 249.23 252.68 256.22 259.82 263.47 267.19 / - 11 14 10 1 164.46 157.31 156.32 156.4 157.04 158.1 159.46 161.04 162.87 164.91 167.13 169.52 - 172.08 174.85 177.71 180.7 183.81 187.05 190.4 194.08 197.65 201.33 205.1 208.96 212.9 217.25 221.37 225.56 - 229.83 234.16 238.56 243.03 248.05 252.66 257.34 262.07 / - 11 14 11 1 123.2 121.67 122.11 123.48 125.46 127.81 130.44 133.31 136.43 139.75 143.19 146.86 - 150.69 154.59 158.72 162.99 167.4 171.8 176.44 181.19 186.09 190.91 196.01 201.23 206.57 211.73 217.26 222.58 - 228.29 234.1 239.64 245.6 251.28 257.41 263.22 269.51 / - 11 14 12 1 97.92 100.28 103.08 106.39 109.98 113.73 117.61 121.63 125.81 130.15 134.64 139.29 - 144.09 149.05 154.15 159.4 164.79 170.31 175.97 181.75 187.65 194.15 201.12 207.93 214.62 221.55 228.54 235.61 - 242.7 249.9 257.21 264.63 272.15 279.8 287.54 294.97 / - 11 14 13 1 90.63 94.87 98.79 102.79 107.09 111.73 116.67 121.88 127.33 133.03 138.95 145.09 - 151.45 158.02 164.8 171.79 178.98 186.31 193.79 201.41 209.19 217.13 225.22 233.47 241.87 250.42 259.11 267.94 - 276.92 286.02 295.27 304.64 314.14 323.76 334.31 345.42 / - 11 14 14 1 85.98 92.08 97.44 102.88 108.72 115.01 121.76 128.93 136.56 144.59 152.98 161.71 - 170.77 180.13 189.79 199.73 209.96 220.46 231.21 242.22 253.49 265.02 276.8 288.84 301.1 313.53 326.13 338.9 - 351.87 365.03 378.39 391.94 405.71 419.67 433.84 448.22 / - 11 14 15 1 82.25 90.14 98.37 107.06 116.3 126.21 136.82 148.1 160.02 172.56 185.66 199.25 - 213.33 227.87 242.82 258.2 273.99 290.19 306.8 323.82 341.23 359.04 377.22 395.79 414.77 434.12 453.89 474.05 - 494.63 515.6 536.99 558.74 580.83 603.19 625.88 648.95 / - 11 14 16 1 81.17 93.04 107.16 123.08 140.03 157.63 176.58 195.29 215.93 237.4 257.73 280.69 - 304.35 328.55 353.74 379.76 406.45 432.16 460.21 488.95 518.4 548.56 579.4 610.9 643 675.62 709.03 743.29 - 778.44 814.42 851.26 888.96 927.36 964.27 1006.46 1047.01 / - 11 14 17 1 83.71 109.97 138.1 166.71 196.43 227.09 259.14 292.8 327.73 364.43 403.09 442.71 - 484.28 527.9 573.28 618.07 666.12 715.5 766.45 819.04 873.69 930.06 987.52 1047.29 1108.36 1170.99 1234.42 1296.58 - 1353.76 1413.84 1475.81 1536.76 1601.36 1666.3 1732.14 1797.97 / - 11 14 18 1 104.65 149.77 197.92 248.99 302.15 358.13 417.27 479.82 545.92 615.72 688.98 766.3 - 847.44 932.89 1022.07 1115.1 1210.98 1306.91 1398.92 1493.29 1591.88 1693.19 1795.55 1902.91 2011.19 2121.63 2234.68 2352.6 - 2471.93 2589.27 2712.48 2837.73 2965.52 3095.24 3231.76 3369.69 / - 11 14 19 1 143 218.11 297.19 390.11 490.63 600.02 717.36 844.64 981.92 1128.03 1281.16 1430.65 - 1588.45 1756.12 1922.97 2096.08 2287.04 2474.36 2666.67 2868.08 3089.48 3299.74 3519.65 3745.16 3981.67 4220.59 4466.93 4721.59 - 4982.49 5241.67 5517.52 5788.05 6072.35 6370.58 6657.2 6959.69 / - 11 14 20 1 208.42 330.76 458.08 609.16 815.12 1043.11 1302.45 1562.87 1843.02 2142.32 2454.21 2790.43 - 3142.66 3489.98 3880.6 4294.31 4693.54 5113.08 5586.31 6042.65 6507.78 6995.02 7553.81 8075.49 8602.96 9156.86 9730.44 10316.85 - 10906.28 11543.73 12182.43 12841.08 13541.53 14237.21 14955.38 15673.32 / - 11 15 1 1 258.58 257.5 257.14 257.1 257.24 257.52 257.89 258.35 258.89 259.51 260.19 260.94 - 261.76 262.64 263.59 264.6 265.67 266.8 267.99 269.24 270.55 271.92 273.35 274.84 276.39 278 279.66 281.39 - 283.17 285.02 286.92 288.88 290.9 292.98 295.11 297.3 / - 11 15 2 1 258.47 257.37 257.01 256.96 257.1 257.37 257.74 258.2 258.74 259.35 260.03 260.78 - 261.6 262.48 263.43 264.44 265.5 266.64 267.83 269.08 270.39 271.76 273.19 274.68 276.23 277.84 279.51 281.23 - 283.02 284.86 286.77 288.73 290.75 292.83 294.96 297.16 / - 11 15 3 1 258.27 257.13 256.75 256.69 256.82 257.09 257.45 257.91 258.45 259.06 259.74 260.49 - 261.31 262.19 263.13 264.14 265.21 266.34 267.53 268.78 270.09 271.47 272.9 274.39 275.94 277.55 279.22 280.95 - 282.74 284.58 286.49 288.45 290.48 292.56 294.7 296.9 / - 11 15 4 1 257.87 256.67 256.26 256.19 256.3 256.56 256.92 257.37 257.9 258.51 259.19 259.94 - 260.76 261.64 262.58 263.59 264.66 265.79 266.98 268.24 269.55 270.92 272.36 273.85 275.41 277.02 278.7 280.43 - 282.22 284.07 285.98 287.95 289.98 292.07 294.22 296.42 / - 11 15 5 1 256.81 255.37 254.81 254.65 254.71 254.92 255.25 255.68 256.2 256.79 257.47 258.21 - 259.02 259.9 260.85 261.87 262.94 264.08 265.29 266.55 267.88 269.27 270.72 272.23 273.8 275.44 277.13 278.89 - 280.7 282.58 284.51 286.51 288.57 290.68 292.86 295.09 / - 11 15 6 1 253.87 251.67 250.49 250.11 250.03 250.14 250.41 250.79 251.29 251.87 252.54 253.3 - 254.13 255.03 256.01 257.06 258.18 259.36 260.62 261.94 263.32 264.77 266.29 267.87 269.52 271.23 273 274.83 - 276.73 278.69 280.72 282.8 284.95 287.16 289.43 291.76 / - 11 15 7 1 247.56 241.64 240.12 239.51 239.33 239.41 239.66 240.07 240.6 241.24 241.98 242.82 - 243.75 244.76 245.86 247.01 248.26 249.59 251 252.48 254.03 255.65 257.35 259.11 260.95 262.82 264.79 266.83 - 268.94 271.11 273.34 275.65 278.01 280.44 282.94 285.5 / - 11 15 8 1 235.96 222.35 220.67 220.05 219.88 220.02 220.38 220.93 221.63 222.47 223.43 224.51 - 225.67 226.96 228.35 229.83 231.41 233.08 234.8 236.64 238.57 240.57 242.62 244.79 247.03 249.35 251.71 254.18 - 256.72 259.33 261.98 264.73 267.55 270.43 273.36 276.38 / - 11 15 9 1 208.65 192.6 191.43 191.11 191.28 191.79 192.54 193.51 194.66 195.97 197.44 199.05 - 200.79 202.66 204.65 206.76 208.98 211.31 213.74 216.28 218.91 221.64 224.46 227.38 230.38 233.46 236.63 239.88 - 243.21 246.65 250.14 253.69 257.3 260.98 264.72 268.53 / - 11 15 10 1 163.99 157.3 156.33 156.43 157.09 158.14 159.52 161.16 163.01 165.08 167.33 169.75 - 172.34 175.09 177.97 180.99 184.24 187.52 190.91 194.42 198.03 201.99 205.8 209.71 213.71 217.79 221.94 226.54 - 230.87 235.26 239.72 244.25 248.85 253.51 258.75 263.55 / - 11 15 11 1 123.37 121.87 122.3 123.72 125.74 128.12 130.79 133.73 136.84 140.17 143.7 147.33 - 151.19 155.2 159.36 163.55 167.99 172.55 177.23 181.88 186.79 191.83 196.99 202.03 207.39 212.86 218.16 223.82 - 229.59 235.12 241.07 246.74 252.84 258.64 264.91 270.85 / - 11 15 12 1 98.2 100.62 103.47 106.81 110.44 114.22 118.12 122.17 126.38 130.73 135.25 139.92 - 144.75 149.73 154.86 160.13 165.54 171.1 176.78 182.59 188.52 194.58 201.61 208.59 215.55 222.45 229.44 236.52 - 243.75 251 258.35 265.82 273.41 281.1 288.9 296.82 / - 11 15 13 1 90.95 95.25 99.2 103.23 107.55 112.22 117.17 122.4 127.87 133.58 139.52 145.68 - 152.06 158.65 165.45 172.46 179.67 187.05 194.57 202.24 210.05 218.02 226.15 234.44 242.87 251.45 260.19 269.06 - 278.08 287.23 296.52 305.94 315.49 325.17 334.98 345.33 / - 11 15 14 1 86.25 92.4 97.8 103.27 109.12 115.43 122.19 129.37 137.01 145.05 153.45 162.19 - 171.26 180.63 190.29 200.24 210.48 220.98 231.76 242.79 254.08 265.61 277.4 289.43 301.72 314.23 326.9 339.75 - 352.77 365.99 379.41 393.02 406.84 420.86 435.08 449.52 / - 11 15 15 1 82.46 90.4 98.66 107.37 116.61 126.53 137.13 148.41 160.33 172.86 185.95 199.52 - 213.59 228.12 243.1 258.47 274.25 290.43 307.01 323.99 341.37 359.16 377.36 395.94 414.9 434.23 453.95 474.07 - 494.59 515.5 536.81 558.52 580.62 603.02 625.78 648.9 / - 11 15 16 1 81.32 93.21 107.33 123.23 140.3 157.76 176.69 195.37 215.97 237.42 257.73 280.65 - 304.34 328.37 353.5 379.49 406.19 432.78 459.82 488.48 517.82 547.85 578.58 610.02 642.14 674.75 708.1 742.26 - 777.27 813.1 849.76 887.3 925.72 962.37 1004.48 1045.1 / - 11 15 17 1 83.7 109.95 138.09 166.76 196.34 227.15 258.95 292.52 327.34 364.8 402.53 443.05 - 483.42 526.86 572.04 616.67 664.84 714.2 765.03 817.42 871.87 928.1 985.44 1045.03 1106.09 1167.87 1231.07 1293.45 - 1353.16 1411.92 1474.4 1537.69 1601.51 1666.67 1733.2 1799.71 / - 11 15 18 1 104.57 149.68 197.8 248.84 301.88 357.74 416.76 479.12 544.94 614.45 687.54 764.54 - 845.6 930.52 1020.08 1112.66 1208.04 1303.91 1396.59 1492.82 1590.81 1692.98 1796.32 1903.42 2013.74 2125.26 2241.63 2356.72 - 2479.02 2601.68 2722.65 2849.2 2978.69 3113.7 3247.74 3387.44 / - 11 15 19 1 142.91 218.21 296.7 389.33 490.59 599.73 717.03 843.75 979.42 1126.27 1278.91 1429.36 - 1588.24 1749.76 1925.3 2100.06 2292.46 2481.77 2676.17 2879.56 3103.04 3315.98 3538.5 3766.65 4004.02 4245.83 4496.98 4750.59 - 5018.64 5281.83 5560.92 5835.43 6123.25 6416.52 6715.95 7022.61 / - 11 15 20 1 208.46 331.54 459.94 601.57 808.47 1039.62 1288.15 1547.7 1835.34 2130.47 2452.1 2785.86 - 3136.14 3510.12 3905.07 4290.92 4727.45 5151.68 5590.81 6092.3 6563.47 7056.47 7556.47 8149.73 8684.55 9244.08 9817.4 10403.36 - 11007.48 11640 12284.71 12971.34 13656.67 14361.03 15111.12 15840.61 / - 11 16 1 1 260.25 259.22 258.88 258.85 258.99 259.26 259.64 260.1 260.64 261.25 261.93 262.68 - 263.5 264.38 265.33 266.33 267.4 268.53 269.72 270.97 272.29 273.66 275.09 276.58 278.13 279.74 281.41 283.14 - 284.93 286.78 288.68 290.65 292.67 294.75 296.9 299.1 / - 11 16 2 1 260.13 259.09 258.74 258.7 258.84 259.11 259.48 259.94 260.47 261.09 261.77 262.52 - 263.33 264.21 265.16 266.16 267.23 268.36 269.55 270.8 272.12 273.49 274.92 276.41 277.96 279.57 281.25 282.98 - 284.76 286.61 288.52 290.49 292.51 294.6 296.74 298.94 / - 11 16 3 1 259.92 258.84 258.47 258.42 258.55 258.81 259.18 259.63 260.17 260.78 261.46 262.21 - 263.02 263.9 264.84 265.85 266.92 268.05 269.24 270.49 271.8 273.18 274.61 276.1 277.66 279.27 280.94 282.67 - 284.47 286.32 288.23 290.2 292.22 294.31 296.46 298.66 / - 11 16 4 1 259.49 258.32 257.9 257.82 257.93 258.18 258.54 258.98 259.51 260.12 260.79 261.54 - 262.35 263.23 264.17 265.18 266.25 267.38 268.57 269.83 271.14 272.52 273.96 275.45 277.01 278.63 280.31 282.05 - 283.84 285.7 287.62 289.6 291.63 293.73 295.88 298.1 / - 11 16 5 1 258.13 256.6 255.99 255.78 255.8 255.98 256.29 256.71 257.21 257.8 258.47 259.21 - 260.02 260.91 261.86 262.87 263.95 265.1 266.31 267.58 268.92 270.32 271.78 273.31 274.89 276.54 278.25 280.02 - 281.86 283.75 285.7 287.72 289.8 291.93 294.13 296.39 / - 11 16 6 1 254.82 252.24 250.89 250.47 250.35 250.45 250.7 251.08 251.56 252.15 252.82 253.58 - 254.42 255.34 256.33 257.39 258.53 259.73 261.01 262.35 263.76 265.24 266.78 268.39 270.06 271.8 273.6 275.47 - 277.4 279.4 281.46 283.58 285.76 288.01 290.32 292.69 / - 11 16 7 1 248.15 241.47 239.73 239.11 238.89 238.92 239.16 239.57 240.1 240.74 241.5 242.35 - 243.3 244.34 245.46 246.67 247.95 249.32 250.76 252.28 253.85 255.52 257.26 259.07 260.96 262.91 264.92 267.01 - 269.17 271.4 273.68 276.04 278.47 280.97 283.53 286.13 / - 11 16 8 1 236.38 221.78 219.96 219.38 219.25 219.43 219.82 220.4 221.14 222.01 223.01 224.09 - 225.31 226.64 228.07 229.6 231.23 232.9 234.7 236.59 238.57 240.64 242.74 244.96 247.27 249.66 252.08 254.62 - 257.23 259.88 262.63 265.46 268.36 271.29 274.33 277.43 / - 11 16 9 1 208.57 192.27 191.09 190.78 190.96 191.48 192.25 193.24 194.41 195.74 197.24 198.87 - 200.64 202.55 204.57 206.71 208.97 211.34 213.82 216.4 219.08 221.86 224.73 227.69 230.74 233.88 237.1 240.4 - 243.79 247.25 250.79 254.4 258.09 261.85 265.68 269.62 / - 11 16 10 1 163.69 157.2 156.27 156.41 157.14 158.22 159.59 161.24 163.12 165.21 167.48 169.93 - 172.55 175.32 178.31 181.37 184.57 187.88 191.42 194.98 198.64 202.39 206.52 210.48 214.53 218.66 222.87 227.16 - 231.91 236.37 240.89 245.48 250.14 254.86 259.65 265.05 / - 11 16 11 1 123.45 122.02 122.54 124.02 126.06 128.49 131.2 134.13 137.31 140.63 144.18 147.9 - 151.78 155.74 159.92 164.24 168.71 173.18 177.9 182.73 187.67 192.76 197.75 203.05 208.47 213.73 219.34 225.06 - 230.56 236.48 242.13 248.23 254.02 260.26 266.6 272.61 / - 11 16 12 1 98.52 101.02 103.92 107.32 110.98 114.78 118.72 122.79 127.01 131.39 135.92 140.61 - 145.45 150.45 155.6 160.89 166.33 171.9 177.61 183.44 189.4 195.49 202.04 209.28 216.35 223.4 230.48 237.6 - 244.87 252.07 259.47 266.99 274.62 282.37 290.23 298.2 / - 11 16 13 1 91.35 95.7 99.68 103.73 108.08 112.77 117.75 122.99 128.47 134.2 140.15 146.32 - 152.71 159.3 166.11 173.13 180.35 187.76 195.34 203.04 210.89 218.89 227.05 235.36 243.83 252.44 261.2 270.11 - 279.17 288.36 297.69 307.15 316.75 326.48 336.34 346.33 / - 11 16 14 1 86.61 92.81 98.23 103.71 109.57 115.89 122.65 129.84 137.48 145.52 153.93 162.67 - 171.73 181.09 190.75 200.7 210.92 221.41 232.17 243.2 254.48 266.02 277.81 289.84 302.11 314.63 327.37 340.3 - 353.4 366.68 380.15 393.81 407.68 421.75 436.03 450.5 / - 11 16 15 1 82.75 90.74 99.02 107.73 116.96 126.87 137.46 148.72 160.62 173.13 186.18 199.72 - 213.76 228.25 243.18 258.53 274.29 290.45 306.99 323.92 341.23 358.95 377.07 395.59 414.51 433.83 453.52 473.58 - 494.03 514.86 536.07 557.68 579.63 601.9 624.55 647.57 / - 11 16 16 1 81.54 93.43 107.52 123.41 140.46 157.88 176.77 195.39 215.93 237.33 258.64 280.44 - 304.07 328.07 353.03 378.9 405.5 431.19 458.99 487.52 516.71 546.58 577.14 608.39 640.32 672.91 706.24 740.35 - 775.26 810.94 847.42 884.69 922.75 961.46 1000.61 1040.79 / - 11 16 17 1 83.71 109.96 138.08 166.89 196.2 227.01 258.58 292.08 326.76 364.07 401.62 442.03 - 482.21 525.43 570.37 615.28 662.72 712.13 762.93 815.18 869.38 925.17 981.9 1040.91 1101.42 1162.72 1225.65 1288.02 - 1348.16 1409.21 1470.62 1534.38 1598.83 1664.6 1731.76 1801.31 / - 11 16 18 1 104.52 149.66 197.71 248.62 301.52 357.08 415.84 478.05 543.55 612.59 685.37 762 - 842.83 927.49 1016.23 1108.2 1203.15 1300.28 1392.83 1489.35 1588.77 1691.2 1797.49 1903.63 2014.98 2128.34 2245.12 2361.68 - 2485.17 2609.23 2735.62 2863.62 2994.94 3128.32 3263.76 3405.21 / - 11 16 19 1 142.88 218.46 297.18 388.61 489.53 597.84 714.8 840.53 976.18 1122.91 1275.19 1426.71 - 1587.15 1749.61 1926.5 2103.07 2287.76 2488.37 2685.24 2890.91 3099.3 3335.93 3557.79 3789.08 4027.95 4274.74 4528.02 4786.2 - 5049.03 5325.34 5601.17 5886.86 6178.73 6476.09 6774.68 7091.19 / - 11 16 20 1 208.65 332.68 462.44 603.34 802.95 1033.11 1283.81 1541.2 1820.2 2123.36 2438.15 2784.11 - 3130.36 3503.45 3901.17 4321.61 4731.78 5194.82 5640.24 6099.06 6625.72 7125.18 7633.18 8164.28 8775.37 9341.93 9921.75 10514.74 - 11125.82 11753.78 12418.24 13095.74 13812.16 14526.26 15259.1 16013.04 / - 11 17 1 1 261.79 260.86 260.56 260.54 260.7 260.97 261.35 261.81 262.35 262.96 263.65 264.4 - 265.21 266.09 267.04 268.04 269.11 270.24 271.43 272.68 274 275.37 276.8 278.3 279.85 281.46 283.13 284.87 - 286.66 288.51 290.42 292.39 294.42 296.51 298.65 300.86 / - 11 17 2 1 261.67 260.72 260.41 260.38 260.53 260.81 261.18 261.64 262.18 262.79 263.47 264.22 - 265.03 265.91 266.86 267.86 268.93 270.06 271.25 272.5 273.82 275.19 276.62 278.12 279.67 281.28 282.96 284.69 - 286.48 288.33 290.25 292.22 294.25 296.34 298.49 300.7 / - 11 17 3 1 261.45 260.46 260.12 260.09 260.22 260.49 260.86 261.31 261.85 262.46 263.14 263.88 - 264.7 265.58 266.52 267.52 268.59 269.72 270.91 272.17 273.48 274.85 276.29 277.78 279.34 280.95 282.63 284.37 - 286.16 288.02 289.93 291.9 293.94 296.03 298.18 300.4 / - 11 17 4 1 260.86 259.7 259.27 259.18 259.28 259.51 259.86 260.3 260.82 261.42 262.1 262.84 - 263.65 264.53 265.47 266.48 267.55 268.69 269.88 271.14 272.46 273.84 275.29 276.79 278.36 279.99 281.67 283.42 - 285.23 287.1 289.03 291.02 293.07 295.18 297.35 299.57 / - 11 17 5 1 259.15 257.52 256.82 256.55 256.53 256.68 256.97 257.37 257.86 258.44 259.1 259.84 - 260.66 261.54 262.5 263.52 264.61 265.77 266.99 268.27 269.63 271.04 272.52 274.06 275.67 277.34 279.07 280.86 - 282.72 284.64 286.62 288.66 290.77 292.93 295.16 297.44 / - 11 17 6 1 255.43 252.39 250.91 250.42 250.27 250.34 250.57 250.94 251.43 252.01 252.69 253.46 - 254.31 255.25 256.26 257.34 258.5 259.73 261.03 262.4 263.85 265.36 266.93 268.58 270.29 272.07 273.91 275.82 - 277.8 279.84 281.94 284.11 286.34 288.64 291 293.42 / - 11 17 7 1 248.49 241.05 239.11 238.45 238.21 238.25 238.49 238.89 239.43 240.1 240.87 241.75 - 242.72 243.79 244.95 246.19 247.51 248.92 250.41 251.94 253.58 255.3 257.09 258.96 260.9 262.91 264.99 267.11 - 269.33 271.63 273.98 276.41 278.91 281.45 284.07 286.76 / - 11 17 8 1 236.1 220.91 219.18 218.61 218.55 218.78 219.23 219.85 220.62 221.53 222.56 223.72 - 224.98 226.36 227.79 229.37 231.04 232.8 234.66 236.56 238.59 240.71 242.92 245.16 247.53 249.98 252.46 255.07 - 257.75 260.51 263.3 266.2 269.18 272.19 275.31 278.49 / - 11 17 9 1 207.98 191.95 190.76 190.46 190.65 191.18 191.97 192.97 194.16 195.52 197.04 198.7 - 200.51 202.44 204.5 206.68 208.98 211.39 213.91 216.53 219.26 222.08 225 228.02 231.12 234.31 237.59 240.95 - 244.39 247.91 251.51 255.19 258.94 262.76 266.66 270.62 / - 11 17 10 1 163.11 157.2 156.29 156.45 157.16 158.26 159.68 161.34 163.24 165.35 167.65 170.13 - 172.78 175.62 178.58 181.67 184.99 188.35 191.83 195.54 199.25 203.06 206.97 210.96 215.35 219.54 223.8 228.15 - 232.57 237.07 242.07 246.72 251.44 256.23 261.08 266 / - 11 17 11 1 123.63 122.22 122.79 124.33 126.43 128.9 131.65 134.63 137.8 141.19 144.76 148.45 - 152.35 156.4 160.61 164.87 169.35 173.97 178.73 183.45 188.42 193.51 198.74 203.86 209.31 214.86 220.53 226 - 231.86 237.49 243.55 249.32 255.56 261.87 267.87 274.36 / - 11 17 12 1 98.91 101.5 104.48 107.96 111.66 115.5 119.45 123.54 127.77 132.16 136.7 141.4 - 146.25 151.25 156.41 161.71 167.16 172.75 178.47 184.32 190.3 196.4 202.62 209.72 216.95 224.03 231.24 238.48 - 245.76 253.19 260.55 268.45 275.79 283.59 291.5 299.53 / - 11 17 13 1 91.91 96.28 100.28 104.35 108.74 113.45 118.44 123.69 129.18 134.91 140.86 147.02 - 153.4 160 166.8 173.81 181.02 188.43 196.03 203.79 211.68 219.71 227.89 236.23 244.71 253.35 262.13 271.06 - 280.14 289.36 298.72 308.22 317.86 327.63 337.53 347.56 / - 11 17 14 1 87.15 93.37 98.78 104.25 110.11 116.42 123.16 130.36 138 146.03 154.42 163.14 - 172.18 181.52 191.15 201.07 211.26 221.72 232.44 243.42 254.66 266.15 277.89 289.87 302.11 314.59 327.31 340.27 - 353.46 366.83 380.37 394.1 408.01 422.13 436.44 450.96 / - 11 17 15 1 83.17 91.23 99.5 108.18 117.38 127.25 137.8 149.03 160.89 173.36 186.34 199.82 - 213.79 228.21 243.06 258.32 273.98 290.06 306.52 323.38 340.62 358.25 376.25 394.65 413.43 432.59 452.15 472.1 - 492.45 513.17 534.29 555.8 577.59 599.72 622.21 645.06 / - 11 17 16 1 81.87 93.75 107.77 123.62 140.62 157.98 176.8 195.34 215.8 237.1 257.46 279.95 - 303.48 327.4 352.21 377.91 404.25 430.02 457.19 485.51 514.54 544.26 574.64 605.69 637.39 669.74 702.79 736.61 - 771.18 806.51 842.6 879.46 917.09 955.33 994.01 1033.7 / - 11 17 17 1 83.87 110.05 138.11 166.73 196 226.64 258.01 291.37 325.88 363.02 400.28 440.42 - 480.28 523.27 567.96 613.27 659.61 708.73 759.16 811.04 864.66 919.91 976.02 1034.41 1094.3 1154.99 1217.47 1280.94 - 1340.23 1401.78 1464.89 1528.06 1593.64 1660.73 1727.33 1797.31 / - 11 17 18 1 104.55 149.63 197.68 248.37 300.88 356.1 414.44 476.13 541.28 609.86 682.07 758.17 - 838.2 922.24 1010.24 1101.57 1195.92 1291.58 1386.67 1484.16 1584.04 1687.87 1793.94 1903.31 2015.92 2129.86 2246.59 2364.87 - 2489.66 2615.28 2743.3 2873.64 3006.35 3141.69 3279.25 3419.15 / - 11 17 19 1 143 218.99 297.69 388.96 488.41 597.29 713.67 838.44 972.89 1115.93 1269.86 1421.96 - 1579.19 1747.87 1926.22 2104.88 2291.61 2494.28 2693.91 2902.08 3113.76 3352.41 3578.07 3812.8 4055.07 4303.76 4561.75 4824.99 - 5092.24 5373.09 5653.21 5942.86 6240.04 6542.11 6851.11 7167.71 / - 11 17 20 1 209.1 334.39 465.9 608.9 798.24 1022.92 1274.89 1528.57 1814.52 2107.59 2436.84 2770.71 - 3131.51 3519.34 3897.19 4318.04 4762.54 5196.35 5687.33 6155.89 6644.37 7199.54 7717.62 8257.97 8813.42 9382.55 10039.84 10641.19 - 11257.7 11894.99 12557.65 13248.89 13965.79 14694.76 15463.07 16222.05 / - 11 18 1 1 263.2 262.4 262.16 262.17 262.35 262.63 263.02 263.48 264.03 264.64 265.33 266.08 - 266.89 267.77 268.72 269.72 270.79 271.92 273.11 274.36 275.68 277.05 278.49 279.98 281.53 283.15 284.83 286.56 - 288.36 290.21 292.12 294.1 296.13 298.23 300.38 302.59 / - 11 18 2 1 263.07 262.25 261.99 262 262.17 262.45 262.83 263.29 263.83 264.45 265.13 265.88 - 266.69 267.57 268.52 269.52 270.59 271.72 272.91 274.16 275.48 276.85 278.29 279.78 281.34 282.95 284.63 286.37 - 288.16 290.02 291.94 293.91 295.95 298.04 300.2 302.41 / - 11 18 3 1 262.78 261.87 261.57 261.54 261.69 261.96 262.33 262.78 263.32 263.92 264.6 265.35 - 266.16 267.04 267.98 268.99 270.06 271.19 272.38 273.64 274.96 276.33 277.77 279.27 280.83 282.45 284.14 285.88 - 287.68 289.54 291.46 293.45 295.49 297.59 299.76 301.98 / - 11 18 4 1 261.86 260.68 260.23 260.1 260.18 260.4 260.74 261.17 261.68 262.28 262.95 263.69 - 264.5 265.38 266.33 267.34 268.42 269.56 270.76 272.03 273.36 274.76 276.22 277.73 279.31 280.96 282.66 284.42 - 286.25 288.14 290.09 292.1 294.17 296.3 298.49 300.75 / - 11 18 5 1 259.75 257.97 257.16 256.81 256.73 256.85 257.11 257.48 257.96 258.54 259.2 259.94 - 260.75 261.65 262.61 263.65 264.75 265.93 267.17 268.48 269.86 271.3 272.81 274.38 276.02 277.72 279.48 281.31 - 283.21 285.16 287.18 289.26 291.41 293.62 295.89 298.22 / - 11 18 6 1 255.67 252.04 250.47 249.91 249.7 249.73 249.95 250.3 250.78 251.37 252.06 252.84 - 253.71 254.67 255.7 256.81 258 259.27 260.61 262.02 263.5 265.05 266.68 268.37 270.13 271.96 273.86 275.82 - 277.86 279.96 282.12 284.35 286.65 289.01 291.43 293.92 / - 11 18 7 1 248.6 240.36 238.36 237.7 237.46 237.51 237.76 238.17 238.74 239.42 240.22 241.13 - 242.13 243.24 244.43 245.71 247.08 248.53 250.03 251.65 253.34 255.11 256.97 258.89 260.9 262.94 265.09 267.31 - 269.61 271.97 274.41 276.92 279.47 282.11 284.82 287.6 / - 11 18 8 1 236.11 219.96 218.17 217.79 217.82 218.11 218.62 219.29 220.12 221.07 222.15 223.35 - 224.65 226.07 227.58 229.2 230.9 232.71 234.59 236.6 238.65 240.83 243.1 245.4 247.83 250.35 252.89 255.57 - 258.32 261.11 264.01 267 270.05 273.14 276.34 279.61 / - 11 18 9 1 207.51 191.63 190.44 190.14 190.34 190.88 191.69 192.71 193.92 195.31 196.85 198.55 - 200.38 202.35 204.44 206.66 209 211.45 214.01 216.68 219.45 222.33 225.3 228.36 231.52 234.76 238.1 241.51 - 245.02 248.6 252.26 256 259.81 263.7 267.66 271.7 / - 11 18 10 1 162.64 157.2 156.31 156.48 157.22 158.33 159.76 161.43 163.36 165.5 167.82 170.33 - 173.04 175.88 178.87 182.05 185.33 188.72 192.35 196 199.75 203.74 207.69 211.74 215.88 220.43 224.75 229.15 - 233.63 238.19 242.81 247.97 252.75 257.6 262.52 267.51 / - 11 18 11 1 123.89 122.42 123.06 124.74 126.92 129.44 132.22 135.23 138.45 141.82 145.41 149.16 - 153.08 157.08 161.3 165.67 170.18 174.7 179.47 184.37 189.37 194.33 199.55 204.92 210.41 215.75 221.44 227.25 - 232.84 238.84 244.96 250.79 257.1 263.08 269.53 275.66 / - 11 18 12 1 99.43 102.14 105.29 108.88 112.64 116.5 120.46 124.55 128.78 133.16 137.7 142.38 - 147.23 152.22 157.37 162.67 168.1 173.69 179.4 185.25 191.24 197.34 203.57 209.92 217.4 224.6 231.99 239.21 - 246.69 254.04 261.63 269.47 277.22 285.08 292.65 300.73 / - 11 18 13 1 92.72 97.09 101.1 105.21 109.64 114.38 119.38 124.62 130.1 135.81 141.73 147.87 - 154.22 160.78 167.55 174.53 181.7 189.08 196.64 204.4 212.34 220.42 228.63 236.98 245.47 254.11 262.9 271.84 - 280.92 290.15 299.52 309.04 318.69 328.48 338.41 348.47 / - 11 18 14 1 88.01 94.2 99.54 104.98 110.82 117.1 123.81 131 138.62 146.61 154.95 163.62 - 172.61 181.89 191.47 201.32 211.44 221.82 232.47 243.37 254.52 265.92 277.57 289.46 301.58 313.95 326.55 339.39 - 352.47 365.79 379.35 393.15 407.17 421.37 435.75 450.32 / - 11 18 15 1 83.87 91.99 100.22 108.79 117.91 127.7 138.19 149.34 161.14 173.48 186.36 199.75 - 213.6 227.9 242.61 257.72 273.24 289.15 305.44 322.11 339.16 356.59 374.42 392.63 411.23 430.22 449.58 469.32 - 489.42 509.9 530.75 551.96 573.45 595.3 617.52 640.12 / - 11 18 16 1 82.41 94.27 108.07 123.91 140.39 158.06 176.78 195.15 215.51 236.67 257.68 279.13 - 302.46 326.11 350.56 375.87 401.85 427.27 454.09 482.06 510.7 540.01 569.99 600.66 632.01 664.03 696.75 730.17 - 764.31 799.18 834.77 871.08 908.13 945.75 983.77 1022.76 / - 11 18 17 1 84.25 110.22 138.21 166.49 195.74 225.76 257.27 290.3 324.53 361.37 398.24 438.05 - 477.2 519.92 564.12 609.08 654.66 703.34 753.26 804.55 857.5 912.01 967.23 1024.72 1083.66 1143.32 1204.96 1267.69 - 1328.67 1390.59 1453.9 1517.9 1583.43 1650.65 1719.56 1788.7 / - 11 18 18 1 104.73 149.75 197.82 248.08 299.92 354.51 412.19 473.18 537.45 605.34 676.95 752.6 - 831.64 914.74 1001.45 1091.84 1185.25 1281.35 1376.87 1474.31 1576.13 1680.02 1787.27 1897.72 2011.48 2126.99 2245.34 2367.43 - 2490.19 2619.11 2749.01 2881.39 3016.3 3153.88 3293.91 3436.37 / - 11 18 19 1 143.37 220.02 299.32 389.43 488.19 595.78 709.75 833 966.03 1108.82 1257.16 1409.95 - 1571.6 1741.53 1915.19 2103.85 2292.09 2497.46 2702.92 2912.76 3128.48 3352.46 3601.41 3840.44 4084.35 4337.42 4598.04 4865.85 - 5140.14 5421.46 5711.16 6005.64 6309.12 6616.62 6930.79 7245.87 / - 11 18 20 1 210.02 337.12 470.9 616.62 791.63 1014.05 1261.53 1519.01 1801.04 2094.58 2421.97 2765.21 - 3121.23 3504.67 3894.44 4316.6 4763.47 5233.26 5690.95 6167.86 6703.38 7212.9 7743.63 8349.7 8916.91 9497.6 10084.8 10694.44 - 11416.19 12064.05 12741.38 13439.31 14157.89 14896.85 15675.33 16460.14 / - 11 19 1 1 264.45 263.82 263.66 263.72 263.92 264.22 264.62 265.09 265.64 266.26 266.95 267.7 - 268.52 269.4 270.34 271.35 272.42 273.55 274.74 276 277.31 278.69 280.12 281.62 283.18 284.79 286.47 288.21 - 290.01 291.87 293.79 295.77 297.81 299.9 302.06 304.28 / - 11 19 2 1 264.23 263.53 263.33 263.36 263.54 263.84 264.22 264.69 265.23 265.85 266.53 267.28 - 268.1 268.98 269.93 270.93 272 273.13 274.33 275.58 276.9 278.28 279.72 281.22 282.78 284.4 286.09 287.83 - 289.64 291.5 293.42 295.41 297.45 299.56 301.73 303.95 / - 11 19 3 1 263.62 262.73 262.42 262.38 262.52 262.78 263.14 263.59 264.12 264.72 265.4 266.15 - 266.96 267.84 268.79 269.8 270.88 272.02 273.22 274.49 275.81 277.2 278.65 280.17 281.74 283.38 285.08 286.84 - 288.66 290.54 292.48 294.49 296.55 298.68 300.86 303.11 / - 11 19 4 1 262.29 261.01 260.46 260.28 260.31 260.49 260.8 261.22 261.72 262.31 262.98 263.72 - 264.54 265.43 266.39 267.41 268.51 269.67 270.89 272.18 273.54 274.96 276.44 277.99 279.6 281.27 283.01 284.81 - 286.67 288.6 290.58 292.63 294.75 296.92 299.16 301.45 / - 11 19 5 1 259.81 257.78 256.74 256.3 256.17 256.24 256.47 256.83 257.3 257.87 258.53 259.28 - 260.12 261.03 262.01 263.08 264.21 265.42 266.7 268.04 269.46 270.95 272.5 274.12 275.81 277.56 279.38 281.26 - 283.22 285.23 287.31 289.46 291.66 293.94 296.27 298.67 / - 11 19 6 1 255.59 251.4 249.66 249.08 248.86 248.89 249.1 249.47 249.96 250.57 251.28 252.08 - 252.98 253.97 255.04 256.19 257.42 258.73 260.11 261.57 263.11 264.72 266.4 268.15 269.98 271.87 273.84 275.87 - 277.96 280.1 282.34 284.65 287.03 289.48 291.99 294.56 / - 11 19 7 1 248.47 239.58 237.42 236.81 236.61 236.69 236.98 237.43 238.02 238.74 239.58 240.52 - 241.57 242.71 243.95 245.23 246.65 248.15 249.73 251.4 253.15 254.98 256.84 258.83 260.9 263.04 265.26 267.56 - 269.89 272.33 274.84 277.43 280.09 282.79 285.59 288.46 / - 11 19 8 1 235.4 218.94 217.37 217.05 217.13 217.47 218.02 218.74 219.6 220.6 221.72 222.97 - 224.32 225.78 227.35 229.01 230.78 232.64 234.6 236.65 238.79 241.01 243.32 245.72 248.2 250.76 253.4 256.12 - 258.94 261.82 264.77 267.82 270.93 274.14 277.4 280.73 / - 11 19 9 1 206.75 191.32 190.13 189.83 190.04 190.6 191.42 192.46 193.69 195.1 196.67 198.4 - 200.26 202.26 204.39 206.65 209.02 211.52 214.12 216.84 219.66 222.58 225.6 228.72 231.93 235.23 238.62 242.1 - 245.66 249.3 253.03 256.83 260.71 264.67 268.7 272.8 / - 11 19 10 1 161.83 157.2 156.33 156.52 157.24 158.39 159.83 161.55 163.5 165.62 168.02 170.56 - 173.28 176.16 179.2 182.44 185.75 189.26 192.82 196.62 200.42 204.32 208.46 212.56 216.75 221.02 225.73 230.18 - 234.72 239.32 244.01 248.76 254.07 258.98 263.96 269.01 / - 11 19 11 1 124.06 122.62 123.56 125.46 127.78 130.39 133.22 136.27 139.51 142.9 146.49 150.25 - 154.1 158.17 162.38 166.75 171.14 175.78 180.55 185.3 190.32 195.44 200.68 206.08 211.34 216.95 222.67 228.2 - 234.14 240.18 245.97 252.22 258.16 264.61 270.71 277.3 / - 11 19 12 1 100.29 103.24 106.82 110.62 114.43 118.29 122.24 126.3 130.49 134.83 139.31 143.94 - 148.72 153.66 158.75 163.99 169.38 174.91 180.57 186.38 192.32 198.39 204.59 210.91 217.55 224.99 232.53 239.86 - 247.21 254.84 262.31 270.04 277.68 285.55 293.54 301.65 / - 11 19 13 1 94.09 98.46 102.5 106.73 111.25 116 120.98 126.19 131.6 137.22 143.05 149.1 - 155.36 161.83 168.51 175.39 182.47 189.75 197.22 204.87 212.72 220.74 228.95 237.33 245.86 254.51 263.29 272.21 - 281.27 290.48 299.83 309.32 318.95 328.72 338.64 348.69 / - 11 19 14 1 89.65 95.62 100.82 106.21 111.98 118.18 124.86 132 139.52 147.41 155.64 164.19 - 173.05 182.2 191.64 201.35 211.33 221.57 232.06 242.81 253.81 265.05 276.54 288.26 300.21 312.4 324.82 337.46 - 350.34 363.45 376.79 390.37 404.17 418.19 432.44 446.92 / - 11 19 15 1 85.27 93.44 101.52 109.84 118.76 128.38 138.71 149.71 161.29 173.46 186.17 199.36 - 213 227.07 241.55 256.43 271.7 287.35 303.38 319.77 336.54 353.67 371.18 389.06 407.31 425.93 444.92 464.27 - 483.99 504.08 524.51 545.21 566.27 587.7 609.5 631.65 / - 11 19 16 1 83.5 95.25 108.81 124.14 140.63 158.16 176.33 194.8 214.93 235.9 255.43 277.64 - 300.4 323.57 347.61 372.39 397.83 422.32 448.81 476.2 504.25 532.98 562.36 592.43 623.17 654.58 686.67 719.46 - 752.93 787.09 821.95 857.51 893.77 930.58 967.72 1005.75 / - 11 19 17 1 85.47 110.66 138.31 166.54 195.12 225.14 256.25 288.91 322.65 358.12 395.27 434.33 - 472.78 514.84 558.36 601.37 646.99 694.71 743.61 793.66 845.55 898.85 952.68 1008.88 1066.53 1124.76 1185.26 1247.05 - 1308.97 1371.47 1435.3 1499.69 1566.16 1633.95 1703.51 1773.97 / - 11 19 18 1 105.25 149.97 198.23 247.75 298.74 352.11 408.71 468.78 532.22 599.3 669.81 744.4 - 821.93 903.71 988.4 1077.47 1169.75 1264.99 1360.76 1459.94 1562.22 1667.85 1776.61 1887.65 2002.62 2120.56 2240.98 2363.82 - 2490.26 2619.62 2751.66 2886.39 3023.81 3164.01 3306.86 3453.85 / - 11 19 19 1 144.32 222.08 302.02 391.15 488.26 592.99 705.4 826.83 957.5 1096.3 1244.37 1398.11 - 1560.01 1731.38 1906.42 2095.15 2285.9 2484.18 2700.22 2913.72 3135.31 3362.53 3614.03 3858.37 4109.84 4367.85 4634.3 4908.16 - 5190.78 5479.62 5777.25 6077.97 6382.37 6702.99 7023.71 7347.82 / - 11 19 20 1 211.94 341.71 478.77 627.65 790.92 1000.04 1242.92 1497.07 1779.47 2078.46 2403.91 2741.39 - 3105.46 3489.4 3888.94 4310 4744.03 5213.6 5707.16 6185.88 6724.24 7242.22 7826.39 8380.32 8951.61 9539.08 10213.5 10839.25 - 11486.27 12154.02 12842.48 13546.07 14393.52 15152.47 15932.57 16733.52 / - 11 20 1 1 264.95 264.31 264.13 264.17 264.36 264.65 265.04 265.51 266.05 266.67 267.36 268.12 - 268.94 269.83 270.78 271.8 272.88 274.02 275.23 276.5 277.83 279.23 280.68 282.2 283.78 285.42 287.13 288.89 - 290.72 292.61 294.56 296.57 298.64 300.77 302.96 305.22 / - 11 20 2 1 264.41 263.62 263.34 263.32 263.46 263.72 264.09 264.54 265.08 265.69 266.38 267.13 - 267.96 268.85 269.8 270.83 271.92 273.07 274.28 275.57 276.91 278.32 279.79 281.32 282.92 284.57 286.29 288.08 - 289.92 291.83 293.8 295.83 297.92 300.08 302.29 304.57 / - 11 20 3 1 263.52 262.45 262.01 261.89 261.96 262.18 262.51 262.94 263.46 264.06 264.74 265.49 - 266.32 267.21 268.18 269.21 270.32 271.48 272.72 274.02 275.38 276.81 278.31 279.86 281.49 283.17 284.92 286.74 - 288.61 290.55 292.56 294.62 296.75 298.94 301.19 303.51 / - 11 20 4 1 262.02 260.5 259.8 259.51 259.47 259.61 259.88 260.27 260.77 261.35 262.03 262.78 - 263.61 264.52 265.5 266.56 267.68 268.88 270.14 271.47 272.88 274.34 275.88 277.48 279.15 280.89 282.69 284.56 - 286.49 288.48 290.55 292.67 294.86 297.12 299.44 301.82 / - 11 20 5 1 259.5 257.23 255.85 255.38 255.23 255.29 255.52 255.89 256.37 256.96 257.64 258.41 - 259.27 260.22 261.24 262.34 263.51 264.76 266.09 267.48 268.95 270.49 272.11 273.79 275.54 277.36 279.25 281.2 - 283.23 285.32 287.48 289.71 291.95 294.32 296.75 299.24 / - 11 20 6 1 255.25 250.58 248.71 248.13 247.92 247.96 248.19 248.57 249.08 249.71 250.45 251.29 - 252.22 253.24 254.35 255.54 256.81 258.17 259.6 261.12 262.71 264.34 266.08 267.9 269.79 271.75 273.79 275.9 - 278.08 280.33 282.65 285.02 287.48 290.01 292.62 295.29 / - 11 20 7 1 248.08 238.54 236.36 235.84 235.71 235.84 236.18 236.67 237.31 238.07 238.95 239.94 - 241.02 242.21 243.49 244.82 246.28 247.83 249.47 251.19 252.99 254.83 256.8 258.85 260.98 263.14 265.43 267.79 - 270.23 272.75 275.3 277.96 280.7 283.52 286.37 289.33 / - 11 20 8 1 234.77 217.77 216.75 216.43 216.5 216.85 217.4 218.13 219.01 220.02 221.17 222.43 - 223.81 225.3 226.89 228.59 230.39 232.29 234.28 236.37 238.56 240.83 243.19 245.65 248.18 250.81 253.52 256.31 - 259.18 262.13 265.16 268.27 271.46 274.73 278.07 281.48 / - 11 20 9 1 205.86 191.02 189.82 189.53 189.75 190.32 191.15 192.21 193.47 194.9 196.5 198.25 - 200.14 202.18 204.34 206.64 209.05 211.59 214.24 217 219.87 222.84 225.91 229.08 232.34 235.7 239.15 242.7 - 246.32 250.04 253.83 257.7 261.66 265.68 269.78 273.96 / - 11 20 10 1 161.33 157.31 156.35 156.55 157.29 158.45 159.95 161.76 163.78 166.04 168.49 171.12 - 173.97 176.92 180.01 183.28 186.64 190.19 193.81 197.57 201.55 205.53 209.59 213.9 218.15 222.48 226.88 231.72 - 236.28 240.91 245.61 250.37 255.21 260.61 265.59 270.64 / - 11 20 11 1 124.52 124.02 125.77 128.07 130.59 133.33 136.21 139.25 142.48 145.81 149.34 152.97 - 156.8 160.7 164.82 169.09 173.38 177.92 182.61 187.45 192.26 197.34 202.54 207.66 213.11 218.68 224.08 229.86 - 235.75 241.4 247.48 253.29 259.57 265.52 272 278.11 / - 11 20 12 1 103.29 107.99 112.25 116.16 119.92 123.66 127.44 131.32 135.31 139.44 143.7 148.12 - 152.68 157.38 162.23 167.23 172.38 177.67 183.11 188.69 194.41 200.26 206.26 212.41 218.68 225.53 233 240.33 - 247.65 254.98 262.51 270.05 277.76 285.36 293.19 301.15 / - 11 20 13 1 98.11 102.68 107.22 111.75 116.3 120.92 125.66 130.58 135.69 140.99 146.51 152.24 - 158.18 164.32 170.68 177.24 184 190.95 198.11 205.45 212.99 220.71 228.61 236.7 244.96 253.4 262.02 270.8 - 279.76 288.89 298.17 307.61 317.17 326.85 336.63 346.54 / - 11 20 14 1 94.38 99.54 104.46 109.74 115.48 121.62 128.12 134.97 142.15 149.66 157.48 165.6 - 174.04 182.76 191.78 201.08 210.66 220.51 230.62 241 251.63 262.51 273.63 285.01 296.62 308.46 320.53 332.83 - 345.36 358.11 371.1 384.3 397.74 411.39 425.27 439.36 / - 11 20 15 1 90.27 97.85 104.98 112.65 121.04 130.16 140.03 150.56 161.68 173.33 185.49 198.12 - 211.21 224.74 238.69 253.06 267.83 282.99 298.54 314.46 330.75 347.41 364.44 381.83 399.59 417.71 436.18 455.02 - 474.15 493.57 513.35 533.48 553.95 574.79 595.97 617.5 / - 11 20 16 1 87.29 98.75 111.35 125.73 141.69 157.63 175.26 193.92 213.42 232.78 252.16 273.71 - 295.46 318.02 341.43 365.49 389.55 413.38 439.34 465.96 493.22 521.15 549.73 578.98 608.89 639.46 670.7 702.6 - 735.16 768.4 802.3 836.87 871.29 904.22 942.9 980.12 / - 11 20 17 1 88.67 113.29 139.64 166.43 194.23 223.75 254.67 286.6 319.49 353.2 390.33 425.94 - 465.55 506.39 548.52 588.41 633.29 679.54 726.62 775.39 825.56 876.37 929.5 984.16 1039.46 1096.62 1155.56 1215.93 - 1277.7 1340.87 1405.45 1470.19 1537.46 1606.12 1676.17 1747.6 / - 11 20 18 1 108.11 152 199 247.25 297.19 349.06 404.77 463.99 526.38 591.78 660.34 732.04 - 808.85 888.95 970.41 1057.37 1147.65 1241.02 1336.54 1437.04 1540.7 1647.48 1757.47 1870.55 1986.63 2106.03 2228.45 2353.81 - 2482.47 2613.96 2748.43 2885.88 3026.27 3169.58 3315.78 3464.85 / - 11 20 19 1 148.31 226.85 306.72 394.62 489.37 591.25 701.2 819.77 946.84 1083.74 1228.25 1382.15 - 1544.78 1716.39 1893.72 2083.27 2276.99 2478.29 2693.93 2911.23 3135.88 3367.77 3606.92 3867.65 4123.67 4387.25 4658.29 4936.62 - 5225.21 5519.82 5820.2 6132.9 6447.96 6770.11 7105.69 7442.35 / - 11 20 20 1 216.54 350.54 492.35 645.17 810.32 988.19 1178.79 1381.75 1638.76 1928.99 2235.78 2566.39 - 2915.63 3289.93 3671.93 4090.37 4537.31 4981.26 5479.95 5969.27 6481.46 7017.01 7576.54 8175.51 8753.67 9388.74 10023.56 10637.35 - 11353.62 12014.97 12792.22 13502.68 14234.35 14987.2 15884.56 16687.57 / - 12 1 1 1 239.27 239.13 239.21 239.42 239.73 240.12 240.58 241.11 241.7 242.35 243.07 243.84 - 244.67 245.56 246.5 247.5 248.56 249.67 250.83 252.06 253.33 254.66 256.04 257.48 258.96 260.51 262.1 263.75 - 265.45 267.21 269.01 270.87 272.79 274.75 276.77 278.84 / - 12 1 2 1 239.2 239.05 239.13 239.33 239.64 240.02 240.48 241.01 241.6 242.26 242.97 243.74 - 244.58 245.46 246.41 247.41 248.47 249.58 250.74 251.97 253.24 254.57 255.95 257.39 258.88 260.42 262.02 263.67 - 265.37 267.13 268.94 270.8 272.71 274.68 276.7 278.77 / - 12 1 3 1 239.06 238.9 238.97 239.17 239.47 239.86 240.31 240.84 241.43 242.08 242.8 243.57 - 244.4 245.29 246.24 247.24 248.3 249.41 250.58 251.8 253.08 254.41 255.79 257.23 258.72 260.27 261.87 263.52 - 265.22 266.98 268.79 270.66 272.57 274.54 276.57 278.64 / - 12 1 4 1 238.81 238.62 238.67 238.87 239.16 239.55 240 240.53 241.12 241.77 242.48 243.26 - 244.09 244.98 245.92 246.93 247.99 249.1 250.27 251.49 252.77 254.11 255.49 256.94 258.43 259.98 261.58 263.24 - 264.95 266.71 268.53 270.4 272.32 274.29 276.32 278.4 / - 12 1 5 1 238.34 238.1 238.12 238.3 238.59 238.97 239.42 239.94 240.53 241.18 241.89 242.67 - 243.5 244.39 245.34 246.35 247.41 248.53 249.7 250.93 252.21 253.55 254.95 256.39 257.9 259.45 261.06 262.72 - 264.44 266.21 268.04 269.92 271.85 273.83 275.87 277.96 / - 12 1 6 1 237.41 237.09 237.08 237.23 237.51 237.87 238.32 238.83 239.42 240.07 240.79 241.56 - 242.4 243.3 244.25 245.26 246.33 247.45 248.64 249.87 251.17 252.52 253.92 255.38 256.89 258.46 260.09 261.77 - 263.5 265.29 267.13 269.02 270.97 272.97 275.03 277.14 / - 12 1 7 1 235.56 235.12 235.05 235.17 235.42 235.77 236.21 236.72 237.3 237.96 238.67 239.46 - 240.3 241.2 242.17 243.19 244.27 245.41 246.61 247.87 249.18 250.55 251.98 253.46 255 256.6 258.25 259.95 - 261.72 263.54 265.41 267.34 269.33 271.37 273.46 275.61 / - 12 1 8 1 230.66 228.92 228.43 228.3 228.36 228.61 228.99 229.47 230.04 230.7 231.43 232.25 - 233.13 234.09 235.11 236.2 237.36 238.58 239.87 241.22 242.63 244.1 245.64 247.24 248.9 250.61 252.36 254.2 - 256.1 258.06 260.08 262.16 264.29 266.48 268.73 271.04 / - 12 1 9 1 218 210.31 209.2 208.76 208.69 208.91 209.31 209.88 210.59 211.42 212.33 213.37 - 214.51 215.74 217.07 218.48 219.96 221.5 223.15 224.88 226.68 228.55 230.5 232.48 234.57 236.71 238.93 241.2 - 243.54 245.95 248.42 250.96 253.54 256.2 258.92 261.7 / - 12 1 10 1 184.98 175.09 173.7 173.33 173.53 174.12 175 176.08 177.4 178.9 180.56 182.3 - 184.22 186.28 188.45 190.74 193.13 195.62 198.2 200.88 203.65 206.49 209.4 212.39 215.47 218.57 221.79 225.02 - 228.34 231.69 235.12 238.59 242.16 245.77 249.47 253.2 / - 12 1 11 1 139.95 136.71 136.16 136.65 137.67 139.09 140.89 142.98 145.37 147.93 150.68 153.67 - 156.75 160.07 163.43 167.03 170.63 174.47 178.28 182.35 186.35 190.62 194.79 199.25 203.57 208.21 212.68 217.39 - 221.98 226.83 231.68 236.45 241.42 246.55 251.49 256.48 / - 12 1 12 1 109.31 110.08 112.13 114.63 117.41 120.41 123.61 126.98 130.53 134.25 138.14 142.18 - 146.37 150.71 155.73 160.7 165.72 170.8 176 181.34 186.76 192.28 197.92 203.67 209.53 215.49 221.54 227.7 - 233.92 240.23 246.67 253.21 259.47 266.17 272.96 279.85 / - 12 1 13 1 99.09 102.17 105.43 109.15 113.14 117.33 121.72 126.32 131.14 136.18 141.45 146.92 - 152.62 158.52 164.6 170.82 177.21 183.77 190.49 197.37 204.4 211.58 218.91 226.39 234 242.2 251.03 259.86 - 268.5 277.2 286.18 295.06 304.21 313.24 322.38 331.65 / - 12 1 14 1 96.17 100.08 104.36 109.07 114.26 119.96 126.16 132.78 139.79 147.15 154.85 162.87 - 171.19 179.82 188.73 197.92 207.39 217.12 227.12 237.38 247.9 258.65 269.54 280.59 291.8 303.21 314.79 326.57 - 338.53 350.69 363.04 376.32 390.17 404.15 418.12 432.28 / - 12 1 15 1 92.82 99.24 106.09 113.56 121.87 130.99 140.88 151.44 162.63 174.42 186.74 199.54 - 212.8 226.52 240.68 255.28 270.3 285.75 301.63 317.93 334.65 351.81 369.37 387.3 405.53 424.06 442.9 462.07 - 481.6 501.49 521.75 542.4 564.74 587.49 610.53 633.71 / - 12 1 16 1 91.37 101.68 113.75 127.28 142.54 158.86 177.05 195.82 214.95 235.76 256.58 278.76 - 301.75 325.51 350.05 375.32 401.56 428.4 456.01 484.41 513.6 543.56 572.93 605.26 636.09 668.64 702.15 736.55 - 773.04 810.29 848.16 886.78 926.06 965.16 1005.22 1044.84 / - 12 1 17 1 93.62 116.32 141.96 169.18 197.67 228.16 260.1 293.47 328.23 365.89 403.28 444.17 - 486.53 528.3 573.93 620.95 669.24 719.89 772.58 826.88 881.21 938.83 999.01 1060.56 1122.52 1182.96 1240.32 1292.68 - 1332.77 1378.32 1424.2 1472.56 1522.6 1575.56 1628.06 1678.05 / - 12 1 18 1 111.94 154.75 202.14 251.25 303.19 358.82 418.38 481.79 549.49 621.12 696.15 776.14 - 860.72 949.68 1041.76 1136.49 1232.86 1322.53 1409.87 1499.48 1594.34 1689.07 1788.09 1885.26 1988.21 2093.92 2197.43 2305 - 2411.1 2522.69 2638.01 2752.87 2869.72 2988.04 3108.07 3229.58 / - 12 1 19 1 149.38 222.45 305.73 398.32 499.85 610.59 731.83 864.75 1007.18 1158.77 1308.58 1446.52 - 1597.38 1749.81 1903.48 2071.78 2234.21 2402.75 2574.08 2756.05 2935.56 3128.08 3320.1 3515.52 3712.56 3923.09 4132.96 4345.99 - 4566.9 4786.39 5018.35 5251.6 5490.79 5732.36 5973.28 6226.42 / - 12 1 20 1 213.31 331.56 480.1 667 881.06 1124.48 1370.9 1614.82 1882.13 2158.58 2439.5 2749.96 - 3078.46 3403.51 3746.15 4098.67 4497.29 4876.23 5274.8 5681.99 6106.57 6543.19 6982.25 7438.96 7909.11 8389 8890.46 9382.84 - 9901.35 10431.17 10992.07 11548.18 12123.8 12686.32 13293.2 13915.78 / - 12 2 1 1 241.12 240.96 241.04 241.24 241.55 241.94 242.4 242.92 243.52 244.17 244.89 245.66 - 246.49 247.39 248.33 249.34 250.4 251.51 252.68 253.91 255.18 256.52 257.91 259.35 260.84 262.39 264 265.65 - 267.36 269.12 270.94 272.81 274.73 276.7 278.73 280.81 / - 12 2 2 1 241.04 240.88 240.95 241.15 241.45 241.84 242.3 242.83 243.42 244.07 244.79 245.56 - 246.4 247.29 248.24 249.24 250.3 251.42 252.59 253.81 255.09 256.43 257.82 259.26 260.75 262.31 263.91 265.57 - 267.28 269.04 270.86 272.73 274.65 276.63 278.66 280.74 / - 12 2 3 1 240.9 240.72 240.78 240.98 241.28 241.67 242.12 242.65 243.24 243.9 244.61 245.39 - 246.22 247.11 248.06 249.06 250.12 251.24 252.41 253.64 254.92 256.26 257.65 259.09 260.59 262.14 263.75 265.41 - 267.12 268.89 270.71 272.58 274.51 276.49 278.52 280.6 / - 12 2 4 1 240.64 240.43 240.48 240.67 240.96 241.34 241.8 242.32 242.91 243.57 244.28 245.06 - 245.89 246.78 247.73 248.74 249.8 250.92 252.09 253.32 254.61 255.95 257.34 258.79 260.29 261.84 263.46 265.12 - 266.84 268.61 270.43 272.31 274.24 276.23 278.26 280.36 / - 12 2 5 1 240.14 239.88 239.91 240.08 240.37 240.74 241.2 241.72 242.31 242.96 243.67 244.45 - 245.29 246.18 247.13 248.14 249.2 250.33 251.5 252.74 254.03 255.37 256.77 258.22 259.73 261.29 262.91 264.58 - 266.31 268.09 269.92 271.81 273.75 275.74 277.79 279.89 / - 12 2 6 1 239.17 238.83 238.82 238.97 239.24 239.61 240.06 240.57 241.16 241.82 242.53 243.31 - 244.15 245.04 246 247.02 248.09 249.22 250.4 251.64 252.94 254.3 255.71 257.17 258.69 260.27 261.9 263.59 - 265.33 267.12 268.97 270.88 272.84 274.85 276.92 279.04 / - 12 2 7 1 237.24 236.77 236.69 236.8 237.04 237.39 237.82 238.33 238.91 239.56 240.28 241.06 - 241.91 242.82 243.78 244.81 245.89 247.04 248.24 249.5 250.82 252.2 253.63 255.12 256.67 258.27 259.93 261.65 - 263.42 265.25 267.14 269.08 271.07 273.13 275.23 277.4 / - 12 2 8 1 231.9 229.98 229.35 229.21 229.3 229.54 229.91 230.39 230.97 231.63 232.37 233.19 - 234.08 235.04 236.08 237.18 238.35 239.59 240.89 242.25 243.68 245.17 246.73 248.34 250.02 251.76 253.56 255.42 - 257.34 259.32 261.36 263.46 265.62 267.84 270.11 272.45 / - 12 2 9 1 218.71 210.47 209.34 208.87 208.82 209.04 209.46 210.05 210.77 211.62 212.58 213.65 - 214.79 216.05 217.4 218.84 220.36 221.97 223.62 225.38 227.22 229.13 231.12 233.14 235.27 237.46 239.72 242.04 - 244.41 246.87 249.39 251.97 254.6 257.3 260.06 262.89 / - 12 2 10 1 184.83 174.94 173.59 173.25 173.48 174.1 174.97 176.11 177.45 178.93 180.62 182.46 - 184.43 186.54 188.75 191.08 193.52 196.06 198.7 201.42 204.23 207.11 210.08 213.12 216.26 219.44 222.71 226.01 - 229.41 232.82 236.32 239.84 243.44 247.07 250.79 254.56 / - 12 2 11 1 139.88 136.78 136.3 136.83 137.88 139.36 141.19 143.31 145.69 148.33 151.11 154.06 - 157.26 160.52 164.01 167.53 171.3 175.04 179.04 182.99 187.2 191.32 195.73 200.02 204.62 209.06 213.83 218.41 - 223.23 227.94 232.91 237.87 242.9 247.84 253.09 258.13 / - 12 2 12 1 109.42 110.22 112.31 114.85 117.67 120.71 123.94 127.35 130.94 134.69 138.61 142.69 - 146.92 151.3 156.22 161.27 166.37 171.51 176.83 182.13 187.69 193.28 198.97 204.77 210.69 216.7 222.82 229.04 - 235.32 241.7 248.2 254.45 261.13 267.9 274.76 281.29 / - 12 2 13 1 99.17 102.34 105.62 109.33 113.35 117.58 122.02 126.66 131.53 136.61 141.92 147.44 - 153.18 159.12 165.24 171.52 177.95 184.56 191.32 198.25 205.33 212.57 219.95 227.47 235.14 243.17 252.07 260.83 - 269.77 278.48 287.48 296.51 305.62 314.7 323.91 333.25 / - 12 2 14 1 96.18 100.22 104.55 109.3 114.53 120.25 126.48 133.13 140.18 147.58 155.33 163.39 - 171.76 180.44 189.4 198.65 208.16 217.94 227.99 238.3 248.88 259.68 270.64 281.74 293.02 304.49 316.14 327.98 - 340.02 352.24 364.66 377.28 391.61 405.74 419.62 434.09 / - 12 2 15 1 92.72 99.28 106.23 113.76 122.11 131.27 141.19 151.8 163.03 174.85 187.22 200.08 - 213.39 227.16 241.37 256.02 271.09 286.59 302.52 318.87 335.64 352.85 370.47 388.48 406.8 425.4 444.32 463.57 - 483.18 503.15 523.49 544.22 566.24 589.13 611.9 635.4 / - 12 2 16 1 91.3 101.7 113.85 127.45 142.75 159.55 177.33 196.12 215.91 236.28 257.01 279.25 - 302.28 326.1 350.69 376.03 402.31 429.19 456.83 485.25 514.47 544.49 574.71 605.21 638.46 669.89 703.23 737.65 - 773.28 811.08 849.06 887.5 926.61 966.38 1006.45 1046.61 / - 12 2 17 1 93.51 116.34 142.17 169.38 197.84 228.35 260.29 293.66 328.43 366.1 403.51 444.43 - 486.82 528.6 574.22 621.24 669.57 720.06 772.75 827.11 881.54 939.05 998.89 1060.6 1122.53 1183.5 1241.58 1294.9 - 1335.78 1382.67 1428.66 1478.25 1528.24 1579.09 1634.66 1685.03 / - 12 2 18 1 111.84 154.68 202.17 251.36 303.55 359.09 418.52 481.86 549.47 621.05 695.99 775.74 - 860.15 948.99 1041.08 1135.86 1232.2 1322.79 1411.9 1503.11 1599.22 1688.37 1781.73 1871.49 1968.36 2063.78 2161.43 2258.94 - 2358.06 2462.76 2567.72 2671.32 2779.39 2888.12 2996.12 3107.54 / - 12 2 19 1 149.23 222.31 305.17 398.4 499.95 610.56 730.81 861.87 1006.36 1157.82 1303.64 1446.66 - 1598.19 1751.33 1907.01 2068.06 2242.17 2412.64 2585.89 2768.48 2951.07 3140.46 3339.35 3536.89 3736.12 3948.83 4160.81 4376.35 - 4599.37 4821.32 5055.57 5281.74 5533.08 5778.34 6020.98 6276.61 / - 12 2 20 1 213.13 331.46 478.53 663.64 880.15 1123.76 1365.99 1615.4 1874.85 2150.34 2443.47 2755.36 - 3067.48 3412.39 3758.02 4111.18 4513.71 4897.84 5301.59 5710.6 6143.61 6569.66 7029.56 7491.29 7966.7 8451.69 8958.87 9455.64 - 9979.21 10514.43 11081.44 11643.73 12225.35 12794.21 13407.42 14036.63 / - 12 3 1 1 242.96 242.79 242.86 243.06 243.36 243.75 244.21 244.74 245.33 245.99 246.7 247.48 - 248.32 249.21 250.16 251.17 252.23 253.35 254.52 255.75 257.03 258.37 259.77 261.21 262.72 264.27 265.88 267.54 - 269.26 271.03 272.86 274.73 276.67 278.65 280.69 282.78 / - 12 3 2 1 242.88 242.7 242.77 242.97 243.27 243.65 244.11 244.64 245.23 245.89 246.6 247.38 - 248.22 249.11 250.06 251.07 252.13 253.25 254.42 255.65 256.94 258.28 259.67 261.12 262.62 264.18 265.79 267.46 - 269.17 270.95 272.77 274.65 276.58 278.57 280.61 282.7 / - 12 3 3 1 242.73 242.54 242.59 242.79 243.09 243.47 243.93 244.46 245.05 245.7 246.42 247.2 - 248.03 248.92 249.88 250.88 251.95 253.07 254.24 255.47 256.76 258.1 259.5 260.95 262.45 264.01 265.62 267.29 - 269.01 270.79 272.62 274.5 276.43 278.42 280.46 282.56 / - 12 3 4 1 242.46 242.24 242.28 242.47 242.76 243.14 243.59 244.12 244.71 245.36 246.08 246.86 - 247.69 248.59 249.54 250.55 251.61 252.74 253.91 255.15 256.43 257.78 259.18 260.63 262.14 263.7 265.32 266.99 - 268.71 270.49 272.33 274.21 276.15 278.15 280.2 282.3 / - 12 3 5 1 241.94 241.67 241.69 241.86 242.14 242.52 242.97 243.49 244.08 244.74 245.45 246.23 - 247.07 247.96 248.92 249.93 251 252.12 253.3 254.54 255.83 257.18 258.59 260.05 261.56 263.13 264.75 266.43 - 268.16 269.95 271.79 273.69 275.64 277.64 279.7 281.81 / - 12 3 6 1 240.92 240.57 240.55 240.71 240.98 241.34 241.79 242.31 242.9 243.55 244.27 245.05 - 245.89 246.79 247.75 248.76 249.84 250.97 252.16 253.41 254.71 256.07 257.48 258.96 260.48 262.06 263.7 265.4 - 267.14 268.95 270.81 272.72 274.69 276.71 278.79 280.92 / - 12 3 7 1 238.88 238.38 238.27 238.37 238.6 238.94 239.37 239.88 240.47 241.12 241.84 242.62 - 243.47 244.38 245.35 246.38 247.47 248.61 249.82 251.09 252.41 253.8 255.24 256.74 258.29 259.9 261.57 263.3 - 265.08 266.92 268.82 270.77 272.78 274.84 276.96 279.14 / - 12 3 8 1 233.1 230.82 230.28 230.06 230.15 230.4 230.77 231.26 231.84 232.5 233.25 234.08 - 234.99 235.96 237.01 238.13 239.31 240.56 241.88 243.26 244.71 246.22 247.79 249.42 251.12 252.88 254.71 256.55 - 258.5 260.5 262.57 264.69 266.88 269.12 271.43 273.79 / - 12 3 9 1 219.39 210.57 209.37 208.93 208.88 209.11 209.54 210.14 210.88 211.75 212.73 213.83 - 215.02 216.3 217.66 219.13 220.69 222.33 224.06 225.82 227.7 229.65 231.68 233.78 235.92 238.15 240.46 242.83 - 245.25 247.75 250.31 252.94 255.62 258.37 261.18 264.05 / - 12 3 10 1 184.64 174.81 173.5 173.19 173.44 174.05 174.98 176.11 177.47 179.02 180.72 182.58 - 184.59 186.74 189 191.39 193.89 196.49 199.18 201.96 204.81 207.76 210.78 213.88 217.06 220.3 223.61 226.98 - 230.4 233.9 237.47 241.05 244.75 248.46 252.24 256.03 / - 12 3 11 1 139.96 136.87 136.48 137.01 138.12 139.6 141.45 143.61 146.05 148.67 151.48 154.53 - 157.68 161.06 164.49 168.16 171.83 175.75 179.65 183.79 188.05 192.22 196.68 201.02 205.67 210.16 214.71 219.61 - 224.3 229.25 234.28 239.16 244.24 249.39 254.43 259.81 / - 12 3 12 1 109.54 110.36 112.49 115.07 117.93 121 124.26 127.71 131.34 135.13 139.09 143.2 - 147.47 151.89 156.61 161.82 167.02 172.2 177.59 183.02 188.48 194.27 200.02 205.88 211.85 217.92 224.1 230.11 - 236.47 242.89 249.4 256.05 262.8 269.64 276.16 283.17 / - 12 3 13 1 99.25 102.51 105.81 109.53 113.56 117.84 122.31 127 131.91 137.04 142.39 147.95 - 153.73 159.72 165.89 172.21 178.69 185.34 192.16 199.13 206.26 213.55 220.98 228.56 236.28 244.13 252.85 261.96 - 270.85 279.76 288.99 297.98 307.13 316.56 325.86 335.27 / - 12 3 14 1 96.15 100.36 104.73 109.53 114.8 120.54 126.79 133.49 140.57 148.02 155.8 163.91 - 172.33 181.05 190.07 199.36 208.93 218.77 228.87 239.23 249.85 260.71 271.73 282.9 294.24 305.77 317.48 329.39 - 341.5 353.79 366.28 378.97 392.63 406.9 421.3 435.68 / - 12 3 15 1 92.63 99.31 106.36 113.96 122.35 131.55 141.5 152.16 163.42 175.28 187.69 200.61 - 213.98 227.8 242.06 256.76 271.88 287.43 303.4 319.8 336.63 353.88 371.57 389.64 408.04 426.73 445.73 465.06 - 484.75 504.8 525.21 546.02 567.23 590.23 613.67 637.41 / - 12 3 16 1 91.25 101.72 113.95 127.61 142.96 159.86 177.6 196.42 216.24 236.28 257.43 279.72 - 302.8 326.67 351.31 376.77 403.05 429.96 457.63 486.07 515.31 545.35 576.08 606.1 639.35 671.22 704.28 738.73 - 773.89 811.29 849.45 888.17 927.61 967.08 1007.21 1047.67 / - 12 3 17 1 93.43 116.36 142.33 169.5 198.32 228.53 260.48 293.85 328.62 366.29 403.73 444.65 - 487.07 528.86 574.49 621.51 669.75 720.16 772.8 827.21 882.71 939.19 998.22 1060.48 1122.31 1183.94 1242.3 1296.78 - 1339.38 1387.78 1436.16 1486.61 1538.93 1590.76 1647.75 1700.87 / - 12 3 18 1 111.74 154.62 202.19 251.53 303.7 359.27 418.67 482.17 549.68 620.94 695.74 775.3 - 859.51 948.16 1040.29 1135.14 1231.37 1319.56 1403.24 1488.46 1578.2 1669.1 1763.42 1856.95 1954.67 2051.57 2147.99 2250.11 - 2348.25 2452.63 2557.95 2666.89 2775.45 2882.99 2993.39 3108.31 / - 12 3 19 1 149.07 222.16 305.11 397.71 498.99 610.46 730.56 861.31 1002.44 1156.78 1303.05 1446.74 - 1592.17 1752.67 1909.19 2072.06 2248.73 2421.51 2597.21 2782.11 2966.56 3158.64 3359.49 3559.25 3760.85 3968.98 4190.07 4408.03 - 4630 4858.03 5094.58 5323.71 5577.51 5825.26 6071.03 6329.34 / - 12 3 20 1 212.94 331.35 475.63 660.32 874.97 1117.29 1365.58 1610.36 1876.34 2153.05 2447.54 2760.9 - 3074.61 3421.48 3768.86 4124.07 4528.81 4919.26 5326.2 5740.67 6177.63 6610.83 7076.52 7530.63 8024.53 8515.3 9017.32 9530.35 - 10059.42 10600.42 11156.05 11743.16 12331.46 12906.97 13527.19 14163.32 / - 12 4 1 1 244.8 244.62 244.68 244.88 245.18 245.56 246.02 246.55 247.14 247.8 248.52 249.3 - 250.13 251.03 251.98 252.99 254.06 255.18 256.36 257.59 258.88 260.22 261.62 263.07 264.58 266.14 267.76 269.43 - 271.15 272.93 274.77 276.65 278.59 280.59 282.63 284.73 / - 12 4 2 1 244.71 244.52 244.58 244.78 245.08 245.46 245.92 246.45 247.04 247.7 248.42 249.19 - 250.03 250.92 251.88 252.89 253.95 255.08 256.25 257.49 258.78 260.12 261.52 262.98 264.48 266.05 267.67 269.34 - 271.06 272.84 274.68 276.57 278.51 280.5 282.55 284.65 / - 12 4 3 1 244.56 244.35 244.4 244.6 244.89 245.27 245.73 246.26 246.85 247.51 248.22 249 - 249.84 250.73 251.69 252.7 253.76 254.89 256.07 257.3 258.59 259.94 261.34 262.8 264.31 265.87 267.49 269.17 - 270.89 272.68 274.51 276.4 278.35 280.35 282.4 284.51 / - 12 4 4 1 244.28 244.04 244.07 244.26 244.55 244.93 245.38 245.91 246.5 247.16 247.87 248.65 - 249.49 250.39 251.34 252.35 253.42 254.54 255.73 256.96 258.26 259.6 261.01 262.47 263.98 265.55 267.17 268.85 - 270.58 272.37 274.21 276.11 278.06 280.06 282.12 284.23 / - 12 4 5 1 243.73 243.45 243.46 243.63 243.91 244.29 244.74 245.26 245.85 246.51 247.22 248 - 248.84 249.74 250.69 251.71 252.78 253.91 255.09 256.33 257.63 258.99 260.39 261.86 263.38 264.96 266.59 268.27 - 270.01 271.81 273.66 275.56 277.52 279.53 281.6 283.72 / - 12 4 6 1 242.67 242.31 242.28 242.44 242.71 243.07 243.52 244.04 244.62 245.28 246 246.78 - 247.62 248.52 249.48 250.5 251.58 252.72 253.91 255.16 256.47 257.83 259.25 260.73 262.26 263.85 265.49 267.19 - 268.95 270.76 272.63 274.55 276.53 278.56 280.65 282.79 / - 12 4 7 1 240.48 239.95 239.81 239.88 240.1 240.43 240.86 241.36 241.94 242.59 243.31 244.09 - 244.94 245.85 246.83 247.86 248.96 250.11 251.33 252.6 253.93 255.32 256.77 258.28 259.85 261.47 263.15 264.89 - 266.68 268.53 270.44 272.41 274.43 276.51 278.65 280.84 / - 12 4 8 1 234.25 231.61 231.04 230.87 230.93 231.17 231.54 232.03 232.62 233.3 234.06 234.9 - 235.81 236.8 237.86 238.95 240.15 241.41 242.75 244.15 245.61 247.14 248.74 250.39 252.11 253.9 255.74 257.65 - 259.62 261.65 263.74 265.89 268.11 270.38 272.71 275.1 / - 12 4 9 1 219.64 210.54 209.37 208.9 208.86 209.1 209.55 210.17 210.91 211.8 212.81 213.93 - 215.15 216.47 217.89 219.36 220.95 222.63 224.39 226.23 228.12 230.11 232.18 234.33 236.54 238.79 241.15 243.57 - 246.05 248.58 251.2 253.87 256.62 259.41 262.27 265.19 / - 12 4 10 1 184.46 174.7 173.41 173.13 173.41 174.04 174.96 176.14 177.53 179.1 180.85 182.74 - 184.79 186.96 189.27 191.69 194.23 196.88 199.63 202.48 205.42 208.43 211.51 214.67 217.9 221.2 224.56 227.99 - 231.49 235.04 238.65 242.33 246.03 249.82 253.62 257.52 / - 12 4 11 1 139.91 136.97 136.63 137.22 138.34 139.87 141.76 143.94 146.36 149.01 151.91 154.92 - 158.18 161.51 165.07 168.66 172.49 176.32 180.4 184.59 188.72 193.12 197.42 202.02 206.48 211.26 215.87 220.82 - 225.57 230.58 235.45 240.6 245.59 250.79 256.05 261.21 / - 12 4 12 1 109.68 110.51 112.67 115.29 118.18 121.29 124.59 128.07 131.73 135.56 139.56 143.71 - 148.02 152.48 157.07 162.34 167.62 172.89 178.3 183.8 189.41 195.08 200.87 206.77 212.78 218.9 225.12 231.45 - 237.87 244.36 250.94 257.66 264.1 270.99 277.97 285.06 / - 12 4 13 1 99.35 102.68 106.01 109.72 113.78 118.08 122.61 127.34 132.29 137.46 142.85 148.46 - 154.29 160.32 166.53 172.9 179.43 186.12 192.99 200.01 207.2 214.53 222.02 229.65 237.42 245.32 253.61 262.81 - 272.1 281.09 290.07 299.35 308.65 318.03 327.4 336.88 / - 12 4 14 1 96.12 100.5 104.92 109.76 115.06 120.83 127.11 133.84 140.96 148.45 156.28 164.44 - 172.9 181.67 190.73 200.08 209.7 219.59 229.74 240.15 250.83 261.74 272.82 284.05 295.45 307.04 318.83 330.8 - 342.97 355.34 367.9 380.66 393.61 407.98 422.57 437.24 / - 12 4 15 1 92.56 99.33 106.49 114.16 122.59 131.83 141.82 152.51 163.82 175.72 188.17 201.13 - 214.56 228.44 242.75 257.49 272.66 288.26 304.28 320.73 337.6 354.91 372.65 390.78 409.27 428.05 447.13 466.54 - 486.3 506.42 526.92 547.8 569.08 591.25 614.8 638.75 / - 12 4 16 1 91.2 101.74 114.05 127.76 143.18 160.11 177.87 196.71 216.57 236.79 258.16 280.18 - 303.31 327.22 351.91 377.56 403.76 430.71 458.41 486.87 516.13 546.18 576.96 607.93 640.19 671.79 705.27 739.74 - 774.93 811.42 850.17 889.03 928.26 968.07 1008.23 1048.45 / - 12 4 17 1 93.4 116.44 142.39 169.64 198.48 228.71 260.66 294.04 328.8 366.46 403.92 444.83 - 487.28 529.71 574.7 621.7 669.94 720.21 772.73 827.19 882.11 939.21 998.22 1059.74 1122.27 1184.04 1243.18 1295.93 - 1342.97 1392.96 1443.08 1495.15 1549.12 1602.79 1662.07 1716.25 / - 12 4 18 1 111.65 154.55 202.17 251.67 303.85 359.45 418.81 482.21 549.61 620.82 695.45 774.81 - 858.8 947.25 1039.37 1134.31 1230.35 1319.43 1404.08 1490.39 1581.51 1672.48 1768.7 1863.34 1962.11 2058.82 2157.77 2261.09 - 2358.94 2464.55 2571.24 2681.46 2791.29 2902.21 3014.17 3130.54 / - 12 4 19 1 148.91 222 304.51 397.73 499.06 609.12 729.61 860.73 1001.53 1151.53 1302.37 1446.68 - 1592.76 1753.94 1911.24 2074.95 2253.23 2428.73 2607.13 2793.58 2981.16 3176.56 3379.98 3582.44 3786.7 3997.34 4220.91 4441.37 - 4666.17 4896.72 5135.61 5367.97 5614.27 5874.71 6123.58 6384.94 / - 12 4 20 1 212.75 331.26 473.07 657 870.31 1110.75 1360.58 1610.9 1877.87 2155.84 2451.72 2766.61 - 3082.01 3430.91 3780.01 4137.41 4544.55 4937.53 5347.63 5764.58 6209.49 6650.5 7122.5 7582.4 8082.26 8579.4 9087.38 9606.34 - 10141.4 10688.89 11251.51 11828.3 12441.65 13024.56 13652.17 14296.04 / - 12 5 1 1 246.7 246.47 246.52 246.71 247.01 247.39 247.84 248.37 248.96 249.62 250.34 251.12 - 251.95 252.85 253.8 254.82 255.88 257.01 258.19 259.43 260.72 262.07 263.47 264.93 266.44 268.01 269.63 271.31 - 273.04 274.83 276.67 278.56 280.51 282.52 284.57 286.68 / - 12 5 2 1 246.61 246.38 246.42 246.61 246.9 247.28 247.74 248.26 248.86 249.51 250.23 251.01 - 251.85 252.74 253.7 254.71 255.78 256.9 258.08 259.32 260.61 261.96 263.37 264.83 266.34 267.91 269.53 271.21 - 272.95 274.73 276.58 278.47 280.42 282.43 284.49 286.6 / - 12 5 3 1 246.45 246.2 246.23 246.42 246.71 247.09 247.54 248.07 248.66 249.31 250.03 250.81 - 251.65 252.54 253.5 254.51 255.58 256.71 257.89 259.13 260.42 261.77 263.18 264.64 266.16 267.73 269.35 271.03 - 272.77 274.56 276.4 278.3 280.26 282.26 284.33 286.44 / - 12 5 4 1 246.14 245.87 245.89 246.07 246.35 246.73 247.18 247.71 248.3 248.95 249.67 250.45 - 251.29 252.18 253.14 254.15 255.22 256.35 257.54 258.78 260.07 261.43 262.83 264.3 265.82 267.39 269.02 270.71 - 272.45 274.24 276.09 277.99 279.95 281.97 284.03 286.15 / - 12 5 5 1 245.57 245.25 245.25 245.41 245.69 246.06 246.51 247.03 247.62 248.28 248.99 249.77 - 250.61 251.51 252.47 253.49 254.56 255.69 256.88 258.12 259.43 260.78 262.2 263.67 265.19 266.77 268.41 270.1 - 271.85 273.65 275.51 277.42 279.39 281.41 283.49 285.63 / - 12 5 6 1 244.44 244.06 244.02 244.17 244.44 244.8 245.24 245.76 246.35 247.01 247.72 248.5 - 249.35 250.25 251.21 252.24 253.32 254.45 255.65 256.91 258.22 259.58 261.01 262.49 264.03 265.62 267.28 268.98 - 270.75 272.56 274.44 276.37 278.36 280.4 282.5 284.65 / - 12 5 7 1 242.05 241.45 241.28 241.34 241.55 241.87 242.28 242.78 243.36 244.01 244.72 245.51 - 246.36 247.27 248.25 249.29 250.39 251.55 252.77 254.05 255.39 256.79 258.25 259.77 261.35 262.98 264.68 266.43 - 268.24 270.1 272.02 274 276.04 278.13 280.28 282.49 / - 12 5 8 1 235.35 232.44 231.73 231.55 231.61 231.84 232.21 232.7 233.29 233.97 234.73 235.58 - 236.5 237.51 238.58 239.72 240.94 242.23 243.58 245 246.48 248.03 249.65 251.33 253.08 254.89 256.76 258.69 - 260.69 262.74 264.86 267.01 269.26 271.56 273.92 276.35 / - 12 5 9 1 219.85 210.51 209.27 208.81 208.77 209.01 209.47 210.1 210.88 211.79 212.83 213.98 - 215.2 216.55 218 219.54 221.18 222.86 224.66 226.54 228.5 230.51 232.63 234.82 237.08 239.38 241.78 244.25 - 246.79 249.37 252.04 254.77 257.56 260.4 263.32 266.3 / - 12 5 10 1 184.27 174.59 173.33 173.08 173.35 174 174.97 176.18 177.6 179.2 180.88 182.79 - 184.85 187.05 189.37 191.81 194.37 197.04 199.81 202.69 205.65 208.71 211.86 215.09 218.73 222.09 225.52 229.01 - 232.58 236.2 239.88 243.62 247.41 251.25 255.13 259.08 / - 12 5 11 1 139.94 137.12 136.81 137.41 138.55 140.11 142.02 144.23 146.73 149.41 152.27 155.39 - 158.6 162.05 165.54 169.28 173.16 177.02 181.15 185.23 189.56 193.82 198.37 202.79 207.53 212.11 217.02 221.75 - 226.84 231.7 236.83 241.82 247.09 252.35 257.52 262.9 / - 12 5 12 1 109.84 110.67 112.85 115.5 118.43 121.57 124.91 128.43 132.12 135.99 140.02 144.22 - 148.56 153.06 157.7 162.83 168.21 173.57 178.98 184.59 190.23 196.07 201.92 207.87 213.94 220.12 226.4 232.79 - 239.28 245.56 252.19 258.91 265.78 272.74 279.8 286.52 / - 12 5 13 1 99.45 102.84 106.21 109.92 113.99 118.33 122.9 127.67 132.67 137.88 143.32 148.97 - 154.84 160.92 167.17 173.59 180.16 186.91 193.82 200.89 208.13 215.51 223.05 230.74 238.56 246.52 254.61 263.62 - 273.04 282.21 291.41 300.65 310.2 319.63 328.94 338.92 / - 12 5 14 1 96.09 100.63 105.1 109.99 115.33 121.13 127.43 134.19 141.35 148.88 156.76 164.96 - 173.47 182.28 191.39 200.78 210.46 220.41 230.61 241.08 251.8 262.77 273.91 285.2 296.67 308.32 320.17 332.21 - 344.45 356.88 369.51 382.34 395.37 409.01 423.7 438.57 / - 12 5 15 1 92.49 99.36 106.6 114.35 122.83 132.11 142.13 152.85 164.22 176.15 188.64 201.65 - 215.14 229.07 243.43 258.22 273.44 289.09 305.16 321.65 338.57 355.92 373.7 391.9 410.47 429.33 448.5 467.99 - 487.83 508.03 528.59 549.55 570.9 592.66 615.84 639.97 / - 12 5 16 1 91.16 101.76 114.15 127.93 143.39 160.35 178.14 197.01 216.89 237.68 258.99 280.63 - 303.8 327.76 352.5 378.19 404.45 431.43 459.16 487.65 516.92 546.98 577.81 609.13 640.01 673.03 706.23 740.7 - 775.91 811.92 850.24 889.28 928.82 968.61 1009.07 1049.26 / - 12 5 17 1 93.32 116.46 142.46 169.96 198.64 228.89 260.85 294.22 328.98 366.61 404.26 444.98 - 487.46 530.77 574.87 621.85 670.12 720.17 772.6 826.99 883.02 939.1 998.11 1059.27 1122.08 1183.97 1243.98 1296.91 - 1346.75 1398.17 1450.07 1504.65 1559.53 1615.85 1675.99 1732.02 / - 12 5 18 1 111.55 154.48 202.14 251.76 303.99 359.7 418.95 482.26 549.52 620.66 695.14 774.27 - 858.05 946.27 1038.28 1133.35 1229.13 1319.1 1404.89 1492.69 1583.87 1676.77 1772.89 1869.87 1967.33 2067.54 2166.26 2272.44 - 2371.57 2478.51 2586.6 2698.24 2809.53 2922 3035.65 3152.46 / - 12 5 19 1 148.74 221.84 304.08 397.02 499.11 609.05 729.33 860.14 1000.19 1150.33 1301.55 1446.51 - 1593.22 1755.11 1913.21 2077.83 2257.1 2433.79 2614.53 2804.13 2994.81 3193.21 3394.04 3605.01 3812.3 4025.98 4244.84 4476.05 - 4707.42 4937.49 5179.01 5414.6 5663.76 5922.73 6179.16 6443.47 / - 12 5 20 1 212.56 331.17 470.14 656.95 869.32 1109.89 1360.09 1607.19 1879.42 2158.71 2456.06 2752.93 - 3089.71 3419.41 3791.63 4151.33 4528.18 4960.14 5368.85 5788.95 6235.57 6687.51 7166.37 7632.82 8125.47 8643.01 9157.8 9666.15 - 10224.81 10779.33 11349.33 11934.22 12555.7 13146.55 13782.2 14434.22 / - 12 6 1 1 248.82 248.46 248.45 248.61 248.89 249.26 249.7 250.22 250.81 251.46 252.18 252.96 - 253.79 254.69 255.64 256.65 257.72 258.85 260.03 261.27 262.57 263.92 265.33 266.79 268.31 269.88 271.51 273.19 - 274.93 276.73 278.57 280.48 282.43 284.45 286.51 288.63 / - 12 6 2 1 248.73 248.36 248.34 248.5 248.78 249.15 249.59 250.11 250.7 251.35 252.07 252.84 - 253.68 254.58 255.53 256.54 257.61 258.74 259.92 261.16 262.46 263.81 265.22 266.69 268.2 269.78 271.41 273.09 - 274.83 276.63 278.48 280.38 282.34 284.35 286.42 288.54 / - 12 6 3 1 248.56 248.18 248.15 248.31 248.58 248.95 249.39 249.91 250.5 251.15 251.86 252.64 - 253.48 254.37 255.33 256.34 257.41 258.54 259.72 260.97 262.26 263.62 265.03 266.49 268.01 269.59 271.22 272.91 - 274.65 276.45 278.3 280.2 282.17 284.18 286.25 288.38 / - 12 6 4 1 248.25 247.84 247.8 247.95 248.22 248.58 249.02 249.54 250.12 250.77 251.49 252.27 - 253.1 254 254.95 255.97 257.04 258.17 259.36 260.6 261.9 263.26 264.67 266.14 267.66 269.24 270.88 272.57 - 274.31 276.11 277.97 279.88 281.85 283.87 285.95 288.08 / - 12 6 5 1 247.65 247.2 247.14 247.27 247.53 247.89 248.33 248.84 249.43 250.08 250.79 251.57 - 252.41 253.31 254.26 255.28 256.35 257.49 258.68 259.92 261.23 262.59 264.01 265.48 267.01 268.6 270.24 271.94 - 273.69 275.5 277.37 279.29 281.26 283.3 285.38 287.52 / - 12 6 6 1 246.49 245.96 245.87 245.98 246.23 246.58 247.01 247.53 248.11 248.76 249.48 250.25 - 251.1 252 252.96 253.98 255.06 256.2 257.4 258.66 259.97 261.35 262.77 264.26 265.8 267.4 269.06 270.77 - 272.54 274.37 276.25 278.19 280.18 282.24 284.34 286.51 / - 12 6 7 1 243.91 243.08 242.82 242.82 242.99 243.29 243.68 244.17 244.74 245.38 246.09 246.87 - 247.72 248.64 249.62 250.66 251.77 252.93 254.16 255.45 256.8 258.2 259.67 261.2 262.78 264.43 266.13 267.89 - 269.71 271.59 273.53 275.53 277.58 279.69 281.86 284.09 / - 12 6 8 1 236.75 233.23 232.45 232.22 232.26 232.48 232.85 233.33 233.92 234.61 235.38 236.24 - 237.17 238.19 239.28 240.44 241.67 242.97 244.35 245.79 247.29 248.87 250.51 252.21 253.99 255.78 257.68 259.64 - 261.66 263.75 265.9 268.12 270.39 272.72 275.12 277.57 / - 12 6 9 1 220.6 210.43 209.14 208.66 208.62 208.87 209.34 209.99 210.79 211.7 212.76 213.93 - 215.21 216.6 218.09 219.63 221.3 223.06 224.9 226.79 228.8 230.89 233.05 235.25 237.56 239.95 242.4 244.9 - 247.49 250.14 252.84 255.63 258.48 261.39 264.35 267.39 / - 12 6 10 1 184.21 174.5 173.26 173.03 173.29 174 174.99 176.23 177.6 179.22 181.01 182.96 - 185.05 187.28 189.64 192.12 194.72 197.43 200.24 203.16 206.17 209.27 212.46 215.74 219.1 222.56 226.06 229.61 - 233.23 237.35 241.11 244.92 248.78 252.69 256.66 260.67 / - 12 6 11 1 139.97 137.23 136.97 137.63 138.8 140.38 142.32 144.55 147.04 149.74 152.7 155.78 - 159.1 162.49 166.12 169.9 173.69 177.74 181.75 186.03 190.24 194.72 199.11 203.79 208.35 213.21 217.92 222.96 - 227.81 233.03 238 243.26 248.36 253.76 259.15 264.6 / - 12 6 12 1 110 110.85 113.03 115.71 118.67 121.85 125.22 128.78 132.51 136.41 140.48 144.72 - 149.1 153.64 158.32 163.23 168.76 174.28 179.7 185.38 191.06 196.89 202.77 208.77 214.88 221.1 227.43 233.86 - 240.39 247.03 253.73 260.52 267.46 274.1 281.21 288.42 / - 12 6 13 1 99.56 103.01 106.42 110.13 114.21 118.58 123.18 128 133.04 138.3 143.78 149.47 - 155.39 161.51 167.81 174.27 180.9 187.69 194.65 201.77 209.06 216.49 224.08 231.82 239.7 247.71 255.86 264.41 - 273.92 283.26 292.79 302.05 311.62 321.21 330.88 340.52 / - 12 6 14 1 96.06 100.76 105.28 110.21 115.59 121.43 127.75 134.54 141.74 149.31 157.23 165.48 - 174.03 182.9 192.05 201.49 211.21 221.21 231.47 241.99 252.77 263.79 274.99 286.34 297.87 309.58 321.5 333.6 - 345.91 358.41 371.11 384.01 397.11 410.41 424.77 439.8 / - 12 6 15 1 92.41 99.38 106.71 114.54 123.07 132.38 142.44 153.2 164.61 176.58 189.11 202.16 - 215.7 229.69 244.1 258.95 274.22 289.91 306.02 322.56 339.52 356.91 374.73 392.99 411.63 430.58 449.83 469.4 - 489.31 509.59 530.23 551.26 572.68 594.51 616.76 641.01 / - 12 6 16 1 91.11 101.79 114.25 128.09 143.94 160.6 178.41 197.3 217.2 238.03 258.97 281.05 - 304.28 328.28 353.11 378.79 405.11 432.13 459.88 488.39 517.67 547.74 578.57 609.56 640.76 674.75 707.25 741.61 - 776.84 812.85 850.19 889.32 929.05 969.16 1009.49 1050.48 / - 12 6 17 1 93.24 116.47 142.58 170.08 198.8 229.07 261.03 294.39 329.15 366.75 404.41 445.11 - 487.59 530.29 575 621.95 670.13 720.07 772.38 826.64 882.75 938.87 997.88 1058.1 1121.11 1183.94 1244.27 1298.49 - 1350.79 1403.41 1457.12 1513.43 1570.09 1628.31 1689.06 1749.16 / - 12 6 18 1 111.44 154.41 202.08 251.84 304.23 359.85 419.17 482.29 549.42 620.47 694.78 773.68 - 857.22 945.19 1037.01 1131.56 1227.68 1317.02 1403.62 1494.23 1585.01 1678.87 1775.83 1873.69 1972.36 2073.67 2174.84 2280.6 - 2382.76 2490.97 2600.33 2713.62 2826.33 2940.24 3055.58 3179.1 / - 12 6 19 1 148.57 221.68 303.63 396.99 498.04 608.96 727.82 858.04 999.18 1149.05 1300.5 1446.18 - 1593.56 1756.19 1915.13 2080.67 2253.56 2438.77 2623.81 2811.77 3004.06 3206.63 3411.67 3626.04 3836.86 4054.33 4276.08 4510.84 - 4743.14 4979.12 5223.95 5462.88 5715.57 5973.76 6237.8 6505.44 / - 12 6 20 1 212.36 331.1 465.09 653.65 864.06 1103.26 1354.31 1604.03 1868.98 2161.64 2443.56 2759.22 - 3097.73 3429.37 3803.93 4165.88 4545.21 4976.44 5391.18 5814.15 6259.58 6716.44 7195.05 7680.51 8180.34 8705.13 9227.39 9743.11 - 10308.89 10871.26 11449.32 12042.54 12649.85 13272.75 13917.1 14577.97 / - 12 7 1 1 250.94 250.45 250.38 250.51 250.77 251.12 251.56 252.07 252.66 253.31 254.02 254.79 - 255.63 256.52 257.48 258.49 259.56 260.69 261.87 263.12 264.41 265.77 267.18 268.65 270.17 271.75 273.38 275.07 - 276.82 278.62 280.47 282.38 284.35 286.37 288.44 290.57 / - 12 7 2 1 250.85 250.34 250.27 250.4 250.66 251.01 251.45 251.96 252.54 253.19 253.9 254.68 - 255.51 256.41 257.36 258.37 259.45 260.57 261.76 263 264.3 265.66 267.07 268.54 270.06 271.64 273.27 274.96 - 276.71 278.51 280.37 282.28 284.25 286.27 288.35 290.48 / - 12 7 3 1 250.68 250.16 250.08 250.2 250.45 250.8 251.24 251.75 252.33 252.98 253.69 254.47 - 255.3 256.2 257.15 258.16 259.24 260.37 261.55 262.8 264.1 265.45 266.87 268.34 269.86 271.44 273.08 274.77 - 276.52 278.32 280.18 282.1 284.06 286.09 288.17 290.3 / - 12 7 4 1 250.36 249.81 249.71 249.83 250.08 250.42 250.86 251.37 251.95 252.59 253.3 254.08 - 254.91 255.81 256.77 257.78 258.85 259.98 261.17 262.42 263.72 265.08 266.49 267.97 269.49 271.08 272.72 274.42 - 276.17 277.98 279.84 281.76 283.73 285.76 287.85 289.99 / - 12 7 5 1 249.74 249.14 249.03 249.13 249.37 249.71 250.14 250.65 251.23 251.87 252.58 253.36 - 254.19 255.09 256.05 257.07 258.14 259.27 260.47 261.72 263.02 264.39 265.81 267.29 268.82 270.41 272.06 273.76 - 275.52 277.34 279.21 281.14 283.12 285.16 287.26 289.41 / - 12 7 6 1 248.54 247.87 247.72 247.8 248.02 248.36 248.78 249.28 249.86 250.51 251.22 252 - 252.84 253.74 254.7 255.72 256.8 257.94 259.14 260.4 261.72 263.09 264.53 266.02 267.57 269.17 270.83 272.55 - 274.33 276.16 278.05 280 282 284.06 286.17 288.35 / - 12 7 7 1 245.72 244.67 244.29 244.23 244.36 244.62 245 245.47 246.03 246.66 247.37 248.15 - 249 249.91 250.89 251.94 253.05 254.22 255.46 256.75 258.11 259.53 261 262.54 264.14 265.8 267.52 269.29 - 271.13 273.03 274.98 277 279.07 281.2 283.39 285.64 / - 12 7 8 1 238.14 233.95 233.08 232.8 232.82 233.02 233.38 233.87 234.46 235.15 235.93 236.79 - 237.74 238.77 239.88 241.05 242.31 243.63 245.03 246.49 247.97 249.57 251.24 252.97 254.77 256.64 258.56 260.56 - 262.61 264.73 266.92 269.16 271.47 273.84 276.27 278.76 / - 12 7 9 1 220.79 210.3 209 208.48 208.42 208.66 209.13 209.78 210.6 211.55 212.64 213.84 - 215.16 216.54 218.06 219.68 221.39 223.16 225.04 227.01 229.07 231.17 233.38 235.67 238.03 240.44 242.94 245.52 - 248.14 250.85 253.63 256.46 259.37 262.34 265.37 268.45 / - 12 7 10 1 184.18 174.41 173.2 172.95 173.27 174 174.96 176.21 177.68 179.33 181.15 183.13 - 185.25 187.52 189.91 192.43 195.07 197.82 200.67 203.63 206.69 209.84 213.08 216.4 219.81 223.3 226.86 230.51 - 234.25 238.01 241.83 245.69 249.61 254.14 258.18 262.28 / - 12 7 11 1 140.05 137.34 137.13 137.82 139.02 140.62 142.59 144.85 147.36 150.15 153.08 156.26 - 159.53 163.05 166.61 170.42 174.37 178.31 182.51 186.66 191.1 195.44 200.07 204.8 209.4 214.33 219.08 224.19 - 229.08 234.04 239.4 244.49 249.87 255.34 260.62 266.13 / - 12 7 12 1 110.17 111.05 113.2 115.92 118.92 122.15 125.57 129.16 132.93 136.88 140.98 145.25 - 149.67 154.24 158.96 163.81 169.3 174.91 180.43 186.17 191.89 197.76 203.81 209.87 216.04 222.31 228.7 235.2 - 241.8 248.19 254.97 261.82 268.76 275.84 283.03 289.88 / - 12 7 13 1 99.66 103.18 106.64 110.35 114.45 118.84 123.49 128.35 133.43 138.74 144.26 149.99 - 155.95 162.12 168.46 174.96 181.63 188.47 195.48 202.65 209.98 217.47 225.1 232.89 240.82 248.89 257.1 265.43 - 274.74 284.21 293.95 303.43 312.96 322.57 332.25 342.12 / - 12 7 14 1 96.05 100.91 105.47 110.44 115.86 121.74 128.08 134.9 142.14 149.75 157.71 165.99 - 174.6 183.5 192.7 202.18 211.95 221.99 232.31 242.88 253.71 264.79 276.05 287.46 299.05 310.83 322.81 334.98 - 347.35 359.92 372.69 385.66 398.83 412.2 425.77 440.9 / - 12 7 15 1 92.35 99.42 106.82 114.72 123.31 132.66 142.75 153.55 164.99 177 189.57 202.66 - 216.24 230.28 244.76 259.65 274.97 290.71 306.87 323.45 340.45 357.88 375.73 394.03 412.73 431.76 451.1 470.76 - 490.75 511.1 531.82 552.92 574.41 596.3 618.61 641.91 / - 12 7 16 1 91.08 101.83 114.35 128.37 144.14 160.84 178.68 197.59 217.5 238.36 259.95 282.09 - 304.73 328.77 353.76 379.36 405.72 432.78 460.56 489.09 518.38 548.45 579.28 609.5 641.45 675.37 708.27 742.37 - 777.66 813.71 850.52 889.19 929.07 969.46 1010.05 1050.92 / - 12 7 17 1 93.22 116.52 142.75 170.19 198.99 229.24 261.21 294.57 329.31 366.88 404.52 445.2 - 487.67 531.64 575.08 622.02 670.09 719.99 772.08 826.2 882.22 938.44 997.47 1057.72 1119.89 1183.19 1244.46 1300.32 - 1354.04 1408.82 1464.17 1522.29 1581.7 1640.93 1703.45 1765.72 / - 12 7 18 1 111.34 154.33 202.05 251.96 304.35 359.98 419.32 482.31 549.31 620.25 694.41 773.06 - 856.33 944.02 1035.61 1130.22 1226.66 1316.8 1404.47 1496.05 1587.98 1682.99 1781.02 1880.05 1980.02 2082.67 2185.27 2292.34 - 2396.17 2505.82 2616.68 2728.97 2845.95 2961.52 3078.64 3203.61 / - 12 7 19 1 148.4 221.52 302.88 396.21 498.06 607.52 727.51 857.15 998.15 1147.7 1299.95 1440.25 - 1593.74 1748.92 1916.92 2083.48 2257.36 2443.73 2630.96 2819.24 3011.7 3216.47 3425.15 3637.29 3858.45 4081.63 4305.65 4544.23 - 4785.42 5020.34 5269.21 5511.92 5768.41 6030.39 6298.41 6569.87 / - 12 7 20 1 212.17 331.05 461.32 647.46 859.35 1095.99 1346.49 1600.88 1870.59 2150.32 2448.2 2765.76 - 3106.1 3439.84 3816.85 4182.56 4563.11 4961.03 5414.67 5840.71 6288.99 6745.38 7231.48 7725.34 8231.25 8750.05 9294.49 9818.69 - 10373.92 10963.37 11550.37 12152.74 12769.62 13407.47 14056.39 14726.89 / - 12 8 1 1 253.07 252.44 252.31 252.41 252.65 252.99 253.42 253.92 254.5 255.14 255.85 256.63 - 257.46 258.35 259.31 260.32 261.39 262.52 263.71 264.95 266.25 267.61 269.02 270.5 272.02 273.6 275.24 276.94 - 278.69 280.5 282.36 284.27 286.25 288.28 290.36 292.5 / - 12 8 2 1 252.97 252.33 252.2 252.3 252.53 252.87 253.3 253.81 254.38 255.03 255.73 256.51 - 257.34 258.23 259.19 260.2 261.27 262.4 263.59 264.83 266.13 267.49 268.91 270.38 271.91 273.49 275.13 276.83 - 278.58 280.39 282.25 284.17 286.14 288.17 290.26 292.4 / - 12 8 3 1 252.79 252.14 252 252.09 252.32 252.66 253.09 253.59 254.17 254.81 255.52 256.29 - 257.12 258.02 258.97 259.98 261.06 262.19 263.37 264.62 265.92 267.28 268.7 270.17 271.7 273.29 274.93 276.63 - 278.38 280.19 282.06 283.98 285.95 287.99 290.07 292.22 / - 12 8 4 1 252.46 251.77 251.62 251.71 251.93 252.27 252.69 253.19 253.77 254.41 255.12 255.89 - 256.72 257.62 258.57 259.59 260.66 261.79 262.98 264.23 265.53 266.89 268.31 269.79 271.32 272.91 274.56 276.26 - 278.02 279.83 281.7 283.63 285.61 287.64 289.74 291.89 / - 12 8 5 1 251.83 251.09 250.92 250.99 251.2 251.53 251.95 252.45 253.02 253.66 254.37 255.14 - 255.98 256.87 257.83 258.84 259.92 261.06 262.25 263.5 264.81 266.18 267.6 269.08 270.62 272.22 273.87 275.58 - 277.34 279.17 281.05 282.98 284.97 287.02 289.12 291.28 / - 12 8 6 1 250.59 249.77 249.56 249.6 249.81 250.13 250.54 251.04 251.61 252.25 252.96 253.73 - 254.57 255.47 256.43 257.45 258.53 259.67 260.88 262.14 263.45 264.83 266.27 267.76 269.31 270.92 272.59 274.32 - 276.1 277.94 279.83 281.79 283.8 285.87 287.99 290.17 / - 12 8 7 1 247.49 246.19 245.64 245.52 245.61 245.85 246.21 246.67 247.22 247.85 248.56 249.34 - 250.19 251.1 252.09 253.14 254.26 255.44 256.68 257.99 259.35 260.78 262.28 263.83 265.44 267.11 268.84 270.63 - 272.49 274.4 276.37 278.4 280.49 282.64 284.85 287.12 / - 12 8 8 1 239.5 234.57 233.63 233.3 233.27 233.45 233.8 234.28 234.87 235.56 236.35 237.22 - 238.18 239.23 240.35 241.54 242.82 244.16 245.58 247.07 248.63 250.25 251.92 253.68 255.51 257.41 259.37 261.4 - 263.49 265.64 267.86 270.15 272.49 274.86 277.33 279.86 / - 12 8 9 1 221.72 210.08 208.75 208.22 208.16 208.42 208.9 209.58 210.41 211.39 212.51 213.7 - 215.05 216.5 218.05 219.7 221.41 223.24 225.17 227.19 229.25 231.43 233.7 236 238.42 240.91 243.47 246.07 - 248.78 251.55 254.36 257.27 260.24 263.25 266.34 269.5 / - 12 8 10 1 184.12 174.33 173.15 172.88 173.25 173.95 174.99 176.27 177.76 179.44 181.29 183.3 - 185.46 187.76 190.19 192.75 195.42 198.21 201.11 204.11 207.21 210.41 213.7 217.07 220.53 224.06 227.68 231.37 - 235.14 238.97 242.91 246.9 250.93 255 259.11 263.27 / - 12 8 11 1 140.12 137.5 137.32 138.01 139.27 140.87 142.86 145.19 147.73 150.5 153.52 156.66 - 160.05 163.5 167.2 171.05 174.91 179.03 183.11 187.47 191.76 196.34 201.02 205.58 210.46 215.18 220.25 225.12 - 230.36 235.38 240.79 245.95 251.16 256.67 262.27 267.67 / - 12 8 12 1 110.33 111.26 113.39 116.18 119.24 122.51 125.96 129.59 133.39 137.36 141.5 145.8 - 150.25 154.86 159.61 164.5 169.73 175.52 181.18 186.94 192.73 198.62 204.67 210.76 216.97 223.29 229.72 236.26 - 242.9 249.65 256.51 263.42 270.44 277.6 284.44 291.78 / - 12 8 13 1 99.8 103.38 106.9 110.65 114.77 119.19 123.85 128.75 133.87 139.2 144.75 150.53 - 156.52 162.73 169.11 175.65 182.36 189.25 196.3 203.52 210.9 218.43 226.12 233.96 241.94 250.06 258.32 266.72 - 275.53 285.07 295.01 304.64 314.4 324.16 333.91 343.83 / - 12 8 14 1 96.06 101.08 105.7 110.72 116.18 122.09 128.45 135.29 142.55 150.19 158.19 166.51 - 175.15 184.1 193.34 202.87 212.68 222.76 233.12 243.75 254.64 265.77 277.09 288.56 300.22 312.06 324.1 336.33 - 348.77 361.41 374.25 387.29 400.53 413.98 427.62 441.46 / - 12 8 15 1 92.32 99.49 106.97 114.94 123.58 132.95 143.07 153.89 165.36 177.42 190.02 203.15 - 216.77 230.85 245.39 260.34 275.7 291.48 307.68 324.3 341.34 358.81 376.7 395.02 413.77 432.89 452.31 472.05 - 492.13 512.56 533.35 554.53 576.08 598.04 620.41 643.22 / - 12 8 16 1 91.06 101.91 114.48 128.63 144.35 161.13 179.01 197.86 217.79 238.67 260.43 281.96 - 305.13 329.23 354.24 379.88 406.28 433.39 461.2 489.74 519.04 549.11 579.94 611.45 643.41 675.93 708.44 742.94 - 778.33 814.42 851.25 888.83 928.84 969.46 1010.46 1051.38 / - 12 8 17 1 93.15 116.54 142.81 170.3 199.37 229.41 261.39 294.73 329.46 366.99 404.6 445.27 - 487.7 531.68 575.11 622.01 670.18 719.77 771.7 825.66 881.51 937.76 996.88 1057.14 1118.91 1182.02 1244.26 1301.53 - 1357.04 1414.16 1471.23 1531.16 1592.47 1653.69 1717.5 1781.78 / - 12 8 18 1 111.24 154.25 202 252.01 304.46 360.15 419.43 482.33 549.23 620 694 772.42 - 855.38 942.77 1034.08 1128.63 1225.42 1316.11 1404.7 1497.42 1590.92 1686.4 1786.38 1886.65 1987.92 2092.07 2196.14 2304.64 - 2410.12 2521.41 2633.83 2747.8 2866.57 2983.9 3102.9 3229.44 / - 12 8 19 1 148.23 221.36 302.5 395.28 496.91 607.42 725.99 854.99 997.07 1146.27 1299.88 1440.49 - 1594.55 1749.71 1918.61 2086.15 2261.09 2448.68 2637.93 2826.78 3024.18 3225.53 3437.24 3651.04 3874.89 4103.05 4330.86 4565.71 - 4819.73 5059.25 5312.58 5559.96 5820.86 6086.95 6346.5 6635.55 / - 12 8 20 1 211.98 331.03 457.69 644.3 854.13 1095.1 1345.81 1596.21 1865.33 2153.48 2453.06 2772.61 - 3114.87 3450.92 3799.75 4199.17 4582 4982.75 5439.52 5868.77 6320.22 6776.06 7265.38 7766.94 8277.6 8803.42 9357.03 9890.71 - 10454.91 11034.37 11650.93 12263.36 12890.66 13538.65 14172.26 14880.33 / - 12 9 1 1 255.17 254.42 254.24 254.31 254.53 254.85 255.27 255.77 256.34 256.98 257.69 258.46 - 259.29 260.18 261.13 262.15 263.22 264.35 265.53 266.78 268.08 269.44 270.86 272.34 273.87 275.45 277.1 278.8 - 280.55 282.37 284.23 286.16 288.14 290.17 292.27 294.41 / - 12 9 2 1 255.08 254.31 254.12 254.19 254.41 254.73 255.15 255.65 256.22 256.86 257.56 258.33 - 259.16 260.06 261.01 262.02 263.09 264.22 265.41 266.66 267.96 269.32 270.74 272.22 273.75 275.34 276.98 278.68 - 280.44 282.25 284.12 286.05 288.03 290.07 292.16 294.31 / - 12 9 3 1 254.89 254.11 253.92 253.98 254.19 254.51 254.93 255.43 255.99 256.63 257.34 258.11 - 258.94 259.83 260.78 261.8 262.87 264 265.19 266.44 267.74 269.1 270.52 272 273.53 275.12 276.77 278.47 - 280.23 282.05 283.92 285.85 287.83 289.87 291.97 294.12 / - 12 9 4 1 254.56 253.74 253.53 253.58 253.79 254.11 254.52 255.01 255.58 256.22 256.92 257.69 - 258.52 259.42 260.37 261.38 262.46 263.59 264.78 266.03 267.34 268.7 270.12 271.6 273.14 274.73 276.38 278.09 - 279.85 281.67 283.55 285.48 287.47 289.51 291.62 293.77 / - 12 9 5 1 253.9 253.03 252.8 252.84 253.03 253.35 253.75 254.24 254.81 255.45 256.15 256.92 - 257.75 258.64 259.6 260.61 261.69 262.83 264.02 265.27 266.58 267.95 269.38 270.87 272.41 274.01 275.67 277.38 - 279.15 280.98 282.87 284.81 286.81 288.86 290.97 293.14 / - 12 9 6 1 252.63 251.66 251.38 251.39 251.57 251.87 252.27 252.75 253.32 253.95 254.65 255.42 - 256.26 257.15 258.11 259.14 260.22 261.36 262.56 263.83 265.15 266.53 267.97 269.46 271.02 272.63 274.31 276.04 - 277.83 279.67 281.58 283.54 285.56 287.63 289.77 291.96 / - 12 9 7 1 249.21 247.63 246.87 246.7 246.75 246.97 247.31 247.76 248.3 248.93 249.63 250.41 - 251.26 252.19 253.18 254.23 255.35 256.54 257.8 259.11 260.49 261.93 263.44 265 266.63 268.32 270.07 271.88 - 273.75 275.68 277.68 279.73 281.84 284.01 286.24 288.53 / - 12 9 8 1 240.8 235.14 234.05 233.64 233.59 233.75 234.09 234.57 235.16 235.86 236.66 237.55 - 238.53 239.59 240.73 241.93 243.23 244.6 246.04 247.56 249.14 250.79 252.51 254.31 256.17 258.1 260.08 262.14 - 264.27 266.46 268.72 271.04 273.43 275.86 278.37 280.94 / - 12 9 9 1 222.63 209.81 208.46 207.93 207.89 208.15 208.66 209.36 210.22 211.23 212.34 213.6 - 214.97 216.46 218.05 219.71 221.49 223.38 225.35 227.36 229.51 231.74 234.04 236.38 238.84 241.37 243.95 246.63 - 249.4 252.19 255.09 258.06 261.06 264.16 267.3 270.52 / - 12 9 10 1 184.03 174.26 173.1 172.85 173.24 173.96 175.02 176.33 177.85 179.47 181.33 183.36 - 185.54 187.86 190.31 192.89 195.59 198.4 201.33 204.36 207.48 210.99 214.33 217.75 221.26 224.84 228.51 232.26 - 236.08 239.97 243.93 247.95 252.05 256.25 260.52 264.8 / - 12 9 11 1 140.19 137.62 137.48 138.24 139.49 141.15 143.17 145.49 148.06 150.91 153.9 157.14 - 160.48 164.05 167.69 171.56 175.58 179.6 183.87 188.11 192.62 197.25 201.77 206.59 211.28 216.3 221.15 226.35 - 231.34 236.72 241.86 247.41 252.68 258.26 263.66 269.39 / - 12 9 12 1 110.5 111.47 113.64 116.48 119.57 122.87 126.35 130.01 133.84 137.85 142.02 146.35 - 150.84 155.47 160.26 165.18 170.25 175.99 181.85 187.59 193.57 199.5 205.58 211.85 218.12 224.5 230.99 237.59 - 244.3 251.12 257.71 264.72 271.78 278.95 286.26 293.68 / - 12 9 13 1 99.95 103.62 107.2 110.97 115.11 119.55 124.24 129.17 134.32 139.68 145.27 151.08 - 157.1 163.34 169.76 176.35 183.1 190.02 197.12 204.38 211.81 219.39 227.13 235.02 243.05 251.23 259.54 267.99 - 276.57 285.88 295.65 305.81 315.59 325.34 335.3 345.26 / - 12 9 14 1 96.09 101.26 105.97 111.02 116.5 122.44 128.83 135.69 142.98 150.65 158.67 167.03 - 175.71 184.69 193.97 203.54 213.39 223.52 233.92 244.59 255.53 266.72 278.1 289.64 301.36 313.26 325.36 337.66 - 350.16 362.87 375.78 388.89 402.2 415.72 429.43 443.35 / - 12 9 15 1 92.3 99.58 107.16 115.19 123.85 133.26 143.4 154.24 165.73 177.83 190.46 203.63 - 217.28 231.41 245.98 260.99 276.4 292.23 308.47 325.12 342.2 359.69 377.62 395.97 414.75 433.93 453.45 473.28 - 493.44 513.94 534.81 556.05 577.68 599.7 622.13 644.99 / - 12 9 16 1 91.06 101.99 114.62 128.82 144.55 161.41 179.31 198.16 218.06 238.95 260.73 282.96 - 305.47 329.63 354.68 380.34 406.78 433.93 461.78 490.34 519.64 549.7 580.53 612.03 643.64 675.47 710.19 744.7 - 778.75 814.94 851.81 889.41 928.31 969.07 1009.75 1051.27 / - 12 9 17 1 93.14 116.54 142.86 170.59 199.5 229.58 261.55 294.89 330.37 367.08 405.11 445.29 - 487.68 531.66 575.08 621.95 670.03 719.56 771.25 825.03 880.7 936.97 996 1056.35 1117.61 1181.11 1243.6 1302.61 - 1360.28 1418.67 1478.41 1539.82 1602.6 1665.05 1731.05 1795.56 / - 12 9 18 1 111.13 154.15 201.9 252.03 304.55 360.25 419.51 482.33 549.08 619.69 693.51 771.71 - 854.16 941.43 1032.44 1126.77 1223.93 1315.78 1404.25 1497.49 1591.88 1688.82 1790.69 1892.9 1995.97 2100.46 2207.56 2317.61 - 2424.84 2537.8 2651.99 2767.74 2888.34 3007.61 3128.61 3256.81 / - 12 9 19 1 148.05 221.21 302.02 395.24 496.89 605.94 725.6 854.3 992.65 1144.77 1293.23 1439.71 - 1595.2 1750.48 1920.33 2088.83 2264.88 2444.86 2644.24 2834.49 3035.05 3236.32 3449.03 3665.2 3890.9 4121.12 4351.32 4589.72 - 4848.5 5093.33 5351.64 5604.08 5870.25 6141.08 6405.5 6686.43 / - 12 9 20 1 211.8 331.05 455.79 641.24 849.51 1087.84 1339.62 1591.55 1862.53 2156.79 2458.3 2779.84 - 3101.61 3462.68 3814.11 4216.99 4602.06 5005.82 5419.81 5898.6 6353.46 6812.98 7301.61 7808.65 8312.06 8855.99 9398.61 9956.06 - 10530.21 11120.47 11748.29 12371.98 13010.77 13670.12 14316.33 15007.73 / - 12 10 1 1 257.26 256.39 256.16 256.2 256.4 256.71 257.12 257.61 258.18 258.81 259.51 260.28 - 261.11 262 262.95 263.96 265.03 266.16 267.35 268.6 269.91 271.27 272.69 274.17 275.7 277.29 278.94 280.65 - 282.41 284.23 286.1 288.03 290.02 292.06 294.16 296.32 / - 12 10 2 1 257.16 256.28 256.04 256.08 256.28 256.59 257 257.49 258.05 258.68 259.39 260.15 - 260.98 261.87 262.82 263.84 264.91 266.04 267.23 268.47 269.78 271.14 272.56 274.04 275.58 277.17 278.82 280.52 - 282.29 284.11 285.98 287.91 289.9 291.95 294.05 296.21 / - 12 10 3 1 256.97 256.07 255.83 255.86 256.05 256.36 256.77 257.26 257.82 258.45 259.15 259.92 - 260.75 261.64 262.59 263.6 264.67 265.81 267 268.24 269.55 270.91 272.34 273.82 275.35 276.95 278.6 280.31 - 282.07 283.89 285.77 287.7 289.69 291.74 293.85 296.01 / - 12 10 4 1 256.63 255.69 255.43 255.45 255.64 255.94 256.35 256.83 257.39 258.02 258.72 259.49 - 260.32 261.21 262.16 263.17 264.25 265.38 266.57 267.82 269.13 270.5 271.92 273.4 274.94 276.54 278.19 279.9 - 281.67 283.5 285.38 287.32 289.32 291.37 293.48 295.65 / - 12 10 5 1 255.96 254.96 254.67 254.68 254.85 255.15 255.55 256.03 256.59 257.22 257.92 258.68 - 259.51 260.41 261.36 262.37 263.45 264.59 265.78 267.03 268.35 269.72 271.15 272.64 274.18 275.79 277.45 279.17 - 280.94 282.78 284.67 286.62 288.62 290.69 292.81 294.99 / - 12 10 6 1 254.62 253.49 253.13 253.1 253.24 253.52 253.91 254.38 254.93 255.56 256.26 257.02 - 257.85 258.75 259.7 260.73 261.81 262.95 264.16 265.42 266.74 268.13 269.57 271.08 272.64 274.26 275.94 277.67 - 279.47 281.33 283.24 285.21 287.24 289.33 291.47 293.67 / - 12 10 7 1 250.85 248.86 248.03 247.78 247.78 247.97 248.29 248.72 249.25 249.89 250.6 251.38 - 252.23 253.16 254.16 255.2 256.31 257.51 258.77 260.1 261.49 262.95 264.47 266.05 267.69 269.4 271.17 273 - 274.89 276.85 278.86 280.94 283.07 285.27 287.53 289.85 / - 12 10 8 1 242.04 235.5 234.3 233.86 233.77 233.92 234.25 234.72 235.31 236.02 236.83 237.73 - 238.72 239.8 240.97 242.21 243.53 244.93 246.38 247.93 249.55 251.24 253 254.83 256.71 258.68 260.72 262.82 - 264.99 267.22 269.52 271.88 274.3 276.79 279.35 281.97 / - 12 10 9 1 222.69 209.46 208.12 207.61 207.58 207.87 208.4 209.12 210.01 211.02 212.19 213.48 - 214.9 216.42 218.01 219.75 221.58 223.51 225.49 227.59 229.79 232.07 234.39 236.83 239.35 241.9 244.57 247.3 - 250.07 252.95 255.89 258.87 261.94 265.09 268.28 271.57 / - 12 10 10 1 183.9 174.19 173.01 172.82 173.18 173.97 175.06 176.33 177.86 179.58 181.48 183.54 - 185.75 188.1 190.59 193.21 195.95 198.81 201.77 204.84 208.02 211.29 214.65 218.1 221.64 225.63 229.36 233.15 - 237.03 240.97 244.99 249.08 253.23 257.45 261.73 266.08 / - 12 10 11 1 140.25 137.73 137.65 138.43 139.71 141.39 143.44 145.8 148.44 151.26 154.34 157.54 - 160.99 164.51 168.28 172.19 176.13 180.31 184.48 188.91 193.47 197.94 202.72 207.38 212.34 217.16 222.32 227.29 - 232.63 237.75 243.27 248.53 254.22 259.61 265.32 270.84 / - 12 10 12 1 110.67 111.72 113.91 116.78 119.91 123.24 126.75 130.44 134.31 138.34 142.54 146.9 - 151.42 156.09 160.91 165.87 170.97 176.43 182.49 188.38 194.24 200.37 206.48 212.74 219.05 225.47 232 238.65 - 245.4 252.26 259.24 266.31 273.46 280.69 287.67 295.14 / - 12 10 13 1 100.12 103.88 107.51 111.3 115.45 119.91 124.63 129.59 134.77 140.17 145.79 151.64 - 157.69 163.97 170.42 177.04 183.83 190.8 197.94 205.24 212.71 220.34 228.13 236.06 244.15 252.38 260.74 269.25 - 277.88 286.65 296.49 306.51 316.57 326.57 336.86 346.84 / - 12 10 14 1 96.14 101.47 106.24 111.32 116.84 122.8 129.21 136.1 143.41 151.11 159.17 167.56 - 176.27 185.28 194.6 204.2 214.09 224.26 234.7 245.41 256.39 267.64 279.08 290.69 302.47 314.43 326.6 338.96 - 351.53 364.3 377.27 390.45 403.84 417.42 431.21 445.2 / - 12 10 15 1 92.32 99.72 107.36 115.43 124.13 133.56 143.73 154.59 166.1 178.24 190.89 204.09 - 217.78 231.93 246.54 261.59 277.06 292.93 309.21 325.9 343.01 360.53 378.48 396.86 415.66 434.88 454.48 474.4 - 494.65 515.23 536.18 557.49 579.18 601.26 623.75 646.66 / - 12 10 16 1 91.08 102.11 114.77 129 144.76 161.64 179.55 198.45 218.31 239.2 261 283.27 - 305.79 329.97 355.06 380.75 407.2 434.4 462.28 490.86 520.17 550.23 581.03 612.52 644.43 675.88 710.49 743.59 - 778.87 815.16 852.12 889.76 928.08 967.71 1009.17 1051.05 / - 12 10 17 1 93.09 116.55 142.91 170.77 199.61 230.22 261.67 295.01 330.83 367.13 405.18 445.26 - 487.6 531.55 574.96 621.81 669.8 719.19 770.7 824.3 879.76 936.63 994.8 1055.26 1116.63 1179.14 1242.35 1303.17 - 1362.67 1422.84 1483.79 1546.79 1611 1674.98 1743.28 1808.75 / - 12 10 18 1 111.02 154.05 201.85 252.03 304.68 360.33 419.57 482.3 548.91 619.35 693.03 770.95 - 853.08 940 1030.66 1124.75 1222.09 1315.82 1404.11 1497.29 1592.18 1691.16 1792.4 1895.61 2000.37 2106.98 2216.69 2329.32 - 2439 2554.25 2670.79 2788.7 2908.52 3032.8 3156.04 3286.01 / - 12 10 19 1 147.88 221.07 301.54 394.31 495.71 605.85 723.26 852.63 991.49 1138.73 1291.66 1438.86 - 1595.1 1751.26 1923.54 2093.61 2268.77 2450.06 2650.77 2842.54 3044.64 3246.27 3461.24 3679.9 3904.91 4139.76 4372.24 4612.59 - 4863.93 5121.49 5384.32 5642.29 5914.41 6190.9 6460.62 6747.04 / - 12 10 20 1 211.62 331.12 455.88 635.29 845.08 1080.62 1331.68 1592.03 1860.05 2148.4 2450.42 2772.11 - 3111.67 3475.15 3829.47 4235.33 4623.42 5030.45 5447.91 5930.46 6388.96 6852.46 7340.61 7853.45 8364.05 8912.25 9459.36 10010.56 - 10600.9 11198.02 11813.78 12468.92 13120.31 13793.59 14455.5 15160.7 / - 12 11 1 1 259.31 258.34 258.07 258.08 258.26 258.56 258.96 259.44 260 260.63 261.33 262.1 - 262.92 263.81 264.76 265.77 266.84 267.98 269.16 270.41 271.72 273.08 274.51 275.99 277.53 279.12 280.77 282.48 - 284.25 286.07 287.95 289.89 291.88 293.93 296.04 298.2 / - 12 11 2 1 259.21 258.23 257.95 257.96 258.14 258.44 258.83 259.32 259.87 260.5 261.2 261.96 - 262.79 263.68 264.63 265.64 266.71 267.84 269.03 270.28 271.59 272.95 274.38 275.86 277.4 278.99 280.65 282.36 - 284.12 285.95 287.83 289.77 291.76 293.82 295.92 298.09 / - 12 11 3 1 259.02 258.02 257.73 257.73 257.9 258.2 258.6 259.08 259.63 260.26 260.96 261.72 - 262.55 263.44 264.39 265.4 266.47 267.6 268.79 270.04 271.35 272.72 274.14 275.62 277.16 278.76 280.41 282.13 - 283.9 285.72 287.61 289.55 291.55 293.6 295.71 297.88 / - 12 11 4 1 258.66 257.63 257.32 257.31 257.48 257.77 258.16 258.64 259.19 259.82 260.51 261.28 - 262.1 262.99 263.94 264.95 266.03 267.16 268.35 269.6 270.91 272.28 273.71 275.19 276.73 278.33 279.99 281.71 - 283.48 285.31 287.2 289.15 291.15 293.21 295.33 297.5 / - 12 11 5 1 257.98 256.87 256.53 256.51 256.66 256.95 257.33 257.81 258.36 258.98 259.68 260.44 - 261.26 262.15 263.11 264.12 265.2 266.33 267.53 268.78 270.1 271.47 272.9 274.39 275.94 277.55 279.22 280.94 - 282.72 284.56 286.46 288.41 290.43 292.5 294.62 296.81 / - 12 11 6 1 256.53 255.23 254.79 254.7 254.81 255.07 255.43 255.89 256.43 257.05 257.74 258.5 - 259.33 260.22 261.18 262.2 263.28 264.43 265.64 266.9 268.23 269.62 271.07 272.58 274.15 275.78 277.46 279.21 - 281.02 282.88 284.81 286.79 288.83 290.93 293.09 295.31 / - 12 11 7 1 252.39 249.97 248.96 248.66 248.63 248.8 249.1 249.53 250.05 250.67 251.37 252.15 - 253.01 253.94 254.94 256.02 257.16 258.37 259.64 260.99 262.4 263.87 265.4 267 268.67 270.4 272.19 274.04 - 275.95 277.93 279.97 282.07 284.23 286.46 288.74 291.08 / - 12 11 8 1 243.2 235.76 234.4 233.91 233.79 233.92 234.25 234.72 235.32 236.04 236.86 237.78 - 238.79 239.89 241.08 242.35 243.67 245.1 246.6 248.18 249.84 251.57 253.37 255.24 257.15 259.17 261.25 263.4 - 265.61 267.89 270.23 272.64 275.12 277.66 280.27 282.93 / - 12 11 9 1 223.5 209.05 207.73 207.26 207.25 207.57 208.12 208.87 209.79 210.86 212.04 213.36 - 214.81 216.38 218.05 219.79 221.67 223.64 225.67 227.83 230.08 232.41 234.78 237.28 239.86 242.48 245.21 248.01 - 250.85 253.79 256.81 259.85 262.99 266.17 269.44 272.77 / - 12 11 10 1 183.73 174.13 172.96 172.79 173.17 173.99 175.04 176.39 177.95 179.7 181.63 183.72 - 185.96 188.35 190.88 193.54 196.32 199.21 202.22 205.34 208.56 211.88 215.29 218.79 222.38 226.06 229.81 233.65 - 237.99 242 246.07 250.22 254.43 258.71 263.05 267.46 / - 12 11 11 1 140.3 137.9 137.84 138.62 139.95 141.64 143.74 146.13 148.77 151.62 154.72 158.02 - 161.42 165.06 168.76 172.71 176.8 180.89 185.23 189.72 194.13 198.85 203.46 208.38 213.17 218.28 223.23 228.52 - 233.92 239.1 244.34 250 255.38 261.22 266.73 272.58 / - 12 11 12 1 110.85 111.98 114.19 117.09 120.25 123.61 127.16 130.88 134.77 138.84 143.07 147.46 - 152.01 156.71 161.57 166.56 171.69 176.96 182.96 189.08 195.04 201.11 207.39 213.69 219.97 226.44 233.27 239.97 - 246.79 253.41 260.43 267.56 274.8 282.09 289.49 297.05 / - 12 11 13 1 100.32 104.17 107.83 111.64 115.81 120.29 125.04 130.02 135.23 140.67 146.32 152.2 - 158.29 164.6 171.09 177.75 184.58 191.58 198.76 206.1 213.61 221.29 229.12 237.1 245.24 253.51 261.93 270.49 - 279.18 288 296.96 307.37 317.59 327.82 338.05 348.31 / - 12 11 14 1 96.24 101.7 106.53 111.64 117.18 123.17 129.6 136.5 143.84 151.57 159.66 168.08 - 176.82 185.87 195.22 204.86 214.78 224.98 235.45 246.2 257.22 268.5 280.01 291.69 303.54 315.57 327.79 340.22 - 352.85 365.68 378.72 391.97 405.42 419.08 432.94 447 / - 12 11 15 1 92.38 99.88 107.56 115.68 124.41 133.87 144.05 154.93 166.47 178.62 191.32 204.53 - 218.25 232.43 247.07 262.15 277.67 293.59 309.91 326.63 343.77 361.31 379.29 397.67 416.49 435.73 455.38 475.39 - 495.72 516.4 537.42 558.8 580.55 602.7 625.24 648.2 / - 12 11 16 1 91.12 102.23 114.93 129.18 144.99 161.91 179.85 198.71 218.54 239.44 261.23 283.74 - 306.05 330.24 355.37 381.08 407.54 434.76 462.69 491.29 520.61 550.65 581.43 612.9 644.97 677.1 710.66 744.18 - 778.81 815.01 852.08 889.8 928.17 967.17 1008.17 1049.61 / - 12 11 17 1 93.09 116.58 143.08 170.83 199.69 230.4 261.75 295.09 330.88 367.13 406.18 445.14 - 487.44 531.33 574.73 621.57 669.48 718.71 770.04 823.43 878.67 935.36 993.25 1053.77 1115.28 1177.32 1241.3 1300.29 - 1356.6 1413.99 1471.21 1530.39 1591.26 1650.98 1716.51 1777.08 / - 12 11 18 1 110.91 153.96 201.79 252 304.74 360.39 419.56 482.25 548.69 618.95 692.48 770.15 - 851.94 938.48 1028.75 1122.54 1219.8 1314.28 1404.43 1496.83 1593.96 1693.35 1794.11 1898.11 2003.65 2111.14 2221.74 2335.87 - 2449.75 2565.24 2684.75 2805.91 2928.87 3056.29 3182.42 3315.47 / - 12 11 19 1 147.71 220.95 300.76 393.38 494.5 604.38 722.87 850.89 990.28 1137.08 1290.12 1438.04 - 1595.04 1752.09 1916.94 2097.31 2272.89 2455.56 2657.65 2851.08 3054.76 3258.3 3473.5 3694.84 3922.48 4159.53 4394.45 4636.86 - 4890.44 5140.48 5415.75 5676.46 5952.06 6233.31 6508.56 6801.43 / - 12 11 20 1 211.47 331.26 456.17 631.81 836.08 1073.47 1323.93 1585.38 1857.82 2152.28 2456.3 2780.23 - 3122.58 3463.04 3846.05 4224.41 4646.47 5056.88 5478.12 5921.9 6427.28 6894.95 7387.15 7894.28 8414.69 8957.9 9524.74 10087.88 - 10657.85 11278.77 11899.86 12539.33 13218.26 13897.64 14567.61 15282.83 / - 12 12 1 1 261.31 260.27 259.96 259.95 260.11 260.4 260.79 261.27 261.82 262.45 263.14 263.9 - 264.73 265.61 266.56 267.57 268.64 269.78 270.97 272.21 273.52 274.89 276.31 277.8 279.34 280.94 282.59 284.31 - 286.08 287.91 289.79 291.73 293.73 295.79 297.91 300.08 / - 12 12 2 1 261.21 260.15 259.83 259.82 259.98 260.27 260.66 261.14 261.69 262.31 263.01 263.77 - 264.59 265.48 266.43 267.44 268.51 269.64 270.83 272.08 273.39 274.75 276.18 277.66 279.2 280.8 282.46 284.17 - 285.95 287.78 289.66 291.61 293.61 295.67 297.78 299.96 / - 12 12 3 1 261.02 259.94 259.61 259.59 259.74 260.03 260.42 260.89 261.44 262.06 262.76 263.51 - 264.34 265.23 266.17 267.18 268.26 269.39 270.58 271.83 273.14 274.5 275.93 277.42 278.96 280.56 282.22 283.93 - 285.71 287.54 289.43 291.38 293.38 295.44 297.56 299.74 / - 12 12 4 1 260.65 259.53 259.18 259.15 259.3 259.58 259.96 260.43 260.98 261.6 262.29 263.05 - 263.87 264.76 265.71 266.72 267.79 268.92 270.12 271.37 272.68 274.05 275.48 276.97 278.51 280.12 281.78 283.5 - 285.28 287.11 289.01 290.96 292.97 295.03 297.16 299.34 / - 12 12 5 1 259.95 258.76 258.37 258.32 258.46 258.73 259.1 259.57 260.11 260.73 261.42 262.18 - 263 263.89 264.84 265.85 266.92 268.06 269.26 270.51 271.83 273.2 274.64 276.13 277.68 279.29 280.96 282.69 - 284.48 286.32 288.23 290.19 292.21 294.29 296.42 298.62 / - 12 12 6 1 258.32 256.86 256.32 256.17 256.25 256.47 256.81 257.25 257.78 258.39 259.08 259.83 - 260.66 261.55 262.51 263.53 264.61 265.76 266.97 268.25 269.58 270.98 272.44 273.96 275.54 277.18 278.87 280.63 - 282.45 284.33 286.27 288.27 290.32 292.44 294.61 296.85 / - 12 12 7 1 253.82 251 249.72 249.37 249.31 249.46 249.75 250.17 250.69 251.3 252.01 252.79 - 253.65 254.59 255.61 256.69 257.85 259.07 260.36 261.72 263.15 264.64 266.2 267.82 269.51 271.26 273.08 274.96 - 276.9 278.9 280.97 283.1 285.29 287.54 289.86 292.23 / - 12 12 8 1 244.26 235.81 234.34 233.8 233.65 233.77 234.08 234.55 235.16 235.89 236.73 237.66 - 238.7 239.83 241.04 242.31 243.69 245.15 246.69 248.31 250 251.77 253.59 255.5 257.49 259.55 261.68 263.88 - 266.14 268.45 270.85 273.32 275.85 278.45 281.11 283.83 / - 12 12 9 1 223.46 208.51 207.25 206.83 206.87 207.23 207.82 208.61 209.56 210.66 211.89 213.26 - 214.75 216.33 218.05 219.85 221.77 223.77 225.89 228.06 230.36 232.75 235.18 237.74 240.38 243.06 245.85 248.73 - 251.63 254.65 257.73 260.85 264.07 267.32 270.67 274.09 / - 12 12 10 1 183.44 174.08 172.88 172.71 173.17 173.96 175.08 176.46 178.04 179.74 181.69 183.8 - 186.07 188.48 191.03 193.71 196.51 199.62 202.68 205.84 209.11 212.47 215.93 219.49 223.13 226.86 230.67 234.56 - 238.52 242.57 246.68 251.37 255.64 259.99 264.39 268.87 / - 12 12 11 1 140.35 138.03 138.01 138.85 140.17 141.91 144.02 146.43 149.09 152.02 155.11 158.43 - 161.93 165.52 169.35 173.33 177.34 181.6 185.84 190.35 194.99 199.55 204.41 209.15 214.23 219.39 224.4 229.75 - 234.91 240.45 245.76 251.48 256.93 262.44 268.41 274.06 / - 12 12 12 1 111.04 112.25 114.48 117.41 120.61 124 127.57 131.32 135.25 139.34 143.6 148.02 - 152.6 157.34 162.22 167.25 172.42 177.72 183.4 189.61 195.77 201.95 208.25 214.63 221.11 227.63 234.27 241.02 - 247.89 254.87 261.96 269.16 276.1 283.5 290.95 298.51 / - 12 12 13 1 100.56 104.47 108.17 112 116.19 120.69 125.46 130.47 135.71 141.17 146.85 152.76 - 158.88 165.22 171.76 178.46 185.32 192.36 199.58 206.96 214.51 222.22 230.1 238.13 246.31 254.63 263.1 271.71 - 280.46 289.34 298.35 307.83 318.15 328.61 339.07 349.53 / - 12 12 14 1 96.38 101.94 106.82 111.96 117.53 123.54 130 136.91 144.28 152.03 160.14 168.59 - 177.37 186.45 195.83 205.5 215.45 225.68 236.18 246.96 258 269.31 280.88 292.63 304.55 316.64 328.93 341.42 - 354.11 367.01 380.12 393.43 406.95 420.67 434.6 448.73 / - 12 12 15 1 92.49 100.05 107.78 115.95 124.7 134.17 144.37 155.27 166.82 179 191.73 204.96 - 218.7 232.9 247.56 262.66 278.2 294.16 310.53 327.29 344.45 362.01 380 398.4 417.22 436.46 456.12 476.19 - 496.62 517.38 538.48 559.94 581.76 603.96 626.56 649.56 / - 12 12 16 1 91.19 102.37 115.09 129.36 145.21 162.1 180.06 198.98 218.8 239.64 261.43 284.08 - 306.64 330.45 355.6 381.33 407.79 435.01 462.95 491.59 520.91 550.94 581.7 613.15 645.18 677.61 710.73 743.77 - 780.17 814.67 851.63 889.44 927.91 966.97 1006.64 1047.57 / - 12 12 17 1 93.09 116.58 143.09 170.87 199.91 230.46 261.79 295.1 330.87 367.07 406.05 445.05 - 487.18 530.99 574.36 621.19 669.06 718.31 769.31 822.49 877.49 934.26 991.52 1051.81 1113.5 1175.8 1239.13 1301 - 1356.44 1415.16 1472.89 1533.33 1594.62 1657.62 1722.8 1784.35 / - 12 12 18 1 110.81 153.86 201.65 251.96 304.75 360.44 419.5 482.13 548.41 618.39 691.88 769.32 - 850.78 936.9 1026.75 1120.17 1216.19 1312.15 1402.88 1495.87 1593.57 1693.73 1794.25 1900.04 2006.47 2114.94 2224.82 2341.84 - 2458.64 2573.3 2694.01 2816.52 2941.55 3071.52 3200.73 3337.37 / - 12 12 19 1 147.55 220.86 300.43 392.47 494.49 604.37 720.66 848.41 986.76 1135.38 1288.55 1437.21 - 1588.63 1753.05 1918.91 2100.39 2277.4 2461.48 2650.12 2860.17 3065.66 3271.18 3486.66 3710.91 3941.31 4173.25 4418.13 4662.97 - 4918.79 5171.46 5449.32 5712.91 5991.74 6275.65 6553.91 6849.91 / - 12 12 20 1 211.33 331.49 456.79 624.85 831.13 1066.47 1317.05 1577.39 1853.36 2148.34 2462.82 2789.27 - 3115.82 3477.89 3863.97 4245.67 4671.78 5085.65 5510.8 5958.61 6468.92 6940.93 7437.58 7949.51 8469.8 9017.77 9580.44 10167.48 - 10739.27 11345.76 11992.63 12638.13 13301.71 14010 14687.2 15409.29 / - 12 13 1 1 263.25 262.16 261.82 261.79 261.95 262.23 262.61 263.08 263.63 264.25 264.94 265.7 - 266.52 267.41 268.35 269.36 270.43 271.56 272.75 274 275.31 276.68 278.11 279.59 281.14 282.74 284.4 286.12 - 287.89 289.72 291.62 293.56 295.57 297.63 299.76 301.93 / - 12 13 2 1 263.15 262.04 261.7 261.66 261.81 262.09 262.47 262.94 263.49 264.11 264.8 265.56 - 266.38 267.26 268.21 269.22 270.29 271.42 272.61 273.86 275.17 276.54 277.97 279.45 281 282.6 284.26 285.98 - 287.75 289.59 291.48 293.43 295.44 297.5 299.63 301.81 / - 12 13 3 1 262.95 261.82 261.46 261.42 261.57 261.84 262.22 262.69 263.23 263.85 264.54 265.3 - 266.12 267 267.95 268.96 270.03 271.16 272.35 273.6 274.91 276.28 277.71 279.19 280.74 282.34 284.01 285.73 - 287.51 289.34 291.24 293.19 295.2 297.27 299.39 301.58 / - 12 13 4 1 262.58 261.41 261.02 260.97 261.11 261.38 261.75 262.21 262.75 263.37 264.06 264.81 - 265.63 266.52 267.46 268.47 269.54 270.68 271.87 273.12 274.43 275.8 277.23 278.72 280.27 281.88 283.55 285.27 - 287.05 288.89 290.79 292.75 294.77 296.84 298.97 301.16 / - 12 13 5 1 261.86 260.6 260.18 260.1 260.22 260.48 260.85 261.31 261.84 262.46 263.14 263.9 - 264.72 265.6 266.55 267.56 268.63 269.77 270.97 272.22 273.54 274.92 276.35 277.85 279.4 281.02 282.69 284.42 - 286.22 288.07 289.98 291.94 293.97 296.05 298.2 300.4 / - 12 13 6 1 259.98 258.35 257.71 257.5 257.53 257.72 258.04 258.46 258.98 259.58 260.25 261.01 - 261.83 262.72 263.68 264.7 265.79 266.95 268.16 269.44 270.79 272.19 273.66 275.19 276.78 278.43 280.14 281.91 - 283.75 285.64 287.6 289.61 291.69 293.82 296.02 298.27 / - 12 13 7 1 255.11 251.66 250.3 249.89 249.8 249.92 250.19 250.6 251.12 251.73 252.44 253.23 - 254.1 255.05 256.08 257.18 258.35 259.59 260.91 262.29 263.73 265.25 266.83 268.48 270.2 271.98 273.82 275.73 - 277.7 279.7 281.8 283.97 286.19 288.48 290.83 293.25 / - 12 13 8 1 245.21 235.7 234.11 233.51 233.34 233.44 233.74 234.22 234.83 235.57 236.42 237.38 - 238.44 239.59 240.84 242.17 243.55 245.05 246.63 248.29 250.03 251.84 253.7 255.67 257.7 259.81 262 264.25 - 266.54 268.93 271.39 273.92 276.51 279.15 281.87 284.66 / - 12 13 9 1 224.11 207.81 206.68 206.34 206.46 206.87 207.5 208.33 209.32 210.46 211.73 213.13 - 214.66 216.3 218.04 219.91 221.86 223.91 226.08 228.33 230.67 233.09 235.63 238.22 240.9 243.68 246.5 249.44 - 252.45 255.5 258.66 261.85 265.15 268.52 271.92 275.41 / - 12 13 10 1 183.1 174.03 172.83 172.69 173.12 173.98 175.13 176.46 178.07 179.86 181.84 183.98 - 186.28 188.73 191.32 194.04 196.88 199.85 202.93 206.12 209.42 213.07 216.59 220.19 223.89 227.67 231.53 235.48 - 239.5 243.6 247.78 252.02 256.34 260.73 265.75 270.29 / - 12 13 11 1 140.49 138.2 138.17 139.03 140.41 142.15 144.29 146.77 149.47 152.38 155.55 158.84 - 162.37 166.07 169.84 173.85 178.01 182.17 186.6 191.16 195.66 200.45 205.15 210.16 215.29 220.26 225.57 230.71 - 236.21 241.49 247.18 252.61 258.48 264.05 269.69 275.81 / - 12 13 12 1 111.25 112.53 114.78 117.74 120.97 124.4 128.01 131.79 135.74 139.86 144.15 148.6 - 153.21 157.97 162.89 167.95 173.15 178.49 183.95 190.08 196.49 202.78 209.07 215.45 221.95 228.59 235.27 242.07 - 248.98 256.01 263.15 270.4 277.76 285.24 292.77 300.03 / - 12 13 13 1 100.83 104.79 108.53 112.38 116.58 121.11 125.9 130.93 136.2 141.69 147.4 153.33 - 159.48 165.85 172.43 179.17 186.07 193.15 200.4 207.82 215.4 223.16 231.07 239.14 247.36 255.73 264.25 272.91 - 281.7 290.64 299.7 308.9 318.58 329.15 339.85 350.56 / - 12 13 14 1 96.57 102.21 107.14 112.31 117.89 123.93 130.4 137.34 144.72 152.49 160.62 169.1 - 177.9 187.01 196.42 206.12 216.09 226.35 236.88 247.67 258.74 270.08 281.67 293.49 305.48 317.65 330 342.55 - 355.3 368.26 381.42 394.8 408.38 422.17 436.16 450.36 / - 12 13 15 1 92.63 100.25 108.02 116.22 125 134.49 144.69 155.6 167.16 179.35 192.11 205.37 - 219.12 233.34 248.01 263.12 278.66 294.64 311.03 327.83 345.02 362.6 380.6 399 417.81 437.04 456.69 476.75 - 497.23 518.09 539.28 560.82 582.71 604.97 627.62 650.67 / - 12 13 16 1 91.29 102.52 115.26 129.54 145.43 162.29 180.24 199.17 219.02 239.81 261.58 284.21 - 307.27 330.62 355.71 381.47 407.92 435.12 463.04 491.68 521.02 551.05 581.78 613.19 645.2 677.27 709.7 744.93 - 778.63 814.21 851.01 888.7 927.24 966.5 1006.32 1046.66 / - 12 13 17 1 93.04 116.59 143.11 170.88 199.95 230.48 261.89 295.32 330.77 366.92 405.82 444.78 - 486.76 530.51 574.37 620.63 668.48 717.64 768.5 821.5 876.29 932.82 989.82 1049.85 1111.37 1174.23 1237.42 1299.11 - 1355.62 1414.93 1474.39 1535.83 1598.28 1663.06 1727.53 1791.63 / - 12 13 18 1 110.72 153.75 201.57 251.88 304.67 360.38 419.35 481.87 547.96 617.8 691.16 768.48 - 849.68 935.44 1024.89 1117.95 1213.99 1309.97 1401.28 1494.94 1593.02 1694 1795.36 1901.93 2009.23 2118.63 2229.59 2347.47 - 2465.73 2581.48 2703.4 2827.15 2953.52 3081.79 3216.22 3353.49 / - 12 13 19 1 147.41 220.81 299.83 392.51 493.22 602.75 720.34 847.66 985.7 1133.88 1287.08 1430.53 - 1588.81 1754.21 1921.16 2103.83 2282.32 2467.92 2658.34 2870.18 3077.31 3285.16 3502.73 3727.42 3960.85 4196.12 4443.54 4691.47 - 4949.32 5205.52 5474.58 5752.6 6034.31 6321.11 6603.1 6902.61 / - 12 13 20 1 211.24 331.86 457.83 618.16 823.21 1053.79 1309.08 1569.89 1849.47 2142.35 2453.17 2779.48 - 3128.63 3494.17 3859.35 4268.77 4663.86 5117.25 5546.7 5998.52 6458.09 6991.25 7493.3 8009.52 8530.33 9083.56 9655.38 10233.89 - 10827.88 11440.34 12072.13 12745.65 13417.17 14104.93 14815.21 15546.54 / - 12 14 1 1 265.11 264.01 263.65 263.62 263.76 264.04 264.41 264.88 265.42 266.04 266.73 267.48 - 268.3 269.18 270.13 271.14 272.21 273.34 274.53 275.78 277.09 278.46 279.89 281.37 282.92 284.52 286.19 287.91 - 289.69 291.53 293.42 295.38 297.39 299.46 301.59 303.77 / - 12 14 2 1 265.01 263.89 263.52 263.48 263.62 263.89 264.27 264.73 265.28 265.89 266.58 267.33 - 268.15 269.04 269.98 270.99 272.06 273.19 274.38 275.63 276.94 278.31 279.74 281.23 282.77 284.38 286.04 287.76 - 289.54 291.38 293.28 295.24 297.25 299.32 301.45 303.64 / - 12 14 3 1 264.81 263.66 263.28 263.23 263.37 263.63 264.01 264.47 265.01 265.62 266.31 267.06 - 267.88 268.76 269.71 270.71 271.78 272.91 274.11 275.36 276.67 278.04 279.47 280.96 282.5 284.11 285.78 287.5 - 289.28 291.12 293.02 294.98 297 299.07 301.21 303.4 / - 12 14 4 1 264.43 263.23 262.83 262.76 262.89 263.15 263.51 263.97 264.51 265.12 265.8 266.55 - 267.37 268.25 269.2 270.21 271.28 272.41 273.6 274.85 276.16 277.54 278.97 280.46 282.01 283.62 285.29 287.02 - 288.81 290.65 292.56 294.52 296.54 298.62 300.76 302.96 / - 12 14 5 1 263.68 262.36 261.9 261.79 261.9 262.14 262.49 262.94 263.47 264.08 264.76 265.51 - 266.32 267.21 268.15 269.16 270.24 271.37 272.57 273.82 275.14 276.52 277.96 279.46 281.02 282.64 284.32 286.06 - 287.85 289.71 291.63 293.6 295.64 297.73 299.88 302.1 / - 12 14 6 1 261.48 259.66 258.91 258.63 258.61 258.77 259.06 259.46 259.97 260.55 261.22 261.97 - 262.79 263.68 264.64 265.67 266.77 267.93 269.15 270.44 271.8 273.21 274.69 276.24 277.84 279.51 281.24 283.03 - 284.89 286.8 288.78 290.81 292.91 295.07 297.29 299.57 / - 12 14 7 1 256.22 252.12 250.66 250.19 250.05 250.14 250.4 250.8 251.31 251.93 252.64 253.44 - 254.33 255.29 256.33 257.45 258.64 259.91 261.24 262.65 264.13 265.67 267.28 268.96 270.71 272.53 274.41 276.35 - 278.32 280.39 282.53 284.74 287 289.34 291.73 294.19 / - 12 14 8 1 246.03 235.43 233.74 233.05 232.86 232.97 233.28 233.77 234.4 235.15 236.02 237 - 238.09 239.27 240.54 241.91 243.36 244.86 246.49 248.19 249.97 251.83 253.77 255.74 257.83 259.99 262.22 264.53 - 266.91 269.33 271.85 274.44 277.09 279.8 282.59 285.44 / - 12 14 9 1 223.85 207.43 206.3 205.97 206.09 206.52 207.18 208.03 209.05 210.22 211.53 212.97 - 214.54 216.23 218.03 219.94 221.96 224.07 226.27 228.58 230.97 233.46 236.04 238.7 241.44 244.27 247.18 250.17 - 253.24 256.4 259.61 262.89 266.27 269.68 273.19 276.74 / - 12 14 10 1 183.25 173.98 172.8 172.68 173.12 174 175.12 176.53 178.16 179.99 181.99 184.17 - 186.5 188.98 191.61 194.37 197.25 200.26 203.39 206.63 209.97 213.42 216.96 220.6 224.65 228.49 232.41 236.41 - 240.49 244.65 248.89 253.2 257.58 262.03 266.55 271.13 / - 12 14 11 1 140.54 138.32 138.37 139.25 140.62 142.43 144.6 147.07 149.8 152.79 155.94 159.33 - 162.82 166.55 170.43 174.37 178.56 182.89 187.21 191.8 196.51 201.16 206.1 210.94 216.1 221.38 226.49 231.94 - 237.2 242.85 248.27 254.1 259.66 265.68 271.38 277.58 / - 12 14 12 1 111.47 112.82 115.11 118.1 121.37 124.83 128.47 132.27 136.25 140.4 144.71 149.19 - 153.83 158.62 163.57 168.66 173.89 179.26 184.76 190.52 197 203.42 209.93 216.4 222.93 229.62 236.27 243.11 - 250.35 257.14 264.33 271.63 279.05 286.57 294.22 301.92 / - 12 14 13 1 101.13 105.14 108.91 112.79 117.01 121.56 126.37 131.43 136.72 142.23 147.97 153.92 - 160.1 166.49 173.09 179.88 186.82 193.93 201.21 208.67 216.29 224.08 232.02 240.13 248.39 256.81 265.37 274.07 - 282.92 291.9 301.02 310.27 319.65 329.16 339.96 350.95 / - 12 14 14 1 96.79 102.51 107.48 112.67 118.28 124.33 130.82 137.77 145.17 152.95 161.1 169.6 - 178.41 187.54 196.97 206.69 216.7 226.98 237.53 248.34 259.42 270.77 282.38 294.25 306.31 318.54 330.96 343.57 - 356.38 369.4 382.62 396.05 409.69 423.54 437.6 451.86 / - 12 14 15 1 92.81 100.48 108.29 116.52 125.31 134.81 145.02 155.93 167.5 179.68 192.44 205.71 - 219.49 233.72 248.39 263.5 279.04 295.01 311.39 328.2 345.41 363.02 381.02 399.42 418.22 437.43 457.05 477.08 - 497.52 518.38 539.65 561.27 583.25 605.58 628.29 651.38 / - 12 14 16 1 91.42 102.69 115.45 129.74 145.62 162.46 180.4 199.39 219.17 239.93 261.67 284.27 - 306.83 330.57 355.68 381.44 407.9 435.06 462.92 491.51 520.81 550.83 581.54 612.92 644.9 676.17 709.3 744.41 - 778.4 813.42 850.04 887.54 925.89 965.07 1005.07 1045.67 / - 12 14 17 1 93.06 116.6 143.12 170.88 199.92 230.46 262.45 295.78 330.54 366.65 405.47 444.3 - 486.14 529.77 574.38 619.77 667.64 716.73 767.53 820.28 874.84 931.12 987.83 1047.58 1109.04 1171.79 1235.16 1297.27 - 1354.39 1414.43 1475.78 1537.31 1600.93 1666.99 1732.92 1798.82 / - 12 14 18 1 110.63 153.69 201.46 251.77 304.52 360.19 419.07 481.42 547.35 616.99 690.13 767.34 - 848.37 933.75 1022.85 1115.79 1211.57 1307.48 1399.42 1493.8 1592.5 1694.04 1796.38 1903.73 2011.97 2122.39 2234.47 2353.33 - 2472.63 2589.96 2713.14 2838.38 2966.15 3095.85 3235.96 3370.31 / - 12 14 19 1 147.29 220.83 299.19 391.68 493.13 602.68 718.21 845.36 982.54 1128.56 1281.59 1431.04 - 1588.99 1755.47 1923.61 2096.69 2287.65 2474.93 2667.23 2868.61 3090.02 3300.27 3520.15 3745.65 3982.16 4221.07 4467.39 4722.04 - 4982.95 5242.11 5514.41 5784.54 6080.31 6370.73 6657.28 6959.69 / - 12 14 20 1 211.21 332.4 459.21 610.16 815.71 1049.05 1302.78 1563.39 1843.58 2142.84 2454.71 2790.91 - 3143.12 3490.42 3881.02 4294.71 4693.95 5113.48 5586.62 6042.9 6507.93 6995.07 7554.08 8075.79 8603.26 9157.15 9730.71 10317.13 - 10906.54 11544.01 12182.79 12841.44 13541.85 14237.51 14955.75 15668.13 / - 12 15 1 1 266.88 265.8 265.45 265.4 265.55 265.82 266.19 266.65 267.19 267.81 268.49 269.24 - 270.06 270.94 271.89 272.9 273.97 275.1 276.29 277.54 278.85 280.22 281.65 283.14 284.69 286.29 287.96 289.68 - 291.47 293.31 295.21 297.17 299.19 301.26 303.4 305.59 / - 12 15 2 1 266.78 265.67 265.31 265.26 265.4 265.67 266.04 266.5 267.04 267.65 268.34 269.09 - 269.91 270.79 271.73 272.74 273.81 274.94 276.13 277.38 278.69 280.06 281.49 282.98 284.53 286.14 287.81 289.53 - 291.32 293.16 295.06 297.02 299.04 301.12 303.25 305.45 / - 12 15 3 1 266.58 265.44 265.06 265 265.14 265.4 265.77 266.22 266.76 267.37 268.05 268.8 - 269.62 270.5 271.45 272.45 273.52 274.65 275.84 277.09 278.4 279.78 281.21 282.7 284.25 285.86 287.53 289.25 - 291.04 292.89 294.79 296.75 298.78 300.86 303 305.19 / - 12 15 4 1 266.19 264.99 264.59 264.51 264.63 264.88 265.25 265.7 266.23 266.84 267.52 268.27 - 269.08 269.96 270.91 271.91 272.98 274.11 275.31 276.56 277.87 279.25 280.68 282.17 283.73 285.34 287.01 288.75 - 290.54 292.39 294.3 296.27 298.29 300.38 302.52 304.73 / - 12 15 5 1 265.31 263.94 263.43 263.29 263.37 263.6 263.94 264.37 264.89 265.49 266.17 266.91 - 267.73 268.61 269.55 270.56 271.64 272.77 273.97 275.24 276.56 277.94 279.39 280.89 282.46 284.09 285.77 287.52 - 289.33 291.2 293.12 295.11 297.16 299.27 301.43 303.66 / - 12 15 6 1 262.76 260.75 259.89 259.53 259.45 259.57 259.83 260.22 260.7 261.28 261.94 262.69 - 263.51 264.4 265.36 266.4 267.5 268.67 269.91 271.21 272.58 274.01 275.51 277.07 278.7 280.39 282.14 283.96 - 285.83 287.77 289.78 291.84 293.96 296.15 298.4 300.71 / - 12 15 7 1 257.13 252.34 250.77 250.23 250.05 250.11 250.35 250.73 251.24 251.86 252.58 253.39 - 254.28 255.27 256.33 257.47 258.68 259.98 261.34 262.78 264.29 265.87 267.52 269.24 271.02 272.88 274.8 276.79 - 278.85 280.97 283.15 285.36 287.68 290.06 292.51 295.02 / - 12 15 8 1 246.71 234.91 233.21 232.57 232.38 232.47 232.8 233.29 233.94 234.72 235.62 236.63 - 237.75 238.96 240.28 241.65 243.14 244.72 246.39 248.14 249.98 251.85 253.85 255.92 258.06 260.25 262.55 264.91 - 267.35 269.87 272.42 275.07 277.78 280.57 283.4 286.31 / - 12 15 9 1 224.27 207.07 205.94 205.61 205.73 206.17 206.84 207.71 208.75 209.94 211.28 212.75 - 214.34 216.06 217.89 219.84 221.89 224.05 226.32 228.68 231.14 233.69 236.34 239.07 241.9 244.82 247.82 250.89 - 254.03 257.25 260.53 263.9 267.35 270.86 274.45 278.1 / - 12 15 10 1 182.81 173.94 172.69 172.6 173.13 173.97 175.17 176.6 178.26 180.11 182.06 184.26 - 186.61 189.12 191.77 194.7 197.63 200.68 203.85 207.14 210.53 214.03 217.62 221.31 225.1 228.97 232.93 237.35 - 241.5 245.72 250.01 254.38 258.83 263.34 267.93 272.58 / - 12 15 11 1 140.69 138.44 138.52 139.44 140.83 142.67 144.89 147.39 150.18 153.16 156.39 159.75 - 163.35 167.03 170.95 175.01 179.24 183.48 187.98 192.61 197.19 202.07 206.85 211.95 217.17 222.23 227.67 232.9 - 238.5 243.9 249.69 255.24 261.22 266.91 273.08 278.91 / - 12 15 12 1 111.7 113.13 115.47 118.5 121.81 125.3 128.96 132.8 136.8 140.97 145.31 149.82 - 154.48 159.29 164.26 169.38 174.64 180.04 185.57 191.22 197.45 204.12 210.68 217.15 223.85 230.63 237.33 244.4 - 251.42 258.56 265.82 273.19 280.32 287.9 295.6 303.42 / - 12 15 13 1 101.48 105.54 109.34 113.25 117.5 122.06 126.89 131.97 137.28 142.81 148.56 154.54 - 160.73 167.14 173.76 180.58 187.57 194.72 202.03 209.51 217.17 224.99 232.96 241.1 249.4 257.85 266.45 275.2 - 284.08 293.11 302.28 311.58 321.01 330.57 340.27 350.91 / - 12 15 14 1 97.08 102.86 107.87 113.08 118.7 124.77 131.27 138.23 145.63 153.43 161.59 170.09 - 178.92 188.05 197.49 207.21 217.23 227.52 238.09 248.92 260.02 271.37 282.98 294.84 306.96 319.27 331.76 344.44 - 357.3 370.38 383.65 397.14 410.83 424.73 438.84 453.16 / - 12 15 15 1 93.05 100.76 108.6 116.84 125.65 135.15 145.36 156.26 167.82 180 192.74 205.99 - 219.76 234 248.68 263.78 279.3 295.24 311.6 328.37 345.55 363.14 381.16 399.56 418.35 437.53 457.11 477.09 - 497.47 518.26 539.45 561.05 583.05 605.45 628.22 651.37 / - 12 15 16 1 91.6 102.89 115.66 130.02 145.8 162.62 180.53 199.48 219.25 239.96 261.68 284.23 - 306.73 330.39 355.45 381.18 407.64 434.75 462.54 491.03 520.22 550.12 580.72 612.04 644.04 676.55 709.28 743.37 - 777.21 812.42 848.5 885.84 924.06 963.15 1003.05 1043.71 / - 12 15 17 1 93.17 116.62 143.13 170.86 199.89 230.33 262.28 295.51 330.16 366.16 404.93 443.61 - 485.3 528.73 573.52 618.39 666.37 715.43 766.11 818.66 873.02 929.16 985.74 1045.31 1106.36 1168.67 1231.82 1294.14 - 1353.8 1412.5 1474.75 1538.24 1602.15 1667.38 1733.99 1800.59 / - 12 15 18 1 110.57 153.61 201.35 251.63 304.26 359.76 418.58 480.73 546.37 615.73 688.69 765.59 - 846.54 931.77 1020.86 1113.35 1208.64 1304.48 1397.09 1493.35 1591.44 1693.84 1797.15 1905.32 2014.53 2126.03 2242.37 2359.24 - 2479.73 2600.23 2723.32 2849.86 2979.34 3112.07 3248.36 3388.06 / - 12 15 19 1 147.22 220.94 299.08 390.92 491.87 600.81 717.89 844.48 980.04 1126.8 1279.35 1429.76 - 1588.79 1750.43 1925.95 2100.68 2293.08 2482.36 2676.74 2880.1 3103.59 3316.51 3539.01 3767.15 4004.52 4246.32 4497.45 4751.04 - 5019.11 5282.28 5557.89 5832.54 6131.19 6424.93 6716.05 7022.62 / - 12 15 20 1 211.26 333.19 461.08 604.98 809.07 1040.08 1288.48 1548.23 1835.91 2131 2452.61 2786.34 - 3136.61 3510.57 3905.49 4291.33 4727.86 5152.08 5591.14 6092.54 6563.61 7056.5 7556.77 8150.04 8684.84 9244.37 9817.68 10403.62 - 11007.75 11640.3 12285.07 12971.7 13657.01 14361.37 15111.49 15835.38 / - 12 16 1 1 268.55 267.52 267.19 267.15 267.3 267.57 267.94 268.4 268.94 269.55 270.24 270.99 - 271.8 272.68 273.63 274.63 275.7 276.83 278.02 279.27 280.59 281.96 283.39 284.88 286.43 288.04 289.71 291.44 - 293.22 295.07 296.98 298.94 300.96 303.04 305.19 307.38 / - 12 16 2 1 268.44 267.39 267.05 267.01 267.15 267.41 267.78 268.24 268.78 269.39 270.07 270.82 - 271.64 272.52 273.46 274.47 275.54 276.67 277.86 279.11 280.42 281.79 283.22 284.71 286.27 287.88 289.55 291.28 - 293.06 294.91 296.82 298.78 300.81 302.89 305.03 307.23 / - 12 16 3 1 268.23 267.15 266.79 266.73 266.87 267.13 267.49 267.95 268.48 269.09 269.77 270.52 - 271.34 272.21 273.16 274.16 275.23 276.36 277.55 278.8 280.12 281.49 282.92 284.41 285.97 287.58 289.25 290.98 - 292.77 294.62 296.53 298.5 300.53 302.61 304.76 306.96 / - 12 16 4 1 267.83 266.68 266.28 266.21 266.32 266.58 266.93 267.38 267.91 268.52 269.2 269.94 - 270.76 271.63 272.58 273.58 274.65 275.78 276.97 278.23 279.54 280.92 282.35 283.85 285.4 287.02 288.7 290.43 - 292.23 294.08 296 297.97 300.01 302.1 304.25 306.46 / - 12 16 5 1 266.71 265.27 264.72 264.54 264.59 264.79 265.12 265.54 266.05 266.64 267.31 268.05 - 268.87 269.75 270.69 271.7 272.78 273.92 275.13 276.4 277.73 279.12 280.57 282.09 283.67 285.31 287.01 288.77 - 290.59 292.47 294.42 296.42 298.48 300.61 302.79 305.03 / - 12 16 6 1 263.78 261.57 260.43 260.02 259.92 260.01 260.26 260.64 261.12 261.7 262.36 263.11 - 263.94 264.84 265.82 266.87 267.98 269.17 270.43 271.75 273.14 274.6 276.12 277.7 279.35 281.07 282.85 284.69 - 286.6 288.57 290.6 292.7 294.86 297.08 299.36 301.71 / - 12 16 7 1 257.8 252.31 250.54 249.93 249.71 249.75 249.98 250.36 250.87 251.49 252.22 253.05 - 253.97 254.97 256.06 257.22 258.47 259.8 261.2 262.67 264.22 265.85 267.54 269.27 271.11 273.01 274.99 277.03 - 279.14 281.31 283.55 285.86 288.24 290.68 293.18 295.72 / - 12 16 8 1 247.21 234.42 232.61 231.93 231.77 231.91 232.26 232.79 233.46 234.27 235.2 236.24 - 237.39 238.65 240 241.45 242.95 244.58 246.3 248.1 249.99 251.91 253.97 256.1 258.3 260.55 262.91 265.35 - 267.86 270.41 273.07 275.79 278.59 281.43 284.37 287.37 / - 12 16 9 1 223.74 206.73 205.58 205.25 205.38 205.83 206.52 207.4 208.46 209.68 211.03 212.53 - 214.16 215.9 217.77 219.75 221.84 224.04 226.34 228.75 231.25 233.85 236.54 239.33 242.21 245.17 248.22 251.35 - 254.56 257.86 261.23 264.68 268.22 271.87 275.58 279.35 / - 12 16 10 1 182.32 173.83 172.66 172.59 173.08 174 175.21 176.61 178.29 180.16 182.21 184.44 - 186.83 189.37 192.06 194.88 197.84 200.92 204.12 207.65 211.09 214.64 218.29 222.03 225.87 229.8 233.82 237.92 - 242.11 246.79 251.15 255.59 260.1 264.68 269.33 274.05 / - 12 16 11 1 140.74 138.62 138.72 139.65 141.07 142.96 145.21 147.76 150.55 153.6 156.81 160.26 - 163.81 167.61 171.56 175.57 179.81 184.21 188.6 193.26 198.06 202.78 207.81 212.97 217.99 223.36 228.56 234.14 - 239.51 245.26 250.79 256.73 262.41 268.54 274.37 280.69 / - 12 16 12 1 111.95 113.47 115.88 118.97 122.32 125.84 129.53 133.39 137.42 141.61 145.97 150.49 - 155.17 160.01 165 170.13 175.41 180.84 186.39 192.08 197.89 204.46 211.33 217.91 224.72 231.49 238.37 245.41 - 252.47 259.66 266.96 274.39 281.93 289.59 296.95 304.82 / - 12 16 13 1 101.91 106.02 109.85 113.78 118.06 122.64 127.49 132.59 137.91 143.45 149.22 155.2 - 161.4 167.81 174.44 181.28 188.32 195.5 202.85 210.35 218.03 225.87 233.88 242.05 250.37 258.85 267.48 276.26 - 285.18 294.25 303.45 312.8 322.28 331.89 341.64 351.51 / - 12 16 14 1 97.48 103.29 108.32 113.55 119.18 125.25 131.75 138.72 146.13 153.93 162.09 170.59 - 179.41 188.54 197.97 207.68 217.68 227.96 238.52 249.34 260.43 271.79 283.4 295.26 307.36 319.72 332.28 345.03 - 357.96 371.09 384.41 397.95 411.69 425.63 439.79 454.16 / - 12 16 15 1 93.37 101.13 109 117.23 126.02 135.51 145.7 156.59 168.13 180.29 192.99 206.21 - 219.93 234.13 248.77 263.86 279.36 295.27 311.58 328.29 345.4 362.92 380.86 399.21 417.97 437.13 456.67 476.59 - 496.9 517.61 538.71 560.2 582.08 604.36 627.03 650.08 / - 12 16 16 1 91.84 103.15 115.91 130.18 145.99 162.76 180.62 199.52 219.3 239.87 261.53 284.03 - 306.97 330.03 354.97 380.58 406.94 433.99 461.72 490.08 519.11 548.85 579.28 610.41 642.22 674.71 707.77 741.46 - 776.1 810.02 846.1 883.17 921.03 959.69 999.13 1039.34 / - 12 16 17 1 93.25 116.67 143.14 170.82 199.86 230.08 261.93 295.1 329.6 365.41 404.03 442.39 - 484.09 527.31 572.04 616.37 664.26 713.55 764.01 816.43 870.53 926.23 982.55 1041.16 1101.65 1163.51 1226.4 1288.71 - 1348.8 1409.8 1470.94 1534.94 1599.47 1665.32 1732.56 1800.57 / - 12 16 18 1 110.55 153.58 201.26 251.41 303.86 359.08 417.67 479.64 544.99 613.89 686.54 763.13 - 843.78 928.32 1017.01 1108.89 1203.75 1300.85 1392.91 1489.88 1589.41 1691.97 1798.34 1904.45 2015.79 2128.49 2245.87 2362.41 - 2485.89 2609.94 2735.32 2862.32 2995.6 3128.96 3264.39 3405.84 / - 12 16 19 1 147.22 221.21 299.22 391.04 490.82 600.36 715.71 841.26 976.81 1123.45 1276.13 1427.12 - 1587.71 1750.29 1927.16 2103.7 2297.69 2488.97 2685.82 2891.46 3099.84 3335.99 3558.31 3789.58 4028.46 4275.23 4528.5 4786.66 - 5058.46 5325.79 5604.91 5889.96 6175.07 6484.35 6780.64 7091.17 / - 12 16 20 1 211.47 334.35 463.61 604.2 803.57 1033.59 1284.16 1541.75 1820.79 2123.92 2447.75 2784.61 - 3129.19 3503.91 3901.61 4322.03 4732.2 5195.22 5640.57 6099.29 6625.85 7125.2 7633.49 8164.58 8775.67 9342.22 9922.03 10515.01 - 11124.08 11754.06 12418.61 13096.11 13812.52 14526.62 15259.44 16023.23 / - 12 17 1 1 270.09 269.16 268.86 268.85 269 269.28 269.65 270.12 270.66 271.27 271.95 272.7 - 273.52 274.4 275.34 276.35 277.41 278.54 279.74 280.99 282.3 283.67 285.1 286.6 288.15 289.76 291.43 293.16 - 294.96 296.81 298.72 300.68 302.71 304.8 306.95 309.15 / - 12 17 2 1 269.98 269.03 268.72 268.69 268.84 269.12 269.49 269.95 270.49 271.1 271.78 272.53 - 273.34 274.22 275.16 276.17 277.24 278.37 279.56 280.81 282.12 283.49 284.93 286.42 287.97 289.59 291.26 292.99 - 294.78 296.64 298.55 300.52 302.55 304.64 306.78 308.99 / - 12 17 3 1 269.77 268.77 268.44 268.4 268.54 268.81 269.18 269.63 270.17 270.78 271.45 272.2 - 273.02 273.89 274.84 275.84 276.91 278.04 279.23 280.48 281.79 283.17 284.6 286.1 287.65 289.27 290.94 292.68 - 294.47 296.32 298.24 300.21 302.25 304.34 306.49 308.7 / - 12 17 4 1 269.27 268.16 267.76 267.68 267.8 268.04 268.39 268.84 269.36 269.97 270.64 271.39 - 272.2 273.07 274.02 275.02 276.09 277.22 278.42 279.68 280.99 282.37 283.81 285.31 286.88 288.5 290.18 291.92 - 293.73 295.59 297.52 299.5 301.55 303.65 305.81 308.04 / - 12 17 5 1 267.8 266.29 265.66 265.43 265.45 265.62 265.92 266.33 266.83 267.42 268.08 268.82 - 269.63 270.51 271.46 272.48 273.56 274.71 275.93 277.21 278.55 279.96 281.42 282.96 284.55 286.21 287.93 289.71 - 291.55 293.45 295.42 297.45 299.54 301.69 303.9 306.17 / - 12 17 6 1 264.48 262.04 260.56 260.11 259.97 260.04 260.28 260.64 261.12 261.7 262.37 263.13 - 263.97 264.89 265.88 266.95 268.09 269.3 270.58 271.93 273.35 274.84 276.39 278.01 279.7 281.45 283.27 285.15 - 287.1 289.11 291.19 293.33 295.53 297.8 300.13 302.52 / - 12 17 7 1 258.22 252.01 250.03 249.37 249.1 249.13 249.36 249.75 250.27 250.91 251.66 252.51 - 253.43 254.46 255.58 256.78 258.07 259.43 260.87 262.39 263.99 265.64 267.38 269.2 271.08 273.04 275.07 277.16 - 279.33 281.56 283.87 286.22 288.66 291.17 293.73 296.37 / - 12 17 8 1 247.52 233.68 231.8 231.25 231.14 231.31 231.7 232.27 232.98 233.83 234.8 235.89 - 237.04 238.34 239.73 241.22 242.81 244.49 246.21 248.06 250 252.03 254.14 256.28 258.55 260.9 263.33 265.79 - 268.37 271.03 273.72 276.53 279.41 282.36 285.34 288.43 / - 12 17 9 1 223.86 206.39 205.23 204.9 205.04 205.5 206.2 207.1 208.18 209.42 210.8 212.32 - 213.98 215.76 217.66 219.67 221.8 224.04 226.38 228.83 231.38 234.03 236.77 239.6 242.53 245.55 248.65 251.84 - 255.11 258.46 261.9 265.41 269 272.67 276.41 280.22 / - 12 17 10 1 181.78 173.79 172.64 172.58 173.09 174.03 175.21 176.68 178.38 180.28 182.37 184.63 - 187.05 189.63 192.35 195.22 198.21 201.34 204.59 207.95 211.42 215 218.96 222.76 226.65 230.64 234.72 238.88 - 243.12 247.45 251.85 256.34 261.38 266.03 270.75 275.54 / - 12 17 11 1 140.89 138.79 138.87 139.83 141.29 143.24 145.54 148.12 150.98 154.03 157.31 160.74 - 164.39 168.14 172.12 176.25 180.42 184.83 189.4 193.94 198.76 203.71 208.57 213.76 219.06 224.22 229.74 235.08 - 240.81 246.31 252.21 257.87 263.96 269.78 276.06 282.03 / - 12 17 12 1 112.25 113.88 116.4 119.56 122.96 126.51 130.23 134.11 138.15 142.35 146.72 151.25 - 155.95 160.79 165.8 170.95 176.24 181.68 187.25 192.96 198.79 204.91 211.86 218.7 225.46 232.31 239.25 246.29 - 253.49 260.72 268.06 275.53 283.12 290.83 298.66 306.18 / - 12 17 13 1 102.47 106.62 110.48 114.44 118.76 123.37 128.24 133.34 138.66 144.2 149.96 155.94 - 162.13 168.54 175.17 182 189.03 196.26 203.65 211.18 218.88 226.74 234.76 242.94 251.28 259.77 268.42 277.22 - 286.17 295.27 304.5 313.88 323.4 333.05 342.84 352.76 / - 12 17 14 1 98.05 103.87 108.89 114.12 119.75 125.81 132.31 139.29 146.69 154.48 162.62 171.09 - 179.89 188.99 198.39 208.08 218.04 228.29 238.8 249.58 260.62 271.93 283.49 295.31 307.37 319.69 332.26 345.07 - 358.09 371.29 384.68 398.26 412.04 426.03 440.22 454.62 / - 12 17 15 1 93.84 101.66 109.52 117.7 126.46 135.92 146.08 156.93 168.43 180.53 193.16 206.33 - 219.98 234.1 248.66 263.65 279.06 294.89 311.12 327.76 344.79 362.22 380.04 398.26 416.87 435.89 455.3 475.11 - 495.31 515.92 536.92 558.31 580.07 602.2 624.72 647.6 / - 12 17 16 1 92.2 103.51 116.23 130.41 146.19 162.88 180.66 199.48 219.17 239.63 261.17 283.55 - 306.66 329.32 354.05 379.58 405.67 432.44 459.91 488.07 516.95 546.52 576.78 607.7 639.29 671.54 704.02 736.71 - 772.16 806.2 841.29 877.85 915.28 953.48 992.44 1032.16 / - 12 17 17 1 93.46 116.76 143.18 170.76 199.67 229.71 261.38 294.4 328.74 364.32 402.7 440.72 - 482.17 525.16 569.69 613.56 661.17 710.14 760.31 812.2 865.81 920.97 977.26 1034.62 1094.49 1155.78 1218.22 1281.63 - 1340.87 1402.37 1465.43 1528.63 1594.29 1661.45 1728.14 1798.21 / - 12 17 18 1 110.6 153.57 201.22 251.15 303.19 358.05 416.19 477.69 542.74 611.17 683.25 759.14 - 839.16 923.08 1011.03 1102.27 1196.54 1292.12 1387.18 1484.12 1584.69 1687.77 1794.9 1904.14 2016.74 2130.65 2247.36 2365.61 - 2490.39 2615.99 2743.99 2874.31 3007.01 3142.34 3279.88 3423.33 / - 12 17 19 1 147.35 221.76 300.01 390.57 490.63 598.38 714.56 839.19 973.53 1116.48 1270.32 1422.38 - 1579.1 1748.57 1926.9 2105.53 2292.23 2494.89 2694.49 2902.65 3114.31 3352.97 3578.61 3813.32 4055.59 4304.26 4562.24 4825.48 - 5092.71 5373.56 5656.83 5946.78 6236.53 6538.32 6852.42 7167.7 / - 12 17 20 1 211.95 336.11 467.08 609.77 799.14 1023.42 1275.25 1529.14 1815.13 2119.45 2437.38 2771.23 - 3132.01 3519.81 3897.66 4318.49 4762.97 5196.39 5687.66 6156.13 6644.51 7199.86 7717.95 8258.29 8813.71 9382.86 10040.13 10641.47 - 11262.44 11895.29 12558.04 13249.28 13966.17 14695.14 15463.42 16221.74 / - 12 18 1 1 271.5 270.7 270.46 270.48 270.65 270.94 271.32 271.79 272.33 272.95 273.63 274.38 - 275.2 276.08 277.02 278.03 279.1 280.22 281.42 282.67 283.98 285.35 286.79 288.28 289.84 291.45 293.13 294.86 - 296.66 298.51 300.42 302.4 304.43 306.52 308.68 310.89 / - 12 18 2 1 271.38 270.56 270.3 270.31 270.48 270.76 271.14 271.61 272.15 272.76 273.44 274.19 - 275.01 275.89 276.83 277.83 278.9 280.03 281.22 282.47 283.79 285.16 286.6 288.09 289.65 291.26 292.94 294.67 - 296.47 298.32 300.24 302.22 304.25 306.35 308.5 310.71 / - 12 18 3 1 271.13 270.25 269.96 269.95 270.1 270.37 270.74 271.2 271.73 272.34 273.02 273.77 - 274.58 275.46 276.4 277.41 278.48 279.61 280.8 282.05 283.37 284.74 286.18 287.68 289.24 290.86 292.54 294.28 - 296.08 297.94 299.86 301.84 303.88 305.98 308.14 310.36 / - 12 18 4 1 270.35 269.25 268.83 268.73 268.83 269.06 269.4 269.84 270.36 270.96 271.63 272.37 - 273.18 274.06 275.01 276.02 277.09 278.23 279.43 280.69 282.02 283.41 284.86 286.37 287.95 289.58 291.28 293.04 - 294.86 296.74 298.68 300.68 302.75 304.87 307.05 309.3 / - 12 18 5 1 268.49 266.84 266.11 265.81 265.77 265.91 266.18 266.57 267.06 267.64 268.3 269.04 - 269.85 270.74 271.7 272.73 273.83 274.99 276.23 277.53 278.89 280.32 281.81 283.37 284.99 286.68 288.43 290.24 - 292.12 294.06 296.06 298.13 300.25 302.44 304.7 307.01 / - 12 18 6 1 264.8 261.93 260.24 259.71 259.51 259.55 259.77 260.12 260.6 261.18 261.86 262.63 - 263.48 264.42 265.43 266.53 267.7 268.94 270.25 271.64 273.1 274.63 276.23 277.9 279.63 281.43 283.3 285.24 - 287.24 289.31 291.45 293.65 295.91 298.24 300.64 303.09 / - 12 18 7 1 258.4 251.43 249.3 248.65 248.41 248.44 248.68 249.08 249.62 250.28 251.05 251.93 - 252.9 253.97 255.13 256.33 257.66 259.07 260.56 262.13 263.78 265.5 267.3 269.18 271.09 273.12 275.22 277.39 - 279.63 281.94 284.32 286.77 289.27 291.86 294.51 297.24 / - 12 18 8 1 247.6 232.79 230.87 230.45 230.42 230.66 231.11 231.72 232.49 233.38 234.38 235.51 - 236.75 238.09 239.53 241.03 242.66 244.39 246.21 248.07 250.07 252.15 254.32 256.52 258.85 261.27 263.77 266.29 - 268.94 271.67 274.44 277.32 280.27 283.3 286.37 289.54 / - 12 18 9 1 223.02 206.06 204.89 204.56 204.71 205.18 205.89 206.81 207.91 209.17 210.58 212.13 - 213.81 215.62 217.55 219.61 221.77 224.05 226.44 228.93 231.52 234.22 237.01 239.9 242.88 245.95 249.1 252.35 - 255.68 259.09 262.59 266.17 269.82 273.55 277.36 281.25 / - 12 18 10 1 180.66 173.76 172.61 172.57 173.1 174 175.25 176.76 178.48 180.41 182.44 184.72 - 187.17 189.88 192.65 195.55 198.59 201.76 205.05 208.46 211.99 215.62 219.36 223.19 227.13 231.48 235.62 239.84 - 244.15 248.54 253.01 257.56 262.18 266.88 272.19 277.05 / - 12 18 11 1 141.13 138.91 139.07 140.05 141.58 143.61 145.97 148.6 151.46 154.59 157.85 161.36 - 164.98 168.83 172.75 176.91 181.21 185.65 190.1 194.83 199.69 204.48 209.58 214.81 219.91 225.37 230.65 236.33 - 241.79 247.67 253.3 259.35 265.14 271.39 277.33 283.77 / - 12 18 12 1 112.62 114.42 117.13 120.4 123.85 127.44 131.17 135.06 139.11 143.31 147.68 152.21 - 156.9 161.74 166.73 171.88 177.17 182.61 188.18 193.89 199.73 205.7 212.14 219.1 226.12 233.05 240.05 247.15 - 254.34 261.71 269.09 276.6 284.23 291.99 299.87 307.87 / - 12 18 13 1 103.28 107.47 111.33 115.37 119.75 124.38 129.25 134.34 139.64 145.16 150.89 156.84 - 163 169.38 175.97 182.76 189.76 196.96 204.36 211.94 219.67 227.54 235.56 243.75 252.09 260.58 269.23 278.03 - 286.98 296.09 305.33 314.73 324.26 333.93 343.75 353.7 / - 12 18 14 1 98.95 104.69 109.67 114.89 120.5 126.53 133.03 139.99 147.37 155.11 163.21 171.63 - 180.37 189.41 198.75 208.36 218.26 228.43 238.86 249.56 260.51 271.73 283.19 294.9 306.86 319.06 331.51 344.19 - 357.13 370.31 383.74 397.41 411.28 425.34 439.58 454.02 / - 12 18 15 1 94.62 102.47 110.27 118.36 127.03 136.41 146.51 157.28 168.71 180.69 193.23 206.29 - 219.82 233.81 248.23 263.07 278.32 293.98 310.04 326.49 343.33 360.57 378.21 396.24 414.68 433.5 452.72 472.31 - 492.28 512.62 533.35 554.46 575.95 597.83 620.09 642.72 / - 12 18 16 1 92.8 104.06 116.7 130.76 146.38 162.97 180.62 199.31 218.86 239.16 260.54 282.73 - 305.35 328 352.31 377.39 403.24 429.68 456.82 484.62 513.1 542.27 572.13 602.68 633.91 665.83 697.95 730.17 - 765.26 798.76 833.65 869.32 906.16 943.74 982.05 1021.09 / - 12 18 17 1 93.87 116.94 143.29 170.69 199.24 229.18 260.67 293.41 327.41 362.6 400.66 438.23 - 479.29 521.82 565.85 609.07 656.2 704.77 754.42 805.71 858.65 913.07 967.88 1024.85 1083.77 1144.11 1205.71 1268.38 - 1329.31 1391.18 1454.45 1518.47 1584.08 1651.38 1720.37 1789.61 / - 12 18 18 1 110.79 153.71 201.31 250.84 302.27 356.4 413.88 474.67 538.88 606.67 678.14 753.58 - 832.61 915.6 1002.25 1092.55 1185.87 1281.91 1377.38 1474.86 1576.8 1680.81 1788.22 1898.56 2012.31 2127.79 2246.12 2368.19 - 2492.5 2619.83 2749.72 2882.09 3016.98 3154.55 3294.56 3437 / - 12 18 19 1 147.74 222.81 301.56 391.07 489.52 596.89 712 835.44 966.68 1109.38 1257.62 1410.38 - 1572.2 1742.25 1915.88 2104.53 2292.73 2498.09 2703.53 2913.36 3129.06 3353.01 3601.97 3840.82 4084.89 4337.94 4598.55 4866.35 - 5140.62 5421.94 5714.64 6009.37 6305.83 6613.02 6926.77 7246.24 / - 12 18 20 1 212.9 338.86 472.12 617.51 792.3 1014.56 1261.9 1519.6 1801.67 2095.18 2422.53 2765.74 - 3128.59 3505.16 3894.92 4317.06 4763.93 5233.7 5691.28 6168.11 6703.52 7213.24 7743.96 8350.03 8917.23 9497.92 10085.11 10694.75 - 11416.5 12064.36 12741.72 13439.73 14158.29 14897.26 15675.59 16460.27 / - 12 19 1 1 272.76 272.13 271.97 272.03 272.23 272.53 272.93 273.4 273.95 274.57 275.26 276.01 - 276.83 277.71 278.65 279.66 280.73 281.86 283.05 284.3 285.62 286.99 288.43 289.93 291.48 293.1 294.78 296.51 - 298.31 300.17 302.09 304.07 306.11 308.21 310.36 312.58 / - 12 19 2 1 272.58 271.9 271.71 271.75 271.93 272.23 272.62 273.09 273.63 274.25 274.93 275.68 - 276.5 277.38 278.32 279.33 280.4 281.53 282.73 283.98 285.3 286.67 288.11 289.61 291.17 292.79 294.47 296.21 - 298.02 299.88 301.8 303.78 305.83 307.93 310.09 312.32 / - 12 19 3 1 272.05 271.21 270.92 270.9 271.05 271.32 271.68 272.14 272.67 273.28 273.95 274.7 - 275.52 276.4 277.34 278.35 279.43 280.57 281.76 283.03 284.35 285.74 287.19 288.7 290.27 291.9 293.59 295.35 - 297.16 299.04 300.98 302.98 305.04 307.16 309.34 311.58 / - 12 19 4 1 270.87 269.67 269.17 269.02 269.07 269.27 269.59 270.02 270.53 271.12 271.79 272.53 - 273.35 274.24 275.19 276.21 277.3 278.46 279.67 280.96 282.31 283.72 285.19 286.73 288.34 290 291.73 293.52 - 295.37 297.29 299.27 301.3 303.4 305.57 307.79 310.08 / - 12 19 5 1 268.62 266.74 265.85 265.45 265.33 265.42 265.66 266.02 266.49 267.06 267.72 268.47 - 269.3 270.2 271.18 272.23 273.35 274.55 275.81 277.15 278.55 280.02 281.56 283.16 284.83 286.57 288.37 290.24 - 292.17 294.17 296.23 298.35 300.54 302.8 305.11 307.49 / - 12 19 6 1 264.78 261.44 259.62 259.02 258.75 258.78 258.99 259.35 259.84 260.43 261.13 261.92 - 262.81 263.77 264.82 265.96 267.17 268.4 269.76 271.19 272.7 274.29 275.94 277.67 279.46 281.33 283.27 285.27 - 287.35 289.49 291.71 293.98 296.33 298.74 301.22 303.76 / - 12 19 7 1 258.32 250.65 248.44 247.83 247.62 247.68 247.95 248.38 248.95 249.64 250.44 251.36 - 252.37 253.43 254.63 255.91 257.29 258.74 260.28 261.91 263.61 265.39 267.21 269.14 271.16 273.25 275.42 277.66 - 279.94 282.33 284.79 287.32 289.92 292.6 295.32 298.13 / - 12 19 8 1 247.45 231.68 229.91 229.62 229.69 230.01 230.53 231.21 232.03 232.98 234.05 235.23 - 236.52 237.91 239.4 240.96 242.63 244.4 246.25 248.19 250.23 252.37 254.57 256.85 259.25 261.7 264.25 266.88 - 269.58 272.36 275.24 278.17 281.18 284.28 287.47 290.68 / - 12 19 9 1 222.38 205.74 204.56 204.23 204.38 204.86 205.59 206.53 207.64 208.93 210.36 211.94 - 213.65 215.49 217.46 219.55 221.76 224.08 226.5 229.04 231.68 234.42 237.27 240.2 243.24 246.36 249.58 252.88 - 256.27 259.75 263.31 266.95 270.67 274.47 278.34 282.3 / - 12 19 10 1 180.07 173.72 172.59 172.51 173.11 174.03 175.3 176.83 178.51 180.46 182.59 184.9 - 187.38 190.02 192.81 195.74 198.81 202.01 205.53 208.98 212.56 216.24 220.03 223.92 227.91 232 236.18 240.82 - 245.19 249.64 254.18 258.79 263.48 268.25 273.09 278 / - 12 19 11 1 141.28 139.14 139.26 140.34 142.06 144.17 146.62 149.35 152.27 155.38 158.73 162.2 - 165.9 169.68 173.7 177.88 182.09 186.53 191.12 195.7 200.57 205.56 210.48 215.72 221.08 226.3 231.89 237.3 - 243.11 248.69 254.71 260.82 266.66 272.96 278.96 285.04 / - 12 19 12 1 113.21 115.29 118.45 121.89 125.41 129.03 132.78 136.65 140.68 144.85 149.18 153.67 - 158.31 163.11 168.06 173.16 178.41 183.81 189.34 195.01 200.82 206.75 212.82 219.58 226.69 233.68 240.74 247.88 - 255.12 262.46 269.97 277.49 285.15 292.93 300.84 308.88 / - 12 19 13 1 104.62 108.83 112.76 116.98 121.43 126.09 130.93 135.96 141.19 146.63 152.28 158.14 - 164.22 170.51 177 183.71 190.61 197.72 205.02 212.51 220.19 228.06 236.11 244.31 252.64 261.12 269.74 278.51 - 287.43 296.5 305.71 315.08 324.59 334.24 344.04 353.98 / - 12 19 14 1 100.58 106.02 110.94 116.12 121.67 127.67 134.16 141.07 148.36 156.01 163.99 172.3 - 180.91 189.81 199 208.48 218.23 228.25 238.54 249.08 259.88 270.92 282.22 293.76 305.54 317.56 329.82 342.31 - 355.04 368 381.21 394.64 408.31 422.21 436.34 450.7 / - 12 19 15 1 96.12 103.93 111.52 119.4 127.91 137.14 147.09 157.71 168.93 180.75 193.11 205.97 - 219.28 233.04 247.23 261.82 276.83 292.22 308.01 324.18 340.72 357.66 374.98 392.68 410.76 429.21 448.05 467.25 - 486.84 506.8 527.13 547.84 568.92 590.37 612.2 634.4 / - 12 19 16 1 93.92 105.09 117.54 131.35 146.62 163.05 180.48 198.85 218.12 238.3 259.42 281.23 - 302.81 325.46 349.27 373.77 398.95 424.8 451.34 478.77 506.66 535.25 564.5 594.46 625.08 656.39 687.83 719.28 - 753.82 785.93 822.36 855.53 891.46 928.21 965.67 1003.84 / - 12 19 17 1 95.06 117.32 143.42 170.59 198.7 228.56 259.03 291.26 325.56 360.06 397.57 434.46 - 474.88 516.76 559.8 602.29 648.55 696.17 744.65 794.92 846.71 899.71 953.21 1008.87 1066.49 1125.55 1186.02 1247.75 - 1309.62 1372.07 1435.86 1500.26 1566.8 1634.67 1704.32 1774.87 / - 12 19 18 1 111.31 154.16 201.69 250.44 300.92 354.26 410.43 470.26 533.72 600.65 671.03 744.96 - 822.91 904.58 989.2 1078.18 1170.38 1265.56 1361.28 1460.49 1562.89 1668.65 1777.54 1888.51 2003.47 2120.74 2241.78 2364.6 - 2492.21 2620.37 2752.39 2887.11 3024.51 3164.69 3307.52 3454.51 / - 12 19 19 1 148.69 224.89 304.17 392.82 489.62 594.11 707.27 827.62 958.17 1096.86 1244.85 1398.55 - 1560.61 1732.14 1907.14 2095.86 2286.58 2484.83 2700.86 2914.34 3135.91 3363.11 3614.62 3858.94 4110.39 4368.4 4634.83 4908.68 - 5191.29 5480.11 5771.96 6081.41 6385.96 6699.72 7020.08 7348.2 / - 12 19 20 1 214.86 343.46 479.99 628.56 791.6 1002.83 1243.3 1497.68 1780.13 2079.08 2404.49 2741.95 - 3105.99 3489.91 3889.43 4310.48 4744.5 5214.06 5707.53 6186.15 6724.39 7242.57 7826.74 8380.63 8951.94 9539.41 10213.83 10839.57 - 11486.59 12154.34 12842.8 13546.42 14393.95 15152.91 15932.89 16733.71 / - 12 20 1 1 273.32 272.71 272.54 272.58 272.77 273.07 273.46 273.93 274.48 275.1 275.79 276.55 - 277.37 278.26 279.21 280.23 281.31 282.45 283.65 284.92 286.25 287.65 289.1 290.62 292.2 293.84 295.54 297.3 - 299.12 301.01 302.96 304.96 307.03 309.16 311.35 313.6 / - 12 20 2 1 272.83 272.07 271.81 271.8 271.95 272.23 272.6 273.05 273.59 274.2 274.89 275.64 - 276.47 277.36 278.32 279.34 280.42 281.57 282.79 284.07 285.41 286.81 288.28 289.81 291.4 293.06 294.78 296.55 - 298.4 300.3 302.26 304.29 306.38 308.53 310.74 313.01 / - 12 20 3 1 272.02 271 270.6 270.5 270.59 270.81 271.15 271.59 272.11 272.71 273.39 274.15 - 274.97 275.87 276.83 277.86 278.96 280.12 281.36 282.65 284.01 285.44 286.93 288.48 290.1 291.78 293.52 295.33 - 297.2 299.13 301.13 303.19 305.31 307.49 309.74 312.05 / - 12 20 4 1 270.65 269.22 268.58 268.32 268.31 268.46 268.75 269.15 269.65 270.24 270.91 271.66 - 272.49 273.4 274.38 275.43 276.55 277.74 278.99 280.32 281.71 283.17 284.7 286.3 287.96 289.68 291.47 293.33 - 295.25 297.23 299.28 301.4 303.58 305.82 308.13 310.5 / - 12 20 5 1 268.35 266.24 265.15 264.67 264.5 264.56 264.78 265.13 265.6 266.18 266.85 267.61 - 268.46 269.39 270.39 271.48 272.64 273.88 275.19 276.57 278.03 279.55 281.15 282.81 284.55 286.35 288.23 290.17 - 292.17 294.25 296.4 298.61 300.88 303.23 305.64 308.11 / - 12 20 6 1 264.49 260.66 258.73 258.08 257.87 257.91 258.13 258.51 259.01 259.63 260.36 261.18 - 262.09 263.09 264.18 265.35 266.61 267.94 269.29 270.78 272.34 273.98 275.7 277.49 279.35 281.28 283.29 285.37 - 287.52 289.74 292.04 294.4 296.83 299.33 301.9 304.54 / - 12 20 7 1 257.99 249.56 247.43 246.9 246.75 246.87 247.18 247.66 248.27 249 249.85 250.8 - 251.85 252.96 254.2 255.53 256.95 258.46 260.05 261.72 263.43 265.27 267.19 269.19 271.27 273.43 275.61 277.92 - 280.31 282.77 285.31 287.88 290.57 293.32 296.16 299.03 / - 12 20 8 1 247.06 230.56 229.3 228.99 229.06 229.39 229.91 230.6 231.44 232.4 233.49 234.69 - 236 237.42 238.94 240.56 242.28 244.09 246 248 250.09 252.27 254.54 256.89 259.33 261.86 264.47 267.16 - 269.93 272.78 275.72 278.73 281.82 284.98 288.22 291.54 / - 12 20 9 1 221.57 205.42 204.23 203.9 204.06 204.55 205.29 206.25 207.39 208.69 210.15 211.75 - 213.5 215.37 217.37 219.5 221.74 224.1 226.58 229.16 231.84 234.63 237.53 240.52 243.6 246.78 250.06 253.42 - 256.87 260.41 264.03 267.74 271.52 275.39 279.34 283.36 / - 12 20 10 1 179.66 173.75 172.57 172.56 173.12 174.06 175.35 176.84 178.6 180.58 182.74 185.08 - 187.61 190.29 193.14 196.13 199.26 202.52 205.94 209.7 213.38 217.16 221.04 225.02 229.09 233.25 237.5 241.82 - 246.61 251.11 255.69 260.34 265.06 269.86 274.72 279.66 / - 12 20 11 1 141.77 139.49 140.16 141.83 143.9 146.25 148.84 151.62 154.58 157.76 161.04 164.55 - 168.14 171.96 175.84 179.96 184.11 188.49 193.03 197.57 202.42 207.4 212.3 217.53 222.89 228.09 233.67 239.05 - 244.83 250.38 256.37 262.08 268.23 274.1 280.45 286.46 / - 12 20 12 1 115.39 119.41 123.22 126.85 130.42 134.01 137.66 141.41 145.28 149.27 153.41 157.69 - 162.12 166.7 171.43 176.31 181.34 186.51 191.83 197.29 202.9 208.64 214.52 220.55 227.53 234.47 241.64 248.55 - 255.7 262.93 270.26 277.53 285.28 292.91 300.27 308.14 / - 12 20 13 1 108.62 113.26 117.84 122.29 126.68 131.13 135.71 140.46 145.4 150.54 155.88 161.43 - 167.2 173.17 179.35 185.74 192.33 199.12 206.11 213.29 220.67 228.23 235.98 243.91 252.03 260.32 268.79 277.44 - 286.26 295.24 304.39 313.66 323.07 332.61 342.26 352.05 / - 12 20 14 1 104.94 109.89 114.66 119.85 125.46 131.42 137.71 144.33 151.26 158.5 166.07 173.94 - 182.13 190.61 199.39 208.45 217.8 227.42 237.32 247.48 257.9 268.58 279.51 290.7 302.12 313.78 325.68 337.81 - 350.18 362.79 375.62 388.68 401.98 415.5 429.25 443.22 / - 12 20 15 1 101.17 108.18 114.91 122.25 130.3 139.09 148.63 158.8 169.56 180.85 192.66 204.95 - 217.7 230.91 244.55 258.62 273.11 288.01 303.31 318.99 335.05 351.5 368.33 385.53 403.11 421.06 439.37 458.06 - 477.11 496.53 516.31 536.45 556.96 577.82 599.05 620.61 / - 12 20 16 1 97.93 108.88 120.39 132.95 147.26 163.21 179.89 197.63 216.33 235.89 256.23 276.27 - 297.43 319.81 342.87 366.61 391.03 416.11 441.88 468.31 495.4 523.18 551.62 580.73 610.51 640.95 671.83 703.1 - 735.53 768.64 800.81 834.32 872 904.2 940.49 977.45 / - 12 20 17 1 98.86 119.73 144.65 170.39 198.03 226.74 256.99 288.27 321.78 355.95 392.1 428.32 - 467.68 508.32 547.84 590.19 634.92 680.77 727.53 776.43 826.72 878.44 930.61 983.92 1039.96 1097.42 1156.34 1216.65 - 1278.36 1341.49 1405.2 1470.86 1538.23 1606.99 1677.13 1748.65 / - 12 20 18 1 113.12 156.49 202.26 249.78 299.15 351.31 406.73 465.72 527.05 593.15 661.58 733.18 - 809.85 888.99 971.22 1058.09 1148.3 1240.14 1337.08 1437.56 1541.35 1648.26 1758.35 1871.45 1987.52 2106.89 2229.29 2354.62 - 2483.27 2614.74 2749.2 2886.63 3027 3170.3 3316.48 3465.54 / - 12 20 19 1 152.64 229.66 308.8 396.44 490.75 592.4 702.16 820.58 947.94 1084.32 1228.74 1382.56 - 1545.36 1717.17 1894.72 2084.01 2277.71 2478.98 2694.6 2911.88 3136.51 3368.38 3607.51 3868.25 4124.26 4387.82 4658.85 4938.56 - 5225.75 5520.41 5820.73 6128.21 6451.1 6773.4 7106.1 7442.76 / - 12 20 20 1 219.46 352.32 493.6 646.07 810.99 988.7 1179.18 1382.32 1639.43 1929.61 2236.37 2566.95 - 2916.16 3290.44 3672.43 4090.85 4537.78 4981.76 5480.37 5969.6 6481.69 7017.36 7576.89 8175.86 8754.01 9389.07 10023.89 10637.68 - 11353.95 12015.3 12792.54 13503.02 14234.69 14987.62 15884.99 16687.89 / - 13 1 1 1 248.96 248.82 248.91 249.12 249.42 249.81 250.27 250.8 251.39 252.05 252.76 253.53 - 254.36 255.25 256.2 257.2 258.25 259.36 260.53 261.74 263.02 264.35 265.73 267.16 268.65 270.19 271.78 273.43 - 275.13 276.88 278.69 280.54 282.45 284.42 286.43 288.5 / - 13 1 2 1 248.88 248.74 248.82 249.03 249.34 249.72 250.18 250.71 251.3 251.96 252.67 253.44 - 254.27 255.16 256.1 257.1 258.16 259.27 260.44 261.66 262.93 264.26 265.64 267.08 268.56 270.11 271.7 273.35 - 275.05 276.81 278.61 280.47 282.38 284.35 286.36 288.43 / - 13 1 3 1 248.75 248.6 248.67 248.87 249.17 249.56 250.02 250.54 251.13 251.79 252.5 253.27 - 254.11 254.99 255.94 256.94 258 259.11 260.27 261.5 262.77 264.1 265.48 266.92 268.41 269.96 271.55 273.2 - 274.91 276.66 278.47 280.33 282.25 284.22 286.24 288.31 / - 13 1 4 1 248.51 248.33 248.38 248.58 248.87 249.26 249.71 250.24 250.83 251.48 252.19 252.97 - 253.8 254.69 255.63 256.64 257.69 258.81 259.98 261.2 262.48 263.81 265.2 266.64 268.13 269.68 271.28 272.93 - 274.64 276.4 278.22 280.08 282 283.98 286 288.08 / - 13 1 5 1 248.05 247.81 247.85 248.03 248.32 248.69 249.15 249.67 250.26 250.91 251.62 252.4 - 253.23 254.12 255.07 256.07 257.13 258.25 259.42 260.65 261.94 263.27 264.66 266.11 267.61 269.17 270.77 272.44 - 274.15 275.92 277.74 279.62 281.55 283.53 285.56 287.65 / - 13 1 6 1 247.14 246.84 246.83 246.99 247.27 247.63 248.08 248.6 249.19 249.84 250.55 251.33 - 252.17 253.06 254.01 255.02 256.09 257.22 258.4 259.63 260.92 262.27 263.67 265.13 266.64 268.21 269.83 271.51 - 273.24 275.02 276.86 278.76 280.7 282.7 284.76 286.86 / - 13 1 7 1 245.35 244.92 244.86 244.99 245.25 245.6 246.04 246.56 247.15 247.8 248.52 249.3 - 250.15 251.05 252.01 253.04 254.12 255.26 256.45 257.71 259.02 260.39 261.81 263.29 264.83 266.42 268.07 269.78 - 271.54 273.35 275.22 277.15 279.13 281.16 283.26 285.4 / - 13 1 8 1 241.25 240.3 239.87 239.8 239.92 240.19 240.58 241.07 241.64 242.29 243.01 243.81 - 244.67 245.61 246.61 247.67 248.8 250 251.25 252.57 253.95 255.39 256.89 258.45 260.07 261.75 263.5 265.3 - 267.15 269.07 271.05 273.08 275.18 277.33 279.54 281.8 / - 13 1 9 1 230.37 224.78 223.77 223.4 223.36 223.57 223.95 224.47 225.12 225.89 226.75 227.69 - 228.74 229.88 231.09 232.4 233.78 235.23 236.77 238.37 240.02 241.77 243.59 245.48 247.44 249.46 251.54 253.69 - 255.91 258.2 260.53 262.95 265.42 267.96 270.55 273.21 / - 13 1 10 1 203.4 193.19 191.76 191.29 191.37 191.8 192.51 193.44 194.54 195.81 197.24 198.8 - 200.5 202.31 204.23 206.28 208.41 210.67 212.97 215.41 217.9 220.51 223.2 225.92 228.76 231.63 234.6 237.62 - 240.74 243.95 247.18 250.52 253.88 257.34 260.83 264.4 / - 13 1 11 1 159.6 155.7 154.79 154.95 155.72 156.88 158.38 160.11 162.1 164.31 166.77 169.35 - 172.1 175.01 178.17 181.38 184.7 188.24 191.8 195.57 199.34 203.28 207.32 211.35 215.63 219.83 224.28 228.63 - 233.04 237.52 242.45 247.07 251.75 256.48 261.28 266.62 / - 13 1 12 1 126.34 125.74 126.94 128.88 131.22 133.87 136.77 139.88 143.19 146.68 150.44 154.62 - 158.81 163.13 167.59 172.26 176.97 181.83 186.84 191.97 197.22 202.6 208.09 213.7 219.41 225.21 231.1 237.14 - 243.27 249.19 255.5 261.91 268.05 274.64 281.33 287.68 / - 13 1 13 1 111.35 113.96 117.24 120.95 124.78 128.79 133 137.42 142.05 146.91 151.99 157.28 - 162.75 168.41 174.26 180.3 186.51 192.9 199.46 206.19 213.07 220.1 227.29 234.61 242.72 251.19 259.5 268.06 - 276.5 284.96 293.59 302.47 311.25 320.16 329.18 338.34 / - 13 1 14 1 108.12 111.8 115.86 120.36 125.34 130.86 136.85 143.25 150.02 157.13 164.57 172.34 - 180.42 188.81 197.49 206.45 215.7 225.23 235.03 245.09 255.41 265.9 276.55 287.38 298.41 309.63 321.05 332.67 - 344.49 356.51 368.72 382.57 396.24 409.95 423.71 437.54 / - 13 1 15 1 105.06 111.06 117.34 124.42 132.36 141.11 150.62 160.81 171.65 183.08 195.05 207.52 - 220.47 233.9 247.77 262.1 276.86 292.07 307.71 323.79 340.31 357.27 374.61 392.33 410.35 428.69 447.35 466.36 - 485.74 505.48 525.61 546.57 568.79 591.38 614.2 637.28 / - 13 1 16 1 103.25 113 124.39 137.26 151.48 167.04 183.85 201.79 220.78 240.75 261.58 283.27 - 305.8 329.14 353.3 378.2 403.91 430.46 457.8 485.94 514.91 544.71 575.3 606.65 638.73 671.35 704.75 739.03 - 775.51 812.79 851.05 889.38 928.7 968.26 1007.94 1048.3 / - 13 1 17 1 105.92 124.51 148.49 174.72 202.23 231.74 263.78 296.55 331.61 367.83 406.73 447.07 - 487.39 531.15 576.38 622.92 671.49 722.1 774.2 827.22 883.1 940.6 1000.65 1062.06 1123.88 1184.18 1241.36 1293.62 - 1334.04 1379.48 1425.23 1474.15 1523.32 1575.74 1628.73 1678.63 / - 13 1 18 1 119.2 160.53 206.57 254.9 306.49 361.64 420.74 484.13 551.67 622.75 697.93 777.58 - 862.24 951.04 1042.96 1137.64 1233.83 1323.5 1410.73 1500.23 1595.02 1689.66 1788.63 1886.33 1988.72 2094.72 2198.3 2304.68 - 2412.02 2525.66 2638.9 2753.73 2870.53 2988.87 3108.89 3230.33 / - 13 1 19 1 154.85 226 308.97 401.23 502.58 613.34 733.17 865.92 1008.19 1159.62 1309.33 1447.15 - 1597.93 1750.28 1903.99 2072.5 2235.02 2403.54 2574.8 2756.77 2936.24 3128.77 3320.77 3516.14 3713.16 3923.71 4133.56 4346.52 - 4566.5 4786.89 5018.88 5252.11 5491.26 5726.11 5973.79 6226.89 / - 13 1 20 1 216.92 333.74 481.78 668.16 881.97 1125.18 1371.47 1615.25 1882.59 2159.28 2440.14 2750.59 - 3079.06 3404.06 3744.99 4129.84 4497.79 4876.73 5275.3 5682.44 6107.01 6543.62 6988.07 7432.67 7902.53 8401.59 8883.17 9383.17 - 9901.67 10431.47 10992.33 11548.48 12124.24 12686.72 13293.6 13916.19 / - 13 2 1 1 250.8 250.66 250.73 250.94 251.24 251.63 252.09 252.62 253.21 253.87 254.58 255.36 - 256.19 257.08 258.03 259.03 260.09 261.2 262.37 263.6 264.87 266.21 267.59 269.03 270.53 272.08 273.68 275.33 - 277.04 278.8 280.62 282.48 284.4 286.37 288.4 290.48 / - 13 2 2 1 250.73 250.57 250.64 250.85 251.15 251.54 252 252.53 253.12 253.77 254.49 255.26 - 256.1 256.99 257.93 258.94 260 261.11 262.28 263.51 264.78 266.12 267.51 268.95 270.44 271.99 273.59 275.25 - 276.96 278.72 280.54 282.41 284.33 286.3 288.33 290.41 / - 13 2 3 1 250.59 250.42 250.48 250.68 250.98 251.37 251.83 252.35 252.95 253.6 254.32 255.09 - 255.92 256.81 257.76 258.77 259.83 260.94 262.11 263.34 264.62 265.95 267.34 268.79 270.28 271.83 273.44 275.1 - 276.81 278.57 280.39 282.26 284.19 286.16 288.19 290.28 / - 13 2 4 1 250.34 250.14 250.19 250.38 250.68 251.06 251.51 252.04 252.63 253.28 254 254.77 - 255.61 256.5 257.45 258.45 259.51 260.63 261.8 263.03 264.31 265.65 267.04 268.49 269.99 271.54 273.15 274.81 - 276.53 278.3 280.12 282 283.93 285.91 287.95 290.03 / - 13 2 5 1 249.85 249.6 249.63 249.81 250.1 250.47 250.93 251.45 252.04 252.69 253.41 254.18 - 255.02 255.91 256.86 257.87 258.93 260.05 261.23 262.46 263.75 265.09 266.49 267.94 269.45 271.01 272.63 274.3 - 276.02 277.8 279.63 281.51 283.45 285.44 287.49 289.59 / - 13 2 6 1 248.91 248.58 248.58 248.73 249.01 249.38 249.82 250.34 250.93 251.58 252.3 253.08 - 253.92 254.81 255.77 256.78 257.85 258.98 260.17 261.41 262.7 264.06 265.46 266.93 268.45 270.02 271.65 273.33 - 275.07 276.86 278.71 280.61 282.57 284.58 286.65 288.76 / - 13 2 7 1 247.02 246.59 246.53 246.66 246.92 247.27 247.71 248.23 248.82 249.47 250.19 250.98 - 251.82 252.73 253.7 254.72 255.81 256.95 258.15 259.41 260.73 262.1 263.53 265.02 266.56 268.16 269.82 271.53 - 273.3 275.12 277 278.94 280.93 282.98 285.08 287.24 / - 13 2 8 1 242.59 241.46 240.99 240.91 241.03 241.29 241.68 242.16 242.73 243.38 244.11 244.91 - 245.78 246.72 247.73 248.81 249.95 251.15 252.42 253.75 255.14 256.6 258.11 259.69 261.33 263.03 264.79 266.61 - 268.49 270.42 272.42 274.48 276.59 278.77 281 283.28 / - 13 2 9 1 231.18 225.04 224.07 223.66 223.63 223.84 224.23 224.77 225.43 226.21 227.1 228.08 - 229.15 230.31 231.53 232.86 234.27 235.75 237.32 238.95 240.67 242.42 244.28 246.2 248.19 250.25 252.38 254.56 - 256.82 259.14 261.53 263.98 266.49 269.07 271.71 274.41 / - 13 2 10 1 203.37 192.96 191.59 191.17 191.29 191.76 192.51 193.46 194.6 195.92 197.37 198.97 - 200.71 202.56 204.52 206.6 208.79 211.08 213.46 215.92 218.5 221.12 223.86 226.64 229.54 232.51 235.5 238.61 - 241.73 244.96 248.23 251.6 255.02 258.53 262.08 265.71 / - 13 2 11 1 159.63 155.71 154.88 155.1 155.89 157.08 158.61 160.4 162.42 164.66 167.1 169.71 - 172.49 175.52 178.61 181.85 185.33 188.82 192.52 196.23 200.15 204.06 208.14 212.32 216.49 220.89 225.22 229.8 - 234.27 238.81 243.41 248.47 253.21 258 262.85 267.77 / - 13 2 12 1 126.41 125.9 127.14 129.11 131.49 134.17 137.1 140.25 143.59 147.12 150.82 155 - 159.29 163.67 168.19 172.89 177.71 182.62 187.67 192.85 198.16 203.59 209.14 214.8 220.57 226.43 232.38 238.2 - 244.37 250.65 257.03 263.16 269.72 276.37 282.72 289.56 / - 13 2 13 1 111.44 114.14 117.39 121.12 125 129.06 133.3 137.77 142.45 147.35 152.47 157.79 - 163.31 169.01 174.91 180.99 187.25 193.69 200.29 207.06 214 221.08 228.32 235.69 243.43 251.98 260.64 269.06 - 277.72 286.3 294.98 303.82 312.66 321.63 331.13 340.37 / - 13 2 14 1 108.17 111.95 116.06 120.6 125.6 131.15 137.17 143.6 150.4 157.56 165.05 172.86 - 180.99 189.43 198.16 207.17 216.47 226.04 235.89 246.01 256.38 266.93 277.64 288.53 299.62 310.91 322.4 334.08 - 345.97 358.05 370.33 383.55 397.35 411.29 425.23 439.37 / - 13 2 15 1 104.97 111.12 117.51 124.63 132.61 141.4 150.94 161.17 172.04 183.52 195.54 208.06 - 221.06 234.53 248.46 262.83 277.65 292.9 308.6 324.72 341.29 358.3 375.71 393.51 411.61 430.03 448.77 467.86 - 487.31 507.14 527.35 547.95 569.84 592.59 615.69 638.98 / - 13 2 16 1 103.17 113.03 124.49 137.42 151.7 167.29 184.13 202.1 221.12 241.12 262.02 283.76 - 306.33 329.73 353.94 378.91 404.68 431.26 458.62 486.79 515.79 545.6 576.22 607.57 639.69 672.38 705.82 740.14 - 776.24 813.6 851.63 890.49 929.28 969.1 1009.22 1049.41 / - 13 2 17 1 105.86 124.56 148.59 174.87 202.81 232.19 263.98 296.76 331.88 368.05 406.97 447.57 - 487.69 531.46 576.68 623.23 671.73 722.26 774.81 827.46 883.34 940.8 1000.52 1062.11 1123.9 1184.71 1242.63 1295.88 - 1337.09 1383.84 1429.71 1479.19 1528.99 1579.66 1635.32 1685.64 / - 13 2 18 1 119.22 160.43 206.62 255.03 306.67 361.84 420.89 484.2 551.64 622.68 697.71 777.18 - 861.67 950.35 1042.29 1137.02 1233.18 1323.68 1412.72 1503.87 1599.9 1688.97 1782.28 1872.05 1968.55 2064.59 2162.31 2259.31 - 2358.97 2465.73 2568.6 2672.19 2780.2 2888.95 2998.85 3108.29 / - 13 2 19 1 154.71 225.86 308.42 400.59 501.78 612.1 732.94 863.02 1007.37 1158.68 1304.35 1447.29 - 1598.73 1751.8 1907.53 2068.74 2242.99 2413.43 2586.61 2770.22 2951.74 3141.13 3340.02 3537.52 3736.71 3949.45 4161.42 4376.89 - 4599.94 4821.83 5056.1 5282.23 5533.56 5771.16 6021.49 6277.08 / - 13 2 20 1 216.75 333.64 480.09 664.8 881.05 1124.46 1366.55 1615.82 1875.32 2151.04 2444.12 2755.99 - 3068.07 3412.94 3757.97 4111.71 4514.22 4898.35 5302.09 5714.39 6144.05 6570.08 7035.31 7484.96 7960.01 8464.39 8952.67 9455.98 - 9979.53 10514.74 11081.71 11644.04 12225.79 12794.61 13407.82 14037.06 / - 13 3 1 1 252.65 252.49 252.55 252.76 253.06 253.45 253.91 254.44 255.03 255.69 256.4 257.18 - 258.01 258.91 259.86 260.86 261.92 263.04 264.21 265.44 266.73 268.06 269.46 270.9 272.4 273.96 275.57 277.23 - 278.94 280.71 282.54 284.41 286.34 288.32 290.36 292.45 / - 13 3 2 1 252.57 252.4 252.46 252.67 252.97 253.35 253.81 254.34 254.93 255.59 256.31 257.08 - 257.92 258.81 259.76 260.76 261.83 262.95 264.12 265.35 266.63 267.97 269.36 270.81 272.31 273.87 275.48 277.14 - 278.86 280.63 282.45 284.33 286.26 288.25 290.28 292.37 / - 13 3 3 1 252.43 252.24 252.3 252.49 252.79 253.18 253.63 254.16 254.75 255.41 256.13 256.9 - 257.74 258.63 259.58 260.59 261.65 262.77 263.94 265.17 266.46 267.8 269.19 270.64 272.15 273.7 275.32 276.98 - 278.7 280.47 282.3 284.18 286.11 288.1 290.14 292.23 / - 13 3 4 1 252.16 251.94 251.99 252.18 252.47 252.85 253.31 253.83 254.43 255.08 255.8 256.57 - 257.41 258.3 259.25 260.26 261.33 262.45 263.62 264.86 266.14 267.49 268.88 270.34 271.84 273.4 275.02 276.69 - 278.41 280.19 282.02 283.91 285.84 287.84 289.88 291.98 / - 13 3 5 1 251.65 251.39 251.41 251.59 251.88 252.25 252.7 253.23 253.82 254.47 255.19 255.96 - 256.8 257.69 258.65 259.66 260.73 261.85 263.03 264.27 265.56 266.91 268.31 269.77 271.28 272.85 274.47 276.15 - 277.88 279.67 281.5 283.4 285.35 287.35 289.4 291.51 / - 13 3 6 1 250.66 250.33 250.32 250.47 250.75 251.11 251.56 252.08 252.67 253.32 254.04 254.82 - 255.66 256.56 257.52 258.53 259.61 260.74 261.93 263.17 264.47 265.83 267.24 268.71 270.24 271.82 273.46 275.15 - 276.89 278.69 280.55 282.46 284.43 286.45 288.52 290.65 / - 13 3 7 1 248.69 248.25 248.19 248.32 248.58 248.93 249.37 249.89 250.48 251.14 251.86 252.64 - 253.49 254.4 255.37 256.4 257.49 258.63 259.84 261.1 262.42 263.8 265.24 266.73 268.28 269.89 271.55 273.27 - 275.05 276.88 278.77 280.72 282.72 284.77 286.89 289.06 / - 13 3 8 1 243.88 242.53 242.08 241.93 242.05 242.31 242.7 243.18 243.75 244.41 245.15 245.96 - 246.84 247.79 248.81 249.89 251.05 252.26 253.54 254.89 256.29 257.76 259.3 260.89 262.55 264.26 266.04 267.88 - 269.78 271.74 273.76 275.83 277.97 280.16 282.42 284.73 / - 13 3 9 1 231.97 225.3 224.25 223.87 223.83 224.05 224.44 224.99 225.67 226.46 227.36 228.37 - 229.46 230.65 231.92 233.28 234.72 236.2 237.8 239.47 241.22 243.04 244.93 246.86 248.89 251 253.16 255.4 - 257.68 260.05 262.48 264.98 267.54 270.15 272.83 275.58 / - 13 3 10 1 203.43 192.75 191.44 191.07 191.22 191.73 192.5 193.5 194.69 196.02 197.52 199.15 - 200.91 202.81 204.82 206.96 209.18 211.51 213.94 216.46 219.07 221.76 224.53 227.41 230.33 233.35 236.41 239.58 - 242.77 246.06 249.38 252.79 256.26 259.77 263.38 267.04 / - 13 3 11 1 159.58 155.81 155 155.24 156.07 157.32 158.84 160.65 162.7 164.97 167.43 170.13 - 172.95 175.93 179.16 182.44 185.84 189.5 193.14 196.89 200.85 204.93 208.97 213.19 217.5 221.8 226.34 230.79 - 235.31 240.1 244.75 249.47 254.68 259.53 264.44 269.41 / - 13 3 12 1 126.49 126.07 127.34 129.34 131.76 134.47 137.43 140.61 143.99 147.55 151.29 155.3 - 159.77 164.21 168.77 173.52 178.37 183.29 188.38 193.59 198.94 204.4 209.99 215.69 221.5 227.43 233.43 239.53 - 245.78 252.12 258.23 264.76 271.39 277.72 284.53 291.44 / - 13 3 13 1 111.53 114.32 117.55 121.29 125.22 129.32 133.61 138.11 142.83 147.78 152.94 158.31 - 163.87 169.61 175.55 181.68 187.99 194.47 201.12 207.94 214.92 222.06 229.34 236.77 244.34 252.74 261.51 270.27 - 278.95 287.65 296.38 305.28 314.44 323.49 332.67 341.97 / - 13 3 14 1 108.23 112.09 116.25 120.83 125.87 131.43 137.48 143.94 150.79 157.99 165.52 173.38 - 181.56 190.04 198.82 207.89 217.24 226.86 236.76 246.93 257.35 267.95 278.73 289.68 300.83 312.18 323.73 335.49 - 347.44 359.59 371.94 384.49 398.39 412.51 426.73 440.88 / - 13 3 15 1 104.89 111.16 117.67 124.84 132.86 141.68 151.26 161.53 172.43 183.95 196.02 208.6 - 221.65 235.17 249.14 263.57 278.43 293.74 309.48 325.65 342.27 359.33 376.8 394.68 412.86 431.35 450.17 469.34 - 488.87 508.77 529.06 549.75 571.29 594.18 617.01 640.63 / - 13 3 16 1 103.11 113.05 124.59 137.59 151.91 167.54 184.4 202.41 221.46 241.49 262.45 284.23 - 306.86 330.3 354.56 379.61 405.42 432.03 459.43 487.63 516.64 546.48 577.1 608.48 640.58 673.37 706.86 741.2 - 776.4 813.82 852.02 891.17 930.3 970.34 1010.02 1050.5 / - 13 3 17 1 105.81 124.61 148.75 175.01 203.14 232.89 264.18 296.96 332.48 368.26 407.18 447.81 - 487.96 531.73 577.1 623.53 671.9 722.36 774.85 827.57 883.49 940.94 1000.27 1061.98 1124.1 1185.16 1243.37 1295.23 - 1340.69 1388.95 1437.21 1487.54 1539.67 1591.44 1648.41 1701.48 / - 13 3 18 1 119.24 160.38 206.65 255.15 306.83 362.11 421.27 484.26 551.59 622.85 697.46 776.9 - 861.04 949.53 1041.5 1136.3 1232.36 1320.45 1404.16 1489.22 1579.47 1669.7 1763.97 1855.66 1955.02 2052.39 2148.91 2247.62 - 2349.16 2453.51 2561.1 2667.75 2776.29 2883.79 2994.15 3106.4 / - 13 3 19 1 154.57 225.72 307.84 400.66 501.87 612.05 731.89 862.47 1006.5 1157.63 1303.77 1447.38 - 1592.69 1753.14 1909.72 2072.76 2249.56 2422.3 2597.94 2782.83 2967.77 3159.29 3360.17 3559.88 3761.45 3969.57 4190.67 4408.6 - 4634.06 4858.54 5095.12 5324.2 5577.99 5825.82 6071.55 6329.81 / - 13 3 20 1 216.58 333.55 477.2 664.43 876.41 1118 1366.15 1610.78 1876.82 2153.73 2448.19 2761.53 - 3075.21 3422.03 3769.42 4124.61 4529.32 4917.11 5326.71 5741.14 6178.09 6611.26 7082.19 7537.22 8017.74 8508.48 9017.69 9530.69 - 10059.74 10600.73 11156.33 11743.48 12331.91 12907.38 13527.6 14163.73 / - 13 4 1 1 254.49 254.31 254.38 254.58 254.88 255.26 255.72 256.25 256.85 257.5 258.22 259 - 259.83 260.73 261.68 262.69 263.75 264.87 266.05 267.28 268.57 269.91 271.31 272.76 274.27 275.83 277.45 279.12 - 280.84 282.62 284.45 286.33 288.27 290.26 292.31 294.41 / - 13 4 2 1 254.41 254.22 254.28 254.48 254.78 255.16 255.62 256.15 256.74 257.4 258.12 258.89 - 259.73 260.63 261.58 262.59 263.65 264.77 265.95 267.19 268.47 269.82 271.22 272.67 274.18 275.74 277.35 279.02 - 280.75 282.53 284.36 286.25 288.19 290.18 292.23 294.33 / - 13 4 3 1 254.26 254.06 254.11 254.3 254.6 254.98 255.44 255.97 256.56 257.21 257.93 258.71 - 259.55 260.44 261.39 262.4 263.47 264.59 265.77 267 268.29 269.64 271.04 272.49 274 275.57 277.19 278.86 - 280.58 282.37 284.2 286.09 288.03 290.03 292.08 294.18 / - 13 4 4 1 253.98 253.75 253.79 253.97 254.27 254.65 255.1 255.63 256.22 256.87 257.59 258.37 - 259.21 260.1 261.05 262.07 263.13 264.26 265.44 266.67 267.97 269.31 270.72 272.17 273.69 275.25 276.88 278.55 - 280.28 282.07 283.91 285.8 287.75 289.75 291.81 293.92 / - 13 4 5 1 253.45 253.17 253.19 253.36 253.65 254.02 254.47 255 255.59 256.24 256.96 257.74 - 258.58 259.47 260.43 261.44 262.51 263.64 264.82 266.07 267.36 268.71 270.12 271.59 273.1 274.68 276.31 277.99 - 279.73 281.52 283.37 285.27 287.23 289.24 291.31 293.43 / - 13 4 6 1 252.41 252.07 252.05 252.21 252.48 252.84 253.29 253.81 254.4 255.05 255.77 256.55 - 257.39 258.3 259.26 260.28 261.35 262.49 263.68 264.93 266.23 267.6 269.02 270.49 272.02 273.61 275.25 276.95 - 278.7 280.51 282.38 284.3 286.27 288.3 290.39 292.53 / - 13 4 7 1 250.35 249.91 249.84 249.96 250.21 250.57 251.01 251.52 252.11 252.77 253.49 254.28 - 255.12 256.04 257.01 258.04 259.13 260.28 261.49 262.76 264.08 265.47 266.91 268.41 269.96 271.58 273.25 274.98 - 276.76 278.6 280.5 282.46 284.47 286.54 288.66 290.84 / - 13 4 8 1 245.12 243.6 243.01 242.89 242.99 243.24 243.62 244.1 244.67 245.33 246.07 246.88 - 247.77 248.73 249.76 250.85 252.02 253.25 254.54 255.9 257.32 258.81 260.36 261.97 263.65 265.39 267.19 269.04 - 270.96 272.94 274.99 277.09 279.25 281.47 283.75 286.09 / - 13 4 9 1 232.72 225.43 224.4 223.98 223.95 224.17 224.58 225.14 225.84 226.65 227.58 228.6 - 229.69 230.9 232.2 233.59 235.06 236.61 238.24 239.92 241.7 243.56 245.49 247.49 249.54 251.68 253.89 256.17 - 258.52 260.91 263.39 265.93 268.54 271.21 273.93 276.72 / - 13 4 10 1 203.11 192.6 191.32 190.96 191.14 191.67 192.46 193.48 194.7 196.08 197.62 199.3 - 201.13 203.07 205.12 207.28 209.56 211.94 214.41 216.98 219.65 222.4 225.24 228.15 231.14 234.2 237.36 240.55 - 243.85 247.17 250.59 254.04 257.58 261.14 264.79 268.47 / - 13 4 11 1 159.55 155.84 155.13 155.42 156.28 157.52 159.1 160.95 163.03 165.33 167.82 170.49 - 173.34 176.43 179.6 182.91 186.47 190.03 193.71 197.66 201.55 205.67 209.76 214.07 218.43 222.77 227.3 231.98 - 236.55 241.19 246.11 250.89 255.73 261.07 266.04 271.07 / - 13 4 12 1 126.6 126.25 127.54 129.57 132.02 134.77 137.76 140.97 144.39 147.98 151.76 155.7 - 160.16 164.72 169.34 174.09 179.03 184.07 189.21 194.48 199.87 205.39 211.03 216.79 222.66 228.65 234.71 240.63 - 246.89 253.28 259.77 266.37 272.69 279.47 286.35 292.9 / - 13 4 13 1 111.64 114.5 117.73 121.46 125.43 129.58 133.91 138.46 143.22 148.21 153.41 158.82 - 164.42 170.21 176.2 182.37 188.72 195.25 201.95 208.82 215.85 223.04 230.37 237.86 245.48 253.47 262.33 271.29 - 279.99 288.94 297.79 306.73 315.86 324.97 334.21 343.59 / - 13 4 14 1 108.3 112.24 116.45 121.07 126.14 131.72 137.79 144.29 151.17 158.41 166 173.9 - 182.12 190.65 199.48 208.6 218 227.68 237.62 247.84 258.32 268.98 279.81 290.83 302.04 313.46 325.07 336.89 - 348.91 361.13 373.56 386.18 399.39 413.61 428.01 442.45 / - 13 4 15 1 104.83 111.2 117.83 125.05 133.11 141.96 151.57 161.89 172.83 184.38 196.5 209.13 - 222.23 235.8 249.82 264.3 279.21 294.56 310.35 326.58 343.24 360.34 377.88 395.82 414.09 432.66 451.56 470.81 - 490.42 510.4 530.76 551.51 572.67 595.2 618.65 641.99 / - 13 4 16 1 103.07 113.07 124.69 137.74 152.12 167.79 184.68 202.71 221.79 241.85 262.86 284.7 - 307.37 330.86 355.17 380.28 406.15 432.79 460.22 488.44 517.47 547.32 577.95 609.33 641.44 674.28 707.85 742.23 - 777.44 814.47 852.76 891.67 930.98 970.84 1011.05 1051.3 / - 13 4 17 1 105.76 124.66 148.84 175.15 203.32 233.08 264.38 297.16 332.66 368.44 407.38 448 - 488.18 531.95 577.32 623.81 672.03 722.4 774.8 827.57 883.5 940.96 999.86 1061.24 1123.64 1185.26 1244.25 1295.75 - 1344.3 1394.13 1444.13 1496.83 1549.87 1603.49 1662.7 1716.86 / - 13 4 18 1 119.26 160.25 206.7 255.36 307 362.28 421.41 484.32 551.53 622.72 697.17 776.41 - 860.33 948.61 1040.58 1135.47 1231.35 1320.33 1404.9 1491.14 1582.18 1673.08 1769.25 1862.07 1960.14 2059.65 2158.71 2261.99 - 2359.86 2465.44 2574.41 2682.33 2792.14 2903.01 3014.93 3128.63 / - 13 4 19 1 154.42 225.58 307.79 399.93 500.88 611.95 730.94 861.88 1002.52 1152.37 1303.09 1447.32 - 1593.28 1754.41 1911.79 2075.65 2254.08 2429.54 2607.88 2795.35 2982.4 3177.22 3380.66 3583.08 3787.31 3997.94 4221.52 4441.94 - 4670.07 4897.23 5136.15 5368.46 5624.84 5875.26 6124.11 6385.42 / - 13 4 20 1 216.4 333.46 474.64 661.39 871.22 1111.46 1361.14 1611.32 1878.34 2156.53 2452.38 2767.25 - 3082.61 3431.47 3780.57 4137.96 4545.06 4936.49 5348.15 5765.06 6209.97 6650.94 7128.12 7589.01 8075.43 8572.44 9087.74 9606.68 - 10141.74 10689.21 11251.81 11846.56 12442.1 13024.98 13652.59 14296.45 / - 13 5 1 1 256.39 256.17 256.22 256.41 256.71 257.09 257.55 258.07 258.66 259.32 260.04 260.82 - 261.65 262.55 263.5 264.51 265.58 266.71 267.89 269.12 270.42 271.76 273.16 274.62 276.13 277.7 279.32 281 - 282.73 284.51 286.35 288.25 290.19 292.19 294.25 296.36 / - 13 5 2 1 256.3 256.08 256.12 256.31 256.6 256.98 257.44 257.97 258.56 259.22 259.93 260.71 - 261.55 262.44 263.4 264.41 265.48 266.6 267.78 269.02 270.31 271.66 273.06 274.52 276.04 277.6 279.23 280.9 - 282.64 284.42 286.26 288.16 290.11 292.11 294.17 296.28 / - 13 5 3 1 256.15 255.9 255.94 256.12 256.42 256.8 257.25 257.78 258.37 259.02 259.74 260.52 - 261.36 262.25 263.21 264.22 265.29 266.41 267.6 268.83 270.13 271.48 272.88 274.34 275.86 277.43 279.05 280.73 - 282.46 284.25 286.09 287.99 289.94 291.95 294.01 296.12 / - 13 5 4 1 255.85 255.58 255.61 255.78 256.07 256.45 256.9 257.43 258.02 258.67 259.39 260.17 - 261 261.9 262.86 263.87 264.94 266.07 267.25 268.49 269.79 271.14 272.55 274.01 275.53 277.1 278.73 280.41 - 282.15 283.94 285.79 287.69 289.65 291.66 293.72 295.84 / - 13 5 5 1 255.29 254.98 254.98 255.15 255.43 255.8 256.25 256.77 257.36 258.02 258.73 259.51 - 260.35 261.25 262.21 263.22 264.3 265.43 266.61 267.86 269.16 270.52 271.93 273.4 274.92 276.5 278.14 279.83 - 281.57 283.37 285.23 287.14 289.11 291.13 293.2 295.33 / - 13 5 6 1 254.19 253.82 253.79 253.94 254.21 254.58 255.02 255.54 256.13 256.78 257.5 258.28 - 259.13 260.03 260.99 262.01 263.09 264.23 265.42 266.68 267.99 269.35 270.78 272.26 273.79 275.39 277.04 278.74 - 280.5 282.32 284.19 286.12 288.1 290.14 292.24 294.39 / - 13 5 7 1 252.01 251.53 251.44 251.55 251.79 252.14 252.57 253.08 253.67 254.32 255.05 255.83 - 256.68 257.59 258.57 259.6 260.7 261.85 263.06 264.34 265.67 267.06 268.51 270.01 271.58 273.2 274.88 276.61 - 278.41 280.26 282.17 284.14 286.16 288.24 290.38 292.57 / - 13 5 8 1 246.31 244.45 243.86 243.73 243.83 244.08 244.46 244.94 245.52 246.18 246.93 247.75 - 248.65 249.62 250.66 251.77 252.95 254.19 255.5 256.88 258.32 259.82 261.39 263.02 264.72 266.47 268.29 270.18 - 272.12 274.12 276.19 278.31 280.5 282.75 285.06 287.42 / - 13 5 9 1 233.44 225.48 224.43 224.02 223.99 224.21 224.62 225.19 225.9 226.74 227.68 228.73 - 229.87 231.11 232.45 233.83 235.33 236.92 238.58 240.33 242.15 244.02 245.99 248.03 250.15 252.34 254.57 256.89 - 259.29 261.75 264.26 266.84 269.5 272.22 275 277.84 / - 13 5 10 1 203.04 192.46 191.2 190.87 191.06 191.61 192.43 193.48 194.71 196.12 197.69 199.41 - 201.26 203.25 205.36 207.58 209.93 212.36 214.9 217.52 220.24 223.03 225.92 228.9 231.96 235.08 238.29 241.56 - 244.9 248.32 251.78 255.33 258.91 262.57 266.27 270.05 / - 13 5 11 1 159.59 155.92 155.26 155.58 156.46 157.73 159.34 161.2 163.31 165.63 168.15 170.85 - 173.8 176.85 180.05 183.5 186.97 190.71 194.43 198.26 202.37 206.41 210.67 214.89 219.35 223.85 228.32 232.98 - 237.79 242.49 247.25 252.31 257.21 262.17 267.65 272.75 / - 13 5 12 1 126.74 126.43 127.75 129.8 132.28 135.06 138.09 141.33 144.78 148.41 152.22 156.2 - 160.47 165.22 169.91 174.7 179.63 184.77 189.91 195.21 200.65 206.21 211.89 217.68 223.6 229.63 235.77 241.98 - 248.3 254.75 260.98 267.62 274.37 281.22 287.76 294.8 / - 13 5 13 1 111.76 114.68 117.91 121.64 125.64 129.83 134.21 138.8 143.6 148.63 153.88 159.33 - 164.97 170.81 176.84 183.06 189.46 196.03 202.78 209.7 216.78 224.01 231.4 238.94 246.61 254.43 263.11 272.2 - 281.07 289.98 299.21 308.21 317.39 326.84 336.17 345.63 / - 13 5 14 1 108.37 112.39 116.64 121.31 126.42 132.01 138.1 144.64 151.56 158.84 166.47 174.42 - 182.69 191.26 200.14 209.31 218.76 228.49 238.49 248.76 259.29 270 280.9 291.97 303.25 314.72 326.4 338.29 - 350.37 362.67 375.16 387.85 400.75 414.66 429.21 443.9 / - 13 5 15 1 104.77 111.24 117.98 125.26 133.35 142.24 151.89 162.24 173.22 184.81 196.97 209.65 - 222.81 236.43 250.5 265.02 279.99 295.39 311.22 327.49 344.2 361.34 378.94 396.95 415.3 433.95 452.93 472.25 - 491.94 511.99 532.43 553.26 574.49 596.13 619.7 643.2 / - 13 5 16 1 103.03 113.09 124.79 137.9 152.34 168.04 184.95 203.01 222.12 242.21 263.24 285.15 - 307.87 331.41 355.76 380.92 406.85 433.53 460.98 489.22 518.27 548.13 578.78 610.15 642.24 675.13 708.77 743.2 - 778.44 814.5 852.86 891.96 931.56 971.4 1011.91 1052.62 / - 13 5 17 1 105.72 124.7 148.99 175.31 203.5 233.28 264.58 297.35 332.84 368.61 407.55 448.15 - 488.37 532.14 577.49 623.96 672.1 722.36 774.65 827.81 883.4 940.86 999.75 1060.78 1123.46 1185.21 1245.05 1297.9 - 1348.03 1399.34 1451.13 1505.54 1560.29 1616.55 1676.06 1732.64 / - 13 5 18 1 119.16 160.19 206.69 255.47 307.15 362.47 421.55 484.56 551.46 622.57 696.9 775.87 - 859.56 947.64 1039.5 1134.51 1230.13 1320.01 1405.72 1492.71 1584.53 1677.37 1773.45 1870.47 1969.24 2068.39 2167.21 2273.36 - 2372.49 2479.4 2589.78 2699.11 2810.38 2922.83 3036.42 3152.44 / - 13 5 19 1 154.27 225.43 307.18 399.94 500.94 610.59 730.65 861.28 1001.55 1151.17 1302.27 1447.16 - 1593.75 1755.58 1913.78 2078.55 2257.95 2434.6 2615.29 2804.87 2995.51 3193.9 3394.7 3605.66 3812.91 4026.58 4253.13 4476.62 - 4704.32 4938.01 5179.56 5415.1 5664.22 5927.6 6179.69 6443.96 / - 13 5 20 1 216.22 333.38 471.72 658.1 870.22 1110.6 1360.65 1607.62 1879.91 2159.4 2456.72 2753.54 - 3090.31 3441.29 3792.18 4151.88 4528.69 4955.4 5369.36 5789.42 6236.06 6687.95 7155.21 7639.42 8132.31 8635.89 9158.17 9666.49 - 10225.15 10779.66 11349.64 11934.6 12556.15 13146.96 13782.62 14434.64 / - 13 6 1 1 258.52 258.16 258.15 258.31 258.59 258.96 259.41 259.93 260.51 261.17 261.88 262.66 - 263.49 264.39 265.34 266.36 267.43 268.55 269.73 270.97 272.27 273.62 275.02 276.49 278 279.58 281.2 282.89 - 284.62 286.41 288.26 290.16 292.12 294.13 296.19 298.31 / - 13 6 2 1 258.43 258.06 258.05 258.21 258.48 258.85 259.3 259.82 260.41 261.06 261.77 262.55 - 263.39 264.28 265.24 266.25 267.32 268.44 269.63 270.87 272.16 273.51 274.92 276.38 277.9 279.47 281.1 282.79 - 284.52 286.32 288.17 290.07 292.03 294.04 296.1 298.22 / - 13 6 3 1 258.26 257.88 257.86 258.02 258.29 258.66 259.1 259.62 260.21 260.86 261.57 262.35 - 263.19 264.08 265.04 266.05 267.12 268.25 269.43 270.67 271.97 273.32 274.73 276.19 277.71 279.29 280.92 282.6 - 284.35 286.14 287.99 289.9 291.86 293.87 295.94 298.06 / - 13 6 4 1 257.96 257.55 257.52 257.67 257.93 258.3 258.74 259.26 259.84 260.5 261.21 261.99 - 262.82 263.72 264.67 265.69 266.76 267.89 269.07 270.32 271.62 272.97 274.38 275.85 277.37 278.95 280.58 282.27 - 284.02 285.82 287.67 289.58 291.55 293.57 295.64 297.77 / - 13 6 5 1 257.38 256.93 256.87 257.01 257.27 257.63 258.07 258.58 259.17 259.82 260.53 261.31 - 262.15 263.05 264 265.02 266.09 267.23 268.41 269.66 270.96 272.32 273.74 275.21 276.74 278.33 279.97 281.67 - 283.42 285.23 287.09 289.01 290.98 293.01 295.1 297.23 / - 13 6 6 1 256.24 255.73 255.64 255.76 256.01 256.36 256.8 257.31 257.89 258.54 259.26 260.04 - 260.88 261.78 262.74 263.76 264.84 265.98 267.18 268.44 269.75 271.12 272.55 274.03 275.57 277.17 278.82 280.54 - 282.3 284.13 286.01 287.94 289.94 291.99 294.09 296.25 / - 13 6 7 1 253.95 253.29 253.11 253.17 253.38 253.7 254.12 254.62 255.2 255.85 256.56 257.35 - 258.2 259.11 260.08 261.12 262.21 263.37 264.59 265.87 267.2 268.6 270.05 271.57 273.14 274.77 276.46 278.21 - 280.01 281.88 283.8 285.78 287.81 289.91 292.06 294.27 / - 13 6 8 1 247.8 245.41 244.82 244.58 244.65 244.88 245.25 245.73 246.31 246.97 247.72 248.55 - 249.46 250.44 251.49 252.61 253.8 255.06 256.39 257.78 259.24 260.76 262.35 264.01 265.72 267.5 269.35 271.21 - 273.18 275.21 277.3 279.46 281.67 283.95 286.29 288.69 / - 13 6 9 1 234.46 225.62 224.45 224.02 223.98 224.2 224.62 225.2 225.93 226.78 227.74 228.82 - 229.96 231.22 232.58 234.04 235.57 237.2 238.86 240.65 242.51 244.45 246.47 248.52 250.69 252.92 255.22 257.6 - 260.01 262.52 265.1 267.74 270.43 273.2 276.04 278.94 / - 13 6 10 1 203.15 192.34 191.09 190.78 190.99 191.56 192.41 193.47 194.74 196.17 197.77 199.52 - 201.4 203.42 205.56 207.83 210.21 212.7 215.3 218 220.79 223.67 226.62 229.65 232.78 235.97 239.24 242.57 - 245.97 249.45 252.99 256.61 260.28 263.99 267.79 271.62 / - 13 6 11 1 159.5 156.04 155.38 155.73 156.65 157.97 159.57 161.46 163.59 165.94 168.54 171.28 - 174.19 177.35 180.59 183.97 187.6 191.24 195.15 199.03 203.01 207.28 211.46 215.87 220.22 224.82 229.45 234.05 - 238.85 243.59 248.62 253.51 258.7 263.72 268.8 273.94 / - 13 6 12 1 126.89 126.61 127.95 130.03 132.54 135.35 138.41 141.69 145.17 148.84 152.69 156.7 - 160.88 165.62 170.44 175.31 180.29 185.46 190.64 196.09 201.58 207.19 212.93 218.78 224.76 230.85 237.05 243.08 - 249.45 255.91 262.52 269.24 276.06 282.59 289.59 296.71 / - 13 6 13 1 111.88 114.85 118.11 121.82 125.85 130.08 134.5 139.13 143.98 149.05 154.34 159.84 - 165.52 171.41 177.48 183.74 190.19 196.81 203.61 210.57 217.7 224.99 232.43 240.02 247.75 255.62 263.87 273.05 - 282.08 291.31 300.29 309.58 318.91 328.32 337.72 347.25 / - 13 6 14 1 108.38 112.53 116.84 121.54 126.69 132.3 138.42 144.98 151.94 159.27 166.94 174.93 - 183.25 191.87 200.79 210.01 219.51 229.3 239.35 249.67 260.25 271.03 281.98 293.11 304.45 315.99 327.73 339.68 - 351.83 364.19 376.76 389.52 402.49 415.65 430.31 445.2 / - 13 6 15 1 104.71 111.27 118.13 125.46 133.6 142.52 152.2 162.59 173.62 185.24 197.44 210.16 - 223.38 237.05 251.18 265.75 280.76 296.2 312.08 328.4 345.14 362.33 379.96 398.03 416.46 435.2 454.26 473.66 - 493.42 513.55 534.06 554.96 576.26 597.97 620.63 644.25 / - 13 6 16 1 102.99 113.1 124.89 138.06 152.55 168.29 185.23 203.31 222.44 242.57 263.62 285.58 - 308.35 331.93 356.33 381.53 407.52 434.23 461.71 489.97 519.03 548.9 579.55 610.92 642.98 675.88 709.62 744.12 - 779.38 815.45 852.84 892 931.81 971.98 1012.38 1053.41 / - 13 6 17 1 105.68 124.76 149.08 175.61 203.67 233.47 264.77 297.54 333.01 368.77 407.7 448.27 - 488.78 532.3 577.62 624.06 672.11 722.26 774.43 828.11 883.11 940.62 999.5 1059.61 1122.49 1185.18 1245.36 1299.49 - 1351.76 1404.57 1458.17 1514.34 1571.75 1629.02 1689.56 1749.78 / - 13 6 18 1 119.07 160.11 206.65 255.56 307.41 362.68 421.69 484.62 551.53 622.38 696.55 775.28 - 858.73 946.56 1038.22 1133.37 1228.69 1317.93 1404.56 1495.06 1585.68 1679.48 1776.38 1874.3 1974.29 2074.51 2175.82 2281.54 - 2383.68 2491.86 2601.2 2714.5 2827.17 2941.08 3056.34 3177.97 / - 13 6 19 1 154.12 225.28 306.75 399.19 499.86 610.52 729.22 859.18 1000.16 1149.89 1301.23 1446.83 - 1594.09 1756.66 1915.71 2081.41 2254.35 2439.58 2623.87 2812.51 3004.76 3207.98 3412.34 3626.7 3837.48 4054.54 4276.68 4511.42 - 4746 4979.65 5224.5 5463.39 5716.04 5974.28 6238.33 6505.93 / - 13 6 20 1 216.04 333.32 468.43 654.81 865.51 1103.97 1354.87 1604.46 1869.47 2162.34 2461.22 2759.83 - 3098.33 3429.95 3804.47 4166.44 4545.72 4980.23 5391.66 5814.63 6260.07 6716.89 7195.22 7687.1 8187.21 8697.95 9227.76 9743.45 - 10309.23 10871.58 11449.65 12042.93 12650.17 13273.17 13917.53 14578.39 / - 13 7 1 1 260.64 260.15 260.08 260.21 260.47 260.83 261.27 261.78 262.36 263.01 263.72 264.5 - 265.33 266.23 267.18 268.19 269.26 270.39 271.57 272.82 274.11 275.47 276.88 278.34 279.87 281.44 283.08 284.76 - 286.51 288.31 290.16 292.07 294.03 296.05 298.12 300.25 / - 13 7 2 1 260.55 260.05 259.98 260.11 260.36 260.72 261.15 261.67 262.25 262.9 263.61 264.38 - 265.22 266.11 267.07 268.08 269.15 270.28 271.46 272.71 274 275.36 276.77 278.24 279.76 281.34 282.97 284.66 - 286.4 288.2 290.06 291.97 293.93 295.96 298.03 300.16 / - 13 7 3 1 260.38 259.86 259.79 259.91 260.16 260.52 260.95 261.46 262.05 262.69 263.4 264.18 - 265.01 265.91 266.86 267.88 268.95 270.08 271.26 272.5 273.8 275.16 276.57 278.04 279.56 281.14 282.78 284.47 - 286.22 288.02 289.88 291.79 293.76 295.78 297.86 299.99 / - 13 7 4 1 260.07 259.52 259.43 259.55 259.8 260.15 260.58 261.09 261.67 262.32 263.03 263.8 - 264.64 265.53 266.49 267.5 268.57 269.7 270.89 272.14 273.44 274.8 276.21 277.68 279.21 280.79 282.43 284.13 - 285.88 287.68 289.55 291.46 293.44 295.46 297.55 299.69 / - 13 7 5 1 259.47 258.88 258.77 258.87 259.11 259.46 259.89 260.39 260.97 261.62 262.33 263.1 - 263.94 264.84 265.79 266.81 267.88 269.02 270.21 271.46 272.76 274.13 275.55 277.02 278.56 280.15 281.79 283.49 - 285.25 287.07 288.94 290.86 292.85 294.88 296.98 299.13 / - 13 7 6 1 258.3 257.64 257.49 257.58 257.81 258.14 258.57 259.07 259.65 260.29 261.01 261.78 - 262.62 263.52 264.48 265.5 266.59 267.73 268.93 270.18 271.5 272.87 274.3 275.79 277.34 278.94 280.6 282.32 - 284.09 285.92 287.81 289.75 291.76 293.81 295.93 298.1 / - 13 7 7 1 255.85 254.98 254.71 254.71 254.89 255.19 255.59 256.07 256.64 257.28 257.99 258.77 - 259.62 260.53 261.51 262.54 263.64 264.8 266.03 267.31 268.65 270.06 271.52 273.04 274.63 276.27 277.97 279.73 - 281.54 283.42 285.36 287.35 289.4 291.51 293.68 295.9 / - 13 7 8 1 249.3 246.31 245.62 245.37 245.37 245.59 245.95 246.42 247 247.67 248.42 249.26 - 250.17 251.16 252.22 253.36 254.57 255.84 257.19 258.6 260.03 261.58 263.18 264.86 266.6 268.41 270.28 272.21 - 274.21 276.26 278.38 280.57 282.81 285.12 287.49 289.92 / - 13 7 9 1 235.56 225.65 224.45 223.95 223.89 224.11 224.54 225.13 225.87 226.71 227.7 228.79 - 229.99 231.29 232.68 234.17 235.7 237.36 239.11 240.93 242.84 244.79 246.85 248.98 251.19 253.45 255.8 258.23 - 260.72 263.26 265.89 268.58 271.35 274.16 277.05 280 / - 13 7 10 1 203.3 192.22 190.99 190.7 190.93 191.52 192.39 193.48 194.76 196.23 197.85 199.63 - 201.55 203.6 205.78 208.08 210.5 213.03 215.67 218.41 221.25 224.19 227.22 230.34 233.55 236.82 240.16 243.57 - 247.05 250.6 254.21 257.9 261.63 265.43 269.31 273.22 / - 13 7 11 1 159.59 156.1 155.5 155.89 156.83 158.18 159.84 161.76 163.92 166.29 168.87 171.63 - 174.65 177.77 181.04 184.56 188.11 191.92 195.73 199.64 203.83 207.96 212.38 216.7 221.25 225.74 230.48 235.14 - 239.98 244.91 249.78 254.94 259.95 265.28 270.42 275.63 / - 13 7 12 1 127.04 126.8 128.15 130.26 132.8 135.64 138.73 142.05 145.57 149.27 153.16 157.21 - 161.43 165.94 170.91 175.92 180.94 186.1 191.38 196.83 202.35 208.01 213.78 219.68 225.69 231.82 238.07 244.43 - 250.86 257.39 264.07 270.5 277.37 284.35 291.01 298.18 / - 13 7 13 1 112 115.03 118.31 122.01 126.05 130.33 134.79 139.47 144.36 149.48 154.81 160.35 - 166.08 172.01 178.12 184.43 190.92 197.59 204.43 211.45 218.62 225.96 233.45 241.09 248.87 256.8 264.86 273.85 - 283 292.42 301.62 310.88 320.22 329.64 339.26 348.86 / - 13 7 14 1 108.37 112.68 117.03 121.77 126.96 132.6 138.74 145.33 152.33 159.7 167.41 175.45 - 183.81 192.47 201.44 210.7 220.25 230.08 240.19 250.56 261.2 272.03 283.04 294.24 305.63 317.24 329.04 341.06 - 353.28 365.7 378.34 391.17 404.21 417.45 431.34 446.34 / - 13 7 15 1 104.65 111.3 118.26 125.67 133.84 142.8 152.52 162.94 174.01 185.67 197.9 210.66 - 223.93 237.66 251.84 266.46 281.51 297 312.92 329.28 346.07 363.3 380.96 399.07 417.58 436.4 455.55 475.03 - 494.86 515.07 535.65 556.62 577.99 599.77 621.97 645.15 / - 13 7 16 1 102.95 113.12 124.98 138.21 152.76 168.54 185.51 203.6 222.76 242.91 263.99 285.97 - 308.81 332.43 356.86 382.11 408.14 434.89 462.4 490.68 519.75 549.62 580.27 611.64 643.67 676.51 710.31 744.9 - 780.24 816.33 853.21 891.92 931.86 972.32 1012.97 1053.89 / - 13 7 17 1 105.64 124.79 149.26 175.74 203.84 233.66 264.97 297.73 333.18 368.92 407.82 448.37 - 489.98 532.4 577.72 624.26 672.07 722.09 774.12 827.72 882.59 940.19 999.1 1059.23 1121.27 1184.45 1245.56 1301.34 - 1355.02 1409.98 1465.22 1523.19 1582.48 1641.65 1702.71 1766.35 / - 13 7 18 1 118.97 160.05 206.64 255.65 307.54 362.82 421.82 484.64 551.42 622.16 696.17 774.66 - 857.85 945.38 1036.83 1131.3 1227.68 1317.72 1405.31 1496.81 1588.65 1683.61 1781.58 1880.68 1980.76 2083.53 2186.26 2293.28 - 2397.11 2506.72 2617.55 2732.48 2846.8 2962.35 3079.43 3204.39 / - 13 7 19 1 153.96 225.13 306.3 398.42 499.87 609.04 728.82 858.54 999.14 1148.54 1300.03 1446.26 - 1594.27 1749.36 1917.51 2084.24 2258.16 2444.56 2629.18 2819.98 3013.58 3217.86 3425.83 3644.13 3859.09 4082.09 4306.24 4544.83 - 4786.03 5020.9 5269.77 5512.43 5768.88 6030.92 6298.94 6570.37 / - 13 7 20 1 215.85 333.28 464.77 651.57 860.26 1103.08 1347.06 1601.31 1871.09 2151.03 2448.88 2766.37 - 3106.71 3440.42 3817.39 4181.73 4563.63 4961.52 5415.16 5841.19 6289.48 6745.83 7231.65 7725.35 8238.14 8757.05 9294.87 9819.04 - 10374.26 10963.71 11550.72 12153.14 12769.96 13407.93 14056.83 14727.32 / - 13 8 1 1 262.77 262.14 262.02 262.12 262.35 262.7 263.12 263.63 264.21 264.85 265.56 266.33 - 267.17 268.06 269.01 270.02 271.1 272.22 273.41 274.65 275.95 277.31 278.72 280.19 281.72 283.3 284.94 286.63 - 288.38 290.19 292.05 293.97 295.94 297.96 300.05 302.18 / - 13 8 2 1 262.67 262.04 261.91 262 262.24 262.58 263.01 263.51 264.09 264.73 265.44 266.22 - 267.05 267.94 268.9 269.91 270.98 272.11 273.29 274.54 275.84 277.2 278.61 280.08 281.61 283.19 284.83 286.53 - 288.28 290.08 291.94 293.86 295.83 297.86 299.95 302.09 / - 13 8 3 1 262.5 261.85 261.71 261.8 262.04 262.37 262.8 263.3 263.88 264.52 265.23 266 - 266.84 267.73 268.68 269.7 270.77 271.9 273.09 274.33 275.63 276.99 278.41 279.88 281.41 282.99 284.63 286.33 - 288.08 289.89 291.75 293.67 295.65 297.68 299.77 301.91 / - 13 8 4 1 262.18 261.49 261.34 261.43 261.66 261.99 262.42 262.92 263.49 264.13 264.84 265.61 - 266.45 267.34 268.3 269.31 270.38 271.51 272.7 273.95 275.25 276.61 278.03 279.51 281.04 282.63 284.27 285.97 - 287.73 289.54 291.41 293.33 295.31 297.35 299.44 301.59 / - 13 8 5 1 261.56 260.83 260.66 260.73 260.95 261.28 261.7 262.2 262.77 263.41 264.12 264.89 - 265.72 266.62 267.57 268.59 269.67 270.8 271.99 273.24 274.55 275.92 277.34 278.82 280.36 281.95 283.6 285.31 - 287.08 288.9 290.77 292.71 294.7 296.74 298.84 301 / - 13 8 6 1 260.35 259.55 259.34 259.39 259.6 259.92 260.33 260.83 261.4 262.04 262.74 263.52 - 264.36 265.25 266.21 267.24 268.32 269.46 270.66 271.92 273.24 274.61 276.05 277.54 279.09 280.7 282.36 284.09 - 285.87 287.7 289.6 291.55 293.56 295.63 297.75 299.93 / - 13 8 7 1 257.71 256.61 256.23 256.17 256.31 256.57 256.95 257.43 257.98 258.61 259.32 260.1 - 260.94 261.85 262.83 263.87 264.97 266.14 267.37 268.66 270.01 271.42 272.89 274.42 276.02 277.67 279.38 281.16 - 282.99 284.88 286.83 288.84 290.91 293.03 295.22 297.46 / - 13 8 8 1 250.74 247.24 246.31 246.01 246 246.17 246.52 246.99 247.56 248.24 249 249.84 - 250.77 251.77 252.85 254 255.17 256.47 257.83 259.26 260.76 262.33 263.97 265.67 267.44 269.27 271.17 273.13 - 275.15 277.24 279.4 281.61 283.89 286.23 288.63 291.1 / - 13 8 9 1 236.66 225.59 224.32 223.78 223.71 223.93 224.36 224.96 225.7 226.58 227.59 228.71 - 229.94 231.27 232.7 234.18 235.79 237.49 239.28 241.11 243.06 245.09 247.2 249.38 251.61 253.94 256.35 258.8 - 261.35 263.97 266.65 269.38 272.2 275.09 278.04 281.04 / - 13 8 10 1 203.43 192.11 190.9 190.62 190.87 191.48 192.37 193.48 194.8 196.29 197.94 199.75 - 201.7 203.78 206 208.34 210.8 213.37 216.05 218.84 221.72 224.71 227.79 230.96 234.21 237.56 240.98 244.51 - 248.08 251.71 255.4 259.16 262.98 266.86 270.81 274.82 / - 13 8 11 1 159.52 156.21 155.67 156.08 157.05 158.39 160.07 162.01 164.19 166.59 169.19 172.06 - 175.04 178.19 181.58 185.04 188.74 192.47 196.46 200.42 204.48 208.83 213.1 217.68 222.13 226.83 231.45 236.34 - 241.12 246.1 251.16 256.16 261.46 266.59 272.06 277.33 / - 13 8 12 1 127.21 126.99 128.36 130.49 133.08 135.98 139.11 142.46 146.01 149.75 153.66 157.75 - 162 166.4 171.34 176.44 181.6 186.82 192.14 197.62 203.29 209 214.83 220.78 226.85 233.04 239.35 245.49 - 252.01 258.59 265.28 272.11 279.06 285.71 292.84 300.09 / - 13 8 13 1 112.13 115.22 118.54 122.25 126.32 130.63 135.14 139.86 144.79 149.94 155.31 160.88 - 166.65 172.62 178.77 185.12 191.66 198.37 205.26 212.32 219.54 226.93 234.47 242.16 249.99 257.97 266.09 274.34 - 283.83 293.45 302.79 312.27 321.75 331.24 340.91 350.46 / - 13 8 14 1 108.38 112.84 117.24 122.03 127.25 132.93 139.09 145.71 152.74 160.14 167.89 175.97 - 184.37 193.07 202.08 211.38 220.97 230.85 241.01 251.44 262.12 273.02 284.09 295.34 306.8 318.46 330.33 342.41 - 354.7 367.19 379.89 392.8 405.91 419.22 432.74 446.92 / - 13 8 15 1 104.61 111.36 118.4 125.89 134.1 143.09 152.84 163.29 174.4 186.09 198.36 211.16 - 224.46 238.24 252.48 267.14 282.24 297.77 313.74 330.13 346.96 364.22 381.92 400.06 418.62 437.54 456.77 476.33 - 496.25 516.52 537.18 558.22 579.65 601.49 623.76 646.46 / - 13 8 16 1 102.93 113.15 125.08 138.37 152.97 168.78 185.77 203.89 223.06 243.23 264.34 286.33 - 309.22 332.89 357.35 382.63 408.71 435.51 463.05 491.34 520.42 550.29 580.94 612.29 644.3 677.07 710.81 745.49 - 780.92 817.07 853.96 891.61 931.67 972.36 1013.43 1054.36 / - 13 8 17 1 105.62 124.84 149.34 175.87 204.01 233.84 265.16 297.91 333.33 369.05 407.91 448.43 - 490.37 532.45 577.75 624.26 671.97 721.86 773.74 827.57 881.9 939.52 998.5 1058.66 1120.3 1183.27 1245.37 1302.57 - 1358.03 1415.32 1472.27 1532.06 1593.26 1654.41 1717.32 1782.42 / - 13 8 18 1 118.88 159.94 206.62 255.76 307.66 363 421.94 484.66 551.3 621.91 695.76 773.99 - 856.89 944.13 1035.3 1129.71 1226.45 1317.03 1405.54 1498.33 1591.6 1687.8 1786.94 1887.29 1988.67 2092.93 2197.14 2305.59 - 2411.06 2522.31 2634.71 2751.33 2867.43 2984.74 3103.69 3230.23 / - 13 8 19 1 153.81 224.98 305.56 398.38 498.72 608.97 727.3 856.12 998.05 1147.11 1300.62 1441.12 - 1594.3 1750.15 1919.22 2086.92 2261.88 2449.51 2638.7 2827.54 3022.17 3227.61 3437.92 3651.69 3875.54 4103.66 4331.44 4566.3 - 4820.36 5059.81 5313.15 5560.48 5821.34 6087.48 6347.03 6636.06 / - 13 8 20 1 215.68 333.27 459.3 645.47 855.04 1095.81 1346.37 1596.64 1865.84 2154.19 2453.74 2773.23 - 3115.49 3451.49 3800.3 4199.61 4582.52 4983.25 5440.01 5869.26 6320.66 6776.52 7265.56 7766.97 8263.34 8810.46 9357.41 9891.06 - 10455.25 11034.72 11651.3 12263.77 12891.02 13539.13 14172.7 14880.77 / - 13 9 1 1 264.88 264.12 263.95 264.01 264.23 264.56 264.98 265.48 266.05 266.69 267.39 268.16 - 268.99 269.89 270.84 271.85 272.92 274.05 275.24 276.48 277.79 279.15 280.56 282.04 283.57 285.15 286.8 288.5 - 290.25 292.06 293.93 295.85 297.83 299.86 301.96 304.1 / - 13 9 2 1 264.78 264.02 263.83 263.9 264.12 264.44 264.86 265.36 265.93 266.57 267.27 268.04 - 268.87 269.77 270.72 271.73 272.8 273.93 275.12 276.37 277.67 279.03 280.45 281.92 283.45 285.04 286.68 288.38 - 290.14 291.95 293.82 295.74 297.72 299.76 301.85 304 / - 13 9 3 1 264.6 263.82 263.63 263.69 263.91 264.23 264.65 265.14 265.71 266.35 267.05 267.82 - 268.65 269.55 270.5 271.51 272.58 273.71 274.9 276.15 277.45 278.81 280.23 281.71 283.24 284.83 286.47 288.18 - 289.94 291.75 293.62 295.55 297.53 299.57 301.66 303.81 / - 13 9 4 1 264.27 263.46 263.25 263.31 263.52 263.84 264.25 264.74 265.31 265.95 266.65 267.42 - 268.25 269.14 270.1 271.11 272.18 273.31 274.5 275.75 277.06 278.42 279.84 281.32 282.86 284.45 286.1 287.8 - 289.57 291.38 293.26 295.19 297.18 299.22 301.32 303.48 / - 13 9 5 1 263.64 262.77 262.54 262.58 262.78 263.1 263.5 263.99 264.56 265.2 265.9 266.67 - 267.5 268.39 269.35 270.36 271.44 272.57 273.77 275.02 276.33 277.7 279.12 280.61 282.15 283.75 285.4 287.12 - 288.89 290.71 292.6 294.54 296.53 298.59 300.7 302.87 / - 13 9 6 1 262.39 261.45 261.18 261.19 261.38 261.68 262.08 262.57 263.13 263.77 264.47 265.24 - 266.08 266.97 267.93 268.95 270.04 271.18 272.38 273.64 274.96 276.34 277.78 279.27 280.83 282.44 284.11 285.84 - 287.62 289.47 291.37 293.33 295.35 297.42 299.55 301.74 / - 13 9 7 1 259.51 258.16 257.67 257.54 257.62 257.86 258.22 258.67 259.21 259.84 260.54 261.31 - 262.15 263.06 264.04 265.09 266.19 267.36 268.6 269.9 271.26 272.68 274.16 275.7 277.31 278.98 280.7 282.49 - 284.34 286.25 288.21 290.24 292.33 294.47 296.68 298.95 / - 13 9 8 1 252.14 247.93 246.89 246.53 246.48 246.63 246.97 247.43 248.01 248.68 249.45 250.3 - 251.24 252.25 253.3 254.47 255.71 257.03 258.41 259.87 261.39 262.99 264.65 266.38 268.18 270.04 271.97 273.96 - 276.02 278.15 280.34 282.59 284.9 287.28 289.69 292.19 / - 13 9 9 1 237.74 225.46 224.14 223.56 223.48 223.7 224.14 224.76 225.51 226.42 227.45 228.59 - 229.85 231.21 232.67 234.19 235.83 237.57 239.39 241.26 243.26 245.33 247.49 249.69 252 254.39 256.82 259.36 - 261.96 264.64 267.36 270.17 273.05 275.98 278.99 282.06 / - 13 9 10 1 203.48 192.01 190.81 190.55 190.82 191.45 192.36 193.49 194.83 196.35 198.03 199.87 - 201.85 203.97 206.23 208.61 211.1 213.72 216.44 219.27 222.2 225.23 228.36 231.58 234.89 238.08 241.55 245.1 - 248.72 252.43 256.24 260.11 264.02 267.98 272 276.08 / - 13 9 11 1 159.62 156.31 155.79 156.24 157.23 158.63 160.3 162.26 164.47 166.95 169.58 172.41 - 175.42 178.69 182.03 185.62 189.26 193.15 197.03 201.03 205.3 209.52 214.03 218.44 223.17 227.76 232.6 237.36 - 242.38 247.29 252.41 257.6 262.73 268.17 273.44 279.04 / - 13 9 12 1 127.37 127.19 128.57 130.78 133.4 136.33 139.5 142.88 146.46 150.22 154.17 158.29 - 162.57 167.01 171.68 177 182.2 187.51 192.89 198.4 204.07 209.81 215.68 221.67 227.79 234.02 240.37 246.83 - 253.41 260.06 266.53 273.37 280.37 287.47 294.68 301.56 / - 13 9 13 1 112.27 115.45 118.84 122.57 126.65 130.99 135.53 140.27 145.23 150.41 155.82 161.43 - 167.23 173.23 179.43 185.82 192.39 199.15 206.08 213.18 220.45 227.89 235.47 243.21 251.1 259.13 267.31 275.61 - 284.62 294.08 303.64 313.41 322.9 332.59 342.3 352.18 / - 13 9 14 1 108.41 113.04 117.51 122.34 127.59 133.29 139.46 146.11 153.16 160.59 168.37 176.49 - 184.92 193.67 202.71 212.06 221.69 231.61 241.81 252.29 263.03 273.98 285.11 296.43 307.95 319.67 331.6 343.74 - 356.09 368.65 381.42 394.4 407.58 420.96 434.55 448.35 / - 13 9 15 1 104.61 111.46 118.59 126.15 134.39 143.4 153.17 163.64 174.77 186.51 198.8 211.64 - 224.98 238.8 253.08 267.8 282.95 298.52 314.52 330.95 347.81 365.1 382.83 401 419.6 438.59 457.91 477.56 - 497.56 517.91 538.63 559.74 581.24 603.15 625.47 648.22 / - 13 9 16 1 102.94 113.23 125.23 138.57 153.19 169.02 186.03 204.16 223.34 243.53 264.66 286.67 - 309.57 333.3 357.8 383.11 409.21 436.07 463.63 491.95 521.03 550.9 581.54 612.88 644.87 677.56 711.21 745.84 - 781.38 817.61 854.55 892.21 931.19 972.01 1013.35 1054.27 / - 13 9 17 1 105.6 124.89 149.42 176.14 204.17 234.02 265.34 298.6 333.47 369.16 407.97 448.46 - 490.59 532.44 577.72 624.21 671.89 721.56 773.29 826.94 881.1 938.56 997.64 1057.87 1119.01 1182.38 1244.73 1303.66 - 1361.28 1420.1 1479.45 1540.67 1603.38 1665.79 1729.99 1796.2 / - 13 9 18 1 118.78 159.85 206.55 255.8 307.77 363.1 422.07 484.66 551.16 621.61 695.31 773.28 - 855.89 942.79 1033.66 1127.86 1224.96 1316.05 1405.09 1498.25 1592.56 1689.43 1791.25 1893.55 1996.72 2102.75 2208.56 2318.57 - 2425.79 2538.73 2652.88 2768.61 2889.21 3008.46 3129.41 3257.61 / - 13 9 19 1 153.65 224.85 305.19 397.45 498.74 607.46 726.9 855.43 993.63 1145.61 1293.95 1440.34 - 1595.74 1750.93 1920.94 2089.62 2265.68 2445.62 2645.02 2835.25 3035.06 3237.04 3449.71 3665.86 3891.56 4121.74 4351.9 4590.32 - 4849.14 5093.92 5352.24 5604.61 5870.75 6141.62 6406.04 6700.66 / - 13 9 20 1 215.5 333.3 457.49 642.41 850.43 1088.56 1339.71 1591.99 1863.06 2157.51 2458.95 2780.47 - 3102.23 3463.27 3814.67 4217.54 4602.59 5006.32 5420.31 5899.09 6353.91 6813.44 7301.8 7808.7 8311.93 8863.04 9398.93 9956.42 - 10530.56 11120.81 11748.68 12372.41 13011.14 13670.6 14316.77 15036.85 / - 13 10 1 1 266.97 266.1 265.87 265.91 266.11 266.42 266.83 267.32 267.89 268.52 269.22 269.99 - 270.82 271.71 272.66 273.67 274.74 275.87 277.06 278.31 279.61 280.97 282.39 283.87 285.4 286.99 288.64 290.35 - 292.11 293.92 295.8 297.73 299.71 301.75 303.85 306.01 / - 13 10 2 1 266.87 265.99 265.75 265.79 265.99 266.3 266.71 267.2 267.76 268.4 269.1 269.86 - 270.69 271.58 272.53 273.55 274.62 275.75 276.94 278.18 279.49 280.85 282.27 283.75 285.28 286.87 288.52 290.23 - 291.99 293.81 295.68 297.61 299.6 301.64 303.74 305.9 / - 13 10 3 1 266.69 265.79 265.54 265.58 265.77 266.08 266.49 266.97 267.54 268.17 268.87 269.64 - 270.46 271.36 272.31 273.32 274.39 275.52 276.71 277.96 279.26 280.63 282.05 283.53 285.06 286.66 288.31 290.01 - 291.78 293.6 295.47 297.41 299.4 301.44 303.55 305.7 / - 13 10 4 1 266.35 265.41 265.16 265.18 265.37 265.67 266.07 266.56 267.12 267.75 268.45 269.22 - 270.05 270.94 271.89 272.9 273.97 275.11 276.3 277.55 278.85 280.22 281.64 283.12 284.66 286.26 287.91 289.62 - 291.39 293.22 295.1 297.04 299.03 301.08 303.19 305.35 / - 13 10 5 1 265.7 264.71 264.42 264.43 264.61 264.9 265.3 265.78 266.34 266.97 267.67 268.44 - 269.27 270.16 271.11 272.13 273.2 274.34 275.53 276.78 278.1 279.47 280.89 282.38 283.93 285.53 287.19 288.91 - 290.68 292.52 294.41 296.35 298.36 300.42 302.54 304.71 / - 13 10 6 1 264.42 263.33 263 262.98 263.15 263.43 263.82 264.3 264.86 265.49 266.19 266.95 - 267.79 268.68 269.64 270.66 271.74 272.88 274.08 275.35 276.67 278.05 279.49 280.99 282.55 284.17 285.84 287.57 - 289.37 291.22 293.13 295.09 297.12 299.2 301.34 303.54 / - 13 10 7 1 261.23 259.63 259.01 258.79 258.83 259.03 259.36 259.79 260.32 260.93 261.63 262.39 - 263.24 264.15 265.13 266.18 267.29 268.47 269.71 271.02 272.39 273.83 275.32 276.88 278.5 280.18 281.92 283.73 - 285.59 287.52 289.51 291.55 293.66 295.83 298.06 300.35 / - 13 10 8 1 253.48 248.5 247.28 246.88 246.81 246.95 247.27 247.72 248.29 248.97 249.74 250.6 - 251.55 252.58 253.69 254.88 256.15 257.48 258.9 260.38 261.91 263.53 265.22 266.99 268.82 270.72 272.68 274.71 - 276.81 278.97 281.2 283.49 285.81 288.23 290.71 293.26 / - 13 10 9 1 238.35 225.24 223.82 223.29 223.22 223.45 223.91 224.55 225.32 226.25 227.31 228.48 - 229.77 231.17 232.63 234.21 235.9 237.68 239.55 241.46 243.5 245.63 247.83 250.07 252.43 254.86 257.33 259.91 - 262.57 265.27 268.07 270.94 273.88 276.87 279.94 283.08 / - 13 10 10 1 203.49 191.91 190.73 190.48 190.77 191.42 192.35 193.51 194.87 196.42 198.13 200 - 202.01 204.17 206.46 208.78 211.31 213.96 216.71 219.58 222.54 225.61 228.78 232.03 235.38 238.82 242.34 245.94 - 249.62 253.39 257.22 261.13 265.12 269.22 273.38 277.57 / - 13 10 11 1 159.57 156.41 155.93 156.4 157.42 158.83 160.56 162.55 164.79 167.24 169.9 172.76 - 175.88 179.1 182.57 186.1 189.89 193.69 197.62 201.8 205.95 210.39 214.75 219.42 223.97 228.85 233.58 238.57 - 243.46 248.62 253.66 258.92 264.25 269.51 275.09 280.48 / - 13 10 12 1 127.54 127.4 128.83 131.07 133.73 136.69 139.88 143.3 146.91 150.71 154.68 158.83 - 163.15 167.62 172.24 177.45 182.81 188.12 193.55 199.2 204.9 210.63 216.53 222.57 228.72 234.99 241.39 247.9 - 254.52 261.26 268.07 274.98 282.05 288.83 296.1 303.48 / - 13 10 13 1 112.43 115.72 119.16 122.9 127 131.36 135.93 140.71 145.7 150.91 156.35 161.99 - 167.83 173.86 180.09 186.52 193.13 199.93 206.9 214.05 221.36 228.84 236.47 244.26 252.2 260.29 268.51 276.87 - 285.37 294.9 304.6 314.37 324.08 333.78 343.81 353.88 / - 13 10 14 1 108.48 113.27 117.8 122.66 127.94 133.67 139.85 146.52 153.6 161.05 168.86 177.01 - 185.48 194.26 203.34 212.72 222.39 232.35 242.58 253.1 263.89 274.91 286.11 297.49 309.06 320.85 332.84 345.04 - 357.46 370.08 382.91 395.96 409.21 422.66 436.33 450.2 / - 13 10 15 1 104.62 111.6 118.81 126.41 134.68 143.72 153.51 163.99 175.15 186.92 199.24 212.1 - 225.48 239.33 253.65 268.42 283.62 299.23 315.27 331.73 348.62 365.94 383.69 401.88 420.51 439.55 458.96 478.7 - 498.77 519.2 540 561.17 582.74 604.71 627.08 649.89 / - 13 10 16 1 102.96 113.34 125.39 138.76 153.41 169.25 186.27 204.41 223.6 243.79 264.94 286.98 - 309.89 333.65 358.19 383.52 409.65 436.54 464.15 492.48 521.57 551.43 582.06 613.38 645.34 677.96 711.52 746.05 - 781.52 817.86 854.89 892.6 931 970.69 1012.22 1054.06 / - 13 10 17 1 105.6 124.94 149.59 176.24 204.33 234.18 265.48 298.92 333.57 370.18 407.97 448.44 - 490.51 532.33 577.61 624.22 671.66 721.18 772.73 826.2 880.16 937.41 996.43 1056.78 1118.03 1180.42 1244.2 1304.24 - 1363.68 1424.02 1484.83 1547.64 1611.79 1675.72 1742.43 1809.39 / - 13 10 18 1 118.68 159.77 206.51 255.81 307.92 363.19 422.12 484.63 550.98 621.26 694.83 772.53 - 854.82 941.36 1031.88 1125.83 1223.13 1316.76 1404.33 1498.06 1592.96 1690.48 1792.97 1896.28 2001.15 2109.3 2217.71 2330.29 - 2439.94 2555.19 2671.69 2789.58 2912.34 3033.66 3156.85 3286.82 / - 13 10 19 1 153.5 224.72 304.73 396.52 497.55 607.41 724.64 853.76 992.47 1139.55 1292.37 1439.49 - 1595.64 1751.72 1922.67 2092.82 2269.59 2450.83 2651.56 2843.3 3045.36 3246.97 3461.94 3680.57 3905.56 4140.4 4372.83 4613.19 - 4864.55 5122.08 5384.92 5642.84 5914.92 6191.42 6461.17 6747.57 / - 13 10 20 1 215.34 333.38 457.54 638.32 846 1081.34 1332.25 1592.47 1860.57 2149.11 2451.09 2772.76 - 3112.28 3475.75 3830.03 4235.89 4623.96 5030.95 5448.4 5930.96 6389.41 6852.92 7340.76 7853.52 8363.95 8897.17 9459.69 10010.93 - 10601.26 11198.37 11814.19 12469.35 13120.69 13794.08 14455.95 15161.16 / - 13 11 1 1 269.02 268.05 267.78 267.79 267.97 268.27 268.67 269.16 269.71 270.35 271.04 271.81 - 272.63 273.52 274.47 275.48 276.55 277.68 278.87 280.12 281.43 282.79 284.21 285.69 287.23 288.82 290.48 292.18 - 293.95 295.77 297.65 299.59 301.58 303.63 305.74 307.9 / - 13 11 2 1 268.92 267.94 267.66 267.67 267.85 268.15 268.55 269.03 269.59 270.22 270.91 271.68 - 272.5 273.39 274.34 275.35 276.42 277.56 278.74 279.99 281.3 282.66 284.09 285.57 287.1 288.7 290.35 292.06 - 293.83 295.65 297.53 299.47 301.46 303.51 305.62 307.78 / - 13 11 3 1 268.73 267.74 267.44 267.45 267.62 267.92 268.32 268.8 269.35 269.98 270.68 271.44 - 272.27 273.16 274.11 275.12 276.19 277.32 278.51 279.76 281.07 282.43 283.86 285.34 286.88 288.47 290.13 291.84 - 293.61 295.43 297.31 299.25 301.25 303.3 305.41 307.58 / - 13 11 4 1 268.39 267.35 267.04 267.04 267.21 267.5 267.89 268.37 268.92 269.55 270.25 271.01 - 271.83 272.72 273.67 274.68 275.76 276.89 278.08 279.33 280.64 282.01 283.43 284.92 286.46 288.06 289.72 291.43 - 293.2 295.03 296.92 298.86 300.87 302.92 305.04 307.21 / - 13 11 5 1 267.72 266.62 266.28 266.26 266.42 266.7 267.09 267.56 268.11 268.74 269.43 270.19 - 271.02 271.91 272.86 273.88 274.95 276.08 277.28 278.53 279.85 281.22 282.65 284.14 285.69 287.3 288.96 290.68 - 292.46 294.3 296.2 298.15 300.16 302.23 304.36 306.54 / - 13 11 6 1 266.4 265.18 264.78 264.72 264.85 265.12 265.49 265.96 266.51 267.13 267.82 268.58 - 269.41 270.3 271.26 272.28 273.36 274.5 275.7 276.97 278.29 279.68 281.12 282.62 284.19 285.81 287.49 289.23 - 291.03 292.89 294.8 296.78 298.81 300.9 303.05 305.26 / - 13 11 7 1 262.87 260.99 260.15 259.88 259.87 260.04 260.34 260.76 261.28 261.89 262.58 263.36 - 264.21 265.13 266.11 267.17 268.29 269.48 270.73 272.05 273.43 274.88 276.39 277.97 279.6 281.3 283.06 284.86 - 286.75 288.7 290.71 292.78 294.91 297.1 299.36 301.67 / - 13 11 8 1 254.73 248.84 247.59 247.1 246.99 247.12 247.42 247.87 248.44 249.12 249.9 250.78 - 251.74 252.79 253.92 255.13 256.42 257.77 259.21 260.73 262.32 263.97 265.7 267.48 269.35 271.29 273.29 275.37 - 277.48 279.69 281.96 284.29 286.69 289.16 291.68 294.26 / - 13 11 9 1 239.34 224.82 223.5 222.99 222.93 223.18 223.65 224.31 225.13 226.09 227.15 228.36 - 229.68 231.12 232.65 234.24 235.98 237.8 239.72 241.68 243.77 245.95 248.21 250.5 252.92 255.41 257.95 260.58 - 263.3 266.08 268.9 271.83 274.81 277.84 280.96 284.13 / - 13 11 10 1 203.44 191.82 190.65 190.42 190.73 191.39 192.34 193.53 194.91 196.49 198.23 200.07 - 202.11 204.29 206.61 209.06 211.63 214.31 217.11 220.02 223.04 226.15 229.37 232.68 236.08 239.57 243.14 246.8 - 250.54 254.36 258.25 262.23 266.27 270.39 274.58 278.84 / - 13 11 11 1 159.68 156.5 156.06 156.59 157.63 159.04 160.79 162.8 165.06 167.54 170.28 173.18 - 176.26 179.6 183.01 186.58 190.4 194.24 198.34 202.42 206.78 211.08 215.68 220.18 225.01 229.7 234.74 239.6 - 244.54 249.75 255.07 260.24 265.63 271.1 276.49 282.22 / - 13 11 12 1 127.71 127.63 129.08 131.36 134.06 137.05 140.28 143.72 147.36 151.19 155.2 159.38 - 163.73 168.23 172.89 177.69 183.3 188.76 194.28 199.9 205.72 211.49 217.57 223.66 229.87 236.21 242.66 249.23 - 255.92 262.42 269.32 276.29 283.36 290.6 297.94 304.96 / - 13 11 13 1 112.62 116.01 119.5 123.24 127.36 131.74 136.35 141.16 146.18 151.42 156.89 162.57 - 168.44 174.5 180.77 187.23 193.88 200.71 207.72 214.91 222.26 229.79 237.47 245.3 253.29 261.43 269.7 278.12 - 286.67 295.36 305.12 315.06 325.06 335 345.24 355.18 / - 13 11 14 1 108.58 113.54 118.09 122.99 128.29 134.05 140.25 146.93 154.04 161.53 169.36 177.54 - 186.04 194.85 203.96 213.37 223.08 233.07 243.34 253.89 264.72 275.8 287.06 298.51 310.14 321.99 334.04 346.31 - 358.78 371.47 384.37 397.48 410.79 424.32 438.06 452 / - 13 11 15 1 104.67 111.77 119.04 126.68 134.98 144.04 153.84 164.35 175.52 187.32 199.66 212.55 - 225.95 239.84 254.18 268.99 284.23 299.89 315.97 332.46 349.37 366.72 384.49 402.69 421.33 440.4 459.87 479.7 - 499.86 520.37 541.24 562.48 584.11 606.14 628.57 651.42 / - 13 11 16 1 103 113.47 125.55 138.95 153.62 169.49 186.51 204.65 223.85 244.04 265.19 287.25 - 310.16 333.93 358.52 383.86 410 436.92 464.57 492.92 522.02 551.86 582.47 613.78 645.7 678.26 711.7 746.11 - 781.46 817.74 854.88 892.67 931.11 970.21 1011.26 1052.64 / - 13 11 17 1 105.62 125.01 149.64 176.33 204.82 234.29 265.58 299.28 333.62 369.87 407.92 448.33 - 490.36 532.12 577.4 623.99 671.42 720.7 772.07 825.33 879.45 936.09 994.88 1055.29 1116.69 1178.61 1242.46 1301.36 - 1358.18 1414.97 1472.24 1531.25 1592.06 1651.72 1717.21 1777.73 / - 13 11 18 1 118.59 159.67 206.4 255.8 307.99 363.27 422.11 484.58 550.77 620.87 694.18 771.72 - 853.38 939.83 1029.97 1123.63 1220.85 1315.23 1405.29 1497.75 1593.98 1693.63 1794.7 1898.79 2004.45 2112.06 2222.77 2336.87 - 2448.5 2566.19 2685.66 2806.81 2932.74 3057.15 3183.27 3316.28 / - 13 11 19 1 153.35 224.62 303.84 396.51 497.54 605.94 724.17 852.02 991.26 1137.91 1290.84 1438.68 - 1595.59 1752.56 1917.55 2098.12 2273.72 2456.34 2658.45 2851.86 3055.5 3259.01 3474.2 3695.5 3923.15 4160.18 4395.06 4637.46 - 4891.06 5151.04 5416.36 5677.03 5952.58 6233.83 6509.11 6801.96 / - 13 11 20 1 215.21 333.53 457.79 633 837.01 1074.19 1324.51 1585.82 1858.36 2153 2456.98 2780.89 - 3123.2 3463.64 3846.62 4224.96 4646.99 5057.39 5478.62 5922.42 6427.76 6895.42 7387.26 7894.32 8414.61 8957.66 9525.1 10081.62 - 10658.21 11279.13 11900.29 12539.77 13218.69 13898.13 14568.07 15283.28 / - 13 12 1 1 271.02 269.98 269.67 269.66 269.83 270.12 270.51 270.98 271.54 272.16 272.86 273.62 - 274.44 275.33 276.28 277.29 278.36 279.49 280.68 281.92 283.23 284.6 286.02 287.5 289.04 290.64 292.3 294.01 - 295.78 297.61 299.49 301.44 303.43 305.49 307.6 309.77 / - 13 12 2 1 270.92 269.87 269.55 269.53 269.7 269.99 270.38 270.85 271.4 272.03 272.72 273.48 - 274.31 275.19 276.14 277.15 278.22 279.35 280.54 281.79 283.1 284.46 285.89 287.37 288.91 290.51 292.17 293.88 - 295.65 297.48 299.37 301.31 303.31 305.37 307.48 309.66 / - 13 12 3 1 270.73 269.66 269.33 269.31 269.47 269.75 270.14 270.61 271.16 271.79 272.48 273.24 - 274.06 274.95 275.9 276.91 277.98 279.11 280.3 281.55 282.86 284.22 285.65 287.13 288.68 290.27 291.93 293.65 - 295.42 297.25 299.14 301.09 303.09 305.15 307.27 309.44 / - 13 12 4 1 270.38 269.26 268.91 268.88 269.03 269.31 269.7 270.17 270.72 271.34 272.03 272.79 - 273.61 274.5 275.44 276.45 277.53 278.66 279.85 281.1 282.41 283.78 285.21 286.69 288.24 289.84 291.5 293.22 - 295 296.84 298.73 300.68 302.69 304.75 306.88 309.06 / - 13 12 5 1 269.7 268.51 268.13 268.07 268.21 268.48 268.86 269.33 269.87 270.49 271.18 271.94 - 272.76 273.65 274.6 275.61 276.68 277.82 279.01 280.27 281.58 282.96 284.39 285.88 287.43 289.04 290.71 292.44 - 294.22 296.07 297.97 299.93 301.95 304.03 306.16 308.35 / - 13 12 6 1 268.28 266.91 266.44 266.33 266.43 266.67 267.03 267.48 268.02 268.63 269.32 270.07 - 270.9 271.79 272.74 273.76 274.84 275.99 277.19 278.46 279.79 281.18 282.63 284.14 285.71 287.33 289.02 290.77 - 292.58 294.45 296.38 298.36 300.41 302.51 304.67 306.9 / - 13 12 7 1 264.39 262.22 261.12 260.78 260.73 260.87 261.16 261.56 262.07 262.67 263.36 264.13 - 264.98 265.9 266.89 267.95 269.08 270.28 271.55 272.88 274.28 275.74 277.27 278.87 280.52 282.24 284.03 285.88 - 287.78 289.76 291.79 293.89 296.04 298.26 300.55 302.89 / - 13 12 8 1 255.89 249.08 247.71 247.13 246.99 247.1 247.4 247.85 248.43 249.12 249.91 250.8 - 251.79 252.86 253.98 255.22 256.54 257.93 259.41 260.95 262.58 264.27 266.04 267.86 269.77 271.74 273.79 275.91 - 278.08 280.33 282.65 285.03 287.48 289.99 292.57 295.22 / - 13 12 9 1 239.69 224.43 223.13 222.64 222.6 222.87 223.37 224.06 224.9 225.89 227.02 228.26 - 229.59 231.06 232.63 234.31 236.09 237.92 239.88 241.94 244.04 246.27 248.58 250.98 253.41 255.97 258.61 261.27 - 264.06 266.91 269.8 272.8 275.86 278.96 282.16 285.42 / - 13 12 10 1 203.34 191.74 190.57 190.36 190.68 191.37 192.34 193.55 194.92 196.51 198.28 200.2 - 202.28 204.5 206.77 209.24 211.84 214.56 217.4 220.34 223.39 226.55 229.8 233.15 236.59 240.12 243.74 247.44 - 251.23 255.1 259.04 263.06 267.16 271.33 275.57 279.88 / - 13 12 11 1 159.65 156.59 156.23 156.75 157.81 159.28 161.01 163.05 165.33 167.89 170.6 173.53 - 176.72 180.01 183.45 187.16 190.91 194.92 198.92 203.19 207.43 211.96 216.41 221.17 225.82 230.8 235.63 240.82 - 245.82 250.89 256.25 261.71 267.02 272.55 278.16 283.68 / - 13 12 12 1 127.89 127.85 129.35 131.67 134.4 137.42 140.68 144.15 147.82 151.68 155.72 159.93 - 164.31 168.85 173.54 178.38 183.65 189.39 195.01 200.67 206.45 212.36 218.42 224.55 230.8 237.18 243.68 250.3 - 257.03 263.89 270.86 277.59 284.72 291.96 299.36 306.88 / - 13 12 13 1 112.85 116.32 119.85 123.61 127.74 132.14 136.78 141.62 146.67 151.94 157.44 163.15 - 169.06 175.16 181.45 187.95 194.63 201.5 208.54 215.77 223.16 230.73 238.45 246.33 254.36 262.55 270.87 279.34 - 287.95 296.7 305.57 315.57 326.06 335.99 346.16 356.64 / - 13 12 14 1 108.74 113.81 118.41 123.33 128.66 134.43 140.66 147.36 154.48 161.99 169.86 178.07 - 186.6 195.44 204.58 214.02 223.75 233.77 244.07 254.65 265.5 276.63 287.96 299.47 311.17 323.08 335.19 347.52 - 360.05 372.8 385.76 398.93 412.32 425.91 439.71 453.73 / - 13 12 15 1 104.77 111.97 119.28 126.97 135.29 144.36 154.18 164.7 175.89 187.71 200.08 212.99 - 226.41 240.31 254.68 269.5 284.77 300.48 316.59 333.11 350.05 367.41 385.2 403.41 422.05 441.11 460.61 480.52 - 500.77 521.36 542.31 563.63 585.32 607.4 629.88 652.78 / - 13 12 16 1 103.08 113.61 125.73 139.15 153.83 169.71 186.74 204.88 224.07 244.25 265.39 287.45 - 310.38 334.15 358.75 384.12 410.25 437.17 464.84 493.23 522.33 552.16 582.75 614.03 645.92 678.41 711.77 746.07 - 781.29 817.41 854.45 892.34 930.9 970.04 1009.75 1051.35 / - 13 12 17 1 105.67 125.05 149.69 176.41 204.9 234.37 265.63 299.31 333.62 370.58 407.79 448.12 - 490.11 531.78 577.03 623.62 671 720.15 771.33 824.38 878.32 934.63 993.15 1053.34 1114.92 1177.09 1240.3 1300.15 - 1358.26 1416.12 1473.95 1534.2 1595.43 1656.92 1723.52 1785.01 / - 13 12 18 1 118.5 159.56 206.36 255.77 308.02 363.28 422.06 484.47 550.49 620.39 693.59 770.91 - 852.22 938.26 1027.97 1121.27 1218.42 1313.1 1403.74 1496.64 1594.27 1694.36 1795.83 1900.74 2007.29 2115.88 2227.57 2342.85 - 2458.42 2574.27 2694.94 2817.43 2942.44 3072.36 3201.58 3338.22 / - 13 12 19 1 153.21 224.54 303.53 395.61 496.32 605.89 721.95 851.22 988.1 1136.21 1289.27 1437.85 - 1589.16 1753.53 1919.53 2101.22 2278.23 2462.28 2650.89 2860.96 3066.41 3271.88 3487.34 3711.57 3941.98 4173.9 4418.75 4663.56 - 4919.41 5172.07 5449.94 5713.48 5992.28 6276.18 6554.47 6850.45 / - 13 12 20 1 215.09 333.79 458.48 626.05 832.05 1067.19 1317.62 1577.84 1853.91 2149.07 2463.51 2789.93 - 3116.46 3478.49 3864.55 4246.22 4672.32 5086.17 5511.3 5959.14 6469.38 6941.4 7437.71 7949.49 8469.69 9017.56 9580.81 10159.45 - 10739.64 11346.12 11993.07 12638.58 13302.15 14010.49 14687.66 15409.75 / - 13 13 1 1 272.97 271.88 271.54 271.51 271.66 271.94 272.33 272.8 273.34 273.97 274.66 275.41 - 276.23 277.12 278.07 279.08 280.15 281.28 282.47 283.72 285.02 286.39 287.82 289.3 290.85 292.45 294.11 295.82 - 297.6 299.43 301.32 303.27 305.27 307.34 309.46 311.63 / - 13 13 2 1 272.86 271.76 271.41 271.38 271.53 271.81 272.19 272.66 273.21 273.83 274.52 275.27 - 276.1 276.98 277.93 278.94 280.01 281.14 282.33 283.58 284.89 286.25 287.68 289.16 290.71 292.31 293.97 295.69 - 297.46 299.3 301.19 303.14 305.14 307.21 309.33 311.51 / - 13 13 3 1 272.67 271.54 271.18 271.15 271.29 271.57 271.95 272.41 272.96 273.58 274.26 275.02 - 275.84 276.73 277.67 278.68 279.75 280.88 282.07 283.32 284.63 286 287.43 288.91 290.46 292.06 293.72 295.44 - 297.22 299.06 300.95 302.9 304.91 306.98 309.1 311.28 / - 13 13 4 1 272.31 271.14 270.76 270.7 270.84 271.11 271.49 271.95 272.49 273.11 273.79 274.55 - 275.37 276.25 277.2 278.21 279.28 280.41 281.6 282.85 284.17 285.54 286.97 288.46 290 291.61 293.27 295 - 296.78 298.62 300.52 302.47 304.49 306.56 308.69 310.88 / - 13 13 5 1 271.61 270.36 269.94 269.86 269.99 270.24 270.61 271.07 271.61 272.22 272.91 273.66 - 274.48 275.36 276.31 277.32 278.4 279.53 280.72 281.98 283.3 284.67 286.11 287.6 289.16 290.77 292.44 294.17 - 295.96 297.81 299.72 301.69 303.71 305.8 307.94 310.14 / - 13 13 6 1 270.02 268.51 267.95 267.79 267.85 268.07 268.4 268.84 269.36 269.96 270.64 271.4 - 272.22 273.1 274.06 275.08 276.16 277.31 278.52 279.79 281.13 282.52 283.98 285.5 287.08 288.72 290.42 292.18 - 294 295.88 297.82 299.82 301.88 304 306.18 308.42 / - 13 13 7 1 265.76 263.16 261.87 261.47 261.38 261.49 261.76 262.16 262.66 263.26 263.95 264.73 - 265.58 266.51 267.51 268.58 269.73 270.94 272.22 273.58 274.99 276.48 278.03 279.65 281.33 283.07 284.88 286.75 - 288.69 290.69 292.76 294.88 297.07 299.32 301.63 304.01 / - 13 13 8 1 256.94 249.08 247.57 247 246.82 246.91 247.2 247.65 248.23 248.93 249.73 250.64 - 251.65 252.74 253.92 255.19 256.51 257.94 259.44 261.03 262.69 264.43 266.24 268.12 270.05 272.08 274.17 276.34 - 278.58 280.88 283.26 285.67 288.18 290.75 293.39 296.09 / - 13 13 9 1 240.45 223.81 222.61 222.17 222.2 222.52 223.06 223.79 224.68 225.7 226.86 228.12 - 229.52 231.03 232.63 234.35 236.15 238.07 240.08 242.15 244.35 246.63 248.96 251.42 253.96 256.53 259.23 262.01 - 264.82 267.75 270.75 273.78 276.92 280.14 283.38 286.73 / - 13 13 10 1 203.18 191.65 190.5 190.31 190.64 191.35 192.34 193.54 194.97 196.59 198.33 200.28 - 202.38 204.63 207.01 209.51 212.15 214.9 217.78 220.77 223.86 227.06 230.37 233.79 237.28 240.86 244.54 248.31 - 252.15 256.1 260.1 264.18 268.34 272.58 276.88 281.26 / - 13 13 11 1 159.76 156.74 156.36 156.91 158 159.48 161.27 163.34 165.64 168.18 170.93 173.95 - 177.1 180.41 184 187.64 191.54 195.45 199.65 203.81 208.26 212.65 217.34 221.94 226.86 231.65 236.79 241.75 - 246.8 252.24 257.45 262.96 268.32 274 279.68 285.44 / - 13 13 12 1 128.06 128.09 129.62 131.98 134.75 137.8 141.1 144.6 148.3 152.19 156.26 160.5 - 164.9 169.47 174.19 179.06 184.08 189.77 195.6 201.32 207.17 213.23 219.33 225.44 231.73 238.15 244.69 251.35 - 258.14 265.04 272.06 279.2 286.41 293.38 300.79 308.36 / - 13 13 13 1 113.12 116.65 120.23 124 128.15 132.57 137.23 142.1 147.18 152.48 158 163.74 - 169.69 175.82 182.15 188.68 195.39 202.29 209.37 216.63 224.06 231.66 239.42 247.35 255.42 263.65 272.03 280.54 - 289.2 298 306.93 316 326.24 336.67 347.16 357.56 / - 13 13 14 1 108.94 114.11 118.74 123.69 129.04 134.84 141.07 147.79 154.94 162.47 170.36 178.59 - 187.14 196.01 205.18 214.64 224.4 234.44 244.76 255.36 266.24 277.39 288.79 300.37 312.14 324.1 336.27 348.65 - 361.25 374.05 387.08 400.31 413.76 427.41 441.28 455.36 / - 13 13 15 1 104.92 112.18 119.55 127.26 135.61 144.69 154.52 165.05 176.25 188.08 200.48 213.4 - 226.83 240.75 255.13 269.96 285.24 300.96 317.11 333.67 350.63 368 385.79 404 422.64 441.69 461.17 481.08 - 501.4 522.09 543.13 564.52 586.27 608.41 630.94 653.88 / - 13 13 16 1 103.2 113.78 125.92 139.36 154.04 169.91 186.95 205.09 224.26 244.43 265.55 287.59 - 310.51 334.28 358.87 384.26 410.39 437.28 464.93 493.33 522.45 552.28 582.83 614.08 645.94 678.39 711.67 745.87 - 780.98 816.97 853.86 891.63 930.27 969.62 1009.43 1049.72 / - 13 13 17 1 105.74 125.1 149.74 176.54 204.96 234.6 266.14 299.25 333.54 370.44 407.57 447.8 - 489.7 531.29 576.47 623.07 670.55 719.48 770.53 823.4 877.27 933.18 991.45 1051.37 1112.79 1175.55 1238.6 1300.22 - 1356.65 1415.91 1475.46 1536.71 1599.09 1663.82 1728.25 1792.31 / - 13 13 18 1 118.42 159.46 206.3 255.71 307.96 363.23 421.91 484.22 550.09 619.79 692.88 770.07 - 851.12 936.8 1026.11 1119.05 1214.98 1310.92 1402.14 1495.72 1593.9 1694.63 1795.96 1902.64 2010.05 2119.58 2232.32 2348.49 - 2466.71 2582.43 2704.33 2828.07 2954.39 3085.85 3216.39 3354.33 / - 13 13 19 1 153.09 224.51 302.92 394.75 496.28 604.28 721.69 848.79 986.67 1134.72 1287.81 1437.15 - 1589.35 1754.71 1921.8 2104.67 2283.16 2468.71 2659.11 2870.97 3078.06 3285.89 3503.42 3728.1 3961.52 4196.77 4444.17 4692.06 - 4949.96 5206.13 5475.15 5753.19 6034.86 6321.66 6603.66 6903.16 / - 13 13 20 1 215.02 334.17 459.46 619.58 824.14 1054.52 1309.67 1570.34 1850.04 2142.27 2453.87 2780.15 - 3129.26 3494.77 3859.93 4269.34 4664.4 5117.75 5547.21 5999.05 6458.6 6991.73 7493.43 8009.53 8530.2 9083.29 9655.74 10234.27 - 10828.25 11440.7 12072.59 12746.13 13417.62 14105.33 14815.71 15547.01 / - 13 14 1 1 274.83 273.73 273.37 273.33 273.48 273.75 274.13 274.59 275.14 275.75 276.44 277.2 - 278.02 278.9 279.85 280.85 281.92 283.05 284.24 285.49 286.8 288.17 289.6 291.09 292.63 294.24 295.9 297.62 - 299.4 301.23 303.13 305.08 307.09 309.16 311.29 313.48 / - 13 14 2 1 274.73 273.61 273.24 273.2 273.34 273.61 273.99 274.45 275 275.61 276.3 277.05 - 277.87 278.75 279.7 280.71 281.78 282.91 284.1 285.35 286.66 288.03 289.45 290.94 292.49 294.09 295.76 297.48 - 299.26 301.09 302.99 304.95 306.96 309.03 311.16 313.34 / - 13 14 3 1 274.53 273.38 273.01 272.96 273.09 273.36 273.73 274.19 274.73 275.35 276.03 276.79 - 277.61 278.49 279.43 280.44 281.51 282.64 283.83 285.08 286.39 287.76 289.19 290.68 292.23 293.83 295.5 297.22 - 299 300.84 302.74 304.7 306.71 308.79 310.92 313.11 / - 13 14 4 1 274.16 272.97 272.56 272.5 272.62 272.89 273.25 273.71 274.25 274.86 275.54 276.29 - 277.11 277.99 278.94 279.95 281.01 282.15 283.34 284.59 285.9 287.27 288.71 290.2 291.75 293.36 295.02 296.75 - 298.54 300.38 302.29 304.25 306.27 308.35 310.48 312.68 / - 13 14 5 1 273.44 272.15 271.71 271.62 271.72 271.97 272.33 272.78 273.32 273.92 274.61 275.36 - 276.17 277.05 278 279.01 280.08 281.22 282.41 283.67 284.98 286.36 287.8 289.3 290.85 292.47 294.15 295.88 - 297.68 299.53 301.45 303.42 305.45 307.54 309.69 311.9 / - 13 14 6 1 271.6 269.94 269.28 269.05 269.07 269.26 269.57 269.99 270.5 271.1 271.77 272.51 - 273.33 274.22 275.18 276.2 277.28 278.44 279.65 280.93 282.27 283.68 285.15 286.67 288.27 289.92 291.63 293.41 - 295.24 297.14 299.1 301.12 303.2 305.34 307.54 309.8 / - 13 14 7 1 266.97 263.85 262.39 261.92 261.79 261.88 262.13 262.52 263.02 263.62 264.31 265.09 - 265.95 266.89 267.9 268.99 270.15 271.39 272.69 274.07 275.51 277.02 278.6 280.24 281.95 283.73 285.57 287.47 - 289.44 291.48 293.58 295.74 297.97 300.25 302.61 305.02 / - 13 14 8 1 257.86 248.97 247.34 246.7 246.45 246.54 246.83 247.28 247.87 248.57 249.39 250.32 - 251.34 252.46 253.68 254.97 256.36 257.82 259.37 260.96 262.67 264.45 266.31 268.24 270.25 272.3 274.45 276.67 - 278.96 281.33 283.76 286.23 288.8 291.44 294.14 296.91 / - 13 14 9 1 240.28 223.05 221.99 221.67 221.77 222.15 222.74 223.5 224.43 225.49 226.69 228.01 - 229.44 230.98 232.65 234.39 236.27 238.21 240.26 242.41 244.65 246.97 249.38 251.9 254.47 257.16 259.9 262.74 - 265.62 268.62 271.65 274.8 278.02 281.28 284.64 288.07 / - 13 14 10 1 202.95 191.58 190.44 190.25 190.61 191.33 192.31 193.56 194.98 196.62 198.43 200.4 - 202.53 204.81 207.23 209.78 212.46 215.26 218.18 221.21 224.36 227.61 230.96 234.41 237.95 241.59 245.32 249.13 - 253.03 257.02 261.08 265.22 269.47 273.77 278.18 282.62 / - 13 14 11 1 159.88 156.83 156.48 157.1 158.21 159.68 161.5 163.58 165.91 168.47 171.31 174.3 - 177.48 180.92 184.44 188.22 192.04 196.13 200.22 204.59 208.92 213.53 218.08 222.93 227.67 232.75 237.68 242.98 - 248.09 253.27 258.87 264.21 269.87 275.37 281.21 287.03 / - 13 14 12 1 128.24 128.32 129.9 132.31 135.12 138.21 141.53 145.07 148.79 152.71 156.81 161.07 - 165.51 170.11 174.86 179.76 184.81 190.1 196.13 202.02 207.97 214 220.11 226.38 232.87 239.35 245.95 252.68 - 259.24 266.19 273.26 280.45 287.76 295.13 302.62 309.84 / - 13 14 13 1 113.41 117.02 120.63 124.43 128.6 133.04 137.73 142.62 147.72 153.04 158.59 164.35 - 170.33 176.5 182.86 189.42 196.16 203.09 210.2 217.49 224.95 232.59 240.39 248.35 256.46 264.73 273.15 281.72 - 290.42 299.27 308.25 317.37 326.62 337.12 347.8 358.18 / - 13 14 14 1 109.19 114.44 119.1 124.07 129.45 135.26 141.51 148.25 155.41 162.95 170.85 179.1 - 187.67 196.56 205.75 215.24 225.02 235.08 245.42 256.03 266.92 278.08 289.51 301.16 313 325.03 337.26 349.69 - 362.34 375.21 388.28 401.57 415.07 428.79 442.72 456.86 / - 13 14 15 1 105.11 112.44 119.84 127.58 135.94 145.03 154.86 165.4 176.59 188.42 200.83 213.77 - 227.22 241.14 255.52 270.35 285.62 301.33 317.47 334.04 351.03 368.42 386.22 404.42 423.04 442.07 461.52 481.39 - 501.68 522.39 543.51 564.99 586.83 609.03 631.61 654.59 / - 13 14 16 1 103.35 113.97 126.12 139.57 154.25 170.11 187.12 205.25 224.42 244.56 265.65 287.65 - 310.53 334.27 358.85 384.24 410.37 437.23 464.82 493.16 522.24 552.07 582.59 613.82 645.65 678.04 711.26 745.36 - 780.35 816.19 852.91 890.49 928.95 968.24 1008.21 1048.75 / - 13 14 17 1 105.84 125.16 149.82 176.56 204.96 234.96 266.32 299.1 333.32 370.18 407.22 447.33 - 489.08 531.1 575.62 622.23 669.74 718.57 769.48 822.17 876.61 931.47 989.45 1049.1 1110.46 1173.11 1236.35 1298.39 - 1355.43 1415.4 1475.89 1538.19 1601.75 1667.76 1733.65 1799.5 / - 13 14 18 1 118.36 159.37 206.22 255.62 307.81 363.05 421.64 483.74 549.49 618.96 691.85 768.95 - 849.82 935.11 1024.08 1116.9 1212.56 1308.44 1400.28 1494.58 1593.2 1694.78 1796.99 1904.46 2012.82 2123.36 2235.51 2354.36 - 2473.62 2590.92 2714.06 2839.29 2967.02 3099.89 3236.15 3371.16 / - 13 14 19 1 152.99 224.54 302.72 393.93 494.98 604.23 721.41 846.5 983.52 1129.4 1282.31 1431.67 - 1589.53 1755.98 1924.27 2097.51 2288.49 2475.74 2668.01 2869.35 3090.77 3301 3520.85 3746.33 3982.84 4221.73 4468.02 4722.66 - 4983.58 5242.71 5514.99 5796.36 6080.87 6371.31 6657.85 6960.25 / - 13 14 20 1 215.01 334.73 460.86 611.4 816.64 1049.79 1303.37 1563.84 1844.15 2143.57 2455.02 2791.59 - 3143.76 3491.03 3881.62 4295.27 4694.51 5114.03 5587.13 6043.44 6508.44 6995.56 7554.2 8075.79 8603.13 9156.89 9731.08 10317.51 - 10906.91 11544.39 12183.26 12841.94 13542.29 14237.92 14956.26 15668.61 / - 13 15 1 1 276.6 275.52 275.16 275.12 275.26 275.54 275.91 276.37 276.91 277.53 278.21 278.96 - 279.78 280.66 281.61 282.61 283.68 284.81 286 287.25 288.56 289.93 291.36 292.85 294.4 296.01 297.67 299.4 - 301.18 303.02 304.92 306.88 308.9 310.97 313.1 315.3 / - 13 15 2 1 276.5 275.39 275.03 274.99 275.12 275.39 275.76 276.22 276.76 277.38 278.06 278.81 - 279.63 280.51 281.45 282.46 283.53 284.66 285.85 287.1 288.41 289.78 291.21 292.7 294.25 295.85 297.52 299.25 - 301.03 302.87 304.77 306.73 308.75 310.83 312.96 315.16 / - 13 15 3 1 276.3 275.17 274.79 274.73 274.86 275.13 275.5 275.95 276.49 277.1 277.78 278.53 - 279.35 280.23 281.17 282.18 283.25 284.38 285.57 286.82 288.13 289.5 290.93 292.42 293.97 295.58 297.25 298.98 - 300.76 302.61 304.51 306.47 308.49 310.57 312.71 314.91 / - 13 15 4 1 275.92 274.73 274.33 274.25 274.37 274.63 274.99 275.44 275.97 276.58 277.26 278.01 - 278.83 279.71 280.65 281.66 282.73 283.86 285.05 286.3 287.61 288.99 290.42 291.91 293.47 295.08 296.75 298.48 - 300.27 302.12 304.03 306 308.02 310.11 312.25 314.46 / - 13 15 5 1 275.15 273.84 273.37 273.25 273.35 273.58 273.93 274.37 274.89 275.5 276.17 276.92 - 277.73 278.61 279.56 280.57 281.64 282.77 283.97 285.23 286.55 287.93 289.37 290.87 292.43 294.05 295.74 297.48 - 299.28 301.14 303.06 305.05 307.09 309.19 311.35 313.57 / - 13 15 6 1 272.97 271.14 270.38 270.09 270.06 270.2 270.49 270.89 271.38 271.97 272.63 273.38 - 274.19 275.08 276.04 277.06 278.16 279.32 280.54 281.83 283.19 284.61 286.09 287.63 289.24 290.91 292.64 294.44 - 296.3 298.21 300.2 302.24 304.34 306.51 308.73 311.02 / - 13 15 7 1 267.97 264.22 262.66 262.12 261.94 262 262.23 262.6 263.09 263.69 264.39 265.18 - 266.05 267 268.03 269.14 270.33 271.59 272.92 274.32 275.79 277.33 278.94 280.62 282.37 284.18 286.06 288.01 - 290.02 292.1 294.24 296.45 298.72 301.05 303.45 305.91 / - 13 15 8 1 258.64 248.73 246.9 246.25 246.03 246.11 246.39 246.85 247.45 248.18 249.03 249.98 - 251.04 252.19 253.44 254.78 256.17 257.67 259.26 260.94 262.69 264.52 266.43 268.38 270.44 272.57 274.78 277.06 - 279.38 281.8 284.29 286.84 289.47 292.14 294.9 297.73 / - 13 15 9 1 240.83 222.69 221.62 221.29 221.39 221.78 222.39 223.18 224.13 225.23 226.46 227.82 - 229.29 230.88 232.59 234.4 236.31 238.32 240.44 242.65 244.94 247.33 249.8 252.35 255.01 257.73 260.56 263.45 - 266.43 269.48 272.61 275.82 279.12 282.47 285.89 289.4 / - 13 15 10 1 202.64 191.5 190.37 190.2 190.58 191.29 192.32 193.55 195.02 196.68 198.53 200.54 - 202.7 205.02 207.48 210.07 212.79 215.63 218.6 221.68 224.88 228.18 231.58 235.08 238.68 242.38 246.16 250.04 - 254 258.04 262.17 266.37 270.66 275.02 279.45 283.96 / - 13 15 11 1 159.85 156.92 156.65 157.26 158.39 159.88 161.72 163.83 166.18 168.81 171.63 174.65 - 177.94 181.34 184.99 188.7 192.68 196.68 200.95 205.2 209.75 214.23 219.01 223.71 228.72 233.61 238.85 243.93 - 249.38 254.63 259.95 265.7 271.19 277 282.64 288.63 / - 13 15 12 1 128.43 128.57 130.21 132.67 135.52 138.65 142 145.57 149.32 153.26 157.39 161.68 - 166.14 170.77 175.54 180.47 185.55 190.76 196.48 202.61 208.67 214.71 220.97 227.33 233.64 240.31 246.95 253.72 - 260.62 267.64 274.45 281.69 289.05 296.53 304.08 311.74 / - 13 15 13 1 113.75 117.44 121.09 124.91 129.1 133.57 138.28 143.19 148.31 153.65 159.21 164.99 - 171 177.21 183.6 190.18 196.94 203.9 211.04 218.35 225.84 233.51 241.33 249.33 257.48 265.79 274.24 282.85 - 291.6 300.49 309.52 318.69 328 337.44 347.79 358.72 / - 13 15 14 1 109.51 114.82 119.51 124.5 129.89 135.72 141.98 148.73 155.9 163.45 171.36 179.62 - 188.2 197.09 206.28 215.78 225.57 235.65 246 256.63 267.52 278.68 290.11 301.8 313.71 325.8 338.09 350.59 - 363.29 376.2 389.33 402.67 416.22 429.99 443.97 458.17 / - 13 15 15 1 105.37 112.75 120.18 127.94 136.3 145.39 155.22 165.75 176.94 188.76 201.14 214.07 - 227.51 241.44 255.82 270.63 285.88 301.57 317.68 334.21 351.17 368.56 386.36 404.56 423.16 442.16 461.57 481.39 - 501.62 522.25 543.31 564.77 586.64 608.92 631.56 654.58 / - 13 15 16 1 103.54 114.2 126.36 139.8 154.46 170.3 187.28 205.36 224.49 244.62 265.67 287.61 - 310.43 334.1 358.62 383.99 410.11 436.92 464.44 492.68 521.65 551.35 581.78 612.94 644.79 677.18 710.32 744.32 - 779.18 814.86 851.4 888.83 927.16 966.32 1006.18 1046.78 / - 13 15 17 1 105.96 125.23 149.96 176.56 204.9 234.86 266.16 298.83 332.93 369.71 406.66 446.65 - 488.24 530.85 574.35 620.86 668.49 717.27 768.06 820.56 874.79 929.48 987.37 1046.83 1107.77 1169.98 1233.02 1295.27 - 1354.22 1413.47 1475.85 1538.4 1602.98 1668.17 1734.73 1801.28 / - 13 15 18 1 118.32 159.31 206.04 255.48 307.55 362.62 421.15 483.06 548.44 617.63 690.43 767.21 - 847.99 933.14 1022.09 1114.46 1209.63 1305.44 1397.95 1494.13 1592.32 1694.49 1797.78 1906.07 2015.39 2127.02 2243.41 2360.28 - 2480.72 2600.71 2724.24 2850.79 2980.24 3112.74 3252.75 3388.92 / - 13 15 19 1 152.94 224.68 302.25 394.05 493.73 602.38 719.25 845.62 982.17 1127.65 1280.08 1430.4 - 1589.34 1750.95 1926.62 2101.52 2293.94 2483.18 2677.54 2880.85 3104.36 3317.27 3539.72 3767.84 4005.21 4247.91 4498.11 4751.66 - 5019.75 5282.9 5558.48 5832.59 6131.78 6425.51 6716.63 7023.2 / - 13 15 20 1 215.09 335.55 462.76 606.4 810.45 1040.82 1296.8 1548.69 1836.49 2131.75 2453.32 2787.02 - 3137.27 3511.2 3906.08 4291.92 4728.43 5152.64 5591.69 6093.08 6564.13 7057 7556.89 8150.03 8684.7 9244.1 9818.06 10403.99 - 11008.14 11640.67 12285.52 12972.19 13657.49 14361.84 15112 15835.87 / - 13 16 1 1 278.27 277.24 276.9 276.87 277.02 277.29 277.66 278.12 278.66 279.27 279.96 280.71 - 281.52 282.4 283.35 284.35 285.42 286.55 287.74 288.99 290.3 291.67 293.1 294.59 296.14 297.75 299.42 301.15 - 302.94 304.78 306.69 308.65 310.67 312.75 314.89 317.09 / - 13 16 2 1 278.16 277.11 276.77 276.73 276.87 277.14 277.51 277.97 278.5 279.12 279.8 280.55 - 281.36 282.24 283.19 284.19 285.26 286.39 287.58 288.83 290.14 291.51 292.94 294.43 295.98 297.59 299.26 300.99 - 302.78 304.63 306.53 308.5 310.52 312.6 314.75 316.95 / - 13 16 3 1 277.96 276.88 276.51 276.46 276.6 276.86 277.23 277.68 278.22 278.83 279.51 280.25 - 281.07 281.95 282.89 283.89 284.96 286.09 287.28 288.53 289.84 291.22 292.65 294.14 295.69 297.3 298.98 300.71 - 302.5 304.35 306.25 308.22 310.25 312.33 314.48 316.68 / - 13 16 4 1 277.57 276.42 276.03 275.95 276.07 276.33 276.69 277.14 277.67 278.27 278.95 279.7 - 280.51 281.39 282.33 283.34 284.4 285.53 286.73 287.98 289.29 290.67 292.1 293.6 295.15 296.77 298.44 300.18 - 301.97 303.83 305.74 307.71 309.75 311.84 313.99 316.2 / - 13 16 5 1 276.64 275.28 274.77 274.63 274.7 274.92 275.25 275.68 276.2 276.8 277.47 278.21 - 279.02 279.9 280.85 281.86 282.93 284.07 285.27 286.53 287.85 289.24 290.69 292.2 293.77 295.4 297.09 298.84 - 300.66 302.53 304.46 306.46 308.51 310.63 312.8 315.04 / - 13 16 6 1 274.08 272.08 271.19 270.81 270.72 270.83 271.09 271.46 271.94 272.52 273.17 273.91 - 274.73 275.62 276.59 277.62 278.73 279.9 281.14 282.44 283.81 285.25 286.75 288.32 289.95 291.65 293.41 295.23 - 297.11 299.06 301.07 303.15 305.28 307.48 309.74 312.06 / - 13 16 7 1 268.73 264.32 262.52 261.95 261.74 261.78 262 262.37 262.87 263.48 264.19 264.99 - 265.88 266.85 267.91 269.05 270.26 271.55 272.92 274.35 275.86 277.44 279.09 280.82 282.55 284.41 286.34 288.33 - 290.4 292.53 294.72 296.98 299.31 301.7 304.16 306.68 / - 13 16 8 1 259.23 248.2 246.38 245.68 245.49 245.59 245.91 246.39 247.03 247.77 248.65 249.63 - 250.72 251.91 253.19 254.57 256.04 257.55 259.19 260.91 262.72 264.61 266.53 268.58 270.7 272.89 275.17 277.48 - 279.9 282.39 284.96 287.59 290.27 293.05 295.89 298.8 / - 13 16 9 1 240.35 222.35 221.26 220.92 221.03 221.42 222.04 222.85 223.82 224.94 226.19 227.57 - 229.07 230.69 232.43 234.27 236.22 238.27 240.42 242.68 245.03 247.47 250.01 252.63 255.35 258.15 261.04 264.02 - 267.07 270.24 273.48 276.78 280.15 283.6 287.11 290.7 / - 13 16 10 1 201.78 191.43 190.31 190.16 190.51 191.27 192.29 193.57 195.07 196.76 198.55 200.58 - 202.76 205.1 207.58 210.19 212.94 215.81 218.8 221.91 225.14 228.47 231.9 235.44 239.07 242.8 246.63 250.54 - 254.54 259.08 263.27 267.55 271.9 276.32 280.83 285.41 / - 13 16 11 1 159.97 157.07 156.78 157.41 158.56 160.11 161.94 164.07 166.48 169.11 171.96 175.08 - 178.34 181.85 185.44 189.3 193.2 197.37 201.53 205.99 210.4 215.12 219.76 224.71 229.55 234.73 239.76 245.16 - 250.38 255.99 261.38 266.85 272.76 278.39 284.35 290.13 / - 13 16 12 1 128.61 128.84 130.56 133.09 135.98 139.15 142.53 146.12 149.9 153.87 158.01 162.33 - 166.81 171.46 176.26 181.22 186.32 191.56 196.94 202.98 209.31 215.44 221.79 228.15 234.62 241.26 247.94 254.76 - 261.69 268.76 275.95 283.26 290.33 297.86 305.52 313.24 / - 13 16 13 1 114.16 117.93 121.62 125.48 129.7 134.19 138.91 143.84 148.97 154.32 159.89 165.69 - 171.7 177.93 184.36 190.96 197.75 204.72 211.88 219.22 226.73 234.41 242.26 250.28 258.46 266.8 275.28 283.92 - 292.71 301.64 310.72 319.93 329.28 338.77 348.39 358.15 / - 13 16 14 1 109.94 115.28 119.99 125 130.4 136.23 142.5 149.25 156.43 163.98 171.89 180.14 - 188.71 197.6 206.79 216.27 226.05 236.11 246.45 257.07 267.97 279.13 290.55 302.22 314.15 326.32 338.68 351.23 - 363.98 376.94 390.11 403.5 417.1 430.91 444.93 459.17 / - 13 16 15 1 105.72 113.16 120.6 128.35 136.7 145.78 155.59 166.1 177.27 189.07 201.41 214.3 - 227.71 241.59 255.93 270.73 285.96 301.6 317.66 334.13 351.02 368.33 386.06 404.22 422.79 441.77 461.13 480.89 - 501.04 521.59 542.55 563.9 585.66 607.81 630.36 653.29 / - 13 16 16 1 103.82 114.49 126.65 140.06 154.68 170.47 187.39 205.41 224.48 244.53 265.53 287.42 - 310.16 333.73 358.14 383.39 409.42 436.16 463.61 491.72 520.53 550.07 580.32 611.29 642.96 675.33 708.46 742.4 - 777.15 812.69 849.04 886.2 924.16 962.83 1002.22 1042.4 / - 13 16 17 1 106.14 125.32 150 176.54 204.78 234.62 265.83 298.41 332.36 368.98 405.74 445.62 - 487.05 528.68 572.63 618.84 666.39 715.31 765.98 818.33 872.31 926.51 983.79 1042.67 1103.07 1164.83 1227.6 1289.83 - 1349.85 1410.78 1472.08 1535.83 1600.31 1666.1 1733.29 1800.61 / - 13 16 18 1 118.31 159.28 205.96 255.27 307.15 362 420.26 481.99 547.06 615.8 688.29 764.76 - 845.25 929.96 1018.26 1110.01 1204.75 1301.09 1393.78 1490.68 1590.28 1692.71 1798.98 1906.22 2016.67 2129.5 2246.92 2365.14 - 2486.91 2610.92 2734.78 2863.93 2995.5 3129.84 3268.68 3406.71 / - 13 16 19 1 152.96 224.98 302.7 393.33 493.69 601.94 718.76 842.51 978.9 1124.32 1276.88 1427.77 - 1588.28 1750.81 1927.85 2104.56 2298.57 2489.81 2686.62 2892.24 3100.59 3334.84 3559.05 3790.29 4029.16 4275.88 4530.12 4787.31 - 5059.12 5326.42 5605.52 5890.51 6175.67 6484.94 6781.24 7091.75 / - 13 16 20 1 215.34 336.75 465.31 605.51 807.54 1034.36 1284.76 1542.22 1821.4 2124.69 2448.49 2785.31 - 3129.72 3504.55 3902.23 4322.63 4732.79 5195.8 5641.13 6099.84 6626.38 7125.72 7633.6 8164.57 8775.52 9341.94 9922.42 10515.39 - 11124.48 11754.45 12419.07 13096.62 13813.02 14527.11 15259.9 16023.74 / - 13 17 1 1 279.81 278.88 278.58 278.57 278.72 279 279.38 279.84 280.38 280.99 281.67 282.42 - 283.24 284.12 285.06 286.07 287.14 288.26 289.46 290.71 292.02 293.39 294.82 296.31 297.87 299.48 301.15 302.88 - 304.67 306.52 308.43 310.4 312.43 314.51 316.66 318.86 / - 13 17 2 1 279.7 278.75 278.44 278.42 278.57 278.84 279.21 279.67 280.21 280.82 281.51 282.25 - 283.07 283.95 284.89 285.9 286.96 288.09 289.28 290.53 291.85 293.22 294.65 296.14 297.7 299.31 300.98 302.71 - 304.5 306.35 308.26 310.23 312.26 314.35 316.5 318.71 / - 13 17 3 1 279.49 278.5 278.17 278.14 278.28 278.54 278.91 279.37 279.9 280.51 281.19 281.94 - 282.75 283.63 284.57 285.57 286.64 287.77 288.96 290.21 291.53 292.9 294.33 295.83 297.38 299 300.67 302.4 - 304.2 306.05 307.96 309.94 311.97 314.06 316.21 318.42 / - 13 17 4 1 279.07 277.99 277.61 277.55 277.67 277.92 278.28 278.72 279.25 279.86 280.53 281.28 - 282.09 282.96 283.91 284.91 285.98 287.11 288.3 289.56 290.87 292.25 293.69 295.19 296.75 298.37 300.05 301.79 - 303.59 305.45 307.37 309.35 311.39 313.49 315.65 317.87 / - 13 17 5 1 277.82 276.41 275.84 275.66 275.7 275.89 276.21 276.62 277.13 277.72 278.38 279.12 - 279.94 280.82 281.76 282.78 283.85 285 286.21 287.48 288.81 290.21 291.67 293.19 294.78 296.42 298.13 299.9 - 301.74 303.63 305.58 307.6 309.67 311.81 314.01 316.27 / - 13 17 6 1 274.87 272.65 271.62 271.1 270.96 271.03 271.26 271.62 272.09 272.66 273.32 274.06 - 274.88 275.79 276.76 277.81 278.93 280.13 281.39 282.72 284.12 285.58 287.11 288.71 290.38 292.11 293.9 295.76 - 297.68 299.67 301.72 303.84 306.02 308.26 310.56 312.93 / - 13 17 7 1 269.24 264.16 262.15 261.51 261.26 261.28 261.49 261.85 262.35 262.97 263.69 264.51 - 265.42 266.42 267.5 268.67 269.92 271.25 272.65 274.13 275.65 277.28 278.98 280.75 282.59 284.5 286.49 288.54 - 290.65 292.84 295.09 297.42 299.81 302.26 304.75 307.34 / - 13 17 8 1 259.63 247.55 245.68 245.09 244.89 245.04 245.39 245.9 246.56 247.35 248.26 249.29 - 250.42 251.64 252.97 254.39 255.86 257.46 259.15 260.92 262.78 264.68 266.71 268.81 270.99 273.21 275.55 277.97 - 280.46 282.99 285.63 288.34 291.13 293.96 296.88 299.88 / - 13 17 9 1 240.57 222.01 220.9 220.56 220.67 221.07 221.71 222.53 223.52 224.65 225.93 227.34 - 228.87 230.52 232.28 234.16 236.14 238.23 240.43 242.72 245.11 247.6 250.19 252.86 255.63 258.48 261.43 264.46 - 267.57 270.77 274.04 277.4 280.84 284.36 287.95 291.62 / - 13 17 10 1 201.26 191.37 190.25 190.11 190.48 191.23 192.29 193.6 195.05 196.77 198.66 200.72 - 202.94 205.31 207.83 210.48 213.27 216.19 219.23 222.39 225.66 229.04 232.53 236.12 239.82 243.6 247.49 251.46 - 255.52 259.67 263.9 268.22 272.62 277.09 282.23 286.88 / - 13 17 11 1 160.1 157.17 156.91 157.6 158.77 160.31 162.19 164.34 166.75 169.42 172.36 175.47 - 178.75 182.29 185.92 189.81 193.74 197.93 202.14 206.62 211.25 215.82 220.71 225.5 230.61 235.6 240.94 246.12 - 251.68 257.04 262.48 268.34 273.95 280.02 285.79 291.91 / - 13 17 12 1 128.79 129.13 130.98 133.59 136.54 139.75 143.17 146.78 150.59 154.57 158.73 163.06 - 167.56 172.23 177.04 182.01 187.13 192.39 197.79 203.33 209.72 216.11 222.53 228.94 235.47 242.11 248.92 255.77 - 262.75 269.85 277.09 284.45 291.93 299.15 306.86 314.7 / - 13 17 13 1 114.7 118.57 122.28 126.2 130.46 134.97 139.71 144.63 149.77 155.11 160.68 166.47 - 172.47 178.7 185.14 191.78 198.59 205.58 212.75 220.09 227.61 235.31 243.17 251.2 259.39 267.74 276.25 284.91 - 293.73 302.69 311.79 321.04 330.43 339.96 349.62 359.42 / - 13 17 14 1 110.55 115.86 120.59 125.6 131 136.82 143.11 149.86 157.03 164.57 172.46 180.69 - 189.23 198.09 207.25 216.7 226.43 236.46 246.76 257.33 268.17 279.28 290.66 302.29 314.19 326.34 338.74 351.37 - 364.2 377.22 390.44 403.86 417.49 431.33 445.39 459.66 / - 13 17 15 1 106.26 113.72 121.15 128.85 137.17 146.22 156 166.47 177.6 189.34 201.62 214.45 - 227.78 241.58 255.83 270.53 285.67 301.24 317.22 333.61 350.42 367.62 385.23 403.25 421.68 440.52 459.75 479.4 - 499.45 519.9 540.76 562.01 583.63 605.64 628.04 650.8 / - 13 17 16 1 104.22 114.9 127.02 140.37 154.92 170.62 187.45 205.38 224.34 244.29 265.16 286.93 - 309.56 333.02 357.3 382.36 408.12 434.59 461.78 489.69 518.34 547.72 577.79 608.55 640 672.12 704.98 738.62 - 773.02 808.21 844.17 880.92 918.44 956.58 995.51 1035.2 / - 13 17 17 1 106.41 125.46 149.94 176.5 204.59 234.26 265.28 297.71 331.48 367.91 404.36 443.96 - 485.14 527.33 570.14 616.04 663.29 711.9 762.19 814.11 867.59 921.2 977.87 1036.13 1095.91 1157.1 1219.42 1282.76 - 1341.92 1403.36 1466.35 1529.52 1595.12 1661.38 1728.87 1798.9 / - 13 17 18 1 118.39 159.32 205.93 255 306.47 361.01 418.77 480.06 544.83 613.1 685.02 760.73 - 840.64 924.51 1012.28 1103.4 1197.55 1293.98 1388.06 1484.67 1585.41 1688.42 1795.55 1904.9 2017.64 2131.68 2248.42 2368.23 - 2491.42 2616.99 2744.96 2875.26 3007.93 3143.25 3280.77 3424.21 / - 13 17 19 1 153.12 225.55 303.15 393.64 492.55 599.98 715.92 840.36 974.55 1117.35 1271.08 1423.04 - 1579.4 1749.11 1927.61 2106.41 2293.1 2495.75 2695.31 2903.44 3115.07 3353.75 3579.36 3814.05 4056.31 4306.7 4562.92 4826.14 - 5093.35 5374.21 5657.46 5947.41 6237.14 6538.91 6853.03 7168.29 / - 13 17 20 1 215.85 338.53 468.82 611.21 800.17 1024.21 1275.87 1529.62 1815.76 2120.24 2438.14 2778.25 - 3132.7 3520.48 3898.3 4319.11 4763.58 5196.98 5688.24 6156.7 6645.06 7200.09 7718.06 8258.27 8813.56 9383.28 10040.54 10641.86 - 11261.18 11895.69 12558.46 13249.83 13966.7 14695.65 15463.9 16230.47 / - 13 18 1 1 281.22 280.43 280.19 280.2 280.38 280.66 281.05 281.51 282.06 282.67 283.36 284.11 - 284.92 285.8 286.74 287.75 288.82 289.95 291.14 292.39 293.7 295.08 296.51 298 299.56 301.17 302.85 304.58 - 306.37 308.23 310.14 312.11 314.15 316.24 318.39 320.6 / - 13 18 2 1 281.11 280.29 280.03 280.04 280.21 280.49 280.87 281.33 281.87 282.49 283.17 283.92 - 284.73 285.61 286.56 287.56 288.63 289.76 290.95 292.2 293.51 294.89 296.32 297.82 299.37 300.99 302.66 304.4 - 306.19 308.05 309.96 311.94 313.97 316.06 318.22 320.43 / - 13 18 3 1 280.88 280.01 279.73 279.72 279.88 280.15 280.53 280.98 281.52 282.13 282.81 283.56 - 284.37 285.25 286.19 287.2 288.27 289.39 290.59 291.84 293.15 294.53 295.96 297.46 299.02 300.64 302.31 304.05 - 305.85 307.71 309.63 311.6 313.64 315.74 317.9 320.12 / - 13 18 4 1 280.23 279.18 278.8 278.73 278.84 279.08 279.43 279.87 280.39 280.99 281.67 282.41 - 283.22 284.1 285.04 286.05 287.13 288.26 289.46 290.72 292.04 293.43 294.87 296.38 297.95 299.58 301.27 303.03 - 304.84 306.71 308.65 310.64 312.7 314.82 317 319.23 / - 13 18 5 1 278.59 277.07 276.42 276.17 276.16 276.32 276.61 277.01 277.5 278.09 278.75 279.49 - 280.3 281.19 282.14 283.16 284.26 285.41 286.64 287.93 289.28 290.7 292.18 293.73 295.34 297.01 298.75 300.55 - 302.41 304.33 306.32 308.37 310.48 312.65 314.89 317.18 / - 13 18 6 1 275.28 272.79 271.41 270.87 270.67 270.69 270.9 271.24 271.7 272.26 272.93 273.68 - 274.51 275.43 276.43 277.5 278.65 279.88 281.17 282.53 283.97 285.48 287.05 288.69 290.4 292.18 294.02 295.94 - 297.91 299.96 302.06 304.24 306.47 308.78 311.14 313.57 / - 13 18 7 1 269.5 263.58 261.56 260.9 260.64 260.66 260.87 261.25 261.76 262.4 263.14 263.99 - 264.93 265.96 267.08 268.29 269.58 270.95 272.37 273.9 275.51 277.19 278.95 280.78 282.68 284.63 286.68 288.81 - 291 293.26 295.59 297.98 300.45 302.98 305.59 308.25 / - 13 18 8 1 259.8 246.64 244.78 244.31 244.23 244.43 244.83 245.4 246.11 246.95 247.9 248.97 - 250.11 251.38 252.75 254.22 255.78 257.43 259.12 260.95 262.86 264.86 266.89 269.06 271.3 273.63 275.99 278.47 - 281.03 283.67 286.34 289.13 292 294.94 297.91 300.99 / - 13 18 9 1 239.78 221.68 220.55 220.21 220.32 220.73 221.38 222.22 223.22 224.38 225.68 227.11 - 228.67 230.35 232.15 234.06 236.08 238.21 240.44 242.78 245.22 247.75 250.38 253.11 255.93 258.84 261.84 264.92 - 268.09 271.35 274.69 278.11 281.61 285.19 288.85 292.59 / - 13 18 10 1 200.68 191.3 190.2 190.07 190.42 191.21 192.3 193.56 195.11 196.85 198.77 200.86 - 203.12 205.53 208.08 210.78 213.61 216.57 219.66 222.87 226.19 229.63 233.17 236.82 240.57 244.41 248.36 252.39 - 256.52 260.73 265.03 269.41 273.88 278.42 283.05 287.75 / - 13 18 11 1 160.22 157.31 157.08 157.75 158.95 160.51 162.41 164.59 167.06 169.81 172.75 175.89 - 179.29 182.78 186.54 190.36 194.44 198.54 202.92 207.29 211.95 216.75 221.47 226.53 231.46 236.73 241.86 247.37 - 252.68 258.41 263.91 269.49 275.51 281.26 287.5 293.41 / - 13 18 12 1 128.98 129.5 131.56 134.29 137.31 140.56 144.01 147.65 151.47 155.46 159.63 163.97 - 168.47 173.13 177.95 182.93 188.05 193.31 198.72 204.27 210.09 216.69 223.22 229.7 236.29 242.98 249.78 256.75 - 263.76 270.9 278.17 285.57 293.1 300.37 308.13 316.01 / - 13 18 13 1 115.48 119.45 123.19 127.22 131.53 136.07 140.79 145.7 150.81 156.13 161.67 167.43 - 173.4 179.6 186 192.61 199.44 206.45 213.64 220.98 228.5 236.18 244.04 252.06 260.24 268.59 277.1 285.76 - 294.57 303.54 312.66 321.92 331.33 340.88 350.57 360.4 / - 13 18 14 1 111.5 116.69 121.42 126.42 131.79 137.6 143.9 150.64 157.77 165.27 173.12 181.29 - 189.78 198.57 207.66 217.03 226.7 236.64 246.86 257.35 268.1 279.11 290.39 301.91 313.69 325.72 338 350.52 - 363.3 376.34 389.62 403.13 416.83 430.73 444.83 459.12 / - 13 18 15 1 107.12 114.59 121.92 129.54 137.79 146.77 156.48 166.88 177.92 189.54 201.73 214.45 - 227.65 241.32 255.43 269.98 284.96 300.35 316.15 332.35 348.96 365.98 383.41 401.25 419.49 438.13 457.17 476.59 - 496.4 516.59 537.18 558.15 579.51 601.26 623.39 645.91 / - 13 18 16 1 104.86 115.54 127.58 140.79 155.2 170.74 187.44 205.22 224.03 243.8 264.5 286.07 - 308.48 331.68 355.59 380.25 405.65 431.78 458.63 486.18 514.44 543.4 573.08 603.47 634.55 666.35 698.85 732.09 - 766.07 800.79 836.25 872.44 909.29 946.82 985.09 1024.1 / - 13 18 17 1 106.86 125.68 150.05 176.44 204.32 233.73 264.54 296.68 330.09 366.21 402.24 441.5 - 482.27 524.29 566.15 611.56 658.41 706.52 756.29 807.63 860.44 913.53 969 1026.36 1085.18 1145.43 1206.91 1269.51 - 1330.36 1392.17 1454.62 1519.37 1584.92 1652.17 1721.11 1790.3 / - 13 18 18 1 118.37 159.51 206.05 254.58 305.52 359.39 416.46 477.07 541.04 608.63 679.94 754.9 - 834.11 916.95 1003.52 1093.69 1186.89 1283.24 1377.36 1475.67 1576.68 1681.59 1788.87 1899.33 2013.21 2128.83 2247.2 2369.24 - 2493.55 2620.85 2750.71 2883.05 3017.92 3155.47 3295.46 3441.13 / - 13 18 19 1 153.53 226.62 304.64 394.06 492.24 598.52 713.39 836.64 967.72 1110.28 1261.91 1411.46 - 1572.78 1742.8 1916.59 2105.44 2293.63 2498.98 2704.38 2914.18 3129.85 3353.78 3602.76 3840.73 4085.63 4338.66 4599.25 4867.98 - 5141.29 5422.61 5715.3 6010.03 6306.46 6613.63 6927.39 7255.16 / - 13 18 20 1 216.84 341.32 473.88 618.87 793.36 1018.32 1262.54 1520.3 1802.32 2096 2423.31 2766.48 - 3129.3 3505.85 3895.59 4317.7 4764.56 5234.3 5691.88 6168.7 6704.1 7213.49 7744.08 8350.01 8917.07 9498.36 10085.54 10695.17 - 11412.23 12064.79 12742.14 13440.24 14158.85 14897.82 15676.15 16460.79 / - 13 19 1 1 282.48 281.85 281.69 281.75 281.95 282.26 282.65 283.13 283.68 284.3 284.98 285.74 - 286.55 287.43 288.38 289.38 290.45 291.58 292.77 294.03 295.34 296.72 298.15 299.65 301.2 302.82 304.5 306.24 - 308.03 309.89 311.81 313.79 315.83 317.92 320.08 322.3 / - 13 19 2 1 282.34 281.67 281.48 281.53 281.72 282.02 282.41 282.88 283.42 284.04 284.73 285.48 - 286.29 287.17 288.12 289.12 290.19 291.32 292.51 293.77 295.08 296.46 297.9 299.39 300.95 302.57 304.25 305.99 - 307.79 309.65 311.57 313.55 315.59 317.7 319.86 322.08 / - 13 19 3 1 281.89 281.08 280.82 280.81 280.97 281.24 281.61 282.07 282.61 283.22 283.9 284.64 - 285.46 286.34 287.29 288.29 289.37 290.5 291.7 292.96 294.28 295.66 297.11 298.62 300.18 301.81 303.5 305.25 - 307.06 308.94 310.87 312.87 314.92 317.03 319.21 321.45 / - 13 19 4 1 280.83 279.71 279.27 279.14 279.22 279.43 279.77 280.19 280.71 281.3 281.98 282.72 - 283.54 284.42 285.37 286.39 287.48 288.63 289.84 291.12 292.46 293.87 295.33 296.87 298.46 300.12 301.84 303.62 - 305.46 307.37 309.34 311.37 313.46 315.61 317.82 320.1 / - 13 19 5 1 278.8 277.07 276.27 275.92 275.84 275.95 276.2 276.58 277.06 277.63 278.3 279.04 - 279.86 280.76 281.73 282.78 283.89 285.08 286.33 287.65 289.04 290.5 292.02 293.61 295.27 296.99 298.77 300.62 - 302.54 304.52 306.56 308.66 310.83 313.07 315.36 317.72 / - 13 19 6 1 275.33 272.57 270.77 270.19 269.97 269.99 270.19 270.54 271.01 271.59 272.27 273.05 - 273.91 274.86 275.89 277 278.19 279.46 280.8 282.21 283.7 285.25 286.88 288.58 290.36 292.2 294.11 296.08 - 298.13 300.25 302.43 304.67 306.99 309.37 311.82 314.33 / - 13 19 7 1 269.5 262.92 260.78 260.15 259.91 259.95 260.19 260.6 261.14 261.8 262.58 263.46 - 264.43 265.51 266.67 267.92 269.25 270.63 272.13 273.71 275.37 277.11 278.92 280.82 282.78 284.83 286.91 289.1 - 291.37 293.7 296.12 298.6 301.15 303.75 306.44 309.2 / - 13 19 8 1 259.72 245.74 243.73 243.43 243.48 243.78 244.26 244.9 245.67 246.57 247.57 248.69 - 249.89 251.22 252.64 254.14 255.75 257.42 259.22 261.08 263.05 265.08 267.19 269.42 271.69 274.08 276.52 279.08 - 281.71 284.37 287.15 290.02 292.91 295.93 299.02 302.15 / - 13 19 9 1 239.61 221.35 220.21 219.87 219.98 220.4 221.06 221.91 222.93 224.11 225.44 226.89 - 228.48 230.19 232.02 233.97 236.03 238.2 240.47 242.85 245.33 247.92 250.6 253.37 256.25 259.21 262.26 265.41 - 268.64 271.95 275.36 278.84 282.41 286.06 289.78 293.59 / - 13 19 10 1 200.04 191.24 190.14 190.02 190.39 191.2 192.25 193.6 195.17 196.93 198.89 201.01 - 203.19 205.62 208.2 210.92 213.78 216.77 219.88 223.12 226.47 230.22 233.81 237.52 241.33 245.23 249.24 253.33 - 257.52 261.8 266.17 270.62 275.16 279.77 284.47 289.25 / - 13 19 11 1 160.35 157.46 157.24 157.93 159.15 160.73 162.7 164.98 167.53 170.31 173.3 176.54 - 179.9 183.52 187.22 191.17 195.16 199.42 203.69 208.24 212.75 217.57 222.53 227.39 232.6 237.67 243.1 248.36 - 254.02 259.47 265.01 270.98 276.69 282.88 288.76 295.16 / - 13 19 12 1 129.19 130.12 132.57 135.46 138.6 141.91 145.4 149.05 152.86 156.84 160.99 165.31 - 169.78 174.41 179.2 184.15 189.24 194.48 199.86 205.38 211.03 217.14 223.76 230.45 237.07 243.8 250.63 257.57 - 264.69 271.85 279.14 286.56 293.75 301.41 309.2 317.13 / - 13 19 13 1 116.81 120.86 124.75 128.94 133.33 137.85 142.52 147.37 152.41 157.66 163.13 168.81 - 174.7 180.81 187.12 193.65 200.37 207.31 214.43 221.76 229.27 236.96 244.8 252.8 260.94 269.25 277.71 286.33 - 295.11 304.04 313.12 322.36 331.74 341.27 350.95 360.77 / - 13 19 14 1 113.09 118.02 122.72 127.67 133.01 138.85 145.14 151.83 158.89 166.29 174.02 182.06 - 190.42 199.07 208.02 217.26 226.77 236.57 246.63 256.96 267.55 278.4 289.5 300.85 312.45 324.29 336.37 348.69 - 361.26 374.07 387.12 400.41 413.94 427.7 441.69 455.92 / - 13 19 15 1 108.69 116.1 123.16 130.58 138.7 147.57 157.14 167.37 178.24 189.7 201.71 214.21 - 227.19 240.63 254.5 268.8 283.52 298.64 314.16 330.08 346.39 363.1 380.2 397.7 415.58 433.85 452.51 471.55 - 490.97 510.78 530.96 551.53 572.47 593.8 615.5 637.59 / - 13 19 16 1 106.04 116.71 128.53 141.49 155.58 170.87 187.31 204.84 223.39 242.89 263.3 284.46 - 306.4 329.08 352.47 376.59 401.43 426.98 453.24 480.2 507.86 536.23 565.3 595.08 625.55 656.73 688.61 721.2 - 754.5 788.51 823.23 858.58 894.57 931.27 968.67 1006.78 / - 13 19 17 1 107.71 126.16 150.24 176.32 203.96 232.36 262.89 295.24 328.13 363.8 399.1 437.73 - 477.86 517.8 560.13 604.81 650.71 697.87 746.62 796.65 848.28 900.18 954.32 1010.38 1067.9 1126.87 1187.23 1248.88 - 1310.67 1373.06 1436.78 1501.15 1567.64 1635.46 1705.06 1775.57 / - 13 19 18 1 117.95 160.06 206.37 254.23 304.37 356.91 412.97 472.66 535.91 602.65 672.76 746.4 - 824.44 905.85 990.49 1079.34 1171.42 1266.17 1362.18 1461.32 1563.63 1669.38 1778.2 1889.29 2004.39 2121.79 2242.89 2365.68 - 2493.27 2621.41 2753.41 2888.1 3025.48 3165.64 3308.44 3456.68 / - 13 19 19 1 154.49 228.73 307.14 395.18 491.59 595.78 708.7 830.05 959.24 1099.06 1245.65 1399.25 - 1560.84 1732.71 1907.88 2096.79 2287.51 2485.72 2701.75 2915.2 3136.75 3363.91 3615.43 3859.73 4111.17 4369.15 4635.46 4909.4 - 5192 5480.81 5772.64 6082.1 6386.63 6700.37 7020.73 7344.5 / - 13 19 20 1 218.84 345.97 481.77 629.94 792.68 1003.67 1243.97 1498.2 1780.79 2079.94 2405.31 2742.72 - 3106.72 3490.62 3890.12 4311.15 4745.15 5214.69 5708.15 6186.75 6724.99 7242.85 7826.89 8381.6 8951.81 9539.87 10214.28 10840.02 - 11487.04 12154.78 12843.25 13546.86 14394.5 15153.5 15933.48 16734.29 / - 13 20 1 1 283.1 282.51 282.35 282.41 282.6 282.91 283.3 283.77 284.32 284.94 285.63 286.39 - 287.21 288.1 289.05 290.06 291.14 292.29 293.49 294.76 296.09 297.48 298.93 300.44 302.02 303.66 305.36 307.12 - 308.94 310.82 312.77 314.77 316.84 318.97 321.15 323.4 / - 13 20 2 1 282.66 281.93 281.69 281.7 281.86 282.14 282.51 282.97 283.51 284.12 284.81 285.57 - 286.39 287.28 288.23 289.26 290.34 291.49 292.7 293.98 295.32 296.72 298.18 299.71 301.3 302.95 304.67 306.44 - 308.28 310.18 312.14 314.16 316.25 318.39 320.6 322.87 / - 13 20 3 1 281.92 280.96 280.59 280.51 280.61 280.85 281.19 281.63 282.16 282.76 283.45 284.2 - 285.03 285.92 286.88 287.91 289.01 290.17 291.4 292.69 294.04 295.46 296.95 298.5 300.11 301.78 303.52 305.32 - 307.19 309.11 311.1 313.16 315.27 317.45 319.69 321.99 / - 13 20 4 1 280.68 279.34 278.75 278.53 278.54 278.71 279.01 279.41 279.92 280.51 281.18 281.94 - 282.77 283.67 284.65 285.69 286.81 287.99 289.24 290.56 291.95 293.4 294.92 296.51 298.16 299.87 301.65 303.5 - 305.41 307.38 309.42 311.53 313.69 315.92 318.22 320.58 / - 13 20 5 1 278.59 276.64 275.69 275.24 275.1 275.16 275.39 275.75 276.22 276.79 277.46 278.22 - 279.06 279.98 280.98 282.06 283.21 284.44 285.74 287.11 288.55 290.06 291.64 293.29 295.01 296.8 298.65 300.58 - 302.57 304.62 306.75 308.94 311.2 313.52 315.91 318.37 / - 13 20 6 1 275.09 271.87 269.96 269.38 269.16 269.19 269.4 269.76 270.25 270.85 271.56 272.36 - 273.26 274.24 275.31 276.46 277.69 279 280.39 281.86 283.4 285.01 286.7 288.47 290.3 292.21 294.19 296.24 - 298.37 300.5 302.77 305.1 307.5 309.98 312.52 315.13 / - 13 20 7 1 269.22 262.05 259.82 259.27 259.1 259.18 259.47 259.92 260.5 261.2 262.02 262.94 - 263.96 265.07 266.28 267.57 268.96 270.38 271.93 273.56 275.27 277.07 278.95 280.9 282.88 284.99 287.18 289.44 - 291.78 294.19 296.64 299.2 301.84 304.54 307.32 310.18 / - 13 20 8 1 259.37 244.57 243.1 242.81 242.88 243.19 243.69 244.35 245.15 246.07 247.11 248.26 - 249.52 250.88 252.33 253.89 255.53 257.27 259.11 261.03 263.04 265.14 267.32 269.59 271.95 274.39 276.91 279.51 - 282.19 284.95 287.79 290.71 293.71 296.78 299.93 303.18 / - 13 20 9 1 238.45 221.03 219.87 219.53 219.64 220.07 220.74 221.61 222.65 223.85 225.2 226.68 - 228.3 230.04 231.9 233.88 235.98 238.19 240.51 242.93 245.46 248.09 250.82 253.65 256.57 259.59 262.7 265.9 - 269.19 272.57 276.03 279.58 283.21 286.93 290.73 294.6 / - 13 20 10 1 199.36 191.18 190.09 189.98 190.37 191.19 192.25 193.63 195.22 197.02 198.91 201.05 - 203.36 205.83 208.45 211.21 214.11 217.15 220.31 223.6 227.02 230.56 234.22 237.99 241.86 245.83 250.28 254.46 - 258.72 263.07 267.51 272.03 276.63 281.3 286.05 290.88 / - 13 20 11 1 160.77 157.71 157.45 158.3 159.77 161.71 163.9 166.36 169.04 171.91 175.01 178.23 - 181.62 185.24 188.94 192.88 196.86 201.1 205.35 209.91 214.44 219.28 224.05 229.15 234.13 239.47 244.64 250.17 - 255.52 261.26 266.78 272.73 278.42 284.17 290.42 296.34 / - 13 20 12 1 130.29 133.14 136.36 139.61 142.9 146.26 149.72 153.3 157.01 160.86 164.86 169.01 - 173.3 177.76 182.36 187.11 192.01 197.06 202.26 207.6 213.08 218.69 224.98 231.63 238.2 244.86 251.61 258.46 - 265.42 272.35 279.72 286.67 294.07 301.61 309.27 317.06 / - 13 20 13 1 120.75 125.54 130.13 134.42 138.65 142.95 147.37 151.95 156.72 161.69 166.87 172.25 - 177.84 183.65 189.66 195.87 202.3 208.92 215.74 222.76 229.98 237.38 244.97 252.75 260.72 268.86 277.19 285.69 - 294.36 303.19 312.16 321.27 330.52 339.91 349.43 359.09 / - 13 20 14 1 117.1 121.85 126.53 131.66 137.13 142.92 148.98 155.34 162.02 169.02 176.33 183.96 - 191.89 200.13 208.67 217.5 226.61 236.01 245.68 255.62 265.84 276.31 287.04 298.03 309.25 320.73 332.44 344.4 - 356.6 369.04 381.71 394.62 407.76 421.13 434.74 448.57 / - 13 20 15 1 113.64 120.07 126.49 133.51 141.23 149.72 158.93 168.75 179.14 190.08 201.53 213.46 - 225.88 238.75 252.08 265.85 280.04 294.66 309.68 325.1 340.92 357.13 373.73 390.71 408.08 425.84 443.97 462.47 - 481.35 500.6 520.23 540.22 560.58 581.31 602.41 623.87 / - 13 20 16 1 110.3 120.68 131.51 143.43 156.68 171.23 186.98 203.79 221.6 240.33 259.9 280.28 - 301.42 323.3 345.91 369.25 393.29 418.04 443.5 469.65 496.51 524.05 552.29 581.21 610.83 641.14 672.13 703.81 - 736.14 769.01 802.56 836.79 871.69 907.26 943.51 980.43 / - 13 20 17 1 110.69 128.68 151.42 176.44 203.02 231.2 260.65 291.18 324.73 359.03 393.87 431.65 - 470.74 507.92 549.65 592.63 636.87 682.27 729.6 778.35 828.52 877.87 930.95 985.46 1041.4 1098.77 1157.58 1217.81 - 1279.45 1342.5 1406.97 1471.79 1539.09 1607.8 1677.89 1749.37 / - 13 20 18 1 121.51 162.4 206.89 253.45 302.15 353.97 408.98 467.13 528.87 593.75 663.45 734.92 - 811.41 889.16 972.54 1059.27 1149.36 1240.92 1338 1438.41 1542.01 1648.91 1758.98 1872.19 1988.4 2107.92 2230.46 2355.75 - 2484.39 2615.82 2750.26 2887.67 3028.02 3171.29 3317.46 3468.25 / - 13 20 19 1 158.36 233.46 311.76 398.84 492.76 594.1 703.62 821.86 949.04 1085.28 1229.56 1383.27 - 1545.99 1717.72 1895.43 2084.94 2278.69 2479.93 2695.53 2912.78 3137.38 3369.22 3620.69 3869.08 4125.07 4388.61 4659.62 4939.31 - 5226.5 5521.15 5821.45 6136.61 6451.8 6774.1 7103.42 7439.75 / - 13 20 20 1 223.43 354.81 495.39 647.43 812.05 989.54 1179.83 1382.85 1640.05 1930.48 2237.19 2569 - 2916.91 3291.15 3673.11 4091.52 4538.44 4982.4 5480.99 5970.21 6482.29 7017.72 7577.12 8175.96 8754.48 9389.53 10024.35 10638.13 - 11354.4 12015.75 12793 13503.47 14235.14 14988.08 15885.52 16688.5 / - 14 1 1 1 260.3 260.17 260.25 260.46 260.77 261.16 261.62 262.15 262.74 263.4 264.11 264.88 - 265.71 266.6 267.54 268.54 269.6 270.71 271.87 273.09 274.36 275.69 277.07 278.5 279.99 281.53 283.12 284.77 - 286.47 288.22 290.02 291.88 293.79 295.75 297.76 299.83 / - 14 1 2 1 260.23 260.09 260.17 260.38 260.68 261.07 261.53 262.06 262.65 263.31 264.02 264.79 - 265.62 266.51 267.46 268.45 269.51 270.62 271.79 273.01 274.28 275.61 276.99 278.42 279.91 281.45 283.05 284.69 - 286.39 288.14 289.95 291.81 293.72 295.68 297.7 299.76 / - 14 1 3 1 260.1 259.95 260.02 260.22 260.53 260.91 261.37 261.9 262.49 263.14 263.86 264.63 - 265.46 266.35 267.29 268.29 269.35 270.46 271.63 272.85 274.12 275.45 276.83 278.27 279.76 281.3 282.9 284.55 - 286.25 288.01 289.81 291.68 293.59 295.55 297.57 299.64 / - 14 1 4 1 259.86 259.68 259.74 259.94 260.24 260.62 261.08 261.6 262.19 262.84 263.56 264.33 - 265.16 266.05 267 268 269.06 270.17 271.34 272.56 273.84 275.17 276.56 277.99 279.49 281.03 282.63 284.29 - 285.99 287.75 289.57 291.43 293.35 295.32 297.34 299.42 / - 14 1 5 1 259.41 259.18 259.22 259.41 259.7 260.07 260.53 261.05 261.64 262.29 263.01 263.78 - 264.61 265.5 266.45 267.45 268.52 269.63 270.8 272.03 273.31 274.65 276.04 277.49 278.99 280.54 282.15 283.81 - 285.52 287.29 289.11 290.98 292.91 294.89 296.92 299.01 / - 14 1 6 1 258.53 258.23 258.23 258.4 258.68 259.05 259.49 260.01 260.6 261.25 261.97 262.75 - 263.58 264.48 265.43 266.44 267.51 268.63 269.81 271.04 272.34 273.68 275.08 276.54 278.05 279.62 281.24 282.91 - 284.64 286.42 288.26 290.15 292.09 294.09 296.14 298.25 / - 14 1 7 1 256.78 256.38 256.33 256.46 256.72 257.08 257.52 258.04 258.63 259.28 260 260.79 - 261.63 262.53 263.5 264.52 265.6 266.74 267.93 269.19 270.49 271.86 273.28 274.76 276.3 277.89 279.54 281.24 - 282.99 284.81 286.68 288.6 290.58 292.61 294.7 296.84 / - 14 1 8 1 253.19 252.51 252.3 252.32 252.51 252.82 253.23 253.73 254.31 254.96 255.68 256.48 - 257.34 258.26 259.25 260.3 261.42 262.59 263.83 265.13 266.49 267.9 269.38 270.92 272.52 274.17 275.88 277.66 - 279.49 281.38 283.32 285.33 287.39 289.51 291.69 293.92 / - 14 1 9 1 243.88 240.08 239.26 238.97 238.98 239.18 239.55 240.05 240.68 241.4 242.21 243.09 - 244.08 245.14 246.29 247.51 248.81 250.18 251.62 253.14 254.72 256.38 258.08 259.87 261.72 263.65 265.64 267.69 - 269.81 271.99 274.24 276.55 278.92 281.33 283.83 286.39 / - 14 1 10 1 222.43 212.42 211.02 210.49 210.48 210.81 211.36 212.14 213.09 214.19 215.44 216.81 - 218.27 219.88 221.6 223.42 225.3 227.31 229.43 231.58 233.86 236.23 238.64 241.18 243.8 246.46 249.23 252.03 - 254.94 257.93 260.95 264.07 267.23 270.47 273.78 277.14 / - 14 1 11 1 180.45 176.54 175.3 175.23 175.75 176.66 177.93 179.45 181.14 183.09 185.23 187.54 - 190.01 192.64 195.4 198.31 201.49 204.66 207.94 211.33 214.83 218.43 222.13 225.91 229.79 234.04 238.1 242.23 - 246.44 250.73 255.09 259.51 264.01 269.02 273.66 278.41 / - 14 1 12 1 146.6 144.97 145.23 146.4 148.19 150.41 152.96 155.8 158.87 162.18 165.71 169.39 - 173.28 177.34 181.56 185.94 190.48 195.16 199.84 204.79 209.86 215.04 220.34 225.79 231.35 236.77 242.54 248.42 - 254.11 260.19 266.37 272.31 278.68 284.77 291.29 297.91 / - 14 1 13 1 126.54 128.27 131.28 134.66 138.27 142.07 146.09 150.31 154.75 159.41 164.28 169.35 - 174.63 180.11 185.79 191.65 197.7 203.92 210.31 216.87 223.59 230.46 237.48 245.61 253.68 261.57 269.71 277.79 - 285.98 294.34 302.73 311.58 320.24 329.03 337.95 347 / - 14 1 14 1 121.95 125.38 129.22 133.5 138.33 143.69 149.47 155.62 162.12 168.97 176.16 183.67 - 191.5 199.64 208.08 216.81 225.84 235.15 244.75 254.59 264.61 274.83 285.25 295.87 306.71 317.75 329 340.45 - 352.11 363.98 376.72 390.04 403.49 417.23 430.64 444.48 / - 14 1 15 1 119.19 124.6 130.45 137.17 144.74 153.11 162.23 172.04 182.52 193.59 205.2 217.33 - 229.95 243.06 256.64 270.68 285.17 300.12 315.52 331.37 347.67 364.41 381.54 399.01 416.79 434.91 453.38 472.21 - 491.42 511.01 531 552.23 574.29 596.7 619.3 642.37 / - 14 1 16 1 117.17 126.27 136.98 149.15 162.72 177.68 193.92 211.32 229.8 249.31 269.69 290.98 - 313.12 336.11 359.94 384.52 409.95 436.22 463.3 491.21 519.95 549.53 579.91 611.05 642.94 675.38 708.61 742.76 - 779.54 816.63 854.29 892.49 931.67 971.1 1010.61 1050.83 / - 14 1 17 1 119.17 136.03 157.5 181.96 208.85 237.98 268.16 301.22 336.13 371.22 409.65 449.83 - 491.33 534.64 579.74 626.33 673.35 723.78 776.18 830.22 885.93 943.27 1003.53 1064.75 1126 1186.46 1243.01 1295.13 - 1335.56 1381.45 1426.59 1474.96 1524.05 1575.68 1629.2 1678.94 / - 14 1 18 1 128.65 168.27 212.5 259.88 310.76 365.45 424.42 487.51 554.78 625.55 700.54 780.09 - 864.53 953.12 1045.15 1139.43 1235.37 1325 1412.07 1501.42 1595.53 1691.25 1790.35 1887.24 1988.52 2094.35 2198.97 2302.76 - 2414.69 2526.63 2641.42 2754.94 2871.66 2990.03 3110.03 3231.39 / - 14 1 19 1 162.06 231.21 313.28 405.04 505.22 615.66 736.22 867.94 1009.75 1160.98 1310.5 1448.14 - 1598.87 1751.11 1904.67 2073.14 2235.64 2404.33 2576.63 2758.27 2937.18 3129.74 3321.7 3517.01 3713.99 3924.58 4134.4 4347.27 - 4563.9 4787.61 5019.64 5252.85 5492.02 5729.04 5974.5 6227.54 / - 14 1 20 1 221.84 336.81 485.54 669.87 887.56 1126.31 1372.36 1616.01 1883.19 2159.78 2440.84 2751.48 - 3079.91 3404.82 3744.91 4130.61 4498.49 4877.44 5276 5684.68 6107.65 6544.23 6988.72 7433.27 7903.09 8402.07 8883.05 9382.73 - 9900.97 10430.86 10973.78 11548.79 12124.86 12687.28 13294.15 13916.77 / - 14 2 1 1 262.15 262 262.08 262.29 262.59 262.98 263.44 263.97 264.56 265.22 265.93 266.71 - 267.54 268.43 269.38 270.38 271.44 272.55 273.72 274.94 276.22 277.55 278.94 280.38 281.87 283.42 285.02 286.67 - 288.38 290.14 291.95 293.82 295.74 297.71 299.73 301.81 / - 14 2 2 1 262.07 261.92 261.99 262.2 262.5 262.89 263.35 263.88 264.47 265.13 265.84 266.62 - 267.45 268.34 269.29 270.29 271.35 272.46 273.63 274.86 276.13 277.47 278.85 280.29 281.79 283.34 284.94 286.59 - 288.3 290.06 291.88 293.74 295.66 297.64 299.66 301.74 / - 14 2 3 1 261.94 261.77 261.84 262.04 262.34 262.72 263.18 263.71 264.3 264.96 265.67 266.45 - 267.28 268.17 269.12 270.12 271.18 272.3 273.47 274.69 275.97 277.31 278.7 280.14 281.63 283.18 284.79 286.44 - 288.15 289.92 291.74 293.6 295.53 297.5 299.53 301.61 / - 14 2 4 1 261.69 261.49 261.55 261.74 262.04 262.42 262.88 263.4 263.99 264.65 265.36 266.14 - 266.97 267.86 268.81 269.82 270.88 271.99 273.17 274.39 275.68 277.01 278.4 279.85 281.35 282.9 284.51 286.17 - 287.89 289.65 291.48 293.35 295.28 297.26 299.29 301.38 / - 14 2 5 1 261.22 260.98 261.01 261.19 261.48 261.86 262.31 262.83 263.42 264.08 264.79 265.57 - 266.4 267.29 268.25 269.25 270.32 271.44 272.61 273.85 275.13 276.47 277.87 279.32 280.83 282.39 284 285.67 - 287.39 289.17 291 292.88 294.82 296.81 298.85 300.95 / - 14 2 6 1 260.29 259.99 259.98 260.15 260.42 260.79 261.24 261.76 262.35 263 263.72 264.5 - 265.33 266.23 267.19 268.2 269.27 270.4 271.58 272.82 274.12 275.47 276.88 278.34 279.86 281.43 283.06 284.74 - 286.47 288.27 290.11 292.01 293.97 295.97 298.04 300.15 / - 14 2 7 1 258.47 258.05 258 258.14 258.4 258.76 259.2 259.72 260.31 260.96 261.68 262.47 - 263.31 264.22 265.18 266.21 267.29 268.44 269.64 270.89 272.21 273.58 275.01 276.49 278.04 279.63 281.29 283 - 284.76 286.58 288.46 290.39 292.38 294.43 296.53 298.68 / - 14 2 8 1 254.62 253.88 253.63 253.63 253.8 254.1 254.5 255 255.57 256.22 256.95 257.74 - 258.61 259.54 260.53 261.59 262.71 263.9 265.14 266.45 267.82 269.25 270.74 272.29 273.9 275.57 277.3 279.09 - 280.93 282.84 284.8 286.83 288.91 291.05 293.25 295.5 / - 14 2 9 1 244.8 240.55 239.73 239.42 239.42 239.63 240 240.51 241.14 241.87 242.7 243.61 - 244.62 245.71 246.86 248.1 249.42 250.82 252.29 253.83 255.43 257.11 258.86 260.68 262.57 264.53 266.53 268.62 - 270.77 272.99 275.27 277.62 280.01 282.48 285.02 287.62 / - 14 2 10 1 222.9 212.24 210.88 210.4 210.41 210.76 211.36 212.17 213.15 214.28 215.53 216.93 - 218.47 220.12 221.83 223.7 225.66 227.68 229.84 232.08 234.37 236.79 239.29 241.82 244.47 247.16 249.97 252.87 - 255.8 258.83 261.94 265.08 268.32 271.6 274.97 278.39 / - 14 2 11 1 180.16 176.6 175.4 175.32 175.87 176.86 178.1 179.65 181.43 183.41 185.58 187.93 - 190.43 193.1 195.91 198.85 201.93 205.12 208.44 212.06 215.6 219.25 222.99 226.83 230.76 234.77 238.86 243.37 - 247.64 251.98 256.39 260.88 265.43 270.05 274.74 279.98 / - 14 2 12 1 146.63 145.09 145.42 146.61 148.43 150.68 153.26 156.13 159.25 162.59 166.12 169.87 - 173.77 177.86 182.12 186.53 191.1 195.82 200.67 205.67 210.8 215.87 221.21 226.67 232.27 237.99 243.82 249.48 - 255.51 261.66 267.57 273.9 280.35 286.5 293.09 299.4 / - 14 2 13 1 126.63 128.45 131.42 134.85 138.5 142.35 146.4 150.67 155.15 159.85 164.75 169.87 - 175.19 180.72 186.43 192.34 198.43 204.7 211.14 217.75 224.51 231.43 238.5 246.31 254.48 262.67 270.83 279.03 - 287.27 295.68 304.35 312.94 321.66 330.51 339.49 348.61 / - 14 2 14 1 122.01 125.53 129.43 133.74 138.58 143.96 149.77 155.97 162.51 169.4 176.63 184.19 - 192.07 200.26 208.74 217.53 226.6 235.96 245.6 255.5 265.58 275.86 286.33 297.02 307.92 319.02 330.33 341.86 - 353.58 365.51 378 391.42 405.02 418.68 432.38 446.18 / - 14 2 15 1 119.11 124.72 130.62 137.39 144.99 153.4 162.56 172.4 182.92 194.03 205.69 217.87 - 230.54 243.7 257.32 271.41 285.95 300.95 316.4 332.3 348.65 365.45 382.64 400.19 418.05 436.25 454.79 473.71 - 492.99 512.66 532.72 553.19 575.36 597.98 620.9 643.97 / - 14 2 16 1 117.05 126.29 137.08 149.32 162.94 177.93 194.2 211.63 230.14 249.69 270.14 291.46 - 313.66 336.7 360.58 385.23 410.71 437.01 464.12 492.05 520.82 550.43 580.82 611.98 643.9 676.4 709.69 743.85 - 779.8 817.01 854.89 893.6 932.74 971.91 1011.89 1051.93 / - 14 2 17 1 119.1 136.1 157.61 182.13 209.05 238.19 268.39 301.44 336.35 372.58 409.9 450.1 - 491.63 534.95 580.04 626.63 673.59 723.96 776.36 830.45 886.15 943.47 1003.02 1064.41 1126.03 1186.6 1244.31 1296.08 - 1338.62 1385.25 1431.07 1480.4 1529.71 1580.21 1635.75 1685.91 / - 14 2 18 1 128.55 168.25 212.57 260.03 310.96 365.83 424.58 487.58 554.76 625.49 700.32 779.7 - 863.96 952.42 1044.49 1138.83 1234.72 1325.17 1414.11 1505.07 1600.42 1691.4 1784.01 1873.92 1967.66 2065.36 2162.97 2258.85 - 2359.81 2466.71 2569.7 2673.4 2781.33 2890.09 3000 3109.33 / - 14 2 19 1 161.94 230.98 312.74 404.43 505.32 615.63 734.94 867.18 1008.93 1160.04 1310.06 1448.29 - 1599.67 1752.63 1908.22 2078.94 2243.62 2414.23 2587.55 2771.23 2952.72 3147.06 3340.95 3538.4 3737.55 3950.32 4162.26 4377.64 - 4596.55 4822.55 5056.85 5292.78 5534.23 5774.01 6022.2 6277.74 / - 14 2 20 1 221.69 336.72 483.87 669.47 882.44 1125.59 1372 1616.58 1875.93 2151.53 2444.83 2756.89 - 3068.91 3413.71 3756.37 4112.47 4514.94 4899.06 5302.8 5715.03 6144.68 6570.68 7035.97 7485.58 7960.58 8464.88 8958.46 9455.55 - 9978.78 10514.06 11062.98 11644.38 12226.42 12795.18 13408.39 14037.65 / - 14 3 1 1 263.99 263.83 263.9 264.11 264.41 264.8 265.26 265.79 266.38 267.04 267.76 268.53 - 269.37 270.26 271.21 272.21 273.28 274.39 275.57 276.79 278.08 279.41 280.8 282.25 283.75 285.3 286.91 288.57 - 290.29 292.05 293.88 295.75 297.68 299.66 301.69 303.78 / - 14 3 2 1 263.92 263.75 263.81 264.02 264.32 264.71 265.17 265.69 266.29 266.94 267.66 268.44 - 269.27 270.16 271.11 272.12 273.18 274.3 275.47 276.7 277.98 279.32 280.71 282.16 283.66 285.22 286.83 288.49 - 290.2 291.97 293.8 295.67 297.6 299.58 301.62 303.71 / - 14 3 3 1 263.78 263.59 263.65 263.85 264.15 264.53 264.99 265.52 266.11 266.77 267.48 268.26 - 269.1 269.99 270.94 271.95 273.01 274.13 275.3 276.53 277.82 279.16 280.55 282 283.5 285.06 286.67 288.33 - 290.05 291.82 293.65 295.53 297.46 299.44 301.48 303.57 / - 14 3 4 1 263.51 263.3 263.35 263.54 263.84 264.22 264.68 265.2 265.79 266.45 267.16 267.94 - 268.78 269.67 270.62 271.63 272.69 273.81 274.99 276.22 277.51 278.85 280.25 281.7 283.2 284.76 286.38 288.05 - 289.77 291.55 293.38 295.26 297.2 299.19 301.23 303.33 / - 14 3 5 1 263.02 262.77 262.79 262.97 263.26 263.63 264.09 264.61 265.2 265.86 266.57 267.35 - 268.19 269.08 270.03 271.05 272.11 273.24 274.42 275.65 276.94 278.29 279.69 281.15 282.66 284.23 285.85 287.52 - 289.25 291.04 292.88 294.77 296.72 298.72 300.77 302.88 / - 14 3 6 1 262.05 261.73 261.73 261.89 262.16 262.53 262.98 263.5 264.09 264.75 265.46 266.24 - 267.08 267.98 268.94 269.95 271.03 272.16 273.35 274.59 275.89 277.25 278.66 280.13 281.65 283.23 284.87 286.55 - 288.3 290.1 291.95 293.86 295.83 297.84 299.92 302.04 / - 14 3 7 1 260.14 259.72 259.67 259.8 260.06 260.42 260.86 261.38 261.97 262.63 263.35 264.14 - 264.98 265.89 266.86 267.89 268.98 270.12 271.33 272.59 273.91 275.29 276.72 278.21 279.76 281.36 283.03 284.74 - 286.52 288.35 290.23 292.18 294.18 296.23 298.34 300.51 / - 14 3 8 1 256.01 255.19 254.89 254.86 255.02 255.3 255.7 256.18 256.76 257.41 258.14 258.93 - 259.8 260.73 261.73 262.8 263.93 265.12 266.38 267.7 269.08 270.52 272.03 273.59 275.21 276.9 278.65 280.45 - 282.32 284.24 286.23 288.27 290.37 292.53 294.75 297.02 / - 14 3 9 1 245.69 240.98 240.1 239.78 239.77 239.99 240.37 240.89 241.53 242.27 243.11 244.05 - 245.07 246.18 247.37 248.62 249.96 251.38 252.88 254.45 256.09 257.81 259.57 261.43 263.35 265.34 267.38 269.51 - 271.7 273.95 276.26 278.65 281.1 283.61 286.17 288.81 / - 14 3 10 1 222.8 212.08 210.74 210.29 210.34 210.72 211.35 212.18 213.18 214.35 215.66 217.08 - 218.65 220.31 222.11 224 225.99 228.09 230.25 232.55 234.93 237.36 239.91 242.54 245.21 247.99 250.81 253.73 - 256.73 259.77 262.92 266.11 269.41 272.77 276.17 279.66 / - 14 3 11 1 180.17 176.62 175.45 175.46 176.04 177.01 178.33 179.91 181.72 183.67 185.86 188.23 - 190.76 193.56 196.41 199.39 202.51 205.75 209.11 212.58 216.16 219.85 223.87 227.76 231.73 235.8 239.95 244.18 - 248.48 253.24 257.71 262.25 266.86 271.54 276.29 281.1 / - 14 3 12 1 146.67 145.23 145.6 146.78 148.61 150.88 153.55 156.46 159.6 162.98 166.57 170.35 - 174.28 178.46 182.76 187.22 191.72 196.48 201.37 206.4 211.57 216.86 222.26 227.77 233.43 238.96 244.84 250.82 - 256.92 262.81 269.1 275.51 281.64 288.24 294.53 301.28 / - 14 3 13 1 126.72 128.64 131.56 135.04 138.73 142.62 146.72 151.03 155.55 160.28 165.23 170.39 - 175.75 181.32 187.08 193.03 199.17 205.48 211.97 218.62 225.43 232.4 239.53 247 255.25 263.62 271.79 280.21 - 288.56 297.02 305.66 314.3 323.09 332 341.05 350.22 / - 14 3 14 1 122.07 125.69 129.63 133.99 138.84 144.23 150.07 156.31 162.9 169.83 177.11 184.71 - 192.64 200.87 209.41 218.24 227.36 236.77 246.46 256.41 266.55 276.88 287.42 298.16 309.12 320.29 331.67 343.26 - 355.05 367.05 379.25 392.39 406.13 420.02 433.91 448.01 / - 14 3 15 1 119.04 124.84 130.8 137.61 145.25 153.69 162.88 172.77 183.31 194.47 206.18 218.4 - 231.12 244.33 258.01 272.14 286.73 301.78 317.27 333.22 349.61 366.46 383.72 401.36 419.3 437.58 456.2 475.19 - 494.54 514.29 534.42 554.97 576.37 599.09 622.23 645.63 / - 14 3 16 1 116.95 126.32 137.18 149.49 163.16 178.18 194.48 211.94 230.48 250.05 270.57 291.94 - 314.19 337.28 361.21 385.92 411.45 437.78 464.92 492.88 521.66 551.28 581.7 612.86 644.8 677.38 710.71 744.91 - 779.98 817.74 855.76 894.29 933.26 973.13 1013.13 1053.03 / - 14 3 17 1 119.03 136.16 157.73 182.64 209.26 238.4 268.61 301.66 336.56 372.87 410.12 450.35 - 492.03 535.21 580.31 626.87 674.6 724.06 776.41 830.58 886.3 943.58 1002.75 1064.3 1126.23 1187.07 1245.22 1295.54 - 1342.21 1390.37 1438.58 1488.85 1540.41 1591.97 1648.81 1701.72 / - 14 3 18 1 128.44 168.17 212.7 260.27 311.25 366.03 424.74 487.64 554.71 625.41 700.06 779.26 - 863.33 951.62 1043.71 1138.11 1233.91 1321.93 1405.52 1490.42 1579.99 1669.92 1765.7 1855.9 1952.68 2053.15 2149.58 2250.8 - 2350 2456.57 2562.21 2668.96 2777.47 2886.86 2995.29 3107.41 / - 14 3 19 1 161.81 230.59 312.18 404.51 504.5 614.31 734.69 864.22 1008.07 1158.99 1304.9 1448.38 - 1593.59 1753.98 1910.42 2073.37 2250.21 2423.12 2598.91 2784.87 2968.72 3160.21 3361.1 3560.76 3762.3 3977.3 4191.52 4409.39 - 4629.37 4859.26 5095.89 5324.89 5578.66 5821.18 6072.28 6330.48 / - 14 3 20 1 221.54 336.64 480.64 666.42 877.82 1119.12 1367.04 1611.53 1877.43 2154.23 2448.92 2762.42 - 3076.04 3422.81 3769.91 4125.37 4530.04 4917.84 5327.42 5741.8 6180.55 6611.86 7082.86 7537.84 8018.33 8509.01 9031.51 9530.29 - 10058.96 10599.98 11155.65 11743.83 12332.54 12907.94 13528.17 14164.32 / - 14 4 1 1 265.84 265.66 265.73 265.93 266.23 266.62 267.08 267.61 268.2 268.86 269.57 270.35 - 271.19 272.08 273.03 274.04 275.11 276.23 277.4 278.64 279.92 281.27 282.66 284.11 285.62 287.18 288.79 290.46 - 292.18 293.96 295.79 297.67 299.61 301.6 303.65 305.74 / - 14 4 2 1 265.76 265.57 265.63 265.83 266.13 266.52 266.98 267.51 268.1 268.76 269.47 270.25 - 271.09 271.98 272.93 273.94 275.01 276.13 277.31 278.54 279.83 281.17 282.57 284.02 285.53 287.09 288.7 290.37 - 292.1 293.87 295.71 297.59 299.53 301.52 303.57 305.67 / - 14 4 3 1 265.61 265.41 265.46 265.66 265.96 266.34 266.8 267.33 267.92 268.58 269.29 270.07 - 270.91 271.8 272.75 273.76 274.83 275.95 277.13 278.36 279.65 281 282.4 283.85 285.36 286.92 288.54 290.21 - 291.94 293.72 295.55 297.44 299.38 301.37 303.42 305.53 / - 14 4 4 1 265.34 265.11 265.15 265.34 265.64 266.02 266.47 267 267.59 268.24 268.96 269.74 - 270.58 271.47 272.43 273.44 274.5 275.63 276.81 278.04 279.33 280.68 282.08 283.54 285.05 286.62 288.24 289.91 - 291.64 293.43 295.27 297.16 299.11 301.11 303.16 305.27 / - 14 4 5 1 264.82 264.55 264.57 264.75 265.04 265.41 265.86 266.39 266.98 267.63 268.35 269.13 - 269.97 270.86 271.82 272.83 273.9 275.03 276.21 277.45 278.75 280.1 281.51 282.97 284.49 286.06 287.69 289.37 - 291.11 292.9 294.75 296.65 298.6 300.61 302.68 304.79 / - 14 4 6 1 263.81 263.48 263.46 263.62 263.9 264.27 264.72 265.24 265.83 266.48 267.2 267.98 - 268.82 269.72 270.68 271.7 272.78 273.91 275.1 276.35 277.66 279.02 280.43 281.91 283.44 285.02 286.66 288.36 - 290.11 291.92 293.78 295.7 297.67 299.7 301.78 303.92 / - 14 4 7 1 261.81 261.38 261.32 261.46 261.72 262.08 262.52 263.04 263.63 264.29 265.01 265.8 - 266.65 267.56 268.53 269.56 270.65 271.8 273.01 274.27 275.6 276.98 278.42 279.92 281.47 283.08 284.75 286.48 - 288.26 290.1 291.99 293.94 295.95 298.02 300.14 302.32 / - 14 4 8 1 257.35 256.44 256.08 256 256.14 256.42 256.81 257.3 257.87 258.52 259.25 260.05 - 260.93 261.87 262.88 263.95 265.09 266.29 267.56 268.89 270.28 271.74 273.26 274.84 276.48 278.18 279.94 281.76 - 283.65 285.59 287.6 289.66 291.78 293.96 296.2 298.5 / - 14 4 9 1 246.54 241.32 240.39 240.06 240.05 240.27 240.65 241.19 241.82 242.58 243.44 244.39 - 245.43 246.56 247.78 249.07 250.44 251.89 253.42 255.02 256.66 258.41 260.23 262.12 264.08 266.1 268.18 270.34 - 272.57 274.87 277.23 279.64 282.13 284.69 287.3 289.98 / - 14 4 10 1 222.69 211.88 210.58 210.18 210.26 210.67 211.34 212.21 213.24 214.44 215.76 217.24 - 218.84 220.54 222.38 224.31 226.34 228.49 230.72 233.06 235.45 237.98 240.54 243.23 245.99 248.79 251.71 254.66 - 257.72 260.85 264 267.26 270.55 273.96 277.41 280.95 / - 14 4 11 1 180.2 176.65 175.57 175.56 176.17 177.21 178.52 180.12 181.95 183.98 186.21 188.62 - 191.19 193.92 196.79 199.81 202.95 206.39 209.79 213.31 216.94 220.67 224.5 228.42 232.72 236.84 241.04 245.32 - 249.69 254.13 258.64 263.64 268.31 273.05 277.86 282.73 / - 14 4 12 1 146.72 145.38 145.77 147.02 148.88 151.15 153.74 156.75 159.96 163.39 166.98 170.79 - 174.79 178.98 183.31 187.81 192.46 197.25 202.2 207.28 212.5 217.67 223.13 228.69 234.36 240.18 246.12 251.89 - 258.03 264.28 270.31 276.76 283.32 289.6 296.35 302.79 / - 14 4 13 1 126.84 128.83 131.7 135.22 138.96 142.89 147.03 151.38 155.94 160.72 165.71 170.91 - 176.31 181.92 187.72 193.72 199.9 206.26 212.79 219.49 226.36 233.38 240.55 247.87 255.97 264.45 272.78 281.16 - 289.86 298.37 307.06 316.01 324.88 333.88 343.01 352.27 / - 14 4 14 1 122.15 125.85 129.84 134.24 139.1 144.51 150.38 156.65 163.28 170.26 177.58 185.23 - 193.2 201.48 210.07 218.95 228.12 237.58 247.32 257.32 267.52 277.91 288.5 299.31 310.33 321.56 333 344.65 - 356.52 368.58 380.86 393.33 407.17 421.23 435.4 449.52 / - 14 4 15 1 118.98 124.92 130.98 137.82 145.5 153.98 163.2 173.13 183.7 194.9 206.66 218.94 - 231.71 244.96 258.68 272.87 287.51 302.6 318.14 334.13 350.57 367.47 384.79 402.5 420.53 438.88 457.58 476.65 - 496.09 515.9 536.12 556.73 577.75 600.13 623.43 647.1 / - 14 4 16 1 116.88 126.35 137.28 149.66 163.38 178.43 194.75 212.25 230.82 250.41 270.98 292.41 - 314.7 337.84 361.81 386.6 412.17 438.54 465.7 493.68 522.48 552.12 582.55 613.71 645.63 678.3 711.7 745.92 - 780.99 817.88 856.01 894.77 934.33 973.67 1013.93 1054.3 / - 14 4 17 1 118.98 136.23 157.84 182.8 209.47 238.62 269.24 301.87 336.76 373.51 410.33 450.63 - 492.39 535.46 580.53 627.07 674.34 724.11 776.37 830.55 886.33 943.62 1002.35 1063.56 1125.78 1187.18 1245.95 1297.7 - 1345.84 1395.58 1445.53 1498.14 1550.66 1604.02 1661.82 1717.07 / - 14 4 18 1 128.35 168.14 212.74 260.4 311.42 366.22 424.9 487.7 554.65 625.29 699.78 778.76 - 862.62 950.7 1042.46 1137.28 1232.92 1321.74 1406.37 1492.35 1583.31 1673.31 1770.99 1862.02 1960.19 2060.42 2159.39 2260.86 - 2360.72 2468.52 2575.54 2683.54 2793.33 2904.14 3016.05 3129.68 / - 14 4 19 1 161.69 230.46 312.15 403.81 504.58 614.25 733.61 863.63 1007.15 1157.87 1304.22 1448.34 - 1594.18 1755.24 1912.5 2076.26 2254.77 2430.38 2608.87 2796.37 2983.36 3178.14 3381.61 3583.97 3788.17 3998.77 4222.36 4442.73 - 4667.4 4897.96 5136.91 5369.16 5625.51 5868.97 6124.83 6386.09 / - 14 4 20 1 221.38 336.56 478.09 663.11 876.85 1118.31 1362.03 1612.07 1878.95 2157.03 2453.12 2768.15 - 3083.45 3432.25 3781.37 4138.72 4545.77 4935.89 5348.87 5765.73 6210.64 6651.54 7128.78 7589.64 8076.02 8572.99 9101.61 9606.31 - 10140.96 10688.39 11251.06 11846.94 12442.73 13025.55 13653.16 14297.02 / - 14 5 1 1 267.74 267.52 267.57 267.76 268.06 268.44 268.9 269.43 270.02 270.68 271.39 272.17 - 273.01 273.91 274.86 275.87 276.94 278.06 279.24 280.48 281.77 283.12 284.52 285.97 287.49 289.05 290.67 292.35 - 294.08 295.86 297.7 299.59 301.54 303.54 305.59 307.7 / - 14 5 2 1 267.65 267.43 267.47 267.66 267.96 268.34 268.8 269.33 269.92 270.57 271.29 272.07 - 272.91 273.8 274.76 275.77 276.84 277.96 279.14 280.38 281.67 283.02 284.42 285.88 287.39 288.96 290.58 292.25 - 293.99 295.77 297.61 299.5 301.45 303.45 305.51 307.62 / - 14 5 3 1 267.5 267.26 267.3 267.48 267.78 268.16 268.61 269.14 269.73 270.39 271.1 271.88 - 272.72 273.62 274.57 275.58 276.65 277.78 278.96 280.19 281.49 282.84 284.24 285.7 287.21 288.78 290.41 292.09 - 293.82 295.61 297.45 299.34 301.29 303.3 305.36 307.47 / - 14 5 4 1 267.21 266.95 266.97 267.15 267.44 267.82 268.27 268.8 269.39 270.04 270.76 271.54 - 272.38 273.27 274.23 275.24 276.31 277.44 278.62 279.86 281.16 282.51 283.91 285.38 286.89 288.47 290.09 291.78 - 293.51 295.3 297.15 299.05 301.01 303.02 305.08 307.2 / - 14 5 5 1 266.66 266.36 266.37 266.54 266.82 267.19 267.64 268.16 268.75 269.41 270.13 270.91 - 271.74 272.64 273.6 274.62 275.69 276.82 278 279.25 280.55 281.9 283.32 284.78 286.31 287.89 289.52 291.21 - 292.95 294.75 296.61 298.52 300.48 302.5 304.57 306.7 / - 14 5 6 1 265.59 265.23 265.21 265.37 265.64 266 266.45 266.97 267.56 268.21 268.93 269.71 - 270.56 271.46 272.42 273.44 274.52 275.66 276.85 278.1 279.41 280.78 282.2 283.68 285.21 286.81 288.45 290.16 - 291.92 293.73 295.6 297.53 299.51 301.55 303.64 305.79 / - 14 5 7 1 263.48 263.03 262.97 263.11 263.36 263.72 264.16 264.68 265.27 265.93 266.66 267.45 - 268.3 269.21 270.18 271.22 272.31 273.46 274.67 275.94 277.27 278.66 280.1 281.61 283.17 284.79 286.46 288.19 - 289.98 291.83 293.74 295.7 297.71 299.79 301.92 304.11 / - 14 5 8 1 258.64 257.61 257.15 257.04 257.17 257.44 257.83 258.31 258.89 259.54 260.28 261.09 - 261.97 262.91 263.93 265.02 266.17 267.38 268.66 270 271.41 272.88 274.41 276 277.66 279.38 281.16 283 - 284.91 286.87 288.89 290.98 293.12 295.33 297.59 299.91 / - 14 5 9 1 247.36 241.54 240.59 240.25 240.24 240.46 240.85 241.39 242.05 242.82 243.7 244.67 - 245.74 246.89 248.13 249.45 250.82 252.3 253.86 255.49 257.2 258.98 260.84 262.73 264.73 266.8 268.93 271.14 - 273.41 275.73 278.13 280.6 283.14 285.73 288.39 291.12 / - 14 5 10 1 223.13 211.64 210.42 210.07 210.19 210.64 211.33 212.22 213.29 214.52 215.9 217.4 - 219.03 220.78 222.64 224.63 226.71 228.89 231.17 233.54 236.03 238.58 241.21 243.96 246.74 249.65 252.58 255.64 - 258.76 261.92 265.18 268.47 271.86 275.28 278.79 282.33 / - 14 5 11 1 180.25 176.71 175.63 175.71 176.35 177.38 178.75 180.35 182.21 184.27 186.53 188.96 - 191.56 194.32 197.3 200.35 203.54 206.86 210.3 213.85 217.72 221.5 225.38 229.35 233.42 237.58 242.14 246.48 - 250.9 255.4 259.97 264.62 269.33 274.57 279.44 284.38 / - 14 5 12 1 146.78 145.52 145.98 147.27 149.15 151.45 154.06 156.94 160.29 163.76 167.41 171.27 - 175.3 179.52 183.87 188.39 193.08 197.91 202.89 208.01 213.27 218.65 224.17 229.79 235.32 241.16 247.14 253.23 - 259.44 265.44 271.86 278.38 284.64 291.36 297.77 304.69 / - 14 5 13 1 126.96 129.02 131.86 135.41 139.18 143.16 147.34 151.73 156.33 161.15 166.18 171.42 - 176.87 182.52 188.37 194.4 200.63 207.04 213.62 220.37 227.28 234.35 241.57 248.94 256.46 265.25 273.71 282.38 - 290.86 299.63 308.46 317.38 326.31 335.37 344.57 353.9 / - 14 5 14 1 122.24 126.01 130.05 134.48 139.37 144.79 150.68 156.99 163.66 170.69 178.05 185.74 - 193.76 202.09 210.73 219.66 228.88 238.39 248.18 258.23 268.48 278.93 289.58 300.45 311.53 322.82 334.33 346.05 - 357.98 370.12 382.46 395.01 408.15 422.32 436.68 451.08 / - 14 5 15 1 118.93 124.99 131.15 138.04 145.76 154.26 163.53 173.49 184.1 195.33 207.14 219.47 - 232.29 245.59 259.36 273.59 288.28 303.42 319.01 335.04 351.52 368.46 385.84 403.63 421.74 440.17 458.95 478.09 - 497.6 517.49 537.77 558.46 579.55 601.07 624.49 648.39 / - 14 5 16 1 116.83 126.37 137.38 149.82 163.59 178.68 195.03 212.55 231.15 250.77 271.36 292.86 - 315.19 338.38 362.4 387.24 412.87 439.26 466.45 494.45 523.27 552.92 583.35 614.52 646.42 679.14 712.62 746.9 - 781.99 817.91 856.13 895.07 934.53 974.63 1014.59 1055.13 / - 14 5 17 1 118.94 136.28 158.1 182.96 210.17 238.83 270.02 302.08 336.96 373.69 410.58 450.82 - 492.57 535.84 580.75 627.22 675.3 724.08 776.23 830.39 886.2 943.51 1002.24 1063.11 1125.59 1187.48 1246.75 1299.5 - 1349.61 1400.81 1452.54 1506.85 1561.19 1617.04 1674.23 1732.82 / - 14 5 18 1 128.26 168.04 212.79 260.52 311.59 366.48 425.05 487.75 554.57 625.21 699.45 778.24 - 861.85 949.71 1041.39 1136.33 1231.71 1321.43 1407.16 1493.9 1585.65 1677.6 1775.19 1870.72 1970.08 2069.16 2167.9 2272.26 - 2373.37 2482.5 2590.92 2700.33 2811.57 2924 3037.53 3151.74 / - 14 5 19 1 161.55 230.32 311.55 403.05 503.57 614.19 732.62 863.03 1003.1 1152.49 1303.41 1448.18 - 1594.66 1756.43 1914.49 2079.16 2258.65 2435.46 2616.31 2805.89 2996.48 3194.87 3401.24 3606.57 3813.78 4027.42 4253.99 4477.42 - 4708.4 4938.74 5180.32 5415.8 5664.89 5928.39 6180.42 6444.65 / - 14 5 20 1 221.21 336.49 474 659.81 871.61 1111.73 1361.54 1608.37 1880.52 2159.91 2457.47 2754.45 - 3091.16 3442.08 3792.98 4152.65 4529.4 4956.04 5370.09 5790.09 6236.73 6688.56 7155.8 7640.06 8132.91 8636.45 9149.61 9683.27 - 10224.4 10778.76 11348.85 11935.06 12556.77 13147.54 13783.21 14435.22 / - 14 6 1 1 269.87 269.51 269.5 269.67 269.95 270.31 270.76 271.28 271.87 272.52 273.24 274.02 - 274.85 275.75 276.7 277.71 278.78 279.91 281.09 282.33 283.62 284.97 286.38 287.84 289.36 290.93 292.56 294.24 - 295.97 297.76 299.61 301.51 303.46 305.47 307.54 309.65 / - 14 6 2 1 269.78 269.42 269.4 269.56 269.84 270.21 270.66 271.18 271.77 272.42 273.13 273.91 - 274.75 275.64 276.6 277.61 278.68 279.8 280.99 282.22 283.52 284.87 286.28 287.74 289.26 290.83 292.46 294.14 - 295.88 297.67 299.52 301.42 303.37 305.38 307.45 309.57 / - 14 6 3 1 269.62 269.24 269.22 269.38 269.65 270.02 270.47 270.99 271.57 272.22 272.94 273.72 - 274.55 275.45 276.4 277.41 278.48 279.61 280.8 282.04 283.33 284.68 286.09 287.56 289.07 290.65 292.28 293.96 - 295.7 297.5 299.35 301.25 303.21 305.22 307.29 309.41 / - 14 6 4 1 269.32 268.92 268.89 269.04 269.31 269.67 270.12 270.63 271.22 271.87 272.59 273.36 - 274.2 275.09 276.05 277.06 278.13 279.26 280.45 281.69 282.99 284.34 285.75 287.22 288.74 290.32 291.95 293.64 - 295.38 297.18 299.04 300.95 302.91 304.93 307 309.13 / - 14 6 5 1 268.75 268.31 268.26 268.4 268.66 269.02 269.46 269.98 270.56 271.21 271.93 272.71 - 273.54 274.44 275.4 276.41 277.49 278.62 279.81 281.05 282.36 283.72 285.13 286.6 288.13 289.72 291.35 293.05 - 294.8 296.61 298.47 300.39 302.36 304.39 306.47 308.61 / - 14 6 6 1 267.65 267.15 267.07 267.19 267.44 267.79 268.23 268.74 269.33 269.98 270.69 271.47 - 272.31 273.21 274.18 275.2 276.28 277.41 278.61 279.87 281.18 282.55 283.97 285.46 287 288.59 290.25 291.96 - 293.72 295.54 297.42 299.36 301.35 303.39 305.5 307.66 / - 14 6 7 1 265.46 264.87 264.75 264.85 265.08 265.43 265.86 266.37 266.96 267.61 268.33 269.11 - 269.96 270.87 271.85 272.88 273.98 275.13 276.34 277.62 278.95 280.34 281.79 283.3 284.86 286.49 288.17 289.91 - 291.71 293.56 295.47 297.44 299.47 301.56 303.7 305.9 / - 14 6 8 1 260.23 258.83 258.24 258.11 258.2 258.43 258.81 259.29 259.86 260.52 261.25 262.06 - 262.95 263.9 264.93 266.02 267.18 268.41 269.7 271.06 272.48 273.97 275.52 277.13 278.8 280.54 282.34 284.2 - 286.13 288.11 290.12 292.23 294.4 296.63 298.92 301.27 / - 14 6 9 1 248.48 241.8 240.82 240.41 240.39 240.6 241 241.54 242.21 243 243.89 244.88 - 245.97 247.12 248.38 249.73 251.16 252.67 254.27 255.93 257.65 259.47 261.36 263.33 265.36 267.47 269.62 271.87 - 274.19 276.57 279.02 281.52 284.1 286.75 289.46 292.24 / - 14 6 10 1 223.23 211.49 210.29 209.95 210.09 210.56 211.28 212.21 213.31 214.58 216 217.55 - 219.24 221.02 222.92 224.95 227.07 229.3 231.63 234.05 236.57 239.19 241.88 244.68 247.55 250.49 253.5 256.62 - 259.77 263.04 266.33 269.73 273.15 276.68 280.24 283.88 / - 14 6 11 1 180.3 176.71 175.75 175.82 176.49 177.58 178.95 180.61 182.46 184.56 186.84 189.3 - 191.93 194.78 197.73 200.82 204.05 207.49 210.98 214.58 218.29 222.1 226.26 230.29 234.41 238.62 242.92 247.31 - 252.12 256.68 261.31 266.02 270.8 275.65 280.56 286.04 / - 14 6 12 1 146.92 145.68 146.2 147.51 149.42 151.74 154.39 157.3 160.48 164.12 167.81 171.69 - 175.79 180.06 184.44 189.07 193.8 198.69 203.58 208.74 214.03 219.46 225.02 230.7 236.48 242.38 248.42 254.3 - 260.56 266.93 273.41 279.64 286.33 292.73 299.61 306.6 / - 14 6 13 1 127.1 129.21 132.04 135.59 139.41 143.42 147.65 152.08 156.72 161.58 166.65 171.93 - 177.42 183.12 189.01 195.09 201.36 207.81 214.44 221.24 228.2 235.32 242.59 250.02 257.59 265.76 274.58 283.42 - 292.09 300.84 309.67 318.85 327.74 336.87 346.14 355.53 / - 14 6 14 1 122.33 126.17 130.25 134.73 139.64 145.07 150.99 157.33 164.04 171.11 178.52 186.26 - 194.32 202.69 211.38 220.36 229.64 239.19 249.03 259.13 269.45 279.95 290.66 301.59 312.73 324.08 335.65 347.44 - 359.43 371.64 384.05 396.67 409.49 423.35 437.86 452.11 / - 14 6 15 1 118.88 125.04 131.32 138.26 146.01 154.55 163.85 173.85 184.49 195.76 207.61 219.99 - 232.86 246.21 260.03 274.31 289.05 304.23 319.86 335.94 352.46 369.44 386.86 404.72 422.91 441.43 460.28 479.5 - 499.08 519.05 539.41 560.16 581.32 602.91 625.43 649.44 / - 14 6 16 1 116.8 126.39 137.48 149.98 163.8 178.93 195.3 212.85 231.48 251.13 271.74 293.29 - 315.67 338.9 362.96 387.86 413.53 439.96 467.18 495.2 524.03 553.68 584.12 615.28 647.15 679.88 713.47 747.81 - 782.93 818.86 856.1 895.68 934.78 975.23 1015.6 1055.93 / - 14 6 17 1 118.89 136.34 158.21 183.12 210.36 239.05 270.23 302.28 337.14 373.85 410.77 450.96 - 492.86 535.99 580.99 627.33 675.3 723.98 776.02 830.04 885.93 943.26 1001.99 1061.94 1124.64 1187.13 1247.1 1301.12 - 1353.34 1406.77 1459.6 1515.68 1573.01 1629.49 1688.58 1749.94 / - 14 6 18 1 128.19 168.01 212.8 260.63 311.82 366.65 425.23 487.8 554.48 625.11 699.11 777.66 - 861.02 948.64 1040.11 1135.2 1230.27 1319.36 1406.01 1495.02 1586.8 1679.71 1778.14 1875.2 1975.13 2075.29 2176.51 2282.3 - 2384.58 2492.87 2604.73 2715.72 2828.35 2942.25 3057.41 3178.74 / - 14 6 19 1 161.42 230.19 310.94 403.04 503.6 612.75 732.34 862.41 1002.07 1151.22 1302.39 1447.86 - 1595 1757.51 1916.43 2082.02 2255 2440.44 2622.43 2813.55 3006.9 3208.97 3413.27 3627.62 3838.36 4055.39 4277.52 4512.24 - 4743.16 4980.39 5225.27 5464.1 5716.69 5983.52 6239.07 6506.62 / - 14 6 20 1 221.04 336.44 470.72 656.52 866.92 1105.1 1355.77 1605.21 1870.08 2162.87 2461.99 2760.69 - 3099.19 3430.76 3805.23 4167.22 4546.45 4980.15 5392.35 5815.3 6260.75 6717.51 7195.83 7687.74 8187.83 8698.52 9219.17 9760.29 - 10308.52 10870.67 11448.81 12043.41 12650.62 13273.76 13918.13 14578.98 / - 14 7 1 1 272 271.51 271.44 271.57 271.83 272.19 272.63 273.14 273.72 274.37 275.08 275.86 - 276.69 277.59 278.54 279.55 280.62 281.75 282.93 284.17 285.47 286.83 288.23 289.7 291.22 292.8 294.43 296.12 - 297.86 299.66 301.51 303.42 305.38 307.4 309.47 311.6 / - 14 7 2 1 271.91 271.41 271.34 271.47 271.72 272.08 272.52 273.03 273.61 274.26 274.97 275.75 - 276.58 277.48 278.43 279.44 280.51 281.64 282.82 284.07 285.36 286.72 288.13 289.6 291.12 292.69 294.33 296.02 - 297.76 299.56 301.41 303.32 305.29 307.31 309.38 311.51 / - 14 7 3 1 271.74 271.23 271.15 271.28 271.53 271.88 272.32 272.83 273.41 274.06 274.77 275.55 - 276.38 277.28 278.23 279.24 280.31 281.44 282.63 283.87 285.17 286.52 287.94 289.4 290.93 292.51 294.14 295.83 - 297.58 299.38 301.24 303.15 305.11 307.14 309.21 311.34 / - 14 7 4 1 271.43 270.89 270.81 270.92 271.17 271.52 271.96 272.47 273.05 273.69 274.41 275.18 - 276.02 276.91 277.87 278.88 279.95 281.08 282.27 283.51 284.81 286.17 287.59 289.06 290.58 292.16 293.8 295.5 - 297.25 299.05 300.91 302.83 304.8 306.83 308.91 311.05 / - 14 7 5 1 270.85 270.27 270.16 270.26 270.51 270.85 271.28 271.79 272.37 273.02 273.73 274.5 - 275.34 276.23 277.19 278.21 279.28 280.41 281.6 282.85 284.16 285.52 286.94 288.41 289.95 291.54 293.18 294.88 - 296.64 298.45 300.32 302.25 304.23 306.26 308.36 310.5 / - 14 7 6 1 269.71 269.06 268.92 269.01 269.24 269.58 270 270.51 271.09 271.73 272.44 273.22 - 274.06 274.96 275.92 276.94 278.02 279.16 280.36 281.62 282.93 284.3 285.73 287.22 288.77 290.37 292.03 293.74 - 295.52 297.34 299.23 301.17 303.17 305.23 307.34 309.51 / - 14 7 7 1 267.45 266.69 266.49 266.54 266.75 267.07 267.49 267.98 268.56 269.21 269.92 270.7 - 271.55 272.46 273.43 274.47 275.56 276.72 277.94 279.21 280.55 281.94 283.4 284.91 286.48 288.11 289.8 291.55 - 293.36 295.22 297.14 299.12 301.16 303.26 305.41 307.62 / - 14 7 8 1 261.82 259.96 259.23 259.05 259.1 259.32 259.68 260.14 260.7 261.35 262.08 262.9 - 263.78 264.74 265.78 266.88 268.05 269.29 270.6 271.97 273.4 274.91 276.47 278.1 279.8 281.56 283.38 285.27 - 287.21 289.22 291.3 293.43 295.63 297.88 300.2 302.58 / - 14 7 9 1 249.69 242.02 240.96 240.53 240.46 240.67 241.06 241.61 242.29 243.09 243.98 244.99 - 246.09 247.3 248.59 249.97 251.43 252.98 254.57 256.27 258.05 259.91 261.85 263.86 265.9 268.06 270.28 272.58 - 274.94 277.35 279.85 282.41 285.05 287.75 290.5 293.32 / - 14 7 10 1 223.67 211.36 210.17 209.83 209.99 210.48 211.22 212.17 213.3 214.59 216.03 217.61 - 219.33 221.17 223.13 225.21 227.4 229.7 232.07 234.56 237.13 239.79 242.55 245.39 248.33 251.33 254.41 257.58 - 260.84 264.15 267.52 271 274.49 278.1 281.73 285.46 / - 14 7 11 1 180.37 176.81 175.83 175.97 176.67 177.76 179.16 180.84 182.73 184.85 187.17 189.66 - 192.33 195.19 198.17 201.3 204.64 208.04 211.56 215.2 219.07 222.93 226.9 230.97 235.41 239.67 244.03 248.47 - 252.99 257.59 262.66 267.43 272.27 277.18 282.16 287.22 / - 14 7 12 1 146.99 145.83 146.42 147.75 149.68 152.03 154.71 157.65 160.83 164.34 168.19 172.15 - 176.26 180.56 185.02 189.66 194.42 199.34 204.41 209.62 214.97 220.45 226.06 231.59 237.44 243.39 249.44 255.65 - 261.97 268.09 274.62 281.27 287.65 294.5 301.45 308.09 / - 14 7 13 1 127.23 129.4 132.23 135.76 139.63 143.69 147.95 152.42 157.1 162 167.12 172.44 - 177.98 183.71 189.65 195.78 202.09 208.59 215.26 222.11 229.12 236.29 243.61 251.09 258.72 266.48 275.36 284.15 - 293.17 302.12 311.09 320.1 329.28 338.75 348.1 357.59 / - 14 7 14 1 122.42 126.32 130.46 134.97 139.92 145.36 151.3 157.67 164.42 171.54 178.99 186.77 - 194.88 203.29 212.02 221.05 230.38 239.99 249.88 260.03 270.4 280.96 291.73 302.72 313.92 325.34 336.97 348.82 - 360.88 373.15 385.63 398.32 411.22 424.32 438.49 453.34 / - 14 7 15 1 118.84 125.09 131.5 138.47 146.26 154.84 164.17 174.2 184.89 196.19 208.07 220.49 - 233.43 246.83 260.7 275.03 289.8 305.03 320.7 336.82 353.38 370.39 387.86 405.76 424.04 442.64 461.57 480.86 - 500.52 520.56 540.99 561.81 583.04 604.69 626.77 650.37 / - 14 7 16 1 116.77 126.41 137.58 150.14 164.02 179.18 195.57 213.14 231.8 251.48 272.11 293.69 - 316.13 339.4 363.5 388.43 414.16 440.63 467.87 495.9 524.74 554.4 584.84 615.98 647.83 680.51 714.15 748.59 - 783.78 819.72 856.47 895.6 934.83 975.16 1016.09 1056.43 / - 14 7 17 1 118.85 136.39 158.32 183.27 210.55 239.26 270.43 302.48 337.32 373.99 410.9 451.06 - 492.96 536.16 581.07 627.53 675.26 723.83 775.72 829.6 885.41 942.83 1001.59 1061.56 1123.98 1186.42 1247.31 1302.97 - 1356.61 1411.47 1466.65 1524.55 1583.73 1642.31 1703.01 1766.48 / - 14 7 18 1 128.13 167.88 212.8 260.8 312 366.8 425.48 487.84 554.38 624.94 698.72 777.03 - 860.13 947.47 1038.72 1133.87 1229.28 1319.17 1406.75 1498.18 1589.79 1683.84 1783.35 1881.57 1982.82 2084.28 2186.96 2294.07 - 2398.01 2507.74 2621.1 2733.72 2847.99 2963.52 3080.53 3201.24 / - 14 7 19 1 161.28 230.05 310.5 402.28 502.49 612.69 730.87 860.29 1000.65 1149.88 1301.18 1447.3 - 1595.17 1758.45 1918.23 2084.86 2258.82 2445.45 2629.27 2821.03 3014.57 3218.86 3426.77 3645.07 3860 4081.01 4307.07 4545.66 - 4784.16 5021.67 5270.55 5513.15 5769.55 6031.66 6299.69 6571.07 / - 14 7 20 1 220.89 336.41 467.08 653.29 861.67 1104.22 1355.13 1602.06 1871.7 2151.57 2449.67 2767.24 - 3107.58 3441.24 3818.15 4182.52 4564.36 4962.2 5415.83 5841.86 6290.17 6746.46 7232.27 7726.01 8238.77 8757.63 9286.26 9810.1 - 10391.98 10962.8 11549.8 12153.65 12770.45 13408.58 14057.43 14727.92 / - 14 8 1 1 274.12 273.5 273.38 273.48 273.71 274.06 274.49 274.99 275.57 276.21 276.92 277.69 - 278.53 279.42 280.37 281.39 282.46 283.59 284.77 286.01 287.31 288.67 290.08 291.55 293.08 294.66 296.3 297.99 - 299.74 301.54 303.4 305.32 307.29 309.31 311.39 313.53 / - 14 8 2 1 274.03 273.4 273.27 273.37 273.6 273.95 274.37 274.88 275.46 276.1 276.81 277.58 - 278.41 279.31 280.26 281.27 282.34 283.47 284.66 285.9 287.2 288.56 289.97 291.44 292.97 294.55 296.19 297.88 - 299.63 301.44 303.3 305.22 307.19 309.22 311.3 313.44 / - 14 8 3 1 273.86 273.21 273.08 273.17 273.4 273.74 274.17 274.67 275.25 275.89 276.6 277.37 - 278.21 279.1 280.05 281.07 282.14 283.27 284.45 285.7 287 288.36 289.77 291.24 292.77 294.36 296 297.69 - 299.44 301.25 303.11 305.03 307.01 309.04 311.12 313.26 / - 14 8 4 1 273.55 272.87 272.72 272.81 273.04 273.37 273.8 274.3 274.87 275.52 276.22 276.99 - 277.83 278.72 279.68 280.69 281.76 282.89 284.08 285.33 286.63 287.99 289.41 290.88 292.41 294 295.64 297.34 - 299.1 300.91 302.78 304.7 306.68 308.72 310.81 312.95 / - 14 8 5 1 272.94 272.22 272.05 272.13 272.35 272.68 273.1 273.6 274.17 274.81 275.52 276.29 - 277.12 278.02 278.98 279.99 281.07 282.2 283.39 284.64 285.95 287.31 288.74 290.22 291.75 293.35 295 296.7 - 298.47 300.29 302.16 304.09 306.08 308.13 310.23 312.38 / - 14 8 6 1 271.77 270.97 270.77 270.82 271.03 271.36 271.77 272.27 272.84 273.48 274.19 274.96 - 275.8 276.7 277.66 278.68 279.76 280.9 282.1 283.36 284.67 286.05 287.48 288.97 290.52 292.13 293.79 295.52 - 297.29 299.13 301.02 302.97 304.98 307.04 309.16 311.34 / - 14 8 7 1 269.4 268.44 268.15 268.15 268.32 268.62 269.02 269.51 270.07 270.71 271.42 272.2 - 273.04 273.95 274.92 275.96 277.05 278.21 279.43 280.71 282.05 283.45 284.92 286.44 288.02 289.65 291.35 293.11 - 294.93 296.8 298.74 300.73 302.78 304.89 307.06 309.28 / - 14 8 8 1 263.36 260.94 260.11 259.87 259.89 260.09 260.43 260.89 261.45 262.1 262.83 263.65 - 264.54 265.51 266.55 267.67 268.85 270.11 271.43 272.82 274.27 275.8 277.38 279.04 280.75 282.54 284.38 286.29 - 288.27 290.3 292.4 294.56 296.79 299.07 301.42 303.83 / - 14 8 9 1 250.89 242.15 240.99 240.52 240.43 240.63 241.02 241.58 242.25 243.06 243.99 245.02 - 246.15 247.38 248.7 250.11 251.61 253.15 254.82 256.56 258.39 260.29 262.23 264.28 266.41 268.61 270.88 273.2 - 275.61 278.09 280.65 283.27 285.93 288.69 291.51 294.39 / - 14 8 10 1 223.88 211.23 210.05 209.73 209.9 210.41 211.16 212.13 213.28 214.6 216.07 217.68 - 219.42 221.3 223.29 225.41 227.64 229.98 232.42 234.97 237.62 240.36 243.19 246.11 249.1 252.18 255.32 258.57 - 261.88 265.25 268.7 272.23 275.82 279.5 283.23 287 / - 14 8 11 1 180.44 176.83 175.96 176.08 176.83 177.95 179.38 181.07 183.01 185.15 187.5 190.02 - 192.72 195.58 198.63 201.8 205.15 208.58 212.14 215.93 219.73 223.64 227.79 231.91 236.13 240.44 245.14 249.64 - 254.22 258.89 263.62 268.44 273.76 278.73 283.78 288.9 / - 14 8 12 1 147.07 146.02 146.65 147.99 149.95 152.33 155.04 158.02 161.24 164.67 168.52 172.57 - 176.73 181.06 185.61 190.28 195.05 200.01 205.11 210.35 215.74 221.26 226.91 232.7 238.61 244.4 250.5 256.72 - 263.09 269.58 276.18 282.54 289.34 296.27 302.88 310.01 / - 14 8 13 1 127.37 129.59 132.44 135.94 139.84 143.95 148.26 152.78 157.51 162.45 167.6 172.97 - 178.54 184.32 190.3 196.47 202.83 209.37 216.09 222.98 230.03 237.25 244.63 252.16 259.83 267.65 275.86 284.99 - 293.99 303.2 312.17 321.46 330.8 339.96 349.65 359.22 / - 14 8 14 1 122.52 126.48 130.66 135.22 140.21 145.66 151.62 158.02 164.82 171.97 179.46 187.29 - 195.43 203.9 212.66 221.74 231.11 240.77 250.71 260.92 271.34 281.96 292.79 303.83 315.09 326.57 338.26 350.17 - 362.3 374.64 387.19 399.95 412.92 426.09 439.48 454.43 / - 14 8 15 1 118.79 125.13 131.66 138.68 146.51 155.12 164.49 174.55 185.29 196.61 208.53 220.99 - 233.97 247.43 261.35 275.72 290.54 305.81 321.52 337.67 354.27 371.32 388.81 406.75 425.1 443.79 462.81 482.18 - 501.91 522.02 542.52 563.41 584.7 606.41 628.55 651.14 / - 14 8 16 1 116.74 126.43 137.67 150.29 164.23 179.42 195.85 213.43 232.11 251.81 272.47 294.06 - 316.55 339.86 363.99 388.96 414.73 441.24 468.51 496.56 525.41 555.06 585.49 616.64 648.44 681.06 714.65 749.18 - 784.45 820.46 857.21 894.73 934.63 975.19 1016.12 1056.93 / - 14 8 17 1 118.81 136.44 158.42 183.43 210.74 239.47 270.64 302.68 337.49 374.19 412.14 451.14 - 493 536.24 581.11 627.53 675.16 724.47 775.35 829.07 884.71 942.17 1000.99 1060.99 1122.47 1185.85 1247.15 1304.23 - 1359.64 1416.83 1473.71 1533.43 1594.51 1655.43 1717.6 1782.52 / - 14 8 18 1 128.05 167.84 212.79 260.88 312.13 366.96 425.6 487.87 554.27 624.69 698.31 776.36 - 859.17 946.21 1037.19 1132.28 1228.06 1318.5 1406.99 1499.64 1592.74 1688.04 1786.88 1888.19 1989.5 2093.69 2197.85 2306.39 - 2412 2523.36 2638.3 2752.57 2868.64 2985.92 3104.8 3230.54 / - 14 8 19 1 161.14 229.92 310.07 401.5 502.52 611.23 730.43 859.61 999.58 1148.45 1300.13 1441.54 - 1595.22 1750.95 1919.94 2087.55 2262.56 2450.42 2638.23 2828.61 3022.49 3228.62 3438.88 3652.6 3876.46 4102.58 4332.25 4567.12 - 4821.23 5060.6 5313.95 5561.21 5822.02 6088.23 6361 6636.78 / - 14 8 20 1 220.72 336.42 463.48 647.2 856.45 1096.94 1347.28 1597.4 1866.46 2154.74 2454.54 2774.11 - 3116.37 3452.31 3831.8 4198.67 4583.26 4983.94 5440.7 5869.94 6321.3 6777.16 7266.19 7767.64 8263.98 8811.05 9348.77 9882.09 - 10445.59 11053.57 11651.76 12264.3 12891.52 13539.78 14200.13 14881.38 / - 14 9 1 1 276.24 275.48 275.31 275.38 275.6 275.92 276.34 276.84 277.41 278.05 278.76 279.53 - 280.36 281.25 282.2 283.21 284.29 285.42 286.6 287.85 289.15 290.51 291.92 293.4 294.93 296.51 298.16 299.85 - 301.61 303.42 305.28 307.21 309.18 311.22 313.31 315.45 / - 14 9 2 1 276.14 275.38 275.2 275.26 275.48 275.81 276.23 276.73 277.3 277.93 278.64 279.41 - 280.24 281.13 282.09 283.1 284.17 285.3 286.49 287.73 289.03 290.39 291.81 293.28 294.81 296.4 298.04 299.74 - 301.5 303.31 305.18 307.1 309.08 311.12 313.21 315.35 / - 14 9 3 1 275.97 275.19 275 275.06 275.28 275.6 276.02 276.51 277.08 277.72 278.43 279.19 - 280.03 280.92 281.87 282.88 283.95 285.08 286.27 287.52 288.82 290.18 291.6 293.08 294.61 296.2 297.84 299.54 - 301.3 303.11 304.98 306.91 308.89 310.93 313.02 315.17 / - 14 9 4 1 275.65 274.84 274.63 274.69 274.9 275.22 275.63 276.12 276.69 277.33 278.03 278.8 - 279.63 280.53 281.48 282.49 283.56 284.7 285.89 287.13 288.44 289.8 291.22 292.7 294.23 295.83 297.47 299.18 - 300.94 302.76 304.63 306.56 308.55 310.59 312.69 314.85 / - 14 9 5 1 275.03 274.17 273.94 273.98 274.18 274.5 274.91 275.4 275.96 276.6 277.3 278.07 - 278.9 279.8 280.75 281.77 282.84 283.98 285.17 286.42 287.73 289.1 290.52 292.01 293.55 295.14 296.8 298.51 - 300.28 302.11 303.99 305.93 307.92 309.98 312.08 314.25 / - 14 9 6 1 273.81 272.88 272.61 272.63 272.82 273.13 273.53 274.02 274.58 275.22 275.92 276.69 - 277.52 278.42 279.38 280.4 281.48 282.62 283.82 285.08 286.4 287.78 289.22 290.71 292.26 293.88 295.55 297.27 - 299.06 300.9 302.8 304.76 306.77 308.84 310.97 313.16 / - 14 9 7 1 271.29 270.12 269.73 269.66 269.8 270.07 270.45 270.92 271.47 272.1 272.81 273.58 - 274.42 275.33 276.3 277.34 278.44 279.6 280.82 282.11 283.45 284.86 286.33 287.86 289.45 291.1 292.81 294.57 - 296.4 298.29 300.24 302.25 304.31 306.44 308.62 310.86 / - 14 9 8 1 264.86 261.81 260.88 260.57 260.55 260.73 261.06 261.5 262.06 262.71 263.45 264.27 - 265.17 266.15 267.2 268.33 269.53 270.8 272.14 273.55 275.03 276.57 278.18 279.86 281.6 283.41 285.29 287.23 - 289.23 291.29 293.42 295.62 297.87 300.19 302.57 304.99 / - 14 9 9 1 252.08 242.18 240.94 240.39 240.3 240.49 240.89 241.45 242.15 242.96 243.91 244.96 - 246.12 247.38 248.73 250.17 251.67 253.29 254.99 256.78 258.64 260.55 262.58 264.68 266.85 269.1 271.39 273.79 - 276.26 278.8 281.38 284.05 286.8 289.61 292.49 295.42 / - 14 9 10 1 224.08 211.11 209.93 209.63 209.81 210.34 211.11 212.1 213.28 214.62 216.11 217.75 - 219.53 221.43 223.46 225.61 227.88 230.26 232.75 235.34 238.03 240.82 243.71 246.69 249.76 252.92 256.18 259.5 - 262.89 266.35 269.89 273.49 277.16 280.9 284.71 288.58 / - 14 9 11 1 180.51 176.93 176.04 176.22 176.99 178.13 179.58 181.3 183.26 185.44 187.81 190.36 - 193.09 195.98 199.1 202.3 205.64 209.16 212.77 216.56 220.4 224.48 228.54 232.71 237.13 241.49 245.95 250.49 - 255.46 260.19 264.99 269.87 274.82 280.3 285.41 290.59 / - 14 9 12 1 147.15 146.21 146.87 148.24 150.24 152.66 155.4 158.42 161.67 165.13 168.79 172.98 - 177.23 181.62 186.17 190.86 195.73 200.68 205.82 211.1 216.52 222.08 227.77 233.59 239.54 245.62 251.79 258.07 - 264.21 270.74 277.39 284.16 290.67 297.64 304.73 311.5 / - 14 9 13 1 127.51 129.79 132.7 136.21 140.15 144.3 148.64 153.19 157.95 162.92 168.11 173.51 - 179.12 184.94 190.95 197.16 203.56 210.15 216.91 223.84 230.95 238.22 245.64 253.22 260.95 268.82 276.83 285.51 - 294.9 304.11 313.29 322.75 331.99 341.55 351.19 360.83 / - 14 9 14 1 122.59 126.67 130.91 135.51 140.54 146.01 151.98 158.41 165.23 172.42 179.95 187.81 - 195.99 204.49 213.3 222.41 231.82 241.52 251.51 261.78 272.26 282.94 293.82 304.92 316.24 327.78 339.53 351.51 - 363.7 376.1 388.72 401.55 414.59 427.84 441.29 454.95 / - 14 9 15 1 118.78 125.22 131.85 138.93 146.79 155.43 164.82 174.91 185.68 197.04 208.98 221.48 - 234.49 248 261.97 276.39 291.25 306.56 322.3 338.49 355.12 372.2 389.72 407.69 426.09 444.86 463.97 483.42 - 503.23 523.41 543.98 564.94 586.29 608.06 630.26 652.89 / - 14 9 16 1 116.74 126.48 137.79 150.46 164.44 179.67 196.11 213.71 232.4 252.12 272.8 294.4 - 316.91 340.28 364.44 389.44 415.25 441.81 469.1 497.17 526.02 555.66 586.09 617.21 648.99 681.53 715.04 749.53 - 784.91 821 857.8 895.32 934.17 974.84 1016.05 1057.37 / - 14 9 17 1 118.79 136.5 158.6 183.84 210.92 239.68 270.84 302.86 337.64 374.3 412.51 451.18 - 492.99 536.35 581.08 627.47 675.12 724.4 774.89 828.44 883.9 941.21 1000.13 1060.2 1121.18 1184.37 1246.54 1305.34 - 1362.91 1421.62 1480.92 1542.09 1604.61 1666.83 1730.21 1796.25 / - 14 9 18 1 127.96 167.82 212.79 260.95 312.25 367.08 425.7 487.93 554.18 624.39 697.87 775.66 - 858.16 944.87 1035.55 1130.44 1226.58 1317.52 1406.43 1499.63 1593.71 1690.48 1791.2 1894.46 1997.55 2103.51 2209.29 2319.39 - 2426.74 2539.81 2654.07 2772.54 2890.43 3009.64 3130.53 3258.72 / - 14 9 19 1 161.01 229.8 309.69 401.46 501.34 611.14 728.85 857.15 998.47 1146.95 1300.31 1441.34 - 1595.61 1751.72 1921.67 2090.25 2266.37 2455.49 2646.1 2836.32 3034.69 3238.05 3451.39 3666.79 3892.49 4122.59 4352.72 4591.16 - 4850.02 5094.74 5353.06 5605.36 5871.44 6142.38 6406.79 6701.38 / - 14 9 20 1 220.57 336.46 459.83 644.14 851.84 1089.7 1339.43 1592.74 1868.21 2158.08 2459.74 2781.37 - 3103.1 3464.09 3815.45 4216.64 4603.33 5007.02 5421.01 5899.78 6354.53 6814.09 7302.44 7809.37 8312.56 8863.64 9406.16 9947.42 - 10520.8 11139.83 11749.15 12372.96 13011.66 13671.27 14317.39 15037.46 / - 14 10 1 1 278.33 277.46 277.23 277.27 277.47 277.79 278.2 278.69 279.25 279.89 280.59 281.35 - 282.18 283.07 284.03 285.04 286.11 287.24 288.43 289.67 290.98 292.34 293.76 295.23 296.77 298.36 300 301.71 - 303.47 305.28 307.15 309.08 311.07 313.11 315.21 317.36 / - 14 10 2 1 278.23 277.35 277.12 277.16 277.35 277.67 278.08 278.57 279.13 279.77 280.47 281.23 - 282.06 282.95 283.9 284.91 285.99 287.12 288.3 289.55 290.86 292.22 293.64 295.11 296.65 298.24 299.89 301.59 - 303.35 305.17 307.04 308.97 310.96 313 315.1 317.25 / - 14 10 3 1 278.05 277.16 276.92 276.95 277.14 277.45 277.86 278.35 278.91 279.54 280.25 281.01 - 281.84 282.73 283.68 284.69 285.76 286.89 288.08 289.33 290.64 292 293.42 294.9 296.43 298.03 299.68 301.38 - 303.14 304.96 306.84 308.77 310.76 312.81 314.91 317.07 / - 14 10 4 1 277.72 276.79 276.54 276.56 276.75 277.06 277.46 277.95 278.51 279.14 279.84 280.6 - 281.43 282.32 283.28 284.29 285.36 286.49 287.68 288.93 290.24 291.6 293.03 294.51 296.04 297.64 299.29 301 - 302.77 304.59 306.47 308.41 310.4 312.45 314.56 316.72 / - 14 10 5 1 277.09 276.11 275.82 275.83 276.01 276.31 276.71 277.19 277.75 278.38 279.08 279.85 - 280.67 281.57 282.52 283.53 284.61 285.74 286.94 288.19 289.5 290.87 292.3 293.78 295.33 296.93 298.59 300.31 - 302.08 303.91 305.8 307.75 309.75 311.81 313.93 316.1 / - 14 10 6 1 275.84 274.77 274.44 274.43 274.59 274.88 275.27 275.75 276.31 276.94 277.64 278.4 - 279.24 280.13 281.09 282.11 283.19 284.33 285.53 286.79 288.11 289.49 290.93 292.43 293.99 295.61 297.28 299.01 - 300.8 302.65 304.56 306.52 308.54 310.63 312.76 314.96 / - 14 10 7 1 273.1 271.71 271.2 271.07 271.16 271.39 271.75 272.2 272.74 273.36 274.06 274.83 - 275.67 276.57 277.55 278.59 279.69 280.86 282.09 283.38 284.73 286.15 287.63 289.17 290.77 292.43 294.16 295.94 - 297.78 299.68 301.65 303.67 305.75 307.89 310.1 312.36 / - 14 10 8 1 266.3 262.57 261.51 261.14 261.08 261.23 261.54 261.98 262.52 263.17 263.92 264.75 - 265.66 266.65 267.72 268.86 270.08 271.37 272.73 274.16 275.67 277.24 278.87 280.58 282.35 284.19 286.09 288.06 - 290.1 292.2 294.36 296.59 298.88 301.21 303.63 306.11 / - 14 10 9 1 253.26 242.12 240.75 240.22 240.12 240.3 240.7 241.27 241.99 242.84 243.81 244.86 - 246.05 247.33 248.72 250.19 251.76 253.38 255.12 256.94 258.85 260.84 262.87 265.02 267.25 269.55 271.89 274.34 - 276.86 279.46 282.1 284.83 287.63 290.51 293.43 296.43 / - 14 10 10 1 224.44 211 209.83 209.53 209.73 210.27 211.07 212.08 213.27 214.64 216.16 217.83 - 219.64 221.58 223.64 225.83 228.13 230.55 233.08 235.71 238.45 241.29 244.22 247.25 250.38 253.59 256.89 260.27 - 263.74 267.3 270.96 274.68 278.45 282.28 286.18 290.14 / - 14 10 11 1 180.6 176.96 176.12 176.36 177.14 178.31 179.79 181.54 183.52 185.72 188.12 190.71 - 193.46 196.39 199.53 202.77 206.15 209.74 213.39 217.22 221.11 225.19 229.3 233.66 237.98 242.56 247.07 251.67 - 256.36 261.5 266.36 271.3 276.32 281.41 286.58 292.3 / - 14 10 12 1 147.26 146.41 147.1 148.51 150.54 152.99 155.77 158.81 162.09 165.59 169.28 173.22 - 177.67 182.13 186.69 191.47 196.39 201.39 206.65 211.98 217.46 223.07 228.81 234.49 240.48 246.6 252.84 259.18 - 265.63 272.23 278.62 285.43 292.37 299.03 306.17 313.43 / - 14 10 13 1 127.65 130.02 133.01 136.53 140.49 144.68 149.05 153.63 158.42 163.42 168.64 174.07 - 179.72 185.57 191.62 197.86 204.3 210.93 217.73 224.71 231.86 239.17 246.64 254.27 262.05 269.97 278.04 286.25 - 295.43 304.79 314.44 323.85 333.33 342.89 352.56 362.43 / - 14 10 14 1 122.66 126.9 131.2 135.85 140.9 146.39 152.38 158.82 165.66 172.88 180.44 188.33 - 196.55 205.09 213.93 223.08 232.53 242.26 252.29 262.61 273.15 283.89 294.83 305.99 317.37 328.96 340.78 352.81 - 365.06 377.53 390.22 403.11 416.22 429.54 443.07 456.81 / - 14 10 15 1 118.8 125.36 132.1 139.22 147.1 155.76 165.16 175.27 186.06 197.45 209.42 221.95 - 235 248.54 262.55 277.02 291.93 307.27 323.05 339.27 355.93 373.03 390.58 408.56 426.99 445.84 465.03 484.56 - 504.45 524.71 545.34 566.37 587.79 609.62 631.86 654.55 / - 14 10 16 1 116.76 126.57 137.96 150.67 164.67 179.91 196.36 213.97 232.67 252.4 273.1 294.72 - 317.23 340.64 364.83 389.85 415.68 442.29 469.62 497.7 526.55 556.18 586.6 617.71 649.46 681.91 715.33 749.71 - 785.05 821.25 858.14 895.71 933.97 974.17 1014.93 1056.73 / - 14 10 17 1 118.79 136.54 158.74 183.97 211.08 240.05 271.03 303.71 337.75 374.36 412.72 451.16 - 492.92 536.25 580.98 627.34 674.93 724.17 774.35 827.7 882.95 940.06 998.93 1059.11 1120.21 1182.43 1246.03 1305.95 - 1365.32 1425.56 1486.3 1549.06 1613.02 1676.77 1742.43 1809.38 / - 14 10 18 1 127.89 167.67 212.78 261.01 312.41 367.19 425.76 487.91 554.01 624.05 697.39 774.9 - 857.09 943.44 1033.78 1127.55 1224.77 1316.25 1405.68 1499.44 1594.11 1691.54 1792.92 1897.21 2001.97 2110.07 2218.46 2331.14 - 2440.91 2556.3 2672.9 2793.55 2913.56 3034.86 3157.98 3287.94 / - 14 10 19 1 160.88 229.7 308.99 400.55 501.37 609.66 728.45 856.44 993.98 1140.87 1293.52 1440.49 - 1596.56 1752.52 1923.4 2093.05 2270.3 2451.69 2652.67 2844.38 3046.36 3249.28 3462.92 3681.51 3909.2 4141.29 4373.66 4614.05 - 4865.42 5122.92 5385.76 5643.6 5915.63 6192.16 6461.92 6748.3 / - 14 10 20 1 220.42 336.56 459.91 640.07 847.41 1082.49 1333.16 1593.23 1865.54 2149.68 2451.91 2773.66 - 3113.15 3476.58 3830.81 4236.66 4624.71 5031.66 5449.09 5931.66 6390.05 6853.57 7341.4 7854.19 8364.58 8897.8 9466.85 10013.31 - 10591.49 11187.83 11814.68 12469.93 13121.24 13794.76 14456.57 15161.78 / - 14 11 1 1 280.38 279.42 279.14 279.16 279.34 279.64 280.04 280.52 281.08 281.71 282.41 283.17 - 284 284.89 285.84 286.85 287.92 289.05 290.24 291.49 292.79 294.16 295.58 297.06 298.6 300.19 301.84 303.55 - 305.31 307.13 309.01 310.95 312.94 314.99 317.09 319.25 / - 14 11 2 1 280.29 279.31 279.03 279.04 279.22 279.52 279.92 280.4 280.96 281.59 282.29 283.05 - 283.87 284.76 285.71 286.72 287.8 288.93 290.11 291.36 292.67 294.03 295.45 296.93 298.47 300.07 301.72 303.43 - 305.19 307.02 308.9 310.83 312.83 314.88 316.98 319.14 / - 14 11 3 1 280.11 279.11 278.82 278.82 279 279.3 279.69 280.17 280.73 281.36 282.06 282.82 - 283.64 284.53 285.48 286.49 287.57 288.7 289.89 291.13 292.44 293.81 295.23 296.71 298.25 299.84 301.5 303.21 - 304.98 306.8 308.68 310.62 312.62 314.67 316.78 318.95 / - 14 11 4 1 279.77 278.73 278.43 278.42 278.59 278.89 279.28 279.76 280.31 280.94 281.63 282.4 - 283.22 284.11 285.06 286.07 287.14 288.28 289.47 290.72 292.03 293.39 294.82 296.3 297.84 299.44 301.1 302.81 - 304.58 306.41 308.3 310.24 312.24 314.3 316.42 318.59 / - 14 11 5 1 279.11 278.02 277.69 277.67 277.83 278.11 278.5 278.97 279.53 280.15 280.85 281.61 - 282.43 283.32 284.27 285.29 286.36 287.49 288.69 289.94 291.26 292.63 294.06 295.55 297.09 298.7 300.36 302.08 - 303.86 305.7 307.6 309.55 311.56 313.63 315.75 317.93 / - 14 11 6 1 277.83 276.64 276.26 276.21 276.35 276.62 277 277.47 278.02 278.64 279.34 280.1 - 280.93 281.82 282.78 283.8 284.88 286.02 287.22 288.48 289.81 291.19 292.63 294.13 295.69 297.31 298.99 300.73 - 302.53 304.38 306.29 308.27 310.3 312.39 314.53 316.74 / - 14 11 7 1 274.83 273.19 272.56 272.35 272.38 272.58 272.91 273.34 273.87 274.48 275.17 275.93 - 276.77 277.67 278.65 279.69 280.8 281.97 283.21 284.51 285.88 287.3 288.79 290.34 291.96 293.63 295.37 297.17 - 299.03 300.95 302.94 304.98 307.09 309.25 311.48 313.76 / - 14 11 8 1 267.65 263.19 261.99 261.55 261.45 261.57 261.86 262.29 262.83 263.49 264.23 265.07 - 266 267 268.09 269.25 270.49 271.8 273.19 274.64 276.17 277.77 279.44 281.18 282.98 284.86 286.8 288.8 - 290.87 293.01 295.21 297.48 299.82 302.18 304.64 307.17 / - 14 11 9 1 254.39 241.88 240.55 240 239.89 240.08 240.49 241.07 241.81 242.68 243.67 244.78 - 246 247.32 248.71 250.22 251.83 253.53 255.31 257.15 259.1 261.14 263.26 265.42 267.69 270.04 272.43 274.93 - 277.5 280.14 282.82 285.61 288.48 291.38 294.39 297.46 / - 14 11 10 1 224.17 210.89 209.73 209.44 209.65 210.21 211.02 212.05 213.27 214.66 216.21 217.91 - 219.75 221.72 223.82 226.05 228.39 230.85 233.42 236.1 238.88 241.77 244.75 247.83 251.01 254.27 257.63 261.07 - 264.59 268.2 271.89 275.66 279.51 283.45 287.49 291.59 / - 14 11 11 1 180.68 177.08 176.26 176.5 177.31 178.5 179.98 181.76 183.76 185.99 188.41 191.02 - 193.81 196.85 199.97 203.24 206.66 210.29 213.98 217.89 221.83 225.95 230.11 234.46 238.83 243.46 248.02 252.86 - 257.61 262.44 267.36 272.75 277.84 282.99 288.23 293.53 / - 14 11 12 1 147.38 146.61 147.33 148.77 150.84 153.33 156.14 159.21 162.53 166.05 169.78 173.69 - 177.96 182.61 187.28 192.06 197 202.09 207.36 212.72 218.23 223.88 229.67 235.59 241.64 247.82 253.87 260.28 - 266.78 273.4 280.17 287.06 293.7 300.8 308.03 314.93 / - 14 11 13 1 127.81 130.3 133.34 136.87 140.85 145.07 149.48 154.09 158.91 163.94 169.19 174.65 - 180.33 186.21 192.29 198.57 205.05 211.71 218.55 225.57 232.76 240.12 247.64 255.31 263.14 271.12 279.24 287.5 - 295.9 305.32 315.2 324.81 334.46 344.16 353.95 363.83 / - 14 11 14 1 122.77 127.18 131.52 136.19 141.27 146.78 152.78 159.25 166.11 173.35 180.94 188.87 - 197.11 205.68 214.56 223.74 233.22 242.99 253.05 263.4 274 284.81 295.81 307.03 318.46 330.12 341.99 354.08 - 366.4 378.93 391.67 404.64 417.81 431.2 444.8 458.61 / - 14 11 15 1 118.86 125.54 132.35 139.52 147.42 156.1 165.52 175.64 186.44 197.87 209.86 222.41 - 235.48 249.05 263.09 277.61 292.56 307.94 323.75 340 356.68 373.81 391.37 409.37 427.81 446.69 465.96 485.59 - 505.56 525.89 546.59 567.68 589.16 611.05 633.35 656.08 / - 14 11 16 1 116.81 126.71 138.14 150.88 164.9 180.15 196.61 214.22 232.92 252.65 273.36 295 - 317.52 340.92 365.16 390.19 416.03 442.67 470.04 498.14 526.99 556.61 587.01 618.1 649.81 682.19 715.5 749.77 - 784.98 821.13 858.12 895.78 934.08 973.06 1013.98 1056.1 / - 14 11 17 1 118.8 136.63 158.84 184.09 211.21 240.59 271.15 304.15 337.82 374.38 412.67 451.06 - 492.77 536.17 580.83 627.1 674.62 723.69 773.68 826.83 881.86 938.74 997.38 1057.63 1118.88 1180.64 1244.32 1303.1 - 1359.83 1416.54 1474.03 1532.68 1593.32 1652.8 1717.67 1777.65 / - 14 11 18 1 127.79 167.63 212.75 261.02 312.5 367.26 425.76 487.87 553.8 623.65 696.87 774.09 - 855.94 941.9 1031.86 1125.34 1222.5 1316.74 1404.99 1499 1594.43 1692.79 1794.67 1899.71 2005.3 2114.3 2223.55 2337.75 - 2449.48 2567.32 2686.91 2810.82 2933.98 3058.35 3184.44 3317.42 / - 14 11 19 1 160.75 229.61 308.56 399.64 500.18 609.62 726.19 854.71 992.78 1139.23 1291.99 1439.7 - 1596.52 1753.37 1918.25 2098.75 2274.45 2457.22 2659.58 2852.95 3056.53 3260 3476.67 3697.19 3924.08 4161.08 4395.9 4638.32 - 4891.92 5151.88 5417.2 5677.83 5953.31 6234.57 6509.88 6802.71 / - 14 11 20 1 220.31 336.73 460.21 634.77 842.64 1075.35 1325.43 1586.53 1858.99 2153.58 2457.81 2781.81 - 3124.07 3464.47 3847.42 4225.73 4647.73 5058.11 5479.31 5923.15 6428.42 6896.07 7387.87 7895.01 8415.26 8958.28 9509.8 10084.15 - 10667.13 11268.56 11900.78 12540.37 13219.27 13898.8 14568.71 15283.91 / - 14 12 1 1 282.39 281.35 281.04 281.03 281.19 281.49 281.88 282.35 282.91 283.53 284.23 284.99 - 285.81 286.7 287.65 288.66 289.73 290.86 292.05 293.29 294.6 295.97 297.39 298.87 300.41 302.01 303.66 305.38 - 307.15 308.97 310.86 312.8 314.8 316.85 318.96 321.13 / - 14 12 2 1 282.29 281.24 280.92 280.91 281.07 281.36 281.75 282.22 282.78 283.4 284.09 284.85 - 285.68 286.57 287.51 288.52 289.59 290.72 291.91 293.16 294.47 295.84 297.26 298.74 300.28 301.88 303.54 305.25 - 307.02 308.85 310.73 312.68 314.68 316.73 318.85 321.02 / - 14 12 3 1 282.11 281.03 280.7 280.68 280.84 281.13 281.52 281.99 282.54 283.16 283.86 284.62 - 285.44 286.33 287.28 288.29 289.36 290.49 291.68 292.93 294.23 295.6 297.03 298.51 300.05 301.65 303.31 305.02 - 306.79 308.62 310.51 312.46 314.46 316.52 318.64 320.81 / - 14 12 4 1 281.76 280.65 280.3 280.27 280.42 280.7 281.09 281.56 282.11 282.73 283.42 284.18 - 285 285.89 286.84 287.85 288.92 290.05 291.24 292.49 293.8 295.17 296.6 298.08 299.63 301.23 302.89 304.61 - 306.38 308.22 310.11 312.06 314.07 316.13 318.25 320.43 / - 14 12 5 1 281.09 279.91 279.53 279.49 279.63 279.9 280.27 280.74 281.29 281.91 282.59 283.35 - 284.18 285.06 286.01 287.02 288.1 289.23 290.43 291.68 292.99 294.37 295.8 297.29 298.84 300.45 302.12 303.85 - 305.63 307.47 309.37 311.33 313.35 315.42 317.56 319.75 / - 14 12 6 1 279.77 278.47 278.03 277.95 278.07 278.33 278.69 279.15 279.69 280.31 281 281.75 - 282.58 283.47 284.42 285.44 286.52 287.66 288.86 290.13 291.45 292.84 294.28 295.79 297.35 298.98 300.66 302.4 - 304.21 306.07 307.99 309.97 312.01 314.11 316.26 318.48 / - 14 12 7 1 276.44 274.54 273.77 273.47 273.45 273.6 273.9 274.31 274.82 275.42 276.1 276.86 - 277.69 278.6 279.58 280.63 281.74 282.92 284.17 285.48 286.86 288.3 289.8 291.37 293 294.7 296.46 298.28 - 300.16 302.1 304.11 306.18 308.31 310.5 312.75 315.06 / - 14 12 8 1 268.91 263.66 262.27 261.77 261.63 261.73 262.01 262.43 262.98 263.64 264.39 265.25 - 266.19 267.21 268.31 269.5 270.76 272.1 273.52 275.01 276.57 278.2 279.9 281.65 283.49 285.41 287.39 289.43 - 291.55 293.73 295.98 298.29 300.67 303.11 305.62 308.16 / - 14 12 9 1 255.45 241.5 240.21 239.69 239.61 239.82 240.25 240.86 241.63 242.53 243.53 244.67 - 245.92 247.28 248.74 250.3 251.9 253.65 255.48 257.4 259.36 261.45 263.63 265.88 268.17 270.58 273.07 275.64 - 278.24 280.95 283.73 286.55 289.47 292.46 295.49 298.61 / - 14 12 10 1 224.26 210.79 209.63 209.35 209.58 210.15 210.98 212.03 213.28 214.69 216.27 218 - 219.87 221.88 224.01 226.27 228.66 231.16 233.77 236.49 239.32 242.26 245.29 248.42 251.65 254.97 258.38 261.88 - 265.46 269.13 272.88 276.71 280.62 284.61 288.67 292.81 / - 14 12 11 1 180.78 177.11 176.37 176.63 177.47 178.68 180.21 181.98 184.01 186.25 188.7 191.34 - 194.23 197.22 200.37 203.68 207.25 210.84 214.57 218.52 222.5 226.72 230.93 235.33 239.85 244.37 249.16 253.87 - 258.68 263.77 268.74 273.8 278.94 284.59 289.89 295.27 / - 14 12 12 1 147.47 146.81 147.56 149.04 151.14 153.66 156.51 159.62 162.96 166.52 170.28 174.22 - 178.35 182.97 187.78 192.62 197.6 202.81 208.02 213.47 219.01 224.7 230.53 236.49 242.58 248.8 255.16 261.64 - 267.94 274.61 281.39 288.34 295.4 302.19 309.47 316.87 / - 14 12 13 1 128 130.6 133.69 137.22 141.24 145.49 149.93 154.57 159.42 164.49 169.76 175.26 - 180.96 186.87 192.98 199.3 205.8 212.5 219.38 226.44 233.67 241.06 248.63 256.35 264.22 272.25 280.42 288.73 - 297.19 305.79 315.76 325.58 335.44 345.31 355.25 365.26 / - 14 12 14 1 122.94 127.47 131.85 136.55 141.65 147.19 153.2 159.68 166.57 173.84 181.46 189.41 - 197.68 206.27 215.17 224.38 233.89 243.69 253.78 264.16 274.81 285.68 296.75 308.02 319.51 331.22 343.15 355.3 - 367.67 380.27 393.08 406.1 419.34 432.8 446.46 460.34 / - 14 12 15 1 118.97 125.75 132.62 139.82 147.74 156.44 165.87 176.02 186.83 198.27 210.28 222.85 - 235.94 249.53 263.6 278.13 293.12 308.55 324.39 340.66 357.36 374.5 392.07 410.08 428.52 447.4 466.72 486.43 - 506.48 526.9 547.67 568.83 590.37 612.31 634.66 657.43 / - 14 12 16 1 116.9 126.86 138.33 151.09 165.13 180.39 196.85 214.45 233.15 252.87 273.57 295.22 - 317.75 341.14 365.4 390.45 416.28 442.92 470.32 498.45 527.3 556.91 587.28 618.35 650.03 682.34 715.55 749.71 - 784.78 820.78 857.69 895.46 933.86 972.88 1012.52 1054.13 / - 14 12 17 1 118.85 136.73 158.93 184.2 211.32 240.69 271.22 304.2 337.83 374.34 412.55 450.86 - 492.51 535.84 580.55 626.74 674.2 723.25 772.94 825.88 880.66 937.27 995.65 1055.69 1117.12 1179.12 1242.2 1301.92 - 1359.93 1417.72 1476.3 1536.38 1596.71 1658 1724.45 1785.17 / - 14 12 18 1 127.73 167.56 212.72 261 312.54 367.29 425.71 487.76 553.52 623.18 696.28 773.27 - 854.77 940.33 1029.86 1122.99 1220.09 1314.62 1405.12 1498.05 1595.54 1695.45 1795.81 1901.67 2008.14 2116.66 2228.37 2343.76 - 2458.75 2575.43 2696.23 2818.73 2946.76 3073.55 3202.77 3339.4 / - 14 12 19 1 160.64 229.56 308.14 399.66 500.2 608.17 725.77 852.94 991.54 1137.53 1290.43 1438.87 - 1589.42 1754.34 1920.24 2101.86 2278.97 2463.18 2651.96 2862.05 3067.46 3272.87 3489.79 3713.28 3942.92 4174.8 4419.61 4664.42 - 4920.29 5172.91 5450.79 5714.29 5993.03 6276.93 6555.25 6851.21 / - 14 12 20 1 220.22 337 460.81 627.84 833.98 1068.35 1318.56 1578.6 1854.54 2149.66 2464.35 2790.85 - 3117.35 3479.32 3865.35 4247 4673.07 5086.92 5512 5959.88 6470.03 6942.06 7438.33 7950.19 8470.36 9020.98 9580.67 10151.96 - 10748.52 11355.46 11993.57 12639.2 13302.77 14011.18 14688.31 15410.39 / - 14 13 1 1 284.34 283.25 282.91 282.88 283.03 283.32 283.7 284.17 284.72 285.34 286.03 286.79 - 287.61 288.49 289.44 290.45 291.52 292.65 293.84 295.09 296.4 297.76 299.19 300.67 302.21 303.82 305.47 307.19 - 308.96 310.8 312.69 314.63 316.64 318.7 320.82 323 / - 14 13 2 1 284.23 283.13 282.79 282.76 282.91 283.19 283.57 284.04 284.58 285.2 285.89 286.65 - 287.47 288.36 289.3 290.31 291.38 292.51 293.7 294.95 296.26 297.63 299.05 300.54 302.08 303.68 305.34 307.06 - 308.83 310.67 312.56 314.51 316.51 318.57 320.7 322.87 / - 14 13 3 1 284.05 282.92 282.56 282.53 282.67 282.95 283.33 283.79 284.34 284.96 285.65 286.4 - 287.22 288.11 289.05 290.06 291.13 292.26 293.45 294.7 296.01 297.38 298.81 300.29 301.84 303.44 305.1 306.82 - 308.6 310.43 312.32 314.28 316.28 318.35 320.47 322.65 / - 14 13 4 1 283.7 282.53 282.15 282.1 282.24 282.51 282.88 283.34 283.89 284.5 285.19 285.94 - 286.76 287.65 288.59 289.6 290.67 291.8 293 294.25 295.56 296.93 298.36 299.85 301.39 303 304.66 306.39 - 308.17 310.01 311.9 313.86 315.87 317.94 320.07 322.26 / - 14 13 5 1 283.01 281.76 281.35 281.28 281.4 281.66 282.03 282.49 283.03 283.64 284.33 285.08 - 285.9 286.78 287.73 288.74 289.81 290.95 292.14 293.4 294.71 296.09 297.52 299.02 300.57 302.18 303.85 305.58 - 307.37 309.22 311.13 313.09 315.12 317.2 319.34 321.54 / - 14 13 6 1 281.61 280.19 279.68 279.56 279.64 279.88 280.23 280.67 281.2 281.81 282.49 283.25 - 284.07 284.96 285.91 286.92 288 289.15 290.35 291.62 292.95 294.34 295.79 297.3 298.87 300.5 302.19 303.94 - 305.75 307.62 309.55 311.55 313.6 315.7 317.87 320.1 / - 14 13 7 1 277.92 275.74 274.81 274.38 274.3 274.42 274.69 275.09 275.58 276.18 276.85 277.61 - 278.45 279.36 280.34 281.4 282.52 283.71 284.97 286.3 287.69 289.15 290.68 292.26 293.92 295.63 297.41 299.26 - 301.16 303.13 305.17 307.26 309.42 311.64 313.92 316.26 / - 14 13 8 1 270.06 263.87 262.35 261.79 261.62 261.7 261.97 262.39 262.94 263.6 264.37 265.24 - 266.2 267.24 268.37 269.59 270.88 272.25 273.67 275.2 276.79 278.46 280.21 282.02 283.89 285.85 287.87 289.97 - 292.12 294.35 296.64 299.01 301.44 303.94 306.48 309.11 / - 14 13 9 1 256.42 241.15 239.79 239.31 239.27 239.52 239.98 240.63 241.43 242.34 243.4 244.58 - 245.86 247.26 248.76 250.32 252.01 253.8 255.69 257.61 259.67 261.82 264.05 266.32 268.71 271.19 273.69 276.33 - 279.03 281.81 284.63 287.55 290.55 293.58 296.72 299.92 / - 14 13 10 1 224.28 210.69 209.53 209.27 209.51 210.1 210.95 212.02 213.29 214.73 216.33 218.09 - 219.99 222.03 224.21 226.51 228.93 231.47 234.13 236.9 239.78 242.76 245.84 249.03 252.31 255.68 259.14 262.7 - 266.34 270.07 273.88 277.78 281.75 285.8 289.93 294.14 / - 14 13 11 1 180.87 177.23 176.48 176.77 177.62 178.85 180.41 182.23 184.25 186.52 189.05 191.72 - 194.57 197.6 200.78 204.22 207.71 211.34 215.25 219.15 223.18 227.44 231.69 236.2 240.67 245.34 250.12 254.89 - 259.94 264.89 270.14 275.27 280.47 285.75 291.57 297.02 / - 14 13 12 1 147.57 147.01 147.79 149.31 151.46 154.01 156.89 160.03 163.41 167 170.79 174.77 - 178.92 183.25 188.18 193.2 198.26 203.46 208.77 214.25 219.79 225.52 231.38 237.38 243.52 249.79 256.18 262.71 - 269.36 275.82 282.66 289.62 296.73 303.98 310.92 318.38 / - 14 13 13 1 128.24 130.92 134.05 137.61 141.65 145.94 150.41 155.08 159.96 165.05 170.36 175.88 - 181.61 187.55 193.69 200.03 206.57 213.3 220.21 227.3 234.57 242 249.6 257.37 265.28 273.36 281.58 289.94 - 298.45 307.1 315.88 325.79 335.89 346.05 356.16 366.24 / - 14 13 14 1 123.16 127.79 132.21 136.93 142.06 147.61 153.64 160.13 167.04 174.33 181.97 189.95 - 198.25 206.87 215.79 225.02 234.55 244.37 254.48 264.88 275.55 286.49 297.62 308.95 320.5 332.26 344.25 356.46 - 368.88 381.53 394.4 407.48 420.79 434.31 448.04 461.98 / - 14 13 15 1 119.13 125.99 132.91 140.14 148.08 156.78 166.23 176.38 187.2 198.67 210.7 223.28 - 236.38 249.98 264.05 278.59 293.59 309.05 324.93 341.22 357.94 375.09 392.66 410.67 429.1 447.97 467.27 487 - 507.15 527.65 548.5 569.73 591.33 613.33 635.72 658.53 / - 14 13 16 1 117.03 127.03 138.54 151.31 165.36 180.62 197.08 214.67 233.35 253.06 273.74 295.36 - 317.89 341.29 365.53 390.6 416.42 443.03 470.41 498.56 527.42 557.02 587.35 618.39 650.04 682.3 715.44 749.5 - 784.46 820.32 857.09 894.73 933.25 972.46 1012.24 1052.56 / - 14 13 17 1 118.93 136.84 159.02 184.28 211.41 240.75 271.24 304.16 337.8 374.21 412.34 450.53 - 492.1 535.36 579.99 626.2 673.62 722.63 772.98 824.88 879.45 935.82 993.93 1053.71 1115.01 1177.62 1240.49 1301.09 - 1358.33 1417.52 1476.97 1538.19 1600.38 1663.41 1729.18 1792.91 / - 14 13 18 1 127.67 167.38 212.69 260.96 312.51 367.27 425.57 487.53 553.13 622.59 695.56 772.44 - 853.29 938.87 1028.01 1120.77 1217.84 1312.45 1403.52 1497.14 1595.18 1695.72 1796.95 1903.57 2010.91 2120.36 2233.13 2349.42 - 2467.73 2583.61 2705.63 2829.36 2958.7 3087.06 3217.59 3355.51 / - 14 13 19 1 160.54 229.55 307.42 398.81 498.95 608.17 723.63 850.64 988.54 1136.05 1288.98 1438.18 - 1590.26 1755.52 1922.51 2105.32 2283.92 2469.64 2660.19 2872.07 3079.11 3286.9 3504.38 3730.65 3963.33 4197.68 4445.06 4692.89 - 4950.85 5206.98 5486.85 5754.01 6035.63 6322.41 6604.45 6903.94 / - 14 13 20 1 220.17 337.4 461.89 623.2 825.57 1055.69 1310.6 1571.11 1850.67 2146.45 2454.73 2781.1 - 3130.15 3495.61 3860.74 4270.12 4665.17 5118.46 5547.91 5999.8 6459.32 6992.39 7494.07 8010.23 8530.87 9083.96 9655.64 10233.97 - 10809.15 11449.99 12073.1 12746.78 13418.22 14105.87 14818.2 15547.66 / - 14 14 1 1 286.2 285.1 284.74 284.71 284.85 285.13 285.5 285.97 286.51 287.13 287.82 288.57 - 289.39 290.27 291.22 292.23 293.3 294.43 295.62 296.87 298.18 299.54 300.97 302.46 304 305.61 307.27 308.99 - 310.77 312.6 314.5 316.45 318.46 320.53 322.66 324.84 / - 14 14 2 1 286.1 284.98 284.62 284.58 284.72 284.99 285.37 285.83 286.37 286.99 287.68 288.43 - 289.25 290.13 291.08 292.08 293.15 294.28 295.47 296.72 298.03 299.4 300.83 302.32 303.86 305.47 307.13 308.85 - 310.63 312.47 314.36 316.32 318.33 320.4 322.53 324.71 / - 14 14 3 1 285.91 284.77 284.39 284.34 284.48 284.74 285.12 285.58 286.12 286.73 287.42 288.17 - 288.99 289.87 290.82 291.82 292.89 294.02 295.21 296.46 297.77 299.14 300.57 302.06 303.61 305.21 306.88 308.6 - 310.38 312.22 314.12 316.07 318.09 320.16 322.29 324.48 / - 14 14 4 1 285.55 284.36 283.96 283.89 284.02 284.28 284.65 285.11 285.64 286.26 286.94 287.69 - 288.51 289.39 290.34 291.34 292.41 293.54 294.73 295.99 297.3 298.67 300.1 301.59 303.14 304.75 306.42 308.14 - 309.93 311.77 313.67 315.64 317.65 319.73 321.87 324.06 / - 14 14 5 1 284.85 283.57 283.12 283.03 283.15 283.4 283.75 284.2 284.74 285.35 286.03 286.78 - 287.6 288.48 289.42 290.43 291.5 292.64 293.83 295.09 296.4 297.78 299.22 300.72 302.27 303.89 305.56 307.3 - 309.09 310.95 312.86 314.83 316.86 318.95 321.1 323.3 / - 14 14 6 1 283.28 281.74 281.15 280.98 281.03 281.24 281.57 282 282.51 283.11 283.79 284.54 - 285.35 286.24 287.19 288.21 289.29 290.44 291.65 292.92 294.25 295.65 297.1 298.62 300.2 301.84 303.55 305.31 - 307.13 309.02 310.96 312.97 315.03 317.16 319.34 321.59 / - 14 14 7 1 279.22 276.76 275.5 275.04 274.91 275 275.25 275.63 276.11 276.7 277.37 278.14 - 278.98 279.9 280.89 281.95 283.09 284.3 285.58 286.92 288.34 289.82 291.36 292.98 294.65 296.4 298.21 300.08 - 302.02 304.02 306.08 308.21 310.4 312.65 314.97 317.35 / - 14 14 8 1 271.09 263.88 262.23 261.62 261.41 261.47 261.73 262.15 262.71 263.38 264.17 265.05 - 266.03 267.1 268.26 269.5 270.79 272.2 273.68 275.24 276.88 278.59 280.38 282.24 284.18 286.15 288.22 290.37 - 292.59 294.87 297.23 299.65 302.12 304.68 307.3 309.99 / - 14 14 9 1 257.28 240.47 239.27 238.86 238.88 239.17 239.68 240.36 241.19 242.16 243.26 244.47 - 245.8 247.23 248.75 250.4 252.11 253.95 255.88 257.86 259.97 262.17 264.46 266.79 269.25 271.78 274.36 277.05 - 279.83 282.64 285.57 288.57 291.61 294.76 297.97 301.23 / - 14 14 10 1 224.21 210.6 209.44 209.19 209.44 210.05 210.92 212.01 213.3 214.77 216.4 218.19 - 220.12 222.2 224.41 226.75 229.21 231.79 234.5 237.31 240.24 243.27 246.4 249.64 252.97 256.4 259.93 263.54 - 267.24 271.03 274.91 278.86 282.9 287.02 291.22 295.49 / - 14 14 11 1 180.97 177.26 176.58 176.9 177.78 179.02 180.6 182.45 184.53 186.83 189.34 192.04 - 194.92 197.97 201.28 204.65 208.18 211.98 215.79 219.73 223.97 228.16 232.6 237.02 241.69 246.32 251.16 255.98 - 261.02 266.23 271.33 276.51 282.01 287.36 292.79 298.29 / - 14 14 12 1 147.7 147.22 148.01 149.59 151.78 154.38 157.29 160.46 163.87 167.49 171.31 175.32 - 179.5 183.86 188.38 193.64 198.8 204.07 209.45 214.95 220.62 226.34 232.24 238.28 244.46 250.77 257.21 263.78 - 270.48 277.3 283.92 290.93 298.06 305.36 312.78 319.89 / - 14 14 13 1 128.5 131.26 134.45 138.04 142.11 146.43 150.93 155.63 160.54 165.65 170.98 176.53 - 182.28 188.25 194.41 200.78 207.35 214.1 221.04 228.17 235.47 242.94 250.57 258.37 266.33 274.45 282.71 291.12 - 299.68 308.38 317.22 326.19 336.35 346.71 356.79 367.21 / - 14 14 14 1 123.44 128.15 132.59 137.34 142.49 148.05 154.1 160.61 167.53 174.83 182.49 190.48 - 198.8 207.44 216.39 225.64 235.18 245.02 255.14 265.55 276.24 287.21 298.4 309.8 321.41 333.22 345.26 357.52 - 370 382.7 395.62 408.76 422.12 435.69 449.49 463.49 / - 14 14 15 1 119.35 126.28 133.23 140.49 148.44 157.15 166.59 176.75 187.57 199.03 211.08 223.67 - 236.78 250.37 264.45 278.98 293.98 309.42 325.3 341.62 358.36 375.52 393.09 411.08 429.5 448.34 467.61 487.3 - 507.42 527.97 548.92 570.23 591.9 613.96 636.4 659.24 / - 14 14 16 1 117.2 127.24 138.77 151.55 165.59 180.83 197.27 214.86 233.52 253.2 273.85 295.43 - 317.92 341.3 365.53 390.59 416.4 442.97 470.3 498.38 527.22 556.81 587.12 618.13 649.74 681.96 715.01 748.98 - 783.81 819.52 856.12 893.58 931.91 971.08 1011.08 1051.65 / - 14 14 17 1 119.05 136.95 159.1 184.33 211.83 240.76 271.19 304.02 337.6 373.95 412 450.54 - 491.48 534.62 579.29 625.37 672.79 721.73 772.16 823.64 877.99 934.1 991.93 1051.45 1112.68 1175.18 1238.27 1300.21 - 1357.13 1417.02 1477.42 1539.67 1603.05 1668.89 1734.61 1800.27 / - 14 14 18 1 127.62 167.32 212.58 260.87 312.35 367.1 425.31 487.07 552.52 621.77 694.38 771.32 - 852 937.19 1025.98 1118.63 1215.31 1309.97 1401.67 1495.84 1594.55 1695.87 1797.98 1905.4 2013.68 2124.15 2237.98 2355.29 - 2474.67 2592.09 2715.36 2840.56 2971.2 3101.11 3234.58 3372.36 / - 14 14 19 1 160.47 229.61 307.2 398 497.66 606.53 723.36 849.86 985.04 1130.74 1287.33 1431.69 - 1590.45 1756.81 1924.99 2098.14 2289.26 2476.68 2669.11 2882.87 3091.83 3302.02 3521.83 3748.87 3983.79 4222.66 4468.9 4723.52 - 4984.47 5243.56 5515.8 5797.18 6081.66 6372.11 6658.64 6961.02 / - 14 14 20 1 220.2 337.99 463.3 615.88 818.57 1050.96 1304.31 1564.61 1844.78 2144.18 2453.92 2792.53 - 3144.66 3491.88 3882.45 4296.06 4695.3 5114.8 5587.83 6044.19 6509.16 6996.25 7554.83 8076.49 8603.82 9157.57 9730.95 10317.18 - 10906.44 11523.87 12183.78 12842.6 13542.9 14238.49 14956.96 15669.27 / - 14 15 1 1 287.98 286.89 286.54 286.5 286.64 286.91 287.29 287.75 288.29 288.9 289.59 290.34 - 291.16 292.04 292.98 293.99 295.06 296.19 297.38 298.63 299.94 301.31 302.74 304.22 305.77 307.38 309.04 310.77 - 312.55 314.39 316.29 318.25 320.26 322.34 324.47 326.66 / - 14 15 2 1 287.87 286.77 286.41 286.37 286.5 286.77 287.14 287.6 288.14 288.76 289.44 290.19 - 291.01 291.89 292.83 293.84 294.91 296.04 297.23 298.48 299.79 301.16 302.59 304.08 305.62 307.23 308.9 310.62 - 312.4 314.25 316.15 318.11 320.12 322.2 324.33 326.53 / - 14 15 3 1 287.68 286.55 286.17 286.12 286.25 286.51 286.88 287.34 287.88 288.49 289.17 289.92 - 290.74 291.62 292.56 293.57 294.63 295.76 296.95 298.21 299.52 300.89 302.32 303.81 305.36 306.96 308.63 310.36 - 312.14 313.99 315.89 317.85 319.87 321.95 324.09 326.28 / - 14 15 4 1 287.31 286.13 285.72 285.65 285.77 286.03 286.39 286.84 287.38 287.98 288.66 289.41 - 290.23 291.11 292.05 293.06 294.13 295.26 296.45 297.7 299.01 300.38 301.82 303.31 304.86 306.47 308.14 309.87 - 311.66 313.51 315.42 317.39 319.41 321.5 323.64 325.84 / - 14 15 5 1 286.59 285.3 284.85 284.74 284.85 285.09 285.44 285.89 286.41 287.02 287.7 288.44 - 289.26 290.14 291.08 292.09 293.16 294.29 295.49 296.74 298.06 299.44 300.88 302.38 303.94 305.56 307.24 308.98 - 310.78 312.64 314.55 316.53 318.57 320.67 322.82 325.04 / - 14 15 6 1 284.74 283.07 282.4 282.16 282.16 282.34 282.64 283.06 283.56 284.15 284.82 285.56 - 286.38 287.26 288.22 289.24 290.32 291.47 292.69 293.97 295.31 296.72 298.19 299.72 301.31 302.97 304.69 306.47 - 308.31 310.21 312.18 314.2 316.29 318.43 320.64 322.91 / - 14 15 7 1 280.32 277.42 275.93 275.41 275.24 275.29 275.52 275.88 276.36 276.95 277.63 278.39 - 279.24 280.17 281.18 282.26 283.42 284.65 285.95 287.32 288.76 290.27 291.85 293.49 295.2 296.98 298.82 300.73 - 302.7 304.74 306.85 309.01 311.25 313.54 315.9 318.33 / - 14 15 8 1 271.98 263.69 261.93 261.28 261.06 261.11 261.37 261.8 262.36 263.06 263.86 264.77 - 265.77 266.87 268.06 269.31 270.67 272.11 273.63 275.24 276.92 278.68 280.51 282.39 284.37 286.43 288.56 290.75 - 293.02 295.33 297.74 300.22 302.78 305.39 308.08 310.82 / - 14 15 9 1 257.99 239.65 238.65 238.35 238.44 238.79 239.36 240.09 240.98 242 243.12 244.37 - 245.73 247.21 248.79 250.46 252.24 254.11 256.09 258.14 260.31 262.54 264.87 267.28 269.8 272.38 275.04 277.8 - 280.62 283.55 286.5 289.58 292.74 295.92 299.22 302.57 / - 14 15 10 1 224.01 210.51 209.36 209.11 209.38 210 210.89 212 213.31 214.81 216.47 218.29 - 220.25 222.36 224.61 226.99 229.49 232.12 234.87 237.73 240.71 243.79 246.98 250.26 253.65 257.14 260.72 264.4 - 268.16 272.01 275.95 279.97 284.08 288.26 292.53 296.87 / - 14 15 11 1 181.07 177.38 176.69 177.06 177.93 179.23 180.8 182.66 184.77 187.09 189.62 192.35 - 195.26 198.42 201.68 205.09 208.77 212.48 216.33 220.47 224.58 228.82 233.37 237.84 242.57 247.25 252.2 257.08 - 262.17 267.37 272.53 277.99 283.33 288.74 294.49 300.07 / - 14 15 12 1 147.83 147.42 148.24 149.88 152.12 154.76 157.71 160.92 164.36 168.01 171.86 175.9 - 180.11 184.5 189.05 193.92 199.26 204.7 210.1 215.67 221.36 227.21 233.1 239.18 245.39 251.75 258.23 264.85 - 271.59 278.47 285.47 292.25 299.44 306.74 314.22 321.82 / - 14 15 13 1 128.8 131.65 134.89 138.53 142.64 146.99 151.52 156.24 161.17 166.31 171.66 177.22 - 183 188.98 195.17 201.56 208.14 214.92 221.89 229.04 236.36 243.86 251.53 259.36 267.36 275.51 283.81 292.27 - 300.87 309.62 318.51 327.53 336.7 346.37 356.95 367.7 / - 14 15 14 1 123.79 128.55 133.03 137.8 142.96 148.54 154.59 161.12 168.05 175.36 183.02 191.02 - 199.35 207.99 216.94 226.21 235.77 245.62 255.75 266.16 276.85 287.81 299.05 310.51 322.18 334.05 346.14 358.44 - 370.97 383.72 396.69 409.87 423.28 436.91 450.75 464.81 / - 14 15 15 1 119.64 126.62 133.6 140.87 148.82 157.53 166.98 177.12 187.94 199.39 211.41 224 - 237.11 250.7 264.76 279.28 294.24 309.66 325.51 341.79 358.51 375.68 393.25 411.23 429.62 448.43 467.65 487.29 - 507.34 527.82 548.71 570.03 591.75 613.87 636.37 659.25 / - 14 15 16 1 117.42 127.5 139.04 151.81 165.83 181.04 197.45 214.99 233.63 253.27 273.87 295.4 - 317.83 341.13 365.31 390.35 416.15 442.66 469.91 497.89 526.62 556.09 586.3 617.25 648.9 681.09 714.08 747.93 - 782.63 818.18 854.59 891.9 930.11 969.2 1009.1 1049.74 / - 14 15 17 1 119.19 137.09 159.19 184.37 211.79 240.68 271.03 303.76 337.17 373.49 411.46 449.93 - 490.62 533.56 578.03 624.02 671.55 720.45 770.89 822.01 876.15 932.12 989.86 1049.18 1109.98 1172.05 1234.95 1297.1 - 1354.67 1415.09 1477.38 1538.9 1604.33 1669.34 1735.72 1802.09 / - 14 15 18 1 127.58 167.28 212.49 260.75 312.11 366.69 424.82 486.37 551.52 620.49 692.99 769.59 - 850.19 935.24 1024.01 1116.2 1211.2 1306.97 1399.35 1494.75 1593.66 1695.68 1798.78 1907.02 2016.26 2127.82 2242.8 2361.24 - 2481.77 2600.86 2725.53 2852.08 2981.49 3115.88 3253.99 3390.13 / - 14 15 19 1 160.45 229.78 306.85 397.25 497.59 606.23 721.22 847.47 983.72 1129 1281.83 1431.44 - 1590.27 1751.77 1927.36 2102.16 2294.73 2484.14 2678.65 2881.9 3105.45 3318.32 3540.72 3768.81 4006.17 4248.85 4499.03 4757 - 5020.66 5283.78 5559.3 5833.42 6132.59 6426.31 6717.46 7024 / - 14 15 20 1 220.32 338.85 465.21 608.29 814.69 1042 1297.75 1557.87 1837.14 2132.39 2454.21 2787.97 - 3138.2 3512.08 3906.9 4292.74 4729.22 5153.42 5592.46 6093.84 6564.86 7057.69 7557.59 8150.74 8685.38 9244.78 9817.92 10403.69 - 11007.64 11639.99 12286.05 12972.83 13658.16 14385.66 15112.71 15836.55 / - 14 16 1 1 289.64 288.62 288.28 288.25 288.39 288.67 289.04 289.5 290.04 290.65 291.34 292.09 - 292.9 293.78 294.73 295.73 296.8 297.93 299.12 300.37 301.68 303.05 304.48 305.97 307.52 309.13 310.8 312.52 - 314.31 316.16 318.06 320.02 322.05 324.13 326.26 328.46 / - 14 16 2 1 289.54 288.5 288.15 288.11 288.25 288.52 288.89 289.35 289.89 290.5 291.18 291.93 - 292.75 293.63 294.57 295.57 296.64 297.77 298.96 300.21 301.52 302.89 304.32 305.81 307.36 308.97 310.64 312.37 - 314.16 316 317.91 319.87 321.9 323.98 326.12 328.32 / - 14 16 3 1 289.34 288.26 287.9 287.85 287.99 288.25 288.62 289.07 289.61 290.22 290.9 291.64 - 292.46 293.34 294.28 295.28 296.35 297.48 298.67 299.92 301.23 302.6 304.04 305.53 307.08 308.69 310.36 312.09 - 313.88 315.73 317.64 319.6 321.63 323.71 325.86 328.06 / - 14 16 4 1 288.96 287.82 287.43 287.36 287.48 287.73 288.09 288.54 289.07 289.68 290.36 291.1 - 291.91 292.79 293.73 294.74 295.81 296.94 298.13 299.38 300.69 302.07 303.5 305 306.55 308.17 309.84 311.58 - 313.37 315.22 317.14 319.11 321.14 323.23 325.38 327.59 / - 14 16 5 1 288.16 286.87 286.4 286.28 286.36 286.59 286.93 287.37 287.89 288.49 289.16 289.91 - 290.72 291.6 292.54 293.55 294.62 295.75 296.95 298.21 299.53 300.91 302.36 303.86 305.43 307.06 308.74 310.49 - 312.3 314.16 316.09 318.08 320.13 322.24 324.4 326.63 / - 14 16 6 1 285.95 284.12 283.34 283.03 282.99 283.12 283.4 283.79 284.28 284.86 285.52 286.26 - 287.08 287.97 288.92 289.95 291.04 292.2 293.43 294.72 296.08 297.5 298.99 300.54 302.15 303.83 305.57 307.37 - 309.24 311.17 313.16 315.21 317.32 319.5 321.73 324.03 / - 14 16 7 1 281.19 277.76 276.08 275.41 275.2 275.24 275.46 275.82 276.3 276.9 277.58 278.36 - 279.23 280.18 281.21 282.32 283.5 284.76 286.09 287.49 288.97 290.51 292.13 293.81 295.56 297.38 299.22 301.17 - 303.19 305.28 307.43 309.65 311.93 314.28 316.7 319.17 / - 14 16 8 1 272.69 263.46 261.52 260.86 260.63 260.69 260.96 261.4 261.99 262.7 263.53 264.46 - 265.5 266.63 267.86 269.18 270.54 272.03 273.6 275.25 276.99 278.8 280.69 282.62 284.66 286.78 288.98 291.24 - 293.58 295.96 298.44 300.99 303.62 306.31 309.04 311.87 / - 14 16 9 1 258.53 239.31 238.3 237.98 238.07 238.43 239.01 239.75 240.65 241.69 242.86 244.15 - 245.55 247.07 248.69 250.41 252.24 254.17 256.2 258.32 260.53 262.84 265.24 267.73 270.31 272.96 275.7 278.52 - 281.43 284.41 287.46 290.6 293.81 297.11 300.47 303.93 / - 14 16 10 1 223.2 210.43 209.27 209.04 209.32 209.95 210.86 211.99 213.33 214.85 216.54 218.39 - 220.39 222.54 224.82 227.24 229.79 232.46 235.25 238.16 241.18 244.32 247.56 250.9 254.35 257.89 261.53 265.27 - 269.09 273.01 277.01 281.1 285.27 289.53 293.86 298.28 / - 14 16 11 1 181.08 177.42 176.81 177.19 178.11 179.4 180.99 182.88 185 187.35 189.91 192.66 - 195.67 198.79 202.08 205.63 209.23 212.98 217.01 221.05 225.21 229.67 234.08 238.81 243.44 248.18 253.18 258.12 - 263.34 268.59 273.81 279.26 284.65 290.37 295.93 301.85 / - 14 16 12 1 147.96 147.63 148.48 150.2 152.5 155.19 158.18 161.42 164.89 168.57 172.45 176.51 - 180.75 185.17 189.74 194.47 199.55 205.21 210.77 216.35 222.12 227.98 234.02 240.28 246.33 252.72 259.25 265.91 - 272.7 279.62 286.67 293.86 300.79 308.16 315.65 323.31 / - 14 16 13 1 129.15 132.11 135.4 139.12 143.28 147.66 152.21 156.94 161.88 167.04 172.41 177.98 - 183.77 189.77 195.97 202.38 208.98 215.77 222.75 229.92 237.26 244.78 252.47 260.33 268.35 276.54 284.87 293.36 - 302 310.79 319.72 328.8 338.01 347.36 356.85 367.28 / - 14 16 14 1 124.25 129.04 133.54 138.32 143.49 149.08 155.15 161.68 168.62 175.93 183.59 191.58 - 199.9 208.53 217.47 226.72 236.26 246.1 256.23 266.64 277.33 288.28 299.5 310.99 322.72 334.65 346.8 359.15 - 371.71 384.5 397.51 410.73 424.18 437.85 451.73 465.84 / - 14 16 15 1 120.03 127.07 134.05 141.31 149.26 157.95 167.38 177.51 188.3 199.72 211.71 224.26 - 237.32 250.88 264.91 279.41 294.34 309.7 325.49 341.71 358.36 375.44 392.96 410.9 429.27 448.04 467.21 486.78 - 506.76 527.15 547.94 569.14 590.75 612.76 635.16 657.96 / - 14 16 16 1 117.73 127.84 139.36 152.11 166.09 181.25 197.59 215.08 233.64 253.22 273.77 295.22 - 317.56 340.77 364.83 389.75 415.47 441.92 469.08 496.93 525.5 554.8 584.83 615.6 647.07 679.25 712.22 746 - 780.59 816 852.22 889.25 927.09 965.73 1005.17 1045.41 / - 14 16 17 1 119.41 137.25 159.28 184.37 211.7 240.45 270.7 303.35 336.6 372.74 410.56 449.6 - 489.39 532.11 576.31 622.07 669.48 718.27 768.81 819.75 873.62 929.12 986.27 1045.01 1105.27 1166.9 1229.54 1291.66 - 1351.58 1410.88 1473.62 1537.39 1601.69 1667.31 1734.32 1801.47 / - 14 16 18 1 127.6 167.27 212.41 260.55 311.72 366.03 423.91 485.27 550.09 618.59 690.88 767.15 - 847.47 932.08 1020.18 1111.77 1206.34 1302.01 1395.19 1491.97 1591.46 1693.89 1799.99 1907.18 2017.55 2130.31 2247.75 2366.11 - 2488 2612.15 2735.12 2863.32 2994.49 3130.97 3269.92 3407.93 / - 14 16 19 1 160.5 230.1 306.95 397.38 496.41 604.28 720.76 846.43 980.71 1125.69 1278.09 1428.82 - 1589.22 1751.64 1928.6 2105.22 2299.39 2490.79 2687.76 2893.32 3118.94 3334.93 3560.07 3791.29 4030.15 4276.83 4531.05 4788.21 - 5060.04 5327.31 5606.37 5887.41 6176.49 6485.78 6782.06 7092.56 / - 14 16 20 1 220.6 340.08 467.78 607.45 809.05 1035.58 1285.74 1543.03 1822.07 2125.36 2449.41 2786.3 - 3129.78 3505.45 3903.1 4323.47 4733.62 5196.59 5641.92 6100.61 6627.12 7126.43 7634.33 8165.28 8776.23 9342.63 9922.28 10515.08 - 11123.96 11753.74 12419.62 13097.26 13813.7 14527.77 15260.53 16024.43 / - 14 17 1 1 291.19 290.26 289.96 289.95 290.1 290.38 290.76 291.22 291.76 292.37 293.05 293.81 - 294.62 295.5 296.44 297.45 298.52 299.65 300.83 302.09 303.4 304.77 306.2 307.69 309.24 310.86 312.53 314.26 - 316.05 317.9 319.8 321.77 323.8 325.88 328.03 330.23 / - 14 17 2 1 291.08 290.13 289.82 289.8 289.95 290.23 290.6 291.06 291.6 292.21 292.89 293.64 - 294.45 295.33 296.27 297.28 298.35 299.48 300.67 301.92 303.23 304.6 306.03 307.52 309.08 310.69 312.36 314.09 - 315.88 317.73 319.64 321.61 323.64 325.73 327.87 330.08 / - 14 17 3 1 290.88 289.89 289.56 289.53 289.67 289.94 290.3 290.76 291.29 291.9 292.58 293.33 - 294.14 295.02 295.96 296.97 298.03 299.16 300.35 301.61 302.92 304.29 305.72 307.22 308.77 310.38 312.06 313.79 - 315.58 317.44 319.35 321.32 323.35 325.44 327.59 329.8 / - 14 17 4 1 290.48 289.42 289.05 288.99 289.12 289.37 289.73 290.18 290.71 291.32 291.99 292.74 - 293.55 294.43 295.37 296.37 297.44 298.57 299.76 301.02 302.33 303.71 305.14 306.64 308.2 309.82 311.5 313.23 - 315.03 316.89 318.81 320.79 322.83 324.93 327.08 329.3 / - 14 17 5 1 289.44 288.11 287.6 287.45 287.51 287.72 288.05 288.48 288.99 289.58 290.25 290.99 - 291.8 292.68 293.63 294.64 295.71 296.85 298.05 299.32 300.65 302.04 303.49 305.01 306.59 308.22 309.92 311.69 - 313.51 315.39 317.34 319.34 321.41 323.54 325.72 327.97 / - 14 17 6 1 286.84 284.82 283.91 283.51 283.4 283.5 283.74 284.11 284.58 285.15 285.81 286.55 - 287.36 288.26 289.22 290.26 291.37 292.55 293.79 295.11 296.49 297.93 299.44 301.02 302.67 304.37 306.15 307.98 - 309.88 311.85 313.87 315.96 318.12 320.33 322.61 324.95 / - 14 17 7 1 281.8 277.74 275.81 275.15 274.89 274.89 275.08 275.42 275.9 276.49 277.19 277.98 - 278.86 279.83 280.89 282.02 283.23 284.53 285.89 287.33 288.85 290.44 292.09 293.82 295.62 297.49 299.43 301.44 - 303.52 305.66 307.88 310.16 312.5 314.91 317.39 319.93 / - 14 17 8 1 273.19 262.94 260.92 260.3 260.11 260.2 260.5 260.97 261.59 262.33 263.19 264.16 - 265.24 266.41 267.68 269 270.44 271.98 273.6 275.3 277.09 278.91 280.86 282.89 284.99 287.18 289.4 291.73 - 294.14 296.63 299.19 301.78 304.48 307.26 310.1 312.99 / - 14 17 9 1 258.4 238.99 237.95 237.62 237.71 238.08 238.66 239.43 240.34 241.4 242.59 243.9 - 245.33 246.87 248.52 250.28 252.14 254.11 256.17 258.33 260.59 262.94 265.39 267.92 270.55 273.26 276.06 278.95 - 281.92 284.97 288.11 291.32 294.62 297.99 301.46 305.04 / - 14 17 10 1 222.79 210.34 209.19 208.96 209.26 209.91 210.83 211.99 213.35 214.9 216.62 218.5 - 220.53 222.71 225.04 227.49 230.08 232.8 235.64 238.6 241.67 244.86 248.15 251.55 255.05 258.66 262.36 266.15 - 270.04 274.02 278.09 282.25 286.49 290.81 295.22 299.71 / - 14 17 11 1 181.19 177.55 176.95 177.31 178.26 179.57 181.21 183.08 185.23 187.61 190.19 193.03 - 196.01 199.16 202.57 206.06 209.7 213.62 217.56 221.64 226.01 230.34 234.99 239.57 244.24 249.28 254.17 259.34 - 264.44 269.82 275.1 280.61 286.22 291.76 297.65 303.37 / - 14 17 12 1 148.13 147.83 148.74 150.56 152.94 155.69 158.72 162 165.5 169.21 173.11 177.2 - 181.46 185.89 190.49 195.25 200.16 205.54 211.31 217.08 222.84 228.79 234.83 241.04 247.27 253.7 260.26 266.96 - 273.79 280.76 287.86 295.09 302.08 309.55 317.09 324.76 / - 14 17 13 1 129.6 132.68 136.05 139.9 144.11 148.5 153.05 157.79 162.73 167.88 173.26 178.85 - 184.65 190.66 196.86 203.27 209.87 216.67 223.65 230.82 238.17 245.7 253.4 261.27 269.31 277.51 285.87 294.38 - 303.05 311.86 320.83 329.94 339.19 348.58 358.11 367.78 / - 14 17 14 1 124.9 129.66 134.18 138.97 144.14 149.73 155.82 162.35 169.28 176.57 184.21 192.18 - 200.47 209.07 217.98 227.19 236.69 246.48 256.56 266.92 277.56 288.47 299.65 311.1 322.8 334.77 346.99 359.41 - 372.03 384.85 397.89 411.15 424.62 438.32 452.23 466.36 / - 14 17 15 1 120.61 127.68 134.62 141.85 149.77 158.44 167.83 177.92 188.67 200.02 211.95 224.43 - 237.42 250.89 264.84 279.23 294.08 309.36 325.08 341.22 357.77 374.74 392.12 409.93 428.15 446.79 465.84 485.3 - 505.18 525.47 546.16 567.25 588.72 610.58 632.83 655.45 / - 14 17 16 1 118.17 128.32 139.8 152.48 166.37 181.45 197.7 215.09 233.54 253 273.42 294.76 - 316.99 340.08 364 388.72 414.17 440.34 467.25 494.91 523.31 552.46 582.3 612.85 644.1 676.03 708.73 742.19 - 776.45 811.5 847.33 883.94 921.34 959.53 998.51 1038.26 / - 14 17 17 1 119.73 137.47 159.38 184.35 211.52 240.08 270.11 302.64 335.7 371.64 409.2 448.43 - 487.43 529.9 573.84 619.27 666.39 714.86 765.03 815.46 868.82 923.79 980.33 1038.46 1098.11 1159.18 1221.36 1284.6 - 1343.65 1405 1466.9 1531.14 1596.57 1662.31 1729.98 1799.84 / - 14 17 18 1 127.7 167.3 212.38 260.25 311.04 365.02 422.45 483.29 547.79 615.79 687.62 763.18 - 842.88 926.64 1014.23 1105.17 1199.15 1295.54 1389.48 1485.97 1586.74 1689.6 1796.57 1906.05 2017.18 2132.5 2249.26 2369.21 - 2492.53 2618.24 2746.31 2876.58 3009.22 3144.51 3285.27 3425.44 / - 14 17 19 1 160.68 230.7 307.65 396.89 496.2 603.68 717.99 842.14 976.13 1118.74 1272.3 1424.12 - 1580.36 1749.95 1928.38 2107.08 2293.9 2496.76 2696.47 2904.55 3116.14 3354.84 3580.41 3815.06 4057.31 4307.68 4563.87 4827.08 - 5094.25 5375.11 5658.33 5948.29 6237.98 6539.73 6853.87 7169.11 / - 14 17 20 1 221.14 341.91 471.31 613.19 803.86 1025.48 1276.89 1530.45 1816.44 2120.92 2439.09 2779.27 - 3133.68 3521.4 3899.21 4319.98 4764.44 5197.8 5689.06 6157.5 6645.84 7200.83 7718.81 8259.01 8814.26 9383.29 10040.38 10641.54 - 11262.31 11894.96 12559.03 13250.44 13967.43 14696.36 15464.55 16227.6 / - 14 18 1 1 292.6 291.81 291.57 291.59 291.76 292.05 292.43 292.9 293.44 294.06 294.74 295.49 - 296.3 297.18 298.13 299.13 300.2 301.33 302.52 303.77 305.08 306.46 307.89 309.38 310.94 312.55 314.22 315.96 - 317.75 319.6 321.52 323.49 325.52 327.61 329.77 331.98 / - 14 18 2 1 292.49 291.67 291.42 291.43 291.59 291.88 292.26 292.72 293.26 293.88 294.56 295.31 - 296.12 297 297.94 298.95 300.01 301.14 302.33 303.59 304.9 306.27 307.71 309.2 310.75 312.37 314.04 315.78 - 317.57 319.43 321.34 323.32 325.35 327.44 329.6 331.81 / - 14 18 3 1 292.27 291.41 291.13 291.12 291.28 291.55 291.93 292.39 292.92 293.54 294.21 294.96 - 295.78 296.65 297.6 298.6 299.67 300.8 301.99 303.24 304.55 305.93 307.36 308.86 310.42 312.03 313.71 315.45 - 317.24 319.1 321.02 323 325.04 327.13 329.29 331.51 / - 14 18 4 1 291.74 290.73 290.38 290.32 290.45 290.7 291.05 291.5 292.03 292.63 293.31 294.05 - 294.86 295.74 296.68 297.69 298.76 299.89 301.09 302.34 303.66 305.05 306.49 307.99 309.56 311.18 312.87 314.62 - 316.43 318.3 320.23 322.22 324.27 326.38 328.55 330.79 / - 14 18 5 1 290.3 288.9 288.31 288.11 288.13 288.31 288.62 289.03 289.53 290.11 290.78 291.52 - 292.33 293.21 294.16 295.18 296.27 297.42 298.63 299.92 301.26 302.67 304.14 305.68 307.28 308.94 310.66 312.45 - 314.3 316.21 318.18 320.22 322.31 324.47 326.69 328.97 / - 14 18 6 1 287.35 285.08 284 283.49 283.3 283.34 283.54 283.88 284.34 284.9 285.55 286.29 - 287.12 288.02 289 290.06 291.19 292.4 293.67 295.02 296.43 297.91 299.47 301.09 302.77 304.53 306.35 308.23 - 310.18 312.2 314.28 316.43 318.64 320.91 323.25 325.66 / - 14 18 7 1 282.15 277.48 275.28 274.62 274.35 274.35 274.54 274.9 275.39 276.01 276.72 277.54 - 278.46 279.46 280.55 281.72 282.98 284.31 285.73 287.22 288.79 290.4 292.11 293.9 295.76 297.7 299.7 301.78 - 303.93 306.14 308.43 310.78 313.2 315.69 318.25 320.83 / - 14 18 8 1 273.44 262.13 260.13 259.61 259.49 259.64 259.99 260.51 261.17 261.96 262.87 263.88 - 265 266.17 267.48 268.89 270.38 271.96 273.63 275.39 277.18 279.1 281.11 283.2 285.37 287.56 289.89 292.29 - 294.77 297.29 299.92 302.63 305.37 308.23 311.16 314.16 / - 14 18 9 1 257.99 238.67 237.6 237.27 237.36 237.74 238.33 239.1 240.04 241.11 242.32 243.66 - 245.11 246.68 248.37 250.16 252.06 254.06 256.16 258.36 260.66 263.06 265.55 268.14 270.81 273.58 276.43 279.37 - 282.4 285.51 288.7 291.98 295.34 298.78 302.3 305.9 / - 14 18 10 1 222.3 210.26 209.11 208.89 209.2 209.87 210.81 211.99 213.37 214.95 216.69 218.61 - 220.68 222.89 225.25 227.75 230.39 233.15 236.04 239.04 242.17 245.41 248.75 252.21 255.77 259.43 263.2 267.05 - 271.01 275.05 279.19 283.41 287.73 292.12 296.6 301.16 / - 14 18 11 1 181.29 177.67 177.05 177.47 178.4 179.73 181.4 183.33 185.51 187.91 190.52 193.33 - 196.33 199.51 202.96 206.49 210.3 214.14 218.13 222.4 226.65 231.22 235.72 240.34 245.3 250.14 255.35 260.4 - 265.54 270.99 276.32 281.98 287.65 293.25 299.11 304.89 / - 14 18 12 1 148.33 148.04 149.08 151.05 153.53 156.34 159.43 162.75 166.28 170.01 173.93 178.03 - 182.3 186.75 191.36 196.13 201.05 206.12 211.69 217.68 223.63 229.56 235.68 241.9 248.28 254.67 261.26 267.99 - 274.86 281.86 289 296.28 303.68 310.83 318.48 326.21 / - 14 18 13 1 130.24 133.49 137 141.03 145.28 149.66 154.2 158.92 163.84 168.97 174.32 179.89 - 185.67 191.67 197.88 204.29 210.88 217.66 224.63 231.78 239.12 246.63 254.32 262.18 270.2 278.4 286.75 295.27 - 303.94 312.77 321.74 330.87 340.14 349.55 359.11 368.81 / - 14 18 14 1 125.85 130.53 135.05 139.83 144.98 150.59 156.7 163.22 170.11 177.36 184.95 192.85 - 201.08 209.61 218.45 227.59 237.01 246.73 256.72 266.99 277.53 288.34 299.41 310.75 322.34 334.18 346.28 358.64 - 371.26 384.14 397.25 410.58 424.1 437.82 451.76 465.9 / - 14 18 15 1 121.53 128.61 135.42 142.57 150.44 159.05 168.37 178.39 189.04 200.29 212.13 224.49 - 237.34 250.68 264.47 278.72 293.39 308.5 324.03 339.97 356.33 373.11 390.32 407.94 425.98 444.42 463.26 482.5 - 502.12 522.15 542.56 563.38 584.59 606.19 628.18 650.56 / - 14 18 16 1 118.87 129.05 140.44 152.99 166.72 181.65 197.76 214.99 233.28 252.57 272.8 293.93 - 315.94 338.74 362.3 386.63 411.71 437.54 464.11 491.39 519.4 548.12 577.58 607.75 638.65 670.25 702.58 735.66 - 769.48 804.05 839.37 875.44 912.26 949.83 988.16 1027.22 / - 14 18 17 1 120.25 137.8 159.54 184.3 211.24 239.53 269.31 301.59 334.26 369.81 407.05 445.99 - 484.45 526.45 569.98 614.64 661.28 709.48 759.13 808.85 861.55 915.75 971.47 1028.68 1087.38 1147.5 1208.86 1271.35 - 1332.1 1393.82 1456.18 1521.1 1586.48 1653.57 1722.35 1791.37 / - 14 18 18 1 127.93 167.58 212.46 259.86 310.05 363.35 420.14 480.18 543.85 611.15 682.52 757.38 - 836.37 918.85 1005.48 1095.48 1188.52 1284.82 1378.81 1476.99 1577.98 1682.77 1789.9 1901.03 2014.11 2129.66 2248.06 2371.59 - 2494.67 2622.11 2752.09 2884.4 3019.24 3156.75 3299.7 3442.38 / - 14 18 19 1 161.12 231.81 308.83 397.35 495.02 600.91 715.49 838.55 970.68 1111.71 1263.18 1416.73 - 1573.76 1743.67 1917.36 2106.14 2294.45 2500.02 2703.85 2915.34 3130.96 3371.54 3603.85 3840.38 4086.67 4339.66 4600.23 4868.94 - 5142.23 5423.54 5716.2 6010.94 6307.34 6614.49 6928.25 7256.02 / - 14 18 20 1 222.18 344.74 476.41 620.93 794.99 1019.62 1264.09 1521.16 1803.02 2106 2424.28 2767.53 - 3130.29 3506.8 3896.52 4318.59 4765.44 5235.15 5692.72 6169.51 6704.9 7214.27 7744.85 8350.79 8917.82 9498.37 10085.38 10694.84 - 11416.4 12064.04 12742.73 13440.83 14159.57 14907.5 15676.9 16461.5 / - 14 19 1 1 293.87 293.24 293.08 293.14 293.34 293.64 294.04 294.52 295.06 295.68 296.37 297.12 - 297.94 298.82 299.76 300.77 301.84 302.97 304.16 305.41 306.73 308.1 309.53 311.03 312.59 314.2 315.88 317.62 - 319.41 321.27 323.19 325.17 327.2 329.3 331.46 333.68 / - 14 19 2 1 293.74 293.08 292.9 292.95 293.14 293.44 293.83 294.3 294.85 295.46 296.15 296.9 - 297.72 298.6 299.54 300.54 301.61 302.74 303.94 305.19 306.5 307.88 309.31 310.81 312.37 313.99 315.66 317.4 - 319.2 321.06 322.98 324.96 327 329.1 331.26 333.48 / - 14 19 3 1 293.36 292.59 292.35 292.35 292.52 292.8 293.17 293.64 294.17 294.78 295.47 296.21 - 297.03 297.91 298.85 299.86 300.93 302.06 303.26 304.52 305.84 307.22 308.66 310.16 311.73 313.35 315.04 316.79 - 318.6 320.47 322.4 324.39 326.44 328.55 330.72 332.95 / - 14 19 4 1 292.43 291.39 290.98 290.89 290.98 291.21 291.55 291.99 292.51 293.11 293.78 294.52 - 295.34 296.22 297.17 298.19 299.27 300.41 301.62 302.9 304.23 305.63 307.09 308.62 310.21 311.86 313.57 315.34 - 317.18 319.08 321.03 323.05 325.14 327.28 329.48 331.75 / - 14 19 5 1 290.61 289.01 288.29 287.99 287.95 288.08 288.35 288.74 289.22 289.8 290.47 291.21 - 292.03 292.92 293.89 294.93 296.04 297.21 298.46 299.77 301.15 302.59 304.1 305.68 307.32 309.02 310.79 312.63 - 314.52 316.49 318.51 320.6 322.75 324.97 327.25 329.59 / - 14 19 6 1 287.47 284.95 283.57 282.97 282.74 282.75 282.94 283.27 283.73 284.29 284.96 285.72 - 286.56 287.5 288.51 289.6 290.77 292.01 293.33 294.72 296.19 297.72 299.33 301.01 302.75 304.57 306.45 308.41 - 310.43 312.51 314.67 316.89 319.18 321.53 323.95 326.44 / - 14 19 7 1 282.22 276.82 274.59 273.94 273.7 273.72 273.94 274.32 274.84 275.48 276.23 277.08 - 278.03 279.07 280.2 281.42 282.72 284.1 285.52 287.06 288.69 290.38 292.16 294.01 295.94 297.94 300.01 302.14 - 304.36 306.65 309.02 311.45 313.96 316.51 319.16 321.88 / - 14 19 8 1 273.44 261.21 259.13 258.78 258.78 259.03 259.46 260.05 260.78 261.63 262.57 263.63 - 264.8 266.04 267.4 268.86 270.4 272.01 273.73 275.54 277.38 279.37 281.43 283.58 285.75 288.07 290.46 292.93 - 295.43 298.06 300.76 303.49 306.35 309.29 312.3 315.34 / - 14 19 9 1 257.77 238.36 237.27 236.93 237.02 237.4 238 238.79 239.74 240.83 242.06 243.42 - 244.91 246.51 248.22 250.05 251.98 254.02 256.16 258.41 260.75 263.2 265.74 268.37 271.09 273.91 276.82 279.82 - 282.9 286.07 289.33 292.67 296.1 299.6 303.19 306.85 / - 14 19 10 1 221.22 210.18 209.03 208.83 209.15 209.83 210.79 211.99 213.4 215 216.78 218.72 - 220.82 223.08 225.48 228.02 230.7 233.5 236.44 239.49 242.67 245.96 249.37 252.88 256.5 260.22 264.05 267.97 - 271.99 276.1 280.31 284.6 288.99 293.46 298.01 302.65 / - 14 19 11 1 181.49 177.79 177.19 177.6 178.58 179.93 181.58 183.53 185.73 188.15 190.79 193.63 - 196.76 200 203.41 207.1 210.84 214.73 218.89 223.06 227.53 231.96 236.5 241.37 246.15 251.28 256.28 261.38 - 266.87 272.17 277.77 283.26 289.08 294.74 300.66 306.68 / - 14 19 12 1 148.6 148.25 149.65 151.86 154.49 157.4 160.54 163.9 167.46 171.2 175.12 179.22 - 183.49 187.92 192.52 197.27 202.18 207.24 212.44 218.3 224.35 230.47 236.55 242.83 249.19 255.72 262.25 269 - 275.88 282.9 290.07 297.37 304.44 311.99 319.68 327.5 / - 14 19 13 1 131.33 134.82 138.73 142.93 147.18 151.51 156 160.66 165.52 170.58 175.86 181.35 - 187.06 192.98 199.11 205.45 212 218.75 225.7 232.83 240.13 247.6 255.23 263.04 271.02 279.16 287.47 295.94 - 304.57 313.36 322.3 331.4 340.65 350.05 359.6 369.29 / - 14 19 14 1 127.34 131.91 136.41 141.15 146.32 151.99 158.08 164.55 171.36 178.5 185.96 193.75 - 201.84 210.24 218.93 227.93 237.21 246.77 256.6 266.71 277.09 287.73 298.62 309.77 321.18 332.83 344.73 356.88 - 369.28 381.93 394.82 407.95 421.32 434.93 448.78 462.87 / - 14 19 15 1 123.17 130.12 136.64 143.68 151.44 159.92 169.11 178.96 189.47 200.56 212.2 224.35 - 236.98 250.08 263.63 277.62 292.03 306.86 322.1 337.76 353.82 370.29 387.17 404.44 422.11 440.18 458.64 477.49 - 496.73 516.36 536.37 556.78 577.56 598.74 620.3 642.24 / - 14 19 16 1 120.13 130.35 141.52 153.79 167.22 181.88 197.74 214.72 232.74 251.75 271.68 292.4 - 313.92 336.19 359.22 383 407.51 432.76 458.72 485.41 512.83 540.95 569.8 599.36 629.64 660.63 692.33 724.75 - 757.9 791.76 826.34 861.64 897.66 934.41 971.87 1010.06 / - 14 19 17 1 121.21 138.55 159.75 184.26 210.36 238.8 268.16 300.06 332.18 367.26 403.93 441.59 - 479.73 521.03 563.71 607.84 653.59 700.81 749.44 797.84 849.36 902.34 956.79 1012.71 1070.11 1128.95 1189.19 1250.73 - 1312.42 1374.72 1438.36 1503.1 1569.43 1637.09 1706.53 1776.89 / - 14 19 18 1 128.79 168.2 212.63 259.29 308.57 360.92 416.51 475.59 538.49 604.79 675.44 748.92 - 826.72 907.34 992.48 1081.06 1173.09 1267.78 1363.65 1462.65 1564.88 1670.53 1779.24 1890.7 2005.31 2122.64 2243.75 2367.67 - 2494.39 2622.67 2754.82 2889.48 3026.83 3166.96 3312.26 3457.94 / - 14 19 19 1 162.09 233.93 311.34 398.98 494.95 598.22 710.85 831.93 960.9 1100.53 1246.95 1400.4 - 1561.78 1733.61 1908.69 2097.51 2288.35 2486.75 2703 2916.4 3137.91 3365.03 3616.57 3860.84 4112.24 4370.2 4635.84 4912.12 - 5193.89 5481.78 5773.59 6083.04 6387.55 6701.28 7021.63 7345.38 / - 14 19 20 1 224.23 349.44 484.36 631.98 794.34 1005.02 1245.05 1499.08 1782.24 2080.65 2406.3 2743.8 - 3107.75 3491.61 3891.08 4312.08 4746.05 5215.57 5709.02 6187.59 6725.81 7243.67 7827.69 8380.3 8952.6 9539.91 10214.15 10839.7 - 11486.53 12155.39 12843.87 13547.47 14395.12 15154.26 15934.28 16735.09 / - 14 20 1 1 294.55 293.97 293.83 293.89 294.09 294.39 294.79 295.26 295.81 296.44 297.13 297.88 - 298.7 299.59 300.54 301.56 302.64 303.78 304.98 306.25 307.57 308.96 310.41 311.93 313.5 315.14 316.83 318.59 - 320.41 322.29 324.23 326.24 328.3 330.42 332.61 334.86 / - 14 20 2 1 294.15 293.45 293.23 293.24 293.41 293.7 294.07 294.54 295.08 295.69 296.38 297.14 - 297.96 298.85 299.8 300.82 301.91 303.05 304.27 305.54 306.88 308.28 309.74 311.26 312.85 314.5 316.21 317.98 - 319.81 321.71 323.67 325.68 327.76 329.91 332.11 334.37 / - 14 20 3 1 293.47 292.57 292.23 292.17 292.28 292.53 292.88 293.32 293.85 294.46 295.14 295.9 - 296.72 297.62 298.58 299.6 300.7 301.86 303.08 304.37 305.72 307.14 308.62 310.16 311.77 313.44 315.17 316.97 - 318.82 320.74 322.73 324.77 326.88 329.05 331.29 333.58 / - 14 20 4 1 292.35 291.1 290.56 290.37 290.4 290.59 290.89 291.31 291.82 292.41 293.09 293.84 - 294.67 295.57 296.55 297.59 298.7 299.88 301.12 302.44 303.82 305.26 306.77 308.35 309.99 311.7 313.47 315.31 - 317.21 319.17 321.2 323.29 325.45 327.67 329.95 332.3 / - 14 20 5 1 290.46 288.65 287.79 287.39 287.28 287.37 287.61 287.98 288.46 289.04 289.71 290.47 - 291.3 292.22 293.22 294.29 295.43 296.65 297.93 299.29 300.72 302.22 303.79 305.42 307.13 308.9 310.74 312.64 - 314.62 316.66 318.76 320.94 323.18 325.48 327.85 330.29 / - 14 20 6 1 287.3 284.57 282.82 282.24 282.01 282.02 282.22 282.57 283.04 283.63 284.32 285.11 - 285.99 286.96 288.01 289.14 290.35 291.64 293.01 294.45 295.97 297.56 299.23 300.97 302.78 304.67 306.62 308.65 - 310.74 312.91 315.15 317.45 319.83 322.27 324.78 327.37 / - 14 20 7 1 282.01 275.97 273.72 273.14 272.94 273.01 273.27 273.69 274.25 274.93 275.72 276.61 - 277.6 278.68 279.86 281.12 282.47 283.9 285.41 287.01 288.64 290.39 292.23 294.14 296.13 298.2 300.34 302.52 - 304.81 307.18 309.62 312.14 314.73 317.36 320.09 322.9 / - 14 20 8 1 273.16 260.17 258.35 258.09 258.16 258.47 258.96 259.59 260.36 261.25 262.25 263.36 - 264.57 265.87 267.28 268.77 270.36 272.04 273.81 275.66 277.6 279.63 281.74 283.94 286.22 288.58 291.02 293.54 - 296.14 298.82 301.58 304.44 307.39 310.39 313.47 316.62 / - 14 20 9 1 256.56 238.05 236.94 236.59 236.68 237.07 237.68 238.48 239.45 240.56 241.82 243.2 - 244.71 246.34 248.08 249.94 251.91 253.99 256.17 258.46 260.85 263.34 265.93 268.61 271.39 274.26 277.22 280.28 - 283.42 286.65 289.97 293.37 296.86 300.43 304.09 307.82 / - 14 20 10 1 220.57 210.11 208.96 208.76 209.09 209.79 210.77 211.99 213.42 215.05 216.86 218.83 - 220.97 223.26 225.7 228.28 231 233.86 236.84 239.95 243.17 246.52 249.82 253.38 257.04 260.82 264.7 268.68 - 272.77 276.94 281.21 285.57 290.02 294.55 299.17 303.87 / - 14 20 11 1 181.6 178 177.37 177.78 178.75 180.13 181.89 183.93 186.25 188.81 191.58 194.53 - 197.67 201.06 204.53 208.16 212.06 215.98 220.04 224.41 228.77 233.44 238.05 242.99 247.83 252.76 258.05 263.17 - 268.38 274 279.39 285.1 290.67 296.57 302.31 308.3 / - 14 20 12 1 149.1 149.74 152.17 154.92 157.84 160.91 164.12 167.48 171 174.67 178.49 182.48 - 186.62 190.92 195.37 199.98 204.74 209.65 214.7 219.9 225.96 232.05 238.08 244.21 250.54 256.95 263.53 270.1 - 276.88 283.8 290.86 298.05 305.01 312.45 320.02 327.73 / - 14 20 13 1 134.8 139.8 144.26 148.4 152.48 156.61 160.88 165.3 169.91 174.71 179.72 184.93 - 190.35 195.99 201.83 207.87 214.13 220.58 227.24 234.1 241.15 248.39 255.83 263.45 271.26 279.25 287.43 295.78 - 304.27 312.91 321.71 330.65 339.75 349 358.39 367.92 / - 14 20 14 1 131.14 135.7 140.35 145.43 150.76 156.31 162.14 168.26 174.69 181.44 188.5 195.88 - 203.57 211.57 219.86 228.45 237.34 246.51 255.95 265.68 275.68 285.94 296.46 307.24 318.27 329.55 341.08 352.85 - 364.87 377.14 389.64 402.38 415.36 428.58 442.03 455.71 / - 14 20 15 1 127.9 133.83 139.96 146.67 154.1 162.3 171.18 180.65 190.69 201.26 212.35 223.93 - 236 248.54 261.54 274.99 288.89 303.2 317.94 333.08 348.63 364.59 380.95 397.7 414.84 432.38 450.3 468.6 - 487.28 506.35 525.79 545.61 565.8 586.37 607.31 628.62 / - 14 20 16 1 124.6 134.37 144.51 155.83 168.52 182.5 197.69 213.95 231.24 249.46 268.55 288.47 - 309.18 330.64 352.87 375.83 399.54 423.97 449.12 474.99 501.58 528.87 556.88 585.58 614.99 645.1 675.91 707.41 - 739.61 772.5 806.09 840.36 875.33 910.97 947.31 984.33 / - 14 20 17 1 124.33 140.88 160.78 184.01 209.34 236.63 266.13 295.94 328.46 362.84 398.82 433.41 - 472.03 512.04 552.99 595.58 639.84 685.53 732.4 779.04 829.06 880.54 933.47 987.83 1043.65 1100.9 1159.59 1219.72 - 1281.26 1344.22 1408.6 1474.37 1541.55 1610.13 1680.1 1751.44 / - 14 20 18 1 132.41 170.35 212.68 258.19 306.49 357.6 412.38 470.7 532.16 596.8 665.76 737.49 - 813.58 891.38 974.56 1061.13 1151.06 1242.56 1339.49 1439.76 1543.27 1650.02 1760.08 1873 1989.35 2108.79 2231.27 2356.91 - 2485.47 2617.06 2751.65 2889.11 3029.43 3172.67 3320.33 3469.56 / - 14 20 19 1 165.89 238.14 315.85 402.34 495.62 596.76 706.08 823.77 950.75 1086.79 1232.33 1384.46 - 1547.03 1718.63 1896.27 2085.69 2279.51 2480.94 2696.78 2914.03 3138.59 3370.39 3621.88 3870.23 4126.19 4389.7 4660.7 4940.37 - 5227.54 5522.16 5822.45 6137.6 6452.78 6775.06 7104.37 7440.69 / - 14 20 20 1 228.8 358.29 497.95 649.47 813.69 990.87 1180.92 1383.72 1640.79 1931.14 2238.13 2570.09 - 2917.94 3292.14 3674.06 4092.44 4539.34 4983.28 5481.86 5971.06 6483.12 7018.54 7577.93 8176.76 8754.76 9389.66 10024.32 10637.93 - 11354.02 12016.37 12793.63 13504.09 14235.76 14988.7 15886.14 16689.25 / - 15 1 1 1 273.57 273.44 273.53 273.74 274.05 274.44 274.9 275.43 276.03 276.68 277.39 278.17 - 279 279.89 280.83 281.83 282.88 283.99 285.16 286.38 287.65 288.98 290.36 291.79 293.28 294.82 296.41 298.05 - 299.75 301.5 303.3 305.16 307.07 309.03 311.04 313.1 / - 15 1 2 1 273.5 273.37 273.45 273.66 273.97 274.36 274.82 275.35 275.94 276.59 277.31 278.08 - 278.91 279.8 280.74 281.74 282.8 283.91 285.07 286.29 287.57 288.89 290.27 291.71 293.2 294.74 296.33 297.98 - 299.68 301.43 303.23 305.09 307 308.96 310.98 313.04 / - 15 1 3 1 273.38 273.23 273.3 273.51 273.81 274.2 274.66 275.19 275.78 276.43 277.15 277.92 - 278.75 279.64 280.58 281.59 282.64 283.75 284.92 286.14 287.41 288.74 290.13 291.56 293.05 294.59 296.19 297.84 - 299.54 301.29 303.1 304.96 306.87 308.84 310.86 312.92 / - 15 1 4 1 273.14 272.97 273.03 273.23 273.53 273.91 274.37 274.9 275.49 276.14 276.86 277.63 - 278.46 279.35 280.3 281.3 282.36 283.47 284.64 285.86 287.14 288.47 289.85 291.29 292.79 294.33 295.93 297.58 - 299.29 301.05 302.86 304.73 306.64 308.61 310.63 312.71 / - 15 1 5 1 272.7 272.49 272.53 272.71 273.01 273.39 273.84 274.36 274.95 275.61 276.32 277.1 - 277.93 278.82 279.77 280.77 281.83 282.95 284.12 285.35 286.63 287.97 289.36 290.8 292.3 293.85 295.46 297.12 - 298.83 300.6 302.42 304.29 306.22 308.2 310.23 312.31 / - 15 1 6 1 271.85 271.56 271.57 271.74 272.02 272.39 272.84 273.36 273.95 274.6 275.32 276.09 - 276.93 277.83 278.78 279.79 280.85 281.98 283.16 284.39 285.68 287.03 288.43 289.88 291.4 292.96 294.58 296.25 - 297.98 299.76 301.6 303.49 305.43 307.43 309.48 311.58 / - 15 1 7 1 270.15 269.76 269.72 269.86 270.13 270.49 270.93 271.45 272.04 272.7 273.42 274.2 - 275.04 275.95 276.91 277.93 279.01 280.15 281.34 282.6 283.9 285.27 286.69 288.17 289.7 291.29 292.94 294.64 - 296.39 298.2 300.07 301.99 303.97 306 308.08 310.22 / - 15 1 8 1 266.76 266.24 266.13 266.23 266.47 266.81 267.25 267.77 268.36 269.02 269.75 270.55 - 271.41 272.33 273.32 274.37 275.47 276.64 277.87 279.16 280.51 281.91 283.38 284.9 286.49 288.13 289.83 291.58 - 293.4 295.27 297.2 299.19 301.23 303.33 305.49 307.71 / - 15 1 9 1 258.84 256.52 255.9 255.69 255.74 255.96 256.34 256.84 257.44 258.13 258.91 259.77 - 260.71 261.73 262.83 263.99 265.23 266.54 267.92 269.37 270.84 272.42 274.07 275.79 277.57 279.41 281.33 283.3 - 285.34 287.45 289.62 291.85 294.14 296.49 298.91 301.39 / - 15 1 10 1 242.53 232.79 231.51 231 230.96 231.22 231.7 232.38 233.18 234.15 235.24 236.46 - 237.79 239.23 240.73 242.37 244.11 245.94 247.81 249.82 251.91 254.04 256.3 258.63 261.04 263.49 266.06 268.69 - 271.37 274.15 277 279.89 282.87 285.93 289.03 292.21 / - 15 1 11 1 204.58 198.79 197.58 197.38 197.75 198.51 199.58 200.89 202.39 204.12 205.99 208.06 - 210.29 212.67 215.18 217.82 220.61 223.51 226.54 229.68 232.92 236.28 239.73 243.28 246.92 250.65 254.48 258.38 - 262.4 266.47 270.63 274.88 279.22 283.61 288.03 292.5 / - 15 1 12 1 169.7 167.05 166.88 167.63 168.9 170.59 172.61 174.96 177.64 180.53 183.69 187.01 - 190.59 194.36 198.23 202.33 206.59 211.02 215.61 220.19 225.05 230.04 234.97 240.22 245.58 250.83 256.42 261.85 - 267.64 273.53 279.23 285.34 291.2 297.5 303.53 309.64 / - 15 1 13 1 145.58 146.15 148.36 151.2 154.39 157.87 161.61 165.59 169.81 174.25 178.91 183.78 - 188.87 194.15 199.63 205.3 211.16 217.19 223.4 229.77 236.3 243.64 251.3 258.68 266.31 273.92 281.83 289.57 - 297.81 305.92 314.17 322.56 331.08 339.73 348.52 357.03 / - 15 1 14 1 137.97 141.12 144.73 148.83 153.57 158.74 164.27 170.15 176.38 182.96 189.88 197.13 - 204.7 212.59 220.79 229.3 238.1 247.18 256.49 266.01 275.76 285.73 295.93 306.34 316.98 327.84 338.91 350.19 - 361.69 374.04 386.94 400.01 413.1 426.41 439.75 453.15 / - 15 1 15 1 135.48 140.24 145.74 152.1 159.29 167.27 176 185.45 195.55 206.23 217.48 229.26 - 241.54 254.32 267.59 281.34 295.56 310.24 325.39 341 357.08 373.55 390.42 407.62 425.15 443.05 461.31 479.95 - 498.98 518.4 538.23 559.7 581.6 603.8 626.16 648.77 / - 15 1 16 1 133.37 141.76 151.8 163.23 176.15 190.5 206.14 222.98 240.94 259.94 279.86 300.71 - 322.45 345.06 368.51 392.76 417.89 443.86 470.65 498.3 526.79 556.14 586.27 617.19 648.83 681.05 714.12 748.54 - 784.69 821.59 859.42 897.55 936.28 975.33 1015.34 1054.68 / - 15 1 17 1 134.72 150.4 169.92 192.4 217.78 245.39 275.45 307.84 341.79 377.2 415.05 454.68 - 496 539.06 583.96 630.24 678.36 728.57 780.73 834.54 890.03 947.16 1006.15 1066.91 1127.9 1188.19 1244.57 1293.99 - 1337.19 1383.03 1428.29 1477.2 1526.3 1576.42 1631.65 1681.38 / - 15 1 18 1 142.86 178.53 220.53 266.63 316.83 370.92 429.34 491.98 558.84 629.63 704.11 783.74 - 867.9 956.26 1048.19 1142.16 1237.76 1327.31 1414.11 1503.32 1596.79 1693.01 1791.08 1888.71 1989.86 2093.34 2200.06 2303.83 - 2415.77 2527.64 2642.34 2755.81 2872.6 2991.14 3111.28 3232.7 / - 15 1 19 1 171.5 238.31 319.03 410.1 509.86 619.71 739.16 870.6 1012.11 1163.05 1312.35 1448.18 - 1598.69 1750.5 1905.84 2074.25 2236.64 2405.21 2577.42 2759.61 2938.17 3130.97 3322.99 3516.71 3721.34 3925.8 4135.58 4348.33 - 4561.81 4788.6 5021.86 5253.87 5493.12 5725.9 5975.49 6228.46 / - 15 1 20 1 228.52 341.09 490 674.95 889.65 1128.04 1371.58 1617.22 1884.22 2160.66 2441.55 2752.22 - 3080.92 3405.9 3745.35 4131.69 4499.48 4878.44 5280.25 5685.57 6108.56 6545.07 6989.65 7434.12 7923.22 8402.75 8883.84 9383.5 - 9901.76 10431.61 10974.48 11555.86 12115.55 12698.73 13306.38 13929.58 / - 15 2 1 1 275.42 275.28 275.36 275.57 275.88 276.27 276.73 277.26 277.85 278.51 279.22 280 - 280.83 281.72 282.67 283.67 284.73 285.84 287.01 288.23 289.51 290.84 292.23 293.67 295.16 296.71 298.31 299.96 - 301.67 303.43 305.24 307.1 309.02 310.99 313.01 315.09 / - 15 2 2 1 275.35 275.2 275.28 275.48 275.79 276.18 276.64 277.17 277.76 278.41 279.13 279.91 - 280.74 281.63 282.58 283.58 284.64 285.75 286.92 288.15 289.42 290.76 292.14 293.58 295.08 296.63 298.23 299.88 - 301.59 303.35 305.16 307.03 308.95 310.92 312.95 315.02 / - 15 2 3 1 275.22 275.06 275.12 275.33 275.63 276.01 276.47 277 277.6 278.25 278.97 279.74 - 280.57 281.46 282.41 283.42 284.48 285.59 286.76 287.99 289.27 290.6 291.99 293.43 294.93 296.48 298.08 299.74 - 301.45 303.21 305.02 306.89 308.82 310.79 312.82 314.9 / - 15 2 4 1 274.98 274.79 274.84 275.04 275.34 275.72 276.18 276.7 277.3 277.95 278.67 279.44 - 280.27 281.17 282.11 283.12 284.18 285.3 286.47 287.7 288.98 290.32 291.71 293.15 294.65 296.2 297.81 299.47 - 301.18 302.95 304.77 306.65 308.57 310.55 312.59 314.67 / - 15 2 5 1 274.51 274.28 274.32 274.5 274.79 275.17 275.63 276.15 276.74 277.39 278.11 278.89 - 279.72 280.61 281.57 282.57 283.64 284.76 285.93 287.16 288.45 289.79 291.19 292.64 294.14 295.7 297.32 298.98 - 300.71 302.48 304.31 306.19 308.13 310.12 312.16 314.26 / - 15 2 6 1 273.62 273.32 273.32 273.49 273.77 274.14 274.59 275.11 275.7 276.35 277.07 277.85 - 278.69 279.58 280.54 281.55 282.62 283.75 284.93 286.17 287.47 288.82 290.23 291.69 293.2 294.78 296.4 298.08 - 299.82 301.61 303.45 305.35 307.3 309.31 311.37 313.49 / - 15 2 7 1 271.84 271.44 271.4 271.54 271.81 272.17 272.61 273.13 273.72 274.38 275.1 275.89 - 276.73 277.64 278.6 279.63 280.71 281.85 283.05 284.31 285.62 286.99 288.42 289.9 291.44 293.04 294.69 296.4 - 298.17 299.99 301.86 303.79 305.78 307.82 309.92 312.07 / - 15 2 8 1 268.29 267.74 267.61 267.7 267.94 268.28 268.71 269.23 269.82 270.48 271.21 272.01 - 272.87 273.79 274.78 275.84 276.95 278.12 279.36 280.65 282.01 283.42 284.9 286.43 288.02 289.68 291.39 293.15 - 294.98 296.87 298.81 300.81 302.87 304.98 307.15 309.39 / - 15 2 9 1 259.87 257.19 256.55 256.33 256.37 256.59 256.96 257.48 258.08 258.79 259.58 260.45 - 261.41 262.44 263.55 264.69 265.95 267.28 268.67 270.14 271.68 273.29 274.96 276.7 278.51 280.39 282.33 284.33 - 286.4 288.53 290.73 292.99 295.32 297.71 300.16 302.67 / - 15 2 10 1 243.18 232.71 231.44 230.95 230.92 231.19 231.7 232.39 233.24 234.24 235.37 236.62 - 237.94 239.41 240.98 242.66 244.38 246.24 248.2 250.25 252.33 254.55 256.85 259.2 261.66 264.2 266.78 269.46 - 272.22 275.03 277.93 280.91 283.92 287.03 290.21 293.44 / - 15 2 11 1 204.38 198.82 197.66 197.49 197.89 198.68 199.74 201.08 202.61 204.36 206.28 208.39 - 210.65 213.07 215.63 218.33 221.15 224.1 227.17 230.36 233.65 237.05 240.56 244.16 247.85 251.64 255.52 259.48 - 263.53 267.65 271.86 276.15 280.51 284.96 289.49 294.08 / - 15 2 12 1 169.67 167.16 167.04 167.83 169.13 170.85 172.9 175.31 177.99 180.91 184.1 187.52 - 191.07 194.87 198.86 203 207.21 211.67 216.29 221.06 225.81 230.84 236.01 241.09 246.5 252.04 257.43 263.19 - 268.77 274.71 280.77 286.61 292.87 298.88 305.34 311.51 / - 15 2 13 1 145.67 146.26 148.53 151.4 154.64 158.16 161.94 165.96 170.21 174.69 179.39 184.3 - 189.43 194.75 200.28 205.99 211.89 217.97 224.22 230.64 237.21 244.28 252.04 259.55 267.33 275.05 282.84 290.8 - 299.01 307.18 315.49 323.93 332.51 341.23 350.08 359.08 / - 15 2 14 1 138.03 141.28 144.95 149.06 153.79 159 164.57 170.5 176.77 183.4 190.36 197.66 - 205.28 213.21 221.45 230 238.85 247.99 257.35 266.93 276.73 286.76 297.01 307.49 318.19 329.11 340.24 351.59 - 363.15 374.92 387.91 401.14 414.48 427.81 441.51 455.08 / - 15 2 15 1 135.42 140.37 145.92 152.32 159.55 167.57 176.34 185.81 195.95 206.68 217.97 229.79 - 242.13 254.95 268.27 282.06 296.33 311.06 326.26 341.92 358.04 374.59 391.53 408.8 426.42 444.38 462.72 481.44 - 500.54 520.04 539.94 560.68 582.69 605.1 627.78 650.73 / - 15 2 16 1 133.25 141.79 151.91 163.42 176.38 190.76 206.43 223.3 241.29 260.33 280.31 301.2 - 322.99 345.66 369.17 393.47 418.64 444.64 471.47 499.14 527.66 557.02 587.18 618.1 649.8 682.08 715.19 749.18 - 785.42 822.46 860.11 898.2 937.16 976.58 1015.91 1055.78 / - 15 2 17 1 134.64 150.43 170.04 192.58 218 245.85 276.06 308.16 342.28 377.71 415.3 454.97 - 496.31 539.38 584.26 630.54 678.6 728.74 780.92 834.77 890.26 947.37 1006.54 1067.45 1128.24 1188.76 1245.92 1294.92 - 1340.27 1386.92 1433.46 1482.27 1532.09 1582.56 1634.81 1688.48 / - 15 2 18 1 142.76 178.54 220.69 266.93 317.05 371.18 429.51 492.06 558.83 629.57 703.89 783.35 - 867.32 955.57 1047.53 1141.56 1237.12 1327.93 1416.16 1506.98 1603.21 1693.16 1784.82 1875.39 1969.01 2064.52 2164.07 2259.92 - 2362.73 2467.29 2570.63 2674.28 2782.29 2891.21 3001.27 3110.65 / - 15 2 19 1 171.4 238.1 318.51 409.52 509.08 618.91 738.93 870.08 1011.3 1162.13 1311.9 1448.79 - 1599.51 1752.52 1909.38 2080.06 2244.6 2415.12 2588.31 2772.58 2953.72 3148.31 3342.26 3539.34 3738.73 3951.54 4163.44 4378.7 - 4594.59 4823.55 5057.91 5293.8 5535.33 5771.43 6023.19 6278.66 / - 15 2 20 1 228.38 341.02 487.2 672.29 884.52 1127.32 1372.72 1617.79 1876.97 2152.39 2445.55 2757.64 - 3069.91 3414.8 3758.28 4113.53 4515.94 4900.07 5303.79 5715.93 6145.57 6587.34 7036.91 7486.43 7961.4 8465.58 8951.66 9456.33 - 9979.57 10514.83 11063.68 11651.49 12217.22 12806.61 13420.66 14050.54 / - 15 3 1 1 277.27 277.12 277.19 277.39 277.7 278.09 278.55 279.08 279.67 280.33 281.04 281.82 - 282.66 283.55 284.5 285.5 286.57 287.68 288.86 290.08 291.37 292.7 294.09 295.54 297.04 298.59 300.2 301.86 - 303.57 305.34 307.16 309.04 310.96 312.94 314.98 317.06 / - 15 3 2 1 277.2 277.03 277.1 277.3 277.61 277.99 278.46 278.98 279.58 280.23 280.95 281.73 - 282.56 283.45 284.4 285.41 286.47 287.59 288.76 289.99 291.28 292.61 294.01 295.45 296.95 298.51 300.12 301.78 - 303.49 305.26 307.08 308.96 310.89 312.87 314.91 316.99 / - 15 3 3 1 277.06 276.88 276.94 277.14 277.44 277.83 278.29 278.81 279.41 280.06 280.78 281.56 - 282.39 283.28 284.23 285.24 286.3 287.42 288.6 289.83 291.11 292.45 293.84 295.29 296.8 298.35 299.96 301.63 - 303.34 305.11 306.94 308.82 310.75 312.73 314.77 316.86 / - 15 3 4 1 276.8 276.6 276.65 276.84 277.14 277.52 277.98 278.5 279.1 279.75 280.47 281.25 - 282.08 282.98 283.93 284.93 286 287.12 288.3 289.53 290.81 292.16 293.55 295 296.51 298.07 299.68 301.35 - 303.07 304.85 306.68 308.56 310.49 312.48 314.53 316.62 / - 15 3 5 1 276.32 276.08 276.1 276.29 276.58 276.95 277.41 277.93 278.52 279.18 279.89 280.67 - 281.51 282.4 283.36 284.37 285.44 286.56 287.74 288.97 290.27 291.61 293.01 294.47 295.98 297.55 299.17 300.84 - 302.57 304.35 306.19 308.08 310.03 312.03 314.08 316.19 / - 15 3 6 1 275.38 275.07 275.07 275.24 275.51 275.88 276.33 276.86 277.45 278.1 278.82 279.6 - 280.44 281.34 282.3 283.31 284.38 285.51 286.7 287.95 289.25 290.6 292.01 293.48 295 296.58 298.21 299.9 - 301.65 303.45 305.3 307.21 309.17 311.19 313.26 315.38 / - 15 3 7 1 273.52 273.12 273.07 273.21 273.48 273.84 274.28 274.81 275.4 276.05 276.78 277.56 - 278.41 279.32 280.29 281.31 282.4 283.55 284.75 286.01 287.33 288.7 290.14 291.63 293.17 294.78 296.44 298.15 - 299.93 301.75 303.64 305.58 307.57 309.63 311.73 313.9 / - 15 3 8 1 269.79 269.19 269.03 269.1 269.32 269.66 270.09 270.6 271.19 271.85 272.58 273.38 - 274.24 275.17 276.17 277.22 278.34 279.52 280.76 282.07 283.43 284.85 286.34 287.88 289.48 291.14 292.86 294.64 - 296.48 298.38 300.34 302.35 304.43 306.56 308.75 311 / - 15 3 9 1 260.86 257.79 257.12 256.88 256.91 257.14 257.51 258.01 258.62 259.36 260.15 261.01 - 261.98 263.03 264.15 265.36 266.63 267.98 269.41 270.9 272.46 274.09 275.79 277.56 279.4 281.3 283.27 285.31 - 287.41 289.57 291.8 294.1 296.43 298.85 301.34 303.89 / - 15 3 10 1 243.49 232.67 231.36 230.89 230.88 231.18 231.7 232.42 233.3 234.33 235.45 236.73 - 238.13 239.63 241.2 242.92 244.73 246.63 248.58 250.66 252.83 255.09 257.38 259.8 262.31 264.86 267.52 270.26 - 273.04 275.93 278.86 281.89 284.99 288.13 291.37 294.67 / - 15 3 11 1 203.88 198.87 197.74 197.6 198.03 198.82 199.91 201.27 202.85 204.63 206.6 208.65 - 210.93 213.37 215.96 218.68 221.53 224.51 227.61 230.82 234.15 237.58 241.11 244.75 248.48 252.3 256.21 260.21 - 264.3 268.87 273.14 277.49 281.91 286.41 290.98 295.64 / - 15 3 12 1 169.63 167.28 167.24 168.04 169.39 171.12 173.2 175.63 178.34 181.33 184.51 187.96 - 191.61 195.38 199.4 203.59 207.93 212.33 216.97 221.78 226.73 231.64 236.85 242.19 247.66 253.01 258.71 264.25 - 270.17 276.18 282 288.22 294.2 300.63 306.78 313.4 / - 15 3 13 1 145.76 146.38 148.7 151.61 154.89 158.45 162.26 166.32 170.61 175.13 179.87 184.82 - 189.99 195.36 200.92 206.68 212.62 218.74 225.04 231.5 238.13 244.92 252.56 260.38 268.21 276.13 284.02 292.02 - 300.21 308.44 316.8 325.31 333.95 342.73 351.65 360.71 / - 15 3 14 1 138.1 141.45 145.17 149.3 154.03 159.26 164.88 170.84 177.16 183.83 190.84 198.18 - 205.85 213.83 222.12 230.71 239.61 248.79 258.21 267.84 277.7 287.78 298.09 308.63 319.39 330.38 341.58 352.99 - 364.62 376.45 388.84 402.16 415.68 429.26 442.9 456.65 / - 15 3 15 1 135.35 140.5 146.1 152.55 159.81 167.87 176.67 186.17 196.35 207.13 218.46 230.33 - 242.71 255.59 268.95 282.79 297.1 311.88 327.12 342.83 358.99 375.61 392.62 409.98 427.67 445.71 464.12 482.92 - 502.09 521.67 541.64 562.03 583.72 606.29 629.22 652.39 / - 15 3 16 1 133.14 141.82 152.01 163.61 176.6 191.01 206.72 223.61 241.63 260.7 280.74 301.68 - 323.52 346.23 369.81 394.17 419.38 445.41 472.27 499.96 528.5 557.87 588.04 618.98 650.69 683.06 716.22 750.24 - 785.6 822.7 860.53 899.26 938.18 977.36 1017.16 1056.86 / - 15 3 17 1 134.57 150.47 170.16 192.77 218.21 246.29 276.28 308.39 342.5 378.56 415.54 455.23 - 496.58 539.79 584.53 630.78 678.78 728.84 780.97 834.9 890.39 947.48 1006.44 1066.77 1128.16 1188.85 1246.86 1297.16 - 1343.89 1392.09 1440.31 1490.67 1542.84 1594.34 1647.38 1704.4 / - 15 3 18 1 142.67 178.54 220.78 267.1 317.27 371.57 429.72 492.13 558.8 629.48 703.64 782.9 - 866.68 954.7 1046.75 1140.86 1236.28 1324.28 1407.64 1492.34 1581.76 1673 1767.33 1857.37 1955.01 2053 2150.69 2247.65 - 2352.92 2457.57 2563.13 2669.86 2778.47 2887.97 2996.57 3108.73 / - 15 3 19 1 171.28 237.75 318.5 409.61 509.17 618.87 737.61 869.52 1010.43 1161.08 1311.38 1449.98 - 1601.44 1755.32 1911.58 2074.41 2251.2 2424.02 2599.67 2785.74 2969.77 3166.47 3362.42 3562 3763.48 3978.53 4192.7 4410.49 - 4634.43 4860.27 5096.95 5335.76 5579.68 5825.64 6073.29 6331.4 / - 15 3 20 1 228.24 340.94 485.51 668.93 884.14 1120.87 1368.47 1612.71 1878.47 2155.1 2449.64 2763.19 - 3077.05 3423.9 3769.84 4126.44 4531.04 4918.85 5328.43 5742.72 6181.44 6612.7 7083.8 7538.71 8019.15 8529.32 9020.92 9531.07 - 10059.73 10600.77 11156.37 11725.87 12323.45 12919.39 13540.47 14177.32 / - 15 4 1 1 279.12 278.95 279.01 279.22 279.52 279.91 280.37 280.89 281.49 282.15 282.86 283.64 - 284.48 285.37 286.33 287.33 288.4 289.52 290.7 291.93 293.22 294.56 295.95 297.41 298.91 300.47 302.08 303.75 - 305.47 307.25 309.08 310.96 312.9 314.89 316.93 319.03 / - 15 4 2 1 279.04 278.86 278.92 279.12 279.42 279.81 280.27 280.8 281.39 282.05 282.77 283.54 - 284.38 285.28 286.23 287.24 288.3 289.42 290.6 291.83 293.12 294.46 295.86 297.31 298.82 300.38 302 303.67 - 305.39 307.17 309 310.88 312.82 314.81 316.86 318.95 / - 15 4 3 1 278.9 278.7 278.76 278.95 279.25 279.64 280.1 280.62 281.22 281.87 282.59 283.37 - 284.21 285.1 286.05 287.06 288.13 289.25 290.43 291.66 292.95 294.3 295.69 297.15 298.66 300.22 301.84 303.51 - 305.23 307.01 308.85 310.73 312.67 314.67 316.72 318.82 / - 15 4 4 1 278.63 278.41 278.45 278.64 278.94 279.32 279.78 280.3 280.9 281.55 282.27 283.05 - 283.88 284.78 285.73 286.74 287.81 288.94 290.12 291.35 292.64 293.99 295.39 296.85 298.36 299.92 301.54 303.22 - 304.95 306.73 308.57 310.46 312.41 314.41 316.46 318.57 / - 15 4 5 1 278.12 277.86 277.89 278.07 278.36 278.73 279.19 279.71 280.3 280.96 281.67 282.45 - 283.29 284.19 285.14 286.16 287.23 288.35 289.54 290.78 292.07 293.42 294.83 296.29 297.81 299.38 301.01 302.69 - 304.43 306.22 308.06 309.96 311.92 313.93 315.99 318.11 / - 15 4 6 1 277.14 276.82 276.81 276.98 277.25 277.62 278.07 278.59 279.19 279.84 280.56 281.34 - 282.18 283.08 284.04 285.06 286.14 287.27 288.46 289.71 291.01 292.37 293.79 295.26 296.79 298.38 300.02 301.71 - 303.46 305.27 307.13 309.05 311.02 313.05 315.13 317.27 / - 15 4 7 1 275.19 274.78 274.74 274.88 275.14 275.5 275.95 276.47 277.06 277.72 278.44 279.23 - 280.08 280.99 281.96 282.99 284.08 285.23 286.43 287.7 289.02 290.4 291.84 293.34 294.89 296.5 298.17 299.89 - 301.67 303.51 305.4 307.35 309.36 311.42 313.54 315.71 / - 15 4 8 1 271.23 270.57 270.38 270.43 270.64 270.96 271.38 271.88 272.47 273.13 273.86 274.66 - 275.52 276.46 277.46 278.52 279.64 280.83 282.08 283.39 284.77 286.2 287.69 289.25 290.86 292.54 294.27 296.07 - 297.92 299.83 301.81 303.84 305.93 308.08 310.29 312.56 / - 15 4 9 1 261.82 258.32 257.6 257.35 257.37 257.6 257.98 258.49 259.11 259.83 260.64 261.54 - 262.53 263.6 264.74 265.97 267.27 268.64 270.06 271.58 273.17 274.83 276.56 278.36 280.23 282.16 284.16 286.23 - 288.37 290.57 292.8 295.13 297.52 299.98 302.51 305.1 / - 15 4 10 1 243.66 232.55 231.26 230.82 230.83 231.15 231.71 232.45 233.33 234.39 235.57 236.89 - 238.32 239.82 241.47 243.22 245.07 246.98 249.02 251.15 253.32 255.63 258.02 260.44 262.99 265.61 268.27 271.05 - 273.91 276.81 279.83 282.91 286.04 289.26 292.53 295.89 / - 15 4 11 1 203.79 198.93 197.83 197.72 198.17 198.96 200.09 201.49 203.04 204.84 206.83 209 - 211.32 213.8 216.42 219.18 222.08 225.1 228.25 231.51 234.88 238.36 241.95 245.63 249.42 253.3 257.26 261.32 - 265.46 269.69 273.99 278.38 282.84 287.38 292 297.22 / - 15 4 12 1 169.67 167.39 167.41 168.25 169.63 171.41 173.52 175.96 178.69 181.71 184.97 188.4 - 192.08 195.96 199.93 204.16 208.56 213.1 217.79 222.5 227.49 232.62 237.89 243.07 248.58 254.22 259.72 265.59 - 271.28 277.37 283.54 289.51 295.89 302.02 308.61 314.91 / - 15 4 13 1 145.86 146.54 148.86 151.82 155.13 158.73 162.59 166.68 171.01 175.57 180.35 185.34 - 190.55 195.96 201.56 207.36 213.35 219.52 225.86 232.37 239.05 245.88 253.23 261.15 269.13 277.01 285 293.26 - 301.5 310 318.45 327.03 335.76 344.62 353.63 362.77 / - 15 4 14 1 138.18 141.62 145.39 149.56 154.27 159.52 165.18 171.19 177.55 184.26 191.32 198.7 - 206.42 214.45 222.78 231.42 240.36 249.59 259.06 268.75 278.66 288.8 299.18 309.77 320.6 331.64 342.9 354.38 - 366.08 377.98 390.09 403.14 416.8 430.6 444.43 458.48 / - 15 4 15 1 135.3 140.64 146.29 152.78 160.08 168.17 177 186.54 196.75 207.57 218.95 230.87 - 243.29 256.22 269.62 283.51 297.87 312.69 327.98 343.73 359.94 376.61 393.7 411.13 428.9 447.02 465.51 484.37 - 503.63 523.27 543.32 563.78 584.66 607.34 630.5 654 / - 15 4 16 1 133.05 141.85 152.12 163.79 176.83 191.27 207 223.93 241.97 261.06 281.16 302.15 - 324.03 346.79 370.42 394.85 420.1 446.16 473.04 500.75 529.31 558.7 588.88 619.81 651.53 683.97 717.19 751.25 - 786.16 822.85 861.33 899.87 938.73 978.41 1017.96 1058.14 / - 15 4 17 1 134.51 150.52 170.28 192.95 218.44 246.52 276.51 308.61 342.71 378.78 416.4 455.44 - 496.82 540.03 584.76 630.98 678.9 728.87 780.91 834.89 890.43 947.49 1006.02 1067.35 1128.64 1189.32 1247.63 1299.37 - 1347.54 1397.33 1447.32 1499.99 1553.07 1607.24 1661.2 1719.82 / - 15 4 18 1 142.57 178.53 220.92 267.25 317.52 371.8 429.89 492.2 558.98 629.37 703.36 782.41 - 865.98 953.8 1045.85 1140.03 1235.31 1324.14 1408.5 1494.28 1585.11 1676.41 1772.62 1863.77 1960.5 2061.69 2160.53 2261.58 - 2363.67 2469.53 2576.46 2684.46 2794.37 2905.25 3017.34 3131.02 / - 15 4 19 1 171.17 237.51 317.94 408.94 508.32 617.54 737.34 866.23 1009.52 1159.97 1306 1449.97 - 1595.62 1756.59 1913.69 2077.32 2255.78 2431.28 2609.65 2797.26 2984.97 3179.35 3382.94 3585.22 3789.37 4006.86 4223.55 4443.84 - 4666.63 4898.98 5137.98 5370.12 5626.46 5869.93 6125.86 6387.02 / - 15 4 20 1 228.1 340.88 482.64 665.61 878.94 1120.05 1363.44 1613.26 1879.99 2157.88 2453.85 2768.93 - 3084.48 3433.35 3781.28 4139.8 4546.77 4936.91 5349.89 5766.67 6213.47 6652.39 7129.73 7590.52 8076.85 8573.76 9091.08 9607.1 - 10141.73 10689.19 11251.81 11828.65 12433.69 13037.03 13665.52 14310.06 / - 15 5 1 1 281.02 280.81 280.86 281.05 281.35 281.73 282.19 282.72 283.31 283.97 284.69 285.47 - 286.3 287.2 288.15 289.16 290.23 291.36 292.54 293.77 295.06 296.41 297.81 299.27 300.78 302.35 303.97 305.64 - 307.37 309.15 310.99 312.88 314.83 316.83 318.88 320.99 / - 15 5 2 1 280.94 280.72 280.76 280.96 281.25 281.64 282.09 282.62 283.21 283.87 284.59 285.37 - 286.2 287.1 288.05 289.06 290.13 291.26 292.44 293.67 294.97 296.31 297.72 299.17 300.68 302.25 303.87 305.55 - 307.28 309.06 310.9 312.8 314.74 316.74 318.8 320.91 / - 15 5 3 1 280.79 280.55 280.59 280.78 281.08 281.46 281.91 282.44 283.03 283.69 284.4 285.18 - 286.02 286.92 287.87 288.88 289.95 291.08 292.26 293.5 294.79 296.14 297.54 299 300.51 302.08 303.71 305.38 - 307.12 308.9 310.74 312.64 314.59 316.59 318.65 320.76 / - 15 5 4 1 280.51 280.25 280.28 280.46 280.75 281.13 281.58 282.11 282.7 283.35 284.07 284.85 - 285.69 286.58 287.54 288.55 289.62 290.75 291.93 293.17 294.47 295.82 297.22 298.69 300.2 301.77 303.4 305.08 - 306.82 308.61 310.46 312.36 314.31 316.32 318.38 320.5 / - 15 5 5 1 279.97 279.68 279.69 279.86 280.14 280.52 280.97 281.49 282.08 282.74 283.45 284.23 - 285.07 285.97 286.93 287.94 289.02 290.15 291.33 292.58 293.88 295.23 296.64 298.11 299.63 301.21 302.84 304.53 - 306.28 308.08 309.93 311.84 313.8 315.82 317.89 320.02 / - 15 5 6 1 278.93 278.58 278.57 278.72 279 279.36 279.81 280.33 280.92 281.58 282.3 283.08 - 283.92 284.82 285.78 286.81 287.88 289.02 290.21 291.47 292.77 294.14 295.56 297.04 298.57 300.16 301.81 303.51 - 305.27 307.09 308.96 310.88 312.86 314.9 316.99 319.14 / - 15 5 7 1 276.87 276.45 276.4 276.53 276.79 277.15 277.6 278.12 278.71 279.37 280.09 280.88 - 281.73 282.64 283.62 284.65 285.74 286.89 288.11 289.38 290.7 292.09 293.53 295.03 296.59 298.21 299.88 301.61 - 303.4 305.25 307.15 309.11 311.12 313.2 315.33 317.51 / - 15 5 8 1 272.62 271.89 271.66 271.67 271.86 272.16 272.57 273.07 273.65 274.31 275.04 275.84 - 276.71 277.65 278.65 279.72 280.85 282.05 283.31 284.63 286.01 287.46 288.97 290.54 292.17 293.86 295.61 297.42 - 299.29 301.22 303.21 305.26 307.37 309.54 311.77 314.07 / - 15 5 9 1 262.74 258.8 258 257.72 257.74 257.96 258.35 258.87 259.49 260.23 261.05 261.96 - 262.96 264.05 265.22 266.46 267.79 269.19 270.66 272.19 273.81 275.5 277.26 279.09 280.99 282.94 284.97 287.08 - 289.25 291.49 293.79 296.16 298.58 301.08 303.65 306.28 / - 15 5 10 1 243.65 232.37 231.15 230.73 230.77 231.12 231.7 232.47 233.41 234.47 235.69 237.04 - 238.51 240.04 241.73 243.53 245.38 247.37 249.46 251.59 253.86 256.22 258.62 261.14 263.75 266.39 269.15 271.98 - 274.85 277.82 280.87 283.95 287.16 290.4 293.75 297.17 / - 15 5 11 1 203.4 198.99 197.92 197.84 198.29 199.12 200.29 201.66 203.29 205.13 207.15 209.35 - 211.71 214.11 216.76 219.55 222.47 225.52 228.69 232.2 235.62 239.15 242.79 246.53 250.37 254.3 258.32 262.43 - 266.63 270.92 275.29 279.73 284.26 288.86 293.54 298.29 / - 15 5 12 1 169.65 167.52 167.58 168.46 169.87 171.67 173.81 176.28 179.07 182.09 185.39 188.84 - 192.56 196.47 200.56 204.73 209.17 213.76 218.49 223.37 228.25 233.42 238.73 244.17 249.51 255.2 261 266.65 - 272.69 278.85 284.78 291.12 297.24 303.78 310.06 316.82 / - 15 5 13 1 145.97 146.73 149.03 152.03 155.38 159.02 162.91 167.04 171.41 176.01 180.82 185.86 - 191.1 196.56 202.21 208.05 214.08 220.29 226.68 233.24 239.96 246.85 253.89 261.66 269.8 277.97 286.13 294.34 - 302.79 311.26 319.77 328.41 337.21 346.13 355.21 364.41 / - 15 5 14 1 138.27 141.79 145.6 149.82 154.53 159.79 165.48 171.54 177.94 184.7 191.79 199.22 - 206.98 215.06 223.44 232.13 241.12 250.4 259.92 269.66 279.63 289.83 300.26 310.91 321.8 332.9 344.23 355.77 - 367.53 379.51 391.69 404.08 417.83 431.82 445.93 459.99 / - 15 5 15 1 135.26 140.77 146.48 153 160.34 168.46 177.33 186.9 197.14 208.01 219.44 231.4 - 243.87 256.84 270.3 284.23 298.63 313.5 328.83 344.62 360.88 377.59 394.75 412.26 430.11 448.31 466.87 485.81 - 505.14 524.86 544.97 565.5 586.45 608.31 631.57 655.28 / - 15 5 16 1 132.96 141.89 152.22 163.97 177.06 191.52 207.28 224.24 242.3 261.42 281.56 302.6 - 324.53 347.33 371 395.5 420.79 446.88 473.78 501.52 530.08 559.49 589.68 620.6 652.29 684.82 718.1 752.2 - 787.13 823.39 861.42 900.14 939.33 978.87 1019.18 1058.94 / - 15 5 17 1 134.46 150.58 170.4 193.13 218.77 246.75 276.74 308.83 342.92 378.98 416.9 455.62 - 497.03 540.22 584.94 631.13 678.96 728.84 780.78 834.7 890.31 947.4 1005.92 1066.56 1127.94 1189.32 1248.46 1301.21 - 1351.36 1402.86 1454.38 1508.73 1563.52 1619.61 1675.5 1736.66 / - 15 5 18 1 142.46 178.53 220.97 267.48 317.74 371.99 430.06 492.27 558.91 629.23 703.21 781.87 - 865.21 952.79 1044.78 1139.08 1234.12 1323.84 1409.36 1495.83 1587.45 1680.71 1776.83 1869.1 1968.45 2070.43 2169.05 2270.82 - 2374.42 2483.5 2591.84 2701.26 2812.62 2925.15 3038.85 3151.8 / - 15 5 19 1 171.06 237.11 317.36 408.2 508.39 617.44 736.37 865.61 1008.56 1158.76 1305.2 1449.82 - 1596.11 1757.78 1915.69 2080.21 2259.66 2436.36 2617.09 2807.87 2998.1 3196.16 3402.59 3607.85 3814.99 4028.6 4255.2 4478.55 - 4705.85 4939.77 5181.4 5416.78 5675.99 5924.57 6181.44 6445.61 / - 15 5 20 1 227.96 340.82 478.93 662.33 874.25 1113.48 1362.96 1609.56 1881.54 2160.77 2458.2 2774.88 - 3092.2 3443.19 3794.1 4153.73 4530.41 4955.78 5371.12 5791.04 6237.69 6689.42 7156.64 7640.95 8133.76 8637.23 9150.48 9684.07 - 10225.18 10779.58 11349.61 11934.58 12532.61 13159.02 13795.59 14448.34 / - 15 6 1 1 283.16 282.8 282.8 282.96 283.24 283.61 284.06 284.58 285.17 285.82 286.54 287.31 - 288.15 289.04 290 291.01 292.08 293.2 294.39 295.63 296.92 298.27 299.68 301.14 302.65 304.22 305.85 307.53 - 309.27 311.06 312.9 314.8 316.76 318.76 320.83 322.94 / - 15 6 2 1 283.07 282.71 282.7 282.86 283.14 283.51 283.95 284.47 285.06 285.72 286.43 287.21 - 288.04 288.94 289.89 290.91 291.98 293.1 294.28 295.52 296.82 298.17 299.58 301.04 302.55 304.13 305.75 307.44 - 309.17 310.97 312.81 314.71 316.67 318.68 320.74 322.86 / - 15 6 3 1 282.91 282.54 282.52 282.68 282.95 283.32 283.77 284.29 284.87 285.53 286.24 287.02 - 287.86 288.75 289.71 290.72 291.79 292.92 294.1 295.34 296.64 297.99 299.4 300.86 302.38 303.95 305.58 307.26 - 309 310.8 312.65 314.55 316.51 318.52 320.59 322.71 / - 15 6 4 1 282.62 282.22 282.2 282.35 282.62 282.98 283.43 283.94 284.53 285.18 285.9 286.67 - 287.51 288.41 289.36 290.38 291.45 292.58 293.76 295 296.3 297.66 299.07 300.53 302.05 303.63 305.26 306.95 - 308.69 310.49 312.35 314.25 316.22 318.23 320.31 322.43 / - 15 6 5 1 282.07 281.63 281.59 281.73 281.99 282.35 282.79 283.31 283.89 284.55 285.26 286.04 - 286.87 287.77 288.73 289.75 290.82 291.95 293.14 294.39 295.69 297.05 298.46 299.93 301.46 303.04 304.68 306.38 - 308.13 309.93 311.79 313.71 315.68 317.71 319.79 321.93 / - 15 6 6 1 280.99 280.5 280.42 280.55 280.8 281.16 281.6 282.11 282.69 283.34 284.06 284.84 - 285.68 286.58 287.54 288.56 289.64 290.78 291.98 293.23 294.54 295.91 297.34 298.82 300.36 301.96 303.61 305.32 - 307.08 308.9 310.78 312.71 314.7 316.75 318.85 321.01 / - 15 6 7 1 278.86 278.29 278.17 278.28 278.52 278.87 279.3 279.81 280.4 281.05 281.77 282.56 - 283.41 284.32 285.29 286.33 287.42 288.57 289.79 291.06 292.39 293.78 295.23 296.73 298.3 299.92 301.6 303.34 - 305.13 306.99 308.9 310.87 312.89 314.97 317.11 319.31 / - 15 6 8 1 274.3 273.34 272.99 272.93 273.07 273.35 273.74 274.22 274.79 275.44 276.17 276.97 - 277.84 278.78 279.79 280.86 282 283.2 284.47 285.8 287.2 288.65 290.17 291.76 293.4 295.11 296.88 298.71 - 300.6 302.55 304.56 306.63 308.77 310.96 313.21 315.53 / - 15 6 9 1 263.95 259.24 258.4 258.07 258.07 258.28 258.66 259.18 259.81 260.55 261.39 262.32 - 263.34 264.45 265.64 266.91 268.26 269.66 271.16 272.74 274.39 276.11 277.91 279.77 281.69 283.69 285.77 287.91 - 290.11 292.39 294.73 297.15 299.61 302.16 304.76 307.44 / - 15 6 10 1 244.53 232.22 231.03 230.64 230.71 231.09 231.69 232.49 233.45 234.56 235.82 237.18 - 238.68 240.28 242.01 243.82 245.76 247.77 249.91 252.09 254.41 256.82 259.27 261.86 264.52 267.22 270.04 272.89 - 275.87 278.91 281.99 285.17 288.39 291.7 295.08 298.51 / - 15 6 11 1 203.22 199.06 198.02 197.94 198.41 199.25 200.44 201.88 203.55 205.34 207.39 209.61 - 211.99 214.53 217.22 220.05 223.02 226.12 229.34 232.68 236.13 239.7 243.37 247.14 251.01 254.98 259.39 263.56 - 267.82 272.16 276.59 281.1 285.69 290.36 295.1 299.92 / - 15 6 12 1 169.71 167.65 167.76 168.69 170.12 171.94 174.11 176.6 179.42 182.47 185.79 189.34 - 193.03 196.97 201.1 205.41 209.77 214.4 219.19 224.11 229.18 234.4 239.57 245.05 250.67 256.17 262.02 268 - 273.81 280.01 286.34 292.43 298.93 305.2 311.91 318.34 / - 15 6 13 1 146.1 146.92 149.2 152.23 155.62 159.3 163.23 167.4 171.81 176.44 181.3 186.37 - 191.66 197.15 202.85 208.73 214.81 221.07 227.5 234.11 240.88 247.81 254.9 262.34 270.57 278.92 287.09 295.53 - 303.91 312.4 321.09 329.8 338.65 347.65 356.79 366.06 / - 15 6 14 1 138.38 141.96 145.82 150.08 154.79 160.06 165.78 171.88 178.33 185.13 192.26 199.74 - 207.54 215.66 224.1 232.84 241.87 251.2 260.77 270.57 280.59 290.85 301.33 312.05 322.99 334.16 345.55 357.16 - 368.99 381.03 393.28 405.74 418.81 432.9 447.2 461.26 / - 15 6 15 1 135.23 140.91 146.66 153.23 160.6 168.76 177.66 187.27 197.54 208.44 219.92 231.93 - 244.45 257.47 270.97 284.94 299.39 314.3 329.67 345.51 361.8 378.56 395.77 413.36 431.29 449.57 468.21 487.22 - 506.62 526.41 546.6 567.19 588.21 609.65 632.54 656.42 / - 15 6 16 1 132.89 141.92 152.33 164.14 177.28 191.77 207.56 224.54 242.64 261.78 281.93 303.04 - 325.01 347.85 371.57 396.12 421.45 447.57 474.5 502.25 530.83 560.24 590.43 621.35 653.01 685.57 718.96 753.11 - 788.06 823.83 861.43 900.28 939.7 979.46 1019.62 1060 / - 15 6 17 1 134.42 150.65 170.53 193.31 219.18 247.03 277.03 309.09 343.12 379.15 417.07 456.45 - 497.23 540.38 585.08 631.23 678.97 728.73 780.54 834.37 890.02 947.15 1005.67 1065.91 1127.76 1189.29 1248.84 1303.38 - 1355.13 1406.57 1461.48 1517.61 1575.02 1632.09 1690.1 1752.85 / - 15 6 18 1 142.35 178.49 221.02 267.62 317.92 372.17 430.36 492.52 558.82 629.07 702.85 781.29 - 864.37 951.73 1043.52 1137.98 1232.69 1321.69 1408.23 1496.3 1588.6 1682.84 1779.78 1877.25 1976.5 2076.56 2177.66 2283.34 - 2385.63 2495.98 2605.66 2716.67 2829.42 2943.43 3058.67 3179.16 / - 15 6 19 1 170.95 236.84 317.34 408.21 508.45 617.38 735.21 865 1004.41 1153.27 1304.18 1449.5 - 1596.46 1758.88 1917.63 2083.09 2263.55 2441.35 2623.22 2814.48 3007.98 3210.28 3420.23 3628.92 3839.59 4056.59 4286.48 4513.38 - 4747.57 4981.43 5226.35 5465.09 5717.61 5978.05 6240.1 6507.58 / - 15 6 20 1 227.82 340.79 475.67 659.35 869.03 1106.84 1355.95 1606.42 1871.09 2163.73 2462.73 2761.48 - 3100.25 3431.91 3806.29 4168.31 4547.46 4976.83 5393.38 5816.24 6265.63 6720.35 7196.68 7688.64 8188.68 8699.31 9220.04 9761.09 - 10309.31 10871.46 11449.59 12042.88 12650.09 13278.11 13930.53 14592.1 / - 15 7 1 1 285.29 284.8 284.73 284.87 285.13 285.48 285.92 286.44 287.02 287.67 288.38 289.16 - 289.99 290.89 291.84 292.85 293.92 295.05 296.23 297.47 298.77 300.12 301.53 303 304.52 306.1 307.73 309.42 - 311.16 312.96 314.81 316.71 318.68 320.69 322.76 324.89 / - 15 7 2 1 285.2 284.7 284.63 284.76 285.02 285.38 285.82 286.33 286.91 287.56 288.27 289.05 - 289.88 290.78 291.73 292.74 293.81 294.94 296.13 297.37 298.67 300.02 301.43 302.9 304.42 306 307.63 309.32 - 311.06 312.86 314.71 316.62 318.58 320.6 322.68 324.8 / - 15 7 3 1 285.04 284.53 284.45 284.58 284.83 285.19 285.62 286.14 286.72 287.37 288.08 288.85 - 289.69 290.58 291.54 292.55 293.62 294.75 295.93 297.18 298.48 299.83 301.24 302.71 304.23 305.81 307.45 309.14 - 310.88 312.68 314.54 316.45 318.42 320.44 322.51 324.64 / - 15 7 4 1 284.74 284.2 284.11 284.23 284.49 284.84 285.27 285.78 286.36 287.01 287.72 288.5 - 289.33 290.23 291.18 292.2 293.27 294.4 295.58 296.83 298.13 299.49 300.9 302.37 303.9 305.48 307.12 308.81 - 310.56 312.36 314.22 316.14 318.11 320.14 322.22 324.35 / - 15 7 5 1 284.17 283.59 283.49 283.59 283.84 284.18 284.62 285.12 285.7 286.35 287.06 287.84 - 288.67 289.57 290.53 291.54 292.62 293.75 294.94 296.19 297.49 298.85 300.27 301.75 303.28 304.87 306.51 308.21 - 309.97 311.78 313.65 315.57 317.55 319.59 321.68 323.83 / - 15 7 6 1 283.06 282.42 282.28 282.37 282.61 282.95 283.37 283.88 284.46 285.1 285.82 286.59 - 287.43 288.33 289.29 290.31 291.4 292.53 293.73 294.99 296.3 297.67 299.1 300.59 302.13 303.74 305.39 307.11 - 308.88 310.71 312.59 314.53 316.53 318.58 320.69 322.86 / - 15 7 7 1 280.86 280.13 279.95 280.02 280.24 280.57 280.99 281.49 282.07 282.72 283.44 284.22 - 285.07 285.98 286.95 287.99 289.08 290.24 291.45 292.73 294.06 295.45 296.91 298.42 299.99 301.62 303.3 305.05 - 306.85 308.71 310.63 312.6 314.64 316.73 318.88 321.09 / - 15 7 8 1 275.99 274.74 274.25 274.12 274.21 274.45 274.81 275.28 275.83 276.48 277.2 278.02 - 278.89 279.83 280.84 281.92 283.07 284.28 285.56 286.9 288.31 289.78 291.32 292.92 294.58 296.3 298.09 299.94 - 301.85 303.82 305.85 307.95 310.1 312.32 314.6 316.94 / - 15 7 9 1 265.27 259.69 258.75 258.35 258.32 258.52 258.9 259.41 260.05 260.8 261.66 262.6 - 263.64 264.77 265.98 267.28 268.62 270.07 271.61 273.21 274.9 276.66 278.49 280.39 282.33 284.38 286.5 288.68 - 290.93 293.26 295.63 298.08 300.61 303.2 305.85 308.56 / - 15 7 10 1 244.87 232.01 230.86 230.52 230.63 231.05 231.69 232.52 233.51 234.65 235.94 237.35 - 238.86 240.52 242.27 244.13 246.1 248.18 250.34 252.6 254.97 257.41 259.93 262.57 265.25 268.05 270.94 273.86 - 276.9 279.97 283.15 286.41 289.7 293.09 296.52 300.04 / - 15 7 11 1 202.9 199.14 198.13 198.04 198.56 199.43 200.64 202.06 203.74 205.63 207.71 209.96 - 212.38 214.96 217.69 220.56 223.57 226.71 229.98 233.37 236.87 240.49 244.21 248.04 251.97 255.99 260.11 264.33 - 268.63 273.01 277.48 282.48 287.13 291.87 296.67 301.56 / - 15 7 12 1 169.77 167.79 167.95 168.9 170.35 172.21 174.39 176.93 179.77 182.85 186.2 189.78 - 193.56 197.47 201.63 205.98 210.49 215.17 219.87 224.85 229.95 235.2 240.61 245.94 251.6 257.39 263.31 269.08 - 275.23 281.19 287.56 294.06 300.3 306.97 313.39 320.27 / - 15 7 13 1 146.23 147.11 149.37 152.44 155.86 159.58 163.55 167.76 172.2 176.88 181.77 186.89 - 192.22 197.75 203.48 209.42 215.53 221.84 228.32 234.97 241.8 248.78 255.92 263.21 271.08 279.56 288.09 296.49 - 304.98 313.77 322.51 331.18 340.1 349.17 358.37 367.72 / - 15 7 14 1 138.48 142.14 146.05 150.34 155.06 160.34 166.08 172.22 178.71 185.55 192.74 200.25 - 208.1 216.26 224.74 233.54 242.62 252 261.62 271.48 281.55 291.86 302.41 313.18 324.18 335.41 346.86 358.54 - 370.43 382.54 394.86 407.4 420.14 433.51 447.94 462.58 / - 15 7 15 1 135.2 141.02 146.85 153.46 160.87 169.06 177.99 187.64 197.93 208.87 220.38 232.45 - 245.02 258.09 271.63 285.66 300.14 315.1 330.51 346.38 362.71 379.5 396.75 414.42 432.44 450.79 469.51 488.59 - 508.06 527.92 548.18 568.84 589.92 611.43 633.38 657.37 / - 15 7 16 1 132.84 141.95 152.43 164.31 177.5 192.03 207.83 224.84 242.97 262.13 282.3 303.44 - 325.47 348.35 372.1 396.7 422.08 448.24 475.19 502.95 531.54 560.95 591.14 622.05 653.67 686.18 719.65 753.9 - 788.9 824.69 861.26 900.21 939.85 979.95 1020.13 1060.85 / - 15 7 17 1 134.38 150.71 170.65 193.66 219.39 247.31 277.32 309.33 343.31 379.31 417.21 456.88 - 497.43 540.49 585.17 631.29 678.92 728.56 780.24 833.91 889.52 946.72 1005.27 1065.02 1127.21 1188.64 1249.1 1304.75 - 1358.43 1411.13 1469.38 1526.52 1585.78 1644.79 1705.8 1769.44 / - 15 7 18 1 142.24 178.48 221.07 267.75 318.13 372.34 430.5 492.56 558.72 628.87 702.46 780.67 - 863.48 950.56 1042.11 1136.65 1231.72 1321.5 1409.03 1498.27 1591.59 1685.49 1785 1884.08 1984.19 2085.55 2188.11 2295.1 - 2399.07 2510.87 2622.04 2734.7 2849.07 2964.73 3081.81 3202.37 / - 15 7 19 1 170.83 236.72 316.74 407.39 507.36 615.95 734.9 864.35 1003.34 1151.92 1302.98 1448.94 - 1596.61 1759.81 1919.44 2085.92 2259.76 2446.38 2629.44 2821.97 3015.67 3220.86 3428.09 3646.39 3861.25 4082.21 4308.26 4546.83 - 4781.67 5022.76 5271.64 5514.16 5770.48 6041.44 6300.72 6572.05 / - 15 7 20 1 227.67 340.77 472.24 656.12 863.78 1105.97 1356.57 1603.27 1872.72 2152.44 2450.42 2768.03 - 3108.67 3442.39 3819.22 4183.62 4565.38 4997.74 5416.81 5842.81 6291.14 6751.35 7233.13 7722.96 8239.64 8758.44 9287.15 9810.93 - 10392.78 10963.6 11550.61 12153.08 12769.85 13407.69 14029.67 14741.11 / - 15 8 1 1 287.42 286.79 286.67 286.77 287.01 287.36 287.79 288.29 288.87 289.51 290.22 290.99 - 291.83 292.72 293.68 294.69 295.76 296.89 298.07 299.32 300.62 301.97 303.39 304.85 306.38 307.96 309.6 311.29 - 313.04 314.84 316.7 318.62 320.59 322.61 324.69 326.83 / - 15 8 2 1 287.33 286.69 286.57 286.67 286.9 287.25 287.68 288.18 288.76 289.4 290.11 290.88 - 291.72 292.61 293.56 294.58 295.65 296.78 297.96 299.21 300.51 301.86 303.28 304.75 306.27 307.85 309.49 311.19 - 312.94 314.74 316.6 318.52 320.49 322.52 324.6 326.73 / - 15 8 3 1 287.16 286.51 286.38 286.48 286.71 287.05 287.48 287.98 288.56 289.2 289.91 290.68 - 291.52 292.41 293.36 294.38 295.45 296.58 297.76 299.01 300.31 301.67 303.08 304.55 306.08 307.66 309.3 311 - 312.75 314.56 316.42 318.34 320.31 322.34 324.43 326.57 / - 15 8 4 1 286.85 286.18 286.03 286.12 286.35 286.69 287.11 287.62 288.19 288.83 289.54 290.31 - 291.15 292.04 292.99 294.01 295.08 296.21 297.4 298.65 299.95 301.31 302.73 304.2 305.73 307.32 308.96 310.66 - 312.41 314.23 316.09 318.01 319.99 322.03 324.12 326.26 / - 15 8 5 1 286.26 285.55 285.38 285.46 285.68 286.01 286.43 286.93 287.51 288.15 288.86 289.63 - 290.46 291.36 292.31 293.33 294.4 295.54 296.73 297.98 299.29 300.65 302.07 303.55 305.09 306.68 308.33 310.04 - 311.8 313.62 315.49 317.42 319.41 321.45 323.55 325.71 / - 15 8 6 1 285.12 284.33 284.14 284.2 284.41 284.73 285.15 285.64 286.21 286.86 287.57 288.34 - 289.18 290.07 291.03 292.05 293.14 294.28 295.48 296.73 298.05 299.42 300.86 302.35 303.89 305.5 307.16 308.88 - 310.66 312.5 314.39 316.34 318.34 320.4 322.52 324.7 / - 15 8 7 1 282.85 281.96 281.71 281.75 281.94 282.26 282.67 283.16 283.74 284.38 285.09 285.87 - 286.72 287.63 288.6 289.63 290.73 291.89 293.1 294.38 295.72 297.11 298.57 300.08 301.66 303.29 304.98 306.74 - 308.54 310.41 312.34 314.32 316.37 318.47 320.63 322.85 / - 15 8 8 1 277.64 276.08 275.39 275.18 275.21 275.42 275.77 276.23 276.78 277.42 278.14 278.94 - 279.82 280.76 281.78 282.87 284.03 285.25 286.54 287.9 289.32 290.81 292.36 293.97 295.65 297.39 299.2 301.07 - 303 305 307.06 309.18 311.36 313.6 315.91 318.27 / - 15 8 9 1 266.59 260.04 258.94 258.53 258.48 258.66 259.03 259.55 260.19 260.95 261.82 262.78 - 263.84 264.99 266.23 267.52 268.92 270.41 271.97 273.61 275.33 277.13 279 280.91 282.92 285.01 287.17 289.4 - 291.7 294.04 296.48 298.99 301.56 304.2 306.91 309.66 / - 15 8 10 1 245.23 231.85 230.74 230.41 230.54 230.98 231.64 232.5 233.53 234.71 236.04 237.49 - 239.07 240.76 242.55 244.45 246.46 248.58 250.8 253.1 255.51 258 260.6 263.29 266.05 268.9 271.82 274.82 - 277.93 281.07 284.33 287.62 291.02 294.49 297.99 301.6 / - 15 8 11 1 202.59 199.22 198.23 198.16 198.67 199.56 200.8 202.29 204 205.85 207.96 210.23 - 212.68 215.28 218.04 220.94 223.98 227.15 230.45 233.87 237.41 241.06 245.07 248.95 252.93 257.01 261.19 265.46 - 269.82 274.27 278.8 283.42 288.12 292.89 297.75 303.22 / - 15 8 12 1 169.84 167.93 168.13 169.12 170.61 172.47 174.7 177.25 180.11 183.24 186.61 190.22 - 194.04 198.05 202.17 206.55 211.1 215.82 220.69 225.57 230.74 236.03 241.45 247.04 252.54 258.37 264.34 270.43 - 276.35 282.68 288.79 295.33 302.01 308.4 315.25 321.82 / - 15 8 13 1 146.37 147.31 149.54 152.64 156.1 159.85 163.86 168.11 172.59 177.31 182.25 187.4 - 192.77 198.35 204.13 210.1 216.26 222.61 229.14 235.84 242.71 249.74 256.93 264.28 271.77 280.09 288.8 297.54 - 306.22 314.94 323.71 332.66 341.55 351.06 360.36 369.8 / - 15 8 14 1 138.59 142.31 146.27 150.6 155.35 160.63 166.39 172.56 179.1 185.98 193.21 200.77 - 208.65 216.86 225.39 234.22 243.36 252.79 262.47 272.37 282.51 292.87 303.47 314.3 325.36 336.65 348.16 359.9 - 371.86 384.04 396.43 409.03 421.85 434.87 448.98 463.78 / - 15 8 15 1 135.17 141.1 147.04 153.68 161.13 169.35 178.32 188 198.33 209.29 220.85 232.96 - 245.58 258.7 272.29 286.36 300.88 315.87 331.32 347.23 363.6 380.42 397.7 415.43 433.52 451.96 470.75 489.91 - 509.46 529.39 549.71 570.44 591.58 613.15 635.15 657.61 / - 15 8 16 1 132.81 141.97 152.53 164.48 177.72 192.28 208.11 225.14 243.29 262.48 282.66 303.82 - 325.9 348.82 372.6 397.24 422.67 448.86 475.84 503.61 532.2 561.61 591.8 622.69 654.27 686.71 720.14 754.5 - 789.59 825.41 862 899.93 939.67 980 1020.16 1061.24 / - 15 8 17 1 134.34 150.77 170.77 193.83 219.63 247.59 277.61 309.62 343.55 379.46 417.32 456.97 - 497.49 540.56 585.22 631.3 678.82 728.32 779.86 833.37 888.81 946.06 1004.66 1064.46 1125.72 1188.75 1249.54 1306.06 - 1362.1 1416.46 1476.5 1535.44 1596.62 1657.58 1720.49 1785.52 / - 15 8 18 1 142.12 178.41 221.09 267.91 318.28 372.53 430.64 492.59 558.61 628.64 702.05 780.01 - 862.52 949.3 1040.04 1135.08 1230.54 1320.76 1409.24 1501.09 1594.55 1689.72 1790.36 1890.7 1992.14 2094.93 2199.01 2307.43 - 2413.07 2524.34 2639.24 2753.57 2869.73 2987.14 3106.11 3230.79 / - 15 8 19 1 170.72 236.61 316.13 406.63 507.4 615.84 733.39 862.2 1001.89 1150.51 1301.69 1448.3 - 1596.69 1752.23 1921.14 2088.62 2263.51 2451.35 2638.98 2829.58 3024.77 3230.67 3440.22 3660.17 3877.75 4102.82 4333.44 4576.7 - 4819.71 5061.7 5315.06 5562.23 5822.96 6089.28 6362.05 6637.77 / - 15 8 20 1 227.54 340.79 468.64 652.97 858.58 1098.71 1348.72 1598.61 1867.49 2155.62 2455.29 2774.91 - 3117.47 3453.47 3832.88 4199.78 4584.29 4984.9 5441.66 5870.9 6322.28 6782.09 7267.07 7768.57 8285.98 8811.88 9349.66 9882.93 - 10473.9 11054.38 11651.16 12263.67 12890.87 13538.84 14172.2 14851.49 / - 15 9 1 1 289.54 288.78 288.61 288.68 288.9 289.23 289.65 290.14 290.71 291.35 292.06 292.83 - 293.66 294.55 295.51 296.52 297.59 298.72 299.91 301.15 302.45 303.81 305.23 306.7 308.23 309.82 311.46 313.16 - 314.91 316.72 318.59 320.51 322.48 324.52 326.61 328.75 / - 15 9 2 1 289.44 288.68 288.5 288.57 288.79 289.11 289.53 290.03 290.6 291.24 291.95 292.71 - 293.55 294.44 295.39 296.4 297.47 298.6 299.79 301.04 302.34 303.7 305.12 306.59 308.12 309.71 311.35 313.05 - 314.8 316.61 318.48 320.4 322.38 324.42 326.51 328.65 / - 15 9 3 1 289.27 288.5 288.31 288.37 288.58 288.91 289.33 289.82 290.39 291.03 291.74 292.51 - 293.34 294.23 295.18 296.19 297.27 298.4 299.58 300.83 302.13 303.5 304.91 306.39 307.92 309.51 311.15 312.85 - 314.61 316.42 318.29 320.22 322.2 324.23 326.33 328.48 / - 15 9 4 1 288.96 288.15 287.95 288 288.21 288.54 288.95 289.45 290.01 290.65 291.36 292.12 - 292.96 293.85 294.8 295.81 296.89 298.02 299.21 300.46 301.76 303.12 304.54 306.02 307.55 309.15 310.79 312.5 - 314.26 316.08 317.95 319.88 321.86 323.91 326 328.16 / - 15 9 5 1 288.35 287.5 287.28 287.32 287.52 287.84 288.25 288.74 289.31 289.94 290.65 291.41 - 292.25 293.14 294.09 295.11 296.18 297.32 298.51 299.76 301.07 302.44 303.86 305.35 306.89 308.48 310.14 311.85 - 313.62 315.44 317.32 319.26 321.26 323.31 325.42 327.58 / - 15 9 6 1 287.17 286.24 285.99 286.01 286.2 286.51 286.91 287.4 287.96 288.6 289.3 290.07 - 290.91 291.8 292.76 293.78 294.86 296 297.2 298.46 299.78 301.16 302.6 304.09 305.64 307.25 308.92 310.65 - 312.43 314.27 316.17 318.12 320.14 322.21 324.34 326.52 / - 15 9 7 1 284.82 283.77 283.44 283.43 283.59 283.88 284.28 284.76 285.32 285.96 286.66 287.44 - 288.28 289.19 290.16 291.19 292.29 293.44 294.66 295.94 297.28 298.68 300.14 301.66 303.24 304.88 306.58 308.34 - 310.16 312.04 313.97 315.97 318.02 320.14 322.31 324.54 / - 15 9 8 1 279.24 277.24 276.38 276.11 276.1 276.27 276.6 277.05 277.59 278.23 278.96 279.76 - 280.64 281.59 282.62 283.72 284.89 286.13 287.43 288.8 290.24 291.75 293.32 294.95 296.65 298.42 300.25 302.14 - 304.1 306.12 308.2 310.35 312.55 314.79 317.13 319.53 / - 15 9 9 1 267.89 260.29 259.07 258.61 258.52 258.69 259.05 259.57 260.22 260.99 261.87 262.86 - 263.94 265.11 266.38 267.73 269.13 270.64 272.24 273.92 275.68 277.52 279.43 281.38 283.44 285.58 287.78 290.06 - 292.38 294.8 297.29 299.85 302.47 305.15 307.91 310.73 / - 15 9 10 1 246.17 231.73 230.62 230.3 230.44 230.89 231.57 232.45 233.5 234.7 236.05 237.53 - 239.14 240.87 242.71 244.67 246.75 248.92 251.21 253.58 256.05 258.61 261.26 263.98 266.81 269.74 272.73 275.79 - 278.96 282.2 285.51 288.89 292.34 295.89 299.47 303.16 / - 15 9 11 1 202.66 199.31 198.31 198.24 198.82 199.74 201 202.46 204.2 206.14 208.27 210.59 - 213.07 215.71 218.51 221.45 224.54 227.75 231.1 234.57 238.16 241.86 245.68 249.6 253.62 257.74 262.28 266.61 - 271.03 275.54 280.14 284.82 289.58 294.43 299.35 304.35 / - 15 9 12 1 169.84 168.07 168.31 169.33 170.84 172.74 174.97 177.57 180.46 183.65 187.05 190.67 - 194.52 198.57 202.81 207.14 211.72 216.47 221.38 226.45 231.51 236.86 242.33 247.93 253.7 259.6 265.37 271.51 - 277.78 283.85 290.35 296.97 303.34 310.19 316.73 323.76 / - 15 9 13 1 146.51 147.5 149.74 152.84 156.35 160.15 164.2 168.49 173.02 177.77 182.74 187.94 - 193.35 198.96 204.78 210.79 217 223.39 229.96 236.71 243.62 250.7 257.94 265.34 272.89 280.58 289.38 298.33 - 307.07 315.98 324.93 333.91 343.09 352.56 361.93 371.44 / - 15 9 14 1 138.7 142.49 146.49 150.86 155.64 160.93 166.71 172.92 179.5 186.42 193.69 201.29 - 209.21 217.46 226.03 234.9 244.08 253.56 263.3 273.26 283.44 293.86 304.51 315.4 326.52 337.87 349.44 361.24 - 373.26 385.51 397.96 410.64 423.52 436.62 449.94 464.37 / - 15 9 15 1 135.14 141.17 147.23 153.91 161.39 169.65 178.65 188.36 198.73 209.72 221.31 233.45 - 246.12 259.29 272.93 287.03 301.6 316.63 332.11 348.05 364.44 381.3 398.61 416.37 434.54 453.06 471.94 491.17 - 510.78 530.78 551.17 571.97 593.17 614.8 636.85 659.36 / - 15 9 16 1 132.78 142 152.63 164.63 177.94 192.53 208.38 225.42 243.59 262.8 283.01 304.17 - 326.28 349.25 373.05 397.71 423.2 449.43 476.43 504.22 532.81 562.21 592.39 623.26 654.81 687.17 720.51 754.84 - 790.04 825.95 862.57 899.94 939.23 979.11 1020.12 1061.24 / - 15 9 17 1 134.3 150.83 170.89 194.01 219.91 247.82 277.83 309.89 343.79 379.58 417.4 457.02 - 498.18 540.56 585.2 631.25 678.67 728.02 779.39 832.73 887.99 945.11 1003.82 1063.68 1124.45 1187.38 1249.63 1307.18 - 1364.8 1421.56 1482.91 1544.13 1606.73 1670.06 1733.17 1799.3 / - 15 9 18 1 142.08 178.4 221.12 268.01 318.43 372.67 430.76 492.6 558.52 628.36 701.6 779.3 - 861.49 947.95 1038.39 1133.23 1229.07 1319.81 1408.8 1501.77 1595.54 1692.17 1794.72 1897 2000.19 2104.76 2210.45 2320.44 - 2427.82 2540.82 2657.44 2773.55 2891.55 3010.89 3131.87 3256.91 / - 15 9 19 1 170.61 236.51 315.71 406.61 506.25 614.38 733 861.5 1000.78 1149.02 1300.3 1442 - 1596.67 1753.02 1922.88 2091.33 2267.31 2456.42 2646.91 2837.3 3032.94 3240.81 3452.75 3668.1 3893.79 4121.87 4353.86 4592.35 - 4851.25 5095.88 5354.23 5606.41 5872.4 6143.43 6407.84 6702.4 / - 15 9 20 1 227.41 340.86 463.25 646.99 853.96 1091.47 1340.88 1593.96 1869.25 2158.97 2460.49 2782.18 - 3104.22 3465.25 3816.55 4216.89 4604.38 5008 5468.12 5900.75 6355.43 6815 7303.33 7812.85 8313.46 8864.48 9407.07 9948.27 - 10521.64 11140.65 11748.54 12372.28 13010.94 13670.26 14316.33 15007.38 / - 15 10 1 1 291.63 290.76 290.53 290.58 290.78 291.09 291.5 291.99 292.56 293.19 293.89 294.66 - 295.49 296.38 297.33 298.34 299.41 300.54 301.73 302.98 304.28 305.64 307.06 308.54 310.07 311.66 313.31 315.01 - 316.77 318.59 320.46 322.39 324.37 326.41 328.51 330.66 / - 15 10 2 1 291.54 290.66 290.42 290.46 290.66 290.98 291.38 291.87 292.44 293.07 293.77 294.54 - 295.37 296.26 297.21 298.22 299.3 300.42 301.61 302.86 304.16 305.53 306.95 308.42 309.96 311.55 313.19 314.9 - 316.66 318.48 320.35 322.28 324.26 326.31 328.4 330.56 / - 15 10 3 1 291.36 290.47 290.23 290.26 290.45 290.77 291.17 291.66 292.22 292.86 293.56 294.32 - 295.15 296.04 297 298.01 299.08 300.21 301.4 302.65 303.95 305.31 306.73 308.21 309.75 311.34 312.99 314.69 - 316.46 318.28 320.15 322.08 324.07 326.12 328.22 330.37 / - 15 10 4 1 291.04 290.11 289.86 289.88 290.07 290.38 290.78 291.27 291.83 292.46 293.16 293.93 - 294.76 295.65 296.6 297.61 298.68 299.82 301.01 302.26 303.56 304.93 306.35 307.83 309.37 310.96 312.62 314.32 - 316.09 317.91 319.79 321.73 323.72 325.77 327.88 330.04 / - 15 10 5 1 290.42 289.44 289.16 289.17 289.35 289.65 290.05 290.54 291.1 291.73 292.43 293.19 - 294.02 294.91 295.86 296.88 297.95 299.09 300.28 301.53 302.84 304.21 305.64 307.13 308.67 310.27 311.93 313.65 - 315.42 317.25 319.14 321.08 323.09 325.14 327.26 329.43 / - 15 10 6 1 289.2 288.14 287.82 287.81 287.98 288.27 288.66 289.14 289.7 290.33 291.03 291.79 - 292.62 293.52 294.48 295.5 296.58 297.72 298.92 300.18 301.5 302.88 304.32 305.81 307.37 308.99 310.66 312.39 - 314.18 316.03 317.93 319.9 321.92 324 326.13 328.33 / - 15 10 7 1 286.74 285.49 285.07 285 285.12 285.39 285.77 286.23 286.78 287.41 288.11 288.88 - 289.72 290.62 291.59 292.63 293.72 294.88 296.11 297.39 298.74 300.14 301.61 303.14 304.72 306.37 308.08 309.85 - 311.68 313.57 315.51 317.52 319.59 321.71 323.9 326.15 / - 15 10 8 1 280.78 278.25 277.22 276.88 276.82 276.96 277.27 277.71 278.25 278.89 279.62 280.42 - 281.31 282.28 283.31 284.42 285.61 286.86 288.18 289.57 291.03 292.56 294.15 295.81 297.53 299.29 301.13 303.05 - 305.04 307.09 309.2 311.38 313.62 315.93 318.3 320.73 / - 15 10 9 1 269.17 260.33 259.1 258.58 258.45 258.61 258.97 259.5 260.15 260.93 261.83 262.83 - 263.94 265.14 266.43 267.81 269.28 270.8 272.44 274.16 275.96 277.83 279.79 281.79 283.89 286.08 288.33 290.66 - 293.03 295.51 298.05 300.66 303.34 306.07 308.89 311.78 / - 15 10 10 1 246.43 231.62 230.5 230.19 230.34 230.8 231.5 232.4 233.46 234.69 236.06 237.57 - 239.21 240.97 242.85 244.84 246.95 249.17 251.49 253.92 256.44 259.07 261.79 264.61 267.52 270.52 273.59 276.74 - 279.97 283.29 286.67 290.13 293.66 297.28 300.96 304.72 / - 15 10 11 1 202.74 199.4 198.39 198.37 198.93 199.87 201.16 202.69 204.4 206.37 208.52 210.86 - 213.37 216.04 218.86 221.83 224.95 228.2 231.58 235.27 238.91 242.67 246.54 250.51 254.59 258.77 263.05 267.43 - 271.89 276.45 281.49 286.23 291.06 295.97 300.96 306.03 / - 15 10 12 1 169.92 168.21 168.51 169.55 171.07 173 175.28 177.89 180.82 184.02 187.46 191.15 - 195.01 199.09 203.37 207.82 212.34 217.13 222.08 227.18 232.44 237.85 243.21 248.85 254.64 260.58 266.66 272.59 - 278.91 285.35 291.58 298.26 305.06 311.58 318.6 325.31 / - 15 10 13 1 146.65 147.7 149.99 153.12 156.69 160.52 164.6 168.92 173.48 178.26 183.26 188.49 - 193.93 199.58 205.44 211.49 217.74 224.17 230.78 237.57 244.53 251.66 258.95 266.4 273.99 281.74 289.88 298.94 - 307.89 317.06 326 335.18 344.38 353.78 363.48 373.07 / - 15 10 14 1 138.84 142.7 146.76 151.18 156 161.29 167.09 173.31 179.92 186.88 194.18 201.82 - 209.78 218.06 226.66 235.57 244.79 254.3 264.1 274.12 284.36 294.83 305.54 316.48 327.66 339.06 350.7 362.56 - 374.64 386.95 399.47 412.21 425.17 438.34 451.72 465.32 / - 15 10 15 1 135.16 141.28 147.46 154.19 161.7 169.98 179 188.73 199.13 210.14 221.76 233.93 - 246.64 259.84 273.54 287.68 302.29 317.35 332.86 348.83 365.25 382.12 399.45 417.24 435.46 454.07 473.02 492.34 - 512.03 532.09 552.55 573.41 594.67 616.35 638.46 661.01 / - 15 10 16 1 132.8 142.07 152.77 164.82 178.17 192.78 208.64 225.7 243.87 263.1 283.33 304.5 - 326.61 349.62 373.45 398.13 423.64 449.92 476.95 504.75 533.34 562.72 592.89 623.76 655.25 687.54 720.78 755.01 - 790.2 826.22 862.91 900.31 938.42 978.45 1019.69 1060.63 / - 15 10 17 1 134.29 150.9 171.02 194.18 220.1 248.02 278.03 310.05 343.96 379.71 417.43 457.01 - 498.42 540.48 585.11 631.12 678.44 727.63 778.83 831.98 887.03 943.95 1002.62 1062.6 1123.48 1185.47 1248.61 1307.82 - 1367.25 1426.28 1488.3 1551.13 1615.15 1680.1 1744.87 1812.49 / - 15 10 18 1 141.95 178.31 221.12 268.08 318.57 372.78 430.84 492.59 558.36 628.03 701.12 778.55 - 860.41 946.51 1036.62 1131.2 1227.27 1318.55 1407.95 1501.6 1595.96 1693.24 1796.4 1899.78 2004.61 2111.34 2219.64 2332.21 - 2442.01 2557.31 2676.29 2794.59 2914.71 3036.14 3159.35 3289.46 / - 15 10 19 1 170.5 236.43 315.31 405.83 505.09 614.33 731.31 858.99 996.27 1147.45 1295.31 1442.11 - 1597.57 1753.82 1924.62 2094.14 2271.27 2452.56 2653.5 2845.38 3044.33 3250.69 3465.03 3682.82 3910.51 4142.53 4374.82 4615.24 - 4876.28 5124.08 5386.94 5644.68 5916.63 6193.23 6462.99 6763.44 / - 15 10 20 1 227.3 340.97 463.33 642.93 849.53 1084.26 1340.21 1594.45 1866.58 2150.54 2452.65 2774.5 - 3114.26 3477.75 3831.92 4236.15 4625.78 5032.66 5450.06 5932.65 6390.94 6854.47 7342.29 7855.14 8365.48 8898.68 9467.73 10014.17 - 10592.34 11188.67 11834.93 12469.3 13120.46 13793.67 14455.46 15160.36 / - 15 11 1 1 293.69 292.72 292.45 292.46 292.65 292.95 293.35 293.83 294.39 295.02 295.72 296.48 - 297.31 298.2 299.15 300.16 301.23 302.36 303.55 304.8 306.1 307.47 308.89 310.37 311.9 313.5 315.15 316.86 - 318.62 320.44 322.32 324.25 326.24 328.29 330.4 332.56 / - 15 11 2 1 293.59 292.62 292.34 292.35 292.53 292.83 293.23 293.71 294.27 294.9 295.6 296.36 - 297.19 298.07 299.02 300.04 301.11 302.24 303.43 304.67 305.98 307.34 308.77 310.24 311.78 313.38 315.03 316.74 - 318.5 320.32 322.2 324.14 326.13 328.18 330.29 332.45 / - 15 11 3 1 293.42 292.42 292.13 292.14 292.31 292.61 293.01 293.49 294.05 294.68 295.37 296.14 - 296.96 297.85 298.8 299.81 300.88 302.01 303.2 304.45 305.76 307.12 308.55 310.03 311.56 313.16 314.81 316.52 - 318.29 320.12 322 323.93 325.93 327.98 330.09 332.26 / - 15 11 4 1 293.08 292.06 291.75 291.75 291.92 292.21 292.61 293.08 293.64 294.27 294.96 295.72 - 296.55 297.44 298.39 299.4 300.47 301.6 302.79 304.04 305.35 306.72 308.14 309.63 311.17 312.77 314.42 316.14 - 317.91 319.74 321.62 323.56 325.56 327.62 329.73 331.91 / - 15 11 5 1 292.45 291.36 291.03 291.01 291.17 291.46 291.85 292.32 292.87 293.5 294.19 294.96 - 295.78 296.67 297.62 298.64 299.71 300.84 302.04 303.29 304.6 305.98 307.4 308.89 310.44 312.04 313.71 315.43 - 317.21 319.04 320.94 322.89 324.9 326.96 329.09 331.27 / - 15 11 6 1 291.2 290.01 289.64 289.59 289.74 290.01 290.39 290.86 291.41 292.04 292.73 293.5 - 294.32 295.22 296.17 297.19 298.27 299.41 300.61 301.87 303.2 304.58 306.02 307.52 309.08 310.7 312.38 314.11 - 315.91 317.76 319.67 321.64 323.67 325.76 327.91 330.11 / - 15 11 7 1 288.56 287.1 286.57 286.43 286.52 286.75 287.1 287.55 288.09 288.7 289.4 290.16 - 291 291.9 292.87 293.91 295.01 296.17 297.4 298.68 300.04 301.45 302.93 304.46 306.06 307.72 309.44 311.22 - 313.07 314.97 316.93 318.96 321.04 323.18 325.39 327.65 / - 15 11 8 1 282.24 279.08 277.91 277.43 277.36 277.5 277.79 278.21 278.75 279.38 280.11 280.93 - 281.82 282.79 283.85 284.97 286.17 287.44 288.79 290.2 291.68 293.23 294.85 296.54 298.29 300.11 302 303.9 - 305.92 308 310.15 312.37 314.64 316.99 319.39 321.86 / - 15 11 9 1 270.43 260.26 258.99 258.44 258.32 258.47 258.83 259.36 260.04 260.84 261.76 262.79 - 263.93 265.12 266.45 267.86 269.37 270.96 272.63 274.35 276.19 278.11 280.11 282.19 284.3 286.54 288.85 291.23 - 293.69 296.18 298.78 301.45 304.19 306.98 309.86 312.81 / - 15 11 10 1 246.61 231.51 230.39 230.09 230.24 230.72 231.43 232.35 233.44 234.69 236.08 237.62 - 239.28 241.07 242.99 245.02 247.16 249.42 251.78 254.25 256.82 259.49 262.26 265.13 268.09 271.14 274.28 277.51 - 280.82 284.23 287.74 291.3 294.94 298.63 302.41 306.25 / - 15 11 11 1 202.81 199.49 198.49 198.46 199.04 200.05 201.31 202.87 204.66 206.65 208.84 211.21 - 213.76 216.47 219.33 222.35 225.51 228.8 232.23 235.78 239.46 243.25 247.16 251.18 255.57 259.81 264.15 268.59 - 273.12 277.73 282.44 287.24 292.12 297.54 302.6 307.74 / - 15 11 12 1 170 168.36 168.69 169.76 171.31 173.24 175.55 178.21 181.16 184.41 187.88 191.59 - 195.48 199.62 203.92 208.41 213.07 217.79 222.77 227.92 233.21 238.66 244.25 249.78 255.61 261.57 267.69 273.95 - 280.04 286.53 293.16 299.55 306.4 312.98 320.06 327.27 / - 15 11 13 1 146.8 147.92 150.3 153.44 157.04 160.91 165.03 169.38 173.96 178.78 183.81 189.07 - 194.54 200.22 206.11 212.2 218.48 224.95 231.61 238.44 245.44 252.61 259.95 267.44 275.09 282.89 290.84 299.19 - 308.51 317.7 327.11 336.29 345.69 355.12 364.74 374.26 / - 15 11 14 1 139.02 142.97 147.1 151.54 156.39 161.68 167.49 173.74 180.37 187.36 194.69 202.35 - 210.34 218.66 227.29 236.23 245.48 255.03 264.87 274.95 285.25 295.78 306.54 317.54 328.77 340.23 351.92 363.84 - 375.98 388.35 400.93 413.74 426.76 440 453.46 467.13 / - 15 11 15 1 135.22 141.47 147.75 154.5 162.03 170.33 179.36 189.1 199.52 210.57 222.2 234.4 - 247.13 260.37 274.1 288.29 302.94 318.03 333.57 349.56 366 382.89 400.24 418.03 436.27 454.95 473.99 493.39 - 513.15 533.29 553.81 574.73 596.05 617.78 639.94 662.53 / - 15 11 16 1 132.85 142.2 152.97 165.04 178.41 193.03 208.9 225.96 244.13 263.37 283.61 304.79 - 326.9 349.92 373.79 398.47 423.99 450.32 477.38 505.19 533.78 563.15 593.3 624.14 655.6 687.79 720.94 755.04 - 790.1 826.09 862.91 900.39 938.54 977.36 1018.09 1060.02 / - 15 11 17 1 134.31 151 171.16 194.47 220.26 248.19 278.17 310.18 344.13 379.79 417.39 456.93 - 498.31 540.28 584.9 630.9 678.11 727.14 778.16 831.1 885.94 942.61 1001.07 1061.12 1122.17 1183.7 1247.15 1305.58 - 1361.79 1417.82 1476.07 1535.53 1595.46 1655.03 1716.33 1780.88 / - 15 11 18 1 141.83 178.3 221.14 268.13 318.68 372.86 430.86 492.55 558.15 627.59 700.58 777.54 - 859.26 944.98 1034.7 1128.98 1225.04 1317.04 1407.03 1501.24 1596.3 1694.17 1796.26 1902.26 2007.95 2115.6 2224.74 2338.84 - 2450.56 2568.35 2687.85 2811.88 2935.16 3059.65 3185.88 3318.97 / - 15 11 19 1 170.4 236.37 314.62 404.93 505.13 612.85 730.91 857.26 995.07 1141.27 1293.79 1441.33 - 1598.01 1754.69 1926.49 2097.92 2275.42 2458.09 2660.43 2853.97 3057.72 3261.38 3478.06 3698.48 3925.38 4162.35 4397.09 4639.53 - 4893.14 5153.05 5418.38 5678.94 5954.33 6235.6 6510.96 6803.75 / - 15 11 20 1 227.2 341.17 463.58 638.22 844.76 1077.13 1334.06 1586.3 1860.03 2154.47 2458.56 2782.66 - 3125.2 3465.66 3848.55 4225.57 4648.76 5059.13 5480.29 5924.18 6429.35 6896.98 7388.75 7901.16 8416.17 8959.15 9510.63 10085.03 - 10667.99 11269.41 11889.64 12561.18 13218.52 13897.69 14567.5 15282.55 / - 15 12 1 1 295.7 294.66 294.35 294.34 294.5 294.8 295.19 295.66 296.22 296.84 297.54 298.3 - 299.12 300.01 300.96 301.97 303.04 304.17 305.36 306.6 307.91 309.28 310.7 312.18 313.72 315.32 316.97 318.69 - 320.45 322.28 324.17 326.11 328.1 330.16 332.27 334.44 / - 15 12 2 1 295.6 294.55 294.23 294.22 294.38 294.67 295.06 295.54 296.09 296.72 297.41 298.17 - 298.99 299.88 300.83 301.84 302.91 304.04 305.23 306.48 307.78 309.15 310.57 312.06 313.6 315.19 316.85 318.56 - 320.33 322.16 324.04 325.99 327.99 330.04 332.15 334.32 / - 15 12 3 1 295.42 294.35 294.02 294 294.16 294.45 294.84 295.31 295.86 296.48 297.18 297.94 - 298.76 299.65 300.59 301.6 302.67 303.81 305 306.24 307.55 308.92 310.34 311.83 313.37 314.97 316.62 318.34 - 320.11 321.94 323.83 325.77 327.77 329.83 331.95 334.12 / - 15 12 4 1 295.08 293.97 293.63 293.6 293.75 294.03 294.42 294.89 295.44 296.06 296.75 297.51 - 298.33 299.22 300.17 301.18 302.25 303.38 304.57 305.82 307.13 308.5 309.93 311.41 312.96 314.56 316.22 317.93 - 319.71 321.54 323.44 325.38 327.39 329.45 331.58 333.75 / - 15 12 5 1 294.43 293.26 292.88 292.83 292.98 293.25 293.63 294.09 294.64 295.26 295.95 296.71 - 297.53 298.42 299.37 300.38 301.45 302.58 303.78 305.03 306.35 307.72 309.15 310.64 312.19 313.8 315.47 317.19 - 318.98 320.82 322.72 324.68 326.69 328.77 330.9 333.09 / - 15 12 6 1 293.14 291.86 291.43 291.35 291.48 291.74 292.11 292.57 293.11 293.73 294.42 295.17 - 296 296.89 297.84 298.86 299.94 301.08 302.28 303.55 304.87 306.25 307.7 309.2 310.77 312.39 314.07 315.81 - 317.61 319.47 321.39 323.37 325.41 327.5 329.66 331.87 / - 15 12 7 1 290.28 288.59 287.94 287.72 287.75 287.95 288.27 288.7 289.23 289.83 290.52 291.28 - 292.11 293.01 293.98 295.02 296.12 297.29 298.53 299.82 301.18 302.61 304.09 305.64 307.26 308.93 310.67 312.46 - 314.32 316.24 318.23 320.27 322.37 324.54 326.76 329.05 / - 15 12 8 1 283.61 279.75 278.35 277.88 277.75 277.86 278.13 278.54 279.07 279.7 280.43 281.25 - 282.16 283.15 284.21 285.36 286.58 287.87 289.24 290.68 292.19 293.77 295.42 297.13 298.92 300.77 302.7 304.68 - 306.74 308.86 311.05 313.26 315.58 317.96 320.41 322.92 / - 15 12 9 1 271.64 260.1 258.8 258.25 258.13 258.29 258.66 259.21 259.91 260.74 261.68 262.74 - 263.87 265.14 266.5 267.95 269.5 271.13 272.81 274.62 276.51 278.48 280.49 282.62 284.83 287.11 289.44 291.87 - 294.38 296.96 299.58 302.3 305.09 307.95 310.86 313.87 / - 15 12 10 1 246.71 231.41 230.29 229.99 230.15 230.64 231.37 232.3 233.41 234.69 236.11 237.67 - 239.36 241.19 243.13 245.2 247.38 249.68 252.08 254.6 257.21 259.93 262.75 265.66 268.67 271.77 274.97 278.25 - 281.62 285.08 288.63 292.25 295.96 299.75 303.64 307.63 / - 15 12 11 1 202.9 199.59 198.54 198.59 199.2 200.19 201.52 203.1 204.86 206.88 209.09 211.49 - 214.06 216.79 219.69 222.73 225.92 229.25 232.89 236.49 240.22 244.06 248.03 252.1 256.28 260.56 264.94 269.76 - 274.35 279.03 283.81 288.67 293.62 298.65 303.77 308.96 / - 15 12 12 1 170.08 168.52 168.87 169.96 171.49 173.42 175.72 178.49 181.5 184.79 188.28 192.04 - 196 200.12 204.48 209 213.7 218.57 223.47 228.65 233.99 239.47 245.11 250.88 256.58 262.59 268.73 275.03 - 281.47 287.72 294.4 301.2 307.75 314.79 321.53 328.79 / - 15 12 13 1 146.95 148.19 150.61 153.77 157.41 161.32 165.47 169.86 174.47 179.31 184.38 189.67 - 195.17 200.88 206.8 212.92 219.23 225.74 232.43 239.3 246.35 253.56 260.94 268.48 276.18 284.03 292.03 300.17 - 308.73 318.32 327.76 337.21 346.83 356.46 366.12 375.98 / - 15 12 14 1 139.23 143.29 147.45 151.93 156.8 162.1 167.93 174.19 180.85 187.86 195.21 202.9 - 210.92 219.26 227.92 236.89 246.16 255.74 265.61 275.75 286.11 296.69 307.51 318.56 329.84 341.35 353.1 365.07 - 377.27 389.7 402.35 415.21 428.3 441.61 455.13 468.87 / - 15 12 15 1 135.32 141.7 148.05 154.83 162.38 170.69 179.74 189.49 199.92 210.99 222.63 234.86 - 247.61 260.86 274.61 288.84 303.53 318.65 334.21 350.22 366.68 383.59 400.94 418.73 436.97 455.66 474.78 494.26 - 514.11 534.32 554.91 575.89 597.26 619.05 641.25 663.88 / - 15 12 16 1 132.94 142.38 153.18 165.28 178.66 193.29 209.15 226.21 244.38 263.6 283.84 305.03 - 327.14 350.15 374.04 398.73 424.24 450.57 477.67 505.5 534.09 563.44 593.57 624.38 655.81 687.93 720.97 754.96 - 789.88 825.73 862.49 900.08 938.3 977.17 1016.65 1058.09 / - 15 12 17 1 134.35 151.13 171.3 194.62 220.39 248.31 278.27 310.25 344.15 379.85 417.28 456.75 - 498.07 540.67 584.56 630.54 677.69 726.58 777.42 830.14 884.72 941.14 999.33 1059.2 1120.42 1182.22 1245.08 1304.46 - 1361.91 1419.73 1478.35 1538.49 1599.76 1660.26 1724.02 1788.22 / - 15 12 18 1 141.8 178.18 221.11 268.13 318.75 372.9 430.82 492.46 557.88 627.13 699.99 776.72 - 858.09 943.4 1032.7 1126.61 1222.64 1316.97 1405.96 1500.22 1595.98 1696.34 1797.42 1904.21 2010.81 2119.43 2229.58 2344.86 - 2457.55 2576.48 2697.2 2822.65 2947.97 3074.88 3204.21 3341.04 / - 15 12 19 1 170.32 236.34 314.33 404.06 503.95 612.86 728.7 856.48 993.84 1139.57 1292.24 1440.52 - 1597.98 1755.66 1921.42 2102.97 2279.94 2464.07 2667.92 2863.09 3068.67 3274.26 3491.18 3714.59 3944.23 4183.57 4420.83 4665.65 - 4921.51 5184.18 5451.98 5715.42 5994.08 6277.98 6556.34 6852.26 / - 15 12 20 1 227.14 341.47 464.22 633.07 836.12 1070.14 1326.53 1579.84 1855.59 2150.55 2465.11 2791.72 - 3136.98 3480.49 3866.49 4247.62 4674.12 5087.96 5513 5960.92 6470.94 6942.98 7439.19 7951.17 8471.3 9021.87 9581.53 10152.88 - 10749.39 11356.33 11982.37 12627.14 13324.84 14010.16 14687.12 15408.92 / - 15 13 1 1 297.65 296.56 296.22 296.19 296.35 296.63 297.01 297.48 298.03 298.65 299.34 300.1 - 300.92 301.81 302.75 303.76 304.83 305.96 307.15 308.4 309.71 311.08 312.5 313.99 315.53 317.13 318.79 320.5 - 322.28 324.11 326 327.94 329.95 332.01 334.13 336.3 / - 15 13 2 1 297.55 296.45 296.1 296.07 296.22 296.5 296.88 297.35 297.9 298.52 299.21 299.97 - 300.79 301.67 302.62 303.63 304.7 305.83 307.02 308.27 309.58 310.94 312.37 313.85 315.4 317 318.66 320.37 - 322.15 323.98 325.87 327.82 329.82 331.89 334.01 336.18 / - 15 13 3 1 297.37 296.24 295.88 295.85 295.99 296.27 296.65 297.11 297.66 298.28 298.97 299.72 - 300.55 301.43 302.38 303.39 304.45 305.58 306.77 308.02 309.33 310.7 312.13 313.61 315.16 316.76 318.42 320.14 - 321.92 323.75 325.64 327.59 329.6 331.67 333.79 335.97 / - 15 13 4 1 297.02 295.85 295.48 295.43 295.57 295.84 296.21 296.68 297.22 297.84 298.52 299.28 - 300.1 300.98 301.93 302.94 304.01 305.14 306.33 307.58 308.89 310.26 311.69 313.18 314.72 316.33 317.99 319.72 - 321.5 323.33 325.23 327.19 329.2 331.27 333.4 335.58 / - 15 13 5 1 296.35 295.11 294.7 294.63 294.76 295.02 295.39 295.84 296.38 297 297.68 298.44 - 299.26 300.14 301.09 302.1 303.17 304.3 305.5 306.75 308.07 309.44 310.88 312.37 313.92 315.54 317.21 318.94 - 320.72 322.57 324.48 326.44 328.46 330.55 332.68 334.88 / - 15 13 6 1 295.03 293.66 293.19 293.08 293.18 293.43 293.78 294.23 294.77 295.38 296.06 296.82 - 297.64 298.53 299.48 300.5 301.57 302.71 303.92 305.18 306.51 307.89 309.34 310.85 312.42 314.04 315.73 317.48 - 319.28 321.15 323.08 325.06 327.11 329.21 331.37 333.6 / - 15 13 7 1 291.85 289.92 289.14 288.83 288.8 288.96 289.25 289.66 290.16 290.76 291.43 292.19 - 293.02 293.92 294.89 295.94 297.05 298.22 299.47 300.77 302.15 303.58 305.09 306.65 308.28 309.97 311.73 313.55 - 315.43 317.37 319.37 321.44 323.57 325.76 328.01 330.33 / - 15 13 8 1 284.87 280.08 278.7 278.14 277.96 278.01 278.27 278.68 279.22 279.86 280.6 281.43 - 282.35 283.36 284.45 285.62 286.81 288.13 289.53 291 292.54 294.15 295.84 297.59 299.42 301.31 303.27 305.31 - 307.4 309.57 311.8 314.1 316.47 318.9 321.39 323.96 / - 15 13 9 1 272.75 259.78 258.5 257.97 257.87 258.06 258.46 259.03 259.76 260.62 261.59 262.65 - 263.85 265.15 266.54 268.04 269.63 271.26 273.03 274.88 276.83 278.85 280.91 283.1 285.37 287.71 290.1 292.6 - 295.17 297.79 300.51 303.31 306.17 309.08 312.08 315.16 / - 15 13 10 1 247.02 231.31 230.18 229.89 230.07 230.57 231.31 232.26 233.4 234.69 236.14 237.73 - 239.45 241.31 243.29 245.39 247.61 249.95 252.39 254.95 257.61 260.38 263.24 266.21 269.27 272.42 275.67 279.01 - 282.44 285.96 289.56 293.25 297.02 300.88 304.81 308.82 / - 15 13 11 1 202.99 199.69 198.66 198.68 199.31 200.37 201.68 203.28 205.12 207.16 209.41 211.84 - 214.45 217.22 220.16 223.25 226.48 229.86 233.37 237.01 240.77 244.66 248.9 253.03 257.27 261.61 266.05 270.6 - 275.24 279.97 285.19 290.12 295.14 300.24 305.43 310.7 / - 15 13 12 1 170.16 168.66 169.06 170.16 171.75 173.7 176.03 178.7 181.7 185.1 188.7 192.47 - 196.43 200.63 205.01 209.6 214.33 219.23 224.18 229.39 234.76 240.29 245.96 251.78 257.75 263.61 269.8 276.12 - 282.6 289.22 295.64 302.49 309.48 316.2 323.42 330.33 / - 15 13 13 1 147.12 148.46 150.95 154.12 157.81 161.76 165.94 170.36 175 179.87 184.97 190.28 - 195.81 201.55 207.5 213.65 220 226.54 233.26 240.17 247.25 254.5 261.93 269.51 277.25 285.15 293.2 301.39 - 309.73 318.51 328.06 338.06 347.75 357.31 367.17 377.12 / - 15 13 14 1 139.48 143.63 147.83 152.33 157.22 162.55 168.38 174.66 181.34 188.38 195.75 203.46 - 211.5 219.86 228.54 237.53 246.83 256.42 266.32 276.5 286.92 297.56 308.43 319.53 330.86 342.42 354.22 366.24 - 378.5 390.98 403.68 416.61 429.76 443.13 456.71 470.52 / - 15 13 15 1 135.5 141.97 148.37 155.17 162.74 171.06 180.12 189.89 200.32 211.41 223.06 235.29 - 248.05 261.32 275.07 289.31 304.02 319.18 334.77 350.8 367.27 384.18 401.53 419.32 437.55 456.22 475.33 494.88 - 514.81 535.1 555.76 576.81 598.24 620.07 642.32 664.98 / - 15 13 16 1 133.08 142.57 153.41 165.52 178.91 193.54 209.4 226.44 244.6 263.8 284.02 305.2 - 327.31 350.3 374.18 398.89 424.38 450.68 477.77 505.63 534.22 563.55 593.64 624.43 655.82 687.88 720.85 754.74 - 789.54 825.25 861.85 899.35 937.72 976.77 1016.38 1056.54 / - 15 13 17 1 134.44 151.26 171.44 194.76 220.51 248.81 278.31 310.24 344.1 379.73 417.13 456.52 - 497.67 539.97 584.01 630 677.12 725.91 776.6 829.14 883.51 939.69 997.61 1057.22 1118.33 1180.78 1243.41 1302.86 - 1360.37 1419.54 1479.03 1540.32 1602.59 1665.43 1731.58 1795.58 / - 15 13 18 1 141.78 178.15 221.11 268.11 318.76 372.87 430.67 492.24 557.49 626.55 699.29 775.89 - 856.98 941.94 1030.84 1124.36 1220.39 1314.82 1405.7 1499.31 1597.17 1697.48 1798.57 1906.1 2013.55 2123.12 2234.35 2350.53 - 2466.06 2584.66 2706.6 2833.25 2959.94 3088.37 3219.08 3357.16 / - 15 13 19 1 170.25 236.36 313.52 404.12 503.92 611.43 728.42 854.75 990.84 1138.1 1290.79 1439.84 - 1591.13 1756.86 1923.7 2106.42 2284.91 2470.53 2661.03 2873.12 3080.34 3288.34 3505.73 3731.99 3964.65 4198.95 4446.31 4694.11 - 4952.09 5208.16 5488.06 5755.17 6036.71 6323.46 6605.55 6905.03 / - 15 13 20 1 227.13 341.9 465.31 625.84 827.71 1063.78 1312.08 1572.36 1851.73 2147.35 2455.5 2782 - 3131.31 3496.79 3861.89 4271.22 4666.28 5119.47 5548.93 6000.85 6460.33 6993.32 7494.96 8011.21 8531.81 9084.88 9656.49 10234.88 - 10810.02 11450.86 12083.13 12734.45 13405.45 14131.24 14817.06 15548.56 / - 15 14 1 1 299.52 298.41 298.06 298.02 298.17 298.44 298.82 299.28 299.83 300.45 301.13 301.89 - 302.71 303.59 304.54 305.54 306.61 307.74 308.93 310.18 311.49 312.86 314.29 315.77 317.32 318.92 320.58 322.3 - 324.08 325.92 327.81 329.76 331.77 333.84 335.97 338.15 / - 15 14 2 1 299.42 298.3 297.94 297.89 298.04 298.31 298.69 299.15 299.69 300.31 301 301.75 - 302.57 303.45 304.4 305.4 306.47 307.6 308.79 310.04 311.35 312.72 314.15 315.63 317.18 318.78 320.45 322.17 - 323.94 325.78 327.68 329.63 331.64 333.71 335.84 338.02 / - 15 14 3 1 299.23 298.09 297.71 297.66 297.8 298.07 298.44 298.9 299.44 300.06 300.74 301.5 - 302.32 303.2 304.14 305.15 306.22 307.35 308.54 309.79 311.1 312.47 313.9 315.38 316.93 318.53 320.2 321.92 - 323.7 325.54 327.44 329.39 331.41 333.48 335.61 337.8 / - 15 14 4 1 298.88 297.69 297.29 297.23 297.36 297.62 297.99 298.44 298.98 299.59 300.28 301.03 - 301.85 302.73 303.67 304.68 305.75 306.88 308.07 309.32 310.63 312 313.44 314.92 316.47 318.08 319.75 321.48 - 323.26 325.1 327.01 328.97 330.98 333.06 335.2 337.39 / - 15 14 5 1 298.19 296.92 296.48 296.39 296.51 296.76 297.12 297.57 298.1 298.71 299.39 300.14 - 300.96 301.84 302.79 303.8 304.87 306 307.19 308.45 309.77 311.14 312.58 314.07 315.63 317.24 318.92 320.65 - 322.45 324.3 326.21 328.18 330.21 332.3 334.45 336.65 / - 15 14 6 1 296.8 295.34 294.81 294.66 294.74 294.96 295.3 295.74 296.27 296.87 297.55 298.3 - 299.12 300 300.95 301.97 303.04 304.19 305.39 306.66 307.99 309.38 310.83 312.34 313.91 315.55 317.24 319 - 320.81 322.69 324.63 326.62 328.68 330.79 332.97 335.2 / - 15 14 7 1 293.26 291.07 290.13 289.73 289.63 289.74 290 290.38 290.87 291.45 292.12 292.87 - 293.7 294.6 295.58 296.63 297.75 298.94 300.19 301.52 302.91 304.36 305.88 307.47 309.12 310.84 312.61 314.46 - 316.37 318.34 320.37 322.47 324.63 326.85 329.14 331.48 / - 15 14 8 1 286.01 280.42 278.75 278.14 277.93 277.97 278.22 278.62 279.15 279.79 280.54 281.39 - 282.33 283.34 284.45 285.64 286.92 288.27 289.7 291.2 292.78 294.43 296.16 297.93 299.8 301.74 303.75 305.83 - 307.98 310.19 312.48 314.81 317.23 319.72 322.27 324.89 / - 15 14 9 1 273.74 259.34 258.12 257.63 257.57 257.79 258.22 258.82 259.58 260.47 261.48 262.61 - 263.84 265.14 266.58 268.12 269.75 271.48 273.25 275.15 277.15 279.23 281.34 283.59 285.92 288.33 290.77 293.34 - 295.98 298.66 301.46 304.33 307.27 310.25 313.33 316.49 / - 15 14 10 1 247 231.22 230.08 229.79 229.98 230.5 231.26 232.23 233.38 234.7 236.17 237.79 - 239.54 241.43 243.45 245.59 247.85 250.22 252.71 255.31 258.02 260.83 263.75 266.77 269.88 273.09 276.4 279.79 - 283.28 286.86 290.52 294.28 298.11 302.03 306.03 310.11 / - 15 14 11 1 203.08 199.79 198.71 198.82 199.47 200.5 201.88 203.46 205.32 207.39 209.66 212.11 - 214.75 217.55 220.52 223.64 226.9 230.31 234.03 237.72 241.54 245.48 249.54 253.71 257.99 262.38 267.18 271.78 - 276.49 281.29 286.18 291.17 296.24 301.85 307.11 312.45 / - 15 14 12 1 170.23 168.82 169.23 170.4 172.01 173.99 176.36 179.06 182.05 185.29 189.03 192.89 - 196.9 201.14 205.56 210.17 214.9 219.91 224.88 230.14 235.55 241.11 246.82 252.69 258.69 264.6 270.87 277.24 - 283.74 290.41 296.88 303.79 310.84 317.62 324.89 332.3 / - 15 14 13 1 147.31 148.76 151.3 154.51 158.25 162.23 166.45 170.9 175.57 180.47 185.59 190.93 - 196.48 202.25 208.22 214.4 220.78 227.34 234.1 241.04 248.15 255.44 262.9 270.53 278.31 286.25 294.34 302.59 - 310.98 319.51 328.19 337.98 348.28 358.05 368.08 378.09 / - 15 14 14 1 139.79 144.01 148.24 152.77 157.68 163.02 168.87 175.16 181.85 188.91 196.3 204.03 - 212.09 220.47 229.16 238.17 247.47 257.08 266.99 277.18 287.66 298.36 309.28 320.43 331.8 343.42 355.26 367.33 - 379.64 392.17 404.92 417.9 431.11 444.53 458.18 472.04 / - 15 14 15 1 135.75 142.28 148.73 155.55 163.12 171.45 180.51 190.28 200.72 211.81 223.48 235.71 - 248.46 261.73 275.48 289.71 304.41 319.56 335.17 351.22 367.7 384.61 401.95 419.73 437.94 456.58 475.65 495.16 - 515.1 535.47 556.22 577.34 598.84 620.72 643.01 665.71 / - 15 14 16 1 133.28 142.81 153.67 165.79 179.17 193.78 209.63 226.66 244.78 263.96 284.14 305.28 - 327.35 350.34 374.19 398.89 424.36 450.62 477.65 505.45 534.03 563.35 593.41 624.17 655.53 687.53 720.42 754.19 - 788.87 824.43 860.87 898.18 936.35 975.4 1015.23 1055.66 / - 15 14 17 1 134.57 151.41 171.57 194.87 220.83 249.03 278.5 310.1 343.91 379.58 416.84 456.05 - 497.05 539.81 583.17 629.18 676.29 725 775.55 827.9 882.04 937.96 995.61 1054.96 1116.02 1178.33 1241.2 1301.1 - 1359.29 1419.06 1479.49 1541.81 1605.26 1669.53 1737.03 1802.78 / - 15 14 18 1 141.78 178.12 221.09 268.04 318.62 372.72 430.41 491.75 556.83 625.75 698.25 774.79 - 855.63 940.28 1028.83 1121.27 1217.89 1312.36 1403.87 1498.02 1596.64 1697.64 1799.61 1907.91 2016.29 2126.87 2239.21 2356.42 - 2475.79 2593.13 2716.35 2841.67 2972.45 3102.45 3234.72 3374.03 / - 15 14 19 1 170.22 236.45 313.19 403.32 502.63 611.39 726.29 852.43 989.58 1136.79 1289.17 1432.93 - 1591.93 1758.16 1926.19 2110.12 2290.25 2477.58 2669.96 2883.95 3093.07 3303.46 3523.2 3750.22 3985.99 4223.95 4474.08 4724.77 - 4985.72 5244.75 5516.94 5798.32 6082.75 6373.23 6659.75 6962.09 / - 15 14 20 1 227.19 342.52 466.74 618.75 820.72 1052.76 1304.48 1565.86 1845.85 2145.07 2454.33 2793.44 - 3145.85 3493.11 3883.62 4297.16 4696.43 5115.88 5588.83 6045.24 6510.17 6997.2 7555.72 8077.47 8604.78 9158.52 9731.83 10321.36 - 10907.33 11524.76 12194.07 12853.06 13530.6 14226.44 14941.9 15670.19 / - 15 15 1 1 301.29 300.21 299.86 299.82 299.96 300.23 300.6 301.06 301.61 302.22 302.91 303.66 - 304.48 305.36 306.3 307.31 308.38 309.51 310.7 311.95 313.26 314.62 316.05 317.54 319.09 320.69 322.36 324.08 - 325.86 327.71 329.6 331.56 333.58 335.65 337.78 339.97 / - 15 15 2 1 301.19 300.09 299.73 299.69 299.82 300.09 300.46 300.92 301.46 302.08 302.76 303.51 - 304.33 305.21 306.16 307.16 308.23 309.36 310.55 311.8 313.11 314.48 315.91 317.4 318.94 320.55 322.22 323.94 - 325.72 327.56 329.46 331.42 333.44 335.51 337.65 339.84 / - 15 15 3 1 301.01 299.88 299.5 299.44 299.58 299.84 300.21 300.67 301.2 301.82 302.5 303.25 - 304.07 304.94 305.89 306.89 307.96 309.09 310.28 311.53 312.84 314.21 315.64 317.13 318.68 320.29 321.96 323.68 - 325.47 327.31 329.21 331.17 333.19 335.27 337.41 339.6 / - 15 15 4 1 300.64 299.46 299.06 298.99 299.11 299.37 299.73 300.18 300.72 301.33 302.01 302.75 - 303.57 304.45 305.39 306.4 307.47 308.6 309.79 311.04 312.35 313.72 315.16 316.65 318.2 319.81 321.48 323.21 - 325 326.85 328.75 330.72 332.75 334.83 336.97 339.17 / - 15 15 5 1 299.94 298.66 298.21 298.11 298.21 298.45 298.81 299.25 299.78 300.39 301.07 301.81 - 302.63 303.51 304.45 305.46 306.53 307.66 308.86 310.11 311.43 312.81 314.25 315.74 317.3 318.92 320.6 322.34 - 324.14 325.99 327.91 329.89 331.93 334.02 336.18 338.39 / - 15 15 6 1 298.36 296.8 296.2 296.01 296.05 296.25 296.57 296.99 297.5 298.1 298.77 299.51 - 300.33 301.21 302.16 303.18 304.26 305.41 306.61 307.89 309.22 310.62 312.08 313.6 315.19 316.83 318.54 320.31 - 322.14 324.03 325.98 327.99 330.06 332.19 334.39 336.64 / - 15 15 7 1 294.47 292 290.89 290.38 290.18 290.24 290.47 290.83 291.3 291.88 292.55 293.3 - 294.13 295.04 296.03 297.09 298.23 299.43 300.71 302.05 303.46 304.94 306.49 308.1 309.78 311.53 313.34 315.21 - 317.16 319.16 321.23 323.37 325.56 327.82 330.15 332.54 / - 15 15 8 1 287.02 280.49 278.67 277.94 277.7 277.74 277.97 278.37 278.91 279.56 280.33 281.19 - 282.15 283.21 284.35 285.57 286.88 288.23 289.69 291.24 292.86 294.55 296.32 298.17 300.09 302.08 304.12 306.25 - 308.45 310.73 313.07 315.46 317.95 320.49 323.11 325.79 / - 15 15 9 1 274.58 258.61 257.52 257.13 257.15 257.43 257.93 258.58 259.38 260.31 261.36 262.52 - 263.8 265.17 266.65 268.23 269.89 271.66 273.5 275.46 277.5 279.59 281.81 284.12 286.46 288.93 291.49 294.12 - 296.79 299.58 302.45 305.35 308.38 311.47 314.6 317.84 / - 15 15 10 1 246.9 231.13 229.99 229.7 229.9 230.43 231.2 232.19 233.37 234.71 236.21 237.86 - 239.64 241.56 243.62 245.79 248.09 250.51 253.04 255.69 258.44 261.3 264.27 267.34 270.51 273.77 277.14 280.59 - 284.14 287.78 291.51 295.32 299.22 303.21 307.27 311.42 / - 15 15 11 1 203.17 199.84 198.83 198.91 199.59 200.68 202.03 203.69 205.54 207.64 209.94 212.42 - 215.09 217.92 220.92 224.08 227.46 230.92 234.52 238.24 242.1 246.08 250.41 254.64 258.99 263.44 267.99 272.65 - 277.4 282.62 287.58 292.63 297.78 303.01 308.33 313.73 / - 15 15 12 1 170.39 168.97 169.45 170.64 172.27 174.28 176.7 179.44 182.47 185.74 189.24 193.19 - 197.37 201.65 206.11 210.73 215.58 220.51 225.6 230.89 236.33 241.94 247.69 253.59 259.64 265.83 271.91 278.36 - 284.92 291.6 298.46 305.09 312.19 319.42 326.37 333.84 / - 15 15 13 1 147.52 149.09 151.7 154.96 158.75 162.77 167.02 171.5 176.2 181.12 186.26 191.62 - 197.19 202.98 208.98 215.18 221.57 228.17 234.95 241.91 249.06 256.38 263.87 271.53 279.35 287.33 295.47 303.75 - 312.19 320.77 329.5 338.37 348.07 358.32 368.69 379.04 / - 15 15 14 1 140.17 144.45 148.7 153.25 158.18 163.53 169.4 175.71 182.41 189.47 196.87 204.6 - 212.67 221.05 229.76 238.78 248.1 257.71 267.61 277.81 288.28 299.04 310.02 321.22 332.64 344.29 356.18 368.3 - 380.64 393.22 406.02 419.05 432.3 445.77 459.47 473.38 / - 15 15 15 1 136.07 142.66 149.13 155.96 163.54 171.87 180.92 190.68 201.11 212.19 223.84 236.08 - 248.83 262.08 275.81 290.01 304.68 319.81 335.38 351.4 367.88 384.8 402.14 419.89 438.06 456.66 475.69 495.14 - 515.01 535.31 556.03 577.18 598.74 620.68 643.01 665.72 / - 15 15 16 1 133.53 143.1 153.97 166.08 179.44 194.02 209.83 226.83 244.93 264.06 284.18 305.26 - 327.27 350.18 374 398.68 424.13 450.31 477.26 504.96 533.42 562.63 592.59 623.31 654.7 686.67 719.48 753.14 - 787.68 823.07 859.33 896.49 934.55 973.51 1013.25 1053.76 / - 15 15 17 1 134.75 151.59 171.71 194.96 220.99 248.98 278.82 309.84 343.53 379.13 416.38 455.36 - 496.19 538.75 582.21 627.84 675.05 723.7 774.11 826.27 880.2 935.99 993.54 1052.69 1113.31 1175.18 1237.9 1299.92 - 1357.32 1417.11 1478.12 1541.02 1605.1 1671.63 1738.13 1804.6 / - 15 15 18 1 141.79 178.11 221.02 267.92 318.37 372.34 429.94 491.08 555.85 624.5 696.8 773.1 - 853.76 938.36 1026.88 1118.84 1214.83 1309.35 1401.55 1496.46 1595.66 1697.47 1800.43 1907.41 2018.82 2130.49 2244.04 2362.37 - 2482.89 2601.91 2726.51 2853.2 2985.66 3117.24 3254.28 3391.82 / - 15 15 19 1 170.23 236.65 313.1 402.58 501.39 609.54 725.94 850.05 986.36 1131.08 1283.69 1432.74 - 1591.77 1759.18 1928.58 2103.24 2295.74 2485.06 2679.53 2882.92 3106.72 3319.79 3542.12 3770.17 4009.25 4251.08 4500.31 4758.24 - 5021.93 5285 5560.46 5834.57 6133.73 6427.43 6718.6 7025.11 / - 15 15 20 1 227.35 343.42 468.68 611.05 816.89 1043.81 1299.26 1559.14 1838.22 2133.29 2455 2788.89 - 3139.42 3513.33 3908.06 4293.88 4730.35 5154.52 5593.55 6094.9 6565.87 7058.66 7558.57 8151.74 8686.34 9245.71 9818.83 10410.62 - 11008.57 11640.9 12285.53 12982.99 13668.77 14373.35 15097.7 15837.48 / - 15 16 1 1 302.96 301.94 301.6 301.57 301.71 301.99 302.36 302.82 303.36 303.97 304.66 305.41 - 306.22 307.1 308.05 309.05 310.12 311.25 312.44 313.69 315 316.37 317.8 319.29 320.84 322.45 324.12 325.84 - 327.63 329.47 331.38 333.34 335.36 337.44 339.58 341.78 / - 15 16 2 1 302.86 301.82 301.47 301.43 301.58 301.84 302.21 302.67 303.21 303.82 304.51 305.26 - 306.07 306.95 307.89 308.9 309.97 311.09 312.28 313.53 314.85 316.22 317.65 319.14 320.69 322.3 323.96 325.69 - 327.48 329.32 331.23 333.19 335.21 337.3 339.43 341.63 / - 15 16 3 1 302.67 301.59 301.23 301.18 301.32 301.58 301.95 302.4 302.94 303.55 304.23 304.97 - 305.79 306.67 307.61 308.62 309.68 310.81 312 313.25 314.56 315.93 317.37 318.86 320.41 322.02 323.69 325.42 - 327.21 329.05 330.96 332.93 334.95 337.04 339.18 341.38 / - 15 16 4 1 302.3 301.16 300.77 300.7 300.82 301.08 301.44 301.89 302.42 303.02 303.7 304.45 - 305.26 306.14 307.08 308.08 309.15 310.28 311.47 312.73 314.04 315.41 316.85 318.34 319.89 321.51 323.18 324.92 - 326.71 328.56 330.47 332.45 334.48 336.57 338.72 340.92 / - 15 16 5 1 301.56 300.3 299.85 299.75 299.85 300.08 300.43 300.87 301.4 302 302.67 303.42 - 304.23 305.11 306.05 307.06 308.13 309.26 310.45 311.71 313.03 314.41 315.85 317.35 318.92 320.54 322.22 323.97 - 325.77 327.63 329.56 331.54 333.59 335.69 337.85 340.08 / - 15 16 6 1 299.67 297.99 297.3 297.05 297.04 297.21 297.5 297.91 298.41 298.99 299.66 300.4 - 301.21 302.1 303.05 304.07 305.16 306.31 307.53 308.81 310.16 311.57 313.04 314.58 316.18 317.84 319.56 321.35 - 323.2 325.11 327.08 329.12 331.21 333.37 335.59 337.87 / - 15 16 7 1 295.44 292.67 291.2 290.62 290.4 290.42 290.61 290.95 291.42 292 292.68 293.44 - 294.29 295.22 296.23 297.31 298.47 299.7 301 302.37 303.78 305.27 306.85 308.5 310.22 312 313.85 315.77 - 317.75 319.8 321.92 324.1 326.35 328.66 331.03 333.47 / - 15 16 8 1 287.85 280.27 278.33 277.65 277.39 277.42 277.65 278.07 278.61 279.28 280.07 280.96 - 281.95 283.03 284.2 285.46 286.81 288.24 289.75 291.34 292.98 294.73 296.55 298.45 300.43 302.47 304.6 306.76 - 309.03 311.36 313.77 316.25 318.79 321.41 324.07 326.82 / - 15 16 9 1 275.25 257.86 256.93 256.65 256.74 257.08 257.62 258.32 259.17 260.14 261.24 262.46 - 263.78 265.21 266.74 268.35 270.05 271.86 273.77 275.77 277.84 280.03 282.28 284.62 287.07 289.59 292.19 294.87 - 297.65 300.49 303.41 306.43 309.5 312.68 315.89 319.21 / - 15 16 10 1 246.41 231.04 229.9 229.62 229.82 230.36 231.16 232.16 233.36 234.73 236.25 237.93 - 239.75 241.7 243.79 246 248.34 250.8 253.38 256.07 258.87 261.78 264.8 267.92 271.15 274.47 277.89 281.41 - 285.02 288.72 292.51 296.39 300.36 304.41 308.55 312.77 / - 15 16 11 1 203.26 199.89 198.89 199.05 199.74 200.82 202.21 203.89 205.77 207.89 210.21 212.73 - 215.43 218.3 221.33 224.59 227.94 231.44 235.08 238.85 242.87 246.9 251.06 255.34 259.72 264.51 269.12 273.84 - 278.67 283.59 288.6 294.12 299.34 304.64 310.03 315.51 / - 15 16 12 1 170.47 169.13 169.67 170.87 172.52 174.59 177.06 179.85 182.91 186.22 189.76 193.5 - 197.61 202.11 206.62 211.28 216.15 221.17 226.37 231.65 237.13 242.77 248.56 254.51 260.59 266.83 272.95 279.45 - 286.09 292.83 299.7 306.39 313.54 320.83 327.84 335.37 / - 15 16 13 1 147.75 149.47 152.15 155.51 159.35 163.41 167.7 172.2 176.92 181.85 187.01 192.38 - 197.97 203.77 209.78 216 222.41 229.02 235.82 242.8 249.97 257.31 264.83 272.51 280.36 288.38 296.55 304.87 - 313.35 321.98 330.75 339.67 348.73 357.93 368.41 379.12 / - 15 16 14 1 140.66 144.97 149.25 153.81 158.75 164.12 170.01 176.32 183.02 190.08 197.47 205.2 - 213.26 221.63 230.32 239.33 248.63 258.24 268.14 278.33 288.8 299.54 310.56 321.81 333.29 344.99 356.91 369.06 - 381.44 394.05 406.88 419.94 433.23 446.75 460.48 474.44 / - 15 16 15 1 136.51 143.15 149.61 156.44 164.01 172.33 181.37 191.1 201.51 212.55 224.17 236.36 - 249.08 262.3 276.01 290.18 304.8 319.86 335.37 351.33 367.73 384.58 401.86 419.59 437.74 456.3 475.26 494.64 - 514.43 534.63 555.25 576.28 597.72 619.57 641.81 664.45 / - 15 16 16 1 133.87 143.49 154.35 166.43 179.74 194.27 210.02 226.94 244.97 264.04 284.11 305.11 - 327.02 349.83 373.53 398.1 423.48 449.6 476.44 504 532.29 561.33 591.12 621.64 652.88 684.85 717.63 751.22 - 785.64 820.88 856.92 893.8 931.49 969.99 1009.3 1049.38 / - 15 16 17 1 135 151.81 171.85 195 220.91 248.77 278.62 309.41 342.95 378.36 415.49 454.24 - 494.97 537.29 580.52 625.79 672.97 721.67 772.01 824.01 877.67 932.98 989.94 1048.5 1108.59 1170.04 1232.5 1294.48 - 1354.27 1413.27 1475.62 1539.46 1603.83 1669.54 1736.64 1803.93 / - 15 16 18 1 141.94 178.12 220.95 267.73 317.96 371.63 429.06 490.01 554.45 622.62 694.62 770.68 - 850.92 935.21 1023.07 1114.43 1209.78 1304.41 1397.4 1494.17 1593.09 1695.69 1799.71 1907.67 2020.05 2132.91 2250.45 2367.24 - 2489.14 2613.21 2736.13 2864.45 2998.34 3131.84 3271.49 3409.65 / - 15 16 19 1 170.32 237.01 313.21 402.71 501.35 609.07 723.73 849.04 984.15 1127.8 1279.97 1430.51 - 1590.32 1753.01 1929.84 2106.32 2300.4 2491.73 2688.66 2894.38 3120.25 3336.42 3561.51 3792.7 4033.2 4278.17 4532.35 4789.48 - 5061.33 5328.54 5607.56 5888.25 6177.65 6486.94 6783.21 7093.68 / - 15 16 20 1 227.68 344.71 471.29 610.27 811.68 1037.46 1286.21 1544.35 1823.18 2126.29 2450.23 2787.26 - 3131.04 3506.72 3904.32 4324.65 4734.78 5197.71 5643.03 6101.68 6628.16 7127.43 7635.34 8166.27 8777.22 9343.58 9923.2 10515.97 - 11120.77 11754.68 12419.08 13096.49 13789.94 14538.56 15272.86 16025.39 / - 15 17 1 1 304.51 303.58 303.29 303.27 303.43 303.7 304.08 304.54 305.08 305.7 306.38 307.13 - 307.94 308.82 309.77 310.77 311.84 312.97 314.16 315.41 316.72 318.09 319.52 321.01 322.56 324.18 325.85 327.58 - 329.37 331.21 333.12 335.09 337.12 339.2 341.35 343.55 / - 15 17 2 1 304.41 303.46 303.15 303.13 303.28 303.55 303.93 304.39 304.93 305.54 306.22 306.97 - 307.78 308.66 309.6 310.61 311.67 312.8 313.99 315.24 316.55 317.93 319.36 320.85 322.4 324.01 325.68 327.41 - 329.21 331.05 332.96 334.93 336.96 339.05 341.19 343.4 / - 15 17 3 1 304.21 303.22 302.89 302.86 303 303.27 303.64 304.09 304.63 305.24 305.92 306.66 - 307.48 308.36 309.3 310.3 311.37 312.5 313.69 314.94 316.25 317.62 319.06 320.55 322.1 323.72 325.39 327.12 - 328.91 330.77 332.68 334.65 336.68 338.77 340.92 343.13 / - 15 17 4 1 303.82 302.76 302.4 302.34 302.47 302.72 303.08 303.53 304.06 304.67 305.35 306.09 - 306.9 307.78 308.72 309.72 310.79 311.92 313.11 314.37 315.68 317.06 318.49 319.99 321.55 323.16 324.84 326.58 - 328.38 330.24 332.15 334.13 336.17 338.27 340.42 342.64 / - 15 17 5 1 302.93 301.68 301.21 301.09 301.17 301.4 301.73 302.17 302.68 303.28 303.95 304.69 - 305.5 306.38 307.32 308.33 309.4 310.54 311.74 313 314.33 315.71 317.16 318.67 320.24 321.87 323.57 325.32 - 327.14 329.02 330.95 332.95 335.01 337.13 339.31 341.55 / - 15 17 6 1 300.67 298.83 298.02 297.69 297.63 297.75 298.02 298.4 298.88 299.46 300.12 300.86 - 301.67 302.56 303.52 304.55 305.65 306.81 308.05 309.35 310.71 312.14 313.64 315.2 316.82 318.51 320.27 322.08 - 323.96 325.9 327.91 329.98 332.11 334.3 336.56 338.87 / - 15 17 7 1 296.16 293.06 291.1 290.46 290.2 290.2 290.39 290.72 291.19 291.76 292.44 293.21 - 294.07 295.02 296.04 297.15 298.34 299.6 300.93 302.34 303.83 305.38 307 308.7 310.46 312.29 314.2 316.16 - 318.2 320.3 322.48 324.71 327.02 329.39 331.82 334.32 / - 15 17 8 1 288.46 279.91 277.86 277.15 276.94 277 277.28 277.71 278.3 279 279.8 280.72 - 281.74 282.86 284.08 285.38 286.77 288.24 289.8 291.41 293.13 294.93 296.81 298.77 300.81 302.92 305.07 307.33 - 309.67 312.08 314.57 317.09 319.72 322.41 325.18 328.02 / - 15 17 9 1 275.71 257.57 256.61 256.31 256.39 256.74 257.29 258 258.86 259.85 260.97 262.2 - 263.55 265.01 266.56 268.23 269.99 271.85 273.8 275.85 277.99 280.23 282.55 284.97 287.47 290.06 292.73 295.49 - 298.33 301.26 304.29 307.4 310.58 313.82 317.14 320.54 / - 15 17 10 1 246.13 230.96 229.81 229.53 229.75 230.3 231.11 232.14 233.36 234.75 236.3 238 - 239.85 241.84 243.97 246.22 248.6 251.1 253.72 256.46 259.31 262.27 265.34 268.52 271.8 275.18 278.66 282.24 - 285.91 289.67 293.53 297.48 301.51 305.64 309.84 314.14 / - 15 17 11 1 203.36 199.98 199.01 199.13 199.85 200.97 202.38 204.07 206 208.15 210.48 213.02 - 215.75 218.69 221.76 224.99 228.43 231.97 235.65 239.46 243.52 247.61 251.81 256.28 260.73 265.29 269.96 274.73 - 279.94 284.93 290.02 295.2 300.47 305.84 311.76 317.32 / - 15 17 12 1 170.64 169.29 169.88 171.11 172.79 174.93 177.46 180.3 183.41 186.76 190.33 194.11 - 198.08 202.36 207.13 211.92 216.8 221.87 227.09 232.49 237.96 243.63 249.45 255.43 261.56 267.83 274 280.54 - 287.22 294.05 300.97 307.71 314.88 322.22 329.71 336.88 / - 15 17 13 1 148.04 149.93 152.71 156.22 160.12 164.23 168.55 173.07 177.8 182.75 187.91 193.28 - 198.88 204.68 210.69 216.9 223.31 229.92 236.73 243.72 250.89 258.25 265.78 273.48 281.35 289.38 297.57 305.92 - 314.43 323.09 331.9 340.86 349.96 359.2 368.59 378.11 / - 15 17 14 1 141.31 145.63 149.93 154.5 159.44 164.84 170.74 177.06 183.75 190.78 198.15 205.85 - 213.88 222.22 230.87 239.84 249.1 258.66 268.51 278.65 289.08 299.78 310.75 322 333.52 345.28 357.25 369.44 - 381.86 394.49 407.34 420.43 433.74 447.27 461.03 475.01 / - 15 17 15 1 137.14 143.82 150.21 157.02 164.57 172.86 181.86 191.56 201.93 212.89 224.46 236.58 - 249.21 262.35 275.96 290.04 304.58 319.57 335 350.86 367.16 383.88 401.04 418.62 436.63 455.05 473.9 493.18 - 512.86 532.97 553.48 574.39 595.69 617.38 639.47 661.93 / - 15 17 16 1 134.35 144.02 154.84 166.87 180.08 194.52 210.18 227 244.91 263.86 283.8 304.69 - 326.49 349.17 372.71 397.07 422.18 448.03 474.63 502 530.13 559 588.59 618.89 649.9 681.62 714.11 747.4 - 781.48 816.34 852.01 888.46 925.72 963.76 1002.59 1042.2 / - 15 17 17 1 135.37 152.1 172.02 195.01 220.75 248.4 278.06 308.67 342.05 377.23 414.08 452.59 - 493.02 535.1 578.79 622.94 669.84 718.22 768.17 819.72 872.87 927.63 984 1041.94 1101.42 1162.32 1224.34 1286.12 - 1346.33 1407.51 1468.79 1533.1 1598.1 1664.44 1732.2 1802.16 / - 15 17 18 1 142.14 178.19 220.9 267.41 317.26 370.6 427.51 488.08 552.2 619.85 691.24 766.74 - 846.16 929.8 1017.15 1107.88 1202.31 1297.97 1391.73 1488.05 1588.39 1691.49 1798.27 1905.65 2019.02 2134.99 2251.86 2370.35 - 2493.69 2619.32 2747.33 2877.73 3010.49 3148.89 3286.85 3427.16 / - 15 17 19 1 170.54 237.65 313.61 402.19 500.09 607.06 722.52 844.77 979.51 1122.83 1274.22 1425.84 - 1587.4 1751.35 1929.64 2108.21 2294.89 2497.72 2697.39 2905.63 3117.43 3356.37 3581.88 3816.48 4058.71 4309.05 4566.13 4828.38 - 5095.51 5376.37 5659.54 5949.51 6239.16 6552.67 6855.04 7170.26 / - 15 17 20 1 228.28 346.59 474.87 616.07 806.23 1032.09 1278.51 1531.81 1817.57 2121.87 2439.93 2780.25 - 3134.97 3522.71 3900.48 4321.21 4765.63 5198.95 5690.21 6158.61 6646.92 7201.86 7719.85 8260.05 8815.24 9384.28 10041.33 10642.46 - 11263.22 11895.93 12558.47 13249.65 13966.56 14695.44 15439.71 16221.89 / - 15 18 1 1 305.93 305.13 304.9 304.91 305.08 305.37 305.76 306.22 306.77 307.38 308.07 308.82 - 309.63 310.51 311.45 312.46 313.53 314.65 315.84 317.1 318.41 319.78 321.21 322.71 324.26 325.87 327.55 329.28 - 331.07 332.92 334.84 336.81 338.84 340.93 343.08 345.29 / - 15 18 2 1 305.82 305 304.75 304.76 304.92 305.21 305.59 306.05 306.59 307.21 307.89 308.64 - 309.45 310.33 311.27 312.28 313.34 314.47 315.66 316.92 318.23 319.6 321.03 322.53 324.08 325.7 327.37 329.1 - 330.9 332.75 334.67 336.64 338.67 340.76 342.92 345.13 / - 15 18 3 1 305.6 304.74 304.47 304.46 304.62 304.89 305.27 305.73 306.26 306.87 307.55 308.3 - 309.11 309.99 310.93 311.94 313.01 314.13 315.33 316.58 317.89 319.27 320.7 322.19 323.75 325.37 327.04 328.78 - 330.58 332.43 334.35 336.33 338.37 340.46 342.62 344.83 / - 15 18 4 1 305.15 304.18 303.85 303.8 303.94 304.2 304.56 305.01 305.54 306.14 306.82 307.56 - 308.37 309.25 310.19 311.2 312.27 313.4 314.59 315.85 317.16 318.54 319.98 321.49 323.05 324.67 326.35 328.1 - 329.91 331.77 333.7 335.68 337.73 339.84 342.01 344.23 / - 15 18 5 1 303.91 302.61 302.08 301.91 301.96 302.16 302.48 302.9 303.41 304 304.66 305.4 - 306.22 307.1 308.04 309.06 310.14 311.28 312.49 313.77 315.11 316.51 317.97 319.5 321.09 322.74 324.45 326.23 - 328.07 329.97 331.93 333.95 336.04 338.18 340.39 342.66 / - 15 18 6 1 301.28 299.22 298.26 297.82 297.68 297.75 297.98 298.34 298.81 299.37 300.03 300.77 - 301.59 302.49 303.46 304.51 305.63 306.81 308.07 309.4 310.8 312.26 313.79 315.39 317.06 318.79 320.58 322.44 - 324.37 326.36 328.42 330.53 332.72 334.96 337.28 339.65 / - 15 18 7 1 296.61 292.89 290.76 290.08 289.8 289.78 289.96 290.3 290.77 291.36 292.05 292.85 - 293.73 294.71 295.77 296.91 298.14 299.44 300.82 302.27 303.8 305.41 307.09 308.84 310.66 312.56 314.52 316.56 - 318.66 320.83 323.08 325.38 327.76 330.21 332.68 335.26 / - 15 18 8 1 288.82 279.24 277.13 276.57 276.41 276.53 276.84 277.32 277.94 278.69 279.55 280.51 - 281.55 282.71 283.96 285.31 286.75 288.27 289.88 291.53 293.31 295.17 297.11 299.13 301.18 303.36 305.62 307.95 - 310.36 312.8 315.36 317.99 320.7 323.45 326.3 329.22 / - 15 18 9 1 275.94 257.28 256.29 255.98 256.06 256.41 256.96 257.68 258.56 259.57 260.71 261.96 - 263.34 264.82 266.4 268.1 269.89 271.79 273.78 275.87 278.05 280.33 282.7 285.16 287.71 290.35 293.07 295.89 - 298.78 301.77 304.83 307.98 311.21 314.52 317.91 321.37 / - 15 18 10 1 245.23 230.87 229.72 229.45 229.67 230.24 231.07 232.11 233.35 234.77 236.35 238.08 - 239.97 241.99 244.15 246.44 248.86 251.41 254.08 256.86 259.76 262.78 265.9 269.13 272.47 275.91 279.45 283.09 - 286.82 290.65 294.58 298.59 302.7 306.89 311.17 315.54 / - 15 18 11 1 203.46 200.08 199.13 199.27 199.98 201.12 202.57 204.27 206.2 208.38 210.76 213.33 - 216.09 219.02 222.13 225.46 228.89 232.47 236.25 240.11 244.18 248.31 252.57 257.09 261.59 266.2 271.1 275.94 - 280.88 285.93 291.45 296.71 302.06 307.5 313.03 318.65 / - 15 18 12 1 170.81 169.46 170.1 171.35 173.11 175.36 177.96 180.86 184.02 187.42 191.02 194.83 - 198.83 203.01 207.44 212.45 217.47 222.61 227.78 233.2 238.77 244.52 250.37 256.38 262.54 268.61 275.04 281.62 - 288.35 295.21 301.89 309.02 316.23 323.58 331.12 338.36 / - 15 18 13 1 148.44 150.58 153.55 157.27 161.25 165.41 169.74 174.27 179 183.93 189.08 194.44 - 200.01 205.79 211.78 217.97 224.37 230.96 237.74 244.71 251.87 259.21 266.73 274.42 282.28 290.31 298.51 306.86 - 315.38 324.05 332.87 341.85 350.97 360.25 369.67 379.22 / - 15 18 14 1 142.21 146.55 150.86 155.42 160.36 165.82 171.73 178.03 184.68 191.66 198.97 206.61 - 214.57 222.84 231.43 240.31 249.5 258.97 268.73 278.78 289.1 299.7 310.56 321.69 333.09 344.74 356.67 368.85 - 381.3 394 406.91 420.03 433.36 446.9 460.67 474.65 / - 15 18 15 1 138.12 144.78 151.03 157.81 165.3 173.53 182.47 192.09 202.35 213.24 224.7 236.7 - 249.2 262.19 275.65 289.57 303.93 318.74 333.98 349.65 365.76 382.31 399.28 416.67 434.49 452.72 471.35 490.38 - 509.81 529.65 549.88 570.52 591.56 612.99 634.82 657.05 / - 15 18 16 1 135.11 144.84 155.57 167.46 180.51 194.79 210.3 226.97 244.72 263.49 283.23 303.9 - 325.47 347.86 371.04 395 419.74 445.25 471.5 498.48 526.2 554.66 583.86 613.8 644.45 675.83 707.96 740.85 - 774.48 808.88 844.03 879.93 916.59 954.01 992.19 1031.12 / - 15 18 17 1 135.96 152.53 172.24 194.94 220.46 247.84 277.27 307.53 340.56 375.41 411.91 450.04 - 489.93 531.62 574.84 618.38 664.81 712.75 762.18 813.12 865.6 919.6 975.12 1032.16 1090.69 1150.64 1211.84 1274.18 - 1334.81 1396.4 1457.91 1522.88 1588.32 1655.49 1724.34 1793.26 / - 15 18 18 1 142.64 178.47 220.9 266.96 316.18 368.88 425.13 485.02 548.26 615.25 686 760.98 - 839.69 922.04 1008.43 1098.17 1191.24 1286.45 1381.08 1479.1 1580.05 1684.67 1791.61 1901.85 2014.63 2131.97 2250.47 2372.73 - 2495.84 2623.2 2753.13 2885.56 3020.53 3160.91 3301.29 3444.12 / - 15 18 19 1 171.02 238.79 314.85 402.59 499.72 605.48 718.51 841.25 973.11 1113.9 1265.15 1417.8 - 1575.36 1745.11 1925.93 2107.29 2295.47 2501.02 2704.79 2916.45 3132.27 3373.12 3605.38 3841.86 4088.12 4341.06 4603.37 4871.22 - 5143.53 5429.51 5717.47 6012.2 6308.56 6615.68 6937.04 7257.21 / - 15 18 20 1 229.37 349.48 480.02 623.86 800.19 1021.62 1265.76 1522.57 1804.18 2106.97 2425.14 2768.53 - 3131.61 3508.15 3922.81 4319.85 4766.67 5236.33 5693.88 6170.65 6706.02 7215.37 7745.92 8351.86 8918.85 9499.4 10086.4 10695.84 - 11414.96 12065.05 12742.18 13440.04 14158.61 14897.51 15675.75 16467.17 / - 15 19 1 1 307.19 306.57 306.41 306.47 306.67 306.97 307.37 307.84 308.39 309.01 309.7 310.45 - 311.27 312.15 313.09 314.1 315.17 316.3 317.49 318.74 320.05 321.43 322.86 324.36 325.91 327.53 329.2 330.94 - 332.74 334.59 336.51 338.49 340.52 342.62 344.78 346.99 / - 15 19 2 1 307.07 306.41 306.23 306.28 306.48 306.78 307.17 307.64 308.19 308.8 309.49 310.24 - 311.06 311.93 312.88 313.88 314.95 316.08 317.27 318.53 319.84 321.21 322.65 324.15 325.7 327.32 329 330.74 - 332.54 334.39 336.31 338.29 340.33 342.43 344.59 346.81 / - 15 19 3 1 306.76 306.01 305.79 305.81 305.98 306.26 306.64 307.11 307.65 308.26 308.94 309.69 - 310.5 311.38 312.33 313.33 314.4 315.53 316.73 317.98 319.3 320.68 322.12 323.62 325.18 326.81 328.49 330.24 - 332.04 333.91 335.83 337.82 339.87 341.98 344.14 346.37 / - 15 19 4 1 305.95 304.97 304.6 304.53 304.65 304.89 305.24 305.68 306.2 306.8 307.48 308.22 - 309.04 309.92 310.86 311.88 312.96 314.1 315.3 316.57 317.9 319.3 320.76 322.27 323.86 325.5 327.2 328.97 - 330.8 332.69 334.64 336.65 338.73 340.86 343.06 345.31 / - 15 19 5 1 304.32 302.85 302.2 301.95 301.93 302.09 302.38 302.77 303.27 303.85 304.52 305.26 - 306.08 306.97 307.93 308.96 310.06 311.23 312.47 313.77 315.14 316.57 318.07 319.63 321.26 322.95 324.71 326.53 - 328.41 330.36 332.37 334.44 336.58 338.78 341.04 343.36 / - 15 19 6 1 301.49 299.19 298.06 297.5 297.28 297.3 297.49 297.82 298.27 298.83 299.49 300.24 - 301.08 302 302.99 304.07 305.22 306.45 307.75 309.12 310.56 312.08 313.66 315.31 317.04 318.83 320.69 322.62 - 324.61 326.67 328.8 331 333.26 335.58 337.98 340.43 / - 15 19 7 1 296.78 292.33 290.21 289.53 289.26 289.24 289.45 289.81 290.31 290.92 291.65 292.47 - 293.4 294.41 295.51 296.67 297.93 299.28 300.71 302.22 303.81 305.47 307.21 309.02 310.91 312.87 314.9 316.98 - 319.16 321.41 323.73 326.13 328.59 331.12 333.73 336.4 / - 15 19 8 1 288.91 278.43 276.2 275.81 275.77 275.98 276.38 276.91 277.59 278.39 279.29 280.31 - 281.43 282.64 283.95 285.3 286.78 288.36 290.02 291.77 293.61 295.46 297.46 299.54 301.71 303.89 306.21 308.61 - 311.09 313.59 316.23 318.93 321.72 324.53 327.47 330.47 / - 15 19 9 1 275.92 257 255.97 255.65 255.73 256.08 256.64 257.38 258.27 259.3 260.45 261.73 - 263.13 264.64 266.26 267.98 269.81 271.74 273.77 275.9 278.13 280.45 282.86 285.37 287.97 290.66 293.44 296.31 - 299.26 302.3 305.43 308.64 311.93 315.3 318.76 322.29 / - 15 19 10 1 244.68 230.79 229.63 229.37 229.6 230.18 231.02 232.09 233.35 234.8 236.4 238.17 - 240.08 242.14 244.34 246.67 249.13 251.72 254.44 257.27 260.22 263.29 266.47 269.75 273.15 276.65 280.25 283.95 - 287.75 291.65 295.64 299.73 303.9 308.17 312.52 316.96 / - 15 19 11 1 203.56 200.19 199.25 199.4 200.14 201.28 202.75 204.47 206.45 208.62 211.03 213.63 - 216.42 219.39 222.53 225.9 229.37 232.99 236.85 240.76 244.81 249.07 253.38 257.9 262.46 267.29 272.08 276.98 - 282.18 287.3 292.51 297.82 303.66 309.17 314.78 320.47 / - 15 19 12 1 171.06 169.67 170.31 171.66 173.63 176.02 178.74 181.72 184.94 188.37 192.01 195.84 - 199.85 204.04 208.4 212.93 218.17 223.4 228.69 234.13 239.72 245.46 251.26 257.2 263.36 269.66 276.11 282.71 - 289.46 296.35 303.06 310.22 317.52 324.91 332.09 339.73 / - 15 19 13 1 149.14 151.63 155.16 159.13 163.19 167.35 171.65 176.13 180.8 185.68 190.76 196.07 - 201.58 207.31 213.26 219.4 225.74 232.27 238.99 245.9 253 260.28 267.74 275.37 283.18 291.16 299.31 307.63 - 316.1 324.74 333.54 342.49 351.6 360.86 370.27 379.82 / - 15 19 14 1 143.65 148 152.29 156.83 161.89 167.41 173.3 179.52 186.06 192.93 200.12 207.63 - 215.46 223.6 232.04 240.78 249.81 259.13 268.74 278.62 288.77 299.19 309.87 320.82 332.02 343.48 355.2 367.17 - 379.39 391.87 404.59 417.55 430.76 444.22 457.92 471.85 / - 15 19 15 1 139.84 146.24 152.31 159 166.39 174.5 183.3 192.78 202.92 213.64 224.91 236.69 - 248.96 261.71 274.91 288.57 302.67 317.2 332.16 347.54 363.34 379.56 396.2 413.24 430.68 448.53 466.77 485.42 - 504.46 523.9 543.73 563.95 584.56 605.57 626.96 648.75 / - 15 19 16 1 136.56 146.26 156.79 168.34 181.11 195.15 210.41 226.81 244.29 262.77 282.19 302.44 - 323.51 345.37 368 391.41 415.57 440.48 466.13 492.52 519.65 547.5 576.09 605.41 635.45 666.22 697.71 729.93 - 762.88 796.56 830.96 866.1 901.97 938.56 975.89 1013.94 / - 15 19 17 1 137.04 153.29 172.63 194.87 219.49 246.52 275.77 305.81 338.39 372.72 408.62 446 - 485.29 526.18 568.63 611.43 656.96 703.91 752.3 802.13 853.42 906.19 960.45 1016.19 1073.42 1132.1 1192.2 1253.58 - 1315.14 1377.33 1439.96 1504.51 1570.9 1638.52 1707.82 1778.05 / - 15 19 18 1 143.54 179.04 220.96 266.31 314.81 366.41 421.57 480.46 542.95 609.01 678.59 752.57 - 830.08 910.45 995.34 1083.82 1175.16 1270.27 1365.96 1464.8 1566.91 1672.43 1780.99 1891.86 2006.17 2124.64 2245.83 2368.82 - 2495.59 2623.79 2755.86 2890.64 3028.12 3170.69 3313.84 3459.68 / - 15 19 19 1 172.01 240.94 317.27 404.09 498.94 602.5 713.95 834.74 964.39 1102.78 1251.68 1401.8 - 1563.44 1735.12 1910.01 2098.7 2289.4 2497.22 2703.95 2917.53 3139.24 3366.58 3618.16 3862.38 4113.74 4371.66 4638.85 4913.52 - 5195.26 5483.14 5783.46 6084.36 6388.83 6702.53 7022.87 7358.55 / - 15 19 20 1 231.47 354.24 488 634.94 796.88 1007.08 1246.77 1500.54 1783.45 2081.65 2407.19 2744.81 - 3109.08 3492.99 3891.05 4313.39 4747.31 5216.81 5710.23 6188.76 6726.96 7244.81 7828.8 8381.42 8953.68 9540.96 10215.2 10840.76 - 11487.58 12155.11 12843.36 13546.75 14394.17 15153.05 15935.27 16736.17 / - 15 20 1 1 307.93 307.37 307.24 307.31 307.51 307.82 308.22 308.69 309.25 309.87 310.56 311.31 - 312.14 313.02 313.97 314.99 316.06 317.2 318.41 319.67 321 322.38 323.83 325.35 326.92 328.55 330.25 332 - 333.82 335.7 337.64 339.64 341.7 343.82 346 348.25 / - 15 20 2 1 307.57 306.9 306.7 306.72 306.9 307.19 307.57 308.04 308.58 309.2 309.88 310.64 - 311.46 312.35 313.31 314.32 315.41 316.55 317.76 319.03 320.37 321.76 323.22 324.74 326.33 327.97 329.68 331.45 - 333.28 335.17 337.13 339.14 341.22 343.35 345.55 347.81 / - 15 20 3 1 306.96 306.11 305.79 305.75 305.88 306.13 306.49 306.94 307.47 308.08 308.76 309.52 - 310.34 311.24 312.19 313.22 314.31 315.47 316.69 317.97 319.32 320.73 322.21 323.75 325.35 327.02 328.74 330.53 - 332.39 334.3 336.28 338.32 340.42 342.59 344.81 347.1 / - 15 20 4 1 305.94 304.78 304.29 304.13 304.18 304.38 304.7 305.12 305.63 306.23 306.91 307.66 - 308.49 309.39 310.36 311.4 312.5 313.68 314.92 316.23 317.6 319.04 320.54 322.11 323.75 325.45 327.21 329.04 - 330.93 332.88 334.9 336.98 339.13 341.34 343.61 345.95 / - 15 20 5 1 304.24 302.57 301.78 301.43 301.36 301.47 301.73 302.11 302.59 303.18 303.85 304.6 - 305.44 306.35 307.34 308.41 309.54 310.75 312.03 313.37 314.79 316.28 317.83 319.46 321.15 322.9 324.73 326.62 - 328.58 330.6 332.69 334.85 337.07 339.35 341.71 344.12 / - 15 20 6 1 301.39 298.88 297.52 296.92 296.68 296.68 296.87 297.2 297.67 298.24 298.92 299.69 - 300.56 301.51 302.54 303.65 304.85 306.12 307.46 308.89 310.39 311.96 313.6 315.31 317.1 318.96 320.9 322.9 - 324.97 327.11 329.33 331.61 333.95 336.37 338.86 341.42 / - 15 20 7 1 296.63 291.76 289.41 288.77 288.56 288.61 288.86 289.26 289.79 290.45 291.21 292.08 - 293.04 294.1 295.25 296.48 297.8 299.15 300.63 302.19 303.84 305.56 307.36 309.23 311.18 313.21 315.28 317.45 - 319.71 322.04 324.44 326.91 329.46 332.08 334.74 337.51 / - 15 20 8 1 288.7 277.36 275.33 275.1 275.18 275.48 275.96 276.58 277.32 278.18 279.15 280.22 - 281.39 282.65 284.01 285.46 287 288.62 290.34 292.13 294.01 295.98 298.03 300.16 302.37 304.66 307.03 309.47 - 312 314.61 317.29 320.05 322.87 325.78 328.78 331.85 / - 15 20 9 1 275.63 256.72 255.66 255.33 255.4 255.76 256.33 257.08 257.98 259.03 260.21 261.51 - 262.93 264.47 266.12 267.87 269.73 271.7 273.77 275.94 278.21 280.58 283.04 285.59 288.24 290.99 293.82 296.74 - 299.75 302.85 306.04 309.31 312.66 316.1 319.63 323.23 / - 15 20 10 1 243.49 230.72 229.55 229.29 229.53 230.12 230.98 232.07 233.36 234.82 236.46 238.25 - 240.2 242.29 244.53 246.9 249.41 252.04 254.8 257.68 260.68 263.8 267.04 270.38 273.83 277.39 281.06 284.82 - 288.69 292.65 296.71 300.87 305.11 309.45 313.89 318.41 / - 15 20 11 1 203.66 200.41 199.37 199.54 200.31 201.46 202.94 204.69 206.67 208.9 211.33 213.97 - 216.81 219.84 223.05 226.42 229.95 233.72 237.56 241.57 245.83 250.12 254.61 259.15 263.88 268.63 273.66 278.62 - 283.68 289.05 294.3 299.65 305.08 310.6 316.68 322.39 / - 15 20 12 1 171.63 170.02 171.25 173.33 175.76 178.45 181.34 184.43 187.69 191.14 194.75 198.54 - 202.49 206.6 210.88 215.31 220.19 225.36 230.66 235.95 241.46 247.12 252.93 258.8 264.83 271.06 277.44 283.97 - 290.64 297.46 304.09 311.16 318.38 325.34 332.8 340.35 / - 15 20 13 1 151.56 156.22 160.51 164.5 168.43 172.41 176.52 180.79 185.23 189.87 194.71 199.75 - 205.01 210.47 216.14 222.02 228.1 234.39 240.88 247.57 254.46 261.54 268.81 276.28 283.93 291.76 299.74 307.89 - 316.19 324.66 333.29 342.08 351.03 360.14 369.39 378.79 / - 15 20 14 1 147.37 151.75 156.45 161.44 166.55 171.88 177.46 183.35 189.54 196.04 202.86 209.99 - 217.44 225.19 233.25 241.6 250.25 259.19 268.41 277.92 287.7 297.74 308.05 318.62 329.45 340.53 351.87 363.46 - 375.29 387.38 399.71 412.28 425.09 438.14 451.43 464.96 / - 15 20 15 1 144.21 149.79 155.63 162.03 169.22 177.14 185.69 194.82 204.49 214.69 225.41 236.63 - 248.35 260.55 273.23 286.36 299.94 313.94 328.38 343.24 358.52 374.21 390.31 406.82 423.72 441.02 458.71 476.8 - 495.27 514.13 533.37 553 573 593.39 614.15 635.29 / - 15 20 16 1 141.09 150.22 159.7 170.48 182.6 196.01 210.63 226.35 243.1 260.8 279.39 298.83 - 319.08 340.11 361.92 384.5 407.83 431.92 456.75 482.31 508.6 535.61 563.35 591.8 620.96 650.84 681.43 712.72 - 744.72 777.42 810.82 844.91 879.71 915.2 951.38 988.25 / - 15 20 17 1 140.3 155.96 174.08 194.67 218.62 244.66 272.69 302.68 334.48 367.83 402.74 439.43 - 477.57 517.14 556.56 598.73 642.63 688.01 734.87 783.19 832.98 884.41 937.21 991.39 1047.04 1104.13 1162.68 1222.66 - 1284.07 1346.36 1410.6 1476 1541.21 1609.53 1679.25 1750.34 / - 15 20 18 1 146.79 180.44 220.87 265.07 312.27 362.94 416.93 474.61 535.49 601.03 668.56 741.06 - 815.15 894.66 977.59 1063.92 1151.72 1245.1 1341.86 1441.86 1545.19 1651.96 1761.89 1874.8 1990.92 2110.1 2232.61 2358.24 - 2486.71 2618.21 2752.72 2890.22 3030.67 3175.36 3321.87 3471.26 / - 15 20 19 1 175.71 244.16 321.58 407.14 499.79 600.33 709.26 826.61 953.32 1089.1 1234.44 1388.17 - 1548.74 1720.19 1897.63 2086.91 2280.58 2481.99 2697.73 2915.12 3139.89 3371.92 3623.53 3871.83 4127.76 4391.23 4662.19 4941.83 - 5229.72 5523.57 5823.84 6138.97 6454.13 6776.39 7105.68 7441.98 / - 15 20 20 1 235.98 363.09 501.61 652.4 816.11 992.91 1182.64 1385.18 1641.98 1932.12 2239.02 2571.03 - 2919.19 3293.53 3675.39 4093.74 4540.59 4984.5 5483.06 5972.23 6484.27 7019.67 7579.04 8177.86 8755.85 9390.74 10025.39 10639 - 11355.09 12016.24 12793.29 13503.55 14235 14989.56 15887 16690.11 / - 16 1 1 1 289.11 288.99 289.07 289.29 289.6 289.99 290.45 290.98 291.58 292.23 292.95 293.72 - 294.55 295.44 296.38 297.38 298.44 299.55 300.71 301.93 303.2 304.53 305.91 307.35 308.83 310.37 311.96 313.61 - 315.31 317.06 318.86 320.72 322.63 324.59 326.6 328.66 / - 16 1 2 1 289.04 288.91 288.99 289.21 289.52 289.91 290.37 290.9 291.49 292.14 292.86 293.63 - 294.46 295.35 296.3 297.3 298.35 299.46 300.63 301.85 303.12 304.45 305.83 307.27 308.75 310.3 311.89 313.54 - 315.24 316.99 318.79 320.65 322.56 324.52 326.53 328.6 / - 16 1 3 1 288.92 288.77 288.85 289.06 289.36 289.75 290.21 290.74 291.33 291.99 292.7 293.48 - 294.31 295.2 296.14 297.15 298.2 299.31 300.48 301.7 302.98 304.3 305.69 307.12 308.61 310.16 311.75 313.4 - 315.1 316.86 318.66 320.52 322.44 324.4 326.42 328.49 / - 16 1 4 1 288.69 288.52 288.59 288.79 289.09 289.47 289.93 290.46 291.05 291.71 292.42 293.2 - 294.03 294.92 295.86 296.87 297.92 299.04 300.21 301.43 302.71 304.04 305.42 306.86 308.36 309.9 311.5 313.15 - 314.86 316.62 318.43 320.29 322.21 324.18 326.2 328.28 / - 16 1 5 1 288.26 288.05 288.1 288.29 288.58 288.96 289.42 289.94 290.53 291.19 291.9 292.68 - 293.51 294.4 295.35 296.35 297.42 298.53 299.7 300.93 302.21 303.55 304.94 306.39 307.88 309.44 311.04 312.7 - 314.42 316.18 318 319.87 321.8 323.78 325.81 327.89 / - 16 1 6 1 287.43 287.15 287.17 287.34 287.62 288 288.45 288.97 289.56 290.21 290.93 291.71 - 292.54 293.44 294.39 295.4 296.47 297.59 298.77 300.01 301.3 302.64 304.04 305.5 307.01 308.57 310.19 311.86 - 313.59 315.37 317.21 319.1 321.04 323.03 325.08 327.19 / - 16 1 7 1 285.77 285.41 285.38 285.52 285.79 286.16 286.6 287.12 287.71 288.37 289.09 289.87 - 290.72 291.62 292.58 293.6 294.68 295.82 297.02 298.27 299.58 300.94 302.36 303.84 305.37 306.96 308.6 310.3 - 312.06 313.87 315.73 317.65 319.63 321.66 323.74 325.88 / - 16 1 8 1 282.48 281.99 281.9 282.02 282.27 282.63 283.07 283.59 284.19 284.85 285.59 286.39 - 287.25 288.17 289.16 290.21 291.32 292.48 293.71 295 296.34 297.75 299.21 300.73 302.31 303.95 305.65 307.4 - 309.21 311.08 313.01 314.99 317.03 319.13 321.28 323.49 / - 16 1 9 1 275.58 274.4 273.9 273.78 273.88 274.14 274.53 275.02 275.61 276.28 277.04 277.88 - 278.79 279.78 280.84 281.97 283.17 284.43 285.77 287.17 288.64 290.17 291.77 293.43 295.16 296.95 298.81 300.73 - 302.72 304.76 306.87 309.05 311.28 313.58 315.94 318.36 / - 16 1 10 1 261.33 254.42 253.33 252.89 252.87 253.11 253.55 254.15 254.9 255.78 256.77 257.84 - 259.04 260.35 261.75 263.24 264.83 266.46 268.21 270.05 271.97 273.97 276.02 278.18 280.41 282.72 285.08 287.54 - 290.07 292.67 295.32 298.07 300.88 303.76 306.7 309.72 / - 16 1 11 1 230.45 222.93 221.71 221.43 221.67 222.28 223.17 224.29 225.61 227.11 228.78 230.61 - 232.59 234.71 236.97 239.35 241.87 244.5 247.24 250.11 253.08 256.15 259.33 262.61 265.99 269.46 273.02 276.68 - 280.42 284.21 288.08 292 296 300.07 304.2 308.39 / - 16 1 12 1 195.33 191.85 191.26 191.67 192.67 194.06 195.81 197.84 200.13 202.66 205.41 208.43 - 211.58 214.93 218.54 222.23 226.19 230.21 234.49 238.79 243.37 247.92 252.78 257.58 262.7 267.71 273.08 278.3 - 283.8 289.22 294.93 300.53 306.36 312.28 318.15 324.35 / - 16 1 13 1 168.79 168.18 169.26 171.34 173.98 177.03 180.39 184.04 187.96 192.12 196.52 201.14 - 205.98 211.03 216.27 221.71 227.34 233.14 239.37 246.18 253.06 259.82 266.83 273.96 281.23 288.57 296.06 303.7 - 311.77 319.72 327.49 335.71 344.07 352.52 361.11 369.89 / - 16 1 14 1 156.57 159.37 162.73 166.79 171.36 176.27 181.53 187.14 193.1 199.41 206.07 213.06 - 220.38 228.02 235.97 244.22 252.72 261.46 270.46 279.72 289.22 298.96 308.93 319.14 329.58 340.24 351.12 362.22 - 374.14 386.6 399.23 412.15 424.82 437.91 451.09 464.42 / - 16 1 15 1 154.2 158.41 163.53 169.53 176.34 183.95 192.29 201.37 211.08 221.39 232.26 243.67 - 255.61 268.06 281.01 294.45 308.37 322.78 337.67 353.03 368.83 385.03 401.58 418.5 435.77 453.44 471.48 489.92 - 508.77 528.01 548.07 569.34 591.01 612.95 635.16 657.75 / - 16 1 16 1 152.12 159.82 169.11 179.84 192.13 205.84 220.88 237.14 254.56 273.01 292.44 312.83 - 334.14 356.36 379.38 403.29 428.08 453.73 480.23 507.59 535.82 564.89 594.77 625.44 656.8 688.8 721.7 755.93 - 792.32 828.98 866.52 904.57 942.77 981.85 1021.19 1060.29 / - 16 1 17 1 152.93 167.46 185.79 207.16 231.24 257.83 286.76 317.9 351.15 386.38 423.6 462.62 - 503.4 545.98 590.25 636.13 683.93 733.85 785.71 839.24 894.5 951.41 1011.23 1071.98 1133.03 1192.54 1248.72 1296.35 - 1340.83 1386.52 1431.71 1480.45 1529.43 1579.41 1629.56 1684.21 / - 16 1 18 1 161.14 191.81 231.37 276.06 325.15 378.55 436.29 498.36 565.05 635.07 709.59 788.87 - 872.7 961.06 1052.6 1146.25 1241.38 1330.68 1415.34 1507.23 1599.65 1695.78 1791.42 1891.1 1992.1 2095.43 2201.97 2305.71 - 2415.56 2527.05 2641.38 2754.47 2870.94 2989 3112.57 3233.84 / - 16 1 19 1 183.81 248.04 327.25 416.88 516.02 625.24 744.57 874.46 1015.97 1166.15 1315.15 1450.67 - 1601.04 1751.64 1907.71 2076.07 2238.28 2406.69 2579.7 2760.8 2943.66 3132.02 3324.05 3517.32 3722.77 3927.49 4137.22 4349.81 - 4563.34 4798.26 5020.94 5255.31 5494.67 5727.31 5976.88 6229.75 / - 16 1 20 1 237.48 347.02 495.85 678.89 892.73 1136.29 1376.58 1619.13 1885.86 2162.1 2454.64 2753.3 - 3081.87 3406.84 3746.61 4133.22 4500.88 4879.85 5281.67 5688.42 6109.84 6546.29 6990.96 7435.32 7924.3 8403.69 8892.45 9384.58 - 9902.86 10432.64 11001.33 11557.04 12127.64 12699.82 13307.46 13930.63 / - 16 2 1 1 290.96 290.83 290.91 291.12 291.43 291.82 292.28 292.81 293.4 294.06 294.77 295.55 - 296.38 297.27 298.22 299.22 300.28 301.4 302.57 303.79 305.07 306.4 307.79 309.23 310.72 312.27 313.87 315.52 - 317.23 318.99 320.8 322.66 324.58 326.55 328.57 330.65 / - 16 2 2 1 290.89 290.75 290.82 291.03 291.34 291.73 292.19 292.72 293.31 293.97 294.69 295.46 - 296.29 297.19 298.13 299.14 300.2 301.31 302.48 303.71 304.98 306.32 307.7 309.14 310.64 312.19 313.79 315.44 - 317.15 318.91 320.72 322.59 324.51 326.48 328.51 330.58 / - 16 2 3 1 290.77 290.61 290.67 290.88 291.18 291.57 292.03 292.56 293.15 293.81 294.52 295.3 - 296.13 297.03 297.97 298.98 300.04 301.15 302.32 303.55 304.83 306.16 307.55 309 310.49 312.04 313.64 315.3 - 317.01 318.77 320.59 322.46 324.38 326.36 328.38 330.46 / - 16 2 4 1 290.53 290.34 290.4 290.6 290.9 291.28 291.74 292.27 292.86 293.52 294.23 295.01 - 295.84 296.73 297.68 298.69 299.75 300.87 302.04 303.27 304.55 305.89 307.28 308.72 310.22 311.78 313.38 315.04 - 316.76 318.52 320.34 322.22 324.15 326.12 328.16 330.24 / - 16 2 5 1 290.08 289.85 289.89 290.08 290.37 290.75 291.21 291.73 292.32 292.98 293.69 294.47 - 295.31 296.2 297.15 298.16 299.22 300.34 301.52 302.75 304.04 305.38 306.78 308.23 309.73 311.29 312.9 314.57 - 316.29 318.07 319.9 321.78 323.71 325.7 327.74 329.84 / - 16 2 6 1 289.2 288.92 288.93 289.1 289.38 289.75 290.2 290.72 291.32 291.97 292.69 293.47 - 294.3 295.2 296.16 297.17 298.24 299.37 300.55 301.79 303.09 304.44 305.84 307.31 308.82 310.39 312.02 313.7 - 315.43 317.22 319.07 320.97 322.92 324.92 326.98 329.1 / - 16 2 7 1 287.47 287.1 287.06 287.21 287.48 287.84 288.29 288.81 289.4 290.06 290.78 291.56 - 292.41 293.32 294.28 295.31 296.39 297.53 298.73 299.99 301.3 302.67 304.1 305.58 307.12 308.71 310.37 312.07 - 313.84 315.65 317.53 319.46 321.44 323.48 325.58 327.73 / - 16 2 8 1 284.03 283.54 283.45 283.57 283.82 284.18 284.62 285.15 285.75 286.41 287.15 287.95 - 288.81 289.74 290.73 291.78 292.9 294.07 295.3 296.59 297.95 299.36 300.83 302.35 303.94 305.59 307.29 309.05 - 310.87 312.75 314.69 316.68 318.73 320.84 323.01 325.23 / - 16 2 9 1 276.73 275.32 274.81 274.63 274.73 274.99 275.37 275.87 276.46 277.14 277.91 278.76 - 279.68 280.68 281.75 282.89 284.1 285.38 286.73 288.15 289.64 291.19 292.81 294.49 296.24 298.06 299.94 301.88 - 303.89 305.96 308.09 310.29 312.55 314.88 317.26 319.71 / - 16 2 10 1 262.08 254.51 253.41 252.97 252.95 253.2 253.65 254.27 255.04 255.91 256.92 258.05 - 259.28 260.62 262.05 263.58 265.16 266.86 268.66 270.53 272.46 274.5 276.63 278.83 281.08 283.43 285.87 288.37 - 290.92 293.58 296.3 299.1 301.94 304.88 307.88 310.96 / - 16 2 11 1 230.15 222.96 221.77 221.51 221.78 222.42 223.33 224.47 225.82 227.36 229.06 230.92 - 232.93 235.09 237.38 239.81 242.36 245.03 247.83 250.73 253.75 256.87 260.1 263.43 266.86 270.38 274 277.71 - 281.5 285.39 289.37 293.4 297.49 301.65 305.86 310.14 / - 16 2 12 1 195.41 191.92 191.38 191.85 192.89 194.31 196.08 198.14 200.46 203.02 205.8 208.84 - 212.03 215.49 219.05 222.88 226.78 230.96 235.16 239.64 244.12 248.89 253.62 258.66 263.63 268.92 274.1 279.38 - 285.02 290.49 296.26 302.13 307.89 313.87 319.95 325.97 / - 16 2 13 1 168.87 168.31 169.44 171.56 174.24 177.32 180.72 184.41 188.36 192.56 197 201.66 - 206.54 211.63 216.91 222.39 228.06 233.91 239.94 246.81 253.72 260.7 267.71 274.99 282.3 289.62 297.42 305.13 - 312.99 321 329.15 337.45 345.89 354.42 363.1 371.54 / - 16 2 14 1 156.63 159.52 162.95 166.97 171.59 176.54 181.84 187.5 193.51 199.86 206.56 213.59 - 220.95 228.63 236.63 244.93 253.47 262.27 271.33 280.63 290.19 299.98 310.02 320.29 330.79 341.51 352.46 363.62 - 375 387.54 400.33 413.5 426.43 439.48 452.67 466.03 / - 16 2 15 1 154.18 158.53 163.72 169.76 176.62 184.25 192.63 201.73 211.48 221.83 232.75 244.21 - 256.19 268.68 281.68 295.17 309.14 323.6 338.53 353.94 369.8 386.08 402.7 419.69 437.04 454.77 472.9 491.41 - 510.33 529.65 549.38 570.78 592.18 614.37 636.79 659.72 / - 16 2 16 1 152 159.84 169.27 180.04 192.36 206.11 221.17 237.46 254.9 273.41 292.89 313.33 - 334.69 356.95 380.05 404 428.84 454.51 481.04 508.42 536.67 565.77 595.66 626.33 657.76 689.82 722.76 756.58 - 792.59 829.41 867.22 905.1 943.96 983.04 1022.23 1062.09 / - 16 2 17 1 152.84 167.48 185.91 207.34 231.45 258.05 286.99 318.14 351.39 386.64 423.85 462.92 - 503.72 546.3 590.57 636.43 684.16 734.02 785.9 839.5 894.74 951.62 1011.14 1072.06 1133.11 1193.16 1249.83 1298.7 - 1343.95 1389.2 1436.87 1485.55 1535.88 1585.62 1635.98 1691.36 / - 16 2 18 1 161.08 191.85 231.54 276.26 325.4 378.81 436.47 498.45 565.05 635.02 709.38 788.48 - 872.12 960.38 1051.94 1145.65 1240.78 1331.32 1418 1510.91 1604.68 1695.94 1785.34 1877.79 1971.23 2065.6 2165.97 2261.79 - 2362.51 2467.12 2569.66 2672.94 2780.62 2889.08 3002.55 3111.8 / - 16 2 19 1 183.71 247.85 326.76 416.31 515.27 624.44 744.21 873.94 1015.14 1165.24 1314.7 1450.83 - 1601.84 1753.21 1911.25 2081.87 2246.24 2416.6 2590.58 2774.27 2954.82 3149.36 3343.35 3539.03 3746.36 3953.25 4165.1 4380.18 - 4596.12 4824.96 5064.06 5295.24 5536.88 5772.5 6024.58 6279.95 / - 16 2 20 1 237.36 346.96 493.94 675.92 888.17 1129.94 1373.48 1619.71 1878.63 2164.85 2446.76 2758.73 - 3089.06 3415.76 3757.26 4145.85 4517.36 4901.49 5305.21 5717.19 6146.85 6588.54 7038.22 7487.64 7962.54 8466.55 8952.79 9457.42 - 9980.68 10515.91 11064.67 11652.67 12229.25 12807.71 13421.75 14051.61 / - 16 3 1 1 292.82 292.66 292.74 292.95 293.25 293.64 294.1 294.63 295.23 295.88 296.6 297.38 - 298.21 299.11 300.06 301.06 302.12 303.24 304.42 305.64 306.93 308.26 309.66 311.1 312.6 314.15 315.76 317.42 - 319.14 320.9 322.73 324.6 326.53 328.51 330.54 332.63 / - 16 3 2 1 292.74 292.58 292.65 292.86 293.16 293.55 294.01 294.54 295.13 295.79 296.51 297.29 - 298.12 299.01 299.96 300.97 302.03 303.15 304.33 305.56 306.84 308.18 309.57 311.02 312.52 314.07 315.68 317.34 - 319.06 320.83 322.65 324.52 326.45 328.43 330.47 332.56 / - 16 3 3 1 292.61 292.43 292.5 292.7 293 293.39 293.85 294.37 294.97 295.62 296.34 297.12 - 297.96 298.85 299.8 300.81 301.87 302.99 304.16 305.39 306.68 308.02 309.41 310.86 312.36 313.92 315.53 317.19 - 318.91 320.68 322.51 324.39 326.32 328.3 330.34 332.43 / - 16 3 4 1 292.36 292.16 292.21 292.41 292.71 293.09 293.55 294.07 294.67 295.32 296.04 296.82 - 297.65 298.55 299.5 300.51 301.57 302.69 303.87 305.1 306.39 307.73 309.13 310.58 312.08 313.64 315.26 316.93 - 318.65 320.42 322.25 324.13 326.07 328.06 330.1 332.2 / - 16 3 5 1 291.89 291.65 291.68 291.87 292.16 292.54 292.99 293.52 294.11 294.76 295.48 296.26 - 297.1 297.99 298.95 299.96 301.03 302.15 303.33 304.57 305.86 307.2 308.6 310.06 311.57 313.14 314.76 316.43 - 318.16 319.94 321.78 323.67 325.62 327.62 329.67 331.77 / - 16 3 6 1 290.97 290.67 290.68 290.85 291.13 291.5 291.95 292.47 293.06 293.72 294.44 295.22 - 296.06 296.96 297.92 298.93 300.01 301.14 302.32 303.57 304.87 306.22 307.63 309.1 310.62 312.2 313.84 315.52 - 317.27 319.06 320.92 322.82 324.78 326.8 328.87 331 / - 16 3 7 1 289.16 288.78 288.74 288.89 289.15 289.52 289.97 290.49 291.08 291.74 292.46 293.25 - 294.09 295 295.97 297 298.09 299.23 300.43 301.69 303.01 304.39 305.82 307.31 308.85 310.46 312.12 313.83 - 315.6 317.43 319.31 321.25 323.24 325.3 327.4 329.56 / - 16 3 8 1 285.57 285.08 284.99 285.11 285.36 285.72 286.16 286.69 287.29 287.96 288.7 289.5 - 290.37 291.3 292.29 293.34 294.46 295.64 296.87 298.17 299.53 300.95 302.42 303.96 305.55 307.21 308.92 310.69 - 312.52 314.41 316.35 318.36 320.42 322.54 324.72 326.96 / - 16 3 9 1 277.83 276.14 275.6 275.4 275.49 275.74 276.13 276.63 277.23 277.91 278.69 279.54 - 280.48 281.49 282.57 283.73 284.96 286.26 287.62 289.06 290.57 292.14 293.78 295.49 297.26 299.1 301 302.97 - 305 307.1 309.26 311.49 313.78 316.13 318.55 321.03 / - 16 3 10 1 262.84 254.57 253.44 253 252.98 253.24 253.7 254.34 255.13 256.02 257.06 258.21 - 259.48 260.84 262.31 263.83 265.48 267.23 269.06 270.94 272.94 275.03 277.2 279.41 281.74 284.15 286.6 289.15 - 291.79 294.49 297.24 300.09 303.01 305.98 309.04 312.17 / - 16 3 11 1 229.84 223 221.84 221.61 221.9 222.56 223.5 224.67 226.04 227.61 229.34 231.23 - 233.28 235.47 237.8 240.27 242.86 245.58 248.41 251.36 254.43 257.6 260.88 264.26 267.74 271.31 274.98 278.75 - 282.6 286.54 290.57 294.68 298.9 303.17 307.5 311.87 / - 16 3 12 1 195.37 192 191.54 192.05 193.11 194.56 196.36 198.45 200.79 203.38 206.24 209.26 - 212.48 215.97 219.56 223.43 227.36 231.58 235.82 240.36 244.88 249.69 254.47 259.55 264.56 269.9 275.13 280.71 - 286.15 291.96 297.59 303.52 309.34 315.47 321.62 327.86 / - 16 3 13 1 168.95 168.46 169.62 171.78 174.5 177.61 181.05 184.78 188.77 193.01 197.48 202.18 - 207.1 212.22 217.55 223.08 228.79 234.68 240.75 247.13 254.27 261.39 268.65 275.89 283.23 290.75 298.52 306.29 - 314.21 322.27 330.48 338.84 347.34 355.99 364.74 373.62 / - 16 3 14 1 156.69 159.7 163.18 167.17 171.81 176.81 182.16 187.86 193.91 200.31 207.04 214.12 - 221.52 229.25 237.29 245.63 254.23 263.08 272.19 281.55 291.16 301.01 311.1 321.43 331.99 342.78 353.79 365.02 - 376.46 388.45 401.33 414.41 427.84 440.83 454.54 467.98 / - 16 3 15 1 154.16 158.67 163.92 170 176.89 184.56 192.97 202.1 211.89 222.28 233.24 244.74 - 256.77 269.31 282.35 295.89 309.91 324.41 339.38 354.84 370.76 387.11 403.81 420.87 438.3 456.1 474.3 492.89 - 511.87 531.27 551.07 571.73 593.69 615.64 638.37 661.29 / - 16 3 16 1 151.9 159.87 169.4 180.24 192.6 206.38 221.46 237.78 255.25 273.8 293.34 313.82 - 335.22 357.53 380.7 404.71 429.58 455.28 481.83 509.24 537.5 566.62 596.52 627.19 658.66 690.79 723.76 757.61 - 793.25 830.15 867.73 905.77 944.48 983.85 1023.45 1063.16 / - 16 3 17 1 152.76 167.5 186.02 207.52 231.66 258.28 287.22 318.37 351.62 386.88 424.09 463.18 - 503.99 546.58 590.84 636.67 684.34 734.11 785.98 839.62 894.89 951.76 1010.5 1071.56 1133.04 1193.67 1250.95 1301.02 - 1348.17 1392.52 1443.73 1494.69 1546.02 1597.42 1650.26 1707.27 / - 16 3 18 1 161.03 191.9 231.69 276.5 325.64 379.06 436.66 498.59 565.08 634.97 709.12 788.03 - 871.49 959.57 1051.18 1144.93 1239.99 1328.24 1410.76 1496.26 1584.17 1675.76 1766.7 1859.76 1954.52 2051.57 2152.58 2249.51 - 2352.69 2456.97 2562.17 2668.51 2776.74 2883.93 2997.85 3109.86 / - 16 3 19 1 183.6 247.54 326.77 416.42 515.39 624.4 742.9 873.39 1013.91 1164.2 1314.18 1450.93 - 1602.61 1756.07 1913.45 2086 2252.83 2425.51 2600.96 2787.46 2970.92 3167.53 3363.54 3560.46 3771.13 3980.26 4194.37 4412.02 - 4630.57 4861.69 5104.4 5337.19 5581.23 5819.84 6074.71 6332.7 / - 16 3 20 1 237.24 346.9 491.71 675.82 887.21 1129.18 1370.68 1620.27 1880.14 2156.52 2450.85 2764.28 - 3077.99 3424.88 3768.22 4127.95 4532.47 4920.29 5329.84 5744.03 6182.69 6613.88 7085.12 7539.93 8020.3 8530.3 9022.05 9532.17 - 10060.85 10601.86 11157.37 11726.78 12335.4 12920.51 13541.56 14178.4 / - 16 4 1 1 294.67 294.5 294.56 294.77 295.07 295.46 295.92 296.45 297.05 297.7 298.42 299.2 - 300.04 300.93 301.89 302.9 303.96 305.08 306.26 307.49 308.78 310.12 311.52 312.97 314.48 316.04 317.65 319.32 - 321.04 322.82 324.64 326.53 328.46 330.45 332.5 334.59 / - 16 4 2 1 294.59 294.41 294.48 294.68 294.98 295.37 295.83 296.36 296.95 297.61 298.33 299.11 - 299.94 300.84 301.79 302.8 303.87 304.99 306.17 307.4 308.69 310.03 311.43 312.88 314.39 315.95 317.56 319.23 - 320.96 322.73 324.56 326.45 328.39 330.38 332.42 334.52 / - 16 4 3 1 294.45 294.26 294.31 294.51 294.81 295.2 295.66 296.19 296.78 297.44 298.16 298.93 - 299.77 300.67 301.62 302.63 303.7 304.82 306 307.23 308.52 309.87 311.26 312.72 314.23 315.79 317.41 319.08 - 320.8 322.58 324.42 326.3 328.24 330.24 332.29 334.39 / - 16 4 4 1 294.19 293.97 294.02 294.21 294.51 294.89 295.35 295.87 296.47 297.12 297.84 298.62 - 299.46 300.36 301.31 302.32 303.39 304.51 305.69 306.93 308.22 309.57 310.97 312.43 313.94 315.5 317.12 318.8 - 320.53 322.31 324.15 326.04 327.98 329.98 332.04 334.14 / - 16 4 5 1 293.69 293.44 293.47 293.65 293.94 294.32 294.77 295.3 295.89 296.55 297.27 298.04 - 298.88 299.78 300.74 301.75 302.82 303.95 305.13 306.37 307.67 309.02 310.43 311.89 313.4 314.98 316.6 318.28 - 320.02 321.81 323.66 325.56 327.51 329.52 331.58 333.7 / - 16 4 6 1 292.73 292.42 292.43 292.59 292.87 293.24 293.69 294.22 294.81 295.46 296.18 296.96 - 297.81 298.71 299.67 300.69 301.76 302.9 304.09 305.34 306.64 308 309.42 310.89 312.42 314 315.64 317.34 - 319.09 320.89 322.75 324.67 326.64 328.67 330.75 332.88 / - 16 4 7 1 290.84 290.45 290.41 290.56 290.82 291.19 291.63 292.15 292.75 293.41 294.13 294.92 - 295.77 296.68 297.65 298.68 299.77 300.92 302.12 303.39 304.71 306.09 307.53 309.02 310.58 312.18 313.85 315.57 - 317.35 319.19 321.08 323.03 325.03 327.09 329.21 331.38 / - 16 4 8 1 287.09 286.59 286.5 286.61 286.86 287.21 287.65 288.18 288.77 289.44 290.18 290.98 - 291.85 292.78 293.78 294.84 295.96 297.14 298.38 299.68 301.04 302.47 303.95 305.49 307.1 308.76 310.48 312.26 - 314.1 316 317.96 319.97 322.05 324.18 326.38 328.63 / - 16 4 9 1 278.89 276.87 276.29 276.08 276.16 276.41 276.79 277.29 277.9 278.59 279.37 280.24 - 281.19 282.21 283.31 284.48 285.73 287.05 288.43 289.89 291.42 293.01 294.67 296.41 298.2 300.07 302 304 - 306.06 308.18 310.38 312.63 314.96 317.31 319.76 322.28 / - 16 4 10 1 263.6 254.59 253.44 253 252.99 253.27 253.75 254.41 255.19 256.13 257.2 258.38 - 259.67 261.07 262.52 264.11 265.8 267.57 269.44 271.36 273.41 275.54 277.72 280.01 282.39 284.81 287.34 289.95 - 292.64 295.36 298.19 301.1 304.05 307.1 310.22 313.39 / - 16 4 11 1 229.75 223.05 221.92 221.71 222.02 222.7 223.67 224.86 226.27 227.86 229.62 231.55 - 233.63 235.86 238.23 240.73 243.36 246.12 249 252 255.11 258.33 261.66 265.09 268.63 272.26 275.98 279.8 - 283.71 287.71 291.8 295.97 300.23 304.57 309.02 313.53 / - 16 4 12 1 195.32 192.11 191.7 192.24 193.34 194.82 196.64 198.75 201.13 203.74 206.62 209.68 - 212.93 216.45 220.08 223.98 228.07 232.2 236.63 241.06 245.79 250.5 255.5 260.44 265.71 270.88 276.4 281.79 - 287.55 293.15 299.14 304.93 311.02 316.99 323.29 329.44 / - 16 4 13 1 169.05 168.61 169.81 172 174.76 177.91 181.38 185.14 189.17 193.45 197.96 202.7 - 207.65 212.82 218.19 223.76 229.51 235.45 241.57 247.86 254.76 262.15 269.46 276.71 284.24 291.87 299.63 307.45 - 315.43 323.55 331.82 340.24 348.81 357.52 366.38 375.33 / - 16 4 14 1 156.77 159.88 163.42 167.4 172.04 177.08 182.47 188.21 194.31 200.75 207.53 214.65 - 222.09 229.86 237.95 246.34 254.99 263.89 273.05 282.46 292.13 302.04 312.19 322.57 333.19 344.04 355.12 366.41 - 377.92 389.65 402.28 415.49 428.88 442.3 455.95 469.64 / - 16 4 15 1 154.12 158.82 164.12 170.24 177.17 184.87 193.31 202.46 212.29 222.72 233.73 245.27 - 257.35 269.93 283.02 296.6 310.66 325.21 340.23 355.73 371.71 388.12 404.9 422.04 439.54 457.41 475.68 494.34 - 513.4 532.87 552.75 573.05 594.67 617.2 639.67 662.91 / - 16 4 16 1 151.8 159.92 169.52 180.44 192.83 206.64 221.76 238.1 255.59 274.17 293.76 314.29 - 335.74 358.1 381.33 405.39 430.29 456.02 482.6 510.03 538.31 567.44 597.35 628.01 659.51 691.71 724.73 758.6 - 793.32 830.3 868.05 906.38 945.45 984.47 1024.21 1063.74 / - 16 4 17 1 152.69 167.54 186.13 207.7 231.87 258.5 287.45 318.6 351.84 387.11 424.31 463.41 - 504.24 546.82 591.08 636.87 684.46 734.15 785.92 839.63 894.91 951.77 1010.1 1071.33 1133.04 1193.75 1251.6 1303.3 - 1351.86 1398.23 1450.72 1503.3 1556.28 1610.29 1664.09 1722.7 / - 16 4 18 1 160.98 191.94 231.81 276.69 325.88 379.31 436.88 498.66 565.03 634.9 708.84 787.54 - 870.78 958.67 1050.28 1144.12 1239.05 1328.17 1411.65 1498.21 1586.78 1680.12 1773.35 1866.16 1962.06 2060.55 2162.46 2259.1 - 2363.44 2468.93 2575.49 2683.11 2792.61 2903.16 3018.62 3132.15 / - 16 4 19 1 183.5 247.2 326.24 415.76 514.53 623.46 742.65 872.8 1013 1163.09 1313.57 1450.96 - 1603.29 1756.85 1915.58 2079.03 2257.44 2432.79 2610.97 2799.51 2986.14 3185.45 3384.08 3584.29 3790.83 4008.59 4225.22 4445.41 - 4666.9 4900.4 5139.49 5381.43 5627.99 5869.73 6127.29 6388.32 / - 16 4 20 1 237.13 346.85 488.51 672.48 882.56 1122.68 1370.24 1615.15 1881.66 2159.29 2455.07 2770.01 - 3085.43 3434.35 3780.14 4141.32 4548.2 4938.35 5351.32 5771.41 6214.74 6653.58 7131.06 7591.75 8078.02 8574.83 9092.22 9608.21 - 10142.81 10690.3 11252.85 11829.58 12445.64 13038.15 13666.63 14311.15 / - 16 5 1 1 296.58 296.36 296.41 296.61 296.91 297.29 297.75 298.28 298.87 299.53 300.25 301.03 - 301.87 302.76 303.72 304.73 305.8 306.92 308.1 309.34 310.63 311.98 313.38 314.83 316.35 317.91 319.53 321.21 - 322.94 324.72 326.56 328.45 330.39 332.39 334.45 336.55 / - 16 5 2 1 296.49 296.27 296.32 296.52 296.81 297.2 297.65 298.18 298.77 299.43 300.15 300.93 - 301.77 302.66 303.62 304.63 305.7 306.82 308.01 309.24 310.53 311.88 313.28 314.74 316.25 317.82 319.44 321.12 - 322.85 324.63 326.47 328.37 330.31 332.31 334.37 336.48 / - 16 5 3 1 296.34 296.11 296.15 296.34 296.64 297.02 297.48 298 298.6 299.25 299.97 300.75 - 301.59 302.49 303.44 304.45 305.52 306.65 307.83 309.07 310.36 311.71 313.11 314.57 316.09 317.66 319.28 320.96 - 322.69 324.48 326.32 328.21 330.16 332.17 334.22 336.34 / - 16 5 4 1 296.07 295.82 295.85 296.03 296.32 296.7 297.16 297.68 298.27 298.93 299.65 300.43 - 301.27 302.16 303.12 304.13 305.2 306.33 307.51 308.75 310.05 311.4 312.81 314.27 315.78 317.36 318.98 320.66 - 322.4 324.19 326.04 327.94 329.89 331.9 333.96 336.08 / - 16 5 5 1 295.55 295.26 295.27 295.45 295.73 296.11 296.56 297.08 297.67 298.33 299.05 299.83 - 300.67 301.57 302.52 303.54 304.61 305.74 306.93 308.17 309.47 310.83 312.24 313.71 315.23 316.81 318.44 320.13 - 321.87 323.67 325.52 327.43 329.4 331.41 333.49 335.61 / - 16 5 6 1 294.53 294.19 294.18 294.34 294.62 294.99 295.44 295.96 296.55 297.21 297.93 298.71 - 299.55 300.45 301.42 302.44 303.51 304.65 305.85 307.1 308.4 309.77 311.19 312.67 314.2 315.79 317.44 319.14 - 320.9 322.71 324.58 326.51 328.49 330.52 332.61 334.76 / - 16 5 7 1 292.53 292.12 292.08 292.22 292.48 292.85 293.29 293.81 294.41 295.07 295.79 296.58 - 297.43 298.34 299.32 300.35 301.44 302.59 303.8 305.07 306.4 307.78 309.23 310.73 312.28 313.9 315.57 317.3 - 319.09 320.93 322.83 324.79 326.8 328.88 331 333.19 / - 16 5 8 1 288.58 288.05 287.94 288.03 288.27 288.61 289.05 289.57 290.17 290.83 291.57 292.37 - 293.24 294.18 295.18 296.24 297.36 298.55 299.8 301.1 302.48 303.91 305.4 306.95 308.56 310.24 311.97 313.76 - 315.61 317.52 319.5 321.53 323.62 325.77 327.98 330.24 / - 16 5 9 1 279.92 277.52 276.85 276.67 276.73 276.97 277.36 277.86 278.47 279.17 279.96 280.84 - 281.8 282.84 283.95 285.15 286.41 287.75 289.16 290.64 292.19 293.81 295.5 297.26 299.08 300.97 302.94 304.96 - 307.06 309.21 311.44 313.69 316.05 318.47 320.96 323.51 / - 16 5 10 1 264.38 254.58 253.43 252.99 253 253.28 253.79 254.44 255.27 256.24 257.33 258.55 - 259.87 261.3 262.79 264.42 266.15 267.97 269.83 271.83 273.92 276.09 278.29 280.62 283.04 285.5 288.08 290.75 - 293.45 296.26 299.15 302.08 305.11 308.22 311.37 314.62 / - 16 5 11 1 229.64 223.11 222 221.81 222.15 222.85 223.84 225.06 226.49 228.11 229.91 231.87 - 233.98 236.25 238.65 241.2 243.87 246.67 249.6 252.64 255.8 259.07 262.45 265.94 269.52 273.21 276.99 280.87 - 284.84 288.9 293.05 297.28 301.6 306 310.49 315.05 / - 16 5 12 1 195.31 192.23 191.86 192.44 193.57 195.07 196.92 199.06 201.46 204.1 207.01 210.09 - 213.45 216.93 220.68 224.53 228.65 232.83 237.29 241.76 246.54 251.47 256.35 261.53 266.65 272.1 277.44 283.14 - 288.69 294.63 300.38 306.55 312.49 318.53 324.89 331.35 / - 16 5 13 1 169.16 168.77 170 172.23 175.02 178.2 181.71 185.51 189.57 193.88 198.43 203.21 - 208.21 213.42 218.83 224.44 230.24 236.22 242.38 248.72 255.22 262.69 270.17 277.69 285.21 292.86 300.81 308.62 - 316.65 325.14 333.49 341.99 350.64 359.05 367.98 377.05 / - 16 5 14 1 156.87 160.06 163.65 167.65 172.26 177.35 182.78 188.57 194.7 201.18 208.01 215.18 - 222.67 230.48 238.61 247.05 255.74 264.7 273.91 283.37 293.09 303.06 313.26 323.71 334.39 345.3 356.44 367.8 - 379.38 391.18 403.19 416.49 430.06 443.75 457.41 471.11 / - 16 5 15 1 154.09 158.97 164.32 170.48 177.44 185.18 193.65 202.83 212.7 223.17 234.22 245.81 - 257.92 270.55 283.68 297.31 311.42 326.01 341.07 356.61 372.63 389.1 405.97 423.18 440.76 458.71 477.05 495.78 - 514.91 534.45 554.39 574.76 595.55 618.2 640.82 664.33 / - 16 5 16 1 151.72 159.96 169.64 180.65 193.07 206.91 222.05 238.42 255.93 274.53 294.18 314.75 - 336.24 358.64 381.93 406.05 430.98 456.74 483.34 510.78 539.08 568.21 598.13 628.8 660.27 692.57 725.65 759.55 - 794.29 830.35 868.18 906.68 946.03 985.45 1025 1064.98 / - 16 5 17 1 152.64 167.57 186.25 207.88 232.09 258.73 287.68 318.82 352.05 387.32 424.51 463.6 - 504.45 547.02 591.27 637.02 684.52 734.11 785.78 839.46 894.83 951.67 1009.99 1070.45 1132.47 1193.78 1252.49 1305.16 - 1355.54 1403.83 1457.08 1512.05 1567.59 1622.75 1678.4 1739.54 / - 16 5 18 1 160.94 191.97 231.96 276.89 326.17 379.54 437.06 498.93 564.97 634.78 708.57 787 - 870.02 957.69 1049.23 1143.13 1237.87 1327.36 1412.53 1499.06 1589.99 1683.44 1779.28 1871.48 1968.58 2069.34 2171.02 2270.51 - 2376.11 2482.9 2590.88 2699.9 2810.86 2923.01 3040.14 3152.95 / - 16 5 19 1 183.39 246.98 325.68 415.82 514.63 623.4 741.25 872.21 1012.04 1161.9 1307.94 1451.04 - 1598.37 1759.94 1917.61 2081.93 2261.34 2437.87 2618.43 2809.09 2999.81 3197.17 3403.76 3609.16 3816.48 4037.26 4256.89 4480.13 - 4704.71 4941.2 5182.91 5428.18 5677.44 5922.53 6182.88 6446.94 / - 16 5 20 1 237.01 346.81 486 669.18 877.36 1116.11 1365.16 1609.98 1883.19 2162.18 2459.43 2775.97 - 3093.16 3444.2 3792.7 4155.26 4531.82 4957.23 5372.56 5792.38 6242.93 6690.63 7157.83 7642.2 8134.94 8638.32 9162.76 9685.19 - 10226.26 10780.7 11350.67 11935.56 12533.43 13160.15 13796.72 14449.46 / - 16 6 1 1 298.71 298.36 298.35 298.52 298.8 299.17 299.62 300.14 300.73 301.38 302.1 302.88 - 303.71 304.61 305.56 306.58 307.65 308.77 309.95 311.19 312.49 313.84 315.24 316.71 318.22 319.79 321.42 323.1 - 324.84 326.63 328.47 330.37 332.33 334.33 336.4 338.51 / - 16 6 2 1 298.63 298.27 298.26 298.42 298.7 299.07 299.52 300.04 300.63 301.28 302 302.77 - 303.61 304.51 305.46 306.48 307.54 308.67 309.85 311.09 312.39 313.74 315.15 316.61 318.13 319.7 321.33 323.01 - 324.75 326.54 328.38 330.28 332.24 334.25 336.31 338.43 / - 16 6 3 1 298.47 298.1 298.09 298.24 298.52 298.89 299.34 299.86 300.44 301.1 301.81 302.59 - 303.43 304.32 305.28 306.29 307.36 308.49 309.67 310.91 312.21 313.56 314.97 316.43 317.95 319.53 321.16 322.84 - 324.58 326.37 328.22 330.13 332.08 334.1 336.16 338.28 / - 16 6 4 1 298.19 297.79 297.77 297.92 298.19 298.56 299 299.52 300.11 300.76 301.48 302.25 - 303.09 303.99 304.94 305.96 307.03 308.16 309.34 310.59 311.89 313.24 314.65 316.12 317.64 319.21 320.85 322.54 - 324.28 326.08 327.93 329.84 331.8 333.82 335.89 338.01 / - 16 6 5 1 297.65 297.22 297.18 297.32 297.58 297.95 298.39 298.9 299.49 300.14 300.86 301.64 - 302.47 303.37 304.33 305.35 306.42 307.55 308.74 309.99 311.29 312.65 314.06 315.53 317.06 318.64 320.28 321.98 - 323.73 325.53 327.39 329.31 331.28 333.31 335.39 337.52 / - 16 6 6 1 296.6 296.12 296.05 296.17 296.43 296.79 297.23 297.74 298.33 298.98 299.69 300.47 - 301.31 302.22 303.18 304.2 305.28 306.42 307.61 308.87 310.18 311.55 312.97 314.45 315.99 317.59 319.24 320.95 - 322.71 324.53 326.41 328.34 330.33 332.37 334.47 336.63 / - 16 6 7 1 294.53 293.97 293.86 293.97 294.22 294.56 295 295.51 296.1 296.76 297.48 298.26 - 299.11 300.02 301 302.03 303.12 304.28 305.49 306.76 308.09 309.48 310.93 312.43 314 315.62 317.29 319.03 - 320.83 322.68 324.59 326.55 328.58 330.66 332.79 334.99 / - 16 6 8 1 290.37 289.64 289.43 289.47 289.67 289.99 290.41 290.92 291.51 292.17 292.9 293.7 - 294.57 295.51 296.51 297.57 298.7 299.89 301.14 302.46 303.83 305.27 306.77 308.34 309.96 311.64 313.39 315.19 - 317.06 318.99 320.97 323.02 325.12 327.29 329.52 331.8 / - 16 6 9 1 281.22 278.25 277.47 277.23 277.27 277.5 277.87 278.37 278.98 279.69 280.49 281.37 - 282.35 283.4 284.53 285.74 287.03 288.39 289.82 291.32 292.9 294.54 296.26 298.05 299.91 301.83 303.82 305.88 - 308.01 310.2 312.42 314.75 317.14 319.6 322.13 324.72 / - 16 6 10 1 265.42 254.57 253.38 252.98 253 253.3 253.83 254.53 255.36 256.35 257.47 258.72 - 260.07 261.54 263.07 264.74 266.51 268.37 270.28 272.33 274.46 276.63 278.94 281.33 283.8 286.3 288.92 291.62 - 294.35 297.2 300.14 303.12 306.21 309.34 312.57 315.88 / - 16 6 11 1 229.26 223.18 222.08 221.92 222.28 223 224.01 225.26 226.72 228.37 230.19 232.19 - 234.34 236.64 239.08 241.67 244.39 247.23 250.2 253.29 256.5 259.82 263.26 266.79 270.43 274.17 278.01 281.95 - 285.98 290.1 294.31 298.6 302.99 307.45 312 316.63 / - 16 6 12 1 195.32 192.32 192.03 192.62 193.78 195.33 197.21 199.37 201.79 204.46 207.4 210.51 - 213.89 217.41 221.2 225.08 229.24 233.46 237.96 242.62 247.29 252.26 257.18 262.43 267.6 273.09 278.72 284.23 - 290.11 295.82 301.94 307.85 313.85 320.3 326.49 333.02 / - 16 6 13 1 169.27 168.94 170.2 172.45 175.28 178.5 182.04 185.87 189.97 194.32 198.91 203.73 - 208.76 214.01 219.47 225.12 230.96 236.99 243.2 249.58 256.13 263.18 270.76 278.44 286.07 293.81 301.84 309.86 - 317.87 326.42 334.83 343.39 352.11 360.97 369.99 378.72 / - 16 6 14 1 156.98 160.25 163.89 167.91 172.5 177.62 183.1 188.92 195.1 201.62 208.49 215.7 - 223.24 231.1 239.27 247.76 256.5 265.5 274.76 284.28 294.06 304.08 314.34 324.85 335.59 346.56 357.76 369.18 - 380.83 392.69 404.78 417.45 431.1 444.98 458.64 472.63 / - 16 6 15 1 154.07 159.12 164.52 170.72 177.72 185.48 193.99 203.2 213.09 223.61 234.7 246.34 - 258.5 271.17 284.35 298.01 312.17 326.8 341.9 357.48 373.54 390.06 407.01 424.3 441.95 459.97 478.38 497.19 - 516.39 535.99 556.01 576.44 597.3 618.6 641.82 665.56 / - 16 6 16 1 151.65 160 169.75 180.85 193.3 207.17 222.34 238.73 256.27 274.89 294.56 315.19 - 336.72 359.17 382.5 406.67 431.64 457.43 484.05 511.51 539.82 568.96 598.88 629.53 660.96 693.33 726.5 760.45 - 795.2 830.78 868.7 906.8 946.01 985.95 1025.47 1065.79 / - 16 6 17 1 152.59 167.61 186.36 208.05 232.32 258.97 287.91 319.04 352.25 387.51 424.69 463.75 - 504.62 547.18 591.41 637.13 684.53 734 785.56 839.12 894.55 951.45 1009.77 1069.82 1132.09 1193.51 1253.23 1307.35 - 1358.92 1409.42 1463.64 1520.96 1577.62 1635.25 1693.86 1755.74 / - 16 6 18 1 160.91 192 232.05 277.07 326.37 379.85 437.23 498.99 564.89 634.77 708.22 786.41 - 869.18 956.6 1047.98 1142.03 1236.43 1325.3 1411.45 1499.27 1592.73 1685.56 1782.38 1876.76 1976.33 2078.71 2179.64 2282.7 - 2387.32 2495.39 2604.68 2715.31 2827.67 2941.27 3059.96 3176.86 / - 16 6 19 1 183.29 246.6 325.68 415.07 513.7 622.02 740.96 868.77 1011.04 1160.63 1306.91 1452.04 - 1598.74 1761.05 1919.56 2084.82 2265.24 2442.86 2624.56 2816.79 3009.69 3211.36 3421.42 3630.27 3841.1 4058.29 4288.19 4514.98 - 4747.8 4982.9 5227.87 5466.48 5729.38 5977.87 6241.54 6508.94 / - 16 6 20 1 236.89 346.79 481.96 665.93 876.35 1115.23 1357.53 1611.43 1872.72 2165.15 2463.96 2762.55 - 3101.21 3432.97 3807.66 4169.86 4548.89 4977.03 5394.84 5817.57 6266.97 6721.57 7197.87 7689.91 8189.88 8700.42 9221.26 9762.23 - 10310.4 10872.57 11450.67 12043.88 12650.93 13262.53 13931.66 14593.22 / - 16 7 1 1 300.85 300.36 300.3 300.43 300.69 301.05 301.49 302 302.58 303.23 303.95 304.72 - 305.56 306.45 307.41 308.42 309.49 310.62 311.8 313.04 314.34 315.7 317.11 318.57 320.09 321.67 323.3 324.99 - 326.73 328.53 330.38 332.29 334.25 336.27 338.34 340.46 / - 16 7 2 1 300.76 300.27 300.2 300.33 300.59 300.94 301.38 301.9 302.48 303.13 303.84 304.62 - 305.45 306.35 307.3 308.32 309.39 310.51 311.7 312.94 314.24 315.59 317 318.47 319.99 321.57 323.2 324.89 - 326.63 328.43 330.29 332.19 334.16 336.18 338.25 340.38 / - 16 7 3 1 300.6 300.09 300.02 300.15 300.4 300.76 301.2 301.71 302.29 302.94 303.65 304.43 - 305.26 306.16 307.11 308.13 309.2 310.33 311.51 312.75 314.05 315.41 316.82 318.29 319.81 321.39 323.02 324.72 - 326.46 328.26 330.12 332.03 333.99 336.01 338.09 340.22 / - 16 7 4 1 300.31 299.78 299.69 299.81 300.06 300.42 300.85 301.36 301.94 302.59 303.3 304.08 - 304.92 305.81 306.77 307.78 308.85 309.98 311.17 312.41 313.72 315.07 316.49 317.96 319.48 321.07 322.7 324.4 - 326.15 327.95 329.81 331.73 333.7 335.72 337.8 339.94 / - 16 7 5 1 299.75 299.18 299.08 299.19 299.43 299.78 300.21 300.72 301.3 301.95 302.66 303.44 - 304.27 305.17 306.13 307.14 308.22 309.35 310.54 311.79 313.1 314.46 315.88 317.35 318.88 320.47 322.12 323.82 - 325.57 327.38 329.25 331.18 333.15 335.19 337.28 339.42 / - 16 7 6 1 298.67 298.04 297.91 298 298.24 298.58 299.01 299.52 300.09 300.74 301.46 302.23 - 303.07 303.97 304.93 305.95 307.03 308.17 309.37 310.63 311.94 313.31 314.74 316.23 317.77 319.37 321.03 322.74 - 324.51 326.34 328.22 330.16 332.16 334.21 336.32 338.49 / - 16 7 7 1 296.53 295.81 295.64 295.72 295.94 296.27 296.7 297.2 297.78 298.43 299.15 299.94 - 300.78 301.69 302.67 303.7 304.79 305.95 307.16 308.44 309.77 311.16 312.61 314.12 315.69 317.32 319 320.75 - 322.55 324.41 326.32 328.3 330.33 332.42 334.57 336.77 / - 16 7 8 1 292.16 291.18 290.86 290.84 291 291.29 291.68 292.17 292.75 293.4 294.13 294.92 - 295.79 296.73 297.73 298.8 299.93 301.13 302.39 303.71 305.1 306.55 308.06 309.63 311.27 312.97 314.73 316.55 - 318.43 320.37 322.37 324.44 326.56 328.75 330.99 333.3 / - 16 7 9 1 282.65 278.86 278.05 277.74 277.73 277.94 278.31 278.8 279.42 280.13 280.94 281.84 - 282.83 283.9 285.05 286.28 287.59 288.97 290.43 291.93 293.53 295.21 296.96 298.78 300.67 302.63 304.65 306.75 - 308.91 311.15 313.44 315.81 318.21 320.71 323.27 325.9 / - 16 7 10 1 266.65 254.48 253.34 252.95 252.99 253.31 253.86 254.58 255.47 256.49 257.61 258.89 - 260.28 261.78 263.37 265.06 266.87 268.78 270.73 272.83 275.01 277.24 279.6 282.04 284.57 287.13 289.82 292.54 - 295.38 298.29 301.24 304.3 307.43 310.59 313.86 317.22 / - 16 7 11 1 229.23 223.25 222.18 222.03 222.41 223.16 224.19 225.46 226.95 228.62 230.48 232.51 - 234.69 237.03 239.52 242.14 244.9 247.79 250.81 253.95 257.21 260.58 264.06 267.66 271.35 275.15 279.05 283.04 - 287.13 291.31 295.58 299.94 304.39 308.92 313.54 318.23 / - 16 7 12 1 195.34 192.45 192.18 192.83 194.01 195.59 197.49 199.68 202.13 204.83 207.79 210.94 - 214.34 217.89 221.71 225.63 229.83 234.21 238.62 243.33 248.03 253.05 258.21 263.31 268.75 274.09 279.77 285.33 - 291.26 297.02 303.19 309.16 315.56 321.72 328.35 334.7 / - 16 7 13 1 169.39 169.11 170.39 172.68 175.53 178.79 182.37 186.24 190.37 194.76 199.39 204.24 - 209.32 214.61 220.1 225.8 231.68 237.76 244.01 250.44 257.04 263.81 271.26 279.09 286.99 294.89 302.87 310.93 - 319.18 327.7 336.17 344.8 353.58 362.51 371.59 380.83 / - 16 7 14 1 157.1 160.44 164.12 168.18 172.76 177.89 183.41 189.28 195.49 202.06 208.97 216.22 - 223.8 231.71 239.93 248.46 257.26 266.31 275.62 285.19 295.02 305.09 315.41 325.98 336.78 347.81 359.07 370.56 - 382.27 394.21 406.36 418.72 431.7 445.7 459.91 474.2 / - 16 7 15 1 154.06 159.27 164.72 170.96 177.99 185.79 194.33 203.58 213.49 224.05 235.19 246.87 - 259.08 271.79 285.01 298.72 312.91 327.58 342.72 358.34 374.43 390.99 408 425.38 443.11 461.2 479.69 498.56 - 517.83 537.5 557.58 578.08 599 620.36 642.69 666.53 / - 16 7 16 1 151.59 160.05 169.86 181.04 193.54 207.43 222.63 239.05 256.6 275.25 294.93 315.61 - 337.19 359.66 383.03 407.26 432.27 458.09 484.73 512.21 540.52 569.66 599.57 630.21 661.6 693.93 727.2 761.24 - 796.04 831.63 868.02 907.3 946.16 986.03 1026.41 1066.44 / - 16 7 17 1 152.56 167.67 186.48 208.22 232.55 259.2 288.14 319.25 352.45 387.67 424.84 463.87 - 504.75 547.3 591.51 637.19 684.48 733.83 785.25 838.68 894.06 951.03 1009.38 1068.95 1130.93 1193.37 1253.57 1308.77 - 1360.83 1415 1471.01 1529.92 1587.7 1647.96 1708.75 1772.36 / - 16 7 18 1 160.89 192.01 232.14 277.23 326.56 380.05 437.51 499.04 564.8 634.57 707.84 785.81 - 868.28 955.44 1046.57 1140.74 1235.41 1325.11 1412.32 1501.27 1595.74 1689.75 1787.61 1883.34 1986.48 2087.72 2190.11 2296.94 - 2400.76 2510.28 2621.07 2733.32 2847.32 2962.57 3083.07 3201.73 / - 16 7 19 1 183.19 246.37 325.11 414.28 513.73 621.96 739.93 868.13 1006.78 1154.98 1305.74 1451.48 - 1598.89 1761.97 1921.39 2087.65 2269.13 2447.91 2630.78 2823.2 3017.99 3221.94 3429.24 3647.77 3862.81 4083.92 4317.79 4548.46 - 4782.89 5024.26 5273.16 5515.57 5771.78 6036.33 6302.18 6573.42 / - 16 7 20 1 236.78 346.8 478.75 662.7 871.65 1108.6 1356.97 1608.75 1874.37 2153.88 2451.68 2769.09 - 3109.64 3443.47 3820.55 4185.18 4566.82 4997.9 5418.27 5844.15 6292.5 6752.58 7234.34 7723.89 8240.86 8759.56 9288.38 9812.09 - 10393.89 10964.71 11551.71 12154.1 12770.75 13392.28 14030.74 14742.26 / - 16 8 1 1 302.98 302.36 302.24 302.34 302.58 302.92 303.35 303.86 304.44 305.08 305.79 306.57 - 307.4 308.29 309.25 310.26 311.33 312.46 313.65 314.89 316.19 317.55 318.96 320.43 321.95 323.54 325.17 326.87 - 328.61 330.42 332.28 334.19 336.16 338.19 340.27 342.4 / - 16 8 2 1 302.89 302.26 302.14 302.24 302.47 302.82 303.25 303.75 304.33 304.97 305.68 306.46 - 307.29 308.18 309.14 310.15 311.22 312.35 313.54 314.78 316.08 317.44 318.85 320.32 321.85 323.43 325.07 326.76 - 328.51 330.32 332.18 334.09 336.07 338.09 340.17 342.31 / - 16 8 3 1 302.73 302.08 301.95 302.05 302.28 302.62 303.05 303.56 304.13 304.78 305.49 306.26 - 307.09 307.99 308.94 309.95 311.03 312.16 313.34 314.59 315.89 317.25 318.66 320.13 321.66 323.25 324.89 326.58 - 328.33 330.14 332 333.92 335.89 337.92 340.01 342.15 / - 16 8 4 1 302.43 301.76 301.61 301.7 301.93 302.27 302.7 303.2 303.78 304.42 305.13 305.9 - 306.73 307.63 308.58 309.6 310.67 311.8 312.99 314.24 315.54 316.9 318.32 319.79 321.32 322.91 324.55 326.25 - 328 329.81 331.68 333.6 335.58 337.62 339.7 341.85 / - 16 8 5 1 301.85 301.14 300.98 301.06 301.28 301.62 302.04 302.54 303.11 303.75 304.46 305.23 - 306.07 306.96 307.92 308.94 310.01 311.15 312.34 313.59 314.89 316.26 317.68 319.16 320.7 322.29 323.94 325.64 - 327.41 329.22 331.1 333.03 335.02 337.06 339.16 341.31 / - 16 8 6 1 300.74 299.96 299.77 299.83 300.04 300.37 300.79 301.28 301.86 302.5 303.21 303.98 - 304.82 305.72 306.68 307.7 308.78 309.92 311.12 312.38 313.69 315.07 316.5 317.99 319.54 321.14 322.8 324.52 - 326.3 328.13 330.03 331.97 333.98 336.04 338.16 340.33 / - 16 8 7 1 298.53 297.65 297.42 297.46 297.65 297.97 298.38 298.88 299.45 300.1 300.81 301.59 - 302.44 303.35 304.32 305.35 306.45 307.6 308.82 310.09 311.43 312.83 314.28 315.79 317.37 319 320.69 322.44 - 324.25 326.11 328.04 330.02 332.06 334.16 336.32 338.54 / - 16 8 8 1 293.91 292.66 292.21 292.11 292.21 292.47 292.84 293.31 293.87 294.52 295.24 296.03 - 296.9 297.83 298.84 299.91 301.05 302.25 303.52 304.85 306.25 307.71 309.23 310.82 312.47 314.18 315.96 317.8 - 319.7 321.66 323.68 325.77 327.92 330.13 332.4 334.73 / - 16 8 9 1 284.07 279.46 278.5 278.13 278.09 278.28 278.63 279.12 279.73 280.45 281.27 282.18 - 283.19 284.27 285.45 286.7 288.03 289.44 290.93 292.47 294.11 295.82 297.6 299.45 301.36 303.36 305.42 307.56 - 309.76 312.04 314.36 316.77 319.24 321.79 324.4 327.07 / - 16 8 10 1 267.88 254.34 253.24 252.88 252.95 253.3 253.88 254.63 255.54 256.59 257.76 259.07 - 260.48 262.02 263.64 265.39 267.25 269.17 271.23 273.32 275.56 277.89 280.25 282.75 285.34 287.96 290.71 293.54 - 296.4 299.39 302.4 305.54 308.74 311.98 315.32 318.74 / - 16 8 11 1 228.79 223.33 222.27 222.14 222.54 223.31 224.37 225.67 227.18 228.88 230.77 232.83 - 235.05 237.43 239.95 242.62 245.42 248.36 251.43 254.61 257.92 261.35 264.88 268.53 272.28 276.14 280.09 284.15 - 288.3 292.54 296.88 301.3 305.81 310.41 315.09 319.86 / - 16 8 12 1 195.36 192.58 192.35 193.04 194.24 195.85 197.77 199.99 202.46 205.18 208.19 211.36 - 214.8 218.38 222.22 226.18 230.42 234.83 239.29 244.04 248.95 253.84 259.05 264.19 269.68 275.31 280.82 286.69 - 292.41 298.52 304.45 310.8 316.94 323.52 329.84 336.66 / - 16 8 13 1 169.52 169.29 170.59 172.9 175.79 179.08 182.7 186.6 190.77 195.2 199.86 204.75 - 209.87 215.2 220.74 226.47 232.41 238.52 244.83 251.3 257.95 264.76 271.74 279.64 287.72 295.68 303.81 312.02 - 320.3 328.77 337.52 346.21 355.06 364.06 373.21 382.51 / - 16 8 14 1 157.22 160.64 164.36 168.46 173.03 178.16 183.72 189.63 195.89 202.5 209.45 216.74 - 224.36 232.31 240.59 249.17 258.01 267.11 276.48 286.1 295.98 306.11 316.48 327.1 337.96 349.05 360.38 371.93 - 383.71 395.71 407.93 420.36 433.02 446.3 460.65 475.22 / - 16 8 15 1 154.05 159.43 164.93 171.21 178.27 186.1 194.67 203.95 213.89 224.48 235.66 247.39 - 259.65 272.41 285.66 299.41 313.64 328.35 343.53 359.19 375.31 391.9 408.96 426.41 444.22 462.4 480.95 499.89 - 519.23 538.97 559.12 579.68 600.66 622.08 643.94 666.81 / - 16 8 16 1 151.54 160.09 169.98 181.23 193.77 207.69 222.91 239.35 256.94 275.59 295.29 315.99 - 337.62 360.13 383.53 407.8 432.87 458.72 485.38 512.86 541.17 570.31 600.22 630.84 662.18 694.44 727.7 761.85 - 796.72 832.35 868.75 906.46 945.99 986.1 1026.46 1066.86 / - 16 8 17 1 152.52 167.73 186.59 208.39 232.76 259.44 288.37 319.46 352.63 387.82 424.97 463.96 - 504.82 547.38 591.56 637.2 684.38 733.59 784.86 838.13 893.36 950.38 1008.79 1068.4 1129.47 1192.37 1253.68 1310.54 - 1364.9 1420.19 1478.36 1538.87 1599.33 1661.82 1723.47 1788.44 / - 16 8 18 1 160.87 192.01 232.2 277.4 326.76 380.22 437.66 499.08 564.7 634.34 707.43 785.14 - 867.31 954.19 1045.05 1139.19 1234.27 1324.43 1412.61 1502.92 1598.72 1694 1792.99 1891.15 1994.45 2097.1 2201.03 2309.28 - 2414.77 2525.91 2638.27 2752.21 2867.99 2984.98 3107.35 3228.15 / - 16 8 19 1 183.1 245.95 324.52 414.29 512.63 620.51 738.7 867.47 1005.69 1153.58 1304.45 1450.85 - 1598.98 1762.76 1923.09 2090.38 2265.1 2452.9 2637.16 2830.83 3025.92 3232.44 3441.42 3661.58 3879.36 4104.54 4335.1 4578.36 - 4820.97 5063.25 5316.63 5563.65 5824.29 6093.18 6363.53 6639.16 / - 16 8 20 1 236.67 346.84 475.18 656.61 866.43 1101.36 1350.94 1605.61 1869.16 2157.07 2456.55 2775.96 - 3118.45 3454.56 3834.23 4201.35 4585.75 4986.27 5443.06 5872.24 6323.65 6783.35 7270.46 7768.93 8287.21 8813.03 9350.92 9884.1 - 10475.03 11055.5 11652.24 12264.72 12891.8 13540.06 14173.29 14895.73 / - 16 9 1 1 305.1 304.35 304.18 304.25 304.47 304.8 305.22 305.72 306.29 306.93 307.63 308.4 - 309.24 310.13 311.08 312.09 313.17 314.29 315.48 316.73 318.03 319.39 320.81 322.28 323.81 325.39 327.03 328.73 - 330.49 332.3 334.16 336.08 338.06 340.09 342.18 344.33 / - 16 9 2 1 305.01 304.25 304.07 304.14 304.36 304.69 305.11 305.6 306.17 306.82 307.52 308.29 - 309.12 310.02 310.97 311.98 313.05 314.18 315.37 316.62 317.92 319.28 320.7 322.17 323.7 325.29 326.93 328.63 - 330.38 332.19 334.06 335.98 337.96 340 342.09 344.23 / - 16 9 3 1 304.85 304.07 303.88 303.95 304.16 304.49 304.91 305.4 305.97 306.61 307.32 308.09 - 308.92 309.81 310.76 311.78 312.85 313.98 315.17 316.41 317.72 319.08 320.5 321.97 323.5 325.09 326.74 328.44 - 330.19 332.01 333.87 335.8 337.78 339.82 341.91 344.06 / - 16 9 4 1 304.54 303.73 303.53 303.59 303.8 304.12 304.54 305.03 305.6 306.24 306.95 307.71 - 308.55 309.44 310.39 311.41 312.48 313.61 314.8 316.05 317.35 318.72 320.14 321.61 323.15 324.74 326.39 328.09 - 329.85 331.67 333.54 335.47 337.46 339.5 341.59 343.75 / - 16 9 5 1 303.95 303.1 302.88 302.92 303.13 303.44 303.86 304.35 304.91 305.55 306.26 307.02 - 307.86 308.75 309.71 310.72 311.8 312.93 314.12 315.37 316.68 318.05 319.47 320.96 322.5 324.09 325.75 327.46 - 329.23 331.05 332.93 334.87 336.86 338.91 341.02 343.19 / - 16 9 6 1 302.79 301.88 301.62 301.65 301.84 302.15 302.56 303.04 303.61 304.25 304.95 305.72 - 306.56 307.45 308.41 309.43 310.51 311.65 312.85 314.11 315.43 316.81 318.24 319.74 321.29 322.9 324.56 326.29 - 328.07 329.91 331.81 333.77 335.78 337.85 339.97 342.16 / - 16 9 7 1 300.51 299.48 299.18 299.18 299.35 299.65 300.05 300.54 301.11 301.75 302.45 303.23 - 304.07 304.98 305.95 306.98 308.08 309.24 310.45 311.73 313.07 314.47 315.93 317.45 319.02 320.66 322.36 324.11 - 325.93 327.8 329.74 331.73 333.78 335.89 338.06 340.28 / - 16 9 8 1 295.61 294.06 293.46 293.27 293.31 293.53 293.87 294.32 294.86 295.5 296.21 297 - 297.87 298.8 299.81 300.89 302.03 303.25 304.52 305.87 307.28 308.75 310.29 311.9 313.57 315.3 317.09 318.95 - 320.88 322.86 324.91 327.02 329.19 331.42 333.72 336.08 / - 16 9 9 1 285.48 279.91 278.82 278.4 278.33 278.5 278.85 279.34 279.95 280.68 281.51 282.44 - 283.46 284.57 285.76 287.04 288.4 289.84 291.32 292.91 294.58 296.33 298.14 300.04 302 304.04 306.12 308.3 - 310.55 312.87 315.26 317.7 320.22 322.82 325.48 328.2 / - 16 9 10 1 269.09 254.09 253.05 252.75 252.87 253.27 253.88 254.67 255.61 256.69 257.91 259.25 - 260.7 262.25 263.94 265.72 267.62 269.59 271.67 273.84 276.13 278.49 280.93 283.49 286.11 288.84 291.6 294.5 - 297.43 300.48 303.62 306.78 310.06 313.37 316.8 320.29 / - 16 9 11 1 228.67 223.41 222.37 222.26 222.68 223.47 224.55 225.87 227.41 229.15 231.07 233.16 - 235.42 237.83 240.39 243.1 245.95 248.93 252.05 255.28 258.64 262.12 265.71 269.41 273.22 276.96 280.96 285.07 - 289.27 293.56 297.95 302.43 307 311.65 316.39 321.21 / - 16 9 12 1 195.39 192.68 192.53 193.24 194.47 196.1 198.05 200.29 202.79 205.54 208.57 211.77 - 215.25 218.87 222.75 226.83 231 235.46 240.09 244.75 249.7 254.63 259.89 265.29 270.61 276.29 281.85 287.79 - 293.84 299.73 306.03 312.13 318.66 324.96 331.73 338.22 / - 16 9 13 1 169.66 169.47 170.79 173.13 176.05 179.37 183.02 186.96 191.17 195.63 200.34 205.27 - 210.43 215.8 221.38 227.16 233.13 239.29 245.64 252.16 258.86 265.72 272.75 279.93 288.1 296.43 304.78 313 - 321.52 330.13 338.63 347.61 356.52 365.59 374.82 384.19 / - 16 9 14 1 157.35 160.83 164.61 168.74 173.31 178.44 184.03 189.98 196.29 202.94 209.93 217.26 - 224.92 232.92 241.23 249.86 258.76 267.91 277.33 287 296.93 307.11 317.54 328.21 339.13 350.28 361.67 373.28 - 385.12 397.19 409.47 421.98 434.71 447.65 461.24 475.95 / - 16 9 15 1 154.05 159.59 165.13 171.45 178.55 186.41 195.01 204.32 214.29 224.91 236.12 247.9 - 260.21 273.01 286.31 300.09 314.36 329.1 344.32 360 376.16 392.77 409.86 427.38 445.28 463.53 482.16 501.17 - 520.58 540.38 560.59 581.21 602.25 623.72 645.64 668.01 / - 16 9 16 1 151.48 160.13 170.09 181.41 194 207.94 223.19 239.65 257.26 275.94 295.64 316.35 - 338.02 360.57 383.99 408.29 433.41 459.29 485.98 513.47 541.78 570.91 600.81 631.41 662.69 694.88 728.05 762.21 - 797.2 832.89 869.32 906.5 945.56 985.86 1026.6 1067.33 / - 16 9 17 1 152.49 167.79 186.71 208.56 232.96 259.68 288.6 319.67 352.8 387.95 425.06 464.02 - 504.83 547.39 591.56 637.15 684.21 733.28 784.39 837.49 892.53 949.46 1007.95 1067.63 1128.23 1190.95 1253.2 1311.76 - 1367.24 1425.3 1485.03 1547.58 1609.59 1673.24 1736.17 1802.25 / - 16 9 18 1 160.85 192.04 232.26 277.54 326.93 380.37 437.8 499.1 564.57 634.08 706.99 784.42 - 866.29 952.46 1043.39 1137.34 1232.76 1323.5 1412.17 1503.02 1598.38 1696.51 1797.38 1899.48 2002.52 2106.9 2212.47 2322.3 - 2429.53 2542.4 2656.46 2772.18 2889.8 3008.74 3133.12 3256.55 / - 16 9 19 1 183.01 245.53 323.93 413.45 512.68 620.41 737.12 865.26 1004.56 1152.1 1303.07 1450.12 - 1598.98 1755.08 1924.84 2093.12 2268.9 2457.96 2646.74 2838.56 3034.09 3241.92 3453.96 3675.84 3895.43 4122.6 4355.54 4602.6 - 4850.23 5097.45 5355.84 5607.88 5873.75 6144.92 6422.88 6703.81 / - 16 9 20 1 236.57 346.93 469.9 653.57 861.3 1094.12 1343.12 1601.01 1870.94 2160.43 2461.74 2783.25 - 3105.2 3466.35 3817.93 4218.48 4605.85 5009.38 5469.46 5902.11 6356.79 6816.28 7304.59 7806.74 8314.72 8865.65 9408.33 9949.46 - 10522.81 11141.8 11749.65 12373.34 13011.9 13671.49 14317.44 15008.52 / - 16 10 1 1 307.2 306.33 306.11 306.15 306.35 306.66 307.07 307.57 308.13 308.77 309.47 310.24 - 311.07 311.96 312.91 313.92 314.99 316.12 317.31 318.56 319.86 321.22 322.64 324.12 325.65 327.24 328.89 330.59 - 332.35 334.17 336.04 337.97 339.95 341.99 344.09 346.24 / - 16 10 2 1 307.11 306.23 306 306.04 306.24 306.55 306.96 307.45 308.02 308.65 309.35 310.12 - 310.95 311.84 312.79 313.8 314.88 316.01 317.19 318.44 319.75 321.11 322.53 324 325.54 327.13 328.78 330.48 - 332.24 334.06 335.93 337.86 339.85 341.89 343.98 346.14 / - 16 10 3 1 306.94 306.05 305.8 305.84 306.03 306.35 306.75 307.24 307.81 308.44 309.14 309.91 - 310.74 311.63 312.58 313.59 314.66 315.8 316.98 318.23 319.54 320.9 322.32 323.8 325.33 326.93 328.57 330.28 - 332.04 333.86 335.74 337.67 339.66 341.7 343.8 345.96 / - 16 10 4 1 306.62 305.7 305.45 305.47 305.66 305.97 306.37 306.86 307.42 308.06 308.76 309.52 - 310.35 311.24 312.2 313.21 314.28 315.41 316.6 317.85 319.16 320.52 321.95 323.43 324.96 326.56 328.21 329.92 - 331.69 333.51 335.39 337.32 339.32 341.37 343.47 345.63 / - 16 10 5 1 306.02 305.04 304.77 304.78 304.96 305.27 305.66 306.15 306.71 307.34 308.04 308.81 - 309.63 310.53 311.48 312.49 313.57 314.7 315.9 317.15 318.46 319.83 321.26 322.74 324.28 325.89 327.54 329.26 - 331.03 332.86 334.75 336.69 338.7 340.76 342.87 345.04 / - 16 10 6 1 304.83 303.78 303.47 303.46 303.62 303.92 304.31 304.79 305.35 305.98 306.68 307.45 - 308.28 309.17 310.13 311.15 312.23 313.37 314.57 315.83 317.15 318.53 319.97 321.47 323.02 324.64 326.31 328.04 - 329.83 331.67 333.58 335.54 337.56 339.64 341.77 343.97 / - 16 10 7 1 302.48 301.3 300.93 300.89 301.04 301.32 301.7 302.18 302.74 303.37 304.07 304.84 - 305.68 306.59 307.56 308.59 309.68 310.84 312.06 313.34 314.68 316.08 317.55 319.07 320.65 322.29 324 325.76 - 327.58 329.46 331.4 333.4 335.46 337.58 339.76 342 / - 16 10 8 1 297.26 295.38 294.6 294.31 294.29 294.46 294.76 295.19 295.72 296.34 297.05 297.84 - 298.7 299.64 300.65 301.76 302.92 304.14 305.43 306.79 308.22 309.71 311.27 312.89 314.58 316.33 318.15 320.03 - 321.98 323.99 326.06 328.2 330.4 332.66 334.98 337.37 / - 16 10 9 1 286.88 280.2 279.06 278.58 278.45 278.61 278.95 279.44 280.06 280.8 281.65 282.57 - 283.61 284.73 285.95 287.26 288.65 290.12 291.67 293.3 295 296.75 298.61 300.54 302.55 304.63 306.79 309.02 - 311.28 313.65 316.09 318.6 321.17 323.82 326.51 329.3 / - 16 10 10 1 269.9 253.97 252.95 252.66 252.79 253.2 253.83 254.64 255.62 256.73 257.99 259.37 - 260.87 262.49 264.22 266.06 267.98 270 272.13 274.36 276.67 279.11 281.61 284.21 286.89 289.66 292.52 295.46 - 298.5 301.6 304.78 308.06 311.37 314.81 318.27 321.85 / - 16 10 11 1 228.41 223.49 222.47 222.38 222.82 223.63 224.73 226.08 227.64 229.41 231.36 233.49 - 235.78 238.23 240.77 243.51 246.4 249.41 252.57 255.84 259.24 262.76 266.4 270.14 274 277.96 282.03 286.19 - 290.46 294.82 299.27 303.81 308.45 313.17 317.98 322.87 / - 16 10 12 1 195.47 192.81 192.71 193.45 194.71 196.36 198.33 200.6 203.12 205.9 208.96 212.19 - 215.7 219.35 223.28 227.31 231.61 236.09 240.77 245.46 250.45 255.61 260.73 266.18 271.78 277.28 283.15 288.88 - 295.01 300.96 307.3 313.46 320.05 326.41 333.23 339.79 / - 16 10 13 1 169.8 169.65 170.99 173.36 176.32 179.68 183.38 187.36 191.6 196.1 200.84 205.81 - 211 216.41 222.03 227.85 233.86 240.07 246.46 253.03 259.77 266.68 273.76 280.99 288.39 297.03 305.4 314.01 - 322.45 331.12 339.84 348.76 357.98 367.12 376.41 385.86 / - 16 10 14 1 157.48 161.03 164.85 169.03 173.62 178.75 184.37 190.36 196.7 203.39 210.42 217.79 - 225.49 233.52 241.87 250.53 259.49 268.7 278.16 287.89 297.87 308.1 318.58 329.31 340.28 351.49 362.93 374.61 - 386.51 398.64 410.99 423.57 436.36 449.37 462.6 476.51 / - 16 10 15 1 154.04 159.73 165.34 171.7 178.84 186.73 195.36 204.7 214.7 225.34 236.59 248.39 - 260.74 273.6 286.93 300.75 315.05 329.82 345.07 360.78 376.96 393.6 410.7 428.26 446.24 464.58 483.28 502.37 - 521.84 541.71 561.98 582.66 603.76 625.28 647.24 669.66 / - 16 10 16 1 151.45 160.18 170.21 181.59 194.24 208.2 223.46 239.94 257.56 276.26 295.98 316.69 - 338.36 360.96 384.4 408.71 433.88 459.8 486.5 514 542.31 571.43 601.31 631.89 663.13 695.22 728.3 762.35 - 797.36 833.17 869.66 906.86 944.78 985.24 1025.6 1066.91 / - 16 10 17 1 152.46 167.86 186.83 208.73 233.17 259.91 288.81 319.85 352.95 388.04 425.1 464.03 - 504.77 547.32 591.47 637.03 683.98 732.89 783.83 836.73 891.57 948.28 1006.78 1066.57 1127.27 1189.07 1252.2 1311.95 - 1371.21 1429.59 1491.26 1554.59 1618.48 1683.26 1747.9 1815.42 / - 16 10 18 1 160.83 192.02 232.31 277.66 327.08 380.5 437.9 499.11 564.42 633.76 706.5 783.67 - 865.2 951.02 1041.62 1135.32 1230.99 1322.22 1411.49 1503.39 1598.82 1697.57 1799.1 1902.29 2006.96 2113.5 2221.68 2334.11 - 2443.73 2558.92 2675.29 2793.2 2912.95 3037.53 3160.61 3287.16 / - 16 10 19 1 182.93 245.47 323.35 412.68 511.53 618.94 736.72 864.54 1003.02 1150.53 1301.59 1443.32 - 1598.96 1755.89 1926.6 2095.92 2272.88 2463.25 2654.86 2846.63 3046.38 3251.8 3466.99 3684.24 3912.18 4143.35 4376.46 4616.92 - 4878.03 5125.71 5388.59 5646.18 5918.02 6194.73 6464.48 6764.91 / - 16 10 20 1 236.49 347.07 468.13 648.63 853.11 1086.92 1342.45 1596.4 1868.26 2151.98 2453.9 2775.57 - 3115.22 3478.87 3833.32 4236.9 4627.28 5034.05 5451.46 5934.02 6392.23 6855.76 7343.53 7856.47 8366.73 8899.9 9469.01 10015.37 - 10593.52 11189.83 11836.06 12470.36 13121.45 13794.93 14456.61 15161.51 / - 16 11 1 1 309.27 308.3 308.03 308.04 308.22 308.53 308.93 309.41 309.97 310.6 311.3 312.06 - 312.89 313.78 314.73 315.74 316.81 317.94 319.13 320.38 321.68 323.05 324.47 325.95 327.49 329.08 330.73 332.44 - 334.2 336.02 337.9 339.84 341.83 343.87 345.98 348.14 / - 16 11 2 1 309.17 308.19 307.92 307.93 308.11 308.41 308.81 309.29 309.85 310.48 311.18 311.94 - 312.77 313.66 314.61 315.62 316.69 317.82 319.01 320.26 321.56 322.93 324.35 325.83 327.37 328.96 330.61 332.32 - 334.09 335.91 337.79 339.72 341.72 343.76 345.87 348.03 / - 16 11 3 1 309 308 307.71 307.72 307.9 308.2 308.59 309.08 309.63 310.26 310.96 311.72 - 312.55 313.44 314.39 315.4 316.47 317.6 318.79 320.04 321.35 322.71 324.13 325.62 327.15 328.75 330.4 332.11 - 333.88 335.7 337.58 339.52 341.52 343.57 345.68 347.84 / - 16 11 4 1 308.67 307.65 307.34 307.34 307.51 307.81 308.2 308.68 309.24 309.86 310.56 311.32 - 312.15 313.04 313.99 315 316.07 317.2 318.39 319.64 320.95 322.32 323.74 325.23 326.77 328.37 330.02 331.74 - 333.51 335.33 337.22 339.16 341.16 343.22 345.33 347.5 / - 16 11 5 1 308.05 306.97 306.64 306.63 306.79 307.08 307.46 307.94 308.49 309.12 309.81 310.57 - 311.4 312.29 313.24 314.26 315.33 316.46 317.66 318.91 320.22 321.59 323.02 324.51 326.06 327.66 329.33 331.05 - 332.82 334.66 336.55 338.5 340.51 342.58 344.7 346.88 / - 16 11 6 1 306.83 305.66 305.29 305.25 305.39 305.67 306.05 306.52 307.07 307.7 308.39 309.16 - 309.98 310.88 311.83 312.85 313.93 315.07 316.27 317.53 318.86 320.24 321.68 323.18 324.74 326.35 328.03 329.77 - 331.56 333.41 335.32 337.29 339.32 341.41 343.55 345.75 / - 16 11 7 1 304.4 303.05 302.6 302.51 302.62 302.87 303.24 303.7 304.25 304.87 305.57 306.34 - 307.17 308.07 309.04 310.07 311.17 312.33 313.55 314.83 316.18 317.58 319.05 320.58 322.17 323.82 325.53 327.3 - 329.13 331.02 332.98 334.99 337.06 339.19 341.38 343.63 / - 16 11 8 1 298.82 296.59 295.57 295.15 295.08 295.21 295.5 295.92 296.44 297.06 297.76 298.55 - 299.42 300.37 301.39 302.49 303.66 304.9 306.2 307.58 309.02 310.54 312.12 313.76 315.47 317.25 319.1 321 - 322.98 325.02 327.12 329.28 331.52 333.81 336.17 338.59 / - 16 11 9 1 288.26 280.37 279.14 278.61 278.47 278.6 278.93 279.42 280.05 280.8 281.65 282.62 - 283.68 284.84 286.08 287.42 288.84 290.31 291.89 293.56 295.31 297.13 299.03 301.01 303.03 305.16 307.37 309.64 - 311.99 314.39 316.88 319.44 322.07 324.78 327.55 330.37 / - 16 11 10 1 270.49 253.89 252.85 252.56 252.69 253.11 253.76 254.59 255.58 256.72 257.99 259.4 - 260.93 262.57 264.33 266.21 268.19 270.27 272.46 274.76 277.15 279.64 282.22 284.89 287.65 290.49 293.42 296.42 - 299.51 302.69 305.96 309.29 312.72 316.21 319.78 323.42 / - 16 11 11 1 227.84 223.58 222.57 222.49 222.95 223.79 224.91 226.28 227.88 229.67 231.61 233.77 - 236.09 238.58 241.21 243.92 246.84 249.9 253.09 256.41 259.85 263.41 267.09 270.89 274.79 278.8 282.92 287.13 - 291.45 295.86 300.37 304.97 309.66 314.44 319.31 324.27 / - 16 11 12 1 195.53 192.95 192.89 193.66 194.94 196.62 198.59 200.9 203.45 206.26 209.34 212.6 - 216.14 219.83 223.79 227.87 232.22 236.74 241.44 246.17 251.21 256.41 261.58 267.07 272.72 278.27 284.18 290.25 - 296.15 302.47 308.59 315.13 321.45 328.23 334.76 341.77 / - 16 11 13 1 169.94 169.84 171.2 173.64 176.65 180.05 183.78 187.79 192.07 196.6 201.37 206.37 - 211.59 217.04 222.69 228.55 234.6 240.85 247.28 253.89 260.68 267.64 274.76 282.05 289.49 297.31 306.02 314.64 - 323.32 332.17 341.07 350.02 359.17 368.63 378 387.52 / - 16 11 14 1 157.63 161.27 165.15 169.38 174 179.12 184.75 190.78 197.15 203.87 210.93 218.33 - 226.06 234.13 242.51 251.21 260.21 269.47 278.99 288.76 298.79 309.07 319.6 330.38 341.4 352.67 364.17 375.9 - 387.87 400.06 412.47 425.11 437.97 451.05 464.35 477.87 / - 16 11 15 1 154.08 159.88 165.6 172 179.17 187.08 195.73 205.08 215.12 225.77 237.04 248.88 - 261.25 274.14 287.53 301.38 315.71 330.51 345.78 361.51 377.71 394.36 411.48 429.05 447.08 465.5 484.29 503.45 - 522.99 542.92 563.25 583.99 605.14 626.71 648.72 671.18 / - 16 11 16 1 151.47 160.27 170.36 181.79 194.49 208.47 223.74 240.22 257.84 276.55 296.28 316.99 - 338.66 361.28 384.75 409.07 434.24 460.22 486.95 514.45 542.75 571.85 601.72 632.27 663.46 695.46 728.42 762.36 - 797.24 833.07 869.67 906.95 944.89 983.51 1024.73 1065.72 / - 16 11 17 1 152.46 167.94 186.95 208.9 233.35 260.09 288.99 319.99 353.04 388.08 425.07 463.95 - 504.64 547.14 591.29 636.81 683.65 732.39 783.15 835.84 890.46 946.93 1005.22 1065.1 1125.98 1187.33 1250.59 1309.9 - 1365.79 1420.26 1479.44 1539.03 1598.8 1659.42 1719.39 1785.16 / - 16 11 18 1 160.82 192.05 232.36 277.74 327.2 380.6 437.94 499.07 564.21 633.37 705.97 782.85 - 864.04 949.49 1039.71 1133.1 1228.8 1320.64 1410.6 1504.43 1599.2 1698.57 1800.84 1904.8 2010.33 2117.8 2226.82 2340.79 - 2452.31 2569.98 2689.34 2810.49 2933.37 3061.05 3187.2 3320.19 / - 16 11 19 1 182.86 245.44 322.99 412.71 511.58 618.93 735.1 862.21 998.45 1148.88 1296.53 1443.84 - 1599 1756.79 1928.47 2098.94 2277.05 2459.54 2661.82 2855.24 3057.6 3263.83 3480.06 3699.91 3929.97 4164.13 4398.75 4641.22 - 4904.46 5154.7 5420.03 5680.51 5955.75 6237.04 6512.48 6819.47 / - 16 11 20 1 236.43 347.3 468.4 643.11 847.89 1079.8 1336.31 1588.26 1861.73 2155.94 2459.82 2783.75 - 3126.18 3492.43 3849.98 4224.61 4650.25 5060.58 5481.66 5968.32 6430.65 6898.27 7390.01 7902.51 8420.06 8960.36 9534.69 10086.24 - 10669.19 11270.59 11890.79 12562.26 13219.57 13898.9 14568.68 15283.66 / - 16 12 1 1 311.28 310.24 309.93 309.92 310.08 310.38 310.77 311.24 311.8 312.42 313.12 313.88 - 314.7 315.59 316.54 317.55 318.62 319.75 320.94 322.19 323.5 324.86 326.29 327.77 329.31 330.9 332.56 334.27 - 336.04 337.87 339.75 341.69 343.69 345.74 347.85 350.02 / - 16 12 2 1 311.18 310.13 309.81 309.8 309.97 310.26 310.65 311.12 311.67 312.3 312.99 313.75 - 314.58 315.46 316.41 317.42 318.49 319.63 320.81 322.06 323.37 324.74 326.16 327.64 329.18 330.78 332.44 334.15 - 335.92 337.75 339.63 341.57 343.57 345.63 347.74 349.91 / - 16 12 3 1 311.01 309.93 309.61 309.59 309.75 310.04 310.42 310.9 311.45 312.07 312.77 313.53 - 314.35 315.24 316.19 317.2 318.27 319.4 320.59 321.84 323.14 324.51 325.94 327.42 328.96 330.56 332.22 333.93 - 335.7 337.53 339.42 341.36 343.36 345.42 347.54 349.71 / - 16 12 4 1 310.68 309.57 309.22 309.2 309.35 309.63 310.02 310.49 311.04 311.66 312.35 313.11 - 313.93 314.82 315.77 316.78 317.85 318.98 320.17 321.42 322.73 324.1 325.53 327.01 328.56 330.16 331.82 333.54 - 335.31 337.15 339.04 340.98 342.99 345.05 347.17 349.35 / - 16 12 5 1 310.04 308.87 308.5 308.45 308.6 308.87 309.25 309.71 310.26 310.88 311.57 312.33 - 313.15 314.04 314.99 316 317.07 318.21 319.4 320.66 321.97 323.34 324.77 326.26 327.81 329.42 331.09 332.81 - 334.6 336.44 338.34 340.29 342.31 344.38 346.51 348.7 / - 16 12 6 1 308.78 307.51 307.09 307.01 307.14 307.4 307.77 308.23 308.78 309.39 310.08 310.84 - 311.67 312.56 313.51 314.53 315.61 316.75 317.95 319.21 320.54 321.92 323.36 324.86 326.43 328.05 329.73 331.47 - 333.27 335.13 337.05 339.02 341.06 343.15 345.31 347.52 / - 16 12 7 1 306.21 304.68 304.13 303.97 304.04 304.27 304.61 305.06 305.59 306.2 306.89 307.65 - 308.49 309.39 310.35 311.39 312.48 313.65 314.87 316.16 317.51 318.92 320.4 321.94 323.53 325.19 326.92 328.7 - 330.54 332.45 334.41 336.44 338.53 340.68 342.88 345.15 / - 16 12 8 1 300.3 297.58 296.25 295.8 295.69 295.79 296.06 296.46 296.97 297.58 298.29 299.09 - 299.96 300.92 301.96 303.06 304.25 305.5 306.83 308.23 309.7 311.23 312.84 314.51 316.25 318.06 319.93 321.88 - 323.88 325.95 328.09 330.29 332.56 334.89 337.29 339.75 / - 16 12 9 1 289.62 280.41 279.11 278.55 278.4 278.53 278.86 279.36 280 280.76 281.65 282.63 - 283.72 284.91 286.19 287.52 288.97 290.52 292.14 293.85 295.64 297.5 299.41 301.43 303.53 305.7 307.96 310.25 - 312.65 315.13 317.68 320.3 322.96 325.72 328.56 331.46 / - 16 12 10 1 270.78 253.81 252.76 252.46 252.6 253.03 253.69 254.53 255.54 256.7 258 259.43 - 260.99 262.66 264.46 266.36 268.38 270.5 272.73 275.06 277.5 280.03 282.66 285.39 288.21 291.12 294.12 297.22 - 300.4 303.68 307.05 310.48 313.99 317.57 321.23 324.96 / - 16 12 11 1 227.44 223.67 222.67 222.61 223.09 223.94 225.09 226.49 228.08 229.9 231.87 234.05 - 236.4 238.91 241.57 244.38 247.34 250.45 253.68 257.05 260.54 264.15 267.88 271.73 275.69 279.76 283.93 288.21 - 292.58 297.06 301.63 306.29 311.08 315.93 320.87 325.93 / - 16 12 12 1 195.59 193.05 193.03 193.86 195.17 196.85 198.87 201.17 203.78 206.61 209.72 213.01 - 216.59 220.31 224.31 228.42 232.81 237.39 242.13 246.91 251.97 257.22 262.62 267.97 273.66 279.5 285.23 291.34 - 297.3 303.67 309.85 316.47 323.2 329.7 336.67 343.36 / - 16 12 13 1 170.09 170.03 171.46 173.94 176.99 180.44 184.2 188.25 192.56 197.12 201.92 206.95 - 212.21 217.68 223.37 229.26 235.35 241.64 248.11 254.76 261.59 268.59 275.76 283.1 290.59 298.24 306.04 315 - 324.13 333.05 342.15 351.29 360.47 369.86 379.16 388.74 / - 16 12 14 1 157.84 161.59 165.53 169.78 174.42 179.54 185.18 191.23 197.63 204.37 211.46 218.88 - 226.65 234.73 243.14 251.87 260.91 270.22 279.79 289.61 299.68 310.01 320.6 331.42 342.5 353.81 365.36 377.15 - 389.17 401.42 413.9 426.6 439.53 452.67 466.04 479.63 / - 16 12 15 1 154.18 160.13 165.93 172.35 179.53 187.46 196.12 205.48 215.53 226.2 237.49 249.34 - 261.74 274.65 288.07 301.96 316.32 331.15 346.43 362.18 378.39 395.05 412.17 429.75 447.78 466.26 485.13 504.37 - 523.98 543.98 564.38 585.17 606.37 627.99 650.04 672.52 / - 16 12 16 1 151.55 160.44 170.6 182.04 194.75 208.74 224 240.48 258.1 276.8 296.54 317.26 - 338.92 361.52 385.01 409.33 434.5 460.5 487.26 514.78 543.07 572.14 601.99 632.52 663.66 695.58 728.44 762.26 - 797 832.67 869.26 906.64 944.68 983.34 1022.63 1064.58 / - 16 12 17 1 152.5 168.07 187.1 209.05 233.51 260.24 289.11 320.08 353.08 388.05 424.96 463.78 - 504.4 546.82 590.95 636.47 683.23 731.83 782.39 834.87 889.24 945.46 1003.47 1063.18 1124.24 1185.89 1248.57 1308.92 - 1365.98 1421.34 1482.08 1542.05 1603.15 1664.77 1725.71 1792.56 / - 16 12 18 1 160.75 192.01 232.37 277.77 327.3 380.63 437.91 498.99 563.94 632.91 705.27 782.02 - 862.86 947.89 1037.69 1130.73 1226.42 1318.63 1409.06 1503.49 1598.91 1697.34 1801.99 1906.75 2013.19 2121.68 2231.69 2346.82 - 2459.26 2578.14 2698.72 2821.24 2946.18 3076.3 3205.53 3342.32 / - 16 12 19 1 182.8 245.44 322.64 411.96 510.41 617.45 734.75 861.41 997.23 1143.13 1295 1443.05 - 1600.34 1757.77 1930.49 2103.7 2281.58 2465.54 2669.32 2864.37 3069.88 3275.34 3493.97 3716.8 3945.93 4185.34 4422.53 4667.38 - 4923.23 5185.86 5453.65 5716.99 5995.55 6279.44 6557.87 6853.73 / - 16 12 20 1 236.41 347.63 468.98 636.83 843.43 1072.84 1328.81 1581.8 1857.28 2152.05 2466.39 2792.81 - 3137.97 3481.62 3867.94 4247.89 4675.58 5089.44 5514.39 5962.38 6472.22 6944.28 7440.42 7952.55 8472.6 9023.1 9582.73 10162.63 - 10750.6 11357.52 11983.53 12628.32 13325.84 14011.39 14688.26 15410.1 / - 16 13 1 1 313.23 312.14 311.8 311.78 311.93 312.21 312.6 313.07 313.61 314.24 314.93 315.68 - 316.51 317.39 318.34 319.35 320.42 321.55 322.74 323.99 325.3 326.66 328.09 329.57 331.11 332.71 334.37 336.09 - 337.86 339.69 341.58 343.53 345.53 347.59 349.71 351.89 / - 16 13 2 1 313.13 312.03 311.69 311.66 311.81 312.09 312.47 312.94 313.49 314.11 314.8 315.55 - 316.38 317.26 318.21 319.22 320.29 321.42 322.61 323.86 325.16 326.53 327.96 329.44 330.99 332.59 334.24 335.96 - 337.74 339.57 341.46 343.41 345.41 347.47 349.59 351.77 / - 16 13 3 1 312.95 311.83 311.47 311.44 311.58 311.86 312.24 312.71 313.25 313.87 314.56 315.32 - 316.14 317.02 317.97 318.98 320.05 321.18 322.37 323.62 324.93 326.3 327.72 329.21 330.75 332.35 334.02 335.73 - 337.51 339.34 341.24 343.19 345.19 347.26 349.38 351.56 / - 16 13 4 1 312.62 311.45 311.08 311.03 311.17 311.44 311.82 312.28 312.82 313.44 314.13 314.88 - 315.7 316.59 317.53 318.54 319.61 320.74 321.94 323.19 324.5 325.87 327.3 328.78 330.33 331.93 333.6 335.32 - 337.1 338.94 340.83 342.79 344.8 346.87 349 351.18 / - 16 13 5 1 311.96 310.73 310.32 310.25 310.38 310.64 311.01 311.47 312.01 312.63 313.31 314.06 - 314.89 315.77 316.72 317.73 318.8 319.93 321.13 322.38 323.7 325.07 326.5 328 329.55 331.16 332.83 334.56 - 336.35 338.19 340.1 342.06 344.09 346.17 348.3 350.5 / - 16 13 6 1 310.67 309.32 308.85 308.75 308.85 309.1 309.46 309.91 310.45 311.06 311.74 312.5 - 313.32 314.21 315.16 316.18 317.25 318.39 319.6 320.86 322.19 323.57 325.02 326.52 328.09 329.72 331.4 333.15 - 334.95 336.82 338.74 340.73 342.77 344.87 347.03 349.25 / - 16 13 7 1 307.89 306.16 305.49 305.26 305.28 305.47 305.79 306.21 306.73 307.33 308.01 308.77 - 309.6 310.5 311.47 312.5 313.6 314.77 316 317.29 318.65 320.08 321.56 323.11 324.72 326.4 328.13 329.93 - 331.79 333.71 335.7 337.74 339.85 342.02 344.25 346.54 / - 16 13 8 1 301.68 298.17 296.82 296.28 296.11 296.16 296.41 296.81 297.32 297.94 298.65 299.46 - 300.35 301.32 302.37 303.5 304.71 305.99 307.34 308.77 310.26 311.83 313.41 315.12 316.89 318.74 320.65 322.62 - 324.67 326.78 328.96 331.2 333.51 335.89 338.33 340.84 / - 16 13 9 1 290.88 280.33 279 278.38 278.25 278.39 278.75 279.27 279.93 280.71 281.61 282.63 - 283.75 284.97 286.28 287.69 289.15 290.73 292.4 294.16 295.99 297.91 299.87 301.95 304.11 306.35 308.62 311 - 313.46 316 318.57 321.25 323.99 326.81 329.7 332.63 / - 16 13 10 1 270.97 253.73 252.67 252.37 252.51 252.95 253.63 254.49 255.51 256.69 258.02 259.47 - 261.06 262.76 264.59 266.52 268.58 270.74 273.01 275.38 277.86 280.44 283.11 285.89 288.76 291.72 294.78 297.93 - 301.16 304.49 307.9 311.4 314.98 318.65 322.4 326.27 / - 16 13 11 1 227.05 223.76 222.78 222.73 223.23 224.1 225.25 226.67 228.28 230.12 232.15 234.36 - 236.75 239.3 242.01 244.87 247.73 250.86 254.13 257.53 261.05 264.7 268.47 272.36 276.36 280.79 285.02 289.36 - 293.81 298.35 302.99 307.72 312.55 317.47 322.48 327.58 / - 16 13 12 1 195.62 193.2 193.21 194.07 195.4 197.1 199.14 201.48 204.11 206.96 210.05 213.42 - 216.97 220.79 224.83 228.98 233.41 238.02 242.82 247.65 252.75 258.02 263.47 268.86 274.6 280.5 286.27 292.44 - 298.74 304.87 311.44 317.79 324.61 331.17 338.2 344.97 / - 16 13 13 1 170.24 170.22 171.72 174.25 177.36 180.85 184.65 188.73 193.07 197.66 202.49 207.55 - 212.84 218.35 224.06 229.99 236.11 242.43 248.94 255.63 262.5 269.54 276.76 284.13 291.67 299.37 307.22 315.23 - 324.19 333.61 342.83 352.11 361.48 370.95 380.54 390.35 / - 16 13 14 1 158.1 161.96 165.93 170.21 174.88 180.01 185.66 191.73 198.15 204.91 212.01 219.46 - 227.24 235.35 243.78 252.52 261.58 270.94 280.56 290.43 300.55 310.93 321.55 332.43 343.54 354.91 366.51 378.35 - 390.42 402.73 415.26 428.02 441 454.21 467.64 481.29 / - 16 13 15 1 154.36 160.42 166.28 172.72 179.92 187.86 196.53 205.9 215.95 226.64 237.92 249.79 - 262.2 275.12 288.54 302.46 316.85 331.7 347.01 362.76 378.98 395.64 412.76 430.33 448.34 466.81 485.72 505.04 - 524.74 544.81 565.27 586.12 607.37 629.03 651.12 673.63 / - 16 13 16 1 151.69 160.67 170.86 182.32 195.04 209.02 224.27 240.73 258.34 277.02 296.74 317.46 - 339.11 361.69 385.18 409.5 434.64 460.61 487.38 514.92 543.2 572.26 602.07 632.57 663.66 695.52 728.31 762.02 - 796.64 832.17 868.6 905.93 944.12 982.95 1022.37 1062.33 / - 16 13 17 1 152.59 168.23 187.26 209.21 233.64 260.34 289.16 320.1 353.04 387.94 424.76 463.46 - 504.01 546.34 590.42 635.94 682.66 731.15 781.57 833.86 888.01 943.98 1001.73 1061.18 1122.16 1184.49 1246.94 1306.3 - 1364.39 1423.41 1482.76 1543.89 1605.97 1668.69 1732.4 1798.56 / - 16 13 18 1 160.68 192.04 232.39 277.77 327.32 380.63 437.79 498.78 563.56 632.33 704.59 781.18 - 861.75 946.38 1035.79 1128.5 1224.19 1317.05 1407.54 1502.57 1598.68 1698.15 1803.13 1908.63 2015.94 2125.36 2236.47 2352.54 - 2466.4 2586.31 2708.11 2831.88 2958.16 3089.8 3220.42 3358.43 / - 16 13 19 1 182.77 245.49 322.01 411.13 510.43 617.48 732.6 859.45 996.16 1141.17 1293.56 1442.38 - 1593.42 1758.99 1925.64 2108.26 2286.57 2472.01 2662.37 2874.39 3081.55 3289.45 3508.53 3734.25 3966.37 4208.2 4448.05 4695.83 - 4953.84 5209.79 5489.75 5756.78 6038.22 6324.94 6607.09 6906.55 / - 16 13 20 1 236.44 348.11 470.08 631.63 835.49 1066.47 1322.29 1574.35 1853.45 2148.85 2456.78 2783.11 - 3132.3 3497.95 3863.36 4271.67 4667.86 5120.89 5550.36 6002.33 6461.75 6994.63 7496.21 8012.58 8533.12 9086.16 9657.66 10236.13 - 10839.14 11452.07 12084.32 12735.64 13406.66 14132.48 14818.22 15547.44 / - 16 14 1 1 315.1 314 313.64 313.61 313.75 314.03 314.41 314.87 315.42 316.03 316.72 317.48 - 318.29 319.18 320.13 321.13 322.2 323.33 324.52 325.77 327.08 328.45 329.88 331.36 332.91 334.51 336.17 337.89 - 339.67 341.5 343.4 345.35 347.36 349.43 351.55 353.74 / - 16 14 2 1 315.01 313.89 313.53 313.48 313.63 313.9 314.28 314.74 315.28 315.9 316.59 317.34 - 318.16 319.04 319.99 321 322.07 323.19 324.38 325.63 326.94 328.31 329.74 331.23 332.77 334.37 336.04 337.76 - 339.54 341.37 343.27 345.22 347.23 349.3 351.43 353.61 / - 16 14 3 1 314.82 313.68 313.31 313.26 313.4 313.66 314.04 314.5 315.04 315.66 316.34 317.09 - 317.91 318.8 319.74 320.75 321.82 322.95 324.14 325.39 326.7 328.06 329.49 330.98 332.53 334.13 335.8 337.52 - 339.3 341.14 343.03 344.99 347 349.07 351.2 353.39 / - 16 14 4 1 314.48 313.29 312.9 312.83 312.96 313.23 313.59 314.05 314.59 315.2 315.89 316.64 - 317.46 318.34 319.28 320.29 321.36 322.49 323.68 324.93 326.24 327.61 329.04 330.53 332.08 333.69 335.36 337.08 - 338.87 340.71 342.61 344.57 346.59 348.66 350.8 352.99 / - 16 14 5 1 313.81 312.54 312.11 312.02 312.14 312.39 312.75 313.2 313.73 314.34 315.02 315.78 - 316.59 317.47 318.42 319.43 320.5 321.63 322.83 324.08 325.4 326.77 328.21 329.7 331.26 332.87 334.55 336.28 - 338.07 339.93 341.84 343.81 345.83 347.92 350.07 352.27 / - 16 14 6 1 312.48 311.06 310.56 310.44 310.52 310.76 311.11 311.55 312.08 312.69 313.37 314.12 - 314.93 315.82 316.77 317.78 318.86 320 321.21 322.47 323.8 325.19 326.63 328.14 329.71 331.34 333.04 334.79 - 336.6 338.47 340.4 342.39 344.44 346.56 348.73 350.96 / - 16 14 7 1 309.41 307.45 306.65 306.33 306.29 306.44 306.73 307.13 307.63 308.22 308.89 309.64 - 310.47 311.37 312.34 313.38 314.49 315.66 316.9 318.21 319.58 321.02 322.52 324.08 325.71 327.41 329.16 330.98 - 332.86 334.81 336.82 338.89 341.02 343.21 345.47 347.79 / - 16 14 8 1 302.93 298.72 297.1 296.5 296.29 296.33 296.56 296.94 297.44 298.06 298.77 299.59 - 300.49 301.48 302.55 303.7 304.93 306.23 307.62 309.07 310.6 312.2 313.87 315.62 317.43 319.32 321.27 323.29 - 325.38 327.54 329.76 332.06 334.42 336.84 339.33 341.89 / - 16 14 9 1 292.03 279.98 278.7 278.17 278.05 278.22 278.59 279.14 279.83 280.65 281.58 282.64 - 283.79 285.05 286.36 287.81 289.35 290.98 292.7 294.45 296.34 298.32 300.37 302.51 304.68 306.98 309.36 311.81 - 314.3 316.9 319.58 322.3 325.12 328.02 330.99 334 / - 16 14 10 1 271.78 253.65 252.58 252.28 252.43 252.88 253.56 254.44 255.49 256.69 258.04 259.52 - 261.13 262.86 264.72 266.7 268.78 270.98 273.29 275.71 278.23 280.86 283.58 286.4 289.33 292.34 295.45 298.66 - 301.95 305.33 308.81 312.37 316.01 319.74 323.56 327.45 / - 16 14 11 1 227.14 223.85 222.88 222.86 223.37 224.24 225.4 226.84 228.5 230.38 232.37 234.61 - 237.02 239.6 242.33 245.22 248.26 251.44 254.76 258.21 261.79 265.5 269.32 273.27 277.33 281.5 285.78 290.16 - 294.65 299.24 303.93 308.71 313.59 318.56 323.62 328.78 / - 16 14 12 1 195.7 193.34 193.38 194.25 195.6 197.35 199.42 201.77 204.4 207.31 210.43 213.84 - 217.42 221.28 225.36 229.55 234.01 238.67 243.37 248.37 253.54 258.85 264.15 269.76 275.55 281.49 287.32 293.54 - 299.9 306.08 312.71 319.12 326 333.02 339.75 346.98 / - 16 14 13 1 170.39 170.43 172.01 174.6 177.75 181.28 185.12 189.24 193.61 198.23 203.09 208.18 - 213.49 219.03 224.78 230.73 236.88 243.24 249.78 256.5 263.41 270.49 277.75 285.17 292.75 300.49 308.39 316.45 - 324.65 333.58 343.31 352.84 362.36 371.89 381.67 391.48 / - 16 14 14 1 158.44 162.37 166.38 170.68 175.36 180.51 186.18 192.26 198.7 205.48 212.6 220.06 - 227.85 235.97 244.41 253.17 262.24 271.62 281.29 291.21 301.37 311.79 322.45 333.37 344.53 355.94 367.58 379.47 - 391.59 403.94 416.52 429.34 442.38 455.64 469.13 482.84 / - 16 14 15 1 154.64 160.77 166.67 173.13 180.33 188.28 196.95 206.33 216.38 227.08 238.36 250.22 - 262.63 275.54 288.97 302.87 317.26 332.12 347.45 363.22 379.43 396.09 413.19 430.74 448.73 467.16 486.03 505.35 - 525.1 545.25 565.78 586.7 608.01 629.71 651.83 674.36 / - 16 14 16 1 151.91 160.94 171.15 182.62 195.33 209.3 224.54 240.97 258.55 277.2 296.88 317.56 - 339.19 361.75 385.2 409.52 434.63 460.55 487.26 514.75 543.04 572.07 601.85 632.32 663.38 695.17 727.86 761.47 - 795.95 831.33 867.59 904.73 942.74 981.6 1021.25 1061.51 / - 16 14 17 1 152.74 168.4 187.42 209.35 233.74 260.39 289.14 319.98 352.87 387.7 424.41 462.98 - 503.39 545.61 589.59 635.14 681.83 730.23 780.5 832.6 886.52 942.24 999.71 1058.91 1119.84 1182.01 1244.73 1304.56 - 1363.2 1422.97 1483.21 1545.37 1608.68 1672.79 1740.18 1805.77 / - 16 14 18 1 160.75 192.06 232.4 277.72 327.2 380.49 437.51 498.32 562.96 631.52 703.57 780.06 - 860.42 944.75 1033.07 1126.28 1221.71 1315.94 1407.46 1501.44 1599.61 1700.41 1804.11 1910.46 2018.71 2129.14 2241.35 2358.41 - 2477.54 2594.78 2717.88 2843.1 2970.74 3103.86 3236.08 3375.32 / - 16 14 19 1 182.77 245.62 321.79 410.35 509.15 616.03 732.24 857.69 993 1139.89 1291.95 1441.6 - 1593.7 1760.31 1928.14 2111.99 2291.92 2479.06 2671.32 2885.23 3094.3 3304.59 3524.48 3751.7 3988.59 4225.78 4475.83 4726.54 - 4987.46 5246.43 5529.48 5799.93 6084.28 6374.8 6661.29 6963.6 / - 16 14 20 1 236.55 348.77 471.56 624.95 827.99 1055.48 1306.79 1567.85 1847.59 2146.59 2455.6 2794.55 - 3146.86 3494.33 3885.12 4296.64 4698.03 5117.41 5590.22 6046.71 6511.58 6998.55 7556.96 8078.84 8606.13 9159.83 9733.05 10322.63 - 10908.56 11526 12195.3 12854.25 13531.77 14227.55 14943.2 15698 / - 16 15 1 1 316.88 315.8 315.45 315.41 315.55 315.82 316.19 316.66 317.2 317.81 318.5 319.25 - 320.07 320.95 321.89 322.9 323.97 325.1 326.29 327.54 328.85 330.22 331.65 333.13 334.68 336.29 337.95 339.67 - 341.46 343.3 345.19 347.15 349.17 351.24 353.37 355.56 / - 16 15 2 1 316.79 315.69 315.32 315.28 315.42 315.69 316.06 316.52 317.06 317.67 318.36 319.11 - 319.93 320.81 321.75 322.76 323.83 324.95 326.14 327.39 328.7 330.07 331.5 332.99 334.54 336.14 337.81 339.53 - 341.32 343.16 345.06 347.02 349.03 351.11 353.24 355.43 / - 16 15 3 1 316.6 315.47 315.1 315.04 315.18 315.44 315.81 316.27 316.81 317.42 318.1 318.85 - 319.67 320.55 321.49 322.5 323.56 324.69 325.88 327.13 328.44 329.81 331.24 332.73 334.28 335.89 337.56 339.28 - 341.07 342.91 344.81 346.77 348.79 350.87 353 355.2 / - 16 15 4 1 316.25 315.07 314.67 314.6 314.72 314.98 315.34 315.8 316.33 316.94 317.62 318.37 - 319.18 320.06 321.01 322.01 323.08 324.21 325.4 326.65 327.96 329.34 330.77 332.26 333.81 335.42 337.09 338.82 - 340.61 342.46 344.36 346.33 348.35 350.44 352.58 354.78 / - 16 15 5 1 315.56 314.29 313.84 313.74 313.85 314.09 314.45 314.89 315.42 316.03 316.71 317.45 - 318.27 319.15 320.09 321.1 322.17 323.3 324.49 325.75 327.07 328.44 329.88 331.38 332.94 334.56 336.23 337.97 - 339.77 341.63 343.54 345.52 347.55 349.65 351.8 354.02 / - 16 15 6 1 314.14 312.67 312.12 311.96 312.03 312.24 312.57 313 313.52 314.12 314.8 315.54 - 316.36 317.24 318.19 319.2 320.28 321.42 322.63 323.9 325.23 326.62 328.08 329.59 331.17 332.81 334.51 336.27 - 338.09 339.97 341.91 343.91 345.98 348.1 350.29 352.53 / - 16 15 7 1 310.73 308.53 307.57 307.16 307.05 307.15 307.4 307.77 308.25 308.83 309.5 310.24 - 311.07 311.97 312.95 313.99 315.11 316.3 317.55 318.88 320.27 321.72 323.25 324.83 326.49 328.2 329.99 331.83 - 333.75 335.72 337.76 339.86 342.03 344.26 346.55 348.9 / - 16 15 8 1 304.06 299.11 297.18 296.52 296.27 296.28 296.49 296.87 297.37 298 298.73 299.56 - 300.49 301.5 302.57 303.75 305.01 306.35 307.76 309.26 310.82 312.47 314.18 315.97 317.83 319.76 321.76 323.84 - 325.98 328.19 330.44 332.78 335.19 337.68 340.23 342.85 / - 16 15 9 1 293.03 279.45 278.28 277.82 277.76 277.97 278.38 278.97 279.7 280.55 281.53 282.62 - 283.82 285.08 286.47 287.96 289.55 291.23 292.95 294.8 296.74 298.77 300.88 303.03 305.31 307.67 310.11 312.58 - 315.18 317.85 320.56 323.39 326.29 329.27 332.28 335.4 / - 16 15 10 1 271.74 253.58 252.49 252.19 252.35 252.81 253.51 254.4 255.47 256.69 258.06 259.57 - 261.21 262.97 264.86 266.87 269 271.24 273.59 276.05 278.62 281.29 284.06 286.93 289.91 292.98 296.14 299.4 - 302.76 306.2 309.73 313.36 317.07 320.86 324.74 328.71 / - 16 15 11 1 227.24 223.95 222.99 222.98 223.51 224.37 225.57 226.99 228.68 230.57 232.66 234.94 - 237.39 240 242.78 245.72 248.65 251.86 255.21 258.9 262.54 266.3 270.18 274.19 278.31 282.54 286.89 291.34 - 295.89 300.55 305.31 310.17 315.12 320.16 325.3 330.53 / - 16 15 12 1 195.79 193.47 193.56 194.45 195.84 197.6 199.68 202.06 204.71 207.63 210.81 214.2 - 217.87 221.78 225.81 230.12 234.62 239.31 244.06 249.1 254.31 259.69 265.04 270.7 276.5 282.49 288.37 294.64 - 301.06 307.3 313.98 320.8 327.39 334.47 341.27 348.6 / - 16 15 13 1 170.55 170.64 172.31 174.98 178.19 181.77 185.64 189.79 194.2 198.84 203.73 208.84 - 214.19 219.74 225.52 231.5 237.68 244.06 250.63 257.38 264.32 271.44 278.73 286.19 293.81 301.6 309.54 317.64 - 325.89 334.29 343.16 352.83 362.68 372.58 382.51 392.53 / - 16 15 14 1 158.86 162.84 166.88 171.2 175.9 181.07 186.75 192.84 199.29 206.08 213.21 220.68 - 228.48 236.61 245.06 253.82 262.89 272.26 281.94 291.9 302.12 312.57 323.28 334.23 345.43 356.87 368.55 380.47 - 392.63 405.03 417.66 430.51 443.6 456.91 470.45 484.22 / - 16 15 15 1 155 161.19 167.1 173.58 180.78 188.73 197.4 206.76 216.81 227.5 238.78 250.64 - 263.02 275.92 289.31 303.19 317.55 332.38 347.67 363.43 379.66 396.31 413.4 430.91 448.86 467.25 486.06 505.31 - 524.99 545.11 565.64 586.61 607.97 629.73 651.88 674.41 / - 16 15 16 1 152.19 161.27 171.49 182.95 195.64 209.58 224.78 241.19 258.72 277.32 296.95 317.56 - 339.12 361.63 385.05 409.34 434.41 460.25 486.87 514.26 542.42 571.35 601.05 631.5 662.57 694.32 726.92 760.4 - 794.74 829.95 866.04 903.03 940.93 979.7 1019.28 1059.63 / - 16 15 17 1 152.95 168.62 187.6 209.46 233.79 260.36 289.01 319.73 352.51 387.26 423.86 462.28 - 502.51 544.52 588.31 633.83 680.59 728.92 779.04 830.94 884.66 940.25 997.62 1056.6 1117.08 1178.83 1241.42 1301.56 - 1360.72 1421.04 1481.87 1544.62 1608.55 1673.29 1741.29 1807.62 / - 16 15 18 1 160.86 192.08 232.37 277.61 326.94 380.14 437.04 497.63 561.96 630.26 702.15 778.3 - 858.58 942.87 1031.14 1123.72 1218.68 1312.94 1405.02 1499.9 1598.73 1700.26 1803.04 1912.04 2021.25 2132.77 2246.2 2364.4 - 2484.65 2603.58 2728.03 2854.64 2984.04 3118.65 3253.76 3393.13 / - 16 15 19 1 182.82 245.86 321.57 410.49 507.9 615.77 730.15 855.3 991.64 1138.05 1289.75 1434.4 - 1594.13 1761.36 1930.57 2105.04 2297.45 2486.56 2680.89 2881.74 3107.97 3320.95 3543.44 3773.23 4011.02 4252.94 4502.11 4760.03 - 5023.71 5286.71 5562.08 5847.29 6135.3 6429 6720.19 7026.65 / - 16 15 20 1 236.76 349.71 473.55 617.78 820.11 1047.25 1301.6 1561.15 1839.97 2134.82 2456.29 2790 - 3140.46 3514.56 3909.56 4295.53 4731.95 5156.06 5595.07 6096.39 6567.3 7060.01 7559.94 8153.14 8687.67 9247.01 9820.08 10411.79 - 11009.84 11642.15 12286.78 12984.22 13669.97 14374.49 15099 15822.6 / - 16 16 1 1 318.56 317.53 317.2 317.16 317.31 317.58 317.95 318.41 318.95 319.57 320.25 321 - 321.82 322.7 323.64 324.65 325.71 326.84 328.03 329.28 330.59 331.96 333.39 334.88 336.43 338.04 339.71 341.43 - 343.22 345.07 346.97 348.93 350.95 353.03 355.17 357.36 / - 16 16 2 1 318.46 317.41 317.07 317.03 317.17 317.44 317.81 318.27 318.81 319.42 320.1 320.85 - 321.67 322.55 323.49 324.5 325.56 326.69 327.88 329.13 330.44 331.81 333.24 334.73 336.28 337.89 339.56 341.29 - 343.07 344.92 346.82 348.79 350.81 352.89 355.03 357.23 / - 16 16 3 1 318.27 317.19 316.83 316.78 316.92 317.18 317.55 318.01 318.54 319.15 319.83 320.58 - 321.39 322.27 323.21 324.22 325.29 326.42 327.61 328.86 330.17 331.54 332.97 334.46 336.01 337.62 339.29 341.02 - 342.81 344.65 346.56 348.53 350.55 352.63 354.78 356.98 / - 16 16 4 1 317.91 316.77 316.38 316.32 316.44 316.69 317.05 317.5 318.03 318.64 319.32 320.07 - 320.88 321.76 322.7 323.7 324.77 325.9 327.09 328.34 329.66 331.03 332.46 333.96 335.51 337.12 338.8 340.53 - 342.32 344.17 346.09 348.06 350.09 352.18 354.32 356.53 / - 16 16 5 1 317.19 315.94 315.5 315.4 315.5 315.74 316.09 316.53 317.06 317.66 318.33 319.08 - 319.89 320.77 321.71 322.72 323.79 324.92 326.12 327.37 328.69 330.07 331.51 333.01 334.57 336.2 337.88 339.62 - 341.42 343.29 345.21 347.19 349.23 351.34 353.5 355.72 / - 16 16 6 1 315.57 314.01 313.39 313.18 313.21 313.4 313.71 314.13 314.63 315.22 315.89 316.63 - 317.45 318.33 319.28 320.3 321.38 322.52 323.74 325.01 326.35 327.75 329.22 330.74 332.33 333.98 335.7 337.47 - 339.31 341.21 343.17 345.19 347.27 349.42 351.62 353.89 / - 16 16 7 1 311.82 309.34 308.21 307.68 307.49 307.53 307.74 308.09 308.55 309.12 309.77 310.52 - 311.35 312.26 313.24 314.3 315.44 316.64 317.92 319.27 320.68 322.17 323.72 325.34 327.02 328.78 330.59 332.48 - 334.43 336.45 338.53 340.67 342.88 345.16 347.5 349.9 / - 16 16 8 1 305.03 299.12 297.08 296.34 296.07 296.07 296.29 296.67 297.19 297.82 298.57 299.43 - 300.37 301.41 302.54 303.76 305.05 306.41 307.87 309.4 311.02 312.71 314.47 316.31 318.23 320.19 322.25 324.38 - 326.58 328.85 331.19 333.58 336.06 338.61 341.22 343.89 / - 16 16 9 1 293.84 278.61 277.6 277.28 277.33 277.63 278.12 278.76 279.54 280.45 281.47 282.59 - 283.83 285.17 286.6 288.14 289.76 291.48 293.28 295.19 297.15 299.24 301.38 303.63 305.97 308.34 310.85 313.43 - 316.05 318.8 321.62 324.48 327.46 330.52 333.61 336.81 / - 16 16 10 1 271.53 253.51 252.41 252.11 252.27 252.74 253.45 254.36 255.45 256.69 258.09 259.62 - 261.29 263.09 265.01 267.06 269.22 271.5 273.9 276.4 279.01 281.73 284.55 287.48 290.51 293.63 296.85 300.17 - 303.58 307.09 310.69 314.37 318.15 322.01 325.96 329.99 / - 16 16 11 1 227.35 224.04 223.09 223.1 223.62 224.52 225.71 227.19 228.91 230.77 232.88 235.18 - 237.66 240.3 243.11 246.07 249.19 252.45 255.85 259.39 263.07 266.87 270.79 274.84 279 283.28 287.67 292.17 - 296.77 301.48 306.71 311.64 316.67 321.79 327 332.31 / - 16 16 12 1 195.87 193.61 193.73 194.65 196.05 197.83 199.94 202.33 205.01 207.97 211.18 214.64 - 218.34 222.21 226.35 230.7 235.24 239.86 244.76 249.84 255.09 260.51 265.9 271.63 277.49 283.5 289.43 295.75 - 302.22 308.52 315.25 322.13 328.78 335.92 342.78 350.18 / - 16 16 13 1 170.71 170.88 172.65 175.42 178.71 182.34 186.25 190.43 194.87 199.54 204.45 209.58 - 214.94 220.52 226.3 232.3 238.5 244.9 251.49 258.27 265.24 272.38 279.7 287.19 294.85 302.67 310.66 318.8 - 327.09 335.54 344.14 352.88 362.12 372.23 382.52 392.86 / - 16 16 14 1 159.37 163.4 167.47 171.81 176.52 181.72 187.42 193.52 199.96 206.74 213.87 221.32 - 229.11 237.23 245.67 254.42 263.49 272.86 282.52 292.47 302.72 313.22 323.96 334.95 346.17 357.64 369.35 381.3 - 393.49 405.91 418.57 431.46 444.58 457.93 471.51 485.32 / - 16 16 15 1 155.48 161.72 167.62 174.1 181.3 189.23 197.88 207.23 217.25 227.89 239.15 250.97 - 263.33 276.2 289.56 303.39 317.69 332.45 347.68 363.37 379.52 396.12 413.17 430.66 448.57 466.9 485.65 504.82 - 524.41 544.42 564.85 585.7 606.96 628.63 650.7 673.17 / - 16 16 16 1 152.57 161.71 171.92 183.35 195.98 209.86 225 241.34 258.81 277.36 296.91 317.43 - 338.89 361.29 384.59 408.8 433.81 459.56 486.07 513.3 541.3 570.05 599.56 629.82 660.8 692.53 725.1 758.49 - 792.7 827.75 863.61 900.3 937.81 976.14 1015.27 1055.2 / - 16 16 17 1 153.24 168.88 187.8 209.55 233.74 260.19 288.71 319.3 351.92 386.49 422.95 461.23 - 501.25 543.02 586.53 631.76 678.53 726.89 776.93 828.65 882.07 937.18 993.94 1052.35 1112.3 1173.62 1235.96 1297.87 - 1355.95 1416.76 1478.61 1541.53 1606.43 1672.84 1739.81 1806.96 / - 16 16 18 1 161.03 192.11 232.27 277.42 326.51 379.42 436.18 496.55 560.51 628.32 700.03 775.81 - 855.79 939.74 1027.33 1119.12 1213.65 1308.01 1400.88 1496.54 1596.16 1698.51 1802.36 1912.2 2022.49 2135.21 2250.33 2369.28 - 2490.94 2612.7 2737.66 2865.88 2996.83 3133.29 3272.88 3410.98 / - 16 16 19 1 182.95 246.26 321.55 409.77 507.83 613.8 729.68 852.84 987.63 1131.32 1282.83 1433.1 - 1592.72 1755.2 1931.87 2108.15 2302.14 2493.26 2690.04 2895.61 3121.52 3337.6 3562.87 3794.26 4034.98 4280.93 4534.17 4796.15 - 5063.13 5330.27 5609.22 5887.81 6190.72 6488.57 6784.81 7095.25 / - 16 16 20 1 237.14 351.05 476.22 614.5 816.14 1040.28 1288.61 1546.43 1833.4 2127.88 2451.56 2788.4 - 3153.28 3507.98 3905.9 4326.33 4736.42 5199.28 5644.59 6103.19 6629.61 7128.82 7636.75 8167.66 8778.6 9344.91 9924.49 10517.2 - 11121 11755.99 12420.38 13097.78 13791.23 14539.75 15274.19 16010.7 / - 16 17 1 1 320.11 319.18 318.88 318.87 319.02 319.3 319.68 320.14 320.68 321.29 321.98 322.73 - 323.54 324.42 325.36 326.37 327.44 328.56 329.75 331.01 332.32 333.69 335.12 336.61 338.16 339.77 341.44 343.17 - 344.96 346.81 348.72 350.68 352.71 354.79 356.94 359.14 / - 16 17 2 1 320.01 319.06 318.75 318.73 318.88 319.15 319.53 319.99 320.53 321.14 321.82 322.57 - 323.38 324.26 325.2 326.21 327.27 328.4 329.59 330.84 332.15 333.53 334.96 336.45 338 339.61 341.28 343.01 - 344.8 346.65 348.56 350.53 352.56 354.64 356.79 358.99 / - 16 17 3 1 319.81 318.83 318.5 318.47 318.61 318.88 319.25 319.7 320.24 320.85 321.53 322.27 - 323.09 323.96 324.91 325.91 326.98 328.1 329.3 330.55 331.86 333.23 334.66 336.16 337.71 339.32 340.99 342.73 - 344.52 346.37 348.28 350.25 352.28 354.37 356.52 358.73 / - 16 17 4 1 319.43 318.38 318.02 317.96 318.09 318.35 318.71 319.16 319.69 320.29 320.97 321.71 - 322.53 323.4 324.34 325.35 326.42 327.55 328.74 329.99 331.3 332.68 334.11 335.61 337.17 338.78 340.46 342.2 - 343.99 345.85 347.77 349.74 351.78 353.88 356.03 358.25 / - 16 17 5 1 318.65 317.45 317.01 316.9 317 317.23 317.58 318.02 318.54 319.14 319.81 320.55 - 321.36 322.24 323.18 324.19 325.26 326.39 327.59 328.85 330.17 331.55 333 334.5 336.07 337.7 339.39 341.14 - 342.95 344.82 346.75 348.75 350.8 352.91 355.08 357.32 / - 16 17 6 1 316.68 314.99 314.28 314 313.98 314.13 314.42 314.82 315.31 315.89 316.55 317.29 - 318.1 318.99 319.94 320.97 322.06 323.21 324.44 325.73 327.08 328.5 329.98 331.53 333.14 334.81 336.55 338.35 - 340.21 342.13 344.12 346.17 348.28 350.46 352.69 354.99 / - 16 17 7 1 312.65 309.87 308.48 307.83 307.57 307.55 307.72 308.04 308.5 309.06 309.72 310.48 - 311.32 312.24 313.25 314.33 315.49 316.72 318.03 319.41 320.86 322.38 323.97 325.63 327.36 329.16 331.03 332.96 - 334.96 337.03 339.16 341.37 343.63 345.96 348.36 350.82 / - 16 17 8 1 305.78 298.88 296.73 296.03 295.77 295.79 296.02 296.41 296.95 297.62 298.39 299.27 - 300.25 301.33 302.49 303.75 305.09 306.51 308.02 309.6 311.23 312.98 314.8 316.7 318.67 320.72 322.85 325.05 - 327.29 329.63 332.05 334.54 337.09 339.72 342.4 345.17 / - 16 17 9 1 294.43 278.03 277.16 276.89 276.98 277.32 277.84 278.52 279.34 280.28 281.34 282.52 - 283.8 285.18 286.66 288.24 289.92 291.69 293.55 295.51 297.56 299.69 301.91 304.21 306.59 309.06 311.62 314.25 - 316.97 319.77 322.64 325.62 328.65 331.77 334.96 338.23 / - 16 17 10 1 271.15 253.44 252.32 252.03 252.19 252.68 253.4 254.33 255.43 256.7 258.12 259.68 - 261.38 263.21 265.17 267.25 269.45 271.78 274.21 276.76 279.42 282.19 285.06 288.04 291.12 294.3 297.58 300.96 - 304.43 308 311.66 315.41 319.25 323.18 327.2 331.31 / - 16 17 11 1 227.45 224.14 223.2 223.22 223.73 224.63 225.89 227.35 229.08 231.03 233.18 235.51 - 238.03 240.61 243.45 246.44 249.59 252.89 256.33 259.9 263.82 267.68 271.66 275.77 279.99 284.34 288.79 293.36 - 298.03 302.81 307.69 312.68 317.76 322.93 328.21 333.57 / - 16 17 12 1 195.96 193.75 193.91 194.85 196.27 198.07 200.18 202.59 205.3 208.29 211.55 215.05 - 218.78 222.77 226.93 231.31 235.79 240.54 245.48 250.6 255.89 261.18 266.79 272.56 278.49 284.34 290.52 296.86 - 303.38 309.73 316.52 323.46 330.16 337.36 344.29 351.75 / - 16 17 13 1 170.87 171.16 173.08 176 179.36 183.05 187.01 191.22 195.68 200.37 205.29 210.44 - 215.8 221.39 227.19 233.19 239.4 245.81 252.41 259.2 266.18 273.34 280.67 288.18 295.86 303.71 311.72 319.9 - 328.22 336.71 345.34 354.13 363.06 372.15 381.75 392.32 / - 16 17 14 1 160.04 164.11 168.2 172.55 177.27 182.52 188.24 194.33 200.75 207.51 214.61 222.04 - 229.8 237.88 246.28 254.99 264.01 273.33 282.95 292.86 303.06 313.54 324.31 335.34 346.61 358.11 369.84 381.81 - 394.01 406.44 419.11 432.02 445.16 458.52 472.12 485.95 / - 16 17 15 1 156.17 162.42 168.27 174.74 181.92 189.82 198.44 207.74 217.71 228.3 239.49 251.24 - 263.51 276.29 289.56 303.31 317.53 332.22 347.36 362.94 378.97 395.44 412.35 429.7 447.48 465.69 484.33 503.39 - 522.88 542.79 563.1 583.82 604.93 626.45 648.35 670.64 / - 16 17 16 1 153.11 162.31 172.49 183.85 196.38 210.17 225.22 241.45 258.81 277.22 296.66 317.06 - 338.41 360.66 383.8 407.77 432.51 458.01 484.29 511.34 539.17 567.74 597.04 627.08 657.82 689.29 721.57 754.64 - 788.52 823.19 858.66 894.93 932 969.87 1008.54 1047.98 / - 16 17 17 1 153.67 169.24 188.04 209.62 233.61 259.82 288.15 318.58 351 385.32 421.49 459.48 - 499.24 540.76 583.98 628.86 675.35 723.38 773.02 824.29 877.19 931.74 987.91 1045.69 1105.03 1165.8 1227.7 1289.4 - 1349.57 1410.78 1472.54 1536.69 1601.52 1667.73 1735.34 1805.22 / - 16 17 18 1 161.47 192.18 232.21 277.03 325.79 378.31 434.61 494.59 558.21 625.47 696.69 771.8 - 851.05 934.35 1021.41 1112.29 1206.21 1301.61 1394.08 1491.46 1591.54 1694.33 1800.95 1909.98 2021.48 2136.04 2254.04 2372.41 - 2495.5 2621.01 2748.89 2879.18 3011.83 3150.37 3288.26 3428.51 / - 16 17 19 1 183.21 246.94 322.12 409.22 506.54 613.19 726.81 850.74 983.02 1126.35 1277.12 1428.49 - 1589.84 1753.57 1931.71 2110.09 2305.74 2499.28 2698.79 2906.88 3118.67 3357.58 3583.27 3818.05 4060.54 4311.21 4568.93 4830.21 - 5105.98 5378.14 5661.24 5951.04 6240.8 6554.35 6856.68 7171.86 / - 16 17 20 1 237.8 353 479.87 620.31 809.69 1035 1280.99 1540.74 1819.42 2123.5 2441.29 2781.42 - 3136.05 3524 3925.32 4322.93 4767.32 5200.56 5691.81 6160.14 6648.43 7203.3 7721.31 8261.49 8816.59 9385.67 10042.65 10643.74 - 11262.53 11897.27 12559.82 13251 13967.88 14696.73 15440.97 16229.74 / - 16 18 1 1 321.53 320.73 320.5 320.51 320.69 320.97 321.36 321.82 322.37 322.98 323.67 324.42 - 325.23 326.11 327.05 328.06 329.13 330.25 331.44 332.69 334.01 335.38 336.81 338.3 339.86 341.47 343.14 344.88 - 346.67 348.52 350.43 352.4 354.43 356.52 358.67 360.88 / - 16 18 2 1 321.42 320.6 320.35 320.36 320.53 320.81 321.19 321.66 322.2 322.81 323.49 324.24 - 325.06 325.94 326.88 327.88 328.95 330.08 331.27 332.52 333.83 335.2 336.64 338.13 339.68 341.3 342.97 344.7 - 346.5 348.35 350.26 352.24 354.27 356.36 358.51 360.72 / - 16 18 3 1 321.21 320.35 320.08 320.07 320.23 320.51 320.88 321.34 321.88 322.49 323.17 323.92 - 324.73 325.61 326.55 327.55 328.62 329.75 330.94 332.19 333.5 334.88 336.31 337.81 339.36 340.98 342.65 344.39 - 346.18 348.04 349.96 351.93 353.97 356.07 358.22 360.44 / - 16 18 4 1 320.79 319.85 319.53 319.49 319.63 319.9 320.26 320.71 321.24 321.85 322.53 323.27 - 324.08 324.96 325.9 326.91 327.98 329.11 330.3 331.55 332.87 334.25 335.69 337.18 338.75 340.37 342.05 343.79 - 345.59 347.46 349.38 351.36 353.41 355.51 357.68 359.9 / - 16 18 5 1 319.74 318.52 318.04 317.91 317.98 318.2 318.53 318.95 319.47 320.06 320.73 321.47 - 322.28 323.16 324.11 325.12 326.19 327.33 328.54 329.81 331.14 332.53 333.99 335.51 337.09 338.74 340.44 342.21 - 344.04 345.93 347.88 349.89 351.97 354.1 356.3 358.56 / - 16 18 6 1 317.4 315.52 314.68 314.31 314.22 314.32 314.57 314.94 315.42 315.99 316.65 317.39 - 318.21 319.1 320.06 321.1 322.21 323.39 324.63 325.95 327.33 328.78 330.29 331.87 333.51 335.22 337 338.84 - 340.74 342.71 344.74 346.84 349 351.22 353.5 355.85 / - 16 18 7 1 313.22 310.14 308.32 307.62 307.31 307.27 307.43 307.74 308.19 308.79 309.46 310.24 - 311.1 312.06 313.09 314.21 315.41 316.68 318.03 319.43 320.89 322.46 324.11 325.82 327.61 329.47 331.39 333.39 - 335.46 337.59 339.8 342.07 344.4 346.81 349.28 351.82 / - 16 18 8 1 306.26 298.4 296.13 295.52 295.32 295.4 295.68 296.12 296.7 297.4 298.22 299.14 - 300.13 301.25 302.46 303.76 305.14 306.61 308.17 309.81 311.48 313.29 315.17 317.13 319.16 321.28 323.43 325.7 - 328.04 330.46 332.95 335.52 338.12 340.83 343.62 346.48 / - 16 18 9 1 294.78 277.79 276.88 276.6 276.68 277.01 277.54 278.23 279.06 280.02 281.1 282.29 - 283.6 285 286.51 288.12 289.83 291.64 293.54 295.53 297.61 299.79 302.06 304.41 306.85 309.38 312 314.7 - 317.48 320.35 323.3 326.33 329.44 332.64 335.91 339.26 / - 16 18 10 1 270.59 253.37 252.24 251.95 252.12 252.61 253.35 254.3 255.42 256.71 258.16 259.75 - 261.48 263.34 265.33 267.45 269.69 272.06 274.54 277.13 279.84 282.65 285.58 288.61 291.75 294.99 298.32 301.76 - 305.3 308.93 312.66 316.48 320.39 324.39 328.48 332.66 / - 16 18 11 1 227.56 224.24 223.31 223.31 223.86 224.79 226.02 227.55 229.32 231.23 233.4 235.76 - 238.3 241.02 243.9 246.94 250.13 253.48 256.97 260.6 264.37 268.27 272.3 276.45 280.72 285.11 289.62 294.23 - 299.31 304.16 309.12 314.18 319.33 324.59 329.94 335.39 / - 16 18 12 1 196.2 193.93 194.1 195.05 196.48 198.28 200.4 202.83 205.6 208.63 211.95 215.5 - 219.32 223.3 227.53 231.92 236.49 241.28 246.26 251.41 256.58 262.06 267.7 273.51 279.26 285.37 291.63 298.01 - 304.29 310.95 317.79 324.78 331.54 338.79 345.78 353.3 / - 16 18 13 1 171.04 171.54 173.74 176.83 180.3 184.06 188.07 192.31 196.78 201.48 206.4 211.54 - 216.9 222.47 228.25 234.24 240.44 246.83 253.42 260.2 267.17 274.32 281.65 289.16 296.84 304.69 312.71 320.9 - 329.24 337.74 346.4 355.21 364.17 373.29 382.55 391.95 / - 16 18 14 1 160.99 165.09 169.19 173.53 178.32 183.64 189.36 195.4 201.78 208.49 215.53 222.89 - 230.58 238.59 246.92 255.55 264.48 273.71 283.24 293.05 303.15 313.52 324.17 335.09 346.28 357.75 369.49 381.49 - 393.74 406.21 418.9 431.81 444.94 458.3 471.89 485.7 / - 16 18 15 1 157.22 163.37 169.16 175.59 182.72 190.57 199.12 208.35 218.22 228.74 239.82 251.44 - 263.57 276.2 289.32 302.9 316.95 331.45 346.39 361.8 377.65 393.93 410.66 427.81 445.39 463.39 481.8 500.61 - 519.84 539.47 559.51 579.96 600.81 622.07 643.73 665.78 / - 16 18 16 1 154.01 163.21 173.3 184.51 196.87 210.53 225.43 241.5 258.68 276.91 296.14 316.33 - 337.44 359.39 382.17 405.74 430.11 455.26 481.17 507.82 535.24 563.41 592.32 621.99 652.39 683.52 715.42 748.08 - 781.51 815.7 850.65 886.36 922.84 960.09 998.1 1036.87 / - 16 18 17 1 154.34 169.76 188.39 209.69 233.36 259.26 287.31 317.42 349.47 383.43 419.24 456.83 - 496.14 537.15 579.84 624.22 670.24 717.81 766.91 817.57 869.78 923.55 978.88 1035.74 1094.12 1153.95 1215.04 1277.3 - 1337.87 1398.46 1461.64 1525.5 1591.76 1658.77 1727.52 1796.51 / - 16 18 18 1 161.86 192.38 232.13 276.47 324.62 376.47 432.17 491.43 554.2 620.73 691.51 766.1 - 844.22 926.58 1012.69 1102.22 1195.18 1290.12 1384.51 1482.48 1583.2 1687.55 1794.31 1905.85 2018.82 2134.31 2252.68 2373.02 - 2497.67 2624.91 2754.71 2887.03 3021.88 3162.41 3302.71 3445.47 / - 16 18 19 1 183.72 248.12 323.02 409.59 506.08 610.35 724.23 846.85 977.69 1118.85 1268.13 1420.54 - 1577.86 1747.4 1926.92 2108.82 2297.23 2502.62 2706.21 2917.74 3133.54 3374.36 3604.57 3843.49 4089.99 4344.65 4605.3 4873.1 - 5145.36 5431.33 5719.24 6013.97 6310.26 6617.33 6937.98 7258.87 / - 16 18 20 1 238.97 355.99 485.08 628.06 803.75 1024.95 1268.33 1524.79 1807.1 2108.64 2426.53 2769.71 - 3132.72 3509.46 3924.48 4321.62 4768.4 5238 5695.52 6210.5 6707.58 7216.89 7747.41 8353.36 8920.27 9500.83 10087.79 10697.23 - 11412.87 12066.45 12743.58 13441.45 14160 14907.81 15677.12 16461.69 / - 16 19 1 1 322.8 322.17 322.01 322.07 322.27 322.58 322.97 323.45 324 324.62 325.3 326.06 - 326.87 327.75 328.7 329.7 330.77 331.9 333.09 334.34 335.65 337.03 338.46 339.96 341.51 343.13 344.8 346.54 - 348.33 350.19 352.11 354.08 356.12 358.21 360.37 362.59 / - 16 19 2 1 322.67 322.02 321.84 321.89 322.09 322.39 322.78 323.25 323.8 324.41 325.1 325.85 - 326.66 327.54 328.49 329.49 330.56 331.69 332.88 334.13 335.45 336.82 338.26 339.75 341.31 342.92 344.6 346.34 - 348.14 350 351.91 353.89 355.93 358.03 360.19 362.41 / - 16 19 3 1 322.41 321.68 321.47 321.5 321.67 321.96 322.35 322.81 323.35 323.97 324.65 325.4 - 326.21 327.09 328.03 329.04 330.11 331.24 332.43 333.69 335 336.38 337.82 339.32 340.88 342.5 344.18 345.92 - 347.73 349.59 351.51 353.5 355.54 357.65 359.81 362.04 / - 16 19 4 1 321.71 320.78 320.46 320.41 320.53 320.79 321.14 321.59 322.12 322.72 323.4 324.14 - 324.95 325.84 326.78 327.79 328.87 330.01 331.21 332.47 333.8 335.19 336.64 338.16 339.73 341.37 343.07 344.83 - 346.65 348.54 350.48 352.49 354.55 356.68 358.87 361.12 / - 16 19 5 1 320.26 318.9 318.32 318.11 318.13 318.31 318.61 319.01 319.52 320.1 320.77 321.51 - 322.33 323.22 324.18 325.2 326.3 327.46 328.69 329.98 331.34 332.76 334.25 335.8 337.42 339.1 340.84 342.65 - 344.52 346.45 348.45 350.51 352.63 354.81 357.06 359.36 / - 16 19 6 1 317.72 315.61 314.59 314.11 313.94 313.99 314.2 314.55 315.01 315.57 316.23 316.98 - 317.81 318.72 319.71 320.78 321.91 323.13 324.41 325.77 327.19 328.69 330.25 331.88 333.58 335.35 337.19 339.09 - 341.06 343.1 345.2 347.37 349.6 351.9 354.26 356.69 / - 16 19 7 1 313.49 310.16 307.85 307.16 306.87 306.85 307.02 307.36 307.83 308.42 309.12 309.92 - 310.82 311.8 312.88 314.03 315.27 316.59 317.99 319.46 321.02 322.65 324.35 326.13 327.98 329.91 331.9 333.97 - 336.11 338.33 340.61 342.96 345.39 347.88 350.44 353.03 / - 16 19 8 1 306.45 297.72 295.34 294.88 294.78 294.94 295.29 295.79 296.43 297.19 298.06 299.03 - 300.08 301.23 302.49 303.83 305.27 306.79 308.4 310.04 311.82 313.68 315.62 317.64 319.74 321.86 324.12 326.45 - 328.87 331.31 333.88 336.52 339.24 341.99 344.86 347.8 / - 16 19 9 1 294.86 277.56 276.6 276.31 276.38 276.72 277.25 277.95 278.79 279.77 280.87 282.08 - 283.41 284.84 286.38 288.02 289.76 291.6 293.53 295.57 297.69 299.91 302.22 304.62 307.11 309.69 312.35 315.11 - 317.95 320.87 323.88 326.97 330.14 333.4 336.74 340.16 / - 16 19 10 1 269.78 253.31 252.17 251.87 252.05 252.55 253.3 254.27 255.41 256.73 258.2 259.82 - 261.57 263.47 265.5 267.66 269.94 272.35 274.87 277.51 280.27 283.13 286.11 289.2 292.39 295.69 299.09 302.59 - 306.19 309.88 313.68 317.56 321.55 325.62 329.78 334.04 / - 16 19 11 1 227.66 224.34 223.42 223.43 223.95 224.9 226.2 227.71 229.49 231.49 233.7 236.09 - 238.58 241.33 244.24 247.31 250.54 253.92 257.45 261.12 265.13 269.09 273.18 277.39 281.73 286.18 290.76 295.45 - 300.24 305.15 310.16 315.28 320.5 326.27 331.71 337.24 / - 16 19 12 1 196.45 194.12 194.28 195.26 196.69 198.44 200.59 203.09 205.87 209.08 212.49 216.14 - 219.97 224 228.28 232.73 237.32 242.1 247.05 252.21 257.54 263.04 268.71 274.34 280.32 286.45 292.75 298.93 - 305.51 312.2 319.04 325.73 332.88 340.18 347.22 354.79 / - 16 19 13 1 171.2 172.18 174.97 178.31 181.93 185.78 189.83 194.09 198.56 203.23 208.12 213.22 - 218.53 224.05 229.78 235.71 241.84 248.18 254.7 261.43 268.34 275.43 282.71 290.17 297.81 305.62 313.6 321.75 - 330.06 338.54 347.18 355.97 364.93 374.03 383.29 392.7 / - 16 19 14 1 162.49 166.61 170.69 175.11 180.08 185.43 191.07 197.02 203.3 209.89 216.81 224.05 - 231.61 239.49 247.67 256.15 264.94 274.01 283.37 293.01 302.94 313.13 323.6 334.33 345.33 356.59 368.11 379.89 - 391.93 404.22 416.77 429.56 442.61 455.9 469.43 483.22 / - 16 19 15 1 159.03 164.79 170.52 176.87 183.91 191.64 200.06 209.19 218.95 229.29 240.18 251.58 - 263.48 275.86 288.72 302.05 315.82 330.04 344.7 359.8 375.33 391.28 407.66 424.45 441.65 459.27 477.29 495.71 - 514.54 533.77 553.4 573.43 593.86 614.68 635.9 657.51 / - 16 19 16 1 155.66 164.75 174.62 185.46 197.58 211 225.66 241.47 258.38 276.32 295.2 314.95 - 335.55 356.97 379.19 402.19 425.98 450.53 475.84 501.9 528.71 556.27 584.57 613.62 643.4 673.92 705.18 737.17 - 769.91 803.38 837.59 872.53 908.21 944.63 981.78 1019.67 / - 16 19 17 1 155.53 170.72 188.98 209.79 232.98 258.43 286.03 315.66 347.2 380.59 415.77 452.67 - 491.28 531.57 573.52 617.11 662.21 708.78 756.82 806.34 857.36 909.89 963.93 1019.48 1076.55 1135.1 1195.08 1256.35 - 1317.86 1379.34 1442.87 1508.09 1574.32 1641.91 1710.73 1781.63 / - 16 19 18 1 162.56 192.76 232.05 275.69 322.98 373.9 428.47 486.7 548.63 614.15 684.1 757.64 - 834.14 915.1 999.69 1087.29 1179.16 1274 1369.46 1468.11 1570.06 1675.37 1783.53 1894.46 2009.78 2127.03 2247.24 2370.95 - 2496.97 2625.52 2757.47 2892.13 3029.49 3172.21 3315.27 3461.03 / - 16 19 19 1 184.76 250.3 325.26 410.96 505.1 608.23 719.33 838.77 968.07 1106.26 1254.77 1407.86 - 1566.36 1737.53 1912.2 2100.72 2291.24 2498.87 2705.42 2918.85 3140.56 3367.79 3619.6 3864.04 4114.57 4373.71 4640.86 4916.34 - 5197.17 5485.03 5785.31 6086.2 6390.62 6704.28 7024.61 7360.27 / - 16 19 20 1 241.1 360.8 493.12 639.19 800.51 1010.17 1249.41 1502.83 1785.44 2083.38 2408.37 2746.01 - 3110.22 3494.31 3900.96 4315.22 4778.37 5218.53 5711.92 6190.38 6728.57 7246.39 7830.35 8382.96 8955.17 9542.43 10216.66 10842.21 - 11489.02 12156.55 12844.82 13548.2 14395.63 15154.51 15934.43 16735.21 / - 16 20 1 1 323.59 323.05 322.92 322.99 323.2 323.52 323.91 324.39 324.94 325.57 326.26 327.01 - 327.84 328.72 329.67 330.68 331.76 332.9 334.1 335.36 336.69 338.07 339.52 341.03 342.6 344.23 345.93 347.68 - 349.5 351.37 353.31 355.31 357.37 359.48 361.66 363.91 / - 16 20 2 1 323.26 322.62 322.43 322.47 322.65 322.94 323.33 323.8 324.34 324.96 325.65 326.41 - 327.23 328.12 329.07 330.09 331.17 332.31 333.52 334.79 336.12 337.52 338.97 340.49 342.07 343.71 345.42 347.18 - 349.01 350.9 352.85 354.86 356.93 359.07 361.26 363.52 / - 16 20 3 1 322.71 321.9 321.62 321.59 321.73 321.99 322.36 322.81 323.34 323.96 324.64 325.39 - 326.22 327.11 328.07 329.09 330.18 331.33 332.55 333.83 335.18 336.59 338.06 339.6 341.19 342.85 344.58 346.36 - 348.21 350.12 352.09 354.12 356.22 358.38 360.6 362.88 / - 16 20 4 1 321.8 320.71 320.26 320.13 320.2 320.41 320.74 321.17 321.68 322.29 322.96 323.72 - 324.55 325.44 326.41 327.45 328.55 329.72 330.96 332.26 333.63 335.06 336.56 338.12 339.75 341.44 343.19 345.01 - 346.89 348.84 350.85 352.92 355.06 357.26 359.52 361.85 / - 16 20 5 1 320.26 318.71 318 317.7 317.65 317.79 318.06 318.45 318.94 319.53 320.2 320.96 - 321.79 322.7 323.69 324.75 325.87 327.07 328.34 329.68 331.09 332.57 334.11 335.72 337.4 339.14 340.95 342.83 - 344.77 346.78 348.85 350.99 353.2 355.47 357.8 360.2 / - 16 20 6 1 317.7 315.4 314.26 313.69 313.47 313.48 313.67 314.01 314.47 315.03 315.7 316.47 - 317.32 318.26 319.28 320.38 321.55 322.81 324.14 325.54 327.02 328.57 330.2 331.89 333.66 335.5 337.41 339.39 - 341.44 343.55 345.74 348 350.32 352.72 355.18 357.71 / - 16 20 7 1 313.43 309.64 307.17 306.52 306.28 306.31 306.52 306.9 307.41 308.04 308.78 309.62 - 310.55 311.58 312.7 313.9 315.19 316.56 318.01 319.54 321.15 322.82 324.59 326.43 328.35 330.34 332.41 334.53 - 336.75 339.04 341.41 343.84 346.35 348.91 351.56 354.29 / - 16 20 8 1 306.33 296.64 294.34 294.13 294.23 294.53 295 295.6 296.33 297.17 298.11 299.15 - 300.29 301.52 302.82 304.19 305.67 307.24 308.89 310.63 312.44 314.34 316.3 318.38 320.5 322.74 325.03 327.42 - 329.88 332.41 335.04 337.73 340.52 343.35 346.26 349.27 / - 16 20 9 1 294.64 277.33 276.34 276.02 276.09 276.43 276.97 277.67 278.53 279.52 280.64 281.87 - 283.22 284.68 286.25 287.92 289.69 291.57 293.54 295.61 297.78 300.04 302.39 304.84 307.38 310.01 312.72 315.53 - 318.43 321.41 324.47 327.63 330.86 334.18 337.58 341.07 / - 16 20 10 1 268.78 253.25 252.09 251.79 251.98 252.49 253.26 254.24 255.41 256.74 258.24 259.89 - 261.68 263.61 265.67 267.87 270.19 272.64 275.21 277.89 280.7 283.62 286.65 289.79 293.04 296.39 299.86 303.42 - 307.08 310.84 314.71 318.66 322.71 326.86 331.1 335.43 / - 16 20 11 1 227.77 224.43 223.52 223.55 224.14 225.1 226.38 227.91 229.72 231.75 233.92 236.34 - 238.95 241.73 244.68 247.8 251.08 254.51 258.09 261.82 265.69 269.7 273.85 278.14 282.55 287.38 292.04 296.82 - 301.71 306.69 311.78 316.98 322.26 327.65 333.12 338.69 / - 16 20 12 1 197.1 194.46 194.53 195.62 197.38 199.47 201.95 204.67 207.62 210.81 214.36 218.06 - 221.91 225.95 230.16 234.61 239.16 243.95 248.85 253.92 259.2 264.65 270.28 275.87 281.82 287.93 294.19 300.34 - 306.88 313.57 320.08 327 334.05 341.29 348.25 355.75 / - 16 20 13 1 172.15 175.49 179.27 183.06 186.84 190.67 194.62 198.73 203.02 207.5 212.17 217.05 - 222.13 227.43 232.93 238.64 244.55 250.67 256.99 263.51 270.23 277.15 284.24 291.51 298.95 306.57 314.36 322.33 - 330.47 338.77 347.25 355.89 364.69 373.66 382.78 392.04 / - 16 20 14 1 166.13 170.39 175.15 179.94 184.83 189.93 195.29 200.94 206.89 213.15 219.73 226.62 - 233.82 241.34 249.15 257.27 265.69 274.39 283.39 292.66 302.22 312.04 322.13 332.49 343.11 354 365.14 376.54 - 388.19 400.09 412.24 424.63 437.27 450.16 463.28 476.64 / - 16 20 15 1 163 168.28 173.84 179.97 186.93 194.58 202.8 211.55 220.85 230.68 241.04 251.9 - 263.27 275.13 287.47 300.27 313.52 327.22 341.35 355.92 370.92 386.34 402.18 418.42 435.08 452.13 469.59 487.44 - 505.69 524.33 543.36 562.78 582.59 602.77 623.35 644.3 / - 16 20 16 1 160.12 168.53 177.45 187.7 199.26 212.11 226.15 241.32 257.53 274.7 292.78 311.71 - 331.47 352.06 373.45 395.63 418.58 442.3 466.78 492.01 517.98 544.69 572.13 600.3 629.19 658.81 689.15 720.2 - 751.96 784.44 817.62 851.51 886.11 921.4 957.4 994.09 / - 16 20 17 1 158.96 173.68 190.8 210.38 232.48 256.98 283.69 312.43 343.08 375.57 409.83 445.68 - 483.05 521.92 562.32 604.24 647.68 692.64 739.1 787.08 836.55 887.53 940 993.96 1049.39 1106.3 1164.69 1224.53 - 1285.82 1348.56 1412.74 1478.34 1545.37 1613.83 1683.68 1754.93 / - 16 20 18 1 164.69 193.78 231.63 274.12 320.36 370.04 423.57 480.43 541.96 605.65 674.23 744.56 - 820.22 899.37 981.97 1066.1 1155.8 1248.94 1345.34 1445.09 1548.36 1654.89 1764.65 1877.3 1993.25 2112.57 2234.94 2360.29 - 2488.61 2619.98 2754.36 2891.73 3033.41 3176.92 3323.35 3472.66 / - 16 20 19 1 186.92 252.88 329.44 413.74 505.54 605.54 714.06 831.16 957.36 1093.16 1237.62 1391.1 - 1551.41 1722.82 1899.9 2089 2282.5 2489.5 2699.23 2916.45 3141.25 3373.17 3624.91 3873.44 4129.61 4393.35 4664.27 4945.26 - 5232.47 5525.54 5825.76 6140.88 6456 6778.23 7107.49 7443.76 / - 16 20 20 1 245.52 369.67 506.71 656.6 819.66 995.95 1185.27 1387.47 1650.12 1933.85 2240.42 2572.21 - 2920.33 3294.75 3676.95 4095.54 4542.35 4986.21 5484.72 5973.86 6485.87 7021.23 7580.58 8179.38 8757.35 9392.22 10026.85 10640.46 - 11356.55 12017.7 12794.76 13505.02 14236.47 14989.18 15886.38 16689.24 / - 17 1 1 1 307.3 307.18 307.27 307.49 307.8 308.19 308.65 309.18 309.78 310.43 311.15 311.92 - 312.76 313.64 314.59 315.59 316.65 317.76 318.92 320.14 321.42 322.75 324.13 325.56 327.05 328.59 330.18 331.83 - 333.53 335.28 337.08 338.94 340.85 342.81 344.82 346.89 / - 17 1 2 1 307.23 307.11 307.19 307.4 307.71 308.11 308.57 309.1 309.69 310.35 311.06 311.84 - 312.67 313.56 314.51 315.51 316.56 317.68 318.84 320.06 321.34 322.67 324.05 325.48 326.97 328.51 330.11 331.76 - 333.46 335.21 337.01 338.87 340.78 342.74 344.76 346.83 / - 17 1 3 1 307.11 306.97 307.05 307.26 307.57 307.96 308.42 308.95 309.54 310.2 310.91 311.69 - 312.52 313.41 314.36 315.36 316.42 317.53 318.7 319.92 321.19 322.52 323.91 325.34 326.84 328.38 329.98 331.62 - 333.33 335.08 336.89 338.75 340.66 342.63 344.65 346.71 / - 17 1 4 1 306.89 306.73 306.79 307 307.3 307.69 308.15 308.67 309.27 309.92 310.64 311.41 - 312.25 313.14 314.08 315.09 316.15 317.26 318.43 319.65 320.93 322.26 323.65 325.09 326.58 328.13 329.73 331.39 - 333.09 334.85 336.66 338.53 340.44 342.42 344.44 346.51 / - 17 1 5 1 306.47 306.27 306.32 306.51 306.81 307.19 307.64 308.17 308.76 309.42 310.13 310.91 - 311.74 312.64 313.59 314.59 315.65 316.77 317.94 319.17 320.45 321.79 323.18 324.63 326.13 327.68 329.29 330.95 - 332.66 334.43 336.25 338.12 340.05 342.03 344.06 346.14 / - 17 1 6 1 305.66 305.39 305.41 305.59 305.88 306.25 306.7 307.23 307.82 308.47 309.19 309.97 - 310.81 311.7 312.66 313.67 314.73 315.86 317.04 318.27 319.57 320.91 322.31 323.77 325.28 326.84 328.46 330.14 - 331.86 333.64 335.48 337.37 339.31 341.31 343.36 345.46 / - 17 1 7 1 304.05 303.7 303.68 303.83 304.1 304.47 304.92 305.44 306.03 306.69 307.41 308.19 - 309.04 309.94 310.9 311.93 313.01 314.15 315.34 316.59 317.9 319.26 320.69 322.16 323.69 325.28 326.93 328.63 - 330.38 332.19 334.05 335.97 337.95 339.98 342.06 344.2 / - 17 1 8 1 300.85 300.39 300.31 300.43 300.69 301.05 301.5 302.02 302.62 303.29 304.02 304.82 - 305.68 306.61 307.59 308.64 309.75 310.92 312.14 313.43 314.78 316.18 317.64 319.16 320.74 322.38 324.07 325.82 - 327.63 329.5 331.42 333.4 335.44 337.54 339.69 341.9 / - 17 1 9 1 294.56 293.82 293.57 293.59 293.77 294.08 294.51 295.02 295.62 296.31 297.06 297.9 - 298.8 299.77 300.81 301.92 303.1 304.34 305.65 307.02 308.46 309.96 311.52 313.15 314.84 316.6 318.42 320.3 - 322.24 324.24 326.31 328.44 330.63 332.89 335.2 337.58 / - 17 1 10 1 281.97 277.54 276.66 276.32 276.34 276.58 277 277.56 278.26 279.07 279.99 281.01 - 282.12 283.33 284.62 286 287.47 288.99 290.62 292.33 294.12 295.99 297.93 299.96 302.02 304.19 306.44 308.76 - 311.15 313.61 316.12 318.72 321.4 324.14 326.96 329.83 / - 17 1 11 1 258.17 249.09 247.95 247.65 247.83 248.34 249.1 250.08 251.24 252.57 254.05 255.68 - 257.44 259.34 261.37 263.51 265.78 268.16 270.66 273.26 275.97 278.76 281.64 284.61 287.68 290.83 294.07 297.4 - 300.82 304.31 307.88 311.53 315.24 319.02 322.91 326.83 / - 17 1 12 1 222.41 219.29 218.39 218.53 219.25 220.45 221.93 223.7 225.74 228.01 230.5 233.19 - 236.06 239.13 242.36 245.76 249.31 253.1 256.96 260.96 265.1 269.37 273.97 278.49 283.14 287.89 292.76 297.73 - 303.12 308.32 313.61 319 324.49 330.07 336.17 341.95 / - 17 1 13 1 195.14 194.18 194.69 195.98 197.86 200.29 203.14 206.35 209.86 213.66 217.71 222 - 226.52 231.27 236.21 241.96 247.64 253.46 259.48 265.65 272 278.46 285.1 291.91 298.88 306.01 313.31 320.76 - 328.36 336.08 343.95 352.01 360.22 368.58 376.68 385.32 / - 17 1 14 1 179.17 180.83 183.77 187.66 191.97 196.63 201.62 206.98 212.68 218.73 225.12 231.84 - 238.87 246.2 253.83 261.75 269.95 278.42 287.17 296.17 305.44 314.95 324.7 334.69 344.91 355.36 366.04 377.77 - 390.02 402.1 414.29 426.61 439.34 452.03 465.11 478.12 / - 17 1 15 1 175.72 179.48 184.23 189.85 196.29 203.51 211.52 220.23 229.56 239.47 249.96 261 - 272.57 284.67 297.29 310.41 324.04 338.16 352.78 367.84 383.32 399.17 415.4 432.03 449.05 466.47 484.3 502.53 - 521.18 540.25 560.87 581.95 603.35 624.94 647.21 669.6 / - 17 1 16 1 173.8 180.82 189.3 199.39 211.05 224.13 238.55 254.21 271.05 288.94 307.86 327.76 - 348.62 370.36 392.98 416.53 440.96 466.26 492.44 519.51 547.46 576.25 605.85 636.27 667.3 699.11 731.82 766.27 - 802.43 838.83 876.04 913.49 951.83 990.69 1029.29 1068.78 / - 17 1 17 1 174.19 187.59 204.72 224.97 248.03 273.69 301.79 332.17 364.72 399.31 435.96 474.42 - 514.71 556.82 600.63 646.12 693.62 743.26 794.78 848.01 902.95 959.55 1019.38 1079.71 1139.89 1198.88 1254.17 1301.89 - 1346.04 1387.83 1434.49 1485.19 1533.83 1584.04 1633.75 1688.42 / - 17 1 18 1 181.33 209.74 246.16 288.76 336.48 388.88 445.68 507.37 573.45 642.9 717.12 796.19 - 879.88 967.84 1058.97 1152.09 1247.41 1334.3 1421.08 1511.79 1603.99 1699.91 1795.27 1895.58 1995.55 2098.67 2205 2308.7 - 2418.36 2531.03 2648.32 2763.03 2878.57 2997.26 3117.44 3238.56 / - 17 1 19 1 199.56 261.54 338.44 426.64 524.29 632.89 752.43 882.63 1024.04 1174.62 1317.13 1460.21 - 1604.6 1754.84 1919.13 2078.95 2240.93 2409.93 2582.4 2762.83 2941.05 3138.32 3330.68 3521.99 3724.22 3928.84 4138.71 4351.38 - 4565.18 4800.22 5021.27 5257.33 5496.91 5729.36 5978.82 6231.54 / - 17 1 20 1 249.33 355.18 504.82 686.94 901.92 1140.16 1382.67 1630.17 1888.42 2164.41 2456.67 2755.11 - 3083.45 3408.22 3747.78 4134.51 4502.4 4881.77 5283.66 5690.17 6111.65 6548.01 6992.78 7436.99 7925.82 8405 8886.49 9386.16 - 9904.42 10434.08 11002.57 11558.72 12129.27 12701.33 13308.93 13932.08 / - 17 2 1 1 309.16 309.02 309.11 309.32 309.63 310.02 310.48 311.01 311.61 312.26 312.98 313.76 - 314.59 315.48 316.43 317.44 318.5 319.61 320.78 322.01 323.28 324.62 326 327.45 328.94 330.49 332.09 333.74 - 335.45 337.21 339.02 340.89 342.8 344.78 346.8 348.88 / - 17 2 2 1 309.09 308.95 309.02 309.23 309.54 309.93 310.39 310.93 311.52 312.18 312.89 313.67 - 314.51 315.4 316.35 317.35 318.41 319.53 320.7 321.92 323.2 324.54 325.92 327.36 328.86 330.41 332.01 333.67 - 335.37 337.14 338.95 340.82 342.74 344.71 346.73 348.81 / - 17 2 3 1 308.96 308.81 308.88 309.08 309.39 309.78 310.24 310.77 311.36 312.02 312.74 313.51 - 314.35 315.24 316.19 317.2 318.26 319.37 320.54 321.77 323.05 324.39 325.78 327.22 328.72 330.27 331.87 333.53 - 335.24 337 338.82 340.69 342.61 344.59 346.61 348.69 / - 17 2 4 1 308.73 308.55 308.61 308.81 309.11 309.5 309.96 310.49 311.08 311.74 312.45 313.23 - 314.07 314.96 315.91 316.91 317.98 319.09 320.27 321.5 322.78 324.12 325.51 326.96 328.46 330.01 331.62 333.28 - 334.99 336.76 338.58 340.45 342.38 344.36 346.39 348.48 / - 17 2 5 1 308.29 308.07 308.12 308.31 308.6 308.98 309.44 309.96 310.56 311.21 311.93 312.71 - 313.54 314.44 315.39 316.4 317.46 318.59 319.76 320.99 322.28 323.62 325.02 326.47 327.98 329.54 331.15 332.82 - 334.54 336.32 338.15 340.03 341.96 343.95 345.99 348.09 / - 17 2 6 1 307.44 307.16 307.18 307.35 307.64 308.01 308.46 308.99 309.58 310.24 310.95 311.73 - 312.57 313.47 314.43 315.44 316.51 317.64 318.82 320.06 321.36 322.71 324.12 325.58 327.1 328.67 330.29 331.97 - 333.71 335.5 337.34 339.24 341.19 343.2 345.26 347.37 / - 17 2 7 1 305.75 305.39 305.37 305.52 305.79 306.16 306.61 307.13 307.72 308.38 309.1 309.89 - 310.74 311.64 312.61 313.64 314.72 315.86 317.06 318.32 319.63 321 322.43 323.91 325.45 327.04 328.69 330.4 - 332.16 333.98 335.85 337.78 339.77 341.81 343.9 346.05 / - 17 2 8 1 302.41 301.95 301.87 302 302.25 302.61 303.06 303.59 304.19 304.86 305.59 306.39 - 307.26 308.19 309.18 310.23 311.34 312.51 313.74 315.03 316.38 317.79 319.26 320.79 322.38 324.02 325.72 327.48 - 329.3 331.18 333.11 335.1 337.15 339.26 341.42 343.65 / - 17 2 9 1 295.81 294.99 294.69 294.68 294.84 295.14 295.56 296.07 296.67 297.35 298.11 298.95 - 299.86 300.83 301.88 303 304.18 305.44 306.76 308.14 309.59 311.1 312.68 314.33 316.04 317.81 319.65 321.55 - 323.51 325.54 327.63 329.78 332 334.28 336.62 339.02 / - 17 2 10 1 282.83 277.85 276.91 276.59 276.6 276.84 277.27 277.85 278.56 279.39 280.32 281.36 - 282.5 283.73 285.05 286.47 287.93 289.51 291.17 292.92 294.74 296.65 298.6 300.66 302.8 305.01 307.3 309.66 - 312.07 314.57 317.15 319.8 322.52 325.29 328.16 331.09 / - 17 2 11 1 258.12 249.14 248.02 247.73 247.93 248.46 249.25 250.25 251.43 252.79 254.3 255.96 - 257.75 259.68 261.74 263.93 266.23 268.65 271.19 273.84 276.59 279.45 282.42 285.48 288.62 291.85 295.16 298.55 - 302.03 305.6 309.24 312.97 316.75 320.62 324.58 328.6 / - 17 2 12 1 222.5 219.42 218.51 218.7 219.49 220.66 222.21 224.01 226.06 228.36 230.87 233.59 - 236.5 239.59 242.9 246.33 249.93 253.76 257.67 261.71 265.89 270.32 274.76 279.33 284.02 289.08 294.01 299.05 - 304.19 309.43 314.77 320.59 326.14 331.79 337.53 343.37 / - 17 2 13 1 195.21 194.32 194.87 196.19 198.11 200.58 203.47 206.71 210.26 214.09 218.18 222.51 - 227.07 231.85 236.85 242.21 248.17 254.1 260.2 266.39 272.76 279.33 286.02 292.88 300.12 307.32 314.68 322.21 - 329.6 337.42 345.35 353.43 361.7 370.12 378.69 386.99 / - 17 2 14 1 179.21 180.97 183.91 187.85 192.21 196.91 201.95 207.34 213.08 219.17 225.61 232.37 - 239.44 246.82 254.49 262.46 270.71 279.24 288.03 297.09 306.41 315.98 325.79 335.84 346.12 356.63 367.37 378.62 - 390.69 403.26 415.6 428.17 440.81 453.55 466.54 479.95 / - 17 2 15 1 175.74 179.6 184.41 190.09 196.57 203.82 211.84 220.58 229.95 239.91 250.44 261.53 - 273.15 285.3 297.96 311.13 324.8 338.97 353.63 368.76 384.31 400.23 416.53 433.23 450.32 467.82 485.71 504.02 - 522.74 541.88 561.83 583.02 604.61 626.5 648.69 671.69 / - 17 2 16 1 173.68 180.83 189.46 199.6 211.29 224.4 238.85 254.54 271.41 289.36 308.32 328.27 - 349.17 370.98 393.66 417.25 441.71 467.04 493.25 520.33 548.3 577.11 606.73 637.15 668.26 700.12 732.86 766.94 - 802.72 839.26 876.73 914.49 952.8 991.44 1030.34 1069.85 / - 17 2 17 1 174.08 187.59 204.81 225.14 248.23 273.91 302.02 332.41 364.98 399.57 436.22 474.72 - 515.02 557.14 600.94 646.4 693.84 743.41 794.98 848.23 903.18 959.75 1018.91 1079.42 1140.28 1199.38 1255.77 1304.8 - 1346.79 1391.73 1439.02 1489.35 1537.51 1590.28 1640.33 1696.56 / - 17 2 18 1 181.25 209.81 246.34 289.11 336.76 389.15 445.89 507.47 573.5 642.86 716.89 795.8 - 879.31 967.17 1058.33 1151.5 1246.87 1334.82 1423.46 1516.01 1609.04 1700.1 1787.5 1880.3 1974.69 2068.88 2169 2264.77 - 2365.3 2466.59 2572.16 2680.1 2788.18 2897.29 3007.44 3117.74 / - 17 2 19 1 199.46 261.12 338.05 426.11 524.44 632.39 750.38 882.11 1023.22 1169.78 1316.72 1460.39 - 1605.4 1756.45 1914.19 2084.81 2248.9 2419.02 2593.77 2776.3 2956.61 3155.67 3350.01 3543.59 3747.8 3954.6 4166.62 4381.77 - 4597.99 4835.36 5058.99 5297.27 5539.11 5774.59 6026.53 6281.75 / - 17 2 20 1 249.24 355.13 502.19 683.97 896.82 1133.81 1379.59 1621.02 1890.05 2167.17 2448.75 2760.56 - 3090.64 3417.07 3758.44 4147.17 4518.93 4903.46 5310.49 5720.58 6148.67 6590.27 7040.07 7489.33 7983.52 8467.88 8961.84 9458.98 - 9982.25 10517.4 11066.03 11654.35 12230.87 12809.22 13423.24 14053.08 / - 17 3 1 1 311.02 310.86 310.94 311.15 311.46 311.85 312.31 312.84 313.43 314.09 314.81 315.59 - 316.42 317.32 318.27 319.28 320.34 321.46 322.63 323.86 325.15 326.48 327.88 329.32 330.82 332.38 333.99 335.65 - 337.36 339.13 340.95 342.83 344.75 346.73 348.77 350.85 / - 17 3 2 1 310.94 310.78 310.86 311.06 311.37 311.76 312.22 312.75 313.34 314 314.72 315.5 - 316.33 317.23 318.18 319.19 320.25 321.37 322.54 323.77 325.06 326.4 327.79 329.24 330.74 332.3 333.9 335.57 - 337.28 339.05 340.88 342.75 344.68 346.66 348.7 350.79 / - 17 3 3 1 310.81 310.64 310.7 310.91 311.21 311.6 312.06 312.59 313.18 313.84 314.56 315.34 - 316.17 317.07 318.02 319.03 320.09 321.21 322.39 323.62 324.9 326.24 327.64 329.09 330.59 332.15 333.76 335.42 - 337.14 338.91 340.74 342.62 344.55 346.53 348.57 350.66 / - 17 3 4 1 310.57 310.37 310.43 310.62 310.92 311.31 311.77 312.29 312.89 313.55 314.26 315.04 - 315.88 316.77 317.73 318.74 319.8 320.92 322.1 323.33 324.62 325.96 327.36 328.81 330.32 331.88 333.49 335.16 - 336.88 338.66 340.49 342.37 344.31 346.3 348.34 350.44 / - 17 3 5 1 310.11 309.87 309.91 310.1 310.39 310.77 311.23 311.75 312.35 313 313.72 314.5 - 315.34 316.24 317.19 318.2 319.27 320.39 321.58 322.81 324.1 325.45 326.85 328.31 329.82 331.39 333.01 334.68 - 336.41 338.2 340.03 341.92 343.87 345.87 347.92 350.03 / - 17 3 6 1 309.21 308.92 308.93 309.11 309.39 309.76 310.22 310.74 311.33 311.99 312.71 313.49 - 314.33 315.23 316.19 317.21 318.28 319.41 320.6 321.84 323.14 324.5 325.91 327.38 328.9 330.48 332.11 333.8 - 335.54 337.34 339.19 341.1 343.06 345.08 347.15 349.27 / - 17 3 7 1 307.45 307.08 307.05 307.2 307.48 307.84 308.29 308.81 309.41 310.07 310.79 311.58 - 312.43 313.34 314.3 315.33 316.42 317.56 318.77 320.03 321.35 322.72 324.15 325.64 327.19 328.79 330.45 332.16 - 333.93 335.76 337.64 339.58 341.57 343.62 345.73 347.89 / - 17 3 8 1 303.96 303.49 303.42 303.54 303.8 304.16 304.61 305.14 305.74 306.41 307.15 307.95 - 308.82 309.75 310.74 311.8 312.91 314.09 315.32 316.62 317.98 319.39 320.87 322.4 323.99 325.65 327.36 329.13 - 330.95 332.84 334.78 336.79 338.85 340.97 343.14 345.38 / - 17 3 9 1 297.01 296.1 295.75 295.69 295.84 296.12 296.53 297.03 297.63 298.31 299.07 299.91 - 300.82 301.81 302.86 303.99 305.19 306.45 307.78 309.18 310.65 312.18 313.78 315.44 317.17 318.96 320.82 322.74 - 324.73 326.78 328.89 331.07 333.31 335.62 337.98 340.42 / - 17 3 10 1 283.68 278.1 277.13 276.79 276.8 277.05 277.49 278.08 278.8 279.65 280.61 281.67 - 282.83 284.09 285.44 286.84 288.37 289.98 291.68 293.46 295.33 297.23 299.26 301.36 303.54 305.79 308.09 310.5 - 312.98 315.53 318.16 320.84 323.61 326.45 329.36 332.33 / - 17 3 11 1 258.03 249.2 248.09 247.83 248.05 248.6 249.4 250.43 251.64 253.01 254.55 256.24 - 258.07 260.03 262.12 264.34 266.69 269.15 271.73 274.42 277.22 280.12 283.14 286.25 289.47 292.78 296.18 299.68 - 303.24 306.88 310.59 314.39 318.27 322.22 326.25 330.34 / - 17 3 12 1 222.6 219.53 218.65 218.88 219.68 220.91 222.46 224.31 226.38 228.71 231.25 234 - 236.94 240.06 243.42 246.9 250.58 254.37 258.37 262.46 266.69 271.16 275.66 280.41 285.15 290.01 294.99 300.37 - 305.58 310.89 316.3 321.81 327.42 333.53 339.34 345.25 / - 17 3 13 1 195.29 194.46 195.05 196.41 198.37 200.87 203.79 207.07 210.65 214.52 218.65 223.02 - 227.62 232.44 237.48 242.71 248.53 254.68 260.85 267.11 273.64 280.25 286.94 294.04 301.14 308.39 315.81 323.39 - 331.13 339.02 346.75 354.89 363.18 371.67 380.3 389.1 / - 17 3 14 1 179.27 181.12 184.14 188.04 192.45 197.19 202.27 207.7 213.49 219.62 226.09 232.9 - 240.01 247.43 255.16 263.17 271.47 280.05 288.9 298.01 307.38 317 326.87 336.98 347.33 357.9 368.71 379.74 - 391.59 403.99 416.88 429.48 442.13 455.21 468.41 481.76 / - 17 3 15 1 175.76 179.73 184.62 190.34 196.86 204.14 212.17 220.93 230.35 240.35 250.93 262.06 - 273.72 285.92 298.63 311.84 325.56 339.77 354.48 369.67 385.28 401.28 417.66 434.42 451.58 469.15 487.12 505.5 - 524.29 543.49 563.13 584.44 605.76 627.9 650.29 673.18 / - 17 3 16 1 173.58 180.85 189.63 199.81 211.53 224.67 239.15 254.87 271.76 289.77 308.77 328.77 - 349.72 371.59 394.32 417.95 442.45 467.8 494.04 521.14 549.12 577.95 607.56 637.98 669.16 701.08 733.85 767.51 - 803.38 840.06 877.36 915.06 953.65 992.62 1031.55 1070.92 / - 17 3 17 1 173.98 187.6 204.93 225.31 248.44 274.14 302.25 332.65 365.21 399.82 436.46 474.99 - 515.3 557.42 601.22 646.63 694 743.49 795.07 848.37 903.3 959.86 1018.7 1079.41 1140.27 1199.95 1256.66 1306.96 - 1349.53 1397.87 1446.08 1496.05 1547.86 1602.83 1654.64 1711.64 / - 17 3 18 1 181.18 209.89 246.52 289.34 337.16 389.42 446.37 507.56 573.5 643.08 716.65 795.35 - 878.67 966.38 1057.57 1150.84 1246.19 1330.76 1413.97 1501.42 1588.52 1679.93 1769.25 1863.42 1957.96 2054.88 2155.56 2252.48 - 2355.48 2459.61 2564.65 2675.78 2784.27 2894 3002.72 3114.57 / - 17 3 19 1 199.36 260.93 338.08 426.25 523.67 631.85 750.13 881.33 1022.37 1168.77 1316.22 1454.67 - 1606.15 1757.84 1916.38 2088.95 2255.48 2427.96 2604.17 2790.02 2972.75 3164.17 3370.26 3566.17 3772.55 3981.64 4195.9 4413.63 - 4632.46 4872.13 5098.66 5339.22 5583.44 5821.94 6076.67 6334.5 / - 17 3 20 1 249.15 355.08 500.29 680.99 892.23 1133.04 1376.46 1622.15 1881.74 2158.84 2452.85 2766.12 - 3076.01 3426.2 3769.41 4129.27 4534.06 4922.29 5331.87 5749.21 6184.5 6631.68 7086.98 7541.65 8021.91 8531.67 9031.08 9533.71 - 10062.44 10603.38 11158.76 11753.89 12326.14 12922.04 13543.08 14179.88 / - 17 4 1 1 312.87 312.7 312.77 312.98 313.28 313.67 314.13 314.66 315.26 315.92 316.64 317.42 - 318.25 319.15 320.1 321.11 322.18 323.3 324.48 325.71 327 328.34 329.74 331.19 332.7 334.26 335.88 337.54 - 339.27 341.04 342.87 344.76 346.69 348.68 350.73 352.83 / - 17 4 2 1 312.79 312.62 312.68 312.89 313.19 313.58 314.04 314.57 315.17 315.82 316.54 317.32 - 318.16 319.06 320.01 321.02 322.09 323.21 324.39 325.62 326.91 328.25 329.65 331.11 332.61 334.18 335.79 337.46 - 339.18 340.96 342.79 344.68 346.62 348.61 350.65 352.75 / - 17 4 3 1 312.65 312.47 312.53 312.73 313.03 313.41 313.87 314.4 315 315.66 316.37 317.15 - 317.99 318.89 319.84 320.85 321.92 323.04 324.22 325.46 326.75 328.09 329.49 330.95 332.46 334.02 335.64 337.31 - 339.04 340.82 342.65 344.54 346.48 348.47 350.52 352.62 / - 17 4 4 1 312.4 312.19 312.24 312.43 312.73 313.11 313.57 314.1 314.69 315.35 316.07 316.85 - 317.69 318.59 319.54 320.55 321.62 322.75 323.93 325.16 326.46 327.8 329.2 330.66 332.17 333.74 335.36 337.04 - 338.77 340.55 342.39 344.28 346.23 348.23 350.28 352.39 / - 17 4 5 1 311.92 311.67 311.7 311.89 312.18 312.56 313.01 313.54 314.13 314.79 315.51 316.29 - 317.13 318.03 318.98 320 321.07 322.2 323.38 324.62 325.92 327.27 328.68 330.14 331.66 333.23 334.86 336.54 - 338.28 340.07 341.91 343.81 345.77 347.77 349.84 351.95 / - 17 4 6 1 310.98 310.68 310.69 310.86 311.14 311.51 311.96 312.49 313.08 313.74 314.46 315.24 - 316.08 316.99 317.95 318.97 320.04 321.18 322.37 323.62 324.92 326.28 327.7 329.17 330.7 332.28 333.92 335.62 - 337.37 339.17 341.04 342.95 344.92 346.95 349.03 351.16 / - 17 4 7 1 309.14 308.76 308.73 308.88 309.15 309.52 309.97 310.49 311.08 311.74 312.47 313.26 - 314.11 315.02 315.99 317.02 318.11 319.26 320.46 321.73 323.05 324.43 325.87 327.36 328.91 330.52 332.19 333.91 - 335.69 337.52 339.41 341.36 343.36 345.42 347.54 349.71 / - 17 4 8 1 305.5 305.02 304.95 305.08 305.34 305.7 306.15 306.67 307.28 307.95 308.69 309.49 - 310.36 311.29 312.29 313.35 314.47 315.65 316.89 318.19 319.55 320.97 322.45 323.99 325.59 327.25 328.97 330.75 - 332.59 334.48 336.44 338.45 340.52 342.65 344.84 347.09 / - 17 4 9 1 298.17 297.14 296.73 296.63 296.74 297.01 297.41 297.91 298.51 299.19 299.96 300.8 - 301.72 302.74 303.81 304.95 306.16 307.43 308.78 310.2 311.68 313.23 314.84 316.53 318.27 320.09 321.97 323.91 - 325.92 328 330.13 332.34 334.6 336.94 339.33 341.79 / - 17 4 10 1 284.55 278.31 277.3 276.95 276.95 277.2 277.65 278.25 278.99 279.85 280.83 281.92 - 283.1 284.39 285.77 287.2 288.76 290.41 292.15 293.97 295.86 297.81 299.88 302.02 304.25 306.51 308.89 311.34 - 313.87 316.48 319.12 321.87 324.7 327.59 330.53 333.57 / - 17 4 11 1 257.91 249.27 248.17 247.93 248.16 248.73 249.56 250.61 251.84 253.24 254.81 256.52 - 258.38 260.38 262.51 264.77 267.15 269.65 272.27 275 277.85 280.8 283.86 287.03 290.29 293.66 297.12 300.68 - 304.33 308.07 311.9 315.8 319.76 323.79 327.9 332.09 / - 17 4 12 1 222.71 219.63 218.8 219.06 219.9 221.15 222.74 224.6 226.72 229.08 231.65 234.43 - 237.41 240.57 243.91 247.48 251.15 254.99 259.06 263.19 267.53 272.01 276.55 281.35 286.15 291.07 296.25 301.4 - 306.66 312.02 317.83 323.41 329.09 334.86 340.73 347.15 / - 17 4 13 1 195.38 194.61 195.24 196.64 198.62 201.16 204.12 207.43 211.05 214.95 219.12 223.53 - 228.17 233.03 238.11 243.38 248.86 255.06 261.46 267.8 274.3 281.07 287.91 295.01 302.16 309.47 316.94 324.58 - 332.37 340.33 348.44 356.66 365.04 373.22 381.92 390.78 / - 17 4 14 1 179.33 181.29 184.38 188.24 192.7 197.48 202.6 208.08 213.9 220.07 226.58 233.43 - 240.59 248.05 255.82 263.88 272.23 280.86 289.76 298.93 308.35 318.03 327.96 338.12 348.53 359.17 370.04 381.13 - 392.45 404.93 417.69 430.59 443.75 456.8 470.01 483.39 / - 17 4 15 1 175.77 179.88 184.83 190.6 197.15 204.47 212.51 221.3 230.74 240.79 251.41 262.58 - 274.3 286.54 299.29 312.55 326.31 340.57 355.32 370.56 386.24 402.31 418.76 435.6 452.83 470.47 488.51 506.95 - 525.82 545.1 564.8 584.93 606.79 629.14 651.84 674.72 / - 17 4 16 1 173.48 180.89 189.8 200.03 211.78 224.95 239.45 255.19 272.11 290.15 309.21 329.25 - 350.24 372.17 394.97 418.64 443.16 468.55 494.8 521.92 549.92 578.75 608.37 638.77 670.01 701.99 734.8 768.48 - 803.48 840.22 877.69 915.69 954.59 993.39 1032.74 1071.99 / - 17 4 17 1 173.9 187.62 205.05 225.49 248.65 274.36 302.48 332.87 365.44 400.06 436.68 475.23 - 515.54 557.66 601.45 646.82 694.1 743.52 795 848.39 903.35 959.88 1017.89 1078.72 1139.99 1200.42 1257.81 1308.91 - 1353.53 1403.49 1453.3 1504.94 1558.41 1614.99 1668.52 1727.12 / - 17 4 18 1 181.11 209.97 246.67 289.56 337.41 389.7 446.56 507.65 573.46 642.97 716.36 794.86 - 877.98 965.46 1056.69 1150.05 1244.89 1330.79 1414.97 1502.87 1591.1 1684.28 1774.7 1869.84 1965.52 2063.57 2165.46 2262.09 - 2366.26 2473.35 2579.69 2687.3 2802.2 2911.35 3023.48 3136.88 / - 17 4 19 1 199.27 260.64 337.66 425.63 523.8 631.73 749.87 878.32 1018.42 1167.64 1315.61 1454.71 - 1606.83 1759.18 1918.5 2091.9 2260.08 2435.27 2614.18 2802.1 2988.02 3182.09 3390.85 3589.48 3798.51 4009.98 4226.77 4447.07 - 4668.8 4902.4 5146.04 5383.46 5630.19 5871.83 6129.29 6390.13 / - 17 4 20 1 249.06 355.05 498.07 677.95 891.27 1126.56 1373.56 1618.07 1882.81 2161.6 2457.08 2771.86 - 3086.3 3435.68 3780.77 4142.66 4549.8 4940.38 5353.34 5773.26 6218.34 6655.27 7132.94 7593.48 8079.66 8595.96 9101.23 9609.76 - 10144.41 10691.84 11254.3 11830.86 12436.45 13039.7 13668.17 14312.65 / - 17 5 1 1 314.78 314.57 314.62 314.82 315.12 315.5 315.96 316.49 317.09 317.75 318.47 319.25 - 320.08 320.98 321.94 322.95 324.02 325.14 326.32 327.56 328.85 330.2 331.6 333.06 334.57 336.14 337.76 339.44 - 341.17 342.95 344.79 346.68 348.63 350.63 352.68 354.79 / - 17 5 2 1 314.7 314.48 314.53 314.73 315.03 315.41 315.87 316.4 316.99 317.65 318.37 319.15 - 319.99 320.89 321.84 322.85 323.92 325.05 326.23 327.47 328.76 330.11 331.51 332.97 334.48 336.05 337.67 339.35 - 341.08 342.87 344.71 346.6 348.55 350.55 352.6 354.71 / - 17 5 3 1 314.55 314.33 314.37 314.56 314.86 315.24 315.7 316.22 316.82 317.48 318.2 318.98 - 319.81 320.71 321.67 322.68 323.75 324.88 326.06 327.3 328.59 329.94 331.35 332.81 334.32 335.89 337.51 339.19 - 340.93 342.71 344.55 346.45 348.4 350.4 352.46 354.57 / - 17 5 4 1 314.28 314.04 314.07 314.25 314.55 314.93 315.38 315.91 316.5 317.16 317.88 318.66 - 319.5 320.4 321.35 322.37 323.44 324.57 325.75 326.99 328.29 329.64 331.05 332.51 334.03 335.6 337.23 338.91 - 340.64 342.44 344.28 346.18 348.14 350.14 352.21 354.32 / - 17 5 5 1 313.77 313.49 313.51 313.69 313.97 314.35 314.8 315.33 315.92 316.58 317.3 318.08 - 318.92 319.82 320.78 321.79 322.87 324 325.18 326.43 327.73 329.08 330.5 331.96 333.49 335.06 336.7 338.39 - 340.13 341.93 343.78 345.69 347.65 349.67 351.74 353.87 / - 17 5 6 1 312.78 312.46 312.45 312.61 312.89 313.26 313.71 314.24 314.83 315.49 316.21 316.99 - 317.83 318.74 319.7 320.72 321.8 322.94 324.13 325.38 326.69 328.06 329.48 330.95 332.49 334.08 335.73 337.43 - 339.18 341 342.87 344.79 346.77 348.8 350.9 353.04 / - 17 5 7 1 310.83 310.44 310.4 310.55 310.82 311.18 311.63 312.16 312.75 313.41 314.14 314.92 - 315.78 316.69 317.66 318.69 319.79 320.94 322.15 323.42 324.74 326.13 327.57 329.07 330.63 332.24 333.91 335.64 - 337.43 339.27 341.17 343.13 345.14 347.21 349.34 351.52 / - 17 5 8 1 307.01 306.54 306.46 306.59 306.85 307.21 307.66 308.19 308.79 309.46 310.2 311.01 - 311.88 312.82 313.82 314.88 316 317.18 318.43 319.74 321.1 322.53 324.02 325.56 327.17 328.84 330.57 332.35 - 334.2 336.1 338.07 340.09 342.18 344.32 346.52 348.78 / - 17 5 9 1 299.3 298.07 297.56 297.44 297.54 297.81 298.2 298.7 299.29 299.98 300.75 301.6 - 302.53 303.57 304.66 305.82 307.04 308.34 309.7 311.13 312.59 314.15 315.79 317.49 319.26 321.1 323 324.97 - 327.01 329.11 331.28 333.51 335.81 338.17 340.6 343.09 / - 17 5 10 1 285.43 278.44 277.43 277.05 277.05 277.32 277.78 278.4 279.15 280.01 281.01 282.12 - 283.33 284.64 286.05 287.56 289.11 290.8 292.57 294.43 296.38 298.36 300.47 302.66 304.93 307.24 309.67 312.17 - 314.75 317.37 320.1 322.9 325.78 328.7 331.72 334.81 / - 17 5 11 1 257.76 249.34 248.26 248.03 248.28 248.87 249.72 250.79 252.04 253.48 255.07 256.82 - 258.71 260.74 262.9 265.2 267.62 270.16 272.82 275.6 278.49 281.49 284.6 287.81 291.13 294.54 298.06 301.67 - 305.38 309.18 313.08 317.06 321.14 325.31 329.53 333.81 / - 17 5 12 1 222.83 219.72 218.95 219.24 220.12 221.41 223 224.9 227.05 229.39 232.03 234.84 - 237.85 241.04 244.42 247.96 251.78 255.65 259.76 263.94 268.26 272.83 277.5 282.22 287.15 292.12 297.37 302.57 - 308.06 313.49 319.02 324.66 330.78 336.62 342.57 348.6 / - 17 5 13 1 195.48 194.77 195.44 196.86 198.88 201.45 204.44 207.79 211.45 215.39 219.59 224.03 - 228.72 233.62 238.73 244.06 249.57 255.28 261.89 268.44 275.14 281.89 288.77 295.84 303.18 310.54 318.07 325.76 - 333.62 341.63 349.8 358.13 366.57 375.17 383.55 392.48 / - 17 5 14 1 179.4 181.47 184.62 188.43 192.94 197.76 202.93 208.45 214.31 220.52 227.08 233.96 - 241.16 248.67 256.49 264.6 272.99 281.67 290.62 299.84 309.32 319.05 329.04 339.26 349.73 360.43 371.36 382.52 - 393.9 405.84 418.68 431.74 444.91 458.16 471.53 485.06 / - 17 5 15 1 175.77 180.04 185.05 190.85 197.44 204.79 212.87 221.67 231.15 241.23 251.9 263.11 - 274.87 287.15 299.95 313.26 327.06 341.36 356.15 371.43 387.18 403.33 419.85 436.76 454.06 471.76 489.87 508.39 - 527.32 546.67 566.44 586.64 607.72 630.17 653.08 676.28 / - 17 5 16 1 173.39 180.95 189.97 200.24 212.03 225.23 239.75 255.52 272.46 290.52 309.64 329.71 - 350.75 372.73 395.59 419.3 443.85 469.26 495.54 522.68 550.69 579.52 609.14 639.53 670.78 702.85 735.71 769.41 - 803.96 840.29 877.87 916.09 955.09 993.86 1033.52 1073.25 / - 17 5 17 1 173.84 187.65 205.16 225.67 248.85 274.58 302.7 333.09 365.65 400.28 436.88 475.43 - 515.76 557.86 601.63 646.96 694.15 743.45 794.85 848.22 903.24 959.8 1017.79 1078.32 1139.87 1200.5 1258.78 1311.24 - 1357.55 1409.13 1461.34 1514.01 1569.96 1627.45 1683.66 1743.96 / - 17 5 18 1 181.05 210.01 246.82 289.81 337.65 389.97 446.74 507.74 573.41 642.84 716.06 794.31 - 877.2 964.46 1055.65 1149.13 1243.17 1330.65 1415.86 1504.72 1594.53 1687.62 1779 1875.17 1972.08 2071.05 2175.64 2273.51 - 2378.95 2485.57 2593.38 2702.3 2813.14 2931.23 3045.04 3160 / - 17 5 19 1 199.17 260.32 337.15 425.71 522.94 630.84 748.48 877.69 1017.44 1166.48 1315.51 1454.66 - 1607.42 1760.42 1920.59 2094.81 2264.05 2440.37 2620.66 2812.25 3001.73 3198.85 3399.61 3612.25 3817.89 4038.66 4258.48 4481.84 - 4706.67 4943.22 5185.6 5430.23 5679.62 5924.64 6184.88 6448.81 / - 17 5 20 1 248.99 355.03 494.9 674.63 886.05 1125.71 1368.48 1618.58 1885.82 2164.44 2461.45 2777.81 - 3094.72 3445.54 3792.55 4156.63 4566.29 4959.28 5374.59 5794.26 6244.8 6692.33 7176.87 7643.95 8136.6 8639.85 9171.76 9686.75 - 10227.84 10782.26 11352.14 11936.9 12534.52 13161.72 13798.27 14450.98 / - 17 6 1 1 316.92 316.57 316.57 316.73 317.01 317.39 317.84 318.36 318.95 319.6 320.32 321.1 - 321.94 322.83 323.79 324.8 325.87 327 328.18 329.42 330.72 332.07 333.47 334.94 336.45 338.02 339.65 341.33 - 343.07 344.86 346.71 348.61 350.56 352.57 354.63 356.75 / - 17 6 2 1 316.84 316.48 316.47 316.64 316.92 317.29 317.74 318.26 318.85 319.5 320.22 321 - 321.84 322.73 323.69 324.7 325.77 326.9 328.08 329.32 330.62 331.97 333.38 334.84 336.36 337.93 339.56 341.24 - 342.98 344.77 346.62 348.52 350.48 352.49 354.55 356.67 / - 17 6 3 1 316.69 316.32 316.3 316.46 316.74 317.11 317.56 318.08 318.67 319.32 320.04 320.82 - 321.66 322.55 323.51 324.52 325.59 326.72 327.91 329.15 330.44 331.8 333.21 334.67 336.19 337.76 339.39 341.08 - 342.82 344.61 346.46 348.36 350.32 352.34 354.4 356.52 / - 17 6 4 1 316.41 316.02 316 316.15 316.42 316.79 317.24 317.76 318.34 319 319.71 320.49 - 321.33 322.23 323.18 324.2 325.27 326.4 327.59 328.83 330.13 331.48 332.89 334.36 335.88 337.46 339.09 340.78 - 342.52 344.32 346.18 348.08 350.05 352.06 354.14 356.26 / - 17 6 5 1 315.88 315.46 315.42 315.56 315.83 316.19 316.64 317.15 317.74 318.39 319.11 319.89 - 320.73 321.63 322.58 323.6 324.68 325.81 327 328.24 329.55 330.91 332.32 333.79 335.32 336.9 338.54 340.24 - 341.99 343.79 345.66 347.57 349.54 351.57 353.65 355.79 / - 17 6 6 1 314.86 314.38 314.32 314.45 314.71 315.07 315.51 316.02 316.61 317.26 317.98 318.76 - 319.6 320.5 321.47 322.49 323.57 324.71 325.9 327.16 328.47 329.84 331.26 332.74 334.28 335.88 337.53 339.24 - 341 342.82 344.7 346.63 348.62 350.66 352.76 354.92 / - 17 6 7 1 312.84 312.29 312.2 312.31 312.56 312.91 313.35 313.86 314.45 315.11 315.83 316.62 - 317.47 318.38 319.35 320.38 321.48 322.63 323.84 325.11 326.44 327.83 329.28 330.78 332.35 333.97 335.64 337.38 - 339.17 341.02 342.93 344.9 346.92 349 351.13 353.33 / - 17 6 8 1 308.86 308.23 308.1 308.19 308.43 308.78 309.22 309.74 310.33 311 311.74 312.54 - 313.41 314.35 315.35 316.41 317.53 318.72 319.97 321.28 322.65 324.08 325.57 327.13 328.74 330.42 332.15 333.94 - 335.8 337.71 339.69 341.72 343.82 345.97 348.19 350.46 / - 17 6 9 1 300.69 299.06 298.41 298.24 298.32 298.56 298.94 299.43 300.02 300.75 301.53 302.39 - 303.33 304.35 305.44 306.6 307.84 309.15 310.54 311.99 313.51 315.04 316.7 318.43 320.23 322.09 324.02 326.02 - 328.08 330.22 332.41 334.67 337 339.4 341.86 344.38 / - 17 6 10 1 286.58 278.57 277.53 277.15 277.15 277.42 277.88 278.51 279.29 280.19 281.22 282.36 - 283.56 284.9 286.34 287.88 289.51 291.19 292.99 294.89 296.87 298.89 301.05 303.28 305.6 307.96 310.43 312.99 - 315.62 318.29 321.07 323.93 326.83 329.84 332.92 336.07 / - 17 6 11 1 257.68 249.42 248.35 248.13 248.41 249.01 249.88 250.97 252.25 253.71 255.33 257.11 - 259.03 261.1 263.3 265.63 268.09 270.67 273.38 276.2 279.14 282.18 285.34 288.61 291.98 295.45 299.02 302.69 - 306.45 310.31 314.27 318.31 322.44 326.67 330.99 335.41 / - 17 6 12 1 222.96 219.81 219.1 219.44 220.33 221.63 223.28 225.17 227.34 229.74 232.36 235.2 - 238.29 241.52 244.93 248.51 252.36 256.27 260.34 264.7 269.07 273.68 278.33 283.23 288.13 293.24 298.48 303.75 - 309.3 314.78 320.38 326.28 332.08 337.99 344.42 350.53 / - 17 6 13 1 195.59 194.93 195.64 197.1 199.15 201.74 204.77 208.15 211.84 215.82 220.06 224.54 - 229.26 234.21 239.36 244.73 250.29 256.04 262.23 269 275.79 282.65 289.64 296.74 304.05 311.61 319.2 326.95 - 334.86 342.94 351.17 359.57 368.12 376.78 385.59 394.18 / - 17 6 14 1 179.48 181.67 184.87 188.66 193.18 198.05 203.26 208.82 214.72 220.98 227.57 234.5 - 241.74 249.3 257.16 265.31 273.76 282.48 291.48 300.75 310.29 320.08 330.11 340.4 350.93 361.69 372.68 383.91 - 395.36 407.03 419.27 432.45 445.86 459.36 472.94 486.64 / - 17 6 15 1 175.77 180.21 185.27 191.11 197.73 205.11 213.23 222.05 231.56 241.68 252.38 263.64 - 275.44 287.77 300.61 313.96 327.8 342.14 356.97 372.29 388.09 404.32 420.92 437.9 455.27 473.04 491.22 509.8 - 528.8 548.21 568.05 588.31 609.01 631.11 654.18 677.17 / - 17 6 16 1 173.32 181.01 190.12 200.46 212.28 225.51 240.05 255.84 272.8 290.88 310.04 330.16 - 351.24 373.25 396.17 419.93 444.52 469.95 496.25 523.4 551.41 580.26 609.87 640.23 671.46 703.61 736.55 770.29 - 804.84 840.22 877.89 916.29 955.21 994.76 1034.12 1074.03 / - 17 6 17 1 173.79 187.69 205.28 225.85 249.07 274.8 302.92 333.3 365.85 400.47 437.06 475.58 - 515.93 558.02 601.77 647.05 694.13 743.33 794.59 847.89 902.97 959.55 1017.54 1077.24 1139.07 1200.4 1259.17 1312.31 - 1361.76 1414.8 1468.79 1523.2 1580.89 1640.04 1698.34 1760.18 / - 17 6 18 1 181 210.04 246.93 290 337.88 390.32 446.93 507.84 573.34 642.68 715.8 793.74 - 876.36 963.39 1054.42 1148.05 1241.79 1331.01 1415.05 1504.95 1595.46 1689.74 1783.22 1880.47 1978.63 2079.59 2182.77 2283.53 - 2390.16 2498.04 2607.22 2717.71 2829.96 2949.58 3064.91 3181.62 / - 17 6 19 1 199.07 260.07 336.61 425.01 523 629.92 748.03 877.08 1016.07 1165.21 1316.01 1454.36 - 1607.83 1761.57 1922.57 2087.56 2267.96 2445.36 2626.79 2818.89 3012.18 3213.11 3417.29 3633.47 3842.53 4066.78 4289.81 4516.72 - 4744.85 4984.97 5229.99 5478.6 5731.54 5980 6243.56 6510.82 / - 17 6 20 1 248.9 355.03 491.25 671.37 881.38 1119.12 1367.98 1613.4 1887.4 2167.43 2465.99 2764.44 - 3102.79 3434.34 3807.55 4171.24 4550.54 4979.09 5396.89 5819.47 6268.87 6725.25 7199.56 7691.68 8191.56 8701.96 9222.97 9763.81 - 10311.96 10874.15 11452.16 12045.26 12652.08 13288 13933.23 14594.76 / - 17 7 1 1 319.06 318.58 318.51 318.65 318.91 319.27 319.71 320.22 320.81 321.46 322.17 322.95 - 323.78 324.68 325.63 326.65 327.72 328.85 330.03 331.27 332.57 333.93 335.34 336.8 338.33 339.9 341.54 343.22 - 344.97 346.76 348.62 350.52 352.49 354.5 356.57 358.7 / - 17 7 2 1 318.98 318.48 318.42 318.55 318.81 319.17 319.61 320.12 320.7 321.35 322.07 322.84 - 323.68 324.58 325.53 326.55 327.62 328.74 329.93 331.17 332.47 333.83 335.24 336.7 338.23 339.8 341.44 343.13 - 344.87 346.67 348.52 350.43 352.4 354.42 356.49 358.62 / - 17 7 3 1 318.82 318.31 318.24 318.37 318.63 318.98 319.42 319.94 320.52 321.17 321.88 322.66 - 323.49 324.39 325.35 326.36 327.43 328.56 329.75 330.99 332.29 333.65 335.06 336.53 338.05 339.63 341.27 342.96 - 344.7 346.5 348.36 350.27 352.24 354.26 356.33 358.46 / - 17 7 4 1 318.54 318.01 317.92 318.05 318.3 318.65 319.09 319.6 320.18 320.83 321.54 322.32 - 323.16 324.05 325.01 326.02 327.1 328.23 329.41 330.66 331.96 333.32 334.73 336.2 337.73 339.31 340.95 342.65 - 344.39 346.2 348.06 349.98 351.95 353.97 356.05 358.19 / - 17 7 5 1 317.99 317.43 317.33 317.44 317.69 318.03 318.47 318.98 319.56 320.21 320.92 321.7 - 322.53 323.43 324.39 325.4 326.48 327.61 328.8 330.05 331.36 332.72 334.14 335.61 337.15 338.73 340.38 342.08 - 343.84 345.65 347.52 349.44 351.42 353.45 355.54 357.69 / - 17 7 6 1 316.93 316.31 316.19 316.29 316.52 316.87 317.3 317.8 318.38 319.03 319.75 320.52 - 321.36 322.26 323.23 324.25 325.33 326.47 327.67 328.92 330.24 331.61 333.04 334.52 336.07 337.67 339.32 341.04 - 342.81 344.63 346.52 348.46 350.45 352.51 354.61 356.78 / - 17 7 7 1 314.85 314.15 313.99 314.07 314.29 314.63 315.05 315.56 316.14 316.79 317.51 318.3 - 319.14 320.05 321.03 322.06 323.15 324.31 325.52 326.8 328.13 329.52 330.97 332.48 334.05 335.67 337.36 339.1 - 340.9 342.76 344.67 346.65 348.68 350.77 352.91 355.12 / - 17 7 8 1 310.74 309.92 309.7 309.75 309.95 310.28 310.7 311.21 311.79 312.45 313.19 313.99 - 314.85 315.79 316.79 317.85 318.98 320.16 321.42 322.73 324.11 325.55 327.04 328.61 330.23 331.91 333.66 335.46 - 337.33 339.25 341.24 343.29 345.4 347.56 349.79 352.08 / - 17 7 9 1 302.22 299.91 299.23 298.99 299.02 299.24 299.61 300.1 300.69 301.38 302.17 303.03 - 303.98 305.01 306.12 307.3 308.55 309.88 311.29 312.76 314.3 315.92 317.6 319.36 321.18 323.07 324.98 327.01 - 329.1 331.27 333.5 335.79 338.15 340.58 343.08 345.64 / - 17 7 10 1 287.97 278.75 277.66 277.26 277.26 277.53 278 278.64 279.44 280.36 281.41 282.58 - 283.85 285.23 286.66 288.23 289.9 291.66 293.51 295.4 297.43 299.54 301.74 303.97 306.33 308.77 311.24 313.83 - 316.51 319.24 322.07 324.98 327.94 331 334.14 337.35 / - 17 7 11 1 257.66 249.51 248.45 248.24 248.53 249.16 250.05 251.16 252.46 253.95 255.6 257.4 - 259.36 261.46 263.69 266.06 268.57 271.19 273.94 276.81 279.79 282.89 286.1 289.41 292.83 296.36 299.99 303.71 - 307.54 311.46 315.47 319.58 323.77 328.06 332.43 336.9 / - 17 7 12 1 223.09 219.92 219.25 219.63 220.56 221.88 223.55 225.47 227.66 230.09 232.75 235.61 - 238.74 242 245.44 249.06 252.94 256.9 261.01 265.41 269.82 274.54 279.23 284.06 289.14 294.22 299.57 304.99 - 310.43 316.09 321.94 327.71 333.57 339.77 345.85 352.02 / - 17 7 13 1 195.7 195.1 195.85 197.33 199.41 202.04 205.1 208.51 212.24 216.25 220.53 225.05 - 229.81 234.79 239.99 245.4 251.01 256.8 262.79 269.22 276.28 283.32 290.43 297.66 305.13 312.53 320.33 328.14 - 336.11 344.25 352.55 361 369.62 378.4 387.28 395.94 / - 17 7 14 1 179.59 181.86 185.12 188.91 193.43 198.34 203.59 209.19 215.13 221.43 228.07 235.04 - 242.33 249.93 257.83 266.03 274.52 283.29 292.34 301.66 311.25 321.09 331.19 341.53 352.12 362.94 374 385.29 - 396.8 408.54 420.51 433.43 446.98 460.34 474.19 488.11 / - 17 7 15 1 175.77 180.39 185.49 191.37 198.02 205.44 213.58 222.43 231.97 242.13 252.87 264.17 - 276.01 288.38 301.26 314.65 328.53 342.91 357.78 373.13 388.97 405.27 421.94 439 456.44 474.28 492.53 511.18 - 530.24 549.72 569.62 589.94 610.7 631.91 654.58 678.24 / - 17 7 16 1 173.27 181.07 190.24 200.68 212.52 225.78 240.35 256.16 273.14 291.24 310.41 330.59 - 351.71 373.76 396.72 420.52 445.15 470.61 496.92 524.09 552.1 580.95 610.56 640.89 672.06 704.21 737.26 771.07 - 805.66 841.05 877.75 916.24 955.37 994.87 1034.52 1074.82 / - 17 7 17 1 173.75 187.73 205.39 226.02 249.29 275.02 303.14 333.5 366.03 400.64 437.21 475.7 - 516.06 558.14 601.87 647.09 694.06 743.13 794.27 847.41 902.5 959.14 1017.15 1076.39 1138.5 1199.84 1259.57 1312.46 - 1365.46 1420.42 1476.24 1533.33 1591.92 1653.76 1713.26 1776.85 / - 17 7 18 1 180.96 210.11 247.05 290.2 338.1 390.53 447.1 508.06 573.26 642.5 715.42 793.11 - 875.46 962.18 1052.99 1146.78 1240.86 1330.17 1417.37 1506.97 1598.58 1693.92 1790.61 1887.09 1986.54 2088.92 2193.24 2295.57 - 2403.62 2512.95 2623.61 2735.75 2849.61 2964.76 3088.02 3206.55 / - 17 7 19 1 198.98 259.66 336.63 424.26 522.06 629.87 746.57 876.43 1015.02 1163.88 1309.81 1453.84 - 1602.36 1764.53 1924.42 2090.41 2271.86 2450.43 2633.03 2826.39 3020.43 3223.71 3430.83 3650.99 3864.26 4085.33 4319.43 4550.27 - 4782.29 5026.36 5275.31 5517.55 5784.4 6036.89 6304.22 6575.33 / - 17 7 20 1 248.81 355.06 488.44 668.18 876.15 1112.49 1360.29 1611.7 1876.94 2156.18 2453.76 2770.93 - 3111.23 3444.84 3821.45 4186.6 4568.47 4999.94 5420.33 5846.03 6294.41 6754.32 7236.04 7734.58 8242.56 8761.14 9290.1 9839.47 - 10395.47 10966.26 11553.24 12155.51 12771.98 13408.7 14072.55 14743.82 / - 17 8 1 1 321.2 320.58 320.46 320.56 320.8 321.15 321.58 322.08 322.66 323.31 324.02 324.79 - 325.63 326.52 327.48 328.49 329.56 330.69 331.88 333.12 334.42 335.78 337.19 338.66 340.19 341.77 343.41 345.1 - 346.85 348.66 350.52 352.43 354.4 356.43 358.51 360.64 / - 17 8 2 1 321.12 320.48 320.36 320.46 320.7 321.04 321.47 321.98 322.56 323.2 323.91 324.69 - 325.52 326.42 327.37 328.38 329.46 330.59 331.77 333.02 334.32 335.68 337.09 338.56 340.09 341.67 343.31 345 - 346.75 348.56 350.42 352.34 354.31 356.33 358.41 360.55 / - 17 8 3 1 320.96 320.31 320.18 320.28 320.51 320.85 321.28 321.79 322.37 323.01 323.72 324.49 - 325.33 326.22 327.18 328.19 329.26 330.39 331.58 332.83 334.13 335.49 336.9 338.38 339.9 341.49 343.13 344.82 - 346.58 348.38 350.25 352.16 354.14 356.17 358.25 360.39 / - 17 8 4 1 320.66 319.99 319.85 319.94 320.17 320.51 320.94 321.44 322.02 322.66 323.37 324.14 - 324.98 325.87 326.83 327.84 328.92 330.05 331.24 332.48 333.79 335.15 336.57 338.04 339.57 341.16 342.8 344.5 - 346.26 348.07 349.93 351.86 353.83 355.87 357.96 360.1 / - 17 8 5 1 320.1 319.39 319.23 319.31 319.54 319.87 320.3 320.8 321.37 322.01 322.72 323.5 - 324.33 325.23 326.18 327.2 328.28 329.41 330.6 331.85 333.16 334.52 335.95 337.43 338.96 340.55 342.2 343.91 - 345.67 347.49 349.37 351.3 353.28 355.33 357.42 359.58 / - 17 8 6 1 319.01 318.24 318.05 318.12 318.33 318.66 319.08 319.58 320.15 320.79 321.5 322.28 - 323.12 324.02 324.98 326 327.08 328.22 329.42 330.68 331.99 333.37 334.8 336.29 337.84 339.44 341.1 342.82 - 344.6 346.43 348.32 350.27 352.27 354.33 356.45 358.63 / - 17 8 7 1 316.86 316 315.77 315.81 316.02 316.33 316.75 317.25 317.82 318.47 319.18 319.96 - 320.81 321.71 322.69 323.72 324.81 325.97 327.19 328.46 329.8 331.19 332.65 334.16 335.73 337.36 339.05 340.8 - 342.61 344.47 346.4 348.38 350.42 352.52 354.67 356.89 / - 17 8 8 1 312.59 311.55 311.22 311.2 311.36 311.66 312.06 312.55 313.13 313.78 314.51 315.3 - 316.17 317.1 318.1 319.17 320.3 321.49 322.74 324.06 325.45 326.89 328.4 329.97 331.6 333.3 335.05 336.87 - 338.75 340.69 342.69 344.75 346.88 349.06 351.31 353.62 / - 17 8 9 1 303.75 300.78 299.96 299.6 299.6 299.79 300.15 300.63 301.22 301.91 302.7 303.57 - 304.53 305.57 306.69 307.89 309.16 310.51 311.94 313.44 315.01 316.65 318.36 320.14 322 323.92 325.91 327.97 - 330.1 332.3 334.56 336.85 339.26 341.72 344.26 346.86 / - 17 8 10 1 289.37 278.79 277.7 277.31 277.32 277.61 278.11 278.78 279.6 280.55 281.63 282.79 - 284.09 285.5 287.01 288.63 290.29 292.09 293.99 295.98 298 300.17 302.42 304.75 307.12 309.61 312.19 314.8 - 317.53 320.33 323.18 326.13 329.16 332.23 335.42 338.68 / - 17 8 11 1 257.58 249.6 248.54 248.35 248.66 249.3 250.21 251.35 252.68 254.19 255.86 257.7 - 259.69 261.82 264.1 266.51 269.05 271.72 274.51 277.42 280.45 283.6 286.86 290.23 293.7 297.28 300.97 304.75 - 308.64 312.62 316.69 320.86 325.12 329.48 333.92 338.45 / - 17 8 12 1 223.24 220.03 219.42 219.81 220.78 222.14 223.8 225.77 227.99 230.45 233.13 236.02 - 239.12 242.47 245.95 249.6 253.53 257.53 261.8 266.12 270.57 275.34 280.08 284.95 290.16 295.29 300.7 306.08 - 311.74 317.47 323.19 329.14 335.07 341.34 347.48 353.98 / - 17 8 13 1 195.83 195.28 196.06 197.57 199.67 202.33 205.42 208.87 212.64 216.68 221 225.56 - 230.36 235.38 240.62 246.07 251.72 257.57 263.6 269.81 276.64 283.83 291.14 298.49 305.95 313.66 321.28 329.32 - 337.36 345.56 353.92 362.44 371.13 379.97 388.98 397.72 / - 17 8 14 1 179.71 182.06 185.37 189.2 193.67 198.63 203.92 209.56 215.54 221.88 228.56 235.58 - 242.91 250.55 258.5 266.74 275.28 284.1 293.2 302.57 312.21 322.11 332.26 342.66 353.3 364.19 375.31 386.66 - 398.24 410.05 422.08 434.34 447.59 461.49 475.2 489.39 / - 17 8 15 1 175.79 180.56 185.71 191.63 198.32 205.76 213.94 222.81 232.37 242.58 253.36 264.7 - 276.58 288.99 301.91 315.33 329.26 343.67 358.57 373.96 389.83 406.18 422.93 440.06 457.58 475.49 493.8 512.52 - 531.65 551.19 571.15 591.53 612.35 633.61 655.34 679.11 / - 17 8 16 1 173.23 181.13 190.37 200.9 212.77 226.05 240.65 256.48 273.48 291.59 310.78 330.99 - 352.15 374.23 397.22 421.08 445.75 471.24 497.56 524.73 552.75 581.59 611.19 641.51 672.61 704.69 737.77 771.68 - 806.33 841.75 877.95 915.99 955.28 995.09 1035.05 1075.26 / - 17 8 17 1 173.72 187.77 205.51 226.19 249.52 275.25 303.35 333.7 366.2 400.79 437.34 475.79 - 516.14 558.21 601.92 647.08 693.93 742.87 793.85 846.84 901.78 958.5 1016.57 1075.83 1137.08 1198.92 1259.72 1314.05 - 1369.06 1426.22 1483.64 1542.68 1603.09 1666.64 1728 1792.93 / - 17 8 18 1 180.94 210.08 247.11 290.38 338.34 390.72 447.27 508.11 573.17 642.29 715 792.44 - 874.49 960.92 1051.45 1145.26 1239.72 1329.56 1418.33 1508.67 1601.68 1698.17 1796.97 1893.91 1994.76 2100.51 2204.19 2309.3 - 2417.68 2528.6 2640.84 2754.65 2870.29 2987.18 3105.65 3232.82 / - 17 8 19 1 198.9 259.33 336.08 424.3 522.13 628.43 746.23 873.12 1013.94 1162.47 1308.53 1453.67 - 1602.45 1766.12 1926.13 2093.16 2275.75 2455.45 2639.41 2832.99 3028.97 3234.25 3443.02 3656.67 3880.86 4105.99 4344.76 4580.2 - 4817.02 5065.43 5318.82 5565.66 5836.8 6093.7 6365.59 6641.1 / - 17 8 20 1 248.75 355.13 483.56 665.03 870.94 1111.6 1354.3 1608.56 1878.67 2159.39 2458.65 2777.81 - 3120.05 3455.95 3835.39 4202.79 4587.43 4988.19 5445.14 5874.13 6325.58 6785.1 7274.33 7761.66 8288.94 8814.63 9352.66 9885.74 - 10476.64 11057.07 11653.8 12266.17 12893.07 13538.04 14174.78 14897.32 / - 17 9 1 1 323.33 322.58 322.4 322.47 322.69 323.02 323.44 323.94 324.52 325.16 325.86 326.64 - 327.47 328.36 329.31 330.33 331.4 332.53 333.72 334.96 336.27 337.63 339.04 340.52 342.05 343.63 345.27 346.97 - 348.73 350.54 352.4 354.33 356.3 358.34 360.43 362.57 / - 17 9 2 1 323.24 322.48 322.3 322.37 322.59 322.92 323.34 323.83 324.41 325.05 325.75 326.52 - 327.36 328.25 329.2 330.22 331.29 332.42 333.61 334.85 336.16 337.52 338.94 340.41 341.94 343.53 345.17 346.87 - 348.62 350.44 352.3 354.23 356.2 358.24 360.33 362.48 / - 17 9 3 1 323.08 322.3 322.11 322.18 322.4 322.72 323.14 323.64 324.21 324.85 325.56 326.33 - 327.16 328.05 329 330.02 331.09 332.22 333.41 334.66 335.96 337.32 338.74 340.22 341.75 343.34 344.98 346.68 - 348.44 350.25 352.12 354.05 356.03 358.07 360.16 362.31 / - 17 9 4 1 322.77 321.97 321.77 321.83 322.04 322.37 322.78 323.28 323.85 324.49 325.19 325.96 - 326.79 327.69 328.64 329.66 330.73 331.86 333.05 334.3 335.61 336.97 338.39 339.87 341.4 342.99 344.64 346.34 - 348.11 349.92 351.8 353.73 355.71 357.75 359.85 362 / - 17 9 5 1 322.2 321.35 321.14 321.18 321.39 321.71 322.12 322.61 323.18 323.82 324.52 325.29 - 326.12 327.02 327.97 328.99 330.06 331.2 332.39 333.64 334.95 336.32 337.74 339.23 340.77 342.36 344.02 345.73 - 347.5 349.32 351.2 353.14 355.13 357.18 359.29 361.45 / - 17 9 6 1 321.07 320.16 319.91 319.94 320.14 320.45 320.85 321.34 321.91 322.55 323.25 324.02 - 324.86 325.76 326.72 327.74 328.82 329.96 331.16 332.42 333.73 335.11 336.55 338.04 339.59 341.2 342.87 344.59 - 346.37 348.21 350.11 352.07 354.08 356.15 358.27 360.46 / - 17 9 7 1 318.85 317.84 317.54 317.55 317.72 318.03 318.43 318.92 319.48 320.12 320.83 321.61 - 322.45 323.36 324.33 325.36 326.46 327.61 328.83 330.11 331.44 332.84 334.3 335.82 337.39 339.03 340.73 342.48 - 344.29 346.17 348.1 350.09 352.14 354.25 356.41 358.64 / - 17 9 8 1 314.39 313.1 312.64 312.55 312.67 312.93 313.3 313.78 314.34 314.98 315.7 316.49 - 317.35 318.29 319.29 320.35 321.49 322.69 323.95 325.28 326.67 328.12 329.64 331.22 332.87 334.58 336.35 338.18 - 340.08 342.03 344.05 346.13 348.28 350.48 352.75 355.08 / - 17 9 9 1 305.27 301.44 300.51 300.13 300.08 300.24 300.58 301.06 301.65 302.35 303.14 304.03 - 305.01 306.06 307.2 308.42 309.69 311.04 312.49 314.02 315.62 317.29 319.03 320.85 322.74 324.7 326.73 328.83 - 330.99 333.23 335.54 337.91 340.35 342.86 345.44 348.08 / - 17 9 10 1 290.76 278.73 277.66 277.3 277.34 277.66 278.18 278.88 279.73 280.68 281.79 283.02 - 284.36 285.8 287.31 288.96 290.72 292.57 294.46 296.5 298.62 300.84 303.09 305.48 307.96 310.46 313.1 315.82 - 318.57 321.45 324.4 327.39 330.49 333.67 336.88 340.19 / - 17 9 11 1 257.44 249.69 248.64 248.47 248.79 249.45 250.38 251.54 252.89 254.43 256.13 258 - 260.02 262.19 264.5 266.95 269.53 272.25 275.08 278.04 281.12 284.32 287.63 291.05 294.59 298.22 301.96 305.81 - 309.75 313.79 317.93 322.17 326.49 330.91 335.42 340.02 / - 17 9 12 1 223.38 220.14 219.59 220.01 220.99 222.36 224.07 226.07 228.31 230.8 233.51 236.43 - 239.55 242.95 246.46 250.15 254.12 258.15 262.34 266.83 271.33 276.14 280.93 286.05 291.11 296.29 301.84 307.28 - 313 318.67 324.65 330.67 336.67 342.92 349.13 355.69 / - 17 9 13 1 195.96 195.45 196.27 197.8 199.94 202.63 205.75 209.24 213.03 217.12 221.47 226.07 - 230.91 235.97 241.25 246.75 252.44 258.33 264.4 270.67 277.1 284.2 291.66 299.22 306.82 314.53 322.33 330.32 - 338.6 346.87 355.29 363.88 372.64 381.55 390.63 399.44 / - 17 9 14 1 179.84 182.27 185.63 189.5 193.93 198.92 204.25 209.93 215.96 222.33 229.05 236.11 - 243.49 251.18 259.17 267.46 276.04 284.91 294.06 303.48 313.17 323.12 333.32 343.78 354.48 365.42 376.6 388.02 - 399.67 411.54 423.64 435.97 448.51 461.69 475.94 490.42 / - 17 9 15 1 175.81 180.74 185.94 191.9 198.62 206.09 214.29 223.2 232.78 243.01 253.84 265.23 - 277.15 289.59 302.55 316.01 329.97 344.42 359.35 374.77 390.67 407.04 423.87 441.08 458.67 476.65 495.03 513.81 - 533 552.6 572.63 593.07 613.94 635.26 657.03 679.25 / - 17 9 16 1 173.2 181.2 190.5 201.12 213.02 226.32 240.94 256.8 273.82 291.94 311.13 331.35 - 352.56 374.67 397.69 421.59 446.3 471.82 498.16 525.33 553.35 582.18 611.77 642.06 673.1 705.1 738.09 772.06 - 806.81 842.28 878.5 915.47 954.89 994.96 1034.77 1075.2 / - 17 9 17 1 173.7 187.82 205.62 226.35 249.73 275.48 303.56 333.89 366.36 400.9 437.43 475.85 - 516.16 558.23 601.91 647.03 693.75 742.54 793.36 846.18 900.93 957.58 1015.74 1075.07 1135.29 1198.17 1259.3 1315.63 - 1372.84 1431.37 1490.99 1551.75 1613.47 1678.08 1740.77 1807.98 / - 17 9 18 1 180.91 210.04 247.21 290.53 338.53 390.9 447.44 508.14 573.06 642.05 714.55 791.72 - 873.46 959.56 1049.77 1143.44 1238.36 1328.67 1417.92 1508.8 1604.25 1700.73 1801.41 1900.35 2003.43 2110.32 2215.67 2324.16 - 2432.46 2545.14 2659.05 2774.67 2892.14 3010.96 3131.42 3260.69 / - 17 9 19 1 198.82 258.98 335.53 423.5 521.14 628.29 745.11 872.17 1009.53 1156.59 1307.15 1453.96 - 1602.48 1766.9 1927.89 2095.92 2271.44 2460.51 2645.95 2840.72 3037.14 3245.07 3455.57 3670.93 3896.95 4124.07 4357.17 4604.48 - 4848.62 5099.67 5358.07 5609.94 5875.63 6149.45 6425 6705.78 / - 17 9 20 1 248.69 355.25 480.08 661.99 865.82 1104.39 1353.63 1603.95 1873.57 2162.78 2463.85 2785.09 - 3106.82 3467.74 3819.13 4219.93 4607.56 5011.33 5471.51 5904.02 6358.7 6818.06 7310.76 7814.02 8316.5 8867.28 9410.1 9951.11 - 10524.44 11143.4 11751.18 12374.82 13013.22 13669.62 14318.95 15010.06 / - 17 10 1 1 325.43 324.56 324.34 324.38 324.58 324.9 325.31 325.8 326.36 327 327.7 328.47 - 329.3 330.19 331.15 332.16 333.23 334.36 335.55 336.8 338.1 339.46 340.88 342.36 343.89 345.48 347.13 348.83 - 350.59 352.41 354.28 356.21 358.19 360.24 362.33 364.48 / - 17 10 2 1 325.34 324.46 324.23 324.27 324.47 324.79 325.2 325.69 326.25 326.89 327.59 328.36 - 329.19 330.08 331.03 332.04 333.12 334.25 335.44 336.68 337.99 339.35 340.77 342.25 343.78 345.37 347.02 348.72 - 350.49 352.3 354.18 356.11 358.09 360.13 362.23 364.38 / - 17 10 3 1 325.17 324.28 324.04 324.08 324.27 324.59 324.99 325.48 326.05 326.68 327.38 328.15 - 328.98 329.87 330.82 331.84 332.91 334.04 335.23 336.48 337.78 339.15 340.57 342.05 343.58 345.17 346.82 348.53 - 350.29 352.11 353.99 355.92 357.91 359.95 362.05 364.21 / - 17 10 4 1 324.86 323.94 323.69 323.72 323.91 324.22 324.62 325.11 325.67 326.31 327.01 327.77 - 328.6 329.5 330.45 331.46 332.53 333.67 334.86 336.11 337.41 338.78 340.2 341.68 343.22 344.82 346.47 348.18 - 349.94 351.77 353.65 355.58 357.57 359.62 361.73 363.89 / - 17 10 5 1 324.27 323.3 323.03 323.05 323.23 323.53 323.93 324.42 324.98 325.61 326.31 327.08 - 327.91 328.8 329.75 330.77 331.84 332.98 334.17 335.42 336.73 338.1 339.53 341.02 342.56 344.16 345.82 347.53 - 349.31 351.14 353.02 354.97 356.97 359.03 361.14 363.31 / - 17 10 6 1 323.11 322.07 321.76 321.76 321.93 322.22 322.62 323.1 323.66 324.29 324.99 325.76 - 326.59 327.48 328.44 329.46 330.54 331.68 332.88 334.14 335.46 336.84 338.28 339.77 341.33 342.94 344.62 346.35 - 348.13 349.98 351.88 353.84 355.86 357.94 360.08 362.27 / - 17 10 7 1 320.83 319.66 319.3 319.26 319.41 319.7 320.09 320.56 321.12 321.76 322.46 323.23 - 324.07 324.98 325.95 326.98 328.07 329.23 330.45 331.73 333.07 334.47 335.93 337.45 339.03 340.68 342.38 344.14 - 345.96 347.84 349.78 351.78 353.83 355.95 358.13 360.36 / - 17 10 8 1 316.13 314.55 313.96 313.78 313.84 314.06 314.4 314.86 315.4 316.03 316.74 317.53 - 318.39 319.33 320.33 321.4 322.54 323.74 325.02 326.35 327.76 329.22 330.76 332.35 334.01 335.74 337.52 339.38 - 341.29 343.27 345.31 347.41 349.58 351.81 354.1 356.45 / - 17 10 9 1 306.78 302.05 300.98 300.5 300.42 300.56 300.89 301.36 301.95 302.65 303.45 304.35 - 305.33 306.4 307.56 308.8 310.12 311.53 313.01 314.56 316.19 317.9 319.65 321.5 323.43 325.43 327.5 329.64 - 331.85 334.13 336.46 338.88 341.37 343.93 346.55 349.25 / - 17 10 10 1 292.12 278.59 277.54 277.23 277.31 277.67 278.23 278.96 279.83 280.84 281.98 283.23 - 284.59 286.08 287.65 289.34 291.11 293 295 297.05 299.23 301.45 303.81 306.26 308.74 311.36 314.06 316.8 - 319.66 322.61 325.59 328.69 331.87 335.08 338.41 341.77 / - 17 10 11 1 257.11 249.78 248.75 248.58 248.92 249.6 250.55 251.73 253.1 254.67 256.4 258.3 - 260.36 262.56 264.91 267.4 270.03 272.78 275.67 278.67 281.8 285.05 288.42 291.89 295.48 299.17 302.97 306.88 - 310.88 314.99 319.19 323.49 327.89 332.37 336.95 341.62 / - 17 10 12 1 223.54 220.26 219.73 220.2 221.22 222.61 224.35 226.33 228.6 231.1 233.88 236.83 - 239.99 243.34 246.96 250.69 254.7 258.78 263.01 267.54 272.09 276.94 281.78 286.95 292.06 297.52 302.9 308.39 - 314.27 320 326.04 332 338.28 344.6 350.88 357.42 / - 17 10 13 1 196.09 195.64 196.48 198.04 200.2 202.93 206.08 209.6 213.43 217.55 221.94 226.58 - 231.46 236.56 241.89 247.42 253.16 259.09 265.21 271.52 278.01 284.67 292.02 299.76 307.59 315.44 323.38 331.41 - 339.65 347.87 356.66 365.32 374.14 383.13 391.87 401.16 / - 17 10 14 1 179.98 182.48 185.89 189.81 194.22 199.22 204.59 210.31 216.37 222.79 229.55 236.65 - 244.07 251.81 259.84 268.18 276.81 285.72 294.91 304.38 314.12 324.12 334.38 344.89 355.64 366.64 377.89 389.36 - 401.07 413.01 425.18 437.57 450.19 463.03 476.52 491.15 / - 17 10 15 1 175.84 180.93 186.17 192.17 198.92 206.42 214.65 223.59 233.19 243.45 254.31 265.75 - 277.71 290.19 303.18 316.67 330.66 345.14 360.1 375.55 391.47 407.86 424.73 442.02 459.69 477.75 496.19 515.04 - 534.29 553.95 574.03 594.53 615.45 636.82 658.63 680.89 / - 17 10 16 1 173.17 181.27 190.64 201.33 213.27 226.6 241.23 257.11 274.15 292.28 311.48 331.7 - 352.92 375.07 398.1 422.03 446.8 472.35 498.7 525.88 553.88 582.7 612.28 642.54 673.51 705.42 738.32 772.19 - 807 842.57 878.85 915.83 953.54 993.73 1034.51 1075.46 / - 17 10 17 1 173.69 187.9 205.74 226.52 249.92 275.72 303.77 334.07 366.5 400.99 437.49 475.86 - 516.11 558.18 601.84 646.91 693.5 742.13 792.78 845.4 899.95 956.39 1014.58 1074.03 1134.37 1196.4 1258.38 1316.87 - 1375.63 1435.89 1496.63 1559.12 1622.15 1688.14 1752.54 1821.27 / - 17 10 18 1 180.89 210.11 247.3 290.68 338.7 391.05 447.57 508.14 572.91 641.76 714.06 790.81 - 872.37 958.11 1047.93 1141.35 1236.64 1327.47 1416.32 1508.67 1604.69 1701.83 1803.19 1903.2 2010.61 2116.95 2224.91 2337.13 - 2446.69 2561.71 2677.92 2795.7 2915.32 3036.23 3158.93 3288.51 / - 17 10 19 1 198.76 258.6 334.98 422.68 521.21 626.83 743.93 871.46 1008.35 1155.04 1305.7 1453.18 - 1602.47 1767.64 1929.68 2098.74 2275.45 2465.8 2654.02 2848.81 3045.77 3254.98 3468.6 3685.7 3913.7 4142.96 4378.11 4627.44 - 4873.9 5127.99 5390.91 5648.28 5919.97 6196.84 6480.28 6766.96 / - 17 10 20 1 248.66 355.43 474.91 656.16 861.31 1097.2 1345.83 1598.8 1870.23 2154.32 2469.45 2777.42 - 3116.79 3480.27 3834.5 4238.32 4629.03 5036.03 5453.43 5935.95 6394.16 6857.57 7349.81 7860.86 8368.48 8923.55 9470.78 10017.04 - 10595.17 11191.45 11837.62 12471.81 13122.81 13781.26 14458.2 15163.07 / - 17 11 1 1 327.5 326.53 326.26 326.27 326.46 326.76 327.16 327.65 328.21 328.84 329.54 330.3 - 331.13 332.02 332.97 333.98 335.05 336.18 337.37 338.62 339.93 341.29 342.71 344.19 345.73 347.32 348.97 350.68 - 352.45 354.27 356.15 358.08 360.07 362.12 364.22 366.38 / - 17 11 2 1 327.41 326.43 326.15 326.16 326.35 326.65 327.05 327.53 328.09 328.72 329.42 330.18 - 331.01 331.9 332.85 333.86 334.93 336.06 337.25 338.5 339.81 341.17 342.6 344.08 345.61 347.21 348.86 350.57 - 352.33 354.16 356.04 357.97 359.96 362.01 364.12 366.28 / - 17 11 3 1 327.24 326.24 325.96 325.96 326.14 326.44 326.84 327.32 327.88 328.51 329.21 329.97 - 330.8 331.69 332.64 333.65 334.72 335.85 337.04 338.29 339.6 340.96 342.39 343.87 345.4 347 348.65 350.36 - 352.13 353.96 355.84 357.78 359.77 361.82 363.93 366.09 / - 17 11 4 1 326.92 325.9 325.59 325.59 325.77 326.06 326.45 326.93 327.49 328.12 328.82 329.58 - 330.4 331.29 332.25 333.26 334.33 335.46 336.65 337.9 339.21 340.58 342 343.49 345.03 346.63 348.28 350 - 351.77 353.59 355.48 357.42 359.42 361.48 363.59 365.76 / - 17 11 5 1 326.31 325.24 324.91 324.89 325.06 325.35 325.74 326.21 326.77 327.39 328.09 328.85 - 329.68 330.57 331.52 332.53 333.61 334.74 335.93 337.19 338.5 339.87 341.3 342.79 344.34 345.94 347.6 349.32 - 351.1 352.94 354.83 356.78 358.79 360.85 362.98 365.16 / - 17 11 6 1 325.12 323.96 323.59 323.55 323.7 323.98 324.36 324.84 325.39 326.01 326.71 327.47 - 328.3 329.19 330.15 331.17 332.25 333.39 334.59 335.85 337.17 338.55 339.99 341.49 343.05 344.67 346.34 348.08 - 349.87 351.72 353.63 355.6 357.63 359.72 361.86 364.06 / - 17 11 7 1 322.76 321.46 321.03 320.95 321.08 321.34 321.72 322.18 322.74 323.36 324.06 324.83 - 325.67 326.57 327.54 328.57 329.66 330.82 332.04 333.32 334.66 336.07 337.53 339.06 340.65 342.29 344 345.77 - 347.59 349.48 351.43 353.44 355.5 357.63 359.82 362.06 / - 17 11 8 1 317.8 315.91 315.16 314.88 314.87 315.04 315.35 315.78 316.31 316.93 317.63 318.42 - 319.27 320.21 321.21 322.29 323.44 324.65 325.93 327.28 328.7 330.18 331.73 333.35 335.03 336.77 338.58 340.45 - 342.39 344.39 346.46 348.59 350.78 353.04 355.36 357.74 / - 17 11 9 1 308.28 302.53 301.29 300.78 300.63 300.76 301.07 301.54 302.13 302.84 303.66 304.57 - 305.58 306.68 307.83 309.1 310.45 311.88 313.39 314.98 316.65 318.39 320.21 322.08 324.05 326.09 328.21 330.39 - 332.65 334.96 337.36 339.83 342.37 344.98 347.65 350.4 / - 17 11 10 1 293.45 278.3 277.38 277.13 277.26 277.65 278.25 279.02 279.94 281 282.18 283.45 - 284.85 286.37 287.98 289.7 291.53 293.47 295.49 297.6 299.83 302.12 304.52 307 309.57 312.25 314.99 317.81 - 320.75 323.72 326.81 329.99 333.2 336.53 339.9 343.38 / - 17 11 11 1 257.11 249.88 248.85 248.7 249.05 249.75 250.72 251.92 253.32 254.91 256.68 258.61 - 260.7 262.94 265.33 267.86 270.52 273.32 276.25 279.31 282.49 285.79 289.21 292.74 296.38 300.14 304 307.96 - 312.03 316.2 320.47 324.84 329.3 333.85 338.5 343.24 / - 17 11 12 1 223.7 220.38 219.91 220.4 221.42 222.86 224.59 226.63 228.92 231.45 234.21 237.24 - 240.42 243.81 247.47 251.23 255.17 259.39 263.67 268.25 272.85 277.75 282.63 287.85 293.02 298.53 303.96 309.77 - 315.44 321.24 327.44 333.47 339.82 346.06 352.65 359.1 / - 17 11 13 1 196.23 195.82 196.69 198.28 200.47 203.23 206.43 209.98 213.85 218.01 222.44 227.11 - 232.03 237.17 242.53 248.11 253.89 259.86 266.03 272.38 278.92 285.63 292.51 300.12 308.14 316.08 324.13 332.3 - 340.78 349.25 357.7 366.41 375.28 384.31 393.51 402.88 / - 17 11 14 1 180.12 182.7 186.17 190.13 194.53 199.53 204.95 210.71 216.81 223.26 230.06 237.19 - 244.66 252.44 260.52 268.9 277.57 286.53 295.76 305.28 315.06 325.11 335.41 345.97 356.78 367.84 379.14 390.67 - 402.44 414.44 426.68 439.14 451.82 464.73 477.86 491.22 / - 17 11 15 1 175.87 181.12 186.41 192.45 199.23 206.77 215.02 223.98 233.62 243.89 254.78 266.24 - 278.25 290.77 303.79 317.31 331.33 345.83 360.82 376.28 392.22 408.63 425.51 442.85 460.6 478.73 497.25 516.16 - 535.48 555.2 575.33 595.88 616.86 638.27 660.12 682.41 / - 17 11 16 1 173.15 181.34 190.78 201.54 213.53 226.87 241.52 257.4 274.45 292.6 311.8 332.02 - 353.24 375.41 398.46 422.39 447.19 472.78 499.16 526.34 554.33 583.13 612.69 642.92 673.82 705.63 738.42 772.17 - 806.86 842.5 878.87 915.92 953.65 992.07 1032.99 1074.41 / - 17 11 17 1 173.68 187.98 205.86 226.68 250.11 275.93 303.97 334.22 366.6 401.03 437.47 475.81 - 515.99 558.02 601.67 646.7 693.16 741.62 792.08 844.49 898.82 955.03 1013.03 1072.59 1133.09 1194.03 1257.61 1314.51 - 1369.15 1425.91 1483.31 1541.37 1601.48 1664.33 1724.1 1789.71 / - 17 11 18 1 180.87 210.06 247.3 290.81 338.85 391.16 447.67 508.12 572.71 641.38 713.52 789.98 - 871.2 956.56 1046.01 1139.14 1234.5 1326.01 1415.5 1508.42 1605.07 1702.88 1804.93 1907.83 2013.99 2121.25 2230.1 2343.89 - 2455.3 2572.8 2692 2813.02 2935.78 3059.75 3185.47 3318.06 / - 17 11 19 1 198.71 258.41 334.44 422.72 520.07 626.82 742.3 869.14 1007.12 1153.39 1304.25 1446.35 - 1602.53 1760.03 1931.57 2101.77 2279.67 2471.46 2664.18 2857.42 3056.22 3265.62 3482.43 3701.37 3931.5 4163.83 4400.39 4643.14 - 4906.73 5157.02 5422.35 5682.67 5957.72 6239.13 6514.6 6821.57 / - 17 11 20 1 248.65 355.69 475.15 652.01 852.87 1090.07 1339.71 1591.25 1868.73 2158.29 2461.92 2785.63 - 3127.77 3493.83 3851.18 4226.04 4652.02 5062.61 5483.62 5970.28 6432.57 6900.07 7391.81 7904.4 8421.83 8962.05 9536.47 10087.93 - 10670.85 11272.22 11892.38 12563.75 13221 13886 14570.29 15285.24 / - 17 12 1 1 329.52 328.48 328.16 328.16 328.32 328.62 329.01 329.48 330.04 330.67 331.36 332.12 - 332.95 333.83 334.78 335.79 336.87 338 339.19 340.43 341.74 343.11 344.53 346.01 347.55 349.15 350.81 352.52 - 354.29 356.11 358 359.94 361.94 363.99 366.1 368.27 / - 17 12 2 1 329.42 328.37 328.05 328.04 328.21 328.5 328.89 329.36 329.92 330.54 331.24 332 - 332.82 333.71 334.66 335.67 336.74 337.87 339.06 340.31 341.62 342.99 344.41 345.89 347.43 349.03 350.69 352.4 - 354.17 356 357.88 359.82 361.82 363.88 365.99 368.16 / - 17 12 3 1 329.25 328.18 327.85 327.84 328 328.28 328.67 329.15 329.7 330.32 331.02 331.78 - 332.6 333.49 334.44 335.45 336.52 337.65 338.84 340.09 341.4 342.76 344.19 345.67 347.21 348.81 350.47 352.19 - 353.96 355.79 357.67 359.62 361.62 363.68 365.79 367.96 / - 17 12 4 1 328.93 327.82 327.48 327.45 327.61 327.89 328.27 328.75 329.3 329.92 330.61 331.37 - 332.19 333.08 334.03 335.04 336.11 337.24 338.43 339.69 341 342.36 343.79 345.28 346.82 348.42 350.08 351.8 - 353.58 355.41 357.3 359.25 361.25 363.32 365.44 367.61 / - 17 12 5 1 328.31 327.14 326.77 326.73 326.87 327.15 327.53 327.99 328.54 329.16 329.85 330.61 - 331.43 332.32 333.27 334.28 335.36 336.49 337.68 338.94 340.25 341.62 343.06 344.55 346.1 347.7 349.37 351.09 - 352.88 354.72 356.62 358.57 360.59 362.66 364.79 366.98 / - 17 12 6 1 327.08 325.82 325.4 325.33 325.46 325.72 326.09 326.55 327.1 327.72 328.41 329.16 - 329.99 330.88 331.83 332.85 333.93 335.07 336.27 337.53 338.86 340.24 341.68 343.18 344.75 346.37 348.05 349.79 - 351.59 353.45 355.36 357.34 359.37 361.47 363.62 365.83 / - 17 12 7 1 324.65 323.21 322.71 322.59 322.69 322.93 323.29 323.75 324.29 324.91 325.6 326.36 - 327.2 328.1 329.06 330.09 331.19 332.34 333.57 334.85 336.19 337.6 339.07 340.6 342.19 343.85 345.56 347.34 - 349.17 351.07 353.02 355.04 357.12 359.26 361.46 363.71 / - 17 12 8 1 319.39 317.16 316.22 315.82 315.74 315.86 316.13 316.53 317.04 317.65 318.34 319.12 - 319.98 320.92 321.93 323.01 324.17 325.4 326.69 328.06 329.5 331 332.57 334.2 335.91 337.68 339.51 341.41 - 343.38 345.41 347.51 349.67 351.9 354.19 356.54 358.96 / - 17 12 9 1 309.76 302.77 301.49 300.88 300.73 300.84 301.15 301.61 302.21 302.93 303.76 304.69 - 305.72 306.84 308.02 309.32 310.7 312.16 313.71 315.34 317.04 318.83 320.69 322.59 324.61 326.7 328.86 331.1 - 333.41 335.79 338.22 340.74 343.34 346.01 348.74 351.55 / - 17 12 10 1 294.71 278.26 277.32 277.06 277.19 277.59 278.2 278.98 279.91 280.99 282.19 283.52 - 284.96 286.52 288.19 289.97 291.85 293.83 295.92 298.1 300.39 302.75 305.2 307.75 310.38 313.11 315.93 318.82 - 321.8 324.87 328.03 331.25 334.58 337.97 341.44 344.98 / - 17 12 11 1 256.62 249.98 248.95 248.82 249.18 249.9 250.89 252.11 253.54 255.16 256.95 258.92 - 261.04 263.32 265.74 268.31 271.02 273.87 276.85 279.95 283.18 286.54 290.01 293.6 297.3 301.11 305.04 309.06 - 313.2 317.43 321.77 326.2 330.73 335.36 340.08 344.89 / - 17 12 12 1 223.86 220.49 220.06 220.58 221.64 223.09 224.86 226.92 229.24 231.79 234.58 237.58 - 240.86 244.27 247.88 251.77 255.74 260.01 264.33 268.95 273.59 278.55 283.49 288.76 293.98 299.55 305.03 310.89 - 316.63 322.77 328.75 334.83 341.37 347.68 354.34 360.87 / - 17 12 13 1 196.38 196.01 196.91 198.53 200.76 203.57 206.81 210.4 214.31 218.5 222.96 227.67 - 232.62 237.8 243.2 248.81 254.63 260.64 266.85 273.25 279.83 286.58 293.51 300.61 308.28 316.59 324.82 333.28 - 341.69 350.23 358.91 367.81 376.76 385.86 395.14 404.58 / - 17 12 14 1 180.27 182.94 186.49 190.5 194.93 199.92 205.37 211.16 217.29 223.77 230.59 237.75 - 245.25 253.08 261.2 269.62 278.33 287.33 296.6 306.16 315.98 326.08 336.43 347.04 357.9 369 380.35 391.94 - 403.77 415.83 428.13 440.65 453.4 466.37 479.57 493 / - 17 12 15 1 175.93 181.34 186.7 192.77 199.59 207.14 215.42 224.39 234.05 244.33 255.24 266.72 - 278.75 291.31 304.37 317.92 331.95 346.47 361.47 376.95 392.9 409.32 426.2 443.54 461.35 479.56 498.16 517.14 - 536.52 556.3 576.48 597.08 618.1 639.55 661.44 683.76 / - 17 12 16 1 173.16 181.44 190.96 201.78 213.8 227.15 241.81 257.69 274.73 292.89 312.1 332.31 - 353.51 375.68 398.74 422.67 447.46 473.1 499.5 526.68 554.65 583.43 612.97 643.17 674.01 705.74 738.42 772.04 - 806.6 842.08 878.49 915.65 953.44 991.89 1030.96 1072.61 / - 17 12 17 1 173.69 188.06 205.99 226.85 250.29 276.1 304.12 334.33 366.65 401.01 437.37 475.65 - 515.77 557.72 601.37 646.37 692.73 741.04 791.31 843.5 897.58 953.52 1011.26 1070.68 1131.39 1192.66 1255.75 1315.14 - 1368.82 1427.08 1485.39 1546.39 1605.89 1669.7 1730.46 1797.18 / - 17 12 18 1 180.86 210.12 247.37 290.89 338.98 391.22 447.65 508.04 572.45 640.92 712.94 789.15 - 870.01 954.95 1043.98 1136.7 1232.15 1324.03 1414.05 1507.54 1604.82 1703.32 1806.11 1910.7 2016.92 2125.18 2235.01 2349.96 - 2462.26 2581.01 2701.42 2823.86 2948.63 3075.01 3203.82 3340.1 / - 17 12 19 1 198.67 258.08 333.92 421.91 518.94 625.4 741.94 868.35 1005.51 1151.67 1302.76 1445.63 - 1602.58 1761.01 1933.62 2105.06 2284.21 2467.97 2671.69 2866.58 3071.17 3277.08 3495.62 3718.24 3950.52 4186.87 4424.18 4669.35 - 4935.07 5188.24 5456 5719.2 5997.6 6281.49 6560 6870.28 / - 17 12 20 1 248.66 356.06 475.69 644.74 848.47 1083.11 1332.21 1584.82 1859.93 2154.43 2468.53 2794.7 - 3139.57 3482.99 3869.13 4247.44 4677.3 5091.51 5516.35 5964.44 6474.08 6946.1 7442.21 7954.48 8474.43 9027.58 9584.39 10164.35 - 10752.29 11359.18 11985.15 12629.95 13327.2 13998.86 14689.83 15411.71 / - 17 13 1 1 331.47 330.38 330.04 330.02 330.17 330.46 330.84 331.31 331.86 332.48 333.17 333.93 - 334.75 335.64 336.59 337.6 338.67 339.8 340.99 342.24 343.54 344.91 346.34 347.82 349.36 350.96 352.62 354.34 - 356.11 357.94 359.83 361.78 363.78 365.84 367.96 370.14 / - 17 13 2 1 331.38 330.28 329.93 329.9 330.05 330.33 330.72 331.19 331.73 332.35 333.05 333.8 - 334.62 335.51 336.46 337.47 338.54 339.67 340.86 342.11 343.42 344.78 346.21 347.69 349.24 350.84 352.5 354.21 - 355.99 357.82 359.71 361.66 363.66 365.73 367.84 370.02 / - 17 13 3 1 331.2 330.08 329.72 329.69 329.84 330.11 330.49 330.96 331.51 332.13 332.82 333.57 - 334.39 335.28 336.23 337.24 338.31 339.44 340.63 341.88 343.19 344.55 345.98 347.47 349.01 350.61 352.27 353.99 - 355.77 357.6 359.49 361.44 363.45 365.51 367.64 369.82 / - 17 13 4 1 330.87 329.71 329.34 329.29 329.43 329.7 330.08 330.54 331.09 331.7 332.39 333.15 - 333.97 334.85 335.8 336.81 337.88 339.01 340.2 341.45 342.76 344.13 345.56 347.05 348.6 350.2 351.86 353.59 - 355.37 357.2 359.1 361.05 363.06 365.13 367.26 369.45 / - 17 13 5 1 330.24 329.01 328.6 328.53 328.66 328.93 329.3 329.76 330.3 330.91 331.6 332.35 - 333.17 334.06 335 336.01 337.09 338.22 339.41 340.67 341.98 343.36 344.79 346.28 347.84 349.45 351.12 352.85 - 354.63 356.48 358.38 360.35 362.37 364.45 366.58 368.78 / - 17 13 6 1 328.98 327.63 327.17 327.07 327.18 327.43 327.79 328.24 328.78 329.39 330.07 330.83 - 331.65 332.54 333.49 334.51 335.58 336.72 337.93 339.19 340.51 341.9 343.34 344.85 346.42 348.04 349.73 351.47 - 353.28 355.14 357.06 359.05 361.09 363.19 365.35 367.57 / - 17 13 7 1 326.44 324.84 324.25 324.07 324.13 324.35 324.68 325.12 325.65 326.26 326.94 327.7 - 328.53 329.43 330.4 331.43 332.52 333.68 334.91 336.2 337.55 338.96 340.44 341.97 343.57 345.24 346.96 348.75 - 350.59 352.5 354.47 356.5 358.6 360.75 362.96 365.24 / - 17 13 8 1 320.88 318.28 317.13 316.57 316.41 316.48 316.73 317.1 317.59 318.19 318.88 319.66 - 320.52 321.49 322.51 323.61 324.78 326.03 327.35 328.73 330.19 331.72 333.31 334.98 336.71 338.51 340.38 342.31 - 344.31 346.38 348.51 350.71 352.97 355.3 357.69 360.13 / - 17 13 9 1 311.2 302.85 301.52 300.93 300.75 300.85 301.16 301.63 302.24 302.97 303.82 304.78 - 305.83 306.98 308.23 309.56 310.98 312.44 314.03 315.7 317.45 319.28 321.19 323.17 325.19 327.33 329.54 331.83 - 334.18 336.61 339.09 341.67 344.33 347.05 349.85 352.7 / - 17 13 10 1 295.89 278.22 277.26 276.99 277.12 277.53 278.15 278.94 279.89 280.99 282.21 283.56 - 285.03 286.62 288.32 290.12 292.04 294.06 296.18 298.4 300.73 303.15 305.67 308.28 310.98 313.78 316.67 319.65 - 322.72 325.89 329.15 332.47 335.87 339.35 342.91 346.55 / - 17 13 11 1 256.05 250.08 249.06 248.93 249.31 250.05 251.06 252.3 253.76 255.4 257.23 259.22 - 261.38 263.7 266.16 268.78 271.53 274.42 277.45 280.6 283.89 287.29 290.82 294.47 298.23 302.1 306.09 310.18 - 314.38 318.68 323.08 327.59 332.19 336.89 341.68 346.56 / - 17 13 12 1 224.02 220.6 220.23 220.78 221.87 223.33 225.11 227.18 229.52 232.1 234.95 237.98 - 241.22 244.74 248.38 252.3 256.32 260.63 264.99 269.65 274.34 279.35 284.33 289.67 294.94 300.57 306.11 312.02 - 317.82 324.02 330.06 336.21 342.8 349.18 356.04 362.64 / - 17 13 13 1 196.53 196.2 197.13 198.77 201.06 203.92 207.2 210.83 214.78 219.01 223.5 228.25 - 233.23 238.44 243.88 249.53 255.38 261.44 267.69 274.12 280.74 287.54 294.52 301.66 308.97 316.67 325.01 333.76 - 342.34 351.11 359.95 368.85 377.96 387.01 396.34 405.83 / - 17 13 14 1 180.44 183.28 186.91 190.96 195.39 200.38 205.85 211.66 217.81 224.31 231.16 238.34 - 245.86 253.71 261.88 270.34 279.08 288.12 297.43 307.03 316.89 327.02 337.42 348.07 358.97 370.13 381.53 393.17 - 405.05 417.16 429.51 442.09 454.9 467.94 481.21 494.69 / - 17 13 15 1 176.09 181.68 187.07 193.17 200 207.56 215.84 224.82 234.48 244.78 255.7 267.19 - 279.23 291.8 304.88 318.46 332.52 347.06 362.07 377.55 393.5 409.91 426.78 444.12 461.91 480.15 498.83 517.89 - 537.34 557.18 577.42 598.07 619.13 640.62 662.54 684.88 / - 17 13 16 1 173.27 181.68 191.24 202.07 214.1 227.45 242.09 257.96 274.99 293.13 312.34 332.54 - 353.72 375.86 398.93 422.85 447.61 473.23 499.65 526.84 554.81 583.55 613.06 643.23 674.02 705.68 738.27 771.79 - 806.22 841.56 877.8 914.94 952.92 991.54 1030.73 1070.46 / - 17 13 17 1 173.77 188.23 206.16 227.02 250.44 276.22 304.2 334.37 366.63 400.91 437.17 475.35 - 515.4 557.25 600.87 645.87 692.17 740.36 790.48 842.48 896.33 952.03 1009.51 1068.67 1129.35 1191.35 1253.39 1312.55 - 1369.72 1427.34 1486.92 1549.26 1611.18 1673.67 1736.85 1803.19 / - 17 13 18 1 180.9 210.2 247.43 290.85 339 391.22 447.55 507.85 572.07 640.34 712.27 788.31 - 868.86 953.46 1042.08 1134.41 1229.91 1322.03 1412.62 1507.22 1604.58 1703.81 1807.23 1912.58 2019.65 2128.87 2239.81 2355.72 - 2469.34 2589.19 2710.82 2834.49 2960.64 3088.54 3218.72 3356.27 / - 17 13 19 1 198.66 257.8 333.42 421.21 518.98 625.44 740.29 866.02 1001.07 1146.19 1297.65 1445.39 - 1602.86 1762.27 1928.66 2108.71 2289.24 2474.46 2679.78 2876.62 3083.5 3291.23 3510.17 3736.51 3967.91 4209.77 4449.8 4697.8 - 4956.12 5222 5492.12 5759.04 6040.33 6327 6609.28 6908.67 / - 17 13 20 1 248.76 356.58 476.78 639.08 840.03 1070.43 1324.33 1577.39 1856.13 2151.27 2458.93 2785.05 - 3133.92 3499.34 3888.98 4270.89 4669.72 5122.89 5552.39 6004.4 6463.75 6996.47 7498.03 8014.49 8534.96 9087.94 9662.11 10237.89 - 10840.81 11453.75 12085.96 12737.3 13408.32 14134.17 14819.81 15549.01 / - 17 14 1 1 333.35 332.25 331.89 331.85 332 332.28 332.65 333.12 333.66 334.28 334.97 335.72 - 336.54 337.43 338.38 339.38 340.45 341.58 342.77 344.02 345.33 346.7 348.13 349.61 351.16 352.76 354.42 356.14 - 357.92 359.76 361.65 363.6 365.61 367.68 369.8 371.99 / - 17 14 2 1 333.26 332.14 331.78 331.73 331.88 332.15 332.53 332.99 333.53 334.15 334.84 335.59 - 336.41 337.3 338.24 339.25 340.32 341.45 342.64 343.89 345.2 346.57 347.99 349.48 351.03 352.63 354.29 356.01 - 357.79 359.63 361.52 363.47 365.49 367.55 369.68 371.86 / - 17 14 3 1 333.08 331.94 331.56 331.51 331.65 331.92 332.29 332.76 333.3 333.91 334.6 335.35 - 336.17 337.05 338 339.01 340.08 341.21 342.4 343.65 344.96 346.32 347.75 349.24 350.79 352.39 354.06 355.78 - 357.56 359.4 361.29 363.25 365.26 367.33 369.46 371.65 / - 17 14 4 1 332.74 331.56 331.16 331.1 331.23 331.49 331.86 332.32 332.86 333.47 334.15 334.91 - 335.72 336.61 337.55 338.56 339.63 340.76 341.95 343.2 344.51 345.88 347.31 348.8 350.35 351.96 353.63 355.35 - 357.14 358.98 360.88 362.84 364.86 366.93 369.07 371.26 / - 17 14 5 1 332.09 330.82 330.39 330.31 330.42 330.68 331.04 331.49 332.02 332.63 333.32 334.07 - 334.88 335.77 336.71 337.72 338.79 339.92 341.12 342.37 343.69 345.06 346.5 348 349.55 351.16 352.84 354.57 - 356.36 358.21 360.12 362.09 364.12 366.21 368.35 370.56 / - 17 14 6 1 330.79 329.39 328.89 328.77 328.86 329.09 329.44 329.89 330.42 331.03 331.71 332.46 - 333.27 334.16 335.11 336.12 337.2 338.34 339.54 340.81 342.13 343.52 344.97 346.48 348.05 349.68 351.37 353.12 - 354.93 356.8 358.73 360.72 362.77 364.88 367.05 369.28 / - 17 14 7 1 328.06 326.28 325.58 325.34 325.35 325.53 325.84 326.26 326.77 327.37 328.04 328.8 - 329.62 330.52 331.49 332.52 333.62 334.78 336.01 337.31 338.67 340.09 341.58 343.13 344.75 346.42 348.16 349.96 - 351.83 353.75 355.74 357.79 359.91 362.08 364.32 366.61 / - 17 14 8 1 322.25 319.26 317.61 317.04 316.83 316.87 317.1 317.46 317.95 318.55 319.24 320.03 - 320.91 321.86 322.9 324.02 325.21 326.48 327.82 329.24 330.72 332.28 333.91 335.61 337.37 339.21 341.11 343.09 - 345.13 347.24 349.41 351.65 353.96 356.33 358.78 361.28 / - 17 14 9 1 312.53 302.75 301.43 300.84 300.68 300.79 301.12 301.61 302.24 303 303.88 304.87 - 305.96 307.14 308.42 309.76 311.22 312.76 314.4 316.11 317.91 319.76 321.72 323.76 325.88 328.08 330.31 332.67 - 335.09 337.59 340.17 342.78 345.5 348.29 351.15 354.07 / - 17 14 10 1 296.95 278.18 277.2 276.92 277.06 277.47 278.1 278.91 279.88 280.99 282.23 283.61 - 285.1 286.72 288.45 290.29 292.24 294.29 296.45 298.72 301.08 303.54 306.11 308.77 311.52 314.37 317.31 320.35 - 323.47 326.68 329.99 333.37 336.85 340.41 344.06 347.79 / - 17 14 11 1 255.57 250.18 249.17 249.05 249.45 250.2 251.23 252.5 253.97 255.65 257.51 259.54 - 261.73 264.08 266.59 269.24 272.04 274.98 278.06 281.26 284.6 288.06 291.65 295.35 299.17 303.11 307.15 311.31 - 315.58 319.95 324.42 328.99 333.67 338.44 343.31 348.27 / - 17 14 12 1 224.05 220.74 220.38 220.98 222.07 223.56 225.38 227.48 229.84 232.44 235.28 238.38 - 241.66 245.13 248.88 252.75 256.89 261.12 265.64 270.35 275.08 280.14 285.18 290.56 295.89 301.59 307.19 313.16 - 319.02 325.28 331.38 337.92 344.26 350.7 357.63 364.3 / - 17 14 13 1 196.68 196.39 197.35 199.01 201.37 204.28 207.61 211.29 215.27 219.54 224.06 228.84 - 233.86 239.11 244.58 250.26 256.15 262.24 268.52 275 281.66 288.5 295.52 302.71 310.07 317.59 325.27 333.86 - 342.68 351.62 360.77 369.84 378.93 388.36 397.63 407.48 / - 17 14 14 1 180.67 183.68 187.38 191.46 195.92 200.92 206.4 212.23 218.4 224.91 231.76 238.96 - 246.49 254.35 262.54 271.04 279.83 288.89 298.24 307.87 317.77 327.94 338.36 349.05 360 371.19 382.63 394.32 - 406.25 418.41 430.81 443.45 456.31 469.41 482.73 496.28 / - 17 14 15 1 176.37 182.07 187.5 193.61 200.45 208.02 216.3 225.28 234.94 245.24 256.15 267.64 - 279.68 292.24 305.32 318.9 332.97 347.53 362.55 378.03 393.97 410.37 427.22 444.53 462.29 480.5 499.16 518.27 - 537.79 557.7 578.01 598.71 619.82 641.34 663.28 685.64 / - 17 14 16 1 173.47 181.99 191.57 202.41 214.44 227.76 242.38 258.23 275.23 293.34 312.5 332.68 - 353.85 375.95 398.99 422.89 447.61 473.17 499.54 526.71 554.67 583.39 612.86 643 673.75 705.33 737.82 771.22 - 805.51 840.69 876.76 913.72 951.54 990.24 1029.66 1069.68 / - 17 14 17 1 173.92 188.44 206.37 227.19 250.57 276.29 304.21 334.3 366.5 400.7 436.84 474.88 - 514.79 556.54 600.07 645.1 691.37 739.45 789.41 841.21 894.84 950.27 1007.47 1066.4 1127.04 1188.89 1251.25 1310.85 - 1369.27 1426.99 1488.82 1550.79 1613.9 1677.78 1742.55 1810.41 / - 17 14 18 1 180.98 210.14 247.4 290.81 338.92 391.1 447.29 507.41 571.47 639.52 711.24 787.22 - 867.19 951.74 1040 1132.25 1227.4 1319.75 1410.94 1506.09 1604.12 1704.11 1808.25 1914.39 2022.43 2132.68 2244.71 2361.6 - 2476.7 2597.69 2720.61 2845.72 2973.23 3102.69 3234.43 3373.21 / - 17 14 19 1 198.69 257.78 333.14 420.54 517.73 624.01 738.16 864.24 999.83 1144.91 1296.09 1445.44 - 1597.21 1763.61 1931.18 2114.62 2294.6 2481.53 2673.62 2887.47 3096.25 3306.38 3526.12 3754.74 3990.15 4227.35 4477.58 4728.58 - 4989.76 5248.78 5531.9 5802.18 6086.44 6376.95 6663.46 6965.7 / - 17 14 20 1 248.91 357.3 478.31 632.99 832.55 1064.94 1318.09 1570.73 1850.31 2147.09 2457.73 2796.48 - 3148.49 3517.61 3886.34 4297.07 4699.93 5119.57 5592.19 6048.79 6513.57 7000.43 7558.8 8080.76 8608 9161.64 9734.75 10324.39 - 10910.26 11557.45 12196.99 12855.92 13533.4 14229.07 14962.47 15699.6 / - 17 15 1 1 335.14 334.05 333.7 333.66 333.8 334.07 334.45 334.91 335.45 336.06 336.75 337.5 - 338.32 339.2 340.15 341.15 342.22 343.35 344.54 345.79 347.1 348.47 349.9 351.39 352.93 354.54 356.21 357.93 - 359.71 361.55 363.45 365.4 367.42 369.49 371.62 373.81 / - 17 15 2 1 335.04 333.94 333.58 333.53 333.67 333.94 334.31 334.77 335.31 335.93 336.61 337.36 - 338.18 339.06 340.01 341.01 342.08 343.21 344.4 345.65 346.96 348.33 349.76 351.25 352.79 354.4 356.07 357.79 - 359.57 361.41 363.31 365.27 367.29 369.36 371.49 373.69 / - 17 15 3 1 334.86 333.73 333.36 333.3 333.44 333.7 334.07 334.53 335.07 335.68 336.36 337.11 - 337.93 338.81 339.75 340.76 341.83 342.96 344.15 345.4 346.71 348.08 349.51 351 352.54 354.15 355.82 357.54 - 359.33 361.17 363.07 365.03 367.05 369.13 371.26 373.46 / - 17 15 4 1 334.52 333.34 332.94 332.87 332.99 333.25 333.62 334.07 334.6 335.21 335.89 336.64 - 337.46 338.34 339.28 340.29 341.35 342.48 343.68 344.93 346.24 347.61 349.04 350.53 352.08 353.7 355.36 357.09 - 358.88 360.73 362.63 364.6 366.62 368.7 370.85 373.05 / - 17 15 5 1 333.84 332.57 332.13 332.04 332.14 332.39 332.74 333.19 333.72 334.32 335 335.75 - 336.56 337.44 338.39 339.4 340.47 341.6 342.79 344.05 345.36 346.74 348.18 349.68 351.23 352.85 354.53 356.27 - 358.06 359.92 361.83 363.81 365.84 367.94 370.09 372.3 / - 17 15 6 1 332.49 331.06 330.54 330.4 330.48 330.7 331.04 331.48 332 332.6 333.28 334.03 - 334.84 335.73 336.68 337.69 338.77 339.91 341.11 342.38 343.7 345.09 346.55 348.06 349.63 351.27 352.96 354.72 - 356.54 358.41 360.35 362.35 364.41 366.53 368.71 370.95 / - 17 15 7 1 329.49 327.51 326.68 326.35 326.3 326.44 326.71 327.11 327.6 328.19 328.86 329.61 - 330.43 331.33 332.3 333.33 334.44 335.62 336.86 338.16 339.54 340.98 342.48 344.05 345.68 347.38 349.14 350.96 - 352.85 354.8 356.82 358.89 361.03 363.24 365.5 367.83 / - 17 15 8 1 323.5 319.83 318.02 317.28 317.03 317.04 317.24 317.6 318.09 318.68 319.39 320.19 - 321.08 322.05 323.11 324.25 325.47 326.77 328.14 329.59 331.11 332.71 334.38 336.11 337.92 339.8 341.75 343.77 - 345.86 348.02 350.24 352.54 354.89 357.28 359.78 362.35 / - 17 15 9 1 313.7 302.49 301.12 300.61 300.5 300.66 301.02 301.55 302.22 303.02 303.91 304.93 - 306.05 307.27 308.59 310.01 311.51 313.06 314.74 316.51 318.36 320.3 322.27 324.37 326.55 328.81 331.11 333.53 - 336.02 338.6 341.21 343.93 346.73 349.6 352.51 355.53 / - 17 15 10 1 297.87 278.15 277.14 276.86 277 277.41 278.05 278.88 279.86 280.99 282.26 283.66 - 285.18 286.82 288.58 290.46 292.44 294.53 296.73 299.04 301.45 303.95 306.56 309.27 312.08 314.98 317.97 321.06 - 324.24 327.51 330.87 334.32 337.86 341.49 345.2 348.99 / - 17 15 11 1 254.95 250.29 249.28 249.17 249.58 250.35 251.4 252.69 254.2 255.9 257.79 259.85 - 262.08 264.47 267.02 269.72 272.56 275.55 278.67 281.93 285.32 288.84 292.48 296.24 300.13 304.12 308.24 312.46 - 316.79 321.23 325.78 330.42 335.17 340.02 344.96 350 / - 17 15 12 1 224.19 220.84 220.55 221.15 222.3 223.81 225.62 227.74 230.13 232.75 235.66 238.74 - 242.04 245.6 249.31 253.28 257.47 261.73 266.3 270.91 275.83 280.76 286.02 291.46 296.84 302.59 308.25 314.31 - 320.23 326.55 332.71 339.31 345.72 352.59 359.22 365.97 / - 17 15 13 1 196.84 196.58 197.56 199.27 201.71 204.68 208.06 211.78 215.8 220.1 224.66 229.47 - 234.52 239.8 245.3 251.01 256.93 263.06 269.38 275.89 282.59 289.46 296.52 303.75 311.15 318.72 326.45 334.34 - 342.38 351.71 360.96 370.29 379.68 389.16 398.76 408.49 / - 17 15 14 1 180.99 184.15 187.92 192.03 196.5 201.53 207.03 212.87 219.04 225.57 232.43 239.63 - 247.16 255.03 263.22 271.73 280.54 289.64 299.02 308.67 318.6 328.79 339.25 349.97 360.94 372.17 383.65 395.37 - 407.34 419.54 431.99 444.67 457.58 470.72 484.09 497.69 / - 17 15 15 1 176.77 182.52 187.98 194.1 200.94 208.51 216.79 225.77 235.42 245.71 256.61 268.08 - 280.1 292.64 305.69 319.24 333.28 347.81 362.82 378.31 394.24 410.62 427.45 444.72 462.43 480.59 499.19 518.23 - 537.7 557.62 577.96 598.72 619.87 641.43 663.39 685.74 / - 17 15 16 1 173.8 182.37 191.96 202.79 214.79 228.09 242.68 258.48 275.43 293.49 312.59 332.71 - 353.81 375.88 398.87 422.74 447.41 472.89 499.16 526.22 554.06 582.68 612.08 642.24 672.97 704.49 736.88 770.15 - 804.28 839.3 875.2 912.02 949.74 988.34 1027.72 1067.86 / - 17 15 17 1 174.17 188.7 206.59 227.36 250.67 276.3 304.11 334.08 366.18 400.3 436.31 474.19 - 513.92 555.46 598.81 643.87 690.17 738.16 787.96 839.55 892.98 948.3 1005.38 1064.07 1124.25 1185.71 1247.93 1307.86 - 1366.81 1425.97 1487.53 1550.07 1613.79 1678.33 1743.73 1812.31 / - 17 15 18 1 181.13 210.2 247.4 290.7 338.66 390.77 446.8 506.68 570.46 638.21 709.78 785.51 - 865.39 949.8 1037.99 1129.69 1224.29 1317.83 1408.79 1504.6 1603.29 1704.11 1809.02 1915.97 2025 2136.34 2249.61 2367.63 - 2487.66 2606.5 2730.77 2857.32 2986.54 3117.57 3254.77 3391.11 / - 17 15 19 1 198.77 258.06 332.93 419.82 516.47 623.77 737.81 862.37 996.64 1143.07 1293.91 1444.22 - 1597.2 1764.71 1933.67 2118.64 2300.18 2489.04 2683.24 2898.91 3109.95 3322.75 3545.07 3774.71 4013.44 4254.56 4508.1 4762.09 - 5026.06 5289.1 5564.42 5849.61 6137.47 6431.19 6722.42 7028.81 / - 17 15 20 1 249.19 358.3 480.36 625.93 827.96 1056.72 1304.05 1564.23 1842.71 2145.31 2458.46 2791.94 - 3142.13 3516.01 3910.76 4297.1 4733.85 5158.25 5636.54 6098.47 6569.3 7061.91 7561.86 8155.09 8689.53 9248.82 9821.83 10413.51 - 11011.62 11643.9 12288.5 12985.91 13671.61 14376.06 15100.79 15824.31 / - 17 16 1 1 336.81 335.79 335.45 335.42 335.56 335.84 336.21 336.67 337.21 337.82 338.51 339.26 - 340.07 340.95 341.9 342.9 343.97 345.1 346.29 347.54 348.85 350.22 351.65 353.14 354.69 356.3 357.96 359.69 - 361.48 363.32 365.22 367.19 369.21 371.28 373.42 375.62 / - 17 16 2 1 336.72 335.67 335.33 335.29 335.43 335.7 336.07 336.53 337.07 337.68 338.36 339.11 - 339.93 340.81 341.75 342.76 343.82 344.95 346.14 347.39 348.7 350.07 351.5 352.99 354.54 356.15 357.82 359.55 - 361.33 363.18 365.08 367.04 369.06 371.14 373.28 375.48 / - 17 16 3 1 336.53 335.46 335.1 335.05 335.18 335.45 335.82 336.27 336.81 337.42 338.1 338.85 - 339.66 340.54 341.48 342.49 343.55 344.68 345.87 347.12 348.43 349.8 351.23 352.73 354.28 355.89 357.55 359.28 - 361.07 362.92 364.82 366.79 368.81 370.9 373.04 375.24 / - 17 16 4 1 336.18 335.05 334.66 334.59 334.71 334.97 335.33 335.78 336.31 336.92 337.6 338.34 - 339.16 340.04 340.98 341.98 343.05 344.18 345.37 346.62 347.93 349.31 350.74 352.23 353.79 355.4 357.07 358.8 - 360.6 362.45 364.36 366.33 368.36 370.45 372.6 374.8 / - 17 16 5 1 335.47 334.24 333.8 333.7 333.8 334.04 334.39 334.84 335.36 335.97 336.64 337.39 - 338.2 339.08 340.02 341.03 342.1 343.23 344.42 345.68 346.99 348.37 349.81 351.31 352.87 354.5 356.18 357.92 - 359.72 361.58 363.5 365.49 367.53 369.63 371.79 374.01 / - 17 16 6 1 334.02 332.55 331.99 331.82 331.87 332.08 332.4 332.83 333.34 333.93 334.61 335.35 - 336.16 337.04 337.99 339.01 340.08 341.23 342.44 343.71 345.04 346.43 347.89 349.41 351 352.64 354.34 356.11 - 357.94 359.83 361.78 363.79 365.86 368 370.19 372.45 / - 17 16 7 1 330.7 328.48 327.5 327.06 326.94 327.02 327.26 327.63 328.11 328.68 329.34 330.09 - 330.91 331.81 332.79 333.84 334.95 336.14 337.4 338.73 340.12 341.58 343.11 344.71 346.37 348.09 349.88 351.74 - 353.66 355.64 357.69 359.81 361.98 364.23 366.53 368.9 / - 17 16 8 1 324.62 320.03 318.05 317.33 317.04 317.02 317.2 317.55 318.04 318.64 319.36 320.18 - 321.08 322.08 323.17 324.34 325.59 326.93 328.34 329.82 331.39 333.03 334.74 336.52 338.38 340.31 342.31 344.38 - 346.52 348.74 351.02 353.37 355.79 358.28 360.8 363.43 / - 17 16 9 1 314.67 301.73 300.66 300.25 300.22 300.44 300.86 301.44 302.16 303 303.93 304.99 - 306.16 307.43 308.79 310.25 311.8 313.4 315.13 316.95 318.86 320.8 322.88 325.04 327.28 329.55 331.96 334.44 - 337 339.6 342.32 345.12 347.99 350.9 353.92 357.02 / - 17 16 10 1 298.61 278.12 277.09 276.8 276.94 277.36 278.01 278.85 279.85 281 282.29 283.72 - 285.27 286.94 288.73 290.64 292.66 294.79 297.03 299.37 301.82 304.38 307.03 309.79 312.65 315.6 318.65 321.79 - 325.03 328.36 331.78 335.3 338.9 342.59 346.37 350.23 / - 17 16 11 1 254.16 250.39 249.38 249.29 249.71 250.5 251.57 252.88 254.41 256.15 258.07 260.16 - 262.43 264.86 267.45 270.19 273.08 276.12 279.29 282.6 286.05 289.62 293.32 297.15 301.09 305.16 309.34 313.63 - 318.03 322.54 327.15 331.88 336.7 341.62 346.65 351.77 / - 17 16 12 1 224.23 220.99 220.7 221.35 222.49 224.02 225.89 228.03 230.44 233.09 235.98 239.14 - 242.47 246 249.81 253.83 257.95 262.35 266.82 271.61 276.58 281.56 286.87 292.15 297.8 303.37 309.32 315.43 - 321.41 327.82 334.05 340.71 347.19 354.12 360.83 368.03 / - 17 16 13 1 196.99 196.78 197.78 199.56 202.09 205.13 208.57 212.33 216.39 220.73 225.32 230.16 - 235.23 240.54 246.06 251.8 257.75 263.9 270.25 276.79 283.52 290.43 297.52 304.79 312.23 319.83 327.6 335.54 - 343.63 351.88 360.58 370.1 379.8 389.57 399.39 409.3 / - 17 16 14 1 181.4 184.73 188.56 192.68 197.18 202.25 207.76 213.6 219.77 226.29 233.14 240.33 - 247.86 255.72 263.9 272.4 281.21 290.33 299.73 309.41 319.36 329.57 340.04 350.78 361.77 373.02 384.52 396.26 - 408.25 420.49 432.96 445.67 458.62 471.8 485.21 498.86 / - 17 16 15 1 177.31 183.08 188.54 194.67 201.51 209.06 217.33 226.28 235.91 246.17 257.04 268.49 - 280.48 292.97 305.97 319.46 333.44 347.9 362.85 378.26 394.14 410.48 427.28 444.52 462.18 480.27 498.79 517.74 - 537.12 556.93 577.16 597.82 618.89 640.37 662.25 684.56 / - 17 16 16 1 174.25 182.86 192.45 203.24 215.18 228.43 242.95 258.7 275.59 293.57 312.59 332.61 - 353.61 375.56 398.45 422.26 446.86 472.23 498.37 525.27 552.94 581.39 610.6 640.56 671.26 702.76 735.09 768.26 - 802.25 837.09 872.75 909.25 946.57 984.71 1023.66 1063.4 / - 17 16 17 1 174.5 189.01 206.84 227.51 250.69 276.21 303.87 333.7 365.63 399.58 435.46 473.17 - 512.68 553.97 597.04 641.84 688.18 736.17 785.87 837.27 890.38 945.18 1001.66 1059.78 1119.45 1180.49 1242.49 1302.61 - 1362.02 1422.62 1483.86 1546.96 1611.25 1676.46 1744.7 1811.68 / - 17 16 18 1 181.34 210.28 247.33 290.5 338.2 390.04 445.91 505.58 568.97 636.31 707.6 783.05 - 862.63 946.51 1034.01 1125.11 1219.3 1313.5 1406.11 1501.34 1600.66 1704.28 1808.24 1916.17 2026.27 2138.8 2253.37 2372.52 - 2494.01 2614.53 2740.41 2868.52 2999.34 3132.33 3271.47 3409.11 / - 17 16 19 1 198.93 258.51 332.93 419.95 516.39 621.91 735.63 859.87 994.39 1139.65 1290.27 1436.55 - 1596.34 1764.58 1935.01 2111.05 2304.91 2495.82 2692.43 2897.8 3123.53 3339.44 3564.53 3795.78 4038.21 4283.45 4536 4798.24 - 5065.51 5332.69 5611.54 5901.07 6192.99 6490.85 6787.06 7097.45 / - 17 16 20 1 249.63 359.72 483.1 620.42 822.07 1049.99 1293.06 1549.61 1836.2 2130.41 2453.81 2790.42 - 3154.98 3509.44 3907.34 4327.92 4738.35 5201.49 5646.79 6153.8 6631.64 7130.78 7638.74 8169.6 8780.51 9346.76 9926.28 10518.91 - 11122.27 11765.08 12426.02 13099.55 13792.96 14541.39 15276.01 16012.44 / - 17 17 1 1 338.37 337.44 337.14 337.13 337.28 337.56 337.94 338.4 338.94 339.55 340.24 340.99 - 341.8 342.68 343.62 344.63 345.7 346.82 348.01 349.27 350.58 351.95 353.38 354.87 356.42 358.03 359.7 361.43 - 363.22 365.06 366.97 368.94 370.96 373.05 375.19 377.39 / - 17 17 2 1 338.27 337.32 337.01 336.99 337.14 337.42 337.79 338.25 338.79 339.4 340.08 340.83 - 341.65 342.52 343.47 344.47 345.54 346.67 347.86 349.11 350.42 351.79 353.22 354.71 356.26 357.87 359.54 361.27 - 363.06 364.91 366.82 368.79 370.81 372.9 375.04 377.25 / - 17 17 3 1 338.08 337.1 336.77 336.74 336.88 337.15 337.52 337.97 338.51 339.12 339.8 340.54 - 341.36 342.24 343.18 344.18 345.25 346.38 347.56 348.82 350.13 351.5 352.93 354.42 355.98 357.59 359.26 360.99 - 362.78 364.63 366.55 368.52 370.54 372.63 374.78 376.99 / - 17 17 4 1 337.71 336.66 336.3 336.24 336.37 336.63 336.99 337.44 337.97 338.58 339.25 340 - 340.81 341.69 342.63 343.63 344.7 345.83 347.02 348.27 349.59 350.96 352.4 353.89 355.45 357.06 358.74 360.48 - 362.27 364.13 366.05 368.02 370.06 372.15 374.31 376.52 / - 17 17 5 1 336.96 335.79 335.36 335.27 335.38 335.62 335.96 336.41 336.93 337.53 338.2 338.95 - 339.76 340.63 341.58 342.58 343.65 344.79 345.98 347.24 348.56 349.94 351.38 352.89 354.45 356.08 357.77 359.51 - 361.32 363.19 365.12 367.11 369.16 371.27 373.44 375.67 / - 17 17 6 1 335.25 333.69 333.06 332.83 332.85 333.02 333.33 333.73 334.24 334.82 335.49 336.23 - 337.04 337.92 338.87 339.89 340.98 342.13 343.34 344.62 345.97 347.38 348.85 350.38 351.98 353.64 355.37 357.15 - 359 360.91 362.89 364.92 367.02 369.18 371.4 373.68 / - 17 17 7 1 331.65 329.16 327.99 327.43 327.22 327.25 327.44 327.78 328.23 328.79 329.45 330.19 - 331.02 331.93 332.92 333.99 335.13 336.34 337.62 338.97 340.4 341.89 343.46 345.09 346.79 348.55 350.39 352.29 - 354.26 356.29 358.39 360.55 362.78 365.08 367.44 369.86 / - 17 17 8 1 325.52 320.09 317.94 317.18 316.88 316.87 317.07 317.44 317.94 318.57 319.31 320.16 - 321.1 322.13 323.25 324.46 325.76 327.14 328.6 330.11 331.72 333.41 335.18 337.03 338.95 340.94 342.99 345.14 - 347.35 349.63 351.99 354.4 356.9 359.47 362.1 364.81 / - 17 17 9 1 315.42 300.72 299.94 299.72 299.82 300.15 300.66 301.3 302.07 302.97 303.97 305.08 - 306.3 307.61 309.02 310.51 312.12 313.79 315.57 317.42 319.38 321.4 323.52 325.73 328.01 330.37 332.84 335.36 - 337.99 340.68 343.47 346.29 349.24 352.27 355.33 358.52 / - 17 17 10 1 298.29 278.09 277.03 276.74 276.88 277.31 277.97 278.83 279.85 281.02 282.33 283.78 - 285.36 287.06 288.88 290.82 292.88 295.05 297.33 299.72 302.21 304.81 307.52 310.33 313.23 316.24 319.35 322.55 - 325.85 329.24 332.72 336.3 339.96 343.72 347.57 351.5 / - 17 17 11 1 253.75 250.5 249.49 249.41 249.84 250.65 251.74 253.08 254.64 256.4 258.35 260.48 - 262.78 265.25 267.89 270.67 273.61 276.69 279.92 283.29 286.79 290.42 294.18 298.07 302.08 306.2 310.45 314.81 - 319.28 323.87 328.56 333.35 338.25 343.25 348.36 353.56 / - 17 17 12 1 224.4 221.13 220.87 221.53 222.71 224.26 226.15 228.32 230.75 233.43 236.34 239.48 - 242.89 246.46 250.31 254.28 258.53 262.87 267.5 272.31 277.17 282.36 287.54 293.06 298.76 304.38 310.39 316.29 - 322.6 329.07 335.36 342.12 348.66 355.67 362.44 369.72 / - 17 17 13 1 197.16 196.97 198 199.91 202.56 205.69 209.19 213 217.1 221.47 226.08 230.95 - 236.04 241.36 246.9 252.66 258.63 264.79 271.16 277.72 284.47 291.41 298.52 305.82 313.28 320.92 328.72 336.69 - 344.82 353.11 361.56 370.16 378.91 388.87 399.06 409.35 / - 17 17 14 1 181.95 185.48 189.35 193.49 198.04 203.17 208.67 214.49 220.65 227.14 233.96 241.13 - 248.62 256.43 264.57 273.03 281.8 290.87 300.25 309.93 319.9 330.14 340.64 351.38 362.38 373.63 385.13 396.88 - 408.88 421.11 433.6 446.32 459.28 472.47 485.9 499.57 / - 17 17 15 1 178.07 183.78 189.25 195.37 202.19 209.72 217.95 226.86 236.43 246.64 257.45 268.82 - 280.72 293.14 306.06 319.47 333.37 347.74 362.57 377.87 393.63 409.83 426.49 443.59 461.13 479.11 497.52 516.37 - 535.65 555.34 575.45 595.96 616.88 638.2 659.91 682.03 / - 17 17 16 1 174.91 183.53 193.09 203.79 215.64 228.8 243.23 258.87 275.64 293.5 312.41 332.31 - 353.17 374.97 397.69 421.24 445.59 470.72 496.64 523.36 550.86 579.11 608.1 637.83 668.28 699.51 731.55 764.39 - 798.05 832.5 867.77 903.84 940.72 978.41 1016.89 1056.15 / - 17 17 17 1 174.99 189.44 207.18 227.66 250.64 275.92 303.41 333.07 364.78 398.46 434.04 471.47 - 510.72 551.76 594.51 638.96 685.02 732.67 781.96 832.89 885.49 939.73 995.61 1053.11 1112.17 1172.65 1234.23 1295.7 - 1354.67 1415.35 1478.19 1542.13 1606.78 1672.78 1740.21 1808.04 / - 17 17 18 1 181.64 210.37 247.21 290.09 337.44 388.88 444.25 503.61 566.62 633.51 704.14 778.99 - 857.9 940.94 1027.88 1118.32 1211.85 1305.94 1399.36 1496.36 1595.64 1699.9 1805.03 1914 2025.3 2139.16 2257.47 2375.7 - 2498.61 2623.96 2750.74 2879.67 3014.38 3149.58 3287.03 3426.83 / - 17 17 19 1 199.23 259.24 333.44 419.32 515.09 621.22 734.47 857.53 989.31 1131.05 1281.42 1433.03 - 1593.2 1756.98 1934.92 2113.06 2308.57 2501.91 2701.22 2909.12 3137.24 3357.47 3584.95 3819.56 4063.76 4312.88 4570.81 4832.29 - 5108.39 5380.62 5663.62 5949.18 6254.28 6556.68 6858.97 7174.09 / - 17 17 20 1 250.36 361.77 486.81 626.16 817.04 1039.68 1284.71 1544.94 1822.32 2124.48 2443.6 2783.49 - 3146.76 3525.48 3926.81 4324.55 4769.3 5202.84 5694.08 6162.28 6650.56 7205.32 7723.35 8263.51 8818.46 9387.6 10044.48 10645.5 - 11257.75 11899.12 12561.68 13260.99 13969.7 14698.5 15442.67 16231.56 / - 17 18 1 1 339.79 339 338.76 338.78 338.95 339.24 339.62 340.09 340.63 341.25 341.93 342.68 - 343.5 344.37 345.32 346.32 347.39 348.52 349.71 350.96 352.27 353.64 355.07 356.57 358.12 359.73 361.4 363.13 - 364.93 366.78 368.69 370.66 372.69 374.78 376.93 379.14 / - 17 18 2 1 339.69 338.87 338.62 338.63 338.8 339.08 339.46 339.93 340.47 341.08 341.76 342.51 - 343.32 344.2 345.14 346.15 347.22 348.34 349.53 350.78 352.1 353.47 354.9 356.39 357.95 359.56 361.23 362.97 - 364.76 366.61 368.52 370.5 372.53 374.62 376.77 378.98 / - 17 18 3 1 339.48 338.62 338.35 338.35 338.5 338.78 339.16 339.62 340.15 340.76 341.44 342.19 - 343 343.88 344.82 345.83 346.89 348.02 349.21 350.46 351.78 353.15 354.58 356.08 357.63 359.25 360.92 362.66 - 364.45 366.31 368.23 370.2 372.24 374.33 376.49 378.7 / - 17 18 4 1 339.08 338.14 337.82 337.79 337.93 338.2 338.56 339.02 339.55 340.15 340.83 341.58 - 342.39 343.27 344.21 345.21 346.28 347.41 348.6 349.86 351.17 352.55 353.99 355.48 357.04 358.66 360.34 362.09 - 363.89 365.75 367.67 369.66 371.7 373.8 375.96 378.19 / - 17 18 5 1 338.17 337.01 336.58 336.48 336.57 336.79 337.13 337.57 338.09 338.68 339.35 340.1 - 340.91 341.78 342.73 343.74 344.81 345.95 347.15 348.42 349.74 351.13 352.58 354.1 355.67 357.31 359.01 360.77 - 362.59 364.48 366.42 368.43 370.49 372.62 374.81 377.06 / - 17 18 6 1 336.09 334.38 333.63 333.32 333.28 333.41 333.68 334.07 334.55 335.13 335.79 336.53 - 337.34 338.23 339.19 340.22 341.32 342.49 343.73 345.03 346.4 347.83 349.33 350.89 352.52 354.21 355.97 357.79 - 359.68 361.62 363.64 365.71 367.85 370.05 372.31 374.64 / - 17 18 7 1 332.36 329.57 328.2 327.5 327.2 327.16 327.31 327.61 328.05 328.6 329.26 330.01 - 330.85 331.77 332.78 333.87 335.04 336.29 337.61 339 340.47 342.01 343.62 345.31 347.06 348.88 350.78 352.74 - 354.77 356.87 359.03 361.26 363.56 365.93 368.36 370.86 / - 17 18 8 1 326.14 319.92 317.5 316.84 316.59 316.62 316.85 317.25 317.79 318.45 319.23 320.11 - 321.09 322.17 323.34 324.59 325.93 327.32 328.82 330.41 332.08 333.83 335.66 337.57 339.55 341.57 343.71 345.92 - 348.2 350.56 353 355.5 358.05 360.7 363.43 366.22 / - 17 18 9 1 315.9 300.55 299.72 299.48 299.57 299.9 300.41 301.07 301.87 302.79 303.82 304.97 - 306.21 307.56 309.01 310.55 312.19 313.92 315.74 317.65 319.66 321.75 323.92 326.19 328.54 330.97 333.49 336.09 - 338.78 341.55 344.4 347.33 350.34 353.45 356.66 359.93 / - 17 18 10 1 297.64 278.06 276.98 276.68 276.82 277.26 277.94 278.8 279.84 281.03 282.37 283.85 - 285.45 287.18 289.04 291.02 293.11 295.32 297.64 300.07 302.61 305.26 308.02 310.88 313.84 316.9 320.06 323.32 - 326.68 330.14 333.68 337.33 341.06 344.88 348.8 352.8 / - 17 18 11 1 253.88 250.6 249.6 249.52 249.98 250.8 251.91 253.27 254.86 256.65 258.63 260.8 - 263.14 265.65 268.33 271.16 274.14 277.28 280.56 283.98 287.53 291.23 295.05 299 303.07 307.27 311.58 316.01 - 320.56 325.21 329.98 334.85 339.83 344.92 350.1 355.39 / - 17 18 12 1 224.58 221.27 221.04 221.72 222.93 224.5 226.39 228.57 231.02 233.72 236.66 239.87 - 243.25 246.92 250.72 254.8 259 263.5 268.06 272.93 277.97 283.04 288.42 293.99 299.52 305.42 311.48 317.43 - 323.8 330.02 336.68 343.15 350.1 356.82 364.05 371 / - 17 18 13 1 197.32 197.17 198.26 200.41 203.22 206.45 210.03 213.9 218.04 222.43 227.06 231.94 - 237.04 242.36 247.91 253.66 259.63 265.8 272.16 278.72 285.48 292.42 299.54 306.84 314.32 321.97 329.79 337.78 - 345.93 354.24 362.71 371.34 380.12 389.06 398.15 407.78 / - 17 18 14 1 182.78 186.53 190.42 194.55 199.26 204.42 209.89 215.67 221.78 228.22 234.98 242.08 - 249.5 257.25 265.31 273.68 282.36 291.35 300.63 310.2 320.06 330.21 340.63 351.35 362.34 373.61 385.13 396.89 - 408.89 421.12 433.58 446.28 459.22 472.4 485.81 499.45 / - 17 18 15 1 179.2 184.75 190.21 196.3 203.07 210.55 218.71 227.54 237.05 247.18 257.88 269.12 - 280.88 293.14 305.9 319.14 332.86 347.04 361.7 376.82 392.39 408.41 424.87 441.77 459.1 476.86 495.02 513.61 - 532.62 552.04 571.88 592.13 612.79 633.85 655.32 677.19 / - 17 18 16 1 175.94 184.53 194.02 204.51 216.21 229.24 243.53 259 275.6 293.27 311.96 331.64 - 352.27 373.77 396.11 419.27 443.24 468.01 493.54 519.85 546.93 574.79 603.4 632.77 662.89 693.77 725.42 757.84 - 791.04 825.01 859.75 895.26 931.54 968.6 1006.41 1044.99 / - 17 18 17 1 175.74 190.09 207.65 227.86 250.52 275.48 302.68 332 363.36 396.67 431.87 468.88 - 507.66 548.17 590.41 634.35 679.96 727.13 775.87 826.18 878.06 931.52 986.55 1043.13 1101.23 1160.78 1221.59 1283.6 - 1342.9 1404.3 1467.28 1530.93 1596.61 1663.81 1731.06 1801.22 / - 17 18 18 1 182.13 210.65 247.06 289.41 336.14 386.95 441.66 500.38 562.51 628.85 698.77 773.04 - 851.17 933.12 1018.85 1108.28 1200.87 1295.54 1389.75 1486.78 1587.79 1692.08 1799.69 1909.93 2022.69 2137.98 2256.17 2376.34 - 2500.83 2627.91 2757.58 2889.76 3024.48 3161.91 3301.79 3444.11 / - 17 18 19 1 199.78 260.51 334.16 419.55 514.54 618.29 731.69 852.55 983.73 1123.64 1272.85 1424.65 - 1585.77 1751.6 1930.23 2111.01 2300.05 2505.32 2708.7 2920.06 3135.53 3376.27 3606.29 3845.04 4091.66 4346.34 4608.08 4875.22 - 5147.72 5433.89 5721.73 6016.44 6312.64 6630.89 6940.34 7261.17 / - 17 18 20 1 251.59 364.84 492.1 634.06 811.5 1032.28 1272.15 1528.18 1810.08 2111.29 2428.9 2771.83 - 3134.48 3510.98 3926.01 4323.26 4770.41 5240.33 5697.81 6212.72 6709.78 7219.02 7749.5 8355.45 8922.25 9502.81 10089.72 10699.16 - 11416.7 12068.37 12745.5 13443.37 14161.91 14909.71 15678.98 16468.26 / - 17 19 1 1 341.06 340.44 340.28 340.34 340.54 340.85 341.24 341.72 342.27 342.89 343.57 344.32 - 345.14 346.02 346.96 347.97 349.04 350.16 351.35 352.61 353.92 355.29 356.73 358.22 359.77 361.39 363.06 364.8 - 366.59 368.45 370.37 372.34 374.38 376.47 378.63 380.84 / - 17 19 2 1 340.94 340.29 340.11 340.16 340.36 340.66 341.05 341.52 342.07 342.69 343.37 344.12 - 344.94 345.82 346.76 347.77 348.83 349.96 351.15 352.4 353.72 355.09 356.52 358.02 359.58 361.19 362.87 364.61 - 366.4 368.26 370.18 372.15 374.19 376.29 378.45 380.67 / - 17 19 3 1 340.7 339.99 339.78 339.81 340 340.29 340.67 341.14 341.68 342.29 342.98 343.73 - 344.54 345.42 346.36 347.37 348.44 349.57 350.76 352.01 353.33 354.7 356.14 357.64 359.2 360.82 362.5 364.24 - 366.04 367.9 369.82 371.81 373.85 375.95 378.11 380.34 / - 17 19 4 1 340.1 339.22 338.92 338.89 339.03 339.29 339.66 340.11 340.64 341.24 341.92 342.67 - 343.48 344.36 345.31 346.31 347.39 348.52 349.72 350.98 352.31 353.7 355.14 356.65 358.22 359.86 361.55 363.31 - 365.12 367 368.94 370.94 373 375.12 377.3 379.55 / - 17 19 5 1 338.81 337.56 337.04 336.87 336.91 337.11 337.42 337.84 338.35 338.94 339.6 340.35 - 341.16 342.05 343 344.03 345.12 346.27 347.49 348.78 350.13 351.54 353.02 354.56 356.17 357.84 359.57 361.37 - 363.22 365.15 367.13 369.17 371.28 373.45 375.68 377.98 / - 17 19 6 1 336.53 334.6 333.69 333.27 333.15 333.23 333.46 333.82 334.29 334.86 335.52 336.27 - 337.09 338 338.98 340.04 341.17 342.37 343.63 344.98 346.39 347.86 349.41 351.02 352.7 354.45 356.26 358.14 - 360.09 362.1 364.18 366.32 368.53 370.8 373.14 375.54 / - 17 19 7 1 332.74 329.72 327.96 327.24 326.93 326.88 327.04 327.36 327.81 328.38 329.05 329.83 - 330.7 331.66 332.71 333.84 335.05 336.34 337.71 339.16 340.68 342.28 343.95 345.7 347.52 349.41 351.37 353.41 - 355.51 357.69 359.94 362.26 364.64 367.1 369.62 372.22 / - 17 19 8 1 326.44 319.28 316.8 316.29 316.15 316.26 316.57 317.03 317.63 318.35 319.18 320.08 - 321.11 322.23 323.45 324.75 326.14 327.62 329.18 330.78 332.5 334.31 336.2 338.17 340.21 342.29 344.49 346.77 - 349.13 351.56 354.03 356.61 359.27 362 364.81 367.66 / - 17 19 9 1 316.1 300.38 299.51 299.24 299.32 299.65 300.17 300.84 301.64 302.58 303.63 304.79 - 306.06 307.43 308.9 310.48 312.14 313.91 315.76 317.71 319.75 321.88 324.1 326.41 328.81 331.29 333.86 336.51 - 339.25 342.07 344.98 347.97 351.04 354.19 357.42 360.74 / - 17 19 10 1 296.9 278.03 276.93 276.62 276.77 277.22 277.9 278.79 279.84 281.05 282.42 283.92 - 285.55 287.32 289.2 291.22 293.35 295.6 297.96 300.44 303.03 305.73 308.53 311.44 314.46 317.58 320.8 324.12 - 327.54 331.06 334.67 338.38 342.18 346.08 350.07 354.14 / - 17 19 11 1 254.01 250.71 249.71 249.64 250.11 250.95 252.08 253.47 255.08 256.9 258.92 261.12 - 263.5 266.05 268.77 271.65 274.68 277.87 281.2 284.57 288.17 291.91 295.79 299.79 303.92 308.17 312.54 317.03 - 321.64 326.36 331.19 336.13 341.18 346.33 351.59 356.95 / - 17 19 12 1 224.89 221.5 221.24 221.94 223.15 224.74 226.64 228.85 231.33 234.05 237.02 240.21 - 243.68 247.33 251.26 255.31 259.65 264.09 268.81 273.73 278.68 283.95 289.38 294.8 300.55 306.49 312.35 318.6 - 324.73 331.28 338 344.52 351.53 358.3 365.6 372.61 / - 17 19 13 1 197.48 197.36 198.84 201.36 204.39 207.77 211.44 215.36 219.54 223.94 228.58 233.44 - 238.52 243.81 249.32 255.04 260.97 267.09 273.42 279.94 286.65 293.55 300.64 307.9 315.35 322.97 330.77 338.74 - 346.87 355.17 363.63 372.26 381.04 389.98 399.07 408.32 / - 17 19 14 1 184.26 188.14 192.01 196.4 201.26 206.36 211.75 217.44 223.44 229.77 236.42 243.4 - 250.69 258.3 266.22 274.44 282.97 291.79 300.9 310.31 319.99 329.95 340.19 350.71 361.5 372.55 383.87 395.46 - 407.3 419.41 431.77 444.38 457.25 470.37 483.74 497.36 / - 17 19 15 1 181.11 186.26 191.67 197.69 204.37 211.73 219.81 228.58 237.97 247.93 258.42 269.43 - 280.95 292.97 305.47 318.45 331.89 345.79 360.14 374.94 390.19 405.86 421.97 438.5 455.45 472.82 490.6 508.8 - 527.41 546.42 565.84 585.67 605.89 626.52 647.55 668.97 / - 17 19 16 1 177.7 186.19 195.38 205.54 217.05 229.86 243.9 259.11 275.43 292.81 311.13 330.37 - 350.47 371.42 393.19 415.78 439.16 463.32 488.26 513.97 540.45 567.7 595.7 624.46 653.97 684.23 715.24 746.99 - 779.49 812.73 846.72 881.45 916.92 953.14 990.09 1027.79 / - 17 19 17 1 177.04 191.28 208.44 228.18 250.36 274.86 301.6 330.43 361.23 393.94 428.49 464.81 - 502.88 542.66 584.14 627.29 671.96 718.13 765.8 814.96 865.65 917.85 971.59 1026.86 1083.65 1141.93 1201.63 1262.66 - 1323.34 1385.2 1448.52 1513.08 1579.58 1646.98 1715.62 1785.51 / - 17 19 18 1 183.01 211.15 246.84 288.46 334.36 384.14 437.63 495.51 556.78 622.42 691.08 764.26 - 841.13 921.67 1005.3 1093.41 1184.92 1279.4 1374.61 1473.04 1574.73 1679.35 1787.92 1899.41 2013.7 2130.77 2250.79 2374.33 - 2499.53 2628.59 2760.39 2894.92 3032.15 3172.19 3314.85 3460.2 / - 17 19 19 1 200.78 262.39 336.26 420.63 513.38 615.16 726.56 845.72 974.08 1112.45 1259.32 1412.33 - 1574.11 1741.19 1920.8 2103.89 2294.16 2501.66 2708.01 2921.26 3142.62 3384.32 3621.36 3865.63 4116.29 4375.42 4642.79 4919.35 - 5199.58 5493.25 5787.91 6088.76 6393.11 6706.72 7038.29 7362.67 / - 17 19 20 1 253.74 369.75 500.23 645.19 805.71 1016.95 1253.66 1512.74 1788.53 2086.13 2410.32 2748.2 - 3112.01 3495.84 3902.52 4331.82 4780.39 5220.95 5714.3 6192.66 6730.8 7248.6 7832.51 8385.1 8957.25 9544.46 10218.67 10844.21 - 11491.02 12158.52 12846.81 13550.18 14397.63 15156.51 15936.41 16737.17 / - 17 20 1 1 341.9 341.38 341.26 341.34 341.55 341.87 342.27 342.75 343.3 343.92 344.61 345.37 - 346.19 347.08 348.03 349.04 350.11 351.25 352.45 353.71 355.04 356.42 357.87 359.37 360.94 362.57 364.26 366.02 - 367.83 369.7 371.64 373.63 375.69 377.81 379.98 382.22 / - 17 20 2 1 341.61 340.99 340.82 340.87 341.06 341.35 341.74 342.21 342.76 343.38 344.07 344.82 - 345.65 346.53 347.48 348.5 349.58 350.72 351.93 353.2 354.53 355.92 357.37 358.89 360.47 362.11 363.81 365.57 - 367.39 369.28 371.23 373.23 375.3 377.43 379.62 381.88 / - 17 20 3 1 341.11 340.35 340.09 340.08 340.23 340.5 340.87 341.32 341.86 342.47 343.16 343.91 - 344.74 345.63 346.58 347.61 348.69 349.84 351.06 352.34 353.68 355.08 356.55 358.08 359.68 361.33 363.05 364.83 - 366.68 368.58 370.55 372.58 374.67 376.82 379.03 381.31 / - 17 20 4 1 340.29 339.27 338.86 338.76 338.85 339.07 339.41 339.84 340.36 340.97 341.65 342.4 - 343.23 344.13 345.09 346.12 347.22 348.39 349.62 350.92 352.28 353.71 355.2 356.76 358.38 360.06 361.81 363.62 - 365.49 367.43 369.43 371.5 373.62 375.81 378.07 380.38 / - 17 20 5 1 338.91 337.48 336.83 336.57 336.56 336.71 337 337.4 337.9 338.49 339.16 339.92 - 340.75 341.66 342.64 343.69 344.81 346.01 347.27 348.6 350 351.46 352.99 354.59 356.26 357.99 359.79 361.65 - 363.58 365.58 367.64 369.76 371.95 374.21 376.53 378.91 / - 17 20 6 1 336.61 334.5 333.47 332.96 332.79 332.83 333.04 333.39 333.86 334.43 335.1 335.87 - 336.71 337.64 338.66 339.75 340.91 342.15 343.47 344.86 346.32 347.85 349.46 351.14 352.88 354.7 356.59 358.54 - 360.57 362.66 364.82 367.05 369.35 371.72 374.15 376.65 / - 17 20 7 1 332.77 329.58 327.43 326.76 326.46 326.46 326.66 327.02 327.51 328.12 328.83 329.65 - 330.56 331.57 332.66 333.84 335.1 336.44 337.87 339.37 340.95 342.61 344.34 346.15 348.03 349.94 351.97 354.08 - 356.27 358.52 360.85 363.26 365.73 368.28 370.9 373.59 / - 17 20 8 1 326.41 318.45 315.82 315.58 315.64 315.92 316.35 316.92 317.59 318.39 319.3 320.29 - 321.38 322.56 323.81 325.18 326.63 328.13 329.75 331.45 333.2 335.06 336.97 339 341.11 343.29 345.49 347.84 - 350.26 352.76 355.28 357.93 360.66 363.41 366.29 369.25 / - 17 20 9 1 315.97 300.22 299.3 299.01 299.08 299.41 299.93 300.6 301.42 302.37 303.44 304.62 - 305.91 307.31 308.81 310.41 312.11 313.9 315.79 317.78 319.86 322.03 324.29 326.65 329.09 331.62 334.24 336.95 - 339.74 342.62 345.58 348.63 351.76 354.97 358.27 361.65 / - 17 20 10 1 295.99 278 276.88 276.57 276.71 277.17 277.87 278.77 279.84 281.08 282.46 283.99 - 285.65 287.45 289.37 291.42 293.59 295.88 298.29 300.81 303.45 306.2 309.05 312.02 315.09 318.27 321.55 324.93 - 328.41 331.99 335.67 339.45 343.32 347.29 351.35 355.5 / - 17 20 11 1 254.14 250.81 249.81 249.76 250.24 251.1 252.25 253.66 255.3 257.15 259.2 261.44 - 263.86 266.45 269.21 272.06 275.14 278.36 281.74 285.26 288.93 292.73 296.66 300.73 304.77 309.08 313.51 318.06 - 322.74 327.53 332.43 337.45 342.57 347.8 353.13 358.56 / - 17 20 12 1 225.25 221.82 221.48 222.16 223.38 225 226.96 229.26 231.87 234.74 237.84 241.16 - 244.75 248.48 252.48 256.59 260.97 265.43 270.17 275.1 280.06 285.33 290.61 296.24 302.01 307.75 313.83 320.1 - 326.23 332.79 339.16 345.99 352.98 359.72 366.97 373.94 / - 17 20 13 1 197.65 198.72 201.55 204.76 208.18 211.78 215.56 219.51 223.64 227.96 232.47 237.19 - 242.11 247.23 252.56 258.1 263.83 269.76 275.89 282.21 288.73 295.44 302.34 309.42 316.68 324.13 331.75 339.56 - 347.53 355.68 364 372.49 381.14 389.96 398.93 408.05 / - 17 20 14 1 187.8 192.03 196.71 201.29 205.96 210.85 215.98 221.4 227.12 233.15 239.49 246.14 - 253.11 260.38 267.96 275.84 284.02 292.49 301.25 310.29 319.62 329.22 339.1 349.24 359.66 370.34 381.28 392.48 - 403.94 415.65 427.62 439.83 452.3 465 477.96 491.16 / - 17 20 15 1 184.7 189.69 194.96 200.88 207.65 214.98 222.83 231.23 240.16 249.62 259.62 270.13 - 281.15 292.66 304.65 317.11 330.04 343.42 357.25 371.52 386.23 401.37 416.93 432.91 449.31 466.11 483.32 500.94 - 518.95 537.37 556.18 575.38 594.98 614.96 635.33 656.09 / - 17 20 16 1 182.05 189.73 198.17 207.89 218.9 231.18 244.66 259.28 274.94 291.57 309.1 327.53 - 346.81 366.94 387.9 409.66 432.22 455.55 479.67 504.54 530.17 556.56 583.68 611.55 640.15 669.49 699.55 730.34 - 761.85 794.08 827.02 860.68 895.05 930.13 965.91 1002.39 / - 17 20 17 1 180.63 194.4 210.53 229.1 250.27 273.86 299.71 327.64 357.55 389.34 422.95 458.18 - 494.98 533.32 573.22 614.68 657.68 702.21 748.29 795.89 845.01 895.66 947.81 1001.47 1056.62 1113.26 1171.38 1230.97 - 1292.03 1354.54 1418.5 1483.9 1550.73 1618.99 1688.66 1759.74 / - 17 20 18 1 185.34 212.17 246.32 286.56 331.33 379.8 432.99 488.92 549.65 612.48 680.48 752.08 - 827.25 904.02 986.37 1072.23 1161.54 1254.14 1350.29 1449.98 1553.04 1659.16 1768.45 1881.3 1997.3 2116.41 2238.59 2363.76 - 2491.92 2623.14 2757.38 2894.61 3034.82 3177.96 3324.03 3472.98 / - 17 20 19 1 203.02 265.4 339.97 422.78 513.45 612.57 720.47 837.33 963.05 1098.2 1242.29 1395.45 - 1557.8 1726.59 1906.79 2092.29 2285.55 2492.37 2701.9 2918.92 3143.36 3375.08 3626.69 3875.35 4131.39 4395 4667.4 4947.37 - 5234.85 5528.2 5835.57 6143.54 6458.61 6780.79 7110.01 7456.47 / - 17 20 20 1 258.06 378.58 513.76 662.48 824.74 1000.42 1189.3 1390.94 1653.2 1936.59 2251.5 2574.38 - 2923.77 3296.24 3678.48 4097.06 4544.22 4988.49 5487.05 5976.13 6488.09 7023.41 7582.72 8181.49 8759.42 9394.26 10028.87 10642.45 - 11358.55 12019.69 12796.75 13507.01 14238.46 14991.18 15888.39 16691.25 / - 18 1 1 1 328.59 328.48 328.57 328.79 329.1 329.49 329.96 330.49 331.08 331.74 332.46 333.23 - 334.07 334.96 335.9 336.91 337.96 339.08 340.24 341.47 342.74 344.07 345.45 346.89 348.38 349.92 351.51 353.16 - 354.86 356.61 358.42 360.28 362.19 364.15 366.16 368.23 / - 18 1 2 1 328.53 328.4 328.49 328.71 329.02 329.41 329.87 330.41 331 331.66 332.38 333.15 - 333.99 334.88 335.82 336.83 337.88 339 340.16 341.39 342.66 343.99 345.38 346.81 348.3 349.85 351.44 353.09 - 354.79 356.55 358.35 360.21 362.12 364.09 366.1 368.17 / - 18 1 3 1 328.41 328.27 328.35 328.57 328.87 329.26 329.73 330.26 330.85 331.51 332.23 333 - 333.84 334.73 335.68 336.68 337.74 338.85 340.02 341.25 342.52 343.85 345.24 346.68 348.17 349.71 351.31 352.96 - 354.67 356.42 358.23 360.09 362.01 363.97 365.99 368.06 / - 18 1 4 1 328.19 328.03 328.1 328.31 328.61 329 329.46 329.99 330.59 331.24 331.96 332.74 - 333.57 334.46 335.41 336.42 337.48 338.59 339.76 340.99 342.27 343.6 344.99 346.43 347.93 349.47 351.07 352.73 - 354.44 356.2 358.01 359.88 361.8 363.77 365.79 367.87 / - 18 1 5 1 327.78 327.59 327.64 327.83 328.13 328.52 328.97 329.5 330.1 330.75 331.47 332.25 - 333.08 333.98 334.93 335.93 337 338.12 339.29 340.52 341.8 343.14 344.53 345.98 347.48 349.03 350.64 352.3 - 354.02 355.79 357.61 359.48 361.41 363.39 365.42 367.51 / - 18 1 6 1 326.99 326.74 326.76 326.94 327.23 327.61 328.06 328.59 329.18 329.84 330.55 331.33 - 332.17 333.07 334.02 335.04 336.11 337.23 338.41 339.65 340.94 342.29 343.69 345.15 346.66 348.22 349.84 351.52 - 353.24 355.03 356.86 358.75 360.69 362.69 364.74 366.85 / - 18 1 7 1 325.42 325.09 325.07 325.23 325.51 325.88 326.33 326.85 327.44 328.1 328.83 329.61 - 330.46 331.36 332.33 333.35 334.43 335.57 336.76 338.02 339.33 340.69 342.11 343.59 345.12 346.71 348.35 350.05 - 351.81 353.62 355.48 357.4 359.38 361.4 363.49 365.63 / - 18 1 8 1 322.31 321.87 321.81 321.94 322.2 322.57 323.02 323.54 324.14 324.81 325.55 326.35 - 327.21 328.14 329.12 330.17 331.28 332.45 333.67 334.96 336.3 337.71 339.17 340.69 342.27 343.9 345.59 347.34 - 349.15 351.02 352.94 354.92 356.96 359.05 361.2 363.41 / - 18 1 9 1 316.3 315.74 315.63 315.73 315.98 316.34 316.8 317.34 317.96 318.65 319.42 320.26 - 321.16 322.13 323.17 324.27 325.44 326.67 327.97 329.33 330.75 332.24 333.78 335.39 337.07 338.8 340.6 342.46 - 344.38 346.37 348.41 350.52 352.69 354.92 357.21 359.56 / - 18 1 10 1 304.98 302.58 301.86 301.65 301.72 301.99 302.42 302.97 303.64 304.41 305.28 306.24 - 307.29 308.43 309.65 310.95 312.34 313.8 315.34 316.96 318.6 320.37 322.22 324.14 326.13 328.19 330.33 332.55 - 334.83 337.18 339.61 342.11 344.67 347.31 350.02 352.8 / - 18 1 11 1 287.66 277.51 276.5 276.23 276.39 276.83 277.51 278.38 279.41 280.58 281.9 283.34 - 284.93 286.62 288.42 290.35 292.39 294.52 296.76 299.13 301.56 304.09 306.74 309.44 312.28 315.16 318.17 321.22 - 324.4 327.66 330.96 334.38 337.83 341.4 345.02 348.76 / - 18 1 12 1 252.01 248.97 248.08 248.12 248.72 249.71 251.01 252.59 254.41 256.45 258.7 261.1 - 263.73 266.53 269.5 272.58 275.86 279.31 282.9 286.63 290.5 294.5 298.64 302.9 307.28 311.79 316.41 321.14 - 325.99 330.95 336.02 341.19 346.46 351.84 357.32 362.89 / - 18 1 13 1 225.33 223.59 223.78 224.79 226.35 228.33 230.68 233.39 236.58 240 243.73 247.7 - 252 256.49 261.26 266.24 271.44 276.86 282.48 288.31 294.32 300.53 306.92 313.47 320.19 327.11 333.94 341.18 - 348.58 356.15 363.56 371.43 379.46 387.27 395.6 403.67 / - 18 1 14 1 207.05 207.13 209.3 212.45 216.21 220.45 225.1 230.13 235.53 241.28 247.37 253.79 - 260.52 267.57 274.92 282.57 290.5 298.71 307.19 315.94 324.95 334.21 343.71 353.46 363.45 374.15 385.61 397.19 - 408.67 420.32 432.35 444.39 456.82 469.21 481.83 494.69 / - 18 1 15 1 200.54 203.92 208.31 213.56 219.62 226.52 234.19 242.5 251.42 260.93 271.02 281.68 - 292.89 304.63 316.91 329.71 343.03 356.86 371.13 385.81 400.9 416.41 432.33 448.68 465.44 482.62 500.22 518.25 - 536.7 556.66 577.08 597.83 618.79 640.42 662.18 684.34 / - 18 1 16 1 198.84 205.15 212.93 222.4 233.4 245.84 259.62 274.68 290.9 308.23 326.61 346 - 366.35 387.6 409.82 432.96 457.02 481.97 507.83 534.59 562.24 590.73 620.04 650.13 680.87 712.47 745 780.04 - 815.46 851.85 888.57 925.93 963.71 1002.51 1040.78 1079.2 / - 18 1 17 1 198.94 211.24 227.2 246.32 268.3 292.99 320.2 349.77 381.54 415.48 451.48 489.34 - 529.09 570.69 613.99 659.09 706.29 755.62 806.76 859.64 914.24 970.85 1029.87 1089.97 1149.6 1207.5 1262.31 1305.86 - 1349.79 1395.15 1441.47 1488.44 1538.43 1590.71 1639.84 1693.15 / - 18 1 18 1 205.13 231.37 265.54 305.97 351.89 402.96 458.92 519.68 584.96 654.08 727.84 806.52 - 889.9 977.45 1068.16 1161.21 1255 1341.55 1428 1517.92 1611.34 1705.26 1803.45 1902.92 2003.93 2106.23 2211.3 2318.03 - 2427.94 2539.43 2652.38 2767.06 2884.05 3001.09 3121.14 3241.9 / - 18 1 19 1 221.25 279.64 353.55 439.97 536.56 643.75 762.92 892.88 1031.71 1181.27 1327.83 1464.35 - 1609.81 1766.91 1922.85 2080.1 2244.96 2414.93 2586.4 2766 2952.94 3141.37 3331.26 3524.62 3726.42 3930.86 4140.6 4352.98 - 4566.68 4801.9 5023.25 5259.41 5499.54 5732.04 5981.53 6234.03 / - 18 1 20 1 264.83 366.29 517.07 697.46 908.8 1145.75 1387.57 1634.51 1892.3 2167.96 2459.93 2758 - 3086.08 3410.74 3749.96 4136.37 4504.01 4883.41 5288.87 5692.24 6115.77 6550.42 6995.36 7439.35 7927.94 8406.82 8884.6 9388.37 - 9906.58 10461.93 11004.29 11561.04 12119.23 12703.42 13310.97 13934.07 / - 18 2 1 1 330.46 330.32 330.41 330.62 330.93 331.32 331.79 332.32 332.92 333.58 334.29 335.07 - 335.91 336.8 337.75 338.76 339.82 340.93 342.1 343.33 344.61 345.95 347.33 348.78 350.27 351.82 353.42 355.08 - 356.79 358.55 360.36 362.23 364.15 366.12 368.14 370.22 / - 18 2 2 1 330.39 330.25 330.33 330.54 330.85 331.24 331.7 332.24 332.83 333.49 334.21 334.99 - 335.82 336.72 337.67 338.67 339.73 340.85 342.02 343.25 344.53 345.86 347.25 348.7 350.19 351.74 353.35 355 - 356.71 358.48 360.29 362.16 364.08 366.05 368.08 370.16 / - 18 2 3 1 330.27 330.11 330.19 330.39 330.7 331.09 331.55 332.08 332.68 333.34 334.06 334.83 - 335.67 336.56 337.51 338.52 339.58 340.7 341.87 343.1 344.38 345.72 347.11 348.55 350.05 351.6 353.21 354.87 - 356.58 358.35 360.16 362.03 363.96 365.93 367.96 370.05 / - 18 2 4 1 330.04 329.86 329.93 330.13 330.43 330.82 331.28 331.81 332.4 333.06 333.78 334.56 - 335.39 336.29 337.24 338.25 339.31 340.43 341.6 342.83 344.12 345.46 346.85 348.3 349.8 351.35 352.96 354.62 - 356.34 358.11 359.93 361.81 363.73 365.72 367.75 369.84 / - 18 2 5 1 329.61 329.4 329.44 329.63 329.93 330.31 330.77 331.3 331.89 332.55 333.27 334.05 - 334.89 335.78 336.74 337.75 338.81 339.93 341.11 342.35 343.63 344.98 346.38 347.83 349.34 350.9 352.51 354.18 - 355.9 357.68 359.51 361.39 363.33 365.32 367.36 369.46 / - 18 2 6 1 328.78 328.51 328.53 328.71 328.99 329.37 329.83 330.35 330.94 331.6 332.32 333.1 - 333.94 334.84 335.8 336.81 337.89 339.02 340.2 341.44 342.74 344.09 345.5 346.96 348.48 350.05 351.68 353.36 - 355.09 356.88 358.73 360.63 362.58 364.59 366.65 368.76 / - 18 2 7 1 327.13 326.79 326.77 326.93 327.21 327.57 328.03 328.55 329.14 329.8 330.53 331.31 - 332.16 333.07 334.04 335.06 336.15 337.29 338.49 339.75 341.06 342.43 343.86 345.34 346.88 348.48 350.13 351.83 - 353.6 355.41 357.29 359.22 361.2 363.24 365.33 367.48 / - 18 2 8 1 323.89 323.44 323.38 323.51 323.78 324.14 324.59 325.12 325.72 326.39 327.13 327.93 - 328.79 329.72 330.71 331.76 332.88 334.05 335.28 336.57 337.92 339.33 340.8 342.32 343.91 345.55 347.25 349.01 - 350.83 352.7 354.64 356.63 358.68 360.78 362.94 365.16 / - 18 2 9 1 317.63 317.06 316.93 317.02 317.26 317.62 318.07 318.61 319.23 319.92 320.69 321.53 - 322.44 323.41 324.45 325.56 326.73 327.97 329.28 330.64 332.08 333.57 335.13 336.75 338.44 340.18 342 343.87 - 345.8 347.8 349.86 351.99 354.17 356.42 358.73 361.1 / - 18 2 10 1 305.93 303.07 302.36 302.13 302.19 302.46 302.89 303.44 304.12 304.9 305.79 306.77 - 307.83 308.99 310.23 311.56 312.97 314.46 316.03 317.64 319.37 321.17 323.05 325 327.03 329.13 331.3 333.52 - 335.84 338.24 340.7 343.24 345.85 348.53 351.27 354.09 / - 18 2 11 1 287.84 277.6 276.61 276.36 276.54 277.01 277.72 278.62 279.69 280.91 282.28 283.78 - 285.37 287.1 288.94 290.91 292.97 295.15 297.43 299.85 302.34 304.93 307.61 310.39 313.26 316.22 319.29 322.41 - 325.66 328.94 332.35 335.8 339.37 342.97 346.69 350.45 / - 18 2 12 1 252.13 249.11 248.25 248.33 248.95 249.97 251.31 252.91 254.74 256.81 259.05 261.52 - 264.17 267 270.01 273.18 276.52 280 283.64 287.42 291.34 295.4 299.59 303.9 308.34 312.91 317.59 322.38 - 327.29 332.31 337.44 342.67 348.01 353.46 359 364.65 / - 18 2 13 1 225.3 223.68 223.94 225.01 226.59 228.6 230.98 233.7 236.74 240.24 244.07 248.12 - 252.43 257 261.8 266.86 272.1 277.56 283.23 289.09 295.16 301.41 307.85 314.48 321.25 328.2 335.34 342.38 - 349.85 357.47 365.27 372.87 380.97 389.23 397.24 405.8 / - 18 2 14 1 207.09 207.23 209.41 212.6 216.4 220.69 225.4 230.48 235.92 241.72 247.85 254.31 - 261.09 268.19 275.58 283.28 291.26 299.52 308.06 316.86 325.92 335.24 344.8 354.61 364.66 374.94 386.48 398.02 - 409.89 421.76 433.73 445.81 458.16 470.91 483.61 496.55 / - 18 2 15 1 200.56 204.02 208.47 213.78 219.88 226.77 234.47 242.83 251.8 261.36 271.51 282.21 - 293.46 305.26 317.58 330.43 343.79 357.66 372.01 386.75 401.91 417.49 433.48 449.89 466.72 483.98 501.65 519.74 - 538.26 557.58 578.1 599.05 620.29 641.84 663.78 686.41 / - 18 2 16 1 198.71 205.19 213.07 222.58 233.63 246.11 259.93 275.01 291.29 308.66 327.08 346.52 - 366.93 388.24 410.5 433.68 457.76 482.74 508.62 535.41 563.07 591.57 620.88 651.03 681.82 713.47 746.02 780.3 - 815.82 852.5 889.17 926.76 964.87 1003.05 1041.83 1080.97 / - 18 2 17 1 198.8 211.22 227.28 246.47 268.51 293.22 320.44 350.02 381.81 415.75 451.76 489.65 - 529.41 571.02 614.3 659.36 706.49 755.77 806.98 859.87 914.46 970.69 1029.8 1089.81 1149.97 1208.31 1264.04 1308.42 - 1353.11 1399.77 1446.19 1494.32 1544.24 1597.73 1647.49 1698.84 / - 18 2 18 1 205.03 231.42 265.71 306.22 352.18 403.24 459.13 519.79 585.01 654.03 727.62 806.13 - 889.32 976.81 1067.53 1160.23 1254.5 1342.47 1430.41 1520.76 1617.18 1704.91 1794.86 1887.08 1980.69 2077.6 2174.08 2272.82 - 2373.51 2475.02 2580.85 2684.07 2792.06 2901.09 3011.12 3121.08 / - 18 2 19 1 221.01 279.35 353.62 439.55 536.14 643.76 760.89 890.02 1030.89 1180.43 1322.66 1464.6 - 1610.63 1761.21 1926.66 2086.93 2252.96 2424.46 2598.23 2779.55 2959.6 3158.72 3348.59 3546.22 3750 3956.62 4168.49 4383.37 - 4599.52 4837.02 5060.94 5299.37 5541.76 5777.33 6029.25 6284.25 / - 18 2 20 1 264.76 366.25 515.06 694.15 907.95 1145.04 1387.31 1635.19 1893.95 2170.73 2464.04 2763.49 - 3093.29 3419.55 3760.6 4149.07 4520.54 4905.14 5312.5 5724.33 6151.23 6592.72 7042.66 7491.71 7985.66 8469.74 8951.05 9461.2 - 9984.44 10519.47 11093.75 11656.68 12220.93 12811.32 13425.31 14055.08 / - 18 3 1 1 332.32 332.17 332.25 332.46 332.76 333.16 333.62 334.15 334.75 335.41 336.13 336.91 - 337.74 338.64 339.59 340.6 341.66 342.78 343.96 345.19 346.48 347.81 349.21 350.66 352.16 353.71 355.32 356.99 - 358.7 360.47 362.29 364.17 366.1 368.08 370.12 372.2 / - 18 3 2 1 332.25 332.09 332.16 332.37 332.68 333.07 333.53 334.06 334.66 335.32 336.04 336.82 - 337.66 338.55 339.5 340.51 341.58 342.7 343.87 345.1 346.39 347.73 349.13 350.57 352.08 353.63 355.24 356.91 - 358.63 360.4 362.22 364.1 366.03 368.01 370.05 372.14 / - 18 3 3 1 332.12 331.95 332.02 332.22 332.52 332.91 333.38 333.91 334.5 335.16 335.88 336.66 - 337.5 338.39 339.35 340.36 341.42 342.54 343.72 344.95 346.24 347.58 348.98 350.43 351.93 353.49 355.1 356.77 - 358.49 360.26 362.09 363.97 365.9 367.89 369.92 372.02 / - 18 3 4 1 331.88 331.69 331.74 331.94 332.24 332.63 333.09 333.62 334.22 334.87 335.59 336.37 - 337.21 338.11 339.06 340.07 341.14 342.26 343.44 344.67 345.96 347.31 348.71 350.16 351.67 353.23 354.84 356.51 - 358.24 360.01 361.84 363.73 365.66 367.66 369.7 371.8 / - 18 3 5 1 331.43 331.2 331.24 331.43 331.73 332.11 332.57 333.09 333.69 334.35 335.07 335.85 - 336.69 337.58 338.54 339.55 340.62 341.75 342.93 344.17 345.46 346.81 348.21 349.67 351.18 352.75 354.37 356.05 - 357.78 359.56 361.4 363.29 365.24 367.24 369.29 371.4 / - 18 3 6 1 330.56 330.28 330.29 330.47 330.75 331.13 331.58 332.11 332.7 333.36 334.08 334.86 - 335.71 336.61 337.57 338.59 339.66 340.79 341.98 343.23 344.53 345.88 347.3 348.77 350.29 351.87 353.5 355.19 - 356.93 358.73 360.59 362.49 364.45 366.47 368.54 370.67 / - 18 3 7 1 328.84 328.49 328.47 328.62 328.9 329.27 329.72 330.24 330.84 331.5 332.22 333.01 - 333.86 334.77 335.74 336.77 337.85 339 340.2 341.47 342.78 344.16 345.59 347.08 348.63 350.23 351.89 353.6 - 355.37 357.2 359.08 361.02 363.01 365.06 367.17 369.33 / - 18 3 8 1 325.45 325 324.94 325.07 325.34 325.7 326.15 326.68 327.28 327.95 328.69 329.5 - 330.36 331.3 332.29 333.34 334.46 335.63 336.87 338.17 339.52 340.94 342.41 343.94 345.54 347.19 348.9 350.66 - 352.49 354.37 356.32 358.32 360.38 362.49 364.67 366.9 / - 18 3 9 1 318.93 318.32 318.16 318.24 318.46 318.81 319.26 319.79 320.41 321.1 321.87 322.71 - 323.62 324.6 325.65 326.76 327.94 329.19 330.5 331.88 333.32 334.83 336.4 338.03 339.73 341.49 343.32 345.21 - 347.16 349.18 351.26 353.4 355.6 357.87 360.2 362.59 / - 18 3 10 1 306.88 303.55 302.8 302.54 302.6 302.87 303.3 303.87 304.56 305.36 306.26 307.25 - 308.34 309.52 310.76 312.11 313.55 315.06 316.66 318.34 320.09 321.93 323.81 325.8 327.87 330 332.2 334.49 - 336.85 339.28 341.78 344.36 347.01 349.73 352.51 355.37 / - 18 3 11 1 288.07 277.7 276.72 276.48 276.67 277.16 277.88 278.8 279.89 281.13 282.52 284.05 - 285.71 287.5 289.4 291.43 293.57 295.8 298.13 300.56 303.1 305.75 308.49 311.33 314.26 317.29 320.4 323.61 - 326.89 330.26 333.75 337.27 340.91 344.59 348.39 352.22 / - 18 3 12 1 252.26 249.27 248.44 248.54 249.19 250.24 251.6 253.22 255.07 257.16 259.47 261.97 - 264.58 267.45 270.49 273.69 277.06 280.58 284.25 288.07 292.03 296.13 300.36 304.71 309.2 313.8 318.53 323.37 - 328.32 333.39 338.57 343.85 349.24 355.18 360.8 366.51 / - 18 3 13 1 225.28 223.77 224.13 225.23 226.84 228.88 231.29 234.04 237.11 240.48 244.22 248.45 - 252.85 257.5 262.33 267.43 272.75 278.26 283.97 289.88 295.99 302.3 308.79 315.46 322.32 329.32 336.49 343.59 - 351.11 358.8 366.65 374.67 382.48 390.8 399.29 407.51 / - 18 3 14 1 207.14 207.36 209.52 212.76 216.63 220.97 225.72 230.84 236.33 242.16 248.34 254.84 - 261.67 268.81 276.25 283.99 292.02 300.34 308.92 317.78 326.9 336.27 345.89 355.76 365.87 376.22 387.06 398.96 - 410.81 422.76 434.96 447.25 459.89 472.6 485.39 498.4 / - 18 3 15 1 200.58 204.13 208.64 214 220.16 227.07 234.77 243.18 252.19 261.8 271.99 282.74 - 294.04 305.88 318.25 331.14 344.54 358.46 372.87 387.69 402.92 418.56 434.62 451.1 467.99 485.31 503.05 521.22 - 539.81 558.82 579.06 600.16 621.64 643.39 665.65 688.13 / - 18 3 16 1 198.59 205.2 213.2 222.77 233.87 246.39 260.24 275.35 291.66 309.08 327.55 347.03 - 367.5 388.87 411.18 434.39 458.49 483.49 509.39 536.2 563.88 592.39 621.7 651.86 682.73 714.43 747 780.46 - 816.5 852.88 889.81 927.73 965.64 1004.21 1042.84 1082.07 / - 18 3 17 1 198.67 211.19 227.36 246.62 268.71 293.45 320.68 350.26 382.07 416.01 452.02 489.93 - 529.7 571.3 614.58 659.58 706.64 755.84 807.08 860.01 914.59 970.8 1029.63 1089.81 1150.01 1208.94 1264.96 1310.94 - 1357.19 1403.57 1454.04 1503.09 1554.64 1609.51 1661.11 1712.73 / - 18 3 18 1 204.93 231.48 265.88 306.47 352.56 403.53 459.48 520.04 585.04 653.96 727.37 805.7 - 888.68 976.03 1066.79 1159.57 1253.85 1338.48 1420.94 1505.15 1594.78 1684.17 1777.55 1871.68 1966.58 2062.38 2162.77 2260.51 - 2363.65 2468 2573.37 2679.71 2788.15 2897.78 3006.4 3117.89 / - 18 3 19 1 220.77 279.05 353.23 439.07 535.7 642.93 760.64 889.46 1029.66 1179.45 1322.18 1464.76 - 1611.4 1762.67 1929.83 2091.33 2259.61 2432.61 2609.62 2793.28 2975.73 3176.88 3371.15 3568.83 3774.75 3983.67 4197.76 4415.24 - 4633.97 4873.81 5100.59 5341.35 5586.1 5824.71 6079.39 6337.02 / - 18 3 20 1 264.7 366.22 512.31 691.17 902.82 1138.65 1384.15 1626.01 1895.6 2173.55 2456 2769.07 - 3100.65 3428.58 3771.58 4131.14 4535.68 4923.99 5333.91 5753.06 6187.09 6634.18 7089.6 7544.05 8043.87 8533.59 9024.95 9535.94 - 10064.64 10605.48 11160.68 11756.24 12327.19 12924.17 13545.16 14181.92 / - 18 4 1 1 334.18 334.01 334.08 334.29 334.59 334.98 335.45 335.98 336.58 337.24 337.96 338.74 - 339.58 340.47 341.43 342.44 343.51 344.63 345.81 347.04 348.33 349.68 351.08 352.53 354.04 355.6 357.22 358.89 - 360.61 362.39 364.22 366.1 368.04 370.03 372.08 374.18 / - 18 4 2 1 334.1 333.93 334 334.2 334.51 334.89 335.36 335.89 336.49 337.15 337.87 338.65 - 339.49 340.38 341.34 342.35 343.42 344.54 345.72 346.96 348.25 349.59 350.99 352.44 353.95 355.52 357.13 358.8 - 360.53 362.31 364.14 366.03 367.97 369.96 372.01 374.11 / - 18 4 3 1 333.97 333.78 333.84 334.04 334.35 334.73 335.19 335.73 336.32 336.98 337.7 338.48 - 339.32 340.22 341.17 342.19 343.25 344.38 345.56 346.8 348.09 349.43 350.83 352.29 353.8 355.37 356.98 358.66 - 360.38 362.16 364 365.89 367.83 369.83 371.88 373.98 / - 18 4 4 1 333.72 333.51 333.56 333.76 334.06 334.44 334.9 335.43 336.02 336.68 337.4 338.18 - 339.02 339.92 340.88 341.89 342.96 344.09 345.27 346.51 347.8 349.15 350.55 352.01 353.52 355.09 356.71 358.39 - 360.12 361.91 363.75 365.64 367.58 369.59 371.64 373.75 / - 18 4 5 1 333.24 333 333.04 333.23 333.52 333.9 334.36 334.88 335.48 336.14 336.86 337.64 - 338.48 339.38 340.34 341.35 342.42 343.55 344.74 345.98 347.28 348.63 350.04 351.5 353.02 354.59 356.22 357.91 - 359.64 361.44 363.28 365.18 367.14 369.15 371.21 373.33 / - 18 4 6 1 332.33 332.04 332.05 332.22 332.51 332.88 333.34 333.86 334.46 335.12 335.84 336.62 - 337.46 338.37 339.33 340.35 341.43 342.56 343.75 345 346.31 347.67 349.09 350.56 352.09 353.68 355.32 357.01 - 358.76 360.57 362.43 364.35 366.32 368.34 370.42 372.56 / - 18 4 7 1 330.54 330.17 330.15 330.3 330.58 330.95 331.4 331.92 332.52 333.18 333.91 334.69 - 335.55 336.46 337.43 338.46 339.55 340.7 341.91 343.17 344.49 345.87 347.31 348.81 350.36 351.97 353.63 355.35 - 357.13 358.97 360.86 362.8 364.81 366.87 368.98 371.15 / - 18 4 8 1 327 326.54 326.48 326.62 326.88 327.24 327.7 328.23 328.83 329.5 330.24 331.05 - 331.92 332.85 333.85 334.9 336.02 337.2 338.44 339.74 341.1 342.52 344 345.54 347.14 348.8 350.52 352.3 - 354.13 356.02 357.98 359.99 362.06 364.19 366.37 368.62 / - 18 4 9 1 320.18 319.51 319.32 319.37 319.58 319.91 320.35 320.88 321.49 322.19 322.96 323.8 - 324.71 325.69 326.75 327.87 329.06 330.31 331.64 333.02 334.48 336 337.58 339.23 340.95 342.72 344.57 346.48 - 348.45 350.48 352.58 354.74 356.97 359.26 361.61 364.03 / - 18 4 10 1 307.83 303.94 303.17 302.89 302.95 303.21 303.65 304.22 304.92 305.73 306.65 307.66 - 308.77 309.97 311.26 312.64 314.11 315.61 317.24 318.95 320.74 322.61 324.56 326.59 328.69 330.83 333.09 335.42 - 337.82 340.3 342.85 345.45 348.15 350.92 353.76 356.66 / - 18 4 11 1 287.89 277.81 276.83 276.6 276.8 277.31 278.05 278.98 280.09 281.36 282.77 284.33 - 286.02 287.83 289.77 291.83 294.01 296.3 298.71 301.22 303.85 306.56 309.37 312.26 315.25 318.33 321.51 324.78 - 328.14 331.59 335.13 338.74 342.44 346.21 350.09 354 / - 18 4 12 1 252.4 249.43 248.63 248.76 249.44 250.49 251.86 253.52 255.37 257.49 259.83 262.36 - 265.09 268 271.08 274.33 277.61 281.17 284.88 288.91 292.93 297.08 301.36 305.78 310.33 314.99 319.78 324.69 - 329.71 334.84 340.09 345.44 350.9 356.47 362.13 367.9 / - 18 4 13 1 225.27 223.93 224.32 225.45 227.09 229.16 231.6 234.39 237.48 240.89 244.59 248.61 - 253.18 257.94 262.82 267.96 273.37 278.87 284.71 290.67 296.83 303.18 309.72 316.45 323.36 330.44 337.67 344.83 - 352.38 360.13 368.04 376.12 384 392.39 400.94 409.23 / - 18 4 14 1 207.2 207.49 209.65 212.97 216.89 221.26 226.05 231.21 236.73 242.61 248.82 255.37 - 262.24 269.43 276.92 284.71 292.79 301.15 309.79 318.7 327.87 337.3 346.98 356.91 367.08 377.49 388.13 399.56 - 411.54 423.73 436.23 448.53 461.26 474.12 487.15 500.26 / - 18 4 15 1 200.63 204.27 208.85 214.26 220.45 227.39 235.09 243.53 252.59 262.24 272.47 283.27 - 294.61 306.5 318.91 331.84 345.29 359.25 373.72 388.61 403.91 419.62 435.74 452.29 469.25 486.64 504.45 522.68 - 541.34 560.43 579.95 601.14 622.83 644.88 667.14 689.59 / - 18 4 16 1 198.49 205.23 213.37 222.99 234.12 246.67 260.54 275.68 292.01 309.49 327.99 347.52 - 368.04 389.48 411.83 435.07 459.21 484.23 510.14 536.96 564.65 593.17 622.48 652.64 683.58 715.33 747.93 781.4 - 816.62 853.11 890.27 928.24 966.6 1004.95 1044.04 1083.13 / - 18 4 17 1 198.57 211.19 227.45 246.79 268.92 293.67 320.91 350.49 382.31 416.25 452.24 490.18 - 529.95 571.54 614.81 659.75 706.72 755.84 807.02 860.03 914.63 970.81 1028.86 1089.22 1149.9 1209.05 1266.04 1313.62 - 1361.31 1408.53 1461.32 1512.11 1566 1621.75 1675.99 1729.64 / - 18 4 18 1 204.84 231.53 266.06 306.73 352.83 403.93 459.69 520.14 585.18 653.99 727.07 805.21 - 887.98 975.13 1065.93 1158.8 1253.02 1338.16 1421.97 1507.23 1597.4 1690.35 1782 1877.25 1973.01 2071.2 2173.05 2270.19 - 2376.15 2481.75 2588.42 2696.24 2806.09 2915.19 3027.17 3140.23 / - 18 4 19 1 220.42 278.73 352.81 439.2 535.84 642.89 760.38 888.87 1028.75 1178.35 1321.6 1464.82 - 1612.07 1764.01 1931.94 2096.42 2264.2 2439.11 2619.2 2805.9 2991.1 3194.87 3392.91 3592.16 3800.7 4012.02 4228.62 4448.67 - 4670.3 4912.58 5142.31 5385.6 5632.87 5874.63 6132.08 6392.66 / - 18 4 20 1 264.65 366.2 509.81 688.5 898.19 1137.85 1380.95 1626.61 1885.3 2164.18 2460.24 2774.82 - 3084.45 3438.01 3782.95 4144.54 4551.43 4942.09 5355.41 5778.9 6220.92 6673.97 7135.57 7595.92 8081.94 8597.91 9095.16 9611.97 - 10146.64 10693.96 11256.3 11859.42 12437.49 13041.84 13670.28 14314.7 / - 18 5 1 1 336.09 335.89 335.94 336.14 336.44 336.82 337.28 337.81 338.41 339.07 339.79 340.57 - 341.41 342.31 343.27 344.28 345.35 346.48 347.66 348.9 350.19 351.54 352.94 354.4 355.92 357.48 359.11 360.78 - 362.51 364.3 366.14 368.03 369.98 371.98 374.03 376.14 / - 18 5 2 1 336.01 335.8 335.85 336.05 336.35 336.73 337.19 337.72 338.32 338.97 339.7 340.48 - 341.32 342.22 343.17 344.19 345.26 346.38 347.57 348.8 350.1 351.45 352.85 354.31 355.83 357.39 359.02 360.7 - 362.43 364.21 366.06 367.95 369.9 371.9 373.96 376.07 / - 18 5 3 1 335.87 335.64 335.69 335.88 336.18 336.56 337.02 337.55 338.15 338.81 339.53 340.31 - 341.15 342.05 343 344.02 345.09 346.22 347.4 348.64 349.93 351.28 352.69 354.15 355.67 357.24 358.86 360.54 - 362.28 364.06 365.91 367.8 369.76 371.76 373.82 375.93 / - 18 5 4 1 335.61 335.36 335.4 335.58 335.88 336.26 336.72 337.24 337.84 338.5 339.22 340 - 340.84 341.74 342.7 343.71 344.78 345.91 347.1 348.34 349.64 350.99 352.4 353.86 355.38 356.95 358.58 360.26 - 362 363.79 365.64 367.54 369.5 371.51 373.57 375.69 / - 18 5 5 1 335.11 334.83 334.85 335.03 335.32 335.7 336.15 336.68 337.27 337.93 338.65 339.43 - 340.27 341.17 342.13 343.15 344.23 345.36 346.55 347.79 349.09 350.45 351.86 353.33 354.85 356.43 358.07 359.76 - 361.5 363.3 365.16 367.06 369.03 371.05 373.12 375.25 / - 18 5 6 1 334.14 333.82 333.82 333.99 334.27 334.64 335.09 335.62 336.21 336.87 337.59 338.37 - 339.22 340.12 341.09 342.11 343.19 344.33 345.52 346.77 348.08 349.45 350.87 352.35 353.88 355.47 357.12 358.82 - 360.58 362.4 364.26 366.19 368.17 370.2 372.3 374.44 / - 18 5 7 1 332.24 331.86 331.83 331.98 332.25 332.62 333.07 333.6 334.19 334.85 335.58 336.37 - 337.22 338.14 339.11 340.14 341.24 342.39 343.6 344.87 346.19 347.58 349.02 350.52 352.08 353.69 355.36 357.09 - 358.88 360.72 362.62 364.58 366.59 368.66 370.79 372.97 / - 18 5 8 1 328.53 328.07 328.01 328.14 328.41 328.77 329.22 329.75 330.36 331.03 331.77 332.58 - 333.45 334.39 335.38 336.44 337.57 338.75 340 341.3 342.67 344.09 345.58 347.13 348.73 350.4 352.12 353.91 - 355.75 357.66 359.62 361.64 363.72 365.86 368.06 370.32 / - 18 5 9 1 321.39 320.64 320.39 320.41 320.6 320.92 321.34 321.87 322.48 323.17 323.94 324.78 - 325.7 326.69 327.75 328.88 330.08 331.35 332.68 334.08 335.55 337.08 338.68 340.35 342.08 343.88 345.74 347.67 - 349.67 351.72 353.84 356.03 358.28 360.6 362.98 365.42 / - 18 5 10 1 308.79 304.32 303.47 303.19 303.23 303.5 303.94 304.53 305.24 306.07 307.01 308.01 - 309.14 310.37 311.68 313.09 314.58 316.16 317.82 319.53 321.36 323.26 325.25 327.31 329.46 331.64 333.94 336.31 - 338.76 341.29 343.89 346.53 349.28 352.09 354.98 357.95 / - 18 5 11 1 288.14 277.92 276.94 276.72 276.94 277.46 278.21 279.17 280.3 281.59 283.03 284.61 - 286.32 288.17 290.14 292.24 294.45 296.78 299.23 301.78 304.45 307.22 310.1 313.08 316.17 319.34 322.61 325.95 - 329.38 332.9 336.5 340.19 343.97 347.83 351.77 355.79 / - 18 5 12 1 252.55 249.6 248.83 248.98 249.67 250.74 252.12 253.8 255.73 257.83 260.19 262.75 - 265.51 268.45 271.56 274.84 278.29 281.9 285.66 289.57 293.62 297.82 302.14 306.6 311.19 315.9 320.74 325.69 - 330.76 335.95 341.63 347.05 352.58 358.22 363.96 369.8 / - 18 5 13 1 225.3 224.08 224.52 225.68 227.35 229.45 231.92 234.73 237.86 241.3 245.04 249.05 - 253.32 258.23 263.3 268.52 273.93 279.53 285.36 291.46 297.66 304.06 310.66 317.44 324.4 331.54 338.61 346.08 - 353.69 361.46 369.44 377.58 385.89 393.98 402.6 411.38 / - 18 5 14 1 207.27 207.62 209.87 213.18 217.14 221.56 226.39 231.59 237.15 243.06 249.32 255.91 - 262.82 270.05 277.59 285.42 293.55 301.96 310.65 319.62 328.84 338.33 348.06 358.05 368.28 378.75 389.46 400.4 - 412.46 424.8 437.31 449.86 462.8 475.68 488.74 502.1 / - 18 5 15 1 200.67 204.43 209.08 214.53 220.76 227.73 235.43 243.88 252.99 262.68 272.96 283.8 - 295.19 307.11 319.57 332.55 346.04 360.04 374.54 389.51 404.88 420.66 436.85 453.46 470.49 487.95 505.82 524.12 - 542.84 561.99 581.58 602.04 623.84 645.67 668.32 691.09 / - 18 5 16 1 198.4 205.27 213.56 223.22 234.38 246.95 260.85 276.01 292.37 309.87 328.43 348 - 368.56 390.06 412.46 435.74 459.9 484.94 510.88 537.7 565.4 593.92 623.23 653.35 684.37 716.19 748.83 782.32 - 816.66 853.2 890.53 928.41 967.02 1005.56 1044.78 1083.72 / - 18 5 17 1 198.48 211.2 227.56 246.96 269.12 293.89 321.14 350.72 382.54 416.47 452.44 490.39 - 530.16 571.75 614.99 659.87 706.75 755.75 806.85 859.88 914.52 970.7 1028.33 1088.88 1149.4 1209.55 1266.94 1316.28 - 1365.4 1414.43 1468.73 1522.03 1576.79 1633.7 1690.27 1745.99 / - 18 5 18 1 204.77 231.6 266.23 306.97 353.1 404.22 459.89 520.23 585.14 653.86 726.84 804.65 - 887.18 974.14 1064.92 1157.92 1252.01 1338.04 1422.88 1509.2 1600.82 1693.72 1785.85 1883.86 1980.75 2078.77 2183.26 2281.61 - 2387.21 2494.05 2602.18 2711.36 2822.54 2935.07 3048.74 3163.36 / - 18 5 19 1 220.17 278.41 352.36 438.65 534.99 641.92 760.11 888.25 1027.79 1173 1320.9 1464.77 - 1612.65 1765.3 1925.02 2099.36 2268.1 2444.23 2626.25 2816.63 3004.91 3201.77 3413.44 3614.97 3826.45 4040.71 4260.35 4483.44 - 4708.17 4944.9 5186.24 5432.42 5682.32 5927.46 6187.68 6451.4 / - 18 5 20 1 264.61 366.2 507.05 685.17 897.21 1131.32 1376.01 1622.98 1886.97 2168.07 2464.63 2780.78 - 3093.78 3447.87 3794.78 4158.52 4567.9 4961 5376.66 5799.98 6249.29 6694.72 7179.53 7646.41 8138.91 8641.98 9165.73 9688.94 - 10230.09 10784.42 11354.18 11938.7 12551.63 13163.88 13800.4 14453.07 / - 18 6 1 1 338.24 337.89 337.89 338.06 338.34 338.71 339.16 339.68 340.28 340.93 341.65 342.43 - 343.27 344.16 345.12 346.14 347.21 348.33 349.52 350.76 352.06 353.41 354.82 356.28 357.8 359.37 361 362.68 - 364.42 366.21 368.06 369.96 371.91 373.92 375.99 378.11 / - 18 6 2 1 338.16 337.8 337.8 337.96 338.24 338.61 339.06 339.59 340.18 340.83 341.55 342.33 - 343.17 344.07 345.02 346.04 347.11 348.24 349.42 350.66 351.96 353.31 354.72 356.19 357.71 359.28 360.91 362.59 - 364.33 366.12 367.97 369.87 371.83 373.84 375.91 378.03 / - 18 6 3 1 338.01 337.64 337.63 337.79 338.07 338.44 338.89 339.41 340 340.66 341.37 342.15 - 342.99 343.89 344.85 345.86 346.93 348.06 349.25 350.49 351.79 353.14 354.55 356.02 357.54 359.11 360.75 362.43 - 364.17 365.97 367.82 369.72 371.68 373.69 375.76 377.88 / - 18 6 4 1 337.74 337.35 337.33 337.48 337.76 338.13 338.57 339.09 339.68 340.34 341.06 341.83 - 342.67 343.57 344.53 345.55 346.62 347.75 348.94 350.18 351.48 352.84 354.25 355.72 357.24 358.82 360.45 362.14 - 363.89 365.68 367.54 369.45 371.41 373.43 375.5 377.63 / - 18 6 5 1 337.22 336.8 336.76 336.91 337.18 337.55 337.99 338.51 339.1 339.75 340.47 341.25 - 342.09 342.99 343.95 344.96 346.04 347.17 348.36 349.61 350.91 352.27 353.69 355.16 356.69 358.28 359.92 361.61 - 363.36 365.17 367.03 368.95 370.92 372.95 375.03 377.16 / - 18 6 6 1 336.22 335.76 335.7 335.83 336.09 336.45 336.89 337.41 338 338.65 339.37 340.15 - 340.99 341.9 342.86 343.88 344.96 346.1 347.3 348.55 349.87 351.23 352.66 354.14 355.68 357.28 358.93 360.64 - 362.4 364.22 366.1 368.03 370.02 372.06 374.16 376.32 / - 18 6 7 1 334.25 333.72 333.63 333.75 334 334.36 334.8 335.31 335.9 336.56 337.28 338.07 - 338.92 339.83 340.8 341.84 342.93 344.09 345.3 346.57 347.9 349.29 350.73 352.24 353.8 355.42 357.1 358.83 - 360.63 362.48 364.38 366.35 368.37 370.45 372.59 374.78 / - 18 6 8 1 330.39 329.78 329.66 329.76 330 330.35 330.79 331.32 331.92 332.59 333.32 334.13 - 335 335.94 336.93 337.99 339.12 340.3 341.55 342.86 344.23 345.66 347.15 348.71 350.32 351.99 353.72 355.52 - 357.37 359.28 361.25 363.29 365.38 367.53 369.74 372.01 / - 18 6 9 1 322.87 321.88 321.52 321.46 321.6 321.89 322.3 322.81 323.4 324.09 324.86 325.7 - 326.62 327.62 328.68 329.82 331.03 332.31 333.65 335.07 336.55 338.1 339.72 341.41 343.16 344.98 346.86 348.81 - 350.83 352.91 355.06 357.27 359.55 361.89 364.3 366.78 / - 18 6 10 1 310 304.67 303.76 303.46 303.48 303.75 304.19 304.78 305.5 306.34 307.29 308.35 - 309.51 310.76 312.1 313.5 315.02 316.63 318.33 320.11 321.97 323.88 325.91 328.01 330.2 332.47 334.81 337.19 - 339.69 342.26 344.91 347.61 350.4 353.27 356.22 359.23 / - 18 6 11 1 288.54 278.04 277.06 276.84 277.07 277.61 278.38 279.36 280.51 281.82 283.29 284.89 - 286.64 288.51 290.52 292.65 294.9 297.27 299.75 302.35 305.06 307.88 310.8 313.83 316.97 320.2 323.54 326.98 - 330.51 334.13 337.84 341.62 345.48 349.42 353.44 357.55 / - 18 6 12 1 252.71 249.77 249.03 249.21 249.89 250.98 252.38 254.09 256.05 258.18 260.56 263.15 - 265.94 268.91 272.05 275.37 278.85 282.5 286.3 290.25 294.34 298.58 302.95 307.45 312.33 317.11 322.01 327.03 - 332.17 337.42 342.78 348.26 353.84 359.54 365.33 371.23 / - 18 6 13 1 225.31 224.25 224.72 225.91 227.61 229.74 232.23 235.07 238.23 241.71 245.49 249.54 - 253.85 258.41 263.56 268.97 274.43 280.11 286.06 292.14 298.35 304.78 311.59 318.42 325.44 332.64 339.76 347.29 - 355 362.84 370.84 379.05 387.43 395.58 404.27 413.12 / - 18 6 14 1 207.36 207.78 210.1 213.4 217.4 221.86 226.73 231.97 237.57 243.52 249.82 256.45 - 263.4 270.67 278.26 286.14 294.31 302.78 311.52 320.53 329.81 339.35 349.15 359.19 369.48 380.02 390.79 401.79 - 413.02 425.44 438.13 450.98 463.87 477.15 490.36 503.75 / - 18 6 15 1 200.7 204.61 209.32 214.81 221.07 228.07 235.79 244.25 253.39 263.13 273.44 284.32 - 295.76 307.73 320.22 333.24 346.77 360.81 375.36 390.39 405.83 421.68 437.94 454.62 471.71 489.23 507.17 525.53 - 544.32 563.54 583.19 603.28 624.27 646.65 669.52 692.6 / - 18 6 16 1 198.33 205.34 213.76 223.45 234.64 247.24 261.16 276.34 292.72 310.24 328.85 348.46 - 369.06 390.61 413.06 436.38 460.56 485.63 511.58 538.41 566.11 594.63 623.93 654.02 685.04 716.96 749.67 783.18 - 817.51 853.16 890.56 928.64 967.57 1006.49 1045.53 1084.94 / - 18 6 17 1 198.42 211.24 227.69 247.14 269.33 294.11 321.35 350.93 382.74 416.67 452.62 490.57 - 530.34 571.91 615.13 659.93 706.71 755.61 806.57 859.57 914.27 970.47 1028.09 1087.84 1149.15 1209.57 1267.87 1318.52 - 1369.66 1420.39 1476.21 1531.29 1587.82 1644.26 1704.98 1762.63 / - 18 6 18 1 204.7 231.68 266.39 307.2 353.41 404.49 460.11 520.32 585.08 653.71 726.47 804.07 - 886.35 973.05 1063.71 1156.88 1250.07 1336.28 1422.12 1511.69 1601.79 1695.87 1789 1887.97 1986.21 2086.35 2190.49 2291.66 - 2398.46 2506.58 2616.06 2726.83 2839.48 2953.43 3068.61 3184.97 / - 18 6 19 1 219.91 278.08 351.9 437.98 535.11 641.33 757.68 887.63 1026.8 1171.76 1319.99 1459.96 - 1613.15 1766.47 1927.07 2102.26 2272.13 2449.26 2631.4 2824.38 3015.4 3216.02 3431.2 3636.24 3851.11 4068.8 4291.68 4518.33 - 4746.36 4986.7 5231.34 5480.82 5734.27 5982.85 6246.38 6513.45 / - 18 6 20 1 264.56 366.23 503.8 681.87 892 1130.46 1372.88 1623.46 1888.66 2171 2469.19 2787 - 3102.21 3458.2 3807.11 4173.14 4552.22 4980.83 5398.99 5821.82 6275.4 6727.66 7201.97 7694.17 8193.9 8704.14 9232.65 9766.02 - 10314.2 10876.35 11454.23 12047.16 12653.66 13290.19 13935.38 14596.88 / - 18 7 1 1 340.39 339.9 339.84 339.97 340.24 340.6 341.04 341.55 342.14 342.79 343.5 344.28 - 345.12 346.02 346.97 347.99 349.06 350.19 351.37 352.62 353.92 355.27 356.68 358.15 359.67 361.25 362.88 364.57 - 366.32 368.12 369.97 371.88 373.84 375.86 377.93 380.06 / - 18 7 2 1 340.3 339.81 339.74 339.88 340.14 340.5 340.94 341.45 342.04 342.69 343.4 344.18 - 345.02 345.91 346.87 347.89 348.96 350.09 351.27 352.52 353.82 355.17 356.59 358.05 359.58 361.16 362.79 364.48 - 366.22 368.02 369.88 371.79 373.75 375.77 377.85 379.98 / - 18 7 3 1 340.15 339.64 339.57 339.7 339.96 340.32 340.76 341.27 341.86 342.51 343.22 344 - 344.83 345.73 346.69 347.7 348.78 349.91 351.09 352.34 353.64 355 356.41 357.88 359.4 360.98 362.62 364.31 - 366.06 367.86 369.72 371.63 373.6 375.62 377.69 379.83 / - 18 7 4 1 339.87 339.34 339.26 339.39 339.64 339.99 340.43 340.94 341.53 342.18 342.89 343.67 - 344.51 345.4 346.36 347.38 348.45 349.58 350.77 352.02 353.32 354.68 356.09 357.56 359.09 360.68 362.31 364.01 - 365.76 367.56 369.43 371.34 373.31 375.34 377.42 379.56 / - 18 7 5 1 339.34 338.78 338.68 338.79 339.04 339.39 339.83 340.34 340.92 341.57 342.28 343.06 - 343.9 344.8 345.75 346.77 347.85 348.98 350.17 351.42 352.73 354.09 355.51 356.99 358.52 360.11 361.76 363.46 - 365.21 367.03 368.89 370.82 372.8 374.83 376.92 379.07 / - 18 7 6 1 338.3 337.69 337.57 337.67 337.91 338.26 338.69 339.2 339.78 340.43 341.14 341.92 - 342.76 343.66 344.62 345.65 346.73 347.87 349.07 350.32 351.64 353.01 354.44 355.93 357.47 359.07 360.73 362.44 - 364.21 366.04 367.92 369.86 371.86 373.91 376.02 378.18 / - 18 7 7 1 336.27 335.59 335.43 335.52 335.74 336.08 336.51 337.02 337.6 338.25 338.97 339.76 - 340.6 341.52 342.49 343.52 344.62 345.77 346.99 348.26 349.59 350.98 352.43 353.94 355.51 357.13 358.82 360.56 - 362.36 364.22 366.13 368.1 370.14 372.22 374.37 376.57 / - 18 7 8 1 332.28 331.5 331.31 331.37 331.59 331.92 332.35 332.87 333.46 334.12 334.86 335.66 - 336.53 337.46 338.46 339.53 340.65 341.84 343.09 344.4 345.78 347.21 348.71 350.27 351.88 353.56 355.3 357.11 - 358.97 360.89 362.87 364.91 367.02 369.18 371.4 373.68 / - 18 7 9 1 324.49 323.17 322.63 322.48 322.56 322.8 323.18 323.67 324.25 324.93 325.69 326.53 - 327.46 328.45 329.53 330.67 331.89 333.18 334.54 335.97 337.47 339.04 340.68 342.39 344.16 346.01 347.92 349.89 - 351.94 354.05 356.22 358.47 360.78 363.15 365.59 368.1 / - 18 7 10 1 311.54 305.08 304.08 303.73 303.74 303.99 304.44 305.04 305.77 306.63 307.6 308.68 - 309.82 311.09 312.46 313.93 315.48 317.13 318.82 320.64 322.54 324.53 326.6 328.7 330.94 333.25 335.64 338.11 - 340.62 343.24 345.94 348.72 351.54 354.46 357.46 360.54 / - 18 7 11 1 288.62 278.16 277.18 276.97 277.21 277.76 278.55 279.54 280.72 282.05 283.54 285.18 - 286.95 288.86 290.9 293.06 295.35 297.76 300.28 302.92 305.68 308.54 311.51 314.59 317.78 321.07 324.46 327.94 - 331.53 335.22 339 342.87 346.85 350.92 355.06 359.27 / - 18 7 12 1 252.87 249.95 249.23 249.39 250.11 251.22 252.69 254.38 256.36 258.57 260.94 263.55 - 266.37 269.37 272.55 275.9 279.42 283.1 286.94 290.93 295.24 299.54 303.97 308.53 313.23 318.06 323 328.07 - 333.26 338.57 344.34 349.89 355.55 361.31 367.19 373.16 / - 18 7 13 1 225.34 224.42 224.93 226.15 227.87 230.02 232.55 235.42 238.61 242.12 245.94 250.03 - 254.38 258.98 263.8 269.19 274.92 280.72 286.66 292.79 299.12 305.66 312.34 319.21 326.27 333.5 340.92 348.51 - 356.28 364.22 372.29 380.52 388.96 397.19 405.95 414.87 / - 18 7 14 1 207.44 207.95 210.33 213.62 217.66 222.17 227.07 232.36 238 243.99 250.33 256.99 - 263.99 271.3 278.93 286.85 295.08 303.59 312.38 321.45 330.78 340.37 350.23 360.33 370.68 381.27 392.11 403.18 - 414.48 426.01 438.77 451.83 465.03 478.26 491.54 505.3 / - 18 7 15 1 200.74 204.8 209.56 215.09 221.38 228.42 236.17 244.63 253.8 263.57 273.93 284.85 - 296.32 308.33 320.87 333.93 347.5 361.58 376.16 391.24 406.75 422.68 439 455.74 472.91 490.49 508.49 526.91 - 545.76 565.04 584.76 604.91 625.51 647.53 670.04 693.42 / - 18 7 16 1 198.27 205.42 213.96 223.69 234.91 247.53 261.47 276.68 293.07 310.61 329.24 348.9 - 369.53 391.13 413.63 436.98 461.2 486.29 512.25 539.08 566.79 595.3 624.58 654.63 685.6 717.58 750.37 783.94 - 818.3 853.48 890.45 928.67 967.46 1006.53 1045.97 1085.53 / - 18 7 17 1 198.37 211.29 227.81 247.32 269.54 294.33 321.57 351.14 382.93 416.85 452.77 490.69 - 530.48 572.03 615.22 659.95 706.61 755.39 806.22 859.06 913.81 970.06 1027.69 1086.52 1148.09 1209.23 1268.28 1320.55 - 1373.87 1426.3 1483.73 1540.65 1598.95 1657.43 1719.94 1780.68 / - 18 7 18 1 204.64 231.76 266.54 307.44 353.66 404.76 460.3 520.42 585.01 653.53 726.1 803.42 - 885.44 971.87 1062.31 1155.63 1249.19 1336.31 1423.19 1513.73 1604.97 1700.06 1794.45 1892.61 1994.16 2095.63 2201.05 2303.76 - 2411.96 2521.5 2632.52 2744.91 2859.13 2974.82 3091.73 3209.94 / - 18 7 19 1 219.61 277.75 351.95 438.05 534.2 640.72 757.38 884.14 1022.54 1170.43 1318.92 1459.44 - 1613.37 1767.49 1928.97 2105.12 2276.06 2454.36 2636.62 2830.85 3024.26 3226.71 3433.59 3653.81 3872.94 4094.52 4321.31 4551.91 - 4783.81 5028.13 5277.37 5529.95 5787.19 6039.78 6307.07 6578 / - 18 7 20 1 264.53 366.28 500.22 678.67 887.32 1123.86 1365.18 1618.28 1880.85 2174.06 2473.93 2773.93 - 3113.29 3447.26 3820.08 4188.51 4570.15 5001.7 5422.46 5848.4 6300.99 6758.7 7238.44 7737.09 8244.94 8763.34 9292.53 9841.7 - 10397.68 10968.5 11555.34 12157.45 12773.67 13408.66 14074.73 14745.98 / - 18 8 1 1 342.53 341.91 341.79 341.89 342.13 342.48 342.91 343.42 344 344.65 345.36 346.13 - 346.97 347.86 348.82 349.83 350.91 352.04 353.22 354.47 355.77 357.13 358.54 360.01 361.54 363.12 364.76 366.46 - 368.21 370.01 371.87 373.79 375.76 377.78 379.87 382 / - 18 8 2 1 342.45 341.82 341.69 341.79 342.03 342.38 342.81 343.32 343.89 344.54 345.25 346.03 - 346.86 347.76 348.71 349.73 350.8 351.93 353.12 354.36 355.67 357.03 358.44 359.91 361.44 363.02 364.66 366.36 - 368.11 369.92 371.78 373.69 375.67 377.69 379.78 381.91 / - 18 8 3 1 342.29 341.65 341.52 341.61 341.85 342.19 342.62 343.13 343.71 344.35 345.06 345.84 - 346.67 347.57 348.53 349.54 350.61 351.74 352.93 354.18 355.48 356.84 358.26 359.73 361.26 362.85 364.49 366.18 - 367.94 369.74 371.61 373.53 375.5 377.53 379.62 381.76 / - 18 8 4 1 342 341.33 341.19 341.29 341.52 341.86 342.29 342.79 343.37 344.01 344.72 345.5 - 346.33 347.23 348.18 349.2 350.27 351.41 352.6 353.84 355.15 356.51 357.93 359.4 360.94 362.52 364.17 365.87 - 367.62 369.43 371.3 373.23 375.2 377.24 379.33 381.47 / - 18 8 5 1 341.45 340.75 340.59 340.67 340.9 341.24 341.66 342.16 342.74 343.38 344.09 344.87 - 345.7 346.6 347.56 348.57 349.65 350.78 351.98 353.23 354.54 355.9 357.33 358.8 360.34 361.93 363.58 365.29 - 367.05 368.87 370.75 372.68 374.67 376.71 378.81 380.96 / - 18 8 6 1 340.39 339.63 339.44 339.51 339.73 340.06 340.48 340.98 341.55 342.2 342.91 343.68 - 344.52 345.42 346.38 347.4 348.48 349.62 350.82 352.08 353.4 354.77 356.21 357.7 359.24 360.85 362.51 364.23 - 366.01 367.84 369.73 371.68 373.68 375.74 377.86 380.03 / - 18 8 7 1 338.29 337.45 337.22 337.27 337.48 337.8 338.21 338.71 339.29 339.93 340.65 341.43 - 342.28 343.19 344.16 345.19 346.29 347.44 348.66 349.93 351.27 352.66 354.12 355.63 357.2 358.83 360.52 362.27 - 364.07 365.94 367.86 369.84 371.88 373.98 376.13 378.35 / - 18 8 8 1 334.17 333.22 332.95 332.97 333.16 333.48 333.89 334.4 334.98 335.64 336.37 337.17 - 338.04 338.97 339.97 341.03 342.16 343.35 344.6 345.92 347.29 348.73 350.24 351.8 353.43 355.11 356.86 358.67 - 360.54 362.47 364.46 366.52 368.63 370.8 373.04 375.34 / - 18 8 9 1 326.12 324.4 323.65 323.4 323.4 323.62 323.97 324.45 325.02 325.7 326.46 327.31 - 328.24 329.25 330.33 331.49 332.72 334.03 335.41 336.86 338.38 339.97 341.63 343.36 345.16 347.03 348.96 350.97 - 353.04 355.18 357.39 359.66 362 364.41 366.88 369.42 / - 18 8 10 1 313.13 305.41 304.33 303.96 303.95 304.21 304.66 305.27 306.02 306.89 307.89 308.96 - 310.16 311.47 312.87 314.37 315.96 317.6 319.37 321.23 323.17 325.15 327.26 329.45 331.72 334.03 336.47 338.99 - 341.59 344.23 346.98 349.81 352.72 355.67 358.72 361.86 / - 18 8 11 1 289.06 278.28 277.3 277.1 277.35 277.92 278.72 279.73 280.93 282.29 283.8 285.47 - 287.27 289.21 291.28 293.48 295.81 298.26 300.82 303.51 306.31 309.22 312.24 315.37 318.6 321.94 325.39 328.93 - 332.58 336.32 340.16 344.1 348.13 352.25 356.47 360.77 / - 18 8 12 1 253.04 250.14 249.44 249.58 250.33 251.47 252.95 254.68 256.68 258.91 261.36 263.96 - 266.8 269.83 273.04 276.43 280.11 283.84 287.73 291.78 295.97 300.31 304.78 309.39 314.14 319.01 324.29 329.43 - 334.69 340.06 345.55 351.16 356.87 362.7 368.63 374.66 / - 18 8 13 1 225.39 224.6 225.14 226.38 228.14 230.31 232.87 235.76 238.99 242.54 246.39 250.52 - 254.91 259.55 264.42 269.51 275.1 281.14 287.24 293.51 299.9 306.48 313.28 320.2 327.31 334.6 342.08 349.73 - 357.56 365.56 373.74 382.04 390.51 398.8 407.63 416.63 / - 18 8 14 1 207.54 208.13 210.57 213.84 217.93 222.47 227.42 232.75 238.43 244.46 250.84 257.55 - 264.58 271.94 279.6 287.57 295.84 304.4 313.24 322.36 331.74 341.39 351.3 361.46 371.87 382.53 393.42 404.55 - 415.92 427.52 439.35 452.48 465.89 479.46 493.03 506.65 / - 18 8 15 1 200.77 205 209.81 215.38 221.7 228.76 236.55 245.03 254.21 264.02 274.42 285.38 - 296.89 308.94 321.52 334.61 348.22 362.33 376.94 392.05 407.64 423.63 440.03 456.84 474.07 491.71 509.78 528.26 - 547.17 566.51 586.28 606.49 627.15 648.26 670.86 693.88 / - 18 8 16 1 198.23 205.51 214.13 223.93 235.18 247.82 261.79 277.01 293.42 310.97 329.62 349.32 - 369.98 391.6 414.15 437.56 461.81 486.92 512.89 539.72 567.42 595.93 625.19 655.2 686.1 718.01 750.89 784.55 - 818.96 854.15 890.13 928.45 967.47 1006.92 1046.4 1086.37 / - 18 8 17 1 198.34 211.34 227.93 247.5 269.76 294.55 321.77 351.33 383.1 417 452.9 490.78 - 530.57 572.11 615.27 659.93 706.46 755.1 805.78 858.46 913.1 969.43 1027.11 1085.98 1146.74 1208.49 1268.58 1322.8 - 1377.59 1432.37 1491.23 1550.06 1611.12 1670.77 1734.68 1797.26 / - 18 8 18 1 204.6 231.84 266.69 307.66 353.9 404.98 460.48 520.48 584.93 653.33 725.68 802.73 - 884.36 970.59 1060.78 1154.15 1248.11 1335.79 1423.63 1515.48 1608.11 1704.35 1800.06 1899.47 2000.03 2105.26 2212.07 2316.36 - 2426.1 2537.16 2649.79 2763.91 2879.82 2997.27 3116.06 3236.23 / - 18 8 19 1 219.42 277.41 351.52 437.32 534.28 639.77 755.86 883.46 1021.44 1169.04 1317.72 1458.86 - 1613.48 1768.41 1930.7 2097.37 2279.95 2459.42 2642.97 2837.49 3033.32 3237.32 3445.81 3667.64 3889.67 4115.26 4346.67 4581.87 - 4818.29 5067.29 5320.94 5578.07 5839.6 6096.67 6368.48 6643.81 / - 18 8 20 1 264.5 366.38 495.95 675.55 882.11 1117.26 1364.61 1615.23 1882.61 2162.96 2461.94 2780.79 - 3122.76 3458.39 3834.35 4204.72 4589.08 4989.84 5447.29 5876.5 6328.29 6791.66 7276.74 7761.43 8291.35 8816.88 9355.11 9888.02 - 10478.88 11059.27 11655.95 12268.16 12894.82 13540.09 14176.88 14899.5 / - 18 9 1 1 344.66 343.91 343.74 343.81 344.03 344.36 344.78 345.28 345.86 346.5 347.21 347.98 - 348.81 349.71 350.66 351.67 352.75 353.88 355.07 356.31 357.62 358.98 360.4 361.87 363.4 364.99 366.63 368.33 - 370.09 371.9 373.76 375.69 377.66 379.7 381.79 383.93 / - 18 9 2 1 344.58 343.82 343.64 343.71 343.93 344.26 344.68 345.18 345.75 346.39 347.1 347.87 - 348.7 349.6 350.55 351.57 352.64 353.77 354.96 356.21 357.51 358.87 360.29 361.76 363.3 364.88 366.53 368.23 - 369.98 371.8 373.66 375.59 377.57 379.6 381.69 383.84 / - 18 9 3 1 344.42 343.64 343.46 343.52 343.74 344.07 344.49 344.98 345.56 346.2 346.9 347.67 - 348.51 349.4 350.36 351.37 352.44 353.58 354.77 356.01 357.32 358.68 360.1 361.58 363.11 364.7 366.34 368.04 - 369.8 371.62 373.49 375.41 377.39 379.43 381.52 383.67 / - 18 9 4 1 344.12 343.32 343.12 343.18 343.4 343.72 344.14 344.63 345.2 345.84 346.55 347.32 - 348.15 349.05 350 351.02 352.09 353.22 354.41 355.66 356.97 358.33 359.76 361.23 362.77 364.36 366.01 367.71 - 369.48 371.29 373.17 375.1 377.08 379.12 381.22 383.38 / - 18 9 5 1 343.55 342.72 342.5 342.55 342.76 343.08 343.49 343.98 344.55 345.19 345.9 346.66 - 347.5 348.39 349.35 350.37 351.44 352.58 353.77 355.02 356.33 357.7 359.13 360.61 362.15 363.75 365.4 367.11 - 368.88 370.71 372.59 374.53 376.52 378.57 380.68 382.84 / - 18 9 6 1 342.46 341.56 341.31 341.34 341.54 341.85 342.26 342.75 343.32 343.95 344.66 345.43 - 346.27 347.17 348.13 349.15 350.23 351.37 352.57 353.83 355.15 356.52 357.96 359.45 361.01 362.61 364.28 366.01 - 367.79 369.63 371.53 373.48 375.49 377.56 379.69 381.87 / - 18 9 7 1 340.29 339.29 339.01 339.01 339.19 339.5 339.9 340.39 340.96 341.6 342.31 343.09 - 343.93 344.84 345.81 346.84 347.93 349.09 350.31 351.58 352.92 354.32 355.78 357.3 358.87 360.51 362.2 363.96 - 365.77 367.64 369.57 371.56 373.61 375.71 377.88 380.1 / - 18 9 8 1 336.05 334.9 334.54 334.51 334.67 334.96 335.36 335.85 336.42 337.08 337.8 338.59 - 339.46 340.39 341.39 342.45 343.58 344.77 346.03 347.35 348.73 350.17 351.68 353.25 354.89 356.58 358.34 360.16 - 362.04 363.98 365.99 368.05 370.18 372.37 374.61 376.93 / - 18 9 9 1 327.73 325.42 324.47 324.15 324.13 324.31 324.64 325.1 325.67 326.34 327.1 327.96 - 328.89 329.91 331.01 332.18 333.43 334.75 336.15 337.62 339.17 340.78 342.47 344.23 346.06 347.95 349.92 351.96 - 354.06 356.24 358.48 360.79 363.17 365.61 368.12 370.7 / - 18 9 10 1 314.71 305.63 304.5 304.12 304.12 304.38 304.85 305.47 306.25 307.15 308.17 309.26 - 310.49 311.83 313.27 314.81 316.44 318.12 319.93 321.83 323.82 325.86 328.02 330.26 332.59 334.95 337.44 340.01 - 342.61 345.33 348.13 350.98 353.92 356.95 360.06 363.23 / - 18 9 11 1 289.1 278.41 277.42 277.23 277.49 278.07 278.9 279.93 281.14 282.53 284.07 285.76 - 287.59 289.57 291.67 293.91 296.27 298.76 301.37 304.1 306.94 309.9 312.97 316.15 319.44 322.83 326.33 329.93 - 333.64 337.44 341.34 345.34 349.43 353.62 357.9 362.27 / - 18 9 12 1 253.21 250.32 249.62 249.77 250.55 251.72 253.22 254.97 257 259.26 261.74 264.42 - 267.31 270.38 273.64 277.07 280.68 284.45 288.38 292.47 296.7 301.08 305.6 310.26 315.3 320.24 325.3 330.49 - 335.81 341.24 346.78 352.82 358.61 364.51 370.52 376.63 / - 18 9 13 1 225.52 224.78 225.35 226.62 228.4 230.6 233.18 236.11 239.37 242.95 246.84 251.01 - 255.44 260.12 265.03 270.17 275.52 281.29 287.63 294.03 300.54 307.21 314.02 321.05 328.35 335.7 343.23 350.95 - 358.84 366.91 375.15 383.22 391.79 400.47 409.32 418.39 / - 18 9 14 1 207.64 208.31 210.81 214.11 218.19 222.78 227.78 233.14 238.87 244.94 251.35 258.1 - 265.18 272.57 280.28 288.3 296.61 305.21 314.1 323.27 332.7 342.41 352.37 362.59 373.06 383.77 394.73 405.92 - 417.36 429.02 440.92 453.04 466.54 479.92 493.88 507.89 / - 18 9 15 1 200.82 205.21 210.06 215.67 222.02 229.11 236.93 245.44 254.64 264.48 274.91 285.91 - 297.45 309.54 322.15 335.28 348.92 363.06 377.71 392.85 408.48 424.55 441.02 457.9 475.19 492.89 511.02 529.57 - 548.54 567.93 587.76 608.02 628.73 649.89 671.52 694.63 / - 18 9 16 1 198.22 205.59 214.29 224.17 235.45 248.12 262.11 277.34 293.76 311.32 329.98 349.69 - 370.4 392.05 414.63 438.08 462.37 487.5 513.48 540.32 568.01 596.51 625.75 655.71 686.54 718.37 751.19 784.94 - 819.44 854.68 890.66 927.97 967.11 1006.27 1046.32 1086.23 / - 18 9 17 1 198.33 211.4 228.06 247.68 269.98 294.77 321.98 351.51 383.26 417.13 453 490.83 - 530.61 572.13 615.26 659.85 706.25 754.74 805.26 857.77 912.21 968.53 1026.29 1085.22 1145.61 1207.25 1268.45 1324.37 - 1380.97 1437.84 1498.63 1559.2 1621.64 1682.58 1747.47 1811.74 / - 18 9 18 1 204.57 231.92 266.83 307.86 354.12 405.18 460.65 520.52 584.82 653.09 725.22 801.99 - 883.31 969.22 1059.12 1152.36 1246.77 1334.94 1423.29 1515.67 1609.24 1706.97 1804.6 1905.97 2008.34 2115.28 2223.63 2329.62 - 2440.99 2553.72 2668.04 2783.96 2901.73 3021.06 3141.84 3264.1 / - 18 9 19 1 219.16 276.96 351.08 437.39 533.32 639.71 755.48 882.77 1019.93 1167.57 1313.1 1458.22 - 1607.65 1769.31 1932.47 2100.18 2283.89 2464.5 2649.49 2845.27 3042.07 3248.15 3458.4 3673.6 3905.88 4133.33 4367.04 4606.17 - 4847.13 5101.57 5360.22 5612.19 5888.97 6150.9 6427.97 6708.54 / - 18 9 20 1 264.49 366.53 492.71 672.5 876.97 1110.05 1356.96 1607.76 1877.55 2166.37 2467.15 2788.09 - 3132.14 3470.2 3821.37 4221.87 4609.2 5013 5473.68 5906.42 6361.43 6824.57 7315.36 7813.85 8339.96 8869.56 9412.57 9953.42 - 10554.36 11145.62 11753.34 12376.87 13015.02 13671.73 14321.03 15012.24 / - 18 10 1 1 346.77 345.9 345.68 345.72 345.92 346.24 346.65 347.14 347.71 348.35 349.05 349.82 - 350.65 351.54 352.5 353.51 354.58 355.71 356.9 358.15 359.46 360.82 362.24 363.72 365.25 366.84 368.49 370.19 - 371.95 373.77 375.64 377.57 379.56 381.6 383.7 385.85 / - 18 10 2 1 346.68 345.81 345.57 345.61 345.81 346.13 346.54 347.03 347.6 348.23 348.94 349.71 - 350.54 351.43 352.38 353.4 354.47 355.6 356.79 358.04 359.34 360.71 362.13 363.61 365.14 366.73 368.38 370.09 - 371.85 373.66 375.54 377.47 379.46 381.5 383.6 385.75 / - 18 10 3 1 346.52 345.63 345.39 345.42 345.62 345.93 346.34 346.83 347.4 348.03 348.74 349.5 - 350.34 351.23 352.18 353.19 354.27 355.4 356.59 357.84 359.14 360.51 361.93 363.41 364.95 366.54 368.19 369.89 - 371.66 373.48 375.35 377.29 379.27 381.32 383.42 385.58 / - 18 10 4 1 346.21 345.3 345.05 345.07 345.27 345.58 345.98 346.47 347.03 347.67 348.37 349.14 - 349.97 350.86 351.81 352.83 353.9 355.03 356.22 357.47 358.78 360.15 361.57 363.05 364.59 366.19 367.84 369.55 - 371.32 373.14 375.02 376.95 378.95 381 383.1 385.26 / - 18 10 5 1 345.64 344.67 344.4 344.42 344.6 344.91 345.31 345.79 346.36 346.99 347.69 348.46 - 349.29 350.18 351.13 352.15 353.22 354.36 355.55 356.81 358.12 359.49 360.92 362.4 363.95 365.55 367.21 368.92 - 370.69 372.52 374.41 376.36 378.36 380.42 382.53 384.7 / - 18 10 6 1 344.51 343.47 343.17 343.16 343.34 343.63 344.03 344.51 345.07 345.7 346.4 347.17 - 348 348.9 349.86 350.88 351.96 353.1 354.3 355.56 356.88 358.26 359.7 361.19 362.75 364.36 366.03 367.76 - 369.55 371.4 373.3 375.26 377.28 379.36 381.49 383.68 / - 18 10 7 1 342.28 341.13 340.77 340.74 340.89 341.18 341.57 342.05 342.61 343.24 343.95 344.72 - 345.56 346.47 347.43 348.47 349.56 350.72 351.94 353.22 354.56 355.96 357.42 358.94 360.52 362.16 363.86 365.62 - 367.44 369.32 371.26 373.25 375.31 377.43 379.6 381.84 / - 18 10 8 1 337.89 336.51 336.04 335.94 336.05 336.31 336.68 337.16 337.72 338.36 339.07 339.86 - 340.73 341.65 342.65 343.72 344.85 346.04 347.31 348.63 350.02 351.47 352.99 354.57 356.22 357.92 359.69 361.52 - 363.42 365.37 367.39 369.48 371.62 373.82 376.09 378.42 / - 18 10 9 1 329.34 326.22 325.23 324.78 324.71 324.87 325.19 325.64 326.21 326.88 327.65 328.52 - 329.46 330.5 331.61 332.8 334.07 335.42 336.84 338.34 339.91 341.56 343.27 345.06 346.92 348.85 350.86 352.93 - 355.07 357.28 359.56 361.91 364.32 366.81 369.33 371.95 / - 18 10 10 1 316.27 305.64 304.59 304.22 304.24 304.52 305 305.65 306.45 307.38 308.43 309.55 - 310.82 312.2 313.67 315.25 316.87 318.64 320.5 322.45 324.49 326.57 328.78 331.09 333.42 335.89 338.44 341.07 - 343.73 346.52 349.39 352.3 355.31 358.41 361.54 364.78 / - 18 10 11 1 289.28 278.53 277.55 277.36 277.64 278.23 279.07 280.12 281.36 282.76 284.33 286.05 - 287.92 289.92 292.07 294.34 296.74 299.27 301.92 304.7 307.59 310.59 313.71 316.95 320.29 323.74 327.29 330.95 - 334.71 338.58 342.54 346.6 350.76 355.01 359.36 363.8 / - 18 10 12 1 253.39 250.51 249.8 249.97 250.77 251.96 253.49 255.26 257.32 259.6 262.08 264.79 - 267.7 270.8 274.08 277.61 281.25 285.06 289.03 293.16 297.44 301.86 306.64 311.36 316.22 321.21 326.33 331.57 - 336.94 342.76 348.38 354.11 359.96 365.92 371.99 378.17 / - 18 10 13 1 225.66 224.96 225.56 226.86 228.67 230.89 233.5 236.46 239.75 243.37 247.29 251.5 - 255.97 260.69 265.65 270.83 276.22 281.82 287.75 294.4 301.1 307.85 314.76 321.96 329.24 336.57 344.15 351.9 - 359.84 367.95 376.24 384.7 393.34 402.15 411.07 420.17 / - 18 10 14 1 207.75 208.5 211.06 214.41 218.46 223.1 228.13 233.54 239.31 245.42 251.88 258.66 - 265.78 273.22 280.97 289.02 297.38 306.03 314.96 324.17 333.66 343.41 353.43 363.7 374.23 385 396.02 407.28 - 418.77 430.51 442.47 454.66 467.09 480.55 494.69 508.63 / - 18 10 15 1 200.88 205.42 210.33 215.97 222.35 229.47 237.31 245.85 255.06 264.94 275.41 286.44 - 298.02 310.13 322.78 335.94 349.61 363.78 378.45 393.61 409.26 425.4 441.94 458.9 476.25 494.02 512.21 530.81 - 549.84 569.29 589.17 609.48 630.24 651.44 673.11 695.18 / - 18 10 16 1 198.22 205.69 214.44 224.42 235.72 248.41 262.42 277.67 294.1 311.67 330.33 350.05 - 370.79 392.45 415.05 438.55 462.88 488.03 514.03 540.86 568.54 597.03 626.25 656.17 686.91 718.64 751.36 785.06 - 819.66 854.97 891 927.76 965.83 1005.72 1046.12 1086.09 / - 18 10 17 1 198.33 211.45 228.18 247.85 270.2 294.99 322.18 351.68 383.39 417.22 453.06 490.84 - 530.56 572.08 615.19 659.71 705.97 754.3 804.64 856.96 911.21 967.33 1025.17 1084.21 1144.09 1205.55 1267.77 1325.75 - 1383.81 1442.85 1504.97 1566.58 1630.44 1693.75 1760.52 1825.47 / - 18 10 18 1 204.55 231.99 266.97 308.04 354.32 405.38 460.81 520.54 584.68 652.81 724.72 801.21 - 882.2 967.54 1057.33 1150.34 1245.1 1333.81 1422.66 1515.58 1609.76 1708.1 1806.45 1908.85 2012.87 2119.22 2232.98 2341.55 - 2455.33 2570.46 2686.98 2805.07 2924.99 3046.42 3169.3 3293.84 / - 18 10 19 1 219 276.58 350.56 436.63 532.31 638.67 753.84 882.04 1018.75 1166.01 1311.64 1457.51 - 1607.64 1771.01 1934.29 2103.03 2287.92 2469.8 2656.35 2852.26 3050.08 3259.42 3471.44 3688.42 3922.63 4152.19 4387.85 4629.16 - 4875.39 5129.96 5393.17 5650.57 5922.36 6200.71 6483.31 6769.82 / - 18 10 20 1 264.51 366.74 487.75 666.68 871.95 1102.88 1350.77 1603.23 1879.5 2170 2472.72 2795.84 - 3119.52 3482.73 3836.76 4240.19 4630.69 5037.73 5455.49 5938.38 6396.86 6860.11 7352.34 7859.56 8370.96 8925.86 9473.28 10019.38 - 10597.46 11223.34 11839.78 12473.88 13124.67 13791.18 14460.35 15165.29 / - 18 11 1 1 348.85 347.88 347.61 347.62 347.8 348.11 348.51 348.99 349.55 350.19 350.89 351.65 - 352.48 353.37 354.32 355.34 356.41 357.54 358.73 359.98 361.29 362.65 364.07 365.55 367.09 368.68 370.34 372.04 - 373.81 375.63 377.51 379.45 381.44 383.49 385.59 387.75 / - 18 11 2 1 348.76 347.78 347.5 347.51 347.69 348 348.4 348.88 349.44 350.07 350.77 351.54 - 352.36 353.25 354.21 355.22 356.29 357.42 358.61 359.86 361.17 362.53 363.96 365.44 366.98 368.57 370.22 371.93 - 373.7 375.52 377.4 379.34 381.33 383.38 385.49 387.65 / - 18 11 3 1 348.59 347.59 347.31 347.32 347.49 347.79 348.19 348.67 349.23 349.86 350.56 351.33 - 352.15 353.04 354 355.01 356.08 357.21 358.4 359.65 360.96 362.33 363.75 365.23 366.77 368.37 370.02 371.73 - 373.5 375.33 377.21 379.14 381.14 383.19 385.3 387.46 / - 18 11 4 1 348.28 347.25 346.95 346.95 347.13 347.42 347.82 348.3 348.86 349.48 350.18 350.95 - 351.77 352.66 353.61 354.63 355.7 356.83 358.02 359.27 360.58 361.95 363.38 364.86 366.4 368 369.66 371.37 - 373.14 374.97 376.86 378.8 380.8 382.85 384.97 387.14 / - 18 11 5 1 347.68 346.61 346.29 346.27 346.44 346.73 347.12 347.6 348.15 348.78 349.47 350.24 - 351.06 351.95 352.91 353.92 354.99 356.13 357.32 358.58 359.89 361.26 362.69 364.18 365.73 367.33 368.99 370.71 - 372.49 374.33 376.22 378.17 380.18 382.25 384.37 386.55 / - 18 11 6 1 346.52 345.37 345.01 344.97 345.12 345.4 345.78 346.26 346.81 347.43 348.13 348.89 - 349.72 350.62 351.57 352.59 353.67 354.81 356.01 357.27 358.6 359.98 361.42 362.92 364.47 366.09 367.77 369.5 - 371.3 373.15 375.06 377.03 379.05 381.14 383.28 385.48 / - 18 11 7 1 344.23 342.93 342.51 342.44 342.57 342.84 343.21 343.68 344.23 344.86 345.56 346.33 - 347.17 348.07 349.04 350.07 351.16 352.32 353.54 354.82 356.16 357.56 359.03 360.55 362.14 363.78 365.49 367.26 - 369.08 370.97 372.92 374.92 376.99 379.11 381.3 383.54 / - 18 11 8 1 339.65 338.02 337.41 337.23 337.29 337.51 337.85 338.31 338.85 339.48 340.19 340.97 - 341.83 342.76 343.76 344.82 345.96 347.16 348.43 349.76 351.16 352.63 354.16 355.75 357.41 359.13 360.91 362.76 - 364.67 366.65 368.69 370.79 372.95 375.18 377.47 379.83 / - 18 11 9 1 330.95 326.94 325.81 325.28 325.17 325.3 325.6 326.05 326.62 327.29 328.07 328.95 - 329.91 330.96 332.09 333.31 334.6 335.98 337.43 338.95 340.56 342.23 343.99 345.81 347.71 349.62 351.66 353.78 - 355.96 358.22 360.54 362.94 365.4 367.93 370.53 373.2 / - 18 11 10 1 317.79 305.54 304.55 304.23 304.29 304.6 305.12 305.8 306.63 307.58 308.66 309.85 - 311.16 312.58 314.05 315.67 317.38 319.2 321.05 323.05 325.15 327.28 329.55 331.91 334.35 336.83 339.44 342.14 - 344.87 347.73 350.67 353.64 356.74 359.91 363.12 366.44 / - 18 11 11 1 288.96 278.66 277.67 277.49 277.78 278.38 279.24 280.31 281.57 283.01 284.6 286.35 - 288.25 290.29 292.46 294.77 297.22 299.79 302.48 305.3 308.24 311.3 314.47 317.75 321.15 324.65 328.27 331.99 - 335.81 339.74 343.76 347.89 352.11 356.43 360.85 365.36 / - 18 11 12 1 253.57 250.7 249.96 250.17 250.99 252.21 253.74 255.55 257.63 259.94 262.45 265.19 - 268.13 271.27 274.62 278.13 281.81 285.65 289.75 293.92 298.25 302.73 307.47 312.24 317.15 322.19 327.64 332.95 - 338.39 343.95 349.63 355.43 361.34 367.77 373.92 380.18 / - 18 11 13 1 225.8 225.15 225.78 227.1 228.93 231.18 233.82 236.8 240.12 243.78 247.75 251.99 - 256.51 261.27 266.26 271.49 276.93 282.58 288.43 294.47 301.42 308.45 315.45 322.73 330 337.57 345.3 353.12 - 361.11 369.29 377.65 386.18 394.89 403.77 412.42 421.63 / - 18 11 14 1 207.86 208.7 211.32 214.71 218.74 223.42 228.5 233.95 239.76 245.91 252.41 259.23 - 266.39 273.87 281.66 289.75 298.15 306.84 315.82 325.08 334.61 344.42 354.48 364.81 375.39 386.22 397.29 408.61 - 420.17 431.97 444 456.26 468.75 481.47 494.85 509.37 / - 18 11 15 1 200.96 205.65 210.6 216.27 222.69 229.84 237.7 246.26 255.49 265.39 275.89 286.96 - 298.58 310.72 323.39 336.58 350.28 364.47 379.17 394.35 410.01 426.16 442.78 459.81 477.24 495.07 513.32 531.98 - 551.06 570.57 590.5 610.85 631.65 652.9 674.59 696.7 / - 18 11 16 1 198.23 205.8 214.61 224.67 235.99 248.7 262.72 277.99 294.44 312.01 330.67 350.38 - 371.12 392.82 415.42 438.94 463.31 488.5 514.5 541.33 568.99 597.46 626.67 656.55 687.19 718.82 751.43 785 - 819.51 854.93 891.05 927.85 965.34 1004.15 1044.78 1085.77 / - 18 11 17 1 198.35 211.52 228.31 248.02 270.4 295.22 322.37 351.83 383.49 417.26 453.07 490.8 - 530.45 571.95 615.04 659.5 705.61 753.77 803.92 856.03 910.05 965.95 1023.63 1082.81 1142.87 1203.31 1266.43 1321.61 - 1377.4 1432.6 1491.7 1549.66 1608.78 1671.45 1732.23 1792.04 / - 18 11 18 1 204.54 232.07 267.08 308.2 354.48 405.5 460.94 520.52 584.48 652.47 724.16 800.37 - 881.01 965.97 1055.39 1148.12 1243.04 1332.41 1421.82 1515.39 1610.13 1709.2 1808.52 1911.37 2016.19 2124.43 2235.05 2348.24 - 2464 2581.69 2701.19 2822.5 2945.55 3070.08 3196.09 3323.5 / - 18 11 19 1 218.86 276.43 350.05 435.84 532.39 637.23 752.64 878.55 1014.17 1159.86 1310.23 1456.83 - 1607.73 1773.55 1936.23 2106.09 2283.7 2475.47 2663.59 2860.89 3060.57 3270.77 3485.32 3704.08 3926.9 4172.26 4409.95 4653.5 - 4902.93 5159.04 5424.64 5685.01 5960.18 6249.64 6531.44 6824.5 / - 18 11 20 1 264.54 367.05 484.49 661.66 863.96 1095.78 1343.18 1604.01 1872.76 2161.94 2465.22 2788.62 - 3130.46 3496.32 3853.44 4227.9 4653.71 5064.37 5485.71 5972.74 6435.28 6902.59 7394.4 7912.16 8426.92 8964.46 9538.96 10090.28 - 10673.16 11274.48 11925.97 12565.8 13222.98 13895.45 14572.49 15287.48 / - 18 12 1 1 350.87 349.83 349.52 349.51 349.68 349.97 350.36 350.84 351.39 352.02 352.72 353.48 - 354.3 355.19 356.14 357.15 358.22 359.36 360.55 361.8 363.1 364.47 365.89 367.38 368.92 370.51 372.17 373.88 - 375.65 377.48 379.36 381.3 383.3 385.36 387.47 389.64 / - 18 12 2 1 350.78 349.72 349.41 349.4 349.56 349.85 350.24 350.72 351.27 351.9 352.6 353.36 - 354.18 355.07 356.02 357.03 358.1 359.23 360.42 361.67 362.98 364.35 365.77 367.26 368.8 370.4 372.05 373.77 - 375.54 377.36 379.25 381.19 383.19 385.25 387.36 389.53 / - 18 12 3 1 350.61 349.54 349.21 349.19 349.36 349.64 350.03 350.51 351.06 351.68 352.38 353.14 - 353.96 354.85 355.8 356.81 357.88 359.02 360.21 361.46 362.77 364.13 365.56 367.04 368.58 370.18 371.84 373.56 - 375.33 377.16 379.05 380.99 382.99 385.05 387.16 389.34 / - 18 12 4 1 350.29 349.19 348.85 348.82 348.98 349.26 349.64 350.12 350.67 351.29 351.98 352.74 - 353.57 354.45 355.4 356.42 357.49 358.62 359.81 361.06 362.37 363.74 365.17 366.65 368.2 369.8 371.46 373.18 - 374.95 376.79 378.68 380.63 382.63 384.69 386.81 388.99 / - 18 12 5 1 349.68 348.52 348.15 348.11 348.26 348.53 348.91 349.38 349.93 350.55 351.24 352 - 352.83 353.71 354.66 355.68 356.75 357.88 359.08 360.33 361.65 363.02 364.45 365.94 367.49 369.1 370.76 372.49 - 374.27 376.11 378.01 379.97 381.98 384.06 386.19 388.37 / - 18 12 6 1 348.49 347.23 346.82 346.75 346.88 347.14 347.52 347.98 348.52 349.14 349.83 350.59 - 351.42 352.31 353.26 354.28 355.36 356.5 357.7 358.96 360.29 361.67 363.11 364.61 366.18 367.8 369.48 371.22 - 373.02 374.87 376.79 378.76 380.8 382.89 385.04 387.25 / - 18 12 7 1 346.12 344.7 344.22 344.11 344.21 344.46 344.82 345.28 345.82 346.44 347.14 347.9 - 348.74 349.64 350.6 351.63 352.73 353.88 355.1 356.39 357.73 359.14 360.61 362.14 363.73 365.38 367.09 368.86 - 370.7 372.59 374.54 376.56 378.63 380.77 382.97 385.22 / - 18 12 8 1 341.34 339.41 338.65 338.37 338.36 338.54 338.85 339.28 339.8 340.42 341.12 341.9 - 342.75 343.68 344.68 345.76 346.9 348.11 349.39 350.73 352.14 353.62 355.16 356.77 358.45 360.19 361.99 363.86 - 365.8 367.8 369.86 371.99 374.18 376.43 378.75 381.14 / - 18 12 9 1 332.54 327.54 326.23 325.69 325.51 325.61 325.89 326.33 326.9 327.58 328.37 329.26 - 330.24 331.31 332.46 333.7 335.02 336.4 337.88 339.44 341.08 342.79 344.58 346.45 348.39 350.4 352.49 354.62 - 356.85 359.15 361.52 363.97 366.48 369.07 371.72 374.45 / - 18 12 10 1 319.26 305.22 304.35 304.12 304.25 304.62 305.19 305.92 306.78 307.78 308.89 310.13 - 311.46 312.91 314.45 316.11 317.85 319.7 321.65 323.67 325.79 328.03 330.32 332.74 335.21 337.8 340.43 343.19 - 346.04 348.92 351.93 355.03 358.15 361.4 364.69 368.1 / - 18 12 11 1 288.88 278.79 277.8 277.63 277.92 278.54 279.42 280.51 281.79 283.25 284.87 286.65 - 288.58 290.65 292.86 295.21 297.7 300.31 303.05 305.92 308.9 312.01 315.23 318.57 322.02 325.59 329.26 333.04 - 336.92 340.91 345 349.2 353.49 357.88 362.36 366.95 / - 18 12 12 1 253.76 250.9 250.12 250.36 251.22 252.45 254.02 255.86 257.94 260.27 262.83 265.6 - 268.57 271.74 275.1 278.64 282.42 286.31 290.36 294.64 299.01 303.6 308.28 313.23 318.19 323.29 328.68 334.05 - 339.55 345.16 351.25 357.13 363.11 369.22 375.43 381.76 / - 18 12 13 1 225.95 225.34 226 227.35 229.2 231.48 234.14 237.15 240.51 244.21 248.21 252.5 - 257.05 261.86 266.89 272.16 277.65 283.34 289.24 295.33 301.61 308.55 315.88 323.33 330.83 338.45 346.19 354.14 - 362.11 370.33 378.74 387.32 396.07 405.01 414.11 423.39 / - 18 12 14 1 207.98 208.9 211.58 215.03 219.05 223.76 228.89 234.38 240.23 246.42 252.96 259.82 - 267.01 274.53 282.36 290.49 298.93 307.66 316.68 325.98 335.55 345.4 355.52 365.89 376.52 387.41 398.54 409.91 - 421.53 433.39 445.48 457.8 470.36 483.15 496.17 509.42 / - 18 12 15 1 201.05 205.89 210.88 216.59 223.04 230.21 238.1 246.68 255.93 265.84 276.36 287.47 - 299.12 311.3 323.99 337.2 350.91 365.13 379.83 395.02 410.7 426.85 443.48 460.58 478.08 495.99 514.3 533.02 - 552.16 571.71 591.69 612.09 632.93 654.21 675.93 698.06 / - 18 12 16 1 198.26 205.92 214.79 224.93 236.28 249 263.03 278.3 294.76 312.33 330.99 350.69 - 371.4 393.12 415.73 439.23 463.63 488.85 514.86 541.69 569.33 597.78 626.96 656.8 687.37 718.91 751.4 784.84 - 819.21 854.5 890.71 927.6 965.16 1003.35 1042.85 1084.19 / - 18 12 17 1 198.37 211.62 228.45 248.19 270.58 295.43 322.55 351.95 383.55 417.26 452.99 490.68 - 530.24 571.69 614.77 659.19 705.18 753.18 803.14 855.02 908.79 964.41 1021.84 1080.94 1141.22 1202.04 1264.72 1320.88 - 1377.98 1435.13 1494.11 1552.77 1613.29 1676.98 1738.76 1800.82 / - 18 12 18 1 204.54 232.15 267.19 308.34 354.62 405.58 460.95 520.43 584.21 652.03 723.57 799.5 - 879.79 964.33 1052.99 1145.73 1240.7 1332.45 1421.79 1514.56 1610.06 1709.62 1812.21 1913.46 2020.94 2130.43 2240.05 2353.54 - 2471.09 2590.02 2710.73 2833.59 2958.6 3085.51 3214.43 3345.54 / - 18 12 19 1 218.77 275.98 349.56 435.04 531.41 637.25 751.35 877.74 1012.92 1158.15 1308.78 1457.35 - 1607.84 1765.86 1938.33 2109.41 2288.25 2481.5 2672.4 2870.11 3070.52 3281.53 3500.02 3720.96 3945.92 4193.49 4433.62 4679.76 - 4936.69 5190.32 5458.31 5721.65 6000.14 6284.49 6576.75 6873.3 / - 18 12 20 1 264.63 367.47 484.96 656.45 859.1 1088.82 1337.21 1596.72 1870.91 2158.09 2471.87 2797.72 - 3142.32 3485.42 3871.4 4249.33 4678.91 5093.31 5518.41 5967.05 6476.82 6948.66 7444.85 7957.18 8482.31 9029.97 9586.73 10166.72 - 10754.63 11361.48 11987.38 12664.93 13329.06 14008 14692.04 15413.99 / - 18 13 1 1 352.83 351.74 351.4 351.37 351.53 351.81 352.2 352.67 353.22 353.84 354.53 355.29 - 356.11 357 357.95 358.96 360.03 361.16 362.35 363.6 364.91 366.28 367.7 369.19 370.73 372.33 373.99 375.71 - 377.48 379.31 381.2 383.15 385.15 387.21 389.33 391.51 / - 18 13 2 1 352.74 351.64 351.29 351.26 351.41 351.69 352.08 352.55 353.09 353.72 354.41 355.17 - 355.99 356.87 357.82 358.83 359.9 361.03 362.22 363.47 364.78 366.15 367.58 369.06 370.61 372.21 373.87 375.58 - 377.36 379.19 381.08 383.03 385.03 387.1 389.22 391.39 / - 18 13 3 1 352.57 351.44 351.09 351.05 351.2 351.48 351.86 352.33 352.87 353.49 354.18 354.94 - 355.76 356.65 357.59 358.6 359.68 360.81 362 363.25 364.56 365.92 367.35 368.84 370.38 371.98 373.65 375.36 - 377.14 378.97 380.87 382.82 384.82 386.89 389.01 391.19 / - 18 13 4 1 352.24 351.08 350.71 350.66 350.8 351.08 351.45 351.92 352.46 353.08 353.77 354.53 - 355.35 356.23 357.18 358.19 359.26 360.39 361.58 362.83 364.14 365.51 366.94 368.43 369.98 371.58 373.25 374.97 - 376.75 378.59 380.48 382.44 384.45 386.52 388.64 390.83 / - 18 13 5 1 351.62 350.4 349.99 349.93 350.06 350.32 350.69 351.15 351.69 352.31 352.99 353.75 - 354.57 355.45 356.4 357.41 358.48 359.62 360.81 362.07 363.38 364.76 366.19 367.68 369.23 370.85 372.52 374.24 - 376.03 377.88 379.78 381.74 383.76 385.84 387.98 390.18 / - 18 13 6 1 350.39 349.05 348.6 348.5 348.61 348.86 349.22 349.68 350.21 350.83 351.51 352.27 - 353.09 353.98 354.93 355.94 357.02 358.16 359.36 360.63 361.95 363.34 364.78 366.29 367.85 369.48 371.16 372.91 - 374.71 376.57 378.5 380.48 382.52 384.62 386.78 389 / - 18 13 7 1 347.96 346.42 345.87 345.73 345.81 346.04 346.39 346.83 347.37 347.98 348.67 349.43 - 350.26 351.15 352.12 353.15 354.24 355.4 356.62 357.91 359.26 360.67 362.14 363.67 365.27 366.92 368.64 370.42 - 372.26 374.17 376.13 378.16 380.24 382.39 384.59 386.86 / - 18 13 8 1 342.94 340.68 339.74 339.35 339.26 339.38 339.66 340.06 340.56 341.16 341.86 342.63 - 343.48 344.42 345.42 346.5 347.65 348.87 350.16 351.53 352.95 354.45 356.01 357.65 359.34 361.11 362.94 364.84 - 366.8 368.83 370.92 373.08 375.3 377.59 379.94 382.36 / - 18 13 9 1 334.14 327.93 326.58 325.91 325.72 325.8 326.08 326.51 327.08 327.77 328.57 329.48 - 330.48 331.57 332.75 334.02 335.37 336.81 338.33 339.89 341.56 343.32 345.15 347.06 349.05 351.11 353.24 355.42 - 357.71 360.06 362.49 364.99 367.56 370.18 372.9 375.68 / - 18 13 10 1 320.64 305.16 304.32 304.1 304.24 304.63 305.22 305.97 306.86 307.89 309.04 310.31 - 311.7 313.19 314.79 316.49 318.3 320.2 322.2 324.29 326.46 328.73 331.1 333.55 336.1 338.72 341.46 344.27 - 347.16 350.14 353.2 356.35 359.6 362.9 366.29 369.78 / - 18 13 11 1 288.29 278.92 277.93 277.76 278.07 278.7 279.59 280.7 282.01 283.49 285.14 286.95 - 288.91 291.02 293.27 295.66 298.18 300.84 303.63 306.54 309.58 312.73 316.01 319.4 322.91 326.54 330.27 334.11 - 338.06 342.11 346.27 350.53 354.89 359.35 363.91 368.56 / - 18 13 12 1 253.94 251.06 250.25 250.56 251.43 252.69 254.27 256.15 258.24 260.6 263.18 265.98 - 268.98 272.17 275.56 279.22 282.98 286.91 291 295.35 299.77 304.35 309.18 314.06 319.15 324.4 329.69 335.28 - 340.84 346.53 352.53 358.47 364.52 370.69 377.4 383.81 / - 18 13 13 1 226.1 225.53 226.22 227.59 229.46 231.77 234.45 237.5 240.9 244.65 248.7 253.03 - 257.62 262.46 267.54 272.85 278.38 284.11 290.06 296.19 302.52 309.04 315.91 323.53 331.34 339.05 346.86 355 - 363.25 371.44 380.12 388.77 397.6 406.61 415.4 424.73 / - 18 13 14 1 208.1 209.12 211.87 215.39 219.44 224.18 229.35 234.88 240.76 246.98 253.55 260.44 - 267.67 275.21 283.07 291.24 299.71 308.47 317.53 326.87 336.49 346.37 356.53 366.95 377.63 388.56 399.74 411.17 - 422.84 434.75 446.9 459.29 471.91 484.76 497.84 511.15 / - 18 13 15 1 201.16 206.15 211.2 216.96 223.43 230.63 238.53 247.13 256.4 266.3 276.84 287.96 - 299.63 311.83 324.56 337.78 351.5 365.72 380.43 395.63 411.3 427.45 444.07 461.16 478.71 496.69 515.08 533.86 - 553.05 572.66 592.68 613.12 633.99 655.3 677.05 699.2 / - 18 13 16 1 198.31 206.05 215 225.21 236.58 249.31 263.34 278.6 295.05 312.62 331.27 350.95 - 371.64 393.32 415.94 439.42 463.79 489.03 515.06 541.88 569.5 597.92 627.07 656.87 687.39 718.85 751.24 784.56 - 818.8 853.95 890.01 926.96 964.7 1003.04 1041.97 1082.18 / - 18 13 17 1 198.41 211.74 228.59 248.36 270.76 295.58 322.68 352.03 383.55 417.18 452.81 490.41 - 529.9 571.24 614.33 658.73 704.63 752.51 802.3 853.98 907.53 962.9 1020.07 1078.92 1139.26 1200.85 1262.42 1319.39 - 1376.82 1435.53 1494.83 1555.07 1617.12 1680.98 1743.89 1810.06 / - 18 13 18 1 204.55 232.24 267.28 308.34 354.7 405.59 460.84 520.25 583.82 651.44 722.9 798.63 - 878.64 962.81 1051.04 1143.49 1238.46 1330.41 1420.86 1513.75 1611.25 1710.13 1813.35 1915.65 2025.24 2134.17 2244.87 2360.53 - 2474.03 2598.17 2720.06 2844.18 2970.64 3098.96 3229.37 3361.88 / - 18 13 19 1 218.74 275.8 349.09 434.26 531.47 635.87 749.83 875.39 1011.83 1156.72 1307.43 1450.63 - 1608.14 1767.17 1940.73 2113.1 2293.31 2478.26 2683.5 2880.16 3083.11 3295.66 3514.56 3739.25 3968.32 4204.49 4459.41 4707.95 - 4967.3 5224.07 5494.46 5761.55 6042.94 6329.99 6612.35 6925.9 / - 18 13 20 1 264.77 368.05 486.01 650.93 851.13 1082.45 1329.37 1589.36 1867.08 2154.97 2462.29 2788.13 - 3136.7 3501.83 3891.27 4272.79 4671.45 5124.64 5554.53 6007.04 6466.56 6999.04 7500.62 8017.18 8537.54 9096.29 9664.37 10240.34 - 10843.18 11456.08 12088.23 12739.59 13410.6 14129.64 14822 15551.24 / - 18 14 1 1 354.72 353.61 353.25 353.22 353.36 353.64 354.02 354.48 355.03 355.65 356.33 357.09 - 357.91 358.79 359.74 360.75 361.82 362.95 364.14 365.39 366.7 368.07 369.5 370.98 372.53 374.13 375.79 377.51 - 379.29 381.13 383.02 384.97 386.98 389.05 391.17 393.36 / - 18 14 2 1 354.62 353.5 353.14 353.1 353.24 353.51 353.89 354.36 354.9 355.52 356.2 356.96 - 357.78 358.66 359.61 360.62 361.69 362.82 364.01 365.26 366.57 367.94 369.36 370.85 372.4 374 375.66 377.38 - 379.16 381 382.89 384.85 386.86 388.93 391.05 393.24 / - 18 14 3 1 354.45 353.3 352.93 352.88 353.02 353.29 353.66 354.13 354.67 355.28 355.97 356.72 - 357.54 358.43 359.37 360.38 361.45 362.58 363.77 365.02 366.33 367.7 369.13 370.62 372.16 373.77 375.43 377.15 - 378.93 380.77 382.67 384.62 386.64 388.71 390.84 393.02 / - 18 14 4 1 354.12 352.93 352.54 352.48 352.61 352.87 353.24 353.7 354.24 354.85 355.54 356.29 - 357.11 357.99 358.94 359.94 361.01 362.14 363.33 364.59 365.9 367.27 368.7 370.19 371.74 373.35 375.01 376.74 - 378.52 380.36 382.26 384.22 386.24 388.32 390.45 392.64 / - 18 14 5 1 353.48 352.22 351.79 351.71 351.82 352.08 352.44 352.89 353.43 354.04 354.72 355.47 - 356.29 357.17 358.12 359.13 360.2 361.33 362.52 363.78 365.09 366.47 367.9 369.4 370.95 372.57 374.24 375.97 - 377.77 379.62 381.53 383.49 385.52 387.61 389.75 391.96 / - 18 14 6 1 352.21 350.82 350.33 350.21 350.3 350.54 350.89 351.33 351.86 352.47 353.15 353.9 - 354.72 355.61 356.56 357.57 358.65 359.79 360.99 362.26 363.58 364.97 366.42 367.92 369.49 371.12 372.81 374.56 - 376.37 378.24 380.17 382.16 384.21 386.32 388.48 390.71 / - 18 14 7 1 349.68 348.02 347.39 347.2 347.24 347.44 347.77 348.2 348.72 349.33 350.01 350.76 - 351.59 352.49 353.45 354.48 355.58 356.74 357.96 359.25 360.6 362.02 363.5 365.04 366.64 368.31 370.04 371.83 - 373.68 375.6 377.57 379.61 381.71 383.87 386.1 388.38 / - 18 14 8 1 344.42 341.81 340.67 340.14 339.97 340.03 340.26 340.63 341.11 341.7 342.38 343.15 - 344.01 344.94 345.96 347.05 348.21 349.45 350.76 352.14 353.59 355.11 356.71 358.36 360.09 361.89 363.75 365.69 - 367.68 369.75 371.88 374.08 376.34 378.67 381.07 383.53 / - 18 14 9 1 335.67 328.16 326.67 326.05 325.84 325.91 326.19 326.64 327.22 327.93 328.75 329.68 - 330.71 331.83 333.05 334.35 335.75 337.22 338.78 340.39 342.11 343.91 345.8 347.76 349.79 351.9 354.05 356.32 - 358.65 361.06 363.54 366.1 368.69 371.39 374.16 377 / - 18 14 10 1 321.91 305.19 304.31 304.08 304.22 304.61 305.21 305.97 306.88 307.92 309.09 310.38 - 311.79 313.31 314.93 316.67 318.5 320.44 322.48 324.62 326.86 329.19 331.62 334.14 336.76 339.46 342.26 345.15 - 348.13 351.2 354.37 357.61 360.94 364.34 367.82 371.38 / - 18 14 11 1 288 279.05 278.05 277.89 278.21 278.86 279.77 280.9 282.23 283.73 285.41 287.25 - 289.25 291.39 293.68 296.11 298.68 301.38 304.21 307.17 310.26 313.47 316.8 320.25 323.82 327.5 331.29 335.2 - 339.21 343.33 347.55 351.88 356.31 360.85 365.48 370.21 / - 18 14 12 1 254.13 251.2 250.42 250.75 251.65 252.92 254.52 256.41 258.56 260.91 263.51 266.33 - 269.36 272.65 276.07 279.68 283.47 287.54 291.68 295.99 300.45 305.23 310 315.05 320.12 325.34 330.83 336.42 - 342.05 347.91 353.78 359.99 366.11 372.35 378.95 385.43 / - 18 14 13 1 226.25 225.72 226.44 227.83 229.73 232.06 234.77 237.85 241.31 245.1 249.19 253.56 - 258.2 263.08 268.2 273.55 279.12 284.9 290.89 297.07 303.44 310 316.75 323.67 331.17 339.3 347.55 355.71 - 364.01 372.45 381.05 389.87 398.75 407.81 417.05 426.46 / - 18 14 14 1 208.23 209.39 212.27 215.84 219.93 224.7 229.9 235.46 241.36 247.61 254.19 261.11 - 268.36 275.93 283.81 292 300.5 309.29 318.38 327.75 337.4 347.32 357.51 367.97 378.69 389.66 400.89 412.36 - 424.08 436.04 448.24 460.68 473.36 486.27 499.41 512.78 / - 18 14 15 1 201.39 206.54 211.64 217.41 223.9 231.1 239.01 247.6 256.87 266.78 277.32 288.44 - 300.1 312.31 325.03 338.27 352.01 366.24 380.95 396.13 411.79 427.92 444.52 461.58 479.1 497.08 515.51 534.36 - 553.62 573.28 593.35 613.83 634.73 656.07 677.83 699.99 / - 18 14 16 1 198.48 206.36 215.35 225.57 236.93 249.64 263.65 278.89 295.31 312.85 331.48 351.14 - 371.8 393.44 416.03 439.49 463.81 488.98 514.98 541.8 569.41 597.79 626.91 656.67 687.13 718.5 750.79 783.98 - 818.08 853.07 888.94 925.7 963.33 1001.82 1041 1080.76 / - 18 14 17 1 198.54 211.95 228.81 248.56 270.91 295.68 322.72 352.01 383.46 416.98 452.5 489.95 - 529.33 570.57 613.6 658.01 703.86 751.61 801.24 852.71 906.02 961.13 1018.02 1076.67 1136.99 1198.42 1260.36 1317.79 - 1375.79 1435.24 1495.47 1556.78 1620.03 1685.15 1749.65 1817.36 / - 18 14 18 1 204.61 232.34 267.34 308.32 354.67 405.47 460.57 519.83 583.17 650.61 721.87 797.49 - 877.24 961.11 1048.97 1140.84 1235.97 1328.08 1419.14 1512.72 1610.82 1710.49 1814.38 1920.28 2028.01 2137.96 2249.8 2366.45 - 2481.4 2606.6 2729.83 2855.27 2983.1 3112.98 3245.04 3381.86 / - 18 14 19 1 218.76 275.6 348.65 434.36 530.24 635.88 749.51 874.54 1010.54 1155.41 1301.29 1450.02 - 1608.42 1768.55 1943.29 2117.09 2298.71 2485.36 2692.26 2891.04 3099.43 3309.47 3530.55 3759.03 3992.57 4229.55 4471.7 4738.86 - 5000.66 5260.74 5534.28 5804.68 6089.13 6379.97 6666.5 6968.65 / - 18 14 20 1 264.99 368.83 487.6 643.18 843.63 1070.69 1322.28 1582.99 1852.54 2155.66 2470.82 2799.57 - 3151.27 3520.1 3888.66 4298.93 4701.68 5159.84 5594.31 6051.44 6516.37 7003.08 7561.42 8083.46 8610.62 9164.13 9742.98 10330.13 - 10912.65 11559.78 12199.32 12858.23 13535.62 14231.16 14964.69 15701.91 / - 18 15 1 1 356.5 355.42 355.06 355.02 355.17 355.44 355.81 356.28 356.82 357.43 358.12 358.87 - 359.69 360.57 361.52 362.52 363.59 364.72 365.91 367.16 368.47 369.84 371.27 372.76 374.31 375.91 377.58 379.3 - 381.08 382.92 384.82 386.78 388.79 390.87 393 395.18 / - 18 15 2 1 356.41 355.31 354.95 354.9 355.04 355.31 355.68 356.14 356.69 357.3 357.98 358.74 - 359.55 360.44 361.38 362.39 363.46 364.58 365.77 367.02 368.33 369.7 371.13 372.62 374.17 375.78 377.44 379.16 - 380.95 382.79 384.69 386.64 388.66 390.73 392.87 395.06 / - 18 15 3 1 356.23 355.11 354.73 354.68 354.81 355.08 355.45 355.9 356.44 357.06 357.74 358.49 - 359.3 360.19 361.13 362.14 363.2 364.33 365.52 366.77 368.08 369.46 370.89 372.37 373.92 375.53 377.2 378.92 - 380.71 382.55 384.45 386.41 388.43 390.5 392.64 394.83 / - 18 15 4 1 355.9 354.72 354.32 354.26 354.38 354.64 355 355.46 355.99 356.6 357.28 358.03 - 358.85 359.73 360.67 361.68 362.74 363.87 365.06 366.32 367.63 369 370.43 371.92 373.47 375.08 376.75 378.48 - 380.27 382.12 384.02 385.99 388.01 390.09 392.23 394.43 / - 18 15 5 1 355.24 353.97 353.53 353.44 353.55 353.8 354.15 354.6 355.13 355.73 356.41 357.16 - 357.98 358.85 359.8 360.81 361.88 363.01 364.2 365.46 366.77 368.15 369.59 371.09 372.64 374.26 375.94 377.67 - 379.47 381.32 383.24 385.21 387.25 389.34 391.49 393.7 / - 18 15 6 1 353.93 352.51 351.99 351.85 351.93 352.16 352.5 352.94 353.46 354.07 354.74 355.49 - 356.31 357.19 358.14 359.15 360.23 361.37 362.57 363.84 365.16 366.55 368 369.52 371.09 372.72 374.42 376.17 - 377.99 379.86 381.8 383.8 385.85 387.97 390.15 392.39 / - 18 15 7 1 351.22 349.4 348.68 348.41 348.4 348.57 348.88 349.29 349.79 350.39 351.06 351.81 - 352.63 353.53 354.49 355.52 356.62 357.79 359.02 360.32 361.68 363.11 364.6 366.15 367.77 369.45 371.2 373.01 - 374.88 376.81 378.81 380.87 382.99 385.17 387.42 389.73 / - 18 15 8 1 345.78 342.8 341.42 340.75 340.46 340.46 340.64 340.98 341.45 342.03 342.7 343.48 - 344.34 345.28 346.31 347.42 348.6 349.86 351.2 352.61 354.09 355.64 357.27 358.97 360.73 362.57 364.47 366.45 - 368.49 370.6 372.78 375.03 377.34 379.72 382.17 384.69 / - 18 15 9 1 337.04 328.06 326.61 326.01 325.83 325.93 326.24 326.71 327.33 328.07 328.92 329.88 - 330.95 332.11 333.37 334.67 336.11 337.63 339.24 340.93 342.7 344.52 346.45 348.47 350.57 352.74 355 357.28 - 359.69 362.17 364.73 367.35 370.03 372.8 375.65 378.57 / - 18 15 10 1 323.02 305.21 304.31 304.06 304.2 304.6 305.2 305.97 306.89 307.96 309.15 310.46 - 311.89 313.43 315.09 316.85 318.72 320.69 322.77 324.95 327.22 329.6 332.07 334.64 337.3 340.06 342.91 345.85 - 348.88 352 355.21 358.51 361.9 365.38 368.93 372.58 / - 18 15 11 1 287.46 279.19 278.18 278.02 278.35 279.02 279.94 281.09 282.45 283.98 285.69 287.56 - 289.59 291.76 294.09 296.56 299.17 301.92 304.8 307.81 310.95 314.21 317.6 321.11 324.73 328.48 332.33 336.3 - 340.38 344.57 348.86 353.26 357.77 362.37 367.08 371.89 / - 18 15 12 1 254.33 251.32 250.59 250.94 251.86 253.15 254.79 256.68 258.85 261.26 263.89 266.74 - 269.8 273.05 276.5 280.23 284.06 288.06 292.24 296.71 301.22 305.89 310.88 315.86 320.98 326.46 331.87 337.57 - 343.26 349.25 355.2 361.39 367.72 374.04 380.71 387.27 / - 18 15 13 1 226.41 225.92 226.66 228.08 230 232.35 235.09 238.23 241.73 245.57 249.71 254.13 - 258.8 263.73 268.89 274.28 279.89 285.71 291.73 297.95 304.37 310.97 317.76 324.73 331.88 339.2 347.37 356 - 364.51 373.12 381.85 390.62 399.73 408.73 418.27 427.74 / - 18 15 14 1 208.35 209.73 212.72 216.36 220.5 225.34 230.57 236.15 242.07 248.33 254.92 261.85 - 269.1 276.68 284.58 292.79 301.3 310.12 319.22 328.61 338.28 348.23 358.45 368.94 379.69 390.69 401.95 413.47 - 425.23 437.23 449.48 461.96 474.68 487.64 500.84 514.26 / - 18 15 15 1 201.8 207.04 212.17 217.96 224.44 231.64 239.54 248.13 257.39 267.28 277.8 288.9 - 300.55 312.73 325.43 338.64 352.36 366.59 381.3 396.47 412.11 428.21 444.76 461.78 479.25 497.17 515.54 534.36 - 553.62 573.33 593.44 613.97 634.9 656.25 678.01 700.16 / - 18 15 16 1 198.82 206.79 215.8 226 237.34 250.01 263.98 279.18 295.55 313.04 331.6 351.21 - 371.83 393.42 415.95 439.38 463.63 488.71 514.61 541.32 568.82 597.12 626.2 655.98 686.39 717.68 749.86 782.91 - 816.84 851.66 887.38 924.01 961.55 999.93 1039.11 1079.03 / - 18 15 17 1 198.79 212.25 229.09 248.78 271.05 295.73 322.66 351.84 383.22 416.64 452 489.29 - 528.47 569.51 612.37 656.88 702.71 750.34 799.79 851.06 904.19 959.2 1015.95 1074.32 1134.17 1195.21 1257.08 1316.76 - 1373.53 1433.5 1494.3 1556.19 1619.98 1685.71 1750.91 1819.25 / - 18 15 18 1 204.77 232.47 267.31 308.22 354.41 405.14 460.07 519.1 582.14 649.36 720.37 795.76 - 875.37 959.21 1046.96 1138.25 1232.89 1325.21 1416.97 1511.28 1610.03 1710.53 1815.11 1921.86 2030.6 2141.69 2254.73 2372.53 - 2488.83 2611.05 2739.81 2866.9 2996.24 3127.58 3261.5 3402.18 / - 18 15 19 1 218.86 275.66 348.22 433.66 528.96 634.29 747.94 872.06 1005.91 1149.64 1300.52 1448.95 - 1608.34 1769.72 1938.32 2121.1 2304.38 2492.91 2686.91 2902.56 3113.3 3325.88 3548.04 3779.01 4016.73 4256.81 4504.78 4772.12 - 5036.86 5291.23 5577.5 5852.19 6140.18 6434.29 6725.55 7031.82 / - 18 15 20 1 265.33 369.91 489.74 636.49 838.56 1063.12 1308.99 1568.82 1846.84 2149.05 2461.86 2792.13 - 3145.01 3518.63 3913.07 4299.07 4735.59 5160.17 5638.77 6101.13 6572.13 7064.57 7564.57 8157.83 8692.12 9251.34 9824.27 10416.06 - 11017.54 11646.33 12290.88 12988.24 13673.88 14378.2 15103.24 15826.66 / - 18 16 1 1 358.19 357.16 356.82 356.79 356.94 357.21 357.58 358.04 358.58 359.2 359.88 360.63 - 361.45 362.33 363.27 364.28 365.35 366.47 367.66 368.91 370.23 371.6 373.03 374.51 376.06 377.67 379.34 381.06 - 382.85 384.69 386.6 388.56 390.58 392.66 394.79 396.99 / - 18 16 2 1 358.09 357.05 356.7 356.66 356.81 357.07 357.45 357.91 358.44 359.06 359.74 360.49 - 361.3 362.18 363.13 364.13 365.2 366.33 367.52 368.77 370.08 371.45 372.88 374.37 375.92 377.53 379.19 380.92 - 382.71 384.55 386.46 388.42 390.44 392.52 394.66 396.85 / - 18 16 3 1 357.91 356.84 356.48 356.43 356.56 356.83 357.2 357.65 358.19 358.8 359.48 360.23 - 361.04 361.92 362.86 363.87 364.94 366.06 367.25 368.5 369.81 371.19 372.62 374.11 375.66 377.27 378.94 380.66 - 382.45 384.3 386.2 388.17 390.19 392.27 394.42 396.62 / - 18 16 4 1 357.56 356.43 356.05 355.98 356.11 356.36 356.72 357.17 357.71 358.31 358.99 359.74 - 360.55 361.43 362.37 363.38 364.44 365.57 366.76 368.01 369.33 370.7 372.13 373.63 375.18 376.79 378.46 380.2 - 381.99 383.84 385.75 387.72 389.75 391.84 393.98 396.19 / - 18 16 5 1 356.88 355.65 355.21 355.11 355.22 355.46 355.81 356.25 356.78 357.38 358.06 358.8 - 359.62 360.49 361.44 362.44 363.51 364.64 365.84 367.09 368.41 369.79 371.23 372.73 374.29 375.91 377.59 379.33 - 381.13 382.99 384.92 386.9 388.94 391.04 393.2 395.42 / - 18 16 6 1 355.51 354.09 353.56 353.41 353.47 353.69 354.02 354.45 354.97 355.57 356.24 356.99 - 357.8 358.68 359.63 360.64 361.72 362.86 364.07 365.33 366.66 368.06 369.51 371.03 372.61 374.25 375.95 377.71 - 379.53 381.42 383.36 385.37 387.44 389.56 391.75 394 / - 18 16 7 1 352.54 350.53 349.68 349.32 349.25 349.38 349.65 350.03 350.52 351.1 351.77 352.51 - 353.33 354.23 355.2 356.24 357.35 358.52 359.77 361.08 362.46 363.9 365.41 366.99 368.63 370.33 372.1 373.93 - 375.83 377.79 379.82 381.91 384.06 386.27 388.55 390.89 / - 18 16 8 1 347.04 343.65 341.75 341.01 340.69 340.65 340.81 341.14 341.6 342.2 342.89 343.68 - 344.56 345.53 346.58 347.71 348.93 350.22 351.59 353.04 354.56 356.15 357.82 359.5 361.31 363.19 365.15 367.17 - 369.27 371.43 373.67 375.97 378.34 380.78 383.29 385.87 / - 18 16 9 1 338.2 327.62 326.3 325.8 325.7 325.86 326.21 326.73 327.39 328.17 329.07 330.05 - 331.15 332.35 333.65 335.04 336.52 338.09 339.7 341.44 343.27 345.18 347.17 349.21 351.36 353.6 355.92 358.27 - 360.75 363.3 365.93 368.6 371.38 374.24 377.17 380.14 / - 18 16 10 1 323.95 305.24 304.31 304.05 304.18 304.58 305.19 305.98 306.91 307.99 309.2 310.54 - 311.99 313.57 315.25 317.04 318.95 320.96 323.07 325.29 327.6 330.02 332.54 335.15 337.86 340.67 343.57 346.57 - 349.66 352.83 356.1 359.46 362.91 366.45 370.07 373.78 / - 18 16 11 1 286.83 279.32 278.31 278.16 278.49 279.17 280.12 281.29 282.67 284.23 285.96 287.87 - 289.93 292.14 294.51 297.02 299.68 302.47 305.4 308.46 311.65 314.97 318.41 321.98 325.67 329.47 333.39 337.43 - 341.57 345.83 350.2 354.67 359.25 363.93 368.71 373.6 / - 18 16 12 1 254.52 251.45 250.75 251.13 252.07 253.4 255.04 256.94 259.13 261.56 264.22 267.09 - 270.17 273.45 277.02 280.69 284.55 288.7 292.92 297.3 302 306.71 311.59 316.79 321.97 327.51 332.98 338.58 - 344.59 350.47 356.67 362.81 369.07 375.68 382.34 388.97 / - 18 16 13 1 226.57 226.12 226.88 228.32 230.26 232.64 235.42 238.63 242.2 246.09 250.27 254.73 - 259.45 264.41 269.61 275.04 280.68 286.54 292.6 298.86 305.31 311.96 318.79 325.8 332.99 340.35 347.88 355.58 - 364.23 373.12 382.14 391.19 400.28 409.63 419.05 428.69 / - 18 16 14 1 208.49 210.16 213.27 216.98 221.22 226.13 231.4 236.98 242.89 249.15 255.74 262.67 - 269.93 277.51 285.41 293.62 302.13 310.94 320.05 329.45 339.13 349.09 359.32 369.82 380.58 391.61 402.89 414.43 - 426.21 438.25 450.52 463.04 475.8 488.8 502.03 515.5 / - 18 16 15 1 202.4 207.65 212.8 218.59 225.07 232.26 240.14 248.71 257.94 267.82 278.31 289.37 - 300.97 313.1 325.75 338.9 352.56 366.72 381.36 396.48 412.08 428.15 444.67 461.63 479.03 496.88 515.16 533.89 - 553.05 572.64 592.67 613.12 633.99 655.27 676.96 699.11 / - 18 16 16 1 199.33 207.35 216.36 226.5 237.78 250.41 264.33 279.47 295.76 313.17 331.64 351.14 - 371.66 393.15 415.61 438.98 463.13 488.09 513.85 540.39 567.71 595.82 624.71 654.35 684.76 716.02 748.11 781.06 - 814.83 849.45 884.9 921.19 958.31 996.25 1035 1074.53 / - 18 16 17 1 199.18 212.63 229.42 249 271.17 295.71 322.48 351.51 382.72 415.99 451.22 488.31 - 527.26 568.04 610.61 654.93 700.82 748.42 797.74 848.8 901.56 956.04 1012.19 1070 1129.34 1190.01 1251.66 1311.5 - 1370.64 1429.44 1491.96 1554.81 1618.88 1683.85 1749.76 1818.63 / - 18 16 18 1 205.03 232.61 267.28 308 353.89 404.39 459.17 517.93 580.62 647.37 718.16 793.22 - 872.51 955.87 1042.98 1133.67 1227.36 1320.43 1412.92 1509.33 1607.58 1708.99 1814.41 1922.05 2031.9 2144.19 2258.54 2377.47 - 2498.7 2619.05 2744.73 2877.83 3008.95 3142.18 3277.93 3419.97 / - 18 16 19 1 219.04 275.85 348.48 433.06 528.8 632.42 745.76 870.01 1003.57 1146.31 1296.9 1447.33 - 1601.25 1769.67 1939.74 2125.88 2309.16 2499.8 2696.17 2913.86 3126.95 3342.64 3567.53 3800.15 4041.48 4285.71 4538.07 4795.18 - 5075.99 5334.84 5613.88 5903.7 6195.8 6494.01 6790.21 7100.52 / - 18 16 20 1 265.86 371.43 492.54 631 831.61 1055.96 1304.44 1562.32 1840.46 2134.29 2457.34 2793.65 - 3157.91 3536.43 3909.58 4329.91 4740.12 5203.44 5649.11 6156.51 6634.51 7133.52 7641.52 8172.32 8783.18 9349.33 9928.78 10521.28 - 11121.13 11767.58 12428.51 13101.99 13829.45 14543.62 15278.51 16014.84 / - 18 17 1 1 359.75 358.82 358.52 358.51 358.66 358.94 359.31 359.78 360.32 360.93 361.61 362.36 - 363.18 364.06 365 366.01 367.07 368.2 369.39 370.64 371.95 373.32 374.75 376.25 377.8 379.41 381.07 382.8 - 384.59 386.44 388.35 390.31 392.34 394.42 396.56 398.77 / - 18 17 2 1 359.65 358.7 358.39 358.37 358.52 358.8 359.17 359.63 360.17 360.78 361.46 362.21 - 363.03 363.91 364.85 365.85 366.92 368.05 369.24 370.49 371.8 373.17 374.6 376.09 377.64 379.25 380.92 382.65 - 384.44 386.29 388.2 390.16 392.19 394.27 396.42 398.62 / - 18 17 3 1 359.46 358.48 358.15 358.12 358.27 358.53 358.9 359.36 359.9 360.5 361.18 361.93 - 362.74 363.62 364.56 365.57 366.63 367.76 368.95 370.2 371.51 372.88 374.32 375.81 377.36 378.97 380.64 382.38 - 384.17 386.02 387.93 389.9 391.93 394.01 396.16 398.37 / - 18 17 4 1 359.1 358.05 357.69 357.64 357.77 358.03 358.39 358.84 359.37 359.98 360.65 361.4 - 362.21 363.09 364.03 365.03 366.1 367.23 368.42 369.67 370.98 372.36 373.79 375.29 376.84 378.46 380.14 381.87 - 383.67 385.52 387.44 389.41 391.45 393.54 395.7 397.91 / - 18 17 5 1 358.37 357.21 356.79 356.7 356.8 357.04 357.39 357.83 358.36 358.96 359.63 360.38 - 361.19 362.06 363.01 364.01 365.08 366.22 367.41 368.67 369.99 371.37 372.81 374.31 375.88 377.5 379.19 380.93 - 382.74 384.61 386.54 388.53 390.57 392.68 394.85 397.08 / - 18 17 6 1 356.85 355.39 354.82 354.63 354.67 354.86 355.18 355.6 356.11 356.7 357.37 358.11 - 358.92 359.8 360.75 361.77 362.85 364 365.21 366.48 367.82 369.22 370.68 372.21 373.8 375.45 377.17 378.95 - 380.79 382.69 384.65 386.67 388.76 390.91 393.12 395.39 / - 18 17 7 1 353.62 351.37 350.35 349.89 349.74 349.81 350.03 350.39 350.86 351.43 352.09 352.83 - 353.65 354.56 355.54 356.59 357.71 358.91 360.17 361.51 362.91 364.38 365.92 367.53 369.2 370.94 372.75 374.62 - 376.56 378.56 380.63 382.76 384.96 387.22 389.55 391.94 / - 18 17 8 1 348.12 344.24 341.84 341.07 340.74 340.69 340.85 341.18 341.65 342.25 342.95 343.76 - 344.66 345.66 346.74 347.91 349.16 350.5 351.91 353.4 354.97 356.62 358.34 360.14 362.01 363.95 365.96 368.05 - 370.21 372.44 374.74 377.11 379.55 382.06 384.64 387.29 / - 18 17 9 1 339.13 326.69 325.76 325.42 325.43 325.68 326.11 326.7 327.42 328.25 329.19 330.24 - 331.39 332.65 334 335.39 336.92 338.55 340.26 342.05 343.88 345.85 347.9 350.04 352.21 354.51 356.89 359.35 - 361.84 364.47 367.17 369.9 372.76 375.7 378.71 381.75 / - 18 17 10 1 324.65 305.27 304.3 304.03 304.16 304.57 305.19 305.98 306.94 308.03 309.27 310.62 - 312.1 313.7 315.42 317.25 319.18 321.23 323.38 325.64 328 330.46 333.02 335.68 338.45 341.31 344.26 347.31 - 350.45 353.69 357.02 360.44 363.95 367.55 371.24 375.02 / - 18 17 11 1 285.63 279.45 278.43 278.29 278.64 279.33 280.3 281.49 282.89 284.48 286.24 288.18 - 290.27 292.53 294.93 297.49 300.19 303.03 306 309.12 312.36 315.74 319.24 322.86 326.61 330.48 334.47 338.57 - 342.79 347.11 351.55 356.1 360.75 365.51 370.37 375.34 / - 18 17 12 1 254.72 251.58 250.93 251.31 252.27 253.62 255.28 257.24 259.41 261.86 264.54 267.43 - 270.6 273.92 277.43 281.14 285.13 289.21 293.47 298.03 302.63 307.54 312.47 317.54 322.97 328.34 334.09 339.76 - 345.56 351.78 357.85 364.38 370.71 377.17 383.99 390.7 / - 18 17 13 1 226.73 226.31 227.1 228.56 230.53 232.94 235.81 239.1 242.73 246.68 250.91 255.41 - 260.17 265.17 270.4 275.85 281.53 287.41 293.5 299.79 306.28 312.96 319.82 326.86 334.09 341.49 349.06 356.8 - 364.71 372.78 381.31 390.96 400.18 409.79 419.48 429.25 / - 18 17 14 1 208.71 210.72 213.97 217.77 222.2 227.15 232.4 237.96 243.86 250.08 256.65 263.54 - 270.77 278.33 286.21 294.41 302.93 311.74 320.85 330.24 339.9 349.85 360.07 370.56 381.32 392.33 403.61 415.14 - 426.93 438.97 451.25 463.79 476.56 489.57 502.82 516.31 / - 18 17 15 1 203.24 208.42 213.58 219.36 225.83 232.98 240.83 249.35 258.54 268.38 278.81 289.8 - 301.32 313.38 325.94 339.01 352.57 366.61 381.14 396.14 411.6 427.53 443.92 460.76 478.05 495.79 513.97 532.59 - 551.64 571.11 590.99 611.29 632 653.11 674.62 696.57 / - 18 17 16 1 200.07 208.11 217.08 227.1 238.32 250.86 264.68 279.71 295.89 313.18 331.54 350.91 - 371.27 392.6 414.87 437.98 461.91 486.65 512.19 538.55 565.68 593.58 622.24 651.65 681.81 712.79 744.58 777.19 - 810.62 844.85 879.9 915.76 952.44 989.91 1028.19 1067.25 / - 18 17 17 1 199.74 213.14 229.84 249.25 271.21 295.52 322.13 350.97 381.93 414.92 449.85 486.68 - 525.37 565.87 608.12 652.1 697.7 744.94 793.84 844.41 896.65 950.56 1006.12 1063.3 1122.05 1182.19 1243.39 1303.31 - 1362.89 1423.72 1485.33 1548.72 1613.36 1679.41 1747.42 1815.02 / - 18 17 18 1 205.41 232.78 267.14 307.55 353.09 403.19 457.45 515.88 578.23 644.47 714.59 789.02 - 867.6 950.32 1036.84 1126.89 1220 1314.1 1407.33 1503.39 1603.46 1706.44 1811.26 1919.94 2030.99 2144.62 2260.47 2380.7 - 2503.37 2626.18 2753.17 2882.99 3020.73 3156.09 3297.16 3437.43 / - 18 17 19 1 219.37 276.43 348.9 433.12 527.42 631.7 744.52 866.72 998.16 1141.19 1291.18 1437.96 - 1598.64 1767.97 1939.74 2117.56 2312.91 2505.97 2705.04 2912.67 3140.73 3359.94 3588.01 3822.46 4066.26 4316.04 4572.92 4834.22 - 5101.34 5382.8 5665.97 5950.06 6257.16 6559.91 6862.17 7177.22 / - 18 17 20 1 266.67 373.57 496.36 634.46 826.8 1050.5 1295.15 1549.8 1826.7 2128.45 2447.21 2786.79 - 3149.73 3528.22 3929.1 4326.58 4771.1 5204.83 5696.46 6164.98 6653.56 7208.14 7726.22 8266.33 8821.07 9389.21 10047.03 10647.95 - 11259.69 11901.68 12571.84 13263.55 13976.4 14700.92 15445.02 16234.04 / - 18 18 1 1 361.17 360.38 360.14 360.16 360.33 360.62 361 361.47 362.01 362.63 363.31 364.06 - 364.88 365.76 366.7 367.7 368.77 369.9 371.09 372.34 373.65 375.02 376.45 377.94 379.5 381.11 382.78 384.51 - 386.3 388.15 390.06 392.03 394.06 396.15 398.3 400.51 / - 18 18 2 1 361.07 360.25 360 360.01 360.18 360.47 360.85 361.31 361.85 362.46 363.15 363.9 - 364.71 365.59 366.53 367.53 368.6 369.73 370.92 372.17 373.48 374.85 376.28 377.78 379.33 380.94 382.61 384.35 - 386.14 387.99 389.9 391.87 393.9 396 398.15 400.36 / - 18 18 3 1 360.87 360.01 359.74 359.74 359.9 360.17 360.55 361.01 361.55 362.16 362.84 363.58 - 364.4 365.27 366.21 367.22 368.28 369.41 370.6 371.85 373.17 374.54 375.97 377.47 379.02 380.63 382.31 384.04 - 385.84 387.69 389.61 391.58 393.62 395.71 397.87 400.08 / - 18 18 4 1 360.47 359.54 359.23 359.2 359.34 359.6 359.97 360.42 360.96 361.56 362.24 362.99 - 363.8 364.67 365.61 366.62 367.69 368.82 370.01 371.26 372.58 373.95 375.39 376.89 378.45 380.07 381.75 383.49 - 385.29 387.15 389.07 391.05 393.09 395.2 397.36 399.58 / - 18 18 5 1 359.66 358.56 358.15 358.07 358.17 358.41 358.76 359.19 359.72 360.32 360.99 361.73 - 362.54 363.42 364.36 365.37 366.44 367.58 368.78 370.04 371.36 372.75 374.2 375.71 377.28 378.91 380.61 382.36 - 384.18 386.06 388 390 392.06 394.18 396.36 398.61 / - 18 18 6 1 357.82 356.25 355.58 355.32 355.31 355.47 355.76 356.16 356.65 357.24 357.9 358.64 - 359.45 360.34 361.3 362.32 363.41 364.57 365.8 367.09 368.45 369.87 371.36 372.91 374.52 376.2 377.94 379.75 - 381.62 383.55 385.54 387.6 389.72 391.9 394.15 396.46 / - 18 18 7 1 354.46 351.94 350.72 350.12 349.88 349.89 350.07 350.39 350.84 351.4 352.05 352.8 - 353.63 354.55 355.55 356.62 357.77 359 360.3 361.67 363.11 364.62 366.21 367.86 369.58 371.37 373.23 375.16 - 377.15 379.21 381.34 383.53 385.79 388.11 390.51 392.96 / - 18 18 8 1 348.9 344.12 341.68 340.91 340.61 340.59 340.79 341.15 341.65 342.28 343.02 343.86 - 344.81 345.84 346.97 348.18 349.48 350.86 352.33 353.87 355.47 357.17 358.95 360.81 362.75 364.76 366.84 368.98 - 371.22 373.52 375.91 378.36 380.87 383.46 386.13 388.87 / - 18 18 9 1 339.77 325.96 325.23 325.03 325.14 325.47 325.97 326.62 327.39 328.28 329.28 330.38 - 331.59 332.89 334.28 335.77 337.35 339.02 340.78 342.62 344.56 346.57 348.68 350.87 353.13 355.48 357.91 360.42 - 363.02 365.69 368.45 371.27 374.18 377.19 380.26 383.41 / - 18 18 10 1 325.09 305.3 304.3 304.02 304.15 304.56 305.18 305.99 306.96 308.08 309.33 310.71 - 312.22 313.85 315.59 317.45 319.43 321.51 323.7 326 328.4 330.91 333.52 336.23 339.05 341.96 344.97 348.07 - 351.28 354.57 357.97 361.45 365.03 368.69 372.45 376.3 / - 18 18 11 1 284.76 279.58 278.56 278.42 278.78 279.49 280.47 281.69 283.11 284.73 286.52 288.49 - 290.62 292.91 295.36 297.96 300.7 303.59 306.62 309.79 313.09 316.52 320.08 323.77 327.58 331.51 335.56 339.73 - 344.02 348.42 352.94 357.56 362.29 367.13 372.07 377.12 / - 18 18 12 1 254.92 251.78 251.1 251.51 252.49 253.84 255.52 257.49 259.73 262.2 264.91 267.83 - 270.97 274.31 277.85 281.68 285.61 289.72 294.13 298.6 303.39 308.2 313.16 318.49 323.76 329.4 334.98 340.95 - 346.82 352.82 359.25 365.52 372.25 378.79 385.44 392.61 / - 18 18 13 1 226.9 226.51 227.33 228.81 230.8 233.34 236.34 239.72 243.43 247.44 251.72 256.25 - 261.04 266.07 271.32 276.79 282.49 288.39 294.49 300.8 307.3 314 320.88 327.94 335.19 342.61 350.21 357.98 - 365.91 374.01 382.28 390.71 399.29 408.39 418.39 428.6 / - 18 18 14 1 209.09 211.55 214.99 218.96 223.6 228.52 233.74 239.26 245.11 251.28 257.79 264.62 - 271.77 279.25 287.05 295.17 303.59 312.32 321.36 330.69 340.31 350.23 360.44 370.93 381.67 392.67 403.92 415.42 - 427.17 439.18 451.43 463.93 476.67 489.65 502.88 516.35 / - 18 18 15 1 204.48 209.48 214.62 220.38 226.8 233.91 241.69 250.15 259.3 269.05 279.36 290.21 - 301.59 313.48 325.88 338.77 352.16 366.03 380.38 395.19 410.47 426.21 442.4 459.03 476.09 493.59 511.51 529.86 - 548.64 567.84 587.47 607.51 627.96 648.82 670.1 691.79 / - 18 18 16 1 201.2 209.22 218.1 227.89 238.99 251.41 265.08 279.94 295.94 313.04 331.18 350.33 - 370.47 391.48 413.36 436.08 459.63 483.97 509.12 535.06 561.79 589.31 617.61 646.68 676.5 707.11 738.51 770.68 - 803.64 837.37 871.88 907.17 943.24 980.08 1017.69 1056.06 / - 18 18 17 1 200.58 213.96 230.45 249.58 271.22 295.22 321.52 350.02 380.63 413.23 447.77 484.15 - 522.35 562.33 604.07 647.55 692.71 739.45 787.78 837.7 889.23 942.34 997.04 1053.29 1111.08 1170.31 1230.77 1291.53 - 1351.54 1412.69 1474.66 1538.82 1603.87 1670.35 1738.26 1808.24 / - 18 18 18 1 206.01 233.02 266.92 306.74 351.69 401.19 454.71 512.41 574.03 639.69 709.06 782.85 - 860.59 942.25 1027.77 1116.8 1208.99 1302.47 1396.73 1494.41 1595.04 1698.66 1806 1914.64 2027.05 2143.51 2261.45 2381.39 - 2505.67 2632.55 2762.04 2894.04 3028.58 3171.18 3311.46 3454.21 / - 18 18 19 1 220.09 277.38 349.4 433.14 526.64 629.84 741.63 861.55 992.61 1133.66 1279.24 1430.62 - 1591.9 1756.86 1935.2 2115.64 2313.03 2509.5 2712.62 2923.73 3154.16 3379.65 3609.45 3848 4094.2 4350.3 4611.09 4877.18 - 5158.06 5436.11 5724.14 6019.14 6315.56 6634.16 6943.63 7264.38 / - 18 18 20 1 267.94 376.74 501.75 642.41 821.35 1038.92 1283.23 1539.54 1814.59 2115.34 2432.59 2773.49 - 3137.55 3513.79 3928.37 4325.32 4772.21 5242.35 5700.2 6215.48 6712.85 7222.01 7806.49 8358.36 8924.99 9503.35 10092.41 10701.82 - 11414.64 12071.01 12748.14 13446.02 14164.52 14912.3 15681.51 16470.89 / - 18 19 1 1 362.45 361.82 361.66 361.73 361.93 362.23 362.63 363.1 363.65 364.27 364.96 365.71 - 366.53 367.4 368.35 369.35 370.42 371.55 372.74 373.99 375.3 376.67 378.11 379.6 381.15 382.77 384.44 386.18 - 387.97 389.83 391.74 393.72 395.75 397.85 400 402.21 / - 18 19 2 1 362.33 361.68 361.5 361.55 361.75 362.05 362.44 362.91 363.46 364.08 364.76 365.51 - 366.33 367.21 368.15 369.15 370.22 371.35 372.54 373.79 375.1 376.48 377.91 379.41 380.96 382.58 384.25 385.99 - 387.78 389.64 391.56 393.53 395.57 397.67 399.82 402.04 / - 18 19 3 1 362.09 361.39 361.19 361.22 361.4 361.69 362.08 362.55 363.09 363.7 364.38 365.13 - 365.95 366.83 367.77 368.77 369.84 370.97 372.16 373.42 374.73 376.11 377.54 379.04 380.6 382.22 383.9 385.63 - 387.44 389.3 391.22 393.2 395.24 397.34 399.5 401.73 / - 18 19 4 1 361.57 360.74 360.46 360.44 360.59 360.86 361.23 361.69 362.22 362.83 363.5 364.25 - 365.07 365.94 366.89 367.9 368.97 370.1 371.3 372.56 373.88 375.26 376.71 378.21 379.78 381.41 383.1 384.85 - 386.66 388.54 390.47 392.47 394.52 396.64 398.81 401.05 / - 18 19 5 1 360.43 359.26 358.8 358.66 358.73 358.94 359.27 359.69 360.21 360.8 361.47 362.22 - 363.03 363.91 364.87 365.88 366.97 368.12 369.33 370.61 371.96 373.36 374.83 376.37 377.97 379.63 381.35 383.13 - 384.98 386.89 388.86 390.9 392.99 395.15 397.37 399.65 / - 18 19 6 1 358.39 356.62 355.8 355.44 355.36 355.46 355.72 356.09 356.57 357.14 357.81 358.55 - 359.37 360.27 361.25 362.3 363.41 364.6 365.86 367.19 368.58 370.05 371.58 373.17 374.84 376.56 378.36 380.22 - 382.15 384.13 386.19 388.31 390.49 392.74 395.05 397.43 / - 18 19 7 1 354.99 352.23 350.86 350.15 349.84 349.79 349.94 350.25 350.69 351.24 351.9 352.66 - 353.51 354.45 355.48 356.59 357.77 359.04 360.38 361.8 363.3 364.87 366.51 368.23 370.02 371.88 373.81 375.81 - 377.88 380.03 382.24 384.52 386.87 389.29 391.78 394.34 / - 18 19 8 1 349.35 343.73 341.13 340.53 340.32 340.38 340.63 341.05 341.6 342.28 343.07 343.96 - 344.95 346.03 347.21 348.47 349.82 351.26 352.78 354.38 356.01 357.78 359.62 361.54 363.54 365.61 367.77 369.95 - 372.26 374.64 377.1 379.63 382.24 384.92 387.64 390.47 / - 18 19 9 1 340.1 325.89 325.1 324.87 324.97 325.3 325.8 326.45 327.23 328.13 329.15 330.27 - 331.49 332.81 334.23 335.75 337.35 339.05 340.84 342.72 344.69 346.75 348.9 351.13 353.44 355.84 358.33 360.9 - 363.55 366.29 369.11 372.01 374.98 378.05 381.19 384.41 / - 18 19 10 1 325.25 305.33 304.3 304.01 304.13 304.55 305.18 306.01 306.99 308.13 309.4 310.81 - 312.34 314 315.78 317.67 319.68 321.8 324.03 326.37 328.82 331.38 334.04 336.8 339.66 342.63 345.7 348.86 - 352.12 355.48 358.94 362.49 366.13 369.87 373.7 377.61 / - 18 19 11 1 283.8 279.72 278.69 278.55 278.92 279.65 280.65 281.89 283.33 284.98 286.8 288.8 - 290.97 293.3 295.79 298.44 301.23 304.16 307.24 310.46 313.82 317.31 320.93 324.68 328.56 332.56 336.68 340.92 - 345.28 349.76 354.35 359.05 363.86 368.78 373.8 378.94 / - 18 19 12 1 255.11 251.97 251.31 251.72 252.71 254.08 255.78 257.75 260 262.5 265.22 268.17 - 271.33 274.7 278.35 282.12 286.08 290.34 294.67 299.32 304 308.84 314.03 319.21 324.75 330.23 336.12 341.9 - 348.08 354.15 360.65 367 373.47 380.41 387.14 394.38 / - 18 19 13 1 227.07 226.71 227.55 229.07 231.32 234.09 237.26 240.76 244.55 248.62 252.94 257.5 - 262.3 267.33 272.58 278.05 283.73 289.61 295.7 301.99 308.48 315.16 322.02 329.08 336.31 343.72 351.31 359.07 - 367 375.1 383.37 391.8 400.4 409.15 418.06 427.13 / - 18 19 14 1 209.96 213.02 216.72 221.12 225.75 230.61 235.75 241.18 246.93 253 259.39 266.1 - 273.12 280.47 288.13 296.09 304.36 312.93 321.79 330.95 340.39 350.12 360.14 370.43 381 391.84 402.95 414.33 - 425.98 437.88 450.05 462.48 475.17 488.11 501.29 514.71 / - 18 19 15 1 206.39 211.08 216.19 221.87 228.21 235.22 242.99 251.43 260.44 269.99 280.09 290.71 - 301.85 313.49 325.63 338.25 351.35 364.93 378.97 393.46 408.4 423.79 439.61 455.87 472.56 489.67 507.2 525.16 - 543.53 562.32 581.52 601.13 621.15 641.57 662.4 683.64 / - 18 19 16 1 203.08 211.01 219.47 229.05 239.97 252.16 265.59 280.2 295.92 312.72 330.47 349.16 - 368.76 389.22 410.53 432.66 455.61 479.37 503.93 529.29 555.43 582.34 610.03 638.49 667.71 697.68 728.42 759.91 - 792.15 825.15 858.9 893.4 928.65 964.64 1001.38 1038.87 / - 18 19 17 1 202 215.34 231.44 250.12 271.27 294.81 320.64 348.62 378.64 410.63 444.5 480.19 - 517.68 556.92 597.9 640.56 684.76 730.5 777.76 826.53 876.84 928.69 982.09 1037.03 1093.51 1151.48 1210.87 1271.61 - 1332 1393.61 1456.25 1521 1586.65 1653.94 1722.86 1792.53 / - 18 19 18 1 207.05 233.44 266.55 305.56 349.46 397.83 450.38 507.18 568.11 633.01 701.01 773.69 - 850.12 930.27 1014.16 1101.85 1192.97 1286.68 1381.47 1479.9 1581.37 1686.43 1794.32 1905.52 2019.55 2136.36 2256.16 2379.46 - 2504.46 2633.32 2764.94 2899.28 3036.35 3176.22 3318.73 3469.38 / - 18 19 19 1 221.71 279.2 350.87 433.31 525.06 626.18 736.25 854.64 983.26 1119.47 1266.06 1418.09 - 1579.93 1746.01 1925.94 2108.68 2299.6 2504.96 2712.06 2925.05 3144.96 3387.8 3624.64 3868.71 4118.87 4379.25 4646.57 4921.37 - 5201.85 5495.49 5790.36 6091.48 6396.08 6709.96 7041.7 7366 / - 18 19 20 1 270.11 381.74 509.93 653.55 813.14 1025.87 1264.29 1517.9 1793.18 2098.95 2414.14 2751.67 - 3115.15 3498.71 3904.89 4333.92 4782.21 5222.97 5716.69 6195.43 6733.93 7251.69 7835.52 8388.06 8960.12 9547.27 10221.46 10846.98 - 11493.75 12161.22 12849.55 13552.89 14400.35 15159.22 15939.11 16739.84 / - 18 20 1 1 363.33 362.82 362.71 362.8 363.01 363.33 363.73 364.21 364.77 365.39 366.08 366.84 - 367.66 368.54 369.49 370.5 371.58 372.71 373.91 375.17 376.49 377.88 379.32 380.83 382.39 384.02 385.71 387.46 - 389.27 391.14 393.08 395.07 397.12 399.24 401.41 403.65 / - 18 20 2 1 363.06 362.47 362.31 362.37 362.57 362.87 363.26 363.73 364.28 364.9 365.59 366.34 - 367.17 368.05 369 370.02 371.1 372.24 373.44 374.71 376.04 377.43 378.88 380.39 381.97 383.6 385.3 387.06 - 388.88 390.77 392.71 394.71 396.78 398.9 401.09 403.34 / - 18 20 3 1 362.62 361.89 361.65 361.66 361.82 362.1 362.47 362.93 363.47 364.08 364.77 365.53 - 366.35 367.24 368.19 369.21 370.3 371.45 372.66 373.94 375.28 376.68 378.14 379.67 381.26 382.91 384.63 386.4 - 388.24 390.14 392.1 394.12 396.21 398.36 400.56 402.83 / - 18 20 4 1 361.88 360.92 360.56 360.47 360.58 360.81 361.16 361.6 362.13 362.73 363.41 364.17 - 364.99 365.89 366.85 367.88 368.98 370.14 371.37 372.66 374.02 375.44 376.93 378.48 380.09 381.77 383.51 385.31 - 387.18 389.11 391.1 393.16 395.28 397.46 399.7 402.01 / - 18 20 5 1 360.64 359.31 358.73 358.51 358.52 358.69 358.99 359.4 359.9 360.5 361.17 361.93 - 362.76 363.67 364.64 365.69 366.81 367.99 369.25 370.57 371.96 373.42 374.94 376.53 378.19 379.91 381.7 383.55 - 385.46 387.45 389.49 391.61 393.78 396.02 398.33 400.7 / - 18 20 6 1 358.57 356.63 355.7 355.26 355.12 355.19 355.43 355.79 356.27 356.84 357.52 358.28 - 359.12 360.05 361.05 362.13 363.29 364.52 365.82 367.2 368.65 370.17 371.75 373.41 375.14 376.94 378.81 380.74 - 382.75 384.82 386.96 389.16 391.44 393.78 396.19 398.67 / - 18 20 7 1 355.13 352.21 350.54 349.85 349.55 349.52 349.68 350.01 350.47 351.06 351.75 352.54 - 353.43 354.41 355.47 356.62 357.86 359.17 360.57 362.05 363.6 365.23 366.94 368.72 370.58 372.51 374.51 376.59 - 378.75 380.97 383.27 385.64 388.09 390.6 393.19 395.84 / - 18 20 8 1 349.42 343.06 340.24 339.92 339.91 340.12 340.51 341.03 341.68 342.44 343.31 344.27 - 345.33 346.48 347.72 348.99 350.39 351.89 353.47 355.13 356.87 358.63 360.53 362.51 364.57 366.71 368.86 371.16 - 373.53 375.98 378.45 381.05 383.73 386.49 389.32 392.17 / - 18 20 9 1 340.07 325.82 324.98 324.72 324.8 325.12 325.63 326.28 327.07 327.99 329.02 330.15 - 331.4 332.74 334.19 335.73 337.37 339.1 340.92 342.84 344.84 346.94 349.13 351.4 353.76 356.21 358.74 361.36 - 364.07 366.85 369.73 372.68 375.72 378.84 382.05 385.33 / - 18 20 10 1 325.09 305.36 304.3 303.99 304.12 304.54 305.18 306.02 307.02 308.18 309.47 310.9 - 312.47 314.15 315.96 317.89 319.94 322.1 324.37 326.75 329.25 331.85 334.56 337.37 340.29 343.31 346.44 349.66 - 352.98 356.41 359.92 363.54 367.25 371.06 374.96 378.95 / - 18 20 11 1 283.1 279.85 278.81 278.68 279.07 279.8 280.82 282.08 283.56 285.23 287.08 289.12 - 291.33 293.7 296.23 298.91 301.75 304.74 307.87 311.14 314.56 318.1 321.79 325.6 329.54 333.61 337.8 342.12 - 346.55 351.1 355.77 360.55 365.44 370.44 375.56 380.77 / - 18 20 12 1 255.31 252.32 251.56 251.97 252.96 254.34 256.07 258.06 260.31 262.83 265.58 268.56 - 271.76 275.17 278.8 282.72 286.74 290.95 295.46 300.03 304.92 309.83 315.09 320.34 325.75 331.53 337.23 343.33 - 349.3 355.71 361.95 368.62 375.12 382.08 388.82 395.68 / - 18 20 13 1 227.23 226.91 228.35 230.75 233.6 236.76 240.18 243.83 247.7 251.79 256.09 260.61 - 265.33 270.27 275.41 280.75 286.3 292.05 297.99 304.14 310.47 317 323.72 330.63 337.72 345 352.45 360.09 - 367.9 375.88 384.04 392.37 400.86 409.52 418.33 427.29 / - 18 20 14 1 212.78 217.06 221.53 225.9 230.37 235.05 239.97 245.17 250.66 256.46 262.57 268.99 - 275.72 282.75 290.1 297.74 305.68 313.91 322.44 331.25 340.35 349.74 359.39 369.33 379.53 390.01 400.74 411.74 - 423.01 434.53 446.3 458.33 470.61 483.14 495.92 508.94 / - 18 20 15 1 209.74 214.44 219.43 225.22 231.73 238.72 246.23 254.27 262.84 271.95 281.59 291.75 - 302.41 313.56 325.21 337.34 349.94 363.01 376.53 390.5 404.91 419.76 435.04 450.75 466.88 483.42 500.38 517.75 - 535.52 553.7 572.29 591.27 610.64 630.42 650.58 671.14 / - 18 20 16 1 207.29 214.3 222.27 231.48 241.96 253.68 266.61 280.69 295.79 311.86 328.86 346.78 - 365.58 385.24 405.74 427.07 449.21 472.15 495.88 520.39 545.67 571.71 598.5 626.05 654.35 683.39 713.16 743.67 - 774.91 806.87 839.56 872.97 907.09 941.93 977.48 1013.74 / - 18 20 17 1 205.67 218.55 233.69 251.3 271.53 294.21 319.17 346.27 375.4 406.46 439.39 473.97 - 510.16 547.94 587.3 628.25 670.78 714.86 760.51 807.72 856.46 906.75 958.55 1011.88 1066.71 1123.04 1180.87 1240.17 - 1300.95 1363.19 1426.89 1492.05 1558.64 1626.66 1696.1 1766.96 / - 18 20 18 1 209.51 234.67 266.1 303.38 346.27 393.52 445.16 500.9 560.58 622.56 689.77 760.71 - 835.33 913.33 995.17 1080.59 1169.55 1261.71 1356.97 1456.43 1559.31 1665.58 1775.02 1887.59 2003.32 2122.16 2244.11 2369.05 - 2497 2628.01 2762.06 2899.11 3039.14 3182.13 3331 3480.24 / - 18 20 19 1 225.24 282.64 354.11 434.83 524.29 622.58 729.64 845.87 971.19 1106.45 1249.03 1401.83 - 1563.79 1732.18 1912.09 2097.25 2290.2 2496.8 2706.05 2922.82 3147.02 3389.61 3630.06 3878.21 4134.02 4397.42 4669.61 4950.07 - 5237.19 5530.41 5837.97 6146.19 6461.54 6784.01 7123.05 7459.94 / - 18 20 20 1 274.34 390.52 523.41 670.68 831.91 1006.78 1194.99 1396.29 1657.82 1940.77 2255.28 2577.81 - 2926.89 3299.07 3680.78 4099.08 4545.96 4990.45 5489.25 5978.73 6491.15 7026.45 7615.38 8184.41 8784.08 9397.08 10031.65 10645.21 - 11361.29 12022.42 12799.48 13509.72 14241.17 15109.5 15891.1 16693.96 / - 19 1 1 1 353.52 353.41 353.5 353.72 354.03 354.43 354.89 355.43 356.03 356.68 357.4 358.18 - 359.02 359.91 360.86 361.86 362.92 364.04 365.2 366.43 367.71 369.04 370.42 371.86 373.35 374.89 376.49 378.14 - 379.84 381.6 383.41 385.27 387.18 389.14 391.16 393.23 / - 19 1 2 1 353.46 353.34 353.43 353.64 353.96 354.35 354.82 355.35 355.95 356.6 357.32 358.1 - 358.94 359.83 360.78 361.78 362.84 363.96 365.13 366.35 367.63 368.96 370.35 371.78 373.28 374.82 376.42 378.07 - 379.77 381.53 383.34 385.2 387.12 389.08 391.1 393.17 / - 19 1 3 1 353.34 353.21 353.29 353.5 353.82 354.21 354.67 355.2 355.8 356.46 357.18 357.96 - 358.79 359.68 360.63 361.64 362.7 363.82 364.99 366.21 367.49 368.82 370.21 371.65 373.15 374.69 376.29 377.95 - 379.65 381.41 383.22 385.08 387 388.97 390.99 393.06 / - 19 1 4 1 353.13 352.97 353.05 353.25 353.56 353.95 354.41 354.94 355.54 356.2 356.92 357.7 - 358.53 359.43 360.38 361.38 362.44 363.56 364.73 365.96 367.24 368.58 369.97 371.41 372.91 374.46 376.06 377.72 - 379.43 381.19 383.01 384.87 386.79 388.77 390.79 392.87 / - 19 1 5 1 352.73 352.54 352.59 352.79 353.09 353.48 353.94 354.47 355.06 355.72 356.44 357.22 - 358.06 358.95 359.9 360.91 361.98 363.1 364.27 365.5 366.79 368.13 369.52 370.97 372.48 374.03 375.64 377.3 - 379.02 380.79 382.61 384.49 386.42 388.4 390.44 392.52 / - 19 1 6 1 351.95 351.71 351.74 351.92 352.21 352.59 353.05 353.58 354.17 354.83 355.55 356.33 - 357.17 358.07 359.03 360.04 361.11 362.24 363.42 364.66 365.95 367.3 368.7 370.16 371.68 373.24 374.86 376.54 - 378.27 380.05 381.89 383.78 385.73 387.72 389.78 391.88 / - 19 1 7 1 350.42 350.1 350.1 350.26 350.54 350.91 351.37 351.89 352.49 353.15 353.87 354.66 - 355.51 356.41 357.38 358.4 359.49 360.63 361.82 363.08 364.39 365.75 367.18 368.65 370.19 371.78 373.42 375.12 - 376.88 378.69 380.55 382.47 384.45 386.48 388.56 390.7 / - 19 1 8 1 347.4 346.98 346.93 347.07 347.33 347.7 348.15 348.68 349.29 349.96 350.69 351.49 - 352.36 353.28 354.27 355.32 356.43 357.6 358.83 360.11 361.46 362.86 364.32 365.84 367.42 369.06 370.75 372.5 - 374.31 376.17 378.1 380.07 382.11 384.2 386.35 388.56 / - 19 1 9 1 341.56 341.04 340.95 341.07 341.33 341.7 342.16 342.71 343.33 344.03 344.8 345.64 - 346.54 347.51 348.55 349.66 350.82 352.05 353.35 354.71 356.13 357.61 359.16 360.76 362.44 364.17 365.96 367.82 - 369.74 371.71 373.76 375.86 378.02 380.25 382.53 384.88 / - 19 1 10 1 331.02 329.94 329.47 329.37 329.5 329.8 330.23 330.78 331.43 332.18 333.02 333.95 - 334.96 336.05 337.22 338.47 339.8 341.2 342.68 344.24 345.86 347.57 349.34 351.19 353.11 355.11 357.17 359.31 - 361.52 363.8 366.15 368.57 371.07 373.63 376.26 378.96 / - 19 1 11 1 315.5 308.53 307.61 307.33 307.45 307.83 308.43 309.2 310.13 311.2 312.35 313.67 - 315.11 316.66 318.27 320.04 321.91 323.88 325.9 328.07 330.33 332.64 335.08 337.62 340.19 342.9 345.71 348.57 - 351.55 354.63 357.75 361 364.3 367.71 371.21 374.76 / - 19 1 12 1 284.38 281.59 280.71 280.69 281.17 282.01 283.14 284.51 286.11 287.91 289.9 292.08 - 294.43 296.94 299.62 302.46 305.45 308.58 311.86 315.29 318.84 322.54 326.36 330.32 334.4 338.6 342.92 347.37 - 351.93 356.6 361.39 366.29 371.3 376.42 381.65 386.98 / - 19 1 13 1 259.75 256.86 256.71 257.48 258.81 260.58 262.71 265.17 267.94 271.03 274.35 277.99 - 281.83 285.96 290.34 294.88 299.73 304.8 310.09 315.46 321.16 327.06 332.98 339.27 345.52 352.17 358.98 365.72 - 372.87 379.91 387.39 394.72 402.52 410.14 418.26 426.16 / - 19 1 14 1 239.37 238.92 240.06 242.29 245.35 249.01 253.17 257.77 262.77 268.14 273.87 279.95 - 286.35 293.08 300.11 307.44 315.07 322.98 331.16 339.62 348.33 357.31 366.54 376.82 387.37 398.02 408.63 419.7 - 430.78 442.14 453.62 465.7 477.68 489.9 502.35 515.06 / - 19 1 15 1 229.15 232.15 236.2 241.11 246.87 253.49 260.76 268.66 277.17 286.29 295.99 306.26 - 317.1 328.49 340.43 352.9 365.84 379.23 393.07 407.37 422.12 437.31 452.94 469 485.51 502.44 519.81 537.62 - 556.86 576.58 596.65 617.23 637.91 659.35 680.94 703.14 / - 19 1 16 1 227.63 233.21 240.42 249.29 259.68 271.49 284.64 299.08 314.69 331.44 349.26 368.09 - 387.89 408.71 430.5 453.22 476.88 501.47 526.99 553.43 580.74 608.89 637.9 667.59 698.08 729.49 762.59 797.37 - 832.44 868.34 904.57 941.69 979.41 1016.98 1055.48 1093.3 / - 19 1 17 1 227.57 238.82 253.68 271.68 292.6 316.3 342.58 371.27 402.26 435.49 470.76 507.99 - 547.16 588.17 630.93 675.66 722.55 771.52 822.25 874.74 928.96 985.5 1044.35 1103.4 1162.26 1219.2 1272.7 1316.21 - 1356.33 1402.7 1447.8 1497.12 1545.61 1594.86 1649.79 1698.85 / - 19 1 18 1 232.94 257.16 289.38 328.08 372.48 422.19 477.05 536.86 601.18 669.55 742.81 821 - 903.87 990.88 1081 1173.28 1266.6 1350.65 1437.6 1527.69 1619.64 1714.17 1812.11 1911.15 2011.86 2113.81 2217.19 2325.11 - 2434.75 2545 2655.97 2770.54 2886.15 3006.87 3126.8 3247.43 / - 19 1 19 1 251.24 303.28 373.75 457.53 552.47 659.36 776.78 906.58 1045 1194.75 1334.44 1472.41 - 1622.14 1774.43 1927.54 2087.79 2253.12 2420.97 2591.75 2773.68 2957.97 3144.35 3331.16 3528.77 3730.32 3934.57 4144.16 4356.39 - 4569.65 4795.72 5024.74 5262.02 5502.39 5734.54 5983.93 6236.45 / - 19 1 20 1 284.74 381.36 533.16 713.75 922.08 1159.31 1397.21 1639.11 1898.06 2173.22 2464.91 2762.43 - 3090.18 3414.71 3753.51 4139.64 4506.92 4885.99 5292.69 5694.05 6116.16 6552.94 6998.52 7461.4 7930.9 8409.39 8885.18 9391.45 - 9909.58 10464.58 11006.63 11564.27 12114.09 12706.29 13313.78 13936.77 / - 19 2 1 1 355.39 355.26 355.35 355.56 355.87 356.27 356.73 357.27 357.86 358.52 359.24 360.02 - 360.86 361.76 362.71 363.71 364.78 365.9 367.07 368.3 369.58 370.92 372.31 373.75 375.25 376.8 378.4 380.06 - 381.77 383.53 385.35 387.22 389.14 391.11 393.14 395.22 / - 19 2 2 1 355.32 355.19 355.27 355.48 355.79 356.19 356.65 357.18 357.78 358.44 359.16 359.94 - 360.78 361.67 362.62 363.63 364.7 365.81 366.99 368.22 369.5 370.84 372.23 373.67 375.17 376.72 378.33 379.99 - 381.7 383.46 385.28 387.15 389.07 391.05 393.08 395.16 / - 19 2 3 1 355.2 355.05 355.13 355.34 355.65 356.04 356.5 357.03 357.63 358.29 359.01 359.79 - 360.63 361.52 362.48 363.48 364.55 365.67 366.84 368.07 369.36 370.69 372.09 373.53 375.03 376.59 378.19 379.85 - 381.57 383.34 385.16 387.03 388.95 390.93 392.96 395.05 / - 19 2 4 1 354.98 354.81 354.87 355.08 355.38 355.77 356.23 356.76 357.36 358.02 358.74 359.52 - 360.36 361.25 362.21 363.22 364.28 365.4 366.58 367.81 369.1 370.44 371.83 373.28 374.79 376.34 377.95 379.62 - 381.34 383.11 384.93 386.81 388.74 390.72 392.76 394.84 / - 19 2 5 1 354.56 354.35 354.4 354.6 354.9 355.28 355.74 356.27 356.87 357.53 358.25 359.03 - 359.86 360.76 361.72 362.73 363.8 364.92 366.1 367.34 368.63 369.97 371.37 372.83 374.33 375.9 377.51 379.18 - 380.91 382.69 384.52 386.4 388.34 390.33 392.38 394.48 / - 19 2 6 1 353.75 353.49 353.51 353.69 353.99 354.36 354.82 355.35 355.94 356.6 357.32 358.11 - 358.95 359.85 360.81 361.82 362.9 364.03 365.21 366.46 367.76 369.11 370.52 371.98 373.5 375.08 376.7 378.39 - 380.12 381.92 383.76 385.66 387.62 389.62 391.69 393.8 / - 19 2 7 1 352.15 351.82 351.81 351.97 352.25 352.62 353.07 353.6 354.19 354.86 355.58 356.37 - 357.22 358.13 359.1 360.12 361.21 362.35 363.55 364.81 366.13 367.5 368.93 370.41 371.95 373.55 375.2 376.91 - 378.67 380.49 382.36 384.29 386.28 388.32 390.41 392.56 / - 19 2 8 1 348.99 348.56 348.51 348.65 348.92 349.29 349.74 350.27 350.87 351.55 352.28 353.09 - 353.95 354.88 355.87 356.92 358.04 359.21 360.44 361.73 363.08 364.49 365.96 367.49 369.07 370.71 372.42 374.17 - 375.99 377.87 379.8 381.79 383.84 385.94 388.1 390.32 / - 19 2 9 1 342.92 342.4 342.31 342.43 342.7 343.07 343.53 344.08 344.71 345.41 346.18 347.02 - 347.93 348.91 349.95 351.06 352.23 353.46 354.77 356.13 357.56 359.05 360.6 362.22 363.9 365.64 367.45 369.31 - 371.24 373.23 375.29 377.4 379.58 381.82 384.12 386.48 / - 19 2 10 1 332.05 330.74 330.23 330.08 330.21 330.5 330.93 331.48 332.18 332.94 333.79 334.73 - 335.76 336.86 338.05 339.32 340.67 342.09 343.59 345.17 346.82 348.55 350.35 352.22 354.17 356.19 358.29 360.4 - 362.64 364.95 367.33 369.79 372.31 374.91 377.58 380.32 / - 19 2 11 1 316.39 308.75 307.83 307.57 307.71 308.11 308.73 309.53 310.48 311.58 312.8 314.11 - 315.58 317.17 318.87 320.63 322.54 324.56 326.62 328.84 331.15 333.5 336 338.6 341.23 344 346.85 349.74 - 352.77 355.88 359.03 362.32 365.67 369.14 372.69 376.3 / - 19 2 12 1 284.56 281.77 280.92 280.91 281.42 282.28 283.44 284.84 286.47 288.3 290.32 292.53 - 294.92 297.47 300.19 303.07 306.1 309.28 312.61 316.09 319.7 323.44 327.32 331.33 335.47 339.73 344.12 348.62 - 353.25 357.98 362.84 367.8 372.88 378.07 383.36 388.77 / - 19 2 13 1 259.76 256.94 256.86 257.67 259.05 260.83 262.99 265.48 268.3 271.38 274.78 278.4 - 282.32 286.43 290.85 295.5 300.38 305.5 310.71 316.25 322 327.78 333.93 340.26 346.58 353.28 360.17 366.97 - 374.18 381.29 388.83 396.54 404.09 412.13 419.96 427.94 / - 19 2 14 1 239.42 239.03 240.22 242.48 245.57 249.27 253.47 258.11 263.15 268.57 274.34 280.46 - 286.91 293.68 300.76 308.15 315.82 323.79 332.02 340.53 349.31 358.34 367.63 377.37 388.03 398.93 409.72 420.87 - 432.06 443.67 455.13 467.29 479.35 491.64 504.18 516.97 / - 19 2 15 1 229.19 232.27 236.39 241.34 247.09 253.73 261.05 268.99 277.56 286.72 296.47 306.79 - 317.68 329.11 341.09 353.61 366.62 380.08 393.98 408.34 423.15 438.4 454.1 470.23 486.8 503.81 521.25 539.12 - 557.78 577.59 597.85 618.42 639.31 660.99 682.6 704.66 / - 19 2 16 1 227.54 233.3 240.58 249.49 259.92 271.77 284.96 299.42 315.08 331.88 349.75 368.64 - 388.49 409.35 431.17 453.93 477.61 502.23 527.77 554.23 581.55 609.71 638.74 668.5 699.04 730.47 762.82 797.65 - 832.86 869.02 905.52 942.64 980.12 1018.61 1056.53 1094.54 / - 19 2 17 1 227.43 238.81 253.77 271.85 292.81 316.53 342.82 371.54 402.53 435.76 471.06 508.3 - 547.49 588.5 631.23 675.91 722.73 771.69 822.48 874.98 929.19 985.38 1043.99 1103.36 1162.71 1219.78 1274.69 1319.44 - 1359.75 1406.92 1453.16 1502.52 1551.15 1601.88 1656.58 1705.96 / - 19 2 18 1 232.84 257.19 289.52 328.3 372.76 422.44 477.22 536.94 601.22 669.47 742.57 820.58 - 903.28 990.25 1080.38 1172.32 1266.25 1351.8 1440.19 1531.46 1624.97 1712.08 1803.83 1896.25 1988.56 2084.49 2177.66 2277.1 - 2381.75 2479.62 2583.31 2686.78 2797.88 2906.83 3016.72 3126.56 / - 19 2 19 1 251.21 302.86 373.5 457.35 552.63 657.99 776.56 903.72 1044.18 1193.93 1334.12 1472.68 - 1623.05 1776.13 1931.31 2093.08 2261.18 2430.97 2603.58 2787.46 2973.5 3163.44 3350.79 3550.38 3753.92 3960.34 4172.1 4386.74 - 4602.52 4830.81 5064.03 5301.98 5544.6 5779.87 6031.67 6286.71 / - 19 2 20 1 284.71 381.29 531.19 710.75 921.22 1158.62 1397.01 1639.81 1899.69 2176.03 2469.02 2767.94 - 3097.4 3423.54 3764.18 4152.34 4523.48 4907.76 5318.03 5726.2 6153.19 6595.28 7045.86 7513.91 7988.66 8472.32 8953.03 9464.3 - 9987.47 10548.21 11096.13 11659.92 12215.87 12814.22 13428.15 14057.83 / - 19 3 1 1 357.26 357.11 357.19 357.4 357.71 358.1 358.57 359.1 359.7 360.36 361.08 361.86 - 362.7 363.6 364.55 365.56 366.63 367.75 368.93 370.16 371.45 372.79 374.18 375.63 377.14 378.7 380.31 381.97 - 383.69 385.46 387.29 389.16 391.1 393.08 395.12 397.21 / - 19 3 2 1 357.19 357.03 357.11 357.32 357.63 358.02 358.48 359.02 359.61 360.27 361 361.78 - 362.62 363.51 364.47 365.48 366.54 367.67 368.84 370.08 371.36 372.71 374.1 375.55 377.06 378.62 380.23 381.9 - 383.61 385.39 387.21 389.09 391.03 393.01 395.05 397.14 / - 19 3 3 1 357.06 356.89 356.96 357.17 357.48 357.87 358.33 358.86 359.46 360.12 360.84 361.62 - 362.46 363.36 364.31 365.32 366.39 367.51 368.69 369.93 371.22 372.56 373.96 375.41 376.92 378.48 380.09 381.76 - 383.48 385.25 387.08 388.96 390.9 392.89 394.93 397.02 / - 19 3 4 1 356.83 356.64 356.7 356.9 357.2 357.59 358.05 358.58 359.18 359.84 360.56 361.34 - 362.18 363.08 364.03 365.05 366.12 367.24 368.42 369.66 370.95 372.29 373.69 375.15 376.66 378.22 379.84 381.51 - 383.23 385.01 386.84 388.73 390.67 392.66 394.71 396.81 / - 19 3 5 1 356.39 356.16 356.21 356.4 356.7 357.08 357.54 358.07 358.67 359.33 360.05 360.83 - 361.67 362.57 363.53 364.54 365.61 366.74 367.92 369.16 370.46 371.81 373.21 374.67 376.19 377.75 379.38 381.06 - 382.79 384.57 386.41 388.31 390.25 392.26 394.31 396.42 / - 19 3 6 1 355.53 355.26 355.28 355.46 355.75 356.13 356.59 357.11 357.71 358.37 359.09 359.87 - 360.72 361.62 362.58 363.6 364.68 365.81 367 368.25 369.55 370.91 372.32 373.79 375.32 376.9 378.53 380.22 - 381.97 383.77 385.62 387.53 389.49 391.51 393.58 395.71 / - 19 3 7 1 353.86 353.52 353.51 353.67 353.94 354.32 354.77 355.3 355.89 356.56 357.28 358.07 - 358.92 359.83 360.8 361.83 362.92 364.07 365.27 366.54 367.86 369.23 370.66 372.15 373.7 375.3 376.96 378.68 - 380.45 382.28 384.16 386.1 388.09 390.14 392.25 394.41 / - 19 3 8 1 350.56 350.13 350.08 350.22 350.49 350.86 351.31 351.84 352.45 353.12 353.86 354.66 - 355.53 356.46 357.46 358.51 359.63 360.8 362.04 363.34 364.69 366.11 367.58 369.11 370.71 372.36 374.07 375.83 - 377.66 379.54 381.48 383.48 385.54 387.66 389.83 392.06 / - 19 3 9 1 344.25 343.74 343.65 343.78 344.04 344.42 344.88 345.43 346.06 346.77 347.54 348.38 - 349.3 350.28 351.32 352.43 353.61 354.85 356.16 357.53 358.97 360.46 362.03 363.65 365.34 367.09 368.91 370.78 - 372.73 374.73 376.8 378.92 381.11 383.37 385.68 388.06 / - 19 3 10 1 333.07 331.47 330.87 330.74 330.85 331.14 331.58 332.14 332.81 333.57 334.44 335.39 - 336.43 337.55 338.76 340.04 341.41 342.86 344.38 345.98 347.66 349.41 351.24 353.14 355.12 357.17 359.3 361.5 - 363.77 366.12 368.53 371.02 373.58 376.18 378.88 381.66 / - 19 3 11 1 317.29 308.92 308.03 307.81 307.97 308.41 309.05 309.87 310.85 311.96 313.22 314.57 - 316.08 317.71 319.41 321.26 323.16 325.22 327.39 329.6 331.96 334.42 336.92 339.57 342.31 345.09 348.01 350.96 - 354.06 357.23 360.44 363.78 367.16 370.66 374.25 377.9 / - 19 3 12 1 284.74 281.96 281.13 281.15 281.67 282.56 283.74 285.17 286.82 288.69 290.74 292.99 - 295.41 298 300.76 303.69 306.76 309.99 313.37 316.89 320.56 324.36 328.29 332.36 336.56 340.88 345.32 349.89 - 354.58 359.38 364.3 369.34 374.48 379.74 385.1 390.58 / - 19 3 13 1 259.64 257.05 257.02 257.89 259.28 261.11 263.3 265.81 268.63 271.77 275.16 278.85 - 282.75 286.96 291.42 296.12 300.95 306.09 311.45 317.04 322.84 328.68 334.87 341.27 347.64 354.4 361.34 368.21 - 375.5 382.67 390.27 398.05 405.67 413.77 421.68 430.1 / - 19 3 14 1 239.47 239.15 240.38 242.67 245.79 249.53 253.77 258.45 263.53 268.99 274.81 280.98 - 287.47 294.29 301.42 308.86 316.58 324.6 332.89 341.45 350.28 359.38 368.72 378.32 388.61 399.65 410.66 421.97 - 433.28 444.79 456.74 468.51 481.01 493.39 506.01 518.87 / - 19 3 15 1 229.23 232.4 236.57 241.58 247.36 253.96 261.33 269.33 277.94 287.15 296.95 307.32 - 318.25 329.73 341.76 354.32 367.39 380.92 394.89 409.31 424.18 439.49 455.25 471.45 488.08 505.16 522.66 540.6 - 558.98 578.54 598.93 619.74 640.82 662.42 684.27 706.68 / - 19 3 16 1 227.44 233.39 240.73 249.7 260.17 272.05 285.27 299.76 315.48 332.3 350.22 369.18 - 389.09 409.99 431.83 454.62 478.33 502.97 528.53 555 582.34 610.51 639.52 669.35 699.94 731.41 763.78 797.85 - 833.17 869.64 906.08 943.43 981.27 1019.13 1057.55 1096.31 / - 19 3 17 1 227.3 238.8 253.85 272.01 293.02 316.76 343.07 371.8 402.8 436.02 471.34 508.59 - 547.78 588.8 631.51 676.11 722.86 771.75 822.6 875.11 929.32 985.12 1043.85 1103.41 1162.76 1220.59 1276.06 1321.52 - 1364.73 1412.81 1460.63 1511.46 1561.82 1614.1 1670.22 1722.39 / - 19 3 18 1 232.75 257.24 289.67 328.52 373.04 422.7 477.41 537.02 601.24 669.37 742.29 820.12 - 902.63 989.5 1079.66 1171.7 1265.71 1346.86 1430.19 1516.35 1602.71 1693.05 1786.16 1879.96 1974.43 2069.97 2165.88 2267.57 - 2370.42 2474.47 2578.36 2684.62 2793.96 2903.46 3014.01 3123.22 / - 19 3 19 1 251.18 302.65 373.62 457.12 552.19 657.91 774.46 903.16 1043.32 1188.78 1333.72 1472.87 - 1617.21 1777.58 1933.6 2096.7 2267.18 2440.01 2615.01 2793.47 2989.63 3181.62 3371.39 3573.02 3778.68 3987.41 4201.39 4418.6 - 4637.06 4867.6 5103.26 5333.1 5588.95 5827.27 6081.83 6339.51 / - 19 3 20 1 284.69 381.23 529.19 707.43 916.55 1152.26 1392.24 1640.52 1901.37 2178.87 2473.26 2773.58 - 3104.78 3432.56 3775.16 4165.45 4538.66 4926.64 5339.52 5756.57 6189.04 6636.83 7092.84 7547.41 8046.9 8536.21 9022.31 9539.06 - 10067.71 10608.38 11189.27 11759.49 12322.19 12927.09 13548.03 14184.7 / - 19 4 1 1 359.12 358.96 359.03 359.24 359.55 359.94 360.4 360.93 361.53 362.19 362.92 363.7 - 364.54 365.44 366.39 367.41 368.48 369.6 370.78 372.02 373.31 374.66 376.06 377.51 379.02 380.59 382.2 383.88 - 385.6 387.38 389.21 391.1 393.04 395.03 397.08 399.18 / - 19 4 2 1 359.05 358.88 358.95 359.15 359.46 359.85 360.31 360.85 361.44 362.1 362.83 363.61 - 364.45 365.35 366.3 367.32 368.39 369.51 370.69 371.93 373.22 374.57 375.97 377.43 378.94 380.5 382.12 383.8 - 385.52 387.3 389.14 391.02 392.97 394.96 397.01 399.11 / - 19 4 3 1 358.91 358.73 358.79 359 359.3 359.69 360.15 360.69 361.28 361.94 362.67 363.45 - 364.29 365.19 366.15 367.16 368.23 369.36 370.54 371.78 373.07 374.42 375.82 377.28 378.79 380.36 381.98 383.65 - 385.38 387.16 389 390.89 392.83 394.83 396.88 398.99 / - 19 4 4 1 358.67 358.47 358.52 358.72 359.02 359.4 359.87 360.4 360.99 361.65 362.38 363.16 - 364 364.9 365.86 366.87 367.94 369.07 370.25 371.49 372.79 374.14 375.54 377 378.52 380.09 381.71 383.39 - 385.12 386.91 388.75 390.64 392.59 394.6 396.65 398.76 / - 19 4 5 1 358.21 357.97 358.01 358.2 358.5 358.88 359.34 359.87 360.46 361.12 361.84 362.63 - 363.47 364.37 365.33 366.35 367.42 368.55 369.74 370.98 372.28 373.63 375.04 376.51 378.03 379.6 381.23 382.92 - 384.66 386.45 388.3 390.2 392.16 394.17 396.23 398.35 / - 19 4 6 1 357.32 357.03 357.05 357.23 357.51 357.89 358.35 358.87 359.47 360.13 360.85 361.64 - 362.48 363.38 364.35 365.37 366.45 367.59 368.78 370.03 371.34 372.7 374.12 375.59 377.12 378.71 380.35 382.05 - 383.8 385.61 387.47 389.39 391.36 393.39 395.47 397.6 / - 19 4 7 1 355.56 355.21 355.2 355.36 355.64 356.01 356.46 356.99 357.58 358.25 358.97 359.76 - 360.62 361.53 362.5 363.53 364.63 365.77 366.98 368.25 369.57 370.95 372.39 373.89 375.44 377.05 378.71 380.44 - 382.22 384.05 385.94 387.89 389.89 391.95 394.07 396.24 / - 19 4 8 1 352.12 351.69 351.64 351.78 352.05 352.41 352.87 353.4 354.01 354.68 355.42 356.23 - 357.1 358.03 359.03 360.08 361.2 362.38 363.62 364.92 366.29 367.71 369.19 370.72 372.32 373.98 375.7 377.47 - 379.31 381.2 383.15 385.16 387.23 389.36 391.54 393.79 / - 19 4 9 1 345.56 345.05 344.97 345.09 345.36 345.73 346.2 346.75 347.38 348.08 348.86 349.7 - 350.62 351.6 352.65 353.77 354.95 356.2 357.51 358.89 360.33 361.83 363.41 365.04 366.74 368.5 370.33 372.22 - 374.17 376.19 378.27 380.41 382.61 384.88 387.21 389.61 / - 19 4 10 1 334.08 332.08 331.46 331.31 331.41 331.7 332.13 332.69 333.4 334.18 335.06 336.02 - 337.08 338.22 339.45 340.76 342.11 343.56 345.11 346.74 348.45 350.23 352.09 354.02 356.03 358.12 360.28 362.51 - 364.82 367.2 369.66 372.19 374.79 377.46 380.2 383.02 / - 19 4 11 1 318.2 309.05 308.21 308.03 308.22 308.69 309.36 310.21 311.21 312.37 313.63 315.05 - 316.57 318.23 319.98 321.85 323.82 325.93 328.11 330.39 332.8 335.28 337.89 340.55 343.34 346.18 349.16 352.24 - 355.34 358.59 361.87 365.28 368.73 372.3 375.96 379.65 / - 19 4 12 1 284.93 282.15 281.34 281.38 281.93 282.84 284.05 285.5 287.19 289.08 291.17 293.45 - 295.91 298.54 301.34 304.31 307.43 310.71 314.14 317.71 321.43 325.28 329.27 333.4 337.65 342.04 346.55 351.18 - 355.93 360.8 365.79 370.89 376.1 381.43 386.87 392.41 / - 19 4 13 1 259.55 257.14 257.19 258.1 259.52 261.37 263.58 266.12 268.97 272.13 275.58 279.26 - 283.25 287.49 291.91 296.64 301.61 306.8 312.1 317.71 323.53 329.57 335.82 342.27 348.7 355.51 362.52 369.44 - 376.8 384.03 391.73 399.58 407.26 415.43 423.4 431.89 / - 19 4 14 1 239.54 239.28 240.55 242.86 246.01 249.79 254.07 258.79 263.92 269.42 275.29 281.5 - 288.04 294.91 302.09 309.57 317.34 325.41 333.75 342.37 351.26 360.41 369.81 379.47 389.38 400.01 411.41 422.77 - 434.42 446.07 458.12 470.2 482.29 495.13 507.83 520.78 / - 19 4 15 1 229.28 232.54 236.76 241.81 247.63 254.22 261.62 269.67 278.33 287.59 297.43 307.85 - 318.82 330.35 342.42 355.02 368.15 381.74 395.78 410.26 425.19 440.57 456.39 472.65 489.35 506.49 524.06 542.07 - 560.52 579.41 599.91 620.9 642.27 663.87 685.7 708.2 / - 19 4 16 1 227.35 233.46 240.89 249.9 260.41 272.33 285.58 300.11 315.85 332.73 350.68 369.69 - 389.67 410.61 432.49 455.29 479.03 503.69 529.26 555.75 583.1 611.27 640.26 670.15 700.81 732.32 764.7 797.96 - 833.8 869.95 906.66 943.88 981.99 1020.26 1058.56 1097.39 / - 19 4 17 1 227.19 238.79 253.93 272.16 293.23 316.99 343.31 372.05 403.06 436.27 471.59 508.86 - 548.04 589.04 631.73 676.26 722.93 771.72 822.58 875.15 929.34 985.13 1043.14 1102.95 1162.74 1220.84 1277.41 1321.67 - 1369.17 1419.42 1468.27 1520.48 1572.79 1627.47 1685.13 1738.37 / - 19 4 18 1 232.65 257.28 289.82 328.75 373.31 422.97 477.6 537.11 601.25 669.25 741.98 819.6 - 901.9 988.6 1078.83 1170.98 1264.98 1346.82 1431.38 1518.48 1606.3 1696.67 1790.61 1885.53 1980.91 2078.8 2174.52 2278.86 - 2382.92 2488.24 2593.56 2701.17 2811.9 2922.94 3032.73 3145.59 / - 19 4 19 1 251.15 302.43 373.32 457.29 551.72 657.88 774.19 902.56 1042.41 1187.72 1333.23 1473.02 - 1617.91 1778.98 1935.78 2099.78 2271.11 2447.41 2625.11 2806.82 3005.01 3199.62 3392.17 3596.38 3804.64 4015.79 4232.26 4452.03 - 4673.41 4906.41 5145.91 5377.37 5623.28 5877.19 6134.58 6395.17 / - 19 4 20 1 284.67 381.21 525.86 704.1 911.94 1151.48 1389.13 1632.98 1903.07 2181.78 2465.07 2779.36 - 3112.41 3441.95 3786.53 4147.84 4554.42 4944.75 5357.81 5780.77 6223.28 6676.66 7138.85 7599.31 8104.96 8600.61 9092.49 9615.12 - 10149.75 10696.9 11259.05 11862.69 12432.54 13044.8 13673.18 14317.51 / - 19 5 1 1 361.04 360.84 360.89 361.09 361.39 361.78 362.24 362.77 363.37 364.03 364.76 365.54 - 366.38 367.28 368.24 369.25 370.32 371.45 372.64 373.88 375.17 376.52 377.93 379.39 380.9 382.47 384.1 385.77 - 387.51 389.29 391.13 393.03 394.98 396.98 399.04 401.15 / - 19 5 2 1 360.96 360.75 360.8 361 361.3 361.69 362.15 362.68 363.28 363.94 364.66 365.44 - 366.29 367.19 368.14 369.16 370.23 371.36 372.54 373.78 375.08 376.43 377.84 379.3 380.81 382.39 384.01 385.69 - 387.42 389.21 391.05 392.95 394.9 396.9 398.96 401.07 / - 19 5 3 1 360.82 360.6 360.65 360.84 361.14 361.53 361.99 362.52 363.11 363.77 364.5 365.28 - 366.12 367.02 367.98 368.99 370.07 371.2 372.38 373.62 374.92 376.27 377.68 379.14 380.66 382.23 383.86 385.54 - 387.28 389.06 390.91 392.81 394.76 396.77 398.83 400.94 / - 19 5 4 1 360.56 360.32 360.36 360.55 360.85 361.23 361.69 362.22 362.81 363.47 364.19 364.98 - 365.82 366.72 367.68 368.7 369.77 370.9 372.09 373.33 374.63 375.98 377.39 378.86 380.38 381.95 383.58 385.27 - 387.01 388.8 390.65 392.55 394.51 396.52 398.58 400.7 / - 19 5 5 1 360.08 359.81 359.83 360.01 360.3 360.68 361.14 361.67 362.26 362.92 363.64 364.42 - 365.27 366.17 367.13 368.15 369.23 370.36 371.55 372.79 374.1 375.46 376.87 378.34 379.86 381.45 383.08 384.77 - 386.52 388.32 390.18 392.09 394.05 396.07 398.14 400.27 / - 19 5 6 1 359.13 358.82 358.83 359 359.28 359.65 360.11 360.63 361.23 361.89 362.61 363.39 - 364.24 365.15 366.11 367.13 368.22 369.35 370.55 371.8 373.11 374.48 375.91 377.39 378.92 380.51 382.16 383.86 - 385.62 387.44 389.31 391.23 393.21 395.25 397.34 399.49 / - 19 5 7 1 357.28 356.91 356.89 357.05 357.32 357.69 358.14 358.67 359.27 359.93 360.66 361.45 - 362.3 363.21 364.19 365.22 366.32 367.47 368.68 369.95 371.28 372.66 374.11 375.61 377.17 378.78 380.45 382.18 - 383.97 385.81 387.71 389.67 391.68 393.75 395.88 398.06 / - 19 5 8 1 353.66 353.23 353.18 353.32 353.58 353.95 354.41 354.94 355.55 356.22 356.96 357.77 - 358.64 359.58 360.58 361.64 362.76 363.94 365.19 366.49 367.86 369.28 370.77 372.32 373.92 375.59 377.31 379.09 - 380.94 382.84 384.8 386.82 388.9 391.04 393.24 395.49 / - 19 5 9 1 346.84 346.32 346.22 346.33 346.59 346.96 347.42 347.97 348.6 349.3 350.08 350.92 - 351.84 352.83 353.88 355 356.19 357.45 358.77 360.15 361.6 363.12 364.7 366.35 368.06 369.83 371.67 373.57 - 375.54 377.57 379.67 381.83 384.05 386.34 388.69 391.1 / - 19 5 10 1 335.11 332.64 332.02 331.81 331.91 332.19 332.63 333.2 333.88 334.67 335.56 336.54 - 337.61 338.78 340.02 341.35 342.77 344.27 345.84 347.5 349.24 351.05 352.95 354.91 356.96 359.08 361.28 363.51 - 365.85 368.27 370.77 373.33 375.98 378.69 381.48 384.34 / - 19 5 11 1 319.11 309.22 308.39 308.22 308.44 308.93 309.63 310.52 311.56 312.75 314.08 315.53 - 317.12 318.77 320.56 322.47 324.48 326.61 328.84 331.17 333.64 336.17 338.82 341.55 344.39 347.3 350.35 353.46 - 356.63 359.94 363.3 366.78 370.35 373.96 377.69 381.46 / - 19 5 12 1 285.13 282.36 281.56 281.62 282.19 283.13 284.35 285.84 287.55 289.47 291.6 293.91 - 296.41 299.08 301.93 304.93 308.1 311.43 314.91 318.53 322.3 326.21 330.26 334.45 338.76 343.21 347.78 352.48 - 357.3 362.23 367.29 372.46 377.75 383.14 388.66 394.27 / - 19 5 13 1 259.49 257.26 257.38 258.31 259.76 261.63 263.86 266.44 269.33 272.49 275.96 279.72 - 283.68 287.96 292.48 297.25 302.16 307.39 312.84 318.52 324.39 330.47 336.77 343.07 349.76 356.63 363.7 370.69 - 378.11 385.4 393.16 401.11 408.86 417.1 425.14 433.7 / - 19 5 14 1 239.62 239.41 240.72 243.05 246.25 250.07 254.39 259.16 264.32 269.87 275.78 282.03 - 288.62 295.53 302.75 310.28 318.11 326.22 334.62 343.29 352.24 361.44 370.91 380.62 390.59 400.8 412.03 423.55 - 435.46 447.26 459.24 471.64 484.05 496.45 509.65 522.68 / - 19 5 15 1 229.34 232.67 236.96 242.05 247.92 254.53 261.92 270.02 278.73 288.03 297.92 308.38 - 319.4 330.97 343.08 355.72 368.9 382.55 396.66 411.2 426.2 441.64 457.52 473.84 490.61 507.81 525.45 543.52 - 562.03 580.99 600.39 621.46 643.05 665.03 687.17 709.91 / - 19 5 16 1 227.25 233.49 241.05 250.11 260.66 272.62 285.9 300.45 316.21 333.14 351.13 370.18 - 390.22 411.21 433.13 455.96 479.71 504.38 529.97 556.47 583.82 611.99 640.97 670.86 701.61 733.17 765.58 798.84 - 833.85 870.12 907.07 944.45 982.43 1020.99 1059.29 1097.8 / - 19 5 17 1 227.08 238.78 254.02 272.32 293.43 317.22 343.54 372.28 403.3 436.49 471.8 509.09 - 548.26 589.25 631.91 676.36 722.93 771.63 822.38 875.03 929.25 985.02 1042.65 1102.64 1162.43 1221.4 1278.37 1323.87 - 1373.66 1424.15 1476.06 1529.57 1583.92 1640.38 1699.56 1754.79 / - 19 5 18 1 232.56 257.33 289.97 328.97 373.58 423.24 477.8 537.19 601.23 669.11 741.62 819.03 - 901.11 987.59 1077.83 1170.14 1264.05 1346.89 1432.41 1520.48 1608.89 1701.21 1796.13 1892.14 1988.69 2087.85 2184.75 2288.77 - 2394.04 2502.48 2608.12 2717.18 2828.45 2940.85 3054.29 3168.71 / - 19 5 19 1 250.65 301.9 372.98 456.78 551.87 656.33 773.91 901.93 1041.44 1186.57 1332.64 1473 - 1619.75 1780.3 1937.9 2102.86 2274.27 2452.17 2632.68 2820.13 3018.92 3216.48 3412 3619.24 3830.45 4044.51 4264.04 4486.74 - 4711.33 4947.32 5189.37 5424.17 5672.86 5930.03 6190.22 6453.99 / - 19 5 20 1 284.65 381.21 523.27 701.13 910.95 1145 1387.63 1633.58 1892.79 2170.44 2469.46 2785.35 - 3096.42 3451.72 3798.37 4161.84 4570.88 4963.67 5379.1 5801.86 6253.51 6697.48 7182.86 7649.85 8142.14 8664.82 9163.06 9692.1 - 10233.23 10787.4 11356.98 11969.19 12546.72 13166.86 13803.34 14455.94 / - 19 6 1 1 363.19 362.85 362.85 363.02 363.3 363.67 364.12 364.65 365.24 365.9 366.62 367.4 - 368.24 369.14 370.1 371.11 372.18 373.31 374.5 375.74 377.04 378.39 379.8 381.27 382.79 384.36 385.99 387.68 - 389.42 391.21 393.06 394.96 396.92 398.93 400.99 403.11 / - 19 6 2 1 363.11 362.76 362.76 362.92 363.2 363.58 364.03 364.55 365.15 365.8 366.52 367.3 - 368.14 369.04 370 371.02 372.09 373.22 374.4 375.65 376.95 378.3 379.71 381.18 382.7 384.27 385.9 387.59 - 389.33 391.12 392.97 394.88 396.84 398.85 400.92 403.04 / - 19 6 3 1 362.97 362.61 362.59 362.76 363.04 363.41 363.86 364.38 364.97 365.63 366.35 367.13 - 367.97 368.87 369.83 370.84 371.92 373.05 374.24 375.48 376.78 378.13 379.55 381.01 382.53 384.11 385.74 387.43 - 389.17 390.97 392.82 394.73 396.69 398.7 400.77 402.9 / - 19 6 4 1 362.7 362.32 362.3 362.46 362.73 363.1 363.55 364.07 364.66 365.32 366.04 366.82 - 367.66 368.56 369.52 370.54 371.61 372.74 373.93 375.18 376.48 377.83 379.25 380.72 382.24 383.82 385.46 387.15 - 388.89 390.69 392.55 394.46 396.42 398.44 400.52 402.65 / - 19 6 5 1 362.2 361.78 361.75 361.9 362.17 362.54 362.98 363.5 364.09 364.75 365.47 366.25 - 367.09 367.99 368.95 369.97 371.05 372.18 373.37 374.62 375.93 377.29 378.7 380.18 381.71 383.29 384.93 386.63 - 388.38 390.19 392.05 393.97 395.94 397.97 400.06 402.19 / - 19 6 6 1 361.22 360.76 360.71 360.85 361.11 361.47 361.91 362.43 363.02 363.68 364.4 365.18 - 366.02 366.93 367.89 368.91 370 371.14 372.33 373.59 374.9 376.27 377.7 379.18 380.72 382.32 383.97 385.68 - 387.45 389.27 391.15 393.08 395.07 397.11 399.21 401.37 / - 19 6 7 1 359.3 358.78 358.7 358.82 359.08 359.43 359.87 360.39 360.98 361.64 362.37 363.15 - 364.01 364.92 365.89 366.93 368.02 369.18 370.39 371.66 372.99 374.38 375.83 377.33 378.9 380.52 382.19 383.93 - 385.72 387.57 389.48 391.44 393.47 395.54 397.68 399.87 / - 19 6 8 1 355.54 354.95 354.84 354.95 355.19 355.55 355.99 356.52 357.12 357.79 358.53 359.33 - 360.2 361.14 362.14 363.2 364.32 365.51 366.76 368.06 369.43 370.86 372.35 373.91 375.52 377.19 378.92 380.71 - 382.56 384.48 386.45 388.48 390.57 392.72 394.93 397.19 / - 19 6 9 1 348.38 347.69 347.51 347.57 347.8 348.15 348.59 349.13 349.75 350.45 351.22 352.07 - 352.99 353.97 355.03 356.16 357.35 358.61 359.94 361.34 362.8 364.32 365.92 367.58 369.3 371.09 372.94 374.86 - 376.85 378.9 381.01 383.19 385.44 387.74 390.12 392.55 / - 19 6 10 1 336.35 333.22 332.52 332.3 332.37 332.65 333.09 333.67 334.36 335.16 336.06 337.06 - 338.16 339.32 340.59 341.94 343.38 344.91 346.52 348.21 349.98 351.81 353.73 355.74 357.83 359.97 362.21 364.52 - 366.91 369.37 371.89 374.5 377.19 379.95 382.79 385.7 / - 19 6 11 1 320.19 309.4 308.56 308.39 308.62 309.12 309.83 310.73 311.79 313 314.35 315.83 - 317.44 319.17 321.03 323 325.08 327.28 329.59 331.97 334.46 337.06 339.75 342.54 345.43 348.41 351.49 354.69 - 357.95 361.31 364.75 368.31 371.93 375.61 379.43 383.28 / - 19 6 12 1 285.34 282.56 281.78 281.86 282.45 283.41 284.66 286.17 287.91 289.87 292.02 294.38 - 296.91 299.62 302.51 305.57 308.78 312.16 315.69 319.36 323.19 327.16 331.26 335.51 339.89 344.4 349.03 353.79 - 358.68 363.69 368.81 374.05 379.41 384.88 390.47 396.16 / - 19 6 13 1 259.43 257.38 257.54 258.51 260 261.89 264.16 266.74 269.64 272.87 276.36 280.13 - 284.18 288.42 292.97 297.77 302.81 308.09 313.59 319.31 325.1 331.24 337.56 344.08 350.82 357.76 364.64 371.93 - 379.42 386.78 394.6 402.61 410.43 418.77 426.89 435.52 / - 19 6 14 1 239.71 239.55 240.9 243.27 246.51 250.37 254.73 259.53 264.74 270.32 276.27 282.56 - 289.2 296.15 303.42 311 318.87 327.04 335.49 344.21 353.21 362.47 372 381.77 391.8 402.08 412.6 424.18 - 436.06 448.33 460.48 472.8 485.3 498.29 511.02 524.11 / - 19 6 15 1 229.4 232.81 237.16 242.32 248.23 254.87 262.25 270.38 279.13 288.48 298.41 308.91 - 319.97 331.58 343.73 356.42 369.63 383.35 397.52 412.13 427.19 442.69 458.63 475.02 491.84 509.1 526.8 544.94 - 563.51 582.53 601.99 622.34 644.03 666.2 688.64 711.28 / - 19 6 16 1 227.15 233.51 241.21 250.33 260.92 272.91 286.22 300.79 316.58 333.53 351.57 370.65 - 390.75 411.78 433.74 456.6 480.38 505.06 530.66 557.16 584.51 612.68 641.63 671.49 702.32 733.96 766.41 799.68 - 833.8 870.13 907.26 944.92 982.91 1021.56 1060.06 1099.06 / - 19 6 17 1 226.97 238.77 254.1 272.48 293.64 317.44 343.77 372.51 403.53 436.7 471.98 509.29 - 548.45 589.43 632.04 676.4 722.87 771.45 822.1 874.73 929.01 984.8 1041.98 1101.68 1162.27 1221.53 1279.47 1326.89 - 1378.14 1430.53 1484.65 1539.17 1596.11 1653.59 1713.86 1772.61 / - 19 6 18 1 232.47 257.38 290.12 329.2 373.83 423.51 477.98 537.26 601.18 668.94 741.25 818.42 - 900.25 986.49 1076.66 1169.13 1261.56 1345.42 1431.65 1520.48 1610.64 1703.57 1799.34 1896.26 1994.2 2094.08 2193.66 2298.83 - 2405.34 2513.21 2622.47 2732.96 2845.39 2959.27 3074.24 3190.25 / - 19 6 19 1 249.8 301.64 372.57 456.24 551.17 656.26 773.62 901.3 1037.3 1185.33 1328.55 1472.79 - 1620.72 1773.54 1939.97 2105.8 2278.24 2456.82 2638.9 2828.86 3020.36 3230.83 3430.01 3640.56 3855.15 4072.63 4295.4 4521.63 - 4749.6 4989.16 5234.43 5472.61 5724.86 5977.85 6248.96 6516.09 / - 19 6 20 1 284.63 381.26 520.88 698.2 905.75 1138.45 1382.61 1628.48 1894.51 2173.51 2474.03 2791.58 - 3104.71 3462.01 3810.69 4176.49 4588.2 4983.51 5401.43 5823.77 6279.73 6730.41 7222.98 7697.65 8197.18 8707.16 9233.07 9769.15 - 10317.37 10879.38 11457.09 12049.77 12664.49 13293.2 13938.35 14599.78 / - 19 7 1 1 365.35 364.86 364.8 364.94 365.2 365.56 366.01 366.52 367.11 367.76 368.48 369.26 - 370.1 370.99 371.95 372.97 374.04 375.17 376.36 377.6 378.91 380.26 381.67 383.14 384.67 386.25 387.88 389.57 - 391.32 393.12 394.97 396.88 398.85 400.87 402.94 405.07 / - 19 7 2 1 365.27 364.77 364.71 364.85 365.11 365.47 365.91 366.42 367.01 367.66 368.38 369.16 - 370 370.89 371.85 372.87 373.94 375.07 376.26 377.51 378.81 380.16 381.58 383.05 384.57 386.15 387.79 389.48 - 391.23 393.03 394.88 396.8 398.76 400.78 402.86 404.99 / - 19 7 3 1 365.12 364.61 364.54 364.68 364.93 365.29 365.73 366.25 366.83 367.49 368.2 368.98 - 369.82 370.72 371.67 372.69 373.76 374.9 376.09 377.33 378.63 379.99 381.41 382.88 384.4 385.98 387.62 389.32 - 391.06 392.87 394.73 396.64 398.61 400.63 402.71 404.84 / - 19 7 4 1 364.84 364.32 364.24 364.36 364.62 364.97 365.41 365.93 366.51 367.16 367.88 368.66 - 369.5 370.39 371.35 372.37 373.44 374.58 375.77 377.01 378.32 379.68 381.1 382.57 384.1 385.68 387.32 389.02 - 390.77 392.58 394.44 396.36 398.33 400.36 402.44 404.58 / - 19 7 5 1 364.32 363.76 363.67 363.79 364.04 364.39 364.82 365.34 365.92 366.57 367.29 368.06 - 368.9 369.8 370.76 371.78 372.86 373.99 375.19 376.44 377.74 379.11 380.53 382.01 383.54 385.13 386.78 388.48 - 390.24 392.05 393.92 395.85 397.83 399.86 401.96 404.1 / - 19 7 6 1 363.31 362.71 362.59 362.69 362.94 363.28 363.71 364.23 364.81 365.46 366.17 366.95 - 367.8 368.7 369.66 370.68 371.77 372.91 374.11 375.37 376.68 378.05 379.48 380.97 382.52 384.12 385.78 387.49 - 389.26 391.09 392.97 394.91 396.91 398.96 401.07 403.24 / - 19 7 7 1 361.33 360.66 360.51 360.6 360.83 361.17 361.6 362.11 362.69 363.34 364.06 364.85 - 365.7 366.61 367.58 368.62 369.71 370.87 372.08 373.36 374.69 376.08 377.53 379.04 380.61 382.23 383.92 385.66 - 387.46 389.32 391.23 393.2 395.24 397.32 399.47 401.67 / - 19 7 8 1 357.45 356.69 356.5 356.57 356.8 357.13 357.57 358.08 358.67 359.34 360.08 360.88 - 361.75 362.68 363.68 364.74 365.87 367.06 368.31 369.62 370.99 372.42 373.92 375.48 377.1 378.77 380.51 382.31 - 384.17 386.09 388.07 390.11 392.21 394.37 396.59 398.88 / - 19 7 9 1 350.07 349.11 348.8 348.79 348.96 349.27 349.69 350.21 350.82 351.51 352.28 353.12 - 354.04 355.03 356.09 357.22 358.42 359.69 361.03 362.43 363.91 365.45 367.05 368.73 370.47 372.27 374.15 376.09 - 378.09 380.16 382.3 384.5 386.77 389.1 391.5 393.96 / - 19 7 10 1 337.98 333.95 333.09 332.8 332.84 333.1 333.53 334.1 334.8 335.61 336.52 337.54 - 338.65 339.85 341.15 342.53 343.96 345.52 347.16 348.88 350.68 352.57 354.53 356.58 358.67 360.87 363.15 365.51 - 367.94 370.45 373.02 375.68 378.42 381.23 384.11 387.06 / - 19 7 11 1 321.61 309.58 308.73 308.56 308.79 309.3 310.03 310.94 312.02 313.25 314.62 316.13 - 317.76 319.52 321.41 323.41 325.53 327.77 330.11 332.57 335.13 337.81 340.59 343.47 346.44 349.5 352.66 355.91 - 359.25 362.69 366.21 369.82 373.51 377.3 381.17 385.13 / - 19 7 12 1 285.55 282.77 282 282.1 282.72 283.7 284.97 286.51 288.28 290.27 292.46 294.84 - 297.42 300.17 303.1 306.2 309.47 312.89 316.47 320.2 324.08 328.11 332.28 336.58 341.02 345.59 350.3 355.13 - 360.08 365.16 370.35 375.67 381.1 386.65 392.31 398.08 / - 19 7 13 1 259.38 257.5 257.72 258.72 260.23 262.13 264.41 267.03 269.95 273.2 276.72 280.53 - 284.59 288.95 293.54 298.38 303.37 308.67 314.21 319.97 325.94 332.13 338.54 344.94 351.7 358.65 365.82 373.18 - 380.73 388.15 396.05 404.12 412.01 420.43 428.61 437.36 / - 19 7 14 1 239.8 239.7 241.09 243.49 246.77 250.67 255.08 259.92 265.16 270.79 276.77 283.11 - 289.78 296.78 304.09 311.72 319.64 327.85 336.35 345.13 354.19 363.5 373.08 382.92 393.01 403.35 413.93 424.76 - 436.7 448.94 461.37 473.86 486.75 499.59 512.64 525.99 / - 19 7 15 1 229.44 232.98 237.41 242.61 248.55 255.22 262.61 270.74 279.54 288.93 298.9 309.44 - 320.54 332.19 344.38 357.11 370.36 384.12 398.36 413.04 428.15 443.72 459.72 476.17 493.05 510.37 528.13 546.33 - 564.96 584.04 603.56 623.53 644.43 666.73 689.46 712.4 / - 19 7 16 1 227.08 233.56 241.42 250.58 261.2 273.21 286.54 301.14 316.94 333.91 351.99 371.1 - 391.24 412.32 434.32 457.22 481.02 505.71 531.31 557.81 585.17 613.32 642.25 672.05 702.85 734.59 767.12 800.44 - 834.56 870 907.19 945.06 983.37 1021.94 1060.67 1099.87 / - 19 7 17 1 226.9 238.78 254.21 272.65 293.85 317.66 343.99 372.72 403.73 436.89 472.14 509.43 - 548.6 589.55 632.14 676.4 722.75 771.21 821.71 874.22 928.57 984.4 1041.6 1100.44 1161.37 1221.46 1279.94 1329.46 - 1382.28 1435.72 1492.55 1548.84 1607.59 1666.9 1727.41 1789.74 / - 19 7 18 1 232.39 257.43 290.28 329.42 374.07 423.76 478.16 537.33 601.09 668.75 740.84 817.75 - 899.31 985.3 1075.28 1167.94 1260.74 1346.94 1432.84 1522.68 1613.95 1707.98 1804.86 1902.98 2002.17 2103.4 2204.46 2310.95 - 2418.86 2528.16 2638.97 2751.04 2865.1 2980.64 3097.39 3215.21 / - 19 7 19 1 249.24 301.38 372.15 456.36 550.63 656.19 771.14 897.79 1036.22 1184.03 1327.46 1472.35 - 1620.98 1774.58 1941.93 2108.71 2282.24 2461.07 2644.67 2837.08 3029.25 3241.54 3447.4 3658.26 3877.01 4098.36 4325.07 4555.28 - 4787.11 5030.6 5279.81 5521.8 5777.79 6041.03 6309.69 6580.7 / - 19 7 20 1 284.63 381.34 517.82 695.25 901.08 1137.57 1377.59 1629.03 1896.27 2176.67 2478.81 2778.58 - 3113.39 3451.09 3823.67 4191.88 4573.27 5004.39 5424.92 5850.41 6303.46 6763.4 7241.51 7740.61 8248.26 8766.43 9300.98 9844.81 - 10400.87 10971.59 11558.25 12160.12 12776.62 13423.12 14077.73 14748.93 / - 19 8 1 1 367.5 366.88 366.76 366.87 367.11 367.45 367.89 368.4 368.98 369.62 370.34 371.11 - 371.95 372.85 373.8 374.82 375.89 377.02 378.21 379.46 380.76 382.12 383.54 385.01 386.54 388.12 389.76 391.46 - 393.21 395.02 396.88 398.79 400.77 402.79 404.88 407.01 / - 19 8 2 1 367.42 366.79 366.67 366.77 367.01 367.35 367.79 368.29 368.87 369.52 370.23 371.01 - 371.85 372.74 373.7 374.72 375.79 376.92 378.11 379.36 380.66 382.02 383.44 384.91 386.44 388.03 389.67 391.36 - 393.11 394.92 396.78 398.7 400.68 402.7 404.79 406.93 / - 19 8 3 1 367.26 366.62 366.49 366.59 366.83 367.17 367.6 368.11 368.69 369.34 370.05 370.82 - 371.66 372.56 373.52 374.53 375.61 376.74 377.93 379.18 380.48 381.84 383.26 384.73 386.26 387.85 389.49 391.19 - 392.94 394.75 396.62 398.54 400.51 402.55 404.63 406.77 / - 19 8 4 1 366.98 366.32 366.18 366.27 366.51 366.85 367.27 367.78 368.36 369.01 369.72 370.49 - 371.33 372.22 373.18 374.2 375.27 376.41 377.6 378.85 380.15 381.52 382.94 384.41 385.95 387.53 389.18 390.88 - 392.64 394.45 396.32 398.24 400.22 402.26 404.35 406.5 / - 19 8 5 1 366.44 365.74 365.59 365.67 365.9 366.24 366.66 367.17 367.74 368.39 369.1 369.88 - 370.71 371.61 372.57 373.59 374.66 375.8 376.99 378.25 379.56 380.92 382.35 383.83 385.37 386.96 388.61 390.32 - 392.08 393.9 395.78 397.71 399.7 401.74 403.84 406 / - 19 8 6 1 365.4 364.65 364.47 364.54 364.76 365.09 365.51 366.01 366.59 367.23 367.95 368.72 - 369.56 370.46 371.42 372.45 373.53 374.67 375.87 377.13 378.45 379.82 381.26 382.75 384.3 385.9 387.56 389.28 - 391.06 392.9 394.79 396.73 398.74 400.8 402.92 405.09 / - 19 8 7 1 363.36 362.52 362.31 362.36 362.57 362.89 363.31 363.81 364.39 365.03 365.75 366.53 - 367.38 368.29 369.26 370.29 371.39 372.55 373.76 375.04 376.37 377.77 379.22 380.74 382.31 383.94 385.63 387.37 - 389.18 391.04 392.97 394.95 396.99 399.08 401.24 403.45 / - 19 8 8 1 359.35 358.42 358.16 358.18 358.38 358.7 359.12 359.63 360.21 360.87 361.6 362.4 - 363.27 364.2 365.2 366.26 367.39 368.58 369.83 371.14 372.52 373.96 375.46 377.02 378.65 380.33 382.08 383.89 - 385.75 387.68 389.67 391.72 393.84 396.01 398.24 400.53 / - 19 8 9 1 351.77 350.48 350.02 349.91 350.03 350.3 350.69 351.19 351.78 352.46 353.22 354.06 - 354.98 355.97 357.03 358.17 359.38 360.66 362.01 363.43 364.91 366.47 368.09 369.78 371.54 373.37 375.27 377.23 - 379.26 381.35 383.51 385.74 388.03 390.4 392.82 395.32 / - 19 8 10 1 339.68 334.53 333.57 333.24 333.25 333.49 333.92 334.49 335.19 336.01 336.93 337.97 - 339.1 340.33 341.65 343.06 344.52 346.1 347.78 349.53 351.37 353.3 355.3 357.35 359.52 361.77 364.09 366.5 - 368.98 371.5 374.14 376.85 379.64 382.51 385.42 388.43 / - 19 8 11 1 322.75 309.76 308.9 308.73 308.97 309.49 310.23 311.16 312.25 313.5 314.9 316.43 - 318.09 319.88 321.8 323.83 325.99 328.26 330.64 333.14 335.75 338.46 341.29 344.22 347.25 350.39 353.63 356.97 - 360.41 363.94 367.57 371.27 375.07 378.94 382.91 386.94 / - 19 8 12 1 285.76 282.98 282.23 282.35 282.98 283.98 285.28 286.85 288.65 290.66 292.89 295.31 - 297.93 300.72 303.7 306.84 310.16 313.63 317.26 321.05 324.99 329.07 333.3 337.67 342.17 346.81 351.58 356.48 - 361.5 366.65 371.92 377.31 382.81 388.44 394.17 400.02 / - 19 8 13 1 259.37 257.63 257.9 258.89 260.41 262.32 264.58 267.16 270.17 273.48 277.05 280.89 - 285.02 289.36 294 298.9 304.01 309.37 314.95 320.76 326.64 332.87 339.31 345.95 352.8 359.81 367.01 374.44 - 381.76 389.54 397.5 405.3 413.61 422.09 430.35 439.17 / - 19 8 14 1 239.91 239.85 241.27 243.71 247.04 250.98 255.42 260.31 265.59 271.25 277.28 283.65 - 290.37 297.41 304.77 312.44 320.41 328.67 337.22 346.05 355.16 364.53 374.17 384.06 394.21 404.61 415.26 426.15 - 437.28 449.59 462.21 475 487.84 500.76 514.15 527.67 / - 19 8 15 1 229.5 233.2 237.69 242.92 248.89 255.59 263 271.12 279.95 289.38 299.39 309.97 - 321.11 332.8 345.03 357.79 371.07 384.87 399.17 413.92 429.1 444.72 460.78 477.29 494.23 511.61 529.43 547.68 - 566.38 585.51 605.08 625.11 645.61 667.06 689.91 713.16 / - 19 8 16 1 227.03 233.66 241.65 250.83 261.48 273.51 286.87 301.48 317.3 334.28 352.38 371.54 - 391.69 412.83 434.87 457.8 481.63 506.34 531.94 558.43 585.78 613.92 642.83 672.56 703.29 735.03 767.66 801.04 - 835.2 870.15 906.4 944.4 983.03 1021.98 1061.05 1100.67 / - 19 8 17 1 226.86 238.83 254.35 272.83 294.06 317.88 344.21 372.92 403.91 437.05 472.27 509.53 - 548.7 589.64 632.18 676.34 722.57 770.89 821.24 873.6 927.89 983.79 1041.02 1099.41 1160.11 1220.9 1280.38 1331.61 - 1386.82 1441.92 1500.44 1558.55 1619.18 1680.33 1743.15 1806.38 / - 19 8 18 1 232.33 257.51 290.42 329.63 374.3 424 478.32 537.38 600.99 668.53 740.39 817.04 - 898.3 984 1073.74 1166.51 1259.7 1347.15 1433.39 1524.57 1617.21 1712.47 1810.56 1909.93 2010.46 2113.09 2216.22 2323.61 - 2433.02 2543.83 2656.28 2770.08 2885.81 3003.14 3121.73 3241.45 / - 19 8 19 1 248.61 301.14 371.71 455.75 550.73 655.14 770.81 897.11 1034.75 1182.63 1326.3 1471.86 - 1621.15 1775.54 1937.36 2111.93 2286.16 2465.32 2650.53 2844.87 3038.32 3242.02 3459.88 3672.13 3893.77 4119.11 4350.49 4585.29 - 4821.68 5069.82 5323.41 5569.98 5830.33 6097.73 6371.15 6646.56 / - 19 8 20 1 284.66 381.47 513.98 688.88 895.87 1130.98 1371.71 1625.21 1888.44 2180 2483.82 2785.41 - 3122.46 3462.23 3837.37 4208.12 4592.22 5026.49 5449.77 5878.57 6330.79 6794.31 7279.82 7782.73 8294.71 8820.02 9358.53 9917.06 - 10482.04 11062.41 11658.91 12270.9 12897.72 13526.47 14220.59 14902.49 / - 19 9 1 1 369.64 368.89 368.72 368.79 369.01 369.34 369.76 370.26 370.84 371.48 372.19 372.96 - 373.8 374.69 375.65 376.66 377.74 378.87 380.06 381.31 382.61 383.98 385.39 386.87 388.4 389.99 391.64 393.34 - 395.09 396.9 398.77 400.7 402.68 404.71 406.8 408.95 / - 19 9 2 1 369.56 368.79 368.62 368.69 368.91 369.24 369.66 370.16 370.73 371.38 372.08 372.86 - 373.69 374.59 375.54 376.56 377.63 378.76 379.96 381.2 382.51 383.87 385.29 386.77 388.3 389.89 391.53 393.23 - 394.99 396.81 398.67 400.6 402.58 404.62 406.71 408.86 / - 19 9 3 1 369.4 368.62 368.44 368.51 368.72 369.05 369.47 369.97 370.54 371.19 371.89 372.67 - 373.5 374.4 375.35 376.37 377.44 378.57 379.76 381.01 382.32 383.68 385.1 386.58 388.11 389.71 391.35 393.05 - 394.81 396.63 398.5 400.43 402.41 404.45 406.54 408.69 / - 19 9 4 1 369.11 368.31 368.11 368.17 368.39 368.71 369.13 369.63 370.2 370.84 371.55 372.32 - 373.15 374.05 375.01 376.02 377.1 378.23 379.42 380.67 381.98 383.35 384.77 386.25 387.78 389.38 391.03 392.73 - 394.49 396.31 398.19 400.12 402.1 404.15 406.25 408.4 / - 19 9 5 1 368.55 367.72 367.51 367.56 367.76 368.08 368.5 368.99 369.56 370.2 370.91 371.68 - 372.52 373.41 374.37 375.39 376.46 377.6 378.79 380.05 381.36 382.73 384.15 385.64 387.18 388.78 390.43 392.14 - 393.91 395.74 397.62 399.56 401.55 403.61 405.71 407.88 / - 19 9 6 1 367.48 366.59 366.35 366.38 366.58 366.89 367.3 367.79 368.36 369 369.71 370.48 - 371.32 372.22 373.18 374.2 375.28 376.42 377.62 378.88 380.2 381.58 383.02 384.51 386.06 387.67 389.34 391.06 - 392.85 394.69 396.58 398.54 400.55 402.62 404.75 406.93 / - 19 9 7 1 365.37 364.38 364.1 364.11 364.3 364.6 365.01 365.5 366.07 366.71 367.42 368.2 - 369.04 369.95 370.92 371.95 373.05 374.21 375.42 376.7 378.04 379.43 380.89 382.41 383.99 385.62 387.32 389.07 - 390.88 392.75 394.68 396.67 398.72 400.82 402.99 405.21 / - 19 9 8 1 361.25 360.13 359.79 359.77 359.94 360.24 360.65 361.14 361.72 362.37 363.1 363.89 - 364.76 365.69 366.69 367.75 368.88 370.07 371.32 372.64 374.02 375.47 376.97 378.54 380.17 381.86 383.62 385.43 - 387.31 389.25 391.25 393.31 395.43 397.62 399.86 402.17 / - 19 9 9 1 353.46 351.81 351.16 350.95 351 351.22 351.57 352.05 352.62 353.29 354.05 354.88 - 355.8 356.8 357.87 359.01 360.23 361.52 362.89 364.32 365.82 367.4 369.04 370.76 372.54 374.39 376.31 378.3 - 380.35 382.48 384.67 386.93 389.25 391.64 394.1 396.63 / - 19 9 10 1 341.45 335.02 334.02 333.63 333.61 333.85 334.27 334.85 335.55 336.38 337.32 338.38 - 339.53 340.79 342.13 343.57 345.11 346.68 348.39 350.18 352.06 354.02 356.07 358.15 360.37 362.66 365.03 367.48 - 369.98 372.59 375.28 378.04 380.89 383.78 386.77 389.84 / - 19 9 11 1 323.21 309.94 309.07 308.9 309.14 309.67 310.43 311.37 312.49 313.76 315.18 316.73 - 318.42 320.24 322.19 324.26 326.45 328.75 331.18 333.72 336.37 339.13 342 344.97 348.06 351.25 354.54 357.93 - 361.43 365.02 368.72 372.51 376.4 380.39 384.48 388.65 / - 19 9 12 1 285.98 283.2 282.46 282.6 283.25 284.27 285.6 287.19 289.01 291.06 293.33 295.79 - 298.44 301.28 304.3 307.49 310.85 314.38 318.06 321.91 325.9 330.05 334.34 338.77 343.33 348.04 352.88 357.84 - 362.94 368.16 373.5 378.97 384.55 390.25 396.07 402 / - 19 9 13 1 259.37 257.76 258.08 259.14 260.68 262.61 264.9 267.5 270.41 273.61 277.17 281.19 - 285.36 289.8 294.43 299.36 304.53 309.95 315.57 321.41 327.48 333.76 340.26 346.96 353.65 360.74 368.02 375.46 - 383.08 390.93 398.64 406.83 415.21 423.76 432.09 440.99 / - 19 9 14 1 240.02 240.01 241.46 243.94 247.3 251.29 255.77 260.7 266.02 271.73 277.79 284.21 - 290.96 298.04 305.45 313.16 321.17 329.49 338.09 346.97 356.13 365.56 375.25 385.2 395.41 405.87 416.58 427.53 - 438.73 450.17 462.51 475.48 488.67 501.94 515.47 529.09 / - 19 9 15 1 229.57 233.44 237.97 243.24 249.24 255.97 263.4 271.53 280.37 289.84 299.89 310.5 - 321.68 333.4 345.66 358.46 371.77 385.6 399.95 414.76 430.01 445.7 461.82 478.38 495.38 512.82 530.69 549 - 567.75 586.93 606.56 626.64 647.18 668.19 690.14 713.53 / - 19 9 16 1 227.01 233.78 241.88 251.1 261.77 273.82 287.19 301.82 317.66 334.65 352.75 371.94 - 392.13 413.29 435.38 458.35 482.2 506.92 532.53 559.01 586.35 614.48 643.36 673.02 703.67 735.33 767.97 801.46 - 835.68 870.66 906.4 943.97 982.79 1022.1 1061.48 1101.06 / - 19 9 17 1 226.84 238.91 254.49 273.02 294.28 318.1 344.41 373.11 404.07 437.2 472.37 509.58 - 548.75 589.67 632.18 676.24 722.32 770.49 820.69 872.86 926.98 982.92 1040.23 1098.68 1158.49 1219.91 1280.56 1334.08 - 1390.78 1447.66 1508.28 1567.96 1629.95 1692.24 1757.28 1820.89 / - 19 9 18 1 232.29 257.6 290.56 329.84 374.52 424.22 478.48 537.41 600.87 668.28 739.91 816.27 - 897.23 982.6 1072.06 1164.78 1258.45 1346.38 1433.09 1524.82 1620.03 1715.19 1815.22 1916.53 2018.87 2123.15 2229.03 2336.93 - 2447.98 2560.39 2674.55 2790.2 2907.74 3026.97 3147.54 3269.34 / - 19 9 19 1 248.15 300.53 371.26 455.12 550.15 654.16 770.43 896.4 1033.6 1176.76 1325.01 1466.2 - 1621.25 1776.46 1939.15 2117.29 2290.15 2470.45 2656.01 2852.17 3047.67 3252.94 3474.13 3686.45 3910.01 4137.22 4370.88 4609.65 - 4850.58 5104.16 5362.7 5614.37 5879.82 6151.99 6430.74 6711.35 / - 19 9 20 1 284.7 381.65 510.18 685.84 890.73 1124.41 1371.14 1618.68 1890.31 2171.72 2472.14 2792.68 - 3132.07 3474.09 3851.99 4225.31 4612.36 5015.51 5476.17 5908.5 6363.97 6827.36 7320.59 7807.84 8343.36 8872.74 9416.01 9956.65 - 10557.53 11148.74 11756.37 12379.67 13017.87 13658.75 14323.97 15058.71 / - 19 10 1 1 371.76 370.89 370.66 370.7 370.91 371.22 371.64 372.13 372.7 373.34 374.04 374.81 - 375.64 376.53 377.49 378.5 379.58 380.71 381.9 383.15 384.46 385.82 387.24 388.72 390.26 391.85 393.5 395.2 - 396.96 398.78 400.66 402.59 404.57 406.61 408.71 410.86 / - 19 10 2 1 371.67 370.79 370.56 370.6 370.8 371.12 371.53 372.02 372.59 373.23 373.93 374.7 - 375.53 376.42 377.38 378.39 379.47 380.6 381.79 383.04 384.35 385.71 387.13 388.61 390.15 391.74 393.39 395.1 - 396.86 398.68 400.55 402.48 404.47 406.51 408.61 410.77 / - 19 10 3 1 371.51 370.62 370.38 370.41 370.61 370.93 371.34 371.83 372.39 373.03 373.73 374.5 - 375.33 376.23 377.18 378.2 379.27 380.4 381.59 382.84 384.15 385.52 386.94 388.42 389.96 391.55 393.2 394.91 - 396.67 398.49 400.37 402.3 404.29 406.34 408.44 410.6 / - 19 10 4 1 371.21 370.29 370.04 370.07 370.26 370.58 370.98 371.47 372.04 372.67 373.37 374.14 - 374.97 375.87 376.82 377.84 378.91 380.04 381.24 382.49 383.8 385.16 386.59 388.07 389.61 391.21 392.86 394.57 - 396.34 398.16 400.04 401.98 403.97 406.02 408.13 410.29 / - 19 10 5 1 370.64 369.68 369.41 369.43 369.62 369.92 370.33 370.81 371.37 372.01 372.71 373.48 - 374.31 375.2 376.16 377.17 378.25 379.39 380.58 381.84 383.15 384.52 385.95 387.43 388.98 390.58 392.24 393.96 - 395.73 397.56 399.45 401.39 403.4 405.45 407.57 409.74 / - 19 10 6 1 369.54 368.51 368.21 368.21 368.38 368.68 369.08 369.56 370.12 370.75 371.46 372.23 - 373.06 373.95 374.91 375.93 377.02 378.16 379.36 380.62 381.94 383.32 384.76 386.26 387.81 389.42 391.1 392.83 - 394.61 396.46 398.36 400.32 402.34 404.42 406.56 408.75 / - 19 10 7 1 367.36 366.23 365.88 365.85 366.01 366.3 366.69 367.17 367.73 368.36 369.07 369.84 - 370.68 371.59 372.56 373.59 374.69 375.84 377.06 378.34 379.68 381.08 382.54 384.06 385.64 387.28 388.98 390.74 - 392.56 394.44 396.38 398.37 400.43 402.54 404.72 406.95 / - 19 10 8 1 363.12 361.82 361.4 361.33 361.47 361.75 362.14 362.62 363.19 363.84 364.56 365.35 - 366.22 367.15 368.14 369.21 370.33 371.53 372.78 374.11 375.49 376.94 378.45 380.02 381.66 383.36 385.12 386.95 - 388.83 390.78 392.79 394.87 397 399.2 401.45 403.77 / - 19 10 9 1 355.16 353.1 352.24 351.9 351.87 352.03 352.35 352.79 353.35 354.01 354.75 355.59 - 356.51 357.51 358.59 359.74 360.98 362.28 363.66 365.12 366.64 368.24 369.91 371.65 373.45 375.33 377.28 379.3 - 381.39 383.55 385.78 388.07 390.43 392.86 395.36 397.93 / - 19 10 10 1 343.23 335.38 334.33 333.93 333.91 334.15 334.58 335.17 335.9 336.75 337.72 338.81 - 339.99 341.28 342.62 344.1 345.67 347.33 349.08 350.87 352.8 354.81 356.9 359.08 361.29 363.63 366.05 368.55 - 371.08 373.74 376.47 379.29 382.15 385.13 388.18 391.31 / - 19 10 11 1 323.98 310.12 309.24 309.07 309.32 309.86 310.63 311.59 312.72 314.02 315.46 317.04 - 318.76 320.61 322.58 324.69 326.91 329.26 331.72 334.3 337 339.8 342.72 345.75 348.88 352.12 355.47 358.92 - 362.47 366.12 369.87 373.72 377.67 381.72 385.86 390.1 / - 19 10 12 1 286.21 283.41 282.69 282.84 283.51 284.56 285.91 287.52 289.38 291.47 293.76 296.26 - 298.95 301.84 304.9 308.08 311.48 315.05 318.79 322.68 326.72 330.92 335.26 339.74 344.37 349.13 354.03 359.05 - 364.21 369.49 374.9 380.43 386.08 391.85 397.73 403.73 / - 19 10 13 1 259.35 257.87 258.3 259.39 260.95 262.91 265.22 267.85 270.79 274.02 277.53 281.3 - 285.39 290.05 294.85 299.85 305.01 310.53 316.14 322.07 328.17 334.49 341.03 347.77 354.72 361.87 369.21 376.48 - 384.19 392.05 400.1 408.36 416.81 425.06 433.85 442.82 / - 19 10 14 1 240.13 240.17 241.66 244.17 247.58 251.6 256.13 261.09 266.46 272.2 278.31 284.77 - 291.56 298.68 306.13 313.88 321.95 330.3 338.95 347.88 357.09 366.57 376.32 386.33 396.6 407.12 417.89 428.9 - 440.16 451.67 463.41 475.75 489.09 502.68 516.39 530.21 / - 19 10 15 1 229.66 233.68 238.27 243.57 249.61 256.36 263.82 271.97 280.81 290.3 300.38 311.03 - 322.24 334 346.29 359.11 372.46 386.32 400.68 415.55 430.87 446.62 462.81 479.42 496.48 513.97 531.9 550.26 - 569.06 588.3 607.97 628.1 648.68 669.73 691.2 713.63 / - 19 10 16 1 227.02 233.91 242.09 251.38 262.08 274.15 287.53 302.17 318.01 335 353.11 372.31 - 392.53 413.71 435.84 458.84 482.72 507.46 533.07 559.54 586.87 614.98 643.82 673.42 703.98 735.54 768.08 801.59 - 835.91 870.95 906.72 943.23 981.58 1021.14 1061.07 1100.9 / - 19 10 17 1 226.85 238.99 254.64 273.22 294.5 318.32 344.61 373.28 404.21 437.3 472.44 509.6 - 548.73 589.64 632.11 676.07 722.01 770.02 820.04 872.02 925.94 981.72 1039.14 1097.69 1157.05 1218.4 1280.07 1335.44 - 1394.04 1453.36 1514.03 1575.66 1639.04 1702.79 1770.12 1834.71 / - 19 10 18 1 232.26 257.68 290.7 330.03 374.72 424.4 478.63 537.41 600.71 667.99 739.39 815.46 - 896.08 981.11 1070.25 1162.76 1256.83 1345.29 1433.73 1524.81 1620.59 1716.41 1817.11 1919.52 2023.55 2129.99 2240.57 2348.95 - 2462.44 2577.17 2693.54 2811.35 2931.04 3052.36 3175.06 3299.13 / - 19 10 19 1 247.81 300.23 370.8 454.48 549.21 653.52 767.87 895.65 1029.09 1175.22 1323.65 1465.53 - 1621.33 1777.41 1940.99 2120.14 2294.23 2475.78 2661.78 2859.77 3057.42 3264.23 3475.88 3701.37 3926.83 4156.11 4391.7 4632.71 - 4875.84 5132.61 5395.72 5652.76 5924.28 6201.9 6486.13 6772.74 / - 19 10 20 1 284.77 381.9 505.56 680.04 885.69 1117.26 1363.47 1614.81 1885.43 2175.4 2477.73 2800.49 - 3123.81 3486.67 3840.4 4243.65 4633.85 5040.26 5504.41 5940.48 6399.4 6862.87 7359.92 7855.78 8374.46 8929.09 9476.75 10022.62 - 10600.65 11226.46 11842.8 12476.75 13127.45 13782.96 14463.26 15168.38 / - 19 11 1 1 373.84 372.87 372.6 372.61 372.8 373.1 373.5 373.99 374.55 375.18 375.88 376.65 - 377.48 378.37 379.32 380.34 381.41 382.54 383.73 384.98 386.29 387.66 389.08 390.56 392.1 393.69 395.35 397.06 - 398.82 400.64 402.52 404.46 406.45 408.5 410.61 412.77 / - 19 11 2 1 373.75 372.77 372.49 372.5 372.69 372.99 373.39 373.88 374.44 375.07 375.77 376.53 - 377.36 378.25 379.21 380.22 381.29 382.43 383.62 384.87 386.18 387.54 388.97 390.45 391.99 393.58 395.24 396.95 - 398.71 400.54 402.42 404.35 406.35 408.4 410.5 412.67 / - 19 11 3 1 373.58 372.59 372.3 372.31 372.49 372.79 373.19 373.67 374.23 374.87 375.56 376.33 - 377.16 378.05 379 380.02 381.09 382.22 383.41 384.66 385.97 387.34 388.76 390.25 391.79 393.38 395.04 396.75 - 398.52 400.34 402.23 404.16 406.16 408.21 410.32 412.49 / - 19 11 4 1 373.28 372.26 371.96 371.96 372.13 372.43 372.83 373.31 373.86 374.49 375.19 375.96 - 376.78 377.68 378.63 379.64 380.71 381.85 383.04 384.29 385.6 386.97 388.4 389.88 391.42 393.02 394.68 396.4 - 398.17 400 401.88 403.83 405.83 407.88 410 412.17 / - 19 11 5 1 372.7 371.63 371.31 371.29 371.46 371.75 372.14 372.62 373.18 373.8 374.5 375.26 - 376.09 376.98 377.94 378.95 380.03 381.16 382.36 383.61 384.92 386.3 387.73 389.22 390.76 392.37 394.03 395.75 - 397.53 399.37 401.26 403.21 405.22 407.29 409.41 411.59 / - 19 11 6 1 371.56 370.41 370.06 370.02 370.17 370.46 370.84 371.31 371.87 372.49 373.19 373.95 - 374.78 375.68 376.64 377.65 378.73 379.88 381.08 382.34 383.66 385.04 386.48 387.98 389.54 391.16 392.84 394.57 - 396.36 398.21 400.12 402.09 404.12 406.2 408.34 410.54 / - 19 11 7 1 369.32 368.05 367.63 367.56 367.7 367.96 368.34 368.81 369.36 369.99 370.69 371.46 - 372.3 373.2 374.17 375.2 376.3 377.45 378.67 379.95 381.29 382.7 384.16 385.69 387.27 388.92 390.62 392.39 - 394.21 396.1 398.04 400.05 402.11 404.24 406.42 408.66 / - 19 11 8 1 364.96 363.46 362.95 362.83 362.93 363.18 363.54 364.01 364.57 365.21 365.92 366.71 - 367.57 368.49 369.49 370.55 371.68 372.88 374.14 375.47 376.86 378.31 379.83 381.41 383.06 384.76 386.54 388.37 - 390.27 392.23 394.25 396.34 398.49 400.7 402.98 405.31 / - 19 11 9 1 356.85 354.34 353.2 352.71 352.6 352.72 353.01 353.44 353.99 354.64 355.39 356.23 - 357.15 358.17 359.26 360.43 361.68 363.01 364.41 365.88 367.43 369.06 370.76 372.53 374.37 376.28 378.26 380.32 - 382.44 384.64 386.9 389.23 391.64 394.11 396.65 399.26 / - 19 11 10 1 344.98 335.58 334.54 334.15 334.14 334.4 334.85 335.46 336.22 337.1 338.1 339.21 - 340.39 341.71 343.13 344.65 346.26 347.97 349.71 351.6 353.57 355.63 357.74 359.97 362.29 364.68 367.12 369.69 - 372.33 375.01 377.81 380.69 383.65 386.65 389.75 392.93 / - 19 11 11 1 324.18 310.31 309.41 309.24 309.5 310.05 310.83 311.81 312.96 314.27 315.74 317.35 - 319.09 320.97 322.98 325.12 327.38 329.77 332.27 334.9 337.64 340.49 343.45 346.53 349.72 353.01 356.41 359.91 - 363.52 367.24 371.05 374.96 378.98 383.09 387.3 391.6 / - 19 11 12 1 286.43 283.63 282.92 283.09 283.78 284.85 286.22 287.87 289.75 291.87 294.17 296.7 - 299.39 302.3 305.39 308.66 312.1 315.7 319.48 323.42 327.51 331.75 336.14 340.68 345.36 350.17 355.13 360.21 - 365.43 370.77 376.24 381.83 387.54 393.37 399.33 405.42 / - 19 11 13 1 259.39 258.07 258.52 259.63 261.22 263.2 265.54 268.2 271.17 274.43 277.97 281.78 - 285.85 290.17 294.88 300.09 305.46 311.01 316.76 322.71 328.91 335.23 341.8 348.59 355.58 362.77 370.16 377.74 - 385.52 393.48 401.32 409.6 418.06 426.74 435.61 444.23 / - 19 11 14 1 240.25 240.33 241.86 244.43 247.85 251.93 256.49 261.5 266.9 272.69 278.84 285.33 - 292.17 299.33 306.82 314.61 322.72 331.12 339.81 348.79 358.05 367.58 377.39 387.45 397.77 408.35 419.18 430.26 - 441.58 453.15 464.95 477 489.28 503 516.59 530.8 / - 19 11 15 1 229.77 233.95 238.57 243.92 249.98 256.76 264.24 272.42 281.27 290.78 300.89 311.57 - 322.81 334.59 346.91 359.75 373.12 387 401.39 416.28 431.65 447.47 463.72 480.4 497.52 515.06 533.04 551.45 - 570.3 589.58 609.31 629.47 650.09 671.18 692.68 714.59 / - 19 11 16 1 227.06 234.05 242.29 251.66 262.38 274.47 287.87 302.51 318.36 335.35 353.46 372.65 - 392.88 414.08 436.22 459.27 483.18 507.94 533.55 560.01 587.31 615.4 644.21 673.74 704.2 735.65 768.08 801.46 - 835.79 870.94 906.78 943.31 980.54 1019.65 1059.93 1100.39 / - 19 11 17 1 226.88 239.08 254.79 273.41 294.72 318.54 344.8 373.43 404.31 437.36 472.46 509.56 - 548.62 589.53 631.97 675.84 721.62 769.46 819.28 871.06 924.74 980.3 1037.64 1096.34 1155.86 1216.34 1279.04 1331.05 - 1386.59 1443.58 1499.71 1559.01 1617.51 1677.44 1741.9 1801.46 / - 19 11 18 1 232.26 257.77 290.84 330.2 374.89 424.52 478.75 537.37 600.51 667.64 738.81 814.58 - 894.85 979.5 1068.28 1160.53 1254.89 1343.96 1433.18 1524.64 1621.14 1719.21 1818.97 1922.14 2027 2134.27 2245.99 2355.66 - 2471.21 2588.51 2707.85 2828.86 2951.63 3076.1 3201.88 3328.98 / - 19 11 19 1 247.46 299.94 370.35 454.57 548.21 652.9 767.4 892.15 1027.83 1173.57 1322.32 1464.9 - 1621.47 1778.4 1943 2112.45 2298.57 2481.45 2669.07 2867.29 3067.24 3276.27 3489.82 3708.43 3944.66 4176.19 4413.79 4657.14 - 4902.62 5161.7 5427.19 5687.19 5962.13 6244.18 6534.33 6827.51 / - 19 11 20 1 284.89 382.25 498.99 677.32 877.18 1110.16 1357.49 1609.94 1880.75 2165 2483.89 2793.2 - 3134.66 3500.23 3857.08 4263.54 4656.91 5066.98 5488.12 5974.84 6437.82 6905.39 7397.69 7912.04 8430.38 8967.82 9542.44 10093.57 - 10676.38 11277.63 11928.99 12568.63 13225.91 13887.61 14575.52 15290.62 / - 19 12 1 1 375.87 374.82 374.51 374.5 374.67 374.96 375.36 375.84 376.39 377.02 377.72 378.48 - 379.3 380.19 381.14 382.16 383.23 384.36 385.55 386.8 388.11 389.48 390.9 392.39 393.93 395.53 397.18 398.9 - 400.67 402.5 404.38 406.32 408.32 410.38 412.49 414.66 / - 19 12 2 1 375.78 374.72 374.41 374.39 374.56 374.85 375.24 375.72 376.28 376.9 377.6 378.36 - 379.19 380.08 381.03 382.04 383.11 384.24 385.43 386.68 387.99 389.36 390.79 392.27 393.81 395.41 397.07 398.78 - 400.55 402.38 404.27 406.21 408.21 410.27 412.38 414.55 / - 19 12 3 1 375.61 374.54 374.21 374.2 374.36 374.65 375.04 375.51 376.07 376.69 377.39 378.15 - 378.97 379.86 380.81 381.82 382.9 384.03 385.22 386.47 387.78 389.15 390.58 392.06 393.6 395.2 396.86 398.58 - 400.35 402.18 404.07 406.01 408.01 410.07 412.19 414.36 / - 19 12 4 1 375.3 374.2 373.86 373.83 373.99 374.27 374.66 375.13 375.68 376.31 377 377.76 - 378.58 379.47 380.42 381.43 382.51 383.64 384.83 386.08 387.4 388.76 390.19 391.68 393.22 394.83 396.49 398.21 - 399.98 401.82 403.71 405.65 407.66 409.72 411.85 414.02 / - 19 12 5 1 374.7 373.55 373.18 373.14 373.29 373.56 373.94 374.41 374.96 375.58 376.28 377.04 - 377.86 378.75 379.7 380.71 381.79 382.92 384.12 385.37 386.69 388.06 389.49 390.98 392.53 394.14 395.81 397.53 - 399.32 401.16 403.05 405.01 407.03 409.1 411.23 413.42 / - 19 12 6 1 373.54 372.29 371.88 371.81 371.94 372.21 372.58 373.05 373.59 374.21 374.9 375.66 - 376.49 377.38 378.34 379.35 380.43 381.57 382.77 384.04 385.36 386.74 388.19 389.69 391.25 392.87 394.55 396.29 - 398.09 399.95 401.86 403.84 405.87 407.96 410.11 412.32 / - 19 12 7 1 371.23 369.83 369.35 369.24 369.35 369.6 369.97 370.42 370.97 371.59 372.28 373.05 - 373.88 374.78 375.75 376.78 377.87 379.03 380.25 381.53 382.88 384.28 385.75 387.28 388.87 390.52 392.23 394 - 395.83 397.73 399.68 401.69 403.77 405.9 408.09 410.35 / - 19 12 8 1 366.73 365 364.36 364.17 364.22 364.43 364.77 365.22 365.76 366.39 367.09 367.88 - 368.73 369.66 370.65 371.72 372.85 374.05 375.32 376.65 378.05 379.51 381.04 382.64 384.29 386.02 387.8 389.65 - 391.57 393.54 395.59 397.69 399.86 402.09 404.39 406.74 / - 19 12 9 1 358.54 355.17 353.95 353.34 353.19 353.28 353.55 353.97 354.51 355.16 355.91 356.76 - 357.7 358.73 359.84 361.03 362.31 363.66 365.09 366.59 368.17 369.83 371.56 373.36 375.24 377.19 379.21 381.31 - 383.47 385.71 388.02 390.39 392.84 395.36 397.95 400.6 / - 19 12 10 1 346.68 335.6 334.61 334.27 334.3 334.58 335.07 335.71 336.5 337.42 338.45 339.6 - 340.82 342.17 343.63 345.19 346.85 348.55 350.39 352.33 354.35 356.42 358.62 360.91 363.29 365.7 368.24 370.87 - 373.58 376.32 379.2 382.15 385.14 388.25 391.44 394.67 / - 19 12 11 1 324.79 310.49 309.58 309.41 309.67 310.24 311.03 312.03 313.2 314.53 316.02 317.66 - 319.43 321.35 323.39 325.56 327.86 330.29 332.83 335.5 338.28 341.19 344.2 347.33 350.57 353.91 357.37 360.93 - 364.6 368.37 372.25 376.23 380.3 384.48 388.76 393.13 / - 19 12 12 1 286.66 283.85 283.15 283.34 284.05 285.14 286.54 288.19 290.08 292.21 294.56 297.13 - 299.81 302.75 305.88 309.18 312.67 316.32 320.14 324.11 328.25 332.54 336.98 341.56 346.29 351.15 356.16 361.3 - 366.57 371.97 377.49 383.14 388.91 394.81 400.82 406.95 / - 19 12 13 1 259.37 258.27 258.75 259.88 261.49 263.5 265.86 268.54 271.54 274.83 278.41 282.25 - 286.36 290.72 295.33 300.17 305.43 311.24 317.16 323.24 329.51 335.95 342.62 349.4 356.43 363.67 371.1 378.73 - 386.56 394.58 402.78 411.18 419.4 428.1 436.97 446.08 / - 19 12 14 1 240.38 240.5 242.06 244.69 248.14 252.26 256.87 261.92 267.36 273.19 279.37 285.91 - 292.78 299.99 307.51 315.35 323.5 331.94 340.68 349.7 359.01 368.59 378.44 388.56 398.93 409.57 420.45 431.59 - 442.98 454.6 466.47 478.58 490.94 503.52 516.77 531.15 / - 19 12 15 1 229.9 234.23 238.9 244.27 250.36 257.17 264.67 272.87 281.73 291.26 301.4 312.11 - 323.37 335.17 347.51 360.38 373.76 387.66 402.06 416.95 432.34 448.22 464.54 481.28 498.46 516.06 534.09 552.55 - 571.44 590.77 610.53 630.73 651.39 672.49 694.02 715.95 / - 19 12 16 1 227.14 234.21 242.51 251.96 262.69 274.8 288.2 302.86 318.7 335.69 353.79 372.97 - 393.18 414.4 436.53 459.6 483.54 508.32 533.93 560.38 587.66 615.73 644.5 673.97 704.35 735.7 768 801.25 - 835.43 870.53 906.48 943.09 980.37 1018.29 1058.13 1099.05 / - 19 12 17 1 226.94 239.19 254.95 273.6 294.94 318.76 344.97 373.55 404.38 437.36 472.42 509.45 - 548.42 589.3 631.73 675.53 721.18 768.85 818.46 870.01 923.44 978.74 1035.82 1094.54 1154.3 1214.57 1277.54 1332.06 - 1387.37 1444.9 1502.24 1562.29 1622.11 1683.02 1748.59 1809.14 / - 19 12 18 1 232.27 257.86 290.96 330.34 375.02 424.6 478.79 537.28 600.23 667.2 738.21 813.69 - 893.59 977.81 1066.19 1158.13 1252.58 1342.09 1431.83 1523.89 1620.94 1720.64 1820.29 1924.3 2030.03 2138.26 2251.06 2361.7 - 2478.44 2597.01 2717.59 2840.12 2964.88 3091.7 3220.39 3351.01 / - 19 12 19 1 247.12 299.65 369.91 453.81 548.32 651.96 765.76 891.32 1026.54 1171.84 1317.19 1464.25 - 1615.41 1779.53 1945.16 2115.83 2303.27 2487.54 2676.73 2875.49 3077.81 3289.09 3504.6 3725.33 3963.74 4197.55 4437.4 4683.43 - 4934.1 5193.08 5460.88 5723.92 6002.09 6286.47 6579.67 6876.43 / - 19 12 20 1 285.04 382.72 497.69 670.58 872.76 1103.23 1350.13 1602.73 1876.93 2169.54 2476.89 2802.38 - 3146.6 3489.33 3875.11 4252.72 4681.94 5095.91 5520.84 5969.27 6479.39 6951.45 7448.26 7966.1 8488.42 9033.32 9590.02 10170.04 - 10757.88 11364.66 11990.47 12667.95 13331.76 14000.41 14695.1 15417.17 / - 19 13 1 1 377.84 376.74 376.4 376.38 376.53 376.82 377.2 377.67 378.22 378.84 379.54 380.3 - 381.12 382.01 382.96 383.97 385.04 386.17 387.36 388.61 389.92 391.29 392.72 394.2 395.75 397.35 399.01 400.72 - 402.5 404.33 406.22 408.17 410.17 412.23 414.35 416.53 / - 19 13 2 1 377.75 376.64 376.29 376.26 376.42 376.7 377.08 377.55 378.1 378.72 379.42 380.17 - 381 381.88 382.83 383.84 384.92 386.05 387.24 388.49 389.8 391.17 392.59 394.08 395.62 397.23 398.88 400.6 - 402.38 404.21 406.1 408.05 410.05 412.12 414.24 416.42 / - 19 13 3 1 377.58 376.45 376.1 376.06 376.21 376.49 376.87 377.34 377.88 378.51 379.2 379.95 - 380.78 381.66 382.61 383.62 384.69 385.82 387.01 388.27 389.58 390.94 392.37 393.86 395.4 397.01 398.67 400.39 - 402.16 404 405.89 407.84 409.85 411.91 414.04 416.22 / - 19 13 4 1 377.26 376.1 375.73 375.68 375.82 376.1 376.47 376.94 377.48 378.1 378.79 379.55 - 380.37 381.25 382.2 383.21 384.28 385.42 386.61 387.86 389.17 390.54 391.97 393.46 395.01 396.61 398.28 400 - 401.78 403.62 405.51 407.47 409.48 411.55 413.68 415.86 / - 19 13 5 1 376.65 375.43 375.02 374.96 375.09 375.36 375.73 376.19 376.73 377.35 378.03 378.79 - 379.61 380.5 381.44 382.46 383.53 384.66 385.86 387.11 388.43 389.8 391.24 392.73 394.28 395.89 397.56 399.29 - 401.08 402.92 404.83 406.79 408.81 410.89 413.03 415.22 / - 19 13 6 1 375.45 374.12 373.67 373.57 373.68 373.94 374.3 374.75 375.29 375.9 376.59 377.35 - 378.17 379.06 380.01 381.02 382.1 383.24 384.45 385.71 387.03 388.42 389.86 391.37 392.93 394.56 396.24 397.98 - 399.79 401.65 403.57 405.55 407.59 409.69 411.85 414.07 / - 19 13 7 1 373.08 371.56 371.02 370.88 370.96 371.19 371.54 371.99 372.53 373.14 373.83 374.59 - 375.42 376.32 377.28 378.31 379.41 380.56 381.79 383.07 384.42 385.83 387.3 388.83 390.42 392.08 393.8 395.58 - 397.42 399.32 401.28 403.3 405.38 407.53 409.73 412 / - 19 13 8 1 368.41 366.42 365.63 365.34 365.33 365.5 365.81 366.23 366.75 367.36 368.06 368.84 - 369.69 370.62 371.62 372.68 373.82 375.03 376.31 377.65 379.06 380.54 382.08 383.69 385.36 387.1 388.91 390.78 - 392.72 394.72 396.78 398.91 401.1 403.36 405.68 408.07 / - 19 13 9 1 360.24 355.95 354.48 353.87 353.66 353.71 353.96 354.38 354.92 355.58 356.35 357.21 - 358.17 359.22 360.35 361.57 362.87 364.25 365.71 367.25 368.81 370.5 372.27 374.12 376.04 378.03 380.1 382.24 - 384.45 386.73 389.09 391.52 394.02 396.59 399.23 401.94 / - 19 13 10 1 348.3 335.3 334.47 334.23 334.34 334.69 335.22 335.92 336.74 337.7 338.77 339.95 - 341.25 342.63 344.13 345.71 347.41 349.18 351.07 353.06 355.11 357.28 359.48 361.83 364.27 366.79 369.35 372.04 - 374.83 377.64 380.58 383.61 386.68 389.87 393.09 396.44 / - 19 13 11 1 324.49 310.68 309.75 309.58 309.85 310.42 311.23 312.24 313.44 314.79 316.31 317.97 - 319.78 321.72 323.8 326.01 328.35 330.81 333.4 336.11 338.95 341.89 344.96 348.14 351.43 354.84 358.35 361.97 - 365.7 369.53 373.47 377.52 381.66 385.91 390.25 394.69 / - 19 13 12 1 286.89 284.07 283.39 283.59 284.31 285.41 286.81 288.5 290.39 292.56 294.94 297.53 - 300.25 303.22 306.38 309.73 313.25 316.94 320.8 324.82 329 333.33 337.82 342.45 347.23 352.15 357.21 362.4 - 368.06 373.54 379.14 384.87 390.73 396.7 402.8 409.02 / - 19 13 13 1 259.43 258.47 258.97 260.13 261.76 263.79 266.18 268.89 271.92 275.24 278.84 282.73 - 286.87 291.27 295.92 300.8 305.92 311.27 317.18 323.47 329.94 336.53 343.29 350.2 357.35 364.57 372.05 379.73 - 387.6 395.67 403.93 412.37 421.01 429.83 438.44 447.56 / - 19 13 14 1 240.5 240.66 242.28 244.97 248.44 252.6 257.26 262.35 267.84 273.7 279.93 286.5 - 293.41 300.66 308.22 316.1 324.28 332.76 341.54 350.61 359.96 369.58 379.48 389.64 400.07 410.76 421.7 432.89 - 444.33 456.02 467.95 480.12 492.53 505.18 518.07 531.19 / - 19 13 15 1 230.06 234.54 239.25 244.66 250.77 257.6 265.12 273.33 282.2 291.74 301.9 312.64 - 323.92 335.74 348.1 360.97 374.37 388.27 402.67 417.57 432.96 448.83 465.18 481.99 499.23 516.89 534.97 553.48 - 572.41 591.78 611.58 631.82 652.5 673.62 695.16 717.11 / - 19 13 16 1 227.23 234.4 242.75 252.27 263.02 275.13 288.54 303.19 319.04 336.02 354.1 373.25 - 393.44 414.64 436.77 459.81 483.75 508.56 534.18 560.61 587.86 615.9 644.64 674.06 704.37 735.63 767.83 800.95 - 834.99 869.94 905.8 942.54 979.99 1018.05 1056.68 1097.25 / - 19 13 17 1 227.01 239.31 255.12 273.79 295.13 318.97 345.13 373.65 404.4 437.3 472.26 509.23 - 548.11 588.91 631.34 675.1 720.65 768.18 817.63 868.97 922.17 977.22 1034.04 1092.52 1152.49 1213.52 1274.59 1331.27 - 1386.66 1445.44 1504.11 1565.11 1627.49 1688.62 1753.79 1816.89 / - 19 13 18 1 232.31 257.95 291.05 330.45 375.11 424.61 478.69 537.08 599.83 666.6 737.54 812.81 - 892.4 976.24 1064.23 1155.92 1250.35 1340.17 1430.48 1524.88 1620.81 1721.07 1821.58 1926.36 2033.02 2142.21 2255.84 2367.73 - 2485.44 2605.18 2726.9 2850.74 2976.91 3105.15 3235.36 3367.5 / - 19 13 19 1 246.96 299.36 369.53 453.03 547.34 651.07 764.18 890.5 1025.41 1170.43 1315.97 1463.74 - 1615.73 1780.87 1947.58 2119.57 2299.33 2494.24 2685.22 2885.54 3088.76 3301.88 3520.59 3743.64 3970.78 4220.63 4463.2 4711.58 - 4968.2 5226.8 5497.04 5763.86 6044.86 6331.96 6629.16 6928.99 / - 19 13 20 1 285.25 383.37 498.65 663.81 864.83 1090.58 1343.09 1595.95 1873.08 2168.65 2484.29 2812.43 - 3137.39 3505.74 3895.01 4276.24 4674.74 5127.18 5557.02 6009.27 6524.52 7001.87 7503.94 8020.93 8546.52 9102.63 9667.51 10243.76 - 10846.48 11459.31 12091.36 12742.82 13446.24 14122.78 14825 15554.37 / - 19 14 1 1 379.73 378.62 378.26 378.22 378.37 378.65 379.03 379.49 380.04 380.66 381.35 382.1 - 382.92 383.81 384.75 385.76 386.83 387.96 389.16 390.41 391.72 393.09 394.51 396 397.55 399.15 400.81 402.53 - 404.31 406.15 408.04 409.99 412 414.07 416.2 418.38 / - 19 14 2 1 379.63 378.51 378.15 378.11 378.25 378.53 378.9 379.37 379.91 380.53 381.22 381.97 - 382.79 383.68 384.63 385.63 386.7 387.84 389.03 390.28 391.59 392.96 394.38 395.87 397.42 399.02 400.68 402.41 - 404.18 406.02 407.92 409.87 411.88 413.95 416.08 418.26 / - 19 14 3 1 379.46 378.32 377.95 377.9 378.04 378.31 378.68 379.14 379.69 380.3 380.99 381.74 - 382.56 383.45 384.39 385.4 386.47 387.6 388.79 390.04 391.35 392.72 394.15 395.64 397.19 398.79 400.46 402.18 - 403.96 405.8 407.69 409.65 411.66 413.73 415.86 418.05 / - 19 14 4 1 379.14 377.96 377.56 377.5 377.63 377.9 378.27 378.73 379.27 379.88 380.57 381.32 - 382.14 383.02 383.97 384.97 386.04 387.17 388.37 389.62 390.93 392.3 393.73 395.22 396.77 398.38 400.04 401.77 - 403.55 405.4 407.3 409.26 411.27 413.35 415.48 417.67 / - 19 14 5 1 378.51 377.26 376.83 376.75 376.87 377.12 377.48 377.94 378.47 379.08 379.77 380.52 - 381.34 382.22 383.17 384.18 385.25 386.38 387.57 388.83 390.14 391.52 392.95 394.45 396 397.62 399.29 401.02 - 402.82 404.67 406.57 408.54 410.57 412.66 414.8 417 / - 19 14 6 1 377.28 375.89 375.41 375.29 375.38 375.62 375.98 376.42 376.95 377.56 378.24 378.99 - 379.81 380.7 381.65 382.66 383.74 384.88 386.08 387.34 388.67 390.06 391.5 393.01 394.58 396.21 397.9 399.65 - 401.45 403.32 405.25 407.24 409.29 411.4 413.56 415.79 / - 19 14 7 1 374.83 373.22 372.63 372.45 372.51 372.73 373.07 373.5 374.03 374.64 375.32 376.08 - 376.9 377.8 378.76 379.79 380.89 382.05 383.27 384.55 385.9 387.32 388.79 390.33 391.93 393.59 395.32 397.1 - 398.95 400.86 402.83 404.87 406.96 409.12 411.33 413.61 / - 19 14 8 1 369.99 367.7 366.74 366.34 366.24 366.36 366.63 367.02 367.52 368.12 368.81 369.58 - 370.43 371.36 372.36 373.44 374.59 375.81 377.1 378.45 379.88 381.38 382.94 384.57 386.27 388.03 389.86 391.76 - 393.73 395.76 397.85 400.01 402.24 404.53 406.89 409.31 / - 19 14 9 1 361.96 356.41 354.91 354.24 353.99 354.03 354.28 354.69 355.23 355.9 356.68 357.56 - 358.53 359.6 360.77 362.01 363.34 364.76 366.25 367.81 369.47 371.2 373.01 374.9 376.86 378.9 381.02 383.18 - 385.45 387.78 390.2 392.68 395.24 397.86 400.57 403.31 / - 19 14 10 1 349.79 335.13 334.38 334.21 334.36 334.76 335.33 336.06 336.93 337.93 339.04 340.27 - 341.61 343.05 344.6 346.25 348 349.84 351.75 353.77 355.88 358.08 360.38 362.77 365.24 367.82 370.47 373.21 - 376.04 378.95 381.96 385.04 388.2 391.47 394.8 398.23 / - 19 14 11 1 324.27 310.86 309.92 309.75 310.03 310.61 311.43 312.46 313.68 315.06 316.6 318.29 - 320.12 322.1 324.21 326.46 328.84 331.35 333.98 336.74 339.62 342.61 345.73 348.96 352.31 355.77 359.35 363.03 - 366.82 370.72 374.72 378.83 383.04 387.36 391.77 396.29 / - 19 14 12 1 287.12 284.3 283.62 283.84 284.56 285.67 287.08 288.8 290.72 292.91 295.32 297.88 - 300.69 303.7 306.9 310.28 313.84 317.57 321.47 325.54 329.76 334.15 338.68 343.37 348.2 353.43 358.56 363.83 - 369.23 374.77 380.43 386.22 392.14 398.18 404.34 410.62 / - 19 14 13 1 259.45 258.67 259.2 260.38 262.04 264.09 266.5 269.24 272.29 275.64 279.28 283.2 - 287.38 291.82 296.51 301.44 306.61 312.01 317.62 323.45 329.9 336.75 343.74 350.68 357.91 365.31 372.89 380.71 - 388.63 396.75 405.06 413.56 422.25 431.12 439.79 449.02 / - 19 14 14 1 240.64 240.84 242.5 245.27 248.78 253.01 257.72 262.85 268.38 274.28 280.54 287.14 - 294.09 301.36 308.95 316.86 325.08 333.59 342.41 351.51 360.89 370.56 380.5 390.7 401.17 411.91 422.89 434.14 - 445.63 457.37 469.35 481.58 494.05 506.75 519.7 532.88 / - 19 14 15 1 230.27 234.87 239.63 245.08 251.22 258.07 265.6 273.82 282.71 292.24 302.4 313.14 - 324.44 336.27 348.64 361.53 374.92 388.81 403.21 418.09 433.46 449.31 465.64 482.44 499.71 517.43 535.57 554.13 - 573.11 592.51 612.34 632.6 653.3 674.44 695.99 717.95 / - 19 14 16 1 227.37 234.63 243.02 252.61 263.37 275.48 288.88 303.52 319.34 336.31 354.37 373.49 - 393.64 414.79 436.9 459.89 483.79 508.55 534.16 560.59 587.81 615.82 644.52 673.89 704.13 735.29 767.38 800.37 - 834.25 869.04 904.71 941.27 978.69 1016.95 1055.85 1095.25 / - 19 14 17 1 227.12 239.48 255.31 273.99 295.32 319.11 345.24 373.68 404.35 437.14 471.97 508.8 - 547.6 588.27 630.7 674.45 719.91 767.3 816.57 867.69 920.66 975.43 1031.98 1090.32 1150.24 1211.17 1272.64 1329.77 - 1385.77 1445.3 1504.87 1566.91 1630.48 1693.07 1759.64 1824.57 / - 19 14 18 1 232.36 258.06 291.14 330.48 375.11 424.49 478.41 536.67 599.2 665.77 736.5 811.65 - 890.97 974.47 1062.09 1153.71 1247.81 1337.97 1428.87 1523.81 1620.47 1721.37 1822.78 1928.38 2035.97 2146.15 2260.74 2373.95 - 2492.76 2613.67 2736.74 2861.86 2989.42 3119.21 3250.97 3384.83 / - 19 14 19 1 246.82 299.09 369.18 452.26 546.27 651.07 763.81 886.9 1020.8 1165.15 1314.49 1463.13 - 1616.07 1775.72 1950.23 2123.61 2304.81 2501.43 2694.34 2896.46 3100.71 3315.69 3537.38 3763.47 3993.36 4233.47 4490.98 4742.58 - 5004.24 5263.51 5536.88 5806.97 6091.17 6381.97 6669.38 6985.88 / - 19 14 20 1 285.55 384.24 500.28 659.17 857.3 1085.07 1329.12 1589.58 1869.23 2161.21 2475.93 2804.3 - 3152.27 3524.05 3892.43 4302.31 4705.02 5162.4 5596.72 6053.65 6519 7058.04 7564.76 8087.22 8614.3 9173.26 9746.27 10333.57 - 10915.97 11563.01 12202.56 12861.42 13538.68 14234 14967.74 15705.08 / - 19 15 1 1 381.52 380.43 380.08 380.04 380.18 380.45 380.83 381.29 381.83 382.45 383.13 383.89 - 384.71 385.59 386.54 387.54 388.61 389.74 390.93 392.18 393.49 394.86 396.29 397.78 399.33 400.93 402.6 404.32 - 406.1 407.94 409.84 411.8 413.81 415.89 418.02 420.21 / - 19 15 2 1 381.43 380.33 379.96 379.92 380.06 380.33 380.7 381.16 381.7 382.32 383 383.76 - 384.57 385.46 386.4 387.41 388.48 389.61 390.8 392.05 393.36 394.73 396.16 397.65 399.19 400.8 402.46 404.19 - 405.97 407.81 409.71 411.67 413.68 415.76 417.89 420.08 / - 19 15 3 1 381.25 380.13 379.75 379.7 379.83 380.1 380.47 380.93 381.47 382.08 382.76 383.51 - 384.33 385.21 386.16 387.16 388.23 389.36 390.55 391.8 393.11 394.48 395.91 397.4 398.95 400.56 402.22 403.95 - 405.73 407.58 409.48 411.44 413.46 415.53 417.67 419.86 / - 19 15 4 1 380.92 379.75 379.35 379.29 379.41 379.67 380.03 380.49 381.02 381.63 382.32 383.06 - 383.88 384.76 385.7 386.71 387.78 388.91 390.1 391.35 392.66 394.04 395.47 396.96 398.51 400.12 401.79 403.52 - 405.31 407.15 409.06 411.02 413.04 415.13 417.27 419.46 / - 19 15 5 1 380.28 379.02 378.58 378.49 378.6 378.85 379.2 379.65 380.18 380.79 381.47 382.22 - 383.03 383.91 384.86 385.86 386.93 388.07 389.26 390.51 391.83 393.21 394.64 396.14 397.7 399.31 400.99 402.73 - 404.52 406.38 408.29 410.27 412.3 414.39 416.54 418.75 / - 19 15 6 1 379 377.59 377.08 376.95 377.03 377.26 377.6 378.04 378.56 379.17 379.84 380.59 - 381.41 382.29 383.24 384.25 385.33 386.47 387.67 388.94 390.26 391.65 393.1 394.61 396.18 397.82 399.51 401.26 - 403.08 404.95 406.89 408.89 410.94 413.06 415.23 417.47 / - 19 15 7 1 376.46 374.75 374.1 373.88 373.9 374.09 374.41 374.83 375.35 375.95 376.63 377.38 - 378.2 379.09 380.06 381.09 382.18 383.35 384.57 385.86 387.22 388.64 390.12 391.67 393.28 394.95 396.68 398.48 - 400.34 402.26 404.25 406.3 408.41 410.58 412.81 415.1 / - 19 15 8 1 371.47 368.84 367.67 367.14 366.95 367 367.23 367.59 368.07 368.65 369.33 370.1 - 370.95 371.88 372.89 373.98 375.14 376.38 377.69 379.07 380.52 382.04 383.63 385.29 387.02 388.82 390.68 392.62 - 394.62 396.69 398.82 401.03 403.3 405.63 408.03 410.5 / - 19 15 9 1 363.56 356.67 355.13 354.46 354.22 354.26 354.52 354.94 355.5 356.19 356.99 357.9 - 358.91 360.01 361.21 362.5 363.87 365.33 366.87 368.5 370.2 371.95 373.82 375.76 377.78 379.88 382.06 384.31 - 386.6 389 391.47 394.02 396.64 399.33 402.09 404.9 / - 19 15 10 1 351.13 335.24 334.46 334.26 334.41 334.8 335.38 336.12 337.01 338.02 339.15 340.4 - 341.76 343.22 344.8 346.47 348.25 350.13 352.1 354.18 356.35 358.61 360.97 363.43 365.97 368.61 371.34 374.16 - 377.06 380.06 383.14 386.33 389.61 392.95 396.38 399.89 / - 19 15 11 1 323.82 311.04 310.09 309.92 310.2 310.79 311.63 312.68 313.91 315.32 316.89 318.6 - 320.47 322.48 324.63 326.92 329.34 331.89 334.57 337.37 340.3 343.35 346.52 349.8 353.21 356.73 360.36 364.11 - 367.96 371.93 376 380.17 384.46 388.84 393.33 397.92 / - 19 15 12 1 287.36 284.52 283.85 284.08 284.8 285.92 287.36 289.06 291.05 293.26 295.65 298.29 - 301.14 304.18 307.42 310.83 314.43 318.21 322.15 326.26 330.54 334.97 339.56 344.29 349.41 354.46 359.65 364.98 - 370.44 376.04 381.76 387.62 393.6 399.71 405.94 412.75 / - 19 15 13 1 259.52 258.87 259.43 260.63 262.31 264.38 266.82 269.58 272.66 276.05 279.72 283.67 - 287.89 292.37 297.11 302.09 307.31 312.76 318.42 324.3 330.38 336.66 343.47 350.87 358.42 365.95 373.64 381.43 - 389.54 397.61 406.17 414.73 423.47 432.03 441.13 450.42 / - 19 15 14 1 240.77 241.01 242.78 245.64 249.24 253.54 258.29 263.47 269.02 274.95 281.23 287.86 - 294.82 302.12 309.73 317.66 325.9 334.44 343.28 352.4 361.82 371.51 381.48 391.72 402.22 412.99 424.02 435.3 - 446.84 458.62 470.65 482.93 495.45 508.21 521.2 534.44 / - 19 15 15 1 230.59 235.34 240.16 245.63 251.78 258.63 266.16 274.37 283.25 292.76 302.92 313.65 - 324.92 336.74 349.09 361.97 375.36 389.25 403.62 418.48 433.81 449.62 465.9 482.65 499.87 517.54 535.68 554.26 - 573.29 592.73 612.59 632.88 653.59 674.73 696.27 718.2 / - 19 15 16 1 227.64 235.01 243.47 253.05 263.79 275.88 289.24 303.84 319.62 336.53 354.55 373.63 - 393.73 414.82 436.88 459.82 483.63 508.3 533.8 560.13 587.27 615.21 643.93 673.27 703.44 734.5 766.46 799.3 - 833.02 867.63 903.16 939.61 976.95 1015.09 1054.05 1093.65 / - 19 15 17 1 227.32 239.75 255.59 274.23 295.49 319.21 345.24 373.6 404.17 436.83 471.51 508.17 - 546.76 587.25 629.6 673.42 718.81 766.07 815.15 866.06 918.87 973.55 1029.94 1087.94 1147.39 1208 1269.43 1327.01 - 1385.26 1443.67 1505.44 1567.05 1630.57 1694.55 1760.98 1826.58 / - 19 15 18 1 232.48 258.19 291.2 330.41 374.93 424.17 477.88 535.88 598.11 664.51 734.95 809.8 - 888.94 972.33 1059.98 1150.99 1244.69 1335.23 1426.78 1522.34 1619.74 1721.32 1823.7 1930.19 2038.78 2150.33 2265.58 2380.12 - 2500.17 2622.38 2746.76 2873.55 3002.54 3133.84 3267.44 3403.18 / - 19 15 19 1 246.89 299.25 368.75 451.53 546.08 649.53 761.87 885.89 1019.42 1163.22 1312.41 1457.06 - 1616.06 1776.97 1952.7 2127.71 2310.57 2498.69 2704.44 2908.12 3114.88 3330.77 3555.57 3784.99 4018.9 4260.81 4521.25 4775.87 - 5040.55 5303.8 5580.19 5854.56 6142.21 6436.3 6728.52 7034.93 / - 19 15 20 1 285.98 385.39 502.5 652.39 852.21 1076.06 1322.81 1582.95 1861.71 2152.57 2474.07 2796.87 - 3149.48 3522.75 3916.89 4302.65 4738.93 5162.92 5641.22 6103.35 6574.76 7067.5 7632.68 8161.64 8695.74 9254.87 9827.66 10426.28 - 11024.45 11649.66 12325.19 12991.45 13676.99 14381.14 15106.62 15872.48 / - 19 16 1 1 383.21 382.18 381.84 381.81 381.96 382.23 382.6 383.06 383.6 384.22 384.9 385.65 - 386.47 387.35 388.29 389.3 390.37 391.5 392.69 393.94 395.25 396.62 398.05 399.54 401.09 402.7 404.36 406.09 - 407.87 409.72 411.62 413.58 415.6 417.68 419.82 422.01 / - 19 16 2 1 383.11 382.07 381.73 381.69 381.83 382.1 382.47 382.93 383.47 384.08 384.76 385.51 - 386.33 387.21 388.15 389.16 390.23 391.36 392.55 393.79 395.11 396.48 397.91 399.4 400.95 402.55 404.22 405.95 - 407.73 409.58 411.48 413.44 415.46 417.54 419.68 421.88 / - 19 16 3 1 382.94 381.86 381.5 381.46 381.59 381.86 382.22 382.68 383.22 383.83 384.51 385.26 - 386.07 386.95 387.89 388.9 389.97 391.1 392.28 393.54 394.85 396.22 397.65 399.14 400.69 402.3 403.97 405.7 - 407.48 409.33 411.23 413.2 415.22 417.3 419.44 421.64 / - 19 16 4 1 382.6 381.47 381.08 381.02 381.14 381.4 381.76 382.21 382.75 383.35 384.03 384.78 - 385.59 386.47 387.41 388.42 389.48 390.61 391.8 393.06 394.37 395.74 397.17 398.67 400.22 401.83 403.5 405.24 - 407.03 408.88 410.79 412.76 414.78 416.87 419.02 421.22 / - 19 16 5 1 381.93 380.7 380.27 380.17 380.28 380.52 380.87 381.32 381.84 382.45 383.12 383.87 - 384.68 385.56 386.5 387.51 388.58 389.71 390.9 392.16 393.48 394.85 396.29 397.79 399.35 400.97 402.65 404.39 - 406.19 408.05 409.97 411.95 413.99 416.09 418.25 420.47 / - 19 16 6 1 380.6 379.19 378.67 378.52 378.59 378.81 379.15 379.58 380.1 380.7 381.37 382.12 - 382.93 383.81 384.76 385.77 386.85 387.99 389.19 390.46 391.79 393.18 394.64 396.15 397.73 399.37 401.07 402.83 - 404.65 406.53 408.48 410.48 412.55 414.67 416.86 419.11 / - 19 16 7 1 377.89 376.04 375.29 375 374.97 375.13 375.42 375.82 376.32 376.91 377.58 378.32 - 379.15 380.04 381.01 382.04 383.14 384.31 385.54 386.85 388.21 389.64 391.14 392.7 394.33 396.02 397.77 399.59 - 401.47 403.41 405.42 407.49 409.62 411.82 414.08 416.4 / - 19 16 8 1 372.84 369.84 368.45 367.76 367.47 367.45 367.62 367.94 368.39 368.96 369.63 370.4 - 371.25 372.19 373.22 374.32 375.5 376.76 378.1 379.51 380.99 382.55 384.18 385.88 387.65 389.49 391.4 393.38 - 395.43 397.55 399.74 401.99 404.32 406.71 409.17 411.7 / - 19 16 9 1 364.96 356.45 355.1 354.49 354.29 354.36 354.66 355.13 355.72 356.45 357.28 358.23 - 359.28 360.42 361.66 362.99 364.41 365.92 367.47 369.14 370.9 372.74 374.67 376.67 378.76 380.87 383.12 385.43 - 387.83 390.3 392.81 395.44 398.14 400.91 403.76 406.65 / - 19 16 10 1 352.28 335.36 334.53 334.32 334.46 334.85 335.44 336.19 337.08 338.11 339.26 340.52 - 341.91 343.4 345 346.7 348.51 350.42 352.43 354.55 356.75 359.06 361.46 363.96 366.55 369.24 372.01 374.88 - 377.84 380.89 384.03 387.26 390.58 393.98 397.47 401.05 / - 19 16 11 1 323.14 311.23 310.26 310.09 310.38 310.98 311.83 312.9 314.16 315.58 317.18 318.93 - 320.82 322.87 325.06 327.38 329.84 332.44 335.16 338.01 340.99 344.09 347.32 350.66 354.12 357.7 361.4 365.21 - 369.13 373.16 377.3 381.54 385.9 390.36 394.92 399.59 / - 19 16 12 1 287.59 284.74 284.08 284.29 285.03 286.15 287.64 289.36 291.37 293.57 296.03 298.71 - 301.59 304.66 307.93 311.39 315.03 318.85 322.84 326.99 331.32 335.8 340.44 345.23 350.4 355.51 360.75 366.14 - 371.66 377.32 383.12 389.04 395.09 401.68 408 414.44 / - 19 16 13 1 259.69 259.08 259.66 260.88 262.58 264.68 267.13 269.93 273.04 276.45 280.16 284.14 - 288.4 292.94 297.72 302.76 308.03 313.52 319.24 325.16 331.29 337.63 344.15 350.87 357.96 365.89 373.82 381.86 - 390.12 398.25 406.75 415.41 424.32 433.28 442.44 451.79 / - 19 16 14 1 240.91 241.18 243.11 246.08 249.81 254.19 259.01 264.23 269.82 275.76 282.06 288.7 - 295.67 302.96 310.58 318.51 326.76 335.3 344.15 353.29 362.71 372.42 382.4 392.66 403.19 413.98 425.03 436.34 - 447.91 459.73 471.79 484.1 496.66 509.46 522.5 535.78 / - 19 16 15 1 231.22 236.02 240.86 246.33 252.47 259.31 266.82 275.01 283.86 293.36 303.48 314.16 - 325.39 337.16 349.45 362.27 375.6 389.44 403.77 418.59 433.89 449.66 465.88 482.56 499.69 517.28 535.32 553.81 - 572.74 592.11 611.91 632.14 652.79 673.87 695.39 717.34 / - 19 16 16 1 228.18 235.65 244.1 253.61 264.31 276.34 289.65 304.18 319.88 336.71 354.63 373.61 - 393.62 414.63 436.62 459.49 483.19 507.72 533.07 559.22 586.18 613.93 642.47 671.79 701.93 732.93 764.79 797.49 - 831.04 865.43 900.66 936.72 973.63 1011.35 1049.88 1089.19 / - 19 16 17 1 227.73 240.21 256 274.54 295.68 319.24 345.12 373.33 403.76 436.28 470.79 507.23 - 545.58 585.8 627.86 671.63 717.05 764.23 813.15 863.82 916.21 970.33 1026.14 1083.59 1142.56 1202.82 1264.05 1322.01 - 1380.74 1440.91 1501.98 1564.19 1628.28 1694.24 1759.87 1828.53 / - 19 16 18 1 232.77 258.4 291.24 330.22 374.44 423.47 476.96 534.64 596.46 662.5 732.71 807.23 - 886.05 968.93 1055.6 1145.92 1239.1 1331.89 1424.12 1519.09 1618.4 1719.67 1825.03 1930.56 2042.53 2154.79 2269.27 2388.29 - 2506.67 2630.31 2756.19 2884.48 3015.32 3148.41 3283.88 3424.53 / - 19 16 19 1 247.17 299.14 368.93 451.59 544.84 647.63 760.24 883.19 1016.92 1159.76 1308.86 1454.75 - 1614.75 1777.02 1954.05 2130.83 2315.45 2505.74 2716.04 2919.44 3132.19 3347.6 3573.68 3806.15 4046.56 4289.78 4538.78 4811.86 - 5079.68 5347.08 5626.91 5906.11 6197.96 6496.08 6793.19 7103.71 / - 19 16 20 1 286.58 387.01 505.41 646.93 846.43 1069.96 1312.02 1569.17 1846.74 2151.93 2467.66 2798.58 - 3162.45 3540.64 3913.47 4333.55 4743.53 5206.24 5651.65 6158.74 6637.19 7136.52 7645.07 8176.12 8786.91 9352.93 9932.24 10524.61 - 11131.35 11771.04 12431.95 13105.37 13832.66 14546.67 15281.94 16018.13 / - 19 17 1 1 384.77 383.84 383.55 383.53 383.69 383.96 384.34 384.8 385.34 385.96 386.64 387.39 - 388.21 389.09 390.03 391.03 392.1 393.23 394.42 395.67 396.98 398.35 399.78 401.27 402.82 404.43 406.1 407.83 - 409.62 411.46 413.37 415.34 417.36 419.44 421.59 423.79 / - 19 17 2 1 384.68 383.73 383.42 383.4 383.55 383.83 384.2 384.66 385.2 385.81 386.49 387.24 - 388.06 388.94 389.88 390.88 391.95 393.08 394.27 395.52 396.83 398.2 399.63 401.12 402.67 404.28 405.95 407.68 - 409.47 411.32 413.22 415.19 417.22 419.3 421.44 423.65 / - 19 17 3 1 384.49 383.51 383.19 383.16 383.3 383.57 383.94 384.4 384.93 385.54 386.22 386.97 - 387.78 388.66 389.6 390.6 391.67 392.8 393.99 395.24 396.55 397.92 399.35 400.84 402.4 404.01 405.68 407.41 - 409.2 411.05 412.96 414.93 416.96 419.04 421.19 423.4 / - 19 17 4 1 384.14 383.09 382.74 382.69 382.82 383.08 383.44 383.89 384.42 385.03 385.7 386.45 - 387.26 388.14 389.08 390.08 391.15 392.28 393.47 394.72 396.03 397.41 398.84 400.33 401.89 403.5 405.18 406.91 - 408.71 410.57 412.48 414.45 416.49 418.58 420.73 422.95 / - 19 17 5 1 383.43 382.27 381.85 381.77 381.87 382.12 382.47 382.91 383.43 384.03 384.71 385.45 - 386.26 387.14 388.08 389.09 390.16 391.29 392.48 393.74 395.06 396.44 397.88 399.38 400.95 402.57 404.26 406 - 407.81 409.67 411.6 413.59 415.64 417.74 419.91 422.14 / - 19 17 6 1 382.02 380.62 380.09 379.93 379.98 380.19 380.52 380.95 381.46 382.06 382.73 383.47 - 384.28 385.16 386.11 387.12 388.2 389.35 390.55 391.82 393.16 394.56 396.02 397.54 399.12 400.77 402.48 404.25 - 406.08 407.98 409.93 411.95 414.03 416.17 418.37 420.63 / - 19 17 7 1 379.09 377.05 376.15 375.76 375.67 375.78 376.03 376.41 376.89 377.46 378.13 378.87 - 379.69 380.59 381.56 382.6 383.72 384.9 386.15 387.47 388.86 390.31 391.84 393.42 395.07 396.79 398.58 400.42 - 402.34 404.32 406.36 408.47 410.64 412.87 415.17 417.54 / - 19 17 8 1 374.11 370.74 369.04 368.18 367.81 367.73 367.86 368.17 368.61 369.18 369.85 370.63 - 371.5 372.46 373.51 374.64 375.86 377.15 378.53 379.98 381.5 383.11 384.78 386.53 388.36 390.25 392.22 394.26 - 396.37 398.55 400.8 403.12 405.51 407.97 410.49 413.09 / - 19 17 9 1 366.09 355.81 354.72 354.26 354.18 354.36 354.72 355.25 355.91 356.69 357.58 358.58 - 359.64 360.83 362.12 363.5 364.96 366.52 368.17 369.84 371.66 373.56 375.54 377.6 379.7 381.92 384.23 386.62 - 389.08 391.58 394.21 396.91 399.64 402.5 405.43 408.43 / - 19 17 10 1 353.18 335.48 334.61 334.37 334.51 334.9 335.49 336.25 337.16 338.2 339.37 340.66 - 342.06 343.58 345.21 346.94 348.78 350.73 352.78 354.92 357.17 359.52 361.97 364.51 367.15 369.88 372.71 375.63 - 378.65 381.75 384.95 388.24 391.61 395.08 398.64 402.28 / - 19 17 11 1 322.28 311.41 310.43 310.26 310.55 311.17 312.04 313.12 314.4 315.85 317.47 319.25 - 321.18 323.26 325.49 327.85 330.35 332.99 335.76 338.66 341.69 344.85 348.13 351.53 355.05 358.69 362.45 366.33 - 370.31 374.41 378.62 382.94 387.37 391.91 396.55 401.29 / - 19 17 12 1 287.83 284.97 284.32 284.49 285.23 286.4 287.88 289.67 291.66 293.93 296.42 299.09 - 302 305.1 308.4 311.89 315.57 319.42 323.53 327.73 332.1 336.63 341.33 346.17 351.17 356.56 361.87 367.32 - 372.91 378.63 384.49 390.48 396.99 403.26 409.65 416.17 / - 19 17 13 1 259.87 259.28 259.89 261.13 262.85 264.97 267.45 270.27 273.41 276.86 280.6 284.63 - 288.95 293.54 298.38 303.47 308.79 314.33 320.09 326.06 332.24 338.61 345.18 351.94 358.89 366.02 373.33 381.3 - 389.74 398.37 407.08 416.01 424.74 433.87 443.15 452.68 / - 19 17 14 1 241.05 241.39 243.54 246.66 250.59 255.07 259.96 265.22 270.84 276.81 283.11 289.74 - 296.69 303.98 311.57 319.49 327.71 336.24 345.06 354.18 363.59 373.28 383.25 393.5 404.02 414.8 425.86 437.17 - 448.74 460.57 472.64 484.97 497.55 510.36 523.43 536.73 / - 19 17 15 1 232.15 236.87 241.72 247.19 253.31 260.12 267.6 275.74 284.57 294.04 304.1 314.7 - 325.85 337.53 349.74 362.45 375.67 389.39 403.6 418.29 433.46 449.1 465.21 481.78 498.81 516.3 534.23 552.6 - 571.4 590.63 610.28 630.35 650.84 671.73 693.06 714.84 / - 19 17 16 1 229.01 236.5 244.93 254.3 264.93 276.88 290.09 304.51 320.11 336.82 354.61 373.44 - 393.29 414.13 435.91 458.56 482.05 506.37 531.51 557.47 584.22 611.75 640.07 669.14 699.02 729.74 761.28 793.64 - 826.82 860.82 895.64 931.28 967.73 1004.99 1043.05 1081.89 / - 19 17 17 1 228.37 240.86 256.52 274.9 295.84 319.19 344.88 372.87 403.03 435.27 469.51 505.69 - 543.78 583.7 625.41 668.87 713.98 760.78 809.26 859.44 911.3 964.85 1020.05 1076.89 1135.27 1195.02 1255.8 1315.41 - 1373.32 1433.95 1495.57 1559.66 1624.03 1689.4 1755.8 1824.9 / - 19 17 18 1 233.23 258.66 291.2 329.83 373.6 422.15 475.19 532.51 593.98 659.47 729.08 802.93 - 881.02 963.3 1049.37 1139 1231.66 1323.89 1416.72 1513.56 1613.26 1715.53 1821.69 1930.34 2041.39 2155.04 2271.01 2391.31 - 2511.55 2636.73 2764.35 2894.41 3027.15 3162.23 3299.87 3443.23 / - 19 17 19 1 247.87 299.44 368.69 450.76 543.41 646.79 758.77 879.27 1010.11 1151.02 1300.06 1450.34 - 1606.84 1775.46 1946.76 2134.13 2319.34 2512.03 2710.8 2930.62 3146.06 3364.99 3592.77 3828.48 4073.01 4321.06 4576.87 4837.97 - 5122.27 5394.77 5678.46 5963.05 6259.33 6562.78 6865.18 7180.44 / - 19 17 20 1 287.45 389.26 509.35 645.99 839.6 1059.65 1302.92 1555.95 1841.2 2134.36 2461.29 2798.13 - 3154.33 3532.53 3933.1 4330.3 4774.57 5207.66 5699.04 6167.2 6702.71 7211.21 7729.83 8270.27 8824.71 9463.2 10050.56 10651.36 - 11263.26 11905.23 12575.38 13267.07 13979.77 14704.22 15485.72 16237.44 / - 19 18 1 1 386.2 385.41 385.17 385.19 385.36 385.65 386.04 386.5 387.05 387.66 388.34 389.09 - 389.91 390.79 391.73 392.73 393.8 394.93 396.12 397.37 398.68 400.05 401.48 402.97 404.53 406.14 407.81 409.54 - 411.33 413.18 415.09 417.06 419.09 421.18 423.32 425.53 / - 19 18 2 1 386.1 385.29 385.04 385.05 385.22 385.5 385.88 386.35 386.89 387.5 388.18 388.93 - 389.75 390.62 391.56 392.57 393.63 394.76 395.95 397.2 398.51 399.88 401.32 402.81 404.36 405.97 407.64 409.38 - 411.17 413.02 414.93 416.9 418.93 421.02 423.17 425.38 / - 19 18 3 1 385.91 385.05 384.78 384.78 384.94 385.22 385.59 386.05 386.59 387.2 387.88 388.63 - 389.44 390.32 391.26 392.26 393.33 394.45 395.64 396.89 398.21 399.58 401.01 402.5 404.06 405.67 407.35 409.08 - 410.87 412.73 414.64 416.62 418.65 420.74 422.9 425.11 / - 19 18 4 1 385.52 384.59 384.28 384.25 384.4 384.66 385.03 385.48 386.01 386.62 387.3 388.04 - 388.85 389.73 390.67 391.68 392.74 393.87 395.06 396.32 397.63 399.01 400.44 401.94 403.5 405.12 406.8 408.54 - 410.34 412.2 414.12 416.1 418.14 420.24 422.4 424.62 / - 19 18 5 1 384.75 383.68 383.29 383.22 383.33 383.57 383.92 384.37 384.89 385.49 386.16 386.91 - 387.72 388.6 389.54 390.55 391.62 392.75 393.95 395.21 396.53 397.92 399.36 400.87 402.44 404.07 405.76 407.51 - 409.33 411.2 413.14 415.13 417.19 419.31 421.49 423.73 / - 19 18 6 1 383.11 381.65 381.04 380.83 380.85 381.04 381.34 381.75 382.25 382.84 383.51 384.25 - 385.06 385.94 386.9 387.92 389 390.16 391.38 392.66 394.01 395.42 396.9 398.44 400.04 401.71 403.44 405.23 - 407.09 409.01 410.99 413.03 415.14 417.31 419.54 421.83 / - 19 18 7 1 380.07 377.77 376.7 376.19 376.01 376.05 376.26 376.6 377.06 377.63 378.28 379.03 - 379.86 380.76 381.75 382.81 383.95 385.16 386.43 387.79 389.21 390.69 392.25 393.88 395.58 397.34 399.17 401.07 - 403.03 405.06 407.16 409.32 411.55 413.84 416.2 418.63 / - 19 18 8 1 375.09 371.42 369.1 368.29 367.89 367.84 367.99 368.32 368.79 369.38 370.09 370.9 - 371.81 372.81 373.9 375.07 376.33 377.68 379.1 380.6 382.19 383.85 385.59 387.4 389.29 391.25 393.29 395.4 - 397.59 399.85 402.18 404.52 407 409.55 412.16 414.85 / - 19 18 9 1 366.93 355 353.94 353.77 353.89 354.21 354.7 355.32 356.06 356.92 357.87 358.94 - 360.09 361.34 362.66 364.1 365.6 367.21 368.91 370.67 372.54 374.48 376.5 378.62 380.8 383.09 385.43 387.88 - 390.38 392.99 395.69 398.41 401.26 404.19 407.15 410.24 / - 19 18 10 1 353.8 335.59 334.68 334.43 334.56 334.95 335.55 336.32 337.24 338.29 339.48 340.79 - 342.22 343.77 345.42 347.19 349.06 351.04 353.13 355.32 357.61 360 362.49 365.08 367.77 370.55 373.43 376.41 - 379.48 382.64 385.9 389.24 392.69 396.22 399.84 403.55 / - 19 18 11 1 320.88 311.59 310.59 310.42 310.72 311.35 312.24 313.34 314.64 316.12 317.77 319.58 - 321.54 323.66 325.92 328.33 330.87 333.56 336.38 339.33 342.41 345.62 348.96 352.42 356 359.71 363.53 367.47 - 371.53 375.7 379.98 384.37 388.88 393.49 398.21 403.04 / - 19 18 12 1 288.07 285.19 284.55 284.69 285.46 286.65 288.16 289.95 291.98 294.26 296.78 299.49 - 302.43 305.56 308.9 312.43 316.14 320.03 324.15 328.4 332.81 337.45 342.19 347.09 352.28 357.49 362.85 368.51 - 374.17 379.96 385.89 391.95 398.52 404.86 411.33 417.93 / - 19 18 13 1 260.04 259.49 260.12 261.38 263.12 265.26 267.77 270.61 273.78 277.28 281.1 285.21 - 289.6 294.24 299.14 304.27 309.64 315.22 321.02 327.03 333.24 339.65 346.26 353.05 360.04 367.2 374.55 382.07 - 389.77 397.63 405.96 415.09 424.44 433.87 443.15 452.69 / - 19 18 14 1 241.2 241.74 244.2 247.61 251.8 256.41 261.38 266.67 272.26 278.18 284.43 291 - 297.9 305.12 312.67 320.52 328.69 337.17 345.96 355.03 364.4 374.04 383.96 394.16 404.63 415.37 426.37 437.64 - 449.17 460.95 472.99 485.29 497.83 510.62 523.66 536.94 / - 19 18 15 1 233.5 238.03 242.87 248.31 254.4 261.15 268.56 276.69 285.49 294.86 304.78 315.25 - 326.24 337.76 349.8 362.35 375.4 388.94 402.97 417.48 432.45 447.9 463.79 480.13 496.92 514.15 531.82 549.93 - 568.47 587.44 606.83 626.65 646.89 667.54 688.61 710.11 / - 19 18 16 1 230.25 237.73 246 255.19 265.72 277.53 290.59 304.85 320.26 336.77 354.35 372.97 - 392.59 413.1 434.49 456.74 479.83 503.74 528.48 554.04 580.41 607.59 635.55 664.3 693.83 724.16 755.28 787.19 - 819.89 853.37 887.64 922.69 958.52 995.14 1032.52 1070.68 / - 19 18 17 1 229.32 241.81 257.27 275.37 295.99 319.02 344.41 372.05 401.85 433.7 467.52 503.24 - 540.83 580.24 621.44 664.41 709.08 755.35 803.24 852.75 903.88 956.62 1010.95 1066.85 1124.29 1183.15 1243.22 1302.7 - 1362.33 1423.27 1485.19 1548.84 1613.81 1680.81 1748.45 1816.74 / - 19 18 18 1 233.94 259.04 291.11 329.05 372.13 419.99 472.3 528.79 589.6 654.45 723.48 796.64 - 873.84 955.04 1040.14 1128.72 1220.5 1313.66 1407.26 1503.91 1605.18 1708.97 1814.99 1924.77 2037.15 2152.3 2269.94 2391.66 - 2516.06 2641.14 2770.58 2902.71 3037.6 3175.05 3317.47 3460.04 / - 19 18 19 1 248.93 300.51 369.45 450.58 542.41 644.71 754.79 875.07 1004.28 1143.34 1291.41 1443.01 - 1599.73 1769.13 1942.43 2131.29 2319.63 2515.74 2718.54 2929.29 3159.65 3382.8 3614.36 3852.66 4100.16 4354.22 4615.15 4881.03 - 5153.12 5447.59 5736 6027.02 6328.44 6637.08 6946.68 7267.64 / - 19 18 20 1 288.8 392.55 514.84 653.94 834.05 1052.07 1291.05 1547.49 1821.2 2122.57 2449.18 2788.04 - 3149.13 3528.65 3930.16 4329.12 4775.76 5245.22 5702.78 6217.74 6715.67 7225.21 7810.17 8362.38 8928.81 9502.61 10096.14 10705.51 - 11418.32 12074.67 12751.79 13449.64 14168.1 14915.85 15689.33 16474.49 / - 19 19 1 1 387.49 386.86 386.7 386.76 386.97 387.27 387.67 388.14 388.69 389.31 390 390.75 - 391.56 392.44 393.38 394.39 395.46 396.58 397.77 399.02 400.33 401.71 403.14 404.63 406.19 407.8 409.47 411.21 - 413 414.85 416.77 418.74 420.78 422.87 425.02 427.23 / - 19 19 2 1 387.37 386.72 386.55 386.6 386.79 387.09 387.49 387.96 388.5 389.12 389.8 390.55 - 391.37 392.25 393.19 394.19 395.26 396.39 397.58 398.83 400.14 401.51 402.95 404.44 406 407.61 409.29 411.02 - 412.82 414.67 416.59 418.56 420.6 422.69 424.85 427.07 / - 19 19 3 1 387.14 386.44 386.23 386.27 386.45 386.75 387.13 387.6 388.14 388.75 389.44 390.19 - 391 391.88 392.82 393.82 394.89 396.02 397.21 398.46 399.78 401.15 402.59 404.08 405.64 407.26 408.94 410.68 - 412.48 414.33 416.25 418.24 420.28 422.38 424.54 426.76 / - 19 19 4 1 386.67 385.86 385.6 385.59 385.75 386.03 386.4 386.86 387.39 388 388.68 389.42 - 390.24 391.12 392.06 393.07 394.14 395.27 396.46 397.72 399.04 400.42 401.86 403.37 404.93 406.56 408.25 409.99 - 411.8 413.67 415.6 417.59 419.65 421.76 423.93 426.17 / - 19 19 5 1 385.65 384.56 384.14 384.03 384.12 384.34 384.68 385.11 385.63 386.23 386.9 387.64 - 388.46 389.34 390.29 391.31 392.39 393.53 394.74 396.02 397.35 398.75 400.22 401.75 403.33 404.99 406.7 408.48 - 410.32 412.22 414.18 416.2 418.29 420.44 422.64 424.92 / - 19 19 6 1 383.81 382.18 381.45 381.14 381.09 381.22 381.49 381.88 382.37 382.95 383.61 384.35 - 385.18 386.07 387.04 388.08 389.19 390.37 391.62 392.93 394.32 395.76 397.28 398.86 400.51 402.22 404 405.84 - 407.75 409.72 411.75 413.85 416.01 418.24 420.53 422.88 / - 19 19 7 1 380.75 378.24 377.01 376.38 376.13 376.12 376.29 376.62 377.07 377.63 378.29 379.04 - 379.89 380.82 381.83 382.93 384.1 385.34 386.67 388.07 389.54 391.08 392.7 394.39 396.15 397.98 399.88 401.85 - 403.89 406 408.18 410.42 412.74 415.12 417.57 420.09 / - 19 19 8 1 375.7 371.59 368.78 368.05 367.78 367.79 368.01 368.38 368.9 369.54 370.29 371.15 - 372.1 373.15 374.29 375.51 376.83 378.22 379.7 381.27 382.91 384.63 386.38 388.26 390.22 392.25 394.36 396.55 - 398.81 401.15 403.53 406.02 408.58 411.22 413.92 416.7 / - 19 19 9 1 367.41 354.6 353.9 353.71 353.83 354.16 354.65 355.29 356.05 356.93 357.92 359 - 360.19 361.47 362.85 364.32 365.88 367.52 369.26 371.08 372.99 374.99 377.07 379.24 381.49 383.82 386.24 388.73 - 391.32 393.98 396.72 399.54 402.44 405.43 408.49 411.63 / - 19 19 10 1 354.1 335.71 334.76 334.49 334.61 335 335.61 336.39 337.32 338.39 339.6 340.93 - 342.39 343.96 345.65 347.44 349.35 351.37 353.49 355.72 358.05 360.49 363.03 365.67 368.4 371.24 374.17 377.21 - 380.33 383.56 386.87 390.29 393.79 397.39 401.08 404.85 / - 19 19 11 1 319.62 311.78 310.76 310.59 310.9 311.54 312.44 313.56 314.88 316.39 318.07 319.91 - 321.91 324.06 326.36 328.81 331.4 334.13 337 340 343.14 346.4 349.8 353.32 356.97 360.74 364.63 368.64 - 372.76 377.01 381.37 385.84 390.42 395.11 399.91 404.82 / - 19 19 12 1 288.3 285.41 284.75 284.94 285.69 286.91 288.43 290.24 292.3 294.59 297.13 299.89 - 302.86 305.97 309.33 312.98 316.73 320.66 324.78 329.06 333.52 338.25 343.04 347.99 353.23 358.5 364.01 369.58 - 375.4 381.26 387.44 393.59 399.86 406.5 413.05 419.72 / - 19 19 13 1 260.22 259.7 260.35 261.63 263.39 265.56 268.09 271.04 274.34 277.97 281.89 286.08 - 290.54 295.24 300.18 305.34 310.73 316.34 322.16 328.18 334.4 340.82 347.44 354.24 361.24 368.41 375.77 383.3 - 391.01 398.89 406.94 415.16 423.55 432.1 440.82 450.82 / - 19 19 14 1 241.34 242.54 245.54 249.62 254.03 258.66 263.56 268.75 274.26 280.07 286.21 292.66 - 299.43 306.52 313.91 321.62 329.64 337.95 346.57 355.48 364.69 374.18 383.96 394.03 404.37 414.99 425.89 437.06 - 448.5 460.2 472.17 484.4 496.87 509.58 522.54 535.73 / - 19 19 15 1 235.35 239.74 244.55 249.93 255.93 262.66 270.14 278.21 286.83 296 305.7 315.94 - 326.7 337.97 349.74 362.02 374.77 388.01 401.72 415.89 430.53 445.61 461.14 477.11 493.53 510.37 527.65 545.36 - 563.48 582.04 601 620.39 640.19 660.4 681.02 702.06 / - 19 19 16 1 232.25 239.66 247.45 256.49 266.84 278.44 291.27 305.27 320.4 336.59 353.78 371.93 - 390.99 410.94 431.76 453.43 475.95 499.3 523.47 548.44 574.22 600.79 628.15 656.28 685.19 714.87 745.31 776.53 - 808.5 841.24 874.73 908.99 943.99 979.76 1016.27 1053.53 / - 19 19 17 1 230.86 243.36 258.46 276.13 296.25 318.81 343.7 370.81 400.02 431.23 464.39 499.42 - 536.29 574.95 615.38 657.51 701.21 746.48 793.29 841.63 891.54 943.01 996.04 1050.63 1106.75 1164.37 1223.41 1283.83 - 1343.31 1404.67 1467.57 1531.49 1597.23 1664.48 1732.35 1802.56 / - 19 19 18 1 235.13 259.66 290.95 327.93 369.94 416.61 467.65 523.15 583.32 647.31 715.31 787.24 - 863.06 942.73 1026.23 1113.52 1204.22 1297.57 1392.13 1489.8 1591.25 1695.45 1804.04 1915.16 2029.13 2145.92 2265.74 2388.05 - 2514.21 2643.21 2774.99 2909.54 3046.82 3186.95 3329.77 3475.22 / - 19 19 19 1 251.24 302.1 370.45 450.71 540.42 640.59 749.21 867.15 994.86 1131.72 1278.08 1430.1 - 1587.82 1758.35 1933.34 2115.73 2312.85 2511.4 2717.03 2930.8 3163.66 3393.16 3629.73 3872 4123.48 4385.09 4652.33 4925.37 - 5205.17 5492.33 5801.47 6101.3 6408.13 6723.33 7041.57 7369.31 / - 19 19 20 1 290.95 397.64 523.07 665.03 823.45 1038.08 1272.46 1525.07 1807.11 2105.16 2419.87 2756.93 - 3118.82 3503.2 3909.06 4337.83 4785.85 5225.9 5719.31 6197.69 6736.71 7252.26 7839.16 8392.15 8964.11 9617.95 10225.32 10850.8 - 11497.53 12164.94 12853.33 13556.58 14404.08 15162.92 15942.78 16743.45 / - 19 20 1 1 388.4 387.91 387.81 387.9 388.12 388.44 388.84 389.32 389.88 390.5 391.19 391.95 - 392.77 393.65 394.6 395.61 396.68 397.82 399.02 400.27 401.6 402.98 404.42 405.92 407.49 409.11 410.8 412.55 - 414.36 416.23 418.16 420.15 422.2 424.31 426.48 428.72 / - 19 20 2 1 388.17 387.6 387.45 387.51 387.71 388.02 388.41 388.89 389.44 390.06 390.75 391.5 - 392.33 393.21 394.16 395.18 396.25 397.39 398.59 399.86 401.18 402.57 404.02 405.53 407.11 408.74 410.44 412.19 - 414.01 415.89 417.83 419.83 421.89 424.01 426.2 428.44 / - 19 20 3 1 387.77 387.07 386.86 386.87 387.04 387.33 387.7 388.17 388.71 389.33 390.01 390.77 - 391.59 392.48 393.43 394.45 395.54 396.68 397.89 399.17 400.5 401.9 403.36 404.89 406.47 408.12 409.83 411.6 - 413.43 415.33 417.29 419.31 421.39 423.53 425.73 427.99 / - 19 20 4 1 387.1 386.2 385.87 385.81 385.92 386.17 386.52 386.97 387.5 388.11 388.79 389.54 - 390.37 391.26 392.22 393.25 394.35 395.51 396.73 398.02 399.37 400.79 402.27 403.81 405.42 407.09 408.83 410.63 - 412.49 414.41 416.4 418.44 420.55 422.73 424.96 427.26 / - 19 20 5 1 385.98 384.75 384.22 384.04 384.07 384.26 384.57 384.99 385.5 386.09 386.77 387.53 - 388.36 389.26 390.23 391.28 392.39 393.57 394.82 396.14 397.52 398.97 400.48 402.07 403.71 405.42 407.2 409.04 - 410.95 412.92 414.95 417.05 419.21 421.44 423.73 426.09 / - 19 20 6 1 384.12 382.34 381.49 381.11 381.01 381.11 381.36 381.73 382.22 382.8 383.47 384.23 - 385.08 386 387 388.07 389.22 390.44 391.73 393.1 394.53 396.03 397.61 399.25 400.96 402.75 404.59 406.51 - 408.5 410.55 412.67 414.86 417.11 419.43 421.82 424.27 / - 19 20 7 1 381.02 378.36 377.02 376.33 376.03 376 376.16 376.48 376.93 377.5 378.17 378.95 - 379.82 380.78 381.83 382.96 384.17 385.47 386.84 388.29 389.82 391.43 393.11 394.86 396.69 398.6 400.57 402.63 - 404.75 406.95 409.21 411.55 413.97 416.45 419 421.63 / - 19 20 8 1 375.89 371.03 367.98 367.58 367.51 367.67 368.01 368.5 369.11 369.83 370.66 371.59 - 372.61 373.73 374.93 376.22 377.53 378.99 380.53 382.15 383.85 385.64 387.44 389.39 391.41 393.51 395.68 397.88 - 400.21 402.62 405.1 407.66 410.25 412.96 415.75 418.61 / - 19 20 9 1 367.5 354.65 353.88 353.66 353.76 354.08 354.57 355.22 355.98 356.87 357.87 358.97 - 360.18 361.48 362.88 364.38 365.96 367.64 369.41 371.27 373.21 375.24 377.37 379.57 381.86 384.24 386.7 389.25 - 391.88 394.59 397.39 400.26 403.22 406.26 409.38 412.59 / - 19 20 10 1 354.05 335.82 334.83 334.54 334.66 335.06 335.67 336.45 337.4 338.49 339.72 341.08 - 342.56 344.16 345.87 347.7 349.65 351.7 353.86 356.13 358.51 360.99 363.57 366.26 369.05 371.94 374.93 378.02 - 381.21 384.49 387.87 391.35 394.92 398.58 402.34 406.19 / - 19 20 11 1 318.34 311.96 310.93 310.75 311.07 311.72 312.64 313.78 315.13 316.66 318.36 320.24 - 322.27 324.46 326.8 329.29 331.93 334.71 337.63 340.68 343.87 347.2 350.65 354.23 357.94 361.78 365.74 369.82 - 374.02 378.33 382.77 387.32 391.98 396.75 401.64 406.64 / - 19 20 12 1 288.54 285.63 285.01 285.18 285.95 287.19 288.72 290.55 292.64 294.95 297.52 300.26 - 303.26 306.46 309.86 313.46 317.24 321.21 325.36 329.69 334.33 339.01 343.85 348.86 354.22 359.56 365.06 370.86 - 376.65 382.58 388.84 395.05 401.53 408 414.75 421.48 / - 19 20 13 1 260.78 259.9 260.58 261.93 264 266.57 269.51 272.76 276.28 280.06 284.07 288.32 - 292.8 297.5 302.41 307.53 312.87 318.41 324.15 330.09 336.23 342.56 349.09 355.81 362.71 369.8 377.07 384.52 - 392.15 399.95 407.93 416.08 424.4 432.88 441.52 450.31 / - 19 20 14 1 242.21 245.83 250.09 254.27 258.54 263.02 267.73 272.72 278 283.58 289.47 295.66 - 302.16 308.96 316.07 323.48 331.19 339.2 347.5 356.09 364.96 374.12 383.56 393.28 403.27 413.53 424.06 434.85 - 445.91 457.24 468.82 480.65 492.75 505.09 517.69 530.54 / - 19 20 15 1 238.58 243 247.73 253.42 259.62 266.29 273.47 281.17 289.41 298.17 307.46 317.26 - 327.57 338.39 349.7 361.5 373.77 386.52 399.72 413.39 427.5 442.05 457.05 472.47 488.32 504.6 521.3 538.42 - 555.94 573.88 592.23 610.98 630.13 649.68 669.63 689.98 / - 19 20 16 1 236.27 242.72 250.24 258.97 268.93 280.12 292.53 306.06 320.61 336.14 352.61 370.01 - 388.32 407.5 427.54 448.42 470.13 492.66 515.99 540.11 565.02 590.7 617.16 644.37 672.35 701.07 730.55 760.76 - 791.71 823.4 855.82 888.96 922.83 957.41 992.72 1028.73 / - 19 20 17 1 234.53 246.6 260.78 277.49 296.8 318.56 342.64 368.89 397.21 427.52 459.73 493.62 - 529.16 566.34 605.14 645.55 687.58 731.2 776.41 823.2 871.54 921.43 972.87 1025.83 1080.31 1136.31 1193.8 1252.79 - 1313.26 1375.2 1438.61 1503.47 1569.78 1637.54 1706.72 1777.34 / - 19 20 18 1 237.65 261.24 291.04 326.32 366.71 412.01 461.87 516.03 574.32 637.46 703.76 773.9 - 847.8 925.42 1006.72 1091.64 1180.14 1272.2 1367.76 1466.81 1569.3 1675.2 1783.7 1896.09 2011.7 2130.47 2252.37 2377.32 - 2505.31 2636.38 2770.51 2907.69 3047.87 3191.02 3337.12 3486.16 / - 19 20 19 1 253.26 304.61 372.55 450.93 538.85 636.07 742.31 857.65 982.33 1116.56 1260 1412.64 - 1572.33 1743.06 1919.79 2104.52 2302.16 2503.39 2712.28 2928.72 3153.71 3395.09 3635.27 3883.17 4138.74 4403.07 4675.18 4954.86 - 5240.59 5533.57 5833.74 6156.31 6464.73 6787.05 7126.02 7463.16 / - 19 20 20 1 295.1 406.33 536.42 681.9 841.85 1015.75 1203.19 1403.68 1664.57 1954.95 2260.95 2583.02 - 2931.68 3303.48 3684.86 4102.88 4549.51 5025.16 5491.76 5980.94 6493.76 7029.41 7618.79 8188.32 8788.05 9400.98 10035.47 10648.98 - 11365.05 12026.15 12803.21 13513.42 14244.85 15113.18 15894.76 16697.62 / - 20 1 1 1 382.7 382.59 382.69 382.91 383.23 383.62 384.09 384.63 385.23 385.89 386.61 387.39 - 388.22 389.12 390.07 391.08 392.14 393.26 394.43 395.65 396.93 398.27 399.65 401.09 402.59 404.14 405.74 407.39 - 409.09 410.85 412.66 414.52 416.44 418.41 420.43 422.5 / - 20 1 2 1 382.64 382.52 382.62 382.83 383.15 383.54 384.01 384.55 385.15 385.81 386.53 387.31 - 388.14 389.04 389.99 391 392.06 393.18 394.35 395.58 396.86 398.19 399.58 401.02 402.52 404.07 405.67 407.32 - 409.03 410.79 412.6 414.46 416.38 418.35 420.37 422.44 / - 20 1 3 1 382.53 382.4 382.48 382.7 383.01 383.41 383.87 384.41 385 385.67 386.39 387.17 - 388 388.9 389.85 390.86 391.92 393.04 394.21 395.44 396.72 398.06 399.45 400.89 402.39 403.94 405.54 407.2 - 408.91 410.67 412.48 414.35 416.27 418.24 420.26 422.34 / - 20 1 4 1 382.32 382.17 382.24 382.45 382.76 383.15 383.62 384.15 384.75 385.41 386.13 386.91 - 387.75 388.65 389.6 390.61 391.67 392.79 393.97 395.2 396.48 397.82 399.21 400.66 402.16 403.71 405.32 406.97 - 408.69 410.45 412.27 414.14 416.06 418.04 420.07 422.15 / - 20 1 5 1 381.93 381.74 381.8 382 382.31 382.69 383.16 383.69 384.29 384.94 385.67 386.45 - 387.29 388.18 389.14 390.15 391.22 392.34 393.52 394.75 396.04 397.38 398.78 400.23 401.73 403.29 404.91 406.57 - 408.29 410.06 411.89 413.77 415.7 417.68 419.72 421.81 / - 20 1 6 1 381.17 380.94 380.97 381.16 381.45 381.83 382.29 382.82 383.42 384.08 384.8 385.58 - 386.43 387.33 388.29 389.3 390.37 391.5 392.69 393.93 395.22 396.58 397.98 399.44 400.96 402.53 404.15 405.83 - 407.56 409.35 411.19 413.08 415.03 417.03 419.08 421.19 / - 20 1 7 1 379.68 379.37 379.37 379.54 379.82 380.2 380.65 381.18 381.78 382.44 383.17 383.96 - 384.81 385.72 386.68 387.71 388.79 389.94 391.13 392.39 393.7 395.07 396.5 397.97 399.51 401.1 402.75 404.45 - 406.21 408.02 409.89 411.81 413.79 415.82 417.9 420.05 / - 20 1 8 1 376.73 376.33 376.29 376.44 376.71 377.08 377.53 378.07 378.67 379.34 380.08 380.89 - 381.75 382.68 383.67 384.72 385.83 387 388.23 389.51 390.86 392.26 393.73 395.25 396.83 398.46 400.16 401.91 - 403.72 405.58 407.51 409.49 411.52 413.62 415.77 417.98 / - 20 1 9 1 371.06 370.57 370.49 370.62 370.89 371.26 371.73 372.28 372.91 373.6 374.37 375.21 - 376.12 377.09 378.13 379.23 380.4 381.63 382.92 384.28 385.7 387.18 388.73 390.34 392 393.74 395.53 397.38 - 399.3 401.28 403.31 405.41 407.58 409.8 412.08 414.43 / - 20 1 10 1 360.9 360.27 360.1 360.18 360.42 360.79 361.27 361.85 362.52 363.28 364.12 365.04 - 366.04 367.11 368.26 369.49 370.78 372.16 373.6 375.12 376.71 378.37 380.1 381.9 383.78 385.72 387.74 389.83 - 391.99 394.21 396.51 398.88 401.31 403.82 406.4 409.04 / - 20 1 11 1 346.37 342.3 341.54 341.34 341.47 341.84 342.39 343.11 343.96 344.94 346.04 347.25 - 348.58 350.01 351.55 353.14 354.87 356.71 358.63 360.66 362.73 364.94 367.24 369.63 372.07 374.64 377.3 380.04 - 382.84 385.76 388.76 391.85 394.99 398.25 401.59 405.02 / - 20 1 12 1 319.94 317.54 316.76 316.74 317.16 317.91 318.92 320.16 321.59 323.22 325.02 326.99 - 329.12 331.4 333.84 336.43 339.17 342.04 345.06 348.21 351.5 354.92 358.46 362.14 365.94 369.87 373.92 378.09 - 382.38 386.78 391.31 395.94 400.7 405.54 410.47 415.49 / - 20 1 13 1 296.32 294.02 293.6 294.12 295.25 296.8 298.71 300.95 303.48 306.3 309.38 312.71 - 316.29 320.09 324.12 328.43 332.89 337.63 342.51 347.63 352.89 358.4 364.03 369.95 375.93 382.21 388.53 395.01 - 401.64 408.74 415.7 422.81 430.06 437.47 445.43 453.14 / - 20 1 14 1 275.76 275.13 276.03 277.8 280.24 283.24 286.76 290.78 295.26 300.16 305.45 311.1 - 317.1 323.44 330.09 337.05 344.32 351.88 359.72 367.98 376.99 386.28 395.72 405.44 415.21 425.44 435.69 446.2 - 457.26 468.3 479.58 491.12 502.92 514.92 527.16 539.72 / - 20 1 15 1 263.14 264.88 268.43 272.99 278.58 284.83 291.72 299.24 307.37 316.11 325.43 335.34 - 345.79 356.78 368.28 380.3 392.81 405.82 419.3 433.26 447.68 462.57 477.9 493.69 509.93 526.6 544.03 562.53 - 581.48 601 620.7 640.88 661.45 682.42 704.14 725.78 / - 20 1 16 1 260.62 265.6 272.3 280.62 290.42 301.64 314.19 328.02 343.05 359.22 376.42 394.71 - 414.05 434.39 455.71 478.01 501.26 525.47 550.63 576.69 603.62 631.44 660.04 689.4 719.67 751.24 784.82 818.8 - 853.69 889.17 925.3 961.68 998.81 1036.56 1073.92 1110.82 / - 20 1 17 1 260.53 270.84 284.69 301.61 321.53 344.25 369.58 397.38 427.58 460.02 494.53 531.08 - 569.6 609.96 652.2 696.57 743.13 791.65 841.94 894.01 947.81 1004.53 1062.34 1120.83 1178.39 1233.53 1283.13 1326.23 - 1367.85 1413.81 1461.11 1509.07 1557.8 1608.04 1656.72 1710.58 / - 20 1 18 1 265.24 287.65 318 355 397.81 446.25 499.97 558.79 622 689.63 762.33 839.93 - 922.2 1008.46 1097.72 1189.69 1281.46 1362.87 1450.05 1539.45 1630.5 1726.49 1821.62 1920.26 2019.84 2123.93 2227.57 2334.97 - 2439.21 2549.79 2662.14 2776.58 2892.63 3010.77 3134.91 3255.45 / - 20 1 19 1 281.86 333.72 400.5 481.68 574.44 679.62 797.18 925.01 1062.89 1211.82 1349.23 1486.29 - 1631.83 1783.42 1938.88 2097.61 2263.51 2430.96 2606.86 2781.48 2965.29 3146.79 3337.7 3535 3733.21 3947.66 4157.59 4377.39 - 4590.34 4818.09 5038.92 5274.64 5506.95 5738.6 5999.21 6252.36 / - 20 1 20 1 309.85 407.66 555.48 734.16 942.6 1177.6 1409.8 1656.24 1915.28 2191.18 2472.17 2784.26 - 3096.47 3420.71 3784.86 4144.79 4511.57 4895.93 5298.64 5697.66 6119.51 6570.71 7008.39 7463.58 7934.02 8413.33 8889.51 9420.72 - 9939.08 10468.21 11009.85 11568.73 12118.12 12710.25 13317.6 13940.46 / - 20 2 1 1 384.58 384.45 384.54 384.76 385.07 385.47 385.93 386.47 387.07 387.73 388.45 389.23 - 390.07 390.97 391.92 392.93 394 395.12 396.3 397.53 398.81 400.15 401.54 402.99 404.49 406.04 407.65 409.31 - 411.02 412.79 414.61 416.48 418.41 420.38 422.41 424.49 / - 20 2 2 1 384.51 384.38 384.46 384.68 384.99 385.39 385.85 386.39 386.99 387.65 388.37 389.15 - 389.99 390.89 391.84 392.85 393.92 395.04 396.22 397.45 398.73 400.07 401.47 402.91 404.41 405.97 407.58 409.24 - 410.95 412.72 414.54 416.41 418.34 420.32 422.35 424.43 / - 20 2 3 1 384.4 384.25 384.33 384.54 384.85 385.24 385.71 386.24 386.84 387.5 388.22 389.01 - 389.85 390.74 391.7 392.71 393.77 394.9 396.07 397.31 398.59 399.93 401.33 402.78 404.28 405.84 407.45 409.11 - 410.83 412.6 414.42 416.29 418.22 420.2 422.24 424.32 / - 20 2 4 1 384.18 384.01 384.08 384.28 384.59 384.98 385.45 385.98 386.58 387.24 387.96 388.74 - 389.58 390.48 391.44 392.45 393.52 394.64 395.82 397.05 398.34 399.68 401.08 402.53 404.04 405.6 407.21 408.88 - 410.6 412.37 414.2 416.08 418.01 420 422.04 424.13 / - 20 2 5 1 383.77 383.57 383.62 383.82 384.12 384.5 384.97 385.5 386.09 386.76 387.48 388.26 - 389.1 390 390.96 391.97 393.04 394.17 395.35 396.59 397.88 399.23 400.63 402.09 403.6 405.16 406.78 408.46 - 410.18 411.96 413.8 415.68 417.62 419.62 421.67 423.77 / - 20 2 6 1 382.97 382.72 382.75 382.94 383.23 383.61 384.07 384.6 385.2 385.86 386.58 387.36 - 388.21 389.11 390.07 391.09 392.17 393.3 394.49 395.73 397.03 398.39 399.8 401.27 402.79 404.36 405.99 407.68 - 409.42 411.21 413.06 414.96 416.92 418.93 420.99 423.11 / - 20 2 7 1 381.41 381.09 381.09 381.26 381.54 381.91 382.37 382.9 383.49 384.16 384.89 385.68 - 386.53 387.44 388.41 389.44 390.53 391.67 392.87 394.13 395.45 396.82 398.25 399.74 401.28 402.88 404.53 406.24 - 408.01 409.83 411.7 413.63 415.62 417.66 419.76 421.91 / - 20 2 8 1 378.33 377.93 377.89 378.03 378.3 378.67 379.13 379.66 380.27 380.94 381.68 382.49 - 383.36 384.29 385.28 386.33 387.44 388.62 389.85 391.14 392.49 393.91 395.37 396.9 398.49 400.13 401.83 403.59 - 405.41 407.28 409.21 411.21 413.25 415.36 417.52 419.74 / - 20 2 9 1 372.44 371.95 371.87 372 372.27 372.65 373.12 373.67 374.3 375 375.77 376.62 - 377.53 378.5 379.54 380.65 381.82 383.06 384.36 385.72 387.15 388.64 390.19 391.8 393.48 395.22 397.03 398.89 - 400.82 402.81 404.86 406.97 409.14 411.38 413.68 416.04 / - 20 2 10 1 361.97 361.28 361.06 361.11 361.33 361.69 362.16 362.74 363.41 364.17 365.01 365.94 - 366.94 368.02 369.18 370.42 371.73 373.11 374.57 376.1 377.71 379.39 381.14 382.96 384.86 386.83 388.87 390.98 - 393.16 395.41 397.74 400.13 402.6 405.13 407.74 410.42 / - 20 2 11 1 347.42 342.73 341.95 341.75 341.89 342.27 342.83 343.56 344.44 345.44 346.57 347.81 - 349.16 350.58 352.14 353.81 355.57 357.42 359.36 361.42 363.57 365.78 368.12 370.55 373.08 375.65 378.36 381.15 - 384.03 386.96 390.02 393.16 396.35 399.66 403.06 406.54 / - 20 2 12 1 320.2 317.78 317.02 317 317.45 318.22 319.25 320.51 321.97 323.62 325.45 327.45 - 329.61 331.93 334.41 337.03 339.81 342.73 345.79 348.99 352.32 355.79 359.39 363.12 366.97 370.96 375.06 379.29 - 383.64 388.1 392.69 397.39 402.2 407.13 412.18 417.32 / - 20 2 13 1 296.49 294.21 293.77 294.34 295.5 297.07 299.01 301.27 303.84 306.68 309.79 313.15 - 316.75 320.58 324.72 329.01 333.52 338.33 343.25 348.37 353.77 359.26 365.05 370.98 377.01 383.3 389.82 396.36 - 403.07 410.1 417.12 424.29 431.98 439.46 447.09 454.87 / - 20 2 14 1 275.82 275.26 276.19 278 280.47 283.51 287.06 291.13 295.65 300.59 305.92 311.62 - 317.66 324.04 330.75 337.76 345.08 352.69 360.58 368.76 377.36 386.92 396.53 406.21 416.29 426.39 436.96 447.54 - 458.38 469.47 481.15 492.77 504.64 516.77 529.09 541.68 / - 20 2 15 1 263.17 265.01 268.63 273.24 278.79 285.09 292.03 299.59 307.77 316.55 325.92 335.88 - 346.38 357.42 368.98 381.05 393.62 406.68 420.22 434.24 448.72 463.67 479.07 494.92 511.22 527.97 545.16 563.44 - 582.52 602.02 622.07 642.46 663.03 684.35 705.47 727.68 / - 20 2 16 1 260.59 265.71 272.47 280.84 290.69 301.93 314.52 328.39 343.45 359.67 376.93 395.26 - 414.63 435.01 456.36 478.68 501.96 526.2 551.38 577.46 604.4 632.22 660.89 690.29 720.6 751.82 785.08 819.2 - 854.33 889.67 926.03 962.76 999.76 1037.56 1074.98 1112.87 / - 20 2 17 1 260.41 270.85 284.79 301.8 321.74 344.48 369.84 397.65 427.85 460.31 494.84 531.4 - 569.94 610.28 652.48 696.79 743.29 791.85 842.17 894.24 948.02 1004.08 1062.43 1120.86 1178.92 1234.29 1285.17 1329.15 - 1370.23 1418.11 1463.25 1512.58 1563.7 1614.42 1664.32 1718.88 / - 20 2 18 1 265.16 287.67 318.13 355.19 398.06 446.46 500.1 558.83 622.01 689.52 762.05 839.48 - 921.58 1007.84 1097.12 1188.38 1281.22 1364.18 1452.84 1543.45 1635.14 1724.03 1812.21 1902.94 1996.41 2091.4 2188.05 2288.33 - 2386.62 2487.17 2589.38 2695.53 2802.67 2909.6 3020.57 3134.5 / - 20 2 19 1 281.81 333.53 400.24 481.24 574.61 679.63 795.01 924.46 1062.07 1206.98 1348.98 1487.24 - 1632.32 1785 1942.74 2103.65 2271.69 2441.22 2618.73 2795.27 2980.85 3164.51 3357.32 3556.62 3756.95 3966.02 4185.97 4407.72 - 4623.21 4853.15 5076.62 5314.64 5549.19 5783.94 6035.41 6302.6 / - 20 2 20 1 309.8 405.04 553.55 731.17 938.47 1173.36 1409.67 1649.02 1917.03 2183.67 2476.31 2789.91 - 3103.64 3429.56 3795.68 4157.51 4528.18 4915.06 5325.55 5729.87 6156.97 6613.19 7055.85 7516.14 7991.82 8476.23 8957.41 9468.61 - 10017.46 10551.89 11099.4 11664.38 12219.92 12818.2 13432.02 14061.58 / - 20 3 1 1 386.45 386.31 386.39 386.6 386.91 387.31 387.78 388.31 388.91 389.57 390.3 391.08 - 391.92 392.82 393.78 394.79 395.86 396.98 398.16 399.39 400.68 402.03 403.43 404.88 406.39 407.95 409.56 411.23 - 412.95 414.72 416.55 418.43 420.36 422.35 424.39 426.48 / - 20 3 2 1 386.38 386.23 386.31 386.52 386.83 387.22 387.69 388.23 388.83 389.49 390.21 390.99 - 391.84 392.73 393.69 394.7 395.77 396.9 398.08 399.31 400.6 401.95 403.35 404.8 406.31 407.87 409.48 411.15 - 412.87 414.65 416.48 418.36 420.29 422.28 424.32 426.42 / - 20 3 3 1 386.26 386.1 386.17 386.38 386.68 387.08 387.54 388.08 388.67 389.34 390.06 390.84 - 391.68 392.58 393.54 394.55 395.62 396.75 397.93 399.17 400.46 401.8 403.2 404.66 406.17 407.73 409.34 411.02 - 412.74 414.52 416.35 418.23 420.17 422.16 424.2 426.3 / - 20 3 4 1 386.03 385.85 385.91 386.11 386.42 386.81 387.27 387.8 388.4 389.06 389.79 390.57 - 391.41 392.31 393.27 394.28 395.35 396.48 397.66 398.9 400.19 401.54 402.94 404.4 405.91 407.48 409.1 410.77 - 412.5 414.28 416.12 418 419.95 421.94 423.99 426.09 / - 20 3 5 1 385.6 385.38 385.43 385.63 385.92 386.31 386.77 387.3 387.9 388.56 389.29 390.07 - 390.91 391.81 392.77 393.79 394.86 395.99 397.18 398.42 399.72 401.07 402.47 403.94 405.45 407.02 408.65 410.33 - 412.06 413.85 415.7 417.59 419.54 421.55 423.6 425.71 / - 20 3 6 1 384.77 384.5 384.53 384.71 385 385.38 385.84 386.37 386.97 387.63 388.35 389.14 - 389.98 390.89 391.85 392.87 393.95 395.09 396.28 397.53 398.83 400.19 401.61 403.08 404.61 406.19 407.83 409.52 - 411.27 413.07 414.92 416.83 418.8 420.82 422.89 425.02 / - 20 3 7 1 383.13 382.8 382.8 382.96 383.24 383.62 384.07 384.6 385.2 385.87 386.6 387.39 - 388.24 389.15 390.12 391.15 392.25 393.39 394.6 395.86 397.18 398.56 400 401.49 403.04 404.64 406.3 408.02 - 409.79 411.62 413.5 415.44 417.44 419.49 421.6 423.76 / - 20 3 8 1 379.92 379.51 379.47 379.61 379.89 380.26 380.71 381.25 381.85 382.53 383.27 384.08 - 384.95 385.88 386.87 387.93 389.05 390.22 391.46 392.76 394.11 395.53 397 398.54 400.13 401.78 403.49 405.26 - 407.08 408.97 410.91 412.91 414.97 417.08 419.26 421.49 / - 20 3 9 1 373.79 373.31 373.23 373.37 373.64 374.02 374.49 375.04 375.67 376.38 377.15 378 - 378.91 379.89 380.93 382.04 383.22 384.46 385.77 387.14 388.57 390.07 391.63 393.25 394.94 396.69 398.5 400.38 - 402.31 404.31 406.38 408.5 410.69 412.94 415.25 417.63 / - 20 3 10 1 363.03 362.24 361.97 361.98 362.18 362.52 362.99 363.56 364.23 364.98 365.83 366.76 - 367.77 368.86 370.03 371.28 372.6 374.01 375.48 377.03 378.66 380.36 382.13 383.98 385.9 387.89 389.95 392.09 - 394.3 396.58 398.94 401.36 403.86 406.43 409.07 411.78 / - 20 3 11 1 348.48 343.11 342.34 342.14 342.29 342.68 343.26 344.01 344.91 345.94 347.09 348.36 - 349.7 351.19 352.79 354.5 356.26 358.16 360.16 362.26 364.41 366.7 369.07 371.5 374.07 376.73 379.43 382.28 - 385.21 388.23 391.29 394.49 397.77 401.1 404.55 408.09 / - 20 3 12 1 320.46 318.03 317.27 317.28 317.74 318.52 319.58 320.86 322.34 324.02 325.88 327.91 - 330.1 332.46 334.98 337.64 340.46 343.42 346.53 349.77 353.15 356.67 360.32 364.11 368.02 372.06 376.22 380.51 - 384.91 389.44 394.09 398.85 403.73 408.73 413.84 419.06 / - 20 3 13 1 296.66 294.36 293.95 294.56 295.74 297.35 299.31 301.61 304.2 307.06 310.2 313.58 - 317.21 321.08 325.25 329.57 334.2 338.96 343.92 349.2 354.56 360.25 365.99 372.02 378.11 384.51 390.94 397.63 - 404.5 411.43 418.69 425.93 433.53 441.08 448.78 456.62 / - 20 3 14 1 275.9 275.39 276.37 278.21 280.71 283.78 287.37 291.47 296.03 301.02 306.39 312.13 - 318.22 324.65 331.4 338.47 345.83 353.49 361.45 369.68 378.18 387.3 397.08 407.06 417.09 427.52 437.96 448.69 - 459.79 470.96 482.38 494.05 506.36 518.57 531.03 543.29 / - 20 3 15 1 263.21 265.15 268.84 273.5 279 285.35 292.34 299.95 308.17 317 326.41 336.41 - 346.97 358.07 369.68 381.8 394.42 407.54 421.14 435.21 449.76 464.76 480.23 496.14 512.51 529.32 546.59 564.3 - 583.47 603.15 623.2 643.79 664.53 685.95 707.44 729.56 / - 20 3 16 1 260.54 265.83 272.65 281.06 290.95 302.23 314.85 328.74 343.85 360.1 377.44 395.81 - 415.22 435.62 457 479.35 502.66 526.91 552.11 578.2 605.16 632.97 661.68 691.15 721.5 752.74 785.26 819.44 - 854.81 890.29 926.52 963.49 1000.87 1038.53 1076.02 1114.15 / - 20 3 17 1 260.31 270.86 284.89 301.99 321.96 344.72 370.1 397.92 428.12 460.57 495.12 531.69 - 570.23 610.57 652.72 696.96 743.39 791.92 842.31 894.38 948.14 1003.86 1062 1120.76 1179.37 1235.22 1286.93 1332.75 - 1374.99 1424.25 1471.26 1521.18 1575.17 1627.5 1678.36 1734.51 / - 20 3 18 1 265.08 287.71 318.26 355.39 398.31 446.67 500.24 558.87 622.01 689.37 761.74 838.98 - 920.9 1007.09 1096.41 1187.37 1280.83 1358.3 1442.1 1526.63 1613.54 1705.34 1793.59 1886.54 1980.92 2078.81 2176.26 2277.45 - 2373.73 2476.06 2580.44 2686.69 2794.22 2908.79 3022.08 3132.5 / - 20 3 19 1 281.77 333.27 399.93 481.46 574.78 678.22 794.75 923.64 1061.21 1206.13 1348.68 1488.77 - 1633.2 1785.76 1945.11 2108.03 2276.6 2450.46 2630.33 2809.24 2997.02 3183.01 3377.92 3579.31 3781.82 3993.1 4215.66 4439.59 - 4657.72 4889.92 5116.24 5356.66 5593.53 5831.41 6085.58 6342.88 / - 20 3 20 1 309.76 403.19 551.6 727.84 933.83 1169.02 1404.96 1649.72 1909.87 2186.57 2480.56 2775.07 - 3110.97 3438.6 3780.66 4170.6 4543.43 4931.17 5347.11 5760.44 6192.84 6654.89 7107.6 7568.65 8050.09 8540.06 9026.73 9543.4 - 10071.94 10638.62 11192.59 11763.98 12326.27 12931.13 13551.95 14188.5 / - 20 4 1 1 388.32 388.16 388.24 388.45 388.76 389.15 389.61 390.15 390.75 391.41 392.14 392.92 - 393.76 394.66 395.62 396.64 397.71 398.84 400.02 401.26 402.55 403.9 405.3 406.76 408.27 409.84 411.46 413.13 - 414.86 416.64 418.48 420.37 422.31 424.31 426.36 428.46 / - 20 4 2 1 388.25 388.08 388.15 388.36 388.67 389.06 389.53 390.06 390.66 391.32 392.05 392.83 - 393.68 394.58 395.53 396.55 397.62 398.75 399.93 401.17 402.47 403.82 405.22 406.68 408.19 409.76 411.38 413.05 - 414.78 416.57 418.4 420.29 422.24 424.24 426.29 428.39 / - 20 4 3 1 388.12 387.94 388.01 388.21 388.52 388.91 389.37 389.9 390.5 391.17 391.89 392.67 - 393.52 394.42 395.38 396.39 397.47 398.59 399.78 401.02 402.31 403.66 405.07 406.53 408.04 409.61 411.24 412.91 - 414.64 416.43 418.27 420.16 422.11 424.11 426.16 428.27 / - 20 4 4 1 387.88 387.68 387.74 387.94 388.24 388.63 389.09 389.62 390.22 390.88 391.61 392.39 - 393.23 394.14 395.1 396.11 397.19 398.32 399.5 400.74 402.04 403.39 404.8 406.26 407.78 409.35 410.98 412.66 - 414.39 416.18 418.03 419.92 421.87 423.88 425.94 428.05 / - 20 4 5 1 387.43 387.2 387.24 387.43 387.73 388.11 388.57 389.11 389.7 390.36 391.09 391.87 - 392.72 393.62 394.58 395.6 396.68 397.81 399 400.24 401.54 402.9 404.31 405.78 407.3 408.88 410.51 412.2 - 413.94 415.73 417.58 419.49 421.45 423.46 425.53 427.65 / - 20 4 6 1 386.56 386.28 386.3 386.48 386.77 387.15 387.61 388.14 388.73 389.4 390.12 390.91 - 391.75 392.66 393.63 394.65 395.73 396.87 398.06 399.32 400.62 401.99 403.41 404.89 406.42 408.01 409.65 411.35 - 413.1 414.91 416.78 418.7 420.67 422.7 424.78 426.92 / - 20 4 7 1 384.85 384.51 384.5 384.66 384.94 385.32 385.77 386.3 386.9 387.56 388.29 389.09 - 389.94 390.85 391.83 392.86 393.95 395.11 396.32 397.58 398.91 400.29 401.73 403.23 404.78 406.39 408.06 409.78 - 411.56 413.4 415.29 417.24 419.24 421.31 423.42 425.6 / - 20 4 8 1 381.49 381.08 381.04 381.18 381.46 381.83 382.28 382.82 383.42 384.1 384.84 385.65 - 386.52 387.46 388.45 389.51 390.63 391.81 393.05 394.35 395.72 397.14 398.62 400.16 401.75 403.41 405.13 406.9 - 408.74 410.63 412.58 414.59 416.66 418.79 420.97 423.22 / - 20 4 9 1 375.12 374.64 374.57 374.71 374.98 375.36 375.83 376.39 377.02 377.73 378.5 379.35 - 380.27 381.25 382.3 383.41 384.59 385.84 387.15 388.53 389.97 391.47 393.04 394.67 396.37 398.13 399.95 401.84 - 403.79 405.8 407.88 410.01 412.22 414.48 416.81 419.2 / - 20 4 10 1 364.08 363.17 362.83 362.79 362.96 363.29 363.74 364.3 364.97 365.73 366.58 367.51 - 368.53 369.63 370.82 372.08 373.42 374.84 376.33 377.9 379.55 381.27 383.07 384.94 386.89 388.91 391 393.17 - 395.41 397.73 400.12 402.57 405.11 407.71 410.39 413.14 / - 20 4 11 1 349.55 343.46 342.69 342.51 342.67 343.08 343.69 344.46 345.39 346.44 347.58 348.88 - 350.3 351.83 353.46 355.15 357 358.95 361 363.09 365.33 367.67 370.04 372.57 375.18 377.84 380.63 383.51 - 386.43 389.5 392.65 395.86 399.19 402.61 406.08 409.68 / - 20 4 12 1 320.73 318.28 317.53 317.55 318.03 318.83 319.91 321.21 322.72 324.43 326.31 328.38 - 330.61 333 335.55 338.26 341.11 344.12 347.27 350.56 354 357.57 361.27 365.11 369.07 373.17 377.39 381.74 - 386.21 390.8 395.51 400.34 405.29 410.35 415.53 420.82 / - 20 4 13 1 296.84 294.48 294.13 294.78 295.99 297.62 299.62 301.91 304.52 307.41 310.6 314.01 - 317.67 321.64 325.77 330.13 334.8 339.59 344.7 349.9 355.44 361.03 366.98 372.95 379.09 385.61 392.1 398.91 - 405.91 412.9 420.16 427.59 435.05 442.89 450.66 458.83 / - 20 4 14 1 275.99 275.53 276.55 278.42 280.96 284.06 287.68 291.82 296.42 301.44 306.86 312.65 - 318.78 325.26 332.06 339.17 346.59 354.31 362.31 370.6 379.16 387.99 397.46 407.63 417.98 428.36 439.15 449.93 - 460.99 472.44 483.94 495.69 507.7 519.96 532.48 545.25 / - 20 4 15 1 263.26 265.3 269.06 273.77 279.25 285.61 292.65 300.3 308.57 317.44 326.9 336.94 - 347.55 358.7 370.37 382.55 395.23 408.4 422.05 436.19 450.79 465.85 481.38 497.36 513.79 530.67 547.99 565.77 - 584 604.13 624.36 644.95 665.88 687.15 709.06 731.03 / - 20 4 16 1 260.49 265.95 272.84 281.29 291.21 302.53 315.17 329.1 344.24 360.53 377.93 396.35 - 415.8 436.23 457.63 480.01 503.34 527.61 552.82 578.93 605.89 633.69 662.41 691.96 722.36 753.62 785.77 819.6 - 855.12 890.86 927.03 964.08 1001.56 1039.07 1077.04 1115.27 / - 20 4 17 1 260.2 270.87 284.99 302.17 322.18 344.95 370.35 398.18 428.37 460.81 495.39 531.96 - 570.49 610.82 652.93 697.09 743.42 791.87 842.31 894.42 948.17 1003.49 1061.76 1120.37 1179.38 1235.75 1288.68 1335.82 - 1380.45 1428.95 1479.24 1530.78 1585.88 1640.15 1692.86 1750.61 / - 20 4 18 1 265 287.75 318.39 355.58 398.57 446.89 500.39 558.91 621.99 689.2 761.39 838.44 - 920.15 1006.22 1095.6 1186.71 1280.2 1358.45 1443.54 1528.88 1616.38 1709.94 1799.26 1893.21 1988.74 2089.34 2186.38 2288.77 - 2386.41 2489.96 2595.69 2703.33 2812.28 2928.29 3040.86 3153.53 / - 20 4 19 1 281.73 333.06 400.09 480.91 573.88 678.15 794.47 920.45 1060.3 1205.14 1345.37 1488.93 - 1633.98 1786.69 1947.09 2111.11 2281.39 2458.04 2640.56 2822.11 3012.47 3201.12 3398.74 3602.71 3807.89 4021.54 4237.85 4473.17 - 4694.11 4928.56 5158 5400.96 5640.28 5881.34 6138.4 6398.56 / - 20 4 20 1 309.73 401.31 547.74 724.51 932.89 1168.25 1401.94 1650.4 1911.53 2189.51 2484.94 2781.08 - 3118.59 3447.98 3792.05 4184.14 4559.2 4949.31 5365.43 5787.97 6226.7 6663.48 7154.98 7620.66 8108.27 8604.4 9096.96 9619.49 - 10154.02 10700.96 11288.74 11867.2 12436.66 13048.87 13677.16 14321.35 / - 20 5 1 1 390.25 390.05 390.11 390.31 390.61 391 391.46 392 392.59 393.26 393.98 394.76 - 395.61 396.51 397.47 398.49 399.56 400.69 401.88 403.12 404.42 405.77 407.18 408.64 410.16 411.73 413.36 415.04 - 416.77 418.56 420.4 422.3 424.25 426.26 428.32 430.43 / - 20 5 2 1 390.17 389.97 390.02 390.22 390.52 390.91 391.37 391.9 392.5 393.17 393.89 394.67 - 395.52 396.42 397.38 398.4 399.47 400.6 401.79 403.03 404.33 405.68 407.09 408.55 410.07 411.64 413.27 414.95 - 416.69 418.48 420.32 422.22 424.18 426.18 428.24 430.36 / - 20 5 3 1 390.03 389.82 389.87 390.06 390.36 390.75 391.21 391.74 392.34 393 393.73 394.51 - 395.35 396.26 397.22 398.23 399.31 400.44 401.63 402.87 404.17 405.52 406.93 408.4 409.92 411.49 413.12 414.81 - 416.54 418.34 420.18 422.08 424.04 426.05 428.11 430.23 / - 20 5 4 1 389.78 389.54 389.59 389.78 390.07 390.46 390.92 391.45 392.05 392.71 393.43 394.22 - 395.06 395.96 396.92 397.94 399.02 400.15 401.34 402.58 403.89 405.24 406.65 408.12 409.64 411.22 412.85 414.54 - 416.28 418.08 419.93 421.83 423.79 425.8 427.87 429.99 / - 20 5 5 1 389.3 389.04 389.07 389.25 389.54 389.92 390.38 390.91 391.51 392.17 392.89 393.68 - 394.52 395.43 396.39 397.41 398.49 399.62 400.81 402.06 403.37 404.73 406.14 407.62 409.14 410.73 412.36 414.06 - 415.8 417.61 419.46 421.38 423.34 425.37 427.44 429.57 / - 20 5 6 1 388.38 388.08 388.09 388.26 388.54 388.92 389.38 389.9 390.5 391.16 391.89 392.67 - 393.52 394.43 395.39 396.42 397.5 398.64 399.84 401.1 402.41 403.78 405.2 406.68 408.22 409.82 411.46 413.17 - 414.93 416.75 418.62 420.55 422.53 424.57 426.66 428.81 / - 20 5 7 1 386.57 386.22 386.2 386.36 386.64 387.01 387.46 387.99 388.59 389.26 389.99 390.78 - 391.63 392.55 393.52 394.56 395.65 396.81 398.02 399.29 400.62 402.01 403.45 404.95 406.51 408.13 409.8 411.53 - 413.32 415.16 417.06 419.02 421.04 423.11 425.23 427.42 / - 20 5 8 1 383.05 382.63 382.59 382.73 383.01 383.38 383.83 384.37 384.98 385.65 386.4 387.2 - 388.08 389.02 390.01 391.08 392.2 393.38 394.63 395.93 397.3 398.72 400.21 401.76 403.36 405.03 406.75 408.53 - 410.38 412.28 414.24 416.26 418.34 420.48 422.67 424.93 / - 20 5 9 1 376.42 375.95 375.88 376.02 376.29 376.67 377.15 377.7 378.34 379.05 379.83 380.68 - 381.59 382.58 383.63 384.75 385.94 387.19 388.51 389.89 391.34 392.85 394.43 396.07 397.78 399.54 401.38 403.28 - 405.24 407.26 409.35 411.5 413.72 416 418.34 420.75 / - 20 5 10 1 365.14 364.08 363.62 363.54 363.69 364 364.45 365.02 365.69 366.45 367.31 368.26 - 369.29 370.41 371.61 372.89 374.25 375.68 377.2 378.8 380.47 382.22 384.04 385.94 387.91 389.97 392.09 394.29 - 396.56 398.91 401.33 403.83 406.39 409.04 411.75 414.54 / - 20 5 11 1 350.63 343.77 343.02 342.85 343.04 343.47 344.1 344.9 345.85 346.89 348.1 349.43 - 350.88 352.45 354.07 355.85 357.74 359.74 361.78 363.97 366.26 368.6 371.08 373.66 376.28 379.04 381.9 384.79 - 387.82 390.94 394.09 397.38 400.71 404.17 407.73 411.34 / - 20 5 12 1 321 318.53 317.79 317.82 318.32 319.14 320.24 321.56 323.1 324.83 326.75 328.84 - 331.11 333.54 336.13 338.88 341.78 344.83 348.02 351.37 354.85 358.47 362.23 366.12 370.14 374.3 378.58 382.99 - 387.52 392.18 396.95 401.85 406.86 411.99 417.24 422.6 / - 20 5 13 1 297.03 294.58 294.32 295 296.25 297.91 299.91 302.24 304.87 307.78 311 314.44 - 318.13 322.12 326.29 330.77 335.38 340.32 345.37 350.74 356.18 361.97 367.81 374 380.2 386.78 393.34 400.05 - 407.19 414.24 421.64 429.21 436.75 444.57 452.56 460.55 / - 20 5 14 1 276.08 275.68 276.73 278.64 281.21 284.34 287.99 292.17 296.81 301.87 307.33 313.16 - 319.35 325.87 332.72 339.88 347.35 355.12 363.18 371.52 380.14 389.03 398.19 408.01 418.56 429.14 440.02 450.95 - 462.29 473.7 485.5 497.33 509.42 521.76 534.36 547.22 / - 20 5 15 1 263.32 265.45 269.28 274.04 279.56 285.87 292.96 300.66 308.97 317.89 327.39 337.48 - 348.13 359.34 371.06 383.29 396.03 409.25 422.97 437.15 451.81 466.94 482.52 498.56 515.06 532 549.39 567.23 - 585.53 604.65 625.01 645.85 667.04 688.51 710.67 732.66 / - 20 5 16 1 260.43 266.08 273.02 281.52 291.48 302.83 315.5 329.45 344.62 360.96 378.4 396.88 - 416.37 436.83 458.26 480.66 504 528.29 553.52 579.63 606.6 634.38 663.09 692.72 723.18 754.47 786.63 819.65 - 855.23 891.13 927.58 964.5 1002.28 1040.18 1078.08 1116.4 / - 20 5 17 1 260.1 270.89 285.09 302.33 322.39 345.19 370.59 398.44 428.61 461.04 495.63 532.2 - 570.72 611.04 653.09 697.16 743.4 791.75 842.15 894.32 948.08 1003.4 1060.92 1120.23 1179.33 1236.46 1290.07 1337.79 - 1385.39 1434.71 1487.37 1541.31 1595.4 1653.22 1708.63 1768.13 / - 20 5 18 1 264.92 287.8 318.53 355.78 398.83 447.11 500.54 558.95 621.95 689.01 761 837.84 - 919.33 1005.2 1094.66 1185.9 1279.39 1359.68 1444.72 1530.97 1621.33 1713.55 1803.84 1898.99 1995.39 2098.42 2195.22 2300.42 - 2400.47 2504.36 2611.43 2720.52 2831.01 2947.99 3062.38 3176.68 / - 20 5 19 1 281.69 332.54 399.74 481.09 574.04 678.1 794.02 919.8 1059.31 1204 1344.8 1488.98 - 1635.92 1788.07 1948.42 2114.18 2285.44 2461 2648.34 2833.05 3026.46 3218.07 3418.7 3625.65 3833.8 4050.31 4269.7 4492.3 - 4732.23 4969.38 5201.96 5447.82 5689.74 5934.19 6194.08 6457.46 / - 20 5 20 1 309.73 401.25 545.76 721.18 928.16 1161.81 1401.65 1641.09 1913.2 2192.54 2489.46 2787.27 - 3126.56 3457.78 3803.92 4166.99 4575.68 4968.26 5383.47 5809.18 6256.91 6700.6 7199.11 7671.32 8165.48 8668.58 9167.54 9696.51 - 10237.56 10791.52 11387.6 11973.73 12550.88 13170.97 13807.38 14459.83 / - 20 6 1 1 392.41 392.07 392.07 392.24 392.52 392.9 393.35 393.88 394.47 395.13 395.85 396.63 - 397.47 398.38 399.33 400.35 401.43 402.56 403.75 404.99 406.29 407.65 409.06 410.53 412.05 413.62 415.26 416.94 - 418.68 420.48 422.33 424.24 426.2 428.21 430.28 432.4 / - 20 6 2 1 392.33 391.98 391.98 392.15 392.43 392.8 393.26 393.78 394.38 395.03 395.75 396.54 - 397.38 398.28 399.24 400.26 401.33 402.47 403.65 404.9 406.2 407.56 408.97 410.44 411.96 413.54 415.17 416.86 - 418.6 420.4 422.25 424.15 426.11 428.13 430.2 432.32 / - 20 6 3 1 392.19 391.83 391.82 391.98 392.26 392.64 393.09 393.61 394.21 394.87 395.59 396.37 - 397.21 398.11 399.07 400.09 401.17 402.3 403.49 404.73 406.03 407.39 408.81 410.27 411.8 413.38 415.01 416.7 - 418.45 420.24 422.1 424.01 425.97 427.99 430.06 432.18 / - 20 6 4 1 391.93 391.55 391.53 391.69 391.97 392.34 392.79 393.31 393.9 394.56 395.28 396.06 - 396.91 397.81 398.77 399.79 400.86 402 403.19 404.44 405.74 407.1 408.51 409.98 411.51 413.09 414.73 416.42 - 418.17 419.97 421.83 423.74 425.71 427.73 429.81 431.94 / - 20 6 5 1 391.43 391.02 390.99 391.14 391.42 391.78 392.23 392.75 393.35 394 394.72 395.51 - 396.35 397.25 398.21 399.23 400.31 401.45 402.64 403.89 405.2 406.56 407.98 409.46 410.99 412.58 414.22 415.92 - 417.67 419.48 421.35 423.27 425.24 427.27 429.36 431.5 / - 20 6 6 1 390.48 390.03 389.98 390.12 390.38 390.74 391.19 391.71 392.3 392.96 393.68 394.46 - 395.31 396.21 397.18 398.21 399.29 400.43 401.63 402.89 404.2 405.57 407 408.49 410.03 411.63 413.28 414.99 - 416.76 418.58 420.46 422.4 424.39 426.43 428.54 430.69 / - 20 6 7 1 388.6 388.1 388.02 388.15 388.4 388.76 389.2 389.72 390.32 390.98 391.7 392.49 - 393.35 394.26 395.24 396.27 397.37 398.52 399.74 401.01 402.34 403.73 405.18 406.68 408.25 409.87 411.55 413.28 - 415.08 416.93 418.84 420.8 422.83 424.91 427.04 429.23 / - 20 6 8 1 384.94 384.37 384.26 384.38 384.63 384.99 385.43 385.96 386.56 387.23 387.97 388.78 - 389.65 390.59 391.59 392.65 393.77 394.96 396.21 397.52 398.89 400.32 401.81 403.36 404.97 406.64 408.37 410.16 - 412.01 413.92 415.89 417.92 420.01 422.16 424.37 426.64 / - 20 6 9 1 378 377.4 377.28 377.39 377.65 378.02 378.49 379.04 379.67 380.37 381.15 382 - 382.92 383.91 384.97 386.09 387.28 388.54 389.86 391.25 392.7 394.22 395.81 397.46 399.17 400.95 402.79 404.7 - 406.67 408.71 410.81 412.98 415.21 417.5 419.86 422.29 / - 20 6 10 1 366.38 364.95 364.38 364.26 364.38 364.69 365.14 365.71 366.38 367.16 368.02 368.98 - 370.03 371.17 372.38 373.68 375.06 376.53 378.07 379.69 381.39 383.16 385.02 386.95 388.95 391.03 393.19 395.43 - 397.73 400.12 402.57 405.11 407.71 410.39 413.14 415.97 / - 20 6 11 1 351.83 344.04 343.31 343.18 343.39 343.85 344.5 345.33 346.29 347.4 348.62 349.99 - 351.47 353.04 354.76 356.55 358.48 360.46 362.6 364.85 367.13 369.58 372.12 374.7 377.43 380.26 383.12 386.13 - 389.17 392.36 395.64 398.95 402.39 405.92 409.49 413.19 / - 20 6 12 1 321.28 318.79 318.06 318.1 318.61 319.46 320.57 321.92 323.48 325.24 327.19 329.32 - 331.61 334.08 336.71 339.5 342.44 345.54 348.79 352.18 355.71 359.38 363.2 367.15 371.23 375.44 379.79 384.26 - 388.85 393.57 398.42 403.38 408.46 413.66 418.98 424.42 / - 20 6 13 1 297.23 294.71 294.51 295.24 296.5 298.18 300.22 302.58 305.23 308.16 311.4 314.87 - 318.58 322.6 326.8 331.31 335.96 340.93 346.01 351.43 356.92 362.76 368.81 374.88 381.32 387.75 394.58 401.36 - 408.56 415.68 422.96 430.7 438.3 446.27 454.41 462.48 / - 20 6 14 1 276.19 275.83 276.92 278.86 281.46 284.62 288.31 292.52 297.2 302.3 307.8 313.68 - 319.91 326.48 333.38 340.59 348.11 355.93 364.05 372.44 381.12 390.07 399.28 408.76 418.94 429.89 440.83 452.08 - 463.36 474.85 486.81 498.59 511.13 523.55 536.24 549.18 / - 20 6 15 1 263.39 265.61 269.5 274.31 279.87 286.16 293.26 301.02 309.38 318.34 327.88 338.01 - 348.71 359.96 371.74 384.03 396.82 410.1 423.87 438.11 452.83 468.01 483.65 499.75 516.31 533.31 550.76 568.67 - 587.02 605.83 625.9 646.89 667.92 689.65 711.61 734.29 / - 20 6 16 1 260.37 266.17 273.21 281.75 291.75 303.13 315.83 329.8 345 361.38 378.85 397.39 - 416.91 437.41 458.87 481.29 504.65 528.95 554.18 580.3 607.26 635.04 663.7 693.36 723.91 755.27 787.45 820.47 - 855.24 891.25 927.92 965.04 1002.69 1040.71 1078.81 1116.83 / - 20 6 17 1 260.02 270.9 285.19 302.49 322.61 345.42 370.82 398.68 428.85 461.25 495.83 532.42 - 570.92 611.22 653.21 697.18 743.32 791.55 841.84 894.06 947.86 1003.17 1059.86 1119.34 1178.99 1236.7 1291.75 1338.7 - 1390.28 1442.03 1495.62 1551.23 1606.75 1667.36 1723.87 1785.03 / - 20 6 18 1 264.85 287.85 318.66 355.98 399.07 447.33 500.7 559 621.9 688.8 760.58 837.2 - 918.45 1004.09 1093.52 1184.95 1276.4 1359.75 1443.97 1531.83 1623.52 1715.94 1810.42 1904.58 2004.98 2104.73 2204.19 2308.94 - 2415.06 2517.28 2625.84 2736.28 2848.25 2967.58 3082.36 3198.23 / - 20 6 19 1 281.65 332.31 399.28 480.47 573.05 676.52 791.75 919.13 1054.93 1202.78 1343.98 1482.75 - 1637.01 1789.35 1949.92 2116.57 2289.49 2466.09 2654.7 2840.92 3037.29 3232.48 3436.61 3647.03 3858.57 4078.48 4301.14 4527.21 - 4754.59 5011.27 5247.1 5496.53 5741.71 5989.62 6252.85 6519.6 / - 20 6 20 1 309.74 401.24 543.79 717.88 923.51 1155.31 1395.59 1643.06 1902.9 2181.33 2477.25 2794.36 - 3110.82 3468.01 3816.33 4181.66 4592.96 4988.12 5405.83 5831.08 6284.93 6733.56 7207.64 7719.27 8200.66 8731.13 9237.52 9773.6 - 10321.76 10883.55 11461 12083.14 12668.69 13297.36 13942.42 14603.73 / - 20 7 1 1 394.58 394.09 394.03 394.17 394.43 394.79 395.24 395.76 396.34 397 397.72 398.5 - 399.34 400.24 401.2 402.21 403.29 404.42 405.61 406.86 408.16 409.52 410.93 412.41 413.93 415.51 417.15 418.84 - 420.59 422.39 424.25 426.16 428.13 430.15 432.23 434.36 / - 20 7 2 1 394.49 394 393.94 394.07 394.34 394.7 395.14 395.66 396.25 396.9 397.62 398.4 - 399.24 400.14 401.1 402.12 403.19 404.32 405.52 406.76 408.07 409.42 410.84 412.31 413.84 415.42 417.06 418.75 - 420.5 422.3 424.16 426.07 428.04 430.07 432.14 434.28 / - 20 7 3 1 394.35 393.84 393.78 393.91 394.17 394.53 394.97 395.49 396.07 396.73 397.44 398.22 - 399.06 399.96 400.92 401.94 403.02 404.15 405.34 406.59 407.89 409.25 410.67 412.14 413.67 415.26 416.89 418.59 - 420.34 422.14 424.01 425.92 427.89 429.92 432 434.13 / - 20 7 4 1 394.08 393.55 393.48 393.6 393.86 394.22 394.66 395.17 395.76 396.41 397.13 397.91 - 398.75 399.65 400.61 401.63 402.7 403.84 405.03 406.28 407.59 408.95 410.37 411.84 413.37 414.96 416.6 418.3 - 420.05 421.86 423.72 425.64 427.62 429.65 431.73 433.87 / - 20 7 5 1 393.57 393.01 392.92 393.04 393.29 393.64 394.08 394.6 395.18 395.83 396.55 397.33 - 398.17 399.07 400.03 401.05 402.13 403.27 404.46 405.72 407.03 408.39 409.81 411.29 412.83 414.42 416.07 417.77 - 419.53 421.35 423.22 425.15 427.13 429.17 431.26 433.41 / - 20 7 6 1 392.58 391.98 391.87 391.97 392.22 392.57 393 393.51 394.1 394.75 395.47 396.25 - 397.09 397.99 398.96 399.98 401.07 402.21 403.41 404.67 405.99 407.36 408.79 410.28 411.83 413.43 415.09 416.81 - 418.58 420.41 422.29 424.23 426.23 428.29 430.4 432.56 / - 20 7 7 1 390.64 389.98 389.84 389.93 390.16 390.51 390.94 391.45 392.03 392.69 393.41 394.2 - 395.05 395.96 396.94 397.97 399.07 400.22 401.44 402.71 404.05 405.44 406.89 408.4 409.97 411.6 413.28 415.02 - 416.82 418.68 420.6 422.57 424.6 426.69 428.83 431.04 / - 20 7 8 1 386.86 386.12 385.95 386.02 386.25 386.59 387.02 387.54 388.13 388.8 389.54 390.34 - 391.21 392.14 393.14 394.21 395.33 396.52 397.77 399.08 400.45 401.89 403.38 404.94 406.56 408.23 409.97 411.77 - 413.63 415.55 417.53 419.57 421.67 423.83 426.05 428.32 / - 20 7 9 1 379.72 378.92 378.72 378.78 379.01 379.36 379.81 380.35 380.97 381.67 382.45 383.29 - 384.21 385.2 386.26 387.38 388.58 389.84 391.16 392.56 394.02 395.55 397.14 398.8 400.52 402.31 404.17 406.09 - 408.07 410.12 412.24 414.42 416.67 418.98 421.35 423.79 / - 20 7 10 1 368.06 365.93 365.22 365.02 365.1 365.38 365.81 366.37 367.05 367.82 368.7 369.67 - 370.73 371.88 373.12 374.44 375.84 377.33 378.9 380.54 382.27 384.08 385.96 387.93 389.97 392.09 394.22 396.49 - 398.84 401.27 403.76 406.34 408.99 411.71 414.51 417.38 / - 20 7 11 1 353.45 344.27 343.59 343.5 343.75 344.25 344.93 345.77 346.76 347.9 349.15 350.54 - 352.05 353.69 355.41 357.25 359.22 361.27 363.44 365.7 368.1 370.57 373.13 375.82 378.58 381.47 384.39 387.47 - 390.58 393.84 397.14 400.57 404.09 407.66 411.35 415.08 / - 20 7 12 1 321.56 319.05 318.32 318.38 318.91 319.77 320.9 322.28 323.86 325.65 327.63 329.79 - 332.13 334.63 337.3 340.13 343.12 346.26 349.55 353 356.58 360.31 364.18 368.19 372.33 376.6 381.01 385.54 - 390.2 394.99 399.9 404.93 410.09 415.36 420.75 426.26 / - 20 7 13 1 297.43 294.84 294.7 295.46 296.76 298.47 300.53 302.89 305.58 308.54 311.77 315.3 - 319.04 323.09 327.31 331.85 336.53 341.54 346.78 352.11 357.79 363.52 369.62 375.94 382.24 388.93 395.6 402.67 - 409.68 417.13 424.47 432.28 439.95 448.12 456.11 464.49 / - 20 7 14 1 276.3 275.99 277.12 279.09 281.71 284.9 288.62 292.88 297.59 302.74 308.29 314.21 - 320.48 327.1 334.04 341.3 348.88 356.75 364.92 373.37 382.1 391.11 400.38 409.92 419.72 430.02 441.34 452.67 - 464.33 475.9 487.9 500.06 512.44 524.93 537.67 550.68 / - 20 7 15 1 263.46 265.77 269.73 274.58 280.18 286.49 293.57 301.37 309.78 318.79 328.38 338.54 - 349.28 360.58 372.41 384.76 397.61 410.94 424.76 439.06 453.83 469.07 484.77 500.92 517.53 534.59 552.1 570.06 - 588.48 607.35 626.68 647.33 668.93 690.91 712.73 735.19 / - 20 7 16 1 260.31 266.24 273.4 281.99 292.02 303.43 316.16 330.16 345.37 361.77 379.29 397.86 - 417.44 437.97 459.47 481.91 505.28 529.59 554.82 580.94 607.9 635.66 664.27 693.87 724.48 755.93 788.16 821.21 - 855.08 891.18 928.05 965.46 1003.13 1041.47 1079.58 1118.15 / - 20 7 17 1 259.95 270.91 285.29 302.66 322.82 345.65 371.05 398.91 429.07 461.45 496 532.59 - 571.09 611.35 653.28 697.15 743.17 791.28 841.43 893.59 947.46 1002.79 1059.49 1118.2 1178.3 1236.84 1292.68 1341.72 - 1394.63 1448.67 1503.93 1561.28 1618.61 1680.95 1739.47 1802.27 / - 20 7 18 1 264.77 287.9 318.8 356.18 399.31 447.57 500.85 559.04 621.83 688.57 760.12 836.48 - 917.48 1002.88 1092.18 1183.83 1275.64 1360 1445.32 1534.21 1626.86 1720.41 1815.49 1911.49 2013.5 2114.12 2215.04 2321.1 - 2428.58 2532.62 2642.76 2754.73 2868.31 2989.02 3105.54 3223.26 / - 20 7 19 1 281.62 331.88 399.04 480.16 573.18 676.42 791.42 918.43 1053.85 1201.49 1342.99 1482.42 - 1637.32 1790.49 1951.92 2118.91 2293.52 2471.23 2653.38 2848.57 3046.29 3246.07 3450.34 3664.85 3880.91 4104.31 4330.86 4560.87 - 4792.25 5053.01 5292.59 5545.81 5794.77 6046.61 6313.62 6584.27 / - 20 7 20 1 309.77 401.28 539.94 715.27 918.32 1154.43 1390.64 1638.19 1904.7 2184.55 2482.19 2802.29 - 3119.55 3478.74 3829.31 4197.09 4611.2 5009.03 5429.34 5854.32 6310.64 6766.53 7244.19 7723.6 8251.83 8770.15 9305.4 9849.28 - 10405.31 10975.84 11562.25 12163.76 12789.29 13427.31 14081.85 14752.95 / - 20 8 1 1 396.74 396.11 396 396.1 396.34 396.69 397.12 397.64 398.22 398.87 399.58 400.36 - 401.2 402.1 403.05 404.07 405.15 406.28 407.47 408.72 410.02 411.39 412.8 414.28 415.81 417.39 419.03 420.73 - 422.49 424.29 426.16 428.08 430.05 432.08 434.16 436.3 / - 20 8 2 1 396.65 396.02 395.9 396 396.25 396.59 397.03 397.54 398.12 398.77 399.48 400.26 - 401.1 401.99 402.95 403.97 405.05 406.18 407.37 408.62 409.92 411.29 412.7 414.18 415.71 417.3 418.94 420.64 - 422.39 424.2 426.07 427.99 429.96 431.99 434.08 436.22 / - 20 8 3 1 396.5 395.86 395.73 395.83 396.07 396.42 396.85 397.36 397.94 398.59 399.3 400.08 - 400.91 401.81 402.77 403.79 404.87 406 407.19 408.44 409.75 411.11 412.53 414 415.54 417.12 418.77 420.47 - 422.22 424.03 425.9 427.82 429.8 431.83 433.92 436.06 / - 20 8 4 1 396.22 395.56 395.42 395.52 395.75 396.1 396.52 397.03 397.61 398.26 398.97 399.75 - 400.59 401.49 402.44 403.46 404.54 405.68 406.87 408.12 409.43 410.79 412.21 413.69 415.22 416.82 418.46 420.16 - 421.92 423.74 425.61 427.53 429.52 431.55 433.65 435.79 / - 20 8 5 1 395.7 395 394.85 394.93 395.16 395.5 395.93 396.43 397.01 397.66 398.37 399.15 - 399.99 400.89 401.85 402.87 403.94 405.08 406.28 407.53 408.84 410.21 411.64 413.12 414.66 416.25 417.9 419.61 - 421.38 423.2 425.08 427.01 429 431.05 433.15 435.3 / - 20 8 6 1 394.68 393.93 393.76 393.83 394.05 394.38 394.81 395.31 395.88 396.53 397.24 398.02 - 398.86 399.76 400.73 401.75 402.84 403.98 405.18 406.44 407.76 409.14 410.57 412.06 413.61 415.22 416.88 418.6 - 420.38 422.22 424.11 426.06 428.06 430.13 432.24 434.42 / - 20 8 7 1 392.68 391.86 391.65 391.7 391.91 392.24 392.66 393.16 393.74 394.39 395.11 395.89 - 396.74 397.65 398.62 399.66 400.75 401.91 403.13 404.4 405.74 407.13 408.59 410.1 411.67 413.31 415 416.74 - 418.55 420.41 422.34 424.32 426.36 428.45 430.61 432.82 / - 20 8 8 1 388.78 387.86 387.61 387.65 387.85 388.17 388.59 389.1 389.68 390.35 391.08 391.88 - 392.75 393.68 394.68 395.74 396.87 398.05 399.31 400.62 402 403.44 404.94 406.5 408.12 409.8 411.55 413.36 - 415.22 417.15 419.14 421.19 423.3 425.47 427.7 429.99 / - 20 8 9 1 381.45 380.41 380.1 380.09 380.28 380.6 381.03 381.55 382.16 382.85 383.62 384.47 - 385.38 386.37 387.43 388.56 389.76 391.02 392.36 393.76 395.23 396.77 398.37 400.04 401.78 403.58 405.45 407.39 - 409.39 411.46 413.59 415.79 418.06 420.39 422.78 425.25 / - 20 8 10 1 369.82 366.79 366 365.7 365.75 366 366.42 366.97 367.64 368.42 369.31 370.29 - 371.37 372.54 373.79 375.14 376.57 378.08 379.68 381.35 383.11 384.95 386.87 388.87 390.95 393.05 395.29 397.6 - 399.99 402.45 405 407.62 410.31 413.08 415.92 418.84 / - 20 8 11 1 355.1 344.53 343.84 343.73 343.99 344.49 345.2 346.07 347.1 348.28 349.58 351.02 - 352.57 354.25 356.05 357.96 359.98 362.08 364.28 366.59 369.01 371.54 374.18 376.9 379.72 382.64 385.66 388.78 - 391.99 395.29 398.71 402.19 405.74 409.43 413.18 417.02 / - 20 8 12 1 321.85 319.31 318.59 318.66 319.2 320.08 321.24 322.63 324.25 326.07 328.07 330.27 - 332.64 335.18 337.89 340.76 343.8 346.99 350.33 353.82 357.46 361.25 365.17 369.24 373.44 377.78 382.25 386.85 - 391.58 396.43 401.41 406.51 411.74 417.09 422.55 428.14 / - 20 8 13 1 297.64 294.96 294.89 295.68 297.01 298.74 300.82 303.22 305.91 308.92 312.17 315.69 - 319.51 323.58 327.83 332.39 337.21 342.15 347.43 352.8 358.51 364.45 370.42 376.78 383.35 389.89 396.85 403.75 - 411.07 418.31 426 433.57 441.62 449.52 457.93 466.14 / - 20 8 14 1 276.42 276.16 277.32 279.32 281.97 285.19 288.95 293.24 298.01 303.19 308.78 314.74 - 321.06 327.72 334.71 342.02 349.65 357.57 365.79 374.29 383.08 392.14 401.48 411.08 420.94 431.06 441.69 453.14 - 464.86 476.96 489.08 501.33 513.72 526.41 539.53 552.62 / - 20 8 15 1 263.54 265.94 269.96 274.86 280.5 286.86 293.92 301.75 310.2 319.24 328.88 339.08 - 349.86 361.19 373.07 385.47 398.37 411.76 425.64 439.99 454.81 470.1 485.86 502.07 518.73 535.85 553.42 571.43 - 589.9 608.82 628.21 648.06 669.3 691.46 713.52 736.28 / - 20 8 16 1 260.26 266.29 273.6 282.23 292.3 303.74 316.5 330.52 345.75 362.16 379.71 398.31 - 417.93 438.51 460.04 482.5 505.89 530.19 555.42 581.54 608.49 636.23 664.79 694.32 724.88 756.41 788.73 821.82 - 855.71 890.39 927.33 964.99 1003.13 1041.39 1080.18 1118.54 / - 20 8 17 1 259.88 270.92 285.38 302.82 323.03 345.88 371.28 399.12 429.27 461.62 496.13 532.73 - 571.21 611.45 653.31 697.07 742.96 790.93 840.93 892.92 946.82 1002.22 1058.94 1117.28 1177.18 1236.63 1293.5 1344.49 - 1399.6 1454.48 1512.23 1571.4 1630.6 1694.53 1754.96 1819.92 / - 20 8 18 1 264.7 287.96 318.94 356.38 399.53 447.81 500.99 559.06 621.72 688.32 759.63 835.73 - 916.44 1001.56 1090.64 1182.48 1274.7 1359.66 1445.98 1536.28 1630.22 1724.95 1822.7 1919.5 2021.81 2123.9 2226.31 2333.84 - 2442.77 2548.62 2660.46 2774.1 2889.4 3011.58 3129.96 3249.58 / - 20 8 19 1 281.59 331.55 398.55 479.83 572.09 676.31 791.07 915.1 1052.3 1200.13 1341.9 1481.98 - 1630.29 1792.43 1953.8 2121.03 2296.68 2476.43 2659.77 2847.78 3055.57 3255.84 3462.61 3678.85 3900.03 4125.09 4356.41 4590.84 - 4826.92 5074.46 5336.45 5594.1 5847.25 6103.67 6375.13 6650.19 / - 20 8 20 1 309.83 401.4 536.17 709.21 913.13 1147.87 1387.09 1638.8 1906.57 2187.9 2488.55 2792.31 - 3128.69 3466.62 3843.01 4213.37 4597.14 5031.1 5454.23 5882.51 6337.97 6801.4 7282.53 7765.78 8298.32 8823.84 9368.76 9921.51 - 10486.55 11066.73 11662.99 12274.63 12902.18 13559.64 14224.77 14906.58 / - 20 9 1 1 398.88 398.13 397.96 398.03 398.25 398.59 399.01 399.51 400.09 400.73 401.44 402.21 - 403.05 403.95 404.91 405.92 407 408.13 409.32 410.57 411.88 413.24 414.66 416.14 417.67 419.26 420.91 422.61 - 424.37 426.19 428.05 429.98 431.96 434 436.09 438.24 / - 20 9 2 1 398.8 398.04 397.86 397.93 398.15 398.48 398.91 399.41 399.98 400.63 401.34 402.11 - 402.95 403.84 404.8 405.82 406.89 408.03 409.22 410.47 411.78 413.14 414.56 416.04 417.57 419.16 420.81 422.51 - 424.27 426.09 427.96 429.88 431.87 433.9 436 438.15 / - 20 9 3 1 398.64 397.87 397.69 397.75 397.97 398.3 398.72 399.22 399.8 400.44 401.15 401.92 - 402.76 403.66 404.61 405.63 406.71 407.84 409.03 410.28 411.59 412.96 414.38 415.86 417.39 418.98 420.63 422.34 - 424.1 425.91 427.79 429.71 431.7 433.74 435.84 437.99 / - 20 9 4 1 398.36 397.56 397.37 397.43 397.64 397.97 398.39 398.89 399.46 400.1 400.81 401.58 - 402.42 403.32 404.27 405.29 406.37 407.5 408.7 409.95 411.26 412.62 414.05 415.53 417.07 418.66 420.31 422.02 - 423.78 425.6 427.48 429.41 431.4 433.44 435.54 437.7 / - 20 9 5 1 397.82 396.98 396.77 396.82 397.03 397.36 397.77 398.27 398.84 399.48 400.19 400.96 - 401.8 402.69 403.65 404.67 405.75 406.89 408.08 409.34 410.65 412.02 413.45 414.93 416.47 418.07 419.73 421.44 - 423.21 425.04 426.92 428.86 430.86 432.91 435.02 437.19 / - 20 9 6 1 396.77 395.88 395.64 395.68 395.88 396.19 396.6 397.1 397.67 398.31 399.01 399.79 - 400.63 401.53 402.49 403.51 404.59 405.74 406.94 408.2 409.52 410.9 412.34 413.83 415.38 416.99 418.66 420.39 - 422.17 424.01 425.91 427.87 429.88 431.95 434.08 436.26 / - 20 9 7 1 394.7 393.73 393.45 393.47 393.65 393.96 394.37 394.86 395.43 396.07 396.79 397.57 - 398.41 399.32 400.29 401.32 402.42 403.58 404.8 406.07 407.41 408.81 410.27 411.78 413.36 415 416.69 418.44 - 420.26 422.13 424.06 426.05 428.09 430.2 432.36 434.59 / - 20 9 8 1 390.69 389.59 389.26 389.25 389.43 389.73 390.14 390.63 391.21 391.86 392.59 393.39 - 394.25 395.18 396.18 397.24 398.37 399.56 400.82 402.13 403.51 404.96 406.46 408.03 409.66 411.35 413.1 414.91 - 416.79 418.73 420.72 422.78 424.9 427.09 429.33 431.63 / - 20 9 9 1 383.18 381.86 381.4 381.32 381.45 381.73 382.13 382.64 383.23 383.91 384.68 385.51 - 386.43 387.42 388.48 389.61 390.82 392.09 393.43 394.85 396.33 397.88 399.49 401.18 402.93 404.75 406.64 408.6 - 410.62 412.71 414.86 417.09 419.38 421.73 424.15 426.64 / - 20 9 10 1 371.67 367.63 366.69 366.34 366.33 366.56 366.96 367.51 368.19 368.97 369.87 370.87 - 371.96 373.15 374.43 375.8 377.25 378.8 380.42 382.14 383.9 385.78 387.74 389.78 391.89 394.09 396.35 398.71 - 401.15 403.66 406.23 408.9 411.65 414.47 417.36 420.31 / - 20 9 11 1 356.75 344.8 344.08 343.97 344.22 344.73 345.45 346.34 347.39 348.57 349.9 351.36 - 352.94 354.64 356.47 358.4 360.46 362.63 364.91 367.29 369.79 372.39 375.1 377.92 380.82 383.81 386.9 390.08 - 393.36 396.75 400.22 403.78 407.43 411.18 415.02 418.95 / - 20 9 12 1 322.14 319.58 318.86 318.94 319.5 320.39 321.57 322.99 324.63 326.48 328.52 330.75 - 333.15 335.74 338.49 341.4 344.48 347.72 351.12 354.66 358.35 362.2 366.18 370.3 374.57 378.97 383.5 388.17 - 392.97 397.89 402.94 408.12 413.42 418.84 424.38 430.04 / - 20 9 13 1 297.85 295.07 295.08 295.92 297.27 299.02 301.13 303.55 306.27 309.27 312.58 316.11 - 319.96 324 328.35 332.96 337.71 342.77 348.07 353.62 359.23 365.21 371.41 377.63 384.24 391.06 397.83 405.05 - 412.18 419.77 427.24 435.18 442.98 451.28 459.77 468.06 / - 20 9 14 1 276.54 276.33 277.52 279.55 282.23 285.48 289.28 293.61 298.42 303.65 309.28 315.29 - 321.65 328.35 335.39 342.75 350.42 358.39 366.66 375.22 384.06 393.18 402.57 412.23 422.15 432.34 442.77 453.46 - 465.27 477.4 489.73 502.36 514.95 527.75 540.75 554.08 / - 20 9 15 1 263.63 266.11 270.21 275.18 280.86 287.24 294.32 302.13 310.62 319.71 329.38 339.62 - 350.43 361.8 373.71 386.16 399.12 412.57 426.5 440.9 455.77 471.12 486.92 503.19 519.9 537.07 554.69 572.76 - 591.28 610.25 629.69 649.59 669.97 691.73 713.92 736.99 / - 20 9 16 1 260.2 266.33 273.8 282.49 292.6 304.07 316.84 330.88 346.12 362.54 380.1 398.74 - 418.39 439.01 460.57 483.06 506.46 530.77 555.99 582.1 609.04 636.76 665.26 694.72 725.2 756.67 789.08 822.26 - 856.18 890.88 926.87 964.66 1003.05 1041.32 1080.49 1119.18 / - 20 9 17 1 259.82 270.93 285.48 303 323.25 346.11 371.5 399.32 429.46 461.78 496.24 532.8 - 571.28 611.49 653.3 696.93 742.69 790.51 840.34 892.16 945.92 1001.39 1058.18 1116.06 1176.31 1235.98 1294.18 1347.47 - 1403.99 1461.2 1520.48 1581.2 1641.71 1706.47 1768.3 1834.55 / - 20 9 18 1 264.63 288.01 319.08 356.58 399.74 448.03 501.12 559.07 621.58 688.03 759.11 834.92 - 915.32 1000.13 1088.95 1180.85 1273.53 1358.95 1445.77 1536.62 1631.54 1727.8 1827.49 1928.35 2030.27 2134.08 2238.17 2347.23 - 2457.78 2565.52 2679.11 2794.55 2913.08 3035.49 3155.82 3277.44 / - 20 9 19 1 281.59 331.28 398.2 479.38 572.19 674.52 788.58 914.07 1051.13 1194.03 1340.71 1481.48 - 1630.49 1795.14 1955.71 2123.92 2299.87 2481.67 2666.25 2855.83 3064.97 3270.49 3475.31 3693.22 3916.33 4143.18 4376.85 4615.15 - 4855.94 5109 5366.1 5638.79 5896.7 6157.99 6434.83 6715.04 / - 20 9 20 1 309.92 401.61 533.26 706.1 907.96 1141.32 1379.54 1633.75 1896.45 2191.43 2479.51 2799.58 - 3138.35 3479.96 3857.55 4230.61 4617.3 5054.65 5480.68 5912.49 6367.29 6834.4 7323.29 7810.64 8347.02 8876.62 9420.81 9987.05 - 10562.03 11153.16 11760.54 12383.5 13022.37 13661.71 14369.14 15062.86 / - 20 10 1 1 401.01 400.14 399.91 399.95 400.16 400.48 400.89 401.38 401.95 402.59 403.3 404.07 - 404.9 405.8 406.75 407.77 408.84 409.98 411.17 412.42 413.73 415.09 416.52 418 419.53 421.13 422.78 424.48 - 426.25 428.06 429.94 431.87 433.86 435.9 438 440.16 / - 20 10 2 1 400.92 400.04 399.81 399.85 400.05 400.37 400.78 401.28 401.84 402.48 403.19 403.96 - 404.79 405.69 406.64 407.66 408.73 409.87 411.06 412.31 413.62 414.98 416.41 417.89 419.43 421.02 422.67 424.38 - 426.14 427.96 429.84 431.77 433.76 435.8 437.91 440.06 / - 20 10 3 1 400.76 399.87 399.63 399.67 399.87 400.18 400.59 401.09 401.65 402.29 403 403.77 - 404.6 405.49 406.45 407.46 408.54 409.67 410.87 412.12 413.43 414.79 416.22 417.7 419.24 420.83 422.48 424.19 - 425.96 427.78 429.66 431.59 433.58 435.63 437.73 439.89 / - 20 10 4 1 400.47 399.55 399.3 399.33 399.53 399.84 400.25 400.74 401.3 401.94 402.64 403.41 - 404.25 405.14 406.1 407.11 408.19 409.32 410.52 411.77 413.08 414.45 415.87 417.36 418.9 420.5 422.15 423.86 - 425.63 427.46 429.34 431.28 433.27 435.32 437.43 439.59 / - 20 10 5 1 399.91 398.96 398.69 398.71 398.89 399.2 399.61 400.09 400.66 401.29 401.99 402.76 - 403.6 404.49 405.45 406.46 407.54 408.68 409.88 411.13 412.44 413.82 415.25 416.73 418.28 419.88 421.54 423.26 - 425.04 426.87 428.76 430.7 432.7 434.76 436.88 439.05 / - 20 10 6 1 398.83 397.81 397.51 397.51 397.69 397.99 398.39 398.87 399.44 400.07 400.77 401.54 - 402.38 403.27 404.23 405.25 406.34 407.48 408.68 409.94 411.27 412.65 414.08 415.58 417.14 418.75 420.43 422.16 - 423.94 425.79 427.69 429.66 431.68 433.75 435.89 438.08 / - 20 10 7 1 396.71 395.58 395.24 395.22 395.38 395.67 396.06 396.54 397.1 397.74 398.45 399.22 - 400.06 400.97 401.94 402.97 404.07 405.22 406.44 407.72 409.06 410.46 411.92 413.44 415.02 416.66 418.36 420.12 - 421.94 423.82 425.76 427.75 429.81 431.92 434.1 436.33 / - 20 10 8 1 392.58 391.3 390.89 390.83 390.98 391.26 391.65 392.13 392.7 393.35 394.07 394.86 - 395.73 396.66 397.65 398.72 399.84 401.04 402.29 403.61 405 406.44 407.95 409.53 411.16 412.86 414.62 416.44 - 418.33 420.27 422.28 424.35 426.48 428.68 430.93 433.25 / - 20 10 9 1 384.92 383.26 382.64 382.45 382.51 382.75 383.12 383.6 384.18 384.85 385.6 386.44 - 387.35 388.34 389.41 390.54 391.76 393.04 394.39 395.82 397.31 398.88 400.51 402.22 403.99 405.83 407.74 409.72 - 411.77 413.88 416.07 418.32 420.63 423.02 425.47 427.99 / - 20 10 10 1 373.62 368.39 367.31 366.91 366.87 367.08 367.48 368.03 368.72 369.52 370.43 371.42 - 372.53 373.74 375.05 376.44 377.93 379.5 381.17 382.91 384.75 386.62 388.62 390.7 392.86 395.11 397.43 399.81 - 402.28 404.85 407.49 410.21 413.01 415.88 418.8 421.83 / - 20 10 11 1 358.39 345.07 344.32 344.21 344.46 344.98 345.7 346.6 347.67 348.88 350.22 351.7 - 353.31 355.04 356.89 358.86 360.95 363.15 365.46 367.89 370.43 373.07 375.82 378.68 381.65 384.72 387.89 391.16 - 394.54 398.02 401.59 405.26 409.02 412.86 416.79 420.8 / - 20 10 12 1 322.43 319.84 319.13 319.22 319.79 320.71 321.91 323.35 325.02 326.89 328.97 331.23 - 333.67 336.29 339.09 342.05 345.18 348.46 351.91 355.51 359.26 363.16 367.2 371.39 375.71 380.18 384.78 389.52 - 394.38 399.38 404.5 409.75 415.13 420.63 426.24 431.98 / - 20 10 13 1 297.86 295.21 295.26 296.14 297.52 299.31 301.42 303.86 306.62 309.64 312.98 316.54 - 320.41 324.48 328.87 333.5 338.29 343.4 348.75 354.2 359.97 365.97 372.21 378.48 385.13 392 398.82 406.08 - 413.55 420.91 428.76 436.46 444.68 453.05 461.25 469.99 / - 20 10 14 1 276.67 276.5 277.72 279.78 282.49 285.76 289.61 293.99 298.84 304.11 309.79 315.84 - 322.24 328.99 336.07 343.48 351.2 359.22 367.54 376.15 385.04 394.22 403.67 413.38 423.36 433.61 444.1 454.86 - 465.86 477.74 490.24 502.98 515.82 528.94 542.16 555.5 / - 20 10 15 1 263.71 266.32 270.53 275.53 281.24 287.65 294.75 302.54 311.06 320.18 329.89 340.16 - 351.01 362.4 374.35 386.83 399.84 413.34 427.32 441.78 456.71 472.1 487.95 504.27 521.03 538.25 555.92 574.04 - 592.61 611.63 631.1 651.05 671.46 692.3 714.07 737.29 / - 20 10 16 1 260.17 266.44 274.06 282.78 292.91 304.4 317.19 331.24 346.49 362.92 380.47 399.14 - 418.81 439.47 461.06 483.58 507 531.31 556.52 582.61 609.53 637.23 665.67 695.05 725.44 756.81 789.16 822.43 - 856.44 891.18 926.66 963.44 1002.01 1041.12 1080.35 1119.48 / - 20 10 17 1 259.8 270.98 285.63 303.19 323.47 346.33 371.71 399.5 429.62 461.91 496.32 532.82 - 571.29 611.48 653.24 696.74 742.34 790 839.66 891.28 944.83 1000.25 1057.14 1115.12 1174.45 1234.77 1294.36 1349.74 - 1407.87 1466.56 1527.25 1589.23 1651.61 1717.16 1780.72 1848.66 / - 20 10 18 1 264.57 288.07 319.22 356.77 399.93 448.22 501.24 559.04 621.4 687.72 758.55 834.06 - 914.12 998.6 1087.12 1178.87 1272.03 1357.96 1445.3 1537.87 1632.19 1729.05 1829.43 1931.45 2035.05 2141.07 2247.79 2359.4 - 2472.4 2583.95 2698.37 2816.04 2939.23 3060.98 3183.4 3307.12 / - 20 10 19 1 281.6 330.81 397.84 479.02 571.6 674.41 788.13 913.28 1049.9 1192.49 1339.44 1480.91 - 1630.63 1787.52 1957.67 2126.94 2303.22 2486.19 2673.04 2865.38 3064.97 3281.95 3488.6 3708.17 3933.24 4162.08 4397.7 4638.2 - 4881.26 5137.58 5400.59 5657.2 5928.36 6207.91 6490.29 6776.58 / - 20 10 20 1 310.05 401.91 528.8 700.29 902.9 1134.79 1379.09 1628.55 1900.12 2183.24 2485.12 2807.34 - 3148.65 3492.63 3873.15 4248.99 4638.84 5044.69 5508.91 5944.51 6402.82 6865.71 7362.58 7858.6 8399.05 8933.03 9481.58 10027.16 - 10632.87 11230.87 11847.03 12480.68 13132.01 13786.14 14467.41 15216.26 / - 20 11 1 1 403.1 402.13 401.85 401.87 402.05 402.36 402.76 403.25 403.81 404.44 405.14 405.91 - 406.74 407.64 408.59 409.6 410.68 411.81 413 414.26 415.57 416.93 418.36 419.84 421.38 422.98 424.63 426.34 - 428.11 429.93 431.81 433.75 435.74 437.79 439.9 442.06 / - 20 11 2 1 403.01 402.03 401.75 401.76 401.95 402.25 402.65 403.14 403.7 404.33 405.03 405.8 - 406.63 407.52 408.48 409.49 410.57 411.7 412.89 414.14 415.45 416.82 418.25 419.73 421.27 422.87 424.52 426.23 - 428 429.82 431.71 433.64 435.64 437.69 439.8 441.96 / - 20 11 3 1 402.85 401.85 401.57 401.57 401.75 402.06 402.46 402.94 403.5 404.13 404.83 405.6 - 406.43 407.32 408.28 409.29 410.36 411.5 412.69 413.94 415.25 416.62 418.05 419.53 421.07 422.67 424.33 426.04 - 427.81 429.63 431.52 433.46 435.45 437.51 439.62 441.79 / - 20 11 4 1 402.55 401.53 401.23 401.23 401.4 401.7 402.1 402.58 403.14 403.77 404.47 405.23 - 406.06 406.96 407.91 408.92 410 411.13 412.33 413.58 414.89 416.26 417.69 419.17 420.72 422.32 423.98 425.69 - 427.46 429.29 431.18 433.12 435.13 437.18 439.3 441.47 / - 20 11 5 1 401.98 400.91 400.59 400.58 400.75 401.04 401.43 401.91 402.47 403.09 403.79 404.56 - 405.39 406.28 407.23 408.25 409.32 410.46 411.66 412.91 414.23 415.6 417.03 418.52 420.07 421.68 423.34 425.06 - 426.84 428.68 430.57 432.52 434.53 436.6 438.72 440.9 / - 20 11 6 1 400.87 399.72 399.37 399.34 399.49 399.77 400.16 400.63 401.19 401.82 402.51 403.28 - 404.11 405 405.96 406.98 408.06 409.2 410.41 411.67 412.99 414.37 415.82 417.32 418.87 420.49 422.17 423.9 - 425.7 427.55 429.46 431.43 433.45 435.54 437.68 439.88 / - 20 11 7 1 398.68 397.41 397 396.94 397.08 397.35 397.73 398.2 398.75 399.38 400.08 400.85 - 401.69 402.59 403.56 404.59 405.69 406.84 408.06 409.34 410.69 412.09 413.55 415.08 416.66 418.31 420.01 421.78 - 423.6 425.49 427.43 429.43 431.5 433.62 435.8 438.05 / - 20 11 8 1 394.44 392.98 392.48 392.38 392.49 392.75 393.12 393.6 394.16 394.8 395.51 396.3 - 397.16 398.09 399.09 400.15 401.28 402.47 403.73 405.05 406.44 407.89 409.41 410.99 412.63 414.33 416.1 417.93 - 419.83 421.79 423.8 425.89 428.03 430.24 432.51 434.84 / - 20 11 9 1 386.67 384.62 383.8 383.49 383.48 383.66 383.99 384.44 385 385.65 386.4 387.23 - 388.14 389.14 390.21 391.36 392.58 393.87 395.24 396.69 398.2 399.78 401.44 403.17 404.96 406.83 408.77 410.78 - 412.85 415 417.21 419.5 421.85 424.27 426.76 429.31 / - 20 11 10 1 375.62 368.94 367.79 367.38 367.33 367.54 367.95 368.51 369.2 370.03 370.96 372 - 373.15 374.35 375.69 377.12 378.65 380.26 381.96 383.75 385.58 387.54 389.58 391.7 393.91 396.2 398.52 400.97 - 403.5 406.11 408.81 411.55 414.4 417.33 420.34 423.42 / - 20 11 11 1 360.01 345.33 344.57 344.44 344.7 345.22 345.96 346.87 347.95 349.18 350.54 352.05 - 353.68 355.44 357.32 359.32 361.44 363.68 366.03 368.5 371.07 373.76 376.56 379.47 382.48 385.6 388.82 392.15 - 395.58 399.11 402.74 406.47 410.31 414.24 418.27 422.39 / - 20 11 12 1 322.72 320.11 319.4 319.5 320.09 321.02 322.24 323.71 325.41 327.31 329.42 331.71 - 334.2 336.86 339.69 342.7 345.88 349.21 352.71 356.36 360.17 364.13 368.23 372.48 376.87 381.41 386.08 390.88 - 395.82 400.89 406.09 411.41 416.87 422.44 428.14 433.96 / - 20 11 13 1 297.82 295.34 295.45 296.36 297.77 299.57 301.72 304.18 306.95 309.99 313.34 316.96 - 320.81 324.96 329.37 333.96 338.86 344.01 349.39 354.88 360.72 366.78 373.04 379.35 386.03 392.94 400.06 407.13 - 414.64 422.36 429.96 438.06 446.35 454.46 463.12 471.55 / - 20 11 14 1 276.81 276.68 277.93 280.01 282.75 286.06 289.95 294.37 299.26 304.58 310.3 316.39 - 322.84 329.64 336.76 344.21 351.98 360.04 368.41 377.07 386.02 395.25 404.75 414.52 424.56 434.87 445.43 456.24 - 467.31 478.63 490.2 503.06 516.23 529.6 543 556.48 / - 20 11 15 1 263.8 266.6 270.88 275.91 281.64 288.08 295.2 303 311.51 320.67 330.4 340.71 - 351.58 363 374.97 387.47 400.51 414.06 428.1 442.62 457.59 473.04 488.94 505.3 522.11 539.38 557.09 575.25 - 593.87 612.93 632.45 652.43 672.87 693.74 715.02 736.73 / - 20 11 16 1 260.2 266.63 274.34 283.1 293.25 304.75 317.55 331.6 346.86 363.28 380.84 399.49 - 419.19 439.87 461.5 484.04 507.47 531.79 556.99 583.06 609.96 637.63 666.02 695.31 725.59 756.86 789.09 822.27 - 856.37 891.2 926.73 962.97 1000.5 1039.84 1079.59 1118.83 / - 20 11 17 1 259.82 271.11 285.81 303.4 323.7 346.56 371.91 399.67 429.73 462 496.36 532.78 - 571.22 611.4 653.11 696.47 741.92 789.4 838.86 890.27 943.6 998.79 1055.71 1113.83 1172.71 1233.01 1292.66 1346.05 - 1399.44 1455.4 1511.93 1570.74 1631.16 1692.01 1750.86 1815.57 / - 20 11 18 1 264.55 288.17 319.35 356.95 400.1 448.38 501.33 558.98 621.17 687.35 757.93 833.13 - 912.84 996.94 1085.13 1176.65 1270.22 1356.75 1446.03 1538.45 1632.73 1730.32 1831.39 1934.18 2038.6 2145.53 2253.14 2366.24 - 2481.4 2598.39 2715.91 2835.14 2960.67 3084.82 3210.35 3337.07 / - 20 11 19 1 281.64 330.34 397.47 478.66 570.98 672.68 787.61 912.45 1045.29 1190.83 1332.62 1481.58 - 1630.86 1788.65 1959.74 2130.14 2307.61 2491.01 2679.78 2876.79 3075.39 3283.44 3504.21 3724.08 3951.11 4182.17 4419.82 4662.78 - 4908.07 5166.77 5432.21 5691.67 5966.3 6248.75 6538.57 6831.4 / - 20 11 20 1 310.21 402.3 522.9 697.59 898.02 1127.72 1373.22 1623.77 1896.29 2187.39 2491.25 2815.87 - 3141.15 3506.27 3862.69 4268.81 4661.96 5071.5 5492.54 5978.91 6441.27 6908.32 7404.81 7907.73 8434.19 8993.64 9547.28 10098.14 - 10680.85 11311.65 11933.19 12572.63 13230.43 13890.85 14579.67 15294.92 / - 20 12 1 1 405.14 404.09 403.78 403.77 403.94 404.23 404.62 405.1 405.66 406.29 406.98 407.75 - 408.58 409.47 410.42 411.43 412.51 413.64 414.83 416.08 417.39 418.76 420.19 421.67 423.21 424.81 426.47 428.18 - 429.96 431.78 433.67 435.61 437.61 439.67 441.78 443.95 / - 20 12 2 1 405.05 403.99 403.67 403.66 403.83 404.12 404.51 404.99 405.54 406.17 406.87 407.63 - 408.46 409.35 410.3 411.31 412.39 413.52 414.71 415.96 417.28 418.64 420.07 421.56 423.1 424.7 426.36 428.07 - 429.84 431.67 433.56 435.5 437.5 439.56 441.68 443.85 / - 20 12 3 1 404.88 403.81 403.48 403.47 403.63 403.92 404.31 404.78 405.34 405.97 406.66 407.42 - 408.25 409.14 410.09 411.1 412.18 413.31 414.5 415.76 417.07 418.43 419.86 421.35 422.89 424.49 426.15 427.87 - 429.64 431.47 433.36 435.31 437.31 439.37 441.49 443.66 / - 20 12 4 1 404.58 403.47 403.13 403.11 403.26 403.55 403.94 404.41 404.96 405.59 406.28 407.04 - 407.87 408.76 409.71 410.72 411.8 412.93 414.12 415.38 416.69 418.06 419.49 420.97 422.52 424.12 425.79 427.5 - 429.28 431.12 433.01 434.96 436.96 439.03 441.15 443.33 / - 20 12 5 1 403.99 402.84 402.47 402.43 402.58 402.86 403.24 403.71 404.26 404.88 405.58 406.34 - 407.16 408.05 409 410.02 411.09 412.23 413.42 414.68 415.99 417.37 418.8 420.29 421.84 423.45 425.12 426.84 - 428.63 430.47 432.37 434.33 436.34 438.41 440.54 442.73 / - 20 12 6 1 402.85 401.61 401.2 401.14 401.27 401.54 401.91 402.38 402.92 403.54 404.24 405 - 405.82 406.72 407.67 408.69 409.77 410.91 412.11 413.38 414.7 416.08 417.53 419.03 420.59 422.21 423.89 425.63 - 427.43 429.29 431.2 433.18 435.21 437.3 439.45 441.66 / - 20 12 7 1 400.6 399.21 398.74 398.64 398.75 399 399.36 399.82 400.37 400.99 401.69 402.45 - 403.29 404.19 405.15 406.18 407.28 408.43 409.65 410.94 412.28 413.68 415.15 416.68 418.27 419.92 421.63 423.4 - 425.23 427.12 429.07 431.09 433.16 435.29 437.48 439.74 / - 20 12 8 1 396.24 394.61 394.03 393.88 393.95 394.19 394.55 395.01 395.56 396.19 396.9 397.68 - 398.54 399.47 400.46 401.52 402.65 403.85 405.11 406.44 407.83 409.29 410.81 412.4 414.05 415.76 417.54 419.38 - 421.28 423.25 425.28 427.38 429.54 431.76 434.04 436.39 / - 20 12 9 1 388.44 385.95 384.9 384.45 384.34 384.45 384.74 385.16 385.69 386.33 387.07 387.9 - 388.82 389.81 390.89 392.05 393.29 394.6 395.99 397.45 398.99 400.6 402.28 404.04 405.87 407.77 409.74 411.78 - 413.89 416.07 418.33 420.65 423.04 425.51 428.04 430.64 / - 20 12 10 1 377.58 369.3 368.14 367.74 367.71 367.94 368.36 368.95 369.67 370.52 371.45 372.52 - 373.7 374.98 376.36 377.83 379.39 381.01 382.75 384.59 386.52 388.53 390.58 392.76 395.03 397.38 399.76 402.28 - 404.87 407.55 410.3 413.09 416 418.99 422.05 425.16 / - 20 12 11 1 361.58 345.6 344.81 344.68 344.93 345.46 346.21 347.14 348.23 349.48 350.87 352.39 - 354.05 355.84 357.75 359.78 361.94 364.21 366.61 369.11 371.73 374.46 377.31 380.26 383.32 386.49 389.77 393.15 - 396.64 400.22 403.92 407.71 411.6 415.59 419.69 423.88 / - 20 12 12 1 323.01 320.37 319.67 319.78 320.38 321.34 322.58 324.07 325.79 327.73 329.87 332.2 - 334.72 337.43 340.31 343.36 346.58 349.97 353.52 357.23 361.1 365.11 369.28 373.59 378.05 382.65 387.39 392.27 - 397.28 402.42 407.7 413.1 418.63 424.29 430.07 435.98 / - 20 12 13 1 297.75 295.47 295.64 296.58 298.01 299.82 301.98 304.45 307.24 310.32 313.68 317.31 - 321.24 325.39 329.81 334.5 339.43 344.51 349.92 355.56 361.44 367.54 373.69 380.23 386.98 393.91 401.05 408.17 - 415.74 423.51 431.49 439.32 447.67 455.84 464.56 473.48 / - 20 12 14 1 276.95 276.85 278.14 280.25 283.01 286.35 290.29 294.76 299.7 305.06 310.82 316.96 - 323.45 330.29 337.46 344.95 352.76 360.88 369.29 378 387 396.28 405.83 415.66 425.75 436.11 446.73 457.61 - 468.74 480.12 491.75 503.63 516.13 529.67 543.13 557.15 / - 20 12 15 1 263.89 266.91 271.26 276.32 282.08 288.54 295.68 303.5 311.99 321.17 330.92 341.25 - 352.15 363.59 375.58 388.1 401.15 414.72 428.8 443.37 458.41 473.9 489.85 506.26 523.12 540.42 558.18 576.38 - 595.03 614.13 633.68 653.69 674.16 695.05 716.36 738.08 / - 20 12 16 1 260.29 266.84 274.61 283.44 293.6 305.11 317.92 331.97 347.22 363.64 381.19 399.82 - 419.52 440.2 461.85 484.42 507.87 532.2 557.38 583.43 610.31 637.94 666.28 695.49 725.68 756.84 788.94 821.98 - 855.95 890.84 926.47 962.77 999.74 1037.99 1078.08 1117.78 / - 20 12 17 1 259.89 271.25 286.01 303.63 323.93 346.77 372.09 399.81 429.81 462.02 496.33 532.68 - 571.04 611.22 652.89 696.15 741.45 788.75 838.01 889.18 942.25 997.19 1053.88 1112.13 1171.24 1230.84 1291.44 1346.81 - 1400.42 1458.4 1514.63 1574.51 1636.06 1697.87 1757.68 1823.48 / - 20 12 18 1 264.56 288.29 319.49 357.1 400.23 448.45 501.39 558.86 620.87 686.92 757.3 832.2 - 911.53 995.21 1083.01 1174.25 1267.97 1354.98 1444.79 1537.76 1632.68 1730.92 1832.76 1936.35 2041.71 2149.63 2258.19 2372.43 - 2488.81 2606.97 2727.34 2849.47 2974.03 3100.71 3229.11 3359.12 / - 20 12 19 1 281.71 330.14 397.11 478.02 570.21 672.62 784.83 908.88 1043.95 1189.1 1332.98 1481 - 1631.3 1789.78 1954.84 2133.55 2312.36 2496.26 2685.98 2886.71 3086.51 3296.34 3521.48 3741.09 3970.18 4203.7 4443.45 4689 - 4936.72 5198.25 5465.95 5728.52 6006.27 6291.07 6569.33 6880.5 / - 20 12 20 1 310.43 402.82 516.63 691.96 889.85 1120.79 1365.95 1620.37 1892.04 2177.51 2481.04 2805.47 - 3153.07 3521.15 3880.79 4257.97 4686.91 5100.4 5525.29 6016.15 6482.86 6954.46 7451.08 7968.83 8494.8 9037.47 9618.39 10174.65 - 10762.38 11369.07 12026.25 12672.08 13336.29 14003.72 14699.33 15421.5 / - 20 13 1 1 407.11 406.02 405.67 405.65 405.8 406.09 406.47 406.94 407.5 408.12 408.81 409.57 - 410.4 411.29 412.24 413.25 414.32 415.45 416.64 417.9 419.21 420.58 422 423.49 425.03 426.64 428.3 430.01 - 431.79 433.62 435.51 437.46 439.47 441.53 443.65 445.82 / - 20 13 2 1 407.02 405.91 405.57 405.54 405.69 405.97 406.36 406.83 407.38 408 408.69 409.45 - 410.28 411.16 412.11 413.13 414.2 415.33 416.52 417.77 419.08 420.45 421.88 423.37 424.91 426.52 428.18 429.89 - 431.67 433.5 435.4 437.34 439.35 441.41 443.53 445.71 / - 20 13 3 1 406.85 405.73 405.37 405.34 405.49 405.77 406.15 406.62 407.16 407.79 408.48 409.24 - 410.06 410.95 411.9 412.91 413.98 415.11 416.3 417.55 418.87 420.24 421.66 423.15 424.7 426.3 427.96 429.68 - 431.46 433.29 435.19 437.14 439.15 441.21 443.34 445.52 / - 20 13 4 1 406.54 405.38 405.01 404.97 405.11 405.38 405.76 406.23 406.77 407.39 408.08 408.84 - 409.66 410.55 411.5 412.51 413.58 414.71 415.9 417.16 418.47 419.84 421.27 422.76 424.31 425.91 427.58 429.3 - 431.08 432.92 434.82 436.77 438.78 440.85 442.98 445.17 / - 20 13 5 1 405.95 404.73 404.32 404.26 404.39 404.66 405.03 405.49 406.04 406.65 407.34 408.1 - 408.92 409.81 410.75 411.77 412.84 413.97 415.17 416.42 417.74 419.11 420.55 422.04 423.6 425.21 426.88 428.61 - 430.39 432.24 434.14 436.11 438.13 440.21 442.34 444.54 / - 20 13 6 1 404.77 403.45 403 402.91 403.02 403.27 403.64 404.09 404.63 405.25 405.93 406.69 - 407.51 408.4 409.35 410.37 411.45 412.59 413.79 415.05 416.38 417.76 419.21 420.71 422.28 423.9 425.59 427.33 - 429.13 431 432.92 434.9 436.94 439.04 441.2 443.41 / - 20 13 7 1 402.46 400.95 400.42 400.29 400.37 400.61 400.96 401.41 401.94 402.56 403.25 404.01 - 404.84 405.74 406.7 407.73 408.83 409.98 411.2 412.49 413.83 415.24 416.71 418.24 419.84 421.49 423.21 424.99 - 426.82 428.72 430.68 432.71 434.79 436.93 439.13 441.4 / - 20 13 8 1 397.98 396.15 395.47 395.25 395.28 395.48 395.82 396.26 396.79 397.41 398.12 398.9 - 399.75 400.67 401.67 402.73 403.87 405.07 406.33 407.67 409.07 410.53 412.06 413.66 415.32 417.05 418.84 420.69 - 422.61 424.6 426.64 428.75 430.93 433.17 435.47 437.84 / - 20 13 9 1 390.22 387.25 385.94 385.33 385.1 385.15 385.39 385.77 386.29 386.92 387.65 388.48 - 389.4 390.41 391.53 392.71 393.96 395.3 396.71 398.2 399.77 401.41 403.13 404.92 406.78 408.72 410.73 412.81 - 414.97 417.19 419.49 421.86 424.3 426.81 429.39 432.04 / - 20 13 10 1 379.47 369.3 368.32 367.97 367.99 368.25 368.71 369.33 370.09 370.97 371.94 373.05 - 374.26 375.58 377 378.51 380.08 381.78 383.57 385.46 387.44 389.45 391.6 393.84 396.17 398.53 401.03 403.61 - 406.27 408.97 411.8 414.7 417.65 420.72 423.86 427.05 / - 20 13 11 1 363.07 345.86 345.05 344.91 345.17 345.7 346.46 347.4 348.51 349.78 351.19 352.74 - 354.43 356.24 358.19 360.26 362.45 364.76 367.19 369.74 372.4 375.18 378.07 381.07 384.19 387.41 390.74 394.17 - 397.72 401.36 405.12 408.97 412.93 416.98 421.14 425.4 / - 20 13 12 1 323.31 320.64 319.94 320.06 320.68 321.65 322.91 324.43 326.18 328.15 330.32 332.69 - 335.25 338 340.92 344.03 347.3 350.74 354.34 358.11 362.03 366.11 370.34 374.72 379.25 383.92 388.73 393.68 - 398.76 403.99 409.34 414.82 420.44 426.18 432.04 438.03 / - 20 13 13 1 297.69 295.59 295.82 296.76 298.2 300.01 302.15 304.6 307.33 310.41 313.89 317.59 - 321.55 325.73 330.22 334.94 339.87 345.11 350.56 356.24 362.01 368.14 374.5 381.07 387.87 394.88 401.87 409.29 - 416.88 424.67 432.7 440.59 449 457.61 466.02 475 / - 20 13 14 1 277.09 277.04 278.35 280.48 283.27 286.65 290.64 295.16 300.15 305.56 311.36 317.53 - 324.07 330.95 338.16 345.7 353.55 361.71 370.17 378.92 387.97 397.3 406.9 416.78 426.93 437.34 448.01 458.94 - 470.13 481.57 493.26 505.21 517.39 529.82 542.92 557.15 / - 20 13 15 1 264.02 267.25 271.66 276.76 282.54 289.01 296.18 304.01 312.51 321.69 331.47 341.81 - 352.72 364.18 376.17 388.71 401.76 415.34 429.42 444.01 459.1 474.64 490.65 507.1 524 541.34 559.14 577.38 - 596.06 615.19 634.77 654.8 675.29 696.19 717.52 739.25 / - 20 13 16 1 260.44 267.09 274.9 283.8 293.97 305.49 318.3 332.34 347.59 363.99 381.51 400.12 - 419.79 440.48 462.1 484.67 508.15 532.48 557.66 583.68 610.52 638.12 666.41 695.56 725.67 756.73 788.72 821.63 - 855.46 890.2 925.84 962.33 999.44 1037.17 1075.47 1116.22 / - 20 13 17 1 260.01 271.42 286.22 303.86 324.18 347 372.25 399.91 429.85 461.97 496.21 532.48 - 570.73 610.89 652.54 695.73 740.92 788.07 837.14 888.11 940.95 995.63 1052.07 1110.14 1169.68 1229.94 1288.76 1344.98 - 1400.2 1459.03 1518.7 1578.67 1639.87 1702.31 1764.54 1829.98 / - 20 13 18 1 264.63 288.41 319.63 357.22 400.31 448.45 501.33 558.65 620.47 686.34 756.64 831.29 - 910.3 993.61 1081.02 1172.1 1265.75 1353.22 1443.54 1537.06 1632.64 1731.59 1834.08 1938.47 2044.71 2153.58 2263.27 2378.43 - 2495.83 2615.11 2736.7 2860.21 2986.08 3114.14 3244.08 3375.7 / - 20 13 19 1 281.8 329.92 396.73 477.32 569.6 671.65 784.42 908.05 1042.78 1183.76 1331.73 1473.96 - 1632.89 1791.2 1957.33 2137.37 2317.54 2502.97 2693.42 2895.68 3098.75 3310.45 3527.48 3759.53 3990.91 4226.79 4469.32 4717.2 - 4968.06 5231.96 5502.15 5768.63 6049.03 6336.58 6618.78 6917.92 / - 20 13 20 1 310.72 403.53 515.79 684.16 881.92 1108.16 1359 1613.1 1886.63 2174.55 2488.75 2815.79 - 3166.33 3511.78 3900.73 4281.56 4714.68 5131.65 5561.62 6013.62 6528 7004.94 7506.75 8023.83 8550.42 9109.69 9671.86 10257.66 - 10851.05 11463.77 12095.84 12780.52 13450.71 14126.05 14829.19 15558.77 / - 20 14 1 1 409.01 407.9 407.54 407.5 407.65 407.93 408.3 408.77 409.32 409.94 410.63 411.38 - 412.21 413.09 414.04 415.05 416.12 417.25 418.44 419.7 421.01 422.38 423.8 425.29 426.84 428.44 430.1 431.83 - 433.6 435.44 437.34 439.29 441.3 443.37 445.49 447.68 / - 20 14 2 1 408.92 407.79 407.43 407.39 407.53 407.81 408.19 408.65 409.2 409.81 410.5 411.26 - 412.08 412.96 413.91 414.92 415.99 417.12 418.32 419.57 420.88 422.25 423.68 425.16 426.71 428.32 429.98 431.7 - 433.48 435.32 437.21 439.17 441.18 443.25 445.37 447.56 / - 20 14 3 1 408.75 407.6 407.23 407.18 407.32 407.59 407.97 408.43 408.97 409.59 410.28 411.03 - 411.85 412.74 413.68 414.69 415.76 416.9 418.09 419.34 420.65 422.02 423.45 424.94 426.48 428.09 429.75 431.48 - 433.26 435.1 436.99 438.95 440.96 443.03 445.16 447.35 / - 20 14 4 1 408.43 407.25 406.86 406.8 406.93 407.19 407.56 408.02 408.56 409.18 409.86 410.62 - 411.44 412.32 413.27 414.27 415.34 416.48 417.67 418.92 420.23 421.6 423.04 424.53 426.07 427.68 429.35 431.08 - 432.86 434.7 436.6 438.56 440.58 442.66 444.79 446.98 / - 20 14 5 1 407.82 406.56 406.14 406.06 406.18 406.43 406.8 407.25 407.79 408.4 409.08 409.83 - 410.65 411.54 412.48 413.49 414.56 415.7 416.89 418.15 419.46 420.84 422.27 423.77 425.32 426.94 428.61 430.34 - 432.14 433.99 435.9 437.86 439.89 441.98 444.12 446.32 / - 20 14 6 1 406.61 405.23 404.75 404.64 404.73 404.97 405.33 405.77 406.3 406.91 407.59 408.35 - 409.17 410.05 411 412.02 413.09 414.23 415.44 416.7 418.02 419.41 420.86 422.36 423.93 425.56 427.25 429 - 430.81 432.67 434.6 436.59 438.64 440.74 442.91 445.14 / - 20 14 7 1 404.23 402.63 402.05 401.88 401.94 402.16 402.5 402.94 403.46 404.07 404.76 405.51 - 406.34 407.24 408.2 409.23 410.32 411.48 412.7 413.99 415.34 416.75 418.22 419.76 421.36 423.02 424.74 426.53 - 428.37 430.28 432.25 434.28 436.37 438.53 440.74 443.02 / - 20 14 8 1 399.63 397.57 396.75 396.44 396.41 396.56 396.87 397.28 397.8 398.41 399.1 399.88 - 400.73 401.65 402.65 403.72 404.85 406.06 407.34 408.68 410.09 411.57 413.12 414.73 416.41 418.15 419.96 421.84 - 423.78 425.78 427.85 429.99 432.19 434.45 436.78 439.18 / - 20 14 9 1 392.04 388.18 386.71 385.95 385.7 385.72 385.94 386.32 386.83 387.47 388.21 389.05 - 389.99 391.01 392.13 393.33 394.61 395.97 397.42 398.94 400.54 402.22 403.98 405.81 407.71 409.7 411.75 413.88 - 416.08 418.36 420.71 423.13 425.62 428.19 430.82 433.53 / - 20 14 10 1 381.24 369.07 368.26 368.03 368.13 368.46 368.98 369.65 370.45 371.37 372.42 373.55 - 374.81 376.17 377.63 379.17 380.83 382.58 384.37 386.31 388.34 390.46 392.62 394.92 397.31 399.73 402.29 404.94 - 407.67 410.43 413.33 416.32 419.33 422.48 425.71 428.97 / - 20 14 11 1 364.45 346.13 345.29 345.14 345.4 345.94 346.71 347.67 348.8 350.08 351.52 353.09 - 354.81 356.65 358.63 360.73 362.96 365.31 367.78 370.37 373.08 375.91 378.85 381.9 385.07 388.34 391.73 395.22 - 398.82 402.53 406.34 410.26 414.28 418.41 422.63 426.96 / - 20 14 12 1 323.6 320.91 320.21 320.34 320.97 321.96 323.25 324.79 326.57 328.57 330.78 333.19 - 335.79 338.57 341.55 344.7 348.02 351.51 355.18 359 362.98 367.13 371.42 375.87 380.46 385.2 390.09 395.11 - 400.28 405.58 411.01 416.58 422.27 428.1 434.05 440.13 / - 20 14 13 1 297.67 295.72 296 297.02 298.48 300.31 302.48 304.95 307.72 310.76 314.08 317.66 - 321.49 325.76 330.43 335.23 340.29 345.49 351 356.73 362.72 368.9 375.3 381.73 388.56 395.61 402.86 410.34 - 418.01 425.61 433.68 441.91 450.34 459.01 467.49 476.53 / - 20 14 14 1 277.24 277.22 278.56 280.72 283.53 286.96 291 295.58 300.61 306.07 311.91 318.13 - 324.71 331.62 338.88 346.45 354.35 362.55 371.05 379.85 388.94 398.31 407.96 417.89 428.08 438.54 449.27 460.26 - 471.5 482.99 494.74 506.74 518.98 531.47 544.21 557.19 / - 20 14 15 1 264.19 267.65 272.1 277.23 283.03 289.52 296.7 304.54 313.04 322.22 332.02 342.38 - 353.29 364.76 376.75 389.28 402.33 415.9 429.97 444.55 459.62 475.18 491.22 507.72 524.67 542.06 559.89 578.15 - 596.86 616.02 635.62 655.66 676.16 697.07 718.4 740.14 / - 20 14 16 1 260.65 267.38 275.24 284.19 294.37 305.88 318.68 332.72 347.95 364.32 381.81 400.39 - 420.01 440.66 462.26 484.78 508.22 532.55 557.72 583.72 610.53 638.09 666.34 695.42 725.44 756.4 788.26 821.03 - 854.7 889.27 924.72 961.07 998.27 1036.24 1074.79 1113.75 / - 20 14 17 1 260.17 271.62 286.45 304.1 324.4 347.21 372.4 399.97 429.81 461.83 495.95 532.11 - 570.27 610.33 652 695.13 740.21 787.2 836.09 886.84 939.43 993.84 1050.02 1108.01 1167.45 1227.77 1287 1343.65 - 1401.17 1459.05 1519.62 1580.67 1643.12 1706.89 1770.75 1837.74 / - 20 14 18 1 264.72 288.54 319.73 357.31 400.33 448.35 501.07 558.27 619.87 685.52 755.66 830.17 - 908.89 991.83 1078.93 1169.91 1263.24 1351.2 1442.06 1536.17 1632.46 1732.13 1835.33 1940.56 2047.75 2157.62 2268.68 2384.69 - 2503.15 2623.68 2746.51 2871.33 2998.66 3128.24 3259.72 3393.06 / - 20 14 19 1 281.9 329.36 396.31 476.6 568.91 670.69 781.86 907.05 1038.15 1182.39 1330.3 1473.52 - 1633.23 1792.71 1960.03 2132.92 2323.13 2510.25 2702.59 2905.51 3110.65 3325.69 3545.01 3770.18 4013.36 4251.99 4497.14 4748.29 - 5002 5268.76 5541.97 5811.71 6095.61 6386.64 6672.85 6974.91 / - 20 14 20 1 311.1 404.48 517.37 677.87 874.4 1102.66 1345.86 1606.02 1877.92 2174.35 2483.44 2811.28 - 3158.7 3530.16 3898.29 4307.6 4710.23 5166.95 5601.18 6058.09 6522.52 7061.08 7567.58 8090.12 8618.28 9177.52 9756.45 10338.36 - 10948.17 11567.58 12207.25 12865.82 13542.87 14266.88 14971.97 15709.45 / - 20 15 1 1 410.81 409.72 409.37 409.32 409.47 409.74 410.11 410.58 411.12 411.74 412.42 413.18 - 414 414.88 415.83 416.83 417.9 419.03 420.22 421.48 422.79 424.16 425.59 427.07 428.62 430.23 431.89 433.62 - 435.4 437.24 439.14 441.1 443.11 445.18 447.32 449.51 / - 20 15 2 1 410.72 409.61 409.25 409.21 409.35 409.62 409.99 410.45 410.99 411.61 412.29 413.05 - 413.87 414.75 415.69 416.7 417.77 418.9 420.09 421.34 422.65 424.02 425.45 426.94 428.49 430.1 431.76 433.49 - 435.27 437.11 439.01 440.97 442.98 445.06 447.19 449.38 / - 20 15 3 1 410.55 409.42 409.04 408.99 409.13 409.39 409.76 410.22 410.76 411.37 412.06 412.81 - 413.63 414.51 415.45 416.46 417.53 418.66 419.85 421.1 422.41 423.78 425.21 426.7 428.25 429.86 431.53 433.25 - 435.04 436.88 438.78 440.74 442.76 444.83 446.97 449.16 / - 20 15 4 1 410.22 409.05 408.65 408.59 408.71 408.97 409.34 409.79 410.33 410.94 411.62 412.37 - 413.19 414.07 415.01 416.02 417.09 418.22 419.41 420.66 421.97 423.34 424.78 426.27 427.82 429.43 431.1 432.83 - 434.61 436.46 438.37 440.33 442.35 444.43 446.57 448.77 / - 20 15 5 1 409.59 408.34 407.9 407.81 407.92 408.17 408.53 408.97 409.51 410.11 410.79 411.54 - 412.36 413.24 414.18 415.19 416.26 417.39 418.58 419.84 421.16 422.53 423.97 425.47 427.02 428.64 430.32 432.05 - 433.85 435.7 437.62 439.59 441.62 443.71 445.87 448.08 / - 20 15 6 1 408.34 406.94 406.44 406.31 406.39 406.62 406.96 407.4 407.93 408.53 409.21 409.96 - 410.77 411.65 412.6 413.62 414.69 415.83 417.04 418.3 419.63 421.01 422.46 423.97 425.55 427.18 428.87 430.62 - 432.44 434.31 436.25 438.24 440.3 442.41 444.59 446.82 / - 20 15 7 1 405.89 404.22 403.59 403.39 403.43 403.63 403.96 404.39 404.91 405.51 406.19 406.94 - 407.77 408.66 409.62 410.65 411.75 412.91 414.13 415.42 416.77 418.19 419.67 421.21 422.82 424.48 426.21 428.01 - 429.86 431.78 433.76 435.8 437.91 440.07 442.3 444.59 / - 20 15 8 1 401.2 398.85 397.86 397.43 397.32 397.43 397.69 398.07 398.57 399.16 399.85 400.62 - 401.46 402.39 403.39 404.47 405.62 406.84 408.13 409.49 410.92 412.41 413.98 415.61 417.32 419.09 420.92 422.83 - 424.79 426.83 428.93 431.1 433.34 435.64 438 440.44 / - 20 15 9 1 393.89 388.92 387.25 386.51 386.22 386.21 386.42 386.81 387.33 387.98 388.75 389.61 - 390.57 391.63 392.77 394.01 395.33 396.68 398.16 399.72 401.37 403.09 404.89 406.77 408.72 410.75 412.86 415.04 - 417.29 419.62 422.02 424.5 427.05 429.67 432.37 435.14 / - 20 15 10 1 382.85 368.82 368.17 368.03 368.21 368.61 369.18 369.9 370.76 371.73 372.82 374.02 - 375.32 376.73 378.24 379.85 381.56 383.36 385.23 387.19 389.26 391.42 393.66 396 398.42 400.96 403.55 406.24 - 409.03 411.91 414.85 417.89 421.03 424.22 427.51 430.9 / - 20 15 11 1 364.2 346.39 345.52 345.37 345.63 346.18 346.96 347.94 349.08 350.39 351.85 353.45 - 355.19 357.07 359.08 361.22 363.48 365.87 368.39 371.02 373.78 376.65 379.64 382.74 385.96 389.29 392.74 396.29 - 399.95 403.72 407.6 411.58 415.67 419.87 424.16 428.56 / - 20 15 12 1 323.9 321.18 320.47 320.62 321.27 322.28 323.59 325.16 326.96 328.99 331.24 333.68 - 336.32 339.16 342.17 345.37 348.75 352.3 356.02 359.9 363.95 368.15 372.52 377.03 381.7 386.51 391.47 396.57 - 401.82 407.2 412.71 418.36 424.15 430.06 436.1 442.27 / - 20 15 13 1 297.64 295.84 296.24 297.28 298.77 300.62 302.81 305.31 308.1 311.18 314.52 318.14 - 322.01 326.13 330.49 335.09 340.1 345.66 351.27 357.09 363.13 369.38 375.85 382.44 389.45 396.33 403.62 411.13 - 418.84 426.77 434.9 443.23 451.42 460.14 469 478.06 / - 20 15 14 1 277.39 277.41 278.77 280.96 283.8 287.29 291.41 296.05 301.13 306.63 312.52 318.78 - 325.39 332.34 339.63 347.24 355.16 363.4 371.94 380.77 389.89 399.3 408.99 418.96 429.2 439.71 450.47 461.51 - 472.79 484.34 496.13 508.18 520.48 533.02 545.81 558.84 / - 20 15 15 1 264.39 268.11 272.6 277.75 283.58 290.08 297.26 305.11 313.61 322.78 332.57 342.92 - 353.83 365.29 377.29 389.81 402.84 416.38 430.43 444.97 460 475.52 491.52 507.99 524.94 542.36 560.22 578.52 - 597.26 616.43 636.03 656.08 676.57 697.47 718.78 740.5 / - 20 15 16 1 260.93 267.73 275.64 284.61 294.8 306.3 319.07 333.08 348.27 364.62 382.07 400.59 - 420.16 440.74 462.29 484.74 508.09 532.32 557.4 583.32 610.07 637.63 665.86 694.88 724.81 755.65 787.37 819.98 - 853.47 887.89 923.22 959.47 996.57 1034.48 1073.16 1112.36 / - 20 15 17 1 260.38 271.88 286.72 304.35 324.61 347.35 372.48 399.97 429.69 461.57 495.53 531.51 - 569.47 609.37 651.09 694.22 739.18 786.02 834.7 885.26 937.72 992.02 1048.01 1105.59 1164.58 1224.64 1284.02 1341.11 - 1399.17 1457.59 1518.7 1580.33 1643.33 1707.74 1772.26 1839.96 / - 20 15 18 1 264.85 288.69 319.83 357.3 400.24 448.09 500.61 557.55 618.88 684.36 754.17 828.5 - 907.1 990 1076.84 1167.19 1260.16 1350.19 1440.15 1534.89 1633.23 1732.38 1836.32 1942.42 2050.61 2161.5 2276.7 2390.93 - 2510.74 2632.43 2756.71 2883 3011.72 3142.99 3276.29 3411.41 / - 20 15 19 1 282 329.14 395.89 475.85 567.65 669.98 781.33 903.34 1036.74 1180.36 1328.27 1473.53 - 1625.91 1793.96 1962.65 2137.15 2328.8 2517.88 2712.31 2916.21 3123.55 3341.48 3563.91 3791.75 4024.34 4279.27 4527.46 4781.67 - 5041.18 5309.09 5585.38 5859.42 6146.66 6441.01 6732.08 7038.13 / - 20 15 20 1 311.61 405.73 519.68 673.42 869.77 1092.8 1340.79 1591.55 1870.49 2168.84 2481.66 2823.37 - 3175.28 3527.88 3922.76 4337.03 4744.13 5167.79 5645.78 6107.73 6578.27 7070.68 7635.58 8164.55 8699.66 9259.2 9838.18 10434.51 - 11029.22 11654.28 12329.73 12995.89 13681.27 14385.14 15111.26 15876.92 / - 20 16 1 1 412.5 411.47 411.14 411.1 411.25 411.52 411.9 412.36 412.9 413.51 414.2 414.95 - 415.77 416.65 417.59 418.6 419.67 420.79 421.99 423.24 424.55 425.92 427.35 428.84 430.39 431.99 433.66 435.39 - 437.17 439.02 440.92 442.88 444.9 446.98 449.11 451.31 / - 20 16 2 1 412.41 411.37 411.02 410.98 411.12 411.39 411.77 412.23 412.76 413.38 414.06 414.81 - 415.63 416.51 417.45 418.46 419.53 420.65 421.84 423.09 424.41 425.78 427.21 428.7 430.25 431.85 433.52 435.25 - 437.03 438.88 440.78 442.74 444.76 446.84 448.98 451.18 / - 20 16 3 1 412.24 411.16 410.8 410.76 410.89 411.16 411.53 411.98 412.52 413.13 413.81 414.56 - 415.37 416.25 417.2 418.2 419.27 420.4 421.59 422.84 424.15 425.52 426.95 428.44 429.99 431.6 433.27 435 - 436.79 438.63 440.54 442.5 444.52 446.61 448.75 450.95 / - 20 16 4 1 411.9 410.78 410.39 410.33 410.45 410.71 411.07 411.53 412.06 412.67 413.34 414.09 - 414.91 415.78 416.73 417.73 418.8 419.93 421.12 422.37 423.68 425.05 426.49 427.98 429.53 431.14 432.82 434.55 - 436.34 438.19 440.1 442.07 444.09 446.18 448.33 450.53 / - 20 16 5 1 411.25 410.03 409.6 409.5 409.61 409.85 410.21 410.65 411.18 411.78 412.46 413.2 - 414.01 414.89 415.83 416.84 417.91 419.04 420.24 421.49 422.81 424.19 425.62 427.12 428.68 430.3 431.98 433.72 - 435.52 437.38 439.3 441.28 443.32 445.42 447.58 449.79 / - 20 16 6 1 409.95 408.55 408.04 407.89 407.97 408.19 408.53 408.96 409.48 410.08 410.75 411.5 - 412.31 413.19 414.14 415.15 416.23 417.37 418.57 419.84 421.17 422.56 424.01 425.53 427.1 428.74 430.44 432.2 - 434.02 435.9 437.84 439.84 441.91 444.03 446.22 448.46 / - 20 16 7 1 407.39 405.65 404.96 404.72 404.73 404.9 405.21 405.62 406.13 406.73 407.4 408.15 - 408.97 409.86 410.83 411.86 412.96 414.12 415.35 416.64 418 419.43 420.92 422.47 424.09 425.77 427.51 429.32 - 431.19 433.12 435.11 437.17 439.29 441.48 443.72 446.03 / - 20 16 8 1 402.67 400 398.8 398.24 398.04 398.07 398.28 398.64 399.11 399.69 400.36 401.12 - 401.97 402.91 403.92 405.01 406.17 407.41 408.72 410.1 411.56 413.08 414.68 416.35 418.08 419.89 421.76 423.71 - 425.72 427.8 429.94 432.16 434.44 436.79 439.2 441.69 / - 20 16 9 1 395.55 389.17 387.56 386.84 386.54 386.56 386.8 387.21 387.76 388.44 389.23 390.12 - 391.12 392.21 393.4 394.68 396 397.45 398.98 400.6 402.3 404.08 405.94 407.88 409.89 411.99 414.12 416.37 - 418.7 421.1 423.58 426.13 428.76 431.43 434.21 437.05 / - 20 16 10 1 384.25 369.06 368.35 368.19 368.36 368.75 369.33 370.05 370.91 371.9 373.01 374.22 - 375.55 376.98 378.51 380.15 381.88 383.72 385.65 387.67 389.8 392.01 394.32 396.72 399.21 401.8 404.47 407.24 - 410.09 413.04 416.07 419.19 422.39 425.69 429.07 432.57 / - 20 16 11 1 363.93 346.65 345.76 345.6 345.86 346.42 347.21 348.2 349.37 350.7 352.18 353.81 - 355.58 357.49 359.53 361.71 364.01 366.44 369 371.68 374.48 377.4 380.45 383.6 386.88 390.27 393.77 397.38 - 401.11 404.94 408.89 412.94 417.1 421.36 425.73 430.2 / - 20 16 12 1 324.2 321.45 320.74 320.9 321.56 322.59 323.92 325.52 327.36 329.42 331.7 334.18 - 336.87 339.74 342.81 346.06 349.49 353.09 356.87 360.82 364.93 369.2 373.63 378.22 382.96 387.84 392.88 398.06 - 403.39 408.85 414.45 420.19 426.06 432.06 438.19 444.46 / - 20 16 13 1 297.67 296.03 296.48 297.55 299.05 300.93 303.14 305.66 308.48 311.59 314.97 318.61 - 322.52 326.68 331.08 335.72 340.6 345.71 351.03 356.7 363.14 369.55 376.13 382.86 389.87 397.03 404.44 411.91 - 419.67 427.63 435.8 444.17 452.75 461.53 470.12 479.27 / - 20 16 14 1 277.54 277.59 278.98 281.2 284.09 287.72 291.94 296.64 301.79 307.33 313.25 319.53 - 326.17 333.14 340.45 348.08 356.02 364.28 372.83 381.69 390.84 400.27 409.99 419.98 430.25 440.79 451.59 462.65 - 473.98 485.56 497.39 509.48 521.81 534.4 547.23 560.3 / - 20 16 15 1 264.69 268.73 273.28 278.46 284.29 290.79 297.95 305.78 314.26 323.42 333.18 343.49 - 354.36 365.77 377.72 390.19 403.19 416.69 430.7 445.2 460.17 475.62 491.55 507.94 524.81 542.13 559.91 578.15 - 596.84 615.97 635.53 655.53 675.96 696.83 718.13 739.84 / - 20 16 16 1 261.36 268.29 276.25 285.19 295.34 306.8 319.52 333.46 348.58 364.85 382.22 400.66 - 420.15 440.65 462.12 484.47 507.7 531.78 556.7 582.44 609.01 636.39 664.57 693.57 723.45 754.19 785.78 818.23 - 851.53 885.68 920.67 956.51 993.19 1030.67 1068.97 1108.02 / - 20 16 17 1 260.72 272.3 287.13 304.69 324.84 347.45 372.44 399.79 429.39 461.11 494.87 530.63 - 568.34 607.96 649.45 692.63 737.57 784.28 832.77 883.02 935.02 988.75 1044.17 1101.23 1159.77 1219.53 1280.36 1336.41 - 1394.91 1454.25 1515.49 1577.76 1641.25 1706.25 1773.62 1839.73 / - 20 16 18 1 265.09 288.9 319.92 357.18 399.88 447.55 499.79 556.4 617.3 682.48 752.02 825.95 - 904.22 986.52 1072.68 1162.47 1255.12 1345.59 1437.37 1531.88 1630.91 1732.81 1835.81 1942.87 2052.15 2164.22 2280.45 2396.27 - 2517.21 2640.48 2766.13 2894.11 3024.62 3157.56 3292.68 3429.99 / - 20 16 19 1 282.1 329.28 395.41 475.1 566.31 668.83 779.58 901.93 1034.09 1176.8 1320.49 1471.18 - 1624.86 1793.98 1964.15 2140.38 2324.5 2524.76 2721.69 2927.61 3136.8 3356.36 3583.61 3814.46 4050.35 4295.99 4559.89 4817.75 - 5085.42 5352.48 5632.21 5911.11 6202.63 6500.78 6796.78 7107.01 / - 20 16 20 1 312.28 407.45 522.69 666.88 862.47 1087.31 1327.93 1586.86 1864.13 2158.4 2473.82 2813.63 - 3169.27 3545.45 3946.98 4339.19 4781.2 5211.18 5656.39 6163.19 6640.75 7139.76 7648.04 8247 8790.92 9357.31 9937.03 10529.6 - 11136.18 11779.43 12436.68 13110.01 13837.07 14550.84 15286.67 16022.65 / - 20 17 1 1 414.07 413.14 412.85 412.83 412.99 413.26 413.64 414.1 414.64 415.26 415.94 416.69 - 417.51 418.39 419.33 420.33 421.4 422.53 423.72 424.97 426.28 427.65 429.08 430.57 432.12 433.73 435.4 437.13 - 438.92 440.76 442.67 444.64 446.66 448.74 450.88 453.09 / - 20 17 2 1 413.98 413.03 412.72 412.7 412.85 413.13 413.5 413.96 414.5 415.12 415.8 416.55 - 417.36 418.24 419.18 420.19 421.25 422.38 423.57 424.82 426.13 427.5 428.93 430.42 431.97 433.58 435.25 436.98 - 438.77 440.62 442.52 444.49 446.51 448.6 450.74 452.94 / - 20 17 3 1 413.8 412.82 412.5 412.46 412.61 412.88 413.25 413.7 414.24 414.85 415.53 416.28 - 417.09 417.97 418.91 419.91 420.98 422.11 423.3 424.55 425.86 427.23 428.66 430.15 431.7 433.31 434.98 436.72 - 438.51 440.35 442.26 444.23 446.26 448.35 450.49 452.7 / - 20 17 4 1 413.45 412.41 412.05 412 412.13 412.39 412.76 413.21 413.74 414.35 415.02 415.77 - 416.58 417.46 418.4 419.4 420.47 421.6 422.79 424.04 425.35 426.72 428.16 429.65 431.21 432.82 434.5 436.23 - 438.02 439.88 441.79 443.77 445.8 447.89 450.05 452.26 / - 20 17 5 1 412.76 411.61 411.19 411.11 411.22 411.46 411.81 412.25 412.78 413.38 414.05 414.8 - 415.61 416.48 417.43 418.43 419.5 420.63 421.83 423.08 424.4 425.78 427.22 428.72 430.29 431.91 433.59 435.34 - 437.14 439.01 440.93 442.92 444.97 447.07 449.24 451.47 / - 20 17 6 1 411.39 410.03 409.51 409.36 409.43 409.64 409.98 410.4 410.92 411.52 412.19 412.93 - 413.74 414.62 415.57 416.59 417.66 418.81 420.01 421.28 422.61 424.01 425.47 426.99 428.57 430.21 431.92 433.69 - 435.52 437.41 439.36 441.37 443.45 445.58 447.78 450.04 / - 20 17 7 1 408.69 406.81 406.01 405.69 405.65 405.78 406.06 406.45 406.94 407.53 408.19 408.94 - 409.76 410.65 411.62 412.66 413.76 414.94 416.18 417.49 418.86 420.31 421.81 423.38 425.02 426.72 428.49 430.32 - 432.22 434.18 436.2 438.29 440.44 442.65 444.93 447.27 / - 20 17 8 1 404.11 401.08 399.64 398.92 398.61 398.57 398.73 399.04 399.49 400.05 400.71 401.48 - 402.33 403.28 404.3 405.41 406.6 407.86 409.2 410.62 412.11 413.67 415.31 417.02 418.8 420.65 422.58 424.57 - 426.64 428.77 430.98 433.25 435.59 438.01 440.49 443.03 / - 20 17 9 1 396.94 388.83 387.43 386.85 386.67 386.77 387.07 387.53 388.13 388.85 389.69 390.63 - 391.67 392.82 394.01 395.33 396.75 398.25 399.83 401.5 403.26 405.1 406.97 408.97 411.05 413.21 415.46 417.77 - 420.13 422.61 425.16 427.79 430.49 433.24 436.1 439.03 / - 20 17 10 1 385.39 369.29 368.53 368.35 368.5 368.89 369.47 370.2 371.07 372.07 373.19 374.43 - 375.78 377.23 378.79 380.45 382.22 384.08 386.05 388.11 390.27 392.52 394.87 397.32 399.85 402.48 405.21 408.02 - 410.93 413.92 417.01 420.18 423.45 426.8 430.24 433.77 / - 20 17 11 1 363.46 346.91 346 345.83 346.1 346.66 347.46 348.47 349.65 351 352.51 354.17 - 355.97 357.91 359.99 362.2 364.55 367.02 369.62 372.35 375.2 378.17 381.27 384.48 387.81 391.26 394.82 398.5 - 402.29 406.19 410.2 414.32 418.55 422.89 427.33 431.88 / - 20 17 12 1 324.5 321.71 321.01 321.18 321.85 322.91 324.26 325.88 327.75 329.85 332.16 334.69 - 337.41 340.34 343.45 346.75 350.24 353.9 357.66 361.66 365.82 370.15 374.64 379.29 384.1 389.05 394.16 399.41 - 404.8 410.34 416.02 421.83 427.78 433.87 440.08 446.43 / - 20 17 13 1 297.74 296.25 296.73 297.81 299.34 301.23 303.47 306.02 308.86 312 315.41 319.09 - 323.03 327.23 331.67 336.36 341.28 346.43 351.81 357.4 363.21 369.23 375.46 382.58 389.79 397.3 404.7 412.41 - 420.29 428.36 436.46 445.08 453.36 462.16 471.15 480.35 / - 20 17 14 1 277.7 277.78 279.2 281.43 284.51 288.3 292.63 297.42 302.62 308.21 314.16 320.47 - 327.11 334.09 341.4 349.03 356.97 365.22 373.77 382.62 391.76 401.19 410.91 420.91 431.18 441.72 452.53 463.61 - 474.95 486.54 498.4 510.51 522.86 535.47 548.33 561.43 / - 20 17 15 1 265.4 269.68 274.25 279.41 285.22 291.69 298.83 306.61 315.1 324.22 333.9 344.13 - 354.91 366.23 378.07 390.44 403.33 416.71 430.6 444.98 459.84 475.19 491.01 507.3 524.05 541.27 558.93 577.04 - 595.58 614.56 633.96 653.79 674.04 694.74 715.89 737.49 / - 20 17 16 1 262.25 269.26 277.19 285.97 296.05 307.43 320.06 333.89 348.9 365.03 382.26 400.55 - 419.88 440.21 461.49 483.65 506.68 530.55 555.26 580.8 607.15 634.31 662.25 691 720.6 751.03 782.3 814.4 - 847.33 881.08 915.66 951.06 987.28 1024.31 1062.13 1100.73 / - 20 17 17 1 261.41 273.06 287.77 305.17 325.13 347.51 372.3 399.42 428.74 460.2 493.7 529.21 - 566.64 605.94 647.07 689.96 734.56 780.87 828.91 878.66 930.12 983.27 1038.09 1094.53 1152.51 1211.79 1272.15 1330.11 - 1388.47 1448.35 1509.39 1573.09 1637.37 1701.82 1769.57 1836.58 / - 20 17 18 1 265.61 289.27 320 356.9 399.16 446.37 498.21 554.46 614.86 679.49 748.39 821.62 - 899.14 980.87 1066.39 1155.49 1247.54 1338.35 1430.91 1527.34 1626.04 1728.71 1832.9 1941 2051.52 2166.14 2282.26 2399.78 - 2522.17 2647.01 2774.33 2904.09 3036.53 3171.39 3308.65 3448.34 / - 20 17 19 1 282.2 329.45 395.45 474.81 565.72 666.98 776.96 896.78 1027.1 1167.9 1315.96 1466.65 - 1622.76 1786.01 1964.15 2142.41 2328.58 2520.8 2732.91 2938.93 3152.66 3372.48 3602.66 3838.36 4080.43 4327.4 4580.33 4856.91 - 5128.1 5400.26 5683.82 5968.11 6264.12 6566.71 6868.8 7183.77 / - 20 17 20 1 313.23 409.83 526.74 661.61 858.27 1076.81 1319.53 1573.44 1850.38 2154.15 2469.25 2805.54 - 3161.26 3539.05 3939.25 4336.05 4779.93 5249.54 5703.91 6171.66 6706.36 7214.5 7732.85 8273.14 8828.58 9467.7 10055.41 10656.44 - 11268.2 11910.13 12580.28 13275.87 13984.42 14708.74 15490.52 16242.1 / - 20 18 1 1 415.51 414.72 414.48 414.5 414.67 414.96 415.34 415.81 416.35 416.97 417.65 418.4 - 419.22 420.09 421.04 422.04 423.11 424.23 425.42 426.67 427.98 429.35 430.79 432.28 433.83 435.44 437.11 438.84 - 440.63 442.48 444.39 446.36 448.39 450.47 452.62 454.83 / - 20 18 2 1 415.41 414.6 414.35 414.36 414.53 414.81 415.19 415.66 416.2 416.81 417.49 418.24 - 419.06 419.93 420.87 421.88 422.94 424.07 425.26 426.51 427.82 429.19 430.62 432.11 433.67 435.28 436.95 438.68 - 440.47 442.32 444.23 446.2 448.23 450.32 452.47 454.68 / - 20 18 3 1 415.22 414.37 414.1 414.09 414.25 414.53 414.91 415.37 415.91 416.52 417.2 417.94 - 418.76 419.63 420.57 421.58 422.64 423.77 424.96 426.21 427.52 428.89 430.32 431.82 433.37 434.98 436.66 438.39 - 440.18 442.04 443.95 445.92 447.95 450.05 452.2 454.41 / - 20 18 4 1 414.84 413.92 413.61 413.58 413.72 413.99 414.36 414.81 415.34 415.95 416.63 417.37 - 418.18 419.06 420 421 422.07 423.2 424.39 425.64 426.96 428.33 429.77 431.26 432.82 434.44 436.12 437.86 - 439.66 441.51 443.43 445.41 447.45 449.55 451.71 453.93 / - 20 18 5 1 414.09 413.03 412.65 412.58 412.69 412.94 413.29 413.73 414.26 414.86 415.53 416.27 - 417.09 417.96 418.91 419.91 420.98 422.12 423.31 424.57 425.89 427.28 428.72 430.23 431.8 433.43 435.12 436.87 - 438.68 440.55 442.49 444.48 446.54 448.65 450.83 453.07 / - 20 18 6 1 412.59 411.21 410.66 410.49 410.53 410.73 411.05 411.47 411.97 412.56 413.23 413.97 - 414.79 415.67 416.62 417.64 418.72 419.87 421.08 422.36 423.71 425.11 426.58 428.11 429.71 431.37 433.09 434.88 - 436.72 438.63 440.6 442.64 444.73 446.89 449.11 451.39 / - 20 18 7 1 409.79 407.7 406.74 406.31 406.18 406.26 406.5 406.86 407.34 407.91 408.56 409.31 - 410.13 411.04 412.02 413.07 414.19 415.39 416.65 417.99 419.39 420.86 422.4 424.01 425.68 427.42 429.23 431.1 - 433.04 435.05 437.12 439.25 441.45 443.72 446.05 448.45 / - 20 18 8 1 405.32 401.98 400.34 399.48 399.07 398.96 399.07 399.36 399.8 400.36 401.03 401.81 - 402.68 403.64 404.7 405.84 407.06 408.37 409.76 411.22 412.77 414.39 416.08 417.86 419.7 421.63 423.62 425.69 - 427.83 430.05 432.33 434.69 437.12 439.62 442.19 444.83 / - 20 18 9 1 397.99 388.27 386.88 386.56 386.58 386.82 387.23 387.79 388.45 389.25 390.15 391.16 - 392.26 393.46 394.75 396.14 397.56 399.11 400.76 402.49 404.3 406.14 408.12 410.19 412.33 414.56 416.81 419.2 - 421.66 424.21 426.78 429.49 432.27 435.13 438.02 441.04 / - 20 18 10 1 386.22 369.53 368.71 368.51 368.65 369.04 369.61 370.35 371.24 372.25 373.39 374.64 - 376.01 377.49 379.08 380.77 382.56 384.46 386.46 388.56 390.75 393.05 395.44 397.93 400.51 403.19 405.97 408.83 - 411.79 414.84 417.98 421.22 424.54 427.95 431.45 435.04 / - 20 18 11 1 362.3 347.17 346.23 346.06 346.32 346.9 347.72 348.74 349.94 351.31 352.85 354.53 - 356.37 358.34 360.46 362.71 365.09 367.61 370.26 373.03 375.93 378.96 382.11 385.38 388.77 392.28 395.9 399.64 - 403.5 407.47 411.55 415.74 420.05 424.46 428.98 433.6 / - 20 18 12 1 324.8 321.98 321.28 321.45 322.15 323.22 324.6 326.25 328.15 330.28 332.63 335.16 - 337.92 340.84 343.99 347.32 350.84 354.54 358.42 362.47 366.69 371.08 375.63 380.34 385.2 390.22 395.39 400.71 - 406.18 411.79 417.54 423.43 429.46 435.62 441.91 448.34 / - 20 18 13 1 297.95 296.48 296.98 298.08 299.62 301.54 303.8 306.37 309.24 312.41 315.85 319.57 - 323.55 327.78 332.27 336.99 341.96 347.16 352.59 358.24 364.1 370.18 376.46 382.95 389.63 396.5 403.78 411.73 - 419.91 428.24 436.69 445.28 453.93 462.72 471.86 480.96 / - 20 18 14 1 277.86 277.97 279.41 281.85 285.23 289.23 293.7 298.59 303.86 309.48 315.45 321.76 - 328.4 335.36 342.63 350.22 358.12 366.33 374.83 383.63 392.72 402.11 411.77 421.72 431.94 442.44 453.21 464.24 - 475.55 487.11 498.94 511.02 523.35 535.94 548.78 561.87 / - 20 18 15 1 266.82 270.94 275.51 280.65 286.43 292.84 299.92 307.76 316.19 325.18 334.73 344.82 - 355.45 366.61 378.3 390.5 403.21 416.42 430.12 444.3 458.96 474.09 489.68 505.73 522.24 539.2 556.6 574.45 - 592.74 611.47 630.63 650.21 670.22 690.66 711.53 732.84 / - 20 18 16 1 263.62 270.62 278.3 286.98 296.96 308.21 320.68 334.35 349.17 365.11 382.13 400.21 - 419.29 439.28 460.16 481.91 504.53 528 552.33 577.5 603.5 630.31 657.91 686.32 715.54 745.57 776.4 808.03 - 840.45 873.67 907.68 942.48 978.08 1014.45 1051.6 1089.51 / - 20 18 17 1 262.47 274.15 288.67 305.8 325.43 347.51 371.98 398.74 427.7 458.75 491.82 526.84 - 563.78 602.58 643.21 685.63 729.76 775.53 822.95 872.01 922.71 975.04 1028.98 1084.49 1141.53 1199.98 1259.62 1317.8 - 1377.03 1437.72 1499.55 1562.69 1627.51 1694.05 1761 1830.36 / - 20 18 18 1 266.44 289.78 320.05 356.31 397.9 444.42 495.5 550.91 610.6 674.56 742.83 815.3 - 891.88 972.5 1057.04 1145.07 1236.27 1328.21 1421.53 1517.9 1618.27 1721.19 1827.87 1937.24 2049.22 2163.97 2281.28 2402.65 - 2524.79 2651.39 2780.6 2912.42 3047.01 3184.16 3323.89 3468.69 / - 20 18 19 1 282.36 329.87 395.36 474.18 564.26 663.96 773.68 892.43 1020.98 1159.87 1306.83 1454.46 - 1615.09 1779.96 1959.35 2141.15 2329.12 2524.77 2727.14 2949.55 3167.75 3390.5 3621.7 3862.48 4109.9 4361.51 4621.36 4886.98 - 5175.21 5453.22 5741.49 6032.21 6333.4 6641.11 6950.41 7271.06 / - 20 18 20 1 314.62 413.26 532.34 669.58 851.77 1068.95 1307.53 1557.1 1839.04 2139.39 2457.31 2795.63 - 3154.8 3535.26 3936.37 4363.11 4781.25 5250.4 5707.69 6222.33 6719.42 7228.59 7813.24 8366.04 8932.82 9507.15 10101.2 10795.8 - 11423.4 12079.71 12756.82 13454.6 14173.01 14929.53 15693.93 16479.41 / - 20 19 1 1 416.8 416.17 416.02 416.08 416.28 416.59 416.98 417.46 418 418.62 419.31 420.06 - 420.87 421.75 422.7 423.7 424.77 425.89 427.08 428.33 429.64 431.01 432.45 433.94 435.49 437.1 438.78 440.51 - 442.3 444.15 446.07 448.04 450.07 452.17 454.32 456.53 / - 20 19 2 1 416.68 416.03 415.86 415.91 416.11 416.41 416.8 417.28 417.82 418.44 419.12 419.87 - 420.69 421.56 422.51 423.51 424.58 425.7 426.89 428.14 429.45 430.83 432.26 433.75 435.3 436.92 438.59 440.33 - 442.12 443.98 445.89 447.86 449.9 451.99 454.15 456.36 / - 20 19 3 1 416.46 415.76 415.56 415.59 415.78 416.07 416.46 416.92 417.47 418.08 418.76 419.51 - 420.32 421.2 422.14 423.15 424.21 425.34 426.53 427.78 429.1 430.47 431.91 433.4 434.96 436.58 438.25 439.99 - 441.79 443.65 445.57 447.54 449.58 451.68 453.84 456.06 / - 20 19 4 1 416.01 415.22 414.96 414.97 415.13 415.41 415.78 416.24 416.78 417.39 418.07 418.81 - 419.63 420.5 421.45 422.45 423.52 424.65 425.85 427.1 428.42 429.8 431.24 432.74 434.31 435.93 437.61 439.36 - 441.17 443.04 444.96 446.95 449 451.11 453.28 455.51 / - 20 19 5 1 415.09 414.06 413.68 413.59 413.7 413.94 414.28 414.72 415.24 415.84 416.51 417.26 - 418.07 418.95 419.9 420.91 421.99 423.13 424.34 425.61 426.94 428.34 429.8 431.32 432.9 434.54 436.25 438.02 - 439.85 441.75 443.7 445.72 447.79 449.93 452.13 454.4 / - 20 19 6 1 413.42 411.91 411.25 410.99 410.98 411.13 411.42 411.82 412.31 412.89 413.56 414.3 - 415.12 416.01 416.98 418.01 419.11 420.28 421.52 422.83 424.2 425.64 427.14 428.7 430.34 432.03 433.79 435.62 - 437.51 439.46 441.48 443.56 445.71 447.92 450.19 452.52 / - 20 19 7 1 410.67 408.37 407.25 406.71 406.5 406.53 406.73 407.07 407.52 408.09 408.75 409.51 - 410.35 411.27 412.27 413.35 414.51 415.74 417.05 418.43 419.88 421.4 423 424.66 426.39 428.2 430.07 432.01 - 434.02 436.1 438.25 440.47 442.75 445.1 447.51 450 / - 20 19 8 1 406.12 402.57 400.29 399.52 399.18 399.13 399.29 399.62 400.1 400.69 401.41 402.27 - 403.19 404.21 405.31 406.45 407.72 409.08 410.52 412.05 413.65 415.33 417.1 418.94 420.85 422.85 424.92 427.06 - 429.28 431.58 433.95 436.39 438.91 441.5 444.16 446.9 / - 20 19 9 1 398.66 387.24 386.51 386.37 386.51 386.84 387.34 387.97 388.72 389.58 390.54 391.6 - 392.76 394.01 395.35 396.79 398.3 399.91 401.6 403.38 405.24 407.19 409.22 411.33 413.52 415.8 418.16 420.6 - 423.11 425.71 428.39 431.15 433.99 436.9 439.9 442.97 / - 20 19 10 1 386.69 369.76 368.89 368.66 368.79 369.18 369.76 370.51 371.4 372.43 373.58 374.86 - 376.25 377.75 379.37 381.09 382.92 384.85 386.88 389.02 391.26 393.59 396.03 398.57 401.2 403.93 406.75 409.67 - 412.68 415.79 418.99 422.28 425.67 429.15 432.71 436.37 / - 20 19 11 1 360.77 347.43 346.46 346.28 346.55 347.14 347.97 349 350.23 351.63 353.19 354.9 - 356.77 358.77 360.93 363.22 365.65 368.21 370.9 373.73 376.68 379.76 382.96 386.29 389.74 393.31 397 400.81 - 404.74 408.78 412.93 417.2 421.58 426.07 430.67 435.37 / - 20 19 12 1 325.1 322.25 321.54 321.73 322.44 323.53 324.93 326.61 328.52 330.65 333.03 335.62 - 338.35 341.34 344.53 347.91 351.47 355.22 359.15 363.08 367.34 371.76 376.35 381.1 386 391.07 396.28 401.65 - 407.49 413.16 418.99 424.95 431.05 437.29 443.66 450.16 / - 20 19 13 1 298.31 296.7 297.22 298.34 299.91 301.84 304.12 306.72 309.63 312.82 316.3 320.04 - 324.06 328.35 332.9 337.7 342.74 348 353.49 359.2 365.12 371.25 377.57 384.1 390.81 397.72 404.82 412.1 - 419.56 427.19 435.01 443.6 452.73 461.75 471.19 480.46 / - 20 19 14 1 278.02 278.17 279.9 283.01 286.82 291.1 295.76 300.73 306 311.57 317.47 323.67 - 330.2 337.03 344.18 351.64 359.41 367.48 375.85 384.53 393.49 402.75 412.29 422.13 432.24 442.64 453.32 464.26 - 475.46 486.92 498.64 510.62 522.85 535.33 548.07 561.05 / - 20 19 15 1 268.67 272.78 277.32 282.41 288.1 294.62 301.78 309.48 317.73 326.53 335.86 345.72 - 356.11 367.02 378.44 390.35 402.76 415.66 429.04 442.88 457.2 471.97 487.2 502.89 519.01 535.58 552.59 570.04 - 587.91 606.22 624.95 644.1 663.67 683.66 704.07 724.89 / - 20 19 16 1 265.77 272.61 279.89 288.43 298.23 309.27 321.52 334.93 349.48 365.09 381.71 399.31 - 417.83 437.26 457.59 478.79 500.86 523.78 547.53 572.12 597.51 623.71 650.72 678.51 707.09 736.45 766.6 797.52 - 829.21 861.67 894.9 928.89 963.64 999.15 1035.42 1072.44 / - 20 19 17 1 264.19 275.87 290.06 306.77 325.88 347.48 371.45 397.67 426.03 456.45 488.85 523.18 - 559.39 597.43 637.28 678.84 721.99 766.76 813.09 860.97 910.44 961.5 1014.12 1068.32 1124.06 1181.3 1239.92 1299.45 - 1358.57 1419.66 1482.38 1545.88 1611.66 1678.31 1746.44 1815.56 / - 20 19 18 1 267.79 290.6 320.16 355.47 395.98 441.29 491.14 545.59 604.43 667.5 734.66 805.82 - 880.95 959.99 1042.93 1129.68 1219.82 1312.24 1406.43 1503.85 1604.97 1709.32 1816.4 1927.04 2040.54 2156.98 2277.2 2399.18 - 2524.99 2653.65 2785.11 2919.36 3056.34 3196.19 3338.75 3483.94 / - 20 19 19 1 283.03 331 395.61 473.1 561.44 659.44 767.11 884.56 1011.14 1147.71 1293.46 1442.26 - 1603.38 1770.07 1944.01 2132.38 2322.63 2520.71 2725.86 2949.94 3171.99 3401.11 3635.88 3879.24 4133.13 4393.24 4658.76 4931.54 - 5211.04 5512.02 5807.01 6105.76 6413.27 6727.38 7045.35 7372.81 / - 20 19 20 1 316.85 418.4 540.63 680.57 842.23 1053.59 1288.73 1542 1817.45 2115.03 2439.41 2777.97 - 3141.59 3521.51 3915.4 4342.27 4790.34 5231.19 5724.33 6239.96 6740.47 7255.25 7842.22 8395.81 8968.19 9622.52 10230.41 10856.06 - 11502.73 12170.05 12858.51 13671.5 14409.17 15167.97 15947.77 16748.35 / - 20 20 1 1 417.75 417.27 417.17 417.27 417.49 417.81 418.22 418.7 419.25 419.88 420.57 421.32 - 422.14 423.03 423.98 424.99 426.06 427.19 428.39 429.65 430.96 432.34 433.79 435.29 436.85 438.47 440.16 441.91 - 443.71 445.58 447.51 449.49 451.54 453.65 455.82 458.05 / - 20 20 2 1 417.54 416.99 416.85 416.92 417.13 417.44 417.83 418.31 418.86 419.48 420.17 420.93 - 421.75 422.63 423.58 424.59 425.67 426.81 428.01 429.27 430.59 431.98 433.43 434.94 436.51 438.14 439.83 441.59 - 443.4 445.28 447.21 449.21 451.27 453.39 455.57 457.81 / - 20 20 3 1 417.18 416.51 416.32 416.34 416.52 416.81 417.19 417.66 418.2 418.82 419.51 420.26 - 421.08 421.97 422.92 423.94 425.02 426.17 427.38 428.65 429.98 431.38 432.83 434.35 435.94 437.58 439.29 441.05 - 442.88 444.78 446.73 448.74 450.82 452.95 455.15 457.41 / - 20 20 4 1 416.57 415.73 415.42 415.38 415.51 415.77 416.13 416.58 417.11 417.72 418.4 419.16 - 419.98 420.88 421.84 422.86 423.95 425.11 426.33 427.61 428.96 430.38 431.85 433.39 434.99 436.66 438.39 440.18 - 442.03 443.95 445.93 447.97 450.08 452.24 454.47 456.76 / - 20 20 5 1 415.56 414.42 413.94 413.78 413.84 414.04 414.36 414.79 415.3 415.9 416.58 417.34 - 418.17 419.07 420.04 421.08 422.19 423.37 424.61 425.92 427.29 428.74 430.24 431.82 433.45 435.16 436.92 438.76 - 440.65 442.61 444.64 446.72 448.88 451.09 453.37 455.72 / - 20 20 6 1 413.88 412.24 411.47 411.14 411.08 411.2 411.46 411.85 412.34 412.93 413.6 414.36 - 415.2 416.12 417.11 418.18 419.32 420.53 421.82 423.17 424.59 426.09 427.65 429.28 430.98 432.74 434.58 436.48 - 438.45 440.48 442.58 444.75 446.99 449.29 451.66 454.09 / - 20 20 7 1 411.08 408.65 407.43 406.83 406.58 406.58 406.76 407.09 407.55 408.13 408.81 409.58 - 410.45 411.4 412.44 413.55 414.75 416.03 417.39 418.82 420.33 421.91 423.57 425.3 427.11 428.98 430.93 432.96 - 435.05 437.22 439.45 441.76 444.14 446.59 449.11 451.7 / - 20 20 8 1 406.46 402.78 399.71 399.21 399.07 399.17 399.47 399.92 400.49 401.18 401.94 402.83 - 403.81 404.89 406.06 407.32 408.66 410.08 411.59 413.17 414.84 416.54 418.36 420.27 422.26 424.32 426.46 428.68 - 430.92 433.29 435.74 438.26 440.86 443.53 446.24 449.06 / - 20 20 9 1 398.89 387.33 386.64 386.45 386.57 386.9 387.39 388.02 388.77 389.64 390.61 391.69 - 392.86 394.13 395.5 396.95 398.5 400.13 401.85 403.66 405.56 407.54 409.6 411.75 413.99 416.3 418.71 421.19 - 423.76 426.4 429.13 431.94 434.83 437.8 440.85 443.99 / - 20 20 10 1 386.76 369.99 369.07 368.81 368.93 369.32 369.9 370.66 371.56 372.61 373.78 375.08 - 376.49 378.02 379.66 381.41 383.27 385.24 387.31 389.49 391.77 394.15 396.63 399.21 401.89 404.67 407.55 410.52 - 413.59 416.76 420.02 423.38 426.82 430.37 434 437.73 / - 20 20 11 1 358.8 347.69 346.69 346.51 346.78 347.37 348.21 349.27 350.52 351.94 353.52 355.27 - 357.17 359.21 361.4 363.73 366.2 368.81 371.55 374.43 377.43 380.57 383.83 387.22 390.73 394.36 398.12 402 - 405.99 410.11 414.33 418.68 423.13 427.7 432.38 437.18 / - 20 20 12 1 325.41 322.51 321.81 322.01 322.73 323.84 325.27 326.96 328.88 331.02 333.43 336.06 - 338.82 341.85 345.08 348.5 352.11 355.77 359.73 363.87 368.18 372.66 377.3 382.11 387.08 392.2 397.48 402.92 - 408.5 414.23 420.44 426.48 432.66 438.98 445.43 452.02 / - 20 20 13 1 299.43 296.92 297.46 298.6 300.19 302.15 304.47 307.18 310.24 313.61 317.26 321.17 - 325.33 329.74 334.37 339.23 344.31 349.6 355.1 360.81 366.72 372.82 379.13 385.62 392.31 399.19 406.25 413.49 - 420.92 428.52 436.3 444.25 452.38 460.67 469.12 477.73 / - 20 20 14 1 278.18 279.37 282.96 286.94 291.04 295.32 299.85 304.64 309.72 315.1 320.77 326.75 - 333.03 339.61 346.5 353.69 361.18 368.96 377.03 385.4 394.05 402.99 412.2 421.7 431.48 441.52 451.84 462.43 - 473.29 484.41 495.79 507.43 519.33 531.49 543.9 556.57 / - 20 20 15 1 271.81 275.93 280.47 285.98 291.89 298.26 305.13 312.52 320.43 328.86 337.82 347.29 - 357.27 367.75 378.73 390.2 402.14 414.57 427.46 440.81 454.61 468.87 483.57 498.7 514.28 530.28 546.71 563.57 - 580.84 598.53 616.63 635.14 654.06 673.39 693.11 713.24 / - 20 20 16 1 269.53 275.54 282.65 290.92 300.4 311.07 323 336.01 350.02 365.02 380.97 397.86 - 415.66 434.35 453.92 474.34 495.61 517.71 540.63 564.36 588.88 614.19 640.29 667.16 694.8 723.2 752.35 782.26 - 812.92 844.31 876.45 909.31 942.91 977.23 1012.27 1048.03 / - 20 20 17 1 267.8 279.09 292.39 308.24 326.67 347.55 370.74 396.14 423.64 453.16 484.62 517.8 - 552.67 589.2 627.41 667.28 708.79 751.93 796.67 843.01 890.93 940.41 991.44 1044.02 1098.13 1153.76 1210.89 1269.54 - 1329.67 1391.28 1454.37 1518.93 1584.94 1652.39 1721.28 1791.6 / - 20 20 18 1 270.33 292.43 320.66 354.43 393.4 437.38 486.02 539.07 596.35 657.73 723.1 792.38 - 865.5 942.41 1023.04 1107.35 1195.3 1286.85 1381.96 1480.59 1582.7 1688.26 1797.05 1909.03 2024.23 2142.6 2264.12 2388.7 - 2516.32 2647.05 2780.86 2917.71 3057.58 3200.45 3346.27 3495.04 / - 20 20 19 1 284.41 332.45 396.28 472.16 558.23 654.01 759.24 873.78 997.77 1131.53 1274.62 1425.28 - 1586.66 1754.68 1930.91 2119.56 2312.62 2513.52 2722.13 2938.35 3170.88 3403.2 3643.02 3890.59 4146.9 4411.64 4683.01 4961.18 - 5246.65 5539.39 5853.44 6161.82 6477.38 6800.08 7129.9 7466.77 / - 20 20 20 1 320.97 426.92 553.72 697.03 855.41 1028.1 1214.48 1419.76 1680.68 1963.84 2269.19 2603.74 - 2954.01 3312.24 3691.04 4108.69 4554.99 5030.32 5496.63 5985.54 6497.4 7032.71 7621.75 8191.86 8791.87 9405.27 10040.29 10654.17 - 11370.22 12031.25 12808.3 13518.47 14249.86 15118.17 15899.73 16702.57 / - - -GRUPTREE - 'INJE' 'FIELD' / - 'PROD' 'FIELD' / -/ - - -WELSPECS - 'PROD1' 'PROD' 6 3 1* 'OIL' 0 'STD' 'SHUT' 'YES' 0 'SEG' / - 'INJ1' 'INJE' 2 13 1* 'WATER' 0 'STD' 'SHUT' 'YES' 0 'SEG' / -/ - - -COMPDAT - 'PROD1' 6 3 7 7 'OPEN' 0 6.145 0.216 1* 0 0 'Z' / - 'PROD1' 6 3 8 8 'OPEN' 0 9.703 0.216 1* 0 0 'Z' / - 'PROD1' 6 3 9 9 'OPEN' 0 184.17 0.216 1* 0 0 'Z' / - 'PROD1' 6 3 10 10 'OPEN' 0 24.709 0.216 1* 0 0 'Z' / - 'INJ1' 2 13 1 1 'OPEN' 0 138.457 0.216 1* 0 0 'Z' / - 'INJ1' 2 13 2 2 'OPEN' 0 0.76 0.216 1* 0 0 'Z' / - 'INJ1' 2 13 3 3 'OPEN' 0 53.129 0.216 1* 0 0 'Z' / -/ - - -WCONHIST - 'PROD1' 'OPEN' 'RESV' 0 0 0 / - 'INJ1' 'OPEN' 'RESV' 0 0 0 / -/ - - -WRFTPLT - 'PROD1' 'YES' 'NO' 'NO' / - 'INJ1' 'YES' 'NO' 'NO' / -/ - - -DATES - 2 'NOV' 2018 / -/ - - -WCONHIST - 'PROD1' 'OPEN' 'RESV' 2920.9 0.3 316286 5 / -/ - - -WCONINJH - 'INJ1' 'GAS' 'OPEN' 116286 1* 0 / -/ - - -DATES - 1 'DEC' 2018 / -/ - - -WELSPECS - 'PROD2' 'PROD' 10 4 1* 'OIL' 0 'STD' 'SHUT' 'YES' 0 'SEG' / -/ - - -COMPDAT - 'PROD2' 10 4 7 7 'OPEN' 0 20.473 0.216 1* 0 0 'Z' / - 'PROD2' 10 4 8 8 'OPEN' 0 17.619 0.216 1* 0 0 'Z' / - 'PROD2' 10 4 9 9 'OPEN' 0 80.721 0.216 1* 0 0 'Z' / - 'PROD2' 10 4 10 10 'OPEN' 0 11.755 0.216 1* 0 0 'Z' / -/ - - -WCONHIST - 'PROD2' 'OPEN' 'RESV' 0 0 0 / -/ - - -WRFTPLT - 'PROD2' 'YES' 'NO' 'NO' / -/ - - -DATES - 2 'DEC' 2018 / -/ - - -WCONHIST - 'PROD2' 'SHUT' 'RESV' 0 0 0 / -/ - - -DATES - 15 'DEC' 2018 / -/ - - -WCONHIST - 'PROD1' 'OPEN' 'RESV' 2818.4 0.3 304523 5 / - 'PROD2' 'OPEN' 'RESV' 2141.6 1.1 230232 5 / -/ - - -WCONINJH - 'INJ1' 'GAS' 'OPEN' 334756 1* 0 / -/ - - -DATES - 1 'JAN' 2019 / -/ - - -WCONHIST - 'PROD1' 'OPEN' 'RESV' 2592.2 0.3 281458 5 / - 'PROD2' 'OPEN' 'RESV' 2456.6 1.4 268627 5 / -/ - - -WCONINJH - 'INJ1' 'GAS' 'OPEN' 350085 1* 0 / -/ - - -DATES - 1 'FEB' 2019 / -/ - - -WELSPECS - 'PROD3' 'PROD' 6 19 1* 'OIL' 0 'STD' 'SHUT' 'YES' 0 'SEG' / -/ - - -COMPDAT - 'PROD3' 6 19 7 7 'OPEN' 0 21.629 0.216 1* 0 0 'Z' / - 'PROD3' 6 19 8 8 'OPEN' 0 12.441 0.216 1* 0 0 'Z' / - 'PROD3' 6 19 9 9 'OPEN' 0 178.588 0.216 1* 0 0 'Z' / - 'PROD3' 6 19 10 10 'OPEN' 0 11.149 0.216 1* 0 0 'Z' / -/ - - -WCONHIST - 'PROD3' 'OPEN' 'RESV' 0 0 0 / -/ - - -WRFTPLT - 'PROD3' 'YES' 'NO' 'NO' / -/ - - -DATES - 2 'FEB' 2019 / -/ - - -WCONHIST - 'PROD3' 'SHUT' 'RESV' 0 0 0 / -/ - - -DATES - 10 'FEB' 2019 / -/ - - -WCONHIST - 'PROD1' 'OPEN' 'RESV' 2954.7 0.4 324214 5 / - 'PROD2' 'OPEN' 'RESV' 2154.5 1.3 241065 5 / - 'PROD3' 'OPEN' 'RESV' 1648.9 0.1 183164 5 / -/ - - -WCONINJH - 'INJ1' 'GAS' 'OPEN' 548443 1* 0 / -/ - - -DATES - 1 'MAR' 2019 / -/ - - -WCONHIST - 'PROD1' 'OPEN' 'RESV' 2726.6 0.4 303588 5 / - 'PROD2' 'OPEN' 'RESV' 2383.2 1.4 266661 5 / - 'PROD3' 'OPEN' 'RESV' 1544.7 0.1 171587 5 / -/ - - -WCONINJH - 'INJ1' 'GAS' 'OPEN' 541836 1* 0 / -/ - - -DATES - 1 'APR' 2019 / -/ - - -WELSPECS - 'INJ2' 'INJE' 12 20 1* 'WATER' 0 'STD' 'SHUT' 'YES' 0 'SEG' / -/ - - -COMPDAT - 'INJ2' 12 20 9 9 'OPEN' 0 139.042 0.216 1* 0 0 'Z' / - 'INJ2' 12 20 10 10 'OPEN' 0 18.62 0.216 1* 0 0 'Z' / - 'INJ2' 12 20 11 11 'OPEN' 0 77.048 0.216 1* 0 0 'Z' / -/ - - -WCONHIST - 'INJ2' 'OPEN' 'RESV' 0 0 0 / -/ - - -WRFTPLT - 'INJ2' 'YES' 'NO' 'NO' / -/ - - -DATES - 2 'APR' 2019 / -/ - - -WCONHIST - 'INJ2' 'SHUT' 'RESV' 0 0 0 / -/ - - -DATES - 12 'APR' 2019 / -/ - - -WCONHIST - 'PROD1' 'OPEN' 'RESV' 2934.7 0.4 335327 5 / - 'PROD2' 'OPEN' 'RESV' 2368.1 1.5 275255 5 / - 'PROD3' 'OPEN' 'RESV' 1885.1 0.1 219169 5 / -/ - - -WCONINJH - 'INJ1' 'GAS' 'OPEN' 629751 1* 0 / - 'INJ2' 'WATER' 'OPEN' 5500 1* 0 / -/ - - -DATES - 1 'MAY' 2019 / -/ - - -WCONHIST - 'PROD1' 'OPEN' 'RESV' 2890.5 0.4 326099 5 / - 'PROD2' 'OPEN' 'RESV' 2412.4 1.5 286896 5 / - 'PROD3' 'OPEN' 'RESV' 1837 0.1 219586 5 / -/ - - -WCONINJH - 'INJ1' 'GAS' 'OPEN' 632581 1* 0 / - 'INJ2' 'WATER' 'OPEN' 5500 1* 0 / -/ - - -DATES - 1 'JUN' 2019 / -/ - - -WCONHIST - 'PROD1' 'OPEN' 'RESV' 2716.3 0.4 311588 5 / - 'PROD2' 'OPEN' 'RESV' 2278.3 1.5 274808 5 / - 'PROD3' 'OPEN' 'RESV' 1891.9 0.1 228761 5 / -/ - - -WCONINJH - 'INJ1' 'GAS' 'OPEN' 615157 1* 0 / - 'INJ2' 'WATER' 'OPEN' 5500 1* 0 / -/ - - -DATES - 1 'JLY' 2019 / -/ - - -WCONHIST - 'PROD1' 'OPEN' 'RESV' 2611.6 0.4 304379 5 / - 'PROD2' 'OPEN' 'RESV' 2005.5 1.3 241897 5 / - 'PROD3' 'OPEN' 'RESV' 1852.5 0.1 231799 5 / -/ - - -WCONINJH - 'INJ1' 'GAS' 'OPEN' 578075 1* 0 / - 'INJ2' 'WATER' 'OPEN' 5500 1* 0 / -/ - - -DATES - 1 'AUG' 2019 / -/ - - -WCONHIST - 'PROD1' 'OPEN' 'RESV' 2627.6 0.4 317393 5 / - 'PROD2' 'OPEN' 'RESV' 2190.1 1.4 270902 5 / - 'PROD3' 'OPEN' 'RESV' 1805.6 0.1 228744 5 / -/ - - -WCONINJH - 'INJ1' 'GAS' 'OPEN' 617039 1* 0 / - 'INJ2' 'WATER' 'OPEN' 5500 1* 0 / -/ - - -DATES - 1 'SEP' 2019 / -/ - - -WELOPEN - 'INJ1' 'SHUT' 0 0 0 / -/ - - -COMPDAT - 'INJ1' 2 13 8 8 'OPEN' 0 20.547 0.216 1* 0 0 'Z' / - 'INJ1' 2 13 9 9 'OPEN' 0 45.709 0.216 1* 0 0 'Z' / - 'INJ1' 2 13 10 10 'OPEN' 0 25.267 0.216 1* 0 0 'Z' / - 'INJ1' 2 13 11 11 'OPEN' 0 33.982 0.216 1* 0 0 'Z' / -/ - - -WCONHIST - 'PROD1' 'OPEN' 'RESV' 2797.7 0.4 340138 5 / - 'PROD2' 'OPEN' 'RESV' 2375.3 1.5 293396 5 / - 'PROD3' 'OPEN' 'RESV' 1634.3 0.1 210611 5 / -/ - - -WCONINJH - 'INJ1' 'GAS' 'OPEN' 644145 1* 0 / - 'INJ2' 'WATER' 'OPEN' 5500 1* 0 / -/ - - -DATES - 1 'OCT' 2019 / -/ - - -WCONHIST - 'PROD1' 'OPEN' 'RESV' 2635.2 0.4 323187 5 / - 'PROD2' 'OPEN' 'RESV' 2107.4 1.4 265991 5 / - 'PROD3' 'OPEN' 'RESV' 1660.6 0.1 221528 5 / -/ - - -WCONINJH - 'INJ1' 'GAS' 'OPEN' 610706 1* 0 / - 'INJ2' 'WATER' 'OPEN' 5500 1* 0 / -/ - - -DATES - 1 'NOV' 2019 / -/ - - -WCONHIST - 'PROD1' 'OPEN' 'RESV' 2928.6 0.4 368314 5 / - 'PROD2' 'OPEN' 'RESV' 2091.8 1.4 260616 5 / - 'PROD3' 'OPEN' 'RESV' 1921 0.1 263232 5 / -/ - - -WCONINJH - 'INJ1' 'GAS' 'OPEN' 692162 1* 0 / - 'INJ2' 'WATER' 'OPEN' 5500 1* 0 / -/ - - -DATES - 1 'DEC' 2019 / -/ - - -WCONHIST - 'PROD1' 'OPEN' 'RESV' 2734.1 0.4 355985 5 / - 'PROD2' 'OPEN' 'RESV' 2145.2 1.4 270217 5 / - 'PROD3' 'OPEN' 'RESV' 1659.5 0.1 241454 5 / -/ - - -WCONINJH - 'INJ1' 'GAS' 'OPEN' 667655 1* 0 / - 'INJ2' 'WATER' 'OPEN' 5500 1* 0 / -/ - - -DATES - 1 'JAN' 2020 / -/ - - -WCONHIST - 'PROD1' 'OPEN' 'RESV' 2564.1 0.4 345857 5 / - 'PROD2' 'OPEN' 'RESV' 2238.8 1.5 290096 5 / - 'PROD3' 'OPEN' 'RESV' 1702.3 0.1 265675 5 / -/ - - -WCONINJH - 'INJ1' 'WATER' 'OPEN' 5500 1* 0 / - 'INJ2' 'GAS' 'OPEN' 701627 1* 0 / -/ - - -DATES - 1 'FEB' 2020 / -/ - - -WCONHIST - 'PROD1' 'OPEN' 'RESV' 2721.1 0.4 387240 5 / - 'PROD2' 'OPEN' 'RESV' 2287.4 1.5 297922 5 / - 'PROD3' 'OPEN' 'RESV' 1563.2 0.1 248259 5 / -/ - - -WCONINJH - 'INJ1' 'WATER' 'OPEN' 5500 1* 0 / - 'INJ2' 'GAS' 'OPEN' 733421 1* 0 / -/ - - -DATES - 1 'MAR' 2020 / -/ - - -WCONHIST - 'PROD1' 'OPEN' 'RESV' 2809.4 0.4 430794 5 / - 'PROD2' 'OPEN' 'RESV' 2371.1 1.6 320048 5 / - 'PROD3' 'OPEN' 'RESV' 1581.1 0.1 251108 5 / -/ - - -WCONINJH - 'INJ1' 'WATER' 'OPEN' 5500 1* 0 / - 'INJ2' 'GAS' 'OPEN' 801950 1* 0 / -/ - - -DATES - 1 'APR' 2020 / -/ - - -WCONHIST - 'PROD1' 'OPEN' 'RESV' 2967.9 0.5 482927 5 / - 'PROD2' 'OPEN' 'RESV' 2495.7 1.7 347489 5 / - 'PROD3' 'OPEN' 'RESV' 1817.7 0.1 302369 5 / -/ - - -WCONINJH - 'INJ1' 'WATER' 'OPEN' 5500 1* 0 / - 'INJ2' 'GAS' 'OPEN' 932786 1* 0 / -/ - - -DATES - 1 'MAY' 2020 / -/ - - -WCONHIST - 'PROD1' 'OPEN' 'RESV' 2610 0.4 459698 5 / - 'PROD2' 'OPEN' 'RESV' 2165.6 1.5 314610 5 / - 'PROD3' 'OPEN' 'RESV' 1840.8 0.2 326039 5 / -/ - - -WCONINJH - 'INJ1' 'WATER' 'OPEN' 5500 1* 0 / - 'INJ2' 'GAS' 'OPEN' 900347 1* 0 / -/ - - -DATES - 1 'JUN' 2020 / -/ - - -WCONHIST - 'PROD1' 'OPEN' 'RESV' 2622.8 0.5 498021 5 / - 'PROD2' 'OPEN' 'RESV' 2438.3 1.7 364209 5 / - 'PROD3' 'OPEN' 'RESV' 1861.1 0.2 360941 5 / -/ - - -WCONINJH - 'INJ1' 'WATER' 'OPEN' 5500 1* 0 / - 'INJ2' 'GAS' 'OPEN' 1023171 1* 0 / -/ - - -DATES - 1 'JLY' 2020 / -/ - - -WCONHIST - 'PROD1' 'OPEN' 'RESV' 2967.8 0.5 598515 5 / - 'PROD2' 'OPEN' 'RESV' 2491.3 1.7 382260 5 / - 'PROD3' 'OPEN' 'RESV' 1811.9 0.3 375071 5 / -/ - - -WCONINJH - 'INJ1' 'GAS' 'OPEN' 1155847 1* 0 / - 'INJ2' 'WATER' 'OPEN' 5500 1* 0 / -/ - - -DATES - 1 'AUG' 2020 / -/ - - -WCONHIST - 'PROD1' 'OPEN' 'RESV' 2864.7 0.5 625656 5 / - 'PROD2' 'OPEN' 'RESV' 2274.9 1.6 351369 5 / - 'PROD3' 'OPEN' 'RESV' 1795.9 0.4 397800 5 / -/ - - -WCONINJH - 'INJ1' 'GAS' 'OPEN' 1174825 1* 0 / - 'INJ2' 'WATER' 'OPEN' 5500 1* 0 / -/ - - -DATES - 1 'SEP' 2020 / -/ - - -WCONHIST - 'PROD1' 'OPEN' 'RESV' 2984.5 0.6 770118 5 / - 'PROD2' 'OPEN' 'RESV' 2259.1 1.6 359512 5 / - 'PROD3' 'OPEN' 'RESV' 1745.2 0.6 409558 5 / -/ - - -WCONINJH - 'INJ1' 'GAS' 'OPEN' 1339188 1* 0 / - 'INJ2' 'WATER' 'OPEN' 5500 1* 0 / -/ - - -DATES - 1 'OCT' 2020 / -/ - - -WCONHIST - 'PROD1' 'OPEN' 'RESV' 2590.2 0.7 856412 5 / - 'PROD2' 'OPEN' 'RESV' 2292.8 1.6 370567 5 / - 'PROD3' 'OPEN' 'RESV' 1890.4 1.2 447869 5 / -/ - - -WCONINJH - 'INJ1' 'GAS' 'OPEN' 1474848 1* 0 / - 'INJ2' 'WATER' 'OPEN' 5500 1* 0 / -/ - - -DATES - 1 'NOV' 2020 / -/ - - -WCONHIST - 'PROD1' 'OPEN' 'RESV' 2874.3 19.1 1201249 5 / - 'PROD2' 'OPEN' 'RESV' 2023.8 1.4 341011 5 / - 'PROD3' 'OPEN' 'RESV' 1648.5 2.4 403792 5 / -/ - - -WCONINJH - 'INJ1' 'GAS' 'OPEN' 1746051 1* 0 / - 'INJ2' 'WATER' 'OPEN' 5500 1* 0 / -/ - - -DATES -- The restart date - 1 'DEC' 2020 / -/ - - -WCONHIST - 'PROD1' 'OPEN' 'RESV' 2901.2 84 1633340 5 / - 'PROD2' 'OPEN' 'RESV' 2270.9 1.6 402928 5 / - 'PROD3' 'OPEN' 'RESV' 1696 8.1 432013 5 / -/ - - -WCONINJH - 'INJ1' 'GAS' 'OPEN' 2268281 1* 0 / - 'INJ2' 'WATER' 'OPEN' 5500 1* 0 / -/ - - -DATES - 1 'JAN' 2021 / -/ - - -WCONHIST - 'PROD1' 'OPEN' 'RESV' 2990.4 96 1559090 5 / - 'PROD2' 'OPEN' 'RESV' 2288.4 1.7 425340 5 / - 'PROD3' 'OPEN' 'RESV' 1973.7 26.7 498773 5 / -/ - - -WCONINJH - 'INJ1' 'WATER' 'OPEN' 5500 1* 0 / - 'INJ2' 'GAS' 'OPEN' 2283203 1* 0 / -/ - - -DATES - 1 'FEB' 2021 / -/ - - -WCONHIST - 'PROD1' 'OPEN' 'RESV' 2992.8 100.2 1407111 5 / - 'PROD2' 'OPEN' 'RESV' 2392.3 1.9 496455 5 / - 'PROD3' 'OPEN' 'RESV' 1858.6 88.8 494370 5 / -/ - - -WCONINJH - 'INJ1' 'WATER' 'OPEN' 5500 1* 0 / - 'INJ2' 'GAS' 'OPEN' 2197936 1* 0 / -/ - - -DATES - 1 'MAR' 2021 / -/ - - -WCONHIST - 'PROD1' 'OPEN' 'RESV' 2820.4 110.5 1256212 5 / - 'PROD2' 'OPEN' 'RESV' 2085.3 1.7 466288 5 / - 'PROD3' 'OPEN' 'RESV' 1516.1 120.8 491574 5 / -/ - - -WCONINJH - 'INJ1' 'WATER' 'OPEN' 5500 1* 0 / - 'INJ2' 'GAS' 'OPEN' 2014074 1* 0 / -/ - - -DATES - 1 'APR' 2021 / -/ - - -WCONHIST - 'PROD1' 'OPEN' 'RESV' 2629.4 120.8 1181974 5 / - 'PROD2' 'OPEN' 'RESV' 2289.3 3.3 557153 5 / - 'PROD3' 'OPEN' 'RESV' 1760 157.1 672616 5 / -/ - - -WCONINJH - 'INJ1' 'WATER' 'OPEN' 5500 1* 0 / - 'INJ2' 'GAS' 'OPEN' 2211744 1* 0 / -/ - - -DATES - 1 'MAY' 2021 / -/ - - -WCONHIST - 'PROD1' 'OPEN' 'RESV' 2905.9 141 1310786 5 / - 'PROD2' 'OPEN' 'RESV' 2214.9 27.6 585799 5 / - 'PROD3' 'OPEN' 'RESV' 1817.5 166.3 787580 5 / -/ - - -WCONINJH - 'INJ1' 'WATER' 'OPEN' 5500 1* 0 / - 'INJ2' 'GAS' 'OPEN' 2484165 1* 0 / -/ - - -DATES - 1 'JUN' 2021 / -/ - - -WCONHIST - 'PROD1' 'OPEN' 'RESV' 2840.8 155.1 1291719 5 / - 'PROD2' 'OPEN' 'RESV' 2455.6 58.3 701612 5 / - 'PROD3' 'OPEN' 'RESV' 1996.3 185.2 923656 5 / -/ - - -WCONINJH - 'INJ1' 'WATER' 'OPEN' 5500 1* 0 / - 'INJ2' 'GAS' 'OPEN' 2716987 1* 0 / -/ -DATES - 1 'JLY' 2021 / -/ diff --git a/ThirdParty/custom-opm-common/opm-common/tests/MSW.DATA b/ThirdParty/custom-opm-common/opm-common/tests/MSW.DATA deleted file mode 100644 index 69bd181c36..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/MSW.DATA +++ /dev/null @@ -1,2485 +0,0 @@ --- Copyright 2017 SINTEF Digital, Mathematics and Cybernetics. --- Copyright 2017 Statoil ASA. - --- This file is part of the Open Porous Media project (OPM). - --- OPM is free software: you can redistribute it and/or modify --- it under the terms of the GNU General Public License as published by --- the Free Software Foundation, either version 3 of the License, or --- (at your option) any later version. - --- OPM is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU General Public License for more details. - --- You should have received a copy of the GNU General Public License --- along with OPM. If not, see . - - --- geophysics and fluid properties are copied from Norne - - -RUNSPEC - -DIMENS -10 10 10 / - -GRIDOPTS - 'YES' 0 / - -OIL - -WATER - -GAS - -DISGAS - -VAPOIL - -METRIC - - -START - 06 'NOV' 2011 / - -EQLDIMS - 1 / - -WELLDIMS --- MAX CONN WELLS IN --- WELLS PR WELL GROUPS GROUP - 10 100 10 20 / - - -TABDIMS ---ntsfun ntpvt nssfun nppvt ntfip nrpvt ntendp - 1 1 33 60 16 60 / - -REGDIMS -1 1 1 0 / - -WSEGDIMS -2 100 10 10 / - -PIMTDIMS -1 51 / - -NSTACK - 30 / - -UNIFIN -UNIFOUT - -OPTIONS -77* 1 / - ---------------------------------------------------------- --- --- Input of grid geometry --- ---------------------------------------------------------- -GRID - -NEWTRAN - -GRIDFILE - 0 1 / - -GRIDUNIT -METRES / - -INIT - -MESSAGES - 8*10000 20000 10000 1000 1* / - -NOECHO - --------------------------------------------------------- --- --- Grid --- --------------------------------------------------------- - -DX -1000*200 / -DY -1000*200 / -DZ -1000*25 / - -TOPS -100*2500 -100*2525 -100*2550 -100*2575 -100*2600 -100*2625 -100*2650 -100*2675 -100*2700 -100*2725 / - --------------------------------------------------------- --- --- Input of grid parametres --- --------------------------------------------------------- - -PORO ---1000*0.1 - 0.305407673 0.302880555 0.299644083 0.296977401 0.293957353 - 0.290213585 0.286762595 0.283096671 0.279582053 0.276324838 - 0.272838771 0.269295543 0.265832007 0.262311131 0.258681774 - 0.255152673 0.251749486 0.248729363 0.245866343 0.243379042 - 0.241221696 0.239299357 0.237497672 0.235542923 0.233202517 - 0.230239376 0.227111772 0.221795738 0.216743931 0.214694068 - 0.21399191 0.214060664 0.213573992 0.212882221 0.212218404 - 0.210765392 0.208253294 0.205366701 0.202374279 0.199233189 - 0.195791751 0.19087103 0.184592113 0.178271919 0.172217041 - 0.166684493 - 0.305739641 0.30273518 0.299571425 0.296664715 0.293757796 - 0.290506184 0.286817521 0.283311367 0.280094087 0.276810735 - 0.273629904 0.270182878 0.266755372 0.26333645 0.259940505 - 0.256339252 0.252954036 0.249894992 0.246826172 0.244131818 - 0.241772234 0.23951295 0.237255216 0.234401628 0.232239395 - 0.231546074 0.227063 0.226058006 0.220932722 0.21355623 - 0.212117225 0.211305633 0.2104076 0.210195482 0.210045919 - 0.2090175 0.207214773 0.204247564 0.200515553 0.197094768 - 0.193718523 0.189058378 0.183623329 0.178779885 0.173879623 - 0.168576658 - 0.305676311 0.30237332 0.298807383 0.295294732 0.29219979 - 0.293408364 0.290296465 0.287543803 0.284795105 0.282537222 - 0.280066967 0.277219087 0.273902446 0.270707786 0.267650306 - 0.264262617 0.260649383 0.256968647 0.253008187 0.249457449 - 0.246435776 0.24350287 0.240600452 0.237312362 0.235014781 - 0.233997688 0.230036616 0.233330116 0.226063058 0.211143523 - 0.20860672 0.207242072 0.206174523 0.205694124 0.205162063 - 0.204056993 0.20280689 0.200498238 0.197501704 0.194779664 - 0.192127138 0.188737065 0.184270591 0.179210067 0.173488393 - 0.167345583 - 0.304596335 0.301502943 0.297652721 0.29502207 0.29033649 - 0.2965087 0.294223785 0.291929454 0.290124834 0.28865087 - 0.28643477 0.283440262 0.28029561 0.276342571 0.271708339 - 0.266695023 0.261939347 0.257119775 0.252311081 0.248457357 - 0.245272756 0.24211666 0.23906827 0.236422151 0.233227655 - 0.230463594 0.227986887 0.225110456 0.222300857 0.208237588 - 0.205879048 0.204328984 0.203024119 0.201849252 0.200044826 - 0.198781788 0.19779703 0.196672171 0.195341855 0.193525136 - 0.190636694 0.186331108 0.181063011 0.17540063 0.169973359 - 0.164073005 - 0.302838385 0.299815565 0.298002928 0.293142915 0.289405346 - 0.296212673 0.29340893 0.291233778 0.290824682 0.288495749 - 0.283549368 0.27921772 0.275352925 0.270702571 0.26459831 - 0.259739518 0.255357295 0.250971377 0.246917382 0.243606046 - 0.240687162 0.237708449 0.235009909 0.2313997 0.229180381 - 0.227122039 0.225075141 0.222682878 0.219648898 0.20612973 - 0.203929305 0.20229049 0.200821981 0.198604643 0.197353527 - 0.196273252 0.19527261 0.194034591 0.192313418 0.189992279 - 0.185984164 0.180540085 0.175278217 0.171233118 0.167002782 - 0.162653387 - 0.304252654 0.302912772 0.297023118 0.290552169 0.289207965 - 0.290890872 0.28779003 0.28595823 0.287806839 0.285094142 - 0.27983743 0.275209248 0.270926803 0.263991594 0.260228723 - 0.257510662 0.254725069 0.251799047 0.24874571 0.245515719 - 0.241992354 0.238854975 0.233325988 0.229890242 0.227259248 - 0.224747509 0.222254485 0.219700396 0.217007369 0.203022838 - 0.200810865 0.199210495 0.196220785 0.19427374 0.192502677 - 0.191155553 0.189513564 0.187046081 0.18460089 0.182168365 - 0.178785592 0.174816251 0.172548562 0.169420511 0.165953428 - 0.162434831 - 0.306553632 0.303025365 0.298292071 0.289262474 0.281343549 - 0.290063918 0.281271964 0.279114634 0.286260068 0.284922481 - 0.281410933 0.277759105 0.268585593 0.263430506 0.260999382 - 0.25853169 0.256212592 0.25439921 0.251991838 0.248147905 - 0.244398117 0.2359806 0.231179893 0.228358865 0.225677937 - 0.222710073 0.219991535 0.217106283 0.213988006 0.199041903 - 0.197197393 0.192672938 0.189311296 0.186362281 0.183576301 - 0.181645989 0.17965883 0.177260637 0.175427482 0.173756182 - 0.171902776 0.172722101 0.171012312 0.168195188 0.165319324 - 0.162315756 - 0.308601975 0.302740693 0.297520548 0.290175885 0.279913396 - 0.280754656 0.277884215 0.282979399 0.286681682 0.283561677 - 0.27954489 0.275691628 0.270730197 0.264832973 0.262204111 - 0.260587275 0.259078503 0.258010507 0.258088171 0.253130347 - 0.240282506 0.23328495 0.230450302 0.228956461 0.225759536 - 0.22161293 0.218839049 0.215718657 0.211690277 0.194939077 - 0.189279929 0.185905144 0.182095706 0.178641304 0.175490975 - 0.173206881 0.17199032 0.170229644 0.168538809 0.16685757 - 0.170710742 0.170662627 0.168688416 0.166678846 0.164572611 - 0.162562713 - 0.311266005 0.303436905 0.298389047 0.291604549 0.280754685 - 0.286653459 0.29117009 0.288847446 0.285074264 0.280950099 - 0.277515411 0.27373004 0.269190252 0.265556633 0.263148844 - 0.259876579 0.254260242 0.251441061 0.251037985 0.248150557 - 0.243488193 0.234505653 0.230056822 0.230654135 0.22990118 - 0.221308187 0.216056764 0.212591663 0.211253121 0.18915239 - 0.184551239 0.182070941 0.179868162 0.175452188 0.171078175 - 0.168748677 0.165707871 0.161951184 0.159442693 0.168660507 - 0.170360535 0.168933734 0.172915548 0.171923533 0.17140986 - 0.170669287 - 0.313631713 0.305277348 0.299992889 0.293630242 0.285105377 - 0.294027597 0.294448644 0.289142758 0.28521654 0.281653255 - 0.277328789 0.272372276 0.267223418 0.263801903 0.259562641 - 0.254738986 0.251793563 0.248614609 0.247064292 0.242899135 - 0.238171637 0.231122792 0.226275936 0.223823443 0.222720414 - 0.220645845 0.21863763 0.214039326 0.208416075 0.188520715 - 0.191881254 0.184778929 0.187196851 0.178745598 0.16897741 - 0.165077388 0.160722122 0.150158405 0.17060557 0.175204992 - 0.173360556 0.173124939 0.173423409 0.173936576 0.174183905 - 0.173635334 - 0.315634161 0.307311237 0.301627725 0.296856076 0.28848359 - 0.301468492 0.299829364 0.296715111 0.293404698 0.289809704 - 0.285951257 0.280161858 0.274434507 0.270556569 0.266241252 - 0.263670474 0.261584222 0.257036537 0.250623375 0.246419787 - 0.241828859 0.239105657 0.236978024 0.231540293 0.22685422 - 0.222203672 0.214953586 0.209853679 0.212039426 0.187993631 - 0.186862826 0.184479594 0.180811286 0.169279426 0.160831243 - 0.16168952 0.1561279 0.162263125 0.175790578 0.171369255 - 0.166414693 0.17259334 0.17449528 0.175526276 0.175850511 - 0.175297439 - 0.317820936 0.309031606 0.304118752 0.298689902 0.289505541 - 0.304378241 0.301798731 0.297493309 0.294062853 0.289282799 - 0.284412652 0.279554725 0.27340892 0.268540323 0.264374048 - 0.258806825 0.254526049 0.250570506 0.245969474 0.241906106 - 0.239304081 0.235841468 0.22915493 0.225487143 0.223662138 - 0.223243371 0.218713254 0.214463651 0.210903943 0.18443957 - 0.182850137 0.177959844 0.167273164 0.1559273 0.159255698 - 0.159446374 0.153562471 0.175158948 0.175713778 0.167459965 - 0.167775482 0.174297124 0.17739673 0.176516652 0.1756697 - 0.174772516 - 0.319801629 0.312093467 0.306299478 0.299776167 0.291015208 - 0.305164754 0.302661896 0.298377603 0.295583397 0.290528506 - 0.284714937 0.280298293 0.27434513 0.267694265 0.263436705 - 0.258499861 0.253856897 0.249543548 0.244739711 0.240072057 - 0.237726927 0.234519571 0.23032409 0.22732991 0.224133849 - 0.220874742 0.217186168 0.214563146 0.211732134 0.185316041 - 0.178056568 0.170934528 0.161361605 0.159466341 0.15862903 - 0.15367192 0.156163901 0.175368518 0.17688103 0.170457542 - 0.167635977 0.174466684 0.177352995 0.176606864 0.175285593 - 0.173985362 - 0.322058618 0.314500183 0.30819723 0.301588029 0.291890413 - 0.306359112 0.302929401 0.298421532 0.294894814 0.290779054 - 0.285741717 0.280907393 0.275359899 0.26928848 0.265693396 - 0.261875212 0.256511956 0.251327544 0.246770397 0.241230309 - 0.236851692 0.234051958 0.231458247 0.227589682 0.22313118 - 0.219753116 0.216805235 0.208752573 0.210092381 0.181879848 - 0.175341159 0.168532789 0.166071236 0.158798307 0.153999522 - 0.146555096 0.161414906 0.177861825 0.180764064 0.16888772 - 0.163803399 0.172852188 0.179608911 0.175450116 0.174008742 - 0.173076868 - 0.323613882 0.315529764 0.31002897 0.302778721 0.29299593 - 0.307210356 0.303348154 0.298204929 0.294573963 0.290561736 - 0.28640914 0.281324983 0.275058448 0.270091563 0.265646607 - 0.261308849 0.25658372 0.251301378 0.247343063 0.242678702 - 0.237754807 0.234118447 0.23069863 0.227454126 0.224683926 - 0.221080884 0.217115551 0.206359863 0.209056765 0.176609099 - 0.173140332 0.167533562 0.167048097 0.161327004 0.152770028 - 0.148074657 0.17033571 0.181478396 0.180933744 0.167926729 - 0.169243246 0.173842922 0.174464658 0.171507597 0.172459111 - 0.172053307 - 0.324230641 0.316313326 0.311021417 0.303874075 0.293438494 - 0.308148265 0.302722543 0.297792912 0.294457048 0.290901124 - 0.286760628 0.281765223 0.275105089 0.270436764 0.264846802 - 0.261181742 0.256209671 0.251105219 0.247341946 0.243332893 - 0.238622576 0.234514162 0.230261683 0.227728426 0.224837214 - 0.221006125 0.219154984 0.207829788 0.207330838 0.176508859 - 0.174035192 0.169724852 0.160969079 0.166475281 0.152215064 - 0.151529133 0.171119273 0.178670466 0.181925669 0.167318895 - 0.17233637 0.175121993 0.173400015 0.171929315 0.171413958 - 0.171199054 - 0.324518085 0.316373765 0.311645716 0.304327905 0.293345273 - 0.308171302 0.302568376 0.297729373 0.294858366 0.292069912 - 0.287362337 0.28228116 0.275025904 0.268609852 0.26809752 - 0.262500435 0.256568879 0.252475053 0.246723205 0.242680356 - 0.238197297 0.233884037 0.23124373 0.227864429 0.22469911 - 0.220436603 0.218628615 0.210423753 0.208648548 0.180853724 - 0.17921859 0.173442394 0.161100179 0.169883579 0.155177742 - 0.156035483 0.17101723 0.182995066 0.18046084 0.168196708 - 0.174694583 0.17870298 0.17421329 0.171131819 0.171072081 - 0.170733154 - 0.325689197 0.315875351 0.311065346 0.303860426 0.292760909 - 0.307799608 0.298451424 0.295740843 0.295915246 0.292580456 - 0.288881123 0.28401795 0.279346287 0.271473706 0.267873824 - 0.263697863 0.257539958 0.253942579 0.247768998 0.242786855 - 0.238454312 0.234129086 0.23084867 0.22788772 0.224896938 - 0.220965445 0.220071286 0.211776555 0.213422641 0.185261399 - 0.179393962 0.173819825 0.165434018 0.1709328 0.155794054 - 0.160790592 0.175782308 0.180446148 0.18027316 0.165649027 - 0.170548052 0.181428596 0.17821303 0.170863152 0.171481907 - 0.171061337 - 0.328041613 0.31665644 0.309576452 0.30261445 0.292162061 - 0.307013422 0.299813032 0.296618223 0.295834124 0.294150621 - 0.28992188 0.284630299 0.279731631 0.274518251 0.269265801 - 0.26477614 0.258890003 0.25474447 0.24952428 0.244450629 - 0.240097016 0.235188365 0.231001601 0.228856564 0.22621657 - 0.222816795 0.222927362 0.214251965 0.215106562 0.186207667 - 0.183618054 0.184010774 0.17708379 0.17448473 0.166027784 - 0.172532812 0.181999177 0.18284601 0.185479924 0.168540373 - 0.171712518 0.184031487 0.183628589 0.174911514 0.17331028 - 0.171796739 - 0.330063909 0.318614811 0.30997932 0.301137984 0.291801929 - 0.306482881 0.302408159 0.297659069 0.296293139 0.2955181 - 0.292613 0.286278069 0.28278932 0.277169436 0.272661358 - 0.266644329 0.260922641 0.256710559 0.251342803 0.245366707 - 0.240711212 0.236110777 0.232688963 0.229787886 0.228042454 - 0.225147843 0.224524438 0.218812004 0.220361471 0.193473831 - 0.189598739 0.186228141 0.178634554 0.17917183 0.170490146 - 0.171483517 0.182499632 0.187546209 0.186184183 0.167039305 - 0.172423452 0.18232882 0.185281172 0.179806828 0.175619811 - 0.172812402 - 0.33134222 0.320616454 0.31210947 0.302964628 0.291325331 - 0.304775029 0.292675942 0.296646982 0.299487889 0.298756182 - 0.294435978 0.286753356 0.285080761 0.281030297 0.276217878 - 0.27008608 0.264636755 0.257870078 0.252245009 0.24747625 - 0.241557717 0.236513257 0.233779639 0.232263356 0.23089017 - 0.22907716 0.228480428 0.223272592 0.22481434 0.202652276 - 0.1956615 0.189708441 0.179595709 0.182988167 0.173950642 - 0.175206542 0.188365608 0.188594833 0.184438467 0.169430256 - 0.169365466 0.176326513 0.181365013 0.181643009 0.177349269 - 0.173799098 - 0.332687706 0.322201312 0.314128041 0.306716681 0.294659913 - 0.301158428 0.294815391 0.299049467 0.3028166 0.303315371 - 0.29773882 0.287357479 0.290353328 0.286094725 0.280133724 - 0.274317622 0.269299805 0.262870669 0.256450772 0.250348657 - 0.243786305 0.236859441 0.236380264 0.23535645 0.234656528 - 0.233053342 0.232966229 0.226575106 0.230848417 0.20614399 - 0.203205332 0.196661681 0.185764328 0.192618787 -/ - -PERMX --- 1000*221.009415 - 213.478149 221.009415 225.161331 231.829575 235.915298 - 236.097275 237.050827 234.27771 229.76741 226.040436 - 220.698318 214.422226 208.666321 202.842514 196.719864 - 190.950119 185.777328 182.083939 179.437073 175.824875 - 171.589722 168.420273 166.020462 163.573654 160.566193 - 156.219025 151.81102 148.170975 149.130783 156.77475 - 168.524704 181.774841 193.162201 207.258484 226.675964 - 245.304672 260.935516 275.786377 291.267334 306.97171 - 321.899689 339.165924 359.466034 379.967926 403.424957 - 432.466034 - 210.060867 218.139908 225.25412 233.133347 239.930679 - 244.383972 247.811081 247.786514 245.135941 241.526337 - 236.689163 230.596085 224.750076 219.306854 213.635269 - 206.998535 201.37381 197.171021 193.092575 188.363083 - 183.177979 178.900284 175.167953 170.405228 168.067764 - 169.374466 161.808228 158.700302 158.314163 163.872101 - 174.139435 184.817078 196.291092 212.346756 231.808121 - 251.132568 269.277313 283.658325 295.620605 309.586365 - 324.15564 341.030243 363.960938 392.294189 421.900818 - 449.822205 - 206.776764 218.134705 228.563644 239.462051 249.531967 - 287.774597 287.93988 289.312561 289.691223 289.741638 - 287.871765 283.940887 277.661926 271.408295 265.552826 - 257.819672 249.369843 240.519684 230.715744 221.053894 - 212.055542 204.325836 197.445358 190.344589 186.832886 - 187.445755 180.963211 175.595795 184.709671 170.154007 - 176.47937 185.347488 196.612305 211.502655 228.587296 - 246.270523 265.027222 280.966278 295.389099 312.225677 - 330.795319 354.106567 380.584442 404.219055 423.447083 - 439.258789 - 200.880661 218.954315 234.832901 253.987686 266.08786 - 353.846649 347.933441 347.343811 350.695099 353.359344 - 351.791443 346.149384 338.340515 324.259521 306.012543 - 287.73291 270.637024 253.962616 239.161377 227.689484 - 217.889877 209.068573 201.376297 195.549789 189.802963 - 185.052353 181.612915 181.455811 184.918808 173.785477 - 179.608704 188.180023 199.140503 211.834412 224.950562 - 240.714615 259.395508 279.681305 301.434967 322.938385 - 340.246857 356.124146 372.457397 386.563202 399.844238 - 411.555237 - 194.597092 219.759613 242.922745 260.442169 277.259186 - 392.13205 384.295471 384.786896 387.58371 378.173767 - 354.75827 336.763306 322.506409 303.819275 281.872192 - 263.617737 247.999985 234.102386 223.025726 214.736755 - 207.441299 200.635971 194.966293 189.410934 186.629349 - 184.429199 182.912476 184.747208 188.878082 178.94133 - 185.080765 193.544174 203.975006 214.87677 228.76535 - 244.861984 263.05658 282.426361 301.693787 319.309845 - 328.719757 335.033142 346.786255 363.451233 381.600983 - 400.266388 - 194.870285 228.13681 248.340561 260.825928 282.65686 - 394.746155 384.549713 385.016296 389.658051 375.007904 - 347.582397 326.006622 308.488831 286.827423 274.30658 - 264.057312 254.35881 245.420731 236.914093 228.552734 - 219.856033 212.664932 203.313324 197.726593 194.454529 - 192.41684 191.455124 193.45993 196.032928 183.916504 - 189.06163 196.64212 203.882919 213.435287 224.709351 - 238.829849 253.121048 266.026062 280.162231 294.804016 - 305.621002 317.385468 337.537048 357.467712 377.746979 - 398.427277 - 196.865692 226.285019 252.776215 261.985779 274.025116 - 414.224945 386.25827 381.083099 397.713379 388.884216 - 372.581726 354.693481 324.509949 305.23056 292.758057 - 280.867798 269.906952 260.911133 251.894119 241.342026 - 231.626923 216.515305 206.23439 201.781357 198.794968 - 196.546219 195.376709 197.518997 200.945038 186.541794 - 190.450439 192.019958 195.726944 201.099182 208.26532 - 218.612549 229.812988 241.265961 256.163879 272.68335 - 289.733093 314.924713 336.875885 356.945312 377.414978 - 397.509766 - 198.917862 220.024994 249.641815 270.206879 282.688141 - 429.450592 416.829071 429.633911 436.776459 419.35556 - 397.106598 374.985748 350.965759 326.480164 310.984253 - 298.563385 286.040558 275.01355 267.176941 251.872986 - 226.7285 213.851242 208.540482 205.875473 202.097763 - 198.091721 196.519699 198.801605 204.039597 186.043716 - 183.395874 184.48056 185.85379 189.158936 194.677841 - 204.01683 217.13678 230.845825 246.215103 262.611267 - 291.155426 314.501831 334.816925 355.90448 376.948792 - 398.411133 - 203.483353 219.091644 251.98735 282.460571 296.980072 - 476.255341 492.058868 484.548279 466.938843 443.665039 - 419.847961 394.543854 368.101807 345.106476 326.501801 - 307.529022 284.5112 268.211395 257.909302 245.775116 - 233.638031 216.921631 208.983368 209.713287 209.785492 - 200.464325 196.766022 198.939957 207.909012 180.763809 - 178.597107 180.367493 184.32843 186.944733 191.419159 - 201.568054 212.693436 222.710953 235.198242 269.308258 - 295.9086 317.303772 373.633179 402.608582 433.650909 - 465.94397 - 206.975433 223.697678 258.10614 294.168732 314.314728 - 512.123291 525.441223 513.202332 496.377106 473.348083 - 443.948639 411.720886 380.191559 354.892761 329.315308 - 304.529694 285.488281 267.703613 254.450638 240.041672 - 227.992065 214.124603 205.320877 201.452942 201.029861 - 201.120377 203.081757 204.500702 207.024689 184.487366 - 189.18924 187.904663 198.998779 197.565445 196.349136 - 205.13826 214.983673 216.342239 268.764465 299.873596 - 323.59967 350.138672 377.064758 412.340363 451.479828 - 489.699219 - 211.137375 230.872025 266.974701 309.329315 330.402313 - 621.533875 632.96106 628.884583 613.370483 585.818298 - 550.32959 505.84613 463.795807 430.874908 399.341187 - 374.492188 352.94104 328.315277 303.204926 286.660614 - 272.425476 263.45813 257.127838 246.957397 240.242065 - 235.708847 228.790878 225.823242 234.134872 183.34111 - 184.364304 187.513611 190.850723 186.155975 187.039871 - 201.369003 208.210312 233.550919 276.049225 289.522186 - 303.619995 343.647614 378.20224 417.016937 460.992737 - 502.532471 - 218.746338 238.556915 277.702454 321.887421 343.818573 - 646.476074 658.091614 652.839844 638.589233 599.539307 - 553.287598 507.138947 459.402252 421.058105 388.84433 - 355.61441 328.810699 305.91626 284.896606 268.863159 - 258.581421 248.67662 235.434875 228.977722 226.939636 - 228.800705 225.81517 224.592377 224.8918 178.805878 - 182.624344 183.549316 178.670624 174.467239 188.768143 - 200.450943 204.863388 253.218948 273.121613 278.397186 - 301.494629 342.202759 381.86438 416.784546 455.305603 - 493.668488 - 226.633163 249.569687 287.406403 330.049438 355.471161 - 658.432129 672.727356 670.262512 671.494446 612.965271 - 555.336304 506.895996 456.955109 412.333496 379.877899 - 347.819305 319.739502 295.683472 273.922699 256.650116 - 246.996017 237.942429 229.179596 223.973907 220.188095 - 218.223969 217.638077 219.559753 221.037231 177.422348 - 175.969803 175.278748 172.388428 179.154434 187.740494 - 191.558136 206.210007 249.91481 271.012177 280.335815 - 297.413422 338.025238 377.498138 413.087219 448.275574 - 483.416992 - 233.497696 258.799744 297.185333 338.441681 361.140472 - 665.793091 673.141602 663.639343 644.856018 603.608887 - 551.002808 501.210297 452.975708 410.757874 380.250122 - 349.450806 318.629822 291.990448 270.168732 250.880981 - 237.493668 229.376495 223.591354 217.610687 212.726898 - 211.461304 212.858505 207.875305 215.509888 170.41011 - 170.176239 170.324326 175.902359 175.853119 179.04512 - 179.653336 210.538788 250.797729 274.253601 273.15744 - 285.763672 329.894165 377.460144 402.81427 436.568848 - 472.44928 - 238.253967 262.509125 304.754425 343.692352 363.665344 - 667.723267 667.00061 647.531494 623.268311 586.400452 - 542.396912 494.489075 445.20871 406.851074 375.126495 - 342.295471 312.544006 285.46637 264.571136 246.439102 - 231.858093 222.532501 215.978287 211.688004 210.112656 - 209.362579 209.89856 202.464294 212.241684 162.55777 - 166.277161 167.923492 175.776672 177.5289 176.469437 - 180.721146 222.322281 255.41803 272.506805 268.389862 - 292.463257 327.453491 358.862 385.078186 424.32489 - 461.529419 - 240.549728 263.667511 308.731506 346.933472 361.573456 - 668.57489 654.548584 633.195312 608.846558 575.555237 - 534.518738 489.552155 441.771027 403.964722 367.968781 - 336.871216 306.245667 279.090088 258.243774 241.033463 - 226.749039 216.730881 209.376358 206.845596 206.052643 - 206.256622 211.048599 204.171082 209.396423 161.7854 - 166.732971 169.549011 167.580643 182.927643 175.542633 - 185.221756 223.830093 250.404465 273.376984 265.904816 - 296.721741 328.216522 353.238892 381.608429 415.442627 - 452.672577 - 241.986069 263.178131 309.994965 346.56012 357.221466 - 666.705505 648.856506 626.921997 603.265625 573.225281 - 531.109436 486.535217 439.734497 399.609009 373.076141 - 336.490723 302.896973 276.826935 251.628098 233.951401 - 219.953766 209.781586 205.13739 202.244293 202.15242 - 203.280365 210.189209 208.820297 211.935455 167.145874 - 173.024857 174.154221 168.011826 187.714096 179.697205 - 191.582794 224.760574 259.008026 271.983521 268.668091 - 302.688049 337.24762 355.378937 378.504608 411.934357 - 446.988495 - 245.339417 261.666412 305.397125 340.652039 352.828979 - 668.10675 633.776794 620.076233 606.861389 574.186829 - 535.784424 491.229675 451.145203 407.645294 372.265442 - 338.056366 302.808594 276.321442 249.057785 228.833099 - 214.391556 204.219772 199.206802 197.880249 199.336975 - 202.431473 212.598022 212.126541 220.821381 174.084305 - 175.166031 176.690369 175.364853 191.976746 183.100525 - 200.233521 234.748489 257.793365 275.389374 267.691864 - 297.738647 346.227783 367.283356 379.281494 413.347504 - 446.790314 - 251.273544 263.051941 299.030701 332.809723 349.797424 - 673.74469 647.742126 629.993042 611.769531 585.69458 - 545.308411 499.083466 457.388702 419.322784 378.824402 - 342.588562 306.276794 276.91394 249.378647 226.904892 - 210.842697 199.296768 193.680344 194.732056 198.226746 - 203.523819 216.244873 216.216721 225.553024 177.323059 - 183.042038 192.168259 192.354279 199.702408 199.554184 - 220.624344 249.364014 267.143311 290.80188 277.968079 - 304.796112 356.764923 384.797546 393.085327 420.796387 - 449.979675 - 256.397522 267.221405 299.336426 330.220886 352.619934 - 686.33667 671.216248 645.676941 626.064026 603.815857 - 568.42334 517.358398 477.841492 435.598389 395.669739 - 353.558044 314.874573 282.516205 251.497833 224.404831 - 205.333008 193.284195 189.808212 191.979858 198.634644 - 206.141083 218.594406 223.633148 235.942749 189.077316 - 193.837051 198.278168 197.181641 209.319962 209.27774 - 223.282059 255.279709 281.208344 297.758545 280.471252 - 312.045288 358.941223 395.024811 411.306671 431.298981 - 455.765015 - 260.01828 273.046356 305.147308 342.95697 363.814667 - 699.871765 652.449585 661.204651 660.13855 637.971375 - 597.012024 539.355408 503.875946 463.473022 418.904297 - 372.574097 330.832703 290.105499 255.663925 226.969498 - 201.824554 186.273178 185.976578 193.173431 202.544052 - 212.83963 225.876022 232.614883 245.977356 204.704315 - 204.723053 205.613419 201.560364 218.514481 218.09404 - 233.12767 270.403931 288.065674 299.170898 290.205139 - 311.566376 351.130157 391.627136 423.220184 442.238495 - 463.395447 - 264.676758 279.416321 310.825775 360.168976 386.181305 - 711.139648 688.547668 697.630737 702.539978 686.302917 - 638.642517 567.922668 544.981384 500.107361 448.276642 - 398.89624 354.499023 310.511261 271.144928 236.899185 - 206.014221 178.490005 189.551514 200.14827 211.631683 - 222.893677 236.917831 242.087051 260.449249 213.166672 - 218.91423 218.9944 213.896729 237.471359 -/ - -PERMY --- 1000*221.009415 - 213.478149 221.009415 225.161331 231.829575 235.915298 - 236.097275 237.050827 234.27771 229.76741 226.040436 - 220.698318 214.422226 208.666321 202.842514 196.719864 - 190.950119 185.777328 182.083939 179.437073 175.824875 - 171.589722 168.420273 166.020462 163.573654 160.566193 - 156.219025 151.81102 148.170975 149.130783 156.77475 - 168.524704 181.774841 193.162201 207.258484 226.675964 - 245.304672 260.935516 275.786377 291.267334 306.97171 - 321.899689 339.165924 359.466034 379.967926 403.424957 - 432.466034 - 210.060867 218.139908 225.25412 233.133347 239.930679 - 244.383972 247.811081 247.786514 245.135941 241.526337 - 236.689163 230.596085 224.750076 219.306854 213.635269 - 206.998535 201.37381 197.171021 193.092575 188.363083 - 183.177979 178.900284 175.167953 170.405228 168.067764 - 169.374466 161.808228 158.700302 158.314163 163.872101 - 174.139435 184.817078 196.291092 212.346756 231.808121 - 251.132568 269.277313 283.658325 295.620605 309.586365 - 324.15564 341.030243 363.960938 392.294189 421.900818 - 449.822205 - 206.776764 218.134705 228.563644 239.462051 249.531967 - 287.774597 287.93988 289.312561 289.691223 289.741638 - 287.871765 283.940887 277.661926 271.408295 265.552826 - 257.819672 249.369843 240.519684 230.715744 221.053894 - 212.055542 204.325836 197.445358 190.344589 186.832886 - 187.445755 180.963211 175.595795 184.709671 170.154007 - 176.47937 185.347488 196.612305 211.502655 228.587296 - 246.270523 265.027222 280.966278 295.389099 312.225677 - 330.795319 354.106567 380.584442 404.219055 423.447083 - 439.258789 - 200.880661 218.954315 234.832901 253.987686 266.08786 - 353.846649 347.933441 347.343811 350.695099 353.359344 - 351.791443 346.149384 338.340515 324.259521 306.012543 - 287.73291 270.637024 253.962616 239.161377 227.689484 - 217.889877 209.068573 201.376297 195.549789 189.802963 - 185.052353 181.612915 181.455811 184.918808 173.785477 - 179.608704 188.180023 199.140503 211.834412 224.950562 - 240.714615 259.395508 279.681305 301.434967 322.938385 - 340.246857 356.124146 372.457397 386.563202 399.844238 - 411.555237 - 194.597092 219.759613 242.922745 260.442169 277.259186 - 392.13205 384.295471 384.786896 387.58371 378.173767 - 354.75827 336.763306 322.506409 303.819275 281.872192 - 263.617737 247.999985 234.102386 223.025726 214.736755 - 207.441299 200.635971 194.966293 189.410934 186.629349 - 184.429199 182.912476 184.747208 188.878082 178.94133 - 185.080765 193.544174 203.975006 214.87677 228.76535 - 244.861984 263.05658 282.426361 301.693787 319.309845 - 328.719757 335.033142 346.786255 363.451233 381.600983 - 400.266388 - 194.870285 228.13681 248.340561 260.825928 282.65686 - 394.746155 384.549713 385.016296 389.658051 375.007904 - 347.582397 326.006622 308.488831 286.827423 274.30658 - 264.057312 254.35881 245.420731 236.914093 228.552734 - 219.856033 212.664932 203.313324 197.726593 194.454529 - 192.41684 191.455124 193.45993 196.032928 183.916504 - 189.06163 196.64212 203.882919 213.435287 224.709351 - 238.829849 253.121048 266.026062 280.162231 294.804016 - 305.621002 317.385468 337.537048 357.467712 377.746979 - 398.427277 - 196.865692 226.285019 252.776215 261.985779 274.025116 - 414.224945 386.25827 381.083099 397.713379 388.884216 - 372.581726 354.693481 324.509949 305.23056 292.758057 - 280.867798 269.906952 260.911133 251.894119 241.342026 - 231.626923 216.515305 206.23439 201.781357 198.794968 - 196.546219 195.376709 197.518997 200.945038 186.541794 - 190.450439 192.019958 195.726944 201.099182 208.26532 - 218.612549 229.812988 241.265961 256.163879 272.68335 - 289.733093 314.924713 336.875885 356.945312 377.414978 - 397.509766 - 198.917862 220.024994 249.641815 270.206879 282.688141 - 429.450592 416.829071 429.633911 436.776459 419.35556 - 397.106598 374.985748 350.965759 326.480164 310.984253 - 298.563385 286.040558 275.01355 267.176941 251.872986 - 226.7285 213.851242 208.540482 205.875473 202.097763 - 198.091721 196.519699 198.801605 204.039597 186.043716 - 183.395874 184.48056 185.85379 189.158936 194.677841 - 204.01683 217.13678 230.845825 246.215103 262.611267 - 291.155426 314.501831 334.816925 355.90448 376.948792 - 398.411133 - 203.483353 219.091644 251.98735 282.460571 296.980072 - 476.255341 492.058868 484.548279 466.938843 443.665039 - 419.847961 394.543854 368.101807 345.106476 326.501801 - 307.529022 284.5112 268.211395 257.909302 245.775116 - 233.638031 216.921631 208.983368 209.713287 209.785492 - 200.464325 196.766022 198.939957 207.909012 180.763809 - 178.597107 180.367493 184.32843 186.944733 191.419159 - 201.568054 212.693436 222.710953 235.198242 269.308258 - 295.9086 317.303772 373.633179 402.608582 433.650909 - 465.94397 - 206.975433 223.697678 258.10614 294.168732 314.314728 - 512.123291 525.441223 513.202332 496.377106 473.348083 - 443.948639 411.720886 380.191559 354.892761 329.315308 - 304.529694 285.488281 267.703613 254.450638 240.041672 - 227.992065 214.124603 205.320877 201.452942 201.029861 - 201.120377 203.081757 204.500702 207.024689 184.487366 - 189.18924 187.904663 198.998779 197.565445 196.349136 - 205.13826 214.983673 216.342239 268.764465 299.873596 - 323.59967 350.138672 377.064758 412.340363 451.479828 - 489.699219 - 211.137375 230.872025 266.974701 309.329315 330.402313 - 621.533875 632.96106 628.884583 613.370483 585.818298 - 550.32959 505.84613 463.795807 430.874908 399.341187 - 374.492188 352.94104 328.315277 303.204926 286.660614 - 272.425476 263.45813 257.127838 246.957397 240.242065 - 235.708847 228.790878 225.823242 234.134872 183.34111 - 184.364304 187.513611 190.850723 186.155975 187.039871 - 201.369003 208.210312 233.550919 276.049225 289.522186 - 303.619995 343.647614 378.20224 417.016937 460.992737 - 502.532471 - 218.746338 238.556915 277.702454 321.887421 343.818573 - 646.476074 658.091614 652.839844 638.589233 599.539307 - 553.287598 507.138947 459.402252 421.058105 388.84433 - 355.61441 328.810699 305.91626 284.896606 268.863159 - 258.581421 248.67662 235.434875 228.977722 226.939636 - 228.800705 225.81517 224.592377 224.8918 178.805878 - 182.624344 183.549316 178.670624 174.467239 188.768143 - 200.450943 204.863388 253.218948 273.121613 278.397186 - 301.494629 342.202759 381.86438 416.784546 455.305603 - 493.668488 - 226.633163 249.569687 287.406403 330.049438 355.471161 - 658.432129 672.727356 670.262512 671.494446 612.965271 - 555.336304 506.895996 456.955109 412.333496 379.877899 - 347.819305 319.739502 295.683472 273.922699 256.650116 - 246.996017 237.942429 229.179596 223.973907 220.188095 - 218.223969 217.638077 219.559753 221.037231 177.422348 - 175.969803 175.278748 172.388428 179.154434 187.740494 - 191.558136 206.210007 249.91481 271.012177 280.335815 - 297.413422 338.025238 377.498138 413.087219 448.275574 - 483.416992 - 233.497696 258.799744 297.185333 338.441681 361.140472 - 665.793091 673.141602 663.639343 644.856018 603.608887 - 551.002808 501.210297 452.975708 410.757874 380.250122 - 349.450806 318.629822 291.990448 270.168732 250.880981 - 237.493668 229.376495 223.591354 217.610687 212.726898 - 211.461304 212.858505 207.875305 215.509888 170.41011 - 170.176239 170.324326 175.902359 175.853119 179.04512 - 179.653336 210.538788 250.797729 274.253601 273.15744 - 285.763672 329.894165 377.460144 402.81427 436.568848 - 472.44928 - 238.253967 262.509125 304.754425 343.692352 363.665344 - 667.723267 667.00061 647.531494 623.268311 586.400452 - 542.396912 494.489075 445.20871 406.851074 375.126495 - 342.295471 312.544006 285.46637 264.571136 246.439102 - 231.858093 222.532501 215.978287 211.688004 210.112656 - 209.362579 209.89856 202.464294 212.241684 162.55777 - 166.277161 167.923492 175.776672 177.5289 176.469437 - 180.721146 222.322281 255.41803 272.506805 268.389862 - 292.463257 327.453491 358.862 385.078186 424.32489 - 461.529419 - 240.549728 263.667511 308.731506 346.933472 361.573456 - 668.57489 654.548584 633.195312 608.846558 575.555237 - 534.518738 489.552155 441.771027 403.964722 367.968781 - 336.871216 306.245667 279.090088 258.243774 241.033463 - 226.749039 216.730881 209.376358 206.845596 206.052643 - 206.256622 211.048599 204.171082 209.396423 161.7854 - 166.732971 169.549011 167.580643 182.927643 175.542633 - 185.221756 223.830093 250.404465 273.376984 265.904816 - 296.721741 328.216522 353.238892 381.608429 415.442627 - 452.672577 - 241.986069 263.178131 309.994965 346.56012 357.221466 - 666.705505 648.856506 626.921997 603.265625 573.225281 - 531.109436 486.535217 439.734497 399.609009 373.076141 - 336.490723 302.896973 276.826935 251.628098 233.951401 - 219.953766 209.781586 205.13739 202.244293 202.15242 - 203.280365 210.189209 208.820297 211.935455 167.145874 - 173.024857 174.154221 168.011826 187.714096 179.697205 - 191.582794 224.760574 259.008026 271.983521 268.668091 - 302.688049 337.24762 355.378937 378.504608 411.934357 - 446.988495 - 245.339417 261.666412 305.397125 340.652039 352.828979 - 668.10675 633.776794 620.076233 606.861389 574.186829 - 535.784424 491.229675 451.145203 407.645294 372.265442 - 338.056366 302.808594 276.321442 249.057785 228.833099 - 214.391556 204.219772 199.206802 197.880249 199.336975 - 202.431473 212.598022 212.126541 220.821381 174.084305 - 175.166031 176.690369 175.364853 191.976746 183.100525 - 200.233521 234.748489 257.793365 275.389374 267.691864 - 297.738647 346.227783 367.283356 379.281494 413.347504 - 446.790314 - 251.273544 263.051941 299.030701 332.809723 349.797424 - 673.74469 647.742126 629.993042 611.769531 585.69458 - 545.308411 499.083466 457.388702 419.322784 378.824402 - 342.588562 306.276794 276.91394 249.378647 226.904892 - 210.842697 199.296768 193.680344 194.732056 198.226746 - 203.523819 216.244873 216.216721 225.553024 177.323059 - 183.042038 192.168259 192.354279 199.702408 199.554184 - 220.624344 249.364014 267.143311 290.80188 277.968079 - 304.796112 356.764923 384.797546 393.085327 420.796387 - 449.979675 - 256.397522 267.221405 299.336426 330.220886 352.619934 - 686.33667 671.216248 645.676941 626.064026 603.815857 - 568.42334 517.358398 477.841492 435.598389 395.669739 - 353.558044 314.874573 282.516205 251.497833 224.404831 - 205.333008 193.284195 189.808212 191.979858 198.634644 - 206.141083 218.594406 223.633148 235.942749 189.077316 - 193.837051 198.278168 197.181641 209.319962 209.27774 - 223.282059 255.279709 281.208344 297.758545 280.471252 - 312.045288 358.941223 395.024811 411.306671 431.298981 - 455.765015 - 260.01828 273.046356 305.147308 342.95697 363.814667 - 699.871765 652.449585 661.204651 660.13855 637.971375 - 597.012024 539.355408 503.875946 463.473022 418.904297 - 372.574097 330.832703 290.105499 255.663925 226.969498 - 201.824554 186.273178 185.976578 193.173431 202.544052 - 212.83963 225.876022 232.614883 245.977356 204.704315 - 204.723053 205.613419 201.560364 218.514481 218.09404 - 233.12767 270.403931 288.065674 299.170898 290.205139 - 311.566376 351.130157 391.627136 423.220184 442.238495 - 463.395447 - 264.676758 279.416321 310.825775 360.168976 386.181305 - 711.139648 688.547668 697.630737 702.539978 686.302917 - 638.642517 567.922668 544.981384 500.107361 448.276642 - 398.89624 354.499023 310.511261 271.144928 236.899185 - 206.014221 178.490005 189.551514 200.14827 211.631683 - 222.893677 236.917831 242.087051 260.449249 213.166672 - 218.91423 218.9944 213.896729 237.471359 -/ - -PERMZ --- 1000*22.00 -42.6956298000000 -44.2018830000000 -45.0322662000000 -46.3659150000000 -47.1830596000000 -47.2194550000000 -47.4101654000000 -46.8555420000000 -45.9534820000000 -45.2080872000000 -44.1396636000000 -42.8844452000000 -41.7332642000000 -40.5685028000000 -39.3439728000000 -38.1900238000000 -37.1554656000000 -36.4167878000000 -35.8874146000000 -35.1649750000000 -34.3179444000000 -33.6840546000000 -33.2040924000000 -32.7147308000000 -32.1132386000000 -31.2438050000000 -30.3622040000000 -29.6341950000000 -29.8261566000000 -31.3549500000000 -33.7049408000000 -36.3549682000000 -38.6324402000000 -41.4516968000000 -45.3351928000000 -49.0609344000000 -52.1871032000000 -55.1572754000000 -58.2534668000000 -61.3943420000000 -64.3799378000000 -67.8331848000000 -71.8932068000000 -75.9935852000000 -80.6849914000000 -86.4932068000000 -42.0121734000000 -43.6279816000000 -45.0508240000000 -46.6266694000000 -47.9861358000000 -48.8767944000000 -49.5622162000000 -49.5573028000000 -49.0271882000000 -48.3052674000000 -47.3378326000000 -46.1192170000000 -44.9500152000000 -43.8613708000000 -42.7270538000000 -41.3997070000000 -40.2747620000000 -39.4342042000000 -38.6185150000000 -37.6726166000000 -36.6355958000000 -35.7800568000000 -35.0335906000000 -34.0810456000000 -33.6135528000000 -33.8748932000000 -32.3616456000000 -31.7400604000000 -31.6628326000000 -32.7744202000000 -34.8278870000000 -36.9634156000000 -39.2582184000000 -42.4693512000000 -46.3616242000000 -50.2265136000000 -53.8554626000000 -56.7316650000000 -59.1241210000000 -61.9172730000000 -64.8311280000000 -68.2060486000000 -72.7921876000000 -78.4588378000000 -84.3801636000000 -89.9644410000000 -41.3553528000000 -43.6269410000000 -45.7127288000000 -47.8924102000000 -49.9063934000000 -57.5549194000000 -57.5879760000000 -57.8625122000000 -57.9382446000000 -57.9483276000000 -57.5743530000000 -56.7881774000000 -55.5323852000000 -54.2816590000000 -53.1105652000000 -51.5639344000000 -49.8739686000000 -48.1039368000000 -46.1431488000000 -44.2107788000000 -42.4111084000000 -40.8651672000000 -39.4890716000000 -38.0689178000000 -37.3665772000000 -37.4891510000000 -36.1926422000000 -35.1191590000000 -36.9419342000000 -34.0308014000000 -35.2958740000000 -37.0694976000000 -39.3224610000000 -42.3005310000000 -45.7174592000000 -49.2541046000000 -53.0054444000000 -56.1932556000000 -59.0778198000000 -62.4451354000000 -66.1590638000000 -70.8213134000000 -76.1168884000000 -80.8438110000000 -84.6894166000000 -87.8517578000000 -40.1761322000000 -43.7908630000000 -46.9665802000000 -50.7975372000000 -53.2175720000000 -70.7693298000000 -69.5866882000000 -69.4687622000000 -70.1390198000000 -70.6718688000000 -70.3582886000000 -69.2298768000000 -67.6681030000000 -64.8519042000000 -61.2025086000000 -57.5465820000000 -54.1274048000000 -50.7925232000000 -47.8322754000000 -45.5378968000000 -43.5779754000000 -41.8137146000000 -40.2752594000000 -39.1099578000000 -37.9605926000000 -37.0104706000000 -36.3225830000000 -36.2911622000000 -36.9837616000000 -34.7570954000000 -35.9217408000000 -37.6360046000000 -39.8281006000000 -42.3668824000000 -44.9901124000000 -48.1429230000000 -51.8791016000000 -55.9362610000000 -60.2869934000000 -64.5876770000000 -68.0493714000000 -71.2248292000000 -74.4914794000000 -77.3126404000000 -79.9688476000000 -82.3110474000000 -38.9194184000000 -43.9519226000000 -48.5845490000000 -52.0884338000000 -55.4518372000000 -78.4264100000000 -76.8590942000000 -76.9573792000000 -77.5167420000000 -75.6347534000000 -70.9516540000000 -67.3526612000000 -64.5012818000000 -60.7638550000000 -56.3744384000000 -52.7235474000000 -49.5999970000000 -46.8204772000000 -44.6051452000000 -42.9473510000000 -41.4882598000000 -40.1271942000000 -38.9932586000000 -37.8821868000000 -37.3258698000000 -36.8858398000000 -36.5824952000000 -36.9494416000000 -37.7756164000000 -35.7882660000000 -37.0161530000000 -38.7088348000000 -40.7950012000000 -42.9753540000000 -45.7530700000000 -48.9723968000000 -52.6113160000000 -56.4852722000000 -60.3387574000000 -63.8619690000000 -65.7439514000000 -67.0066284000000 -69.3572510000000 -72.6902466000000 -76.3201966000000 -80.0532776000000 -38.9740570000000 -45.6273620000000 -49.6681122000000 -52.1651856000000 -56.5313720000000 -78.9492310000000 -76.9099426000000 -77.0032592000000 -77.9316102000000 -75.0015808000000 -69.5164794000000 -65.2013244000000 -61.6977662000000 -57.3654846000000 -54.8613160000000 -52.8114624000000 -50.8717620000000 -49.0841462000000 -47.3828186000000 -45.7105468000000 -43.9712066000000 -42.5329864000000 -40.6626648000000 -39.5453186000000 -38.8909058000000 -38.4833680000000 -38.2910248000000 -38.6919860000000 -39.2065856000000 -36.7833008000000 -37.8123260000000 -39.3284240000000 -40.7765838000000 -42.6870574000000 -44.9418702000000 -47.7659698000000 -50.6242096000000 -53.2052124000000 -56.0324462000000 -58.9608032000000 -61.1242004000000 -63.4770936000000 -67.5074096000000 -71.4935424000000 -75.5493958000000 -79.6854554000000 -39.3731384000000 -45.2570038000000 -50.5552430000000 -52.3971558000000 -54.8050232000000 -82.8449890000000 -77.2516540000000 -76.2166198000000 -79.5426758000000 -77.7768432000000 -74.5163452000000 -70.9386962000000 -64.9019898000000 -61.0461120000000 -58.5516114000000 -56.1735596000000 -53.9813904000000 -52.1822266000000 -50.3788238000000 -48.2684052000000 -46.3253846000000 -43.3030610000000 -41.2468780000000 -40.3562714000000 -39.7589936000000 -39.3092438000000 -39.0753418000000 -39.5037994000000 -40.1890076000000 -37.3083588000000 -38.0900878000000 -38.4039916000000 -39.1453888000000 -40.2198364000000 -41.6530640000000 -43.7225098000000 -45.9625976000000 -48.2531922000000 -51.2327758000000 -54.5366700000000 -57.9466186000000 -62.9849426000000 -67.3751770000000 -71.3890624000000 -75.4829956000000 -79.5019532000000 -39.7835724000000 -44.0049988000000 -49.9283630000000 -54.0413758000000 -56.5376282000000 -85.8901184000000 -83.3658142000000 -85.9267822000000 -87.3552918000000 -83.8711120000000 -79.4213196000000 -74.9971496000000 -70.1931518000000 -65.2960328000000 -62.1968506000000 -59.7126770000000 -57.2081116000000 -55.0027100000000 -53.4353882000000 -50.3745972000000 -45.3457000000000 -42.7702484000000 -41.7080964000000 -41.1750946000000 -40.4195526000000 -39.6183442000000 -39.3039398000000 -39.7603210000000 -40.8079194000000 -37.2087432000000 -36.6791748000000 -36.8961120000000 -37.1707580000000 -37.8317872000000 -38.9355682000000 -40.8033660000000 -43.4273560000000 -46.1691650000000 -49.2430206000000 -52.5222534000000 -58.2310852000000 -62.9003662000000 -66.9633850000000 -71.1808960000000 -75.3897584000000 -79.6822266000000 -40.6966706000000 -43.8183288000000 -50.3974700000000 -56.4921142000000 -59.3960144000000 -95.2510682000000 -98.4117736000000 -96.9096558000000 -93.3877686000000 -88.7330078000000 -83.9695922000000 -78.9087708000000 -73.6203614000000 -69.0212952000000 -65.3003602000000 -61.5058044000000 -56.9022400000000 -53.6422790000000 -51.5818604000000 -49.1550232000000 -46.7276062000000 -43.3843262000000 -41.7966736000000 -41.9426574000000 -41.9570984000000 -40.0928650000000 -39.3532044000000 -39.7879914000000 -41.5818024000000 -36.1527618000000 -35.7194214000000 -36.0734986000000 -36.8656860000000 -37.3889466000000 -38.2838318000000 -40.3136108000000 -42.5386872000000 -44.5421906000000 -47.0396484000000 -53.8616516000000 -59.1817200000000 -63.4607544000000 -74.7266358000000 -80.5217164000000 -86.7301818000000 -93.1887940000000 -41.3950866000000 -44.7395356000000 -51.6212280000000 -58.8337464000000 -62.8629456000000 -102.424658200000 -105.088244600000 -102.640466400000 -99.2754212000000 -94.6696166000000 -88.7897278000000 -82.3441772000000 -76.0383118000000 -70.9785522000000 -65.8630616000000 -60.9059388000000 -57.0976562000000 -53.5407226000000 -50.8901276000000 -48.0083344000000 -45.5984130000000 -42.8249206000000 -41.0641754000000 -40.2905884000000 -40.2059722000000 -40.2240754000000 -40.6163514000000 -40.9001404000000 -41.4049378000000 -36.8974732000000 -37.8378480000000 -37.5809326000000 -39.7997558000000 -39.5130890000000 -39.2698272000000 -41.0276520000000 -42.9967346000000 -43.2684478000000 -53.7528930000000 -59.9747192000000 -64.7199340000000 -70.0277344000000 -75.4129516000000 -82.4680726000000 -90.2959656000000 -97.9398438000000 -42.2274750000000 -46.1744050000000 -53.3949402000000 -61.8658630000000 -66.0804626000000 -124.306775000000 -126.592212000000 -125.776916600000 -122.674096600000 -117.163659600000 -110.065918000000 -101.169226000000 -92.7591614000000 -86.1749816000000 -79.8682374000000 -74.8984376000000 -70.5882080000000 -65.6630554000000 -60.6409852000000 -57.3321228000000 -54.4850952000000 -52.6916260000000 -51.4255676000000 -49.3914794000000 -48.0484130000000 -47.1417694000000 -45.7581756000000 -45.1646484000000 -46.8269744000000 -36.6682220000000 -36.8728608000000 -37.5027222000000 -38.1701446000000 -37.2311950000000 -37.4079742000000 -40.2738006000000 -41.6420624000000 -46.7101838000000 -55.2098450000000 -57.9044372000000 -60.7239990000000 -68.7295228000000 -75.6404480000000 -83.4033874000000 -92.1985474000000 -100.506494200000 -43.7492676000000 -47.7113830000000 -55.5404908000000 -64.3774842000000 -68.7637146000000 -129.295214800000 -131.618322800000 -130.567968800000 -127.717846600000 -119.907861400000 -110.657519600000 -101.427789400000 -91.8804504000000 -84.2116210000000 -77.7688660000000 -71.1228820000000 -65.7621398000000 -61.1832520000000 -56.9793212000000 -53.7726318000000 -51.7162842000000 -49.7353240000000 -47.0869750000000 -45.7955444000000 -45.3879272000000 -45.7601410000000 -45.1630340000000 -44.9184754000000 -44.9783600000000 -35.7611756000000 -36.5248688000000 -36.7098632000000 -35.7341248000000 -34.8934478000000 -37.7536286000000 -40.0901886000000 -40.9726776000000 -50.6437896000000 -54.6243226000000 -55.6794372000000 -60.2989258000000 -68.4405518000000 -76.3728760000000 -83.3569092000000 -91.0611206000000 -98.7336976000000 -45.3266326000000 -49.9139374000000 -57.4812806000000 -66.0098876000000 -71.0942322000000 -131.686425800000 -134.545471200000 -134.052502400000 -134.298889200000 -122.593054200000 -111.067260800000 -101.379199200000 -91.3910218000000 -82.4666992000000 -75.9755798000000 -69.5638610000000 -63.9479004000000 -59.1366944000000 -54.7845398000000 -51.3300232000000 -49.3992034000000 -47.5884858000000 -45.8359192000000 -44.7947814000000 -44.0376190000000 -43.6447938000000 -43.5276154000000 -43.9119506000000 -44.2074462000000 -35.4844696000000 -35.1939606000000 -35.0557496000000 -34.4776856000000 -35.8308868000000 -37.5480988000000 -38.3116272000000 -41.2420014000000 -49.9829620000000 -54.2024354000000 -56.0671630000000 -59.4826844000000 -67.6050476000000 -75.4996276000000 -82.6174438000000 -89.6551148000000 -96.6833984000000 -46.6995392000000 -51.7599488000000 -59.4370666000000 -67.6883362000000 -72.2280944000000 -133.158618200000 -134.628320400000 -132.727868600000 -128.971203600000 -120.721777400000 -110.200561600000 -100.242059400000 -90.5951416000000 -82.1515748000000 -76.0500244000000 -69.8901612000000 -63.7259644000000 -58.3980896000000 -54.0337464000000 -50.1761962000000 -47.4987336000000 -45.8752990000000 -44.7182708000000 -43.5221374000000 -42.5453796000000 -42.2922608000000 -42.5717010000000 -41.5750610000000 -43.1019776000000 -34.0820220000000 -34.0352478000000 -34.0648652000000 -35.1804718000000 -35.1706238000000 -35.8090240000000 -35.9306672000000 -42.1077576000000 -50.1595458000000 -54.8507202000000 -54.6314880000000 -57.1527344000000 -65.9788330000000 -75.4920288000000 -80.5628540000000 -87.3137696000000 -94.4898560000000 -47.6507934000000 -52.5018250000000 -60.9508850000000 -68.7384704000000 -72.7330688000000 -133.544653400000 -133.400122000000 -129.506298800000 -124.653662200000 -117.280090400000 -108.479382400000 -98.8978150000000 -89.0417420000000 -81.3702148000000 -75.0252990000000 -68.4590942000000 -62.5088012000000 -57.0932740000000 -52.9142272000000 -49.2878204000000 -46.3716186000000 -44.5065002000000 -43.1956574000000 -42.3376008000000 -42.0225312000000 -41.8725158000000 -41.9797120000000 -40.4928588000000 -42.4483368000000 -32.5115540000000 -33.2554322000000 -33.5846984000000 -35.1553344000000 -35.5057800000000 -35.2938874000000 -36.1442292000000 -44.4644562000000 -51.0836060000000 -54.5013610000000 -53.6779724000000 -58.4926514000000 -65.4906982000000 -71.7724000000000 -77.0156372000000 -84.8649780000000 -92.3058838000000 -48.1099456000000 -52.7335022000000 -61.7463012000000 -69.3866944000000 -72.3146912000000 -133.714978000000 -130.909716800000 -126.639062400000 -121.769311600000 -115.111047400000 -106.903747600000 -97.9104310000000 -88.3542054000000 -80.7929444000000 -73.5937562000000 -67.3742432000000 -61.2491334000000 -55.8180176000000 -51.6487548000000 -48.2066926000000 -45.3498078000000 -43.3461762000000 -41.8752716000000 -41.3691192000000 -41.2105286000000 -41.2513244000000 -42.2097198000000 -40.8342164000000 -41.8792846000000 -32.3570800000000 -33.3465942000000 -33.9098022000000 -33.5161286000000 -36.5855286000000 -35.1085266000000 -37.0443512000000 -44.7660186000000 -50.0808930000000 -54.6753968000000 -53.1809632000000 -59.3443482000000 -65.6433044000000 -70.6477784000000 -76.3216858000000 -83.0885254000000 -90.5345154000000 -48.3972138000000 -52.6356262000000 -61.9989930000000 -69.3120240000000 -71.4442932000000 -133.341101000000 -129.771301200000 -125.384399400000 -120.653125000000 -114.645056200000 -106.221887200000 -97.3070434000000 -87.9468994000000 -79.9218018000000 -74.6152282000000 -67.2981446000000 -60.5793946000000 -55.3653870000000 -50.3256196000000 -46.7902802000000 -43.9907532000000 -41.9563172000000 -41.0274780000000 -40.4488586000000 -40.4304840000000 -40.6560730000000 -42.0378418000000 -41.7640594000000 -42.3870910000000 -33.4291748000000 -34.6049714000000 -34.8308442000000 -33.6023652000000 -37.5428192000000 -35.9394410000000 -38.3165588000000 -44.9521148000000 -51.8016052000000 -54.3967042000000 -53.7336182000000 -60.5376098000000 -67.4495240000000 -71.0757874000000 -75.7009216000000 -82.3868714000000 -89.3976990000000 -49.0678834000000 -52.3332824000000 -61.0794250000000 -68.1304078000000 -70.5657958000000 -133.621350000000 -126.755358800000 -124.015246600000 -121.372277800000 -114.837365800000 -107.156884800000 -98.2459350000000 -90.2290406000000 -81.5290588000000 -74.4530884000000 -67.6112732000000 -60.5617188000000 -55.2642884000000 -49.8115570000000 -45.7666198000000 -42.8783112000000 -40.8439544000000 -39.8413604000000 -39.5760498000000 -39.8673950000000 -40.4862946000000 -42.5196044000000 -42.4253082000000 -44.1642762000000 -34.8168610000000 -35.0332062000000 -35.3380738000000 -35.0729706000000 -38.3953492000000 -36.6201050000000 -40.0467042000000 -46.9496978000000 -51.5586730000000 -55.0778748000000 -53.5383728000000 -59.5477294000000 -69.2455566000000 -73.4566712000000 -75.8562988000000 -82.6695008000000 -89.3580628000000 -50.2547088000000 -52.6103882000000 -59.8061402000000 -66.5619446000000 -69.9594848000000 -134.748938000000 -129.548425200000 -125.998608400000 -122.353906200000 -117.138916000000 -109.061682200000 -99.8166932000000 -91.4777404000000 -83.8645568000000 -75.7648804000000 -68.5177124000000 -61.2553588000000 -55.3827880000000 -49.8757294000000 -45.3809784000000 -42.1685394000000 -39.8593536000000 -38.7360688000000 -38.9464112000000 -39.6453492000000 -40.7047638000000 -43.2489746000000 -43.2433442000000 -45.1106048000000 -35.4646118000000 -36.6084076000000 -38.4336518000000 -38.4708558000000 -39.9404816000000 -39.9108368000000 -44.1248688000000 -49.8728028000000 -53.4286622000000 -58.1603760000000 -55.5936158000000 -60.9592224000000 -71.3529846000000 -76.9595092000000 -78.6170654000000 -84.1592774000000 -89.9959350000000 -51.2795044000000 -53.4442810000000 -59.8672852000000 -66.0441772000000 -70.5239868000000 -137.267334000000 -134.243249600000 -129.135388200000 -125.212805200000 -120.763171400000 -113.684668000000 -103.471679600000 -95.5682984000000 -87.1196778000000 -79.1339478000000 -70.7116088000000 -62.9749146000000 -56.5032410000000 -50.2995666000000 -44.8809662000000 -41.0666016000000 -38.6568390000000 -37.9616424000000 -38.3959716000000 -39.7269288000000 -41.2282166000000 -43.7188812000000 -44.7266296000000 -47.1885498000000 -37.8154632000000 -38.7674102000000 -39.6556336000000 -39.4363282000000 -41.8639924000000 -41.8555480000000 -44.6564118000000 -51.0559418000000 -56.2416688000000 -59.5517090000000 -56.0942504000000 -62.4090576000000 -71.7882446000000 -79.0049622000000 -82.2613342000000 -86.2597962000000 -91.1530030000000 -52.0036560000000 -54.6092712000000 -61.0294616000000 -68.5913940000000 -72.7629334000000 -139.974353000000 -130.489917000000 -132.240930200000 -132.027710000000 -127.594275000000 -119.402404800000 -107.871081600000 -100.775189200000 -92.6946044000000 -83.7808594000000 -74.5148194000000 -66.1665406000000 -58.0210998000000 -51.1327850000000 -45.3938996000000 -40.3649108000000 -37.2546356000000 -37.1953156000000 -38.6346862000000 -40.5088104000000 -42.5679260000000 -45.1752044000000 -46.5229766000000 -49.1954712000000 -40.9408630000000 -40.9446106000000 -41.1226838000000 -40.3120728000000 -43.7028962000000 -43.6188080000000 -46.6255340000000 -54.0807862000000 -57.6131348000000 -59.8341796000000 -58.0410278000000 -62.3132752000000 -70.2260314000000 -78.3254272000000 -84.6440368000000 -88.4476990000000 -92.6790894000000 -52.9353516000000 -55.8832642000000 -62.1651550000000 -72.0337952000000 -77.2362610000000 -142.227929600000 -137.709533600000 -139.526147400000 -140.507995600000 -137.260583400000 -127.728503400000 -113.584533600000 -108.996276800000 -100.021472200000 -89.6553284000000 -79.7792480000000 -70.8998046000000 -62.1022522000000 -54.2289856000000 -47.3798370000000 -41.2028442000000 -35.6980010000000 -37.9103028000000 -40.0296540000000 -42.3263366000000 -44.5787354000000 -47.3835662000000 -48.4174102000000 -52.0898498000000 -42.6333344000000 -43.7828460000000 -43.7988800000000 -42.7793458000000 -47.4942718000000 -/ - --------------------------------------------------------------------------------- - -PROPS --------------------------------------------------------------------------------- --- --- Input of fluid properties and relative permeability --- ---------------------------------------------------------- - - -SWOF --- Sw Krw Kro Pc - 0.000000 0.000000 1.00000 3.75633 - 0.0500000 0.000860000 0.847820 1.86981 - 0.100000 0.00263000 0.697460 1.23731 - 0.150000 0.00524000 0.557170 0.91821 - 0.200000 0.00877000 0.432860 0.72451 - 0.250000 0.0133800 0.327570 0.59341 - 0.300000 0.0192700 0.241770 0.49811 - 0.350000 0.0267200 0.174150 0.42511 - 0.400000 0.0360800 0.122370 0.36691 - 0.450000 0.0478100 0.0837400 0.31911 - 0.500000 0.0625000 0.0556500 0.27881 - 0.550000 0.0809000 0.0357200 0.24401 - 0.600000 0.103940 0.0219900 0.21351 - 0.650000 0.132770 0.0128400 0.18631 - 0.700000 0.168690 0.00699000 0.16161 - 0.750000 0.213020 0.00346000 0.13901 - 0.800000 0.266670 0.00149000 0.11801 - 0.850000 0.329180 0.000510000 0.09831 - 0.900000 0.397060 0.000120000 0.07961 - 0.950000 0.461030 0.00001 0.06161 - 1.00000 0.500000 0.000000 0.04408 -/ - -SGOF ---#NAME? Krg Kro Pc - 0.000000 0.000000 1.00000 0.000000 - 0.0500000 0.00165500 0.806888 0.000000 - 0.100000 0.00691300 0.633562 0.000000 - 0.150000 0.0162130 0.485506 0.000000 - 0.200000 0.0299900 0.364043 0.000000 - 0.250000 0.0486550 0.267589 0.000000 - 0.300000 0.0725730 0.192992 0.000000 - 0.350000 0.102046 0.136554 0.000000 - 0.400000 0.137287 0.0946710 0.000000 - 0.450000 0.178402 0.0641510 0.000000 - 0.500000 0.225368 0.0423240 0.000000 - 0.550000 0.278030 0.0270350 0.000000 - 0.600000 0.336093 0.0165860 0.000000 - 0.650000 0.399135 0.00966200 0.000000 - 0.700000 0.466631 0.00525400 0.000000 - 0.750000 0.538000 0.00259700 0.000000 - 0.800000 0.612665 0.00111700 0.000000 - 0.850000 0.690169 0.000384000 0.000000 - 0.900000 0.770395 0.000088 0.000000 - 0.950000 0.854218 0.000007 0.000000 - 1.00000 0.950000 0.000000 0.000000 -/ - -PVTW - 277.0 1.038 4.67E-5 0.318 0.0 / - -ROCK - 277.0 4.84E-5 / - -DENSITY - 860.04 1033.0 0.853 / Justert 22/7 - ---THE GAS PVT DATA------------------------------------------------- - ---FOR EACH GAS PRESSURE SPECIFIED IN THE FIRST COLUMN ( 30,60,..) ---AT LEAST ONE OIL/GAS RATIO (RV) VALUE IS SPECIFIED (0.000132,0.0..) ---FOR WHICH VAPOUR FORMATION VALUES AND VISCOSITIES ARE GIVEN - ---THE FIRST RV VALUE FOR A GIVEN PRESSURE IS ASSUMED TO BE THE ---SATURATED VALUE ( IE AT THE DEW POINT ) - ---ANY SUBSEQUENT RV VALUES ARE FOR UNDERSATURATED STATES - --- PVDG --- 30 0.04234 0.01344 --- 530 0.003868 0.02935 --- / - -PVTG - --- PRESSURE RSG B-GAS VISCOSITY --- BAR (CP) - - 50.00 0.00000497 0.024958 0.01441 - 0.00000248 0.024958 0.01440 - 0.00000000 0.024958 0.01440 / - - 70.00 0.00000521 0.017639 0.01491 - 0.00000261 0.017641 0.01490 - 0.00000000 0.017643 0.01490 / - - 90.00 0.00000627 0.013608 0.01547 - 0.00000313 0.013611 0.01546 - 0.00000000 0.013615 0.01544 / - - 110.00 0.00000798 0.011072 0.01609 - 0.00000399 0.011076 0.01607 - 0.00000000 0.011081 0.01605 / - - 130.00 0.00001041 0.009340 0.01677 - 0.00000520 0.009346 0.01674 - 0.00000000 0.009352 0.01671 / - - 150.00 0.00001365 0.008092 0.01752 - 0.00000683 0.008099 0.01748 - 0.00000000 0.008106 0.01743 / - - 170.00 0.00001786 0.007156 0.01834 - 0.00000893 0.007164 0.01827 - 0.00000000 0.007172 0.01819 / - - 190.00 0.00002316 0.006433 0.01923 - 0.00001158 0.006442 0.01912 - 0.00000000 0.006451 0.01900 / - - 210.00 0.00002972 0.005861 0.02019 - 0.00001486 0.005871 0.02001 - 0.00000000 0.005881 0.01984 / - - 230.00 0.00003767 0.005402 0.02121 - 0.00001883 0.005412 0.02095 - 0.00000000 0.005422 0.02071 / - - 250.80 0.00004756 0.005013 0.02234 - 0.00002378 0.005022 0.02197 - 0.00000000 0.005032 0.02162 / - - 268.42 0.00005757 0.004737 0.02335 - 0.00002878 0.004746 0.02287 - 0.00000000 0.004754 0.02240 / - - 285.33 0.00006853 0.004511 0.02438 - 0.00003427 0.004518 0.02375 - 0.00000000 0.004525 0.02315 / - - 301.59 0.00008041 0.004323 0.02542 - 0.00004020 0.004327 0.02463 - 0.00000000 0.004332 0.02387 / - - 317.23 0.00009313 0.004165 0.02648 - 0.00004657 0.004166 0.02549 - 0.00000000 0.004169 0.02456 / - - 332.29 0.00010668 0.004031 0.02755 - 0.00005334 0.004029 0.02634 - 0.00000000 0.004028 0.02522 / - - 346.80 0.00012100 0.003917 0.02863 - 0.00006050 0.003911 0.02719 - 0.00000000 0.003906 0.02585 / - - 360.80 0.00013607 0.003819 0.02974 - 0.00006803 0.003808 0.02803 - 0.00000000 0.003799 0.02645 / - - 374.31 0.00015188 0.003735 0.03087 - 0.00007594 0.003718 0.02887 - 0.00000000 0.003705 0.02703 / - - 387.36 0.00016843 0.003662 0.03202 - 0.00008421 0.003639 0.02970 - 0.00000000 0.003621 0.02758 / - - 399.99 0.00018571 0.003598 0.03320 - 0.00009286 0.003570 0.03053 - 0.00000000 0.003545 0.02810 / - - 412.21 0.00020375 0.003543 0.03442 - 0.00010188 0.003508 0.03137 - 0.00000000 0.003477 0.02861 / - - 424.05 0.00022256 0.003496 0.03566 - 0.00011128 0.003453 0.03220 - 0.00000000 0.003416 0.02909 / - - 435.53 0.00024218 0.003454 0.03695 - 0.00012109 0.003404 0.03305 - 0.00000000 0.003360 0.02956 / - - 446.68 0.00026266 0.003419 0.03828 - 0.00013133 0.003360 0.03390 - 0.00000000 0.003309 0.03000 / - - 457.51 0.00028404 0.003388 0.03967 - 0.00014202 0.003320 0.03477 - 0.00000000 0.003262 0.03043 / - - 468.04 0.00030639 0.003362 0.04110 - 0.00015319 0.003285 0.03566 - 0.00000000 0.003218 0.03085 / - - 478.30 0.00032980 0.003341 0.04261 - 0.00016490 0.003253 0.03656 - 0.00000000 0.003178 0.03125 / - - 488.30 0.00035436 0.003323 0.04418 - 0.00017718 0.003225 0.03749 - 0.00000000 0.003140 0.03164 / - - 498.06 0.00038020 0.003310 0.04583 - 0.00019010 0.003200 0.03845 - 0.00000000 0.003105 0.03202 / - - 507.59 0.00040745 0.003300 0.04758 - 0.00020373 0.003178 0.03944 - 0.00000000 0.003073 0.03238 / - - 516.92 0.00043630 0.003293 0.04943 - 0.00021815 0.003158 0.04048 - 0.00000000 0.003042 0.03273 / - - 526.06 0.00046694 0.003290 0.05141 - 0.00023347 0.003141 0.04156 - 0.00000000 0.003013 0.03308 / - - 535.02 0.00049963 0.003291 0.05353 - 0.00024981 0.003126 0.04271 - 0.00000000 0.002986 0.03342 / - - 543.83 0.00053469 0.003295 0.05582 - 0.00026734 0.003114 0.04393 - 0.00000000 0.002960 0.03374 / - - 552.49 0.00057251 0.003303 0.05830 - 0.00028625 0.003105 0.04523 - 0.00000000 0.002935 0.03407 / - - 561.04 0.00061359 0.003315 0.06103 - 0.00030679 0.003098 0.04664 - 0.00000000 0.002912 0.03438 / - - 569.48 0.00065855 0.003332 0.06405 - 0.00032928 0.003093 0.04818 - 0.00000000 0.002890 0.03469 / - - 577.82 0.00070820 0.003354 0.06744 - 0.00035410 0.003092 0.04988 - 0.00000000 0.002868 0.03500 / - - 586.09 0.00076355 0.003382 0.07127 - 0.00038178 0.003094 0.05178 - 0.00000000 0.002847 0.03530 / - - 594.29 0.00082592 0.003418 0.07567 - 0.00041296 0.003099 0.05394 - 0.00000000 0.002828 0.03560 / -/ - ---THE OIL PVT DATA------------------------------------------------ - ---FOR EACH GAS/OIL RATIO (RS) VALUE (2,5...), AT LEAST ONE ---OIL PRESSURE VALUE MUST BE SPECIFIED (20.0,50.0...) ---FOR WHICH SOLUTION FORMATION VALUES AND VISCOSITIES ARE GIVEN - ---THE FIRST PRESSURE VALUE IS ASSUMED TO BE THE SATURATED (BUBBLE ---POINT) PRESSURE FOR THAT RS VALUE. - ---ANY SUBSEQUENT PRESSURES ARE FOR UNDERSATURATED STATES - --- PVDO --- 20.0 1.0100001 1.000 --- 900.7 1.01 1.000 --- / - -PVTO - --- RSO PRESSURE B-OIL VISCOSITY --- (BAR) (CP) - - 20.59 50.00 1.10615 1.180 - 75.00 1.10164 1.247 - 100.00 1.09744 1.315 - 125.00 1.09351 1.384 - 150.00 1.08984 1.453 / - - 28.19 70.00 1.12522 1.066 - 95.00 1.12047 1.124 - 120.00 1.11604 1.182 - 145.00 1.11191 1.241 - 170.00 1.10804 1.300 / - - 36.01 90.00 1.14458 0.964 - 115.00 1.13959 1.014 - 140.00 1.13494 1.064 - 165.00 1.13060 1.115 - 190.00 1.12653 1.166 / - - 44.09 110.00 1.16437 0.880 - 135.00 1.15915 0.924 - 160.00 1.15428 0.968 - 185.00 1.14973 1.012 - 210.00 1.14547 1.056 / - - 52.46 130.00 1.18467 0.805 - 155.00 1.17921 0.843 - 180.00 1.17413 0.882 - 205.00 1.16937 0.920 - 230.00 1.16491 0.959 / - - 61.13 150.00 1.20555 0.746 - 175.00 1.19985 0.780 - 200.00 1.19454 0.814 - 225.00 1.18958 0.849 - 250.00 1.18492 0.883 / - - 70.14 170.00 1.22704 0.698 - 195.00 1.22111 0.729 - 220.00 1.21558 0.759 - 245.00 1.21040 0.790 - 270.00 1.20555 0.821 / - - 79.50 190.00 1.24922 0.658 - 215.00 1.24305 0.686 - 240.00 1.23729 0.714 - 265.00 1.23190 0.742 - 290.00 1.22685 0.770 / - - 89.24 210.00 1.27214 0.637 - 235.00 1.26573 0.664 - 260.00 1.25974 0.693 - 285.00 1.25414 0.725 - 310.00 1.24888 0.760 / - - 99.39 230.00 1.29586 0.622 - 255.00 1.28921 0.641 - 280.00 1.28300 0.661 - 305.00 1.27718 0.680 - 330.00 1.27171 0.699 / - - 110.41 250.80 1.32148 0.610 - 275.80 1.31457 0.628 - 300.80 1.30812 0.647 - 325.80 1.30207 0.665 - 350.80 1.29638 0.682 / - - 120.32 268.42 1.34449 0.576 - 293.42 1.33735 0.593 - 318.42 1.33068 0.609 - 343.42 1.32442 0.626 - 368.42 1.31853 0.642 / - - 130.23 285.33 1.36737 0.5335 - 310.33 1.36001 0.5487 - 335.33 1.35313 0.5638 - 360.33 1.34667 0.5787 - 385.33 1.34059 0.5934 / - - 140.12 301.59 1.39015 0.4956 - 326.59 1.38257 0.5094 - 351.59 1.37548 0.5230 - 376.59 1.36882 0.5365 - 401.59 1.36255 0.5498 / - - 150.01 317.23 1.41282 0.4614 - 342.23 1.40503 0.4739 - 367.23 1.39773 0.4863 - 392.23 1.39088 0.4986 - 417.23 1.38443 0.5107 / - - 159.89 332.29 1.43539 0.43042 - 357.29 1.42739 0.44183 - 382.29 1.41990 0.45312 - 407.29 1.41286 0.46430 - 432.29 1.40622 0.47537 / - - 169.76 346.80 1.45788 0.41191 - 371.80 1.44967 0.42260 - 396.80 1.44198 0.43318 - 421.80 1.43475 0.44365 - 446.80 1.42794 0.45402 / - - 179.63 360.80 1.48028 0.39503 - 385.80 1.47187 0.40508 - 410.80 1.46398 0.41502 - 435.80 1.45657 0.42487 - 460.80 1.44958 0.43461 / - - 189.48 374.31 1.50260 0.37959 - 399.31 1.49399 0.38907 - 424.31 1.48591 0.39845 - 449.31 1.47832 0.40773 - 474.31 1.47116 0.41692 / - - 199.34 387.36 1.52484 0.36543 - 412.36 1.51603 0.37439 - 437.36 1.50777 0.38326 - 462.36 1.50000 0.39203 - 487.36 1.49267 0.40072 / - - 209.18 399.99 1.54700 0.35239 - 424.99 1.53800 0.36089 - 449.99 1.52956 0.36929 - 474.99 1.52161 0.37762 - 499.99 1.51411 0.38585 / - - 219.02 412.21 1.56910 0.34035 - 437.21 1.55991 0.34843 - 462.21 1.55128 0.35642 - 487.21 1.54316 0.36433 - 512.21 1.53549 0.37216 / - - 228.85 424.05 1.59112 0.32921 - 449.05 1.58174 0.33691 - 474.05 1.57294 0.34453 - 499.05 1.56464 0.35206 - 524.05 1.55681 0.35952 / - - 238.67 435.53 1.61307 0.31888 - 460.53 1.60351 0.32623 - 485.53 1.59453 0.33350 - 510.53 1.58606 0.34070 - 535.53 1.57807 0.34782 / - - 248.48 446.68 1.63496 0.30927 - 471.68 1.62522 0.31630 - 496.68 1.61606 0.32326 - 521.68 1.60743 0.33014 - 546.68 1.59927 0.33695 / - - 258.29 457.51 1.65678 0.30032 - 482.51 1.64686 0.30706 - 507.51 1.63753 0.31373 - 532.51 1.62873 0.32032 - 557.51 1.62042 0.32685 / - - 268.09 468.04 1.67853 0.29196 - 493.04 1.66843 0.29843 - 518.04 1.65893 0.30483 - 543.04 1.64997 0.31117 - 568.04 1.64150 0.31743 / - - 277.89 478.30 1.70022 0.28414 - 503.30 1.68994 0.29037 - 528.30 1.68028 0.29652 - 553.30 1.67116 0.30261 - 578.30 1.66253 0.30864 / - - 287.68 488.30 1.72184 0.27681 - 513.30 1.71139 0.28281 - 538.30 1.70156 0.28874 - 563.30 1.69228 0.29460 - 588.30 1.68350 0.30040 / - - 297.46 498.06 1.74339 0.26994 - 523.06 1.73277 0.27572 - 548.06 1.72278 0.28144 - 573.06 1.71334 0.28709 - 598.06 1.70442 0.29269 / - - 307.23 507.59 1.76487 0.26347 - 532.59 1.75409 0.26906 - 557.59 1.74393 0.27458 - 582.59 1.73434 0.28004 - 607.59 1.72527 0.28544 / - - 317.00 516.92 1.78628 0.25738 - 541.92 1.77533 0.26279 - 566.92 1.76502 0.26812 - 591.92 1.75528 0.27340 - 616.92 1.74606 0.27863 / - - 326.76 526.06 1.80761 0.25165 - 551.06 1.79651 0.25688 - 576.06 1.78604 0.26204 - 601.06 1.77615 0.26716 - 626.06 1.76679 0.27221 / - - 336.51 535.02 1.82887 0.24623 - 560.02 1.81761 0.25130 - 585.02 1.80699 0.25631 - 610.02 1.79696 0.26126 - 635.02 1.78746 0.26616 / - - 346.26 543.83 1.85005 0.24112 - 568.83 1.83864 0.24603 - 593.83 1.82787 0.25089 - 618.83 1.81770 0.25570 - 643.83 1.80806 0.26045 / - - 356.00 552.49 1.87115 0.23628 - 577.49 1.85959 0.24105 - 602.49 1.84868 0.24577 - 627.49 1.83836 0.25043 - 652.49 1.82858 0.25505 / - - 365.73 561.04 1.89217 0.23170 - 586.04 1.88046 0.23634 - 611.04 1.86940 0.24092 - 636.04 1.85895 0.24546 - 661.04 1.84904 0.24994 / - - 375.46 569.48 1.91309 0.22736 - 594.48 1.90124 0.23187 - 619.48 1.89004 0.23633 - 644.48 1.87946 0.24074 - 669.48 1.86942 0.24510 / - - 385.18 577.82 1.93391 0.22325 - 602.82 1.92192 0.22764 - 627.82 1.91060 0.23198 - 652.82 1.89988 0.23627 - 677.82 1.88971 0.24052 / - - 394.89 586.09 1.95464 0.21934 - 611.09 1.94252 0.22362 - 636.09 1.93106 0.22785 - 661.09 1.92021 0.23204 - 686.09 1.90993 0.23617 / - - 404.60 594.29 1.97527 0.21564 - 619.29 1.96301 0.21981 - 644.29 1.95143 0.22393 - 669.29 1.94046 0.22801 - 694.29 1.93005 0.23204 / -/ -NOECHO - --- INCLUDE --- 'POLY.inc' / - ---------------------------------------------------------------------------------- -SOLUTION - - - -EQUIL --- Datum P woc Pc goc Pc Rsvd Rvvd - 2525. 270 2700 0.0 2525.0 0.0 1* 0 0/ E: Garn - - -RPTRST -BASIC=2 KRO KRW KRG SWAT PRES SGAS SOIL / - -RPTSOL -FIP=3 SWAT / - - -SUMMARY -ALL - - - -SCHEDULE - - -RPTSCHED -WELSPECS WELLS / - - -WELSPECS - 'INJE01' 'I' 1 1 1* 'WATER' / - 'PROD01' 'P' 10 10 1* 'OIL' 7* / -/ - - - -COMPDAT - 'INJE01' 1 1 7 9 'OPEN' 1* 200. 0.5 / - - 'PROD01' 10 10 1 1 'OPEN' 1* 200. 0.5 / - 'PROD01' 10 10 2 2 'OPEN' 1* 200. 0.5 / - 'PROD01' 10 10 3 3 'OPEN' 1* 200. 0.4 / - 'PROD01' 10 10 4 4 'OPEN' 1* 200. 0.4 / - 'PROD01' 10 10 5 5 'OPEN' 1* 200. 0.4 / - 'PROD01' 10 10 6 6 'OPEN' 1* 200. 0.4 / - - 'PROD01' 9 10 2 2 'OPEN' 1* 200. 0.4 / - 'PROD01' 8 10 2 2 'OPEN' 1* 200. 0.4 / - 'PROD01' 7 10 2 2 'OPEN' 1* 200. 0.4 / - 'PROD01' 6 10 2 2 'OPEN' 1* 200. 0.4 / - 'PROD01' 5 10 2 2 'OPEN' 1* 200. 0.4 / - - 'PROD01' 10 9 3 3 'OPEN' 1* 200. 0.4 / - 'PROD01' 10 8 3 3 'OPEN' 1* 200. 0.4 / - 'PROD01' 10 7 3 3 'OPEN' 1* 200. 0.4 / - 'PROD01' 10 6 3 3 'OPEN' 1* 200. 0.4 / - 'PROD01' 10 5 3 3 'OPEN' 1* 200. 0.4 / - - 'PROD01' 9 10 5 5 'OPEN' 1* 200. 0.4 / - 'PROD01' 8 10 5 5 'OPEN' 1* 200. 0.4 / - 'PROD01' 7 10 5 5 'OPEN' 1* 200. 0.4 / - 'PROD01' 6 10 5 5 'OPEN' 1* 200. 0.4 / - 'PROD01' 5 10 5 5 'OPEN' 1* 200. 0.4 / - - 'PROD01' 10 9 6 6 'OPEN' 1* 200. 0.4 / - 'PROD01' 10 8 6 6 'OPEN' 1* 200. 0.4 / - 'PROD01' 10 7 6 6 'OPEN' 1* 200. 0.4 / - 'PROD01' 10 6 6 6 'OPEN' 1* 200. 0.4 / - 'PROD01' 10 5 6 6 'OPEN' 1* 200. 0.4 / -/ - -WELSEGS - 'PROD01' 2512.5 2512.5 1.0e-5 'ABS' 'HFA' 'HO' / - 2 2 1 1 2537.5 2534.5 0.3 0.00010 / - 3 3 1 2 2562.5 2560.5 0.3 0.00010 / - 4 4 1 3 2587.5 2593.5 0.3 0.00010 / - 5 5 1 4 2612.5 2614.5 0.3 0.00010 / - 6 6 1 5 2637.5 2635.5 0.3 0.00010 / - - 7 7 2 2 2737.5 2538.5 0.2 0.00010 / - 8 8 2 7 2937.5 2537.5 0.2 0.00010 / - 9 9 2 8 3137.5 2539.5 0.2 0.00010 / - 10 10 2 9 3337.5 2535.5 0.2 0.00010 / - 11 11 2 10 3537.5 2536.5 0.2 0.00010 / - - 12 12 3 3 2762.5 2563.5 0.2 0.00010 / - 13 13 3 12 2962.5 2562.5 0.1 0.00010 / - 14 14 3 13 3162.5 2562.5 0.1 0.00010 / - 15 15 3 14 3362.5 2564.5 0.1 0.00010 / - 16 16 3 15 3562.5 2562.5 0.1 0.00010 / - - 17 17 4 5 2812.5 2613.5 0.2 0.00010 / - 18 18 4 17 3012.5 2612.5 0.1 0.00010 / - 19 19 4 18 3212.5 2612.5 0.1 0.00010 / - 20 20 4 19 3412.5 2612.5 0.1 0.00010 / - 21 21 4 20 3612.5 2613.5 0.1 0.00010 / - - 22 22 5 6 2837.5 2634.5 0.2 0.00010 / - 23 23 5 22 3037.5 2637.5 0.2 0.00010 / - 24 24 5 23 3237.5 2638.5 0.2 0.00010 / - 25 25 5 24 3437.5 2639.5 0.1 0.00010 / - 26 26 5 25 3637.5 2639.5 0.1 0.00010 / -/ - -COMPSEGS - 'PROD01'/ - 10 10 1 1 2512.5 2525.0 / - 10 10 2 1 2525.0 2550.0 / - 10 10 3 1 2550.0 2575.0 / - 10 10 4 1 2575.0 2600.0 / - 10 10 5 1 2600.0 2625.0 / - 10 10 6 1 2625.0 2650.0 / - - 9 10 2 2 2637.5 2837.5 / - 8 10 2 2 2837.5 3037.5 / - 7 10 2 2 3037.5 3237.5 / - 6 10 2 2 3237.5 3437.5 / - 5 10 2 2 3437.5 3637.5 / - - 10 9 3 3 2662.5 2862.5 / - 10 8 3 3 2862.5 3062.5 / - 10 7 3 3 3062.5 3262.5 / - 10 6 3 3 3262.5 3462.5 / - 10 5 3 3 3462.5 3662.5 / - - 9 10 5 4 2712.5 2912.5 / - 8 10 5 4 2912.5 3112.5 / - 7 10 5 4 3112.5 3312.5 / - 6 10 5 4 3312.5 3512.5 / - 5 10 5 4 3512.5 3712.5 / - - 10 9 6 5 2737.5 2937.5 / - 10 8 6 5 2937.5 3137.5 / - 10 7 6 5 3137.5 3337.5 / - 10 6 6 5 3337.5 3537.5 / - 10 5 6 5 3537.5 3737.5 / -/ - - -WCONINJE - 'INJE01' 'WATER' 'OPEN' 'RATE' 15000.00 1* 450 / -/ -WCONPROD - 'PROD01' 'OPEN' 'BHP' 5* 260 / -/ - -TSTEP -2*0.5 -2*4.5 -2*25 -3*100 -/ - -DATES - 8 'FEB' 2013 / -/ - -TSTEP -4*200 -25*102 -/ diff --git a/ThirdParty/custom-opm-common/opm-common/tests/MSW_RESTART.DATA b/ThirdParty/custom-opm-common/opm-common/tests/MSW_RESTART.DATA deleted file mode 100644 index 74e0dc3b50..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/MSW_RESTART.DATA +++ /dev/null @@ -1,2359 +0,0 @@ --- Copyright 2017 SINTEF Digital, Mathematics and Cybernetics. --- Copyright 2017 Statoil ASA. - --- This file is part of the Open Porous Media project (OPM). - --- OPM is free software: you can redistribute it and/or modify --- it under the terms of the GNU General Public License as published by --- the Free Software Foundation, either version 3 of the License, or --- (at your option) any later version. - --- OPM is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU General Public License for more details. - --- You should have received a copy of the GNU General Public License --- along with OPM. If not, see . - - --- geophysics and fluid properties are copied from Norne - - -RUNSPEC - -DIMENS -10 10 10 / - -GRIDOPTS - 'YES' 0 / - -OIL - -WATER - -GAS - -DISGAS - -VAPOIL - -METRIC - - -START - 06 'NOV' 2011 / - -EQLDIMS - 1 / - -WELLDIMS --- MAX CONN WELLS IN --- WELLS PR WELL GROUPS GROUP - 10 100 10 20 / - - -TABDIMS ---ntsfun ntpvt nssfun nppvt ntfip nrpvt ntendp - 1 1 33 60 16 60 / - -REGDIMS -1 1 1 0 / - -WSEGDIMS -2 100 10 10 / - -PIMTDIMS -1 51 / - -NSTACK - 30 / - -UNIFIN -UNIFOUT - -OPTIONS -77* 1 / - ---------------------------------------------------------- --- --- Input of grid geometry --- ---------------------------------------------------------- -GRID - -NEWTRAN - -GRIDFILE - 0 1 / - -GRIDUNIT -METRES / - -INIT - -MESSAGES - 8*10000 20000 10000 1000 1* / - -NOECHO - --------------------------------------------------------- --- --- Grid --- --------------------------------------------------------- - -DX -1000*200 / -DY -1000*200 / -DZ -1000*25 / - -TOPS -100*2500 -100*2525 -100*2550 -100*2575 -100*2600 -100*2625 -100*2650 -100*2675 -100*2700 -100*2725 / - --------------------------------------------------------- --- --- Input of grid parametres --- --------------------------------------------------------- - -PORO ---1000*0.1 - 0.305407673 0.302880555 0.299644083 0.296977401 0.293957353 - 0.290213585 0.286762595 0.283096671 0.279582053 0.276324838 - 0.272838771 0.269295543 0.265832007 0.262311131 0.258681774 - 0.255152673 0.251749486 0.248729363 0.245866343 0.243379042 - 0.241221696 0.239299357 0.237497672 0.235542923 0.233202517 - 0.230239376 0.227111772 0.221795738 0.216743931 0.214694068 - 0.21399191 0.214060664 0.213573992 0.212882221 0.212218404 - 0.210765392 0.208253294 0.205366701 0.202374279 0.199233189 - 0.195791751 0.19087103 0.184592113 0.178271919 0.172217041 - 0.166684493 - 0.305739641 0.30273518 0.299571425 0.296664715 0.293757796 - 0.290506184 0.286817521 0.283311367 0.280094087 0.276810735 - 0.273629904 0.270182878 0.266755372 0.26333645 0.259940505 - 0.256339252 0.252954036 0.249894992 0.246826172 0.244131818 - 0.241772234 0.23951295 0.237255216 0.234401628 0.232239395 - 0.231546074 0.227063 0.226058006 0.220932722 0.21355623 - 0.212117225 0.211305633 0.2104076 0.210195482 0.210045919 - 0.2090175 0.207214773 0.204247564 0.200515553 0.197094768 - 0.193718523 0.189058378 0.183623329 0.178779885 0.173879623 - 0.168576658 - 0.305676311 0.30237332 0.298807383 0.295294732 0.29219979 - 0.293408364 0.290296465 0.287543803 0.284795105 0.282537222 - 0.280066967 0.277219087 0.273902446 0.270707786 0.267650306 - 0.264262617 0.260649383 0.256968647 0.253008187 0.249457449 - 0.246435776 0.24350287 0.240600452 0.237312362 0.235014781 - 0.233997688 0.230036616 0.233330116 0.226063058 0.211143523 - 0.20860672 0.207242072 0.206174523 0.205694124 0.205162063 - 0.204056993 0.20280689 0.200498238 0.197501704 0.194779664 - 0.192127138 0.188737065 0.184270591 0.179210067 0.173488393 - 0.167345583 - 0.304596335 0.301502943 0.297652721 0.29502207 0.29033649 - 0.2965087 0.294223785 0.291929454 0.290124834 0.28865087 - 0.28643477 0.283440262 0.28029561 0.276342571 0.271708339 - 0.266695023 0.261939347 0.257119775 0.252311081 0.248457357 - 0.245272756 0.24211666 0.23906827 0.236422151 0.233227655 - 0.230463594 0.227986887 0.225110456 0.222300857 0.208237588 - 0.205879048 0.204328984 0.203024119 0.201849252 0.200044826 - 0.198781788 0.19779703 0.196672171 0.195341855 0.193525136 - 0.190636694 0.186331108 0.181063011 0.17540063 0.169973359 - 0.164073005 - 0.302838385 0.299815565 0.298002928 0.293142915 0.289405346 - 0.296212673 0.29340893 0.291233778 0.290824682 0.288495749 - 0.283549368 0.27921772 0.275352925 0.270702571 0.26459831 - 0.259739518 0.255357295 0.250971377 0.246917382 0.243606046 - 0.240687162 0.237708449 0.235009909 0.2313997 0.229180381 - 0.227122039 0.225075141 0.222682878 0.219648898 0.20612973 - 0.203929305 0.20229049 0.200821981 0.198604643 0.197353527 - 0.196273252 0.19527261 0.194034591 0.192313418 0.189992279 - 0.185984164 0.180540085 0.175278217 0.171233118 0.167002782 - 0.162653387 - 0.304252654 0.302912772 0.297023118 0.290552169 0.289207965 - 0.290890872 0.28779003 0.28595823 0.287806839 0.285094142 - 0.27983743 0.275209248 0.270926803 0.263991594 0.260228723 - 0.257510662 0.254725069 0.251799047 0.24874571 0.245515719 - 0.241992354 0.238854975 0.233325988 0.229890242 0.227259248 - 0.224747509 0.222254485 0.219700396 0.217007369 0.203022838 - 0.200810865 0.199210495 0.196220785 0.19427374 0.192502677 - 0.191155553 0.189513564 0.187046081 0.18460089 0.182168365 - 0.178785592 0.174816251 0.172548562 0.169420511 0.165953428 - 0.162434831 - 0.306553632 0.303025365 0.298292071 0.289262474 0.281343549 - 0.290063918 0.281271964 0.279114634 0.286260068 0.284922481 - 0.281410933 0.277759105 0.268585593 0.263430506 0.260999382 - 0.25853169 0.256212592 0.25439921 0.251991838 0.248147905 - 0.244398117 0.2359806 0.231179893 0.228358865 0.225677937 - 0.222710073 0.219991535 0.217106283 0.213988006 0.199041903 - 0.197197393 0.192672938 0.189311296 0.186362281 0.183576301 - 0.181645989 0.17965883 0.177260637 0.175427482 0.173756182 - 0.171902776 0.172722101 0.171012312 0.168195188 0.165319324 - 0.162315756 - 0.308601975 0.302740693 0.297520548 0.290175885 0.279913396 - 0.280754656 0.277884215 0.282979399 0.286681682 0.283561677 - 0.27954489 0.275691628 0.270730197 0.264832973 0.262204111 - 0.260587275 0.259078503 0.258010507 0.258088171 0.253130347 - 0.240282506 0.23328495 0.230450302 0.228956461 0.225759536 - 0.22161293 0.218839049 0.215718657 0.211690277 0.194939077 - 0.189279929 0.185905144 0.182095706 0.178641304 0.175490975 - 0.173206881 0.17199032 0.170229644 0.168538809 0.16685757 - 0.170710742 0.170662627 0.168688416 0.166678846 0.164572611 - 0.162562713 - 0.311266005 0.303436905 0.298389047 0.291604549 0.280754685 - 0.286653459 0.29117009 0.288847446 0.285074264 0.280950099 - 0.277515411 0.27373004 0.269190252 0.265556633 0.263148844 - 0.259876579 0.254260242 0.251441061 0.251037985 0.248150557 - 0.243488193 0.234505653 0.230056822 0.230654135 0.22990118 - 0.221308187 0.216056764 0.212591663 0.211253121 0.18915239 - 0.184551239 0.182070941 0.179868162 0.175452188 0.171078175 - 0.168748677 0.165707871 0.161951184 0.159442693 0.168660507 - 0.170360535 0.168933734 0.172915548 0.171923533 0.17140986 - 0.170669287 - 0.313631713 0.305277348 0.299992889 0.293630242 0.285105377 - 0.294027597 0.294448644 0.289142758 0.28521654 0.281653255 - 0.277328789 0.272372276 0.267223418 0.263801903 0.259562641 - 0.254738986 0.251793563 0.248614609 0.247064292 0.242899135 - 0.238171637 0.231122792 0.226275936 0.223823443 0.222720414 - 0.220645845 0.21863763 0.214039326 0.208416075 0.188520715 - 0.191881254 0.184778929 0.187196851 0.178745598 0.16897741 - 0.165077388 0.160722122 0.150158405 0.17060557 0.175204992 - 0.173360556 0.173124939 0.173423409 0.173936576 0.174183905 - 0.173635334 - 0.315634161 0.307311237 0.301627725 0.296856076 0.28848359 - 0.301468492 0.299829364 0.296715111 0.293404698 0.289809704 - 0.285951257 0.280161858 0.274434507 0.270556569 0.266241252 - 0.263670474 0.261584222 0.257036537 0.250623375 0.246419787 - 0.241828859 0.239105657 0.236978024 0.231540293 0.22685422 - 0.222203672 0.214953586 0.209853679 0.212039426 0.187993631 - 0.186862826 0.184479594 0.180811286 0.169279426 0.160831243 - 0.16168952 0.1561279 0.162263125 0.175790578 0.171369255 - 0.166414693 0.17259334 0.17449528 0.175526276 0.175850511 - 0.175297439 - 0.317820936 0.309031606 0.304118752 0.298689902 0.289505541 - 0.304378241 0.301798731 0.297493309 0.294062853 0.289282799 - 0.284412652 0.279554725 0.27340892 0.268540323 0.264374048 - 0.258806825 0.254526049 0.250570506 0.245969474 0.241906106 - 0.239304081 0.235841468 0.22915493 0.225487143 0.223662138 - 0.223243371 0.218713254 0.214463651 0.210903943 0.18443957 - 0.182850137 0.177959844 0.167273164 0.1559273 0.159255698 - 0.159446374 0.153562471 0.175158948 0.175713778 0.167459965 - 0.167775482 0.174297124 0.17739673 0.176516652 0.1756697 - 0.174772516 - 0.319801629 0.312093467 0.306299478 0.299776167 0.291015208 - 0.305164754 0.302661896 0.298377603 0.295583397 0.290528506 - 0.284714937 0.280298293 0.27434513 0.267694265 0.263436705 - 0.258499861 0.253856897 0.249543548 0.244739711 0.240072057 - 0.237726927 0.234519571 0.23032409 0.22732991 0.224133849 - 0.220874742 0.217186168 0.214563146 0.211732134 0.185316041 - 0.178056568 0.170934528 0.161361605 0.159466341 0.15862903 - 0.15367192 0.156163901 0.175368518 0.17688103 0.170457542 - 0.167635977 0.174466684 0.177352995 0.176606864 0.175285593 - 0.173985362 - 0.322058618 0.314500183 0.30819723 0.301588029 0.291890413 - 0.306359112 0.302929401 0.298421532 0.294894814 0.290779054 - 0.285741717 0.280907393 0.275359899 0.26928848 0.265693396 - 0.261875212 0.256511956 0.251327544 0.246770397 0.241230309 - 0.236851692 0.234051958 0.231458247 0.227589682 0.22313118 - 0.219753116 0.216805235 0.208752573 0.210092381 0.181879848 - 0.175341159 0.168532789 0.166071236 0.158798307 0.153999522 - 0.146555096 0.161414906 0.177861825 0.180764064 0.16888772 - 0.163803399 0.172852188 0.179608911 0.175450116 0.174008742 - 0.173076868 - 0.323613882 0.315529764 0.31002897 0.302778721 0.29299593 - 0.307210356 0.303348154 0.298204929 0.294573963 0.290561736 - 0.28640914 0.281324983 0.275058448 0.270091563 0.265646607 - 0.261308849 0.25658372 0.251301378 0.247343063 0.242678702 - 0.237754807 0.234118447 0.23069863 0.227454126 0.224683926 - 0.221080884 0.217115551 0.206359863 0.209056765 0.176609099 - 0.173140332 0.167533562 0.167048097 0.161327004 0.152770028 - 0.148074657 0.17033571 0.181478396 0.180933744 0.167926729 - 0.169243246 0.173842922 0.174464658 0.171507597 0.172459111 - 0.172053307 - 0.324230641 0.316313326 0.311021417 0.303874075 0.293438494 - 0.308148265 0.302722543 0.297792912 0.294457048 0.290901124 - 0.286760628 0.281765223 0.275105089 0.270436764 0.264846802 - 0.261181742 0.256209671 0.251105219 0.247341946 0.243332893 - 0.238622576 0.234514162 0.230261683 0.227728426 0.224837214 - 0.221006125 0.219154984 0.207829788 0.207330838 0.176508859 - 0.174035192 0.169724852 0.160969079 0.166475281 0.152215064 - 0.151529133 0.171119273 0.178670466 0.181925669 0.167318895 - 0.17233637 0.175121993 0.173400015 0.171929315 0.171413958 - 0.171199054 - 0.324518085 0.316373765 0.311645716 0.304327905 0.293345273 - 0.308171302 0.302568376 0.297729373 0.294858366 0.292069912 - 0.287362337 0.28228116 0.275025904 0.268609852 0.26809752 - 0.262500435 0.256568879 0.252475053 0.246723205 0.242680356 - 0.238197297 0.233884037 0.23124373 0.227864429 0.22469911 - 0.220436603 0.218628615 0.210423753 0.208648548 0.180853724 - 0.17921859 0.173442394 0.161100179 0.169883579 0.155177742 - 0.156035483 0.17101723 0.182995066 0.18046084 0.168196708 - 0.174694583 0.17870298 0.17421329 0.171131819 0.171072081 - 0.170733154 - 0.325689197 0.315875351 0.311065346 0.303860426 0.292760909 - 0.307799608 0.298451424 0.295740843 0.295915246 0.292580456 - 0.288881123 0.28401795 0.279346287 0.271473706 0.267873824 - 0.263697863 0.257539958 0.253942579 0.247768998 0.242786855 - 0.238454312 0.234129086 0.23084867 0.22788772 0.224896938 - 0.220965445 0.220071286 0.211776555 0.213422641 0.185261399 - 0.179393962 0.173819825 0.165434018 0.1709328 0.155794054 - 0.160790592 0.175782308 0.180446148 0.18027316 0.165649027 - 0.170548052 0.181428596 0.17821303 0.170863152 0.171481907 - 0.171061337 - 0.328041613 0.31665644 0.309576452 0.30261445 0.292162061 - 0.307013422 0.299813032 0.296618223 0.295834124 0.294150621 - 0.28992188 0.284630299 0.279731631 0.274518251 0.269265801 - 0.26477614 0.258890003 0.25474447 0.24952428 0.244450629 - 0.240097016 0.235188365 0.231001601 0.228856564 0.22621657 - 0.222816795 0.222927362 0.214251965 0.215106562 0.186207667 - 0.183618054 0.184010774 0.17708379 0.17448473 0.166027784 - 0.172532812 0.181999177 0.18284601 0.185479924 0.168540373 - 0.171712518 0.184031487 0.183628589 0.174911514 0.17331028 - 0.171796739 - 0.330063909 0.318614811 0.30997932 0.301137984 0.291801929 - 0.306482881 0.302408159 0.297659069 0.296293139 0.2955181 - 0.292613 0.286278069 0.28278932 0.277169436 0.272661358 - 0.266644329 0.260922641 0.256710559 0.251342803 0.245366707 - 0.240711212 0.236110777 0.232688963 0.229787886 0.228042454 - 0.225147843 0.224524438 0.218812004 0.220361471 0.193473831 - 0.189598739 0.186228141 0.178634554 0.17917183 0.170490146 - 0.171483517 0.182499632 0.187546209 0.186184183 0.167039305 - 0.172423452 0.18232882 0.185281172 0.179806828 0.175619811 - 0.172812402 - 0.33134222 0.320616454 0.31210947 0.302964628 0.291325331 - 0.304775029 0.292675942 0.296646982 0.299487889 0.298756182 - 0.294435978 0.286753356 0.285080761 0.281030297 0.276217878 - 0.27008608 0.264636755 0.257870078 0.252245009 0.24747625 - 0.241557717 0.236513257 0.233779639 0.232263356 0.23089017 - 0.22907716 0.228480428 0.223272592 0.22481434 0.202652276 - 0.1956615 0.189708441 0.179595709 0.182988167 0.173950642 - 0.175206542 0.188365608 0.188594833 0.184438467 0.169430256 - 0.169365466 0.176326513 0.181365013 0.181643009 0.177349269 - 0.173799098 - 0.332687706 0.322201312 0.314128041 0.306716681 0.294659913 - 0.301158428 0.294815391 0.299049467 0.3028166 0.303315371 - 0.29773882 0.287357479 0.290353328 0.286094725 0.280133724 - 0.274317622 0.269299805 0.262870669 0.256450772 0.250348657 - 0.243786305 0.236859441 0.236380264 0.23535645 0.234656528 - 0.233053342 0.232966229 0.226575106 0.230848417 0.20614399 - 0.203205332 0.196661681 0.185764328 0.192618787 -/ - -PERMX --- 1000*221.009415 - 213.478149 221.009415 225.161331 231.829575 235.915298 - 236.097275 237.050827 234.27771 229.76741 226.040436 - 220.698318 214.422226 208.666321 202.842514 196.719864 - 190.950119 185.777328 182.083939 179.437073 175.824875 - 171.589722 168.420273 166.020462 163.573654 160.566193 - 156.219025 151.81102 148.170975 149.130783 156.77475 - 168.524704 181.774841 193.162201 207.258484 226.675964 - 245.304672 260.935516 275.786377 291.267334 306.97171 - 321.899689 339.165924 359.466034 379.967926 403.424957 - 432.466034 - 210.060867 218.139908 225.25412 233.133347 239.930679 - 244.383972 247.811081 247.786514 245.135941 241.526337 - 236.689163 230.596085 224.750076 219.306854 213.635269 - 206.998535 201.37381 197.171021 193.092575 188.363083 - 183.177979 178.900284 175.167953 170.405228 168.067764 - 169.374466 161.808228 158.700302 158.314163 163.872101 - 174.139435 184.817078 196.291092 212.346756 231.808121 - 251.132568 269.277313 283.658325 295.620605 309.586365 - 324.15564 341.030243 363.960938 392.294189 421.900818 - 449.822205 - 206.776764 218.134705 228.563644 239.462051 249.531967 - 287.774597 287.93988 289.312561 289.691223 289.741638 - 287.871765 283.940887 277.661926 271.408295 265.552826 - 257.819672 249.369843 240.519684 230.715744 221.053894 - 212.055542 204.325836 197.445358 190.344589 186.832886 - 187.445755 180.963211 175.595795 184.709671 170.154007 - 176.47937 185.347488 196.612305 211.502655 228.587296 - 246.270523 265.027222 280.966278 295.389099 312.225677 - 330.795319 354.106567 380.584442 404.219055 423.447083 - 439.258789 - 200.880661 218.954315 234.832901 253.987686 266.08786 - 353.846649 347.933441 347.343811 350.695099 353.359344 - 351.791443 346.149384 338.340515 324.259521 306.012543 - 287.73291 270.637024 253.962616 239.161377 227.689484 - 217.889877 209.068573 201.376297 195.549789 189.802963 - 185.052353 181.612915 181.455811 184.918808 173.785477 - 179.608704 188.180023 199.140503 211.834412 224.950562 - 240.714615 259.395508 279.681305 301.434967 322.938385 - 340.246857 356.124146 372.457397 386.563202 399.844238 - 411.555237 - 194.597092 219.759613 242.922745 260.442169 277.259186 - 392.13205 384.295471 384.786896 387.58371 378.173767 - 354.75827 336.763306 322.506409 303.819275 281.872192 - 263.617737 247.999985 234.102386 223.025726 214.736755 - 207.441299 200.635971 194.966293 189.410934 186.629349 - 184.429199 182.912476 184.747208 188.878082 178.94133 - 185.080765 193.544174 203.975006 214.87677 228.76535 - 244.861984 263.05658 282.426361 301.693787 319.309845 - 328.719757 335.033142 346.786255 363.451233 381.600983 - 400.266388 - 194.870285 228.13681 248.340561 260.825928 282.65686 - 394.746155 384.549713 385.016296 389.658051 375.007904 - 347.582397 326.006622 308.488831 286.827423 274.30658 - 264.057312 254.35881 245.420731 236.914093 228.552734 - 219.856033 212.664932 203.313324 197.726593 194.454529 - 192.41684 191.455124 193.45993 196.032928 183.916504 - 189.06163 196.64212 203.882919 213.435287 224.709351 - 238.829849 253.121048 266.026062 280.162231 294.804016 - 305.621002 317.385468 337.537048 357.467712 377.746979 - 398.427277 - 196.865692 226.285019 252.776215 261.985779 274.025116 - 414.224945 386.25827 381.083099 397.713379 388.884216 - 372.581726 354.693481 324.509949 305.23056 292.758057 - 280.867798 269.906952 260.911133 251.894119 241.342026 - 231.626923 216.515305 206.23439 201.781357 198.794968 - 196.546219 195.376709 197.518997 200.945038 186.541794 - 190.450439 192.019958 195.726944 201.099182 208.26532 - 218.612549 229.812988 241.265961 256.163879 272.68335 - 289.733093 314.924713 336.875885 356.945312 377.414978 - 397.509766 - 198.917862 220.024994 249.641815 270.206879 282.688141 - 429.450592 416.829071 429.633911 436.776459 419.35556 - 397.106598 374.985748 350.965759 326.480164 310.984253 - 298.563385 286.040558 275.01355 267.176941 251.872986 - 226.7285 213.851242 208.540482 205.875473 202.097763 - 198.091721 196.519699 198.801605 204.039597 186.043716 - 183.395874 184.48056 185.85379 189.158936 194.677841 - 204.01683 217.13678 230.845825 246.215103 262.611267 - 291.155426 314.501831 334.816925 355.90448 376.948792 - 398.411133 - 203.483353 219.091644 251.98735 282.460571 296.980072 - 476.255341 492.058868 484.548279 466.938843 443.665039 - 419.847961 394.543854 368.101807 345.106476 326.501801 - 307.529022 284.5112 268.211395 257.909302 245.775116 - 233.638031 216.921631 208.983368 209.713287 209.785492 - 200.464325 196.766022 198.939957 207.909012 180.763809 - 178.597107 180.367493 184.32843 186.944733 191.419159 - 201.568054 212.693436 222.710953 235.198242 269.308258 - 295.9086 317.303772 373.633179 402.608582 433.650909 - 465.94397 - 206.975433 223.697678 258.10614 294.168732 314.314728 - 512.123291 525.441223 513.202332 496.377106 473.348083 - 443.948639 411.720886 380.191559 354.892761 329.315308 - 304.529694 285.488281 267.703613 254.450638 240.041672 - 227.992065 214.124603 205.320877 201.452942 201.029861 - 201.120377 203.081757 204.500702 207.024689 184.487366 - 189.18924 187.904663 198.998779 197.565445 196.349136 - 205.13826 214.983673 216.342239 268.764465 299.873596 - 323.59967 350.138672 377.064758 412.340363 451.479828 - 489.699219 - 211.137375 230.872025 266.974701 309.329315 330.402313 - 621.533875 632.96106 628.884583 613.370483 585.818298 - 550.32959 505.84613 463.795807 430.874908 399.341187 - 374.492188 352.94104 328.315277 303.204926 286.660614 - 272.425476 263.45813 257.127838 246.957397 240.242065 - 235.708847 228.790878 225.823242 234.134872 183.34111 - 184.364304 187.513611 190.850723 186.155975 187.039871 - 201.369003 208.210312 233.550919 276.049225 289.522186 - 303.619995 343.647614 378.20224 417.016937 460.992737 - 502.532471 - 218.746338 238.556915 277.702454 321.887421 343.818573 - 646.476074 658.091614 652.839844 638.589233 599.539307 - 553.287598 507.138947 459.402252 421.058105 388.84433 - 355.61441 328.810699 305.91626 284.896606 268.863159 - 258.581421 248.67662 235.434875 228.977722 226.939636 - 228.800705 225.81517 224.592377 224.8918 178.805878 - 182.624344 183.549316 178.670624 174.467239 188.768143 - 200.450943 204.863388 253.218948 273.121613 278.397186 - 301.494629 342.202759 381.86438 416.784546 455.305603 - 493.668488 - 226.633163 249.569687 287.406403 330.049438 355.471161 - 658.432129 672.727356 670.262512 671.494446 612.965271 - 555.336304 506.895996 456.955109 412.333496 379.877899 - 347.819305 319.739502 295.683472 273.922699 256.650116 - 246.996017 237.942429 229.179596 223.973907 220.188095 - 218.223969 217.638077 219.559753 221.037231 177.422348 - 175.969803 175.278748 172.388428 179.154434 187.740494 - 191.558136 206.210007 249.91481 271.012177 280.335815 - 297.413422 338.025238 377.498138 413.087219 448.275574 - 483.416992 - 233.497696 258.799744 297.185333 338.441681 361.140472 - 665.793091 673.141602 663.639343 644.856018 603.608887 - 551.002808 501.210297 452.975708 410.757874 380.250122 - 349.450806 318.629822 291.990448 270.168732 250.880981 - 237.493668 229.376495 223.591354 217.610687 212.726898 - 211.461304 212.858505 207.875305 215.509888 170.41011 - 170.176239 170.324326 175.902359 175.853119 179.04512 - 179.653336 210.538788 250.797729 274.253601 273.15744 - 285.763672 329.894165 377.460144 402.81427 436.568848 - 472.44928 - 238.253967 262.509125 304.754425 343.692352 363.665344 - 667.723267 667.00061 647.531494 623.268311 586.400452 - 542.396912 494.489075 445.20871 406.851074 375.126495 - 342.295471 312.544006 285.46637 264.571136 246.439102 - 231.858093 222.532501 215.978287 211.688004 210.112656 - 209.362579 209.89856 202.464294 212.241684 162.55777 - 166.277161 167.923492 175.776672 177.5289 176.469437 - 180.721146 222.322281 255.41803 272.506805 268.389862 - 292.463257 327.453491 358.862 385.078186 424.32489 - 461.529419 - 240.549728 263.667511 308.731506 346.933472 361.573456 - 668.57489 654.548584 633.195312 608.846558 575.555237 - 534.518738 489.552155 441.771027 403.964722 367.968781 - 336.871216 306.245667 279.090088 258.243774 241.033463 - 226.749039 216.730881 209.376358 206.845596 206.052643 - 206.256622 211.048599 204.171082 209.396423 161.7854 - 166.732971 169.549011 167.580643 182.927643 175.542633 - 185.221756 223.830093 250.404465 273.376984 265.904816 - 296.721741 328.216522 353.238892 381.608429 415.442627 - 452.672577 - 241.986069 263.178131 309.994965 346.56012 357.221466 - 666.705505 648.856506 626.921997 603.265625 573.225281 - 531.109436 486.535217 439.734497 399.609009 373.076141 - 336.490723 302.896973 276.826935 251.628098 233.951401 - 219.953766 209.781586 205.13739 202.244293 202.15242 - 203.280365 210.189209 208.820297 211.935455 167.145874 - 173.024857 174.154221 168.011826 187.714096 179.697205 - 191.582794 224.760574 259.008026 271.983521 268.668091 - 302.688049 337.24762 355.378937 378.504608 411.934357 - 446.988495 - 245.339417 261.666412 305.397125 340.652039 352.828979 - 668.10675 633.776794 620.076233 606.861389 574.186829 - 535.784424 491.229675 451.145203 407.645294 372.265442 - 338.056366 302.808594 276.321442 249.057785 228.833099 - 214.391556 204.219772 199.206802 197.880249 199.336975 - 202.431473 212.598022 212.126541 220.821381 174.084305 - 175.166031 176.690369 175.364853 191.976746 183.100525 - 200.233521 234.748489 257.793365 275.389374 267.691864 - 297.738647 346.227783 367.283356 379.281494 413.347504 - 446.790314 - 251.273544 263.051941 299.030701 332.809723 349.797424 - 673.74469 647.742126 629.993042 611.769531 585.69458 - 545.308411 499.083466 457.388702 419.322784 378.824402 - 342.588562 306.276794 276.91394 249.378647 226.904892 - 210.842697 199.296768 193.680344 194.732056 198.226746 - 203.523819 216.244873 216.216721 225.553024 177.323059 - 183.042038 192.168259 192.354279 199.702408 199.554184 - 220.624344 249.364014 267.143311 290.80188 277.968079 - 304.796112 356.764923 384.797546 393.085327 420.796387 - 449.979675 - 256.397522 267.221405 299.336426 330.220886 352.619934 - 686.33667 671.216248 645.676941 626.064026 603.815857 - 568.42334 517.358398 477.841492 435.598389 395.669739 - 353.558044 314.874573 282.516205 251.497833 224.404831 - 205.333008 193.284195 189.808212 191.979858 198.634644 - 206.141083 218.594406 223.633148 235.942749 189.077316 - 193.837051 198.278168 197.181641 209.319962 209.27774 - 223.282059 255.279709 281.208344 297.758545 280.471252 - 312.045288 358.941223 395.024811 411.306671 431.298981 - 455.765015 - 260.01828 273.046356 305.147308 342.95697 363.814667 - 699.871765 652.449585 661.204651 660.13855 637.971375 - 597.012024 539.355408 503.875946 463.473022 418.904297 - 372.574097 330.832703 290.105499 255.663925 226.969498 - 201.824554 186.273178 185.976578 193.173431 202.544052 - 212.83963 225.876022 232.614883 245.977356 204.704315 - 204.723053 205.613419 201.560364 218.514481 218.09404 - 233.12767 270.403931 288.065674 299.170898 290.205139 - 311.566376 351.130157 391.627136 423.220184 442.238495 - 463.395447 - 264.676758 279.416321 310.825775 360.168976 386.181305 - 711.139648 688.547668 697.630737 702.539978 686.302917 - 638.642517 567.922668 544.981384 500.107361 448.276642 - 398.89624 354.499023 310.511261 271.144928 236.899185 - 206.014221 178.490005 189.551514 200.14827 211.631683 - 222.893677 236.917831 242.087051 260.449249 213.166672 - 218.91423 218.9944 213.896729 237.471359 -/ - -PERMY --- 1000*221.009415 - 213.478149 221.009415 225.161331 231.829575 235.915298 - 236.097275 237.050827 234.27771 229.76741 226.040436 - 220.698318 214.422226 208.666321 202.842514 196.719864 - 190.950119 185.777328 182.083939 179.437073 175.824875 - 171.589722 168.420273 166.020462 163.573654 160.566193 - 156.219025 151.81102 148.170975 149.130783 156.77475 - 168.524704 181.774841 193.162201 207.258484 226.675964 - 245.304672 260.935516 275.786377 291.267334 306.97171 - 321.899689 339.165924 359.466034 379.967926 403.424957 - 432.466034 - 210.060867 218.139908 225.25412 233.133347 239.930679 - 244.383972 247.811081 247.786514 245.135941 241.526337 - 236.689163 230.596085 224.750076 219.306854 213.635269 - 206.998535 201.37381 197.171021 193.092575 188.363083 - 183.177979 178.900284 175.167953 170.405228 168.067764 - 169.374466 161.808228 158.700302 158.314163 163.872101 - 174.139435 184.817078 196.291092 212.346756 231.808121 - 251.132568 269.277313 283.658325 295.620605 309.586365 - 324.15564 341.030243 363.960938 392.294189 421.900818 - 449.822205 - 206.776764 218.134705 228.563644 239.462051 249.531967 - 287.774597 287.93988 289.312561 289.691223 289.741638 - 287.871765 283.940887 277.661926 271.408295 265.552826 - 257.819672 249.369843 240.519684 230.715744 221.053894 - 212.055542 204.325836 197.445358 190.344589 186.832886 - 187.445755 180.963211 175.595795 184.709671 170.154007 - 176.47937 185.347488 196.612305 211.502655 228.587296 - 246.270523 265.027222 280.966278 295.389099 312.225677 - 330.795319 354.106567 380.584442 404.219055 423.447083 - 439.258789 - 200.880661 218.954315 234.832901 253.987686 266.08786 - 353.846649 347.933441 347.343811 350.695099 353.359344 - 351.791443 346.149384 338.340515 324.259521 306.012543 - 287.73291 270.637024 253.962616 239.161377 227.689484 - 217.889877 209.068573 201.376297 195.549789 189.802963 - 185.052353 181.612915 181.455811 184.918808 173.785477 - 179.608704 188.180023 199.140503 211.834412 224.950562 - 240.714615 259.395508 279.681305 301.434967 322.938385 - 340.246857 356.124146 372.457397 386.563202 399.844238 - 411.555237 - 194.597092 219.759613 242.922745 260.442169 277.259186 - 392.13205 384.295471 384.786896 387.58371 378.173767 - 354.75827 336.763306 322.506409 303.819275 281.872192 - 263.617737 247.999985 234.102386 223.025726 214.736755 - 207.441299 200.635971 194.966293 189.410934 186.629349 - 184.429199 182.912476 184.747208 188.878082 178.94133 - 185.080765 193.544174 203.975006 214.87677 228.76535 - 244.861984 263.05658 282.426361 301.693787 319.309845 - 328.719757 335.033142 346.786255 363.451233 381.600983 - 400.266388 - 194.870285 228.13681 248.340561 260.825928 282.65686 - 394.746155 384.549713 385.016296 389.658051 375.007904 - 347.582397 326.006622 308.488831 286.827423 274.30658 - 264.057312 254.35881 245.420731 236.914093 228.552734 - 219.856033 212.664932 203.313324 197.726593 194.454529 - 192.41684 191.455124 193.45993 196.032928 183.916504 - 189.06163 196.64212 203.882919 213.435287 224.709351 - 238.829849 253.121048 266.026062 280.162231 294.804016 - 305.621002 317.385468 337.537048 357.467712 377.746979 - 398.427277 - 196.865692 226.285019 252.776215 261.985779 274.025116 - 414.224945 386.25827 381.083099 397.713379 388.884216 - 372.581726 354.693481 324.509949 305.23056 292.758057 - 280.867798 269.906952 260.911133 251.894119 241.342026 - 231.626923 216.515305 206.23439 201.781357 198.794968 - 196.546219 195.376709 197.518997 200.945038 186.541794 - 190.450439 192.019958 195.726944 201.099182 208.26532 - 218.612549 229.812988 241.265961 256.163879 272.68335 - 289.733093 314.924713 336.875885 356.945312 377.414978 - 397.509766 - 198.917862 220.024994 249.641815 270.206879 282.688141 - 429.450592 416.829071 429.633911 436.776459 419.35556 - 397.106598 374.985748 350.965759 326.480164 310.984253 - 298.563385 286.040558 275.01355 267.176941 251.872986 - 226.7285 213.851242 208.540482 205.875473 202.097763 - 198.091721 196.519699 198.801605 204.039597 186.043716 - 183.395874 184.48056 185.85379 189.158936 194.677841 - 204.01683 217.13678 230.845825 246.215103 262.611267 - 291.155426 314.501831 334.816925 355.90448 376.948792 - 398.411133 - 203.483353 219.091644 251.98735 282.460571 296.980072 - 476.255341 492.058868 484.548279 466.938843 443.665039 - 419.847961 394.543854 368.101807 345.106476 326.501801 - 307.529022 284.5112 268.211395 257.909302 245.775116 - 233.638031 216.921631 208.983368 209.713287 209.785492 - 200.464325 196.766022 198.939957 207.909012 180.763809 - 178.597107 180.367493 184.32843 186.944733 191.419159 - 201.568054 212.693436 222.710953 235.198242 269.308258 - 295.9086 317.303772 373.633179 402.608582 433.650909 - 465.94397 - 206.975433 223.697678 258.10614 294.168732 314.314728 - 512.123291 525.441223 513.202332 496.377106 473.348083 - 443.948639 411.720886 380.191559 354.892761 329.315308 - 304.529694 285.488281 267.703613 254.450638 240.041672 - 227.992065 214.124603 205.320877 201.452942 201.029861 - 201.120377 203.081757 204.500702 207.024689 184.487366 - 189.18924 187.904663 198.998779 197.565445 196.349136 - 205.13826 214.983673 216.342239 268.764465 299.873596 - 323.59967 350.138672 377.064758 412.340363 451.479828 - 489.699219 - 211.137375 230.872025 266.974701 309.329315 330.402313 - 621.533875 632.96106 628.884583 613.370483 585.818298 - 550.32959 505.84613 463.795807 430.874908 399.341187 - 374.492188 352.94104 328.315277 303.204926 286.660614 - 272.425476 263.45813 257.127838 246.957397 240.242065 - 235.708847 228.790878 225.823242 234.134872 183.34111 - 184.364304 187.513611 190.850723 186.155975 187.039871 - 201.369003 208.210312 233.550919 276.049225 289.522186 - 303.619995 343.647614 378.20224 417.016937 460.992737 - 502.532471 - 218.746338 238.556915 277.702454 321.887421 343.818573 - 646.476074 658.091614 652.839844 638.589233 599.539307 - 553.287598 507.138947 459.402252 421.058105 388.84433 - 355.61441 328.810699 305.91626 284.896606 268.863159 - 258.581421 248.67662 235.434875 228.977722 226.939636 - 228.800705 225.81517 224.592377 224.8918 178.805878 - 182.624344 183.549316 178.670624 174.467239 188.768143 - 200.450943 204.863388 253.218948 273.121613 278.397186 - 301.494629 342.202759 381.86438 416.784546 455.305603 - 493.668488 - 226.633163 249.569687 287.406403 330.049438 355.471161 - 658.432129 672.727356 670.262512 671.494446 612.965271 - 555.336304 506.895996 456.955109 412.333496 379.877899 - 347.819305 319.739502 295.683472 273.922699 256.650116 - 246.996017 237.942429 229.179596 223.973907 220.188095 - 218.223969 217.638077 219.559753 221.037231 177.422348 - 175.969803 175.278748 172.388428 179.154434 187.740494 - 191.558136 206.210007 249.91481 271.012177 280.335815 - 297.413422 338.025238 377.498138 413.087219 448.275574 - 483.416992 - 233.497696 258.799744 297.185333 338.441681 361.140472 - 665.793091 673.141602 663.639343 644.856018 603.608887 - 551.002808 501.210297 452.975708 410.757874 380.250122 - 349.450806 318.629822 291.990448 270.168732 250.880981 - 237.493668 229.376495 223.591354 217.610687 212.726898 - 211.461304 212.858505 207.875305 215.509888 170.41011 - 170.176239 170.324326 175.902359 175.853119 179.04512 - 179.653336 210.538788 250.797729 274.253601 273.15744 - 285.763672 329.894165 377.460144 402.81427 436.568848 - 472.44928 - 238.253967 262.509125 304.754425 343.692352 363.665344 - 667.723267 667.00061 647.531494 623.268311 586.400452 - 542.396912 494.489075 445.20871 406.851074 375.126495 - 342.295471 312.544006 285.46637 264.571136 246.439102 - 231.858093 222.532501 215.978287 211.688004 210.112656 - 209.362579 209.89856 202.464294 212.241684 162.55777 - 166.277161 167.923492 175.776672 177.5289 176.469437 - 180.721146 222.322281 255.41803 272.506805 268.389862 - 292.463257 327.453491 358.862 385.078186 424.32489 - 461.529419 - 240.549728 263.667511 308.731506 346.933472 361.573456 - 668.57489 654.548584 633.195312 608.846558 575.555237 - 534.518738 489.552155 441.771027 403.964722 367.968781 - 336.871216 306.245667 279.090088 258.243774 241.033463 - 226.749039 216.730881 209.376358 206.845596 206.052643 - 206.256622 211.048599 204.171082 209.396423 161.7854 - 166.732971 169.549011 167.580643 182.927643 175.542633 - 185.221756 223.830093 250.404465 273.376984 265.904816 - 296.721741 328.216522 353.238892 381.608429 415.442627 - 452.672577 - 241.986069 263.178131 309.994965 346.56012 357.221466 - 666.705505 648.856506 626.921997 603.265625 573.225281 - 531.109436 486.535217 439.734497 399.609009 373.076141 - 336.490723 302.896973 276.826935 251.628098 233.951401 - 219.953766 209.781586 205.13739 202.244293 202.15242 - 203.280365 210.189209 208.820297 211.935455 167.145874 - 173.024857 174.154221 168.011826 187.714096 179.697205 - 191.582794 224.760574 259.008026 271.983521 268.668091 - 302.688049 337.24762 355.378937 378.504608 411.934357 - 446.988495 - 245.339417 261.666412 305.397125 340.652039 352.828979 - 668.10675 633.776794 620.076233 606.861389 574.186829 - 535.784424 491.229675 451.145203 407.645294 372.265442 - 338.056366 302.808594 276.321442 249.057785 228.833099 - 214.391556 204.219772 199.206802 197.880249 199.336975 - 202.431473 212.598022 212.126541 220.821381 174.084305 - 175.166031 176.690369 175.364853 191.976746 183.100525 - 200.233521 234.748489 257.793365 275.389374 267.691864 - 297.738647 346.227783 367.283356 379.281494 413.347504 - 446.790314 - 251.273544 263.051941 299.030701 332.809723 349.797424 - 673.74469 647.742126 629.993042 611.769531 585.69458 - 545.308411 499.083466 457.388702 419.322784 378.824402 - 342.588562 306.276794 276.91394 249.378647 226.904892 - 210.842697 199.296768 193.680344 194.732056 198.226746 - 203.523819 216.244873 216.216721 225.553024 177.323059 - 183.042038 192.168259 192.354279 199.702408 199.554184 - 220.624344 249.364014 267.143311 290.80188 277.968079 - 304.796112 356.764923 384.797546 393.085327 420.796387 - 449.979675 - 256.397522 267.221405 299.336426 330.220886 352.619934 - 686.33667 671.216248 645.676941 626.064026 603.815857 - 568.42334 517.358398 477.841492 435.598389 395.669739 - 353.558044 314.874573 282.516205 251.497833 224.404831 - 205.333008 193.284195 189.808212 191.979858 198.634644 - 206.141083 218.594406 223.633148 235.942749 189.077316 - 193.837051 198.278168 197.181641 209.319962 209.27774 - 223.282059 255.279709 281.208344 297.758545 280.471252 - 312.045288 358.941223 395.024811 411.306671 431.298981 - 455.765015 - 260.01828 273.046356 305.147308 342.95697 363.814667 - 699.871765 652.449585 661.204651 660.13855 637.971375 - 597.012024 539.355408 503.875946 463.473022 418.904297 - 372.574097 330.832703 290.105499 255.663925 226.969498 - 201.824554 186.273178 185.976578 193.173431 202.544052 - 212.83963 225.876022 232.614883 245.977356 204.704315 - 204.723053 205.613419 201.560364 218.514481 218.09404 - 233.12767 270.403931 288.065674 299.170898 290.205139 - 311.566376 351.130157 391.627136 423.220184 442.238495 - 463.395447 - 264.676758 279.416321 310.825775 360.168976 386.181305 - 711.139648 688.547668 697.630737 702.539978 686.302917 - 638.642517 567.922668 544.981384 500.107361 448.276642 - 398.89624 354.499023 310.511261 271.144928 236.899185 - 206.014221 178.490005 189.551514 200.14827 211.631683 - 222.893677 236.917831 242.087051 260.449249 213.166672 - 218.91423 218.9944 213.896729 237.471359 -/ - -PERMZ --- 1000*22.00 -42.6956298000000 -44.2018830000000 -45.0322662000000 -46.3659150000000 -47.1830596000000 -47.2194550000000 -47.4101654000000 -46.8555420000000 -45.9534820000000 -45.2080872000000 -44.1396636000000 -42.8844452000000 -41.7332642000000 -40.5685028000000 -39.3439728000000 -38.1900238000000 -37.1554656000000 -36.4167878000000 -35.8874146000000 -35.1649750000000 -34.3179444000000 -33.6840546000000 -33.2040924000000 -32.7147308000000 -32.1132386000000 -31.2438050000000 -30.3622040000000 -29.6341950000000 -29.8261566000000 -31.3549500000000 -33.7049408000000 -36.3549682000000 -38.6324402000000 -41.4516968000000 -45.3351928000000 -49.0609344000000 -52.1871032000000 -55.1572754000000 -58.2534668000000 -61.3943420000000 -64.3799378000000 -67.8331848000000 -71.8932068000000 -75.9935852000000 -80.6849914000000 -86.4932068000000 -42.0121734000000 -43.6279816000000 -45.0508240000000 -46.6266694000000 -47.9861358000000 -48.8767944000000 -49.5622162000000 -49.5573028000000 -49.0271882000000 -48.3052674000000 -47.3378326000000 -46.1192170000000 -44.9500152000000 -43.8613708000000 -42.7270538000000 -41.3997070000000 -40.2747620000000 -39.4342042000000 -38.6185150000000 -37.6726166000000 -36.6355958000000 -35.7800568000000 -35.0335906000000 -34.0810456000000 -33.6135528000000 -33.8748932000000 -32.3616456000000 -31.7400604000000 -31.6628326000000 -32.7744202000000 -34.8278870000000 -36.9634156000000 -39.2582184000000 -42.4693512000000 -46.3616242000000 -50.2265136000000 -53.8554626000000 -56.7316650000000 -59.1241210000000 -61.9172730000000 -64.8311280000000 -68.2060486000000 -72.7921876000000 -78.4588378000000 -84.3801636000000 -89.9644410000000 -41.3553528000000 -43.6269410000000 -45.7127288000000 -47.8924102000000 -49.9063934000000 -57.5549194000000 -57.5879760000000 -57.8625122000000 -57.9382446000000 -57.9483276000000 -57.5743530000000 -56.7881774000000 -55.5323852000000 -54.2816590000000 -53.1105652000000 -51.5639344000000 -49.8739686000000 -48.1039368000000 -46.1431488000000 -44.2107788000000 -42.4111084000000 -40.8651672000000 -39.4890716000000 -38.0689178000000 -37.3665772000000 -37.4891510000000 -36.1926422000000 -35.1191590000000 -36.9419342000000 -34.0308014000000 -35.2958740000000 -37.0694976000000 -39.3224610000000 -42.3005310000000 -45.7174592000000 -49.2541046000000 -53.0054444000000 -56.1932556000000 -59.0778198000000 -62.4451354000000 -66.1590638000000 -70.8213134000000 -76.1168884000000 -80.8438110000000 -84.6894166000000 -87.8517578000000 -40.1761322000000 -43.7908630000000 -46.9665802000000 -50.7975372000000 -53.2175720000000 -70.7693298000000 -69.5866882000000 -69.4687622000000 -70.1390198000000 -70.6718688000000 -70.3582886000000 -69.2298768000000 -67.6681030000000 -64.8519042000000 -61.2025086000000 -57.5465820000000 -54.1274048000000 -50.7925232000000 -47.8322754000000 -45.5378968000000 -43.5779754000000 -41.8137146000000 -40.2752594000000 -39.1099578000000 -37.9605926000000 -37.0104706000000 -36.3225830000000 -36.2911622000000 -36.9837616000000 -34.7570954000000 -35.9217408000000 -37.6360046000000 -39.8281006000000 -42.3668824000000 -44.9901124000000 -48.1429230000000 -51.8791016000000 -55.9362610000000 -60.2869934000000 -64.5876770000000 -68.0493714000000 -71.2248292000000 -74.4914794000000 -77.3126404000000 -79.9688476000000 -82.3110474000000 -38.9194184000000 -43.9519226000000 -48.5845490000000 -52.0884338000000 -55.4518372000000 -78.4264100000000 -76.8590942000000 -76.9573792000000 -77.5167420000000 -75.6347534000000 -70.9516540000000 -67.3526612000000 -64.5012818000000 -60.7638550000000 -56.3744384000000 -52.7235474000000 -49.5999970000000 -46.8204772000000 -44.6051452000000 -42.9473510000000 -41.4882598000000 -40.1271942000000 -38.9932586000000 -37.8821868000000 -37.3258698000000 -36.8858398000000 -36.5824952000000 -36.9494416000000 -37.7756164000000 -35.7882660000000 -37.0161530000000 -38.7088348000000 -40.7950012000000 -42.9753540000000 -45.7530700000000 -48.9723968000000 -52.6113160000000 -56.4852722000000 -60.3387574000000 -63.8619690000000 -65.7439514000000 -67.0066284000000 -69.3572510000000 -72.6902466000000 -76.3201966000000 -80.0532776000000 -38.9740570000000 -45.6273620000000 -49.6681122000000 -52.1651856000000 -56.5313720000000 -78.9492310000000 -76.9099426000000 -77.0032592000000 -77.9316102000000 -75.0015808000000 -69.5164794000000 -65.2013244000000 -61.6977662000000 -57.3654846000000 -54.8613160000000 -52.8114624000000 -50.8717620000000 -49.0841462000000 -47.3828186000000 -45.7105468000000 -43.9712066000000 -42.5329864000000 -40.6626648000000 -39.5453186000000 -38.8909058000000 -38.4833680000000 -38.2910248000000 -38.6919860000000 -39.2065856000000 -36.7833008000000 -37.8123260000000 -39.3284240000000 -40.7765838000000 -42.6870574000000 -44.9418702000000 -47.7659698000000 -50.6242096000000 -53.2052124000000 -56.0324462000000 -58.9608032000000 -61.1242004000000 -63.4770936000000 -67.5074096000000 -71.4935424000000 -75.5493958000000 -79.6854554000000 -39.3731384000000 -45.2570038000000 -50.5552430000000 -52.3971558000000 -54.8050232000000 -82.8449890000000 -77.2516540000000 -76.2166198000000 -79.5426758000000 -77.7768432000000 -74.5163452000000 -70.9386962000000 -64.9019898000000 -61.0461120000000 -58.5516114000000 -56.1735596000000 -53.9813904000000 -52.1822266000000 -50.3788238000000 -48.2684052000000 -46.3253846000000 -43.3030610000000 -41.2468780000000 -40.3562714000000 -39.7589936000000 -39.3092438000000 -39.0753418000000 -39.5037994000000 -40.1890076000000 -37.3083588000000 -38.0900878000000 -38.4039916000000 -39.1453888000000 -40.2198364000000 -41.6530640000000 -43.7225098000000 -45.9625976000000 -48.2531922000000 -51.2327758000000 -54.5366700000000 -57.9466186000000 -62.9849426000000 -67.3751770000000 -71.3890624000000 -75.4829956000000 -79.5019532000000 -39.7835724000000 -44.0049988000000 -49.9283630000000 -54.0413758000000 -56.5376282000000 -85.8901184000000 -83.3658142000000 -85.9267822000000 -87.3552918000000 -83.8711120000000 -79.4213196000000 -74.9971496000000 -70.1931518000000 -65.2960328000000 -62.1968506000000 -59.7126770000000 -57.2081116000000 -55.0027100000000 -53.4353882000000 -50.3745972000000 -45.3457000000000 -42.7702484000000 -41.7080964000000 -41.1750946000000 -40.4195526000000 -39.6183442000000 -39.3039398000000 -39.7603210000000 -40.8079194000000 -37.2087432000000 -36.6791748000000 -36.8961120000000 -37.1707580000000 -37.8317872000000 -38.9355682000000 -40.8033660000000 -43.4273560000000 -46.1691650000000 -49.2430206000000 -52.5222534000000 -58.2310852000000 -62.9003662000000 -66.9633850000000 -71.1808960000000 -75.3897584000000 -79.6822266000000 -40.6966706000000 -43.8183288000000 -50.3974700000000 -56.4921142000000 -59.3960144000000 -95.2510682000000 -98.4117736000000 -96.9096558000000 -93.3877686000000 -88.7330078000000 -83.9695922000000 -78.9087708000000 -73.6203614000000 -69.0212952000000 -65.3003602000000 -61.5058044000000 -56.9022400000000 -53.6422790000000 -51.5818604000000 -49.1550232000000 -46.7276062000000 -43.3843262000000 -41.7966736000000 -41.9426574000000 -41.9570984000000 -40.0928650000000 -39.3532044000000 -39.7879914000000 -41.5818024000000 -36.1527618000000 -35.7194214000000 -36.0734986000000 -36.8656860000000 -37.3889466000000 -38.2838318000000 -40.3136108000000 -42.5386872000000 -44.5421906000000 -47.0396484000000 -53.8616516000000 -59.1817200000000 -63.4607544000000 -74.7266358000000 -80.5217164000000 -86.7301818000000 -93.1887940000000 -41.3950866000000 -44.7395356000000 -51.6212280000000 -58.8337464000000 -62.8629456000000 -102.424658200000 -105.088244600000 -102.640466400000 -99.2754212000000 -94.6696166000000 -88.7897278000000 -82.3441772000000 -76.0383118000000 -70.9785522000000 -65.8630616000000 -60.9059388000000 -57.0976562000000 -53.5407226000000 -50.8901276000000 -48.0083344000000 -45.5984130000000 -42.8249206000000 -41.0641754000000 -40.2905884000000 -40.2059722000000 -40.2240754000000 -40.6163514000000 -40.9001404000000 -41.4049378000000 -36.8974732000000 -37.8378480000000 -37.5809326000000 -39.7997558000000 -39.5130890000000 -39.2698272000000 -41.0276520000000 -42.9967346000000 -43.2684478000000 -53.7528930000000 -59.9747192000000 -64.7199340000000 -70.0277344000000 -75.4129516000000 -82.4680726000000 -90.2959656000000 -97.9398438000000 -42.2274750000000 -46.1744050000000 -53.3949402000000 -61.8658630000000 -66.0804626000000 -124.306775000000 -126.592212000000 -125.776916600000 -122.674096600000 -117.163659600000 -110.065918000000 -101.169226000000 -92.7591614000000 -86.1749816000000 -79.8682374000000 -74.8984376000000 -70.5882080000000 -65.6630554000000 -60.6409852000000 -57.3321228000000 -54.4850952000000 -52.6916260000000 -51.4255676000000 -49.3914794000000 -48.0484130000000 -47.1417694000000 -45.7581756000000 -45.1646484000000 -46.8269744000000 -36.6682220000000 -36.8728608000000 -37.5027222000000 -38.1701446000000 -37.2311950000000 -37.4079742000000 -40.2738006000000 -41.6420624000000 -46.7101838000000 -55.2098450000000 -57.9044372000000 -60.7239990000000 -68.7295228000000 -75.6404480000000 -83.4033874000000 -92.1985474000000 -100.506494200000 -43.7492676000000 -47.7113830000000 -55.5404908000000 -64.3774842000000 -68.7637146000000 -129.295214800000 -131.618322800000 -130.567968800000 -127.717846600000 -119.907861400000 -110.657519600000 -101.427789400000 -91.8804504000000 -84.2116210000000 -77.7688660000000 -71.1228820000000 -65.7621398000000 -61.1832520000000 -56.9793212000000 -53.7726318000000 -51.7162842000000 -49.7353240000000 -47.0869750000000 -45.7955444000000 -45.3879272000000 -45.7601410000000 -45.1630340000000 -44.9184754000000 -44.9783600000000 -35.7611756000000 -36.5248688000000 -36.7098632000000 -35.7341248000000 -34.8934478000000 -37.7536286000000 -40.0901886000000 -40.9726776000000 -50.6437896000000 -54.6243226000000 -55.6794372000000 -60.2989258000000 -68.4405518000000 -76.3728760000000 -83.3569092000000 -91.0611206000000 -98.7336976000000 -45.3266326000000 -49.9139374000000 -57.4812806000000 -66.0098876000000 -71.0942322000000 -131.686425800000 -134.545471200000 -134.052502400000 -134.298889200000 -122.593054200000 -111.067260800000 -101.379199200000 -91.3910218000000 -82.4666992000000 -75.9755798000000 -69.5638610000000 -63.9479004000000 -59.1366944000000 -54.7845398000000 -51.3300232000000 -49.3992034000000 -47.5884858000000 -45.8359192000000 -44.7947814000000 -44.0376190000000 -43.6447938000000 -43.5276154000000 -43.9119506000000 -44.2074462000000 -35.4844696000000 -35.1939606000000 -35.0557496000000 -34.4776856000000 -35.8308868000000 -37.5480988000000 -38.3116272000000 -41.2420014000000 -49.9829620000000 -54.2024354000000 -56.0671630000000 -59.4826844000000 -67.6050476000000 -75.4996276000000 -82.6174438000000 -89.6551148000000 -96.6833984000000 -46.6995392000000 -51.7599488000000 -59.4370666000000 -67.6883362000000 -72.2280944000000 -133.158618200000 -134.628320400000 -132.727868600000 -128.971203600000 -120.721777400000 -110.200561600000 -100.242059400000 -90.5951416000000 -82.1515748000000 -76.0500244000000 -69.8901612000000 -63.7259644000000 -58.3980896000000 -54.0337464000000 -50.1761962000000 -47.4987336000000 -45.8752990000000 -44.7182708000000 -43.5221374000000 -42.5453796000000 -42.2922608000000 -42.5717010000000 -41.5750610000000 -43.1019776000000 -34.0820220000000 -34.0352478000000 -34.0648652000000 -35.1804718000000 -35.1706238000000 -35.8090240000000 -35.9306672000000 -42.1077576000000 -50.1595458000000 -54.8507202000000 -54.6314880000000 -57.1527344000000 -65.9788330000000 -75.4920288000000 -80.5628540000000 -87.3137696000000 -94.4898560000000 -47.6507934000000 -52.5018250000000 -60.9508850000000 -68.7384704000000 -72.7330688000000 -133.544653400000 -133.400122000000 -129.506298800000 -124.653662200000 -117.280090400000 -108.479382400000 -98.8978150000000 -89.0417420000000 -81.3702148000000 -75.0252990000000 -68.4590942000000 -62.5088012000000 -57.0932740000000 -52.9142272000000 -49.2878204000000 -46.3716186000000 -44.5065002000000 -43.1956574000000 -42.3376008000000 -42.0225312000000 -41.8725158000000 -41.9797120000000 -40.4928588000000 -42.4483368000000 -32.5115540000000 -33.2554322000000 -33.5846984000000 -35.1553344000000 -35.5057800000000 -35.2938874000000 -36.1442292000000 -44.4644562000000 -51.0836060000000 -54.5013610000000 -53.6779724000000 -58.4926514000000 -65.4906982000000 -71.7724000000000 -77.0156372000000 -84.8649780000000 -92.3058838000000 -48.1099456000000 -52.7335022000000 -61.7463012000000 -69.3866944000000 -72.3146912000000 -133.714978000000 -130.909716800000 -126.639062400000 -121.769311600000 -115.111047400000 -106.903747600000 -97.9104310000000 -88.3542054000000 -80.7929444000000 -73.5937562000000 -67.3742432000000 -61.2491334000000 -55.8180176000000 -51.6487548000000 -48.2066926000000 -45.3498078000000 -43.3461762000000 -41.8752716000000 -41.3691192000000 -41.2105286000000 -41.2513244000000 -42.2097198000000 -40.8342164000000 -41.8792846000000 -32.3570800000000 -33.3465942000000 -33.9098022000000 -33.5161286000000 -36.5855286000000 -35.1085266000000 -37.0443512000000 -44.7660186000000 -50.0808930000000 -54.6753968000000 -53.1809632000000 -59.3443482000000 -65.6433044000000 -70.6477784000000 -76.3216858000000 -83.0885254000000 -90.5345154000000 -48.3972138000000 -52.6356262000000 -61.9989930000000 -69.3120240000000 -71.4442932000000 -133.341101000000 -129.771301200000 -125.384399400000 -120.653125000000 -114.645056200000 -106.221887200000 -97.3070434000000 -87.9468994000000 -79.9218018000000 -74.6152282000000 -67.2981446000000 -60.5793946000000 -55.3653870000000 -50.3256196000000 -46.7902802000000 -43.9907532000000 -41.9563172000000 -41.0274780000000 -40.4488586000000 -40.4304840000000 -40.6560730000000 -42.0378418000000 -41.7640594000000 -42.3870910000000 -33.4291748000000 -34.6049714000000 -34.8308442000000 -33.6023652000000 -37.5428192000000 -35.9394410000000 -38.3165588000000 -44.9521148000000 -51.8016052000000 -54.3967042000000 -53.7336182000000 -60.5376098000000 -67.4495240000000 -71.0757874000000 -75.7009216000000 -82.3868714000000 -89.3976990000000 -49.0678834000000 -52.3332824000000 -61.0794250000000 -68.1304078000000 -70.5657958000000 -133.621350000000 -126.755358800000 -124.015246600000 -121.372277800000 -114.837365800000 -107.156884800000 -98.2459350000000 -90.2290406000000 -81.5290588000000 -74.4530884000000 -67.6112732000000 -60.5617188000000 -55.2642884000000 -49.8115570000000 -45.7666198000000 -42.8783112000000 -40.8439544000000 -39.8413604000000 -39.5760498000000 -39.8673950000000 -40.4862946000000 -42.5196044000000 -42.4253082000000 -44.1642762000000 -34.8168610000000 -35.0332062000000 -35.3380738000000 -35.0729706000000 -38.3953492000000 -36.6201050000000 -40.0467042000000 -46.9496978000000 -51.5586730000000 -55.0778748000000 -53.5383728000000 -59.5477294000000 -69.2455566000000 -73.4566712000000 -75.8562988000000 -82.6695008000000 -89.3580628000000 -50.2547088000000 -52.6103882000000 -59.8061402000000 -66.5619446000000 -69.9594848000000 -134.748938000000 -129.548425200000 -125.998608400000 -122.353906200000 -117.138916000000 -109.061682200000 -99.8166932000000 -91.4777404000000 -83.8645568000000 -75.7648804000000 -68.5177124000000 -61.2553588000000 -55.3827880000000 -49.8757294000000 -45.3809784000000 -42.1685394000000 -39.8593536000000 -38.7360688000000 -38.9464112000000 -39.6453492000000 -40.7047638000000 -43.2489746000000 -43.2433442000000 -45.1106048000000 -35.4646118000000 -36.6084076000000 -38.4336518000000 -38.4708558000000 -39.9404816000000 -39.9108368000000 -44.1248688000000 -49.8728028000000 -53.4286622000000 -58.1603760000000 -55.5936158000000 -60.9592224000000 -71.3529846000000 -76.9595092000000 -78.6170654000000 -84.1592774000000 -89.9959350000000 -51.2795044000000 -53.4442810000000 -59.8672852000000 -66.0441772000000 -70.5239868000000 -137.267334000000 -134.243249600000 -129.135388200000 -125.212805200000 -120.763171400000 -113.684668000000 -103.471679600000 -95.5682984000000 -87.1196778000000 -79.1339478000000 -70.7116088000000 -62.9749146000000 -56.5032410000000 -50.2995666000000 -44.8809662000000 -41.0666016000000 -38.6568390000000 -37.9616424000000 -38.3959716000000 -39.7269288000000 -41.2282166000000 -43.7188812000000 -44.7266296000000 -47.1885498000000 -37.8154632000000 -38.7674102000000 -39.6556336000000 -39.4363282000000 -41.8639924000000 -41.8555480000000 -44.6564118000000 -51.0559418000000 -56.2416688000000 -59.5517090000000 -56.0942504000000 -62.4090576000000 -71.7882446000000 -79.0049622000000 -82.2613342000000 -86.2597962000000 -91.1530030000000 -52.0036560000000 -54.6092712000000 -61.0294616000000 -68.5913940000000 -72.7629334000000 -139.974353000000 -130.489917000000 -132.240930200000 -132.027710000000 -127.594275000000 -119.402404800000 -107.871081600000 -100.775189200000 -92.6946044000000 -83.7808594000000 -74.5148194000000 -66.1665406000000 -58.0210998000000 -51.1327850000000 -45.3938996000000 -40.3649108000000 -37.2546356000000 -37.1953156000000 -38.6346862000000 -40.5088104000000 -42.5679260000000 -45.1752044000000 -46.5229766000000 -49.1954712000000 -40.9408630000000 -40.9446106000000 -41.1226838000000 -40.3120728000000 -43.7028962000000 -43.6188080000000 -46.6255340000000 -54.0807862000000 -57.6131348000000 -59.8341796000000 -58.0410278000000 -62.3132752000000 -70.2260314000000 -78.3254272000000 -84.6440368000000 -88.4476990000000 -92.6790894000000 -52.9353516000000 -55.8832642000000 -62.1651550000000 -72.0337952000000 -77.2362610000000 -142.227929600000 -137.709533600000 -139.526147400000 -140.507995600000 -137.260583400000 -127.728503400000 -113.584533600000 -108.996276800000 -100.021472200000 -89.6553284000000 -79.7792480000000 -70.8998046000000 -62.1022522000000 -54.2289856000000 -47.3798370000000 -41.2028442000000 -35.6980010000000 -37.9103028000000 -40.0296540000000 -42.3263366000000 -44.5787354000000 -47.3835662000000 -48.4174102000000 -52.0898498000000 -42.6333344000000 -43.7828460000000 -43.7988800000000 -42.7793458000000 -47.4942718000000 -/ - --------------------------------------------------------------------------------- - -PROPS --------------------------------------------------------------------------------- --- --- Input of fluid properties and relative permeability --- ---------------------------------------------------------- - - -SWOF --- Sw Krw Kro Pc - 0.000000 0.000000 1.00000 3.75633 - 0.0500000 0.000860000 0.847820 1.86981 - 0.100000 0.00263000 0.697460 1.23731 - 0.150000 0.00524000 0.557170 0.91821 - 0.200000 0.00877000 0.432860 0.72451 - 0.250000 0.0133800 0.327570 0.59341 - 0.300000 0.0192700 0.241770 0.49811 - 0.350000 0.0267200 0.174150 0.42511 - 0.400000 0.0360800 0.122370 0.36691 - 0.450000 0.0478100 0.0837400 0.31911 - 0.500000 0.0625000 0.0556500 0.27881 - 0.550000 0.0809000 0.0357200 0.24401 - 0.600000 0.103940 0.0219900 0.21351 - 0.650000 0.132770 0.0128400 0.18631 - 0.700000 0.168690 0.00699000 0.16161 - 0.750000 0.213020 0.00346000 0.13901 - 0.800000 0.266670 0.00149000 0.11801 - 0.850000 0.329180 0.000510000 0.09831 - 0.900000 0.397060 0.000120000 0.07961 - 0.950000 0.461030 0.00001 0.06161 - 1.00000 0.500000 0.000000 0.04408 -/ - -SGOF ---#NAME? Krg Kro Pc - 0.000000 0.000000 1.00000 0.000000 - 0.0500000 0.00165500 0.806888 0.000000 - 0.100000 0.00691300 0.633562 0.000000 - 0.150000 0.0162130 0.485506 0.000000 - 0.200000 0.0299900 0.364043 0.000000 - 0.250000 0.0486550 0.267589 0.000000 - 0.300000 0.0725730 0.192992 0.000000 - 0.350000 0.102046 0.136554 0.000000 - 0.400000 0.137287 0.0946710 0.000000 - 0.450000 0.178402 0.0641510 0.000000 - 0.500000 0.225368 0.0423240 0.000000 - 0.550000 0.278030 0.0270350 0.000000 - 0.600000 0.336093 0.0165860 0.000000 - 0.650000 0.399135 0.00966200 0.000000 - 0.700000 0.466631 0.00525400 0.000000 - 0.750000 0.538000 0.00259700 0.000000 - 0.800000 0.612665 0.00111700 0.000000 - 0.850000 0.690169 0.000384000 0.000000 - 0.900000 0.770395 0.000088 0.000000 - 0.950000 0.854218 0.000007 0.000000 - 1.00000 0.950000 0.000000 0.000000 -/ - -PVTW - 277.0 1.038 4.67E-5 0.318 0.0 / - -ROCK - 277.0 4.84E-5 / - -DENSITY - 860.04 1033.0 0.853 / Justert 22/7 - ---THE GAS PVT DATA------------------------------------------------- - ---FOR EACH GAS PRESSURE SPECIFIED IN THE FIRST COLUMN ( 30,60,..) ---AT LEAST ONE OIL/GAS RATIO (RV) VALUE IS SPECIFIED (0.000132,0.0..) ---FOR WHICH VAPOUR FORMATION VALUES AND VISCOSITIES ARE GIVEN - ---THE FIRST RV VALUE FOR A GIVEN PRESSURE IS ASSUMED TO BE THE ---SATURATED VALUE ( IE AT THE DEW POINT ) - ---ANY SUBSEQUENT RV VALUES ARE FOR UNDERSATURATED STATES - --- PVDG --- 30 0.04234 0.01344 --- 530 0.003868 0.02935 --- / - -PVTG - --- PRESSURE RSG B-GAS VISCOSITY --- BAR (CP) - - 50.00 0.00000497 0.024958 0.01441 - 0.00000248 0.024958 0.01440 - 0.00000000 0.024958 0.01440 / - - 70.00 0.00000521 0.017639 0.01491 - 0.00000261 0.017641 0.01490 - 0.00000000 0.017643 0.01490 / - - 90.00 0.00000627 0.013608 0.01547 - 0.00000313 0.013611 0.01546 - 0.00000000 0.013615 0.01544 / - - 110.00 0.00000798 0.011072 0.01609 - 0.00000399 0.011076 0.01607 - 0.00000000 0.011081 0.01605 / - - 130.00 0.00001041 0.009340 0.01677 - 0.00000520 0.009346 0.01674 - 0.00000000 0.009352 0.01671 / - - 150.00 0.00001365 0.008092 0.01752 - 0.00000683 0.008099 0.01748 - 0.00000000 0.008106 0.01743 / - - 170.00 0.00001786 0.007156 0.01834 - 0.00000893 0.007164 0.01827 - 0.00000000 0.007172 0.01819 / - - 190.00 0.00002316 0.006433 0.01923 - 0.00001158 0.006442 0.01912 - 0.00000000 0.006451 0.01900 / - - 210.00 0.00002972 0.005861 0.02019 - 0.00001486 0.005871 0.02001 - 0.00000000 0.005881 0.01984 / - - 230.00 0.00003767 0.005402 0.02121 - 0.00001883 0.005412 0.02095 - 0.00000000 0.005422 0.02071 / - - 250.80 0.00004756 0.005013 0.02234 - 0.00002378 0.005022 0.02197 - 0.00000000 0.005032 0.02162 / - - 268.42 0.00005757 0.004737 0.02335 - 0.00002878 0.004746 0.02287 - 0.00000000 0.004754 0.02240 / - - 285.33 0.00006853 0.004511 0.02438 - 0.00003427 0.004518 0.02375 - 0.00000000 0.004525 0.02315 / - - 301.59 0.00008041 0.004323 0.02542 - 0.00004020 0.004327 0.02463 - 0.00000000 0.004332 0.02387 / - - 317.23 0.00009313 0.004165 0.02648 - 0.00004657 0.004166 0.02549 - 0.00000000 0.004169 0.02456 / - - 332.29 0.00010668 0.004031 0.02755 - 0.00005334 0.004029 0.02634 - 0.00000000 0.004028 0.02522 / - - 346.80 0.00012100 0.003917 0.02863 - 0.00006050 0.003911 0.02719 - 0.00000000 0.003906 0.02585 / - - 360.80 0.00013607 0.003819 0.02974 - 0.00006803 0.003808 0.02803 - 0.00000000 0.003799 0.02645 / - - 374.31 0.00015188 0.003735 0.03087 - 0.00007594 0.003718 0.02887 - 0.00000000 0.003705 0.02703 / - - 387.36 0.00016843 0.003662 0.03202 - 0.00008421 0.003639 0.02970 - 0.00000000 0.003621 0.02758 / - - 399.99 0.00018571 0.003598 0.03320 - 0.00009286 0.003570 0.03053 - 0.00000000 0.003545 0.02810 / - - 412.21 0.00020375 0.003543 0.03442 - 0.00010188 0.003508 0.03137 - 0.00000000 0.003477 0.02861 / - - 424.05 0.00022256 0.003496 0.03566 - 0.00011128 0.003453 0.03220 - 0.00000000 0.003416 0.02909 / - - 435.53 0.00024218 0.003454 0.03695 - 0.00012109 0.003404 0.03305 - 0.00000000 0.003360 0.02956 / - - 446.68 0.00026266 0.003419 0.03828 - 0.00013133 0.003360 0.03390 - 0.00000000 0.003309 0.03000 / - - 457.51 0.00028404 0.003388 0.03967 - 0.00014202 0.003320 0.03477 - 0.00000000 0.003262 0.03043 / - - 468.04 0.00030639 0.003362 0.04110 - 0.00015319 0.003285 0.03566 - 0.00000000 0.003218 0.03085 / - - 478.30 0.00032980 0.003341 0.04261 - 0.00016490 0.003253 0.03656 - 0.00000000 0.003178 0.03125 / - - 488.30 0.00035436 0.003323 0.04418 - 0.00017718 0.003225 0.03749 - 0.00000000 0.003140 0.03164 / - - 498.06 0.00038020 0.003310 0.04583 - 0.00019010 0.003200 0.03845 - 0.00000000 0.003105 0.03202 / - - 507.59 0.00040745 0.003300 0.04758 - 0.00020373 0.003178 0.03944 - 0.00000000 0.003073 0.03238 / - - 516.92 0.00043630 0.003293 0.04943 - 0.00021815 0.003158 0.04048 - 0.00000000 0.003042 0.03273 / - - 526.06 0.00046694 0.003290 0.05141 - 0.00023347 0.003141 0.04156 - 0.00000000 0.003013 0.03308 / - - 535.02 0.00049963 0.003291 0.05353 - 0.00024981 0.003126 0.04271 - 0.00000000 0.002986 0.03342 / - - 543.83 0.00053469 0.003295 0.05582 - 0.00026734 0.003114 0.04393 - 0.00000000 0.002960 0.03374 / - - 552.49 0.00057251 0.003303 0.05830 - 0.00028625 0.003105 0.04523 - 0.00000000 0.002935 0.03407 / - - 561.04 0.00061359 0.003315 0.06103 - 0.00030679 0.003098 0.04664 - 0.00000000 0.002912 0.03438 / - - 569.48 0.00065855 0.003332 0.06405 - 0.00032928 0.003093 0.04818 - 0.00000000 0.002890 0.03469 / - - 577.82 0.00070820 0.003354 0.06744 - 0.00035410 0.003092 0.04988 - 0.00000000 0.002868 0.03500 / - - 586.09 0.00076355 0.003382 0.07127 - 0.00038178 0.003094 0.05178 - 0.00000000 0.002847 0.03530 / - - 594.29 0.00082592 0.003418 0.07567 - 0.00041296 0.003099 0.05394 - 0.00000000 0.002828 0.03560 / -/ - ---THE OIL PVT DATA------------------------------------------------ - ---FOR EACH GAS/OIL RATIO (RS) VALUE (2,5...), AT LEAST ONE ---OIL PRESSURE VALUE MUST BE SPECIFIED (20.0,50.0...) ---FOR WHICH SOLUTION FORMATION VALUES AND VISCOSITIES ARE GIVEN - ---THE FIRST PRESSURE VALUE IS ASSUMED TO BE THE SATURATED (BUBBLE ---POINT) PRESSURE FOR THAT RS VALUE. - ---ANY SUBSEQUENT PRESSURES ARE FOR UNDERSATURATED STATES - --- PVDO --- 20.0 1.0100001 1.000 --- 900.7 1.01 1.000 --- / - -PVTO - --- RSO PRESSURE B-OIL VISCOSITY --- (BAR) (CP) - - 20.59 50.00 1.10615 1.180 - 75.00 1.10164 1.247 - 100.00 1.09744 1.315 - 125.00 1.09351 1.384 - 150.00 1.08984 1.453 / - - 28.19 70.00 1.12522 1.066 - 95.00 1.12047 1.124 - 120.00 1.11604 1.182 - 145.00 1.11191 1.241 - 170.00 1.10804 1.300 / - - 36.01 90.00 1.14458 0.964 - 115.00 1.13959 1.014 - 140.00 1.13494 1.064 - 165.00 1.13060 1.115 - 190.00 1.12653 1.166 / - - 44.09 110.00 1.16437 0.880 - 135.00 1.15915 0.924 - 160.00 1.15428 0.968 - 185.00 1.14973 1.012 - 210.00 1.14547 1.056 / - - 52.46 130.00 1.18467 0.805 - 155.00 1.17921 0.843 - 180.00 1.17413 0.882 - 205.00 1.16937 0.920 - 230.00 1.16491 0.959 / - - 61.13 150.00 1.20555 0.746 - 175.00 1.19985 0.780 - 200.00 1.19454 0.814 - 225.00 1.18958 0.849 - 250.00 1.18492 0.883 / - - 70.14 170.00 1.22704 0.698 - 195.00 1.22111 0.729 - 220.00 1.21558 0.759 - 245.00 1.21040 0.790 - 270.00 1.20555 0.821 / - - 79.50 190.00 1.24922 0.658 - 215.00 1.24305 0.686 - 240.00 1.23729 0.714 - 265.00 1.23190 0.742 - 290.00 1.22685 0.770 / - - 89.24 210.00 1.27214 0.637 - 235.00 1.26573 0.664 - 260.00 1.25974 0.693 - 285.00 1.25414 0.725 - 310.00 1.24888 0.760 / - - 99.39 230.00 1.29586 0.622 - 255.00 1.28921 0.641 - 280.00 1.28300 0.661 - 305.00 1.27718 0.680 - 330.00 1.27171 0.699 / - - 110.41 250.80 1.32148 0.610 - 275.80 1.31457 0.628 - 300.80 1.30812 0.647 - 325.80 1.30207 0.665 - 350.80 1.29638 0.682 / - - 120.32 268.42 1.34449 0.576 - 293.42 1.33735 0.593 - 318.42 1.33068 0.609 - 343.42 1.32442 0.626 - 368.42 1.31853 0.642 / - - 130.23 285.33 1.36737 0.5335 - 310.33 1.36001 0.5487 - 335.33 1.35313 0.5638 - 360.33 1.34667 0.5787 - 385.33 1.34059 0.5934 / - - 140.12 301.59 1.39015 0.4956 - 326.59 1.38257 0.5094 - 351.59 1.37548 0.5230 - 376.59 1.36882 0.5365 - 401.59 1.36255 0.5498 / - - 150.01 317.23 1.41282 0.4614 - 342.23 1.40503 0.4739 - 367.23 1.39773 0.4863 - 392.23 1.39088 0.4986 - 417.23 1.38443 0.5107 / - - 159.89 332.29 1.43539 0.43042 - 357.29 1.42739 0.44183 - 382.29 1.41990 0.45312 - 407.29 1.41286 0.46430 - 432.29 1.40622 0.47537 / - - 169.76 346.80 1.45788 0.41191 - 371.80 1.44967 0.42260 - 396.80 1.44198 0.43318 - 421.80 1.43475 0.44365 - 446.80 1.42794 0.45402 / - - 179.63 360.80 1.48028 0.39503 - 385.80 1.47187 0.40508 - 410.80 1.46398 0.41502 - 435.80 1.45657 0.42487 - 460.80 1.44958 0.43461 / - - 189.48 374.31 1.50260 0.37959 - 399.31 1.49399 0.38907 - 424.31 1.48591 0.39845 - 449.31 1.47832 0.40773 - 474.31 1.47116 0.41692 / - - 199.34 387.36 1.52484 0.36543 - 412.36 1.51603 0.37439 - 437.36 1.50777 0.38326 - 462.36 1.50000 0.39203 - 487.36 1.49267 0.40072 / - - 209.18 399.99 1.54700 0.35239 - 424.99 1.53800 0.36089 - 449.99 1.52956 0.36929 - 474.99 1.52161 0.37762 - 499.99 1.51411 0.38585 / - - 219.02 412.21 1.56910 0.34035 - 437.21 1.55991 0.34843 - 462.21 1.55128 0.35642 - 487.21 1.54316 0.36433 - 512.21 1.53549 0.37216 / - - 228.85 424.05 1.59112 0.32921 - 449.05 1.58174 0.33691 - 474.05 1.57294 0.34453 - 499.05 1.56464 0.35206 - 524.05 1.55681 0.35952 / - - 238.67 435.53 1.61307 0.31888 - 460.53 1.60351 0.32623 - 485.53 1.59453 0.33350 - 510.53 1.58606 0.34070 - 535.53 1.57807 0.34782 / - - 248.48 446.68 1.63496 0.30927 - 471.68 1.62522 0.31630 - 496.68 1.61606 0.32326 - 521.68 1.60743 0.33014 - 546.68 1.59927 0.33695 / - - 258.29 457.51 1.65678 0.30032 - 482.51 1.64686 0.30706 - 507.51 1.63753 0.31373 - 532.51 1.62873 0.32032 - 557.51 1.62042 0.32685 / - - 268.09 468.04 1.67853 0.29196 - 493.04 1.66843 0.29843 - 518.04 1.65893 0.30483 - 543.04 1.64997 0.31117 - 568.04 1.64150 0.31743 / - - 277.89 478.30 1.70022 0.28414 - 503.30 1.68994 0.29037 - 528.30 1.68028 0.29652 - 553.30 1.67116 0.30261 - 578.30 1.66253 0.30864 / - - 287.68 488.30 1.72184 0.27681 - 513.30 1.71139 0.28281 - 538.30 1.70156 0.28874 - 563.30 1.69228 0.29460 - 588.30 1.68350 0.30040 / - - 297.46 498.06 1.74339 0.26994 - 523.06 1.73277 0.27572 - 548.06 1.72278 0.28144 - 573.06 1.71334 0.28709 - 598.06 1.70442 0.29269 / - - 307.23 507.59 1.76487 0.26347 - 532.59 1.75409 0.26906 - 557.59 1.74393 0.27458 - 582.59 1.73434 0.28004 - 607.59 1.72527 0.28544 / - - 317.00 516.92 1.78628 0.25738 - 541.92 1.77533 0.26279 - 566.92 1.76502 0.26812 - 591.92 1.75528 0.27340 - 616.92 1.74606 0.27863 / - - 326.76 526.06 1.80761 0.25165 - 551.06 1.79651 0.25688 - 576.06 1.78604 0.26204 - 601.06 1.77615 0.26716 - 626.06 1.76679 0.27221 / - - 336.51 535.02 1.82887 0.24623 - 560.02 1.81761 0.25130 - 585.02 1.80699 0.25631 - 610.02 1.79696 0.26126 - 635.02 1.78746 0.26616 / - - 346.26 543.83 1.85005 0.24112 - 568.83 1.83864 0.24603 - 593.83 1.82787 0.25089 - 618.83 1.81770 0.25570 - 643.83 1.80806 0.26045 / - - 356.00 552.49 1.87115 0.23628 - 577.49 1.85959 0.24105 - 602.49 1.84868 0.24577 - 627.49 1.83836 0.25043 - 652.49 1.82858 0.25505 / - - 365.73 561.04 1.89217 0.23170 - 586.04 1.88046 0.23634 - 611.04 1.86940 0.24092 - 636.04 1.85895 0.24546 - 661.04 1.84904 0.24994 / - - 375.46 569.48 1.91309 0.22736 - 594.48 1.90124 0.23187 - 619.48 1.89004 0.23633 - 644.48 1.87946 0.24074 - 669.48 1.86942 0.24510 / - - 385.18 577.82 1.93391 0.22325 - 602.82 1.92192 0.22764 - 627.82 1.91060 0.23198 - 652.82 1.89988 0.23627 - 677.82 1.88971 0.24052 / - - 394.89 586.09 1.95464 0.21934 - 611.09 1.94252 0.22362 - 636.09 1.93106 0.22785 - 661.09 1.92021 0.23204 - 686.09 1.90993 0.23617 / - - 404.60 594.29 1.97527 0.21564 - 619.29 1.96301 0.21981 - 644.29 1.95143 0.22393 - 669.29 1.94046 0.22801 - 694.29 1.93005 0.23204 / -/ -NOECHO - --- INCLUDE --- 'POLY.inc' / - ---------------------------------------------------------------------------------- -SOLUTION - - -RESTART - 'restart/MSW' 10 / - -RPTRST -BASIC=2 KRO KRW KRG SWAT PRES SGAS SOIL / - -RPTSOL -FIP=3 SWAT / - - -SUMMARY -ALL - - - -SCHEDULE - - -RPTSCHED -WELSPECS WELLS / - -SKIPREST - -DATES - 8 'FEB' 2013 / -/ - -TSTEP -4*200 -25*102 -/ diff --git a/ThirdParty/custom-opm-common/opm-common/tests/PYACTION.DATA b/ThirdParty/custom-opm-common/opm-common/tests/PYACTION.DATA deleted file mode 100644 index c88f219b41..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/PYACTION.DATA +++ /dev/null @@ -1,5 +0,0 @@ -SCHEDULE - -PYACTION - ACT1 Single / - act1.py / \ No newline at end of file diff --git a/ThirdParty/custom-opm-common/opm-common/tests/RESTART_SIM.DATA b/ThirdParty/custom-opm-common/opm-common/tests/RESTART_SIM.DATA deleted file mode 100644 index e900cc7d46..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/RESTART_SIM.DATA +++ /dev/null @@ -1,131 +0,0 @@ -RUNSPEC -OIL -GAS -WATER -DISGAS -VAPOIL -UNIFOUT -UNIFIN -DIMENS - 10 10 10 / - -START -- 0 -1 NOV 1979 / - -WELLDIMS --- Item 1: NWMAX (Maximum number of wells in model) --- Item 2: NCWMAX (Maximum number of connections per well) --- Item 3: NGMAX (Maximum number of groups in model--excluding FIELD) --- Item 4: NWGMAX (Maximum number of wells or child groups per group) --- NWMAX NCWMAX NGMAX NWGMAX - 6 3 1 6 -/ - -GRID -DXV -10*0.25 / -DYV -10*0.25 / -DZV -10*0.25 / -TOPS -100*0.25 / - -PORO -1000*0.2 / - -SOLUTION -RESTART -BASE_SIM 1/ - - -SCHEDULE -SKIPREST -RPTRST -BASIC=1 -/ -WELSPECS - 'OP_1' 'OP' 9 9 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / - 'OP_2' 'OP' 9 9 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / -/ -COMPDAT - 'OP_1' 9 9 1 1 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / - 'OP_2' 9 9 2 2 'OPEN' 1* 46.825 0.311 4332.346 1* 1* 'X' 22.123 / - 'OP_1' 9 9 3 3 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / -/ -WCONPROD - 'OP_1' 'OPEN' 'ORAT' 20000 4* 1000 / -/ -WCONINJE - 'OP_2' 'GAS' 'OPEN' 'RATE' 100 200 400 / -/ - -DATES -- 1 - 20 JAN 2011 / -/ -WELSPECS - 'OP_3' 'OP' 9 9 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / -/ -COMPDAT - 'OP_3' 9 9 1 1 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / -/ -WCONPROD - 'OP_3' 'OPEN' 'ORAT' 20000 4* 1000 / -/ - -DATES -- 2 - 15 JUN 2013 / -/ -COMPDAT - 'OP_2' 9 9 3 9 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / - 'OP_1' 9 9 7 7 'SHUT' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / -/ - -DATES -- 3 - 22 APR 2014 / -/ -WELSPECS - 'OP_4' 'OP' 9 9 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / -/ -COMPDAT - 'OP_4' 9 9 3 9 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / - 'OP_3' 9 9 3 9 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / -/ -WCONPROD - 'OP_4' 'OPEN' 'ORAT' 20000 4* 1000 / -/ - -DATES -- 4 - 30 AUG 2014 / -/ -WELSPECS - 'OP_5' 'OP' 9 9 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / -/ -COMPDAT - 'OP_5' 9 9 3 9 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / -/ -WCONPROD - 'OP_5' 'OPEN' 'ORAT' 20000 4* 1000 / -/ - -DATES -- 5 - 15 SEP 2014 / -/ -WCONPROD - 'OP_3' 'SHUT' 'ORAT' 20000 4* 1000 / -/ - -DATES -- 6 - 9 OCT 2014 / -/ -WELSPECS - 'OP_6' 'OP' 9 9 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / -/ -COMPDAT - 'OP_6' 9 9 3 9 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / -/ -WCONPROD - 'OP_6' 'OPEN' 'ORAT' 20000 4* 1000 / -/ -TSTEP -- 7 -10 / diff --git a/ThirdParty/custom-opm-common/opm-common/tests/SOFR_TEST.DATA b/ThirdParty/custom-opm-common/opm-common/tests/SOFR_TEST.DATA deleted file mode 100644 index 92ce79cff4..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/SOFR_TEST.DATA +++ /dev/null @@ -1,266 +0,0 @@ --- Most of this simulation case is trivial. Its only purpose is to --- define a moderately relevant setup of a multi-segmented well --- ('PROD01') to exercise the handling of segment related summary --- vectors. --- --- Multi-segment well setup sourced from 'opm-tests/msw_3d_hfa/3D_MSW.DATA' - -RUNSPEC - -TITLE - 'Test Case for Segment Summary Vectors' / - -DIMENS - 10 10 10 / - -OIL -WATER -GAS -METRIC - -UNIFIN -UNIFOUT - -WELLDIMS --- MAX CONN WELLS IN --- WELLS PR WELL GROUPS GROUP - 2 100 2 1 / - -EQLDIMS - 1 / - -WSEGDIMS - 2 100 10 10 / - -TABDIMS -/ - --- ===================================== -GRID - -DXV - 10*200 / - -DYV - 10*200 / - -DZV - 10*25 / - -TOPS - 100*2500 / - -PORO - 1000*0.3 / - -PERMX - 1000*100 / - -COPY - 'PERMX' 'PERMY' / - 'PERMX' 'PERMZ' / -/ - -MULTIPLY - 'PERMZ' 0.1 / -/ - --- ===================================== -PROPS - -SWOF - 0 0 1 0 - 1 1 0 0 / - -SGOF - 0 0 1 0 - 1 1 0 0 / - -PVTW - 100 1.0 1.0E-5 0.2 0.0 / - -PVDO - 1.01325 1.0 1.0 - 800.0 0.9999 1.0001 / - -PVDG - 1.01325 1.0 0.01 - 800.0 0.01 0.02 / - --- ===================================== -SOLUTION - -EQUIL --- Datum P woc Pc goc Pc - 2525. 270 2700 0.0 2525.0 0.0 / - --- ===================================== -SUMMARY - --- ALL - --- SUMTHIN is here to verify that the explicit keyword white-listing --- in SummaryConfig.cpp works correctly. We should not treat SUMTHIN --- as a segment-related summary vector. -SUMTHIN - 1 / - -SOFR - 'PROD01' 1 / - 'PROD01' 10 / - 'PROD01' 21 / -/ - -SGFR - 'PROD01' / -/ - -SPR - 1* 10 / -/ - -SWFR -/ - -SPRD -/ - -SPRDH - 'PROD01' / -/ - -SPRDF - 'PROD01' 10 / - 'PROD01' 16 / -/ - -SPRDA - 1* 10 / - 1* 16 / -/ - --- ====================================== -SCHEDULE - -WELSPECS - 'INJE01' 'I' 1 1 1* 'WATER' / - 'PROD01' 'P' 10 10 1* 'OIL' / -/ - -COMPDAT - 'INJE01' 1 1 7 9 'OPEN' 1* 200. 0.5 / - - 'PROD01' 10 10 1 1 'OPEN' 1* 200. 0.5 / - 'PROD01' 10 10 2 2 'OPEN' 1* 200. 0.5 / - 'PROD01' 10 10 3 3 'OPEN' 1* 200. 0.4 / - 'PROD01' 10 10 4 4 'OPEN' 1* 200. 0.4 / - 'PROD01' 10 10 5 5 'OPEN' 1* 200. 0.4 / - 'PROD01' 10 10 6 6 'OPEN' 1* 200. 0.4 / - - 'PROD01' 9 10 2 2 'OPEN' 1* 200. 0.4 / - 'PROD01' 8 10 2 2 'OPEN' 1* 200. 0.4 / - 'PROD01' 7 10 2 2 'OPEN' 1* 200. 0.4 / - 'PROD01' 6 10 2 2 'OPEN' 1* 200. 0.4 / - 'PROD01' 5 10 2 2 'OPEN' 1* 200. 0.4 / - - 'PROD01' 10 9 3 3 'OPEN' 1* 200. 0.4 / - 'PROD01' 10 8 3 3 'OPEN' 1* 200. 0.4 / - 'PROD01' 10 7 3 3 'OPEN' 1* 200. 0.4 / - 'PROD01' 10 6 3 3 'OPEN' 1* 200. 0.4 / - 'PROD01' 10 5 3 3 'OPEN' 1* 200. 0.4 / - - 'PROD01' 9 10 5 5 'OPEN' 1* 200. 0.4 / - 'PROD01' 8 10 5 5 'OPEN' 1* 200. 0.4 / - 'PROD01' 7 10 5 5 'OPEN' 1* 200. 0.4 / - 'PROD01' 6 10 5 5 'OPEN' 1* 200. 0.4 / - 'PROD01' 5 10 5 5 'OPEN' 1* 200. 0.4 / - - 'PROD01' 10 9 6 6 'OPEN' 1* 200. 0.4 / - 'PROD01' 10 8 6 6 'OPEN' 1* 200. 0.4 / - 'PROD01' 10 7 6 6 'OPEN' 1* 200. 0.4 / - 'PROD01' 10 6 6 6 'OPEN' 1* 200. 0.4 / - 'PROD01' 10 5 6 6 'OPEN' 1* 200. 0.4 / -/ - -WELSEGS - 'PROD01' 2512.5 2512.5 1.0e-5 'ABS' 'HFA' 'HO' / - 2 2 1 1 2537.5 2534.5 0.3 0.00010 / - 3 3 1 2 2562.5 2560.5 0.3 0.00010 / - 4 4 1 3 2587.5 2593.5 0.3 0.00010 / - 5 5 1 4 2612.5 2614.5 0.3 0.00010 / - 6 6 1 5 2637.5 2635.5 0.3 0.00010 / - - 7 7 2 2 2737.5 2538.5 0.2 0.00010 / - 8 8 2 7 2937.5 2537.5 0.2 0.00010 / - 9 9 2 8 3137.5 2539.5 0.2 0.00010 / - 10 10 2 9 3337.5 2535.5 0.2 0.00010 / - 11 11 2 10 3537.5 2536.5 0.2 0.00010 / - - 12 12 3 3 2762.5 2563.5 0.2 0.00010 / - 13 13 3 12 2962.5 2562.5 0.1 0.00010 / - 14 14 3 13 3162.5 2562.5 0.1 0.00010 / - 15 15 3 14 3362.5 2564.5 0.1 0.00010 / - 16 16 3 15 3562.5 2562.5 0.1 0.00010 / - - 17 17 4 5 2812.5 2613.5 0.2 0.00010 / - 18 18 4 17 3012.5 2612.5 0.1 0.00010 / - 19 19 4 18 3212.5 2612.5 0.1 0.00010 / - 20 20 4 19 3412.5 2612.5 0.1 0.00010 / - 21 21 4 20 3612.5 2613.5 0.1 0.00010 / - - 22 22 5 6 2837.5 2634.5 0.2 0.00010 / - 23 23 5 22 3037.5 2637.5 0.2 0.00010 / - 24 24 5 23 3237.5 2638.5 0.2 0.00010 / - 25 25 5 24 3437.5 2639.5 0.1 0.00010 / - 26 26 5 25 3637.5 2639.5 0.1 0.00010 / -/ - -COMPSEGS - 'PROD01'/ - 10 10 1 1 2512.5 2525.0 / - 10 10 2 1 2525.0 2550.0 / - 10 10 3 1 2550.0 2575.0 / - 10 10 4 1 2575.0 2600.0 / - 10 10 5 1 2600.0 2625.0 / - 10 10 6 1 2625.0 2650.0 / - - 9 10 2 2 2637.5 2837.5 / - 8 10 2 2 2837.5 3037.5 / - 7 10 2 2 3037.5 3237.5 / - 6 10 2 2 3237.5 3437.5 / - 5 10 2 2 3437.5 3637.5 / - - 10 9 3 3 2662.5 2862.5 / - 10 8 3 3 2862.5 3062.5 / - 10 7 3 3 3062.5 3262.5 / - 10 6 3 3 3262.5 3462.5 / - 10 5 3 3 3462.5 3662.5 / - - 9 10 5 4 2712.5 2912.5 / - 8 10 5 4 2912.5 3112.5 / - 7 10 5 4 3112.5 3312.5 / - 6 10 5 4 3312.5 3512.5 / - 5 10 5 4 3512.5 3712.5 / - - 10 9 6 5 2737.5 2937.5 / - 10 8 6 5 2937.5 3137.5 / - 10 7 6 5 3137.5 3337.5 / - 10 6 6 5 3337.5 3537.5 / - 10 5 6 5 3537.5 3737.5 / -/ - -WCONINJE - 'INJE01' 'WATER' 'OPEN' 'RATE' 15000.00 1* 450 / -/ - -WCONPROD - 'PROD01' 'OPEN' 'BHP' 5* 260 / -/ - -TSTEP - 2*0.5 - 2*4.5 - 2*25 - 4*100 / - -END diff --git a/ThirdParty/custom-opm-common/opm-common/tests/SPE1CASE1.DATA b/ThirdParty/custom-opm-common/opm-common/tests/SPE1CASE1.DATA deleted file mode 100644 index cae6bfd606..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/SPE1CASE1.DATA +++ /dev/null @@ -1,458 +0,0 @@ --- This reservoir simulation deck is made available under the Open Database --- License: http://opendatacommons.org/licenses/odbl/1.0/. Any rights in --- individual contents of the database are licensed under the Database Contents --- License: http://opendatacommons.org/licenses/dbcl/1.0/ - --- Copyright (C) 2015 Statoil - --- This simulation is based on the data given in --- 'Comparison of Solutions to a Three-Dimensional --- Black-Oil Reservoir Simulation Problem' by Aziz S. Odeh, --- Journal of Petroleum Technology, January 1981 - - ---------------------------------------------------------------------------- ------------------------- SPE1 - CASE 1 ------------------------------------ ---------------------------------------------------------------------------- - -RUNSPEC --- ------------------------------------------------------------------------- - -TITLE - SPE1 - CASE 1 - -DIMENS - 10 10 3 / - --- The number of equilibration regions is inferred from the EQLDIMS --- keyword. -EQLDIMS -/ - --- The number of PVTW tables is inferred from the TABDIMS keyword; --- when no data is included in the keyword the default values are used. -TABDIMS -/ - -OIL -GAS -WATER -DISGAS --- As seen from figure 4 in Odeh, GOR is increasing with time, --- which means that dissolved gas is present - -FIELD - -START - 1 'JAN' 2015 / - -WELLDIMS --- Item 1: maximum number of wells in the model --- - there are two wells in the problem; injector and producer --- Item 2: maximum number of grid blocks connected to any one well --- - must be one as the wells are located at specific grid blocks --- Item 3: maximum number of groups in the model --- - we are dealing with only one 'group' --- Item 4: maximum number of wells in any one group --- - there must be two wells in a group as there are two wells in total - 2 1 1 2 / - -UNIFOUT - -GRID - --- The INIT keyword is used to request an .INIT file. The .INIT file --- is written before the simulation actually starts, and contains grid --- properties and saturation tables as inferred from the input --- deck. There are no other keywords which can be used to configure --- exactly what is written to the .INIT file. -INIT - - --- ------------------------------------------------------------------------- -NOECHO - -DX --- There are in total 300 cells with length 1000ft in x-direction - 300*1000 / -DY --- There are in total 300 cells with length 1000ft in y-direction - 300*1000 / -DZ --- The layers are 20, 30 and 50 ft thick, in each layer there are 100 cells - 100*20 100*30 100*50 / - -TOPS --- The depth of the top of each grid block - 100*8325 / - -PORO --- Constant porosity of 0.3 throughout all 300 grid cells - 300*0.3 / - -PERMX --- The layers have perm. 500mD, 50mD and 200mD, respectively. - 100*500 100*50 100*200 / - -PERMY --- Equal to PERMX - 100*500 100*50 100*200 / - -PERMZ --- Cannot find perm. in z-direction in Odeh's paper --- For the time being, we will assume PERMZ equal to PERMX and PERMY: - 100*500 100*50 100*200 / -ECHO - -PROPS --- ------------------------------------------------------------------------- - -PVTW --- Item 1: pressure reference (psia) --- Item 2: water FVF (rb per bbl or rb per stb) --- Item 3: water compressibility (psi^{-1}) --- Item 4: water viscosity (cp) --- Item 5: water 'viscosibility' (psi^{-1}) - --- Using values from Norne: --- In METRIC units: --- 277.0 1.038 4.67E-5 0.318 0.0 / --- In FIELD units: - 4017.55 1.038 3.22E-6 0.318 0.0 / - -ROCK --- Item 1: reference pressure (psia) --- Item 2: rock compressibility (psi^{-1}) - --- Using values from table 1 in Odeh: - 14.7 3E-6 / - -SWOF --- Column 1: water saturation --- - this has been set to (almost) equally spaced values from 0.12 to 1 --- Column 2: water relative permeability --- - generated from the Corey-type approx. formula --- the coeffisient is set to 10e-5, S_{orw}=0 and S_{wi}=0.12 --- Column 3: oil relative permeability when only oil and water are present --- - we will use the same values as in column 3 in SGOF. --- This is not really correct, but since only the first --- two values are of importance, this does not really matter --- Column 4: water-oil capillary pressure (psi) - -0.12 0 1 0 -0.18 4.64876033057851E-008 1 0 -0.24 0.000000186 0.997 0 -0.3 4.18388429752066E-007 0.98 0 -0.36 7.43801652892562E-007 0.7 0 -0.42 1.16219008264463E-006 0.35 0 -0.48 1.67355371900826E-006 0.2 0 -0.54 2.27789256198347E-006 0.09 0 -0.6 2.97520661157025E-006 0.021 0 -0.66 3.7654958677686E-006 0.01 0 -0.72 4.64876033057851E-006 0.001 0 -0.78 0.000005625 0.0001 0 -0.84 6.69421487603306E-006 0 0 -0.91 8.05914256198347E-006 0 0 -1 0.00001 0 0 / - - -SGOF --- Column 1: gas saturation --- Column 2: gas relative permeability --- Column 3: oil relative permeability when oil, gas and connate water are present --- Column 4: oil-gas capillary pressure (psi) --- - stated to be zero in Odeh's paper - --- Values in column 1-3 are taken from table 3 in Odeh's paper: -0 0 1 0 -0.001 0 1 0 -0.02 0 0.997 0 -0.05 0.005 0.980 0 -0.12 0.025 0.700 0 -0.2 0.075 0.350 0 -0.25 0.125 0.200 0 -0.3 0.190 0.090 0 -0.4 0.410 0.021 0 -0.45 0.60 0.010 0 -0.5 0.72 0.001 0 -0.6 0.87 0.0001 0 -0.7 0.94 0.000 0 -0.85 0.98 0.000 0 -0.88 0.984 0.000 0 / ---1.00 1.0 0.000 0 / --- Warning from Eclipse: first sat. value in SWOF + last sat. value in SGOF --- must not be greater than 1, but Eclipse still runs --- Flow needs the sum to be excactly 1 so I added a row with gas sat. = 0.88 --- The corresponding krg value was estimated by assuming linear rel. between --- gas sat. and krw. between gas sat. 0.85 and 1.00 (the last two values given) - -DENSITY --- Density (lb per ft³) at surface cond. of --- oil, water and gas, respectively (in that order) - --- Using values from Norne: --- In METRIC units: --- 859.5 1033.0 0.854 / --- In FIELD units: - 53.66 64.49 0.0533 / - -PVDG --- Column 1: gas phase pressure (psia) --- Column 2: gas formation volume factor (rb per Mscf) --- - in Odeh's paper the units are said to be given in rb per bbl, --- but this is assumed to be a mistake: FVF-values in Odeh's paper --- are given in rb per scf, not rb per bbl. This will be in --- agreement with conventions --- Column 3: gas viscosity (cP) - --- Using values from lower right table in Odeh's table 2: -14.700 166.666 0.008000 -264.70 12.0930 0.009600 -514.70 6.27400 0.011200 -1014.7 3.19700 0.014000 -2014.7 1.61400 0.018900 -2514.7 1.29400 0.020800 -3014.7 1.08000 0.022800 -4014.7 0.81100 0.026800 -5014.7 0.64900 0.030900 -9014.7 0.38600 0.047000 / - -PVTO --- Column 1: dissolved gas-oil ratio (Mscf per stb) --- Column 2: bubble point pressure (psia) --- Column 3: oil FVF for saturated oil (rb per stb) --- Column 4: oil viscosity for saturated oil (cP) - --- Use values from top left table in Odeh's table 2: -0.0010 14.7 1.0620 1.0400 / -0.0905 264.7 1.1500 0.9750 / -0.1800 514.7 1.2070 0.9100 / -0.3710 1014.7 1.2950 0.8300 / -0.6360 2014.7 1.4350 0.6950 / -0.7750 2514.7 1.5000 0.6410 / -0.9300 3014.7 1.5650 0.5940 / -1.2700 4014.7 1.6950 0.5100 - 9014.7 1.5790 0.7400 / -1.6180 5014.7 1.8270 0.4490 - 9014.7 1.7370 0.6310 / --- It is required to enter data for undersaturated oil for the highest GOR --- (i.e. the last row) in the PVTO table. --- In order to fulfill this requirement, values for oil FVF and viscosity --- at 9014.7psia and GOR=1.618 for undersaturated oil have been approximated: --- It has been assumed that there is a linear relation between the GOR --- and the FVF when keeping the pressure constant at 9014.7psia. --- From Odeh we know that (at 9014.7psia) the FVF is 2.357 at GOR=2.984 --- for saturated oil and that the FVF is 1.579 at GOR=1.27 for undersaturated oil, --- so it is possible to use the assumption described above. --- An equivalent approximation for the viscosity has been used. -/ - -SOLUTION --- ------------------------------------------------------------------------- - -EQUIL --- Item 1: datum depth (ft) --- Item 2: pressure at datum depth (psia) --- - Odeh's table 1 says that initial reservoir pressure is --- 4800 psi at 8400ft, which explains choice of item 1 and 2 --- Item 3: depth of water-oil contact (ft) --- - chosen to be directly under the reservoir --- Item 4: oil-water capillary pressure at the water oil contact (psi) --- - given to be 0 in Odeh's paper --- Item 5: depth of gas-oil contact (ft) --- - chosen to be directly above the reservoir --- Item 6: gas-oil capillary pressure at gas-oil contact (psi) --- - given to be 0 in Odeh's paper --- Item 7: RSVD-table --- Item 8: RVVD-table --- Item 9: Set to 0 as this is the only value supported by OPM - --- Item #: 1 2 3 4 5 6 7 8 9 - 8400 4800 8450 0 8300 0 1 0 0 / - -RSVD --- Dissolved GOR is initially constant with depth through the reservoir. --- The reason is that the initial reservoir pressure given is higher ----than the bubble point presssure of 4014.7psia, meaning that there is no --- free gas initially present. -8300 1.270 -8450 1.270 / - -SUMMARY --- ------------------------------------------------------------------------- - -DATE - -RUNSUM - --- 1a) Oil rate vs time -FOPR --- Field Oil Production Rate - --- 1b) GOR vs time -WGOR --- Well Gas-Oil Ratio - 'PROD' -/ --- Using FGOR instead of WGOR:PROD results in the same graph -FGOR - --- 2a) Pressures of the cell where the injector and producer are located -BPR -1 1 1 / -10 10 3 / -/ - --- 2b) Gas saturation at grid points given in Odeh's paper -BGSAT -1 1 1 / -1 1 2 / -1 1 3 / -10 1 1 / -10 1 2 / -10 1 3 / -10 10 1 / -10 10 2 / -10 10 3 / -/ - --- In order to compare Eclipse with Flow: -WBHP - 'INJ' - 'PROD' -/ -WGIR - 'INJ' - 'PROD' -/ -WGIT - 'INJ' - 'PROD' -/ -WGPR - 'INJ' - 'PROD' -/ -WGPT - 'INJ' - 'PROD' -/ -WOIR - 'INJ' - 'PROD' -/ -WOIT - 'INJ' - 'PROD' -/ -WOPR - 'INJ' - 'PROD' -/ -WOPT - 'INJ' - 'PROD' -/ -WWIR - 'INJ' - 'PROD' -/ -WWIT - 'INJ' - 'PROD' -/ -WWPR - 'INJ' - 'PROD' -/ -WWPT - 'INJ' - 'PROD' -/ -SCHEDULE --- ------------------------------------------------------------------------- -RPTSCHED - 'PRES' 'SGAS' 'RS' 'WELLS' 'WELSPECS' / - -RPTRST - 'BASIC=1' / - - --- If no resolution (i.e. case 1), the two following lines must be added: -DRSDT - 0 / --- if DRSDT is set to 0, GOR cannot rise and free gas does not --- dissolve in undersaturated oil -> constant bubble point pressure - -WELSPECS --- Item #: 1 2 3 4 5 6 - 'PROD' 'G1' 10 10 8400 'OIL' / - 'INJ' 'G1' 1 1 8335 'GAS' / - 'RFT' 'G1' 10 10 8400 'OIL' / -/ --- Coordinates in item 3-4 are retrieved from Odeh's figure 1 and 2 --- Note that the depth at the midpoint of the well grid blocks --- has been used as reference depth for bottom hole pressure in item 5 - -COMPDAT --- Item #: 1 2 3 4 5 6 7 8 9 - 'PROD' 10 10 3 3 'OPEN' 1* 1* 0.5 / - 'RFT' 10 10 3 3 'OPEN' 1* 1* 0.5 / - 'INJ' 1 1 1 1 'OPEN' 1* 1* 0.5 / -/ --- Coordinates in item 2-5 are retreived from Odeh's figure 1 and 2 --- Item 9 is the well bore internal diameter, --- the radius is given to be 0.25ft in Odeh's paper - - -WCONPROD --- Item #:1 2 3 4 5 9 - 'PROD' 'OPEN' 'ORAT' 20000 4* 1000 / -/ --- It is stated in Odeh's paper that the maximum oil prod. rate --- is 20 000stb per day which explains the choice of value in item 4. --- The items > 4 are defaulted with the exception of item 9, --- the BHP lower limit, which is given to be 1000psia in Odeh's paper - -WCONINJE --- Item #:1 2 3 4 5 6 7 - 'INJ' 'GAS' 'OPEN' 'RATE' 100000 1* 9014 / -/ --- Stated in Odeh that gas inj. rate (item 5) is 100MMscf per day --- BHP upper limit (item 7) should not be exceeding the highest --- pressure in the PVT table=9014.7psia (default is 100 000psia) - -TSTEP ---Advance the simulater once a month for TEN years: -31 28 31 30 31 30 31 31 30 31 30 31 / - -WELOPEN - 'RFT' OPEN / -/ - -WCONHIST - 'RFT' 'OPEN' 'RESV' 0 / -/ - -TSTEP - 31 / - -WELOPEN - 'RFT' 'SHUT' / -/ - -TSTEP - 28 31 30 31 30 31 31 30 31 30 31 -31 28 31 30 31 30 31 31 30 31 30 31 -31 28 31 30 31 30 31 31 30 31 30 31 -31 28 31 30 31 30 31 31 30 31 30 31 -31 28 31 30 31 30 31 31 30 31 30 31 -31 28 31 30 31 30 31 31 30 31 30 31 -31 28 31 30 31 30 31 31 30 31 30 31 -31 28 31 30 31 30 31 31 30 31 30 31 -31 28 31 30 31 30 31 31 30 31 30 31 / - ---Advance the simulator once a year for TEN years: ---10*365 / - -END diff --git a/ThirdParty/custom-opm-common/opm-common/tests/SPE1CASE1.EGRID b/ThirdParty/custom-opm-common/opm-common/tests/SPE1CASE1.EGRID deleted file mode 100644 index 5e224afdb7aaefd41fd77b8543e2127e1ec3a1b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14824 zcmeI3J#JG`5QT3Ne#DOy7nCVdreFtY64}p*rC>{zBM=ouR*{M&umFk_EPy@@tDrzM zY{M0Ej?WoC0z^a#NI`R@t9#z}&YOE@-Z(!}(pnpgCnw!;cQ|UTolT~TF4jS78}DM> zYVF~-Sg(%FtDvs`MFsdy21oPB=yW<+#EzT8<5|k-PoYe=F`I)=8HJ)P~%;VZ|I^=FH zO+RusmnKK<=F;TBl1qa#cloW!k-NDxI0nw`@x!|m=YFBFB8L6ezHg4zaZrck()35} z$)(9JSI^=+oiusmo_=Za-g(du-WR#sZw>!Aa!)P|&i%AngL4mYYw~66WiHM8$Xy)! zun*#zbuia8{m9*1njE>COOqpab7}JBY7d@W8l1VyZ%vNe&85Nle4N9B{TiHmh+AW2 z5123G454`+xr?(7=J8B&X~#<*-i(9X9Y>metK#L$d5enyazP=+*{n5Jed8ggZ#{0errB=zV@>Y_9J)urRhiR z=F;SG-sIBc;Y}_L&fFEpnjE>COM_#;=K&4wSm4&=5yO7e!G7d!ZVf+jPcBU!xhIz< zkKB_>lSl5!rO9;$oD=!M1CG^xYx2lFximNidc^}8+|PhplVdOWSqJ%%r^cY>r=`T6^?n{d4#B z#dz~st64Ru9;hCu9;hC;c@Lb$_m7%YgX)3mf$D+kf$D+kf$D+V>Vej_FEDQ_Ud5^2 z{6Bl(Yy2KkvuaR1P(4sRP(4sRP(4sRP(4sRP(ASXdtmi@`h$b<)`wQJYEV5;Jy1PR zJ#f<=Xzjs4{L$9naJZPBzQEsWZ9HH9|I@vXanJvEa#z+ka*pfHoTd=h`RZQPr+VPd V^Z>tR4Z7(F|Ejl(54pddeFxt!A8`Nx diff --git a/ThirdParty/custom-opm-common/opm-common/tests/SPE1CASE1.RFT b/ThirdParty/custom-opm-common/opm-common/tests/SPE1CASE1.RFT deleted file mode 100644 index f050db50dd45ae71493c929ef6135b20b75cb7a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3652 zcmd^B&2G~`5Oxx(1k{5MAQcITy&(=&1Sf?j>-pUEiNPU1xJs>!7 zKz)E-ptlx8&y|pP0e;j602S_hv++7>6USCTEr?MjlihsYnVtPSJDR5HvAe<^#-l5dX_IB47&2zZ?TDL`Wf(KXqh7C#M;L=8 zI9U%viUF#d{?HBlh{iQ#FSO4KP_bWN1{E;N1(=3hr|(Cx6S@}pQgYFfL1VrJ)h!;x zeM}NgJp;SZ#nd>aAmmZB8dB~v82+3fV@xzML?-i?&X0qw6yq2;g0S9=WWW@08skknTNj8g$~w+ut?LEwqK zx0EwwBAVojZ+_L1oT}4=A)eX>=#Af*{TSEZu47K_XL%}bu5&mKLIasR0rP{axIF@-bc zR>{3^Uel`I3&!FNqOu}q#)MHoFEhAB zHD9X4{u|ud-}%7zkJk8`C10LdA-9eX-*t`;51|JswuoE3?Q6hDna!>B4Z?|gb4J}F zZZ+}w3|om?W&JGs5Bphg_{9CAwfEqnJSVI(wSTlIqJ?5_9-ILkwb{l0s*rbGlM}NrvQ-4Z*Cz)y1B2 zU(f2ehfia7Y)eob&;Zhkw|XD?v2y6^T-QQ*dSh4G@ zrvlOc_P#5#k99j=KDBPWA!1Aq&KlZ}kTeqJB%OSs#Lsn^e>#uy%Q_&*AuT&Y2^I6XBZv`LcNOtoHuD$?9JJksQ diff --git a/ThirdParty/custom-opm-common/opm-common/tests/SPE1CASE1.UNSMRY b/ThirdParty/custom-opm-common/opm-common/tests/SPE1CASE1.UNSMRY deleted file mode 100644 index 664ed91b8faa5130a57161d099ebe92f19c3181a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28428 zcmb_^cX$-l7xvI30@9=?HHaX+D3V38Aq$+Dke#I?h*UwU0t(WRLrEj_jzH)FQUpPY zAS8e&ReFsQDFUJbB8sB$o%e>_Z{~aQo9~bDeV&{5yyxT|@4K^m=k9J$)3k!Es6|ZU zmf_)=re$l=v^5DAl#x>g04^A4(zHpd*3?|$|M@%3eJy=~R;o{UOY)hRCxaWXrZreP zrGvg8TGO@P=g_MYn;U!4O4EXjy8N1^?;n74h?RKqgOQgWK#-Mq@`HuzUOpdy1k=*! zfi$JTCn8yflZR|lS3dujhiK^_YwV2wF8w`Z2UXm-EV%ZVCtgs;e@Hx_muBoAkOOQ5 ziwLgWc;e;%tw#*LG88#ao4CF7X`N>&;rYBGS%#B`>{561;FE`3*4R;bxEA(^ivMsp z=%Go zoIK$1a`x~**0`urUwuJ?M|7cHV=C|-2R+1kUqydaN1*SCIR)Ls`=fe15eLB%pa*o5 z;vFA@tzZ!m-zAqr?zO11t?0|9*JyB950Nax?P~@e9ep-@M|>>&ZHc;8$F8@dymMX) z`P}?Ws?1k)7S>abu7hr}DXrj^bZpqW--E4S5h0%!w`cA1IwfFE z{gOR@pk3L%r9okLM6wLG*Yhdq;p|iXOAS(d50%fuxd%|eA#ov}5hZ1MW}Sugw3^A# zv9EsaxPQbJ9*JMGfkj1}joyu9{lLX%Xji`0G_+V#ku1Zl&)m|((PyLL$_FW*2jAL8 zMQg4I`RviFi_FL4KrF1M)xe&h#diO&1=tD}5xkzUo>q`Hu&9VVYpWtzf0UL=yI%0q zsA!}y-1-cY9?m{rRX%Dfp9j_yq!PKhgnUjYK2_$!XKfZ1pEIFj6ECNLtzZ!$pB;XK zw1GuMtb40JlJ%z_ze&3iZ_*gOl1P@}*5}jG!`WwR_-OP>rqATRsqE8(Lq3=6ikA7R z&cb?HZ9HyT>|$dw*a{XA@;T;hYe~hZN6dM4FGT$nrJK_3*JjiBr(P7vGTi#iBR!mb z4ulW=<4m7t-lX#P+Jt;=?~Z*!)md0ido>C=cB|TU5r)7Lg?!Fzo*F7V30OE{jJ5@` z{^p(CDYeWHir*%?{eR*!uk>;DnaJWJHq+<9gzu@+3^U~OSWI)Q3w0LO(_SkJ9ecFJ zF|ZXZBINVq#nILpVwMrnE{~d5Kken``m)S@=+KRxw5QE*N=h3Zg>9wlOLOzQZ$dLJ}&cb?HGufTRXVE#+!B(({kk7lDtR)qrUbp48 z%-3gnLKE6w<{(YK`=g{$a_h68^lV|xl3*J{cAID-9J`ri%iNnf|AO|x>emo!RleHM})&OWcO`0RE- z`8=L)I5o^(HRQAUG})!_ICML}!g^Y}Z=wBFFX4V=1B(jz%yS{bRusW9DmE!K4teGC zn{_*B4#{2ZKk->u`Z)WPqf3L7p8aKw+37^1-9)#ChJ4n`5rcK1&cb?HNA6Bujm{JpNG)zv5Bcm+a+S^yMJ#AVmCc5$J)OzurW7HQ2#QX6p%3 zKEG{~PD{6*70EK(`YbLzoPCyM@tKlO)>wef%~(ipzWHp(=fEx-WWK7iu%5P9eu|Ix za?DnN?y(oiLfN>MX3E9CQQPKkE4ZxPLa3yRp>G%16Ogutg}J$8Qv%k1u^7X_Vah zd|rAuU(Xt;T7xq`B*?YMK^Lw*qBg@qpIMr5E!Dn(Iu>K(cuD#5$Itmeqzxy* zi!rKfzbmBqr~Xs)@9LMWF}a@8un@0?QA!#LDNXzKv-a z{a5=?DQWNQlf-9>!pU+i-lp`oa#QK%-9y)N_NeYy9_lP?jE?*i+P^0CL$DPr0zHuP z4><4&*b26YOrO)X(&9~CNu%WUdX|EZ0NHEYq6R%L#k zaPhr$jsM=cDdcl$S+&2Sj>Q;jZ)KkQPQ3HJNE=vG=y^M4GtP51utjCQK9_$<^L;lZ zjgniRI43*%>=3O*r{tWYFKB*@E_6NLIQ>Y+kk3_5&y@M9&ca6OUmc+RHxDicTfrjG z1378HU~u!zw0OwMt_T0_h->Kr^>332`JPLH7D^|sTjqj-L^47WbZ zNe^eAeOZg%aXRz!gtJZGXuRZh!;sHSYjMs{brv?RHA#dv3sl1E$_5q{@;PN!mgk|m z7d{_`N%gM|8b;ra9!S#<^b^T4-1>Y$dN}(W7_CKrv$TqQr}vmn#|~&5|NPF7&+W7J z$$V93VdM9k_n^(v|0qTr1WSM((EgdjJ_B39A|l@0h0jT}`givv(ve|)nzFyPNS5K& zC+_FYK8L4j(I@?<^|_7m(#gtm8V?sgPriRPcQ;)i^HrUNjfd^FL7UaKRs>tYBG3al z|J>WFz*ew`h$%G(As3mA^3kC-Cu!18`23J%xb^v>^lMU$LHp7K9v;6>hbnIY}=z*+%#X9x;MH~c65b<^G%FvPJj=Vwpl2d5HTO&lW47WaC zk{-@JC#GuA_st|du2L)=toFLi=b3#&WxlGju<^LYPH40Dl`O9pdZ6xKo%Q#?5$8Lp z`&49&Kc>>2KvPPp5hcIQGTi#a{mR+r)MzdG;fxG@%!Y^bP3|Cu zB&3-`PRVX%2a7}xWc}-+vwR#PZdUmO^~m~Lu2E|9GL%>n`x?t|>l4otXP+~}HJ|o( zNqyv-rD%WNsWzXNbG4TFs?Ng3qnJ9-=C}pFfURH==z*MnW8ocOD_BItU*{Vk7a4nY z6770v6UG0wNF>W}>$8gVaP~PTL-XZG=&BFyl}!6`7P9%gzDvFTLLG}S{(WV>kY*<5 zz5}*`MW6?A{>|(6f~{Z?o}8Q1xiGSQ_eHd`^gW6@(@oMSx%F99dN})>pQ`zC-3iwR zZ2pPT9(--{`OC_4GGEnM*m!tp0<<}OCH6@hSQL67>EG50(gqgg$=7EPl97Gi9!Fmk z97*FpFDa5`xb=za;p}q}Yre2zm-W8MpHphy-8P^1GCv1H9g8vk?l)0LGv__RImQMS zg&s)yckDk5wt_`?o}Hd~Jx6ZXM%&7brg2N~xS{0MXLae}>~mQc&6lUbZoS8Zzi3yf zu{NK7#o|7$>MU$LIDQ=3ToSLIpNNBC3D5)Dzq@gk=Os^x(V8z`p=iD9=>*zY|2Lb@$C;n^p^n8Ef0lhHq?xO;W%>F;57hm8 zK5YoLf<<`Bb;kP&EppoMd9=A{c^WhHfJm0%)@M!W;p}sbT(4(N^wm4Y5q&XqmDOh; z```gGU)5RIxIf?zXmi8M)4^7-2=qYC|J5(|!B(&c&r6e3J#xN3gFZ{@Ks*?a8%l0{ z){-91KG$bxz5>Zh^*8*hY1`-3Y(8`K)n&e_v#@dR(;3j_)*0o&R4K+b<4LS1*n zL9hg#>a!!DBUc<9MjQ4qeRu=+W0v98C-w_xpPwz(e1$63*4w=O9<*xXovnq0Zf? zV=>0ve`X13=B`ihy0U>qp$C%w!|jwG#6hqGo>xi@hK}42c#%FW`3H^4zE32}aO?AB z>EY~i3v0f@dtcC7Ozcaa_l&gpeDe1RsADn4okk0VH1n%FMZs3E2=qYC|Lyp!eR_s< zK|ONE&{4E*P)iz7<~5Nl!>vzzzUb`pi!Pe4NbgyCU~f6vbo8vvXa3rqWWK7iu<`4R zcF^XL%6Y+7un6=(&VOP_miw{C+fmJn+<$u!t+|+shP6wTUuPL^ed3(v?DNYE%~$kl zem(a6`Se+zoHm~Y)78F%Iu>L6Qn-YWW}aNG&I^cxUFT;135!p6-jZK2H{7RjgEcCbkFK-PazKM%HoMR=NAo`YQE%{CQj z<*XVsXx3tpEW@o&><7+14|LIdB}Qz}qvz zI0%*iJ)r&H*Us|3;|c6rgL>rsgOlmwS8LP2u;C(EhFhPw9?m|GgloRi#Uu5|+XHFs zm3uayrAA{Ns?Ng3^-JpWJoEOzEI+qI5B$DAw$yxGD&pyj{ZrT4}b z7s)c*`m85CoPElP)mOIHRlVMfnzSaRlg($@LCs~psGb38_Rk-+%UbDg!S{e44&1cnOr?4*6S=hLI?_KCX*y&YZD_8`2Am{(}oe#lQ zun14rVh51(mOCdm!bu7mC;f1q8TA;w{t6(cw1bQInzqcqa*a{Zm>5=0k za^9M&h!*^Hk$S~;63H^$`izzy&OUFk=Bv`FkzQ%~T3Y_pXq(ShGQSr@9g8tCI^lVy z1q$!L`&t`V6nY@(zyHfKU@KUJr&r-{?$9QsaQ1mGTzvd{U4L=Y5?Wfp_Weqr-l+C6U)5RI_Fz*evb&pYKNBj;_L{T6*xbqKxv3eJx#!>!Lo(!<&3pW>tXsatya zJkQdSs8P1-8JYR_nW$qi#&>;A2x);*U#RmS;viT8^nmvN+p0C#3Krq%mp2(XuRr1| zn&&%3-D@up$uivfY%D#Teg2)Q`D$#Rqn8_SmKOIYX!F@1^Lt*@u^1!0^H3ozQ1 zuoWxec}76Ig~@pCmn;eLh;O`D*SNsFyvo zmljR>+vc-jqxWULssWWK7iuyKCrap*wx!fL-k90W^% z9?)ja%zqDpI0%-&Gq_?&Xm9@{Kh3K8kUFoU6S) z{5s2U>oZn*IQtCC(0uie57mpd`<>=*e9PvudFJ0IppL~D7hil+NDI6&I~r^Si$D+L z%%_gwb!P*M@(e42bDrk?uyriWSY4YsUVBd@%W&({FFl-n%0J2UHE2ItFMQ@MeRSKt z-?sX8smxb(7B()9p9meOd*d?L3KoGL$eFo+P61oNB0R%qZ$!>J_I`Dm{$pF}aQ}Ic zEW@o&Q+hc2%r{l@`OY2D3tsC(A2qsTyPmI)z~>RF&cepU{%xQG^=`=N-wqau9>|(u zKV^CT^^ExO2!MN^lpEX~jjG20Yf;(wmlKuO#HwF}x z`Kr#s#)V(UKnJ|_8iTE15$J)O`Sjy1U@KUJXOy`aIq!tXPBd-Q`}Ahr-Xd9sTc1s( zhqKRuT{Iu{n5#b%UxVge$Y#5q9n6t3U)5RIxZwK@IuPA=2iOW0fgZ@2dBc=n#6hqG zo)4#}_ov=TfBZ>P52sN3&MPI2l3Sn6q=&Q5!p$|GeyX~juh2f4Tcx$lXJ=nanXl?B zY@DC*33Q;*7InTu90W^%9?)jK=d#|1M(-Mpx_8>?zi4X7^Yq3vpGcPB)+g@E&OVFO z(tI(4KGpLqIYe{f-naRDtMo3Juj(vpoG+=aS3tk|FY;Ef2=qYCe5MrMSK7d$Jlu0U zlHOVKveT5oxv1Sq+<#bxTc0hYhqKRO;hHbD`&|9$B4IT9QdgVLw+qjd`Kr#s#<|^X zp#!niu7Isz5$J)OnZLqvuoW!A!*}p`mFAttF*Nzx{M4?{bdfB>txr7foP9o5Q1hAH z%jvl%6rtJPk8D1BR60%u3vE>Ef5%(<@-zYK;0}*EgEbEi|~vYSQI($!oK5Z zaItv@;BGmIW&^)Cx z@>Z}2^gzxm_>#KsA`XHj@Qk^Uc^+C)?<`H4@hiQ)0%erk`fM#doPCze(0na&PSSG@ ztwyu*J+S$F_uN{Uuj(vpoNN9obfDGMd0;D81bQH67OI5vi482uGq!DAB)u!-Y&-Gq z@zmxK&Q~nMtxw$7oqd*0)qJhK>#Jw~_8poza-7ZQfX|;UNkq=OT3b&OdyCI@86sJRTc58>4`-icH)y`s&&283iaw+n zH*J4E6d1T#T|d;Z7~|aP%-3i8cFMn`LSTu|0}1ol;_Ci`I0%-&Gw$X4(B8Fw4W;BW z{iyZI??tizN)jZaV|XpI?!=(Kd==n z0zHs3i{w}PG~ysw0?)X49iY7%?sueQy*steQ9~rlaO<<3^lfDh^L5_)6Fpeho2IusV!NIr8@w#@Rh@;6^Bp@u2fAHW>qQ&{ zOMo8GX3>jxz*evb&-iAU_myqao6&@*GSu=+SxKYh)@OU^;q3FJTAHuhJGbcmt54Ik zZNH`b-)`zs^pjsV9fqe2#tc zcZ^cUVvGy(mI!HqcW31RTfrjG13B}#(HGHmP1B*frB+cjhUjkdf zB0O=+Pb263rvIOm*svruA9-9P%W&%x`-Zd68X21JJ^$x)?}Q; zeb!3Ve1n#)p=*~ln$mBG&1d}ikuqP^S=hL^zAJQKNWaHmD_8`20A|Tb->AUygC+LF z*C>OO_t-lTl<-ClYBsXGNS5K&XBX+=?DJ(g4-GB9jII>UMUx+e*?cCpx-RooorR6` z=LrB;r zBND?YW58mXJZp!|XVRY1GGEnM*hr7t4;>iwNSzlD2f-4c2eeu0tn6-fut-n*Dx7~b z@45c}P&|J`O{e@=v3_MV_n^uKU^(E_|? z3fKx3fgZ@2rPr(1A>trd0#E!Ub-lgmagh{XA{RA%0gnetZm(xI>EZ0tGeGl=sWXKx zc6>mS4j-`joVewl%vW_5HooikHFRKXyIEi>SOj_?XO_wO?`}K^g%VNsW-Q1_aof65 zV8<1aEW@qO?$X2A=WDez-`K6o>AZIbO&YSy=5umB+}~84g^lknU|-V$o?;`V6orR6>FXMcr1rn-bpR|ERp$C#?___DMR4K+Y_;yf4@a7U4MQ#{;#9=RK%nF-FFAb)E@K ztc<Y+zC7fuvc!rn;_(gJ20f3BRlJzxTn+-ZXCghvdIlRMIH9_1Q;yIQygxnr~9~ zYjimKR7&n``}g*N*(c7*d{t**SQa%RQqqrq0N2v6cW)sTzI*{d*(ZQq+>54|9gWw`Z;&mWzA2AXTWS;c&`cWWF? zC}ck;ELg7g8`QBFCw#U^i+ zUuPL^efF0g&OVz(YrZ)Z)>7Kyla#c*sO@^Dlo>DcRh@;6tII!!4$SV=5^M#FKo8{1 zmp)zxwt_`?5|^reQDGBi(wI*sQmj8k(kQw0iT%RaXAAK$FXvv`z56Xn>Xl&gx#-Ei z>ySDYV_d6uO-KvO`AfZS5eLB%pa-;Bsp%lF6)eJ&xFZ$0s64$Z(3tiCiYO$6}0YXU+*}fq7fL0b9W$&;vQM@>3CD zD_Ddl@$50=qVkRCO=Gm1)a1}4ku1Zl&-bN=v(MJYG~dG9cWKA|bV}Shz~*ylhr2Rg z)mhm1vEwx8!2BL~UD?2*&;v=c@|K2RD_Ddl@wW%aMdcs)fOz!*YLfI{of8I1TW6oI zr)s{GL%V7FKeH*Z!$zCWWoOmCfjUbg4W{x1{UQ> zDsUdjsDe|A5jQiai4W^z8E&s9UMJ2z+b!07i$B;$+ge6RxMs1Yz2$(Bvm=JvT|qHh@p%W!aO-oh^lUq0?laiiKUbfSZ;gXu6pwCk))2r7}xiz z`+s0*JG`&8fkmMQl4i9bF<>iLgeR$M269owzSu(_j!B}J0kI-khFhOQq=&Q5PF*zL zifbRyrs8!d{{D2E&(*7Ne^Yf9Hg1%D2|BPm??SK@ECM}{Gpm=a0k(ogc#=krM=t8Q zU2SO8@eLGH1@ALhhFhPw&pG?-BIlu%7mCwH{S3u_WdB@qO?mZx5p^uaxG{8?kQP{R z^eM0vECM}{GpirG1-61kc#`HeMJ}qu$#FEQlukwl_A8d*)+g5G?DMT!ns4rxfvsQ>o}_OdBNtWXm!D|F_Q_<#%oWN12NE~U*#H0l diff --git a/ThirdParty/custom-opm-common/opm-common/tests/SPE1CASE1A.SMSPEC b/ThirdParty/custom-opm-common/opm-common/tests/SPE1CASE1A.SMSPEC deleted file mode 100644 index 816d47aaff6e760d64b29155ece3ff681e4b211f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1260 zcmc(fO-lnY5Qb9=D$>IqJ?5_9-ILkwb{l0s*rbGlM}NrvQ-4Z*Cz)y1B2 zU(f2ehfia7Y)eob&;Zhkw|XD?v2y6^T-QQ*dSh4G@ zrvlOc_P#5#k99j=KDBPWA!1Aq&KlZ}kTeqJB%OSs#Lsn^e>#uy%Q_&*AuT&Y2^I6XBZv`LcNOtoHuD$?9JJksQ diff --git a/ThirdParty/custom-opm-common/opm-common/tests/SPE1CASE1A.UNSMRY b/ThirdParty/custom-opm-common/opm-common/tests/SPE1CASE1A.UNSMRY deleted file mode 100644 index 22939d103c8e88d95229d140faed4cb089c5a608..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28232 zcmb_^cYGAp_x8{v6zN5J5J7rTAPdQc3~**bc9xEW9(t1|2%%2`X@nZOKnP7hiXcc4 zgai4*r3_@yZP&T~WZ?o8sme~jnzIXw5AXYb=anVCCxXA>n!D%6hJ1U7H$ z?JY@CwiYeh6JsIHoSX58O>{|WvT{~e zWodwS2%8s50q0V8Qvldrhc zIjuZoV_x|DHxB`ON4wDORhc}oxSbM~;j>R@GQlh<^mQFAIdLQnS)Zf`vM>0_U3u@y0H?0>Nxec$pnjrQutrOs*he8bPw z(r438*~hX!R)}MD`ff1gTi7_m=k|9KdA{I*O5({)z!uxw>wxA+KUOVf=gr#ZZxo3+ zjSn9!M*DKa(`P^aS3cp<+UIum5#K0Y_&hQG9m;=jTDnhHp7sHFU*LgCQsoZ7Ag>`m z1I>})^Xl%becq)g%<(PL{}>MVhwAb{9kGkFTWB#kLMmvg~mi= z`1C2m)6;mMl2j)a7}Vff%WE&F$OODBQ}|pA*pH^K`|7*2FMoRqEzy!oozt$*cUZ&H zXS0&R2MM1?d+nm)b=G9~>^C5U=i}#q^_hLv-UtlpGpP;G9O=h1$k9$WbEtg|Y^(wF zohT*JzV}@;F+k@MY1e0N*0A>3K=`O9d>+|Qh)U-Q$?!R?P(`wWR%x7tqvqKHyU4wCghu zYgqdn2_MRrX+AG>p-N9XWcb|O2kV63fl5*Xe_+r~vFu`Khzy_eS|=Kaw}nrbv;#xm z?R)!BV)-!?xr zG)IQdFB1aH9BQB7ykeejQr~wdsd^KNY5G04bxym-GaqYM`&Ni(XNm1d3^W*syF>{hR@e$LU_L5fl5;IW5A%lyUzidBg5yhtGby(?UQR%E1>V$ z?;Lb6Vk6D`2p6)>Y1ikwtYPhQht57a?iM~zOxsBf9_&i@spa#F=J|pLDoH^lfUZ0@ z#eD{2&&crk^N#_Z{q%9e-CgEm?0fl>@9EI-rZoEt+-P-9yFLrBhPBVb@XmFvT>dDMEFe3KaQGauaV)i)*N1?@N?*W z1gInhp8~pST*o?|DKdQKy^@-V3Pu{vTiSIv* z-(z+<(`-M{qtFbWjdBFyeSrrmN!`SC>GJvb-_~1v4wPKQvL^t|QQ^eXf#?aJNB&+% zi$~x-rE}Uno<&&0(r0u2l-(qLu$S<8cG?%z;?=VZpUp2M@O;4om872Qfv%?a9stb& z4fI^)LUl8Tx>VbH__?R~JQn-|E!jMoOP$lM&!Vhh?b8d#b9e`Sk2&ewk7LMv`_BxY zt<(1j!^P(@C22rq){|T<{c{1$0S)wARkGeE6uJ0!3V3lmkFQ-r%Pt3VsdL)(S&TKT zeHIE}pP_U4JxX+;;7DropjL*@u4UHoe8B^iq|fRCU7h|E=P|~f0S$z!ZV7KOF#VHr z%l62NYo8T#_8Fg_-(x|#G)TWogrMbUArFb#rdX@Hx4@7ta?wP&qs59?&&0`CsmzP5ExjyjJZb@ZUoC zOuko;zP$c9zeeY@>yyvQ|BuhwiBgjbzeMq|$U#?by`~Ohk7xLdXe-tY@T?=LIX)Er zT#*ZZL2V9bpy%q)Cd<#K>8}?)&*t1qUw()4Lg%#WvlMGsAJ2xm6p-%{?-QC$q^sY1 zQ?tTLGJM9S?Qg-ej-*!K{RHTm{d*;#IiP`_tNV|u&75bQ=JVE0TGLkLzRqdaXKB{3 z_URuW1=P-ahL43rDgG;|_T2xsPnc6htUKUYM^f9566=p^*|D0a%>fOBYk+gA82rmW z!sofc&1n_=SL+ZS*jf7|_SvRLEFX)$l+r6Vm22H6<9IHZ*avSFJW!qN_chS9A#oDW z9MC||HT=lOX3n!t^EqcHC2VtYU+1)YJj=3%wNE$u2t9XSS=##orIZe*{Qbsc_*~i_ z`(wca)kWFG`Rm$ORjfDYc?L94yT-{)Jp1Nxnon&AExQgqozt$*a;#zPv%M|_%vhK9 zJmKnyP0e5K-In2VWd*Umf@d8`-S{AF-*@KI&rq8qX;-{%+U zoOXSdXANtgT?3?m_?!!srL9lXm7bTIr<~}P;d5P{c|2e6KsE72SD@?u(bYh6Km$Ej zi2_}< z<^C3kv1dR7wQJtkZ#?_yW1lYj@SH^QeR3e0PKpE&eDuu@%&KdwCfZ57Hgkjd_1qUET_axA4I2bRxtSd!4b&w1rJpJ>2VFH`4tfF z7h}(W25Q%`9s@o5>0_T&`NeVe%lAQRI+8z>rf(z`&GQ8hRA28&TZe*PW$6PNc%5rS#1)`9e74{1h@M~Z@2}J0GszS?`%f-) zPP;xUvxc?L=u|1-_xgpEm^xu}y#E7(&(l|q^L)Vr)i;_qQ0qLLe>#~18tA&#Y!c_M z`4v7t)~kk|U&Rxh=um7tP3twDOP$lMPh3aVKBp&20nfA;C8BB&9j*C^!RLiTp*&yk zK=n=Sy+Cc?%`A@>G{C#oXZ<~}&*kpoKIK>Yui13K-I8Kz`}50nPP;xoWDRSdvje1n zS94R9ur06Xr+Q%qpDAh2O~A7bpSO3e1GO>dc(uwL&_LIfk57s^xrb=>-sGiE`0kL!_XJLcS zyZglFFYv6x>+Q!&fLd(s$3SyH13lOF%?HgKYDdm(VqfUjxzBRiTka`ETa1byb4j8k=X&g|4B!4MB|ZPq;Pc_yOFUojK=sx2X+SM*E!N3Q0Sz==yV~iQNNzat z4;qEO-{8Je=(|D_XzI6RxYRlA`mDhk);^c(lI&IDhB7$zTT0Bg-{A9U+H)}QtRtx} zhfW7-i(g|OlPREqrfbh(u}+&`;3yiGc04C+*+si5PNpd<@N?5S?fS%dXYF%Uh$QE& zykF@z?FH>C8*cFVA_(_!!2{Lj$;m)%MWi@CG4>2-pmyzVp5=bYQF^ubeCikVZAaQs zw=acH%fm0%Iqmwa#TwQ=*9J&({=xxD&+}2V*Y^*D&o^n$`@pk~r2enME1)V0+@sQu=e?Vsw5Y`RX_>)YzcicD5t?^p%k(1 zfM*>^eORP4P&>O?>=!Wh3}~Qso$n|1f1Vu14mq|4&@VZ{m%jQujK&-r!==t?*Jpj! zu=bghD9I(q-BOgt<7vyo5QER6$>M$wo^>Sk!O*Qh?aB`y0L=jn^jwz)nki8`=)Sn` z_+8Vl)4JzPY4rQvOz50;eKueXYo9;plKkGQol3K<&FSlD-y3|E*zDl>f(NSiZ*~M~ zzbxmc+nECz=(?^dmou|`JX_pYh`!(b4pnIF{Ms~Xegc;|r(K^7S;N}rkq}8PJ${Q4 zuu!4RHS!yLmRcpwSMaPOsrQDL0c!WwiFFub&wvJM*U$B`yze;Nhxl&IKA#<(NnbXo zMPf}UqU z1GOvl*&5G&`qYR3c;=Hr=nan;a47jBK(6*K<%G_tAXZ#270bL(PG^- z^N!%?Nc5Zq@~)zlLr2ljDfl_+oOXRSW({kfml7oT{ezX2`h~q{y}xlCs!VY_U+_Tn z)^o8xaAz<0Icjr213lOM8duF6YDbqDD}c^oV_VRQz?U?n)?F@jPP;yRS;N|AiZ00? zbiAw73k#!lr5%RjS+(&1o-cTydh_l%pgUK%ST`~D3}~QsJ-90FKb{=Mj_#ptfX*@v zhEl=@2WfE1fAt*9k7ccWrUpoI<*R=ybt=!IwO-#CeAXx-e1XUNQ*S&S0(5(wUk5Y? zG|+SX{^=w$huYDz#1Wvg;)%tyyy!|AwB`wyI;Y*^>0}LSpSQdv`NM&dQuDMzYo3=i z_^h4pE1oZSpn4M!qK1iA~ZzXdc0G|+QBT`u;qX5P^+ z$6558b=DCreQ}ir1a;?9=d|my32RvUe4tBm_3q7-s&N}>^*fUdK0i+TUJyL%NNQ?# zoM)1|$ey}Db3g+<*RzN3nmN>t0Y$ul&W6$gMHLQI;^=2Rc+*Ll8KArDcVa(?v1dR7wd{Zu^2mDK0nZ6`5g7Bx0Fkr)2>fk zSJpmXCQ5Sc-3yh9!!J@ozd{C|P13&S1 z94B`r)f=@rpn;y2?cL{Q4z*)M=d|k+&k-$sQnmm|uKP<5 zrF^xT6u&px;FHq6&j!yrl6qxU+Vxpwfw+I5=NZsItz{1o`zTKiW5>v<>w(UYUzgK@ z?*gf3@A6#goOXTUzHRL@hqokul;gNkcF`GH_P@ghpMk};^L)Vr)yqe!0o~OO?**Cz z8t7>``sFrrs2!s=h|fRH0mWC*{HM<;Bm$rFbWXcIRo1ZfnX8Z_*RNStDZMO)metb? zK3#dH@qEDp)ypfBf$myG#Cn6VXFvnBmNV_|K|DE(9iyw10Xm1pxM+TjSJY#DHZFBe zyFLS1!`kONk0sgX)G_6~62)lg$a@B#?%Qe4!I)(B>XfbNeM1OUwe4fM2kPUE`E6ppdQu+Nj6liCN--1YUS+wBot>YR3c2C;^=|FeGdpCgQfChS6?%(3g9BRk71zUm6@MpCs z?oLPQ`m7X}I;UNqF4nO2nSZt<%a=|lg>Da`FPc3z9M4b2<8!*;f$G&^?Sbw__jvc8 zIiP{A=Jjiq`(MZSJ14+9Bm14FxJG%YYX#g7bWXcIHP*29SwNTMW~uX(f`#_d;uz!i zWu1l>;`xFHs#ksw1G=4!ngh)N4fM1;Z$iu*YR5!vJJ31JuRG0|_!)I+IFL)7)2>f9 zYgqd%6e7vgZ;|qDWNlh>C7a=RcGV{Ee8B_NEAk&ecfjB*_dC!4ujTW~^1kDkG)sIw zbD4eJaz7|mS3)O+V$CzHLQIWX)Vdhxmrs8!iQ*4_4WpzJ><4LU+_Tn^4zb0 z?q)m0{tjc$fCg$U|9e@lLzDMS2Jf76{sql0bD28Lk-5}4?fPuR8rD9G)s^JHQC};0 zR~(~-5uX`+_A0lJ=L;UFUM?e!ms`2@4{CEj13m5CviMw?DI9wLsc1UqFV0T0M(3j7 zv$+50oOXR;|6%R3gtsII^;x9kDdt5BuJ<(f>|10W&lfyUy|lk0&>d9sCeR$vKu;@B zd9|5C?a&|NIgaF9tOwG}Qw1ova2%I9r(K_ISi{=qdxa!f>r+w5J*^lmaDHL%IUu)K zKf$vO`y5&l=ys3H^7AD$z-t9-1^~_B2pd@(J?FB)Q)p(*Q0mwY_Zgkju1{QF);>!; zmgJU0dMWP|38eXJk_(TQJXrR^#eJJj`o*c%GuzP9y zp%slT(u}#k(>&vJ>9-0s?7CHtvQ zY2Jh>2A{*feUIl09;jZLS|8}{SV-*GG4>2-pw^0%o9)?8A3MSiL}Tn+FKwpj1KDSA zDwjH^U7sCT!`f$sEt34ng$N~E@mDnWzTx+W+#}bE;|HE~*ysAR>$7vP@Q+=)Vu=ZIoL6SQqx1`spZD?-i9){yN zI{pyP7d%kCloAPacS{%wGzT=$(~1=k>$I77Oj+C&J?EBZ-6&S+L+x|a=2GXh>l60@ zYoC=uB)RM2AL-Q}ODXQE@%J#szWu#7=2-{#Pq8k!Ll)tFl_{WsrdI5MxWAZR;F$90 z3-p}ZXa7pme$=Vm=XlPdbK3P8%o^4{E4P;99tVG==bHvnT-y_d<2j+pM?7EfK=pFB zZa{bM8{++9>>1ENtrfre*t4HLc1&%Rc3;^Q*NUe3m#4NDDln&W+V$CqHLQJpSXYvJ zfBJx)HONDAk}Dc~PA(%pUx8;G_IaT*(A~f2B%nE5Q2}?U=fL70|i&bCqKD zR-?AQSkH7$yFT&0tbJDVmgN4`ReG{(FwJTCmBDA2S7V+pc%XWPuzpMKK|Oo~uh@8uT&cq2dD5lX^YP0knmpZ3ipSV9+`>eq}2F(~nzb{Cn*=NTYe1^aM zJx1nPhkY(y0dxiMs zGp26|fQHsZLMc}K)=#n5vepLmU;j?AZ4&rfrybK3RUoi(g|)=iY;QL8r4?Hdx! z8al?{GxG8To-cTydUbP8pnJ^FH$Zbh1EH0v`jeSM?TD;h9_T#%sSibU%0aCrRN_+S zwCl46YgqgIi1$OGl~&QsBDrYhYcGS(=yrE`zTkmsN~t11_qcgPXVyL&>XJO^ z&2_qVaR<$;eZk=K?f*XkJnOK}7udf@ZhgZnpgEv{o>p$NxDL&{Bl5a9-p-T=KZ-1! zi(0;qpNGzA*Jm%*u=eQ~F3Dl_XVKMe&uPZ-BL<(-cRc0!f(NSChNd0Q@ZkBV%>fPc zwDMX1-i;%wa5Q*l>e5^kv8yM!_uS-C=d|myH)~k?Y+P58!*{Nx%g#MCW6Uap&zbr6 z^L)Vr)oWL9y-V&XDd&LZfChS6g@8?F4z(l7R{=V2wOmCJy*H4%UkNUCPP;z)u!gly zKW|B%+Vdy6@ZucJD6_`kb5>M!o-cTy`g4aApgSTq>-{ZjfY-bWWxcU#&g^IrcK z6ya5m-0xz)rE}W#iTjzgPk;6iS#UX>JGq^vANtzhbM~_ko-cTy`tuF!J0y2hEv%E7 z0vc#)-j_yXBDvv+ip`I{^S6-cG4VoA ze8vqs#`6UaRIg7=+xJEP9EsW-&_GYCxO%XeL+yzA8v6pt`FKJ(n%XIlv|(?!)H&_? z#6Ha0r+iwHV^(jc(|xwk^b)TPKIi_NjpqvJFp7(%f9rn3f z+)v%p8{&JeOaTovwMuowaW%id5%s6o|2v=08%R?&Pa@aV;`|z&)2`2ftYPhwwn*}f zKDX(3_SqCW(D3*6?geKq@_fMq)nB@#owqZ773(T`o&gQiTBT=V{qp26c0?CT06PEP z=0#J2dy*>-&kc1>yFLf8hP6+1wj|GT7NaANQYf}~EyH=cNEY88fM*@{`LaFGJu7ZF z&>YY}Py67T@n#OSBl@FcpuZH{jHcv#NG|bvJ36=Q`owx*?X!h0$#ZJ7rXSDLplRP5 zpARkG6Uy@i4^(d~{|4xu(<1A2h&8}#l}8l>n!^#@`T~0X*#}IZ@XdwEmA4L;I;UNq zxW24?xY%fCidcl?Pd_Q;z5;asTyyXKZ;2&%TF(Vt4Y(bxylJ@toD#XR827URZe} zB_*7tnBBz<$1}eCRGu$*pn7Yy*ax^53}}nm9MC{d`|!(6W)8I@dZp0w_nJ13!oHeL zL9Tdi>zsCd4r2{#pKaL3;+zL*|NdSSGa$;~bNSo9>tLRB`2Wk(=r+*3@P)W;G4>2- zpw_Ck9Oc+GhWg59{(Iqmwyx@hgQ?PEz^QZjZ3Y;_e zO!!^gKftpN`@C=o=w7_zC!jf?fu2_F9Un7?+7W&6G|)f)_<qiH6R8;d8hoz0DAo<|cz^1hJ>tIL zURGJ0$LM(mG*D~R2Vq^v6pomJm(lbuG`j@ptyF3ukK|J4w0k_EW9>6IL6Q?bKSaCQ zT&L)q#@{zt^Y-s_m}edSyQ_j}``h@7V&99NXFvnBR->e^XFq-Hh^c-OWB(#?qiOQP zSrqus1}=3@yFRfVSo`eE`=OPMexV)npHS2~?*E793m&N69gwykN?6zhwK<@H zo>t?hvStpoBSr}U`WO4MKTU49h5~ouIe^Y-*XQS~VePZ4F3GD4wxaE4R#KFEwc)&7 z_xA6Rm}edKc~IQ{-7ACfc`s8y15K^wn7~XVHyklNQ_=S?@!bKM6c$5)!-KfgIqmu! z%^KD|yN5{fn%iH{wvzQJ@>!h0=lXTHzX=|w-YZuH=w6*~8PFWiKu@bxp|+Vr?TDE$ z73lxoz78}oc?$(r$NpRAwCi&WYgqdX;r-CsDk-l7RZ29dfD z$6e>N>vJq?So`ebEy){>45Ce2VkqK%C4{DOU%@vpGk1HsUJ=Et4Bz}QGrNuwLM%U&yvLbK2q~iuv_MWkN+6F~w-PQSOC&|x z>9GWed3Pe_ZHEcoriUG@fwf#e;Gv)t^dn=AI@k@6s+I~6&kYF1tUe#AC~*bo4P&mQ zgnBqp*Nc*jamHv(iGF4G;w^f9nx{6*@;qNNtEarIjzJxdGwMES!`z=y={_6geob9p zt(p5%+L@c?g!?b?J(L%+fD2lDkL&aOK7M$Q&q3oPa*@02ee-tJ`ER^%Bo z?p4FstI29LeQ3Tfz96sM>2xlCs<-3WRsR##e!4Oa*iVL;s?GTe zrM!m5Yp(KAbCZxD=G4@vYNIXQ=h|K0AA7I$?SH;~uNA*M&$_OA-Pbv14`&Bs%w-_; z_wO^n%Zo8qsc%pSak}syC;o#1UDUooeFuh6F#p}C>G{8!U}=D)4%GU14j@T^kN-sW zDPv4(_4_>e?ni~THmS7&Uu~#Oxz9`b%x6qKg_ew|9a%I89SAL`I_EtA;RE3XjU|k& zat(W8`)x#P-xO0sz;M2db`ti)z^>m@wsf7wbX?1qR^;o$`+7eosE-jCIlF>luW3G#v;ns5bkp6oe0i7c`bI^~h9zR!Elz;=LH!V4Npn4T~Td*YB(Z(5ZSNu$(QzO*8rjrTFlN0oXpsl(k7^361Nn`diZrE;$b zT7Sf@%SVDg=7SD|7F1iV)UFHgVGS>6EMaD=JnV_#Pd3oX@BC@xXivVhBA?9rnCGkF z#iUMEF32~|wYD|Mx~fzeTbTHv3mQw9wL`m*iV+Pq zQ|7A*3Xgx!HCE)q>u#Q}stc1k`!`TM1jpa)#@&)id=J{%r zGU>A`k#h0JU)mak{-#vB>`80(j?(1|zNvjKp~IZeg6gL$dx7wQ@Pft?=DFd1jERdv z0%&<&M;i8UI$v6mFOc^!&sXa*lX`|NmW$((ZLS3`mFmyd)9PRJ=g)zcHeo*KKxjd= zOW8dTJ`i5eSi=03d$A|RylzVwj|S7w*NynnihK(1W1g>0I+LWLALZhyAvTwX6O}N9Q0-P$2Eqrz3mQvU@JREC31fevjBd4PXfs^5tjMSGKIZxA zMKh^)=?eMgizPN^mm^Be_u-W7*rv-jWSR?Rh7N=lRK;$6K=?p-L1PIEmHpTgm-ZM= z%NEX{FT0HAODpmP@jmAHT*8?|W3%L&(yz9<3GI~HHI7i$%}Tm_LzO7Z2OS74sP>wu z-LJrhHN2p)ghgq%4l^<3_dh88!g>lDv6U~a$k&heG0*23%p}|Ow(^bT+ii8~pH}KL z^rWmdA-a4cqyd-@IuKe=?R`MIFM|(jctK+ci;rr@t+?!`HOa2>HCUw_`mJfFK4lLE$M$wkKo+iJSiQ0leFrImL^>hgW%svURGVNPg4 zHNf{i2pO>y?^ zMJvVCx_lAUweur%m=ju1RcEGv@PY7x#uApyY=Av+-NaZ*^^K޾uBHuvX$2?!7 zawY{$9wirbeQT@c>aVzbvWYUcoY3W)aK8ZaK?gz$s=@2E`)&BJh8HxJu%xU4d*a4! zg_N@V1r6GQr4{)?cpvk8jZ2x--zh~d3Vva8iu6_Lx8nDRbt-iECKv6*K+u8Eg6hBr z*&uu%yr8j!n897JCvM^Qp2>g4(HHM<|6@hIFL)pGd`*utY2dAia#37oTjfiW6xXKd zv?3~2mv7p?8e%@^KxjdAu#0wI4IkFJZGM-c@C3?TnUnkN)qT@X@AA7-U?bCHbR$g&id1s4>}N9 zP#u;t1%wZT7c`a-n>`eJ;-1&TD9JX4LaMamODpn)@;>JIyu+C^H2VjBO)H?keqF1$ zJ*`0*#f7?j^8&Q_pyT~;{nO4jYIqi|uM9pAUeH)V>@TaaC+<&wLQ8*$rh&8ZJj057 zLwFzad@X{RG~(0~`NpteRIzKk(xAAUG6wvp%NNzN6Xt^sgcejs-_z!X4{LZqV+nEn z{<%IJ%IHT+{XA(vK{KwgB3~HqW1jDm4on(7>8X69AdFuBPff-B#8p~$rMWKO;>Ozd z9_TPTw4gffgGC^GAiSWlgt)xT*b|S;mdSCXH4XR-=Oruh;XG`fueBGG#}N9P@SAv3xp4Z7c`a-KN#Ql zn0R_jcd{RCPW@{h<4Y^@;W#nR=gaS3CO?Vc-|0f=X~sCE(bPMXJ~&O6FSfiG^Faqf z3#!u|;yDU~4}=#qmJpx&6ZXWjQ~x0Q=Zz^i>Iz?4k#9KfW1g>FDU+rL{!1=a1uEPA zmGWVKqO?11x_t2yweN4xVNPg4bynAoAbcRaps|GbXKvUNFD$%8iRUt@U&UpKZeh_75VTwo9FAC&ZGr)FS#WC43$pH zQJNI`P-Olq#kz62OS74s7CKd1K|VV1&t*n+|k}& zu_V3+C45+wfF89ESJ zP>l)A1mOeW1&t*n*4JJiv2<-!ia#`x)cpHgV@19(ypMUl?j4vEb1+xFb#nyW5c8F0 zy>?N`+|9atsdbKFX6Qg@K{dAIItU*KFK8?w@iXoGD?SL?O!1?4kUG|#YplqJ^R{`u z9$rj}8+lf~{Y42Cyt%G;xs+2%<1M;;X^CwxGjt%dpc6EFtl$N7xg~ z#=W8V8XZZki~Auf^5Hl(&*#VIPH^5J-@Z4Lu3y}*coj{jhfhwJ&*aI1EB>~`|Sh}J`i5eSVH1AxSlhyJgOoc z;;ObGrNs|iV@1C4ypMUl-p84g6w^^IJ=~NowjZQ;x3^Q$G5z0fGefoKE6`zfXhAi( z3;qto-~-_WjU^=hrrn2&6)VP5?CwPrSlobXtjITk_c6~$dzh3m=AnG|%Z+rQa=POE zx(y|bZ>D?yR$eW{%+P_*f@;bW?Ys#e*6@PH66|g{*c1QWSA$|hM^a!0p1WC*566Rf zJ~^F9X`-8a_sosX<#^zAQ<5?hYO1gcelOGNys>f$)OH66~F>V9$?* z_NG{;=M<>@e-kV6;d5o4uWvMymiYwB_cnY>KV0=uTFi2$rT^AHf630rESe647F3t@ z{pb9`eOSW_8cVPT7hun?azqrx?5dDHhlc2iom zT}(^IAJM&kYg+Hde9(c=f@;RAtss0Lyr8iJ`y^lN`8h?nQcT!*3ON4}Us{n5&+p9h zsliOjbeH7&ufL{K2ji8NPaDzF`ugkp+Fb2C0v+ar7F1X4!t;Ly9|$jKEWw_rT`&Er z&GV#~%J~$KbdYPT$TyYuG0)ep7n4@C*eO5A-A^ZSt|^~O7c`b&-=z8dYAjtrOSUIdK;U|=u_7OifAf6(`P|t~r{ss-9@4R6qm))b zv&a#VsLQuuRxoCU4ulp|SG~cE3_cKE&{%>!|2X#iYK?C}OTttNa302&R^*$```X7E1d`9dx;X`bwC~iuVu4gL%Ht z946(=J}p0XenyA--%)%#J|nx6{{K&Gp$yCi9SAL`t}oQ?OX0&BUeH*Aqs>L^`MGAy zp~cVB$p7sQzO*9WY~IH_Ul_lC+0^Z>{5T?n4rIPme9ktZ#BKV&AANo7E#`v`gcekD zR(%P=2f_;)OK{l2vFGRZ^*CDGWefQq9L<+jZVY9zhv-%@Pft?93xAy=jZ<2Nm{hTLH^SM_|l4eb9o>0 ze8a<;wB_MyxvXhR+UL<(Y1^zFCA`ki<;&ZK>y@Shp#|04+Ur30KzKo8367{Z?D;i3 z`UNe#vWNWJ;J)9AeCT1GFPz`MY`y6rmqpH}y|x0S?SGz9!fO5V!5!Y(_c!P;C$ylt z88W;yh$UzInWldA?B{n3Q*Rj$HQR0{SNAh|+HA zY)a_ePWS%pT-FowK?gz$s#{|cLHIy;L1PJyecI>PuSwwpikduuQ#)Z+)$} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/SPE1CASE2.DATA b/ThirdParty/custom-opm-common/opm-common/tests/SPE1CASE2.DATA deleted file mode 100644 index e25de920f9..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/SPE1CASE2.DATA +++ /dev/null @@ -1,442 +0,0 @@ --- This reservoir simulation deck is made available under the Open Database --- License: http://opendatacommons.org/licenses/odbl/1.0/. Any rights in --- individual contents of the database are licensed under the Database Contents --- License: http://opendatacommons.org/licenses/dbcl/1.0/ - --- Copyright (C) 2015 Statoil - --- This simulation is based on the data given in --- 'Comparison of Solutions to a Three-Dimensional --- Black-Oil Reservoir Simulation Problem' by Aziz S. Odeh, --- Journal of Petroleum Technology, January 1981 - ---------------------------------------------------------------------------- ------------------------- SPE1 - CASE 2 ------------------------------------ ---------------------------------------------------------------------------- - -RUNSPEC --- ------------------------------------------------------------------------- - -TITLE - SPE1 - CASE 2 - -DIMENS - 10 10 3 / - --- The number of equilibration regions is inferred from the EQLDIMS --- keyword. -EQLDIMS -/ - --- The number of PVTW tables is inferred from the TABDIMS keyword; --- when no data is included in the keyword the default values are used. -TABDIMS -/ - - -OIL -GAS -WATER -DISGAS --- As seen from figure 4 in Odeh, GOR is increasing with time, --- which means that dissolved gas is present - - -FIELD - -START - 1 'JAN' 2015 / - -WELLDIMS --- Item 1: maximum number of wells in the model --- - there are two wells in the problem; injector and producer --- Item 2: maximum number of grid blocks connected to any one well --- - must be one as the wells are located at specific grid blocks --- Item 3: maximum number of groups in the model --- - we are dealing with only one 'group' --- Item 4: maximum number of wells in any one group --- - there must be two wells in a group as there are two wells in total - 2 1 1 2 / - -UNIFOUT - -GRID - --- The INIT keyword is used to request an .INIT file. The .INIT file --- is written before the simulation actually starts, and contains grid --- properties and saturation tables as inferred from the input --- deck. There are no other keywords which can be used to configure --- exactly what is written to the .INIT file. -INIT - --- ------------------------------------------------------------------------- -NOECHO - -DX --- There are in total 300 cells with length 1000ft in x-direction - 300*1000 / -DY --- There are in total 300 cells with length 1000ft in y-direction - 300*1000 / -DZ --- The layers are 20, 30 and 50 ft thick, in each layer there are 100 cells - 100*20 100*30 100*50 / - -TOPS --- The depth of the top of each grid block - 100*8325 / - -PORO --- Constant porosity of 0.3 throughout all 300 grid cells - 300*0.3 / - -PERMX --- The layers have perm. 500mD, 50mD and 200mD, respectively. - 100*500 100*50 100*200 / - -PERMY --- Equal to PERMX - 100*500 100*50 100*200 / - -PERMZ --- Cannot find perm. in z-direction in Odeh's paper --- For the time being, we will assume PERMZ equal to PERMX and PERMY: - 100*500 100*50 100*200 / -ECHO - -PROPS --- ------------------------------------------------------------------------- - -PVTW --- Item 1: pressure reference (psia) --- Item 2: water FVF (rb per bbl or rb per stb) --- Item 3: water compressibility (psi^{-1}) --- Item 4: water viscosity (cp) --- Item 5: water 'viscosibility' (psi^{-1}) - --- Using values from Norne: --- In METRIC units: --- 277.0 1.038 4.67E-5 0.318 0.0 / --- In FIELD units: - 4017.55 1.038 3.22E-6 0.318 0.0 / - -ROCK --- Item 1: reference pressure (psia) --- Item 2: rock compressibility (psi^{-1}) - --- Using values from table 1 in Odeh: - 14.7 3E-6 / - -SWOF --- Column 1: water saturation --- - this has been set to (almost) equally spaced values from 0.12 to 1 --- Column 2: water relative permeability --- - generated from the Corey-type approx. formula --- the coeffisient is set to 10e-5, S_{orw}=0 and S_{wi}=0.12 --- Column 3: oil relative permeability when only oil and water are present --- - we will use the same values as in column 3 in SGOF. --- This is not really correct, but since only the first --- two values are of importance, this does not really matter --- Column 4: corresponding water-oil capillary pressure (psi) - -0.12 0 1 0 -0.18 4.64876033057851E-008 1 0 -0.24 0.000000186 0.997 0 -0.3 4.18388429752066E-007 0.98 0 -0.36 7.43801652892562E-007 0.7 0 -0.42 1.16219008264463E-006 0.35 0 -0.48 1.67355371900826E-006 0.2 0 -0.54 2.27789256198347E-006 0.09 0 -0.6 2.97520661157025E-006 0.021 0 -0.66 3.7654958677686E-006 0.01 0 -0.72 4.64876033057851E-006 0.001 0 -0.78 0.000005625 0.0001 0 -0.84 6.69421487603306E-006 0 0 -0.91 8.05914256198347E-006 0 0 -1 0.00001 0 0 / - - -SGOF --- Column 1: gas saturation --- Column 2: gas relative permeability --- Column 3: oil relative permeability when oil, gas and connate water are present --- Column 4: oil-gas capillary pressure (psi) --- - stated to be zero in Odeh's paper - --- Values in column 1-3 are taken from table 3 in Odeh's paper: -0 0 1 0 -0.001 0 1 0 -0.02 0 0.997 0 -0.05 0.005 0.980 0 -0.12 0.025 0.700 0 -0.2 0.075 0.350 0 -0.25 0.125 0.200 0 -0.3 0.190 0.090 0 -0.4 0.410 0.021 0 -0.45 0.60 0.010 0 -0.5 0.72 0.001 0 -0.6 0.87 0.0001 0 -0.7 0.94 0.000 0 -0.85 0.98 0.000 0 -0.88 0.984 0.000 0 / ---1.00 1.0 0.000 0 / --- Warning from Eclipse: first sat. value in SWOF + last sat. value in SGOF --- must not be greater than 1, but Eclipse still runs --- Flow needs the sum to be excactly 1 so I added a row with gas sat. = 0.88 --- The corresponding krg value was estimated by assuming linear rel. between --- gas sat. and krw. between gas sat. 0.85 and 1.00 (the last two values given) - -DENSITY --- Density (lb per ft³) at surface cond. of --- oil, water and gas, respectively (in that order) - --- Using values from Norne: --- In METRIC units: --- 859.5 1033.0 0.854 / --- In FIELD units: - 53.66 64.49 0.0533 / - -PVDG --- Column 1: gas phase pressure (psia) --- Column 2: gas formation volume factor (rb per Mscf) --- - in Odeh's paper the units are said to be given in rb per bbl, --- but this is assumed to be a mistake: FVF-values in Odeh's paper --- are given in rb per scf, not rb per bbl. This will be in --- agreement with conventions --- Column 3: gas viscosity (cP) - --- Using values from lower right table in Odeh's table 2: -14.700 166.666 0.008000 -264.70 12.0930 0.009600 -514.70 6.27400 0.011200 -1014.7 3.19700 0.014000 -2014.7 1.61400 0.018900 -2514.7 1.29400 0.020800 -3014.7 1.08000 0.022800 -4014.7 0.81100 0.026800 -5014.7 0.64900 0.030900 -9014.7 0.38600 0.047000 / - -PVTO --- Column 1: dissolved gas-oil ratio (Mscf per stb) --- Column 2: bubble point pressure (psia) --- Column 3: oil FVF for saturated oil (rb per stb) --- Column 4: oil viscosity for saturated oil (cP) - --- Use values from top left table in Odeh's table 2: -0.0010 14.7 1.0620 1.0400 / -0.0905 264.7 1.1500 0.9750 / -0.1800 514.7 1.2070 0.9100 / -0.3710 1014.7 1.2950 0.8300 / -0.6360 2014.7 1.4350 0.6950 / -0.7750 2514.7 1.5000 0.6410 / -0.9300 3014.7 1.5650 0.5940 / -1.2700 4014.7 1.6950 0.5100 - 9014.7 1.5790 0.7400 / -1.6180 5014.7 1.8270 0.4490 - 9014.7 1.7370 0.6310 / --- It is required to enter data for undersaturated oil for the highest GOR --- (i.e. the last row) in the PVTO table. --- In order to fulfill this requirement, values for oil FVF and viscosity --- at 9014.7psia and GOR=1.618 for undersaturated oil have been approximated: --- It has been assumed that there is a linear relation between the GOR --- and the FVF when keeping the pressure constant at 9014.7psia. --- From Odeh we know that (at 9014.7psia) the FVF is 2.357 at GOR=2.984 --- for saturated oil and that the FVF is 1.579 at GOR=1.27 for undersaturated oil, --- so it is possible to use the assumption described above. --- An equivalent approximation for the viscosity has been used. -/ - -SOLUTION --- ------------------------------------------------------------------------- - -EQUIL --- Item 1: datum depth (ft) --- Item 2: pressure at datum depth (psia) --- - Odeh's table 1 says that initial reservoir pressure is --- 4800 psi at 8400ft, which explains choice of item 1 and 2 --- Item 3: depth of water-oil contact (ft) --- - chosen to be directly under the reservoir --- Item 4: oil-water capillary pressure at the water oil contact (psi) --- - given to be 0 in Odeh's paper --- Item 5: depth of gas-oil contact (ft) --- - chosen to be directly above the reservoir --- Item 6: gas-oil capillary pressure at gas-oil contact (psi) --- - given to be 0 in Odeh's paper --- Item 7: RSVD-table --- Item 8: RVVD-table --- Item 9: Set to 0 as this is the only value supported by OPM - --- Item #: 1 2 3 4 5 6 7 8 9 - 8400 4800 8450 0 8300 0 1 0 0 / - -RSVD --- Dissolved GOR is initially constant with depth through the reservoir. --- The reason is that the initial reservoir pressure given is higher ----than the bubble point presssure of 4014.7psia, meaning that there is no --- free gas initially present. -8300 1.270 -8450 1.270 / - -SUMMARY --- ------------------------------------------------------------------------- - --- 1a) Oil rate vs time -FOPR --- Field Oil Production Rate - --- 1b) GOR vs time -WGOR --- Well Gas-Oil Ratio - 'PROD' -/ --- Using FGOR instead of WGOR:PROD results in the same graph -FGOR - --- 2a) Pressures of the cell where the injector and producer are located -BPR -1 1 1 / -10 10 3 / -/ - --- 2b) Gas saturation at grid points given in Odeh's paper -BGSAT -1 1 1 / -1 1 2 / -1 1 3 / -10 1 1 / -10 1 2 / -10 1 3 / -10 10 1 / -10 10 2 / -10 10 3 / -/ - --- In order to compare Eclipse with Flow: -WBHP - 'INJ' - 'PROD' -/ -WGIR - 'INJ' - 'PROD' -/ -WGIT - 'INJ' - 'PROD' -/ -WGPR - 'INJ' - 'PROD' -/ -WGPT - 'INJ' - 'PROD' -/ -WOIR - 'INJ' - 'PROD' -/ -WOIT - 'INJ' - 'PROD' -/ -WOPR - 'INJ' - 'PROD' -/ -WOPT - 'INJ' - 'PROD' -/ -WWIR - 'INJ' - 'PROD' -/ -WWIT - 'INJ' - 'PROD' -/ -WWPR - 'INJ' - 'PROD' -/ -WWPT - 'INJ' - 'PROD' -/ -SCHEDULE --- ------------------------------------------------------------------------- -RPTSCHED - 'PRES' 'SGAS' 'RS' 'WELLS' / - -RPTRST - 'BASIC=1' / - - --- If no resolution (i.e. case 1), the two following lines must be added: ---DRSDT --- 0 / --- Since this is Case 2, the two lines above have been commented out. --- if DRSDT is set to 0, GOR cannot rise and free gas does not --- dissolve in undersaturated oil -> constant bubble point pressure - -WELSPECS --- Item #: 1 2 3 4 5 6 - 'PROD' 'G1' 10 10 8400 'OIL' / - 'INJ' 'G1' 1 1 8335 'GAS' / -/ --- Coordinates in item 3-4 are retrieved from Odeh's figure 1 and 2 --- Note that the depth at the midpoint of the well grid blocks --- has been used as reference depth for bottom hole pressure in item 5 - -COMPDAT --- Item #: 1 2 3 4 5 6 7 8 9 - 'PROD' 10 10 3 3 'OPEN' 1* 1* 0.5 / - 'INJ' 1 1 1 1 'OPEN' 1* 1* 0.5 / -/ --- Coordinates in item 2-5 are retreived from Odeh's figure 1 and 2 --- Item 9 is the well bore internal diameter, --- the radius is given to be 0.25ft in Odeh's paper - - -WCONPROD --- Item #:1 2 3 4 5 9 - 'PROD' 'OPEN' 'ORAT' 20000 4* 1000 / -/ --- It is stated in Odeh's paper that the maximum oil prod. rate --- is 20 000stb per day which explains the choice of value in item 4. --- The items > 4 are defaulted with the exception of item 9, --- the BHP lower limit, which is given to be 1000psia in Odeh's paper - -WCONINJE --- Item #:1 2 3 4 5 6 7 - 'INJ' 'GAS' 'OPEN' 'RATE' 100000 1* 9014 / -/ --- Stated in Odeh that gas inj. rate (item 5) is 100MMscf per day --- BHP upper limit (item 7) should not be exceeding the highest --- pressure in the PVT table=9014.7psia (default is 100 000psia) - -TSTEP ---Advance the simulater once a month for TEN years: -31 28 31 30 31 30 31 31 30 31 30 31 -31 28 31 30 31 30 31 31 30 31 30 31 -31 28 31 30 31 30 31 31 30 31 30 31 -31 28 31 30 31 30 31 31 30 31 30 31 -31 28 31 30 31 30 31 31 30 31 30 / - -DATES - 31 'DEC' 2019 / -/ - -TSTEP -31 28 31 30 31 30 31 31 30 31 30 31 -31 28 31 30 31 30 31 31 30 31 30 31 -31 28 31 30 31 30 31 31 30 31 30 31 -31 28 31 30 31 30 31 31 30 31 30 31 -31 28 31 30 31 30 31 31 30 31 30 31 / - ---Advance the simulator once a year for TEN years: ---10*365 / - -END diff --git a/ThirdParty/custom-opm-common/opm-common/tests/SPE1CASE2.X0060 b/ThirdParty/custom-opm-common/opm-common/tests/SPE1CASE2.X0060 deleted file mode 100644 index d91bd714e5de69e05dcd7c885cb8dbb01f5247de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19832 zcmeHO33wDm+MW>Z%K=dkL86fx*#J*KknWm+R1Sz731|F~6$H6O1eQ}lSUf_OLl6n@ z2Qvvr$Xp2tA;%^VL5@X0T!RPqeT1_~U{Trct)5QCF$0MNl_m8&mFlW``~BYctL~oZ zN}|*0^g%uP@IY?#)9E}`;8;gvI$gyv)arDeb-K~da^m>cKdRCYswbV>%4xci;~3|8 zI4X`^c~;QaG^+1WC5~T}r)Z=()lQC?q12A2x{+!H#~Ao)Q>{l8S`Zs?%2P$r;;X%q z{cJ?=>O^^h+Lx$yzQ^gBCJjdCiumvW9a^bO2dF5{HW_C$ZjsJ^OZXTmz?YtX>0^ zni*Ek6{ZaR4Qe}ipJ>_U z*B7+DyVmf$I>Y8pI~HK6GhMcA&tILC8^IiWTI=q7zbC8>rzFicXstWk!!oYr!JS^s zr`Ec|-D_MsUu*A$&%AOk#BZC|;%jY}4uO-;5*1TaKCN$TJ$IHm^85VM^k~tTxE+>9 zYJJz1J)r!!#wl*!aG&?FJT2#1WV$s_yN`eCefrWDD?h8gxQjQt;>%{_E*hcfcg>gf zTrp^X->Ee=ne+`p8Jo<-yN*uN#deAXk7VCE+Ut(zp7#86v)%>x)5AqEfV2dqAijfN z>$_5DT!{dtu5& z=f3kXxbD_>o-69uSp9OA`v-tyH~^%IO9|6Dlg?|-Xg$j@!I z(3tg@t7gN^QNI|HpIdfoPp|OuhUecpIdo3TTEl;4 z9=nW7Zw9~AzW0Z}IGH-e*e#O`u7h{!L+{VghHcQh?{aS1U7%%CWf>^Tzyr#FarPUF zN`tzj_kU@`e3&@Op3e`{YL#g%%fO!_17*+W-)kMJ87PuItl;~#u4>mnV+h8m_6lf& z-K2XL{~#XhcW;;%IKds%p9cd@TP5ua_o>Psq&fV)9u>c{M#bKRYo(zg_gKU}2klR- z1i+~)q|CNS<{TAna7eD-^oTK=A8pKhDrrYARF=s5sw7zqT@w@HI zXmdCR*wQTEboNl1+!~kWRqMl#RxzgeLW}XEjuvzGTNn{&`E$pm#Rm?@r~%o%3XakD zua1vCwfL7)|K#vtT4(ri_Mmww%~s2u#;L8bmVeA+4lTxxI$8~XKW$0ZnLa-DQ9S*C zg8SX0eBr)jWiPky#k4<|Tj7((T=y>x3mCp$+;QEnydO`_=azKe)A`&7aqPOE>n?_t z7kBfI+IVTbH$7^3`?LAYa``<)*2T?pUdV4_)N~qBTI~C@>YaXC|Br487S@bELrsb9klCxTYP7gy$GuhEBOAPtLU^Z4fSZjtZ37)JqKyaS6~@qXYO z=Zdq?cUOK(40zFp7Wxb+e9!U-G&aw^jQ1#fpYv~Ea2HpM1AA9MF(>go6t$ReozO_{ z0DoqUv}}RoM?au2&l3y3-+Hcg{XI8+FaO5gQ2Ykt~0hukv{|ohKRrvfYZ{w*x z={%+NCY~Huk0<$!SYhrJ1{b-25Y?8b4h*jKbU&gII6S%d)F2Ms#lIKXCxUMZvX!9z!?K#1%tGaVbQX0233+3kg4I-A{ z0VZr3w_W--w|-ELTe`l@&GHf+zqALB@0TLZZ^0+y3__{-F_}Y($^EH=ltG=KadMFln1g5JukIkFIO;_`H^wwRf zck%_z(1Tdu0Vdj-#-m=H%2z58YJSK&d_gnxAQpIlS-yW7Um{aH$|3Rt@9+i9(1Tdu z0cPIdSf1+tI8X5(!;`lp@ubngJn`}^o-m$t%cr?**gM>Mb||-IP7|0-ee-y7%eH*u z@%MP*;2>_l(t+EyQmoTa+&b(-ZtZkT@BowK8_E-Zn8*``cjxwUN4WK?-rRD27q<+0 zlUrJ4h**LLm<2<*-TO;!&8WaFQ)Y4V+i^U8*Lcbmtq18rEWrcJ#s=Kdt|yPrn#VWH z_Th1>`|`N15vpd=BVvIEn3*~rm$HVhuRVyb-LZtP_1>WRf@bKUSl|I>-INf%rey|? zY5Er)otLe8CtuJEJ%|M!V4_cz=TRSTp7k}av)C`+leRV2J)ngmV9GCeV(wx%qj2o>l*#U*G{ABjC={rq({U8 z4`J5r-OAU@sn28H8OKd8uUEap7ioqb!~zd6rp^I8>iiFU)r>15KkyD;&JPQd`zZSbb&)6-m!7Q(JKrjToxA3%VlLih*E=m`R|6}v%MB~A+*)RKVQ30F-=Z!% zH=!Im=j$tY1SV5vm-mIR+|(-ULS|ofzD5gnHoG1>bL)L}W@9T6OYi`rM6(N*y0dea zzG7#++OX5{1K6oFJv;TD5tIkLDn`=NU`_U))UEGP9l)q9J2LNoLr z7I=WkiL$b zVX9{6IoL$y0mj&Y*^*i_>$M5Ya;OhmKkJU_3z|s}VhJ9?*ct>f>m(m$edi-)sgf$Z z!xuC|4`P7_7|Zgr%(5qoC5C??@&oVi13rvH14nb;I&YV1Qe znfTU=Sl|(u=Hr-Y#8zes*w0KIn=#X~6!*plEIMk1(1Tcl2biGA#8sV{+MZ*kXL_;d zpRFulGnbjX zz7gKx3!0$^u>=n=H9uyi+FO|E|7WZDfp_?VX3~RLf(Mw|XPD{W36VqO2j1ZenuQ+3 zA|7C@68-VA`aBB_Fp4MIubyW$Q*N>vV@I$`f7>Y^&RHt&X_z2y>-@N!)vuwPy1KF) zKe&_Ju)=16sS-9(zSJOA{`$%xdADb<{CVOEIjeqMnEa9$m)pO;{ZN73^Sb}UB z^|{=xMXu0;Sl|IBdtsWqW$Pe0Gd)30f4rt_d+TjEc=T|g8F~;4Jiug~zA0y>^p`U{ z4$Fyt;qu7DeBle4p$DC@5WNb^B0N)I0lJl!o4tnQmi9) z<9QV4s+^=u{6tcwnI&b$1{Kp_ zm!z~@E-9U<_IzJbUK=7Q<7*NoTT*6Mlax7h9(aIx@dHT-8cAFxNf~oVQl@7~%KPOd zCE~QCEc8=jfd`m@F_JR655?IjDf5>|%JKk7`RwnK60=CvgIM4JX6B2Mvf!GeMC&BQ z9w8~|vn6GVhpHKR5DPrO#0E)9T5n0&ds0%4(^e9BRDEy@x3Ooun(g=XkMEbssm8%DXNHQK94 z%F&9Fa+dN8U(gIahy@;Cawb!*n@}G6QI5!m@J_y<8F~;4Jis)pLF@4@<&ox*A9#l^ zXoen&C3t`dKTWybuI3Q=fp_?VX3~RL-~lG@y>`;|AN?hz4#jCop4$&~tVc`IP1n%G z&nO<{VMc;IdKTr$M%OG|m(zEX zx5r5L71H#w8VfwY475|O>E4|2Z_3eX@*hIp7Labb{=|AvEbss`ldi7?bPq<;HEI8p z{Ld$EwP~I-Ll0ts2bkEtl_=0BWK`ih9lQV&G?M->?OF3%i@J_y< z8F~;4Jis)pPU|s?@_1Oy54^({G(!)?5?Z1ex^uPcB diff --git a/ThirdParty/custom-opm-common/opm-common/tests/SPE1CASE2_RESTART.DATA b/ThirdParty/custom-opm-common/opm-common/tests/SPE1CASE2_RESTART.DATA deleted file mode 100644 index 065d944f37..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/SPE1CASE2_RESTART.DATA +++ /dev/null @@ -1,426 +0,0 @@ --- This reservoir simulation deck is made available under the Open Database --- License: http://opendatacommons.org/licenses/odbl/1.0/. Any rights in --- individual contents of the database are licensed under the Database Contents --- License: http://opendatacommons.org/licenses/dbcl/1.0/ - --- Copyright (C) 2015 Statoil - --- This simulation is based on the data given in --- 'Comparison of Solutions to a Three-Dimensional --- Black-Oil Reservoir Simulation Problem' by Aziz S. Odeh, --- Journal of Petroleum Technology, January 1981 - ---------------------------------------------------------------------------- ------------------------- SPE1 - CASE 2 ------------------------------------ ---------------------------------------------------------------------------- - -RUNSPEC --- ------------------------------------------------------------------------- - -TITLE - SPE1 - CASE 2 - -DIMENS - 10 10 3 / - --- The number of equilibration regions is inferred from the EQLDIMS --- keyword. -EQLDIMS -/ - --- The number of PVTW tables is inferred from the TABDIMS keyword; --- when no data is included in the keyword the default values are used. -TABDIMS -/ - - -OIL -GAS -WATER -DISGAS --- As seen from figure 4 in Odeh, GOR is increasing with time, --- which means that dissolved gas is present - - -FIELD - -START - 1 'JAN' 2015 / - -WELLDIMS --- Item 1: maximum number of wells in the model --- - there are two wells in the problem; injector and producer --- Item 2: maximum number of grid blocks connected to any one well --- - must be one as the wells are located at specific grid blocks --- Item 3: maximum number of groups in the model --- - we are dealing with only one 'group' --- Item 4: maximum number of wells in any one group --- - there must be two wells in a group as there are two wells in total - 2 1 1 2 / - -UNIFOUT - -GRID - --- The INIT keyword is used to request an .INIT file. The .INIT file --- is written before the simulation actually starts, and contains grid --- properties and saturation tables as inferred from the input --- deck. There are no other keywords which can be used to configure --- exactly what is written to the .INIT file. -INIT - --- ------------------------------------------------------------------------- -NOECHO - -DX --- There are in total 300 cells with length 1000ft in x-direction - 300*1000 / -DY --- There are in total 300 cells with length 1000ft in y-direction - 300*1000 / -DZ --- The layers are 20, 30 and 50 ft thick, in each layer there are 100 cells - 100*20 100*30 100*50 / - -TOPS --- The depth of the top of each grid block - 100*8325 / - -PORO --- Constant porosity of 0.3 throughout all 300 grid cells - 300*0.3 / - -PERMX --- The layers have perm. 500mD, 50mD and 200mD, respectively. - 100*500 100*50 100*200 / - -PERMY --- Equal to PERMX - 100*500 100*50 100*200 / - -PERMZ --- Cannot find perm. in z-direction in Odeh's paper --- For the time being, we will assume PERMZ equal to PERMX and PERMY: - 100*500 100*50 100*200 / -ECHO - -PROPS --- ------------------------------------------------------------------------- - -PVTW --- Item 1: pressure reference (psia) --- Item 2: water FVF (rb per bbl or rb per stb) --- Item 3: water compressibility (psi^{-1}) --- Item 4: water viscosity (cp) --- Item 5: water 'viscosibility' (psi^{-1}) - --- Using values from Norne: --- In METRIC units: --- 277.0 1.038 4.67E-5 0.318 0.0 / --- In FIELD units: - 4017.55 1.038 3.22E-6 0.318 0.0 / - -ROCK --- Item 1: reference pressure (psia) --- Item 2: rock compressibility (psi^{-1}) - --- Using values from table 1 in Odeh: - 14.7 3E-6 / - -SWOF --- Column 1: water saturation --- - this has been set to (almost) equally spaced values from 0.12 to 1 --- Column 2: water relative permeability --- - generated from the Corey-type approx. formula --- the coeffisient is set to 10e-5, S_{orw}=0 and S_{wi}=0.12 --- Column 3: oil relative permeability when only oil and water are present --- - we will use the same values as in column 3 in SGOF. --- This is not really correct, but since only the first --- two values are of importance, this does not really matter --- Column 4: corresponding water-oil capillary pressure (psi) - -0.12 0 1 0 -0.18 4.64876033057851E-008 1 0 -0.24 0.000000186 0.997 0 -0.3 4.18388429752066E-007 0.98 0 -0.36 7.43801652892562E-007 0.7 0 -0.42 1.16219008264463E-006 0.35 0 -0.48 1.67355371900826E-006 0.2 0 -0.54 2.27789256198347E-006 0.09 0 -0.6 2.97520661157025E-006 0.021 0 -0.66 3.7654958677686E-006 0.01 0 -0.72 4.64876033057851E-006 0.001 0 -0.78 0.000005625 0.0001 0 -0.84 6.69421487603306E-006 0 0 -0.91 8.05914256198347E-006 0 0 -1 0.00001 0 0 / - - -SGOF --- Column 1: gas saturation --- Column 2: gas relative permeability --- Column 3: oil relative permeability when oil, gas and connate water are present --- Column 4: oil-gas capillary pressure (psi) --- - stated to be zero in Odeh's paper - --- Values in column 1-3 are taken from table 3 in Odeh's paper: -0 0 1 0 -0.001 0 1 0 -0.02 0 0.997 0 -0.05 0.005 0.980 0 -0.12 0.025 0.700 0 -0.2 0.075 0.350 0 -0.25 0.125 0.200 0 -0.3 0.190 0.090 0 -0.4 0.410 0.021 0 -0.45 0.60 0.010 0 -0.5 0.72 0.001 0 -0.6 0.87 0.0001 0 -0.7 0.94 0.000 0 -0.85 0.98 0.000 0 -0.88 0.984 0.000 0 / ---1.00 1.0 0.000 0 / --- Warning from Eclipse: first sat. value in SWOF + last sat. value in SGOF --- must not be greater than 1, but Eclipse still runs --- Flow needs the sum to be excactly 1 so I added a row with gas sat. = 0.88 --- The corresponding krg value was estimated by assuming linear rel. between --- gas sat. and krw. between gas sat. 0.85 and 1.00 (the last two values given) - -DENSITY --- Density (lb per ft³) at surface cond. of --- oil, water and gas, respectively (in that order) - --- Using values from Norne: --- In METRIC units: --- 859.5 1033.0 0.854 / --- In FIELD units: - 53.66 64.49 0.0533 / - -PVDG --- Column 1: gas phase pressure (psia) --- Column 2: gas formation volume factor (rb per Mscf) --- - in Odeh's paper the units are said to be given in rb per bbl, --- but this is assumed to be a mistake: FVF-values in Odeh's paper --- are given in rb per scf, not rb per bbl. This will be in --- agreement with conventions --- Column 3: gas viscosity (cP) - --- Using values from lower right table in Odeh's table 2: -14.700 166.666 0.008000 -264.70 12.0930 0.009600 -514.70 6.27400 0.011200 -1014.7 3.19700 0.014000 -2014.7 1.61400 0.018900 -2514.7 1.29400 0.020800 -3014.7 1.08000 0.022800 -4014.7 0.81100 0.026800 -5014.7 0.64900 0.030900 -9014.7 0.38600 0.047000 / - -PVTO --- Column 1: dissolved gas-oil ratio (Mscf per stb) --- Column 2: bubble point pressure (psia) --- Column 3: oil FVF for saturated oil (rb per stb) --- Column 4: oil viscosity for saturated oil (cP) - --- Use values from top left table in Odeh's table 2: -0.0010 14.7 1.0620 1.0400 / -0.0905 264.7 1.1500 0.9750 / -0.1800 514.7 1.2070 0.9100 / -0.3710 1014.7 1.2950 0.8300 / -0.6360 2014.7 1.4350 0.6950 / -0.7750 2514.7 1.5000 0.6410 / -0.9300 3014.7 1.5650 0.5940 / -1.2700 4014.7 1.6950 0.5100 - 9014.7 1.5790 0.7400 / -1.6180 5014.7 1.8270 0.4490 - 9014.7 1.7370 0.6310 / --- It is required to enter data for undersaturated oil for the highest GOR --- (i.e. the last row) in the PVTO table. --- In order to fulfill this requirement, values for oil FVF and viscosity --- at 9014.7psia and GOR=1.618 for undersaturated oil have been approximated: --- It has been assumed that there is a linear relation between the GOR --- and the FVF when keeping the pressure constant at 9014.7psia. --- From Odeh we know that (at 9014.7psia) the FVF is 2.357 at GOR=2.984 --- for saturated oil and that the FVF is 1.579 at GOR=1.27 for undersaturated oil, --- so it is possible to use the assumption described above. --- An equivalent approximation for the viscosity has been used. -/ - -SOLUTION --- ------------------------------------------------------------------------- - -RESTART - 'SPE1CASE2' 60 / - -RSVD --- Dissolved GOR is initially constant with depth through the reservoir. --- The reason is that the initial reservoir pressure given is higher ----than the bubble point presssure of 4014.7psia, meaning that there is no --- free gas initially present. -8300 1.270 -8450 1.270 / - -SUMMARY --- ------------------------------------------------------------------------- - --- 1a) Oil rate vs time -FOPR --- Field Oil Production Rate - --- 1b) GOR vs time -WGOR --- Well Gas-Oil Ratio - 'PROD' -/ --- Using FGOR instead of WGOR:PROD results in the same graph -FGOR - --- 2a) Pressures of the cell where the injector and producer are located -BPR -1 1 1 / -10 10 3 / -/ - --- 2b) Gas saturation at grid points given in Odeh's paper -BGSAT -1 1 1 / -1 1 2 / -1 1 3 / -10 1 1 / -10 1 2 / -10 1 3 / -10 10 1 / -10 10 2 / -10 10 3 / -/ - --- In order to compare Eclipse with Flow: -WBHP - 'INJ' - 'PROD' -/ -WGIR - 'INJ' - 'PROD' -/ -WGIT - 'INJ' - 'PROD' -/ -WGPR - 'INJ' - 'PROD' -/ -WGPT - 'INJ' - 'PROD' -/ -WOIR - 'INJ' - 'PROD' -/ -WOIT - 'INJ' - 'PROD' -/ -WOPR - 'INJ' - 'PROD' -/ -WOPT - 'INJ' - 'PROD' -/ -WWIR - 'INJ' - 'PROD' -/ -WWIT - 'INJ' - 'PROD' -/ -WWPR - 'INJ' - 'PROD' -/ -WWPT - 'INJ' - 'PROD' -/ -SCHEDULE -SKIPREST --- ------------------------------------------------------------------------- -RPTSCHED - 'PRES' 'SGAS' 'RS' 'WELLS' / - -RPTRST - 'BASIC=1' / - - --- If no resolution (i.e. case 1), the two following lines must be added: ---DRSDT --- 0 / --- Since this is Case 2, the two lines above have been commented out. --- if DRSDT is set to 0, GOR cannot rise and free gas does not --- dissolve in undersaturated oil -> constant bubble point pressure - -WELSPECS --- Item #: 1 2 3 4 5 6 - 'PROD' 'G1' 10 10 8400 'OIL' / - 'INJ' 'G1' 1 1 8335 'GAS' / -/ --- Coordinates in item 3-4 are retrieved from Odeh's figure 1 and 2 --- Note that the depth at the midpoint of the well grid blocks --- has been used as reference depth for bottom hole pressure in item 5 - -COMPDAT --- Item #: 1 2 3 4 5 6 7 8 9 - 'PROD' 10 10 3 3 'OPEN' 1* 1* 0.5 / - 'INJ' 1 1 1 1 'OPEN' 1* 1* 0.5 / -/ --- Coordinates in item 2-5 are retreived from Odeh's figure 1 and 2 --- Item 9 is the well bore internal diameter, --- the radius is given to be 0.25ft in Odeh's paper - - -WCONPROD --- Item #:1 2 3 4 5 9 - 'PROD' 'OPEN' 'ORAT' 20000 4* 1000 / -/ --- It is stated in Odeh's paper that the maximum oil prod. rate --- is 20 000stb per day which explains the choice of value in item 4. --- The items > 4 are defaulted with the exception of item 9, --- the BHP lower limit, which is given to be 1000psia in Odeh's paper - -WCONINJE --- Item #:1 2 3 4 5 6 7 - 'INJ' 'GAS' 'OPEN' 'RATE' 100000 1* 9014 / -/ --- Stated in Odeh that gas inj. rate (item 5) is 100MMscf per day --- BHP upper limit (item 7) should not be exceeding the highest --- pressure in the PVT table=9014.7psia (default is 100 000psia) - -TSTEP ---Advance the simulater once a month for TEN years: -31 28 31 30 31 30 31 31 30 31 30 31 -31 28 31 30 31 30 31 31 30 31 30 31 -31 28 31 30 31 30 31 31 30 31 30 31 -31 28 31 30 31 30 31 31 30 31 30 31 -31 28 31 30 31 30 31 31 30 31 30 / - -DATES - 31 'DEC' 2019 / -/ - -TSTEP -31 28 31 30 31 30 31 31 30 31 30 31 -31 28 31 30 31 30 31 31 30 31 30 31 -31 28 31 30 31 30 31 31 30 31 30 31 -31 28 31 30 31 30 31 31 30 31 30 31 -31 28 31 30 31 30 31 31 30 31 30 31 / - ---Advance the simulator once a year for TEN years: ---10*365 / - -END diff --git a/ThirdParty/custom-opm-common/opm-common/tests/SPE1_TESTCASE.F0025 b/ThirdParty/custom-opm-common/opm-common/tests/SPE1_TESTCASE.F0025 deleted file mode 100644 index 6a3541805b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/SPE1_TESTCASE.F0025 +++ /dev/null @@ -1,951 +0,0 @@ - 'INTEHEAD' 411 'INTE' - 0 201702 2 0 0 0 - 0 0 10 10 3 300 - 0 0 7 0 2 1 - 1 2 2 0 0 0 - 155 122 130 3 0 0 - 0 0 25 40 58 0 - 99 112 180 5 0 1 - 18 24 10 7 2 4 - 0 1 1 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 31 1 - 2017 24 25 0 0 0 - 0 0 0 0 5 0 - 0 0 12 1 25 1 - 0 0 8 8 0 1 - 0 0 0 0 100 0 - 0 0 0 1 0 1 - 0 1 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 1 1 22 146 - 10 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 1 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 - 'LOGIHEAD' 121 'LOGI' - T T F F F F F F F F F F F F F F F F F F F F F F F - F F F F F F F F F F F F F F F F F F F F F F F F F - F F F F F F F F F F F F F F F F F F F F F F F F F - F F F F F F F F F F F F F F F F F F F F F F F F F - F F F F F F F F F F F F F F F F F F F F F - 'DOUBHEAD' 229 'DOUB' - 0.76100000000000D+03 0.93000000000000D+02 0.36500000000000D+03 - 0.10000000000000D+00 0.15000000000000D+00 0.30000000000000D+01 - 0.30000000000000D+00 0.10000000000000D+00 0.10000000000000D+00 - 0.10000000000000D-02 0.10000000000000D-06 0.10000000000000D-03 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.10000000000000D+02 0.10000000000000D-01 - 0.10000000000000D-05 0.10000000000000D-02 0.10000000000000D-02 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+21 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.10000000000000D-01 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+21 0.10000000000000D+21 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+21 0.10000000000000D+21 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - -0.10000000000000D+01 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.10000000000000D+21 - 0.10000000000000D+21 0.10000000000000D+12 0.12500000000000D+01 - 0.10000000000000D+12 0.10000000000000D+07 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+21 0.00000000000000D+00 0.25000000000000D-01 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+01 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.36500000000000D+03 0.10000000000000D+00 0.15000000000000D+00 - 0.30000000000000D+01 0.30000000000000D+00 0.10000000000000D+00 - 0.10000000000000D+00 0.10000000000000D-02 0.10000000000000D-06 - 0.10000000000000D-03 0.10000000000000D+02 0.10000000000000D-01 - 0.10000000000000D-05 0.10000000000000D-02 0.10000000000000D-02 - 0.00000000000000D+00 0.00000000000000D+00 0.10000000000000D-19 - 0.10130000000000D+01 0.00000000000000D+00 0.10000000000000D+01 - 0.00000000000000D+00 0.30000000000000D+00 0.20000000000000D+01 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.73597900000000D+06 0.73674000000000D+06 - 0.10000000000000D+01 0.20000000000000D+00 0.40000000000000D+00 - 0.12000000000000D+01 0.30000000000000D+00 0.10000000000000D+01 - 0.00000000000000D+00 0.00000000000000D+00 0.40000000000000D+00 - 0.70000000000000D+00 0.20000000000000D+01 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.10000000000000D+01 0.10000000000000D+01 - 0.10000000000000D+01 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+01 0.10000000000000D-03 0.00000000000000D+00 - 0.00000000000000D+00 0.10000000000000D+21 0.10000000000000D+21 - 0.10000000000000D+21 0.10000000000000D+21 0.10000000000000D+21 - 0.10000000000000D+21 0.10000000000000D+21 0.10000000000000D+21 - 0.10000000000000D+21 0.10000000000000D+21 0.10000000000000D+21 - 0.10000000000000D+21 0.10000000000000D+01 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.10000000000000D-03 -0.20000000000000D+21 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.10000000000000D-01 0.10000000000000D+01 - 0.00000000000000D+00 0.10000000000000D+21 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 - 'IGRP ' 198 'INTE' - 2 1 2 0 0 0 - 0 -1 0 0 0 0 - 0 0 -1 0 0 0 - 0 -1 0 0 0 0 - -1 0 0 0 0 1 - 2 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 1 1 0 0 0 0 - 0 1 1 1 0 1 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 1 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 2 2 0 - 0 0 0 0 2 2 - 'SGRP ' 224 'REAL' - 0.10000000E+21 0.10000000E+21 -0.10000000E+21 0.10000000E+21 - 0.00000000E+00 0.00000000E+00 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 -0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 -0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - -0.10000000E+21 0.00000000E+00 0.00000000E+00 0.00000000E+00 - -0.20000000E+21 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.10000000E+21 0.00000000E+00 0.10000000E+21 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.10000000E+01 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.10000000E+21 0.10000000E+21 -0.10000000E+21 0.10000000E+21 - 0.00000000E+00 0.00000000E+00 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 -0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 -0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - -0.10000000E+21 0.00000000E+00 0.00000000E+00 0.00000000E+00 - -0.20000000E+21 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.10000000E+21 0.00000000E+00 0.10000000E+21 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.10000000E+01 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 'XGRP ' 360 'DOUB' - 0.20022907004050D+05 0.17690713775412D-43 0.54251896835712D+05 - 0.47875536608886D+05 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+06 0.00000000000000D+00 0.88352374467071D-48 - 0.27094915251186D+01 0.15221747882105D+08 0.67671068774336D-02 - 0.20667090521983D+08 0.25872521884008D+08 0.00000000000000D+00 - 0.00000000000000D+00 0.76100000000000D+08 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.15220000000000D+08 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.76100000000000D+08 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.20022907004050D+05 0.17690713775412D-43 0.54251896835712D+05 - 0.47875536608886D+05 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+06 0.00000000000000D+00 0.88352374467071D-48 - 0.27094915251186D+01 0.15221747882105D+08 0.67671068774336D-02 - 0.20667090521983D+08 0.25872521884008D+08 0.00000000000000D+00 - 0.00000000000000D+00 0.76100000000000D+08 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.15220000000000D+08 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.76100000000000D+08 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 'ZGRP ' 10 'CHAR' - 'G1 ' ' ' ' ' ' ' ' ' 'FIELD ' ' ' - ' ' ' ' ' ' - 'IWEL ' 310 'INTE' - 10 10 3 3 1 1 - 1 1 1 0 1 0 - 0 0 0 1 0 -100 - 0 0 0 0 0 0 - -1 0 0 0 0 0 - 0 7 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 -1 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 1 - 1 1 1 1 1 4 - 3 3 0 1 0 0 - 0 0 3 0 -100 0 - 0 0 0 0 0 -1 - 0 0 0 0 0 0 - 7 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 -1 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 - 'SWEL ' 244 'REAL' - 0.20000000E+05 0.10000000E+21 0.10000000E+21 0.20000000E+05 - 0.10000000E+21 0.00000000E+00 0.10000000E+04 0.00000000E+00 - 0.00000000E+00 0.84000000E+04 0.00000000E+00 0.99999997E-05 - 0.00000000E+00 0.00000000E+00 0.10000000E+21 0.10000000E+21 - 0.00000000E+00 -0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.00000000E+00 - 0.10000000E+01 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+01 - 0.00000000E+00 0.10000000E+21 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.10000000E+21 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.10000000E+21 0.00000000E+00 0.00000000E+00 0.10000000E+01 - 0.10000000E+01 0.10000000E+01 0.00000000E+00 0.10000000E+21 - 0.00000000E+00 0.10000000E+21 0.10000000E+01 -0.10000000E+21 - 0.10000000E+01 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.50000000E+00 0.10000000E+01 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.00000000E+00 0.10000000E+01 0.10000000E+21 0.10000000E+21 - 0.10000000E+06 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.90140000E+04 0.00000000E+00 0.00000000E+00 0.83350000E+04 - 0.00000000E+00 0.99999997E-05 0.00000000E+00 0.00000000E+00 - 0.10000000E+21 0.10000000E+21 0.00000000E+00 -0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.00000000E+00 0.10000000E+01 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.10000000E+01 0.00000000E+00 0.10000000E+21 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.10000000E+21 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.10000000E+21 0.10000000E+21 0.00000000E+00 - 0.00000000E+00 0.10000000E+01 0.10000000E+01 0.10000000E+01 - 0.00000000E+00 0.10000000E+21 0.00000000E+00 0.10000000E+21 - 0.10000000E+01 -0.10000000E+21 0.10000000E+01 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.50000000E+00 0.10000000E+01 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.10000000E+21 0.00000000E+00 0.10000000E+01 - 'XWEL ' 260 'DOUB' - 0.20022907004050D+05 0.17690713775412D-43 0.54251896835712D+05 - 0.20022907004050D+05 0.47875536608886D+05 0.00000000000000D+00 - 0.27980425147414D+04 0.88352374467071D-48 0.27094915251186D+01 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.15221747882105D+08 0.67671068774336D-02 0.20667090521983D+08 - 0.25872521884008D+08 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.17690713775412D-43 0.54251896835712D+05 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.10000000000000D+04 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.15220000000000D+08 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - -0.10000000000000D+06 0.00000000000000D+00 -0.52369763060710D+05 - 0.00000000000000D+00 0.70485831863371D+04 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.76100000000000D+08 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.52369763060710D+00 - 0.00000000000000D+00 0.00000000000000D+00 -0.10000000000000D+06 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.90140000000000D+04 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.76100000000000D+08 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 -0.52369763060710D+05 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 - 'ZWEL ' 6 'CHAR' - 'PROD ' ' ' ' ' 'INJ ' ' ' ' ' - 'ICON ' 50 'INTE' - 1 10 10 3 0 1 - 0 0 0 0 0 0 - 1 3 0 0 0 0 - 0 0 0 0 0 0 - 0 1 1 1 1 0 - 1 0 0 0 0 0 - 0 1 3 0 0 0 - 0 0 0 0 0 0 - 0 0 - 'SCON ' 80 'REAL' - 0.10610335E+02 0.84000000E+04 0.50000000E+00 0.10000000E+05 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10610335E+02 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 -0.10000000E+21 -0.10000000E+21 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.10610335E+02 0.83350000E+04 0.50000000E+00 0.10000000E+05 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10610335E+02 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 -0.10000000E+21 -0.10000000E+21 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 'XCON ' 116 'DOUB' - 0.20000687586885D+05 0.00000000000000D+00 0.54263549515381D+05 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.27980425147414D+04 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - -0.10000000399456D+06 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.70485831863371D+04 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 - 'STARTSOL' 0 'MESS' - 'PRESSURE' 300 'REAL' - 0.67981689E+04 0.67123604E+04 0.66515991E+04 0.66052246E+04 - 0.65699438E+04 0.65421982E+04 0.65187925E+04 0.64998013E+04 - 0.64856631E+04 0.64761030E+04 0.67123545E+04 0.66731611E+04 - 0.66299194E+04 0.65919248E+04 0.65600225E+04 0.65328569E+04 - 0.65087041E+04 0.64890669E+04 0.64739126E+04 0.64635957E+04 - 0.66515933E+04 0.66299170E+04 0.66007119E+04 0.65705337E+04 - 0.65417563E+04 0.65142891E+04 0.64884673E+04 0.64670151E+04 - 0.64496548E+04 0.64378618E+04 0.66052183E+04 0.65919204E+04 - 0.65705317E+04 0.65449429E+04 0.65168066E+04 0.64868979E+04 - 0.64580488E+04 0.64327900E+04 0.64114014E+04 0.63971353E+04 - 0.65699355E+04 0.65600171E+04 0.65417544E+04 0.65168066E+04 - 0.64862056E+04 0.64520781E+04 0.64173867E+04 0.63849834E+04 - 0.63566411E+04 0.63381816E+04 0.65421934E+04 0.65328545E+04 - 0.65142910E+04 0.64869004E+04 0.64520801E+04 0.64112720E+04 - 0.63667554E+04 0.63218257E+04 0.62814072E+04 0.62552065E+04 - 0.65187939E+04 0.65087065E+04 0.64884717E+04 0.64580542E+04 - 0.64173916E+04 0.63667578E+04 0.63073608E+04 0.62419644E+04 - 0.61795957E+04 0.61371050E+04 0.64998047E+04 0.64890713E+04 - 0.64670220E+04 0.64327983E+04 0.63849917E+04 0.63218306E+04 - 0.62419653E+04 0.61459385E+04 0.60434961E+04 0.59619204E+04 - 0.64856714E+04 0.64739209E+04 0.64496646E+04 0.64114116E+04 - 0.63566499E+04 0.62814116E+04 0.61795938E+04 0.60434922E+04 - 0.58704141E+04 0.56899526E+04 0.64761147E+04 0.64636079E+04 - 0.64378740E+04 0.63971460E+04 0.63381899E+04 0.62552080E+04 - 0.61370928E+04 0.59619087E+04 0.56899507E+04 0.52240107E+04 - 0.68012764E+04 0.67156938E+04 0.66552026E+04 0.66102441E+04 - 0.65753530E+04 0.65477754E+04 0.65249829E+04 0.65063726E+04 - 0.64924854E+04 0.64830547E+04 0.67156875E+04 0.66766494E+04 - 0.66348169E+04 0.65971221E+04 0.65654146E+04 0.65384253E+04 - 0.65149971E+04 0.64956289E+04 0.64807417E+04 0.64705474E+04 - 0.66551963E+04 0.66348145E+04 0.66058345E+04 0.65758496E+04 - 0.65471304E+04 0.65200049E+04 0.64948447E+04 0.64735547E+04 - 0.64564819E+04 0.64448105E+04 0.66102378E+04 0.65971172E+04 - 0.65758477E+04 0.65502456E+04 0.65222256E+04 0.64929761E+04 - 0.64644663E+04 0.64392910E+04 0.64182188E+04 0.64040771E+04 - 0.65753452E+04 0.65654092E+04 0.65471279E+04 0.65222256E+04 - 0.64920972E+04 0.64583652E+04 0.64238179E+04 0.63914561E+04 - 0.63634390E+04 0.63451113E+04 0.65477700E+04 0.65384229E+04 - 0.65200049E+04 0.64929780E+04 0.64583672E+04 0.64176582E+04 - 0.63731753E+04 0.63283130E+04 0.62881689E+04 0.62621113E+04 - 0.65249834E+04 0.65149990E+04 0.64948486E+04 0.64644717E+04 - 0.64238223E+04 0.63731777E+04 0.63137373E+04 0.62484741E+04 - 0.61863057E+04 0.61439619E+04 0.65063760E+04 0.64956333E+04 - 0.64735615E+04 0.64392988E+04 0.63914639E+04 0.63283174E+04 - 0.62484756E+04 0.61525347E+04 0.60501558E+04 0.59687354E+04 - 0.64924937E+04 0.64807500E+04 0.64564917E+04 0.64182290E+04 - 0.63634478E+04 0.62881733E+04 0.61863037E+04 0.60501519E+04 - 0.58770918E+04 0.56965957E+04 0.64830664E+04 0.64705596E+04 - 0.64448228E+04 0.64040879E+04 0.63451191E+04 0.62621123E+04 - 0.61439497E+04 0.59687236E+04 0.56965938E+04 0.52249961E+04 - 0.68063940E+04 0.67221064E+04 0.66662188E+04 0.66214077E+04 - 0.65865117E+04 0.65589214E+04 0.65361201E+04 0.65175059E+04 - 0.65036108E+04 0.64941963E+04 0.67220986E+04 0.66875176E+04 - 0.66459785E+04 0.66082856E+04 0.65765674E+04 0.65495664E+04 - 0.65261318E+04 0.65067573E+04 0.64918633E+04 0.64816870E+04 - 0.66662119E+04 0.66459756E+04 0.66170000E+04 0.65870063E+04 - 0.65582744E+04 0.65311377E+04 0.65059751E+04 0.64846748E+04 - 0.64675967E+04 0.64559453E+04 0.66214014E+04 0.66082808E+04 - 0.65870044E+04 0.65613911E+04 0.65333599E+04 0.65041040E+04 - 0.64755898E+04 0.64503994E+04 0.64293237E+04 0.64152026E+04 - 0.65865039E+04 0.65765620E+04 0.65582720E+04 0.65333599E+04 - 0.65032236E+04 0.64694878E+04 0.64349312E+04 0.64025513E+04 - 0.63745303E+04 0.63562212E+04 0.65589160E+04 0.65495635E+04 - 0.65311382E+04 0.65041060E+04 0.64694897E+04 0.64287720E+04 - 0.63842754E+04 0.63393940E+04 0.62992422E+04 0.62731943E+04 - 0.65361206E+04 0.65261338E+04 0.65059790E+04 0.64755947E+04 - 0.64349355E+04 0.63842778E+04 0.63248184E+04 0.62595391E+04 - 0.61973540E+04 0.61550029E+04 0.65175093E+04 0.65067617E+04 - 0.64846816E+04 0.64504072E+04 0.64025591E+04 0.63393989E+04 - 0.62595400E+04 0.61635845E+04 0.60611758E+04 0.59797437E+04 - 0.65036191E+04 0.64918716E+04 0.64676064E+04 0.64293340E+04 - 0.63745391E+04 0.62992461E+04 0.61973525E+04 0.60611719E+04 - 0.58880850E+04 0.57074971E+04 0.64942080E+04 0.64816997E+04 - 0.64559575E+04 0.64152134E+04 0.63562295E+04 0.62731953E+04 - 0.61549907E+04 0.59797324E+04 0.57074951E+04 0.52267480E+04 - 'RS ' 300 'REAL' - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12216158E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12231295E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12256032E+01 - 'SGAS ' 300 'REAL' - 0.50055450E+00 0.49408710E+00 0.48315936E+00 0.46701396E+00 - 0.44689053E+00 0.41845676E+00 0.37826228E+00 0.32574490E+00 - 0.24276857E+00 0.90163559E-01 0.49410802E+00 0.48600519E+00 - 0.47318652E+00 0.45812473E+00 0.43735543E+00 0.40802988E+00 - 0.36821043E+00 0.31775987E+00 0.23447692E+00 0.81971966E-01 - 0.48320577E+00 0.47320655E+00 0.46157214E+00 0.44563469E+00 - 0.42391065E+00 0.39468837E+00 0.35750172E+00 0.31023934E+00 - 0.22826572E+00 0.77412002E-01 0.46707538E+00 0.45815957E+00 - 0.44564927E+00 0.42894176E+00 0.40699089E+00 0.37927854E+00 - 0.34715879E+00 0.30374813E+00 0.22494739E+00 0.77279337E-01 - 0.44695964E+00 0.43740150E+00 0.42393970E+00 0.40700516E+00 - 0.38639507E+00 0.36354658E+00 0.33719337E+00 0.29851913E+00 - 0.22536190E+00 0.83602875E-01 0.41853747E+00 0.40808728E+00 - 0.39472768E+00 0.37930152E+00 0.36355567E+00 0.34707353E+00 - 0.32670161E+00 0.29386738E+00 0.22968093E+00 0.98591752E-01 - 0.37834877E+00 0.36827347E+00 0.35754028E+00 0.34718168E+00 - 0.33720511E+00 0.32670563E+00 0.31274301E+00 0.28754014E+00 - 0.23642632E+00 0.12452470E+00 0.32582518E+00 0.31782413E+00 - 0.31028128E+00 0.30377319E+00 0.29853228E+00 0.29387152E+00 - 0.28754020E+00 0.27416205E+00 0.24097699E+00 0.15301925E+00 - 0.24286678E+00 0.23457952E+00 0.22833915E+00 0.22499044E+00 - 0.22538234E+00 0.22968715E+00 0.23642576E+00 0.24097954E+00 - 0.23147486E+00 0.18126808E+00 0.90256505E-01 0.82086354E-01 - 0.77482559E-01 0.77439547E-01 0.83678044E-01 0.98614797E-01 - 0.12459118E+00 0.15309215E+00 0.18130840E+00 0.23945180E+00 - 0.47428724E+00 0.41899416E+00 0.13359432E+00 0.75352537E-02 - 0.95570067E-08 0.38635267E-16 0.13660339E-15 0.00000000E+00 - 0.12076478E-15 0.00000000E+00 0.41909042E+00 0.17718008E+00 - 0.15630079E-01 0.14892477E-06 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.25188108E-16 0.30810866E-15 0.35176878E-09 - 0.13376430E+00 0.15642049E-01 0.21618418E-06 0.00000000E+00 - 0.13191434E-05 0.00000000E+00 0.00000000E+00 0.18700564E-15 - 0.59303757E-08 0.50344369E-16 0.75649284E-02 0.14814545E-06 - 0.00000000E+00 0.00000000E+00 0.17280066E-15 0.25763562E-08 - 0.26573197E-15 0.16699391E-15 0.67118277E-11 0.28239245E-06 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 -0.28653431E-15 - 0.19969819E-08 0.21689700E-15 0.91859644E-16 0.12811629E-10 - 0.82192139E-06 0.00000000E+00 0.00000000E+00 0.20369678E-16 - 0.17469492E-05 0.10761203E-15 0.00000000E+00 0.00000000E+00 - 0.55711865E-16 0.67261301E-11 0.87986461E-16 0.00000000E+00 - 0.31630185E-15 0.00000000E+00 0.57254874E-11 0.38520243E-09 - -0.52700573E-16 0.10640482E-08 0.16491596E-09 0.00000000E+00 - 0.21641357E-15 0.65837520E-06 0.00000000E+00 0.21908714E-09 - 0.29765957E-12 0.16527023E-11 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.12000114E-05 0.00000000E+00 - 0.00000000E+00 0.34346894E-11 0.13833603E-11 0.37107561E-15 - 0.81983035E-06 0.00000000E+00 0.33222645E-08 0.22544512E-09 - 0.00000000E+00 0.87183244E-09 0.00000000E+00 0.90791410E-16 - 0.00000000E+00 0.00000000E+00 0.18491607E-15 0.00000000E+00 - 0.14780496E-10 0.14309131E-15 0.41288145E-05 0.22386165E+00 - 0.27815342E+00 0.13135679E+00 0.26485773E-01 0.90386416E-03 - 0.62699165E-10 0.78658993E-16 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.13142440E+00 0.28150149E-01 - 0.16012291E-02 0.00000000E+00 0.22245473E-12 0.00000000E+00 - 0.61679669E-16 0.00000000E+00 0.00000000E+00 0.38168684E-16 - 0.26494462E-01 0.16018901E-02 0.17642869E-08 0.41337477E-12 - 0.74833462E-16 0.87257887E-16 0.00000000E+00 0.00000000E+00 - 0.16068985E-12 0.45237141E-16 0.88474457E-03 0.74369218E-07 - 0.12109656E-12 0.00000000E+00 0.00000000E+00 0.15628507E-12 - 0.00000000E+00 0.20945055E-12 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.21900516E-13 - 0.14250326E-12 0.00000000E+00 -0.11577692E-15 -0.25149368E-17 - 0.00000000E+00 0.00000000E+00 0.17809381E-08 0.48851262E-11 - 0.26026338E-13 0.00000000E+00 0.00000000E+00 0.31443034E-16 - 0.68961377E-13 0.00000000E+00 0.00000000E+00 -0.23927114E-16 - 0.23603050E-15 -0.74397352E-16 0.15720012E-10 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.35182572E-16 - 0.10678448E-15 0.00000000E+00 0.37236154E-16 0.23895890E-13 - 0.41108735E-13 0.24792874E-15 -0.26524188E-16 0.00000000E+00 - -0.33967067E-16 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.14516779E-15 0.24742676E-16 - -0.10626858E-15 0.11915141E-15 0.13956295E-12 0.32198920E-15 - 0.21408602E-16 0.41206058E-12 0.25618922E-16 0.79837446E-17 - 0.00000000E+00 -0.82020569E-16 0.11130468E-16 0.00000000E+00 - 0.55095691E-16 0.00000000E+00 0.64630004E-16 0.11308308E+00 - 'SWAT ' 300 'REAL' - 0.11850486E+00 0.11856812E+00 0.11861295E+00 0.11864716E+00 - 0.11867320E+00 0.11869367E+00 0.11871095E+00 0.11872498E+00 - 0.11873542E+00 0.11874247E+00 0.11856813E+00 0.11859704E+00 - 0.11862893E+00 0.11865697E+00 0.11868051E+00 0.11870057E+00 - 0.11871840E+00 0.11873290E+00 0.11874409E+00 0.11875171E+00 - 0.11861295E+00 0.11862894E+00 0.11865049E+00 0.11867276E+00 - 0.11869400E+00 0.11871428E+00 0.11873335E+00 0.11874919E+00 - 0.11876201E+00 0.11877072E+00 0.11864717E+00 0.11865698E+00 - 0.11867276E+00 0.11869165E+00 0.11871242E+00 0.11873450E+00 - 0.11875581E+00 0.11877447E+00 0.11879027E+00 0.11880081E+00 - 0.11867320E+00 0.11868052E+00 0.11869400E+00 0.11871242E+00 - 0.11873502E+00 0.11876022E+00 0.11878584E+00 0.11880979E+00 - 0.11883073E+00 0.11884438E+00 0.11869368E+00 0.11870057E+00 - 0.11871428E+00 0.11873450E+00 0.11876022E+00 0.11879037E+00 - 0.11882326E+00 0.11885647E+00 0.11888634E+00 0.11890572E+00 - 0.11871095E+00 0.11871840E+00 0.11873334E+00 0.11875580E+00 - 0.11878584E+00 0.11882325E+00 0.11886716E+00 0.11891551E+00 - 0.11896165E+00 0.11899309E+00 0.11872497E+00 0.11873290E+00 - 0.11874918E+00 0.11877446E+00 0.11880978E+00 0.11885646E+00 - 0.11891551E+00 0.11898655E+00 0.11906239E+00 0.11912281E+00 - 0.11873541E+00 0.11874409E+00 0.11876200E+00 0.11879026E+00 - 0.11883073E+00 0.11888634E+00 0.11896165E+00 0.11906239E+00 - 0.11919063E+00 0.11932448E+00 0.11874247E+00 0.11875170E+00 - 0.11877071E+00 0.11880080E+00 0.11884437E+00 0.11890572E+00 - 0.11899310E+00 0.11912282E+00 0.11932448E+00 0.11967077E+00 - 0.11850759E+00 0.11857069E+00 0.11861531E+00 0.11864848E+00 - 0.11867423E+00 0.11869458E+00 0.11871141E+00 0.11872515E+00 - 0.11873540E+00 0.11874237E+00 0.11857069E+00 0.11859948E+00 - 0.11863035E+00 0.11865816E+00 0.11868156E+00 0.11870149E+00 - 0.11871878E+00 0.11873309E+00 0.11874408E+00 0.11875161E+00 - 0.11861531E+00 0.11863035E+00 0.11865173E+00 0.11867386E+00 - 0.11869506E+00 0.11871509E+00 0.11873366E+00 0.11874939E+00 - 0.11876199E+00 0.11877061E+00 0.11864848E+00 0.11865816E+00 - 0.11867386E+00 0.11869276E+00 0.11871345E+00 0.11873505E+00 - 0.11875610E+00 0.11877469E+00 0.11879026E+00 0.11880071E+00 - 0.11867423E+00 0.11868156E+00 0.11869506E+00 0.11871345E+00 - 0.11873569E+00 0.11876060E+00 0.11878613E+00 0.11881004E+00 - 0.11883074E+00 0.11884429E+00 0.11869459E+00 0.11870149E+00 - 0.11871509E+00 0.11873504E+00 0.11876060E+00 0.11879067E+00 - 0.11882354E+00 0.11885670E+00 0.11888638E+00 0.11890565E+00 - 0.11871141E+00 0.11871878E+00 0.11873366E+00 0.11875609E+00 - 0.11878612E+00 0.11882354E+00 0.11886748E+00 0.11891574E+00 - 0.11896172E+00 0.11899305E+00 0.11872515E+00 0.11873308E+00 - 0.11874938E+00 0.11877469E+00 0.11881003E+00 0.11885670E+00 - 0.11891574E+00 0.11898671E+00 0.11906250E+00 0.11912280E+00 - 0.11873540E+00 0.11874407E+00 0.11876199E+00 0.11879025E+00 - 0.11883073E+00 0.11888637E+00 0.11896172E+00 0.11906250E+00 - 0.11919072E+00 0.11932459E+00 0.11874236E+00 0.11875160E+00 - 0.11877061E+00 0.11880070E+00 0.11884428E+00 0.11890565E+00 - 0.11899307E+00 0.11912281E+00 0.11932460E+00 0.11967511E+00 - 0.11851184E+00 0.11857399E+00 0.11861522E+00 0.11864828E+00 - 0.11867403E+00 0.11869439E+00 0.11871123E+00 0.11872497E+00 - 0.11873523E+00 0.11874218E+00 0.11857399E+00 0.11859950E+00 - 0.11863015E+00 0.11865796E+00 0.11868137E+00 0.11870130E+00 - 0.11871860E+00 0.11873291E+00 0.11874391E+00 0.11875142E+00 - 0.11861522E+00 0.11863015E+00 0.11865153E+00 0.11867367E+00 - 0.11869487E+00 0.11871491E+00 0.11873349E+00 0.11874922E+00 - 0.11876183E+00 0.11877044E+00 0.11864828E+00 0.11865796E+00 - 0.11867367E+00 0.11869258E+00 0.11871327E+00 0.11873487E+00 - 0.11875593E+00 0.11877453E+00 0.11879010E+00 0.11880054E+00 - 0.11867404E+00 0.11868137E+00 0.11869488E+00 0.11871327E+00 - 0.11873552E+00 0.11876044E+00 0.11878596E+00 0.11880989E+00 - 0.11883059E+00 0.11884412E+00 0.11869440E+00 0.11870130E+00 - 0.11871491E+00 0.11873487E+00 0.11876044E+00 0.11879051E+00 - 0.11882339E+00 0.11885656E+00 0.11888625E+00 0.11890551E+00 - 0.11871123E+00 0.11871860E+00 0.11873349E+00 0.11875592E+00 - 0.11878596E+00 0.11882339E+00 0.11886734E+00 0.11891561E+00 - 0.11896161E+00 0.11899295E+00 0.11872497E+00 0.11873291E+00 - 0.11874922E+00 0.11877453E+00 0.11880988E+00 0.11885656E+00 - 0.11891561E+00 0.11898659E+00 0.11906240E+00 0.11912272E+00 - 0.11873522E+00 0.11874390E+00 0.11876182E+00 0.11879010E+00 - 0.11883058E+00 0.11888625E+00 0.11896161E+00 0.11906241E+00 - 0.11919065E+00 0.11932459E+00 0.11874218E+00 0.11875141E+00 - 0.11877043E+00 0.11880053E+00 0.11884412E+00 0.11890551E+00 - 0.11899295E+00 0.11912273E+00 0.11932459E+00 0.11968192E+00 - 'ENDSOL ' 0 'MESS' diff --git a/ThirdParty/custom-opm-common/opm-common/tests/SPE1_TESTCASE.FUNRST b/ThirdParty/custom-opm-common/opm-common/tests/SPE1_TESTCASE.FUNRST deleted file mode 100644 index 3031add360..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/SPE1_TESTCASE.FUNRST +++ /dev/null @@ -1,8577 +0,0 @@ - 'SEQNUM ' 1 'INTE' - 1 - 'INTEHEAD' 411 'INTE' - 0 201702 2 0 0 0 - 0 0 10 10 3 300 - 0 0 7 0 2 1 - 1 2 2 0 0 0 - 155 122 130 3 0 0 - 0 0 25 40 58 0 - 99 112 180 5 0 1 - 18 24 10 7 2 4 - 0 1 1 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 1 2 - 2015 0 1 0 0 0 - 0 0 0 0 5 0 - 0 0 12 1 25 1 - 0 0 8 8 0 1 - 0 0 0 0 100 0 - 0 0 0 1 0 1 - 0 1 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 1 1 22 146 - 10 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 1 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 - 'LOGIHEAD' 121 'LOGI' - T T F F F F F F F F F F F F F F F F F F F F F F F - F F F F F F F F F F F F F F F F F F F F F F F F F - F F F F F F F F F F F F F F F F F F F F F F F F F - F F F F F F F F F F F F F F F F F F F F F F F F F - F F F F F F F F F F F F F F F F F F F F F - 'DOUBHEAD' 229 'DOUB' - 0.31000000000000D+02 0.43696265889462D+02 0.36500000000000D+03 - 0.10000000000000D+00 0.15000000000000D+00 0.30000000000000D+01 - 0.30000000000000D+00 0.10000000000000D+00 0.10000000000000D+00 - 0.10000000000000D-02 0.10000000000000D-06 0.10000000000000D-03 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.10000000000000D+02 0.10000000000000D-01 - 0.10000000000000D-05 0.10000000000000D-02 0.10000000000000D-02 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+21 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.10000000000000D-01 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+21 0.10000000000000D+21 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+21 0.10000000000000D+21 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - -0.10000000000000D+01 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.10000000000000D+21 - 0.10000000000000D+21 0.10000000000000D+12 0.12500000000000D+01 - 0.10000000000000D+12 0.10000000000000D+07 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+21 0.00000000000000D+00 0.25000000000000D-01 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+01 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.36500000000000D+03 0.10000000000000D+00 0.15000000000000D+00 - 0.30000000000000D+01 0.30000000000000D+00 0.10000000000000D+00 - 0.10000000000000D+00 0.10000000000000D-02 0.10000000000000D-06 - 0.10000000000000D-03 0.10000000000000D+02 0.10000000000000D-01 - 0.10000000000000D-05 0.10000000000000D-02 0.10000000000000D-02 - 0.00000000000000D+00 0.00000000000000D+00 0.10000000000000D-19 - 0.10130000000000D+01 0.00000000000000D+00 0.10000000000000D+01 - 0.00000000000000D+00 0.30000000000000D+00 0.20000000000000D+01 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.73597900000000D+06 0.73601000000000D+06 - 0.10000000000000D+01 0.20000000000000D+00 0.40000000000000D+00 - 0.12000000000000D+01 0.30000000000000D+00 0.10000000000000D+01 - 0.00000000000000D+00 0.00000000000000D+00 0.40000000000000D+00 - 0.70000000000000D+00 0.20000000000000D+01 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.10000000000000D+01 0.10000000000000D+01 - 0.10000000000000D+01 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+01 0.10000000000000D-03 0.00000000000000D+00 - 0.00000000000000D+00 0.10000000000000D+21 0.10000000000000D+21 - 0.10000000000000D+21 0.10000000000000D+21 0.10000000000000D+21 - 0.10000000000000D+21 0.10000000000000D+21 0.10000000000000D+21 - 0.10000000000000D+21 0.10000000000000D+21 0.10000000000000D+21 - 0.10000000000000D+21 0.10000000000000D+01 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.10000000000000D-03 -0.20000000000000D+21 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.10000000000000D-01 0.10000000000000D+01 - 0.00000000000000D+00 0.10000000000000D+21 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 - 'IGRP ' 198 'INTE' - 2 1 2 0 0 0 - 0 -1 0 0 0 0 - 0 0 -1 0 0 0 - 0 -1 0 0 0 0 - -1 0 0 0 0 1 - 2 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 1 1 0 0 0 0 - 0 1 1 1 0 1 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 1 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 2 2 0 - 0 0 0 0 2 2 - 'SGRP ' 224 'REAL' - 0.10000000E+21 0.10000000E+21 -0.10000000E+21 0.10000000E+21 - 0.00000000E+00 0.00000000E+00 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 -0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 -0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - -0.10000000E+21 0.00000000E+00 0.00000000E+00 0.00000000E+00 - -0.20000000E+21 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.10000000E+21 0.00000000E+00 0.10000000E+21 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.10000000E+01 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.10000000E+21 0.10000000E+21 -0.10000000E+21 0.10000000E+21 - 0.00000000E+00 0.00000000E+00 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 -0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 -0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - -0.10000000E+21 0.00000000E+00 0.00000000E+00 0.00000000E+00 - -0.20000000E+21 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.10000000E+21 0.00000000E+00 0.10000000E+21 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.10000000E+01 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 'XGRP ' 360 'DOUB' - 0.19999997276528D+05 0.26415877334273D-04 0.24867218027048D+05 - 0.33215043555368D+05 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+06 0.00000000000000D+00 0.13207940448264D-08 - 0.12433610706653D+01 0.61999995097751D+06 0.72808265167175D-03 - 0.77780996972619D+06 0.10334040682397D+07 0.00000000000000D+00 - 0.00000000000000D+00 0.31000000000000D+07 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.62000000000000D+06 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.31000000000000D+07 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.19999997276528D+05 0.26415877334273D-04 0.24867218027048D+05 - 0.33215043555368D+05 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+06 0.00000000000000D+00 0.13207940448264D-08 - 0.12433610706653D+01 0.61999995097751D+06 0.72808265167175D-03 - 0.77780996972619D+06 0.10334040682397D+07 0.00000000000000D+00 - 0.00000000000000D+00 0.31000000000000D+07 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.62000000000000D+06 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.31000000000000D+07 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 'ZGRP ' 10 'CHAR' - 'G1 ' ' ' ' ' ' ' ' ' 'FIELD ' ' ' - ' ' ' ' ' ' - 'IWEL ' 310 'INTE' - 10 10 3 3 1 1 - 1 1 1 0 1 0 - 0 0 0 1 0 -100 - 0 0 0 0 0 0 - -1 0 0 0 0 0 - 0 7 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 -1 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 1 - 1 1 1 1 1 4 - 3 3 0 1 0 0 - 0 0 3 0 -100 0 - 0 0 0 0 0 -1 - 0 0 0 0 0 0 - 7 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 -1 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 - 'SWEL ' 244 'REAL' - 0.20000000E+05 0.10000000E+21 0.10000000E+21 0.20000000E+05 - 0.10000000E+21 0.00000000E+00 0.10000000E+04 0.00000000E+00 - 0.00000000E+00 0.84000000E+04 0.00000000E+00 0.99999997E-05 - 0.00000000E+00 0.00000000E+00 0.10000000E+21 0.10000000E+21 - 0.00000000E+00 -0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.00000000E+00 - 0.10000000E+01 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+01 - 0.00000000E+00 0.10000000E+21 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.10000000E+21 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.10000000E+21 0.00000000E+00 0.00000000E+00 0.10000000E+01 - 0.10000000E+01 0.10000000E+01 0.00000000E+00 0.10000000E+21 - 0.00000000E+00 0.10000000E+21 0.10000000E+01 -0.10000000E+21 - 0.10000000E+01 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.50000000E+00 0.10000000E+01 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.00000000E+00 0.10000000E+01 0.10000000E+21 0.10000000E+21 - 0.10000000E+06 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.90140000E+04 0.00000000E+00 0.00000000E+00 0.83350000E+04 - 0.00000000E+00 0.99999997E-05 0.00000000E+00 0.00000000E+00 - 0.10000000E+21 0.10000000E+21 0.00000000E+00 -0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.00000000E+00 0.10000000E+01 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.10000000E+01 0.00000000E+00 0.10000000E+21 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.10000000E+21 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.10000000E+21 0.10000000E+21 0.00000000E+00 - 0.00000000E+00 0.10000000E+01 0.10000000E+01 0.10000000E+01 - 0.00000000E+00 0.10000000E+21 0.00000000E+00 0.10000000E+21 - 0.10000000E+01 -0.10000000E+21 0.10000000E+01 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.50000000E+00 0.10000000E+01 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.10000000E+21 0.00000000E+00 0.10000000E+01 - 'XWEL ' 260 'DOUB' - 0.19999997276528D+05 0.26415877334273D-04 0.24867218027048D+05 - 0.19999997302944D+05 0.33215043555368D+05 0.00000000000000D+00 - 0.22948902791082D+04 0.13207940448264D-08 0.12433610706653D+01 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.61999995097751D+06 0.72808265167175D-03 0.77780996972619D+06 - 0.10334040682397D+07 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.26415877334273D-04 0.24867218027048D+05 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.10000000000000D+04 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.62000000000000D+06 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - -0.10000000000000D+06 0.00000000000000D+00 -0.66629629442771D+05 - 0.00000000000000D+00 0.69883123933572D+04 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.31000000000000D+07 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.66629629442771D+00 - 0.00000000000000D+00 0.00000000000000D+00 -0.10000000000000D+06 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.90140000000000D+04 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.31000000000000D+07 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 -0.66629629442771D+05 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 - 'ZWEL ' 6 'CHAR' - 'PROD ' ' ' ' ' 'INJ ' ' ' ' ' - 'ICON ' 50 'INTE' - 1 10 10 3 0 1 - 0 0 0 0 0 0 - 1 3 0 0 0 0 - 0 0 0 0 0 0 - 0 1 1 1 1 0 - 1 0 0 0 0 0 - 0 1 3 0 0 0 - 0 0 0 0 0 0 - 0 0 - 'SCON ' 80 'REAL' - 0.10610335E+02 0.84000000E+04 0.50000000E+00 0.10000000E+05 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10610335E+02 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 -0.10000000E+21 -0.10000000E+21 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.10610335E+02 0.83350000E+04 0.50000000E+00 0.10000000E+05 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10610335E+02 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 -0.10000000E+21 -0.10000000E+21 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 'XCON ' 116 'DOUB' - 0.20000000362393D+05 0.26415915440816D-04 0.24867215765930D+05 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.22948902791082D+04 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - -0.99999998311386D+05 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.69883123933572D+04 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 - 'STARTSOL' 0 'MESS' - 'PRESSURE' 300 'REAL' - 0.60588403E+04 0.57454136E+04 0.54705708E+04 0.52445151E+04 - 0.50900640E+04 0.49855562E+04 0.49148579E+04 0.48679863E+04 - 0.48392529E+04 0.48255669E+04 0.57454287E+04 0.55704692E+04 - 0.53619561E+04 0.51886147E+04 0.50589043E+04 0.49663042E+04 - 0.49011792E+04 0.48568687E+04 0.48292100E+04 0.48158867E+04 - 0.54705679E+04 0.53619536E+04 0.52304648E+04 0.51084302E+04 - 0.50093613E+04 0.49329062E+04 0.48759189E+04 0.48353477E+04 - 0.48091284E+04 0.47962070E+04 0.52445093E+04 0.51886133E+04 - 0.51084307E+04 0.50265332E+04 0.49529888E+04 0.48912612E+04 - 0.48417827E+04 0.48042422E+04 0.47786626E+04 0.47655811E+04 - 0.50900625E+04 0.50589062E+04 0.50093633E+04 0.49529897E+04 - 0.48972192E+04 0.48459102E+04 0.48009688E+04 0.47638682E+04 - 0.47366221E+04 0.47218877E+04 0.49855620E+04 0.49663091E+04 - 0.49329097E+04 0.48912642E+04 0.48459116E+04 0.47997676E+04 - 0.47549106E+04 0.47138057E+04 0.46805015E+04 0.46609771E+04 - 0.49148647E+04 0.49011851E+04 0.48759243E+04 0.48417866E+04 - 0.48009712E+04 0.47549116E+04 0.47048628E+04 0.46533047E+04 - 0.46061924E+04 0.45751797E+04 0.48679932E+04 0.48568750E+04 - 0.48353530E+04 0.48042466E+04 0.47638716E+04 0.47138076E+04 - 0.46533057E+04 0.45828857E+04 0.45084658E+04 0.44500474E+04 - 0.48392603E+04 0.48292168E+04 0.48091348E+04 0.47786675E+04 - 0.47366260E+04 0.46805034E+04 0.46061934E+04 0.45084663E+04 - 0.43849194E+04 0.42558145E+04 0.48255737E+04 0.48158936E+04 - 0.47962129E+04 0.47655864E+04 0.47218911E+04 0.46609790E+04 - 0.45751807E+04 0.44500479E+04 0.42558145E+04 0.39244998E+04 - 0.60611665E+04 0.57502769E+04 0.54768604E+04 0.52512725E+04 - 0.50968604E+04 0.49923579E+04 0.49216606E+04 0.48747896E+04 - 0.48460571E+04 0.48323711E+04 0.57502905E+04 0.55766665E+04 - 0.53686880E+04 0.51953975E+04 0.50657070E+04 0.49731060E+04 - 0.49079819E+04 0.48636719E+04 0.48360142E+04 0.48226914E+04 - 0.54768579E+04 0.53686860E+04 0.52372417E+04 0.51152339E+04 - 0.50161636E+04 0.49397085E+04 0.48827222E+04 0.48421519E+04 - 0.48159331E+04 0.48030122E+04 0.52512661E+04 0.51953960E+04 - 0.51152339E+04 0.50333354E+04 0.49597910E+04 0.48980645E+04 - 0.48485869E+04 0.48110469E+04 0.47854678E+04 0.47723872E+04 - 0.50968589E+04 0.50657090E+04 0.50161655E+04 0.49597925E+04 - 0.49040225E+04 0.48527139E+04 0.48077734E+04 0.47706738E+04 - 0.47434282E+04 0.47286938E+04 0.49923638E+04 0.49731108E+04 - 0.49397124E+04 0.48980669E+04 0.48527153E+04 0.48065723E+04 - 0.47617158E+04 0.47206113E+04 0.46873071E+04 0.46677822E+04 - 0.49216675E+04 0.49079878E+04 0.48827271E+04 0.48485903E+04 - 0.48077759E+04 0.47617173E+04 0.47116680E+04 0.46601099E+04 - 0.46129966E+04 0.45819824E+04 0.48747964E+04 0.48636787E+04 - 0.48421572E+04 0.48110513E+04 0.47706768E+04 0.47206133E+04 - 0.46601108E+04 0.45896890E+04 0.45152656E+04 0.44568433E+04 - 0.48460640E+04 0.48360210E+04 0.48159395E+04 0.47854727E+04 - 0.47434316E+04 0.46873091E+04 0.46129976E+04 0.45152656E+04 - 0.43917109E+04 0.42625854E+04 0.48323779E+04 0.48226982E+04 - 0.48030181E+04 0.47723921E+04 0.47286973E+04 0.46677842E+04 - 0.45819834E+04 0.44568438E+04 0.42625854E+04 0.39290393E+04 - 0.60657729E+04 0.57605703E+04 0.54874468E+04 0.52621743E+04 - 0.51077881E+04 0.50032788E+04 0.49325713E+04 0.48856938E+04 - 0.48569575E+04 0.48432700E+04 0.57605840E+04 0.55872339E+04 - 0.53795742E+04 0.52063223E+04 0.50766382E+04 0.49840239E+04 - 0.49188911E+04 0.48745752E+04 0.48469136E+04 0.48335889E+04 - 0.54874443E+04 0.53795718E+04 0.52481636E+04 0.51261719E+04 - 0.50270879E+04 0.49506221E+04 0.48936279E+04 0.48530518E+04 - 0.48268296E+04 0.48139067E+04 0.52621680E+04 0.52063208E+04 - 0.51261724E+04 0.50442622E+04 0.49707070E+04 0.49089722E+04 - 0.48594878E+04 0.48219424E+04 0.47963604E+04 0.47832773E+04 - 0.51077871E+04 0.50766401E+04 0.50270898E+04 0.49707085E+04 - 0.49149307E+04 0.48636157E+04 0.48186685E+04 0.47815640E+04 - 0.47543145E+04 0.47395781E+04 0.50032847E+04 0.49840293E+04 - 0.49506255E+04 0.49089746E+04 0.48636167E+04 0.48174673E+04 - 0.47726050E+04 0.47314946E+04 0.46981855E+04 0.46786577E+04 - 0.49325781E+04 0.49188970E+04 0.48936328E+04 0.48594912E+04 - 0.48186709E+04 0.47726060E+04 0.47225498E+04 0.46709844E+04 - 0.46238643E+04 0.45928452E+04 0.48857007E+04 0.48745815E+04 - 0.48530571E+04 0.48219473E+04 0.47815669E+04 0.47314966E+04 - 0.46709854E+04 0.46005532E+04 0.45261187E+04 0.44676875E+04 - 0.48569648E+04 0.48469199E+04 0.48268359E+04 0.47963647E+04 - 0.47543184E+04 0.46981875E+04 0.46238652E+04 0.45261187E+04 - 0.44025449E+04 0.42733877E+04 0.48432769E+04 0.48335957E+04 - 0.48139126E+04 0.47832822E+04 0.47395815E+04 0.46786602E+04 - 0.45928462E+04 0.44676880E+04 0.42733877E+04 0.39363494E+04 - 'RS ' 300 'REAL' - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12393320E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12408754E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12433608E+01 - 'SGAS ' 300 'REAL' - 0.30114862E+00 0.21843253E+00 0.12062114E+00 0.31454157E-01 - 0.17723060E-02 0.52992932E-16 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.16110798E-15 0.21839151E+00 0.13427904E+00 - 0.48547398E-01 0.55207838E-02 0.00000000E+00 0.00000000E+00 - 0.16440458E-17 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.12058016E+00 0.48535347E-01 0.73651937E-02 0.00000000E+00 - 0.12051472E-15 0.26842793E-16 0.29375285E-16 0.00000000E+00 - 0.32132268E-16 0.17681159E-15 0.31426348E-01 0.55171140E-02 - 0.00000000E+00 0.00000000E+00 0.32399866E-17 0.84892909E-17 - -0.12623373E-16 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.17685277E-02 0.54669124E-17 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.82945222E-17 0.00000000E+00 0.00000000E+00 - -0.60004393E-17 0.44100830E-16 0.26681447E-17 -0.39915703E-16 - 0.00000000E+00 0.14267794E-15 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.42264383E-16 0.12631454E-15 - 0.30271541E-16 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.19865242E-16 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.19711393E-17 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.27728641E-16 0.24101623E-16 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.16827498E-01 - 0.19351202E+00 0.12163286E-01 0.97643451E-05 0.18482400E-16 - 0.00000000E+00 0.14041242E-16 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.13814861E-01 0.00000000E+00 - 0.71867199E-16 0.00000000E+00 0.96482914E-13 0.12299789E-15 - 0.10782554E-16 0.23616680E-16 0.11185566E-15 0.14519137E-16 - 0.16730560E-17 0.00000000E+00 0.94071660E-10 0.60406507E-13 - 0.00000000E+00 0.00000000E+00 0.20201693E-16 0.22826204E-17 - 0.16063558E-16 0.59413554E-17 0.00000000E+00 0.60980193E-10 - -0.43845966E-16 -0.24259867E-16 0.37896400E-16 0.62463048E-16 - 0.00000000E+00 0.33742163E-16 0.22380452E-16 0.00000000E+00 - 0.59241749E-16 0.00000000E+00 -0.41864947E-17 0.00000000E+00 - 0.33622834E-16 0.00000000E+00 0.00000000E+00 0.87014603E-16 - 0.00000000E+00 0.14635243E-15 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.43861093E-16 0.17511486E-16 0.00000000E+00 0.00000000E+00 - 0.61113335E-16 0.00000000E+00 0.78884516E-16 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.11163528E-15 0.56506355E-16 0.12027341E-15 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.37402302E-16 0.34101173E-16 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.55405110E-16 - 0.00000000E+00 0.15803863E-16 0.00000000E+00 0.93121737E-16 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.26542038E-17 0.00000000E+00 0.00000000E+00 0.34308067E-16 - 0.96872617E-16 0.16022196E-15 0.76001315E-16 0.12752785E-01 - 0.64150770E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.51030562E-10 0.24390178E-16 0.49885306E-17 0.00000000E+00 - 0.41338225E-16 0.00000000E+00 0.00000000E+00 0.32771217E-06 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.14432707E-14 - 0.00000000E+00 0.11083938E-16 0.00000000E+00 0.17260402E-16 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.35185483E-12 - 0.66923427E-15 0.14291950E-15 0.00000000E+00 0.20789866E-16 - 0.44561216E-16 0.00000000E+00 0.00000000E+00 0.30658544E-13 - 0.15139973E-12 0.00000000E+00 0.00000000E+00 0.18025091E-16 - 0.00000000E+00 0.74646195E-16 0.00000000E+00 0.67211972E-16 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.23420669E-16 - 0.80824810E-16 0.00000000E+00 0.00000000E+00 0.70905366E-16 - 0.00000000E+00 0.87413575E-16 -0.14146650E-16 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.65448859E-17 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.80679511E-16 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.74947209E-16 0.35980993E-16 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.13357094E-15 0.49563924E-16 0.00000000E+00 0.64334118E-16 - 0.00000000E+00 0.14101716E-16 0.00000000E+00 0.79028763E-16 - -0.19814428E-16 0.14828777E-15 0.00000000E+00 0.23289661E-15 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.22781267E-16 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.68290139E-16 - 0.00000000E+00 0.15013085E-15 0.00000000E+00 0.12571848E-01 - 'SWAT ' 300 'REAL' - 0.11905102E+00 0.11928332E+00 0.11948740E+00 0.11965552E+00 - 0.11977052E+00 0.11984839E+00 0.11990111E+00 0.11993606E+00 - 0.11995750E+00 0.11996771E+00 0.11928331E+00 0.11941318E+00 - 0.11956815E+00 0.11969712E+00 0.11979373E+00 0.11986274E+00 - 0.11991131E+00 0.11994436E+00 0.11996499E+00 0.11997493E+00 - 0.11948740E+00 0.11956815E+00 0.11966597E+00 0.11975683E+00 - 0.11983065E+00 0.11988764E+00 0.11993015E+00 0.11996041E+00 - 0.11997998E+00 0.11998962E+00 0.11965552E+00 0.11969712E+00 - 0.11975683E+00 0.11981785E+00 0.11987267E+00 0.11991870E+00 - 0.11995561E+00 0.11998362E+00 0.12000272E+00 0.12001248E+00 - 0.11977052E+00 0.11979373E+00 0.11983065E+00 0.11987267E+00 - 0.11991426E+00 0.11995253E+00 0.11998606E+00 0.12001376E+00 - 0.12003410E+00 0.12004510E+00 0.11984839E+00 0.11986274E+00 - 0.11988764E+00 0.11991870E+00 0.11995253E+00 0.11998697E+00 - 0.12002044E+00 0.12005113E+00 0.12007600E+00 0.12009058E+00 - 0.11990110E+00 0.11991130E+00 0.11993014E+00 0.11995561E+00 - 0.11998606E+00 0.12002044E+00 0.12005781E+00 0.12009632E+00 - 0.12013151E+00 0.12015469E+00 0.11993606E+00 0.11994435E+00 - 0.11996041E+00 0.11998362E+00 0.12001376E+00 0.12005113E+00 - 0.12009632E+00 0.12014893E+00 0.12020455E+00 0.12024824E+00 - 0.11995749E+00 0.11996499E+00 0.11997997E+00 0.12000271E+00 - 0.12003409E+00 0.12007600E+00 0.12013151E+00 0.12020455E+00 - 0.12029696E+00 0.12039360E+00 0.11996771E+00 0.11997493E+00 - 0.11998962E+00 0.12001248E+00 0.12004510E+00 0.12009058E+00 - 0.12015469E+00 0.12024824E+00 0.12039360E+00 0.12064195E+00 - 0.11905433E+00 0.11928476E+00 0.11948778E+00 0.11965556E+00 - 0.11977053E+00 0.11984840E+00 0.11990111E+00 0.11993606E+00 - 0.11995750E+00 0.11996771E+00 0.11928475E+00 0.11941364E+00 - 0.11956821E+00 0.11969715E+00 0.11979374E+00 0.11986275E+00 - 0.11991131E+00 0.11994436E+00 0.11996499E+00 0.11997493E+00 - 0.11948778E+00 0.11956821E+00 0.11966600E+00 0.11975684E+00 - 0.11983065E+00 0.11988765E+00 0.11993015E+00 0.11996041E+00 - 0.11997998E+00 0.11998962E+00 0.11965556E+00 0.11969715E+00 - 0.11975684E+00 0.11981785E+00 0.11987267E+00 0.11991870E+00 - 0.11995561E+00 0.11998363E+00 0.12000272E+00 0.12001248E+00 - 0.11977053E+00 0.11979374E+00 0.11983065E+00 0.11987267E+00 - 0.11991426E+00 0.11995254E+00 0.11998607E+00 0.12001376E+00 - 0.12003410E+00 0.12004510E+00 0.11984839E+00 0.11986274E+00 - 0.11988765E+00 0.11991870E+00 0.11995254E+00 0.11998697E+00 - 0.12002044E+00 0.12005113E+00 0.12007600E+00 0.12009059E+00 - 0.11990111E+00 0.11991131E+00 0.11993015E+00 0.11995561E+00 - 0.11998606E+00 0.12002044E+00 0.12005781E+00 0.12009632E+00 - 0.12013151E+00 0.12015469E+00 0.11993606E+00 0.11994436E+00 - 0.11996041E+00 0.11998362E+00 0.12001376E+00 0.12005113E+00 - 0.12009632E+00 0.12014893E+00 0.12020456E+00 0.12024824E+00 - 0.11995750E+00 0.11996499E+00 0.11997998E+00 0.12000271E+00 - 0.12003410E+00 0.12007600E+00 0.12013151E+00 0.12020456E+00 - 0.12029697E+00 0.12039362E+00 0.11996771E+00 0.11997493E+00 - 0.11998962E+00 0.12001248E+00 0.12004510E+00 0.12009058E+00 - 0.12015469E+00 0.12024824E+00 0.12039362E+00 0.12064365E+00 - 0.11905899E+00 0.11928521E+00 0.11948802E+00 0.11965555E+00 - 0.11977050E+00 0.11984838E+00 0.11990110E+00 0.11993606E+00 - 0.11995750E+00 0.11996771E+00 0.11928520E+00 0.11941388E+00 - 0.11956821E+00 0.11969712E+00 0.11979371E+00 0.11986273E+00 - 0.11991130E+00 0.11994436E+00 0.11996499E+00 0.11997493E+00 - 0.11948802E+00 0.11956821E+00 0.11966597E+00 0.11975680E+00 - 0.11983063E+00 0.11988764E+00 0.11993014E+00 0.11996041E+00 - 0.11997998E+00 0.11998962E+00 0.11965555E+00 0.11969712E+00 - 0.11975680E+00 0.11981783E+00 0.11987266E+00 0.11991870E+00 - 0.11995561E+00 0.11998362E+00 0.12000272E+00 0.12001248E+00 - 0.11977050E+00 0.11979371E+00 0.11983063E+00 0.11987266E+00 - 0.11991425E+00 0.11995253E+00 0.11998606E+00 0.12001376E+00 - 0.12003411E+00 0.12004510E+00 0.11984837E+00 0.11986273E+00 - 0.11988764E+00 0.11991870E+00 0.11995253E+00 0.11998697E+00 - 0.12002045E+00 0.12005114E+00 0.12007602E+00 0.12009060E+00 - 0.11990109E+00 0.11991129E+00 0.11993013E+00 0.11995561E+00 - 0.11998606E+00 0.12002045E+00 0.12005782E+00 0.12009633E+00 - 0.12013153E+00 0.12015472E+00 0.11993606E+00 0.11994435E+00 - 0.11996040E+00 0.11998362E+00 0.12001376E+00 0.12005114E+00 - 0.12009633E+00 0.12014895E+00 0.12020459E+00 0.12024828E+00 - 0.11995749E+00 0.11996499E+00 0.11997997E+00 0.12000271E+00 - 0.12003410E+00 0.12007602E+00 0.12013153E+00 0.12020459E+00 - 0.12029701E+00 0.12039369E+00 0.11996771E+00 0.11997493E+00 - 0.11998962E+00 0.12001248E+00 0.12004510E+00 0.12009060E+00 - 0.12015471E+00 0.12024828E+00 0.12039369E+00 0.12064634E+00 - 'ENDSOL ' 0 'MESS' - 'SEQNUM ' 1 'INTE' - 2 - 'INTEHEAD' 411 'INTE' - 0 201702 2 0 0 0 - 0 0 10 10 3 300 - 0 0 7 0 2 1 - 1 2 2 0 0 0 - 155 122 130 3 0 0 - 0 0 25 40 58 0 - 99 112 180 5 0 1 - 18 24 10 7 2 4 - 0 1 1 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 1 3 - 2015 1 2 0 0 0 - 0 0 0 0 5 0 - 0 0 12 1 25 1 - 0 0 8 8 0 1 - 0 0 0 0 100 0 - 0 0 0 1 0 1 - 0 1 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 1 1 22 146 - 10 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 1 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 - 'LOGIHEAD' 121 'LOGI' - T T F F F F F F F F F F F F F F F F F F F F F F F - F F F F F F F F F F F F F F F F F F F F F F F F F - F F F F F F F F F F F F F F F F F F F F F F F F F - F F F F F F F F F F F F F F F F F F F F F F F F F - F F F F F F F F F F F F F F F F F F F F F - 'DOUBHEAD' 229 'DOUB' - 0.59000000000000D+02 0.73334901191008D+02 0.36500000000000D+03 - 0.10000000000000D+00 0.15000000000000D+00 0.30000000000000D+01 - 0.30000000000000D+00 0.10000000000000D+00 0.10000000000000D+00 - 0.10000000000000D-02 0.10000000000000D-06 0.10000000000000D-03 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.10000000000000D+02 0.10000000000000D-01 - 0.10000000000000D-05 0.10000000000000D-02 0.10000000000000D-02 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+21 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.10000000000000D-01 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+21 0.10000000000000D+21 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+21 0.10000000000000D+21 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - -0.10000000000000D+01 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.10000000000000D+21 - 0.10000000000000D+21 0.10000000000000D+12 0.12500000000000D+01 - 0.10000000000000D+12 0.10000000000000D+07 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+21 0.00000000000000D+00 0.25000000000000D-01 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+01 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.36500000000000D+03 0.10000000000000D+00 0.15000000000000D+00 - 0.30000000000000D+01 0.30000000000000D+00 0.10000000000000D+00 - 0.10000000000000D+00 0.10000000000000D-02 0.10000000000000D-06 - 0.10000000000000D-03 0.10000000000000D+02 0.10000000000000D-01 - 0.10000000000000D-05 0.10000000000000D-02 0.10000000000000D-02 - 0.00000000000000D+00 0.00000000000000D+00 0.10000000000000D-19 - 0.10130000000000D+01 0.00000000000000D+00 0.10000000000000D+01 - 0.00000000000000D+00 0.30000000000000D+00 0.20000000000000D+01 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.73597900000000D+06 0.73603800000000D+06 - 0.10000000000000D+01 0.20000000000000D+00 0.40000000000000D+00 - 0.12000000000000D+01 0.30000000000000D+00 0.10000000000000D+01 - 0.00000000000000D+00 0.00000000000000D+00 0.40000000000000D+00 - 0.70000000000000D+00 0.20000000000000D+01 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.10000000000000D+01 0.10000000000000D+01 - 0.10000000000000D+01 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+01 0.10000000000000D-03 0.00000000000000D+00 - 0.00000000000000D+00 0.10000000000000D+21 0.10000000000000D+21 - 0.10000000000000D+21 0.10000000000000D+21 0.10000000000000D+21 - 0.10000000000000D+21 0.10000000000000D+21 0.10000000000000D+21 - 0.10000000000000D+21 0.10000000000000D+21 0.10000000000000D+21 - 0.10000000000000D+21 0.10000000000000D+01 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.10000000000000D-03 -0.20000000000000D+21 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.10000000000000D-01 0.10000000000000D+01 - 0.00000000000000D+00 0.10000000000000D+21 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 - 'IGRP ' 198 'INTE' - 2 1 2 0 0 0 - 0 -1 0 0 0 0 - 0 0 -1 0 0 0 - 0 -1 0 0 0 0 - -1 0 0 0 0 1 - 2 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 1 1 0 0 0 0 - 0 1 1 1 0 1 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 1 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 2 2 0 - 0 0 0 0 2 2 - 'SGRP ' 224 'REAL' - 0.10000000E+21 0.10000000E+21 -0.10000000E+21 0.10000000E+21 - 0.00000000E+00 0.00000000E+00 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 -0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 -0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - -0.10000000E+21 0.00000000E+00 0.00000000E+00 0.00000000E+00 - -0.20000000E+21 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.10000000E+21 0.00000000E+00 0.10000000E+21 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.10000000E+01 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.10000000E+21 0.10000000E+21 -0.10000000E+21 0.10000000E+21 - 0.00000000E+00 0.00000000E+00 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 -0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 -0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - -0.10000000E+21 0.00000000E+00 0.00000000E+00 0.00000000E+00 - -0.20000000E+21 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.10000000E+21 0.00000000E+00 0.10000000E+21 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.10000000E+01 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 'XGRP ' 360 'DOUB' - 0.19999999909952D+05 0.28177285884697D-04 0.24679956410630D+05 - 0.33085512219646D+05 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+06 0.00000000000000D+00 0.14088642985932D-08 - 0.12339978260875D+01 0.11799999484562D+07 0.15170466564433D-02 - 0.14688487492238D+07 0.19597984103898D+07 0.00000000000000D+00 - 0.00000000000000D+00 0.59000000000000D+07 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.11800000000000D+07 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.59000000000000D+07 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.19999999909952D+05 0.28177285884697D-04 0.24679956410630D+05 - 0.33085512219646D+05 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+06 0.00000000000000D+00 0.14088642985932D-08 - 0.12339978260875D+01 0.11799999484562D+07 0.15170466564433D-02 - 0.14688487492238D+07 0.19597984103898D+07 0.00000000000000D+00 - 0.00000000000000D+00 0.59000000000000D+07 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.11800000000000D+07 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.59000000000000D+07 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 'ZGRP ' 10 'CHAR' - 'G1 ' ' ' ' ' ' ' ' ' 'FIELD ' ' ' - ' ' ' ' ' ' - 'IWEL ' 310 'INTE' - 10 10 3 3 1 1 - 1 1 1 0 1 0 - 0 0 0 1 0 -100 - 0 0 0 0 0 0 - -1 0 0 0 0 0 - 0 7 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 -1 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 1 - 1 1 1 1 1 4 - 3 3 0 1 0 0 - 0 0 3 0 -100 0 - 0 0 0 0 0 -1 - 0 0 0 0 0 0 - 7 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 -1 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 - 'SWEL ' 244 'REAL' - 0.20000000E+05 0.10000000E+21 0.10000000E+21 0.20000000E+05 - 0.10000000E+21 0.00000000E+00 0.10000000E+04 0.00000000E+00 - 0.00000000E+00 0.84000000E+04 0.00000000E+00 0.99999997E-05 - 0.00000000E+00 0.00000000E+00 0.10000000E+21 0.10000000E+21 - 0.00000000E+00 -0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.00000000E+00 - 0.10000000E+01 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+01 - 0.00000000E+00 0.10000000E+21 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.10000000E+21 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.10000000E+21 0.00000000E+00 0.00000000E+00 0.10000000E+01 - 0.10000000E+01 0.10000000E+01 0.00000000E+00 0.10000000E+21 - 0.00000000E+00 0.10000000E+21 0.10000000E+01 -0.10000000E+21 - 0.10000000E+01 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.50000000E+00 0.10000000E+01 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.00000000E+00 0.10000000E+01 0.10000000E+21 0.10000000E+21 - 0.10000000E+06 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.90140000E+04 0.00000000E+00 0.00000000E+00 0.83350000E+04 - 0.00000000E+00 0.99999997E-05 0.00000000E+00 0.00000000E+00 - 0.10000000E+21 0.10000000E+21 0.00000000E+00 -0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.00000000E+00 0.10000000E+01 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.10000000E+01 0.00000000E+00 0.10000000E+21 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.10000000E+21 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.10000000E+21 0.10000000E+21 0.00000000E+00 - 0.00000000E+00 0.10000000E+01 0.10000000E+01 0.10000000E+01 - 0.00000000E+00 0.10000000E+21 0.00000000E+00 0.10000000E+21 - 0.10000000E+01 -0.10000000E+21 0.10000000E+01 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.50000000E+00 0.10000000E+01 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.10000000E+21 0.00000000E+00 0.10000000E+01 - 'XWEL ' 260 'DOUB' - 0.19999999909952D+05 0.28177285884697D-04 0.24679956410630D+05 - 0.19999999938130D+05 0.33085512219646D+05 0.00000000000000D+00 - 0.22330500474069D+04 0.14088642985932D-08 0.12339978260875D+01 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.11799999484562D+07 0.15170466564433D-02 0.14688487492238D+07 - 0.19597984103898D+07 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.28177285884697D-04 0.24679956410630D+05 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.10000000000000D+04 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.11800000000000D+07 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - -0.10000000000000D+06 0.00000000000000D+00 -0.65505014692662D+05 - 0.00000000000000D+00 0.66861523022109D+04 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.59000000000000D+07 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.65505014692662D+00 - 0.00000000000000D+00 0.00000000000000D+00 -0.10000000000000D+06 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.90140000000000D+04 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.59000000000000D+07 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 -0.65505014692662D+05 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 - 'ZWEL ' 6 'CHAR' - 'PROD ' ' ' ' ' 'INJ ' ' ' ' ' - 'ICON ' 50 'INTE' - 1 10 10 3 0 1 - 0 0 0 0 0 0 - 1 3 0 0 0 0 - 0 0 0 0 0 0 - 0 1 1 1 1 0 - 1 0 0 0 0 0 - 0 1 3 0 0 0 - 0 0 0 0 0 0 - 0 0 - 'SCON ' 80 'REAL' - 0.10610335E+02 0.84000000E+04 0.50000000E+00 0.10000000E+05 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10610335E+02 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 -0.10000000E+21 -0.10000000E+21 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.10610335E+02 0.83350000E+04 0.50000000E+00 0.10000000E+05 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10610335E+02 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 -0.10000000E+21 -0.10000000E+21 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 'XCON ' 116 'DOUB' - 0.20000000042225D+05 0.28177291429918D-04 0.24679955295790D+05 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.22330500474069D+04 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - -0.99999998819164D+05 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.66861523022109D+04 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 - 'STARTSOL' 0 'MESS' - 'PRESSURE' 300 'REAL' - 0.60806201E+04 0.58573550E+04 0.56467563E+04 0.54464790E+04 - 0.52687778E+04 0.51351841E+04 0.50377461E+04 0.49700908E+04 - 0.49270977E+04 0.49061558E+04 0.58572847E+04 0.57277881E+04 - 0.55581943E+04 0.53815137E+04 0.52284277E+04 0.51074072E+04 - 0.50171929E+04 0.49528525E+04 0.49113018E+04 0.48908755E+04 - 0.56468145E+04 0.55582241E+04 0.54253828E+04 0.52868271E+04 - 0.51622173E+04 0.50598486E+04 0.49794097E+04 0.49198037E+04 - 0.48802354E+04 0.48604458E+04 0.54465459E+04 0.53815620E+04 - 0.52868638E+04 0.51833555E+04 0.50857725E+04 0.49999590E+04 - 0.49284995E+04 0.48728862E+04 0.48344966E+04 0.48147803E+04 - 0.52688330E+04 0.52284863E+04 0.51623149E+04 0.50857891E+04 - 0.50077603E+04 0.49339619E+04 0.48682412E+04 0.48138267E+04 - 0.47741694E+04 0.47529585E+04 0.51352231E+04 0.51074424E+04 - 0.50598711E+04 0.49999717E+04 0.49339658E+04 0.48665952E+04 - 0.48018052E+04 0.47438364E+04 0.46982856E+04 0.46723130E+04 - 0.50377749E+04 0.50172188E+04 0.49794282E+04 0.49285117E+04 - 0.48682471E+04 0.48018076E+04 0.47322759E+04 0.46639541E+04 - 0.46044775E+04 0.45668672E+04 0.49701138E+04 0.49528730E+04 - 0.49198203E+04 0.48728979E+04 0.48138340E+04 0.47438398E+04 - 0.46639556E+04 0.45765562E+04 0.44893501E+04 0.44239136E+04 - 0.49271147E+04 0.49113174E+04 0.48802485E+04 0.48345068E+04 - 0.47741768E+04 0.46982900E+04 0.46044800E+04 0.44893506E+04 - 0.43522617E+04 0.42150737E+04 0.49061694E+04 0.48908877E+04 - 0.48604565E+04 0.48147896E+04 0.47529658E+04 0.46723184E+04 - 0.45668701E+04 0.44239150E+04 0.42150742E+04 0.38723936E+04 - 0.60832710E+04 0.58612588E+04 0.56524609E+04 0.54529873E+04 - 0.52755679E+04 0.51419946E+04 0.50445630E+04 0.49769038E+04 - 0.49339082E+04 0.49129648E+04 0.58611621E+04 0.57333369E+04 - 0.55645928E+04 0.53882607E+04 0.52352300E+04 0.51142285E+04 - 0.50240083E+04 0.49596646E+04 0.49181113E+04 0.48976841E+04 - 0.56525171E+04 0.55646226E+04 0.54321055E+04 0.52936270E+04 - 0.51690410E+04 0.50666665E+04 0.49862231E+04 0.49266138E+04 - 0.48870435E+04 0.48672524E+04 0.54530537E+04 0.53883086E+04 - 0.52936631E+04 0.51901797E+04 0.50925923E+04 0.50067734E+04 - 0.49353101E+04 0.48796938E+04 0.48413018E+04 0.48215845E+04 - 0.52756226E+04 0.52352886E+04 0.51691387E+04 0.50926094E+04 - 0.50145757E+04 0.49407725E+04 0.48750483E+04 0.48206309E+04 - 0.47809707E+04 0.47597588E+04 0.51420342E+04 0.51142637E+04 - 0.50666895E+04 0.50067861E+04 0.49407769E+04 0.48734023E+04 - 0.48086084E+04 0.47506362E+04 0.47050825E+04 0.46791079E+04 - 0.50445913E+04 0.50240342E+04 0.49862417E+04 0.49353223E+04 - 0.48750547E+04 0.48086108E+04 0.47390747E+04 0.46707485E+04 - 0.46112676E+04 0.45736538E+04 0.49769263E+04 0.49596846E+04 - 0.49266304E+04 0.48797051E+04 0.48206377E+04 0.47506396E+04 - 0.46707495E+04 0.45833442E+04 0.44961304E+04 0.44306890E+04 - 0.49339253E+04 0.49181270E+04 0.48870566E+04 0.48413125E+04 - 0.47809780E+04 0.47050869E+04 0.46112700E+04 0.44961313E+04 - 0.43590303E+04 0.42218208E+04 0.49129785E+04 0.48976963E+04 - 0.48672632E+04 0.48215938E+04 0.47597661E+04 0.46791133E+04 - 0.45736567E+04 0.44306904E+04 0.42218218E+04 0.38768457E+04 - 0.60877495E+04 0.58717881E+04 0.56630879E+04 0.54637290E+04 - 0.52864863E+04 0.51529268E+04 0.50554937E+04 0.49878242E+04 - 0.49448223E+04 0.49238760E+04 0.58716924E+04 0.57439712E+04 - 0.55753140E+04 0.53991475E+04 0.52461587E+04 0.51251704E+04 - 0.50349360E+04 0.49705820E+04 0.49290229E+04 0.49085923E+04 - 0.56631436E+04 0.55753433E+04 0.54429761E+04 0.53045557E+04 - 0.51799902E+04 0.50776006E+04 0.49971450E+04 0.49375269E+04 - 0.48979502E+04 0.48781562E+04 0.54637954E+04 0.53991953E+04 - 0.53045923E+04 0.52011299E+04 0.51035303E+04 0.50176987E+04 - 0.49462246E+04 0.48905996E+04 0.48522021E+04 0.48324814E+04 - 0.52865410E+04 0.52462173E+04 0.51800869E+04 0.51035474E+04 - 0.50255020E+04 0.49516880E+04 0.48859536E+04 0.48315278E+04 - 0.47918618E+04 0.47706465E+04 0.51529658E+04 0.51252056E+04 - 0.50776235E+04 0.50177114E+04 0.49516919E+04 0.48843071E+04 - 0.48195034E+04 0.47615225E+04 0.47159619E+04 0.46899834E+04 - 0.50555225E+04 0.50349619E+04 0.49971636E+04 0.49462363E+04 - 0.48859595E+04 0.48195059E+04 0.47499590E+04 0.46816226E+04 - 0.46221328E+04 0.45845132E+04 0.49878467E+04 0.49706025E+04 - 0.49375430E+04 0.48906108E+04 0.48315347E+04 0.47615259E+04 - 0.46816235E+04 0.45942046E+04 0.45069775E+04 0.44415254E+04 - 0.49448389E+04 0.49290386E+04 0.48979634E+04 0.48522124E+04 - 0.47918691E+04 0.47159663E+04 0.46221348E+04 0.45069785E+04 - 0.43698560E+04 0.42326128E+04 0.49238896E+04 0.49086045E+04 - 0.48781675E+04 0.48324912E+04 0.47706538E+04 0.46899888E+04 - 0.45845161E+04 0.44415273E+04 0.42326133E+04 0.38841211E+04 - 'RS ' 300 'REAL' - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12216158E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12231295E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12256032E+01 - 'SGAS ' 300 'REAL' - 0.35011876E+00 0.28814372E+00 0.21412005E+00 0.12666477E+00 - 0.42947277E-01 0.47435225E-02 0.00000000E+00 0.00000000E+00 - 0.42906946E-17 0.20833621E-15 0.28832027E+00 0.22605617E+00 - 0.14930384E+00 0.68342470E-01 0.15780408E-01 0.47113657E-16 - 0.12728198E-16 0.39020335E-17 0.00000000E+00 0.00000000E+00 - 0.21417016E+00 0.14930998E+00 0.77832304E-01 0.23803795E-01 - 0.00000000E+00 0.41138119E-04 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.18993824E-15 0.12668622E+00 0.68347543E-01 - 0.23800964E-01 0.12076634E-02 0.00000000E+00 0.00000000E+00 - 0.59331168E-07 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.42964146E-01 0.15782099E-01 0.72948850E-03 0.53665804E-16 - 0.00000000E+00 0.11003286E-06 0.00000000E+00 0.73305135E-17 - 0.00000000E+00 0.13423692E-16 0.47475509E-02 0.00000000E+00 - 0.58810675E-16 0.16183720E-15 0.55305371E-07 0.37502192E-16 - 0.00000000E+00 0.12663652E-15 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.90731946E-16 0.00000000E+00 0.93267036E-16 - 0.00000000E+00 0.26949723E-16 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.34710801E-16 0.00000000E+00 0.00000000E+00 - -0.28683530E-16 0.00000000E+00 0.11110200E-15 0.86059335E-16 - 0.98158757E-16 0.00000000E+00 0.40999961E-16 0.78797569E-16 - 0.00000000E+00 0.32304808E-16 0.10824329E-15 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.50998024E-16 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.29684260E-16 0.00000000E+00 0.36093090E-01 - 0.26199299E+00 0.33674296E-01 0.42177673E-03 0.00000000E+00 - 0.43785763E-16 0.42411572E-16 0.00000000E+00 0.10311749E-16 - 0.00000000E+00 0.50727605E-16 0.34982469E-01 0.52260474E-03 - 0.69472948E-16 0.29536006E-16 0.00000000E+00 0.81427543E-15 - 0.10150695E-15 0.00000000E+00 0.17210336E-15 0.00000000E+00 - 0.45154887E-03 0.00000000E+00 0.91104790E-10 0.00000000E+00 - 0.16275834E-05 0.00000000E+00 0.00000000E+00 0.15500890E-16 - 0.14946680E-15 0.00000000E+00 0.00000000E+00 0.59062033E-10 - 0.00000000E+00 0.42957742E-15 0.00000000E+00 0.27205898E-08 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.74996289E-17 - 0.48056183E-16 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.25107059E-08 0.00000000E+00 0.00000000E+00 0.85447453E-16 - 0.00000000E+00 0.16158272E-15 0.00000000E+00 0.67667536E-16 - 0.41475160E-16 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.11462536E-15 0.22357726E-16 - 0.00000000E+00 0.00000000E+00 0.21251018E-16 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.15801924E-16 0.57458612E-16 - 0.00000000E+00 0.18367507E-15 0.42632773E-16 0.13035140E-15 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 -0.12530558E-16 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.12314324E-15 - 0.00000000E+00 0.65529400E-16 0.00000000E+00 0.83368834E-16 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.14432188E-15 - 0.00000000E+00 0.32421506E-16 0.00000000E+00 0.00000000E+00 - 0.19617783E-15 0.22183838E-15 0.12563733E-15 0.21444021E-01 - 0.37476972E-01 0.21203426E-02 0.00000000E+00 0.00000000E+00 - 0.49519461E-10 0.45166791E-16 0.12275829E-15 -0.15183264E-16 - 0.00000000E+00 0.00000000E+00 0.21210923E-02 0.31977723E-06 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.14313200E-14 - 0.72625738E-17 0.00000000E+00 0.34642579E-16 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.34169184E-12 - 0.67827698E-15 0.21399897E-15 0.00000000E+00 0.62748115E-16 - 0.10659727E-15 0.00000000E+00 0.00000000E+00 0.29789356E-13 - 0.14688305E-12 0.00000000E+00 0.00000000E+00 0.19678268E-12 - 0.00000000E+00 0.82205725E-16 0.00000000E+00 0.12113975E-15 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.17869023E-12 0.47430248E-16 0.00000000E+00 0.76557472E-16 - 0.00000000E+00 0.78959750E-16 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.18702484E-16 0.00000000E+00 - 0.70897015E-16 0.00000000E+00 0.22136134E-16 0.34125177E-16 - 0.37806809E-16 0.00000000E+00 0.61899010E-16 0.00000000E+00 - 0.37843086E-16 0.00000000E+00 0.14738150E-15 0.00000000E+00 - 0.27837410E-16 0.73387636E-16 0.00000000E+00 0.00000000E+00 - 0.23478173E-15 0.16233629E-15 0.00000000E+00 0.97502465E-16 - 0.00000000E+00 0.00000000E+00 0.32159323E-16 0.88873509E-16 - 0.25468429E-16 0.19577798E-15 0.00000000E+00 0.27541027E-15 - 0.82137890E-16 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 -0.97935165E-18 0.58220520E-17 - 0.00000000E+00 0.10350534E-15 0.00000000E+00 0.21269247E-01 - 'SWAT ' 300 'REAL' - 0.11903489E+00 0.11920030E+00 0.11935654E+00 0.11950531E+00 - 0.11963746E+00 0.11973691E+00 0.11980949E+00 0.11985992E+00 - 0.11989198E+00 0.11990760E+00 0.11920036E+00 0.11929640E+00 - 0.11942230E+00 0.11955360E+00 0.11966749E+00 0.11975760E+00 - 0.11982481E+00 0.11987277E+00 0.11990376E+00 0.11991899E+00 - 0.11935650E+00 0.11942228E+00 0.11952099E+00 0.11962403E+00 - 0.11971678E+00 0.11979303E+00 0.11985298E+00 0.11989742E+00 - 0.11992693E+00 0.11994169E+00 0.11950526E+00 0.11955357E+00 - 0.11962400E+00 0.11970104E+00 0.11977372E+00 0.11983766E+00 - 0.11989093E+00 0.11993241E+00 0.11996105E+00 0.11997576E+00 - 0.11963742E+00 0.11966745E+00 0.11971670E+00 0.11977370E+00 - 0.11983185E+00 0.11988686E+00 0.11993587E+00 0.11997647E+00 - 0.12000607E+00 0.12002190E+00 0.11973688E+00 0.11975757E+00 - 0.11979301E+00 0.11983765E+00 0.11988685E+00 0.11993710E+00 - 0.11998545E+00 0.12002871E+00 0.12006272E+00 0.12008212E+00 - 0.11980948E+00 0.11982480E+00 0.11985296E+00 0.11989092E+00 - 0.11993587E+00 0.11998544E+00 0.12003734E+00 0.12008836E+00 - 0.12013280E+00 0.12016090E+00 0.11985990E+00 0.11987276E+00 - 0.11989740E+00 0.11993240E+00 0.11997647E+00 0.12002871E+00 - 0.12008836E+00 0.12015366E+00 0.12021884E+00 0.12026779E+00 - 0.11989196E+00 0.11990374E+00 0.11992691E+00 0.11996104E+00 - 0.12000606E+00 0.12006272E+00 0.12013279E+00 0.12021884E+00 - 0.12032139E+00 0.12042411E+00 0.11990758E+00 0.11991898E+00 - 0.11994168E+00 0.11997575E+00 0.12002189E+00 0.12008212E+00 - 0.12016090E+00 0.12026779E+00 0.12042411E+00 0.12068105E+00 - 0.11903797E+00 0.11920246E+00 0.11935735E+00 0.11950553E+00 - 0.11963747E+00 0.11973691E+00 0.11980949E+00 0.11985992E+00 - 0.11989197E+00 0.11990760E+00 0.11920252E+00 0.11929733E+00 - 0.11942261E+00 0.11955365E+00 0.11966749E+00 0.11975759E+00 - 0.11982480E+00 0.11987277E+00 0.11990376E+00 0.11991899E+00 - 0.11935732E+00 0.11942258E+00 0.11952105E+00 0.11962404E+00 - 0.11971677E+00 0.11979302E+00 0.11985297E+00 0.11989742E+00 - 0.11992693E+00 0.11994169E+00 0.11950548E+00 0.11955361E+00 - 0.11962401E+00 0.11970103E+00 0.11977370E+00 0.11983765E+00 - 0.11989093E+00 0.11993241E+00 0.11996105E+00 0.11997576E+00 - 0.11963744E+00 0.11966745E+00 0.11971670E+00 0.11977369E+00 - 0.11983184E+00 0.11988685E+00 0.11993587E+00 0.11997648E+00 - 0.12000607E+00 0.12002191E+00 0.11973688E+00 0.11975756E+00 - 0.11979301E+00 0.11983764E+00 0.11988685E+00 0.11993710E+00 - 0.11998545E+00 0.12002872E+00 0.12006273E+00 0.12008213E+00 - 0.11980947E+00 0.11982479E+00 0.11985296E+00 0.11989092E+00 - 0.11993587E+00 0.11998545E+00 0.12003735E+00 0.12008837E+00 - 0.12013280E+00 0.12016091E+00 0.11985990E+00 0.11987276E+00 - 0.11989740E+00 0.11993240E+00 0.11997647E+00 0.12002871E+00 - 0.12008837E+00 0.12015367E+00 0.12021887E+00 0.12026781E+00 - 0.11989196E+00 0.11990374E+00 0.11992691E+00 0.11996105E+00 - 0.12000607E+00 0.12006272E+00 0.12013280E+00 0.12021887E+00 - 0.12032142E+00 0.12042415E+00 0.11990758E+00 0.11991898E+00 - 0.11994168E+00 0.11997575E+00 0.12002190E+00 0.12008213E+00 - 0.12016091E+00 0.12026781E+00 0.12042415E+00 0.12068282E+00 - 0.11904272E+00 0.11920273E+00 0.11935756E+00 0.11950564E+00 - 0.11963746E+00 0.11973688E+00 0.11980946E+00 0.11985990E+00 - 0.11989196E+00 0.11990758E+00 0.11920279E+00 0.11929753E+00 - 0.11942273E+00 0.11955366E+00 0.11966747E+00 0.11975755E+00 - 0.11982478E+00 0.11987275E+00 0.11990374E+00 0.11991898E+00 - 0.11935751E+00 0.11942271E+00 0.11952107E+00 0.11962401E+00 - 0.11971673E+00 0.11979299E+00 0.11985295E+00 0.11989740E+00 - 0.11992691E+00 0.11994168E+00 0.11950559E+00 0.11955362E+00 - 0.11962398E+00 0.11970098E+00 0.11977367E+00 0.11983763E+00 - 0.11989091E+00 0.11993240E+00 0.11996105E+00 0.11997576E+00 - 0.11963741E+00 0.11966743E+00 0.11971665E+00 0.11977366E+00 - 0.11983182E+00 0.11988684E+00 0.11993586E+00 0.11997647E+00 - 0.12000608E+00 0.12002191E+00 0.11973685E+00 0.11975753E+00 - 0.11979297E+00 0.11983762E+00 0.11988684E+00 0.11993709E+00 - 0.11998545E+00 0.12002872E+00 0.12006274E+00 0.12008214E+00 - 0.11980944E+00 0.11982476E+00 0.11985294E+00 0.11989091E+00 - 0.11993586E+00 0.11998544E+00 0.12003735E+00 0.12008838E+00 - 0.12013283E+00 0.12016094E+00 0.11985988E+00 0.11987273E+00 - 0.11989739E+00 0.11993239E+00 0.11997647E+00 0.12002872E+00 - 0.12008838E+00 0.12015370E+00 0.12021890E+00 0.12026785E+00 - 0.11989195E+00 0.11990373E+00 0.11992691E+00 0.11996104E+00 - 0.12000607E+00 0.12006274E+00 0.12013283E+00 0.12021890E+00 - 0.12032147E+00 0.12042423E+00 0.11990757E+00 0.11991897E+00 - 0.11994167E+00 0.11997575E+00 0.12002190E+00 0.12008214E+00 - 0.12016094E+00 0.12026785E+00 0.12042423E+00 0.12068553E+00 - 'ENDSOL ' 0 'MESS' - 'SEQNUM ' 1 'INTE' - 5 - 'INTEHEAD' 411 'INTE' - 0 201702 2 0 0 0 - 0 0 10 10 3 300 - 0 0 7 0 2 1 - 1 2 2 0 0 0 - 155 122 130 3 0 0 - 0 0 25 40 58 0 - 99 112 180 5 0 1 - 18 24 10 7 2 4 - 0 1 1 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 1 6 - 2015 4 5 0 0 0 - 0 0 0 0 5 0 - 0 0 12 1 25 1 - 0 0 8 8 0 1 - 0 0 0 0 100 0 - 0 0 0 1 0 1 - 0 1 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 1 1 22 146 - 10 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 1 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 - 'LOGIHEAD' 121 'LOGI' - T T F F F F F F F F F F F F F F F F F F F F F F F - F F F F F F F F F F F F F F F F F F F F F F F F F - F F F F F F F F F F F F F F F F F F F F F F F F F - F F F F F F F F F F F F F F F F F F F F F F F F F - F F F F F F F F F F F F F F F F F F F F F - 'DOUBHEAD' 229 'DOUB' - 0.15100000000000D+03 0.86058931004470D+02 0.36500000000000D+03 - 0.10000000000000D+00 0.15000000000000D+00 0.30000000000000D+01 - 0.30000000000000D+00 0.10000000000000D+00 0.10000000000000D+00 - 0.10000000000000D-02 0.10000000000000D-06 0.10000000000000D-03 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.10000000000000D+02 0.10000000000000D-01 - 0.10000000000000D-05 0.10000000000000D-02 0.10000000000000D-02 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+21 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.10000000000000D-01 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+21 0.10000000000000D+21 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+21 0.10000000000000D+21 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - -0.10000000000000D+01 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.10000000000000D+21 - 0.10000000000000D+21 0.10000000000000D+12 0.12500000000000D+01 - 0.10000000000000D+12 0.10000000000000D+07 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+21 0.00000000000000D+00 0.25000000000000D-01 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+01 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.36500000000000D+03 0.10000000000000D+00 0.15000000000000D+00 - 0.30000000000000D+01 0.30000000000000D+00 0.10000000000000D+00 - 0.10000000000000D+00 0.10000000000000D-02 0.10000000000000D-06 - 0.10000000000000D-03 0.10000000000000D+02 0.10000000000000D-01 - 0.10000000000000D-05 0.10000000000000D-02 0.10000000000000D-02 - 0.00000000000000D+00 0.00000000000000D+00 0.10000000000000D-19 - 0.10130000000000D+01 0.00000000000000D+00 0.10000000000000D+01 - 0.00000000000000D+00 0.30000000000000D+00 0.20000000000000D+01 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.73597900000000D+06 0.73613000000000D+06 - 0.10000000000000D+01 0.20000000000000D+00 0.40000000000000D+00 - 0.12000000000000D+01 0.30000000000000D+00 0.10000000000000D+01 - 0.00000000000000D+00 0.00000000000000D+00 0.40000000000000D+00 - 0.70000000000000D+00 0.20000000000000D+01 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.10000000000000D+01 0.10000000000000D+01 - 0.10000000000000D+01 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+01 0.10000000000000D-03 0.00000000000000D+00 - 0.00000000000000D+00 0.10000000000000D+21 0.10000000000000D+21 - 0.10000000000000D+21 0.10000000000000D+21 0.10000000000000D+21 - 0.10000000000000D+21 0.10000000000000D+21 0.10000000000000D+21 - 0.10000000000000D+21 0.10000000000000D+21 0.10000000000000D+21 - 0.10000000000000D+21 0.10000000000000D+01 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.10000000000000D-03 -0.20000000000000D+21 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.10000000000000D-01 0.10000000000000D+01 - 0.00000000000000D+00 0.10000000000000D+21 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 - 'IGRP ' 198 'INTE' - 2 1 2 0 0 0 - 0 -1 0 0 0 0 - 0 0 -1 0 0 0 - 0 -1 0 0 0 0 - -1 0 0 0 0 1 - 2 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 1 1 0 0 0 0 - 0 1 1 1 0 1 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 1 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 2 2 0 - 0 0 0 0 2 2 - 'SGRP ' 224 'REAL' - 0.10000000E+21 0.10000000E+21 -0.10000000E+21 0.10000000E+21 - 0.00000000E+00 0.00000000E+00 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 -0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 -0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - -0.10000000E+21 0.00000000E+00 0.00000000E+00 0.00000000E+00 - -0.20000000E+21 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.10000000E+21 0.00000000E+00 0.10000000E+21 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.10000000E+01 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.10000000E+21 0.10000000E+21 -0.10000000E+21 0.10000000E+21 - 0.00000000E+00 0.00000000E+00 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 -0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 -0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - -0.10000000E+21 0.00000000E+00 0.00000000E+00 0.00000000E+00 - -0.20000000E+21 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.10000000E+21 0.00000000E+00 0.10000000E+21 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.10000000E+01 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 'XGRP ' 360 'DOUB' - 0.19999999999622D+05 0.23232286121594D-04 0.24725768010643D+05 - 0.32980441585432D+05 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+06 0.00000000000000D+00 0.11616143047523D-08 - 0.12362884005555D+01 0.30199999483274D+07 0.38632449547979D-02 - 0.37435165527504D+07 0.49978063296303D+07 0.00000000000000D+00 - 0.00000000000000D+00 0.15100000000000D+08 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.30200000000000D+07 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.15100000000000D+08 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.19999999999622D+05 0.23232286121594D-04 0.24725768010643D+05 - 0.32980441585432D+05 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+06 0.00000000000000D+00 0.11616143047523D-08 - 0.12362884005555D+01 0.30199999483274D+07 0.38632449547979D-02 - 0.37435165527504D+07 0.49978063296303D+07 0.00000000000000D+00 - 0.00000000000000D+00 0.15100000000000D+08 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.30200000000000D+07 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.15100000000000D+08 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 'ZGRP ' 10 'CHAR' - 'G1 ' ' ' ' ' ' ' ' ' 'FIELD ' ' ' - ' ' ' ' ' ' - 'IWEL ' 310 'INTE' - 10 10 3 3 1 1 - 1 1 1 0 1 0 - 0 0 0 1 0 -100 - 0 0 0 0 0 0 - -1 0 0 0 0 0 - 0 7 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 -1 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 1 - 1 1 1 1 1 4 - 3 3 0 1 0 0 - 0 0 3 0 -100 0 - 0 0 0 0 0 -1 - 0 0 0 0 0 0 - 7 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 -1 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 - 'SWEL ' 244 'REAL' - 0.20000000E+05 0.10000000E+21 0.10000000E+21 0.20000000E+05 - 0.10000000E+21 0.00000000E+00 0.10000000E+04 0.00000000E+00 - 0.00000000E+00 0.84000000E+04 0.00000000E+00 0.99999997E-05 - 0.00000000E+00 0.00000000E+00 0.10000000E+21 0.10000000E+21 - 0.00000000E+00 -0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.00000000E+00 - 0.10000000E+01 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+01 - 0.00000000E+00 0.10000000E+21 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.10000000E+21 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.10000000E+21 0.00000000E+00 0.00000000E+00 0.10000000E+01 - 0.10000000E+01 0.10000000E+01 0.00000000E+00 0.10000000E+21 - 0.00000000E+00 0.10000000E+21 0.10000000E+01 -0.10000000E+21 - 0.10000000E+01 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.50000000E+00 0.10000000E+01 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.00000000E+00 0.10000000E+01 0.10000000E+21 0.10000000E+21 - 0.10000000E+06 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.90140000E+04 0.00000000E+00 0.00000000E+00 0.83350000E+04 - 0.00000000E+00 0.99999997E-05 0.00000000E+00 0.00000000E+00 - 0.10000000E+21 0.10000000E+21 0.00000000E+00 -0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.00000000E+00 0.10000000E+01 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.10000000E+01 0.00000000E+00 0.10000000E+21 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.10000000E+21 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.10000000E+21 0.10000000E+21 0.00000000E+00 - 0.00000000E+00 0.10000000E+01 0.10000000E+01 0.10000000E+01 - 0.00000000E+00 0.10000000E+21 0.00000000E+00 0.10000000E+21 - 0.10000000E+01 -0.10000000E+21 0.10000000E+01 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.50000000E+00 0.10000000E+01 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.10000000E+21 0.00000000E+00 0.10000000E+01 - 'XWEL ' 260 'DOUB' - 0.19999999999622D+05 0.23232286121594D-04 0.24725768010643D+05 - 0.20000000022854D+05 0.32980441585432D+05 0.00000000000000D+00 - 0.23861541881988D+04 0.11616143047523D-08 0.12362884005555D+01 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.30199999483274D+07 0.38632449547979D-02 0.37435165527504D+07 - 0.49978063296303D+07 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.23232286121594D-04 0.24725768010643D+05 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.10000000000000D+04 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.30200000000000D+07 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - -0.10000000000000D+06 0.00000000000000D+00 -0.62559285756231D+05 - 0.00000000000000D+00 0.64760402193223D+04 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.15100000000000D+08 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.62559285756231D+00 - 0.00000000000000D+00 0.00000000000000D+00 -0.10000000000000D+06 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.90140000000000D+04 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.15100000000000D+08 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 -0.62559285756231D+05 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 - 'ZWEL ' 6 'CHAR' - 'PROD ' ' ' ' ' 'INJ ' ' ' ' ' - 'ICON ' 50 'INTE' - 1 10 10 3 0 1 - 0 0 0 0 0 0 - 1 3 0 0 0 0 - 0 0 0 0 0 0 - 0 1 1 1 1 0 - 1 0 0 0 0 0 - 0 1 3 0 0 0 - 0 0 0 0 0 0 - 0 0 - 'SCON ' 80 'REAL' - 0.10610335E+02 0.84000000E+04 0.50000000E+00 0.10000000E+05 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10610335E+02 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 -0.10000000E+21 -0.10000000E+21 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.10610335E+02 0.83350000E+04 0.50000000E+00 0.10000000E+05 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10610335E+02 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 -0.10000000E+21 -0.10000000E+21 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 'XCON ' 116 'DOUB' - 0.20000000537402D+05 0.23232284918235D-04 0.24725767945926D+05 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.23861541881988D+04 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - -0.10000001395249D+06 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.64760402193223D+04 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 - 'STARTSOL' 0 'MESS' - 'PRESSURE' 300 'REAL' - 0.60837422E+04 0.59348696E+04 0.58116167E+04 0.57007793E+04 - 0.55879429E+04 0.54737983E+04 0.53663882E+04 0.52832998E+04 - 0.52281831E+04 0.52011484E+04 0.59347949E+04 0.58587871E+04 - 0.57667617E+04 0.56639390E+04 0.55542842E+04 0.54417070E+04 - 0.53389136E+04 0.52595210E+04 0.52068086E+04 0.51805996E+04 - 0.58116167E+04 0.57667720E+04 0.56912739E+04 0.55981938E+04 - 0.54919165E+04 0.53837915E+04 0.52895835E+04 0.52155693E+04 - 0.51655527E+04 0.51402905E+04 0.57008394E+04 0.56639844E+04 - 0.55982119E+04 0.55093008E+04 0.54092358E+04 0.53111582E+04 - 0.52237915E+04 0.51544951E+04 0.51061045E+04 0.50811250E+04 - 0.55880229E+04 0.55543506E+04 0.54919429E+04 0.54092612E+04 - 0.53188940E+04 0.52285884E+04 0.51471411E+04 0.50792573E+04 - 0.50297563E+04 0.50033486E+04 0.54738975E+04 0.54417944E+04 - 0.53838745E+04 0.53111963E+04 0.52286040E+04 0.51444751E+04 - 0.50638418E+04 0.49923125E+04 0.49367930E+04 0.49055132E+04 - 0.53664844E+04 0.53389922E+04 0.52896426E+04 0.52238330E+04 - 0.51471655E+04 0.50638525E+04 0.49782446E+04 0.48959956E+04 - 0.48260820E+04 0.47827739E+04 0.52833813E+04 0.52595928E+04 - 0.52156279E+04 0.51545386E+04 0.50792871E+04 0.49923301E+04 - 0.48960034E+04 0.47939980E+04 0.46953730E+04 0.46232612E+04 - 0.52282549E+04 0.52068750E+04 0.51656089E+04 0.51061494E+04 - 0.50297891E+04 0.49368145E+04 0.48260942E+04 0.46953779E+04 - 0.45451025E+04 0.43987217E+04 0.52012163E+04 0.51806631E+04 - 0.51403457E+04 0.50811699E+04 0.50033828E+04 0.49055366E+04 - 0.47827881E+04 0.46232686E+04 0.43987241E+04 0.40398335E+04 - 0.60865249E+04 0.59387466E+04 0.58165815E+04 0.57063105E+04 - 0.55942539E+04 0.54804531E+04 0.53731997E+04 0.52901338E+04 - 0.52350225E+04 0.52079854E+04 0.59386646E+04 0.58636416E+04 - 0.57718105E+04 0.56700454E+04 0.55608096E+04 0.54484517E+04 - 0.53457422E+04 0.52663618E+04 0.52136465E+04 0.51874346E+04 - 0.58165786E+04 0.57718208E+04 0.56973213E+04 0.56046011E+04 - 0.54986089E+04 0.53906138E+04 0.52964165E+04 0.52224082E+04 - 0.51723867E+04 0.51471216E+04 0.57063662E+04 0.56700898E+04 - 0.56046191E+04 0.55159824E+04 0.54160376E+04 0.53179819E+04 - 0.52306309E+04 0.51613276E+04 0.51129326E+04 0.50879507E+04 - 0.55943325E+04 0.55608750E+04 0.54986357E+04 0.54160625E+04 - 0.53257158E+04 0.52354282E+04 0.51539731E+04 0.50860830E+04 - 0.50365771E+04 0.50101670E+04 0.54805522E+04 0.54485386E+04 - 0.53906968E+04 0.53180200E+04 0.52354438E+04 0.51513066E+04 - 0.50706660E+04 0.49991299E+04 0.49436050E+04 0.49123218E+04 - 0.53732959E+04 0.53458208E+04 0.52964756E+04 0.52306729E+04 - 0.51539976E+04 0.50706763E+04 0.49850601E+04 0.49028037E+04 - 0.48328833E+04 0.47895708E+04 0.52902153E+04 0.52664336E+04 - 0.52224663E+04 0.51613716E+04 0.50861128E+04 0.49991475E+04 - 0.49028110E+04 0.48007964E+04 0.47021616E+04 0.46300430E+04 - 0.52350947E+04 0.52137124E+04 0.51724424E+04 0.51129771E+04 - 0.50366099E+04 0.49436265E+04 0.48328955E+04 0.47021665E+04 - 0.45518765E+04 0.44054722E+04 0.52080532E+04 0.51874980E+04 - 0.51471768E+04 0.50879956E+04 0.50102007E+04 0.49123452E+04 - 0.47895854E+04 0.46300503E+04 0.44054746E+04 0.40439475E+04 - 0.60911240E+04 0.59494624E+04 0.58274888E+04 0.57171665E+04 - 0.56050977E+04 0.54913154E+04 0.53841377E+04 0.53010918E+04 - 0.52459844E+04 0.52189424E+04 0.59493799E+04 0.58745571E+04 - 0.57826743E+04 0.56808994E+04 0.55716602E+04 0.54593472E+04 - 0.53566963E+04 0.52773262E+04 0.52246045E+04 0.51983887E+04 - 0.58274858E+04 0.57826841E+04 0.57081816E+04 0.56154414E+04 - 0.55094873E+04 0.54015640E+04 0.53073730E+04 0.52333677E+04 - 0.51833384E+04 0.51580693E+04 0.57172222E+04 0.56809434E+04 - 0.56154595E+04 0.55268633E+04 0.54269712E+04 0.53289287E+04 - 0.52415923E+04 0.51722778E+04 0.51238750E+04 0.50988892E+04 - 0.56051763E+04 0.55717256E+04 0.55095146E+04 0.54269961E+04 - 0.53366606E+04 0.52463901E+04 0.51649219E+04 0.50970210E+04 - 0.50475073E+04 0.50210933E+04 0.54914141E+04 0.54594341E+04 - 0.54016465E+04 0.53289668E+04 0.52464058E+04 0.51622554E+04 - 0.50816016E+04 0.50100542E+04 0.49545205E+04 0.49232324E+04 - 0.53842339E+04 0.53567749E+04 0.53074321E+04 0.52416338E+04 - 0.51649463E+04 0.50816123E+04 0.49959824E+04 0.49137129E+04 - 0.48437812E+04 0.48004619E+04 0.53011733E+04 0.52773979E+04 - 0.52334258E+04 0.51723213E+04 0.50970508E+04 0.50100718E+04 - 0.49137202E+04 0.48116895E+04 0.47130391E+04 0.46409087E+04 - 0.52460562E+04 0.52246704E+04 0.51833940E+04 0.51239194E+04 - 0.50475400E+04 0.49545420E+04 0.48437939E+04 0.47130439E+04 - 0.45627305E+04 0.44162896E+04 0.52190107E+04 0.51984521E+04 - 0.51581245E+04 0.50989336E+04 0.50211270E+04 0.49232559E+04 - 0.48004766E+04 0.46409165E+04 0.44162920E+04 0.40512097E+04 - 'RS ' 300 'REAL' - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12216158E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12231295E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12256032E+01 - 'SGAS ' 300 'REAL' - 0.41513816E+00 0.37778339E+00 0.33537766E+00 0.28637087E+00 - 0.22345251E+00 0.14419027E+00 0.56012705E-01 0.57291477E-02 - 0.00000000E+00 -0.20959546E-15 0.37803537E+00 0.34257561E+00 - 0.30137867E+00 0.24837539E+00 0.18366905E+00 0.10297398E+00 - 0.26492391E-01 0.86633017E-03 0.00000000E+00 -0.21118768E-15 - 0.33555382E+00 0.30142072E+00 0.25595555E+00 0.20192119E+00 - 0.13254315E+00 0.53994741E-01 0.63478728E-02 0.00000000E+00 - 0.00000000E+00 0.10153745E-15 0.28650755E+00 0.24843326E+00 - 0.20194232E+00 0.14199971E+00 0.70984364E-01 0.16347917E-01 - 0.75155015E-07 0.13876012E-16 -0.15316113E-15 0.89587982E-16 - 0.22357124E+00 0.18373458E+00 0.13275754E+00 0.71132950E-01 - 0.21475686E-01 0.22507513E-03 0.97385218E-16 0.18179782E-15 - 0.00000000E+00 0.00000000E+00 0.14429972E+00 0.10304802E+00 - 0.53369816E-01 0.16334467E-01 0.22495995E-03 0.00000000E+00 - 0.00000000E+00 0.23776450E-15 0.41332805E-17 0.00000000E+00 - 0.56093588E-01 0.26531111E-01 0.61837616E-02 0.25757672E-05 - 0.30413456E-15 0.00000000E+00 0.00000000E+00 0.48191134E-18 - 0.00000000E+00 -0.19876085E-15 0.57540853E-02 0.87139866E-03 - 0.29927323E-05 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.79307529E-16 0.64804797E-16 0.17714240E-15 - 0.00000000E+00 0.66583961E-08 0.61695933E-10 0.12915229E-15 - 0.17750174E-15 0.00000000E+00 0.00000000E+00 0.00000000E+00 - -0.16505513E-17 0.00000000E+00 0.51422861E-16 0.38657730E-10 - 0.14689435E-15 0.00000000E+00 0.13471859E-15 0.24437264E-16 - 0.00000000E+00 0.24752632E-15 0.79590450E-17 0.74350074E-01 - 0.35163009E+00 0.87597415E-01 0.42409031E-02 0.10968354E-15 - 0.00000000E+00 0.49684398E-16 0.00000000E+00 0.00000000E+00 - 0.71728967E-16 0.00000000E+00 0.88219553E-01 0.52177995E-02 - 0.92605622E-16 0.11951490E-16 0.00000000E+00 0.70053251E-15 - 0.79165560E-17 0.00000000E+00 0.20945977E-15 0.00000000E+00 - 0.43517533E-02 0.00000000E+00 0.87348365E-10 0.14863006E-15 - 0.15416476E-05 0.00000000E+00 0.00000000E+00 0.98102827E-17 - 0.25882299E-15 0.00000000E+00 0.00000000E+00 0.56464149E-10 - 0.00000000E+00 0.31106308E-15 0.00000000E+00 0.30775060E-08 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.27273839E-16 - -0.22225475E-16 0.13441582E-16 0.00000000E+00 0.00000000E+00 - 0.23821034E-08 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.11351848E-15 0.00000000E+00 0.29732752E-16 - 0.20697744E-05 0.00000000E+00 0.17591888E-15 0.00000000E+00 - 0.94147315E-16 0.28560741E-15 0.00000000E+00 0.00000000E+00 - 0.49034942E-16 0.00000000E+00 0.68646694E-11 0.46500262E-09 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - -0.35668680E-16 0.15732181E-15 0.33585214E-16 0.26404556E-09 - 0.36047445E-12 0.20118800E-11 0.23139879E-15 0.00000000E+00 - 0.86527149E-16 -0.25236974E-16 0.00000000E+00 0.86341715E-16 - 0.12098952E-16 0.41677421E-11 0.16837897E-11 0.11780356E-15 - 0.00000000E+00 0.12405908E-15 0.22337768E-17 0.00000000E+00 - 0.41230589E-16 0.66018972E-16 0.00000000E+00 0.16356115E-15 - 0.00000000E+00 0.10686700E-16 0.83842259E-16 -0.16930761E-16 - 0.17709363E-15 -0.67726505E-16 0.00000000E+00 0.22479409E-01 - 0.12741621E+00 0.28268982E-01 0.71386073E-03 0.00000000E+00 - 0.72435481E-10 0.18506688E-15 0.79196581E-16 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.28278327E-01 0.87099051E-03 - 0.26333985E-09 0.00000000E+00 0.25805229E-12 0.13440145E-14 - 0.00000000E+00 0.11269217E-15 0.14044510E-15 0.00000000E+00 - 0.71483687E-03 0.00000000E+00 0.47705839E-16 0.47694726E-12 - 0.60065377E-15 0.27458802E-15 0.10614474E-15 0.93506217E-16 - 0.68117443E-16 0.00000000E+00 0.00000000E+00 0.28503194E-13 - 0.13981213E-12 0.47781162E-16 0.00000000E+00 0.18673289E-12 - 0.53690411E-16 0.44207692E-16 0.00000000E+00 0.95973316E-17 - 0.75383444E-16 0.14425377E-15 0.00000000E+00 0.10132124E-15 - 0.16967216E-12 0.80801014E-16 0.42207172E-16 0.67854923E-16 - 0.41427055E-16 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.51725870E-16 0.16484673E-15 - 0.00000000E+00 0.10520592E-15 0.25792731E-16 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.18844424E-10 0.00000000E+00 - 0.00000000E+00 0.45191977E-16 0.28499813E-15 0.00000000E+00 - 0.00000000E+00 0.14518306E-15 0.35423530E-17 0.29273943E-13 - 0.49678208E-13 0.32451119E-15 0.76847091E-16 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.79039046E-16 0.19065798E-15 - 0.00000000E+00 0.23191444E-15 0.00000000E+00 0.26682700E-15 - 0.12745874E-15 0.00000000E+00 0.51128441E-16 0.10798585E-15 - 0.00000000E+00 0.00000000E+00 0.87659096E-16 0.00000000E+00 - 0.79747378E-16 -0.16218510E-16 0.89447817E-16 0.37801525E-16 - 0.54778028E-16 0.10701674E-15 0.56191253E-16 0.21572657E-01 - 'SWAT ' 300 'REAL' - 0.11903258E+00 0.11914285E+00 0.11923422E+00 0.11931644E+00 - 0.11940021E+00 0.11948501E+00 0.11956485E+00 0.11962666E+00 - 0.11966767E+00 0.11968780E+00 0.11914290E+00 0.11919925E+00 - 0.11926749E+00 0.11934379E+00 0.11942521E+00 0.11950886E+00 - 0.11958528E+00 0.11964435E+00 0.11968358E+00 0.11970309E+00 - 0.11923422E+00 0.11926748E+00 0.11932350E+00 0.11939260E+00 - 0.11947154E+00 0.11955191E+00 0.11962198E+00 0.11967706E+00 - 0.11971430E+00 0.11973311E+00 0.11931640E+00 0.11934375E+00 - 0.11939258E+00 0.11945862E+00 0.11953299E+00 0.11960593E+00 - 0.11967094E+00 0.11972253E+00 0.11975857E+00 0.11977717E+00 - 0.11940015E+00 0.11942516E+00 0.11947152E+00 0.11953297E+00 - 0.11960018E+00 0.11966737E+00 0.11972801E+00 0.11977857E+00 - 0.11981545E+00 0.11983513E+00 0.11948493E+00 0.11950879E+00 - 0.11955185E+00 0.11960591E+00 0.11966736E+00 0.11972999E+00 - 0.11979005E+00 0.11984336E+00 0.11988474E+00 0.11990807E+00 - 0.11956478E+00 0.11958522E+00 0.11962194E+00 0.11967091E+00 - 0.11972798E+00 0.11979005E+00 0.11985385E+00 0.11991517E+00 - 0.11996733E+00 0.11999965E+00 0.11962660E+00 0.11964430E+00 - 0.11967701E+00 0.11972250E+00 0.11977854E+00 0.11984334E+00 - 0.11991517E+00 0.11999127E+00 0.12006489E+00 0.12011876E+00 - 0.11966762E+00 0.11968353E+00 0.11971425E+00 0.11975853E+00 - 0.11981542E+00 0.11988473E+00 0.11996732E+00 0.12006489E+00 - 0.12017716E+00 0.12028663E+00 0.11968774E+00 0.11970305E+00 - 0.11973307E+00 0.11977714E+00 0.11983511E+00 0.11990806E+00 - 0.11999963E+00 0.12011875E+00 0.12028663E+00 0.12055543E+00 - 0.11903556E+00 0.11914502E+00 0.11923559E+00 0.11931739E+00 - 0.11940058E+00 0.11948512E+00 0.11956485E+00 0.11962663E+00 - 0.11966765E+00 0.11968777E+00 0.11914508E+00 0.11920069E+00 - 0.11926879E+00 0.11934431E+00 0.11942542E+00 0.11950890E+00 - 0.11958527E+00 0.11964433E+00 0.11968356E+00 0.11970307E+00 - 0.11923559E+00 0.11926878E+00 0.11932407E+00 0.11939289E+00 - 0.11947162E+00 0.11955190E+00 0.11962196E+00 0.11967704E+00 - 0.11971428E+00 0.11973309E+00 0.11931735E+00 0.11934427E+00 - 0.11939288E+00 0.11945872E+00 0.11953299E+00 0.11960592E+00 - 0.11967092E+00 0.11972251E+00 0.11975855E+00 0.11977717E+00 - 0.11940052E+00 0.11942537E+00 0.11947161E+00 0.11953298E+00 - 0.11960017E+00 0.11966734E+00 0.11972798E+00 0.11977855E+00 - 0.11981544E+00 0.11983512E+00 0.11948504E+00 0.11950884E+00 - 0.11955184E+00 0.11960589E+00 0.11966734E+00 0.11972997E+00 - 0.11979004E+00 0.11984335E+00 0.11988474E+00 0.11990807E+00 - 0.11956478E+00 0.11958521E+00 0.11962192E+00 0.11967088E+00 - 0.11972797E+00 0.11979003E+00 0.11985384E+00 0.11991517E+00 - 0.11996733E+00 0.11999965E+00 0.11962657E+00 0.11964427E+00 - 0.11967699E+00 0.11972248E+00 0.11977853E+00 0.11984333E+00 - 0.11991517E+00 0.11999127E+00 0.12006491E+00 0.12011877E+00 - 0.11966760E+00 0.11968351E+00 0.11971424E+00 0.11975852E+00 - 0.11981542E+00 0.11988473E+00 0.11996732E+00 0.12006491E+00 - 0.12017719E+00 0.12028667E+00 0.11968772E+00 0.11970302E+00 - 0.11973305E+00 0.11977713E+00 0.11983510E+00 0.11990806E+00 - 0.11999964E+00 0.12011877E+00 0.12028667E+00 0.12055745E+00 - 0.11904022E+00 0.11914515E+00 0.11923558E+00 0.11931742E+00 - 0.11940061E+00 0.11948514E+00 0.11956482E+00 0.11962659E+00 - 0.11966760E+00 0.11968773E+00 0.11914521E+00 0.11920068E+00 - 0.11926881E+00 0.11934434E+00 0.11942545E+00 0.11950890E+00 - 0.11958522E+00 0.11964427E+00 0.11968351E+00 0.11970302E+00 - 0.11923558E+00 0.11926880E+00 0.11932409E+00 0.11939293E+00 - 0.11947164E+00 0.11955186E+00 0.11962192E+00 0.11967698E+00 - 0.11971423E+00 0.11973305E+00 0.11931738E+00 0.11934430E+00 - 0.11939292E+00 0.11945873E+00 0.11953297E+00 0.11960588E+00 - 0.11967087E+00 0.11972247E+00 0.11975852E+00 0.11977713E+00 - 0.11940055E+00 0.11942540E+00 0.11947162E+00 0.11953295E+00 - 0.11960012E+00 0.11966729E+00 0.11972795E+00 0.11977852E+00 - 0.11981541E+00 0.11983510E+00 0.11948507E+00 0.11950883E+00 - 0.11955180E+00 0.11960585E+00 0.11966728E+00 0.11972993E+00 - 0.11979001E+00 0.11984333E+00 0.11988473E+00 0.11990806E+00 - 0.11956474E+00 0.11958516E+00 0.11962187E+00 0.11967084E+00 - 0.11972792E+00 0.11979000E+00 0.11985382E+00 0.11991516E+00 - 0.11996733E+00 0.11999965E+00 0.11962653E+00 0.11964422E+00 - 0.11967695E+00 0.11972243E+00 0.11977850E+00 0.11984331E+00 - 0.11991515E+00 0.11999127E+00 0.12006492E+00 0.12011880E+00 - 0.11966754E+00 0.11968346E+00 0.11971419E+00 0.11975849E+00 - 0.11981539E+00 0.11988471E+00 0.11996732E+00 0.12006492E+00 - 0.12017722E+00 0.12028673E+00 0.11968768E+00 0.11970298E+00 - 0.11973301E+00 0.11977710E+00 0.11983507E+00 0.11990804E+00 - 0.11999965E+00 0.12011880E+00 0.12028673E+00 0.12056018E+00 - 'ENDSOL ' 0 'MESS' - 'SEQNUM ' 1 'INTE' - 10 - 'INTEHEAD' 411 'INTE' - 0 201702 2 0 0 0 - 0 0 10 10 3 300 - 0 0 7 0 2 1 - 1 2 2 0 0 0 - 155 122 130 3 0 0 - 0 0 25 40 58 0 - 99 112 180 5 0 1 - 18 24 10 7 2 4 - 0 1 1 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 1 11 - 2015 9 10 0 0 0 - 0 0 0 0 5 0 - 0 0 12 1 25 1 - 0 0 8 8 0 1 - 0 0 0 0 100 0 - 0 0 0 1 0 1 - 0 1 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 1 1 22 146 - 10 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 1 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 - 'LOGIHEAD' 121 'LOGI' - T T F F F F F F F F F F F F F F F F F F F F F F F - F F F F F F F F F F F F F F F F F F F F F F F F F - F F F F F F F F F F F F F F F F F F F F F F F F F - F F F F F F F F F F F F F F F F F F F F F F F F F - F F F F F F F F F F F F F F F F F F F F F - 'DOUBHEAD' 229 'DOUB' - 0.30400000000000D+03 0.93000000000000D+02 0.36500000000000D+03 - 0.10000000000000D+00 0.15000000000000D+00 0.30000000000000D+01 - 0.30000000000000D+00 0.10000000000000D+00 0.10000000000000D+00 - 0.10000000000000D-02 0.10000000000000D-06 0.10000000000000D-03 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.10000000000000D+02 0.10000000000000D-01 - 0.10000000000000D-05 0.10000000000000D-02 0.10000000000000D-02 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+21 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.10000000000000D-01 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+21 0.10000000000000D+21 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+21 0.10000000000000D+21 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - -0.10000000000000D+01 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.10000000000000D+21 - 0.10000000000000D+21 0.10000000000000D+12 0.12500000000000D+01 - 0.10000000000000D+12 0.10000000000000D+07 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+21 0.00000000000000D+00 0.25000000000000D-01 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+01 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.36500000000000D+03 0.10000000000000D+00 0.15000000000000D+00 - 0.30000000000000D+01 0.30000000000000D+00 0.10000000000000D+00 - 0.10000000000000D+00 0.10000000000000D-02 0.10000000000000D-06 - 0.10000000000000D-03 0.10000000000000D+02 0.10000000000000D-01 - 0.10000000000000D-05 0.10000000000000D-02 0.10000000000000D-02 - 0.00000000000000D+00 0.00000000000000D+00 0.10000000000000D-19 - 0.10130000000000D+01 0.00000000000000D+00 0.10000000000000D+01 - 0.00000000000000D+00 0.30000000000000D+00 0.20000000000000D+01 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.73597900000000D+06 0.73628300000000D+06 - 0.10000000000000D+01 0.20000000000000D+00 0.40000000000000D+00 - 0.12000000000000D+01 0.30000000000000D+00 0.10000000000000D+01 - 0.00000000000000D+00 0.00000000000000D+00 0.40000000000000D+00 - 0.70000000000000D+00 0.20000000000000D+01 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.10000000000000D+01 0.10000000000000D+01 - 0.10000000000000D+01 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+01 0.10000000000000D-03 0.00000000000000D+00 - 0.00000000000000D+00 0.10000000000000D+21 0.10000000000000D+21 - 0.10000000000000D+21 0.10000000000000D+21 0.10000000000000D+21 - 0.10000000000000D+21 0.10000000000000D+21 0.10000000000000D+21 - 0.10000000000000D+21 0.10000000000000D+21 0.10000000000000D+21 - 0.10000000000000D+21 0.10000000000000D+01 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.10000000000000D-03 -0.20000000000000D+21 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.10000000000000D-01 0.10000000000000D+01 - 0.00000000000000D+00 0.10000000000000D+21 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 - 'IGRP ' 198 'INTE' - 2 1 2 0 0 0 - 0 -1 0 0 0 0 - 0 0 -1 0 0 0 - 0 -1 0 0 0 0 - -1 0 0 0 0 1 - 2 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 1 1 0 0 0 0 - 0 1 1 1 0 1 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 1 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 2 2 0 - 0 0 0 0 2 2 - 'SGRP ' 224 'REAL' - 0.10000000E+21 0.10000000E+21 -0.10000000E+21 0.10000000E+21 - 0.00000000E+00 0.00000000E+00 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 -0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 -0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - -0.10000000E+21 0.00000000E+00 0.00000000E+00 0.00000000E+00 - -0.20000000E+21 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.10000000E+21 0.00000000E+00 0.10000000E+21 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.10000000E+01 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.10000000E+21 0.10000000E+21 -0.10000000E+21 0.10000000E+21 - 0.00000000E+00 0.00000000E+00 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 -0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 -0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - -0.10000000E+21 0.00000000E+00 0.00000000E+00 0.00000000E+00 - -0.20000000E+21 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.10000000E+21 0.00000000E+00 0.10000000E+21 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.10000000E+01 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 'XGRP ' 360 'DOUB' - 0.19999999998474D+05 0.10362215618228D-04 0.24734056351370D+05 - 0.32797464277612D+05 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+06 0.00000000000000D+00 0.51811078068251D-09 - 0.12367028176629D+01 0.60799999460688D+07 0.62288307965476D-02 - 0.75271153444378D+07 0.10026458323154D+08 0.00000000000000D+00 - 0.00000000000000D+00 0.30400000000000D+08 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.60800000000000D+07 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.30400000000000D+08 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.19999999998474D+05 0.10362215618228D-04 0.24734056351370D+05 - 0.32797464277612D+05 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+06 0.00000000000000D+00 0.51811078068251D-09 - 0.12367028176629D+01 0.60799999460688D+07 0.62288307965476D-02 - 0.75271153444378D+07 0.10026458323154D+08 0.00000000000000D+00 - 0.00000000000000D+00 0.30400000000000D+08 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.60800000000000D+07 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.30400000000000D+08 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 'ZGRP ' 10 'CHAR' - 'G1 ' ' ' ' ' ' ' ' ' 'FIELD ' ' ' - ' ' ' ' ' ' - 'IWEL ' 310 'INTE' - 10 10 3 3 1 1 - 1 1 1 0 1 0 - 0 0 0 1 0 -100 - 0 0 0 0 0 0 - -1 0 0 0 0 0 - 0 7 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 -1 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 1 - 1 1 1 1 1 4 - 3 3 0 1 0 0 - 0 0 3 0 -100 0 - 0 0 0 0 0 -1 - 0 0 0 0 0 0 - 7 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 -1 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 - 'SWEL ' 244 'REAL' - 0.20000000E+05 0.10000000E+21 0.10000000E+21 0.20000000E+05 - 0.10000000E+21 0.00000000E+00 0.10000000E+04 0.00000000E+00 - 0.00000000E+00 0.84000000E+04 0.00000000E+00 0.99999997E-05 - 0.00000000E+00 0.00000000E+00 0.10000000E+21 0.10000000E+21 - 0.00000000E+00 -0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.00000000E+00 - 0.10000000E+01 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+01 - 0.00000000E+00 0.10000000E+21 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.10000000E+21 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.10000000E+21 0.00000000E+00 0.00000000E+00 0.10000000E+01 - 0.10000000E+01 0.10000000E+01 0.00000000E+00 0.10000000E+21 - 0.00000000E+00 0.10000000E+21 0.10000000E+01 -0.10000000E+21 - 0.10000000E+01 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.50000000E+00 0.10000000E+01 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.00000000E+00 0.10000000E+01 0.10000000E+21 0.10000000E+21 - 0.10000000E+06 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.90140000E+04 0.00000000E+00 0.00000000E+00 0.83350000E+04 - 0.00000000E+00 0.99999997E-05 0.00000000E+00 0.00000000E+00 - 0.10000000E+21 0.10000000E+21 0.00000000E+00 -0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.00000000E+00 0.10000000E+01 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.10000000E+01 0.00000000E+00 0.10000000E+21 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.10000000E+21 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.10000000E+21 0.10000000E+21 0.00000000E+00 - 0.00000000E+00 0.10000000E+01 0.10000000E+01 0.10000000E+01 - 0.00000000E+00 0.10000000E+21 0.00000000E+00 0.10000000E+21 - 0.10000000E+01 -0.10000000E+21 0.10000000E+01 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.50000000E+00 0.10000000E+01 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.10000000E+21 0.00000000E+00 0.10000000E+01 - 'XWEL ' 260 'DOUB' - 0.19999999998474D+05 0.10362215618228D-04 0.24734056351370D+05 - 0.20000000008836D+05 0.32797464277612D+05 0.00000000000000D+00 - 0.27708426695453D+04 0.51811078068251D-09 0.12367028176629D+01 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.60799999460688D+07 0.62288307965476D-02 0.75271153444378D+07 - 0.10026458323154D+08 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.10362215618228D-04 0.24734056351370D+05 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.10000000000000D+04 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.60800000000000D+07 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - -0.10000000000000D+06 0.00000000000000D+00 -0.58745285608188D+05 - 0.00000000000000D+00 0.65100433451026D+04 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.30400000000000D+08 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.58745285608188D+00 - 0.00000000000000D+00 0.00000000000000D+00 -0.10000000000000D+06 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.90140000000000D+04 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.30400000000000D+08 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 -0.58745285608188D+05 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 - 'ZWEL ' 6 'CHAR' - 'PROD ' ' ' ' ' 'INJ ' ' ' ' ' - 'ICON ' 50 'INTE' - 1 10 10 3 0 1 - 0 0 0 0 0 0 - 1 3 0 0 0 0 - 0 0 0 0 0 0 - 0 1 1 1 1 0 - 1 0 0 0 0 0 - 0 1 3 0 0 0 - 0 0 0 0 0 0 - 0 0 - 'SCON ' 80 'REAL' - 0.10610335E+02 0.84000000E+04 0.50000000E+00 0.10000000E+05 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10610335E+02 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 -0.10000000E+21 -0.10000000E+21 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.10610335E+02 0.83350000E+04 0.50000000E+00 0.10000000E+05 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10610335E+02 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 -0.10000000E+21 -0.10000000E+21 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 'XCON ' 116 'DOUB' - 0.20000000502342D+05 0.10362213072323D-04 0.24734056209608D+05 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.27708426695453D+04 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - -0.99999992333366D+05 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.65100433451026D+04 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 - 'STARTSOL' 0 'MESS' - 'PRESSURE' 300 'REAL' - 0.62182075E+04 0.61089170E+04 0.60261167E+04 0.59546133E+04 - 0.58921230E+04 0.58335527E+04 0.57749546E+04 0.57186875E+04 - 0.56710415E+04 0.56455825E+04 0.61088789E+04 0.60567251E+04 - 0.59947822E+04 0.59336924E+04 0.58750327E+04 0.58159087E+04 - 0.57565034E+04 0.56978711E+04 0.56504287E+04 0.56253574E+04 - 0.60260938E+04 0.59947847E+04 0.59494214E+04 0.58978389E+04 - 0.58418633E+04 0.57814849E+04 0.57187847E+04 0.56577012E+04 - 0.56104419E+04 0.55856646E+04 0.59546357E+04 0.59337085E+04 - 0.58978481E+04 0.58510581E+04 0.57944634E+04 0.57318848E+04 - 0.56645039E+04 0.55999634E+04 0.55519478E+04 0.55268481E+04 - 0.58921572E+04 0.58750615E+04 0.58418867E+04 0.57944736E+04 - 0.57355054E+04 0.56669292E+04 0.55937344E+04 0.55264932E+04 - 0.54756562E+04 0.54486831E+04 0.58336030E+04 0.58159561E+04 - 0.57815303E+04 0.57319131E+04 0.56669409E+04 0.55920303E+04 - 0.55123076E+04 0.54387373E+04 0.53815742E+04 0.53494434E+04 - 0.57750137E+04 0.57565625E+04 0.57188369E+04 0.56645391E+04 - 0.55937515E+04 0.55123149E+04 0.54250796E+04 0.53404976E+04 - 0.52686475E+04 0.52241611E+04 0.57187534E+04 0.56979331E+04 - 0.56577490E+04 0.55999971E+04 0.55265137E+04 0.54387495E+04 - 0.53405029E+04 0.52359883E+04 0.51348032E+04 0.50607954E+04 - 0.56711084E+04 0.56504878E+04 0.56104883E+04 0.55519824E+04 - 0.54756807E+04 0.53815898E+04 0.52686562E+04 0.51348071E+04 - 0.49806963E+04 0.48305229E+04 0.56456445E+04 0.56254131E+04 - 0.55857109E+04 0.55268843E+04 0.54487090E+04 0.53494609E+04 - 0.52241719E+04 0.50608008E+04 0.48305249E+04 0.44628516E+04 - 0.62210933E+04 0.61121582E+04 0.60301558E+04 0.59598857E+04 - 0.58979624E+04 0.58397056E+04 0.57815430E+04 0.57254707E+04 - 0.56779111E+04 0.56524639E+04 0.61121191E+04 0.60605713E+04 - 0.59995591E+04 0.59393403E+04 0.58809365E+04 0.58222861E+04 - 0.57631338E+04 0.57046890E+04 0.56573018E+04 0.56322383E+04 - 0.60301294E+04 0.59995586E+04 0.59549761E+04 0.59036846E+04 - 0.58480083E+04 0.57880098E+04 0.57255137E+04 0.56645444E+04 - 0.56173145E+04 0.55925415E+04 0.59599014E+04 0.59393550E+04 - 0.59036938E+04 0.58570728E+04 0.58008945E+04 0.57384893E+04 - 0.56712769E+04 0.56068213E+04 0.55588184E+04 0.55337192E+04 - 0.58979951E+04 0.58809653E+04 0.58480312E+04 0.58009048E+04 - 0.57420938E+04 0.56736729E+04 0.56005645E+04 0.55333491E+04 - 0.54825220E+04 0.54555464E+04 0.58397549E+04 0.58223330E+04 - 0.57880547E+04 0.57385176E+04 0.56736846E+04 0.55988345E+04 - 0.55191543E+04 0.54455977E+04 0.53884307E+04 0.53562969E+04 - 0.57816021E+04 0.57631924E+04 0.57255654E+04 0.56713120E+04 - 0.56005815E+04 0.55191616E+04 0.54319360E+04 0.53473501E+04 - 0.52754932E+04 0.52310024E+04 0.57255361E+04 0.57047510E+04 - 0.56645923E+04 0.56068555E+04 0.55333696E+04 0.54456099E+04 - 0.53473550E+04 0.52428306E+04 0.51416357E+04 0.50676206E+04 - 0.56779780E+04 0.56573608E+04 0.56173613E+04 0.55588530E+04 - 0.54825464E+04 0.53884463E+04 0.52755020E+04 0.51416392E+04 - 0.49875137E+04 0.48373145E+04 0.56525264E+04 0.56322944E+04 - 0.55925879E+04 0.55337549E+04 0.54555723E+04 0.53563145E+04 - 0.52310127E+04 0.50676255E+04 0.48373159E+04 0.44661318E+04 - 0.62258140E+04 0.61221113E+04 0.60411655E+04 0.59708945E+04 - 0.59089556E+04 0.58506709E+04 0.57925015E+04 0.57364351E+04 - 0.56889258E+04 0.56634907E+04 0.61220693E+04 0.60715874E+04 - 0.60105713E+04 0.59503418E+04 0.58919150E+04 0.58332480E+04 - 0.57740791E+04 0.57156665E+04 0.56683193E+04 0.56432632E+04 - 0.60411396E+04 0.60105703E+04 0.59659795E+04 0.59146704E+04 - 0.58589702E+04 0.57989634E+04 0.57364663E+04 0.56755337E+04 - 0.56283291E+04 0.56035601E+04 0.59709106E+04 0.59503564E+04 - 0.59146797E+04 0.58680342E+04 0.58118496E+04 0.57494233E+04 - 0.56822251E+04 0.56178198E+04 0.55698281E+04 0.55447285E+04 - 0.59089883E+04 0.58919438E+04 0.58589932E+04 0.58118599E+04 - 0.57530322E+04 0.56846172E+04 0.56115376E+04 0.55443408E+04 - 0.54935229E+04 0.54665430E+04 0.58507202E+04 0.58332949E+04 - 0.57990083E+04 0.57494512E+04 0.56846289E+04 0.56097861E+04 - 0.55301353E+04 0.54565913E+04 0.53994170E+04 0.53672778E+04 - 0.57925605E+04 0.57741377E+04 0.57365181E+04 0.56822603E+04 - 0.56115547E+04 0.55301426E+04 0.54429238E+04 0.53583296E+04 - 0.52864614E+04 0.52419634E+04 0.57365010E+04 0.57157285E+04 - 0.56755815E+04 0.56178540E+04 0.55443613E+04 0.54566030E+04 - 0.53583345E+04 0.52537939E+04 0.51525825E+04 0.50785557E+04 - 0.56889927E+04 0.56683779E+04 0.56283760E+04 0.55698633E+04 - 0.54935474E+04 0.53994326E+04 0.52864702E+04 0.51525859E+04 - 0.49984360E+04 0.48481982E+04 0.56635532E+04 0.56433193E+04 - 0.56036064E+04 0.55447642E+04 0.54665688E+04 0.53672949E+04 - 0.52419741E+04 0.50785605E+04 0.48481997E+04 0.44733882E+04 - 'RS ' 300 'REAL' - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12216158E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12231295E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12256032E+01 - 'SGAS ' 300 'REAL' - 0.46135557E+00 0.43684876E+00 0.40584975E+00 0.37309602E+00 - 0.33445501E+00 0.28799546E+00 0.22500052E+00 0.13455762E+00 - 0.32175850E-01 0.49318216E-03 0.43696120E+00 0.41212657E+00 - 0.38505438E+00 0.35124236E+00 0.31338865E+00 0.26474661E+00 - 0.19976659E+00 0.10438149E+00 0.17228784E-01 0.26582647E-05 - 0.40601593E+00 0.38510281E+00 0.35668427E+00 0.32483852E+00 - 0.28634170E+00 0.23638076E+00 0.16684644E+00 0.70455350E-01 - 0.66405139E-02 0.66252710E-07 0.37323889E+00 0.35129881E+00 - 0.32485786E+00 0.29328689E+00 0.25315934E+00 0.20149527E+00 - 0.12700285E+00 0.36799356E-01 0.12981807E-02 0.00000000E+00 - 0.33456275E+00 0.31344679E+00 0.28638980E+00 0.25319266E+00 - 0.21168928E+00 0.15485191E+00 0.74868537E-01 0.12024327E-01 - 0.87029975E-16 0.00000000E+00 0.28810257E+00 0.26481143E+00 - 0.23637335E+00 0.20149738E+00 0.15484799E+00 0.92297278E-01 - 0.27659534E-01 0.92431676E-03 0.99603875E-16 0.00000000E+00 - 0.22510354E+00 0.19984862E+00 0.16679204E+00 0.12695418E+00 - 0.74836046E-01 0.27651588E-01 0.21968151E-02 0.78232505E-08 - 0.00000000E+00 0.29327490E-16 0.13468468E+00 0.10448162E+00 - 0.70391305E-01 0.36744904E-01 0.12008638E-01 0.92329900E-03 - 0.78830293E-08 0.25166295E-14 0.10112076E-14 0.00000000E+00 - 0.32252625E-01 0.17428143E-01 0.66210814E-02 0.12937356E-02 - 0.00000000E+00 -0.72339188E-16 0.84455207E-16 0.23174443E-15 - 0.00000000E+00 0.14258375E-14 0.49638457E-03 0.35957154E-10 - -0.63229825E-16 0.00000000E+00 0.97071101E-16 0.00000000E+00 - 0.11051838E-15 0.67048137E-15 0.38373216E-16 0.12558243E+00 - 0.40714675E+00 0.22003548E+00 0.25432827E-01 0.58324182E-04 - 0.10536919E-07 0.11255656E-15 0.00000000E+00 -0.36243775E-16 - 0.00000000E+00 0.64044818E-15 0.22040628E+00 0.30033765E-01 - 0.11860958E-03 0.16366313E-06 0.00000000E+00 -0.40232523E-16 - 0.12245099E-15 0.00000000E+00 0.00000000E+00 0.39821840E-09 - 0.25553608E-01 0.11915139E-03 0.23730564E-06 -0.61917116E-16 - 0.14597675E-05 0.00000000E+00 0.16215183E-16 0.83254948E-16 - 0.67160468E-08 0.00000000E+00 0.63700885E-04 0.16280622E-06 - 0.13455874E-15 0.19275189E-15 0.00000000E+00 0.28776286E-08 - 0.46122790E-16 0.00000000E+00 0.76305715E-11 0.48140790E-16 - 0.36755926E-16 0.12386458E-16 -0.13360417E-15 0.11474395E-15 - 0.22289881E-08 0.00000000E+00 0.19247310E-16 0.14569982E-10 - 0.00000000E+00 0.72522425E-16 0.00000000E+00 0.34526750E-16 - 0.19436673E-05 0.00000000E+00 0.29572703E-16 0.00000000E+00 - 0.00000000E+00 0.76887307E-11 0.50457892E-16 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.64094394E-11 0.43303927E-09 - 0.99490220E-16 0.12096845E-08 0.18854190E-09 0.32292688E-16 - 0.77399601E-16 0.00000000E+00 0.10999676E-15 0.24608074E-09 - 0.33514790E-12 0.18704584E-11 0.13846856E-14 0.00000000E+00 - 0.67484094E-16 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.38786435E-11 0.15663742E-11 0.86146864E-18 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 -0.37487776E-16 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.50776322E-15 0.64475698E-16 0.13450745E-14 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.74092116E-16 0.23762988E-01 - 0.19750549E+00 0.49556546E-01 0.67929607E-02 0.10772506E-07 - 0.69118898E-10 0.00000000E+00 0.59398285E-16 0.26388193E-16 - 0.59469244E-16 0.00000000E+00 0.49582232E-01 0.83966507E-02 - 0.16964623E-06 0.48900109E-16 0.24555556E-12 0.11960426E-14 - 0.51133066E-16 0.00000000E+00 0.87430741E-16 0.00000000E+00 - 0.67964429E-02 0.00000000E+00 0.19364306E-08 0.45531710E-12 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.11878591E-16 - 0.18216366E-12 0.00000000E+00 0.00000000E+00 0.26361351E-08 - 0.13358268E-12 0.00000000E+00 0.00000000E+00 0.17478548E-12 - 0.65374268E-16 0.23718728E-12 -0.30259445E-16 0.13054756E-16 - 0.00000000E+00 0.63724003E-16 0.00000000E+00 0.00000000E+00 - 0.15882690E-12 -0.63616032E-16 0.00000000E+00 0.00000000E+00 - 0.41146899E-16 0.00000000E+00 0.00000000E+00 -0.40286310E-16 - 0.99268728E-16 0.00000000E+00 0.32981878E-16 0.00000000E+00 - 0.78242222E-13 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.51172069E-16 0.17595298E-10 0.00000000E+00 - 0.00000000E+00 0.15119280E-16 0.87927102E-16 0.00000000E+00 - 0.55787132E-16 0.00000000E+00 0.00000000E+00 0.27121002E-13 - 0.46274399E-13 0.00000000E+00 0.00000000E+00 0.41723126E-16 - 0.00000000E+00 0.42551684E-17 0.37415452E-15 0.00000000E+00 - 0.84923199E-16 0.78080614E-17 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.19849071E-16 - 0.84920936E-16 0.17774887E-15 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.40123802E-16 0.28613505E-17 0.00000000E+00 0.21543242E-01 - 'SWAT ' 300 'REAL' - 0.11893307E+00 0.11901395E+00 0.11907526E+00 0.11912823E+00 - 0.11917453E+00 0.11921795E+00 0.11926141E+00 0.11930315E+00 - 0.11933851E+00 0.11935741E+00 0.11901398E+00 0.11905259E+00 - 0.11909847E+00 0.11914372E+00 0.11918721E+00 0.11923104E+00 - 0.11927510E+00 0.11931860E+00 0.11935382E+00 0.11937243E+00 - 0.11907528E+00 0.11909846E+00 0.11913207E+00 0.11917030E+00 - 0.11921179E+00 0.11925657E+00 0.11930308E+00 0.11934841E+00 - 0.11938350E+00 0.11940190E+00 0.11912821E+00 0.11914372E+00 - 0.11917029E+00 0.11920498E+00 0.11924694E+00 0.11929336E+00 - 0.11934337E+00 0.11939128E+00 0.11942694E+00 0.11944558E+00 - 0.11917451E+00 0.11918718E+00 0.11921178E+00 0.11924694E+00 - 0.11929068E+00 0.11934157E+00 0.11939590E+00 0.11944585E+00 - 0.11948362E+00 0.11950367E+00 0.11921792E+00 0.11923100E+00 - 0.11925653E+00 0.11929334E+00 0.11934156E+00 0.11939717E+00 - 0.11945639E+00 0.11951106E+00 0.11955356E+00 0.11957745E+00 - 0.11926137E+00 0.11927506E+00 0.11930305E+00 0.11934334E+00 - 0.11939590E+00 0.11945638E+00 0.11952122E+00 0.11958411E+00 - 0.11963756E+00 0.11967067E+00 0.11930311E+00 0.11931856E+00 - 0.11934838E+00 0.11939126E+00 0.11944584E+00 0.11951105E+00 - 0.11958411E+00 0.11966186E+00 0.11973719E+00 0.11979232E+00 - 0.11933847E+00 0.11935377E+00 0.11938347E+00 0.11942691E+00 - 0.11948361E+00 0.11955355E+00 0.11963755E+00 0.11973719E+00 - 0.11985201E+00 0.11996401E+00 0.11935736E+00 0.11937238E+00 - 0.11940186E+00 0.11944556E+00 0.11950365E+00 0.11957744E+00 - 0.11967066E+00 0.11979232E+00 0.11996400E+00 0.12023865E+00 - 0.11893598E+00 0.11901659E+00 0.11907731E+00 0.11912936E+00 - 0.11917526E+00 0.11921844E+00 0.11926158E+00 0.11930317E+00 - 0.11933847E+00 0.11935735E+00 0.11901662E+00 0.11905479E+00 - 0.11909997E+00 0.11914459E+00 0.11918787E+00 0.11923136E+00 - 0.11927523E+00 0.11931860E+00 0.11935376E+00 0.11937238E+00 - 0.11907732E+00 0.11909997E+00 0.11913300E+00 0.11917101E+00 - 0.11921228E+00 0.11925678E+00 0.11930314E+00 0.11934839E+00 - 0.11938345E+00 0.11940185E+00 0.11912935E+00 0.11914457E+00 - 0.11917100E+00 0.11920556E+00 0.11924722E+00 0.11929351E+00 - 0.11934339E+00 0.11939125E+00 0.11942690E+00 0.11944554E+00 - 0.11917523E+00 0.11918785E+00 0.11921227E+00 0.11924721E+00 - 0.11929084E+00 0.11934161E+00 0.11939589E+00 0.11944582E+00 - 0.11948358E+00 0.11950362E+00 0.11921840E+00 0.11923132E+00 - 0.11925674E+00 0.11929350E+00 0.11934160E+00 0.11939718E+00 - 0.11945636E+00 0.11951102E+00 0.11955352E+00 0.11957742E+00 - 0.11926153E+00 0.11927519E+00 0.11930310E+00 0.11934336E+00 - 0.11939588E+00 0.11945636E+00 0.11952118E+00 0.11958408E+00 - 0.11963753E+00 0.11967064E+00 0.11930312E+00 0.11931854E+00 - 0.11934835E+00 0.11939122E+00 0.11944580E+00 0.11951102E+00 - 0.11958407E+00 0.11966184E+00 0.11973718E+00 0.11979230E+00 - 0.11933842E+00 0.11935372E+00 0.11938342E+00 0.11942687E+00 - 0.11948356E+00 0.11955351E+00 0.11963753E+00 0.11973717E+00 - 0.11985201E+00 0.11996403E+00 0.11935731E+00 0.11937233E+00 - 0.11940181E+00 0.11944551E+00 0.11950361E+00 0.11957741E+00 - 0.11967063E+00 0.11979230E+00 0.11996402E+00 0.12024130E+00 - 0.11894054E+00 0.11901729E+00 0.11907722E+00 0.11912928E+00 - 0.11917518E+00 0.11921839E+00 0.11926153E+00 0.11930312E+00 - 0.11933838E+00 0.11935726E+00 0.11901732E+00 0.11905469E+00 - 0.11909989E+00 0.11914451E+00 0.11918781E+00 0.11923131E+00 - 0.11927519E+00 0.11931853E+00 0.11935367E+00 0.11937228E+00 - 0.11907724E+00 0.11909989E+00 0.11913292E+00 0.11917094E+00 - 0.11921223E+00 0.11925673E+00 0.11930310E+00 0.11934832E+00 - 0.11938336E+00 0.11940175E+00 0.11912926E+00 0.11914449E+00 - 0.11917093E+00 0.11920551E+00 0.11924718E+00 0.11929348E+00 - 0.11934335E+00 0.11939117E+00 0.11942681E+00 0.11944545E+00 - 0.11917515E+00 0.11918779E+00 0.11921222E+00 0.11924717E+00 - 0.11929081E+00 0.11934157E+00 0.11939583E+00 0.11944574E+00 - 0.11948350E+00 0.11950355E+00 0.11921835E+00 0.11923127E+00 - 0.11925670E+00 0.11929347E+00 0.11934157E+00 0.11939713E+00 - 0.11945630E+00 0.11951095E+00 0.11955345E+00 0.11957736E+00 - 0.11926148E+00 0.11927515E+00 0.11930306E+00 0.11934333E+00 - 0.11939582E+00 0.11945629E+00 0.11952111E+00 0.11958401E+00 - 0.11963747E+00 0.11967059E+00 0.11930307E+00 0.11931849E+00 - 0.11934828E+00 0.11939114E+00 0.11944573E+00 0.11951094E+00 - 0.11958401E+00 0.11966179E+00 0.11973713E+00 0.11979228E+00 - 0.11933833E+00 0.11935363E+00 0.11938333E+00 0.11942678E+00 - 0.11948348E+00 0.11955344E+00 0.11963747E+00 0.11973713E+00 - 0.11985198E+00 0.11996403E+00 0.11935721E+00 0.11937223E+00 - 0.11940172E+00 0.11944543E+00 0.11950354E+00 0.11957734E+00 - 0.11967058E+00 0.11979228E+00 0.11996403E+00 0.12024402E+00 - 'ENDSOL ' 0 'MESS' - 'SEQNUM ' 1 'INTE' - 15 - 'INTEHEAD' 411 'INTE' - 0 201702 2 0 0 0 - 0 0 10 10 3 300 - 0 0 7 0 2 1 - 1 2 2 0 0 0 - 155 122 130 3 0 0 - 0 0 25 40 58 0 - 99 112 180 5 0 1 - 18 24 10 7 2 4 - 0 1 1 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 31 3 - 2016 14 15 0 0 0 - 0 0 0 0 5 0 - 0 0 12 1 25 1 - 0 0 8 8 0 1 - 0 0 0 0 100 0 - 0 0 0 1 0 1 - 0 1 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 1 1 22 146 - 10 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 1 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 - 'LOGIHEAD' 121 'LOGI' - T T F F F F F F F F F F F F F F F F F F F F F F F - F F F F F F F F F F F F F F F F F F F F F F F F F - F F F F F F F F F F F F F F F F F F F F F F F F F - F F F F F F F F F F F F F F F F F F F F F F F F F - F F F F F F F F F F F F F F F F F F F F F - 'DOUBHEAD' 229 'DOUB' - 0.45500000000000D+03 0.93000000000000D+02 0.36500000000000D+03 - 0.10000000000000D+00 0.15000000000000D+00 0.30000000000000D+01 - 0.30000000000000D+00 0.10000000000000D+00 0.10000000000000D+00 - 0.10000000000000D-02 0.10000000000000D-06 0.10000000000000D-03 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.10000000000000D+02 0.10000000000000D-01 - 0.10000000000000D-05 0.10000000000000D-02 0.10000000000000D-02 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+21 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.10000000000000D-01 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+21 0.10000000000000D+21 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+21 0.10000000000000D+21 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - -0.10000000000000D+01 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.10000000000000D+21 - 0.10000000000000D+21 0.10000000000000D+12 0.12500000000000D+01 - 0.10000000000000D+12 0.10000000000000D+07 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+21 0.00000000000000D+00 0.25000000000000D-01 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+01 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.36500000000000D+03 0.10000000000000D+00 0.15000000000000D+00 - 0.30000000000000D+01 0.30000000000000D+00 0.10000000000000D+00 - 0.10000000000000D+00 0.10000000000000D-02 0.10000000000000D-06 - 0.10000000000000D-03 0.10000000000000D+02 0.10000000000000D-01 - 0.10000000000000D-05 0.10000000000000D-02 0.10000000000000D-02 - 0.00000000000000D+00 0.00000000000000D+00 0.10000000000000D-19 - 0.10130000000000D+01 0.00000000000000D+00 0.10000000000000D+01 - 0.00000000000000D+00 0.30000000000000D+00 0.20000000000000D+01 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.73597900000000D+06 0.73643400000000D+06 - 0.10000000000000D+01 0.20000000000000D+00 0.40000000000000D+00 - 0.12000000000000D+01 0.30000000000000D+00 0.10000000000000D+01 - 0.00000000000000D+00 0.00000000000000D+00 0.40000000000000D+00 - 0.70000000000000D+00 0.20000000000000D+01 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.10000000000000D+01 0.10000000000000D+01 - 0.10000000000000D+01 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+01 0.10000000000000D-03 0.00000000000000D+00 - 0.00000000000000D+00 0.10000000000000D+21 0.10000000000000D+21 - 0.10000000000000D+21 0.10000000000000D+21 0.10000000000000D+21 - 0.10000000000000D+21 0.10000000000000D+21 0.10000000000000D+21 - 0.10000000000000D+21 0.10000000000000D+21 0.10000000000000D+21 - 0.10000000000000D+21 0.10000000000000D+01 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.10000000000000D-03 -0.20000000000000D+21 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.10000000000000D-01 0.10000000000000D+01 - 0.00000000000000D+00 0.10000000000000D+21 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 - 'IGRP ' 198 'INTE' - 2 1 2 0 0 0 - 0 -1 0 0 0 0 - 0 0 -1 0 0 0 - 0 -1 0 0 0 0 - -1 0 0 0 0 1 - 2 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 1 1 0 0 0 0 - 0 1 1 1 0 1 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 1 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 2 2 0 - 0 0 0 0 2 2 - 'SGRP ' 224 'REAL' - 0.10000000E+21 0.10000000E+21 -0.10000000E+21 0.10000000E+21 - 0.00000000E+00 0.00000000E+00 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 -0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 -0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - -0.10000000E+21 0.00000000E+00 0.00000000E+00 0.00000000E+00 - -0.20000000E+21 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.10000000E+21 0.00000000E+00 0.10000000E+21 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.10000000E+01 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.10000000E+21 0.10000000E+21 -0.10000000E+21 0.10000000E+21 - 0.00000000E+00 0.00000000E+00 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 -0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 -0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - -0.10000000E+21 0.00000000E+00 0.00000000E+00 0.00000000E+00 - -0.20000000E+21 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.10000000E+21 0.00000000E+00 0.10000000E+21 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.10000000E+01 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 'XGRP ' 360 'DOUB' - 0.20000045123554D+05 0.25855415480578D-08 0.24746760854427D+05 - 0.32650383413874D+05 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+06 0.00000000000000D+00 0.12927678573147D-12 - 0.12373352510732D+01 0.91000013438506D+07 0.67671066830031D-02 - 0.11263137048930D+08 0.14965238346835D+08 0.00000000000000D+00 - 0.00000000000000D+00 0.45500000000000D+08 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.91000000000000D+07 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.45500000000000D+08 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.20000045123554D+05 0.25855415480578D-08 0.24746760854427D+05 - 0.32650383413874D+05 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+06 0.00000000000000D+00 0.12927678573147D-12 - 0.12373352510732D+01 0.91000013438506D+07 0.67671066830031D-02 - 0.11263137048930D+08 0.14965238346835D+08 0.00000000000000D+00 - 0.00000000000000D+00 0.45500000000000D+08 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.91000000000000D+07 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.45500000000000D+08 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 'ZGRP ' 10 'CHAR' - 'G1 ' ' ' ' ' ' ' ' ' 'FIELD ' ' ' - ' ' ' ' ' ' - 'IWEL ' 310 'INTE' - 10 10 3 3 1 1 - 1 1 1 0 1 0 - 0 0 0 1 0 -100 - 0 0 0 0 0 0 - -1 0 0 0 0 0 - 0 7 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 -1 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 1 - 1 1 1 1 1 4 - 3 3 0 1 0 0 - 0 0 3 0 -100 0 - 0 0 0 0 0 -1 - 0 0 0 0 0 0 - 7 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 -1 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 - 'SWEL ' 244 'REAL' - 0.20000000E+05 0.10000000E+21 0.10000000E+21 0.20000000E+05 - 0.10000000E+21 0.00000000E+00 0.10000000E+04 0.00000000E+00 - 0.00000000E+00 0.84000000E+04 0.00000000E+00 0.99999997E-05 - 0.00000000E+00 0.00000000E+00 0.10000000E+21 0.10000000E+21 - 0.00000000E+00 -0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.00000000E+00 - 0.10000000E+01 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+01 - 0.00000000E+00 0.10000000E+21 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.10000000E+21 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.10000000E+21 0.00000000E+00 0.00000000E+00 0.10000000E+01 - 0.10000000E+01 0.10000000E+01 0.00000000E+00 0.10000000E+21 - 0.00000000E+00 0.10000000E+21 0.10000000E+01 -0.10000000E+21 - 0.10000000E+01 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.50000000E+00 0.10000000E+01 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.00000000E+00 0.10000000E+01 0.10000000E+21 0.10000000E+21 - 0.10000000E+06 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.90140000E+04 0.00000000E+00 0.00000000E+00 0.83350000E+04 - 0.00000000E+00 0.99999997E-05 0.00000000E+00 0.00000000E+00 - 0.10000000E+21 0.10000000E+21 0.00000000E+00 -0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.00000000E+00 0.10000000E+01 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.10000000E+01 0.00000000E+00 0.10000000E+21 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.10000000E+21 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.10000000E+21 0.10000000E+21 0.00000000E+00 - 0.00000000E+00 0.10000000E+01 0.10000000E+01 0.10000000E+01 - 0.00000000E+00 0.10000000E+21 0.00000000E+00 0.10000000E+21 - 0.10000000E+01 -0.10000000E+21 0.10000000E+01 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.50000000E+00 0.10000000E+01 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.10000000E+21 0.00000000E+00 0.10000000E+01 - 'XWEL ' 260 'DOUB' - 0.20000045123554D+05 0.25855415480578D-08 0.24746760854427D+05 - 0.20000045123556D+05 0.32650383413874D+05 0.00000000000000D+00 - 0.31036978331414D+04 0.12927678573147D-12 0.12373352510732D+01 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.91000013438506D+07 0.67671066830031D-02 0.11263137048930D+08 - 0.14965238346835D+08 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.25855415480578D-08 0.24746760854427D+05 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.10000000000000D+04 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.91000000000000D+07 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - -0.10000000000000D+06 0.00000000000000D+00 -0.55923764302930D+05 - 0.00000000000000D+00 0.66893713800949D+04 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.45500000000000D+08 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.55923764302930D+00 - 0.00000000000000D+00 0.00000000000000D+00 -0.10000000000000D+06 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.90140000000000D+04 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.45500000000000D+08 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 -0.55923764302930D+05 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 - 'ZWEL ' 6 'CHAR' - 'PROD ' ' ' ' ' 'INJ ' ' ' ' ' - 'ICON ' 50 'INTE' - 1 10 10 3 0 1 - 0 0 0 0 0 0 - 1 3 0 0 0 0 - 0 0 0 0 0 0 - 0 1 1 1 1 0 - 1 0 0 0 0 0 - 0 1 3 0 0 0 - 0 0 0 0 0 0 - 0 0 - 'SCON ' 80 'REAL' - 0.10610335E+02 0.84000000E+04 0.50000000E+00 0.10000000E+05 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10610335E+02 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 -0.10000000E+21 -0.10000000E+21 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.10610335E+02 0.83350000E+04 0.50000000E+00 0.10000000E+05 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10610335E+02 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 -0.10000000E+21 -0.10000000E+21 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 'XCON ' 116 'DOUB' - 0.20000000407279D+05 0.00000000000000D+00 0.24746785868686D+05 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.31036978331414D+04 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - -0.99999998495248D+05 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.66893713800949D+04 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 - 'STARTSOL' 0 'MESS' - 'PRESSURE' 300 'REAL' - 0.64215137E+04 0.63251978E+04 0.62558818E+04 0.62020430E+04 - 0.61564717E+04 0.61153154E+04 0.60789971E+04 0.60448608E+04 - 0.60154189E+04 0.59954414E+04 0.63251816E+04 0.62805884E+04 - 0.62318330E+04 0.61864214E+04 0.61430923E+04 0.61030327E+04 - 0.60658779E+04 0.60305684E+04 0.59991504E+04 0.59786572E+04 - 0.62558657E+04 0.62318281E+04 0.61977363E+04 0.61589453E+04 - 0.61187856E+04 0.60791880E+04 0.60396782E+04 0.60016001E+04 - 0.59665117E+04 0.59449741E+04 0.62020381E+04 0.61864214E+04 - 0.61589487E+04 0.61243809E+04 0.60858008E+04 0.60444897E+04 - 0.60005864E+04 0.59569404E+04 0.59172847E+04 0.58935586E+04 - 0.61564839E+04 0.61431045E+04 0.61187959E+04 0.60858066E+04 - 0.60458975E+04 0.59990273E+04 0.59488818E+04 0.58972388E+04 - 0.58501279E+04 0.58224873E+04 0.61153350E+04 0.61030527E+04 - 0.60792075E+04 0.60445059E+04 0.59990356E+04 0.59455635E+04 - 0.58852529E+04 0.58212212E+04 0.57627090E+04 0.57282847E+04 - 0.60790239E+04 0.60659082E+04 0.60397080E+04 0.60006113E+04 - 0.59488994E+04 0.58852617E+04 0.58091855E+04 0.57269019E+04 - 0.56522896E+04 0.56049736E+04 0.60449009E+04 0.60306055E+04 - 0.60016372E+04 0.59569717E+04 0.58972632E+04 0.58212407E+04 - 0.57269189E+04 0.56221426E+04 0.55169307E+04 0.54403237E+04 - 0.60154644E+04 0.59991953E+04 0.59665508E+04 0.59173174E+04 - 0.58501577E+04 0.57627427E+04 0.56523413E+04 0.55170610E+04 - 0.53595039E+04 0.52057700E+04 0.59954902E+04 0.59787017E+04 - 0.59450127E+04 0.58935923E+04 0.58225181E+04 0.57283179E+04 - 0.56050122E+04 0.54403579E+04 0.52057773E+04 0.48306421E+04 - 0.64244751E+04 0.63284170E+04 0.62599473E+04 0.62063911E+04 - 0.61616670E+04 0.61213662E+04 0.60852510E+04 0.60515562E+04 - 0.60222754E+04 0.60023560E+04 0.63284009E+04 0.62844346E+04 - 0.62359385E+04 0.61908989E+04 0.61487788E+04 0.61091714E+04 - 0.60722881E+04 0.60372886E+04 0.60060190E+04 0.59855708E+04 - 0.62599307E+04 0.62359331E+04 0.62021187E+04 0.61643047E+04 - 0.61247734E+04 0.60853652E+04 0.60462036E+04 0.60083335E+04 - 0.59733926E+04 0.59518848E+04 0.62063848E+04 0.61908979E+04 - 0.61643076E+04 0.61302998E+04 0.60919224E+04 0.60507427E+04 - 0.60071807E+04 0.59637212E+04 0.59241675E+04 0.59004644E+04 - 0.61616748E+04 0.61487896E+04 0.61247832E+04 0.60919282E+04 - 0.60520298E+04 0.60055386E+04 0.59555400E+04 0.59040337E+04 - 0.58570093E+04 0.58293862E+04 0.61213848E+04 0.61091914E+04 - 0.60853848E+04 0.60507583E+04 0.60055474E+04 0.59521709E+04 - 0.58919463E+04 0.58280239E+04 0.57695874E+04 0.57351758E+04 - 0.60852773E+04 0.60723179E+04 0.60462334E+04 0.60072061E+04 - 0.59555576E+04 0.58919556E+04 0.58159702E+04 0.57337554E+04 - 0.56591602E+04 0.56118535E+04 0.60515957E+04 0.60373257E+04 - 0.60083706E+04 0.59637520E+04 0.59040581E+04 0.58280435E+04 - 0.57337725E+04 0.56289976E+04 0.55237993E+04 0.54471865E+04 - 0.60223208E+04 0.60060645E+04 0.59734316E+04 0.59242002E+04 - 0.58570391E+04 0.57696211E+04 0.56592119E+04 0.55239297E+04 - 0.53663584E+04 0.52125977E+04 0.60024043E+04 0.59856152E+04 - 0.59519233E+04 0.59004976E+04 0.58294170E+04 0.57352090E+04 - 0.56118921E+04 0.54472212E+04 0.52126050E+04 0.48330518E+04 - 0.64293423E+04 0.63364883E+04 0.62710249E+04 0.62174634E+04 - 0.61727246E+04 0.61324185E+04 0.60962861E+04 0.60625884E+04 - 0.60333140E+04 0.60134336E+04 0.63364683E+04 0.62955068E+04 - 0.62470166E+04 0.62019629E+04 0.61598335E+04 0.61202183E+04 - 0.60833179E+04 0.60483130E+04 0.60170610E+04 0.59966475E+04 - 0.62710088E+04 0.62470112E+04 0.62131851E+04 0.61753599E+04 - 0.61358232E+04 0.60964004E+04 0.60572266E+04 0.60193452E+04 - 0.59844385E+04 0.59629561E+04 0.62174570E+04 0.62019619E+04 - 0.61753628E+04 0.61413506E+04 0.61029619E+04 0.60617612E+04 - 0.60181934E+04 0.59747314E+04 0.59352090E+04 0.59115278E+04 - 0.61727324E+04 0.61598442E+04 0.61358330E+04 0.61029678E+04 - 0.60630479E+04 0.60165547E+04 0.59665391E+04 0.59150303E+04 - 0.58680439E+04 0.58404395E+04 0.61324370E+04 0.61202378E+04 - 0.60964199E+04 0.60617769E+04 0.60165630E+04 0.59631680E+04 - 0.59029224E+04 0.58390024E+04 0.57806143E+04 0.57462163E+04 - 0.60963125E+04 0.60833477E+04 0.60572563E+04 0.60182183E+04 - 0.59665566E+04 0.59029316E+04 0.58269478E+04 0.57447583E+04 - 0.56701738E+04 0.56228750E+04 0.60626274E+04 0.60483501E+04 - 0.60193823E+04 0.59747622E+04 0.59150547E+04 0.58390215E+04 - 0.57447754E+04 0.56399922E+04 0.55348062E+04 0.54581821E+04 - 0.60333599E+04 0.60171060E+04 0.59844775E+04 0.59352417E+04 - 0.58680737E+04 0.57806479E+04 0.56702256E+04 0.55349351E+04 - 0.53773408E+04 0.52235391E+04 0.60134819E+04 0.59966919E+04 - 0.59629951E+04 0.59115615E+04 0.58404702E+04 0.57462490E+04 - 0.56229136E+04 0.54582168E+04 0.52235464E+04 0.48402827E+04 - 'RS ' 300 'REAL' - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12216158E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12231295E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12256032E+01 - 'SGAS ' 300 'REAL' - 0.48339722E+00 0.46719685E+00 0.44417015E+00 0.42086306E+00 - 0.38808045E+00 0.34837416E+00 0.30178714E+00 0.23338990E+00 - 0.12505999E+00 0.15768144E-01 0.46726024E+00 0.44906363E+00 - 0.43063089E+00 0.40449205E+00 0.37063929E+00 0.33302572E+00 - 0.28591487E+00 0.21638583E+00 0.10408095E+00 0.98465392E-02 - 0.44427255E+00 0.43066749E+00 0.40950990E+00 0.38161105E+00 - 0.35018218E+00 0.31510195E+00 0.26749584E+00 0.19686525E+00 - 0.83114579E-01 0.57424488E-02 0.42097750E+00 0.40454933E+00 - 0.38163337E+00 0.35573265E+00 0.32801932E+00 0.29402092E+00 - 0.24681859E+00 0.17424868E+00 0.63377537E-01 0.27235982E-02 - 0.38819727E+00 0.37070361E+00 0.35021594E+00 0.32803667E+00 - 0.30223346E+00 0.26813146E+00 0.22255343E+00 0.14905043E+00 - 0.43933373E-01 0.12107803E-02 0.34846959E+00 0.33308446E+00 - 0.31512994E+00 0.29403916E+00 0.26813692E+00 0.23659942E+00 - 0.19123322E+00 0.11768760E+00 0.26209235E-01 0.33561169E-03 - 0.30187744E+00 0.28598204E+00 0.26751596E+00 0.24682151E+00 - 0.22254847E+00 0.19122623E+00 0.14531161E+00 0.73407300E-01 - 0.11591892E-01 0.79119447E-15 0.23349452E+00 0.21647061E+00 - 0.19688390E+00 0.17423484E+00 0.14902824E+00 0.11766106E+00 - 0.73392719E-01 0.27234398E-01 0.00000000E+00 0.00000000E+00 - 0.12518522E+00 0.10427628E+00 0.83152503E-01 0.63361354E-01 - 0.43908816E-01 0.26157551E-01 0.11574373E-01 0.12378577E-02 - 0.11225074E-03 0.74059749E-05 0.15811423E-01 0.98911710E-02 - 0.57460847E-02 0.29798115E-02 0.11849577E-02 0.33282416E-03 - 0.18311187E-06 0.90665928E-08 0.00000000E+00 0.15703440E+00 - 0.43744898E+00 0.32091713E+00 0.49179010E-01 0.87770011E-03 - 0.10132951E-07 0.00000000E+00 0.14951604E-16 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.32116616E+00 0.60430307E-01 - 0.15997181E-02 0.15770168E-06 0.00000000E+00 -0.28459318E-16 - 0.92484351E-16 0.19363646E-16 0.00000000E+00 0.37725270E-09 - 0.49286131E-01 0.16021997E-02 0.22882659E-06 0.00000000E+00 - 0.14007289E-05 0.00000000E+00 0.00000000E+00 0.31760844E-16 - 0.63590808E-08 -0.14522201E-16 0.88732224E-03 0.15687634E-06 - 0.00000000E+00 -0.19498952E-16 -0.33309908E-16 0.27449580E-08 - 0.00000000E+00 0.00000000E+00 0.72116514E-11 0.30390021E-06 - -0.45045493E-16 0.00000000E+00 0.10641042E-15 0.00000000E+00 - 0.21270032E-08 0.00000000E+00 0.71114901E-16 0.13755308E-10 - 0.88527128E-06 0.14656977E-15 0.00000000E+00 -0.53880090E-16 - 0.18587527E-05 0.00000000E+00 -0.45215853E-16 0.00000000E+00 - -0.75168337E-16 0.72407145E-11 0.14510156E-16 0.00000000E+00 - -0.21214236E-17 0.00000000E+00 0.61056243E-11 0.41143092E-09 - 0.43094376E-15 0.11415766E-08 0.17748474E-09 0.75780074E-16 - 0.89591039E-17 0.00000000E+00 0.00000000E+00 0.23397481E-09 - 0.31831235E-12 0.17710879E-11 0.00000000E+00 0.32417698E-17 - 0.00000000E+00 0.86954602E-16 0.13010704E-05 0.00000000E+00 - 0.00000000E+00 0.36778692E-11 0.14830192E-11 0.00000000E+00 - 0.88301618E-06 0.36354826E-16 0.35967256E-08 0.24442551E-09 - 0.00000000E+00 0.94273422E-09 0.00000000E+00 0.00000000E+00 - -0.23788642E-16 -0.47432386E-16 0.00000000E+00 0.30168107E-16 - 0.16022380E-10 0.22375373E-16 0.00000000E+00 0.32641072E-01 - 0.23423043E+00 0.69009364E-01 0.16119212E-01 0.10389307E-07 - 0.66472668E-10 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.39256797E-16 0.69055095E-01 0.20014437E-01 - 0.57895062E-06 0.41479713E-16 0.23589727E-12 0.44982884E-17 - -0.62909906E-17 0.00000000E+00 0.00000000E+00 0.64365769E-16 - 0.16135130E-01 0.41511868E-06 0.18673294E-08 0.43810450E-12 - -0.52184277E-17 0.19404648E-16 0.68277122E-16 0.00000000E+00 - 0.17247778E-12 0.00000000E+00 0.11412876E-16 0.25402429E-08 - 0.12840099E-12 0.00000000E+00 0.15866213E-16 0.16660215E-12 - 0.00000000E+00 0.22439379E-12 0.32550765E-16 -0.30435982E-16 - 0.21448361E-15 0.00000000E+00 0.00000000E+00 0.43341511E-16 - 0.15164387E-12 0.76432633E-16 0.00000000E+00 0.27208980E-16 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.59007392E-16 0.00000000E+00 0.61081028E-16 0.00000000E+00 - 0.73937140E-13 0.00000000E+00 0.00000000E+00 0.13629461E-16 - 0.00000000E+00 0.61871228E-17 0.16762711E-10 0.00000000E+00 - 0.38821363E-16 0.35911388E-16 0.43161093E-17 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.56645127E-18 0.25718475E-13 - 0.44004273E-13 0.29100697E-16 0.00000000E+00 0.79053810E-16 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 -0.54467157E-16 0.00000000E+00 - 0.00000000E+00 0.24407868E-16 0.15124731E-12 0.00000000E+00 - 0.00000000E+00 0.44516227E-12 0.00000000E+00 -0.13634943E-16 - 0.17674335E-16 0.27856918E-15 -0.15788298E-17 0.00000000E+00 - 0.35291912E-16 -0.22121709E-17 0.41764395E-14 0.21553745E-01 - 'SWAT ' 300 'REAL' - 0.11878279E+00 0.11885396E+00 0.11890522E+00 0.11894504E+00 - 0.11897876E+00 0.11900922E+00 0.11903610E+00 0.11906138E+00 - 0.11908318E+00 0.11909798E+00 0.11885398E+00 0.11888695E+00 - 0.11892301E+00 0.11895660E+00 0.11898866E+00 0.11901831E+00 - 0.11904582E+00 0.11907196E+00 0.11909523E+00 0.11911041E+00 - 0.11890523E+00 0.11892301E+00 0.11894823E+00 0.11897693E+00 - 0.11900665E+00 0.11903596E+00 0.11906522E+00 0.11909342E+00 - 0.11911941E+00 0.11913536E+00 0.11894505E+00 0.11895660E+00 - 0.11897693E+00 0.11900251E+00 0.11903106E+00 0.11906166E+00 - 0.11909417E+00 0.11912650E+00 0.11915588E+00 0.11917347E+00 - 0.11897875E+00 0.11898865E+00 0.11900664E+00 0.11903106E+00 - 0.11906061E+00 0.11909533E+00 0.11913247E+00 0.11917074E+00 - 0.11920567E+00 0.11922616E+00 0.11900920E+00 0.11901829E+00 - 0.11903594E+00 0.11906164E+00 0.11909532E+00 0.11913493E+00 - 0.11917963E+00 0.11922710E+00 0.11927050E+00 0.11929604E+00 - 0.11903609E+00 0.11904579E+00 0.11906520E+00 0.11909415E+00 - 0.11913246E+00 0.11917962E+00 0.11923602E+00 0.11929706E+00 - 0.11935243E+00 0.11938756E+00 0.11906135E+00 0.11907194E+00 - 0.11909339E+00 0.11912648E+00 0.11917073E+00 0.11922708E+00 - 0.11929705E+00 0.11937481E+00 0.11945295E+00 0.11950988E+00 - 0.11908315E+00 0.11909520E+00 0.11911938E+00 0.11915586E+00 - 0.11920565E+00 0.11927047E+00 0.11935239E+00 0.11945286E+00 - 0.11956997E+00 0.11968435E+00 0.11909794E+00 0.11911038E+00 - 0.11913534E+00 0.11917344E+00 0.11922614E+00 0.11929601E+00 - 0.11938753E+00 0.11950985E+00 0.11968435E+00 0.11996391E+00 - 0.11878563E+00 0.11885662E+00 0.11890725E+00 0.11894687E+00 - 0.11897995E+00 0.11900978E+00 0.11903651E+00 0.11906146E+00 - 0.11908314E+00 0.11909790E+00 0.11885663E+00 0.11888914E+00 - 0.11892501E+00 0.11895832E+00 0.11898949E+00 0.11901881E+00 - 0.11904611E+00 0.11907203E+00 0.11909518E+00 0.11911033E+00 - 0.11890726E+00 0.11892501E+00 0.11895002E+00 0.11897800E+00 - 0.11900726E+00 0.11903643E+00 0.11906543E+00 0.11909347E+00 - 0.11911935E+00 0.11913529E+00 0.11894687E+00 0.11895832E+00 - 0.11897800E+00 0.11900317E+00 0.11903157E+00 0.11906207E+00 - 0.11909433E+00 0.11912652E+00 0.11915583E+00 0.11917340E+00 - 0.11897995E+00 0.11898948E+00 0.11900725E+00 0.11903157E+00 - 0.11906111E+00 0.11909554E+00 0.11913259E+00 0.11917076E+00 - 0.11920561E+00 0.11922609E+00 0.11900976E+00 0.11901879E+00 - 0.11903641E+00 0.11906205E+00 0.11909553E+00 0.11913508E+00 - 0.11917971E+00 0.11922710E+00 0.11927044E+00 0.11929597E+00 - 0.11903650E+00 0.11904609E+00 0.11906540E+00 0.11909430E+00 - 0.11913257E+00 0.11917970E+00 0.11923604E+00 0.11929703E+00 - 0.11935239E+00 0.11938751E+00 0.11906143E+00 0.11907200E+00 - 0.11909345E+00 0.11912650E+00 0.11917073E+00 0.11922709E+00 - 0.11929701E+00 0.11937478E+00 0.11945291E+00 0.11950984E+00 - 0.11908311E+00 0.11909515E+00 0.11911932E+00 0.11915581E+00 - 0.11920559E+00 0.11927041E+00 0.11935235E+00 0.11945281E+00 - 0.11956993E+00 0.11968434E+00 0.11909787E+00 0.11911030E+00 - 0.11913526E+00 0.11917337E+00 0.11922607E+00 0.11929595E+00 - 0.11938748E+00 0.11950982E+00 0.11968433E+00 0.11996721E+00 - 0.11879008E+00 0.11885870E+00 0.11890711E+00 0.11894673E+00 - 0.11897983E+00 0.11900966E+00 0.11903641E+00 0.11906136E+00 - 0.11908304E+00 0.11909776E+00 0.11885872E+00 0.11888900E+00 - 0.11892487E+00 0.11895820E+00 0.11898937E+00 0.11901869E+00 - 0.11904601E+00 0.11907193E+00 0.11909508E+00 0.11911020E+00 - 0.11890712E+00 0.11892487E+00 0.11894990E+00 0.11897788E+00 - 0.11900714E+00 0.11903632E+00 0.11906533E+00 0.11909338E+00 - 0.11911924E+00 0.11913516E+00 0.11894674E+00 0.11895820E+00 - 0.11897788E+00 0.11900305E+00 0.11903147E+00 0.11906197E+00 - 0.11909424E+00 0.11912643E+00 0.11915572E+00 0.11917327E+00 - 0.11897983E+00 0.11898936E+00 0.11900713E+00 0.11903146E+00 - 0.11906102E+00 0.11909545E+00 0.11913250E+00 0.11917067E+00 - 0.11920550E+00 0.11922597E+00 0.11900964E+00 0.11901867E+00 - 0.11903631E+00 0.11906196E+00 0.11909544E+00 0.11913500E+00 - 0.11917965E+00 0.11922704E+00 0.11927035E+00 0.11929587E+00 - 0.11903639E+00 0.11904599E+00 0.11906531E+00 0.11909422E+00 - 0.11913249E+00 0.11917964E+00 0.11923598E+00 0.11929695E+00 - 0.11935230E+00 0.11938741E+00 0.11906133E+00 0.11907190E+00 - 0.11909336E+00 0.11912641E+00 0.11917066E+00 0.11922702E+00 - 0.11929693E+00 0.11937470E+00 0.11945283E+00 0.11950976E+00 - 0.11908300E+00 0.11909504E+00 0.11911921E+00 0.11915570E+00 - 0.11920548E+00 0.11927032E+00 0.11935226E+00 0.11945273E+00 - 0.11956987E+00 0.11968430E+00 0.11909772E+00 0.11911017E+00 - 0.11913513E+00 0.11917324E+00 0.11922595E+00 0.11929584E+00 - 0.11938738E+00 0.11950974E+00 0.11968429E+00 0.11996994E+00 - 'ENDSOL ' 0 'MESS' - 'SEQNUM ' 1 'INTE' - 25 - 'INTEHEAD' 411 'INTE' - 0 201702 2 0 0 0 - 0 0 10 10 3 300 - 0 0 7 0 2 1 - 1 2 2 0 0 0 - 155 122 130 3 0 0 - 0 0 25 40 58 0 - 99 112 180 5 0 1 - 18 24 10 7 2 4 - 0 1 1 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 31 1 - 2017 24 25 0 0 0 - 0 0 0 0 5 0 - 0 0 12 1 25 1 - 0 0 8 8 0 1 - 0 0 0 0 100 0 - 0 0 0 1 0 1 - 0 1 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 1 1 22 146 - 10 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 1 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 - 'LOGIHEAD' 121 'LOGI' - T T F F F F F F F F F F F F F F F F F F F F F F F - F F F F F F F F F F F F F F F F F F F F F F F F F - F F F F F F F F F F F F F F F F F F F F F F F F F - F F F F F F F F F F F F F F F F F F F F F F F F F - F F F F F F F F F F F F F F F F F F F F F - 'DOUBHEAD' 229 'DOUB' - 0.76100000000000D+03 0.93000000000000D+02 0.36500000000000D+03 - 0.10000000000000D+00 0.15000000000000D+00 0.30000000000000D+01 - 0.30000000000000D+00 0.10000000000000D+00 0.10000000000000D+00 - 0.10000000000000D-02 0.10000000000000D-06 0.10000000000000D-03 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.10000000000000D+02 0.10000000000000D-01 - 0.10000000000000D-05 0.10000000000000D-02 0.10000000000000D-02 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+21 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.10000000000000D-01 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+21 0.10000000000000D+21 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+21 0.10000000000000D+21 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - -0.10000000000000D+01 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.10000000000000D+21 - 0.10000000000000D+21 0.10000000000000D+12 0.12500000000000D+01 - 0.10000000000000D+12 0.10000000000000D+07 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+21 0.00000000000000D+00 0.25000000000000D-01 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+01 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.36500000000000D+03 0.10000000000000D+00 0.15000000000000D+00 - 0.30000000000000D+01 0.30000000000000D+00 0.10000000000000D+00 - 0.10000000000000D+00 0.10000000000000D-02 0.10000000000000D-06 - 0.10000000000000D-03 0.10000000000000D+02 0.10000000000000D-01 - 0.10000000000000D-05 0.10000000000000D-02 0.10000000000000D-02 - 0.00000000000000D+00 0.00000000000000D+00 0.10000000000000D-19 - 0.10130000000000D+01 0.00000000000000D+00 0.10000000000000D+01 - 0.00000000000000D+00 0.30000000000000D+00 0.20000000000000D+01 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.73597900000000D+06 0.73674000000000D+06 - 0.10000000000000D+01 0.20000000000000D+00 0.40000000000000D+00 - 0.12000000000000D+01 0.30000000000000D+00 0.10000000000000D+01 - 0.00000000000000D+00 0.00000000000000D+00 0.40000000000000D+00 - 0.70000000000000D+00 0.20000000000000D+01 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.10000000000000D+01 0.10000000000000D+01 - 0.10000000000000D+01 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+01 0.10000000000000D-03 0.00000000000000D+00 - 0.00000000000000D+00 0.10000000000000D+21 0.10000000000000D+21 - 0.10000000000000D+21 0.10000000000000D+21 0.10000000000000D+21 - 0.10000000000000D+21 0.10000000000000D+21 0.10000000000000D+21 - 0.10000000000000D+21 0.10000000000000D+21 0.10000000000000D+21 - 0.10000000000000D+21 0.10000000000000D+01 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.10000000000000D-03 -0.20000000000000D+21 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.10000000000000D-01 0.10000000000000D+01 - 0.00000000000000D+00 0.10000000000000D+21 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 - 'IGRP ' 198 'INTE' - 2 1 2 0 0 0 - 0 -1 0 0 0 0 - 0 0 -1 0 0 0 - 0 -1 0 0 0 0 - -1 0 0 0 0 1 - 2 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 1 1 0 0 0 0 - 0 1 1 1 0 1 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 1 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 2 2 0 - 0 0 0 0 2 2 - 'SGRP ' 224 'REAL' - 0.10000000E+21 0.10000000E+21 -0.10000000E+21 0.10000000E+21 - 0.00000000E+00 0.00000000E+00 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 -0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 -0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - -0.10000000E+21 0.00000000E+00 0.00000000E+00 0.00000000E+00 - -0.20000000E+21 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.10000000E+21 0.00000000E+00 0.10000000E+21 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.10000000E+01 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.10000000E+21 0.10000000E+21 -0.10000000E+21 0.10000000E+21 - 0.00000000E+00 0.00000000E+00 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 -0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 -0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - -0.10000000E+21 0.00000000E+00 0.00000000E+00 0.00000000E+00 - -0.20000000E+21 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.10000000E+21 0.00000000E+00 0.10000000E+21 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.10000000E+01 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 'XGRP ' 360 'DOUB' - 0.20022907004050D+05 0.17690713775412D-43 0.54251896835712D+05 - 0.47875536608886D+05 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+06 0.00000000000000D+00 0.88352374467071D-48 - 0.27094915251186D+01 0.15221747882105D+08 0.67671068774336D-02 - 0.20667090521983D+08 0.25872521884008D+08 0.00000000000000D+00 - 0.00000000000000D+00 0.76100000000000D+08 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.15220000000000D+08 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.76100000000000D+08 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.20022907004050D+05 0.17690713775412D-43 0.54251896835712D+05 - 0.47875536608886D+05 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+06 0.00000000000000D+00 0.88352374467071D-48 - 0.27094915251186D+01 0.15221747882105D+08 0.67671068774336D-02 - 0.20667090521983D+08 0.25872521884008D+08 0.00000000000000D+00 - 0.00000000000000D+00 0.76100000000000D+08 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.15220000000000D+08 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.76100000000000D+08 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 'ZGRP ' 10 'CHAR' - 'G1 ' ' ' ' ' ' ' ' ' 'FIELD ' ' ' - ' ' ' ' ' ' - 'IWEL ' 310 'INTE' - 10 10 3 3 1 1 - 1 1 1 0 1 0 - 0 0 0 1 0 -100 - 0 0 0 0 0 0 - -1 0 0 0 0 0 - 0 7 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 -1 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 1 - 1 1 1 1 1 4 - 3 3 0 1 0 0 - 0 0 3 0 -100 0 - 0 0 0 0 0 -1 - 0 0 0 0 0 0 - 7 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 -1 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 - 'SWEL ' 244 'REAL' - 0.20000000E+05 0.10000000E+21 0.10000000E+21 0.20000000E+05 - 0.10000000E+21 0.00000000E+00 0.10000000E+04 0.00000000E+00 - 0.00000000E+00 0.84000000E+04 0.00000000E+00 0.99999997E-05 - 0.00000000E+00 0.00000000E+00 0.10000000E+21 0.10000000E+21 - 0.00000000E+00 -0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.00000000E+00 - 0.10000000E+01 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+01 - 0.00000000E+00 0.10000000E+21 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.10000000E+21 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.10000000E+21 0.00000000E+00 0.00000000E+00 0.10000000E+01 - 0.10000000E+01 0.10000000E+01 0.00000000E+00 0.10000000E+21 - 0.00000000E+00 0.10000000E+21 0.10000000E+01 -0.10000000E+21 - 0.10000000E+01 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.50000000E+00 0.10000000E+01 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.00000000E+00 0.10000000E+01 0.10000000E+21 0.10000000E+21 - 0.10000000E+06 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.90140000E+04 0.00000000E+00 0.00000000E+00 0.83350000E+04 - 0.00000000E+00 0.99999997E-05 0.00000000E+00 0.00000000E+00 - 0.10000000E+21 0.10000000E+21 0.00000000E+00 -0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.00000000E+00 0.10000000E+01 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.10000000E+01 0.00000000E+00 0.10000000E+21 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.10000000E+21 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.10000000E+21 0.10000000E+21 0.00000000E+00 - 0.00000000E+00 0.10000000E+01 0.10000000E+01 0.10000000E+01 - 0.00000000E+00 0.10000000E+21 0.00000000E+00 0.10000000E+21 - 0.10000000E+01 -0.10000000E+21 0.10000000E+01 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.50000000E+00 0.10000000E+01 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.10000000E+21 0.00000000E+00 0.10000000E+01 - 'XWEL ' 260 'DOUB' - 0.20022907004050D+05 0.17690713775412D-43 0.54251896835712D+05 - 0.20022907004050D+05 0.47875536608886D+05 0.00000000000000D+00 - 0.27980425147414D+04 0.88352374467071D-48 0.27094915251186D+01 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.15221747882105D+08 0.67671068774336D-02 0.20667090521983D+08 - 0.25872521884008D+08 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.17690713775412D-43 0.54251896835712D+05 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.10000000000000D+04 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.15220000000000D+08 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - -0.10000000000000D+06 0.00000000000000D+00 -0.52369763060710D+05 - 0.00000000000000D+00 0.70485831863371D+04 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.76100000000000D+08 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.52369763060710D+00 - 0.00000000000000D+00 0.00000000000000D+00 -0.10000000000000D+06 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.90140000000000D+04 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.76100000000000D+08 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 -0.52369763060710D+05 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 - 'ZWEL ' 6 'CHAR' - 'PROD ' ' ' ' ' 'INJ ' ' ' ' ' - 'ICON ' 50 'INTE' - 1 10 10 3 0 1 - 0 0 0 0 0 0 - 1 3 0 0 0 0 - 0 0 0 0 0 0 - 0 1 1 1 1 0 - 1 0 0 0 0 0 - 0 1 3 0 0 0 - 0 0 0 0 0 0 - 0 0 - 'SCON ' 80 'REAL' - 0.10610335E+02 0.84000000E+04 0.50000000E+00 0.10000000E+05 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10610335E+02 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 -0.10000000E+21 -0.10000000E+21 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.10610335E+02 0.83350000E+04 0.50000000E+00 0.10000000E+05 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10610335E+02 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 -0.10000000E+21 -0.10000000E+21 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 'XCON ' 116 'DOUB' - 0.20000687586885D+05 0.00000000000000D+00 0.54263549515381D+05 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.27980425147414D+04 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - -0.10000000399456D+06 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.70485831863371D+04 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 - 'STARTSOL' 0 'MESS' - 'PRESSURE' 300 'REAL' - 0.67981689E+04 0.67123604E+04 0.66515991E+04 0.66052246E+04 - 0.65699438E+04 0.65421982E+04 0.65187925E+04 0.64998013E+04 - 0.64856631E+04 0.64761030E+04 0.67123545E+04 0.66731611E+04 - 0.66299194E+04 0.65919248E+04 0.65600225E+04 0.65328569E+04 - 0.65087041E+04 0.64890669E+04 0.64739126E+04 0.64635957E+04 - 0.66515933E+04 0.66299170E+04 0.66007119E+04 0.65705337E+04 - 0.65417563E+04 0.65142891E+04 0.64884673E+04 0.64670151E+04 - 0.64496548E+04 0.64378618E+04 0.66052183E+04 0.65919204E+04 - 0.65705317E+04 0.65449429E+04 0.65168066E+04 0.64868979E+04 - 0.64580488E+04 0.64327900E+04 0.64114014E+04 0.63971353E+04 - 0.65699355E+04 0.65600171E+04 0.65417544E+04 0.65168066E+04 - 0.64862056E+04 0.64520781E+04 0.64173867E+04 0.63849834E+04 - 0.63566411E+04 0.63381816E+04 0.65421934E+04 0.65328545E+04 - 0.65142910E+04 0.64869004E+04 0.64520801E+04 0.64112720E+04 - 0.63667554E+04 0.63218257E+04 0.62814072E+04 0.62552065E+04 - 0.65187939E+04 0.65087065E+04 0.64884717E+04 0.64580542E+04 - 0.64173916E+04 0.63667578E+04 0.63073608E+04 0.62419644E+04 - 0.61795957E+04 0.61371050E+04 0.64998047E+04 0.64890713E+04 - 0.64670220E+04 0.64327983E+04 0.63849917E+04 0.63218306E+04 - 0.62419653E+04 0.61459385E+04 0.60434961E+04 0.59619204E+04 - 0.64856714E+04 0.64739209E+04 0.64496646E+04 0.64114116E+04 - 0.63566499E+04 0.62814116E+04 0.61795938E+04 0.60434922E+04 - 0.58704141E+04 0.56899526E+04 0.64761147E+04 0.64636079E+04 - 0.64378740E+04 0.63971460E+04 0.63381899E+04 0.62552080E+04 - 0.61370928E+04 0.59619087E+04 0.56899507E+04 0.52240107E+04 - 0.68012764E+04 0.67156938E+04 0.66552026E+04 0.66102441E+04 - 0.65753530E+04 0.65477754E+04 0.65249829E+04 0.65063726E+04 - 0.64924854E+04 0.64830547E+04 0.67156875E+04 0.66766494E+04 - 0.66348169E+04 0.65971221E+04 0.65654146E+04 0.65384253E+04 - 0.65149971E+04 0.64956289E+04 0.64807417E+04 0.64705474E+04 - 0.66551963E+04 0.66348145E+04 0.66058345E+04 0.65758496E+04 - 0.65471304E+04 0.65200049E+04 0.64948447E+04 0.64735547E+04 - 0.64564819E+04 0.64448105E+04 0.66102378E+04 0.65971172E+04 - 0.65758477E+04 0.65502456E+04 0.65222256E+04 0.64929761E+04 - 0.64644663E+04 0.64392910E+04 0.64182188E+04 0.64040771E+04 - 0.65753452E+04 0.65654092E+04 0.65471279E+04 0.65222256E+04 - 0.64920972E+04 0.64583652E+04 0.64238179E+04 0.63914561E+04 - 0.63634390E+04 0.63451113E+04 0.65477700E+04 0.65384229E+04 - 0.65200049E+04 0.64929780E+04 0.64583672E+04 0.64176582E+04 - 0.63731753E+04 0.63283130E+04 0.62881689E+04 0.62621113E+04 - 0.65249834E+04 0.65149990E+04 0.64948486E+04 0.64644717E+04 - 0.64238223E+04 0.63731777E+04 0.63137373E+04 0.62484741E+04 - 0.61863057E+04 0.61439619E+04 0.65063760E+04 0.64956333E+04 - 0.64735615E+04 0.64392988E+04 0.63914639E+04 0.63283174E+04 - 0.62484756E+04 0.61525347E+04 0.60501558E+04 0.59687354E+04 - 0.64924937E+04 0.64807500E+04 0.64564917E+04 0.64182290E+04 - 0.63634478E+04 0.62881733E+04 0.61863037E+04 0.60501519E+04 - 0.58770918E+04 0.56965957E+04 0.64830664E+04 0.64705596E+04 - 0.64448228E+04 0.64040879E+04 0.63451191E+04 0.62621123E+04 - 0.61439497E+04 0.59687236E+04 0.56965938E+04 0.52249961E+04 - 0.68063940E+04 0.67221064E+04 0.66662188E+04 0.66214077E+04 - 0.65865117E+04 0.65589214E+04 0.65361201E+04 0.65175059E+04 - 0.65036108E+04 0.64941963E+04 0.67220986E+04 0.66875176E+04 - 0.66459785E+04 0.66082856E+04 0.65765674E+04 0.65495664E+04 - 0.65261318E+04 0.65067573E+04 0.64918633E+04 0.64816870E+04 - 0.66662119E+04 0.66459756E+04 0.66170000E+04 0.65870063E+04 - 0.65582744E+04 0.65311377E+04 0.65059751E+04 0.64846748E+04 - 0.64675967E+04 0.64559453E+04 0.66214014E+04 0.66082808E+04 - 0.65870044E+04 0.65613911E+04 0.65333599E+04 0.65041040E+04 - 0.64755898E+04 0.64503994E+04 0.64293237E+04 0.64152026E+04 - 0.65865039E+04 0.65765620E+04 0.65582720E+04 0.65333599E+04 - 0.65032236E+04 0.64694878E+04 0.64349312E+04 0.64025513E+04 - 0.63745303E+04 0.63562212E+04 0.65589160E+04 0.65495635E+04 - 0.65311382E+04 0.65041060E+04 0.64694897E+04 0.64287720E+04 - 0.63842754E+04 0.63393940E+04 0.62992422E+04 0.62731943E+04 - 0.65361206E+04 0.65261338E+04 0.65059790E+04 0.64755947E+04 - 0.64349355E+04 0.63842778E+04 0.63248184E+04 0.62595391E+04 - 0.61973540E+04 0.61550029E+04 0.65175093E+04 0.65067617E+04 - 0.64846816E+04 0.64504072E+04 0.64025591E+04 0.63393989E+04 - 0.62595400E+04 0.61635845E+04 0.60611758E+04 0.59797437E+04 - 0.65036191E+04 0.64918716E+04 0.64676064E+04 0.64293340E+04 - 0.63745391E+04 0.62992461E+04 0.61973525E+04 0.60611719E+04 - 0.58880850E+04 0.57074971E+04 0.64942080E+04 0.64816997E+04 - 0.64559575E+04 0.64152134E+04 0.63562295E+04 0.62731953E+04 - 0.61549907E+04 0.59797324E+04 0.57074951E+04 0.52267480E+04 - 'RS ' 300 'REAL' - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12216158E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12231295E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12256032E+01 - 'SGAS ' 300 'REAL' - 0.50055450E+00 0.49408710E+00 0.48315936E+00 0.46701396E+00 - 0.44689053E+00 0.41845676E+00 0.37826228E+00 0.32574490E+00 - 0.24276857E+00 0.90163559E-01 0.49410802E+00 0.48600519E+00 - 0.47318652E+00 0.45812473E+00 0.43735543E+00 0.40802988E+00 - 0.36821043E+00 0.31775987E+00 0.23447692E+00 0.81971966E-01 - 0.48320577E+00 0.47320655E+00 0.46157214E+00 0.44563469E+00 - 0.42391065E+00 0.39468837E+00 0.35750172E+00 0.31023934E+00 - 0.22826572E+00 0.77412002E-01 0.46707538E+00 0.45815957E+00 - 0.44564927E+00 0.42894176E+00 0.40699089E+00 0.37927854E+00 - 0.34715879E+00 0.30374813E+00 0.22494739E+00 0.77279337E-01 - 0.44695964E+00 0.43740150E+00 0.42393970E+00 0.40700516E+00 - 0.38639507E+00 0.36354658E+00 0.33719337E+00 0.29851913E+00 - 0.22536190E+00 0.83602875E-01 0.41853747E+00 0.40808728E+00 - 0.39472768E+00 0.37930152E+00 0.36355567E+00 0.34707353E+00 - 0.32670161E+00 0.29386738E+00 0.22968093E+00 0.98591752E-01 - 0.37834877E+00 0.36827347E+00 0.35754028E+00 0.34718168E+00 - 0.33720511E+00 0.32670563E+00 0.31274301E+00 0.28754014E+00 - 0.23642632E+00 0.12452470E+00 0.32582518E+00 0.31782413E+00 - 0.31028128E+00 0.30377319E+00 0.29853228E+00 0.29387152E+00 - 0.28754020E+00 0.27416205E+00 0.24097699E+00 0.15301925E+00 - 0.24286678E+00 0.23457952E+00 0.22833915E+00 0.22499044E+00 - 0.22538234E+00 0.22968715E+00 0.23642576E+00 0.24097954E+00 - 0.23147486E+00 0.18126808E+00 0.90256505E-01 0.82086354E-01 - 0.77482559E-01 0.77439547E-01 0.83678044E-01 0.98614797E-01 - 0.12459118E+00 0.15309215E+00 0.18130840E+00 0.23945180E+00 - 0.47428724E+00 0.41899416E+00 0.13359432E+00 0.75352537E-02 - 0.95570067E-08 0.38635267E-16 0.13660339E-15 0.00000000E+00 - 0.12076478E-15 0.00000000E+00 0.41909042E+00 0.17718008E+00 - 0.15630079E-01 0.14892477E-06 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.25188108E-16 0.30810866E-15 0.35176878E-09 - 0.13376430E+00 0.15642049E-01 0.21618418E-06 0.00000000E+00 - 0.13191434E-05 0.00000000E+00 0.00000000E+00 0.18700564E-15 - 0.59303757E-08 0.50344369E-16 0.75649284E-02 0.14814545E-06 - 0.00000000E+00 0.00000000E+00 0.17280066E-15 0.25763562E-08 - 0.26573197E-15 0.16699391E-15 0.67118277E-11 0.28239245E-06 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 -0.28653431E-15 - 0.19969819E-08 0.21689700E-15 0.91859644E-16 0.12811629E-10 - 0.82192139E-06 0.00000000E+00 0.00000000E+00 0.20369678E-16 - 0.17469492E-05 0.10761203E-15 0.00000000E+00 0.00000000E+00 - 0.55711865E-16 0.67261301E-11 0.87986461E-16 0.00000000E+00 - 0.31630185E-15 0.00000000E+00 0.57254874E-11 0.38520243E-09 - -0.52700573E-16 0.10640482E-08 0.16491596E-09 0.00000000E+00 - 0.21641357E-15 0.65837520E-06 0.00000000E+00 0.21908714E-09 - 0.29765957E-12 0.16527023E-11 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.12000114E-05 0.00000000E+00 - 0.00000000E+00 0.34346894E-11 0.13833603E-11 0.37107561E-15 - 0.81983035E-06 0.00000000E+00 0.33222645E-08 0.22544512E-09 - 0.00000000E+00 0.87183244E-09 0.00000000E+00 0.90791410E-16 - 0.00000000E+00 0.00000000E+00 0.18491607E-15 0.00000000E+00 - 0.14780496E-10 0.14309131E-15 0.41288145E-05 0.22386165E+00 - 0.27815342E+00 0.13135679E+00 0.26485773E-01 0.90386416E-03 - 0.62699165E-10 0.78658993E-16 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.13142440E+00 0.28150149E-01 - 0.16012291E-02 0.00000000E+00 0.22245473E-12 0.00000000E+00 - 0.61679669E-16 0.00000000E+00 0.00000000E+00 0.38168684E-16 - 0.26494462E-01 0.16018901E-02 0.17642869E-08 0.41337477E-12 - 0.74833462E-16 0.87257887E-16 0.00000000E+00 0.00000000E+00 - 0.16068985E-12 0.45237141E-16 0.88474457E-03 0.74369218E-07 - 0.12109656E-12 0.00000000E+00 0.00000000E+00 0.15628507E-12 - 0.00000000E+00 0.20945055E-12 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.21900516E-13 - 0.14250326E-12 0.00000000E+00 -0.11577692E-15 -0.25149368E-17 - 0.00000000E+00 0.00000000E+00 0.17809381E-08 0.48851262E-11 - 0.26026338E-13 0.00000000E+00 0.00000000E+00 0.31443034E-16 - 0.68961377E-13 0.00000000E+00 0.00000000E+00 -0.23927114E-16 - 0.23603050E-15 -0.74397352E-16 0.15720012E-10 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.35182572E-16 - 0.10678448E-15 0.00000000E+00 0.37236154E-16 0.23895890E-13 - 0.41108735E-13 0.24792874E-15 -0.26524188E-16 0.00000000E+00 - -0.33967067E-16 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.14516779E-15 0.24742676E-16 - -0.10626858E-15 0.11915141E-15 0.13956295E-12 0.32198920E-15 - 0.21408602E-16 0.41206058E-12 0.25618922E-16 0.79837446E-17 - 0.00000000E+00 -0.82020569E-16 0.11130468E-16 0.00000000E+00 - 0.55095691E-16 0.00000000E+00 0.64630004E-16 0.11308308E+00 - 'SWAT ' 300 'REAL' - 0.11850486E+00 0.11856812E+00 0.11861295E+00 0.11864716E+00 - 0.11867320E+00 0.11869367E+00 0.11871095E+00 0.11872498E+00 - 0.11873542E+00 0.11874247E+00 0.11856813E+00 0.11859704E+00 - 0.11862893E+00 0.11865697E+00 0.11868051E+00 0.11870057E+00 - 0.11871840E+00 0.11873290E+00 0.11874409E+00 0.11875171E+00 - 0.11861295E+00 0.11862894E+00 0.11865049E+00 0.11867276E+00 - 0.11869400E+00 0.11871428E+00 0.11873335E+00 0.11874919E+00 - 0.11876201E+00 0.11877072E+00 0.11864717E+00 0.11865698E+00 - 0.11867276E+00 0.11869165E+00 0.11871242E+00 0.11873450E+00 - 0.11875581E+00 0.11877447E+00 0.11879027E+00 0.11880081E+00 - 0.11867320E+00 0.11868052E+00 0.11869400E+00 0.11871242E+00 - 0.11873502E+00 0.11876022E+00 0.11878584E+00 0.11880979E+00 - 0.11883073E+00 0.11884438E+00 0.11869368E+00 0.11870057E+00 - 0.11871428E+00 0.11873450E+00 0.11876022E+00 0.11879037E+00 - 0.11882326E+00 0.11885647E+00 0.11888634E+00 0.11890572E+00 - 0.11871095E+00 0.11871840E+00 0.11873334E+00 0.11875580E+00 - 0.11878584E+00 0.11882325E+00 0.11886716E+00 0.11891551E+00 - 0.11896165E+00 0.11899309E+00 0.11872497E+00 0.11873290E+00 - 0.11874918E+00 0.11877446E+00 0.11880978E+00 0.11885646E+00 - 0.11891551E+00 0.11898655E+00 0.11906239E+00 0.11912281E+00 - 0.11873541E+00 0.11874409E+00 0.11876200E+00 0.11879026E+00 - 0.11883073E+00 0.11888634E+00 0.11896165E+00 0.11906239E+00 - 0.11919063E+00 0.11932448E+00 0.11874247E+00 0.11875170E+00 - 0.11877071E+00 0.11880080E+00 0.11884437E+00 0.11890572E+00 - 0.11899310E+00 0.11912282E+00 0.11932448E+00 0.11967077E+00 - 0.11850759E+00 0.11857069E+00 0.11861531E+00 0.11864848E+00 - 0.11867423E+00 0.11869458E+00 0.11871141E+00 0.11872515E+00 - 0.11873540E+00 0.11874237E+00 0.11857069E+00 0.11859948E+00 - 0.11863035E+00 0.11865816E+00 0.11868156E+00 0.11870149E+00 - 0.11871878E+00 0.11873309E+00 0.11874408E+00 0.11875161E+00 - 0.11861531E+00 0.11863035E+00 0.11865173E+00 0.11867386E+00 - 0.11869506E+00 0.11871509E+00 0.11873366E+00 0.11874939E+00 - 0.11876199E+00 0.11877061E+00 0.11864848E+00 0.11865816E+00 - 0.11867386E+00 0.11869276E+00 0.11871345E+00 0.11873505E+00 - 0.11875610E+00 0.11877469E+00 0.11879026E+00 0.11880071E+00 - 0.11867423E+00 0.11868156E+00 0.11869506E+00 0.11871345E+00 - 0.11873569E+00 0.11876060E+00 0.11878613E+00 0.11881004E+00 - 0.11883074E+00 0.11884429E+00 0.11869459E+00 0.11870149E+00 - 0.11871509E+00 0.11873504E+00 0.11876060E+00 0.11879067E+00 - 0.11882354E+00 0.11885670E+00 0.11888638E+00 0.11890565E+00 - 0.11871141E+00 0.11871878E+00 0.11873366E+00 0.11875609E+00 - 0.11878612E+00 0.11882354E+00 0.11886748E+00 0.11891574E+00 - 0.11896172E+00 0.11899305E+00 0.11872515E+00 0.11873308E+00 - 0.11874938E+00 0.11877469E+00 0.11881003E+00 0.11885670E+00 - 0.11891574E+00 0.11898671E+00 0.11906250E+00 0.11912280E+00 - 0.11873540E+00 0.11874407E+00 0.11876199E+00 0.11879025E+00 - 0.11883073E+00 0.11888637E+00 0.11896172E+00 0.11906250E+00 - 0.11919072E+00 0.11932459E+00 0.11874236E+00 0.11875160E+00 - 0.11877061E+00 0.11880070E+00 0.11884428E+00 0.11890565E+00 - 0.11899307E+00 0.11912281E+00 0.11932460E+00 0.11967511E+00 - 0.11851184E+00 0.11857399E+00 0.11861522E+00 0.11864828E+00 - 0.11867403E+00 0.11869439E+00 0.11871123E+00 0.11872497E+00 - 0.11873523E+00 0.11874218E+00 0.11857399E+00 0.11859950E+00 - 0.11863015E+00 0.11865796E+00 0.11868137E+00 0.11870130E+00 - 0.11871860E+00 0.11873291E+00 0.11874391E+00 0.11875142E+00 - 0.11861522E+00 0.11863015E+00 0.11865153E+00 0.11867367E+00 - 0.11869487E+00 0.11871491E+00 0.11873349E+00 0.11874922E+00 - 0.11876183E+00 0.11877044E+00 0.11864828E+00 0.11865796E+00 - 0.11867367E+00 0.11869258E+00 0.11871327E+00 0.11873487E+00 - 0.11875593E+00 0.11877453E+00 0.11879010E+00 0.11880054E+00 - 0.11867404E+00 0.11868137E+00 0.11869488E+00 0.11871327E+00 - 0.11873552E+00 0.11876044E+00 0.11878596E+00 0.11880989E+00 - 0.11883059E+00 0.11884412E+00 0.11869440E+00 0.11870130E+00 - 0.11871491E+00 0.11873487E+00 0.11876044E+00 0.11879051E+00 - 0.11882339E+00 0.11885656E+00 0.11888625E+00 0.11890551E+00 - 0.11871123E+00 0.11871860E+00 0.11873349E+00 0.11875592E+00 - 0.11878596E+00 0.11882339E+00 0.11886734E+00 0.11891561E+00 - 0.11896161E+00 0.11899295E+00 0.11872497E+00 0.11873291E+00 - 0.11874922E+00 0.11877453E+00 0.11880988E+00 0.11885656E+00 - 0.11891561E+00 0.11898659E+00 0.11906240E+00 0.11912272E+00 - 0.11873522E+00 0.11874390E+00 0.11876182E+00 0.11879010E+00 - 0.11883058E+00 0.11888625E+00 0.11896161E+00 0.11906241E+00 - 0.11919065E+00 0.11932459E+00 0.11874218E+00 0.11875141E+00 - 0.11877043E+00 0.11880053E+00 0.11884412E+00 0.11890551E+00 - 0.11899295E+00 0.11912273E+00 0.11932459E+00 0.11968192E+00 - 'ENDSOL ' 0 'MESS' - 'SEQNUM ' 1 'INTE' - 50 - 'INTEHEAD' 411 'INTE' - 0 201702 2 0 0 0 - 0 0 10 10 3 300 - 0 0 7 0 2 1 - 1 2 2 0 0 0 - 155 122 130 3 0 0 - 0 0 25 40 58 0 - 99 112 180 5 0 1 - 18 24 10 7 2 4 - 0 1 1 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 28 2 - 2019 49 50 0 0 0 - 0 0 0 0 5 0 - 0 0 12 1 25 1 - 0 0 8 8 0 1 - 0 0 0 0 100 0 - 0 0 0 1 0 1 - 0 1 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 1 1 22 146 - 10 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 1 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 - 'LOGIHEAD' 121 'LOGI' - T T F F F F F F F F F F F F F F F F F F F F F F F - F F F F F F F F F F F F F F F F F F F F F F F F F - F F F F F F F F F F F F F F F F F F F F F F F F F - F F F F F F F F F F F F F F F F F F F F F F F F F - F F F F F F F F F F F F F F F F F F F F F - 'DOUBHEAD' 229 'DOUB' - 0.15190000000000D+04 0.84000000000000D+02 0.36500000000000D+03 - 0.10000000000000D+00 0.15000000000000D+00 0.30000000000000D+01 - 0.30000000000000D+00 0.10000000000000D+00 0.10000000000000D+00 - 0.10000000000000D-02 0.10000000000000D-06 0.10000000000000D-03 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.10000000000000D+02 0.10000000000000D-01 - 0.10000000000000D-05 0.10000000000000D-02 0.10000000000000D-02 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+21 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.10000000000000D-01 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+21 0.10000000000000D+21 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+21 0.10000000000000D+21 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - -0.10000000000000D+01 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.10000000000000D+21 - 0.10000000000000D+21 0.10000000000000D+12 0.12500000000000D+01 - 0.10000000000000D+12 0.10000000000000D+07 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+21 0.00000000000000D+00 0.25000000000000D-01 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+01 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.36500000000000D+03 0.10000000000000D+00 0.15000000000000D+00 - 0.30000000000000D+01 0.30000000000000D+00 0.10000000000000D+00 - 0.10000000000000D+00 0.10000000000000D-02 0.10000000000000D-06 - 0.10000000000000D-03 0.10000000000000D+02 0.10000000000000D-01 - 0.10000000000000D-05 0.10000000000000D-02 0.10000000000000D-02 - 0.00000000000000D+00 0.00000000000000D+00 0.10000000000000D-19 - 0.10130000000000D+01 0.00000000000000D+00 0.10000000000000D+01 - 0.00000000000000D+00 0.30000000000000D+00 0.20000000000000D+01 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.73597900000000D+06 0.73749800000000D+06 - 0.10000000000000D+01 0.20000000000000D+00 0.40000000000000D+00 - 0.12000000000000D+01 0.30000000000000D+00 0.10000000000000D+01 - 0.00000000000000D+00 0.00000000000000D+00 0.40000000000000D+00 - 0.70000000000000D+00 0.20000000000000D+01 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.10000000000000D+01 0.10000000000000D+01 - 0.10000000000000D+01 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+01 0.10000000000000D-03 0.00000000000000D+00 - 0.00000000000000D+00 0.10000000000000D+21 0.10000000000000D+21 - 0.10000000000000D+21 0.10000000000000D+21 0.10000000000000D+21 - 0.10000000000000D+21 0.10000000000000D+21 0.10000000000000D+21 - 0.10000000000000D+21 0.10000000000000D+21 0.10000000000000D+21 - 0.10000000000000D+21 0.10000000000000D+01 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.10000000000000D-03 -0.20000000000000D+21 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.10000000000000D-01 0.10000000000000D+01 - 0.00000000000000D+00 0.10000000000000D+21 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 - 'IGRP ' 198 'INTE' - 2 1 2 0 0 0 - 0 -1 0 0 0 0 - 0 0 -1 0 0 0 - 0 -1 0 0 0 0 - -1 0 0 0 0 1 - 2 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 1 1 0 0 0 0 - 0 1 1 1 0 1 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 1 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 2 2 0 - 0 0 0 0 2 2 - 'SGRP ' 224 'REAL' - 0.10000000E+21 0.10000000E+21 -0.10000000E+21 0.10000000E+21 - 0.00000000E+00 0.00000000E+00 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 -0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 -0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - -0.10000000E+21 0.00000000E+00 0.00000000E+00 0.00000000E+00 - -0.20000000E+21 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.10000000E+21 0.00000000E+00 0.10000000E+21 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.10000000E+01 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.10000000E+21 0.10000000E+21 -0.10000000E+21 0.10000000E+21 - 0.00000000E+00 0.00000000E+00 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 -0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 -0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - -0.10000000E+21 0.00000000E+00 0.00000000E+00 0.00000000E+00 - -0.20000000E+21 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.10000000E+21 0.00000000E+00 0.10000000E+21 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.10000000E+01 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 'XGRP ' 360 'DOUB' - 0.12960687373851D+05 0.46114621719296D-04 0.12140912863400D+06 - 0.89152624445574D+05 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+06 0.00000000000000D+00 0.35580382602438D-08 - 0.93674914865203D+01 0.27976615746195D+08 0.25542799381211D-01 - 0.11094182001000D+09 0.90224331800037D+08 0.00000000000000D+00 - 0.00000000000000D+00 0.15190000000000D+09 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.30380000000000D+08 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.15190000000000D+09 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.12960687373851D+05 0.46114621719296D-04 0.12140912863400D+06 - 0.89152624445574D+05 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+06 0.00000000000000D+00 0.35580382602438D-08 - 0.93674914865203D+01 0.27976615746195D+08 0.25542799381211D-01 - 0.11094182001000D+09 0.90224331800037D+08 0.00000000000000D+00 - 0.00000000000000D+00 0.15190000000000D+09 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.30380000000000D+08 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.15190000000000D+09 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 'ZGRP ' 10 'CHAR' - 'G1 ' ' ' ' ' ' ' ' ' 'FIELD ' ' ' - ' ' ' ' ' ' - 'IWEL ' 310 'INTE' - 10 10 3 3 1 1 - 1 1 1 0 1 0 - 0 0 0 1 0 -100 - 0 0 0 0 0 0 - -1 0 0 0 0 0 - 0 7 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 -1 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 1 - 1 1 1 1 1 4 - 3 3 0 1 0 0 - 0 0 3 0 -100 0 - 0 0 0 0 0 -1 - 0 0 0 0 0 0 - 7 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 -1 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 - 'SWEL ' 244 'REAL' - 0.20000000E+05 0.10000000E+21 0.10000000E+21 0.20000000E+05 - 0.10000000E+21 0.00000000E+00 0.10000000E+04 0.00000000E+00 - 0.00000000E+00 0.84000000E+04 0.00000000E+00 0.99999997E-05 - 0.00000000E+00 0.00000000E+00 0.10000000E+21 0.10000000E+21 - 0.00000000E+00 -0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.00000000E+00 - 0.10000000E+01 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+01 - 0.00000000E+00 0.10000000E+21 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.10000000E+21 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.10000000E+21 0.00000000E+00 0.00000000E+00 0.10000000E+01 - 0.10000000E+01 0.10000000E+01 0.00000000E+00 0.10000000E+21 - 0.00000000E+00 0.10000000E+21 0.10000000E+01 -0.10000000E+21 - 0.10000000E+01 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.50000000E+00 0.10000000E+01 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.00000000E+00 0.10000000E+01 0.10000000E+21 0.10000000E+21 - 0.10000000E+06 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.90140000E+04 0.00000000E+00 0.00000000E+00 0.83350000E+04 - 0.00000000E+00 0.99999997E-05 0.00000000E+00 0.00000000E+00 - 0.10000000E+21 0.10000000E+21 0.00000000E+00 -0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.00000000E+00 0.10000000E+01 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.10000000E+01 0.00000000E+00 0.10000000E+21 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.10000000E+21 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.10000000E+21 0.10000000E+21 0.00000000E+00 - 0.00000000E+00 0.10000000E+01 0.10000000E+01 0.10000000E+01 - 0.00000000E+00 0.10000000E+21 0.00000000E+00 0.10000000E+21 - 0.10000000E+01 -0.10000000E+21 0.10000000E+01 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.50000000E+00 0.10000000E+01 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.10000000E+21 0.00000000E+00 0.10000000E+01 - 'XWEL ' 260 'DOUB' - 0.12960687373851D+05 0.46114621719296D-04 0.12140912863400D+06 - 0.12960687419965D+05 0.89152624445574D+05 0.00000000000000D+00 - 0.10000000000000D+04 0.35580382602438D-08 0.93674914865203D+01 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.27976615746195D+08 0.25542799381211D-01 0.11094182001000D+09 - 0.90224331800037D+08 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.46114621719296D-04 0.12140912863400D+06 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.10000000000000D+04 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.30380000000000D+08 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - -0.10000000000000D+06 0.00000000000000D+00 -0.64333700552541D+05 - 0.00000000000000D+00 0.57103809868273D+04 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.15190000000000D+09 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.64333700552541D+00 - 0.00000000000000D+00 0.00000000000000D+00 -0.10000000000000D+06 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.90140000000000D+04 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.15190000000000D+09 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 -0.64333700552541D+05 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 - 'ZWEL ' 6 'CHAR' - 'PROD ' ' ' ' ' 'INJ ' ' ' ' ' - 'ICON ' 50 'INTE' - 1 10 10 3 0 1 - 0 0 0 0 0 0 - 1 3 0 0 0 0 - 0 0 0 0 0 0 - 0 1 1 1 1 0 - 1 0 0 0 0 0 - 0 1 3 0 0 0 - 0 0 0 0 0 0 - 0 0 - 'SCON ' 80 'REAL' - 0.10610335E+02 0.84000000E+04 0.50000000E+00 0.10000000E+05 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10610335E+02 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 -0.10000000E+21 -0.10000000E+21 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.10610335E+02 0.83350000E+04 0.50000000E+00 0.10000000E+05 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10610335E+02 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 -0.10000000E+21 -0.10000000E+21 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 'XCON ' 116 'DOUB' - 0.12960688009371D+05 0.46114621628072D-04 0.12140912864453D+06 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.10000000000000D+04 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - -0.99999999058143D+05 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.57103809868273D+04 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 - 'STARTSOL' 0 'MESS' - 'PRESSURE' 300 'REAL' - 0.54558252E+04 0.53734473E+04 0.53145986E+04 0.52679185E+04 - 0.52297407E+04 0.51979243E+04 0.51715913E+04 0.51507446E+04 - 0.51368042E+04 0.51297124E+04 0.53734448E+04 0.53355913E+04 - 0.52932402E+04 0.52532002E+04 0.52175771E+04 0.51861030E+04 - 0.51591704E+04 0.51374790E+04 0.51226958E+04 0.51151333E+04 - 0.53145952E+04 0.52932378E+04 0.52622588E+04 0.52287505E+04 - 0.51953247E+04 0.51634365E+04 0.51347744E+04 0.51109243E+04 - 0.50941426E+04 0.50854824E+04 0.52679121E+04 0.52531953E+04 - 0.52287485E+04 0.51985791E+04 0.51652959E+04 0.51313223E+04 - 0.50990327E+04 0.50709839E+04 0.50504097E+04 0.50396431E+04 - 0.52297324E+04 0.52175703E+04 0.51953198E+04 0.51652935E+04 - 0.51298501E+04 0.50914497E+04 0.50527393E+04 0.50173862E+04 - 0.49900850E+04 0.49753950E+04 0.51979136E+04 0.51860942E+04 - 0.51634297E+04 0.51313174E+04 0.50914473E+04 0.50458149E+04 - 0.49970234E+04 0.49497524E+04 0.49106050E+04 0.48881860E+04 - 0.51715806E+04 0.51591606E+04 0.51347666E+04 0.50990269E+04 - 0.50527354E+04 0.49970220E+04 0.49339766E+04 0.48679985E+04 - 0.48081890E+04 0.47703594E+04 0.51507334E+04 0.51374688E+04 - 0.51109155E+04 0.50709771E+04 0.50173809E+04 0.49497490E+04 - 0.48679966E+04 0.47744136E+04 0.46782192E+04 0.46059551E+04 - 0.51367925E+04 0.51226851E+04 0.50941333E+04 0.50504019E+04 - 0.49900786E+04 0.49105996E+04 0.48081855E+04 0.46782163E+04 - 0.45197397E+04 0.43596592E+04 0.51297012E+04 0.51151230E+04 - 0.50854731E+04 0.50396353E+04 0.49753887E+04 0.48881792E+04 - 0.47703540E+04 0.46059478E+04 0.43596567E+04 0.39653870E+04 - 0.54583145E+04 0.53761851E+04 0.53173184E+04 0.52724937E+04 - 0.52358364E+04 0.52043193E+04 0.51780674E+04 0.51574438E+04 - 0.51435317E+04 0.51365181E+04 0.53761826E+04 0.53383052E+04 - 0.52967085E+04 0.52588574E+04 0.52238496E+04 0.51925483E+04 - 0.51656987E+04 0.51441792E+04 0.51294214E+04 0.51219360E+04 - 0.53173149E+04 0.52967061E+04 0.52677188E+04 0.52349131E+04 - 0.52016997E+04 0.51699253E+04 0.51413442E+04 0.51176245E+04 - 0.51008662E+04 0.50922783E+04 0.52724868E+04 0.52588525E+04 - 0.52349106E+04 0.52049204E+04 0.51717549E+04 0.51378472E+04 - 0.51056313E+04 0.50776807E+04 0.50571304E+04 0.50464268E+04 - 0.52358281E+04 0.52238423E+04 0.52016953E+04 0.51717524E+04 - 0.51363696E+04 0.50979849E+04 0.50593560E+04 0.50240747E+04 - 0.49967935E+04 0.49821514E+04 0.52043091E+04 0.51925396E+04 - 0.51699185E+04 0.51378423E+04 0.50979824E+04 0.50523550E+04 - 0.50036519E+04 0.49564131E+04 0.49172954E+04 0.48949111E+04 - 0.51780566E+04 0.51656890E+04 0.51413364E+04 0.51056255E+04 - 0.50593521E+04 0.50036499E+04 0.49406030E+04 0.48746445E+04 - 0.48148599E+04 0.47770112E+04 0.51574326E+04 0.51441689E+04 - 0.51176157E+04 0.50776738E+04 0.50240693E+04 0.49564097E+04 - 0.48746426E+04 0.47810522E+04 0.46848628E+04 0.46124385E+04 - 0.51435200E+04 0.51294106E+04 0.51008569E+04 0.50571226E+04 - 0.49967871E+04 0.49172900E+04 0.48148560E+04 0.46848604E+04 - 0.45263545E+04 0.43661724E+04 0.51365068E+04 0.51219258E+04 - 0.50922695E+04 0.50464194E+04 0.49821445E+04 0.48949043E+04 - 0.47770059E+04 0.46124316E+04 0.43661699E+04 0.39656943E+04 - 0.54624556E+04 0.53809272E+04 0.53245825E+04 0.52834531E+04 - 0.52467852E+04 0.52152642E+04 0.51890073E+04 0.51683813E+04 - 0.51544644E+04 0.51474478E+04 0.53809243E+04 0.53439658E+04 - 0.53076016E+04 0.52698076E+04 0.52347979E+04 0.52034922E+04 - 0.51766372E+04 0.51551147E+04 0.51403521E+04 0.51328633E+04 - 0.53245732E+04 0.53075991E+04 0.52786694E+04 0.52458628E+04 - 0.52126450E+04 0.51808657E+04 0.51522793E+04 0.51285557E+04 - 0.51117925E+04 0.51032007E+04 0.52834458E+04 0.52698027E+04 - 0.52458604E+04 0.52158662E+04 0.51826958E+04 0.51487827E+04 - 0.51165610E+04 0.50886060E+04 0.50680503E+04 0.50573413E+04 - 0.52467769E+04 0.52347910E+04 0.52126401E+04 0.51826934E+04 - 0.51473057E+04 0.51089141E+04 0.50702788E+04 0.50349917E+04 - 0.50077041E+04 0.49930518E+04 0.52152544E+04 0.52034834E+04 - 0.51808594E+04 0.51487783E+04 0.51089121E+04 0.50632759E+04 - 0.50145659E+04 0.49673188E+04 0.49281934E+04 0.49057969E+04 - 0.51889966E+04 0.51766274E+04 0.51522715E+04 0.51165552E+04 - 0.50702749E+04 0.50145640E+04 0.49515063E+04 0.48855371E+04 - 0.48257422E+04 0.47878735E+04 0.51683701E+04 0.51551045E+04 - 0.51285469E+04 0.50885991E+04 0.50349863E+04 0.49673154E+04 - 0.48855352E+04 0.47919302E+04 0.46957251E+04 0.46232686E+04 - 0.51544526E+04 0.51403413E+04 0.51117832E+04 0.50680425E+04 - 0.50076978E+04 0.49281885E+04 0.48257383E+04 0.46957222E+04 - 0.45371909E+04 0.43769673E+04 0.51474370E+04 0.51328530E+04 - 0.51031919E+04 0.50573335E+04 0.49930454E+04 0.49057900E+04 - 0.47878682E+04 0.46232617E+04 0.43769648E+04 0.39654597E+04 - 'RS ' 300 'REAL' - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12216158E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12231295E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12256032E+01 - 'SGAS ' 300 'REAL' - 0.50927067E+00 0.50314993E+00 0.50137353E+00 0.48630667E+00 - 0.45118517E+00 0.42619586E+00 0.39993390E+00 0.35906678E+00 - 0.31077692E+00 0.21673515E+00 0.50315458E+00 0.50180167E+00 - 0.49562949E+00 0.46923530E+00 0.44214696E+00 0.42066830E+00 - 0.39570791E+00 0.35759658E+00 0.31140783E+00 0.21904206E+00 - 0.50137860E+00 0.49563536E+00 0.47521532E+00 0.45042530E+00 - 0.43260249E+00 0.41492146E+00 0.39182851E+00 0.35726526E+00 - 0.31362703E+00 0.22385685E+00 0.48634240E+00 0.46925727E+00 - 0.45043203E+00 0.43660134E+00 0.42323178E+00 0.40948901E+00 - 0.38869956E+00 0.35824317E+00 0.31761637E+00 0.23169351E+00 - 0.45121869E+00 0.44216663E+00 0.43261462E+00 0.42323780E+00 - 0.41411039E+00 0.40399000E+00 0.38588631E+00 0.36032486E+00 - 0.32357350E+00 0.24346781E+00 0.42623010E+00 0.42069361E+00 - 0.41493985E+00 0.40950152E+00 0.40399745E+00 0.39549813E+00 - 0.38223836E+00 0.36297011E+00 0.33151150E+00 0.25947207E+00 - 0.39998722E+00 0.39575163E+00 0.39186400E+00 0.38872749E+00 - 0.38590670E+00 0.38224909E+00 0.37622753E+00 0.36456060E+00 - 0.34058058E+00 0.27975091E+00 0.35911795E+00 0.35764104E+00 - 0.35730392E+00 0.35827628E+00 0.36035216E+00 0.36299008E+00 - 0.36457142E+00 0.36195108E+00 0.34846243E+00 0.30386189E+00 - 0.31082311E+00 0.31145048E+00 0.31366646E+00 0.31765246E+00 - 0.32360595E+00 0.33153930E+00 0.34060198E+00 0.34847459E+00 - 0.34900340E+00 0.32688534E+00 0.21679071E+00 0.21909733E+00 - 0.22391154E+00 0.23174703E+00 0.24351968E+00 0.25951612E+00 - 0.27979118E+00 0.30388668E+00 0.32690161E+00 0.38774398E+00 - 0.49490809E+00 0.48588747E+00 0.38907826E+00 0.43135568E-01 - 0.12355922E-02 0.34650225E-16 0.63317189E-17 0.00000000E+00 - -0.30015718E-16 0.00000000E+00 0.48590294E+00 0.43428114E+00 - 0.87873422E-01 0.48422157E-02 0.37458454E-16 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.43287487E-09 - 0.38920701E+00 0.87905832E-01 0.67225490E-02 0.00000000E+00 - 0.16186464E-05 0.00000000E+00 -0.12461268E-16 -0.42546922E-16 - 0.73096182E-08 0.74289918E-16 0.43163672E-01 0.48461687E-02 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.31716991E-08 - 0.00000000E+00 0.00000000E+00 0.82902270E-11 0.34876413E-06 - 0.12284769E-02 0.71463817E-08 -0.80815504E-17 0.00000000E+00 - 0.24587599E-08 0.42315718E-16 0.00000000E+00 0.15856034E-10 - 0.10185440E-05 0.55759808E-16 0.81838123E-17 0.13191686E-10 - 0.21470225E-05 0.62999286E-16 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.83624219E-11 0.00000000E+00 -0.67624205E-16 - 0.26643994E-10 0.00000000E+00 0.70466233E-11 0.47493376E-09 - 0.13819917E-16 0.13185703E-08 0.20527759E-09 0.00000000E+00 - 0.53263529E-16 0.82753110E-06 0.00000000E+00 0.26952413E-09 - 0.36684826E-12 0.20405173E-11 0.62209455E-16 0.00000000E+00 - -0.68758667E-16 0.00000000E+00 0.15174306E-05 0.35795844E-17 - 0.34521559E-16 0.42268732E-11 0.17053540E-11 0.00000000E+00 - 0.10159554E-05 0.00000000E+00 0.41680885E-08 0.28507807E-09 - 0.32763016E-16 0.11223733E-08 0.44419162E-16 0.50101959E-16 - 0.36412103E-16 0.14427733E-17 0.00000000E+00 0.39375137E-16 - 0.18577395E-10 0.75012252E-16 0.53153285E-05 0.32779634E+00 - 0.32148984E+00 0.22371413E+00 0.55454936E-01 0.14381668E-01 - 0.76770854E-10 0.27635135E-16 0.00000000E+00 -0.58471081E-16 - 0.00000000E+00 -0.62945334E-16 0.22374542E+00 0.88695683E-01 - 0.22470305E-01 0.20174494E-03 0.27242171E-12 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.45590034E-15 - 0.55500492E-01 0.22471178E-01 0.30884935E-03 0.50651443E-12 - 0.00000000E+00 -0.81066559E-16 0.00000000E+00 0.00000000E+00 - 0.19773189E-12 0.23858662E-16 0.14374508E-01 0.20202353E-03 - 0.14813209E-12 0.54715417E-16 0.00000000E+00 0.19269329E-12 - 0.28867730E-16 0.25872433E-12 0.17749774E-16 0.69603576E-17 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.27058745E-13 - 0.17526119E-12 -0.80768810E-17 -0.13288268E-16 0.49204432E-16 - 0.11613890E-16 0.00000000E+00 0.21906619E-08 0.59947507E-11 - 0.31775940E-13 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.85326623E-13 0.13936959E-16 0.00000000E+00 0.62711610E-17 - 0.00000000E+00 0.00000000E+00 0.19340071E-10 0.00000000E+00 - 0.00000000E+00 -0.20215108E-16 0.00000000E+00 0.00000000E+00 - 0.31837054E-16 0.00000000E+00 0.31031652E-17 0.29067138E-13 - 0.50440839E-13 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 -0.13365825E-16 0.00000000E+00 - 0.26158753E-16 0.21113363E-16 0.26355220E-16 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.17471171E-12 0.00000000E+00 - 0.00000000E+00 0.52949935E-12 0.29721635E-16 0.00000000E+00 - -0.23648123E-16 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.90782462E-18 0.00000000E+00 0.19383965E-15 0.19730704E+00 - 'SWAT ' 300 'REAL' - 0.11949835E+00 0.11955960E+00 0.11960337E+00 0.11963810E+00 - 0.11966651E+00 0.11969019E+00 0.11970980E+00 0.11972532E+00 - 0.11973570E+00 0.11974099E+00 0.11955960E+00 0.11958776E+00 - 0.11961926E+00 0.11964905E+00 0.11967557E+00 0.11969899E+00 - 0.11971905E+00 0.11973520E+00 0.11974621E+00 0.11975184E+00 - 0.11960337E+00 0.11961927E+00 0.11964231E+00 0.11966725E+00 - 0.11969213E+00 0.11971587E+00 0.11973722E+00 0.11975498E+00 - 0.11976748E+00 0.11977393E+00 0.11963811E+00 0.11964906E+00 - 0.11966725E+00 0.11968971E+00 0.11971449E+00 0.11973979E+00 - 0.11976384E+00 0.11978473E+00 0.11980006E+00 0.11980809E+00 - 0.11966652E+00 0.11967557E+00 0.11969213E+00 0.11971449E+00 - 0.11974088E+00 0.11976948E+00 0.11979833E+00 0.11982467E+00 - 0.11984502E+00 0.11985597E+00 0.11969020E+00 0.11969900E+00 - 0.11971588E+00 0.11973979E+00 0.11976948E+00 0.11980348E+00 - 0.11983985E+00 0.11987508E+00 0.11990427E+00 0.11992100E+00 - 0.11970980E+00 0.11971906E+00 0.11973722E+00 0.11976384E+00 - 0.11979833E+00 0.11983985E+00 0.11988685E+00 0.11993606E+00 - 0.11998068E+00 0.12000891E+00 0.11972533E+00 0.11973521E+00 - 0.11975498E+00 0.11978474E+00 0.11982467E+00 0.11987509E+00 - 0.11993606E+00 0.12000588E+00 0.12007771E+00 0.12013169E+00 - 0.11973571E+00 0.11974622E+00 0.11976749E+00 0.11980007E+00 - 0.11984503E+00 0.11990428E+00 0.11998068E+00 0.12007771E+00 - 0.12019612E+00 0.12031585E+00 0.11974099E+00 0.11975185E+00 - 0.11977394E+00 0.11980809E+00 0.11985597E+00 0.11992100E+00 - 0.12000892E+00 0.12013169E+00 0.12031585E+00 0.12061124E+00 - 0.11950156E+00 0.11956263E+00 0.11960641E+00 0.11963976E+00 - 0.11966705E+00 0.11969050E+00 0.11971004E+00 0.11972541E+00 - 0.11973576E+00 0.11974099E+00 0.11956263E+00 0.11959080E+00 - 0.11962175E+00 0.11964991E+00 0.11967596E+00 0.11969926E+00 - 0.11971926E+00 0.11973528E+00 0.11974627E+00 0.11975185E+00 - 0.11960641E+00 0.11962175E+00 0.11964332E+00 0.11966773E+00 - 0.11969245E+00 0.11971611E+00 0.11973739E+00 0.11975506E+00 - 0.11976754E+00 0.11977394E+00 0.11963977E+00 0.11964991E+00 - 0.11966773E+00 0.11969005E+00 0.11971474E+00 0.11973999E+00 - 0.11976399E+00 0.11978481E+00 0.11980013E+00 0.11980810E+00 - 0.11966705E+00 0.11967597E+00 0.11969245E+00 0.11971475E+00 - 0.11974110E+00 0.11976968E+00 0.11979847E+00 0.11982476E+00 - 0.11984509E+00 0.11985601E+00 0.11969051E+00 0.11969927E+00 - 0.11971612E+00 0.11974000E+00 0.11976969E+00 0.11980368E+00 - 0.11983998E+00 0.11987519E+00 0.11990436E+00 0.11992106E+00 - 0.11971006E+00 0.11971927E+00 0.11973739E+00 0.11976399E+00 - 0.11979847E+00 0.11983998E+00 0.11988698E+00 0.11993618E+00 - 0.11998078E+00 0.12000903E+00 0.11972541E+00 0.11973529E+00 - 0.11975507E+00 0.11978482E+00 0.11982476E+00 0.11987519E+00 - 0.11993618E+00 0.12000601E+00 0.12007783E+00 0.12013193E+00 - 0.11973577E+00 0.11974628E+00 0.11976755E+00 0.11980013E+00 - 0.11984509E+00 0.11990437E+00 0.11998078E+00 0.12007783E+00 - 0.12019627E+00 0.12031607E+00 0.11974099E+00 0.11975186E+00 - 0.11977395E+00 0.11980811E+00 0.11985601E+00 0.11992107E+00 - 0.12000903E+00 0.12013193E+00 0.12031608E+00 0.12061614E+00 - 0.11950658E+00 0.11956720E+00 0.11960911E+00 0.11963971E+00 - 0.11966700E+00 0.11969046E+00 0.11971001E+00 0.11972537E+00 - 0.11973573E+00 0.11974096E+00 0.11956720E+00 0.11959469E+00 - 0.11962175E+00 0.11964986E+00 0.11967593E+00 0.11969922E+00 - 0.11971922E+00 0.11973525E+00 0.11974625E+00 0.11975182E+00 - 0.11960912E+00 0.11962175E+00 0.11964327E+00 0.11966769E+00 - 0.11969241E+00 0.11971607E+00 0.11973736E+00 0.11975503E+00 - 0.11976752E+00 0.11977392E+00 0.11963972E+00 0.11964987E+00 - 0.11966769E+00 0.11969002E+00 0.11971471E+00 0.11973996E+00 - 0.11976396E+00 0.11978479E+00 0.11980011E+00 0.11980809E+00 - 0.11966701E+00 0.11967593E+00 0.11969241E+00 0.11971471E+00 - 0.11974107E+00 0.11976966E+00 0.11979844E+00 0.11982474E+00 - 0.11984508E+00 0.11985600E+00 0.11969047E+00 0.11969923E+00 - 0.11971608E+00 0.11973996E+00 0.11976966E+00 0.11980366E+00 - 0.11983997E+00 0.11987519E+00 0.11990436E+00 0.11992107E+00 - 0.11971002E+00 0.11971923E+00 0.11973736E+00 0.11976397E+00 - 0.11979844E+00 0.11983997E+00 0.11988697E+00 0.11993618E+00 - 0.11998079E+00 0.12000905E+00 0.11972538E+00 0.11973526E+00 - 0.11975504E+00 0.11978479E+00 0.11982474E+00 0.11987519E+00 - 0.11993618E+00 0.12000602E+00 0.12007785E+00 0.12013198E+00 - 0.11973574E+00 0.11974625E+00 0.11976752E+00 0.11980011E+00 - 0.11984508E+00 0.11990436E+00 0.11998079E+00 0.12007786E+00 - 0.12019631E+00 0.12031615E+00 0.11974097E+00 0.11975183E+00 - 0.11977392E+00 0.11980809E+00 0.11985601E+00 0.11992107E+00 - 0.12000906E+00 0.12013198E+00 0.12031616E+00 0.12062450E+00 - 'ENDSOL ' 0 'MESS' - 'SEQNUM ' 1 'INTE' - 100 - 'INTEHEAD' 411 'INTE' - 0 201702 2 0 0 0 - 0 0 10 10 3 300 - 0 0 7 0 2 1 - 1 2 2 0 0 0 - 155 122 130 3 0 0 - 0 0 25 40 58 0 - 99 112 180 5 0 1 - 18 24 10 7 2 4 - 0 1 1 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 29 4 - 2023 99 100 0 0 0 - 0 0 0 0 5 0 - 0 0 12 1 25 1 - 0 0 8 8 0 1 - 0 0 0 0 100 0 - 0 0 0 1 0 1 - 0 1 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 1 1 22 146 - 10 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 1 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 - 'LOGIHEAD' 121 'LOGI' - T T F F F F F F F F F F F F F F F F F F F F F F F - F F F F F F F F F F F F F F F F F F F F F F F F F - F F F F F F F F F F F F F F F F F F F F F F F F F - F F F F F F F F F F F F F F F F F F F F F F F F F - F F F F F F F F F F F F F F F F F F F F F - 'DOUBHEAD' 229 'DOUB' - 0.30400000000000D+04 0.90000000000000D+02 0.36500000000000D+03 - 0.10000000000000D+00 0.15000000000000D+00 0.30000000000000D+01 - 0.30000000000000D+00 0.10000000000000D+00 0.10000000000000D+00 - 0.10000000000000D-02 0.10000000000000D-06 0.10000000000000D-03 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.10000000000000D+02 0.10000000000000D-01 - 0.10000000000000D-05 0.10000000000000D-02 0.10000000000000D-02 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+21 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.10000000000000D-01 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+21 0.10000000000000D+21 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+21 0.10000000000000D+21 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - -0.10000000000000D+01 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.10000000000000D+21 - 0.10000000000000D+21 0.10000000000000D+12 0.12500000000000D+01 - 0.10000000000000D+12 0.10000000000000D+07 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+21 0.00000000000000D+00 0.25000000000000D-01 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+01 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.36500000000000D+03 0.10000000000000D+00 0.15000000000000D+00 - 0.30000000000000D+01 0.30000000000000D+00 0.10000000000000D+00 - 0.10000000000000D+00 0.10000000000000D-02 0.10000000000000D-06 - 0.10000000000000D-03 0.10000000000000D+02 0.10000000000000D-01 - 0.10000000000000D-05 0.10000000000000D-02 0.10000000000000D-02 - 0.00000000000000D+00 0.00000000000000D+00 0.10000000000000D-19 - 0.10130000000000D+01 0.00000000000000D+00 0.10000000000000D+01 - 0.00000000000000D+00 0.30000000000000D+00 0.20000000000000D+01 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.73597900000000D+06 0.73901900000000D+06 - 0.10000000000000D+01 0.20000000000000D+00 0.40000000000000D+00 - 0.12000000000000D+01 0.30000000000000D+00 0.10000000000000D+01 - 0.00000000000000D+00 0.00000000000000D+00 0.40000000000000D+00 - 0.70000000000000D+00 0.20000000000000D+01 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.10000000000000D+01 0.10000000000000D+01 - 0.10000000000000D+01 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+01 0.10000000000000D-03 0.00000000000000D+00 - 0.00000000000000D+00 0.10000000000000D+21 0.10000000000000D+21 - 0.10000000000000D+21 0.10000000000000D+21 0.10000000000000D+21 - 0.10000000000000D+21 0.10000000000000D+21 0.10000000000000D+21 - 0.10000000000000D+21 0.10000000000000D+21 0.10000000000000D+21 - 0.10000000000000D+21 0.10000000000000D+01 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.10000000000000D-03 -0.20000000000000D+21 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.10000000000000D-01 0.10000000000000D+01 - 0.00000000000000D+00 0.10000000000000D+21 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 - 'IGRP ' 198 'INTE' - 2 1 2 0 0 0 - 0 -1 0 0 0 0 - 0 0 -1 0 0 0 - 0 -1 0 0 0 0 - -1 0 0 0 0 1 - 2 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 1 1 0 0 0 0 - 0 1 1 1 0 1 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 1 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 2 2 0 - 0 0 0 0 2 2 - 'SGRP ' 224 'REAL' - 0.10000000E+21 0.10000000E+21 -0.10000000E+21 0.10000000E+21 - 0.00000000E+00 0.00000000E+00 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 -0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 -0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - -0.10000000E+21 0.00000000E+00 0.00000000E+00 0.00000000E+00 - -0.20000000E+21 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.10000000E+21 0.00000000E+00 0.10000000E+21 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.10000000E+01 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.10000000E+21 0.10000000E+21 -0.10000000E+21 0.10000000E+21 - 0.00000000E+00 0.00000000E+00 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 -0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 -0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - -0.10000000E+21 0.00000000E+00 0.00000000E+00 0.00000000E+00 - -0.20000000E+21 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.10000000E+21 0.00000000E+00 0.10000000E+21 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.10000000E+01 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 'XGRP ' 360 'DOUB' - 0.68065663886861D+04 0.64637756835876D-04 0.11410897197918D+06 - 0.99035018322485D+05 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+06 0.00000000000000D+00 0.94963822478090D-08 - 0.16764542570077D+02 0.42172472619918D+08 0.11537427090701D+00 - 0.28348329371314D+09 0.23014849704523D+09 0.00000000000000D+00 - 0.00000000000000D+00 0.30400000000000D+09 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.60800000000000D+08 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.30400000000000D+09 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.68065663886861D+04 0.64637756835876D-04 0.11410897197918D+06 - 0.99035018322485D+05 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+06 0.00000000000000D+00 0.94963822478090D-08 - 0.16764542570077D+02 0.42172472619918D+08 0.11537427090701D+00 - 0.28348329371314D+09 0.23014849704523D+09 0.00000000000000D+00 - 0.00000000000000D+00 0.30400000000000D+09 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.60800000000000D+08 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.30400000000000D+09 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 'ZGRP ' 10 'CHAR' - 'G1 ' ' ' ' ' ' ' ' ' 'FIELD ' ' ' - ' ' ' ' ' ' - 'IWEL ' 310 'INTE' - 10 10 3 3 1 1 - 1 1 1 0 1 0 - 0 0 0 1 0 -100 - 0 0 0 0 0 0 - -1 0 0 0 0 0 - 0 7 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 -1 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 1 - 1 1 1 1 1 4 - 3 3 0 1 0 0 - 0 0 3 0 -100 0 - 0 0 0 0 0 -1 - 0 0 0 0 0 0 - 7 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 -1 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 - 'SWEL ' 244 'REAL' - 0.20000000E+05 0.10000000E+21 0.10000000E+21 0.20000000E+05 - 0.10000000E+21 0.00000000E+00 0.10000000E+04 0.00000000E+00 - 0.00000000E+00 0.84000000E+04 0.00000000E+00 0.99999997E-05 - 0.00000000E+00 0.00000000E+00 0.10000000E+21 0.10000000E+21 - 0.00000000E+00 -0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.00000000E+00 - 0.10000000E+01 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+01 - 0.00000000E+00 0.10000000E+21 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.10000000E+21 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.10000000E+21 0.00000000E+00 0.00000000E+00 0.10000000E+01 - 0.10000000E+01 0.10000000E+01 0.00000000E+00 0.10000000E+21 - 0.00000000E+00 0.10000000E+21 0.10000000E+01 -0.10000000E+21 - 0.10000000E+01 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.50000000E+00 0.10000000E+01 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.00000000E+00 0.10000000E+01 0.10000000E+21 0.10000000E+21 - 0.10000000E+06 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.90140000E+04 0.00000000E+00 0.00000000E+00 0.83350000E+04 - 0.00000000E+00 0.99999997E-05 0.00000000E+00 0.00000000E+00 - 0.10000000E+21 0.10000000E+21 0.00000000E+00 -0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.00000000E+00 0.10000000E+01 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.10000000E+01 0.00000000E+00 0.10000000E+21 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.10000000E+21 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.10000000E+21 0.10000000E+21 0.00000000E+00 - 0.00000000E+00 0.10000000E+01 0.10000000E+01 0.10000000E+01 - 0.00000000E+00 0.10000000E+21 0.00000000E+00 0.10000000E+21 - 0.10000000E+01 -0.10000000E+21 0.10000000E+01 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.50000000E+00 0.10000000E+01 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.10000000E+21 0.00000000E+00 0.10000000E+01 - 'XWEL ' 260 'DOUB' - 0.68065663886861D+04 0.64637756835876D-04 0.11410897197918D+06 - 0.68065664533238D+04 0.99035018322485D+05 0.00000000000000D+00 - 0.10000000000000D+04 0.94963822478090D-08 0.16764542570077D+02 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.42172472619918D+08 0.11537427090701D+00 0.28348329371314D+09 - 0.23014849704523D+09 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.64637756835876D-04 0.11410897197918D+06 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.10000000000000D+04 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.60800000000000D+08 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - -0.10000000000000D+06 0.00000000000000D+00 -0.82874622133671D+05 - 0.00000000000000D+00 0.45041205394407D+04 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.30400000000000D+09 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.82874622133671D+00 - 0.00000000000000D+00 0.00000000000000D+00 -0.10000000000000D+06 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.90140000000000D+04 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.30400000000000D+09 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 -0.82874622133671D+05 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 - 'ZWEL ' 6 'CHAR' - 'PROD ' ' ' ' ' 'INJ ' ' ' ' ' - 'ICON ' 50 'INTE' - 1 10 10 3 0 1 - 0 0 0 0 0 0 - 1 3 0 0 0 0 - 0 0 0 0 0 0 - 0 1 1 1 1 0 - 1 0 0 0 0 0 - 0 1 3 0 0 0 - 0 0 0 0 0 0 - 0 0 - 'SCON ' 80 'REAL' - 0.10610335E+02 0.84000000E+04 0.50000000E+00 0.10000000E+05 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10610335E+02 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 -0.10000000E+21 -0.10000000E+21 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.10610335E+02 0.83350000E+04 0.50000000E+00 0.10000000E+05 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10610335E+02 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 -0.10000000E+21 -0.10000000E+21 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 'XCON ' 116 'DOUB' - 0.68065670274068D+04 0.64637756559871D-04 0.11410897159736D+06 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.10000000000000D+04 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - -0.99999999428912D+05 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.45041205394407D+04 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 - 'STARTSOL' 0 'MESS' - 'PRESSURE' 300 'REAL' - 0.42457402E+04 0.41699185E+04 0.41155796E+04 0.40739326E+04 - 0.40392610E+04 0.40104182E+04 0.39884871E+04 0.39723511E+04 - 0.39616873E+04 0.39561062E+04 0.41699180E+04 0.41348105E+04 - 0.40970034E+04 0.40615120E+04 0.40289180E+04 0.40018528E+04 - 0.39801963E+04 0.39637500E+04 0.39526072E+04 0.39467415E+04 - 0.41155786E+04 0.40970029E+04 0.40701592E+04 0.40400366E+04 - 0.40113298E+04 0.39858735E+04 0.39639973E+04 0.39465122E+04 - 0.39341921E+04 0.39276147E+04 0.40739319E+04 0.40615115E+04 - 0.40400366E+04 0.40148418E+04 0.39889636E+04 0.39637432E+04 - 0.39403733E+04 0.39204448E+04 0.39057625E+04 0.38977446E+04 - 0.40392610E+04 0.40289180E+04 0.40113306E+04 0.39889651E+04 - 0.39635579E+04 0.39365103E+04 0.39095898E+04 0.38850647E+04 - 0.38660486E+04 0.38553398E+04 0.40104180E+04 0.40018533E+04 - 0.39858755E+04 0.39637478E+04 0.39365198E+04 0.39054429E+04 - 0.38722051E+04 0.38398801E+04 0.38135195E+04 0.37982942E+04 - 0.39884868E+04 0.39801968E+04 0.39639995E+04 0.39403767E+04 - 0.39095918E+04 0.38722017E+04 0.38299009E+04 0.37870125E+04 - 0.37496216E+04 0.37262451E+04 0.39723511E+04 0.39637512E+04 - 0.39465171E+04 0.39204539E+04 0.38850715E+04 0.38398694E+04 - 0.37870000E+04 0.37295579E+04 0.36726660E+04 0.36304480E+04 - 0.39616873E+04 0.39526106E+04 0.39342029E+04 0.39057874E+04 - 0.38660811E+04 0.38134910E+04 0.37495825E+04 0.36726423E+04 - 0.35819695E+04 0.34914541E+04 0.39561069E+04 0.39467461E+04 - 0.39276296E+04 0.38977981E+04 0.38554358E+04 0.37982095E+04 - 0.37261560E+04 0.36303916E+04 0.34914360E+04 0.32747668E+04 - 0.42475967E+04 0.41720698E+04 0.41176821E+04 0.40760166E+04 - 0.40420891E+04 0.40157871E+04 0.39952417E+04 0.39790962E+04 - 0.39684316E+04 0.39628530E+04 0.41720693E+04 0.41369214E+04 - 0.40990962E+04 0.40637346E+04 0.40327329E+04 0.40077151E+04 - 0.39869380E+04 0.39704963E+04 0.39593540E+04 0.39534902E+04 - 0.41176812E+04 0.40990957E+04 0.40723127E+04 0.40430112E+04 - 0.40163943E+04 0.39924719E+04 0.39707446E+04 0.39532625E+04 - 0.39409431E+04 0.39343677E+04 0.40760156E+04 0.40637341E+04 - 0.40430110E+04 0.40196631E+04 0.39953176E+04 0.39704890E+04 - 0.39471250E+04 0.39272004E+04 0.39125198E+04 0.39045037E+04 - 0.40420884E+04 0.40327312E+04 0.40163945E+04 0.39953188E+04 - 0.39703027E+04 0.39432634E+04 0.39163481E+04 0.38918269E+04 - 0.38728083E+04 0.38619524E+04 0.40157864E+04 0.40077146E+04 - 0.39924734E+04 0.39704934E+04 0.39432729E+04 0.39122021E+04 - 0.38789685E+04 0.38459851E+04 0.38196626E+04 0.38047627E+04 - 0.39952415E+04 0.39869382E+04 0.39707468E+04 0.39471284E+04 - 0.39163501E+04 0.38789651E+04 0.38360081E+04 0.37930586E+04 - 0.37557712E+04 0.37325718E+04 0.39790962E+04 0.39704978E+04 - 0.39532671E+04 0.39272095E+04 0.38918337E+04 0.38459753E+04 - 0.37930461E+04 0.37356335E+04 0.36788225E+04 0.36365674E+04 - 0.39684319E+04 0.39593572E+04 0.39409539E+04 0.39125447E+04 - 0.38728411E+04 0.38196379E+04 0.37557334E+04 0.36787991E+04 - 0.35881440E+04 0.34975239E+04 0.39628535E+04 0.39534946E+04 - 0.39343826E+04 0.39045576E+04 0.38621938E+04 0.38047017E+04 - 0.37324907E+04 0.36365151E+04 0.34975056E+04 0.32753589E+04 - 0.42507163E+04 0.41756768E+04 0.41212153E+04 0.40820898E+04 - 0.40528479E+04 0.40265505E+04 0.40060115E+04 0.39898772E+04 - 0.39792131E+04 0.39736375E+04 0.41756763E+04 0.41404170E+04 - 0.41031392E+04 0.40742654E+04 0.40435042E+04 0.40184761E+04 - 0.39977141E+04 0.39812800E+04 0.39701389E+04 0.39642778E+04 - 0.41212144E+04 0.41031387E+04 0.40824509E+04 0.40537864E+04 - 0.40271592E+04 0.40032417E+04 0.39815293E+04 0.39640515E+04 - 0.39517344E+04 0.39451619E+04 0.40820869E+04 0.40742646E+04 - 0.40537861E+04 0.40304285E+04 0.40060852E+04 0.39812715E+04 - 0.39579170E+04 0.39379985E+04 0.39233213E+04 0.39153079E+04 - 0.40528472E+04 0.40435022E+04 0.40271594E+04 0.40060864E+04 - 0.39810847E+04 0.39540571E+04 0.39271506E+04 0.39026357E+04 - 0.38836230E+04 0.38727637E+04 0.40265498E+04 0.40184758E+04 - 0.40032432E+04 0.39812761E+04 0.39540667E+04 0.39230059E+04 - 0.38897812E+04 0.38568027E+04 0.38304910E+04 0.38155928E+04 - 0.40060110E+04 0.39977146E+04 0.39815315E+04 0.39579204E+04 - 0.39271526E+04 0.38897778E+04 0.38468311E+04 0.38038984E+04 - 0.37666240E+04 0.37434258E+04 0.39898772E+04 0.39812815E+04 - 0.39640564E+04 0.39380078E+04 0.39026426E+04 0.38567930E+04 - 0.38038860E+04 0.37464946E+04 0.36897026E+04 0.36474561E+04 - 0.39792134E+04 0.39701421E+04 0.39517454E+04 0.39233459E+04 - 0.38836562E+04 0.38304663E+04 0.37665862E+04 0.36896792E+04 - 0.35990544E+04 0.35084536E+04 0.39736379E+04 0.39642825E+04 - 0.39451768E+04 0.39153623E+04 0.38729985E+04 0.38155332E+04 - 0.37433452E+04 0.36474038E+04 0.35084353E+04 0.32754937E+04 - 'RS ' 300 'REAL' - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12685442E+01 0.12610875E+01 0.12556014E+01 - 0.12519757E+01 0.12500781E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12656319E+01 - 0.12582687E+01 0.12526770E+01 0.12488885E+01 0.12468941E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12688541E+01 0.12601991E+01 0.12527610E+01 0.12468162E+01 - 0.12426273E+01 0.12403910E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12612497E+01 0.12526747E+01 - 0.12447289E+01 0.12379532E+01 0.12329613E+01 0.12302351E+01 - 0.12700000E+01 0.12700000E+01 0.12688544E+01 0.12612501E+01 - 0.12526116E+01 0.12434155E+01 0.12342626E+01 0.12259240E+01 - 0.12194586E+01 0.12158176E+01 0.12685441E+01 0.12656320E+01 - 0.12601997E+01 0.12526762E+01 0.12434187E+01 0.12328526E+01 - 0.12215518E+01 0.12105613E+01 0.12015986E+01 0.11964220E+01 - 0.12610875E+01 0.12582690E+01 0.12527618E+01 0.12447301E+01 - 0.12342632E+01 0.12215506E+01 0.12071683E+01 0.11925863E+01 - 0.11798733E+01 0.11719254E+01 0.12556014E+01 0.12526774E+01 - 0.12468178E+01 0.12379563E+01 0.12259264E+01 0.12105576E+01 - 0.11925820E+01 0.11730517E+01 0.11537085E+01 0.11393543E+01 - 0.12519757E+01 0.12488896E+01 0.12426310E+01 0.12329696E+01 - 0.12194695E+01 0.12015889E+01 0.11798601E+01 0.11537004E+01 - 0.11228716E+01 0.10920963E+01 0.12500783E+01 0.12468957E+01 - 0.12403960E+01 0.12302533E+01 0.12158501E+01 0.11963933E+01 - 0.11718950E+01 0.11393352E+01 0.10920902E+01 0.10184227E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12633842E+01 0.12578946E+01 - 0.12542688E+01 0.12523720E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12676251E+01 - 0.12605609E+01 0.12549708E+01 0.12511823E+01 0.12491887E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12624425E+01 0.12550552E+01 0.12491112E+01 - 0.12449226E+01 0.12426870E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12634100E+01 0.12549683E+01 - 0.12470245E+01 0.12402501E+01 0.12352588E+01 0.12325332E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12634103E+01 - 0.12549050E+01 0.12457116E+01 0.12365605E+01 0.12282231E+01 - 0.12217568E+01 0.12180659E+01 0.12700000E+01 0.12676250E+01 - 0.12624429E+01 0.12549698E+01 0.12457148E+01 0.12351507E+01 - 0.12238512E+01 0.12126369E+01 0.12036873E+01 0.11986213E+01 - 0.12633841E+01 0.12605610E+01 0.12550559E+01 0.12470257E+01 - 0.12365611E+01 0.12238501E+01 0.12092447E+01 0.11946419E+01 - 0.11819643E+01 0.11740764E+01 0.12578946E+01 0.12549713E+01 - 0.12491128E+01 0.12402532E+01 0.12282255E+01 0.12126336E+01 - 0.11946377E+01 0.11751174E+01 0.11558017E+01 0.11414349E+01 - 0.12542689E+01 0.12511835E+01 0.12449263E+01 0.12352672E+01 - 0.12217680E+01 0.12036788E+01 0.11819514E+01 0.11557937E+01 - 0.11249710E+01 0.10941601E+01 0.12523723E+01 0.12491902E+01 - 0.12426920E+01 0.12325516E+01 0.12181479E+01 0.11986005E+01 - 0.11740489E+01 0.11414171E+01 0.10941539E+01 0.10186241E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12670459E+01 0.12615602E+01 - 0.12579345E+01 0.12560387E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12699986E+01 - 0.12642248E+01 0.12586372E+01 0.12548492E+01 0.12528565E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12661042E+01 0.12587219E+01 0.12527795E+01 - 0.12485917E+01 0.12463571E+01 0.12700000E+01 0.12700000E+01 - 0.12700000E+01 0.12700000E+01 0.12670710E+01 0.12586343E+01 - 0.12506938E+01 0.12439215E+01 0.12389312E+01 0.12362067E+01 - 0.12700000E+01 0.12700000E+01 0.12700000E+01 0.12670714E+01 - 0.12585708E+01 0.12493814E+01 0.12402332E+01 0.12318981E+01 - 0.12254338E+01 0.12217417E+01 0.12700000E+01 0.12700000E+01 - 0.12661047E+01 0.12586359E+01 0.12493846E+01 0.12388240E+01 - 0.12275276E+01 0.12163149E+01 0.12073689E+01 0.12023035E+01 - 0.12670457E+01 0.12642250E+01 0.12587227E+01 0.12506950E+01 - 0.12402339E+01 0.12275265E+01 0.12129246E+01 0.11983275E+01 - 0.11856542E+01 0.11777668E+01 0.12615602E+01 0.12586377E+01 - 0.12527812E+01 0.12439246E+01 0.12319005E+01 0.12163116E+01 - 0.11983232E+01 0.11788101E+01 0.11595008E+01 0.11451371E+01 - 0.12579346E+01 0.12548503E+01 0.12485954E+01 0.12389396E+01 - 0.12254452E+01 0.12073605E+01 0.11856413E+01 0.11594929E+01 - 0.11286805E+01 0.10978762E+01 0.12560389E+01 0.12528580E+01 - 0.12463621E+01 0.12362251E+01 0.12218215E+01 0.12022833E+01 - 0.11777394E+01 0.11451193E+01 0.10978700E+01 0.10186698E+01 - 'SGAS ' 300 'REAL' - 0.53847426E+00 0.53006995E+00 0.52897286E+00 0.52189362E+00 - 0.50574714E+00 0.48863244E+00 0.46203578E+00 0.43383947E+00 - 0.39674646E+00 0.32971531E+00 0.53007317E+00 0.52917188E+00 - 0.52543712E+00 0.51413167E+00 0.49918693E+00 0.48231652E+00 - 0.45671061E+00 0.43112752E+00 0.39547595E+00 0.32971102E+00 - 0.52897644E+00 0.52543932E+00 0.51646835E+00 0.50378639E+00 - 0.49270141E+00 0.47365025E+00 0.44972911E+00 0.42794964E+00 - 0.39425573E+00 0.33006296E+00 0.52190095E+00 0.51413566E+00 - 0.50378799E+00 0.49550939E+00 0.48205030E+00 0.46255434E+00 - 0.44343346E+00 0.42446235E+00 0.39355606E+00 0.33143294E+00 - 0.50575268E+00 0.49919152E+00 0.49270481E+00 0.48204964E+00 - 0.46716520E+00 0.45024827E+00 0.43743211E+00 0.42174518E+00 - 0.39583585E+00 0.33773977E+00 0.48863968E+00 0.48232451E+00 - 0.47365254E+00 0.46253857E+00 0.45008746E+00 0.44114405E+00 - 0.43247837E+00 0.42550915E+00 0.40896910E+00 0.35846725E+00 - 0.46204528E+00 0.45672321E+00 0.44973555E+00 0.44344395E+00 - 0.43741572E+00 0.43248054E+00 0.43278280E+00 0.43250248E+00 - 0.42117989E+00 0.38048244E+00 0.43384448E+00 0.43113890E+00 - 0.42796877E+00 0.42447954E+00 0.42175686E+00 0.42552698E+00 - 0.43251407E+00 0.43621948E+00 0.43082917E+00 0.40288931E+00 - 0.39677006E+00 0.39550114E+00 0.39428279E+00 0.39358434E+00 - 0.39579293E+00 0.40897718E+00 0.42119703E+00 0.43084183E+00 - 0.43353757E+00 0.42495114E+00 0.32974133E+00 0.32974309E+00 - 0.33018321E+00 0.33146390E+00 0.33667734E+00 0.35822159E+00 - 0.38051867E+00 0.40295303E+00 0.42499578E+00 0.48140034E+00 - 0.50374615E+00 0.50162780E+00 0.49998614E+00 0.43130833E+00 - 0.65648235E-01 0.29208756E-02 0.28020653E-02 0.51414222E-02 - 0.66906172E-02 0.75033698E-02 0.50162864E+00 0.50072384E+00 - 0.48768365E+00 0.19313382E+00 0.22474887E-01 0.10240531E-02 - 0.40071853E-02 0.63984273E-02 0.80231968E-02 0.88809682E-02 - 0.49998787E+00 0.48768994E+00 0.26038328E+00 0.32865509E-01 - 0.36266790E-03 0.32084675E-02 0.63760253E-02 0.89393128E-02 - 0.10752338E-01 0.11720533E-01 0.43136325E+00 0.19319727E+00 - 0.32869682E-01 0.60974929E-03 0.27980749E-02 0.64245304E-02 - 0.98596010E-02 0.12832486E-01 0.15025406E-01 0.16225122E-01 - 0.65681912E-01 0.22481689E-01 0.36081576E-03 0.27979140E-02 - 0.64563854E-02 0.10463289E-01 0.14499467E-01 0.18219471E-01 - 0.20385832E-01 0.21149971E-01 0.29267718E-02 0.10242352E-02 - 0.32110256E-02 0.64238533E-02 0.10461831E-01 0.14053902E-01 - 0.20081725E-01 0.22262856E-01 0.22649463E-01 0.22479456E-01 - 0.28021291E-02 0.40071439E-02 0.63757109E-02 0.98701036E-02 - 0.13991141E-01 0.20082412E-01 0.22303348E-01 0.22770112E-01 - 0.22695666E-01 0.22545019E-01 0.51413947E-02 0.63982322E-02 - 0.89386916E-02 0.12831130E-01 0.18219316E-01 0.22262501E-01 - 0.22770591E-01 0.22745283E-01 0.22670623E-01 0.22698866E-01 - 0.66906004E-02 0.80227265E-02 0.10750740E-01 0.15021718E-01 - 0.20382591E-01 0.22648074E-01 0.22697356E-01 0.22672111E-01 - 0.22748938E-01 0.23071995E-01 0.75025368E-02 0.88801077E-02 - 0.11718224E-01 0.16216543E-01 0.20812785E-01 0.22471990E-01 - 0.22546731E-01 0.22700615E-01 0.23073832E-01 0.38635725E+00 - 0.38031837E+00 0.30166101E+00 0.22405885E+00 0.49884871E-01 - 0.10670777E-01 0.13262554E-08 0.12516388E-02 0.35922723E-02 - 0.51297974E-02 0.59311031E-02 0.30166519E+00 0.24959862E+00 - 0.12126564E+00 0.22625256E-01 0.54043101E-03 0.00000000E+00 - 0.24633030E-02 0.48556346E-02 0.64690202E-02 0.73148566E-02 - 0.22408250E+00 0.12128413E+00 0.23714164E-01 0.11707227E-02 - 0.00000000E+00 0.16625649E-02 0.48577595E-02 0.74301609E-02 - 0.92352303E-02 0.10191637E-01 0.49914390E-01 0.22626327E-01 - 0.11709929E-02 0.24424698E-10 0.12492959E-02 0.49272212E-02 - 0.82140937E-02 0.11420025E-01 0.13621915E-01 0.14816165E-01 - 0.10680762E-01 0.52656309E-03 0.69110342E-07 0.12491336E-02 - 0.49671228E-02 0.83213421E-02 0.13219749E-01 0.17037211E-01 - 0.20009873E-01 0.20552734E-01 0.28327340E-08 0.00000000E+00 - 0.16623551E-02 0.49265362E-02 0.90694148E-02 0.13923530E-01 - 0.19261999E-01 0.21103447E-01 0.21223588E-01 0.21224972E-01 - 0.12516973E-02 0.24632397E-02 0.48574666E-02 0.82133226E-02 - 0.13215087E-01 0.19261595E-01 0.21111513E-01 0.21256089E-01 - 0.21250492E-01 0.21233412E-01 0.35926565E-02 0.48554563E-02 - 0.74294969E-02 0.11418757E-01 0.17036309E-01 0.21103388E-01 - 0.21256335E-01 0.21257199E-01 0.21263611E-01 0.21275342E-01 - 0.51297853E-02 0.64685638E-02 0.92336750E-02 0.13617397E-01 - 0.20007931E-01 0.21223683E-01 0.21251542E-01 0.21264363E-01 - 0.21355974E-01 0.21548476E-01 0.59310077E-02 0.73142005E-02 - 0.99043297E-02 0.14810258E-01 0.20676047E-01 0.21228295E-01 - 0.21235991E-01 0.21277044E-01 0.21549115E-01 0.23064476E+00 - 'SWAT ' 300 'REAL' - 0.12040111E+00 0.12045791E+00 0.12049863E+00 0.12052985E+00 - 0.12055584E+00 0.12057748E+00 0.12059393E+00 0.12060603E+00 - 0.12061403E+00 0.12061822E+00 0.12045791E+00 0.12048422E+00 - 0.12051255E+00 0.12053916E+00 0.12056360E+00 0.12058390E+00 - 0.12060014E+00 0.12061248E+00 0.12062084E+00 0.12062524E+00 - 0.12049863E+00 0.12051255E+00 0.12053268E+00 0.12055526E+00 - 0.12057679E+00 0.12059589E+00 0.12061229E+00 0.12062541E+00 - 0.12063466E+00 0.12063959E+00 0.12052985E+00 0.12053916E+00 - 0.12055526E+00 0.12057415E+00 0.12059357E+00 0.12061249E+00 - 0.12063002E+00 0.12064497E+00 0.12065599E+00 0.12066200E+00 - 0.12055584E+00 0.12056360E+00 0.12057679E+00 0.12059356E+00 - 0.12061263E+00 0.12063292E+00 0.12065312E+00 0.12067153E+00 - 0.12068579E+00 0.12069383E+00 0.12057748E+00 0.12058390E+00 - 0.12059589E+00 0.12061248E+00 0.12063291E+00 0.12065623E+00 - 0.12068117E+00 0.12070544E+00 0.12072523E+00 0.12073667E+00 - 0.12059393E+00 0.12060014E+00 0.12061229E+00 0.12063002E+00 - 0.12065312E+00 0.12068117E+00 0.12071293E+00 0.12074513E+00 - 0.12077322E+00 0.12079078E+00 0.12060603E+00 0.12061248E+00 - 0.12062541E+00 0.12064496E+00 0.12067152E+00 0.12070545E+00 - 0.12074514E+00 0.12078828E+00 0.12083104E+00 0.12086276E+00 - 0.12061403E+00 0.12062084E+00 0.12063465E+00 0.12065597E+00 - 0.12068577E+00 0.12072525E+00 0.12077325E+00 0.12083105E+00 - 0.12089921E+00 0.12096728E+00 0.12061822E+00 0.12062524E+00 - 0.12063958E+00 0.12066197E+00 0.12069377E+00 0.12073673E+00 - 0.12079085E+00 0.12086280E+00 0.12096729E+00 0.12113035E+00 - 0.12040483E+00 0.12046141E+00 0.12050217E+00 0.12053341E+00 - 0.12055885E+00 0.12057857E+00 0.12059398E+00 0.12060609E+00 - 0.12061409E+00 0.12061828E+00 0.12046141E+00 0.12048776E+00 - 0.12051611E+00 0.12054262E+00 0.12056587E+00 0.12058463E+00 - 0.12060021E+00 0.12061254E+00 0.12062090E+00 0.12062530E+00 - 0.12050217E+00 0.12051611E+00 0.12053619E+00 0.12055816E+00 - 0.12057812E+00 0.12059606E+00 0.12061235E+00 0.12062547E+00 - 0.12063471E+00 0.12063964E+00 0.12053341E+00 0.12054262E+00 - 0.12055816E+00 0.12057567E+00 0.12059393E+00 0.12061255E+00 - 0.12063008E+00 0.12064502E+00 0.12065604E+00 0.12066206E+00 - 0.12055885E+00 0.12056587E+00 0.12057812E+00 0.12059392E+00 - 0.12061269E+00 0.12063298E+00 0.12065317E+00 0.12067157E+00 - 0.12068585E+00 0.12069400E+00 0.12057857E+00 0.12058463E+00 - 0.12059606E+00 0.12061255E+00 0.12063297E+00 0.12065628E+00 - 0.12068123E+00 0.12070598E+00 0.12072575E+00 0.12073693E+00 - 0.12059398E+00 0.12060021E+00 0.12061235E+00 0.12063007E+00 - 0.12065317E+00 0.12068123E+00 0.12071347E+00 0.12074573E+00 - 0.12077373E+00 0.12079116E+00 0.12060609E+00 0.12061254E+00 - 0.12062547E+00 0.12064502E+00 0.12067157E+00 0.12070599E+00 - 0.12074573E+00 0.12078886E+00 0.12083155E+00 0.12086331E+00 - 0.12061409E+00 0.12062090E+00 0.12063470E+00 0.12065602E+00 - 0.12068582E+00 0.12072577E+00 0.12077376E+00 0.12083156E+00 - 0.12089971E+00 0.12096788E+00 0.12061828E+00 0.12062529E+00 - 0.12063964E+00 0.12066202E+00 0.12069382E+00 0.12073698E+00 - 0.12079122E+00 0.12086335E+00 0.12096789E+00 0.12113513E+00 - 0.12041067E+00 0.12046688E+00 0.12050770E+00 0.12053703E+00 - 0.12055895E+00 0.12057868E+00 0.12059408E+00 0.12060618E+00 - 0.12061419E+00 0.12061837E+00 0.12046688E+00 0.12049331E+00 - 0.12052125E+00 0.12054290E+00 0.12056596E+00 0.12058473E+00 - 0.12060031E+00 0.12061263E+00 0.12062099E+00 0.12062539E+00 - 0.12050770E+00 0.12052125E+00 0.12053676E+00 0.12055825E+00 - 0.12057822E+00 0.12059616E+00 0.12061244E+00 0.12062556E+00 - 0.12063480E+00 0.12063973E+00 0.12053704E+00 0.12054290E+00 - 0.12055825E+00 0.12057576E+00 0.12059402E+00 0.12061264E+00 - 0.12063016E+00 0.12064511E+00 0.12065612E+00 0.12066214E+00 - 0.12055895E+00 0.12056597E+00 0.12057822E+00 0.12059402E+00 - 0.12061278E+00 0.12063306E+00 0.12065325E+00 0.12067164E+00 - 0.12068592E+00 0.12069407E+00 0.12057868E+00 0.12058473E+00 - 0.12059616E+00 0.12061264E+00 0.12063305E+00 0.12065636E+00 - 0.12068129E+00 0.12070605E+00 0.12072581E+00 0.12073699E+00 - 0.12059408E+00 0.12060031E+00 0.12061244E+00 0.12063016E+00 - 0.12065325E+00 0.12068129E+00 0.12071354E+00 0.12074578E+00 - 0.12077378E+00 0.12079120E+00 0.12060618E+00 0.12061263E+00 - 0.12062556E+00 0.12064510E+00 0.12067164E+00 0.12070606E+00 - 0.12074579E+00 0.12078889E+00 0.12083157E+00 0.12086333E+00 - 0.12061419E+00 0.12062099E+00 0.12063479E+00 0.12065610E+00 - 0.12068589E+00 0.12072583E+00 0.12077381E+00 0.12083159E+00 - 0.12089972E+00 0.12096787E+00 0.12061837E+00 0.12062538E+00 - 0.12063972E+00 0.12066209E+00 0.12069389E+00 0.12073704E+00 - 0.12079126E+00 0.12086337E+00 0.12096789E+00 0.12114330E+00 - 'ENDSOL ' 0 'MESS' - 'SEQNUM ' 1 'INTE' - 120 - 'INTEHEAD' 411 'INTE' - 0 201702 2 0 0 0 - 0 0 10 10 3 300 - 0 0 7 0 2 1 - 1 2 2 0 0 0 - 155 122 130 3 0 0 - 0 0 25 40 58 0 - 99 112 180 5 0 1 - 18 24 10 7 2 4 - 0 1 1 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 29 12 - 2024 119 120 0 0 0 - 0 0 0 0 5 0 - 0 0 12 1 25 1 - 0 0 8 8 0 1 - 0 0 0 0 100 0 - 0 0 0 1 0 1 - 0 1 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 1 1 22 146 - 10 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 1 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 - 'LOGIHEAD' 121 'LOGI' - T T F F F F F F F F F F F F F F F F F F F F F F F - F F F F F F F F F F F F F F F F F F F F F F F F F - F F F F F F F F F F F F F F F F F F F F F F F F F - F F F F F F F F F F F F F F F F F F F F F F F F F - F F F F F F F F F F F F F F F F F F F F F - 'DOUBHEAD' 229 'DOUB' - 0.36500000000000D+04 0.93000000000000D+02 0.36500000000000D+03 - 0.10000000000000D+00 0.15000000000000D+00 0.30000000000000D+01 - 0.30000000000000D+00 0.10000000000000D+00 0.10000000000000D+00 - 0.10000000000000D-02 0.10000000000000D-06 0.10000000000000D-03 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.10000000000000D+02 0.10000000000000D-01 - 0.10000000000000D-05 0.10000000000000D-02 0.10000000000000D-02 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+21 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.10000000000000D-01 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+21 0.10000000000000D+21 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+21 0.10000000000000D+21 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - -0.10000000000000D+01 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.10000000000000D+21 - 0.10000000000000D+21 0.10000000000000D+12 0.12500000000000D+01 - 0.10000000000000D+12 0.10000000000000D+07 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+21 0.00000000000000D+00 0.25000000000000D-01 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+01 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.36500000000000D+03 0.10000000000000D+00 0.15000000000000D+00 - 0.30000000000000D+01 0.30000000000000D+00 0.10000000000000D+00 - 0.10000000000000D+00 0.10000000000000D-02 0.10000000000000D-06 - 0.10000000000000D-03 0.10000000000000D+02 0.10000000000000D-01 - 0.10000000000000D-05 0.10000000000000D-02 0.10000000000000D-02 - 0.00000000000000D+00 0.00000000000000D+00 0.10000000000000D-19 - 0.10130000000000D+01 0.00000000000000D+00 0.10000000000000D+01 - 0.00000000000000D+00 0.30000000000000D+00 0.20000000000000D+01 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.73597900000000D+06 0.73962900000000D+06 - 0.10000000000000D+01 0.20000000000000D+00 0.40000000000000D+00 - 0.12000000000000D+01 0.30000000000000D+00 0.10000000000000D+01 - 0.00000000000000D+00 0.00000000000000D+00 0.40000000000000D+00 - 0.70000000000000D+00 0.20000000000000D+01 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.10000000000000D+01 0.10000000000000D+01 - 0.10000000000000D+01 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+01 0.10000000000000D-03 0.00000000000000D+00 - 0.00000000000000D+00 0.10000000000000D+21 0.10000000000000D+21 - 0.10000000000000D+21 0.10000000000000D+21 0.10000000000000D+21 - 0.10000000000000D+21 0.10000000000000D+21 0.10000000000000D+21 - 0.10000000000000D+21 0.10000000000000D+21 0.10000000000000D+21 - 0.10000000000000D+21 0.10000000000000D+01 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.10000000000000D-03 -0.20000000000000D+21 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.10000000000000D-01 0.10000000000000D+01 - 0.00000000000000D+00 0.10000000000000D+21 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 - 'IGRP ' 198 'INTE' - 2 1 2 0 0 0 - 0 -1 0 0 0 0 - 0 0 -1 0 0 0 - 0 -1 0 0 0 0 - -1 0 0 0 0 1 - 2 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 1 1 0 0 0 0 - 0 1 1 1 0 1 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 1 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 2 2 0 - 0 0 0 0 2 2 - 'SGRP ' 224 'REAL' - 0.10000000E+21 0.10000000E+21 -0.10000000E+21 0.10000000E+21 - 0.00000000E+00 0.00000000E+00 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 -0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 -0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - -0.10000000E+21 0.00000000E+00 0.00000000E+00 0.00000000E+00 - -0.20000000E+21 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.10000000E+21 0.00000000E+00 0.10000000E+21 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.10000000E+01 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.10000000E+21 0.10000000E+21 -0.10000000E+21 0.10000000E+21 - 0.00000000E+00 0.00000000E+00 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 -0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 -0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - -0.10000000E+21 0.00000000E+00 0.00000000E+00 0.00000000E+00 - -0.20000000E+21 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.10000000E+21 0.00000000E+00 0.10000000E+21 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.10000000E+01 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 'XGRP ' 360 'DOUB' - 0.55606806894552D+04 0.65716062548386D-04 0.11929859458181D+06 - 0.10777045470394D+06 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+06 0.00000000000000D+00 0.11817988739467D-07 - 0.21453955233940D+02 0.45907821380564D+08 0.15516321390627D+00 - 0.35495534410801D+09 0.29346580520739D+09 0.00000000000000D+00 - 0.00000000000000D+00 0.36500000000000D+09 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.73000000000000D+08 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.36500000000000D+09 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.55606806894552D+04 0.65716062548386D-04 0.11929859458181D+06 - 0.10777045470394D+06 0.00000000000000D+00 0.00000000000000D+00 - 0.10000000000000D+06 0.00000000000000D+00 0.11817988739467D-07 - 0.21453955233940D+02 0.45907821380564D+08 0.15516321390627D+00 - 0.35495534410801D+09 0.29346580520739D+09 0.00000000000000D+00 - 0.00000000000000D+00 0.36500000000000D+09 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.73000000000000D+08 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.36500000000000D+09 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 'ZGRP ' 10 'CHAR' - 'G1 ' ' ' ' ' ' ' ' ' 'FIELD ' ' ' - ' ' ' ' ' ' - 'IWEL ' 310 'INTE' - 10 10 3 3 1 1 - 1 1 1 0 1 0 - 0 0 0 1 0 -100 - 0 0 0 0 0 0 - -1 0 0 0 0 0 - 0 7 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 -1 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 1 - 1 1 1 1 1 4 - 3 3 0 1 0 0 - 0 0 3 0 -100 0 - 0 0 0 0 0 -1 - 0 0 0 0 0 0 - 7 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 -1 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 - 'SWEL ' 244 'REAL' - 0.20000000E+05 0.10000000E+21 0.10000000E+21 0.20000000E+05 - 0.10000000E+21 0.00000000E+00 0.10000000E+04 0.00000000E+00 - 0.00000000E+00 0.84000000E+04 0.00000000E+00 0.99999997E-05 - 0.00000000E+00 0.00000000E+00 0.10000000E+21 0.10000000E+21 - 0.00000000E+00 -0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.00000000E+00 - 0.10000000E+01 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+01 - 0.00000000E+00 0.10000000E+21 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.10000000E+21 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.10000000E+21 0.00000000E+00 0.00000000E+00 0.10000000E+01 - 0.10000000E+01 0.10000000E+01 0.00000000E+00 0.10000000E+21 - 0.00000000E+00 0.10000000E+21 0.10000000E+01 -0.10000000E+21 - 0.10000000E+01 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.50000000E+00 0.10000000E+01 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10000000E+21 - 0.00000000E+00 0.10000000E+01 0.10000000E+21 0.10000000E+21 - 0.10000000E+06 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.90140000E+04 0.00000000E+00 0.00000000E+00 0.83350000E+04 - 0.00000000E+00 0.99999997E-05 0.00000000E+00 0.00000000E+00 - 0.10000000E+21 0.10000000E+21 0.00000000E+00 -0.10000000E+21 - 0.10000000E+21 0.10000000E+21 0.10000000E+21 0.10000000E+21 - 0.10000000E+21 0.00000000E+00 0.10000000E+01 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.10000000E+01 0.00000000E+00 0.10000000E+21 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.10000000E+21 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.10000000E+21 0.10000000E+21 0.00000000E+00 - 0.00000000E+00 0.10000000E+01 0.10000000E+01 0.10000000E+01 - 0.00000000E+00 0.10000000E+21 0.00000000E+00 0.10000000E+21 - 0.10000000E+01 -0.10000000E+21 0.10000000E+01 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.50000000E+00 0.10000000E+01 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.10000000E+21 0.00000000E+00 0.10000000E+01 - 'XWEL ' 260 'DOUB' - 0.55606806894552D+04 0.65716062548386D-04 0.11929859458181D+06 - 0.55606807551713D+04 0.10777045470394D+06 0.00000000000000D+00 - 0.10000000000000D+04 0.11817988739467D-07 0.21453955233940D+02 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.45907821380564D+08 0.15516321390627D+00 0.35495534410801D+09 - 0.29346580520739D+09 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.65716062548386D-04 0.11929859458181D+06 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.10000000000000D+04 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.73000000000000D+08 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - -0.10000000000000D+06 0.00000000000000D+00 -0.87396194999711D+05 - 0.00000000000000D+00 0.42850507725940D+04 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.36500000000000D+09 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.87396194999711D+00 - 0.00000000000000D+00 0.00000000000000D+00 -0.10000000000000D+06 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.90140000000000D+04 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.36500000000000D+09 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 -0.87396194999711D+05 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 - 'ZWEL ' 6 'CHAR' - 'PROD ' ' ' ' ' 'INJ ' ' ' ' ' - 'ICON ' 50 'INTE' - 1 10 10 3 0 1 - 0 0 0 0 0 0 - 1 3 0 0 0 0 - 0 0 0 0 0 0 - 0 1 1 1 1 0 - 1 0 0 0 0 0 - 0 1 3 0 0 0 - 0 0 0 0 0 0 - 0 0 - 'SCON ' 80 'REAL' - 0.10610335E+02 0.84000000E+04 0.50000000E+00 0.10000000E+05 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10610335E+02 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 -0.10000000E+21 -0.10000000E+21 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.10610335E+02 0.83350000E+04 0.50000000E+00 0.10000000E+05 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.10610335E+02 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 -0.10000000E+21 -0.10000000E+21 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 'XCON ' 116 'DOUB' - 0.55606813749207D+04 0.65716063371202D-04 0.11929859492469D+06 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.10000000000000D+04 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - -0.99999999528515D+05 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.42850507725940D+04 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 0.00000000000000D+00 - 0.00000000000000D+00 0.00000000000000D+00 - 'STARTSOL' 0 'MESS' - 'PRESSURE' 300 'REAL' - 0.40275010E+04 0.39528157E+04 0.39001470E+04 0.38599226E+04 - 0.38261057E+04 0.37966794E+04 0.37734377E+04 0.37560222E+04 - 0.37446519E+04 0.37394441E+04 0.39528159E+04 0.39188389E+04 - 0.38821648E+04 0.38479316E+04 0.38163333E+04 0.37883750E+04 - 0.37656680E+04 0.37482122E+04 0.37366379E+04 0.37312681E+04 - 0.39001482E+04 0.38821655E+04 0.38563147E+04 0.38279502E+04 - 0.37991169E+04 0.37730515E+04 0.37507024E+04 0.37329197E+04 - 0.37207236E+04 0.37148291E+04 0.38599260E+04 0.38479346E+04 - 0.38279521E+04 0.38030791E+04 0.37772146E+04 0.37522219E+04 - 0.37295154E+04 0.37106423E+04 0.36971179E+04 0.36901416E+04 - 0.38261118E+04 0.38163391E+04 0.37991223E+04 0.37772168E+04 - 0.37527432E+04 0.37274790E+04 0.37031626E+04 0.36818303E+04 - 0.36656501E+04 0.36567412E+04 0.37966887E+04 0.37883838E+04 - 0.37730596E+04 0.37522246E+04 0.37274753E+04 0.37003840E+04 - 0.36727490E+04 0.36468418E+04 0.36257312E+04 0.36132251E+04 - 0.37734509E+04 0.37656809E+04 0.37507146E+04 0.37295256E+04 - 0.37031746E+04 0.36727559E+04 0.36396602E+04 0.36060935E+04 - 0.35760801E+04 0.35564248E+04 0.37560393E+04 0.37482295E+04 - 0.37329370E+04 0.37106587E+04 0.36818457E+04 0.36468528E+04 - 0.36060989E+04 0.35607761E+04 0.35148594E+04 0.34795383E+04 - 0.37446729E+04 0.37366604E+04 0.37207480E+04 0.36971396E+04 - 0.36656694E+04 0.36257468E+04 0.35760908E+04 0.35148638E+04 - 0.34416033E+04 0.33677061E+04 0.37394675E+04 0.37312952E+04 - 0.37148655E+04 0.36901687E+04 0.36567646E+04 0.36132468E+04 - 0.35564417E+04 0.34795437E+04 0.33677124E+04 0.31877856E+04 - 0.40292419E+04 0.39548523E+04 0.39021394E+04 0.38618943E+04 - 0.38281826E+04 0.37990110E+04 0.37763105E+04 0.37598508E+04 - 0.37494265E+04 0.37450012E+04 0.39548523E+04 0.39208403E+04 - 0.38841470E+04 0.38499050E+04 0.38186941E+04 0.37907671E+04 - 0.37686309E+04 0.37520891E+04 0.37414182E+04 0.37367686E+04 - 0.39021406E+04 0.38841479E+04 0.38582842E+04 0.38302268E+04 - 0.38014460E+04 0.37755491E+04 0.37537915E+04 0.37368440E+04 - 0.37255210E+04 0.37203450E+04 0.38618975E+04 0.38499080E+04 - 0.38302275E+04 0.38053599E+04 0.37795625E+04 0.37548618E+04 - 0.37327219E+04 0.37145881E+04 0.37018960E+04 0.36956848E+04 - 0.38281887E+04 0.38186982E+04 0.38014307E+04 0.37795615E+04 - 0.37552571E+04 0.37303167E+04 0.37064771E+04 0.36857715E+04 - 0.36703906E+04 0.36623044E+04 0.37990203E+04 0.37907751E+04 - 0.37755532E+04 0.37548630E+04 0.37303110E+04 0.37034775E+04 - 0.36761726E+04 0.36507629E+04 0.36304009E+04 0.36187837E+04 - 0.37763237E+04 0.37686436E+04 0.37538032E+04 0.37327310E+04 - 0.37064854E+04 0.36761790E+04 0.36432532E+04 0.36100286E+04 - 0.35806553E+04 0.35619343E+04 0.37598679E+04 0.37521067E+04 - 0.37368618E+04 0.37146042E+04 0.36857861E+04 0.36507747E+04 - 0.36100347E+04 0.35648477E+04 0.35193267E+04 0.34848386E+04 - 0.37494475E+04 0.37414409E+04 0.37255454E+04 0.37019182E+04 - 0.36704102E+04 0.36304172E+04 0.35806665E+04 0.35193318E+04 - 0.34458662E+04 0.33713948E+04 0.37450249E+04 0.37367959E+04 - 0.37203796E+04 0.36957131E+04 0.36623286E+04 0.36188054E+04 - 0.35619514E+04 0.34848474E+04 0.33714028E+04 0.31883103E+04 - 0.40321714E+04 0.39582229E+04 0.39054365E+04 0.38657063E+04 - 0.38387634E+04 0.38098342E+04 0.37871440E+04 0.37706885E+04 - 0.37602666E+04 0.37558352E+04 0.39582231E+04 0.39241313E+04 - 0.38875381E+04 0.38565500E+04 0.38294739E+04 0.38015967E+04 - 0.37794663E+04 0.37629302E+04 0.37522620E+04 0.37476067E+04 - 0.39054377E+04 0.38875391E+04 0.38632524E+04 0.38409397E+04 - 0.38122693E+04 0.37863833E+04 0.37646331E+04 0.37476917E+04 - 0.37363716E+04 0.37311912E+04 0.38657092E+04 0.38565520E+04 - 0.38409404E+04 0.38161809E+04 0.37903958E+04 0.37657036E+04 - 0.37435720E+04 0.37254448E+04 0.37127561E+04 0.37065422E+04 - 0.38387693E+04 0.38294780E+04 0.38122542E+04 0.37903948E+04 - 0.37660991E+04 0.37411677E+04 0.37173376E+04 0.36966396E+04 - 0.36812629E+04 0.36731755E+04 0.38098433E+04 0.38016047E+04 - 0.37863875E+04 0.37657048E+04 0.37411624E+04 0.37143391E+04 - 0.36870449E+04 0.36616445E+04 0.36412881E+04 0.36296719E+04 - 0.37871570E+04 0.37794790E+04 0.37646445E+04 0.37435811E+04 - 0.37173457E+04 0.36870513E+04 0.36541377E+04 0.36209246E+04 - 0.35915603E+04 0.35728433E+04 0.37707058E+04 0.37629478E+04 - 0.37477092E+04 0.37254609E+04 0.36966543E+04 0.36616560E+04 - 0.36209307E+04 0.35757593E+04 0.35302524E+04 0.34957729E+04 - 0.37602876E+04 0.37522844E+04 0.37363962E+04 0.37127783E+04 - 0.36812822E+04 0.36413042E+04 0.35915715E+04 0.35302576E+04 - 0.34568137E+04 0.33823516E+04 0.37558591E+04 0.37476340E+04 - 0.37312258E+04 0.37065706E+04 0.36732000E+04 0.36296936E+04 - 0.35728601E+04 0.34957820E+04 0.33823596E+04 0.31883364E+04 - 'RS ' 300 'REAL' - 0.12700000E+01 0.12489593E+01 0.12310519E+01 0.12173758E+01 - 0.12058779E+01 0.11958730E+01 0.11879709E+01 0.11820495E+01 - 0.11781837E+01 0.11764129E+01 0.12489594E+01 0.12374072E+01 - 0.12249380E+01 0.12132988E+01 0.12025553E+01 0.11930496E+01 - 0.11853291E+01 0.11793941E+01 0.11754589E+01 0.11736331E+01 - 0.12310524E+01 0.12249383E+01 0.12161490E+01 0.12065051E+01 - 0.11967018E+01 0.11878395E+01 0.11802409E+01 0.11741947E+01 - 0.11700480E+01 0.11680439E+01 0.12173768E+01 0.12132998E+01 - 0.12065058E+01 0.11980488E+01 0.11892550E+01 0.11807574E+01 - 0.11730373E+01 0.11666204E+01 0.11620221E+01 0.11596501E+01 - 0.12058800E+01 0.12025572E+01 0.11967037E+01 0.11892557E+01 - 0.11809347E+01 0.11723449E+01 0.11640773E+01 0.11568244E+01 - 0.11513231E+01 0.11482940E+01 0.11958761E+01 0.11930525E+01 - 0.11878422E+01 0.11807584E+01 0.11723436E+01 0.11631325E+01 - 0.11537367E+01 0.11449282E+01 0.11377506E+01 0.11334985E+01 - 0.11879753E+01 0.11853335E+01 0.11802449E+01 0.11730407E+01 - 0.11640813E+01 0.11537390E+01 0.11424865E+01 0.11310738E+01 - 0.11208692E+01 0.11141864E+01 0.11820554E+01 0.11794001E+01 - 0.11742007E+01 0.11666260E+01 0.11568295E+01 0.11449319E+01 - 0.11310756E+01 0.11156659E+01 0.11000541E+01 0.10880451E+01 - 0.11781907E+01 0.11754665E+01 0.11700563E+01 0.11620295E+01 - 0.11513295E+01 0.11377560E+01 0.11208729E+01 0.11000557E+01 - 0.10751470E+01 0.10500221E+01 0.11764209E+01 0.11736423E+01 - 0.11680562E+01 0.11596594E+01 0.11483020E+01 0.11335059E+01 - 0.11141921E+01 0.10880469E+01 0.10500243E+01 0.98884910E+00 - 0.12700000E+01 0.12496518E+01 0.12317294E+01 0.12180461E+01 - 0.12065841E+01 0.11966658E+01 0.11889477E+01 0.11833513E+01 - 0.11798069E+01 0.11783024E+01 0.12496518E+01 0.12380877E+01 - 0.12256120E+01 0.12139697E+01 0.12033579E+01 0.11938628E+01 - 0.11863365E+01 0.11807122E+01 0.11770842E+01 0.11755033E+01 - 0.12317297E+01 0.12256123E+01 0.12168186E+01 0.12072791E+01 - 0.11974937E+01 0.11886886E+01 0.11812911E+01 0.11755290E+01 - 0.11716791E+01 0.11699193E+01 0.12180471E+01 0.12139707E+01 - 0.12072793E+01 0.11988243E+01 0.11900532E+01 0.11816549E+01 - 0.11741275E+01 0.11679620E+01 0.11636467E+01 0.11615348E+01 - 0.12065861E+01 0.12033594E+01 0.11974884E+01 0.11900530E+01 - 0.11817894E+01 0.11733097E+01 0.11652042E+01 0.11581643E+01 - 0.11529348E+01 0.11501855E+01 0.11966689E+01 0.11938655E+01 - 0.11886901E+01 0.11816554E+01 0.11733078E+01 0.11641843E+01 - 0.11549007E+01 0.11462615E+01 0.11393384E+01 0.11353885E+01 - 0.11889521E+01 0.11863408E+01 0.11812950E+01 0.11741306E+01 - 0.11652070E+01 0.11549028E+01 0.11437081E+01 0.11324117E+01 - 0.11224248E+01 0.11160597E+01 0.11833571E+01 0.11807183E+01 - 0.11755350E+01 0.11679674E+01 0.11581693E+01 0.11462654E+01 - 0.11324137E+01 0.11170502E+01 0.11015731E+01 0.10898471E+01 - 0.11798141E+01 0.11770918E+01 0.11716875E+01 0.11636542E+01 - 0.11529415E+01 0.11393439E+01 0.11224287E+01 0.11015748E+01 - 0.10765965E+01 0.10512762E+01 0.11783105E+01 0.11755126E+01 - 0.11699312E+01 0.11615444E+01 0.11501938E+01 0.11353959E+01 - 0.11160655E+01 0.10898502E+01 0.10512789E+01 0.98902750E+00 - 0.12700000E+01 0.12507977E+01 0.12328504E+01 0.12193421E+01 - 0.12101816E+01 0.12003456E+01 0.11926309E+01 0.11870360E+01 - 0.11834927E+01 0.11819860E+01 0.12507979E+01 0.12392067E+01 - 0.12267649E+01 0.12162290E+01 0.12070231E+01 0.11975448E+01 - 0.11900206E+01 0.11843983E+01 0.11807711E+01 0.11791883E+01 - 0.12328508E+01 0.12267653E+01 0.12185079E+01 0.12109215E+01 - 0.12011735E+01 0.11923723E+01 0.11849772E+01 0.11792172E+01 - 0.11753684E+01 0.11736070E+01 0.12193431E+01 0.12162297E+01 - 0.12109218E+01 0.12025036E+01 0.11937366E+01 0.11853412E+01 - 0.11778165E+01 0.11716533E+01 0.11673391E+01 0.11652263E+01 - 0.12101835E+01 0.12070246E+01 0.12011684E+01 0.11937362E+01 - 0.11854757E+01 0.11769991E+01 0.11688968E+01 0.11618595E+01 - 0.11566314E+01 0.11538817E+01 0.12003487E+01 0.11975476E+01 - 0.11923738E+01 0.11853417E+01 0.11769972E+01 0.11678773E+01 - 0.11585972E+01 0.11499611E+01 0.11430399E+01 0.11390904E+01 - 0.11926354E+01 0.11900249E+01 0.11849811E+01 0.11778196E+01 - 0.11688995E+01 0.11585994E+01 0.11474087E+01 0.11361164E+01 - 0.11261325E+01 0.11197687E+01 0.11870420E+01 0.11844043E+01 - 0.11792232E+01 0.11716588E+01 0.11618644E+01 0.11499650E+01 - 0.11361184E+01 0.11207602E+01 0.11052878E+01 0.10935647E+01 - 0.11834998E+01 0.11807787E+01 0.11753767E+01 0.11673466E+01 - 0.11566380E+01 0.11430454E+01 0.11261363E+01 0.11052896E+01 - 0.10803187E+01 0.10550015E+01 0.11819941E+01 0.11791975E+01 - 0.11736188E+01 0.11652360E+01 0.11538900E+01 0.11390978E+01 - 0.11197745E+01 0.10935678E+01 0.10550042E+01 0.98903638E+00 - 'SGAS ' 300 'REAL' - 0.54965413E+00 0.54302722E+00 0.54372740E+00 0.53906590E+00 - 0.52533394E+00 0.50460225E+00 0.48696038E+00 0.46936280E+00 - 0.44573668E+00 0.39644679E+00 0.54302990E+00 0.54330432E+00 - 0.54133826E+00 0.53282893E+00 0.51708817E+00 0.50016093E+00 - 0.48462296E+00 0.46965632E+00 0.44726145E+00 0.39948046E+00 - 0.54373038E+00 0.54134011E+00 0.53460270E+00 0.52246511E+00 - 0.50783360E+00 0.49523768E+00 0.48351997E+00 0.47117251E+00 - 0.45038229E+00 0.40474135E+00 0.53907192E+00 0.53283226E+00 - 0.52245837E+00 0.51031274E+00 0.49951816E+00 0.49172041E+00 - 0.48378778E+00 0.47385618E+00 0.45480838E+00 0.41171318E+00 - 0.52533871E+00 0.51708120E+00 0.50782615E+00 0.49951068E+00 - 0.49430493E+00 0.48918748E+00 0.48465335E+00 0.47709951E+00 - 0.46016711E+00 0.41997761E+00 0.50460547E+00 0.50016099E+00 - 0.49521416E+00 0.49174583E+00 0.48938233E+00 0.48774135E+00 - 0.48553017E+00 0.48021102E+00 0.46597975E+00 0.42926612E+00 - 0.48695946E+00 0.48462054E+00 0.48350507E+00 0.48380393E+00 - 0.48463932E+00 0.48549914E+00 0.48530376E+00 0.48233798E+00 - 0.47153828E+00 0.43934613E+00 0.46935773E+00 0.46965095E+00 - 0.47116324E+00 0.47385594E+00 0.47708073E+00 0.48018044E+00 - 0.48232266E+00 0.48216406E+00 0.47585094E+00 0.45072427E+00 - 0.44573408E+00 0.44725722E+00 0.45037046E+00 0.45479614E+00 - 0.46015191E+00 0.46595770E+00 0.47151637E+00 0.47583526E+00 - 0.47713113E+00 0.47378212E+00 0.39643928E+00 0.39945984E+00 - 0.40455854E+00 0.41156924E+00 0.41985399E+00 0.42914075E+00 - 0.43922165E+00 0.45060855E+00 0.47368592E+00 0.49624071E+00 - 0.50898421E+00 0.50791597E+00 0.50833887E+00 0.49471128E+00 - 0.19655463E+00 0.41721318E-01 0.28992547E-01 0.25230911E-01 - 0.23663029E-01 0.22872813E-01 0.50791705E+00 0.50837660E+00 - 0.50385725E+00 0.40441433E+00 0.78935906E-01 0.34215707E-01 - 0.28359024E-01 0.25069604E-01 0.23617260E-01 0.22889538E-01 - 0.50834078E+00 0.50385898E+00 0.44723275E+00 0.12550254E+00 - 0.36375761E-01 0.32202579E-01 0.27589245E-01 0.24872737E-01 - 0.23528794E-01 0.22857575E-01 0.49472076E+00 0.40442714E+00 - 0.12563361E+00 0.39170329E-01 0.34470048E-01 0.30666439E-01 - 0.26888760E-01 0.24694910E-01 0.23435356E-01 0.22767700E-01 - 0.19658875E+00 0.79074323E-01 0.37434604E-01 0.34572076E-01 - 0.32094058E-01 0.28815180E-01 0.26267974E-01 0.24554286E-01 - 0.23361374E-01 0.22651320E-01 0.41724730E-01 0.34234498E-01 - 0.32288749E-01 0.30684145E-01 0.28828731E-01 0.27115222E-01 - 0.25714006E-01 0.24438074E-01 0.23321576E-01 0.22547873E-01 - 0.28992875E-01 0.28360579E-01 0.27593363E-01 0.26894866E-01 - 0.26284119E-01 0.25716299E-01 0.25092445E-01 0.24270253E-01 - 0.23312688E-01 0.22486616E-01 0.25230939E-01 0.25069717E-01 - 0.24872927E-01 0.24696173E-01 0.24556298E-01 0.24437837E-01 - 0.24269527E-01 0.23934867E-01 0.23353897E-01 0.22578008E-01 - 0.23663128E-01 0.23617392E-01 0.23529099E-01 0.23435682E-01 - 0.23361880E-01 0.23321990E-01 0.23312943E-01 0.23353862E-01 - 0.23623720E-01 0.24694819E-01 0.22872817E-01 0.22889579E-01 - 0.22858437E-01 0.22767762E-01 0.22651697E-01 0.22549029E-01 - 0.22487782E-01 0.22577470E-01 0.24688438E-01 0.39664266E+00 - 0.39167002E+00 0.31949165E+00 0.26063490E+00 0.12078247E+00 - 0.23364199E-01 0.21191988E-01 0.21168368E-01 0.21160815E-01 - 0.21151651E-01 0.21144897E-01 0.31949431E+00 0.27727959E+00 - 0.19527164E+00 0.36848813E-01 0.21371793E-01 0.21162437E-01 - 0.21161238E-01 0.21151083E-01 0.21141401E-01 0.21136185E-01 - 0.26064530E+00 0.19527932E+00 0.56030724E-01 0.21705519E-01 - 0.21159617E-01 0.21154333E-01 0.21147870E-01 0.21133913E-01 - 0.21122411E-01 0.21118177E-01 0.12080772E+00 0.36853004E-01 - 0.21705590E-01 0.21163819E-01 0.21149663E-01 0.21142488E-01 - 0.21128578E-01 0.21110307E-01 0.21093776E-01 0.21088433E-01 - 0.23365157E-01 0.21371786E-01 0.21162018E-01 0.21149633E-01 - 0.21140179E-01 0.21125162E-01 0.21105558E-01 0.21084046E-01 - 0.21063866E-01 0.21052754E-01 0.21192040E-01 0.21162450E-01 - 0.21154337E-01 0.21142440E-01 0.21125093E-01 0.21103891E-01 - 0.21080870E-01 0.21057807E-01 0.21035865E-01 0.21019435E-01 - 0.21168435E-01 0.21161299E-01 0.21147916E-01 0.21128641E-01 - 0.21105634E-01 0.21080937E-01 0.21056700E-01 0.21034652E-01 - 0.21014733E-01 0.20996077E-01 0.21160893E-01 0.21151166E-01 - 0.21134010E-01 0.21110449E-01 0.21084214E-01 0.21057960E-01 - 0.21034755E-01 0.21019330E-01 0.21014886E-01 0.21008642E-01 - 0.21151731E-01 0.21141486E-01 0.21122534E-01 0.21094006E-01 - 0.21064131E-01 0.21036137E-01 0.21014994E-01 0.21015089E-01 - 0.21069063E-01 0.21189298E-01 0.21144971E-01 0.21136265E-01 - 0.21118287E-01 0.21088824E-01 0.21053150E-01 0.21019854E-01 - 0.20996524E-01 0.21009123E-01 0.21189226E-01 0.24296229E+00 - 'SWAT ' 300 'REAL' - 0.12056463E+00 0.12062065E+00 0.12066017E+00 0.12069036E+00 - 0.12071575E+00 0.12073786E+00 0.12075531E+00 0.12076840E+00 - 0.12077694E+00 0.12078086E+00 0.12062065E+00 0.12064615E+00 - 0.12067367E+00 0.12069936E+00 0.12072310E+00 0.12074410E+00 - 0.12076116E+00 0.12077427E+00 0.12078296E+00 0.12078699E+00 - 0.12066017E+00 0.12067367E+00 0.12069307E+00 0.12071437E+00 - 0.12073603E+00 0.12075561E+00 0.12077239E+00 0.12078575E+00 - 0.12079491E+00 0.12079935E+00 0.12069036E+00 0.12069936E+00 - 0.12071437E+00 0.12073305E+00 0.12075248E+00 0.12077125E+00 - 0.12078831E+00 0.12080249E+00 0.12081265E+00 0.12081789E+00 - 0.12071575E+00 0.12072309E+00 0.12073603E+00 0.12075248E+00 - 0.12077086E+00 0.12078984E+00 0.12080811E+00 0.12082414E+00 - 0.12083630E+00 0.12084299E+00 0.12073785E+00 0.12074409E+00 - 0.12075560E+00 0.12077125E+00 0.12078984E+00 0.12081020E+00 - 0.12083096E+00 0.12085043E+00 0.12086630E+00 0.12087570E+00 - 0.12075531E+00 0.12076114E+00 0.12077238E+00 0.12078830E+00 - 0.12080809E+00 0.12083095E+00 0.12085583E+00 0.12088106E+00 - 0.12090363E+00 0.12091841E+00 0.12076839E+00 0.12077425E+00 - 0.12078574E+00 0.12080248E+00 0.12082413E+00 0.12085042E+00 - 0.12088106E+00 0.12091513E+00 0.12094966E+00 0.12097624E+00 - 0.12077693E+00 0.12078294E+00 0.12079490E+00 0.12081263E+00 - 0.12083628E+00 0.12086629E+00 0.12090362E+00 0.12094966E+00 - 0.12100478E+00 0.12106039E+00 0.12078084E+00 0.12078698E+00 - 0.12079932E+00 0.12081788E+00 0.12084298E+00 0.12087569E+00 - 0.12091839E+00 0.12097623E+00 0.12106039E+00 0.12119585E+00 - 0.12056847E+00 0.12062427E+00 0.12066383E+00 0.12069404E+00 - 0.12071937E+00 0.12074126E+00 0.12075831E+00 0.12077067E+00 - 0.12077850E+00 0.12078182E+00 0.12062427E+00 0.12064979E+00 - 0.12067734E+00 0.12070306E+00 0.12072649E+00 0.12074745E+00 - 0.12076408E+00 0.12077650E+00 0.12078451E+00 0.12078801E+00 - 0.12066383E+00 0.12067734E+00 0.12069676E+00 0.12071783E+00 - 0.12073943E+00 0.12075888E+00 0.12077522E+00 0.12078796E+00 - 0.12079646E+00 0.12080035E+00 0.12069404E+00 0.12070305E+00 - 0.12071782E+00 0.12073649E+00 0.12075587E+00 0.12077442E+00 - 0.12079105E+00 0.12080467E+00 0.12081421E+00 0.12081888E+00 - 0.12071936E+00 0.12072648E+00 0.12073945E+00 0.12075587E+00 - 0.12077412E+00 0.12079286E+00 0.12081077E+00 0.12082633E+00 - 0.12083789E+00 0.12084396E+00 0.12074126E+00 0.12074745E+00 - 0.12075888E+00 0.12077442E+00 0.12079287E+00 0.12081303E+00 - 0.12083355E+00 0.12085264E+00 0.12086795E+00 0.12087668E+00 - 0.12075830E+00 0.12076407E+00 0.12077522E+00 0.12079104E+00 - 0.12081076E+00 0.12083354E+00 0.12085829E+00 0.12088326E+00 - 0.12090535E+00 0.12091943E+00 0.12077066E+00 0.12077649E+00 - 0.12078794E+00 0.12080466E+00 0.12082632E+00 0.12085263E+00 - 0.12088326E+00 0.12091724E+00 0.12095148E+00 0.12097742E+00 - 0.12077849E+00 0.12078450E+00 0.12079644E+00 0.12081420E+00 - 0.12083787E+00 0.12086794E+00 0.12090534E+00 0.12095147E+00 - 0.12100676E+00 0.12106282E+00 0.12078180E+00 0.12078799E+00 - 0.12080032E+00 0.12081885E+00 0.12084395E+00 0.12087666E+00 - 0.12091941E+00 0.12097742E+00 0.12106281E+00 0.12120073E+00 - 0.12057446E+00 0.12062994E+00 0.12066956E+00 0.12069938E+00 - 0.12071960E+00 0.12074132E+00 0.12075836E+00 0.12077072E+00 - 0.12077855E+00 0.12078188E+00 0.12062994E+00 0.12065552E+00 - 0.12068299E+00 0.12070625E+00 0.12072658E+00 0.12074751E+00 - 0.12076413E+00 0.12077656E+00 0.12078457E+00 0.12078807E+00 - 0.12066956E+00 0.12068299E+00 0.12070122E+00 0.12071797E+00 - 0.12073950E+00 0.12075894E+00 0.12077527E+00 0.12078800E+00 - 0.12079651E+00 0.12080040E+00 0.12069938E+00 0.12070625E+00 - 0.12071797E+00 0.12073655E+00 0.12075593E+00 0.12077447E+00 - 0.12079110E+00 0.12080472E+00 0.12081425E+00 0.12081892E+00 - 0.12071960E+00 0.12072657E+00 0.12073950E+00 0.12075593E+00 - 0.12077417E+00 0.12079290E+00 0.12081081E+00 0.12082636E+00 - 0.12083792E+00 0.12084400E+00 0.12074132E+00 0.12074751E+00 - 0.12075894E+00 0.12077447E+00 0.12079291E+00 0.12081306E+00 - 0.12083358E+00 0.12085266E+00 0.12086797E+00 0.12087670E+00 - 0.12075835E+00 0.12076412E+00 0.12077527E+00 0.12079109E+00 - 0.12081080E+00 0.12083357E+00 0.12085831E+00 0.12088328E+00 - 0.12090536E+00 0.12091944E+00 0.12077072E+00 0.12077654E+00 - 0.12078799E+00 0.12080470E+00 0.12082635E+00 0.12085266E+00 - 0.12088328E+00 0.12091725E+00 0.12095147E+00 0.12097742E+00 - 0.12077854E+00 0.12078455E+00 0.12079649E+00 0.12081423E+00 - 0.12083790E+00 0.12086796E+00 0.12090535E+00 0.12095147E+00 - 0.12100673E+00 0.12106279E+00 0.12078187E+00 0.12078805E+00 - 0.12080038E+00 0.12081890E+00 0.12084398E+00 0.12087668E+00 - 0.12091943E+00 0.12097741E+00 0.12106279E+00 0.12120900E+00 - 'ENDSOL ' 0 'MESS' diff --git a/ThirdParty/custom-opm-common/opm-common/tests/SPE1_TESTCASE.UNRST b/ThirdParty/custom-opm-common/opm-common/tests/SPE1_TESTCASE.UNRST deleted file mode 100644 index 4ecee0c798187f81da1a651545fc6d56bdcf3274..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 178740 zcmeEP1z1#B8^&10S~1pM1MZ+8g4n^m49aJV*sk5R_S%WvC`f}e2B4IJ(ue_w*j=dD zEi-of@0sB$&Vr(g{<=H&d9LT4bKd*K`<*+?9EMj74GpdC)YYPA=bAM&G&Bmdx9CA= zwQv?@{j64tjkhB+a}2qDz!VvWc@2$1@0+P4YExa&AMjyF+c2N z*Q$10F*Y0LBAl@Cx1%yf>fmgVH8TwDB%C{N{*pDuY?sAZ2`7t%`DT7tj_eTqD|=t| zZ&utzFK6Ax`ky+)m_$rTT(Ems9@+2JM4z4P$Ud$d(a;z!USw-UoNAj5qP|pNfN{mn z3OH?Xvh|UlhgggJw5hhGX5c@_fa2$kR;Mm)+be$-Y0P5RAOb(H3S_*?I{t&i{D)F5 zkiqJ0-lb=&tTk|*T`Si>(K=F7B^6RSTZ4CN>mZ$eL@{8x+nF6Mril#|hcxRatLbrN z|NXp(vmDy_*yF9Qh1sW{xI_oFGp*9(>fLIs>nW}0{;!l%&Y3QmeWmU8@^ggX{m(pi z-d}5)WlwB#vta&P(C;&Mu94<8|FeyYJmeO)n6KF8hWp&Oc)!?w4j=dEbBM2-7yXNE ztETOy--0PqnbMxvH#1yfr5yP_|BCU5-b@vbgR_g+S8Ywd5kIPa^4ibu=lE-%)0PL^ zyh_@((lLG1*mUlFo6%zYs(gvBD^d~gomw;9X{VSgGu`RsSu4h6nye_ei|N^{HZ$vW zPkjB$rQYxHH%2NBDKq*7$9w--_Qk%c32{8P*I9A>eydjWuNv34?u+^EmE`SpUwl1P zjaTF)@9`F`1FTm2w%sgi;=uL(51;D`vCqlu^D+DE!rG4x_BQLIfoz?e=JGlQGdcRp zX8zxJ$#Q0APKP)r&WmkM*!&#(UVid3=KQe5*81PpdzRs>ImNS~)&0YBlirQYIsv1F z?J29l+h*QlXL?pE1|^Q?){6M-^SObg3PIAMk{A(KeCMa=w@`x+HML~ z9aHz!45%6Su^GT~9-ki(s-OQ)v#5T3{xm=8Sv3P{2L8@~`t|wmoP3*+5>nXJ>ihov zwMOyQ?aaEdF`SldjoEI}=Z`k+sgwEVVKtdeX1jfF>crsKDrxdzpQ`W~%(36svy*){ zgq>{fLiNN@j(aSMeGcqTxiLUaM^1ZJ*>K`_Sh5Y}{qi%m^KM9u{9X*Gt}C(6zDFdk zKNgE(U8w}c<~7u7O@$S8Hx~vJuWef0-@oo@$g=G-9%K7+A~3)3aJO z_fHS@^#qZ>+-!;d8IE1Evu&c~`)k&3Qwjy`ps90l>e>TtN zSj)!Jvsw}VPuef7Gk$y=fj_N2@1OSqg+J_DYSzs4b1~b`JRI3kb^lW8b^pMztq0Gm z?pOYkoU-5hrTd=Q@BJ3ns{6UQ`H-$NWpBH3{rzQb_x)SP^Xqfdzm=b#C9imu-&4dt zGVfcqfqfS-erZ&vE-wn62owAN?>4{pK~1lB>*OjOyFoQCRbEu*r3o(T*8^2jzM`Ms z_56wu{uQ^VKDT*KO0y=gT7BQYf6yqBZC|FoWw$OlZnw0z=#b+s3~beB_S(1ZVxio3 z(P;2t-$f${bL=y2_PrN$bNt-P#@WH}iqF7`Uf%v;_hdiWU96wm@ijhJE?V6`U_Bo2ZpKDW1nwww6IKzGtkjF{(K9rq#fh*#}`~M#`K9oy}Jhb|J;CJeW z_qByQrN>uj{POViHoSj(cJhpXP~o0r`GjhL+W?Pq`1+^n(!7u)#fW8S^^ zt$&rDHJ^VP_mB3z>&x>g9w1}R(BzPnGN}5)F2P7#pIg$7dbmzB&Qk~Z6a^( zF1c4UA=d^I$yskAIquIShuho9VL>I>Sq+RA`TVtuJbWgT+o}w5sVya^L4C=wN)kD= zFG}`Tw!l|8*trGF6xvwcoLmmvCZ}^1$v-v3U zf(^Ynh-U!N9U}rioQ)pe& z3bf{0B(2sO0)Bo&?$OArJYw!mcE1#aucENC2AC*XS+pN5dAkH0I)Wcv&?37mXPC;P;%%qnCw@_lD$r4#B&+G z0%4~+FuloHYDkWL;p8CHC;Q)qlU>X4v|-;`#C#j^T!XJL*jWk8ZgOa3M|OuIX~U8X zvYkDRY%aAzUa&FfCgM2?U%&{Bfr+6Fd>^v$yh7`1zo2zS7m)iPf%WtJ}nZpT)?%F7jG}n3E9CRQQ?&JFgU&m3%NQZ4^X~g|M!7Iv{rm z^3p-fc8I49d|iT_cm-zKdM}ExHliJc*Hgfp4dgp{1bMhykXzrDu&-l2Bn?pKvuB_O6&HHr?rzZY4t`c@UsiK_eWmAi1{w!Sp#2Iuyap=S!vgwmaeV>4x56X zy~w>Y@@j>cHzS^Q@U;(i7Ai2)e{sa0f(NtLvu@p$Z--T1&rH47^;e%i2nX)o6V$c% zL2ALC3-^-+)b;p*>fxa~MSMN$-quX;7u26-0|idjwJ+nn`jx#MOCULzGpttajs#cS5`PoG5bZ4PO)eB66C>r0A1 z4$ygKm%tUB*_8FU@vyPjj=;}Vi|XxYR;>DMqg;498vz;;^v{p z+Q}iyvyZ7>>r^hVUmWwkICu@$aY$Kh^UEiEo0XTaaS6A8{TOGz28SzHO1 z9v@BQ($R@%p6xfPxqxyQ)-E%7Uk<|>I`85~>0IjcNA@|Bm1mC$ZR!*@Y1?jTQ=Ox$ zb^K@cWb--;7e2|3W7j4_dq=XC^9xsSsCTy2MoFnOTb(vH4Rp>P?;_EVKhs%yr%$b? zH}IZZL&GrbqL1E+UtY0mcIZTQzoA`c{2U!Sy#m_j8!TaChRZ6Y`gUk!=yN&YEoZpb zfLmX58yn}Ux<=@vjZ?(Rt#GNs#=KpoviJU&`&IFGhKlPX-+ru>)QQ^2+MEuqL!06{ zUW-qNbKIIcirl!J*Bgpss;xw0$6anw#~G61{#egBADqG5Gu-d3*JYpO7A!i<`Z_j= zM_J3A+C7N1*$?g3XXcB2u6om>+~q-5l4iT>aY3f7Oe`OlZh5S+jX2L*!@(0RbkgP9 zwRe^1&H9|+v!1o=XcYA5Pvw>JU){s+I={MGjme-oW`RQ2Z4- zm%Q$h&!X8U#c|eZKb{_zz0a<>NX-MPV`85RJX(a4Jh&kC#a2@Joe?+OHi7jyyFPlX z)mfw!t>}lh_`@eWVSz;d>2cPVEHj(M+T0GEW7Xrb&v6@P3}t;uy$WfpHR=4a_WRef z-ex_N`;i}i-sCfn{=&;T9N}dPPwS=ePt9Q~unlsD|6SlA@fG4h z-teWc!!QG-{L}S!!J!xUK^`o3mKTc|@i1S^4#PYvSCh{?wuhH>wB=>tg}@Q~c90^s z@_(;K$Mw8yoet_z5A`^Jdi;s}U9##i{6jrpM}a9f1ze-9ih69xp&szX>@dvV>hUsL zJrED`#q6+}*}H-3ZQ!w$Nw!A3b;i~ZTOX|UtgecBTvn+^apgK= zYbeKh90rfD#n!8$9$H!T!1{P!4`2qi0@n|+>VZ6RtVg&4^Q?SfKJ#Ql)FTb`&_+F; zqaG%xM;YZhVrxY4e0Twqih8upst0>MMj?Mk!=WUMtjn}2~177z2q z?7V+I+F@M}0!LVzPf!Qz9f%qJHiDz~&j&E+>8M8;tm~y%v#90!=i^YedcY3DXl=&x zaUAuC%HjE7^%$$P!!QHef$L{EJRgV|@jNXTsIbE@&wd*(zMheVId;`*)?}}9+4t2x zp~=Sn4wZf1P_4H_BXxa-M@$zS#3$Q?7qrbZPu_tk4-bH!{${F z#m{qzs-6aT(0FW9_b#2C`Eaun|o$8&2%eD?X=#zdQ}Rcq>HXCptZ z3t7R+CpFpLF0(8kyjh*pdy&^`>6yxJ8lQNuQ<`2oczBhm@BfBLjO1^cY?T^G4I>|U znr6mMU8q~Jr&)sngPx=nDQnv2oNV%zQ`OCyj0uiAq^)np-<&?Cw1wh#qoOU=n)O<^ zD|=skt!6;Yz>m)Wp7X)^5vBV1|1^v2Z_m}Q&!6TG4no`;0NSEb;%6=uwJ3o#u-S^B7pP#a!x}TdH zR;|hQF*Et~x#?r8>fZNeKvjDz{^9GIGyBJ$7vqpdR@Z&gwqjYa|Nn0Ddmq#^<7wU9 z$!*%G=B3Ju>bzQ$O_h*sepzb=ZO|1Q<%Ht!i})&y3q$@bwhcwVVXV!Wv}+44%4 z@_jOUubj6#3P>5hpVDO02&wXfy?@)SRZ*AyK3-?NY+&AO|NBr`@7tICteIJ51unKs zlkJt>p+i4wKL0fCAMJhDm*?}9nryL!pHf8e(-b_t6!|wiNxqw!ljp2iv~m1%a_0}%v&WLt=>o8`1ek-gb+s1x zHE}1et}*0ZJ%wCd+mdta1aew0=48aP3cjAh&VFDb z$*FuIIs7`A?1T`qJ=UIV3ofLM6B;7sc*HZFTnbl$otMB&rwvydlTDmAt-E%NtivB6 z_uI(pHDX?mc#PmH5O#I}<45ZX|3zy$9HLdGUBC}C-e#{tUT?^;{I7^-EPQo?ozuXi z(TakVXz?ybaM%z0Kzr)iX5`fsF-IbvHSqNmcDe!ML{o}%qSz{RDMG(21^Wb(|EL?} zdto(s2FYoo??Q524lOVvb8=q3iz4(oQJ8)xZOe$IEki4ikMn8rIC_FMYLp?DH(kj& zID?!^&7xpm9bjJ3*7!5zH@+}=t>{7SJ$sVt(PVO#K?iTwALLZ!7xEuH0d{5rV?o}= zlgNXMA-C!E$)yGK>*hgwtONAI0=FTaSLEZ;g}hc)116o^cDRzuNJDb!GmISkN|ODk zy<`_#mOO*okjJrV@U;YXIsns@oH{lm2lGp0H?1OV(A-M4%`PIZD8$?b@jQetJJ^{7 z%r&yBslnxnuR53)wIRnXB0Vy z6h>ZC5wjKIISyZ;u%ib|DO%A?pv4btz~Kq-16{Q$Rgo9;{bFk&o?Gx`20P1u*+5e| zub^1|9YxHypy1~_$Uo*J`8C8^EIO7pzRD!mOHSmn%#NHd7o>=Jt0-*2KHA=5F>Tpx zNIs8=JoN_9#@_SDwZ|56(KI6G;V~5aLKm1g@~?Q9{Ps>EugmwyJur>j^z_K3Q&Vy- z?LtnIrQ{zw0Cv^`6GPrBi<8G(f!q!`l8a3$Ih}x}nwL9t<<5~`qaN@TLtg2jz(BvP zWMOiNSx8PnUgYq)IoZcvhkl&_Vva;Se(?1Mc0zzzNlxC-Q*$dycBzK6VNfX9uDe7V zUmGIkP{af6KAQ~K*#=BWvYQx4ww+$l`pH_f&K!Dkm-ZvCV~DvA;<*N2ZDFS|FmGs` zjSsCkeT-J6HUdB4$Q{o~>79r<4Dra|D++eX19O5_Sf8aO<~PA%b?|cvx%Wn14-j)p z#B&?IYQau3U~bWr1pGCST9fUk(baMraOYOfr5aY;cbdM$I9i(zUAm>SsD8 z3+WE`2ffi5d$6hYI=R1y7y5M>CsfLa;5|mJHc8Z|$Hto(tp4b`&XT^b(uD$%n*8b) zsU~|~@-5suyceEoIRE%Z-@WFIUKyAyY(Kq)X-f$=W8O$+ui?FpjajQxw7EiKOJ|0M zQ%hHyK5UFz?iwm-VSl^f_!T!egD3mhn53-6Le`20ceF_`yXH=pR(vm8=edpYKQj^m zDlJ#DTsv{dw{Y8)>{_BxaT&LN(hTluuN|z<@#ULvJ44bH*X3U(b1xh})(893=ro(l z>EJXo-mr1L+^Ii=WjaszVh>6;zgX)I8{^vFugbM{P-s=@2u&55SlpOL4t(kM2U=*p z8^d`TJ93(hpE9iO*wB02ozgYgwWQ6T3car8_hK%xzF|`DNvv&r?k|Ow7`xW7em+@Z z(CrAjW{2Uz^yjRVJo8pyja$fTu)cWc6z~0x8{n?cf)mG#4OS@hvRI$nSF{alB`rEA zKId_6MK5xu)Pjwv9+JYfC+egr>%iu8_7+%^9iw9t$8$^O*|9N6_e4w1-1WMoLc7P= zG1;$uMoF$^@3U)3sTVU@%Q;q#Qnc|Viul+yJ0!ZpJF}MiZOQvuNru*&Em@GLEzvsb zWD*oGh_AeGYRlsCDGbLB!#|ScoMp$Al2Xgh`K&3fu+PR@mMB=HQNXsd>{>i@)7lKv z`Q^D{y>K=5#E9c!s~_L@wQg&xf|BXG|6pU>`k+ise(?Q%ie8aADf*JZ3Jp9quRp+A zu@1PHwV|vpDdDfs9Awwxq2Jy}#`TR#V0|ulxwWDVFY~wWn&<>Bc&nK6ncal7I;nMM za=#C{!5Q`)r5Lx4RBHYiE^W#B61}@h4LXg%8@a8`#5;|B5&hzs1Rd~5m1=ukJCV-b67{|-rKnKhaT4}vX^73i3dHEV> zez`%@%jXSz8NiMeFcWyWh?j>q=jHoid3jn1#0+h)*3;k%+Fj$JL$#cTZj?PQkA$|=(T%+P8f@Q3 zJ1`J2Lw9Q0O!$I^6tfeF98baDqig(AO(Xtkg}cbT8uB`en4tyd0UnqyW`|+Q)!?5t z?!-T}ki!PB>nkBI#Izl{UHf9-YclK@Dlva*@lQPww=MLuoPI;@uaOt*rXfzm!+bG2 z4D+nEC!d)D{%S(IYch1c;<_UL`C0XV4wj-G;EC0v=2TwRO%Gh329K+=>H)4s?o_FV z8!#tO58&VY1srkI*sus2->(TOX*s!VbgySsq-Y=6|aPI6*wj7qi1K&+1t7nWM>o( zwITfW0+-WJJGR!?I>H)}#r*+0%Ype5^+*BNH^3vFm6ZdP>+${bF&(}dpsodg$v{1z zBe)#TrYCgQ6wgN-)*7pa6XHQ_dliPA@k)%BUDoq~I$T4o?z889Ghz-xJk#K7fYOfQ z`H-LnK*+7E&P&4r3F`(9D`|)b> zy(9XJCfm?-ML^P?i}x*C)8avXYdL)`+ppDn677mwL1O=BZ`GP??WW&C5!IS(|7<1a z_jCNU&*{&j$u@(17SRy3#?+c@YE8C}pTMGQ&sVE`+isRw{}1l|5C0FYLU)R3P_fTN zf77V?)ZdckG?&-0-27qu-+YLlKXb}aoMSCJ#8%n+cK?1aKi@8cud|$`yO!h4S#xSl zHug7cUvlQiW)6d*O*X}@bAbG9$kgg@L;q+%j3GTMN70x#o?9#8v(M)?Cfa1JT9Yk1 z8~Jfv$O=|Ismb>4?br&!^Zo-@2OHdyo{>zhUE%k7()23UwPx%)tQx`JG}+3@PEOLW zx@nqu;8dSAPwmXw7N7WH=)nr66a5aKcDyY$>$J|gP5iQsX5F;{>?>`3|D6TVuGzRl zY`<51s2NZ*@DnkB=Unl9m46zt`uYDfgG`f6{rdcAj?}Yi2Gk6E%z*m!`C~r5U9W@` zw$++!N`j026P|P07yBpn)c1aK2D0zRWxr;7?M!n`p}U4Qr~Na<9BTfz@5zc$e`Yx`*``a&u9w6pR*yoPNTH>V9r+P_-u8$IRr{=cbRXs(as? z0afj>_y?bzQ$O_h*sepzb=ZO|1Q<%Ht!i})&y3q$@bwhcwVVXV!Wv}+44$P{%f*nrWFZc@86~`iF9DU zkJl{{5T5sF{$0qd_wAq53iy#Tw#o`lY}wD>=DO0BKXT09GPWP>eb<-gTF4XkXm#&l z)~!ePE}hu@ovC|wHpWiNZs_#vM)o$f-u{p*r<_)PN3 zNLAR`(WD-QoHM5FkJnOwM^D-!^d!Gd0p$JKn!Lu1BTw({@D%|&>A-|ip#EsuTI?G6 zy)Y*qV7PCP$fZpma_&?Wd8H%fN95O;gD-#B=?=^>a}beJ}FrPj3CR5Kl+=vVa|3U=GsU zdA%sMQA65o|AKbz-Atj~=F;|KniSC5lQ!RWCcmy_$;Zi%yyLC{)0HB4ZQ3z#E``(| zK->1uCjZtOX>+MZ2jaw@q`>p^bKi<8UT z)8xEp18u%DkT(BngLu;5Ybflz0%i=kCe0z|CKJf9Xc@8(#C+G?LUclE) z*f9iV9yt^lM7EDR()!>&;AanV4?|w75c5&QbA?>y6@ndoV0x0ZX(3t}aDcqy$Ah2O zsQ*~x^$an)BA!I}3WA+cz@*aLI6aE(^Okns4Wsa?w<&aMPYSA&L;)_#Xp31D^4k(k zJ`dB$r{XGLic^H$G}^Iq1cfYbK-+(BNB%AcX!8hL^1b6mKIW&$`>$%Sa}AhT6gp%o z1(kRfNIxx>^)4ulPlUakjMhzy9c6DiEbZK(C6-NQCmgMg`i?$px zfE~o0X$qag66BtGgxuCoB$pHVZtC^V7)ZP+8cq1?C31)wn>;Yj=?2 zKq)yC3MId-!^rop5&5hhjd*O~Yc%X^00ugU1D4Q+c9vvQl*s4NU*tmr$m>;Y#M}?@ zbc3&6u+tZqzGQ8GhE^5qNpL#+@_8Ei1BtUqoOw8wNS%vvfoxAVeL5~Xk=Nz#lk|E->bS{QZ9x+mQlpyY!TZQ z!>UYF;QpH9A_N=?7hJj@6&9Ct6)g5n5Q^>|&JWOYYQHEg$cc+%NU>j0hm_MR} zV3GV>C^LExZ!=hGvh-e=hF-&O=`47*(XYOJeJ*Xo7-9Is3xWxES19_}iMQEa+a&1z zf#%~1O1O0E3X-nQ?AK_DLnxPM!5=Svn(yn<#boK>3(fz$)+>V_ z3^zI3dwP!#j~;O2N!>{>E;-bU88w05q|TEqDAdn9%Hook$S$Bp&b zq0{JDyu`jCesQEc3}^Ou#jYe_mWNqu+r`$hdP|EhOWa;pU48t8*veD<(K81E1cc5Zzok2!H2DUyy zb?-gDD=B(ZvF|M@UG#u9ckG-3FL3iXrxv@}wZz0$u_km#doh>LJ=({uj+dm9!4Y3K z{XjNvvP(BcC^&0`$xXYyEm~?1Wn+dO?bk|r4y?k3Zydw=;$d=gb7qU--HnXa?@M80 z`Zi>yn-HS7M^fP41xc-Y3eH-z9G1c6x&8%yuUo`4P`6&q@e=nA#W`7gDtFqg2e+}z zWH!$ZJ&gfR^nV{)h3nr}p+%zKO{mDtaQTbtc)2B;*D)?$o!fS7g+$k~A?tIuy%y@5 zY6fzVmR4LVzlogN^x2$gNd-@AKKsEfFCRAp3khzl6(TpR*i8 z65kH*Ya^*Wbhh@QU^~4+r`G8WiYh0GDl?J`X|P1Zvz7~&{we8q#DZN*mIf=#q6|N#LEU<;blvz^0I9Uc-d)hUiKRL zXO&HPxdC*inxNmm4(woV3H)u^&C3o&@Ul!9FRxIXmm5RFsWr5jI>XRp@XGa7BM$RJZLSTSv3h-Ru0fr zi$QD|_WV;4pK};U-wFP$e z0b_=G?9Zx4COCp#m~lDe_5yK7A)Z$7g_yRj0A?rZ0p7~jR`O^89j_s&$gMhJ-hg;Y z!56g3G8sk}^>_oW=YU6W{82qBBA#CGRS zkirhbJiT$8&pg;4Tw^^LCxN37E?F?dV^M?JFY zQCS%`iwXV|c3R`v8C)M+w*!xBz>%vm|H_RKceElVS$}B3jZFro4eD_KT!(>2Xwy~D zK>px?<%YOrE84;r*2}h)z#zUyw-FQ8UqfImps6<`Ns*guhXdj%316s7<{e&)jRQv){mLLtuMMM?LO>>+)I82dhT{^1|AvTp#figD=!{ z(imW{R$_2phBJ7C7G3#Ps0TPUh(OG!?GQZw%c^HRAHdX@g?d~AheyBG?JZSY%i*H?jTP-EogThxodA(ZATXYO2;``#L5+zAL|<Ae;!S?nN1jjYE8CJ zYq5#XsmRmEtM1$POsh1xdbe8ZdV3|xI6vo6)VNfQSIpyc_kWmIYqEXd;{SRje*VlU z2yu?J>=0XJ@7w+Rz5IN;48G2CLEOg9oQ|wHwI-YRw{CfDb0RaRG0`5IW7j!hRL4xM zR7d_vE6*Oq-!$0@9QtF=XrKG0naL|M4n`g`>utQ?^_t=JOlK_~RjhES zd1n2?Lr;}3e`PkTMpTF1ZAN6b#jeffzDZXdQ}@*js2TXN8NhRHl^+qRpZ`y@sQBA+ z_3QJeNm9?M8BjCu5d-Si=a1<4h8?vgTQ+jlI$7Ds_zzrW-;c|F&Aub0)@1t+EP(Hq zqFR&fTX8M!(TVoi9-?@%F*Yx@Y@F@m<<~x=T9b`2`+;L+@7w(QGu1gynru0JE@ql+ zlG2@2_b;V>enC@)$ZH5H`<3~{^q1~?=9k~x?5OVN=7v*ivVF`>*sepzb=ZO|1Q<%Ht!j!HQB%w`%EtCqUV*mBmmW#YGF61f2`&Z2tFJ9sOTisnF=a*%_k9T@x7?L;J|2|aK`}W^|*37K30vFr( z=VRWbJ7q5TS@Zd)asO!VyS_Z1uheAQ({(Gw-t0xumJcbi{4Ls5^EHKc8b>>3_)zFh zD++1WlY+-Fj3&j{sk0*EC0pRBna=(eZZXxCih-V6X?SdUC zFw@A@&z2lyMie~04h0>wK<>d57*P%}2O^$e_!ry--5;kFbtcNXn-*-a4#=F`q69cV}8vJ^^- zDL7>;1sAvlJH>#RNs$!~)2?~5DLlRm?MN?Aq4%mG|9%v-Y6)%M+Y`Q;z|Lu4)>4F~ zJ?(5;hr+twp^z3$DX57pZ3|yRf%g*-&r|r?4Led`cnX^oPa&O$Qc&R~6nN(#1@x## z{&NRW`26CC#~;2XQCJTSnAx=bDfGo=nUKFh5^Whag*FczjJ%E_=2eJi8GJ2(oz1{> zq^)uDXmgcAA&_%mY7?|J5^+Gjr)L%luzD+2&U_a!(g90BEN6dDJX9;{&A@>0VfLTtf zZGNRa){805GJ~R%yHliN9on_okHSw5q@9HeQCRCa6mnoR1;4rvj5WnXhf&lCTiX33 zns(LbM&a#W(~e2r6uPk|g=kw-aNnx1QyrM~6glw}?K(MtA}S`*&Zb!Vt)nQUKT*(C zZwjh52fo_F&N*NvQN-Xjw9`G6!UBd-h|M7ivR+5qfAyqobOQ06$(pg zMIpYAD5!sD+SV$P0s@W5|3n|eoJipv`qR#4WnjmRLi{u-$f5%U9{r8{mqgK)s9v-= zvN`gaOFJf4p)hj^h1mWEJClIn$iL!n+C0UF{2GRk&tb%CUJ!YmK+KyF&q?^ofSu#O zY$IR8zT{PSE4lBO0)8G-h)xj-x>gV|-$Fb?;A=YUBmxsmZVl&=<3a}temx%iSR?my zw5`qWhoqKFEp#ni%(zXc-+=fMl!gBio z!jux{1&f|NgzD>O@i9gEnOt=+Z84?uS?+p3yaG3J;cB6iUv)wM;0mFjMqA#wwXez5 zrS>gLKcC#7$S8#-2UpZIMJRSBi9h*r8oyqzD_>#ZaTD{nD=nrJThpNE_y@Hc_x8}W ziG0cI@rA4QFtOe@qvaX-mKIxW*RwI-O^23pdt$65OC1&ZTDphkR&P77C3wV~RV# z_1K}%(5hF2FU}1txRKLa7^5?M-Uz=cnr|hAJ4`aJY_MNpFJ#&HdRBFU*fqDgxw5U% z{B4th6EhWKnnT*NmL2tqwtB{m4%Juol>ZuBSzOuZfz}1?`sl6oH<`UL>eBfHSN`5? zE_CKrhTz_Kdm1fom#iNhaMPfWhmr1qwO1A6uC8`U3m^V9STQ4_?u99KwdS{q`Y?*R z7+gun-e=dkW&2ukb^+1431{YIpX2<`n49eJcNRJbSNIOE(pp|}oZFyznOBC6Z|5)^ zx8mtKoy=kVxs^4ius+|hLX1f<+p3M4)Y0IEEH16T%A~z+;6Nkp&%>m^C%dplqvfR? zp{zCjrEJN%8hXF7Yw^(OSEICk=gL*YzH#H)L-Z?*bP)Uc<|%VIhuAv$OP6)1-oeuHB%zP7<_#d|nDK~W3V_idiMoy)j>hh1}(s?=hwUa*lZYqKBR zpKrR>bJ?fR&|~8|tN$9#rNk*9oR#-&5nD&rZoi)8$at~ONyjMGlD6CH2a?l4)7dze zc=WK2mgaI1lfBi6DA$ooJTgnt>48GqF#DW%%{4D}T)TU%p{#EbJO}!IO3mEdHQ6>8 z@tH9WeCEX{KJ$eYFDnE6r#h>7nJF}-dN$!@qvCnl)?@R_%7K%WhoRF%f@ zGNVzvtj$7RHUN5H6QScZYX$7Y0CSzsdDc55*&FT4_3RM3{|3C*kl&>kCiAMqeh&tG5%d@xLzw!FOA zeqP>l8~BMt?%-%aH^dCBx3FXIH6M0XC^1u^WflajtjW-!o3#kJKSN&Wh#CA|FAQH9 z3On+kVE(CT5T9wclh2HO&Szdq<1=4Y;$>wKXPs2UJr*%FSNfam1q?Vm_KwfI6AV2t z@KyvmThMs7C_09t<8&f}?`S|1fgvikPvEjKICg z71+@QW)SLu{QaOEwxOTqO5@VFEl!A4KqGXV7( zcN_5xg)a@*F$M-)moW#|d%+`g%tk@GY~pU@1zXSulZAo1GqaR-nkDk`sn1alU?xKc zZ5GzSibu%nEMi8U*P(azTe`xIJSdcZYF3udbgay0#`OY^d%#gC^<5fc+P{EnaBs=Vyg_ z0DBACY=y!1Z?Ms`F6tpg%$E^QANWE(dul5&Wq8yh7Cdf7J#bFkhP+G>b5X>D^>PL} zdxfEu$S_mosK*X)XbpZQAa~^Jk%pKF@jx@~w{r?RtY%MJVLw#)diE8XY^Cv%sMcf? ze^BJy*1#}+HWp1s%YN1}&OUXhHQ7GJ&i9{VzsF-I`+YuppHduWejd!W`cN~VX5b$) zpw?vj#}xkb20o+7Hg}RDL$xN`k5On*LnyasL@gn)%?z)s<%UrX zWT|RCTGaD)n)8kofE*gdJ@i#^) z4kJfU`4A>+isRw|KH{458nYVA;ovV3tsDd z! zU;nxq$DW$bi8wwGUoABoF~_df`coEW<5mj?E4MLM&B$zNsN(;&QXNeuJLbMkFQN=RW>tMB{w*BZrJw=?U;#&BA; zHD>R+KYz4oPo2y^539*+GTZHYQzr(;uj-q$x9GvX?+AYi-6Hn;dUmq!C$f|6U8tTI zQjD=S`=Qw9c=ztz`~O2Y`y{)@+&k5=Z2h9yuD|&5Gq%6jp8AGw&VcH=68maRwr@`T zf6akflkHnoT->7*?Xx{Z@nmCcUToPo+sDhVeMVCl{+un*Kf{T!woSBrf6d0)lsv;i zR2*#znkd?)wf6;P4ZX**K8s(plf7kgpNd7CWA`v@ejeY#rfPg*uHrb$M?Be>7z1nB zczRaL=KksNrFF(zmm~10)#ti(s4i|L3CLxV4>?pOZP zyu|yzbl+3F?_0I1`?qP}LrbziTmbTHQaDKNt{h)x?@5(LsrpgnMRi`S$)?K4*Y)$eo?jQm&wrQdbDQ^! zG;0E@)%X4T2aO`x_GRi@cI%Skc1wGU4ms|^z*c=`ul)xttp*?VT{M`E8T;&;eeVU` z9QRn*I6D~r{ojx(Mn36d=_CA@NxlF4J7m#A$lbUQr z0;TTaP56C$Xve_1r^Wt%t<8Ghe&J`$+bSz?v1OWUFHY6&__OBoPvid4-gkX@K3}QH zmK0cx_HDJN#09@n!jV1{KWsn6Rar(c&t6jWjcXM3sxL+LTLH{e+H1a(_Qd*ALia%w z_dJGTceSRNbwwz8>Kclg)rcZbwxY!O_kr=Ggl!oVKVv<`HEB;VFBVdC%y^1gbBH3R zR-)Yp4#Jm(!cP1QM~WL(l41=ik8STFLEA483o5GJ4p`DpG5c77#GY-DCQglX1V4!K0x`-m~VE*<#+VNW;g%xZ| zG0%+=Gc?a){NXDDb{YT!y|kPoc;G`)GHq-n462 z1mYP9UtM9x9GLMGQz1dO3T1#9LXiaq zLO;xw!fP7Sj!t0|)_gQ#X@;0rBc4m}wF!2n1LFsMy+jH#EJ49%+fmTK6Ucop@^VGY z&nR+WVfca$U(G*&F{GfIuPD%c1o=0g4}NTr`x4|e6*0RY9!vOwX5iUS3iOynn?o;= zcSaILZ7=~p_mKNAKv_cP21#v^V-!N^GW035R!3{QLllGmE3xDyu1`AlAR;Jc=4& z2s>qgsYrYD=1~00D-;*&K(UJ(QB3R|4$#0~1RzGlx=i;YnDJmbB}P06n+96ux)~VqSoF zZo*f8*l7yPLW=yO5AB*UguH<5_zzibCR;|UqkymT7 z<)VZ3Bk5VGHQDC$Ie}u3<;h+$cdQk}LvQXG88z;EL_7PUL zTP_T{UQ(#!xs7j_Ij4ntSV>PX@5Qbfg6IvfRER;{R;T?L}nDBS+>JBe)R+w11zA(Ul zmeAhyq0nHgyHLsH0{`fFJKn+Kp2_7Z?|;80Xw7RNMhHkuYTn2j}#*4WNkc5r29IvAf@P{wEJ zW4jikUF$chGg_hbW{e1Iowjmzr$ zu$J?Ad7|Fr*CQK`_ZcFo^D2>z`Ocg@wDF7CtrXXmOQ$K?ZQZR6-tJkav-G46>w8yQ zv5vI{r;cqfx@wdlc|NXOeYfjdj9N<;bK9f0>PXBD*gQLoth|cqhZ+0TebK5e>uXPJ zsMNPhvU=2byXPb}#twspqdM0;5;2lpHy*D!hO51$k?{`66z;RJXeKZ+at+jNy$kK8qD2dXlszn=CU7L zm ze%JFY*?)#)M!R8bj2&FtbWeT#=s{dCf06ZdUdrFku|7Mv6{U|V+BK)sS*y2c-upcU zojHGYVPo1Et#{YkFh!{)*HE(_CvgkX_As$xbK+5}w$a%-H#hCoYg2C)SEP|bD}@Vh zuPx52w!U+WW{P7vS8DvFuiv4p*w=sQ;>WIi<}7Wf<5Reg#M9o|>(<+aY>d-R=;f`` zBC@u_%=0F}Hgm-HXSr*#nGfeP$3O>ci9Mg`JdMu`(BU(qs`8o14f)Jd(2%-v6&h>4 zz(nwwb2RwOwa|<5SjuMx_ka%7Wj-^lBcFKzKIe5ULQpZP|BujxuV3=@HS_OF9KXJGvJ%;!$LOj84TY|RjlHhgu1orEk* zDfoh&SJ0s<4XrnAXi^zKD=vy@XI+G^>agPoj4AvS=4Ivo;$`)E@iKF0iglfXd1J)f z4)Gwjo8GXq3z#XqtO2mya886C*+Rs6Y7(D${tYlDh{qnjl3)iqYTXL)ve~%yfyPw= z;=OVSzMyL-gJxFIH;4y*%%KG~5&Ba;(BZmLg_r*hZLixN;75X(S|Bgzp&3BKtm_Q; zLVOAKz?6YD6?i7_^Cxmy3Lad>BL76>HWG2;`qTpWLyothkM}2PG*_3;w3hLip5wp~ zaPiMa4F*^(s@eo`e zhd=1K-Hb&3uE-5~U1gAG0O}cxGqPM3#uB~;fX8HT1pO{;=(-skM$A}O@u+(;=1xIh z?pA;JsRXW}#aFL4IMPD?h&6dMVg}b|*27l>>>L1Q9_mp9Tw@JPM7t34r%<~KzW`&d zTpy+3uU=2sc#C@M1=m;)3CQUR^0|d|Cl!Fe&7hWcyOLJ0_zC+dADl7UrE@pQ)1i-fa`7Gu`q0PMgGf>TT8^9 zf|yW8mp_zt7$)K}xZVeUsPWD1$bTJjyMwq<-+)l~!Wmfzn7zQXhA-HA1&zbf&_C10 znl^|-%smhf@=opo4C;5w5`LgDSAIHpv;ap~*IiMwWN6E!4MjYQ;VTe!qJf#l%Z$Nu zS2-`6@DdyigN^aX3)+D<@r*uS17FYptk(&cOwWc&Wyt39e2_yPvhnrvS{*1r_` z8BMn3>?;=d4q9)ivYoEnUNGIArA3se)F6^-DyB8wYZ8g`Vrx0H^RdTUUkkHOKXHi; zYA0&vDDTSsUn!SmcggH4ZMT=7BLwe%=DG9!TGK3hVw;-S9M*PDjo;5CY!iE^ZJ~&JmBV4(zcb3>7&M`bMM=X7OSVK z=_S6dNJYSRYCmYQ%~8A%igBqm*@AwbxpR$Fd=6Awk*DueruS~dpDSujHU%Z@b69Sg zSnoOemtBaTKXXb;oMSCJ#8%n+cK?1aKi@8cud|$`yO!h4S#xSlHug7cUvlQiW)6d* zO*X}@bAbG9i2W^HejZ{B=~+37w#D(>S`nXpKDRN^CTrE2Y}wh!kL%BAvaO9Q**BtJ zle4Dr)2cVwBE2(jZfJVi0_n}clk46Xk)RrZswP`w+18Q`9-J8{{bgIRjFrR8%*JcZ zpWC953Dacz)4Nq)v%hw3tJAl5pxMm874F>i!>aboY`Ohbs)OpjngKNfKQseoswKh2POR?UE#0aXUnug|KCe5<}%lPw#wYE8CmWc&v%*}hm#r&^Qk zKT!Pdo1$8i?OX9J?$L?%*&d>JvN1Lr=3yV?-FY) z*78TH^XE0$a`{}G^?6x!|5ECA;kUi>HB40ZD@88;Y5S%7p8wR}=k8bC&&>_5)@1vb znf&_P^s!ZS?|U<#sy!Be+qT)*w;kVWp-7`v*mn$*yw_;^-tnpW%kO8?7DtH?Y-I+5&QqOHtT(R%bzuGtE|Aqmi_$I>hJtt`%d5c^8IMly2Rdxj zj}E;XNryBHDOLA89US3JDM>3SrAuc@e!UlV;(+NzX%tF_dJv^fC`AWtEh!~2hEgik zpyahYB^zFcuQ=El0E`)>E?-RtH%+CK2qQ{9GMti&bfctxP3XYw-w@AS_|k!$VoFSi zA0>NwQqt;5bYS@<+V5A3_LrH8nAaelQ}ERTb{YZWOG$m}(f+3;XrHw!?d=G?xLKQ# zS6{@u8S(6guZggu4U87;t8$GJOGi)ww7=q#P9yh8$jcTn*F!wR;Oimm_yMz<;!7{0 z==0AhvdaMQGYGj4L|$DHb4SF}5WYIXPCPJ=DB>?m3OVcn4)21Wi^%;g@~VrNmm(g2 z_=<%c0>+hmq!sAIswQ;w;#xZV!h_OmWOQiuaY}V>Lo3Qf;m?TOKc}541rcuhx!<14eijrIOpd_1kN~-COcoN~O z4eS(AV$u&#^09lA6uX)ZL~Ww|=NHrdb{U9S5Ah6D`nq`>m`9Yf)|?LLjiP;f7Si5@ zeJL?G19@FS%x@7-3ViK{9Xnvg(Z0?%D6uuP`?^h`xObs+uzNw|RR%H7M?AyfD;#!K z0h31Y=Fr+JV@i=r!OgWyN?E3XydEOvlZeM2zJ|fh1Ynv{#Fl6ZExZ>Tt^hx?k-I(e z+JTs5hzHt!@0?*L1({FTIc9U*LX_1+nNrYs6?sH22rZ?DIE+fNe4}? zQOaXmU{dJFYmN>FouITu?di~xRg@aIf(}0Zl@9hQO(~adQOeo{uoDVQ8l@#^(4jM> zDD_DLO08Ul4t6<2DSjgT z(+a+3!HzL7-6-B|8^w$nO_3Kf!H*2Nzd&B+5OW~nv4pSZuyYKU!L&l}R^+u4F`q&_>nXnXeb~7G%v18|`C9xNd9@~+T9fUE(%1TtwD59^MXky9gK6Y_ zUX#sKgX=B4e*Ri`HrQWySZ%71k#t{a%gPJhA>)KeRd(^4)9(t;M#c$G+SL;7bvF_+^jivNiyswI z$~y@W#b*far$dA>vGaKMRYt-?4t6$V2pI;PaNgZaI5MP~u%~{i5E7dzxGqT-M)q;z z-Oas(jMLYJ%b690v%h)@M~1!<_MO}yL~0)p0)5>Cr_)x#$bG~IG<_|c>abck@(8{v z#|e8H9u^{Xo(myi9>QjtC^$?@7XCDz%_rZPB_xDD5TdPn3lXK43Ly!pLf|G{V4ez| zHO>henoSp`RF37}6-g5|9a|@O?>-~AU#u^-Ni=O-DM+= zMKkAS)xZH&L{OBxcCfvCG;5*!zW!=f?SLsW zU-f{EYkGyHUpUMz&Kk*zoXAjQJ?z-j(6qi`(}q4q)h9O>->MrGQ}~E2ySS_nGaI#0 z^3_|}yvF@n;+SSJxZiD;(T1=yCVTBlvLY|1NxlYqn>*CB660nYO1NlnMtwqhG&z32 zz|f(gp+a@LRr4C9AN(|CZN9fjlVZD!f=#|LvYdUd;o~|7n+Jv_X~xBN`SM0OO^Pb4 zjmDSSXn6k2z(zxdjWHV#^V4TMgB>^LnLYGQG|aC3RCAu8ujhn@k5>j69=ny($IEDI zuZLo+;ZcuJlk*2$;>HwBHC-xSH!PtkPocT+ZwjZ`nepnym0Nd+Ad41`C%LHjTf#IoWW_kg@`sdtrtB zzLC;G4K2>z%;{NYJl?Z~7&lyKZmGc;nih(dF6%wCIGZ)yG<`x(K;a)?8%nCF+om0e@RY%)K^Y_i(X}V&*Y5qYvqh@w#ylH%F7uI z7RnhWR=`}A({JaK(=%{9Kl(A1M31P-9psGKF>;16`j(lZ?^5&1YMzW8a{7B+aBT)x zikwl?2N-WTqv;_z!+eUI!AhYP&doncjVTu@XVk#)24&@p7F^D-#JTO!GpZBL6?#hI zJi(KLL0_y^i_p95ot)8qzML@-{ji3kPgQyJj}m%BEx{u&?a>d+HVpmC(93K5_vjaQ zN$o2~vlnVHHIFUokB*WvzI!ES#2CvN8_~zCPC2!&rtoQ57`5hs2mP}I=6iGWq&gUu0y1P5Ds^z66iJls5&Y zC~BeaSc?(xkNUz}r=u7judbEDBQWSa)@q-e(asPV!PCGw@CNP*b<}!9tp@$onD)rV z7FcIs$K%?VaZ2qgM>Ec80d4IJ)R@u7<&3%T5YrqPMXS9V_k`w~YCYXC--1VAzV9q& zr05|>WZ3}oWLgovCPFigi|b=NGzuPIGOM&j)?<-jQ{;nl7(9aC387_Yi~LI;v?kv9WuHO|AXPJICMjYxJDX`16LJb9%DXiFdw+)@~0!CR`8Ge zsP-;oEkjd&Iip#+ng^Kl_shW57+f~U`Xn&W-SilAkCZdyhp2T!%_A`7;jzXG)M|^2 zFb|gKt=8TGy3vcR*bsHC3Y|V+aJ{!eHtkAcK7!#NUWd;|9n7uJBWejAfoYGPa<=P` zV;N+G{AcWdFVxM^3_UG6g9qo?CgA=^MAo=3V{k2Og!Y{K1HOc2OI*|4gTPZ-jrkt; z)y22SF&wo}-xL{}<2q`O`)1%6buGbj5q;jOphscOd{jn0@F+ikuMKL=LeEA&@I>Tb zlvR&w-p{CW+a6u;zYUA`x=z%i2R8V*1AZPs-8%Q`lyf{^uKx>1{GMS`tYTYA9B)rn zZSjmf^k+;?j~x6Iq-+{6KYdNce(ptl4HhfDp5$woYe4h+tm3?UA6BuSmnRg*M6cLs zSU>hPN%TOght&eBSnRNl#=04+rvI7X7yUU!&orS$)E0GwH?e5yt6%-Gf2#owF5TPM zir%&&v)@`YnlzZ=*b()G53$uOMX)1QvE)9kKBA*DT(gsFtHI^n=7MN<^CTd$605c+ zTb^LFFSQB$y%Ny&Wcz!~$6ul5cY3k~?#vNonez!*N5@jzlkKmVq@QYPdS3l>AkR+T z-bi_dKl|k$Oya zZBMpe-c-8cGjpj9*4?{`|0oyxhkpKCpVN0rd_ESRi^TR9%X=)pIFReb$HqSQ7-&9P zFBknkaaVX2>&F(&m}XqF{TTLZ9{XR_`I?%)2A8?a3zomhF$MpF1%c zPJtKupK~7f{T$TiV>B9We(KCWqFZCBYO8pXlwa4u1v{WGi@xD2a3Mk9_N`?LEfHh ztnp$qpOS<0ENkzqd#O?nZ>#a^EG9g6D$PUc-r-pT4p@bZv3;(`bglfSrJ6L89_Hn< zim4j0C+|V+Yi$DB1pd|uSWV1+_ca7+@BiOUQTzV<+xcimwFzhw_;mu>_vc?{^5-1U z_GHVItLArDavl2o-H$yN`~0)D$iEhGO84(v z587+(Q^EZsk869f{aMqhc}Az<7tatit2idcHCu69JjeT5&lyGUgx}-R)E797R&7r< zF(ZF$(PXDNOXR6p#W79JVk?f{{0rw9Upme}QmMXu2*06QvnGBdRPg8LmPKlQ@^dks zXTBX0;hp#SrKa~--shF5@l}>T`rPxY6#Wg7yw7t#1=Zy8squf?@vrr{>ED*y-_38{ z-eY^7Ic{}&Qh&Qfr{&hpL+AASwx8zpU%ma>&q4W}fR+<~G%ugmSKeImj%$0etzb{emgF z|742tY)X;a>?yK|Aw@j8idr_{Sxm9^Zz*PM3`IK)qNsj;6xp{8MR?ty@blIbKFJ7r zuASVy_4W;IW%{Gp4zC@5zW*;Hxw=w}hT()H(s4iNNfj1@a@BBez3_VHA1k z4ZI(Pukz4b4SL*A>jHTEfw3a5i%n?F(iyZW-vnA=JfGtBXHaa!28xMUNYQ8JQgnj_ z6t&ZeqGlKY<4G&dxzqBQYbmZbGGZqvrmY=Cy9QDec%!}@Oi}uiz%vt=6%-ea9%F%> zDF%J7q8E*%s5N^j^6`6$9PyMQYg?e!UGSU(rUS*S97xd-dK9(rFhwpXK@kZa6j8Jo zg>Q0#o+#AX1)jyg6r!kUN{a0ABSloXOyN4g6jsNULN~O4W*_M3hFX}jg}Z>cO5wLs zC~RO$3c1~xg4YbBAXP{B8Vk+Sp=SeXKTe#=Si^v!zd>7IYl3=OwpAdQB=%XiW+erJORKQ zr#NMQihX*IV(!+b=(HykonNA;wjLC@yAMVBgre3G@VEeTi(=kArD)|6ib`ukk#{Ch zWWmc6F=Qk~=mZ;SeJT-usPf=IEv9c>gcqk~m&oc^}6hmP}oS?ZV^jt?RT-#|D zz}QfPg&Boyo=u?^3n(Ptd(0P{7IOkfEk0n?uRlig|Qu9LKQd>!Ny3GX}Lt1UG5fgXR+#-LO52l7+mlV(lkE>) z1KOT!|9?H%@(*6jbxyf)oqh#b_FGeSFW+ueG4HwzjRrA>40?}-n^9mLd5zbt# zO0j!|4cINaHSF4yHSE&HDE32PYj!H-Fgv*P4ojTq%a*ToWj`Jr zMBQcESFUI4hWN2Xis@|I^)75%we4){^SNxB+gq0CTaG1NzR0$(uF8_Stz;V=*Rs%M zM_Hty8H@BB&7y+tu$b7sZ29-=*y`k&Y@OXOw$Zr_+qixiTRCtB8~AP*8`8f7v+q!v zxpt|X$BFkeeG_WXJId}y-G;1h(J3NSGA7bpVSzFn3-D8XBj3C1r#}Cwg z5Nt2LXOGi!=`6M^`v|e?{VL0wvR*49){Zf3m~0@9=Uz;nyi8(;(OYP=7IT}tu2|pXmnpVp$JflPJ)=}B!y3)5HS|mD*x-4-D>=vK^v@F8 zCW~6!H3>^(fL|GJaiKnLo_cUUHsZ z(!9q-YvVdc8W>LOxmb)F_s!HdEL2O!c*%;Y2C-Yc4Rq`WXwDPcdKpQrjHyR(Y`M4Z zV#n1iV>s+#AA{bqdY&rGozw8#qlfkNs~YD%r~V#;F$TW#wuxi4?+tX`T+gQ(qqOXvS!3zpA*tc`0K}PwUIn-c` z+io$}>^CT{H^#7N>70uq_Db~yn&Vx?2|p&GIuPHGgHwM zEInLS7Ca{_%WjjEHEYXCV@Fxpbb+jF`A$|^>{nwRy2_caUdT$l#pqY%B`Xb+Wu-|Q zV0Oq#*;iItj?Ll8e3dRMb#-NBxhk@_MlcUc(5-p{b$R{QK&t&w5(h_SXKrb!j}^?w}qZ#>RN(FU}j6QG8(!PN6E^= z3V2@#U(nDR9=dH(*P2>JjXAhnRzB(^XX%Cj^B&%(!q+Nj-UU5fP-}>qM_}p?ld~M^ zLDK=`gFat2dTL)nv(R%`0#9fTMpZyp&fF!*nb$1k%uF*`S!e_NgTLmt&^;HLM2>~k z^C2*g3(1*pxU4Kz02#%@|801K&z1+FX--Z(!IOj0g`aZ$F(2KK5i)Is%v+;=`|s77 z3L$gBBQQ1ffyswD3>hJxZt!Ib&Vd(!ctp2aR|o=1Z)AD+m%9W;sg@Pzkb@Rh07 z9NY-CY;t(A9IRzkp&&Uk`MR8WV}+cljKq9ESJ{{FhVzYQLDMqS6B#6{F;7dWv(|fy z`M`BBD?XLPnUIrhf1R4XtZI4{{%YYeMkk%m=Qo zM?;V!e7C|iB_pf$7`NRIJ$=-*62bFmDCT1#=A$b#0c+_2??vD%J=c760na{Qy2+}d zuQcyxU(l0H^!*aQZ>a6bCcZ#?d=Xz$kdf{^Z0)d$%zkUp_GJ65bpH2a`A|}<;^ziS zv5KC3Uvm-M+C`gyHi7>-0c}sV|2o3|dxGET$+mJ&jzi1dzUr;ECtFSqf7L(Qo^0(s z?<0I|PqzQ=3e@&w`@HWsT6kXCgT1cG`(G}+N{d^Ms4`1rl^e;(KNWcxXbzjROY`SW8UG-I02kecnsuwV1o|EkW{)ciHL zKJ;DtDAk8CZBI7wH*9}o{b-sWIjG?jLt_6UkY63*zP~#3UmehBxcR}OhD>w(Q(Fx_ z_xPudX*k7J+mkJK8ee0-fG=1+-IHy5z~Xn8drae{UL0utTz9VJ>(tW=EcB*WW;a^@ zZSfg9^D6jNPqwzh*S~R2inlb~pQL~B=3A>7)$$!s2DT~h-fF%XWA6S(4`K6}!7|Zj#@@pmiN1uCst-7D$$@@I_Q#eg7pBn$S9sgRNoBnON z{oVZL?LD?9Q?WX;wc9$4PRk8J-=xMXPH0~L)!VQA9F#wtS>gDa;eGP@%9~5xacxhw zyor3->#seZU#8;!|E#?C?dLnv_GCj=;&XS-=j_kVO-I|4?GJ<{pyKn8SU>Nye3rm{ zx+fdHf33HreRuKwTeGBgy~WSt=dF&v^m*L>Jk&q2C)?ZA4O0GjGxd3n{%+rQeV*#v zs4wivHY4FNP3vMyzG1O6IpQ%*9NUP-uh>97*2l@4BFHP`J$YGe0;VrbZ84F2i|Ep% zOHF9Psr59z`f~E#Z%AG{b;zseHu7A14Ls4n6sF0;=F>#q02;r=ntZCiBClj6d9G?o z<8GIwaXuGO>j8L7)R-sU>~(ILl5Pso1m zDjIgLfjXa}2jPoDb1=C_+t8>!so?1jj5Q6uF`fFgY>N!HBA@3pZhTo96LyeBXT2m> zyME+wYYGiZYfJrFyds-;q8U36(X=6p$TwjeP2SU%CPur`_%}i1v*|i{Z zDBOj7W-lP`1`o-rTr=|QQjx}?FWuxlmf%SSrV&lB2qT{@<-v2FJU8mlxG`olb`J6^ zq7OYzsI>_^U4f}W-iDXRb8Jf*dvGa@krm`o{293qmZ8}ndfZTJ8F=mjGl<4cm&n6y z3XLATpGIvDA=eYl;p-YS7l57&)G7&{5MbQNZBH$7E%lt7cJ?914t3Pt>#Cp`^D(9$ zYV`q6C@{Ooal8T9KdDc49m*k}2k?$-u}d3h-bNlJ#-WxOIqld<_K%O!kk*~4U(hgQ zxC;3^q;Y9A;OjBD+f^ag;}+y-eTD4WGhix`&6eFXH z!M#?iG>tQ@L}RM?l6&z>pO=mWk1mgU5F1LJvQ zNk<-Wu=cNT(W9fmvz$lvu;vltEP43Z1Rn0)_h+2rIUYTFIgjdvI`w28{-zrbdsL2x zRcysWBOmaX!7F);jsmsJ!Lt#VzC8R?bspCLG!My$=fNl6@L@_m&GUYB^L+g@W;~Cu z4(H)5oOsx<**x@tzZz%t9ghy&0iG+s`16R$&OB^oJs#R}Jr614%7a~8c=Xn#&|C_7 zaBW1)1y2kxHF(I8IXvj0E)VP&$^+UPsJ+LeLGx4Si9oH%;PK-@4{q}SC(f6>=)#v) znTvdc_apF?%pVU@tnBsiV`x1P9iP6Xqb9>hd-Z5_nEP3c-;=#_ld4RRV zmsVB+Bk^g&+Wo?BOzt^pyog7SKgFX9yysB|Z+-&Tl}DfZhDTQ|%%dXGc+|jNvej<2Y19Oo_EIG=*z&ybzjeLeF{BIs~3K zzy$J8tLi*>*a;rEe+CcOTT1P{svb1ghMvc$^$j~u?gqds?)c) zuCop>O?bhU#C5Wb*qb&3So*XMEUoojmRhYPJDPf%t$J607YgkJ9(!Oc+1pJHEbFul zdwl*eyIpiEyWFD|JL=n*t={0r^ZDdw?*oc}=M*q4*fUdWmNx4JyP>MWQl7qH$JV@O z@sBN_`8CVRkWnjuJwBVt(%i4HAFsu*Yp$o*<*U8f+2JGDw(knD$4i>A2Psi3t<5fW zyI2KwBQuj-8A^WVa*jaIRgxI1j$sUUd2#;)#`S?V`Q>~gPREamwOcKLcdyXG;G z-RN7NUGv*3<3=9r*p!;==nXe^boy;}Z24ez)_xpIS!uwo26kfCvSZohWlhjEhTUpF9pQ)JMd5hxg z>NKgqnC(*OsT08C$X;%o!e(|=%7w$}u+A zMi-{ag<}R-)JXAHv>be2ac;(Ssn%R$sXMooJR8-JW;~oP&zd1ii4A6&?`m*E(Q=@f z;{4(YQiD+~CD%m_C4Va&X{C;-l+b#!f}bvLF^fklx{ofSI5)*qYT!^s8qvD96gO>@ zv~@_3lr(RUlvwAYqGjw8Xda+A^QezhYimo%UQt z8!67NY9o~y6DV~zUoH7tCP-TcUzWCiH(c7@vzwH(ZMT$^{u23|mkPM=l}rt8NS@VK zN-JItmy+g;m6D#Fl9IMxleYJNE$zxTL7_}ZkxEaxA@R4zr5TqNN^7PplM*X7mJ&BT zmXfmKq+Nx2v4dwK*uJESEM!bqX7BdBY}2!x)cA*qrdzGOEaFP)Dx6(5bzN_AeHmukRy)bxjIO>pDaspM8q+SzM~vK1CW_b*dD5FCMizO6w|alh!p2k=CUrN$Y2gQta!S zrg*kCOR7x=C65(J(&`~+q=d9ADM3|5TGy$mw0`zM=F-^kr}wiyRy{xVekN!6U6r#o z#>!cT-^f{)`pH>$U&~o9ddOKXGh~&{x3a3>Bw1DXdo^ayC^_qN2RZ8+`iMO&A!lW7 zkh9*J$*KYgvZ{!_tkOfzE5Rc$moI`VLC$)vlCxgD0>%&H<7Ab7XIWMHj=GlM5twKG zsJ9=Ob+W4X4OvxgtE{Smy4B;sx=Ee zIkljtq#ZcIWmVk`vZ}e0tYXJxRokOEzSNqbN7NEL0@JFGtmz7sDL3^6_QU@?b?`=p~y#7 z`Zjz;LNl^$dlt2tfaeh~o8;`WrgB!mX*p}NkDPV%lALwLT+X_;2;S158yV{KM7^2d z+NQ?rL(XUG$XPd#&m&pRQkKPhFk}S1MJhu32sMwuq^<*3Q*f=8vtE}5CJf`qSicuE zJyO>aJOc9^{j|jV7r;CezX$)j;B5wUuT|?2wFJ-0bYPAmYZqBnIX^O51^-Ko+PmhLemh`TMDlIYRo}o zcm6Ww1KUTK8)Yrb2j*E^vqcP0&qK{4FsZM=#lVHReEkhD$W9L)^oK$duJx-m)I0+7 z+!gh7fWh@&9GRCp0&feUd#hT{qmF8x9Lxn|?S&jmAft`&-x%J;sx=EeIkmu3(i0rG z-|9kJbL7b@!M_r9ihR%vJ))N25tvr1k@aHai0f-8Gz#y+m(X19Flyl*YL4rq!xGF# z17tl9IpW$D`3Ud&z*m_MJ;tbod!%n`VBjI79kR}slc7q_9p07jwH}%WKo9QCp^o5b z2}}VwyYhe2lg%6N=i>JbwLRIy7q*Wtq9(w!ic`(DV@cln6~PA-$Q)axTd~l+q$K;C)<}L`OCAkJ=uPl$ERNX+>>o-KY`Ko?&3#- z#S+3Vf7oU;%USsO58F@N4?p44M&vA(pDO%`<3H8^z^{3o7p^(3=~0$a8NR)fzy{;6Y{T4Jm1$(B2f zud)9-J=wM-uCrQG@E$L1QLBG=#|xHkYu2Cc(BenSS6x=N^NP#)f4_38_*GA~4ny;o z@ba2$X*RZnV}Z!3Rx@wEb}nW=l<&W4Hza08n$?zird_M9SZcLl($kY>6=QO9iG8ar zd&gPkJ*a)HO+cH#-#P)SB_o%74T0MG|F=`L)V@Fec0k%uZ35Z^ewBds{rOjs{7DD2 zJ=t;vtL@2_D~x}^ZtmxCx%ag_+5QES|G%}U?aB6M<*j)}r{UN1W79lK6yst{Y{fD0 z98WW*Ip<5a+MaCc#seZU#8;!|E#?C?dLnv z_GCj=;xoCnC)+138ms#IbN&|i6T_c*t;DJ3ZO({p+ZJR)OOCx50`{F5>6$ zGfpSZ|2*!09_pXilkHvUu(kiZnfg3Of4A?uK2LRS)ED+-n~+$Lyh@ayG5h+FJKIlg zwKkAz#~b9Fl8>DB^d~31QRKL-Dlq7m^~8ldVq$6Z zMvl!pf@d%=E6BZ2QF7zW$<-ZPXU>z8vrLYiw~@m&N6ex)He)%qFL|sMi}=mMWBk8CSxCJTPygBPP(OwN=UGaXWIJTZx>e zx{~9?4dgiA20WI)3?g^K`Q&C7O|F3kqSh7goF+%ZS2WTqj_mjCr{N9F(1*^6hBcf^E`=IHvkmlIL9LD8 zIRMNxvfEsOhDME}!N(@jpok23zYSkop!pc|tVJz9@Yn;hkOrMxO#PJ>WP8$?och!! z$CQ%rwH=x_K+j^-N&wFqV7gGBfmf;f)^5mf1oGKQ4ztSAh}VuZ{BCRLxlMy2&B3z> z7!R^;tD=edcaxXh5*l0K4Y`MQBDcpaX;gJva@p9KoYxj4=Ynm?Y1cqtmeRP^RmdYd zjNFTyB)2~Pi5;X~gJ68h)iK+4+Uh zuq%7uYdSQqfu63YWdoi$z?`Gu!?AmkGQ@3^mL^?~NG&@%(I(2LE-2$&kww?rZ8VIPGIlgY`#2;ReK zrCW+WzO+sgBJ3ouWg{&8+y`F zt0j2QS53b^_xo`+UzV_(FI|wIFNr?GmsFSlU(0x4Qhw-Zi(1XV69G&jUn;%lix2Da zMc#3IVfboz4}>p&Xg1^iJ#|p)EqH1HQ-Lo$Wyt5BTE^#5Dddw0@9W{q0h)(F&jHkW z3!eSJMDgz;ocXMgHIZQ!@_7L7*WnBGUN3^4B-FYLo*KY3<&%tB=Jd{r%nan=tGn>f z`_FiYyDblH*p~;HjOKyfC3#?hhdkgMdcXk_;j@Z|-Av`7n3oXU7#?(H3J<(|lLyxF z;{j_n@&L~};OP#`H6FTWD-W4dg9lst@Sr*wJh1tE9^kc;`@i(({>kX4bw3+C!-1*A zgU6KRK|Rn{&eEF)bU4lZryS;f=|i|*LPO}moan9tPbXkj@xZn>d4LJ#)yR?ivF&`> zvO#>AIp(aP2lQah>bwWfL>|yMgZmeF$CsTy%9kc?L?5~ozNDukeEIXhD+Qq^0kx2i z(Nthk`BHmbzBv6lU$i!YFH9{4?;O4kL-SMUQKHrz@SF$c8DIF?moLz<<@0>2@xX$0 z;5{9_QlU8#dIHcpuMl{412d9;ck&^hwYU{B{1IGDx&NNd@HGjV7eLQS)RMr{0+=p* zlIi`N`G~4wi2i=Xcv#tyJmj8&2gg0(L91%UdLc@X!nV*owhq89F<IvF!}^D?WuU+lc#Txi0j`sI?h9*1%li{*&@?KbwbqS(7JxX_wl3$;oZ- zWev?cp~n-oj)TV+m^Xas^^Sar3wo#-RpX0#V$PnwgRe!fqSi~ktZ7MLdh$i% z%J2o_%kX(GpCX^f@V*bec0+SG^lU?|uHcb?sm147-{Q0NIwC{dYtPbgj~K$&SZH1g zJxbI%$mhK(0?bf8smUbG``IUZvK8N2n-?o^ffs9%$n|v0dEtp2c)mvA>}B^G?0MJj z>`u#IcIwSlr zYEu!G9&XLiY{Q8xvz;A#6k3?2=yrzY z^U$+^y`8_6y*^Zpy;|Izy-bo=cAz6uUT?*o`lYedBM0GY4>X%F)q+<{wWSWruDzUP zFYC*)eRi@eWj^-8)r;MH@rpg~vI@Q`vKLYp=;180%@d})(gJcmic>dZ`*xQaLSOn{o=iO~ zo!U@R+IuNm+A;V5Fjshf!)&he<`_GzZ!br$t|J#WIw;-mW+I&&bWqys{YKg`Ed@N0 zz}#bZUTE?Gd$JCl7t7Hv66MOhbmbDEW8?zk^rgoo&PXXH&!nSu z%1FsW`bkNP+Q`QD7RbfTedK~xX430{-K59H3h8>y-O{-gjin<^`%B5i??{PTyGc)` zc}e$sdPuj5jhC)=kCaln9hc6nc`Kb<7%v?<=P2!dWho_^U4i%N(#gU3rQ`d$NXNQF zOGk}6N=KSpl@6V`EgdLZQcCU`FC{8xNP90glJ@$vk@oDVEG54&m6C@#Ny#Plf#)bN z!P4GYbKvI~GCYKQo=7{aBH(MBl(e{nl$f|%N^E5#C1%=5$G8JKUM`s(ne&px`Z=qAYh_2d!qX$t_hr+hgaMbO zgnqrG1S%>enC_4gjE=LJV>&TwRVUfr*GJlL`jC{+`bsbfttM_oW0K z^ha{ilPhF20_L%lFgO`~?)0UEW(A~#@+ngMvsqI7iBu_m?+Pi|p#y5&k`nr7O9@u* zrG&-}q=b?QQvBV;QheeVDSlxsDca~vlj7@El-9mi!Fw2dwSZ;?^qfPjli=Ac z#dj+Q9`t9c>nO!n>4tp3V~To3jivaLy`krO)Ov;SSgaSN_+WVUZ;T9EA)hRGZ!N{| z^OoYhR!Q+qevsmI?n&`gdjO-$ypLD?>HX}JJ=q=x$|~I~Syc`FnHo-$Rp#ep6`>Cj zu3J?v^xCpTPp98iamgc0FX3J$hh?T7t(My`Wm(kyV|_%BtRvz;RVpjkJ+fF5q<= ztkxs1RrBOv(BEsw8q7C(LwPKhRX&Ae)kO4#A_wS!ht3!mJObm~8-1V9XU%t%teUe& zRxJ?Yi=a6IdZwdRDtJV%F7*AH-bPj}Mvtcw75Ls0ey1ofUU#iivN`dUGo64%Lwc!i={St9sd8#oLWm#nePtCx~ zk#k4%wCYh0nvmDP8>qKg%_A@-*JPE&16kD$e!IE>ql57TSv4HIBQS5GRv9fB+arlS!NqW%S1bV>P71;}( zVV20}oUHP~{#0CZ-@(g5V7k_X=DNVVN3CzcgM7S}$*LI(WYrSPZ#d>JE)?Fe+OC0S zcyoaMF~`6YpvJ@^=PkHq_ZL7u&^HiXhlAG@IG@X?6$T#6@fKVo=P+l_jvzziHFyKO z!?W8>Xf6UhCa8tn_vZ)Zu$gLeeRL@mK1 zFm1OZ>s!bO84T?K|6cHhbKD-N^>Ea0hu&s6m@&v2oX)F|(HZ!^0dM-yj2wj?QA_X) z1KuSCSqC9Uc>692{+naG9yB+Gp2Dcr9Xu<6!F>x6n2(Bb}H-)b>Xhtu% lg-z9SzaKr@fXS9zHScHCxowXwHZ^OCCvKgnM-OaD{RfCCos0kg diff --git a/ThirdParty/custom-opm-common/opm-common/tests/SPE1_TESTCASE.X0025 b/ThirdParty/custom-opm-common/opm-common/tests/SPE1_TESTCASE.X0025 deleted file mode 100644 index c2869aa10d8dd46fcd1501eeb10bb2a0c1b71092..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19824 zcmeHO3tUvi_g{R!QZzL+N|MC~4?zSH<<2h3LGX!yp{8Z2sA;D82+_>U@~uBL3x!Zo zG!;`w^Q|BcVHXfZQ8Nn@Uuda&38_r~-`Tqt))kZt`&;dNKC@@$%=e!2J!j_5-a9M` zg~HOWPZ0T%m$yP;5y9IE=oE??V<8oas?T1+XBB<>!H+sn@mdwvIv5StG_?737KX~( zrgkEr3qzfS3L6iU=Fqf7?Q9qs200#e2WoYLj@xg9+61QcUG-Bm&<>7WwxK2skDR!ee9wqC0CtmI{tDygHss14t&svN0bGA`r%-|T(- z)}}iw?38ZR{%yXh7VbY@v+CxkH};SZwNe^X%?>-?{j0{)*!I-hYj*y$NM*1m%koTk zH`(?==+1@e^2YyZdN~i}@s{J2WqG(q>E-KX`6&FMn~y>~-ni^vmR(==opJ@HRE3f~ zx$o6}_Do6h_k7BHWN#|{?XYr{+&7h~CzKykKNan(EBQWt-21f4k;t|6mUXpJ-E>n; z|7qzcnZIeiDN8L z-x>w&)YA9*s{B2czaR5=7cTEB{4wi3g;A%hv5M+orc8fE=KqaN9y70H6?se^mt|Sl z%GCW`ekzl5W!U0t{eksvFl-pp-y4>JrT0x<0D1KS#uCRAnWjo}-<$z+2A=8+c)eY7ePs|d z-~SKKqIrLQcz(>I<_wrK@L&ea`}2c2c`};1YS^_LRPubSsMF2YD}d`z{kwPIr%8`4 zK7Q28`_V9KZj;;g3#MKij-wLy(sQb6r!mI=Ue7E4Z3wUY?83A{RpuEB$0=|=70G2; zrL40nBb@vj79&-~n~$(vaYJV0-<1K=btU(!fq=aJI2Zl8G9kss&1=mhDdui@8PM-- zmVqVvo}$p`oH5%cQeAT1BDc9EZ~jX;L-DDq*0)}6lM*ZIjL&G~GcH*tOOAcmxr{u< z@v_~@l25{>DL3Od`52E!uDmaE;F9a}43dxi)uMs{Ie+EZlKpcWZ}Zwc$-kt{`#$yf zSD#dTs(9)f=6RMgB1t)SvR0mBIsbf|k8#O$c?K!t|BC#x^Ng>LZ1}SrP;$RpR4YBV ztYuy9d$Hj>)AamO9rIn2r`d-C8 z_%+6rU&Z_7mB;bHW3db@jnlvMJ-pjN|7qoi=~5#O%K@eNomBctm=Xpw^pq6ts(dSYtr!C-sPVf z_e=wES@Q2+%fTzl`%Tq9HOvb0e%hY9DonftSal7WmVrTD0YQO%dvSGd3Jl~rUa?sQ z2KEoY|ASgMlDl=iAS9l6>Be5S*f z4eZpGFmW-IzGe-jEoeqZ=6p}7F)vYS!%5)05PWjsD+qR6fmu&!gB&Tfs4k@}j-ce8 zT`6hmM#MD;oHv3`Dtx^IJFS4Rq?8sHD5=3NO0-I*LuscF`*_5)44fUoXBd3lfSnj% z_E18DS+xIbG41U;1o?R#vA>46`hjy#@aYI&Jz*ySn47d~qCdqQU5y-GLw?R7_PdD7 z9-Kc0pUv=f5OxTd2wJCZN+;&K)3I}l=;*JjDQjsVWrpQYMwBaQFP|fA!0)8F@FQu$ z#{)ByvSVE6=qvLmtL<-;Y2S}B0!Nbe^WRAGM=jEPe1kNuZ@|tnU}jU+xUG~qBZD$l z)+KF19nusXCQYyLl%8~!(nF@h*Jaqb2}~Mg#N8(Cu`JSDK1!OZ`zXD05Tz|mpfu|! z@JWI%AK0lOVe*bp`tj?Oc5ne5*|&jG&wfOyzWLzX4t(B}d|l1~<|d^r@}?v0MpDY* z4=MS>L6o#TA8~yT&Ue8_17E4I^C>W6DW&%%O6sPi#DI6{(7kxl23A2_4Z(Q^_zZ`y zZ(wIWFj&yKVUo9CqoQwQ~ zA@&uBYX>+Ng3l%RS_wNEU=nCu_hLHnbsIWv`7LGlOQ5W4-6-=!Gs?LAI%TMfNE=&^ zw4N78b88te8p^(-q@&wTP}VFz%A7r)GGgbF_Evq;zS4j+-(Mlkq7Psv9+)i3N>fng z>1QZI=Rz6HTadPICTU_qNMnU{dFX%eEFkp|pa} zDQ)U%@Tmn~AHa^Igz-Qg?JraMa}z18@n|~Y$|!Yh3OEOW&n)~sJofD$6N(t**VXzw`@`6)!~zap-0!8sOu{Nbw@c8&uxly)n=qWD*_W^Zjq zepVv(O^9nJIOl@T|0p5&C)oK8m?B!&{|^2Yd^_LI0s^JSVblFg6}@DzxjrR1h#Ydo zJQq*NT=4rMa>*?7d^}C_k+)Rd&jP!9>36gT_A`YtnB6J9!)_1V%x+jsV)O5V@%UHob9Uf9*a5^$3`D~Ux=FT#BL~IXL&x$cTlpk zQC=+j4J&roIfKO=%wQ3-^H|7$NFmC5Ez3W3k^LY($IjGW!?NG}ou!;y&i1xC!eZA) zvhY(gSx5>ATVB4ya(gUb**D><`5|_=<59NPrkKTjy_#*Lci3l>)7h8~VM2PrRF?S7 z&ustVV79Bl$1E-}gT-!W4NMVR)AC!kyweo+Zu5h}y&73;!|^37de3PVbxUrUU^K$`-y>%%&WUWma*GS!jGCHs0+EHu~5B7BcK23(>4)V>(*FPB@#A6wKbP zd5C#L1q-`Rj}*SN$`_)xISNtXYlJPYj}X#}77O>t8B8%w@i2P2+RFs zB&(Gnb}1_8;i7bIr*v_cYWunzWiHi@pItiAZSTii2aWt?sBs=yA~WEyKR_dyfP>`H`O)DQv&#U%;h9`nwTMImu(!Ppo~` zd71FNlUv{}{rJ>bRo$HTb>wZQ@fQ}_ZCvVYe%FueCgr}xgc<89}6ViLJj9vi6Pk{8?l9X{vMaaNVxw#r{yxX+)jVk5fz z!4|(|&1%dV;d#0^uJhPiz1q*qo1xq}^jVHIF096{JXX+GmK34RRvu;|D-Ibjyl(CD>E7LpPmJqnk^;*2rKkD<&BY$@7xO&G` zyIR3JOU9gvp66}5F~`e1KWm%Pt&N@agcOd6sXnb=w8zqH-sZ)*FvZzn%lSTS3&w7c zG~m~sueskphy6?94ww>FcaQ&8r?>f%+;lJg&uP9ro)yksIK9?iIw=O$58m0dq#sU9b>zBJ@?>7R34~g4oEH}KUms!M$n5}A*uopRo`f8_AV0WABc-{R%1;E zgu_ll39}9NRqh|i;}`G+|IWy<2iB1 17 OR / -GMWPR 'T*' > 14 AND / -DAY > 3 / -/ -WELOPEN -'?' SHUT 0 0 0 2* / -/ -ENDACTIO - -ACTIONX -ACT02 11 / -FMWPR > 25 AND / -WGPR 'OPL02' > GGPR 'LOWER' AND / -MNTH > NOV / -/ -WELOPEN -'?' 'SHUT' 0 0 0 2* / -/ -WELOPEN - 'OPL01' 'OPEN' 5* / -/ -ENDACTIO - - -DATES - 1 'SEP' 2018 / -/ - -ACTIONX -ACT03 13 / -WWPR 'OPU02' > WWPR 'OPU01' OR / -GMWPR 'T*' > 39 AND / -YEAR > 2019 / -/ -WELOPEN -'?' SHUT 0 0 0 2* / -/ -ENDACTIO - ---start files/actionxprod.tmpl -ACTIONX -ACT01 10 / -FMWPR > 45 AND / -WUPR3 'OP*' > 46 OR / -MNTH > OCT / -/ -WELOPEN -'?' SHUT 0 0 0 2* / -/ -WELOPEN - 'OPU02' 'OPEN' 5* / -/ -WELOPEN - 'OPL02' 'OPEN' 5* / -/ -ENDACTIO - -WELOPEN - 'OPL01' 'OPEN' 5* / -/ - -DATES - 1 'OCT' 2018 / -/ - - -WELOPEN - 'WIL01' 'OPEN' 5* / -/ - -DATES - 1 'NOV' 2018 / -/ -END - -WELOPEN - 'OPL02' 'OPEN' 5* / -/ - - - -DATES - 1 'DEC' 2018 / -/ - - -WELOPEN - 'OPU01' 'OPEN' 5* / -/ - -DATES - 1 'MAY' 2019 / -/ - - -WELOPEN - 'OPU02' 'OPEN' 5* / -/ - -DATES - 1 'JUN' 2019 / -/ - - -WELOPEN - 'WIU01' 'OPEN' 5* / -/ - -DATES - 1 'JAN' 2021 / -/ diff --git a/ThirdParty/custom-opm-common/opm-common/tests/UDQ_ACTIONX_TEST1_U.DATA b/ThirdParty/custom-opm-common/opm-common/tests/UDQ_ACTIONX_TEST1_U.DATA deleted file mode 100644 index 7a209afe5d..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/UDQ_ACTIONX_TEST1_U.DATA +++ /dev/null @@ -1,526 +0,0 @@ --- This reservoir simulation deck is made available under the Open Database --- License: http://opendatacommons.org/licenses/odbl/1.0/. Any rights in --- individual contents of the database are licensed under the Database Contents --- License: http://opendatacommons.org/licenses/dbcl/1.0/ - --- Copyright (C) 2018 Equinor - --- This deck uses User defined quantities (UDQ) together with the ACTIONX --- keyword to shut well with highest water cut when number of wells on stream --- exceeds a defined number. - --------------------------------------------------------- - - --- ***************************************************** -RUNSPEC --- ***************************************************** - --- Simulation run title -TITLE -Generic Reservoir - -NOECHO - --- --- ---------------------------------------------------- --- Simulation grid dimension (Imax, Jmax, Kmax) -DIMENS - 3 5 4 / - --- --- ---------------------------------------------------- --- Simulation run start -START - 22 'AUG' 2018 / - --- --- ---------------------------------------------------- ---Activate "Data Check Only" option ---NOSIM --- --- --- ---------------------------------------------------- --- Fluid phases present -OIL -GAS -WATER -DISGAS - --- --- ---------------------------------------------------- --- Measurement unit used -METRIC - --- --- ---Table dimensions -TABDIMS --- NTSFUN NTPVT NSSFUN NPPVT NTFIP NRPVT - 1 1 130 24 1 20 / --- --- ---------------------------------------------------- --- Dimensions for equilibration tables -EQLDIMS - 2 100 20 / --- --- --- ---------------------------------------------------- ---Dimension for well data -WELLDIMS - 6 5 5 6 / - ---Dimensions for ACTIONX data -ACTDIMS -4 20 80 4 / - --- --- --- --- ---------------------------------------------------- --- Input and output files format ---FMTIN ---FMTOUT -UNIFIN -UNIFOUT - - --- Dimensions for used defined quantity facility --- max functions permitted in a quantity definition --- max arguments permitted in a quantity definition --- max user defined connection quantities --- max user defined field quantities --- max user defined group quantities --- max user defined region quantities --- max user defined segment quantities --- max user defined well quantities --- max user defined aquifer quantities --- max user defined block quantities --- whether new randon number generator seed computed for restart runs -UDQDIMS - 50 25 0 50 50 0 0 50 0 20 / - --- Dimensions for the user defined arguments facility --- number of keyword arguments in which UDQs replace numerical values --- ratained for back-compatibility --- total number of unique instances in which a UDQ is used in a keyword argument -UDADIMS - 10 1* 10 / - - ---PARALLEL --- 2 / - --- ************************************************************************* --- In this section simulation grid and static reservoir parameters are given --- ************************************************************************* - -GRID - --- **************************************************** -------------------------------------------------------- - --- ---Disable echoing of the input file -NOECHO - --- ---Requests output of an INIT file -INIT - --- ---Control output of the Grid geometry file -GRIDFILE - 0 1 / - - --- ---Input of pre-processor map origin (X1, Y1, X2, Y2, X3, Y3) ---X1 Y1 The X and Y coordinates of one point of the grid Y-axis relative to the map ---X2 Y2 The X and Y coordinates of the grid origin relative to the map origin ---X3 Y3 The X and Y coordinates of one point of the grid X-axis relative to the map -MAPAXES - 0.0 100.0 0.0 0.0 100.0 0.0 / --- --- - -NOECHO - --- --- ---------------------------------------------------- ---Include simulation grid -INCLUDE - 'include_grid_3x5x4.grdecl' / - - - -PORO - 15*0.25 - 15*0.20 - 15*0.23 - 15*0.18 -/ - -PERMX - 15*500 - 15*100 - 15*1000 - 15*250 -/ - --- --------------------------------------------------- --- Copy PERMX to PERMY & PERMZ -COPY - PERMX PERMY / - PERMX PERMZ / -/ --- --- --------------------------------------------------- --- Set Kv/Kh -MULTIPLY - PERMZ 0.1 / -/ - - -MULTZ - 15*1.0 - 15*0.0 - 30*1.0 -/ - --- *************************************************** --- In this section simulation grid parameters are edited --- *************************************************** - -EDIT - --- *************************************************** - - - --- *************************************************** --- In this section fluid-rock properties and --- relative permabilities are given --- *************************************************** - -PROPS - --- *************************************************** - -INCLUDE - 'include_sgof.txt' / - - -INCLUDE - 'include_swof.txt' / - --- --------------------------------------------------- - --- Include PVT data -INCLUDE - 'include_example_pvt.txt' / - - - - --- *********************************************************** --- In this section simulation grid region parameters are given --- *********************************************************** - -REGIONS - --- *************************************************** - -EQLNUM - 30*1 30*2 / - --- --- --- *************************************************** --- In this section the initialization parameters and --- dynamic parameters are defined --- *************************************************** - -SOLUTION - --- *************************************************** - - ------------------------------------------------------- --- ---Simulation model initialisation data --- --- DATUM DATUM OWC OWC GOC GOC RSVD RVVD SOLN --- Depth Pres. Depth Pcow Depth Pcog Table Table Method -EQUIL - 2030 382.4 2030 0.0 500 0.0 1 1 0 / - 2050 382.4 2050 0.0 500 0.0 1 1 0 / - - - --- --- --------------------------------------------------- --- Dissolved gas-oil ratio versus depth, - -RSVD - 1500 180.0 - 4000 180.0 / - 1500 180.0 - 4000 180.0 / - - --- --------------------------------------------------- ---Controls on output to the RESTART file ---RPTRST --- ALLPROPS=2 BASIC=2 FIP / - - -RPTRST - 'BASIC=2' 'PBPD' / - - --- --- ************************************************************************************** --- In this section simulation output data to be written to sumTESTy file are defined --- ************************************************************************************** - -SUMMARY - --- *************************************************** - - --- --------------------------------------------------- --- Summary data to be written to summary file --- --- --- ************************************************************************************** --- In this section data required to describe history and prediction is given --- - well completions, well production/injection, well constraints --- - platform/production unit constraints, etc. --- ************************************************************************************** - -INCLUDE - 'include_example_summary.txt' / - - -FMWIN - -FMWPR - -GMWPR - 'UPPER' 'LOWER' / - -GMWIN - 'UPPER' 'LOWER' / - - -WUPR1 - 'OP*' / - -WUPR3 - 'OP*' / - -FMCTP -FMCTW -FMCTG - -GMCTP -/ -GMCTW -/ -GMCTG -/ - - -SCHEDULE - -GRUPTREE - 'UPPER' 'TEST' / - 'LOWER' 'TEST' / -/ - - --- *************************************************** - -WELSPECS - 'OPU01' 'UPPER' 1 2 2002 'OIL' 0.00 'STD' 'SHUT' 'YES' 0 'SEG' / - 'OPU02' 'UPPER' 1 4 2002 'OIL' 0.00 'STD' 'SHUT' 'YES' 0 'SEG' / - 'OPL01' 'LOWER' 1 2 2025 'OIL' 0.00 'STD' 'SHUT' 'YES' 0 'SEG' / - 'OPL02' 'LOWER' 1 4 2025 'OIL' 0.00 'STD' 'SHUT' 'YES' 0 'SEG' / -/ - - -WELSPECS - 'WIU01' 'UPPER' 3 3 2030 'WATER' 0.00 'STD' 'SHUT' 'YES' 0 'SEG' / - 'WIL01' 'LOWER' 3 3 2050 'WATER' 0.00 'STD' 'SHUT' 'YES' 0 'SEG' / -/ - - -COMPDAT --- -------------------------------------------------------------------------------------------------- - 'OPU01' 1 2 1 1 'OPEN' 0 1* 0.241 1* 2.50 0.0 'Z' 1* / - 'OPU02' 1 4 1 1 'OPEN' 0 1* 0.241 1* 2.50 0.0 'Z' 1* / - 'OPL01' 1 2 3 3 'OPEN' 0 1* 0.241 1* 2.50 0.0 'Z' 1* / - 'OPL02' 1 4 3 3 'OPEN' 0 1* 0.241 1* 2.50 0.0 'Z' 1* / - 'WIU01' 3 3 2 2 'OPEN' 0 1* 0.241 1* 2.50 0.0 'Z' 1* / - 'WIL01' 3 3 4 4 'OPEN' 0 1* 0.241 1* 2.50 0.0 'Z' 1* / -/ - - --- Well production rate targets/limits: -WCONPROD --- name status ctrl qo qw qg ql qr bhp thp vfp alq - 'OPU*' 'SHUT' 'GRUP' 1500. 1* 1* 2500. 1* 60.0 / single wells - 'OPL*' 'SHUT' 'GRUP' 1500. 1* 1* 2500. 1* 60.0 / single wells -/ - -WCONINJE --- name inj type status ctrl surface_qw res_qw BHPmax - 'WIU*' 'WATER' 'SHUT' 'GRUP' 10500. 1* 500. / - 'WIL*' 'WATER' 'SHUT' 'GRUP' 10500. 1* 500. / -/ - - -UDQ --- WUPR3 sorts production wells from poorest (highest wct) to best. ACTIONX will shut #1 in this list -DEFINE WUPR1 1/(0.01 + WWCT 'OP*') / -DEFINE WUPR3 SORTA(WUPR1) / --- units ignored -/ - - - - ---start files/gconprod0.tmpl -GCONPROD -'TEST' 'LRAT' 6000 1* 1* 6000 'RATE' 'NO' 9* / -'LOWER' 'FLD' 6000 1* 1* 6000 'RATE' 'YES' 1* 'FORM' 7* / -'UPPER' 'FLD' 3000 1* 1* 6000 'RATE' 'YES' 1* 'FORM' 7* / -/ - -GCONINJE -'LOWER' 'WATER' 'VREP' 3* 1.2 / -'UPPER' 'WATER' 'VREP' 3* 2.0 / -/ - --- Well proportions -GUIDERAT --- int phase A B C D E F incr. damp - 0 'OIL' 1 0.5 1 1 0 0 'YES' 0.5 / equal to 1/(0.5+WWCT) - - - ---start files/actionxprod.tmpl -ACTIONX -ACT01 10 / -WWPR 'OP*' > 17 OR / -GMWPR 'T*' > 14 AND / -DAY > 3 / -/ -WELOPEN -'?' SHUT 0 0 0 2* / -/ -ENDACTIO - -ACTIONX -ACT02 11 / -FMWPR > 25 AND / -WGPR 'OPL02' > GGPR 'LOWER' AND / -MNTH > NOV / -/ -WELOPEN -'?' 'SHUT' 0 0 0 2* / -/ -WELOPEN - 'OPL01' 'OPEN' 5* / -/ -ENDACTIO - - -DATES - 1 'SEP' 2018 / -/ - -ACTIONX -ACT03 13 / -WWPR 'OPU02' > WWPR 'OPU01' OR / -GMWPR 'T*' > 39 AND / -YEAR > 2019 / -/ -WELOPEN -'?' SHUT 0 0 0 2* / -/ -ENDACTIO - ---start files/actionxprod.tmpl -ACTIONX -ACT01 10 / -FMWPR > 45 AND / -WUPR3 'OP*' > 46 OR / -MNTH > OCT / -/ -WELOPEN -'?' SHUT 0 0 0 2* / -/ -WELOPEN - 'OPU02' 'OPEN' 5* / -/ -WELOPEN - 'OPL02' 'OPEN' 5* / -/ -ENDACTIO - -WELOPEN - 'OPL01' 'OPEN' 5* / -/ - -DATES - 1 'OCT' 2018 / -/ - - -WELOPEN - 'WIL01' 'OPEN' 5* / -/ - -DATES - 1 'NOV' 2018 / -/ -END - -WELOPEN - 'OPL02' 'OPEN' 5* / -/ - - - -DATES - 1 'DEC' 2018 / -/ - - -WELOPEN - 'OPU01' 'OPEN' 5* / -/ - -DATES - 1 'MAY' 2019 / -/ - - -WELOPEN - 'OPU02' 'OPEN' 5* / -/ - -DATES - 1 'JUN' 2019 / -/ - - -WELOPEN - 'WIU01' 'OPEN' 5* / -/ - -DATES - 1 'JAN' 2021 / -/ diff --git a/ThirdParty/custom-opm-common/opm-common/tests/UDQ_TEST_WCONPROD_IUAD-2.DATA b/ThirdParty/custom-opm-common/opm-common/tests/UDQ_TEST_WCONPROD_IUAD-2.DATA deleted file mode 100644 index a26475cfa1..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/UDQ_TEST_WCONPROD_IUAD-2.DATA +++ /dev/null @@ -1,386 +0,0 @@ -RUNSPEC - -TITLE -2 PRODUCERS AND INJECTORS, 2 WELL GROUPS AND ONE INTERMEDIATE GROUP LEVEL BELOW THE FIELD LEVEL - -DIMENS - 10 5 10 / - - -OIL - -WATER - -GAS - -DISGAS - -FIELD - -TABDIMS - 1 1 15 15 2 15 / - -EQLDIMS - 2 / - -WELLDIMS - 5 20 4 2 / - -UNIFIN -UNIFOUT - -FMTIN -FMTOUT --- Dimensions for used defined quantity facility --- max functions permitted in a quantity definition --- max arguments permitted in a quantity definition --- max user defined connection quantities --- max user defined field quantities --- max user defined group quantities --- max user defined region quantities --- max user defined segment quantities --- max user defined well quantities --- max user defined aquifer quantities --- max user defined block quantities --- whether new randon number generator seed computed for restart runs -UDQDIMS - 50 25 0 50 50 0 0 50 0 20 / - --- Dimensions for the user defined arguments facility --- number of keyword arguments in which UDQs replace numerical values --- ratained for back-compatibility --- total number of unique instances in which a UDQ is used in a keyword argument -UDADIMS - 10 1* 10 / - -START - 1 'JAN' 2015 / - --- RPTRUNSP - -GRID ========================================================= - ---NOGGF -BOX - 1 10 1 5 1 1 / - -TOPS -50*7000 / - -BOX -1 10 1 5 1 10 / - -DXV -10*100 / -DYV -5*100 / -DZV -2*20 100 7*20 / - -EQUALS --- 'DX' 100 / --- 'DY' 100 / - 'PERMX' 50 / - 'PERMZ' 5 / --- 'DZ' 20 / - 'PORO' 0.2 / --- 'TOPS' 7000 1 10 1 5 1 1 / - --'DZ' 100 1 10 1 5 3 3 / - 'PORO' 0.0 1 10 1 5 3 3 / - / - -COPY - PERMX PERMY / - / - -PORO - 500*0.15 / - -RPTGRID - -- Report Levels for Grid Section Data - -- - / - -PROPS ========================================================== - --- WATER RELATIVE PERMEABILITY AND CAPILLARY PRESSURE ARE TABULATED AS --- A FUNCTION OF WATER SATURATION. --- --- SWAT KRW PCOW -SWFN - - 0.12 0 0 - 1.0 0.00001 0 / - --- SIMILARLY FOR GAS --- --- SGAS KRG PCOG -SGFN - - 0 0 0 - 0.02 0 0 - 0.05 0.005 0 - 0.12 0.025 0 - 0.2 0.075 0 - 0.25 0.125 0 - 0.3 0.19 0 - 0.4 0.41 0 - 0.45 0.6 0 - 0.5 0.72 0 - 0.6 0.87 0 - 0.7 0.94 0 - 0.85 0.98 0 - 1.0 1.0 0 -/ - --- OIL RELATIVE PERMEABILITY IS TABULATED AGAINST OIL SATURATION --- FOR OIL-WATER AND OIL-GAS-CONNATE WATER CASES --- --- SOIL KROW KROG -SOF3 - - 0 0 0 - 0.18 0 0 - 0.28 0.0001 0.0001 - 0.38 0.001 0.001 - 0.43 0.01 0.01 - 0.48 0.021 0.021 - 0.58 0.09 0.09 - 0.63 0.2 0.2 - 0.68 0.35 0.35 - 0.76 0.7 0.7 - 0.83 0.98 0.98 - 0.86 0.997 0.997 - 0.879 1 1 - 0.88 1 1 / - - --- PVT PROPERTIES OF WATER --- --- REF. PRES. REF. FVF COMPRESSIBILITY REF VISCOSITY VISCOSIBILITY -PVTW - 4014.7 1.029 3.13D-6 0.31 0 / - --- ROCK COMPRESSIBILITY --- --- REF. PRES COMPRESSIBILITY -ROCK - 14.7 3.0D-6 / - --- SURFACE DENSITIES OF RESERVOIR FLUIDS --- --- OIL WATER GAS -DENSITY - 49.1 64.79 0.06054 / - --- PVT PROPERTIES OF DRY GAS (NO VAPOURISED OIL) --- WE WOULD USE PVTG TO SPECIFY THE PROPERTIES OF WET GAS --- --- PGAS BGAS VISGAS -PVDG - 14.7 166.666 0.008 - 264.7 12.093 0.0096 - 514.7 6.274 0.0112 - 1014.7 3.197 0.014 - 2014.7 1.614 0.0189 - 2514.7 1.294 0.0208 - 3014.7 1.080 0.0228 - 4014.7 0.811 0.0268 - 5014.7 0.649 0.0309 - 9014.7 0.386 0.047 / - --- PVT PROPERTIES OF LIVE OIL (WITH DISSOLVED GAS) --- WE WOULD USE PVDO TO SPECIFY THE PROPERTIES OF DEAD OIL --- --- FOR EACH VALUE OF RS THE SATURATION PRESSURE, FVF AND VISCOSITY --- ARE SPECIFIED. FOR RS=1.27 AND 1.618, THE FVF AND VISCOSITY OF --- UNDERSATURATED OIL ARE DEFINED AS A FUNCTION OF PRESSURE. DATA --- FOR UNDERSATURATED OIL MAY BE SUPPLIED FOR ANY RS, BUT MUST BE --- SUPPLIED FOR THE HIGHEST RS (1.618). --- --- RS POIL FVFO VISO -PVTO - 0.001 14.7 1.062 1.04 / - 0.0905 264.7 1.15 0.975 / - 0.18 514.7 1.207 0.91 / - 0.371 1014.7 1.295 0.83 / - 0.636 2014.7 1.435 0.695 / - 0.775 2514.7 1.5 0.641 / - 0.93 3014.7 1.565 0.594 / - 1.270 4014.7 1.695 0.51 - 5014.7 1.671 0.549 - 9014.7 1.579 0.74 / - 1.618 5014.7 1.827 0.449 - 9014.7 1.726 0.605 / -/ - - -RPTPROPS --- PROPS Reporting Options --- -/ - -REGIONS =========================================================== - - -FIPNUM - - 100*1 - 400*2 -/ - -EQLNUM - - 100*1 - 400*2 -/ - -RPTREGS - - / - -SOLUTION ============================================================ - -EQUIL - 7020.00 2700.00 7990.00 .00000 7020.00 .00000 0 0 5 / - 7200.00 3700.00 7300.00 .00000 7000.00 .00000 1 0 5 / - -RSVD 2 TABLES 3 NODES IN EACH FIELD 12:00 17 AUG 83 - 7000.0 1.0000 - 7990.0 1.0000 -/ - 7000.0 1.0000 - 7400.0 1.0000 -/ - -RPTRST --- Restart File Output Control --- -'BASIC=2' 'FLOWS' 'POT' 'PRES' / - - -SUMMARY =========================================================== - -FOPR - -WOPR - / - -FGPR - -FWPR - -FWIR - -FWCT - -FGOR - ---RUNSUM - -ALL - -MSUMLINS - -MSUMNEWT - -SEPARATE - -SCHEDULE =========================================================== - -DEBUG - 1 3 / - -DRSDT - 1.0E20 / - -RPTSCHED - 'PRES' 'SWAT' 'SGAS' 'RESTART=1' 'RS' 'WELLS=2' 'SUMMARY=2' - 'CPU=2' 'WELSPECS' 'NEWTON=2' / - -NOECHO - - -ECHO - -GRUPTREE - 'GRP1' 'FIELD' / - 'WGRP1' 'GRP1' / - 'WGRP2' 'GRP1' / -/ - -WELSPECS - 'PROD1' 'WGRP1' 1 5 7030 'OIL' 0.0 'STD' 'STOP' / - 'PROD2' 'WGRP2' 1 5 7030 'OIL' 0.0 'STD' 'STOP' / - 'WINJ1' 'WGRP1' 10 1 7030 'WAT' 0.0 'STD' 'STOP' / - 'WINJ2' 'WGRP2' 10 1 7030 'WAT' 0.0 'STD' 'STOP' / -/ - -COMPDAT - - 'PROD1' 1 5 2 2 3* 0.2 3* 'X' / - 'PROD1' 2 5 2 2 3* 0.2 3* 'X' / - 'PROD1' 3 5 2 2 3* 0.2 3* 'X' / - 'PROD2' 4 5 2 2 3* 0.2 3* 'X' / - 'PROD2' 5 5 2 2 3* 0.2 3* 'X' / - - 'WINJ1' 10 1 9 9 3* 0.2 3* 'X' / - 'WINJ1' 9 1 9 9 3* 0.2 3* 'X' / - 'WINJ1' 8 1 9 9 3* 0.2 3* 'X' / - 'WINJ2' 7 1 9 9 3* 0.2 3* 'X' / - 'WINJ2' 6 1 9 9 3* 0.2 3* 'X' / -/ - - - -UDQ --- test ---oil & liquid capacities at GEFAC = 0.8995 -DEFINE WUOPRL (WOPR PROD1 - 150) * 0.90 / -DEFINE WULPRL (WLPR PROD1 - 200) * 0.90 / -DEFINE WUOPRU (WOPR PROD2 - 250) * 0.80 / -DEFINE GUOPRU (GOPR GRP1 - 449) * 0.77 / -DEFINE WULPRU (WLPR PROD2 - 300) * 0.80 / -ASSIGN WULPRL 400. / -DEFINE FULPR (FLPR - 543) * 0.65 / -DEFINE WUOPRL (WOPR PROD1 - 170) * 0.60 / --- units -UNITS WUOPRL SM3/DAY / -UNITS WULPRL SM3/DAY / -UNITS GUOPRU SM3/DAY / -UNITS WUOPRU SM3/DAY / -UNITS WULPRU SM3/DAY / -UNITS FULPR SM3/DAY / --- -/ - --- Well production rate targets/limits: --- testing UDQs as production constrains -WCONPROD --- name status ctrl qo qw qg ql qr bhp thp vfp alq - 'PROD1' 'OPEN' 'GRUP' WUOPRU 1* 1* WULPRU 1* 60.0 / single wells -/ - - -WCONPROD --- name status ctrl qo qw qg ql qr bhp thp vfp alq - 'PROD2' 'OPEN' 'GRUP' WUOPRU 1* 1* WULPRU 1* 60.0 / single wells - / - -WCONINJE - 'WINJ1' 'WAT' 'OPEN' 'BHP' 1* 1200 3500 1* / - 'WINJ2' 'WAT' 'OPEN' 'BHP' 1* 800 3500 1* / - / - - -TUNING - / - / - / - -TSTEP - 4 -/ - - -END diff --git a/ThirdParty/custom-opm-common/opm-common/tests/WorkArea.cpp b/ThirdParty/custom-opm-common/opm-common/tests/WorkArea.cpp deleted file mode 100644 index 5d5ac56c1d..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/WorkArea.cpp +++ /dev/null @@ -1,72 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -// NOTE: This file is inteded to be copy-pasted into user code -// through an #include statement. - -#include - -#include - -namespace { - - class WorkArea - { - public: - explicit WorkArea(const std::string& subdir = "") - : root_(Opm::filesystem::temp_directory_path() / - Opm::unique_path("wrk-%%%%")) - , area_(root_) - , orig_(Opm::filesystem::current_path()) - { - if (! subdir.empty()) - this->area_ /= subdir; - - Opm::filesystem::create_directories(this->area_); - Opm::filesystem::current_path(this->area_); - } - - void copyIn(const std::string& filename) const - { - Opm::filesystem::copy_file(this->orig_ / filename, - this->area_ / filename); - } - - std::string currentWorkingDirectory() const - { - return this->area_.generic_string(); - } - - void makeSubDir(const std::string& dirname) - { - Opm::filesystem::create_directories(this->area_ / dirname); - } - - ~WorkArea() - { - Opm::filesystem::current_path(this->orig_); - Opm::filesystem::remove_all(this->root_); - } - - private: - Opm::filesystem::path root_; - Opm::filesystem::path area_; - Opm::filesystem::path orig_; - }; -} // Anonymous diff --git a/ThirdParty/custom-opm-common/opm-common/tests/act1.py b/ThirdParty/custom-opm-common/opm-common/tests/act1.py deleted file mode 100644 index c0ba1c24f2..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/act1.py +++ /dev/null @@ -1,15 +0,0 @@ -from math import sin -import random - -def run(): - pass - -print("sin(0) = {}".format(sin(0))) -#--- -if random.random() > 0.25: - print("Large outcome") -else: - print("Small result") -A = 100 -B = A / 10 -C = B * 20 diff --git a/ThirdParty/custom-opm-common/opm-common/tests/action_missing_run.py b/ThirdParty/custom-opm-common/opm-common/tests/action_missing_run.py deleted file mode 100644 index 0f43f2af18..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/action_missing_run.py +++ /dev/null @@ -1 +0,0 @@ -import math diff --git a/ThirdParty/custom-opm-common/opm-common/tests/action_syntax_error.py b/ThirdParty/custom-opm-common/opm-common/tests/action_syntax_error.py deleted file mode 100644 index 7908944f01..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/action_syntax_error.py +++ /dev/null @@ -1,7 +0,0 @@ -import math - - -Bug here - -def run(): - pass diff --git a/ThirdParty/custom-opm-common/opm-common/tests/expect-wdims.chldg.err.out b/ThirdParty/custom-opm-common/opm-common/tests/expect-wdims.chldg.err.out deleted file mode 100644 index 7bba05915d..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/expect-wdims.chldg.err.out +++ /dev/null @@ -1,6 +0,0 @@ - - -Errors: - RUNSPEC_GROUPSIZE_TOO_LARGE: Run uses maximum group size of 6, but allocates at most 4 in RUNSPEC section. Increase item 4 of WELLDIMS accordingly. - - diff --git a/ThirdParty/custom-opm-common/opm-common/tests/expect-wdims.err.out b/ThirdParty/custom-opm-common/opm-common/tests/expect-wdims.err.out deleted file mode 100644 index 84cfa28214..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/expect-wdims.err.out +++ /dev/null @@ -1,8 +0,0 @@ - - -Errors: - RUNSPEC_NUMWELLS_TOO_LARGE : Run uses 12 wells, but allocates at most 0 in RUNSPEC section. Increase item 1 of WELLDIMS accordingly. - RUNSPEC_CONNS_PER_WELL_TOO_LARGE: Run has well with 15 reservoir connections, but allocates at most 0 connections per well in RUNSPEC section. Increase item 2 of WELLDIMS accordingly. - RUNSPEC_NUMGROUPS_TOO_LARGE : Run uses 11 non-FIELD groups, but allocates at most 0 in RUNSPEC section. Increase item 3 of WELLDIMS accordingly. - RUNSPEC_GROUPSIZE_TOO_LARGE : Run uses maximum group size of 10, but allocates at most 0 in RUNSPEC section. Increase item 4 of WELLDIMS accordingly. - diff --git a/ThirdParty/custom-opm-common/opm-common/tests/group_group.DATA b/ThirdParty/custom-opm-common/opm-common/tests/group_group.DATA deleted file mode 100644 index 4ac989d63a..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/group_group.DATA +++ /dev/null @@ -1,537 +0,0 @@ --- Synthetic test deck based on Norne. This data set is meant to be a simple, --- well-documented deck for the behaviour of SUMMARY specified output. Data --- is mostly entered to *traceable* and does not necessarily make sense from --- a simulation point of view. - -START -10 MAI 2007 / -RUNSPEC - -TITLE -SUMMARYTESTS - --- A simple 10x10x10 cube. Simple to reason about, large enough for all tests -DIMENS - 10 10 10 / - -REGDIMS - 10 / - -OIL -GAS -WATER - -UNIFIN -UNIFOUT - -GRID - -DX -1000*1 / -DY -1000*1 / -DZ -1000*1 / -TOPS -100*1 / - --- Cell 2,1,10 is inactive -ACTNUM - 901*1 0 98*1 / - -PORO -1000*0.2 / - -PERMX - 1000*0.25/ - -COPY - PERMX PERMY / - PERMX PERMZ / -/ - - -REGIONS - -FIPNUM - 100*1 - 100*2 - 100*3 - 100*4 - 100*5 - 100*6 - 100*7 - 100*8 - 100*9 - 100*10 / - - -SUMMARY -DATE -PERFORMA --- --- Field Data --- Production Rates -FVPR -FWPR -FWPRH -FOPR -FOPRH -FGPR -FGPRH -FLPR -FLPRH -FGSR -FGCR -FNPR -- solvent ---FTPRSEA --- Injection Rates -FVIR -FWIR -FWIRH -FGIR -FNIR -- solvent -FGIRH --- Production Cummulatives -FVPT -FWPT -FOPT -FLPT -FLPTH -FGPT -FNPT -FOPTH -FGPTH -FWPTH -FGST -FGCT --- Injection Cummulatives -FVIT -FWIT -FWITH -FGIT -FNIT -FGITH --- In place -FWIP -FOIP -FGIP --- Ratios -FWCT -FWCTH -FGOR -FGORH - --- From model2 -FMWPR -FMWIN -FOE - --- Pressures -FPR - -BPR - 1 1 1 / - 1 1 2 / - 1 1 3 / - 1 1 4 / - 1 1 5 / - 1 1 6 / - 1 1 7 / - 1 1 8 / - 1 1 9 / - 1 1 10 / - 2 1 10 / -- This cell is not ACTIVE -/ - -BSGAS - 1 1 1 / -/ - - -BSWAT - 1 1 1 / -/ - - --- Region data -RPR -/ -ROPT -/ -RGPT -/ -RWPT -/ -RGFT -/ -RWFT -/ -ROIP -/ -ROP -/ -ROPR -/ -RGPR -/ -RWPR -/ -RGIR -/ -RGIT -/ -RWIR -/ -RWIT -/ -RWPT -/ -ROIPL -/ -ROIPG -/ -RGIP -/ -RGIPL -/ -RGIPG -/ -RWIP -/ -RPPO -/ - --- Group data -- -GPR -/ -GLPR -/ -GOPT -/ -GGPT -/ -GWPT -/ -GNPT -/ -GOPR -/ -GGPR -/ -GWPR -/ -GWPRH -/ -GGIR -/ -GNPR -/ - -GNIR -/ -GGIRH -/ -GGIT -/ -GNIT -/ -GGITH -/ -GWCT -/ -GWCTH -/ -GGOR -/ -GGORH -/ -GWIR -/ -GWIT -/ -GWIRH -/ -GWITH -/ -GOPRH -/ -GGPRH -/ -GLPRH -/ -GWPTH -/ -GOPTH -/ -GGPTH -/ -GLPTH -/ -GPRG -/ -GPRW -/ -GOPTF -/ -GOPTS -/ -GOPTH -/ -GOPRF -/ -GOPRS -/ -GOPRH -/ -GGPTF -/ -GGPTS -/ -GGPTH -/ -GGPTF -/ -GGPTS -/ -GGPTH -/ -GGLR -/ -GGLIR -/ -GGLRH -/ -GVPR -/ -GVPT -/ -GMCTP -/ -GOPP -/ -GVIR -/ -GVIT -/ -GVPRT -/ -GMWPR -/ -GMWIN -/ --- Well Data --- Production Rates -WWPR -/ -WWPRH -/ -WOPR -/ -WOPRH -/ -WGPR -/ -WNPR -/ -WGPRH -/ -WLPR -/ -WLPRH -/ - -WLPT -/ - -WLPTH -/ - - --- Production Cummulatives -WWPT -/ -WWPTH -/ -WOPT -/ -WOPTH -/ -WGPT -/ -WGPTH -/ -WNPT -/ - --- Tracers ---WTPRSEA ---/ ---WTPTSEA ---/ --- Injection Cummulatives --- Ratios -WWCT -/ -WWCTH -/ -WGOR -/ -WGORH -/ -WGLR -/ -WGLRH -/ - - --- Performance -WBHP -/ -WBHPH -/ -WTHP -/ -WTHPH -/ -WPI -/ -WBP -/ -WBP4 -/ - --- from model2 -WOPTF -/ -WOPTS -/ -WOPTH -/ -WOPRS -/ -WOPRF -/ -WGPTF -/ -WGPTS -/ -WGPRF -/ -WTPRS -/ -WGLIR -/ -WVPR -/ -WVPT -/ -WOPP -/ -WVIR -/ -WVIT -/ -WMCTL -/ - --- Water injection per connection -CWIR - * / -/ - - -CGIT -* / -/ - --- Production per connection --- Using all the different ways of specifying connections here --- as an informal test that we still get the data we want -CWPR - 'W_1' 1 1 1 / -/ - -COPR - 'W_1' / - 'W_2' / -/ - -CGPR - '*' / -/ - -CNFR - '*' / -/ - -CNPT - '*' / -/ - -CNIT - '*' / -/ - -CWPT - 'W_1' 1 1 1 / -/ - -COPT - 'W_1' / -/ - -CGPT - 'W_1' / - 'W_2' / -/ - ----- Connection production rates -----CGFR -----'E-4AH' / -----/ -----CWFR -----'E-2H' / -----/ - -SCHEDULE - -GRUPTREE - 'G_1' 'G' / - 'G_2' 'G' / -/ - - -WELSPECS - 'W_1' 'G_1' 1 1 3.33 'OIL' 7* / - 'W_2' 'G_2' 2 1 3.33 'OIL' 7* / -/ - --- Completion data. -COMPDAT --- 'Well' I J K1 K2 --- Passing 0 to I/J means they'll get the well head I/J - W_1 0 0 1 1 / -- Active index: 0 - W_2 0 0 1 1 / -- Active index: 1 - W_2 0 0 2 2 / -- Active index: 101 -/ - -WCONHIST --- history rates are set so that W_1 produces 1, W_2 produces 2 etc. --- index.offset. --- organised as oil-water-gas - W_1 'OPEN' ORAT 10.1 10 10.2 / - W_2 'OPEN' ORAT 20.1 20 20.2 / -/ - - -TSTEP --- register time steps (in days). This allows us to write *two* report steps (1 --- and 2. Without this, totals/accumulations would fail (segfault) when looking --- up historical rates and volumes. These volumes however don't change, i.e. --- every time step has the same set of values -10 10 / - - -TSTEP -10 10 / diff --git a/ThirdParty/custom-opm-common/opm-common/tests/include_example_pvt.txt b/ThirdParty/custom-opm-common/opm-common/tests/include_example_pvt.txt deleted file mode 100644 index a1c610430b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/include_example_pvt.txt +++ /dev/null @@ -1,224 +0,0 @@ --- This reservoir simulation deck is made available under the Open Database --- License: http://opendatacommons.org/licenses/odbl/1.0/. Any rights in --- individual contents of the database are licensed under the Database Contents --- License: http://opendatacommons.org/licenses/dbcl/1.0/ - --- Copyright (C) 2018 Equinor - --- This file is one of the include files for UDQ_ACTIONX.DATA and UDQ_WCONPROD.DATA. - - - --- *** G A S D A T A *** --- BAR (CP) --- -PVDG --- - 20.00 0.061895 0.01299 - 40.00 0.030252 0.01383 - 60.00 0.019844 0.01450 - 80.00 0.014686 0.01520 - 100.00 0.011627 0.01596 - 120.00 0.009619 0.01682 - 140.00 0.008213 0.01780 - 160.00 0.007184 0.01890 - 197.66 0.005820 0.02160 - 231.13 0.005042 0.02477 - 261.31 0.004561 0.02844 - 288.87 0.004255 0.03272 - 314.34 0.004062 0.03783 - 338.20 0.003953 0.04410 - 360.83 0.003947 0.05210 - 382.58 0.003915 0.06273 - 403.60 0.003912 0.07723 - 423.77 0.003907 0.09631 -/ - - --- *** O I L D A T A *** - --- RSO PRESSURE B-OIL VISCOSITY --- (BAR) (CP) -PVTO --- - 19.6 20.00 1.12324 0.96519 - 55.00 1.11698 1.03237 - 90.00 1.11127 1.10051 - 125.00 1.10602 1.16942 - 160.00 1.10119 1.23890 - 195.00 1.09672 1.30876 - 230.00 1.09256 1.37884 - 265.00 1.08868 1.44899 - 300.00 1.08504 1.51908 - 335.00 1.08164 1.58903 - 370.00 1.07843 1.65876 / - - 31.5 40.00 1.15981 0.85738 - 75.00 1.15288 0.91402 - 110.00 1.14657 0.97137 - 145.00 1.14079 1.02927 - 180.00 1.13546 1.08759 - 215.00 1.13053 1.14617 - 250.00 1.12595 1.20488 - 285.00 1.12168 1.26360 - 320.00 1.11768 1.32224 - 355.00 1.11394 1.38073 - 390.00 1.11042 1.43898 / - - 42.4 60.00 1.191 0.7868 - 95.00 1.184 0.8364 - 130.00 1.177 0.8866 - 165.00 1.171 0.9371 - 200.00 1.165 0.9880 - 235.00 1.160 1.0390 - 270.00 1.155 1.0902 - 305.00 1.150 1.1413 - 340.00 1.146 1.1922 - 375.00 1.142 1.2431 - 410.00 1.138 1.2936 / --- - 53.4 80.00 1.222 0.7175 - 115.00 1.214 0.7608 - 150.00 1.206 0.8045 - 185.00 1.200 0.8485 - 220.00 1.194 0.8928 - 255.00 1.188 0.9371 - 290.00 1.183 0.9815 - 325.00 1.178 1.0258 - 360.00 1.173 1.0700 - 395.00 1.169 1.1141 - 430.00 1.165 1.1579 / --- - 64.6 100.00 1.252 0.6544 - 135.00 1.244 0.6923 - 170.00 1.236 0.7305 - 205.00 1.229 0.7689 - 240.00 1.222 0.8075 - 275.00 1.216 0.8461 - 310.00 1.211 0.8847 - 345.00 1.205 0.9233 - 380.00 1.200 0.9618 - 415.00 1.196 1.0000 - 450.00 1.191 1.0381 / --- - 76.3 120.00 1.284 0.5978 - 155.00 1.275 0.6312 - 190.00 1.266 0.6648 - 225.00 1.259 0.6985 - 260.00 1.252 0.7323 - 295.00 1.245 0.7661 - 330.00 1.239 0.7999 - 365.00 1.234 0.8337 - 400.00 1.229 0.8673 - 435.00 1.224 0.9007 - 470.00 1.219 0.9340 / --- - 88.5 140.00 1.316 0.5477 - 175.00 1.307 0.5749 - 210.00 1.298 0.6020 - 245.00 1.290 0.6290 - 280.00 1.282 0.6559 - 315.00 1.276 0.6827 - 350.00 1.269 0.7095 - 385.00 1.263 0.7362 - 420.00 1.258 0.7629 - 455.00 1.253 0.7895 - 490.00 1.248 0.8161 / --- - 101.3 160.00 1.350 0.5020 - 195.00 1.340 0.5227 - 230.00 1.331 0.5432 - 265.00 1.322 0.5635 - 300.00 1.314 0.5835 - 335.00 1.307 0.6034 - 370.00 1.300 0.6231 - 405.00 1.294 0.6426 - 440.00 1.288 0.6620 - 475.00 1.283 0.6813 / --- - 114.7 180.00 1.385 0.4636 - 215.00 1.375 0.4820 - 250.00 1.365 0.5003 - 285.00 1.356 0.5183 - 320.00 1.347 0.5362 - 355.00 1.340 0.5538 - 390.00 1.333 0.5712 - 425.00 1.326 0.5885 - 460.00 1.320 0.6055 - 495.00 1.314 0.6222 / --- - 128.9 200.00 1.422 0.4290 - 235.00 1.411 0.4455 - 270.00 1.401 0.4618 - 305.00 1.391 0.4779 - 340.00 1.382 0.4938 - 375.00 1.374 0.5096 - 410.00 1.367 0.5252 - 445.00 1.360 0.5406 - 480.00 1.353 0.5558 / --- - 143.8 220.00 1.461 0.3977 - 255.00 1.449 0.4125 - 290.00 1.438 0.4271 - 325.00 1.428 0.4415 - 360.00 1.419 0.4558 - 395.00 1.410 0.4699 - 430.00 1.402 0.4839 - 465.00 1.395 0.4977 / --- - 159.5 240.00 1.502 0.3692 - 275.00 1.489 0.3825 - 310.00 1.478 0.3956 - 345.00 1.467 0.4086 - 380.00 1.458 0.4214 - 415.00 1.449 0.4341 - 450.00 1.440 0.4466 - 485.00 1.432 0.4590 / --- - 184.0 268.79 1.565 0.3324 - 303.79 1.551 0.3438 - 338.79 1.539 0.3551 - 373.79 1.528 0.3663 - 408.79 1.517 0.3774 - 443.79 1.508 0.3883 - 478.79 1.499 0.3991 / --- - 226.3 306.18 1.679 0.2855 - 341.18 1.664 0.2949 - 376.18 1.650 0.3041 - 411.18 1.637 0.3132 - 446.18 1.625 0.3222 - 481.18 1.614 0.3311 / --- - 268.6 339.93 1.792 0.2517 - 374.93 1.775 0.2597 - 409.93 1.760 0.2675 - 444.93 1.746 0.2751 - 479.93 1.732 0.2827 / --- - 310.9 371.44 1.903 0.2265 - 406.44 1.885 0.2333 - 441.44 1.868 0.2401 - 476.44 1.853 0.2468 / --- - 353.3 401.66 2.013 0.2071 - 436.66 1.993 0.2132 - 471.66 1.975 0.2192 / -/ --- ---****************************************************** ---* PVT WATER ---****************************************************** -PVTW - 344.83 1.0292 4.002E-05 0.36000 0.00E+00 / - --------------------------------------------------------- --- ---P(DATUM) CR -ROCK - 383.0 4.12E-05 / --- - - -DENSITY - 842.3 1001.1 0.900 / diff --git a/ThirdParty/custom-opm-common/opm-common/tests/include_example_summary.txt b/ThirdParty/custom-opm-common/opm-common/tests/include_example_summary.txt deleted file mode 100644 index 4200a2de0c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/include_example_summary.txt +++ /dev/null @@ -1,152 +0,0 @@ --- This reservoir simulation deck is made available under the Open Database --- License: http://opendatacommons.org/licenses/odbl/1.0/. Any rights in --- individual contents of the database are licensed under the Database Contents --- License: http://opendatacommons.org/licenses/dbcl/1.0/ - --- Copyright (C) 2018 Equinor - --- This file is one of the include files for UDQ_ACTIONX.DATA and UDQ_WCONPROD.DATA. - - --- --- Field Data ------------------------------ --- Production Rates ------------------------------ - -FOPR -FOPRH -FGPR -FGPRH -FWPR -FWPRH -FWIR - ------------------------------ --- In place ------------------------------ -FWIP -FOIP -FGIP --- Ratios -FWCT -FWCTH -FGOR -FGORH -FPR --- Region data -RPR -/ -ROIP -/ -ROIPL -/ -ROIPG -/ -RGIP -/ -RGIPL -/ -RGIPG -/ -RGPR -/ -RGPT -/ - -GWIR -/ -GVIR -/ - -GOPR -/ -GWPR -/ -GLPR -/ -GLPR -/ -GVPR -/ - - ------------------------------ --- Control Mode -- ------------------------------ --- Well Data --- Production Rates -WOPR -/ -WOPRH -/ -WGPR -/ -WGPRH -/ -WWPR -/ -WWPRH -/ --- Production Cummulatives -WOPT -/ -WWPT -/ -WGPT -/ -WOPTH -/ -WWPTH -/ -WGPTH -/ --- Ratios -WWCT -/ -WWCTH -/ -WGOR -/ -WGORH -/ -WWIR -/ -WWIRH -/ -WGIR -/ -WGIRH -/ -WWIT -/ -WWITH -/ -WGIT -/ -WGITH -/ --- Performance -WBHP -/ -WTHP -/ -WPI -/ -WVPR -/ -WBP -/ -WBP4 -/ -WBP9 -/ -WMCTL -/ -WLPR -/ --- --- Simulatior performance -TCPU -TCPUDAY - diff --git a/ThirdParty/custom-opm-common/opm-common/tests/include_grid_3x5x4.grdecl b/ThirdParty/custom-opm-common/opm-common/tests/include_grid_3x5x4.grdecl deleted file mode 100644 index b6afba64c4..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/include_grid_3x5x4.grdecl +++ /dev/null @@ -1,121 +0,0 @@ --- This reservoir simulation deck is made available under the Open Database --- License: http://opendatacommons.org/licenses/odbl/1.0/. Any rights in --- individual contents of the database are licensed under the Database Contents --- License: http://opendatacommons.org/licenses/dbcl/1.0/ - --- Copyright (C) 2018 Equinor - --- This file is one of the include files for UDQ_ACTIONX.DATA and UDQ_WCONPROD.DATA. - -SPECGRID - 3 5 4 1 F / - -COORD - 2000.0000 2000.0000 2000.0000 1999.5638 2000.0000 2039.9619 - 2199.8096 2000.0000 2008.7239 2199.3735 2000.0000 2048.6858 - 2399.6193 2000.0000 2017.4478 2399.1831 2000.0000 2057.4097 - 2599.4289 2000.0000 2026.1716 2598.9927 2000.0000 2066.1336 - 2000.0000 2200.0000 2000.0000 1999.5638 2200.0000 2039.9619 - 2199.8096 2200.0000 2008.7239 2199.3735 2200.0000 2048.6858 - 2399.6193 2200.0000 2017.4478 2399.1831 2200.0000 2057.4097 - 2599.4289 2200.0000 2026.1716 2598.9927 2200.0000 2066.1336 - 2000.0000 2400.0000 2000.0000 1999.5638 2400.0000 2039.9619 - 2199.8096 2400.0000 2008.7239 2199.3735 2400.0000 2048.6858 - 2399.6193 2400.0000 2017.4478 2399.1831 2400.0000 2057.4097 - 2599.4289 2400.0000 2026.1716 2598.9927 2400.0000 2066.1336 - 2000.0000 2600.0000 2000.0000 1999.5638 2600.0000 2039.9619 - 2199.8096 2600.0000 2008.7239 2199.3735 2600.0000 2048.6858 - 2399.6193 2600.0000 2017.4478 2399.1831 2600.0000 2057.4097 - 2599.4289 2600.0000 2026.1716 2598.9927 2600.0000 2066.1336 - 2000.0000 2800.0000 2000.0000 1999.5638 2800.0000 2039.9619 - 2199.8096 2800.0000 2008.7239 2199.3735 2800.0000 2048.6858 - 2399.6193 2800.0000 2017.4478 2399.1831 2800.0000 2057.4097 - 2599.4289 2800.0000 2026.1716 2598.9927 2800.0000 2066.1336 - 2000.0000 3000.0000 2000.0000 1999.5638 3000.0000 2039.9619 - 2199.8096 3000.0000 2008.7239 2199.3735 3000.0000 2048.6858 - 2399.6193 3000.0000 2017.4478 2399.1831 3000.0000 2057.4097 - 2599.4289 3000.0000 2026.1716 2598.9927 3000.0000 2066.1336 -/ - -ZCORN - 2000.0000 2008.7239 2008.7239 2017.4478 2017.4478 2026.1716 - 2000.0000 2008.7239 2008.7239 2017.4478 2017.4478 2026.1716 - 2000.0000 2008.7239 2008.7239 2017.4478 2017.4478 2026.1716 - 2000.0000 2008.7239 2008.7239 2017.4478 2017.4478 2026.1716 - 2000.0000 2008.7239 2008.7239 2017.4478 2017.4478 2026.1716 - 2000.0000 2008.7239 2008.7239 2017.4478 2017.4478 2026.1716 - 2000.0000 2008.7239 2008.7239 2017.4478 2017.4478 2026.1716 - 2000.0000 2008.7239 2008.7239 2017.4478 2017.4478 2026.1716 - 2000.0000 2008.7239 2008.7239 2017.4478 2017.4478 2026.1716 - 2000.0000 2008.7239 2008.7239 2017.4478 2017.4478 2026.1716 - 2009.9905 2018.7144 2018.7144 2027.4382 2027.4382 2036.1621 - 2009.9905 2018.7144 2018.7144 2027.4382 2027.4382 2036.1621 - 2009.9905 2018.7144 2018.7144 2027.4382 2027.4382 2036.1621 - 2009.9905 2018.7144 2018.7144 2027.4382 2027.4382 2036.1621 - 2009.9905 2018.7144 2018.7144 2027.4382 2027.4382 2036.1621 - 2009.9905 2018.7144 2018.7144 2027.4382 2027.4382 2036.1621 - 2009.9905 2018.7144 2018.7144 2027.4382 2027.4382 2036.1621 - 2009.9905 2018.7144 2018.7144 2027.4382 2027.4382 2036.1621 - 2009.9905 2018.7144 2018.7144 2027.4382 2027.4382 2036.1621 - 2009.9905 2018.7144 2018.7144 2027.4382 2027.4382 2036.1621 - 2009.9905 2018.7144 2018.7144 2027.4382 2027.4382 2036.1621 - 2009.9905 2018.7144 2018.7144 2027.4382 2027.4382 2036.1621 - 2009.9905 2018.7144 2018.7144 2027.4382 2027.4382 2036.1621 - 2009.9905 2018.7144 2018.7144 2027.4382 2027.4382 2036.1621 - 2009.9905 2018.7144 2018.7144 2027.4382 2027.4382 2036.1621 - 2009.9905 2018.7144 2018.7144 2027.4382 2027.4382 2036.1621 - 2009.9905 2018.7144 2018.7144 2027.4382 2027.4382 2036.1621 - 2009.9905 2018.7144 2018.7144 2027.4382 2027.4382 2036.1621 - 2009.9905 2018.7144 2018.7144 2027.4382 2027.4382 2036.1621 - 2009.9905 2018.7144 2018.7144 2027.4382 2027.4382 2036.1621 - 2019.9810 2028.7048 2028.7048 2037.4287 2037.4287 2046.1526 - 2019.9810 2028.7048 2028.7048 2037.4287 2037.4287 2046.1526 - 2019.9810 2028.7048 2028.7048 2037.4287 2037.4287 2046.1526 - 2019.9810 2028.7048 2028.7048 2037.4287 2037.4287 2046.1526 - 2019.9810 2028.7048 2028.7048 2037.4287 2037.4287 2046.1526 - 2019.9810 2028.7048 2028.7048 2037.4287 2037.4287 2046.1526 - 2019.9810 2028.7048 2028.7048 2037.4287 2037.4287 2046.1526 - 2019.9810 2028.7048 2028.7048 2037.4287 2037.4287 2046.1526 - 2019.9810 2028.7048 2028.7048 2037.4287 2037.4287 2046.1526 - 2019.9810 2028.7048 2028.7048 2037.4287 2037.4287 2046.1526 - 2019.9810 2028.7048 2028.7048 2037.4287 2037.4287 2046.1526 - 2019.9810 2028.7048 2028.7048 2037.4287 2037.4287 2046.1526 - 2019.9810 2028.7048 2028.7048 2037.4287 2037.4287 2046.1526 - 2019.9810 2028.7048 2028.7048 2037.4287 2037.4287 2046.1526 - 2019.9810 2028.7048 2028.7048 2037.4287 2037.4287 2046.1526 - 2019.9810 2028.7048 2028.7048 2037.4287 2037.4287 2046.1526 - 2019.9810 2028.7048 2028.7048 2037.4287 2037.4287 2046.1526 - 2019.9810 2028.7048 2028.7048 2037.4287 2037.4287 2046.1526 - 2019.9810 2028.7048 2028.7048 2037.4287 2037.4287 2046.1526 - 2019.9810 2028.7048 2028.7048 2037.4287 2037.4287 2046.1526 - 2029.9714 2038.6953 2038.6953 2047.4192 2047.4192 2056.1431 - 2029.9714 2038.6953 2038.6953 2047.4192 2047.4192 2056.1431 - 2029.9714 2038.6953 2038.6953 2047.4192 2047.4192 2056.1431 - 2029.9714 2038.6953 2038.6953 2047.4192 2047.4192 2056.1431 - 2029.9714 2038.6953 2038.6953 2047.4192 2047.4192 2056.1431 - 2029.9714 2038.6953 2038.6953 2047.4192 2047.4192 2056.1431 - 2029.9714 2038.6953 2038.6953 2047.4192 2047.4192 2056.1431 - 2029.9714 2038.6953 2038.6953 2047.4192 2047.4192 2056.1431 - 2029.9714 2038.6953 2038.6953 2047.4192 2047.4192 2056.1431 - 2029.9714 2038.6953 2038.6953 2047.4192 2047.4192 2056.1431 - 2029.9714 2038.6953 2038.6953 2047.4192 2047.4192 2056.1431 - 2029.9714 2038.6953 2038.6953 2047.4192 2047.4192 2056.1431 - 2029.9714 2038.6953 2038.6953 2047.4192 2047.4192 2056.1431 - 2029.9714 2038.6953 2038.6953 2047.4192 2047.4192 2056.1431 - 2029.9714 2038.6953 2038.6953 2047.4192 2047.4192 2056.1431 - 2029.9714 2038.6953 2038.6953 2047.4192 2047.4192 2056.1431 - 2029.9714 2038.6953 2038.6953 2047.4192 2047.4192 2056.1431 - 2029.9714 2038.6953 2038.6953 2047.4192 2047.4192 2056.1431 - 2029.9714 2038.6953 2038.6953 2047.4192 2047.4192 2056.1431 - 2029.9714 2038.6953 2038.6953 2047.4192 2047.4192 2056.1431 - 2039.9619 2048.6858 2048.6858 2057.4097 2057.4097 2066.1336 - 2039.9619 2048.6858 2048.6858 2057.4097 2057.4097 2066.1336 - 2039.9619 2048.6858 2048.6858 2057.4097 2057.4097 2066.1336 - 2039.9619 2048.6858 2048.6858 2057.4097 2057.4097 2066.1336 - 2039.9619 2048.6858 2048.6858 2057.4097 2057.4097 2066.1336 - 2039.9619 2048.6858 2048.6858 2057.4097 2057.4097 2066.1336 - 2039.9619 2048.6858 2048.6858 2057.4097 2057.4097 2066.1336 - 2039.9619 2048.6858 2048.6858 2057.4097 2057.4097 2066.1336 - 2039.9619 2048.6858 2048.6858 2057.4097 2057.4097 2066.1336 - 2039.9619 2048.6858 2048.6858 2057.4097 2057.4097 2066.1336 - / diff --git a/ThirdParty/custom-opm-common/opm-common/tests/include_sgof.txt b/ThirdParty/custom-opm-common/opm-common/tests/include_sgof.txt deleted file mode 100644 index 40ed2cc625..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/include_sgof.txt +++ /dev/null @@ -1,60 +0,0 @@ --- This reservoir simulation deck is made available under the Open Database --- License: http://opendatacommons.org/licenses/odbl/1.0/. Any rights in --- individual contents of the database are licensed under the Database Contents --- License: http://opendatacommons.org/licenses/dbcl/1.0/ - --- Copyright (C) 2018 Equinor - --- This file is one of the include files for UDQ_ACTIONX.DATA and UDQ_WCONPROD.DATA. - -SGOF --- Table 1 --- Lomeland parameters for W-phase: --- a = 0 --- b (E) = 1.76931 --- lambda (L) = 1.60918 --- mu (T) = 1.39034 --- Lomeland parameters for N-phase: --- a = 0 --- b (E) = 4.45273 --- lambda (L) = 3.94784 --- mu (T) = 0.878858 - 0 0 1 0 - 0.0183 0.001480314 0.8127534 0 - 0.0366 0.004696335 0.675857 0 - 0.0549 0.009371694 0.5622753 0 - 0.0732 0.01546379 0.4663578 0 - 0.0915 0.02298664 0.385133 0 - 0.1098 0.03197913 0.3164995 0 - 0.1281 0.04249268 0.2587408 0 - 0.1464 0.05458466 0.2103665 0 - 0.1647 0.06831379 0.1700565 0 - 0.183 0.08373629 0.1366388 0 - 0.2013 0.1009022 0.1090792 0 - 0.2196 0.1198516 0.08647139 0 - 0.2379 0.1406109 0.06802822 0 - 0.2562 0.1631885 0.05307051 0 - 0.2745 0.1875705 0.04101619 0 - 0.2928 0.2137163 0.03136912 0 - 0.3111 0.2415547 0.02370834 0 - 0.3294 0.2709792 0.01767817 0 - 0.3477 0.3018447 0.01297907 0 - 0.366 0.3339653 0.009359652 0 - 0.3843 0.3671116 0.006609586 0 - 0.4026 0.401011 0.00455345 0 - 0.4209 0.4353486 0.003045475 0 - 0.4392 0.4697695 0.001965044 0 - 0.4575 0.5038828 0.001212868 0 - 0.4758 0.5372664 0.0007077659 0 - 0.4941 0.5694721 0.000383946 0 - 0.5124 0.6000285 0.0001887263 0 - 0.5307 0.6284408 8.062741e-05 0 - 0.549 0.6541796 2.778023e-05 0 - 0.5673 0.676644 6.602397e-06 0 - 0.5856 0.6950468 7.048731e-07 0 - 0.61 0.71 0 0 - 0.6275 0.7825 0 0 - 0.645 0.855 0 0 - 0.6625 0.9275 0 0 - 0.68 1 0 0 -/ diff --git a/ThirdParty/custom-opm-common/opm-common/tests/include_swof.txt b/ThirdParty/custom-opm-common/opm-common/tests/include_swof.txt deleted file mode 100644 index 7596ccc386..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/include_swof.txt +++ /dev/null @@ -1,64 +0,0 @@ --- This reservoir simulation deck is made available under the Open Database --- License: http://opendatacommons.org/licenses/odbl/1.0/. Any rights in --- individual contents of the database are licensed under the Database Contents --- License: http://opendatacommons.org/licenses/dbcl/1.0/ - --- Copyright (C) 2018 Equinor - --- This file is one of the include files for UDQ_ACTIONX.DATA and UDQ_WCONPROD.DATA. - - -SWOF --- Table 1 --- Lomeland parameters for W-phase: --- a = 0 --- b (E) = 1.90518 --- lambda (L) = 4.61229 --- mu (T) = 0.776052 --- Lomeland parameters for N-phase: --- a = 0 --- b (E) = 5.76204 --- lambda (L) = 1.58165 --- mu (T) = 1.62976 - 0.32 0 1 0 - 0.3365 3.00925e-08 0.9804566 0 - 0.353 7.541952e-07 0.9391194 0 - 0.3695 5.01876e-06 0.8832853 0 - 0.386 1.941502e-05 0.8178788 0 - 0.4025 5.581854e-05 0.7471578 0 - 0.419 0.0001330574 0.674704 0 - 0.4355 0.0002787865 0.60333 0 - 0.452 0.0005316304 0.535068 0 - 0.4685 0.0009436502 0.4712431 0 - 0.485 0.001583182 0.412597 0 - 0.5015 0.002538082 0.3594268 0 - 0.518 0.00391938 0.3117147 0 - 0.5345 0.005865308 0.2692366 0 - 0.551 0.008545575 0.2316458 0 - 0.5675 0.01216566 0.1985336 0 - 0.584 0.01697073 0.169471 0 - 0.6005 0.0232485 0.1440352 0 - 0.617 0.03133019 0.1218258 0 - 0.6335 0.04158825 0.1024735 0 - 0.65 0.05442925 0.08564409 0 - 0.6665 0.07028023 0.0710386 0 - 0.683 0.08956673 0.05839253 0 - 0.6995 0.1126816 0.0474734 0 - 0.716 0.1399451 0.03807806 0 - 0.7325 0.1715593 0.03002991 0 - 0.749 0.2075632 0.02317622 0 - 0.7655 0.2478002 0.01738581 0 - 0.782 0.2919105 0.01254709 0 - 0.7985 0.3393688 0.008566921 0 - 0.815 0.3895919 0.005370427 0 - 0.8315 0.4421811 0.002903191 0 - 0.848 0.4975608 0.001139647 0 - 0.87 0.59168 0 0 - 0.8885714 0.6500114 0 0 - 0.9071429 0.7083429 0 0 - 0.9257143 0.7666743 0 0 - 0.9442857 0.8250057 0 0 - 0.9628571 0.8833371 0 0 - 0.9814286 0.9416686 0 0 - 1 1 0 0 -/ diff --git a/ThirdParty/custom-opm-common/opm-common/tests/json/example1.json b/ThirdParty/custom-opm-common/opm-common/tests/json/example1.json deleted file mode 100644 index 6bdf0fbcf7..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/json/example1.json +++ /dev/null @@ -1,6 +0,0 @@ -{"keywords": - [ - {"name" : "BPR", "items" : - [{"name":"ItemX" , "size_type":"SINGLE" , "value_type" : "FLOAT"}]} , - {"name" : "WWCT" , "size" : 0}]} - diff --git a/ThirdParty/custom-opm-common/opm-common/tests/json/jsonTests.cpp b/ThirdParty/custom-opm-common/opm-common/tests/json/jsonTests.cpp deleted file mode 100644 index f9efe6bda9..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/json/jsonTests.cpp +++ /dev/null @@ -1,283 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ -#include -#include -#include - -#define BOOST_TEST_MODULE jsonParserTests -#include -#include - -#include - -#include - -namespace framework = boost::unit_test::framework; - - - -BOOST_AUTO_TEST_CASE(ParseValidJson) { - std::string inline_json = "{\"key\": \"value\"}"; - BOOST_CHECK_NO_THROW(Json::JsonObject parser(inline_json)); -} - - -BOOST_AUTO_TEST_CASE(ParseValidJson_fromLiteral) { - BOOST_CHECK_NO_THROW(Json::JsonObject parser("{\"key\": \"value\"}")); -} - - - -BOOST_AUTO_TEST_CASE(ParseInvalidJSON_throw) { - std::string inline_json = "{\"key\": \"value\""; - BOOST_CHECK_THROW(Json::JsonObject parser(inline_json) , std::invalid_argument); -} - - - -BOOST_AUTO_TEST_CASE(ParsevalidJSON_getString) { - std::string inline_json = "{\"key\": \"value\"}"; - Json::JsonObject parser(inline_json); - - BOOST_CHECK_EQUAL( "value" , parser.get_string("key") ); -} - - -BOOST_AUTO_TEST_CASE(ParsevalidJSONString_asString) { - std::string inline_json = "{\"key\": \"value\"}"; - Json::JsonObject parser(inline_json); - Json::JsonObject value = parser.get_item("key"); - - BOOST_CHECK_EQUAL( "value" , value.as_string() ); -} - - -BOOST_AUTO_TEST_CASE(ParsevalidJSONnotString_asString_throws) { - std::string inline_json = "{\"key\": 100}"; - Json::JsonObject parser(inline_json); - Json::JsonObject value = parser.get_item("key"); - - BOOST_CHECK_THROW( value.as_string() , std::invalid_argument ); -} - - -BOOST_AUTO_TEST_CASE(ParsevalidJSONint_asNumber) { - std::string inline_json = "{\"key1\": 100, \"key2\" : 100.100 }"; - Json::JsonObject parser(inline_json); - Json::JsonObject value1 = parser.get_item("key1"); - Json::JsonObject value2 = parser.get_item("key2"); - - BOOST_CHECK_EQUAL( 100 , value1.as_int() ); - BOOST_CHECK( fabs(100.100 - value2.as_double()) < 0.00001 ); -} - -BOOST_AUTO_TEST_CASE(ParsevalidJSONint_isNumber) { - std::string inline_json = "{\"key1\": 100, \"key2\" : 100.100 , \"key3\": \"string\"}"; - Json::JsonObject parser(inline_json); - Json::JsonObject value1 = parser.get_item("key1"); - Json::JsonObject value2 = parser.get_item("key2"); - Json::JsonObject value3 = parser.get_item("key3"); - - BOOST_CHECK( value1.is_number()) ; - BOOST_CHECK( value2.is_number()) ; - BOOST_CHECK_EQUAL( false , value3.is_number()) ; -} - - -BOOST_AUTO_TEST_CASE(ParsevalidJSONnotNumber_asNumber_throws) { - std::string inline_json = "{\"key\": \"100X\"}"; - Json::JsonObject parser(inline_json); - Json::JsonObject value = parser.get_item("key"); - - BOOST_CHECK_THROW( value.as_int() , std::invalid_argument ); - BOOST_CHECK_THROW( value.as_double() , std::invalid_argument ); -} - - - -BOOST_AUTO_TEST_CASE(ParsevalidJSON_getInt_OK) { - std::string inline_json = "{\"key1\": 100 , \"key2\" : 200}"; - Json::JsonObject parser(inline_json); - BOOST_CHECK_EQUAL( 100 , parser.get_int("key1") ); - BOOST_CHECK_EQUAL( 200 , parser.get_int("key2") ); -} - - - -BOOST_AUTO_TEST_CASE(ParsevalidJSON_hasItem) { - std::string inline_json = "{\"key\": \"value\"}"; - Json::JsonObject parser(inline_json); - BOOST_CHECK( parser.has_item("key")); - BOOST_CHECK_EQUAL( false , parser.has_item("keyX")); -} - - - -BOOST_AUTO_TEST_CASE(ParsevalidJSON_getMissingValue) { - std::string inline_json = "{\"key\": \"value\"}"; - Json::JsonObject parser(inline_json); - BOOST_CHECK_THROW( parser.get_string("keyX") , std::invalid_argument ); -} - - -BOOST_AUTO_TEST_CASE(ParsevalidJSON_getNotScalar_throws) { - std::string inline_json = "{\"key\": \"value\", \"list\": [1,2,3]}"; - Json::JsonObject parser(inline_json); - BOOST_CHECK_EQUAL( "value" , parser.get_string("key")); - BOOST_CHECK_THROW( parser.get_string("list") , std::invalid_argument ); -} - - -BOOST_AUTO_TEST_CASE(ParsevalidJSON_getObject) { - std::string inline_json = "{\"key\": \"value\", \"list\": [1,2,3]}"; - Json::JsonObject parser(inline_json); - BOOST_CHECK_NO_THROW( Json::JsonObject object = parser.get_item("list") ); - BOOST_CHECK_NO_THROW( Json::JsonObject object = parser.get_item("key") ); -} - - -BOOST_AUTO_TEST_CASE(ParsevalidJSON_getObject_missing_throw) { - std::string inline_json = "{\"key\": \"value\", \"list\": [1,2,3]}"; - Json::JsonObject parser(inline_json); - BOOST_CHECK_THROW( parser.get_item("listX") , std::invalid_argument ); -} - - - -BOOST_AUTO_TEST_CASE(ParsevalidJSON_CheckArraySize) { - std::string inline_json = "{\"key\": \"value\", \"list\": [1,2,3]}"; - Json::JsonObject parser(inline_json); - Json::JsonObject object = parser.get_item("list"); - BOOST_CHECK_EQUAL( 3U , object.size() ); -} - - -BOOST_AUTO_TEST_CASE(ParsevalidJSON_isArray){ - std::string inline_json = "{\"key\": \"value\", \"list\": [1,2,3]}"; - Json::JsonObject parser(inline_json); - Json::JsonObject list = parser.get_item("list"); - Json::JsonObject key = parser.get_item("key"); - - BOOST_CHECK( list.is_array() ); - BOOST_CHECK_EQUAL( false , key.is_array( ) ); -} - - -BOOST_AUTO_TEST_CASE(ParsevalidJSON_arrayGet) { - std::string inline_json = "{\"key\": \"value\", \"list\": [1,2,3]}"; - Json::JsonObject parser(inline_json); - Json::JsonObject list = parser.get_item("list"); - Json::JsonObject key = parser.get_item("key"); - - BOOST_CHECK_NO_THROW( list.get_array_item( 0U )); - BOOST_CHECK_NO_THROW( list.get_array_item( 1U )); - BOOST_CHECK_NO_THROW( list.get_array_item( 2U )); - - BOOST_CHECK_THROW( list.get_array_item( 3U ) , std::invalid_argument ); - BOOST_CHECK_THROW( key.get_array_item( 0U ) , std::invalid_argument ); -} - - -BOOST_AUTO_TEST_CASE(parseJSONString_testType) { - std::string inline_json = "{\"item\": \"string\"}"; - Json::JsonObject json(inline_json); - Json::JsonObject item = json.get_item( "item" ); - - BOOST_CHECK( item.is_string() ); - BOOST_CHECK_EQUAL( false , item.is_number( ) ); - BOOST_CHECK_EQUAL( false , item.is_array( ) ); - BOOST_CHECK_EQUAL( false , item.is_object( ) ); -} - - -BOOST_AUTO_TEST_CASE(parseJSONNumber_testType) { - std::string inline_json = "{\"item\": 100}"; - Json::JsonObject json(inline_json); - Json::JsonObject item = json.get_item( "item" ); - - BOOST_CHECK_EQUAL( true , item.is_number( ) ); - BOOST_CHECK_EQUAL( false , item.is_string() ); - BOOST_CHECK_EQUAL( false , item.is_array( ) ); - BOOST_CHECK_EQUAL( false , item.is_object( ) ); -} - - -BOOST_AUTO_TEST_CASE(parseJSONArray_testType) { - std::string inline_json = "{\"item\": [1,2,3]}"; - Json::JsonObject json(inline_json); - Json::JsonObject item = json.get_item( "item" ); - - BOOST_CHECK_EQUAL( false , item.is_number( ) ); - BOOST_CHECK_EQUAL( false , item.is_string() ); - BOOST_CHECK_EQUAL( true , item.is_array( ) ); - BOOST_CHECK_EQUAL( false , item.is_object( ) ); -} - - -BOOST_AUTO_TEST_CASE(parseJSONObject_testType) { - std::string inline_json = "{\"item\": {\"list\": [0,1,2]}}"; - Json::JsonObject json(inline_json); - Json::JsonObject item = json.get_item( "item" ); - - BOOST_CHECK_EQUAL( false , item.is_number( ) ); - BOOST_CHECK_EQUAL( false , item.is_string() ); - BOOST_CHECK_EQUAL( false , item.is_array( ) ); - BOOST_CHECK_EQUAL( true , item.is_object( ) ); -} - - - -BOOST_AUTO_TEST_CASE(Parse_fileDoesNotExist_Throws) { - Opm::filesystem::path jsonFile("file/does/not/exist"); - BOOST_CHECK_THROW( Json::JsonObject parser(jsonFile) , std::invalid_argument); -} - - - -BOOST_AUTO_TEST_CASE(Parse_fileExists_OK) { - const auto arg = framework::master_test_suite().argv[1]; - Opm::filesystem::path jsonFile(arg); - BOOST_CHECK_NO_THROW( Json::JsonObject parser(jsonFile) ); -} - - -BOOST_AUTO_TEST_CASE(to_string_ok) { - const auto arg = framework::master_test_suite().argv[1]; - Opm::filesystem::path jsonFile(arg); - Json::JsonObject parser(jsonFile); - std::string json_string = - "{\n" - " \"keywords\": [{\n" - " \"name\": \"BPR\",\n" - " \"items\": [{\n" - " \"name\": \"ItemX\",\n" - " \"size_type\": \"SINGLE\",\n" - " \"value_type\": \"FLOAT\"\n" - " }]\n" - " }, {\n" - " \"name\": \"WWCT\",\n" - " \"size\": 0\n" - " }]\n" - "}"; - - BOOST_CHECK_EQUAL( parser.to_string() , json_string); -} - - - diff --git a/ThirdParty/custom-opm-common/opm-common/tests/msim/MSIM_PYACTION.DATA b/ThirdParty/custom-opm-common/opm-common/tests/msim/MSIM_PYACTION.DATA deleted file mode 100644 index fe9e559d83..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/msim/MSIM_PYACTION.DATA +++ /dev/null @@ -1,549 +0,0 @@ --- This reservoir simulation deck is made available under the Open Database --- License: http://opendatacommons.org/licenses/odbl/1.0/. Any rights in --- individual contents of the database are licensed under the Database Contents --- License: http://opendatacommons.org/licenses/dbcl/1.0/ - --- Copyright (C) 2015 Statoil - --- This simulation is based on the data given in --- 'Comparison of Solutions to a Three-Dimensional --- Black-Oil Reservoir Simulation Problem' by Aziz S. Odeh, --- Journal of Petroleum Technology, January 1981 - - ---------------------------------------------------------------------------- ------------------------- SPE1 - CASE 1 ------------------------------------ ---------------------------------------------------------------------------- - -RUNSPEC --- ------------------------------------------------------------------------- - -TITLE - SPE1 - CASE 1 - -DIMENS - 10 10 3 / - --- The number of equilibration regions is inferred from the EQLDIMS --- keyword. -EQLDIMS -/ - --- The number of PVTW tables is inferred from the TABDIMS keyword; --- when no data is included in the keyword the default values are used. -TABDIMS -/ - -OIL -GAS -WATER -DISGAS --- As seen from figure 4 in Odeh, GOR is increasing with time, --- which means that dissolved gas is present - -FIELD - -START - 1 'DEC' 2014 / - -WELLDIMS --- Item 1: maximum number of wells in the model --- - there are two wells in the problem; injector and producer --- Item 2: maximum number of grid blocks connected to any one well --- - must be one as the wells are located at specific grid blocks --- Item 3: maximum number of groups in the model --- - we are dealing with only one 'group' --- Item 4: maximum number of wells in any one group --- - there must be two wells in a group as there are two wells in total - 5 1 1 2 / - -UNIFOUT - -UDQDIMS - 50 25 0 50 50 0 0 50 0 20 / - -GRID - --- The INIT keyword is used to request an .INIT file. The .INIT file --- is written before the simulation actually starts, and contains grid --- properties and saturation tables as inferred from the input --- deck. There are no other keywords which can be used to configure --- exactly what is written to the .INIT file. -INIT - - --- ------------------------------------------------------------------------- -NOECHO - -DX --- There are in total 300 cells with length 1000ft in x-direction - 300*1000 / -DY --- There are in total 300 cells with length 1000ft in y-direction - 300*1000 / -DZ --- The layers are 20, 30 and 50 ft thick, in each layer there are 100 cells - 100*20 100*30 100*50 / - -TOPS --- The depth of the top of each grid block - 100*8325 / - -PORO --- Constant porosity of 0.3 throughout all 300 grid cells - 300*0.3 / - -PERMX --- The layers have perm. 500mD, 50mD and 200mD, respectively. - 100*500 100*50 100*200 / - -PERMY --- Equal to PERMX - 100*500 100*50 100*200 / - -PERMZ --- Cannot find perm. in z-direction in Odeh's paper --- For the time being, we will assume PERMZ equal to PERMX and PERMY: - 100*500 100*50 100*200 / -ECHO - -PROPS --- ------------------------------------------------------------------------- - -PVTW --- Item 1: pressure reference (psia) --- Item 2: water FVF (rb per bbl or rb per stb) --- Item 3: water compressibility (psi^{-1}) --- Item 4: water viscosity (cp) --- Item 5: water 'viscosibility' (psi^{-1}) - --- Using values from Norne: --- In METRIC units: --- 277.0 1.038 4.67E-5 0.318 0.0 / --- In FIELD units: - 4017.55 1.038 3.22E-6 0.318 0.0 / - -ROCK --- Item 1: reference pressure (psia) --- Item 2: rock compressibility (psi^{-1}) - --- Using values from table 1 in Odeh: - 14.7 3E-6 / - -SWOF --- Column 1: water saturation --- - this has been set to (almost) equally spaced values from 0.12 to 1 --- Column 2: water relative permeability --- - generated from the Corey-type approx. formula --- the coeffisient is set to 10e-5, S_{orw}=0 and S_{wi}=0.12 --- Column 3: oil relative permeability when only oil and water are present --- - we will use the same values as in column 3 in SGOF. --- This is not really correct, but since only the first --- two values are of importance, this does not really matter --- Column 4: water-oil capillary pressure (psi) - -0.12 0 1 0 -0.18 4.64876033057851E-008 1 0 -0.24 0.000000186 0.997 0 -0.3 4.18388429752066E-007 0.98 0 -0.36 7.43801652892562E-007 0.7 0 -0.42 1.16219008264463E-006 0.35 0 -0.48 1.67355371900826E-006 0.2 0 -0.54 2.27789256198347E-006 0.09 0 -0.6 2.97520661157025E-006 0.021 0 -0.66 3.7654958677686E-006 0.01 0 -0.72 4.64876033057851E-006 0.001 0 -0.78 0.000005625 0.0001 0 -0.84 6.69421487603306E-006 0 0 -0.91 8.05914256198347E-006 0 0 -1 0.00001 0 0 / - - -SGOF --- Column 1: gas saturation --- Column 2: gas relative permeability --- Column 3: oil relative permeability when oil, gas and connate water are present --- Column 4: oil-gas capillary pressure (psi) --- - stated to be zero in Odeh's paper - --- Values in column 1-3 are taken from table 3 in Odeh's paper: -0 0 1 0 -0.001 0 1 0 -0.02 0 0.997 0 -0.05 0.005 0.980 0 -0.12 0.025 0.700 0 -0.2 0.075 0.350 0 -0.25 0.125 0.200 0 -0.3 0.190 0.090 0 -0.4 0.410 0.021 0 -0.45 0.60 0.010 0 -0.5 0.72 0.001 0 -0.6 0.87 0.0001 0 -0.7 0.94 0.000 0 -0.85 0.98 0.000 0 -0.88 0.984 0.000 0 / ---1.00 1.0 0.000 0 / --- Warning from Eclipse: first sat. value in SWOF + last sat. value in SGOF --- must not be greater than 1, but Eclipse still runs --- Flow needs the sum to be excactly 1 so I added a row with gas sat. = 0.88 --- The corresponding krg value was estimated by assuming linear rel. between --- gas sat. and krw. between gas sat. 0.85 and 1.00 (the last two values given) - -DENSITY --- Density (lb per ft³) at surface cond. of --- oil, water and gas, respectively (in that order) - --- Using values from Norne: --- In METRIC units: --- 859.5 1033.0 0.854 / --- In FIELD units: - 53.66 64.49 0.0533 / - -PVDG --- Column 1: gas phase pressure (psia) --- Column 2: gas formation volume factor (rb per Mscf) --- - in Odeh's paper the units are said to be given in rb per bbl, --- but this is assumed to be a mistake: FVF-values in Odeh's paper --- are given in rb per scf, not rb per bbl. This will be in --- agreement with conventions --- Column 3: gas viscosity (cP) - --- Using values from lower right table in Odeh's table 2: -14.700 166.666 0.008000 -264.70 12.0930 0.009600 -514.70 6.27400 0.011200 -1014.7 3.19700 0.014000 -2014.7 1.61400 0.018900 -2514.7 1.29400 0.020800 -3014.7 1.08000 0.022800 -4014.7 0.81100 0.026800 -5014.7 0.64900 0.030900 -9014.7 0.38600 0.047000 / - -PVTO --- Column 1: dissolved gas-oil ratio (Mscf per stb) --- Column 2: bubble point pressure (psia) --- Column 3: oil FVF for saturated oil (rb per stb) --- Column 4: oil viscosity for saturated oil (cP) - --- Use values from top left table in Odeh's table 2: -0.0010 14.7 1.0620 1.0400 / -0.0905 264.7 1.1500 0.9750 / -0.1800 514.7 1.2070 0.9100 / -0.3710 1014.7 1.2950 0.8300 / -0.6360 2014.7 1.4350 0.6950 / -0.7750 2514.7 1.5000 0.6410 / -0.9300 3014.7 1.5650 0.5940 / -1.2700 4014.7 1.6950 0.5100 - 9014.7 1.5790 0.7400 / -1.6180 5014.7 1.8270 0.4490 - 9014.7 1.7370 0.6310 / --- It is required to enter data for undersaturated oil for the highest GOR --- (i.e. the last row) in the PVTO table. --- In order to fulfill this requirement, values for oil FVF and viscosity --- at 9014.7psia and GOR=1.618 for undersaturated oil have been approximated: --- It has been assumed that there is a linear relation between the GOR --- and the FVF when keeping the pressure constant at 9014.7psia. --- From Odeh we know that (at 9014.7psia) the FVF is 2.357 at GOR=2.984 --- for saturated oil and that the FVF is 1.579 at GOR=1.27 for undersaturated oil, --- so it is possible to use the assumption described above. --- An equivalent approximation for the viscosity has been used. -/ - -SOLUTION --- ------------------------------------------------------------------------- - -EQUIL --- Item 1: datum depth (ft) --- Item 2: pressure at datum depth (psia) --- - Odeh's table 1 says that initial reservoir pressure is --- 4800 psi at 8400ft, which explains choice of item 1 and 2 --- Item 3: depth of water-oil contact (ft) --- - chosen to be directly under the reservoir --- Item 4: oil-water capillary pressure at the water oil contact (psi) --- - given to be 0 in Odeh's paper --- Item 5: depth of gas-oil contact (ft) --- - chosen to be directly above the reservoir --- Item 6: gas-oil capillary pressure at gas-oil contact (psi) --- - given to be 0 in Odeh's paper --- Item 7: RSVD-table --- Item 8: RVVD-table --- Item 9: Set to 0 as this is the only value supported by OPM - --- Item #: 1 2 3 4 5 6 7 8 9 - 8400 4800 8450 0 8300 0 1 0 0 / - -RSVD --- Dissolved GOR is initially constant with depth through the reservoir. --- The reason is that the initial reservoir pressure given is higher ----than the bubble point presssure of 4014.7psia, meaning that there is no --- free gas initially present. -8300 1.270 -8450 1.270 / - -SUMMARY --- ------------------------------------------------------------------------- - -FOPR - -WGOR -/ -WOPR -/ -WWPR -/ -WWCT -/ - - -FGOR - --- 2a) Pressures of the cell where the injector and producer are located -BPR -1 1 1 / -10 10 3 / -/ - --- 2b) Gas saturation at grid points given in Odeh's paper -BGSAT -1 1 1 / -1 1 2 / -1 1 3 / -10 1 1 / -10 1 2 / -10 1 3 / -10 10 1 / -10 10 2 / -10 10 3 / -/ - --- In order to compare Eclipse with Flow: -WBHP -/ - -WGIR - 'INJ' -/ - -WGIT - 'INJ' -/ - -WGPR -/ - -WGPT -/ - -WOPR -/ - -WOPT -/ - -WWIR -/ -WWIT -/ -WWPR -/ -WWPT -/ -WUBHP -/ -WUOPRL -/ -WUWCT -/ - -FOPR - -FUOPR - - -SCHEDULE --- ------------------------------------------------------------------------- -RPTSCHED - 'PRES' 'SGAS' 'RS' 'WELLS' 'WELSPECS' / - -RPTRST - 'BASIC=1' / - -UDQ - ASSIGN WUBHP 11 / - ASSIGN WUOPRL 20 / - ASSIGN WUBHP P2 12 / - ASSIGN WUBHP P3 13 / - ASSIGN WUBHP P4 14 / - UNITS WUBHP 'BARSA' / - UNITS WUOPRL 'SM3/DAY' / - DEFINE WUWCT WWPR / (WWPR + WOPR) / - UNITS WUWCT '1' / - DEFINE FUOPR SUM(WOPR) / - UNITS FUOPR 'SM3/DAY' / -/ - - - --- If no resolution (i.e. case 1), the two following lines must be added: -DRSDT - 0 / --- if DRSDT is set to 0, GOR cannot rise and free gas does not --- dissolve in undersaturated oil -> constant bubble point pressure - -WELSPECS --- Item #: 1 2 3 4 5 6 - 'P1' 'G1' 3 3 8400 'OIL' / - 'P2' 'G1' 4 4 8400 'OIL' / - 'P3' 'G1' 5 5 8400 'OIL' / - 'P4' 'G1' 6 6 8400 'OIL' / - 'INJ' 'G1' 1 1 8335 'GAS' / -/ --- Coordinates in item 3-4 are retrieved from Odeh's figure 1 and 2 --- Note that the depth at the midpoint of the well grid blocks --- has been used as reference depth for bottom hole pressure in item 5 - -COMPDAT --- Item #: 1 2 3 4 5 6 7 8 9 - 'P1' 3 3 3 3 'OPEN' 1* 1* 0.5 / - 'P2' 4 4 3 3 'OPEN' 1* 1* 0.5 / - 'P3' 5 5 3 3 'OPEN' 1* 1* 0.5 / - 'P4' 6 6 3 3 'OPEN' 1* 1* 0.5 / - 'INJ' 1 1 1 1 'OPEN' 1* 1* 0.5 / -/ --- Coordinates in item 2-5 are retreived from Odeh's figure 1 and 2 --- Item 9 is the well bore internal diameter, --- the radius is given to be 0.25ft in Odeh's paper - - -WCONPROD --- Item #:1 2 3 4 5 9 - 'P1' 'OPEN' 'ORAT' 5000 4* 1000 / - 'P2' 'OPEN' 'ORAT' 5000 4* 1000 / - 'P3' 'OPEN' 'ORAT' 5000 4* 1000 / - 'P4' 'OPEN' 'ORAT' 5000 4* 1000 / -/ - --- It is stated in Odeh's paper that the maximum oil prod. rate --- is 20 000stb per day which explains the choice of value in item 4. --- The items > 4 are defaulted with the exception of item 9, --- the BHP lower limit, which is given to be 1000psia in Odeh's paper - -WCONINJE --- Item #:1 2 3 4 5 6 7 - 'INJ' 'GAS' 'OPEN' 'RATE' 100000 1* 9014 / -/ --- Stated in Odeh that gas inj. rate (item 5) is 100MMscf per day --- BHP upper limit (item 7) should not be exceeding the highest --- pressure in the PVT table=9014.7psia (default is 100 000psia) - -PYACTION - ACTION1 SINGLE / - 'action1.py' / - -PYACTION - ACTION2 UNLIMITED / - 'action2.py' / - -PYACTION - ACTION3 FIRST_TRUE / - 'action2.py' / - -DATES - 1 'JAN' 2015 / -/ - -DATES - 1 'FEB' 2015 / -/ - -DATES - 1 'MAR' 2015 / -/ - -DATES - 1 'APR' 2015 / -/ - -DATES - 1 'MAI' 2015 / -/ - -DATES - 1 'JUN' 2015 / -/ - -DATES - 1 'JUL' 2015 / -/ - -DATES - 1 'AUG' 2015 / -/ - -DATES - 1 'SEP' 2015 / -/ - -DATES - 1 'OCT' 2015 / -/ - -DATES - 1 'NOV' 2015 / -/ - -DATES - 1 'DEC' 2015 / -/ - -DATES - 1 'JAN' 2016 / -/ - -DATES - 1 'FEB' 2016 / -/ - -DATES - 1 'MAR' 2016 / -/ - -DATES - 1 'APR' 2016 / -/ - -DATES - 1 'MAI' 2016 / -/ - -DATES - 1 'JUN' 2016 / -/ - -DATES - 1 'JUL' 2016 / -/ - -DATES - 1 'AUG' 2016 / -/ - -DATES - 1 'SEP' 2016 / -/ - -DATES - 1 'OCT' 2016 / -/ - -DATES - 1 'NOV' 2016 / -/ - -DATES - 1 'DEC' 2016 / -/ - - -END \ No newline at end of file diff --git a/ThirdParty/custom-opm-common/opm-common/tests/msim/action1.py b/ThirdParty/custom-opm-common/opm-common/tests/msim/action1.py deleted file mode 100644 index 90a9a6f71c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/msim/action1.py +++ /dev/null @@ -1,4 +0,0 @@ -import math - -def run(ecl_state, schedule, report_step, summary_state): - pass diff --git a/ThirdParty/custom-opm-common/opm-common/tests/msim/action2.py b/ThirdParty/custom-opm-common/opm-common/tests/msim/action2.py deleted file mode 100644 index 2b192d85dc..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/msim/action2.py +++ /dev/null @@ -1,9 +0,0 @@ -def run(ecl_state, schedule, report_step, sim): - wells_shut = False - - for well in sim.wells: - if sim.well_var(well, "WWCT") > 0.50: - schedule.shut_well(well, report_step) - wells_shut = True - - return wells_shut diff --git a/ThirdParty/custom-opm-common/opm-common/tests/msim/actionx1.include b/ThirdParty/custom-opm-common/opm-common/tests/msim/actionx1.include deleted file mode 100644 index f9bd4a74fb..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/msim/actionx1.include +++ /dev/null @@ -1,551 +0,0 @@ -std::string actionx1 = R"( --- This reservoir simulation deck is made available under the Open Database --- License: http://opendatacommons.org/licenses/odbl/1.0/. Any rights in --- individual contents of the database are licensed under the Database Contents --- License: http://opendatacommons.org/licenses/dbcl/1.0/ - --- Copyright (C) 2015 Statoil - --- This simulation is based on the data given in --- 'Comparison of Solutions to a Three-Dimensional --- Black-Oil Reservoir Simulation Problem' by Aziz S. Odeh, --- Journal of Petroleum Technology, January 1981 - - ---------------------------------------------------------------------------- ------------------------- SPE1 - CASE 1 ------------------------------------ ---------------------------------------------------------------------------- - -RUNSPEC --- ------------------------------------------------------------------------- - -TITLE - SPE1 - CASE 1 - -DIMENS - 10 10 3 / - --- The number of equilibration regions is inferred from the EQLDIMS --- keyword. -EQLDIMS -/ - --- The number of PVTW tables is inferred from the TABDIMS keyword; --- when no data is included in the keyword the default values are used. -TABDIMS -/ - -OIL -GAS -WATER -DISGAS --- As seen from figure 4 in Odeh, GOR is increasing with time, --- which means that dissolved gas is present - -FIELD - -START - 1 'DEC' 2014 / - -WELLDIMS --- Item 1: maximum number of wells in the model --- - there are two wells in the problem; injector and producer --- Item 2: maximum number of grid blocks connected to any one well --- - must be one as the wells are located at specific grid blocks --- Item 3: maximum number of groups in the model --- - we are dealing with only one 'group' --- Item 4: maximum number of wells in any one group --- - there must be two wells in a group as there are two wells in total - 5 1 1 2 / - -UNIFOUT - -UDQDIMS - 50 25 0 50 50 0 0 50 0 20 / - -GRID - --- The INIT keyword is used to request an .INIT file. The .INIT file --- is written before the simulation actually starts, and contains grid --- properties and saturation tables as inferred from the input --- deck. There are no other keywords which can be used to configure --- exactly what is written to the .INIT file. -INIT - - --- ------------------------------------------------------------------------- -NOECHO - -DX --- There are in total 300 cells with length 1000ft in x-direction - 300*1000 / -DY --- There are in total 300 cells with length 1000ft in y-direction - 300*1000 / -DZ --- The layers are 20, 30 and 50 ft thick, in each layer there are 100 cells - 100*20 100*30 100*50 / - -TOPS --- The depth of the top of each grid block - 100*8325 / - -PORO --- Constant porosity of 0.3 throughout all 300 grid cells - 300*0.3 / - -PERMX --- The layers have perm. 500mD, 50mD and 200mD, respectively. - 100*500 100*50 100*200 / - -PERMY --- Equal to PERMX - 100*500 100*50 100*200 / - -PERMZ --- Cannot find perm. in z-direction in Odeh's paper --- For the time being, we will assume PERMZ equal to PERMX and PERMY: - 100*500 100*50 100*200 / -ECHO - -PROPS --- ------------------------------------------------------------------------- - -PVTW --- Item 1: pressure reference (psia) --- Item 2: water FVF (rb per bbl or rb per stb) --- Item 3: water compressibility (psi^{-1}) --- Item 4: water viscosity (cp) --- Item 5: water 'viscosibility' (psi^{-1}) - --- Using values from Norne: --- In METRIC units: --- 277.0 1.038 4.67E-5 0.318 0.0 / --- In FIELD units: - 4017.55 1.038 3.22E-6 0.318 0.0 / - -ROCK --- Item 1: reference pressure (psia) --- Item 2: rock compressibility (psi^{-1}) - --- Using values from table 1 in Odeh: - 14.7 3E-6 / - -SWOF --- Column 1: water saturation --- - this has been set to (almost) equally spaced values from 0.12 to 1 --- Column 2: water relative permeability --- - generated from the Corey-type approx. formula --- the coeffisient is set to 10e-5, S_{orw}=0 and S_{wi}=0.12 --- Column 3: oil relative permeability when only oil and water are present --- - we will use the same values as in column 3 in SGOF. --- This is not really correct, but since only the first --- two values are of importance, this does not really matter --- Column 4: water-oil capillary pressure (psi) - -0.12 0 1 0 -0.18 4.64876033057851E-008 1 0 -0.24 0.000000186 0.997 0 -0.3 4.18388429752066E-007 0.98 0 -0.36 7.43801652892562E-007 0.7 0 -0.42 1.16219008264463E-006 0.35 0 -0.48 1.67355371900826E-006 0.2 0 -0.54 2.27789256198347E-006 0.09 0 -0.6 2.97520661157025E-006 0.021 0 -0.66 3.7654958677686E-006 0.01 0 -0.72 4.64876033057851E-006 0.001 0 -0.78 0.000005625 0.0001 0 -0.84 6.69421487603306E-006 0 0 -0.91 8.05914256198347E-006 0 0 -1 0.00001 0 0 / - - -SGOF --- Column 1: gas saturation --- Column 2: gas relative permeability --- Column 3: oil relative permeability when oil, gas and connate water are present --- Column 4: oil-gas capillary pressure (psi) --- - stated to be zero in Odeh's paper - --- Values in column 1-3 are taken from table 3 in Odeh's paper: -0 0 1 0 -0.001 0 1 0 -0.02 0 0.997 0 -0.05 0.005 0.980 0 -0.12 0.025 0.700 0 -0.2 0.075 0.350 0 -0.25 0.125 0.200 0 -0.3 0.190 0.090 0 -0.4 0.410 0.021 0 -0.45 0.60 0.010 0 -0.5 0.72 0.001 0 -0.6 0.87 0.0001 0 -0.7 0.94 0.000 0 -0.85 0.98 0.000 0 -0.88 0.984 0.000 0 / ---1.00 1.0 0.000 0 / --- Warning from Eclipse: first sat. value in SWOF + last sat. value in SGOF --- must not be greater than 1, but Eclipse still runs --- Flow needs the sum to be excactly 1 so I added a row with gas sat. = 0.88 --- The corresponding krg value was estimated by assuming linear rel. between --- gas sat. and krw. between gas sat. 0.85 and 1.00 (the last two values given) - -DENSITY --- Density (lb per ft³) at surface cond. of --- oil, water and gas, respectively (in that order) - --- Using values from Norne: --- In METRIC units: --- 859.5 1033.0 0.854 / --- In FIELD units: - 53.66 64.49 0.0533 / - -PVDG --- Column 1: gas phase pressure (psia) --- Column 2: gas formation volume factor (rb per Mscf) --- - in Odeh's paper the units are said to be given in rb per bbl, --- but this is assumed to be a mistake: FVF-values in Odeh's paper --- are given in rb per scf, not rb per bbl. This will be in --- agreement with conventions --- Column 3: gas viscosity (cP) - --- Using values from lower right table in Odeh's table 2: -14.700 166.666 0.008000 -264.70 12.0930 0.009600 -514.70 6.27400 0.011200 -1014.7 3.19700 0.014000 -2014.7 1.61400 0.018900 -2514.7 1.29400 0.020800 -3014.7 1.08000 0.022800 -4014.7 0.81100 0.026800 -5014.7 0.64900 0.030900 -9014.7 0.38600 0.047000 / - -PVTO --- Column 1: dissolved gas-oil ratio (Mscf per stb) --- Column 2: bubble point pressure (psia) --- Column 3: oil FVF for saturated oil (rb per stb) --- Column 4: oil viscosity for saturated oil (cP) - --- Use values from top left table in Odeh's table 2: -0.0010 14.7 1.0620 1.0400 / -0.0905 264.7 1.1500 0.9750 / -0.1800 514.7 1.2070 0.9100 / -0.3710 1014.7 1.2950 0.8300 / -0.6360 2014.7 1.4350 0.6950 / -0.7750 2514.7 1.5000 0.6410 / -0.9300 3014.7 1.5650 0.5940 / -1.2700 4014.7 1.6950 0.5100 - 9014.7 1.5790 0.7400 / -1.6180 5014.7 1.8270 0.4490 - 9014.7 1.7370 0.6310 / --- It is required to enter data for undersaturated oil for the highest GOR --- (i.e. the last row) in the PVTO table. --- In order to fulfill this requirement, values for oil FVF and viscosity --- at 9014.7psia and GOR=1.618 for undersaturated oil have been approximated: --- It has been assumed that there is a linear relation between the GOR --- and the FVF when keeping the pressure constant at 9014.7psia. --- From Odeh we know that (at 9014.7psia) the FVF is 2.357 at GOR=2.984 --- for saturated oil and that the FVF is 1.579 at GOR=1.27 for undersaturated oil, --- so it is possible to use the assumption described above. --- An equivalent approximation for the viscosity has been used. -/ - -SOLUTION --- ------------------------------------------------------------------------- - -EQUIL --- Item 1: datum depth (ft) --- Item 2: pressure at datum depth (psia) --- - Odeh's table 1 says that initial reservoir pressure is --- 4800 psi at 8400ft, which explains choice of item 1 and 2 --- Item 3: depth of water-oil contact (ft) --- - chosen to be directly under the reservoir --- Item 4: oil-water capillary pressure at the water oil contact (psi) --- - given to be 0 in Odeh's paper --- Item 5: depth of gas-oil contact (ft) --- - chosen to be directly above the reservoir --- Item 6: gas-oil capillary pressure at gas-oil contact (psi) --- - given to be 0 in Odeh's paper --- Item 7: RSVD-table --- Item 8: RVVD-table --- Item 9: Set to 0 as this is the only value supported by OPM - --- Item #: 1 2 3 4 5 6 7 8 9 - 8400 4800 8450 0 8300 0 1 0 0 / - -RSVD --- Dissolved GOR is initially constant with depth through the reservoir. --- The reason is that the initial reservoir pressure given is higher ----than the bubble point presssure of 4014.7psia, meaning that there is no --- free gas initially present. -8300 1.270 -8450 1.270 / - -SUMMARY --- ------------------------------------------------------------------------- - -FOPR - -WGOR -/ -WOPR -/ -WWPR -/ -WWCT -/ - - -FGOR - --- 2a) Pressures of the cell where the injector and producer are located -BPR -1 1 1 / -10 10 3 / -/ - --- 2b) Gas saturation at grid points given in Odeh's paper -BGSAT -1 1 1 / -1 1 2 / -1 1 3 / -10 1 1 / -10 1 2 / -10 1 3 / -10 10 1 / -10 10 2 / -10 10 3 / -/ - --- In order to compare Eclipse with Flow: -WBHP -/ - -WGIR - 'INJ' -/ - -WGIT - 'INJ' -/ - -WGPR -/ - -WGPT -/ - -WOPR -/ - -WOPT -/ - -WWIR -/ -WWIT -/ -WWPR -/ -WWPT -/ -WUBHP -/ -WUOPRL -/ -WUWCT -/ - -FOPR - -FUOPR - - -SCHEDULE --- ------------------------------------------------------------------------- -RPTSCHED - 'PRES' 'SGAS' 'RS' 'WELLS' 'WELSPECS' / - -RPTRST - 'BASIC=1' / - -UDQ - ASSIGN WUBHP 11 / - ASSIGN WUOPRL 20 / - ASSIGN WUBHP P2 12 / - ASSIGN WUBHP P3 13 / - ASSIGN WUBHP P4 14 / - UNITS WUBHP 'BARSA' / - UNITS WUOPRL 'SM3/DAY' / - DEFINE WUWCT WWPR / (WWPR + WOPR) / - UNITS WUWCT '1' / - DEFINE FUOPR SUM(WOPR) / - UNITS FUOPR 'SM3/DAY' / -/ - - - --- If no resolution (i.e. case 1), the two following lines must be added: -DRSDT - 0 / --- if DRSDT is set to 0, GOR cannot rise and free gas does not --- dissolve in undersaturated oil -> constant bubble point pressure - -WELSPECS --- Item #: 1 2 3 4 5 6 - 'P1' 'G1' 3 3 8400 'OIL' / - 'P2' 'G1' 4 4 8400 'OIL' / - 'P3' 'G1' 5 5 8400 'OIL' / - 'P4' 'G1' 6 6 8400 'OIL' / - 'INJ' 'G1' 1 1 8335 'GAS' / -/ --- Coordinates in item 3-4 are retrieved from Odeh's figure 1 and 2 --- Note that the depth at the midpoint of the well grid blocks --- has been used as reference depth for bottom hole pressure in item 5 - -COMPDAT --- Item #: 1 2 3 4 5 6 7 8 9 - 'P1' 3 3 3 3 'OPEN' 1* 1* 0.5 / - 'P2' 4 4 3 3 'OPEN' 1* 1* 0.5 / - 'P3' 5 5 3 3 'OPEN' 1* 1* 0.5 / - 'P4' 6 6 3 3 'OPEN' 1* 1* 0.5 / - 'INJ' 1 1 1 1 'OPEN' 1* 1* 0.5 / -/ --- Coordinates in item 2-5 are retreived from Odeh's figure 1 and 2 --- Item 9 is the well bore internal diameter, --- the radius is given to be 0.25ft in Odeh's paper - - -ACTIONX - 'SHUT_WELL' 100000 / - WWCT * > 0.50 / -/ - -WELOPEN - '?' 'SHUT' 0 0 0 2* / -/ - -ENDACTIO - - -WCONPROD --- Item #:1 2 3 4 5 9 - 'P1' 'OPEN' 'ORAT' 5000 4* 1000 / - 'P2' 'OPEN' 'ORAT' 5000 4* 1000 / - 'P3' 'OPEN' 'ORAT' 5000 4* 1000 / - 'P4' 'OPEN' 'ORAT' 5000 4* 1000 / -/ - --- It is stated in Odeh's paper that the maximum oil prod. rate --- is 20 000stb per day which explains the choice of value in item 4. --- The items > 4 are defaulted with the exception of item 9, --- the BHP lower limit, which is given to be 1000psia in Odeh's paper - -WCONINJE --- Item #:1 2 3 4 5 6 7 - 'INJ' 'GAS' 'OPEN' 'RATE' 100000 1* 9014 / -/ --- Stated in Odeh that gas inj. rate (item 5) is 100MMscf per day --- BHP upper limit (item 7) should not be exceeding the highest --- pressure in the PVT table=9014.7psia (default is 100 000psia) - -DATES - 1 'JAN' 2015 / -/ - -DATES - 1 'FEB' 2015 / -/ - -DATES - 1 'MAR' 2015 / -/ - -DATES - 1 'APR' 2015 / -/ - -DATES - 1 'MAI' 2015 / -/ - -DATES - 1 'JUN' 2015 / -/ - -DATES - 1 'JUL' 2015 / -/ - -DATES - 1 'AUG' 2015 / -/ - -DATES - 1 'SEP' 2015 / -/ - -DATES - 1 'OCT' 2015 / -/ - -DATES - 1 'NOV' 2015 / -/ - -DATES - 1 'DEC' 2015 / -/ - -DATES - 1 'JAN' 2016 / -/ - -DATES - 1 'FEB' 2016 / -/ - -DATES - 1 'MAR' 2016 / -/ - -DATES - 1 'APR' 2016 / -/ - -DATES - 1 'MAI' 2016 / -/ - -DATES - 1 'JUN' 2016 / -/ - -DATES - 1 'JUL' 2016 / -/ - -DATES - 1 'AUG' 2016 / -/ - -DATES - 1 'SEP' 2016 / -/ - -DATES - 1 'OCT' 2016 / -/ - -DATES - 1 'NOV' 2016 / -/ - -DATES - 1 'DEC' 2016 / -/ - - -END -)"; \ No newline at end of file diff --git a/ThirdParty/custom-opm-common/opm-common/tests/msim/actionx2.include b/ThirdParty/custom-opm-common/opm-common/tests/msim/actionx2.include deleted file mode 100644 index 5734cbdf9a..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/msim/actionx2.include +++ /dev/null @@ -1,530 +0,0 @@ -std::string actionx = R"( --- This reservoir simulation deck is made available under the Open Database --- License: http://opendatacommons.org/licenses/odbl/1.0/. Any rights in --- individual contents of the database are licensed under the Database Contents --- License: http://opendatacommons.org/licenses/dbcl/1.0/ - --- Copyright (C) 2015 Statoil - --- This simulation is based on the data given in --- 'Comparison of Solutions to a Three-Dimensional --- Black-Oil Reservoir Simulation Problem' by Aziz S. Odeh, --- Journal of Petroleum Technology, January 1981 - - ---------------------------------------------------------------------------- ------------------------- SPE1 - CASE 1 ------------------------------------ ---------------------------------------------------------------------------- - -RUNSPEC --- ------------------------------------------------------------------------- - -TITLE - SPE1 - CASE 1 - -DIMENS - 10 10 3 / - --- The number of equilibration regions is inferred from the EQLDIMS --- keyword. -EQLDIMS -/ - --- The number of PVTW tables is inferred from the TABDIMS keyword; --- when no data is included in the keyword the default values are used. -TABDIMS -/ - -OIL -GAS -WATER -DISGAS --- As seen from figure 4 in Odeh, GOR is increasing with time, --- which means that dissolved gas is present - -FIELD - -START - 1 'DEC' 2014 / - -WELLDIMS --- Item 1: maximum number of wells in the model --- - there are two wells in the problem; injector and producer --- Item 2: maximum number of grid blocks connected to any one well --- - must be one as the wells are located at specific grid blocks --- Item 3: maximum number of groups in the model --- - we are dealing with only one 'group' --- Item 4: maximum number of wells in any one group --- - there must be two wells in a group as there are two wells in total - 5 1 1 2 / - -UNIFOUT - -UDQDIMS - 50 25 0 50 50 0 0 50 0 20 / - -GRID - --- The INIT keyword is used to request an .INIT file. The .INIT file --- is written before the simulation actually starts, and contains grid --- properties and saturation tables as inferred from the input --- deck. There are no other keywords which can be used to configure --- exactly what is written to the .INIT file. -INIT - - --- ------------------------------------------------------------------------- -NOECHO - -DX --- There are in total 300 cells with length 1000ft in x-direction - 300*1000 / -DY --- There are in total 300 cells with length 1000ft in y-direction - 300*1000 / -DZ --- The layers are 20, 30 and 50 ft thick, in each layer there are 100 cells - 100*20 100*30 100*50 / - -TOPS --- The depth of the top of each grid block - 100*8325 / - -PORO --- Constant porosity of 0.3 throughout all 300 grid cells - 300*0.3 / - -PERMX --- The layers have perm. 500mD, 50mD and 200mD, respectively. - 100*500 100*50 100*200 / - -PERMY --- Equal to PERMX - 100*500 100*50 100*200 / - -PERMZ --- Cannot find perm. in z-direction in Odeh's paper --- For the time being, we will assume PERMZ equal to PERMX and PERMY: - 100*500 100*50 100*200 / -ECHO - -PROPS --- ------------------------------------------------------------------------- - -PVTW --- Item 1: pressure reference (psia) --- Item 2: water FVF (rb per bbl or rb per stb) --- Item 3: water compressibility (psi^{-1}) --- Item 4: water viscosity (cp) --- Item 5: water 'viscosibility' (psi^{-1}) - --- Using values from Norne: --- In METRIC units: --- 277.0 1.038 4.67E-5 0.318 0.0 / --- In FIELD units: - 4017.55 1.038 3.22E-6 0.318 0.0 / - -ROCK --- Item 1: reference pressure (psia) --- Item 2: rock compressibility (psi^{-1}) - --- Using values from table 1 in Odeh: - 14.7 3E-6 / - -SWOF --- Column 1: water saturation --- - this has been set to (almost) equally spaced values from 0.12 to 1 --- Column 2: water relative permeability --- - generated from the Corey-type approx. formula --- the coeffisient is set to 10e-5, S_{orw}=0 and S_{wi}=0.12 --- Column 3: oil relative permeability when only oil and water are present --- - we will use the same values as in column 3 in SGOF. --- This is not really correct, but since only the first --- two values are of importance, this does not really matter --- Column 4: water-oil capillary pressure (psi) - -0.12 0 1 0 -0.18 4.64876033057851E-008 1 0 -0.24 0.000000186 0.997 0 -0.3 4.18388429752066E-007 0.98 0 -0.36 7.43801652892562E-007 0.7 0 -0.42 1.16219008264463E-006 0.35 0 -0.48 1.67355371900826E-006 0.2 0 -0.54 2.27789256198347E-006 0.09 0 -0.6 2.97520661157025E-006 0.021 0 -0.66 3.7654958677686E-006 0.01 0 -0.72 4.64876033057851E-006 0.001 0 -0.78 0.000005625 0.0001 0 -0.84 6.69421487603306E-006 0 0 -0.91 8.05914256198347E-006 0 0 -1 0.00001 0 0 / - - -SGOF --- Column 1: gas saturation --- Column 2: gas relative permeability --- Column 3: oil relative permeability when oil, gas and connate water are present --- Column 4: oil-gas capillary pressure (psi) --- - stated to be zero in Odeh's paper - --- Values in column 1-3 are taken from table 3 in Odeh's paper: -0 0 1 0 -0.001 0 1 0 -0.02 0 0.997 0 -0.05 0.005 0.980 0 -0.12 0.025 0.700 0 -0.2 0.075 0.350 0 -0.25 0.125 0.200 0 -0.3 0.190 0.090 0 -0.4 0.410 0.021 0 -0.45 0.60 0.010 0 -0.5 0.72 0.001 0 -0.6 0.87 0.0001 0 -0.7 0.94 0.000 0 -0.85 0.98 0.000 0 -0.88 0.984 0.000 0 / ---1.00 1.0 0.000 0 / --- Warning from Eclipse: first sat. value in SWOF + last sat. value in SGOF --- must not be greater than 1, but Eclipse still runs --- Flow needs the sum to be excactly 1 so I added a row with gas sat. = 0.88 --- The corresponding krg value was estimated by assuming linear rel. between --- gas sat. and krw. between gas sat. 0.85 and 1.00 (the last two values given) - -DENSITY --- Density (lb per ft³) at surface cond. of --- oil, water and gas, respectively (in that order) - --- Using values from Norne: --- In METRIC units: --- 859.5 1033.0 0.854 / --- In FIELD units: - 53.66 64.49 0.0533 / - -PVDG --- Column 1: gas phase pressure (psia) --- Column 2: gas formation volume factor (rb per Mscf) --- - in Odeh's paper the units are said to be given in rb per bbl, --- but this is assumed to be a mistake: FVF-values in Odeh's paper --- are given in rb per scf, not rb per bbl. This will be in --- agreement with conventions --- Column 3: gas viscosity (cP) - --- Using values from lower right table in Odeh's table 2: -14.700 166.666 0.008000 -264.70 12.0930 0.009600 -514.70 6.27400 0.011200 -1014.7 3.19700 0.014000 -2014.7 1.61400 0.018900 -2514.7 1.29400 0.020800 -3014.7 1.08000 0.022800 -4014.7 0.81100 0.026800 -5014.7 0.64900 0.030900 -9014.7 0.38600 0.047000 / - -PVTO --- Column 1: dissolved gas-oil ratio (Mscf per stb) --- Column 2: bubble point pressure (psia) --- Column 3: oil FVF for saturated oil (rb per stb) --- Column 4: oil viscosity for saturated oil (cP) - --- Use values from top left table in Odeh's table 2: -0.0010 14.7 1.0620 1.0400 / -0.0905 264.7 1.1500 0.9750 / -0.1800 514.7 1.2070 0.9100 / -0.3710 1014.7 1.2950 0.8300 / -0.6360 2014.7 1.4350 0.6950 / -0.7750 2514.7 1.5000 0.6410 / -0.9300 3014.7 1.5650 0.5940 / -1.2700 4014.7 1.6950 0.5100 - 9014.7 1.5790 0.7400 / -1.6180 5014.7 1.8270 0.4490 - 9014.7 1.7370 0.6310 / --- It is required to enter data for undersaturated oil for the highest GOR --- (i.e. the last row) in the PVTO table. --- In order to fulfill this requirement, values for oil FVF and viscosity --- at 9014.7psia and GOR=1.618 for undersaturated oil have been approximated: --- It has been assumed that there is a linear relation between the GOR --- and the FVF when keeping the pressure constant at 9014.7psia. --- From Odeh we know that (at 9014.7psia) the FVF is 2.357 at GOR=2.984 --- for saturated oil and that the FVF is 1.579 at GOR=1.27 for undersaturated oil, --- so it is possible to use the assumption described above. --- An equivalent approximation for the viscosity has been used. -/ - -SOLUTION --- ------------------------------------------------------------------------- - -EQUIL --- Item 1: datum depth (ft) --- Item 2: pressure at datum depth (psia) --- - Odeh's table 1 says that initial reservoir pressure is --- 4800 psi at 8400ft, which explains choice of item 1 and 2 --- Item 3: depth of water-oil contact (ft) --- - chosen to be directly under the reservoir --- Item 4: oil-water capillary pressure at the water oil contact (psi) --- - given to be 0 in Odeh's paper --- Item 5: depth of gas-oil contact (ft) --- - chosen to be directly above the reservoir --- Item 6: gas-oil capillary pressure at gas-oil contact (psi) --- - given to be 0 in Odeh's paper --- Item 7: RSVD-table --- Item 8: RVVD-table --- Item 9: Set to 0 as this is the only value supported by OPM - --- Item #: 1 2 3 4 5 6 7 8 9 - 8400 4800 8450 0 8300 0 1 0 0 / - -RSVD --- Dissolved GOR is initially constant with depth through the reservoir. --- The reason is that the initial reservoir pressure given is higher ----than the bubble point presssure of 4014.7psia, meaning that there is no --- free gas initially present. -8300 1.270 -8450 1.270 / - -SUMMARY --- ------------------------------------------------------------------------- - -FOPR - -WGOR -/ -WOPR -/ -WWPR -/ -WWCT -/ - - -FGOR - --- 2a) Pressures of the cell where the injector and producer are located -BPR -1 1 1 / -10 10 3 / -/ - --- 2b) Gas saturation at grid points given in Odeh's paper -BGSAT -1 1 1 / -1 1 2 / -1 1 3 / -10 1 1 / -10 1 2 / -10 1 3 / -10 10 1 / -10 10 2 / -10 10 3 / -/ - --- In order to compare Eclipse with Flow: -WBHP -/ - -WGIR - 'INJ' -/ - -WGIT - 'INJ' -/ - -WGPR -/ - -WGPT -/ - -WOPR -/ - -WOPT -/ - -WWIR -/ -WWIT -/ -WWPR -/ -WWPT -/ -SCHEDULE --- ------------------------------------------------------------------------- -RPTSCHED - 'PRES' 'SGAS' 'RS' 'WELLS' 'WELSPECS' / - -RPTRST - 'BASIC=1' / - -UDQ - DEFINE WUPR3 SORTA(WOPR 'P*') / -/ - - - - --- If no resolution (i.e. case 1), the two following lines must be added: -DRSDT - 0 / --- if DRSDT is set to 0, GOR cannot rise and free gas does not --- dissolve in undersaturated oil -> constant bubble point pressure - -WELSPECS --- Item #: 1 2 3 4 5 6 - 'P1' 'G1' 3 3 8400 'OIL' / - 'P2' 'G1' 4 4 8400 'OIL' / - 'P3' 'G1' 5 5 8400 'OIL' / - 'P4' 'G1' 6 6 8400 'OIL' / - 'INJ' 'G1' 1 1 8335 'GAS' / -/ --- Coordinates in item 3-4 are retrieved from Odeh's figure 1 and 2 --- Note that the depth at the midpoint of the well grid blocks --- has been used as reference depth for bottom hole pressure in item 5 - -COMPDAT --- Item #: 1 2 3 4 5 6 7 8 9 - 'P1' 3 3 3 3 'OPEN' 1* 1* 0.5 / - 'P2' 4 4 3 3 'OPEN' 1* 1* 0.5 / - 'P3' 5 5 3 3 'OPEN' 1* 1* 0.5 / - 'P4' 6 6 3 3 'OPEN' 1* 1* 0.5 / - 'INJ' 1 1 1 1 'OPEN' 1* 1* 0.5 / -/ --- Coordinates in item 2-5 are retreived from Odeh's figure 1 and 2 --- Item 9 is the well bore internal diameter, --- the radius is given to be 0.25ft in Odeh's paper - - -WCONPROD --- Item #:1 2 3 4 5 9 - 'P1' 'OPEN' 'ORAT' 5000 4* 1000 / - 'P2' 'OPEN' 'ORAT' 5000 4* 1000 / - 'P3' 'OPEN' 'ORAT' 5000 4* 1000 / - 'P4' 'OPEN' 'ORAT' 5000 4* 1000 / -/ - --- It is stated in Odeh's paper that the maximum oil prod. rate --- is 20 000stb per day which explains the choice of value in item 4. --- The items > 4 are defaulted with the exception of item 9, --- the BHP lower limit, which is given to be 1000psia in Odeh's paper - -WCONINJE --- Item #:1 2 3 4 5 6 7 - 'INJ' 'GAS' 'OPEN' 'RATE' 100000 1* 9014 / -/ --- Stated in Odeh that gas inj. rate (item 5) is 100MMscf per day --- BHP upper limit (item 7) should not be exceeding the highest --- pressure in the PVT table=9014.7psia (default is 100 000psia) - -DATES - 1 'JAN' 2015 / -/ - -DATES - 1 'FEB' 2015 / -/ - -DATES - 1 'MAR' 2015 / -/ - -DATES - 1 'APR' 2015 / -/ - -DATES - 1 'MAI' 2015 / -/ - -DATES - 1 'JUN' 2015 / -/ - -DATES - 1 'JUL' 2015 / -/ - -DATES - 1 'AUG' 2015 / -/ - -DATES - 1 'SEP' 2015 / -/ - -DATES - 1 'OCT' 2015 / -/ - -DATES - 1 'NOV' 2015 / -/ - -DATES - 1 'DEC' 2015 / -/ - -DATES - 1 'JAN' 2016 / -/ - -DATES - 1 'FEB' 2016 / -/ - -DATES - 1 'MAR' 2016 / -/ - -DATES - 1 'APR' 2016 / -/ - -DATES - 1 'MAI' 2016 / -/ - -DATES - 1 'JUN' 2016 / -/ - -ACTIONX - 'SHUT_WELL' 100000 / - WUPR3 'P*' = 1 / -/ - -WELOPEN - '?' 'SHUT' / -/ - -ENDACTIO - - -DATES - 1 'JUL' 2016 / -/ - -DATES - 1 'AUG' 2016 / -/ - -DATES - 1 'SEP' 2016 / -/ - -DATES - 1 'OCT' 2016 / -/ - -DATES - 1 'NOV' 2016 / -/ - -DATES - 1 'DEC' 2016 / -/ - - -END -)"; \ No newline at end of file diff --git a/ThirdParty/custom-opm-common/opm-common/tests/msim/test_msim.cpp b/ThirdParty/custom-opm-common/opm-common/tests/msim/test_msim.cpp deleted file mode 100644 index 163089c7b4..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/msim/test_msim.cpp +++ /dev/null @@ -1,137 +0,0 @@ -/* - Copyright 2018 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#define BOOST_TEST_MODULE MSIM_BASIC -#include - -#include - -#include -#include - -#include - -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -#include - -using namespace Opm; - -namespace { - -double prod_opr(const EclipseState& es, const Schedule& /* sched */, const SummaryState&, const data::Solution& /* sol */, size_t /* report_step */, double seconds_elapsed) { - const auto& units = es.getUnits(); - return -units.to_si(UnitSystem::measure::rate, seconds_elapsed); -} - -void pressure(const EclipseState& es, const Schedule& /* sched */, data::Solution& sol, size_t /* report_step */, double seconds_elapsed) { - const auto& grid = es.getInputGrid(); - const auto& units = es.getUnits(); - if (!sol.has("PRESSURE")) - sol.insert("PRESSURE", UnitSystem::measure::pressure, std::vector(grid.getNumActive()), data::TargetType::RESTART_SOLUTION); - - auto& data = sol.data("PRESSURE"); - std::fill(data.begin(), data.end(), units.to_si(UnitSystem::measure::pressure, seconds_elapsed)); -} - -bool is_file(const Opm::filesystem::path& name) -{ - return Opm::filesystem::exists(name) - && Opm::filesystem::is_regular_file(name); -} - -} - -BOOST_AUTO_TEST_CASE(RUN) { - Parser parser; - auto python = std::make_shared(); - Deck deck = parser.parseFile("SPE1CASE1.DATA"); - EclipseState state(deck); - Schedule schedule(deck, state, python); - SummaryConfig summary_config(deck, schedule, state.getTableManager()); - msim msim(state); - - msim.well_rate("PROD", data::Rates::opt::oil, prod_opr); - msim.well_rate("RFT", data::Rates::opt::oil, prod_opr); - msim.solution("PRESSURE", pressure); - { - const WorkArea work_area("test_msim"); - EclipseIO io(state, state.getInputGrid(), schedule, summary_config); - - msim.run(schedule, io, false); - - for (const auto& fname : {"SPE1CASE1.INIT", "SPE1CASE1.UNRST", "SPE1CASE1.EGRID", "SPE1CASE1.SMSPEC", "SPE1CASE1.UNSMRY", "SPE1CASE1.RSM"}) - BOOST_CHECK( is_file( fname )); - - { - const auto smry = EclIO::ESmry("SPE1CASE1"); - const auto& time = smry.get("TIME"); - const auto& press = smry.get("WOPR:PROD"); - - for (auto nstep = time.size(), time_index=0*nstep; time_index < nstep; time_index++) { - double seconds_elapsed = time[time_index] * 86400; - BOOST_CHECK_CLOSE(seconds_elapsed, press[time_index], 1e-3); - } - - const auto& dates = smry.dates(); - const auto& day = smry.get("DAY"); - const auto& month = smry.get("MONTH"); - const auto& year = smry.get("YEAR"); - - for (auto nstep = dates.size(), time_index=0*nstep; time_index < nstep; time_index++) { - auto ts = TimeStampUTC( std::chrono::system_clock::to_time_t( dates[time_index]) ); - BOOST_CHECK_EQUAL( ts.day(), day[time_index]); - BOOST_CHECK_EQUAL( ts.month(), month[time_index]); - BOOST_CHECK_EQUAL( ts.year(), year[time_index]); - } - - const auto rsm = EclIO::ERsm("SPE1CASE1.RSM"); - BOOST_CHECK( EclIO::cmp( smry, rsm )); - } - - { - auto rst = EclIO::ERst("SPE1CASE1.UNRST"); - - for (const auto& step : rst.listOfReportStepNumbers()) { - const auto& dh = rst.getRst("DOUBHEAD", step, 0); - const auto& press = rst.getRst("PRESSURE", step, 0); - - // DOUBHEAD[0] is elapsed time in days since start of simulation. - BOOST_CHECK_CLOSE( press[0], dh[0] * 86400, 1e-3 ); - } - - const int report_step = 50; - const auto& rst_state = Opm::RestartIO::RstState::load(rst, report_step); - Schedule sched_rst(deck, state, python, &rst_state); - const auto& rft_well = sched_rst.getWell("RFT", report_step); - BOOST_CHECK(rft_well.getStatus() == Well::Status::SHUT); - } - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/msim/test_msim_ACTIONX.cpp b/ThirdParty/custom-opm-common/opm-common/tests/msim/test_msim_ACTIONX.cpp deleted file mode 100644 index aabec48799..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/msim/test_msim_ACTIONX.cpp +++ /dev/null @@ -1,433 +0,0 @@ -/* - Copyright 2018 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#define BOOST_TEST_MODULE ACTIONX_SIM - -#include - -#include - -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -#include - -#include - -using namespace Opm; - -namespace { - -struct test_data { - Deck deck; - EclipseState state; - std::shared_ptr python; - Schedule schedule; - SummaryConfig summary_config; - - test_data(const Deck& deck_arg) : - deck(deck_arg), - state( this->deck ), - python( std::make_shared() ), - schedule( this->deck, this->state, this->python), - summary_config( this->deck, this->schedule, this->state.getTableManager()) - { - auto& ioconfig = this->state.getIOConfig(); - ioconfig.setBaseName("MSIM"); - } - - test_data(const std::string& deck_string) : - test_data( Parser().parseString(deck_string) ) - {} - - -}; - - -double prod_opr(const EclipseState& es, const Schedule& /* sched */, const SummaryState&, const data::Solution& /* sol */, size_t /* report_step */, double /* seconds_elapsed */) { - const auto& units = es.getUnits(); - double oil_rate = 1.0; - return -units.to_si(UnitSystem::measure::rate, oil_rate); -} - -double prod_opr_low(const EclipseState& es, const Schedule& /* sched */, const SummaryState&, const data::Solution& /* sol */, size_t /* report_step */, double /* seconds_elapsed */) { - const auto& units = es.getUnits(); - double oil_rate = 0.5; - return -units.to_si(UnitSystem::measure::rate, oil_rate); -} - -double prod_wpr_P1(const EclipseState& es, const Schedule& /* sched */, const SummaryState&, const data::Solution& /* sol */, size_t /* report_step */, double /* seconds_elapsed */) { - const auto& units = es.getUnits(); - double water_rate = 0.0; - return -units.to_si(UnitSystem::measure::rate, water_rate); -} - -double prod_wpr_P2(const EclipseState& es, const Schedule& /* sched */, const SummaryState&, const data::Solution& /* sol */, size_t report_step, double /* seconds_elapsed */) { - const auto& units = es.getUnits(); - double water_rate = 0.0; - if (report_step > 5) - water_rate = 2.0; // => WWCT = WWPR / (WOPR + WWPR) = 2/3 - - return -units.to_si(UnitSystem::measure::rate, water_rate); -} - -double prod_wpr_P3(const EclipseState& es, const Schedule& /* sched */, const SummaryState&, const data::Solution& /* sol */, size_t /* report_step */, double /* seconds_elapsed */) { - const auto& units = es.getUnits(); - double water_rate = 0.0; - return -units.to_si(UnitSystem::measure::rate, water_rate); -} - -double prod_wpr_P4(const EclipseState& es, const Schedule& /* sched */, const SummaryState&, const data::Solution& /* sol */, size_t report_step, double /* seconds_elapsed */) { - const auto& units = es.getUnits(); - double water_rate = 0.0; - if (report_step > 10) - water_rate = 2.0; - - return -units.to_si(UnitSystem::measure::rate, water_rate); -} - - -double inj_wir_INJ(const EclipseState& , const Schedule& sched, const SummaryState& st, const data::Solution& /* sol */, size_t report_step, double /* seconds_elapsed */) { - if (st.has("FUINJ")) { - const auto& well = sched.getWell("INJ", report_step); - const auto controls = well.injectionControls(st); - return controls.surface_rate; - } else - return -99; -} - -bool ecl_sum_has_general_var(const EclIO::ESmry& smry, const std::string& var) -{ - return smry.hasKey(var); -} - -float ecl_sum_get_general_var(const EclIO::ESmry& smry, const int timeIdx, const std::string& var) -{ - return smry.get(var)[timeIdx]; -} - -int ecl_sum_get_data_length(const EclIO::ESmry& smry) -{ - return static_cast(smry.get("TIME").size()); -} - -int ecl_sum_get_last_report_step(const EclIO::ESmry& smry) -{ - return static_cast(smry.get_at_rstep("TIME").size()); -} - -int ecl_sum_iget_report_end(const EclIO::ESmry& smry, const int reportStep) -{ - return smry.timestepIdxAtReportstepStart(reportStep + 1) - 1; -} -} - - -/* - The deck tested here has a UDQ DEFINE statement which sorts the wells after - oil production rate, and then subsequently closes the well with lowest OPR - with a ACTIONX keyword. -*/ - -BOOST_AUTO_TEST_CASE(UDQ_SORTA_EXAMPLE) { -#include "actionx2.include" - - test_data td( actionx ); - msim sim(td.state); - { - WorkArea work_area("test_msim"); - EclipseIO io(td.state, td.state.getInputGrid(), td.schedule, td.summary_config); - - sim.well_rate("P1", data::Rates::opt::oil, prod_opr); - sim.well_rate("P2", data::Rates::opt::oil, prod_opr); - sim.well_rate("P3", data::Rates::opt::oil, prod_opr); - sim.well_rate("P4", data::Rates::opt::oil, prod_opr_low); - - sim.run(td.schedule, io, false); - { - const auto& w1 = td.schedule.getWell("P1", 1); - const auto& w4 = td.schedule.getWell("P4", 1); - BOOST_CHECK(w1.getStatus() == Well::Status::OPEN ); - BOOST_CHECK(w4.getStatus() == Well::Status::OPEN ); - } - { - const auto& w1 = td.schedule.getWellatEnd("P1"); - const auto& w4 = td.schedule.getWellatEnd("P4"); - BOOST_CHECK(w1.getStatus() == Well::Status::OPEN ); - BOOST_CHECK(w4.getStatus() == Well::Status::SHUT ); - } - } -} - - -BOOST_AUTO_TEST_CASE(WELL_CLOSE_EXAMPLE) { -#include "actionx1.include" - - test_data td( actionx1 ); - msim sim(td.state); - { - WorkArea work_area("test_msim"); - EclipseIO io(td.state, td.state.getInputGrid(), td.schedule, td.summary_config); - - sim.well_rate("P1", data::Rates::opt::oil, prod_opr); - sim.well_rate("P2", data::Rates::opt::oil, prod_opr); - sim.well_rate("P3", data::Rates::opt::oil, prod_opr); - sim.well_rate("P4", data::Rates::opt::oil, prod_opr); - - sim.well_rate("P1", data::Rates::opt::wat, prod_wpr_P1); - sim.well_rate("P2", data::Rates::opt::wat, prod_wpr_P2); - sim.well_rate("P3", data::Rates::opt::wat, prod_wpr_P3); - sim.well_rate("P4", data::Rates::opt::wat, prod_wpr_P4); - - { - const auto& w1 = td.schedule.getWell("P1", 15); - const auto& w2 = td.schedule.getWell("P2", 15); - const auto& w3 = td.schedule.getWell("P3", 15); - const auto& w4 = td.schedule.getWell("P4", 15); - - BOOST_CHECK(w1.getStatus() == Well::Status::OPEN ); - BOOST_CHECK(w2.getStatus() == Well::Status::OPEN ); - BOOST_CHECK(w3.getStatus() == Well::Status::OPEN ); - BOOST_CHECK(w4.getStatus() == Well::Status::OPEN ); - } - - - sim.run(td.schedule, io, false); - { - const auto& w1 = td.schedule.getWell("P1", 15); - const auto& w3 = td.schedule.getWell("P3", 15); - BOOST_CHECK(w1.getStatus() == Well::Status::OPEN ); - BOOST_CHECK(w3.getStatus() == Well::Status::OPEN ); - } - { - const auto& w2_5 = td.schedule.getWell("P2", 5); - const auto& w2_6 = td.schedule.getWell("P2", 6); - BOOST_CHECK(w2_5.getStatus() == Well::Status::OPEN ); - BOOST_CHECK(w2_6.getStatus() == Well::Status::SHUT ); - } - { - const auto& w4_10 = td.schedule.getWell("P4", 10); - const auto& w4_11 = td.schedule.getWell("P4", 11); - BOOST_CHECK(w4_10.getStatus() == Well::Status::OPEN ); - BOOST_CHECK(w4_11.getStatus() == Well::Status::SHUT ); - } - } -} - - - -BOOST_AUTO_TEST_CASE(UDQ_ASSIGN) { -#include "actionx1.include" - - test_data td( actionx1 ); - msim sim(td.state); - { - WorkArea work_area("test_msim"); - EclipseIO io(td.state, td.state.getInputGrid(), td.schedule, td.summary_config); - - sim.well_rate("P1", data::Rates::opt::oil, prod_opr); - sim.well_rate("P2", data::Rates::opt::oil, prod_opr); - sim.well_rate("P3", data::Rates::opt::oil, prod_opr); - sim.well_rate("P4", data::Rates::opt::oil, prod_opr); - - sim.well_rate("P1", data::Rates::opt::wat, prod_wpr_P1); - sim.well_rate("P2", data::Rates::opt::wat, prod_wpr_P2); - sim.well_rate("P3", data::Rates::opt::wat, prod_wpr_P3); - sim.well_rate("P4", data::Rates::opt::wat, prod_wpr_P4); - - sim.run(td.schedule, io, false); - - const auto& base_name = td.state.getIOConfig().getBaseName(); - - const EclIO::ESmry ecl_sum(base_name + ".SMSPEC"); - BOOST_CHECK( ecl_sum_has_general_var(ecl_sum, "WUBHP:P1") ); - BOOST_CHECK( ecl_sum_has_general_var(ecl_sum, "WUBHP:P2") ); - BOOST_CHECK( ecl_sum_has_general_var(ecl_sum, "WUOPRL:P3") ); - BOOST_CHECK( ecl_sum_has_general_var(ecl_sum, "WUOPRL:P4") ); - -#if 0 - BOOST_CHECK_EQUAL( ecl_sum_get_unit(ecl_sum, "WUBHP:P1"), "BARSA"); - BOOST_CHECK_EQUAL( ecl_sum_get_unit(ecl_sum, "WUOPRL:P1"), "SM3/DAY"); -#endif - - BOOST_CHECK_EQUAL( ecl_sum_get_general_var(ecl_sum, 1, "WUBHP:P1"), 11); - BOOST_CHECK_EQUAL( ecl_sum_get_general_var(ecl_sum, 1, "WUBHP:P2"), 12); - BOOST_CHECK_EQUAL( ecl_sum_get_general_var(ecl_sum, 1, "WUBHP:P3"), 13); - BOOST_CHECK_EQUAL( ecl_sum_get_general_var(ecl_sum, 1, "WUBHP:P4"), 14); - - BOOST_CHECK_EQUAL( ecl_sum_get_general_var(ecl_sum, 1, "WUOPRL:P1"), 20); - BOOST_CHECK_EQUAL( ecl_sum_get_general_var(ecl_sum, 1, "WUOPRL:P2"), 20); - BOOST_CHECK_EQUAL( ecl_sum_get_general_var(ecl_sum, 1, "WUOPRL:P3"), 20); - BOOST_CHECK_EQUAL( ecl_sum_get_general_var(ecl_sum, 1, "WUOPRL:P4"), 20); - } -} - -BOOST_AUTO_TEST_CASE(UDQ_WUWCT) { -#include "actionx1.include" - - test_data td( actionx1 ); - msim sim(td.state); - { - WorkArea work_area("test_msim"); - EclipseIO io(td.state, td.state.getInputGrid(), td.schedule, td.summary_config); - - sim.well_rate("P1", data::Rates::opt::oil, prod_opr); - sim.well_rate("P2", data::Rates::opt::oil, prod_opr); - sim.well_rate("P3", data::Rates::opt::oil, prod_opr); - sim.well_rate("P4", data::Rates::opt::oil, prod_opr_low); - - sim.well_rate("P1", data::Rates::opt::wat, prod_wpr_P1); - sim.well_rate("P2", data::Rates::opt::wat, prod_wpr_P2); - sim.well_rate("P3", data::Rates::opt::wat, prod_wpr_P3); - sim.well_rate("P4", data::Rates::opt::wat, prod_wpr_P4); - - sim.run(td.schedule, io, false); - - const auto& base_name = td.state.getIOConfig().getBaseName(); - const EclIO::ESmry ecl_sum(base_name + ".SMSPEC"); - - for (int step = 0; step < ecl_sum_get_data_length(ecl_sum); step++) { - double wopr_sum = 0; - for (const auto& well : {"P1", "P2", "P3", "P4"}) { - std::string wwct_key = std::string("WWCT:") + well; - std::string wuwct_key = std::string("WUWCT:") + well; - std::string wopr_key = std::string("WOPR:") + well; - - if (ecl_sum_get_general_var(ecl_sum, step, wwct_key.c_str()) != 0) - BOOST_CHECK_EQUAL( ecl_sum_get_general_var(ecl_sum, step, wwct_key.c_str()), - ecl_sum_get_general_var(ecl_sum, step, wuwct_key.c_str())); - - wopr_sum += ecl_sum_get_general_var(ecl_sum, step , wopr_key.c_str()); - } - BOOST_CHECK_EQUAL( ecl_sum_get_general_var(ecl_sum, step, "FOPR"), - ecl_sum_get_general_var(ecl_sum, step, "FUOPR")); - BOOST_CHECK_EQUAL( wopr_sum, ecl_sum_get_general_var(ecl_sum, step, "FOPR")); - } - } -} - - -BOOST_AUTO_TEST_CASE(UDA) { -#include "uda.include" - test_data td( uda_deck ); - msim sim(td.state); - EclipseIO io(td.state, td.state.getInputGrid(), td.schedule, td.summary_config); - - sim.well_rate("P1", data::Rates::opt::wat, prod_wpr_P1); - sim.well_rate("P2", data::Rates::opt::wat, prod_wpr_P2); - sim.well_rate("P3", data::Rates::opt::wat, prod_wpr_P3); - sim.well_rate("P4", data::Rates::opt::wat, prod_wpr_P4); - sim.well_rate("INJ", data::Rates::opt::wat, inj_wir_INJ); - { - WorkArea work_area("uda_sim"); - - sim.run(td.schedule, io, true); - - const auto& base_name = td.state.getIOConfig().getBaseName(); - const EclIO::ESmry ecl_sum(base_name + ".SMSPEC"); - - // Should only get at report steps - const auto last_report = ecl_sum_get_last_report_step(ecl_sum); - for (int report_step = 2; report_step < last_report; report_step++) { - double wwpr_sum = 0; - { - int prev_tstep = ecl_sum_iget_report_end(ecl_sum, report_step - 1); - for (const auto& well : {"P1", "P2", "P3", "P4"}) { - std::string wwpr_key = std::string("WWPR:") + well; - wwpr_sum += ecl_sum_get_general_var(ecl_sum, prev_tstep, wwpr_key.c_str()); - } - } - BOOST_CHECK_CLOSE( 0.90 * wwpr_sum, ecl_sum_get_general_var(ecl_sum, ecl_sum_iget_report_end(ecl_sum, report_step), "WWIR:INJ"), 1e-3); - } - } -} - -#ifdef EMBEDDED_PYTHON - -BOOST_AUTO_TEST_CASE(PYTHON_WELL_CLOSE_EXAMPLE) { - const auto& deck = Parser().parseFile("msim/MSIM_PYACTION.DATA"); - test_data td( deck ); - msim sim(td.state); - { - WorkArea work_area("test_msim"); - EclipseIO io(td.state, td.state.getInputGrid(), td.schedule, td.summary_config); - - sim.well_rate("P1", data::Rates::opt::oil, prod_opr); - sim.well_rate("P2", data::Rates::opt::oil, prod_opr); - sim.well_rate("P3", data::Rates::opt::oil, prod_opr); - sim.well_rate("P4", data::Rates::opt::oil, prod_opr); - - sim.well_rate("P1", data::Rates::opt::wat, prod_wpr_P1); - sim.well_rate("P2", data::Rates::opt::wat, prod_wpr_P2); - sim.well_rate("P3", data::Rates::opt::wat, prod_wpr_P3); - sim.well_rate("P4", data::Rates::opt::wat, prod_wpr_P4); - - { - const auto& w1 = td.schedule.getWell("P1", 15); - const auto& w2 = td.schedule.getWell("P2", 15); - const auto& w3 = td.schedule.getWell("P3", 15); - const auto& w4 = td.schedule.getWell("P4", 15); - - BOOST_CHECK(w1.getStatus() == Well::Status::OPEN ); - BOOST_CHECK(w2.getStatus() == Well::Status::OPEN ); - BOOST_CHECK(w3.getStatus() == Well::Status::OPEN ); - BOOST_CHECK(w4.getStatus() == Well::Status::OPEN ); - } - - - sim.run(td.schedule, io, false); - { - const auto& w1 = td.schedule.getWell("P1", 15); - const auto& w3 = td.schedule.getWell("P3", 15); - BOOST_CHECK(w1.getStatus() == Well::Status::OPEN ); - BOOST_CHECK(w3.getStatus() == Well::Status::OPEN ); - } - { - const auto& w2_5 = td.schedule.getWell("P2", 5); - const auto& w2_6 = td.schedule.getWell("P2", 6); - BOOST_CHECK(w2_5.getStatus() == Well::Status::OPEN ); - BOOST_CHECK(w2_6.getStatus() == Well::Status::SHUT ); - } - { - const auto& w4_10 = td.schedule.getWell("P4", 10); - const auto& w4_11 = td.schedule.getWell("P4", 11); - BOOST_CHECK(w4_10.getStatus() == Well::Status::OPEN ); - BOOST_CHECK(w4_11.getStatus() == Well::Status::SHUT ); - } - } -} - -#endif - diff --git a/ThirdParty/custom-opm-common/opm-common/tests/msim/test_msim_EXIT.cpp b/ThirdParty/custom-opm-common/opm-common/tests/msim/test_msim_EXIT.cpp deleted file mode 100644 index 66883a960a..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/msim/test_msim_EXIT.cpp +++ /dev/null @@ -1,107 +0,0 @@ -/* - Copyright 2020 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#define BOOST_TEST_MODULE ACTIONX_SIM - -#include - -#include -#include - -#include -#include -#include - -#include -#include -#include -#include - -#include -#include - -namespace Opm { - -double prod_opr(const EclipseState& es, const Schedule& /* sched */, const SummaryState&, const data::Solution& /* sol */, size_t /* report_step */, double /* seconds_elapsed */) { - const auto& units = es.getUnits(); - double oil_rate = 1.0; - return -units.to_si(UnitSystem::measure::rate, oil_rate); -} - - -double prod_wpr_P1(const EclipseState& es, const Schedule& /* sched */, const SummaryState&, const data::Solution& /* sol */, size_t /* report_step */, double /* seconds_elapsed */) { - const auto& units = es.getUnits(); - double water_rate = 0.0; - return -units.to_si(UnitSystem::measure::rate, water_rate); -} - -double prod_wpr_P2(const EclipseState& es, const Schedule& /* sched */, const SummaryState&, const data::Solution& /* sol */, size_t report_step, double /* seconds_elapsed */) { - const auto& units = es.getUnits(); - double water_rate = 0.0; - if (report_step > 5) - water_rate = 2.0; // => WWCT = WWPR / (WOPR + WWPR) = 2/3 - - return -units.to_si(UnitSystem::measure::rate, water_rate); -} - -double prod_wpr_P3(const EclipseState& es, const Schedule& /* sched */, const SummaryState&, const data::Solution& /* sol */, size_t /* report_step */, double /* seconds_elapsed */) { - const auto& units = es.getUnits(); - double water_rate = 0.0; - return -units.to_si(UnitSystem::measure::rate, water_rate); -} - -double prod_wpr_P4(const EclipseState& es, const Schedule& /* sched */, const SummaryState&, const data::Solution& /* sol */, size_t report_step, double /* seconds_elapsed */) { - const auto& units = es.getUnits(); - double water_rate = 0.0; - if (report_step > 10) - water_rate = 2.0; - - return -units.to_si(UnitSystem::measure::rate, water_rate); -} -} - -BOOST_AUTO_TEST_CASE(MSIM_EXIT_TEST) { - std::string deck_file = "EXIT_TEST.DATA"; - Opm::Parser parser; - auto python = std::make_shared(); - - Opm::Deck deck = parser.parseFile(deck_file); - Opm::EclipseState state(deck); - Opm::Schedule schedule(deck, state, python); - Opm::SummaryConfig summary_config(deck, schedule, state.getTableManager()); - - { - WorkArea work_area("test_msim"); - Opm::msim msim(state); - Opm::EclipseIO io(state, state.getInputGrid(), schedule, summary_config); - msim.well_rate("P1", Opm::data::Rates::opt::oil, Opm::prod_opr); - msim.well_rate("P2", Opm::data::Rates::opt::oil, Opm::prod_opr); - msim.well_rate("P3", Opm::data::Rates::opt::oil, Opm::prod_opr); - msim.well_rate("P4", Opm::data::Rates::opt::oil, Opm::prod_opr); - - msim.well_rate("P1", Opm::data::Rates::opt::wat, Opm::prod_wpr_P1); - msim.well_rate("P2", Opm::data::Rates::opt::wat, Opm::prod_wpr_P2); - msim.well_rate("P3", Opm::data::Rates::opt::wat, Opm::prod_wpr_P3); - msim.well_rate("P4", Opm::data::Rates::opt::wat, Opm::prod_wpr_P4); - msim.run(schedule, io, false); - } - auto exit_status = schedule.exitStatus(); - BOOST_CHECK( exit_status.has_value() ); - BOOST_CHECK_EQUAL(exit_status.value(), 99); -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/msim/uda.include b/ThirdParty/custom-opm-common/opm-common/tests/msim/uda.include deleted file mode 100644 index 52808c5428..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/msim/uda.include +++ /dev/null @@ -1,385 +0,0 @@ -std::string uda_deck = R"( --- This reservoir simulation deck is made available under the Open Database --- License: http://opendatacommons.org/licenses/odbl/1.0/. Any rights in --- individual contents of the database are licensed under the Database Contents --- License: http://opendatacommons.org/licenses/dbcl/1.0/ - --- Copyright (C) 2015 Statoil - --- This simulation is based on the data given in --- 'Comparison of Solutions to a Three-Dimensional --- Black-Oil Reservoir Simulation Problem' by Aziz S. Odeh, --- Journal of Petroleum Technology, January 1981 - - ---------------------------------------------------------------------------- ------------------------- SPE1 - CASE 1 ------------------------------------ ---------------------------------------------------------------------------- - -RUNSPEC --- ------------------------------------------------------------------------- - -TITLE - SPE1 - CASE 1 - -DIMENS - 10 10 3 / - -EQLDIMS -/ - -TABDIMS -/ - -OIL -GAS -WATER -DISGAS - -START - 1 'DEC' 2014 / - -WELLDIMS - 5 1 1 2 / - -UNIFOUT - -UDQDIMS - 50 25 0 50 50 0 0 50 0 20 / - -GRID - -INIT - - --- ------------------------------------------------------------------------- -NOECHO - -DX - 300*1000 / -DY - 300*1000 / -DZ - 100*20 100*30 100*50 / - -TOPS - 100*8325 / - -PORO - 300*0.3 / - -PERMX - 100*500 100*50 100*200 / - -PERMY - 100*500 100*50 100*200 / - -PERMZ - 100*500 100*50 100*200 / -ECHO - -PROPS - -PVTW - 4017.55 1.038 3.22E-6 0.318 0.0 / - -ROCK - 14.7 3E-6 / - -SWOF -0.18 4.64876033057851E-008 1 0 -0.24 0.000000186 0.997 0 -0.3 4.18388429752066E-007 0.98 0 -0.36 7.43801652892562E-007 0.7 0 -0.42 1.16219008264463E-006 0.35 0 -0.48 1.67355371900826E-006 0.2 0 -0.54 2.27789256198347E-006 0.09 0 -0.6 2.97520661157025E-006 0.021 0 -0.66 3.7654958677686E-006 0.01 0 -0.72 4.64876033057851E-006 0.001 0 -0.78 0.000005625 0.0001 0 -0.84 6.69421487603306E-006 0 0 -0.91 8.05914256198347E-006 0 0 -1 0.00001 0 0 / - - -SGOF -0 0 1 0 -0.001 0 1 0 -0.02 0 0.997 0 -0.05 0.005 0.980 0 -0.12 0.025 0.700 0 -0.2 0.075 0.350 0 -0.25 0.125 0.200 0 -0.3 0.190 0.090 0 -0.4 0.410 0.021 0 -0.45 0.60 0.010 0 -0.5 0.72 0.001 0 -0.6 0.87 0.0001 0 -0.7 0.94 0.000 0 -0.85 0.98 0.000 0 -0.88 0.984 0.000 0 / - -DENSITY - 53.66 64.49 0.0533 / - -PVDG -14.700 166.666 0.008000 -264.70 12.0930 0.009600 -514.70 6.27400 0.011200 -1014.7 3.19700 0.014000 -2014.7 1.61400 0.018900 -2514.7 1.29400 0.020800 -3014.7 1.08000 0.022800 -4014.7 0.81100 0.026800 -5014.7 0.64900 0.030900 -9014.7 0.38600 0.047000 / - -PVTO -0.0010 14.7 1.0620 1.0400 / -0.0905 264.7 1.1500 0.9750 / -0.1800 514.7 1.2070 0.9100 / -0.3710 1014.7 1.2950 0.8300 / -0.6360 2014.7 1.4350 0.6950 / -0.7750 2514.7 1.5000 0.6410 / -0.9300 3014.7 1.5650 0.5940 / -1.2700 4014.7 1.6950 0.5100 - 9014.7 1.5790 0.7400 / -1.6180 5014.7 1.8270 0.4490 - 9014.7 1.7370 0.6310 / -/ - -SOLUTION - -EQUIL - 8400 4800 8450 0 8300 0 1 0 0 / - -RSVD -8300 1.270 -8450 1.270 / - -SUMMARY - -FOPR - -WGOR -/ -WOPR -/ -WWPR -/ -WWCT -/ - - -FGOR - -BPR -1 1 1 / -10 10 3 / -/ - -BGSAT -1 1 1 / -1 1 2 / -1 1 3 / -10 1 1 / -10 1 2 / -10 1 3 / -10 10 1 / -10 10 2 / -10 10 3 / -/ - -WBHP -/ - -WGIR - 'INJ' -/ - -WGIT - 'INJ' -/ - -WGPR -/ - -WGPT -/ - -WOPR -/ - -WOPT -/ - -WWIR -/ -WWIT -/ -WWPR -/ -WWPT -/ -WUBHP -/ -WUOPR -/ -WUWCT -/ - -FOPR - -FUOPR - - -SCHEDULE - -RPTSCHED - 'PRES' 'SGAS' 'RS' 'WELLS' 'WELSPECS' / - -RPTRST - 'BASIC=1' / - -UDQ - DEFINE FUINJ 0.90 * SUM(WWPR 'P*') / - UNITS FUINJ 'SM3/DAY' / -/ - - - -DRSDT - 0 / - -WELSPECS - 'P1' 'G1' 3 3 8400 'OIL' / - 'P2' 'G1' 4 4 8400 'OIL' / - 'P3' 'G1' 5 5 8400 'OIL' / - 'P4' 'G1' 6 6 8400 'OIL' / - 'INJ' 'G1' 1 1 8335 'GAS' / -/ - -COMPDAT - 'P1' 3 3 3 3 'OPEN' 1* 1* 0.5 / - 'P2' 4 4 3 3 'OPEN' 1* 1* 0.5 / - 'P3' 5 5 3 3 'OPEN' 1* 1* 0.5 / - 'P4' 6 6 3 3 'OPEN' 1* 1* 0.5 / - 'INJ' 1 1 1 1 'OPEN' 1* 1* 0.5 / -/ - - -WCONPROD - 'P1' 'OPEN' 'ORAT' 5000 4* 1000 / - 'P2' 'OPEN' 'ORAT' 5000 4* 1000 / - 'P3' 'OPEN' 'ORAT' 5000 4* 1000 / - 'P4' 'OPEN' 'ORAT' 5000 4* 1000 / -/ - -WCONINJE - 'INJ' 'WATER' 'OPEN' 'RATE' 10000 1* 9014 / -/ - -DATES - 1 'JAN' 2015 / -/ - -WCONINJE - 'INJ' 'WATER' 'OPEN' 'RATE' 'FUINJ' 1* 9014 / -/ - -DATES - 1 'FEB' 2015 / -/ - -DATES - 1 'MAR' 2015 / -/ - -DATES - 1 'APR' 2015 / -/ - -DATES - 1 'MAI' 2015 / -/ - -DATES - 1 'JUN' 2015 / -/ - -DATES - 1 'JUL' 2015 / -/ - -DATES - 1 'AUG' 2015 / -/ - -DATES - 1 'SEP' 2015 / -/ - -DATES - 1 'OCT' 2015 / -/ - -DATES - 1 'NOV' 2015 / -/ - -DATES - 1 'DEC' 2015 / -/ - -DATES - 1 'JAN' 2016 / -/ - -DATES - 1 'FEB' 2016 / -/ - -DATES - 1 'MAR' 2016 / -/ - -DATES - 1 'APR' 2016 / -/ - -DATES - 1 'MAI' 2016 / -/ - -DATES - 1 'JUN' 2016 / -/ - -DATES - 1 'JUL' 2016 / -/ - -DATES - 1 'AUG' 2016 / -/ - -DATES - 1 'SEP' 2016 / -/ - -DATES - 1 'OCT' 2016 / -/ - -DATES - 1 'NOV' 2016 / -/ - -DATES - 1 'DEC' 2016 / -/ - - -END -)"; \ No newline at end of file diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/ACTIONX.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/ACTIONX.cpp deleted file mode 100644 index 5865101ad2..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/ACTIONX.cpp +++ /dev/null @@ -1,811 +0,0 @@ -/* - Copyright 2018 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include -#include -#include - -#define BOOST_TEST_MODULE ACTIONX - -#include -#include - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -using namespace Opm; - - - - -BOOST_AUTO_TEST_CASE(Create) { - const auto action_kw = std::string{ R"( -ACTIONX - 'ACTION' / - WWCT OPX > 0.75 / -/ -)"}; - Action::ActionX action1("NAME", 10, 100, 0); - BOOST_CHECK_EQUAL(action1.name(), "NAME"); - - const auto deck = Parser{}.parseString( action_kw ); - const auto& kw = deck.getKeyword("ACTIONX"); - - Action::ActionX action2(kw, 0); - BOOST_CHECK_EQUAL(action2.name(), "ACTION"); -} - - -BOOST_AUTO_TEST_CASE(SCAN) { - const auto MISSING_END= std::string{ R"( -SCHEDULE - -ACTIONX - 'ACTION' / - WWCT OPX > 0.75 / -/ - -TSTEP - 10 / -)"}; - - const auto WITH_WELSPECS = std::string{ R"( -SCHEDULE - -WELSPECS - 'W2' 'OP' 1 1 3.33 'OIL' 7*/ -/ - -ACTIONX - 'ACTION' / - WWCT OPX > 0.75 / -/ - -WELSPECS - 'W1' 'OP' 1 1 3.33 'OIL' 7*/ -/ - -ENDACTIO - -TSTEP - 10 / -)"}; - - const auto WITH_GRID = std::string{ R"( -SCHEDULE - -WELSPECS - 'W2' 'OP' 1 1 3.33 'OIL' 7*/ -/ - -ACTIONX - 'ACTION' / - WWCT OPX > 0.75 / -/ - -PORO - 100*0.78 / - -ENDACTIO - -TSTEP - 10 / -)"}; - auto python = std::make_shared(); - Opm::Parser parser; - auto deck1 = parser.parseString(MISSING_END); - auto deck2 = parser.parseString(WITH_WELSPECS); - auto deck3 = parser.parseString(WITH_GRID); - EclipseGrid grid1(10,10,10); - TableManager table ( deck1 ); - FieldPropsManager fp( deck1, Phases{true, true, true}, grid1, table); - Runspec runspec (deck1); - - // The ACTIONX keyword has no matching 'ENDACTIO' -> exception - BOOST_CHECK_THROW(Schedule(deck1, grid1, fp, runspec, python), std::invalid_argument); - - Schedule sched(deck2, grid1, fp, runspec, python); - BOOST_CHECK( !sched.hasWell("W1") ); - BOOST_CHECK( sched.hasWell("W2")); - - // The deck3 contains the 'GRID' keyword in the ACTIONX block - that is not a whitelisted keyword. - ParseContext parseContext( {{ParseContext::ACTIONX_ILLEGAL_KEYWORD, InputError::THROW_EXCEPTION}} ); - ErrorGuard errors; - BOOST_CHECK_THROW(Schedule(deck3, grid1, fp, runspec, parseContext, errors, python), std::invalid_argument); -} - - -BOOST_AUTO_TEST_CASE(TestActions) { - Opm::SummaryState st(std::chrono::system_clock::now()); - Opm::Action::Context context(st); - Opm::Action::Actions config; - std::vector matching_wells; - auto python = std::make_shared(); - BOOST_CHECK_EQUAL(config.size(), 0); - BOOST_CHECK(config.empty()); - - Opm::Action::ActionX action1("NAME", 10, 100, 0); - config.add(action1); - BOOST_CHECK_EQUAL(config.size(), 1); - BOOST_CHECK(!config.empty()); - - double min_wait = 86400; - size_t max_eval = 3; - { - Opm::Action::ActionX action("NAME", max_eval, min_wait, asTimeT(TimeStampUTC(TimeStampUTC::YMD{ 2000, 7, 1 })) ); - config.add(action); - BOOST_CHECK_EQUAL(config.size(), 1); - - - Opm::Action::ActionX action3("NAME3", 1000000, 0, asTimeT(TimeStampUTC(TimeStampUTC::YMD{ 2000, 7, 1 })) ); - config.add(action3); - - Opm::Action::PyAction py_action1(python, "PYTHON1", Opm::Action::PyAction::RunCount::single, "act1.py"); - config.add(py_action1); - - Opm::Action::PyAction py_action2(python, "PYTHON2", Opm::Action::PyAction::RunCount::single, "act1.py"); - config.add(py_action2); - } - const Opm::Action::ActionX& action2 = config.get("NAME"); - // The action2 instance has an empty condition, so it will never evaluate to true. - BOOST_CHECK(action2.ready( asTimeT(TimeStampUTC(TimeStampUTC::YMD{ 2000, 7, 1 })) )); - BOOST_CHECK(!action2.ready( asTimeT(TimeStampUTC(TimeStampUTC::YMD{ 2000, 6, 1 })) )); - BOOST_CHECK(!action2.eval(asTimeT(TimeStampUTC(TimeStampUTC::YMD{ 2000, 6, 1 })), context)); - - auto pending = config.pending( asTimeT(TimeStampUTC(TimeStampUTC::YMD{ 2000, 8, 7 })) ); - BOOST_CHECK_EQUAL( pending.size(), 2); - for (auto& ptr : pending) { - BOOST_CHECK( ptr->ready( asTimeT(TimeStampUTC(TimeStampUTC::YMD{ 2000, 8, 7 })) )); - BOOST_CHECK( !ptr->eval(asTimeT(TimeStampUTC(TimeStampUTC::YMD{ 2000, 8, 7 })), context)); - } - BOOST_CHECK(!action2.eval(asTimeT(TimeStampUTC(TimeStampUTC::YMD{ 2000, 8, 7 })), context)); - - - const auto& python_actions = config.pending_python(); - BOOST_CHECK_EQUAL(python_actions.size(), 2); -} - - - -BOOST_AUTO_TEST_CASE(TestContext) { - Opm::SummaryState st(std::chrono::system_clock::now()); - st.update_well_var("OP1", "WOPR", 100); - Opm::Action::Context context(st); - - BOOST_REQUIRE_THROW(context.get("func", "arg"), std::out_of_range); - - context.add("FUNC", "ARG", 100); - BOOST_CHECK_EQUAL(context.get("FUNC", "ARG"), 100); - - const auto& wopr_wells = context.wells("WOPR"); - BOOST_CHECK_EQUAL(wopr_wells.size(), 1); - BOOST_CHECK_EQUAL(wopr_wells[0], "OP1"); - - const auto& wwct_wells = context.wells("WWCT"); - BOOST_CHECK_EQUAL(wwct_wells.size(), 0); -} - - - -Opm::Schedule make_action(const std::string& action_string) { - std::string start = std::string{ R"( -SCHEDULE -)"}; - std::string end = std::string{ R"( -ENDACTIO - -TSTEP - 10 / -)"}; - - std::string deck_string = start + action_string + end; - Opm::Parser parser; - auto deck = parser.parseString(deck_string); - auto python = std::make_shared(); - EclipseGrid grid1(10,10,10); - TableManager table ( deck ); - FieldPropsManager fp( deck, Phases{true, true, true}, grid1, table); - Runspec runspec(deck); - - return Schedule(deck, grid1, fp, runspec, python); -} - - -BOOST_AUTO_TEST_CASE(TestAction_AST_BASIC) { - // Missing comparator - BOOST_REQUIRE_THROW( Action::AST( std::vector{"WWCT", "OPX", "0.75"} ), std::invalid_argument); - - // Left hand side must be function expression - BOOST_REQUIRE_THROW( Action::AST(std::vector{"0.75", "<", "1.0"}), std::invalid_argument); - - //Extra data - BOOST_REQUIRE_THROW(Action::AST(std::vector{"0.75", "<", "1.0", "EXTRA"}), std::invalid_argument); - - Action::AST ast1({"WWCT", "OPX", ">", "0.75"}); - Action::AST ast2({"WWCT", "OPX", "=", "WWCT", "OPX"}); - Action::AST ast3({"WWCT", "OPY", ">", "0.75"}); - SummaryState st(std::chrono::system_clock::now()); - Action::Context context(st); - std::vector matching_wells; - - context.add("WWCT", "OPX", 100); - BOOST_CHECK(ast1.eval(context)); - - context.add("WWCT", "OPX", -100); - BOOST_CHECK(!ast1.eval(context)); - - BOOST_CHECK(ast2.eval(context)); - BOOST_REQUIRE_THROW(ast3.eval(context), std::out_of_range); -} - -BOOST_AUTO_TEST_CASE(TestAction_AST_OR_AND) { - Action::AST ast_or({"WWCT", "OPX", ">", "0.75", "OR", "WWCT", "OPY", ">", "0.75"}); - Action::AST ast_and({"WWCT", "OPX", ">", "0.75", "AND", "WWCT", "OPY", ">", "0.75"}); - Action::AST par({"WWCT", "OPX", ">", "0.75", "AND", "(", "WWCT", "OPY", ">", "0.75", "OR", "WWCT", "OPZ", ">", "0.75", ")"}); - SummaryState st(std::chrono::system_clock::now()); - Action::Context context(st); - - context.add("WWCT", "OPX", 100); - context.add("WWCT", "OPY", -100); - context.add("WWCT", "OPZ", 100); - BOOST_CHECK( ast_or.eval(context) ); - BOOST_CHECK( !ast_and.eval(context) ); - BOOST_CHECK( par.eval(context)); - - - context.add("WWCT", "OPX", -100); - context.add("WWCT", "OPY", 100); - context.add("WWCT", "OPZ", 100); - BOOST_CHECK( ast_or.eval(context)); - BOOST_CHECK( !ast_and.eval(context) ); - BOOST_CHECK( !par.eval(context)); - - - context.add("WWCT", "OPX", 100); - context.add("WWCT", "OPY", 100); - context.add("WWCT", "OPZ", -100); - BOOST_CHECK( ast_or.eval(context)); - BOOST_CHECK( ast_and.eval(context) ); - BOOST_CHECK( par.eval(context)); - - context.add("WWCT", "OPX", -100); - context.add("WWCT", "OPY", -100); - context.add("WWCT", "OPZ", -100); - BOOST_CHECK( !ast_or.eval(context) ); - BOOST_CHECK( !ast_and.eval(context) ); - BOOST_CHECK( !par.eval(context)); -} - -BOOST_AUTO_TEST_CASE(DATE) { - Action::AST ast(std::vector{"MNTH", ">=", "JUN"}); - SummaryState st(std::chrono::system_clock::now()); - Action::Context context(st); - - context.add("MNTH", 6); - BOOST_CHECK( ast.eval(context)); - - context.add("MNTH", 8); - BOOST_CHECK( ast.eval(context) ); - - context.add("MNTH", 5); - BOOST_CHECK( !ast.eval(context)); -} - - -BOOST_AUTO_TEST_CASE(MANUAL1) { - Action::AST ast({"GGPR", "FIELD", ">", "50000", "AND", "WGOR", "PR", ">" ,"GGOR", "FIELD"}); - SummaryState st(std::chrono::system_clock::now()); - Action::Context context(st); - - context.add("GGPR", "FIELD", 60000 ); - context.add("WGOR", "PR" , 300 ); - context.add("GGOR", "FIELD", 200); - BOOST_CHECK( ast.eval(context)); - - context.add("GGPR", "FIELD", 0 ); - context.add("WGOR", "PR" , 300 ); - context.add("GGOR", "FIELD", 200); - BOOST_CHECK( !ast.eval(context) ); - - context.add("GGPR", "FIELD", 60000 ); - context.add("WGOR", "PR" , 100 ); - context.add("GGOR", "FIELD", 200); - BOOST_CHECK( !ast.eval(context) ); -} - -BOOST_AUTO_TEST_CASE(MANUAL2) { - Action::AST ast({"GWCT", "LIST1", ">", "0.70", "AND", "(", "GWPR", "LIST1", ">", "GWPR", "LIST2", "OR", "GWPR", "LIST1", ">", "GWPR", "LIST3", ")"}); - SummaryState st(std::chrono::system_clock::now()); - Action::Context context(st); - - context.add("GWCT", "LIST1", 1.0); - context.add("GWPR", "LIST1", 1 ); - context.add("GWPR", "LIST2", 2 ); - context.add("GWPR", "LIST3", 3 ); - BOOST_CHECK( !ast.eval(context)); - - context.add("GWCT", "LIST1", 1.0); - context.add("GWPR", "LIST1", 1 ); - context.add("GWPR", "LIST2", 2 ); - context.add("GWPR", "LIST3", 0 ); - BOOST_CHECK( ast.eval(context)); - - context.add("GWCT", "LIST1", 1.0); - context.add("GWPR", "LIST1", 1 ); - context.add("GWPR", "LIST2", 0 ); - context.add("GWPR", "LIST3", 3 ); - BOOST_CHECK( ast.eval(context)); - - context.add("GWCT", "LIST1", 1.0); - context.add("GWPR", "LIST1", 1 ); - context.add("GWPR", "LIST2", 0 ); - context.add("GWPR", "LIST3", 0 ); - BOOST_CHECK( ast.eval(context)); - - context.add("GWCT", "LIST1", 0.0); - context.add("GWPR", "LIST1", 1 ); - context.add("GWPR", "LIST2", 0 ); - context.add("GWPR", "LIST3", 3 ); - BOOST_CHECK( !ast.eval(context)); -} - -BOOST_AUTO_TEST_CASE(MANUAL3) { - Action::AST ast({"MNTH", ".GE.", "MAR", "AND", "MNTH", ".LE.", "OCT", "AND", "GMWL", "HIGH", ".GE.", "4"}); - SummaryState st(std::chrono::system_clock::now()); - Action::Context context(st); - - context.add("MNTH", 4); - context.add("GMWL", "HIGH", 4); - BOOST_CHECK( ast.eval(context)); - - context.add("MNTH", 3); - context.add("GMWL", "HIGH", 4); - BOOST_CHECK( ast.eval(context)); - - context.add("MNTH", 11); - context.add("GMWL", "HIGH", 4); - BOOST_CHECK( !ast.eval(context)); - - context.add("MNTH", 3); - context.add("GMWL", "HIGH", 3); - BOOST_CHECK( !ast.eval(context)); -} - - -BOOST_AUTO_TEST_CASE(MANUAL4) { - Action::AST ast({"GWCT", "FIELD", ">", "0.8", "AND", "DAY", ">", "1", "AND", "MNTH", ">", "JUN", "AND", "YEAR", ">=", "2021"}); - SummaryState st(std::chrono::system_clock::now()); - Action::Context context(st); - - context.add("MNTH", 7); - context.add("DAY", 2); - context.add("YEAR", 2030); - context.add("GWCT", "FIELD", 1.0); - BOOST_CHECK( ast.eval(context) ); - - context.add("MNTH", 7); - context.add("DAY", 2); - context.add("YEAR", 2019); - context.add("GWCT", "FIELD", 1.0); - BOOST_CHECK( !ast.eval(context) ); -} - - - -BOOST_AUTO_TEST_CASE(MANUAL5) { - Action::AST ast({"WCG2", "PROD1", ">", "WCG5", "PROD2", "AND", "GCG3", "G1", ">", "GCG7", "G2", "OR", "FCG1", ">", "FCG7"}); - SummaryState st(std::chrono::system_clock::now()); - Action::Context context(st); - - context.add("WCG2", "PROD1", 100); - context.add("WCG5", "PROD2", 50); - context.add("GCG3", "G1", 200); - context.add("GCG7", "G2", 100); - context.add("FCG1", 100); - context.add("FCG7", 50); - BOOST_CHECK(ast.eval(context)); - - context.add("WCG2", "PROD1", 100); - context.add("WCG5", "PROD2", 50); - context.add("GCG3", "G1", 200); - context.add("GCG7", "G2", 100); - context.add("FCG1", 100); - context.add("FCG7", 150); - BOOST_CHECK(ast.eval(context)); - - context.add("WCG2", "PROD1", 100); - context.add("WCG5", "PROD2", 50); - context.add("GCG3", "G1", 20); - context.add("GCG7", "G2", 100); - context.add("FCG1", 100); - context.add("FCG7", 150); - BOOST_CHECK(!ast.eval(context)); - - context.add("WCG2", "PROD1", 100); - context.add("WCG5", "PROD2", 50); - context.add("GCG3", "G1", 20); - context.add("GCG7", "G2", 100); - context.add("FCG1", 200); - context.add("FCG7", 150); - BOOST_CHECK(ast.eval(context)); -} - - - -BOOST_AUTO_TEST_CASE(LGR) { - Action::AST ast({"LWCC" , "OPX", "LOCAL", "1", "2", "3", ">", "100"}); - SummaryState st(std::chrono::system_clock::now()); - Action::Context context(st); - - context.add("LWCC", "OPX:LOCAL:1:2:3", 200); - BOOST_CHECK(ast.eval(context)); - - context.add("LWCC", "OPX:LOCAL:1:2:3", 20); - BOOST_CHECK(!ast.eval(context)); -} - - -BOOST_AUTO_TEST_CASE(Action_ContextTest) { - SummaryState st(std::chrono::system_clock::now()); - st.update("WWCT:OP1", 100); - Action::Context context(st); - - - BOOST_CHECK_EQUAL(context.get("WWCT", "OP1"), 100); - BOOST_REQUIRE_THROW(context.get("WGOR", "B37"), std::out_of_range); - context.add("WWCT", "OP1", 200); - - BOOST_CHECK_EQUAL(context.get("WWCT", "OP1"), 200); - BOOST_REQUIRE_THROW(context.get("WGOR", "B37"), std::out_of_range); -} - -//Note: that this is only temporary test. -//Groupnames w/ astirisks wil eventually work with ACTIONX -BOOST_AUTO_TEST_CASE(TestGroupList) { - Action::AST ast({"GWPR", "*", ">", "1.0"}); - SummaryState st(std::chrono::system_clock::now()); - - Action::Context context(st); - BOOST_CHECK_THROW( ast.eval(context), std::logic_error ); -} - -BOOST_AUTO_TEST_CASE(TestMatchingWells) { - Action::AST ast({"WOPR", "*", ">", "1.0"}); - SummaryState st(std::chrono::system_clock::now()); - - st.update_well_var("OPX", "WOPR", 0); - st.update_well_var("OPY", "WOPR", 0.50); - st.update_well_var("OPZ", "WOPR", 2.0); - - Action::Context context(st); - auto res = ast.eval(context); - auto wells = res.wells(); - BOOST_CHECK( res); - - BOOST_CHECK_EQUAL( wells.size(), 1); - BOOST_CHECK_EQUAL( wells[0], "OPZ" ); -} - -BOOST_AUTO_TEST_CASE(TestMatchingWells2) { - Action::AST ast1({"WOPR", "P*", ">", "1.0"}); - Action::AST ast2({"WOPR", "*", ">", "1.0"}); - SummaryState st(std::chrono::system_clock::now()); - - st.update_well_var("PX", "WOPR", 0); - st.update_well_var("PY", "WOPR", 0.50); - st.update_well_var("PZ", "WOPR", 2.0); - - st.update_well_var("IX", "WOPR", 0); - st.update_well_var("IY", "WOPR", 0.50); - st.update_well_var("IZ", "WOPR", 2.0); - - Action::Context context(st); - auto res1 = ast1.eval(context); - auto res2 = ast2.eval(context); - auto wells1 = res1.wells(); - auto wells2 = res2.wells(); - BOOST_CHECK(res1); - BOOST_CHECK_EQUAL( wells1.size(), 1); - BOOST_CHECK_EQUAL( wells1[0], "PZ" ); - - BOOST_CHECK(res2); - BOOST_CHECK_EQUAL( wells2.size(), 2); - BOOST_CHECK_EQUAL( std::count(wells2.begin(), wells2.end(), "PZ") , 1); - BOOST_CHECK_EQUAL( std::count(wells2.begin(), wells2.end(), "IZ") , 1); -} - - - -BOOST_AUTO_TEST_CASE(TestMatchingWells_AND) { - Action::AST ast({"WOPR", "*", ">", "1.0", "AND", "WWCT", "*", "<", "0.50"}); - SummaryState st(std::chrono::system_clock::now()); - - st.update_well_var("OPX", "WOPR", 0); - st.update_well_var("OPY", "WOPR", 0.50); - st.update_well_var("OPZ", "WOPR", 2.0); // The WOPR check matches this well. - - st.update_well_var("OPX", "WWCT", 1.0); - st.update_well_var("OPY", "WWCT", 0.0); // The WWCT check matches this well. - st.update_well_var("OPZ", "WWCT", 1.0); - - Action::Context context(st); - auto res = ast.eval(context); - BOOST_CHECK(res); - - // Even though condition as a whole matches, there is no finite set of wells - // which mathes both conditions when combined with AND - i.e. the matching_wells - // variable should be empty. - BOOST_CHECK( res.wells().empty() ); -} - -BOOST_AUTO_TEST_CASE(TestMatchingWells_OR) { - Action::AST ast({"WOPR", "*", ">", "1.0", "OR", "WWCT", "*", "<", "0.50"}); - SummaryState st(std::chrono::system_clock::now()); - - st.update_well_var("OPX", "WOPR", 0); - st.update_well_var("OPY", "WOPR", 0.50); - st.update_well_var("OPZ", "WOPR", 2.0); // The WOPR check matches this well. - - st.update_well_var("OPX", "WWCT", 1.0); - st.update_well_var("OPY", "WWCT", 0.0); // The WWCT check matches this well. - st.update_well_var("OPZ", "WWCT", 1.0); - - Action::Context context(st); - auto res = ast.eval(context); - auto wells = res.wells(); - BOOST_CHECK(res); - - // The well 'OPZ' matches the first condition and the well 'OPY' matches the - // second condition, since the two conditions are combined with || the - // resulting mathcing_wells variable should contain both these wells. - BOOST_CHECK_EQUAL( wells.size(), 2); - BOOST_CHECK( std::find(wells.begin(), wells.end(), "OPZ") != wells.end()); - BOOST_CHECK( std::find(wells.begin(), wells.end(), "OPY") != wells.end()); -} - -BOOST_AUTO_TEST_CASE(TestFieldAND) { - Action::AST ast({"FMWPR", ">=", "4", "AND", "WUPR3", "OP*", "=", "1"}); - SummaryState st(std::chrono::system_clock::now()); - Action::Context context(st); - - st.update_well_var("OP1", "WUPR3", 3); - st.update_well_var("OP2", "WUPR3", 2); - st.update_well_var("OP3", "WUPR3", 1); - st.update_well_var("OP4", "WUPR3", 4); - - st.update("FMWPR", 1); - { - auto res = ast.eval(context); - auto wells = res.wells(); - BOOST_CHECK(!res); - } - - st.update("FMWPR", 4); - { - auto res = ast.eval(context); - auto wells = res.wells(); - BOOST_CHECK(res); - BOOST_CHECK_EQUAL(wells.size(), 1); - BOOST_CHECK_EQUAL(wells[0], "OP3"); - } -} - - -BOOST_AUTO_TEST_CASE(Conditions) { - auto location = Location("File", 100); - - // Missing comparator - BOOST_CHECK_THROW(Action::Condition cond({"WWCT", "OPX"}, location), std::invalid_argument); - - // Missing right hand side - BOOST_CHECK_THROW(Action::Condition cond({"WWCT", "OPX", ">"}, location), std::invalid_argument); - - Action::Condition cond({"WWCT", "OPX", ">", "0.75", "AND"}, location); - BOOST_CHECK(cond.cmp == Action::Condition::Comparator::GREATER); - BOOST_CHECK(cond.cmp_string == ">" ); - BOOST_CHECK_EQUAL(cond.lhs.quantity, "WWCT"); - BOOST_CHECK_EQUAL(cond.lhs.args.size(), 1); - BOOST_CHECK_EQUAL(cond.lhs.args[0], "OPX"); - - BOOST_CHECK_EQUAL(cond.rhs.quantity, "0.75"); - BOOST_CHECK_EQUAL(cond.rhs.args.size(), 0); - BOOST_CHECK(cond.logic == Action::Condition::Logical::AND); - - Action::Condition cond2({"WWCT", "OPX", "<=", "WSOPR", "OPX", "235"}, location); - BOOST_CHECK(cond2.cmp == Action::Condition::Comparator::LESS_EQUAL); - BOOST_CHECK(cond2.cmp_string == "<=" ); - BOOST_CHECK_EQUAL(cond2.lhs.quantity, "WWCT"); - BOOST_CHECK_EQUAL(cond2.lhs.args.size(), 1); - BOOST_CHECK_EQUAL(cond2.lhs.args[0], "OPX"); - - BOOST_CHECK_EQUAL(cond2.rhs.quantity, "WSOPR"); - BOOST_CHECK_EQUAL(cond2.rhs.args.size(), 2); - BOOST_CHECK_EQUAL(cond2.rhs.args[0], "OPX"); - BOOST_CHECK_EQUAL(cond2.rhs.args[1], "235"); - BOOST_CHECK(cond2.logic == Action::Condition::Logical::END); -} - - -BOOST_AUTO_TEST_CASE(SCAN2) { - const auto deck_string = std::string{ R"( -SCHEDULE - -TSTEP -10 / - -ACTIONX - 'B' / - WWCT 'OPX' > 0.75 AND / - FPR < 100 / -/ - -WELSPECS - 'W1' 'OP' 1 1 3.33 'OIL' 7*/ -/ - -ENDACTIO - -TSTEP - 10 / - - -ACTIONX - 'A' / - WOPR 'OPX' = 1000 / -/ - -ENDACTIO - -ACTIONX - 'B' / - FWCT <= 0.50 / -/ - - - -ENDACTIO - -TSTEP -10 / - -)"}; - - Opm::Parser parser; - auto deck = parser.parseString(deck_string); - EclipseGrid grid1(10,10,10); - TableManager table ( deck ); - FieldPropsManager fp( deck, Phases{true, true, true}, grid1, table); - auto python = std::make_shared(); - - Runspec runspec (deck); - Schedule sched(deck, grid1, fp, runspec, python); - const auto& actions0 = sched.actions(0); - BOOST_CHECK_EQUAL(actions0.size(), 0); - - const auto& actions1 = sched.actions(1); - BOOST_CHECK_EQUAL(actions1.size(), 1); - - - const auto& act1 = actions1.get("B"); - const auto& strings = act1.keyword_strings(); - BOOST_CHECK_EQUAL(strings.size(), 4); - BOOST_CHECK_EQUAL(strings.back(), "ENDACTIO"); - - - std::string rdeck_string = ""; - for (std::size_t i = 0; i < strings.size(); i++) - rdeck_string += strings[i] + "\n"; - - auto deck2 = parser.parseString(rdeck_string); - BOOST_CHECK(deck2.getKeyword("WELSPECS") == deck.getKeyword("WELSPECS")); - - - const auto& conditions = act1.conditions(); - BOOST_CHECK_EQUAL(conditions.size() , 2); - - const auto& cond0 = conditions[0]; - BOOST_CHECK_EQUAL(cond0.lhs.quantity, "WWCT"); - BOOST_CHECK(cond0.cmp == Action::Condition::Comparator::GREATER); - BOOST_CHECK(cond0.logic == Action::Condition::Logical::AND); - BOOST_CHECK_EQUAL(cond0.lhs.args.size(), 1); - BOOST_CHECK_EQUAL(cond0.lhs.args[0], "OPX"); - BOOST_CHECK_EQUAL(cond0.rhs.args.size(), 0); - BOOST_CHECK_EQUAL(cond0.rhs.quantity, "0.75"); - - const auto& cond1 = conditions[1]; - BOOST_CHECK_EQUAL(cond1.lhs.quantity, "FPR"); - BOOST_CHECK(cond1.cmp == Action::Condition::Comparator::LESS); - BOOST_CHECK(cond1.logic == Action::Condition::Logical::END); - - /*****************************************************************/ - - const auto& actions2 = sched.actions(2); - BOOST_CHECK_EQUAL(actions2.size(), 2); - - const auto& actB = actions2.get("B"); - const auto& condB = actB.conditions(); - BOOST_CHECK_EQUAL(condB.size() , 1); - BOOST_CHECK_EQUAL(condB[0].lhs.quantity, "FWCT"); - BOOST_CHECK(condB[0].cmp == Action::Condition::Comparator::LESS_EQUAL); - BOOST_CHECK(condB[0].logic == Action::Condition::Logical::END); - BOOST_CHECK_EQUAL(condB[0].cmp_string, "<="); - - const auto& actA = actions2.get("A"); - const auto& condA = actA.conditions(); - BOOST_CHECK_EQUAL(condA.size() , 1); - BOOST_CHECK_EQUAL(condA[0].lhs.quantity, "WOPR"); - BOOST_CHECK(condA[0].cmp == Action::Condition::Comparator::EQUAL); - BOOST_CHECK(condA[0].logic == Action::Condition::Logical::END); - BOOST_CHECK_EQUAL(condA[0].cmp_string , "="); - - std::size_t index = 0; - for (const auto& act : actions2) { - if (index == 0) - BOOST_CHECK_EQUAL("B", act.name()); - - if (index == 1) - BOOST_CHECK_EQUAL("A", act.name()); - index++; - } -} - - - -BOOST_AUTO_TEST_CASE(ACTIONRESULT_COPY_EMPTY) { - Action::Result res1(false); - auto res2 = res1; - - BOOST_CHECK(!res1); - BOOST_CHECK(!res2); - BOOST_CHECK(res1.wells() == std::vector()); - BOOST_CHECK(res2.wells() == std::vector()); - - BOOST_CHECK(!res1.has_well("NO")); - BOOST_CHECK(!res2.has_well("NO")); -} - -BOOST_AUTO_TEST_CASE(ACTIONRESULT_COPY_WELLS) { - Action::Result res1(true, {"W1", "W2", "W3"}); - auto res2 = res1; - - BOOST_CHECK(res1); - BOOST_CHECK(res2); - BOOST_CHECK(!res1.has_well("NO")); - BOOST_CHECK(!res2.has_well("NO")); - for (const auto& w : {"W1", "W2", "W3"}) { - BOOST_CHECK(res1.has_well(w)); - BOOST_CHECK(res2.has_well(w)); - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/ADDREGTests.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/ADDREGTests.cpp deleted file mode 100644 index a5c87c31e6..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/ADDREGTests.cpp +++ /dev/null @@ -1,167 +0,0 @@ -/* - Copyright 2014 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include -#include -#include -#include - -#define BOOST_TEST_MODULE EqualRegTests -#include -#include - -#include - -#include - -#include -#include - -#include -#include -#include - -static Opm::Deck createDeckInvalidArray() { - const char* deckData = - "RUNSPEC\n" - "\n" - "DIMENS\n" - " 10 10 10 /\n" - "GRID\n" - "ADDREG\n" - " MISSING 10 10 M / \n" - "/\n" - "EDIT\n" - "\n"; - - Opm::Parser parser; - return parser.parseString(deckData) ; -} - - -static Opm::Deck createDeckInvalidRegion() { - const char* deckData = - "RUNSPEC\n" - "\n" - "DIMENS\n" - " 10 10 10 /\n" - "GRID\n" - "ADDREG\n" - " MISSING 10 10 MX / \n" - "/\n" - "EDIT\n" - "\n"; - - Opm::Parser parser; - return parser.parseString(deckData) ; -} - - -static Opm::Deck createDeckInvalidValue() { - const char* deckData = - "RUNSPEC\n" - "\n" - "DIMENS\n" - " 10 10 10 /\n" - "GRID\n" - "MULTNUM \n" - " 1000*1 /\n" - "ADDREG\n" - " SATNUM 0.2 10 M / \n" - "/\n" - "EDIT\n" - "\n"; - - Opm::Parser parser; - return parser.parseString(deckData) ; -} - - -static Opm::Deck createDeckUnInitializedRegion() { - const char* deckData = - "RUNSPEC\n" - "\n" - "DIMENS\n" - " 10 10 10 /\n" - "GRID\n" - "SATNUM \n" - " 1000*1 /\n" - "REGIONS\n" - "ADDREG\n" - " SATNUM 2 10 M / \n" - "/\n" - "EDIT\n" - "\n"; - - Opm::Parser parser; - return parser.parseString(deckData) ; -} - - -static Opm::Deck createDeckUnInitializedVector() { - const char* deckData = - "RUNSPEC\n" - "\n" - "DIMENS\n" - " 10 10 10 /\n" - "GRID\n" - "MULTNUM \n" - " 1000*1 /\n" - "REGIONS\n" - "ADDREG\n" - " SATNUM 2 10 M / \n" - "/\n" - "EDIT\n" - "\n"; - - Opm::Parser parser; - return parser.parseString(deckData) ; -} - - - -BOOST_AUTO_TEST_CASE(InvalidArrayThrows) { - Opm::Deck deck = createDeckInvalidArray(); - BOOST_CHECK_THROW( new Opm::EclipseState( deck) , std::invalid_argument ); -} - - -BOOST_AUTO_TEST_CASE(InvalidRegionThrows) { - Opm::Deck deck = createDeckInvalidRegion(); - BOOST_CHECK_THROW( new Opm::EclipseState( deck) , std::invalid_argument ); -} - - -BOOST_AUTO_TEST_CASE(ExpectedIntThrows) { - Opm::Deck deck = createDeckInvalidValue(); - BOOST_CHECK_THROW( new Opm::EclipseState( deck) , std::invalid_argument ); -} - - -BOOST_AUTO_TEST_CASE(UnInitializedRegionThrows) { - Opm::Deck deck = createDeckUnInitializedRegion(); - BOOST_CHECK_THROW( new Opm::EclipseState( deck) , std::invalid_argument ); -} - - -BOOST_AUTO_TEST_CASE(UnInitializedVectorThrows) { - Opm::Deck deck = createDeckUnInitializedVector(); - BOOST_CHECK_THROW( new Opm::EclipseState( deck) , std::invalid_argument ); -} - diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/AquiferTests.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/AquiferTests.cpp deleted file mode 100644 index 7fda196122..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/AquiferTests.cpp +++ /dev/null @@ -1,556 +0,0 @@ -/* -Copyright 2017 TNO. -Copyright 2020 Equinor. - -This file is part of the Open Porous Media project (OPM). -OPM is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. -OPM is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. -You should have received a copy of the GNU General Public License -along with OPM. If not, see . -*/ - -#define BOOST_TEST_MODULE AquiferCTTest - -#include -#include -#include -#include -#include -#include - -using namespace Opm; - - -EclipseGrid makeGrid() { - EclipseGrid grid(3,3,3); - std::vector actnum(27,1); - actnum[0] = 0; - actnum[9] = 0; - actnum[18] = 0; - grid.resetACTNUM(actnum); - return grid; -} - - - -inline Deck createAquiferCTDeck() { - const char *deckData = - "DIMENS\n" - "3 3 3 /\n" - "\n" - "AQUDIMS\n" - "1* 1* 2 100 1 1000 /\n" - "GRID\n" - "\n" - "ACTNUM\n" - " 0 8*1 0 8*1 0 8*1 /\n" - "DXV\n" - "1 1 1 /\n" - "\n" - "DYV\n" - "1 1 1 /\n" - "\n" - "DZV\n" - "1 1 1 /\n" - "\n" - "TOPS\n" - "9*100 /\n" - "\n" - "PORO\n" - " 27*0.15 /\n" - "PROPS\n" - "AQUTAB\n" - " 0.01 0.112 \n" - " 0.05 0.229 /\n" - "SOLUTION\n" - "\n" - "AQUCT\n" - " 1 2000.0 1.5 100 .3 3.0e-5 330 10 360.0 1 2 /\n" - "/ \n"; - - Parser parser; - return parser.parseString(deckData); -} - -inline Deck createAquiferCTDeckDefaultP0() { - const char *deckData = - "DIMENS\n" - "3 3 3 /\n" - "\n" - "AQUDIMS\n" - "1* 1* 2 100 1 1000 /\n" - "GRID\n" - "\n" - "ACTNUM\n" - " 0 8*1 0 8*1 0 8*1 /\n" - "DXV\n" - "1 1 1 /\n" - "\n" - "DYV\n" - "1 1 1 /\n" - "\n" - "DZV\n" - "1 1 1 /\n" - "\n" - "TOPS\n" - "9*100 /\n" - "\n" - "PORO\n" - " 27*0.15 /\n" - "PROPS\n" - "AQUTAB\n" - " 0.01 0.112 \n" - " 0.05 0.229 /\n" - "SOLUTION\n" - "\n" - "AQUCT\n" - " 1 2000.0 1* 100 .3 3.0e-5 330 10 360.0 1 2 /\n" - "/ \n"; - - Parser parser; - return parser.parseString(deckData); -} - -AquiferCT init_aquiferct(const Deck& deck){ - EclipseState eclState( deck ); - return AquiferCT(eclState.getTableManager(), deck); -} - -BOOST_AUTO_TEST_CASE(AquiferCTTest){ - auto deck = createAquiferCTDeck(); - { - auto aquiferct = init_aquiferct(deck); - for (const auto& it : aquiferct){ - BOOST_CHECK_EQUAL(it.aquiferID , 1); - BOOST_CHECK_EQUAL(it.phi_aq , 0.3); - BOOST_CHECK_EQUAL(it.inftableID , 2); - BOOST_CHECK(it.p0.first == true); - BOOST_CHECK_CLOSE(it.p0.second, 1.5e5, 1e-6); - } - BOOST_CHECK_EQUAL(aquiferct.size(), 1); - } - - auto deck_default_p0 = createAquiferCTDeckDefaultP0(); - { - auto aquiferct = init_aquiferct(deck_default_p0); - for (const auto& it : aquiferct){ - BOOST_CHECK_EQUAL(it.aquiferID , 1); - BOOST_CHECK_EQUAL(it.phi_aq , 0.3); - BOOST_CHECK_EQUAL(it.inftableID , 2); - BOOST_CHECK(it.p0.first == false); - } - auto data = aquiferct.data(); - AquiferCT aq2(data); - BOOST_CHECK( aq2 == aquiferct ); - } -} - -inline Deck createAQUANCONDeck_DEFAULT_INFLUX2() { - const char *deckData = - "DIMENS\n" - "3 3 3 /\n" - "\n" - "GRID\n" - "\n" - "ACTNUM\n" - " 0 8*1 0 8*1 0 8*1 /\n" - "DXV\n" - "1 1 1 /\n" - "\n" - "DYV\n" - "1 1 1 /\n" - "\n" - "DZV\n" - "1 1 1 /\n" - "\n" - "TOPS\n" - "9*100 /\n" - "\n" - "PORO\n" - " 27*0.15 /\n" - "SOLUTION\n" - "\n" - "AQUANCON\n" - " 1 2 2 1 1 1 1 J- 1.0 /\n" - " 1 2 2 1 1 1 1 J- /\n" - "/ \n"; - - Parser parser; - return parser.parseString(deckData); -} - - -inline Deck createAQUANCONDeck_DEFAULT_INFLUX1() { - const char *deckData = - "DIMENS\n" - "3 3 3 /\n" - "\n" - "GRID\n" - "\n" - "ACTNUM\n" - " 0 8*1 0 8*1 0 8*1 /\n" - "DXV\n" - "1 1 1 /\n" - "\n" - "DYV\n" - "1 1 1 /\n" - "\n" - "DZV\n" - "1 1 1 /\n" - "\n" - "TOPS\n" - "9*100 /\n" - "PORO\n" - " 27*0.15 /\n" - "\n" - "SOLUTION\n" - "\n" - "AQUANCON\n" - " 1 1 3 1 1 1 1 J- /\n" - "/\n" - "AQUANCON\n" - " 2 1 1 2 2 1 1 J- /\n" - "/ \n"; - - Parser parser; - return parser.parseString(deckData); -} - -inline Deck createAQUANCONDeck_DEFAULT_ILLEGAL() { - const char *deckData = - "DIMENS\n" - "3 3 3 /\n" - "\n" - "GRID\n" - "\n" - "ACTNUM\n" - " 0 8*1 0 8*1 0 8*1 /\n" - "DXV\n" - "1 1 1 /\n" - "\n" - "DYV\n" - "1 1 1 /\n" - "\n" - "DZV\n" - "1 1 1 /\n" - "\n" - "TOPS\n" - "9*100 /\n" - "PORO\n" - " 27*0.15 /\n" - "\n" - "SOLUTION\n" - "\n" - "AQUANCON\n" - " 1 1 3 1 1 1 1 J- /\n" - "/\n" - "AQUANCON\n" - " 2 1 2 1 2 1 1 J- /\n" - "/ \n"; - - Parser parser; - return parser.parseString(deckData); -} - -inline Deck createAQUANCONDeck() { - const char *deckData = - "DIMENS\n" - "3 3 3 /\n" - "\n" - "GRID\n" - "\n" - "ACTNUM\n" - " 0 8*1 0 8*1 0 8*1 /\n" - "DXV\n" - "1 1 1 /\n" - "\n" - "DYV\n" - "1 1 1 /\n" - "\n" - "DZV\n" - "1 1 1 /\n" - "\n" - "TOPS\n" - "9*100 /\n" - "\n" - "PORO\n" - " 27*0.15 /\n" - "SOLUTION\n" - "\n" - "AQUANCON\n" - " 1 1 1 1 1 1 1 J- 1.0 1.0 NO /\n" - " 1 1 3 1 3 3 3 I+ 0.5 1.0 NO /\n" - " 1 1 3 1 3 3 3 J+ 0.75 1.0 NO /\n" - " 1 1 3 1 3 3 3 J- 2.75 1.0 NO /\n" - " 1 2 3 2 3 1 1 I+ 2.75 1.0 NO /\n" - "/ \n"; - - Parser parser; - return parser.parseString(deckData); -} - - - - -BOOST_AUTO_TEST_CASE(AquanconTest_DEFAULT_INFLUX) { - auto deck1 = createAQUANCONDeck_DEFAULT_INFLUX1(); - const auto& grid = makeGrid(); - Aquancon aqcon(grid, deck1); - - const auto& cells_aq1 = aqcon[1]; - /* - The cells I = 0..2 are connected to aquifer 1; cell I==0 is inactive and - not counted here ==> a total of 2 cells are connected to aquifer 1. - */ - BOOST_CHECK_EQUAL(cells_aq1.size(), 2); - - const auto& cells_aq2 = aqcon[2]; - BOOST_CHECK_EQUAL(cells_aq2.size(), 1); - BOOST_CHECK(aqcon.active()); - - auto deck2 = createAQUANCONDeck_DEFAULT_INFLUX2(); - BOOST_CHECK_THROW(Aquancon( grid, deck2), std::invalid_argument); - - // The cell (2,1,1) is attached to both aquifer 1 and aquifer 2 - that is illegal. - auto deck3 = createAQUANCONDeck_DEFAULT_ILLEGAL(); - BOOST_CHECK_THROW(Aquancon( grid, deck3), std::invalid_argument); -} - - -// allowing aquifer exists inside the reservoir -inline Deck createAQUANCONDeck_ALLOW_INSIDE_AQUAN_OR_NOT() { - const char *deckData = - "DIMENS\n" - "3 3 3 /\n" - "\n" - "GRID\n" - "\n" - "ACTNUM\n" - " 0 8*1 0 8*1 0 8*1 /\n" - "DXV\n" - "1 1 1 /\n" - "\n" - "DYV\n" - "1 1 1 /\n" - "\n" - "DZV\n" - "1 1 1 /\n" - "\n" - "TOPS\n" - "9*100 /\n" - "\n" - "PORO\n" - " 27*0.15 /\n" - "SOLUTION\n" - "\n" - "AQUFETP\n" - " 1 20.0 1000.0 2000. 0.000001 200.0 /\n" - " 2 20.0 1000.0 2000. 0.000001 200.0 /\n" - "/\n" - "AQUANCON\n" - " 1 1 1 1 1 1 1 J- 2* YES /\n" - " 1 2 2 1 1 1 1 J- 2* YES /\n" - " 1 2 2 2 2 1 1 J- 2* YES /\n" - " 2 1 1 1 1 3 3 J- 2* NO /\n" - " 2 2 2 1 1 3 3 J- 2* NO /\n" - " 2 2 2 2 2 3 3 J- 2* NO /\n" - "/ \n"; - - Parser parser; - return parser.parseString(deckData); -} - -BOOST_AUTO_TEST_CASE(AquanconTest_ALLOW_AQUIFER_INSIDE_OR_NOT) { - auto deck = createAQUANCONDeck_ALLOW_INSIDE_AQUAN_OR_NOT(); - const EclipseState eclState( deck ); - const Aquancon aqucon( eclState.getInputGrid(), deck); - - const auto& data = aqucon.data(); - const Aquancon aq2(data); - - BOOST_CHECK(aqucon == aq2); - auto cells1 = aqucon[1]; - auto cells2 = aqucon[2]; - BOOST_CHECK_EQUAL(cells1.size() , 2); - BOOST_CHECK_EQUAL(cells2.size() , 1); -} - -inline Deck createAquifetpDeck() { - const char *deckData = - "DIMENS\n" - "3 3 3 /\n" - "\n" - "AQUDIMS\n" - "1* 1* 2 100 1 1000 /\n" - "GRID\n" - "\n" - "ACTNUM\n" - " 0 8*1 0 8*1 0 8*1 /\n" - "DXV\n" - "1 1 1 /\n" - "\n" - "DYV\n" - "1 1 1 /\n" - "\n" - "DZV\n" - "1 1 1 /\n" - "\n" - "TOPS\n" - "9*100 /\n" - "\n" - "PROPS\n" - "AQUTAB\n" - " 0.01 0.112 \n" - " 0.05 0.229 /\n" - "SOLUTION\n" - "\n" - "AQUFETP\n" - "1 70000.0 4.0e3 2.0e9 1.0e-5 500 1 0 0 /\n" - "/\n"; - - Parser parser; - return parser.parseString(deckData); -} - -inline Deck createNullAquifetpDeck(){ - const char *deckData = - "DIMENS\n" - "3 3 3 /\n" - "\n" - "AQUDIMS\n" - "1* 1* 2 100 1 1000 /\n" - "GRID\n" - "\n" - "ACTNUM\n" - " 0 8*1 0 8*1 0 8*1 /\n" - "DXV\n" - "1 1 1 /\n" - "\n" - "DYV\n" - "1 1 1 /\n" - "\n" - "DZV\n" - "1 1 1 /\n" - "\n" - "TOPS\n" - "9*100 /\n" - "\n" - "PROPS\n" - "AQUTAB\n" - " 0.01 0.112 \n" - " 0.05 0.229 /\n" - "SOLUTION\n" - ; - - Parser parser; - return parser.parseString(deckData); -} - -inline Deck createAquifetpDeck_defaultPressure(){ - const char *deckData = - "DIMENS\n" - "3 3 3 /\n" - "\n" - "AQUDIMS\n" - "1* 1* 2 100 1 1000 /\n" - "GRID\n" - "\n" - "ACTNUM\n" - " 0 8*1 0 8*1 0 8*1 /\n" - "DXV\n" - "1 1 1 /\n" - "\n" - "DYV\n" - "1 1 1 /\n" - "\n" - "DZV\n" - "1 1 1 /\n" - "\n" - "TOPS\n" - "9*100 /\n" - "\n" - "PROPS\n" - "AQUTAB\n" - " 0.01 0.112 \n" - " 0.05 0.229 /\n" - "SOLUTION\n" - "\n" - "AQUFETP\n" - "1 70000.0 1* 2.0e9 1.0e-5 500 1 0 0 /\n" - "/\n"; - - Parser parser; - return parser.parseString(deckData); -} - -inline Aquifetp init_aquifetp(Deck& deck){ - Aquifetp aqufetp(deck); - return aqufetp; -} - -BOOST_AUTO_TEST_CASE(AquifetpTest){ - auto aqufetp_deck = createAquifetpDeck(); - const auto& aquifetp = init_aquifetp(aqufetp_deck); - for (const auto& it : aquifetp){ - BOOST_CHECK_EQUAL(it.aquiferID , 1); - BOOST_CHECK_EQUAL(it.V0, 2.0e9); - BOOST_CHECK_EQUAL(it.J, 500/86400e5); - BOOST_CHECK( it.p0.first ); - } - const auto& data = aquifetp.data(); - Aquifetp aq2(data); - BOOST_CHECK(aq2 == aquifetp); - - auto aqufetp_deck_null = createNullAquifetpDeck(); - const auto& aquifetp_null = init_aquifetp(aqufetp_deck_null); - BOOST_CHECK_EQUAL(aquifetp_null.size(), 0); - - auto aqufetp_deck_default = createAquifetpDeck_defaultPressure(); - const auto& aquifetp_default = init_aquifetp(aqufetp_deck_default); - for (const auto& it : aquifetp_default){ - BOOST_CHECK_EQUAL(it.aquiferID , 1); - BOOST_CHECK_EQUAL(it.V0, 2.0e9); - BOOST_CHECK_EQUAL(it.J, 500/86400e5); - BOOST_CHECK( !it.p0.first ); - } - -} - -BOOST_AUTO_TEST_CASE(TEST_CREATE) { - Opm::Aqudims aqudims; - - BOOST_CHECK_EQUAL( aqudims.getNumAqunum() , 1 ); - BOOST_CHECK_EQUAL( aqudims.getNumConnectionNumericalAquifer() , 1 ); - BOOST_CHECK_EQUAL( aqudims.getNumInfluenceTablesCT() , 1 ); - BOOST_CHECK_EQUAL( aqudims.getNumRowsInfluenceTable() , 36 ); - BOOST_CHECK_EQUAL( aqudims.getNumAnalyticAquifers() , 1 ); - BOOST_CHECK_EQUAL( aqudims.getNumRowsAquancon() , 1 ); - BOOST_CHECK_EQUAL( aqudims.getNumAquiferLists() , 0 ); - BOOST_CHECK_EQUAL( aqudims.getNumAnalyticAquifersSingleList() , 0 ); -} - -BOOST_AUTO_TEST_CASE(Test_Aquifer_Config) { - const std::string deck_string = R"( -DIMENS - 3 3 3 / -)"; - Opm::Parser parser; - Opm::Deck deck = parser.parseString(deck_string); - Opm::TableManager tables; - Opm::EclipseGrid grid(10,10,10); - Opm::AquiferConfig conf(tables, grid, deck); - BOOST_CHECK(!conf.active()); - - - const auto& fetp = conf.fetp(); - const auto& ct = conf.ct(); - const auto& conn = conf.connections(); - Opm::AquiferConfig conf2(fetp, ct, conn); - BOOST_CHECK( conf == conf2 ); -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/BoxTests.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/BoxTests.cpp deleted file mode 100644 index af56ab4faf..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/BoxTests.cpp +++ /dev/null @@ -1,205 +0,0 @@ -/* - Copyright 2014 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include -#include -#include - -#define BOOST_TEST_MODULE BoxManagereTests - -#include -#include -#include - -#include -#include - -BOOST_AUTO_TEST_CASE(CreateBox) { - Opm::EclipseGrid grid(4,3,2); - Opm::Box box(grid); - BOOST_CHECK_EQUAL( 24U , box.size() ); - BOOST_CHECK( box.isGlobal() ); - BOOST_CHECK_EQUAL( 4 , box.getDim(0) ); - BOOST_CHECK_EQUAL( 3 , box.getDim(1) ); - BOOST_CHECK_EQUAL( 2 , box.getDim(2) ); - - BOOST_CHECK_THROW( box.getDim(5) , std::invalid_argument); - - - { - size_t i,j,k; - const std::vector& indexList = box.getIndexList(); - - for (k=0; k < box.getDim(2); k++) { - for (j=0; j < box.getDim(1); j++) { - for (i=0; i < box.getDim(0); i++) { - size_t g = i + j*box.getDim(0) + k*box.getDim(0)*box.getDim(1); - BOOST_CHECK_EQUAL( indexList[g] , g); - - } - } - } - } -} - - - -BOOST_AUTO_TEST_CASE(CreateSubBox) { - Opm::EclipseGrid grid(10,10,10); - Opm::Box globalBox(grid); - - BOOST_CHECK_THROW( new Opm::Box( grid , -1 , 9 , 1 , 8 , 1, 8) , std::invalid_argument); // Negative throw - BOOST_CHECK_THROW( new Opm::Box( grid , 1 , 19 , 1 , 8 , 1, 8) , std::invalid_argument); // Bigger than global: throw - BOOST_CHECK_THROW( new Opm::Box( grid , 9 , 1 , 1 , 8 , 1, 8) , std::invalid_argument); // Inverted order: throw - - Opm::Box subBox1(grid, 0,9,0,9,0,9); - BOOST_CHECK( subBox1.isGlobal()); - - - Opm::Box subBox2(grid, 1,3,1,4,1,5); - BOOST_CHECK( !subBox2.isGlobal()); - BOOST_CHECK_EQUAL( 60U , subBox2.size() ); - - size_t i,j,k; - size_t d = 0; - const std::vector& indexList = subBox2.getIndexList(); - - for (k=0; k < subBox2.getDim(2); k++) { - for (j=0; j < subBox2.getDim(1); j++) { - for (i=0; i < subBox2.getDim(0); i++) { - - size_t g = (i + 1) + (j + 1)*globalBox.getDim(0) + (k + 1)*globalBox.getDim(0)*globalBox.getDim(1); - BOOST_CHECK_EQUAL( indexList[d] , g); - d++; - } - } - } -} - - -BOOST_AUTO_TEST_CASE(BoxEqual) { - Opm::EclipseGrid grid1(10,10,10); - Opm::EclipseGrid grid3(10,10,11); - Opm::EclipseGrid grid4(20,20,20); - Opm::Box globalBox1( grid1 ); - Opm::Box globalBox2( grid1 ); - Opm::Box globalBox3( grid3 ); - - Opm::Box globalBox4(grid4); - Opm::Box subBox1( grid1 , 0 , 9 , 0 , 9 , 0, 9); - Opm::Box subBox4( grid4 , 0 , 9 , 0 , 9 , 0, 9); - Opm::Box subBox5( grid4 , 10 , 19 , 10 , 19 , 10, 19); - - BOOST_CHECK( globalBox1.equal( globalBox2 )); - BOOST_CHECK( !globalBox1.equal( globalBox3 )); - BOOST_CHECK( globalBox1.equal( subBox1 )); - - BOOST_CHECK( !globalBox4.equal( subBox4 )); - BOOST_CHECK( !subBox4.equal( subBox5 )); -} - -BOOST_AUTO_TEST_CASE(CreateBoxManager) { - Opm::EclipseGrid grid(10,10,10); - Opm::BoxManager boxManager(grid); - Opm::Box box(grid); - - BOOST_CHECK( box.equal( boxManager.getActiveBox()) ); -} - - - - -BOOST_AUTO_TEST_CASE(TestInputBox) { - Opm::EclipseGrid grid(10,10,10); - Opm::BoxManager boxManager(grid); - Opm::Box inputBox( grid, 0,4,0,4,0,4); - Opm::Box globalBox( grid ); - - boxManager.setInputBox( 0,4,0,4,0,4 ); - BOOST_CHECK( inputBox.equal( boxManager.getActiveBox()) ); - boxManager.endSection(); - BOOST_CHECK( boxManager.getActiveBox().equal(globalBox)); -} - - - - -BOOST_AUTO_TEST_CASE(TestKeywordBox) { - Opm::EclipseGrid grid(10,10,10); - Opm::BoxManager boxManager(grid); - Opm::Box inputBox( grid, 0,4,0,4,0,4); - Opm::Box keywordBox( grid, 0,2,0,2,0,2); - Opm::Box globalBox( grid ); - - - boxManager.setInputBox( 0,4,0,4,0,4 ); - BOOST_CHECK( inputBox.equal( boxManager.getActiveBox()) ); - - boxManager.setKeywordBox( 0,2,0,2,0,2 ); - BOOST_CHECK( keywordBox.equal( boxManager.getActiveBox()) ); - - // Must end keyword first - BOOST_CHECK_THROW( boxManager.endSection() , std::invalid_argument ); - - boxManager.endKeyword(); - BOOST_CHECK( inputBox.equal( boxManager.getActiveBox()) ); - - boxManager.endSection(); - BOOST_CHECK( boxManager.getActiveBox().equal(globalBox)); -} - - -BOOST_AUTO_TEST_CASE(BoxNineArg) { - const size_t nx = 10; - const size_t ny = 7; - const size_t nz = 6; - Opm::EclipseGrid grid(nx,ny,nz); - BOOST_CHECK_NO_THROW( Opm::Box(grid,0,7,0,5,1,2) ); - - // J2 < J1 - BOOST_CHECK_THROW( Opm::Box(grid,1,1,4,3,2,2), std::invalid_argument); - - // K2 >= Nz - BOOST_CHECK_THROW( Opm::Box(grid,1,1,2,2,3,nz), std::invalid_argument); -} - -BOOST_AUTO_TEST_CASE(TestKeywordBox2) { - Opm::EclipseGrid grid(10,10,10); - std::vector actnum(grid.getCartesianSize(), 1); - actnum[0] = 0; - grid.resetACTNUM(actnum); - - Opm::BoxManager boxManager(grid); - const auto& box = boxManager.getActiveBox(); - - for (const auto& p : box.index_list()) - BOOST_CHECK_EQUAL(p.active_index + 1, p.global_index); - BOOST_CHECK_EQUAL(box.index_list().size() + 1, grid.getCartesianSize()); - - - Opm::Box box2(grid,9,9,9,9,0,9); - const auto& il = box2.index_list(); - BOOST_CHECK_EQUAL(il.size(), 10); - - for (std::size_t i=0; i < 10; i++) { - BOOST_CHECK_EQUAL(il[i].data_index, i); - BOOST_CHECK_EQUAL(il[i].global_index, 99 + i*100); - BOOST_CHECK_EQUAL(il[i].active_index, 98 + i*100); - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/COMPSEGUnits.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/COMPSEGUnits.cpp deleted file mode 100644 index 5ef5cd80c2..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/COMPSEGUnits.cpp +++ /dev/null @@ -1,54 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#define BOOST_TEST_MODULE COMPSEGUNITS - -#include - -#include -#include -#include -#include -#include -#include - -using namespace Opm; - -inline Deck createCOMPSEGSDeck() { - const char *deckData = - "COMPSEGS\n" - " WELL /\n" - " 1 1 1 1 100 100 X 10/\n" - "/\n"; - - Parser parser; - return parser.parseString(deckData); -} - - - -BOOST_AUTO_TEST_CASE(CreateDimension) { - auto deck = createCOMPSEGSDeck(); - const auto& keyword = deck.getKeyword(); - const auto& record = keyword.getRecord(1); - BOOST_CHECK_NO_THROW( record.getItem().getSIDouble(0) ); -} - - - diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/ColumnSchemaTests.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/ColumnSchemaTests.cpp deleted file mode 100644 index f3d7584204..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/ColumnSchemaTests.cpp +++ /dev/null @@ -1,84 +0,0 @@ -/* - Copyright (C) 2015 by Statoil ASA - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#define BOOST_TEST_MODULE ColumnSchemaTests - -#include - - -#include - -using namespace Opm; - - -BOOST_AUTO_TEST_CASE( CreateTest ) { - ColumnSchema schema("Name" , Table::INCREASING , Table::DEFAULT_NONE); - BOOST_CHECK_EQUAL( schema.name() , "Name"); - BOOST_CHECK_THROW( schema.getDefaultValue() , std::invalid_argument ); -} - - -BOOST_AUTO_TEST_CASE( CreateDefaultConst ) { - ColumnSchema schema("Name" , Table::INCREASING , 1.76); - BOOST_CHECK_EQUAL( schema.name() , "Name"); - BOOST_CHECK_EQUAL( schema.getDefaultMode() , Table::DEFAULT_CONST ); - BOOST_CHECK_EQUAL( schema.getDefaultValue() , 1.76 ); -} - - -BOOST_AUTO_TEST_CASE( TestOrder) { - { - ColumnSchema schema("Name" , Table::INCREASING , Table::DEFAULT_NONE); - BOOST_CHECK_EQUAL( true , schema.validOrder( 0 , 0 ) ); - BOOST_CHECK_EQUAL( true , schema.validOrder( 0 , 1 ) ); - BOOST_CHECK_EQUAL( false , schema.validOrder( 1 , 0 ) ); - } - - { - ColumnSchema schema("Name" , Table::DECREASING , Table::DEFAULT_NONE); - BOOST_CHECK_EQUAL( true , schema.validOrder( 0 , 0 ) ); - BOOST_CHECK_EQUAL( false , schema.validOrder( 0 , 1 ) ); - BOOST_CHECK_EQUAL( true , schema.validOrder( 1 , 0 ) ); - } - - { - ColumnSchema schema("Name" , Table::STRICTLY_INCREASING , Table::DEFAULT_NONE); - BOOST_CHECK_EQUAL( false , schema.validOrder( 0 , 0 ) ); - BOOST_CHECK_EQUAL( true , schema.validOrder( 0 , 1 ) ); - BOOST_CHECK_EQUAL( false , schema.validOrder( 1 , 0 ) ); - } - - { - ColumnSchema schema("Name" , Table::STRICTLY_DECREASING , Table::DEFAULT_NONE); - BOOST_CHECK_EQUAL( false , schema.validOrder( 0 , 0 ) ); - BOOST_CHECK_EQUAL( false , schema.validOrder( 0 , 1 ) ); - BOOST_CHECK_EQUAL( true , schema.validOrder( 1 , 0 ) ); - } -} - - -BOOST_AUTO_TEST_CASE( CanLookup ) { - ColumnSchema schema1("Name" , Table::INCREASING , Table::DEFAULT_NONE); - ColumnSchema schema2("Name" , Table::RANDOM , Table::DEFAULT_NONE); - - BOOST_CHECK( schema1.lookupValid( ) ); - BOOST_CHECK( !schema2.lookupValid( ) ); -} - - diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/ConnectionTests.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/ConnectionTests.cpp deleted file mode 100644 index f9f7921838..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/ConnectionTests.cpp +++ /dev/null @@ -1,336 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - - GNU General Public License for more details. - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include -#include -#include - -#define BOOST_TEST_MODULE CompletionTests -#include -#include - - -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -#include -#include - -namespace Opm { - -inline std::ostream& operator<<( std::ostream& stream, const Connection& c ) { - return stream << "(" << c.getI() << "," << c.getJ() << "," << c.getK() << ")"; -} - -inline std::ostream& operator<<( std::ostream& stream, const WellConnections& cs ) { - stream << "{ "; - for( const auto& c : cs ) stream << c << " "; - return stream << "}"; -} - -} - - - - - -BOOST_AUTO_TEST_CASE(CreateWellConnectionsOK) { - Opm::WellConnections completionSet(Opm::Connection::Order::TRACK, 1,1); - BOOST_CHECK_EQUAL( 0U , completionSet.size() ); - BOOST_CHECK(!completionSet.allConnectionsShut()); -} - - - -BOOST_AUTO_TEST_CASE(AddCompletionSizeCorrect) { - auto dir = Opm::Connection::Direction::Z; - const auto kind = Opm::Connection::CTFKind::DeckValue; - Opm::WellConnections completionSet(Opm::Connection::Order::TRACK, 1,1); - Opm::Connection completion1( 10,10,10, 100, 1, 0.0, Opm::Connection::State::OPEN , 99.88, 355.113, 0.25, 0.0, 0.0, 0, dir, kind, 0, 0., 0., true); - Opm::Connection completion2( 10,10,11, 102, 1, 0.0, Opm::Connection::State::SHUT , 99.88, 355.113, 0.25, 0.0, 0.0, 0, dir, kind, 0, 0., 0., true); - completionSet.add( completion1 ); - BOOST_CHECK_EQUAL( 1U , completionSet.size() ); - - completionSet.add( completion2 ); - BOOST_CHECK_EQUAL( 2U , completionSet.size() ); - - BOOST_CHECK_EQUAL( completion1 , completionSet.get(0) ); -} - - -BOOST_AUTO_TEST_CASE(WellConnectionsGetOutOfRangeThrows) { - auto dir = Opm::Connection::Direction::Z; - const auto kind = Opm::Connection::CTFKind::DeckValue; - Opm::Connection completion1( 10,10,10, 100, 1, 0.0, Opm::Connection::State::OPEN , 99.88, 355.113, 0.25, 0.0, 0.0, 0, dir, kind, 0,0., 0., true); - Opm::Connection completion2( 10,10,11, 102, 1, 0.0, Opm::Connection::State::SHUT , 99.88, 355.113, 0.25, 0.0, 0.0, 0, dir, kind, 0,0., 0., true); - Opm::WellConnections completionSet(Opm::Connection::Order::TRACK, 1,1); - completionSet.add( completion1 ); - BOOST_CHECK_EQUAL( 1U , completionSet.size() ); - - completionSet.add( completion2 ); - BOOST_CHECK_EQUAL( 2U , completionSet.size() ); - - BOOST_CHECK_THROW( completionSet.get(10) , std::out_of_range ); -} - - - - - -BOOST_AUTO_TEST_CASE(AddCompletionCopy) { - Opm::WellConnections completionSet(Opm::Connection::Order::TRACK, 10,10); - auto dir = Opm::Connection::Direction::Z; - const auto kind = Opm::Connection::CTFKind::DeckValue; - - Opm::Connection completion1( 10,10,10, 100, 1, 0.0, Opm::Connection::State::OPEN , 99.88, 355.113, 0.25, 0.0, 0.0, 0, dir, kind, 0,0., 0., true); - Opm::Connection completion2( 10,10,11, 101, 1, 0.0, Opm::Connection::State::SHUT , 99.88, 355.113, 0.25, 0.0, 0.0, 0, dir, kind, 0,0., 0., true); - Opm::Connection completion3( 10,10,12, 102, 1, 0.0, Opm::Connection::State::SHUT , 99.88, 355.113, 0.25, 0.0, 0.0, 0, dir, kind, 0,0., 0., true); - - completionSet.add( completion1 ); - completionSet.add( completion2 ); - completionSet.add( completion3 ); - BOOST_CHECK_EQUAL( 3U , completionSet.size() ); - - auto copy = completionSet; - BOOST_CHECK_EQUAL( 3U , copy.size() ); - - BOOST_CHECK_EQUAL( completion1 , copy.get(0)); - BOOST_CHECK_EQUAL( completion2 , copy.get(1)); - BOOST_CHECK_EQUAL( completion3 , copy.get(2)); -} - - -BOOST_AUTO_TEST_CASE(ActiveCompletions) { - Opm::EclipseGrid grid(10,20,20); - auto dir = Opm::Connection::Direction::Z; - const auto kind = Opm::Connection::CTFKind::Defaulted; - Opm::WellConnections completions(Opm::Connection::Order::TRACK, 10,10); - Opm::Connection completion1( 0,0,0, grid.getGlobalIndex(0,0,0), 1, 0.0, Opm::Connection::State::OPEN , 99.88, 355.113, 0.25, 0.0, 0.0, 0, dir, kind, 0,0., 0., true); - Opm::Connection completion2( 0,0,1, grid.getGlobalIndex(0,0,1), 1, 0.0, Opm::Connection::State::SHUT , 99.88, 355.113, 0.25, 0.0, 0.0, 0, dir, kind, 0,0., 0., true); - Opm::Connection completion3( 0,0,2, grid.getGlobalIndex(0,0,2), 1, 0.0, Opm::Connection::State::SHUT , 99.88, 355.113, 0.25, 0.0, 0.0, 0, dir, kind, 0,0., 0., true); - - completions.add( completion1 ); - completions.add( completion2 ); - completions.add( completion3 ); - - std::vector actnum(grid.getCartesianSize(), 1); - actnum[0] = 0; - grid.resetACTNUM( actnum); - - Opm::WellConnections active_completions(completions, grid); - BOOST_CHECK_EQUAL( active_completions.size() , 2); - BOOST_CHECK_EQUAL( completion2, active_completions.get(0)); - BOOST_CHECK_EQUAL( completion3, active_completions.get(1)); -} - -Opm::WellConnections loadCOMPDAT(const std::string& compdat_keyword) { - Opm::EclipseGrid grid(10,10,10); - Opm::TableManager tables; - Opm::Parser parser; - const auto deck = parser.parseString(compdat_keyword); - Opm::FieldPropsManager field_props(deck, Opm::Phases{true, true, true}, grid, Opm::TableManager()); - const auto& keyword = deck.getKeyword("COMPDAT", 0); - Opm::WellConnections connections(Opm::Connection::Order::TRACK, 10,10); - for (const auto& rec : keyword) - connections.loadCOMPDAT(rec, grid, field_props); - - return connections; -} - -BOOST_AUTO_TEST_CASE(loadCOMPDATTEST) { - Opm::UnitSystem units(Opm::UnitSystem::UnitType::UNIT_TYPE_METRIC); // Unit system used in deck FIRST_SIM.DATA. - { - const std::string deck = R"(COMPDAT --- CF Diam Kh Skin Df - 'WELL' 1 1 1 1 'OPEN' 1* 1.168 0.311 107.872 1* 1* 'Z' 21.925 / -/)"; - Opm::WellConnections connections = loadCOMPDAT(deck); - const auto& conn0 = connections[0]; - BOOST_CHECK_EQUAL(conn0.CF(), units.to_si(Opm::UnitSystem::measure::transmissibility, 1.168)); - BOOST_CHECK_EQUAL(conn0.Kh(), units.to_si(Opm::UnitSystem::measure::effective_Kh, 107.872)); - BOOST_CHECK_MESSAGE(conn0.ctfAssignedFromInput(), "CTF Must be Assigned From Input"); - } - - { - const std::string deck = R"(GRID - -PERMX - 1000*0.10 / - -COPY - 'PERMX' 'PERMZ' / - 'PERMX' 'PERMY' / -/ - -SCHEDULE - -COMPDAT --- CF Diam Kh Skin Df -'WELL' 1 1 1 1 'OPEN' 1* 1.168 0.311 0 1* 1* 'Z' 21.925 / -/)"; - Opm::WellConnections connections = loadCOMPDAT(deck); - const auto& conn0 = connections[0]; - BOOST_CHECK_EQUAL(conn0.CF(), units.to_si(Opm::UnitSystem::measure::transmissibility, 1.168)); - BOOST_CHECK_EQUAL(conn0.Kh(), units.to_si(Opm::UnitSystem::measure::effective_Kh, 0.10 * 1.0)); - } -} - - -BOOST_AUTO_TEST_CASE(loadCOMPDATTESTSPE1) { - Opm::Parser parser; - - const auto deck = parser.parseFile("SPE1CASE1.DATA"); - auto python = std::make_shared(); - Opm::EclipseState state(deck); - Opm::Schedule sched(deck, state, python); - const auto& units = deck.getActiveUnitSystem(); - - const auto& prod = sched.getWell("PROD", 0); - const auto& connections = prod.getConnections(); - const auto& conn0 = connections[0]; - /* Expected values come from Eclipse simulation. */ - BOOST_CHECK_CLOSE(conn0.CF(), units.to_si(Opm::UnitSystem::measure::transmissibility, 10.609), 2e-2); - BOOST_CHECK_CLOSE(conn0.Kh(), units.to_si(Opm::UnitSystem::measure::effective_Kh, 10000), 1e-6); - BOOST_CHECK_MESSAGE(!conn0.ctfAssignedFromInput(), "Calculated CTF must NOT be assigned from input"); -} - - -struct exp_conn { - std::string well; - int ci; - double CF; - double Kh; -}; - -BOOST_AUTO_TEST_CASE(loadCOMPDATTESTSPE9) { - Opm::Parser parser; - - const auto deck = parser.parseFile("SPE9_CP_PACKED.DATA"); - auto python = std::make_shared(); - Opm::EclipseState state(deck); - Opm::Schedule sched(deck, state, python); - const auto& units = deck.getActiveUnitSystem(); -/* - The list of the expected values come from the PRT file in an ECLIPSE simulation. -*/ - std::vector expected = { - {"INJE1" ,1 , 0.166, 111.9}, - {"INJE1" ,2 , 0.597, 402.6}, - {"INJE1" ,3 , 1.866, 1259.2}, - {"INJE1" ,4 , 12.442, 8394.2}, - {"INJE1" ,5 , 6.974, 4705.3}, - - {"PRODU2" ,1 , 0.893, 602.8}, - {"PRODU2" ,2 , 3.828, 2582.8}, - {"PRODU2" ,3 , 0.563, 380.0}, - - {"PRODU3" ,1 , 1.322, 892.1}, - {"PRODU3" ,2 , 3.416, 2304.4}, - - {"PRODU4" ,1 , 4.137, 2791.2}, - {"PRODU4" ,2 , 66.455, 44834.7}, - - {"PRODU5" ,1 , 0.391, 264.0}, - {"PRODU5" ,2 , 7.282, 4912.6}, - {"PRODU5" ,3 , 1.374, 927.3}, - - {"PRODU6" ,1 , 1.463, 987.3}, - {"PRODU6" ,2 , 1.891, 1275.8}, - - {"PRODU7" ,1 , 1.061, 716.1}, - {"PRODU7" ,2 , 5.902, 3982.0}, - {"PRODU7" ,3 , 0.593, 400.1}, - - {"PRODU8" ,1 , 0.993, 670.1}, - {"PRODU8" ,2 , 17.759, 11981.5}, - - {"PRODU9" ,1 , 0.996, 671.9}, - {"PRODU9" ,2 , 2.548, 1719.0}, - - {"PRODU10" ,1 , 11.641, 7853.9}, - {"PRODU10" ,2 , 7.358, 4964.1}, - {"PRODU10" ,3 , 0.390, 262.8}, - - {"PRODU11" ,2 , 3.536, 2385.6}, - - {"PRODU12" ,1 , 3.028, 2043.1}, - {"PRODU12" ,2 , 0.301, 202.7}, - {"PRODU12" ,3 , 0.279, 188.3}, - - {"PRODU13" ,2 , 5.837, 3938.1}, - - {"PRODU14" ,1 , 180.976, 122098.1}, - {"PRODU14" ,2 , 25.134, 16957.0}, - {"PRODU14" ,3 , 0.532, 358.7}, - - {"PRODU15" ,1 , 4.125, 2783.1}, - {"PRODU15" ,2 , 6.431, 4338.7}, - - {"PRODU16" ,2 , 5.892, 3975.0}, - - {"PRODU17" ,1 , 80.655, 54414.9}, - {"PRODU17" ,2 , 9.098, 6138.3}, - - {"PRODU18" ,1 , 1.267, 855.1}, - {"PRODU18" ,2 , 18.556, 12518.9}, - - {"PRODU19" ,1 , 15.589, 10517.2}, - {"PRODU19" ,3 , 1.273, 859.1}, - - {"PRODU20" ,1 , 3.410, 2300.5}, - {"PRODU20" ,2 , 0.191, 128.8}, - {"PRODU20" ,3 , 0.249, 168.1}, - - {"PRODU21" ,1 , 0.596, 402.0}, - {"PRODU21" ,2 , 0.163, 109.9}, - - {"PRODU22" ,1 , 4.021, 2712.8}, - {"PRODU22" ,2 , 0.663, 447.1}, - - {"PRODU23" ,1 , 1.542, 1040.2}, - - {"PRODU24" ,1 , 78.939, 53257.0}, - {"PRODU24" ,3 , 17.517, 11817.8}, - - {"PRODU25" ,1 , 3.038, 2049.5}, - {"PRODU25" ,2 , 0.926, 624.9}, - {"PRODU25" ,3 , 0.891, 601.3}, - - {"PRODU26" ,1 , 0.770, 519.6}, - {"PRODU26" ,3 , 0.176, 118.6}}; - - for (const auto& ec : expected) { - const auto& well = sched.getWell(ec.well, 0); - const auto& connections = well.getConnections(); - const auto& conn = connections[ec.ci - 1]; - - BOOST_CHECK_CLOSE( conn.CF(), units.to_si(Opm::UnitSystem::measure::transmissibility, ec.CF), 2e-1); - BOOST_CHECK_CLOSE( conn.Kh(), units.to_si(Opm::UnitSystem::measure::effective_Kh, ec.Kh), 1e-1); - BOOST_CHECK_MESSAGE( !conn.ctfAssignedFromInput(), "Calculated SPE9 CTF values must NOT be assigned from input"); - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/CopyRegTests.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/CopyRegTests.cpp deleted file mode 100644 index 3ca4dc212f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/CopyRegTests.cpp +++ /dev/null @@ -1,175 +0,0 @@ -/* - Copyright 2014 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include -#include -#include -#include - -#define BOOST_TEST_MODULE CopyRegTests -#include -#include - - -#include - -#include -#include -#include - -#include -#include -#include - - -static Opm::Deck createDeckInvalidArray1() { - const char *deckData = - "RUNSPEC\n" - "\n" - "DIMENS\n" - " 10 10 10 /\n" - "GRID\n" - "SATNUM\n" - " 1000*1 /\n" - "COPYREG\n" - " MISSING SATNUM 10 M / \n" - "/\n" - "EDIT\n" - "\n"; - - Opm::Parser parser; - return parser.parseString(deckData) ; -} - -static Opm::Deck createDeckInvalidArray2() { - const char *deckData = - "RUNSPEC\n" - "\n" - "DIMENS\n" - " 10 10 10 /\n" - "GRID\n" - "SATNUM\n" - " 1000*1 /\n" - "COPYREG\n" - " SATNUM MISSING 10 M / \n" - "/\n" - "EDIT\n" - "\n"; - - Opm::Parser parser; - return parser.parseString(deckData) ; -} - - -static Opm::Deck createDeckInvalidTypeMismatch() { - const char *deckData = - "RUNSPEC\n" - "\n" - "DIMENS\n" - " 10 10 10 /\n" - "GRID\n" - "SATNUM\n" - " 1000*1 /\n" - "COPYREG\n" - " SATNUM PERMX 10 M / \n" - "/\n" - "EDIT\n" - "\n"; - - Opm::Parser parser; - return parser.parseString(deckData) ; -} - - - -static Opm::Deck createDeckInvalidRegion() { - const char *deckData = - "RUNSPEC\n" - "\n" - "DIMENS\n" - " 10 10 10 /\n" - "GRID\n" - "SATNUM\n" - " 1000*1 /\n" - "COPYREG\n" - " SATNUM FLUXNUM 10 MX / \n" - "/\n" - "EDIT\n" - "\n"; - - Opm::Parser parser; - return parser.parseString(deckData) ; -} - - - - -static Opm::Deck createDeckUnInitialized() { - const char *deckData = - "RUNSPEC\n" - "\n" - "DIMENS\n" - " 10 10 10 /\n" - "GRID\n" - "REGIONS\n" - "COPYREG\n" - " SATNUM FLUXNUM 10 M / \n" - "/\n" - "EDIT\n" - "\n"; - - Opm::Parser parser; - return parser.parseString(deckData) ; -} - - - - -BOOST_AUTO_TEST_CASE(InvalidArrayThrows1) { - Opm::Deck deck = createDeckInvalidArray1(); - BOOST_CHECK_THROW( new Opm::EclipseState(deck) , std::invalid_argument ); -} - -BOOST_AUTO_TEST_CASE(InvalidArrayThrows2) { - Opm::Deck deck = createDeckInvalidArray2(); - BOOST_CHECK_THROW( new Opm::EclipseState( deck) , std::invalid_argument ); -} - - - -BOOST_AUTO_TEST_CASE(InvalidRegionThrows) { - Opm::Deck deck = createDeckInvalidRegion(); - BOOST_CHECK_THROW( new Opm::EclipseState( deck) , std::invalid_argument ); -} - - - - -BOOST_AUTO_TEST_CASE(UnInitializedVectorThrows) { - Opm::Deck deck = createDeckUnInitialized(); - BOOST_CHECK_THROW( new Opm::EclipseState( deck) , std::invalid_argument ); -} - - -BOOST_AUTO_TEST_CASE(TypeMismatchThrows) { - Opm::Deck deck = createDeckInvalidTypeMismatch(); - BOOST_CHECK_THROW( new Opm::EclipseState( deck) , std::invalid_argument ); -} - - diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/DeckTests.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/DeckTests.cpp deleted file mode 100644 index 009dc3b980..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/DeckTests.cpp +++ /dev/null @@ -1,691 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - - -#include -#include - -#define BOOST_TEST_MODULE DeckTests - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "src/opm/parser/eclipse/Parser/raw/RawRecord.hpp" - -using namespace Opm; - -BOOST_AUTO_TEST_CASE(hasKeyword_empty_returnFalse) { - Deck deck; - BOOST_CHECK_EQUAL(false, deck.hasKeyword("Bjarne")); - BOOST_CHECK_THROW( deck.getKeyword("Bjarne") , std::invalid_argument); -} - -std::pair, std::vector> make_dims() { - UnitSystem metric(UnitSystem::UnitType::UNIT_TYPE_METRIC); - return std::make_pair, std::vector>({metric.getDimension("Length")}, {metric.getDimension("Length")}); -} - - - -BOOST_AUTO_TEST_CASE(getKeywordList_empty_list) { - Deck deck; - auto kw_list = deck.getKeywordList("TRULS"); - BOOST_CHECK_EQUAL( kw_list.size() , 0 ); -} - -BOOST_AUTO_TEST_CASE(getKeyword_singlekeyword_outRange_throws) { - Deck deck; - Parser parser; - deck.addKeyword( DeckKeyword( parser.getKeyword("GRID"))); - BOOST_CHECK_THROW(deck.getKeyword("GRID" , 10) , std::out_of_range); -} - - -BOOST_AUTO_TEST_CASE(getKeywordList_returnOK) { - Deck deck; - Parser parser; - deck.addKeyword( DeckKeyword( parser.getKeyword("GRID"))); - BOOST_CHECK_NO_THROW( deck.getKeywordList("GRID") ); -} - - -BOOST_AUTO_TEST_CASE(getKeyword_indexok_returnskeyword) { - Deck deck; - Parser parser; - deck.addKeyword( DeckKeyword( parser.getKeyword("GRID"))); - BOOST_CHECK_NO_THROW(deck.getKeyword(0)); -} - -BOOST_AUTO_TEST_CASE(numKeyword_singlekeyword_return1) { - Deck deck; - Parser parser; - deck.addKeyword( DeckKeyword( parser.getKeyword("GRID"))); - BOOST_CHECK_EQUAL(1U , deck.count("GRID")); -} - - -BOOST_AUTO_TEST_CASE(numKeyword_twokeyword_return2) { - Deck deck; - Parser parser; - deck.addKeyword( DeckKeyword( parser.getKeyword("GRID"))); - deck.addKeyword( DeckKeyword( parser.getKeyword("GRID"))); - BOOST_CHECK_EQUAL(2U , deck.count("GRID")); - BOOST_CHECK_EQUAL(0U , deck.count("GRID_BUG")); -} - - -BOOST_AUTO_TEST_CASE(size_twokeyword_return2) { - Deck deck; - Parser parser; - DeckKeyword keyword( parser.getKeyword("GRID")); - deck.addKeyword(keyword); - deck.addKeyword(keyword); - BOOST_CHECK_EQUAL(2U , deck.size()); - BOOST_CHECK_THROW( deck.getKeyword("GRID" , 3) , std::out_of_range); -} - -BOOST_AUTO_TEST_CASE(getKeywordList_OK) { - Deck deck; - Parser parser; - deck.addKeyword( DeckKeyword( parser.getKeyword("GRID"))); - deck.addKeyword( DeckKeyword( parser.getKeyword("GRID"))); - deck.addKeyword( DeckKeyword( parser.getKeyword("GRID"))); - - const auto& keywordList = deck.getKeywordList("GRID"); - BOOST_CHECK_EQUAL( 3U , keywordList.size() ); -} - - -BOOST_AUTO_TEST_CASE(keywordList_getbyindexoutofbounds_exceptionthrown) { - Parser parser; - Deck deck; - BOOST_CHECK_THROW(deck.getKeyword(0), std::out_of_range); - deck.addKeyword( DeckKeyword( parser.getKeyword("GRID"))); - deck.addKeyword( DeckKeyword( parser.getKeyword("GRID"))); - deck.addKeyword( DeckKeyword( parser.getKeyword("INIT"))); - BOOST_CHECK_NO_THROW(deck.getKeyword(2)); - BOOST_CHECK_THROW(deck.getKeyword(3), std::out_of_range); -} - -BOOST_AUTO_TEST_CASE(keywordList_getbyindex_correctkeywordreturned) { - Deck deck; - Parser parser; - deck.addKeyword( DeckKeyword( parser.getKeyword("GRID"))); - deck.addKeyword( DeckKeyword( parser.getKeyword("GRID"))); - deck.addKeyword( DeckKeyword( parser.getKeyword("INIT"))); - BOOST_CHECK_EQUAL("GRID", deck.getKeyword(0).name()); - BOOST_CHECK_EQUAL("GRID", deck.getKeyword(1).name()); - BOOST_CHECK_EQUAL("INIT", deck.getKeyword(2).name()); -} - -BOOST_AUTO_TEST_CASE(set_and_get_data_file) { - Deck deck; - BOOST_CHECK_EQUAL("", deck.getDataFile()); - BOOST_CHECK_EQUAL("", deck.getInputPath()); - BOOST_CHECK_EQUAL("some/path", deck.makeDeckPath("some/path")); - BOOST_CHECK_EQUAL("/abs/path", deck.makeDeckPath("/abs/path")); - - std::string file("/path/to/file.DATA"); - deck.setDataFile( file ); - BOOST_CHECK_EQUAL(file, deck.getDataFile()); - BOOST_CHECK_EQUAL("/path/to", deck.getInputPath()); - BOOST_CHECK_EQUAL("/path/to/some/path", deck.makeDeckPath("some/path")); - BOOST_CHECK_EQUAL("/abs/path", deck.makeDeckPath("/abs/path")); - - deck.setDataFile("FILE"); - BOOST_CHECK_EQUAL("FILE", deck.getDataFile()); - BOOST_CHECK_EQUAL("", deck.getInputPath()); -} - -BOOST_AUTO_TEST_CASE(DummyDefaultsString) { - DeckItem deckStringItem("TEST", std::string() ); - BOOST_CHECK_EQUAL(deckStringItem.data_size(), 0); - - deckStringItem.push_backDummyDefault(); - BOOST_CHECK_EQUAL(deckStringItem.data_size(), 1); - BOOST_CHECK_EQUAL(true, deckStringItem.defaultApplied(0)); - BOOST_CHECK_THROW(deckStringItem.get< std::string >(0), std::invalid_argument); -} - -BOOST_AUTO_TEST_CASE(GetStringAtIndex_NoData_ExceptionThrown) { - DeckItem deckStringItem( "TEST", std::string() ); - BOOST_CHECK_THROW(deckStringItem.get< std::string >(0), std::out_of_range); - deckStringItem.push_back("SA"); - BOOST_CHECK_THROW(deckStringItem.get< std::string >(1), std::out_of_range); -} - -BOOST_AUTO_TEST_CASE(size_variouspushes_sizecorrect) { - DeckItem deckStringItem( "TEST", std::string() ); - - BOOST_CHECK_EQUAL(0U, deckStringItem.data_size()); - deckStringItem.push_back("WELL-3"); - BOOST_CHECK_EQUAL(1U, deckStringItem.data_size()); - - deckStringItem.push_back("WELL-4"); - deckStringItem.push_back("WELL-5"); - BOOST_CHECK_EQUAL(3U, deckStringItem.data_size()); -} - -BOOST_AUTO_TEST_CASE(DefaultNotAppliedString) { - DeckItem deckStringItem( "TEST", std::string() ); - BOOST_CHECK( deckStringItem.data_size() == 0 ); - - deckStringItem.push_back( "FOO") ; - BOOST_CHECK( deckStringItem.data_size() == 1 ); - BOOST_CHECK( deckStringItem.get< std::string >(0) == "FOO" ); - BOOST_CHECK( !deckStringItem.defaultApplied(0) ); -} - -BOOST_AUTO_TEST_CASE(DefaultAppliedString) { - DeckItem deckStringItem( "TEST", std::string() ); - BOOST_CHECK( deckStringItem.data_size() == 0 ); - - deckStringItem.push_backDefault( "FOO" ); - BOOST_CHECK( deckStringItem.data_size() == 1 ); - BOOST_CHECK( deckStringItem.get< std::string >(0) == "FOO" ); - BOOST_CHECK( deckStringItem.defaultApplied(0) ); -} - - -BOOST_AUTO_TEST_CASE(PushBackMultipleString) { - DeckItem stringItem( "TEST", std::string() ); - stringItem.push_back("Heisann ", 100U ); - BOOST_CHECK_EQUAL( 100U , stringItem.data_size() ); - for (size_t i=0; i < 100; i++) - BOOST_CHECK_EQUAL("Heisann " , stringItem.get< std::string >(i)); -} - -BOOST_AUTO_TEST_CASE(GetDoubleAtIndex_NoData_ExceptionThrown) { - auto dims = make_dims(); - DeckItem deckDoubleItem( "TEST", double(), dims.first, dims.second ); - printf("Current type: %s \n",tag_name(deckDoubleItem.getType()).c_str()); - BOOST_CHECK(deckDoubleItem.getType() == type_tag::fdouble); - - BOOST_CHECK_THROW(deckDoubleItem.get< double >(0), std::out_of_range); - deckDoubleItem.push_back(1.89); - BOOST_CHECK_THROW(deckDoubleItem.get< double >(1), std::out_of_range); -} - - -BOOST_AUTO_TEST_CASE(sizeDouble_correct) { - auto dims = make_dims(); - DeckItem deckDoubleItem( "TEST", double(), dims.first, dims.second); - - BOOST_CHECK_EQUAL( 0U , deckDoubleItem.data_size()); - deckDoubleItem.push_back( 100.0 ); - BOOST_CHECK_EQUAL( 1U , deckDoubleItem.data_size()); - - deckDoubleItem.push_back( 100.0 ); - deckDoubleItem.push_back( 100.0 ); - BOOST_CHECK_EQUAL( 3U , deckDoubleItem.data_size()); -} - - - -BOOST_AUTO_TEST_CASE(SetInDeck) { - auto dims = make_dims(); - DeckItem deckDoubleItem( "TEST", double(), dims.first, dims.second); - BOOST_CHECK( deckDoubleItem.data_size() == 0 ); - - deckDoubleItem.push_backDefault( 1.0 ); - BOOST_CHECK( deckDoubleItem.data_size() == 1 ); - BOOST_CHECK_EQUAL( true , deckDoubleItem.defaultApplied(0) ); - - deckDoubleItem.push_back( 10.0 ); - BOOST_CHECK( deckDoubleItem.data_size() == 2 ); - BOOST_CHECK_EQUAL( false , deckDoubleItem.defaultApplied(1) ); - - deckDoubleItem.push_backDefault( 1.0 ); - BOOST_CHECK( deckDoubleItem.data_size() == 3 ); - BOOST_CHECK_EQUAL( true , deckDoubleItem.defaultApplied(2) ); -} - -BOOST_AUTO_TEST_CASE(DummyDefaultsDouble) { - auto dims = make_dims(); - DeckItem deckDoubleItem( "TEST", double(), dims.first, dims.second); - BOOST_CHECK_EQUAL(deckDoubleItem.data_size(), 0); - - deckDoubleItem.push_backDummyDefault(); - BOOST_CHECK_EQUAL(deckDoubleItem.data_size(), 1); - BOOST_CHECK_EQUAL(true, deckDoubleItem.defaultApplied(0)); - BOOST_CHECK_THROW(deckDoubleItem.get< double >(0), std::invalid_argument); -} - -BOOST_AUTO_TEST_CASE(PushBackMultipleDouble) { - auto dims = make_dims(); - DeckItem item( "HEI", double() , dims.first, dims.second); - item.push_back(10.22 , 100 ); - BOOST_CHECK_EQUAL( 100U , item.data_size() ); - for (size_t i=0; i < 100; i++) - BOOST_CHECK_EQUAL(10.22 , item.get< double >(i)); -} - - -BOOST_AUTO_TEST_CASE(GetSIWithoutDimensionThrows) { - DeckItem item( "HEI", double() , {},{}); - item.push_back(10.22 , 100 ); - - BOOST_CHECK_THROW( item.getSIDouble(0) , std::invalid_argument ); - BOOST_CHECK_THROW( item.getSIDoubleData() , std::invalid_argument ); -} - -BOOST_AUTO_TEST_CASE(GetSISingleDimensionCorrect) { - Dimension dim{ 100 }; - DeckItem item( "HEI", double(), { dim }, { dim } ); - - item.push_back(1.0 , 100 ); - - BOOST_CHECK_EQUAL( 1.0 , item.get< double >(0) ); - BOOST_CHECK_EQUAL( 100 , item.getSIDouble(0) ); -} - -BOOST_AUTO_TEST_CASE(GetSISingleDefault) { - Dimension dim{ 1 }; - Dimension defaultDim{ 100 }; - DeckItem item( "HEI", double() , {dim}, {defaultDim}); - - item.push_backDefault( 1.0 ); - BOOST_CHECK_EQUAL( 1 , item.get< double >(0) ); - BOOST_CHECK_EQUAL( 100 , item.getSIDouble(0) ); -} - -BOOST_AUTO_TEST_CASE(GetSIMultipleDim) { - Dimension dim1{ 2 }; - Dimension dim2{ 4 }; - Dimension dim3{ 8 }; - Dimension dim4{ 16 }; - Dimension defaultDim{ 100 }; - DeckItem item( "HEI", double(), {dim1, dim2, dim3, dim4}, {defaultDim, defaultDim, defaultDim, defaultDim} ); - - item.push_back( 1.0, 16 ); - - for (size_t i=0; i < 16; i+= 4) { - BOOST_CHECK_EQUAL( 2 , item.getSIDouble(i) ); - BOOST_CHECK_EQUAL( 4 , item.getSIDouble(i+ 1) ); - BOOST_CHECK_EQUAL( 8 , item.getSIDouble(i+2) ); - BOOST_CHECK_EQUAL(16 , item.getSIDouble(i+3) ); - } -} - -BOOST_AUTO_TEST_CASE(HasValue) { - DeckItem deckIntItem( "TEST", int() ); - BOOST_CHECK_EQUAL( false , deckIntItem.hasValue(0) ); - deckIntItem.push_back(1); - BOOST_CHECK_EQUAL( true , deckIntItem.hasValue(0) ); - BOOST_CHECK_EQUAL( false , deckIntItem.hasValue(1) ); -} - -BOOST_AUTO_TEST_CASE(DummyDefaultsInt) { - DeckItem deckIntItem( "TEST", int() ); - BOOST_CHECK_EQUAL(deckIntItem.data_size(), 0); - - deckIntItem.push_backDummyDefault(); - BOOST_CHECK_EQUAL(deckIntItem.data_size(), 1); - BOOST_CHECK_EQUAL(true, deckIntItem.defaultApplied(0)); - BOOST_CHECK_EQUAL( false , deckIntItem.hasValue(0)); - BOOST_CHECK_EQUAL( false , deckIntItem.hasValue(1)); - BOOST_CHECK_THROW(deckIntItem.get< int >(0), std::invalid_argument); -} - -BOOST_AUTO_TEST_CASE(GetIntAtIndex_NoData_ExceptionThrown) { - DeckItem deckIntItem( "TEST", int() ); - deckIntItem.push_back(100); - BOOST_CHECK(deckIntItem.get< int >(0) == 100); - BOOST_CHECK_THROW(deckIntItem.get< int >(1), std::out_of_range); -} - -BOOST_AUTO_TEST_CASE(InitializeDefaultApplied) { - DeckItem deckIntItem( "TEST", int() ); - BOOST_CHECK( deckIntItem.data_size() == 0 ); -} - -BOOST_AUTO_TEST_CASE(size_correct) { - DeckItem deckIntItem( "TEST", int() ); - - BOOST_CHECK_EQUAL( 0U , deckIntItem.data_size()); - deckIntItem.push_back( 100 ); - BOOST_CHECK_EQUAL( 1U , deckIntItem.data_size()); - - deckIntItem.push_back( 100 ); - deckIntItem.push_back( 100 ); - BOOST_CHECK_EQUAL( 3U , deckIntItem.data_size()); -} - -BOOST_AUTO_TEST_CASE(DefaultNotAppliedInt) { - DeckItem deckIntItem( "TEST", int() ); - BOOST_CHECK( deckIntItem.data_size() == 0 ); - - deckIntItem.push_back( 100 ); - BOOST_CHECK( deckIntItem.data_size() == 1 ); - BOOST_CHECK( deckIntItem.get< int >(0) == 100 ); - BOOST_CHECK( !deckIntItem.defaultApplied(0) ); - - BOOST_CHECK_THROW( deckIntItem.defaultApplied(1), std::out_of_range ); - BOOST_CHECK_THROW( deckIntItem.get< int >(1), std::out_of_range ); -} - -BOOST_AUTO_TEST_CASE(UseDefault) { - DeckItem deckIntItem( "TEST", int() ); - - deckIntItem.push_backDefault( 100 ); - - BOOST_CHECK( deckIntItem.defaultApplied(0) ); - BOOST_CHECK( deckIntItem.get< int >(0) == 100 ); - - BOOST_CHECK_THROW( deckIntItem.defaultApplied(1), std::out_of_range ); - BOOST_CHECK_THROW( deckIntItem.get< int >(1), std::out_of_range ); -} - -BOOST_AUTO_TEST_CASE(DefaultAppliedInt) { - DeckItem deckIntItem( "TEST", int() ); - BOOST_CHECK( deckIntItem.data_size() == 0 ); - - deckIntItem.push_backDefault( 100 ); - BOOST_CHECK( deckIntItem.data_size() == 1 ); - BOOST_CHECK( deckIntItem.get< int >(0) == 100 ); - BOOST_CHECK( deckIntItem.defaultApplied(0) ); - deckIntItem.push_back( 10 ); - BOOST_CHECK_EQUAL( false, deckIntItem.defaultApplied(1) ); - deckIntItem.push_backDefault( 1 ); - BOOST_CHECK_EQUAL( true , deckIntItem.defaultApplied(2) ); - BOOST_CHECK_EQUAL( 3 , deckIntItem.data_size() ); -} - - -BOOST_AUTO_TEST_CASE(PushBackMultipleInt) { - DeckItem item( "HEI", int() ); - item.push_back(10 , 100U ); - BOOST_CHECK_EQUAL( 100U , item.data_size() ); - for (size_t i=0; i < 100; i++) - BOOST_CHECK_EQUAL(10 , item.get< int >(i)); -} - -BOOST_AUTO_TEST_CASE(size_defaultConstructor_sizezero) { - DeckRecord deckRecord; - BOOST_CHECK_EQUAL(0U, deckRecord.size()); -} - -BOOST_AUTO_TEST_CASE(addItem_singleItem_sizeone) { - DeckRecord deckRecord; - deckRecord.addItem( DeckItem { "TEST", int() } ); - BOOST_CHECK_EQUAL(1U, deckRecord.size()); -} - -BOOST_AUTO_TEST_CASE(addItem_multipleItems_sizecorrect) { - - DeckRecord deckRecord; - deckRecord.addItem( DeckItem { "TEST", int() } ); - deckRecord.addItem( DeckItem { "TEST2", int() } ); - deckRecord.addItem( DeckItem { "TEST3", int() } ); - - BOOST_CHECK_EQUAL(3U, deckRecord.size()); -} - -BOOST_AUTO_TEST_CASE(addItem_differentItemsSameName_throws) { - DeckRecord deckRecord; - deckRecord.addItem( DeckItem { "TEST", int() } ); - BOOST_CHECK_THROW( deckRecord.addItem( DeckItem { "TEST", int() } ), std::invalid_argument ); - std::vector< DeckItem > items = { DeckItem { "TEST", int() }, DeckItem { "TEST" , int() } }; - BOOST_CHECK_THROW( DeckRecord( std::move( items ) ), std::invalid_argument ); -} - -BOOST_AUTO_TEST_CASE(get_byIndex_returnsItem) { - DeckRecord deckRecord; - deckRecord.addItem( DeckItem { "TEST", int() } ); - BOOST_CHECK_NO_THROW(deckRecord.getItem(0U)); -} - -BOOST_AUTO_TEST_CASE(get_indexoutofbounds_throws) { - DeckRecord deckRecord; - deckRecord.addItem( DeckItem { "TEST", int() } ); - BOOST_CHECK_THROW(deckRecord.getItem(1), std::out_of_range); -} - -BOOST_AUTO_TEST_CASE(get_byName_returnsItem) { - DeckRecord deckRecord; - deckRecord.addItem( DeckItem { "TEST", int() } ); - deckRecord.getItem("TEST"); -} - -BOOST_AUTO_TEST_CASE(get_byNameNonExisting_throws) { - DeckRecord deckRecord; - deckRecord.addItem( DeckItem { "TEST", int() } ); - BOOST_CHECK_THROW(deckRecord.getItem("INVALID"), std::invalid_argument); -} - -BOOST_AUTO_TEST_CASE(StringsWithSpaceOK) { - ParserItem itemString("STRINGITEM1", ParserItem::itype::STRING); - ParserRecord record1; - RawRecord rawRecord( " ' VALUE ' " ); - ParseContext parseContext; - ErrorGuard errors; - UnitSystem active_unitsystem(UnitSystem::UnitType::UNIT_TYPE_LAB); - record1.addItem( itemString ); - - - const auto deckRecord = record1.parse( parseContext, errors , rawRecord, active_unitsystem, active_unitsystem, "KEYWORD", "filename" ); - BOOST_CHECK_EQUAL(" VALUE " , deckRecord.getItem(0).get< std::string >(0)); -} - -BOOST_AUTO_TEST_CASE(DataKeyword) { - Parser parser; - DeckKeyword kw(parser.getKeyword("GRID")); - BOOST_CHECK_EQUAL( false , kw.isDataKeyword()); - kw.setDataKeyword( ); - BOOST_CHECK_EQUAL( true , kw.isDataKeyword()); - kw.setDataKeyword( false ); - BOOST_CHECK_EQUAL( false , kw.isDataKeyword()); - kw.setDataKeyword( true ); - BOOST_CHECK_EQUAL( true , kw.isDataKeyword()); -} - - - -BOOST_AUTO_TEST_CASE(name_nameSetInConstructor_nameReturned) { - Parser parser; - DeckKeyword deckKeyword( parser.getKeyword("GRID")); - BOOST_CHECK_EQUAL("GRID", deckKeyword.name()); -} - -BOOST_AUTO_TEST_CASE(size_noRecords_returnszero) { - Parser parser; - DeckKeyword deckKeyword( parser.getKeyword("GRID"));; - BOOST_CHECK_EQUAL(0U, deckKeyword.size()); - BOOST_CHECK_THROW(deckKeyword.getRecord(0), std::out_of_range); -} - - - - -BOOST_AUTO_TEST_CASE(DeckItemWrite) { - DeckItem item("TEST", int()); - std::stringstream s; - DeckOutput w(s); - - item.push_back(1); - item.push_back(2); - item.push_back(3); - - item.write(w); - { - int v1,v2,v3; - s >> v1; - s >> v2; - s >> v3; - - BOOST_CHECK_EQUAL( v1 , 1 ); - BOOST_CHECK_EQUAL( v2 , 2 ); - BOOST_CHECK_EQUAL( v3 , 3 ); - } -} - -BOOST_AUTO_TEST_CASE(DeckOutputTest) { - std::string expected = "KEYWORD\n\ -==1-2\n\ -==3-1*\n\ -==5-1*\n\ -==7-8\n\ -==1*-10 /\n\ -/\n\ -ABC"; - std::stringstream s; - DeckOutput out(s); - - out.record_indent = "=="; - out.item_sep = "-"; - out.columns = 2; - out.keyword_sep = "ABC"; - - out.start_keyword("KEYWORD"); - out.start_record(); - out.write(1); - out.write(2); - out.write(3); - out.stash_default( ); - out.write(5); - out.stash_default( ); - out.write(7); - out.write(8); - out.stash_default( ); - out.write(10); - out.end_record(); - out.end_keyword(true); - out.write_string( out.keyword_sep ); - - BOOST_CHECK_EQUAL( expected, s.str()); -} - -BOOST_AUTO_TEST_CASE(DeckItemWriteDefault) { - DeckItem item("TEST", int()); - item.push_backDefault(1); - item.push_backDefault(1); - item.push_backDefault(1); - - { - std::stringstream s; - DeckOutput w(s); - item.write( w ); - BOOST_CHECK_EQUAL( s.str() , ""); - } - - item.push_back(13); - { - std::stringstream s; - DeckOutput w(s); - item.write( w ); - BOOST_CHECK_EQUAL( s.str() , "3* 13"); - } -} - - -BOOST_AUTO_TEST_CASE(DeckItemWriteString) { - DeckItem item("TEST", std::string()); - item.push_back("NO"); - item.push_back("YES"); - std::stringstream s; - DeckOutput w(s); - item.write( w ); - BOOST_CHECK_EQUAL( s.str() , "'NO' 'YES'"); -} - - -BOOST_AUTO_TEST_CASE(RecordWrite) { - auto dims = make_dims(); - DeckRecord deckRecord; - DeckItem item1("TEST1", int()); - DeckItem item2("TEST2", double(), dims.first, dims.second); - DeckItem item3("TEST3", std::string()); - - item1.push_back( 123 ); - item2.push_backDefault( 100.0 ); - item3.push_back("VALUE"); - - deckRecord.addItem( item1 ); - deckRecord.addItem( item2 ); - deckRecord.addItem( item3 ); - - std::stringstream s; - DeckOutput w(s); - deckRecord.write_data( w ); - BOOST_CHECK_EQUAL( s.str() , "123 1* 'VALUE'"); -} - - -BOOST_AUTO_TEST_CASE(DeckItemEqual) { - auto dims = make_dims(); - DeckItem item1("TEST1" , int()); - DeckItem item2("TEST2" , int()); - DeckItem item3("TEST1" , double(), dims.first, dims.second); - DeckItem item4("TEST1" , int()); - DeckItem item5("TEST1" , double(), dims.first, dims.second); - - BOOST_CHECK( item1 != item2 ); - BOOST_CHECK( item1 != item3 ); - BOOST_CHECK( item1 == item1 ); - BOOST_CHECK( item1 == item4 ); - - item4.push_back(100); - BOOST_CHECK( item1 != item4 ); - item1.push_back(100); - BOOST_CHECK( item1 == item4 ); - - item4.push_backDefault( 200 ); - item1.push_back( 200 ); - BOOST_CHECK( item1 == item4 ); - BOOST_CHECK( !item1.equal( item4 , true , true)); - - item3.push_back(1.0); - item5.push_back(1.0); - BOOST_CHECK( item3.equal( item5 , false, true )); - BOOST_CHECK( item3.equal( item5 , false, false )); - - item3.push_back(1.0); - item5.push_back(1.0 - 1e-8); - BOOST_CHECK( item3.equal( item5 , false, true )); - BOOST_CHECK( !item3.equal( item5 , false, false )); -} - - -BOOST_AUTO_TEST_CASE(STRING_TO_BOOL) { - BOOST_CHECK( DeckItem::to_bool("TRUE") ); - BOOST_CHECK( DeckItem::to_bool("T") ); - BOOST_CHECK( DeckItem::to_bool("YES") ); - BOOST_CHECK( DeckItem::to_bool("yEs") ); - BOOST_CHECK( DeckItem::to_bool("Y") ); - BOOST_CHECK( DeckItem::to_bool("1") ); - // - BOOST_CHECK( !DeckItem::to_bool("falsE") ); - BOOST_CHECK( !DeckItem::to_bool("f") ); - BOOST_CHECK( !DeckItem::to_bool("NO") ); - BOOST_CHECK( !DeckItem::to_bool("N")); - BOOST_CHECK( !DeckItem::to_bool("0") ); - // - BOOST_CHECK_THROW(DeckItem::to_bool("NO - not valid"), std::invalid_argument); - BOOST_CHECK_THROW(DeckItem::to_bool("YE"), std::invalid_argument); - BOOST_CHECK_THROW(DeckItem::to_bool("YE"), std::invalid_argument); -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/DeckValueTests.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/DeckValueTests.cpp deleted file mode 100644 index 8bb08f7ce8..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/DeckValueTests.cpp +++ /dev/null @@ -1,214 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#define BOOST_TEST_MODULE DeckValueTests - -#include - -#include - -#include - -#include - -#include -#include -#include -#include - -#include -#include -#include - -using namespace Opm; - -BOOST_AUTO_TEST_CASE(DeckValueTest) { - - const DeckValue value0; - BOOST_CHECK(value0.is_default()); - BOOST_CHECK(!value0.is_compatible()); - BOOST_CHECK(!value0.is_compatible()); - BOOST_CHECK(!value0.is_compatible()); - BOOST_CHECK_THROW( value0.get(), std::invalid_argument); - BOOST_CHECK_THROW( value0.get(), std::invalid_argument); - BOOST_CHECK_THROW( value0.get(), std::invalid_argument); - - DeckValue value1(10); - BOOST_CHECK(!value1.is_default()); - BOOST_CHECK(value1.is_compatible()); - BOOST_CHECK(value1.is_compatible()); - BOOST_CHECK(!value1.is_compatible()); - BOOST_CHECK_EQUAL( value1.get(), 10); - BOOST_CHECK_EQUAL( value1.get(), 10); - - DeckValue value2(10.0); - BOOST_CHECK(value2.is_compatible()); - BOOST_CHECK(!value2.is_compatible()); - BOOST_CHECK(!value2.is_compatible()); - BOOST_CHECK_EQUAL( value2.get(), 10); - BOOST_CHECK_THROW( value2.get(), std::invalid_argument); - BOOST_CHECK_THROW( value2.get(), std::invalid_argument); - - DeckValue value3("FUBHP"); - BOOST_CHECK(!value3.is_compatible()); - BOOST_CHECK(value3.is_compatible()); - BOOST_CHECK_EQUAL( value3.get(), std::string("FUBHP")); - BOOST_CHECK_THROW( value3.get(), std::invalid_argument); - BOOST_CHECK_THROW( value3.get(), std::invalid_argument); - - -} - - -BOOST_AUTO_TEST_CASE(DeckKeywordConstructor) { - - Parser parser; - Deck deck; - - UnitSystem& unit_default = deck.getDefaultUnitSystem(); - UnitSystem unit_active(UnitSystem::UnitType::UNIT_TYPE_LAB); - - const ParserKeyword& big_model = parser.getKeyword("BIGMODEL"); - BOOST_CHECK_THROW( DeckKeyword( big_model, {{DeckValue("WORD_A")}}, unit_active, unit_default ), std::invalid_argument ); - - const ParserKeyword& box = parser.getKeyword("BOX"); - std::vector< DeckValue > record1 = {DeckValue(1), DeckValue(2), DeckValue(3), DeckValue(4), DeckValue(5), DeckValue(6)}; - DeckKeyword dkw(box, {record1}, unit_active, unit_default); - BOOST_CHECK_NO_THROW( DeckKeyword( box, {record1}, unit_active, unit_default ) ); - BOOST_CHECK_THROW( DeckKeyword( box, {{ record1, record1 }}, unit_default, unit_active), std::invalid_argument ); - - const ParserKeyword& addreg = parser.getKeyword("ADDREG"); - - BOOST_CHECK_NO_THROW( DeckKeyword( addreg, {{ DeckValue("WORD_A") }}, unit_active, unit_default ) ); - BOOST_CHECK_THROW( DeckKeyword( addreg, {{DeckValue("WORD_A"), DeckValue(77), DeckValue(16.25), DeckValue("WORD_B")}}, unit_default, unit_active ) , std::invalid_argument); - - std::vector< DeckValue > record = {DeckValue("WORD_A"), DeckValue(16.25), DeckValue(77), DeckValue("WORD_B")}; - DeckKeyword deck_kw(addreg, {record}, unit_active, unit_default); - - BOOST_CHECK_EQUAL( deck_kw.size(), 1 ); - - const DeckRecord& deck_record = deck_kw.getRecord(0); - BOOST_CHECK_EQUAL( deck_record.size(), 4 ); - - const auto& array = deck_record.getItem( 0 ); - const auto& shift = deck_record.getItem( 1 ); - const auto& number = deck_record.getItem( 2 ); - const auto& name = deck_record.getItem( 3 ); - - BOOST_CHECK_EQUAL( array.get(0), "WORD_A" ); - BOOST_CHECK_EQUAL( shift.get(0), 16.25 ); - BOOST_CHECK_EQUAL( number.get(0), 77 ); - BOOST_CHECK_EQUAL( name.get(0), "WORD_B" ); - - //checking default values: - record = {DeckValue("WORD_A"), DeckValue(), DeckValue(77)}; - DeckKeyword deck_kw1(addreg, {record}, unit_active, unit_default); - - const DeckRecord& deck_record1 = deck_kw1.getRecord(0); - const auto& shift1 = deck_record1.getItem( 1 ); - const auto& name1 = deck_record1.getItem( 3 ); - BOOST_CHECK_EQUAL( shift1.get(0), 0 ); - BOOST_CHECK_EQUAL( name1.get(0), "M" ); - - //check that int can substitute double - BOOST_CHECK_NO_THROW( DeckKeyword(addreg, {{DeckValue("WORD_A"), DeckValue(5), DeckValue(77)}}, unit_active, unit_default ) ); - - //Check correct SI conversion - const ParserKeyword& delayact = parser.getKeyword("DELAYACT"); - DeckKeyword delayact_kw( delayact, {{DeckValue("ABC"), DeckValue("DEF"), DeckValue(1.0), DeckValue(8)}}, unit_active, unit_default ); - const auto& deck_record2 = delayact_kw.getRecord(0); - const auto& delay = deck_record2.getItem( 2 ); - BOOST_CHECK_EQUAL( delay.get(0), 1.0 ); - BOOST_CHECK_EQUAL( delay.getSIDouble(0), 3600.0 ); - - -} - - -BOOST_AUTO_TEST_CASE(DeckKeywordVectorInt) { - - Parser parser; - Deck deck; - - UnitSystem& unit_default = deck.getDefaultUnitSystem(); - UnitSystem unit_active(UnitSystem::UnitType::UNIT_TYPE_LAB); - - const ParserKeyword& hbnum = parser.getKeyword("HBNUM"); - const ParserKeyword& box = parser.getKeyword("BOX"); - - std::vector data = {0, 1, 2, 3, 4, 5, 6, 7, 8}; - BOOST_CHECK_THROW( DeckKeyword(box, data), std::invalid_argument ); - DeckKeyword hbnum_kw(hbnum, data); - BOOST_CHECK(hbnum_kw.isDataKeyword()); - BOOST_CHECK_EQUAL(hbnum_kw.getDataSize(), 9); - BOOST_CHECK( hbnum_kw.getIntData() == data ); - - std::vector data_double = {1.1, 2.2}; - BOOST_CHECK_THROW(DeckKeyword(hbnum, data_double, unit_active, unit_default), std::invalid_argument); -} - - -BOOST_AUTO_TEST_CASE(DeckKeywordVectorDouble) { - - Parser parser; - Deck deck; - - UnitSystem& unit_default = deck.getDefaultUnitSystem(); - UnitSystem unit_active(UnitSystem::UnitType::UNIT_TYPE_LAB); - - const ParserKeyword& zcorn = parser.getKeyword("ZCORN"); //vector of dim length - const ParserKeyword& box = parser.getKeyword("BOX"); - - std::vector data = {1.1, 2.2, 3.3}; - - BOOST_CHECK_THROW(DeckKeyword(box, data, unit_active, unit_default), std::invalid_argument); - DeckKeyword zcorn_kw(zcorn, data, unit_active, unit_default); - BOOST_CHECK(zcorn_kw.isDataKeyword()); - BOOST_CHECK_EQUAL(zcorn_kw.getDataSize(), 3); - BOOST_CHECK( zcorn_kw.getRawDoubleData() == data ); - std::vector SI_data = zcorn_kw.getSIDoubleData(); - BOOST_CHECK( cmp::scalar_equal(SI_data[0], 0.011) ); - BOOST_CHECK( cmp::scalar_equal(SI_data[1], 0.022) ); - BOOST_CHECK( cmp::scalar_equal(SI_data[2], 0.033) ); - -} - - - - - - -BOOST_AUTO_TEST_CASE(ValueStatus) { - const std::string deck_string = R"( -PERMX - 100* / -)"; - - Parser parser; - Deck deck = parser.parseString(deck_string); - const auto& permx = deck.getKeyword("PERMX"); - const auto& status = permx.getValueStatus(); - BOOST_CHECK_EQUAL(status.size(), 100); - for (const auto& vs : status) { - BOOST_CHECK(!value::has_value(vs)); - BOOST_CHECK(vs == value::status::empty_default); - } -} - - diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/DynamicStateTests.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/DynamicStateTests.cpp deleted file mode 100644 index 21de38b08d..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/DynamicStateTests.cpp +++ /dev/null @@ -1,298 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include -#include -#include - - -#define BOOST_TEST_MODULE DynamicStateTests -#include -#include - -#include -#include - - -Opm::TimeMap make_timemap(int num) { - std::vector tp; - for (int i = 0; i < num; i++) - tp.push_back( Opm::asTimeT(Opm::TimeStampUTC(2010,1,i+1))); - - Opm::TimeMap timeMap{ tp }; - return timeMap; -} - - - -BOOST_AUTO_TEST_CASE(CreateDynamicTest) { - const std::time_t startDate = Opm::TimeMap::mkdate(2010, 1, 1); - Opm::TimeMap timeMap({ startDate }); - Opm::DynamicState state(timeMap , 9.99); -} - - -BOOST_AUTO_TEST_CASE(DynamicStateGetOutOfRangeThrows) { - const std::time_t startDate = Opm::TimeMap::mkdate(2010, 1, 1); - Opm::TimeMap timeMap({ startDate }); - Opm::DynamicState state(timeMap , 9.99); - BOOST_CHECK_THROW( state.get(1) , std::out_of_range ); -} - - -BOOST_AUTO_TEST_CASE(DynamicStateGetDefault) { - const std::time_t startDate = Opm::TimeMap::mkdate(2010, 1, 1); - Opm::TimeMap timeMap( { startDate } ); - Opm::DynamicState state(timeMap , 137); - BOOST_CHECK_EQUAL( 137 , state.get(0)); - BOOST_CHECK_EQUAL( 137 , state.back() ); -} - - -BOOST_AUTO_TEST_CASE(DynamicStateSetOutOfRangeThrows) { - Opm::TimeMap timeMap = make_timemap(3); - Opm::DynamicState state(timeMap , 137); - - BOOST_CHECK_THROW( state.update(3 , 100) , std::out_of_range ); -} - - -BOOST_AUTO_TEST_CASE(DynamicStateSetOK) { - Opm::TimeMap timeMap = make_timemap(11); - Opm::DynamicState state(timeMap , 137); - - state.update(2 , 23 ); - BOOST_CHECK_EQUAL( 137 , state.get(0)); - BOOST_CHECK_EQUAL( 137 , state.get(1)); - BOOST_CHECK_EQUAL( 23 , state.get(2)); - BOOST_CHECK_EQUAL( 23 , state.get(5)); - - state.update(2 , 17); - BOOST_CHECK_EQUAL( 137 , state.get(0)); - BOOST_CHECK_EQUAL( 137 , state.get(1)); - BOOST_CHECK_EQUAL( 17 , state.get(2)); - BOOST_CHECK_EQUAL( 17 , state.get(5)); - - state.update(6 , 60); - BOOST_CHECK_EQUAL( 17 , state.get(2)); - BOOST_CHECK_EQUAL( 17 , state.get(5)); - BOOST_CHECK_EQUAL( 60 , state.get(6)); - BOOST_CHECK_EQUAL( 60 , state.get(8)); - BOOST_CHECK_EQUAL( 60 , state.get(9)); - BOOST_CHECK_EQUAL( 60 , state.back()); -} - -BOOST_AUTO_TEST_CASE(DynamicStateAddAt) { - Opm::TimeMap timeMap = make_timemap(11); - Opm::DynamicState state(timeMap , 0); - - state.update( 10 , 77 ); - { - const int& v1 = state.at(10); - int v2 = state.get(10); - BOOST_CHECK_EQUAL( v1 , 77 ); - BOOST_CHECK_EQUAL( v1 , v2 ); - BOOST_CHECK( &v1 != &v2 ); - } -} - -BOOST_AUTO_TEST_CASE(DynamicStateOperatorSubscript) { - Opm::TimeMap timeMap = make_timemap(11); - Opm::DynamicState state(timeMap , 137); - - state.update( 10 , 200 ); - BOOST_CHECK_EQUAL( state[9] , 137 ); - BOOST_CHECK_EQUAL( state[0] , 137 ); - -} - - -BOOST_AUTO_TEST_CASE(DynamicStateInitial) { - Opm::TimeMap timeMap = make_timemap(11); - Opm::DynamicState state(timeMap , 137); - Opm::DynamicState state2(timeMap , 137); - - state.update( 10 , 200 ); - BOOST_CHECK_EQUAL( state[9] , 137 ); - BOOST_CHECK_EQUAL( state[0] , 137 ); - BOOST_CHECK_EQUAL( state[10] , 200 ); - - state.updateInitial( 63 ); - BOOST_CHECK_EQUAL( state[9] , 63 ); - BOOST_CHECK_EQUAL( state[0] , 63 ); - BOOST_CHECK_EQUAL( state[10] , 200 ); - - state.updateInitial( 73 ); - BOOST_CHECK_EQUAL( state[9] , 73 ); - BOOST_CHECK_EQUAL( state[0] , 73 ); - BOOST_CHECK_EQUAL( state[10] , 200 ); - - - state2.update( 10 , 200 ); - BOOST_CHECK_EQUAL( state2[9] , 137 ); - BOOST_CHECK_EQUAL( state2[0] , 137 ); - BOOST_CHECK_EQUAL( state2[10] , 200 ); - state.updateInitial( 73 ); - BOOST_CHECK_EQUAL( state2[9] , 137 ); - BOOST_CHECK_EQUAL( state2[0] , 137 ); - BOOST_CHECK_EQUAL( state2[10] , 200 ); -} - -BOOST_AUTO_TEST_CASE( ResetGlobal ) { - Opm::TimeMap timeMap = make_timemap(11); - Opm::DynamicState state(timeMap , 137); - - state.update(5 , 100); - BOOST_CHECK_EQUAL( state[0] , 137 ); - BOOST_CHECK_EQUAL( state[4] , 137 ); - BOOST_CHECK_EQUAL( state[5] , 100 ); - BOOST_CHECK_EQUAL( state[9] , 100 ); - - state.updateInitial( 22 ); - BOOST_CHECK_EQUAL( state[0] , 22 ); - BOOST_CHECK_EQUAL( state[4] , 22 ); - BOOST_CHECK_EQUAL( state[5] , 100 ); - BOOST_CHECK_EQUAL( state[9] , 100 ); - - state.globalReset( 88 ); - BOOST_CHECK_EQUAL( state[0] , 88 ); - BOOST_CHECK_EQUAL( state[4] , 88 ); - BOOST_CHECK_EQUAL( state[5] , 88 ); - BOOST_CHECK_EQUAL( state[9] , 88 ); -} - - -BOOST_AUTO_TEST_CASE( CheckReturn ) { - Opm::TimeMap timeMap = make_timemap(11); - Opm::DynamicState state(timeMap , 137); - - BOOST_CHECK_EQUAL( false , state.update( 0 , 137 )); - BOOST_CHECK_EQUAL( false , state.update( 3 , 137 )); - BOOST_CHECK_EQUAL( true , state.update( 5 , 200 )); -} - - -BOOST_AUTO_TEST_CASE( UpdateEmptyInitial ) { - Opm::TimeMap timeMap = make_timemap(11); - Opm::DynamicState state(timeMap , 137); - - BOOST_CHECK_EQUAL( state[5] , 137 ); - state.updateInitial( 99 ); - BOOST_CHECK_EQUAL( state[5] , 99 ); -} - - -BOOST_AUTO_TEST_CASE( find ) { - Opm::TimeMap timeMap = make_timemap(6); - Opm::DynamicState state(timeMap , 137); - - BOOST_CHECK_EQUAL( state.find( 137 ) , 0 ); - BOOST_CHECK_EQUAL( state.find( 200 ) , -1 ); - BOOST_CHECK_EQUAL( state.find_not(137), -1); - BOOST_CHECK_EQUAL( state.find_not(200), 0); - state.update( 0 , 200 ); - BOOST_CHECK_EQUAL( state.find( 137 ) , -1 ); - BOOST_CHECK_EQUAL( state.find( 200 ) , 0 ); - - state.update( 2 , 300 ); - BOOST_CHECK_EQUAL( state.find( 200 ) , 0 ); - BOOST_CHECK_EQUAL( state.find( 300 ) , 2 ); - BOOST_CHECK_EQUAL( state.find_not( 200 ) , 2 ); - - state.update( 4 , 400 ); - BOOST_CHECK_EQUAL( state.find( 200 ) , 0 ); - BOOST_CHECK_EQUAL( state.find( 300 ) , 2 ); - BOOST_CHECK_EQUAL( state.find( 400 ) , 4 ); - BOOST_CHECK_EQUAL( state.find( 500 ) , -1 ); - - - auto pred = [] (const int& elm) { return elm == 400 ;}; - BOOST_CHECK_EQUAL( state.find_if(pred), 4); -} - - -BOOST_AUTO_TEST_CASE( update_elm ) { - Opm::TimeMap timeMap = make_timemap(6); - Opm::DynamicState state(timeMap , 137); - state.update( 5, 88 ); - BOOST_CHECK_THROW( state.update_elm(10,88) , std::out_of_range ); - BOOST_CHECK_EQUAL( state[2],137 ); - BOOST_CHECK_EQUAL( state[3],137 ); - BOOST_CHECK_EQUAL( state[4],137 ); - - state.update_elm(3,88); - BOOST_CHECK_EQUAL( state[2],137 ); - BOOST_CHECK_EQUAL( state[3],88 ); - BOOST_CHECK_EQUAL( state[4],137 ); - - for (auto& v : state) - v += 2; - - BOOST_CHECK_EQUAL( state[2],139 ); - BOOST_CHECK_EQUAL( state[3],90 ); - BOOST_CHECK_EQUAL( state[4],139 ); -} - -BOOST_AUTO_TEST_CASE( update_equal ) { - Opm::TimeMap timeMap = make_timemap(11); - Opm::DynamicState state(timeMap , 0); - state.update( 5, 100 ); - BOOST_REQUIRE_THROW(state.update_equal(100, 100), std::out_of_range); - - BOOST_CHECK_EQUAL(state[0], 0); - BOOST_CHECK_EQUAL(state[4], 0); - BOOST_CHECK_EQUAL(state[5], 100); - - state.update_equal(3,50); - BOOST_CHECK_EQUAL(state[2], 0); - BOOST_CHECK_EQUAL(state[3], 50); - BOOST_CHECK_EQUAL(state[4], 50); - BOOST_CHECK_EQUAL(state[5], 100); - - state.update_equal(4,50); - BOOST_CHECK_EQUAL(state[4], 50); - BOOST_CHECK_EQUAL(state[5], 100); - - - state.update_equal(9,200); - BOOST_CHECK_EQUAL(state[8] , 100); - BOOST_CHECK_EQUAL(state[9] , 200); - BOOST_CHECK_EQUAL(state[10], 200); -} - - - - - -BOOST_AUTO_TEST_CASE( UNIQUE ) { - Opm::TimeMap timeMap = make_timemap(11); - Opm::DynamicState state(timeMap , 13); - auto unique0 = state.unique(); - BOOST_CHECK_EQUAL(unique0.size(), 1); - BOOST_CHECK(unique0[0] == std::make_pair(std::size_t{0}, 13)); - - state.update(3,300); - state.update(6,600); - auto unique1 = state.unique(); - BOOST_CHECK_EQUAL(unique1.size(), 3); - BOOST_CHECK(unique1[0] == std::make_pair(std::size_t{0}, 13)); - BOOST_CHECK(unique1[1] == std::make_pair(std::size_t{3}, 300)); - BOOST_CHECK(unique1[2] == std::make_pair(std::size_t{6}, 600)); -} - diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/DynamicVectorTests.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/DynamicVectorTests.cpp deleted file mode 100644 index e81fdbbde3..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/DynamicVectorTests.cpp +++ /dev/null @@ -1,93 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include - -#define BOOST_TEST_MODULE DynamicVectorTests -#include -#include - -#include -#include -#include - - - -BOOST_AUTO_TEST_CASE(CreateDynamicTest) { - const std::time_t startDate = Opm::TimeMap::mkdate(2010, 1, 1); - Opm::TimeMap timeMap({ startDate }); - Opm::DynamicVector vector(timeMap , 9.99); - - BOOST_CHECK_EQUAL( vector[0] , 9.99 ); - BOOST_CHECK_THROW( vector[1] , std::out_of_range ); -} - - - -BOOST_AUTO_TEST_CASE(DynamicVectorSet) { - const std::time_t startDate = Opm::TimeMap::mkdate(2010, 1, 1); - std::vector tp = { startDate }; - for (int i = 0; i < 4; i++) - tp.push_back( Opm::asTimeT(Opm::TimeStampUTC(2010,1,i+2))); - - Opm::TimeMap timeMap{ tp }; - Opm::DynamicVector state(timeMap , 137); - BOOST_CHECK_EQUAL( 137 , state[0] ); - BOOST_CHECK_EQUAL( 137 , state[1] ); - BOOST_CHECK_EQUAL( 137 , state[2] ); - BOOST_CHECK_EQUAL( 137 , state[3] ); - BOOST_CHECK_EQUAL( 137 , state[4] ); - - state[2] = 99; - BOOST_CHECK_EQUAL( 137 , state[1] ); - BOOST_CHECK_EQUAL( 99 , state[2] ); - BOOST_CHECK_EQUAL( 137 , state[3] ); - - state[0] = 88; - BOOST_CHECK_EQUAL( 88 , state[0]); - BOOST_CHECK_THROW( state[5] = 99 , std::out_of_range ); -} - - - -BOOST_AUTO_TEST_CASE(DynamicVectorPtr) { - const std::time_t startDate = Opm::TimeMap::mkdate(2010, 1, 1); - std::vector tp = { startDate }; - for (int i = 0; i < 4; i++) - tp.push_back( Opm::asTimeT(Opm::TimeStampUTC(2010,1,i+2))); - - Opm::TimeMap timeMap{ tp }; - Opm::DynamicVector state( timeMap , 137 ); - - BOOST_CHECK_EQUAL( 137 , state.iget(0) ); - BOOST_CHECK_EQUAL( 137 , state.iget(1) ); - BOOST_CHECK_EQUAL( 137 , state.iget(2) ); - BOOST_CHECK_EQUAL( 137 , state.iget(3) ); - BOOST_CHECK_EQUAL( 137 , state.iget(4) ); - - state.iset(2 , 99); - BOOST_CHECK_EQUAL( 137 , state.iget(1) ); - BOOST_CHECK_EQUAL( 99 , state.iget(2) ); - BOOST_CHECK_EQUAL( 137 , state.iget(3) ); - - state.iset(0,88); - BOOST_CHECK_EQUAL( 88 , state.iget(0)); - BOOST_CHECK_THROW( state.iset(5 , 99) , std::out_of_range ); -} - diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/EclipseGridTests.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/EclipseGridTests.cpp deleted file mode 100644 index 86a91a9b92..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/EclipseGridTests.cpp +++ /dev/null @@ -1,2806 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -#define BOOST_TEST_MODULE EclipseGridTests -#include -#include - -#include -#include -#include -#include - -#include - -#include -#include -#include -#include - -#include - -#include - -BOOST_AUTO_TEST_CASE(CreateMissingDIMENS_throws) { - Opm::Deck deck; - Opm::Parser parser; - deck.addKeyword( Opm::DeckKeyword( parser.getKeyword("RUNSPEC" ))); - deck.addKeyword( Opm::DeckKeyword( parser.getKeyword("GRID" ))); - deck.addKeyword( Opm::DeckKeyword( parser.getKeyword("EDIT" ))); - - BOOST_CHECK_THROW(Opm::EclipseGrid{ deck } , std::invalid_argument); -} - -static Opm::Deck createDeckHeaders() { - const char* deckData = - "RUNSPEC\n" - "\n" - "DIMENS\n" - " 10 10 10 /\n" - "GRID\n" - "EDIT\n" - "\n"; - - Opm::Parser parser; - return parser.parseString( deckData); -} - -static Opm::Deck createDeckDIMENS() { - const char* deckData = - "RUNSPEC\n" - "\n" - "DIMENS\n" - " 13 17 19/\n" - "GRID\n" - "EDIT\n" - "\n"; - Opm::Parser parser; - return parser.parseString( deckData); -} - -static Opm::Deck createDeckSPECGRID() { - const char* deckData = - "GRID\n" - "SPECGRID \n" - " 13 17 19 / \n" - "COORD\n" - " 726*1 / \n" - "ZCORN \n" - " 8000*1 / \n" - "ACTNUM \n" - " 1000*1 / \n" - "EDIT\n" - "\n"; - Opm::Parser parser; - return parser.parseString( deckData); -} - -static Opm::Deck createDeckMissingDIMS() { - const char* deckData = - "RUNSPEC\n" - "\n" - "GRID\n" - "EDIT\n" - "\n"; - - Opm::Parser parser; - return parser.parseString( deckData) ; -} - -BOOST_AUTO_TEST_CASE(MissingDimsThrows) { - Opm::Deck deck = createDeckMissingDIMS(); - BOOST_CHECK_THROW( Opm::EclipseGrid{ deck }, std::invalid_argument); -} - -BOOST_AUTO_TEST_CASE(HasGridKeywords) { - Opm::Deck deck = createDeckHeaders(); - BOOST_CHECK( !Opm::EclipseGrid::hasCornerPointKeywords( deck )); - BOOST_CHECK( !Opm::EclipseGrid::hasCartesianKeywords( deck )); -} - -BOOST_AUTO_TEST_CASE(CreateGridNoCells) { - Opm::Deck deck = createDeckHeaders(); - BOOST_CHECK_THROW( Opm::EclipseGrid{ deck }, std::invalid_argument); - - const Opm::GridDims grid( deck); - BOOST_CHECK_EQUAL( 10 , grid.getNX()); - BOOST_CHECK_EQUAL( 10 , grid.getNY()); - BOOST_CHECK_EQUAL( 10 , grid.getNZ()); - - BOOST_CHECK_EQUAL(10, grid[0]); - BOOST_CHECK_EQUAL(10, grid[2]); - BOOST_CHECK_THROW( grid[10], std::invalid_argument); - - BOOST_CHECK_EQUAL( 1000 , grid.getCartesianSize()); -} - -BOOST_AUTO_TEST_CASE(CheckGridIndex) { - Opm::EclipseGrid grid(17, 19, 41); // prime time - - auto v_start = grid.getIJK(0); - BOOST_CHECK_EQUAL(v_start[0], 0); - BOOST_CHECK_EQUAL(v_start[1], 0); - BOOST_CHECK_EQUAL(v_start[2], 0); - - auto v_end = grid.getIJK(17*19*41 - 1); - BOOST_CHECK_EQUAL(v_end[0], 16); - BOOST_CHECK_EQUAL(v_end[1], 18); - BOOST_CHECK_EQUAL(v_end[2], 40); - - auto v167 = grid.getIJK(167); - BOOST_CHECK_EQUAL(v167[0], 14); - BOOST_CHECK_EQUAL(v167[1], 9); - BOOST_CHECK_EQUAL(v167[2], 0); - BOOST_CHECK_EQUAL(grid.getGlobalIndex(14, 9, 0), 167); - - auto v5723 = grid.getIJK(5723); - BOOST_CHECK_EQUAL(v5723[0], 11); - BOOST_CHECK_EQUAL(v5723[1], 13); - BOOST_CHECK_EQUAL(v5723[2], 17); - BOOST_CHECK_EQUAL(grid.getGlobalIndex(11, 13, 17), 5723); - - BOOST_CHECK_EQUAL(17 * 19 * 41, grid.getCartesianSize()); -} - -static Opm::Deck createCPDeck() { - const char* deckData = - "RUNSPEC\n" - "\n" - "DIMENS\n" - " 10 10 10 /\n" - "GRID\n" - "COORD\n" - " 726*1 / \n" - "ZCORN \n" - " 8000*1 / \n" - "ACTNUM \n" - " 1000*1 / \n" - "EDIT\n" - "\n"; - - Opm::Parser parser; - return parser.parseString( deckData) ; -} - -static Opm::Deck createPinchedCPDeck() { - const char* deckData = - "RUNSPEC\n" - "\n" - "DIMENS\n" - " 10 10 10 /\n" - "GRID\n" - "COORD\n" - " 726*1 / \n" - "ZCORN \n" - " 8000*1 / \n" - "ACTNUM \n" - " 1000*1 / \n" - "PINCH \n" - " 0.2 / \n" - "EDIT\n" - "\n"; - - Opm::Parser parser; - return parser.parseString( deckData) ; -} - - -static Opm::Deck createMinpvDefaultCPDeck() { - const char* deckData = - "RUNSPEC\n" - "\n" - "DIMENS\n" - " 10 10 10 /\n" - "GRID\n" - "COORD\n" - " 726*1 / \n" - "ZCORN \n" - " 8000*1 / \n" - "ACTNUM \n" - " 1000*1 / \n" - "MINPV \n" - " / \n" - "MINPVFIL \n" - " / \n" - "EDIT\n" - "\n"; - - Opm::Parser parser; - return parser.parseString( deckData) ; -} - - -static Opm::Deck createMinpvCPDeck() { - const char* deckData = - "RUNSPEC\n" - "\n" - "DIMENS\n" - " 10 10 10 /\n" - "GRID\n" - "COORD\n" - " 726*1 / \n" - "ZCORN \n" - " 8000*1 / \n" - "ACTNUM \n" - " 1000*1 / \n" - "MINPV \n" - " 10 / \n" - "EDIT\n" - "\n"; - - Opm::Parser parser; - return parser.parseString( deckData) ; -} - - - -static Opm::Deck createCARTDeck() { - const char* deckData = - "RUNSPEC\n" - "\n" - "DIMENS\n" - " 10 10 10 /\n" - "GRID\n" - "DX\n" - "1000*0.25 /\n" - "DYV\n" - "10*0.25 /\n" - "DZ\n" - "1000*0.25 /\n" - "TOPS\n" - "100*0.25 /\n" - "EDIT\n" - "\n"; - - Opm::Parser parser; - return parser.parseString( deckData) ; -} - - -static Opm::Deck createCARTDeckDEPTHZ() { - const char* deckData = - "RUNSPEC\n" - "\n" - "DIMENS\n" - " 10 10 10 /\n" - "GRID\n" - "DXV\n" - "10*0.25 /\n" - "DYV\n" - "10*0.25 /\n" - "DZV\n" - "10*0.25 /\n" - "DEPTHZ\n" - "121*0.25 /\n" - "EDIT\n" - "\n"; - - Opm::Parser parser; - return parser.parseString( deckData) ; -} - - -static Opm::Deck createCARTInvalidDeck() { - const char* deckData = - "RUNSPEC\n" - "\n" - "DIMENS\n" - " 10 10 10 /\n" - "GRID\n" - "DX\n" - "1000*0.25 /\n" - "DYV\n" - "1000*0.25 /\n" - "DZ\n" - "1000*0.25 /\n" - "EDIT\n" - "\n"; - - Opm::Parser parser; - return parser.parseString( deckData) ; -} - -BOOST_AUTO_TEST_CASE(CREATE_SIMPLE) { - Opm::EclipseGrid grid(10,20,30); - - BOOST_CHECK_EQUAL( grid.getNX() , 10 ); - BOOST_CHECK_EQUAL( grid.getNY() , 20 ); - BOOST_CHECK_EQUAL( grid.getNZ() , 30 ); - BOOST_CHECK_EQUAL( grid.getCartesianSize() , 6000 ); -} - -BOOST_AUTO_TEST_CASE(DEPTHZ_EQUAL_TOPS) { - Opm::Deck deck1 = createCARTDeck(); - Opm::Deck deck2 = createCARTDeckDEPTHZ(); - - Opm::EclipseGrid grid1( deck1 ); - Opm::EclipseGrid grid2( deck2 ); - - BOOST_CHECK( grid1.equal( grid2 ) ); - - { - BOOST_CHECK_THROW( grid1.getCellVolume(1000) , std::invalid_argument); - BOOST_CHECK_THROW( grid1.getCellVolume(10,0,0) , std::invalid_argument); - BOOST_CHECK_THROW( grid1.getCellVolume(0,10,0) , std::invalid_argument); - BOOST_CHECK_THROW( grid1.getCellVolume(0,0,10) , std::invalid_argument); - - for (size_t g=0; g < 1000; g++) - BOOST_CHECK_CLOSE( grid1.getCellVolume(g) , 0.25*0.25*0.25 , 0.001); - - - for (size_t k= 0; k < 10; k++) - for (size_t j= 0; j < 10; j++) - for (size_t i= 0; i < 10; i++) - BOOST_CHECK_CLOSE( grid1.getCellVolume(i, j, k) , 0.25*0.25*0.25 , 0.001 ); - - } - - { - BOOST_CHECK_THROW( grid1.getCellCenter(1000) , std::invalid_argument); - BOOST_CHECK_THROW( grid1.getCellCenter(10,0,0) , std::invalid_argument); - BOOST_CHECK_THROW( grid1.getCellCenter(0,10,0) , std::invalid_argument); - BOOST_CHECK_THROW( grid1.getCellCenter(0,0,10) , std::invalid_argument); - - for (size_t k= 0; k < 10; k++) { - for (size_t j= 0; j < 10; j++) { - for (size_t i= 0; i < 10; i++) { - auto pos = grid1.getCellCenter(i, j, k); - - BOOST_CHECK_CLOSE( std::get<0>(pos) , i*0.25 + 0.125, 0.001); - BOOST_CHECK_CLOSE( std::get<1>(pos) , j*0.25 + 0.125, 0.001); - BOOST_CHECK_CLOSE( std::get<2>(pos) , k*0.25 + 0.125 + 0.25, 0.001); - } - } - } - } -} - -BOOST_AUTO_TEST_CASE(HasCPKeywords) { - Opm::Deck deck = createCPDeck(); - BOOST_CHECK( Opm::EclipseGrid::hasCornerPointKeywords( deck )); - BOOST_CHECK( !Opm::EclipseGrid::hasCartesianKeywords( deck )); -} - -BOOST_AUTO_TEST_CASE(HasCartKeywords) { - Opm::Deck deck = createCARTDeck(); - BOOST_CHECK( !Opm::EclipseGrid::hasCornerPointKeywords( deck )); - BOOST_CHECK( Opm::EclipseGrid::hasCartesianKeywords( deck )); -} - -BOOST_AUTO_TEST_CASE(HasCartKeywordsDEPTHZ) { - Opm::Deck deck = createCARTDeckDEPTHZ(); - BOOST_CHECK( !Opm::EclipseGrid::hasCornerPointKeywords( deck )); - BOOST_CHECK( Opm::EclipseGrid::hasCartesianKeywords( deck )); -} - -BOOST_AUTO_TEST_CASE(HasINVALIDCartKeywords) { - Opm::Deck deck = createCARTInvalidDeck(); - BOOST_CHECK( !Opm::EclipseGrid::hasCornerPointKeywords( deck )); - BOOST_CHECK( !Opm::EclipseGrid::hasCartesianKeywords( deck )); -} - -BOOST_AUTO_TEST_CASE(CreateMissingGRID_throws) { - auto deck= createDeckHeaders(); - BOOST_CHECK_THROW( Opm::EclipseGrid{ deck }, std::invalid_argument); -} - -static Opm::Deck createInvalidDXYZCARTDeck() { - const char* deckData = - "RUNSPEC\n" - "\n" - "DIMENS\n" - " 10 10 10 /\n" - "GRID\n" - "DX\n" - "99*0.25 /\n" - "DY\n" - "1000*0.25 /\n" - "DZ\n" - "1000*0.25 /\n" - "TOPS\n" - "1000*0.25 /\n" - "EDIT\n" - "\n"; - - Opm::Parser parser; - return parser.parseString( deckData) ; -} - -BOOST_AUTO_TEST_CASE(CreateCartesianGRID) { - auto deck = createInvalidDXYZCARTDeck(); - BOOST_CHECK_THROW( Opm::EclipseGrid{ deck }, std::invalid_argument); -} - -static Opm::Deck createInvalidDXYZCARTDeckDEPTHZ() { - const char* deckData = - "RUNSPEC\n" - "\n" - "DIMENS\n" - " 10 10 10 /\n" - "GRID\n" - "DX\n" - "100*0.25 /\n" - "DY\n" - "1000*0.25 /\n" - "DZ\n" - "1000*0.25 /\n" - "DEPTHZ\n" - "101*0.25 /\n" - "EDIT\n" - "\n"; - - Opm::Parser parser; - return parser.parseString( deckData) ; -} - -BOOST_AUTO_TEST_CASE(CreateCartesianGRIDDEPTHZ) { - auto deck = createInvalidDXYZCARTDeckDEPTHZ(); - BOOST_CHECK_THROW( Opm::EclipseGrid{ deck }, std::invalid_argument); -} - -static Opm::Deck createOnlyTopDZCartGrid() { - const char* deckData = - "RUNSPEC\n" - "\n" - "DIMENS\n" - " 10 5 20 /\n" - "GRID\n" - "DX\n" - "1000*0.25 /\n" - "DY\n" - "1000*0.25 /\n" - "DZ\n" - "101*0.25 /\n" - "TOPS\n" - "110*0.25 /\n" - "EDIT\n" - "\n"; - - Opm::Parser parser; - return parser.parseString( deckData) ; -} - - -static Opm::Deck createInvalidDEPTHZDeck1 () { - const char* deckData = - "RUNSPEC\n" - "\n" - "DIMENS\n" - " 10 5 20 /\n" - "GRID\n" - "DXV\n" - "1000*0.25 /\n" - "DYV\n" - "5*0.25 /\n" - "DZV\n" - "20*0.25 /\n" - "DEPTHZ\n" - "66*0.25 /\n" - "EDIT\n" - "\n"; - - Opm::Parser parser; - return parser.parseString( deckData) ; -} - -BOOST_AUTO_TEST_CASE(CreateCartesianGRIDInvalidDEPTHZ1) { - auto deck = createInvalidDEPTHZDeck1(); - BOOST_CHECK_THROW( Opm::EclipseGrid{ deck }, std::invalid_argument); -} - -static Opm::Deck createInvalidDEPTHZDeck2 () { - const char* deckData = - "RUNSPEC\n" - "\n" - "DIMENS\n" - " 10 5 20 /\n" - "GRID\n" - "DXV\n" - "10*0.25 /\n" - "DYV\n" - "5*0.25 /\n" - "DZV\n" - "20*0.25 /\n" - "DEPTHZ\n" - "67*0.25 /\n" - "EDIT\n" - "\n"; - - Opm::Parser parser; - return parser.parseString( deckData) ; -} - -BOOST_AUTO_TEST_CASE(CreateCartesianGRIDInvalidDEPTHZ2) { - auto deck = createInvalidDEPTHZDeck2(); - BOOST_CHECK_THROW( Opm::EclipseGrid{ deck }, std::invalid_argument); -} - -BOOST_AUTO_TEST_CASE(CreateCartesianGRIDOnlyTopLayerDZ) { - Opm::Deck deck = createOnlyTopDZCartGrid(); - Opm::EclipseGrid grid( deck ); - BOOST_CHECK_EQUAL( 10 , grid.getNX( )); - BOOST_CHECK_EQUAL( 5 , grid.getNY( )); - BOOST_CHECK_EQUAL( 20 , grid.getNZ( )); - BOOST_CHECK_EQUAL( 1000 , grid.getNumActive()); -} - -BOOST_AUTO_TEST_CASE(AllActiveExportActnum) { - Opm::Deck deck = createOnlyTopDZCartGrid(); - Opm::EclipseGrid grid( deck ); - - std::vector actnum = grid.getACTNUM(); - - BOOST_CHECK_EQUAL( 1000 , actnum.size()); -} - -BOOST_AUTO_TEST_CASE(CornerPointSizeMismatchCOORD) { - const char* deckData = - "RUNSPEC\n" - "\n" - "DIMENS\n" - " 10 10 10 /\n" - "GRID\n" - "COORD\n" - " 725*1 / \n" - "ZCORN \n" - " 8000*1 / \n" - "ACTNUM \n" - " 1000*1 / \n" - "EDIT\n" - "\n"; - - Opm::Parser parser; - auto deck = parser.parseString( deckData) ; - const auto& zcorn = deck.getKeyword("ZCORN"); - BOOST_CHECK_EQUAL( 8000U , zcorn.getDataSize( )); - - BOOST_CHECK_THROW(Opm::EclipseGrid{ deck }, std::invalid_argument); -} - - -BOOST_AUTO_TEST_CASE(CornerPointSizeMismatchZCORN) { - const char* deckData = - "RUNSPEC\n" - "\n" - "DIMENS\n" - " 10 10 10 /\n" - "GRID\n" - "COORD\n" - " 726*1 / \n" - "ZCORN \n" - " 8001*1 / \n" - "ACTNUM \n" - " 1000*1 / \n" - "EDIT\n" - "\n"; - - Opm::Parser parser; - auto deck = parser.parseString( deckData) ; - BOOST_CHECK_THROW(Opm::EclipseGrid{ deck }, std::invalid_argument); -} - -BOOST_AUTO_TEST_CASE(ResetACTNUM) { - const char* deckData = - "RUNSPEC\n" - "\n" - "DIMENS\n" - " 10 10 10 /\n" - "GRID\n" - "COORD\n" - " 726*1 / \n" - "ZCORN \n" - " 8000*1 / \n" - "EDIT\n" - "\n"; - - Opm::Parser parser; - auto deck = parser.parseString( deckData) ; - - Opm::EclipseGrid grid( deck); - BOOST_CHECK_EQUAL( 1000U , grid.getNumActive()); - std::vector actnum(1000); - actnum[0] = 1; - actnum[2] = 1; - actnum[4] = 1; - actnum[6] = 1; - - grid.resetACTNUM( actnum ); - - BOOST_CHECK_EQUAL( 4U , grid.getNumActive() ); - { - std::vector full(grid.getCartesianSize()); - std::iota(full.begin(), full.end(), 0); - - auto compressed = grid.compressedVector( full ); - - BOOST_CHECK_EQUAL( compressed.size() , 4U ); - BOOST_CHECK_EQUAL( compressed[0] , 0 ); - BOOST_CHECK_EQUAL( compressed[1] , 2 ); - BOOST_CHECK_EQUAL( compressed[2] , 4 ); - BOOST_CHECK_EQUAL( compressed[3] , 6 ); - } - - { - const auto& activeMap = grid.getActiveMap( ); - BOOST_CHECK_EQUAL( 4U , activeMap.size() ); - BOOST_CHECK_EQUAL( 0 , activeMap[0] ); - BOOST_CHECK_EQUAL( 2 , activeMap[1] ); - BOOST_CHECK_EQUAL( 4 , activeMap[2] ); - BOOST_CHECK_EQUAL( 6 , activeMap[3] ); - } - - grid.resetACTNUM(); - - BOOST_CHECK_EQUAL( 1000U , grid.getNumActive() ); - { - const auto& activeMap = grid.getActiveMap( ); - BOOST_CHECK_EQUAL( 1000U , activeMap.size() ); - BOOST_CHECK_EQUAL( 0 , activeMap[0] ); - BOOST_CHECK_EQUAL( 1 , activeMap[1] ); - BOOST_CHECK_EQUAL( 2 , activeMap[2] ); - BOOST_CHECK_EQUAL( 999 , activeMap[999] ); - } - - actnum.assign(1000, 1); - - actnum[0] = 0; - actnum[1] = 0; - actnum[2] = 0; - actnum[11] = 0; - actnum[21] = 0; - actnum[430] = 0; - actnum[431] = 0; - - grid.resetACTNUM( actnum ); - - std::vector actMap = grid.getActiveMap(); - - BOOST_CHECK_EQUAL(actMap.size(), 993); - BOOST_CHECK_THROW(grid.getGlobalIndex(993), std::out_of_range); - BOOST_CHECK_EQUAL(grid.getGlobalIndex(0), 3); - BOOST_CHECK_EQUAL(grid.getGlobalIndex(33), 38); - BOOST_CHECK_EQUAL(grid.getGlobalIndex(450), 457); - BOOST_CHECK_EQUAL(grid.getGlobalIndex(1,2,3), 321); -} - -BOOST_AUTO_TEST_CASE(TestCP_example) { - const char* deckData = - - "RUNSPEC\n" - "\n" - "DIMENS\n" - " 3 2 1 /\n" - "GRID\n" - "COORD\n" - " 2000.0000 2000.0000 2000.0000 1999.9476 2000.0000 2002.9995\n" - " 2049.9924 2000.0000 2000.8726 2049.9400 2000.0000 2003.8722 \n" - " 2099.9848 2000.0000 2001.7452 2099.9324 2000.0000 2004.7448 \n" - " 2149.9772 2000.0000 2002.6179 2149.9248 2000.0000 2005.6174 \n" - " 2000.0000 2050.0000 2000.0000 1999.9476 2050.0000 2002.9995 \n" - " 2049.9924 2050.0000 2000.8726 2049.9400 2050.0000 2003.8722 \n" - " 2099.9848 2050.0000 2001.7452 2099.9324 2050.0000 2004.7448 \n" - " 2149.9772 2050.0000 2002.6179 2149.9248 2050.0000 2005.6174 \n" - " 2000.0000 2100.0000 2000.0000 1999.9476 2100.0000 2002.9995 \n" - " 2049.9924 2100.0000 2000.8726 2049.9400 2100.0000 2003.8722 \n" - " 2099.9848 2100.0000 2001.7452 2099.9324 2100.0000 2004.7448 \n" - " 2149.9772 2100.0000 2002.6179 2149.9248 2100.0000 2005.6174 / \n" - "ZCORN\n" - " 2000.0000 2000.8726 2000.8726 2001.7452 2001.7452 2002.6179 \n" - " 2000.0000 2000.8726 2000.8726 2001.7452 2001.7452 2002.6179 \n" - " 2000.0000 2000.8726 2000.8726 2001.7452 2001.7452 2002.6179 \n" - " 2000.0000 2000.8726 2000.8726 2001.7452 2001.7452 2002.6179 \n" - " 2002.9995 2003.8722 2003.8722 2004.7448 2004.7448 2005.6174 \n" - " 2002.9995 2003.8722 2003.8722 2004.7448 2004.7448 2005.6174 \n" - " 2002.9995 2003.8722 2003.8722 2004.7448 2004.7448 2005.6174 \n" - " 2002.9995 2003.8722 2003.8722 2004.7448 2004.7448 2005.6174 / \n" - "EDIT\n" - "\n"; - - Opm::Parser parser; - auto deck = parser.parseString( deckData) ; - - Opm::EclipseGrid grid( deck); - BOOST_CHECK_EQUAL( 6U , grid.getNumActive()); - - std::vector actnum(6, 0); - actnum[0] = 1; - actnum[2] = 1; - actnum[4] = 1; - - grid.resetACTNUM( actnum ); - - BOOST_CHECK_EQUAL( 3U , grid.getNumActive() ); -} - - - -BOOST_AUTO_TEST_CASE(ConstructorNORUNSPEC) { - const char* deckData = - "GRID\n" - "SPECGRID \n" - " 10 10 10 / \n" - "COORD\n" - " 726*1 / \n" - "ZCORN \n" - " 8000*1 / \n" - "ACTNUM \n" - " 1000*1 / \n" - "PORO\n" - " 1000*0.15 /\n" - "EDIT\n" - "\n"; - - Opm::Parser parser; - auto deck1 = parser.parseString( deckData) ; - auto deck2 = createCPDeck(); - - Opm::EclipseGrid grid1(deck1); - Opm::EclipseGrid grid2(deck2); - - BOOST_CHECK(grid1.equal( grid2 )); -} - -BOOST_AUTO_TEST_CASE(ConstructorNoSections) { - const char* deckData = - "DIMENS \n" - " 10 10 10 / \n" - "COORD \n" - " 726*1 / \n" - "ZCORN \n" - " 8000*1 / \n" - "ACTNUM \n" - " 1000*1 / \n" - "PORO\n" - " 1000*0.15 /\n" - "\n"; - - Opm::Parser parser; - auto deck1 = parser.parseString( deckData) ; - auto deck2 = createCPDeck(); - - Opm::EclipseGrid grid1(deck1); - Opm::EclipseGrid grid2(deck2); - - BOOST_CHECK(grid1.equal( grid2 )); -} - -BOOST_AUTO_TEST_CASE(ConstructorNORUNSPEC_PINCH) { - auto deck1 = createCPDeck(); - auto deck2 = createPinchedCPDeck(); - - Opm::EclipseGrid grid1(deck1); - Opm::EclipseGrid grid2(deck2); - - BOOST_CHECK(!grid1.equal( grid2 )); - - BOOST_CHECK(!grid1.isPinchActive()); - BOOST_CHECK_THROW(grid1.getPinchThresholdThickness(), std::logic_error); - BOOST_CHECK(grid2.isPinchActive()); - BOOST_CHECK_EQUAL(grid2.getPinchThresholdThickness(), 0.2); -} - -BOOST_AUTO_TEST_CASE(ConstructorMINPV) { - auto deck1 = createCPDeck(); - auto deck2 = createMinpvDefaultCPDeck(); - auto deck3 = createMinpvCPDeck(); - - Opm::EclipseGrid grid1(deck1); - BOOST_CHECK_THROW(Opm::EclipseGrid grid2(deck2), std::invalid_argument); - Opm::EclipseGrid grid3(deck3); - - BOOST_CHECK(!grid1.equal( grid3 )); - BOOST_CHECK_EQUAL(grid1.getMinpvMode(), Opm::MinpvMode::ModeEnum::Inactive); - BOOST_CHECK_EQUAL(grid3.getMinpvMode(), Opm::MinpvMode::ModeEnum::EclSTD); - BOOST_CHECK_EQUAL(grid3.getMinpvVector()[0], 10.0); -} - -static Opm::Deck createActnumDeck() { - const char* deckData = "RUNSPEC\n" - "\n" - "DIMENS \n" - " 2 2 2 / \n" - "GRID\n" - "DXV\n" - " 2*0.25 /\n" - "DYV\n" - " 2*0.25 /\n" - "DZV\n" - " 2*0.25 /\n" - "DEPTHZ\n" - " 9*0.25 /\n" - "EQUALS\n" - " ACTNUM 0 1 1 1 1 1 1 /\n" - "/ \n" - "PORO\n" - " 8*0.15 /\n" - "FLUXNUM\n" - "8*0 /\n"; - - Opm::Parser parser; - return parser.parseString( deckData); -} - - -/// creates a deck where the top-layer has ACTNUM = 0 and two partially -/// overlapping 2*2*2 boxes in the center, one [5,7]^3 and one [6,8]^3 -/// have ACTNUM = 0 -static Opm::Deck createActnumBoxDeck() { - const char* deckData = "RUNSPEC\n" - "\n" - "DIMENS \n" - " 10 10 10 / \n" - "GRID\n" - "DXV\n" - " 10*0.25 /\n" - "DYV\n" - " 10*0.25 /\n" - "DZV\n" - " 10*0.25 /\n" - "DEPTHZ\n" - " 121*0.25 /\n" - "PORO \n" - " 1000*0.15 /\n" - "EQUALS\n" - " ACTNUM 0 1 10 1 10 1 1 /\n" // disable top layer - "/ \n" - // start box - "BOX\n" - " 5 7 5 7 5 7 /\n" - "ACTNUM \n" - " 0 0 0 0 0 0 0 0 0\n" - " 0 0 0 0 0 0 0 0 0\n" - " 0 0 0 0 0 0 0 0 0\n" - "/\n" - "BOX\n" // don't need ENDBOX - " 6 8 6 8 6 8 /\n" - "ACTNUM \n" - " 27*0\n" - "/\n" - "ENDBOX\n" - // end box - "FLUXNUM\n" - "1000*0 /\n"; - - Opm::Parser parser; - return parser.parseString( deckData); -} - -BOOST_AUTO_TEST_CASE(GridBoxActnum) { - auto deck = createActnumBoxDeck(); - Opm::EclipseState es( deck); - const auto& fp = es.fieldProps(); - const auto& grid = es.getInputGrid(); - - BOOST_CHECK_NO_THROW(fp.get_int("ACTNUM")); - - size_t active = 10 * 10 * 10 // 1000 - - (10 * 10 * 1) // - top layer - - ( 3 * 3 * 3) // - [5,7]^3 box - - ( 3 * 3 * 3) // - [6,8]^3 box - + ( 2 * 2 * 2); // + inclusion/exclusion - - BOOST_CHECK_NO_THROW(grid.getNumActive()); - BOOST_CHECK_EQUAL(grid.getNumActive(), active); - - BOOST_CHECK_EQUAL(es.getInputGrid().getNumActive(), active); - - { - size_t active_index = 0; - // NB: The implementation of this test actually assumes that - // the loops are running with z as the outer and x as the - // inner direction. - for (size_t z = 0; z < grid.getNZ(); z++) { - for (size_t y = 0; y < grid.getNY(); y++) { - for (size_t x = 0; x < grid.getNX(); x++) { - if (z == 0) - BOOST_CHECK(!grid.cellActive(x, y, z)); - else if (x >= 4 && x <= 6 && y >= 4 && y <= 6 && z >= 4 && z <= 6) - BOOST_CHECK(!grid.cellActive(x, y, z)); - else if (x >= 5 && x <= 7 && y >= 5 && y <= 7 && z >= 5 && z <= 7) - BOOST_CHECK(!grid.cellActive(x, y, z)); - else { - size_t g = grid.getGlobalIndex( x,y,z ); - - BOOST_CHECK(grid.cellActive(x, y, z)); - BOOST_CHECK_EQUAL( grid.activeIndex(x,y,z) , active_index ); - BOOST_CHECK_EQUAL( grid.activeIndex(g) , active_index ); - - active_index++; - } - } - } - } - - BOOST_CHECK_THROW( grid.activeIndex(0,0,0) , std::invalid_argument ); - } -} - -BOOST_AUTO_TEST_CASE(GridActnumVia3D) { - auto deck = createActnumDeck(); - - Opm::EclipseState es( deck); - const auto& fp = es.fieldProps(); - const auto& grid = es.getInputGrid(); - Opm::EclipseGrid grid2( grid ); - - std::vector actnum = {1, 1, 0, 1, 1, 0, 1, 1}; - Opm::EclipseGrid grid3( grid , actnum); - - BOOST_CHECK_NO_THROW(fp.get_int("ACTNUM")); - BOOST_CHECK_NO_THROW(grid.getNumActive()); - BOOST_CHECK_EQUAL(grid.getNumActive(), 2 * 2 * 2 - 1); - - BOOST_CHECK_NO_THROW(grid2.getNumActive()); - BOOST_CHECK_EQUAL(grid2.getNumActive(), 2 * 2 * 2 - 1); - - BOOST_CHECK_EQUAL(grid3.getNumActive(), 6); -} - - -BOOST_AUTO_TEST_CASE(GridActnumViaState) { - auto deck = createActnumDeck(); - - BOOST_CHECK_NO_THROW( std::unique_ptr(new Opm::EclipseState( deck))); - Opm::EclipseState es( deck); - BOOST_CHECK_EQUAL(es.getInputGrid().getNumActive(), 2 * 2 * 2 - 1); -} - - -BOOST_AUTO_TEST_CASE(GridDimsSPECGRID) { - auto deck = createDeckSPECGRID(); - auto gd = Opm::GridDims( deck ); - BOOST_CHECK_EQUAL(gd.getNX(), 13); - BOOST_CHECK_EQUAL(gd.getNY(), 17); - BOOST_CHECK_EQUAL(gd.getNZ(), 19); -} - - -BOOST_AUTO_TEST_CASE(GridDimsDIMENS) { - auto deck = createDeckDIMENS(); - auto gd = Opm::GridDims( deck ); - BOOST_CHECK_EQUAL(gd.getNX(), 13); - BOOST_CHECK_EQUAL(gd.getNY(), 17); - BOOST_CHECK_EQUAL(gd.getNZ(), 19); -} - - -BOOST_AUTO_TEST_CASE(ProcessedCopy) { - Opm::EclipseGrid gd(10,10,10); - std::vector zcorn; - std::vector actnum; - - zcorn = gd.getZCORN(); - actnum = gd.getACTNUM(); - - Opm::EclipseGrid gd1(gd , actnum ); - BOOST_CHECK( gd.equal( gd1 )); - { - Opm::EclipseGrid gd2(gd , zcorn.data() , actnum ); - BOOST_CHECK( gd.equal( gd2 )); - } - - zcorn[0] -= 1.0; - { - Opm::EclipseGrid gd2(gd , zcorn.data() , actnum ); - BOOST_CHECK( !gd.equal( gd2 )); - } - - { - Opm::EclipseGrid gd2(gd , actnum ); - BOOST_CHECK( gd.equal( gd2 )); - } - - actnum.assign( gd.getCartesianSize() , 1); - actnum[0] = 0; - { - Opm::EclipseGrid gd2(gd , actnum ); - BOOST_CHECK( !gd.equal( gd2 )); - BOOST_CHECK( !gd2.cellActive( 0 )); - } -} - -BOOST_AUTO_TEST_CASE(regularCartGrid) { - - int nx = 3; - int ny = 4; - int nz = 5; - - double dx = 25; - double dy = 35; - double dz = 2; - - double ref_volume = dx* dy* dz; - - Opm::EclipseGrid grid(nx, ny, nz, dx, dy, dz); - - std::array dims = grid.getNXYZ(); - - int nCells = dims[0]*dims[1]*dims[2]; - - for (int n=0; n cc = grid.getCellCenter(i, j, k); - BOOST_CHECK_CLOSE(cc[0], ref_x, 1e-12); - BOOST_CHECK_CLOSE(cc[1], ref_y, 1e-12); - BOOST_CHECK_CLOSE(cc[2], ref_z, 1e-12); - } - } - } -} - -BOOST_AUTO_TEST_CASE(ZcornMapper) { - - int nx = 3; - int ny = 4; - int nz = 5; - - Opm::EclipseGrid grid(nx, ny, nz); - Opm::ZcornMapper zmp = grid.zcornMapper( ); - - BOOST_CHECK_THROW(zmp.index(nx,1,1,0) , std::invalid_argument); - BOOST_CHECK_THROW(zmp.index(0,ny,1,0) , std::invalid_argument); - BOOST_CHECK_THROW(zmp.index(0,1,nz,0) , std::invalid_argument); - BOOST_CHECK_THROW(zmp.index(0,1,2,8) , std::invalid_argument); - - auto points_adjusted = grid.fixupZCORN(); - - std::vector actnum = grid.getACTNUM(); - std::vector zcorn = grid.getZCORN(); - - zcorn[42] = zcorn[42] + 2.0; - zcorn[96] = zcorn[96] + 2.0; - - Opm::EclipseGrid grid2(grid , zcorn.data() , actnum ); - points_adjusted = grid2.getZcornFixed(); - BOOST_CHECK_EQUAL( points_adjusted , 4 ); - - points_adjusted = grid2.fixupZCORN(); - BOOST_CHECK_EQUAL( points_adjusted , 0 ); - - zcorn = grid.getZCORN(); - - BOOST_CHECK( zmp.validZCORN( zcorn )); - - // Manually destroy it - cell internal - zcorn[ zmp.index(0,0,0,4) ] = zcorn[ zmp.index(0,0,0,0) ] - 0.1; - BOOST_CHECK( !zmp.validZCORN( zcorn )); - points_adjusted = zmp.fixupZCORN( zcorn ); - BOOST_CHECK_EQUAL( points_adjusted , 1 ); - BOOST_CHECK( zmp.validZCORN( zcorn )); - - // Manually destroy it - cell 2 cell - zcorn[ zmp.index(0,0,0,4) ] = zcorn[ zmp.index(0,0,1,0) ] + 0.1; - BOOST_CHECK( !zmp.validZCORN( zcorn )); - points_adjusted = zmp.fixupZCORN( zcorn ); - BOOST_CHECK_EQUAL( points_adjusted , 1 ); - BOOST_CHECK( zmp.validZCORN( zcorn )); - - // Manually destroy it - cell 2 cell and cell internal - zcorn[ zmp.index(0,0,0,4) ] = zcorn[ zmp.index(0,0,1,0) ] + 0.1; - zcorn[ zmp.index(0,0,0,0) ] = zcorn[ zmp.index(0,0,0,4) ] + 0.1; - BOOST_CHECK( !zmp.validZCORN( zcorn )); - points_adjusted = zmp.fixupZCORN( zcorn ); - BOOST_CHECK_EQUAL( points_adjusted , 2 ); - BOOST_CHECK( zmp.validZCORN( zcorn )); -} - -BOOST_AUTO_TEST_CASE(MoveTest) { - int nx = 3; - int ny = 4; - int nz = 5; - Opm::EclipseGrid grid1(nx,ny,nz); - Opm::EclipseGrid grid2( std::move( grid1 )); // grid2 should be move constructed from grid1 - - BOOST_CHECK( !grid1.circle( )); -} - -static Opm::Deck radial_missing_INRAD() { - const char* deckData = - "RUNSPEC\n" - "\n" - "DIMENS\n" - " 10 10 10 /\n" - "RADIAL\n" - "\n"; - - Opm::Parser parser; - return parser.parseString( deckData); -} - - - -static Opm::Deck radial_keywords_OK() { - const char* deckData = - "RUNSPEC\n" - "\n" - "DIMENS\n" - " 10 6 10 /\n" - "RADIAL\n" - "GRID\n" - "INRAD\n" - "1 /\n" - "DRV\n" - "10*1 /\n" - "DTHETAV\n" - "6*60 /\n" - "DZV\n" - "10*0.25 /\n" - "TOPS\n" - "60*0.0 /\n" - "PORO \n" - " 600*0.15 /" - "\n"; - - Opm::Parser parser; - return parser.parseString( deckData); -} - -static Opm::Deck radial_keywords_OK_CIRCLE() { - const char* deckData = - "RUNSPEC\n" - "\n" - "DIMENS\n" - " 10 6 10 /\n" - "RADIAL\n" - "GRID\n" - "CIRCLE\n" - "INRAD\n" - "1 /\n" - "DRV\n" - "10*1 /\n" - "DTHETAV\n" - "6*60 /\n" - "DZV\n" - "10*0.25 /\n" - "TOPS\n" - "60*0.0 /\n" - "PORO \n" - " 600*0.15 /" - "\n"; - - Opm::Parser parser; - return parser.parseString( deckData); -} - - - -BOOST_AUTO_TEST_CASE(RadialTest) { - Opm::Deck deck = radial_missing_INRAD(); - BOOST_CHECK_THROW( Opm::EclipseGrid{ deck }, std::invalid_argument); -} - -BOOST_AUTO_TEST_CASE(RadialKeywordsOK) { - Opm::Deck deck = radial_keywords_OK(); - Opm::EclipseGrid grid( deck ); - BOOST_CHECK(!grid.circle()); -} - -BOOST_AUTO_TEST_CASE(RadialKeywordsOK_CIRCLE) { - Opm::Deck deck = radial_keywords_OK_CIRCLE(); - Opm::EclipseGrid grid( deck ); - BOOST_CHECK(grid.circle()); -} - -static Opm::Deck radial_keywords_DRV_size_mismatch() { - const char* deckData = - "RUNSPEC\n" - "\n" - "DIMENS\n" - "10 6 12 /\n" - "RADIAL\n" - "GRID\n" - "INRAD\n" - "1 /\n" - "DRV\n" - "9*1 /\n" - "DTHETAV\n" - "6*60 /\n" - "DZV\n" - "12*0.25 /\n" - "TOPS\n" - "60*0.0 /\n" - "PORO \n" - " 720*0.15 /" - "\n"; - - Opm::Parser parser; - return parser.parseString( deckData); -} - - -static Opm::Deck radial_keywords_DZV_size_mismatch() { - const char* deckData = - "RUNSPEC\n" - "\n" - "DIMENS\n" - "10 6 12 /\n" - "RADIAL\n" - "GRID\n" - "INRAD\n" - "1 /\n" - "DRV\n" - "10*1 /\n" - "DTHETAV\n" - "6*60 /\n" - "DZV\n" - "11*0.25 /\n" - "TOPS\n" - "60*0.0 /\n" - "PORO \n" - " 720*0.15 /" - "\n"; - - Opm::Parser parser; - return parser.parseString( deckData); -} - -static Opm::Deck radial_keywords_DTHETAV_size_mismatch() { - const char* deckData = - "RUNSPEC\n" - "\n" - "DIMENS\n" - "10 6 12 /\n" - "RADIAL\n" - "GRID\n" - "INRAD\n" - "1 /\n" - "DRV\n" - "10*1 /\n" - "DTHETAV\n" - "5*60 /\n" - "DZV\n" - "12*0.25 /\n" - "TOPS\n" - "60*0.0 /\n" - "PORO \n" - " 720*0.15 /" - "\n"; - - Opm::Parser parser; - return parser.parseString( deckData); -} - -// This is stricter than the ECLIPSE implementation; we assume that -// *only* the top layer is explicitly given. - -static Opm::Deck radial_keywords_TOPS_size_mismatch() { - const char* deckData = - "RUNSPEC\n" - "\n" - "DIMENS\n" - "10 6 12 /\n" - "RADIAL\n" - "GRID\n" - "INRAD\n" - "1 /\n" - "DRV\n" - "10*1 /\n" - "DTHETAV\n" - "6*60 /\n" - "DZV\n" - "12*0.25 /\n" - "TOPS\n" - "65*0.0 /\n" - "PORO \n" - " 720*0.15 /" - "\n"; - - Opm::Parser parser; - return parser.parseString( deckData); -} - -static Opm::Deck radial_keywords_ANGLE_OVERFLOW() { - const char* deckData = - "RUNSPEC\n" - "\n" - "DIMENS\n" - "10 6 12 /\n" - "RADIAL\n" - "GRID\n" - "INRAD\n" - "1 /\n" - "DRV\n" - "10*1 /\n" - "DTHETAV\n" - "6*70 /\n" - "DZV\n" - "12*0.25 /\n" - "TOPS\n" - "60*0.0 /\n" - "PORO \n" - " 720*0.15 /" - "\n"; - - Opm::Parser parser; - return parser.parseString( deckData); -} - - -BOOST_AUTO_TEST_CASE(RadialKeywords_SIZE_ERROR) { - BOOST_CHECK_THROW( Opm::EclipseGrid{ radial_keywords_DRV_size_mismatch() } , std::invalid_argument); - BOOST_CHECK_THROW( Opm::EclipseGrid{ radial_keywords_DZV_size_mismatch() } , std::invalid_argument); - BOOST_CHECK_THROW( Opm::EclipseGrid{ radial_keywords_TOPS_size_mismatch() } , std::invalid_argument); - BOOST_CHECK_THROW( Opm::EclipseGrid{ radial_keywords_DTHETAV_size_mismatch() } , std::invalid_argument); - BOOST_CHECK_THROW( Opm::EclipseGrid{ radial_keywords_ANGLE_OVERFLOW() } , std::invalid_argument); -} - -static Opm::Deck radial_details() { - const char* deckData = - "RUNSPEC\n" - "\n" - "DIMENS\n" - "1 5 2 /\n" - "RADIAL\n" - "GRID\n" - "INRAD\n" - "1 /\n" - "DRV\n" - "1 /\n" - "DTHETAV\n" - "3*90 60 30/\n" - "DZV\n" - "2*1 /\n" - "TOPS\n" - "5*1.0 /\n" - "PORO \n" - " 10*0.15 /" - "\n"; - - Opm::Parser parser; - return parser.parseString( deckData); -} - -BOOST_AUTO_TEST_CASE(RadialDetails) { - Opm::Deck deck = radial_details(); - Opm::EclipseGrid grid( deck ); - - BOOST_CHECK_CLOSE( grid.getCellVolume( 0 , 0 , 0 ) , 0.5*(2*2 - 1)*1, 0.0001); - BOOST_CHECK_CLOSE( grid.getCellVolume( 0 , 3 , 0 ) , sqrt(3.0)*0.25*( 4 - 1 ) , 0.0001); - auto pos0 = grid.getCellCenter(0,0,0); - auto pos2 = grid.getCellCenter(0,2,0); - - BOOST_CHECK_CLOSE( std::get<0>(pos0) , 0.75 , 0.0001); - BOOST_CHECK_CLOSE( std::get<1>(pos0) , 0.75 , 0.0001); - BOOST_CHECK_CLOSE( std::get<2>(pos0) , 1.50 , 0.0001); - - BOOST_CHECK_CLOSE( std::get<0>(pos2) , -0.75 , 0.0001); - BOOST_CHECK_CLOSE( std::get<1>(pos2) , -0.75 , 0.0001); - BOOST_CHECK_CLOSE( std::get<2>(pos2) , 1.50 , 0.0001); - - { - const auto& p0 = grid.getCornerPos( 0,0,0 , 0 ); - const auto& p6 = grid.getCornerPos( 0,0,0 , 6 ); - BOOST_CHECK_CLOSE( p0[0]*p0[0] + p0[1]*p0[1] , 1.0, 0.0001); - BOOST_CHECK_CLOSE( p6[0]*p6[0] + p6[1]*p6[1] , 1.0, 0.0001); - - BOOST_CHECK_THROW( grid.getCornerPos( 0,0,0 , 8 ) , std::invalid_argument); - } -} - -BOOST_AUTO_TEST_CASE(CoordMapper) { - size_t nx = 10; - size_t ny = 7; - Opm::CoordMapper cmp = Opm::CoordMapper( nx , ny ); - BOOST_CHECK_THROW( cmp.index(12,6,0,0), std::invalid_argument ); - BOOST_CHECK_THROW( cmp.index(10,8,0,0), std::invalid_argument ); - BOOST_CHECK_THROW( cmp.index(10,7,5,0), std::invalid_argument ); - BOOST_CHECK_THROW( cmp.index(10,5,1,2), std::invalid_argument ); - - BOOST_CHECK_EQUAL( cmp.index(10,7,2,1) + 1 , cmp.size( )); -} - -static Opm::Deck createCARTDeckTest3x4x2() { - const char* deckData = - "RUNSPEC\n" - "\n" - "DIMENS\n" - " 3 4 2 /\n" - "GRID\n" - "DX\n" - "100 120 110 100 120 110 100 120 110 100 120 110 /\n" - "DY\n" - "70 80 85 80 70 80 85 80 70 80 85 80 /\n" - "DZ\n" - "12*25 12*35 /\n" - "TOPS\n" - "2500 2510 2520 2520 2530 2540 2540 2550 2560 2560 2570 2580 /\n" - "PORO \n" - " 24*0.15 /" - "EDIT\n" - "\n"; - - Opm::Parser parser; - return parser.parseString( deckData) ; -} - -BOOST_AUTO_TEST_CASE(CART_Deck_3x4x2) { - - Opm::Deck deck1 = createCARTDeckTest3x4x2(); - Opm::EclipseGrid grid1( deck1 ); - - const std::vector t_coord = grid1.getCOORD(); - const std::vector t_zcorn = grid1.getZCORN(); - - std::vector ref_coord = {0, 0, 2500, 0, 0, 2560, 100, 0, 2510, 100, 0, 2570, 220, 0, 2520, 220, 0, - 2580, 330, 0, 2520, 330, 0, 2580, 0, 70, 2520, 0, 70, 2580, 100, 80, 2530, 100, 80, 2590, 220, 85, - 2540, 220, 85, 2600, 330, 85, 2540, 330, 85, 2600, 0, 150, 2540, 0, 150, 2600, 100, 150, 2550, 100, - 150, 2610, 220, 165, 2560, 220, 165, 2620, 330, 165, 2560, 330, 165, 2620, 0, 235, 2560, 0, 235, - 2620, 100, 230, 2570, 100, 230, 2630, 220, 235, 2580, 220, 235, 2640, 330, 235, 2580, 330, 235, - 2640, 0, 315, 2560, 0, 315, 2620, 100, 315, 2570, 100, 315, 2630, 220, 315, 2580, 220, 315, 2640, - 330, 315, 2580, 330, 315, 2640}; - - std::vector ref_zcorn = {2500, 2500, 2510, 2510, 2520, 2520, 2500, 2500, 2510, 2510, 2520, 2520, - 2520, 2520, 2530, 2530, 2540, 2540, 2520, 2520, 2530, 2530, 2540, 2540, 2540, 2540, 2550, 2550, 2560, - 2560, 2540, 2540, 2550, 2550, 2560, 2560, 2560, 2560, 2570, 2570, 2580, 2580, 2560, 2560, 2570, 2570, - 2580, 2580, 2525, 2525, 2535, 2535, 2545, 2545, 2525, 2525, 2535, 2535, 2545, 2545, 2545, 2545, 2555, - 2555, 2565, 2565, 2545, 2545, 2555, 2555, 2565, 2565, 2565, 2565, 2575, 2575, 2585, 2585, 2565, 2565, - 2575, 2575, 2585, 2585, 2585, 2585, 2595, 2595, 2605, 2605, 2585, 2585, 2595, 2595, 2605, 2605, 2525, - 2525, 2535, 2535, 2545, 2545, 2525, 2525, 2535, 2535, 2545, 2545, 2545, 2545, 2555, 2555, 2565, 2565, - 2545, 2545, 2555, 2555, 2565, 2565, 2565, 2565, 2575, 2575, 2585, 2585, 2565, 2565, 2575, 2575, 2585, - 2585, 2585, 2585, 2595, 2595, 2605, 2605, 2585, 2585, 2595, 2595, 2605, 2605, 2560, 2560, 2570, 2570, - 2580, 2580, 2560, 2560, 2570, 2570, 2580, 2580, 2580, 2580, 2590, 2590, 2600, 2600, 2580, 2580, 2590, - 2590, 2600, 2600, 2600, 2600, 2610, 2610, 2620, 2620, 2600, 2600, 2610, 2610, 2620, 2620, 2620, 2620, - 2630, 2630, 2640, 2640, 2620, 2620, 2630, 2630, 2640, 2640}; - - BOOST_CHECK_EQUAL( t_coord.size() , ref_coord.size()); - - for (size_t i=0; i< t_coord.size(); i++) { - BOOST_CHECK_CLOSE( t_coord[i] , ref_coord[i], 1.0e-5); - } - - BOOST_CHECK_EQUAL( t_zcorn.size() , ref_zcorn.size()); - - for (size_t i=0; i< t_zcorn.size(); i++) { - BOOST_CHECK_CLOSE( t_zcorn[i] , ref_zcorn[i], 1.0e-5); - } -} - -static Opm::Deck createCARTDeckDEPTHZ_2x3x2() { - const char* deckData = - "RUNSPEC\n" - "\n" - "DIMENS\n" - " 2 3 2 /\n" - "GRID\n" - "DXV\n" - "100 120 /\n" - "DYV\n" - "70 80 85 /\n" - "DZV\n" - "25 35 /\n" - "DEPTHZ\n" - "2500 2510 2520 2502 2512 2522 2504 2514 2524 2505 2515 2525 /\n" - "EDIT\n" - "\n"; - - Opm::Parser parser; - return parser.parseString( deckData) ; -} - -BOOST_AUTO_TEST_CASE(CART_Deck_DEPTHZ_2x3x2) { - - Opm::Deck deck1 = createCARTDeckDEPTHZ_2x3x2(); - Opm::EclipseGrid grid1( deck1 ); - - std::vector ref_coord = { 0, 0, 2500, 0, 0, 2560, 100, 0, 2510, 100, 0, 2570, 220, 0, 2520, 220, 0, - 2580, 0, 70, 2502, 0, 70, 2562, 100, 70, 2512, 100, 70, 2572, 220, 70, 2522, 220, 70, 2582, 0, 150, - 2504, 0, 150, 2564, 100, 150, 2514, 100, 150, 2574, 220, 150, 2524, 220, 150, 2584, 0, 235, 2505, 0, - 235, 2565, 100, 235, 2515, 100, 235, 2575, 220, 235, 2525, 220, 235, 2585 }; - - std::vector ref_zcorn = { 2500, 2510, 2510, 2520, 2502, 2512, 2512, 2522, 2502, 2512, 2512, 2522, - 2504, 2514, 2514, 2524, 2504, 2514, 2514, 2524, 2505, 2515, 2515, 2525, 2525, 2535, 2535, 2545, 2527, - 2537, 2537, 2547, 2527, 2537, 2537, 2547, 2529, 2539, 2539, 2549, 2529, 2539, 2539, 2549, 2530, 2540, - 2540, 2550, 2525, 2535, 2535, 2545, 2527, 2537, 2537, 2547, 2527, 2537, 2537, 2547, 2529, 2539, 2539, - 2549, 2529, 2539, 2539, 2549, 2530, 2540, 2540, 2550, 2560, 2570, 2570, 2580, 2562, 2572, 2572, 2582, - 2562, 2572, 2572, 2582, 2564, 2574, 2574, 2584, 2564, 2574, 2574, 2584, 2565, 2575, 2575, 2585 }; - - const std::vector t_coord = grid1.getCOORD(); - const std::vector t_zcorn = grid1.getZCORN(); - - BOOST_CHECK_EQUAL( t_coord.size() , ref_coord.size()); - - for (size_t i=0; i< t_coord.size(); i++) { - BOOST_CHECK_CLOSE( t_coord[i] , ref_coord[i], 1.0e-5); - } - - BOOST_CHECK_EQUAL( t_zcorn.size() , ref_zcorn.size()); - - for (size_t i=0; i< t_zcorn.size(); i++) { - BOOST_CHECK_CLOSE( t_zcorn[i] , ref_zcorn[i], 1.0e-5); - } -} - -static Opm::Deck BAD_CP_GRID() { - const char* deckData = - "RUNSPEC\n" - "\n" - "DIMENS\n" - "2 2 2 /\n" - "GRID\n" - "SPECGRID\n" - " 2 2 2 1 F /\n" - "COORD\n" - " 2002.0000 2002.0000 100.0000 1999.8255 1999.9127 108.4935\n" - " 2011.9939 2000.0000 100.3490 2009.8194 1999.9127 108.8425\n" - " 2015.9878 2000.0000 100.6980 2019.8133 1999.9127 109.1915\n" - " 2000.0000 2009.9985 100.1745 1999.8255 2009.9112 108.6681 \n" - " 2010.9939 2011.9985 100.5235 2009.8194 2009.9112 109.0170\n" - " 2019.9878 2009.9985 100.8725 2019.8133 2009.9112 109.3660\n" - " 2005.0000 2019.9970 100.3490 1999.8255 2019.9097 108.8426\n" - " 2009.9939 2019.9970 100.6980 2009.8194 2019.9097 109.1916\n" - " 2016.9878 2019.9970 101.0470 2019.8133 2019.9097 109.5406 /\n" - "ZCORN\n" - " 98.0000 100.3490 97.3490 100.6980 100.1745 100.5235\n" - " 100.5235 100.8725 100.1745 100.5235 100.5235 100.8725\n" - " 100.3490 101.6980 101.6980 102.5470 102.4973 102.1463\n" - " 103.2463 104.1953 103.6719 104.0209 104.0209 104.3698\n" - " 103.6719 104.0209 104.0209 104.3698 103.8464 104.1954\n" - " 104.1954 104.5444 103.4973 103.8463 103.8463 104.1953\n" - " 103.6719 104.0209 104.0209 104.3698 103.6719 104.0209\n" - " 104.0209 104.3698 103.8464 104.1954 104.1954 104.5444\n" - " 108.4935 108.8425 108.8425 109.1915 108.6681 109.0170\n" - " 109.0170 109.3660 108.6681 109.0170 109.0170 109.3660\n" - " 108.8426 109.1916 109.1916 109.5406 /\n" - "\n" - "PORO\n" - " 8*0.15 /\n" - "EDIT\n"; - - Opm::Parser parser; - return parser.parseString( deckData); -} - -static Opm::Deck BAD_CP_GRID_MAPAXES() { - const char* deckData = - "RUNSPEC\n" - "\n" - "DIMENS\n" - "2 2 2 /\n" - "GRID\n" - "MAPAXES\n" - " 0. 100. 0. 0. 100. 0. /\n" - "\n" - "SPECGRID\n" - " 2 2 2 1 F /\n" - "COORD\n" - " 2002.0000 2002.0000 100.0000 1999.8255 1999.9127 108.4935\n" - " 2011.9939 2000.0000 100.3490 2009.8194 1999.9127 108.8425\n" - " 2015.9878 2000.0000 100.6980 2019.8133 1999.9127 109.1915\n" - " 2000.0000 2009.9985 100.1745 1999.8255 2009.9112 108.6681 \n" - " 2010.9939 2011.9985 100.5235 2009.8194 2009.9112 109.0170\n" - " 2019.9878 2009.9985 100.8725 2019.8133 2009.9112 109.3660\n" - " 2005.0000 2019.9970 100.3490 1999.8255 2019.9097 108.8426\n" - " 2009.9939 2019.9970 100.6980 2009.8194 2019.9097 109.1916\n" - " 2016.9878 2019.9970 101.0470 2019.8133 2019.9097 109.5406 /\n" - "ZCORN\n" - " 98.0000 100.3490 97.3490 100.6980 100.1745 100.5235\n" - " 100.5235 100.8725 100.1745 100.5235 100.5235 100.8725\n" - " 100.3490 101.6980 101.6980 102.5470 102.4973 102.1463\n" - " 103.2463 104.1953 103.6719 104.0209 104.0209 104.3698\n" - " 103.6719 104.0209 104.0209 104.3698 103.8464 104.1954\n" - " 104.1954 104.5444 103.4973 103.8463 103.8463 104.1953\n" - " 103.6719 104.0209 104.0209 104.3698 103.6719 104.0209\n" - " 104.0209 104.3698 103.8464 104.1954 104.1954 104.5444\n" - " 108.4935 108.8425 108.8425 109.1915 108.6681 109.0170\n" - " 109.0170 109.3660 108.6681 109.0170 109.0170 109.3660\n" - " 108.8426 109.1916 109.1916 109.5406 /\n" - "\n" - "PORO\n" - " 8*0.15 /\n" - "EDIT\n"; - - Opm::Parser parser; - return parser.parseString( deckData); -} - -BOOST_AUTO_TEST_CASE(SAVE_FIELD_UNITS) { - - const char* deckData = - - "RUNSPEC\n" - "\n" - "DIMENS\n" - " 4 4 3 /\n" - "FIELD\n" - "GRID\n" - "DX\n" - " 48*300 /\n" - "DY\n" - " 48*300 /\n" - "DZ\n" - " 16*20 16*30 16*50 / \n" - "TOPS\n" - " 16*8325 / \n" - "PORO\n" - " 48*0.15 /\n" - "EDIT\n" - "\n"; - - const char* deckData2 = - - "RUNSPEC\n" - "\n" - "DIMENS\n" - " 4 4 3 /\n" - "FIELD\n" - "GRID\n" - "MAPUNITS\n" - " METRES /\n" - "MAPAXES\n" - " 0.0 101.1 0.0 0.0 102.2 0.0 /\n" - "DX\n" - " 48*300 /\n" - "DY\n" - " 48*300 /\n" - "DZ\n" - " 16*20 16*30 16*50 / \n" - "TOPS\n" - " 16*8325 / \n" - "PORO\n" - " 48*0.15 /\n" - "EDIT\n" - "\n"; - - const char* deckData3 = - - "RUNSPEC\n" - "\n" - "DIMENS\n" - " 4 4 3 /\n" - "FIELD\n" - "GRID\n" - "MAPUNITS\n" - " FEET /\n" - "MAPAXES\n" - " 0.0 102.2 0.0 0.0 103.3 0.0 /\n" - "DX\n" - " 48*300 /\n" - "DY\n" - " 48*300 /\n" - "DZ\n" - " 16*20 16*30 16*50 / \n" - "TOPS\n" - " 16*8325 / \n" - "PORO\n" - " 48*0.15 /\n" - "EDIT\n" - "\n"; - - std::vector ref2_mapaxes = {0.0, 101.1, 0.0, 0.0, 102.2, 0.0 }; - std::vector ref3_mapaxes = {0.0, 102.2, 0.0, 0.0, 103.3, 0.0 }; - - Opm::Parser parser; - auto deck = parser.parseString( deckData) ; - - Opm::EclipseState es(deck); - Opm::UnitSystem units = es.getDeckUnitSystem(); - const auto length = ::Opm::UnitSystem::measure::length; - - const auto& grid1 = es.getInputGrid(); - - Opm::NNC nnc( deck ); - bool formatted = false; - - time_t timer; - time(&timer); - - std::string cwd = Opm::filesystem::current_path().c_str(); - std::string testDir = cwd + "/tmp_dir_" + std::to_string(timer); - - if ( Opm::filesystem::exists( testDir )) { - Opm::filesystem::remove_all(testDir); - } - - Opm::filesystem::create_directory(testDir); - - std::string fileName = testDir + "/" + "TMP.EGRID"; - grid1.save(fileName, formatted, nnc, units); - - Opm::EclIO::EclFile file1(fileName); - - // Values getZCORNed from the grid needs to be converted from SI to Field units - // and then converted from double to single precissions before comparing with values saved to - // the EGRID file - - // check coord - const std::vector coord_egrid = file1.get("COORD"); - std::vector coord_input_si = grid1.getCOORD(); - - BOOST_CHECK( coord_egrid.size() == coord_input_si.size()); - - std::vector coord_input_f; - coord_input_f.reserve(coord_input_si.size()); - - for (size_t n =0; n< coord_egrid.size(); n++) { - coord_input_f.push_back( static_cast(units.from_si(length, coord_input_si[n]))); - BOOST_CHECK_CLOSE( coord_input_f[n] , coord_egrid[n], 1e-6 ); - } - - // check zcorn - const std::vector zcorn_egrid = file1.get("ZCORN"); - std::vector zcorn_input_si = grid1.getZCORN(); - - BOOST_CHECK( zcorn_egrid.size() == zcorn_input_si.size()); - - std::vector zcorn_input_f; - zcorn_input_f.reserve(zcorn_input_si.size()); - - for (size_t n =0; n< zcorn_egrid.size(); n++) { - zcorn_input_f.push_back( static_cast(units.from_si(length, zcorn_input_si[n]))); - BOOST_CHECK_CLOSE( zcorn_input_f[n] , zcorn_egrid[n], 1e-6 ); - } - - BOOST_CHECK( file1.hasKey("GRIDUNIT")); - const std::vector gridunits = file1.get("GRIDUNIT"); - - BOOST_CHECK( gridunits[0]=="FEET"); - - // input deck do not hold MAPAXES or MAPUNITS entries. Below keywords should not be written to EGRID file - BOOST_CHECK( !file1.hasKey("MAPAXES")); - BOOST_CHECK( !file1.hasKey("MAPUNITS")); - - // this deck do not have any nnc. Below keywords should not be written to EGRID file - BOOST_CHECK( !file1.hasKey("NNCHEAD")); - BOOST_CHECK( !file1.hasKey("NNC1")); - BOOST_CHECK( !file1.hasKey("NNC2")); - - // testing deck in field units and MAPUNITS in METRES - auto deck2 = parser.parseString( deckData2) ; - - Opm::EclipseState es2(deck2); - Opm::UnitSystem units2 = es.getDeckUnitSystem(); - Opm::NNC nnc2( deck2 ); - - const auto& grid2 = es2.getInputGrid(); - - std::string fileName2 = testDir + "/" + "TMP2.FEGRID"; - - grid2.save(fileName2, true, nnc2, units); - - Opm::EclIO::EclFile file2(fileName2); - - const std::vector& test_mapunits2 = file2.get("MAPUNITS"); - BOOST_CHECK( test_mapunits2[0] == "METRES"); - - const std::vector& test_mapaxes2 = file2.get("MAPAXES"); - - BOOST_CHECK( test_mapaxes2.size() == ref2_mapaxes.size()); - - for (size_t n =0; n< ref2_mapaxes.size(); n++) { - BOOST_CHECK( ref2_mapaxes[n] == test_mapaxes2[n]); - } - - // testing deck in field units and MAPUNITS in FEET - auto deck3 = parser.parseString( deckData3) ; - - Opm::EclipseState es3(deck3); - Opm::UnitSystem units3 = es.getDeckUnitSystem(); - Opm::NNC nnc3( deck3 ); - - const auto& grid3 = es3.getInputGrid(); - - std::string fileName3 = testDir + "/" + "TMP3.FEGRID"; - - grid3.save(fileName3, true, nnc3, units3); - - Opm::EclIO::EclFile file3(fileName3); - - const std::vector& test_mapunits3 = file3.get("MAPUNITS"); - BOOST_CHECK( test_mapunits3[0] == "FEET"); - - const std::vector& test_mapaxes3 = file3.get("MAPAXES"); - - BOOST_CHECK( test_mapaxes3.size() == ref3_mapaxes.size()); - - for (size_t n =0; n< ref3_mapaxes.size(); n++) { - BOOST_CHECK( ref3_mapaxes[n] == test_mapaxes3[n]); - } - - Opm::filesystem::remove_all(testDir); -} - -BOOST_AUTO_TEST_CASE(SAVE_METRIC_UNITS) { - - const char* deckData1 = - - "RUNSPEC\n" - "\n" - "DIMENS\n" - " 4 4 3 /\n" - "GRID\n" - "MAPAXES\n" - " 0.0 45000.0 0.0 0.0 720000.0 0.0 / \n" - "MAPUNITS\n" - " METRES / \n" - "DX\n" - " 48*300 /\n" - "DY\n" - " 48*300 /\n" - "DZ\n" - " 16*20 16*30 16*50 / \n" - "TOPS\n" - " 16*8325 / \n" - "NNC\n" - " 2 2 1 2 3 2 0.95 / \n" - " 3 2 1 3 3 2 1.05 / \n" - " 4 2 1 4 3 2 1.15 / \n" - "/ \n" - "PORO\n" - " 48*0.15 /\n" - "EDIT\n" - "\n"; - - const char* deckData2 = - - "RUNSPEC\n" - "\n" - "DIMENS\n" - " 4 4 3 /\n" - "GRID\n" - "MAPAXES\n" - " 0.0 450.0 0.0 0.0 7200.0 0.0 / \n" - "MAPUNITS\n" - " FEET / \n" - "DX\n" - " 48*300 /\n" - "DY\n" - " 48*300 /\n" - "DZ\n" - " 16*20 16*30 16*50 / \n" - "TOPS\n" - " 16*8325 / \n" - "NNC\n" - " 2 2 1 2 3 2 0.95 / \n" - " 3 2 1 3 3 2 1.05 / \n" - " 4 2 1 4 3 2 1.15 / \n" - "/ \n" - "PORO\n" - " 48*0.15 /\n" - "EDIT\n" - "\n"; - - std::vector ref_mapaxes1 = { 0.0, 45000.0, 0.0, 0.0, 720000.0, 0.0 }; - std::vector ref_mapaxes2 = { 0.0, 450.0, 0.0, 0.0, 7200.0, 0.0 }; - - Opm::Parser parser; - auto deck1 = parser.parseString( deckData1) ; - - Opm::EclipseState es1(deck1); - Opm::UnitSystem units1 = es1.getDeckUnitSystem(); - const auto length = ::Opm::UnitSystem::measure::length; - - const auto& grid1 = es1.getInputGrid(); - Opm::NNC nnc( deck1 ); - - bool formatted = true; - - time_t timer; - time(&timer); - - std::string cwd = Opm::filesystem::current_path().c_str(); - std::string testDir = cwd + "/tmp_dir_" + std::to_string(timer); - - if ( Opm::filesystem::exists( testDir )) { - Opm::filesystem::remove_all(testDir); - } - - Opm::filesystem::create_directory(testDir); - - std::string fileName = testDir + "/" + "TMP.FEGRID"; - grid1.save(fileName, formatted, nnc, units1); - - Opm::EclIO::EclFile file1(fileName); - - // Values getZCORNed from the grid have same units as input deck (metric), however these needs to be - // converted from double to single precissions before comparing with values saved to the EGRID file - - // check coord - const std::vector coord_egrid = file1.get("COORD"); - std::vector coord_input_si = grid1.getCOORD(); - - BOOST_CHECK( coord_egrid.size() == coord_input_si.size()); - - std::vector coord_input_f; - coord_input_f.reserve(coord_input_si.size()); - - for (size_t n =0; n< coord_egrid.size(); n++) { - coord_input_f.push_back( static_cast(units1.from_si(length, coord_input_si[n]))); - BOOST_CHECK_CLOSE( coord_input_f[n] , coord_egrid[n], 1e-6 ); - } - - // check zcorn - const std::vector zcorn_egrid = file1.get("ZCORN"); - std::vector zcorn_input_si = grid1.getZCORN(); - - BOOST_CHECK( zcorn_egrid.size() == zcorn_input_si.size()); - - std::vector zcorn_input_f; - zcorn_input_f.reserve(zcorn_input_si.size()); - - for (size_t n =0; n< zcorn_egrid.size(); n++) { - zcorn_input_f.push_back( static_cast(units1.from_si(length, zcorn_input_si[n]))); - BOOST_CHECK_CLOSE( zcorn_input_f[n] , zcorn_egrid[n], 1e-6 ); - } - - BOOST_CHECK( file1.hasKey("GRIDUNIT")); - const std::vector gridunits = file1.get("GRIDUNIT"); - - BOOST_CHECK( gridunits[0]=="METRES"); - - BOOST_CHECK( file1.hasKey("MAPAXES")); - std::vector mapaxes = file1.get("MAPAXES"); - - for (size_t n = 0; n < 6; n++) { - BOOST_CHECK_CLOSE( mapaxes[n] , ref_mapaxes1[n], 1e-6 ); - } - - BOOST_CHECK( file1.hasKey("MAPUNITS")); - const std::vector mapunits = file1.get("MAPUNITS"); - BOOST_CHECK( gridunits[0]=="METRES"); - - BOOST_CHECK( file1.hasKey("NNCHEAD")); - const std::vector nnchead = file1.get("NNCHEAD"); - - BOOST_CHECK( nnchead[0] == static_cast(nnc.numNNC()) ); - - std::vector ref_nnc1 = { 6, 7, 8 }; - std::vector ref_nnc2 = { 26, 27, 28 }; - - BOOST_CHECK( file1.hasKey("NNC1")); - BOOST_CHECK( file1.hasKey("NNC2")); - - const std::vector nnc1 = file1.get("NNC1"); - const std::vector nnc2 = file1.get("NNC2"); - - BOOST_CHECK( nnc1.size() == nnc2.size() ); - - for (size_t n =0; n< nnc1.size(); n++) { - BOOST_CHECK( nnc1[n] == ref_nnc1[n] ); - } - - for (size_t n =0; n< nnc2.size(); n++) { - BOOST_CHECK( nnc2[n] == ref_nnc2[n] ); - } - - // testing deck in metric units with mapaxes in field units - auto deck2 = parser.parseString( deckData2) ; - - Opm::EclipseState es2(deck2); - Opm::UnitSystem units2 = es2.getDeckUnitSystem(); - - const auto& grid2 = es2.getInputGrid(); - //Opm::NNC nnc( deck2 ); - - std::string fileName2 = testDir + "/" + "TMP2.FEGRID"; - - grid2.save(fileName2, true, nnc, units2); - - Opm::EclIO::EclFile file2(fileName2); - - const std::vector& test_mapunits2 = file2.get("MAPUNITS"); - BOOST_CHECK( test_mapunits2[0] == "FEET"); - - const std::vector& test_mapaxes2 = file2.get("MAPAXES"); - - BOOST_CHECK( test_mapaxes2.size() == ref_mapaxes2.size()); - - for (size_t n =0; n< ref_mapaxes2.size(); n++) { - BOOST_CHECK( ref_mapaxes2[n] == test_mapaxes2[n]); - } - - - Opm::filesystem::remove_all(testDir); -} - -BOOST_AUTO_TEST_CASE(CalcCellDims) { - - Opm::Deck deck = BAD_CP_GRID(); - Opm::EclipseGrid grid( deck ); - - std::array dims = grid.getNXYZ(); - - size_t nCells = dims[0]*dims[1]*dims[2]; - - std::vector dz_ref = { 0.33223500E+01, 0.40973248E+01, 0.32474000E+01, 0.28723750E+01, 0.49961748E+01, 0.49961748E+01, - 0.49961748E+01, 0.49961748E+01 - }; - - std::vector dx_ref = { 0.10309320E+02, 0.70301223E+01, 0.84377403E+01, 0.85725355E+01, 0.10140956E+02, 0.89693098E+01, - 0.94102650E+01, 0.94102678E+01 - }; - - std::vector dy_ref = { 0.99226236E+01, 0.10826077E+02, 0.93370037E+01, 0.93144703E+01, 0.10008223E+02, 0.10302064E+02, - 0.97221985E+01, 0.97221985E+01 - }; - - std::vector depth_ref = { 0.10142293E+03, 0.10190942E+03, 0.10230995E+03, 0.10284644E+03, 0.10625719E+03, - 0.10660616E+03, 0.10643174E+03, 0.10678072E+03 - }; - - for (size_t n=0; n cellDims = grid.getCellDims(n); - - BOOST_CHECK_CLOSE( cellDims[0] , dx_ref[n], 1e-5 ); - BOOST_CHECK_CLOSE( cellDims[1] , dy_ref[n], 1e-5 ); - BOOST_CHECK_CLOSE( cellDims[2] , dz_ref[n], 1e-5 ); - - BOOST_CHECK_CLOSE( grid.getCellDepth(n) , depth_ref[n], 1e-5 ); - } - - for (int k = 0; k < dims[2]; k++) { - for (int j = 0; j < dims[1]; j++) { - for (int i = 0; i < dims[0]; i++) { - size_t globInd = i + j*dims[0] + k*dims[0]*dims[1]; - BOOST_CHECK_CLOSE( grid.getCellThickness(i, j, k) , dz_ref[globInd], 1e-5 ); - - std::array cellDims = grid.getCellDims(i, j, k); - - BOOST_CHECK_CLOSE( cellDims[0] , dx_ref[globInd], 1e-5 ); - BOOST_CHECK_CLOSE( cellDims[1] , dy_ref[globInd], 1e-5 ); - BOOST_CHECK_CLOSE( cellDims[2] , dz_ref[globInd], 1e-5 ); - - BOOST_CHECK_CLOSE( grid.getCellDepth(i, j, k) , depth_ref[globInd], 1e-5 ); - } - } - } -} - -BOOST_AUTO_TEST_CASE(ExportMAPAXES_TEST) { - - Opm::Deck deck1 = BAD_CP_GRID_MAPAXES(); - Opm::EclipseGrid grid1( deck1 ); - - std::vector ref_mapaxes = { 0.0, 100.0, 0.0, 0.0, 100.0, 0.0 }; - - std::vector mapaxes = grid1.getMAPAXES(); - - for (size_t n=0; n< mapaxes.size(); n++ ) { - BOOST_CHECK_EQUAL( ref_mapaxes[n] , mapaxes[n]); - } - - Opm::Deck deck2 = BAD_CP_GRID(); - Opm::EclipseGrid grid2( deck2 ); - - BOOST_CHECK( !grid1.equal( grid2 )); - - std::vector coord = grid1.getCOORD(); - std::vector zcorn = grid1.getZCORN(); - std::vector actnum = grid1.getACTNUM(); - - std::array dims = grid1.getNXYZ(); - - Opm::EclipseGrid grid3(dims, coord, zcorn, actnum.data(), mapaxes.data()); - - BOOST_CHECK( grid3.equal( grid1 )); - - mapaxes[1] = 101; - Opm::EclipseGrid grid4(dims, coord, zcorn, actnum.data(), mapaxes.data()); - - BOOST_CHECK( !grid4.equal( grid1 )); -} - -BOOST_AUTO_TEST_CASE(TESTCP_ACTNUM_UPDATE) { - const char* deckData = - - "RUNSPEC\n" - "\n" - "DIMENS\n" - " 3 2 1 /\n" - "GRID\n" - "COORD\n" - " 2000.0000 2000.0000 2000.0000 1999.9476 2000.0000 2002.9995\n" - " 2049.9924 2000.0000 2000.8726 2049.9400 2000.0000 2003.8722 \n" - " 2099.9848 2000.0000 2001.7452 2099.9324 2000.0000 2004.7448 \n" - " 2149.9772 2000.0000 2002.6179 2149.9248 2000.0000 2005.6174 \n" - " 2000.0000 2050.0000 2000.0000 1999.9476 2050.0000 2002.9995 \n" - " 2049.9924 2050.0000 2000.8726 2049.9400 2050.0000 2003.8722 \n" - " 2099.9848 2050.0000 2001.7452 2099.9324 2050.0000 2004.7448 \n" - " 2149.9772 2050.0000 2002.6179 2149.9248 2050.0000 2005.6174 \n" - " 2000.0000 2100.0000 2000.0000 1999.9476 2100.0000 2002.9995 \n" - " 2049.9924 2100.0000 2000.8726 2049.9400 2100.0000 2003.8722 \n" - " 2099.9848 2100.0000 2001.7452 2099.9324 2100.0000 2004.7448 \n" - " 2149.9772 2100.0000 2002.6179 2149.9248 2100.0000 2005.6174 / \n" - "ZCORN\n" - " 2000.0000 2000.8726 2000.8726 2001.7452 2001.7452 2002.6179 \n" - " 2000.0000 2000.8726 2000.8726 2001.7452 2001.7452 2002.6179 \n" - " 2000.0000 2000.8726 2000.8726 2001.7452 2001.7452 2002.6179 \n" - " 2000.0000 2000.8726 2000.8726 2001.7452 2001.7452 2002.6179 \n" - " 2002.9995 2003.8722 2003.8722 2004.7448 2004.7448 2005.6174 \n" - " 2002.9995 2003.8722 2003.8722 2004.7448 2004.7448 2005.6174 \n" - " 2002.9995 2003.8722 2003.8722 2004.7448 2004.7448 2005.6174 \n" - " 2002.9995 2003.8722 2003.8722 2004.7448 2004.7448 2005.6174 / \n" - "ACTNUM\n" - " 0 1 1 1 0 1 / \n" - "PORO\n" - " 6*0.15 /\n" - "EDIT\n" - "\n"; - - Opm::Parser parser; - auto deck = parser.parseString( deckData) ; - - std::vector actInDeck = {0, 1, 1, 1, 0, 1}; - std::vector newAct = {1, 0, 0, 0, 1, 0}; - - Opm::EclipseGrid grid1( deck); - Opm::EclipseGrid grid2( deck, newAct.data()); - - std::vector actGrid1 = grid1.getACTNUM(); - std::vector actGrid2 = grid2.getACTNUM(); - - BOOST_CHECK( actGrid1.size() == actGrid2.size()); - - for (size_t n=0; n< actGrid1.size(); n++) { - BOOST_CHECK_EQUAL( actGrid1[n], actInDeck[n]); - BOOST_CHECK_EQUAL( actGrid2[n], newAct[n]); - } -} - - -BOOST_AUTO_TEST_CASE(TEST_altGridConstructors) { - - const char* deckData = - - "RUNSPEC\n" - "\n" - "DIMENS\n" - " 2 2 3 /\n" - "GRID\n" - "SPECGRID\n" - " 2 2 3 1 F / \n" - "\n" - "COORD\n" - " 2000.0000 2000.0000 1497.0000 1999.9127 2000.0000 1511.9977\n" - " 2049.9924 2000.0000 1500.8726 2049.9051 2000.0000 1515.8703\n" - " 2099.9848 2000.0000 1501.7452 2099.8975 2000.0000 1516.7430 \n" - " 2000.0000 2050.0000 1497.0000 1999.9127 2050.0000 1511.9977\n" - " 2049.9924 2050.0000 1500.8726 2049.9051 2050.0000 1515.8703\n" - " 2099.9848 2050.0000 1501.7452 2099.8975 2050.0000 1516.7430\n" - " 2000.0000 2100.0000 1497.0000 1999.9127 2100.0000 1511.9977\n" - " 2049.9924 2100.0000 1500.8726 2049.9051 2100.0000 1515.8703\n" - " 2099.9848 2100.0000 1501.7452 2099.8975 2100.0000 1516.7430 /\n" - "\n" - "ZCORN\n" - " 1497.0000 1497.8726 1500.8726 1501.7452 1497.0000 1497.8726\n" - " 1500.8726 1501.7452 1497.0000 1497.8726 1500.8726 1501.7452\n" - " 1497.0000 1497.8726 1500.8726 1501.7452 1501.9992 1502.8719\n" - " 1505.8719 1506.7445 1501.9992 1502.8719 1505.8719 1506.7445\n" - " 1501.9992 1502.8719 1505.8719 1506.7445 1501.9992 1502.8719\n" - " 1505.8719 1506.7445 1501.9992 1502.8719 1505.8719 1506.7445\n" - " 1501.9992 1502.8719 1505.8719 1506.7445 1501.9992 1502.8719\n" - " 1505.8719 1506.7445 1501.9992 1502.8719 1505.8719 1506.7445\n" - " 1506.9985 1507.8711 1510.8711 1511.7437 1506.9985 1507.8711\n" - " 1510.8711 1511.7437 1506.9985 1507.8711 1510.8711 1511.7437\n" - " 1506.9985 1507.8711 1510.8711 1511.7437 1506.9985 1507.8711\n" - " 1510.8711 1511.7437 1506.9985 1507.8711 1510.8711 1511.7437\n" - " 1506.9985 1507.8711 1510.8711 1511.7437 1506.9985 1507.8711\n" - " 1510.8711 1511.7437 1511.9977 1512.8703 1515.8703 1516.7430\n" - " 1511.9977 1512.8703 1515.8703 1516.7430 1511.9977 1512.8703\n" - " 1515.8703 1516.7430 1511.9977 1512.8703 1515.8703 1516.7430 /\n" - "\n" - "ACTNUM\n" - " 1 1 1 1 1 0 1 1 1 0 1 1 /\n" - "PORO\n" - " 24*0.15 /\n" - "EDIT\n" - "\n"; - - Opm::Parser parser; - auto deck = parser.parseString( deckData) ; - - Opm::EclipseGrid grid1( deck); - - std::vector actnum = grid1.getACTNUM(); - std::vector coord = grid1.getCOORD(); - std::vector zcorn = grid1.getZCORN(); - - Opm::EclipseGrid grid2( grid1 , zcorn.data(), actnum); - //Opm::EclipseGrid grid2( grid1 , zcorn, actnum); - - BOOST_CHECK( grid1.equal( grid2) ); - - std::vector emptyZcorn; - - Opm::EclipseGrid grid3( grid1 , emptyZcorn.data(), actnum); - BOOST_CHECK( grid1.equal( grid3) ); -} - -static Opm::Deck BAD_CP_GRID_ACTNUM() { - const char* deckData = - "RUNSPEC\n" - "\n" - "DIMENS\n" - "2 2 2 /\n" - "GRID\n" - "SPECGRID\n" - " 2 2 2 1 F /\n" - "COORD\n" - " 2002.0000 2002.0000 100.0000 1999.8255 1999.9127 108.4935\n" - " 2011.9939 2000.0000 100.3490 2009.8194 1999.9127 108.8425\n" - " 2015.9878 2000.0000 100.6980 2019.8133 1999.9127 109.1915\n" - " 2000.0000 2009.9985 100.1745 1999.8255 2009.9112 108.6681 \n" - " 2010.9939 2011.9985 100.5235 2009.8194 2009.9112 109.0170\n" - " 2019.9878 2009.9985 100.8725 2019.8133 2009.9112 109.3660\n" - " 2005.0000 2019.9970 100.3490 1999.8255 2019.9097 108.8426\n" - " 2009.9939 2019.9970 100.6980 2009.8194 2019.9097 109.1916\n" - " 2016.9878 2019.9970 101.0470 2019.8133 2019.9097 109.5406 /\n" - "ZCORN\n" - " 98.0000 100.3490 97.3490 100.6980 100.1745 100.5235\n" - " 100.5235 100.8725 100.1745 100.5235 100.5235 100.8725\n" - " 100.3490 101.6980 101.6980 102.5470 102.4973 102.1463\n" - " 103.2463 104.1953 103.6719 104.0209 104.0209 104.3698\n" - " 103.6719 104.0209 104.0209 104.3698 103.8464 104.1954\n" - " 104.1954 104.5444 103.4973 103.8463 103.8463 104.1953\n" - " 103.6719 104.0209 104.0209 104.3698 103.6719 104.0209\n" - " 104.0209 104.3698 103.8464 104.1954 104.1954 104.5444\n" - " 108.4935 108.8425 108.8425 109.1915 108.6681 109.0170\n" - " 109.0170 109.3660 108.6681 109.0170 109.0170 109.3660\n" - " 108.8426 109.1916 109.1916 109.5406 /\n" - "\n" - "ACTNUM\n" - " 1 1 1 1 0 1 0 1 /\n" - "PORO\n" - " 8*0.15 /\n" - "EDIT\n"; - - Opm::Parser parser; - return parser.parseString( deckData ); -} - -BOOST_AUTO_TEST_CASE(TEST_getCellCenters) { - - Opm::Deck deck1 = BAD_CP_GRID_ACTNUM(); - Opm::EclipseGrid grid1( deck1 ); - - std::vector> ref_centers_prev = { - { 2.006104082026e+03, 2.005869733884e+03, 1.014229250000e+02 }, - { 2.014871600974e+03, 2.005382958337e+03, 1.019094125000e+02 }, - { 2.006149627699e+03, 2.015375548018e+03, 1.023099500000e+02 }, - { 2.014617670881e+03, 2.015373620907e+03, 1.028464375000e+02 }, - { 2.014794142285e+03, 2.005084683036e+03, 1.066061625000e+02 }, - { 2.014720614821e+03, 2.015083182885e+03, 1.067807125000e+02 } - }; - - std::vector> ref_dims_prev = { - { 1.030932076324e+01, 9.922624077310e+00, 3.322350000000e+00 }, - { 7.030122275667e+00, 1.082607766242e+01, 4.097325000000e+00 }, - { 8.437740561450e+00, 9.337003646693e+00, 3.247400000000e+00 }, - { 8.572535163904e+00, 9.314470420138e+00, 2.872375000000e+00 }, - { 8.969310273018e+00, 1.030206365401e+01, 4.996175000000e+00 }, - { 9.410267880374e+00, 9.722198202980e+00, 4.996175000000e+00 } - }; - - std::vector actMap = grid1.getActiveMap(); - - int n = 0; - for (auto ind : actMap) { - std::array cellC = grid1.getCellCenter(ind); - std::array cellD = grid1.getCellDims(ind); - - for (size_t i = 0; i < 3; i++) { - BOOST_CHECK_CLOSE( ref_centers_prev[n][i], cellC[i], 1e-10); - BOOST_CHECK_CLOSE( ref_dims_prev[n][i], cellD[i], 1e-10); - } - - n++; - } -} - -BOOST_AUTO_TEST_CASE(LoadFromBinary) { - BOOST_CHECK_THROW(Opm::EclipseGrid( "No/does/not/exist" ) , std::invalid_argument); -} - - -BOOST_AUTO_TEST_CASE(TEST_constructFromEgrid) { - - const char* deckData = - - "RUNSPEC\n" - "\n" - "DIMENS\n" - " 10 10 3 /\n" - "FIELD\n" - "GRID\n" - "DX\n" - " 300*1000 /\n" - "DY\n" - " 300*1000 /\n" - "DZ\n" - " 100*20 100*30 100*50 / \n" - "TOPS\n" - " 100*8325 / \n" - "ACTNUM\n" - " 44*1 3*0 7*1 3*0 243*1/\n" - "PORO\n" - " 300*0.15 /\n" - "EDIT\n" - "\n"; - - Opm::Parser parser; - auto deck = parser.parseString( deckData) ; - - Opm::EclipseGrid grid1( deck); - Opm::EclipseGrid grid2( "SPE1CASE1.EGRID"); - - // compare actnum - std::vector actGrid1 = grid1.getACTNUM(); - std::vector actGrid2 = grid2.getACTNUM(); - - BOOST_CHECK( actGrid1.size() == actGrid2.size() ); - - for (size_t n= 0; n< actGrid1.size(); n++) { - BOOST_CHECK( actGrid1[n] == actGrid2[n] ); - } - - // compare coord - std::vector coordGrid1 = grid1.getCOORD(); - std::vector coordGrid2 = grid2.getCOORD(); - - BOOST_CHECK( coordGrid1.size() == coordGrid2.size() ); - - std::vector zcornGrid1 = grid1.getZCORN(); - std::vector zcornGrid2 = grid2.getZCORN(); - - BOOST_CHECK( zcornGrid1.size() == zcornGrid2.size() ); - - for (size_t n = 0; n < zcornGrid1.size(); n++){ - BOOST_CHECK_CLOSE( zcornGrid1[n], zcornGrid2[n], 1.0e-6 ); - } - - BOOST_CHECK( grid1.getCartesianSize() == grid2.getCartesianSize() ); - - for (size_t n=0; n < grid1.getCartesianSize(); n++){ - BOOST_CHECK_CLOSE( grid1.getCellVolume(n), grid2.getCellVolume(n), 1e-6); - - } -} - - - -BOOST_AUTO_TEST_CASE(TEST_GDFILE_1) { - - const char* deckData1 = - "RUNSPEC\n" - "DIMENS\n" - "1 1 2 /\n" - "GRID\n" - "COORD\n" - "10.0000 10.0000 2000.0000 9.8255 10.0000 2014.9977\n" - "109.9848 10.0000 2001.7452 109.8102 10.0000 2016.7430\n" - "10.0000 110.0000 2000.0000 9.8255 110.0000 2014.9977\n" - "109.9848 110.0000 2001.7452 109.8102 110.0000 2016.7430 /\n" - "ZCORN\n" - "2000.0000 2001.7452 2000.0000 2001.7452 2004.9992 2006.7445\n" - "2004.9992 2006.7445 2004.9992 2006.7445 2004.9992 2006.7445\n" - "2014.9977 2016.7430 2014.9977 2016.7430 /\n" - "PORO\n" - " 2*0.15 /\n"; - - const char* deckData2 = - "RUNSPEC\n" - "DIMENS\n" - "1 1 2 /\n" - "GRID\n" - "GDFILE\n" - " 'BAD_CP_M.EGRID' /\n" - "COORD\n" - "10.0000 10.0000 2000.0000 9.8255 10.0000 2014.9977\n" - "109.9848 10.0000 2001.7452 109.8102 10.0000 2016.7430\n" - "10.0000 110.0000 2000.0000 9.8255 110.0000 2014.9977\n" - "109.9848 110.0000 2001.7452 109.8102 110.0000 2016.7430 /\n" - "PORO\n" - " 2*0.15 /\n"; - - const char* deckData3 = - "RUNSPEC\n" - "DIMENS\n" - "1 1 2 /\n" - "GRID\n" - "GDFILE\n" - " 'BAD_CP_M.EGRID' /\n" - "ZCORN\n" - "2000.0000 2001.7452 2000.0000 2001.7452 2004.9992 2006.7445\n" - "2004.9992 2006.7445 2004.9992 2006.7445 2004.9992 2006.7445\n" - "2014.9977 2016.7430 2014.9977 2016.7430 /\n" - "PORO\n" - " 2*0.15 /\n"; - - - Opm::Parser parser; - auto deck1 = parser.parseString( deckData1) ; - auto deck2 = parser.parseString( deckData2) ; - auto deck3 = parser.parseString( deckData3) ; - - BOOST_CHECK_NO_THROW( Opm::EclipseGrid grid1(deck1) ); - BOOST_CHECK_THROW(Opm::EclipseGrid grid2(deck2), std::invalid_argument); - BOOST_CHECK_THROW(Opm::EclipseGrid grid3(deck3), std::invalid_argument); -} - - -BOOST_AUTO_TEST_CASE(TEST_GDFILE_2) { - - const char* deckData1 = - "RUNSPEC\n" - "\n" - "DIMENS\n" - "2 2 2 /\n" - "GRID\n" - "SPECGRID\n" - " 2 2 2 1 F /\n" - "COORD\n" - " 2002.0000 2002.0000 100.0000 1999.8255 1999.9127 108.4935\n" - " 2011.9939 2000.0000 100.3490 2009.8194 1999.9127 108.8425\n" - " 2015.9878 2000.0000 100.6980 2019.8133 1999.9127 109.1915\n" - " 2000.0000 2009.9985 100.1745 1999.8255 2009.9112 108.6681 \n" - " 2010.9939 2011.9985 100.5235 2009.8194 2009.9112 109.0170\n" - " 2019.9878 2009.9985 100.8725 2019.8133 2009.9112 109.3660\n" - " 2005.0000 2019.9970 100.3490 1999.8255 2019.9097 108.8426\n" - " 2009.9939 2019.9970 100.6980 2009.8194 2019.9097 109.1916\n" - " 2016.9878 2019.9970 101.0470 2019.8133 2019.9097 109.5406 /\n" - "ZCORN\n" - " 98.0000 100.3490 97.3490 100.6980 100.1745 100.5235\n" - " 100.5235 100.8725 100.1745 100.5235 100.5235 100.8725\n" - " 100.3490 101.6980 101.6980 102.5470 102.4973 102.1463\n" - " 103.2463 104.1953 103.6719 104.0209 104.0209 104.3698\n" - " 103.6719 104.0209 104.0209 104.3698 103.8464 104.1954\n" - " 104.1954 104.5444 103.4973 103.8463 103.8463 104.1953\n" - " 103.6719 104.0209 104.0209 104.3698 103.6719 104.0209\n" - " 104.0209 104.3698 103.8464 104.1954 104.1954 104.5444\n" - " 108.4935 108.8425 108.8425 109.1915 108.6681 109.0170\n" - " 109.0170 109.3660 108.6681 109.0170 109.0170 109.3660\n" - " 108.8426 109.1916 109.1916 109.5406 /\n" - "\n" - "PORO\n" - " 8*0.15 /\n" - "EDIT\n"; - - const char* deckData1a = - "RUNSPEC\n" - "\n" - "DIMENS\n" - "2 2 2 /\n" - "GRID\n" - "SPECGRID\n" - " 2 2 2 1 F /\n" - "COORD\n" - " 2002.0000 2002.0000 100.0000 1999.8255 1999.9127 108.4935\n" - " 2011.9939 2000.0000 100.3490 2009.8194 1999.9127 108.8425\n" - " 2015.9878 2000.0000 100.6980 2019.8133 1999.9127 109.1915\n" - " 2000.0000 2009.9985 100.1745 1999.8255 2009.9112 108.6681 \n" - " 2010.9939 2011.9985 100.5235 2009.8194 2009.9112 109.0170\n" - " 2019.9878 2009.9985 100.8725 2019.8133 2009.9112 109.3660\n" - " 2005.0000 2019.9970 100.3490 1999.8255 2019.9097 108.8426\n" - " 2009.9939 2019.9970 100.6980 2009.8194 2019.9097 109.1916\n" - " 2016.9878 2019.9970 101.0470 2019.8133 2019.9097 109.5406 /\n" - "ZCORN\n" - " 98.0000 100.3490 97.3490 100.6980 100.1745 100.5235\n" - " 100.5235 100.8725 100.1745 100.5235 100.5235 100.8725\n" - " 100.3490 101.6980 101.6980 102.5470 102.4973 102.1463\n" - " 103.2463 104.1953 103.6719 104.0209 104.0209 104.3698\n" - " 103.6719 104.0209 104.0209 104.3698 103.8464 104.1954\n" - " 104.1954 104.5444 103.4973 103.8463 103.8463 104.1953\n" - " 103.6719 104.0209 104.0209 104.3698 103.6719 104.0209\n" - " 104.0209 104.3698 103.8464 104.1954 104.1954 104.5444\n" - " 108.4935 108.8425 108.8425 109.1915 108.6681 109.0170\n" - " 109.0170 109.3660 108.6681 109.0170 109.0170 109.3660\n" - " 108.8426 109.1916 109.1916 109.5406 /\n" - "\n" - "ACTNUM\n" - " 1 1 1 1 0 1 0 1 /\n" - "PORO\n" - " 8*0.15 /\n" - "EDIT\n"; - - const char* deckData1b = - "RUNSPEC\n" - "\n" - "DIMENS\n" - "2 2 2 /\n" - "FIELD\n" - "GRID\n" - "MAPUNITS\n" - " METRES /\n" - "MAPAXES\n" - " 0. 100. 0. 0. 100. 0. /\n" - "SPECGRID\n" - " 2 2 2 1 F /\n" - "COORD\n" - " 2002.0000 2002.0000 100.0000 1999.8255 1999.9127 108.4935\n" - " 2011.9939 2000.0000 100.3490 2009.8194 1999.9127 108.8425\n" - " 2015.9878 2000.0000 100.6980 2019.8133 1999.9127 109.1915\n" - " 2000.0000 2009.9985 100.1745 1999.8255 2009.9112 108.6681 \n" - " 2010.9939 2011.9985 100.5235 2009.8194 2009.9112 109.0170\n" - " 2019.9878 2009.9985 100.8725 2019.8133 2009.9112 109.3660\n" - " 2005.0000 2019.9970 100.3490 1999.8255 2019.9097 108.8426\n" - " 2009.9939 2019.9970 100.6980 2009.8194 2019.9097 109.1916\n" - " 2016.9878 2019.9970 101.0470 2019.8133 2019.9097 109.5406 /\n" - "ZCORN\n" - " 98.0000 100.3490 97.3490 100.6980 100.1745 100.5235\n" - " 100.5235 100.8725 100.1745 100.5235 100.5235 100.8725\n" - " 100.3490 101.6980 101.6980 102.5470 102.4973 102.1463\n" - " 103.2463 104.1953 103.6719 104.0209 104.0209 104.3698\n" - " 103.6719 104.0209 104.0209 104.3698 103.8464 104.1954\n" - " 104.1954 104.5444 103.4973 103.8463 103.8463 104.1953\n" - " 103.6719 104.0209 104.0209 104.3698 103.6719 104.0209\n" - " 104.0209 104.3698 103.8464 104.1954 104.1954 104.5444\n" - " 108.4935 108.8425 108.8425 109.1915 108.6681 109.0170\n" - " 109.0170 109.3660 108.6681 109.0170 109.0170 109.3660\n" - " 108.8426 109.1916 109.1916 109.5406 /\n" - "\n" - "ACTNUM\n" - " 1 1 1 1 0 1 0 1 /\n" - "PORO\n" - " 8*0.15 /\n" - "EDIT\n"; - - const char* deckData2 = - "RUNSPEC\n" - "\n" - "DIMENS\n" - "2 2 2 /\n" - "GRID\n" - "GDFILE\n" - " 'BAD_CP_M.EGRID' /\n" - "EDIT\n"; - - const char* deckData3a = - "RUNSPEC\n" - "\n" - "DIMENS\n" - "2 2 2 /\n" - "GRID\n" - "ACTNUM\n" - " 1 0 1 0 1 1 1 1 /\n" - "MAPUNITS\n" - " FEET /\n" - "MAPAXES\n" - " 0. 200. 0. 0. 200. 0. /\n" - "GDFILE\n" - " 'BAD_CP_M.EGRID' /\n" - "EDIT\n"; - - const char* deckData3b = - "RUNSPEC\n" - "\n" - "DIMENS\n" - "2 2 2 /\n" - "GRID\n" - "MAPUNITS\n" - " FEET /\n" - "MAPAXES\n" - " 0. 200. 0. 0. 200. 0. /\n" - "GDFILE\n" - " 'BAD_CP_F.EGRID' /\n" - "ACTNUM\n" - " 1 0 1 0 1 1 1 1 /\n" - "EDIT\n"; - - const char* deckData3c = - "RUNSPEC\n" - "\n" - "DIMENS\n" - "2 2 2 /\n" - "GRID\n" - "GDFILE\n" - " 'BAD_CP_F.EGRID' /\n" - "MAPUNITS\n" - " FEET /\n" - "MAPAXES\n" - " 0. 200. 0. 0. 200. 0. /\n" - "ACTNUM\n" - " 1 0 1 0 1 1 1 1 /\n" - "EDIT\n"; - - Opm::Parser parser; - - std::vector ref_act_egrid = {1, 1, 1, 1, 0, 1, 0, 1}; - std::vector ref_act_deck3 = {1, 0, 1, 0, 1, 1, 1, 1}; - - std::vector ref_mapaxes_egrid = { 0.0, 100.0, 0.0, 0.0, 100.0, 0.0 }; - std::vector ref_mapaxes_deck = { 0.0, 200.0, 0.0, 0.0, 200.0, 0.0 }; - - - // egrid file in si units, no conversion requied by grid constructor - std::vector refDepthGrid3a = {101.42292, 101.90941, 102.30995, 102.84644, 106.25719, 106.60616, 106.43174, 106.78071 }; - - // egrid file in field units, depths converted to SI units when loaded by grid constructor - std::vector refDepthGrid3b = {30.913707, 31.061988, 31.184072, 31.347594, 32.38719, 32.493558, 32.440393 }; - - auto deck1a = parser.parseString( deckData1a) ; - - Opm::EclipseState es1a( deck1a ); - Opm::UnitSystem units1a = es1a.getDeckUnitSystem(); - - const auto& grid1a = es1a.getInputGrid(); - Opm::NNC nnc( deck1a ); - - grid1a.save("BAD_CP_M.EGRID", false, nnc, units1a); - - auto deck1b = parser.parseString( deckData1b) ; - Opm::EclipseState es1b( deck1b ); - Opm::UnitSystem units1b = es1b.getDeckUnitSystem(); - const auto& grid1b = es1b.getInputGrid(); - - grid1b.save("BAD_CP_F.EGRID", false, nnc, units1b); - - auto deck1 = parser.parseString( deckData1) ; - Opm::EclipseGrid grid1( deck1); - - Opm::EclIO::EclFile file1("BAD_CP_M.EGRID"); - - // actnum not defined in deck. keyword GDFILE not present in the DECK - // check that coord and zcorn from deck-grid identical to coord and zcorn - // from egrid - grid - - std::vector coordGrid1 = grid1.getCOORD(); - std::vector zcornGrid1 = grid1.getZCORN(); - std::vector coordGrid1_f(coordGrid1.begin(), coordGrid1.end() ); - std::vector zcornGrid1_f(zcornGrid1.begin(), zcornGrid1.end() ); - - const std::vector coord_egrid_f = file1.get("COORD"); - const std::vector zcorn_egrid_f = file1.get("ZCORN"); - - BOOST_CHECK( coordGrid1.size() == coord_egrid_f.size() ); - BOOST_CHECK( zcornGrid1.size() == zcorn_egrid_f.size() ); - - for (size_t n = 0; n < coordGrid1.size(); n++){ - BOOST_CHECK( coordGrid1_f[n] == coord_egrid_f[n] ); - } - - for (size_t n = 0; n < zcornGrid1.size(); n++){ - BOOST_CHECK( zcornGrid1_f[n] == zcorn_egrid_f[n] ); - } - - // all cells are active, since ACTNUM not present - std::vector actGrid1 = grid1.getACTNUM(); - for (size_t n = 0; n < actGrid1.size(); n++){ - BOOST_CHECK( actGrid1[n] == 1 ); - } - - BOOST_CHECK( grid1.getMAPUNITS() == "" ); - - std::vector mapaxes = grid1.getMAPAXES(); - BOOST_CHECK( mapaxes.size() == 0 ); - - - auto deck2 = parser.parseString( deckData2) ; - Opm::EclipseGrid grid2( deck2); - - std::vector actGrid2 = grid2.getACTNUM(); - - // check that actnum is reset from gdfile - - for (size_t n = 0; n < actGrid2.size(); n++){ - BOOST_CHECK( actGrid2[n] == ref_act_egrid[n] ); - } - - BOOST_CHECK( grid2.getMAPUNITS() == "" ); - - mapaxes = grid2.getMAPAXES(); - BOOST_CHECK( mapaxes.size() == 0 ); - - - auto deck3a = parser.parseString( deckData3a) ; - Opm::EclipseGrid grid3a( deck3a); - - // mapunits and mapaxes define in deck (only) - - BOOST_CHECK( grid3a.getMAPUNITS() == "FEET" ); - - mapaxes = grid3a.getMAPAXES(); - BOOST_CHECK( mapaxes.size() == 6 ); - - for (size_t n = 0; n < mapaxes.size(); n++){ - BOOST_CHECK( mapaxes[n] == ref_mapaxes_deck[n] ); - } - - std::vector actGrid3 = grid3a.getACTNUM(); - - // check that actnum is reset from gdfile, ACTNUM input in deck - // but before keyword GDFILE - - for (size_t n = 0; n < actGrid3.size(); n++){ - BOOST_CHECK( actGrid3[n] == ref_act_egrid[n] ); - } - - // check that depth values are in SI units - for (size_t n = 0; n < refDepthGrid3a.size(); n++){ - BOOST_CHECK_CLOSE( grid3a.getCellDepth(n), refDepthGrid3a[n], 1e-3 ); - } - - auto deck3b = parser.parseString( deckData3b) ; - Opm::EclipseGrid grid3b( deck3b); - - // mapunits and mapaxes both in egrid and deck. Uses properties - // from the egrid keyword gdfile input after MAPUNITS and MAPAXES - - BOOST_CHECK( grid3b.getMAPUNITS() == "METRES" ); - - mapaxes = grid3b.getMAPAXES(); - BOOST_CHECK( mapaxes.size() == 6 ); - - for (size_t n = 0; n < mapaxes.size(); n++){ - BOOST_CHECK( mapaxes[n] == ref_mapaxes_egrid[n] ); - } - - actGrid3 = grid3b.getACTNUM(); - - // check that actnum is reset from deck since input after keyword GDFILE - for (size_t n = 0; n < actGrid3.size(); n++){ - BOOST_CHECK( actGrid3[n] == ref_act_deck3[n] ); - } - - // check that depth values are converted from Field to SI units - for (size_t n = 0; n < refDepthGrid3b.size(); n++){ - BOOST_CHECK_CLOSE( grid3b.getCellDepth(n), refDepthGrid3b[n], 1e-3 ); - } - - // mapunits and mapaxes both in egrid and deck. Uses properties - // from the deck sinze these are input after GDfile - - auto deck3c = parser.parseString( deckData3c) ; - Opm::EclipseGrid grid3c( deck3c); - - BOOST_CHECK( grid3c.getMAPUNITS() == "FEET" ); - - mapaxes = grid3c.getMAPAXES(); - BOOST_CHECK( mapaxes.size() == 6 ); - - for (size_t n = 0; n < mapaxes.size(); n++){ - BOOST_CHECK( mapaxes[n] == ref_mapaxes_deck[n] ); - } -} - -BOOST_AUTO_TEST_CASE(TEST_COLLAPSED_CELL) { - Opm::EclipseGrid grid(2,2,2,1,1,0); - for (std::size_t g = 0; g < grid.getCartesianSize(); g++) - BOOST_CHECK_EQUAL(grid.getCellVolume(g), 0); -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/EclipseStateTests.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/EclipseStateTests.cpp deleted file mode 100644 index e7413c687d..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/EclipseStateTests.cpp +++ /dev/null @@ -1,689 +0,0 @@ -/* -Copyright 2013 Statoil ASA. - -This file is part of the Open Porous Media project (OPM). - -OPM is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -OPM is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with OPM. If not, see . -*/ - -#include -#include -#include - -#define BOOST_TEST_MODULE EclipseStateTests - -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -using namespace Opm; - -inline std::string prepath() { - return boost::unit_test::framework::master_test_suite().argv[1]; -} - -static Deck createDeckTOP() { - const char *deckData = -"RUNSPEC\n" -"\n" -"DIMENS\n" -" 10 10 10 /\n" -"GRID\n" -"DX\n" -"1000*0.25 /\n" -"DYV\n" -"10*0.25 /\n" -"DZ\n" -"1000*0.25 /\n" -"TOPS\n" -"1000*0.25 /\n" -"BOX\n" -"1 10 1 10 1 1 /\n" -"PORO \n" -"100*0.10 /\n" -"PERMX \n" -"100*0.25 /\n" -"ENDBOX\n" -"EDIT\n" -"OIL\n" -"\n" -"GAS\n" -"\n" -"TITLE\n" -"The title\n" -"\n" -"START\n" -"8 MAR 1998 /\n" -"\n" -"PROPS\n" -"REGIONS\n" -"SWAT\n" -"1000*1 /\n" -"SATNUM\n" -"1000*2 /\n" -"\n"; - - Parser parser; - return parser.parseString( deckData ); -} - -BOOST_AUTO_TEST_CASE(GetPOROTOPBased) { - auto deck = createDeckTOP(); - EclipseState state(deck ); - const auto& fp = state.fieldProps(); - - const auto& poro = fp.get_double( "PORO" ); - const auto& permx = fp.get_double( "PERMX" ); - - for (size_t i=0; i < poro.size(); i++) { - BOOST_CHECK_EQUAL( 0.10 , poro[i]); - BOOST_CHECK_EQUAL( 0.25 * Metric::Permeability , permx[i]); - } -} - -static Deck createDeck() { -const char *deckData = -"RUNSPEC\n" -"\n" -"DIMENS\n" -" 10 10 10 /\n" -"GRID\n" -"DX\n" -"1000*0.25 /\n" -"DY\n" -"1000*0.25 /\n" -"DZ\n" -"1000*0.25 /\n" -"TOPS\n" -"100*0.25 /\n" -"FAULTS \n" -" 'F1' 1 1 1 4 1 4 'X' / \n" -" 'F2' 5 5 1 4 1 4 'X-' / \n" -"/\n" -"MULTFLT \n" -" 'F1' 0.50 / \n" -" 'F2' 0.50 / \n" -"/\n" -"PORO\n" -" 1000*0.15 /" -"EDIT\n" -"MULTFLT /\n" -" 'F2' 0.25 / \n" -"/\n" -"OIL\n" -"\n" -"GAS\n" -"\n" -"TITLE\n" -"The title\n" -"\n" -"START\n" -"8 MAR 1998 /\n" -"\n" -"PROPS\n" -"REGIONS\n" -"SWAT\n" -"1000*1 /\n" -"SATNUM\n" -"1000*2 /\n" -"\n"; - - Parser parser; - return parser.parseString( deckData ); -} - - -static Deck createDeckNoFaults() { -const char *deckData = -"RUNSPEC\n" -"\n" -"DIMENS\n" -" 10 10 10 /\n" -"GRID\n" -"DX\n" -"1000*0.25 /\n" -"DY\n" -"1000*0.25 /\n" -"DZ\n" -"1000*0.25 /\n" -"TOPS\n" -"100*0.25 /\n" -"PORO\n" -" 1000*0.15 /" -"PROPS\n" -"-- multiply one layer for each face\n" -"MULTX\n" -" 100*1 100*10 800*1 /\n" -"MULTX-\n" -" 200*1 100*11 700*1 /\n" -"MULTY\n" -" 300*1 100*12 600*1 /\n" -"MULTY-\n" -" 400*1 100*13 500*1 /\n" -"MULTZ\n" -" 500*1 100*14 400*1 /\n" -"MULTZ-\n" -" 600*1 100*15 300*1 /\n" -"\n"; - - Parser parser; - return parser.parseString( deckData ); -} - -BOOST_AUTO_TEST_CASE(CreateSchedule) { - auto deck = createDeck(); - auto python = std::make_shared(); - EclipseState state(deck); - Schedule schedule(deck, state, python); - BOOST_CHECK_EQUAL(schedule.getStartTime(), TimeMap::mkdate( 1998 , 3 , 8)); -} - - - -static Deck createDeckSimConfig() { -const std::string& inputStr = "RUNSPEC\n" - "EQLOPTS\n" - "THPRES /\n " - "DIMENS\n" - "10 3 4 /\n" - "\n" - "GRID\n" - "DX\n" - "120*0.25 /\n" - "DY\n" - "120*0.25 /\n" - "DZ\n" - "120*0.25 /\n" - "TOPS\n" - "30*0.25 /\n" - "PORO\n" - " 120*0.15/ \n" - "REGIONS\n" - "EQLNUM\n" - "10*1 10*2 100*3 /\n " - "\n" - "SOLUTION\n" - "THPRES\n" - "1 2 12.0/\n" - "1 3 5.0/\n" - "2 3 7.0/\n" - "/\n" - "\n"; - - - Parser parser; - return parser.parseString( inputStr ); -} - -BOOST_AUTO_TEST_CASE(CreateSimulationConfig) { - - auto deck = createDeckSimConfig(); - EclipseState state(deck); - const auto& simConf = state.getSimulationConfig(); - - BOOST_CHECK(simConf.useThresholdPressure()); - BOOST_CHECK_EQUAL(simConf.getThresholdPressure().size(), 3); -} - -BOOST_AUTO_TEST_CASE(PhasesCorrect) { - auto deck = createDeck(); - EclipseState state( deck ); - const auto& phases = state.runspec().phases(); - BOOST_CHECK( phases.active( Phase::OIL ) ); - BOOST_CHECK( phases.active( Phase::GAS ) ); - BOOST_CHECK( !phases.active( Phase::WATER ) ); -} - -BOOST_AUTO_TEST_CASE(TitleCorrect) { - auto deck = createDeck(); - EclipseState state( deck ); - - BOOST_CHECK_EQUAL( state.getTitle(), "The title" ); -} - -BOOST_AUTO_TEST_CASE(IntProperties) { - auto deck = createDeck(); - EclipseState state( deck ); - - BOOST_CHECK_EQUAL( false, state.fieldProps().supported( "NONO" ) ); - BOOST_CHECK_EQUAL( true, state.fieldProps().supported( "SATNUM" ) ); - BOOST_CHECK_EQUAL( true, state.fieldProps().has_int( "SATNUM" ) ); -} - - -BOOST_AUTO_TEST_CASE(GetProperty) { - auto deck = createDeck(); - EclipseState state(deck); - - const auto& satnum = state.fieldProps().get_global_int("SATNUM"); - BOOST_CHECK_EQUAL(1000U , satnum.size() ); - for (size_t i=0; i < satnum.size(); i++) - BOOST_CHECK_EQUAL( 2 , satnum[i]); -} - -BOOST_AUTO_TEST_CASE(GetTransMult) { - auto deck = createDeck(); - EclipseState state( deck ); - const auto& transMult = state.getTransMult(); - - BOOST_CHECK_EQUAL( 1.0, transMult.getMultiplier( 1, 0, 0, FaceDir::XPlus ) ); - BOOST_CHECK_THROW( transMult.getMultiplier( 1000, FaceDir::XPlus ), std::invalid_argument ); -} - -BOOST_AUTO_TEST_CASE(GetFaults) { - auto deck = createDeck(); - EclipseState state( deck ); - const auto& faults = state.getFaults(); - - BOOST_CHECK( faults.hasFault( "F1" ) ); - BOOST_CHECK( faults.hasFault( "F2" ) ); - - const auto& F1 = faults.getFault( "F1" ); - const auto& F2 = faults.getFault( "F2" ); - - BOOST_CHECK_EQUAL( 0.50, F1.getTransMult() ); - BOOST_CHECK_EQUAL( 0.25, F2.getTransMult() ); - - const auto& transMult = state.getTransMult(); - BOOST_CHECK_EQUAL( transMult.getMultiplier( 0, 0, 0, FaceDir::XPlus ), 0.50 ); - BOOST_CHECK_EQUAL( transMult.getMultiplier( 4, 3, 0, FaceDir::XMinus ), 0.25 ); - BOOST_CHECK_EQUAL( transMult.getMultiplier( 4, 3, 0, FaceDir::ZPlus ), 1.00 ); -} - - -BOOST_AUTO_TEST_CASE(FaceTransMults) { - auto deck = createDeckNoFaults(); - EclipseState state(deck); - const auto& transMult = state.getTransMult(); - - for (int i = 0; i < 10; ++ i) { - for (int j = 0; j < 10; ++ j) { - for (int k = 0; k < 10; ++ k) { - if (k == 1) - BOOST_CHECK_EQUAL(transMult.getMultiplier(i, j, k, FaceDir::XPlus), 10.0); - else - BOOST_CHECK_EQUAL(transMult.getMultiplier(i, j, k, FaceDir::XPlus), 1.0); - - if (k == 2) - BOOST_CHECK_EQUAL(transMult.getMultiplier(i, j, k, FaceDir::XMinus), 11.0); - else - BOOST_CHECK_EQUAL(transMult.getMultiplier(i, j, k, FaceDir::XMinus), 1.0); - - if (k == 3) - BOOST_CHECK_EQUAL(transMult.getMultiplier(i, j, k, FaceDir::YPlus), 12.0); - else - BOOST_CHECK_EQUAL(transMult.getMultiplier(i, j, k, FaceDir::YPlus), 1.0); - - if (k == 4) - BOOST_CHECK_EQUAL(transMult.getMultiplier(i, j, k, FaceDir::YMinus), 13.0); - else - BOOST_CHECK_EQUAL(transMult.getMultiplier(i, j, k, FaceDir::YMinus), 1.0); - - if (k == 5) - BOOST_CHECK_EQUAL(transMult.getMultiplier(i, j, k, FaceDir::ZPlus), 14.0); - else - BOOST_CHECK_EQUAL(transMult.getMultiplier(i, j, k, FaceDir::ZPlus), 1.0); - - if (k == 6) - BOOST_CHECK_EQUAL(transMult.getMultiplier(i, j, k, FaceDir::ZMinus), 15.0); - else - BOOST_CHECK_EQUAL(transMult.getMultiplier(i, j, k, FaceDir::ZMinus), 1.0); - } - } - } -} - - -static Deck createDeckNoGridOpts() { - const char *deckData = - "RUNSPEC\n" - "\n" - "DIMENS\n" - " 10 10 10 /\n" - "GRID\n" - "DX\n" - "1000*0.25 /\n" - "DY\n" - "1000*0.25 /\n" - "DZ\n" - "1000*0.25 /\n" - "TOPS\n" - "100*0.25 /\n" - "PORO\n" - " 1000*0.15 /\n" - "FLUXNUM\n" - " 1000*1 /\n" - "MULTNUM\n" - " 1000*1 /\n"; - - Parser parser; - return parser.parseString(deckData) ; -} - - -static Deck createDeckWithGridOpts() { - const char *deckData = - "RUNSPEC\n" - "GRIDOPTS\n" - " 'YES' 10 /" - "\n" - "DIMENS\n" - " 10 10 10 /\n" - "GRID\n" - "DX\n" - "1000*0.25 /\n" - "DY\n" - "1000*0.25 /\n" - "DZ\n" - "1000*0.25 /\n" - "TOPS\n" - "100*0.25 /\n" - "PORO\n" - " 1000*0.15 /\n" - "FLUXNUM\n" - " 1000*1 /\n" - "MULTNUM\n" - " 1000*1 /\n"; - - Parser parser; - return parser.parseString( deckData ); -} - - -BOOST_AUTO_TEST_CASE(NoGridOptsDefaultRegion) { - auto deck = createDeckNoGridOpts(); - EclipseState state(deck); - const auto& fp = state.fieldProps(); - const auto& multnum = fp.get_int("MULTNUM"); - const auto& fluxnum = fp.get_int("FLUXNUM"); - const auto default_kw = fp.default_region(); - const auto& def_pro = fp.get_int(default_kw); - - BOOST_CHECK_EQUAL( &fluxnum , &def_pro ); - BOOST_CHECK_NE( &fluxnum , &multnum ); -} - - -BOOST_AUTO_TEST_CASE(WithGridOptsDefaultRegion) { - auto deck = createDeckWithGridOpts(); - EclipseState state(deck); - const auto& fp = state.fieldProps(); - const auto& multnum = fp.get_int("MULTNUM"); - const auto& fluxnum = fp.get_int("FLUXNUM"); - const auto default_kw = fp.default_region(); - const auto& def_pro = fp.get_int(default_kw); - - BOOST_CHECK_EQUAL( &multnum , &def_pro ); - BOOST_CHECK_NE( &fluxnum , &multnum ); -} - -BOOST_AUTO_TEST_CASE(TestIOConfigBaseName) { - Parser parser; - auto deck = parser.parseFile(prepath() + "IOConfig/SPE1CASE2.DATA"); - EclipseState state(deck); - const auto& io = state.cfg().io(); - BOOST_CHECK_EQUAL(io.getBaseName(), "SPE1CASE2"); - BOOST_CHECK_EQUAL(io.getOutputDir(), prepath() + "IOConfig"); - - Parser parser2; - auto deck2 = createDeckWithGridOpts(); - EclipseState state2(deck2); - const auto& io2 = state2.cfg().io(); - BOOST_CHECK_EQUAL(io2.getBaseName(), ""); - BOOST_CHECK_EQUAL(io2.getOutputDir(), "."); -} - -BOOST_AUTO_TEST_CASE(TestIOConfigCreation) { - const char * deckData = - "RUNSPEC\n" - "GRIDOPTS\n" - " 'YES' 10 /" - "\n" - "DIMENS\n" - " 10 10 10 /\n" - "GRID\n" - "DX\n" - "1000*0.25 /\n" - "DY\n" - "1000*0.25 /\n" - "DZ\n" - "1000*0.25 /\n" - "TOPS\n" - "100*0.25 /\n" - "PORO\n" - " 1000*0.15 /\n" - "START -- 0 \n" - "19 JUN 2007 / \n" - "SCHEDULE\n" - "DATES -- 1\n" - " 10 OKT 2008 / \n" - "/\n" - "RPTRST\n" - "BASIC=3 FREQ=2 /\n" - "DATES -- 2\n" - " 20 JAN 2010 / \n" - "/\n" - "DATES -- 3\n" - " 20 JAN 2011 / \n" - "/\n"; - - - Parser parser{}; - auto deck = parser.parseString(deckData) ; - RestartConfig rstConfig(TimeMap(deck), deck); - - BOOST_CHECK_EQUAL(false, rstConfig.getWriteRestartFile(0)); - BOOST_CHECK_EQUAL(false, rstConfig.getWriteRestartFile(1)); - BOOST_CHECK_EQUAL(true, rstConfig.getWriteRestartFile(2)); - BOOST_CHECK_EQUAL(false, rstConfig.getWriteRestartFile(3)); -} - - -BOOST_AUTO_TEST_CASE(TestIOConfigCreationWithSolutionRPTRST) { - const char * deckData = - "RUNSPEC\n" - "GRIDOPTS\n" - " 'YES' 10 /" - "\n" - "DIMENS\n" - " 10 10 10 /\n" - "GRID\n" - "DX\n" - "1000*0.25 /\n" - "DY\n" - "1000*0.25 /\n" - "DZ\n" - "1000*0.25 /\n" - "TOPS\n" - "100*0.25 /\n" - "PORO\n" - " 1000*0.15 /\n" - "SOLUTION\n" - "RPTRST\n" - "BASIC=1/\n" - "RPTRST\n" - "BASIC=3 FREQ=5 /\n" - "GRID\n" - "START -- 0 \n" - "19 JUN 2007 / \n" - "SCHEDULE\n" - "DATES -- 1\n" - " 10 OKT 2008 / \n" - "/\n" - "DATES -- 2\n" - " 20 JAN 2010 / \n" - "/\n" - "RPTRST\n" - "BASIC=3 FREQ=2 /\n" - "DATES -- 3\n" - " 20 JAN 2011 / \n" - "/\n"; - - Parser parser; - auto deck = parser.parseString(deckData) ; - RestartConfig rstConfig(TimeMap(deck), deck); - - BOOST_CHECK_EQUAL(true , rstConfig.getWriteRestartFile(0)); - BOOST_CHECK_EQUAL(false , rstConfig.getWriteRestartFile(1)); - BOOST_CHECK_EQUAL(false , rstConfig.getWriteRestartFile(2)); - BOOST_CHECK_EQUAL(false , rstConfig.getWriteRestartFile(3)); -} - - - -BOOST_AUTO_TEST_CASE(TestIOConfigCreationWithSolutionRPTSOL) { - const char *deckData = - "RUNSPEC\n" - "DIMENS\n" - " 10 10 10 /\n" - "GRID\n" - "DX\n" - "1000*0.25 /\n" - "DY\n" - "1000*0.25 /\n" - "DZ\n" - "1000*0.25 /\n" - "TOPS\n" - "100*0.25 /\n" - "PORO\n" - " 1000*0.15 /\n" - "SOLUTION\n" - "RPTSOL\n" - "RESTART=2\n" - "/\n" - "START -- 0 \n" - "19 JUN 2007 / \n" - "SCHEDULE\n" - "DATES -- 1\n" - " 10 OKT 2008 / \n" - "/\n" - "RPTRST\n" - "BASIC=3 FREQ=3\n" - "/\n" - "DATES -- 2\n" - " 20 JAN 2010 / \n" - "/\n" - "DATES -- 3\n" - " 20 FEB 2010 / \n" - "/\n" - "RPTSCHED\n" - "RESTART=1\n" - "/\n"; - - const char *deckData2 = - "RUNSPEC\n" - "DIMENS\n" - " 10 10 10 /\n" - "GRID\n" - "DX\n" - "1000*0.25 /\n" - "DY\n" - "1000*0.25 /\n" - "DZ\n" - "1000*0.25 /\n" - "TOPS\n" - "100*0.25 /\n" - "PORO\n" - " 1000*0.15 /\n" - "SOLUTION\n" - "RPTSOL\n" - "0 0 0 0 0 0 2\n" - "/\n" - "START -- 0 \n" - "19 JUN 2007 / \n" - "SCHEDULE\n" - "DATES -- 1\n" - " 10 OKT 2008 / \n" - "/\n" - "RPTRST\n" - "BASIC=3 FREQ=3\n" - "/\n" - "DATES -- 2\n" - " 20 JAN 2010 / \n" - "/\n" - "DATES -- 3\n" - " 20 FEB 2010 / \n" - "/\n" - "RPTSCHED\n" - "RESTART=1\n" - "/\n"; - - - Parser parser; - - { //mnemnonics - auto deck = parser.parseString(deckData) ; - RestartConfig rstConfig(TimeMap(deck), deck); - - BOOST_CHECK_EQUAL(true, rstConfig.getWriteRestartFile(0)); - } - - { //old fashion integer mnemonics - auto deck = parser.parseString(deckData2) ; - RestartConfig rstConfig(TimeMap(deck), deck); - - BOOST_CHECK_EQUAL(true, rstConfig.getWriteRestartFile(0)); - } -} - - -BOOST_AUTO_TEST_CASE(TestBox) { - const char * regionData = - "START --\n" - "10 MAI 2007 /\n" - "RUNSPEC\n" - "DIMENS\n" - "2 2 1 /\n" - "GRID\n" - "DX\n" - "4*0.25 /\n" - "BOX\n" - "1* 1 1 1 1 1 /\n" - "DY\n" - "4*0.25 /\n" - "DZ\n" - "4*0.25 /\n" - "TOPS\n" - "4*0.25 /\n" - "ENDBOX\n" - "PORO\n" - " 4*0.15 /\n" - "REGIONS\n" - "OPERNUM\n" - "3 3 1 2 /\n" - "FIPNUM\n" - "1 1 2 3 /\n"; - Parser parser; - auto deck = parser.parseString(regionData); - EclipseState state(deck); - -} - diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/EmbeddedPython.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/EmbeddedPython.cpp deleted file mode 100644 index 2dcde8f834..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/EmbeddedPython.cpp +++ /dev/null @@ -1,167 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include -#include -#include - -#define BOOST_TEST_MODULE EMBEDDED_PYTHON - -#include - -#include -#include -#include -#include -#include -#include - -using namespace Opm; - -#ifndef EMBEDDED_PYTHON - -BOOST_AUTO_TEST_CASE(INSTANTIATE) { - Python python; - BOOST_CHECK(!python.enabled()); - BOOST_CHECK_THROW(python.exec("print('Hello world')"), std::logic_error); - BOOST_CHECK(! Python::supported() ); - - BOOST_CHECK_THROW( Python{Python::Enable::ON}, std::logic_error ); - Python python_cond(Python::Enable::TRY); - BOOST_CHECK(!python_cond.enabled()); - - Python python_off(Python::Enable::OFF); - BOOST_CHECK(!python_off.enabled()); -} - -#else - -BOOST_AUTO_TEST_CASE(INSTANTIATE) { - auto python = std::make_shared(); - BOOST_CHECK(Python::supported()); - BOOST_CHECK(python->enabled()); - BOOST_CHECK_NO_THROW(python->exec("import sys")); - - Parser parser; - Deck deck; - std::string python_code = R"( -print('Parser: {}'.format(context.parser)) -print('Deck: {}'.format(context.deck)) -kw = context.DeckKeyword( context.parser['FIELD'] ) -context.deck.add(kw) -)"; - BOOST_CHECK_NO_THROW( python->exec(python_code, parser, deck)); - BOOST_CHECK( deck.hasKeyword("FIELD") ); -} - - - -BOOST_AUTO_TEST_CASE(PYINPUT_BASIC) { - - Parser parser; - std::string input = R"( - START -- 0 - 31 AUG 1993 / - RUNSPEC - PYINPUT - kw = context.DeckKeyword( context.parser['FIELD'] ) - context.deck.add(kw) - PYEND - DIMENS - 2 2 1 / - PYINPUT - import numpy as np - dx = np.array([0.25, 0.25, 0.25, 0.25]) - active_unit_system = context.deck.active_unit_system() - default_unit_system = context.deck.default_unit_system() - kw = context.DeckKeyword( context.parser['DX'], dx, active_unit_system, default_unit_system ) - context.deck.add(kw) - PYEND - DY - 4*0.25 / - )"; - - Deck deck = parser.parseString(input); - BOOST_CHECK( deck.hasKeyword("START") ); - BOOST_CHECK( deck.hasKeyword("FIELD") ); - BOOST_CHECK( deck.hasKeyword("DIMENS") ); - BOOST_CHECK( deck.hasKeyword("DX") ); - auto DX = deck.getKeyword("DX"); - std::vector dx_data = DX.getSIDoubleData(); - BOOST_CHECK_EQUAL( dx_data.size(), 4 ); - BOOST_CHECK_EQUAL( dx_data[2], 0.25 * 0.3048 ); - BOOST_CHECK( deck.hasKeyword("DY") ); - -} - - -BOOST_AUTO_TEST_CASE(PYACTION) { - Parser parser; - auto python = std::make_shared(Python::Enable::ON); - auto deck = parser.parseFile("EMBEDDED_PYTHON.DATA"); - auto ecl_state = EclipseState(deck); - auto schedule = Schedule(deck, ecl_state, python); - - SummaryState st(std::chrono::system_clock::now()); - const auto& pyaction_kw = deck.getKeyword(0); - const std::string& fname = pyaction_kw.getRecord(1).getItem(0).get(0); - Action::PyAction py_action(python, "WCLOSE", Action::PyAction::RunCount::unlimited, deck.makeDeckPath(fname)); - st.update_well_var("PROD1", "WWCT", 0); - py_action.run(ecl_state, schedule, 10, st); - - st.update("FOPR", 0); - py_action.run(ecl_state, schedule, 10, st); - - st.update("FOPR", 100); - st.update_well_var("PROD1", "WWCT", 0.90); - py_action.run(ecl_state, schedule, 10, st); - - const auto& well1 = schedule.getWell("PROD1", 10); - const auto& well2 = schedule.getWell("PROD2", 10); - BOOST_CHECK( well1.getStatus() == Well::Status::SHUT ); - BOOST_CHECK( well2.getStatus() == Well::Status::OPEN ); - BOOST_CHECK( st.has("RUN_COUNT") ); -} - - -BOOST_AUTO_TEST_CASE(Python_Constructor) { - Python python_off(Python::Enable::OFF); - BOOST_CHECK(!python_off.enabled()); - - Python python_on(Python::Enable::ON); - BOOST_CHECK(python_on.enabled()); - - //.enabled() Can only have one Python interpreter active at any time - BOOST_CHECK_THROW(Python(Python::Enable::ON), std::logic_error); -} - -BOOST_AUTO_TEST_CASE(Python_Constructor2) { - Python python_cond1(Python::Enable::TRY); - BOOST_CHECK(python_cond1.enabled()); - - Python python_cond2(Python::Enable::TRY); - BOOST_CHECK(!python_cond2.enabled()); -} - -#endif - - - - - diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/EqualRegTests.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/EqualRegTests.cpp deleted file mode 100644 index de7c854bb1..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/EqualRegTests.cpp +++ /dev/null @@ -1,136 +0,0 @@ -/* - Copyright 2014 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include -#include -#include -#include - -#define BOOST_TEST_MODULE EqualRegTests -#include -#include - - -#include - -#include -#include -#include - -#include -#include -#include - - -static Opm::Deck createDeckInvalidArray() { - const char* deckData = - "RUNSPEC\n" - "\n" - "DIMENS\n" - " 10 10 10 /\n" - "GRID\n" - "EQUALREG\n" - " MISSING 10 10 M / \n" - "/\n" - "EDIT\n" - "\n"; - - Opm::Parser parser; - return parser.parseString(deckData) ; -} - - -static Opm::Deck createDeckInvalidRegion() { - const char* deckData = - "RUNSPEC\n" - "\n" - "DIMENS\n" - " 10 10 10 /\n" - "GRID\n" - "EQUALREG\n" - " MISSING 10 10 MX / \n" - "/\n" - "EDIT\n" - "\n"; - - Opm::Parser parser; - return parser.parseString(deckData) ; -} - - -static Opm::Deck createDeckInvalidValue() { - const char* deckData = - "RUNSPEC\n" - "\n" - "DIMENS\n" - " 10 10 10 /\n" - "GRID\n" - "EQUALREG\n" - " SATNUM 0.2 10 M / \n" - "/\n" - "EDIT\n" - "\n"; - - Opm::Parser parser; - return parser.parseString(deckData) ; -} - - -static Opm::Deck createDeckUnInitialized() { - const char* deckData = - "RUNSPEC\n" - "\n" - "DIMENS\n" - " 10 10 10 /\n" - "GRID\n" - "REGIONS\n" - "EQUALREG\n" - " SATNUM 2 10 M / \n" - "/\n" - "EDIT\n" - "\n"; - - Opm::Parser parser; - return parser.parseString(deckData) ; -} - - - - -BOOST_AUTO_TEST_CASE(InvalidArrayThrows) { - Opm::Deck deck = createDeckInvalidArray(); - BOOST_CHECK_THROW( new Opm::EclipseState( deck) , std::invalid_argument ); -} - - -BOOST_AUTO_TEST_CASE(InvalidRegionThrows) { - Opm::Deck deck = createDeckInvalidRegion(); - BOOST_CHECK_THROW( new Opm::EclipseState( deck) , std::invalid_argument ); -} - -BOOST_AUTO_TEST_CASE(ExpectedIntThrows) { - Opm::Deck deck = createDeckInvalidValue(); - BOOST_CHECK_THROW( new Opm::EclipseState( deck) , std::invalid_argument ); -} - -BOOST_AUTO_TEST_CASE(UnInitializedVectorThrows) { - Opm::Deck deck = createDeckUnInitialized(); - BOOST_CHECK_THROW( new Opm::EclipseState( deck) , std::invalid_argument ); -} - diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/EventTests.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/EventTests.cpp deleted file mode 100644 index 89808e37c0..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/EventTests.cpp +++ /dev/null @@ -1,77 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include -#include -#include - -#define BOOST_TEST_MODULE EventTests -#include -#include - -#include -#include -#include - - - -BOOST_AUTO_TEST_CASE(CreateEmpty) { - std::vector tp = { Opm::asTimeT(Opm::TimeStampUTC(2010,1,1)) }; - - for (int i = 0; i < 11; i++) - tp.push_back( Opm::asTimeT(Opm::TimeStampUTC(2010,1,i+2))); - - Opm::TimeMap timeMap(tp); - Opm::Events events( timeMap ); - Opm::DynamicVector vector(timeMap , 9.99); - - BOOST_CHECK_EQUAL( false , events.hasEvent(Opm::ScheduleEvents::NEW_WELL , 10)); - - events.addEvent( Opm::ScheduleEvents::NEW_WELL , 0 ); - BOOST_CHECK_EQUAL( true , events.hasEvent(Opm::ScheduleEvents::NEW_WELL , 0)); - - events.addEvent( Opm::ScheduleEvents::NEW_WELL , 10 ); - BOOST_CHECK_EQUAL( false , events.hasEvent(Opm::ScheduleEvents::NEW_WELL , 9)); - BOOST_CHECK_EQUAL( true , events.hasEvent(Opm::ScheduleEvents::NEW_WELL , 10)); - BOOST_CHECK_EQUAL( false , events.hasEvent(Opm::ScheduleEvents::NEW_WELL , 11)); - - events.addEvent( Opm::ScheduleEvents::NEW_WELL , 10 ); - BOOST_CHECK_EQUAL( false , events.hasEvent(Opm::ScheduleEvents::NEW_WELL , 9)); - BOOST_CHECK_EQUAL( true , events.hasEvent(Opm::ScheduleEvents::NEW_WELL , 10)); - BOOST_CHECK_EQUAL( false , events.hasEvent(Opm::ScheduleEvents::NEW_WELL , 11)); - - events.addEvent( Opm::ScheduleEvents::WELL_STATUS_CHANGE , 9 ); - events.addEvent( Opm::ScheduleEvents::WELL_STATUS_CHANGE , 10 ); - BOOST_CHECK_EQUAL( false , events.hasEvent(Opm::ScheduleEvents::NEW_WELL , 9)); - BOOST_CHECK_EQUAL( true , events.hasEvent(Opm::ScheduleEvents::NEW_WELL , 10)); - BOOST_CHECK_EQUAL( false , events.hasEvent(Opm::ScheduleEvents::NEW_WELL , 11)); - BOOST_CHECK_EQUAL( true , events.hasEvent(Opm::ScheduleEvents::WELL_STATUS_CHANGE , 9)); - BOOST_CHECK_EQUAL( true , events.hasEvent(Opm::ScheduleEvents::WELL_STATUS_CHANGE , 10)); -} - - -BOOST_AUTO_TEST_CASE(TestMultiple) { - const std::time_t startDate = Opm::TimeMap::mkdate(2010, 1, 1); - Opm::TimeMap timeMap( { startDate } ); - Opm::DynamicVector vector(timeMap , 9.99); - Opm::Events events( timeMap ); - - events.addEvent( Opm::ScheduleEvents::NEW_WELL , 0 ); - BOOST_CHECK( events.hasEvent( Opm::ScheduleEvents::NEW_WELL | Opm::ScheduleEvents::NEW_GROUP , 0 )); -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/FaceDirTests.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/FaceDirTests.cpp deleted file mode 100644 index 13c5cd61c9..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/FaceDirTests.cpp +++ /dev/null @@ -1,80 +0,0 @@ -/* - Copyright 2014 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include -#include -#include -#include - -#define BOOST_TEST_MODULE FaceDirTests -#include -#include - -#include - - -namespace Opm { - -BOOST_AUTO_TEST_CASE(CheckEnum) { - BOOST_CHECK_EQUAL( FaceDir::XPlus , FaceDir::FromString( "X")); - BOOST_CHECK_EQUAL( FaceDir::XPlus , FaceDir::FromString( "I")); - BOOST_CHECK_EQUAL( FaceDir::XMinus , FaceDir::FromString( "X-")); - BOOST_CHECK_EQUAL( FaceDir::XMinus , FaceDir::FromString( "I-")); - - BOOST_CHECK_EQUAL( FaceDir::YPlus , FaceDir::FromString( "Y")); - BOOST_CHECK_EQUAL( FaceDir::YPlus , FaceDir::FromString( "J")); - BOOST_CHECK_EQUAL( FaceDir::YMinus , FaceDir::FromString( "Y-")); - BOOST_CHECK_EQUAL( FaceDir::YMinus , FaceDir::FromString( "J-")); - - BOOST_CHECK_EQUAL( FaceDir::ZPlus , FaceDir::FromString( "Z")); - BOOST_CHECK_EQUAL( FaceDir::ZPlus , FaceDir::FromString( "K")); - BOOST_CHECK_EQUAL( FaceDir::ZMinus , FaceDir::FromString( "Z-")); - BOOST_CHECK_EQUAL( FaceDir::ZMinus , FaceDir::FromString( "K-")); - - BOOST_CHECK_THROW( FaceDir::FromString("??") , std::invalid_argument); -} - -BOOST_AUTO_TEST_CASE(CheckComposite) { - BOOST_CHECK( FaceDir::XPlus & FaceDir::FromMULTREGTString("X")); - BOOST_CHECK( FaceDir::XMinus & FaceDir::FromMULTREGTString("X")); - BOOST_CHECK_EQUAL( FaceDir::XPlus + FaceDir::XMinus , FaceDir::FromMULTREGTString("X")); - - BOOST_CHECK( FaceDir::YPlus & FaceDir::FromMULTREGTString("Y")); - BOOST_CHECK( FaceDir::YMinus & FaceDir::FromMULTREGTString("Y")); - BOOST_CHECK_EQUAL( FaceDir::YPlus + FaceDir::YMinus , FaceDir::FromMULTREGTString("Y")); - - BOOST_CHECK( FaceDir::ZPlus & FaceDir::FromMULTREGTString("Z")); - BOOST_CHECK( FaceDir::ZMinus & FaceDir::FromMULTREGTString("Z")); - BOOST_CHECK_EQUAL( FaceDir::ZPlus + FaceDir::ZMinus , FaceDir::FromMULTREGTString("Z")); - - - BOOST_CHECK_EQUAL( FaceDir::XPlus + FaceDir::YPlus + FaceDir::XMinus + FaceDir::YMinus , FaceDir::FromMULTREGTString("XY")); - BOOST_CHECK_EQUAL( FaceDir::XPlus + FaceDir::ZPlus + FaceDir::XMinus + FaceDir::ZMinus, FaceDir::FromMULTREGTString("XZ")); - BOOST_CHECK_EQUAL( FaceDir::ZPlus + FaceDir::YPlus + FaceDir::ZMinus + FaceDir::YMinus, FaceDir::FromMULTREGTString("YZ")); - BOOST_CHECK_EQUAL( FaceDir::ZPlus + FaceDir::XPlus + FaceDir::YPlus + FaceDir::ZMinus + FaceDir::XMinus + FaceDir::YMinus , FaceDir::FromMULTREGTString("XYZ")); - - BOOST_CHECK_THROW( FaceDir::FromString("??") , std::invalid_argument); - BOOST_CHECK_THROW( FaceDir::FromString("x") , std::invalid_argument); - BOOST_CHECK_THROW( FaceDir::FromString("ZY") , std::invalid_argument); - BOOST_CHECK_THROW( FaceDir::FromString("YX") , std::invalid_argument); -} - - -} - diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/FaultTests.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/FaultTests.cpp deleted file mode 100644 index fcfab84254..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/FaultTests.cpp +++ /dev/null @@ -1,140 +0,0 @@ -/* - Copyright 2014 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include -#include - -#define BOOST_TEST_MODULE FaultTests - -#include -#include -#include - -#include -#include -#include -#include - - - -BOOST_AUTO_TEST_CASE(CreateInvalidFace) { - // I out of range - BOOST_CHECK_THROW( Opm::FaultFace(10,10,10,10 , 10 , 1 , 1 , 5 , 5 , Opm::FaceDir::XPlus) , std::invalid_argument ); - - // I1 != I2 when face == X - BOOST_CHECK_THROW( Opm::FaultFace( 10,10,10, 1 , 3 , 1 , 1 , 5 , 5 , Opm::FaceDir::XPlus) , std::invalid_argument ); - - // J1 < J2 - BOOST_CHECK_THROW( Opm::FaultFace( 10,10,10,3 , 3 , 3 , 1 , 5 , 5 , Opm::FaceDir::XPlus) , std::invalid_argument ); - -} - - -BOOST_AUTO_TEST_CASE(CreateFace) { - Opm::FaultFace face1(10,10,10,0, 2 , 0 , 0 , 0 , 0 , Opm::FaceDir::YPlus); - Opm::FaultFace face2(10,10,10,0, 2 , 1 , 1 , 0 , 0 , Opm::FaceDir::YPlus); - Opm::FaultFace face3(10,10,10,0, 2 , 0 , 0 , 1 , 1 , Opm::FaceDir::YPlus); - - std::vector trueValues1{0,1,2}; - std::vector trueValues2{10,11,12}; - std::vector trueValues3{100,101,102}; - size_t i = 0; - - { - auto iter3 = face3.begin(); - auto iter2 = face2.begin(); - for (auto iter1 = face1.begin(); iter1 != face1.end(); ++iter1) { - size_t index1 = *iter1; - size_t index2 = *iter2; - size_t index3 = *iter3; - - BOOST_CHECK_EQUAL( index1 , trueValues1[i] ); - BOOST_CHECK_EQUAL( index2 , trueValues2[i] ); - BOOST_CHECK_EQUAL( index3 , trueValues3[i] ); - - ++iter2; - ++iter3; - ++i; - } - } - BOOST_CHECK_EQUAL( face1.getDir() , Opm::FaceDir::YPlus); -} - - -BOOST_AUTO_TEST_CASE(CreateFault) { - Opm::Fault fault("FAULT1"); - BOOST_CHECK_EQUAL( "FAULT1" , fault.getName()); - BOOST_CHECK_EQUAL( 1.0 , fault.getTransMult()); -} - -namespace Opm { - -inline std::ostream& operator<<( std::ostream& stream, const FaultFace& face ) { - stream << face.getDir() << ": [ "; - for( auto index : face ) stream << index << " "; - return stream << "]"; -} - -} - -BOOST_AUTO_TEST_CASE(AddFaceToFaults) { - Opm::Fault fault("FAULT1"); - Opm::FaultFace face1( 10,10,10,0, 2 , 0 , 0 , 0 , 0 , Opm::FaceDir::YPlus ); - Opm::FaultFace face2( 10,10,10,0, 2 , 1 , 1 , 0 , 0 , Opm::FaceDir::YPlus ); - Opm::FaultFace face3( 10,10,10,0, 2 , 0 , 0 , 1 , 1 , Opm::FaceDir::YPlus ); - fault.addFace( face1 ); - fault.addFace( face2 ); - fault.addFace( face3 ); - - { - auto iter = fault.begin(); - BOOST_CHECK_EQUAL( *iter , face1 ); ++iter; - BOOST_CHECK_EQUAL( *iter , face2 ); ++iter; - BOOST_CHECK_EQUAL( *iter , face3 ); ++iter; - } - -} - - - -BOOST_AUTO_TEST_CASE(CreateFaultCollection) { - Opm::FaultCollection faults; - BOOST_CHECK_EQUAL( faults.size() , 0 ); - BOOST_CHECK(! faults.hasFault("NO-NotThisOne")); - BOOST_CHECK_THROW( faults.getFault("NO") , std::invalid_argument ); -} - - -BOOST_AUTO_TEST_CASE(AddFaultsToCollection) { - Opm::FaultCollection faults; - - faults.addFault("FAULT"); - BOOST_CHECK_EQUAL( faults.size() , 1 ); - BOOST_CHECK(faults.hasFault("FAULT")); - - const auto& fault1 = faults.getFault("FAULT"); - const auto& fault2 = faults.getFault(0); - BOOST_CHECK_EQUAL(fault1.getName(), fault2.getName()); - - faults.addFault("FAULTX"); - const auto& faultx = faults.getFault("FAULTX"); - BOOST_CHECK_EQUAL( faults.size() , 2 ); - BOOST_CHECK(faults.hasFault("FAULTX")); - BOOST_CHECK_EQUAL( faultx.getName() , faults.getFault(1).getName()); -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/FaultsTests.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/FaultsTests.cpp deleted file mode 100644 index 9b0e5dba29..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/FaultsTests.cpp +++ /dev/null @@ -1,34 +0,0 @@ -/* - Copyright 2014 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include -#include -#include - -#define BOOST_TEST_MODULE FaultsTests -#include -#include - -#include - - -BOOST_AUTO_TEST_CASE(CreateFaultCollection) { - Opm::FaultCollection faults; - BOOST_CHECK_EQUAL( faults.size() , 0 ); -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/FieldPropsTests.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/FieldPropsTests.cpp deleted file mode 100644 index 96bea7c72d..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/FieldPropsTests.cpp +++ /dev/null @@ -1,587 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include -#include -#include -#include - -#define BOOST_TEST_MODULE FieldPropsTests - -#include -#include -#include - -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -#include "src/opm/parser/eclipse/EclipseState/Grid/FieldProps.hpp" - - -using namespace Opm; - -BOOST_AUTO_TEST_CASE(CreateFieldProps) { - EclipseGrid grid(10,10,10); - Deck deck; - FieldPropsManager fpm(deck, Phases{true, true, true}, grid, TableManager()); - BOOST_CHECK(!fpm.try_get("PORO")); - BOOST_CHECK(!fpm.try_get("PORO")); - BOOST_CHECK(!fpm.try_get("NO_SUCH_KEYWOWRD")); - BOOST_CHECK(!fpm.try_get("NO_SUCH_KEYWOWRD")); - - BOOST_CHECK_THROW(fpm.get_double("PORO"), std::out_of_range); - BOOST_CHECK_THROW(fpm.get_global_double("PERMX"), std::out_of_range); - BOOST_CHECK_THROW(fpm.get_copy("PERMX"), std::out_of_range); - BOOST_CHECK_THROW(fpm.get_int("NOT_SUPPORTED"), std::logic_error); - BOOST_CHECK_THROW(fpm.get_double("NOT_SUPPORTED"), std::logic_error); - - BOOST_CHECK_THROW(fpm.get_global_double("NO1"), std::logic_error); - BOOST_CHECK_THROW(fpm.get_global_int("NO2"), std::logic_error); -} - - - -BOOST_AUTO_TEST_CASE(CreateFieldProps2) { - std::string deck_string = R"( -GRID - -PORO - 1000*0.10 / - -BOX - 1 3 1 3 1 3 / - -PORV - 27*100 / - -ACTNUM - 27*1 / - -PERMX - 27*0.6/ - - -)"; - std::vector actnum(1000, 1); - for (std::size_t i=0; i< 1000; i += 2) - actnum[i] = 0; - EclipseGrid grid(EclipseGrid(10,10,10), actnum); - Deck deck = Parser{}.parseString(deck_string); - FieldPropsManager fpm(deck, Phases{true, true, true}, grid, TableManager()); - - BOOST_CHECK(!fpm.has_double("NO-PORO")); - BOOST_CHECK(fpm.has_double("PORO")); - const auto& poro1 = fpm.get_double("PORO"); - BOOST_CHECK_EQUAL(poro1.size(), grid.getNumActive()); - - const auto& poro2 = fpm.try_get("PORO"); - BOOST_CHECK(poro1 == *poro2); - - BOOST_CHECK(!fpm.has_double("NO-PORO")); - - // PERMX keyword is not fully initialized - BOOST_CHECK(!fpm.try_get("PERMX")); - BOOST_CHECK(!fpm.has_double("PERMX")); - BOOST_CHECK_THROW(fpm.get_double("PERMX"), std::runtime_error); - { - const auto& keys = fpm.keys(); - BOOST_CHECK_EQUAL(keys.size(), 1); - BOOST_CHECK(std::find(keys.begin(), keys.end(), "PORO") != keys.end()); - BOOST_CHECK(std::find(keys.begin(), keys.end(), "PERMX") == keys.end()); - - // The PORV property should be extracted with the special function - // fp.porv() and not the general get() functionality. - BOOST_CHECK(std::find(keys.begin(), keys.end(), "PORV") == keys.end()); - } - { - const auto& keys = fpm.keys(); - BOOST_CHECK_EQUAL(keys.size(), 0); - - BOOST_CHECK(std::find(keys.begin(), keys.end(), "ACTNUM") == keys.end()); - } -} - - -BOOST_AUTO_TEST_CASE(INVALID_COPY) { - std::string deck_string = R"( -GRID - -COPY - PERMX PERMY / -/ -)"; - - EclipseGrid grid(EclipseGrid(10,10,10)); - Deck deck = Parser{}.parseString(deck_string); - BOOST_CHECK_THROW( FieldPropsManager(deck, Phases{true, true, true}, grid, TableManager()), std::out_of_range); -} - -BOOST_AUTO_TEST_CASE(GRID_RESET) { - std::string deck_string = R"( -REGIONS - -SATNUM -0 1 2 3 4 5 6 7 8 -/ -)"; - std::vector actnum1 = {1,1,1,0,0,0,1,1,1}; - EclipseGrid grid(3,1,3); grid.resetACTNUM(actnum1); - Deck deck = Parser{}.parseString(deck_string); - FieldPropsManager fpm(deck, Phases{true, true, true}, grid, TableManager()); - const auto& s1 = fpm.get_int("SATNUM"); - BOOST_CHECK_EQUAL(s1.size(), 6); - BOOST_CHECK_EQUAL(s1[0], 0); - BOOST_CHECK_EQUAL(s1[1], 1); - BOOST_CHECK_EQUAL(s1[2], 2); - BOOST_CHECK_EQUAL(s1[3], 6); - BOOST_CHECK_EQUAL(s1[4], 7); - BOOST_CHECK_EQUAL(s1[5], 8); - BOOST_CHECK_EQUAL(fpm.active_size(), 6); - - std::vector actnum2 = {1,0,1,0,0,0,1,0,1}; - fpm.reset_actnum(actnum2); - - BOOST_CHECK_EQUAL(s1.size(), 4); - BOOST_CHECK_EQUAL(s1[0], 0); - BOOST_CHECK_EQUAL(s1[1], 2); - BOOST_CHECK_EQUAL(s1[2], 6); - BOOST_CHECK_EQUAL(s1[3], 8); - BOOST_CHECK_EQUAL(fpm.active_size(), 4); - - BOOST_CHECK_THROW(fpm.reset_actnum(actnum1), std::logic_error); -} - -BOOST_AUTO_TEST_CASE(ADDREG) { - std::string deck_string = R"( -GRID - -PORO - 6*0.1 / - -MULTNUM - 2 2 2 1 1 1 / - -ADDREG - PORO 1.0 1 M / -/ - -)"; - std::vector actnum1 = {1,1,0,0,1,1}; - EclipseGrid grid(3,2,1); grid.resetACTNUM(actnum1); - Deck deck = Parser{}.parseString(deck_string); - FieldPropsManager fpm(deck, Phases{true, true, true}, grid, TableManager()); - const auto& poro = fpm.get_double("PORO"); - BOOST_CHECK_EQUAL(poro.size(), 4); - BOOST_CHECK_EQUAL(poro[0], 0.10); - BOOST_CHECK_EQUAL(poro[3], 1.10); -} - - - -BOOST_AUTO_TEST_CASE(ASSIGN) { - FieldProps::FieldData data(100); - std::vector wrong_size(50); - - BOOST_CHECK_THROW( data.default_assign( wrong_size ), std::invalid_argument ); - - std::vector ext_data(100); - std::iota(ext_data.begin(), ext_data.end(), 0); - data.default_assign( ext_data ); - - BOOST_CHECK(data.valid()); - BOOST_CHECK(data.data == ext_data); -} - - -BOOST_AUTO_TEST_CASE(Defaulted) { - std::string deck_string = R"( -GRID - -BOX - 1 10 1 10 1 1 / - -NTG - 100*2 / - -)"; - - EclipseGrid grid(EclipseGrid(10,10, 2)); - Deck deck = Parser{}.parseString(deck_string); - FieldPropsManager fpm(deck, Phases{true, true, true}, grid, TableManager()); - const auto& ntg = fpm.get_double("NTG"); - const auto& defaulted = fpm.defaulted("NTG"); - - for (std::size_t g=0; g < 100; g++) { - BOOST_CHECK_EQUAL(ntg[g], 2); - BOOST_CHECK_EQUAL(defaulted[g], false); - - BOOST_CHECK_EQUAL(ntg[g + 100], 1); - BOOST_CHECK_EQUAL(defaulted[g + 100], true); - } -} - -BOOST_AUTO_TEST_CASE(PORV) { - std::string deck_string = R"( -GRID - -PORO - 500*0.10 / - -BOX - 1 10 1 10 2 2 / - -NTG - 100*2 / - -ENDBOX - -MULTNUM - 500*1 / - -BOX - 1 10 1 10 5 5 / - -MULTNUM - 100*2 / - -ENDBOX - -EDIT - -BOX - 1 10 1 10 4 4 / - -MULTPV - 100*4 / - - -ENDBOX - -BOX - 1 10 1 10 3 3 / - -PORV - 100*3 / - -ENDBOX - - -MULTREGP - 2 8 F / -- This should be ignored - 2 5 M / -/ - -ENDBOX - -)"; - - EclipseGrid grid(10,10, 5); - Deck deck = Parser{}.parseString(deck_string); - FieldPropsManager fpm(deck, Phases{true, true, true}, grid, TableManager()); - const auto& poro = fpm.get_double("PORO"); - const auto& ntg = fpm.get_double("NTG"); - const auto& multpv = fpm.get_double("MULTPV"); - const auto& porv = fpm.porv(); - - // All cells should be active for this grid - BOOST_CHECK_EQUAL(porv.size(), grid.getNumActive()); - BOOST_CHECK_EQUAL(porv.size(), grid.getCartesianSize()); - - // k = 0: poro * V - for (std::size_t g = 0; g < 100; g++) { - BOOST_CHECK_EQUAL(porv[g], grid.getCellVolume(g) * poro[g]); - BOOST_CHECK_EQUAL(porv[g], 0.10); - BOOST_CHECK_EQUAL(poro[g], 0.10); - BOOST_CHECK_EQUAL(ntg[g], 1.0); - BOOST_CHECK_EQUAL(multpv[g], 1.0); - } - - // k = 1: poro * NTG * V - for (std::size_t g = 100; g < 200; g++) { - BOOST_CHECK_EQUAL(porv[g], grid.getCellVolume(g) * poro[g] * ntg[g]); - BOOST_CHECK_EQUAL(porv[g], 0.20); - BOOST_CHECK_EQUAL(poro[g], 0.10); - BOOST_CHECK_EQUAL(ntg[g], 2.0); - BOOST_CHECK_EQUAL(multpv[g], 1.0); - } - - // k = 2: PORV - explicitly set - for (std::size_t g = 200; g < 300; g++) { - BOOST_CHECK_EQUAL(poro[g], 0.10); - BOOST_CHECK_EQUAL(ntg[g], 1.0); - BOOST_CHECK_EQUAL(multpv[g], 1.0); - BOOST_CHECK_EQUAL(porv[g],3.0); - } - - // k = 3: poro * V * multpv - for (std::size_t g = 300; g < 400; g++) { - BOOST_CHECK_EQUAL(porv[g], multpv[g] * grid.getCellVolume(g) * poro[g] * ntg[g]); - BOOST_CHECK_EQUAL(porv[g], 0.40); - BOOST_CHECK_EQUAL(poro[g], 0.10); - BOOST_CHECK_EQUAL(ntg[g], 1.0); - BOOST_CHECK_EQUAL(multpv[g], 4.0); - } - - // k = 4: poro * V * MULTREGP - for (std::size_t g = 400; g < 500; g++) { - BOOST_CHECK_EQUAL(porv[g], grid.getCellVolume(g) * poro[g] * 5.0); - BOOST_CHECK_EQUAL(porv[g], 0.50); - BOOST_CHECK_EQUAL(poro[g], 0.10); - } - - std::vector actnum(500, 1); - actnum[0] = 0; - grid.resetACTNUM(actnum); - - fpm.reset_actnum(actnum); - auto porv_global = fpm.porv(true); - auto porv_active = fpm.porv(false); - BOOST_CHECK_EQUAL( porv_active.size(), grid.getNumActive()); - BOOST_CHECK_EQUAL( porv_global.size(), grid.getCartesianSize()); - BOOST_CHECK_EQUAL( porv_global[0], 0); - for (std::size_t g = 1; g < grid.getCartesianSize(); g++) { - BOOST_CHECK_EQUAL(porv_active[g - 1], porv_global[g]); - BOOST_CHECK_EQUAL(porv_global[g], porv[g]); - } -} - - -BOOST_AUTO_TEST_CASE(LATE_GET_SATFUNC) { - const char* deckString = - "RUNSPEC\n" - "\n" - "OIL\n" - "GAS\n" - "WATER\n" - "TABDIMS\n" - "3 /\n" - "\n" - "METRIC\n" - "\n" - "DIMENS\n" - "3 3 3 /\n" - "\n" - "GRID\n" - "\n" - "PERMX\n" - " 27*1000 /\n" - "MAXVALUE\n" - " PERMX 100 4* 1 1/\n" - "/\n" - "MINVALUE\n" - " PERMX 10000 4* 3 3/\n" - "/\n" - "ACTNUM\n" - " 0 8*1 0 8*1 0 8*1 /\n" - "DXV\n" - "1 1 1 /\n" - "\n" - "DYV\n" - "1 1 1 /\n" - "\n" - "DZV\n" - "1 1 1 /\n" - "\n" - "TOPS\n" - "9*100 /\n" - "\n" - "PORO \n" - " 27*0.15 /\n" - "PROPS\n" - "\n" - "SWOF\n" - // table 1 - // S_w k_r,w k_r,o p_c,ow - " 0.1 0 1.0 2.0\n" - " 0.15 0 0.9 1.0\n" - " 0.2 0.01 0.5 0.5\n" - " 0.93 0.91 0.0 0.0\n" - "/\n" - // table 2 - // S_w k_r,w k_r,o p_c,ow - " 0.00 0 1.0 2.0\n" - " 0.05 0.01 1.0 2.0\n" - " 0.10 0.02 0.9 1.0\n" - " 0.15 0.03 0.5 0.5\n" - " 0.852 1.00 0.0 0.0\n" - "/\n" - // table 3 - // S_w k_r,w k_r,o p_c,ow - " 0.00 0.00 0.9 2.0\n" - " 0.05 0.02 0.8 1.0\n" - " 0.10 0.03 0.5 0.5\n" - " 0.801 1.00 0.0 0.0\n" - "/\n" - "\n" - "SGOF\n" - // table 1 - // S_g k_r,g k_r,o p_c,og - " 0.00 0.00 0.9 2.0\n" - " 0.05 0.02 0.8 1.0\n" - " 0.10 0.03 0.5 0.5\n" - " 0.80 1.00 0.0 0.0\n" - "/\n" - // table 2 - // S_g k_r,g k_r,o p_c,og - " 0.05 0.00 1.0 2\n" - " 0.10 0.02 0.9 1\n" - " 0.15 0.03 0.5 0.5\n" - " 0.85 1.00 0.0 0\n" - "/\n" - // table 3 - // S_g k_r,g k_r,o p_c,og - " 0.1 0 1.0 2\n" - " 0.15 0 0.9 1\n" - " 0.2 0.01 0.5 0.5\n" - " 0.9 0.91 0.0 0\n" - "/\n" - "\n" - "REGIONS\n" - "\n" - "SATNUM\n" - "9*1 9*2 9*3 /\n" - "\n" - "IMBNUM\n" - "9*3 9*2 9*1 /\n" - "\n" - "SOLUTION\n" - "\n" - "SCHEDULE\n"; - - Opm::Parser parser; - - auto deck = parser.parseString(deckString); - Opm::TableManager tm(deck); - Opm::EclipseGrid eg(deck); - Opm::FieldPropsManager fp(deck, Phases{true, true, true}, eg, tm); - - const auto& fp_swu = fp.get_global_double("SWU"); - BOOST_CHECK_EQUAL(fp_swu[1 + 0 * 3*3], 0.93); - BOOST_CHECK_EQUAL(fp_swu[1 + 1 * 3*3], 0.852); - BOOST_CHECK_EQUAL(fp_swu[1 + 2 * 3*3], 0.801); - - const auto& fp_sgu = fp.get_global_double("ISGU"); - BOOST_CHECK_EQUAL(fp_sgu[1 + 0 * 3*3], 0.9); - BOOST_CHECK_EQUAL(fp_sgu[1 + 1 * 3*3], 0.85); - BOOST_CHECK_EQUAL(fp_sgu[1 + 2 * 3*3], 0.80); - -} - -BOOST_AUTO_TEST_CASE(GET_TEMP) { - std::string deck_string = R"( -GRID - -PORO - 200*0.15 / - -)"; - - EclipseGrid grid(10,10, 2); - Deck deck = Parser{}.parseString(deck_string); - std::vector actnum(200, 1); actnum[0] = 0; - grid.resetACTNUM(actnum); - FieldPropsManager fpm(deck, Phases{true, true, true}, grid, TableManager()); - - BOOST_CHECK(!fpm.has_double("NTG")); - const auto& ntg = fpm.get_copy("NTG"); - BOOST_CHECK(!fpm.has_double("NTG")); - BOOST_CHECK(ntg.size() == grid.getNumActive()); - - - BOOST_CHECK(fpm.has_double("PORO")); - const auto& poro1 = fpm.get_copy("PORO"); - BOOST_CHECK(fpm.has_double("PORO")); - const auto& poro2 = fpm.get_copy("PORO"); - BOOST_CHECK(fpm.has_double("PORO")); - BOOST_CHECK( poro1 == poro2 ); - BOOST_CHECK( &poro1 != &poro2 ); - BOOST_CHECK( poro1.size() == grid.getNumActive()); - - BOOST_CHECK(!fpm.has_int("SATNUM")); - const auto& satnum = fpm.get_copy("SATNUM", true); - BOOST_CHECK(!fpm.has_int("SATNUM")); - BOOST_CHECK(satnum.size() == grid.getCartesianSize()); - - //The PERMY keyword can not be default initialized - BOOST_CHECK_THROW(fpm.get_copy("PERMY"), std::out_of_range); -} - -BOOST_AUTO_TEST_CASE(GET_TEMPI) { - std::string deck_string = R"( -RUNSPEC - -EQLDIMS -/ -PROPS - -RTEMPVD - 0.5 0 - 1.5 100 / - - -)"; - - EclipseGrid grid(1,1, 2); - Deck deck = Parser{}.parseString(deck_string); - Opm::TableManager tm(deck); - FieldPropsManager fpm(deck, Phases{true, true, true}, grid, tm); - - const auto& tempi = fpm.get_double("TEMPI"); - double celcius_offset = 273.15; - BOOST_CHECK_CLOSE( tempi[0], 0 + celcius_offset , 1e-6); - BOOST_CHECK_CLOSE( tempi[1], 100 + celcius_offset , 1e-6); -} - -BOOST_AUTO_TEST_CASE(GridAndEdit) { - const std::string deck_string = R"( -RUNSPEC - -GRID -MULTZ - 125*2 / -MULTX - 125*2 / -MULTX - 125*2 / -PORO - 125*0.15 / -EDIT -MULTZ - 125*2 / -)"; - - Opm::Parser parser; - Opm::Deck deck = parser.parseString(deck_string); - Opm::EclipseGrid grid(5,5,5); - Opm::TableManager tm(deck); - FieldPropsManager fpm(deck, Phases{true, true, true}, grid, tm); - - const auto& multz = fpm.get_double("MULTZ"); - const auto& multx = fpm.get_double("MULTX"); - BOOST_CHECK_EQUAL( multz[0], 4 ); - BOOST_CHECK_EQUAL( multx[0], 2 ); -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/FoamTests.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/FoamTests.cpp deleted file mode 100644 index cd1f569ef9..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/FoamTests.cpp +++ /dev/null @@ -1,199 +0,0 @@ -/* - Copyright 2019 SINTEF Digital, Mathematics and Cybernetics. - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#define BOOST_TEST_MODULE FoamTests - -#include - -#include -#include -#include - - -using namespace Opm; - - -static Deck createDeck() { - // Using a raw string literal with xxx as delimiter. - const char *deckData = R"xxx( -RUNSPEC - -DIMENS - 10 10 10 / -TABDIMS -3 / -GRID -DX -1000*0.25 / -DY -1000*0.25 / -DZ -1000*0.25 / -TOPS -100*0.25 / -FAULTS - 'F1' 1 1 1 4 1 4 'X' / - 'F2' 5 5 1 4 1 4 'X-' / -/ -MULTFLT - 'F1' 0.50 / - 'F2' 0.50 / -/ -PORO - 1000*0.15/ -EDIT -MULTFLT / - 'F2' 0.25 / -/ -WATER - -OIL - -GAS - -FOAM - -TITLE -The title - -START -8 MAR 1998 / - -PROPS - -FOAMOPTS -GAS TAB / - -FOAMFSC -1 2 0.3 / -4 5 / -6 / - -FOAMROCK -1 2000 / -2 1800 / -2 2400 / - -REGIONS -SWAT -1000*1 / -SATNUM -1000*2 / -)xxx"; // End of raw string literal with xxx as delimiter. - Parser parser; - return parser.parseString( deckData ); -} - -static Deck createFailingDeck() { - // Using a raw string literal with xxx as delimiter. - const char *deckData = R"xxx( -RUNSPEC - -DIMENS - 10 10 10 / -TABDIMS -3 / -GRID -DX -1000*0.25 / -DY -1000*0.25 / -DZ -1000*0.25 / -TOPS -100*0.25 / -FAULTS - 'F1' 1 1 1 4 1 4 'X' / - 'F2' 5 5 1 4 1 4 'X-' / -/ -MULTFLT - 'F1' 0.50 / - 'F2' 0.50 / -/ -PORO - 1000*0.15/ -EDIT -MULTFLT / - 'F2' 0.25 / -/ -WATER - -OIL - -GAS - -FOAM - -TITLE -The title - -START -8 MAR 1998 / - -PROPS -FOAMFSC -1 2 0.3 / -4 5 / -6 / - --- This will fail, as FOAMROCK is missing - -REGIONS -SWAT -1000*1 / -SATNUM -1000*2 / -)xxx"; // End of raw string literal with xxx as delimiter. - Parser parser; - return parser.parseString( deckData ); -} - - - - -BOOST_AUTO_TEST_CASE(FoamConfigTest) { - auto deck = createDeck(); - EclipseState state(deck); - const FoamConfig& fc = state.getInitConfig().getFoamConfig(); - BOOST_REQUIRE_EQUAL(fc.size(), 3); - BOOST_CHECK_EQUAL(fc.getRecord(0).referenceSurfactantConcentration(), 1.0); - BOOST_CHECK_EQUAL(fc.getRecord(0).exponent(), 2.0); - BOOST_CHECK_EQUAL(fc.getRecord(0).minimumSurfactantConcentration(), 0.3); - BOOST_CHECK(fc.getRecord(0).allowDesorption()); - BOOST_CHECK_EQUAL(fc.getRecord(0).rockDensity(), 2000.0); - - BOOST_CHECK_EQUAL(fc.getRecord(1).referenceSurfactantConcentration(), 4.0); - BOOST_CHECK_EQUAL(fc.getRecord(1).exponent(), 5.0); - BOOST_CHECK_EQUAL(fc.getRecord(1).minimumSurfactantConcentration(), 1e-20); // Defaulted. - BOOST_CHECK(!fc.getRecord(1).allowDesorption()); - BOOST_CHECK_EQUAL(fc.getRecord(1).rockDensity(), 1800.0); - - BOOST_CHECK_EQUAL(fc.getRecord(2).referenceSurfactantConcentration(), 6.0); - BOOST_CHECK_EQUAL(fc.getRecord(2).exponent(), 1.0); // Defaulted. - BOOST_CHECK_EQUAL(fc.getRecord(2).minimumSurfactantConcentration(), 1e-20); // Defaulted. - BOOST_CHECK(!fc.getRecord(2).allowDesorption()); - BOOST_CHECK_EQUAL(fc.getRecord(2).rockDensity(), 2400.0); -} - -BOOST_AUTO_TEST_CASE(FoamConfigFailureTest) { - auto deck = createFailingDeck(); - BOOST_CHECK_THROW(EclipseState state(deck), std::runtime_error); -} - diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/FunctionalTests.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/FunctionalTests.cpp deleted file mode 100644 index 3ec90dd592..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/FunctionalTests.cpp +++ /dev/null @@ -1,123 +0,0 @@ -/* - Copyright 2016 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ -#define BOOST_TEST_MODULE FunctionalTests - -#include -#include -#include - -#include - -#include - - -using namespace Opm; - - -BOOST_AUTO_TEST_CASE(TestMap) { - std::map m = { {"C", 3}, {"B" , 2} , {"A" , 1}}; - std::vector keys_expected = {"A" , "B" , "C"}; - auto keys = fun::map( [] ( const std::pair& pair) { return pair.first; } , m); - - BOOST_CHECK_EQUAL_COLLECTIONS(keys.begin(), keys.end(), - keys_expected.begin(), keys_expected.end()); -} - - -BOOST_AUTO_TEST_CASE(TestConcat) { - std::vector> vector_of_vectors = {{1},{2,2},{3,3,3}}; - auto conc = fun::concat( std::move(vector_of_vectors) ); - std::vector expected = {1,2,2,3,3,3}; - - BOOST_CHECK_EQUAL_COLLECTIONS(conc.begin(), conc.end(), - expected.begin(), expected.end()); -} - - -BOOST_AUTO_TEST_CASE(TestConcatMap) { - std::vector input = {1,2,3}; - auto conc = fun::concat( fun::map( []( int x ) { return std::vector( x,x ); } , input)); - - std::vector expected = {1,2,2,3,3,3}; - BOOST_CHECK_EQUAL_COLLECTIONS(conc.begin(), conc.end(), - expected.begin(), expected.end()); - -} - - - -BOOST_AUTO_TEST_CASE(iotaEqualCollections) { - std::vector< int > vec( 5 ); - - for( int i = 0; i < 5; ++i ) - vec[ i ] = i; - - fun::iota iota( 5 ); - for( auto x : iota ) - std::cout << x << " "; - std::cout << std::endl; - std::vector< int > vec_iota( iota.begin(), iota.end() ); - - BOOST_CHECK_EQUAL_COLLECTIONS( - vec_iota.begin(), vec_iota.end(), - vec.begin(), vec.end() ); - BOOST_CHECK_EQUAL_COLLECTIONS( - vec_iota.begin(), vec_iota.end(), - fun::iota( 5 ).begin(), fun::iota( 5 ).end() ); - BOOST_CHECK_EQUAL_COLLECTIONS( - vec.begin(), vec.end(), - fun::iota( 5 ).begin(), fun::iota( 5 ).end() ); -} - -BOOST_AUTO_TEST_CASE(iotaForeach) { - /* this test is mostly a syntax verification test */ - - std::vector< int > vec = { 0, 1, 2, 3, 4 }; - - for( auto x : fun::iota( 5 ) ) - BOOST_CHECK_EQUAL( vec[ x ], x ); -} - -BOOST_AUTO_TEST_CASE(iotaSize) { - BOOST_CHECK_EQUAL( 5, fun::iota( 5 ).size() ); - BOOST_CHECK_EQUAL( 5, fun::iota( 1, 6 ).size() ); - BOOST_CHECK_EQUAL( 0, fun::iota( 0 ).size() ); - BOOST_CHECK_EQUAL( 0, fun::iota( 0, 0 ).size() ); -} - -BOOST_AUTO_TEST_CASE(iotaWithMap) { - const auto plus1 = []( int x ) { return x + 1; }; - - std::vector< int > vec = { 1, 2, 3, 4, 5 }; - auto vec_iota = fun::map( plus1, fun::iota( 5 ) ); - - BOOST_CHECK_EQUAL_COLLECTIONS( - vec_iota.begin(), vec_iota.end(), - vec.begin(), vec.end() ); -} - -BOOST_AUTO_TEST_CASE(iotaNegativeBegin) { - const auto vec = { -4, -3, -2, -1, 0 }; - - fun::iota iota( -4, 1 ); - - BOOST_CHECK_EQUAL_COLLECTIONS( - vec.begin(), vec.end(), - iota.begin(), iota.end() ); -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/GeomodifierTests.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/GeomodifierTests.cpp deleted file mode 100644 index fb8ac3a1b4..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/GeomodifierTests.cpp +++ /dev/null @@ -1,116 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include -#include -#include -#define BOOST_TEST_MODULE GeoModifiersTests -#include - - -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -using namespace Opm; - - -BOOST_AUTO_TEST_CASE( CheckUnsoppertedInSCHEDULE ) { - const char * deckString = - "START\n" - " 10 'JAN' 2000 /\n" - "RUNSPEC\n" - "DIMENS\n" - " 10 10 10 / \n" - "GRID\n" - "DX\n" - "1000*0.25 /\n" - "DY\n" - "1000*0.25 /\n" - "DZ\n" - "1000*0.25 /\n" - "TOPS\n" - "100*0.25 /\n" - "SCHEDULE\n" - "TSTEP -- 1,2\n" - " 10 10/\n" - "MULTFLT\n" - " 'F1' 100 /\n" - "/\n" - "MULTFLT\n" - " 'F2' 77 /\n" - "/\n" - "TSTEP -- 3,4\n" - " 10 10/\n" - "\n"; - - auto python = std::make_shared(); - Parser parser(true); - ParseContext parseContext; - ErrorGuard errors; - auto deck = parser.parseString( deckString, parseContext, errors); - EclipseGrid grid( deck ); - TableManager table ( deck ); - FieldPropsManager fp( deck, Phases{true, true, true}, grid, table); - - parseContext.update( ParseContext::UNSUPPORTED_SCHEDULE_GEO_MODIFIER , InputError::IGNORE ); - { - Runspec runspec ( deck ); - Schedule schedule( deck, grid , fp, runspec , parseContext, errors, python); - auto events = schedule.getEvents( ); - BOOST_CHECK_EQUAL( false , events.hasEvent( ScheduleEvents::GEO_MODIFIER , 1 )); - BOOST_CHECK_EQUAL( true , events.hasEvent( ScheduleEvents::GEO_MODIFIER , 2 )); - BOOST_CHECK_EQUAL( false , events.hasEvent( ScheduleEvents::GEO_MODIFIER , 3 )); - - - BOOST_CHECK_EQUAL( 0U, schedule.getModifierDeck(1).size() ); - BOOST_CHECK_EQUAL( 0U, schedule.getModifierDeck(3).size() ); - - const Deck& multflt_deck = schedule.getModifierDeck(2); - BOOST_CHECK_EQUAL( 2U , multflt_deck.size()); - BOOST_CHECK( multflt_deck.hasKeyword() ); - - const auto& multflt1 = multflt_deck.getKeyword(0); - BOOST_CHECK_EQUAL( 1U , multflt1.size( ) ); - - const auto& record0 = multflt1.getRecord( 0 ); - BOOST_CHECK_EQUAL( 100.0 , record0.getItem().get< double >(0)); - BOOST_CHECK_EQUAL( "F1" , record0.getItem().get< std::string >(0)); - - const auto& multflt2 = multflt_deck.getKeyword(1); - BOOST_CHECK_EQUAL( 1U , multflt2.size( ) ); - - const auto& record1 = multflt2.getRecord( 0 ); - BOOST_CHECK_EQUAL( 77.0 , record1.getItem().get< double >(0)); - BOOST_CHECK_EQUAL( "F2" , record1.getItem().get< std::string >(0)); - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/GroupTests.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/GroupTests.cpp deleted file mode 100644 index 943cf8dd4d..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/GroupTests.cpp +++ /dev/null @@ -1,539 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include -#include -#include - -#define BOOST_TEST_MODULE GroupTests -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -using namespace Opm; - - -Opm::Schedule create_schedule(const std::string& deck_string) { - Opm::Parser parser; - auto python = std::make_shared(); - auto deck = parser.parseString(deck_string); - EclipseGrid grid(10,10,10); - TableManager table ( deck ); - FieldPropsManager fp( deck, Phases{true, true, true}, grid, table); - Runspec runspec (deck ); - return Opm::Schedule(deck, grid, fp, runspec, python); -} - - -BOOST_AUTO_TEST_CASE(CreateGroup_CorrectNameAndDefaultValues) { - Opm::Group group("G1" , 1, 0, 0, UnitSystem::newMETRIC()); - BOOST_CHECK_EQUAL( "G1" , group.name() ); -} - - -BOOST_AUTO_TEST_CASE(CreateGroupCreateTimeOK) { - Opm::Group group("G1" , 1, 5, 0, UnitSystem::newMETRIC()); - BOOST_CHECK_EQUAL( false, group.defined( 4 )); - BOOST_CHECK_EQUAL( true, group.defined( 5 )); - BOOST_CHECK_EQUAL( true, group.defined( 6 )); -} - - - -BOOST_AUTO_TEST_CASE(CreateGroup_SetInjectorProducer_CorrectStatusSet) { - Opm::Group group1("IGROUP" , 1, 0, 0, UnitSystem::newMETRIC()); - Opm::Group group2("PGROUP" , 2, 0, 0, UnitSystem::newMETRIC()); - - group1.setProductionGroup(); - BOOST_CHECK(group1.isProductionGroup()); - BOOST_CHECK(!group1.isInjectionGroup()); - - group2.setInjectionGroup(); - BOOST_CHECK(!group2.isProductionGroup()); - BOOST_CHECK(group2.isInjectionGroup()); -} - - - - - - - - -BOOST_AUTO_TEST_CASE(GroupDoesNotHaveWell) { - Opm::Group group("G1" , 1, 0, 0, UnitSystem::newMETRIC()); - - BOOST_CHECK_EQUAL(false , group.hasWell("NO")); - BOOST_CHECK_EQUAL(0U , group.numWells()); -} - - - - -BOOST_AUTO_TEST_CASE(createDeckWithGEFAC) { - std::string input = - "START -- 0 \n" - "19 JUN 2007 / \n" - "SCHEDULE\n" - - "WELSPECS\n" - " 'B-37T2' 'PRODUC' 9 9 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / \n" - " 'B-43A' 'PRODUC' 8 8 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / \n" - "/\n" - - "COMPDAT\n" - " 'B-37T2' 9 9 1 1 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / \n" - " 'B-43A' 8 8 2 2 'OPEN' 1* 46.825 0.311 4332.346 1* 1* 'X' 22.123 / \n" - "/\n" - - "GEFAC\n" - " 'PRODUC' 0.85 / \n" - "/\n"; - - auto schedule = create_schedule(input); - - auto group_names = schedule.groupNames("PRODUC"); - BOOST_CHECK_EQUAL(group_names.size(), 1); - BOOST_CHECK_EQUAL(group_names[0], "PRODUC"); - - const auto& group1 = schedule.getGroup("PRODUC", 0); - BOOST_CHECK_EQUAL(group1.getGroupEfficiencyFactor(), 0.85); - BOOST_CHECK(group1.getTransferGroupEfficiencyFactor()); -} - - - -BOOST_AUTO_TEST_CASE(createDeckWithWGRUPCONandWCONPROD) { - - /* Test deck with well guide rates for group control: - GRUPCON (well guide rates for group control) - WCONPROD (conrol data for production wells) with GRUP control mode */ - std::string input = - "START -- 0 \n" - "19 JUN 2007 / \n" - "SCHEDULE\n" - - "WELSPECS\n" - " 'B-37T2' 'PRODUC' 9 9 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / \n" - " 'B-43A' 'PRODUC' 8 8 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / \n" - "/\n" - - "COMPDAT\n" - " 'B-37T2' 9 9 1 1 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / \n" - " 'B-43A' 8 8 2 2 'OPEN' 1* 46.825 0.311 4332.346 1* 1* 'X' 22.123 / \n" - "/\n" - - - "WGRUPCON\n" - " 'B-37T2' YES 30 OIL / \n" - " 'B-43A' YES 30 OIL / \n" - "/\n" - - "WCONPROD\n" - " 'B-37T2' 'OPEN' 'GRUP' 1000 2* 2000.000 2* 1* 10 200000.000 5* / / \n" - " 'B-43A' 'OPEN' 'GRUP' 1200 2* 3000.000 2* 1* 11 0.000 5* / / \n" - "/\n"; - - - - auto schedule = create_schedule(input); - const auto& currentWell = schedule.getWell("B-37T2", 0); - const Opm::Well::WellProductionProperties& wellProductionProperties = currentWell.getProductionProperties(); - BOOST_CHECK(wellProductionProperties.controlMode == Opm::Well::ProducerCMode::GRUP); - - BOOST_CHECK_EQUAL(currentWell.isAvailableForGroupControl(), true); - BOOST_CHECK_EQUAL(currentWell.getGuideRate(), 30); - BOOST_CHECK(currentWell.getGuideRatePhase() == Opm::Well::GuideRateTarget::OIL); - BOOST_CHECK_EQUAL(currentWell.getGuideRateScalingFactor(), 1.0); -} - - - - - -BOOST_AUTO_TEST_CASE(createDeckWithGRUPNET) { - std::string input = - "START -- 0 \n" - "31 AUG 1993 / \n" - "SCHEDULE\n" - - "GRUPNET \n" - " 'FIELD' 20.000 5* / \n" - " 'PROD' 20.000 5* / \n" - " 'MANI-B2' 1* 8 1* 'NO' 2* / \n" - " 'MANI-B1' 1* 8 1* 'NO' 2* / \n" - " 'MANI-K1' 1* 9999 4* / \n" - " 'B1-DUMMY' 1* 9999 4* / \n" - " 'MANI-D1' 1* 8 1* 'NO' 2* / \n" - " 'MANI-D2' 1* 8 1* 'NO' 2* / \n" - " 'MANI-K2' 1* 9999 4* / \n" - " 'D2-DUMMY' 1* 9999 4* / \n" - " 'MANI-E1' 1* 9 1* 'NO' 2* / \n" - " 'MANI-E2' 1* 9 4* / \n" - "/\n"; - - - auto schedule = create_schedule(input); - - const auto& group1 = schedule.getGroup("PROD", 0); - const auto& group2 = schedule.getGroup("MANI-E2", 0); - const auto& group3 = schedule.getGroup("MANI-K1", 0); - BOOST_CHECK_EQUAL(group1.getGroupNetVFPTable(), 0); - BOOST_CHECK_EQUAL(group2.getGroupNetVFPTable(), 9); - BOOST_CHECK_EQUAL(group3.getGroupNetVFPTable(), 9999); -} - - -BOOST_AUTO_TEST_CASE(GroupCreate) { - Opm::Group g1("NAME", 1, 1, 0, UnitSystem::newMETRIC()); - Opm::Group g2("NAME", 1, 1, 0, UnitSystem::newMETRIC()); - - BOOST_CHECK( g1.addWell("W1") ); - BOOST_CHECK( !g1.addWell("W1") ); - BOOST_CHECK( g1.addWell("W2") ); - BOOST_CHECK( g1.hasWell("W1")); - BOOST_CHECK( g1.hasWell("W2")); - BOOST_CHECK( !g1.hasWell("W3")); - BOOST_CHECK_EQUAL( g1.numWells(), 2); - BOOST_CHECK_THROW(g1.delWell("W3"), std::invalid_argument); - BOOST_CHECK_NO_THROW(g1.delWell("W1")); - BOOST_CHECK_EQUAL( g1.numWells(), 1); - - - BOOST_CHECK( g2.addGroup("G1") ); - BOOST_CHECK( !g2.addGroup("G1") ); - BOOST_CHECK( g2.addGroup("G2") ); - - // The children must be either all wells - or all groups. - BOOST_CHECK_THROW(g1.addGroup("G1"), std::logic_error); - BOOST_CHECK_THROW(g2.addWell("W1"), std::logic_error); -} - -BOOST_AUTO_TEST_CASE(createDeckWithGCONPROD) { - std::string input = R"( - START -- 0 - 31 AUG 1993 / - SCHEDULE - - GRUPTREE - 'G1' 'FIELD' / - 'G2' 'FIELD' / - / - - GCONPROD - 'G1' 'ORAT' 10000 3* 'CON' / - 'G2' 'RESV' 10000 3* 'CON' / - /)"; - - auto schedule = create_schedule(input); - SummaryState st(std::chrono::system_clock::now()); - - const auto& group1 = schedule.getGroup("G1", 0); - const auto& group2 = schedule.getGroup("G2", 0); - - auto ctrl1 = group1.productionControls(st); - auto ctrl2 = group2.productionControls(st); - - BOOST_CHECK(ctrl1.exceed_action == Group::ExceedAction::RATE); - BOOST_CHECK(ctrl2.exceed_action == Group::ExceedAction::CON); -} - - -BOOST_AUTO_TEST_CASE(TESTGuideRateModel) { - Opm::GuideRateModel grc_default; - BOOST_CHECK_THROW(Opm::GuideRateModel(0.0,GuideRateModel::Target::OIL, -5,0,0,0,0,0,true,1,true), std::invalid_argument); - BOOST_CHECK_THROW(grc_default.eval(1,0.50,0.50), std::invalid_argument); - - Opm::GuideRateModel grc_delay(10, GuideRateModel::Target::OIL, 1,1,0,0,0,0,true,1,true); - BOOST_CHECK_NO_THROW(grc_delay.eval(1.0, 0.5, 0.5)); -} - -BOOST_AUTO_TEST_CASE(TESTGuideRateLINCOM) { - std::string input = R"( - START -- 0 - 31 AUG 1993 / - SCHEDULE - - GRUPTREE - 'G1' 'FIELD' / - 'G2' 'FIELD' / - / - - GCONPROD - 'G1' 'ORAT' 10000 3* 'CON' / - 'G2' 'RESV' 10000 3* 'CON' / - / - - GUIDERAT - 1* 'COMB' 1.0 1.0 / - - LINCOM - 1 2 'WWCT:OPX' / - - )"; - - - /* The 'COMB' target mode is not supported */ - BOOST_CHECK_THROW(create_schedule(input), std::logic_error); -} - -BOOST_AUTO_TEST_CASE(TESTGuideRate) { - std::string input = R"( - START -- 0 - 31 AUG 1993 / - SCHEDULE - - GRUPTREE - 'G1' 'FIELD' / - 'G2' 'FIELD' / - / - - GCONPROD - 'G1' 'ORAT' 10000 3* 'CON' / - 'G2' 'RESV' 10000 3* 'CON' / - / - - GUIDERAT - 1* 'OIL' 1.0 1.0 / - - LINCOM - 1 2 'WWCT:OPX' / - - TSTEP - 1 1 1 1 1 1 1 1 1 1 1 / - )"; - - auto schedule = create_schedule(input); - GuideRate gr(schedule); -} - -BOOST_AUTO_TEST_CASE(TESTGCONSALE) { - std::string input = R"( - START -- 0 - 31 AUG 1993 / - SCHEDULE - - GRUPTREE - 'G1' 'FIELD' / - 'G2' 'FIELD' / - / - - GCONSALE - 'G1' 50000 55000 45000 WELL / - / - - GCONSUMP - 'G1' 20 50 'a_node' / - 'G2' 30 60 / - / - - )"; - - auto schedule = create_schedule(input); - double metric_to_si = 1.0 / (24.0 * 3600.0); //cubic meters / day - - const auto& gconsale = schedule.gConSale(0); - BOOST_CHECK_EQUAL(gconsale.size(), 1); - BOOST_CHECK(gconsale.has("G1")); - BOOST_CHECK(!gconsale.has("G2")); - const GConSale::GCONSALEGroup& group = gconsale.get("G1"); - BOOST_CHECK_EQUAL(group.sales_target.get(), 50000); - BOOST_CHECK_EQUAL(group.max_sales_rate.get(), 55000); - BOOST_CHECK_EQUAL(group.min_sales_rate.get(), 45000); - BOOST_CHECK_EQUAL(group.sales_target.getSI(), 50000 * metric_to_si); - BOOST_CHECK_EQUAL(group.max_sales_rate.getSI(), 55000 * metric_to_si); - BOOST_CHECK_EQUAL(group.min_sales_rate.getSI(), 45000 * metric_to_si); - BOOST_CHECK(group.max_proc == GConSale::MaxProcedure::WELL); - - const auto& gconsump = schedule.gConSump(0); - BOOST_CHECK_EQUAL(gconsump.size(), 2); - BOOST_CHECK(gconsump.has("G1")); - BOOST_CHECK(gconsump.has("G2")); - const GConSump::GCONSUMPGroup group1 = gconsump.get("G1"); - BOOST_CHECK_EQUAL(group1.consumption_rate.get(), 20); - BOOST_CHECK_EQUAL(group1.import_rate.get(), 50); - BOOST_CHECK_EQUAL(group1.consumption_rate.getSI(), 20 * metric_to_si); - BOOST_CHECK_EQUAL(group1.import_rate.getSI(), 50 * metric_to_si); - BOOST_CHECK( group1.network_node == "a_node" ); - - const GConSump::GCONSUMPGroup group2 = gconsump.get("G2"); - BOOST_CHECK_EQUAL( group2.network_node.size(), 0 ); - - - -} - -BOOST_AUTO_TEST_CASE(GCONINJE_MULTIPLE_PHASES) { - std::string input = R"( - START -- 0 - 31 AUG 1993 / - SCHEDULE - - GRUPTREE - 'G1' 'FIELD' / - 'G2' 'FIELD' / - / - - GCONINJE - 'G1' 'WATER' 1* 1000 / - 'G1' 'GAS' 1* 1* 2000 / - 'G2' 'WATER' 1* 1000 / - / - - TSTEP - 10 / - - GCONINJE - 'G2' 'WATER' 1* 1000 / - 'G2' 'GAS' 1* 1* 2000 2* 'NO' / - 'G1' 'GAS' 1* 1000 / - / - - )"; - - auto schedule = create_schedule(input); - SummaryState st(std::chrono::system_clock::now()); - // Step 0 - { - const auto& g1 = schedule.getGroup("G1", 0); - BOOST_CHECK( g1.hasInjectionControl(Phase::WATER)); - BOOST_CHECK( g1.hasInjectionControl(Phase::GAS)); - BOOST_CHECK( !g1.hasInjectionControl(Phase::OIL)); - - BOOST_CHECK( g1.injectionGroupControlAvailable(Phase::WATER) ); - BOOST_CHECK( g1.injectionGroupControlAvailable(Phase::GAS) ); - BOOST_CHECK( g1.productionGroupControlAvailable() ); - - g1.injectionControls(Phase::WATER, st); - g1.injectionControls(Phase::GAS, st); - BOOST_CHECK_THROW(g1.injectionControls(Phase::OIL, st), std::out_of_range); - - BOOST_CHECK(g1.has_topup_phase()); - BOOST_CHECK(Phase::GAS == g1.topup_phase()); - } - { - const auto& g2 = schedule.getGroup("G2", 0); - BOOST_CHECK(!g2.has_topup_phase()); - BOOST_CHECK_THROW(g2.topup_phase(), std::logic_error); - BOOST_CHECK( g2.injectionGroupControlAvailable(Phase::WATER) ); - } - // Step 1 - { - const auto& g2 = schedule.getGroup("G2", 1); - BOOST_CHECK( g2.hasInjectionControl(Phase::WATER)); - BOOST_CHECK( g2.hasInjectionControl(Phase::GAS)); - BOOST_CHECK( !g2.hasInjectionControl(Phase::OIL)); - BOOST_CHECK( !g2.injectionGroupControlAvailable(Phase::GAS) ); - - g2.injectionControls(Phase::WATER, st); - g2.injectionControls(Phase::GAS, st); - BOOST_CHECK_THROW(g2.injectionControls(Phase::OIL, st), std::out_of_range); - - BOOST_CHECK(g2.has_topup_phase()); - BOOST_CHECK(Phase::GAS == g2.topup_phase()); - } - { - const auto& g1 = schedule.getGroup("G1", 1); - BOOST_CHECK(!g1.has_topup_phase()); - BOOST_CHECK_THROW(g1.topup_phase(), std::logic_error); - } -} - -BOOST_AUTO_TEST_CASE(GCONINJE_GCONPROD) { - std::string input = R"( - START -- 0 - 31 AUG 1993 / - SCHEDULE - - GRUPTREE - 'G1' 'FIELD' / - 'G2' 'FIELD' / - / - - GCONPROD - 'G1' 'ORAT' 10000 3* 'CON' 'NO'/ - 'G2' 'ORAT' 10000 3* 'CON' / - / - - GCONINJE - 'G1' 'WATER' 1* 1000 / - 'G2' 'WATER' 1* 1* 2000 1* 1* 'NO'/ - / - - - TSTEP - 1 / - - GCONPROD - 'G1' 'ORAT' 10000 3* 'CON' / - 'G2' 'ORAT' 10000 3* 'CON' 'NO'/ - / - - GCONINJE - 'G1' 'WATER' 1* 1000 3* 'NO' / - 'G2' 'WATER' 1* 1* 2000 / - / - - )"; - - auto schedule = create_schedule(input); - { - const auto& f = schedule.getGroup("FIELD", 0); - const auto& g1 = schedule.getGroup("G1", 0); - const auto& g2 = schedule.getGroup("G2", 0); - - BOOST_CHECK(!f.productionGroupControlAvailable() ); - BOOST_CHECK(!f.injectionGroupControlAvailable(Phase::WATER)); - BOOST_CHECK(!f.injectionGroupControlAvailable(Phase::GAS)); - - BOOST_CHECK(!g1.productionGroupControlAvailable() ); - BOOST_CHECK( g2.productionGroupControlAvailable() ); - BOOST_CHECK( g1.injectionGroupControlAvailable(Phase::WATER)); - BOOST_CHECK(!g2.injectionGroupControlAvailable(Phase::WATER)); - BOOST_CHECK( g1.injectionGroupControlAvailable(Phase::GAS)); - BOOST_CHECK( g2.injectionGroupControlAvailable(Phase::GAS)); - } - { - const auto& g1 = schedule.getGroup("G1", 1); - const auto& g2 = schedule.getGroup("G2", 1); - - BOOST_CHECK( g1.productionGroupControlAvailable() ); - BOOST_CHECK(!g2.productionGroupControlAvailable() ); - BOOST_CHECK(!g1.injectionGroupControlAvailable(Phase::WATER)); - BOOST_CHECK( g2.injectionGroupControlAvailable(Phase::WATER)); - BOOST_CHECK( g1.injectionGroupControlAvailable(Phase::GAS)); - BOOST_CHECK( g2.injectionGroupControlAvailable(Phase::GAS)); - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/IOConfigTests.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/IOConfigTests.cpp deleted file mode 100644 index 8f9ce1f222..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/IOConfigTests.cpp +++ /dev/null @@ -1,280 +0,0 @@ -/* - Copyright 2015 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - - - -#define BOOST_TEST_MODULE IOConfigTests - -#include - -#include -#include -#include -#include -#include -#include - -using namespace Opm; - -const std::string& deckStr = "RUNSPEC\n" - "\n" - "DIMENS\n" - " 10 10 10 /\n" - "GRID\n" - "GRIDFILE\n" - " 0 1 /\n" - "\n" - "START\n" - " 21 MAY 1981 /\n" - "\n" - "SCHEDULE\n" - "DATES\n" - " 22 MAY 1981 /\n" // timestep 1 - " 23 MAY 1981 /\n" // timestep 2 - " 24 MAY 1981 /\n" // timestep 3 - " 25 MAY 1981 /\n" // timestep 4 - " 26 MAY 1981 /\n" // timestep 5 - " 1 JAN 1982 /\n" // timestep 6 - " 1 JAN 1982 13:55:44 /\n" // timestep 7 - " 3 JAN 1982 14:56:45.123 /\n" // timestep 8 - " 4 JAN 1982 14:56:45.123 /\n" // timestep 9 - " 5 JAN 1982 14:56:45.123 /\n" // timestep 10 - " 6 JAN 1982 14:56:45.123 /\n" // timestep 11 - " 7 JAN 1982 14:56:45.123 /\n" // timestep 12 - " 8 JAN 1982 14:56:45.123 /\n" // timestep 13 - " 9 JAN 1982 14:56:45.123 /\n" // timestep 14 - " 10 JAN 1982 14:56:45.123 /\n" // timestep 15 - " 11 JAN 1982 14:56:45.123 /\n" // timestep 16 - " 1 JAN 1983 /\n" // timestep 17 - " 2 JAN 1983 /\n" // timestep 18 - " 3 JAN 1983 /\n" // timestep 19 - " 1 JAN 1984 /\n" // timestep 20 - " 2 JAN 1984 /\n" // timestep 21 - " 1 JAN 1985 /\n" // timestep 22 - " 3 JAN 1986 14:56:45.123 /\n" // timestep 23 - " 4 JAN 1986 14:56:45.123 /\n" // timestep 24 - " 5 JAN 1986 14:56:45.123 /\n" // timestep 25 - " 1 JAN 1987 /\n" // timestep 26 - " 1 JAN 1988 /\n" // timestep 27 - " 2 JAN 1988 /\n" // timestep 28 - " 3 JAN 1988 /\n" // timestep 29 - " 1 JAN 1989 /\n" // timestep 30 - " 2 JAN 1989 /\n" // timestep 31 - " 2 JAN 1990 /\n" // timestep 32 - " 2 JAN 1991 /\n" // timestep 33 - " 3 JAN 1991 /\n" // timestep 34 - " 4 JAN 1991 /\n" // timestep 35 - " 1 JAN 1992 /\n" // timestep 36 - " 1 FEB 1992 /\n" // timestep 37 - " 1 MAR 1992 /\n" // timestep 38 - " 2 MAR 1992 /\n" // timestep 39 - " 3 MAR 1992 /\n" // timestep 40 - " 4 MAR 1992 /\n" // timestep 41 - " 1 APR 1992 /\n" // timestep 42 - " 2 APR 1992 /\n" // timestep 43 - " 1 MAY 1992 /\n" // timestep 44 - " 2 MAY 1992 /\n" // timestep 45 - " 3 MAY 1992 /\n" // timestep 46 - " 3 JUN 1992 /\n" // timestep 47 - " 3 JUL 1992 /\n" // timestep 48 - " 3 AUG 1992 /\n" // timestep 49 - " 4 AUG 1992 /\n" // timestep 50 - " 5 AUG 1992 /\n" // timestep 51 - " 6 AUG 1992 /\n" // timestep 52 - " 7 AUG 1992 /\n" // timestep 53 - " 8 AUG 1992 /\n" // timestep 54 - " 9 AUG 1992 /\n" // timestep 55 - " 10 AUG 1992 /\n" // timestep 56 - " 11 AUG 1992 /\n" // timestep 57 - " 12 AUG 1992 /\n" // timestep 58 - " 13 AUG 1992 /\n" // timestep 59 - " 14 AUG 1992 /\n" // timestep 60 - " 15 AUG 1992 /\n" // timestep 61 - "/\n" - "\n"; - -const std::string deckStr_RFT = "RUNSPEC\n" - "OIL\n" - "GAS\n" - "WATER\n" - "DIMENS\n" - " 10 10 10 /\n" - "GRID\n" - "DXV\n" - "10*0.25 /\n" - "DYV\n" - "10*0.25 /\n" - "DZV\n" - "10*0.25 /\n" - "TOPS\n" - "100*0.25 /\n" - "\n" - "START -- 0 \n" - "1 NOV 1979 / \n" - "SCHEDULE\n" - "DATES -- 1\n" - " 1 DES 1979/ \n" - "/\n" - "WELSPECS\n" - " 'OP_1' 'OP' 9 9 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / \n" - " 'OP_2' 'OP' 4 4 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / \n" - "/\n" - "COMPDAT\n" - " 'OP_1' 9 9 1 1 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / \n" - " 'OP_1' 9 9 2 2 'OPEN' 1* 46.825 0.311 4332.346 1* 1* 'X' 22.123 / \n" - " 'OP_1' 9 9 3 9 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / \n" - " 'OP_2' 4 4 4 9 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / \n" - "/\n" - "DATES -- 2\n" - " 10 OKT 2008 / \n" - "/\n" - "WRFT \n" - "/ \n" - "WELOPEN\n" - " 'OP_1' OPEN / \n" - " 'OP_2' OPEN / \n" - "/\n" - "DATES -- 3\n" - " 10 NOV 2008 / \n" - "/\n"; - - - - - - -BOOST_AUTO_TEST_CASE(DefaultProperties) { - const char* data = "RUNSPEC\n" - "DIMENS\n" - " 10 10 10 /\n" - "GRID\n" - "START\n" - " 21 MAY 1981 /\n" - "\n" - "SCHEDULE\n" - "RPTRST\n" - "'BASIC = 1'" - "/\n" - "DATES\n" - " 22 MAY 1981 /\n" - "/\n" - "RPTSCHED\n" - "RESTART=0\n" - "/\n" - "DATES\n" - " 23 MAY 1981 /\n" - " 24 MAY 1981 /\n" - " 23 MAY 1982 /\n" - " 24 MAY 1982 /\n" - " 24 MAY 1983 /\n" - " 25 MAY 1984 /\n" - " 26 MAY 1984 /\n" - " 26 MAY 1985 /\n" - " 27 MAY 1985 /\n" - " 1 JAN 1986 /\n" - "/\n"; - - auto deck = Parser().parseString( data); - IOConfig ioConfig( deck ); - RestartConfig rstConfig( TimeMap(deck), deck); - - /*If no GRIDFILE nor NOGGF keywords are specified, default output an EGRID file*/ - BOOST_CHECK( ioConfig.getWriteEGRIDFile() ); - /*If no INIT keyword is specified, verify no write of INIT file*/ - BOOST_CHECK( !ioConfig.getWriteINITFile() ); - /*If no UNIFIN keyword is specified, verify UNIFIN false (default is multiple) */ - BOOST_CHECK( !ioConfig.getUNIFIN() ); - /*If no UNIFOUT keyword is specified, verify UNIFOUT false (default is multiple) */ - BOOST_CHECK( !ioConfig.getUNIFOUT() ); - /*If no FMTIN keyword is specified, verify FMTIN false (default is unformatted) */ - BOOST_CHECK( !ioConfig.getFMTIN() ); - /*If no FMTOUT keyword is specified, verify FMTOUT false (default is unformatted) */ - BOOST_CHECK( !ioConfig.getFMTOUT() ); -} - -BOOST_AUTO_TEST_CASE(OutputProperties) { - const char* data = "RUNSPEC\n" - "UNIFIN\n" - "UNIFOUT\n" - "FMTIN\n" - "FMTOUT\n" - "DIMENS\n" - " 10 10 10 /\n" - "GRID\n" - "NOGGF\n" - "INIT\n" - "START\n" - " 21 MAY 1981 /\n" - "\n" - "SCHEDULE\n"; - - - auto deck = Parser().parseString( data ); - IOConfig ioConfig( deck ); - - BOOST_CHECK( !ioConfig.getWriteEGRIDFile() ); - /*If INIT keyword is specified, verify write of INIT file*/ - BOOST_CHECK( ioConfig.getWriteINITFile() ); - /*If UNIFOUT keyword is specified, verify unified write*/ - BOOST_CHECK( ioConfig.getUNIFOUT() ); - /*If FMTOUT keyword is specified, verify formatted write*/ - BOOST_CHECK( ioConfig.getFMTOUT() ); -} - -BOOST_AUTO_TEST_CASE(NoGRIDFILE) { - const char* data = "RUNSPEC\n" - "\n" - "DIMENS\n" - "10 10 10 /\n" - "GRID\n" - "GRIDFILE\n" - " 0 0 /\n" - "\n"; - - auto deck = Parser().parseString( data ); - IOConfig ioConfig( deck ); - - /*If GRIDFILE 0 0 is specified, no EGRID file is written */ - BOOST_CHECK( !ioConfig.getWriteEGRIDFile() ); -} - -BOOST_AUTO_TEST_CASE(OutputPaths) { - - IOConfig config1( "" ); - BOOST_CHECK_EQUAL("", config1.getBaseName() ); - - Deck deck2; - deck2.setDataFile( "testString.DATA" ); - IOConfig config2( deck2 ); - std::string output_dir2 = "."; - BOOST_CHECK_EQUAL( output_dir2, config2.getOutputDir() ); - BOOST_CHECK_EQUAL( "TESTSTRING", config2.getBaseName() ); - - namespace fs = Opm::filesystem; - - Deck deck3; - deck3.setDataFile( "/path/to/testString.DATA" ); - IOConfig config3( deck3 ); - std::string output_dir3 = "/path/to"; - config3.setOutputDir( output_dir3 ); - auto testpath = fs::path( "/path/to/TESTSTRING" ).make_preferred().string(); - BOOST_CHECK_EQUAL( output_dir3, config3.getOutputDir() ); - BOOST_CHECK_EQUAL( "TESTSTRING", config3.getBaseName() ); - BOOST_CHECK_EQUAL( testpath, config3.fullBasePath() ); -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/InitConfigTest.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/InitConfigTest.cpp deleted file mode 100644 index c1aa657924..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/InitConfigTest.cpp +++ /dev/null @@ -1,537 +0,0 @@ -/* - Copyright 2015 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#define BOOST_TEST_MODULE InitConfigTests - -#include - -#include -#include -#include -#include -#include -#include - -#include - -#include - -using namespace Opm; - -const std::string& deckStr = - "RUNSPEC\n" - "DIMENS\n" - " 10 10 10 /\n" - "SOLUTION\n" - "RESTART\n" - "BASE 5\n" - "/\n" - "GRID\n" - "START -- 0 \n" - "19 JUN 2007 / \n" - "SCHEDULE\n" - "SKIPREST \n"; - - -const std::string& deckStr2 = - "RUNSPEC\n" - "DIMENS\n" - " 10 10 10 /\n" - "SOLUTION\n" - "GRID\n" - "START -- 0 \n" - "19 JUN 2007 / \n" - "SCHEDULE\n"; - - -const std::string& deckStr3 = - "RUNSPEC\n" - "DIMENS\n" - " 10 10 10 /\n" - "SOLUTION\n" - "RESTART\n" - "BASE 5 SAVE UNFORMATTED /\n" - "GRID\n" - "START -- 0 \n" - "19 JUN 2007 / \n" - "SCHEDULE\n" - "SKIPREST \n"; - -const std::string& deckStr4 = - "RUNSPEC\n" - "DIMENS\n" - " 10 10 10 /\n" - "SOLUTION\n" - "RESTART\n" - "BASE 5 /\n" - "GRID\n" - "START -- 0 \n" - "19 JUN 2007 / \n" - "SCHEDULE\n"; - -const std::string& deckStr5 = - "RUNSPEC\n" - "DIMENS\n" - " 10 10 10 /\n" - "SOLUTION\n" - "RESTART\n" - "'/abs/path/BASE' 5 /\n" - "GRID\n" - "START -- 0 \n" - "19 JUN 2007 / \n" - "SCHEDULE\n"; - -const std::string& deckWithEquil = - "RUNSPEC\n" - "DIMENS\n" - " 10 10 10 /\n" - "EQLDIMS\n" - "1 100 20 1 1 /\n" - "SOLUTION\n" - "RESTART\n" - "BASE 5\n" - "/\n" - "EQUIL\n" - "2469 382.4 1705.0 0.0 500 0.0 1 1 20 /\n" - "GRID\n" - "START -- 0 \n" - "19 JUN 2007 / \n" - "SCHEDULE\n" - "SKIPREST \n"; - -static Deck createDeck(const std::string& input) { - Opm::Parser parser; - return parser.parseString(input); -} - -BOOST_AUTO_TEST_CASE(InitConfigTest) { - - Deck deck = createDeck(deckStr); - InitConfig cfg( deck ); - BOOST_CHECK_EQUAL(cfg.restartRequested(), true); - BOOST_CHECK_EQUAL(cfg.getRestartStep(), 5); - BOOST_CHECK_EQUAL(cfg.getRestartRootName(), "BASE"); - - Deck deck2 = createDeck(deckStr2); - InitConfig cfg2( deck2 ); - BOOST_CHECK_EQUAL(cfg2.restartRequested(), false); - BOOST_CHECK_EQUAL(cfg2.getRestartStep(), 0); - BOOST_CHECK_EQUAL(cfg2.getRestartRootName(), ""); - - cfg2.setRestart( "CASE" , 100); - BOOST_CHECK_EQUAL(cfg2.restartRequested(), true); - BOOST_CHECK_EQUAL(cfg2.getRestartStep(), 100); - BOOST_CHECK_EQUAL(cfg2.getRestartRootName(), "CASE"); - - Deck deck3 = createDeck(deckStr3); - BOOST_CHECK_THROW( InitConfig{ deck3 }, std::runtime_error ); - - Deck deck4 = createDeck(deckStr4); - BOOST_CHECK_NO_THROW( InitConfig{ deck4 } ); -} - -BOOST_AUTO_TEST_CASE( InitConfigWithoutEquil ) { - auto deck = createDeck( deckStr ); - InitConfig config( deck ); - - BOOST_CHECK( !config.hasEquil() ); - BOOST_CHECK_THROW( config.getEquil(), std::runtime_error ); -} - -BOOST_AUTO_TEST_CASE( InitConfigWithEquil ) { - auto deck = createDeck( deckWithEquil ); - InitConfig config( deck ); - - BOOST_CHECK( config.hasEquil() ); - BOOST_CHECK_NO_THROW( config.getEquil() ); -} - -BOOST_AUTO_TEST_CASE( EquilOperations ) { - auto deck = createDeck( deckWithEquil ); - InitConfig config( deck ); - - const auto& equil = config.getEquil(); - - BOOST_CHECK( !equil.empty() ); - BOOST_CHECK_EQUAL( 1U, equil.size() ); - - BOOST_CHECK_NO_THROW( equil.getRecord( 0 ) ); - BOOST_CHECK_THROW( equil.getRecord( 1 ), std::out_of_range ); - - const auto& record = equil.getRecord( 0 ); - BOOST_CHECK_CLOSE( 2469, record.datumDepth(), 1e-12 ); - BOOST_CHECK_CLOSE( 382.4 * unit::barsa, record.datumDepthPressure(), 1e-12 ); - BOOST_CHECK_CLOSE( 1705.0, record.waterOilContactDepth(), 1e-12 ); - BOOST_CHECK_CLOSE( 0.0, record.waterOilContactCapillaryPressure(), 1e-12 ); - BOOST_CHECK_CLOSE( 500, record.gasOilContactDepth(), 1e-12 ); - BOOST_CHECK_CLOSE( 0.0, record.gasOilContactCapillaryPressure(), 1e-12 ); - BOOST_CHECK( !record.liveOilInitConstantRs() ); - BOOST_CHECK( !record.wetGasInitConstantRv() ); - BOOST_CHECK_EQUAL( 20, record.initializationTargetAccuracy() ); -} - -BOOST_AUTO_TEST_CASE(RestartCWD) { - WorkArea output_area; - - output_area.makeSubDir("simulation"); - - { - std::fstream fs; - fs.open ("simulation/CASE.DATA", std::fstream::out); - fs << deckStr4; - fs.close(); - - fs.open("simulation/CASE5.DATA", std::fstream::out); - fs << deckStr5; - fs.close(); - - fs.open("CASE5.DATA", std::fstream::out); - fs << deckStr5; - fs.close(); - - fs.open("CWD_CASE.DATA", std::fstream::out); - fs << deckStr4; - fs.close(); - } - Opm::Parser parser; - { - Opm::Deck deck = parser.parseFile("simulation/CASE.DATA"); - Opm::InitConfig init_config(deck); - BOOST_CHECK_EQUAL(init_config.getRestartRootName(), "simulation/BASE"); - } - { - Opm::Deck deck = parser.parseFile("simulation/CASE5.DATA"); - Opm::InitConfig init_config(deck); - BOOST_CHECK_EQUAL(init_config.getRestartRootName(), "/abs/path/BASE"); - } - { - Opm::Deck deck = parser.parseFile("CWD_CASE.DATA"); - Opm::InitConfig init_config(deck); - BOOST_CHECK_EQUAL(init_config.getRestartRootName(), "BASE"); - } - { - Opm::Deck deck = parser.parseFile("CASE5.DATA"); - Opm::InitConfig init_config(deck); - BOOST_CHECK_EQUAL(init_config.getRestartRootName(), "/abs/path/BASE"); - } -} - -// -------------------------------------------------------------------- - -BOOST_AUTO_TEST_SUITE (FILLEPS) - -BOOST_AUTO_TEST_CASE(WrongSection) -{ - // FILLEPS in GRID section (should ideally be caught at load time) - auto input = std::string { R"( -RUNSPEC - -DIMENS - 5 5 3 / - -TITLE -Break FILLEPS Keyword - -START - 24 'JUN' 2019 / - -GAS -OIL -WATER -DISGAS -METRIC - -TABDIMS -/ - -GRID -INIT - -DXV - 5*100 / - -DYV - 5*100 / - -DZV - 3*10 / - -TOPS - 25*2000 / - -EQUALS - PERMX 100 / -/ - -COPY - PERMX PERMY / - PERMX PERMZ / -/ - -MULTIPLY - PERMZ 0.1 / -/ - -PORO - 75*0.3 / - --- Wrong section (should be in PROPS) -FILLEPS - -PROPS - -SWOF - 0 0 1 0 - 1 1 0 0 / - -SGOF - 0 0 1 0 - 1 1 0 0 / - -DENSITY - 900 1000 1 / - -PVTW - 400 1 1.0E-06 1 0 / - -PVDG - 30 0.04234 0.01344 - 530 0.003868 0.02935 -/ - -PVTO - 0.000 1.0 1.07033 0.645 - 500.0 1.02339 1.029 / - 17.345 25.0 1.14075 0.484 - 500.0 1.07726 0.834 / - 31.462 50.0 1.18430 0.439 - 500.0 1.11592 0.757 / - 45.089 75.0 1.22415 0.402 - 500.0 1.15223 0.689 / -/ - -END -)" }; - - const auto es = ::Opm::EclipseState { - ::Opm::Parser{}.parseString(input) - }; - - // Keyword present but placed in wrong section => treat as absent - BOOST_CHECK(! es.cfg().init().filleps()); -} - -BOOST_AUTO_TEST_CASE(Present) -{ - auto input = std::string { R"( -RUNSPEC - -DIMENS - 5 5 3 / - -TITLE -Break FILLEPS Keyword - -START - 24 'JUN' 2019 / - -GAS -OIL -WATER -DISGAS -METRIC - -TABDIMS -/ - -GRID -INIT - -DXV - 5*100 / - -DYV - 5*100 / - -DZV - 3*10 / - -TOPS - 25*2000 / - -EQUALS - PERMX 100 / -/ - -COPY - PERMX PERMY / - PERMX PERMZ / -/ - -MULTIPLY - PERMZ 0.1 / -/ - -PORO - 75*0.3 / - -PROPS - -SWOF - 0 0 1 0 - 1 1 0 0 / - -SGOF - 0 0 1 0 - 1 1 0 0 / - -DENSITY - 900 1000 1 / - -PVTW - 400 1 1.0E-06 1 0 / - -PVDG - 30 0.04234 0.01344 - 530 0.003868 0.02935 -/ - -PVTO - 0.000 1.0 1.07033 0.645 - 500.0 1.02339 1.029 / - 17.345 25.0 1.14075 0.484 - 500.0 1.07726 0.834 / - 31.462 50.0 1.18430 0.439 - 500.0 1.11592 0.757 / - 45.089 75.0 1.22415 0.402 - 500.0 1.15223 0.689 / -/ - -FILLEPS - -END -)" }; - - const auto es = ::Opm::EclipseState { - ::Opm::Parser{}.parseString(input) - }; - - BOOST_CHECK(es.cfg().init().filleps()); -} - -BOOST_AUTO_TEST_CASE(Absent) -{ - auto input = std::string { R"( -RUNSPEC - -DIMENS - 5 5 3 / - -TITLE -Break FILLEPS Keyword - -START - 24 'JUN' 2019 / - -GAS -OIL -WATER -DISGAS -METRIC - -TABDIMS -/ - -GRID -INIT - -DXV - 5*100 / - -DYV - 5*100 / - -DZV - 3*10 / - -TOPS - 25*2000 / - -EQUALS - PERMX 100 / -/ - -COPY - PERMX PERMY / - PERMX PERMZ / -/ - -MULTIPLY - PERMZ 0.1 / -/ - -PORO - 75*0.3 / - -PROPS - -SWOF - 0 0 1 0 - 1 1 0 0 / - -SGOF - 0 0 1 0 - 1 1 0 0 / - -DENSITY - 900 1000 1 / - -PVTW - 400 1 1.0E-06 1 0 / - -PVDG - 30 0.04234 0.01344 - 530 0.003868 0.02935 -/ - -PVTO - 0.000 1.0 1.07033 0.645 - 500.0 1.02339 1.029 / - 17.345 25.0 1.14075 0.484 - 500.0 1.07726 0.834 / - 31.462 50.0 1.18430 0.439 - 500.0 1.11592 0.757 / - 45.089 75.0 1.22415 0.402 - 500.0 1.15223 0.689 / -/ - --- No FILLEPS here --- FILLEPS - -END -)" }; - - const auto es = ::Opm::EclipseState { - ::Opm::Parser{}.parseString(input) - }; - - BOOST_CHECK(! es.cfg().init().filleps()); -} - -BOOST_AUTO_TEST_SUITE_END() diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/MULTREGTScannerTests.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/MULTREGTScannerTests.cpp deleted file mode 100644 index 8a13627861..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/MULTREGTScannerTests.cpp +++ /dev/null @@ -1,311 +0,0 @@ -/* - Copyright 2014 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include -#include -#include - -#define BOOST_TEST_MODULE MULTREGTScannerTests -#include -#include - -#include - -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include - - - - -BOOST_AUTO_TEST_CASE(TestRegionName) { - BOOST_CHECK_EQUAL( "FLUXNUM" , Opm::MULTREGT::RegionNameFromDeckValue( "F")); - BOOST_CHECK_EQUAL( "MULTNUM" , Opm::MULTREGT::RegionNameFromDeckValue( "M")); - BOOST_CHECK_EQUAL( "OPERNUM" , Opm::MULTREGT::RegionNameFromDeckValue( "O")); - - BOOST_CHECK_THROW( Opm::MULTREGT::RegionNameFromDeckValue("o") , std::invalid_argument); - BOOST_CHECK_THROW( Opm::MULTREGT::RegionNameFromDeckValue("X") , std::invalid_argument); -} - - -BOOST_AUTO_TEST_CASE(TestNNCBehaviourEnum) { - BOOST_CHECK_EQUAL( Opm::MULTREGT::ALL , Opm::MULTREGT::NNCBehaviourFromString( "ALL")); - BOOST_CHECK_EQUAL( Opm::MULTREGT::NNC , Opm::MULTREGT::NNCBehaviourFromString( "NNC")); - BOOST_CHECK_EQUAL( Opm::MULTREGT::NONNC , Opm::MULTREGT::NNCBehaviourFromString( "NONNC")); - BOOST_CHECK_EQUAL( Opm::MULTREGT::NOAQUNNC , Opm::MULTREGT::NNCBehaviourFromString( "NOAQUNNC")); - - - BOOST_CHECK_THROW( Opm::MULTREGT::NNCBehaviourFromString( "Invalid") , std::invalid_argument); -} - - - -static Opm::Deck createInvalidMULTREGTDeck() { - const char* deckData = - "RUNSPEC\n" - "\n" - "DIMENS\n" - " 3 3 2 /\n" - "GRID\n" - "DX\n" - "18*0.25 /\n" - "DY\n" - "18*0.25 /\n" - "DZ\n" - "18*0.25 /\n" - "TOPS\n" - "9*0.25 /\n" - "FLUXNUM\n" - "1 1 2\n" - "1 1 2\n" - "1 1 2\n" - "3 4 5\n" - "3 4 5\n" - "3 4 5\n" - "/\n" - "MULTREGT\n" - "1 2 0.50 G ALL M / -- Invalid direction\n" - "/\n" - "MULTREGT\n" - "1 2 0.50 X ALL G / -- Invalid region \n" - "/\n" - "MULTREGT\n" - "1 2 0.50 X ALL M / -- Region not in deck \n" - "/\n" - "EDIT\n" - "\n"; - - Opm::Parser parser; - return parser.parseString(deckData) ; -} - - -BOOST_AUTO_TEST_CASE(InvalidInput) { - Opm::Deck deck = createInvalidMULTREGTDeck(); - Opm::EclipseGrid grid( deck ); - Opm::TableManager tm(deck); - Opm::EclipseGrid eg( deck ); - Opm::FieldPropsManager fp(deck, Opm::Phases{true, true, true}, eg, tm); - - // Invalid direction - std::vector keywords0; - const auto& multregtKeyword0 = deck.getKeyword( "MULTREGT", 0 ); - keywords0.push_back( &multregtKeyword0 ); - BOOST_CHECK_THROW( Opm::MULTREGTScanner scanner( grid, &fp, keywords0 ); , std::invalid_argument ); - - // Not supported region - std::vector keywords1; - const auto& multregtKeyword1 = deck.getKeyword( "MULTREGT", 1 ); - keywords1.push_back( &multregtKeyword1 ); - BOOST_CHECK_THROW( Opm::MULTREGTScanner scanner( grid, &fp, keywords1 ); , std::invalid_argument ); - - // The keyword is ok; but it refers to a region which is not in the deck. - std::vector keywords2; - const auto& multregtKeyword2 = deck.getKeyword( "MULTREGT", 2 ); - keywords2.push_back( &multregtKeyword2 ); - BOOST_CHECK_THROW( Opm::MULTREGTScanner scanner( grid, &fp, keywords2 ); , std::logic_error ); -} - - -static Opm::Deck createNotSupportedMULTREGTDeck() { - const char* deckData = - "RUNSPEC\n" - "\n" - "DIMENS\n" - " 3 3 2 /\n" - "GRID\n" - "DX\n" - "18*0.25 /\n" - "DY\n" - "18*0.25 /\n" - "DZ\n" - "18*0.25 /\n" - "TOPS\n" - "9*0.25 /\n" - "FLUXNUM\n" - "1 1 2\n" - "1 1 2\n" - "1 1 2\n" - "3 4 5\n" - "3 4 5\n" - "3 4 5\n" - "/\n" - "MULTREGT\n" - "1 2 0.50 X NOAQUNNC F / -- Not support NOAQUNNC behaviour \n" - "/\n" - "MULTREGT\n" - "2 2 0.50 X ALL M / -- Region values equal \n" - "/\n" - "EDIT\n" - "\n"; - - Opm::Parser parser; - return parser.parseString(deckData) ; -} - - - - -BOOST_AUTO_TEST_CASE(NotSupported) { - Opm::Deck deck = createNotSupportedMULTREGTDeck(); - Opm::EclipseGrid grid( deck ); - Opm::TableManager tm(deck); - Opm::EclipseGrid eg( deck ); - Opm::FieldPropsManager fp(deck, Opm::Phases{true, true, true}, eg, tm); - - - // Not support NOAQUNNC behaviour - std::vector keywords0; - const auto& multregtKeyword0 = deck.getKeyword( "MULTREGT", 0 ); - keywords0.push_back( &multregtKeyword0 ); - BOOST_CHECK_THROW( Opm::MULTREGTScanner scanner( grid, &fp, keywords0 ); , std::invalid_argument ); - - // srcValue == targetValue - not supported - std::vector keywords1; - const Opm::DeckKeyword& multregtKeyword1 = deck.getKeyword( "MULTREGT", 1 ); - keywords1.push_back( &multregtKeyword1 ); - BOOST_CHECK_THROW( Opm::MULTREGTScanner scanner( grid, &fp, keywords1 ); , std::invalid_argument ); -} - -static Opm::Deck createDefaultedRegions() { - const char* deckData = - "RUNSPEC\n" - "\n" - "DIMENS\n" - " 3 3 2 /\n" - "GRID\n" - "DX\n" - "18*0.25 /\n" - "DY\n" - "18*0.25 /\n" - "DZ\n" - "18*0.25 /\n" - "TOPS\n" - "9*0.25 /\n" - "FLUXNUM\n" - "1 1 2\n" - "1 1 2\n" - "1 1 2\n" - "3 4 5\n" - "3 4 5\n" - "3 4 5\n" - "/\n" - "MULTREGT\n" - "3 4 1.25 XYZ ALL F /\n" - "2 -1 0 XYZ ALL F / -- Defaulted from region value \n" - "1 -1 0 XYZ ALL F / -- Defaulted from region value \n" - "2 1 1 XYZ ALL F / Override default \n" - "/\n" - "MULTREGT\n" - "2 * 0.75 XYZ ALL F / -- Defaulted to region value \n" - "/\n" - "EDIT\n" - "\n"; - - Opm::Parser parser; - return parser.parseString(deckData) ; -} - - -BOOST_AUTO_TEST_CASE(DefaultedRegions) { - Opm::Deck deck = createDefaultedRegions(); - Opm::EclipseGrid grid( deck ); - Opm::TableManager tm(deck); - Opm::EclipseGrid eg( deck ); - Opm::FieldPropsManager fp(deck, Opm::Phases{true, true, true}, eg, tm); - - - std::vector keywords0; - const auto& multregtKeyword0 = deck.getKeyword( "MULTREGT", 0 ); - keywords0.push_back( &multregtKeyword0 ); - Opm::MULTREGTScanner scanner0(grid, &fp, keywords0); - BOOST_CHECK_EQUAL( scanner0.getRegionMultiplier(grid.getGlobalIndex(0,0,1), grid.getGlobalIndex(1,0,1), Opm::FaceDir::XPlus ), 1.25); - BOOST_CHECK_EQUAL( scanner0.getRegionMultiplier(grid.getGlobalIndex(1,0,0), grid.getGlobalIndex(2,0,0), Opm::FaceDir::XPlus ), 1.0); - BOOST_CHECK_EQUAL( scanner0.getRegionMultiplier(grid.getGlobalIndex(2,0,1), grid.getGlobalIndex(2,0,0), Opm::FaceDir::ZMinus ), 0.0); - - std::vector keywords1; - const Opm::DeckKeyword& multregtKeyword1 = deck.getKeyword( "MULTREGT", 1 ); - keywords1.push_back( &multregtKeyword1 ); - Opm::MULTREGTScanner scanner1(grid, &fp, keywords1 ); - BOOST_CHECK_EQUAL( scanner1.getRegionMultiplier(grid.getGlobalIndex(2,0,0), grid.getGlobalIndex(1,0,0), Opm::FaceDir::XMinus ), 0.75); - BOOST_CHECK_EQUAL( scanner1.getRegionMultiplier(grid.getGlobalIndex(2,0,0), grid.getGlobalIndex(2,0,1), Opm::FaceDir::ZPlus), 0.75); -} - - - - -static Opm::Deck createCopyMULTNUMDeck() { - const char* deckData = - "RUNSPEC\n" - "\n" - "DIMENS\n" - "2 2 2 /\n" - "GRID\n" - "DX\n" - "8*0.25 /\n" - "DY\n" - "8*0.25 /\n" - "DZ\n" - "8*0.25 /\n" - "TOPS\n" - "4*0.25 /\n" - "FLUXNUM\n" - "1 2\n" - "1 2\n" - "3 4\n" - "3 4\n" - "/\n" - "COPY\n" - " FLUXNUM MULTNUM /\n" - "/\n" - "MULTREGT\n" - "1 2 0.50/ \n" - "/\n" - "EDIT\n" - "\n"; - - Opm::Parser parser; - return parser.parseString(deckData) ; -} - -BOOST_AUTO_TEST_CASE(MULTREGT_COPY_MULTNUM) { - Opm::Deck deck = createCopyMULTNUMDeck(); - Opm::TableManager tm(deck); - Opm::EclipseGrid eg(deck); - Opm::FieldPropsManager fp(deck, Opm::Phases{true, true, true}, eg, tm); - - BOOST_CHECK_NO_THROW(fp.has_int("FLUXNUM")); - BOOST_CHECK_NO_THROW(fp.has_int("MULTNUM")); - const auto& fdata = fp.get_global_int("FLUXNUM"); - const auto& mdata = fp.get_global_int("MULTNUM"); - std::vector data = { 1, 2, 1, 2, 3, 4, 3, 4 }; - - for (auto i = 0; i < 2 * 2 * 2; i++) { - BOOST_CHECK_EQUAL(fdata[i], mdata[i]); - BOOST_CHECK_EQUAL(fdata[i], data[i]); - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/MessageLimitTests.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/MessageLimitTests.cpp deleted file mode 100644 index e7b8b7d8cc..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/MessageLimitTests.cpp +++ /dev/null @@ -1,97 +0,0 @@ -/* - Copyright 2016 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include -#include - -#define BOOST_TEST_MODULE MessageLimitTests - -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -using namespace Opm; - - -BOOST_AUTO_TEST_CASE(MESSAGES) { - Opm::Parser parser; - std::string input = - "START -- 0 \n" - "19 JUN 2007 / \n" - "RUNSPEC\n" - "MESSAGES\n" - " 5* 10 /\n" - "GRID\n" - "MESSAGES\n" - " 5* 77 /\n" - "SCHEDULE\n" - "DATES -- 1\n" - " 10 OKT 2008 / \n" - "/\n" - "WELSPECS\n" - " 'P1' 'OP' 9 9 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / \n" - " 'P2' 'OP' 5 5 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / \n" - " 'I' 'OP' 1 1 1* 'WATER' 1* 1* 1* 1* 1* 1* 1* / \n" - "/\n" - "COMPDAT\n" - " 'P1' 9 9 1 1 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / \n" - " 'P1' 9 9 2 2 'OPEN' 1* 46.825 0.311 4332.346 1* 1* 'X' 22.123 / \n" - " 'P2' 5 5 1 1 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / \n" - " 'P2' 5 5 2 2 'OPEN' 1* 46.825 0.311 4332.346 1* 1* 'X' 22.123 / \n" - " 'I' 1 1 1 1 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / \n" - "/\n" - "WCONHIST\n" - " 'P1' 'OPEN' 'ORAT' 5*/ \n" - " 'P2' 'OPEN' 'ORAT' 5*/ \n" - "/\n" - "MESSAGES\n" - " 1 2 /\n" - "DATES -- 2\n" - " 15 OKT 2008 / \n" - "/\n" - "MESSAGES\n" - " 10 /\n" - ; - - auto deck = parser.parseString(input); - auto python = std::make_shared(); - EclipseGrid grid(10,10,10); - TableManager table ( deck ); - FieldPropsManager fp( deck, Phases{true, true, true}, grid, table); - Runspec runspec (deck); - Schedule schedule(deck, grid, fp, runspec, python); - const MessageLimits limits = schedule.getMessageLimits(); - - BOOST_CHECK_EQUAL( limits.getBugPrintLimit( 0 ) , 77 ); // The pre Schedule initialization - - BOOST_CHECK_EQUAL( limits.getMessagePrintLimit( 1 ) , 1 ); - BOOST_CHECK_EQUAL( limits.getCommentPrintLimit( 1 ) , 2 ); - BOOST_CHECK_EQUAL( limits.getBugPrintLimit( 1 ) , 77 ); - - BOOST_CHECK_EQUAL( limits.getMessagePrintLimit( 2 ) , 10 ); - BOOST_CHECK_EQUAL( limits.getCommentPrintLimit( 2 ) , 2 ); - BOOST_CHECK_EQUAL( limits.getBugPrintLimit( 2 ) , 77 ); -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/MultiRegTests.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/MultiRegTests.cpp deleted file mode 100644 index 7ab8aabca7..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/MultiRegTests.cpp +++ /dev/null @@ -1,246 +0,0 @@ -/* - Copyright 2014 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include -#include -#include -#include - -#define BOOST_TEST_MODULE MultiRegTests -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -static Opm::Deck createDeckInvalidArray() { - const char* deckData = - "RUNSPEC\n" - "\n" - "DIMENS\n" - " 10 10 10 /\n" - "GRID\n" - "MULTIREG\n" - " MISSING 10 10 M / \n" - "/\n" - "EDIT\n" - "\n"; - - Opm::Parser parser; - return parser.parseString(deckData) ; -} - - -static Opm::Deck createDeckInvalidRegion() { - const char* deckData = - "RUNSPEC\n" - "\n" - "DIMENS\n" - " 10 10 10 /\n" - "GRID\n" - "REGIONS\n" - "SATNUM\n" - " 1000*1 /\n" - "MULTIREG\n" - " SATNUM 10 10 MX / \n" - "/\n" - "EDIT\n" - "\n"; - - Opm::Parser parser; - return parser.parseString(deckData) ; -} - - -static Opm::Deck createDeckInvalidValue() { - const char* deckData = - "RUNSPEC\n" - "\n" - "DIMENS\n" - " 10 10 10 /\n" - "GRID\n" - "REGIONS\n" - "SATNUM\n" - " 1000*1 /\n" - "MULTIREG\n" - " SATNUM 0.2 10 M / \n" - "/\n" - "EDIT\n" - "\n"; - - Opm::Parser parser; - return parser.parseString(deckData) ; -} - - -static Opm::Deck createDeckMissingVector() { - const char* deckData = - "RUNSPEC\n" - "\n" - "DIMENS\n" - " 10 10 10 /\n" - "GRID\n" - "REGIONS\n" - "SATNUM\n" - " 1000*1 /\n" - "MULTIREG\n" - " SATNUM 2 10 M / \n" - "/\n" - "EDIT\n" - "\n"; - - Opm::Parser parser; - return parser.parseString(deckData) ; -} - - -static Opm::Deck createDeckUnInitialized() { - const char* deckData = - "RUNSPEC\n" - "\n" - "DIMENS\n" - " 10 10 10 /\n" - "GRID\n" - "REGIONS\n" - "MULTIREG\n" - " SATNUM 2 10 M / \n" - "/\n" - "EDIT\n" - "\n"; - - Opm::Parser parser; - return parser.parseString(deckData) ; -} - - -static Opm::Deck createValidIntDeck() { - const char* deckData = - "RUNSPEC\n" - "GRIDOPTS\n" - " 'YES' 2 /\n" - "\n" - "DIMENS\n" - " 5 5 1 /\n" - "GRID\n" - "DX\n" - "25*1.0 /\n" - "DY\n" - "25*1.0 /\n" - "DZ\n" - "25*1.0 /\n" - "TOPS\n" - "25*0.25 /\n" - "PERMY\n" - " 25*1.0 /\n" - "PERMX\n" - " 25*1.0 /\n" - "PORO\n" - " 25*1.0 /\n" - "MULTNUM \n" - "1 1 2 2 2\n" - "1 1 2 2 2\n" - "1 1 2 2 2\n" - "1 1 2 2 2\n" - "1 1 2 2 2\n" - "/\n" - "REGIONS\n" - "SATNUM \n" - "1 1 2 2 2\n" - "1 1 2 2 2\n" - "1 1 2 2 2\n" - "1 1 2 2 2\n" - "1 1 2 2 2\n" - "/\n" - "OPERNUM \n" - "1 2 3 4 5\n" - "6 7 8 9 10\n" - "11 12 13 14 15\n" - "16 17 18 19 20\n" - "21 22 23 24 25\n" - "/\n" - "OPERATER\n" - " PERMX 1 MULTX PERMY 0.50 /\n" - " PERMX 2 COPY PERMY /\n" - " PORV 1 'MULTX' PORV 0.50 /\n" - "/\n" - "MULTIREG\n" - " SATNUM 11 1 M / \n" - " SATNUM 20 2 / \n" - "/\n" - "EDIT\n" - "\n"; - - Opm::Parser parser; - return parser.parseString(deckData) ; -} - - - - - - -BOOST_AUTO_TEST_CASE(InvalidArrayThrows) { - Opm::Deck deck = createDeckInvalidArray(); - BOOST_CHECK_THROW( new Opm::EclipseState( deck) , std::invalid_argument ); -} - - -BOOST_AUTO_TEST_CASE(InvalidRegionThrows) { - Opm::Deck deck = createDeckInvalidRegion(); - BOOST_CHECK_THROW( new Opm::EclipseState( deck) , std::invalid_argument ); -} - - -BOOST_AUTO_TEST_CASE(ExpectedIntThrows) { - Opm::Deck deck = createDeckInvalidValue(); - BOOST_CHECK_THROW( new Opm::EclipseState( deck) , std::invalid_argument ); -} - -BOOST_AUTO_TEST_CASE(MissingRegionVectorThrows) { - Opm::Deck deck = createDeckMissingVector(); - BOOST_CHECK_THROW( new Opm::EclipseState( deck) , std::invalid_argument ); -} - -BOOST_AUTO_TEST_CASE(UnInitializedVectorThrows) { - Opm::Deck deck = createDeckUnInitialized(); - BOOST_CHECK_THROW( new Opm::EclipseState( deck) , std::invalid_argument ); -} - -BOOST_AUTO_TEST_CASE(Test_OPERATER) { - Opm::Deck deck = createValidIntDeck(); - Opm::TableManager tm(deck); - Opm::EclipseGrid eg(deck); - Opm::FieldPropsManager fp(deck, Opm::Phases{true, true, true}, eg, tm); - - const auto& porv = fp.porv(true); - const auto& permx = fp.get_global_double("PERMX"); - const auto& permy = fp.get_global_double("PERMY"); - - BOOST_CHECK_EQUAL( porv[0], 0.50 ); - BOOST_CHECK_EQUAL( porv[1], 1.00 ); - BOOST_CHECK_EQUAL( permx[0] / permy[0], 0.50 ); - BOOST_CHECK_EQUAL( permx[1], permy[1]); -} - diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/MultisegmentWellTests.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/MultisegmentWellTests.cpp deleted file mode 100644 index 7c6dfc153f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/MultisegmentWellTests.cpp +++ /dev/null @@ -1,501 +0,0 @@ -/* - Copyright 2017 SINTEF Digital, Mathematics and Cybernetics. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include -#include -#include - -#include - -#define BOOST_TEST_MODULE WellConnectionsTests -#include -#include - -#include - -#include -#include -#include - -#include -#include -#include -#include -#include - -#include -#include -#include - -#include - -BOOST_AUTO_TEST_CASE(MultisegmentWellTest) { - - auto dir = Opm::Connection::Direction::Z; - const auto kind = Opm::Connection::CTFKind::DeckValue; - Opm::WellConnections connection_set(Opm::Connection::Order::TRACK, 10,10); - Opm::EclipseGrid grid(20,20,20); - connection_set.add(Opm::Connection( 19, 0, 0,grid.getGlobalIndex(19,0,0), 1, 0.0, Opm::Connection::State::OPEN , 200, 17.29, 0.25, 0.0, 0.0, 0, dir, kind, 0, 0., 0., true) ); - connection_set.add(Opm::Connection( 19, 0, 1,grid.getGlobalIndex(19,0,1), 1, 0.0, Opm::Connection::State::OPEN , 200, 17.29, 0.25, 0.0, 0.0, 0, dir, kind, 0, 0., 0., true) ); - connection_set.add(Opm::Connection( 19, 0, 2,grid.getGlobalIndex(19,0,2), 1, 0.0, Opm::Connection::State::OPEN , 200, 17.29, 0.25, 0.0, 0.0, 0, dir, kind, 0, 0., 0., true) ); - - connection_set.add(Opm::Connection( 18, 0, 1,grid.getGlobalIndex(18,0,1), 1, 0.0, Opm::Connection::State::OPEN , 200, 17.29, 0.25, 0.0, 0.0, 0, Opm::Connection::Direction::X, kind, 0, 0., 0., true) ); - connection_set.add(Opm::Connection( 17, 0, 1,grid.getGlobalIndex(17,0,1), 1, 0.0, Opm::Connection::State::OPEN , 200, 17.29, 0.25, 0.0, 0.0, 0, Opm::Connection::Direction::X, kind, 0, 0., 0., true) ); - connection_set.add(Opm::Connection( 16, 0, 1,grid.getGlobalIndex(16,0,1), 1, 0.0, Opm::Connection::State::OPEN , 200, 17.29, 0.25, 0.0, 0.0, 0, Opm::Connection::Direction::X, kind, 0, 0., 0., true) ); - connection_set.add(Opm::Connection( 15, 0, 1,grid.getGlobalIndex(15,0,1), 1, 0.0, Opm::Connection::State::OPEN , 200, 17.29, 0.25, 0.0, 0.0, 0, Opm::Connection::Direction::X, kind, 0, 0., 0., true) ); - - BOOST_CHECK_EQUAL( 7U , connection_set.size() ); - - const std::string compsegs_string = - "WELSEGS \n" - "'PROD01' 2512.5 2512.5 1.0e-5 'ABS' 'HF-' 'HO' /\n" - "2 2 1 1 2537.5 2537.5 0.3 0.00010 /\n" - "3 3 1 2 2562.5 2562.5 0.2 0.00010 /\n" - "4 4 2 2 2737.5 2537.5 0.2 0.00010 /\n" - "6 6 2 4 3037.5 2539.5 0.2 0.00010 /\n" - "7 7 2 6 3337.5 2534.5 0.2 0.00010 /\n" - "8 8 3 7 3337.6 2534.5 0.2 0.00015 /\n" - "/\n" - "\n" - "COMPSEGS\n" - "PROD01 / \n" - "20 1 1 1 2512.5 2525.0 /\n" - "20 1 2 1 2525.0 2550.0 /\n" - "20 1 3 1 2550.0 2575.0 /\n" - "19 1 2 2 2637.5 2837.5 /\n" - "18 1 2 2 2837.5 3037.5 /\n" - "17 1 2 2 3037.5 3237.5 /\n" - "16 1 2 3 3237.5 3437.5 /\n" - "/\n" - "WSEGSICD\n" - "'PROD01' 8 8 0.002 -0.7 1* 1* 0.6 1* 1* 2* 'SHUT' /\n" - "/\n"; - - Opm::Parser parser; - Opm::Deck deck = parser.parseString(compsegs_string); - - const Opm::DeckKeyword compsegs = deck.getKeyword("COMPSEGS"); - BOOST_CHECK_EQUAL( 8U, compsegs.size() ); - - const Opm::DeckKeyword welsegs = deck.getKeyword("WELSEGS"); - Opm::WellSegments segment_set(welsegs); - - BOOST_CHECK_EQUAL(7U, segment_set.size()); - - Opm::ErrorGuard errorGuard; - Opm::ParseContext parseContext; - parseContext.update(Opm::ParseContext::SCHEDULE_COMPSEGS_INVALID, Opm::InputError::THROW_EXCEPTION); - parseContext.update(Opm::ParseContext::SCHEDULE_COMPSEGS_NOT_SUPPORTED, Opm::InputError::THROW_EXCEPTION); - std::unique_ptr new_connection_set{nullptr}; - BOOST_CHECK_NO_THROW(new_connection_set.reset(Opm::newConnectionsWithSegments(compsegs, connection_set, segment_set, grid, parseContext, errorGuard))); - - // checking the ICD segment - const Opm::DeckKeyword wsegsicd = deck.getKeyword("WSEGSICD"); - BOOST_CHECK_EQUAL(1U, wsegsicd.size()); - const Opm::DeckRecord& record = wsegsicd.getRecord(0); - const int start_segment = record.getItem("SEG1").get< int >(0); - const int end_segment = record.getItem("SEG2").get< int >(0); - BOOST_CHECK_EQUAL(8, start_segment); - BOOST_CHECK_EQUAL(8, end_segment); - - const auto sicd_map = Opm::SpiralICD::fromWSEGSICD(wsegsicd); - - BOOST_CHECK_EQUAL(1U, sicd_map.size()); - - const auto it = sicd_map.begin(); - const std::string& well_name = it->first; - BOOST_CHECK_EQUAL(well_name, "PROD01"); - - const auto& sicd_vector = it->second; - BOOST_CHECK_EQUAL(1U, sicd_vector.size()); - const int segment_number = sicd_vector[0].first; - const Opm::SpiralICD& sicd = sicd_vector[0].second; - - BOOST_CHECK_EQUAL(8, segment_number); - - Opm::Segment segment = segment_set.getFromSegmentNumber(segment_number); - segment.updateSpiralICD(sicd); - - BOOST_CHECK(Opm::Segment::SegmentType::SICD==segment.segmentType()); - - const std::shared_ptr sicd_ptr = segment.spiralICD(); - BOOST_CHECK_GT(sicd_ptr->maxAbsoluteRate(), 1.e99); - BOOST_CHECK(sicd_ptr->status()==Opm::ICDStatus::SHUT); - // 0.002 bars*day*day/Volume^2 - BOOST_CHECK_EQUAL(sicd_ptr->strength(), 0.002*1.e5*86400.*86400.); - BOOST_CHECK_EQUAL(sicd_ptr->length(), -0.7); - BOOST_CHECK_EQUAL(sicd_ptr->densityCalibration(), 1000.25); - // 1.45 cp - BOOST_CHECK_EQUAL(sicd_ptr->viscosityCalibration(), 1.45 * 0.001); - BOOST_CHECK_EQUAL(sicd_ptr->criticalValue(), 0.6); - BOOST_CHECK_EQUAL(sicd_ptr->widthTransitionRegion(), 0.05); - BOOST_CHECK_EQUAL(sicd_ptr->maxViscosityRatio(), 5.0); - BOOST_CHECK_EQUAL(sicd_ptr->methodFlowScaling(), -1); - // the scaling factor has not been updated properly, so it will throw - BOOST_CHECK_THROW(sicd_ptr->scalingFactor(), std::runtime_error); - - const int outlet_segment_number = segment.outletSegment(); - const double outlet_segment_length = segment_set.segmentLength(outlet_segment_number); - // only one connection attached to the outlet segment in this case - const Opm::Connection& connection = new_connection_set->getFromIJK(15, 0, 1); - const double connection_length = connection.getSegDistEnd() - connection.getSegDistStart(); - sicd_ptr->updateScalingFactor(outlet_segment_length, connection_length); - - // updated, so it should not throw - BOOST_CHECK_NO_THROW(sicd_ptr->scalingFactor()); - BOOST_CHECK_EQUAL(0.7, sicd_ptr->scalingFactor()); - - BOOST_CHECK_EQUAL(7U, new_connection_set->size()); - - const Opm::Connection& connection1 = new_connection_set->get(0); - const int segment_number_connection1 = connection1.segment(); - const double center_depth_connection1 = connection1.depth(); - BOOST_CHECK_EQUAL(segment_number_connection1, 1); - BOOST_CHECK_EQUAL(center_depth_connection1, 2512.5); - - const Opm::Connection& connection3 = new_connection_set->get(2); - const int segment_number_connection3 = connection3.segment(); - const double center_depth_connection3 = connection3.depth(); - BOOST_CHECK_EQUAL(segment_number_connection3, 3); - BOOST_CHECK_EQUAL(center_depth_connection3, 2562.5); - - const Opm::Connection& connection5 = new_connection_set->get(4); - const int segment_number_connection5 = connection5.segment(); - const double center_depth_connection5 = connection5.depth(); - BOOST_CHECK_EQUAL(segment_number_connection5, 6); - BOOST_CHECK_CLOSE(center_depth_connection5, 2538.83, 0.001); - - const Opm::Connection& connection6 = new_connection_set->get(5); - const int segment_number_connection6 = connection6.segment(); - const double center_depth_connection6 = connection6.depth(); - BOOST_CHECK_EQUAL(segment_number_connection6, 6); - BOOST_CHECK_CLOSE(center_depth_connection6, 2537.83, 0.001); - - const Opm::Connection& connection7 = new_connection_set->get(6); - const int segment_number_connection7 = connection7.segment(); - const double center_depth_connection7 = connection7.depth(); - BOOST_CHECK_EQUAL(segment_number_connection7, 8); - BOOST_CHECK_EQUAL(center_depth_connection7, 2534.5); - -} - -BOOST_AUTO_TEST_CASE(WrongDistanceCOMPSEGS) { - auto dir = Opm::Connection::Direction::Z; - const auto kind = Opm::Connection::CTFKind::DeckValue; - Opm::WellConnections connection_set(Opm::Connection::Order::TRACK, 10,10); - Opm::EclipseGrid grid(20,20,20); - connection_set.add(Opm::Connection( 19, 0, 0, grid.getGlobalIndex(19,0,0),1, 0.0, Opm::Connection::State::OPEN , 200, 17.29, 0.25, 0.0, 0.0, 0, dir, kind, 0, 0., 0., true) ); - connection_set.add(Opm::Connection( 19, 0, 1, grid.getGlobalIndex(19,0,1),1, 0.0, Opm::Connection::State::OPEN , 200, 17.29, 0.25, 0.0, 0.0, 0, dir, kind, 0, 0., 0., true) ); - connection_set.add(Opm::Connection( 19, 0, 2, grid.getGlobalIndex(19,0,2),1, 0.0, Opm::Connection::State::OPEN , 200, 17.29, 0.25, 0.0, 0.0, 0, dir, kind, 0, 0., 0., true) ); - - connection_set.add(Opm::Connection( 18, 0, 1, grid.getGlobalIndex(18,0,1),1, 0.0, Opm::Connection::State::OPEN , 200, 17.29, 0.25, 0.0, 0.0, 0, Opm::Connection::Direction::X, kind, 0, 0., 0., true) ); - connection_set.add(Opm::Connection( 17, 0, 1, grid.getGlobalIndex(17,0,1),1, 0.0, Opm::Connection::State::OPEN , 200, 17.29, 0.25, 0.0, 0.0, 0, Opm::Connection::Direction::X, kind, 0, 0., 0., true) ); - connection_set.add(Opm::Connection( 16, 0, 1, grid.getGlobalIndex(16,0,1),1, 0.0, Opm::Connection::State::OPEN , 200, 17.29, 0.25, 0.0, 0.0, 0, Opm::Connection::Direction::X, kind, 0, 0., 0., true) ); - connection_set.add(Opm::Connection( 15, 0, 1, grid.getGlobalIndex(15,0,1),1, 0.0, Opm::Connection::State::OPEN , 200, 17.29, 0.25, 0.0, 0.0, 0, Opm::Connection::Direction::X, kind, 0, 0., 0., true) ); - - BOOST_CHECK_EQUAL( 7U , connection_set.size() ); - - const std::string compsegs_string = - "WELSEGS \n" - "'PROD01' 2512.5 2512.5 1.0e-5 'ABS' 'H--' 'HO' /\n" - "2 2 1 1 2537.5 2537.5 0.3 0.00010 /\n" - "3 3 1 2 2562.5 2562.5 0.2 0.00010 /\n" - "4 4 2 2 2737.5 2537.5 0.2 0.00010 /\n" - "6 6 2 4 3037.5 2539.5 0.2 0.00010 /\n" - "7 7 2 6 3337.5 2534.5 0.2 0.00010 /\n" - "/\n" - "\n" - "COMPSEGS\n" - "PROD01 / \n" - "20 1 1 1 2512.5 2525.0 /\n" - "20 1 2 1 2525.0 2550.0 /\n" - "20 1 3 1 2550.0 2545.0 /\n" - "19 1 2 2 2637.5 2837.5 /\n" - "18 1 2 2 2837.5 3037.5 /\n" - "17 1 2 2 3037.5 3237.5 /\n" - "16 1 2 2 3237.5 3437.5 /\n" - "/\n"; - - Opm::Parser parser; - Opm::Deck deck = parser.parseString(compsegs_string); - - const Opm::DeckKeyword compsegs = deck.getKeyword("COMPSEGS"); - BOOST_CHECK_EQUAL( 8U, compsegs.size() ); - - const Opm::DeckKeyword welsegs = deck.getKeyword("WELSEGS"); - Opm::WellSegments segment_set(welsegs); - - BOOST_CHECK_EQUAL(6U, segment_set.size()); - - Opm::ErrorGuard errorGuard; - Opm::ParseContext parseContext; - parseContext.update(Opm::ParseContext::SCHEDULE_COMPSEGS_INVALID, Opm::InputError::THROW_EXCEPTION); - BOOST_CHECK_THROW(std::unique_ptr(Opm::newConnectionsWithSegments(compsegs, connection_set, segment_set, grid, parseContext, errorGuard)), std::invalid_argument); - - parseContext.update(Opm::ParseContext::SCHEDULE_COMPSEGS_INVALID, Opm::InputError::IGNORE); - BOOST_CHECK_NO_THROW(std::unique_ptr(Opm::newConnectionsWithSegments(compsegs, connection_set, segment_set, grid, parseContext, errorGuard))); -} - -BOOST_AUTO_TEST_CASE(NegativeDepthCOMPSEGS) { - auto dir = Opm::Connection::Direction::Z; - const auto kind = Opm::Connection::CTFKind::DeckValue; - Opm::WellConnections connection_set(Opm::Connection::Order::TRACK, 10,10); - Opm::EclipseGrid grid(20,20,20); - connection_set.add(Opm::Connection( 19, 0, 0, grid.getGlobalIndex(19,0,0),1, 0.0, Opm::Connection::State::OPEN , 200, 17.29, 0.25, 0.0, 0.0, 0, dir, kind, 0, 0., 0., true) ); - connection_set.add(Opm::Connection( 19, 0, 1, grid.getGlobalIndex(19,0,1),1, 0.0, Opm::Connection::State::OPEN , 200, 17.29, 0.25, 0.0, 0.0, 0, dir, kind, 0, 0., 0., true) ); - connection_set.add(Opm::Connection( 19, 0, 2, grid.getGlobalIndex(19,0,2),1, 0.0, Opm::Connection::State::OPEN , 200, 17.29, 0.25, 0.0, 0.0, 0, dir, kind, 0, 0., 0., true) ); - - connection_set.add(Opm::Connection( 18, 0, 1, grid.getGlobalIndex(18,0,1),1, 0.0, Opm::Connection::State::OPEN , 200, 17.29, 0.25, 0.0, 0.0, 0, Opm::Connection::Direction::X, kind, 0, 0., 0., true) ); - connection_set.add(Opm::Connection( 17, 0, 1, grid.getGlobalIndex(17,0,1),1, 0.0, Opm::Connection::State::OPEN , 200, 17.29, 0.25, 0.0, 0.0, 0, Opm::Connection::Direction::X, kind, 0, 0., 0., true) ); - connection_set.add(Opm::Connection( 16, 0, 1, grid.getGlobalIndex(16,0,1),1, 0.0, Opm::Connection::State::OPEN , 200, 17.29, 0.25, 0.0, 0.0, 0, Opm::Connection::Direction::X, kind, 0, 0., 0., true) ); - connection_set.add(Opm::Connection( 15, 0, 1, grid.getGlobalIndex(15,0,1),1, 0.0, Opm::Connection::State::OPEN , 200, 17.29, 0.25, 0.0, 0.0, 0, Opm::Connection::Direction::X, kind, 0, 0., 0., true) ); - - BOOST_CHECK_EQUAL( 7U , connection_set.size() ); - - const std::string compsegs_string = - "WELSEGS \n" - "'PROD01' 2512.5 2512.5 1.0e-5 'ABS' 'H--' 'HO' /\n" - "2 2 1 1 2537.5 2537.5 0.3 0.00010 /\n" - "3 3 1 2 2562.5 2562.5 0.2 0.00010 /\n" - "4 4 2 2 2737.5 2537.5 0.2 0.00010 /\n" - "6 6 2 4 3037.5 2539.5 0.2 0.00010 /\n" - "7 7 2 6 3337.5 2534.5 0.2 0.00010 /\n" - "/\n" - "\n" - "COMPSEGS\n" - "PROD01 / \n" - "20 1 1 1 2512.5 2525.0 /\n" - "20 1 2 1 2525.0 2550.0 /\n" - "20 1 3 1 2550.0 2575.0 /\n" - "19 1 2 2 2637.5 2837.5 2* -8./\n" - "18 1 2 2 2837.5 3037.5 /\n" - "17 1 2 2 3037.5 3237.5 /\n" - "16 1 2 2 3237.5 3437.5 /\n" - "/\n"; - - Opm::Parser parser; - Opm::Deck deck = parser.parseString(compsegs_string); - - const Opm::DeckKeyword compsegs = deck.getKeyword("COMPSEGS"); - BOOST_CHECK_EQUAL( 8U, compsegs.size() ); - - const Opm::DeckKeyword welsegs = deck.getKeyword("WELSEGS"); - Opm::WellSegments segment_set(welsegs); - - BOOST_CHECK_EQUAL(6U, segment_set.size()); - - Opm::ErrorGuard errorGuard; - Opm::ParseContext parseContext; - std::unique_ptr wconns{nullptr}; - parseContext.update(Opm::ParseContext::SCHEDULE_COMPSEGS_NOT_SUPPORTED, Opm::InputError::THROW_EXCEPTION); - BOOST_CHECK_THROW(wconns.reset(Opm::newConnectionsWithSegments(compsegs, connection_set, segment_set, grid, parseContext, errorGuard)), std::invalid_argument); - - parseContext.update(Opm::ParseContext::SCHEDULE_COMPSEGS_NOT_SUPPORTED, Opm::InputError::IGNORE); - BOOST_CHECK_NO_THROW(wconns.reset(Opm::newConnectionsWithSegments(compsegs, connection_set, segment_set, grid, parseContext, errorGuard))); -} - -BOOST_AUTO_TEST_CASE(testwsegvalv) { - auto dir = Opm::Connection::Direction::Z; - const auto kind = Opm::Connection::CTFKind::DeckValue; - Opm::WellConnections connection_set(Opm::Connection::Order::TRACK, 10,10); - Opm::EclipseGrid grid(20,20,20); - connection_set.add(Opm::Connection( 19, 0, 0, grid.getGlobalIndex(19,0,0), 1, 0.0, Opm::Connection::State::OPEN , 200, 17.29, 0.25, 0.0, 0.0, 0, dir, kind, 0, 0., 0., true) ); - connection_set.add(Opm::Connection( 19, 0, 1, grid.getGlobalIndex(19,0,1), 1, 0.0, Opm::Connection::State::OPEN , 200, 17.29, 0.25, 0.0, 0.0, 0, dir, kind, 0, 0., 0., true) ); - connection_set.add(Opm::Connection( 19, 0, 2, grid.getGlobalIndex(19,0,2), 1, 0.0, Opm::Connection::State::OPEN , 200, 17.29, 0.25, 0.0, 0.0, 0, dir, kind, 0, 0., 0., true) ); - - connection_set.add(Opm::Connection( 18, 0, 1, grid.getGlobalIndex(18,0,1), 1, 0.0, Opm::Connection::State::OPEN , 200, 17.29, 0.25, 0.0, 0.0, 0, Opm::Connection::Direction::X, kind, 0, 0., 0., true) ); - connection_set.add(Opm::Connection( 17, 0, 1, grid.getGlobalIndex(17,0,1), 1, 0.0, Opm::Connection::State::OPEN , 200, 17.29, 0.25, 0.0, 0.0, 0, Opm::Connection::Direction::X, kind, 0, 0., 0., true) ); - connection_set.add(Opm::Connection( 16, 0, 1, grid.getGlobalIndex(16,0,1), 1, 0.0, Opm::Connection::State::OPEN , 200, 17.29, 0.25, 0.0, 0.0, 0, Opm::Connection::Direction::X, kind, 0, 0., 0., true) ); - connection_set.add(Opm::Connection( 15, 0, 1, grid.getGlobalIndex(15,0,1), 1, 0.0, Opm::Connection::State::OPEN , 200, 17.29, 0.25, 0.0, 0.0, 0, Opm::Connection::Direction::X, kind, 0, 0., 0., true) ); - - BOOST_CHECK_EQUAL( 7U , connection_set.size() ); - - const std::string compsegs_string = - "WELSEGS \n" - "'PROD01' 2512.5 2512.5 1.0e-5 'ABS' 'HF-' 'HO' /\n" - "2 2 1 1 2537.5 2537.5 0.3 0.00010 /\n" - "3 3 1 2 2562.5 2562.5 0.2 0.00010 /\n" - "4 4 2 2 2737.5 2537.5 0.2 0.00010 /\n" - "6 6 2 4 3037.5 2539.5 0.2 0.00010 /\n" - "7 7 2 6 3337.5 2534.5 0.2 0.00010 /\n" - "8 8 3 6 3037.6 2539.5 0.2 0.00015 /\n" - "9 9 4 7 3337.6 2534.5 0.2 0.00015 /\n" - "/\n" - "\n" - "COMPSEGS\n" - "PROD01 / \n" - "20 1 1 1 2512.5 2525.0 /\n" - "20 1 2 1 2525.0 2550.0 /\n" - "20 1 3 1 2550.0 2575.0 /\n" - "19 1 2 2 2637.5 2837.5 /\n" - "18 1 2 2 2837.5 3037.5 /\n" - "17 1 2 3 2937.5 3137.5 /\n" - "16 1 2 4 3237.5 3437.5 /\n" - "/\n" - "WSEGVALV\n" - "'PROD01' 8 0.002 5. /\n" - "'PROD01' 9 0.001 6. 0. 1.2 0.1 8. SHUT 9./\n" - "/\n"; - - Opm::Parser parser; - Opm::Deck deck = parser.parseString(compsegs_string); - - const Opm::DeckKeyword compsegs = deck.getKeyword("COMPSEGS"); - BOOST_CHECK_EQUAL( 8U, compsegs.size() ); - - const Opm::DeckKeyword welsegs = deck.getKeyword("WELSEGS"); - Opm::WellSegments segment_set(welsegs); - - BOOST_CHECK_EQUAL(8U, segment_set.size()); - - Opm::ErrorGuard errorGuard; - Opm::ParseContext parseContext; - parseContext.update(Opm::ParseContext::SCHEDULE_COMPSEGS_INVALID, Opm::InputError::THROW_EXCEPTION); - parseContext.update(Opm::ParseContext::SCHEDULE_COMPSEGS_NOT_SUPPORTED, Opm::InputError::THROW_EXCEPTION); - std::unique_ptr new_connection_set{nullptr}; - BOOST_CHECK_NO_THROW(new_connection_set.reset(Opm::newConnectionsWithSegments(compsegs, connection_set, segment_set, grid, parseContext, errorGuard))); - - // checking the WSEGVALV segment - const Opm::DeckKeyword wsegvalv = deck.getKeyword("WSEGVALV"); - BOOST_CHECK_EQUAL(2U, wsegvalv.size()); - - const Opm::DeckRecord& record1 = wsegvalv.getRecord(0); - const int seg1 = record1.getItem("SEGMENT_NUMBER").get< int >(0); - BOOST_CHECK_EQUAL(8, seg1); - - const Opm::DeckRecord& record2 = wsegvalv.getRecord(1); - const int seg2 = record2.getItem("SEGMENT_NUMBER").get< int >(0); - BOOST_CHECK_EQUAL(9, seg2); - - const auto segvalv_map = Opm::Valve::fromWSEGVALV(wsegvalv); - BOOST_CHECK_EQUAL(1U, segvalv_map.size()); - - const auto it = segvalv_map.begin(); - const std::string& well_name = it->first; - BOOST_CHECK_EQUAL(well_name, "PROD01"); - - const auto& segvalv_vector = it->second; - BOOST_CHECK_EQUAL(2U, segvalv_vector.size()); - - const int segment_number1 = segvalv_vector[0].first; - BOOST_CHECK_EQUAL(8, segment_number1); - const Opm::Valve& valve1 = segvalv_vector[0].second; - - Opm::Segment segment1 = segment_set.getFromSegmentNumber(segment_number1); - const double segment_length1 = segment_set.segmentLength(segment_number1); - segment1.updateValve(valve1, segment_length1); - BOOST_CHECK(Opm::Segment::SegmentType::VALVE==segment1.segmentType()); - - const Opm::Valve* valv1 = segment1.valve(); - BOOST_CHECK_EQUAL(valv1->conFlowCoefficient(), 0.002); - BOOST_CHECK_EQUAL(valv1->conCrossArea(), 5.); - BOOST_CHECK_EQUAL(valv1->conMaxCrossArea(), 0.031415926535897934); - BOOST_CHECK_CLOSE(valv1->pipeAdditionalLength(), 0.1, 1.e-10); - BOOST_CHECK_EQUAL(valv1->pipeDiameter(), 0.2); - BOOST_CHECK_EQUAL(valv1->pipeRoughness(), 0.00015); - BOOST_CHECK_EQUAL(valv1->pipeCrossArea(), 0.031415926535897934); - BOOST_CHECK(valv1->status()==Opm::ICDStatus::OPEN); - - const int segment_number2 = segvalv_vector[1].first; - BOOST_CHECK_EQUAL(9, segment_number2); - const Opm::Valve& valve2 = segvalv_vector[1].second; - Opm::Segment segment2 = segment_set.getFromSegmentNumber(segment_number1); - const double segment_length2 = segment_set.segmentLength(segment_number2); - // checking the original segment input - BOOST_CHECK_EQUAL(segment2.internalDiameter(), 0.2); - BOOST_CHECK_EQUAL(segment2.roughness(), 0.00015); - BOOST_CHECK_EQUAL(segment2.crossArea(), 0.031415926535897934); - - segment2.updateValve(valve2, segment_length2); - BOOST_CHECK(Opm::Segment::SegmentType::VALVE ==segment2.segmentType()); - - const Opm::Valve* valv2 = segment2.valve(); - BOOST_CHECK_EQUAL(valv2->conFlowCoefficient(), 0.001); - BOOST_CHECK_EQUAL(valv2->conCrossArea(), 6.); - BOOST_CHECK_EQUAL(valv2->conMaxCrossArea(), 9.); - BOOST_CHECK_EQUAL(valv2->pipeAdditionalLength(), 0.0); - BOOST_CHECK_EQUAL(valv2->pipeDiameter(), 1.2); - BOOST_CHECK_EQUAL(valv2->pipeRoughness(), 0.1); - BOOST_CHECK_EQUAL(valv2->pipeCrossArea(), 8.); - BOOST_CHECK(valv2->status()==Opm::ICDStatus::SHUT); - - // valve changes the segment data - BOOST_CHECK_EQUAL(segment2.internalDiameter(), valv2->pipeDiameter()); - BOOST_CHECK_EQUAL(segment2.roughness(), valv2->pipeRoughness()); - BOOST_CHECK_EQUAL(segment2.crossArea(), valv2->pipeCrossArea()); -} - - -BOOST_AUTO_TEST_CASE(MSW_SEGMENT_LENGTH) { - Opm::Parser parser; - Opm::Deck deck = parser.parseFile("MSW.DATA"); - Opm::EclipseState st(deck); - Opm::Schedule sched(deck, st); - - - const auto& well = sched.getWell("PROD01", 0); - const auto& segments = well.getSegments(); - BOOST_CHECK_CLOSE( segments.segmentLength(1), 2512.50, 1e-5); - BOOST_CHECK_CLOSE( segments.segmentLength(2), 25, 1e-5); - BOOST_CHECK_CLOSE( segments.segmentLength(6), 25, 1e-5); - BOOST_CHECK_CLOSE( segments.segmentLength(7), 200, 1e-5); - - BOOST_CHECK_CLOSE( segments.segmentDepthChange(1), 2512.50, 1e-5); - BOOST_CHECK_CLOSE( segments.segmentDepthChange(2), 22, 1e-5); - BOOST_CHECK_CLOSE( segments.segmentDepthChange(6), 21, 1e-5); - BOOST_CHECK_CLOSE( segments.segmentDepthChange(7), 4, 1e-5); -} - -BOOST_AUTO_TEST_CASE(MSW_BRANCH_SEGMENTS) { - Opm::Parser parser; - Opm::Deck deck = parser.parseFile("MSW.DATA"); - Opm::EclipseState st(deck); - Opm::Schedule sched(deck, st); - - - const auto& well = sched.getWell("PROD01", 0); - const auto& segments = well.getSegments(); - { - auto seg100 = segments.branchSegments(100); - BOOST_CHECK(seg100.empty()); - } - { - auto seg1 = segments.branchSegments(1); - BOOST_CHECK_EQUAL( seg1.size(), 6 ); - const std::vector expected = {1,2,3,4,5,6}; - for (std::size_t index = 0; index < seg1.size(); index++) - BOOST_CHECK_EQUAL( expected[index], seg1[index].segmentNumber()); - } - { - auto seg2 = segments.branchSegments(2); - const std::vector expected = {7,8,9,10,11}; - BOOST_CHECK_EQUAL( seg2.size(), 5 ); - for (std::size_t index = 0; index < seg2.size(); index++) - BOOST_CHECK_EQUAL( expected[index], seg2[index].segmentNumber()); - } - { - auto seg5 = segments.branchSegments(5); - const std::vector expected = {22,23,24,25,26}; - BOOST_CHECK_EQUAL( seg5.size(), 5 ); - for (std::size_t index = 0; index < seg5.size(); index++) - BOOST_CHECK_EQUAL( expected[index], seg5[index].segmentNumber()); - } -} - - diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/OrderedMapTests.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/OrderedMapTests.cpp deleted file mode 100644 index 9ffb84fee1..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/OrderedMapTests.cpp +++ /dev/null @@ -1,172 +0,0 @@ -/* - Copyright 2014 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include -#include -#include - -#define BOOST_TEST_MODULE ScheduleTests -#include -#include - -#include -#include - - -BOOST_AUTO_TEST_CASE( check_empty) { - Opm::OrderedMap map; - BOOST_CHECK_EQUAL( 0U , map.size() ); - BOOST_CHECK_THROW( map.iget( 0 ) , std::invalid_argument); - BOOST_CHECK_THROW( map.get( "KEY" ) , std::invalid_argument); - BOOST_CHECK_THROW( map.at("KEY"), std::invalid_argument); - BOOST_CHECK_THROW( map.at(0), std::invalid_argument); - BOOST_CHECK_EQUAL( map.count("NO_SUCH_KEY"), 0); -} - -BOOST_AUTO_TEST_CASE( operator_square ) { - Opm::OrderedMap map; - map.insert(std::make_pair("CKEY1" , "Value1")); - map.insert(std::make_pair("BKEY2" , "Value2")); - map.insert(std::make_pair("AKEY3" , "Value3")); - - const auto& value = map["CKEY1"]; - BOOST_CHECK_EQUAL( value, std::string("Value1")); - BOOST_CHECK_EQUAL( map.size(), 3); - - auto& new_value = map["NEW_KEY"]; - BOOST_CHECK_EQUAL( map.size(), 4); - BOOST_CHECK_EQUAL( new_value, ""); -} - -BOOST_AUTO_TEST_CASE( find ) { - Opm::OrderedMap map; - map.insert(std::make_pair("CKEY1" , "Value1")); - map.insert(std::make_pair("BKEY2" , "Value2")); - map.insert(std::make_pair("AKEY3" , "Value3")); - - auto iter_end = map.find("NO_SUCH_KEY"); - BOOST_CHECK( iter_end == map.end()); - - - auto iter_found = map.find("CKEY1"); - BOOST_CHECK_EQUAL( iter_found->first, std::string("CKEY1")); - BOOST_CHECK_EQUAL( iter_found->second, std::string("Value1")); -} - -BOOST_AUTO_TEST_CASE( check_order ) { - Opm::OrderedMap map; - map.insert(std::make_pair("CKEY1" , "Value1")); - map.insert(std::make_pair("BKEY2" , "Value2")); - map.insert(std::make_pair("AKEY3" , "Value3")); - - BOOST_CHECK_EQUAL( 3U , map.size() ); - BOOST_CHECK( map.count("CKEY1") > 0); - BOOST_CHECK( map.count("BKEY2") > 0); - BOOST_CHECK( map.count("AKEY3") > 0); - - BOOST_CHECK_EQUAL( "Value1" , map.get("CKEY1")); - BOOST_CHECK_EQUAL( "Value1" , map.iget( 0 )); - BOOST_CHECK_EQUAL( map.count("CKEY"), 0); - - BOOST_CHECK_EQUAL( "Value2" , map.get("BKEY2")); - BOOST_CHECK_EQUAL( "Value2" , map.iget( 1 )); - - BOOST_CHECK_EQUAL( "Value3" , map.at("AKEY3")); - BOOST_CHECK_EQUAL( "Value3" , map.at( 2 )); - - map.insert( std::make_pair("CKEY1" , "NewValue1")); - BOOST_CHECK_EQUAL( "NewValue1" , map.get("CKEY1")); - BOOST_CHECK_EQUAL( "NewValue1" , map.iget( 0 )); - - { - std::vector values; - for (auto iter = map.begin(); iter != map.end(); ++iter) - values.push_back( iter->second ); - - BOOST_CHECK_EQUAL( values[0] , "NewValue1"); - BOOST_CHECK_EQUAL( values[1] , "Value2"); - BOOST_CHECK_EQUAL( values[2] , "Value3"); - } - - BOOST_CHECK_EQUAL(map.erase("NO_SUCH_KEY"), 0); - BOOST_CHECK_EQUAL(map.erase("BKEY2"), 1); - /* - BOOST_CHECK_EQUAL( "NewValue1" , map.get("CKEY1")); - BOOST_CHECK_EQUAL( "NewValue1" , map.iget( 0 )); - BOOST_CHECK_EQUAL( map.count("CKEY"), 0); - - BOOST_CHECK_EQUAL( "Value3" , map.at("AKEY3")); - BOOST_CHECK_EQUAL( "Value3" , map.at( 1 )); - */ -} - -BOOST_AUTO_TEST_CASE(test_IOrderSet) { - Opm::IOrderSet iset; - BOOST_CHECK(iset.empty()); - BOOST_CHECK_EQUAL(iset.size(), 0); - BOOST_CHECK_EQUAL(iset.count("HEI"), 0); - BOOST_CHECK_EQUAL(iset.contains("HEI"), false); - - BOOST_CHECK(iset.insert("HEI")); - BOOST_CHECK_EQUAL(iset.size(), 1); - BOOST_CHECK_EQUAL(iset.count("HEI"), 1); - BOOST_CHECK_EQUAL(iset.contains("HEI"), true); - - BOOST_CHECK(!iset.insert("HEI")); - BOOST_CHECK_EQUAL(iset.size(), 1); - BOOST_CHECK_EQUAL(iset.count("HEI"), 1); - BOOST_CHECK_EQUAL(iset.contains("HEI"), true); - - BOOST_CHECK_THROW(iset[10], std::out_of_range); - - - Opm::IOrderSet iset2; - - - for (int i=10; i >= 0; i--) - iset2.insert(i); - - int expected = 10; - std::size_t index=0; - const auto &d = iset2.data(); - for (const auto &v : iset2) { - BOOST_CHECK_EQUAL(v, expected); - BOOST_CHECK_EQUAL(iset2[index], expected); - BOOST_CHECK_EQUAL(d[index], expected); - expected--; - index++; - } - - - Opm::IOrderSet iset3; - iset3.insert("AAA"); - iset3.insert("BBB"); - - BOOST_CHECK_EQUAL(iset3[0], "AAA"); - BOOST_CHECK_EQUAL(iset3[1], "BBB"); - - BOOST_CHECK_EQUAL(iset3.erase("AAA"), 1); - BOOST_CHECK_EQUAL(iset3.size() , 1); - BOOST_CHECK_EQUAL(iset3[0], "BBB"); - - BOOST_CHECK_EQUAL(iset3.erase("AAA"), 0); - BOOST_CHECK_EQUAL(iset3.size() , 1); - BOOST_CHECK_EQUAL(iset3[0], "BBB"); -} - diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/PYACTION.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/PYACTION.cpp deleted file mode 100644 index 6662e965e7..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/PYACTION.cpp +++ /dev/null @@ -1,72 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ -#include "config.h" -#include -#include - -#define BOOST_TEST_MODULE PY_ACTION_TESTER -#include -#include -#include -#include -#include - -using namespace Opm; - -BOOST_AUTO_TEST_CASE(ParsePYACTION) { - Parser parser; - auto python = std::make_shared(); - auto deck = parser.parseFile("PYACTION.DATA"); - - auto keyword = deck.getKeyword(0); - const auto& record0 = keyword.getRecord(0); - const auto& record1 = keyword.getRecord(1); - - auto run_count = Action::PyAction::from_string(record0.getItem(1).get(0)); - const std::string& ok_module = deck.makeDeckPath(record1.getItem(0).get(0)); - Action::PyAction pyaction(python, "ACT1", run_count, ok_module); - BOOST_CHECK_EQUAL(pyaction.name(), "ACT1"); -} - - -#ifdef EMBEDDED_PYTHON -BOOST_AUTO_TEST_CASE(ParsePYACTION_Modules) { - Parser parser; - auto python = std::make_shared(); - auto deck = parser.parseFile("PYACTION.DATA"); - auto keyword = deck.getKeyword(0); - const auto& record0 = keyword.getRecord(0); - const auto& record1 = keyword.getRecord(1); - - const auto& name = record0.getItem(0).get(0); - auto run_count = Action::PyAction::from_string(record0.getItem(1).get(0)); - const std::string& ok_module = deck.makeDeckPath(record1.getItem(0).get(0)); - Action::PyAction pyaction(python, "ACT1", run_count, ok_module); - - const std::string& broken_module = deck.makeDeckPath("action_missing_run.py"); - BOOST_CHECK_THROW(Action::PyAction(python , "ACT2", run_count, broken_module), std::runtime_error); - - const std::string& broken_module2 = deck.makeDeckPath("action_syntax_error.py"); - BOOST_CHECK_THROW(Action::PyAction(python , "ACT2", run_count, broken_module2), std::runtime_error); - - const std::string& missing_module = deck.makeDeckPath("no_such_module.py"); - BOOST_CHECK_THROW(Action::PyAction(python , "ACT2", run_count, missing_module), std::invalid_argument); -} -#endif - diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/ParseContextTests.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/ParseContextTests.cpp deleted file mode 100644 index 61420f302f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/ParseContextTests.cpp +++ /dev/null @@ -1,814 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include -#include -#include -#include -#define BOOST_TEST_MODULE ParseContextTests -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - - -#include -#include -#include -#include - -using namespace Opm; - - - - - -BOOST_AUTO_TEST_CASE(TestUnkownKeyword) { - const char * deck1 = - "RUNSPEC\n" - "DIMENS\n" - " 10 10 10 /n" - "\n"; - - const char * deck2 = - "1rdomTX\n" - "RUNSPEC\n" - "DIMENS\n" - " 10 10 10 /n" - "\n"; - - ErrorGuard errors; - ParseContext parseContext; - Parser parser(false); - - - parser.addKeyword(); - parseContext.update(ParseContext::PARSE_UNKNOWN_KEYWORD , InputError::THROW_EXCEPTION ); - BOOST_CHECK_THROW( parser.parseString( deck1 , parseContext , errors) , std::invalid_argument); - - parseContext.update(ParseContext::PARSE_UNKNOWN_KEYWORD , InputError::IGNORE ); - BOOST_CHECK_NO_THROW( parser.parseString( deck1 , parseContext , errors) ); - - parseContext.update(ParseContext::PARSE_UNKNOWN_KEYWORD , InputError::THROW_EXCEPTION ); - parseContext.update(ParseContext::PARSE_RANDOM_TEXT , InputError::IGNORE ); - BOOST_CHECK_THROW( parser.parseString( deck2 , parseContext , errors) , std::invalid_argument); - - parseContext.update(ParseContext::PARSE_UNKNOWN_KEYWORD , InputError::IGNORE ); - parseContext.update(ParseContext::PARSE_RANDOM_TEXT , InputError::IGNORE ); - BOOST_CHECK_NO_THROW( parser.parseString( deck2 , parseContext , errors) ); - - parseContext.update(ParseContext::PARSE_UNKNOWN_KEYWORD , InputError::IGNORE ); - parseContext.update(ParseContext::PARSE_RANDOM_TEXT , InputError::THROW_EXCEPTION ); - BOOST_CHECK_THROW( parser.parseString( deck2 , parseContext , errors) , std::invalid_argument); - - parseContext.update(ParseContext::PARSE_UNKNOWN_KEYWORD , InputError::IGNORE ); - parseContext.update(ParseContext::PARSE_RANDOM_TEXT , InputError::IGNORE ); - BOOST_CHECK_NO_THROW( parser.parseString( deck2 , parseContext , errors) ); -} - - -BOOST_AUTO_TEST_CASE(TestUnkownKeywordII) { - const char * deck1 = - "RUNSPEC\n" - "DIMENS\n" - " 10 10 10 /n" - "\n"; - - - ErrorGuard errors; - ParseContext parseContext; - Parser parser(false); - - - parser.addKeyword(); - parseContext.update(ParseContext::PARSE_UNKNOWN_KEYWORD , InputError::THROW_EXCEPTION ); - BOOST_CHECK_THROW( parser.parseString( deck1 , parseContext, errors ) , std::invalid_argument); - parseContext.ignoreKeyword("RUNSPEC"); - BOOST_CHECK_NO_THROW( parser.parseString( deck1 , parseContext, errors ) ); -} - - -BOOST_AUTO_TEST_CASE(Handle_extra_records) { - const char * deck_string = - "EQLDIMS\n" - " 2 100 20 1 1 /\n" - "\n" - "EQUIL\n" - " 2469 382.4 1705.0 0.0 500 0.0 1 1 20 /\n" - " 2469 382.4 1705.0 0.0 500 0.0 1 1 20 /\n" - " 2470 382.4 1705.0 0.0 500 0.0 1 1 20 /\n" - "GRID\n"; - - ErrorGuard errors; - ParseContext parseContext; - Parser parser(false); - - parser.addKeyword(); - parser.addKeyword(); - parser.addKeyword(); - BOOST_CHECK_THROW( parser.parseString( deck_string , parseContext, errors ) , std::invalid_argument ); - - parseContext.update(ParseContext::PARSE_EXTRA_RECORDS , InputError::IGNORE ); - parser.parseString( deck_string , parseContext, errors ); - BOOST_CHECK( parser.hasKeyword( "GRID" ) ); - - parseContext.update(ParseContext::PARSE_EXTRA_RECORDS , InputError::THROW_EXCEPTION ); - BOOST_CHECK_THROW( parser.parseString( deck_string , parseContext, errors ) , std::invalid_argument); -} - - -BOOST_AUTO_TEST_CASE(Handle_extra_records_2) { - const char * deck_string = - "EQLDIMS\n" - " 2 100 20 1 1 /\n" - "\n" - "EQUIL\n" - " 2469 382.4 1705.0 0.0 500 0.0 1 1 20 /\n" - " 2469 382.4 1705.0 0.0 500 0.0 1 1 20 /\n" - "GRID\n" - "DIMENS\n" - " 10 10 3 /\n" - " 5 3 2 /\n"; - - ErrorGuard errors; - ParseContext parseContext; - Parser parser(false); - - parser.addKeyword(); - parser.addKeyword(); - parser.addKeyword(); - parser.addKeyword(); - - parseContext.update(ParseContext::PARSE_EXTRA_RECORDS , InputError::IGNORE ); - BOOST_CHECK_THROW( parser.parseString( deck_string , parseContext, errors ), std::invalid_argument ); -} - - -BOOST_AUTO_TEST_CASE(TestUnkownKeyword_DATA) { - const char * deck_string1 = - "RUNSPEC\n" - "\n" - "UNKNOWN1\n" - "\n" - "UNKNOWN2\n" - " 10 10 10 /n" - "\n" - "UNKNOWN3\n" - " 11 11 11 /n" - "/\n" - "\n" - "DIMENS\n" - " 12 12 12 /n" - "\n"; - - - const char * deck_string2 = - "RUNSPEC\n" - "\n" - "UNKNOWN1\n" - "\n" - "UNKNOWN2\n" - " 10 10 10 /n" - "\n" - "UNKNOWN3\n" - " 11 11 11 /n" - "/\n" - "\n" - "DIMENS\n" - " 12 12 12 /\n" - "Ran/dom Noise; \n" - "with 0 0 0 Data /\n" - "/\n" - "\n"; - - - ErrorGuard errors; - ParseContext parseContext; - Parser parser(false); - - - parser.addKeyword(); - parser.addKeyword(); - parseContext.update(ParseContext::PARSE_UNKNOWN_KEYWORD , InputError::IGNORE ); - parseContext.update(ParseContext::PARSE_RANDOM_TEXT , InputError::THROW_EXCEPTION ); - { - Deck deck = parser.parseString( deck_string1 , parseContext, errors ); - BOOST_CHECK( deck.hasKeyword( "RUNSPEC") ); - BOOST_CHECK( deck.hasKeyword( "DIMENS") ); - } - BOOST_CHECK_THROW( parser.parseString( deck_string2 , parseContext, errors ) , std::invalid_argument); -} - - -BOOST_AUTO_TEST_CASE(TEST_UNKNOWN_OPERATE) { - const char * deck = - "OPERATE\n" - "SWL 6* MULTX PERMX 1.E10 / Temp: SWL=1.E10*PERMX\n" - "SWL 6* MINLIM SWL 1.0 /\n" - "SWL 6* LOG10 SWL / Temp: SWL=log(1.E10*PERMX)\n" - "SWL 6* MULTA SWL -0.06 0.91 / Final: SWL=0.31-0.06*log(PERMX)\n" - "--SWCR 6* COPY SWL / SWCR=SWL\n" - "SWCR 6* MULTA SWL 1.0 0.0 / SWCR=SWL+0.0 (+0.3)\n" - "SWCR 6* MAXLIM SWCR 0.7 / max(SWCR)=0.7\n" - "SGU 6* MULTA SWL -1.0 1.0 / SGU=1-SWL\n" - "/\n"; - - ErrorGuard errors; - ParseContext parseContext; - Parser parser(false); - - parseContext.update(ParseContext::PARSE_UNKNOWN_KEYWORD , InputError::THROW_EXCEPTION ); - BOOST_CHECK_THROW( parser.parseString( deck , parseContext, errors ) , std::invalid_argument); - - parseContext.update(ParseContext::PARSE_RANDOM_SLASH , InputError::IGNORE ); - parseContext.update(ParseContext::PARSE_UNKNOWN_KEYWORD , InputError::IGNORE ); - parser.parseString( deck , parseContext, errors ); - BOOST_CHECK_NO_THROW( parser.parseString( deck , parseContext, errors ) ); - - parser.addKeyword(); - parser.parseString( deck , parseContext, errors ); - parseContext.update(ParseContext::PARSE_RANDOM_SLASH , InputError::THROW_EXCEPTION ); - parseContext.update(ParseContext::PARSE_UNKNOWN_KEYWORD , InputError::THROW_EXCEPTION ); - BOOST_CHECK_NO_THROW( parser.parseString( deck , parseContext, errors ) ); -} - - - - -BOOST_AUTO_TEST_CASE( CheckMissingSizeKeyword) { - const char * deck = - "SOLUTION\n" - "EQUIL\n" - " 10 10 10 10 / \n" - "\n"; - - ErrorGuard errors; - ParseContext parseContext; - Parser parser(false); - - parser.addKeyword(); - parser.addKeyword(); - parser.addKeyword(); - - parseContext.update( ParseContext::PARSE_MISSING_DIMS_KEYWORD , InputError::THROW_EXCEPTION ); - BOOST_CHECK_THROW( parser.parseString( deck , parseContext, errors ) , std::invalid_argument); - - parseContext.update( ParseContext::PARSE_MISSING_DIMS_KEYWORD , InputError::IGNORE ); - BOOST_CHECK_NO_THROW( parser.parseString( deck , parseContext, errors ) ); -} - - -BOOST_AUTO_TEST_CASE( CheckUnsupportedInSCHEDULE ) { - const char * deckStringUnSupported = - "START\n" - " 10 'JAN' 2000 /\n" - "RUNSPEC\n" - "DIMENS\n" - " 10 10 10 / \n" - "GRID\n" - "DX\n" - "1000*0.25 /\n" - "DY\n" - "1000*0.25 /\n" - "DZ\n" - "1000*0.25 /\n" - "TOPS\n" - "100*0.25 /\n" - "SCHEDULE\n" - "MULTZ\n" - " 1000*0.10 /\n" - "\n"; - - const char * deckStringSupported = - "START\n" - " 10 'JAN' 2000 /\n" - "RUNSPEC\n" - "DIMENS\n" - " 10 10 10 / \n" - "GRID\n" - "DX\n" - "1000*0.25 /\n" - "DY\n" - "1000*0.25 /\n" - "DZ\n" - "1000*0.25 /\n" - "TOPS\n" - "100*0.25 /\n" - "SCHEDULE\n" - "MULTFLT\n" - " 'F1' 0.10 /\n" - "/\n" - "\n"; - - ErrorGuard errors; - ParseContext parseContext; - Parser parser(true); - - auto deckSupported = parser.parseString( deckStringSupported , parseContext, errors ); - auto deckUnSupported = parser.parseString( deckStringUnSupported , parseContext, errors ); - EclipseGrid grid( deckSupported ); - TableManager table ( deckSupported ); - FieldPropsManager fp(deckSupported, Phases{true, true, true}, grid, table); - Runspec runspec(deckSupported); - auto python = std::make_shared(); - - parseContext.update( ParseContext::UNSUPPORTED_SCHEDULE_GEO_MODIFIER , InputError::IGNORE ); - BOOST_CHECK_NO_THROW( Schedule( deckSupported , grid , fp, runspec, parseContext, errors, python )); - BOOST_CHECK_NO_THROW( Schedule( deckUnSupported, grid , fp, runspec, parseContext, errors, python )); - - parseContext.update( ParseContext::UNSUPPORTED_SCHEDULE_GEO_MODIFIER , InputError::THROW_EXCEPTION ); - BOOST_CHECK_THROW( Schedule( deckUnSupported , grid , fp, runspec , parseContext , errors, python), std::invalid_argument ); - BOOST_CHECK_NO_THROW( Schedule( deckSupported , grid , fp, runspec , parseContext, errors, python)); -} - - - -BOOST_AUTO_TEST_CASE(TestRandomSlash) { - const char * deck1 = - "SCHEDULE\n" - "TSTEP\n" - " 10 10 10 /\n" - "/\n"; - - const char * deck2 = - "SCHEDULE\n" - "TSTEP\n" - " 10 10 10 /\n" - " /\n"; - - - ErrorGuard errors; - ParseContext parseContext; - Parser parser(false); - - - parser.addKeyword(); - parser.addKeyword(); - - parseContext.update(ParseContext::PARSE_RANDOM_SLASH , InputError::THROW_EXCEPTION); - parseContext.update(ParseContext::PARSE_RANDOM_TEXT , InputError::IGNORE); - BOOST_CHECK_THROW( parser.parseString( deck1 , parseContext, errors ) , std::invalid_argument); - BOOST_CHECK_THROW( parser.parseString( deck2 , parseContext, errors ) , std::invalid_argument); - - - parseContext.update(ParseContext::PARSE_RANDOM_SLASH , InputError::IGNORE); - parseContext.update(ParseContext::PARSE_RANDOM_TEXT , InputError::THROW_EXCEPTION); - BOOST_CHECK_NO_THROW( parser.parseString( deck1 , parseContext, errors ) ); - BOOST_CHECK_NO_THROW( parser.parseString( deck2 , parseContext, errors ) ); -} - - - -BOOST_AUTO_TEST_CASE(TestCOMPORD) { - const char * deckString = - "START\n" - " 10 'JAN' 2000 /\n" - "RUNSPEC\n" - "DIMENS\n" - " 10 10 10 / \n" - "GRID\n" - "DX\n" - "1000*0.25 /\n" - "DY\n" - "1000*0.25 /\n" - "DZ\n" - "1000*0.25 /\n" - "TOPS\n" - "100*0.25 /\n" - "SCHEDULE\n" - "COMPORD\n" - " '*' 'DEPTH' /\n" - "/\n"; - - ParseContext parseContext; - ErrorGuard errors; - Parser parser(true); - auto deck = parser.parseString( deckString , parseContext, errors ); - - EclipseGrid grid( deck ); - TableManager table ( deck ); - FieldPropsManager fp( deck, Phases{true, true, true}, grid, table); - Runspec runspec(deck); - auto python = std::make_shared(); - - parseContext.update( ParseContext::UNSUPPORTED_COMPORD_TYPE , InputError::IGNORE); - BOOST_CHECK_NO_THROW( Schedule( deck , grid , fp, runspec, parseContext, errors, python )); - - parseContext.update( ParseContext::UNSUPPORTED_COMPORD_TYPE , InputError::THROW_EXCEPTION); - BOOST_CHECK_THROW( Schedule( deck, grid , fp, runspec , parseContext, errors, python), std::invalid_argument ); -} - - -BOOST_AUTO_TEST_CASE(TestInvalidKey) { - ParseContext parseContext; - BOOST_CHECK_THROW( parseContext.addKey("KEY*", InputError::THROW_EXCEPTION) , std::invalid_argument ); - BOOST_CHECK_THROW( parseContext.addKey("KEY:", InputError::THROW_EXCEPTION) , std::invalid_argument ); -} - - -BOOST_AUTO_TEST_CASE(TestNew) { - ParseContext parseContext; - - BOOST_CHECK_EQUAL( false , parseContext.hasKey("NO")); - parseContext.addKey("NEW_KEY", InputError::THROW_EXCEPTION); - BOOST_CHECK_EQUAL( true , parseContext.hasKey("NEW_KEY")); - BOOST_CHECK_THROW( parseContext.get("NO") , std::invalid_argument ); - BOOST_CHECK_EQUAL( parseContext.get("NEW_KEY") , InputError::THROW_EXCEPTION ); - parseContext.addKey("KEY2", InputError::THROW_EXCEPTION); - BOOST_CHECK_EQUAL( parseContext.get("NEW_KEY") , InputError::THROW_EXCEPTION ); - - BOOST_CHECK_THROW( parseContext.updateKey("NO" , InputError::IGNORE) , std::invalid_argument); - - parseContext.updateKey("NEW_KEY" , InputError::WARN); - BOOST_CHECK_EQUAL( parseContext.get("NEW_KEY") , InputError::WARN ); - - BOOST_CHECK_NO_THROW( parseContext.update("KEY2:NEW_KEY" , InputError::IGNORE)); - BOOST_CHECK_NO_THROW( parseContext.update("UnknownKey" , InputError::IGNORE)); - BOOST_CHECK_EQUAL( parseContext.get("NEW_KEY") , InputError::IGNORE ); - BOOST_CHECK_EQUAL( parseContext.get("KEY2") , InputError::IGNORE ); - - parseContext.addKey("SECRET_KEY", InputError::THROW_EXCEPTION); - parseContext.addKey("NEW_KEY2", InputError::THROW_EXCEPTION); - parseContext.addKey("NEW_KEY3", InputError::THROW_EXCEPTION); - parseContext.update("NEW_KEY*" , InputError::WARN); - BOOST_CHECK_EQUAL( parseContext.get("NEW_KEY") , InputError::WARN ); - BOOST_CHECK_EQUAL( parseContext.get("NEW_KEY2") , InputError::WARN ); - BOOST_CHECK_EQUAL( parseContext.get("NEW_KEY3") , InputError::WARN ); - - parseContext.update( InputError::IGNORE ); - BOOST_CHECK_EQUAL( parseContext.get("NEW_KEY3") , InputError::IGNORE ); - BOOST_CHECK_EQUAL( parseContext.get("SECRET_KEY") , InputError::IGNORE ); - - -} - - -BOOST_AUTO_TEST_CASE( test_constructor_with_values) { - ParseContext parseContext( {{ParseContext::PARSE_RANDOM_SLASH , InputError::IGNORE}, - {"UNSUPPORTED_*" , InputError::WARN}, - {"UNKNWON-IGNORED" , InputError::WARN}}); - - BOOST_CHECK_EQUAL( parseContext.get(ParseContext::PARSE_RANDOM_SLASH) , InputError::IGNORE ); - BOOST_CHECK_EQUAL( parseContext.get(ParseContext::PARSE_RANDOM_TEXT) , InputError::THROW_EXCEPTION ); - BOOST_CHECK_EQUAL( parseContext.get(ParseContext::UNSUPPORTED_INITIAL_THPRES) , InputError::WARN ); - BOOST_CHECK_EQUAL( parseContext.get(ParseContext::UNSUPPORTED_COMPORD_TYPE) , InputError::WARN ); -} - - - -BOOST_AUTO_TEST_CASE( test_too_much_data ) { - const char * deckString = - "RUNSPEC\n" - "DIMENS\n" - " 10 10 10 10 /n" - "\n"; - - ParseContext parseContext; - Parser parser; - ErrorGuard errors; - - - parseContext.update(ParseContext::PARSE_EXTRA_DATA , InputError::THROW_EXCEPTION ); - BOOST_CHECK_THROW( parser.parseString( deckString , parseContext, errors ) , std::invalid_argument); - - parseContext.update(ParseContext::PARSE_EXTRA_DATA , InputError::IGNORE ); - auto deck = parser.parseString( deckString , parseContext, errors ); -} - - -BOOST_AUTO_TEST_CASE(test_1arg_constructor) { - setenv("OPM_ERRORS_IGNORE", "PARSE_RANDOM_SLASH", 1); - { - ParseContext ctx(InputError::WARN); - BOOST_CHECK_EQUAL(ctx.get(ParseContext::UNSUPPORTED_COMPORD_TYPE), InputError::WARN); - BOOST_CHECK_EQUAL(ctx.get(ParseContext::PARSE_RANDOM_SLASH), InputError::IGNORE); - } -} - -BOOST_AUTO_TEST_CASE( test_invalid_wtemplate_config ) { - const std::string defDeckString = R"( - START -- 0 - 10 'JAN' 2000 / - RUNSPEC - DIMENS - 10 10 10 / - GRID - DX - 1000*0.25 / - DY - 1000*0.25 / - DZ - 1000*0.25 / - TOPS - 100*0.25 / - SCHEDULE - DATES -- 1 - 10 OKT 2008 / - / - WELSPECS - 'PROD' 'G1' 10 10 100 'OIL' / - 'INJ' 'G1' 3 3 100 'WATER' / - / - )"; - - ParseContext parseContext; - Parser parser; - ErrorGuard errors; - - parseContext.update(ParseContext::SCHEDULE_INVALID_NAME , InputError::THROW_EXCEPTION ); - - std::vector < std::string > testSamples; - std::string testSample; - - // Invalid well name in COMPDAT - testSample = R"( - COMPDAT - 'SOMETHINGELSE' 10 10 3 3 'OPEN' 1* 1* 0.5 / - / - )"; - testSamples.push_back(testSample); - - // Invalid well name in WCONPROD - testSample = R"( - COMPDAT - 'PROD' 10 10 3 3 'OPEN' 1* 1* 0.5 / - / - WCONPROD - 'SOMETHINGELSE' 'OPEN' 'ORAT' 20000 4* 1000 / - / - )"; - testSamples.push_back(testSample); - - // Invalid well name in WCONINJE - testSample = R"( - COMPDAT - 'INJ' 10 10 3 3 'OPEN' 1* 1* 0.5 / - / - WCONINJE - 'SOMETHINGELSE' 'WATER' 'OPEN' 'RATE' 20000 4* 1000 / - / - )"; - testSamples.push_back(testSample); - - // Invalid well name in WCONINJH - testSample = R"( - COMPDAT - 'INJ' 10 10 3 3 'OPEN' 1* 1* 0.5 / - / - WCONINJH - 'SOMETHINGELSE' 'WAT' 'OPEN' 20000 / - / - )"; - testSamples.push_back(testSample); - - // Invalid well name in WTEMP - testSample = R"( - COMPDAT - 'INJ' 10 10 3 3 'OPEN' 1* 1* 0.5 / - / - WCONINJE - 'INJ' 'WATER' 'OPEN' 'RATE' 20000 4* / - / - DATES - 15 OKT 2008 / - / - WTEMP - 'SOMETHINGELSE' 40.0 / - / - )"; - testSamples.push_back(testSample); - - // Invalid well name in WINJTEMP - testSample = R"( - COMPDAT - 'INJ' 10 10 3 3 'OPEN' 1* 1* 0.5 / - / - WCONINJE - 'INJ' 'WATER' 'OPEN' 'RATE' 20000 4* / - / - DATES - 15 OKT 2008 / - / - WINJTEMP - 'SOMETHINGELSE' 1* 40.0 1* / - / - )"; - testSamples.push_back(testSample); - - // Invalid well name in WSOLVENT - testSample = R"( - COMPDAT - 'INJ' 10 10 3 3 'OPEN' 1* 1* 0.5 / - / - WCONINJE - 'INJ' 'WATER' 'OPEN' 'RATE' 20000 4* / - / - DATES - 15 OKT 2008 / - / - WSOLVENT - 'SOMETHINGELSE' 1.0 / - / - )"; - testSamples.push_back(testSample); - - // Invalid well name in WPOLYMER - testSample = R"( - COMPDAT - 'INJ' 10 10 3 3 'OPEN' 1* 1* 0.5 / - / - WCONINJE - 'INJ' 'WATER' 'OPEN' 'RATE' 20000 4* / - / - DATES - 15 OKT 2008 / - / - WPOLYMER - 'SOMETHINGELSE' 1.0 0.0 / - / - )"; - testSamples.push_back(testSample); - - // Invalid well name in WFOAM - testSample = R"( - COMPDAT - 'INJ' 10 10 3 3 'OPEN' 1* 1* 0.5 / - / - WCONINJE - 'INJ' 'WATER' 'OPEN' 'RATE' 20000 4* / - / - DATES - 15 OKT 2008 / - / - WFOAM - 'SOMETHINGELSE' 0.02 / - / - )"; - testSamples.push_back(testSample); - - // Invalid well name in WELOPEN - testSample = R"( - COMPDAT - 'INJ' 10 10 3 3 'OPEN' 1* 1* 0.5 / - / - WCONINJE - 'INJ' 'WATER' 'OPEN' 'RATE' 20000 4* / - / - DATES - 15 OKT 2008 / - / - WELOPEN - 'SOMETHINGELSE' / - / - )"; - testSamples.push_back(testSample); - - // Invalid well name in WELTARG - testSample = R"( - COMPDAT - 'PROD' 10 10 3 3 'OPEN' 1* 1* 0.5 / - / - WCONHIST - 'PROD' 'OPEN' 'ORAT' 20000 4* 1000 / - / - WELTARG - 'SOMETHINGELSE' 'ORAT' 15000 / - / - )"; - testSamples.push_back(testSample); - - // Invalid well name in WECON - testSample = R"( - COMPDAT - 'PROD' 10 10 3 3 'OPEN' 1* 1* 0.5 / - / - WCONPROD - 'PROD' 'OPEN' 'ORAT' 20000 4* 1000 / - / - WECON - 'SOMETHINGELSE' 15000 / - / - )"; - testSamples.push_back(testSample); - - // Invalid well name in WEFAC - testSample = R"( - COMPDAT - 'PROD' 10 10 3 3 'OPEN' 1* 1* 0.5 / - / - WCONPROD - 'PROD' 'OPEN' 'ORAT' 20000 4* 1000 / - / - WEFAC - 'SOMETHINGELSE' 0.5 / - / - )"; - - testSamples.push_back(testSample); - // Invalid group name in GCONPROD - testSample = R"( - GCONPROD - 'SOMETHINGELSE' 'ORAT' 20000 / - / - )"; - testSamples.push_back(testSample); - - // Invalid group name in GEFAC - testSample = R"( - GEFAC - 'SOMETHINGELSE' 0.5 / - / - )"; - testSamples.push_back(testSample); - - // Invalid group name in GCONINJE - testSample = R"( - GCONINJE - 'SOMETHINGELSE' 'WAT' 'RATE' 20000 / - / - )"; - testSamples.push_back(testSample); - - std::string deckinput; - for (std::string sample : testSamples) { - - deckinput = defDeckString + sample; - auto deckUnSupported = parser.parseString( deckinput , parseContext, errors ); - - auto python = std::make_shared(); - EclipseGrid grid( deckUnSupported ); - TableManager table ( deckUnSupported ); - FieldPropsManager fp( deckUnSupported, Phases{true, true, true}, grid, table); - Runspec runspec( deckUnSupported); - - BOOST_CHECK_THROW( Schedule( deckUnSupported , grid , fp, runspec , parseContext, errors, python), std::invalid_argument ); - } -} - - -/* - If there are errors the ErrorGuard destructor will print error messages and - call std::terminate(); if you do not accept the std::terminate in the - destructor you should call the clear() method first. -*/ - - -BOOST_AUTO_TEST_CASE(Test_ERRORGUARD) { - ErrorGuard eg; - - BOOST_CHECK(!eg); - - eg.addWarning(ParseContext::SUMMARY_UNKNOWN_WELL, "Unknown well"); - BOOST_CHECK(!eg); - - eg.addError(ParseContext::SUMMARY_UNKNOWN_GROUP, "Unknwon Group"); - BOOST_CHECK(eg); - eg.clear(); - BOOST_CHECK(!eg); -} - - - - - -BOOST_AUTO_TEST_CASE(LONG_KEYWORDS) { - const std::string deck_string = R"( -RPTRUNSPEC -)"; - Parser parser; - ParseContext context; - ErrorGuard error; - - context.update(ParseContext::PARSE_LONG_KEYWORD, InputError::IGNORE); - auto deck = parser.parseString(deck_string, context, error); - BOOST_CHECK( deck.hasKeyword("RPTRUNSP") ); - - context.update(ParseContext::PARSE_LONG_KEYWORD, InputError::THROW_EXCEPTION); - BOOST_CHECK_THROW( parser.parseString(deck_string, context, error), std::invalid_argument); -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/ParseContext_EXIT1.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/ParseContext_EXIT1.cpp deleted file mode 100644 index bea952b948..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/ParseContext_EXIT1.cpp +++ /dev/null @@ -1,58 +0,0 @@ -#include -#include -#include -#include -#include - -#include -#include -#include - - -void exit1(Opm::InputError::Action action) { - const char * deckString = - "RUNSPEC\n" - "DIMENS\n" - " 10 10 10 10 /n" - "\n"; - - Opm::ParseContext parseContext; - Opm::Parser parser; - Opm::ErrorGuard errors; - - parseContext.update(Opm::ParseContext::PARSE_EXTRA_DATA , action); - parser.parseString( deckString , parseContext, errors ); -} - - - -/* - This test checks that the application will exit with status 1 - if that is - requested; since the boost test framework has registered atexit() handlers - which will unconditionally fail the complete test in the face of an exit(1) - - this test is implemented without the BOOST testing framework. -*/ - -void test_exit(Opm::InputError::Action action) { - pid_t pid = fork(); - if (pid == 0) - exit1(action); - - int wait_status; - waitpid(pid, &wait_status, 0); - - if (WIFEXITED(wait_status)) { - /* - We *want* the child process to terminate with status exit(1), i.e. if - the exit status is 0 we fail the complete test with exit(1). - */ - if (WEXITSTATUS(wait_status) == 0) - std::exit(EXIT_FAILURE); - } else - std::exit(EXIT_FAILURE); -} - -int main() { - test_exit(Opm::InputError::Action::EXIT1); - test_exit(Opm::InputError::Action::DELAYED_EXIT1); -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/ParseDATAWithDefault.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/ParseDATAWithDefault.cpp deleted file mode 100644 index b226819b8d..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/ParseDATAWithDefault.cpp +++ /dev/null @@ -1,106 +0,0 @@ -/* - Copyright (C) 2014 Statoil ASE - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#define BOOST_TEST_MODULE ParserIntegrationTests -#include - -#include -#include - -#include -#include -#include -#include - -#include -#include -#include -#include - -using namespace Opm; - - - -const char *dataMissingRecord = "\n\ -ENDSCALE\n\ - 1* 1* 2 /\n\ -\n\ -ENKRVD\n\ -100 1 2 3 4 5 6 7 200 11 22 33 44 55 66 77 /\n\ -"; - - - -BOOST_AUTO_TEST_CASE( ParseMissingRECORD_THrows) { - Parser parser; - BOOST_CHECK_THROW( parser.parseString( dataMissingRecord ), std::invalid_argument ); -} - - - - -const char *data = "\n\ -ENDSCALE\n\ - 1* 1* 3 /\n\ -\n\ -ENKRVD\n\ -100 * 2 * 2* 6 7 200 11 22 33 3*55 10 /\n\ -100 * 2 3 4 5 6 7 200 11 22 33 44 55 66 77 /\n\ -100 * 2 3 4 5 6 7 200 11 22 33 44 55 66 * /\n\ -"; - - - -BOOST_AUTO_TEST_CASE( parse_DATAWithDefult_OK ) { - Parser parser; - auto deck = parser.parseString( data ); - const auto& keyword = deck.getKeyword( "ENKRVD" ); - const auto& rec0 = keyword.getRecord(0); - const auto& rec1 = keyword.getRecord(1); - const auto& rec2 = keyword.getRecord(2); - - const auto& item0 = rec0.getItem(0); - const auto& item1 = rec1.getItem(0); - const auto& item2 = rec2.getItem(0); - - BOOST_CHECK_EQUAL( 3U , keyword.size()); - BOOST_CHECK( !item0.defaultApplied(0) ); - BOOST_CHECK( item0.defaultApplied(1) ); - - BOOST_CHECK_EQUAL( 100 , item0.get< double >(0)); - BOOST_CHECK_EQUAL( -1 , item0.get< double >(1)); - BOOST_CHECK_EQUAL( 2 , item0.get< double >(2)); - BOOST_CHECK_EQUAL( -1 , item0.get< double >(3)); - BOOST_CHECK_EQUAL( -1 , item0.get< double >(4)); - BOOST_CHECK_EQUAL( -1 , item0.get< double >(5)); - BOOST_CHECK_EQUAL( 6 , item0.get< double >(6)); - BOOST_CHECK_EQUAL( 55 , item0.get< double >(12)); - BOOST_CHECK_EQUAL( 55 , item0.get< double >(13)); - BOOST_CHECK_EQUAL( 55 , item0.get< double >(14)); - BOOST_CHECK_EQUAL( 10 , item0.get< double >(15)); - - BOOST_CHECK_EQUAL( 100 , item1.get< double >(0)); - BOOST_CHECK_EQUAL( -1 , item1.get< double >(1)); - - BOOST_CHECK( !item2.defaultApplied(0) ); - BOOST_CHECK( item2.defaultApplied(1) ); -} - - - diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/ParserIncludeTests.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/ParserIncludeTests.cpp deleted file mode 100644 index df1ecf6344..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/ParserIncludeTests.cpp +++ /dev/null @@ -1,141 +0,0 @@ -/* - Copyright 2014 by Andreas Lauser - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - - -#define BOOST_TEST_MODULE ParserTests -#include - -#include -#include -#include -#include -#include -#include -#include - -#include - -inline std::string prefix() { - return boost::unit_test::framework::master_test_suite().argv[1]; -} - - -BOOST_AUTO_TEST_CASE(ParserKeyword_includeInvalid) { - Opm::filesystem::path inputFilePath(prefix() + "includeInvalid.data"); - - Opm::Parser parser; - Opm::ParseContext parseContext; - Opm::ErrorGuard errors; - - parseContext.update(Opm::ParseContext::PARSE_MISSING_INCLUDE , Opm::InputError::THROW_EXCEPTION ); - BOOST_CHECK_THROW(parser.parseFile(inputFilePath.string() , parseContext, errors) , std::invalid_argument); - - parseContext.update(Opm::ParseContext::PARSE_MISSING_INCLUDE , Opm::InputError::IGNORE ); - BOOST_CHECK_NO_THROW(parser.parseFile(inputFilePath.string() , parseContext, errors)); -} - - -BOOST_AUTO_TEST_CASE(DATA_FILE_IS_SYMLINK) { - Opm::filesystem::path inputFilePath(prefix() + "includeSymlinkTestdata/symlink4/path/case.data"); - Opm::Parser parser; - std::cout << "Input file: " << inputFilePath.string() << std::endl; - auto deck = parser.parseFile(inputFilePath.string()); - - BOOST_CHECK_EQUAL(true , deck.hasKeyword("OIL")); - BOOST_CHECK_EQUAL(false , deck.hasKeyword("WATER")); -} - - -BOOST_AUTO_TEST_CASE(Verify_find_includes_Data_file_is_a_symlink) { - Opm::filesystem::path inputFilePath(prefix() + "includeSymlinkTestdata/symlink1/case_symlink.data"); - Opm::Parser parser; - auto deck = parser.parseFile(inputFilePath.string()); - - BOOST_CHECK_EQUAL(true , deck.hasKeyword("OIL")); - BOOST_CHECK_EQUAL(false , deck.hasKeyword("WATER")); -} - - -BOOST_AUTO_TEST_CASE(Verify_find_includes_Data_file_has_include_that_is_a_symlink) { - Opm::filesystem::path inputFilePath(prefix() + "includeSymlinkTestdata/symlink2/caseWithIncludedSymlink.data"); - Opm::Parser parser; - auto deck = parser.parseFile(inputFilePath.string()); - - BOOST_CHECK_EQUAL(true , deck.hasKeyword("OIL")); - BOOST_CHECK_EQUAL(false , deck.hasKeyword("WATER")); -} - - -BOOST_AUTO_TEST_CASE(Verify_find_includes_Data_file_has_include_file_that_again_includes_a_symlink) { - Opm::filesystem::path inputFilePath(prefix() + "includeSymlinkTestdata/symlink3/case.data"); - Opm::Parser parser; - auto deck = parser.parseFile(inputFilePath.string()); - - BOOST_CHECK_EQUAL(true , deck.hasKeyword("OIL")); - BOOST_CHECK_EQUAL(false , deck.hasKeyword("WATER")); -} - - -BOOST_AUTO_TEST_CASE(ParserKeyword_includeValid) { - Opm::filesystem::path inputFilePath(prefix() + "includeValid.data"); - - Opm::Parser parser; - auto deck = parser.parseFile(inputFilePath.string()); - - BOOST_CHECK_EQUAL(true , deck.hasKeyword("OIL")); - BOOST_CHECK_EQUAL(false , deck.hasKeyword("WATER")); -} - - - - - - -BOOST_AUTO_TEST_CASE(ParserKeyword_includeWrongCase) { - Opm::filesystem::path inputFile1Path(prefix() + "includeWrongCase1.data"); - Opm::filesystem::path inputFile2Path(prefix() + "includeWrongCase2.data"); - Opm::filesystem::path inputFile3Path(prefix() + "includeWrongCase3.data"); - - Opm::Parser parser; - -#if HAVE_CASE_SENSITIVE_FILESYSTEM - // so far, we expect the files which are included to exhibit - // exactly the same spelling as their names on disk. Eclipse seems - // to be a bit more relaxed when it comes to this, so we might - // have to change the current behavior one not-so-fine day... - Opm::ParseContext parseContext; - Opm::ErrorGuard errors; - parseContext.update(Opm::ParseContext::PARSE_MISSING_INCLUDE , Opm::InputError::THROW_EXCEPTION ); - - BOOST_CHECK_THROW(parser.parseFile(inputFile1Path.string(), parseContext, errors), std::invalid_argument); - BOOST_CHECK_THROW(parser.parseFile(inputFile2Path.string(), parseContext, errors), std::invalid_argument); - BOOST_CHECK_THROW(parser.parseFile(inputFile3Path.string(), parseContext, errors), std::invalid_argument); -#else - // for case-insensitive filesystems, the include statement will - // always work regardless of how the capitalization of the - // included files is wrong... - BOOST_CHECK_EQUAL(true, parser.parseFile(inputFile1Path.string() ).hasKeyword("OIL")); - BOOST_CHECK_EQUAL(false, parser.parseFile(inputFile1Path.string()).hasKeyword("WATER")); - BOOST_CHECK_EQUAL(true, parser.parseFile(inputFile2Path.string() ).hasKeyword("OIL")); - BOOST_CHECK_EQUAL(false, parser.parseFile(inputFile2Path.string()).hasKeyword("WATER")); - BOOST_CHECK_EQUAL(true, parser.parseFile(inputFile3Path.string() ).hasKeyword("OIL")); - BOOST_CHECK_EQUAL(false, parser.parseFile(inputFile3Path.string()).hasKeyword("WATER")); -#endif -} - diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/ParserTests.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/ParserTests.cpp deleted file mode 100644 index 81e27fce0d..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/ParserTests.cpp +++ /dev/null @@ -1,2320 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#define BOOST_TEST_MODULE ParserTests -#include - -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "src/opm/parser/eclipse/Parser/raw/RawKeyword.hpp" -#include "src/opm/parser/eclipse/Parser/raw/RawRecord.hpp" - -#include - -using namespace Opm; - -namespace { - -constexpr ParserItem::itype INT = ParserItem::itype::INT; -constexpr ParserItem::itype STRING= ParserItem::itype::STRING; -constexpr ParserItem::itype DOUBLE = ParserItem::itype::DOUBLE; - - -std::string prefix() { - return boost::unit_test::framework::master_test_suite().argv[1]; -} - -ParserKeyword createDynamicSized(const std::string& kw) { - ParserKeyword pkw(kw); - pkw.setSizeType(SLASH_TERMINATED); - return pkw; -} - -ParserKeyword createFixedSized(const std::string& kw , size_t size) { - ParserKeyword pkw(kw); - pkw.setFixedSize( size ); - return pkw; -} - -ParserKeyword createTable(const std::string& name, - const std::string& sizeKeyword, - const std::string& sizeItem, - bool isTableCollection) { - ParserKeyword pkw(name); - pkw.initSizeKeyword(sizeKeyword , sizeItem, 0); - pkw.setTableCollection(isTableCollection); - return pkw; -} - -} - -/************************Basic structural tests**********************'*/ - -BOOST_AUTO_TEST_CASE(Initializing) { - BOOST_CHECK_NO_THROW(Parser parser); -} - -BOOST_AUTO_TEST_CASE(addKeyword_keyword_doesntfail) { - Parser parser; - parser.addParserKeyword( createDynamicSized( "EQUIL" ) ); -} - - -BOOST_AUTO_TEST_CASE(canParseDeckKeyword_returnstrue) { - Parser parser; - parser.addParserKeyword(createDynamicSized("FJAS")); - BOOST_CHECK(parser.isRecognizedKeyword("FJAS")); -} - - -BOOST_AUTO_TEST_CASE(getKeyword_haskeyword_returnskeyword) { - Parser parser; - parser.addParserKeyword( createDynamicSized( "FJAS" ) ); - BOOST_CHECK_EQUAL("FJAS", parser.getParserKeywordFromDeckName("FJAS").getName()); -} - -BOOST_AUTO_TEST_CASE(getKeyword_hasnotkeyword_getKeywordThrowsException) { - Parser parser; - parser.addParserKeyword( createDynamicSized( "FJAS" ) ); - BOOST_CHECK_THROW(parser.getParserKeywordFromDeckName("FJASS"), std::invalid_argument); -} - -BOOST_AUTO_TEST_CASE(getAllDeckNames_hasTwoKeywords_returnsCompleteList) { - Parser parser( false ); - std::cout << parser.getAllDeckNames().size() << std::endl; - parser.addParserKeyword( createDynamicSized( "FJAS" ) ); - parser.addParserKeyword( createDynamicSized( "SAJF" ) ); - BOOST_CHECK_EQUAL(2U, parser.getAllDeckNames().size()); -} - -BOOST_AUTO_TEST_CASE(getAllDeckNames_hasNoKeywords_returnsEmptyList) { - Parser parser( false ); - BOOST_CHECK_EQUAL(0U, parser.getAllDeckNames().size()); -} - - - -/************************ JSON config related tests **********************'*/ - - -BOOST_AUTO_TEST_CASE(addParserKeywordJSON_isRecognizedKeyword_returnstrue) { - Parser parser; - Json::JsonObject jsonConfig("{\"name\": \"BPR\", \"sections\":[\"SUMMARY\"], \"size\" : 100 , \"items\" :[{\"name\":\"ItemX\" , \"size_type\":\"SINGLE\" , \"value_type\" : \"DOUBLE\"}]}"); - parser.addParserKeyword( jsonConfig ); - BOOST_CHECK(parser.isRecognizedKeyword("BPR")); -} - - -BOOST_AUTO_TEST_CASE(addParserKeywordJSON_size_isObject_allGood) { - Parser parser; - Json::JsonObject jsonConfig("{\"name\": \"EQUIXL\", \"sections\":[], \"size\" : {\"keyword\":\"EQLDIMS\" , \"item\" : \"NTEQUL\"}, \"items\" :[{\"name\":\"ItemX\" , \"size_type\":\"SINGLE\" , \"value_type\" : \"DOUBLE\"}]}"); - parser.addParserKeyword( jsonConfig ); - BOOST_CHECK(parser.isRecognizedKeyword("EQUIXL")); -} - - - -BOOST_AUTO_TEST_CASE(loadKeywordsJSON_notArray_throw) { - Parser parser; - Json::JsonObject jsonConfig( "{\"name\" : \"BPR\" , \"size\" : 100, \"sections\":[\"SUMMARY\"]}"); - - BOOST_CHECK_THROW(parser.loadKeywords( jsonConfig ) , std::invalid_argument); -} - -BOOST_AUTO_TEST_CASE(loadKeywordsJSON_noSectionsItem_throw) { - Parser parser; - Json::JsonObject jsonConfig( "[{\"name\" : \"BPR\" , \"size\" : 100, \"items\" :[{\"name\":\"ItemX\" , \"size_type\":\"SINGLE\" , \"value_type\" : \"DOUBLE\"}]}]"); - - BOOST_CHECK_THROW(parser.loadKeywords( jsonConfig ) , std::invalid_argument); -} - - -BOOST_AUTO_TEST_CASE(loadKeywordsJSON_isRecognizedKeyword_returnstrue) { - Parser parser; - Json::JsonObject jsonConfig( "[{\"name\" : \"BPR\" , \"size\" : 100, \"sections\":[\"SUMMARY\"], \"items\" :[{\"name\":\"ItemX\" , \"size_type\":\"SINGLE\" , \"value_type\" : \"DOUBLE\"}]}]"); - - parser.loadKeywords( jsonConfig ); - BOOST_CHECK(parser.isRecognizedKeyword("BPR")); -} - - -BOOST_AUTO_TEST_CASE(empty_sizeReturns0) { - Parser parser( false ); - BOOST_CHECK_EQUAL( 0U , parser.size()); -} - - - -BOOST_AUTO_TEST_CASE(loadKeywordsJSON_manyKeywords_returnstrue) { - Parser parser( false ); - Json::JsonObject jsonConfig( "[{\"name\" : \"BPR\" , \"size\" : 100, \"sections\":[\"SUMMARY\"] , \"items\" :[{\"name\":\"ItemX\" , \"size_type\":\"SINGLE\" , \"value_type\" : \"DOUBLE\"}]}, {\"name\" : \"WWCT\", \"sections\":[\"SUMMARY\"], \"size\" : 0} , {\"name\" : \"EQUIL\", \"sections\":[\"PROPS\"], \"size\" : 0}]"); - - parser.loadKeywords( jsonConfig ); - BOOST_CHECK(parser.isRecognizedKeyword("BPR")); - BOOST_CHECK(parser.isRecognizedKeyword("WWCT")); - BOOST_CHECK(parser.isRecognizedKeyword("EQUIL")); - BOOST_CHECK_EQUAL( 3U , parser.size() ); -} - - - - -/*****************************************************************/ - - -BOOST_AUTO_TEST_CASE(loadKeywordFromFile_fileDoesNotExist_returnsFalse) { - Parser parser; - Opm::filesystem::path configFile("File/does/not/exist"); - BOOST_CHECK_EQUAL( false , parser.loadKeywordFromFile( configFile )); -} - - -BOOST_AUTO_TEST_CASE(loadKeywordFromFile_invalidJson_returnsFalse) { - Parser parser; - Opm::filesystem::path configFile(prefix() + "json/example_invalid_json"); - BOOST_CHECK_EQUAL( false , parser.loadKeywordFromFile( configFile )); -} - - -BOOST_AUTO_TEST_CASE(loadKeywordFromFile_invalidConfig_returnsFalse) { - Parser parser; - Opm::filesystem::path configFile(prefix() + "json/example_missing_name.json"); - BOOST_CHECK_EQUAL( false , parser.loadKeywordFromFile( configFile )); -} - - -BOOST_AUTO_TEST_CASE(loadKeywordFromFile_validKeyword_returnsTrueHasKeyword) { - Parser parser( false ); - Opm::filesystem::path configFile(prefix() + "json/BPR"); - BOOST_CHECK_EQUAL( true , parser.loadKeywordFromFile( configFile )); - BOOST_CHECK_EQUAL( 1U , parser.size() ); - BOOST_CHECK_EQUAL( true , parser.isRecognizedKeyword("BPR") ); -} - - - -BOOST_AUTO_TEST_CASE(loadConfigFromDirectory_directoryDoesNotexist_throws) { - Parser parser; - Opm::filesystem::path configPath("path/does/not/exist"); - BOOST_CHECK_THROW(parser.loadKeywordsFromDirectory( configPath), std::invalid_argument); -} - -BOOST_AUTO_TEST_CASE(loadConfigFromDirectory_notRecursive_allNames) { - Parser parser( false ); - BOOST_CHECK_EQUAL(false , parser.isRecognizedKeyword("BPR")); - Opm::filesystem::path configPath(prefix() + "config/directory1"); - BOOST_CHECK_NO_THROW(parser.loadKeywordsFromDirectory( configPath, false)); - BOOST_CHECK(parser.isRecognizedKeyword("WWCT")); - BOOST_CHECK_EQUAL(true , parser.isRecognizedKeyword("BPR")); - BOOST_CHECK_EQUAL(false , parser.isRecognizedKeyword("DIMENS")); -} - - -BOOST_AUTO_TEST_CASE(loadConfigFromDirectory_notRecursive_strictNames) { - Parser parser( false ); - Opm::filesystem::path configPath(prefix() + "config/directory1"); - BOOST_CHECK_NO_THROW(parser.loadKeywordsFromDirectory( configPath, false)); - BOOST_CHECK(parser.isRecognizedKeyword("WWCT")); - // the file name for the following keyword is "Bpr", but that - // does not matter - BOOST_CHECK_EQUAL(true , parser.isRecognizedKeyword("BPR")); - BOOST_CHECK_EQUAL(false , parser.isRecognizedKeyword("DIMENS")); -} - - -BOOST_AUTO_TEST_CASE(loadConfigFromDirectory_Recursive_allNames) { - Parser parser( false ); - BOOST_CHECK_EQUAL(false , parser.isRecognizedKeyword("BPR")); - Opm::filesystem::path configPath(prefix() + "config/directory1"); - BOOST_CHECK_NO_THROW(parser.loadKeywordsFromDirectory( configPath, true)); - BOOST_CHECK(parser.isRecognizedKeyword("WWCT")); - BOOST_CHECK_EQUAL(true , parser.isRecognizedKeyword("BPR")); - BOOST_CHECK_EQUAL(true , parser.isRecognizedKeyword("DIMENS")); -} - - -BOOST_AUTO_TEST_CASE(loadConfigFromDirectory_default) { - Parser parser( false ); - BOOST_CHECK_EQUAL(false , parser.isRecognizedKeyword("BPR")); - Opm::filesystem::path configPath(prefix() + "config/directory1"); - BOOST_CHECK_NO_THROW(parser.loadKeywordsFromDirectory( configPath )); - BOOST_CHECK(parser.isRecognizedKeyword("WWCT")); - // the file name for the following keyword is "Bpr", but that - // does not matter - BOOST_CHECK_EQUAL(true , parser.isRecognizedKeyword("BPR")); - BOOST_CHECK_EQUAL(true , parser.isRecognizedKeyword("DIMENS")); -} - -BOOST_AUTO_TEST_CASE(ReplaceKeyword) { - Parser parser; - BOOST_CHECK( parser.loadKeywordFromFile( prefix() + "parser/EQLDIMS2" ) ); - - const auto& eqldims = parser.getParserKeywordFromDeckName("EQLDIMS"); - const auto& record = eqldims.getRecord(0); - BOOST_CHECK(record.hasItem("NEW")); -} - - -BOOST_AUTO_TEST_CASE(WildCardTest) { - Parser parser; - BOOST_CHECK(!parser.isRecognizedKeyword("TVDP*")); - BOOST_CHECK(!parser.isRecognizedKeyword("TVDP")); - BOOST_CHECK(parser.isRecognizedKeyword("TVDPXXX")); - BOOST_CHECK(!parser.isRecognizedKeyword("TVD")); - - BOOST_CHECK(!parser.isRecognizedKeyword("TVDP")); - - const auto& keyword1 = parser.getParserKeywordFromDeckName("TVDPA"); - const auto& keyword2 = parser.getParserKeywordFromDeckName("TVDPBC"); - const auto& keyword3 = parser.getParserKeywordFromDeckName("TVDPXXX"); - - BOOST_CHECK_EQUAL( keyword1 , keyword2 ); - BOOST_CHECK_EQUAL( keyword1 , keyword3 ); -} - - -BOOST_AUTO_TEST_CASE( quoted_comments ) { - BOOST_CHECK_EQUAL( Parser::stripComments( "ABC" ) , "ABC"); - BOOST_CHECK_EQUAL( Parser::stripComments( "--ABC") , ""); - BOOST_CHECK_EQUAL( Parser::stripComments( "ABC--DEF") , "ABC"); - BOOST_CHECK_EQUAL( Parser::stripComments( "'ABC'--DEF") , "'ABC'"); - BOOST_CHECK_EQUAL( Parser::stripComments( "\"ABC\"--DEF") , "\"ABC\""); - BOOST_CHECK_EQUAL( Parser::stripComments( "ABC--'DEF'") , "ABC"); - BOOST_CHECK_EQUAL( Parser::stripComments("ABC'--'DEF") , "ABC'--'DEF"); - BOOST_CHECK_EQUAL( Parser::stripComments("ABC'--'DEF\"--\"GHI") , "ABC'--'DEF\"--\"GHI"); - BOOST_CHECK_EQUAL( Parser::stripComments("ABC'--'DEF'GHI") , "ABC'--'DEF'GHI"); - BOOST_CHECK_EQUAL( Parser::stripComments("ABC'--'DEF'--GHI") , "ABC'--'DEF'--GHI"); -} - -BOOST_AUTO_TEST_CASE( PATHS_has_global_scope ) { - Parser parser; - ParseContext parseContext; - ErrorGuard errors; - - parseContext.update( ParseContext::PARSE_MISSING_INCLUDE , Opm::InputError::THROW_EXCEPTION); - const auto deck = parser.parseFile( prefix() + "parser/PATHSInInclude.data", parseContext, errors ); - BOOST_CHECK(deck.hasKeyword("OIL")); - BOOST_CHECK_THROW( parser.parseFile( prefix() + "parser/PATHSInIncludeInvalid.data", parseContext, errors ), std::invalid_argument ); -} - -BOOST_AUTO_TEST_CASE( PATHS_with_backslashes ) { - Parser parser; - ParseContext parseContext; - ErrorGuard errors; - - parseContext.update( ParseContext::PARSE_MISSING_INCLUDE , Opm::InputError::THROW_EXCEPTION); - const auto deck = parser.parseFile( prefix() + "parser/PATHSWithBackslashes.data", parseContext, errors ); - BOOST_CHECK(deck.hasKeyword("OIL")); -} - -BOOST_AUTO_TEST_CASE( handle_empty_title ) { - const auto* input_deck = "RUNSPEC\n\n" - "TITLE\n\n" - "DIMENS\n10 10 10/\n" - "EQLDIMS\n/\n"; - - Parser parser; - const auto deck = parser.parseString( input_deck); - BOOST_CHECK_EQUAL( "opm/flow", deck.getKeyword( "TITLE" ).getStringData().front() ); - BOOST_CHECK_EQUAL( "simulation", deck.getKeyword( "TITLE" ).getStringData().back() ); - } - -BOOST_AUTO_TEST_CASE( deck_comma_separated_fields ) { - const char* deck = R"( -TABDIMS - 2* 24 2* 20 20 1* 1 7* / - -SWOF - 0.1000, 0.0000e+00, 8.0000e-01 0 - 0.2000, 0, 8.0000e-01 0 - 0.2500, 2.7310e-04, 5.8082e-01 0 - 0.3000, 2.1848e-03, 4.1010e-01 0 - 0.3500, 7.3737e-03, 2.8010e-01 0 - 0.4000, 1.7478e-02, 1.8378e-01 0 - 0.4500, 3.4138e-02, 1.1473e-01 0 - 0.5000, 5.8990e-02, 6.7253e-02 0 - 0.5500, 9.3673e-02, 3.6301e-02 0 - 0.6000, 1.3983e-01, 1.7506e-02 0 - 0.6500, 1.9909e-01, 7.1706e-03 0 - 0.7000, 2.7310e-01, 2.2688e-03 0 - 0.7500, 3.6350e-01, 4.4820e-04 0 - 0.8000, 4.7192e-01, 2.8000e-05 0 - 0.8500, 6.0000e-01, 0.0000e+00 0 - 0.9000, 7.4939e-01, 0.0000e+00 0 -/ -)"; - - BOOST_CHECK_NO_THROW( Parser().parseString( deck ) ); - } - - -BOOST_AUTO_TEST_CASE(ParseTNUM) { - const char * deck1 = - "REGIONS\n" - "TNUMFSGS\n" - " 100*1/\n" - "\n" - "TNUMFXXX\n" - " 100*1/\n" - "\n"; - - Opm::Parser parser; - auto deck = parser.parseString( deck1 ); - BOOST_CHECK( deck.hasKeyword("TNUMFSGS")); - BOOST_CHECK( deck.hasKeyword("TNUMFXXX")); -} - - -BOOST_AUTO_TEST_CASE(ScalarCheck) { - ParserItem item1("ITEM1", INT); - ParserItem item2("ITEM1", INT); item2.setSizeType( ParserItem::item_size::ALL ); - - - BOOST_CHECK( item1.scalar()); - BOOST_CHECK( !item2.scalar()); -} - -BOOST_AUTO_TEST_CASE(Initialize_DefaultSizeType) { - ParserItem item1(std::string("ITEM1"), INT); - BOOST_CHECK_EQUAL( ParserItem::item_size::SINGLE, item1.sizeType()); -} - - - -BOOST_AUTO_TEST_CASE(Initialize_Default) { - ParserItem item1(std::string("ITEM1"), INT); - ParserItem item2(std::string("ITEM1"), INT); item2.setDefault(88); - - BOOST_CHECK(!item1.hasDefault()); - BOOST_CHECK_THROW(item1.getDefault< int >(), std::invalid_argument); - BOOST_CHECK(item2.hasDefault()); - BOOST_CHECK_EQUAL(item2.getDefault< int >(), 88); -} - - -BOOST_AUTO_TEST_CASE(Initialize_Default_Double) { - ParserItem item1(std::string("ITEM1"), DOUBLE); - ParserItem item2("ITEM1", DOUBLE); item2.setDefault(88.91); - - BOOST_CHECK(!item1.hasDefault()); - BOOST_CHECK_THROW( item1.getDefault< double >(), std::invalid_argument ); - BOOST_CHECK_EQUAL( 88.91 , item2.getDefault< double >()); -} - -BOOST_AUTO_TEST_CASE(Initialize_Default_String) { - ParserItem item1(std::string("ITEM1"), STRING); - BOOST_CHECK(!item1.hasDefault()); - BOOST_CHECK_THROW(item1.getDefault< std::string >(), std::invalid_argument); -} - -BOOST_AUTO_TEST_CASE(scan_PreMatureTerminator_defaultUsed) { - ParserItem itemInt("ITEM2", INT); - itemInt.setDefault(123); - - RawRecord rawRecord1( "" ); - UnitSystem unit_system; - const auto defaulted = itemInt.scan(rawRecord1, unit_system, unit_system); - - BOOST_CHECK(defaulted.defaultApplied(0)); - BOOST_CHECK_EQUAL(defaulted.get< int >(0), 123); -} - -BOOST_AUTO_TEST_CASE(InitializeIntItem_setDescription_canReadBack) { - ParserItem itemInt("ITEM1", INT); - std::string description("This is the description"); - itemInt.setDescription(description); - - BOOST_CHECK_EQUAL( description, itemInt.getDescription() ); -} - - -/******************************************************************/ -/* */ -BOOST_AUTO_TEST_CASE(InitializeIntItem_FromJsonObject_missingName_throws) { - Json::JsonObject jsonConfig("{\"nameX\": \"ITEM1\" , \"size_type\" : \"ALL\"}"); - BOOST_CHECK_THROW( ParserItem item1( jsonConfig ) , std::invalid_argument ); -} - - -BOOST_AUTO_TEST_CASE(InitializeIntItem_FromJsonObject_defaultSizeType) { - Json::JsonObject jsonConfig("{\"name\": \"ITEM1\", \"value_type\": \"INT\" }"); - ParserItem item1( jsonConfig ); - BOOST_CHECK_EQUAL( ParserItem::item_size::SINGLE , item1.sizeType()); -} - - - -BOOST_AUTO_TEST_CASE(InitializeIntItem_FromJsonObject) { - Json::JsonObject jsonConfig("{\"name\": \"ITEM1\" , \"size_type\" : \"ALL\", \"value_type\": \"INT\" }"); - ParserItem item1( jsonConfig ); - BOOST_CHECK_EQUAL( "ITEM1" , item1.name() ); - BOOST_CHECK_EQUAL( ParserItem::item_size::ALL, item1.sizeType() ); - BOOST_CHECK_THROW(item1.getDefault< int >(), std::invalid_argument); -} - - -BOOST_AUTO_TEST_CASE(InitializeIntItem_FromJsonObject_withDefault) { - Json::JsonObject jsonConfig("{\"name\": \"ITEM1\" , \"size_type\" : \"SINGLE\", \"default\" : 100, \"value_type\": \"INT\" }"); - ParserItem item1( jsonConfig ); - BOOST_CHECK_EQUAL( 100 , item1.getDefault< int >() ); -} - - -BOOST_AUTO_TEST_CASE(InitializeIntItem_FromJsonObject_withDefaultInvalid_throws) { - Json::JsonObject jsonConfig("{\"name\": \"ITEM1\" , \"size_type\" : \"SINGLE\", \"default\" : \"100X\"}"); - BOOST_CHECK_THROW( ParserItem item1( jsonConfig ) , std::invalid_argument ); -} - - -BOOST_AUTO_TEST_CASE(InitializeIntItem_FromJsonObject_withSizeTypeALL_throws) { - Json::JsonObject jsonConfig("{\"name\": \"ITEM1\" , \"value_type\": \"INT\", \"size_type\" : \"ALL\", \"default\" : 100}"); - BOOST_CHECK_THROW( ParserItem item1( jsonConfig ) , std::invalid_argument ); -} - - - -BOOST_AUTO_TEST_CASE(InitializeIntItem_WithDescription_DescriptionPropertyShouldBePopulated) { - std::string description("Description goes here"); - Json::JsonObject jsonConfig("{\"name\": \"ITEM1\" , \"value_type\": \"INT\", \"description\" : \"Description goes here\"}"); - ParserItem item(jsonConfig); - - BOOST_CHECK_EQUAL( "Description goes here", item.getDescription() ); -} - - -BOOST_AUTO_TEST_CASE(InitializeIntItem_WithoutDescription_DescriptionPropertyShouldBeEmpty) { - Json::JsonObject jsonConfig("{\"name\": \"ITEM1\", \"value_type\": \"INT\" }"); - ParserItem item(jsonConfig); - - BOOST_CHECK_EQUAL( "", item.getDescription() ); -} - - - -/* */ -/******************************************************************/ - -/* EQUAL */ - - -BOOST_AUTO_TEST_CASE(IntItem_Equal_ReturnsTrue) { - auto sizeType = ParserItem::item_size::ALL; - ParserItem item1("ITEM1", INT); item1.setSizeType(sizeType); - ParserItem item2("ITEM1", INT); item2.setSizeType(sizeType); - ParserItem item3 = item1; - - BOOST_CHECK_EQUAL( item1, item2 ); - BOOST_CHECK_EQUAL( item1, item3 ); -} - - -BOOST_AUTO_TEST_CASE(IntItem_Different_ReturnsFalse) { - ParserItem item1("ITEM1", INT); item1.setSizeType(ParserItem::item_size::ALL); - ParserItem item2("ITEM2", INT); item2.setSizeType(ParserItem::item_size::ALL); - ParserItem item3("ITEM1", INT); - ParserItem item4("ITEM1", INT); item4.setDefault(52); - - BOOST_CHECK_NE( item1, item2 ); - BOOST_CHECK_NE( item1, item3 ); - BOOST_CHECK_NE( item2, item3 ); - BOOST_CHECK_NE( item4, item3 ); -} - -BOOST_AUTO_TEST_CASE(DoubleItem_DimEqual_ReturnsTrue) { - auto sizeType = ParserItem::item_size::ALL; - ParserItem item1("ITEM1", DOUBLE); item1.setSizeType(sizeType); - ParserItem item2("ITEM1", DOUBLE); item2.setSizeType(sizeType); - - item1.push_backDimension("Length*Length"); - item2.push_backDimension("Length*Length"); - - BOOST_CHECK_EQUAL( item1, item2 ); -} - - -BOOST_AUTO_TEST_CASE(DoubleItem_DimDifferent_ReturnsFalse) { - auto sizeType = ParserItem::item_size::ALL; - ParserItem item1("ITEM1", DOUBLE); item1.setSizeType(sizeType); // Dim: [] - ParserItem item2("ITEM1", DOUBLE); item2.setSizeType(sizeType); // Dim: [Length] - ParserItem item3("ITEM1", DOUBLE); item3.setSizeType(sizeType); // Dim: [Length ,Length] - ParserItem item4("ITEM1", DOUBLE); item4.setSizeType(sizeType); // Dim: [t] - - item2.push_backDimension("Length"); - item3.push_backDimension("Length"); - item3.push_backDimension("Length"); - item4.push_backDimension("Time"); - - BOOST_CHECK_NE(item1, item2 ); - BOOST_CHECK_NE(item2, item3 ); - BOOST_CHECK_NE(item2, item1 ); - BOOST_CHECK_NE(item2, item4 ); - BOOST_CHECK_NE(item1, item3 ); - BOOST_CHECK_NE(item3, item1 ); - BOOST_CHECK_NE(item4, item2 ); -} - - -BOOST_AUTO_TEST_CASE(DoubleItem_Different_ReturnsFalse) { - ParserItem item1("ITEM1", DOUBLE); item1.setDefault(0.0); item1.setSizeType(ParserItem::item_size::ALL); - ParserItem item2("ITEM2", DOUBLE); item2.setDefault(0.0); item2.setSizeType(ParserItem::item_size::ALL); - ParserItem item3("ITEM1", DOUBLE); item3.setDefault(0.0); - ParserItem item4("ITEM1", DOUBLE); item4.setDefault(42.89); - - BOOST_CHECK_NE( item1, item2 ); - BOOST_CHECK_NE( item1, item3 ); - BOOST_CHECK_NE( item2, item3 ); - BOOST_CHECK_NE( item4, item3 ); -} - - -BOOST_AUTO_TEST_CASE(StringItem_Equal_ReturnsTrue) { - auto sizeType = ParserItem::item_size::ALL; - ParserItem item1("ITEM1", STRING); item1.setSizeType(sizeType); - ParserItem item2("ITEM1", STRING); item2.setSizeType(sizeType); - ParserItem item3 = item1; - - BOOST_CHECK_EQUAL( item1, item2 ); - BOOST_CHECK_EQUAL( item1, item3 ); -} - - -BOOST_AUTO_TEST_CASE(StringItem_Different_ReturnsFalse) { - auto sizeType = ParserItem::item_size::ALL; - ParserItem item1("ITEM1", STRING); item1.setDefault( std::string("")); item1.setSizeType(sizeType); - ParserItem item2("ITEM2", STRING); item2.setDefault( std::string("")); item2.setSizeType(sizeType); - ParserItem item3("ITEM1", STRING); item3.setDefault( std::string("")); - ParserItem item4("ITEM1", STRING); item4.setDefault( std::string("42.89")); - - BOOST_CHECK_NE( item1, item2 ); - BOOST_CHECK_NE( item1, item3 ); - BOOST_CHECK_NE( item2, item3 ); - BOOST_CHECK_NE( item4, item3 ); -} - - - - -/******************************************************************/ - -BOOST_AUTO_TEST_CASE(Name_ReturnsCorrectName) { - auto sizeType = ParserItem::item_size::ALL; - - ParserItem item1("ITEM1", INT); item1.setSizeType(sizeType); - BOOST_CHECK_EQUAL("ITEM1", item1.name()); - - ParserItem item2("", INT); item2.setSizeType(sizeType); - BOOST_CHECK_EQUAL("", item2.name()); -} - -BOOST_AUTO_TEST_CASE(Size_ReturnsCorrectSizeTypeSingle) { - auto sizeType = ParserItem::item_size::SINGLE; - ParserItem item1("ITEM1", INT); - BOOST_CHECK_EQUAL(sizeType, item1.sizeType()); -} - -BOOST_AUTO_TEST_CASE(Size_ReturnsCorrectSizeTypeAll) { - auto sizeType = ParserItem::item_size::ALL; - ParserItem item1("ITEM1", INT); item1.setSizeType(sizeType); - BOOST_CHECK_EQUAL(sizeType, item1.sizeType()); -} - -BOOST_AUTO_TEST_CASE(Scan_All_CorrectIntSetInDeckItem) { - auto sizeType = ParserItem::item_size::ALL; - ParserItem itemInt("ITEM", INT); itemInt.setSizeType(sizeType); - - RawRecord rawRecord( "100 443 10*77 10*1 25" ); - UnitSystem unit_system; - const auto deckIntItem = itemInt.scan(rawRecord, unit_system, unit_system); - BOOST_CHECK_EQUAL(23U, deckIntItem.data_size()); - BOOST_CHECK_EQUAL(77, deckIntItem.get< int >(3)); - BOOST_CHECK_EQUAL(1, deckIntItem.get< int >(21)); - BOOST_CHECK_EQUAL(25, deckIntItem.get< int >(22)); -} - -BOOST_AUTO_TEST_CASE(Scan_All_WithDefaults) { - auto sizeType = ParserItem::item_size::ALL; - ParserItem itemInt("ITEM", INT); itemInt.setSizeType(sizeType); - itemInt.setInputType( ParserItem::itype::INT ); - - RawRecord rawRecord( "100 10* 10*1 25" ); - UnitSystem unit_system; - const auto deckIntItem = itemInt.scan(rawRecord, unit_system, unit_system); - BOOST_CHECK_EQUAL(22U, deckIntItem.data_size()); - BOOST_CHECK(!deckIntItem.defaultApplied(0)); - BOOST_CHECK( deckIntItem.defaultApplied(1)); - BOOST_CHECK(!deckIntItem.defaultApplied(11)); - BOOST_CHECK(!deckIntItem.defaultApplied(21)); - BOOST_CHECK_EQUAL(1, deckIntItem.get< int >(20)); - BOOST_CHECK_EQUAL(25, deckIntItem.get< int >(21)); -} - -BOOST_AUTO_TEST_CASE(Scan_SINGLE_CorrectIntSetInDeckItem) { - ParserItem itemInt(std::string("ITEM2"), INT); - - RawRecord rawRecord("100 44.3 'Heisann'" ); - UnitSystem unit_system; - const auto deckIntItem = itemInt.scan(rawRecord, unit_system, unit_system); - BOOST_CHECK_EQUAL(100, deckIntItem.get< int >(0)); -} - -BOOST_AUTO_TEST_CASE(Scan_SeveralInts_CorrectIntsSetInDeckItem) { - ParserItem itemInt1(std::string("ITEM1"), INT); - ParserItem itemInt2(std::string("ITEM2"), INT); - ParserItem itemInt3(std::string("ITEM3"), INT); - - RawRecord rawRecord( "100 443 338932 222.33 'Heisann' " ); - UnitSystem unit_system; - const auto deckIntItem1 = itemInt1.scan(rawRecord, unit_system, unit_system); - BOOST_CHECK_EQUAL(100, deckIntItem1.get< int >(0)); - - const auto deckIntItem2 = itemInt2.scan(rawRecord, unit_system, unit_system); - BOOST_CHECK_EQUAL(443, deckIntItem2.get< int >(0)); - - const auto deckIntItem3 = itemInt3.scan(rawRecord, unit_system, unit_system); - BOOST_CHECK_EQUAL(338932, deckIntItem3.get< int >(0)); -} - - - - - -BOOST_AUTO_TEST_CASE(Scan_Multiplier_CorrectIntsSetInDeckItem) { - ParserItem itemInt("ITEM2", INT); - - RawRecord rawRecord( "3*4 " ); - UnitSystem unit_system; - itemInt.setSizeType(ParserItem::item_size::ALL); - const auto deckIntItem = itemInt.scan(rawRecord, unit_system, unit_system); - BOOST_CHECK_EQUAL(4, deckIntItem.get< int >(0)); - BOOST_CHECK_EQUAL(4, deckIntItem.get< int >(1)); - BOOST_CHECK_EQUAL(4, deckIntItem.get< int >(2)); -} - -BOOST_AUTO_TEST_CASE(Scan_StarNoMultiplier_ExceptionThrown) { - ParserItem itemInt("ITEM2", INT); - - UnitSystem unit_system; - RawRecord rawRecord( "*45 " ); - BOOST_CHECK_THROW(itemInt.scan(rawRecord, unit_system, unit_system), std::invalid_argument); -} - -BOOST_AUTO_TEST_CASE(Scan_MultipleItems_CorrectIntsSetInDeckItem) { - ParserItem itemInt1(std::string("ITEM1"), INT); - ParserItem itemInt2(std::string("ITEM2"), INT); - - RawRecord rawRecord( "10 20" ); - UnitSystem unit_system; - const auto deckIntItem1 = itemInt1.scan(rawRecord, unit_system, unit_system); - const auto deckIntItem2 = itemInt2.scan(rawRecord, unit_system, unit_system); - - BOOST_CHECK_EQUAL(10, deckIntItem1.get< int >(0)); - BOOST_CHECK_EQUAL(20, deckIntItem2.get< int >(0)); -} - -BOOST_AUTO_TEST_CASE(Scan_MultipleDefault_CorrectIntsSetInDeckItem) { - ParserItem itemInt1("ITEM1", INT); itemInt1.setDefault(10); - ParserItem itemInt2("ITEM2", INT); itemInt2.setDefault(20); - - RawRecord rawRecord( "* * " ); - UnitSystem unit_system; - const auto deckIntItem1 = itemInt1.scan(rawRecord, unit_system, unit_system); - const auto deckIntItem2 = itemInt2.scan(rawRecord, unit_system, unit_system); - - BOOST_CHECK_EQUAL(10, deckIntItem1.get< int >(0)); - BOOST_CHECK_EQUAL(20, deckIntItem2.get< int >(0)); -} - -BOOST_AUTO_TEST_CASE(Scan_MultipleWithMultiplier_CorrectIntsSetInDeckItem) { - ParserItem itemInt1("ITEM1", INT); - ParserItem itemInt2("ITEM2", INT); - - RawRecord rawRecord( "2*30" ); - UnitSystem unit_system; - const auto deckIntItem1 = itemInt1.scan(rawRecord, unit_system, unit_system); - const auto deckIntItem2 = itemInt2.scan(rawRecord, unit_system, unit_system); - - BOOST_CHECK_EQUAL(30, deckIntItem1.get< int >(0)); - BOOST_CHECK_EQUAL(30, deckIntItem2.get< int >(0)); -} - -BOOST_AUTO_TEST_CASE(Scan_MalformedMultiplier_Throw) { - ParserItem itemInt1("ITEM1", INT); - - UnitSystem unit_system; - RawRecord rawRecord( "2.10*30" ); - BOOST_CHECK_THROW(itemInt1.scan(rawRecord, unit_system, unit_system), std::invalid_argument); -} - -BOOST_AUTO_TEST_CASE(Scan_MalformedMultiplierChar_Throw) { - ParserItem itemInt1("ITEM1", INT); - - RawRecord rawRecord( "210X30" ); - UnitSystem unit_system; - BOOST_CHECK_THROW(itemInt1.scan(rawRecord, unit_system, unit_system), std::invalid_argument); -} - -BOOST_AUTO_TEST_CASE(Scan_MultipleWithMultiplierDefault_CorrectIntsSetInDeckItem) { - ParserItem itemInt1("ITEM1", INT); itemInt1.setDefault(10); - ParserItem itemInt2("ITEM2", INT); itemInt2.setDefault(20); - - RawRecord rawRecord( "2*" ); - UnitSystem unit_system; - const auto deckIntItem1 = itemInt1.scan(rawRecord, unit_system, unit_system); - const auto deckIntItem2 = itemInt2.scan(rawRecord, unit_system, unit_system); - - BOOST_CHECK_EQUAL(10, deckIntItem1.get< int >(0)); - BOOST_CHECK_EQUAL(20, deckIntItem2.get< int >(0)); -} - -BOOST_AUTO_TEST_CASE(Scan_RawRecordErrorInRawData_ExceptionThrown) { - ParserItem itemInt(std::string("ITEM2"), INT); - - // Wrong type - RawRecord rawRecord2( "333.2 /" ); - UnitSystem unit_system; - BOOST_CHECK_THROW(itemInt.scan(rawRecord2, unit_system, unit_system), std::invalid_argument); - - // Wrong type - RawRecord rawRecord3( "100X /" ); - BOOST_CHECK_THROW(itemInt.scan(rawRecord3, unit_system, unit_system), std::invalid_argument); - - // Wrong type - RawRecord rawRecord5( "astring /" ); - BOOST_CHECK_THROW(itemInt.scan(rawRecord5, unit_system, unit_system), std::invalid_argument); -} - -/*********************String************************'*/ -/*****************************************************************/ -/**/ - -BOOST_AUTO_TEST_CASE(InitializeStringItem_FromJsonObject_missingName_throws) { - Json::JsonObject jsonConfig("{\"nameX\": \"ITEM1\" , \"size_type\" : \"ALL\"}"); - BOOST_CHECK_THROW( ParserItem item1( jsonConfig ) , std::invalid_argument ); -} - -BOOST_AUTO_TEST_CASE(InitializeStringItem_FromJsonObject_withDefault) { - Json::JsonObject jsonConfig("{\"name\": \"ITEM1\" , \"value_type\": \"STRING\", \"size_type\" : \"SINGLE\", \"default\" : \"100\"}"); - ParserItem item1( jsonConfig ); - BOOST_CHECK_EQUAL( "100" , item1.getDefault< std::string >() ); -} - -BOOST_AUTO_TEST_CASE(InitializeStringItem_FromJsonObject_withDefaultInvalid_throws) { - Json::JsonObject jsonConfig("{\"name\": \"ITEM1\" , \"size_type\" : \"ALL\", \"default\" : [1,2,3]}"); - BOOST_CHECK_THROW( ParserItem item1( jsonConfig ) , std::invalid_argument ); -} -/**/ -/*****************************************************************/ - -BOOST_AUTO_TEST_CASE(init_defaultvalue_defaultset) { - ParserItem itemString(std::string("ITEM1"), STRING); - RawRecord rawRecord0( "'1*'" ); - UnitSystem unit_system; - itemString.setDefault(std::string("DEFAULT")); - BOOST_CHECK_EQUAL("1*", itemString.scan( rawRecord0, unit_system, unit_system ).get< std::string >(0) ); - - RawRecord rawRecord1( "13*" ); - BOOST_CHECK_EQUAL("DEFAULT" , itemString.scan( rawRecord1, unit_system, unit_system ).get< std::string >(0) ); - - RawRecord rawRecord2( "*" ); - BOOST_CHECK_EQUAL("DEFAULT", itemString.scan( rawRecord2, unit_system, unit_system ).get< std::string >(0) ); -} - -BOOST_AUTO_TEST_CASE(scan_all_valuesCorrect) { - ParserItem itemString("ITEMWITHMANY", STRING); - RawRecord rawRecord( "'WELL1' FISK BANAN 3*X OPPLEGG_FOR_DATAANALYSE 'Foo$*!% BAR' " ); - UnitSystem unit_system; - itemString.setSizeType( ParserItem::item_size::ALL ); - const auto deckItem = itemString.scan(rawRecord, unit_system, unit_system); - BOOST_CHECK_EQUAL(8U, deckItem.data_size()); - - BOOST_CHECK_EQUAL("WELL1", deckItem.get< std::string >(0)); - BOOST_CHECK_EQUAL("FISK", deckItem.get< std::string >(1)); - BOOST_CHECK_EQUAL("BANAN", deckItem.get< std::string >(2)); - BOOST_CHECK_EQUAL("X", deckItem.get< std::string >(3)); - BOOST_CHECK_EQUAL("X", deckItem.get< std::string >(4)); - BOOST_CHECK_EQUAL("X", deckItem.get< std::string >(5)); - BOOST_CHECK_EQUAL("OPPLEGG_FOR_DATAANALYSE", deckItem.get< std::string >(6)); - BOOST_CHECK_EQUAL("Foo$*!% BAR", deckItem.get< std::string >(7)); -} - -BOOST_AUTO_TEST_CASE(scan_all_withdefaults) { - ParserItem itemString("ITEMWITHMANY", INT); - RawRecord rawRecord( "10*1 10* 10*2 " ); - UnitSystem unit_system; - itemString.setDefault(0); - itemString.setSizeType( ParserItem::item_size::ALL ); - const auto deckItem = itemString.scan(rawRecord, unit_system, unit_system); - - BOOST_CHECK_EQUAL(30U, deckItem.data_size()); - - BOOST_CHECK( !deckItem.defaultApplied(0) ); - BOOST_CHECK( !deckItem.defaultApplied(9) ); - BOOST_CHECK( deckItem.defaultApplied(10) ); - BOOST_CHECK( deckItem.defaultApplied(19) ); - BOOST_CHECK( !deckItem.defaultApplied(20) ); - BOOST_CHECK( !deckItem.defaultApplied(29) ); - - BOOST_CHECK_THROW(deckItem.get< int >(30), std::out_of_range); - BOOST_CHECK_THROW(deckItem.defaultApplied(30), std::out_of_range); - - BOOST_CHECK_EQUAL(1, deckItem.get< int >(0)); - BOOST_CHECK_EQUAL(1, deckItem.get< int >(9)); - BOOST_CHECK_EQUAL(2, deckItem.get< int >(20)); - BOOST_CHECK_EQUAL(2, deckItem.get< int >(29)); -} - -BOOST_AUTO_TEST_CASE(scan_single_dataCorrect) { - ParserItem itemString( "ITEM1", STRING); - RawRecord rawRecord( "'WELL1' 'WELL2'" ); - UnitSystem unit_system; - const auto deckItem = itemString.scan(rawRecord, unit_system, unit_system); - BOOST_CHECK_EQUAL("WELL1", deckItem.get< std::string >(0)); -} - -BOOST_AUTO_TEST_CASE(scan_singleWithMixedRecord_dataCorrect) { - ParserItem itemString("ITEM1", STRING); - ParserItem itemInt("ITEM1", INT); - UnitSystem unit_system; - RawRecord rawRecord( "2 'WELL1' /" ); - itemInt.scan(rawRecord, unit_system, unit_system); - const auto deckItem = itemString.scan(rawRecord, unit_system, unit_system); - BOOST_CHECK_EQUAL("WELL1", deckItem.get< std::string >(0)); -} - -/******************String and int**********************/ -BOOST_AUTO_TEST_CASE(scan_intsAndStrings_dataCorrect) { - RawRecord rawRecord( "'WELL1' 2 2 2*3" ); - UnitSystem unit_system; - ParserItem itemSingleString(std::string("ITEM1"), STRING); - const auto deckItemWell1 = itemSingleString.scan(rawRecord, unit_system, unit_system); - BOOST_CHECK_EQUAL("WELL1", deckItemWell1.get< std::string >(0)); - - ParserItem itemSomeInts("SOMEINTS", INT); - itemSomeInts.setSizeType( ParserItem::item_size::ALL ); - const auto deckItemInts = itemSomeInts.scan(rawRecord, unit_system, unit_system); - BOOST_CHECK_EQUAL(2, deckItemInts.get< int >(0)); - BOOST_CHECK_EQUAL(2, deckItemInts.get< int >(1)); - BOOST_CHECK_EQUAL(3, deckItemInts.get< int >(2)); - BOOST_CHECK_EQUAL(3, deckItemInts.get< int >(3)); -} - -/*****************************************************************/ - - -BOOST_AUTO_TEST_CASE(ParserDefaultHasDimensionReturnsFalse) { - ParserItem intItem(std::string("SOMEINTS"), INT); - ParserItem stringItem(std::string("SOMESTRING"), STRING); - ParserItem doubleItem(std::string("SOMEDOUBLE"), DOUBLE); - - BOOST_CHECK( intItem.dimensions().empty() ); - BOOST_CHECK( stringItem.dimensions().empty() ); - BOOST_CHECK( doubleItem.dimensions().empty() ); -} - -BOOST_AUTO_TEST_CASE(ParserIntItemGetDimensionThrows) { - ParserItem intItem(std::string("SOMEINT"), INT); - - BOOST_CHECK_THROW( intItem.push_backDimension("Length") , std::invalid_argument ); -} - - - -BOOST_AUTO_TEST_CASE(ParserDoubleItemAddMultipleDimensionToSIngleSizeThrows) { - ParserItem doubleItem(std::string("SOMEDOUBLE"), DOUBLE); - - doubleItem.push_backDimension("Length*Length"); - BOOST_CHECK_THROW( doubleItem.push_backDimension("Length*Length"), std::invalid_argument); -} - - -BOOST_AUTO_TEST_CASE(ParserDoubleItemWithDimensionHasReturnsCorrect) { - ParserItem doubleItem("SOMEDOUBLE", DOUBLE); - - BOOST_CHECK( doubleItem.dimensions().empty() ); - doubleItem.push_backDimension("Length*Length"); - BOOST_CHECK( !doubleItem.dimensions().empty() ); -} - -BOOST_AUTO_TEST_CASE(ParserDoubleItemGetDimension) { - ParserItem doubleItem( "SOMEDOUBLE", DOUBLE); - doubleItem.setSizeType( ParserItem::item_size::ALL ); - doubleItem.setDefault(0.0); - - doubleItem.push_backDimension("Length"); - doubleItem.push_backDimension("Length*Length"); - doubleItem.push_backDimension("Length*Length*Length"); - - const auto& dimensions = doubleItem.dimensions(); - BOOST_CHECK_EQUAL( "Length" , dimensions[0]); - BOOST_CHECK_EQUAL( "Length*Length" ,dimensions[1]); - BOOST_CHECK_EQUAL( "Length*Length*Length" , dimensions[2]); - BOOST_CHECK_EQUAL(3, dimensions.size()); -} - - -BOOST_AUTO_TEST_CASE(DefaultConstructor_NoParams_NoThrow) { - BOOST_CHECK_NO_THROW(ParserRecord record); -} - -BOOST_AUTO_TEST_CASE(Size_NoElements_ReturnsZero) { - ParserRecord record; - BOOST_CHECK_EQUAL(0U, record.size()); -} - -BOOST_AUTO_TEST_CASE(Size_OneItem_Return1) { - ParserItem itemInt("ITEM1", INT); - ParserRecord record; - record.addItem(itemInt); - BOOST_CHECK_EQUAL(1U, record.size()); -} - -BOOST_AUTO_TEST_CASE(Get_OneItem_Return1) { - ParserItem itemInt("ITEM1", INT); - ParserRecord record; - record.addItem(itemInt); - - BOOST_CHECK_EQUAL(record.get(0), itemInt); -} - -BOOST_AUTO_TEST_CASE(Get_outOfRange_Throw) { - BOOST_CHECK_THROW(ParserRecord{}.get(0), std::out_of_range); -} - -BOOST_AUTO_TEST_CASE(Get_KeyNotFound_Throw) { - ParserRecord record; - BOOST_CHECK_THROW(record.get("Hei"), std::out_of_range ); -} - -BOOST_AUTO_TEST_CASE(Get_KeyFound_OK) { - ParserItem itemInt("ITEM1", INT); - ParserRecord record; - record.addItem(itemInt); - BOOST_CHECK_EQUAL(record.get("ITEM1"), itemInt); -} - -BOOST_AUTO_TEST_CASE(Get_GetByNameAndIndex_OK) { - ParserItem itemInt("ITEM1", INT); - ParserRecord record; - record.addItem(itemInt); - - const auto& itemByName = record.get("ITEM1"); - const auto& itemByIndex = record.get(0); - BOOST_CHECK_EQUAL(itemInt, itemByName); - BOOST_CHECK_EQUAL(itemInt, itemByIndex); -} - -BOOST_AUTO_TEST_CASE(addItem_SameName_Throw) { - ParserItem itemInt1("ITEM1", INT); - ParserItem itemInt2("ITEM1", INT); - ParserRecord record; - record.addItem(itemInt1); - BOOST_CHECK_THROW(record.addItem(itemInt2), std::invalid_argument); -} - -static ParserRecord createSimpleParserRecord() { - ParserItem itemInt1("ITEM1", INT); - ParserItem itemInt2("ITEM2", INT); - ParserRecord record; - - record.addItem(itemInt1); - record.addItem(itemInt2); - return record; -} - -BOOST_AUTO_TEST_CASE(parse_validRecord_noThrow) { - auto record = createSimpleParserRecord(); - ParseContext parseContext; - ErrorGuard errors; - RawRecord raw( string_view( "100 443" ) ); - UnitSystem unit_system; - BOOST_CHECK_NO_THROW(record.parse(parseContext, errors, raw , unit_system, unit_system, "KEYWORD", "filename") ); -} - -BOOST_AUTO_TEST_CASE(parse_validRecord_deckRecordCreated) { - auto record = createSimpleParserRecord(); - RawRecord rawRecord( string_view( "100 443" ) ); - ParseContext parseContext; - ErrorGuard errors; - UnitSystem unit_system; - const auto deckRecord = record.parse(parseContext , errors, rawRecord, unit_system, unit_system, "KEYWORD", "filename"); - BOOST_CHECK_EQUAL(2U, deckRecord.size()); -} - - -// INT INT DOUBLE DOUBLE INT DOUBLE - -static ParserRecord createMixedParserRecord() { - ParserItem itemInt1( "INTITEM1", INT); - ParserItem itemInt2( "INTITEM2", INT); - ParserItem itemInt3( "INTITEM3", INT); - ParserItem itemDouble1( "DOUBLEITEM1", DOUBLE); - ParserItem itemDouble2( "DOUBLEITEM2", DOUBLE); - ParserItem itemDouble3( "DOUBLEITEM3", DOUBLE); - - ParserRecord record; - record.addItem(itemInt1); - record.addItem(itemInt2); - record.addItem(itemDouble1); - record.addItem(itemDouble2); - record.addItem(itemInt3); - record.addItem(itemDouble3); - - return record; -} - -BOOST_AUTO_TEST_CASE(parse_validMixedRecord_noThrow) { - auto record = createMixedParserRecord(); - RawRecord rawRecord( string_view( "1 2 10.0 20.0 4 90.0") ); - ParseContext parseContext; - ErrorGuard errors; - UnitSystem unit_system; - BOOST_CHECK_NO_THROW(record.parse(parseContext, errors, rawRecord, unit_system, unit_system, "KEYWORD", "filename")); -} - -BOOST_AUTO_TEST_CASE(Equal_Equal_ReturnsTrue) { - auto record1 = createMixedParserRecord(); - auto record2 = createMixedParserRecord(); - - BOOST_CHECK(record1.equal(record1)); - BOOST_CHECK(record1.equal(record2)); -} - -BOOST_AUTO_TEST_CASE(Equal_Different_ReturnsFalse) { - ParserItem itemInt( "INTITEM1", INT); - ParserItem itemDouble( "DOUBLEITEM1", DOUBLE); - ParserItem itemString( "STRINGITEM1", STRING); - ParserRecord record1; - ParserRecord record2; - ParserRecord record3; - - record1.addItem(itemInt); - record1.addItem(itemDouble); - - record2.addItem(itemInt); - record2.addItem(itemDouble); - record2.addItem(itemString); - - record3.addItem(itemDouble); - record3.addItem(itemInt); - BOOST_CHECK(!record1.equal(record2)); - BOOST_CHECK(!record1.equal(record3)); - -} - -BOOST_AUTO_TEST_CASE(ParseWithDefault_defaultAppliedCorrectInDeck) { - ParserRecord parserRecord; - ParserItem itemInt("ITEM1", INT); itemInt.setDefault(100); - ParserItem itemString("ITEM2", STRING); itemString.setDefault(std::string("DEFAULT")); - ParserItem itemDouble("ITEM3", DOUBLE); itemDouble.setDefault(3.14); - - parserRecord.addItem(itemInt); - parserRecord.addItem(itemString); - parserRecord.addItem(itemDouble); - - // according to the RM, this is invalid ("an asterisk by itself is not sufficient"), - // but it seems to appear in the wild. Thus, we interpret this as "1*"... - { - RawRecord rawRecord( "* " ); - UnitSystem unit_system; - const auto& deckStringItem = itemString.scan(rawRecord, unit_system, unit_system); - const auto& deckIntItem = itemInt.scan(rawRecord, unit_system, unit_system); - const auto& deckDoubleItem = itemDouble.scan(rawRecord, unit_system, unit_system); - - BOOST_CHECK(deckStringItem.defaultApplied(0)); - BOOST_CHECK(deckIntItem.defaultApplied(0)); - BOOST_CHECK(deckDoubleItem.defaultApplied(0)); - } - - { - RawRecord rawRecord( "" ); - UnitSystem unit_system; - const auto deckStringItem = itemString.scan(rawRecord, unit_system, unit_system); - const auto deckIntItem = itemInt.scan(rawRecord, unit_system, unit_system); - const auto deckDoubleItem = itemDouble.scan(rawRecord, unit_system, unit_system); - - BOOST_CHECK(deckStringItem.defaultApplied(0)); - BOOST_CHECK(deckIntItem.defaultApplied(0)); - BOOST_CHECK(deckDoubleItem.defaultApplied(0)); - } - - - { - RawRecord rawRecord( "TRYGVE 10 2.9 " ); - - // let the raw record be "consumed" by the items. Note that the scan() method - // modifies the rawRecord object! - UnitSystem unit_system; - const auto& deckStringItem = itemString.scan(rawRecord, unit_system, unit_system); - const auto& deckIntItem = itemInt.scan(rawRecord, unit_system, unit_system); - const auto& deckDoubleItem = itemDouble.scan(rawRecord, unit_system, unit_system); - - BOOST_CHECK(!deckStringItem.defaultApplied(0)); - BOOST_CHECK(!deckIntItem.defaultApplied(0)); - BOOST_CHECK(!deckDoubleItem.defaultApplied(0)); - } - - // again this is invalid according to the RM, but it is used anyway in the wild... - { - RawRecord rawRecord( "* * *" ); - UnitSystem unit_system; - const auto deckStringItem = itemString.scan(rawRecord, unit_system, unit_system); - const auto deckIntItem = itemInt.scan(rawRecord, unit_system, unit_system); - const auto deckDoubleItem = itemDouble.scan(rawRecord, unit_system, unit_system); - - BOOST_CHECK(deckStringItem.defaultApplied(0)); - BOOST_CHECK(deckIntItem.defaultApplied(0)); - BOOST_CHECK(deckDoubleItem.defaultApplied(0)); - } - - { - RawRecord rawRecord( "3*" ); - UnitSystem unit_system; - const auto deckStringItem = itemString.scan(rawRecord, unit_system, unit_system); - const auto deckIntItem = itemInt.scan(rawRecord, unit_system, unit_system); - const auto deckDoubleItem = itemDouble.scan(rawRecord, unit_system, unit_system); - - BOOST_CHECK(deckStringItem.defaultApplied(0)); - BOOST_CHECK(deckIntItem.defaultApplied(0)); - BOOST_CHECK(deckDoubleItem.defaultApplied(0)); - } -} - -BOOST_AUTO_TEST_CASE(Parse_RawRecordTooManyItems_Throws) { - ParserRecord parserRecord; - ParserItem itemI( "I", INT); - ParserItem itemJ( "J", INT); - ParserItem itemK( "K", INT); - ParseContext parseContext; - ErrorGuard errors; - - parserRecord.addItem(itemI); - parserRecord.addItem(itemJ); - parserRecord.addItem(itemK); - - - RawRecord rawRecord( "3 3 3 " ); - UnitSystem unit_system; - BOOST_CHECK_NO_THROW(parserRecord.parse(parseContext, errors, rawRecord, unit_system, unit_system, "KEYWORD", "filename")); - - RawRecord rawRecordOneExtra( "3 3 3 4 " ); - BOOST_CHECK_THROW(parserRecord.parse(parseContext, errors, rawRecordOneExtra, unit_system, unit_system, "KEYWORD", "filename"), std::invalid_argument); - - RawRecord rawRecordForgotRecordTerminator( "3 3 3 \n 4 4 4 " ); - BOOST_CHECK_THROW(parserRecord.parse(parseContext, errors, rawRecordForgotRecordTerminator, unit_system, unit_system, "KEYWORD", "filename"), std::invalid_argument); - -} - - -BOOST_AUTO_TEST_CASE(Parse_RawRecordTooFewItems) { - ParserRecord parserRecord; - ParserItem itemI( "I" , INT); - ParserItem itemJ( "J" , INT); - ParserItem itemK( "K" , INT); - - parserRecord.addItem(itemI); - parserRecord.addItem(itemJ); - parserRecord.addItem(itemK); - - ParseContext parseContext; - ErrorGuard errors; - RawRecord rawRecord( "3 3 " ); - UnitSystem unit_system; - // no default specified for the third item, record can be parsed just fine but trying - // to access the data will raise an exception...; - BOOST_CHECK_NO_THROW(parserRecord.parse(parseContext, errors, rawRecord, unit_system, unit_system, "KEWYORD", "filename")); - auto record = parserRecord.parse(parseContext, errors , rawRecord, unit_system, unit_system, "KEYWORD", "filename"); - BOOST_CHECK_NO_THROW(record.getItem(2)); - BOOST_CHECK_THROW(record.getItem(2).get< int >(0), std::invalid_argument); -} - - - -BOOST_AUTO_TEST_CASE(ParseRecordHasDimensionCorrect) { - ParserRecord parserRecord; - ParserItem itemI( "I", INT); - - BOOST_CHECK( !parserRecord.hasDimension() ); - - parserRecord.addItem( itemI ); - BOOST_CHECK( !parserRecord.hasDimension() ); - - ParserItem item2( "ID", DOUBLE); - item2.push_backDimension("Length*Length/Time"); - parserRecord.addItem( item2 ); - BOOST_CHECK( parserRecord.hasDimension() ); -} - - -BOOST_AUTO_TEST_CASE(DefaultNotDataRecord) { - ParserRecord record; - BOOST_CHECK_EQUAL( false , record.isDataRecord() ); -} - -BOOST_AUTO_TEST_CASE(MixingDataAndItems_throws1) { - ParserRecord record; - ParserItem dataItem( "ACTNUM", INT); - ParserItem item ( "XXX", INT); - record.addDataItem( dataItem ); - BOOST_CHECK_THROW( record.addItem( item ) , std::invalid_argument); - BOOST_CHECK_THROW( record.addItem( dataItem ) , std::invalid_argument); -} - -BOOST_AUTO_TEST_CASE(MixingDataAndItems_throws2) { - ParserRecord record; - ParserItem dataItem( "ACTNUM", INT); - ParserItem item ( "XXX", INT); - - record.addItem( item ); - BOOST_CHECK_THROW( record.addDataItem( dataItem ) , std::invalid_argument); -} - -BOOST_AUTO_TEST_CASE(construct_withname_nameSet) { - const auto& parserKeyword = createDynamicSized("BPR"); - BOOST_CHECK_EQUAL(parserKeyword.getName(), "BPR"); -} - -BOOST_AUTO_TEST_CASE(NamedInit) { - std::string keyword("KEYWORD"); - const auto& parserKeyword = createFixedSized(keyword, (size_t) 100); - BOOST_CHECK_EQUAL(parserKeyword.getName(), keyword); -} - -BOOST_AUTO_TEST_CASE(ParserKeyword_default_SizeTypedefault) { - std::string keyword("KEYWORD"); - const auto& parserKeyword = createDynamicSized(keyword); - BOOST_CHECK_EQUAL(parserKeyword.getSizeType() , SLASH_TERMINATED); -} - - -BOOST_AUTO_TEST_CASE(ParserKeyword_withSize_SizeTypeFIXED) { - std::string keyword("KEYWORD"); - const auto& parserKeyword = createFixedSized(keyword, (size_t) 100); - BOOST_CHECK_EQUAL(parserKeyword.getSizeType() , FIXED); -} - -BOOST_AUTO_TEST_CASE(ParserKeyword_withOtherSize_SizeTypeOTHER) { - std::string keyword("KEYWORD"); - const auto& parserKeyword = createTable(keyword, "EQUILDIMS" , "NTEQUIL" , false); - const auto& keyword_size = parserKeyword.getKeywordSize(); - BOOST_CHECK_EQUAL(OTHER_KEYWORD_IN_DECK , parserKeyword.getSizeType() ); - BOOST_CHECK_EQUAL("EQUILDIMS", keyword_size.keyword ); - BOOST_CHECK_EQUAL("NTEQUIL" , keyword_size.item ); -} - -BOOST_AUTO_TEST_CASE(ParserKeyword_validDeckName) { - BOOST_CHECK_EQUAL( true , ParserKeyword::validDeckName("SUMMARY")); - BOOST_CHECK_EQUAL( true , ParserKeyword::validDeckName("MixeCase")); - BOOST_CHECK_EQUAL( true , ParserKeyword::validDeckName("STRING88")); - BOOST_CHECK_EQUAL( false , ParserKeyword::validDeckName("88STRING")); - BOOST_CHECK_EQUAL( false , ParserKeyword::validDeckName("KEY.EXT")); - BOOST_CHECK_EQUAL( false , ParserKeyword::validDeckName("STRING~")); - BOOST_CHECK_EQUAL( true , ParserKeyword::validDeckName("MINUS-")); - BOOST_CHECK_EQUAL( true , ParserKeyword::validDeckName("PLUS+")); - BOOST_CHECK_EQUAL( false , ParserKeyword::validDeckName("SHARP#")); - BOOST_CHECK_EQUAL( false , ParserKeyword::validDeckName("-MINUS")); - BOOST_CHECK_EQUAL( false , ParserKeyword::validDeckName("+PLUS")); - BOOST_CHECK_EQUAL( false , ParserKeyword::validDeckName("#SHARP")); - - BOOST_CHECK_EQUAL( false , ParserKeyword::validDeckName("TVDP*")); - BOOST_CHECK_EQUAL( false , ParserKeyword::validDeckName("*")); -} - -BOOST_AUTO_TEST_CASE(ParserKeyword_validInternalName) { - BOOST_CHECK_EQUAL( true , ParserKeyword::validInternalName("SUMMARY")); - BOOST_CHECK_EQUAL( true , ParserKeyword::validInternalName("MixeCase")); - BOOST_CHECK_EQUAL( true , ParserKeyword::validInternalName("NAMEISQUITELONG")); - BOOST_CHECK_EQUAL( true , ParserKeyword::validInternalName("I_have_underscores")); - BOOST_CHECK_EQUAL( false , ParserKeyword::validInternalName("WHATABOUT+")); - BOOST_CHECK_EQUAL( false , ParserKeyword::validInternalName("ORMINUS-")); - BOOST_CHECK_EQUAL( false , ParserKeyword::validInternalName("NOSHARP#")); - BOOST_CHECK_EQUAL( true , ParserKeyword::validInternalName("STRING88")); - BOOST_CHECK_EQUAL( false , ParserKeyword::validInternalName("88STRING")); - BOOST_CHECK_EQUAL( false , ParserKeyword::validInternalName("KEY.EXT")); - BOOST_CHECK_EQUAL( false , ParserKeyword::validInternalName("STRING~")); - - BOOST_CHECK_EQUAL( false , ParserKeyword::validInternalName("TVDP*")); - BOOST_CHECK_EQUAL( false , ParserKeyword::validInternalName("*")); -} - -BOOST_AUTO_TEST_CASE(ParserKeywordMatches) { - auto parserKeyword = createFixedSized("HELLO", (size_t) 1); - parserKeyword.clearDeckNames(); - parserKeyword.setMatchRegex("WORLD.+"); - BOOST_CHECK_EQUAL( false , parserKeyword.matches("HELLO")); - BOOST_CHECK_EQUAL( false , parserKeyword.matches("WORLD")); - BOOST_CHECK_EQUAL( true , parserKeyword.matches("WORLDABC")); - BOOST_CHECK_EQUAL( false , parserKeyword.matches("WORLD#BC")); -} - -BOOST_AUTO_TEST_CASE(AddDataKeyword_correctlyConfigured) { - auto parserKeyword = createFixedSized("PORO", (size_t) 1); - ParserItem item( "ACTNUM", INT); - ParserRecord record; - - BOOST_CHECK( !parserKeyword.isDataKeyword() ); - record.addDataItem( item ); - parserKeyword.addRecord( record ); - BOOST_CHECK( parserKeyword.isDataKeyword() ); - - BOOST_CHECK( parserKeyword.hasFixedSize() ); - BOOST_CHECK_EQUAL(1U , parserKeyword.getFixedSize() ); -} - -BOOST_AUTO_TEST_CASE(WrongConstructor_addDataItem_throws) { - auto parserKeyword = createDynamicSized("PORO"); - ParserItem dataItem( "ACTNUM", INT); - ParserRecord record; - record.addDataItem( dataItem ); - BOOST_CHECK_THROW( parserKeyword.addDataRecord( record ) , std::invalid_argument); -} - - -BOOST_AUTO_TEST_CASE(DefaultConstructur_setDescription_canReadBack) { - auto parserKeyword = createDynamicSized("BPR"); - std::string description("This is the description"); - parserKeyword.setDescription(description); - BOOST_CHECK_EQUAL( description, parserKeyword.getDescription()); -} - -/*****************************************************************/ -/* json */ -BOOST_AUTO_TEST_CASE(ConstructFromJsonObject) { - Json::JsonObject jsonObject("{\"name\": \"XXX\", \"sections\":[], \"size\" : 0}"); - ParserKeyword parserKeyword(jsonObject); - BOOST_CHECK_EQUAL("XXX" , parserKeyword.getName()); - BOOST_CHECK_EQUAL( true , parserKeyword.hasFixedSize() ); -} - -BOOST_AUTO_TEST_CASE(ConstructMultiNameFromJsonObject) { - const auto jsonString = - "{" - " \"name\": \"XXX\" ," - " \"sections\":[]," - " \"size\" : 0," - " \"deck_names\" : [" - " \"XXA\"," - " \"XXB\"," - " \"XXC\"" - " ]" - "}"; - Json::JsonObject jsonObject(jsonString); - ParserKeyword parserKeyword(jsonObject); - BOOST_CHECK_EQUAL("XXX" , parserKeyword.getName()); - BOOST_CHECK(parserKeyword.matches("XXA")); - BOOST_CHECK(parserKeyword.matches("XXB")); - BOOST_CHECK(parserKeyword.hasMultipleDeckNames()); - BOOST_CHECK(!parserKeyword.matches("XXD")); - BOOST_CHECK(!parserKeyword.matches("XXX")); -} - - -BOOST_AUTO_TEST_CASE(ConstructFromJsonObject_withSize) { - Json::JsonObject jsonObject("{\"name\": \"BPR\", \"sections\":[\"SUMMARY\"], \"size\" : 100 , \"items\" :[{\"name\":\"ItemX\" , \"size_type\":\"SINGLE\" , \"value_type\" : \"DOUBLE\"}]}"); - - ParserKeyword parserKeyword(jsonObject); - BOOST_CHECK_EQUAL("BPR" , parserKeyword.getName()); - BOOST_CHECK_EQUAL( true , parserKeyword.hasFixedSize() ); - BOOST_CHECK_EQUAL( 100U , parserKeyword.getFixedSize() ); - -} - -BOOST_AUTO_TEST_CASE(ConstructFromJsonObject_nosize_notItems_OK) { - Json::JsonObject jsonObject("{\"name\": \"BPR\", \"sections\":[\"SUMMARY\"]}"); - ParserKeyword parserKeyword(jsonObject); - BOOST_CHECK_EQUAL( true , parserKeyword.hasFixedSize() ); - BOOST_CHECK_EQUAL( 0U , parserKeyword.getFixedSize()); -} - -BOOST_AUTO_TEST_CASE(ConstructFromJsonObject_withSizeOther) { - Json::JsonObject jsonObject("{\"name\": \"BPR\", \"sections\":[\"SUMMARY\"], \"size\" : {\"keyword\" : \"Bjarne\" , \"item\": \"BjarneIgjen\"}, \"items\" :[{\"name\":\"ItemX\" , \"value_type\" : \"DOUBLE\"}]}"); - ParserKeyword parserKeyword(jsonObject); - const auto& keyword_size = parserKeyword.getKeywordSize(); - BOOST_CHECK_EQUAL("BPR" , parserKeyword.getName()); - BOOST_CHECK_EQUAL( false , parserKeyword.hasFixedSize() ); - BOOST_CHECK_EQUAL(OTHER_KEYWORD_IN_DECK , parserKeyword.getSizeType()); - BOOST_CHECK_EQUAL("Bjarne", keyword_size.keyword); - BOOST_CHECK_EQUAL("BjarneIgjen" , keyword_size.item ); -} - -BOOST_AUTO_TEST_CASE(ConstructFromJsonObject_missingName_throws) { - Json::JsonObject jsonObject("{\"nameXX\": \"BPR\", \"sections\":[\"SUMMARY\"], \"size\" : 100}"); - BOOST_CHECK_THROW(std::make_shared(jsonObject) , std::invalid_argument); -} - -/* - "items": [{"name" : "I" , "size_type" : "SINGLE" , "value_type" : "int"}] -*/ -BOOST_AUTO_TEST_CASE(ConstructFromJsonObject_invalidItems_throws) { - Json::JsonObject jsonObject("{\"name\": \"BPR\", \"sections\":[\"SUMMARY\"], \"size\" : 100 , \"items\" : 100}"); - BOOST_CHECK_THROW(std::make_shared(jsonObject) , std::invalid_argument); -} - -BOOST_AUTO_TEST_CASE(ConstructFromJsonObject_ItemMissingName_throws) { - Json::JsonObject jsonObject("{\"name\": \"BPR\", \"sections\":[\"SUMMARY\"], \"size\" : 100 , \"items\" : [{\"nameX\" : \"I\" , \"value_type\" : \"INT\"}]}"); - BOOST_CHECK_THROW(std::make_shared(jsonObject) , std::invalid_argument); -} - -BOOST_AUTO_TEST_CASE(ConstructFromJsonObject_ItemMissingValueType_throws) { - Json::JsonObject jsonObject("{\"name\": \"BPR\", \"sections\":[\"SUMMARY\"], \"size\" : 100 , \"items\" : [{\"name\" : \"I\" , \"size_type\" : \"SINGLE\" , \"Xvalue_type\" : \"INT\"}]}"); - BOOST_CHECK_THROW(std::make_shared(jsonObject) , std::invalid_argument); -} - -BOOST_AUTO_TEST_CASE(ConstructFromJsonObject_ItemInvalidEnum_throws) { - Json::JsonObject jsonObject1("{\"name\": \"BPR\", \"sections\":[\"SUMMARY\"], \"size\" : 100 , \"items\" : [{\"name\" : \"I\" , \"size_type\" : \"XSINGLE\" , \"value_type\" : \"INT\"}]}"); - Json::JsonObject jsonObject2("{\"name\": \"BPR\", \"sections\":[\"SUMMARY\"], \"size\" : 100 , \"items\" : [{\"name\" : \"I\" , \"size_type\" : \"SINGLE\" , \"value_type\" : \"INTX\"}]}"); - - BOOST_CHECK_THROW(std::make_shared(jsonObject1) , std::invalid_argument); - BOOST_CHECK_THROW(std::make_shared(jsonObject2) , std::invalid_argument); -} - -BOOST_AUTO_TEST_CASE(ConstructFromJsonObjectItemsOK) { - Json::JsonObject jsonObject("{\"name\": \"BPR\", \"sections\":[\"SUMMARY\"], \"size\" : 100 , \"items\" : [{\"name\" : \"I\", \"value_type\" : \"INT\"}]}"); - const auto& parserKeyword = std::make_shared(jsonObject); - const auto& record = parserKeyword->getRecord(0); - const auto& item = record.get( 0 ); - BOOST_CHECK_EQUAL( 1U , record.size( ) ); - BOOST_CHECK_EQUAL( "I" , item.name( ) ); - BOOST_CHECK_EQUAL( ParserItem::item_size::SINGLE , item.sizeType()); -} - -BOOST_AUTO_TEST_CASE(ConstructFromJsonObject_sizeFromOther) { - Json::JsonObject jsonConfig("{\"name\": \"EQUILX\", \"sections\":[\"PROPS\"], \"size\" : {\"keyword\":\"EQLDIMS\" , \"item\" : \"NTEQUL\"}, \"items\" :[{\"name\":\"ItemX\" ,\"value_type\" : \"DOUBLE\"}]}"); - BOOST_CHECK_NO_THROW( std::make_shared(jsonConfig) ); -} - -BOOST_AUTO_TEST_CASE(Default_NotData) { - auto parserKeyword = createDynamicSized("BPR"); - BOOST_CHECK_EQUAL( false , parserKeyword.isDataKeyword()); -} - - -BOOST_AUTO_TEST_CASE(AddDataKeywordFromJson_defaultThrows) { - Json::JsonObject jsonConfig("{\"name\": \"ACTNUM\", \"sections\":[\"GRID\"], \"data\" : {\"value_type\": \"INT\" , \"default\" : 100}}"); - BOOST_CHECK_THROW( new ParserKeyword(jsonConfig), std::invalid_argument); -} - -BOOST_AUTO_TEST_CASE(AddDataKeywordFromJson_correctlyConfigured) { - Json::JsonObject jsonConfig("{\"name\": \"ACTNUM\", \"sections\":[\"GRID\"], \"data\" : {\"value_type\": \"INT\"}}"); - ParserKeyword parserKeyword(jsonConfig); - const auto& parserRecord = parserKeyword.getRecord(0); - const auto& item = parserRecord.get(0); - - - BOOST_CHECK( parserKeyword.isDataKeyword() ); - BOOST_CHECK( parserKeyword.hasFixedSize( ) ); - BOOST_CHECK_EQUAL(1U , parserKeyword.getFixedSize() ); - - BOOST_CHECK_EQUAL( item.name() , ParserKeywords::ACTNUM::data::itemName ); - BOOST_CHECK_EQUAL( ParserItem::item_size::ALL, item.sizeType() ); -} - -BOOST_AUTO_TEST_CASE(AddkeywordFromJson_numTables_incoorect_throw) { - Json::JsonObject jsonConfig("{\"name\": \"PVTG\", \"sections\":[\"PROPS\"], \"num_tables\" : 100}"); - BOOST_CHECK_THROW(new ParserKeyword(jsonConfig) , std::invalid_argument); -} - -BOOST_AUTO_TEST_CASE(AddkeywordFromJson_isTableCollection) { - Json::JsonObject jsonConfig("{\"name\": \"PVTG\", \"sections\":[\"PROPS\"], \"num_tables\" : {\"keyword\": \"TABDIMS\" , \"item\" : \"NTPVT\"} , \"items\" : [{\"name\" : \"data\", \"value_type\" : \"DOUBLE\"}]}"); - ParserKeyword parserKeyword(jsonConfig); - BOOST_CHECK_EQUAL( true , parserKeyword.isTableCollection() ); - BOOST_CHECK_EQUAL( false , parserKeyword.isDataKeyword()); - BOOST_CHECK_EQUAL( false , parserKeyword.hasFixedSize( )); -} - -BOOST_AUTO_TEST_CASE(ConstructFromJsonObject_InvalidSize_throws) { - Json::JsonObject jsonObject1("{\"name\": \"BPR\", \"sections\":[\"SUMMARY\"], \"size\" : \"string\" , \"items\" : [{\"name\" : \"I\" , \"size_type\" : \"SINGLE\" , \"value_type\" : \"INT\"}]}"); - Json::JsonObject jsonObject2("{\"name\": \"BPR\", \"sections\":[\"SUMMARY\"], \"size\" : [1,2,3] , \"items\" : [{\"name\" : \"I\" , \"size_type\" : \"SINGLE\" , \"value_type\" : \"INT\"}]}"); - - BOOST_CHECK_THROW(ParserKeyword kw(jsonObject1) , std::invalid_argument); - BOOST_CHECK_THROW(ParserKeyword kw(jsonObject2) , std::invalid_argument); -} - -BOOST_AUTO_TEST_CASE(ConstructFromJsonObject_SizeUNKNOWN_OK) { - Json::JsonObject jsonObject("{\"name\": \"BPR\", \"sections\":[\"SUMMARY\"], \"size\" : \"UNKNOWN\" , \"items\" : [{\"name\" : \"I\" , \"size_type\" : \"SINGLE\" , \"value_type\" : \"INT\"}]}"); - ParserKeyword parserKeyword(jsonObject); - - BOOST_CHECK_EQUAL( UNKNOWN , parserKeyword.getSizeType() ); -} - -BOOST_AUTO_TEST_CASE(ConstructFromJsonObject_WithDescription_DescriptionPropertyShouldBePopulated) { - Json::JsonObject jsonObject("{\"name\": \"BPR\", \"sections\":[\"SUMMARY\"], \"description\" : \"Description\"}"); - ParserKeyword parserKeyword(jsonObject); - - BOOST_CHECK_EQUAL( "Description", parserKeyword.getDescription() ); -} - -BOOST_AUTO_TEST_CASE(ConstructFromJsonObject_WithoutDescription_DescriptionPropertyShouldBeEmpty) { - Json::JsonObject jsonObject("{\"name\": \"BPR\", \"sections\":[\"SUMMARY\"]}"); - ParserKeyword parserKeyword(jsonObject); - BOOST_CHECK_EQUAL( "", parserKeyword.getDescription() ); -} - -/* */ -/*****************************************************************/ -BOOST_AUTO_TEST_CASE(getFixedSize_sizeObjectHasFixedSize_sizeReturned) { - const auto& parserKeyword = createFixedSized("JA", (size_t) 3); - BOOST_CHECK_EQUAL(3U, parserKeyword.getFixedSize()); - -} - -BOOST_AUTO_TEST_CASE(getFixedSize_sizeObjectDoesNotHaveFixedSizeObjectSet_ExceptionThrown) { - const auto& parserKeyword = createDynamicSized("JA"); - BOOST_CHECK_THROW(parserKeyword.getFixedSize(), std::logic_error); -} - -BOOST_AUTO_TEST_CASE(hasFixedSize_hasFixedSizeObject_returnstrue) { - const auto& parserKeyword = createFixedSized("JA", (size_t) 2); - BOOST_CHECK(parserKeyword.hasFixedSize()); -} - -BOOST_AUTO_TEST_CASE(hasFixedSize_sizeObjectDoesNotHaveFixedSize_returnsfalse) { - const auto& parserKeyword = createDynamicSized("JA"); - BOOST_CHECK(!parserKeyword.hasFixedSize()); -} - -/******/ -/* Tables: */ -BOOST_AUTO_TEST_CASE(DefaultIsNot_TableKeyword) { - const auto& parserKeyword = createDynamicSized("JA"); - BOOST_CHECK(!parserKeyword.isTableCollection()); -} - -BOOST_AUTO_TEST_CASE(ConstructorIsTableCollection) { - auto parserKeyword = createTable("JA" , "TABDIMS" , "NTPVT" , true); - BOOST_CHECK(parserKeyword.isTableCollection()); - BOOST_CHECK(!parserKeyword.hasFixedSize()); - - auto keyword_size = parserKeyword.getKeywordSize(); - BOOST_CHECK_EQUAL( parserKeyword.getSizeType() , OTHER_KEYWORD_IN_DECK); - BOOST_CHECK_EQUAL("TABDIMS", keyword_size.keyword ); - BOOST_CHECK_EQUAL("NTPVT" , keyword_size.item); -} - -BOOST_AUTO_TEST_CASE(ParseEmptyRecord) { - auto tabdimsKeyword = createFixedSized("TEST" , 1); - ParserRecord record; - ParserItem item("ITEM", INT); - RawKeyword rawkeyword( tabdimsKeyword.getName() , "FILE" , 10U , false, Raw::FIXED, 1); - ParseContext parseContext; - ErrorGuard errors; - UnitSystem unit_system; - - BOOST_CHECK_EQUAL( Raw::FIXED , rawkeyword.getSizeType()); - rawkeyword.addRecord( RawRecord("") ); - record.addItem(item); - tabdimsKeyword.addRecord( record ); - - const auto deckKeyword = tabdimsKeyword.parse( parseContext, errors, rawkeyword , unit_system, unit_system, "filename"); - BOOST_REQUIRE_EQUAL( 1U , deckKeyword.size()); - - const auto& deckRecord = deckKeyword.getRecord(0); - BOOST_REQUIRE_EQUAL( 1U , deckRecord.size()); -} - - - -/*****************************************************************/ -/* Dimension */ -BOOST_AUTO_TEST_CASE(ParseKeywordHasDimensionCorrect) { - auto parserKeyword = createDynamicSized("JA"); - ParserItem item1("I", DOUBLE); - ParserItem item2("ID", DOUBLE); - ParserRecord record; - - BOOST_CHECK( !parserKeyword.hasDimension()); - BOOST_CHECK_EQUAL( 0U , item1.dimensions().size() ); - item2.push_backDimension("Length"); - BOOST_CHECK_EQUAL( 1U , item2.dimensions().size() ); - - record.addItem( item1 ); - parserKeyword.addRecord( record ); - BOOST_CHECK( !parserKeyword.hasDimension() ); - BOOST_CHECK_EQUAL( 0U , item1.dimensions().size() ); - - record.addItem( item2 ); - - auto parserKeyword2 = createDynamicSized("JA"); - parserKeyword2.addRecord( record ); - BOOST_CHECK( parserKeyword2.hasDimension() ); - BOOST_CHECK_EQUAL( 1U , item2.dimensions().size() ); -} - -BOOST_AUTO_TEST_CASE(ConstructFromJsonObject_withDimension) { - Json::JsonObject jsonObject("{\"name\": \"BPR\", \"sections\":[\"SUMMARY\"], \"size\" : 100 , \"items\" :[{\"name\":\"ItemX\" , \"size_type\":\"SINGLE\" , \"value_type\" : \"DOUBLE\" , \"dimension\" : \"Length*Length/Time\"}]}"); - ParserKeyword parserKeyword(jsonObject); - - const auto& record = parserKeyword.getRecord(0); - const auto& item = record.get("ItemX"); - - BOOST_CHECK_EQUAL("BPR" , parserKeyword.getName()); - BOOST_CHECK( parserKeyword.hasFixedSize() ); - BOOST_CHECK_EQUAL( 100U , parserKeyword.getFixedSize() ); - - BOOST_CHECK( parserKeyword.hasDimension() ); - BOOST_CHECK_EQUAL( 1U , item.dimensions().size() ); -} - -BOOST_AUTO_TEST_CASE(ConstructFromJsonObject_withDimensionList) { - Json::JsonObject jsonObject("{\"name\": \"BPR\", \"sections\":[\"SUMMARY\"], \"size\" : 100 , \"items\" :[{\"name\":\"ItemX\" , \"size_type\":\"ALL\" , \"value_type\" : \"DOUBLE\" , \"dimension\" : [\"Length*Length/Time\" , \"Time\", \"1\"]}]}"); - ParserKeyword parserKeyword(jsonObject); - const auto& record = parserKeyword.getRecord(0); - const auto& item = record.get("ItemX"); - - BOOST_CHECK_EQUAL("BPR" , parserKeyword.getName()); - BOOST_CHECK_EQUAL( true , parserKeyword.hasFixedSize() ); - BOOST_CHECK_EQUAL( 100U , parserKeyword.getFixedSize() ); - - BOOST_CHECK( parserKeyword.hasDimension() ); - BOOST_CHECK_EQUAL( 3U , item.dimensions().size() ); -} - - - - - -BOOST_AUTO_TEST_CASE(ConstructFromJson_withRecords) { - const std::string json_string1 = "{\"name\" : \"MULTFLT\", \"sections\" : [\"GRID\", \"EDIT\", \"SCHEDULE\"], \"records\" : [[" - "{\"name\" : \"fault\" , \"value_type\" : \"STRING\"}," - "{\"name\" : \"factor\" , \"value_type\" : \"DOUBLE\"}]]}"; - - const std::string json_string2 = "{\"name\" : \"MULTFLT\", \"sections\" : [\"GRID\", \"EDIT\", \"SCHEDULE\"], \"items\" : [" - "{\"name\" : \"fault\" , \"value_type\" : \"STRING\"}," - "{\"name\" : \"factor\" , \"value_type\" : \"DOUBLE\"}]}"; - - - Json::JsonObject jsonObject1( json_string1 ); - Json::JsonObject jsonObject2( json_string2 ); - ParserKeyword kw1(jsonObject1); - ParserKeyword kw2(jsonObject2); - - BOOST_CHECK_EQUAL( kw1, kw2 ); -} - -BOOST_AUTO_TEST_CASE(ConstructFromJson_withRecords_and_items_throws) { - const std::string json_string = "{\"name\" : \"MULTFLT\", \"sections\" : [\"GRID\", \"EDIT\", \"SCHEDULE\"], \"records\" : [[" - "{\"name\" : \"fault\" , \"value_type\" : \"STRING\"}," - "{\"name\" : \"factor\" , \"value_type\" : \"DOUBLE\"}]],\"items\" : [" - "{\"name\" : \"fault\" , \"value_type\" : \"STRING\"}," - "{\"name\" : \"factor\" , \"value_type\" : \"DOUBLE\"}]}"; - Json::JsonObject jsonObject( json_string ); - BOOST_CHECK_THROW( ParserKeyword kw( jsonObject ) , std::invalid_argument); -} - -BOOST_AUTO_TEST_CASE(ConstructFromJson_withAlternatingRecords) { - const std::string json_string = R"( - {"name" : "STOG", "sections" : ["PROPS"] , "num_tables" : {"keyword" : "TABDIMS" , "item" : "NTPVT"}, "alternating_records" : [[ - {"name" : "ref_oil_pressure", "value_type" : "DOUBLE"}], [ - {"name" : "oil_phase_pressure" , "value_type" : "DOUBLE"}, - {"name" : "surface_rension", "value_type" : "DOUBLE"}]]} - )"; - Json::JsonObject jsonObject( json_string ); - ParserKeyword kw( jsonObject ); - BOOST_CHECK( kw.isAlternatingKeyword() ); - BOOST_CHECK_EQUAL(kw.getRecord(0).size(), 1); - BOOST_CHECK_EQUAL(kw.getRecord(1).size(), 2); -} - -BOOST_AUTO_TEST_CASE(ConstructFromJson_withAlternatingRecordswithItems) { - const std::string json_string = R"( - {"name" : "STOG", "sections" : ["PROPS"] , "num_tables" : {"keyword" : "TABDIMS" , "item" : "NTPVT"}, "alternating_records" : [[ - {"name" : "ref_oil_pressure", "value_type" : "DOUBLE"}], [ - {"name" : "oil_phase_pressure" , "value_type" : "DOUBLE"}, - {"name" : "surface_rension", "value_type" : "DOUBLE"}]], "items" : [{"name" : "w", "value_type" : "STRING"}]} - )"; - Json::JsonObject jsonObject( json_string ); - BOOST_CHECK_THROW( ParserKeyword kw( jsonObject ), std::invalid_argument); -} - - -BOOST_AUTO_TEST_CASE(GetAlternatingKeywordFromParser) { - Parser parser; - BOOST_CHECK(parser.hasKeyword("STOG")); - ParserKeyword kw = parser.getKeyword("STOG"); - BOOST_CHECK(kw.isAlternatingKeyword()); - auto record0 = kw.getRecord(0); - auto record1 = kw.getRecord(1); - BOOST_CHECK_EQUAL(record0.get(0).name(), "REF_OIL_PHASE_PRESSURE"); - BOOST_CHECK_EQUAL(record1.get(0).name(), "table"); - BOOST_CHECK(kw.getRecord(2) == record0); - BOOST_CHECK(kw.getRecord(3) == record1); - BOOST_CHECK(kw.getRecord(12) == record0); - BOOST_CHECK(kw.getRecord(13) == record1); -} - -BOOST_AUTO_TEST_CASE(ConstructFromJson_withDoubleRecords) { - const std::string json_string = R"( - {"name" : "CECONT", "sections" : ["PROPS"] , "records_set" : [[ - {"name" : "WELL", "value_type" : "STRING"}, - {"name" : "I", "value_type" : "INT"}, - {"name" : "J", "value_type" : "INT"}, - {"name" : "K", "value_type" : "INT"}], [ - {"name" : "TRACER" , "value_type" : "STRING"}, - {"name" : "rate", "value_type" : "DOUBLE"}]]} - )"; - Json::JsonObject jsonObject( json_string ); - ParserKeyword kw( jsonObject ); - BOOST_CHECK( kw.isDoubleRecordKeyword() ); - BOOST_CHECK_EQUAL(kw.getRecord(0).size(), 4); - BOOST_CHECK_EQUAL(kw.getRecord(1).size(), 2); -} - -BOOST_AUTO_TEST_CASE(GetDoubleRecordKeywordFromParser) { - Parser parser; - BOOST_CHECK(parser.hasKeyword("CECONT")); - ParserKeyword kw = parser.getKeyword("CECONT"); - BOOST_CHECK(kw.isDoubleRecordKeyword()); - BOOST_CHECK(kw.getSizeType() == DOUBLE_SLASH_TERMINATED); - auto record0 = kw.getRecord(0); - auto record1 = kw.getRecord(1); - BOOST_CHECK_EQUAL(record0.get(0).name(), "WELL"); - BOOST_CHECK_EQUAL(record1.get(0).name(), "TRACER"); - BOOST_CHECK(kw.getRecord(11) == record1); - BOOST_CHECK(kw.getRecord(13) == record1); -} - - - -BOOST_AUTO_TEST_CASE(Create1Arg) { - ParserKeyword kw("GRID"); - BOOST_CHECK_EQUAL( false , kw.hasDimension() ); - BOOST_CHECK( kw.hasFixedSize() ); - BOOST_CHECK_EQUAL( kw.getFixedSize( ) , 0 ); - - BOOST_CHECK_THROW( kw.getRecord( 0 ) , std::invalid_argument ); -} - -BOOST_AUTO_TEST_CASE(TestKeywordSizeEnum2String) { - BOOST_CHECK_EQUAL( "SLASH_TERMINATED" , ParserKeywordSizeEnum2String(SLASH_TERMINATED)); - BOOST_CHECK_EQUAL( "FIXED" , ParserKeywordSizeEnum2String(FIXED)); - BOOST_CHECK_EQUAL( "OTHER_KEYWORD_IN_DECK" , ParserKeywordSizeEnum2String(OTHER_KEYWORD_IN_DECK)); - BOOST_CHECK_EQUAL( "UNKNOWN" , ParserKeywordSizeEnum2String(UNKNOWN)); -} - - -BOOST_AUTO_TEST_CASE(TestKeywordSizeEnumFromString) { - BOOST_CHECK_THROW( ParserKeywordSizeEnumFromString("XXX") , std::invalid_argument ); - BOOST_CHECK_EQUAL( FIXED , ParserKeywordSizeEnumFromString("FIXED")); - BOOST_CHECK_EQUAL( SLASH_TERMINATED , ParserKeywordSizeEnumFromString("SLASH_TERMINATED")); - BOOST_CHECK_EQUAL( "OTHER_KEYWORD_IN_DECK" , ParserKeywordSizeEnum2String(OTHER_KEYWORD_IN_DECK)); - BOOST_CHECK_EQUAL( "UNKNOWN" , ParserKeywordSizeEnum2String(UNKNOWN)); -} - - - -BOOST_AUTO_TEST_CASE(TestKeywordSizeEnumLoop) { - BOOST_CHECK_EQUAL( FIXED , ParserKeywordSizeEnumFromString( ParserKeywordSizeEnum2String( FIXED ) )); - BOOST_CHECK_EQUAL( SLASH_TERMINATED , ParserKeywordSizeEnumFromString( ParserKeywordSizeEnum2String( SLASH_TERMINATED ) )); - BOOST_CHECK_EQUAL( OTHER_KEYWORD_IN_DECK , ParserKeywordSizeEnumFromString( ParserKeywordSizeEnum2String( OTHER_KEYWORD_IN_DECK ) )); - BOOST_CHECK_EQUAL( UNKNOWN , ParserKeywordSizeEnumFromString( ParserKeywordSizeEnum2String( UNKNOWN ) )); - - BOOST_CHECK_EQUAL( "FIXED" , ParserKeywordSizeEnum2String(ParserKeywordSizeEnumFromString( "FIXED" ) )); - BOOST_CHECK_EQUAL( "SLASH_TERMINATED" , ParserKeywordSizeEnum2String(ParserKeywordSizeEnumFromString( "SLASH_TERMINATED" ) )); - BOOST_CHECK_EQUAL( "OTHER_KEYWORD_IN_DECK" , ParserKeywordSizeEnum2String(ParserKeywordSizeEnumFromString( "OTHER_KEYWORD_IN_DECK" ) )); - BOOST_CHECK_EQUAL( "UNKNOWN" , ParserKeywordSizeEnum2String(ParserKeywordSizeEnumFromString( "UNKNOWN" ) )); -} - - - -/*****************************************************************/ - -BOOST_AUTO_TEST_CASE(TestKeywordActionEnum2String) { - BOOST_CHECK_EQUAL( "INTERNALIZE" , ParserKeywordActionEnum2String(INTERNALIZE)); - BOOST_CHECK_EQUAL( "IGNORE" , ParserKeywordActionEnum2String(IGNORE)); - BOOST_CHECK_EQUAL( "IGNORE_WARNING" , ParserKeywordActionEnum2String(IGNORE_WARNING)); - BOOST_CHECK_EQUAL( "THROW_EXCEPTION" , ParserKeywordActionEnum2String(THROW_EXCEPTION)); -} - - -BOOST_AUTO_TEST_CASE(TestKeywordActionEnumFromString) { - BOOST_CHECK_THROW( ParserKeywordActionEnumFromString("XXX") , std::invalid_argument ); - BOOST_CHECK_EQUAL( INTERNALIZE , ParserKeywordActionEnumFromString("INTERNALIZE")); - BOOST_CHECK_EQUAL( IGNORE_WARNING , ParserKeywordActionEnumFromString("IGNORE_WARNING")); - BOOST_CHECK_EQUAL( IGNORE , ParserKeywordActionEnumFromString("IGNORE")); - BOOST_CHECK_EQUAL( THROW_EXCEPTION , ParserKeywordActionEnumFromString("THROW_EXCEPTION")); -} - - - -BOOST_AUTO_TEST_CASE(TestKeywordActionEnumLoop) { - BOOST_CHECK_EQUAL( INTERNALIZE , ParserKeywordActionEnumFromString( ParserKeywordActionEnum2String( INTERNALIZE ) )); - BOOST_CHECK_EQUAL( IGNORE , ParserKeywordActionEnumFromString( ParserKeywordActionEnum2String( IGNORE ) )); - BOOST_CHECK_EQUAL( IGNORE_WARNING , ParserKeywordActionEnumFromString( ParserKeywordActionEnum2String( IGNORE_WARNING ) )); - BOOST_CHECK_EQUAL( THROW_EXCEPTION , ParserKeywordActionEnumFromString( ParserKeywordActionEnum2String( THROW_EXCEPTION ) )); - - BOOST_CHECK_EQUAL( "INTERNALIZE" , ParserKeywordActionEnum2String(ParserKeywordActionEnumFromString( "INTERNALIZE" ) )); - BOOST_CHECK_EQUAL( "IGNORE" , ParserKeywordActionEnum2String(ParserKeywordActionEnumFromString( "IGNORE" ) )); - BOOST_CHECK_EQUAL( "IGNORE_WARNING" , ParserKeywordActionEnum2String(ParserKeywordActionEnumFromString( "IGNORE_WARNING" ) )); - BOOST_CHECK_EQUAL( "THROW_EXCEPTION" , ParserKeywordActionEnum2String(ParserKeywordActionEnumFromString( "THROW_EXCEPTION" ) )); -} - -/*****************************************************************/ - -BOOST_AUTO_TEST_CASE(ParseUnitConventions) -{ - const auto* deck_string = R"( -METRIC -FIELD -LAB -PVT-M -)"; - - Parser parser; - const auto deck = parser.parseString( deck_string ); - - BOOST_CHECK( deck.hasKeyword( "METRIC" ) ); - BOOST_CHECK( deck.hasKeyword( "FIELD" ) ); - BOOST_CHECK( deck.hasKeyword( "LAB" ) ); - BOOST_CHECK( deck.hasKeyword( "PVT-M" ) ); -} - - - -BOOST_AUTO_TEST_CASE(ParseAQUTAB) { - const auto * deck_string = R"( -RUNSPEC - -AQUDIMS - * * 2 / - -PROPS - -AQUTAB - 0 1 - 0.10 1.1 - 0.20 1.2 / -)"; - - Parser parser; - const auto deck = parser.parseString( deck_string); - const auto& aqutab = deck.getKeyword("AQUTAB"); - BOOST_CHECK_EQUAL( 1, aqutab.size()); -} - - -BOOST_AUTO_TEST_CASE(ParseRAW_STRING) { - const std::string deck_string = R"(UDQ - DEFINE 'WUBHP' 'P*X*' / - DEFINE 'WUBHP' 'P*X*' 5*(1 + LOG(WBHP)) / -/ -)"; - Parser parser; - const auto deck = parser.parseString( deck_string); - const auto& udq = deck.getKeyword("UDQ"); - const std::vector expected0 = {"'P*X*'"}; - const std::vector expected1 = {"'P*X*'", "5*(1", "+", "LOG(WBHP))"}; - const auto& data0 = RawString::strings( udq.getRecord(0).getItem("DATA").getData() ); - const auto& data1 = RawString::strings( udq.getRecord(1).getItem("DATA").getData() ); - BOOST_CHECK_EQUAL_COLLECTIONS( data0.begin(), data0.end(), expected0.begin(), expected0.end()); - BOOST_CHECK_EQUAL_COLLECTIONS( data1.begin(), data1.end(), expected1.begin(), expected1.end()); - - std::stringstream ss; - ss << udq; - BOOST_CHECK_EQUAL(ss.str(), deck_string); -} - - -BOOST_AUTO_TEST_CASE(ParseThreePhaseRelpermModels) { - { - const auto deck_string = std::string{ R"( -STONE1 -STONE2 -)" }; - - const auto deck = Parser{}.parseString( deck_string); - - BOOST_CHECK( !deck.hasKeyword( "STONE" ) ); - BOOST_CHECK( deck.hasKeyword( "STONE1" ) ); - BOOST_CHECK( deck.hasKeyword( "STONE2" ) ); - } - - { - const auto deck_string = std::string{ R"( -STONE -)" }; - - const auto deck = Parser{}.parseString( deck_string ); - - BOOST_CHECK( deck.hasKeyword( "STONE" ) ); - BOOST_CHECK( !deck.hasKeyword( "STONE1" ) ); - BOOST_CHECK( !deck.hasKeyword( "STONE2" ) ); - } -} - -BOOST_AUTO_TEST_CASE(ParseDynamicr) { - const auto deck_string = std::string { R"(RUNSPEC -FIELD -SOLUTION -DYNAMICR -FIPYYY -1 / -"IN" FIPXXX 1 / -/ -FIPYYY -2 / -"ALL" FIPXXX 2 FIPXXX 3 / -/ -FIPYYY -3 / -BOIP <= 500000 / -/ENDDYN -SCHEDULE -GCUTBACK -G1 0.6 3* 0.9 LIQ / -/ -)"}; - -Parser parser; -auto deck = parser.parseString(deck_string); -BOOST_CHECK( deck.hasKeyword("GCUTBACK") ); - -} - -BOOST_AUTO_TEST_CASE(ParseRSConst) { - // Check that parsing RSCONST does not bleed into next keyword. - - const auto deck_string = std::string { R"(RUNSPEC -FIELD -TABDIMS - 1* 2 -/ - -PROPS -RSCONST - 0.35 932 / - -DENSITY - 50.91 62.4 / - 51.90 64.2 / -)" }; - - const auto deck = Parser{}.parseString( deck_string ); - - BOOST_CHECK( deck.hasKeyword( "RSCONST" ) ); - - const auto& rsconst = deck.getKeyword("RSCONST"); - BOOST_CHECK_EQUAL( rsconst.size( ), 1 ); - - const auto& rec = rsconst.getRecord( 0 ); - BOOST_CHECK_EQUAL( rec.size( ), 2 ); - - const auto& rs = rec.getItem( 0 ); - const auto& pbub = rec.getItem( 1 ); - - BOOST_CHECK_EQUAL( rs.name( ), "RS" ); - BOOST_CHECK_EQUAL( pbub.name( ), "PB" ); - - BOOST_CHECK( ! rs.defaultApplied( 0 ) ); - BOOST_CHECK( ! pbub.defaultApplied( 0 ) ); - - BOOST_CHECK_CLOSE( rs.get< double >( 0 ), 0.35, 1.0e-10 ); - BOOST_CHECK_CLOSE( pbub.get< double >( 0 ), 932.0, 1.0e-10 ); - - BOOST_CHECK_CLOSE( rs.getSIDouble( 0 ), 62.337662337662323, 1.0e-10 ); - BOOST_CHECK_CLOSE( pbub.getSIDouble( 0 ), 6.425913797232911e+06, 1.0e-10 ); -} - - -BOOST_AUTO_TEST_CASE(DefaultedRSConst) { - // Defaulted RSCONST should *probably* fail at the input stage. - // In other words, Parser::parseString() should probably fail here. - // - // We currently just construct a single record of empty items - // for which 'defaultApplied()' returns true. - - const auto deck_string = std::string { R"(RUNSPEC -FIELD -TABDIMS -/ - -PROPS -RSCONST -/ - -DENSITY - 50.91 62.4 / -)" }; - - const auto deck = Parser{}.parseString( deck_string); - - BOOST_CHECK( deck.hasKeyword( "RSCONST" ) ); - - const auto& rsconst = deck.getKeyword("RSCONST"); - BOOST_CHECK_EQUAL( rsconst.size( ), 1 ); - - const auto& rec = rsconst.getRecord( 0 ); - BOOST_CHECK_EQUAL( rec.size( ), 2 ); - - const auto& rs = rec.getItem( 0 ); - const auto& pbub = rec.getItem( 1 ); - - BOOST_CHECK_EQUAL( rs.name( ), "RS" ); - BOOST_CHECK_EQUAL( pbub.name( ), "PB" ); - - BOOST_CHECK( rs.defaultApplied( 0 ) ); - BOOST_CHECK( pbub.defaultApplied( 0 ) ); -} - -BOOST_AUTO_TEST_CASE(IGNORE_SOH) { - // Check that parsing RSCONSTT does not bleed into next keyword. - - const auto deck_string = std::string { R"( -FIELD -TABDIMS - 1* 2 -/ --- The ^A should be here - that is ASCII character 1 which is sometimes --- inserted by the windows editor Notepad++ -PROPS -RSCONSTT - 0.35 932 / - 0.40 945 / -)" }; - - const auto deck = Parser{}.parseString( deck_string ); -} - -BOOST_AUTO_TEST_CASE(InvalidLateUnits) { - const auto deck_string = std::string { R"(RUNSPEC -DX - 100*100/ - -FIELD - -)" }; - /* - The opm-parser will fail hard if you change unit system with one of the - FIELD, METRIC, LAB or PVT-M keywords after you have loaded a keyword with - a dimension. This test verifies that you indeed get an exception in this - case. - - The faulty situation should be "impossible" because the unit system - keywords should be in the RUNSPEC section, and all the other keywords in - the RUNSPEC section are integer keywords without dimension. Hence the deck - used in this test has incorrectly put the DX keyword in the RUNSPEC - section in order to provoke the exception; if at some stage the opm parser - treats section stricter this test might fail due to that reason instead. - */ - BOOST_CHECK_THROW( Parser{}.parseString(deck_string), std::invalid_argument); -} - -BOOST_AUTO_TEST_CASE(ParseRSConstT) { - // Check that parsing RSCONSTT does not bleed into next keyword. - - const auto deck_string = std::string { R"(RUNSPEC -FIELD -TABDIMS - 1* 2 -/ - -PROPS -RSCONSTT - 0.35 932 / - 0.40 945 / - -DENSITY - 50.91 62.4 / - 51.90 64.2 / -)" }; - - const auto deck = Parser{}.parseString( deck_string ); - - BOOST_CHECK( deck.hasKeyword( "RSCONSTT" ) ); - - const auto& rsconstt = deck.getKeyword( "RSCONSTT" ); - BOOST_CHECK_EQUAL( rsconstt.size( ), 2 ); - - // First Record (ID = 0) - { - const auto& rec0 = rsconstt.getRecord( 0 ); - BOOST_CHECK_EQUAL( rec0.size( ), 2 ); - - const auto& rs = rec0.getItem( 0 ); - const auto& pbub = rec0.getItem( 1 ); - - BOOST_CHECK_EQUAL( rs.name( ), "RS_CONSTT" ); - BOOST_CHECK_EQUAL( pbub.name( ), "PB_CONSTT" ); - - BOOST_CHECK( ! rs.defaultApplied( 0 ) ); - BOOST_CHECK( ! pbub.defaultApplied( 0 ) ); - - BOOST_CHECK_CLOSE( rs.get< double >( 0 ), 0.35, 1.0e-10 ); - BOOST_CHECK_CLOSE( pbub.get< double >( 0 ), 932.0, 1.0e-10 ); - - BOOST_CHECK_CLOSE( rs.getSIDouble( 0 ), 62.337662337662323, 1.0e-10 ); - BOOST_CHECK_CLOSE( pbub.getSIDouble( 0 ), 6.425913797232911e+06, 1.0e-10 ); - } - - // Second Record (ID = 1) - { - const auto& rec1 = rsconstt.getRecord( 1 ); - BOOST_CHECK_EQUAL( rec1.size( ), 2 ); - - const auto& rs = rec1.getItem( 0 ); - const auto& pbub = rec1.getItem( 1 ); - - BOOST_CHECK_EQUAL( rs.name( ), "RS_CONSTT" ); - BOOST_CHECK_EQUAL( pbub.name( ), "PB_CONSTT" ); - - BOOST_CHECK( ! rs.defaultApplied( 0 ) ); - BOOST_CHECK( ! pbub.defaultApplied( 0 ) ); - - BOOST_CHECK_CLOSE( rs.get< double >( 0 ), 0.40, 1.0e-10 ); - BOOST_CHECK_CLOSE( pbub.get< double >( 0 ), 945.0, 1.0e-10 ); - - BOOST_CHECK_CLOSE( rs.getSIDouble( 0 ), 71.243042671614077, 1.0e-10 ); - BOOST_CHECK_CLOSE( pbub.getSIDouble( 0 ), 6.515545642044100e+06, 1.0e-10 ); - } -} - -BOOST_AUTO_TEST_CASE(ParseDoubleRecords) { - const auto deck_string = std::string { R"( -RUNSPEC -FIELD -TABDIMS - 1* 2 -/ - -PROPS - -DENSITY - 50.91 62.4 / - 51.90 64.2 / - -SCHEDULE - -CECONT -PROD1 4* CON NO / -TR1 1000.0 0.5 / -TR2 2* 1* 0.8 2* / -TR3 1500.0 0.1 / -/ -PROD2 5 6 3 3 CON+ NO / -TR3 100.0 0.05 / -/ -PROD3 6* / -TR4 200 5* / -PLY 1* 0.7 / -/ -/ - -GCONSUMP -PLAT-A 20 50 / -PLAT-B 15 / -/ - -)" }; - Parser parser; - auto deck = parser.parseString(deck_string); - BOOST_CHECK( deck.hasKeyword("CECONT") ); - BOOST_CHECK( deck.hasKeyword("GCONSUMP") ); - - auto kw_density = deck.getKeyword("DENSITY"); - - auto kw = deck.getKeyword("CECONT"); - BOOST_CHECK( kw.isDoubleRecordKeyword() ); - - auto record00 = kw.getRecord(0); - BOOST_CHECK_EQUAL(record00.getItem(0).name(), "WELL"); - BOOST_CHECK_EQUAL(record00.getItem(0).get(0), "PROD1"); - BOOST_CHECK(record00.getItem(1).getType() == type_tag::integer); - BOOST_CHECK_EQUAL(record00.getItem(1).get(0), 0); - - auto record01 = kw.getRecord(1); - BOOST_CHECK_EQUAL(record01.getItem(0).name(), "TRACER"); - BOOST_CHECK_EQUAL(record01.getItem(0).get(0), "TR1"); - BOOST_CHECK(record01.getItem(1).getType() == type_tag::fdouble); - BOOST_CHECK_EQUAL(record01.getItem(1).get(0), 1000); - - BOOST_CHECK_EQUAL( kw.getRecord(4).size(), 0 ); - - auto record04 = kw.getRecord(5); - BOOST_CHECK_EQUAL(record04.getItem(0).name(), "WELL"); - BOOST_CHECK_EQUAL(record04.getItem(0).get(0), "PROD2"); - BOOST_CHECK(record04.getItem(1).getType() == type_tag::integer); - BOOST_CHECK_EQUAL(record04.getItem(1).get(0), 5); - - auto record08 = kw.getRecord(10); - BOOST_CHECK_EQUAL(record08.getItem(0).name(), "TRACER"); - BOOST_CHECK_EQUAL(record08.getItem(0).get(0), "PLY"); - BOOST_CHECK(record08.getItem(2).getType() == type_tag::fdouble); - BOOST_CHECK_EQUAL(record08.getItem(2).get(0), 0.7); -} - -BOOST_AUTO_TEST_CASE(ParseSpecialKeywords) { - const auto deck_string = std::string { R"(RUNSPEC -FIELD -TABDIMS - 2 / -PROPS - -ADSORP -POLYMER / -LANGMUIR 0.0012 0.7 0.4 1.1 0.5 100 / -LANGMUIR 0.0009 0.7 0.5 1.2 0.3 50 / - -ROCK -3600.00 .40E-05 / -3600.00 .40E-05 / -3000 0 / - -SCHEDULE -UDT --- here comes a comment --- and another comment --- comment - - -FIELD 1/ --- and anothther comment -NV 4.0E+06 5.0E+06 6.0E+06 7.0E+06 / -40 50 60 70 / -/ -/ -GCUTBACK -G1 0.6 3* 0.9 LIQ / -G2 1* 3.0 2* 0.9 RESV / -/ -UDT -LANGMUIR 4 / -LC 2 / -This keyword will not be finished -)"}; - -Parser parser; -auto deck = parser.parseString(deck_string); -BOOST_CHECK( deck.hasKeyword("GCUTBACK") ); -auto kw = deck.getKeyword("GCUTBACK"); -BOOST_CHECK_EQUAL( kw.size(), 2 ); -auto record = kw.getRecord(1); -BOOST_CHECK_EQUAL( record.getItem(5).get(0), 0.9 ); -BOOST_CHECK( !deck.hasKeyword("LANGMUIR") ); -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/PvtxTableTests.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/PvtxTableTests.cpp deleted file mode 100644 index 7f2732518a..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/PvtxTableTests.cpp +++ /dev/null @@ -1,219 +0,0 @@ -/* - Copyright (C) 2013 by Andreas Lauser - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#define BOOST_TEST_MODULE PvtxTableTests - -#include - -#include -#include -#include -#include - -// generic table classes -#include -#include -#include - -// keyword specific table classes -//#include -#include -#include -#include -#include -#include - -#include -#include - -#include -#include - -using namespace Opm; - -inline std::string prefix() { - return boost::unit_test::framework::master_test_suite().argv[1]; -} - -BOOST_AUTO_TEST_CASE( PvtxNumTables1 ) { - Parser parser; - Opm::filesystem::path deckFile(prefix() + "TABLES/PVTX1.DATA"); - auto deck = parser.parseFile(deckFile.string()); - BOOST_CHECK_EQUAL( PvtxTable::numTables( deck.getKeyword()) , 1); - - auto ranges = PvtxTable::recordRanges( deck.getKeyword() ); - auto range = ranges[0]; - BOOST_CHECK_EQUAL( range.first , 0 ); - BOOST_CHECK_EQUAL( range.second , 2 ); -} - - -BOOST_AUTO_TEST_CASE( PvtxNumTables2 ) { - Parser parser; - Opm::filesystem::path deckFile(prefix() + "TABLES/PVTO2.DATA"); - auto deck = parser.parseFile(deckFile.string()); - BOOST_CHECK_EQUAL( PvtxTable::numTables( deck.getKeyword()) , 3); - - auto ranges = PvtxTable::recordRanges( deck.getKeyword() ); - auto range1 = ranges[0]; - BOOST_CHECK_EQUAL( range1.first , 0 ); - BOOST_CHECK_EQUAL( range1.second , 41 ); - - auto range2 = ranges[1]; - BOOST_CHECK_EQUAL( range2.first , 42 ); - BOOST_CHECK_EQUAL( range2.second , 43 ); - - auto range3 = ranges[2]; - BOOST_CHECK_EQUAL( range3.first , 44 ); - BOOST_CHECK_EQUAL( range3.second , 46 ); -} - -BOOST_AUTO_TEST_CASE( PvtxNumTables3 ) { - const char *deckData = - "TABDIMS\n" - "1 2 /\n" - "\n" - "PVTO\n" - " 1 2 3 4" - " 5 6 7/\n" - " 8 9 10 11 /\n" - "/\n" - "12 13 14 15\n" - " 16 17 18/\n" - "19 20 21 22/\n" - "/\n"; - - Opm::Parser parser; - auto deck = parser.parseString(deckData); - - auto ranges = PvtxTable::recordRanges( deck.getKeyword() ); - BOOST_CHECK_EQUAL( 2 ,ranges.size() ); - - auto range1 = ranges[0]; - BOOST_CHECK_EQUAL( range1.first , 0 ); - BOOST_CHECK_EQUAL( range1.second , 2 ); - - auto range2 = ranges[1]; - BOOST_CHECK_EQUAL( range2.first , 3 ); - BOOST_CHECK_EQUAL( range2.second , 5 ); -} - - - -BOOST_AUTO_TEST_CASE( PVTOSaturatedTable ) { - Parser parser; - Opm::filesystem::path deckFile(prefix() + "TABLES/PVTX1.DATA"); - auto deck = parser.parseFile(deckFile.string()); - Opm::TableManager tables(deck); - const auto& pvtoTables = tables.getPvtoTables( ); - const auto& pvtoTable = pvtoTables[0]; - - const auto& saturatedTable = pvtoTable.getSaturatedTable( ); - BOOST_CHECK_EQUAL( saturatedTable.numColumns( ) , 4 ); - BOOST_CHECK_EQUAL( saturatedTable.numRows( ) , 2 ); - - BOOST_CHECK_EQUAL( saturatedTable.get(0 , 0) , 20.59 ); - BOOST_CHECK_EQUAL( saturatedTable.get(0 , 1) , 28.19 ); - - { - int num = 0; - UnitSystem units( UnitSystem::UnitType::UNIT_TYPE_METRIC ); - for (const auto& table : pvtoTable) { - if (num == 0) { - { - const auto& col = table.getColumn(0); - BOOST_CHECK_EQUAL( col.size() , 5 ); - BOOST_CHECK_CLOSE( col[0] , units.to_si( UnitSystem::measure::pressure , 50 ) , 1e-3); - BOOST_CHECK_CLOSE( col[4] , units.to_si( UnitSystem::measure::pressure , 150) , 1e-3); - } - { - const auto& col = table.getColumn(2); - BOOST_CHECK_CLOSE( col[0] , units.to_si( UnitSystem::measure::viscosity , 1.180) , 1e-3); - BOOST_CHECK_CLOSE( col[4] , units.to_si( UnitSystem::measure::viscosity , 1.453) , 1e-3); - } - } - - if (num == 1) { - const auto& col = table.getColumn(0); - BOOST_CHECK_EQUAL( col.size() , 5 ); - BOOST_CHECK_CLOSE( col[0] , units.to_si( UnitSystem::measure::pressure , 70 ), 1e-3); - BOOST_CHECK_CLOSE( col[4] , units.to_si( UnitSystem::measure::pressure , 170 ), 1e-3); - } - num++; - } - BOOST_CHECK_EQUAL( num , pvtoTable.size() ); - } -} - - -BOOST_AUTO_TEST_CASE( PVTGSaturatedTable ) { - Parser parser; - Opm::filesystem::path deckFile(prefix() + "TABLES/PVTX1.DATA"); - auto deck = parser.parseFile(deckFile.string()); - Opm::TableManager tables(deck); - const auto& pvtgTables = tables.getPvtgTables( ); - const auto& pvtgTable = pvtgTables[0]; - - const auto& saturatedTable = pvtgTable.getSaturatedTable( ); - BOOST_CHECK_EQUAL( saturatedTable.numColumns( ) , 4 ); - BOOST_CHECK_EQUAL( saturatedTable.numRows( ) , 2 ); - - BOOST_CHECK_EQUAL( saturatedTable.get(1 , 0) , 0.00002448 ); - BOOST_CHECK_EQUAL( saturatedTable.get(1 , 1) , 0.00000628 ); -} - -BOOST_AUTO_TEST_CASE( PVTWTable ) { - const std::string input = R"( - RUNSPEC - - DIMENS - 10 10 10 / - - TABDIMS - 1 2 / - - PROPS - - PVTW - 3600.0000 1.00341 3.00E-06 0.52341 0.00E-01 / - 3900 1 2.67E-06 0.56341 1.20E-07 / - )"; - - auto deck = Parser().parseString( input ); - TableManager tables( deck ); - - const auto& pvtw = tables.getPvtwTable(); - - const auto& rec1 = pvtw[0]; - const auto& rec2 = pvtw.at(1); - - BOOST_CHECK_THROW( pvtw.at(2), std::out_of_range ); - - BOOST_CHECK_CLOSE( 3600.00, rec1.reference_pressure / 1e5, 1e-5 ); - BOOST_CHECK_CLOSE( 1.00341, rec1.volume_factor, 1e-5 ); - BOOST_CHECK_CLOSE( 3.0e-06, rec1.compressibility * 1e5, 1e-5 ); - BOOST_CHECK_CLOSE( 0.52341, rec1.viscosity * 1e3, 1e-5 ); - BOOST_CHECK_CLOSE( 0.0e-01, rec1.viscosibility * 1e5, 1e-5 ); - - BOOST_CHECK_CLOSE( 3900, rec2.reference_pressure / 1e5, 1e-5 ); - BOOST_CHECK_CLOSE( 1.0, rec2.volume_factor, 1e-5 ); - BOOST_CHECK_CLOSE( 2.67e-06, rec2.compressibility * 1e5, 1e-5 ); - BOOST_CHECK_CLOSE( 0.56341, rec2.viscosity * 1e3, 1e-5 ); - BOOST_CHECK_CLOSE( 1.20e-07, rec2.viscosibility * 1e5, 1e-5 ); -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/RFTConfigTests.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/RFTConfigTests.cpp deleted file mode 100644 index ebe0c1cca2..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/RFTConfigTests.cpp +++ /dev/null @@ -1,877 +0,0 @@ -/* - Copyright 2020 Equnor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#define BOOST_TEST_MODULE RFTConfigTests - -#include - -#include -#include - -#include -#include -#include - -#include -#include -#include - -#include -#include - -namespace { - struct Setup - { - Setup(const ::Opm::Deck& deck); - - ::Opm::EclipseState es; - std::shared_ptr<::Opm::Python> python; - ::Opm::Schedule sched; - }; - - Setup::Setup(const ::Opm::Deck& deck) - : es (deck) - , python(std::make_shared<::Opm::Python>() ) - , sched(deck, es, python) - {} - - Setup parseDeckString(const std::string& input) - { - return { ::Opm::Parser{}.parseString(input) }; - } - - std::string basesetup_5x5x5() - { - return R"(RUNSPEC -DIMENS - 5 5 5 / - -WELLDIMS - 2 5 2 2 / - -TABDIMS -/ - -OIL -WATER -GAS -DISGAS -METRIC - -GRID -INIT - -DXV - 5*100.0 / -DYV - 5*100.0 / -DZV - 5*1.0 / -DEPTHZ - 36*2000.0 / - -PORO - 125*0.3 / - -PERMX - 125*100.0 / -COPY - 'PERMX' 'PERMY' / - 'PERMX' 'PERMZ' / -/ -MULTIPLY - 'PERMZ' 0.1 / -/ - -PROPS -DENSITY - 812.3 1024.5 1.0 / - -SCHEDULE -WELSPECS - 'I' 'I' 1 1 2000.0 WATER / - 'P' 'P' 5 5 2005.0 OIL / -/ - -COMPDAT - 'I' 0 0 1 5 'OPEN' 2* 0.5 / - 'P' 0 0 1 5 'OPEN' 2* 0.5 / -/ -)"; - } -} // Anonymous - -BOOST_AUTO_TEST_SUITE(No_RFT_Keywords) - -namespace { - - std::string simple_tstep_all_open() - { - return R"( -WCONINJE - 'I' 'WATER' 'OPEN' 'RATE' 1000.0 1* 500.0 / -/ - -WCONPROD - 'P' 'OPEN' 'ORAT' 750.0 750.0 10.0E+3 1250.0 1* 75.0 / -/ - -TSTEP --- 1 2 3 4 5 6 7 8 9 10..19 - 0.1 0.2 0.3 0.4 0.5 1.5 5 10 20 10*30 / - -)"; - } - - std::string simple_tstep_deferred_open() - { - return R"( -WCONINJE - 'I' 'WATER' 'SHUT' 'RATE' 1000.0 1* 500.0 / -/ - -WCONPROD - 'P' 'OPEN' 'ORAT' 750.0 750.0 10.0E+3 1250.0 1* 75.0 / -/ - -TSTEP --- 1 2 3 4 5 6 7 8 9 - 0.1 0.2 0.3 0.4 0.5 1.5 5 10 20 / - -WELOPEN - 'I' 'OPEN' / -/ - -TSTEP --- 10..19 - 10*30 / - -)"; - } -} - -BOOST_AUTO_TEST_CASE(Simple) -{ - const auto cse = parseDeckString(basesetup_5x5x5() + simple_tstep_all_open()); - const auto& rftcfg = cse.sched.rftConfig(); - - BOOST_CHECK_EQUAL(rftcfg.timeMap().size(), std::size_t(20)); - BOOST_CHECK_EQUAL(rftcfg.firstRFTOutput(), std::size_t(20)); - - for (auto nstep = std::size_t(20), step = 0*nstep; step < nstep; ++step) { - BOOST_CHECK_MESSAGE(!rftcfg.active(step), "RFT Config must be Inactive"); - - BOOST_CHECK_MESSAGE(!rftcfg.getWellOpenRFT("I", step), - R"(Well "I" must not have a Well Open RFT request")"); - - BOOST_CHECK_MESSAGE(!rftcfg.getWellOpenRFT("P", step), - R"(Well "P" must not have a Well Open RFT request")"); - } -} - -BOOST_AUTO_TEST_CASE(Simple_Deferred_Open) -{ - const auto cse = parseDeckString(basesetup_5x5x5() + simple_tstep_deferred_open()); - const auto& rftcfg = cse.sched.rftConfig(); - - BOOST_CHECK_EQUAL(rftcfg.timeMap().size(), std::size_t(20)); - BOOST_CHECK_EQUAL(rftcfg.firstRFTOutput(), std::size_t(20)); - - for (auto nstep = std::size_t(20), step = 0*nstep; step < nstep; ++step) { - BOOST_CHECK_MESSAGE(!rftcfg.active(step), "RFT Config must be Inactive"); - - // WELOPEN does not imply RFT output - BOOST_CHECK_MESSAGE(!rftcfg.getWellOpenRFT("I", step), - R"(Well "I" must not have a Well Open RFT request")"); - - BOOST_CHECK_MESSAGE(!rftcfg.getWellOpenRFT("P", step), - R"(Well "P" must not have a Well Open RFT request")"); - } -} - -BOOST_AUTO_TEST_SUITE_END() // No_RFT_Keywords - -// ===================================================================== - -BOOST_AUTO_TEST_SUITE(WRFT) - -namespace { - - std::string simple_tstep_all_open() - { - return R"( -WCONINJE - 'I' 'WATER' 'OPEN' 'RATE' 1000.0 1* 500.0 / -/ - -WCONPROD - 'P' 'OPEN' 'ORAT' 750.0 750.0 10.0E+3 1250.0 1* 75.0 / -/ - -TSTEP --- 1 2 3 4 (sim step = 0..3) - 0.1 0.2 0.3 0.4 / - -WRFT --- Request RFT output for all wells SUBSEQUENTLY opened. -/ - -TSTEP --- 5..7 (sim step = 4..6) - 3*30 / - -WRFT --- Request RFT output for 'P' and all wells subsequently opened - 'P' / -/ - -TSTEP --- 8..10 (sim step = 7..9) - 3*30 / -)"; - } - - std::string simple_tstep_deferred_open() - { - return R"( -WCONINJE - 'I' 'WATER' 'SHUT' 'RATE' 1000.0 1* 500.0 / -/ - -WCONPROD - 'P' 'OPEN' 'ORAT' 750.0 750.0 10.0E+3 1250.0 1* 75.0 / -/ - -TSTEP --- 1 2 3 4 (sim step = 0..3) - 0.1 0.2 0.3 0.4 / - -WRFT --- Request RFT output for all wells SUBSEQUENTLY opened. -/ - -TSTEP --- 5..7 (sim step = 4..6) - 3*30 / - -WELOPEN - 'I' 'OPEN' / -/ - -TSTEP --- 8..10 (sim step = 7..9) - 3*30 / - -WRFT --- Request RFT output for 'P' and all wells subsequently opened - 'P' / -/ - -TSTEP --- 11..13 (sim step = 10..12) - 3*30 / - -)"; - } -} - -BOOST_AUTO_TEST_CASE(Simple) -{ - const auto cse = parseDeckString(basesetup_5x5x5() + simple_tstep_all_open()); - const auto& rftcfg = cse.sched.rftConfig(); - - BOOST_CHECK_EQUAL(rftcfg.timeMap().size(), std::size_t(11)); - BOOST_CHECK_EQUAL(rftcfg.firstRFTOutput(), std::size_t( 7)); - - BOOST_CHECK_MESSAGE(!rftcfg.rft("P", 0), R"(Should NOT Output RFT Data for "P" at Step 0)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("P", 1), R"(Should NOT Output RFT Data for "P" at Step 1)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("P", 2), R"(Should NOT Output RFT Data for "P" at Step 2)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("P", 3), R"(Should NOT Output RFT Data for "P" at Step 3)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("P", 4), R"(Should NOT Output RFT Data for "P" at Step 4)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("P", 5), R"(Should NOT Output RFT Data for "P" at Step 5)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("P", 6), R"(Should NOT Output RFT Data for "P" at Step 6)"); - BOOST_CHECK_MESSAGE( rftcfg.rft("P", 7), R"(Should Output RFT Data for "P" at Step 7)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("P", 8), R"(Should NOT Output RFT Data for "P" at Step 8)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("P", 9), R"(Should NOT Output RFT Data for "P" at Step 9)"); - - BOOST_CHECK_MESSAGE(!rftcfg.rft("I", 0), R"(Should NOT Output RFT Data for "I" at Step 0)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("I", 1), R"(Should NOT Output RFT Data for "I" at Step 1)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("I", 2), R"(Should NOT Output RFT Data for "I" at Step 2)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("I", 3), R"(Should NOT Output RFT Data for "I" at Step 3)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("I", 4), R"(Should NOT Output RFT Data for "I" at Step 4)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("I", 5), R"(Should NOT Output RFT Data for "I" at Step 5)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("I", 6), R"(Should NOT Output RFT Data for "I" at Step 6)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("I", 7), R"(Should NOT Output RFT Data for "I" at Step 7)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("I", 8), R"(Should NOT Output RFT Data for "I" at Step 8)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("I", 9), R"(Should NOT Output RFT Data for "I" at Step 9)"); - - BOOST_CHECK_MESSAGE(!rftcfg.active(0), "RFT Config must be Inactive at Step 0"); - BOOST_CHECK_MESSAGE(!rftcfg.active(1), "RFT Config must be Inactive at Step 1"); - BOOST_CHECK_MESSAGE(!rftcfg.active(2), "RFT Config must be Inactive at Step 2"); - BOOST_CHECK_MESSAGE(!rftcfg.active(3), "RFT Config must be Inactive at Step 3"); - BOOST_CHECK_MESSAGE(!rftcfg.active(4), "RFT Config must be Inactive at Step 4"); - BOOST_CHECK_MESSAGE(!rftcfg.active(5), "RFT Config must be Inactive at Step 5"); - BOOST_CHECK_MESSAGE(!rftcfg.active(6), "RFT Config must be Inactive at Step 6"); - BOOST_CHECK_MESSAGE( rftcfg.active(7), "RFT Config must be ACTIVE at Step 7"); - BOOST_CHECK_MESSAGE(!rftcfg.active(8), "RFT Config must be Inactive at Step 8"); - BOOST_CHECK_MESSAGE(!rftcfg.active(9), "RFT Config must be Inactive at Step 9"); - - BOOST_CHECK_MESSAGE(!rftcfg.getWellOpenRFT("I", 0), - R"(Well "I" must not have a Well Open RFT request at step 0")"); - BOOST_CHECK_MESSAGE(!rftcfg.getWellOpenRFT("I", 1), - R"(Well "I" must not have a Well Open RFT request at step 1")"); - BOOST_CHECK_MESSAGE(!rftcfg.getWellOpenRFT("I", 2), - R"(Well "I" must not have a Well Open RFT request at step 2")"); - BOOST_CHECK_MESSAGE(!rftcfg.getWellOpenRFT("I", 3), - R"(Well "I" must not have a Well Open RFT request at step 3")"); - BOOST_CHECK_MESSAGE(rftcfg.getWellOpenRFT("I", 4), - R"(Well "I" must have a Well Open RFT request at step 4")"); - BOOST_CHECK_MESSAGE(rftcfg.getWellOpenRFT("I", 5), - R"(Well "I" must have a Well Open RFT request at step 5")"); - BOOST_CHECK_MESSAGE(rftcfg.getWellOpenRFT("I", 6), - R"(Well "I" must have a Well Open RFT request at step 6")"); - BOOST_CHECK_MESSAGE(rftcfg.getWellOpenRFT("I", 7), - R"(Well "I" must have a Well Open RFT request at step 7")"); - BOOST_CHECK_MESSAGE(rftcfg.getWellOpenRFT("I", 8), - R"(Well "I" must have a Well Open RFT request at step 8")"); - BOOST_CHECK_MESSAGE(rftcfg.getWellOpenRFT("I", 9), - R"(Well "I" must have a Well Open RFT request at step 9")"); - - BOOST_CHECK_MESSAGE(!rftcfg.getWellOpenRFT("P", 0), - R"(Well "P" must not have a Well Open RFT request at step 0")"); - BOOST_CHECK_MESSAGE(!rftcfg.getWellOpenRFT("P", 1), - R"(Well "P" must not have a Well Open RFT request at step 1")"); - BOOST_CHECK_MESSAGE(!rftcfg.getWellOpenRFT("P", 2), - R"(Well "P" must not have a Well Open RFT request at step 2")"); - BOOST_CHECK_MESSAGE(!rftcfg.getWellOpenRFT("P", 3), - R"(Well "P" must not have a Well Open RFT request at step 3")"); - BOOST_CHECK_MESSAGE(rftcfg.getWellOpenRFT("P", 4), - R"(Well "P" must have a Well Open RFT request at step 4")"); - BOOST_CHECK_MESSAGE(rftcfg.getWellOpenRFT("P", 5), - R"(Well "P" must have a Well Open RFT request at step 5")"); - BOOST_CHECK_MESSAGE(rftcfg.getWellOpenRFT("P", 6), - R"(Well "P" must have a Well Open RFT request at step 6")"); - BOOST_CHECK_MESSAGE(rftcfg.getWellOpenRFT("P", 7), - R"(Well "P" must have a Well Open RFT request at step 7")"); - BOOST_CHECK_MESSAGE(rftcfg.getWellOpenRFT("P", 8), - R"(Well "P" must have a Well Open RFT request at step 8")"); - BOOST_CHECK_MESSAGE(rftcfg.getWellOpenRFT("P", 9), - R"(Well "P" must have a Well Open RFT request at step 9")"); -} - -BOOST_AUTO_TEST_CASE(Deferred_Open) -{ - const auto cse = parseDeckString(basesetup_5x5x5() + simple_tstep_deferred_open()); - const auto& rftcfg = cse.sched.rftConfig(); - - BOOST_CHECK_EQUAL(rftcfg.timeMap().size(), std::size_t(14)); - BOOST_CHECK_EQUAL(rftcfg.firstRFTOutput(), std::size_t( 7)); - - BOOST_CHECK_MESSAGE(!rftcfg.rft("P", 0), R"(Should NOT Output RFT Data for "P" at Step 0)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("P", 1), R"(Should NOT Output RFT Data for "P" at Step 1)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("P", 2), R"(Should NOT Output RFT Data for "P" at Step 2)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("P", 3), R"(Should NOT Output RFT Data for "P" at Step 3)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("P", 4), R"(Should NOT Output RFT Data for "P" at Step 4)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("P", 5), R"(Should NOT Output RFT Data for "P" at Step 5)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("P", 6), R"(Should NOT Output RFT Data for "P" at Step 6)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("P", 7), R"(Should NOT Output RFT Data for "P" at Step 7)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("P", 8), R"(Should NOT Output RFT Data for "P" at Step 8)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("P", 9), R"(Should NOT Output RFT Data for "P" at Step 9)"); - BOOST_CHECK_MESSAGE( rftcfg.rft("P", 10), R"(Should Output RFT Data for "P" at Step 10)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("P", 11), R"(Should NOT Output RFT Data for "P" at Step 11)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("P", 12), R"(Should NOT Output RFT Data for "P" at Step 12)"); - - BOOST_CHECK_MESSAGE(!rftcfg.rft("I", 0), R"(Should NOT Output RFT Data for "I" at Step 0)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("I", 1), R"(Should NOT Output RFT Data for "I" at Step 1)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("I", 2), R"(Should NOT Output RFT Data for "I" at Step 2)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("I", 3), R"(Should NOT Output RFT Data for "I" at Step 3)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("I", 4), R"(Should NOT Output RFT Data for "I" at Step 4)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("I", 5), R"(Should NOT Output RFT Data for "I" at Step 5)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("I", 6), R"(Should NOT Output RFT Data for "I" at Step 6)"); - BOOST_CHECK_MESSAGE( rftcfg.rft("I", 7), R"(Should Output RFT Data for "I" at Step 7)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("I", 8), R"(Should NOT Output RFT Data for "I" at Step 8)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("I", 9), R"(Should NOT Output RFT Data for "I" at Step 9)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("I", 10), R"(Should NOT Output RFT Data for "I" at Step 9)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("I", 11), R"(Should NOT Output RFT Data for "I" at Step 9)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("I", 12), R"(Should NOT Output RFT Data for "I" at Step 9)"); - - BOOST_CHECK_MESSAGE(!rftcfg.active( 0), "RFT Config must be Inactive at Step 0"); - BOOST_CHECK_MESSAGE(!rftcfg.active( 1), "RFT Config must be Inactive at Step 1"); - BOOST_CHECK_MESSAGE(!rftcfg.active( 2), "RFT Config must be Inactive at Step 2"); - BOOST_CHECK_MESSAGE(!rftcfg.active( 3), "RFT Config must be Inactive at Step 3"); - BOOST_CHECK_MESSAGE(!rftcfg.active( 4), "RFT Config must be Inactive at Step 4"); - BOOST_CHECK_MESSAGE(!rftcfg.active( 5), "RFT Config must be Inactive at Step 5"); - BOOST_CHECK_MESSAGE(!rftcfg.active( 6), "RFT Config must be Inactive at Step 6"); - BOOST_CHECK_MESSAGE( rftcfg.active( 7), "RFT Config must be ACTIVE at Step 7"); - BOOST_CHECK_MESSAGE(!rftcfg.active( 8), "RFT Config must be Inactive at Step 8"); - BOOST_CHECK_MESSAGE(!rftcfg.active( 9), "RFT Config must be Inactive at Step 9"); - BOOST_CHECK_MESSAGE( rftcfg.active(10), "RFT Config must be ACTIVE at Step 10"); - BOOST_CHECK_MESSAGE(!rftcfg.active(11), "RFT Config must be Inactive at Step 11"); - BOOST_CHECK_MESSAGE(!rftcfg.active(12), "RFT Config must be Inactive at Step 12"); - - BOOST_CHECK_MESSAGE(!rftcfg.getWellOpenRFT("I", 0), - R"(Well "I" must not have a Well Open RFT request at step 0")"); - BOOST_CHECK_MESSAGE(!rftcfg.getWellOpenRFT("I", 1), - R"(Well "I" must not have a Well Open RFT request at step 1")"); - BOOST_CHECK_MESSAGE(!rftcfg.getWellOpenRFT("I", 2), - R"(Well "I" must not have a Well Open RFT request at step 2")"); - BOOST_CHECK_MESSAGE(!rftcfg.getWellOpenRFT("I", 3), - R"(Well "I" must not have a Well Open RFT request at step 3")"); - BOOST_CHECK_MESSAGE(rftcfg.getWellOpenRFT("I", 4), - R"(Well "I" must have a Well Open RFT request at step 4")"); - BOOST_CHECK_MESSAGE(rftcfg.getWellOpenRFT("I", 5), - R"(Well "I" must have a Well Open RFT request at step 5")"); - BOOST_CHECK_MESSAGE(rftcfg.getWellOpenRFT("I", 6), - R"(Well "I" must have a Well Open RFT request at step 6")"); - BOOST_CHECK_MESSAGE(rftcfg.getWellOpenRFT("I", 7), - R"(Well "I" must have a Well Open RFT request at step 7")"); - BOOST_CHECK_MESSAGE(rftcfg.getWellOpenRFT("I", 8), - R"(Well "I" must have a Well Open RFT request at step 8")"); - BOOST_CHECK_MESSAGE(rftcfg.getWellOpenRFT("I", 9), - R"(Well "I" must have a Well Open RFT request at step 9")"); - BOOST_CHECK_MESSAGE(rftcfg.getWellOpenRFT("I", 10), - R"(Well "I" must have a Well Open RFT request at step 10")"); - BOOST_CHECK_MESSAGE(rftcfg.getWellOpenRFT("I", 11), - R"(Well "I" must have a Well Open RFT request at step 11")"); - BOOST_CHECK_MESSAGE(rftcfg.getWellOpenRFT("I", 12), - R"(Well "I" must have a Well Open RFT request at step 12")"); - - BOOST_CHECK_MESSAGE(!rftcfg.getWellOpenRFT("P", 0), - R"(Well "P" must not have a Well Open RFT request at step 0")"); - BOOST_CHECK_MESSAGE(!rftcfg.getWellOpenRFT("P", 1), - R"(Well "P" must not have a Well Open RFT request at step 1")"); - BOOST_CHECK_MESSAGE(!rftcfg.getWellOpenRFT("P", 2), - R"(Well "P" must not have a Well Open RFT request at step 2")"); - BOOST_CHECK_MESSAGE(!rftcfg.getWellOpenRFT("P", 3), - R"(Well "P" must not have a Well Open RFT request at step 3")"); - BOOST_CHECK_MESSAGE(rftcfg.getWellOpenRFT("P", 4), - R"(Well "P" must have a Well Open RFT request at step 4")"); - BOOST_CHECK_MESSAGE(rftcfg.getWellOpenRFT("P", 5), - R"(Well "P" must have a Well Open RFT request at step 5")"); - BOOST_CHECK_MESSAGE(rftcfg.getWellOpenRFT("P", 6), - R"(Well "P" must have a Well Open RFT request at step 6")"); - BOOST_CHECK_MESSAGE(rftcfg.getWellOpenRFT("P", 7), - R"(Well "P" must have a Well Open RFT request at step 7")"); - BOOST_CHECK_MESSAGE(rftcfg.getWellOpenRFT("P", 8), - R"(Well "P" must have a Well Open RFT request at step 8")"); - BOOST_CHECK_MESSAGE(rftcfg.getWellOpenRFT("P", 9), - R"(Well "P" must have a Well Open RFT request at step 9")"); - BOOST_CHECK_MESSAGE(rftcfg.getWellOpenRFT("P", 10), - R"(Well "P" must have a Well Open RFT request at step 10")"); - BOOST_CHECK_MESSAGE(rftcfg.getWellOpenRFT("P", 11), - R"(Well "P" must have a Well Open RFT request at step 11")"); - BOOST_CHECK_MESSAGE(rftcfg.getWellOpenRFT("P", 12), - R"(Well "P" must have a Well Open RFT request at step 12")"); -} - -BOOST_AUTO_TEST_SUITE_END() // WRFT -// ===================================================================== - -BOOST_AUTO_TEST_SUITE(WRFTPLT) - -namespace { - - std::string simple_tstep_all_open() - { - return R"( -WCONINJE - 'I' 'WATER' 'OPEN' 'RATE' 1000.0 1* 500.0 / -/ - -WCONPROD - 'P' 'OPEN' 'ORAT' 750.0 750.0 10.0E+3 1250.0 1* 75.0 / -/ - -TSTEP --- 1 2 3 4 (sim step = 0..3) - 0.1 0.2 0.3 0.4 / - -WRFTPLT - 'P' FOPN / -/ - -TSTEP --- 5..7 (sim step = 4..6) - 3*30 / - -WRFTPLT - 'P' 1* YES / - 'I' REPT / -/ - -TSTEP --- 8..10 (sim step = 7..9) - 3*30 / - -WRFTPLT - 'P' YES / - 'I' NO YES / -/ - -TSTEP --- 11..13 (sim step = 10..12) - 3*30 / - -WRFTPLT - '*' TIMESTEP / -/ - -TSTEP --- 14..15 (sim step = 13..14) - 30 30 / -)"; - } - - std::string simple_tstep_deferred_open() - { - return R"( -WCONINJE - 'I' 'WATER' 'SHUT' 'RATE' 1000.0 1* 500.0 / -/ - -WCONPROD - 'P' 'OPEN' 'ORAT' 500.0 500.0 10.0E+3 1250.0 1* 75.0 / -/ - -TSTEP --- 1 2 3 4 (sim step = 0..3) - 0.1 0.2 0.3 0.4 / - -WRFTPLT - '*' FOPN / -/ - -TSTEP --- 5..7 (sim step = 4..6) - 3*30 / - -WELOPEN - 'I' 'OPEN' / -/ - -TSTEP --- 8..10 (sim step = 7..9) - 3*30 / - -WRFTPLT - 'P' 1* YES / - 'I' REPT / -/ - -WELSPECS - 'P2' 'P' 1 5 2005.0 OIL / -/ - -COMPDAT - 'P2' 0 0 1 5 'OPEN' 2* 0.5 / -/ - -TSTEP --- 11..13 (sim step = 10..12) - 3*30 / - -WRFTPLT - 'P' YES / - 'I' NO YES / -/ - -TSTEP --- 14..16 (sim step = 13..15) - 3*30 / - -WCONPROD - 'P2' 'OPEN' 'ORAT' 250.0 250.0 10.0E+3 1250.0 1* 75.0 / -/ - -TSTEP --- 17..18 (sim step = 16..17) - 30 30 / - -WRFTPLT - '*' TIMESTEP / -/ - -TSTEP --- 19..20 (sim step = 18..19) - 30 30 / -)"; - } -} - -BOOST_AUTO_TEST_CASE(All_Open) -{ - const auto cse = parseDeckString(basesetup_5x5x5() + simple_tstep_all_open()); - const auto& rftcfg = cse.sched.rftConfig(); - - BOOST_CHECK_EQUAL(rftcfg.timeMap().size(), std::size_t(16)); - BOOST_CHECK_EQUAL(rftcfg.firstRFTOutput(), std::size_t( 4)); - - BOOST_CHECK_MESSAGE(!rftcfg.rft("P", 0), R"(Should NOT Output RFT Data for "P" at Step 0)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("P", 1), R"(Should NOT Output RFT Data for "P" at Step 1)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("P", 2), R"(Should NOT Output RFT Data for "P" at Step 2)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("P", 3), R"(Should NOT Output RFT Data for "P" at Step 3)"); - BOOST_CHECK_MESSAGE( rftcfg.rft("P", 4), R"(Should Output RFT Data for "P" at Step 4)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("P", 5), R"(Should NOT Output RFT Data for "P" at Step 5)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("P", 6), R"(Should NOT Output RFT Data for "P" at Step 6)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("P", 7), R"(Should NOT Output RFT Data for "P" at Step 7)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("P", 8), R"(Should NOT Output RFT Data for "P" at Step 8)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("P", 9), R"(Should NOT Output RFT Data for "P" at Step 9)"); - BOOST_CHECK_MESSAGE( rftcfg.rft("P", 10), R"(Should Output RFT Data for "P" at Step 10)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("P", 11), R"(Should NOT Output RFT Data for "P" at Step 11)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("P", 12), R"(Should NOT Output RFT Data for "P" at Step 12)"); - BOOST_CHECK_MESSAGE( rftcfg.rft("P", 13), R"(Should Output RFT Data for "P" at Step 13)"); - BOOST_CHECK_MESSAGE( rftcfg.rft("P", 14), R"(Should Output RFT Data for "P" at Step 14)"); - BOOST_CHECK_MESSAGE( rftcfg.rft("P", 15), R"(Should Output RFT Data for "P" at Step 15)"); - - BOOST_CHECK_MESSAGE(!rftcfg.plt("P", 0), R"(Should NOT Output PLT Data for "P" at Step 0)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("P", 1), R"(Should NOT Output PLT Data for "P" at Step 1)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("P", 2), R"(Should NOT Output PLT Data for "P" at Step 2)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("P", 3), R"(Should NOT Output PLT Data for "P" at Step 3)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("P", 4), R"(Should NOT Output PLT Data for "P" at Step 4)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("P", 5), R"(Should NOT Output PLT Data for "P" at Step 5)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("P", 6), R"(Should NOT Output PLT Data for "P" at Step 6)"); - BOOST_CHECK_MESSAGE( rftcfg.plt("P", 7), R"(Should Output PLT Data for "P" at Step 7)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("P", 8), R"(Should NOT Output PLT Data for "P" at Step 8)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("P", 9), R"(Should NOT Output PLT Data for "P" at Step 9)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("P", 10), R"(Should NOT Output PLT Data for "P" at Step 10)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("P", 11), R"(Should NOT Output PLT Data for "P" at Step 11)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("P", 12), R"(Should NOT Output PLT Data for "P" at Step 12)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("P", 13), R"(Should NOT Output PLT Data for "P" at Step 13)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("P", 14), R"(Should NOT Output PLT Data for "P" at Step 14)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("P", 15), R"(Should NOT Output PLT Data for "P" at Step 15)"); - - BOOST_CHECK_MESSAGE(!rftcfg.rft("I", 0), R"(Should NOT Output RFT Data for "I" at Step 0)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("I", 1), R"(Should NOT Output RFT Data for "I" at Step 1)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("I", 2), R"(Should NOT Output RFT Data for "I" at Step 2)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("I", 3), R"(Should NOT Output RFT Data for "I" at Step 3)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("I", 4), R"(Should NOT Output RFT Data for "I" at Step 4)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("I", 5), R"(Should NOT Output RFT Data for "I" at Step 5)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("I", 6), R"(Should NOT Output RFT Data for "I" at Step 6)"); - BOOST_CHECK_MESSAGE( rftcfg.rft("I", 7), R"(Should Output RFT Data for "I" at Step 7)"); - BOOST_CHECK_MESSAGE( rftcfg.rft("I", 8), R"(Should Output RFT Data for "I" at Step 8)"); - BOOST_CHECK_MESSAGE( rftcfg.rft("I", 9), R"(Should Output RFT Data for "I" at Step 9)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("I", 10), R"(Should NOT Output RFT Data for "I" at Step 10)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("I", 11), R"(Should NOT Output RFT Data for "I" at Step 11)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("I", 12), R"(Should NOT Output RFT Data for "I" at Step 12)"); - BOOST_CHECK_MESSAGE( rftcfg.rft("I", 13), R"(Should Output RFT Data for "I" at Step 13)"); - BOOST_CHECK_MESSAGE( rftcfg.rft("I", 14), R"(Should Output RFT Data for "I" at Step 14)"); - BOOST_CHECK_MESSAGE( rftcfg.rft("I", 15), R"(Should Output RFT Data for "I" at Step 15)"); - - BOOST_CHECK_MESSAGE(!rftcfg.plt("I", 0), R"(Should NOT Output PLT Data for "I" at Step 0)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("I", 1), R"(Should NOT Output PLT Data for "I" at Step 1)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("I", 2), R"(Should NOT Output PLT Data for "I" at Step 2)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("I", 3), R"(Should NOT Output PLT Data for "I" at Step 3)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("I", 4), R"(Should NOT Output PLT Data for "I" at Step 4)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("I", 5), R"(Should NOT Output PLT Data for "I" at Step 5)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("I", 6), R"(Should NOT Output PLT Data for "I" at Step 6)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("I", 7), R"(Should NOT Output PLT Data for "I" at Step 7)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("I", 8), R"(Should NOT Output PLT Data for "I" at Step 8)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("I", 9), R"(Should NOT Output PLT Data for "I" at Step 9)"); - BOOST_CHECK_MESSAGE( rftcfg.plt("I", 10), R"(Should Output PLT Data for "I" at Step 10)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("I", 11), R"(Should NOT Output PLT Data for "I" at Step 11)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("I", 12), R"(Should NOT Output PLT Data for "I" at Step 12)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("I", 13), R"(Should NOT Output PLT Data for "I" at Step 13)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("I", 14), R"(Should NOT Output PLT Data for "I" at Step 14)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("I", 15), R"(Should NOT Output PLT Data for "I" at Step 15)"); - - BOOST_CHECK_MESSAGE(!rftcfg.active( 0), R"(RFT Config must be Inactive at Step 0)"); - BOOST_CHECK_MESSAGE(!rftcfg.active( 1), R"(RFT Config must be Inactive at Step 1)"); - BOOST_CHECK_MESSAGE(!rftcfg.active( 2), R"(RFT Config must be Inactive at Step 2)"); - BOOST_CHECK_MESSAGE(!rftcfg.active( 3), R"(RFT Config must be Inactive at Step 3)"); - BOOST_CHECK_MESSAGE( rftcfg.active( 4), R"(RFT Config must be Active at Step 4)"); - BOOST_CHECK_MESSAGE(!rftcfg.active( 5), R"(RFT Config must be Inactive at Step 5)"); - BOOST_CHECK_MESSAGE(!rftcfg.active( 6), R"(RFT Config must be Inactive at Step 6)"); - BOOST_CHECK_MESSAGE( rftcfg.active( 7), R"(RFT Config must be Active at Step 7)"); - BOOST_CHECK_MESSAGE( rftcfg.active( 8), R"(RFT Config must be Active at Step 8)"); - BOOST_CHECK_MESSAGE( rftcfg.active( 9), R"(RFT Config must be Active at Step 9)"); - BOOST_CHECK_MESSAGE( rftcfg.active(10), R"(RFT Config must be Active at Step 10)"); - BOOST_CHECK_MESSAGE(!rftcfg.active(11), R"(RFT Config must be Inactive at Step 11)"); - BOOST_CHECK_MESSAGE(!rftcfg.active(12), R"(RFT Config must be Inactive at Step 12)"); - BOOST_CHECK_MESSAGE( rftcfg.active(13), R"(RFT Config must be Active at Step 13)"); - BOOST_CHECK_MESSAGE( rftcfg.active(14), R"(RFT Config must be Active at Step 14)"); - BOOST_CHECK_MESSAGE( rftcfg.active(15), R"(RFT Config must be Active at Step 15)"); -} - -BOOST_AUTO_TEST_CASE(Deferred_Open) -{ - const auto cse = parseDeckString(basesetup_5x5x5() + simple_tstep_deferred_open()); - const auto& rftcfg = cse.sched.rftConfig(); - - BOOST_CHECK_EQUAL(rftcfg.timeMap().size(), std::size_t(21)); - BOOST_CHECK_EQUAL(rftcfg.firstRFTOutput(), std::size_t( 4)); - - BOOST_CHECK_MESSAGE(!rftcfg.rft("P", 0), R"(Should NOT Output RFT Data for "P" at Step 0)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("P", 1), R"(Should NOT Output RFT Data for "P" at Step 1)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("P", 2), R"(Should NOT Output RFT Data for "P" at Step 2)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("P", 3), R"(Should NOT Output RFT Data for "P" at Step 3)"); - BOOST_CHECK_MESSAGE( rftcfg.rft("P", 4), R"(Should Output RFT Data for "P" at Step 4)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("P", 5), R"(Should NOT Output RFT Data for "P" at Step 5)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("P", 6), R"(Should NOT Output RFT Data for "P" at Step 6)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("P", 7), R"(Should NOT Output RFT Data for "P" at Step 7)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("P", 8), R"(Should NOT Output RFT Data for "P" at Step 8)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("P", 9), R"(Should NOT Output RFT Data for "P" at Step 9)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("P", 10), R"(Should NOT Output RFT Data for "P" at Step 10)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("P", 11), R"(Should NOT Output RFT Data for "P" at Step 11)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("P", 12), R"(Should NOT Output RFT Data for "P" at Step 12)"); - BOOST_CHECK_MESSAGE( rftcfg.rft("P", 13), R"(Should Output RFT Data for "P" at Step 13)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("P", 14), R"(Should NOT Output RFT Data for "P" at Step 14)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("P", 15), R"(Should NOT Output RFT Data for "P" at Step 15)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("P", 16), R"(Should NOT Output RFT Data for "P" at Step 16)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("P", 17), R"(Should NOT Output RFT Data for "P" at Step 17)"); - BOOST_CHECK_MESSAGE( rftcfg.rft("P", 18), R"(Should Output RFT Data for "P" at Step 18)"); - BOOST_CHECK_MESSAGE( rftcfg.rft("P", 19), R"(Should Output RFT Data for "P" at Step 19)"); - BOOST_CHECK_MESSAGE( rftcfg.rft("P", 20), R"(Should Output RFT Data for "P" at Step 20)"); - - BOOST_CHECK_MESSAGE(!rftcfg.plt("P", 0), R"(Should NOT Output PLT Data for "P" at Step 0)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("P", 1), R"(Should NOT Output PLT Data for "P" at Step 1)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("P", 2), R"(Should NOT Output PLT Data for "P" at Step 2)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("P", 3), R"(Should NOT Output PLT Data for "P" at Step 3)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("P", 4), R"(Should NOT Output PLT Data for "P" at Step 4)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("P", 5), R"(Should NOT Output PLT Data for "P" at Step 5)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("P", 6), R"(Should NOT Output PLT Data for "P" at Step 6)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("P", 7), R"(Should NOT Output PLT Data for "P" at Step 7)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("P", 8), R"(Should NOT Output PLT Data for "P" at Step 8)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("P", 9), R"(Should NOT Output PLT Data for "P" at Step 9)"); - BOOST_CHECK_MESSAGE( rftcfg.plt("P", 10), R"(Should Output PLT Data for "P" at Step 10)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("P", 11), R"(Should NOT Output PLT Data for "P" at Step 11)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("P", 12), R"(Should NOT Output PLT Data for "P" at Step 12)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("P", 13), R"(Should NOT Output PLT Data for "P" at Step 13)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("P", 14), R"(Should NOT Output PLT Data for "P" at Step 14)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("P", 15), R"(Should NOT Output PLT Data for "P" at Step 15)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("P", 16), R"(Should NOT Output PLT Data for "P" at Step 16)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("P", 17), R"(Should NOT Output PLT Data for "P" at Step 17)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("P", 18), R"(Should NOT Output PLT Data for "P" at Step 18)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("P", 19), R"(Should NOT Output PLT Data for "P" at Step 19)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("P", 20), R"(Should NOT Output PLT Data for "P" at Step 20)"); - - BOOST_CHECK_MESSAGE(!rftcfg.rft("I", 0), R"(Should NOT Output RFT Data for "I" at Step 0)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("I", 1), R"(Should NOT Output RFT Data for "I" at Step 1)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("I", 2), R"(Should NOT Output RFT Data for "I" at Step 2)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("I", 3), R"(Should NOT Output RFT Data for "I" at Step 3)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("I", 4), R"(Should NOT Output RFT Data for "I" at Step 4)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("I", 5), R"(Should NOT Output RFT Data for "I" at Step 5)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("I", 6), R"(Should NOT Output RFT Data for "I" at Step 6)"); - BOOST_CHECK_MESSAGE( rftcfg.rft("I", 7), R"(Should Output RFT Data for "I" at Step 7)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("I", 8), R"(Should NOT Output RFT Data for "I" at Step 8)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("I", 9), R"(Should NOT Output RFT Data for "I" at Step 9)"); - BOOST_CHECK_MESSAGE( rftcfg.rft("I", 10), R"(Should Output RFT Data for "I" at Step 10)"); - BOOST_CHECK_MESSAGE( rftcfg.rft("I", 11), R"(Should Output RFT Data for "I" at Step 11)"); - BOOST_CHECK_MESSAGE( rftcfg.rft("I", 12), R"(Should Output RFT Data for "I" at Step 12)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("I", 13), R"(Should Output RFT Data for "I" at Step 13)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("I", 14), R"(Should NOT Output RFT Data for "I" at Step 14)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("I", 15), R"(Should NOT Output RFT Data for "I" at Step 15)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("I", 16), R"(Should NOT Output RFT Data for "I" at Step 16)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("I", 17), R"(Should NOT Output RFT Data for "I" at Step 17)"); - BOOST_CHECK_MESSAGE( rftcfg.rft("I", 18), R"(Should Output RFT Data for "I" at Step 18)"); - BOOST_CHECK_MESSAGE( rftcfg.rft("I", 19), R"(Should Output RFT Data for "I" at Step 19)"); - BOOST_CHECK_MESSAGE( rftcfg.rft("I", 20), R"(Should Output RFT Data for "I" at Step 20)"); - - BOOST_CHECK_MESSAGE(!rftcfg.plt("I", 0), R"(Should NOT Output PLT Data for "I" at Step 0)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("I", 1), R"(Should NOT Output PLT Data for "I" at Step 1)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("I", 2), R"(Should NOT Output PLT Data for "I" at Step 2)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("I", 3), R"(Should NOT Output PLT Data for "I" at Step 3)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("I", 4), R"(Should NOT Output PLT Data for "I" at Step 4)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("I", 5), R"(Should NOT Output PLT Data for "I" at Step 5)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("I", 6), R"(Should NOT Output PLT Data for "I" at Step 6)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("I", 7), R"(Should NOT Output PLT Data for "I" at Step 7)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("I", 8), R"(Should NOT Output PLT Data for "I" at Step 8)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("I", 9), R"(Should NOT Output PLT Data for "I" at Step 9)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("I", 10), R"(Should NOT Output PLT Data for "I" at Step 10)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("I", 11), R"(Should NOT Output PLT Data for "I" at Step 11)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("I", 12), R"(Should NOT Output PLT Data for "I" at Step 12)"); - BOOST_CHECK_MESSAGE( rftcfg.plt("I", 13), R"(Should Output PLT Data for "I" at Step 13)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("I", 14), R"(Should NOT Output PLT Data for "I" at Step 14)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("I", 15), R"(Should NOT Output PLT Data for "I" at Step 15)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("I", 16), R"(Should NOT Output PLT Data for "I" at Step 16)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("I", 17), R"(Should NOT Output PLT Data for "I" at Step 17)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("I", 18), R"(Should NOT Output PLT Data for "I" at Step 18)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("I", 19), R"(Should NOT Output PLT Data for "I" at Step 19)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("I", 20), R"(Should NOT Output PLT Data for "I" at Step 20)"); - - BOOST_CHECK_MESSAGE(!rftcfg.rft("P2", 0), R"(Should NOT Output RFT Data for "P2" at Step 0)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("P2", 1), R"(Should NOT Output RFT Data for "P2" at Step 1)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("P2", 2), R"(Should NOT Output RFT Data for "P2" at Step 2)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("P2", 3), R"(Should NOT Output RFT Data for "P2" at Step 3)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("P2", 4), R"(Should NOT Output RFT Data for "P2" at Step 4)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("P2", 5), R"(Should NOT Output RFT Data for "P2" at Step 5)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("P2", 6), R"(Should NOT Output RFT Data for "P2" at Step 6)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("P2", 7), R"(Should NOT Output RFT Data for "P2" at Step 7)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("P2", 8), R"(Should NOT Output RFT Data for "P2" at Step 8)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("P2", 9), R"(Should NOT Output RFT Data for "P2" at Step 9)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("P2", 10), R"(Should NOT Output RFT Data for "P2" at Step 10)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("P2", 11), R"(Should NOT Output RFT Data for "P2" at Step 11)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("P2", 12), R"(Should NOT Output RFT Data for "P2" at Step 12)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("P2", 13), R"(Should NOT Output RFT Data for "P2" at Step 13)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("P2", 14), R"(Should NOT Output RFT Data for "P2" at Step 14)"); - BOOST_CHECK_MESSAGE(!rftcfg.rft("P2", 15), R"(Should NOT Output RFT Data for "P2" at Step 15)"); - - // NOTE: Not at FOPN because P2 was not declared at WRFTPLT:FOPN time. - BOOST_CHECK_MESSAGE(!rftcfg.rft("P2", 16), R"(Should NOT Output RFT Data for "P2" at Step 16)"); - - BOOST_CHECK_MESSAGE(!rftcfg.rft("P2", 17), R"(Should NOT Output RFT Data for "P2" at Step 17)"); - BOOST_CHECK_MESSAGE( rftcfg.rft("P2", 18), R"(Should Output RFT Data for "P2" at Step 18)"); - BOOST_CHECK_MESSAGE( rftcfg.rft("P2", 19), R"(Should Output RFT Data for "P2" at Step 19)"); - BOOST_CHECK_MESSAGE( rftcfg.rft("P2", 20), R"(Should Output RFT Data for "P2" at Step 20)"); - - BOOST_CHECK_MESSAGE(!rftcfg.plt("P2", 0), R"(Should NOT Output PLT Data for "P2" at Step 0)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("P2", 1), R"(Should NOT Output PLT Data for "P2" at Step 1)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("P2", 2), R"(Should NOT Output PLT Data for "P2" at Step 2)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("P2", 3), R"(Should NOT Output PLT Data for "P2" at Step 3)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("P2", 4), R"(Should NOT Output PLT Data for "P2" at Step 4)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("P2", 5), R"(Should NOT Output PLT Data for "P2" at Step 5)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("P2", 6), R"(Should NOT Output PLT Data for "P2" at Step 6)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("P2", 7), R"(Should NOT Output PLT Data for "P2" at Step 7)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("P2", 8), R"(Should NOT Output PLT Data for "P2" at Step 8)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("P2", 9), R"(Should NOT Output PLT Data for "P2" at Step 9)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("P2", 10), R"(Should NOT Output PLT Data for "P2" at Step 10)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("P2", 11), R"(Should NOT Output PLT Data for "P2" at Step 11)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("P2", 12), R"(Should NOT Output PLT Data for "P2" at Step 12)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("P2", 13), R"(Should NOT Output PLT Data for "P2" at Step 13)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("P2", 14), R"(Should NOT Output PLT Data for "P2" at Step 14)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("P2", 15), R"(Should NOT Output PLT Data for "P2" at Step 15)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("P2", 16), R"(Should NOT Output PLT Data for "P2" at Step 16)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("P2", 17), R"(Should NOT Output PLT Data for "P2" at Step 17)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("P2", 18), R"(Should NOT Output PLT Data for "P2" at Step 18)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("P2", 19), R"(Should NOT Output PLT Data for "P2" at Step 19)"); - BOOST_CHECK_MESSAGE(!rftcfg.plt("P2", 20), R"(Should NOT Output PLT Data for "P2" at Step 20)"); - - BOOST_CHECK_MESSAGE(!rftcfg.active( 0), R"(RFT Config must be Inactive at Step 0)"); - BOOST_CHECK_MESSAGE(!rftcfg.active( 1), R"(RFT Config must be Inactive at Step 1)"); - BOOST_CHECK_MESSAGE(!rftcfg.active( 2), R"(RFT Config must be Inactive at Step 2)"); - BOOST_CHECK_MESSAGE(!rftcfg.active( 3), R"(RFT Config must be Inactive at Step 3)"); - BOOST_CHECK_MESSAGE( rftcfg.active( 4), R"(RFT Config must be Active at Step 4)"); - BOOST_CHECK_MESSAGE(!rftcfg.active( 5), R"(RFT Config must be Inactive at Step 5)"); - BOOST_CHECK_MESSAGE(!rftcfg.active( 6), R"(RFT Config must be Inactive at Step 6)"); - BOOST_CHECK_MESSAGE( rftcfg.active( 7), R"(RFT Config must be Active at Step 7)"); - BOOST_CHECK_MESSAGE(!rftcfg.active( 8), R"(RFT Config must be Inactive at Step 8)"); - BOOST_CHECK_MESSAGE(!rftcfg.active( 9), R"(RFT Config must be Inactive at Step 9)"); - BOOST_CHECK_MESSAGE( rftcfg.active(10), R"(RFT Config must be Active at Step 10)"); - BOOST_CHECK_MESSAGE( rftcfg.active(11), R"(RFT Config must be Active at Step 11)"); - BOOST_CHECK_MESSAGE( rftcfg.active(12), R"(RFT Config must be Active at Step 12)"); - BOOST_CHECK_MESSAGE( rftcfg.active(13), R"(RFT Config must be Active at Step 13)"); - BOOST_CHECK_MESSAGE(!rftcfg.active(14), R"(RFT Config must be Inactive at Step 14)"); - BOOST_CHECK_MESSAGE(!rftcfg.active(15), R"(RFT Config must be Inactive at Step 15)"); - BOOST_CHECK_MESSAGE(!rftcfg.active(16), R"(RFT Config must be Inactive at Step 15)"); - BOOST_CHECK_MESSAGE(!rftcfg.active(17), R"(RFT Config must be Inactive at Step 15)"); - BOOST_CHECK_MESSAGE( rftcfg.active(18), R"(RFT Config must be Active at Step 15)"); - BOOST_CHECK_MESSAGE( rftcfg.active(19), R"(RFT Config must be Active at Step 15)"); - BOOST_CHECK_MESSAGE( rftcfg.active(20), R"(RFT Config must be Active at Step 15)"); -} - -BOOST_AUTO_TEST_SUITE_END() // WRFTPLT diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/RawKeywordTests.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/RawKeywordTests.cpp deleted file mode 100644 index 35cc95594f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/RawKeywordTests.cpp +++ /dev/null @@ -1,101 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#define BOOST_TEST_MODULE RawKeywordTests -#include -#include -#include - -#include "src/opm/parser/eclipse/Parser/raw/RawEnums.hpp" -#include "src/opm/parser/eclipse/Parser/raw/RawKeyword.hpp" -#include "src/opm/parser/eclipse/Parser/raw/RawRecord.hpp" - - -using namespace Opm; - - -BOOST_AUTO_TEST_CASE(RawKeywordConstructor) { - BOOST_CHECK_THROW( RawKeyword("NAME", "file", 10, false, Raw::FIXED), std::logic_error); - BOOST_CHECK_THROW( RawKeyword("NAME", "file", 10, false, Raw::TABLE_COLLECTION), std::logic_error); - BOOST_CHECK_THROW( RawKeyword("NAME", "file", 10, false, Raw::TABLE_COLLECTION, 0), std::logic_error); - BOOST_CHECK_THROW( RawKeyword("NAME", "file", 10, false, Raw::SLASH_TERMINATED, 5), std::logic_error); - BOOST_CHECK_THROW( RawKeyword("NAME", "file", 10, false, Raw::UNKNOWN, 5), std::logic_error); - BOOST_CHECK_THROW( RawKeyword("NAME", "file", 10, false, Raw::CODE, 2), std::logic_error); - RawKeyword kw1("NAME", "file", 10, false, Raw::SLASH_TERMINATED); - RawKeyword kw2("NAME", "file", 10, false, Raw::FIXED, 10); - RawKeyword kw3("NAME", "file", 10, false, Raw::TABLE_COLLECTION, 7); - RawKeyword kw4("NAME", "file", 10, false, Raw::CODE); -} - -BOOST_AUTO_TEST_CASE(IsFinished) { - std::string storage = "RecordString"; - string_view line(storage); - RawRecord rec(line); - - RawKeyword kw1("NAME", "file", 10, false, Raw::FIXED, 0); - BOOST_CHECK(kw1.isFinished()); - - { - RawKeyword kw2("NAME", "file", 10, false, Raw::FIXED, 2); - BOOST_CHECK(!kw2.isFinished()); - - BOOST_CHECK(!kw2.addRecord(rec)); - BOOST_CHECK(!kw2.isFinished()); - - BOOST_CHECK(kw2.addRecord(rec)); - BOOST_CHECK(kw2.isFinished()); - } - - { - RawKeyword kw("NAME", "file", 10, false, Raw::CODE); - BOOST_CHECK(!kw.isFinished()); - - BOOST_CHECK(kw.addRecord(rec)); - BOOST_CHECK(kw.isFinished()); - } - - { - RawKeyword kw3("NAME", "file", 10, false, Raw::TABLE_COLLECTION, 2); - BOOST_CHECK(!kw3.isFinished()); - - BOOST_CHECK(!kw3.terminateKeyword()); - BOOST_CHECK(!kw3.isFinished()); - - BOOST_CHECK(kw3.terminateKeyword()); - BOOST_CHECK(kw3.isFinished()); - } - - { - RawKeyword kw4("NAME", "file", 10, false, Raw::SLASH_TERMINATED); - BOOST_CHECK(!kw4.isFinished()); - - BOOST_CHECK(kw4.terminateKeyword()); - BOOST_CHECK(kw4.isFinished()); - } - - { - RawKeyword kw5("NAME", "file", 10, false, Raw::UNKNOWN); - BOOST_CHECK(!kw5.isFinished()); - - BOOST_CHECK(kw5.terminateKeyword()); - BOOST_CHECK(kw5.isFinished()); - } -} - - diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/ResinsightTest.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/ResinsightTest.cpp deleted file mode 100644 index 75136dbc8f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/ResinsightTest.cpp +++ /dev/null @@ -1,109 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#define BOOST_TEST_MODULE ResinsightIntegrationTests -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -using namespace Opm; - - -std::string deck_string = R"( -SPECGRID - 20 20 10 / - -IGNORED -Have no clue / -how to / -parse This keyword/ -/ - -GRID - -FAULTS - 'F1' 1 1 1 4 1 4 'X' / - 'F2' 5 5 1 4 1 4 'X-' / -/ - -And then comes more crap??! - --- And a valid keyword: -TABDIMS - 1 2 3 / - -And it ends with crap?! - -)"; - - -BOOST_AUTO_TEST_CASE( test_parse ) { - Parser parser(false); - ParseContext parseContext; - ErrorGuard errors; - - parseContext.update( ParseContext::PARSE_UNKNOWN_KEYWORD , InputError::IGNORE ); - parseContext.update( ParseContext::PARSE_RANDOM_TEXT , InputError::IGNORE ); - parseContext.update( ParseContext::PARSE_RANDOM_SLASH , InputError::IGNORE ); - - parser.addKeyword(); - parser.addKeyword(); - - auto deck = parser.parseString(deck_string, parseContext, errors); - - BOOST_CHECK( deck.hasKeyword() ); - BOOST_CHECK( deck.hasKeyword() ); - - BOOST_CHECK_NO_THROW( GridDims{deck} ); - BOOST_CHECK_NO_THROW( GridDims{deck}.getCartesianSize() ); -} - - -BOOST_AUTO_TEST_CASE( test_state ) { - Parser parser(false); - ParseContext parseContext; - ErrorGuard errors; - - - parseContext.update( ParseContext::PARSE_UNKNOWN_KEYWORD , InputError::IGNORE ); - parseContext.update( ParseContext::PARSE_RANDOM_TEXT , InputError::IGNORE ); - parseContext.update( ParseContext::PARSE_RANDOM_SLASH , InputError::IGNORE ); - - parser.addKeyword(); - parser.addKeyword(); - parser.addKeyword(); - auto deck = parser.parseString(deck_string, parseContext, errors); - - GridDims grid(deck); - GRIDSection gsec(deck); - FaultCollection faults(gsec, grid); - BOOST_CHECK_EQUAL( grid.getNX(), 20U); - BOOST_CHECK_EQUAL( grid.getNY(), 20U); - BOOST_CHECK_EQUAL( grid.getNZ(), 10U); - BOOST_CHECK_EQUAL( faults.size(), 2U); -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/RestartConfigTests.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/RestartConfigTests.cpp deleted file mode 100644 index 4171d98efb..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/RestartConfigTests.cpp +++ /dev/null @@ -1,1085 +0,0 @@ -/* - Copyright 2016 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - - - -#define BOOST_TEST_MODULE RestartConfigTests - -#include - - -#include -#include -#include -#include -#include -#include - -inline std::string fst( const std::pair< std::string, int >& p ) { - return p.first; -} - -using namespace Opm; - - -BOOST_AUTO_TEST_CASE(RPTSCHED_INTEGER) { - - const char* deckData1 = - "RUNSPEC\n" - "DIMENS\n" - " 10 10 10 /\n" - "GRID\n" - "START -- 0 \n" - "19 JUN 2007 / \n" - "SOLUTION\n" - "RPTRST -- PRES,DEN,PCOW,PCOG,RK,VELOCITY,COMPRESS\n" - " 6*0 1 0 1 9*0 1 7*0 1 0 3*1 /\n" - "SCHEDULE\n" - "DATES -- 1\n" - " 10 OKT 2008 / \n" - "/\n" - "RPTSCHED\n" - "RESTART=1\n" - "/\n" - "DATES -- 2\n" - " 20 JAN 2010 / \n" - "/\n" - "RPTRST -- RK,VELOCITY,COMPRESS\n" - " 18*0 0 8*0 /\n" - "DATES -- 3\n" - " 20 FEB 2010 / \n" - "/\n" - "RPTSCHED\n" - "RESTART=0\n" - "/\n"; - - Parser parser; - - auto deck1 = parser.parseString( deckData1); - RestartConfig rstConfig1( TimeMap(deck1), deck1); - - BOOST_CHECK( rstConfig1.getWriteRestartFile( 0 ) ); - BOOST_CHECK( !rstConfig1.getWriteRestartFile( 1 ) ); - BOOST_CHECK( rstConfig1.getWriteRestartFile( 2 ) ); - BOOST_CHECK( !rstConfig1.getWriteRestartFile( 3 ) ); - - std::vector< std::string > kw_list1; - for( const auto& pair : rstConfig1.getRestartKeywords( 0 ) ) - if( pair.second != 0 ) kw_list1.push_back( pair.first ); - - const auto expected1 = {"BG","BO","BW","COMPRESS","DEN","KRG","KRO","KRW","PCOG","PCOW","PRES","RK","VELOCITY","VGAS","VOIL","VWAT"}; - BOOST_CHECK_EQUAL_COLLECTIONS( expected1.begin(), expected1.end(), - kw_list1.begin(), kw_list1.end() ); - - // ACIP is a valid mneonic - but not in this deck. - BOOST_CHECK_EQUAL( rstConfig1.getKeyword( "ACIP" , 0) , 0 ); - BOOST_CHECK_EQUAL( rstConfig1.getKeyword( "COMPRESS" , 0) , 1 ); - BOOST_CHECK_EQUAL( rstConfig1.getKeyword( "PCOG", 0) , 1 ); - BOOST_CHECK_THROW( rstConfig1.getKeyword( "UNKNOWN_KW", 0) , std::invalid_argument); - - std::vector< std::string > kw_list2; - for( const auto& pair : rstConfig1.getRestartKeywords( 3 ) ) - if( pair.second != 0 ) kw_list2.push_back( pair.first ); - - const auto expected2 = { "COMPRESS", "RESTART", "RK", "VELOCITY" }; - BOOST_CHECK_EQUAL_COLLECTIONS( expected2.begin(), expected2.end(), - kw_list2.begin(), kw_list2.end() ); - - BOOST_CHECK_EQUAL( rstConfig1.getKeyword( "ALLPROPS" , 0 ) , 0); - BOOST_CHECK_EQUAL( rstConfig1.getKeyword( "ALLPROPS" , 3 ) , 0); -} - - -const std::string& deckStr = "RUNSPEC\n" - "\n" - "DIMENS\n" - " 10 10 10 /\n" - "GRID\n" - "GRIDFILE\n" - " 0 1 /\n" - "\n" - "START\n" - " 21 MAY 1981 /\n" - "\n" - "SCHEDULE\n" - "DATES\n" - " 22 MAY 1981 /\n" // timestep 1 - " 23 MAY 1981 /\n" // timestep 2 - " 24 MAY 1981 /\n" // timestep 3 - " 25 MAY 1981 /\n" // timestep 4 - " 26 MAY 1981 /\n" // timestep 5 - " 1 JAN 1982 /\n" // timestep 6 - " 1 JAN 1982 13:55:44 /\n" // timestep 7 - " 3 JAN 1982 14:56:45.123 /\n" // timestep 8 - " 4 JAN 1982 14:56:45.123 /\n" // timestep 9 - " 5 JAN 1982 14:56:45.123 /\n" // timestep 10 - " 6 JAN 1982 14:56:45.123 /\n" // timestep 11 - " 7 JAN 1982 14:56:45.123 /\n" // timestep 12 - " 8 JAN 1982 14:56:45.123 /\n" // timestep 13 - " 9 JAN 1982 14:56:45.123 /\n" // timestep 14 - " 10 JAN 1982 14:56:45.123 /\n" // timestep 15 - " 11 JAN 1982 14:56:45.123 /\n" // timestep 16 - " 1 JAN 1983 /\n" // timestep 17 - " 2 JAN 1983 /\n" // timestep 18 - " 3 JAN 1983 /\n" // timestep 19 - " 1 JAN 1984 /\n" // timestep 20 - " 2 JAN 1984 /\n" // timestep 21 - " 1 JAN 1985 /\n" // timestep 22 - " 3 JAN 1986 14:56:45.123 /\n" // timestep 23 - " 4 JAN 1986 14:56:45.123 /\n" // timestep 24 - " 5 JAN 1986 14:56:45.123 /\n" // timestep 25 - " 1 JAN 1987 /\n" // timestep 26 - " 1 JAN 1988 /\n" // timestep 27 - " 2 JAN 1988 /\n" // timestep 28 - " 3 JAN 1988 /\n" // timestep 29 - " 1 JAN 1989 /\n" // timestep 30 - " 2 JAN 1989 /\n" // timestep 31 - " 2 JAN 1990 /\n" // timestep 32 - " 2 JAN 1991 /\n" // timestep 33 - " 3 JAN 1991 /\n" // timestep 34 - " 4 JAN 1991 /\n" // timestep 35 - " 1 JAN 1992 /\n" // timestep 36 - " 1 FEB 1992 /\n" // timestep 37 - " 1 MAR 1992 /\n" // timestep 38 - " 2 MAR 1992 /\n" // timestep 39 - " 3 MAR 1992 /\n" // timestep 40 - " 4 MAR 1992 /\n" // timestep 41 - " 1 APR 1992 /\n" // timestep 42 - " 2 APR 1992 /\n" // timestep 43 - " 1 MAY 1992 /\n" // timestep 44 - " 2 MAY 1992 /\n" // timestep 45 - " 3 MAY 1992 /\n" // timestep 46 - " 3 JUN 1992 /\n" // timestep 47 - " 3 JUL 1992 /\n" // timestep 48 - " 3 AUG 1992 /\n" // timestep 49 - " 4 AUG 1992 /\n" // timestep 50 - " 5 AUG 1992 /\n" // timestep 51 - " 6 AUG 1992 /\n" // timestep 52 - " 7 AUG 1992 /\n" // timestep 53 - " 8 AUG 1992 /\n" // timestep 54 - " 9 AUG 1992 /\n" // timestep 55 - " 10 AUG 1992 /\n" // timestep 56 - " 11 AUG 1992 /\n" // timestep 57 - " 12 AUG 1992 /\n" // timestep 58 - " 13 AUG 1992 /\n" // timestep 59 - " 14 AUG 1992 /\n" // timestep 60 - " 15 AUG 1992 /\n" // timestep 61 - "/\n" - "\n"; - -const std::string deckStr_RFT = "RUNSPEC\n" - "OIL\n" - "GAS\n" - "WATER\n" - "DIMENS\n" - " 10 10 10 /\n" - "GRID\n" - "DXV\n" - "10*0.25 /\n" - "DYV\n" - "10*0.25 /\n" - "DZV\n" - "10*0.25 /\n" - "TOPS\n" - "100*0.25 /\n" - "\n" - "START -- 0 \n" - "1 NOV 1979 / \n" - "SCHEDULE\n" - "DATES -- 1\n" - " 1 DES 1979/ \n" - "/\n" - "WELSPECS\n" - " 'OP_1' 'OP' 9 9 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / \n" - " 'OP_2' 'OP' 4 4 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / \n" - "/\n" - "COMPDAT\n" - " 'OP_1' 9 9 1 1 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / \n" - " 'OP_1' 9 9 2 2 'OPEN' 1* 46.825 0.311 4332.346 1* 1* 'X' 22.123 / \n" - " 'OP_1' 9 9 3 9 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / \n" - " 'OP_2' 4 4 4 9 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / \n" - "/\n" - "DATES -- 2\n" - " 10 OKT 2008 / \n" - "/\n" - "WRFT \n" - "/ \n" - "WELOPEN\n" - " 'OP_1' OPEN / \n" - " 'OP_2' OPEN / \n" - "/\n" - "DATES -- 3\n" - " 10 NOV 2008 / \n" - "/\n"; - - - -BOOST_AUTO_TEST_CASE(RPTRST_mixed_mnemonics_int_list) { - const char* data = "RUNSPEC\n" - "DIMENS\n" - " 10 10 10 /\n" - "GRID\n" - "START -- 0 \n" - "19 JUN 2007 / \n" - "SCHEDULE\n" - "DATES -- 1\n" - " 10 OKT 2008 / \n" - "/\n" - "RPTRST\n" - "BASIC=3 0 1 2\n" - "/\n" - "DATES -- 2\n" - " 20 JAN 2010 / \n" - "/\n" - "DATES -- 3\n" - " 20 FEB 2010 / \n" - "/\n" - "RPTSCHED\n" - "BASIC=1\n" - "/\n"; - - ParseContext parseContext; - ErrorGuard errors; - auto deck = Parser().parseString( data, parseContext, errors ); - parseContext.update(ParseContext::RPT_MIXED_STYLE, InputError::THROW_EXCEPTION); - BOOST_CHECK_THROW( RestartConfig( TimeMap(deck), deck, parseContext, errors ), std::invalid_argument); -} - -BOOST_AUTO_TEST_CASE(RPTRST) { - - const char* deckData1 = - "RUNSPEC\n" - "DIMENS\n" - " 10 10 10 /\n" - "GRID\n" - "START -- 0 \n" - "19 JUN 2007 / \n" - "SOLUTION\n" - "RPTRST\n" - " ACIP KRG KRO KRW NORST SFREQ=10 ALLPROPS/\n" - "SCHEDULE\n" - "DATES -- 1\n" - " 10 OKT 2008 / \n" - "/\n" - "RPTRST\n" - "BASIC=1\n" - "/\n" - "DATES -- 2\n" - " 20 JAN 2010 / \n" - "/\n"; - - const char* deckData2 = - "RUNSPEC\n" - "DIMENS\n" - " 10 10 10 /\n" - "GRID\n" - "START -- 0 \n" - "19 JUN 2007 / \n" - "SCHEDULE\n" - "DATES -- 1\n" - " 10 OKT 2008 / \n" - "/\n" - "RPTRST\n" - "BASIC=3 FREQ=2 FLOWS RUBBISH=5\n" - "/\n" - "DATES -- 2\n" - " 20 JAN 2010 / \n" - "/\n" - "DATES -- 3\n" - " 20 JAN 2011 / \n" - "/\n"; - - const char* deckData3 = - "RUNSPEC\n" - "DIMENS\n" - " 10 10 10 /\n" - "GRID\n" - "START -- 0 \n" - "19 JUN 2007 / \n" - "SCHEDULE\n" - "DATES -- 1\n" - " 10 OKT 2008 / \n" - "/\n" - "RPTRST\n" - "3 0 0 0 0 2\n" - "/\n" - "DATES -- 2\n" - " 20 JAN 2010 / \n" - "/\n" - "DATES -- 3\n" - " 20 JAN 2011 / \n" - "/\n"; - - Opm::Parser parser; - - auto deck1 = parser.parseString( deckData1); - RestartConfig rstConfig1( TimeMap(deck1), deck1 ); - - // Observe that this is true due to some undocumented guessing that - // the initial restart file should be written if a RPTRST keyword is - // found in the SOLUTION section, irrespective of the content of that - // keyword. - BOOST_CHECK( rstConfig1.getWriteRestartFile( 0 ) ); - BOOST_CHECK( !rstConfig1.getWriteRestartFile( 1 ) ); - BOOST_CHECK( rstConfig1.getWriteRestartFile( 2 ) ); - - - std::vector expected = { "ACIP","BASIC", "BG","BO","BW","DEN","KRG", "KRO", "KRW", "NORST", "SFREQ", "VGAS", "VOIL", "VWAT"}; - const auto kw_list = fun::map( fst, rstConfig1.getRestartKeywords(2) ); - - BOOST_CHECK_EQUAL_COLLECTIONS( expected.begin() ,expected.end(), - kw_list.begin() , kw_list.end() ); - - BOOST_CHECK_EQUAL( rstConfig1.getKeyword( "ALLPROPS" , 2 ) , 0); - - auto deck2 = parser.parseString( deckData2 ); - RestartConfig rstConfig2( TimeMap(deck2), deck2 ); - - const auto expected2 = { "BASIC", "FLOWS", "FREQ" }; - const auto kw_list2 = fun::map( fst, rstConfig2.getRestartKeywords( 2 ) ); - BOOST_CHECK_EQUAL_COLLECTIONS( expected2.begin(), expected2.end(), - kw_list2.begin(), kw_list2.end() ); - - BOOST_CHECK( !rstConfig2.getWriteRestartFile( 0 ) ); - BOOST_CHECK( !rstConfig2.getWriteRestartFile( 1 ) ); - BOOST_CHECK( rstConfig2.getWriteRestartFile( 2 ) ); - BOOST_CHECK( !rstConfig2.getWriteRestartFile( 3 ) ); - - auto deck3 = parser.parseString( deckData3 ); - RestartConfig rstConfig3( TimeMap(deck3), deck3 ); - - BOOST_CHECK( !rstConfig3.getWriteRestartFile( 0 ) ); - BOOST_CHECK( !rstConfig3.getWriteRestartFile( 1 ) ); - BOOST_CHECK( rstConfig3.getWriteRestartFile( 2 ) ); - BOOST_CHECK( !rstConfig3.getWriteRestartFile( 3 ) ); -} - - - -BOOST_AUTO_TEST_CASE(RPTRST_FORMAT_ERROR) { - - const char* deckData0 = - "RUNSPEC\n" - "DIMENS\n" - " 10 10 10 /\n" - "GRID\n" - "START -- 0 \n" - "19 JUN 2007 / \n" - "SOLUTION\n" - "RPTRST\n" - " ACIP KRG KRO KRW NORST SFREQ=10 ALLPROPS/\n" - "SCHEDULE\n" - "DATES -- 1\n" - " 10 OKT 2008 / \n" - "/\n" - "RPTRST\n" - "BASIC 1\n" - "/\n" - "DATES -- 2\n" - " 20 JAN 2010 / \n" - "/\n"; - - const char* deckData1 = - "RUNSPEC\n" - "DIMENS\n" - " 10 10 10 /\n" - "GRID\n" - "START -- 0 \n" - "19 JUN 2007 / \n" - "SOLUTION\n" - "RPTRST\n" - " ACIP KRG KRO KRW NORST SFREQ = 10 ALLPROPS/\n" - "SCHEDULE\n" - "DATES -- 1\n" - " 10 OKT 2008 / \n" - "/\n" - "RPTRST\n" - "BASIC = 1\n" - "/\n" - "DATES -- 2\n" - " 20 JAN 2010 / \n" - "/\n"; - - const char* deckData2 = - "RUNSPEC\n" - "DIMENS\n" - " 10 10 10 /\n" - "GRID\n" - "START -- 0 \n" - "19 JUN 2007 / \n" - "SCHEDULE\n" - "DATES -- 1\n" - " 10 OKT 2008 / \n" - "/\n" - "RPTRST\n" - "BASIC = 3 FREQ = 2 FLOWS RUBBISH = 5\n" - "/\n" - "DATES -- 2\n" - " 20 JAN 2010 / \n" - "/\n" - "DATES -- 3\n" - " 20 JAN 2011 / \n" - "/\n"; - - const char* deckData3 = - "RUNSPEC\n" - "DIMENS\n" - " 10 10 10 /\n" - "GRID\n" - "START -- 0 \n" - "19 JUN 2007 / \n" - "SCHEDULE\n" - "DATES -- 1\n" - " 10 OKT 2008 / \n" - "/\n" - "RPTRST\n" - "3 0 0 0 0 2\n" - "/\n" - "DATES -- 2\n" - " 20 JAN 2010 / \n" - "/\n" - "DATES -- 3\n" - " 20 JAN 2011 / \n" - "/\n"; - - Opm::Parser parser; - ParseContext ctx; - ErrorGuard errors; - - auto deck0 = parser.parseString( deckData0, ctx, errors ); - auto deck1 = parser.parseString( deckData1, ctx, errors ); - ctx.update(ParseContext::RPT_UNKNOWN_MNEMONIC, InputError::IGNORE); - ctx.update(ParseContext::RPT_MIXED_STYLE, InputError::THROW_EXCEPTION); - BOOST_CHECK_THROW(RestartConfig(TimeMap(deck1), deck1, ctx, errors), std::invalid_argument); - - ctx.update(ParseContext::RPT_MIXED_STYLE, InputError::IGNORE); - RestartConfig rstConfig1( TimeMap(deck1), deck1, ctx, errors ); - - - // The case "BASIC 1" - i.e. without '=' can not be salvaged; this should - // give an exception whatever is the value of ParseContext::RPT_MIXED_STYLE: - BOOST_CHECK_THROW(RestartConfig(TimeMap(deck0), deck0, ctx, errors), std::invalid_argument); - - - // Observe that this is true due to some undocumented guessing that - // the initial restart file should be written if a RPTRST keyword is - // found in the SOLUTION section, irrespective of the content of that - // keyword. - BOOST_CHECK( rstConfig1.getWriteRestartFile( 0 ) ); - BOOST_CHECK( !rstConfig1.getWriteRestartFile( 1 ) ); - BOOST_CHECK( rstConfig1.getWriteRestartFile( 2 ) ); - - - std::vector expected = { "ACIP","BASIC", "BG","BO","BW","DEN","KRG", "KRO", "KRW", "NORST", "SFREQ", "VGAS", "VOIL", "VWAT"}; - const auto kw_list = fun::map( fst, rstConfig1.getRestartKeywords(2) ); - - BOOST_CHECK_EQUAL_COLLECTIONS( expected.begin() ,expected.end(), - kw_list.begin() , kw_list.end() ); - - BOOST_CHECK_EQUAL( rstConfig1.getKeyword( "ALLPROPS" , 2 ) , 0); - - auto deck2 = parser.parseString( deckData2, ctx, errors ); - - ctx.update(ParseContext::RPT_UNKNOWN_MNEMONIC, InputError::THROW_EXCEPTION); - BOOST_CHECK_THROW(RestartConfig(TimeMap(deck2), deck2, ctx, errors), std::invalid_argument); - ctx.update(ParseContext::RPT_UNKNOWN_MNEMONIC, InputError::IGNORE); - - RestartConfig rstConfig2( TimeMap(deck2), deck2, ctx, errors ); - - const auto expected2 = { "BASIC", "FLOWS", "FREQ" }; - const auto kw_list2 = fun::map( fst, rstConfig2.getRestartKeywords( 2 ) ); - BOOST_CHECK_EQUAL_COLLECTIONS( expected2.begin(), expected2.end(), - kw_list2.begin(), kw_list2.end() ); - - BOOST_CHECK( !rstConfig2.getWriteRestartFile( 0 ) ); - BOOST_CHECK( !rstConfig2.getWriteRestartFile( 1 ) ); - BOOST_CHECK( rstConfig2.getWriteRestartFile( 2 ) ); - BOOST_CHECK( !rstConfig2.getWriteRestartFile( 3 ) ); - - auto deck3 = parser.parseString( deckData3, ctx, errors ); - RestartConfig rstConfig3( TimeMap(deck3), deck3, ctx, errors ); - - BOOST_CHECK( !rstConfig3.getWriteRestartFile( 0 ) ); - BOOST_CHECK( !rstConfig3.getWriteRestartFile( 1 ) ); - BOOST_CHECK( rstConfig3.getWriteRestartFile( 2 ) ); - BOOST_CHECK( !rstConfig3.getWriteRestartFile( 3 ) ); -} - - - -BOOST_AUTO_TEST_CASE(RPTSCHED) { - - const char* deckData1 = - "RUNSPEC\n" - "DIMENS\n" - " 10 10 10 /\n" - "GRID\n" - "START -- 0 \n" - "19 JUN 2007 / \n" - "SCHEDULE\n" - "DATES -- 1\n" - " 10 OKT 2008 / \n" - "/\n" - "RPTSCHED\n" - "RESTART=1\n" - "/\n" - "DATES -- 2\n" - " 20 JAN 2010 / \n" - "/\n" - "DATES -- 3\n" - " 20 FEB 2010 / \n" - "/\n" - "RPTSCHED\n" - "RESTART=0\n" - "/\n"; - - - const char* deckData2 = - "RUNSPEC\n" - "DIMENS\n" - " 10 10 10 /\n" - "GRID\n" - "START -- 0 \n" - "19 JUN 2007 / \n" - "SCHEDULE\n" - "DATES -- 1\n" - " 10 OKT 2008 / \n" - "/\n" - "RPTSCHED\n" - "RESTART=3 FIP\n" - "/\n" - "DATES -- 2\n" - " 20 JAN 2010 / \n" - "/\n" - "RPTSCHED\n" - "RESTART=4\n" - "/\n" - "DATES -- 3\n" - " 20 FEB 2010 / \n" - "/\n" - "RPTSCHED\n" - "NOTHING RUBBISH\n" - "/\n"; - - const char* deckData3 = - "RUNSPEC\n" - "DIMENS\n" - " 10 10 10 /\n" - "GRID\n" - "START -- 0 \n" - "19 JUN 2007 / \n" - "SOLUTION\n" - "RPTSOL\n" - " RESTART=4 /\n" - "SCHEDULE\n" - "DATES -- 1\n" - " 10 OKT 2008 / \n" - "/\n" - "RPTRST\n" - "BASIC=3 FREQ=1 RUBBISH=5\n" - "/\n" - "DATES -- 2\n" - " 20 JAN 2010 / \n" - "/\n" - "DATES -- 3\n" - " 20 FEB 2010 / \n" - "/\n" - "RPTSCHED\n" - "0 0 0 0 0 0 0 0\n" - "/\n"; - - Parser parser; - - auto deck1 = parser.parseString( deckData1 ); - RestartConfig rstConfig1( TimeMap(deck1), deck1 ); - - BOOST_CHECK( !rstConfig1.getWriteRestartFile( 0 ) ); - BOOST_CHECK( !rstConfig1.getWriteRestartFile( 1 ) ); - BOOST_CHECK( rstConfig1.getWriteRestartFile( 2 ) ); - BOOST_CHECK( rstConfig1.getWriteRestartFile( 3 ) ); - - - auto deck2 = parser.parseString( deckData2 ); - RestartConfig rstConfig2( TimeMap(deck2), deck2 ); - - BOOST_CHECK( !rstConfig2.getWriteRestartFile( 0 ) ); - BOOST_CHECK( !rstConfig2.getWriteRestartFile( 1 ) ); - BOOST_CHECK( rstConfig2.getWriteRestartFile( 2 ) ); - BOOST_CHECK( rstConfig2.getWriteRestartFile( 3 ) ); - - const auto expected2 = { "FIP", "RESTART" }; - const auto kw_list2 = fun::map( fst, rstConfig2.getRestartKeywords( 2 ) ); - BOOST_CHECK_EQUAL_COLLECTIONS( expected2.begin(), expected2.end(), - kw_list2.begin(), kw_list2.end() ); - - - auto deck3 = parser.parseString( deckData3 ); - RestartConfig rstConfig3( TimeMap(deck3), deck3 ); - //Older ECLIPSE 100 data set may use integer controls instead of mnemonics - BOOST_CHECK( rstConfig3.getWriteRestartFile( 0 ) ); - BOOST_CHECK( !rstConfig3.getWriteRestartFile( 1 ) ); - BOOST_CHECK( rstConfig3.getWriteRestartFile( 2 ) ); - BOOST_CHECK( rstConfig3.getWriteRestartFile( 3 ) ); - - std::vector expected3 = { "BASIC", "FREQ" }; - const auto kw_list3 = fun::map( fst, rstConfig3.getRestartKeywords(2) ); - BOOST_CHECK_EQUAL_COLLECTIONS( expected3.begin() , expected3.end() , kw_list3.begin() , kw_list3.end() ); -} - - -BOOST_AUTO_TEST_CASE(RPTSCHED_and_RPTRST) { - const char* deckData = - "RUNSPEC\n" - "DIMENS\n" - " 10 10 10 /\n" - "GRID\n" - "START -- 0 \n" - "19 JUN 2007 / \n" - "SCHEDULE\n" - "DATES -- 1\n" - " 10 OKT 2008 / \n" - "/\n" - "RPTRST\n" - "BASIC=3 FREQ=3 BG BO\n" - "/\n" - "DATES -- 2\n" - " 20 JAN 2010 / \n" - "/\n" - "DATES -- 3\n" - " 20 FEB 2010 / \n" - "/\n" - "RPTSCHED\n" - "RESTART=1\n" - "/\n"; - - - Opm::Parser parser; - - auto deck = parser.parseString( deckData ); - RestartConfig rstConfig( TimeMap(deck), deck ); - - BOOST_CHECK( !rstConfig.getWriteRestartFile( 0 ) ); - BOOST_CHECK( !rstConfig.getWriteRestartFile( 1 ) ); - BOOST_CHECK( !rstConfig.getWriteRestartFile( 2 ) ); - BOOST_CHECK( rstConfig.getWriteRestartFile( 3 ) ); -} - - -BOOST_AUTO_TEST_CASE(NO_BASIC) { - const char* data = "RUNSPEC\n" - "DIMENS\n" - " 10 10 10 /\n" - "GRID\n" - "START -- 0 \n" - "19 JUN 2007 / \n" - "SCHEDULE\n" - "DATES -- 1\n" - " 10 OKT 2008 / \n" - "/\n" - "DATES -- 2\n" - " 20 JAN 2010 / \n" - "/\n" - "DATES -- 3\n" - " 20 FEB 2010 / \n" - "/\n" - "RPTSCHED\n" - "/\n"; - - auto deck = Parser().parseString( data); - RestartConfig ioConfig( TimeMap(deck), deck); - - for( size_t ts = 0; ts < 4; ++ts ) - BOOST_CHECK( !ioConfig.getWriteRestartFile( ts ) ); -} - -BOOST_AUTO_TEST_CASE(BASIC_EQ_1) { - const char* data = "RUNSPEC\n" - "DIMENS\n" - " 10 10 10 /\n" - "GRID\n" - "START -- 0 \n" - "19 JUN 2007 / \n" - "SCHEDULE\n" - "DATES -- 1\n" - " 10 OKT 2008 / \n" - "/\n" - "RPTRST\n" - "BASIC=3 FREQ=3\n" - "/\n" - "DATES -- 2\n" - " 20 JAN 2010 / \n" - "/\n" - "DATES -- 3\n" - " 20 FEB 2010 / \n" - "/\n" - "RPTSCHED\n" - "BASIC=1\n" - "/\n"; - - auto deck = Parser().parseString( data); - RestartConfig ioConfig( TimeMap(deck), deck); - - for( size_t ts = 0; ts < 3; ++ts ) - BOOST_CHECK( !ioConfig.getWriteRestartFile( ts ) ); - - BOOST_CHECK( ioConfig.getWriteRestartFile( 3 ) ); -} - -BOOST_AUTO_TEST_CASE(BASIC_EQ_3) { - const char* data = "RUNSPEC\n" - "DIMENS\n" - " 10 10 10 /\n" - "GRID\n" - "START\n" - " 21 MAY 1981 /\n" - "\n" - "SCHEDULE\n" - "RPTRST\n" - "BASIC=3 FREQ=3\n" - "/\n" - "DATES\n" - " 22 MAY 1981 /\n" // timestep 1 - " 23 MAY 1981 /\n" // timestep 2 - " 24 MAY 1981 /\n" // timestep 3 - " 25 MAY 1981 /\n" // timestep 4 - " 26 MAY 1981 /\n" // timestep 5 - " 1 JAN 1982 /\n" // timestep 6 - " 1 JAN 1982 13:55:44 /\n" // timestep 7 - " 3 JAN 1982 14:56:45.123 /\n" // timestep 8 - " 4 JAN 1982 14:56:45.123 /\n" // timestep 9 - " 5 JAN 1982 14:56:45.123 /\n" // timestep 10 - " 6 JAN 1982 14:56:45.123 /\n" // timestep 11 - "/\n"; - - auto deck = Parser().parseString( data); - RestartConfig ioConfig( TimeMap(deck), deck); - - const size_t freq = 3; - - /* BASIC=3, restart files are created every nth report time, n=3 */ - for( size_t ts = 1; ts < 12; ++ts ) - BOOST_CHECK_EQUAL( ts % freq == 0, ioConfig.getWriteRestartFile( ts ) ); -} - -BOOST_AUTO_TEST_CASE(BASIC_EQ_4) { - const char* data = "RUNSPEC\n" - "DIMENS\n" - " 10 10 10 /\n" - "GRID\n" - "START\n" - " 21 MAY 1981 /\n" - "\n" - "SCHEDULE\n" - "RPTRST\n" - "BASIC=4\n" - "/\n" - "DATES\n" - " 22 MAY 1981 /\n" // timestep 1 - " 23 MAY 1981 /\n" // timestep 2 - " 24 MAY 1981 /\n" // timestep 3 - " 25 MAY 1981 /\n" // timestep 4 - " 26 MAY 1981 /\n" // timestep 5 - " 1 JAN 1982 /\n" // timestep 6 - " 1 JAN 1982 13:55:44 /\n" // timestep 7 - " 3 JAN 1982 14:56:45.123 /\n" // timestep 8 - " 4 JAN 1982 14:56:45.123 /\n" // timestep 9 - " 5 JAN 1982 14:56:45.123 /\n" // timestep 10 - " 6 JAN 1982 14:56:45.123 /\n" // timestep 11 - " 6 JAN 1983 14:56:45.123 /\n" // timestep 12 - "/\n"; - - auto deck = Parser().parseString( data); - RestartConfig ioConfig( TimeMap(deck), deck); - - /* BASIC=4, restart file is written at the first report step of each year. - */ - for( size_t ts : { 1, 2, 3, 4, 5, 7, 8, 9, 10, 11 } ) - BOOST_CHECK( !ioConfig.getWriteRestartFile( ts ) ); - - for( size_t ts : { 6, 12 } ) - BOOST_CHECK( ioConfig.getWriteRestartFile( ts ) ); -} - -BOOST_AUTO_TEST_CASE(BASIC_EQ_4_FREQ_2) { - const char* data = "RUNSPEC\n" - "DIMENS\n" - " 10 10 10 /\n" - "GRID\n" - "START\n" - " 21 MAY 1981 /\n" - "\n" - "SCHEDULE\n" - "RPTRST\n" - "BASIC=4 FREQ=2\n" - "/\n" - "DATES\n" - " 22 MAY 1981 /\n" - " 23 MAY 1981 /\n" - " 24 MAY 1981 /\n" - " 23 MAY 1982 /\n" - " 24 MAY 1982 /\n" - " 24 MAY 1983 /\n" // write - " 25 MAY 1984 /\n" - " 26 MAY 1984 /\n" - " 26 MAY 1985 /\n" // write - " 27 MAY 1985 /\n" - " 1 JAN 1986 /\n" - "/\n"; - - auto deck = Parser().parseString( data); - RestartConfig ioConfig( TimeMap(deck), deck); - - /* BASIC=4, restart file is written at the first report step of each year. - * Optionally, if the mnemonic FREQ is set >1 the restart is written only - * every n'th year. - * - * FREQ=2 - */ - for( size_t ts : { 1, 2, 3, 4, 5, 7, 8, 10, 11 } ) - BOOST_CHECK( !ioConfig.getWriteRestartFile( ts ) ); - - for( size_t ts : { 6, 9 } ) - BOOST_CHECK( ioConfig.getWriteRestartFile( ts ) ); -} - -BOOST_AUTO_TEST_CASE(BASIC_EQ_5) { - const char* data = "RUNSPEC\n" - "DIMENS\n" - " 10 10 10 /\n" - "GRID\n" - "START\n" - " 21 MAY 1981 /\n" - "\n" - "SCHEDULE\n" - "RPTRST\n" - "BASIC=5 FREQ=2\n" - "/\n" - "DATES\n" - " 22 MAY 1981 /\n" - " 23 MAY 1981 /\n" - " 24 MAY 1981 /\n" - " 1 JUN 1981 /\n" - " 1 JUL 1981 /\n" // write - " 1 JAN 1982 /\n" // write - " 2 JAN 1982 /\n" - " 1 FEB 1982 /\n" - " 1 MAR 1982 /\n" // write - " 1 APR 1983 /\n" // write - " 2 JUN 1983 /\n" // write - "/\n"; - - auto deck = Parser().parseString( data); - RestartConfig ioConfig( TimeMap(deck), deck); - - /* BASIC=5, restart file is written at the first report step of each month. - */ - for( size_t ts : { 1, 2, 3, 4, 7, 8 } ) - BOOST_CHECK( !ioConfig.getWriteRestartFile( ts ) ); - - for( size_t ts : { 5, 6, 9, 10, 11 } ) - BOOST_CHECK( ioConfig.getWriteRestartFile( ts ) ); -} - -BOOST_AUTO_TEST_CASE(BASIC_EQ_0) { - const char* data = "RUNSPEC\n" - "DIMENS\n" - " 10 10 10 /\n" - "GRID\n" - "START\n" - " 21 MAY 1981 /\n" - "\n" - "SCHEDULE\n" - "RPTRST\n" - "BASIC=0 FREQ=2\n" - "/\n" - "DATES\n" - " 22 MAY 1981 /\n" - " 23 MAY 1981 /\n" - " 24 MAY 1981 /\n" - " 1 JUN 1981 /\n" - " 1 JUL 1981 /\n" - " 1 JAN 1982 /\n" - " 2 JAN 1982 /\n" - " 1 FEB 1982 /\n" - " 1 MAR 1982 /\n" - " 1 APR 1983 /\n" - " 2 JUN 1983 /\n" - "/\n"; - - auto deck = Parser().parseString( data ) ; - RestartConfig ioConfig( TimeMap(deck), deck ); - - /* RESTART=0, no restart file is written - */ - for( size_t ts = 0; ts < 11; ++ts ) - BOOST_CHECK( !ioConfig.getWriteRestartFile( ts ) ); -} - - -BOOST_AUTO_TEST_CASE(RESTART_EQ_0) { - const char* data = "RUNSPEC\n" - "DIMENS\n" - " 10 10 10 /\n" - "GRID\n" - "START\n" - " 21 MAY 1981 /\n" - "\n" - "SCHEDULE\n" - "RPTSCHED\n" - "RESTART=0\n" - "/\n" - "DATES\n" - " 22 MAY 1981 /\n" - " 23 MAY 1981 /\n" - " 24 MAY 1981 /\n" - " 1 JUN 1981 /\n" - " 1 JUL 1981 /\n" - " 1 JAN 1982 /\n" - " 2 JAN 1982 /\n" - " 1 FEB 1982 /\n" - " 1 MAR 1982 /\n" - " 1 APR 1983 /\n" - " 2 JUN 1983 /\n" - "/\n"; - - auto deck = Parser().parseString( data); - RestartConfig ioConfig( TimeMap(deck), deck); - - /* RESTART=0, no restart file is written - */ - for( size_t ts = 0; ts < 11; ++ts ) - BOOST_CHECK( !ioConfig.getWriteRestartFile( ts ) ); -} - -BOOST_AUTO_TEST_CASE(RESTART_BASIC_GT_2) { - const char* data = "RUNSPEC\n" - "DIMENS\n" - " 10 10 10 /\n" - "GRID\n" - "START\n" - " 21 MAY 1981 /\n" - "\n" - "SCHEDULE\n" - "RPTRST\n" - "BASIC=4 FREQ=2\n" - "/\n" - "DATES\n" - " 22 MAY 1981 /\n" - "/\n" - "RPTSCHED\n" // BASIC >2, ignore RPTSCHED RESTART - "RESTART=3, FREQ=1\n" - "/\n" - "DATES\n" - " 23 MAY 1981 /\n" - " 24 MAY 1981 /\n" - " 23 MAY 1982 /\n" - " 24 MAY 1982 /\n" - " 24 MAY 1983 /\n" // write - " 25 MAY 1984 /\n" - " 26 MAY 1984 /\n" - " 26 MAY 1985 /\n" // write - " 27 MAY 1985 /\n" - " 1 JAN 1986 /\n" - "/\n"; - - auto deck = Parser().parseString( data); - RestartConfig ioConfig( TimeMap(deck), deck); - - for( size_t ts : { 1, 2, 3, 4, 5, 7, 8, 10, 11 } ) - BOOST_CHECK( !ioConfig.getWriteRestartFile( ts ) ); - - for( size_t ts : { 6, 9 } ) - BOOST_CHECK( ioConfig.getWriteRestartFile( ts ) ); -} - -BOOST_AUTO_TEST_CASE(RESTART_BASIC_LEQ_2) { - const char* data = "RUNSPEC\n" - "DIMENS\n" - " 10 10 10 /\n" - "GRID\n" - "START\n" - " 21 MAY 1981 /\n" - "\n" - "SCHEDULE\n" - "RPTRST\n" - "BASIC=1" - "/\n" - "DATES\n" - " 22 MAY 1981 /\n" - "/\n" - "RPTSCHED\n" - "RESTART=0\n" - "/\n" - "DATES\n" - " 23 MAY 1981 /\n" - " 24 MAY 1981 /\n" - " 23 MAY 1982 /\n" - " 24 MAY 1982 /\n" - " 24 MAY 1983 /\n" - " 25 MAY 1984 /\n" - " 26 MAY 1984 /\n" - " 26 MAY 1985 /\n" - " 27 MAY 1985 /\n" - " 1 JAN 1986 /\n" - "/\n"; - - auto deck = Parser().parseString( data ); - RestartConfig ioConfig( TimeMap(deck), deck ); - - BOOST_CHECK( ioConfig.getWriteRestartFile( 1 ) ); - for( size_t ts = 2; ts < 11; ++ts ) - BOOST_CHECK( !ioConfig.getWriteRestartFile( ts ) ); -} - -BOOST_AUTO_TEST_CASE(RESTART_SAVE) { - const char* data = "RUNSPEC\n" - "DIMENS\n" - " 10 10 10 /\n" - "GRID\n" - "START\n" - " 21 MAY 1981 /\n" - "\n" - "SCHEDULE\n" - "DATES\n" - " 22 MAY 1981 /\n" - "/\n" - "DATES\n" - " 23 MAY 1981 /\n" - " 24 MAY 1981 /\n" - " 23 MAY 1982 /\n" - " 24 MAY 1982 /\n" - " 24 MAY 1983 /\n" - " 25 MAY 1984 /\n" - " 26 MAY 1984 /\n" - " 26 MAY 1985 /\n" - " 27 MAY 1985 /\n" - " 1 JAN 1986 /\n" - "/\n" - "SAVE \n" - "TSTEP \n" - " 1 /\n"; - auto deck = Parser().parseString( data); - RestartConfig ioConfig( TimeMap(deck), deck ); - - for( size_t ts = 1; ts < 11; ++ts ) - BOOST_CHECK( !ioConfig.getWriteRestartFile( ts ) ); - BOOST_CHECK( ioConfig.getWriteRestartFile( 12 ) ); - -} - diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/RockTableTests.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/RockTableTests.cpp deleted file mode 100644 index 8b35fe00e3..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/RockTableTests.cpp +++ /dev/null @@ -1,141 +0,0 @@ -/* - Copyright (C) 2019 by Norce - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#define BOOST_TEST_MODULE RockTableTests - -#include - -#include -#include -#include -#include - -// generic table classes -#include -#include - -// keyword specific table classes -//#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#include -#include - -using namespace Opm; - -BOOST_AUTO_TEST_CASE( Rock2d ) { - const char *input = - "TABDIMS\n" - "1 1 /\n" - "\n" - "FIELD\n" - "\n" - "ROCKCOMP\n" - " REVERS 2 /\n" - "\n" - "OVERBURD\n" - "1 1.0\n" - "10 2.0\n" - " / \n" - "2 1.1\n" - "20 2.1\n" - " / \n" - "ROCK2D\n" - " 0.0 0.01\n" - " 0.02\n" - " 0.03 / \n" - "10.0 0.11 \n" - " 0.12 \n" - " 0.13/ \n" - "20.0 0.21\n" - " 0.22\n" - " 0.23/\n" - " / \n" - "0.7 0.04 \n" - " 0.05 /\n" - "10.0 0.14\n" - " 0.15/\n" - "20.0 0.24\n" - " 0.25/\n" - " / \n" - "ROCK2DTR\n" - " 0.0 0.01\n" - " 0.02\n" - " 0.03 / \n" - "10.0 0.11 \n" - " 0.12 \n" - " 0.13/ \n" - "20.0 0.21\n" - " 0.22\n" - " 0.23/\n" - " / \n" - "0.7 0.04 \n" - " 0.05 /\n" - "10.0 0.14\n" - " 0.15/\n" - "20.0 0.24\n" - " 0.25/\n" - " / \n" - "ROCKWNOD\n" - "0.0\n" - "0.5\n" - "1.0 /\n" - "0.9\n" - "1.0 /\n" - "\n"; - - auto deck = Parser().parseString( input ); - TableManager tables( deck ); - - const auto& rock2d = tables.getRock2dTables(); - const auto& rock2dtr = tables.getRock2dtrTables(); - const auto& rockwnod = tables.getRockwnodTables(); - const auto& overburd = tables.getOverburdTables(); - - const auto& rec1 = rock2d[0]; - const auto& rec2 = rock2d.at(1); - const auto& rec1tr = rock2dtr[0]; - - const RockwnodTable& rockwnodTable1 = rockwnod.getTable(0); - const RockwnodTable& rockwnodTable2 = rockwnod.getTable(1); - - const OverburdTable& overburdTable = overburd.getTable(0); - BOOST_CHECK_THROW( rock2d.at(2), std::out_of_range ); - BOOST_REQUIRE_EQUAL(3, rec1.size()); - BOOST_REQUIRE_EQUAL(3, rec2.size()); - BOOST_REQUIRE_EQUAL(0.0, rec1.getPressureValue(0)); - BOOST_REQUIRE_EQUAL(0.13, rec1.getPvmultValue(1,2)); - BOOST_REQUIRE_EQUAL(rec1.sizeMultValues(), rockwnodTable1.getSaturationColumn().size()); - BOOST_REQUIRE_EQUAL(rec2.sizeMultValues(), rockwnodTable2.getSaturationColumn().size()); - BOOST_REQUIRE_EQUAL(0.0, rockwnodTable1.getSaturationColumn()[0]); - // convert from FIELD units to SI units - BOOST_CHECK_CLOSE(1.0 / 3.28084, overburdTable.getDepthColumn()[0], 1e-4); - BOOST_CHECK_CLOSE(1.0 * 6894.76, overburdTable.getOverburdenPressureColumn()[0], 1e-4); - BOOST_REQUIRE_EQUAL(0.0, rec1tr.getPressureValue(0)); - BOOST_REQUIRE_EQUAL(0.13, rec1tr.getTransMultValue(1,2)); -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/RunspecTests.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/RunspecTests.cpp deleted file mode 100644 index bd69bcb558..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/RunspecTests.cpp +++ /dev/null @@ -1,643 +0,0 @@ -/* -Copyright 2016 Statoil ASA. - -This file is part of the Open Porous Media project (OPM). - -OPM is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -OPM is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with OPM. If not, see . -*/ - -#define BOOST_TEST_MODULE RunspecTests - -#include - -#include -#include -#include - -using namespace Opm; - -BOOST_AUTO_TEST_CASE(PhaseFromString) { - BOOST_CHECK_THROW( get_phase("XXX") , std::invalid_argument ); - BOOST_CHECK_THROW( get_phase("WATE") , std::invalid_argument ); - BOOST_CHECK_THROW( get_phase("OI") , std::invalid_argument ); - BOOST_CHECK_THROW( get_phase("OILL") , std::invalid_argument ); - - BOOST_CHECK_EQUAL( Phase::OIL , get_phase("OIL") ); - BOOST_CHECK_EQUAL( Phase::WATER, get_phase("WATER") ); - BOOST_CHECK_EQUAL( Phase::WATER, get_phase("WAT") ); - BOOST_CHECK_EQUAL( Phase::GAS , get_phase("GAS") ); - BOOST_CHECK_EQUAL( Phase::POLYMW , get_phase("POLYMW") ); -} - -BOOST_AUTO_TEST_CASE(TwoPhase) { - const std::string input = R"( - RUNSPEC - OIL - WATER - )"; - - Parser parser; - - auto deck = parser.parseString(input); - - Runspec runspec( deck ); - const auto& phases = runspec.phases(); - BOOST_CHECK_EQUAL( 2, phases.size() ); - BOOST_CHECK( phases.active( Phase::OIL ) ); - BOOST_CHECK( !phases.active( Phase::GAS ) ); - BOOST_CHECK( phases.active( Phase::WATER ) ); - BOOST_CHECK( !phases.active( Phase::POLYMW ) ); - - const auto ECL_OIL_PHASE = 1 << 0; - const auto ECL_WATER_PHASE = 1 << 2; - - BOOST_CHECK_EQUAL( ECL_OIL_PHASE + ECL_WATER_PHASE , runspec.eclPhaseMask( )); -} - -BOOST_AUTO_TEST_CASE(ThreePhase) { - const std::string input = R"( - RUNSPEC - OIL - GAS - WATER - )"; - - Parser parser; - - auto deck = parser.parseString(input); - - Runspec runspec( deck ); - const auto& phases = runspec.phases(); - BOOST_CHECK_EQUAL( 3, phases.size() ); - BOOST_CHECK( phases.active( Phase::OIL ) ); - BOOST_CHECK( phases.active( Phase::GAS ) ); - BOOST_CHECK( phases.active( Phase::WATER ) ); - -} - - -BOOST_AUTO_TEST_CASE(TABDIMS) { - const std::string input = R"( - RUNSPEC - TABDIMS - 1 * 3 * 5 * / - OIL - GAS - WATER - )"; - - Parser parser; - - auto deck = parser.parseString(input); - - Runspec runspec( deck ); - const auto& tabdims = runspec.tabdims(); - BOOST_CHECK_EQUAL( tabdims.getNumSatTables( ) , 1 ); - BOOST_CHECK_EQUAL( tabdims.getNumPVTTables( ) , 1 ); - BOOST_CHECK_EQUAL( tabdims.getNumSatNodes( ) , 3 ); - BOOST_CHECK_EQUAL( tabdims.getNumPressureNodes( ) , 20 ); - BOOST_CHECK_EQUAL( tabdims.getNumFIPRegions( ) , 5 ); - BOOST_CHECK_EQUAL( tabdims.getNumRSNodes( ) , 20 ); -} - -BOOST_AUTO_TEST_CASE( EndpointScalingWithoutENDSCALE ) { - const std::string input = R"( - RUNSPEC - )"; - - Runspec runspec( Parser{}.parseString( input ) ); - const auto& endscale = runspec.endpointScaling(); - - BOOST_CHECK( !endscale ); - BOOST_CHECK( !endscale.directional() ); - BOOST_CHECK( !endscale.nondirectional() ); - BOOST_CHECK( !endscale.reversible() ); - BOOST_CHECK( !endscale.irreversible() ); -} - - - -BOOST_AUTO_TEST_CASE( EndpointScalingDefaulted ) { - const std::string input = R"( - RUNSPEC - ENDSCALE - / - )"; - - Runspec runspec( Parser{}.parseString( input ) ); - const auto& endscale = runspec.endpointScaling(); - - BOOST_CHECK( endscale ); - BOOST_CHECK( !endscale.directional() ); - BOOST_CHECK( endscale.nondirectional() ); - BOOST_CHECK( endscale.reversible() ); - BOOST_CHECK( !endscale.irreversible() ); -} - -BOOST_AUTO_TEST_CASE( EndpointScalingDIRECT ) { - const std::string input = R"( - RUNSPEC - ENDSCALE - DIRECT / - )"; - - Runspec runspec( Parser{}.parseString( input ) ); - const auto& endscale = runspec.endpointScaling(); - - BOOST_CHECK( endscale ); - BOOST_CHECK( endscale.directional() ); - BOOST_CHECK( !endscale.nondirectional() ); - BOOST_CHECK( endscale.reversible() ); - BOOST_CHECK( !endscale.irreversible() ); -} - -BOOST_AUTO_TEST_CASE( EndpointScalingDIRECT_IRREVERS ) { - const std::string input = R"( - RUNSPEC - ENDSCALE - direct IRREVERS / - )"; - - Runspec runspec( Parser{}.parseString( input ) ); - const auto& endscale = runspec.endpointScaling(); - - BOOST_CHECK( endscale ); - BOOST_CHECK( endscale.directional() ); - BOOST_CHECK( !endscale.nondirectional() ); - BOOST_CHECK( !endscale.reversible() ); - BOOST_CHECK( endscale.irreversible() ); -} - -BOOST_AUTO_TEST_CASE( SCALECRS_without_ENDSCALE ) { - const std::string input = R"( - RUNSPEC - SCALECRS - / - )"; - - Runspec runspec( Parser{}.parseString( input ) ); - const auto& endscale = runspec.endpointScaling(); - - BOOST_CHECK( !endscale ); - BOOST_CHECK( !endscale.twopoint() ); - BOOST_CHECK( !endscale.threepoint() ); -} - -BOOST_AUTO_TEST_CASE( SCALECRS_N ) { - const std::string N = R"( - RUNSPEC - ENDSCALE - / - SCALECRS - N / - )"; - - const std::string defaulted = R"( - RUNSPEC - ENDSCALE - / - SCALECRS - / - )"; - - for( const auto& input : { N, defaulted } ) { - Runspec runspec( Parser{}.parseString( input ) ); - const auto& endscale = runspec.endpointScaling(); - - BOOST_CHECK( endscale ); - BOOST_CHECK( endscale.twopoint() ); - BOOST_CHECK( !endscale.threepoint() ); - } -} - -BOOST_AUTO_TEST_CASE( SCALECRS_Y ) { - const std::string input = R"( - RUNSPEC - ENDSCALE - / - SCALECRS - Y / - )"; - - Runspec runspec( Parser{}.parseString( input ) ); - const auto& endscale = runspec.endpointScaling(); - - BOOST_CHECK( endscale ); - BOOST_CHECK( !endscale.twopoint() ); - BOOST_CHECK( endscale.threepoint() ); -} - -BOOST_AUTO_TEST_CASE( endpoint_scaling_throw_invalid_argument ) { - - const std::string inputs[] = { - R"( - RUNSPEC - ENDSCALE - NODIR IRREVERSIBLE / -- irreversible requires direct - )", - R"( - RUNSPEC - ENDSCALE - * IRREVERSIBLE / -- irreversible requires direct *specified* - )", - R"( - RUNSPEC - ENDSCALE -- ENDSCALE can't take arbitrary input (takes enumeration) - broken / - )", - R"( - RUNSPEC - ENDSCALE - / - SCALECRS -- SCALECRS takes YES/NO - broken / - )", - }; - - for( auto&& input : inputs ) { - auto deck = Parser{}.parseString( input ); - BOOST_CHECK_THROW( Runspec{ deck }, std::invalid_argument ); - } -} - -BOOST_AUTO_TEST_CASE(WELLDIMS_FullSpec) -{ - const auto input = std::string { - R"( -RUNSPEC - -WELLDIMS - 130 36 15 84 / -)" }; - - const auto wd = Welldims { - Parser{}.parseString(input) - }; - - BOOST_CHECK_EQUAL(wd.maxConnPerWell(), 36); // WELLDIMS(2) - BOOST_CHECK_EQUAL(wd.maxWellsPerGroup(), 84); // WELLDIMS(4) - BOOST_CHECK_EQUAL(wd.maxGroupsInField(), 15); // WELLDIMS(3) -} - -BOOST_AUTO_TEST_CASE(WELLDIMS_AllDefaulted) -{ - const auto input = std::string { - R"( -RUNSPEC - -WELLDIMS -/ -)" }; - - const auto wd = Welldims { - Parser{}.parseString(input) - }; - - BOOST_CHECK_EQUAL(wd.maxConnPerWell(), 0); // WELLDIMS(2), defaulted - BOOST_CHECK_EQUAL(wd.maxWellsPerGroup(), 0); // WELLDIMS(4), defaulted - BOOST_CHECK_EQUAL(wd.maxGroupsInField(), 0); // WELLDIMS(3), defaulted -} - -BOOST_AUTO_TEST_CASE(WELLDIMS_MaxConn) -{ - const auto input = std::string { - R"( -RUNSPEC - -WELLDIMS -1* 36 / -)" }; - - const auto wd = Welldims { - Parser{}.parseString(input) - }; - - BOOST_CHECK_EQUAL(wd.maxConnPerWell(), 36); // WELLDIMS(2) - BOOST_CHECK_EQUAL(wd.maxWellsPerGroup(), 0); // WELLDIMS(4), defaulted - BOOST_CHECK_EQUAL(wd.maxGroupsInField(), 0); // WELLDIMS(3), defaulted -} - -BOOST_AUTO_TEST_CASE(WELLDIMS_MaxGroups) -{ - const auto input = std::string { - R"( -RUNSPEC - -WELLDIMS -2* 4 / -)" }; - - const auto wd = Welldims { - Parser{}.parseString(input) - }; - - BOOST_CHECK_EQUAL(wd.maxConnPerWell(), 0); // WELLDIMS(2), defaulted - BOOST_CHECK_EQUAL(wd.maxWellsPerGroup(), 0); // WELLDIMS(4), defaulted - BOOST_CHECK_EQUAL(wd.maxGroupsInField(), 4); // WELLDIMS(3) -} - -BOOST_AUTO_TEST_CASE(WELLDIMS_MaxWellsInGrp) -{ - const auto input = std::string { - R"( -RUNSPEC - -WELLDIMS -3* 33 / -)" }; - - const auto wd = Welldims { - Parser{}.parseString(input) - }; - - BOOST_CHECK_EQUAL(wd.maxConnPerWell(), 0); // WELLDIMS(2), defaulted - BOOST_CHECK_EQUAL(wd.maxWellsPerGroup(), 33); // WELLDIMS(4) - BOOST_CHECK_EQUAL(wd.maxGroupsInField(), 0); // WELLDIMS(3), defaulted -} - -BOOST_AUTO_TEST_CASE(WSEGDIMS_NotSpecified) -{ - const auto input = std::string { - R"( -RUNSPEC -)" }; - - const auto wsd = WellSegmentDims { - Parser{}.parseString(input) - }; - - BOOST_CHECK_EQUAL(wsd.maxSegmentedWells(), 0); // WSEGDIMS1), defaulted - BOOST_CHECK_EQUAL(wsd.maxSegmentsPerWell(), 1); // WSEGDIMS(2), defaulted - BOOST_CHECK_EQUAL(wsd.maxLateralBranchesPerWell(), 1); // WSEGDIMS(3), defaulted -} - -BOOST_AUTO_TEST_CASE(WSEGDIMS_AllDefaulted) -{ - const auto input = std::string { - R"( -RUNSPEC - -WSEGDIMS -/ -)" }; - - const auto wsd = WellSegmentDims { - Parser{}.parseString(input) - }; - - BOOST_CHECK_EQUAL(wsd.maxSegmentedWells(), 0); // WSEGDIMS1), defaulted - BOOST_CHECK_EQUAL(wsd.maxSegmentsPerWell(), 1); // WSEGDIMS(2), defaulted - BOOST_CHECK_EQUAL(wsd.maxLateralBranchesPerWell(), 1); // WSEGDIMS(3), defaulted -} - -BOOST_AUTO_TEST_CASE(WSEGDIMS_MaxSegmentedWells) -{ - const auto input = std::string { - R"( -RUNSPEC - -WSEGDIMS - 11 -/ -)" }; - - const auto wsd = WellSegmentDims { - Parser{}.parseString(input) - }; - - BOOST_CHECK_EQUAL(wsd.maxSegmentedWells(), 11); // WSEGDIMS(1) - BOOST_CHECK_EQUAL(wsd.maxSegmentsPerWell(), 1); // WSEGDIMS(2), defaulted - BOOST_CHECK_EQUAL(wsd.maxLateralBranchesPerWell(), 1); // WSEGDIMS(3), defaulted -} - -BOOST_AUTO_TEST_CASE(WSEGDIMS_MaxSegmentsPerWell) -{ - const auto input = std::string { - R"( -RUNSPEC - -WSEGDIMS - 1* 22 -/ -)" }; - - const auto wsd = WellSegmentDims { - Parser{}.parseString(input) - }; - - BOOST_CHECK_EQUAL(wsd.maxSegmentedWells(), 0); // WSEGDIMS(1), defaulted - BOOST_CHECK_EQUAL(wsd.maxSegmentsPerWell(), 22); // WSEGDIMS(2) - BOOST_CHECK_EQUAL(wsd.maxLateralBranchesPerWell(), 1); // WSEGDIMS(3), defaulted -} - -BOOST_AUTO_TEST_CASE(WSEGDIMS_MaxLatBrPerWell) -{ - const auto input = std::string { - R"( -RUNSPEC - -WSEGDIMS - 2* 33 -/ -)" }; - - const auto wsd = WellSegmentDims { - Parser{}.parseString(input) - }; - - BOOST_CHECK_EQUAL(wsd.maxSegmentedWells(), 0); // WSEGDIMS(1), defaulted - BOOST_CHECK_EQUAL(wsd.maxSegmentsPerWell(), 1); // WSEGDIMS(2), defaulted - BOOST_CHECK_EQUAL(wsd.maxLateralBranchesPerWell(), 33); // WSEGDIMS(3) -} - -BOOST_AUTO_TEST_CASE( SWATINIT ) { - const std::string input = R"( - SWATINIT - 1000*0.25 / - )"; - - Runspec runspec( Parser{}.parseString( input ) ); - const auto& endscale = runspec.endpointScaling(); - BOOST_CHECK( endscale ); - BOOST_CHECK( !endscale.directional() ); - BOOST_CHECK( endscale.nondirectional() ); - BOOST_CHECK( endscale.reversible() ); - BOOST_CHECK( !endscale.irreversible() ); - -} - -BOOST_AUTO_TEST_CASE(TolCrit) -{ - { - const auto sfctrl = ::Opm::SatFuncControls{}; - BOOST_CHECK_CLOSE(sfctrl.minimumRelpermMobilityThreshold(), 1.0e-6, 1.0e-10); - BOOST_CHECK_MESSAGE(sfctrl == ::Opm::SatFuncControls{}, - "Default-constructed SatFuncControl must equal itself"); - } - - { - const auto sfctrl = ::Opm::SatFuncControls{ 5.0e-7, ::Opm::SatFuncControls::ThreePhaseOilKrModel::Default }; - BOOST_CHECK_CLOSE(sfctrl.minimumRelpermMobilityThreshold(), 5.0e-7, 1.0e-10); - BOOST_CHECK_MESSAGE(!(sfctrl == ::Opm::SatFuncControls{}), - "Default-constructed SatFuncControl must NOT equal non-default"); - - const auto deck = ::Opm::Parser{}.parseString(R"( -TOLCRIT - 5.0E-7 / -)"); - BOOST_CHECK_CLOSE(sfctrl.minimumRelpermMobilityThreshold(), - ::Opm::SatFuncControls{deck}.minimumRelpermMobilityThreshold(), - 1.0e-10); - } - - { - const auto deck = ::Opm::Parser{}.parseString(R"( -RUNSPEC -END -)"); - - const auto rspec = ::Opm::Runspec{deck}; - const auto sfctrl = rspec.saturationFunctionControls(); - - BOOST_CHECK_CLOSE(sfctrl.minimumRelpermMobilityThreshold(), 1.0e-6, 1.0e-10); - } - - { - const auto deck = ::Opm::Parser{}.parseString(R"( -TOLCRIT - 5.0E-7 / -)"); - - const auto rspec = ::Opm::Runspec{deck}; - const auto sfctrl = rspec.saturationFunctionControls(); - - BOOST_CHECK_CLOSE(sfctrl.minimumRelpermMobilityThreshold(), 5.0e-7, 1.0e-10); - } -} - -BOOST_AUTO_TEST_CASE(Solvent) { - const std::string input = R"( - RUNSPEC - OIL - GAS - WATER - SOLVENT - )"; - - Parser parser; - - auto deck = parser.parseString(input); - - Runspec runspec( deck ); - const auto& phases = runspec.phases(); - BOOST_CHECK_EQUAL( 4, phases.size() ); - BOOST_CHECK( phases.active( Phase::OIL ) ); - BOOST_CHECK( phases.active( Phase::GAS ) ); - BOOST_CHECK( phases.active( Phase::WATER ) ); - BOOST_CHECK( phases.active( Phase::SOLVENT ) ); - BOOST_CHECK( !phases.active( Phase::POLYMW) ); - - -} - -BOOST_AUTO_TEST_CASE(Polymer) { - const std::string input = R"( - RUNSPEC - OIL - GAS - WATER - POLYMER - )"; - - Parser parser; - - auto deck = parser.parseString(input); - - Runspec runspec( deck ); - const auto& phases = runspec.phases(); - BOOST_CHECK_EQUAL( 4, phases.size() ); - BOOST_CHECK( phases.active( Phase::OIL ) ); - BOOST_CHECK( phases.active( Phase::GAS ) ); - BOOST_CHECK( phases.active( Phase::WATER ) ); - BOOST_CHECK( phases.active( Phase::POLYMER ) ); - BOOST_CHECK( !phases.active( Phase::POLYMW) ); - - -} - -BOOST_AUTO_TEST_CASE(PolymerMolecularWeight) { - const std::string input = R"( - RUNSPEC - OIL - WATER - POLYMER - POLYMW - )"; - - Parser parser; - - auto deck = parser.parseString(input); - - Runspec runspec( deck ); - const auto& phases = runspec.phases(); - BOOST_CHECK_EQUAL( 4, phases.size() ); - BOOST_CHECK( phases.active( Phase::OIL ) ); - BOOST_CHECK( !phases.active( Phase::GAS ) ); - BOOST_CHECK( phases.active( Phase::WATER ) ); - BOOST_CHECK( phases.active( Phase::POLYMER ) ); - BOOST_CHECK( phases.active( Phase::POLYMW) ); -} - - -BOOST_AUTO_TEST_CASE(Foam) { - const std::string input = R"( - RUNSPEC - OIL - GAS - WATER - FOAM - )"; - - Parser parser; - - auto deck = parser.parseString(input); - - Runspec runspec( deck ); - const auto& phases = runspec.phases(); - BOOST_CHECK_EQUAL( 4, phases.size() ); - BOOST_CHECK( phases.active( Phase::OIL ) ); - BOOST_CHECK( phases.active( Phase::GAS ) ); - BOOST_CHECK( phases.active( Phase::WATER ) ); - BOOST_CHECK( phases.active( Phase::FOAM) ); - - // not in deck - default constructor. - const auto& actdims = runspec.actdims(); - BOOST_CHECK_EQUAL(actdims.max_keywords(), 2); -} - -BOOST_AUTO_TEST_CASE(ACTDIMS) { - const std::string input = R"( - RUNSPEC - ACTDIMS - 2* 13 14 / - )"; - - Parser parser; - auto deck = parser.parseString(input); - - Runspec runspec( deck ); - const auto& actdims = runspec.actdims(); - BOOST_CHECK_EQUAL(actdims.max_keywords(), 2); - BOOST_CHECK_EQUAL(actdims.max_conditions(), 14); -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/SaltTableTests.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/SaltTableTests.cpp deleted file mode 100644 index 9a1e6626cf..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/SaltTableTests.cpp +++ /dev/null @@ -1,111 +0,0 @@ -/* - Copyright (C) 2019 by Norce - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#define BOOST_TEST_MODULE SaltTableTests - -#include - -#include -#include -#include -#include - -// generic table classes -#include -#include -#include -#include - -// keyword specific table classes - -#include -#include - -#include -#include - -using namespace Opm; - -inline std::string prefix() { - return boost::unit_test::framework::master_test_suite().argv[1]; -} - - -BOOST_AUTO_TEST_CASE( Brine ) { - const char *deckData = - "TABDIMS\n" - "1 1/\n" - "\n" - "PVTWSALT\n" - " 1000/\n" - " 0 1 2 3 4 \n" - " 10 11 12 13 14/\n" - " \n" - "BDENSITY\n" - " 1000 1050 /\n" - "\n" - "EQLDIMS\n" - "1 /\n" - "\n" - "SALTVD\n" - "500 0\n" - "550 50/\n"; - - Opm::Parser parser; - auto deck = parser.parseString(deckData); - - Opm::TableManager tables(deck); - const auto& PvtwsaltTables = tables.getPvtwSaltTables( ); - BOOST_CHECK_EQUAL( 1 , PvtwsaltTables.size() ); - BOOST_CHECK_EQUAL(2, PvtwsaltTables[0].size()); - - const auto& PvtwsaltTable1 = PvtwsaltTables[0]; - BOOST_CHECK_EQUAL (PvtwsaltTable1.getSaltConcentrationColumn().size(), 2); - BOOST_CHECK_CLOSE (PvtwsaltTable1.getSaltConcentrationColumn()[1], 10, 1e-5); - - BOOST_CHECK_EQUAL (PvtwsaltTable1.getFormationVolumeFactorColumn().size(), 2); - BOOST_CHECK_CLOSE (PvtwsaltTable1.getFormationVolumeFactorColumn()[0], 1, 1e-5); - - BOOST_CHECK_EQUAL (PvtwsaltTable1.getCompressibilityColumn().size(), 2); - BOOST_CHECK_CLOSE (PvtwsaltTable1.getCompressibilityColumn()[1], 12/1e5, 1e-5); - - BOOST_CHECK_EQUAL (PvtwsaltTable1.getViscosityColumn().size(), 2); - BOOST_CHECK_CLOSE (PvtwsaltTable1.getViscosityColumn()[1], 13*0.001, 1e-5); - - BOOST_CHECK_CLOSE (PvtwsaltTable1.getReferencePressureValue(), 1000*1e5, 1e-5); - - const auto& BdensityTables = tables.getBrineDensityTables( ); - const auto& BdensityTable1 = BdensityTables[0]; - - BOOST_CHECK_EQUAL( 1 , BdensityTables.size() ); - BOOST_CHECK_EQUAL (BdensityTable1.getBrineDensityColumn().size(), 2); - BOOST_CHECK_CLOSE (BdensityTable1.getBrineDensityColumn()[1], 1050, 1e-5); - - const Opm::TableContainer& saltvdTables = tables.getSaltvdTables(); - const auto& saltvdTable = saltvdTables.getTable(0); - - BOOST_CHECK_EQUAL(saltvdTable.getDepthColumn() .size(), 2); - BOOST_CHECK_CLOSE (saltvdTable.getSaltColumn() [1],50, 1e-5); - - -} - - - - diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/ScheduleRestartTests.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/ScheduleRestartTests.cpp deleted file mode 100644 index 14727bd26b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/ScheduleRestartTests.cpp +++ /dev/null @@ -1,107 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#define BOOST_TEST_MODULE ScheduleTests - -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -using namespace Opm; - -void compare_connections(const RestartIO::RstConnection& rst_conn, const Connection& sched_conn) { - BOOST_CHECK_EQUAL(rst_conn.ijk[0], sched_conn.getI()); - BOOST_CHECK_EQUAL(rst_conn.ijk[1], sched_conn.getJ()); - BOOST_CHECK_EQUAL(rst_conn.ijk[2], sched_conn.getK()); - - BOOST_CHECK_EQUAL(rst_conn.segment, sched_conn.segment()); - BOOST_CHECK_EQUAL(rst_conn.rst_index, static_cast(sched_conn.sort_value())); - BOOST_CHECK(rst_conn.state == sched_conn.state()); - BOOST_CHECK(rst_conn.dir == sched_conn.dir()); - BOOST_CHECK_CLOSE( rst_conn.cf, sched_conn.CF() , 1e-6); -} - - - -void compare_wells(const RestartIO::RstWell& rst_well, const Well& sched_well) { - BOOST_CHECK_EQUAL(rst_well.name, sched_well.name()); - BOOST_CHECK_EQUAL(rst_well.group, sched_well.groupName()); - - const auto& sched_connections = sched_well.getConnections(); - BOOST_CHECK_EQUAL(sched_connections.size(), rst_well.connections.size()); - - for (std::size_t ic=0; ic < rst_well.connections.size(); ic++) { - const auto& rst_conn = rst_well.connections[ic]; - const auto& sched_conn = sched_connections[ic]; - compare_connections(rst_conn, sched_conn); - } -} - - -BOOST_AUTO_TEST_CASE(LoadRST) { - Parser parser; - auto deck = parser.parseFile("SPE1CASE2.DATA"); - EclIO::ERst rst_file("SPE1CASE2.X0060"); - auto rst_state = RestartIO::RstState::load(rst_file, 60); - BOOST_REQUIRE_THROW( rst_state.get_well("NO_SUCH_WELL"), std::out_of_range); - auto python = std::make_shared(); - EclipseState ecl_state(deck); - Schedule sched(deck, ecl_state, python); - const auto& well_names = sched.wellNames(60); - BOOST_CHECK_EQUAL(well_names.size(), rst_state.wells.size()); - - for (const auto& wname : well_names) { - const auto& rst_well = rst_state.get_well(wname); - const auto& sched_well = sched.getWell(wname, 60); - compare_wells(rst_well, sched_well); - } -} - -BOOST_AUTO_TEST_CASE(LoadRestartSim) { - auto python = std::make_shared(); - Parser parser; - auto deck = parser.parseFile("SPE1CASE2.DATA"); - EclipseState ecl_state(deck); - Schedule sched(deck, ecl_state, python); - - auto restart_deck = parser.parseFile("SPE1CASE2_RESTART.DATA"); - EclIO::ERst rst_file("SPE1CASE2.X0060"); - auto rst_state = RestartIO::RstState::load(rst_file, 60); - EclipseState ecl_state_restart(restart_deck); - Schedule restart_sched(restart_deck, ecl_state_restart, python, &rst_state); - - // Verify that sched and restart_sched are identical from report_step 60 and onwords. -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/ScheduleTests.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/ScheduleTests.cpp deleted file mode 100644 index 1474c5f5e7..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/ScheduleTests.cpp +++ /dev/null @@ -1,3875 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include -#include -#include - -#define BOOST_TEST_MODULE ScheduleTests - -#include -#include - -#include - - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -using namespace Opm; - -static Deck createDeck() { - Opm::Parser parser; - std::string input = - "START\n" - "8 MAR 1998 /\n" - "\n" - "SCHEDULE\n" - "\n"; - - return parser.parseString(input); -} - -static Deck createDeckWithWells() { - Opm::Parser parser; - std::string input = - "START -- 0 \n" - "10 MAI 2007 / \n" - "SCHEDULE\n" - "WELSPECS\n" - " \'W_1\' \'OP\' 30 37 3.33 \'OIL\' 7* / \n" - "/ \n" - "DATES -- 1\n" - " 10 \'JUN\' 2007 / \n" - "/\n" - "DATES -- 2,3\n" - " 10 JLY 2007 / \n" - " 10 AUG 2007 / \n" - "/\n" - "WELSPECS\n" - " \'WX2\' \'OP\' 30 37 3.33 \'OIL\' 7* / \n" - " \'W_3\' \'OP\' 20 51 3.92 \'OIL\' 7* / \n" - "/\n"; - - return parser.parseString(input); -} - -static Deck createDeckWTEST() { - Opm::Parser parser; - std::string input = - "START -- 0 \n" - "10 MAI 2007 / \n" - "SCHEDULE\n" - "WELSPECS\n" - " \'DEFAULT\' \'OP\' 30 37 3.33 \'OIL\' 7*/ \n" - " \'ALLOW\' \'OP\' 30 37 3.33 \'OIL\' 3* YES / \n" - " \'BAN\' \'OP\' 20 51 3.92 \'OIL\' 3* NO / \n" - " \'W1\' \'OP\' 20 51 3.92 \'OIL\' 3* NO / \n" - " \'W2\' \'OP\' 20 51 3.92 \'OIL\' 3* NO / \n" - " \'W3\' \'OP\' 20 51 3.92 \'OIL\' 3* NO / \n" - "/\n" - - "COMPDAT\n" - " \'BAN\' 1 1 1 1 \'OPEN\' 1* 1.168 0.311 107.872 1* 1* \'Z\' 21.925 / \n" - "/\n" - - "WCONHIST\n" - " 'BAN' 'OPEN' 'RESV' 0.000 0.000 0.000 5* / \n" - "/\n" - - "WTEST\n" - " 'ALLOW' 1 'PE' / \n" - "/\n" - - "DATES -- 1\n" - " 10 JUN 2007 / \n" - "/\n" - - "WTEST\n" - " 'ALLOW' 1 '' / \n" - " 'BAN' 1 'DGC' / \n" - "/\n" - - "WCONHIST\n" - " 'BAN' 'OPEN' 'RESV' 1.000 0.000 0.000 5* / \n" - "/\n" - - "DATES -- 2\n" - " 10 JUL 2007 / \n" - "/\n" - - "WELSPECS\n" - " \'I1\' \'OP\' 20 51 3.92 \'OIL\' 3* NO / \n" - " \'I2\' \'OP\' 20 51 3.92 \'OIL\' 3* NO / \n" - " \'I3\' \'OP\' 20 51 3.92 \'OIL\' 3* NO / \n" - "/\n" - - "WLIST\n" - " \'*ILIST\' \'NEW\' I1 /\n" - " \'*ILIST\' \'ADD\' I2 /\n" - "/\n" - - "WCONPROD\n" - " 'BAN' 'OPEN' 'ORAT' 0.000 0.000 0.000 5* / \n" - "/\n" - - - "DATES -- 3\n" - " 10 AUG 2007 / \n" - "/\n" - - "WCONINJH\n" - " 'BAN' 'WATER' 1* 0 / \n" - "/\n" - - "DATES -- 4\n" - " 10 SEP 2007 / \n" - "/\n" - - "WELOPEN\n" - " 'BAN' OPEN / \n" - "/\n" - - "DATES -- 4\n" - " 10 NOV 2007 / \n" - "/\n" - - "WCONINJH\n" - " 'BAN' 'WATER' 1* 1.0 / \n" - "/\n"; - - - return parser.parseString(input); -} - -static Deck createDeckForTestingCrossFlow() { - Opm::Parser parser; - std::string input = - "START -- 0 \n" - "10 MAI 2007 / \n" - "SCHEDULE\n" - "WELSPECS\n" - " \'DEFAULT\' \'OP\' 30 37 3.33 \'OIL\' 7*/ \n" - " \'ALLOW\' \'OP\' 30 37 3.33 \'OIL\' 3* YES / \n" - " \'BAN\' \'OP\' 20 51 3.92 \'OIL\' 3* NO / \n" - "/\n" - - "COMPDAT\n" - " \'BAN\' 1 1 1 1 \'OPEN\' 1* 1.168 0.311 107.872 1* 1* \'Z\' 21.925 / \n" - "/\n" - - "WCONHIST\n" - " 'BAN' 'OPEN' 'RESV' 0.000 0.000 0.000 5* / \n" - "/\n" - - "DATES -- 1\n" - " 10 JUN 2007 / \n" - "/\n" - - "WCONHIST\n" - " 'BAN' 'OPEN' 'RESV' 1.000 0.000 0.000 5* / \n" - "/\n" - - "DATES -- 2\n" - " 10 JUL 2007 / \n" - "/\n" - - "WCONPROD\n" - " 'BAN' 'OPEN' 'ORAT' 0.000 0.000 0.000 5* / \n" - "/\n" - - - "DATES -- 3\n" - " 10 AUG 2007 / \n" - "/\n" - - "WCONINJH\n" - " 'BAN' 'WATER' 1* 0 / \n" - "/\n" - - "DATES -- 4\n" - " 10 SEP 2007 / \n" - "/\n" - - "WELOPEN\n" - " 'BAN' OPEN / \n" - "/\n" - - "DATES -- 4\n" - " 10 NOV 2007 / \n" - "/\n" - - "WCONINJH\n" - " 'BAN' 'WATER' 1* 1.0 / \n" - "/\n"; - - - return parser.parseString(input); -} - -static Deck createDeckWithWellsOrdered() { - Opm::Parser parser; - std::string input = - "START -- 0 \n" - "10 MAI 2007 / \n" - "SCHEDULE\n" - "WELSPECS\n" - " \'CW_1\' \'CG\' 30 37 3.33 \'OIL\' 7* / \n" - " \'BW_2\' \'BG\' 30 37 3.33 \'OIL\' 7* / \n" - " \'AW_3\' \'AG\' 20 51 3.92 \'OIL\' 7* / \n" - "/\n"; - - return parser.parseString(input); -} - -static Deck createDeckWithWellsOrderedGRUPTREE() { - Opm::Parser parser; - std::string input = - "START -- 0 \n" - "10 MAI 2007 / \n" - "SCHEDULE\n" - "GRUPTREE\n" - " PG1 PLATFORM /\n" - " PG2 PLATFORM /\n" - " CG1 PG1 /\n" - " CG2 PG2 /\n" - "/\n" - "WELSPECS\n" - " \'DW_0\' \'CG1\' 30 37 3.33 \'OIL\' 7* / \n" - " \'CW_1\' \'CG1\' 30 37 3.33 \'OIL\' 7* / \n" - " \'BW_2\' \'CG2\' 30 37 3.33 \'OIL\' 7* / \n" - " \'AW_3\' \'CG2\' 20 51 3.92 \'OIL\' 7* / \n" - "/\n"; - - return parser.parseString(input); -} - -static Deck createDeckWithWellsAndCompletionData() { - Opm::Parser parser; - std::string input = - "START -- 0 \n" - "1 NOV 1979 / \n" - "SCHEDULE\n" - "DATES -- 1\n" - " 1 DES 1979/ \n" - "/\n" - "WELSPECS\n" - " 'OP_1' 'OP' 9 9 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / \n" - " 'OP_2' 'OP' 8 8 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / \n" - " 'OP_3' 'OP' 7 7 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / \n" - "/\n" - "COMPDAT\n" - " 'OP_1' 9 9 1 1 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / \n" - " 'OP_1' 9 9 2 2 'OPEN' 1* 46.825 0.311 4332.346 1* 1* 'X' 22.123 / \n" - " 'OP_2' 8 8 1 3 'OPEN' 1* 1.168 0.311 107.872 1* 1* 'Y' 21.925 / \n" - " 'OP_2' 8 7 3 3 'OPEN' 1* 15.071 0.311 1391.859 1* 1* 'Y' 21.920 / \n" - " 'OP_2' 8 7 3 6 'OPEN' 1* 6.242 0.311 576.458 1* 1* 'Y' 21.915 / \n" - " 'OP_3' 7 7 1 1 'OPEN' 1* 27.412 0.311 2445.337 1* 1* 'Y' 18.521 / \n" - " 'OP_3' 7 7 2 2 'OPEN' 1* 55.195 0.311 4923.842 1* 1* 'Y' 18.524 / \n" - "/\n" - "DATES -- 2,3\n" - " 10 JUL 2007 / \n" - " 10 AUG 2007 / \n" - "/\n" - "COMPDAT\n" // with defaulted I and J - " 'OP_1' 0 * 3 9 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / \n" - "/\n"; - - return parser.parseString(input); -} - -static Deck createDeckRFTConfig() { - return ::Opm::Parser{}.parseString(R"(RUNSPEC -START -- 0 - 1 NOV 1979 / -SCHEDULE -DATES -- 1 (sim step = 0) - 1 DES 1979/ -/ -WELSPECS - 'OP_1' 'OP' 9 9 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / - 'OP_2' 'OP' 8 8 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / - 'OP_3' 'OP' 7 7 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / -/ -COMPDAT - 'OP_1' 9 9 1 1 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / - 'OP_1' 9 9 2 2 'OPEN' 1* 46.825 0.311 4332.346 1* 1* 'X' 22.123 / - 'OP_2' 8 8 1 3 'OPEN' 1* 1.168 0.311 107.872 1* 1* 'Y' 21.925 / - 'OP_2' 8 7 3 3 'OPEN' 1* 15.071 0.311 1391.859 1* 1* 'Y' 21.920 / - 'OP_2' 8 7 3 6 'OPEN' 1* 6.242 0.311 576.458 1* 1* 'Y' 21.915 / - 'OP_3' 7 7 1 1 'OPEN' 1* 27.412 0.311 2445.337 1* 1* 'Y' 18.521 / - 'OP_3' 7 7 2 2 'OPEN' 1* 55.195 0.311 4923.842 1* 1* 'Y' 18.524 / -/ -WELOPEN - 'OP_2' 'OPEN' / -/ -DATES -- 2 (sim step = 1) - 10 JUL 2007 / -/ -WRFTPLT - 'OP_2' 'YES' 'NO' 'NO' / -/ -DATES -- 3 (sim step = 2) - 10 AUG 2007 / -/ -COMPDAT --- with defaulted I and J - 'OP_1' 0 * 3 9 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / -/ -END -)"); -} - -BOOST_AUTO_TEST_CASE(CreateScheduleDeckMissingReturnsDefaults) { - Deck deck; - Parser parser; - deck.addKeyword( DeckKeyword( parser.getKeyword("SCHEDULE" ))); - auto python = std::make_shared(); - EclipseGrid grid(10,10,10); - TableManager table ( deck ); - FieldPropsManager fp( deck, Phases{true, true, true}, grid, table); - Runspec runspec (deck); - Schedule schedule(deck, grid , fp, runspec, python); - BOOST_CHECK_EQUAL( schedule.getStartTime() , TimeMap::mkdate(1983, 1 , 1)); -} - -BOOST_AUTO_TEST_CASE(CreateScheduleDeckWellsOrdered) { - auto deck = createDeckWithWellsOrdered(); - auto python = std::make_shared(); - EclipseGrid grid(100,100,100); - TableManager table ( deck ); - FieldPropsManager fp( deck, Phases{true, true, true}, grid, table); - Runspec runspec (deck); - Schedule schedule(deck, grid , fp, runspec, python); - auto well_names = schedule.wellNames(); - - BOOST_CHECK_EQUAL( "CW_1" , well_names[0]); - BOOST_CHECK_EQUAL( "BW_2" , well_names[1]); - BOOST_CHECK_EQUAL( "AW_3" , well_names[2]); - - auto group_names = schedule.groupNames(); - BOOST_CHECK_EQUAL( "FIELD", group_names[0]); - BOOST_CHECK_EQUAL( "CG", group_names[1]); - BOOST_CHECK_EQUAL( "BG", group_names[2]); - BOOST_CHECK_EQUAL( "AG", group_names[3]); -} - - -bool has_well( const std::vector& wells, const std::string& well_name) { - for (const auto& well : wells ) - if (well.name( ) == well_name) - return true; - return false; -} - - -BOOST_AUTO_TEST_CASE(CreateScheduleDeckWellsOrderedGRUPTREE) { - auto deck = createDeckWithWellsOrderedGRUPTREE(); - auto python = std::make_shared(); - EclipseGrid grid(100,100,100); - TableManager table ( deck ); - FieldPropsManager fp( deck, Phases{true, true, true}, grid, table); - Runspec runspec (deck); - Schedule schedule(deck, grid , fp, runspec, python); - - BOOST_CHECK_THROW( schedule.getChildWells2( "NO_SUCH_GROUP" , 1 ), std::invalid_argument); - { - auto field_wells = schedule.getChildWells2("FIELD" , 0); - BOOST_CHECK_EQUAL( field_wells.size() , 4U); - - BOOST_CHECK( has_well( field_wells, "DW_0" )); - BOOST_CHECK( has_well( field_wells, "CW_1" )); - BOOST_CHECK( has_well( field_wells, "BW_2" )); - BOOST_CHECK( has_well( field_wells, "AW_3" )); - } - - { - auto platform_wells = schedule.getChildWells2("PLATFORM" , 0); - BOOST_CHECK_EQUAL( platform_wells.size() , 4U); - - BOOST_CHECK( has_well( platform_wells, "DW_0" )); - BOOST_CHECK( has_well( platform_wells, "CW_1" )); - BOOST_CHECK( has_well( platform_wells, "BW_2" )); - BOOST_CHECK( has_well( platform_wells, "AW_3" )); - } - - { - auto child_wells1 = schedule.getChildWells2("CG1" , 0); - BOOST_CHECK_EQUAL( child_wells1.size() , 2U); - - BOOST_CHECK( has_well( child_wells1, "DW_0" )); - BOOST_CHECK( has_well( child_wells1, "CW_1" )); - } - - { - auto parent_wells2 = schedule.getChildWells2("PG2" , 0); - BOOST_CHECK_EQUAL( parent_wells2.size() , 2U); - - BOOST_CHECK( has_well( parent_wells2, "BW_2" )); - BOOST_CHECK( has_well( parent_wells2, "AW_3" )); - } - auto group_names = schedule.groupNames("P*", 0); - BOOST_CHECK( std::find(group_names.begin(), group_names.end(), "PG1") != group_names.end() ); - BOOST_CHECK( std::find(group_names.begin(), group_names.end(), "PG2") != group_names.end() ); - BOOST_CHECK( std::find(group_names.begin(), group_names.end(), "PLATFORM") != group_names.end() ); -} - - -BOOST_AUTO_TEST_CASE(GroupTree2TEST) { - auto deck = createDeckWithWellsOrderedGRUPTREE(); - auto python = std::make_shared(); - EclipseGrid grid(100,100,100); - TableManager table ( deck ); - FieldPropsManager fp( deck, Phases{true, true, true}, grid, table); - Runspec runspec (deck); - Schedule schedule(deck, grid , fp, runspec, python); - - BOOST_CHECK_THROW( schedule.groupTree("NO_SUCH_GROUP", 0), std::invalid_argument); - auto cg1 = schedule.getGroup("CG1", 0); - BOOST_CHECK( cg1.hasWell("DW_0")); - BOOST_CHECK( cg1.hasWell("CW_1")); - - auto cg1_tree = schedule.groupTree("CG1", 0); - BOOST_CHECK_EQUAL(cg1_tree.wells().size(), 2); - - auto gt = schedule.groupTree(0); - BOOST_CHECK_EQUAL(gt.wells().size(), 0); - BOOST_CHECK_EQUAL(gt.group().name(), "FIELD"); - BOOST_CHECK_THROW(gt.parent_name(), std::invalid_argument); - - auto cg = gt.groups(); - auto pg = cg[0]; - BOOST_CHECK_EQUAL(cg.size(), 1); - BOOST_CHECK_EQUAL(pg.group().name(), "PLATFORM"); - BOOST_CHECK_EQUAL(pg.parent_name(), "FIELD"); -} - - - -BOOST_AUTO_TEST_CASE(CreateScheduleDeckWithStart) { - auto deck = createDeck(); - auto python = std::make_shared(); - EclipseGrid grid(10,10,10); - TableManager table ( deck ); - FieldPropsManager fp( deck, Phases{true, true, true}, grid, table); - Runspec runspec (deck); - - Schedule schedule(deck, grid , fp, runspec, python); - BOOST_CHECK_EQUAL( schedule.getStartTime() , TimeMap::mkdate(1998, 3 , 8 )); -} - -BOOST_AUTO_TEST_CASE(CreateScheduleDeckWithSCHEDULENoThrow) { - Parser parser; - Deck deck; - auto python = std::make_shared(); - EclipseGrid grid(10,10,10); - TableManager table ( deck ); - FieldPropsManager fp( deck, Phases{true, true, true}, grid, table); - deck.addKeyword( DeckKeyword( parser.getKeyword("SCHEDULE" ))); - Runspec runspec (deck); - - BOOST_CHECK_NO_THROW( Schedule( deck, grid , fp, runspec, python)); -} - -BOOST_AUTO_TEST_CASE(EmptyScheduleHasNoWells) { - auto python = std::make_shared(); - EclipseGrid grid(10,10,10); - auto deck = createDeck(); - TableManager table ( deck ); - FieldPropsManager fp( deck, Phases{true, true, true}, grid, table); - Runspec runspec (deck);; - Schedule schedule(deck, grid , fp, runspec, python); - BOOST_CHECK_EQUAL( 0U , schedule.numWells() ); - BOOST_CHECK_EQUAL( false , schedule.hasWell("WELL1") ); - BOOST_CHECK_THROW( schedule.getWell("WELL2", 0) , std::invalid_argument ); -} - - - -BOOST_AUTO_TEST_CASE(EmptyScheduleHasFIELDGroup) { - auto python = std::make_shared(); - EclipseGrid grid(10,10,10); - auto deck = createDeck(); - TableManager table ( deck ); - FieldPropsManager fp( deck, Phases{true, true, true}, grid, table); - Runspec runspec (deck); - Schedule schedule(deck , grid , fp, runspec, python); - - BOOST_CHECK_EQUAL( 1U , schedule.numGroups() ); - BOOST_CHECK_EQUAL( true , schedule.hasGroup("FIELD") ); - BOOST_CHECK_EQUAL( false , schedule.hasGroup("GROUP") ); - BOOST_CHECK_THROW( schedule.getGroup("GROUP", 0) , std::invalid_argument ); -} - -BOOST_AUTO_TEST_CASE(HasGroup_At_Time) { - const auto input = std::string { R"( -RUNSPEC -DIMENS - 5 5 5 / -OIL -WATER -TABDIMS -/ -WELLDIMS - 2 10 3 2 / -GRID -DXV - 5*100 / -DYV - 5*100 / -DZV - 5*5 / -TOPS - 25*2500 / -PORO - 125*0.15 / -PERMX - 125*500 / -COPY - 'PERMX' 'PERMY' / - 'PERMX' 'PERMZ' / -/ -MULTIPLY - 'PERMZ' 0.1 / -/ -PROPS -SWOF -0 0 1 0 -1 1 0 0 / -SCHEDULE -WELSPECS --- Group 'P' exists from the first report step - 'P1' 'P' 1 1 2502.5 'OIL' / -/ -WCONPROD - 'P1' 'OPEN' 'ORAT' 123.4 4* 50.0 / -/ -TSTEP - 10 20 30 40 / -WELSPECS --- Group 'I' does not exist before now (report step 4, zero-based = 3) - 'I1' 'I' 5 5 2522.5 'WATER' / -/ -WCONINJE - 'I1' 'WATER' 'OPEN' 'RATE' 200 1* 450.0 / -/ -TSTEP - 50 50 / -END -)" - }; - - auto python = std::make_shared<::Opm::Python>(); - const auto deck = ::Opm::Parser{}.parseString(input); - const auto es = ::Opm::EclipseState{deck}; - const auto sched = ::Opm::Schedule{ deck, es, python }; - - BOOST_CHECK_MESSAGE(sched.hasGroup("P"), R"(Group "P" Must Exist)"); - BOOST_CHECK_MESSAGE(sched.hasGroup("I"), R"(Group "I" Must Exist)"); - - BOOST_CHECK_MESSAGE( sched.hasGroup("P", 3), R"(Group "P" Must Exist at Report Step 3)"); - BOOST_CHECK_MESSAGE(! sched.hasGroup("I", 3), R"(Group "I" Must NOT Exist at Report Step 3)"); - BOOST_CHECK_MESSAGE( sched.hasGroup("I", 4), R"(Group "I" Must Exist at Report Step 4)"); - - BOOST_CHECK_MESSAGE(sched.hasGroup("P", 6), R"(Group "P" Must Exist At Last Report Step)"); - BOOST_CHECK_MESSAGE(sched.hasGroup("I", 6), R"(Group "I" Must Exist At Last Report Step)"); - - BOOST_CHECK_MESSAGE(! sched.hasGroup("P", 7), R"(Group "P" Must NOT Exist Immediately After Last Report Step)"); - BOOST_CHECK_MESSAGE(! sched.hasGroup("I", 7), R"(Group "I" Must NOT Exist Immediately After Last Report Step)"); - - BOOST_CHECK_MESSAGE(! sched.hasGroup("P", 1729), R"(Group "P" Must NOT Exist Long After Last Report Step)"); - BOOST_CHECK_MESSAGE(! sched.hasGroup("I", 1729), R"(Group "I" Must NOT Exist Long After Last Report Step)"); - - BOOST_CHECK_THROW(sched.getGroup("I", 3), std::invalid_argument); -} - -BOOST_AUTO_TEST_CASE(WellsIterator_Empty_EmptyVectorReturned) { - auto python = std::make_shared(); - EclipseGrid grid(10,10,10); - auto deck = createDeck(); - TableManager table ( deck ); - FieldPropsManager fp( deck, Phases{true, true, true}, grid, table); - Runspec runspec (deck); - Schedule schedule(deck , grid , fp, runspec, python); - - const auto wells_alltimesteps = schedule.getWellsatEnd(); - BOOST_CHECK_EQUAL(0U, wells_alltimesteps.size()); - - const auto wells_t0 = schedule.getWells(0); - BOOST_CHECK_EQUAL(0U, wells_t0.size()); - - // The time argument is beyond the length of the vector - BOOST_CHECK_THROW(schedule.getWells(1), std::invalid_argument); -} - -BOOST_AUTO_TEST_CASE(WellsIterator_HasWells_WellsReturned) { - auto python = std::make_shared(); - EclipseGrid grid(10,10,10); - auto deck = createDeckWithWells(); - TableManager table ( deck ); - FieldPropsManager fp( deck, Phases{true, true, true}, grid, table); - Runspec runspec (deck); - Schedule schedule(deck , grid , fp, runspec, python); - size_t timeStep = 0; - - const auto wells_alltimesteps = schedule.getWellsatEnd(); - BOOST_CHECK_EQUAL(3U, wells_alltimesteps.size()); - const auto wells_t0 = schedule.getWells(timeStep); - BOOST_CHECK_EQUAL(1U, wells_t0.size()); - const auto wells_t3 = schedule.getWells(3); - BOOST_CHECK_EQUAL(3U, wells_t3.size()); -} - - - -BOOST_AUTO_TEST_CASE(ReturnNumWellsTimestep) { - auto python = std::make_shared(); - EclipseGrid grid(10,10,10); - auto deck = createDeckWithWells(); - TableManager table ( deck ); - FieldPropsManager fp( deck, Phases{true, true, true}, grid, table); - Runspec runspec (deck); - Schedule schedule(deck, grid , fp, runspec, python); - - BOOST_CHECK_EQUAL(schedule.numWells(0), 1); - BOOST_CHECK_EQUAL(schedule.numWells(1), 1); - BOOST_CHECK_EQUAL(schedule.numWells(2), 1); - BOOST_CHECK_EQUAL(schedule.numWells(3), 3); -} - -BOOST_AUTO_TEST_CASE(TestCrossFlowHandling) { - auto python = std::make_shared(); - EclipseGrid grid(10,10,10); - auto deck = createDeckForTestingCrossFlow(); - TableManager table ( deck ); - FieldPropsManager fp( deck, Phases{true, true, true}, grid, table); - Runspec runspec (deck); - Schedule schedule(deck, grid , fp, runspec, python); - - BOOST_CHECK_EQUAL(schedule.getWell("BAN", 0).getAllowCrossFlow(), false); - BOOST_CHECK_EQUAL(schedule.getWell("ALLOW", 0).getAllowCrossFlow(), true); - BOOST_CHECK_EQUAL(schedule.getWell("DEFAULT", 0).getAllowCrossFlow(), true); - BOOST_CHECK(Well::Status::SHUT == schedule.getWell("BAN", 0).getStatus()); - BOOST_CHECK(Well::Status::OPEN == schedule.getWell("BAN", 1).getStatus()); - BOOST_CHECK(Well::Status::OPEN == schedule.getWell("BAN", 2).getStatus()); - BOOST_CHECK(Well::Status::SHUT == schedule.getWell("BAN", 3).getStatus()); - BOOST_CHECK(Well::Status::SHUT == schedule.getWell("BAN", 4).getStatus()); // not allow to open - BOOST_CHECK(Well::Status::OPEN == schedule.getWell("BAN", 5).getStatus()); -} - -static Deck createDeckWithWellsAndConnectionDataWithWELOPEN() { - Opm::Parser parser; - std::string input = - "START -- 0 \n" - "1 NOV 1979 / \n" - "SCHEDULE\n" - "DATES -- 1\n" - " 1 DES 1979/ \n" - "/\n" - "WELSPECS\n" - " 'OP_1' 'OP' 9 9 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / \n" - " 'OP_2' 'OP' 8 8 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / \n" - " 'OP_3' 'OP' 7 7 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / \n" - "/\n" - "COMPDAT\n" - " 'OP_1' 9 9 1 1 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / \n" - " 'OP_1' 9 9 2 2 'OPEN' 1* 46.825 0.311 4332.346 1* 1* 'X' 22.123 / \n" - " 'OP_2' 8 8 1 3 'OPEN' 1* 1.168 0.311 107.872 1* 1* 'Y' 21.925 / \n" - " 'OP_2' 8 7 3 3 'OPEN' 1* 15.071 0.311 1391.859 1* 1* 'Y' 21.920 / \n" - " 'OP_2' 8 7 3 6 'OPEN' 1* 6.242 0.311 576.458 1* 1* 'Y' 21.915 / \n" - " 'OP_3' 7 7 1 1 'OPEN' 1* 27.412 0.311 2445.337 1* 1* 'Y' 18.521 / \n" - " 'OP_3' 7 7 2 2 'OPEN' 1* 55.195 0.311 4923.842 1* 1* 'Y' 18.524 / \n" - "/\n" - "DATES -- 2,3\n" - " 10 JUL 2007 / \n" - " 10 AUG 2007 / \n" - "/\n" - "COMPDAT\n" - " 'OP_1' 9 9 3 9 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / \n" - "/\n" - "WELOPEN\n" - " 'OP_1' SHUT / \n" - " '*' OPEN 0 0 3 / \n" - " 'OP_2' SHUT 0 0 0 4 6 / \n " - " 'OP_3' SHUT 0 0 0 / \n" - "/\n" - "DATES -- 4\n" - " 10 JUL 2008 / \n" - "/\n" - "WELOPEN\n" - " 'OP_1' OPEN / \n" - " 'OP_2' OPEN 0 0 0 4 6 / \n " - " 'OP_3' OPEN 0 0 0 / \n" - "/\n" - "DATES -- 5\n" - " 10 OKT 2008 / \n" - "/\n" - "WELOPEN\n" - " 'OP_1' SHUT 0 0 0 0 0 / \n " - "/\n"; - - return parser.parseString(input); -} - -BOOST_AUTO_TEST_CASE(CreateScheduleDeckWellsAndConnectionDataWithWELOPEN) { - auto python = std::make_shared(); - EclipseGrid grid(10,10,10); - auto deck = createDeckWithWellsAndConnectionDataWithWELOPEN(); - TableManager table ( deck ); - FieldPropsManager fp( deck, Phases{true, true, true}, grid, table); - Runspec runspec (deck); - Schedule schedule(deck ,grid , fp, runspec, python); - { - constexpr auto well_shut = Well::Status::SHUT; - constexpr auto well_open = Well::Status::OPEN; - - BOOST_CHECK(well_shut == schedule.getWell("OP_1", 3).getStatus( )); - BOOST_CHECK(well_open == schedule.getWell("OP_1", 4).getStatus( )); - BOOST_CHECK(well_shut == schedule.getWell("OP_1", 5).getStatus( )); - } - { - constexpr auto comp_shut = Connection::State::SHUT; - constexpr auto comp_open = Connection::State::OPEN; - { - const auto& well = schedule.getWell("OP_2", 3); - const auto& cs = well.getConnections( ); - - BOOST_CHECK_EQUAL( 7U, cs.size() ); - BOOST_CHECK(comp_shut == cs.getFromIJK( 7, 6, 2 ).state()); - BOOST_CHECK(comp_shut == cs.getFromIJK( 7, 6, 3 ).state()); - BOOST_CHECK(comp_shut == cs.getFromIJK( 7, 6, 4 ).state()); - BOOST_CHECK(comp_open == cs.getFromIJK( 7, 7, 2 ).state()); - } - { - const auto& well = schedule.getWell("OP_2", 4); - const auto& cs2 = well.getConnections( ); - BOOST_CHECK(comp_open == cs2.getFromIJK( 7, 6, 2 ).state()); - BOOST_CHECK(comp_open == cs2.getFromIJK( 7, 6, 3 ).state()); - BOOST_CHECK(comp_open == cs2.getFromIJK( 7, 6, 4 ).state()); - BOOST_CHECK(comp_open == cs2.getFromIJK( 7, 7, 2 ).state()); - } - { - const auto& well = schedule.getWell("OP_3", 3); - const auto& cs3 = well.getConnections( ); - BOOST_CHECK(comp_shut == cs3.get( 0 ).state()); - } - { - const auto& well = schedule.getWell("OP_3", 4); - const auto& cs4 = well.getConnections( ); - BOOST_CHECK(comp_open == cs4.get( 0 ).state()); - } - } -} - -BOOST_AUTO_TEST_CASE(CreateScheduleDeckWithWELOPEN_TryToOpenWellWithShutCompletionsDoNotOpenWell) { - Opm::Parser parser; - std::string input = - "START -- 0 \n" - "1 NOV 1979 / \n" - "SCHEDULE\n" - "DATES -- 1\n" - " 1 DES 1979/ \n" - "/\n" - "WELSPECS\n" - " 'OP_1' 'OP' 9 9 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / \n" - "/\n" - "COMPDAT\n" - " 'OP_1' 9 9 1 1 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / \n" - " 'OP_1' 9 9 2 2 'OPEN' 1* 46.825 0.311 4332.346 1* 1* 'X' 22.123 / \n" - " 'OP_1' 9 9 3 9 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / \n" - "/\n" - "DATES -- 2\n" - " 10 JUL 2008 / \n" - "/\n" - "WELOPEN\n" - " 'OP_1' OPEN / \n" - "/\n" - "DATES -- 3\n" - " 10 OKT 2008 / \n" - "/\n" - "WELOPEN\n" - " 'OP_1' SHUT 0 0 0 0 0 / \n " - "/\n" - "DATES -- 4\n" - " 10 NOV 2008 / \n" - "/\n" - "WELOPEN\n" - " 'OP_1' OPEN / \n " - "/\n"; - - auto python = std::make_shared(); - EclipseGrid grid(10,10,10); - auto deck = parser.parseString(input); - TableManager table ( deck ); - FieldPropsManager fp( deck, Phases{true, true, true}, grid, table); - Runspec runspec (deck); - Schedule schedule(deck , grid , fp, runspec, python); - const auto& well2_3 = schedule.getWell("OP_1",3); - const auto& well2_4 = schedule.getWell("OP_1",4); - BOOST_CHECK(Well::Status::SHUT == well2_3.getStatus()); - BOOST_CHECK(Well::Status::SHUT == well2_4.getStatus()); -} - -BOOST_AUTO_TEST_CASE(CreateScheduleDeckWithWELOPEN_CombineShutCompletionsAndAddNewCompletionsDoNotShutWell) { - Opm::Parser parser; - std::string input = - "START -- 0 \n" - "1 NOV 1979 / \n" - "SCHEDULE\n" - "DATES -- 1\n" - " 1 DES 1979/ \n" - "/\n" - "WELSPECS\n" - " 'OP_1' 'OP' 9 9 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / \n" - "/\n" - "COMPDAT\n" - " 'OP_1' 9 9 1 1 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / \n" - " 'OP_1' 9 9 2 2 'OPEN' 1* 46.825 0.311 4332.346 1* 1* 'X' 22.123 / \n" - " 'OP_1' 9 9 3 9 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / \n" - "/\n" - "DATES -- 2\n" - " 10 JUL 2008 / \n" - "/\n" - "WELOPEN\n" - " 'OP_1' OPEN / \n" - "/\n" - "DATES -- 3\n" - " 10 OKT 2008 / \n" - "/\n" - "WELOPEN\n" - " 'OP_1' SHUT 0 0 0 0 0 / \n " - "/\n" - "COMPDAT\n" - " 'OP_1' 9 9 1 1 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / \n" - "/\n" - "DATES -- 4\n" - " 10 NOV 2008 / \n" - "/\n" - "WELOPEN\n" - " 'OP_1' SHUT 0 0 0 0 0 / \n " - "/\n" - "DATES -- 5\n" - " 11 NOV 2008 / \n" - "/\n" - "COMPDAT\n" - " 'OP_1' 9 9 1 1 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / \n" - "/\n" - "DATES -- 6\n" - " 12 NOV 2008 / \n" - "/\n"; - - auto python = std::make_shared(); - EclipseGrid grid(10,10,10); - auto deck = parser.parseString(input); - TableManager table ( deck ); - FieldPropsManager fp( deck, Phases{true, true, true}, grid, table); - Runspec runspec (deck); - Schedule schedule(deck, grid , fp, runspec, python); - const auto& well_3 = schedule.getWell("OP_1", 3); - const auto& well_4 = schedule.getWell("OP_1", 4); - const auto& well_5 = schedule.getWell("OP_1", 5); - // timestep 3. Close all completions with WELOPEN and immediately open new completions with COMPDAT. - BOOST_CHECK(Well::Status::OPEN == well_3.getStatus()); - BOOST_CHECK( !schedule.hasWellGroupEvent( "OP_1", ScheduleEvents::WELL_STATUS_CHANGE , 3 )); - // timestep 4. Close all completions with WELOPEN. The well will be shut since no completions - // are open. - BOOST_CHECK(Well::Status::SHUT == well_4.getStatus()); - BOOST_CHECK( schedule.hasWellGroupEvent( "OP_1", ScheduleEvents::WELL_STATUS_CHANGE , 4 )); - // timestep 5. Open new completions. But keep the well shut, - BOOST_CHECK(Well::Status::SHUT == well_5.getStatus()); -} - -BOOST_AUTO_TEST_CASE(CreateScheduleDeckWithWRFT) { - Opm::Parser parser; - std::string input = - "START -- 0 \n" - "1 NOV 1979 / \n" - "SCHEDULE\n" - "DATES -- 1\n" - " 1 DES 1979/ \n" - "/\n" - "WELSPECS\n" - " 'OP_1' 'OP' 9 9 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / \n" - " 'OP_2' 'OP' 4 4 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / \n" - "/\n" - "COMPDAT\n" - " 'OP_1' 9 9 1 1 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / \n" - " 'OP_1' 9 9 2 2 'OPEN' 1* 46.825 0.311 4332.346 1* 1* 'X' 22.123 / \n" - " 'OP_1' 9 9 3 9 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / \n" - " 'OP_2' 4 4 4 9 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / \n" - "/\n" - "DATES -- 2\n" - " 10 OKT 2008 / \n" - "/\n" - "WRFT \n" - "/ \n" - "WELOPEN\n" - " 'OP_1' OPEN / \n" - "/\n" - "DATES -- 3\n" - " 10 NOV 2008 / \n" - "/\n" - "WELOPEN\n" - " 'OP_2' OPEN / \n" - "/\n" - "DATES -- 4\n" - " 30 NOV 2008 / \n" - "/\n"; - - - auto python = std::make_shared(); - EclipseGrid grid(10,10,10); - auto deck = parser.parseString(input); - TableManager table ( deck ); - FieldPropsManager fp( deck, Phases{true, true, true}, grid, table); - Runspec runspec (deck); - Schedule schedule(deck, grid , fp, runspec, python); - const auto& rft_config = schedule.rftConfig(); - - BOOST_CHECK_EQUAL(2 , rft_config.firstRFTOutput()); - BOOST_CHECK_EQUAL(true, rft_config.rft("OP_1", 2)); - BOOST_CHECK_EQUAL(true, rft_config.rft("OP_2", 3)); -} - - -BOOST_AUTO_TEST_CASE(CreateScheduleDeckWithWRFTPLT) { - Opm::Parser parser; - std::string input = - "START -- 0 \n" - "1 NOV 1979 / \n" - "SCHEDULE\n" - "DATES -- 1\n" - " 1 DES 1979/ \n" - "/\n" - "WELSPECS\n" - " 'OP_1' 'OP' 9 9 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / \n" - "/\n" - "COMPDAT\n" - " 'OP_1' 9 9 1 1 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / \n" - " 'OP_1' 9 9 2 2 'OPEN' 1* 46.825 0.311 4332.346 1* 1* 'X' 22.123 / \n" - " 'OP_1' 9 9 3 9 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / \n" - "/\n" - "WELOPEN\n" - " 'OP_1' SHUT / \n" - "/\n" - "DATES -- 2\n" - " 10 OKT 2006 / \n" - "/\n" - "WELOPEN\n" - " 'OP_1' SHUT / \n" - "/\n" - "WRFTPLT \n" - " 'OP_1' FOPN / \n" - "/ \n" - "DATES -- 3\n" - " 10 OKT 2007 / \n" - "/\n" - "WELOPEN\n" - " 'OP_1' OPEN 0 0 0 0 0 / \n" - "/\n" - "DATES -- 4\n" - " 10 OKT 2008 / \n" - "/\n" - "WELOPEN\n" - " 'OP_1' OPEN / \n" - "/\n" - "DATES -- 5\n" - " 10 NOV 2008 / \n" - "/\n"; - auto python = std::make_shared(); - EclipseGrid grid(10,10,10); - auto deck = parser.parseString(input); - TableManager table ( deck ); - FieldPropsManager fp( deck, Phases{true, true, true}, grid, table); - Runspec runspec (deck); - Schedule schedule(deck, grid , fp, runspec, python); - const auto& well = schedule.getWell("OP_1", 4); - BOOST_CHECK(Well::Status::OPEN == well.getStatus()); - - const auto& rft_config = schedule.rftConfig(); - BOOST_CHECK_EQUAL(rft_config.rft("OP_1", 3),false); - BOOST_CHECK_EQUAL(rft_config.rft("OP_1", 4),true); - BOOST_CHECK_EQUAL(rft_config.rft("OP_1", 5),false); -} - -BOOST_AUTO_TEST_CASE(createDeckWithWeltArg) { - Opm::Parser parser; - std::string input = - "START -- 0 \n" - "19 JUN 2007 / \n" - "SCHEDULE\n" - "DATES -- 1\n" - " 10 OKT 2008 / \n" - "/\n" - "WELSPECS\n" - " 'OP_1' 'OP' 9 9 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / \n" - "/\n" - "COMPDAT\n" - " 'OP_1' 9 9 1 1 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / \n" - " 'OP_1' 9 9 2 2 'OPEN' 1* 46.825 0.311 4332.346 1* 1* 'X' 22.123 / \n" - " 'OP_1' 9 9 3 9 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / \n" - "/\n" - "WCONPROD\n" - " 'OP_1' 'OPEN' 'ORAT' 0.000 0.000 0.000 5* / \n" - "/\n" - "DATES -- 2\n" - " 20 JAN 2010 / \n" - "/\n" - "WELTARG\n" - " OP_1 ORAT 1300 /\n" - " OP_1 WRAT 1400 /\n" - " OP_1 GRAT 1500.52 /\n" - " OP_1 LRAT 1600.58 /\n" - " OP_1 RESV 1801.05 /\n" - " OP_1 BHP 1900 /\n" - " OP_1 THP 2000 /\n" - " OP_1 VFP 2100.09 /\n" - " OP_1 GUID 2300.14 /\n" - "/\n"; - - auto deck = parser.parseString(input); - auto python = std::make_shared(); - EclipseGrid grid(10,10,10); - TableManager table ( deck ); - FieldPropsManager fp( deck, Phases{true, true, true}, grid, table); - Runspec runspec (deck); - Schedule schedule(deck, grid , fp, runspec, python); - Opm::UnitSystem unitSystem = deck.getActiveUnitSystem(); - double siFactorL = unitSystem.parse("LiquidSurfaceVolume/Time").getSIScaling(); - double siFactorG = unitSystem.parse("GasSurfaceVolume/Time").getSIScaling(); - double siFactorP = unitSystem.parse("Pressure").getSIScaling(); - SummaryState st(std::chrono::system_clock::now()); - - const auto& well_1 = schedule.getWell("OP_1", 1); - const auto wpp_1 = well_1.getProductionProperties(); - BOOST_CHECK_EQUAL(wpp_1.WaterRate.get(), 0); - BOOST_CHECK (wpp_1.hasProductionControl( Opm::Well::ProducerCMode::ORAT) ); - BOOST_CHECK (!wpp_1.hasProductionControl( Opm::Well::ProducerCMode::RESV) ); - - - - const auto& well_2 = schedule.getWell("OP_1", 2); - const auto wpp_2 = well_2.getProductionProperties(); - const auto prod_controls = wpp_2.controls(st, 0); - - BOOST_CHECK_EQUAL(prod_controls.oil_rate, 1300 * siFactorL); - BOOST_CHECK_EQUAL(prod_controls.water_rate, 1400 * siFactorL); - BOOST_CHECK_EQUAL(prod_controls.gas_rate, 1500.52 * siFactorG); - BOOST_CHECK_EQUAL(prod_controls.liquid_rate, 1600.58 * siFactorL); - BOOST_CHECK_EQUAL(prod_controls.resv_rate, 1801.05 * siFactorL); - BOOST_CHECK_EQUAL(prod_controls.bhp_limit, 1900 * siFactorP); - BOOST_CHECK_EQUAL(prod_controls.thp_limit, 2000 * siFactorP); - BOOST_CHECK_EQUAL(prod_controls.vfp_table_number, 2100); - - BOOST_CHECK (wpp_2.hasProductionControl( Opm::Well::ProducerCMode::ORAT) ); - BOOST_CHECK (wpp_2.hasProductionControl( Opm::Well::ProducerCMode::RESV) ); - -} - -BOOST_AUTO_TEST_CASE(createDeckWithWeltArgException) { - Opm::Parser parser; - std::string input = - "SCHEDULE\n" - "WELTARG\n" - " OP_1 GRAT 1500.52 /\n" - " OP_1 LRAT /\n" - " OP_1 RESV 1801.05 /\n" - "/\n"; - - auto deck = parser.parseString(input); - auto python = std::make_shared(); - EclipseGrid grid(10,10,10); - TableManager table ( deck ); - FieldPropsManager fp( deck, Phases{true, true, true}, grid, table); - Runspec runspec (deck); - - BOOST_CHECK_THROW(Schedule(deck, grid , fp, runspec, python), - std::invalid_argument); -} - -BOOST_AUTO_TEST_CASE(createDeckWithWeltArgException2) { - Opm::Parser parser; - std::string input = - "SCHEDULE\n" - "WELTARG\n" - " OP_1 LRAT /\n" - " OP_1 RESV 1801.05 /\n" - "/\n"; - - auto deck = parser.parseString(input); - auto python = std::make_shared(); - EclipseGrid grid(10,10,10); - TableManager table ( deck ); - FieldPropsManager fp( deck, Phases{true, true, true}, grid, table); - Runspec runspec (deck); - BOOST_CHECK_THROW(Schedule(deck, grid , fp, runspec, python), std::invalid_argument); -} - -BOOST_AUTO_TEST_CASE(createDeckWithWPIMULT) { - Opm::Parser parser; - std::string input = - "START -- 0 \n" - "19 JUN 2007 / \n" - "SCHEDULE\n" - "DATES -- 1\n" - " 10 OKT 2008 / \n" - "/\n" - "WELSPECS\n" - " 'OP_1' 'OP' 9 9 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / \n" - "/\n" - "COMPDAT\n" - " 'OP_1' 9 9 1 1 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / \n" - " 'OP_1' 9 9 2 2 'OPEN' 1* 46.825 0.311 4332.346 1* 1* 'X' 22.123 / \n" - " 'OP_1' 9 9 3 9 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / \n" - "/\n" - "DATES -- 2\n" - " 20 JAN 2010 / \n" - "/\n" - "WPIMULT\n" - "OP_1 1.30 /\n" - "/\n" - "DATES -- 3\n" - " 20 JAN 2011 / \n" - "/\n" - "WPIMULT\n" - "OP_1 1.30 /\n" - "/\n" - "DATES -- 4\n" - " 20 JAN 2012 / \n" - "/\n" - "COMPDAT\n" - " 'OP_1' 9 9 1 1 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / \n" - " 'OP_1' 9 9 2 2 'OPEN' 1* 46.825 0.311 4332.346 1* 1* 'X' 22.123 / \n" - " 'OP_1' 9 9 3 9 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / \n" - "/\n"; - - auto deck = parser.parseString(input); - auto python = std::make_shared(); - EclipseGrid grid(10,10,10); - TableManager table ( deck ); - FieldPropsManager fp( deck, Phases{true, true, true}, grid, table); - Runspec runspec (deck); - Schedule schedule(deck, grid , fp, runspec, python); - - const auto& cs1 = schedule.getWell("OP_1", 1).getConnections(); - const auto& cs2 = schedule.getWell("OP_1", 2).getConnections(); - const auto& cs3 = schedule.getWell("OP_1", 3).getConnections(); - const auto& cs4 = schedule.getWell("OP_1", 4).getConnections(); - for(size_t i = 0; i < cs2.size(); i++) - BOOST_CHECK_EQUAL(cs2.get( i ).CF() / cs1.get(i).CF(), 1.3); - - for(size_t i = 0; i < cs3.size(); i++ ) - BOOST_CHECK_EQUAL(cs3.get( i ).CF() / cs1.get(i).CF(), (1.3*1.3)); - - for(size_t i = 0; i < cs4.size(); i++ ) - BOOST_CHECK_EQUAL(cs4.get( i ).CF(), cs1.get(i).CF()); - - BOOST_CHECK_THROW(schedule.simTime(10000), std::invalid_argument); - auto sim_time1 = TimeStampUTC{ schedule.simTime(1) }; - BOOST_CHECK_EQUAL(sim_time1.day(), 10); - BOOST_CHECK_EQUAL(sim_time1.month(), 10); - BOOST_CHECK_EQUAL(sim_time1.year(), 2008); - - sim_time1 = schedule.simTime(3); - BOOST_CHECK_EQUAL(sim_time1.day(), 20); - BOOST_CHECK_EQUAL(sim_time1.month(), 1); - BOOST_CHECK_EQUAL(sim_time1.year(), 2011); -} - -BOOST_AUTO_TEST_CASE(WELSPECS_WGNAME_SPACE) { - Opm::Parser parser; - const std::string input = R"( - START -- 0 - 10 'JAN' 2000 / - RUNSPEC - DIMENS - 10 10 10 / - GRID - DX - 1000*0.25 / - DY - 1000*0.25 / - DZ - 1000*0.25 / - TOPS - 100*0.25 / - SCHEDULE - DATES -- 1 - 10 OKT 2008 / - / - WELSPECS - ' PROD1' 'G1' 1 1 10 'OIL' / - 'PROD2' 'G2' 2 2 10 'OIL' / - 'PROD3' 'H1' 3 3 10 'OIL' / - / - GCONPROD - 'G1' 'ORAT' 1000 / - / - DATES -- 2 - 10 NOV 2008 / - / - GCONPROD - 'G*' 'ORAT' 2000 / - / - )"; - - auto deck = parser.parseString(input); - auto python = std::make_shared(); - EclipseGrid grid( deck ); - TableManager table ( deck ); - FieldPropsManager fp( deck, Phases{true, true, true}, grid, table); - Runspec runspec (deck); - ParseContext parseContext; - ErrorGuard errors; - - parseContext.update(ParseContext::PARSE_WGNAME_SPACE, InputError::THROW_EXCEPTION); - BOOST_CHECK_THROW( Opm::Schedule(deck, grid, fp, runspec, parseContext, errors, python), std::invalid_argument); - - parseContext.update(ParseContext::PARSE_WGNAME_SPACE, InputError::IGNORE); - BOOST_CHECK_NO_THROW( Opm::Schedule(deck, grid, fp, runspec, parseContext, errors, python)); -} - -BOOST_AUTO_TEST_CASE(createDeckModifyMultipleGCONPROD) { - Opm::Parser parser; - const std::string input = R"( - START -- 0 - 10 'JAN' 2000 / - RUNSPEC - DIMENS - 10 10 10 / - GRID - DX - 1000*0.25 / - DY - 1000*0.25 / - DZ - 1000*0.25 / - TOPS - 100*0.25 / - SCHEDULE - DATES -- 1 - 10 OKT 2008 / - / - WELSPECS - 'PROD1' 'G1' 1 1 10 'OIL' / - 'PROD2' 'G2' 2 2 10 'OIL' / - 'PROD3' 'H1' 3 3 10 'OIL' / - / - GCONPROD - 'G1' 'ORAT' 1000 / - / - DATES -- 2 - 10 NOV 2008 / - / - GCONPROD - 'G*' 'ORAT' 2000 0 0 0 'NONE' 'YES' 148 'OIL'/ - / - )"; - - auto deck = parser.parseString(input); - auto python = std::make_shared(); - EclipseGrid grid( deck ); - TableManager table ( deck ); - FieldPropsManager fp( deck, Phases{true, true, true}, grid, table); - Runspec runspec (deck); - Opm::Schedule schedule(deck, grid, fp, runspec, python); - Opm::SummaryState st(std::chrono::system_clock::now()); - - Opm::UnitSystem unitSystem = deck.getActiveUnitSystem(); - double siFactorL = unitSystem.parse("LiquidSurfaceVolume/Time").getSIScaling(); - - { - auto g = schedule.getGroup("G1", 1); - BOOST_CHECK_EQUAL(g.productionControls(st).oil_target, 1000 * siFactorL); - BOOST_CHECK(g.has_control(Group::ProductionCMode::ORAT)); - BOOST_CHECK(!g.has_control(Group::ProductionCMode::WRAT)); - BOOST_CHECK_EQUAL(g.productionControls(st).guide_rate, 0); - } - { - auto g = schedule.getGroup("G1", 2); - BOOST_CHECK_EQUAL(g.productionControls(st).oil_target, 2000 * siFactorL); - BOOST_CHECK_EQUAL(g.productionControls(st).guide_rate, 148); - BOOST_CHECK_EQUAL(true, g.productionControls(st).guide_rate_def == Group::GuideRateTarget::OIL); - } - - auto g2 = schedule.getGroup("G2", 2); - BOOST_CHECK_EQUAL(g2.productionControls(st).oil_target, 2000 * siFactorL); - - auto gh = schedule.getGroup("H1", 1); - - - BOOST_CHECK( !schedule.hasWellGroupEvent( "G2", ScheduleEvents::GROUP_PRODUCTION_UPDATE , 1 )); - BOOST_CHECK( schedule.hasWellGroupEvent( "G2", ScheduleEvents::GROUP_PRODUCTION_UPDATE , 2 )); - -} - -BOOST_AUTO_TEST_CASE(createDeckWithDRSDT) { - Opm::Parser parser; - std::string input = - "START -- 0 \n" - "19 JUN 2007 / \n" - "SCHEDULE\n" - "DATES -- 1\n" - " 10 OKT 2008 / \n" - "/\n" - "DRSDT\n" - "0.0003\n" - "/\n"; - - auto deck = parser.parseString(input); - auto python = std::make_shared(); - EclipseGrid grid(10,10,10); - TableManager table ( deck ); - FieldPropsManager fp( deck, Phases{true, true, true}, grid, table); - Runspec runspec (deck); - Schedule schedule(deck, grid , fp, runspec, python); - size_t currentStep = 1; - BOOST_CHECK_EQUAL(schedule.hasOilVaporizationProperties(), true); - const auto& ovap = schedule.getOilVaporizationProperties(currentStep); - - BOOST_CHECK_EQUAL(true, ovap.getOption(0)); - BOOST_CHECK(ovap.getType() == OilVaporizationProperties::OilVaporization::DRDT); - - BOOST_CHECK_EQUAL(true, ovap.drsdtActive()); - BOOST_CHECK_EQUAL(false, ovap.drvdtActive()); -} - -BOOST_AUTO_TEST_CASE(createDeckWithDRSDTR) { - Opm::Parser parser; - std::string input = - "START -- 0 \n" - "19 JUN 2007 / \n" - "TABDIMS\n" - " 1* 3 \n " - "/\n" - "SCHEDULE\n" - "DATES -- 1\n" - " 10 OKT 2008 / \n" - "/\n" - "DRSDTR\n" - "0 /\n" - "1 /\n" - "2 /\n"; - - auto deck = parser.parseString(input); - auto python = std::make_shared(); - EclipseGrid grid(10,10,10); - TableManager table ( deck ); - FieldPropsManager fp(deck, Phases{true, true, true}, grid, table); - Runspec runspec (deck); - Schedule schedule(deck, grid , fp, runspec, python); - size_t currentStep = 1; - BOOST_CHECK_EQUAL(schedule.hasOilVaporizationProperties(), true); - const auto& ovap = schedule.getOilVaporizationProperties(currentStep); - auto unitSystem = UnitSystem::newMETRIC(); - for (int i = 0; i < 3; ++i) { - double value = unitSystem.to_si( UnitSystem::measure::gas_surface_rate, i ); - BOOST_CHECK_EQUAL(value, ovap.getMaxDRSDT(i)); - BOOST_CHECK_EQUAL(true, ovap.getOption(i)); - } - - BOOST_CHECK(ovap.getType() == OilVaporizationProperties::OilVaporization::DRDT); - BOOST_CHECK_EQUAL(true, ovap.drsdtActive()); - BOOST_CHECK_EQUAL(false, ovap.drvdtActive()); -} - - -BOOST_AUTO_TEST_CASE(createDeckWithDRSDTthenDRVDT) { - Opm::Parser parser; - std::string input = - "START -- 0 \n" - "19 JUN 2007 / \n" - "SCHEDULE\n" - "DATES -- 1\n" - " 10 OKT 2008 / \n" - "/\n" - "DRSDT\n" - "0.0003\n" - "/\n" - "DATES -- 2\n" - " 10 OKT 2009 / \n" - "/\n" - "DRVDT\n" - "0.100\n" - "/\n" - "DATES -- 3\n" - " 10 OKT 2010 / \n" - "/\n" - "VAPPARS\n" - "2 0.100\n" - "/\n"; - - auto deck = parser.parseString(input); - auto python = std::make_shared(); - EclipseGrid grid(10,10,10); - TableManager table ( deck ); - FieldPropsManager fp( deck, Phases{true, true, true}, grid, table); - Runspec runspec (deck); - Schedule schedule(deck, grid , fp, runspec, python); - BOOST_CHECK_EQUAL(schedule.hasOilVaporizationProperties(), true); - - const OilVaporizationProperties& ovap1 = schedule.getOilVaporizationProperties(1); - BOOST_CHECK(ovap1.getType() == OilVaporizationProperties::OilVaporization::DRDT); - BOOST_CHECK_EQUAL(true, ovap1.drsdtActive()); - BOOST_CHECK_EQUAL(false, ovap1.drvdtActive()); - - const OilVaporizationProperties& ovap2 = schedule.getOilVaporizationProperties(2); - //double value = ovap2.getMaxDRVDT(0); - //BOOST_CHECK_EQUAL(1.1574074074074074e-06, value); - BOOST_CHECK(ovap2.getType() == OilVaporizationProperties::OilVaporization::DRDT); - BOOST_CHECK_EQUAL(true, ovap2.drvdtActive()); - BOOST_CHECK_EQUAL(true, ovap2.drsdtActive()); - - const OilVaporizationProperties& ovap3 = schedule.getOilVaporizationProperties(3); - BOOST_CHECK(ovap3.getType() == OilVaporizationProperties::OilVaporization::VAPPARS); - BOOST_CHECK_EQUAL(false, ovap3.drvdtActive()); - BOOST_CHECK_EQUAL(false, ovap3.drsdtActive()); - - -} - -BOOST_AUTO_TEST_CASE(createDeckWithVAPPARS) { - Opm::Parser parser; - std::string input = - "START -- 0 \n" - "19 JUN 2007 / \n" - "SCHEDULE\n" - "DATES -- 1\n" - " 10 OKT 2008 / \n" - "/\n" - "VAPPARS\n" - "2 0.100\n" - "/\n"; - - auto deck = parser.parseString(input); - auto python = std::make_shared(); - EclipseGrid grid(10,10,10); - TableManager table ( deck ); - FieldPropsManager fp( deck, Phases{true, true, true}, grid, table); - Runspec runspec (deck); - Schedule schedule(deck, grid , fp, runspec, python); - size_t currentStep = 1; - BOOST_CHECK_EQUAL(schedule.hasOilVaporizationProperties(), true); - const OilVaporizationProperties& ovap = schedule.getOilVaporizationProperties(currentStep); - BOOST_CHECK(ovap.getType() == OilVaporizationProperties::OilVaporization::VAPPARS); - double vap1 = ovap.vap1(); - BOOST_CHECK_EQUAL(2, vap1); - double vap2 = ovap.vap2(); - BOOST_CHECK_EQUAL(0.100, vap2); - BOOST_CHECK_EQUAL(false, ovap.drsdtActive()); - BOOST_CHECK_EQUAL(false, ovap.drvdtActive()); - -} - - -BOOST_AUTO_TEST_CASE(createDeckWithOutOilVaporizationProperties) { - Opm::Parser parser; - std::string input = - "START -- 0 \n" - "19 JUN 2007 / \n" - "SCHEDULE\n" - "DATES -- 1\n" - " 10 OKT 2008 / \n" - "/\n"; - - - auto deck = parser.parseString(input); - auto python = std::make_shared(); - EclipseGrid grid(10,10,10); - TableManager table ( deck ); - FieldPropsManager fp( deck, Phases{true, true, true}, grid, table); - Runspec runspec (deck); - Schedule schedule(deck, grid , fp, runspec, python); - - BOOST_CHECK_EQUAL(schedule.hasOilVaporizationProperties(), false); - - -} - -BOOST_AUTO_TEST_CASE(changeBhpLimitInHistoryModeWithWeltarg) { - Opm::Parser parser; - std::string input = - "START -- 0 \n" - "19 JUN 2007 / \n" - "SCHEDULE\n" - "DATES -- 1\n" - " 10 OKT 2008 / \n" - "/\n" - "WELSPECS\n" - " 'P' 'OP' 9 9 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / \n" - " 'I' 'OP' 1 1 1* 'WATER' 1* 1* 1* 1* 1* 1* 1* / \n" - "/\n" - "COMPDAT\n" - " 'P' 9 9 1 1 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / \n" - " 'P' 9 9 2 2 'OPEN' 1* 46.825 0.311 4332.346 1* 1* 'X' 22.123 / \n" - " 'I' 1 1 1 1 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / \n" - "/\n" - "WCONHIST\n" - " 'P' 'OPEN' 'RESV' 6* 500 / \n" - "/\n" - "WCONINJH\n" - " 'I' 'WATER' 1* 100 250 / \n" - "/\n" - "WELTARG\n" - " 'P' 'BHP' 50 / \n" - " 'I' 'BHP' 600 / \n" - "/\n" - "DATES -- 2\n" - " 15 OKT 2008 / \n" - "/\n" - "WCONHIST\n" - " 'P' 'OPEN' 'RESV' 6* 500/\n/\n" - "WCONINJH\n" - " 'I' 'WATER' 1* 100 250 / \n" - "/\n" - "DATES -- 3\n" - " 18 OKT 2008 / \n" - "/\n" - "WCONHIST\n" - " 'I' 'OPEN' 'RESV' 6* /\n/\n" - "DATES -- 4\n" - " 20 OKT 2008 / \n" - "/\n" - "WCONINJH\n" - " 'I' 'WATER' 1* 100 250 / \n" - "/\n" - ; - - auto deck = parser.parseString(input); - auto python = std::make_shared(); - EclipseGrid grid(10,10,10); - TableManager table ( deck ); - FieldPropsManager fp( deck, Phases{true, true, true}, grid, table); - Runspec runspec (deck); - SummaryState st(std::chrono::system_clock::now()); - const auto& unit_system = deck.getActiveUnitSystem(); - Schedule sched(deck, grid , fp, runspec, python); - - // The BHP limit should not be effected by WCONHIST - { - const auto& c1 = sched.getWell("P",1).getProductionProperties().controls(st, 0); - const auto& c2 = sched.getWell("P",2).getProductionProperties().controls(st, 0); - BOOST_CHECK_EQUAL(c1.bhp_limit, 50 * 1e5); // 1 - BOOST_CHECK_EQUAL(c2.bhp_limit, 50 * 1e5); // 2 - } - { - const auto& c1 = sched.getWell("I",1).getInjectionProperties().controls(unit_system, st, 0); - const auto& c2 = sched.getWell("I",2).getInjectionProperties().controls(unit_system, st, 0); - BOOST_CHECK_EQUAL(c1.bhp_limit, 600 * 1e5); // 1 - BOOST_CHECK_EQUAL(c2.bhp_limit, 600 * 1e5); // 2 - } - BOOST_CHECK_EQUAL(sched.getWell("I", 2).getInjectionProperties().hasInjectionControl(Opm::Well::InjectorCMode::BHP), true); - - // The well is producer for timestep 3 and the injection properties BHPTarget should be set to zero. - BOOST_CHECK(sched.getWell("I", 3).isProducer()); - BOOST_CHECK_EQUAL(sched.getWell("I", 3).getProductionProperties().hasProductionControl(Opm::Well::ProducerCMode::BHP), true ); - BOOST_CHECK_EQUAL(sched.getWell("I", 4).getInjectionProperties().hasInjectionControl(Opm::Well::InjectorCMode::BHP), true ); - { - const auto& c3 = sched.getWell("I",3).getInjectionProperties().controls(unit_system, st, 0); - const auto& c4 = sched.getWell("I",4).getInjectionProperties().controls(unit_system, st, 0); - BOOST_CHECK_EQUAL(c3.bhp_limit, 0); // 1 - BOOST_CHECK_EQUAL(c4.bhp_limit, 6891.2 * 1e5); // 2 - } -} - -BOOST_AUTO_TEST_CASE(changeModeWithWHISTCTL) { - Opm::Parser parser; - std::string input = - "START -- 0 \n" - "19 JUN 2007 / \n" - "SCHEDULE\n" - "DATES -- 1\n" - " 10 OKT 2008 / \n" - "/\n" - "WELSPECS\n" - " 'P1' 'OP' 9 9 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / \n" - " 'P2' 'OP' 5 5 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / \n" - " 'I' 'OP' 1 1 1* 'WATER' 1* 1* 1* 1* 1* 1* 1* / \n" - "/\n" - "COMPDAT\n" - " 'P1' 9 9 1 1 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / \n" - " 'P1' 9 9 2 2 'OPEN' 1* 46.825 0.311 4332.346 1* 1* 'X' 22.123 / \n" - " 'P2' 5 5 1 1 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / \n" - " 'P2' 5 5 2 2 'OPEN' 1* 46.825 0.311 4332.346 1* 1* 'X' 22.123 / \n" - " 'I' 1 1 1 1 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / \n" - "/\n" - "WCONHIST\n" - " 'P1' 'OPEN' 'ORAT' 5*/ \n" - " 'P2' 'OPEN' 'ORAT' 5*/ \n" - "/\n" - "DATES -- 2\n" - " 15 OKT 2008 / \n" - "/\n" - "WHISTCTL\n" - " RESV / \n" - "WCONHIST\n" - " 'P1' 'OPEN' 'ORAT' 5*/ \n" - " 'P2' 'OPEN' 'ORAT' 5*/ \n" - "/\n" - "DATES -- 3\n" - " 18 OKT 2008 / \n" - "/\n" - "WCONHIST\n" - " 'P1' 'OPEN' 'ORAT' 5*/ \n" - " 'P2' 'OPEN' 'ORAT' 5*/ \n" - "/\n" - "DATES -- 4\n" - " 20 OKT 2008 / \n" - "/\n" - "WHISTCTL\n" - " LRAT / \n" - "WCONHIST\n" - " 'P1' 'OPEN' 'ORAT' 5*/ \n" - " 'P2' 'OPEN' 'ORAT' 5*/ \n" - "/\n" - "DATES -- 5\n" - " 25 OKT 2008 / \n" - "/\n" - "WHISTCTL\n" - " NONE / \n" - "WCONHIST\n" - " 'P1' 'OPEN' 'ORAT' 5*/ \n" - " 'P2' 'OPEN' 'ORAT' 5*/ \n" - "/\n" - ; - - auto deck = parser.parseString(input); - auto python = std::make_shared(); - EclipseGrid grid(10,10,10); - TableManager table ( deck ); - FieldPropsManager fp( deck, Phases{true, true, true}, grid, table); - Runspec runspec (deck); - Schedule schedule(deck, grid , fp, runspec, python); - - //Start - BOOST_CHECK_THROW(schedule.getWell("P1", 0), std::invalid_argument); - BOOST_CHECK_THROW(schedule.getWell("P2", 0), std::invalid_argument); - - //10 OKT 2008 - BOOST_CHECK(schedule.getWell("P1", 1).getProductionProperties().controlMode == Opm::Well::ProducerCMode::ORAT); - BOOST_CHECK(schedule.getWell("P2", 1).getProductionProperties().controlMode == Opm::Well::ProducerCMode::ORAT); - - //15 OKT 2008 - { - const auto& props1 = schedule.getWell("P1", 2).getProductionProperties(); - const auto& props2 = schedule.getWell("P2", 2).getProductionProperties(); - - BOOST_CHECK(props1.controlMode == Opm::Well::ProducerCMode::RESV); - BOOST_CHECK(props2.controlMode == Opm::Well::ProducerCMode::RESV); - // under history mode, a producing well should have only one rate target/limit or have no rate target/limit. - // the rate target/limit from previous report step should not be kept. - BOOST_CHECK( !props1.hasProductionControl(Opm::Well::ProducerCMode::ORAT) ); - BOOST_CHECK( !props2.hasProductionControl(Opm::Well::ProducerCMode::ORAT) ); - } - - //18 OKT 2008 - { - const auto& props1 = schedule.getWell("P1", 3).getProductionProperties(); - const auto& props2 = schedule.getWell("P2", 3).getProductionProperties(); - - BOOST_CHECK(props1.controlMode == Opm::Well::ProducerCMode::RESV); - BOOST_CHECK(props2.controlMode == Opm::Well::ProducerCMode::RESV); - - BOOST_CHECK( !props1.hasProductionControl(Opm::Well::ProducerCMode::ORAT) ); - BOOST_CHECK( !props2.hasProductionControl(Opm::Well::ProducerCMode::ORAT) ); - } - - // 20 OKT 2008 - { - const auto& props1 = schedule.getWell("P1", 4).getProductionProperties(); - const auto& props2 = schedule.getWell("P2", 4).getProductionProperties(); - - BOOST_CHECK(props1.controlMode == Opm::Well::ProducerCMode::LRAT); - BOOST_CHECK(props2.controlMode == Opm::Well::ProducerCMode::LRAT); - - BOOST_CHECK( !props1.hasProductionControl(Opm::Well::ProducerCMode::ORAT) ); - BOOST_CHECK( !props2.hasProductionControl(Opm::Well::ProducerCMode::ORAT) ); - BOOST_CHECK( !props1.hasProductionControl(Opm::Well::ProducerCMode::RESV) ); - BOOST_CHECK( !props2.hasProductionControl(Opm::Well::ProducerCMode::RESV) ); - } - - // 25 OKT 2008 - { - const auto& props1 = schedule.getWell("P1", 5).getProductionProperties(); - const auto& props2 = schedule.getWell("P2", 5).getProductionProperties(); - - BOOST_CHECK(props1.controlMode == Opm::Well::ProducerCMode::ORAT); - BOOST_CHECK(props2.controlMode == Opm::Well::ProducerCMode::ORAT); - - BOOST_CHECK( !props1.hasProductionControl(Opm::Well::ProducerCMode::LRAT) ); - BOOST_CHECK( !props2.hasProductionControl(Opm::Well::ProducerCMode::LRAT) ); - BOOST_CHECK( !props1.hasProductionControl(Opm::Well::ProducerCMode::RESV) ); - BOOST_CHECK( !props2.hasProductionControl(Opm::Well::ProducerCMode::RESV) ); - } -} - -BOOST_AUTO_TEST_CASE(fromWCONHISTtoWCONPROD) { - Opm::Parser parser; - std::string input = - "START -- 0 \n" - "19 JUN 2007 / \n" - "SCHEDULE\n" - "DATES -- 1\n" - " 10 OKT 2008 / \n" - "/\n" - "WELSPECS\n" - " 'P1' 'OP' 9 9 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / \n" - " 'P2' 'OP' 5 5 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / \n" - " 'I' 'OP' 1 1 1* 'WATER' 1* 1* 1* 1* 1* 1* 1* / \n" - "/\n" - "COMPDAT\n" - " 'P1' 9 9 1 1 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / \n" - " 'P1' 9 9 2 2 'OPEN' 1* 46.825 0.311 4332.346 1* 1* 'X' 22.123 / \n" - " 'P2' 5 5 1 1 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / \n" - " 'P2' 5 5 2 2 'OPEN' 1* 46.825 0.311 4332.346 1* 1* 'X' 22.123 / \n" - " 'I' 1 1 1 1 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / \n" - "/\n" - "WCONHIST\n" - " 'P1' 'OPEN' 'ORAT' 5*/ \n" - " 'P2' 'OPEN' 'ORAT' 5*/ \n" - "/\n" - "DATES -- 2\n" - " 15 OKT 2008 / \n" - "/\n" - "WCONPROD\n" - " 'P1' 'OPEN' 'GRAT' 1* 200.0 300.0 / \n" - " 'P2' 'OPEN' 'WRAT' 1* 100.0 300.0 / \n" - "/\n" - "DATES -- 3\n" - " 18 OKT 2008 / \n" - "/\n" - ; - - auto deck = parser.parseString(input); - auto python = std::make_shared(); - EclipseGrid grid(10,10,10); - TableManager table ( deck ); - FieldPropsManager fp( deck, Phases{true, true, true}, grid, table); - Runspec runspec (deck); - Schedule schedule(deck, grid , fp, runspec, python); - - //Start - BOOST_CHECK_THROW(schedule.getWell("P1", 0), std::invalid_argument); - BOOST_CHECK_THROW(schedule.getWell("P2", 0), std::invalid_argument); - - //10 OKT 2008 - BOOST_CHECK(schedule.getWell("P1", 1).getProductionProperties().controlMode == Opm::Well::ProducerCMode::ORAT); - BOOST_CHECK(schedule.getWell("P2", 1).getProductionProperties().controlMode == Opm::Well::ProducerCMode::ORAT); - - //15 OKT 2008 - BOOST_CHECK(schedule.getWell("P1", 2).getProductionProperties().controlMode == Opm::Well::ProducerCMode::GRAT); - BOOST_CHECK(schedule.getWell("P1", 2).getProductionProperties().hasProductionControl(Opm::Well::ProducerCMode::WRAT) ); - BOOST_CHECK(schedule.getWell("P2", 2).getProductionProperties().controlMode == Opm::Well::ProducerCMode::WRAT); - BOOST_CHECK(schedule.getWell("P2", 2).getProductionProperties().hasProductionControl(Opm::Well::ProducerCMode::GRAT) ); - // the previous control limits/targets should not stay - BOOST_CHECK( !schedule.getWell("P1", 2).getProductionProperties().hasProductionControl(Opm::Well::ProducerCMode::ORAT) ); - BOOST_CHECK( !schedule.getWell("P2", 2).getProductionProperties().hasProductionControl(Opm::Well::ProducerCMode::ORAT) ); -} - -BOOST_AUTO_TEST_CASE(WHISTCTL_NEW_WELL) { - Opm::Parser parser; - std::string input = - "START -- 0 \n" - "19 JUN 2007 / \n" - "SCHEDULE\n" - "WHISTCTL\n" - " GRAT/ \n" - "DATES -- 1\n" - " 10 OKT 2008 / \n" - "/\n" - "WELSPECS\n" - " 'P1' 'OP' 9 9 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / \n" - " 'P2' 'OP' 5 5 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / \n" - " 'I' 'OP' 1 1 1* 'WATER' 1* 1* 1* 1* 1* 1* 1* / \n" - "/\n" - "COMPDAT\n" - " 'P1' 9 9 1 1 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / \n" - " 'P1' 9 9 2 2 'OPEN' 1* 46.825 0.311 4332.346 1* 1* 'X' 22.123 / \n" - " 'P2' 5 5 1 1 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / \n" - " 'P2' 5 5 2 2 'OPEN' 1* 46.825 0.311 4332.346 1* 1* 'X' 22.123 / \n" - " 'I' 1 1 1 1 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / \n" - "/\n" - "WCONHIST\n" - " 'P1' 'OPEN' 'ORAT' 5*/ \n" - " 'P2' 'OPEN' 'ORAT' 5*/ \n" - "/\n" - "DATES -- 2\n" - " 15 OKT 2008 / \n" - "/\n" - "WHISTCTL\n" - " RESV / \n" - "WCONHIST\n" - " 'P1' 'OPEN' 'ORAT' 5*/ \n" - " 'P2' 'OPEN' 'ORAT' 5*/ \n" - "/\n" - "DATES -- 3\n" - " 18 OKT 2008 / \n" - "/\n" - "WCONHIST\n" - " 'P1' 'OPEN' 'ORAT' 5*/ \n" - " 'P2' 'OPEN' 'ORAT' 5*/ \n" - "/\n" - "DATES -- 4\n" - " 20 OKT 2008 / \n" - "/\n" - "WHISTCTL\n" - " LRAT / \n" - "WCONHIST\n" - " 'P1' 'OPEN' 'ORAT' 5*/ \n" - " 'P2' 'OPEN' 'ORAT' 5*/ \n" - "/\n" - "DATES -- 5\n" - " 25 OKT 2008 / \n" - "/\n" - "WHISTCTL\n" - " NONE / \n" - "WCONHIST\n" - " 'P1' 'OPEN' 'ORAT' 5*/ \n" - " 'P2' 'OPEN' 'ORAT' 5*/ \n" - "/\n" - ; - - auto deck = parser.parseString(input); - auto python = std::make_shared(); - EclipseGrid grid(10,10,10); - TableManager table ( deck ); - FieldPropsManager fp( deck, Phases{true, true, true}, grid, table); - Runspec runspec (deck); - Schedule schedule(deck, grid , fp, runspec, python); - - //10 OKT 2008 - BOOST_CHECK(schedule.getWell("P1", 1).getProductionProperties().controlMode == Opm::Well::ProducerCMode::GRAT); - BOOST_CHECK(schedule.getWell("P2", 1).getProductionProperties().controlMode == Opm::Well::ProducerCMode::GRAT); - - //15 OKT 2008 - BOOST_CHECK(schedule.getWell("P1", 2).getProductionProperties().controlMode == Opm::Well::ProducerCMode::RESV); - BOOST_CHECK(schedule.getWell("P2", 2).getProductionProperties().controlMode == Opm::Well::ProducerCMode::RESV); - // under history mode, a producing well should have only one rate target/limit or have no rate target/limit. - // the rate target/limit from previous report step should not be kept. - BOOST_CHECK( !schedule.getWell("P1", 2).getProductionProperties().hasProductionControl(Opm::Well::ProducerCMode::ORAT) ); - BOOST_CHECK( !schedule.getWell("P2", 2).getProductionProperties().hasProductionControl(Opm::Well::ProducerCMode::ORAT) ); - - //18 OKT 2008 - BOOST_CHECK(schedule.getWell("P1", 3).getProductionProperties().controlMode == Opm::Well::ProducerCMode::RESV); - BOOST_CHECK(schedule.getWell("P2", 3).getProductionProperties().controlMode == Opm::Well::ProducerCMode::RESV); - BOOST_CHECK( !schedule.getWell("P1", 3).getProductionProperties().hasProductionControl(Opm::Well::ProducerCMode::ORAT) ); - BOOST_CHECK( !schedule.getWell("P2", 3).getProductionProperties().hasProductionControl(Opm::Well::ProducerCMode::ORAT) ); - - // 20 OKT 2008 - BOOST_CHECK(schedule.getWell("P1", 4).getProductionProperties().controlMode == Opm::Well::ProducerCMode::LRAT); - BOOST_CHECK(schedule.getWell("P2", 4).getProductionProperties().controlMode == Opm::Well::ProducerCMode::LRAT); - BOOST_CHECK( !schedule.getWell("P1", 4).getProductionProperties().hasProductionControl(Opm::Well::ProducerCMode::ORAT) ); - BOOST_CHECK( !schedule.getWell("P2", 4).getProductionProperties().hasProductionControl(Opm::Well::ProducerCMode::ORAT) ); - BOOST_CHECK( !schedule.getWell("P1", 4).getProductionProperties().hasProductionControl(Opm::Well::ProducerCMode::RESV) ); - BOOST_CHECK( !schedule.getWell("P2", 4).getProductionProperties().hasProductionControl(Opm::Well::ProducerCMode::RESV) ); - - // 25 OKT 2008 - BOOST_CHECK(schedule.getWell("P1", 5).getProductionProperties().controlMode == Opm::Well::ProducerCMode::ORAT); - BOOST_CHECK(schedule.getWell("P2", 5).getProductionProperties().controlMode == Opm::Well::ProducerCMode::ORAT); - BOOST_CHECK( !schedule.getWell("P1", 5).getProductionProperties().hasProductionControl(Opm::Well::ProducerCMode::RESV) ); - BOOST_CHECK( !schedule.getWell("P2", 5).getProductionProperties().hasProductionControl(Opm::Well::ProducerCMode::RESV) ); - BOOST_CHECK( !schedule.getWell("P1", 5).getProductionProperties().hasProductionControl(Opm::Well::ProducerCMode::LRAT) ); - BOOST_CHECK( !schedule.getWell("P2", 5).getProductionProperties().hasProductionControl(Opm::Well::ProducerCMode::LRAT) ); -} - - - -BOOST_AUTO_TEST_CASE(unsupportedOptionWHISTCTL) { - Opm::Parser parser; - std::string input = - "START -- 0 \n" - "19 JUN 2007 / \n" - "SCHEDULE\n" - "DATES -- 1\n" - " 10 OKT 2008 / \n" - "/\n" - "WELSPECS\n" - " 'P1' 'OP' 9 9 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / \n" - " 'P2' 'OP' 5 5 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / \n" - " 'I' 'OP' 1 1 1* 'WATER' 1* 1* 1* 1* 1* 1* 1* / \n" - "/\n" - "COMPDAT\n" - " 'P1' 9 9 1 1 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / \n" - " 'P1' 9 9 2 2 'OPEN' 1* 46.825 0.311 4332.346 1* 1* 'X' 22.123 / \n" - " 'P2' 5 5 1 1 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / \n" - " 'P2' 5 5 2 2 'OPEN' 1* 46.825 0.311 4332.346 1* 1* 'X' 22.123 / \n" - " 'I' 1 1 1 1 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / \n" - "/\n" - "WCONHIST\n" - " 'P1' 'OPEN' 'ORAT' 5*/ \n" - " 'P2' 'OPEN' 'ORAT' 5*/ \n" - "/\n" - "DATES -- 2\n" - " 15 OKT 2008 / \n" - "/\n" - "WHISTCTL\n" - " * YES / \n" - ; - - auto deck = parser.parseString(input); - auto python = std::make_shared(); - EclipseGrid grid(10,10,10); - TableManager table ( deck ); - FieldPropsManager fp( deck, Phases{true, true, true}, grid, table); - Runspec runspec (deck); - BOOST_CHECK_THROW(Schedule(deck, grid, fp, runspec, python), std::invalid_argument); -} - -BOOST_AUTO_TEST_CASE(move_HEAD_I_location) { - std::string input = R"( - START -- 0 - 19 JUN 2007 / - SCHEDULE - DATES -- 1 - 10 OKT 2008 / - / - WELSPECS - 'W1' 'G1' 3 3 2873.94 'WATER' 0.00 'STD' 'SHUT' 'NO' 0 'SEG' / - 'W2' 'G2' 5 5 1 'OIL' 0.00 'STD' 'SHUT' 'NO' 0 'SEG' / - / - DATES -- 2 - 15 OKT 2008 / - / - - WELSPECS - 'W1' 'G1' 4 3 2873.94 'WATER' 0.00 'STD' 'SHUT' 'NO' 0 'SEG' / - / - )"; - - auto deck = Parser().parseString(input); - auto python = std::make_shared(); - EclipseGrid grid(10,10,10); - TableManager table ( deck ); - FieldPropsManager fp( deck, Phases{true, true, true}, grid, table); - Runspec runspec (deck); - Schedule schedule( deck, grid, fp, runspec, python); - BOOST_CHECK_EQUAL(2, schedule.getWell("W1", 1).getHeadI()); - BOOST_CHECK_EQUAL(3, schedule.getWell("W1", 2).getHeadI()); -} - -BOOST_AUTO_TEST_CASE(change_ref_depth) { - std::string input = R"( - START -- 0 - 19 JUN 2007 / - SCHEDULE - DATES -- 1 - 10 OKT 2008 / - / - WELSPECS - 'W1' 'G1' 3 3 2873.94 'WATER' 0.00 'STD' 'SHUT' 'NO' 0 'SEG' / - 'W2' 'G2' 5 5 1 'OIL' 0.00 'STD' 'SHUT' 'NO' 0 'SEG' / - / - DATES -- 2 - 15 OKT 2008 / - / - - WELSPECS - 'W1' 'G1' 3 3 12.0 'WATER' 0.00 'STD' 'SHUT' 'NO' 0 'SEG' / - / - )"; - - auto deck = Parser().parseString(input); - auto python = std::make_shared(); - EclipseGrid grid(10,10,10); - TableManager table ( deck ); - FieldPropsManager fp( deck, Phases{true, true, true}, grid, table); - Runspec runspec (deck); - Schedule schedule( deck, grid, fp, runspec, python); - BOOST_CHECK_CLOSE(2873.94, schedule.getWell("W1", 1).getRefDepth(), 1e-5); - BOOST_CHECK_EQUAL(12.0, schedule.getWell("W1", 2).getRefDepth()); -} - - -BOOST_AUTO_TEST_CASE(WTEMP_well_template) { - std::string input = R"( - START -- 0 - 19 JUN 2007 / - SCHEDULE - DATES -- 1 - 10 OKT 2008 / - / - WELSPECS - 'W1' 'G1' 3 3 2873.94 'OIL' 0.00 'STD' 'SHUT' 'NO' 0 'SEG' / - 'W2' 'G2' 5 5 1 'WATER' 0.00 'STD' 'SHUT' 'NO' 0 'SEG' / - 'W3' 'G2' 6 6 1 'WATER' 0.00 'STD' 'SHUT' 'NO' 0 'SEG' / - / - - WCONINJE - 'W2' 'WATER' 'OPEN' 'RATE' 20000 4* / - 'W3' 'WATER' 'OPEN' 'RATE' 20000 4* / - / - - DATES -- 2 - 15 OKT 2008 / - / - - WTEMP - 'W*' 40.0 / - / - )"; - - auto deck = Parser().parseString(input); - auto python = std::make_shared(); - EclipseGrid grid(10,10,10); - TableManager table ( deck ); - FieldPropsManager fp( deck, Phases{true, true, true}, grid, table); - Runspec runspec (deck); - Schedule schedule( deck, grid, fp, runspec, python); - - BOOST_CHECK_CLOSE(288.71, schedule.getWell("W1", 1).getInjectionProperties().temperature, 1e-5); - BOOST_CHECK_CLOSE(288.71, schedule.getWell("W1", 2).getInjectionProperties().temperature, 1e-5); - - BOOST_CHECK_CLOSE(288.71, schedule.getWell("W2", 1).getInjectionProperties().temperature, 1e-5); - BOOST_CHECK_CLOSE(313.15, schedule.getWell("W2", 2).getInjectionProperties().temperature, 1e-5); - - BOOST_CHECK_CLOSE(288.71, schedule.getWell("W3", 1).getInjectionProperties().temperature, 1e-5); - BOOST_CHECK_CLOSE(313.15, schedule.getWell("W3", 2).getInjectionProperties().temperature, 1e-5); -} - - -BOOST_AUTO_TEST_CASE(WTEMPINJ_well_template) { - std::string input = R"( - START -- 0 - 19 JUN 2007 / - SCHEDULE - DATES -- 1 - 10 OKT 2008 / - / - WELSPECS - 'W1' 'G1' 3 3 2873.94 'OIL' 0.00 'STD' 'SHUT' 'NO' 0 'SEG' / - 'W2' 'G2' 5 5 1 'WATER' 0.00 'STD' 'SHUT' 'NO' 0 'SEG' / - 'W3' 'G2' 6 6 1 'WATER' 0.00 'STD' 'SHUT' 'NO' 0 'SEG' / - / - - WCONINJE - 'W2' 'WATER' 'OPEN' 'RATE' 20000 4* / - 'W3' 'WATER' 'OPEN' 'RATE' 20000 4* / - / - - DATES -- 2 - 15 OKT 2008 / - / - - WINJTEMP - 'W*' 1* 40.0 1* / - / - )"; - - auto deck = Parser().parseString(input); - auto python = std::make_shared(); - EclipseGrid grid(10,10,10); - TableManager table ( deck ); - FieldPropsManager fp( deck, Phases{true, true, true}, grid, table); - Runspec runspec (deck); - Schedule schedule( deck, grid, fp, runspec, python); - - // Producerwell - currently setting temperature only acts on injectors. - BOOST_CHECK_CLOSE(288.71, schedule.getWell("W1", 1).getInjectionProperties().temperature, 1e-5); - BOOST_CHECK_CLOSE(288.71, schedule.getWell("W1", 2).getInjectionProperties().temperature, 1e-5); - - BOOST_CHECK_CLOSE(288.71, schedule.getWell("W2", 1).getInjectionProperties().temperature, 1e-5); - BOOST_CHECK_CLOSE(313.15, schedule.getWell("W2", 2).getInjectionProperties().temperature, 1e-5); - - BOOST_CHECK_CLOSE(288.71, schedule.getWell("W3", 1).getInjectionProperties().temperature, 1e-5); - BOOST_CHECK_CLOSE(313.15, schedule.getWell("W3", 2).getInjectionProperties().temperature, 1e-5); -} - -BOOST_AUTO_TEST_CASE( COMPDAT_sets_automatic_complnum ) { - std::string input = R"( - START -- 0 - 19 JUN 2007 / - GRID - PERMX - 1000*0.10/ - COPY - PERMX PERMY / - PERMX PERMZ / - / - SCHEDULE - DATES -- 1 - 10 OKT 2008 / - / - WELSPECS - 'W1' 'G1' 3 3 2873.94 'WATER' 0.00 'STD' 'SHUT' 'NO' 0 'SEG' / - / - - COMPDAT - 'W1' 0 0 1 1 'SHUT' 1* / -- regular completion (1) - 'W1' 0 0 2 2 'SHUT' 1* / -- regular completion (2) - 'W1' 0 0 3 4 'SHUT' 1* / -- two completions in one record (3, 4) - / - - DATES -- 2 - 11 OKT 2008 / - / - - COMPDAT - 'W1' 0 0 1 1 'SHUT' 1* / -- respecify, essentially ignore (1) - / - )"; - - auto deck = Parser().parseString(input); - auto python = std::make_shared(); - EclipseGrid grid(10,10,10); - TableManager table ( deck ); - FieldPropsManager fp( deck, Phases{true, true, true}, grid, table); - Runspec runspec (deck); - Schedule schedule( deck, grid, fp, runspec, python); - const auto& cs1 = schedule.getWell( "W1", 1 ).getConnections( ); - BOOST_CHECK_EQUAL( 1, cs1.get( 0 ).complnum() ); - BOOST_CHECK_EQUAL( 2, cs1.get( 1 ).complnum() ); - BOOST_CHECK_EQUAL( 3, cs1.get( 2 ).complnum() ); - BOOST_CHECK_EQUAL( 4, cs1.get( 3 ).complnum() ); - - const auto& cs2 = schedule.getWell( "W1", 2 ).getConnections( ); - BOOST_CHECK_EQUAL( 1, cs2.get( 0 ).complnum() ); - BOOST_CHECK_EQUAL( 2, cs2.get( 1 ).complnum() ); - BOOST_CHECK_EQUAL( 3, cs2.get( 2 ).complnum() ); - BOOST_CHECK_EQUAL( 4, cs2.get( 3 ).complnum() ); -} - -BOOST_AUTO_TEST_CASE( COMPDAT_multiple_wells ) { - std::string input = R"( - START -- 0 - 19 JUN 2007 / - GRID - PERMX - 1000*0.10/ - COPY - PERMX PERMY / - PERMX PERMZ / - / - SCHEDULE - DATES -- 1 - 10 OKT 2008 / - / - WELSPECS - 'W1' 'G1' 3 3 2873.94 'WATER' 0.00 'STD' 'SHUT' 'NO' 0 'SEG' / - 'W2' 'G2' 5 5 1 'OIL' 0.00 'STD' 'SHUT' 'NO' 0 'SEG' / - / - - COMPDAT - 'W1' 0 0 1 1 'SHUT' 1* / -- regular completion (1) - 'W1' 0 0 2 2 'SHUT' 1* / -- regular completion (2) - 'W1' 0 0 3 4 'SHUT' 1* / -- two completions in one record (3, 4) - 'W2' 0 0 3 3 'SHUT' 1* / -- regular completion (1) - 'W2' 0 0 1 3 'SHUT' 1* / -- two completions (one exist already) (2, 3) - 'W*' 0 0 3 5 'SHUT' 1* / -- two completions, two wells (includes existing - -- and adding for both wells) - / - )"; - - auto deck = Parser().parseString( input); - auto python = std::make_shared(); - EclipseGrid grid( 10, 10, 10 ); - TableManager table ( deck ); - FieldPropsManager fp( deck, Phases{true, true, true}, grid, table); - Runspec runspec (deck); - Schedule schedule( deck, grid, fp, runspec, python); - - { - const auto& w1cs = schedule.getWell( "W1", 1 ).getConnections(); - BOOST_CHECK_EQUAL( 1, w1cs.get( 0 ).complnum() ); - BOOST_CHECK_EQUAL( 2, w1cs.get( 1 ).complnum() ); - BOOST_CHECK_EQUAL( 3, w1cs.get( 2 ).complnum() ); - BOOST_CHECK_EQUAL( 4, w1cs.get( 3 ).complnum() ); - BOOST_CHECK_EQUAL( 5, w1cs.get( 4 ).complnum() ); - - const auto& w2cs = schedule.getWell( "W2", 1 ).getConnections(); - BOOST_CHECK_EQUAL( 1, w2cs.getFromIJK( 4, 4, 2 ).complnum() ); - BOOST_CHECK_EQUAL( 2, w2cs.getFromIJK( 4, 4, 0 ).complnum() ); - BOOST_CHECK_EQUAL( 3, w2cs.getFromIJK( 4, 4, 1 ).complnum() ); - BOOST_CHECK_EQUAL( 4, w2cs.getFromIJK( 4, 4, 3 ).complnum() ); - BOOST_CHECK_EQUAL( 5, w2cs.getFromIJK( 4, 4, 4 ).complnum() ); - } - - { - const auto& w1cs = schedule.getWell( "W1", 1 ).getConnections(); - BOOST_CHECK_EQUAL( 1, w1cs.get( 0 ).complnum() ); - BOOST_CHECK_EQUAL( 2, w1cs.get( 1 ).complnum() ); - BOOST_CHECK_EQUAL( 3, w1cs.get( 2 ).complnum() ); - BOOST_CHECK_EQUAL( 4, w1cs.get( 3 ).complnum() ); - BOOST_CHECK_EQUAL( 5, w1cs.get( 4 ).complnum() ); - - const auto& w2cs = schedule.getWell( "W2", 1 ).getConnections(); - BOOST_CHECK_EQUAL( 1, w2cs.getFromIJK( 4, 4, 2 ).complnum() ); - BOOST_CHECK_EQUAL( 2, w2cs.getFromIJK( 4, 4, 0 ).complnum() ); - BOOST_CHECK_EQUAL( 3, w2cs.getFromIJK( 4, 4, 1 ).complnum() ); - BOOST_CHECK_EQUAL( 4, w2cs.getFromIJK( 4, 4, 3 ).complnum() ); - BOOST_CHECK_EQUAL( 5, w2cs.getFromIJK( 4, 4, 4 ).complnum() ); - - BOOST_CHECK_THROW( w2cs.get( 5 ).complnum(), std::out_of_range ); - } -} - -BOOST_AUTO_TEST_CASE( COMPDAT_multiple_records_same_completion ) { - std::string input = R"( - START -- 0 - 19 JUN 2007 / - GRID - PERMX - 1000*0.10/ - COPY - PERMX PERMY / - PERMX PERMZ / - / - SCHEDULE - DATES -- 1 - 10 OKT 2008 / - / - WELSPECS - 'W1' 'G1' 3 3 2873.94 'WATER' 0.00 'STD' 'SHUT' 'NO' 0 'SEG' / - 'W2' 'G2' 5 5 1 'OIL' 0.00 'STD' 'SHUT' 'NO' 0 'SEG' / - / - - COMPDAT - 'W1' 0 0 1 2 'SHUT' 1* / -- multiple completion (1, 2) - 'W1' 0 0 2 2 'SHUT' 1* / -- updated completion (2) - 'W1' 0 0 3 3 'SHUT' 1* / -- regular completion (3) - / - )"; - - auto deck = Parser().parseString(input); - auto python = std::make_shared(); - EclipseGrid grid(10,10,10); - TableManager table ( deck ); - FieldPropsManager fp( deck, Phases{true, true, true}, grid, table); - Runspec runspec (deck); - Schedule schedule( deck, grid, fp, runspec, python); - const auto& cs = schedule.getWell( "W1", 1 ).getConnections(); - BOOST_CHECK_EQUAL( 3U, cs.size() ); - BOOST_CHECK_EQUAL( 1, cs.get( 0 ).complnum() ); - BOOST_CHECK_EQUAL( 2, cs.get( 1 ).complnum() ); - BOOST_CHECK_EQUAL( 3, cs.get( 2 ).complnum() ); -} - - -BOOST_AUTO_TEST_CASE( complump_less_than_1 ) { - std::string input = R"( - START -- 0 - 19 JUN 2007 / - GRID - PERMX - 1000*0.10/ - COPY - PERMX PERMY / - PERMX PERMZ / - / - SCHEDULE - - WELSPECS - 'W1' 'G1' 3 3 2873.94 'WATER' 0.00 'STD' 'SHUT' 'NO' 0 'SEG' / - / - - COMPDAT - 'W1' 0 0 1 2 'SHUT' 1* / - / - - COMPLUMP - 'W1' 0 0 0 0 0 / - / - )"; - - auto deck = Parser().parseString( input); - auto python = std::make_shared(); - EclipseGrid grid( 10, 10, 10); - TableManager table ( deck ); - FieldPropsManager fp( deck, Phases{true, true, true}, grid, table); - Runspec runspec (deck); - BOOST_CHECK_THROW( Schedule( deck , grid, fp, runspec, python), std::invalid_argument ); -} - -BOOST_AUTO_TEST_CASE( complump ) { - std::string input = R"( - START -- 0 - 19 JUN 2007 / - GRID - PERMX - 1000*0.10/ - COPY - PERMX PERMY / - PERMX PERMZ / - / - SCHEDULE - - WELSPECS - 'W1' 'G1' 3 3 2873.94 'WATER' 0.00 'STD' 'SHUT' 'NO' 0 'SEG' / - 'W2' 'G2' 5 5 1 'OIL' 0.00 'STD' 'SHUT' 'NO' 0 'SEG' / - / - - COMPDAT - 'W1' 0 0 1 2 'SHUT' 1* / - 'W1' 0 0 2 3 'SHUT' 1* / - 'W1' 0 0 4 6 'SHUT' 1* / - 'W2' 0 0 3 4 'SHUT' 1* / - 'W2' 0 0 1 4 'SHUT' 1* / - / - - COMPLUMP - -- name I J K1 K2 C - -- where C is the completion number of this lump - 'W1' 0 0 1 3 1 / - / - - DATES -- 1 - 10 OKT 2008 / - / - - WELOPEN - 'W1' 'OPEN' 0 0 0 1 1 / - / - )"; - - constexpr auto open = Connection::State::OPEN; - constexpr auto shut = Connection::State::SHUT; - - auto deck = Parser().parseString(input); - auto python = std::make_shared(); - EclipseGrid grid(10,10,10); - TableManager table ( deck ); - FieldPropsManager fp( deck, Phases{true, true, true}, grid, table); - Runspec runspec (deck); - Schedule schedule( deck, grid, fp, runspec, python); - - const auto& sc0 = schedule.getWell("W1", 0).getConnections(); - /* complnum should be modified by COMPLNUM */ - BOOST_CHECK_EQUAL( 1, sc0.getFromIJK( 2, 2, 0 ).complnum() ); - BOOST_CHECK_EQUAL( 1, sc0.getFromIJK( 2, 2, 1 ).complnum() ); - BOOST_CHECK_EQUAL( 1, sc0.getFromIJK( 2, 2, 2 ).complnum() ); - - BOOST_CHECK( shut == sc0.getFromIJK( 2, 2, 0 ).state() ); - BOOST_CHECK( shut == sc0.getFromIJK( 2, 2, 1 ).state() ); - BOOST_CHECK( shut == sc0.getFromIJK( 2, 2, 2 ).state() ); - - const auto& sc1 = schedule.getWell("W1", 1).getConnections(); - BOOST_CHECK( open == sc1.getFromIJK( 2, 2, 0 ).state() ); - BOOST_CHECK( open == sc1.getFromIJK( 2, 2, 1 ).state() ); - BOOST_CHECK( open == sc1.getFromIJK( 2, 2, 2 ).state() ); - BOOST_CHECK( shut == sc1.getFromIJK( 2, 2, 3 ).state() ); - - const auto& completions = schedule.getWell("W1", 1).getCompletions(); - BOOST_CHECK_EQUAL(completions.size(), 4); - - const auto& c1 = completions.at(1); - BOOST_CHECK_EQUAL(c1.size(), 3); - - for (const auto& pair : completions) { - if (pair.first == 1) - BOOST_CHECK(pair.second.size() > 1); - else - BOOST_CHECK_EQUAL(pair.second.size(), 1); - } -} - - - -BOOST_AUTO_TEST_CASE( COMPLUMP_specific_coordinates ) { - std::string input = R"( - START -- 0 - 19 JUN 2007 / - GRID - PERMX - 1000*0.10/ - COPY - PERMX PERMY / - PERMX PERMZ / - / - SCHEDULE - - WELSPECS - 'W1' 'G1' 3 3 2873.94 'WATER' 0.00 'STD' 'SHUT' 'NO' 0 'SEG' / - / - - COMPDAT -- completion number - 'W1' 1 1 1 1 'SHUT' 1* / -- 1 - 'W1' 1 1 2 2 'SHUT' 1* / -- 2 - 'W1' 0 0 1 2 'SHUT' 1* / -- 3, 4 - 'W1' 0 0 2 3 'SHUT' 1* / -- 5 - 'W1' 2 2 1 1 'SHUT' 1* / -- 6 - 'W1' 2 2 4 6 'SHUT' 1* / -- 7, 8, 9 - / - - DATES -- 1 - 10 OKT 2008 / - / - - - DATES -- 2 - 15 OKT 2008 / - / - - COMPLUMP - -- name I J K1 K2 C - -- where C is the completion number of this lump - 'W1' 0 0 2 3 2 / -- all with k = [2 <= k <= 3] -> {2, 4, 5} - 'W1' 2 2 1 5 7 / -- fix'd i,j, k = [1 <= k <= 5] -> {6, 7, 8} - / - - WELOPEN - 'W1' OPEN 0 0 0 2 2 / -- open the new 2 {2, 4, 5} - 'W1' OPEN 0 0 0 5 7 / -- open 5..7 {5, 6, 7, 8} - / - )"; - - constexpr auto open = Connection::State::OPEN; - constexpr auto shut = Connection::State::SHUT; - - auto deck = Parser().parseString( input); - auto python = std::make_shared(); - EclipseGrid grid( 10, 10, 10 ); - TableManager table ( deck ); - FieldPropsManager fp( deck, Phases{true, true, true}, grid, table); - Runspec runspec (deck); - Schedule schedule( deck, grid, fp, runspec, python); - - const auto& cs1 = schedule.getWell("W1", 1).getConnections(); - const auto& cs2 = schedule.getWell("W1", 2).getConnections(); - BOOST_CHECK_EQUAL( 9U, cs1.size() ); - BOOST_CHECK( shut == cs1.getFromIJK( 0, 0, 1 ).state() ); - BOOST_CHECK( shut == cs1.getFromIJK( 2, 2, 0 ).state() ); - BOOST_CHECK( shut == cs1.getFromIJK( 2, 2, 1 ).state() ); - BOOST_CHECK( shut == cs1.getFromIJK( 2, 2, 2 ).state() ); - BOOST_CHECK( shut == cs1.getFromIJK( 1, 1, 0 ).state() ); - BOOST_CHECK( shut == cs1.getFromIJK( 1, 1, 3 ).state() ); - BOOST_CHECK( shut == cs1.getFromIJK( 1, 1, 4 ).state() ); - BOOST_CHECK( shut == cs1.getFromIJK( 1, 1, 5 ).state() ); - - BOOST_CHECK( open == cs2.getFromIJK( 0, 0, 1 ).state() ); - BOOST_CHECK( shut == cs2.getFromIJK( 2, 2, 0 ).state() ); - BOOST_CHECK( open == cs2.getFromIJK( 2, 2, 1 ).state() ); - BOOST_CHECK( open == cs2.getFromIJK( 2, 2, 2 ).state() ); - BOOST_CHECK( open == cs2.getFromIJK( 1, 1, 0 ).state() ); - BOOST_CHECK( open == cs2.getFromIJK( 1, 1, 3 ).state() ); - BOOST_CHECK( open == cs2.getFromIJK( 1, 1, 4 ).state() ); - BOOST_CHECK( shut == cs2.getFromIJK( 1, 1, 5 ).state() ); -} - -BOOST_AUTO_TEST_CASE(TestCompletionStateEnum2String) { - BOOST_CHECK( "AUTO" == Connection::State2String(Connection::State::AUTO)); - BOOST_CHECK( "OPEN" == Connection::State2String(Connection::State::OPEN)); - BOOST_CHECK( "SHUT" == Connection::State2String(Connection::State::SHUT)); -} - - -BOOST_AUTO_TEST_CASE(TestCompletionStateEnumFromString) { - BOOST_CHECK_THROW( Connection::StateFromString("XXX") , std::invalid_argument ); - BOOST_CHECK( Connection::State::AUTO == Connection::StateFromString("AUTO")); - BOOST_CHECK( Connection::State::SHUT == Connection::StateFromString("SHUT")); - BOOST_CHECK( Connection::State::SHUT == Connection::StateFromString("STOP")); - BOOST_CHECK( Connection::State::OPEN == Connection::StateFromString("OPEN")); -} - - - -BOOST_AUTO_TEST_CASE(TestCompletionStateEnumLoop) { - BOOST_CHECK( Connection::State::AUTO == Connection::StateFromString( Connection::State2String( Connection::State::AUTO ) )); - BOOST_CHECK( Connection::State::SHUT == Connection::StateFromString( Connection::State2String( Connection::State::SHUT ) )); - BOOST_CHECK( Connection::State::OPEN == Connection::StateFromString( Connection::State2String( Connection::State::OPEN ) )); - - BOOST_CHECK( "AUTO" == Connection::State2String(Connection::StateFromString( "AUTO" ) )); - BOOST_CHECK( "OPEN" == Connection::State2String(Connection::StateFromString( "OPEN" ) )); - BOOST_CHECK( "SHUT" == Connection::State2String(Connection::StateFromString( "SHUT" ) )); -} - - -/*****************************************************************/ - -BOOST_AUTO_TEST_CASE(TestCompletionDirectionEnum2String) -{ - BOOST_CHECK("X" == Connection::Direction2String(Connection::Direction::X)); - BOOST_CHECK("Y" == Connection::Direction2String(Connection::Direction::Y)); - BOOST_CHECK("Z" == Connection::Direction2String(Connection::Direction::Z)); -} - -BOOST_AUTO_TEST_CASE(TestCompletionDirectionEnumFromString) -{ - BOOST_CHECK_THROW(Connection::DirectionFromString("XXX"), std::invalid_argument); - - BOOST_CHECK(Connection::Direction::X == Connection::DirectionFromString("X")); - BOOST_CHECK(Connection::Direction::Y == Connection::DirectionFromString("Y")); - BOOST_CHECK(Connection::Direction::Z == Connection::DirectionFromString("Z")); -} - -BOOST_AUTO_TEST_CASE(TestCompletionConnectionDirectionLoop) -{ - BOOST_CHECK(Connection::Direction::X == Connection::DirectionFromString(Connection::Direction2String(Connection::Direction::X))); - BOOST_CHECK(Connection::Direction::Y == Connection::DirectionFromString(Connection::Direction2String(Connection::Direction::Y))); - BOOST_CHECK(Connection::Direction::Z == Connection::DirectionFromString(Connection::Direction2String(Connection::Direction::Z))); - - BOOST_CHECK("X" == Connection::Direction2String(Connection::DirectionFromString("X"))); - BOOST_CHECK("Y" == Connection::Direction2String(Connection::DirectionFromString("Y"))); - BOOST_CHECK("Z" == Connection::Direction2String(Connection::DirectionFromString("Z"))); -} - -/*****************************************************************/ - -BOOST_AUTO_TEST_CASE(TestGroupInjectionControlEnum2String) { - BOOST_CHECK_EQUAL( "NONE" , Group::InjectionCMode2String(Group::InjectionCMode::NONE)); - BOOST_CHECK_EQUAL( "RATE" , Group::InjectionCMode2String(Group::InjectionCMode::RATE)); - BOOST_CHECK_EQUAL( "RESV" , Group::InjectionCMode2String(Group::InjectionCMode::RESV)); - BOOST_CHECK_EQUAL( "REIN" , Group::InjectionCMode2String(Group::InjectionCMode::REIN)); - BOOST_CHECK_EQUAL( "VREP" , Group::InjectionCMode2String(Group::InjectionCMode::VREP)); - BOOST_CHECK_EQUAL( "FLD" , Group::InjectionCMode2String(Group::InjectionCMode::FLD)); -} - - -BOOST_AUTO_TEST_CASE(TestGroupInjectionControlEnumFromString) { - BOOST_CHECK_THROW( Group::InjectionCModeFromString("XXX") , std::invalid_argument ); - BOOST_CHECK( Group::InjectionCMode::NONE == Group::InjectionCModeFromString("NONE")); - BOOST_CHECK( Group::InjectionCMode::RATE == Group::InjectionCModeFromString("RATE")); - BOOST_CHECK( Group::InjectionCMode::RESV == Group::InjectionCModeFromString("RESV")); - BOOST_CHECK( Group::InjectionCMode::REIN == Group::InjectionCModeFromString("REIN")); - BOOST_CHECK( Group::InjectionCMode::VREP == Group::InjectionCModeFromString("VREP")); - BOOST_CHECK( Group::InjectionCMode::FLD == Group::InjectionCModeFromString("FLD")); -} - - - -BOOST_AUTO_TEST_CASE(TestGroupInjectionControlEnumLoop) { - BOOST_CHECK( Group::InjectionCMode::NONE == Group::InjectionCModeFromString( Group::InjectionCMode2String( Group::InjectionCMode::NONE ) )); - BOOST_CHECK( Group::InjectionCMode::RATE == Group::InjectionCModeFromString( Group::InjectionCMode2String( Group::InjectionCMode::RATE ) )); - BOOST_CHECK( Group::InjectionCMode::RESV == Group::InjectionCModeFromString( Group::InjectionCMode2String( Group::InjectionCMode::RESV ) )); - BOOST_CHECK( Group::InjectionCMode::REIN == Group::InjectionCModeFromString( Group::InjectionCMode2String( Group::InjectionCMode::REIN ) )); - BOOST_CHECK( Group::InjectionCMode::VREP == Group::InjectionCModeFromString( Group::InjectionCMode2String( Group::InjectionCMode::VREP ) )); - BOOST_CHECK( Group::InjectionCMode::FLD == Group::InjectionCModeFromString( Group::InjectionCMode2String( Group::InjectionCMode::FLD ) )); - - BOOST_CHECK_EQUAL( "NONE" , Group::InjectionCMode2String(Group::InjectionCModeFromString( "NONE" ) )); - BOOST_CHECK_EQUAL( "RATE" , Group::InjectionCMode2String(Group::InjectionCModeFromString( "RATE" ) )); - BOOST_CHECK_EQUAL( "RESV" , Group::InjectionCMode2String(Group::InjectionCModeFromString( "RESV" ) )); - BOOST_CHECK_EQUAL( "REIN" , Group::InjectionCMode2String(Group::InjectionCModeFromString( "REIN" ) )); - BOOST_CHECK_EQUAL( "VREP" , Group::InjectionCMode2String(Group::InjectionCModeFromString( "VREP" ) )); - BOOST_CHECK_EQUAL( "FLD" , Group::InjectionCMode2String(Group::InjectionCModeFromString( "FLD" ) )); -} - -/*****************************************************************/ - -BOOST_AUTO_TEST_CASE(TestGroupProductionControlEnum2String) { - BOOST_CHECK_EQUAL( "NONE" , Group::ProductionCMode2String(Group::ProductionCMode::NONE)); - BOOST_CHECK_EQUAL( "ORAT" , Group::ProductionCMode2String(Group::ProductionCMode::ORAT)); - BOOST_CHECK_EQUAL( "WRAT" , Group::ProductionCMode2String(Group::ProductionCMode::WRAT)); - BOOST_CHECK_EQUAL( "GRAT" , Group::ProductionCMode2String(Group::ProductionCMode::GRAT)); - BOOST_CHECK_EQUAL( "LRAT" , Group::ProductionCMode2String(Group::ProductionCMode::LRAT)); - BOOST_CHECK_EQUAL( "CRAT" , Group::ProductionCMode2String(Group::ProductionCMode::CRAT)); - BOOST_CHECK_EQUAL( "RESV" , Group::ProductionCMode2String(Group::ProductionCMode::RESV)); - BOOST_CHECK_EQUAL( "PRBL" , Group::ProductionCMode2String(Group::ProductionCMode::PRBL)); -} - - -BOOST_AUTO_TEST_CASE(TestGroupProductionControlEnumFromString) { - BOOST_CHECK_THROW(Group::ProductionCModeFromString("XXX") , std::invalid_argument ); - BOOST_CHECK(Group::ProductionCMode::NONE == Group::ProductionCModeFromString("NONE")); - BOOST_CHECK(Group::ProductionCMode::ORAT == Group::ProductionCModeFromString("ORAT")); - BOOST_CHECK(Group::ProductionCMode::WRAT == Group::ProductionCModeFromString("WRAT")); - BOOST_CHECK(Group::ProductionCMode::GRAT == Group::ProductionCModeFromString("GRAT")); - BOOST_CHECK(Group::ProductionCMode::LRAT == Group::ProductionCModeFromString("LRAT")); - BOOST_CHECK(Group::ProductionCMode::CRAT == Group::ProductionCModeFromString("CRAT")); - BOOST_CHECK(Group::ProductionCMode::RESV == Group::ProductionCModeFromString("RESV")); - BOOST_CHECK(Group::ProductionCMode::PRBL == Group::ProductionCModeFromString("PRBL")); -} - - - -BOOST_AUTO_TEST_CASE(TestGroupProductionControlEnumLoop) { - BOOST_CHECK( Group::ProductionCMode::NONE == Group::ProductionCModeFromString( Group::ProductionCMode2String( Group::ProductionCMode::NONE ) )); - BOOST_CHECK( Group::ProductionCMode::ORAT == Group::ProductionCModeFromString( Group::ProductionCMode2String( Group::ProductionCMode::ORAT ) )); - BOOST_CHECK( Group::ProductionCMode::WRAT == Group::ProductionCModeFromString( Group::ProductionCMode2String( Group::ProductionCMode::WRAT ) )); - BOOST_CHECK( Group::ProductionCMode::GRAT == Group::ProductionCModeFromString( Group::ProductionCMode2String( Group::ProductionCMode::GRAT ) )); - BOOST_CHECK( Group::ProductionCMode::LRAT == Group::ProductionCModeFromString( Group::ProductionCMode2String( Group::ProductionCMode::LRAT ) )); - BOOST_CHECK( Group::ProductionCMode::CRAT == Group::ProductionCModeFromString( Group::ProductionCMode2String( Group::ProductionCMode::CRAT ) )); - BOOST_CHECK( Group::ProductionCMode::RESV == Group::ProductionCModeFromString( Group::ProductionCMode2String( Group::ProductionCMode::RESV ) )); - BOOST_CHECK( Group::ProductionCMode::PRBL == Group::ProductionCModeFromString( Group::ProductionCMode2String( Group::ProductionCMode::PRBL ) )); - - BOOST_CHECK_EQUAL( "NONE" , Group::ProductionCMode2String(Group::ProductionCModeFromString( "NONE" ) )); - BOOST_CHECK_EQUAL( "ORAT" , Group::ProductionCMode2String(Group::ProductionCModeFromString( "ORAT" ) )); - BOOST_CHECK_EQUAL( "WRAT" , Group::ProductionCMode2String(Group::ProductionCModeFromString( "WRAT" ) )); - BOOST_CHECK_EQUAL( "GRAT" , Group::ProductionCMode2String(Group::ProductionCModeFromString( "GRAT" ) )); - BOOST_CHECK_EQUAL( "LRAT" , Group::ProductionCMode2String(Group::ProductionCModeFromString( "LRAT" ) )); - BOOST_CHECK_EQUAL( "CRAT" , Group::ProductionCMode2String(Group::ProductionCModeFromString( "CRAT" ) )); - BOOST_CHECK_EQUAL( "RESV" , Group::ProductionCMode2String(Group::ProductionCModeFromString( "RESV" ) )); - BOOST_CHECK_EQUAL( "PRBL" , Group::ProductionCMode2String(Group::ProductionCModeFromString( "PRBL" ) )); -} - -/*****************************************************************/ - -BOOST_AUTO_TEST_CASE(TestGroupProductionExceedLimitControlEnum2String) { - BOOST_CHECK_EQUAL( "NONE" , Group::ExceedAction2String(Group::ExceedAction::NONE)); - BOOST_CHECK_EQUAL( "CON" , Group::ExceedAction2String(Group::ExceedAction::CON)); - BOOST_CHECK_EQUAL( "+CON" , Group::ExceedAction2String(Group::ExceedAction::CON_PLUS)); - BOOST_CHECK_EQUAL( "WELL" , Group::ExceedAction2String(Group::ExceedAction::WELL)); - BOOST_CHECK_EQUAL( "PLUG" , Group::ExceedAction2String(Group::ExceedAction::PLUG)); - BOOST_CHECK_EQUAL( "RATE" , Group::ExceedAction2String(Group::ExceedAction::RATE)); -} - - -BOOST_AUTO_TEST_CASE(TestGroupProductionExceedLimitActionEnumFromString) { - BOOST_CHECK_THROW( Group::ExceedActionFromString("XXX") , std::invalid_argument ); - - BOOST_CHECK(Group::ExceedAction::NONE == Group::ExceedActionFromString("NONE")); - BOOST_CHECK(Group::ExceedAction::CON == Group::ExceedActionFromString("CON" )); - BOOST_CHECK(Group::ExceedAction::CON_PLUS == Group::ExceedActionFromString("+CON")); - BOOST_CHECK(Group::ExceedAction::WELL == Group::ExceedActionFromString("WELL")); - BOOST_CHECK(Group::ExceedAction::PLUG == Group::ExceedActionFromString("PLUG")); - BOOST_CHECK(Group::ExceedAction::RATE == Group::ExceedActionFromString("RATE")); -} - - - -BOOST_AUTO_TEST_CASE(TestGroupProductionExceedLimitActionEnumLoop) { - BOOST_CHECK( Group::ExceedAction::NONE == Group::ExceedActionFromString( Group::ExceedAction2String( Group::ExceedAction::NONE ) )); - BOOST_CHECK( Group::ExceedAction::CON == Group::ExceedActionFromString( Group::ExceedAction2String( Group::ExceedAction::CON ) )); - BOOST_CHECK( Group::ExceedAction::CON_PLUS == Group::ExceedActionFromString( Group::ExceedAction2String( Group::ExceedAction::CON_PLUS ) )); - BOOST_CHECK( Group::ExceedAction::WELL == Group::ExceedActionFromString( Group::ExceedAction2String( Group::ExceedAction::WELL ) )); - BOOST_CHECK( Group::ExceedAction::PLUG == Group::ExceedActionFromString( Group::ExceedAction2String( Group::ExceedAction::PLUG ) )); - BOOST_CHECK( Group::ExceedAction::RATE == Group::ExceedActionFromString( Group::ExceedAction2String( Group::ExceedAction::RATE ) )); - - BOOST_CHECK_EQUAL("NONE" , Group::ExceedAction2String(Group::ExceedActionFromString( "NONE" ) )); - BOOST_CHECK_EQUAL("CON" , Group::ExceedAction2String(Group::ExceedActionFromString( "CON" ) )); - BOOST_CHECK_EQUAL("+CON" , Group::ExceedAction2String(Group::ExceedActionFromString( "+CON" ) )); - BOOST_CHECK_EQUAL("WELL" , Group::ExceedAction2String(Group::ExceedActionFromString( "WELL" ) )); - BOOST_CHECK_EQUAL("PLUG" , Group::ExceedAction2String(Group::ExceedActionFromString( "PLUG" ) )); - BOOST_CHECK_EQUAL("RATE" , Group::ExceedAction2String(Group::ExceedActionFromString( "RATE" ) )); -} - -/*****************************************************************/ - -BOOST_AUTO_TEST_CASE(TestInjectorEnum2String) { - BOOST_CHECK_EQUAL( "OIL" , InjectorType2String(InjectorType::OIL)); - BOOST_CHECK_EQUAL( "GAS" , InjectorType2String(InjectorType::GAS)); - BOOST_CHECK_EQUAL( "WATER" , InjectorType2String(InjectorType::WATER)); - BOOST_CHECK_EQUAL( "MULTI" , InjectorType2String(InjectorType::MULTI)); -} - - -BOOST_AUTO_TEST_CASE(TestInjectorEnumFromString) { - BOOST_CHECK_THROW( InjectorTypeFromString("XXX") , std::invalid_argument ); - BOOST_CHECK( InjectorType::OIL == InjectorTypeFromString("OIL")); - BOOST_CHECK( InjectorType::WATER == InjectorTypeFromString("WATER")); - BOOST_CHECK( InjectorType::WATER == InjectorTypeFromString("WAT")); - BOOST_CHECK( InjectorType::GAS == InjectorTypeFromString("GAS")); - BOOST_CHECK( InjectorType::MULTI == InjectorTypeFromString("MULTI")); -} - - - -BOOST_AUTO_TEST_CASE(TestInjectorEnumLoop) { - BOOST_CHECK( InjectorType::OIL == InjectorTypeFromString( InjectorType2String( InjectorType::OIL ) )); - BOOST_CHECK( InjectorType::WATER == InjectorTypeFromString( InjectorType2String( InjectorType::WATER ) )); - BOOST_CHECK( InjectorType::GAS == InjectorTypeFromString( InjectorType2String( InjectorType::GAS ) )); - BOOST_CHECK( InjectorType::MULTI == InjectorTypeFromString( InjectorType2String( InjectorType::MULTI ) )); - - BOOST_CHECK_EQUAL( "MULTI" , InjectorType2String(InjectorTypeFromString( "MULTI" ) )); - BOOST_CHECK_EQUAL( "OIL" , InjectorType2String(InjectorTypeFromString( "OIL" ) )); - BOOST_CHECK_EQUAL( "GAS" , InjectorType2String(InjectorTypeFromString( "GAS" ) )); - BOOST_CHECK_EQUAL( "WATER" , InjectorType2String(InjectorTypeFromString( "WATER" ) )); -} - -/*****************************************************************/ - -BOOST_AUTO_TEST_CASE(InjectorCOntrolMopdeEnum2String) { - BOOST_CHECK_EQUAL( "RATE" , Well::InjectorCMode2String(Well::InjectorCMode::RATE)); - BOOST_CHECK_EQUAL( "RESV" , Well::InjectorCMode2String(Well::InjectorCMode::RESV)); - BOOST_CHECK_EQUAL( "BHP" , Well::InjectorCMode2String(Well::InjectorCMode::BHP)); - BOOST_CHECK_EQUAL( "THP" , Well::InjectorCMode2String(Well::InjectorCMode::THP)); - BOOST_CHECK_EQUAL( "GRUP" , Well::InjectorCMode2String(Well::InjectorCMode::GRUP)); -} - - -BOOST_AUTO_TEST_CASE(InjectorControlModeEnumFromString) { - BOOST_CHECK_THROW( Well::InjectorCModeFromString("XXX") , std::invalid_argument ); - BOOST_CHECK( Well::InjectorCMode::RATE == Well::InjectorCModeFromString("RATE")); - BOOST_CHECK( Well::InjectorCMode::BHP == Well::InjectorCModeFromString("BHP")); - BOOST_CHECK( Well::InjectorCMode::RESV == Well::InjectorCModeFromString("RESV")); - BOOST_CHECK( Well::InjectorCMode::THP == Well::InjectorCModeFromString("THP")); - BOOST_CHECK( Well::InjectorCMode::GRUP == Well::InjectorCModeFromString("GRUP")); -} - - - -BOOST_AUTO_TEST_CASE(InjectorControlModeEnumLoop) { - BOOST_CHECK( Well::InjectorCMode::RATE == Well::InjectorCModeFromString( Well::InjectorCMode2String( Well::InjectorCMode::RATE ) )); - BOOST_CHECK( Well::InjectorCMode::BHP == Well::InjectorCModeFromString( Well::InjectorCMode2String( Well::InjectorCMode::BHP ) )); - BOOST_CHECK( Well::InjectorCMode::RESV == Well::InjectorCModeFromString( Well::InjectorCMode2String( Well::InjectorCMode::RESV ) )); - BOOST_CHECK( Well::InjectorCMode::THP == Well::InjectorCModeFromString( Well::InjectorCMode2String( Well::InjectorCMode::THP ) )); - BOOST_CHECK( Well::InjectorCMode::GRUP == Well::InjectorCModeFromString( Well::InjectorCMode2String( Well::InjectorCMode::GRUP ) )); - - BOOST_CHECK_EQUAL( "THP" , Well::InjectorCMode2String(Well::InjectorCModeFromString( "THP" ) )); - BOOST_CHECK_EQUAL( "RATE" , Well::InjectorCMode2String(Well::InjectorCModeFromString( "RATE" ) )); - BOOST_CHECK_EQUAL( "RESV" , Well::InjectorCMode2String(Well::InjectorCModeFromString( "RESV" ) )); - BOOST_CHECK_EQUAL( "BHP" , Well::InjectorCMode2String(Well::InjectorCModeFromString( "BHP" ) )); - BOOST_CHECK_EQUAL( "GRUP" , Well::InjectorCMode2String(Well::InjectorCModeFromString( "GRUP" ) )); -} - - - -/*****************************************************************/ - -BOOST_AUTO_TEST_CASE(InjectorStatusEnum2String) { - BOOST_CHECK_EQUAL( "OPEN", Well::Status2String(Well::Status::OPEN)); - BOOST_CHECK_EQUAL( "SHUT", Well::Status2String(Well::Status::SHUT)); - BOOST_CHECK_EQUAL( "AUTO", Well::Status2String(Well::Status::AUTO)); - BOOST_CHECK_EQUAL( "STOP", Well::Status2String(Well::Status::STOP)); -} - - -BOOST_AUTO_TEST_CASE(InjectorStatusEnumFromString) { - BOOST_CHECK_THROW( Well::StatusFromString("XXX") , std::invalid_argument ); - BOOST_CHECK( Well::Status::OPEN == Well::StatusFromString("OPEN")); - BOOST_CHECK( Well::Status::AUTO == Well::StatusFromString("AUTO")); - BOOST_CHECK( Well::Status::SHUT == Well::StatusFromString("SHUT")); - BOOST_CHECK( Well::Status::STOP == Well::StatusFromString("STOP")); -} - - - -BOOST_AUTO_TEST_CASE(InjectorStatusEnumLoop) { - BOOST_CHECK( Well::Status::OPEN == Well::StatusFromString( Well::Status2String( Well::Status::OPEN ) )); - BOOST_CHECK( Well::Status::AUTO == Well::StatusFromString( Well::Status2String( Well::Status::AUTO ) )); - BOOST_CHECK( Well::Status::SHUT == Well::StatusFromString( Well::Status2String( Well::Status::SHUT ) )); - BOOST_CHECK( Well::Status::STOP == Well::StatusFromString( Well::Status2String( Well::Status::STOP ) )); - - BOOST_CHECK_EQUAL( "STOP", Well::Status2String(Well::StatusFromString( "STOP" ) )); - BOOST_CHECK_EQUAL( "OPEN", Well::Status2String(Well::StatusFromString( "OPEN" ) )); - BOOST_CHECK_EQUAL( "SHUT", Well::Status2String(Well::StatusFromString( "SHUT" ) )); - BOOST_CHECK_EQUAL( "AUTO", Well::Status2String(Well::StatusFromString( "AUTO" ) )); -} - - - -/*****************************************************************/ - -BOOST_AUTO_TEST_CASE(ProducerCOntrolMopdeEnum2String) { - BOOST_CHECK_EQUAL( "ORAT" , Well::ProducerCMode2String(Well::ProducerCMode::ORAT)); - BOOST_CHECK_EQUAL( "WRAT" , Well::ProducerCMode2String(Well::ProducerCMode::WRAT)); - BOOST_CHECK_EQUAL( "GRAT" , Well::ProducerCMode2String(Well::ProducerCMode::GRAT)); - BOOST_CHECK_EQUAL( "LRAT" , Well::ProducerCMode2String(Well::ProducerCMode::LRAT)); - BOOST_CHECK_EQUAL( "CRAT" , Well::ProducerCMode2String(Well::ProducerCMode::CRAT)); - BOOST_CHECK_EQUAL( "RESV" , Well::ProducerCMode2String(Well::ProducerCMode::RESV)); - BOOST_CHECK_EQUAL( "BHP" , Well::ProducerCMode2String(Well::ProducerCMode::BHP)); - BOOST_CHECK_EQUAL( "THP" , Well::ProducerCMode2String(Well::ProducerCMode::THP)); - BOOST_CHECK_EQUAL( "GRUP" , Well::ProducerCMode2String(Well::ProducerCMode::GRUP)); -} - - -BOOST_AUTO_TEST_CASE(ProducerControlModeEnumFromString) { - BOOST_CHECK_THROW( Well::ProducerCModeFromString("XRAT") , std::invalid_argument ); - BOOST_CHECK( Well::ProducerCMode::ORAT == Well::ProducerCModeFromString("ORAT")); - BOOST_CHECK( Well::ProducerCMode::WRAT == Well::ProducerCModeFromString("WRAT")); - BOOST_CHECK( Well::ProducerCMode::GRAT == Well::ProducerCModeFromString("GRAT")); - BOOST_CHECK( Well::ProducerCMode::LRAT == Well::ProducerCModeFromString("LRAT")); - BOOST_CHECK( Well::ProducerCMode::CRAT == Well::ProducerCModeFromString("CRAT")); - BOOST_CHECK( Well::ProducerCMode::RESV == Well::ProducerCModeFromString("RESV")); - BOOST_CHECK( Well::ProducerCMode::BHP == Well::ProducerCModeFromString("BHP" )); - BOOST_CHECK( Well::ProducerCMode::THP == Well::ProducerCModeFromString("THP" )); - BOOST_CHECK( Well::ProducerCMode::GRUP == Well::ProducerCModeFromString("GRUP")); -} - - - -BOOST_AUTO_TEST_CASE(ProducerControlModeEnumLoop) { - BOOST_CHECK( Well::ProducerCMode::ORAT == Well::ProducerCModeFromString( Well::ProducerCMode2String( Well::ProducerCMode::ORAT ) )); - BOOST_CHECK( Well::ProducerCMode::WRAT == Well::ProducerCModeFromString( Well::ProducerCMode2String( Well::ProducerCMode::WRAT ) )); - BOOST_CHECK( Well::ProducerCMode::GRAT == Well::ProducerCModeFromString( Well::ProducerCMode2String( Well::ProducerCMode::GRAT ) )); - BOOST_CHECK( Well::ProducerCMode::LRAT == Well::ProducerCModeFromString( Well::ProducerCMode2String( Well::ProducerCMode::LRAT ) )); - BOOST_CHECK( Well::ProducerCMode::CRAT == Well::ProducerCModeFromString( Well::ProducerCMode2String( Well::ProducerCMode::CRAT ) )); - BOOST_CHECK( Well::ProducerCMode::RESV == Well::ProducerCModeFromString( Well::ProducerCMode2String( Well::ProducerCMode::RESV ) )); - BOOST_CHECK( Well::ProducerCMode::BHP == Well::ProducerCModeFromString( Well::ProducerCMode2String( Well::ProducerCMode::BHP ) )); - BOOST_CHECK( Well::ProducerCMode::THP == Well::ProducerCModeFromString( Well::ProducerCMode2String( Well::ProducerCMode::THP ) )); - BOOST_CHECK( Well::ProducerCMode::GRUP == Well::ProducerCModeFromString( Well::ProducerCMode2String( Well::ProducerCMode::GRUP ) )); - - BOOST_CHECK_EQUAL( "ORAT" , Well::ProducerCMode2String(Well::ProducerCModeFromString( "ORAT" ) )); - BOOST_CHECK_EQUAL( "WRAT" , Well::ProducerCMode2String(Well::ProducerCModeFromString( "WRAT" ) )); - BOOST_CHECK_EQUAL( "GRAT" , Well::ProducerCMode2String(Well::ProducerCModeFromString( "GRAT" ) )); - BOOST_CHECK_EQUAL( "LRAT" , Well::ProducerCMode2String(Well::ProducerCModeFromString( "LRAT" ) )); - BOOST_CHECK_EQUAL( "CRAT" , Well::ProducerCMode2String(Well::ProducerCModeFromString( "CRAT" ) )); - BOOST_CHECK_EQUAL( "RESV" , Well::ProducerCMode2String(Well::ProducerCModeFromString( "RESV" ) )); - BOOST_CHECK_EQUAL( "BHP" , Well::ProducerCMode2String(Well::ProducerCModeFromString( "BHP" ) )); - BOOST_CHECK_EQUAL( "THP" , Well::ProducerCMode2String(Well::ProducerCModeFromString( "THP" ) )); - BOOST_CHECK_EQUAL( "GRUP" , Well::ProducerCMode2String(Well::ProducerCModeFromString( "GRUP" ) )); -} - -/*******************************************************************/ -/*****************************************************************/ - -BOOST_AUTO_TEST_CASE(GuideRatePhaseEnum2String) { - BOOST_CHECK_EQUAL( "OIL" , Well::GuideRateTarget2String(Well::GuideRateTarget::OIL)); - BOOST_CHECK_EQUAL( "WAT" , Well::GuideRateTarget2String(Well::GuideRateTarget::WAT)); - BOOST_CHECK_EQUAL( "GAS" , Well::GuideRateTarget2String(Well::GuideRateTarget::GAS)); - BOOST_CHECK_EQUAL( "LIQ" , Well::GuideRateTarget2String(Well::GuideRateTarget::LIQ)); - BOOST_CHECK_EQUAL( "COMB" , Well::GuideRateTarget2String(Well::GuideRateTarget::COMB)); - BOOST_CHECK_EQUAL( "WGA" , Well::GuideRateTarget2String(Well::GuideRateTarget::WGA)); - BOOST_CHECK_EQUAL( "CVAL" , Well::GuideRateTarget2String(Well::GuideRateTarget::CVAL)); - BOOST_CHECK_EQUAL( "RAT" , Well::GuideRateTarget2String(Well::GuideRateTarget::RAT)); - BOOST_CHECK_EQUAL( "RES" , Well::GuideRateTarget2String(Well::GuideRateTarget::RES)); - BOOST_CHECK_EQUAL( "UNDEFINED" , Well::GuideRateTarget2String(Well::GuideRateTarget::UNDEFINED)); -} - - -BOOST_AUTO_TEST_CASE(GuideRatePhaseEnumFromString) { - BOOST_CHECK_THROW( Well::GuideRateTargetFromString("XRAT") , std::invalid_argument ); - BOOST_CHECK( Well::GuideRateTarget::OIL == Well::GuideRateTargetFromString("OIL")); - BOOST_CHECK( Well::GuideRateTarget::WAT == Well::GuideRateTargetFromString("WAT")); - BOOST_CHECK( Well::GuideRateTarget::GAS == Well::GuideRateTargetFromString("GAS")); - BOOST_CHECK( Well::GuideRateTarget::LIQ == Well::GuideRateTargetFromString("LIQ")); - BOOST_CHECK( Well::GuideRateTarget::COMB == Well::GuideRateTargetFromString("COMB")); - BOOST_CHECK( Well::GuideRateTarget::WGA == Well::GuideRateTargetFromString("WGA")); - BOOST_CHECK( Well::GuideRateTarget::CVAL == Well::GuideRateTargetFromString("CVAL")); - BOOST_CHECK( Well::GuideRateTarget::RAT == Well::GuideRateTargetFromString("RAT")); - BOOST_CHECK( Well::GuideRateTarget::RES == Well::GuideRateTargetFromString("RES")); - BOOST_CHECK( Well::GuideRateTarget::UNDEFINED == Well::GuideRateTargetFromString("UNDEFINED")); -} - - - -BOOST_AUTO_TEST_CASE(GuideRatePhaseEnum2Loop) { - BOOST_CHECK( Well::GuideRateTarget::OIL == Well::GuideRateTargetFromString( Well::GuideRateTarget2String( Well::GuideRateTarget::OIL ) )); - BOOST_CHECK( Well::GuideRateTarget::WAT == Well::GuideRateTargetFromString( Well::GuideRateTarget2String( Well::GuideRateTarget::WAT ) )); - BOOST_CHECK( Well::GuideRateTarget::GAS == Well::GuideRateTargetFromString( Well::GuideRateTarget2String( Well::GuideRateTarget::GAS ) )); - BOOST_CHECK( Well::GuideRateTarget::LIQ == Well::GuideRateTargetFromString( Well::GuideRateTarget2String( Well::GuideRateTarget::LIQ ) )); - BOOST_CHECK( Well::GuideRateTarget::COMB == Well::GuideRateTargetFromString( Well::GuideRateTarget2String( Well::GuideRateTarget::COMB ) )); - BOOST_CHECK( Well::GuideRateTarget::WGA == Well::GuideRateTargetFromString( Well::GuideRateTarget2String( Well::GuideRateTarget::WGA ) )); - BOOST_CHECK( Well::GuideRateTarget::CVAL == Well::GuideRateTargetFromString( Well::GuideRateTarget2String( Well::GuideRateTarget::CVAL ) )); - BOOST_CHECK( Well::GuideRateTarget::RAT == Well::GuideRateTargetFromString( Well::GuideRateTarget2String( Well::GuideRateTarget::RAT ) )); - BOOST_CHECK( Well::GuideRateTarget::RES == Well::GuideRateTargetFromString( Well::GuideRateTarget2String( Well::GuideRateTarget::RES ) )); - BOOST_CHECK( Well::GuideRateTarget::UNDEFINED == Well::GuideRateTargetFromString( Well::GuideRateTarget2String( Well::GuideRateTarget::UNDEFINED ) )); - - BOOST_CHECK_EQUAL( "OIL" , Well::GuideRateTarget2String(Well::GuideRateTargetFromString( "OIL" ) )); - BOOST_CHECK_EQUAL( "WAT" , Well::GuideRateTarget2String(Well::GuideRateTargetFromString( "WAT" ) )); - BOOST_CHECK_EQUAL( "GAS" , Well::GuideRateTarget2String(Well::GuideRateTargetFromString( "GAS" ) )); - BOOST_CHECK_EQUAL( "LIQ" , Well::GuideRateTarget2String(Well::GuideRateTargetFromString( "LIQ" ) )); - BOOST_CHECK_EQUAL( "COMB" , Well::GuideRateTarget2String(Well::GuideRateTargetFromString( "COMB" ) )); - BOOST_CHECK_EQUAL( "WGA" , Well::GuideRateTarget2String(Well::GuideRateTargetFromString( "WGA" ) )); - BOOST_CHECK_EQUAL( "CVAL" , Well::GuideRateTarget2String(Well::GuideRateTargetFromString( "CVAL" ) )); - BOOST_CHECK_EQUAL( "RAT" , Well::GuideRateTarget2String(Well::GuideRateTargetFromString( "RAT" ) )); - BOOST_CHECK_EQUAL( "RES" , Well::GuideRateTarget2String(Well::GuideRateTargetFromString( "RES" ) )); - BOOST_CHECK_EQUAL( "UNDEFINED" , Well::GuideRateTarget2String(Well::GuideRateTargetFromString( "UNDEFINED" ) )); - -} - -BOOST_AUTO_TEST_CASE(handleWEFAC) { - Opm::Parser parser; - std::string input = - "START -- 0 \n" - "19 JUN 2007 / \n" - "SCHEDULE\n" - "DATES -- 1\n" - " 10 OKT 2008 / \n" - "/\n" - "WELSPECS\n" - " 'P' 'OP' 9 9 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / \n" - " 'I' 'OP' 1 1 1* 'WATER' 1* 1* 1* 1* 1* 1* 1* / \n" - "/\n" - "COMPDAT\n" - " 'P' 9 9 1 1 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / \n" - " 'P' 9 9 2 2 'OPEN' 1* 46.825 0.311 4332.346 1* 1* 'X' 22.123 / \n" - " 'I' 1 1 1 1 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / \n" - "/\n" - "WCONHIST\n" - " 'P' 'OPEN' 'RESV' 6* 500 / \n" - "/\n" - "WCONINJH\n" - " 'I' 'WATER' 1* 100 250 / \n" - "/\n" - "WEFAC\n" - " 'P' 0.5 / \n" - " 'I' 0.9 / \n" - "/\n" - "DATES -- 2\n" - " 15 OKT 2008 / \n" - "/\n" - - "DATES -- 3\n" - " 18 OKT 2008 / \n" - "/\n" - "WEFAC\n" - " 'P' 1.0 / \n" - "/\n" - ; - - auto deck = parser.parseString(input); - auto python = std::make_shared(); - EclipseGrid grid(10,10,10); - TableManager table ( deck ); - FieldPropsManager fp( deck, Phases{true, true, true}, grid, table); - Runspec runspec (deck); - Schedule schedule(deck, grid , fp, runspec, python); - - //1 - BOOST_CHECK_EQUAL(schedule.getWell("P", 1).getEfficiencyFactor(), 0.5); - BOOST_CHECK_EQUAL(schedule.getWell("I", 1).getEfficiencyFactor(), 0.9); - - //2 - BOOST_CHECK_EQUAL(schedule.getWell("P", 2).getEfficiencyFactor(), 0.5); - BOOST_CHECK_EQUAL(schedule.getWell("I", 2).getEfficiencyFactor(), 0.9); - - //3 - BOOST_CHECK_EQUAL(schedule.getWell("P", 3).getEfficiencyFactor(), 1.0); - BOOST_CHECK_EQUAL(schedule.getWell("I", 3).getEfficiencyFactor(), 0.9); -} - -BOOST_AUTO_TEST_CASE(historic_BHP_and_THP) { - Opm::Parser parser; - std::string input = - "START -- 0 \n" - "19 JUN 2007 / \n" - "SCHEDULE\n" - "DATES -- 1\n" - " 10 OKT 2008 / \n" - "/\n" - "WELSPECS\n" - " 'P' 'OP' 9 9 1 'OIL' 1* / \n" - " 'P1' 'OP' 9 9 1 'OIL' 1* / \n" - " 'I' 'OP' 9 9 1 'WATER' 1* / \n" - "/\n" - "WCONHIST\n" - " P SHUT ORAT 6 500 0 0 0 1.2 1.1 / \n" - "/\n" - "WCONPROD\n" - " P1 SHUT ORAT 6 500 0 0 0 3.2 3.1 / \n" - "/\n" - "WCONINJH\n" - " I WATER STOP 100 2.1 2.2 / \n" - "/\n" - ; - - auto deck = parser.parseString(input); - auto python = std::make_shared(); - EclipseGrid grid(10,10,10); - TableManager table ( deck ); - FieldPropsManager fp( deck, Phases{true, true, true}, grid, table); - Runspec runspec (deck); - Schedule schedule( deck, grid, fp, runspec, python); - - { - const auto& prod = schedule.getWell("P", 1).getProductionProperties(); - const auto& pro1 = schedule.getWell("P1", 1).getProductionProperties(); - const auto& inje = schedule.getWell("I", 1).getInjectionProperties(); - - BOOST_CHECK_CLOSE( 1.1 * 1e5, prod.BHPH, 1e-5 ); - BOOST_CHECK_CLOSE( 1.2 * 1e5, prod.THPH, 1e-5 ); - BOOST_CHECK_CLOSE( 2.1 * 1e5, inje.BHPH, 1e-5 ); - BOOST_CHECK_CLOSE( 2.2 * 1e5, inje.THPH, 1e-5 ); - BOOST_CHECK_CLOSE( 0.0 * 1e5, pro1.BHPH, 1e-5 ); - BOOST_CHECK_CLOSE( 0.0 * 1e5, pro1.THPH, 1e-5 ); - - { - const auto& wtest_config = schedule.wtestConfig(0); - BOOST_CHECK_EQUAL(wtest_config.size(), 0); - } - - { - const auto& wtest_config = schedule.wtestConfig(1); - BOOST_CHECK_EQUAL(wtest_config.size(), 0); - } - } -} - -BOOST_AUTO_TEST_CASE(FilterCompletions2) { - EclipseGrid grid1(10,10,10); - std::vector actnum(1000,1); - auto deck = createDeckWithWellsAndCompletionData(); - auto python = std::make_shared(); - TableManager table ( deck ); - FieldPropsManager fp( deck, Phases{true, true, true}, grid1, table); - Runspec runspec (deck); - Schedule schedule(deck, grid1 , fp, runspec, python); - { - const auto& c1_1 = schedule.getWell("OP_1", 1).getConnections(); - const auto& c1_3 = schedule.getWell("OP_1", 3).getConnections(); - BOOST_CHECK_EQUAL(2, c1_1.size()); - BOOST_CHECK_EQUAL(9, c1_3.size()); - } - actnum[grid1.getGlobalIndex(8,8,1)] = 0; - { - std::vector globalCell(grid1.getNumActive()); - for(std::size_t i = 0; i < grid1.getNumActive(); ++i) - if (actnum[grid1.getGlobalIndex(i)]) - globalCell[i] = grid1.getGlobalIndex(i); - ActiveGridCells active(grid1.getNXYZ(), globalCell.data(), - grid1.getNumActive()); - schedule.filterConnections(active); - - const auto& c1_1 = schedule.getWell("OP_1", 1).getConnections(); - const auto& c1_3 = schedule.getWell("OP_1", 3).getConnections(); - BOOST_CHECK_EQUAL(1, c1_1.size()); - BOOST_CHECK_EQUAL(8, c1_3.size()); - } -} - - - - - - - - -BOOST_AUTO_TEST_CASE(VFPINJ_TEST) { - const char *deckData = "\ -START\n \ -8 MAR 1998 /\n \ -\n \ -GRID \n\ -PORO\n\ - 1000*0.25 /\n\ -PERMX \n\ - 1000*0.10/ \n\ -COPY \n\ - PERMX PERMY / \n\ - PERMX PERMZ / \n\ -/ \n \ -SCHEDULE \n\ -VFPINJ \n \ --- Table Depth Rate TAB UNITS BODY \n\ --- ----- ----- ----- ----- ------ ----- \n\ - 5 32.9 WAT THP METRIC BHP / \n\ --- Rate axis \n\ -1 3 5 / \n\ --- THP axis \n\ -7 11 / \n\ --- Table data with THP# \n\ -1 1.5 2.5 3.5 / \n\ -2 4.5 5.5 6.5 / \n\ -TSTEP \n\ -10 10/\n\ -VFPINJ \n \ --- Table Depth Rate TAB UNITS BODY \n\ --- ----- ----- ----- ----- ------ ----- \n\ - 5 100 GAS THP METRIC BHP / \n\ --- Rate axis \n\ -1 3 5 / \n\ --- THP axis \n\ -7 11 / \n\ --- Table data with THP# \n\ -1 1.5 2.5 3.5 / \n\ -2 4.5 5.5 6.5 / \n\ ---\n\ -VFPINJ \n \ --- Table Depth Rate TAB UNITS BODY \n\ --- ----- ----- ----- ----- ------ ----- \n\ - 10 200 WAT THP METRIC BHP / \n\ --- Rate axis \n\ -1 3 5 / \n\ --- THP axis \n\ -7 11 / \n\ --- Table data with THP# \n\ -1 1.5 2.5 3.5 / \n\ -2 4.5 5.5 6.5 / \n"; - - - Opm::Parser parser; - auto deck = parser.parseString(deckData); - auto python = std::make_shared(); - EclipseGrid grid1(10,10,10); - TableManager table ( deck ); - FieldPropsManager fp( deck, Phases{true, true, true}, grid1, table); - Runspec runspec (deck); - Schedule schedule(deck, grid1 , fp, runspec, python); - - BOOST_CHECK( schedule.getEvents().hasEvent(ScheduleEvents::VFPINJ_UPDATE, 0)); - BOOST_CHECK( !schedule.getEvents().hasEvent(ScheduleEvents::VFPINJ_UPDATE, 1)); - BOOST_CHECK( schedule.getEvents().hasEvent(ScheduleEvents::VFPINJ_UPDATE, 2)); - - // No such table id - BOOST_CHECK_THROW(schedule.getVFPInjTable(77,0), std::invalid_argument); - - // Table not defined at step 0 - BOOST_CHECK_THROW(schedule.getVFPInjTable(10,0), std::invalid_argument); - - const Opm::VFPInjTable& vfpinjTable2 = schedule.getVFPInjTable(5, 2); - BOOST_CHECK_EQUAL(vfpinjTable2.getTableNum(), 5); - BOOST_CHECK_EQUAL(vfpinjTable2.getDatumDepth(), 100); - BOOST_CHECK_EQUAL(vfpinjTable2.getFloType(), Opm::VFPInjTable::FLO_GAS); - - const Opm::VFPInjTable& vfpinjTable3 = schedule.getVFPInjTable(10, 2); - BOOST_CHECK_EQUAL(vfpinjTable3.getTableNum(), 10); - BOOST_CHECK_EQUAL(vfpinjTable3.getDatumDepth(), 200); - BOOST_CHECK_EQUAL(vfpinjTable3.getFloType(), Opm::VFPInjTable::FLO_WAT); - - const Opm::VFPInjTable& vfpinjTable = schedule.getVFPInjTable(5, 0); - BOOST_CHECK_EQUAL(vfpinjTable.getTableNum(), 5); - BOOST_CHECK_EQUAL(vfpinjTable.getDatumDepth(), 32.9); - BOOST_CHECK_EQUAL(vfpinjTable.getFloType(), Opm::VFPInjTable::FLO_WAT); - - const auto vfp_tables0 = schedule.getVFPInjTables(0); - BOOST_CHECK_EQUAL( vfp_tables0.size(), 1); - - const auto vfp_tables2 = schedule.getVFPInjTables(2); - BOOST_CHECK_EQUAL( vfp_tables2.size(), 2); - //Flo axis - { - const std::vector& flo = vfpinjTable.getFloAxis(); - BOOST_REQUIRE_EQUAL(flo.size(), 3); - - //Unit of FLO is SM3/day, convert to SM3/second - double conversion_factor = 1.0 / (60*60*24); - BOOST_CHECK_EQUAL(flo[0], 1*conversion_factor); - BOOST_CHECK_EQUAL(flo[1], 3*conversion_factor); - BOOST_CHECK_EQUAL(flo[2], 5*conversion_factor); - } - - //THP axis - { - const std::vector& thp = vfpinjTable.getTHPAxis(); - BOOST_REQUIRE_EQUAL(thp.size(), 2); - - //Unit of THP is barsa => convert to pascal - double conversion_factor = 100000.0; - BOOST_CHECK_EQUAL(thp[0], 7*conversion_factor); - BOOST_CHECK_EQUAL(thp[1], 11*conversion_factor); - } - - //The data itself - { - typedef Opm::VFPInjTable::array_type::size_type size_type; - const auto size = vfpinjTable.shape(); - - BOOST_CHECK_EQUAL(size[0], 2); - BOOST_CHECK_EQUAL(size[1], 3); - - //Table given as BHP => barsa. Convert to pascal - double conversion_factor = 100000.0; - - double index = 0.5; - for (size_type t = 0; t < size[0]; ++t) { - for (size_type f = 0; f < size[1]; ++f) { - index += 1.0; - BOOST_CHECK_EQUAL(vfpinjTable(t,f), index*conversion_factor); - } - } - } -} - -// tests for the polymer injectivity case -BOOST_AUTO_TEST_CASE(POLYINJ_TEST) { - const char *deckData = - "START\n" - " 8 MAR 2018/\n" - "GRID\n" - "PORO\n" - " 1000*0.25 /\n" - "PERMX\n" - " 1000*0.25 /\n" - "COPY\n" - " PERMX PERMY /\n" - " PERMX PERMZ /\n" - "/\n" - "PROPS\n \n" - "SCHEDULE\n" - "WELSPECS\n" - "'INJE01' 'I' 1 1 1 'WATER' /\n" - "/\n" - "WCONINJE\n" - "'INJE01' 'WATER' 'OPEN' 'RATE' 800.00 1* 1000 /\n" - "/\n" - "TSTEP\n" - " 1/\n" - "WPOLYMER\n" - " 'INJE01' 1.0 0.0 /\n" - "/\n" - "WPMITAB\n" - " 'INJE01' 2 /\n" - "/\n" - "WSKPTAB\n" - " 'INJE01' 1 1 /\n" - "/\n" - "TSTEP\n" - " 2*1/\n" - "WPMITAB\n" - " 'INJE01' 3 /\n" - "/\n" - "WSKPTAB\n" - " 'INJE01' 2 2 /\n" - "/\n" - "TSTEP\n" - " 1 /\n"; - - Opm::Parser parser; - auto deck = parser.parseString(deckData); - auto python = std::make_shared(); - EclipseGrid grid1(10,10,10); - TableManager table ( deck ); - FieldPropsManager fp( deck, Phases{true, true, true}, grid1, table); - Runspec runspec (deck); - Schedule schedule(deck, grid1 , fp, runspec, python); - - const auto& poly0 = schedule.getWell("INJE01", 0).getPolymerProperties(); - const auto& poly1 = schedule.getWell("INJE01", 1).getPolymerProperties(); - const auto& poly3 = schedule.getWell("INJE01", 3).getPolymerProperties(); - - BOOST_CHECK_EQUAL(poly0.m_plymwinjtable, -1); - BOOST_CHECK_EQUAL(poly0.m_skprwattable, -1); - BOOST_CHECK_EQUAL(poly0.m_skprpolytable, -1); - - BOOST_CHECK_EQUAL(poly1.m_plymwinjtable, 2); - BOOST_CHECK_EQUAL(poly1.m_skprwattable, 1); - BOOST_CHECK_EQUAL(poly1.m_skprpolytable, 1); - - BOOST_CHECK_EQUAL(poly3.m_plymwinjtable, 3); - BOOST_CHECK_EQUAL(poly3.m_skprwattable, 2); - BOOST_CHECK_EQUAL(poly3.m_skprpolytable, 2); -} - -// Test for WFOAM -BOOST_AUTO_TEST_CASE(WFOAM_TEST) { - const char *deckData = - "START\n" - " 8 MAR 2018/\n" - "GRID\n" - "PERMX\n" - " 1000*0.25 /\n" - "PORO\n" - " 1000*0.25 /\n" - "COPY\n" - " PERMX PERMY /\n" - " PERMX PERMZ /\n" - "/\n" - "PROPS\n \n" - "SCHEDULE\n" - "WELSPECS\n" - "'INJE01' 'I' 1 1 1 'WATER' /\n" - "/\n" - "WCONINJE\n" - "'INJE01' 'GAS' 'OPEN' 'RATE' 80000.00 1* 1000 /\n" - "/\n" - "TSTEP\n" - " 1/\n" - "WFOAM\n" - " 'INJE01' 0.2 /\n" - "/\n" - "TSTEP\n" - " 2*1/\n" - "WFOAM\n" - " 'INJE01' 0.3 /\n" - "/\n" - "TSTEP\n" - " 1 /\n"; - - Opm::Parser parser; - auto deck = parser.parseString(deckData); - auto python = std::make_shared(); - EclipseGrid grid1(10,10,10); - TableManager table ( deck ); - FieldPropsManager fp( deck, Phases{true, true, true}, grid1, table); - Runspec runspec (deck); - Schedule schedule(deck, grid1 , fp, runspec, python); - - const auto& f0 = schedule.getWell("INJE01", 0).getFoamProperties(); - const auto& f1 = schedule.getWell("INJE01", 1).getFoamProperties(); - const auto& f3 = schedule.getWell("INJE01", 3).getFoamProperties(); - - BOOST_CHECK_EQUAL(f0.m_foamConcentration, 0.0); - BOOST_CHECK_EQUAL(f1.m_foamConcentration, 0.2); - BOOST_CHECK_EQUAL(f3.m_foamConcentration, 0.3); -} - - -BOOST_AUTO_TEST_CASE(WTEST_CONFIG) { - auto deck = createDeckWTEST(); - auto python = std::make_shared(); - EclipseGrid grid1(10,10,10); - TableManager table ( deck ); - FieldPropsManager fp( deck, Phases{true, true, true}, grid1, table); - Runspec runspec (deck); - Schedule schedule(deck, grid1 , fp, runspec, python); - - const auto& wtest_config1 = schedule.wtestConfig(0); - BOOST_CHECK_EQUAL(wtest_config1.size(), 2); - BOOST_CHECK(wtest_config1.has("ALLOW")); - BOOST_CHECK(!wtest_config1.has("BAN")); - - const auto& wtest_config2 = schedule.wtestConfig(1); - BOOST_CHECK_EQUAL(wtest_config2.size(), 3); - BOOST_CHECK(!wtest_config2.has("ALLOW")); - BOOST_CHECK(wtest_config2.has("BAN")); - BOOST_CHECK(wtest_config2.has("BAN", WellTestConfig::Reason::GROUP)); - BOOST_CHECK(!wtest_config2.has("BAN", WellTestConfig::Reason::PHYSICAL)); -} - - -bool has(const std::vector& l, const std::string& s) { - auto f = std::find(l.begin(), l.end(), s); - return (f != l.end()); -} - - - -BOOST_AUTO_TEST_CASE(WELL_STATIC) { - auto deck = createDeckWithWells(); - auto python = std::make_shared(); - EclipseGrid grid1(10,10,10); - TableManager table ( deck ); - FieldPropsManager fp( deck, Phases{true, true, true}, grid1, table); - Runspec runspec (deck); - Schedule schedule(deck, grid1 , fp, runspec, python); - BOOST_CHECK_THROW( schedule.getWell("NO_SUCH_WELL", 0), std::invalid_argument); - BOOST_CHECK_THROW( schedule.getWell("W_3", 0), std::invalid_argument); - - auto ws = schedule.getWell("W_3", 3); - { - // Make sure the copy constructor works. - Well ws_copy(ws); - } - BOOST_CHECK_EQUAL(ws.name(), "W_3"); - - BOOST_CHECK(!ws.updateHead(19, 50)); - BOOST_CHECK(ws.updateHead(1,50)); - BOOST_CHECK(!ws.updateHead(1,50)); - BOOST_CHECK(ws.updateHead(1,1)); - BOOST_CHECK(!ws.updateHead(1,1)); - - BOOST_CHECK(ws.updateRefDepth(1.0)); - BOOST_CHECK(!ws.updateRefDepth(1.0)); - - ws.updateStatus(Well::Status::OPEN, false); - BOOST_CHECK(!ws.updateStatus(Well::Status::OPEN, false)); - BOOST_CHECK(ws.updateStatus(Well::Status::SHUT, false)); - - const auto& connections = ws.getConnections(); - BOOST_CHECK_EQUAL(connections.size(), 0); - auto c2 = std::make_shared(Connection::Order::TRACK, 1,1); - c2->addConnection(1,1,1, - grid1.getGlobalIndex(1,1,1), - 100, - Connection::State::OPEN, - 10, - 10, - 10, - 10, - 10, - 100); - - BOOST_CHECK( ws.updateConnections(c2) ); - BOOST_CHECK( !ws.updateConnections(c2) ); -} - - -BOOST_AUTO_TEST_CASE(WellNames) { - auto deck = createDeckWTEST(); - auto python = std::make_shared(); - EclipseGrid grid1(10,10,10); - TableManager table ( deck ); - FieldPropsManager fp( deck, Phases{true, true, true}, grid1, table); - Runspec runspec (deck); - Schedule schedule(deck, grid1 , fp, runspec, python); - - auto names = schedule.wellNames("NO_SUCH_WELL", 0); - BOOST_CHECK_EQUAL(names.size(), 0); - - auto w1names = schedule.wellNames("W1", 0); - BOOST_CHECK_EQUAL(w1names.size(), 1); - BOOST_CHECK_EQUAL(w1names[0], "W1"); - - auto i1names = schedule.wellNames("11", 0); - BOOST_CHECK_EQUAL(i1names.size(), 0); - - auto listnamese = schedule.wellNames("*NO_LIST", 0); - BOOST_CHECK_EQUAL( listnamese.size(), 0); - - auto listnames0 = schedule.wellNames("*ILIST", 0); - BOOST_CHECK_EQUAL( listnames0.size(), 0); - - auto listnames1 = schedule.wellNames("*ILIST", 2); - BOOST_CHECK_EQUAL( listnames1.size(), 2); - BOOST_CHECK( has(listnames1, "I1")); - BOOST_CHECK( has(listnames1, "I2")); - - auto pnames1 = schedule.wellNames("I*", 0); - BOOST_CHECK_EQUAL(pnames1.size(), 0); - - auto pnames2 = schedule.wellNames("W*", 0); - BOOST_CHECK_EQUAL(pnames2.size(), 3); - BOOST_CHECK( has(pnames2, "W1")); - BOOST_CHECK( has(pnames2, "W2")); - BOOST_CHECK( has(pnames2, "W3")); - - auto anames = schedule.wellNames("?", 0, {"W1", "W2"}); - BOOST_CHECK_EQUAL(anames.size(), 2); - BOOST_CHECK(has(anames, "W1")); - BOOST_CHECK(has(anames, "W2")); - - auto all_names0 = schedule.wellNames("*", 0); - BOOST_CHECK_EQUAL( all_names0.size(), 6); - BOOST_CHECK( has(all_names0, "W1")); - BOOST_CHECK( has(all_names0, "W2")); - BOOST_CHECK( has(all_names0, "W3")); - BOOST_CHECK( has(all_names0, "DEFAULT")); - BOOST_CHECK( has(all_names0, "ALLOW")); - - auto all_names = schedule.wellNames("*", 2); - BOOST_CHECK_EQUAL( all_names.size(), 9); - BOOST_CHECK( has(all_names, "I1")); - BOOST_CHECK( has(all_names, "I2")); - BOOST_CHECK( has(all_names, "I3")); - BOOST_CHECK( has(all_names, "W1")); - BOOST_CHECK( has(all_names, "W2")); - BOOST_CHECK( has(all_names, "W3")); - BOOST_CHECK( has(all_names, "DEFAULT")); - BOOST_CHECK( has(all_names, "ALLOW")); - BOOST_CHECK( has(all_names, "BAN")); - - auto abs_all = schedule.wellNames(); - BOOST_CHECK_EQUAL(abs_all.size(), 9); -} - - - -BOOST_AUTO_TEST_CASE(RFT_CONFIG) { - std::vector tp = { asTimeT( TimeStampUTC(2010, 1, 1)), - asTimeT( TimeStampUTC(2010, 1, 2)), - asTimeT( TimeStampUTC(2010, 1, 3)), - asTimeT( TimeStampUTC(2010, 1, 4)), - asTimeT( TimeStampUTC(2010, 1, 5)), - asTimeT( TimeStampUTC(2010, 1, 6))}; - - - - TimeMap tm(tp); - RFTConfig conf(tm); - BOOST_CHECK_THROW( conf.rft("W1", 100), std::invalid_argument); - BOOST_CHECK_THROW( conf.plt("W1", 100), std::invalid_argument); - - BOOST_CHECK(!conf.rft("W1", 2)); - BOOST_CHECK(!conf.plt("W1", 2)); - - - conf.setWellOpenRFT(2); - BOOST_CHECK(!conf.getWellOpenRFT("W1", 0)); - - - conf.updateRFT("W1", 2, RFTConfig::RFT::YES); - BOOST_CHECK(conf.rft("W1", 2)); - BOOST_CHECK(!conf.rft("W1", 1)); - BOOST_CHECK(!conf.rft("W1", 3)); - - conf.updateRFT("W2", 2, RFTConfig::RFT::REPT); - conf.updateRFT("W2", 4, RFTConfig::RFT::NO); - BOOST_CHECK(!conf.rft("W2", 1)); - BOOST_CHECK( conf.rft("W2", 2)); - BOOST_CHECK( conf.rft("W2", 3)); - BOOST_CHECK(!conf.rft("W2", 4)); - - - conf.setWellOpenRFT("W3"); - BOOST_CHECK(conf.getWellOpenRFT("W3", 2)); - - conf.updateRFT("W4", 2, RFTConfig::RFT::FOPN); - BOOST_CHECK(conf.getWellOpenRFT("W4", 2)); - - - conf.addWellOpen("W10", 2); - conf.addWellOpen("W100", 3); -} - - -BOOST_AUTO_TEST_CASE(RFT_CONFIG2) { - auto deck = createDeckRFTConfig(); - auto python = std::make_shared(); - EclipseGrid grid1(10,10,10); - TableManager table ( deck ); - FieldPropsManager fp( deck, Phases{true, true, true}, grid1, table); - Runspec runspec (deck); - Schedule schedule(deck, grid1 , fp, runspec, python); - const auto& rft_config = schedule.rftConfig(); - - BOOST_CHECK_EQUAL(2, rft_config.firstRFTOutput()); -} - - -BOOST_AUTO_TEST_CASE(nupcol) { - Opm::Parser parser; - std::string input = - "START -- 0 \n" - "19 JUN 2007 / \n" - "SCHEDULE\n" - "DATES\n -- 1\n" - " 10 OKT 2008 / \n" - "/\n" - "NUPCOL\n" - " 1* /\n" - "DATES\n -- 1\n" - " 10 OKT 2009 / \n" - "/\n" - "NUPCOL\n" - " 10 /\n" - "DATES\n -- 1\n" - " 10 OKT 2010 / \n" - "/\n" - - ; - - auto deck = parser.parseString(input); - auto python = std::make_shared(); - EclipseGrid grid(10,10,10); - TableManager table ( deck ); - FieldPropsManager fp( deck, Phases{true, true, true}, grid, table); - Runspec runspec (deck); - Schedule schedule( deck, grid, fp, runspec, python); - - { - // Flow uses 12 as default - BOOST_CHECK_EQUAL(schedule.getNupcol(0),12); - BOOST_CHECK_EQUAL(schedule.getNupcol(1),12); - BOOST_CHECK_EQUAL(schedule.getNupcol(2),10); - } -} - -BOOST_AUTO_TEST_CASE(TESTGuideRateConfig) { - Opm::Parser parser; - std::string input = R"( -START -- 0 -10 MAI 2007 / -SCHEDULE -WELSPECS - 'W1' 'G1' 1 2 3.33 'OIL' 7*/ - 'W2' 'G2' 1 3 3.33 'OIL' 3* YES / - 'W3' 'G3' 1 4 3.92 'OIL' 3* NO / -/ - -COMPDAT - 'W1' 1 1 1 1 'OPEN' 1* 1.168 0.311 107.872 1* 1* 'Z' 21.925 / - 'W2' 1 1 2 2 'OPEN' 1* 1.168 0.311 107.872 1* 1* 'Z' 21.925 / - 'W3' 1 1 3 3 'OPEN' 1* 1.168 0.311 107.872 1* 1* 'Z' 21.925 / -/ - -WCONPROD - 'W1' 'OPEN' 'ORAT' 0.000 0.000 0.000 5* / -/ - -WGRUPCON - 'W1' 'YES' 0.50 'OIL' / - 'W2' 'YES' 0.50 'GAS' / -/ - -GCONPROD - 'G1' 'ORAT' 1000 / - 'G2' 'ORAT' 1000 5* 0.25 'OIL' / -/ - - -DATES -- 1 - 10 JUN 2007 / -/ - -WCONHIST - 'W1' 'OPEN' 'ORAT' 1.000 0.000 0.000 5* / -/ - -WGRUPCON - 'W1' 'YES' 0.75 'WAT' / - 'W2' 'NO' / -/ - -GCONPROD - 'G2' 'ORAT' 1000 / - 'G1' 'ORAT' 1000 6* 'FORM' / -/ - -DATES -- 2 - 10 JUL 2007 / -/ - - -WCONPROD - 'W1' 'OPEN' 'ORAT' 0.000 0.000 0.000 5* / -/ - - -DATES -- 3 - 10 AUG 2007 / -/ - - -DATES -- 4 - 10 SEP 2007 / -/ - - -DATES -- 5 - 10 NOV 2007 / -/ - -WELSPECS - 'W4' 'G1' 1 2 3.33 'OIL' 7*/ -/ - -DATES -- 6 - 10 DEC 2007 / -/ - -COMPDAT - 'W4' 1 1 1 1 'OPEN' 1* 1.168 0.311 107.872 1* 1* 'Z' 21.925 / -/ - - )"; - - auto deck = parser.parseString(input); - auto python = std::make_shared(); - EclipseGrid grid(10,10,10); - TableManager table ( deck ); - FieldPropsManager fp( deck, Phases{true, true, true}, grid, table); - Runspec runspec (deck); - Schedule schedule( deck, grid, fp, runspec, python); - - { - const auto& grc = schedule.guideRateConfig(0); - const auto& w1_node = grc.well("W1"); - BOOST_CHECK(w1_node.target == Well::GuideRateTarget::OIL); - - const auto& w2_node = grc.well("W2"); - BOOST_CHECK(w2_node.target == Well::GuideRateTarget::GAS); - - BOOST_CHECK(!grc.has_group("G1")); - BOOST_CHECK(grc.has_group("G2")); - } - { - const auto& grc = schedule.guideRateConfig(2); - const auto& w1_node = grc.well("W1"); - BOOST_CHECK(w1_node.target == Well::GuideRateTarget::WAT); - BOOST_CHECK_EQUAL(w1_node.guide_rate, 0.75); - - BOOST_CHECK(grc.has_well("W1")); - BOOST_CHECK(!grc.has_well("W2")); - BOOST_CHECK_THROW( grc.well("W2"), std::out_of_range); - - BOOST_CHECK(grc.has_group("G1")); - BOOST_CHECK(!grc.has_group("G2")); - } - - { - GuideRate gr(schedule); - double oil_pot = 1; - double gas_pot = 1; - double wat_pot = 1; - - gr.compute("XYZ",1, 1.0, oil_pot, gas_pot, wat_pot); - } - { - const auto& changed_wells = schedule.changed_wells(0); - BOOST_CHECK_EQUAL( changed_wells.size() , 3); - for (const auto& wname : {"W1", "W2", "W2"}) { - auto find_well = std::find(changed_wells.begin(), changed_wells.end(), wname); - BOOST_CHECK(find_well != changed_wells.end()); - } - } - { - const auto& changed_wells = schedule.changed_wells(2); - BOOST_CHECK_EQUAL( changed_wells.size(), 0); - } - { - const auto& changed_wells = schedule.changed_wells(4); - BOOST_CHECK_EQUAL( changed_wells.size(), 0); - } - { - const auto& changed_wells = schedule.changed_wells(5); - BOOST_CHECK_EQUAL( changed_wells.size(), 1); - BOOST_CHECK_EQUAL( changed_wells[0], "W4"); - } - { - const auto& changed_wells = schedule.changed_wells(6); - BOOST_CHECK_EQUAL( changed_wells.size(), 1); - BOOST_CHECK_EQUAL( changed_wells[0], "W4"); - } -} - -BOOST_AUTO_TEST_CASE(Injection_Control_Mode_From_Well) { - const auto deck = ::Opm::Parser{}.parseString(R"(RUNSPEC -DIMENS - 10 10 10 -/ - -START -- 0 -20 MAR 2020 / - -GRID - -DXV - 10*100 / -DYV - 10*100 / -DZV - 10*1 / - -TOPS - 100*2000 / - -PERMX - 1000*300 / -PERMY - 1000*300 / -PERMZ - 1000*3 / - -PORO - 1000*0.25 / - -SCHEDULE -WELSPECS - 'W1' 'G1' 1 2 3.33 'OIL' 7*/ - 'W2' 'G2' 1 3 3.33 'OIL' 3* YES / - 'W3' 'G3' 1 4 3.92 'OIL' 3* NO / - 'W4' 'G3' 2 2 3.92 'OIL' 3* NO / - 'W5' 'G3' 2 3 3.92 'OIL' 3* NO / - 'W6' 'G3' 2 4 3.92 'OIL' 3* NO / - 'W7' 'G3' 3 2 3.92 'OIL' 3* NO / -/ - -WCONINJE - 'W1' 'WATER' 'OPEN' 'GRUP' / - 'W2' 'GAS' 'OPEN' 'RATE' 200 1* 450.0 / - 'W3' 'OIL' 'OPEN' 'RATE' 200 1* 450.0 / - 'W4' 'WATER' 'OPEN' 'RATE' 200 1* 450.0 / - 'W5' 'WATER' 'OPEN' 'RESV' 200 175 450.0 / - 'W6' 'GAS' 'OPEN' 'BHP' 200 1* 450.0 / - 'W7' 'GAS' 'OPEN' 'THP' 200 1* 450.0 150 / -/ - -TSTEP - 30*30 / - -END -)"); - - auto python = std::make_shared<::Opm::Python>(); - const auto st = ::Opm::SummaryState{ std::chrono::system_clock::now() }; - const auto es = ::Opm::EclipseState{ deck }; - const auto sched = ::Opm::Schedule{ deck, es, python }; - - BOOST_CHECK_EQUAL(eclipseControlMode(sched.getWell("W1", 10), st), -1); - BOOST_CHECK_EQUAL(eclipseControlMode(sched.getWell("W2", 10), st), 3); - BOOST_CHECK_EQUAL(eclipseControlMode(sched.getWell("W3", 10), st), 1); - BOOST_CHECK_EQUAL(eclipseControlMode(sched.getWell("W4", 10), st), 2); - BOOST_CHECK_EQUAL(eclipseControlMode(sched.getWell("W5", 10), st), 5); - BOOST_CHECK_EQUAL(eclipseControlMode(sched.getWell("W6", 10), st), 7); - BOOST_CHECK_EQUAL(eclipseControlMode(sched.getWell("W7", 10), st), 6); -} - -BOOST_AUTO_TEST_CASE(Production_Control_Mode_From_Well) { - const auto deck = ::Opm::Parser{}.parseString(R"(RUNSPEC -DIMENS - 10 10 10 -/ - -START -- 0 -20 MAR 2020 / - -GRID - -DXV - 10*100 / -DYV - 10*100 / -DZV - 10*1 / - -TOPS - 100*2000 / - -PERMX - 1000*300 / -PERMY - 1000*300 / -PERMZ - 1000*3 / - -PORO - 1000*0.25 / - -SCHEDULE -WELSPECS - 'W1' 'G1' 1 2 3.33 'OIL' 7*/ - 'W2' 'G2' 1 3 3.33 'OIL' 3* YES / - 'W3' 'G3' 1 4 3.92 'OIL' 3* NO / - 'W4' 'G3' 2 2 3.92 'OIL' 3* NO / - 'W5' 'G3' 2 3 3.92 'OIL' 3* NO / - 'W6' 'G3' 2 4 3.92 'OIL' 3* NO / - 'W7' 'G3' 3 2 3.92 'OIL' 3* NO / - 'W8' 'G3' 3 3 3.92 'OIL' 3* NO / -/ - -WCONPROD - 'W1' 'OPEN' 'GRUP' / - 'W2' 'OPEN' 'ORAT' 1000.0 / - 'W3' 'OPEN' 'WRAT' 1000.0 250.0 / - 'W4' 'OPEN' 'GRAT' 1000.0 250.0 30.0e3 / - 'W5' 'OPEN' 'LRAT' 1000.0 250.0 30.0e3 1500.0 / - 'W6' 'OPEN' 'RESV' 1000.0 250.0 30.0e3 1500.0 314.15 / - 'W7' 'OPEN' 'BHP' 1000.0 250.0 30.0e3 1500.0 314.15 27.1828 / - 'W8' 'OPEN' 'THP' 1000.0 250.0 30.0e3 1500.0 314.15 27.1828 31.415 / -/ - -TSTEP - 30*30 / - -END -)"); - - auto python = std::make_shared<::Opm::Python>(); - const auto st = ::Opm::SummaryState{ std::chrono::system_clock::now() }; - const auto es = ::Opm::EclipseState{ deck }; - const auto sched = ::Opm::Schedule{ deck, es, python }; - - BOOST_CHECK_EQUAL(eclipseControlMode(sched.getWell("W1", 10), st), -1); - BOOST_CHECK_EQUAL(eclipseControlMode(sched.getWell("W2", 10), st), 1); - BOOST_CHECK_EQUAL(eclipseControlMode(sched.getWell("W3", 10), st), 2); - BOOST_CHECK_EQUAL(eclipseControlMode(sched.getWell("W4", 10), st), 3); - BOOST_CHECK_EQUAL(eclipseControlMode(sched.getWell("W5", 10), st), 4); - BOOST_CHECK_EQUAL(eclipseControlMode(sched.getWell("W6", 10), st), 5); - BOOST_CHECK_EQUAL(eclipseControlMode(sched.getWell("W7", 10), st), 7); - BOOST_CHECK_EQUAL(eclipseControlMode(sched.getWell("W8", 10), st), 6); -} - - - -BOOST_AUTO_TEST_CASE(SKIPREST_VFP) { - auto python = std::make_shared(); - Parser parser; - auto deck = parser.parseFile("MODEL2_RESTART.DATA"); - EclipseState es{ deck }; - const auto& init_config = es.getInitConfig(); - auto report_step = init_config.getRestartStep(); - const auto& rst_filename = es.getIOConfig().getRestartFileName( init_config.getRestartRootName(), report_step, false ); - Opm::EclIO::ERst rst_file(rst_filename); - const auto& rst = Opm::RestartIO::RstState::load(rst_file, report_step); - const auto sched = Schedule{ deck, es, python , &rst}; - const auto& tables = sched.getVFPProdTables(3); - BOOST_CHECK( !tables.empty() ); -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/SectionTests.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/SectionTests.cpp deleted file mode 100644 index 5d845f9d10..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/SectionTests.cpp +++ /dev/null @@ -1,391 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - - -#define BOOST_TEST_MODULE SectionTests - -#include -#include -#include - -#include - -#include -#include -#include -#include -#include - -using namespace Opm; - -BOOST_AUTO_TEST_CASE(SectionTest) { - Deck deck; - Parser parser; - deck.addKeyword( DeckKeyword(parser.getKeyword("START"))); - deck.addKeyword( DeckKeyword(parser.getKeyword("RUNSPEC"))); - deck.addKeyword( DeckKeyword(parser.getKeyword("WELLDIMS"))); - deck.addKeyword( DeckKeyword(parser.getKeyword("GRID"))); - deck.addKeyword( DeckKeyword(parser.getKeyword("PORO"))); - deck.addKeyword( DeckKeyword(parser.getKeyword("SCHEDULE"))); - deck.addKeyword( DeckKeyword(parser.getKeyword("WELSPECS"))); - - DeckSection runspecSection(deck, "RUNSPEC"); - DeckSection gridSection(deck, "GRID"); - BOOST_CHECK(runspecSection.hasKeyword("WELLDIMS")); - BOOST_CHECK(gridSection.hasKeyword("PORO")); - - BOOST_CHECK(!runspecSection.hasKeyword("START")); - BOOST_CHECK(!gridSection.hasKeyword("START")); - BOOST_CHECK(!runspecSection.hasKeyword("WELSPECS")); - BOOST_CHECK(!gridSection.hasKeyword("WELSPECS")); - BOOST_CHECK(!runspecSection.hasKeyword("PORO")); - BOOST_CHECK(!gridSection.hasKeyword("WELLDIMS")); -} - -BOOST_AUTO_TEST_CASE(IteratorTest) { - Deck deck; - Parser parser; - deck.addKeyword( DeckKeyword(parser.getKeyword("RUNSPEC"))); - deck.addKeyword( DeckKeyword(parser.getKeyword("WELLDIMS"))); - deck.addKeyword( DeckKeyword(parser.getKeyword("TABDIMS"))); - deck.addKeyword( DeckKeyword(parser.getKeyword("GRID"))); - DeckSection section(deck, "RUNSPEC"); - - int numberOfItems = 0; - for (auto iter=section.begin(); iter != section.end(); ++iter) { - std::cout << iter->name() << std::endl; - numberOfItems++; - } - - // the keywords expected here are RUNSPEC, WELLDIMS and TABDIMS - BOOST_CHECK_EQUAL(3, numberOfItems); -} - -BOOST_AUTO_TEST_CASE(RUNSPECSection_EmptyDeck) { - Deck deck; - BOOST_REQUIRE_NO_THROW(RUNSPECSection section(deck)); -} - -BOOST_AUTO_TEST_CASE(RUNSPECSection_ReadSimpleDeck) { - Deck deck; - Parser parser; - deck.addKeyword( DeckKeyword(parser.getKeyword( "START"))); - deck.addKeyword( DeckKeyword(parser.getKeyword( "RUNSPEC"))); - deck.addKeyword( DeckKeyword(parser.getKeyword( "WELLDIMS"))); - deck.addKeyword( DeckKeyword(parser.getKeyword( "TABDIMS"))); - deck.addKeyword( DeckKeyword(parser.getKeyword( "GRID"))); - deck.addKeyword( DeckKeyword(parser.getKeyword( "PORO"))); - - RUNSPECSection section(deck); - BOOST_CHECK(!section.hasKeyword("START")); - BOOST_CHECK(section.hasKeyword("RUNSPEC")); - BOOST_CHECK(section.hasKeyword("WELLDIMS")); - BOOST_CHECK(section.hasKeyword("TABDIMS")); - BOOST_CHECK(!section.hasKeyword("GRID")); - BOOST_CHECK(!section.hasKeyword("PORO")); -} - -BOOST_AUTO_TEST_CASE(RUNSPECSection_ReadSmallestPossibleDeck) { - Deck deck; - Parser parser; - deck.addKeyword( DeckKeyword(parser.getKeyword( "RUNSPEC" ))); - deck.addKeyword( DeckKeyword(parser.getKeyword( "GRID"))); - RUNSPECSection section(deck); - BOOST_CHECK_EQUAL(true, section.hasKeyword("RUNSPEC")); - BOOST_CHECK_EQUAL(false, section.hasKeyword("GRID")); -} - -BOOST_AUTO_TEST_CASE(GRIDSection_TerminatedByEDITKeyword) { - Deck deck; - Parser parser; - deck.addKeyword( DeckKeyword(parser.getKeyword( "GRID" ))); - deck.addKeyword( DeckKeyword(parser.getKeyword( "EDIT" ))); - GRIDSection section(deck); - BOOST_CHECK_EQUAL(true, section.hasKeyword("GRID")); - BOOST_CHECK_EQUAL(false, section.hasKeyword("EDIT")); -} - -BOOST_AUTO_TEST_CASE(GRIDSection_TerminatedByPROPSKeyword) { - Deck deck; - Parser parser; - deck.addKeyword( DeckKeyword(parser.getKeyword( "GRID" ))); - deck.addKeyword( DeckKeyword(parser.getKeyword( "PROPS" ))); - GRIDSection section(deck); - BOOST_CHECK_EQUAL(true, section.hasKeyword("GRID")); - BOOST_CHECK_EQUAL(false, section.hasKeyword("PROPS")); -} - -BOOST_AUTO_TEST_CASE(EDITSection_TerminatedByPROPSKeyword) { - Deck deck; - Parser parser; - deck.addKeyword( DeckKeyword(parser.getKeyword( "EDIT" ))); - deck.addKeyword( DeckKeyword(parser.getKeyword( "PROPS" ))); - EDITSection section(deck); - BOOST_CHECK_EQUAL(true, section.hasKeyword("EDIT")); - BOOST_CHECK_EQUAL(false, section.hasKeyword("PROPS")); -} - -BOOST_AUTO_TEST_CASE(PROPSSection_TerminatedByREGIONSKeyword) { - Deck deck; - Parser parser; - deck.addKeyword( DeckKeyword(parser.getKeyword( "PROPS" ))); - deck.addKeyword( DeckKeyword(parser.getKeyword( "REGIONS" ))); - PROPSSection section(deck); - BOOST_CHECK_EQUAL(true, section.hasKeyword("PROPS")); - BOOST_CHECK_EQUAL(false, section.hasKeyword("REGIONS")); -} - -BOOST_AUTO_TEST_CASE(PROPSSection_TerminatedBySOLUTIONKeyword) { - Deck deck; - Parser parser; - deck.addKeyword( DeckKeyword(parser.getKeyword( "PROPS" ))); - deck.addKeyword( DeckKeyword(parser.getKeyword( "SOLUTION" ))); - - PROPSSection section(deck); - BOOST_CHECK_EQUAL(true, section.hasKeyword("PROPS")); - BOOST_CHECK_EQUAL(false, section.hasKeyword("SOLUTION")); -} - -BOOST_AUTO_TEST_CASE(REGIONSSection_TerminatedBySOLUTIONKeyword) { - Deck deck; - Parser parser; - deck.addKeyword( DeckKeyword(parser.getKeyword( "REGIONS" ))); - deck.addKeyword( DeckKeyword(parser.getKeyword( "SOLUTION" ))); - - REGIONSSection section(deck); - BOOST_CHECK_EQUAL(true, section.hasKeyword("REGIONS")); - BOOST_CHECK_EQUAL(false, section.hasKeyword("SOLUTION")); -} - -BOOST_AUTO_TEST_CASE(SOLUTIONSection_TerminatedBySUMMARYKeyword) { - Deck deck; - Parser parser; - deck.addKeyword( DeckKeyword(parser.getKeyword( "SOLUTION" ))); - deck.addKeyword( DeckKeyword(parser.getKeyword( "SUMMARY" ))); - - SOLUTIONSection section(deck); - BOOST_CHECK_EQUAL(true, section.hasKeyword("SOLUTION")); - BOOST_CHECK_EQUAL(false, section.hasKeyword("SUMMARY")); -} - -BOOST_AUTO_TEST_CASE(SOLUTIONSection_TerminatedBySCHEDULEKeyword) { - Deck deck; - Parser parser; - deck.addKeyword( DeckKeyword(parser.getKeyword( "SOLUTION" ))); - deck.addKeyword( DeckKeyword(parser.getKeyword( "SCHEDULE" ))); - - SOLUTIONSection section(deck); - BOOST_CHECK_EQUAL(true, section.hasKeyword("SOLUTION")); - BOOST_CHECK_EQUAL(false, section.hasKeyword("SCHEDULE")); -} - -BOOST_AUTO_TEST_CASE(SCHEDULESection_NotTerminated) { - Deck deck; - Parser parser; - deck.addKeyword( DeckKeyword(parser.getKeyword( "SCHEDULE"))); - deck.addKeyword( DeckKeyword(parser.getKeyword( "WELSPECS" ) )); - deck.addKeyword( DeckKeyword(parser.getKeyword( "COMPDAT" ) )); - deck.addKeyword( DeckKeyword(parser.getKeyword( "WCONHIST" ) )); - deck.addKeyword( DeckKeyword(parser.getKeyword( "WCONPROD" ) )); - - SCHEDULESection section(deck); - BOOST_CHECK_EQUAL(true, section.hasKeyword("SCHEDULE")); - BOOST_CHECK_EQUAL(true, section.hasKeyword("WELSPECS")); - BOOST_CHECK_EQUAL(true, section.hasKeyword("COMPDAT")); - BOOST_CHECK_EQUAL(true, section.hasKeyword("WCONHIST")); - - BOOST_CHECK( DeckSection::hasSCHEDULE(deck )); - BOOST_CHECK( !DeckSection::hasREGIONS(deck )); -} - -BOOST_AUTO_TEST_CASE(Section_ValidDecks) { - - ParseContext mode { { { ParseContext::PARSE_UNKNOWN_KEYWORD, InputError::IGNORE } } }; - Parser parser; - ErrorGuard errors; - - const std::string minimal = "RUNSPEC\n" - "TEST1\n" - "GRID\n" - "TEST2\n" - "PROPS\n" - "TEST3\n" - "SOLUTION\n" - "TEST4\n" - "SCHEDULE\n" - "TEST5\n"; - - BOOST_CHECK( Opm::DeckSection::checkSectionTopology( parser.parseString( minimal, mode, errors ), parser) ); - - const std::string with_opt = "RUNSPEC\n" - "TEST1\n" - "GRID\n" - "TEST2\n" - "EDIT\n" - "TEST3\n" - "PROPS\n" - "TEST4\n" - "REGIONS\n" - "TEST5\n" - "SOLUTION\n" - "TEST6\n" - "SUMMARY\n" - "TEST7\n" - "SCHEDULE\n" - "TEST8\n"; - - BOOST_CHECK(Opm::DeckSection::checkSectionTopology( parser.parseString( with_opt, mode, errors ), parser)); -} - -BOOST_AUTO_TEST_CASE(Section_InvalidDecks) { - - Parser parser; - ParseContext mode { { { ParseContext::PARSE_UNKNOWN_KEYWORD, InputError::IGNORE } } }; - ErrorGuard errors; - - const std::string keyword_before_RUNSPEC = - "WWCT \n /\n" - "RUNSPEC\n" - "TEST1\n" - "GRID\n" - "TEST2\n" - "PROPS\n" - "TEST3\n" - "SOLUTION\n" - "TEST4\n" - "SCHEDULE\n" - "TEST5\n"; - - BOOST_CHECK(!Opm::DeckSection::checkSectionTopology( parser.parseString( keyword_before_RUNSPEC, mode, errors ), parser)); - - const std::string wrong_order = "RUNSPEC\n" - "TEST1\n" - "EDIT\n" - "TEST3\n" - "GRID\n" - "TEST2\n" - "PROPS\n" - "TEST4\n" - "REGIONS\n" - "TEST5\n" - "SOLUTION\n" - "TEST6\n" - "SUMMARY\n" - "TEST7\n" - "SCHEDULE\n" - "TEST8\n"; - - BOOST_CHECK(!Opm::DeckSection::checkSectionTopology( parser.parseString( wrong_order, mode, errors ), parser)); - - const std::string duplicate = "RUNSPEC\n" - "TEST1\n" - "GRID\n" - "TEST2\n" - "GRID\n" - "TEST21\n" - "EDIT\n" - "TEST3\n" - "PROPS\n" - "TEST4\n" - "REGIONS\n" - "TEST5\n" - "SOLUTION\n" - "TEST6\n" - "SUMMARY\n" - "TEST7\n" - "SCHEDULE\n" - "TEST8\n"; - - BOOST_CHECK(!Opm::DeckSection::checkSectionTopology( parser.parseString( duplicate, mode, errors ), parser)); - - const std::string section_after_SCHEDULE = "RUNSPEC\n" - "TEST1\n" - "GRID\n" - "TEST2\n" - "PROPS\n" - "TEST4\n" - "REGIONS\n" - "TEST5\n" - "SOLUTION\n" - "TEST6\n" - "SUMMARY\n" - "TEST7\n" - "SCHEDULE\n" - "TEST8\n" - "EDIT\n" - "TEST3\n"; - - BOOST_CHECK(!Opm::DeckSection::checkSectionTopology( parser.parseString( section_after_SCHEDULE, mode, errors ), parser)); - - const std::string missing_runspec = "GRID\n" - "TEST2\n" - "PROPS\n" - "TEST3\n" - "SOLUTION\n" - "TEST4\n" - "SCHEDULE\n" - "TEST5\n"; - - BOOST_CHECK(!Opm::DeckSection::checkSectionTopology( parser.parseString( missing_runspec, mode, errors ), parser)); - - - const std::string missing_GRID = "RUNSPEC\n" - "TEST1\n" - "PROPS\n" - "TEST3\n" - "SOLUTION\n" - "TEST4\n" - "SCHEDULE\n" - "TEST5\n"; - - BOOST_CHECK(!Opm::DeckSection::checkSectionTopology( parser.parseString( missing_GRID, mode, errors ), parser)); - - const std::string missing_PROPS = "RUNSPEC\n" - "TEST1\n" - "GRID\n" - "TEST2\n" - "SOLUTION\n" - "TEST4\n" - "SCHEDULE\n" - "TEST5\n"; - - BOOST_CHECK(!Opm::DeckSection::checkSectionTopology( parser.parseString( missing_PROPS, mode, errors ), parser)); - - const std::string missing_SOLUTION = "RUNSPEC\n" - "TEST1\n" - "GRID\n" - "TEST2\n" - "PROPS\n" - "TEST3\n" - "SCHEDULE\n" - "TEST5\n"; - - BOOST_CHECK(!Opm::DeckSection::checkSectionTopology( parser.parseString( missing_SOLUTION, mode, errors ), parser)); - - const std::string missing_SCHEDULE = "RUNSPEC\n" - "TEST1\n" - "GRID\n" - "TEST2\n" - "PROPS\n" - "TEST3\n" - "SOLUTION\n" - "TEST4\n"; - - BOOST_CHECK(!Opm::DeckSection::checkSectionTopology( parser.parseString( missing_SCHEDULE, mode, errors ), parser)); -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/SimpleTableTests.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/SimpleTableTests.cpp deleted file mode 100644 index c299966167..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/SimpleTableTests.cpp +++ /dev/null @@ -1,87 +0,0 @@ -/* - Copyright (C) 2015 by Statoil ASA - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#define BOOST_TEST_MODULE SimpleTableTests - -#include - - -#include -#include -#include -#include -#include - -using namespace Opm; - - -BOOST_AUTO_TEST_CASE( CreateTest ) { - TableSchema schema; - - { - ColumnSchema col1("Name1" , Table::INCREASING , Table::DEFAULT_NONE); - ColumnSchema col2("Name2" , Table::INCREASING , Table::DEFAULT_NONE); - schema.addColumn( col1 ); - schema.addColumn( col2 ); - } - - SimpleTable table(schema); - - BOOST_CHECK_THROW( table.addRow( {1,2,3} ), std::invalid_argument); - table.addRow( {1,2} ); - table.addRow( {3,4} ); - - { - const auto& col1 = table.getColumn( 0 ); - const auto& col2 = table.getColumn( 1 ); - - - BOOST_CHECK_EQUAL( col1[0] , 1 ); - BOOST_CHECK_EQUAL( col2[0] , 2 ); - BOOST_CHECK_EQUAL( col1[1] , 3 ); - BOOST_CHECK_EQUAL( col2[1] , 4 ); - } - - BOOST_CHECK_THROW( table.get("NameX" , 0) , std::invalid_argument); - BOOST_CHECK_THROW( table.get(3 , 0) , std::invalid_argument); - - BOOST_CHECK_THROW( table.get("Name1" , 3) , std::invalid_argument); - BOOST_CHECK_THROW( table.get(0 , 3) , std::invalid_argument); - - - BOOST_CHECK_EQUAL( table.get("Name1" , 0) , 1 ); - BOOST_CHECK_EQUAL( table.get("Name1" , 1) , 3 ); - BOOST_CHECK_EQUAL( table.get(0 , 0) , 1 ); - BOOST_CHECK_EQUAL( table.get(0 , 1) , 3 ); - - BOOST_CHECK_EQUAL( table.get("Name2" , 0) , 2 ); - BOOST_CHECK_EQUAL( table.get("Name2" , 1) , 4 ); - BOOST_CHECK_EQUAL( table.get(1 , 0) , 2 ); - BOOST_CHECK_EQUAL( table.get(1 , 1) , 4 ); - - { - const auto& col = table.getColumn("Name1"); - auto exportCol = col.vectorCopy(); - - BOOST_CHECK_EQUAL( col.size() , exportCol.size()); - for (size_t i = 0; i < col.size(); i++) - BOOST_CHECK_EQUAL( col[i] , exportCol[i]); - } -} - diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/SimulationConfigTest.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/SimulationConfigTest.cpp deleted file mode 100644 index 1f01e94554..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/SimulationConfigTest.cpp +++ /dev/null @@ -1,297 +0,0 @@ -/* - Copyright 2015 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - - - -#define BOOST_TEST_MODULE SimulationConfigTests - -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - - -using namespace Opm; - -const std::string& inputStr = "RUNSPEC\n" - "EQLOPTS\n" - "THPRES /\n" - "DIMENS\n" - "10 3 4 /\n" - "\n" - "GRID\n" - "REGIONS\n" - "EQLNUM\n" - "10*1 10*2 100*3 /\n " - "\n" - - "SOLUTION\n" - "THPRES\n" - "1 2 12.0/\n" - "1 3 5.0/\n" - "2 3 7.0/\n" - "/\n" - "\n"; - - -const std::string& inputStr_noTHPRES = "RUNSPEC\n" - "EQLOPTS\n" - "DIMENS\n" - "10 3 4 /\n" - "\n" - "GRID\n" - "REGIONS\n" - "EQLNUM\n" - "10*1 10*2 100*3 /\n " - "\n" - "SOLUTION\n" - "\n"; - -const std::string& inputStr_cpr = "RUNSPEC\n" - "CPR\n" - "/\n" - "SUMMARY\n"; - - -const std::string& inputStr_INVALID = "RUNSPEC\n" - "CPR\n" - "WEll 10 10 17/" - "/\n" - "SUMMARY\n"; - - - -const std::string& inputStr_cpr_in_SUMMARY = "SUMMARY\n" - "CPR\n" - "well1 10 27 10/\n/\n"; - -const std::string& inputStr_cpr_BOTH = "RUNSPEC\n" - "CPR\n" - "/\n" - "SUMMARY\n" - "CPR\n" - "well1 10 20 30/\n/\n"; - -const std::string& inputStr_vap_dis = "RUNSPEC\n" - "VAPOIL\n" - "DISGAS\n" - "DIMENS\n" - "10 3 4 /\n" - "\n" - "GRID\n" - "REGIONS\n" - "\n"; - -namespace { - std::string simDeckStringTEMP() - { - return R"( -RUNSPEC - -TEMP - -DIMENS - 10 3 4 / -)"; - } - - std::string simDeckStringTHERMAL() - { - return R"( -RUNSPEC - -THERMAL - -DIMENS - 10 3 4 / -)"; - } -} - -static Deck createDeck(const std::string& input) { - Opm::Parser parser; - return parser.parseString(input); -} - - -BOOST_AUTO_TEST_CASE(SimulationConfigGetThresholdPressureTableTest) { - auto deck = createDeck(inputStr); - TableManager tm(deck); - EclipseGrid eg(10, 3, 4); - FieldPropsManager fp(deck, Phases{true, true, true}, eg, tm); - BOOST_CHECK_NO_THROW( SimulationConfig(false, deck, fp) ); -} - - -BOOST_AUTO_TEST_CASE(SimulationConfigNOTHPRES) { - auto deck = createDeck(inputStr_noTHPRES); - TableManager tm(deck); - EclipseGrid eg(10, 3, 4); - FieldPropsManager fp(deck, Phases{true, true, true}, eg, tm); - SimulationConfig simulationConfig(false, deck, fp); - BOOST_CHECK( !simulationConfig.useThresholdPressure() ); -} - -BOOST_AUTO_TEST_CASE(SimulationConfigCPRNotUsed) { - auto deck = createDeck(inputStr_noTHPRES); - TableManager tm(deck); - EclipseGrid eg(10, 3, 4); - FieldPropsManager fp(deck, Phases{true, true, true}, eg, tm); - SimulationConfig simulationConfig(false, deck, fp); - BOOST_CHECK( ! simulationConfig.useCPR()); -} - -BOOST_AUTO_TEST_CASE(SimulationConfigCPRUsed) { - auto deck = createDeck(inputStr_cpr); - TableManager tm(deck); - EclipseGrid eg(10, 3, 4); - SUMMARYSection summary(deck); - FieldPropsManager fp(deck, Phases{true, true, true}, eg, tm); - SimulationConfig simulationConfig(false, deck, fp); - BOOST_CHECK( simulationConfig.useCPR() ); - BOOST_CHECK( ! summary.hasKeyword("CPR") ); -} - - -BOOST_AUTO_TEST_CASE(SimulationConfigCPRInSUMMARYSection) { - auto deck = createDeck(inputStr_cpr_in_SUMMARY); - TableManager tm(deck); - EclipseGrid eg(10, 3, 4); - SUMMARYSection summary(deck); - FieldPropsManager fp(deck, Phases{true, true, true}, eg, tm); - SimulationConfig simulationConfig(false, deck, fp); - BOOST_CHECK( ! simulationConfig.useCPR()); - BOOST_CHECK( summary.hasKeyword("CPR")); -} - - -BOOST_AUTO_TEST_CASE(SimulationConfigCPRBoth) { - auto deck = createDeck(inputStr_cpr_BOTH); - TableManager tm(deck); - EclipseGrid eg(10, 3, 4); - SUMMARYSection summary(deck); - FieldPropsManager fp(deck, Phases{true, true, true}, eg, tm); - SimulationConfig simulationConfig(false, deck, fp); - BOOST_CHECK( simulationConfig.useCPR()); - BOOST_CHECK( summary.hasKeyword("CPR")); - - const auto& cpr = summary.getKeyword(); - const auto& record = cpr.getRecord(0); - BOOST_CHECK_EQUAL( 1 , cpr.size()); - BOOST_CHECK_EQUAL( record.getItem().get< std::string >(0) , "well1"); - BOOST_CHECK_EQUAL( record.getItem().get< int >(0) , 10); - BOOST_CHECK_EQUAL( record.getItem().get< int >(0) , 20); - BOOST_CHECK_EQUAL( record.getItem().get< int >(0) , 30); -} - - -BOOST_AUTO_TEST_CASE(SimulationConfigCPRRUnspecWithData) { - BOOST_CHECK_THROW( createDeck(inputStr_INVALID) , std::invalid_argument ); -} - - -BOOST_AUTO_TEST_CASE(SimulationConfig_VAPOIL_DISGAS) { - auto deck = createDeck(inputStr); - TableManager tm(deck); - EclipseGrid eg(10, 3, 4); - FieldPropsManager fp(deck, Phases{true, true, true}, eg, tm); - SimulationConfig simulationConfig(false, deck, fp); - BOOST_CHECK_EQUAL( false , simulationConfig.hasDISGAS()); - BOOST_CHECK_EQUAL( false , simulationConfig.hasVAPOIL()); - - auto deck_vd = createDeck(inputStr_vap_dis); - TableManager tm_vd(deck_vd); - EclipseGrid eg_vd(10, 3, 4); - FieldPropsManager fp_vd(deck_vd, Phases{true, true, true}, eg, tm); - SimulationConfig simulationConfig_vd(false, deck_vd, fp_vd); - BOOST_CHECK_EQUAL( true , simulationConfig_vd.hasDISGAS()); - BOOST_CHECK_EQUAL( true , simulationConfig_vd.hasVAPOIL()); -} - - -BOOST_AUTO_TEST_CASE(SimulationConfig_TEMP_THERMAL) -{ - { - const auto deck = createDeck(inputStr); - const auto tm = TableManager(deck); - const auto eg = EclipseGrid(10, 3, 4); - const auto fp = FieldPropsManager(deck, Phases{true, true, true}, eg, tm); - const auto simulationConfig = Opm::SimulationConfig(false, deck, fp); - - BOOST_CHECK(! simulationConfig.isThermal()); - } - - { - const auto deck = createDeck(simDeckStringTEMP()); - const auto tm = TableManager(deck); - const auto eg = EclipseGrid(10, 3, 4); - const auto fp = FieldPropsManager(deck, Phases{true, true, true}, eg, tm); - const auto simulationConfig = Opm::SimulationConfig(false, deck, fp); - - BOOST_CHECK(simulationConfig.isThermal()); - } - - { - const auto deck = createDeck(simDeckStringTHERMAL()); - const auto tm = TableManager(deck); - const auto eg = EclipseGrid(10, 3, 4); - const auto fp = FieldPropsManager(deck, Phases{true, true, true}, eg, tm); - const auto simulationConfig = Opm::SimulationConfig(false, deck, fp); - - BOOST_CHECK(simulationConfig.isThermal()); - } -} - - -BOOST_AUTO_TEST_CASE(TESTRockConfig) { - const std::string deck_string = R"( -RUNSPEC - -ROCKCOMP -/ - -PROPS - -ROCK - 1 0.1 / - 2 0.2 / - 3 0.3 / - -ROCKOPTS - 2* SATNUM / - -)"; - Opm::Parser parser; - const auto deck = parser.parseString(deck_string); - EclipseGrid grid(10,10,10); - FieldPropsManager fp(deck, Phases{true, true, true}, grid, TableManager()); - RockConfig rc(deck, fp); - BOOST_CHECK_EQUAL(rc.rocknum_property(), "SATNUM"); - const auto& comp = rc.comp(); - BOOST_CHECK_EQUAL(comp.size(), 3); -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/StarTokenTests.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/StarTokenTests.cpp deleted file mode 100644 index e17fee18d9..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/StarTokenTests.cpp +++ /dev/null @@ -1,127 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#define BOOST_TEST_MODULE ParserTests -#include -#include - -#include "src/opm/parser/eclipse/Parser/raw/StarToken.hpp" - - -BOOST_AUTO_TEST_CASE(NoStarThrows) { - BOOST_REQUIRE_THROW(Opm::StarToken st("Hei...") , std::invalid_argument); -} - - -BOOST_AUTO_TEST_CASE(InvalidCountThrow) { - BOOST_REQUIRE_THROW( Opm::StarToken st("X*") , std::invalid_argument); - BOOST_REQUIRE_THROW( Opm::StarToken st("1.25*") , std::invalid_argument); - BOOST_REQUIRE_THROW( Opm::StarToken st("-3*") , std::invalid_argument); - BOOST_REQUIRE_THROW( Opm::StarToken st("0*") , std::invalid_argument); - BOOST_REQUIRE_THROW( Opm::StarToken st("*123") , std::invalid_argument); -} - - -BOOST_AUTO_TEST_CASE(CountCorrect) { - Opm::StarToken st1("*"); - Opm::StarToken st2("5*"); - Opm::StarToken st3("54*"); - BOOST_CHECK(st1.countString() == ""); - BOOST_CHECK(st2.countString() == "5"); - BOOST_CHECK(st3.countString() == "54"); - - BOOST_CHECK(st1.valueString() == ""); - BOOST_CHECK(st2.valueString() == ""); - BOOST_CHECK(st3.valueString() == ""); - - BOOST_CHECK(!st1.hasValue()); - BOOST_CHECK(!st2.hasValue()); - BOOST_CHECK(!st3.hasValue()); - - BOOST_REQUIRE_EQUAL(1U , st1.count()); - BOOST_REQUIRE_EQUAL(5U , st2.count()); - BOOST_REQUIRE_EQUAL(54U , st3.count()); -} - - -BOOST_AUTO_TEST_CASE(NoValueGetValueThrow) { - Opm::StarToken st1("*"); - Opm::StarToken st2("5*"); - BOOST_CHECK_EQUAL( false , st1.hasValue()); - BOOST_CHECK_EQUAL( false , st2.hasValue()); -} - -BOOST_AUTO_TEST_CASE(StarNoCountThrows) { - BOOST_CHECK_THROW( Opm::StarToken st1("*10") , std::invalid_argument); -} - - -BOOST_AUTO_TEST_CASE(CorrectValueString) { - Opm::StarToken st1("1*10.09"); - Opm::StarToken st2("5*20.13"); - Opm::StarToken st3("1*'123'"); - Opm::StarToken st4("1*123*456"); - BOOST_CHECK_EQUAL( true , st1.hasValue()); - BOOST_CHECK_EQUAL( true , st2.hasValue()); - BOOST_CHECK_EQUAL( true , st3.hasValue()); - BOOST_CHECK_EQUAL( true , st4.hasValue()); - - BOOST_CHECK_EQUAL( "10.09" , st1.valueString()); - BOOST_CHECK_EQUAL( "20.13" , st2.valueString()); - BOOST_CHECK_EQUAL( "'123'" , st3.valueString()); - BOOST_CHECK_EQUAL( "123*456" , st4.valueString()); -} - -BOOST_AUTO_TEST_CASE( ContainsStar_WithStar_ReturnsTrue ) { - std::string countString, valueString; - BOOST_CHECK_EQUAL( true , Opm::isStarToken("*", countString, valueString) ); - BOOST_CHECK_EQUAL( true , Opm::isStarToken("*1", countString, valueString) ); - BOOST_CHECK_EQUAL( true , Opm::isStarToken("1*", countString, valueString) ); - BOOST_CHECK_EQUAL( true , Opm::isStarToken("1*2", countString, valueString) ); - - BOOST_CHECK_EQUAL( false , Opm::isStarToken("12", countString, valueString) ); - BOOST_CHECK_EQUAL( false , Opm::isStarToken("'12*34'", countString, valueString) ); -} - -BOOST_AUTO_TEST_CASE( readValueToken_basic_validity_tests ) { - BOOST_CHECK_THROW( Opm::readValueToken( std::string( "3.3" ) ), std::invalid_argument ); - BOOST_CHECK_EQUAL( 3, Opm::readValueToken( std::string( "3" ) ) ); - BOOST_CHECK_EQUAL( 3, Opm::readValueToken( std::string( "+3" ) ) ); - BOOST_CHECK_EQUAL( -3, Opm::readValueToken( std::string( "-3" ) ) ); - BOOST_CHECK_THROW( Opm::readValueToken( std::string( "truls" ) ), std::invalid_argument ); - BOOST_CHECK_EQUAL( 0, Opm::readValueToken( std::string( "0" ) ) ); - BOOST_CHECK_EQUAL( 0, Opm::readValueToken( std::string( "0.0" ) ) ); - BOOST_CHECK_EQUAL( 0, Opm::readValueToken( std::string( "+0.0" ) ) ); - BOOST_CHECK_EQUAL( 0, Opm::readValueToken( std::string( "-0.0" ) ) ); - BOOST_CHECK_EQUAL( 0, Opm::readValueToken( std::string( ".0" ) ) ); - BOOST_CHECK_THROW( Opm::readValueToken( std::string( "1.0.0" ) ), std::invalid_argument ); - BOOST_CHECK_THROW( Opm::readValueToken( std::string( "1g0" ) ), std::invalid_argument ); - BOOST_CHECK_THROW( Opm::readValueToken( std::string( "1.23h" ) ), std::invalid_argument ); - BOOST_CHECK_THROW( Opm::readValueToken( std::string( "+1.23h" ) ), std::invalid_argument ); - BOOST_CHECK_THROW( Opm::readValueToken( std::string( "-1.23h" ) ), std::invalid_argument ); - BOOST_CHECK_EQUAL( 3.3, Opm::readValueToken( std::string( "3.3" ) ) ); - BOOST_CHECK_CLOSE( 3.3, Opm::readValueToken( std::string( "3.3e0" ) ), 1e-6 ); - BOOST_CHECK_CLOSE( 3.3, Opm::readValueToken( std::string( "3.3d0" ) ), 1e-6 ); - BOOST_CHECK_CLOSE( 3.3, Opm::readValueToken( std::string( "3.3E0" ) ), 1e-6 ); - BOOST_CHECK_CLOSE( 3.3, Opm::readValueToken( std::string( "3.3D0" ) ), 1e-6 ); - BOOST_CHECK_EQUAL( "OLGA", Opm::readValueToken( std::string( "OLGA" ) ) ); - BOOST_CHECK_EQUAL( "OLGA", Opm::readValueToken( std::string( "'OLGA'" ) ) ); - BOOST_CHECK_EQUAL( "123*456", Opm::readValueToken( std::string( "123*456" ) ) ); - BOOST_CHECK_EQUAL( "123*456", Opm::readValueToken( std::string( "'123*456'" ) ) ); -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/StringTests.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/StringTests.cpp deleted file mode 100644 index a79caf7876..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/StringTests.cpp +++ /dev/null @@ -1,244 +0,0 @@ -#define BOOST_TEST_MODULE StringTests - -#include - -#include -#include - -using namespace Opm; - -BOOST_AUTO_TEST_CASE( uppercase_copy ) { - const std::string src = "string"; - const std::string dst = uppercase( src ); - - BOOST_CHECK_EQUAL( src, "string" ); - BOOST_CHECK_EQUAL( dst, "STRING" ); -} - -BOOST_AUTO_TEST_CASE( uppercase_inplace ) { - std::string src = "string"; - auto& ref = uppercase( src, src ); - - BOOST_CHECK_EQUAL( src, "STRING" ); - BOOST_CHECK_EQUAL( src, ref ); - BOOST_CHECK_EQUAL( std::addressof( src ), std::addressof( ref ) ); -} - -BOOST_AUTO_TEST_CASE( nonconst_ref ) { - std::string src = "string"; - auto dst = uppercase( src ); - - BOOST_CHECK_EQUAL( src, "string" ); - BOOST_CHECK_EQUAL( dst, "STRING" ); -} - -BOOST_AUTO_TEST_CASE( uppercase_move ) { - std::string src = "string"; - auto dst = uppercase( std::move( src ) ); - - BOOST_CHECK_EQUAL( dst, "STRING" ); -} - -BOOST_AUTO_TEST_CASE( uppercase_mixed_type ) { - std::string src = "string"; - string_view view( src ); - - - std::string dst = "string"; - uppercase( view, dst ); - BOOST_CHECK_EQUAL( dst, "STRING" ); - BOOST_CHECK_EQUAL( view, "string" ); -} - -BOOST_AUTO_TEST_CASE( write_parts_of_dst ) { - std::string src = "string"; - string_view view( src ); - - - std::string dst = "stringmixed"; - uppercase( view, dst ); - BOOST_CHECK_EQUAL( dst, "STRINGmixed" ); - BOOST_CHECK_EQUAL( view, "string" ); -} - -BOOST_AUTO_TEST_CASE(fullStringView) { - std::string srcstr = "lorem ipsum"; - string_view view( srcstr ); - - BOOST_CHECK_EQUAL_COLLECTIONS( - srcstr.begin(), srcstr.end(), - view.begin(), view.end() ); -} - -BOOST_AUTO_TEST_CASE(viewCorrectSize) { - std::string srcstr = "lorem ipsum"; - - string_view full( srcstr ); - BOOST_CHECK_EQUAL( srcstr.size(), full.size() ); - - string_view view( srcstr, 5 ); - BOOST_CHECK_EQUAL( 5, view.size() ); - BOOST_CHECK_EQUAL( 5, view.length() ); -} - -BOOST_AUTO_TEST_CASE(viewOperatorAt) { - std::string srcstr = "lorem ipsum"; - string_view view( srcstr ); - - for( size_t i = 0; i < view.size(); ++i ) - BOOST_CHECK_EQUAL( view[ i ], srcstr[ i ] ); -} - -BOOST_AUTO_TEST_CASE(viewFrontBack) { - std::string srcstr = "lorem ipsum"; - string_view view( srcstr ); - - BOOST_CHECK_EQUAL( view.front(), 'l' ); - BOOST_CHECK_EQUAL( view.back(), 'm' ); -} - - -BOOST_AUTO_TEST_CASE(viewSubstr) { - std::string srcstr = "lorem ipsum"; - string_view view( srcstr ); - - BOOST_CHECK_NO_THROW( view.string() ); - BOOST_CHECK_EQUAL( srcstr, view.string() ); - BOOST_CHECK_EQUAL( srcstr, view.substr() ); - BOOST_CHECK_EQUAL( "", view.substr( 0, 0 ) ); - - BOOST_CHECK_EQUAL( srcstr.substr( 1 ), view.substr( 1 ) ); - BOOST_CHECK_EQUAL( srcstr, view.substr( 0, srcstr.size() + 1 )); - BOOST_CHECK_EQUAL( "", view.substr( 1, 0 )); - BOOST_CHECK_EQUAL( "", view.substr( 0, 0 ) ); - - BOOST_CHECK_THROW( view.substr( srcstr.size() + 1 ), std::out_of_range ); -} - -BOOST_AUTO_TEST_CASE(viewStream) { - std::string srcstr = "lorem ipsum"; - string_view view( srcstr ); - - std::stringstream str; - str << view; - - BOOST_CHECK_EQUAL( srcstr, str.str() ); -} - -BOOST_AUTO_TEST_CASE(equalityOperators) { - std::string srcstr = "lorem ipsum"; - std::string diffstr = "lorem"; - string_view view( srcstr ); - - BOOST_CHECK_EQUAL( srcstr, view ); - BOOST_CHECK_NE( diffstr, view ); - - BOOST_CHECK_EQUAL( view, srcstr ); - BOOST_CHECK_NE( view, diffstr ); - - BOOST_CHECK_EQUAL( "lorem ipsum", view ); - BOOST_CHECK_NE( "lorem", view ); - - BOOST_CHECK_EQUAL( view, "lorem ipsum" ); - BOOST_CHECK_NE( view, "lorem" ); -} - -BOOST_AUTO_TEST_CASE(plusOperator) { - std::string total = "lorem ipsum"; - std::string lhs = "lorem"; - std::string ws = " "; - std::string rhs = "ipsum"; - - string_view lhs_view( lhs ); - string_view rhs_view( rhs ); - - BOOST_CHECK_EQUAL( total, lhs_view + ws + rhs_view ); - BOOST_CHECK_EQUAL( lhs + ws, lhs_view + ws ); - BOOST_CHECK_EQUAL( ws + rhs, ws + rhs_view ); -} - - - -BOOST_AUTO_TEST_CASE(strncmp_function) { - std::string s = "A BB CCC DDDD"; - string_view view(s); - - BOOST_CHECK(!view.starts_with("this is a very long string -longer than the view")); - BOOST_CHECK(view.starts_with("A")); - BOOST_CHECK(view.starts_with("A BB")); - BOOST_CHECK(!view.starts_with("A BB D")); - BOOST_CHECK(view.starts_with(s)); - - BOOST_CHECK_EQUAL( view.find("A"), 0); - BOOST_CHECK_EQUAL( view.find("BB"), 2); - BOOST_CHECK_EQUAL( view.find("C"), 5); - BOOST_CHECK_EQUAL( view.find("CCCC"), std::string::npos); - BOOST_CHECK_EQUAL( view.find("DDDD"), 9); - - BOOST_CHECK_EQUAL( view.find('A'), 0); - BOOST_CHECK_EQUAL( view.find('B'), 2); - BOOST_CHECK_EQUAL( view.find('C'), 5); - BOOST_CHECK_EQUAL( view.find('X'), std::string::npos); - BOOST_CHECK_EQUAL( view.find('D'), 9); -} - - - -BOOST_AUTO_TEST_CASE(trim) { - std::string s1 = "ABC"; - std::string s2 = " ABC"; - std::string s3 = "ABC "; - std::string s4 = " ABC "; - std::string s5 = ""; - std::string s6 = " "; - - BOOST_CHECK_EQUAL(trim_copy(s1) , s1); - BOOST_CHECK_EQUAL(trim_copy(s2) , s1); - BOOST_CHECK_EQUAL(trim_copy(s3) , s1); - BOOST_CHECK_EQUAL(trim_copy(s4) , s1); - BOOST_CHECK_EQUAL(trim_copy(s5) , s5); - BOOST_CHECK_EQUAL(trim_copy(s6) , s5); - - BOOST_CHECK_EQUAL(ltrim_copy(s1) , s1); - BOOST_CHECK_EQUAL(ltrim_copy(s2) , s1); - BOOST_CHECK_EQUAL(ltrim_copy(s3) , s3); - BOOST_CHECK_EQUAL(ltrim_copy(s4) , s3); - BOOST_CHECK_EQUAL(ltrim_copy(s5) , s5); - BOOST_CHECK_EQUAL(ltrim_copy(s6) , s5); - - BOOST_CHECK_EQUAL(rtrim_copy(s1) , s1); - BOOST_CHECK_EQUAL(rtrim_copy(s2) , s2); - BOOST_CHECK_EQUAL(rtrim_copy(s3) , s1); - BOOST_CHECK_EQUAL(rtrim_copy(s4) , s2); - BOOST_CHECK_EQUAL(rtrim_copy(s5) , s5); - BOOST_CHECK_EQUAL(rtrim_copy(s6) , s5); -} - - -BOOST_AUTO_TEST_CASE(replace_all) { - std::string s1 = "lorem ipsum"; - - replaceAll(s1, "m", "foo"); - BOOST_CHECK_EQUAL(s1, "lorefoo ipsufoo"); -} - - -BOOST_AUTO_TEST_CASE(split) { - std::string s1 = "lorem ipsum"; - - auto split1 = split_string(s1, ' '); - BOOST_CHECK_EQUAL(split1.size(), 2); - BOOST_CHECK_EQUAL(split1[0], "lorem"); - BOOST_CHECK_EQUAL(split1[1], "ipsum"); - - auto split2 = split_string(s1, "r "); - BOOST_CHECK_EQUAL(split2.size(), 3); - BOOST_CHECK_EQUAL(split2[0], "lo"); - BOOST_CHECK_EQUAL(split2[1], "em"); - BOOST_CHECK_EQUAL(split2[2], "ipsum"); - - auto split3 = split_string(s1, "m "); - BOOST_CHECK_EQUAL(split3.size(), 2); - BOOST_CHECK_EQUAL(split3[0], "lore"); - BOOST_CHECK_EQUAL(split3[1], "ipsu"); -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/SummaryConfigTests.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/SummaryConfigTests.cpp deleted file mode 100644 index 21fa23c5f9..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/SummaryConfigTests.cpp +++ /dev/null @@ -1,1036 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#define BOOST_TEST_MODULE SummaryConfigTests - -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -using namespace Opm; - -static Deck createDeck_no_wells( const std::string& summary ) { - Opm::Parser parser; - std::string input = - "START -- 0 \n" - "10 MAI 2007 / \n" - "RUNSPEC\n" - "\n" - "DIMENS\n" - " 10 10 10 /\n" - "REGDIMS\n" - " 3/\n" - "GRID\n" - "DXV \n 10*400 /\n" - "DYV \n 10*400 /\n" - "DZV \n 10*400 /\n" - "TOPS \n 100*2202 / \n" - "PERMX\n" - " 1000*0.25 /\n" - "COPY\n" - " PERMX PERMY /\n" - " PERMX PERMZ /\n" - "/\n" - "PORO \n" - " 1000*0.15 /\n" - "REGIONS\n" - "FIPNUM\n" - "200*1 300*2 500*3 /\n" - "SCHEDULE\n" - "SUMMARY\n" - + summary; - - return parser.parseString(input); -} - - -static Deck createDeck( const std::string& summary ) { - Opm::Parser parser; - std::string input = - "START -- 0 \n" - "10 MAI 2007 / \n" - "RUNSPEC\n" - "\n" - "DIMENS\n" - " 10 10 10 /\n" - "REGDIMS\n" - " 3/\n" - "GRID\n" - "DXV \n 10*400 /\n" - "DYV \n 10*400 /\n" - "DZV \n 10*400 /\n" - "TOPS \n 100*2202 / \n" - "PERMX\n" - " 1000*0.25 /\n" - "COPY\n" - " PERMX PERMY /\n" - " PERMX PERMZ /\n" - "/\n" - "PORO \n" - " 1000*0.15 /\n" - "REGIONS\n" - "FIPNUM\n" - "200*1 300*2 500*3 /\n" - "SCHEDULE\n" - "WELSPECS\n" - " \'W_1\' \'OP\' 1 1 3.33 \'OIL\' 7* / \n" - " \'WX2\' \'OP\' 2 2 3.33 \'OIL\' 7* / \n" - " \'W_3\' \'OP\' 2 5 3.92 \'OIL\' 7* / \n" - " 'PRODUCER' 'G' 5 5 2000 'GAS' /\n" - "/\n" - "COMPDAT\n" - "'PRODUCER' 5 5 1 1 'OPEN' 1* -1 0.5 / \n" - "'W_1' 3 7 2 2 'OPEN' 1* * 0.311 4332.346 2* 'X' 22.123 / \n" - "'W_1' 2 2 1 1 /\n" - "'WX2' 2 2 1 1 /\n" - "/\n" - "SUMMARY\n" - + summary; - - return parser.parseString(input); -} - -static std::vector< std::string > sorted_names( const SummaryConfig& summary ) { - std::vector< std::string > ret; - for( const auto& x : summary ) { - auto wgname = x.namedEntity(); - if(wgname.size()) - ret.push_back( wgname ); - } - - std::sort( ret.begin(), ret.end() ); - return ret; -} - -static std::vector< std::string > sorted_keywords( const SummaryConfig& summary ) { - std::vector< std::string > ret; - for( const auto& x : summary ) - ret.push_back( x.keyword() ); - - std::sort( ret.begin(), ret.end() ); - return ret; -} - -static std::vector< std::string > sorted_key_names( const SummaryConfig& summary ) { - std::vector< std::string > ret; - for( const auto& x : summary ) { - ret.push_back( x.uniqueNodeKey() ); - } - - std::sort( ret.begin(), ret.end() ); - return ret; -} - -static SummaryConfig createSummary( std::string input , const ParseContext& parseContext = ParseContext()) { - ErrorGuard errors; - auto deck = createDeck( input ); - auto python = std::make_shared(); - EclipseState state( deck ); - Schedule schedule(deck, state, parseContext, errors, python); - return SummaryConfig( deck, schedule, state.getTableManager( ), parseContext, errors ); -} - -BOOST_AUTO_TEST_CASE(wells_all) { - const auto input = "WWCT\n/\n"; - const auto summary = createSummary( input ); - - const auto wells = { "PRODUCER", "WX2", "W_1", "W_3" }; - const auto names = sorted_names( summary ); - - BOOST_CHECK_EQUAL_COLLECTIONS( - wells.begin(), wells.end(), - names.begin(), names.end() ); -} - -BOOST_AUTO_TEST_CASE(EMPTY) { - auto deck = createDeck_no_wells( "" ); - auto python = std::make_shared(); - EclipseState state( deck ); - Schedule schedule(deck, state, python); - SummaryConfig conf(deck, schedule, state.getTableManager()); - BOOST_CHECK_EQUAL( conf.size(), 0 ); -} - -BOOST_AUTO_TEST_CASE(wells_missingI) { - auto python = std::make_shared(); - ParseContext parseContext; - ErrorGuard errors; - const auto input = "WWCT\n/\n"; - auto deck = createDeck_no_wells( input ); - parseContext.update(ParseContext::SUMMARY_UNKNOWN_WELL, InputError::THROW_EXCEPTION); - EclipseState state( deck ); - Schedule schedule(deck, state, parseContext, errors, python ); - BOOST_CHECK_NO_THROW( SummaryConfig( deck, schedule, state.getTableManager( ), parseContext, errors )); -} - - -BOOST_AUTO_TEST_CASE(wells_select) { - const auto input = "WWCT\n'W_1' 'WX2' /\n"; - const auto summary = createSummary( input ); - const auto wells = { "WX2", "W_1" }; - const auto names = sorted_names( summary ); - - BOOST_CHECK_EQUAL_COLLECTIONS( - wells.begin(), wells.end(), - names.begin(), names.end() ); - - BOOST_CHECK_EQUAL( summary.size(), 2 ); -} - -BOOST_AUTO_TEST_CASE(groups_all) { - const auto summary = createSummary( "GWPR \n /\n" ); - const auto groups = { "G", "OP" }; - const auto names = sorted_names( summary ); - - BOOST_CHECK_EQUAL_COLLECTIONS( groups.begin(), groups.end(), - names.begin(), names.end() ); -} - -BOOST_AUTO_TEST_CASE(wells_pattern) { - const auto input = "WWCT\n'W*' /\n"; - const auto summary = createSummary( input ); - const auto wells = { "WX2", "W_1", "W_3" }; - const auto names = sorted_names( summary ); - - BOOST_CHECK_EQUAL_COLLECTIONS( - wells.begin(), wells.end(), - names.begin(), names.end() ); -} - -BOOST_AUTO_TEST_CASE(fields) { - const auto input = "FOPT\n"; - const auto summary = createSummary( input ); - const auto keywords = { "FOPT" }; - const auto names = sorted_keywords( summary ); - - BOOST_CHECK_EQUAL_COLLECTIONS( - keywords.begin(), keywords.end(), - names.begin(), names.end() ); -} - -BOOST_AUTO_TEST_CASE(field_oil_efficiency) { - const auto input = "FOE\n"; - const auto summary = createSummary( input ); - - BOOST_CHECK_EQUAL( true , summary.hasKeyword( "FOE")); -} - -BOOST_AUTO_TEST_CASE(blocks) { - const auto input = "BPR\n" - "3 3 6 /\n" - "4 3 6 /\n" - "/"; - const auto summary = createSummary( input ); - const auto keywords = { "BPR", "BPR" }; - const auto names = sorted_keywords( summary ); - - BOOST_CHECK_EQUAL_COLLECTIONS( - keywords.begin(), keywords.end(), - names.begin(), names.end() ); -} - -BOOST_AUTO_TEST_CASE(regions) { - const auto input = "ROIP\n" - "1 2 3 /\n" - "RWIP\n" - "/\n" - "RGIP\n" - "1 2 /\n"; - - const auto summary = createSummary( input ); - const auto keywords = { "RGIP", "RGIP", - "ROIP", "ROIP", "ROIP", - "RWIP", "RWIP", "RWIP" }; - const auto names = sorted_keywords( summary ); - - BOOST_CHECK_EQUAL_COLLECTIONS( - keywords.begin(), keywords.end(), - names.begin(), names.end() ); -} - -BOOST_AUTO_TEST_CASE(region2region) { - const auto input = "ROFT\n" - "1 2/\n" - "3 4/\n" - "/\n" - "RWIP\n" - "/\n" - "RGFT\n" - "5 6/\n" - "7 8/\n" - "/\n"; - - - ParseContext parseContext; - parseContext.update(ParseContext::SUMMARY_UNHANDLED_KEYWORD, InputError::IGNORE); - - const auto summary = createSummary( input, parseContext ); - const auto keywords = { "RWIP", "RWIP", "RWIP" }; - const auto names = sorted_keywords( summary ); - - BOOST_CHECK_EQUAL_COLLECTIONS(keywords.begin(), keywords.end(), - names.begin(), names.end() ); - - parseContext.update(ParseContext::SUMMARY_UNHANDLED_KEYWORD, InputError::THROW_EXCEPTION); - BOOST_CHECK_THROW( createSummary(input, parseContext), std::invalid_argument); -} - -BOOST_AUTO_TEST_CASE(completions) { - const auto input = "CWIR\n" // all specified - "'PRODUCER' /\n" - "'WX2' 1 1 1 /\n" - "'WX2' 2 2 1 /\n" - "/\n" - "CWIT\n" // block defaulted - "'W_1' /\n" - "/\n" - "CGIT\n" // well defaulted - "* 2 2 1 /\n" - "/\n" - "CGIR\n" // all defaulted - " '*' /\n" - "/\n" - "CPRL\n" // all defaulted - " '*' /\n" - "/\n"; - - const auto summary = createSummary( input ); - const auto keywords = { "CGIR", "CGIR", "CGIR", "CGIR", - "CGIT", "CGIT", - "CPRL", "CPRL", "CPRL", "CPRL", - "CWIR", "CWIR", - "CWIT", "CWIT" }; - const auto names = sorted_keywords( summary ); - - BOOST_CHECK_EQUAL_COLLECTIONS( - keywords.begin(), keywords.end(), - names.begin(), names.end() ); - -} - -BOOST_AUTO_TEST_CASE( merge ) { - const auto input1 = "WWCT\n/\n"; - auto summary1 = createSummary( input1 ); - - const auto keywords = { "FOPT", "WWCT", "WWCT", "WWCT", "WWCT" }; - const auto wells = { "PRODUCER", "WX2", "W_1", "W_3" }; - - const auto input2 = "FOPT\n"; - const auto summary2 = createSummary( input2 ); - - summary1.merge( summary2 ); - const auto kw_names = sorted_keywords( summary1 ); - const auto well_names = sorted_names( summary1 ); - - BOOST_CHECK_EQUAL_COLLECTIONS( - keywords.begin(), keywords.end(), - kw_names.begin(), kw_names.end() ); - - BOOST_CHECK_EQUAL_COLLECTIONS( - wells.begin(), wells.end(), - well_names.begin(), well_names.end() ); -} - -BOOST_AUTO_TEST_CASE( merge_move ) { - const auto input = "WWCT\n/\n"; - auto summary = createSummary( input ); - - const auto keywords = { "FOPT", "WWCT", "WWCT", "WWCT", "WWCT" }; - const auto wells = { "PRODUCER", "WX2", "W_1", "W_3" }; - - summary.merge( createSummary( "FOPT\n" ) ); - - const auto kw_names = sorted_keywords( summary ); - const auto well_names = sorted_names( summary ); - - BOOST_CHECK_EQUAL_COLLECTIONS( - keywords.begin(), keywords.end(), - kw_names.begin(), kw_names.end() ); - - BOOST_CHECK_EQUAL_COLLECTIONS( - wells.begin(), wells.end(), - well_names.begin(), well_names.end() ); -} - -static const auto ALL_keywords = { - "FAQR", "FAQRG", "FAQT", "FAQTG", "FGIP", "FGIPG", "FGIPL", - "FGIR", "FGIT", "FGOR", "FGPR", "FGPT", "FOIP", "FOIPG", - "FOIPL", "FOIR", "FOIT", "FOPR", "FOPT", "FPR", "FVIR", - "FVIT", "FVPR", "FVPT", "FWCT", "FWGR", "FWIP", "FWIR", - "FWIT", "FWPR", "FWPT", - "GGIR", "GGIT", "GGOR", "GGPR", "GGPT", "GOIR", "GOIT", - "GOPR", "GOPT", "GVIR", "GVIT", "GVPR", "GVPT", "GWCT", - "GWGR", "GWIR", "GWIT", "GWPR", "GWPT", - "WBHP", "WGIR", "WGIT", "WGOR", "WGPR", "WGPT", "WOIR", - "WOIT", "WOPR", "WOPT", "WPI", "WTHP", "WVIR", "WVIT", - "WVPR", "WVPT", "WWCT", "WWGR", "WWIR", "WWIT", "WWPR", - "WWPT", - // ALL will not expand to these keywords yet - "AAQR", "AAQRG", "AAQT", "AAQTG" -}; - - -BOOST_AUTO_TEST_CASE(summary_ALL) { - - const auto input = "ALL\n"; - - const auto summary = createSummary( input ); - const auto key_names = sorted_key_names( summary ); - - std::vector all; - - for( std::string keyword: ALL_keywords ) { - if(keyword[0]=='F') { - all.push_back(keyword); - } - else if (keyword[0]=='G') { - auto kn = keyword + ":"; - all.push_back(kn + "G"); - all.push_back(kn + "OP"); - } - else if (keyword[0]=='W') { - auto kn = keyword + ":"; - all.push_back(kn + "W_1"); - all.push_back(kn + "WX2"); - all.push_back(kn + "W_3"); - all.push_back(kn + "PRODUCER"); - } - } - - std::sort(all.begin(), all.end()); - - BOOST_CHECK_EQUAL_COLLECTIONS( - all.begin(), all.end(), - key_names.begin(), key_names.end()); - - BOOST_CHECK_EQUAL( true , summary.hasKeyword( "FOPT")); - BOOST_CHECK_EQUAL( true , summary.hasKeyword( "GGIT")); - BOOST_CHECK_EQUAL( true , summary.hasKeyword( "WWCT")); - - BOOST_CHECK_EQUAL( false, summary.hasKeyword( "WOPP")); - BOOST_CHECK_EQUAL( false, summary.hasKeyword( "FOPP")); - - BOOST_CHECK_EQUAL( false , summary.hasKeyword("NO-NOT-THIS")); -} - - - -BOOST_AUTO_TEST_CASE(INVALID_WELL1) { - ParseContext parseContext; - const auto input = "CWIR\n" - "NEW-WELL /\n" - "/\n"; - parseContext.updateKey( ParseContext::SUMMARY_UNKNOWN_WELL , InputError::THROW_EXCEPTION ); - BOOST_CHECK_THROW( createSummary( input , parseContext ) , std::invalid_argument); - - parseContext.updateKey( ParseContext::SUMMARY_UNKNOWN_WELL , InputError::IGNORE ); - BOOST_CHECK_NO_THROW( createSummary( input , parseContext )); -} - - -BOOST_AUTO_TEST_CASE(INVALID_WELL2) { - ParseContext parseContext; - const auto input = "WWCT\n" - " NEW-WELL /\n"; - parseContext.updateKey( ParseContext::SUMMARY_UNKNOWN_WELL , InputError::THROW_EXCEPTION ); - BOOST_CHECK_THROW( createSummary( input , parseContext ) , std::invalid_argument); - - parseContext.updateKey( ParseContext::SUMMARY_UNKNOWN_WELL , InputError::IGNORE ); - BOOST_CHECK_NO_THROW( createSummary( input , parseContext )); -} - -BOOST_AUTO_TEST_CASE(UNDEFINED_UDQ_WELL) { - ParseContext parseContext; - const auto input = "WUWCT\n" - "/\n"; - parseContext.updateKey( ParseContext::SUMMARY_UNDEFINED_UDQ, InputError::THROW_EXCEPTION ); - BOOST_CHECK_THROW( createSummary( input , parseContext ) , std::invalid_argument); - - parseContext.updateKey( ParseContext::SUMMARY_UNDEFINED_UDQ, InputError::IGNORE ); - BOOST_CHECK_NO_THROW( createSummary( input , parseContext )); -} - - - - -BOOST_AUTO_TEST_CASE(INVALID_GROUP) { - ParseContext parseContext; - const auto input = "GWCT\n" - " NEW-GR /\n"; - parseContext.updateKey( ParseContext::SUMMARY_UNKNOWN_GROUP , InputError::THROW_EXCEPTION ); - BOOST_CHECK_THROW( createSummary( input , parseContext ) , std::invalid_argument); - - parseContext.updateKey( ParseContext::SUMMARY_UNKNOWN_GROUP , InputError::IGNORE ); - BOOST_CHECK_NO_THROW( createSummary( input , parseContext )); -} - -BOOST_AUTO_TEST_CASE( REMOVE_DUPLICATED_ENTRIES ) { - ParseContext parseContext; - const auto input = "WGPR \n/\n" - "WGPR \n/\n" - "ALL\n"; - - const auto summary = createSummary( input ); - const auto keys = sorted_key_names( summary ); - auto uniq_keys = keys; - uniq_keys.erase( std::unique( uniq_keys.begin(), - uniq_keys.end(), - std::equal_to< std::string >() ), - uniq_keys.end() ); - - BOOST_CHECK_EQUAL_COLLECTIONS( - keys.begin(), keys.end(), - uniq_keys.begin(), uniq_keys.end() ); -} - -BOOST_AUTO_TEST_CASE( ANALYTICAL_AQUIFERS ) { - const std::string input = R"( - AAQR - 1 2 / - AAQP - 2 1 / - AAQT - / - AAQRG - / - AAQTG - / - AAQTD - / - AAQPD - / - )"; - const auto summary = createSummary( input ); -} - -BOOST_AUTO_TEST_CASE( NUMERICAL_AQUIFERS ) { - const std::string input = R"( - ANQR - 1 2 / - ANQP - 2 1 / - ANQT - / - )"; - const auto summary = createSummary( input ); -} - -static const auto GMWSET_keywords = { - "GMCTG", "GMWPT", "GMWPR", "GMWPA", "GMWPU", "GMWPG", "GMWPO", "GMWPS", - "GMWPV", "GMWPP", "GMWPL", "GMWIT", "GMWIN", "GMWIA", "GMWIU", "GMWIG", - "GMWIS", "GMWIV", "GMWIP", "GMWDR", "GMWDT", "GMWWO", "GMWWT" -}; - -BOOST_AUTO_TEST_CASE( summary_GMWSET ) { - - const auto input = "GMWSET\n"; - const auto summary = createSummary( input ); - const auto key_names = sorted_key_names( summary ); - - std::vector< std::string > all; - - for( std::string kw : GMWSET_keywords ) { - all.emplace_back(kw + ":G"); - all.emplace_back(kw + ":OP"); - } - - std::sort( all.begin(), all.end() ); - - BOOST_CHECK_EQUAL_COLLECTIONS( all.begin(), all.end(), - key_names.begin(), key_names.end() ); - - BOOST_CHECK( summary.hasKeyword( "GMWPS" ) ); - BOOST_CHECK( summary.hasKeyword( "GMWPT" ) ); - BOOST_CHECK( summary.hasKeyword( "GMWPR" ) ); - - BOOST_CHECK( !summary.hasKeyword("NO-NOT-THIS") ); -} - -static const auto FMWSET_keywords = { - "FMCTF", "FMWPT", "FMWPR", "FMWPA", "FMWPU", "FMWPF", "FMWPO", "FMWPS", - "FMWPV", "FMWPP", "FMWPL", "FMWIT", "FMWIN", "FMWIA", "FMWIU", "FMWIF", - "FMWIS", "FMWIV", "FMWIP", "FMWDR", "FMWDT", "FMWWO", "FMWWT" -}; - -BOOST_AUTO_TEST_CASE( summary_FMWSET ) { - - const auto input = "FMWSET\n"; - const auto summary = createSummary( input ); - const auto key_names = sorted_key_names( summary ); - - std::vector< std::string > all( FMWSET_keywords.begin(), - FMWSET_keywords.end() ); - std::sort( all.begin(), all.end() ); - - BOOST_CHECK_EQUAL_COLLECTIONS( all.begin(), all.end(), - key_names.begin(), key_names.end() ); - - BOOST_CHECK( summary.hasKeyword( "FMWPS" ) ); - BOOST_CHECK( summary.hasKeyword( "FMWPT" ) ); - BOOST_CHECK( summary.hasKeyword( "FMWPR" ) ); - - BOOST_CHECK( !summary.hasKeyword("NO-NOT-THIS") ); -} - - - -BOOST_AUTO_TEST_CASE( WOPRL ) { - const std::string input = R"( -WOPRL - 'W_1' 1 / - 'WX2' 2 / - 'W_3' 3 / -/ -)"; - - ParseContext parseContext; - parseContext.update(ParseContext::SUMMARY_UNHANDLED_KEYWORD, InputError::THROW_EXCEPTION); - BOOST_CHECK_THROW(createSummary( input, parseContext ), std::invalid_argument); - parseContext.update(ParseContext::SUMMARY_UNHANDLED_KEYWORD, InputError::IGNORE); - BOOST_CHECK_NO_THROW( createSummary(input, parseContext )); -} - - -BOOST_AUTO_TEST_CASE( summary_require3DField ) { - { - const auto input = "WWCT\n/\n"; - const auto summary = createSummary( input ); - - BOOST_CHECK( !summary.require3DField( "NO-NOT-THIS")); - - BOOST_CHECK( !summary.require3DField( "PRESSURE")); - BOOST_CHECK( !summary.require3DField( "OIP")); - BOOST_CHECK( !summary.require3DField( "GIP")); - BOOST_CHECK( !summary.require3DField( "WIP")); - BOOST_CHECK( !summary.require3DField( "OIPL")); - BOOST_CHECK( !summary.require3DField( "OIPG")); - BOOST_CHECK( !summary.require3DField( "GIPL")); - BOOST_CHECK( !summary.require3DField( "GIPG")); - BOOST_CHECK( !summary.require3DField( "SWAT")); - BOOST_CHECK( !summary.require3DField( "SGAS")); - } - - { - const auto input = "BPR\n" - "3 3 6 /\n" - "4 3 6 /\n" - "/"; - - const auto summary = createSummary( input ); - BOOST_CHECK( summary.require3DField( "PRESSURE")); - BOOST_CHECK( !summary.requireFIPNUM( )); - } - - - { - const auto input = "FPR\n"; - const auto summary = createSummary( input ); - BOOST_CHECK( summary.require3DField( "PRESSURE")); - } - - - { - const auto input = "BSWAT\n" - "3 3 6 /\n" - "4 3 6 /\n" - "/"; - - const auto summary = createSummary( input ); - BOOST_CHECK( summary.require3DField( "SWAT")); - } - - { - const auto input = "BSGAS\n" - "3 3 6 /\n" // 523 - "4 3 6 /\n" // 524 - "/"; - - const auto summary = createSummary( input ); - BOOST_CHECK( summary.require3DField( "SGAS")); - BOOST_CHECK( summary.hasSummaryKey( "BSGAS:523" ) ); - } - - - { - const auto input = "RPR\n/\n"; - const auto summary = createSummary( input ); - BOOST_CHECK( summary.require3DField( "PRESSURE")); - BOOST_CHECK( summary.requireFIPNUM( )); - BOOST_CHECK( summary.hasKeyword( "RPR" ) ); - BOOST_CHECK( summary.hasSummaryKey( "RPR:1" ) ); - BOOST_CHECK( summary.hasSummaryKey( "RPR:3" ) ); - BOOST_CHECK( !summary.hasSummaryKey( "RPR:4" ) ); - } - - - { - const auto input = "RPR\n 10 /\n"; - BOOST_CHECK_THROW( createSummary( input ) , std::invalid_argument ); - } - - - - { - const auto input = "RGIPL\n/\n"; - const auto summary = createSummary( input ); - BOOST_CHECK( summary.require3DField( "GIPL")); - BOOST_CHECK( summary.requireFIPNUM( )); - } -} - - -BOOST_AUTO_TEST_CASE( SUMMARY_MISC) { - { - const auto summary = createSummary( "TCPU\n" ); - BOOST_CHECK( summary.hasKeyword( "TCPU" ) ); - } - - { - const auto summary = createSummary( "PERFORMA\n" ); - BOOST_CHECK( summary.hasKeyword( "ELAPSED" ) ); - BOOST_CHECK( !summary.hasKeyword("PERFORMA")); - } -} - -BOOST_AUTO_TEST_CASE(Summary_Segment) -{ - auto python = std::make_shared(); - const auto input = std::string { "SOFR_TEST.DATA" }; - const auto deck = Parser{}.parseFile(input); - const auto state = EclipseState { deck }; - - const auto schedule = Schedule { deck, state, python}; - const auto summary = SummaryConfig { - deck, schedule, state.getTableManager() - }; - - // SOFR PROD01 segments 1, 10, 21. - BOOST_CHECK(deck.hasKeyword("SOFR")); - BOOST_CHECK(summary.hasKeyword("SOFR")); - BOOST_CHECK(summary.hasSummaryKey("SOFR:PROD01:1")); - BOOST_CHECK(!summary.hasSummaryKey("SOFR:PROD01:2")); - BOOST_CHECK(!summary.hasSummaryKey("SOFR:PROD01:3")); - BOOST_CHECK(!summary.hasSummaryKey("SOFR:PROD01:4")); - BOOST_CHECK(!summary.hasSummaryKey("SOFR:PROD01:5")); - BOOST_CHECK(!summary.hasSummaryKey("SOFR:PROD01:6")); - BOOST_CHECK(!summary.hasSummaryKey("SOFR:PROD01:7")); - BOOST_CHECK(!summary.hasSummaryKey("SOFR:PROD01:8")); - BOOST_CHECK(!summary.hasSummaryKey("SOFR:PROD01:9")); - BOOST_CHECK(summary.hasSummaryKey("SOFR:PROD01:10")); - BOOST_CHECK(!summary.hasSummaryKey("SOFR:PROD01:11")); - BOOST_CHECK(!summary.hasSummaryKey("SOFR:PROD01:12")); - BOOST_CHECK(!summary.hasSummaryKey("SOFR:PROD01:13")); - BOOST_CHECK(!summary.hasSummaryKey("SOFR:PROD01:14")); - BOOST_CHECK(!summary.hasSummaryKey("SOFR:PROD01:15")); - BOOST_CHECK(!summary.hasSummaryKey("SOFR:PROD01:16")); - BOOST_CHECK(!summary.hasSummaryKey("SOFR:PROD01:17")); - BOOST_CHECK(!summary.hasSummaryKey("SOFR:PROD01:18")); - BOOST_CHECK(!summary.hasSummaryKey("SOFR:PROD01:19")); - BOOST_CHECK(!summary.hasSummaryKey("SOFR:PROD01:20")); - BOOST_CHECK(summary.hasSummaryKey("SOFR:PROD01:21")); - BOOST_CHECK(!summary.hasSummaryKey("SOFR:PROD01:22")); - BOOST_CHECK(!summary.hasSummaryKey("SOFR:PROD01:23")); - BOOST_CHECK(!summary.hasSummaryKey("SOFR:PROD01:24")); - BOOST_CHECK(!summary.hasSummaryKey("SOFR:PROD01:25")); - BOOST_CHECK(!summary.hasSummaryKey("SOFR:PROD01:26")); - BOOST_CHECK(!summary.hasSummaryKey("SOFR:PROD01:27")); - - BOOST_CHECK(!summary.hasSummaryKey("SOFR:INJE01:1")); - - { - auto sofr = std::find_if(summary.begin(), summary.end(), - [](const SummaryConfigNode& node) - { - return node.keyword() == "SOFR"; - }); - - BOOST_REQUIRE(sofr != summary.end()); - - BOOST_CHECK_MESSAGE(sofr->category() == SummaryConfigNode::Category::Segment, - R"("SOFR" keyword category must be "Segment")" - ); - BOOST_CHECK_EQUAL(sofr->namedEntity(), "PROD01"); - } - - BOOST_CHECK(deck.hasKeyword("SGFR")); - BOOST_CHECK(summary.hasKeyword("SGFR")); - BOOST_CHECK(summary.hasSummaryKey("SGFR:PROD01:1")); - BOOST_CHECK(summary.hasSummaryKey("SGFR:PROD01:2")); - BOOST_CHECK(summary.hasSummaryKey("SGFR:PROD01:3")); - BOOST_CHECK(summary.hasSummaryKey("SGFR:PROD01:4")); - BOOST_CHECK(summary.hasSummaryKey("SGFR:PROD01:5")); - BOOST_CHECK(summary.hasSummaryKey("SGFR:PROD01:6")); - BOOST_CHECK(summary.hasSummaryKey("SGFR:PROD01:7")); - BOOST_CHECK(summary.hasSummaryKey("SGFR:PROD01:8")); - BOOST_CHECK(summary.hasSummaryKey("SGFR:PROD01:9")); - BOOST_CHECK(summary.hasSummaryKey("SGFR:PROD01:10")); - BOOST_CHECK(summary.hasSummaryKey("SGFR:PROD01:11")); - BOOST_CHECK(summary.hasSummaryKey("SGFR:PROD01:12")); - BOOST_CHECK(summary.hasSummaryKey("SGFR:PROD01:13")); - BOOST_CHECK(summary.hasSummaryKey("SGFR:PROD01:14")); - BOOST_CHECK(summary.hasSummaryKey("SGFR:PROD01:15")); - BOOST_CHECK(summary.hasSummaryKey("SGFR:PROD01:16")); - BOOST_CHECK(summary.hasSummaryKey("SGFR:PROD01:17")); - BOOST_CHECK(summary.hasSummaryKey("SGFR:PROD01:18")); - BOOST_CHECK(summary.hasSummaryKey("SGFR:PROD01:19")); - BOOST_CHECK(summary.hasSummaryKey("SGFR:PROD01:20")); - BOOST_CHECK(summary.hasSummaryKey("SGFR:PROD01:21")); - BOOST_CHECK(summary.hasSummaryKey("SGFR:PROD01:22")); - BOOST_CHECK(summary.hasSummaryKey("SGFR:PROD01:23")); - BOOST_CHECK(summary.hasSummaryKey("SGFR:PROD01:24")); - BOOST_CHECK(summary.hasSummaryKey("SGFR:PROD01:25")); - BOOST_CHECK(summary.hasSummaryKey("SGFR:PROD01:26")); - BOOST_CHECK(!summary.hasSummaryKey("SGFR:PROD01:27")); // No such segment. - - // SPR PROD01 segment 10 only. - BOOST_CHECK(deck.hasKeyword("SPR")); - BOOST_CHECK(summary.hasKeyword("SPR")); - BOOST_CHECK(!summary.hasSummaryKey("SPR:PROD01:1")); - BOOST_CHECK(!summary.hasSummaryKey("SPR:PROD01:2")); - BOOST_CHECK(!summary.hasSummaryKey("SPR:PROD01:3")); - BOOST_CHECK(!summary.hasSummaryKey("SPR:PROD01:4")); - BOOST_CHECK(!summary.hasSummaryKey("SPR:PROD01:5")); - BOOST_CHECK(!summary.hasSummaryKey("SPR:PROD01:6")); - BOOST_CHECK(!summary.hasSummaryKey("SPR:PROD01:7")); - BOOST_CHECK(!summary.hasSummaryKey("SPR:PROD01:8")); - BOOST_CHECK(!summary.hasSummaryKey("SPR:PROD01:9")); - BOOST_CHECK(summary.hasSummaryKey("SPR:PROD01:10")); - BOOST_CHECK(!summary.hasSummaryKey("SPR:PROD01:11")); - BOOST_CHECK(!summary.hasSummaryKey("SPR:PROD01:12")); - BOOST_CHECK(!summary.hasSummaryKey("SPR:PROD01:13")); - BOOST_CHECK(!summary.hasSummaryKey("SPR:PROD01:14")); - BOOST_CHECK(!summary.hasSummaryKey("SPR:PROD01:15")); - BOOST_CHECK(!summary.hasSummaryKey("SPR:PROD01:16")); - BOOST_CHECK(!summary.hasSummaryKey("SPR:PROD01:17")); - BOOST_CHECK(!summary.hasSummaryKey("SPR:PROD01:18")); - BOOST_CHECK(!summary.hasSummaryKey("SPR:PROD01:19")); - BOOST_CHECK(!summary.hasSummaryKey("SPR:PROD01:20")); - BOOST_CHECK(!summary.hasSummaryKey("SPR:PROD01:21")); - BOOST_CHECK(!summary.hasSummaryKey("SPR:PROD01:22")); - BOOST_CHECK(!summary.hasSummaryKey("SPR:PROD01:23")); - BOOST_CHECK(!summary.hasSummaryKey("SPR:PROD01:24")); - BOOST_CHECK(!summary.hasSummaryKey("SPR:PROD01:25")); - BOOST_CHECK(!summary.hasSummaryKey("SPR:PROD01:26")); - - BOOST_CHECK(!summary.hasSummaryKey("SPR:INJE01:10")); - - // SWFR for all segments in all MS wells. - BOOST_CHECK(deck.hasKeyword("SWFR")); - BOOST_CHECK(summary.hasKeyword("SWFR")); - BOOST_CHECK(summary.hasSummaryKey("SWFR:PROD01:1")); - BOOST_CHECK(summary.hasSummaryKey("SWFR:PROD01:2")); - BOOST_CHECK(summary.hasSummaryKey("SWFR:PROD01:3")); - BOOST_CHECK(summary.hasSummaryKey("SWFR:PROD01:4")); - BOOST_CHECK(summary.hasSummaryKey("SWFR:PROD01:5")); - BOOST_CHECK(summary.hasSummaryKey("SWFR:PROD01:6")); - BOOST_CHECK(summary.hasSummaryKey("SWFR:PROD01:7")); - BOOST_CHECK(summary.hasSummaryKey("SWFR:PROD01:8")); - BOOST_CHECK(summary.hasSummaryKey("SWFR:PROD01:9")); - BOOST_CHECK(summary.hasSummaryKey("SWFR:PROD01:10")); - BOOST_CHECK(summary.hasSummaryKey("SWFR:PROD01:11")); - BOOST_CHECK(summary.hasSummaryKey("SWFR:PROD01:12")); - BOOST_CHECK(summary.hasSummaryKey("SWFR:PROD01:13")); - BOOST_CHECK(summary.hasSummaryKey("SWFR:PROD01:14")); - BOOST_CHECK(summary.hasSummaryKey("SWFR:PROD01:15")); - BOOST_CHECK(summary.hasSummaryKey("SWFR:PROD01:16")); - BOOST_CHECK(summary.hasSummaryKey("SWFR:PROD01:17")); - BOOST_CHECK(summary.hasSummaryKey("SWFR:PROD01:18")); - BOOST_CHECK(summary.hasSummaryKey("SWFR:PROD01:19")); - BOOST_CHECK(summary.hasSummaryKey("SWFR:PROD01:20")); - BOOST_CHECK(summary.hasSummaryKey("SWFR:PROD01:21")); - BOOST_CHECK(summary.hasSummaryKey("SWFR:PROD01:22")); - BOOST_CHECK(summary.hasSummaryKey("SWFR:PROD01:23")); - BOOST_CHECK(summary.hasSummaryKey("SWFR:PROD01:24")); - BOOST_CHECK(summary.hasSummaryKey("SWFR:PROD01:25")); - BOOST_CHECK(summary.hasSummaryKey("SWFR:PROD01:26")); - - BOOST_CHECK(!summary.hasSummaryKey("SWFR:INJE01:1")); - - // SPRD for all segments in all MS wells. - BOOST_CHECK(deck.hasKeyword("SPRD")); - BOOST_CHECK(summary.hasKeyword("SPRD")); - BOOST_CHECK(summary.hasSummaryKey("SPRD:PROD01:1")); - BOOST_CHECK(summary.hasSummaryKey("SPRD:PROD01:2")); - BOOST_CHECK(summary.hasSummaryKey("SPRD:PROD01:3")); - BOOST_CHECK(summary.hasSummaryKey("SPRD:PROD01:4")); - BOOST_CHECK(summary.hasSummaryKey("SPRD:PROD01:5")); - BOOST_CHECK(summary.hasSummaryKey("SPRD:PROD01:6")); - BOOST_CHECK(summary.hasSummaryKey("SPRD:PROD01:7")); - BOOST_CHECK(summary.hasSummaryKey("SPRD:PROD01:8")); - BOOST_CHECK(summary.hasSummaryKey("SPRD:PROD01:9")); - BOOST_CHECK(summary.hasSummaryKey("SPRD:PROD01:10")); - BOOST_CHECK(summary.hasSummaryKey("SPRD:PROD01:11")); - BOOST_CHECK(summary.hasSummaryKey("SPRD:PROD01:12")); - BOOST_CHECK(summary.hasSummaryKey("SPRD:PROD01:13")); - BOOST_CHECK(summary.hasSummaryKey("SPRD:PROD01:14")); - BOOST_CHECK(summary.hasSummaryKey("SPRD:PROD01:15")); - BOOST_CHECK(summary.hasSummaryKey("SPRD:PROD01:16")); - BOOST_CHECK(summary.hasSummaryKey("SPRD:PROD01:17")); - BOOST_CHECK(summary.hasSummaryKey("SPRD:PROD01:18")); - BOOST_CHECK(summary.hasSummaryKey("SPRD:PROD01:19")); - BOOST_CHECK(summary.hasSummaryKey("SPRD:PROD01:20")); - BOOST_CHECK(summary.hasSummaryKey("SPRD:PROD01:21")); - BOOST_CHECK(summary.hasSummaryKey("SPRD:PROD01:22")); - BOOST_CHECK(summary.hasSummaryKey("SPRD:PROD01:23")); - BOOST_CHECK(summary.hasSummaryKey("SPRD:PROD01:24")); - BOOST_CHECK(summary.hasSummaryKey("SPRD:PROD01:25")); - BOOST_CHECK(summary.hasSummaryKey("SPRD:PROD01:26")); - - BOOST_CHECK(!summary.hasSummaryKey("SPRD:INJE01:1")); - - // SPRDH for all segments of MS well PROD01. - BOOST_CHECK(deck.hasKeyword("SPRDH")); - BOOST_CHECK(summary.hasKeyword("SPRDH")); - BOOST_CHECK(summary.hasSummaryKey("SPRDH:PROD01:1")); - BOOST_CHECK(summary.hasSummaryKey("SPRDH:PROD01:2")); - BOOST_CHECK(summary.hasSummaryKey("SPRDH:PROD01:3")); - BOOST_CHECK(summary.hasSummaryKey("SPRDH:PROD01:4")); - BOOST_CHECK(summary.hasSummaryKey("SPRDH:PROD01:5")); - BOOST_CHECK(summary.hasSummaryKey("SPRDH:PROD01:6")); - BOOST_CHECK(summary.hasSummaryKey("SPRDH:PROD01:7")); - BOOST_CHECK(summary.hasSummaryKey("SPRDH:PROD01:8")); - BOOST_CHECK(summary.hasSummaryKey("SPRDH:PROD01:9")); - BOOST_CHECK(summary.hasSummaryKey("SPRDH:PROD01:10")); - BOOST_CHECK(summary.hasSummaryKey("SPRDH:PROD01:11")); - BOOST_CHECK(summary.hasSummaryKey("SPRDH:PROD01:12")); - BOOST_CHECK(summary.hasSummaryKey("SPRDH:PROD01:13")); - BOOST_CHECK(summary.hasSummaryKey("SPRDH:PROD01:14")); - BOOST_CHECK(summary.hasSummaryKey("SPRDH:PROD01:15")); - BOOST_CHECK(summary.hasSummaryKey("SPRDH:PROD01:16")); - BOOST_CHECK(summary.hasSummaryKey("SPRDH:PROD01:17")); - BOOST_CHECK(summary.hasSummaryKey("SPRDH:PROD01:18")); - BOOST_CHECK(summary.hasSummaryKey("SPRDH:PROD01:19")); - BOOST_CHECK(summary.hasSummaryKey("SPRDH:PROD01:20")); - BOOST_CHECK(summary.hasSummaryKey("SPRDH:PROD01:21")); - BOOST_CHECK(summary.hasSummaryKey("SPRDH:PROD01:22")); - BOOST_CHECK(summary.hasSummaryKey("SPRDH:PROD01:23")); - BOOST_CHECK(summary.hasSummaryKey("SPRDH:PROD01:24")); - BOOST_CHECK(summary.hasSummaryKey("SPRDH:PROD01:25")); - BOOST_CHECK(summary.hasSummaryKey("SPRDH:PROD01:26")); - - BOOST_CHECK(!summary.hasSummaryKey("SPRDH:INJE01:1")); - - // SPRDF for segments 10 and 16 of MS well PROD01. - BOOST_CHECK(deck.hasKeyword("SPRDF")); - BOOST_CHECK(summary.hasKeyword("SPRDF")); - BOOST_CHECK(!summary.hasSummaryKey("SPRDF:PROD01:1")); - BOOST_CHECK(!summary.hasSummaryKey("SPRDF:PROD01:2")); - BOOST_CHECK(!summary.hasSummaryKey("SPRDF:PROD01:3")); - BOOST_CHECK(!summary.hasSummaryKey("SPRDF:PROD01:4")); - BOOST_CHECK(!summary.hasSummaryKey("SPRDF:PROD01:5")); - BOOST_CHECK(!summary.hasSummaryKey("SPRDF:PROD01:6")); - BOOST_CHECK(!summary.hasSummaryKey("SPRDF:PROD01:7")); - BOOST_CHECK(!summary.hasSummaryKey("SPRDF:PROD01:8")); - BOOST_CHECK(!summary.hasSummaryKey("SPRDF:PROD01:9")); - BOOST_CHECK(summary.hasSummaryKey("SPRDF:PROD01:10")); - BOOST_CHECK(!summary.hasSummaryKey("SPRDF:PROD01:11")); - BOOST_CHECK(!summary.hasSummaryKey("SPRDF:PROD01:12")); - BOOST_CHECK(!summary.hasSummaryKey("SPRDF:PROD01:13")); - BOOST_CHECK(!summary.hasSummaryKey("SPRDF:PROD01:14")); - BOOST_CHECK(!summary.hasSummaryKey("SPRDF:PROD01:15")); - BOOST_CHECK(summary.hasSummaryKey("SPRDF:PROD01:16")); - BOOST_CHECK(!summary.hasSummaryKey("SPRDF:PROD01:17")); - BOOST_CHECK(!summary.hasSummaryKey("SPRDF:PROD01:18")); - BOOST_CHECK(!summary.hasSummaryKey("SPRDF:PROD01:19")); - BOOST_CHECK(!summary.hasSummaryKey("SPRDF:PROD01:20")); - BOOST_CHECK(!summary.hasSummaryKey("SPRDF:PROD01:21")); - BOOST_CHECK(!summary.hasSummaryKey("SPRDF:PROD01:22")); - BOOST_CHECK(!summary.hasSummaryKey("SPRDF:PROD01:23")); - BOOST_CHECK(!summary.hasSummaryKey("SPRDF:PROD01:24")); - BOOST_CHECK(!summary.hasSummaryKey("SPRDF:PROD01:25")); - BOOST_CHECK(!summary.hasSummaryKey("SPRDF:PROD01:26")); - - BOOST_CHECK(!summary.hasSummaryKey("SPRDF:INJE01:1")); - - // SPRDA for segments 10 and 16 of all MS wells - BOOST_CHECK(deck.hasKeyword("SPRDA")); - BOOST_CHECK(summary.hasKeyword("SPRDA")); - BOOST_CHECK(!summary.hasSummaryKey("SPRDA:PROD01:1")); - BOOST_CHECK(!summary.hasSummaryKey("SPRDA:PROD01:2")); - BOOST_CHECK(!summary.hasSummaryKey("SPRDA:PROD01:3")); - BOOST_CHECK(!summary.hasSummaryKey("SPRDA:PROD01:4")); - BOOST_CHECK(!summary.hasSummaryKey("SPRDA:PROD01:5")); - BOOST_CHECK(!summary.hasSummaryKey("SPRDA:PROD01:6")); - BOOST_CHECK(!summary.hasSummaryKey("SPRDA:PROD01:7")); - BOOST_CHECK(!summary.hasSummaryKey("SPRDA:PROD01:8")); - BOOST_CHECK(!summary.hasSummaryKey("SPRDA:PROD01:9")); - BOOST_CHECK(summary.hasSummaryKey("SPRDA:PROD01:10")); - BOOST_CHECK(!summary.hasSummaryKey("SPRDA:PROD01:11")); - BOOST_CHECK(!summary.hasSummaryKey("SPRDA:PROD01:12")); - BOOST_CHECK(!summary.hasSummaryKey("SPRDA:PROD01:13")); - BOOST_CHECK(!summary.hasSummaryKey("SPRDA:PROD01:14")); - BOOST_CHECK(!summary.hasSummaryKey("SPRDA:PROD01:15")); - BOOST_CHECK(summary.hasSummaryKey("SPRDA:PROD01:16")); - BOOST_CHECK(!summary.hasSummaryKey("SPRDA:PROD01:17")); - BOOST_CHECK(!summary.hasSummaryKey("SPRDA:PROD01:18")); - BOOST_CHECK(!summary.hasSummaryKey("SPRDA:PROD01:19")); - BOOST_CHECK(!summary.hasSummaryKey("SPRDA:PROD01:20")); - BOOST_CHECK(!summary.hasSummaryKey("SPRDA:PROD01:21")); - BOOST_CHECK(!summary.hasSummaryKey("SPRDA:PROD01:22")); - BOOST_CHECK(!summary.hasSummaryKey("SPRDA:PROD01:23")); - BOOST_CHECK(!summary.hasSummaryKey("SPRDA:PROD01:24")); - BOOST_CHECK(!summary.hasSummaryKey("SPRDA:PROD01:25")); - BOOST_CHECK(!summary.hasSummaryKey("SPRDA:PROD01:26")); - - BOOST_CHECK(!summary.hasSummaryKey("SPRDA:INJE01:1")); - BOOST_CHECK(!summary.hasSummaryKey("SPRDA:INJE01:10")); - BOOST_CHECK(!summary.hasSummaryKey("SPRDA:INJE01:16")); -} - -BOOST_AUTO_TEST_CASE(ProcessingInstructions) { - const std::string deck_string = R"( -RPTONLY -RUNSUM -NARROW -SEPARATE -)"; - - const auto& summary_config = createSummary(deck_string); - - BOOST_CHECK(!summary_config.hasKeyword("NARROW")); - BOOST_CHECK(!summary_config.hasKeyword("RPTONLY")); - BOOST_CHECK(!summary_config.hasKeyword("RUNSUM")); - BOOST_CHECK(!summary_config.hasKeyword("SEPARATE")); - BOOST_CHECK(!summary_config.hasKeyword("SUMMARY")); -} - - -BOOST_AUTO_TEST_CASE(EnableRSM) { - std::string deck_string1 = ""; - std::string deck_string2 = R"( -RUNSUM -)"; - const auto& summary_config1 = createSummary(deck_string1); - const auto& summary_config2 = createSummary(deck_string2); - - BOOST_CHECK(!summary_config1.createRunSummary()); - BOOST_CHECK(!summary_config1.hasKeyword("RUNSUM")); - - BOOST_CHECK( summary_config2.createRunSummary()); - BOOST_CHECK(!summary_config2.hasKeyword("RUNSUM")); -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/TabdimsTests.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/TabdimsTests.cpp deleted file mode 100644 index 1a0c022402..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/TabdimsTests.cpp +++ /dev/null @@ -1,28 +0,0 @@ -/* - Copyright (C) 2015 Statoil ASA - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ -#define BOOST_TEST_MODULE TABDIMS_TESTS -#include - -#include - -BOOST_AUTO_TEST_CASE(TEST_CREATE) { - Opm::Tabdims tabdims; - - BOOST_CHECK_EQUAL( tabdims.getNumSatNodes() , 20U ); -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/TableColumnTests.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/TableColumnTests.cpp deleted file mode 100644 index e37f74758f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/TableColumnTests.cpp +++ /dev/null @@ -1,324 +0,0 @@ -/* - Copyright (C) 2015 by Statoil ASA - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#define BOOST_TEST_MODULE TableColumnTests - -#include - - -#include -#include -#include - -using namespace Opm; - - -BOOST_AUTO_TEST_CASE( CreateTest ) { - ColumnSchema schema("COLUMN" , Table::STRICTLY_INCREASING , Table::DEFAULT_LINEAR ); - TableColumn column( schema ); - BOOST_CHECK_EQUAL( column.size() , 0 ); - - column.addValue( 0 ); - column.addValue( 1 ); - column.addValue( 2 ); - - BOOST_CHECK_EQUAL( column.size() , 3 ); - - BOOST_CHECK_EQUAL( column[0] , 0 ); - BOOST_CHECK_EQUAL( column[1] , 1 ); - BOOST_CHECK_EQUAL( column[2] , 2 ); - - BOOST_CHECK_THROW( column[3] , std::invalid_argument ); - - { - std::vector cp(column.size()); - std::copy( column.begin() , column.end() , cp.begin()); - - for (size_t i = 0; i < column.size(); i++) - BOOST_CHECK_EQUAL( column[i] , cp[i] ); - } -} - - - -BOOST_AUTO_TEST_CASE( TestDefault ) { - ColumnSchema schema("COLUMN" , Table::STRICTLY_INCREASING , Table::DEFAULT_LINEAR ); - TableColumn column( schema ); - - - column.addDefault( ); - column.addDefault( ); - column.addDefault( ); - BOOST_CHECK_EQUAL( column.size() , 3 ); - BOOST_CHECK_THROW( column[0] , std::invalid_argument ); - - column.updateValue(0 , 10); - BOOST_CHECK_EQUAL( column[0] , 10 ); - BOOST_CHECK( column.hasDefault( ) ); -} - - -BOOST_AUTO_TEST_CASE( TestAscending ) { - ColumnSchema schema("COLUMN" , Table::STRICTLY_INCREASING , Table::DEFAULT_LINEAR); - TableColumn column( schema ); - - BOOST_CHECK_EQUAL( column.size() , 0 ); - - column.addValue( 10 ); - BOOST_CHECK_THROW( column.addValue( 9 ) , std::invalid_argument ); - column.addDefault( ); - BOOST_CHECK( column.hasDefault( ) ); - BOOST_CHECK_THROW( column.updateValue( 1, 9 ) , std::invalid_argument ); - column.addValue( 12 ); - BOOST_CHECK_THROW( column.updateValue( 1, 13 ) , std::invalid_argument ); - column.updateValue( 1, 11 ); - - column.addDefault( ); - column.addDefault( ); - column.addDefault( ); - column.addValue(16); - - column.updateValue( 3,13 ); - column.updateValue( 4,14 ); - column.updateValue( 5,15 ); - BOOST_CHECK( !column.hasDefault( ) ); -} - - -BOOST_AUTO_TEST_CASE( TestWeaklyAscending ) { - ColumnSchema schema("COLUMN" , Table::INCREASING , Table::DEFAULT_LINEAR); - TableColumn column( schema ); - - column.addValue(1); - column.addValue(1); - - BOOST_CHECK( !column.hasDefault( ) ); -} - - -BOOST_AUTO_TEST_CASE( TestDescending ) { - ColumnSchema schema("COLUMN" , Table::STRICTLY_DECREASING , Table::DEFAULT_LINEAR); - TableColumn column( schema ); - - BOOST_CHECK_EQUAL( column.size() , 0 ); - - column.addValue( -10 ); - BOOST_CHECK_THROW( column.addValue( -9 ) , std::invalid_argument ); - column.addDefault( ); - BOOST_CHECK_THROW( column.updateValue( 1, -9 ) , std::invalid_argument ); - column.addValue( -12 ); - BOOST_CHECK_THROW( column.updateValue( 1, -13 ) , std::invalid_argument ); - column.updateValue( 1, -11 ); - - column.addDefault( ); - column.addDefault( ); - column.addDefault( ); - column.addValue(-16); - - column.updateValue( 3,-13 ); - column.updateValue( 4,-14 ); - column.updateValue( 5,-15 ); -} - - -BOOST_AUTO_TEST_CASE( TestDEFAULT_NONE) { - ColumnSchema schema("COLUMN" , Table::STRICTLY_DECREASING , Table::DEFAULT_NONE); - TableColumn column( schema ); - - BOOST_CHECK_THROW( column.addDefault( ) , std::invalid_argument ); -} - - -BOOST_AUTO_TEST_CASE( Test_MIN_MAX) { - ColumnSchema schema("COLUMN" , Table::RANDOM , Table::DEFAULT_LINEAR); - TableColumn column( schema ); - - BOOST_CHECK_THROW( column.max( ) , std::invalid_argument ); - BOOST_CHECK_THROW( column.min( ) , std::invalid_argument ); - - column.addValue( 1 ); - BOOST_CHECK_EQUAL( 1 , column.min() ); - BOOST_CHECK_EQUAL( 1 , column.max() ); - - column.addValue( 100 ); - BOOST_CHECK_EQUAL( 1 , column.min() ); - BOOST_CHECK_EQUAL( 100 , column.max() ); - - column.addValue( 50 ); - BOOST_CHECK_EQUAL( 1 , column.min() ); - BOOST_CHECK_EQUAL( 100 , column.max() ); - - column.addDefault( ); - BOOST_CHECK_THROW( column.max( ) , std::invalid_argument ); - BOOST_CHECK_THROW( column.min( ) , std::invalid_argument ); - - column.updateValue( 3 , 67 ); - BOOST_CHECK_EQUAL( 1 , column.min() ); - BOOST_CHECK_EQUAL( 100 , column.max() ); -} - -BOOST_AUTO_TEST_CASE( Test_IN_RANGE) { - ColumnSchema schema("COLUMN" , Table::RANDOM , Table::DEFAULT_LINEAR); - TableColumn column( schema ); - - column.addValue(10); - column.addValue(20); - BOOST_CHECK_THROW( column.inRange( 15 ) , std::invalid_argument ); - - - ColumnSchema schema2("COLUMN" , Table::INCREASING, Table::DEFAULT_LINEAR); - TableColumn column2( schema2 ); - - - BOOST_CHECK_THROW( column2.inRange( 15 ) , std::invalid_argument ); - column2.addValue(10); - BOOST_CHECK_THROW( column2.inRange( 15 ) , std::invalid_argument ); - column2.addValue(20); - BOOST_CHECK( column2.inRange( 15 )); - BOOST_CHECK( column2.inRange( 10 )); - BOOST_CHECK( column2.inRange( 20 )); - - BOOST_CHECK( !column2.inRange( 9 )); - BOOST_CHECK( !column2.inRange( 21 )); - - column2.addDefault( ); - BOOST_CHECK_THROW( column2.inRange( 15 ) , std::invalid_argument ); -} - - - -BOOST_AUTO_TEST_CASE( Test_Table_Index ) { - { - ColumnSchema schema("COLUMN" , Table::RANDOM , Table::DEFAULT_NONE); - TableColumn column( schema ); - - /* Can not look up with random ordering */ - BOOST_CHECK_THROW( column.lookup( 0.67 ) , std::invalid_argument ); - } - - { - ColumnSchema schema("COLUMN" , Table::INCREASING , Table::DEFAULT_LINEAR); - TableColumn column( schema ); - - /* Can not look up in empty column */ - BOOST_CHECK_THROW( column.lookup( 0.67 ) , std::invalid_argument ); - - column.addValue( 10 ); - - column.addDefault( ); - /* Can not look up in column with defaults */ - BOOST_CHECK_THROW( column.lookup( 0.67 ) , std::invalid_argument ); - - - column.updateValue(1 , 20 ); - } -} - - -BOOST_AUTO_TEST_CASE( Test_EVAL_INCREASING ) { - ColumnSchema schema("COLUMN" , Table::INCREASING , Table::DEFAULT_LINEAR); - TableColumn column( schema ); - - column.addValue(0); - - /* Out of range - constant end-point extrapolation , size = 1*/ - BOOST_CHECK_EQUAL( column.eval( column.lookup( -1 )) , 0 ); - BOOST_CHECK_EQUAL( column.eval( column.lookup( 1 )) , 0 ); - - - column.addValue(1); - column.addValue(2); - column.addValue(3); - - BOOST_CHECK_EQUAL( column.eval( column.lookup( 0 )) , 0 ); - BOOST_CHECK_EQUAL( column.eval( column.lookup( 1 )) , 1 ); - BOOST_CHECK_EQUAL( column.eval( column.lookup( 2 )) , 2 ); - BOOST_CHECK_EQUAL( column.eval( column.lookup( 3 )) , 3 ); - - BOOST_CHECK_EQUAL( column.eval( column.lookup( 0.25 )) , 0.25 ); - BOOST_CHECK_EQUAL( column.eval( column.lookup( 1.75 )) , 1.75 ); - BOOST_CHECK_EQUAL( column.eval( column.lookup( 2.5 )) , 2.5 ); - - /* Out of range - constant end-point extrapolation */ - BOOST_CHECK_EQUAL( column.eval( column.lookup( -1 )) , 0 ); - BOOST_CHECK_EQUAL( column.eval( column.lookup( 4 )) , 3 ); -} - - -BOOST_AUTO_TEST_CASE( Test_EVAL_DECREASING ) { - ColumnSchema schema("COLUMN" , Table::DECREASING , Table::DEFAULT_LINEAR); - TableColumn column( schema ); - - column.addValue(3); - column.addValue(2); - column.addValue(1); - column.addValue(0); - - BOOST_CHECK_EQUAL( column.eval( column.lookup( 0 )) , 0 ); - BOOST_CHECK_EQUAL( column.eval( column.lookup( 1 )) , 1 ); - BOOST_CHECK_EQUAL( column.eval( column.lookup( 2 )) , 2 ); - BOOST_CHECK_EQUAL( column.eval( column.lookup( 3 )) , 3 ); - - BOOST_CHECK_EQUAL( column.eval( column.lookup( 0.25 )) , 0.25 ); - BOOST_CHECK_EQUAL( column.eval( column.lookup( 1.75 )) , 1.75 ); - BOOST_CHECK_EQUAL( column.eval( column.lookup( 2.5 )) , 2.5 ); - - /* Out of range - constant end-point extrapolation */ - BOOST_CHECK_EQUAL( column.eval( column.lookup( -1 )) , 0 ); - BOOST_CHECK_EQUAL( column.eval( column.lookup( 4 )) , 3 ); -} - - - - -BOOST_AUTO_TEST_CASE( Test_CONST_DEFAULT ) { - ColumnSchema schema("COLUMN" , Table::DECREASING , 1.0); - TableColumn column( schema ); - column.addDefault( ); - column.addDefault( ); - BOOST_CHECK( !column.hasDefault( ) ); - - BOOST_CHECK_EQUAL( column[0] , 1.0 ); - BOOST_CHECK_EQUAL( column[1] , 1.0 ); -} - - -BOOST_AUTO_TEST_CASE( Test_LINEAR_DEFAULT ) { - ColumnSchema argSchema("COLUMN" , Table::INCREASING , Table::DEFAULT_NONE); - ColumnSchema valueSchema("COLUMN" , Table::RANDOM , Table::DEFAULT_LINEAR); - TableColumn argColumn( argSchema ); - TableColumn valueColumn( valueSchema ); - - argColumn.addValue( 0 ); valueColumn.addValue( 0 ); - argColumn.addValue( 0.05 ); valueColumn.addDefault( ); - argColumn.addValue( 0.10 ); valueColumn.addValue(1.0); - argColumn.addValue( 0.50 ); valueColumn.addDefault( ); - argColumn.addValue( 0.80 ); valueColumn.addValue(1.0); - argColumn.addValue( 0.95 ); valueColumn.addDefault( ); - argColumn.addValue( 1.00 ); - - BOOST_CHECK_THROW( valueColumn.applyDefaults( argColumn ) , std::invalid_argument ); - valueColumn.addValue(0.0); - valueColumn.applyDefaults( argColumn ); - - BOOST_CHECK( !valueColumn.hasDefault( ) ); - BOOST_CHECK_CLOSE( valueColumn[1] , 0.50 , 1e-6); - BOOST_CHECK_CLOSE( valueColumn[3] , 1.00 , 1e-6); - BOOST_CHECK_CLOSE( valueColumn[5] , 0.25 , 1e-6); -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/TableContainerTests.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/TableContainerTests.cpp deleted file mode 100644 index 0be151cb44..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/TableContainerTests.cpp +++ /dev/null @@ -1,67 +0,0 @@ -/* - Copyright (C) 2013 by Andreas Lauser - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#define BOOST_TEST_MODULE TableContainerTests - -#include - -#include -#include -#include -#include -#include -#include - -#include -#include - -inline Opm::Deck createSWOFDeck() { - const char *deckData = - "TABDIMS\n" - " 2 /\n" - "\n" - "SWOF\n" - " 1 2 3 4\n" - " 5 6 7 8 /\n" - " 9 10 11 12 /\n"; - - Opm::Parser parser; - return parser.parseString(deckData); -} - -BOOST_AUTO_TEST_CASE( CreateContainer ) { - std::vector columnNames{"A", "B", "C", "D"}; - auto deck = createSWOFDeck(); - Opm::TableContainer container(10); - BOOST_CHECK( container.empty() ); - BOOST_CHECK_EQUAL( 0 , container.size() ); - BOOST_CHECK_EQUAL( false , container.hasTable( 1 )); - - std::shared_ptr table = std::make_shared( deck.getKeyword("SWOF").getRecord(0).getItem(0), false ); - BOOST_CHECK_THROW( container.addTable( 10 , table ), std::invalid_argument ); - container.addTable( 6 , table ); - BOOST_CHECK_EQUAL( 1 , container.size() ); - - BOOST_CHECK_EQUAL( table.get() , &(container[6])); - BOOST_CHECK_EQUAL( table.get() , &(container[9])); - - BOOST_CHECK_THROW( container[5] , std::invalid_argument ); - BOOST_CHECK_THROW( container[10] , std::invalid_argument ); -} - diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/TableManagerTests.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/TableManagerTests.cpp deleted file mode 100644 index b91d3c4e1d..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/TableManagerTests.cpp +++ /dev/null @@ -1,1793 +0,0 @@ -/* - Copyright (C) 2013 by Andreas Lauser - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#define BOOST_TEST_MODULE SimpleTableTests - -#include - -#include -#include - -// generic table classes -#include -#include - -// keyword specific table classes -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#include - -#include -#include - -using namespace Opm; - -namespace { - -Opm::Deck createSingleRecordDeck() { - const char *deckData = - "TABDIMS\n" - " 2 /\n" - "\n" - "SWOF\n" - " 1 2 3 4\n" - " 5 6 7 8 /\n" - " 9 10 11 12 /\n"; - - Opm::Parser parser; - return parser.parseString(deckData); -} - - -Opm::Deck createSingleRecordDeckWithVd() { - const char *deckData = - "RUNSPEC\n" - "ENDSCALE\n" - "2* 1 2 /\n" - "PROPS\n" - "TABDIMS\n" - " 2 /\n" - "\n" - "SWFN\n" - "0.22 .0 7.0 \n" - "0.3 .0 4.0 \n" - "0.5 .24 2.5 \n" - "0.8 .65 1.0 \n" - "0.9 .83 .5 \n" - "1.0 1.00 .0 /\n" - "/\n" - "IMPTVD\n" - "3000.0 6*0.1 0.31 1*0.1\n" - "9000.0 6*0.1 0.32 1*0.1/\n" - "ENPTVD\n" - "3000.0 0.20 0.20 1.0 0.0 0.04 1.0 0.18 0.22\n" - "9000.0 0.22 0.22 1.0 0.0 0.04 1.0 0.18 0.22 /"; - - Opm::Parser parser; - return parser.parseString(deckData); -} - -Opm::Deck createSingleRecordDeckWithJFunc() { - const char *deckData = - "RUNSPEC\n" - "ENDSCALE\n" - "2* 1 2 /\n" - "PROPS\n" - "JFUNC\n" - " WATER 22.0 /\n" - "TABDIMS\n" - " 2 /\n" - "\n" - "SWFN\n" - "0.22 .0 7.0 \n" - "0.3 .0 4.0 \n" - "0.5 .24 2.5 \n" - "0.8 .65 1.0 \n" - "0.9 .83 .5 \n" - "1.0 1.00 .0 /\n" - "/\n" - "IMPTVD\n" - "3000.0 6*0.1 0.31 1*0.1\n" - "9000.0 6*0.1 0.32 1*0.1/\n" - "ENPTVD\n" - "3000.0 0.20 0.20 1.0 0.0 0.04 1.0 0.18 0.22\n" - "9000.0 0.22 0.22 1.0 0.0 0.04 1.0 0.18 0.22 /"; - - Opm::Parser parser; - return parser.parseString(deckData); -} - -Opm::Deck createSingleRecordDeckWithJFuncBoth() { - const char *deckData = - "RUNSPEC\nENDSCALE\n2* 1 2 /\nPROPS\n" - "JFUNC\n * 55.0 88.0 /\n" // ASTERISK MEANS DEFAULT VALUE - "TABDIMS\n 2 /\n"; - Opm::Parser parser; - return parser.parseString(deckData); -} - -Opm::Deck createSingleRecordDeckWithFullJFunc() { - const char *deckData = - "RUNSPEC\nENDSCALE\n2* 1 2 /\nPROPS\n" - "JFUNC\n WATER 2.7182 3.1416 0.6 0.7 Z /\n" - "TABDIMS\n 2 /\n"; - Opm::Parser parser; - return parser.parseString(deckData); -} - -Opm::Deck createSingleRecordDeckWithJFuncBrokenFlag() { - const char *deckData = - "RUNSPEC\nENDSCALE\n2* 1 2 /\nPROPS\n" - "JFUNC\n GARBAGE 55.0 88.0 /\n" - "TABDIMS\n 2 /\n"; - Opm::Parser parser; - return parser.parseString(deckData); -} - -Opm::Deck createSingleRecordDeckWithJFuncBrokenDirection() { - const char *deckData = - "RUNSPEC\nENDSCALE\n2* 1 2 /\nPROPS\n" - "JFUNC\n * * * * * XZ /\n" - "TABDIMS\n 2 /\n"; - Opm::Parser parser; - return parser.parseString(deckData); -} - - -/// used in BOOST_CHECK_CLOSE -static float epsilon() { - return 0.00001; -} -} - -BOOST_AUTO_TEST_CASE( CreateTables ) { - auto deck = createSingleRecordDeck(); - Opm::TableManager tables(deck); - auto& tabdims = tables.getTabdims(); - BOOST_CHECK_EQUAL( tabdims.getNumSatTables() , 2 ); - BOOST_CHECK( !tables.useImptvd() ); - BOOST_CHECK( !tables.useEnptvd() ); -} - -BOOST_AUTO_TEST_CASE( CreateTablesWithVd ) { - auto deck = createSingleRecordDeckWithVd(); - Opm::TableManager tables(deck); - auto& tabdims = tables.getTabdims(); - BOOST_CHECK_EQUAL( tabdims.getNumSatTables() , 2 ); - BOOST_CHECK( tables.useImptvd() ); - BOOST_CHECK( tables.useEnptvd() ); -} - -BOOST_AUTO_TEST_CASE( CreateTablesWithJFunc ) { - auto deck = createSingleRecordDeckWithJFunc(); - Opm::TableManager tables(deck); - const Opm::Tabdims& tabdims = tables.getTabdims(); - BOOST_CHECK_EQUAL(tabdims.getNumSatTables(), 2); - BOOST_CHECK(tables.useImptvd()); - BOOST_CHECK(tables.useEnptvd()); - - const auto& swfnTab = tables.getSwfnTables(); - - const float swfnDataVerbatim[] = - {0.22, 0.00, 7.00, 0.30, 0.00, 4.00, 0.50, 0.24, 2.50, - 0.80, 0.65, 1.00, 0.90, 0.83, 0.50, 1.00, 1.00, 0.00}; - - - for (size_t tab = 0; tab < swfnTab.size(); tab++) { - const auto& t = swfnTab.getTable(tab); - - //TODO uncomment BOOST_CHECK_THROW( t.getColumn("PCOW"), std::invalid_argument ); - - for (size_t c_idx = 0; c_idx < t.numColumns(); c_idx++) { - const auto& col = t.getColumn(c_idx); - for (size_t i = 0; i < col.size(); i++) { - int idx = c_idx + i*3; - BOOST_CHECK_CLOSE( col[i], swfnDataVerbatim[idx], epsilon()); - } - } - } - - const auto& tt = swfnTab.getTable(0); - //TODO uncomment BOOST_CHECK_THROW(tt.getPcowColumn(), std::invalid_argument); - - const auto& col = tt.getJFuncColumn(); - for (size_t i = 0; i < col.size(); i++) { - BOOST_CHECK_CLOSE(col[i], swfnDataVerbatim[i*3 + 2], epsilon()); - } - - BOOST_CHECK(tables.useJFunc()); -} -/*****************************************************************/ - - - -BOOST_AUTO_TEST_CASE(SwofTable_Tests) { - const char *deckData = - "TABDIMS\n" - "2 /\n" - "\n" - "SWOF\n" - " 1 2 3 4\n" - " 5 6 7 8/\n" - " 9 10 11 12\n" - " 13 14 15 16\n" - " 17 18 19 20/\n"; - - Opm::Parser parser; - auto deck = parser.parseString(deckData); - - Opm::SwofTable swof1Table(deck.getKeyword("SWOF").getRecord(0).getItem(0), false); - Opm::SwofTable swof2Table(deck.getKeyword("SWOF").getRecord(1).getItem(0), false); - - BOOST_CHECK_EQUAL(swof1Table.numRows(), 2); - BOOST_CHECK_EQUAL(swof2Table.numRows(), 3); - - BOOST_CHECK_EQUAL(swof1Table.numColumns(), 4); - BOOST_CHECK_EQUAL(swof2Table.numColumns(), 4); - - BOOST_CHECK_EQUAL(swof1Table.getSwColumn().front(), 1.0); - BOOST_CHECK_EQUAL(swof1Table.getSwColumn().back(), 5.0); - - BOOST_CHECK_EQUAL(swof1Table.getKrwColumn().front(), 2.0); - BOOST_CHECK_EQUAL(swof1Table.getKrwColumn().back(), 6.0); - - BOOST_CHECK_EQUAL(swof1Table.getKrowColumn().front(), 3.0); - BOOST_CHECK_EQUAL(swof1Table.getKrowColumn().back(), 7.0); - - BOOST_CHECK_EQUAL(swof1Table.getPcowColumn().front(), 4.0e5); - BOOST_CHECK_EQUAL(swof1Table.getPcowColumn().back(), 8.0e5); - - // for the second table, we only check the first column and trust - // that everything else is fine... - BOOST_CHECK_EQUAL(swof2Table.getSwColumn().front(), 9.0); - BOOST_CHECK_EQUAL(swof2Table.getSwColumn().back(), 17.0); -} - -BOOST_AUTO_TEST_CASE(PbvdTable_Tests) { - const char *deckData = - "EQLDIMS\n" - "2 /\n" - "\n" - "PBVD\n" - " 1 1 \n" - " 2 1 / \n" - " 3 2\n" - " 2 2\n" - " 1 2/\n"; - - Opm::Parser parser; - auto deck = parser.parseString(deckData); - - Opm::PbvdTable pbvdTable1(deck.getKeyword("PBVD").getRecord(0).getItem(0)); - - BOOST_CHECK_EQUAL(pbvdTable1.numRows(), 2); - BOOST_CHECK_EQUAL(pbvdTable1.numColumns(), 2); - BOOST_CHECK_EQUAL(pbvdTable1.getDepthColumn().front(), 1); - BOOST_CHECK_EQUAL(pbvdTable1.getDepthColumn().back(), 2); - BOOST_CHECK_EQUAL(pbvdTable1.getPbubColumn().front(), 100000); // 1 barsa - - // depth must be increasing down the column. - BOOST_CHECK_THROW(Opm::PbvdTable pbvdTable2(deck.getKeyword("PBVD").getRecord(1).getItem(0)), std::invalid_argument); -} - - -BOOST_AUTO_TEST_CASE(PdvdTable_Tests) { - const char *deckData = - "EQLDIMS\n" - "2 /\n" - "\n" - "PDVD\n" - " 1 1 \n" - " 2 1 / \n" - " 3 2\n" - " 2 2\n" - " 1 2/\n"; - - Opm::Parser parser; - auto deck = parser.parseString(deckData); - - Opm::PdvdTable pdvdTable1(deck.getKeyword("PDVD").getRecord(0).getItem(0)); - - BOOST_CHECK_EQUAL(pdvdTable1.numRows(), 2); - BOOST_CHECK_EQUAL(pdvdTable1.numColumns(), 2); - BOOST_CHECK_EQUAL(pdvdTable1.getDepthColumn().front(), 1); - BOOST_CHECK_EQUAL(pdvdTable1.getDepthColumn().back(), 2); - BOOST_CHECK_EQUAL(pdvdTable1.getPdewColumn().front(), 100000); // 1 barsa - - // depth must be increasing down the column. - BOOST_CHECK_THROW(Opm::PdvdTable pdvdTable2(deck.getKeyword("PDVD").getRecord(1).getItem(0)), std::invalid_argument); -} - -BOOST_AUTO_TEST_CASE(SgwfnTable_Tests) { - const char *deckData = - "TABDIMS\n" - "2 /\n" - "\n" - "SGWFN\n" - " 1 2 3 4\n" - " 5 6 7 8/\n" - " 9 10 11 12\n" - " 13 14 15 16\n" - " 17 18 19 20/\n"; - - Opm::Parser parser; - auto deck = parser.parseString(deckData); - - - Opm::SgwfnTable sgwfn1Table(deck.getKeyword("SGWFN").getRecord(0).getItem(0)); - Opm::SgwfnTable sgwfn2Table(deck.getKeyword("SGWFN").getRecord(1).getItem(0)); - - BOOST_CHECK_EQUAL(sgwfn1Table.numRows(), 2); - BOOST_CHECK_EQUAL(sgwfn2Table.numRows(), 3); - - BOOST_CHECK_EQUAL(sgwfn1Table.numColumns(), 4); - BOOST_CHECK_EQUAL(sgwfn2Table.numColumns(), 4); - - BOOST_CHECK_EQUAL(sgwfn1Table.getSgColumn().front(), 1.0); - BOOST_CHECK_EQUAL(sgwfn1Table.getSgColumn().back(), 5.0); - - BOOST_CHECK_EQUAL(sgwfn1Table.getKrgColumn().front(), 2.0); - BOOST_CHECK_EQUAL(sgwfn1Table.getKrgColumn().back(), 6.0); - - BOOST_CHECK_EQUAL(sgwfn1Table.getKrgwColumn().front(), 3.0); - BOOST_CHECK_EQUAL(sgwfn1Table.getKrgwColumn().back(), 7.0); - - BOOST_CHECK_EQUAL(sgwfn1Table.getPcgwColumn().front(), 4.0e5); - BOOST_CHECK_EQUAL(sgwfn1Table.getPcgwColumn().back(), 8.0e5); - - // for the second table, we only check the first column and trust - // that everything else is fine... - BOOST_CHECK_EQUAL(sgwfn2Table.getSgColumn().front(), 9.0); - BOOST_CHECK_EQUAL(sgwfn2Table.getSgColumn().back(), 17.0); -} - -BOOST_AUTO_TEST_CASE(SgofTable_Tests) { - const char *deckData = - "TABDIMS\n" - "2 /\n" - "\n" - "SGOF\n" - " 1 2 3 4\n" - " 5 6 7 8/\n" - " 9 10 11 12\n" - " 13 14 15 16\n" - " 17 18 19 20/\n"; - - Opm::Parser parser; - auto deck = parser.parseString(deckData); - - Opm::SgofTable sgof1Table(deck.getKeyword("SGOF").getRecord(0).getItem(0), false); - Opm::SgofTable sgof2Table(deck.getKeyword("SGOF").getRecord(1).getItem(0), false); - - BOOST_CHECK_EQUAL(sgof1Table.numRows(), 2); - BOOST_CHECK_EQUAL(sgof2Table.numRows(), 3); - - BOOST_CHECK_EQUAL(sgof1Table.numColumns(), 4); - BOOST_CHECK_EQUAL(sgof2Table.numColumns(), 4); - - BOOST_CHECK_EQUAL(sgof1Table.getSgColumn().front(), 1.0); - BOOST_CHECK_EQUAL(sgof1Table.getSgColumn().back(), 5.0); - - BOOST_CHECK_EQUAL(sgof1Table.getKrgColumn().front(), 2.0); - BOOST_CHECK_EQUAL(sgof1Table.getKrgColumn().back(), 6.0); - - BOOST_CHECK_EQUAL(sgof1Table.getKrogColumn().front(), 3.0); - BOOST_CHECK_EQUAL(sgof1Table.getKrogColumn().back(), 7.0); - - BOOST_CHECK_EQUAL(sgof1Table.getPcogColumn().front(), 4.0e5); - BOOST_CHECK_EQUAL(sgof1Table.getPcogColumn().back(), 8.0e5); - - // for the second table, we only check the first column and trust - // that everything else is fine... - BOOST_CHECK_EQUAL(sgof2Table.getSgColumn().front(), 9.0); - BOOST_CHECK_EQUAL(sgof2Table.getSgColumn().back(), 17.0); -} - -BOOST_AUTO_TEST_CASE(PlyadsTable_Tests) { - { - const char *correctDeckData = - "TABDIMS\n" - "/\n" - "PLYADS\n" - "0.00 0.0 \n" - "0.25 0.000010\n" - "0.50 0.000018\n" - "0.75 0.000023\n" - "1.00 0.000027\n" - "1.25 0.000030\n" - "1.50 0.000030\n" - "1.75 0.000030\n" - "2.00 0.000030\n" - "3.00 0.000030 /\n"; - Opm::Parser parser; - auto deck = parser.parseString(correctDeckData); - const auto& plyadsKeyword = deck.getKeyword("PLYADS"); - Opm::PlyadsTable plyadsTable(plyadsKeyword.getRecord(0).getItem(0)); - - - BOOST_CHECK_CLOSE(plyadsTable.getPolymerConcentrationColumn().front(), 0.0, 1e-6); - BOOST_CHECK_CLOSE(plyadsTable.getPolymerConcentrationColumn().back(), 3.0, 1e-6); - - BOOST_CHECK_CLOSE(plyadsTable.getAdsorbedPolymerColumn().front(), 0.0, 1e-6); - BOOST_CHECK_CLOSE(plyadsTable.getAdsorbedPolymerColumn().back(), 0.000030, 1e-6); - } - - { - // first column not strictly monotonic - const char *incorrectDeckData = - "TABDIMS\n" - "/\n" - "PLYADS\n" - "0.00 0.0 \n" - "0.00 0.000010\n" - "0.50 0.000018\n" - "0.75 0.000023\n" - "1.00 0.000027\n" - "1.25 0.000030\n" - "1.50 0.000030\n" - "1.75 0.000030\n" - "2.00 0.000030\n" - "3.00 0.000030 /\n"; - Opm::Parser parser; - auto deck = parser.parseString(incorrectDeckData); - const auto& plyadsKeyword = deck.getKeyword("PLYADS"); - - BOOST_CHECK_THROW(Opm::PlyadsTable(plyadsKeyword.getRecord(0).getItem(0)), std::invalid_argument); - } - - { - // second column not monotonic - const char *incorrectDeckData = - "TABDIMS\n" - "/\n" - "PLYADS\n" - "0.00 0.0 \n" - "0.25 0.000010\n" - "0.50 0.000018\n" - "0.75 0.000023\n" - "1.00 0.000027\n" - "1.25 0.000030\n" - "1.50 0.000030\n" - "1.75 0.000030\n" - "2.00 0.000030\n" - "3.00 0.000029 /\n"; - Opm::Parser parser; - auto deck = parser.parseString(incorrectDeckData); - const auto& plyadsKeyword = deck.getKeyword("PLYADS"); - - BOOST_CHECK_THROW(Opm::PlyadsTable(plyadsKeyword.getRecord(0).getItem(0)), std::invalid_argument); - } -} - -BOOST_AUTO_TEST_CASE(FoamadsTable_Tests) { - { - const char *correctDeckData = - "TABDIMS\n" - "/\n" - "FOAMADS\n" - "0.00 0.0 \n" - "0.25 0.000010\n" - "0.50 0.000018\n" - "0.75 0.000023\n" - "1.00 0.000027\n" - "1.25 0.000030\n" - "1.50 0.000030\n" - "1.75 0.000030\n" - "2.00 0.000030\n" - "3.00 0.000030 /\n"; - Opm::Parser parser; - auto deck = parser.parseString(correctDeckData); - const auto& foamadsKeyword = deck.getKeyword("FOAMADS"); - Opm::FoamadsTable foamadsTable(foamadsKeyword.getRecord(0).getItem(0)); - - - BOOST_CHECK_CLOSE(foamadsTable.getFoamConcentrationColumn().front(), 0.0, 1e-6); - BOOST_CHECK_CLOSE(foamadsTable.getFoamConcentrationColumn().back(), 3.0, 1e-6); - - BOOST_CHECK_CLOSE(foamadsTable.getAdsorbedFoamColumn().front(), 0.0, 1e-6); - BOOST_CHECK_CLOSE(foamadsTable.getAdsorbedFoamColumn().back(), 0.000030, 1e-6); - } - - { - // first column not strictly monotonic - const char *incorrectDeckData = - "TABDIMS\n" - "/\n" - "FOAMADS\n" - "0.00 0.0 \n" - "0.00 0.000010\n" - "0.50 0.000018\n" - "0.75 0.000023\n" - "1.00 0.000027\n" - "1.25 0.000030\n" - "1.50 0.000030\n" - "1.75 0.000030\n" - "2.00 0.000030\n" - "3.00 0.000030 /\n"; - Opm::Parser parser; - auto deck = parser.parseString(incorrectDeckData); - const auto& foamadsKeyword = deck.getKeyword("FOAMADS"); - - BOOST_CHECK_THROW(Opm::FoamadsTable(foamadsKeyword.getRecord(0).getItem(0)), std::invalid_argument); - } - - { - // second column not monotonic - const char *incorrectDeckData = - "TABDIMS\n" - "/\n" - "FOAMADS\n" - "0.00 0.0 \n" - "0.25 0.000010\n" - "0.50 0.000018\n" - "0.75 0.000023\n" - "1.00 0.000027\n" - "1.25 0.000030\n" - "1.50 0.000030\n" - "1.75 0.000030\n" - "2.00 0.000030\n" - "3.00 0.000029 /\n"; - Opm::Parser parser; - auto deck = parser.parseString(incorrectDeckData); - const auto& foamadsKeyword = deck.getKeyword("FOAMADS"); - - BOOST_CHECK_THROW(Opm::FoamadsTable(foamadsKeyword.getRecord(0).getItem(0)), std::invalid_argument); - } -} - -BOOST_AUTO_TEST_CASE(FoammobTable_Tests) { - { - const char *correctDeckData = - "TABDIMS\n" - "/\n" - "FOAMMOB\n" - "0.00 1.0 \n" - "0.01 0.5\n" - "0.02 0.1\n" - "0.03 0.1 /\n"; - Opm::Parser parser; - auto deck = parser.parseString(correctDeckData); - const auto& foammobKeyword = deck.getKeyword("FOAMMOB"); - Opm::FoammobTable foammobTable(foammobKeyword.getRecord(0).getItem(0)); - - - BOOST_CHECK_CLOSE(foammobTable.getFoamConcentrationColumn().front(), 0.0, 1e-6); - BOOST_CHECK_CLOSE(foammobTable.getFoamConcentrationColumn().back(), 0.03, 1e-6); - - BOOST_CHECK_CLOSE(foammobTable.getMobilityMultiplierColumn().front(), 1.0, 1e-6); - BOOST_CHECK_CLOSE(foammobTable.getMobilityMultiplierColumn().back(), 0.1, 1e-6); - } - - { - // first column not strictly monotonic - const char *incorrectDeckData = - "TABDIMS\n" - "/\n" - "FOAMMOB\n" - "0.00 1.0 \n" - "0.01 0.5\n" - "0.02 0.1\n" - "0.02 0.1 /\n"; - Opm::Parser parser; - auto deck = parser.parseString(incorrectDeckData); - const auto& foammobKeyword = deck.getKeyword("FOAMMOB"); - - BOOST_CHECK_THROW(Opm::FoammobTable(foammobKeyword.getRecord(0).getItem(0)), std::invalid_argument); - } - - { - // second column not monotonic - const char *incorrectDeckData = - "TABDIMS\n" - "/\n" - "FOAMMOB\n" - "0.00 1.0 \n" - "0.01 0.5\n" - "0.02 0.1\n" - "0.03 0.11 /\n"; - Opm::Parser parser; - auto deck = parser.parseString(incorrectDeckData); - const auto& foammobKeyword = deck.getKeyword("FOAMMOB"); - - BOOST_CHECK_THROW(Opm::FoammobTable(foammobKeyword.getRecord(0).getItem(0)), std::invalid_argument); - } -} - - - - -/** - * Tests "happy path" for a VFPPROD table, i.e., when everything goes well - */ -BOOST_AUTO_TEST_CASE(VFPProdTable_happy_Test) { - const char *deckData = "\ -VFPPROD \n\ --- Table Depth Rate WFR GFR TAB ALQ UNITS BODY \n\ --- ----- ----- ----- ----- ----- ----- --- -------- ----- \n\ - 5 32.9 'LIQ' 'WCT' 'GOR' 'THP' ' ' 'METRIC' 'BHP' / \n\ --- Rate axis \n\ -1 3 5 / \n\ --- THP axis \n\ -7 11 / \n\ --- WFR axis \n\ -13 17 / \n\ --- GFR axis \n\ -19 23 / \n\ --- ALQ axis \n\ -29 31 / \n\ --- Table data with THP# WFR# GFR# ALQ# \n\ -1 1 1 1 1.5 2.5 3.5 / \n\ -2 1 1 1 4.5 5.5 6.5 / \n\ -1 2 1 1 7.5 8.5 9.5 / \n\ -2 2 1 1 10.5 11.5 12.5 / \n\ -1 1 2 1 13.5 14.5 15.5 / \n\ -2 1 2 1 16.5 17.5 18.5 / \n\ -1 2 2 1 19.5 20.5 21.5 / \n\ -2 2 2 1 22.5 23.5 24.5 / \n\ -1 1 1 2 25.5 26.5 27.5 / \n\ -2 1 1 2 28.5 29.5 30.5 / \n\ -1 2 1 2 31.5 32.5 33.5 / \n\ -2 2 1 2 34.5 35.5 36.5 / \n\ -1 1 2 2 37.5 38.5 39.5 / \n\ -2 1 2 2 40.5 41.5 42.5 / \n\ -1 2 2 2 43.5 44.5 45.5 / \n\ -2 2 2 2 46.5 47.5 48.5 / \n"; - - Opm::Parser parser; - auto deck = parser.parseString(deckData); - auto units = Opm::UnitSystem::newMETRIC(); - const auto& vfpprodKeyword = deck.getKeyword("VFPPROD"); - - BOOST_CHECK_EQUAL(deck.count("VFPPROD"), 1); - - Opm::VFPProdTable vfpprodTable(vfpprodKeyword, units); - - - BOOST_CHECK_EQUAL(vfpprodTable.getTableNum(), 5); - BOOST_CHECK_EQUAL(vfpprodTable.getDatumDepth(), 32.9); - BOOST_CHECK_EQUAL(vfpprodTable.getFloType(), Opm::VFPProdTable::FLO_LIQ); - BOOST_CHECK_EQUAL(vfpprodTable.getWFRType(), Opm::VFPProdTable::WFR_WCT); - BOOST_CHECK_EQUAL(vfpprodTable.getGFRType(), Opm::VFPProdTable::GFR_GOR); - BOOST_CHECK_EQUAL(vfpprodTable.getALQType(), Opm::VFPProdTable::ALQ_UNDEF); - - //Flo axis - { - const std::vector& flo = vfpprodTable.getFloAxis(); - BOOST_REQUIRE_EQUAL(flo.size(), 3); - - //Unit of FLO is SM3/day, convert to SM3/second - double conversion_factor = 1.0 / (60*60*24); - BOOST_CHECK_EQUAL(flo[0], 1*conversion_factor); - BOOST_CHECK_EQUAL(flo[1], 3*conversion_factor); - BOOST_CHECK_EQUAL(flo[2], 5*conversion_factor); - } - - //THP axis - { - const std::vector& thp = vfpprodTable.getTHPAxis(); - BOOST_REQUIRE_EQUAL(thp.size(), 2); - - //Unit of THP is barsa => convert to pascal - double conversion_factor = 100000.0; - BOOST_CHECK_EQUAL(thp[0], 7*conversion_factor); - BOOST_CHECK_EQUAL(thp[1], 11*conversion_factor); - } - - //WFR axis - { - const std::vector& wfr = vfpprodTable.getWFRAxis(); - BOOST_REQUIRE_EQUAL(wfr.size(), 2); - - //Unit of WFR is SM3/SM3 - BOOST_CHECK_EQUAL(wfr[0], 13); - BOOST_CHECK_EQUAL(wfr[1], 17); - } - - //GFR axis - { - const std::vector& gfr = vfpprodTable.getGFRAxis(); - BOOST_REQUIRE_EQUAL(gfr.size(), 2); - - //Unit of GFR is SM3/SM3 - BOOST_CHECK_EQUAL(gfr[0], 19); - BOOST_CHECK_EQUAL(gfr[1], 23); - } - - //ALQ axis - { - const std::vector& alq = vfpprodTable.getALQAxis(); - BOOST_REQUIRE_EQUAL(alq.size(), 2); - - //Unit of ALQ undefined - BOOST_CHECK_EQUAL(alq[0], 29); - BOOST_CHECK_EQUAL(alq[1], 31); - } - - //The data itself - { - typedef Opm::VFPProdTable::array_type::size_type size_type; - const auto size = vfpprodTable.shape(); - - BOOST_CHECK_EQUAL(size[0], 2); - BOOST_CHECK_EQUAL(size[1], 2); - BOOST_CHECK_EQUAL(size[2], 2); - BOOST_CHECK_EQUAL(size[3], 2); - BOOST_CHECK_EQUAL(size[4], 3); - - //Table given as BHP => barsa. Convert to pascal - double conversion_factor = 100000.0; - - double index = 0.5; - for (size_type a = 0; a < size[3]; ++a) { - for (size_type g = 0; g < size[2]; ++g) { - for (size_type w = 0; w < size[1]; ++w) { - for (size_type t = 0; t < size[0]; ++t) { - for (size_type f = 0; f < size[4]; ++f) { - index += 1.0; - BOOST_CHECK_EQUAL(const_cast(vfpprodTable)(t,w,g,a,f), index*conversion_factor); - } - } - } - } - } - } -} - - - -/** - * Checks that the VFPPROD table will succeed with a minimal set of - * specified values. - */ -BOOST_AUTO_TEST_CASE(VFPProdTable_minimal_Test) { - const char *deckData = "\ -VFPPROD \n\ --- Table Depth Rate WFR GFR \n\ --- ----- ----- ----- ----- ----- \n\ - 5 32.9 'LIQ' 'WCT' 'GOR' / \n\ --- Rate axis \n\ -1 / \n\ --- THP axis \n\ -7 / \n\ --- WFR axis \n\ -13 / \n\ --- GFR axis \n\ -19 / \n\ --- ALQ axis \n\ -29 / \n\ --- Table data with THP# WFR# GFR# ALQ# \n\ -1 1 1 1 1.5 / \n"; - - Opm::Parser parser; - auto deck = parser.parseString(deckData); - const auto& vfpprodKeyword = deck.getKeyword("VFPPROD"); - auto units = Opm::UnitSystem::newMETRIC(); - - BOOST_CHECK_EQUAL(deck.count("VFPPROD"), 1); - - Opm::VFPProdTable vfpprodTable(vfpprodKeyword, units); - - BOOST_CHECK_EQUAL(vfpprodTable.getTableNum(), 5); - BOOST_CHECK_EQUAL(vfpprodTable.getDatumDepth(), 32.9); - BOOST_CHECK_EQUAL(vfpprodTable.getFloType(), Opm::VFPProdTable::FLO_LIQ); - BOOST_CHECK_EQUAL(vfpprodTable.getWFRType(), Opm::VFPProdTable::WFR_WCT); - BOOST_CHECK_EQUAL(vfpprodTable.getGFRType(), Opm::VFPProdTable::GFR_GOR); - BOOST_CHECK_EQUAL(vfpprodTable.getALQType(), Opm::VFPProdTable::ALQ_UNDEF); - - //Flo axis - { - const std::vector& flo = vfpprodTable.getFloAxis(); - BOOST_REQUIRE_EQUAL(flo.size(), 1); - - //Unit of FLO is SM3/day, convert to SM3/second - double conversion_factor = 1.0 / (60*60*24); - BOOST_CHECK_EQUAL(flo[0], 1*conversion_factor); - } - - //THP axis - { - const std::vector& thp = vfpprodTable.getTHPAxis(); - BOOST_REQUIRE_EQUAL(thp.size(), 1); - - //Unit of THP is barsa => convert to pascal - double conversion_factor = 100000.0; - BOOST_CHECK_EQUAL(thp[0], 7*conversion_factor); - } - - //WFR axis - { - const std::vector& wfr = vfpprodTable.getWFRAxis(); - BOOST_REQUIRE_EQUAL(wfr.size(), 1); - - //Unit of WFR is SM3/SM3 - BOOST_CHECK_EQUAL(wfr[0], 13); - } - - //GFR axis - { - const std::vector& gfr = vfpprodTable.getGFRAxis(); - BOOST_REQUIRE_EQUAL(gfr.size(), 1); - - //Unit of GFR is SM3/SM3 - BOOST_CHECK_EQUAL(gfr[0], 19); - } - - //ALQ axis - { - const std::vector& alq = vfpprodTable.getALQAxis(); - BOOST_REQUIRE_EQUAL(alq.size(), 1); - - //Unit of ALQ undefined - BOOST_CHECK_EQUAL(alq[0], 29); - } - - //The data itself - { - const auto size = vfpprodTable.shape(); - - //Table given as BHP => barsa. Convert to pascal - double conversion_factor = 100000.0; - - BOOST_CHECK_EQUAL(size[0]*size[1]*size[2]*size[3]*size[4], 1); - BOOST_CHECK_EQUAL(const_cast(vfpprodTable)(0,0,0,0,0), 1.5*conversion_factor); - } -} - -BOOST_AUTO_TEST_CASE(JFuncTestThrowingOnBrokenData) { - auto deck = createSingleRecordDeckWithJFuncBrokenFlag(); - BOOST_CHECK_THROW(Opm::TableManager tm (deck), std::invalid_argument); - - auto deck2 = createSingleRecordDeckWithJFuncBrokenDirection(); - BOOST_CHECK_THROW(Opm::TableManager tm2 (deck2), std::invalid_argument); -} - -BOOST_AUTO_TEST_CASE(JFuncTestThrowingGalore) { - auto deck = createSingleRecordDeckWithVd(); - Opm::TableManager tables(deck); - BOOST_CHECK(!tables.useJFunc()); - //TODO uncomment BOOST_CHECK_THROW(tables.getJFunc(), std::invalid_argument); -} - -BOOST_AUTO_TEST_CASE(JFuncTest) { - const auto deck = createSingleRecordDeckWithJFuncBoth(); - Opm::TableManager tables(deck); - BOOST_CHECK(tables.useJFunc()); - - const Opm::JFunc& jt = tables.getJFunc(); - BOOST_CHECK(jt.flag() == Opm::JFunc::Flag::BOTH); - BOOST_CHECK_CLOSE(jt.owSurfaceTension(), 55.0, epsilon()); - BOOST_CHECK_CLOSE(jt.goSurfaceTension(), 88.0, epsilon()); - BOOST_CHECK_CLOSE(jt.alphaFactor(), 0.5, epsilon()); // default - BOOST_CHECK_CLOSE(jt.betaFactor(), 0.5, epsilon()); // default - BOOST_CHECK(jt.direction() == Opm::JFunc::Direction::XY); // default - - // full specification = WATER 2.7182 3.1416 0.6 0.7 Z - const auto deck2 = createSingleRecordDeckWithFullJFunc(); - Opm::TableManager tables2(deck2); - BOOST_CHECK(tables2.useJFunc()); - - const auto& jt2 = tables2.getJFunc(); - BOOST_CHECK(jt2.flag() == Opm::JFunc::Flag::WATER); - BOOST_CHECK_CLOSE(jt2.owSurfaceTension(), 2.7182, epsilon()); - BOOST_CHECK_THROW(jt2.goSurfaceTension(), std::invalid_argument); - BOOST_CHECK_CLOSE(jt2.alphaFactor(), 0.6, epsilon()); // default - BOOST_CHECK_CLOSE(jt2.betaFactor(), 0.7, epsilon()); // default - BOOST_CHECK(jt2.direction() == Opm::JFunc::Direction::Z); // default -} - - - -/** - * Spot checks that the VFPPROD table will fail nicely when given invalid data - */ -BOOST_AUTO_TEST_CASE(VFPProdTable_sad_Test) { - /** - * Missing value in table - */ - { - const char *missing_values = "\ -VFPPROD \n\ --- Table Depth Rate WFR GFR \n\ --- ----- ----- ----- ----- ----- \n\ - 5 32.9 'LIQ' 'WCT' 'GOR' / \n\ --- Rate axis \n\ -1 2 / \n\ --- THP axis \n\ -7 / \n\ --- WFR axis \n\ -13 / \n\ --- GFR axis \n\ -19 / \n\ --- ALQ axis \n\ -29 / \n\ --- Table data with THP# WFR# GFR# ALQ# \n\ --- Will fail, as rate axis requires two elements \n\ -1 1 1 1 1.5 / \n"; - - Opm::Parser parser; - auto deck = parser.parseString(missing_values); - const auto& vfpprodKeyword = deck.getKeyword("VFPPROD"); - auto units = Opm::UnitSystem::newMETRIC(); - BOOST_CHECK_EQUAL(deck.count("VFPPROD"), 1); - - BOOST_CHECK_THROW(Opm::VFPProdTable(vfpprodKeyword, units), std::invalid_argument); - } - - - - /** - * Missing value in table #2 - */ - { - const char *missing_values = "\ -VFPPROD \n\ --- Table Depth Rate WFR GFR \n\ --- ----- ----- ----- ----- ----- \n\ - 5 32.9 'LIQ' 'WCT' 'GOR' / \n\ --- Rate axis \n\ -1 / \n\ --- THP axis \n\ -7 9 / \n\ --- WFR axis \n\ -13 / \n\ --- GFR axis \n\ -19 / \n\ --- ALQ axis \n\ -29 / \n\ --- Table data with THP# WFR# GFR# ALQ# \n\ --- Will fail, as two entries are required \n\ -1 1 1 1 1.5 / \n"; - - Opm::Parser parser; - auto deck = parser.parseString(missing_values); - const auto& vfpprodKeyword = deck.getKeyword("VFPPROD"); - auto units = Opm::UnitSystem::newMETRIC(); - BOOST_CHECK_EQUAL(deck.count("VFPPROD"), 1); - - BOOST_CHECK_THROW(Opm::VFPProdTable(vfpprodKeyword, units), std::invalid_argument); - } - - - /** - * Missing items in header - */ - { - const char *missing_metadata = "\ -VFPPROD \n\ --- Table Depth \n\ --- ----- ----- \n\ - 5 32.9 / \n\ --- Rate axis \n\ -1 2 / \n\ --- THP axis \n\ -7 / \n\ --- WFR axis \n\ -13 / \n\ --- GFR axis \n\ -19 / \n\ --- ALQ axis \n\ -29 / \n\ --- Table data with THP# WFR# GFR# ALQ# \n\ -1 1 1 1 1.5 2.5 / \n"; - - Opm::Parser parser; - auto deck = parser.parseString(missing_metadata); - const auto& vfpprodKeyword = deck.getKeyword("VFPPROD"); - auto units = Opm::UnitSystem::newMETRIC(); - BOOST_CHECK_EQUAL(deck.count("VFPPROD"), 1); - - BOOST_CHECK_THROW(Opm::VFPProdTable(vfpprodKeyword, units), std::invalid_argument); - } - - - - /** - * Wrong items in header - */ - { - const char *wrong_metadata = "\ -VFPPROD \n\ --- Table Depth \n\ --- ----- ----- \n\ - 5 32.9 'WCT' 'LIC' 'GARBAGE' / \n\ --- Rate axis \n\ -1 2 / \n\ --- THP axis \n\ -7 / \n\ --- WFR axis \n\ -13 / \n\ --- GFR axis \n\ -19 / \n\ --- ALQ axis \n\ -29 / \n\ --- Table data with THP# WFR# GFR# ALQ# \n\ -1 1 1 1 1.5 2.5 / \n"; - - Opm::Parser parser; - auto deck = parser.parseString(wrong_metadata); - const auto& vfpprodKeyword = deck.getKeyword("VFPPROD"); - auto units = Opm::UnitSystem::newMETRIC(); - BOOST_CHECK_EQUAL(deck.count("VFPPROD"), 1); - - BOOST_CHECK_THROW(Opm::VFPProdTable(vfpprodKeyword, units), std::invalid_argument); - } - - - - /** - * Wrong axes in header - */ - { - const char *missing_axes = "\ -VFPPROD \n\ --- Table Depth \n\ --- ----- ----- \n\ - 5 32.9 'LIC' 'WCT' 'OGR' / \n\ --- Rate axis \n\ -1 2 / \n\ --- THP axis \n\ -7 / \n\ --- WFR axis \n\ -13 / \n\ --- GFR axis \n\ -19 / \n\ --- ALQ axis \n\ --- Missing! \n\ --- Table data with THP# WFR# GFR# ALQ# \n\ -1 1 1 1 1.5 2.5 / \n"; - - Opm::Parser parser; - auto deck = parser.parseString(missing_axes); - const auto& vfpprodKeyword = deck.getKeyword("VFPPROD"); - auto units = Opm::UnitSystem::newMETRIC(); - BOOST_CHECK_EQUAL(deck.count("VFPPROD"), 1); - - BOOST_CHECK_THROW(Opm::VFPProdTable(vfpprodKeyword, units), std::invalid_argument); - } -} - - - - - -/** - * Tests "happy path" for a VFPPROD table, i.e., when everything goes well - */ -BOOST_AUTO_TEST_CASE(VFPInjTable_happy_Test) { - const char *deckData = "\ -VFPINJ \n\ --- Table Depth Rate TAB UNITS BODY \n\ --- ----- ----- ----- ----- ------ ----- \n\ - 5 32.9 WAT THP METRIC BHP / \n\ --- Rate axis \n\ -1 3 5 / \n\ --- THP axis \n\ -7 11 / \n\ --- Table data with THP# \n\ -1 1.5 2.5 3.5 / \n\ -2 4.5 5.5 6.5 / \n"; - - Opm::Parser parser; - auto deck = parser.parseString(deckData); - const auto& vfpprodKeyword = deck.getKeyword("VFPINJ"); - auto units = Opm::UnitSystem::newMETRIC(); - - BOOST_CHECK_EQUAL(deck.count("VFPINJ"), 1); - - Opm::VFPInjTable vfpinjTable(vfpprodKeyword, units); - - BOOST_CHECK_EQUAL(vfpinjTable.getTableNum(), 5); - BOOST_CHECK_EQUAL(vfpinjTable.getDatumDepth(), 32.9); - BOOST_CHECK_EQUAL(vfpinjTable.getFloType(), Opm::VFPInjTable::FLO_WAT); - - //Flo axis - { - const std::vector& flo = vfpinjTable.getFloAxis(); - BOOST_REQUIRE_EQUAL(flo.size(), 3); - - //Unit of FLO is SM3/day, convert to SM3/second - double conversion_factor = 1.0 / (60*60*24); - BOOST_CHECK_EQUAL(flo[0], 1*conversion_factor); - BOOST_CHECK_EQUAL(flo[1], 3*conversion_factor); - BOOST_CHECK_EQUAL(flo[2], 5*conversion_factor); - } - - //THP axis - { - const std::vector& thp = vfpinjTable.getTHPAxis(); - BOOST_REQUIRE_EQUAL(thp.size(), 2); - - //Unit of THP is barsa => convert to pascal - double conversion_factor = 100000.0; - BOOST_CHECK_EQUAL(thp[0], 7*conversion_factor); - BOOST_CHECK_EQUAL(thp[1], 11*conversion_factor); - } - - //The data itself - { - typedef Opm::VFPInjTable::array_type::size_type size_type; - const auto size = vfpinjTable.shape(); - - BOOST_CHECK_EQUAL(size[0], 2); - BOOST_CHECK_EQUAL(size[1], 3); - - //Table given as BHP => barsa. Convert to pascal - double conversion_factor = 100000.0; - - double index = 0.5; - for (size_type t = 0; t < size[0]; ++t) { - for (size_type f = 0; f < size[1]; ++f) { - index += 1.0; - BOOST_CHECK_EQUAL(const_cast(vfpinjTable)(t,f), index*conversion_factor); - } - } - } -} - - - - - - - - - - - -BOOST_AUTO_TEST_CASE(TestTableContainer) { - auto deck = createSingleRecordDeck(); - Opm::TableManager tables( deck ); - BOOST_CHECK_EQUAL( false , tables.hasTables("SGOF") ); - BOOST_CHECK_EQUAL( false , tables.hasTables("STUPID") ); - - BOOST_CHECK_THROW( tables.getTables("STUPID") , std::invalid_argument); - BOOST_CHECK_THROW( tables["STUPID"] , std::invalid_argument); -} - -/** - * Spot checks that the VFPPROD table will fail nicely when given invalid data - */ -BOOST_AUTO_TEST_CASE(VFPInjTable_sad_Test) { - /** - * Missing value in table - */ - { - const char *missing_values = "\ -VFPINJ \n\ --- Table Depth Rate TAB UNITS BODY \n\ --- ----- ----- ----- ----- ------ ----- \n\ - 5 32.9 WAT THP METRIC BHP / \n\ --- Rate axis \n\ -1 3 5 / \n\ --- THP axis \n\ -7 11 / \n\ --- Table data with THP# \n\ --- Will fail, as rate axis requires three elements \n\ -1 1.5 2.5 / \n\ -2 4.5 5.5 / \n"; - - Opm::Parser parser; - auto deck = parser.parseString(missing_values); - const auto& vfpinjKeyword = deck.getKeyword("VFPINJ"); - auto units = Opm::UnitSystem::newMETRIC(); - BOOST_CHECK_EQUAL(deck.count("VFPINJ"), 1); - - BOOST_CHECK_THROW(Opm::VFPProdTable(vfpinjKeyword, units), std::invalid_argument); - } - - - - /** - * Missing value in table #2 - */ - { - const char *missing_values = "\ -VFPINJ \n\ --- Table Depth Rate TAB UNITS BODY \n\ --- ----- ----- ----- ----- ------ ----- \n\ - 5 32.9 WAT THP METRIC BHP / \n\ --- Rate axis \n\ -1 3 5 / \n\ --- THP axis \n\ -7 11 / \n\ --- Table data with THP# \n\ --- Will fail, as two entries are required \n\ -1 1.5 2.5 3.5 / \n"; - - Opm::Parser parser; - auto deck = parser.parseString(missing_values); - const auto& vfpinjKeyword = deck.getKeyword("VFPINJ"); - auto units = Opm::UnitSystem::newMETRIC(); - BOOST_CHECK_EQUAL(deck.count("VFPINJ"), 1); - - BOOST_CHECK_THROW(Opm::VFPProdTable(vfpinjKeyword, units), std::invalid_argument); - } - - - /** - * Missing items in header - */ - { - const char *missing_metadata = "\ -VFPINJ \n\ --- Table Depth \n\ --- ----- ----- \n\ - 5 32.9 / \n\ --- Rate axis \n\ -1 3 5 / \n\ --- THP axis \n\ -7 11 / \n\ --- Table data with THP# \n\ -1 1.5 2.5 3.5 / \n\ -2 4.5 5.5 6.5 / \n"; - - Opm::Parser parser; - auto deck = parser.parseString(missing_metadata); - const auto& vfpinjKeyword = deck.getKeyword("VFPINJ"); - auto units = Opm::UnitSystem::newMETRIC(); - BOOST_CHECK_EQUAL(deck.count("VFPINJ"), 1); - - BOOST_CHECK_THROW(Opm::VFPProdTable(vfpinjKeyword, units), std::invalid_argument); - } - - - - /** - * Wrong items in header - */ - { - const char *wrong_metadata = "\ -VFPINJ \n\ --- Table Depth Rate TAB UNITS BODY \n\ --- ----- ----- ----- ----- ------ ----- \n\ - 5 32.9 GOR BHP FOO GAGA / \n\ --- Rate axis \n\ -1 3 5 / \n\ --- THP axis \n\ -7 11 / \n\ --- Table data with THP# \n\ -1 1.5 2.5 3.5 / \n\ -2 4.5 5.5 6.5 / \n"; - - Opm::Parser parser; - auto deck = parser.parseString(wrong_metadata); - const auto& vfpinjKeyword = deck.getKeyword("VFPINJ"); - auto units(Opm::UnitSystem::newMETRIC()); - BOOST_CHECK_EQUAL(deck.count("VFPINJ"), 1); - - BOOST_CHECK_THROW(Opm::VFPProdTable(vfpinjKeyword, units), std::invalid_argument); - } - - - - /** - * Wrong axes in header - */ - { - const char *missing_axes = "\ -VFPINJ \n\ --- Table Depth Rate TAB UNITS BODY \n\ --- ----- ----- ----- ----- ------ ----- \n\ - 5 32.9 WAT THP METRIC BHP / \n\ --- Rate axis \n\ -1 3 5 / \n\ --- THP axis \n\ --- Missing! \n\ --- Table data with THP# \n\ -1 1.5 2.5 3.5 / \n\ -2 4.5 5.5 6.5 / \n"; - - Opm::Parser parser; - auto deck = parser.parseString(missing_axes); - const auto& vfpinjKeyword = deck.getKeyword("VFPINJ"); - auto units = Opm::UnitSystem::newMETRIC(); - BOOST_CHECK_EQUAL(deck.count("VFPINJ"), 1); - - BOOST_CHECK_THROW(Opm::VFPProdTable(vfpinjKeyword, units), std::invalid_argument); - } -} - - -BOOST_AUTO_TEST_CASE( TestPLYMWINJ ) { - const char *inputstring = - "PLYMWINJ \n" - " 2 / -- table number \n" - " 0.0 200.0 800.0 / -- throughput values \n" - " 0.0 1.0 2.0 3.0 / -- velocity values \n" - " -- the rest will be the polymer molecular weight \n" - " -- each row corresponds to one sample points in the throughput direction \n" - " 20. 19. 18. 16. /\n" - " 20. 16. 14. 12. /\n" - " 20. 12. 8. 4. /\n" - "/\n" - "PLYMWINJ \n" - " 3 / -- table number \n" - " 0.0 100.0 / -- throughput values \n" - " 0.0 1.0 2.0 / -- velocity values \n" - " -- the rest will be the polymer molecular weight \n" - " -- each row corresponds to one sample points in the throughput direction \n" - " 20. 19. 18. /\n" - " 20. 16. 14. /\n" - "/\n"; - - Opm::Parser parser; - const Opm::Deck deck = parser.parseString(inputstring); - const Opm::TableManager tables( deck ); - const auto& plymwinjtables = tables.getPlymwinjTables(); - - BOOST_CHECK_EQUAL( plymwinjtables.size(), 2 ); - - BOOST_CHECK( plymwinjtables.find(1) == plymwinjtables.end() ); - - { - const auto searchtable2 = plymwinjtables.find(2); - BOOST_CHECK( searchtable2 != plymwinjtables.end() ); - const auto& table2 = searchtable2->second; - BOOST_CHECK_EQUAL( searchtable2->first, table2.getTableNumber() ); - BOOST_CHECK_EQUAL( table2.getTableNumber(), 2 ); - - const std::vector& throughputs = table2.getThroughputs(); - BOOST_CHECK_EQUAL( throughputs.size(), 3 ); - BOOST_CHECK_EQUAL( throughputs[1], 200.0 ); - const std::vector& velocities = table2.getVelocities(); - BOOST_CHECK_EQUAL( velocities.size(), 4 ); - constexpr double dayinseconds = 86400.; - BOOST_CHECK_EQUAL( velocities[2], 2.0 / dayinseconds ); - const std::vector>& mwdata = table2.getMoleWeights(); - - BOOST_CHECK_EQUAL( mwdata.size(), throughputs.size() ); - for (const auto& data : mwdata) { - BOOST_CHECK_EQUAL( data.size(), velocities.size() ); - } - BOOST_CHECK_EQUAL(mwdata[2][3], 4.0); - BOOST_CHECK_EQUAL(mwdata[1][1], 16.0); - } - - { - const auto searchtable3 = plymwinjtables.find(3); - BOOST_CHECK( searchtable3 != plymwinjtables.end() ); - const auto& table3 = searchtable3->second; - BOOST_CHECK_EQUAL( searchtable3->first, table3.getTableNumber() ); - BOOST_CHECK_EQUAL( table3.getTableNumber(), 3 ); - - const std::vector& throughputs = table3.getThroughputs(); - BOOST_CHECK_EQUAL( throughputs.size(), 2 ); - BOOST_CHECK_EQUAL( throughputs[1], 100.0 ); - const std::vector& velocities = table3.getVelocities(); - BOOST_CHECK_EQUAL( velocities.size(), 3 ); - constexpr double dayinseconds = 86400.; - BOOST_CHECK_EQUAL( velocities[2], 2.0 / dayinseconds ); - const std::vector>& mwdata = table3.getMoleWeights(); - - BOOST_CHECK_EQUAL( mwdata.size(), throughputs.size() ); - for (const auto& data : mwdata) { - BOOST_CHECK_EQUAL( data.size(), velocities.size() ); - } - BOOST_CHECK_EQUAL(mwdata[1][2], 14.0); - BOOST_CHECK_EQUAL(mwdata[0][0], 20.0); - } -} - -BOOST_AUTO_TEST_CASE( TestSKPRWAT ) { - const char *inputstring = - "SKPRWAT \n" - " 1 / -- table number \n" - " 0.0 200.0 800.0 / -- throughput values \n" - " 0.0 1.0 2.0 3.0 / -- velocity values \n" - " -- the rest will be the skin pressure \n" - " -- each row corresponds to one sample points in the throughput direction \n" - " 20. 19. 18. 16. /\n" - " 20. 16. 14. 12. /\n" - " 20. 12. 8. 4. /\n" - "/\n" - "SKPRWAT \n" - " 2 / -- table number \n" - " 0.0 100.0 / -- throughput values \n" - " 0.0 1.0 2.0 / -- velocity values \n" - " -- the rest will be the skin pressure \n" - " -- each row corresponds to one sample points in the throughput direction \n" - " 20. 19. 18. /\n" - " 20. 16. 14. /\n" - "/\n"; - - - - Opm::Parser parser; - const Opm::Deck deck = parser.parseString(inputstring); - const Opm::TableManager tables( deck ); - const auto& skprwattables = tables.getSkprwatTables(); - - BOOST_CHECK_EQUAL( skprwattables.size(), 2 ); - - BOOST_CHECK( skprwattables.find(3) == skprwattables.end() ); - - { - const auto searchtable1 = skprwattables.find(1); - BOOST_CHECK( searchtable1 != skprwattables.end() ); - const auto& table1 = searchtable1->second; - BOOST_CHECK_EQUAL( searchtable1->first, table1.getTableNumber() ); - BOOST_CHECK_EQUAL( table1.getTableNumber(), 1 ); - - const std::vector& throughputs = table1.getThroughputs(); - BOOST_CHECK_EQUAL( throughputs.size(), 3 ); - BOOST_CHECK_EQUAL( throughputs[1], 200.0 ); - const std::vector& velocities = table1.getVelocities(); - BOOST_CHECK_EQUAL( velocities.size(), 4 ); - constexpr double dayinseconds = 86400.; - BOOST_CHECK_EQUAL( velocities[2], 2.0 / dayinseconds ); - const std::vector>& skindata = table1.getSkinPressures(); - - BOOST_CHECK_EQUAL( skindata.size(), throughputs.size() ); - for (const auto& data : skindata) { - BOOST_CHECK_EQUAL( data.size(), velocities.size() ); - } - constexpr double barsa = 1.0e5; - BOOST_CHECK_EQUAL(skindata[2][3], 4.0 * barsa); - BOOST_CHECK_EQUAL(skindata[1][1], 16.0 * barsa); - } - - { - const auto searchtable2 = skprwattables.find(2); - BOOST_CHECK( searchtable2 != skprwattables.end() ); - const auto& table2 = searchtable2->second; - BOOST_CHECK_EQUAL( searchtable2->first, table2.getTableNumber() ); - BOOST_CHECK_EQUAL( table2.getTableNumber(), 2 ); - - const std::vector& throughputs = table2.getThroughputs(); - BOOST_CHECK_EQUAL( throughputs.size(), 2 ); - BOOST_CHECK_EQUAL( throughputs[1], 100.0 ); - const std::vector& velocities = table2.getVelocities(); - BOOST_CHECK_EQUAL( velocities.size(), 3 ); - constexpr double dayinseconds = 86400.; - BOOST_CHECK_EQUAL( velocities[2], 2.0 / dayinseconds ); - const std::vector>& skindata = table2.getSkinPressures(); - - BOOST_CHECK_EQUAL( skindata.size(), throughputs.size() ); - for (const auto& data : skindata) { - BOOST_CHECK_EQUAL( data.size(), velocities.size() ); - } - constexpr double barsa = 1.0e5; - BOOST_CHECK_EQUAL(skindata[1][2], 14.0 * barsa); - BOOST_CHECK_EQUAL(skindata[0][0], 20.0 * barsa); - } -} - -BOOST_AUTO_TEST_CASE( TestSKPRPOLY ) { - const char *inputstring = - "SKPRPOLY \n" - " 1 2.0 / -- table number & reference concentration \n" - " 0.0 200.0 800.0 / -- throughput values \n" - " 0.0 1.0 2.0 3.0 / -- velocity values \n" - " -- the rest will be the skin pressure \n" - " -- each row corresponds to one sample points in the throughput direction \n" - " 20. 19. 18. 16. /\n" - " 20. 16. 14. 12. /\n" - " 20. 12. 8. 4. /\n" - "/\n" - "SKPRPOLY \n" - " 2 3.0 / -- table number & reference concentration \n" - " 0.0 100.0 / -- throughput values \n" - " 0.0 1.0 2.0 / -- velocity values \n" - " -- the rest will be the skin pressure \n" - " -- each row corresponds to one sample points in the throughput direction \n" - " 20. 19. 18. /\n" - " 20. 16. 14. /\n" - "/\n"; - - Opm::Parser parser; - const Opm::Deck deck = parser.parseString(inputstring); - const Opm::TableManager tables( deck ); - const auto& skprpolytables = tables.getSkprpolyTables(); - - BOOST_CHECK_EQUAL( skprpolytables.size(), 2 ); - - BOOST_CHECK( skprpolytables.find(4) == skprpolytables.end() ); - - { - const auto searchtable1 = skprpolytables.find(1); - BOOST_CHECK( searchtable1 != skprpolytables.end() ); - const auto& table1 = searchtable1->second; - BOOST_CHECK_EQUAL( searchtable1->first, table1.getTableNumber() ); - BOOST_CHECK_EQUAL( table1.getTableNumber(), 1 ); - - BOOST_CHECK_EQUAL( table1.referenceConcentration(), 2.0 ); - const std::vector& throughputs = table1.getThroughputs(); - BOOST_CHECK_EQUAL( throughputs.size(), 3 ); - BOOST_CHECK_EQUAL( throughputs[1], 200.0 ); - const std::vector& velocities = table1.getVelocities(); - BOOST_CHECK_EQUAL( velocities.size(), 4 ); - constexpr double dayinseconds = 86400.; - BOOST_CHECK_EQUAL( velocities[2], 2.0 / dayinseconds ); - const std::vector>& skindata = table1.getSkinPressures(); - - BOOST_CHECK_EQUAL( skindata.size(), throughputs.size() ); - for (const auto& data : skindata) { - BOOST_CHECK_EQUAL( data.size(), velocities.size() ); - } - constexpr double barsa = 1.0e5; - BOOST_CHECK_EQUAL(skindata[2][3], 4.0 * barsa); - BOOST_CHECK_EQUAL(skindata[1][1], 16.0 * barsa); - } - - { - const auto searchtable2 = skprpolytables.find(2); - BOOST_CHECK( searchtable2 != skprpolytables.end() ); - const auto& table2 = searchtable2->second; - BOOST_CHECK_EQUAL( searchtable2->first, table2.getTableNumber() ); - BOOST_CHECK_EQUAL( table2.getTableNumber(), 2 ); - - BOOST_CHECK_EQUAL( table2.referenceConcentration(), 3.0 ); - const std::vector& throughputs = table2.getThroughputs(); - BOOST_CHECK_EQUAL( throughputs.size(), 2 ); - BOOST_CHECK_EQUAL( throughputs[1], 100.0 ); - const std::vector& velocities = table2.getVelocities(); - BOOST_CHECK_EQUAL( velocities.size(), 3 ); - constexpr double dayinseconds = 86400.; - BOOST_CHECK_EQUAL( velocities[2], 2.0 / dayinseconds ); - const std::vector>& skindata = table2.getSkinPressures(); - - BOOST_CHECK_EQUAL( skindata.size(), throughputs.size() ); - for (const auto& data : skindata) { - BOOST_CHECK_EQUAL( data.size(), velocities.size() ); - } - constexpr double barsa = 1.0e5; - BOOST_CHECK_EQUAL(skindata[1][2], 14.0 * barsa); - BOOST_CHECK_EQUAL(skindata[0][0], 20.0 * barsa); - } -} - -BOOST_AUTO_TEST_CASE( TestPLYROCK ) { - const char *data = - "TABDIMS\n" - " 2 /\n" - "\n" - "PLYROCK\n" - " 1 2 3 4 5 /\n" - " 10 20 30 40 50 /\n"; - - Opm::Parser parser; - auto deck = parser.parseString(data); - Opm::TableManager tables( deck ); - const Opm::TableContainer& plyrock = tables.getPlyrockTables(); - - BOOST_CHECK_EQUAL( plyrock.size() , 2 ) ; - const Opm::PlyrockTable& table0 = plyrock.getTable(0); - const Opm::PlyrockTable& table1 = plyrock.getTable(1); - - BOOST_CHECK_EQUAL( table0.numColumns() , 5 ); - BOOST_CHECK_EQUAL( table0.getDeadPoreVolumeColumn()[0] , 1.0 ); - BOOST_CHECK_EQUAL( table0.getMaxAdsorbtionColumn()[0] , 5.0 ); - - BOOST_CHECK_EQUAL( table1.numColumns() , 5 ); - BOOST_CHECK_EQUAL( table1.getDeadPoreVolumeColumn()[0] , 10.0 ); - BOOST_CHECK_EQUAL( table1.getMaxAdsorbtionColumn()[0] , 50.0 ); -} - - -BOOST_AUTO_TEST_CASE( TestPLYMAX ) { - const char *data = - "REGDIMS\n" - " 9* 2 /\n" - "\n" - "PLYMAX\n" - " 1 2 /\n" - " 10 20 /\n"; - - Opm::Parser parser; - auto deck = parser.parseString(data); - Opm::TableManager tables( deck ); - const Opm::TableContainer& plymax = tables.getPlymaxTables(); - - BOOST_CHECK_EQUAL( plymax.size() , 2 ) ; - const Opm::PlymaxTable& table0 = plymax.getTable(0); - const Opm::PlymaxTable& table1 = plymax.getTable(1); - - BOOST_CHECK_EQUAL( table0.numColumns() , 2 ); - BOOST_CHECK_EQUAL( table0.getPolymerConcentrationColumn()[0] , 1.0 ); - BOOST_CHECK_EQUAL( table0.getMaxPolymerConcentrationColumn()[0] , 2.0 ); - - BOOST_CHECK_EQUAL( table1.numColumns() , 2 ); - BOOST_CHECK_EQUAL( table1.getPolymerConcentrationColumn()[0] , 10.0 ); - BOOST_CHECK_EQUAL( table1.getMaxPolymerConcentrationColumn()[0] , 20.0 ); -} - -BOOST_AUTO_TEST_CASE( TestParseDENSITY ) { - const std::string data = R"( - TABDIMS - 1* 1 / - - DENSITY - 1.1 1.2 1.3 / - )"; - - Opm::Parser parser; - auto deck = parser.parseString(data); - Opm::TableManager tables( deck ); - const auto& density = tables.getDensityTable(); - BOOST_CHECK_EQUAL( 1.1, density[0].oil ); - BOOST_CHECK_EQUAL( 1.2, density[0].water ); - BOOST_CHECK_EQUAL( 1.3, density[0].gas ); -} - -BOOST_AUTO_TEST_CASE( TestParseROCK ) { - const std::string data = R"( - TABDIMS - 1* 2 * * 8/ - - ROCK - 1.1 1.2 / - 2.1 2.2 / - )"; - - Opm::Parser parser; - auto deck = parser.parseString(data); - Opm::TableManager tables( deck ); - const auto& rock = tables.getRockTable(); - BOOST_CHECK_EQUAL( 1.1 * 1e5, rock[0].reference_pressure ); - BOOST_CHECK_EQUAL( 1.2 * 1e-5, rock[0].compressibility ); - - BOOST_CHECK_EQUAL( 2.1 * 1e5, rock[1].reference_pressure ); - BOOST_CHECK_EQUAL( 2.2 * 1e-5, rock[1].compressibility ); - - BOOST_CHECK_THROW( rock.at( 2 ), std::out_of_range ); - BOOST_CHECK_EQUAL( 8 , tables.numFIPRegions( )); -} - -BOOST_AUTO_TEST_CASE( TestParsePVCDO ) { - const std::string data = R"( - TABDIMS - 1* 1 / - - REGDIMS - 25 / - - PVCDO - 3600 1.12 1.6e-5 0.88 0.0 / - )"; - - Opm::Parser parser; - auto deck = parser.parseString(data); - Opm::TableManager tables( deck ); - const auto& pvcdo = tables.getPvcdoTable(); - - BOOST_CHECK_CLOSE( 3600.00, pvcdo[ 0 ].reference_pressure / 1e5, 1e-5 ); - BOOST_CHECK_CLOSE( 1.12, pvcdo[ 0 ].volume_factor, 1e-5 ); - BOOST_CHECK_CLOSE( 1.6e-5, pvcdo[ 0 ].compressibility * 1e5, 1e-5 ); - BOOST_CHECK_CLOSE( 0.88, pvcdo[ 0 ].viscosity * 1e3, 1e-5 ); - BOOST_CHECK_CLOSE( 0.0, pvcdo[ 0 ].viscosibility * 1e5, 1e-5 ); - - BOOST_CHECK_THROW( pvcdo.at( 1 ), std::out_of_range ); - BOOST_CHECK_EQUAL( 25 , tables.numFIPRegions( )); - - const std::string malformed = R"( - TABDIMS - 1* 1 / - - PVCDO - -- cannot be defaulted - 3600 1* 1.6e-5 0.88 0.0 / - )"; - - auto illegal_default = parser.parseString( malformed ); - BOOST_CHECK_THROW( TableManager{ illegal_default }, std::invalid_argument ); -} - -BOOST_AUTO_TEST_CASE( TestParseTABDIMS ) { - const char *data = - "TABDIMS\n" - " 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 /\n"; - Opm::Parser parser; - BOOST_CHECK_NO_THROW( parser.parseString(data)); -} - -BOOST_AUTO_TEST_CASE (Regdims_Entries) { - - // All defaulted - { - const auto input = std::string { - R"~( -REGDIMS -/ -)~" }; - - const auto tabMgr = ::Opm::TableManager { - ::Opm::Parser{}.parseString(input) - }; - - const auto& rd = tabMgr.getRegdims(); - - BOOST_CHECK_EQUAL(rd.getNTFIP() , std::size_t{1}); - BOOST_CHECK_EQUAL(rd.getNMFIPR(), std::size_t{1}); - BOOST_CHECK_EQUAL(rd.getNRFREG(), std::size_t{0}); - BOOST_CHECK_EQUAL(rd.getNTFREG(), std::size_t{0}); - } - - // All user-specified - { - const auto input = std::string { - R"~( -REGDIMS - 11 22 33 44 55 66 77 88 99 110 -/ -)~" }; - - const auto tabMgr = ::Opm::TableManager { - ::Opm::Parser{}.parseString(input) - }; - - const auto& rd = tabMgr.getRegdims(); - - BOOST_CHECK_EQUAL(rd.getNTFIP() , std::size_t{11}); - BOOST_CHECK_EQUAL(rd.getNMFIPR(), std::size_t{22}); - BOOST_CHECK_EQUAL(rd.getNRFREG(), std::size_t{33}); - BOOST_CHECK_EQUAL(rd.getNTFREG(), std::size_t{44}); - } -} - - - - -BOOST_AUTO_TEST_CASE(DENT) { - const auto deck_string = R"( -RUNSPEC - -TABDIMS - 1 3 / - -PROPS - -GASDENT - 1 2 3 / - 4 5 6 / - 7 8 9 / - -OILDENT - 1 2 3 / - 4 5 6 / - 7 8 9 / - -)"; - - Opm::Parser parser; - const auto& deck = parser.parseString(deck_string); - Opm::TableManager tables(deck); - Opm::DenT gd(deck.getKeyword("GASDENT")); - Opm::DenT od(deck.getKeyword("OILDENT")); - const auto& wd = tables.WatDenT(); - - BOOST_CHECK_EQUAL(gd.size(), 3); - BOOST_CHECK( gd == od ); - BOOST_CHECK( wd.size() == 0); -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/TableSchemaTests.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/TableSchemaTests.cpp deleted file mode 100644 index 5e71a31e34..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/TableSchemaTests.cpp +++ /dev/null @@ -1,47 +0,0 @@ -/* - Copyright (C) 2015 by Statoil ASA - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#define BOOST_TEST_MODULE TableSchemaTests - -#include - - -#include -#include -#include - -using namespace Opm; - - -BOOST_AUTO_TEST_CASE( CreateTest ) { - TableSchema schema; - ColumnSchema col1("Name1" , Table::INCREASING , Table::DEFAULT_NONE); - ColumnSchema col2("Name2" , Table::INCREASING , Table::DEFAULT_NONE); - BOOST_CHECK_EQUAL( 0 , schema.size( ) ); - - schema.addColumn( col1 ); - BOOST_CHECK_EQUAL( 1 , schema.size( ) ); - - schema.addColumn( col2 ); - BOOST_CHECK_EQUAL( 2 , schema.size( ) ); - - BOOST_CHECK_THROW( schema.getColumn( "NO/NOT/THIS/COLUMN" ) , std::invalid_argument ); - BOOST_CHECK_THROW( schema.getColumn( 5 ) , std::invalid_argument ); -} - diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/ThresholdPressureTest.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/ThresholdPressureTest.cpp deleted file mode 100644 index 1cb9278453..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/ThresholdPressureTest.cpp +++ /dev/null @@ -1,315 +0,0 @@ -/* - Copyright 2015 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - - - -#include - -#define BOOST_TEST_MODULE ThresholdPressureTests - -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include - - -using namespace Opm; - -const std::string& inputStr = "RUNSPEC\n" - "EQLOPTS\n" - "THPRES /\n " - "\n" - - "SOLUTION\n" - "THPRES\n" - "1 2 12.0/\n" - "1 3 5.0/\n" - "2 3 33.0 /\n" - "2 3 7.0/\n" - "/\n" - "\n"; -const std::string& inputStr_RESTART = "RUNSPEC\n" - "EQLOPTS\n" - "THPRES /\n " - "\n" - "SOLUTION\n" - "RESTART\n" - " CASE 100 /\n" - "\n"; - -const std::string& inputStr_RESTART2 = "RUNSPEC\n" - "EQLOPTS\n" - "THPRES /\n " - "\n" - "REGIONS\n" - "EQLNUM\n" - " 120*4 /\n" - "SOLUTION\n" - "RESTART\n" - " CASE 100/\n" - "THPRES\n" - "1 3 5.0/\n" - "2 3 33.0 /\n" - "2 4 7.0/\n" - "/\n" - "\n"; - - -const std::string& inputStrWithEqlNum = - "RUNSPEC\n" - "EQLOPTS\n" - "THPRES /\n " - "\n" - "REGIONS\n" - "EQLNUM\n" - " 120*3 /\n" - "SOLUTION\n" - "THPRES\n" - "1 2 12.0/\n" - "1 3 5.0/\n" - "2 3 33.0 /\n" - "2 3 7.0/\n" - "/\n" - "\n"; - - -const std::string& inputStrWithEqlNumall0 = - "RUNSPEC\n" - "EQLOPTS\n" - "THPRES /\n " - "\n" - "REGIONS\n" - "EQLNUM\n" - " 120*0 /\n" - "SOLUTION\n" - "THPRES\n" - "1 2 12.0/\n" - "1 3 5.0/\n" - "2 3 33.0 /\n" - "2 3 7.0/\n" - "/\n" - "\n"; - - -const std::string& inputStrNoSolutionSection = "RUNSPEC\n" - "EQLOPTS\n" - "THPRES /\n " - "\n"; - - -const std::string& inputStrNoTHPRESinSolutionNorRUNSPEC = "RUNSPEC\n" - "\n" - "SOLUTION\n" - "\n" - "SCHEDULE\n"; - -const std::string& inputStrTHPRESinRUNSPECnotSoultion = "RUNSPEC\n" - "EQLOPTS\n" - "ss /\n " - "\n" - "SOLUTION\n" - "\n"; - - - -const std::string& inputStrIrrevers = "RUNSPEC\n" - "EQLOPTS\n" - "THPRES IRREVERS/\n " - "\n" - - "SOLUTION\n" - "THPRES\n" - "/\n" - "\n"; - -const std::string& inputStrInconsistency = "RUNSPEC\n" - "EQLOPTS\n" - "THPRES /\n " - "\n" - - "SOLUTION\n" - "\n"; - -const std::string& inputStrTooHighRegionNumbers = "RUNSPEC\n" - "EQLOPTS\n" - "THPRES /\n " - "\n" - - "SOLUTION\n" - "THPRES\n" - "1 2 12.0/\n" - "4 3 5.0/\n" - "2 3 7.0/\n" - "/\n" - "\n"; - - -const std::string& inputStrMissingData = "RUNSPEC\n" - "EQLOPTS\n" - "THPRES /\n " - "\n" - - "SOLUTION\n" - "THPRES\n" - "1 2 12.0/\n" - "2 3 5.0/\n" - "1 /\n" - "/\n" - "\n"; - - -const std::string& inputStrMissingPressure = "RUNSPEC\n" - "EQLOPTS\n" - "THPRES /\n " - "\n" - "REGIONS\n" - "EQLNUM\n" - " 120*3 /\n" - "SOLUTION\n" - "THPRES\n" - "1 2 12.0/\n" - "2 3 5.0/\n" - "2 3 /\n" - "/\n" - "\n"; - -static Deck createDeck(const ParseContext& parseContext, const std::string& input) { - Opm::Parser parser; - ErrorGuard errors; - return parser.parseString(input, parseContext, errors); -} - -/// Setup fixture -struct Setup -{ - Deck deck; - TableManager tablemanager; - EclipseGrid grid; - FieldPropsManager fp; - InitConfig initConfig; - ThresholdPressure threshPres; - - explicit Setup(const std::string& input) : - deck(createDeck(ParseContext(), input)), - tablemanager(deck), - grid(10, 3, 4), - fp(deck, Opm::Phases{true, true, true}, grid, tablemanager), - initConfig(deck), - threshPres(initConfig.restartRequested(), deck, fp) - { - } - - explicit Setup(const std::string& input, const ParseContext& parseContextArg) : - deck(createDeck(parseContextArg, input)), - tablemanager(deck), - grid(10, 3, 4), - fp(deck, Opm::Phases{true, true, true}, grid, tablemanager), - initConfig(deck), - threshPres(initConfig.restartRequested(), deck, fp) - { - } - -}; - -BOOST_AUTO_TEST_CASE(ThresholdPressureDeckHasEqlnum) { - Setup s(inputStrWithEqlNum); - - BOOST_CHECK(s.fp.has_int("EQLNUM")); -} - -BOOST_AUTO_TEST_CASE(ThresholdPressureTest) { - Setup s(inputStrWithEqlNum); - auto thp = s.threshPres; - - BOOST_CHECK_EQUAL(thp.getThresholdPressure(1, 2), 1200000.0); - BOOST_CHECK_EQUAL(thp.getThresholdPressure(2, 1), 1200000.0); - BOOST_CHECK_EQUAL(thp.getThresholdPressure(1, 3), 500000.0); - BOOST_CHECK_EQUAL(thp.getThresholdPressure(3, 1), 500000.0); - BOOST_CHECK_EQUAL(thp.getThresholdPressure(2, 3), 700000.0); - BOOST_CHECK_EQUAL(thp.getThresholdPressure(3, 2), 700000.0); -} - -BOOST_AUTO_TEST_CASE(ThresholdPressureEmptyTest) { - Setup s(inputStrNoSolutionSection); - BOOST_CHECK_EQUAL(0, s.threshPres.size()); -} - -BOOST_AUTO_TEST_CASE(ThresholdPressureNoTHPREStest) { - Setup s(inputStrNoTHPRESinSolutionNorRUNSPEC); - Setup s2(inputStrTHPRESinRUNSPECnotSoultion); - - BOOST_CHECK_EQUAL(0, s.threshPres.size()); - BOOST_CHECK_EQUAL(0, s.threshPres.size()); -} - -BOOST_AUTO_TEST_CASE(ThresholdPressureThrowTest) { - BOOST_CHECK_THROW(Setup sx(inputStrIrrevers), std::runtime_error); - BOOST_CHECK_THROW(Setup sx(inputStrInconsistency), std::runtime_error); - BOOST_CHECK_THROW(Setup sx(inputStrTooHighRegionNumbers), std::runtime_error); - BOOST_CHECK_THROW(Setup sx(inputStrMissingData), std::runtime_error); - BOOST_CHECK_THROW(Setup sx(inputStr), std::runtime_error); - BOOST_CHECK_THROW(Setup sx(inputStrWithEqlNumall0), std::runtime_error); - - BOOST_CHECK_THROW(Setup sx(inputStr), std::runtime_error); - ParseContext pc; - pc.update(ParseContext::UNSUPPORTED_INITIAL_THPRES, InputError::IGNORE); - BOOST_CHECK_NO_THROW(Setup sx(inputStrMissingPressure, pc)); - - Setup s(inputStrMissingPressure, pc); - BOOST_CHECK( s.threshPres.hasRegionBarrier(2, 3)); - BOOST_CHECK(!s.threshPres.hasThresholdPressure(2, 3)); - - pc.update(ParseContext::INTERNAL_ERROR_UNINITIALIZED_THPRES, InputError::THROW_EXCEPTION); - BOOST_CHECK_THROW(s.threshPres.getThresholdPressure(2, 3), std::invalid_argument); -} - - -BOOST_AUTO_TEST_CASE(Restart) { - Setup sx(inputStr_RESTART); - BOOST_CHECK(sx.threshPres.active()); - BOOST_CHECK_EQUAL(sx.threshPres.size(), 0); - BOOST_CHECK(sx.threshPres.restart()); -} - -BOOST_AUTO_TEST_CASE(Restart2) { - Setup sx(inputStr_RESTART2); - BOOST_CHECK(sx.threshPres.active()); - BOOST_CHECK_EQUAL(sx.threshPres.size(), 3); - BOOST_CHECK(sx.threshPres.restart()); -} - - - - -BOOST_AUTO_TEST_CASE(HasPair) { - Setup s(inputStrWithEqlNum); - - BOOST_CHECK( s.threshPres.hasRegionBarrier(1, 2)); - BOOST_CHECK(!s.threshPres.hasRegionBarrier(1, 7)); - BOOST_CHECK( s.threshPres.hasThresholdPressure(1, 2)); - BOOST_CHECK(!s.threshPres.hasThresholdPressure(1, 7)); - BOOST_CHECK_EQUAL(1200000.0, s.threshPres.getThresholdPressure(1, 2)); -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/TimeMapTest.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/TimeMapTest.cpp deleted file mode 100644 index a800d00850..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/TimeMapTest.cpp +++ /dev/null @@ -1,720 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include -#include -#include - -#define BOOST_TEST_MODULE TimeMapTests - -#include - -#include - -#include -#include -#include -#include -#include -#include -#include - - -const std::time_t startDateJan1st2010 = Opm::TimeMap::mkdate(2010, 1, 1); - -Opm::DeckRecord createDeckRecord(int day, const std::string &month, int year, const std::string &time = "00:00:00.000"); - -BOOST_AUTO_TEST_CASE(GetStartDate) { - Opm::TimeMap timeMap({ startDateJan1st2010 }); - BOOST_CHECK_EQUAL( Opm::TimeMap::mkdate(2010, 1, 1) , timeMap.getStartTime(/*timeStepIdx=*/0)); -} - - - -BOOST_AUTO_TEST_CASE(AddDateNegativeStepThrows) { - std::vector time_points = { Opm::asTimeT(Opm::TimeStampUTC(2000,1,1)), Opm::asTimeT(Opm::TimeStampUTC(1999,1,1))}; - BOOST_CHECK_THROW(Opm::TimeMap timeMap(time_points), std::invalid_argument); -} - - -BOOST_AUTO_TEST_CASE(AddStepSizeCorrect) { - std::vector time_points = { Opm::asTimeT(Opm::TimeStampUTC(2010,1,1)), - Opm::asTimeT(Opm::TimeStampUTC(2010,1,2)), - Opm::asTimeT(Opm::TimeStampUTC(2010,1,3))}; - Opm::TimeMap timeMap(time_points); - BOOST_CHECK_EQUAL(3U, timeMap.size()); - - BOOST_CHECK_THROW(timeMap[3] , std::invalid_argument ); - BOOST_CHECK_EQUAL(timeMap[0] , Opm::TimeMap::mkdate(2010, 1, 1 )); - BOOST_CHECK_EQUAL(timeMap[2] , Opm::TimeMap::mkdate(2010, 1, 3 )); -} - - -BOOST_AUTO_TEST_CASE( dateFromEclipseThrowsInvalidRecord ) { - Opm::DeckRecord startRecord; - Opm::DeckItem dayItem("DAY", int() ); - Opm::DeckItem monthItem("MONTH", std::string() ); - Opm::DeckItem yearItem("YEAR", int() ); - Opm::DeckItem timeItem("TIME", std::string() ); - Opm::DeckItem extraItem("EXTRA", int() ); - - dayItem.push_back( 10 ); - yearItem.push_back(1987 ); - monthItem.push_back("FEB"); - timeItem.push_back("00:00:00.000"); - - BOOST_CHECK_THROW( Opm::TimeMap::timeFromEclipse( startRecord ) , std::out_of_range ); - - startRecord.addItem( dayItem ); - BOOST_CHECK_THROW( Opm::TimeMap::timeFromEclipse( startRecord ) , std::out_of_range ); - - startRecord.addItem( monthItem ); - BOOST_CHECK_THROW( Opm::TimeMap::timeFromEclipse( startRecord ) , std::out_of_range ); - - startRecord.addItem( yearItem ); - BOOST_CHECK_THROW(Opm::TimeMap::timeFromEclipse( startRecord ) , std::out_of_range ); - - startRecord.addItem( timeItem ); - BOOST_CHECK_NO_THROW(Opm::TimeMap::timeFromEclipse( startRecord )); -} - - - -BOOST_AUTO_TEST_CASE( dateFromEclipseInvalidMonthThrows ) { - Opm::DeckRecord startRecord; - Opm::DeckItem dayItem( "DAY", int() ); - Opm::DeckItem monthItem( "MONTH", std::string() ); - Opm::DeckItem yearItem( "YEAR", int() ); - Opm::DeckItem timeItem( "TIME", std::string() ); - - dayItem.push_back( 10 ); - yearItem.push_back(1987 ); - monthItem.push_back("XXX"); - timeItem.push_back("00:00:00.000"); - - startRecord.addItem( dayItem ); - startRecord.addItem( monthItem ); - startRecord.addItem( yearItem ); - startRecord.addItem( timeItem ); - - BOOST_CHECK_THROW( Opm::TimeMap::timeFromEclipse( startRecord ) , std::out_of_range ); -} - - -BOOST_AUTO_TEST_CASE( timeFromEclipseCheckMonthNames ) { - BOOST_CHECK_EQUAL( Opm::TimeMap::mkdate(2000, 1, 1), Opm::TimeMap::timeFromEclipse(createDeckRecord(1, "JAN", 2000))); - BOOST_CHECK_EQUAL( Opm::TimeMap::mkdate(2000, 2, 1), Opm::TimeMap::timeFromEclipse(createDeckRecord(1, "FEB", 2000))); - BOOST_CHECK_EQUAL( Opm::TimeMap::mkdate(2000, 3, 1), Opm::TimeMap::timeFromEclipse(createDeckRecord(1, "MAR", 2000))); - BOOST_CHECK_EQUAL( Opm::TimeMap::mkdate(2000, 4, 1), Opm::TimeMap::timeFromEclipse(createDeckRecord(1, "APR", 2000))); - BOOST_CHECK_EQUAL( Opm::TimeMap::mkdate(2000, 5, 1), Opm::TimeMap::timeFromEclipse(createDeckRecord(1, "MAI", 2000))); - BOOST_CHECK_EQUAL( Opm::TimeMap::mkdate(2000, 5, 1), Opm::TimeMap::timeFromEclipse(createDeckRecord(1, "MAY", 2000))); - BOOST_CHECK_EQUAL( Opm::TimeMap::mkdate(2000, 6, 1), Opm::TimeMap::timeFromEclipse(createDeckRecord(1, "JUN", 2000))); - BOOST_CHECK_EQUAL( Opm::TimeMap::mkdate(2000, 7, 1), Opm::TimeMap::timeFromEclipse(createDeckRecord(1, "JUL", 2000))); - BOOST_CHECK_EQUAL( Opm::TimeMap::mkdate(2000, 7, 1), Opm::TimeMap::timeFromEclipse(createDeckRecord(1, "JLY", 2000))); - BOOST_CHECK_EQUAL( Opm::TimeMap::mkdate(2000, 8, 1), Opm::TimeMap::timeFromEclipse(createDeckRecord(1, "AUG", 2000))); - BOOST_CHECK_EQUAL( Opm::TimeMap::mkdate(2000, 9, 1), Opm::TimeMap::timeFromEclipse(createDeckRecord(1, "SEP", 2000))); - BOOST_CHECK_EQUAL( Opm::TimeMap::mkdate(2000, 10, 1), Opm::TimeMap::timeFromEclipse(createDeckRecord(1, "OKT", 2000))); - BOOST_CHECK_EQUAL( Opm::TimeMap::mkdate(2000, 10, 1), Opm::TimeMap::timeFromEclipse(createDeckRecord(1, "OCT", 2000))); - BOOST_CHECK_EQUAL( Opm::TimeMap::mkdate(2000, 11, 1), Opm::TimeMap::timeFromEclipse(createDeckRecord(1, "NOV", 2000))); - BOOST_CHECK_EQUAL( Opm::TimeMap::mkdate(2000, 12, 1), Opm::TimeMap::timeFromEclipse(createDeckRecord(1, "DEC", 2000))); - BOOST_CHECK_EQUAL( Opm::TimeMap::mkdate(2000, 12, 1), Opm::TimeMap::timeFromEclipse(createDeckRecord(1, "DES", 2000))); -} - - -BOOST_AUTO_TEST_CASE( timeFromEclipseInputRecord ) { - Opm::DeckRecord startRecord; - Opm::DeckItem dayItem( "DAY", int() ); - Opm::DeckItem monthItem( "MONTH", std::string() ); - Opm::DeckItem yearItem("YEAR", int()); - Opm::DeckItem timeItem("TIME", std::string() ); - - dayItem.push_back( 10 ); - yearItem.push_back( 1987 ); - monthItem.push_back("JAN"); - timeItem.push_back("00:00:00.000"); - - startRecord.addItem( std::move( dayItem ) ); - startRecord.addItem( std::move( monthItem ) ); - startRecord.addItem( std::move( yearItem ) ); - startRecord.addItem( std::move( timeItem ) ); - - BOOST_CHECK_EQUAL(Opm::TimeMap::mkdate(1987, 1 , 10 ), Opm::TimeMap::timeFromEclipse( startRecord )); -} - - - - -BOOST_AUTO_TEST_CASE(TimeStepsCorrect) { - const char *deckData = - "START\n" - " 21 MAY 1981 /\n" - "\n" - "SCHEDULE\n" - "TSTEP\n" - " 1 2 3 4 5 /\n" - "\n" - "DATES\n" - " 1 JAN 1982 /\n" - " 1 JAN 1982 13:55:44 /\n" - " 3 JAN 1982 14:56:45.123 /\n" - "/\n" - "\n" - "TSTEP\n" - " 6 7 /\n"; - - Opm::Parser parser( true ); - auto deck = parser.parseString(deckData); - Opm::TimeMap tmap(deck); - - BOOST_CHECK_EQUAL(tmap.getStartTime(0),Opm::TimeMap::mkdate( 1981 , 5 , 21 )); - BOOST_CHECK_EQUAL(tmap.getTimeStepLength(0), 1*24*60*60); - BOOST_CHECK_EQUAL(tmap.getTimePassedUntil(1), 1.0*24*60*60); - - - BOOST_CHECK_EQUAL(tmap.getStartTime(1), - Opm::TimeMap::forward( Opm::TimeMap::mkdate( 1981 , 5 , 21 ) , 3600*24)); - - BOOST_CHECK_EQUAL(tmap.getTimeStepLength(1), 2*24*60*60); - BOOST_CHECK_EQUAL(tmap.getTimePassedUntil(2), (1.0 + 2.0)*24*60*60); - BOOST_CHECK_EQUAL(tmap.getStartTime(2), - Opm::TimeMap::forward( Opm::TimeMap::mkdate( 1981 , 5 , 21 ) , 3*24*3600)); - - BOOST_CHECK_EQUAL(tmap.getTimeStepLength(2), 3*24*60*60); - BOOST_CHECK_EQUAL(tmap.getTimePassedUntil(3), (1.0 + 2.0 + 3.0)*24*60*60); - BOOST_CHECK_EQUAL(tmap.getStartTime(3), - Opm::TimeMap::forward( Opm::TimeMap::mkdate( 1981 , 5 , 21 ) , 6*3600*24)); - - BOOST_CHECK_EQUAL(tmap.getTimeStepLength(3), 4*24*60*60); - BOOST_CHECK_EQUAL(tmap.getTimePassedUntil(4), (1.0 + 2.0 + 3.0 + 4.0)*24*60*60); - BOOST_CHECK_EQUAL(tmap.getStartTime(4), - Opm::TimeMap::forward( Opm::TimeMap::mkdate( 1981 , 5 , 21 ) , 10*3600*24)); - - BOOST_CHECK_EQUAL(tmap.getTimeStepLength(4), 5*24*60*60); - BOOST_CHECK_EQUAL(tmap.getTimePassedUntil(5), (1.0 + 2.0 + 3.0 + 4.0 + 5.0)*24*60*60); - BOOST_CHECK_EQUAL(tmap.getStartTime(5), - Opm::TimeMap::forward( Opm::TimeMap::mkdate( 1981 , 5 , 21 ) , 15*3600*24)); - - // timestep 5 is the period between the last step specified using - // of the TIMES keyword and the first record of DATES - BOOST_CHECK_EQUAL(tmap.getStartTime(6), - Opm::TimeMap::mkdate( 1982 , 1 , 1 )); - - BOOST_CHECK_EQUAL(tmap.getStartTime(7), - Opm::TimeMap::forward( Opm::TimeMap::mkdate( 1982 , 1 , 1 ) , 13,55,44 )); - - BOOST_CHECK_EQUAL(tmap.getStartTime(8), - Opm::TimeMap::forward( Opm::TimeMap::mkdate( 1982 , 1 , 3 ) , 14,56,45)); - - BOOST_CHECK_EQUAL(tmap.getTimeStepLength(8), 6*24*60*60); - BOOST_CHECK_EQUAL(tmap.getTimeStepLength(9), 7*24*60*60); - BOOST_CHECK(!tmap.skiprest()); -} - - -BOOST_AUTO_TEST_CASE(initTimestepsYearsAndMonths) { - const char *deckData = - "START\n" - " 21 MAY 1981 /\n" - "\n" - "SCHEDULE\n" - "TSTEP\n" - " 1 2 3 4 5 /\n" - "\n" - "DATES\n" - " 5 JUL 1981 /\n" - " 6 JUL 1981 /\n" - " 5 AUG 1981 /\n" - " 5 SEP 1981 /\n" - " 1 OCT 1981 /\n" - " 1 NOV 1981 /\n" - " 1 DEC 1981 /\n" - " 1 JAN 1982 /\n" - " 1 JAN 1982 13:55:44 /\n" - " 3 JAN 1982 14:56:45.123 /\n" - "/\n" - "\n" - "TSTEP\n" - " 6 7 /\n"; - - Opm::Parser parser; - auto deck = parser.parseString(deckData); - const Opm::TimeMap tmap(deck); - - /*deckData timesteps: - 0 21 may 1981 START - 1 22 may 1981 - 2 24 may 1981 - 3 27 may 1981 - 4 31 may 1981 - 5 5 jun 1981 - 6 5 jul 1981 - 7 6 jul 1981 - 8 5 aug 1981 - 9 5 sep 1981 - 10 1 oct 1981 - 11 1 nov 1981 - 12 1 dec 1981 - 13 1 jan 1982 - 14 1 jan 1982 - 15 3 jan 1982 - 16 9 jan 1982 - 17 16 jan 1982*/ - - for (size_t timestep = 0; timestep <= 17; ++timestep) { - if ((5 == timestep) || (6 == timestep) || (8 == timestep) || (9 == timestep) || - (10 == timestep) || (11 == timestep) || (12 == timestep) || (13 == timestep)) { - BOOST_CHECK_EQUAL(true, tmap.isTimestepInFirstOfMonthsYearsSequence(timestep, false)); - } else { - BOOST_CHECK_EQUAL(false, tmap.isTimestepInFirstOfMonthsYearsSequence(timestep, false)); - } - } - - for (size_t timestep = 0; timestep <= 17; ++timestep) { - if (13 == timestep) { - BOOST_CHECK_EQUAL(true, tmap.isTimestepInFirstOfMonthsYearsSequence(timestep, true)); - } else { - BOOST_CHECK_EQUAL(false, tmap.isTimestepInFirstOfMonthsYearsSequence(timestep, true)); - } - } -} - -BOOST_AUTO_TEST_CASE(initTimestepsYearsAndMonthsSkippingMonthsFrequency) { - const char *deckData = - "START\n" - " 21 MAY 1981 /\n" - "\n" - "SCHEDULE\n" - "DATES\n" - " 5 JUL 1981 /\n" - " 6 JUL 1981 /\n" - " 5 AUG 1981 /\n" - " 5 SEP 1981 /\n" - " 1 OCT 1981 /\n" - " 1 NOV 1981 /\n" - " 1 DEC 1981 /\n" - " 1 JAN 1982 /\n" - " 1 JAN 1982 13:55:44 /\n" - " 3 JAN 1982 14:56:45.123 /\n" - " 1 JAN 1983 /\n" - " 1 JAN 1984 /\n" - " 1 JAN 1985 /\n" - " 1 JAN 1988 /\n" - "/\n"; - - Opm::Parser parser; - auto deck = parser.parseString(deckData); - const Opm::TimeMap tmap(deck); - - /*deckData timesteps: - 0 21 may 1981 START - 1 5 jul 1981 - 2 6 jul 1981 - 3 5 aug 1981 - 4 5 sep 1981 - 5 1 oct 1981 - 6 1 nov 1981 - 7 1 dec 1981 - 8 1 jan 1982 - 9 1 jan 1982 - 10 3 jan 1982 - 11 1 jan 1983 - 12 1 jan 1984 - 13 1 jan 1985 - 14 1 jan 1988*/ - - // Month, not set frequency. - { - std::vector expected = { - false, // 0 21 may 1981 START - true, // 1 5 jul 1981 - false, // 2 6 jul 1981 - true, // 3 5 aug 1981 - true, // 4 5 sep 1981 - true, // 5 1 oct 1981 - true, // 6 1 nov 1981 - true, // 7 1 dec 1981 - true, // 8 1 jan 1982 - false, // 9 1 jan 1982 - false, // 10 3 jan 1982 - true, // 11 1 jan 1983 - true, // 12 1 jan 1984 - true, // 13 1 jan 1985 - true // 14 1 jan 1988 - }; - - for (size_t timestep = 0; timestep < expected.size(); ++timestep) { - const bool ok = tmap.isTimestepInFirstOfMonthsYearsSequence(timestep, false) == expected[timestep]; - BOOST_CHECK_MESSAGE(ok, "failing for timestep " << timestep); - } - } - - // Month, frequency 2. - { - std::vector expected = { - false, // 0 21 may 1981 START - true, // 1 5 jul 1981 - false, // 2 6 jul 1981 - false, // 3 5 aug 1981 - true, // 4 5 sep 1981 - false, // 5 1 oct 1981 - true, // 6 1 nov 1981 - false, // 7 1 dec 1981 - true, // 8 1 jan 1982 - false, // 9 1 jan 1982 - false, // 10 3 jan 1982 - true, // 11 1 jan 1983 - true, // 12 1 jan 1984 - true, // 13 1 jan 1985 - true // 14 1 jan 1988 - }; - - for (size_t timestep = 0; timestep < expected.size(); ++timestep) { - const bool ok = tmap.isTimestepInFirstOfMonthsYearsSequence(timestep, false, 1, 2) == expected[timestep]; - BOOST_CHECK_MESSAGE(ok, "failing for timestep " << timestep); - } - } - - // Year, not set frequency. - { - std::vector expected = { - false, // 0 21 may 1981 START - false, // 1 5 jul 1981 - false, // 2 6 jul 1981 - false, // 3 5 aug 1981 - false, // 4 5 sep 1981 - false, // 5 1 oct 1981 - false, // 6 1 nov 1981 - false, // 7 1 dec 1981 - true, // 8 1 jan 1982 - false, // 9 1 jan 1982 - false, // 10 3 jan 1982 - true, // 11 1 jan 1983 - true, // 12 1 jan 1984 - true, // 13 1 jan 1985 - true // 14 1 jan 1988 - }; - - for (size_t timestep = 0; timestep < expected.size(); ++timestep) { - const bool ok = tmap.isTimestepInFirstOfMonthsYearsSequence(timestep, true) == expected[timestep]; - BOOST_CHECK_MESSAGE(ok, "failing for timestep " << timestep); - } - } - - // Year, frequency 2. - { - std::vector expected = { - false, // 0 21 may 1981 START - false, // 1 5 jul 1981 - false, // 2 6 jul 1981 - false, // 3 5 aug 1981 - false, // 4 5 sep 1981 - false, // 5 1 oct 1981 - false, // 6 1 nov 1981 - false, // 7 1 dec 1981 - false, // 8 1 jan 1982 - false, // 9 1 jan 1982 - false, // 10 3 jan 1982 - true, // 11 1 jan 1983 - false, // 12 1 jan 1984 - true, // 13 1 jan 1985 - true // 14 1 jan 1988 - }; - - for (size_t timestep = 0; timestep < expected.size(); ++timestep) { - const bool ok = tmap.isTimestepInFirstOfMonthsYearsSequence(timestep, true, 1, 2) == expected[timestep]; - BOOST_CHECK_MESSAGE(ok, "failing for timestep " << timestep); - } - } -} - - -BOOST_AUTO_TEST_CASE(initTimestepsLongStep) { - const char *deckData = - "START\n" - " 1 JAN 1983 /\n" - "\n" - "SCHEDULE\n" - "TSTEP\n" - " 25550 /\n"; - - Opm::Parser parser; - auto deck = parser.parseString(deckData); - const Opm::TimeMap tmap(deck); - - /*deckData timesteps: - 0 1 jan 1983 START - 1 14 dec 2052*/ - - const auto tEnd = Opm::TimeStampUTC { tmap.getEndTime() }; - - BOOST_CHECK_EQUAL(tEnd.year(), 2052); - BOOST_CHECK_EQUAL(tEnd.month(), 12); - BOOST_CHECK_EQUAL(tEnd.day(), 14); -} - - -BOOST_AUTO_TEST_CASE(TimestepsLabUnit) { - const char *deckData = - "START\n" - " 1 JAN 1983 /\n" - "\n" - "LAB\n" - " \n" - "SCHEDULE\n" - "TSTEP\n" - " 24*10 /\n"; - - Opm::Parser parser; - auto deck = parser.parseString(deckData); - const Opm::TimeMap tmap(deck); - - /*deckData timesteps: - 0 1 jan 1983 START - 1 11 jan 1983*/ - - const auto tEnd = Opm::TimeStampUTC { tmap.getEndTime() }; - - BOOST_CHECK_EQUAL(tEnd.year(), 1983); - BOOST_CHECK_EQUAL(tEnd.month(), 1); - BOOST_CHECK_EQUAL(tEnd.day(), 11); -} - - -BOOST_AUTO_TEST_CASE(initTimestepsDistantDates) { - const char *deckData = - "START\n" - " 1 JAN 1983 /\n" - "\n" - "SCHEDULE\n" - "DATES\n" - " 1 JAN 2040 /\n" - " 1 JAN 2050 /\n" - "/\n"; - - Opm::Parser parser; - auto deck = parser.parseString(deckData); - const Opm::TimeMap tmap(deck); - - /*deckData timesteps: - 0 1 jan 1983 START - 1 1 jan 2040 - 2 1 jan 2050*/ - - const auto t1 = Opm::TimeStampUTC { tmap.getStartTime(1) }; - const auto t2 = Opm::TimeStampUTC { tmap.getEndTime() }; - - BOOST_CHECK_EQUAL(t1.year(), 2040); - BOOST_CHECK_EQUAL(t1.month(), 1); - BOOST_CHECK_EQUAL(t1.day(), 1); - - BOOST_CHECK_EQUAL(t2.year(), 2050); - BOOST_CHECK_EQUAL(t2.month(), 1); - BOOST_CHECK_EQUAL(t2.day(), 1); -} - - -BOOST_AUTO_TEST_CASE(mkdate) { - BOOST_CHECK_THROW( Opm::TimeMap::mkdate( 2010 , 0 , 0 ) , std::invalid_argument); - auto t0 = Opm::TimeStampUTC { Opm::TimeMap::mkdate( 2010 , 1, 1) }; - auto t1 = Opm::TimeStampUTC { Opm::TimeMap::forward( asTimeT(t0) , 24*3600) }; - - BOOST_CHECK_EQUAL( t1.year() , 2010 ); - BOOST_CHECK_EQUAL( t1.month() , 1 ); - BOOST_CHECK_EQUAL( t1.day() , 2 ); - - t1 = Opm::TimeMap::forward( asTimeT(t1) , -24*3600); - BOOST_CHECK_EQUAL( t1.year() , 2010 ); - BOOST_CHECK_EQUAL( t1.month() , 1 ); - BOOST_CHECK_EQUAL( t1.day() , 1 ); - - t1 = Opm::TimeMap::forward( asTimeT(t0) , 23, 55 , 300); - BOOST_CHECK_EQUAL( t1.year() , 2010 ); - BOOST_CHECK_EQUAL( t1.month() , 1 ); - BOOST_CHECK_EQUAL( t1.day() , 2 ); - -} - -BOOST_AUTO_TEST_CASE(mkdatetime) { - BOOST_CHECK_THROW(Opm::TimeMap::mkdatetime(2010, 0, 0, 0, 0, 0), std::invalid_argument); - auto t0 = Opm::TimeStampUTC { Opm::TimeMap::mkdatetime(2010, 1, 1, 0, 0, 0) }; - auto t1 = Opm::TimeStampUTC { Opm::TimeMap::forward(asTimeT(t0), 24 * 3600) }; - - BOOST_CHECK_EQUAL(t1.year(), 2010); - BOOST_CHECK_EQUAL(t1.month(), 1); - BOOST_CHECK_EQUAL(t1.day(), 2); - - t1 = Opm::TimeMap::forward(asTimeT(t1), -24 * 3600); - BOOST_CHECK_EQUAL(t1.year(), 2010); - BOOST_CHECK_EQUAL(t1.month(), 1); - BOOST_CHECK_EQUAL(t1.day(), 1); - - t1 = Opm::TimeMap::forward(asTimeT(t0), 23, 55, 300); - BOOST_CHECK_EQUAL(t1.year(), 2010); - BOOST_CHECK_EQUAL(t1.month(), 1); - BOOST_CHECK_EQUAL(t1.day(), 2); -} - -Opm::DeckRecord createDeckRecord(int day, const std::string &month, int year, const std::string &time) { - Opm::DeckRecord deckRecord; - Opm::DeckItem dayItem("DAY", int() ); - Opm::DeckItem monthItem("MONTH", std::string() ); - Opm::DeckItem yearItem("YEAR", int() ); - Opm::DeckItem timeItem("TIME", std::string() ); - - yearItem.push_back(year); - monthItem.push_back(month); - dayItem.push_back(day); - timeItem.push_back(time); - - deckRecord.addItem(dayItem); - deckRecord.addItem(monthItem); - deckRecord.addItem(yearItem); - deckRecord.addItem(timeItem); - - return deckRecord; -} - - -BOOST_AUTO_TEST_CASE(TimeServiceOperatorPlus) { - Opm::TimeStampUTC t0(Opm::TimeMap::mkdatetime(2010,1,1,0,0,0)); - auto t1 = t0 + std::chrono::duration(3600*24); - - BOOST_CHECK_EQUAL(t1.year(), 2010); - BOOST_CHECK_EQUAL(t1.month(), 1); - BOOST_CHECK_EQUAL(t1.day(), 2); - - auto tl = Opm::asLocalTimeT(t0); - auto tu = Opm::asTimeT(t0); - auto diff1 = std::difftime(tl, tu); - - auto tml = *std::gmtime(&tl); - auto tmu = *std::gmtime(&tu); - - auto diff2 = std::difftime( std::mktime(&tml), std::mktime(&tmu) ); - - BOOST_CHECK_CLOSE( diff1, diff2, 1e-6); -} - - -BOOST_AUTO_TEST_CASE(RESTART) { - std::string deck_string1 = R"( -START - 1 JAN 2000 / - -RESTART - 'CASE' 5 / - -SCHEDULE - -SKIPREST - -DATES - 1 JAN 2001 / - 1 JAN 2002 / - 1 JAN 2003 / - 1 JAN 2004 / -/ - -DATES - 1 JAN 2005 / -/ - -DATES - 1 JAN 2006 / - 1 JAN 2007 / - 1 JAN 2008 / - 1 JAN 2009 / - 1 JAN 2010 / -/ -)"; - - std::string deck_string2 = R"( -START - 1 JAN 2000 / - -RESTART - 'CASE' 5 / - -SCHEDULE - --- The period before the restart dates has been removed - the restart date --- should still be picked up as report step 5. ---DATES --- 1 JAN 2001 / --- 1 JAN 2002 / --- 1 JAN 2003 / --- 1 JAN 2004 / ---/ - -DATES - 1 JUL 2005 / -/ - -DATES - 1 JAN 2006 / - 1 JAN 2007 / - 1 JAN 2008 / - 1 JAN 2009 / - 1 JAN 2010 / -/ -)"; - - std::string deck_string3 = R"( -START - 1 JAN 2000 / - -RESTART - 'CASE' 5 / - -SCHEDULE - --- This test does not have SKIPREST - -TSTEP - 1 1 1 / -)"; - - Opm::Parser parser; - const auto deck1 = parser.parseString(deck_string1); - const auto deck2 = parser.parseString(deck_string2); - const auto deck3 = parser.parseString(deck_string3); - - // The date 2005-01-02 is not present as a DATES in the deck; invalid input. - auto invalid_restart = std::make_pair(Opm::asTimeT(Opm::TimeStampUTC(2005, 1, 2)), 5); - auto valid_restart = std::make_pair(Opm::asTimeT(Opm::TimeStampUTC(2005, 1, 1)), 5); - - BOOST_CHECK_THROW( Opm::TimeMap(deck1, invalid_restart) , std::invalid_argument); - Opm::TimeMap tm1(deck1, valid_restart); - BOOST_CHECK_THROW( tm1[1], std::invalid_argument ); - BOOST_CHECK_THROW( tm1[4], std::invalid_argument ); - auto start = tm1[0]; - BOOST_CHECK_EQUAL(start , Opm::asTimeT(Opm::TimeStampUTC(2000,1,1))); - BOOST_CHECK_EQUAL(tm1[5] , Opm::asTimeT(Opm::TimeStampUTC(2005,1,1))); - BOOST_CHECK(tm1.skiprest()); - - Opm::TimeMap tm2(deck2, valid_restart); - BOOST_CHECK_EQUAL(tm2[5], Opm::asTimeT(Opm::TimeStampUTC(2005,1,1))); - BOOST_CHECK_EQUAL(tm2[6], Opm::asTimeT(Opm::TimeStampUTC(2005,7,1))); - - Opm::TimeMap tm3(deck3, valid_restart); - BOOST_CHECK_EQUAL(tm3[5], Opm::asTimeT(Opm::TimeStampUTC(2005,1,1))); - BOOST_CHECK_EQUAL(tm3[6], Opm::asTimeT(Opm::TimeStampUTC(2005,1,2))); - BOOST_CHECK_EQUAL(tm3[7], Opm::asTimeT(Opm::TimeStampUTC(2005,1,3))); - BOOST_CHECK_EQUAL(tm3[8], Opm::asTimeT(Opm::TimeStampUTC(2005,1,4))); -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/TracerTests.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/TracerTests.cpp deleted file mode 100644 index a7b3ab95b8..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/TracerTests.cpp +++ /dev/null @@ -1,90 +0,0 @@ -/* - Copyright 2019 SINTEF Digital, Mathematics and Cybernetics. - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#define BOOST_TEST_MODULE TracerTests - -#include - -#include -#include -#include - - -using namespace Opm; - - -static Deck createDeck() { - // Using a raw string literal with xxx as delimiter. - const char *deckData = R"xxx( -DIMENS - 10 10 10 / -TABDIMS -3 / -GRID -DX -1000*0.25 / -DY -1000*0.25 / -DZ -1000*0.25 / -TOPS -100*0.25 / -EQLDIMS - 3 1 1 / - -PROPS - -TRACERS --- oil water gas env - 1* 1 1 1* / -TRACER -SEA WAT / -OCE GAS / -/ -TVDPFSEA -1000 0.0 -5000 0.0 / -TBLKFOCE -1.0 2.0 3.0 / -)xxx"; // End of raw string literal with xxx as delimiter. - Parser parser; - return parser.parseString( deckData ); -} - - - -BOOST_AUTO_TEST_CASE(TracerConfigTest) { - auto deck = createDeck(); - EclipseState state(deck); - const TracerConfig& tc = state.tracer(); - BOOST_CHECK_EQUAL(tc.size(), 2U); - - auto it = tc.begin(); - BOOST_CHECK_EQUAL(it->name, "SEA"); - BOOST_CHECK_EQUAL(it->phase, Phase::WATER); - BOOST_CHECK(it->concentration.empty()); - BOOST_CHECK_EQUAL(it->tvdpf.numColumns(), 2); - - ++it; - BOOST_CHECK_EQUAL(it->name, "OCE"); - BOOST_CHECK_EQUAL(it->phase, Phase::GAS); - BOOST_CHECK_EQUAL(it->concentration.size(), 3U); - BOOST_CHECK_EQUAL(it->tvdpf.numColumns(), 0); -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/TransMultTests.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/TransMultTests.cpp deleted file mode 100644 index 2ff0431191..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/TransMultTests.cpp +++ /dev/null @@ -1,78 +0,0 @@ -/* - Copyright 2014 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include -#include -#include - -#define BOOST_TEST_MODULE EclipseGridTests -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -BOOST_AUTO_TEST_CASE(Empty) { - Opm::EclipseGrid grid(10,10,10); - Opm::FieldPropsManager fp(Opm::Deck(), Opm::Phases{true, true, true}, grid, Opm::TableManager()); - Opm::TransMult transMult(grid ,{} , fp); - - BOOST_CHECK_THROW( transMult.getMultiplier(12,10,10 , Opm::FaceDir::XPlus) , std::invalid_argument ); - BOOST_CHECK_THROW( transMult.getMultiplier(1000 , Opm::FaceDir::XPlus) , std::invalid_argument ); - - BOOST_CHECK_EQUAL( transMult.getMultiplier(9,9,9, Opm::FaceDir::YPlus) , 1.0 ); - BOOST_CHECK_EQUAL( transMult.getMultiplier(100 , Opm::FaceDir::ZPlus) , 1.0 ); - - BOOST_CHECK_EQUAL( transMult.getMultiplier(9,9,9, Opm::FaceDir::YMinus) , 1.0 ); - BOOST_CHECK_EQUAL( transMult.getMultiplier(100 , Opm::FaceDir::ZMinus) , 1.0 ); -} - - -BOOST_AUTO_TEST_CASE(GridAndEdit) { - const std::string deck_string = R"( -RUNSPEC -GRIDOPTS - 'YES' 2 / - -DIMENS - 5 5 5 / -GRID -MULTZ - 125*2 / -EDIT -MULTZ - 125*2 / -)"; - - Opm::Parser parser; - Opm::Deck deck = parser.parseString(deck_string); - Opm::TableManager tables(deck); - Opm::EclipseGrid grid(5,5,5); - Opm::FieldPropsManager fp(deck, Opm::Phases{true, true, true}, grid, tables); - Opm::TransMult transMult(grid, deck, fp); - - transMult.applyMULT(fp.get_global_double("MULTZ"), Opm::FaceDir::ZPlus); - BOOST_CHECK_EQUAL( transMult.getMultiplier(0,0,0 , Opm::FaceDir::ZPlus) , 4.0 ); -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/TuningTests.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/TuningTests.cpp deleted file mode 100644 index dbea89831d..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/TuningTests.cpp +++ /dev/null @@ -1,328 +0,0 @@ -/* - Copyright 2015 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - - -#define BOOST_TEST_MODULE TuningTests - -#include - -#include -#include -#include -#include -#include -#include -#include -#include - - -using namespace Opm; - - -const std::string& deckStr = "START\n" - " 21 MAY 1981 /\n" - "\n" - "SCHEDULE\n" - "TSTEP\n" - " 1 2 3 4 5 /\n" - "\n" - "TUNING\n" - "2 300 0.3 0.30 6 0.6 0.2 2.25 2E20 /\n" - "0.2 0.002 2E-7 0.0002 11 0.02 2.0E-6 0.002 0.002 0.035 66 0.02 2/\n" - "13 2 26 2 9 9 4.0E6 4.0E6 4.0E6 1/\n" - "DATES\n" - " 1 JAN 1982 /\n" - " 1 JAN 1982 13:55:44 /\n" - " 3 JAN 1982 14:56:45.123 /\n" - "/\n" - "TSTEP\n" - " 9 10 /\n" - "\n" - "TUNING\n" - "2 300 0.3 0.30 6 0.6 0.2 2.25 2E20 10.0/\n" - "/\n" - "/\n"; - - - -static Deck createDeck(const std::string& input) { - Opm::Parser parser; - return parser.parseString(input); -} - - - -BOOST_AUTO_TEST_CASE(TuningTest) { - - auto deck = createDeck(deckStr); - auto python = std::make_shared(); - EclipseGrid grid(10,10,10); - TableManager table ( deck ); - FieldPropsManager fp(deck, Phases{true, true, true}, grid, table); - Runspec runspec (deck); - Schedule schedule( deck, grid , fp, runspec, python); - const auto& tuning = schedule.getTuning(); - auto event = schedule.getEvents(); - - const double diff = 1.0e-14; - - /*** TIMESTEP 4***/ - /********* Record 1 ***********/ - size_t timestep = 4; - BOOST_CHECK(!event.hasEvent(ScheduleEvents::TUNING_CHANGE, timestep)); - - double TSINIT_default = tuning.get(timestep).TSINIT; - BOOST_CHECK_CLOSE(TSINIT_default, 1 * Metric::Time, diff); - - double TSMAXZ_default = tuning.get(timestep).TSMAXZ; - BOOST_CHECK_CLOSE(TSMAXZ_default, 365 * Metric::Time, diff); - - double TSMINZ_default = tuning.get(timestep).TSMINZ; - BOOST_CHECK_CLOSE(TSMINZ_default, 0.1 * Metric::Time, diff); - - double TSMCHP_default = tuning.get(timestep).TSMCHP; - BOOST_CHECK_CLOSE(TSMCHP_default, 0.15 * Metric::Time, diff); - - double TSFMAX_default = tuning.get(timestep).TSFMAX; - BOOST_CHECK_CLOSE(TSFMAX_default, 3.0, diff); - - double TSFMIN_default = tuning.get(timestep).TSFMIN; - BOOST_CHECK_CLOSE(TSFMIN_default, 0.3, diff); - - double TSFCNV_default = tuning.get(timestep).TSFCNV; - BOOST_CHECK_CLOSE(TSFCNV_default, 0.1, diff); - - double TFDIFF_default = tuning.get(timestep).TFDIFF; - BOOST_CHECK_CLOSE(TFDIFF_default, 1.25, diff); - - double THRUPT_default = tuning.get(timestep).THRUPT; - BOOST_CHECK_CLOSE(THRUPT_default, 1E20, diff); - - bool TMAXWC_has_value = tuning.get(timestep).TMAXWC_has_value; - double TMAXWC_default = tuning.get(timestep).TMAXWC; - BOOST_CHECK_EQUAL(false, TMAXWC_has_value); - BOOST_CHECK_CLOSE(TMAXWC_default, 0.0 * Metric::Time, diff); - - - /********* Record 2 ************/ - double TRGTTE_default = tuning.get(timestep).TRGTTE; - BOOST_CHECK_CLOSE(TRGTTE_default, 0.1, diff); - - double TRGCNV_default = tuning.get(timestep).TRGCNV; - BOOST_CHECK_CLOSE(TRGCNV_default, 0.001, diff); - - double TRGMBE_default = tuning.get(timestep).TRGMBE; - BOOST_CHECK_CLOSE(TRGMBE_default, 0.0, diff); - - double TRGLCV_default = tuning.get(timestep).TRGLCV; - BOOST_CHECK_CLOSE(TRGLCV_default, 0.0001, diff); - - double XXXTTE_default = tuning.get(timestep).XXXTTE; - BOOST_CHECK_CLOSE(XXXTTE_default, 10.0, diff); - - double XXXCNV_default = tuning.get(timestep).XXXCNV; - BOOST_CHECK_CLOSE(XXXCNV_default, 0.01, diff); - - double XXXMBE_default = tuning.get(timestep).XXXMBE; - BOOST_CHECK_CLOSE(XXXMBE_default, 1.0E-6, diff); - - double XXXLCV_default = tuning.get(timestep).XXXLCV; - BOOST_CHECK_CLOSE(XXXLCV_default, 0.001, diff); - - double XXXWFL_default = tuning.get(timestep).XXXWFL; - BOOST_CHECK_CLOSE(XXXWFL_default, 0.001, diff); - - double TRGFIP_default = tuning.get(timestep).TRGFIP; - BOOST_CHECK_CLOSE(TRGFIP_default, 0.025, diff); - - bool TRGSFT_has_value = tuning.get(timestep).TRGSFT_has_value; - double TRGSFT_default = tuning.get(timestep).TRGSFT; - BOOST_CHECK_EQUAL(false, TRGSFT_has_value); - BOOST_CHECK_CLOSE(TRGSFT_default, 0.0, diff); - - double THIONX_default = tuning.get(timestep).THIONX; - BOOST_CHECK_CLOSE(THIONX_default, 0.01, diff); - - int TRWGHT_default = tuning.get(timestep).TRWGHT; - BOOST_CHECK_EQUAL(TRWGHT_default, 1); - - - /********* Record 3 ************/ - int NEWTMX_default = tuning.get(timestep).NEWTMX; - BOOST_CHECK_EQUAL(NEWTMX_default, 12); - - int NEWTMN_default = tuning.get(timestep).NEWTMN; - BOOST_CHECK_EQUAL(NEWTMN_default, 1); - - int LITMAX_default = tuning.get(timestep).LITMAX; - BOOST_CHECK_EQUAL(LITMAX_default, 25); - - int LITMIN_default = tuning.get(timestep).LITMIN; - BOOST_CHECK_EQUAL(LITMIN_default, 1); - - int MXWSIT_default = tuning.get(timestep).MXWSIT; - BOOST_CHECK_EQUAL(MXWSIT_default, 8); - - int MXWPIT_default = tuning.get(timestep).MXWPIT; - BOOST_CHECK_EQUAL(MXWPIT_default, 8); - - double DDPLIM_default = tuning.get(timestep).DDPLIM; - BOOST_CHECK_CLOSE(DDPLIM_default, 1.0E6 * Metric::Pressure, diff); - - double DDSLIM_default = tuning.get(timestep).DDSLIM; - BOOST_CHECK_CLOSE(DDSLIM_default, 1.0E6, diff); - - double TRGDPR_default = tuning.get(timestep).TRGDPR; - BOOST_CHECK_CLOSE(TRGDPR_default, 1.0E6 * Metric::Pressure, diff); - - bool XXXDPR_has_value = tuning.get(timestep).XXXDPR_has_value; - double XXXDPR_default = tuning.get(timestep).XXXDPR; - BOOST_CHECK_EQUAL(false, XXXDPR_has_value); - BOOST_CHECK_CLOSE(XXXDPR_default, 0.0, diff); - - - - - /*** TIMESTEP 5***/ - /********* Record 1 ***********/ - timestep = 5; - BOOST_CHECK(event.hasEvent(ScheduleEvents::TUNING_CHANGE, timestep)); - double TSINIT = tuning.get(timestep).TSINIT; - BOOST_CHECK_CLOSE(TSINIT, 2 * Metric::Time, diff); - - double TSMAXZ = tuning.get(timestep).TSMAXZ; - BOOST_CHECK_CLOSE(TSMAXZ, 300 * Metric::Time, diff); - - double TSMINZ = tuning.get(timestep).TSMINZ; - BOOST_CHECK_CLOSE(TSMINZ, 0.3 * Metric::Time, diff); - - double TSMCHP = tuning.get(timestep).TSMCHP; - BOOST_CHECK_CLOSE(TSMCHP, 0.30 * Metric::Time, diff); - - double TSFMAX = tuning.get(timestep).TSFMAX; - BOOST_CHECK_CLOSE(TSFMAX, 6.0, 1.0); - - double TSFMIN = tuning.get(timestep).TSFMIN; - BOOST_CHECK_CLOSE(TSFMIN, 0.6, 1.0); - - double TSFCNV = tuning.get(timestep).TSFCNV; - BOOST_CHECK_CLOSE(TSFCNV, 0.2, diff); - - double TFDIFF = tuning.get(timestep).TFDIFF; - BOOST_CHECK_CLOSE(TFDIFF, 2.25, diff); - - double THRUPT = tuning.get(timestep).THRUPT; - BOOST_CHECK_CLOSE(THRUPT, 2E20, diff); - - TMAXWC_has_value = tuning.get(timestep).TMAXWC_has_value; - TMAXWC_default = tuning.get(timestep).TMAXWC; - BOOST_CHECK_EQUAL(false, TMAXWC_has_value); - BOOST_CHECK_CLOSE(TMAXWC_default, 0.0 * Metric::Time, diff); - - /********* Record 2 ***********/ - double TRGTTE = tuning.get(timestep).TRGTTE; - BOOST_CHECK_CLOSE(TRGTTE, 0.2, diff); - - double TRGCNV = tuning.get(timestep).TRGCNV; - BOOST_CHECK_CLOSE(TRGCNV, 0.002, diff); - - double TRGMBE = tuning.get(timestep).TRGMBE; - BOOST_CHECK_CLOSE(TRGMBE, 2.0E-7, diff); - - double TRGLCV = tuning.get(timestep).TRGLCV; - BOOST_CHECK_CLOSE(TRGLCV, 0.0002, diff); - - double XXXTTE = tuning.get(timestep).XXXTTE; - BOOST_CHECK_CLOSE(XXXTTE, 11.0, diff); - - double XXXCNV = tuning.get(timestep).XXXCNV; - BOOST_CHECK_CLOSE(XXXCNV, 0.02, diff); - - double XXXMBE = tuning.get(timestep).XXXMBE; - BOOST_CHECK_CLOSE(XXXMBE, 2.0E-6, diff); - - double XXXLCV = tuning.get(timestep).XXXLCV; - BOOST_CHECK_CLOSE(XXXLCV, 0.002, diff); - - double XXXWFL = tuning.get(timestep).XXXWFL; - BOOST_CHECK_CLOSE(XXXWFL, 0.002, diff); - - double TRGFIP = tuning.get(timestep).TRGFIP; - BOOST_CHECK_CLOSE(TRGFIP, 0.035, diff); - - TRGSFT_has_value = tuning.get(timestep).TRGSFT_has_value; - double TRGSFT = tuning.get(timestep).TRGSFT; - BOOST_CHECK_EQUAL(true, TRGSFT_has_value); - BOOST_CHECK_CLOSE(TRGSFT, 66.0, diff); - - double THIONX = tuning.get(timestep).THIONX; - BOOST_CHECK_CLOSE(THIONX, 0.02, diff); - - int TRWGHT = tuning.get(timestep).TRWGHT; - BOOST_CHECK_EQUAL(TRWGHT, 2); - - /********* Record 3 ***********/ - int NEWTMX = tuning.get(timestep).NEWTMX; - BOOST_CHECK_EQUAL(NEWTMX, 13); - - int NEWTMN = tuning.get(timestep).NEWTMN; - BOOST_CHECK_EQUAL(NEWTMN, 2); - - int LITMAX = tuning.get(timestep).LITMAX; - BOOST_CHECK_EQUAL(LITMAX, 26); - - int LITMIN = tuning.get(timestep).LITMIN; - BOOST_CHECK_EQUAL(LITMIN, 2); - - int MXWSIT = tuning.get(timestep).MXWSIT; - BOOST_CHECK_EQUAL(MXWSIT, 9); - - int MXWPIT = tuning.get(timestep).MXWPIT; - BOOST_CHECK_EQUAL(MXWPIT, 9); - - double DDPLIM= tuning.get(timestep).DDPLIM; - BOOST_CHECK_CLOSE(DDPLIM, 4.0E6 * Metric::Pressure, diff); - - double DDSLIM= tuning.get(timestep).DDSLIM; - BOOST_CHECK_CLOSE(DDSLIM, 4.0E6, diff); - - double TRGDPR = tuning.get(timestep).TRGDPR; - BOOST_CHECK_CLOSE(TRGDPR, 4.0E6 * Metric::Pressure, diff); - - XXXDPR_has_value = tuning.get(timestep).XXXDPR_has_value; - double XXXDPR = tuning.get(timestep).XXXDPR; - BOOST_CHECK_EQUAL(true, XXXDPR_has_value); - BOOST_CHECK_CLOSE(XXXDPR, 1.0 * Metric::Pressure, diff); - - - /*** TIMESTEP 7 ***/ - BOOST_CHECK(!event.hasEvent(ScheduleEvents::TUNING_CHANGE, 7)); - - /*** TIMESTEP 10 ***/ - /********* Record 1 ***********/ - timestep = 10; - BOOST_CHECK(event.hasEvent(ScheduleEvents::TUNING_CHANGE, timestep)); - TMAXWC_has_value = tuning.get(timestep).TMAXWC_has_value; - TMAXWC_default = tuning.get(timestep).TMAXWC; - BOOST_CHECK_EQUAL(true, TMAXWC_has_value); - BOOST_CHECK_CLOSE(TMAXWC_default, 10.0 * Metric::Time, diff); - - - -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/UDQTests.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/UDQTests.cpp deleted file mode 100644 index 42c9e1a2f4..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/UDQTests.cpp +++ /dev/null @@ -1,1560 +0,0 @@ -/* -Copyright 2018 Statoil ASA. - This file is part of the Open Porous Media project (OPM). - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#define BOOST_TEST_MODULE UDQTests -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -using namespace Opm; - -BOOST_AUTO_TEST_CASE(TYPE_COERCION) { - BOOST_CHECK( UDQVarType::SCALAR == UDQ::coerce(UDQVarType::SCALAR, UDQVarType::SCALAR) ); - - BOOST_CHECK( UDQVarType::WELL_VAR == UDQ::coerce(UDQVarType::SCALAR, UDQVarType::WELL_VAR)); - BOOST_CHECK( UDQVarType::WELL_VAR == UDQ::coerce(UDQVarType::WELL_VAR, UDQVarType::FIELD_VAR)); - - BOOST_CHECK( UDQVarType::GROUP_VAR == UDQ::coerce(UDQVarType::SCALAR, UDQVarType::GROUP_VAR)); - BOOST_CHECK( UDQVarType::GROUP_VAR == UDQ::coerce(UDQVarType::GROUP_VAR, UDQVarType::FIELD_VAR)); - - BOOST_CHECK_THROW( UDQ::coerce(UDQVarType::GROUP_VAR, UDQVarType::WELL_VAR), std::logic_error ); - BOOST_CHECK_THROW( UDQ::coerce(UDQVarType::WELL_VAR, UDQVarType::GROUP_VAR), std::logic_error ); -} - - -BOOST_AUTO_TEST_CASE(GROUP_VARIABLES) -{ - UDQParams udqp; - UDQFunctionTable udqft; - UDQDefine def_group(udqp, "GUOPRL",{"(", "5000", "-", "GOPR", "LOWER", "*", "0.13", "-", "GOPR", "UPPER", "*", "0.15", ")" , "*", "0.89"}); - SummaryState st(std::chrono::system_clock::now()); - UDQContext context(udqft, st); - double gopr_lower = 1234; - double gopr_upper = 4321; - - st.update_group_var("LOWER", "GOPR", gopr_lower); - st.update_group_var("UPPER", "GOPR", gopr_upper); - - auto res_group = def_group.eval(context); - BOOST_CHECK_EQUAL( res_group["UPPER"].value(), (5000 - gopr_lower*0.13 - gopr_upper*0.15)*0.89); - BOOST_CHECK_EQUAL( res_group["UPPER"].value(), (5000 - gopr_lower*0.13 - gopr_upper*0.15)*0.89); -} - - - -BOOST_AUTO_TEST_CASE(SUBTRACT) -{ - UDQParams udqp; - UDQFunctionTable udqft; - UDQDefine def(udqp, "WU", {"16", "-", "8", "-", "4", "-", "2", "-", "1"}); - UDQDefine scalar(udqp, "WU", {"16"}); - - SummaryState st(std::chrono::system_clock::now()); - UDQContext context(udqft, st); - - st.update_well_var("P1", "WOPR", 4); - auto res = def.eval(context); - BOOST_CHECK_EQUAL( res[0].value(), 1.0); - - auto res2 = scalar.eval(context); - BOOST_CHECK_EQUAL( res2[0].value(), 16.0); -} - - -BOOST_AUTO_TEST_CASE(TEST) -{ - UDQParams udqp; - UDQFunctionTable udqft; - UDQDefine def1(udqp, "WUWI3", {"GOPR" , "MAU", "*", "2.0", "*", "0.25", "*", "10"}); - UDQDefine def2(udqp, "WUWI3", {"2.0", "*", "0.25", "*", "3"}); - UDQDefine def3(udqp, "WUWI3", {"GOPR" , "FIELD", "-", "2.0", "*", "3"}); - UDQDefine def4(udqp, "WUWI3", {"FOPR" , "/", "2"}); - - SummaryState st(std::chrono::system_clock::now()); - UDQContext context(udqft, st); - - st.update_group_var("MAU", "GOPR", 4); - st.update_group_var("XXX", "GOPR", 5); - st.update_group_var("FIELD", "GOPR", 6); - st.update_well_var("P1", "WBHP", 0.5); - st.update_well_var("P2", "WBHP", 0.5); - st.update("FOPR", 2); - - auto res1 = def1.eval(context); - BOOST_CHECK_EQUAL( res1["P1"].value(), 20 ); - BOOST_CHECK_EQUAL( res1["P2"].value(), 20 ); - - auto res2 = def2.eval(context); - BOOST_CHECK_EQUAL( res2["P1"].value(), 1.50 ); - BOOST_CHECK_EQUAL( res2["P2"].value(), 1.50 ); - - auto res3 = def3.eval(context); - BOOST_CHECK_EQUAL( res3["P1"].value(), 0.00 ); - BOOST_CHECK_EQUAL( res3["P2"].value(), 0.00 ); - - auto res4 = def4.eval(context); - BOOST_CHECK_EQUAL( res4["P1"].value(), 1.00 ); - BOOST_CHECK_EQUAL( res4["P2"].value(), 1.00 ); - - /* - This expression has a well set as target type, and involves group with - wildcard that is not supported by flow. - */ - BOOST_CHECK_THROW( UDQDefine(udqp, "WUWI2", {"GOPR", "G*", "*", "2.0"}), std::logic_error); - - /* - UDQVarType == BLOCK is not yet supported. - */ - BOOST_CHECK_THROW( UDQDefine(udqp, "WUWI2", {"BPR", "1","1", "1", "*", "2.0"}), std::logic_error); -} - -Schedule make_schedule(const std::string& input) { - Parser parser; - auto python = std::make_shared(); - - auto deck = parser.parseString(input); - if (deck.hasKeyword("DIMENS")) { - EclipseState es(deck); - return Schedule(deck, es, python); - } else { - EclipseGrid grid(10,10,10); - TableManager table ( deck ); - FieldPropsManager fp( deck, Phases{true, true, true}, grid, table); - Runspec runspec (deck); - return Schedule(deck, grid , fp, runspec, python); - } -} - - -BOOST_AUTO_TEST_CASE(MIX_SCALAR) { - UDQFunctionTable udqft; - UDQParams udqp; - UDQDefine def_add(udqp, "WU", {"WOPR", "+", "1"}); - SummaryState st(std::chrono::system_clock::now()); - UDQContext context(udqft, st); - - st.update_well_var("P1", "WOPR", 1); - - auto res_add = def_add.eval(context); - BOOST_CHECK_EQUAL( res_add["P1"].value() , 2); -} - - -BOOST_AUTO_TEST_CASE(UDQ_TABLE_EXCEPTION) { - UDQParams udqp; - BOOST_CHECK_THROW(UDQDefine(udqp, "WU", {"TUPRICE[WOPR]"}), std::invalid_argument); -} - - - -BOOST_AUTO_TEST_CASE(UDQFieldSetTest) { - std::vector wells = {"P1", "P2", "P3", "P4"}; - UDQParams udqp; - UDQFunctionTable udqft(udqp); - SummaryState st(std::chrono::system_clock::now()); - UDQContext context(udqft, st); - - st.update_well_var("P1", "WOPR", 1.0); - st.update_well_var("P2", "WOPR", 2.0); - st.update_well_var("P3", "WOPR", 3.0); - st.update_well_var("P4", "WOPR", 4.0); - - /*{ - UDQDefine def_fxxx(udqp, "FU_SCALAR", {"123"}); - auto fxxx_res = def_fxxx.eval(context); - BOOST_CHECK_EQUAL( fxxx_res[0].value(), 123.0 ); - BOOST_CHECK( fxxx_res.var_type() == UDQVarType::FIELD_VAR); - } - */ - - { - UDQDefine def_fopr(udqp, "FUOPR", {"SUM", "(", "WOPR", ")"}); - auto fopr_res = def_fopr.eval(context); - BOOST_CHECK_EQUAL( fopr_res[0].value(), 10.0 ); - } -} - - -BOOST_AUTO_TEST_CASE(UDQWellSetTest) { - std::vector wells = {"P1", "P2", "I1", "I2"}; - UDQSet ws = UDQSet::wells("NAME", wells); - UDQSet ws2 = UDQSet::wells("NAME", wells, 100.0); - - BOOST_CHECK_EQUAL(4, ws.size()); - ws.assign("P1", 1.0); - - const auto& value = ws["P1"]; - BOOST_CHECK_EQUAL(value.value(), 1.0); - BOOST_CHECK_EQUAL(ws["P1"].value(), 1.0); - - BOOST_REQUIRE_THROW(ws.assign("NO_SUCH_WELL", 1.0), std::out_of_range); - BOOST_REQUIRE_THROW(ws[10], std::out_of_range); - BOOST_REQUIRE_THROW(ws["NO_SUCH_WELL"], std::out_of_range); - - ws.assign("*", 2.0); - for (const auto& w : wells) - BOOST_CHECK_EQUAL(ws[w].value(), 2.0); - - ws.assign(3.0); - for (const auto& w : wells) - BOOST_CHECK_EQUAL(ws[w].value(), 3.0); - - ws.assign("P*", 4.0); - BOOST_CHECK_EQUAL(ws["P1"].value(), 4.0); - BOOST_CHECK_EQUAL(ws["P2"].value(), 4.0); - - ws.assign("I2", 5.0); - BOOST_CHECK_EQUAL(ws["I2"].value(), 5.0); - - - for (const auto& w : wells) - BOOST_CHECK_EQUAL(ws2[w].value(), 100.0); - - UDQSet scalar = UDQSet::scalar("NAME", 1.0); - BOOST_CHECK_EQUAL(scalar.size() , 1); - BOOST_CHECK_EQUAL(scalar[0].value(), 1.0); - - UDQSet empty = UDQSet::empty("EMPTY"); - BOOST_CHECK_EQUAL(empty.size() , 0); -} - - -BOOST_AUTO_TEST_CASE(UDQ_GROUP_TEST) { - std::vector groups = {"G1", "G2", "G3", "G4"}; - UDQSet gs = UDQSet::groups("NAME", groups); - - BOOST_CHECK_EQUAL(4, gs.size()); - gs.assign("G1", 1.0); - - const auto& value = gs["G1"]; - BOOST_CHECK_EQUAL(value.value(), 1.0); - { - UDQParams udqp; - UDQFunctionTable udqft(udqp); - UDQDefine def_fopr(udqp, "FUOPR", {"SUM", "(", "GOPR", ")"}); - SummaryState st(std::chrono::system_clock::now()); - UDQContext context(udqft, st); - - st.update_group_var("G1", "GOPR", 1.0); - st.update_group_var("G2", "GOPR", 2.0); - st.update_group_var("G3", "GOPR", 3.0); - st.update_group_var("G4", "GOPR", 4.0); - - - auto res = def_fopr.eval(context); - BOOST_CHECK_EQUAL(res[0].value(), 10.0); - } -} - - - -BOOST_AUTO_TEST_CASE(UDQ_DEFINETEST) { - UDQParams udqp; - UDQFunctionTable udqft(udqp); - { - UDQDefine def(udqp, "WUBHP", {"WBHP"}); - SummaryState st(std::chrono::system_clock::now()); - UDQContext context(udqft, st); - - st.update_well_var("W1", "WBHP", 11); - st.update_well_var("W2", "WBHP", 2); - st.update_well_var("W3", "WBHP", 3); - auto res = def.eval(context); - BOOST_CHECK_EQUAL(res.size(), 3); - BOOST_CHECK_EQUAL( res["W1"].value(), 11 ); - BOOST_CHECK_EQUAL( res["W2"].value(), 2 ); - BOOST_CHECK_EQUAL( res["W3"].value(), 3 ); - } - { - UDQDefine def(udqp, "WUBHP", {"WBHP" , "'P*'"}); - SummaryState st(std::chrono::system_clock::now()); - UDQContext context(udqft, st); - - - st.update_well_var("P1", "WBHP", 1); - st.update_well_var("P2", "WBHP", 2); - st.update_well_var("I1", "WBHP", 1); - st.update_well_var("I2", "WBHP", 2); - auto res = def.eval(context); - BOOST_CHECK_EQUAL(res.size(), 4); - BOOST_CHECK_EQUAL( res["P1"].value(), 1 ); - BOOST_CHECK_EQUAL( res["P2"].value(), 2 ); - BOOST_CHECK_EQUAL( res["I1"].defined(), false); - BOOST_CHECK_EQUAL( res["I1"].defined(), false); - } - { - UDQDefine def(udqp, "WUBHP", {"NINT" , "(", "WBHP", ")"}); - SummaryState st(std::chrono::system_clock::now()); - UDQContext context(udqft, st); - st.update_well_var("P1", "WBHP", 4); - st.update_well_var("P2", "WBHP", 3); - st.update_well_var("I1", "WBHP", 2); - st.update_well_var("I2", "WBHP", 1); - - auto res = def.eval(context); - BOOST_CHECK_EQUAL( res["P1"].value(), 4 ); - BOOST_CHECK_EQUAL( res["P2"].value(), 3 ); - BOOST_CHECK_EQUAL( res["I1"].value(), 2 ); - BOOST_CHECK_EQUAL( res["I2"].value(), 1 ); - } -} - - - - - -BOOST_AUTO_TEST_CASE(KEYWORDS) { - const std::string input = R"( -RUNSPEC -UDQDIMS - 10* 'N'/ -UDQPARAM - 3* 0.25 / -)"; - Parser parser; - - auto deck = parser.parseString(input); - auto runspec = Runspec(deck); - auto udq_params = runspec.udqParams(); - - BOOST_CHECK_EQUAL(0.25, udq_params.cmpEpsilon()); - - // The reseed parameter is set to false, so the repeated calls to reseedRNG() should have - // no effect. - - udq_params.reseedRNG(100); - auto r1 = udq_params.true_rng()(); - udq_params.reseedRNG(100); - auto r2 = udq_params.true_rng()(); - - BOOST_CHECK( r1 != r2 ); -} - - -BOOST_AUTO_TEST_CASE(ENUM_CONVERSION) { - BOOST_CHECK_THROW(UDQ::varType("WWCT"), std::invalid_argument); - BOOST_CHECK_THROW(UDQ::varType("XUCT"), std::invalid_argument); - - BOOST_CHECK(UDQ::varType("WUBHP") == UDQVarType::WELL_VAR); - BOOST_CHECK(UDQ::varType("GUBHP") == UDQVarType::GROUP_VAR); - BOOST_CHECK(UDQ::varType("CUBHP") == UDQVarType::CONNECTION_VAR); - BOOST_CHECK(UDQ::varType("FUBHP") == UDQVarType::FIELD_VAR); - BOOST_CHECK(UDQ::varType("RUBHP") == UDQVarType::REGION_VAR); - BOOST_CHECK(UDQ::varType("AUBHP") == UDQVarType::AQUIFER_VAR); - BOOST_CHECK(UDQ::varType("SUBHP") == UDQVarType::SEGMENT_VAR); - - BOOST_CHECK(UDQ::targetType("WBHP") == UDQVarType::WELL_VAR); - BOOST_CHECK(UDQ::targetType("GBHP") == UDQVarType::GROUP_VAR); - BOOST_CHECK(UDQ::targetType("CBHP") == UDQVarType::CONNECTION_VAR); - BOOST_CHECK(UDQ::targetType("FBHP") == UDQVarType::FIELD_VAR); - BOOST_CHECK(UDQ::targetType("RBHP") == UDQVarType::REGION_VAR); - BOOST_CHECK(UDQ::targetType("ABHP") == UDQVarType::AQUIFER_VAR); - BOOST_CHECK(UDQ::targetType("SBHP") == UDQVarType::SEGMENT_VAR); - - BOOST_REQUIRE_THROW( UDQ::actionType("INVALID_ACTION"), std::invalid_argument); - BOOST_CHECK(UDQ::actionType("DEFINE") == UDQAction::DEFINE ); - BOOST_CHECK(UDQ::actionType("UNITS") == UDQAction::UNITS ); - BOOST_CHECK(UDQ::actionType("ASSIGN") == UDQAction::ASSIGN ); -} - - -BOOST_AUTO_TEST_CASE(UDQ_KEWYORDS) { - const std::string input = R"( -RUNSPEC -UDQDIMS - 10* 'Y'/ -UDQPARAM - 3* 0.25 / -SCHEDULE -UDQ - ASSIGN WUBHP 0.0 / - UNITS WUBHP 'BARSA' / - DEFINE FUOPR AVEG(WOPR) + 1/ - ASSIGN WUXUNIT 0.0 / - DEFINE FUOPR AVEG(WOPR)/ -/ -DATES - 10 'JAN' 2010 / -/ -UDQ - ASSIGN WUBHP 0.0 / - DEFINE FUOPR AVEG(WOPR)/ - UNITS WUBHP 'BARSA' / -- Repeating the same unit multiple times is superfluous but OK -/ -)"; - - auto schedule = make_schedule(input); - const auto& udq = schedule.getUDQConfig(0); - BOOST_CHECK_EQUAL(2, udq.assignments().size()); - - BOOST_CHECK_THROW( udq.unit("NO_SUCH_KEY"), std::invalid_argument ); - BOOST_CHECK_EQUAL( udq.unit("WUBHP"), "BARSA"); - BOOST_CHECK( udq.has_keyword("WUBHP") ); - BOOST_CHECK( !udq.has_keyword("NO_SUCH_KEY") ); - BOOST_CHECK( !udq.has_unit("WUXUNIT")); - BOOST_CHECK( udq.has_unit("WUBHP")); - - Parser parser; - auto deck = parser.parseString(input); - auto udq_params1 = UDQParams(deck); - BOOST_CHECK_EQUAL(0.25, udq_params1.cmpEpsilon()); - auto& sim_rng1 = udq_params1.sim_rng(); - auto& true_rng1 = udq_params1.true_rng(); - - auto udq_params2 = UDQParams(deck); - auto& sim_rng2 = udq_params2.sim_rng(); - auto& true_rng2 = udq_params2.true_rng(); - - BOOST_CHECK( sim_rng1() == sim_rng2() ); - BOOST_CHECK( true_rng1() != true_rng2() ); - - udq_params1.reseedRNG(100); - udq_params2.reseedRNG(100); - BOOST_CHECK( true_rng1() == true_rng2() ); -} - -BOOST_AUTO_TEST_CASE(UDQ_CHANGE_UNITS_ILLEGAL) { - const std::string input = R"( -RUNSPEC -UDQDIMS - 10* 'Y'/ -UDQPARAM - 3* 0.25 / -SCHEDULE -UDQ - ASSIGN WUBHP 0.0 / - UNITS WUBHP 'BARSA' / - DEFINE FUOPR AVEG(WOPR) + 1/ -/ -DATES - 10 'JAN' 2010 / -/ -UDQ - ASSIGN WUBHP 0.0 / - DEFINE FUOPR AVEG(WOPR) + 1/ - UNITS WUBHP 'HOURS' / -- Changing unit runtime is *not* supported -/ -)"; - - BOOST_CHECK_THROW( make_schedule(input), std::invalid_argument); -} - - - - - -BOOST_AUTO_TEST_CASE(UDQ_DEFINE_WITH_SLASH) { - const std::string input = R"( -UDQ - DEFINE WUWCT WWPR / ( WWPR + WOPR ) / -/ -)"; - Parser parser; - auto deck = parser.parseString(input); - const auto& udq = deck.getKeyword("UDQ"); - const auto& record = udq.getRecord(0); - const auto& data_item = record.getItem("DATA"); - const auto& data = RawString::strings( data_item.getData() ); - std::vector exp = {"WWPR", "/", "(", "WWPR", "+", "WOPR", ")"}; - BOOST_CHECK_EQUAL_COLLECTIONS(data.begin(), data.end(), - exp.begin(), exp.end()); -} - - -BOOST_AUTO_TEST_CASE(UDQ_ASSIGN_DATA) { - const std::string input = R"( -RUNSPEC -UDQDIMS - 10* 'Y'/ -UDQPARAM - 3* 0.25 / -SCHEDULE -UDQ -ASSIGN WU1 P12 4.0 / -ASSIGN WU2 8.0 / -/ -)"; - const auto schedule = make_schedule(input); - const auto& udq = schedule.getUDQConfig(0); - const auto& assignments = udq.assignments(); - const auto& ass0 = assignments[0]; - const auto& ass1 = assignments[1]; - auto w1 = ass0.eval({"P1", "P2", "P12"}); - auto w2 = ass1.eval({"P1", "P2", "P12"}); - BOOST_CHECK_EQUAL(w1.name(), "WU1"); - BOOST_CHECK_EQUAL(w2.name(), "WU2"); - - BOOST_CHECK_EQUAL( w1["P12"].value(), 4.0 ); - BOOST_CHECK_EQUAL( w1["P1"].defined(), false ); - BOOST_CHECK_EQUAL( w1["P2"].defined(), false ); - - BOOST_CHECK_EQUAL( w2["P12"].value(), 8.0 ); - BOOST_CHECK_EQUAL( w2["P1"].value(), 8.0 ); - BOOST_CHECK_EQUAL( w2["P2"].value(), 8.0 ); -} - - - - -BOOST_AUTO_TEST_CASE(UDQ_CONTEXT) { - SummaryState st(std::chrono::system_clock::now()); - UDQFunctionTable func_table; - UDQParams udqp; - UDQContext ctx(func_table, st); - BOOST_CHECK_EQUAL(ctx.get("JAN"), 1.0); - - BOOST_REQUIRE_THROW(ctx.get("NO_SUCH_KEY"), std::out_of_range); - - for (std::string& key : std::vector({"ELAPSED", "MSUMLINS", "MSUMNEWT", "NEWTON", "TCPU", "TIME", "TIMESTEP"})) - BOOST_CHECK_NO_THROW( ctx.get(key) ); - - st.update("SUMMARY:KEY", 1.0); - BOOST_CHECK_EQUAL(ctx.get("SUMMARY:KEY") , 1.0 ); -} - -BOOST_AUTO_TEST_CASE(UDQ_SET) { - UDQSet s1("NAME", 5); - - for (const auto& v : s1) { - BOOST_CHECK_EQUAL(false, v.defined()); - BOOST_REQUIRE_THROW( v.value(), std::invalid_argument); - } - BOOST_CHECK_EQUAL(s1.defined_size(), 0); - - s1.assign(1); - for (const auto& v : s1) { - BOOST_CHECK_EQUAL(true, v.defined()); - BOOST_CHECK_EQUAL( v.value(), 1.0); - } - BOOST_CHECK_EQUAL(s1.defined_size(), s1.size()); - - s1.assign(0,0.0); - { - UDQSet s2("NAME", 6); - BOOST_REQUIRE_THROW(s1 + s2, std::logic_error); - } - { - UDQSet s2("NAME", 5); - s2.assign(0, 25); - auto s3 = s1 + s2; - - auto v0 = s3[0]; - BOOST_CHECK_EQUAL(v0.value(), 25); - - auto v4 = s3[4]; - BOOST_CHECK( !v4.defined() ); - } - s1.assign(0,1.0); - { - UDQSet s2 = s1 + 1.0; - UDQSet s3 = s2 * 2.0; - UDQSet s4 = s1 - 1.0; - for (const auto& v : s2) { - BOOST_CHECK_EQUAL(true, v.defined()); - BOOST_CHECK_EQUAL( v.value(), 2.0); - } - - for (const auto& v : s3) { - BOOST_CHECK_EQUAL(true, v.defined()); - BOOST_CHECK_EQUAL( v.value(), 4.0); - } - - for (const auto& v : s4) { - BOOST_CHECK_EQUAL(true, v.defined()); - BOOST_CHECK_EQUAL( v.value(), 0); - } - } -} - - -BOOST_AUTO_TEST_CASE(UDQ_FUNCTION_TABLE) { - UDQFunctionTable udqft; - BOOST_CHECK(udqft.has_function("SUM")); - BOOST_CHECK(!udqft.has_function("NO_SUCH_FUNCTION")); - UDQSet arg("NAME", 5); - arg.assign(0,1); - arg.assign(2,2); - arg.assign(4,4); - { - const auto& func = dynamic_cast(udqft.get("SUM")); - auto result = func.eval(arg); - BOOST_CHECK_EQUAL(result[0].value(), 7); - } - { - const auto& func = dynamic_cast(udqft.get("NORM1")); - auto result = func.eval(arg); - BOOST_CHECK_EQUAL(result[0].value(), 7); - } - { - const auto& func = dynamic_cast(udqft.get("NORM2")); - auto result = func.eval(arg); - BOOST_CHECK_EQUAL(result[0].value(), std::sqrt(1 + 4+ 16)); - } - { - const auto& func = dynamic_cast(udqft.get("NORMI")); - auto result = func.eval(arg); - BOOST_CHECK_EQUAL(result[0].value(), 4); - } - { - const auto& func = dynamic_cast(udqft.get("MIN")); - auto result = func.eval(arg); - BOOST_CHECK_EQUAL(result[0].value(), 1); - } - { - const auto& func = dynamic_cast(udqft.get("MAX")); - auto result = func.eval(arg); - BOOST_CHECK_EQUAL(result[0].value(), 4); - } - { - const auto& func = dynamic_cast(udqft.get("AVEA")); - auto result = func.eval(arg); - BOOST_CHECK_EQUAL(result[0].value(), 7.0/3); - } - { - const auto& func = dynamic_cast(udqft.get("AVEG")); - auto result = func.eval(arg); - BOOST_CHECK_EQUAL(result[0].value(), std::exp((std::log(1) + std::log(2.0) + std::log(4))/3)); - } - { - const auto& func = dynamic_cast(udqft.get("PROD")); - auto result = func.eval(arg); - BOOST_CHECK_EQUAL(result[0].value(), 8.0); - } - { - UDQSet arg2("NAME", 4); - arg2.assign(0,1); - arg2.assign(2,4); - arg2.assign(3,4); - const auto& func = dynamic_cast(udqft.get("AVEH")); - auto result = func.eval(arg2); - BOOST_CHECK_EQUAL(result[0].value(), 2.0); - } -} - -BOOST_AUTO_TEST_CASE(CMP_FUNCTIONS) { - UDQFunctionTable udqft; - UDQSet arg1("NAME", 5); - UDQSet arg2("NAME", 5); - UDQSet arg3("NAME", 3); - arg1.assign(1,1); - - arg1.assign(0,1); - arg1.assign(2,2); - arg1.assign(4,4); - - arg2.assign(0, 0.9); - arg2.assign(2, 2.5); - arg2.assign(4, 4.0); - - BOOST_CHECK_THROW(UDQBinaryFunction::EQ(0.25, arg1, arg3), std::logic_error); - { - auto result = UDQBinaryFunction::EQ(0, arg1, arg2); - - BOOST_CHECK_EQUAL( result.defined_size(), 3 ); - BOOST_CHECK_EQUAL( result[0].value(), 0); - BOOST_CHECK_EQUAL( result[2].value(), 0); - BOOST_CHECK_EQUAL( result[4].value(), 1); - - result = UDQBinaryFunction::EQ(0.20, arg1, arg2); - BOOST_CHECK_EQUAL( result[0].value(), 1); - BOOST_CHECK_EQUAL( result[2].value(), 0); - BOOST_CHECK_EQUAL( result[4].value(), 1); - - const auto& func = dynamic_cast(udqft.get("==")); - result = func.eval(arg1, arg2); - BOOST_CHECK_EQUAL( result[0].value(), 0); - BOOST_CHECK_EQUAL( result[2].value(), 0); - BOOST_CHECK_EQUAL( result[4].value(), 1); - } - { - const auto& func = dynamic_cast(udqft.get("<")); - auto result = func.eval(arg1, arg2); - BOOST_CHECK_EQUAL( result.defined_size(), 3 ); - BOOST_CHECK_EQUAL( result[0].value(), 0); - BOOST_CHECK_EQUAL( result[2].value(), 1); - BOOST_CHECK_EQUAL( result[4].value(), 0); - } - { - const auto& func = dynamic_cast(udqft.get(">")); - auto result = func.eval(arg1, arg2); - BOOST_CHECK_EQUAL( result.defined_size(), 3 ); - BOOST_CHECK_EQUAL( result[0].value(), 1); - BOOST_CHECK_EQUAL( result[2].value(), 0); - BOOST_CHECK_EQUAL( result[4].value(), 0); - } - { - const auto& func = dynamic_cast(udqft.get("^")); - UDQSet arg1_local("NAME", 4); - UDQSet arg2_local("NAME", 4); - - for (std::size_t i=0; i < arg1_local.size(); i++) { - arg1_local.assign(i, i + 1); - arg2_local.assign(i, 2); - } - auto result = func.eval(arg1_local, arg2_local); - for (std::size_t i=0; i < arg1_local.size(); i++) - BOOST_CHECK_EQUAL( result[i].value(), (i+1)*(i+1)); - } - { - auto result = UDQBinaryFunction::GE(1.0, arg1, arg2); - BOOST_CHECK_EQUAL( result[0].value(), 1); - - // This is bisarre - but due to the large epsilon 2 and 2.5 compare as - // equal; and then we evaluate 2 >= 2.5 as TRUE! - BOOST_CHECK_EQUAL( result[2].value(), 1); - BOOST_CHECK_EQUAL( result[4].value(), 1); - } - { - const auto& func = dynamic_cast(udqft.get("<=")); - auto result = func.eval(arg1, arg2); - BOOST_CHECK_EQUAL( result[0].value(), 0); - BOOST_CHECK_EQUAL( result[2].value(), 1); - BOOST_CHECK_EQUAL( result[4].value(), 1); - - - } -} - - - -BOOST_AUTO_TEST_CASE(ELEMENTAL_UNARY_FUNCTIONS) { - UDQFunctionTable udqft; - UDQSet arg("NAME", 5); - arg.assign(0,1); - arg.assign(2,2); - arg.assign(4,4); - - { - const auto& func = dynamic_cast(udqft.get("ABS")); - UDQSet arg2("NAME", 5); - arg2.assign(0,1); - arg2.assign(2,-2); - arg2.assign(4,4); - auto result = func.eval(arg2); - BOOST_CHECK_EQUAL( result[0].value(), 1); - BOOST_CHECK_EQUAL( result[2].value(), 2); - BOOST_CHECK_EQUAL( result[4].value(), 4); - } - { - const auto& func = dynamic_cast(udqft.get("DEF")); - auto result = func.eval(arg); - BOOST_CHECK_EQUAL( result[0].value(), 1); - BOOST_CHECK_EQUAL( result[2].value(), 1); - BOOST_CHECK_EQUAL( result[4].value(), 1); - } - { - const auto& func = dynamic_cast(udqft.get("UNDEF")); - auto result = func.eval(arg); - BOOST_CHECK_EQUAL( result[1].value(), 1); - BOOST_CHECK_EQUAL( result[3].value(), 1); - BOOST_CHECK_EQUAL( result.defined_size(), 2); - } - { - const auto& func = dynamic_cast(udqft.get("EXP")); - auto result = func.eval(arg); - BOOST_CHECK_EQUAL( result[0].value(), std::exp(1)); - BOOST_CHECK_EQUAL( result[2].value(), std::exp(2)); - BOOST_CHECK_EQUAL( result[4].value(), std::exp(4)); - } - { - const auto& func = dynamic_cast(udqft.get("IDV")); - auto result = func.eval(arg); - BOOST_CHECK_EQUAL( result[0].value(), 1); - BOOST_CHECK_EQUAL( result[1].value(), 0); - BOOST_CHECK_EQUAL( result[2].value(), 1); - BOOST_CHECK_EQUAL( result[3].value(), 0); - BOOST_CHECK_EQUAL( result[4].value(), 1); - } - { - const auto& func = dynamic_cast(udqft.get("LOG")); - UDQSet arg_local("NAME", 3); - arg_local.assign(0, 10); - arg_local.assign(2,1000); - - auto result = func.eval(arg_local); - BOOST_CHECK_EQUAL( result[0].value(), 1); - BOOST_CHECK( !result[1] ); - BOOST_CHECK_EQUAL( result[2].value(), 3); - } - { - const auto& func = dynamic_cast(udqft.get("NINT")); - UDQSet arg_local("NAME", 3); - arg_local.assign(0, 0.75); - arg_local.assign(2, 1.25); - - auto result = func.eval(arg_local); - BOOST_CHECK_EQUAL( result[0].value(), 1); - BOOST_CHECK( !result[1] ); - BOOST_CHECK_EQUAL( result[2].value(), 1); - } - { - const auto& func = dynamic_cast(udqft.get("RANDN")); - UDQSet arg_local("NAME", 3); - arg_local.assign(0, -1.0); - arg_local.assign(2, -1.0); - - auto result1 = func.eval(arg_local); - auto result2 = func.eval(arg_local); - BOOST_CHECK( result1[0].value() != -1.0); - BOOST_CHECK( !result1[1] ); - BOOST_CHECK( result1[2].value() != -1.0); - - BOOST_CHECK( result1[0].value() != result2[0].value()); - BOOST_CHECK( result1[2].value() != result2[2].value()); - } - { - const auto& func = dynamic_cast(udqft.get("SORTA")); - auto result = func.eval(arg); - - BOOST_CHECK_EQUAL( result[0].value(), 1); - BOOST_CHECK( !result[1] ); - BOOST_CHECK_EQUAL( result[2].value(), 2); - BOOST_CHECK( !result[3] ); - BOOST_CHECK_EQUAL( result[4].value(), 3); - } - { - const auto& func = dynamic_cast(udqft.get("SORTD")); - auto result = func.eval(arg); - - BOOST_CHECK_EQUAL( result[0].value(), 3); - BOOST_CHECK( !result[1] ); - BOOST_CHECK_EQUAL( result[2].value(), 2); - BOOST_CHECK( !result[3] ); - BOOST_CHECK_EQUAL( result[4].value(), 1); - } -} - - -BOOST_AUTO_TEST_CASE(UNION_FUNCTIONS) { - UDQFunctionTable udqft; - UDQSet arg1("NAME", 5); - UDQSet arg2("NAME", 5); - - arg1.assign(0,1); - arg1.assign(2,2); - - arg2.assign(0, 1.0); - arg2.assign(3, 3 ); - - const auto& func = dynamic_cast(udqft.get("UADD")); - auto result = func.eval(arg1, arg2); - BOOST_CHECK_EQUAL( 3, result.defined_size() ); - BOOST_CHECK_EQUAL( 2, result[0].value() ); - BOOST_CHECK_EQUAL( 2, result[2].value() ); - BOOST_CHECK_EQUAL( 3, result[3].value() ); -} - - - - -BOOST_AUTO_TEST_CASE(FUNCTIONS_INVALID_ARGUMENT) { - UDQSet arg("NAME",3); - arg.assign(0, -1); - BOOST_REQUIRE_THROW( UDQScalarFunction::AVEG(arg), std::invalid_argument); - BOOST_REQUIRE_THROW( UDQUnaryElementalFunction::LOG(arg), std::invalid_argument); - BOOST_REQUIRE_THROW( UDQUnaryElementalFunction::LN(arg), std::invalid_argument); -} - -BOOST_AUTO_TEST_CASE(UDQ_SET_DIV) { - UDQSet s("NAME", 5); - s.assign(0,1); - s.assign(2,2); - s.assign(4,5); - - auto result = 10 / s; - BOOST_CHECK_EQUAL( result.defined_size(), 3); - BOOST_CHECK_EQUAL( result[0].value(), 10); - BOOST_CHECK_EQUAL( result[2].value(), 5); - BOOST_CHECK_EQUAL( result[4].value(), 2); -} - - - -BOOST_AUTO_TEST_CASE(UDQASSIGN_TEST) { - UDQAssign as1("WUPR", {}, 1.0); - UDQAssign as2("WUPR", {"P*"}, 2.0); - UDQAssign as3("WUPR", {"P1"}, 4.0); - std::vector ws1 = {"P1", "P2", "I1", "I2"}; - - auto res1 = as1.eval(ws1); - BOOST_CHECK_EQUAL(res1.size(), 4); - BOOST_CHECK_EQUAL(res1["P1"].value(), 1.0); - BOOST_CHECK_EQUAL(res1["I2"].value(), 1.0); - - auto res2 = as2.eval(ws1); - BOOST_CHECK_EQUAL(res2["P1"].value(), 2.0); - BOOST_CHECK_EQUAL(res2["P2"].value(), 2.0); - BOOST_CHECK(!res2["I1"].defined()); - BOOST_CHECK(!res2["I2"].defined()); - - auto res3 = as3.eval(ws1); - BOOST_CHECK_EQUAL(res3["P1"].value(), 4.0); - BOOST_CHECK(!res3["P2"].defined()); - BOOST_CHECK(!res3["I1"].defined()); - BOOST_CHECK(!res3["I2"].defined()); -} - -BOOST_AUTO_TEST_CASE(UDQ_POW_TEST) { - UDQFunctionTable udqft; - UDQParams udqp; - UDQDefine def_pow1(udqp, "WU", {"WOPR", "+", "WWPR", "*", "WGOR", "^", "WWIR"}); - UDQDefine def_pow2(udqp, "WU", {"(", "WOPR", "+", "WWPR", ")", "^", "(", "WOPR", "+" , "WGOR", "*", "WWIR", "-", "WOPT", ")"}); - SummaryState st(std::chrono::system_clock::now()); - UDQContext context(udqft, st); - - st.update_well_var("P1", "WOPR", 1); - st.update_well_var("P1", "WWPR", 2); - st.update_well_var("P1", "WGOR", 3); - st.update_well_var("P1", "WWIR", 4); - st.update_well_var("P1", "WOPT", 7); - - auto res_pow1 = def_pow1.eval(context); - auto res_pow2 = def_pow2.eval(context); - BOOST_CHECK_EQUAL( res_pow1["P1"].value() , 1 + 2 * std::pow(3,4)); - BOOST_CHECK_EQUAL( res_pow2["P1"].value() , std::pow(1 + 2, 1 + 3*4 - 7)); -} - -BOOST_AUTO_TEST_CASE(UDQ_CMP_TEST) { - UDQFunctionTable udqft; - UDQParams udqp; - UDQDefine def_cmp(udqp, "WU", {"WOPR", ">", "WWPR", "+", "WGOR", "*", "WWIR"}); - SummaryState st(std::chrono::system_clock::now()); - UDQContext context(udqft, st); - - st.update_well_var("P1", "WOPR", 0); - st.update_well_var("P1", "WWPR", 10); - st.update_well_var("P1", "WGOR", -3); - st.update_well_var("P1", "WWIR", 4); - - st.update_well_var("P2", "WOPR", 0); - st.update_well_var("P2", "WWPR", -2); - st.update_well_var("P2", "WGOR", 4); - st.update_well_var("P2", "WWIR", 1); - - auto res_cmp = def_cmp.eval(context); - BOOST_CHECK_EQUAL( res_cmp["P1"].value() , 1.0); - BOOST_CHECK_EQUAL( res_cmp["P2"].value() , 0.0); -} - -/*BOOST_AUTO_TEST_CASE(UDQPARSE_ERROR) { - setUDQFunctionTable udqft; - UDQDefine def1(udqft, "WUBHP", {"WWCT", "+"}); -} -*/ - -BOOST_AUTO_TEST_CASE(UDQ_SCALAR_SET) { - UDQParams udqp; - UDQFunctionTable udqft; - SummaryState st(std::chrono::system_clock::now()); - UDQContext context(udqft, st); - - st.update_well_var("P1", "WOPR", 1); - st.update_well_var("P2", "WOPR", 2); - st.update_well_var("P3", "WOPR", 3); - st.update_well_var("P4", "WOPR", 4); - - st.update_well_var("P1", "WWPR", 1); - st.update_well_var("P2", "WWPR", 2); - st.update_well_var("P3", "WWPR", 3); - st.update_well_var("P4", "WWPR", 4); - - { - UDQDefine def(udqp, "WUOPR", {"WOPR", "'*1'"}); - auto res = def.eval(context); - BOOST_CHECK_EQUAL(4, res.size()); - auto well1 = res["P1"]; - BOOST_CHECK( well1.defined() ); - BOOST_CHECK_EQUAL(well1.value() , 1); - - auto well2 = res["P2"]; - BOOST_CHECK( !well2.defined() ); - - auto well4 = res["P4"]; - BOOST_CHECK( !well4.defined() ); - } - { - UDQDefine def(udqp, "WUOPR", {"1"}); - auto res = def.eval(context); - BOOST_CHECK_EQUAL(4, res.size()); - auto well1 = res["P1"]; - BOOST_CHECK( well1.defined() ); - BOOST_CHECK_EQUAL(well1.value() , 1); - - auto well2 = res["P2"]; - BOOST_CHECK( well2.defined() ); - BOOST_CHECK_EQUAL(well2.value() , 1); - - auto well4 = res["P4"]; - BOOST_CHECK( well4.defined() ); - BOOST_CHECK_EQUAL(well4.value() , 1); - } - { - UDQDefine def(udqp, "WUOPR", {"WOPR", "'P1'"}); - auto res = def.eval(context); - BOOST_CHECK_EQUAL(4, res.size()); - auto well1 = res["P1"]; - BOOST_CHECK( well1.defined() ); - BOOST_CHECK_EQUAL(well1.value() , 1); - - auto well2 = res["P2"]; - BOOST_CHECK( well2.defined() ); - BOOST_CHECK_EQUAL(well2.value() , 1); - - auto well4 = res["P4"]; - BOOST_CHECK( well4.defined() ); - BOOST_CHECK_EQUAL(well4.value() , 1); - } -} - - -BOOST_AUTO_TEST_CASE(UDQ_SORTA) { - UDQParams udqp; - UDQFunctionTable udqft; - UDQDefine def1(udqp, "WUPR1" , {"1", "/", "(", "WWCT", "'OP*'", "+", "0.00001", ")"}); - UDQDefine def_sort(udqp , "WUPR3", {"SORTA", "(", "WUPR1", ")" }); - SummaryState st(std::chrono::system_clock::now()); - UDQContext context(udqft, st); - - st.update_well_var("OPL01", "WWCT", 0.7); - st.update_well_var("OPL02", "WWCT", 0.8); - st.update_well_var("OPU01", "WWCT", 0.0); - st.update_well_var("OPU02", "WWCT", 0.0); - - auto res1 = def1.eval(context); - st.update_well_var("OPL01", "WUPR1", res1["OPL01"].value()); - st.update_well_var("OPL02", "WUPR1", res1["OPL02"].value()); - st.update_well_var("OPU01", "WUPR1", res1["OPU01"].value()); - st.update_well_var("OPU02", "WUPR1", res1["OPU02"].value()); - - auto res_sort = def_sort.eval(context); - BOOST_CHECK_EQUAL(res_sort["OPL02"].value(), 1.0); - BOOST_CHECK_EQUAL(res_sort["OPL01"].value(), 2.0); - BOOST_CHECK_EQUAL(res_sort["OPU01"].value() + res_sort["OPU02"].value(), 7.0); -} - - - -BOOST_AUTO_TEST_CASE(UDQ_BASIC_MATH_TEST) { - UDQParams udqp; - UDQFunctionTable udqft; - UDQDefine def_add(udqp, "WU2OPR", {"WOPR", "+", "WOPR"}); - UDQDefine def_sub(udqp, "WU2OPR", {"WOPR", "-", "WOPR"}); - UDQDefine def_mul(udqp, "WU2OPR", {"WOPR", "*", "WOPR"}); - UDQDefine def_div(udqp, "WU2OPR", {"WOPR", "/", "WOPR"}); - UDQDefine def_muladd(udqp , "WUX", {"WOPR", "+", "WOPR", "*", "WOPR"}); - UDQDefine def_wuwct(udqp , "WUWCT", {"WWPR", "/", "(", "WOPR", "+", "WWPR", ")"}); - SummaryState st(std::chrono::system_clock::now()); - UDQContext context(udqft, st); - - st.update_well_var("P1", "WOPR", 1); - st.update_well_var("P2", "WOPR", 2); - st.update_well_var("P3", "WOPR", 3); - st.update_well_var("P4", "WOPR", 4); - - st.update_well_var("P1", "WWPR", 1); - st.update_well_var("P2", "WWPR", 2); - st.update_well_var("P3", "WWPR", 3); - st.update_well_var("P4", "WWPR", 4); - - auto res_add = def_add.eval(context); - BOOST_CHECK_EQUAL( res_add.size(), 4); - BOOST_CHECK_EQUAL( res_add["P1"].value(), 2); - BOOST_CHECK_EQUAL( res_add["P2"].value(), 4); - BOOST_CHECK_EQUAL( res_add["P3"].value(), 6); - BOOST_CHECK_EQUAL( res_add["P4"].value(), 8); - - auto res_sub = def_sub.eval(context); - BOOST_CHECK_EQUAL( res_sub.size(), 4); - BOOST_CHECK_EQUAL( res_sub["P1"].value(), 0); - BOOST_CHECK_EQUAL( res_sub["P2"].value(), 0); - BOOST_CHECK_EQUAL( res_sub["P3"].value(), 0); - BOOST_CHECK_EQUAL( res_sub["P4"].value(), 0); - - auto res_div = def_div.eval(context); - BOOST_CHECK_EQUAL( res_div.size(), 4); - BOOST_CHECK_EQUAL( res_div["P1"].value(), 1); - BOOST_CHECK_EQUAL( res_div["P2"].value(), 1); - BOOST_CHECK_EQUAL( res_div["P3"].value(), 1); - BOOST_CHECK_EQUAL( res_div["P4"].value(), 1); - - auto res_mul = def_mul.eval(context); - BOOST_CHECK_EQUAL( res_mul.size(), 4); - BOOST_CHECK_EQUAL( res_mul["P1"].value(), 1); - BOOST_CHECK_EQUAL( res_mul["P2"].value(), 4); - BOOST_CHECK_EQUAL( res_mul["P3"].value(), 9); - BOOST_CHECK_EQUAL( res_mul["P4"].value(),16); - - auto res_muladd = def_muladd.eval(context); - BOOST_CHECK_EQUAL( res_muladd.size(), 4); - BOOST_CHECK_EQUAL( res_muladd["P1"].value(), 1 + 1); - BOOST_CHECK_EQUAL( res_muladd["P2"].value(), 4 + 2); - BOOST_CHECK_EQUAL( res_muladd["P3"].value(), 9 + 3); - BOOST_CHECK_EQUAL( res_muladd["P4"].value(),16 + 4); - - auto res_wuwct= def_wuwct.eval(context); - BOOST_CHECK_EQUAL( res_wuwct.size(), 4); - BOOST_CHECK_EQUAL( res_wuwct["P1"].value(),0.50); - BOOST_CHECK_EQUAL( res_wuwct["P2"].value(),0.50); - BOOST_CHECK_EQUAL( res_wuwct["P3"].value(),0.50); - BOOST_CHECK_EQUAL( res_wuwct["P4"].value(),0.50); -} - -BOOST_AUTO_TEST_CASE(DECK_TEST) { - UDQParams udqp; - UDQFunctionTable udqft(udqp); - UDQDefine def(udqp, "WUOPRL", {"(", "WOPR", "OP1", "-", "150", ")", "*", "0.90"}); - SummaryState st(std::chrono::system_clock::now()); - UDQContext context(udqft, st); - - st.update_well_var("OP1", "WOPR", 300); - st.update_well_var("OP2", "WOPR", 3000); - st.update_well_var("OP3", "WOPR", 30000); - - auto res = def.eval(context); - BOOST_CHECK_EQUAL(res.size(), 3); - for (std::size_t index = 0; index < res.size(); index++) - BOOST_CHECK( res[index].value() == (300 - 150)*0.90); -} - - -BOOST_AUTO_TEST_CASE(UDQPARSE_TEST1) { - UDQParams udqp; - UDQDefine def1(udqp, "WUBHP", {"1/(WWCT", "'W1*')"}); - BOOST_CHECK_EQUAL( def1.input_string() , "1/(WWCT 'W1*')"); - - UDQDefine def2(udqp, "WUBHP", {"2*(1", "+" , "WBHP)"}); - BOOST_CHECK_EQUAL( def2.input_string() , "2*(1 + WBHP)"); -} - - -BOOST_AUTO_TEST_CASE(UDQ_PARSE_ERROR) { - UDQParams udqp; - ParseContext parseContext; - ErrorGuard errors; - std::vector tokens = {"WBHP", "+"}; - parseContext.update(ParseContext::UDQ_PARSE_ERROR, InputError::IGNORE); - { - UDQDefine def1(udqp, "WUBHP", tokens, parseContext, errors); - SummaryState st(std::chrono::system_clock::now()); - UDQFunctionTable udqft(udqp); - UDQContext context(udqft, st); - st.update_well_var("P1", "WBHP", 1); - - auto res = def1.eval(context); - BOOST_CHECK_EQUAL(res["P1"].value(), udqp.undefinedValue()); - } - - parseContext.update(ParseContext::UDQ_PARSE_ERROR, InputError::THROW_EXCEPTION); - BOOST_CHECK_THROW( UDQDefine(udqp, "WUBHP", tokens, parseContext, errors), std::invalid_argument); -} - -BOOST_AUTO_TEST_CASE(UDQ_TYPE_ERROR) { - UDQParams udqp; - ParseContext parseContext; - ErrorGuard errors; - std::vector tokens1 = {"WBHP", "+", "1"}; - std::vector tokens2 = {"SUM", "(", "WBHP", ")"}; - parseContext.update(ParseContext::UDQ_TYPE_ERROR, InputError::IGNORE); - { - UDQDefine def1(udqp, "FUBHP", tokens1, parseContext, errors); - UDQDefine def2(udqp, "WUBHP", tokens2, parseContext, errors); - - SummaryState st(std::chrono::system_clock::now()); - UDQFunctionTable udqft(udqp); - UDQContext context(udqft, st); - st.update_well_var("P1", "WBHP", 1); - st.update_well_var("P2", "WBHP", 2); - - auto res1 = def1.eval(context); - BOOST_CHECK_EQUAL(res1[0].value(), udqp.undefinedValue()); - - auto res2 = def2.eval(context); - BOOST_CHECK_EQUAL(res2.size(), st.num_wells()); - for (std::size_t index = 0; index < res2.size(); index++) - BOOST_CHECK_EQUAL(res2[index].value(), 3); - } - - parseContext.update(ParseContext::UDQ_TYPE_ERROR, InputError::THROW_EXCEPTION); - - // This fails because the well expression (WBHP + 1) is assigned to the field variable FUBHP - BOOST_CHECK_THROW( UDQDefine(udqp, "FUBHP", tokens1, parseContext, errors), std::invalid_argument); -} - - - - -BOOST_AUTO_TEST_CASE(UDA_VALUE) { - UDAValue value0; - BOOST_CHECK(value0.is()); - BOOST_CHECK(!value0.is()); - BOOST_CHECK_EQUAL( value0.get(), 0); - BOOST_CHECK_THROW( value0.get(), std::invalid_argument); - value0 = 10; - BOOST_CHECK_EQUAL( value0.get(), 10); - BOOST_CHECK_THROW( value0.get(), std::invalid_argument); - value0 = "STRING"; - BOOST_CHECK_EQUAL( value0.get(), std::string("STRING")); - BOOST_CHECK_THROW( value0.get(), std::invalid_argument); - - - UDAValue value1(10); - BOOST_CHECK(value1.is()); - BOOST_CHECK(!value1.is()); - BOOST_CHECK_EQUAL( value1.get(), 10); - BOOST_CHECK_NO_THROW( value1.assert_numeric() ); - - - - UDAValue value2("FUBHP"); - BOOST_CHECK(!value2.is()); - BOOST_CHECK(value2.is()); - BOOST_CHECK_EQUAL( value2.get(), std::string("FUBHP")); - BOOST_CHECK_THROW( value2.get(), std::invalid_argument); - BOOST_CHECK_THROW( value2.assert_numeric("SHould contain numeric value"), std::invalid_argument); -} - - -/* - The unit/dimension handling in the UDAvalue is hacky at best. -*/ - -BOOST_AUTO_TEST_CASE(UDA_VALUE_DIM) { - UDAValue value0(1); - Dimension dim(10); - UDAValue value1(1, dim); - - BOOST_CHECK_EQUAL( value0.get(), 1); - BOOST_CHECK_EQUAL( value0.getSI(), 1); - BOOST_CHECK_EQUAL( value1.get(), 1); - BOOST_CHECK_EQUAL( value1.getSI(), 10); -} - - -BOOST_AUTO_TEST_CASE(UDQ_INPUT_BASIC) { - std::string deck_string = R"( -SCHEDULE -UDQ - ASSIGN WUBHP1 11 / 0 - ASSIGN WUOPR 20 / 1 - ASSIGN WUBHP2 P2 12 / 2 - --ASSIGN WUBHP 0 / --DUMMY 3 - UNITS WUBHP 'BARSA' / - UNITS WUOPR 'SM3/DAY' / - DEFINE WUWCT WWPR / (WWPR + WOPR) / 4 - UNITS WUWCT '1' / - DEFINE FUOPR SUM(WOPR) / 5 - UNITS FUOPR 'SM3/DAY' / - --ASSIGN FUXXX 0 / --DUMMY 6 - UNITS FUXXX 'SM3/DAY' / -/ -UDQ - ASSIGN WUBHPX P2 12 / 7 - DEFINE FUOPRX SUM(WOPR) / 8 -/ -)"; - auto schedule = make_schedule(deck_string); - const auto& udq = schedule.getUDQConfig(0); - - - const auto& input = udq.input(); - const auto& def = udq.definitions(); - BOOST_CHECK_EQUAL(input.size(), 9); - BOOST_CHECK_EQUAL(udq.size(), 9); - - BOOST_CHECK( input[0].is() ); - BOOST_CHECK( input[1].is() ); - BOOST_CHECK( input[2].is() ); - BOOST_CHECK( input[3].is() ); - BOOST_CHECK( input[4].is() ); - BOOST_CHECK( input[5].is() ); - BOOST_CHECK( input[6].is() ); - BOOST_CHECK( input[7].is() ); - BOOST_CHECK( input[8].is() ); - - BOOST_CHECK_EQUAL( input[5].unit(), "SM3/DAY" ); - - BOOST_CHECK_EQUAL(def[0].keyword(), "WUWCT"); - BOOST_CHECK_EQUAL(def[1].keyword(), "FUOPR"); - BOOST_CHECK_EQUAL(def[2].keyword(), "FUOPRX"); - - BOOST_CHECK_EQUAL( input[4].get().keyword(), "WUWCT"); - BOOST_CHECK_EQUAL( input[5].get().keyword(), "FUOPR"); - BOOST_CHECK_EQUAL( input[8].get().keyword(), "FUOPRX"); - - BOOST_CHECK( udq.has_keyword("FUXXX") ); - const auto wubhp1 = udq["WUBHP1"]; - BOOST_CHECK( wubhp1.is() ); -} - - -BOOST_AUTO_TEST_CASE(UDQ_INPUT_OVERWRITE) { - std::string deck_string = R"( -SCHEDULE -UDQ - ASSIGN WUBHP1 11 / - ASSIGN WUOPR 20 / - ASSIGN WUBHP2 P2 12 / - --ASSIGN WUBHP 0 / --DUMMY - UNITS WUBHP 'BARSA' / - UNITS WUOPR 'SM3/DAY' / - DEFINE WUWCT WWPR / (WWPR + WOPR) / - UNITS WUWCT '1' / - DEFINE FUOPR SUM(WOPR) / - UNITS FUOPR 'SM3/DAY' / -/ -UDQ - DEFINE WUBHP1 SUM(WOPR) / - DEFINE FUOPR MAX(WOPR) / -/ -)"; - auto schedule = make_schedule(deck_string); - const auto& udq = schedule.getUDQConfig(0); - - - const auto& input = udq.input(); - BOOST_CHECK_EQUAL(input.size(), 6); - BOOST_CHECK_EQUAL(udq.size(), 6); - - BOOST_CHECK( input[0].is()); - BOOST_CHECK_EQUAL( input[0].keyword(), "WUBHP1"); - - const auto fuopr = udq["FUOPR"]; - BOOST_CHECK( fuopr.is() ); - const auto& def2 = fuopr.get(); - BOOST_CHECK_EQUAL(def2.input_string(), "MAX(WOPR)"); -} - - -BOOST_AUTO_TEST_CASE(UDQ_USAGE) { - UDQActive usage; - UDQParams params; - UDQConfig conf(params); - BOOST_CHECK_EQUAL( usage.IUAD_size(), 0 ); - - UDAValue uda1("WUX"); - conf.add_assign(uda1.get(), {}, 100); - - usage.update(conf, uda1, "W1", UDAControl::WCONPROD_ORAT); - BOOST_CHECK_EQUAL( usage.IUAD_size(), 1 ); - BOOST_CHECK_EQUAL( usage[0].use_count, 1); - - usage.update(conf, uda1, "W1", UDAControl::WCONPROD_GRAT); - BOOST_CHECK_EQUAL( usage.IUAD_size(), 2 ); - BOOST_CHECK_EQUAL( usage[1].use_count, 1); - - const auto& rec = usage[0]; - BOOST_CHECK_EQUAL(rec.wgname, "W1"); - BOOST_CHECK_EQUAL(rec.udq, "WUX"); - BOOST_CHECK(rec.control == UDAControl::WCONPROD_ORAT); - - - for (std::size_t index = 0; index < usage.IUAD_size(); index++) { - const auto& record = usage[index]; - BOOST_CHECK_EQUAL(record.input_index, 0); - BOOST_CHECK_EQUAL(record.wgname, "W1"); - - if (index == 0) - BOOST_CHECK(record.control == UDAControl::WCONPROD_ORAT); - else - BOOST_CHECK(record.control == UDAControl::WCONPROD_GRAT); - - index += 1; - } - -} - - -BOOST_AUTO_TEST_CASE(IntegrationTest) { -#include "data/integration_tests/udq.data" - auto schedule = make_schedule(deck_string); - { - const auto& active = schedule.udqActive(1); - BOOST_CHECK_EQUAL(active.IUAD_size(), 4); - - BOOST_CHECK(active[0].control == UDAControl::WCONPROD_ORAT); - BOOST_CHECK(active[1].control == UDAControl::WCONPROD_LRAT); - BOOST_CHECK(active[2].control == UDAControl::WCONPROD_ORAT); - BOOST_CHECK(active[3].control == UDAControl::WCONPROD_LRAT); - - BOOST_CHECK(active[0].wgname == "OPL02"); - BOOST_CHECK(active[1].wgname == "OPL02"); - BOOST_CHECK(active[2].wgname == "OPU02"); - BOOST_CHECK(active[3].wgname == "OPU02"); - - BOOST_CHECK(active[0].udq == "WUOPRL"); - BOOST_CHECK(active[1].udq == "WULPRL"); - BOOST_CHECK(active[2].udq == "WUOPRU"); - BOOST_CHECK(active[3].udq == "WULPRU"); - - BOOST_CHECK(active[0].input_index == 0); - BOOST_CHECK(active[1].input_index == 1); - BOOST_CHECK(active[2].input_index == 2); - BOOST_CHECK(active[3].input_index == 3); - - BOOST_CHECK(active[0].use_count == 1); - BOOST_CHECK(active[1].use_count == 1); - BOOST_CHECK(active[2].use_count == 1); - BOOST_CHECK(active[3].use_count == 1); - } -} - -Schedule make_udq_schedule(const std::string& schedule_string) { -#include "data/integration_tests/udq2.data" - deck_string += schedule_string; - return make_schedule(deck_string); -} - -BOOST_AUTO_TEST_CASE(IntegrationTest2) { - const std::string udq_string = R"( -UDQ -DEFINE WUOPRL (WOPR PROD1 - 150) * 0.90 / -DEFINE WULPRL (WLPR PROD1 - 200) * 0.90 / -DEFINE WUOPRU (WOPR PROD2 - 250) * 0.80 / -DEFINE WULPRU (WLPR PROD2 - 300) * 0.80 / -DEFINE WUOPRL (WOPR PROD1 - 170) * 0.60 / -DEFINE WUXO (WOPR PROD1 - 170) * 0.60 / -DEFINE WUXL (WOPR PROD1 - 170) * 0.60 / --- units -UNITS WUOPRL SM3/DAY / -UNITS WULPRL SM3/DAY / -UNITS WUOPRU SM3/DAY / -UNITS WULPRU SM3/DAY / -/ -WCONPROD - 'PROD1' 'OPEN' 'GRUP' WUOPRU 1* 1* WULPRU 1* 60.0 / single wells -/ -WCONPROD - 'PROD2' 'OPEN' 'GRUP' WUOPRU 1* 1* WULPRU 1* 60.0 / single wells - / -WCONINJE - 'WINJ1' 'WAT' 'OPEN' 'BHP' 1* 1200 3500 1* / - 'WINJ2' 'WAT' 'OPEN' 'BHP' 1* 800 3500 1* / -/ -TSTEP - 5 / -WCONPROD - 'PROD2' 'OPEN' 'GRUP' WUXO 1* 1* WUXL 1* 60.0 / single wells -/ -TSTEP - 5 / -WCONPROD - 'PROD1' 'OPEN' 'GRUP' 100 1* 1* 100 1* 60.0 / single wells -/ -)"; - auto schedule = make_udq_schedule(udq_string); - - // First timestep - { - const auto& udq_active = schedule.udqActive(0); - BOOST_CHECK(udq_active); - BOOST_CHECK_EQUAL(udq_active.IUAD_size(), 2); - - const auto& record0 = udq_active[0]; - BOOST_CHECK_EQUAL( record0.uad_code, 300004); - BOOST_CHECK_EQUAL( record0.input_index, 2); - BOOST_CHECK_EQUAL( record0.use_count, 2); - BOOST_CHECK_EQUAL( record0.use_index, 0); - - const auto& record1 = udq_active[1]; - BOOST_CHECK_EQUAL( record1.uad_code, 600004); - BOOST_CHECK_EQUAL( record1.input_index, 3); - BOOST_CHECK_EQUAL( record1.use_count, 2); - BOOST_CHECK_EQUAL( record1.use_index, 2); - } - - { - // Second timestep - // - The WUOPRU and WULPRU udq are still used in the same manner for the PROD1 well. - // - The new UDQs WUXO and WUXL are now used for the PROD2 well. - const auto& udq_active = schedule.udqActive(1); - BOOST_CHECK(udq_active); - BOOST_CHECK_EQUAL(udq_active.IUAD_size(), 4); - - const auto& record0 = udq_active[0]; - BOOST_CHECK_EQUAL( record0.uad_code, 300004); - BOOST_CHECK_EQUAL( record0.input_index, 2); - BOOST_CHECK_EQUAL( record0.use_count, 1); - BOOST_CHECK_EQUAL( record0.use_index, 0); - - const auto& record1 = udq_active[1]; - BOOST_CHECK_EQUAL( record1.uad_code, 600004); - BOOST_CHECK_EQUAL( record1.input_index, 3); - BOOST_CHECK_EQUAL( record1.use_count, 1); - BOOST_CHECK_EQUAL( record1.use_index, 1); - - const auto& record2 = udq_active[2]; - BOOST_CHECK_EQUAL( record2.uad_code, 300004); - BOOST_CHECK_EQUAL( record2.input_index, 4); - BOOST_CHECK_EQUAL( record2.use_count, 1); - BOOST_CHECK_EQUAL( record2.use_index, 2); - - const auto& record3 = udq_active[3]; - BOOST_CHECK_EQUAL( record3.uad_code, 600004); - BOOST_CHECK_EQUAL( record3.input_index, 5); - BOOST_CHECK_EQUAL( record3.use_count, 1); - BOOST_CHECK_EQUAL( record3.use_index, 3); - } - - { - // Third timestep - // - The new UDQs WUXO and WUXL are now used for the PROD2 well. - // - The PROD1 well does not use UDQ - const auto& udq_active = schedule.udqActive(2); - BOOST_CHECK(udq_active); - BOOST_CHECK_EQUAL(udq_active.IUAD_size(), 2); - - const auto& record0 = udq_active[0]; - BOOST_CHECK_EQUAL( record0.uad_code, 300004); - BOOST_CHECK_EQUAL( record0.input_index, 4); - BOOST_CHECK_EQUAL( record0.use_count, 1); - BOOST_CHECK_EQUAL( record0.use_index, 0); - - const auto& record1 = udq_active[1]; - BOOST_CHECK_EQUAL( record1.uad_code, 600004); - BOOST_CHECK_EQUAL( record1.input_index, 5); - BOOST_CHECK_EQUAL( record1.use_count, 1); - BOOST_CHECK_EQUAL( record1.use_index, 1); - } - { - const auto& udq_config = schedule.getUDQConfig(2); - const auto& def = udq_config.definitions(); - const auto& def1 = def[0]; - const auto& tokens = def1.func_tokens(); - BOOST_CHECK_EQUAL( tokens.count( UDQTokenType::number ), 1); - BOOST_CHECK_EQUAL( tokens.count( UDQTokenType::ecl_expr), 1); - BOOST_CHECK_EQUAL( tokens.count( UDQTokenType::binary_op_sub), 1); - BOOST_CHECK_EQUAL( tokens.count( UDQTokenType::binary_op_mul), 1); - } -} - diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/UnitTests.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/UnitTests.cpp deleted file mode 100644 index f3110657c9..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/UnitTests.cpp +++ /dev/null @@ -1,652 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#define BOOST_TEST_MODULE UnitTests - -#include -#include -#include - -#include - -#include -#include - -using namespace Opm; - -BOOST_AUTO_TEST_CASE(DefDim) { - Dimension dim; - BOOST_CHECK_EQUAL(1.0, dim.getSIScaling()); - BOOST_CHECK( dim.isCompositable() ); -} - -BOOST_AUTO_TEST_CASE(CreateDimension) { - Dimension length(1); - BOOST_CHECK_EQUAL(1 , length.getSIScaling()); -} - - -BOOST_AUTO_TEST_CASE(CreateUnitSystem) { - UnitSystem system(UnitSystem::UnitType::UNIT_TYPE_METRIC); - BOOST_CHECK_EQUAL("Metric" , system.getName()); -} - - - -BOOST_AUTO_TEST_CASE(UnitSystemGetMissingDimensionThrows) { - UnitSystem system(UnitSystem::UnitType::UNIT_TYPE_METRIC); - BOOST_CHECK_THROW( system.getDimension("Missing") , std::out_of_range ); -} - -BOOST_AUTO_TEST_CASE(UnitSystemGetNewOK) { - UnitSystem system(UnitSystem::UnitType::UNIT_TYPE_METRIC); - system.addDimension("Length" , 10 ); - system.addDimension("Time" , 100); - - BOOST_CHECK( !system.hasDimension("Length*Length/Time")); - Dimension comp = system.getNewDimension( "Length*Length/Time" ); - BOOST_CHECK( system.hasDimension("Length*Length/Time")); - BOOST_CHECK_EQUAL(1 , comp.getSIScaling()); -} - - -BOOST_AUTO_TEST_CASE(UnitSystemAddDimensions) { - UnitSystem system(UnitSystem::UnitType::UNIT_TYPE_METRIC); - system.addDimension("Length" , 1 ); - system.addDimension("Time" , 86400 ); - system.addDimension("Temperature", 1.0, 273.15); - - auto length = system.getDimension( "Length" ); - auto time = system.getDimension( "Time" ); - auto temperature = system.getDimension( "Temperature" ); - BOOST_CHECK_EQUAL(1 , length.getSIScaling()); - BOOST_CHECK_EQUAL(86400 , time.getSIScaling()); - BOOST_CHECK_EQUAL(1.0 , temperature.getSIScaling()); - BOOST_CHECK_EQUAL(273.15, temperature.getSIOffset()); - - system.addDimension("Length" , 0.3048); - length = system.getDimension("Length"); - BOOST_CHECK_EQUAL(0.3048 , length.getSIScaling()); -} - - -BOOST_AUTO_TEST_CASE(UnitSystemParseInvalidThrows) { - UnitSystem system(UnitSystem::UnitType::UNIT_TYPE_METRIC); - BOOST_CHECK_THROW( system.parse("//") , std::invalid_argument); - BOOST_CHECK_THROW( system.parse("Length * Length / Time") , std::out_of_range ); - - system.addDimension("Length" , 3.00 ); - system.addDimension("Time" , 9.0 ); - - auto volumePerTime = system.parse( "Length*Length*Length/Time" ); - BOOST_CHECK_EQUAL(3.0 , volumePerTime.getSIScaling()); -} - - - -static void checkSystemHasRequiredDimensions( const UnitSystem& system) { - BOOST_CHECK( system.hasDimension("1")); - BOOST_CHECK( system.hasDimension("Length")); - BOOST_CHECK( system.hasDimension("Mass")); - BOOST_CHECK( system.hasDimension("Time")); - - BOOST_CHECK( system.hasDimension("Permeability")); - BOOST_CHECK( system.hasDimension("Pressure")); - BOOST_CHECK( system.hasDimension("Temperature")); -} - - - -BOOST_AUTO_TEST_CASE(CreateMetricSystem) { - auto system = UnitSystem::newMETRIC(); - checkSystemHasRequiredDimensions( system ); - - BOOST_CHECK_EQUAL( Metric::Length , system.getDimension("Length").getSIScaling() ); - BOOST_CHECK_EQUAL( Metric::Mass , system.getDimension("Mass").getSIScaling() ); - BOOST_CHECK_EQUAL( Metric::Time , system.getDimension("Time").getSIScaling() ); - BOOST_CHECK_EQUAL( Metric::Permeability , system.getDimension("Permeability").getSIScaling() ); - BOOST_CHECK_EQUAL( Metric::Pressure , system.getDimension("Pressure").getSIScaling() ); -} - - - -BOOST_AUTO_TEST_CASE(CreateFieldSystem) { - auto system = UnitSystem::newFIELD(); - checkSystemHasRequiredDimensions( system ); - - BOOST_CHECK_EQUAL( Field::Length , system.getDimension("Length").getSIScaling() ); - BOOST_CHECK_EQUAL( Field::Mass , system.getDimension("Mass").getSIScaling() ); - BOOST_CHECK_EQUAL( Field::Time , system.getDimension("Time").getSIScaling() ); - BOOST_CHECK_EQUAL( Field::Permeability , system.getDimension("Permeability").getSIScaling() ); - BOOST_CHECK_EQUAL( Field::Pressure , system.getDimension("Pressure").getSIScaling() ); -} - - - - -BOOST_AUTO_TEST_CASE(CreateInputSystem) { - auto system = UnitSystem::newINPUT(); - checkSystemHasRequiredDimensions( system ); - - BOOST_CHECK_EQUAL( 1.0, system.getDimension("Length").getSIScaling() ); - BOOST_CHECK_EQUAL( 1.0, system.getDimension("Mass").getSIScaling() ); - BOOST_CHECK_EQUAL( 1.0, system.getDimension("Time").getSIScaling() ); - BOOST_CHECK_EQUAL( 1.0, system.getDimension("Permeability").getSIScaling() ); - BOOST_CHECK_EQUAL( 1.0, system.getDimension("Pressure").getSIScaling() ); - - BOOST_CHECK_EQUAL( static_cast(system.getType( )) , static_cast(UnitSystem::UnitType::UNIT_TYPE_INPUT) ); -} - - - - -BOOST_AUTO_TEST_CASE(DimensionEqual) { - Dimension d1(1); - Dimension d2(1); - Dimension d4(2); - - BOOST_CHECK_EQUAL( true , d1.equal(d1) ); - BOOST_CHECK_EQUAL( true , d1.equal(d2) ); - BOOST_CHECK_EQUAL( false , d1.equal(d4) ); -} - -namespace Opm { -inline std::ostream& operator<<( std::ostream& stream, const UnitSystem& us ) { - return stream << us.getName() << " :: " << static_cast(us.getType()); -} -} - - -BOOST_AUTO_TEST_CASE(UnitSystemEqual) { - auto metric1 = UnitSystem::newMETRIC(); - auto metric2 = UnitSystem::newMETRIC(); - auto field = UnitSystem::newFIELD(); - - BOOST_CHECK_EQUAL( metric1, metric1 ); - BOOST_CHECK_EQUAL( metric1, metric2 ); - BOOST_CHECK_NE( metric1, field ); - metric1.addDimension("g" , 3.00 ); - BOOST_CHECK_NE( metric1, metric2 ); - BOOST_CHECK_NE( metric2, metric1 ); -} - - - -BOOST_AUTO_TEST_CASE(LabUnitConversions) { - using Meas = UnitSystem::measure; - - auto lab = UnitSystem::newLAB(); - - { - const auto furlong = 660*unit::feet; - BOOST_CHECK_CLOSE( 2.01168e4 , lab.from_si( Meas::length , furlong ) , 1.0e-10 ); - BOOST_CHECK_CLOSE( furlong , lab.to_si( Meas::length , 2.01168e4 ) , 1.0e-10 ); - } - - struct Factor { Meas m; double f; }; - - for (const auto& q : { Factor{ Meas::density , 1.0e3 } , - Factor{ Meas::pressure , 101325.0 } , - Factor{ Meas::viscosity , 1.0e-3 } , - Factor{ Meas::liquid_surface_volume , 1.0e-6 } , - Factor{ Meas::gas_surface_volume , 1.0e-6 } , - Factor{ Meas::time , 3600.0 } , - Factor{ Meas::mass , 1.0e-3 } }) - { - BOOST_CHECK_CLOSE( q.f , lab.to_si( q.m , 1.0 ) , 1.0e-10 ); - BOOST_CHECK_CLOSE( 1.0 , lab.from_si( q.m , q.f ) , 1.0e-10 ); - } -} - - -BOOST_AUTO_TEST_CASE( VectorConvert ) { - std::vector d0 = {1,2,3}; - std::vector d1 = {1,2,3}; - UnitSystem units = UnitSystem::newLAB(); - - units.from_si( UnitSystem::measure::pressure , d0 ); - for (size_t i = 0; i < d1.size(); i++) - BOOST_CHECK_EQUAL( units.from_si( UnitSystem::measure::pressure , d1[i] ) , d0[i]); -} - -BOOST_AUTO_TEST_CASE( GasOilRatioNotIdentityForField ) { - const double gas = 14233.4; - const double oil = 4223; - - const double ratio = gas / oil; - const auto units = UnitSystem::newFIELD(); - - const auto field_gas = (gas * 35.314666721) / 1000; - const auto field_oil = oil * 6.28981100; - - const auto gor = UnitSystem::measure::gas_oil_ratio; - - BOOST_CHECK_CLOSE( units.from_si( gor, ratio ), field_gas / field_oil, 1e-5 ); -} - -BOOST_AUTO_TEST_CASE ( UnitConstants ) { - using namespace Opm::prefix; - using namespace Opm::unit; - - BOOST_REQUIRE_EQUAL (meter, 1); - BOOST_REQUIRE_EQUAL (kilogram, 1); - BOOST_REQUIRE_EQUAL (second, 1); - - BOOST_REQUIRE_CLOSE (milli*darcy, 9.86923667e-16, 0.01); - BOOST_REQUIRE_CLOSE (mega*darcy, 9.86923e-7, 0.01); - BOOST_REQUIRE_CLOSE (convert::to(mega*darcy, milli*darcy), 1e9, 0.01); - - BOOST_REQUIRE_CLOSE (convert::to(convert::from(1.0, barsa), psia), 14.5038, 0.01); - BOOST_REQUIRE_CLOSE (convert::to(1*atm, barsa), 1.01325, 0.01); - - const double flux_SI = 10000*cubic(meter)/year; - BOOST_REQUIRE_CLOSE (flux_SI, 3.17098e-4, 0.01); - const double flux_m3py = convert::to(flux_SI, cubic(meter)/year); - BOOST_REQUIRE_CLOSE (flux_m3py, 1e4, 0.01); -} - -BOOST_AUTO_TEST_CASE(METRIC_UNITS) -{ - using Meas = UnitSystem::measure; - - auto metric = UnitSystem::newMETRIC(); - - BOOST_CHECK( metric.getType() == Opm::UnitSystem::UnitType::UNIT_TYPE_METRIC ); - - // ---------------------------------------------------------------- - // METRIC -> SI - - BOOST_CHECK_CLOSE( metric.to_si( Meas::length , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( metric.to_si( Meas::time , 1.0 ) , 86.400e3 , 1.0e-10 ); - BOOST_CHECK_CLOSE( metric.to_si( Meas::density , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( metric.to_si( Meas::pressure , 1.0 ) , 100.0e3 , 1.0e-10 ); - BOOST_CHECK_CLOSE( metric.to_si( Meas::temperature_absolute , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( metric.to_si( Meas::temperature , 1.0 ) , 274.15 , 1.0e-10 ); - BOOST_CHECK_CLOSE( metric.to_si( Meas::viscosity , 1.0 ) , 1.0e-3 , 1.0e-10 ); - BOOST_CHECK_CLOSE( metric.to_si( Meas::permeability , 1.0 ) , 9.869232667160129e-16 , 1.0e-10 ); - BOOST_CHECK_CLOSE( metric.to_si( Meas::liquid_surface_volume , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( metric.to_si( Meas::gas_surface_volume , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( metric.to_si( Meas::volume , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( metric.to_si( Meas::geometric_volume, 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( metric.to_si( Meas::liquid_surface_rate , 1.0 ) , 1.1574074074074073e-05 , 1.0e-10 ); - BOOST_CHECK_CLOSE( metric.to_si( Meas::gas_surface_rate , 1.0 ) , 1.1574074074074073e-05 , 1.0e-10 ); - BOOST_CHECK_CLOSE( metric.to_si( Meas::rate , 1.0 ) , 1.1574074074074073e-05 , 1.0e-10 ); - BOOST_CHECK_CLOSE( metric.to_si( Meas::geometric_volume_rate , 1.0 ) , 1.1574074074074073e-05 , 1.0e-10 ); - BOOST_CHECK_CLOSE( metric.to_si( Meas::transmissibility , 1.0 ) , 1.157407407407407e-13 , 1.0e-10 ); - BOOST_CHECK_CLOSE( metric.to_si( Meas::effective_Kh , 1.0 ) , 9.869232667160129e-16 , 1.0e-10 ); - BOOST_CHECK_CLOSE( metric.to_si( Meas::mass , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( metric.to_si( Meas::mass_rate , 1.0 ) , 1.1574074074074073e-05 , 1.0e-10 ); - BOOST_CHECK_CLOSE( metric.to_si( Meas::gas_oil_ratio , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( metric.to_si( Meas::oil_gas_ratio , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( metric.to_si( Meas::water_cut , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( metric.to_si( Meas::gas_formation_volume_factor , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( metric.to_si( Meas::oil_formation_volume_factor , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( metric.to_si( Meas::water_formation_volume_factor , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( metric.to_si( Meas::gas_inverse_formation_volume_factor , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( metric.to_si( Meas::oil_inverse_formation_volume_factor , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( metric.to_si( Meas::water_inverse_formation_volume_factor , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( metric.to_si( Meas::liquid_productivity_index , 1.0 ) , 1.1574074074074073e-10 , 1.0e-10 ); - BOOST_CHECK_CLOSE( metric.to_si( Meas::gas_productivity_index , 1.0 ) , 1.1574074074074073e-10 , 1.0e-10 ); - BOOST_CHECK_CLOSE( metric.to_si( Meas::energy, 1.0), 1000, 1e-10); - BOOST_CHECK_CLOSE( metric.to_si( Meas::icd_strength, 1.0), 7.46496e+14, 1e-10); - - // ---------------------------------------------------------------- - // SI -> METRIC - - BOOST_CHECK_CLOSE( metric.from_si( Meas::length , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( metric.from_si( Meas::time , 1.0 ) , 1.1574074074074073e-05 , 1.0e-10 ); - BOOST_CHECK_CLOSE( metric.from_si( Meas::density , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( metric.from_si( Meas::pressure , 1.0 ) , 1.0e-5 , 1.0e-10 ); - BOOST_CHECK_CLOSE( metric.from_si( Meas::temperature_absolute , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( metric.from_si( Meas::temperature , 274.15 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( metric.from_si( Meas::viscosity , 1.0 ) , 1.0e+3 , 1.0e-10 ); - BOOST_CHECK_CLOSE( metric.from_si( Meas::permeability , 1.0 ) , 1.01325e+15 , 1.0e-10 ); - BOOST_CHECK_CLOSE( metric.from_si( Meas::liquid_surface_volume , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( metric.from_si( Meas::gas_surface_volume , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( metric.from_si( Meas::volume , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( metric.from_si( Meas::geometric_volume , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( metric.from_si( Meas::liquid_surface_rate , 1.0 ) , 86.400e3 , 1.0e-10 ); - BOOST_CHECK_CLOSE( metric.from_si( Meas::gas_surface_rate , 1.0 ) , 86.400e3 , 1.0e-10 ); - BOOST_CHECK_CLOSE( metric.from_si( Meas::rate , 1.0 ) , 86.400e3 , 1.0e-10 ); - BOOST_CHECK_CLOSE( metric.from_si( Meas::geometric_volume_rate , 1.0 ) , 86.400e3 , 1.0e-10 ); - BOOST_CHECK_CLOSE( metric.from_si( Meas::transmissibility , 1.0 ) , 8.64e+12 , 1.0e-10 ); - BOOST_CHECK_CLOSE( metric.from_si( Meas::effective_Kh , 1.0 ) , 1.01325e+15 , 1.0e-10 ); - BOOST_CHECK_CLOSE( metric.from_si( Meas::mass , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( metric.from_si( Meas::mass_rate , 1.0 ) , 86.400e3 , 1.0e-10 ); - BOOST_CHECK_CLOSE( metric.from_si( Meas::gas_oil_ratio , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( metric.from_si( Meas::oil_gas_ratio , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( metric.from_si( Meas::water_cut , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( metric.from_si( Meas::gas_formation_volume_factor , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( metric.from_si( Meas::oil_formation_volume_factor , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( metric.from_si( Meas::water_formation_volume_factor , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( metric.from_si( Meas::gas_inverse_formation_volume_factor , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( metric.from_si( Meas::oil_inverse_formation_volume_factor , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( metric.from_si( Meas::water_inverse_formation_volume_factor , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( metric.from_si( Meas::liquid_productivity_index , 1.0 ) , 86.400e8 , 1.0e-10 ); - BOOST_CHECK_CLOSE( metric.from_si( Meas::gas_productivity_index , 1.0 ) , 86.400e8 , 1.0e-10 ); - BOOST_CHECK_CLOSE( metric.from_si( Meas::energy, 1000.0), 1, 1e-10); - BOOST_CHECK_CLOSE( metric.from_si( Meas::icd_strength, 7.46496e+14), 1.0, 1e-10); -} - -BOOST_AUTO_TEST_CASE(FIELD_UNITS) -{ - using Meas = UnitSystem::measure; - - auto field = UnitSystem::newFIELD(); - - BOOST_CHECK( field.getType() == Opm::UnitSystem::UnitType::UNIT_TYPE_FIELD ); - - // ---------------------------------------------------------------- - // FIELD -> SI - - BOOST_CHECK_CLOSE( field.to_si( Meas::length , 1.0 ) , 0.3048 , 1.0e-10 ); - BOOST_CHECK_CLOSE( field.to_si( Meas::time , 1.0 ) , 86.400e3 , 1.0e-10 ); - BOOST_CHECK_CLOSE( field.to_si( Meas::density , 1.0 ) , 1.601846337396014e+01, 1.0e-10 ); - BOOST_CHECK_CLOSE( field.to_si( Meas::pressure , 1.0 ) , 6.894757293168360e+03 , 1.0e-10 ); - BOOST_CHECK_CLOSE( field.to_si( Meas::temperature_absolute , 1.0 ) , 5.0/9.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( field.to_si( Meas::temperature , 1.0 ) , 255.9277777777778 , 1.0e-10 ); - BOOST_CHECK_CLOSE( field.to_si( Meas::viscosity , 1.0 ) , 1.0e-3 , 1.0e-10 ); - BOOST_CHECK_CLOSE( field.to_si( Meas::permeability , 1.0 ) , 9.869232667160129e-16 , 1.0e-10 ); - BOOST_CHECK_CLOSE( field.to_si( Meas::liquid_surface_volume , 1.0 ) , 0.1589872949280001 , 1.0e-10 ); - BOOST_CHECK_CLOSE( field.to_si( Meas::gas_surface_volume , 1.0 ) , 28.31684659200000 , 1.0e-10 ); - BOOST_CHECK_CLOSE( field.to_si( Meas::volume , 1.0 ) , 0.1589872949280001 , 1.0e-10 ); - BOOST_CHECK_CLOSE( field.to_si( Meas::geometric_volume, 1.0 ) , 2.8316846592e-02 , 1.0e-10 ); - BOOST_CHECK_CLOSE( field.to_si( Meas::liquid_surface_rate , 1.0 ) , 1.840130728333334e-06 , 1.0e-10 ); - BOOST_CHECK_CLOSE( field.to_si( Meas::gas_surface_rate , 1.0 ) , 3.277412800000001e-04 , 1.0e-10 ); - BOOST_CHECK_CLOSE( field.to_si( Meas::rate , 1.0 ) , 1.840130728333334e-06 , 1.0e-10 ); - BOOST_CHECK_CLOSE( field.to_si( Meas::geometric_volume_rate, 1.0 ) , 3.2774128e-07 , 1.0e-10 ); - BOOST_CHECK_CLOSE( field.to_si( Meas::transmissibility , 1.0 ) , 2.668883979653090e-13 , 1.0e-10 ); - BOOST_CHECK_CLOSE( field.to_si( Meas::effective_Kh , 1.0 ) , 3.008142116950407e-16 , 1.0e-10 ); - BOOST_CHECK_CLOSE( field.to_si( Meas::mass , 1.0 ) , 0.45359237 , 1.0e-10 ); - BOOST_CHECK_CLOSE( field.to_si( Meas::mass_rate , 1.0 ) , 5.249911689814815e-06 , 1.0e-10 ); - BOOST_CHECK_CLOSE( field.to_si( Meas::gas_oil_ratio , 1.0 ) , 178.1076066790352 , 1.0e-10 ); - BOOST_CHECK_CLOSE( field.to_si( Meas::oil_gas_ratio , 1.0 ) , 5.614583333333335e-03 , 1.0e-10 ); - BOOST_CHECK_CLOSE( field.to_si( Meas::water_cut , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( field.to_si( Meas::gas_formation_volume_factor , 1.0 ) , 5.614583333333335e-03 , 1.0e-10 ); - BOOST_CHECK_CLOSE( field.to_si( Meas::oil_formation_volume_factor , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( field.to_si( Meas::water_formation_volume_factor , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( field.to_si( Meas::gas_inverse_formation_volume_factor , 1.0 ) , 178.1076066790352 , 1.0e-10 ); - BOOST_CHECK_CLOSE( field.to_si( Meas::oil_inverse_formation_volume_factor , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( field.to_si( Meas::water_inverse_formation_volume_factor , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( field.to_si( Meas::liquid_productivity_index , 1.0 ) , 1.840130728333334e-06 / 6.894757293168360e+03 , 1.0e-10 ); - BOOST_CHECK_CLOSE( field.to_si( Meas::gas_productivity_index , 1.0 ) , 3.277412800000001e-04 / 6.894757293168360e+03 , 1.0e-10 ); - BOOST_CHECK_CLOSE( field.to_si( Meas::energy , 1.0 ) , 1054.3503 , 1.0e-10 ); - BOOST_CHECK_CLOSE( field.to_si( Meas::icd_strength , 1.0 ) , 6.418842091749854e+16 , 1.0e-10 ); - - // ---------------------------------------------------------------- - // SI -> FIELD - - BOOST_CHECK_CLOSE( field.from_si( Meas::length , 1.0 ) , 3.280839895013123e+00 , 1.0e-10 ); - BOOST_CHECK_CLOSE( field.from_si( Meas::time , 1.0 ) , 1.1574074074074073e-05 , 1.0e-10 ); - BOOST_CHECK_CLOSE( field.from_si( Meas::density , 1.0 ) , 6.242796057614462e-02 , 1.0e-10 ); - BOOST_CHECK_CLOSE( field.from_si( Meas::pressure , 1.0 ) , 1.450377377302092e-04 , 1.0e-10 ); - BOOST_CHECK_CLOSE( field.from_si( Meas::temperature_absolute , 1.0 ) , 1.8 , 1.0e-10 ); - BOOST_CHECK_CLOSE( field.from_si( Meas::temperature , 255.9277777777778 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( field.from_si( Meas::viscosity , 1.0 ) , 1.0e+3 , 1.0e-10 ); - BOOST_CHECK_CLOSE( field.from_si( Meas::permeability , 1.0 ) , 1.01325e+15 , 1.0e-10 ); - BOOST_CHECK_CLOSE( field.from_si( Meas::liquid_surface_volume , 1.0 ) , 6.289810770432102e+00 , 1.0e-10 ); - BOOST_CHECK_CLOSE( field.from_si( Meas::gas_surface_volume , 1.0 ) , 3.531466672148859e-02 , 1.0e-10 ); - BOOST_CHECK_CLOSE( field.from_si( Meas::volume , 1.0 ) , 6.289810770432102e+00 , 1.0e-10 ); - BOOST_CHECK_CLOSE( field.from_si( Meas::geometric_volume, 2.8316846592e-02 ), 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( field.from_si( Meas::liquid_surface_rate , 1.0 ) , 5.434396505653337e+05 , 1.0e-10 ); - BOOST_CHECK_CLOSE( field.from_si( Meas::gas_surface_rate , 1.0 ) , 3.051187204736614e+03 , 1.0e-10 ); - BOOST_CHECK_CLOSE( field.from_si( Meas::rate , 1.0 ) , 5.434396505653337e+05 , 1.0e-10 ); - BOOST_CHECK_CLOSE( field.from_si( Meas::geometric_volume_rate, 3.2774128e-07 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( field.from_si( Meas::transmissibility , 1.0 ) , 3.746884494132199e+12 , 1.0e-10 ); - BOOST_CHECK_CLOSE( field.from_si( Meas::effective_Kh , 1.0 ) , 3.324311023622047e+15 , 1.0e-10 ); - BOOST_CHECK_CLOSE( field.from_si( Meas::mass , 1.0 ) , 2.204622621848776e+00 , 1.0e-10 ); - BOOST_CHECK_CLOSE( field.from_si( Meas::gas_oil_ratio , 1.0 ) , 5.614583333333335e-03 , 1.0e-10 ); - BOOST_CHECK_CLOSE( field.from_si( Meas::oil_gas_ratio , 1.0 ) , 178.1076066790352 , 1.0e-10 ); - BOOST_CHECK_CLOSE( field.from_si( Meas::water_cut , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( field.from_si( Meas::gas_formation_volume_factor , 1.0 ) , 178.1076066790352 , 1.0e-10 ); - BOOST_CHECK_CLOSE( field.from_si( Meas::oil_formation_volume_factor , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( field.from_si( Meas::water_formation_volume_factor , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( field.from_si( Meas::gas_inverse_formation_volume_factor , 1.0 ) , 5.614583333333335e-03 , 1.0e-10 ); - BOOST_CHECK_CLOSE( field.from_si( Meas::oil_inverse_formation_volume_factor , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( field.from_si( Meas::water_inverse_formation_volume_factor , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( field.from_si( Meas::liquid_productivity_index , 1.0 ) , 5.434396505653337e+05 * 6.894757293168360e+03 , 1.0e-10 ); - BOOST_CHECK_CLOSE( field.from_si( Meas::gas_productivity_index , 1.0 ) , 3.051187204736614e+03 * 6.894757293168360e+03, 1.0e-10 ); - BOOST_CHECK_CLOSE( field.from_si( Meas::energy , 1054.3503 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( field.from_si( Meas::icd_strength , 6.418842091749854e+16 ) , 1.0 , 1.0e-10 ); -} - -BOOST_AUTO_TEST_CASE(LAB_UNITS) -{ - using Meas = UnitSystem::measure; - - auto lab = UnitSystem::newLAB(); - - BOOST_CHECK( lab.getType() == Opm::UnitSystem::UnitType::UNIT_TYPE_LAB ); - - // ---------------------------------------------------------------- - // LAB -> SI - - BOOST_CHECK_CLOSE( lab.to_si( Meas::length , 1.0 ) , 0.01 , 1.0e-10 ); - BOOST_CHECK_CLOSE( lab.to_si( Meas::time , 1.0 ) , 3600.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( lab.to_si( Meas::density , 1.0 ) , 1.0e3, 1.0e-10 ); - BOOST_CHECK_CLOSE( lab.to_si( Meas::pressure , 1.0 ) , 101325.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( lab.to_si( Meas::temperature_absolute , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( lab.to_si( Meas::temperature , 1.0 ) , 274.15 , 1.0e-10 ); - BOOST_CHECK_CLOSE( lab.to_si( Meas::viscosity , 1.0 ) , 1.0e-3 , 1.0e-10 ); - BOOST_CHECK_CLOSE( lab.to_si( Meas::permeability , 1.0 ) , 9.869232667160129e-16 , 1.0e-10 ); - BOOST_CHECK_CLOSE( lab.to_si( Meas::liquid_surface_volume , 1.0 ) , 1.0e-6 , 1.0e-10 ); - BOOST_CHECK_CLOSE( lab.to_si( Meas::gas_surface_volume , 1.0 ) , 1.0e-6 , 1.0e-10 ); - BOOST_CHECK_CLOSE( lab.to_si( Meas::volume , 1.0 ) , 1.0e-6 , 1.0e-10 ); - BOOST_CHECK_CLOSE( lab.to_si( Meas::geometric_volume, 1.0 ) , 1.0e-6 , 1.0e-10 ); - BOOST_CHECK_CLOSE( lab.to_si( Meas::liquid_surface_rate , 1.0 ) , 2.777777777777778e-10 , 1.0e-10 ); - BOOST_CHECK_CLOSE( lab.to_si( Meas::gas_surface_rate , 1.0 ) , 2.777777777777778e-10 , 1.0e-10 ); - BOOST_CHECK_CLOSE( lab.to_si( Meas::rate , 1.0 ) , 2.777777777777778e-10 , 1.0e-10 ); - BOOST_CHECK_CLOSE( lab.to_si( Meas::geometric_volume_rate, 1.0 ) , 2.777777777777778e-10 , 1.0e-10 ); - BOOST_CHECK_CLOSE( lab.to_si( Meas::transmissibility , 1.0 ) , 2.741453518655592e-18 , 1.0e-10 ); - BOOST_CHECK_CLOSE( lab.to_si( Meas::effective_Kh , 1.0 ) , 9.869232667160130e-18 , 1.0e-10 ); - BOOST_CHECK_CLOSE( lab.to_si( Meas::mass , 1.0 ) , 1.0e-3 , 1.0e-10 ); - BOOST_CHECK_CLOSE( lab.to_si( Meas::mass_rate , 1.0 ) , 2.777777777777778e-07 , 1.0e-10 ); - BOOST_CHECK_CLOSE( lab.to_si( Meas::gas_oil_ratio , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( lab.to_si( Meas::oil_gas_ratio , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( lab.to_si( Meas::water_cut , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( lab.to_si( Meas::gas_formation_volume_factor , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( lab.to_si( Meas::oil_formation_volume_factor , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( lab.to_si( Meas::water_formation_volume_factor , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( lab.to_si( Meas::gas_inverse_formation_volume_factor , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( lab.to_si( Meas::oil_inverse_formation_volume_factor , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( lab.to_si( Meas::water_inverse_formation_volume_factor , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( lab.to_si( Meas::liquid_productivity_index , 1.0 ) , 2.777777777777778e-10 / 101325.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( lab.to_si( Meas::gas_productivity_index , 1.0 ) , 2.777777777777778e-10 / 101325.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( lab.to_si( Meas::energy , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( lab.to_si( Meas::icd_strength , 1.0 ) , 1.313172e+24 , 1.0e-10 ); - - // ---------------------------------------------------------------- - // SI -> LAB - - BOOST_CHECK_CLOSE( lab.from_si( Meas::length , 1.0 ) , 100.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( lab.from_si( Meas::time , 1.0 ) , 2.777777777777778e-04 , 1.0e-10 ); - BOOST_CHECK_CLOSE( lab.from_si( Meas::density , 1.0 ) , 1.0e-3 , 1.0e-10 ); - BOOST_CHECK_CLOSE( lab.from_si( Meas::pressure , 1.0 ) , 9.869232667160129e-06 , 1.0e-10 ); - BOOST_CHECK_CLOSE( lab.from_si( Meas::temperature_absolute , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( lab.from_si( Meas::temperature , 274.15 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( lab.from_si( Meas::viscosity , 1.0 ) , 1.0e+3 , 1.0e-10 ); - BOOST_CHECK_CLOSE( lab.from_si( Meas::permeability , 1.0 ) , 1.01325e+15 , 1.0e-10 ); - BOOST_CHECK_CLOSE( lab.from_si( Meas::liquid_surface_volume , 1.0 ) , 1.0e6 , 1.0e-10 ); - BOOST_CHECK_CLOSE( lab.from_si( Meas::gas_surface_volume , 1.0 ) , 1.0e6 , 1.0e-10 ); - BOOST_CHECK_CLOSE( lab.from_si( Meas::volume , 1.0 ) , 1.0e6 , 1.0e-10 ); - BOOST_CHECK_CLOSE( lab.from_si( Meas::geometric_volume , 1.0 ) , 1.0e6 , 1.0e-10 ); - BOOST_CHECK_CLOSE( lab.from_si( Meas::liquid_surface_rate , 1.0 ) , 3.6e9 , 1.0e-10 ); - BOOST_CHECK_CLOSE( lab.from_si( Meas::gas_surface_rate , 1.0 ) , 3.6e9 , 1.0e-10 ); - BOOST_CHECK_CLOSE( lab.from_si( Meas::rate , 1.0 ) , 3.6e9 , 1.0e-10 ); - BOOST_CHECK_CLOSE( lab.from_si( Meas::geometric_volume_rate, 1.0 ) , 3.6e9 , 1.0e-10 ); - BOOST_CHECK_CLOSE( lab.from_si( Meas::transmissibility , 1.0 ) , 3.647699999999999e+17 , 1.0e-10 ); - BOOST_CHECK_CLOSE( lab.from_si( Meas::effective_Kh , 1.0 ) , 1.01325e+17 , 1.0e-10 ); - BOOST_CHECK_CLOSE( lab.from_si( Meas::mass , 1.0 ) , 1.0e3 , 1.0e-10 ); - BOOST_CHECK_CLOSE( lab.from_si( Meas::mass_rate , 1.0 ) , 3.6e+06 , 1.0e-10 ); - BOOST_CHECK_CLOSE( lab.from_si( Meas::gas_oil_ratio , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( lab.from_si( Meas::oil_gas_ratio , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( lab.from_si( Meas::water_cut , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( lab.from_si( Meas::gas_formation_volume_factor , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( lab.from_si( Meas::oil_formation_volume_factor , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( lab.from_si( Meas::water_formation_volume_factor , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( lab.from_si( Meas::gas_inverse_formation_volume_factor , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( lab.from_si( Meas::oil_inverse_formation_volume_factor , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( lab.from_si( Meas::water_inverse_formation_volume_factor , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( lab.from_si( Meas::liquid_productivity_index , 1.0 ) , 3.6e9 * 101325.0, 1.0e-10 ); - BOOST_CHECK_CLOSE( lab.from_si( Meas::gas_productivity_index , 1.0 ) , 3.6e9 * 101325.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( lab.from_si( Meas::energy , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( lab.from_si( Meas::icd_strength , 1.0 ) , 7.615148662932201e-25 , 1.0e-10 ); -} - -BOOST_AUTO_TEST_CASE(PVT_M_UNITS) -{ - using Meas = UnitSystem::measure; - - auto pvt_m = UnitSystem::newPVT_M(); - - BOOST_CHECK( pvt_m.getType() == Opm::UnitSystem::UnitType::UNIT_TYPE_PVT_M ); - - // ---------------------------------------------------------------- - // PVT-M -> SI - - BOOST_CHECK_CLOSE( pvt_m.to_si( Meas::length , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( pvt_m.to_si( Meas::time , 1.0 ) , 86.400e3 , 1.0e-10 ); - BOOST_CHECK_CLOSE( pvt_m.to_si( Meas::density , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( pvt_m.to_si( Meas::pressure , 1.0 ) , 101325.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( pvt_m.to_si( Meas::temperature_absolute , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( pvt_m.to_si( Meas::temperature , 1.0 ) , 274.15 , 1.0e-10 ); - BOOST_CHECK_CLOSE( pvt_m.to_si( Meas::viscosity , 1.0 ) , 1.0e-3 , 1.0e-10 ); - BOOST_CHECK_CLOSE( pvt_m.to_si( Meas::permeability , 1.0 ) , 9.869232667160129e-16 , 1.0e-10 ); - BOOST_CHECK_CLOSE( pvt_m.to_si( Meas::liquid_surface_volume , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( pvt_m.to_si( Meas::gas_surface_volume , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( pvt_m.to_si( Meas::volume , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( pvt_m.to_si( Meas::geometric_volume , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( pvt_m.to_si( Meas::liquid_surface_rate , 1.0 ) , 1.1574074074074073e-05 , 1.0e-10 ); - BOOST_CHECK_CLOSE( pvt_m.to_si( Meas::gas_surface_rate , 1.0 ) , 1.1574074074074073e-05 , 1.0e-10 ); - BOOST_CHECK_CLOSE( pvt_m.to_si( Meas::rate , 1.0 ) , 1.1574074074074073e-05 , 1.0e-10 ); - BOOST_CHECK_CLOSE( pvt_m.to_si( Meas::geometric_volume_rate , 1.0 ) , 1.1574074074074073e-05 , 1.0e-10 ); - BOOST_CHECK_CLOSE( pvt_m.to_si( Meas::transmissibility , 1.0 ) , 1.142272299439830e-13 , 1.0e-10 ); - BOOST_CHECK_CLOSE( pvt_m.to_si( Meas::effective_Kh , 1.0 ) , 9.869232667160129e-16 , 1.0e-10 ); - BOOST_CHECK_CLOSE( pvt_m.to_si( Meas::mass , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( pvt_m.to_si( Meas::mass_rate , 1.0 ) , 1.1574074074074073e-05 , 1.0e-10 ); - BOOST_CHECK_CLOSE( pvt_m.to_si( Meas::gas_oil_ratio , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( pvt_m.to_si( Meas::oil_gas_ratio , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( pvt_m.to_si( Meas::water_cut , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( pvt_m.to_si( Meas::gas_formation_volume_factor , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( pvt_m.to_si( Meas::oil_formation_volume_factor , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( pvt_m.to_si( Meas::water_formation_volume_factor , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( pvt_m.to_si( Meas::gas_inverse_formation_volume_factor , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( pvt_m.to_si( Meas::oil_inverse_formation_volume_factor , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( pvt_m.to_si( Meas::water_inverse_formation_volume_factor , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( pvt_m.to_si( Meas::liquid_productivity_index , 1.0 ) , 1.1574074074074073e-05 /101325.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( pvt_m.to_si( Meas::gas_productivity_index , 1.0 ) , 1.1574074074074073e-05 /101325.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( pvt_m.to_si( Meas::energy , 1.0 ) , 1.0e3 , 1.0e-10 ); - BOOST_CHECK_CLOSE( pvt_m.to_si( Meas::icd_strength , 1.0 ) , 7.56387072e+14 , 1.0e-10 ); - - // ---------------------------------------------------------------- - // SI -> PVT-M - - BOOST_CHECK_CLOSE( pvt_m.from_si( Meas::length , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( pvt_m.from_si( Meas::time , 1.0 ) , 1.1574074074074073e-05 , 1.0e-10 ); - BOOST_CHECK_CLOSE( pvt_m.from_si( Meas::density , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( pvt_m.from_si( Meas::pressure , 1.0 ) , 9.869232667160129e-06 , 1.0e-10 ); - BOOST_CHECK_CLOSE( pvt_m.from_si( Meas::temperature_absolute , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( pvt_m.from_si( Meas::temperature , 274.15 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( pvt_m.from_si( Meas::viscosity , 1.0 ) , 1.0e+3 , 1.0e-10 ); - BOOST_CHECK_CLOSE( pvt_m.from_si( Meas::permeability , 1.0 ) , 1.01325e+15 , 1.0e-10 ); - BOOST_CHECK_CLOSE( pvt_m.from_si( Meas::liquid_surface_volume , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( pvt_m.from_si( Meas::gas_surface_volume , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( pvt_m.from_si( Meas::volume , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( pvt_m.from_si( Meas::geometric_volume , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( pvt_m.from_si( Meas::liquid_surface_rate , 1.0 ) , 86.400e3 , 1.0e-10 ); - BOOST_CHECK_CLOSE( pvt_m.from_si( Meas::gas_surface_rate , 1.0 ) , 86.400e3 , 1.0e-10 ); - BOOST_CHECK_CLOSE( pvt_m.from_si( Meas::rate , 1.0 ) , 86.400e3 , 1.0e-10 ); - BOOST_CHECK_CLOSE( pvt_m.from_si( Meas::geometric_volume_rate , 1.0 ) , 86.400e3 , 1.0e-10 ); - BOOST_CHECK_CLOSE( pvt_m.from_si( Meas::transmissibility , 1.0 ) , 8.75448e+12 , 1.0e-10 ); - BOOST_CHECK_CLOSE( pvt_m.from_si( Meas::effective_Kh , 1.0 ) , 1.01325e+15 , 1.0e-10 ); - BOOST_CHECK_CLOSE( pvt_m.from_si( Meas::mass , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( pvt_m.from_si( Meas::mass_rate , 1.0 ) , 86.400e3 , 1.0e-10 ); - BOOST_CHECK_CLOSE( pvt_m.from_si( Meas::gas_oil_ratio , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( pvt_m.from_si( Meas::oil_gas_ratio , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( pvt_m.from_si( Meas::water_cut , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( pvt_m.from_si( Meas::gas_formation_volume_factor , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( pvt_m.from_si( Meas::oil_formation_volume_factor , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( pvt_m.from_si( Meas::water_formation_volume_factor , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( pvt_m.from_si( Meas::gas_inverse_formation_volume_factor , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( pvt_m.from_si( Meas::oil_inverse_formation_volume_factor , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( pvt_m.from_si( Meas::water_inverse_formation_volume_factor , 1.0 ) , 1.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( pvt_m.from_si( Meas::liquid_productivity_index , 1.0 ) , 86.400e3 * 101325.0 , 1.0e-10 ); - BOOST_CHECK_CLOSE( pvt_m.from_si( Meas::gas_productivity_index , 1.0 ) , 86.400e3 * 101325.0, 1.0e-10 ); - BOOST_CHECK_CLOSE( pvt_m.from_si( Meas::energy , 1.0 ) , 1.0e-3 , 1.0e-10 ); - BOOST_CHECK_CLOSE( pvt_m.from_si( Meas::icd_strength , 1.0 ) , 1.322074420647951e-15 , 1.0e-10 ); -} - -BOOST_AUTO_TEST_CASE(TemperatureConversions) -{ - using Meas = UnitSystem::measure; - - // note that "metric" units are not SI units! - auto metric = UnitSystem::newMETRIC(); - auto pvt_m = UnitSystem::newPVT_M(); - auto lab = UnitSystem::newLAB(); - auto field = UnitSystem::newFIELD(); - - // check absolute temperature, i.e. °R for field, K for the rest - BOOST_CHECK_CLOSE(metric.to_si(Meas::temperature_absolute , 1.0), 1.0, 1.0e-10); - BOOST_CHECK_CLOSE(metric.from_si(Meas::temperature_absolute , 1.0), 1.0, 1.0e-10); - BOOST_CHECK_CLOSE(pvt_m.to_si(Meas::temperature_absolute , 1.0), 1.0, 1.0e-10); - BOOST_CHECK_CLOSE(pvt_m.from_si(Meas::temperature_absolute , 1.0), 1.0, 1.0e-10); - BOOST_CHECK_CLOSE(lab.to_si(Meas::temperature_absolute , 1.0), 1.0, 1.0e-10); - BOOST_CHECK_CLOSE(lab.from_si(Meas::temperature_absolute , 1.0), 1.0, 1.0e-10); - BOOST_CHECK_CLOSE(field.to_si(Meas::temperature_absolute , 9.0/5.0), 1.0, 1.0e-10); - BOOST_CHECK_CLOSE(field.from_si(Meas::temperature_absolute , 1.0), 9.0/5.0, 1.0e-10); - - // check temperature, i.e. °F for field, °C for the rest - BOOST_CHECK_CLOSE(metric.to_si(Meas::temperature , 1.0), 274.15, 1.0e-10); - BOOST_CHECK_CLOSE(metric.from_si(Meas::temperature , 274.15), 1.0, 1.0e-10); - BOOST_CHECK_CLOSE(pvt_m.to_si(Meas::temperature , 1.0), 274.15, 1.0e-10); - BOOST_CHECK_CLOSE(pvt_m.from_si(Meas::temperature , 274.15), 1.0, 1.0e-10); - BOOST_CHECK_CLOSE(lab.to_si(Meas::temperature , 1.0), 274.15, 1.0e-10); - BOOST_CHECK_CLOSE(lab.from_si(Meas::temperature , 274.15), 1.0, 1.0e-10); - BOOST_CHECK_CLOSE(field.to_si(Meas::temperature , 1.0), (459.67 + 1.0)*5.0/9.0, 1.0e-10); - BOOST_CHECK_CLOSE(field.from_si(Meas::temperature , (459.67 + 1.0)*5.0/9.0), 1.0, 1.0e-10); -} - - - -BOOST_AUTO_TEST_CASE(EclipseID) { - BOOST_CHECK_THROW(UnitSystem(0), std::invalid_argument); - BOOST_CHECK_THROW(UnitSystem(5), std::invalid_argument); - - UnitSystem metric1(UnitSystem::UnitType::UNIT_TYPE_METRIC); - UnitSystem metric2(metric1.ecl_id()); - BOOST_CHECK( metric1 == metric2 ); - - UnitSystem field1(UnitSystem::UnitType::UNIT_TYPE_FIELD); - UnitSystem field2(field1.ecl_id()); - BOOST_CHECK( field1 == field2 ); -} - - -BOOST_AUTO_TEST_CASE(DECK_NAMES) { - BOOST_CHECK( !UnitSystem::valid_name("INVALID")); - BOOST_CHECK( UnitSystem::valid_name("FIELD")); - BOOST_CHECK( UnitSystem::valid_name("METRIC")); - BOOST_CHECK( UnitSystem::valid_name("LAB")); - BOOST_CHECK( UnitSystem::valid_name("PVT-M")); - - - UnitSystem us("METRIC"); - BOOST_CHECK_EQUAL( us.deck_name(), "METRIC"); -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/ValueTests.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/ValueTests.cpp deleted file mode 100644 index 93d5eda684..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/ValueTests.cpp +++ /dev/null @@ -1,80 +0,0 @@ -/* - Copyright 2014 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include -#include -#include - -#define BOOST_TEST_MODULE VALUETESTS -#include -#include - -#include - - -BOOST_AUTO_TEST_CASE( check_default_constructor ) { - Opm::Value v("Value"); - - BOOST_CHECK_EQUAL( false , v.hasValue() ); - BOOST_CHECK_THROW( v.getValue() , std::logic_error ); - - v.setValue( 70 ); - BOOST_CHECK_EQUAL( 70 , v.getValue()); -} - - -BOOST_AUTO_TEST_CASE( check_value_constructor ) { - Opm::Value v("Value" , 100); - - BOOST_CHECK_EQUAL( true , v.hasValue() ); - BOOST_CHECK_EQUAL( 100 , v.getValue()); -} - - - -BOOST_AUTO_TEST_CASE( check_equal1 ) { - Opm::Value v1("v1" , 100); - Opm::Value v2("v2" , 100); - - BOOST_CHECK(v1.equal( v2 )); - - v1.setValue(110); - BOOST_CHECK_EQUAL( false , v1.equal(v2)); -} - - -BOOST_AUTO_TEST_CASE( check_equal2 ) { - Opm::Value v1("v1"); - Opm::Value v2("v2"); - - BOOST_CHECK_EQUAL(true , v1.equal( v2 )); - - v1.setValue(110); - BOOST_CHECK_EQUAL( false , v1.equal(v2)); - v2.setValue(110); - BOOST_CHECK_EQUAL( true , v1.equal(v2)); -} - - -BOOST_AUTO_TEST_CASE( check_assign) { - Opm::Value v1("v1",100); - Opm::Value v2(v1); - - BOOST_CHECK(v1.equal(v2)); -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/WLIST.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/WLIST.cpp deleted file mode 100644 index f128d1911b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/WLIST.cpp +++ /dev/null @@ -1,257 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include -#include - -#define BOOST_TEST_MODULE WLIST_TEST - -#include - -#include -#include -#include -#include -#include -#include - -#include -#include - -using namespace Opm; - -BOOST_AUTO_TEST_CASE(CreateWLIST) { - Opm::WList wlist; - BOOST_CHECK_EQUAL(wlist.size(), 0); - wlist.add("W1"); - BOOST_CHECK_EQUAL(wlist.size(), 1); - - - wlist.del("NO_SUCH_WELL"); - BOOST_CHECK_EQUAL(wlist.size(), 1); - - wlist.del("W1"); - BOOST_CHECK_EQUAL(wlist.size(), 0); - - wlist.add("W1"); - wlist.add("W2"); - wlist.add("W3"); - - auto wells = wlist.wells(); - BOOST_CHECK_EQUAL(wells.size(), 3); - BOOST_CHECK( std::find(wells.begin(), wells.end(), "W1") != wells.end()); - BOOST_CHECK( std::find(wells.begin(), wells.end(), "W2") != wells.end()); - BOOST_CHECK( std::find(wells.begin(), wells.end(), "W3") != wells.end()); - - std::vector wells2; - for (const auto& well : wlist) - wells2.push_back(well); - - BOOST_CHECK_EQUAL(wells2.size(), 3); - BOOST_CHECK( std::find(wells2.begin(), wells2.end(), "W1") != wells2.end()); - BOOST_CHECK( std::find(wells2.begin(), wells2.end(), "W2") != wells2.end()); - BOOST_CHECK( std::find(wells2.begin(), wells2.end(), "W3") != wells2.end()); -} - - -BOOST_AUTO_TEST_CASE(WLISTManager) { - Opm::WListManager wlm; - BOOST_CHECK(!wlm.hasList("NO_SUCH_LIST")); - - - { - auto& wlist1 = wlm.newList("LIST1"); - wlist1.add("A"); - wlist1.add("B"); - wlist1.add("C"); - } - - // If a new list is added with the same name as an existing list the old - // list is dropped and a new list is created. - { - auto& wlist1 = wlm.newList("LIST1"); - BOOST_CHECK_EQUAL(wlist1.size(), 0); - } - auto& wlist1 = wlm.newList("LIST1"); - auto& wlist2 = wlm.newList("LIST2"); - - wlist1.add("W1"); - wlist1.add("W2"); - wlist1.add("W3"); - - wlist2.add("W1"); - wlist2.add("W2"); - wlist2.add("W3"); - - // The delWell operation will work across all well lists. - wlm.delWell("W1"); - BOOST_CHECK( std::find(wlist1.begin(), wlist1.end(), "W1") == wlist1.end()); - BOOST_CHECK( std::find(wlist2.begin(), wlist2.end(), "W1") == wlist2.end()); -} - - -static std::string WELSPECS() { - return - "WELSPECS\n" - " \'W1\' \'OP\' 1 1 1.0 \'OIL\' 7* /\n" - " \'W2\' \'OP\' 2 1 1.0 \'OIL\' 7* /\n" - " \'W3\' \'OP\' 3 1 1.0 \'OIL\' 7* /\n" - " \'W4\' \'OP\' 4 1 1.0 \'OIL\' 7* /\n" - "/\n"; -} - -static Opm::Schedule createSchedule(const std::string& schedule) { - Opm::Parser parser; - std::string input = - "START -- 0 \n" - "10 MAI 2007 / \n" - "SCHEDULE\n"+ schedule; - - /* - "SCHEDULE\n" - "WELSPECS\n" - " \'W_1\' \'OP\' 30 37 3.33 \'OIL\' 7* / \n" - "/ \n" - "DATES -- 1\n" - " 10 \'JUN\' 2007 / \n" - "/\n" - "DATES -- 2,3\n" - " 10 JLY 2007 / \n" - " 10 AUG 2007 / \n" - "/\n" - "WELSPECS\n" - " \'WX2\' \'OP\' 30 37 3.33 \'OIL\' 7* / \n" - " \'W_3\' \'OP\' 20 51 3.92 \'OIL\' 7* / \n" - "/\n"; - */ - - auto deck = parser.parseString(input); - EclipseGrid grid(10,10,10); - TableManager table ( deck ); - FieldPropsManager fp( deck, Phases{true, true, true}, grid, table); - Runspec runspec (deck); - auto python = std::make_shared(); - return Schedule(deck, grid , fp, runspec, python ); -} - - -BOOST_AUTO_TEST_CASE(WlistFromDeck) { - std::string no_wlist = WELSPECS(); - no_wlist += - "DATES\n" - "10 JLY 2007 /\n" - "10 AUG 2007 /\n" - "/\n"; - - - Opm::Schedule sched = createSchedule(no_wlist); - auto& wlm = sched.getWListManager(1); - BOOST_CHECK(!wlm.hasList("LIST1")); -} - -BOOST_AUTO_TEST_CASE(WlistInvalid) { - std::string wlist_invalid_well = WELSPECS() + - "WLIST\n" - " \'*LIST1\' \'NEW\' WELLX /\n" - "/\n" - "DATES\n" - "10 JLY 2007 /\n" - "10 AUG 2007 /\n" - "/\n"; - - std::string wlist_invalid_action = WELSPECS() + - "WLIST\n" - " \'*LIST1\' \'NEWX\' W1 /\n" - "/\n" - "DATES\n" - "10 JLY 2007 /\n" - "10 AUG 2007 /\n" - "/\n"; - - std::string wlist_invalid_list1 = WELSPECS() + - "WLIST\n" - " \'LIST1\' \'NEW\' W1 /\n" - "/\n" - "DATES\n" - "10 JLY 2007 /\n" - "10 AUG 2007 /\n" - "/\n"; - - std::string wlist_invalid_list2 = WELSPECS() + - "WLIST\n" - " \'*LIST1\' \'NEW\' W1 /\n" - " \'*LIST2\' \'ADD\' W2 /\n" - "/\n" - "DATES\n" - "10 JLY 2007 /\n" - "10 AUG 2007 /\n" - "/\n"; - - BOOST_CHECK_THROW( createSchedule(wlist_invalid_well), std::invalid_argument); - BOOST_CHECK_THROW( createSchedule(wlist_invalid_well), std::invalid_argument); - BOOST_CHECK_THROW( createSchedule(wlist_invalid_action), std::invalid_argument); - BOOST_CHECK_THROW( createSchedule(wlist_invalid_list1), std::invalid_argument); - BOOST_CHECK_THROW( createSchedule(wlist_invalid_list2), std::invalid_argument); -} - -BOOST_AUTO_TEST_CASE(Wlist) { - std::string wlist = WELSPECS() + - "WLIST\n" - " \'*LIST1\' \'NEW\' W1 W2 /\n" - " \'*LIST1\' \'ADD\' W3 W4 /\n" - " \'*LIST2\' \'NEW\' W1 W3 /\n" - "/\n" - "DATES\n" - "10 JLY 2007 /\n" - "10 AUG 2007 /\n" - "/\n" - "WLIST\n" - " \'*LIST3\' \'NEW\' /\n" - " \'*LIST3\' \'MOV\' W1 W3 /\n" - "/\n"; - - auto sched = createSchedule(wlist); - { - const auto& wlm = sched.getWListManager(1); - const auto& wl1 = wlm.getList("*LIST1"); - const auto& wl2 = wlm.getList("*LIST2"); - - BOOST_CHECK_EQUAL(wl1.wells().size(), 4 ); - BOOST_CHECK_EQUAL(wl2.wells().size(), 2 ); - } - { - const auto& wlm = sched.getWListManager(2); - const auto& wl1 = wlm.getList("*LIST1"); - const auto& wl2 = wlm.getList("*LIST2"); - const auto& wl3 = wlm.getList("*LIST3"); - - BOOST_CHECK_EQUAL(wl1.wells().size(), 2 ); - BOOST_CHECK_EQUAL(wl2.wells().size(), 0 ); - BOOST_CHECK_EQUAL(wl3.wells().size(), 2 ); - - BOOST_CHECK( wl1.has("W2")); - BOOST_CHECK( wl1.has("W4")); - - BOOST_CHECK( !wl2.has("W1")); - BOOST_CHECK( !wl2.has("W3")); - - BOOST_CHECK( wl3.has("W1")); - BOOST_CHECK( wl3.has("W3")); - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/WTEST.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/WTEST.cpp deleted file mode 100644 index 3a2675e075..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/WTEST.cpp +++ /dev/null @@ -1,215 +0,0 @@ -/* - Copyright 2018 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include -#include -#include - -#define BOOST_TEST_MODULE WTEST -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -using namespace Opm; - - -BOOST_AUTO_TEST_CASE(CreateWellTestConfig) { - WellTestConfig wc; - - BOOST_CHECK_EQUAL(wc.size() , 0); - - - wc.add_well("NAME", WellTestConfig::Reason::PHYSICAL, 10, 10, 10, 1); - BOOST_CHECK_EQUAL(wc.size(), 1); - BOOST_CHECK_THROW(wc.add_well("NAME2", "", 10.0,10,10.0, 1), std::invalid_argument); - BOOST_CHECK_THROW(wc.add_well("NAME3", "X", 1,2,3, 1), std::invalid_argument); - - wc.add_well("NAME", "PEGDC", 10, 10, 10, 1); - BOOST_CHECK_EQUAL(wc.size(), 5); - wc.add_well("NAMEX", "PGDC", 10, 10, 10, 1); - BOOST_CHECK_EQUAL(wc.size(), 9); - wc.drop_well("NAME"); - BOOST_CHECK_EQUAL(wc.size(), 4); - BOOST_CHECK(wc.has("NAMEX")); - BOOST_CHECK(wc.has("NAMEX", WellTestConfig::Reason::PHYSICAL)); - BOOST_CHECK(!wc.has("NAMEX", WellTestConfig::Reason::ECONOMIC)); - BOOST_CHECK(!wc.has("NAME")); - - BOOST_CHECK_THROW(wc.get("NAMEX", WellTestConfig::Reason::ECONOMIC), std::invalid_argument); - BOOST_CHECK_THROW(wc.get("NO_NAME", WellTestConfig::Reason::ECONOMIC), std::invalid_argument); - const auto& wt = wc.get("NAMEX", WellTestConfig::Reason::PHYSICAL); - BOOST_CHECK_EQUAL(wt.name, "NAMEX"); -} - - -BOOST_AUTO_TEST_CASE(WTEST_STATE2) { - WellTestConfig wc; - WellTestState st; - wc.add_well("WELL_NAME", WellTestConfig::Reason::PHYSICAL, 0, 0, 0, 0); - st.closeWell("WELL_NAME", WellTestConfig::Reason::PHYSICAL, 100); - BOOST_CHECK_EQUAL(st.sizeWells(), 1); - - const UnitSystem us{}; - std::vector wells; - wells.emplace_back("WELL_NAME", "A", 0, 0, 1, 1, 200., WellType(Phase::OIL), Well::ProducerCMode::NONE, Connection::Order::TRACK, us, 0., 1.0, true, true, 0, Well::GasInflowEquation::STD); - { - wells[0].updateStatus(Well::Status::SHUT, false); - auto shut_wells = st.updateWells(wc, wells, 5000); - BOOST_CHECK_EQUAL(shut_wells.size(), 0); - } - - { - wells[0].updateStatus(Well::Status::OPEN, false); - auto shut_wells = st.updateWells(wc, wells, 5000); - BOOST_CHECK_EQUAL( shut_wells.size(), 1); - } -} - -BOOST_AUTO_TEST_CASE(WTEST_STATE) { - const double day = 86400.; - WellTestState st; - st.closeWell("WELL_NAME", WellTestConfig::Reason::ECONOMIC, 100. * day); - BOOST_CHECK_EQUAL(st.sizeWells(), 1); - - st.openWell("WELL_NAME", WellTestConfig::Reason::ECONOMIC); - BOOST_CHECK_EQUAL(st.sizeWells(), 1); - - st.closeWell("WELL_NAME", WellTestConfig::Reason::ECONOMIC, 100. * day); - BOOST_CHECK_EQUAL(st.sizeWells(), 1); - - st.closeWell("WELL_NAME", WellTestConfig::Reason::PHYSICAL, 100. * day); - BOOST_CHECK_EQUAL(st.sizeWells(), 2); - - st.closeWell("WELLX", WellTestConfig::Reason::PHYSICAL, 100. * day); - BOOST_CHECK_EQUAL(st.sizeWells(), 3); - - const UnitSystem us{}; - std::vector wells; - wells.emplace_back("WELL_NAME", "A", 0, 0, 1, 1, 200., WellType(Phase::OIL), Well::ProducerCMode::NONE, Connection::Order::TRACK, us, 0., 1.0, true, true, 0, Well::GasInflowEquation::STD); - wells.emplace_back("WELLX", "A", 0, 0, 2, 2, 200., WellType(Phase::OIL), Well::ProducerCMode::NONE, Connection::Order::TRACK, us, 0., 1.0, true, true, 0, Well::GasInflowEquation::STD); - - WellTestConfig wc; - { - wells[0].updateStatus(Well::Status::SHUT, false); - auto shut_wells = st.updateWells(wc, wells, 110. * day); - BOOST_CHECK_EQUAL(shut_wells.size(), 0); - } - { - wells[0].updateStatus(Well::Status::OPEN, false); - auto shut_wells = st.updateWells(wc, wells, 110. * day); - BOOST_CHECK_EQUAL(shut_wells.size(), 0); - } - - wc.add_well("WELL_NAME", WellTestConfig::Reason::PHYSICAL, 1000. * day, 2, 0, 1); - // Not sufficient time has passed. - BOOST_CHECK_EQUAL( st.updateWells(wc, wells, 200. * day).size(), 0); - - // We should test it: - BOOST_CHECK_EQUAL( st.updateWells(wc, wells, 1200. * day).size(), 1); - - // Not sufficient time has passed. - BOOST_CHECK_EQUAL( st.updateWells(wc, wells, 1700. * day).size(), 0); - - st.openWell("WELL_NAME", WellTestConfig::Reason::PHYSICAL); - - st.closeWell("WELL_NAME", WellTestConfig::Reason::PHYSICAL, 1900. * day); - - // We should not test it: - BOOST_CHECK_EQUAL( st.updateWells(wc, wells, 2400. * day).size(), 0); - - // We should test it now: - BOOST_CHECK_EQUAL( st.updateWells(wc, wells, 3000. * day).size(), 1); - - // Too many attempts: - BOOST_CHECK_EQUAL( st.updateWells(wc, wells, 4000. * day).size(), 0); - - wc.add_well("WELL_NAME", WellTestConfig::Reason::PHYSICAL, 1000. * day, 3, 0, 5); - - - wells[0].updateStatus(Well::Status::SHUT, false); - BOOST_CHECK_EQUAL( st.updateWells(wc, wells, 4100. * day).size(), 0); - - wells[0].updateStatus(Well::Status::OPEN, false); - BOOST_CHECK_EQUAL( st.updateWells(wc, wells, 4100. * day).size(), 1); - - BOOST_CHECK_EQUAL( st.updateWells(wc, wells, 5200. * day).size(), 1); - - wc.drop_well("WELL_NAME"); - BOOST_CHECK_EQUAL( st.updateWells(wc, wells, 6300. * day).size(), 0); -} - - -BOOST_AUTO_TEST_CASE(WTEST_STATE_COMPLETIONS) { - WellTestConfig wc; - WellTestState st; - st.addClosedCompletion("WELL_NAME", 2, 100); - BOOST_CHECK_EQUAL(st.sizeCompletions(), 1); - - st.addClosedCompletion("WELL_NAME", 2, 100); - BOOST_CHECK_EQUAL(st.sizeCompletions(), 1); - - st.addClosedCompletion("WELL_NAME", 3, 100); - BOOST_CHECK_EQUAL(st.sizeCompletions(), 2); - - st.addClosedCompletion("WELLX", 3, 100); - BOOST_CHECK_EQUAL(st.sizeCompletions(), 3); - - const UnitSystem us{}; - std::vector wells; - wells.emplace_back("WELL_NAME", "A", 0, 0, 1, 1, 200., WellType(Phase::OIL), Well::ProducerCMode::NONE, Connection::Order::TRACK, us, 0., 1.0, true, true, 0, Well::GasInflowEquation::STD); - wells[0].updateStatus(Well::Status::OPEN, false); - wells.emplace_back("WELLX", "A", 0, 0, 2, 2, 200., WellType(Phase::OIL), Well::ProducerCMode::NONE, Connection::Order::TRACK, us, 0., 1.0, true, true, 0, Well::GasInflowEquation::STD); - wells[1].updateStatus(Well::Status::OPEN, false); - - auto closed_completions = st.updateWells(wc, wells, 5000); - BOOST_CHECK_EQUAL( closed_completions.size(), 0); - - wc.add_well("WELL_NAME", WellTestConfig::Reason::COMPLETION, 1000, 2, 0, 0); - // Not sufficient time has passed. - BOOST_CHECK_EQUAL( st.updateCompletion(wc, 200).size(), 0); - - // We should test it: - BOOST_CHECK_EQUAL( st.updateCompletion(wc, 1200).size(), 2); - - // Not sufficient time has passed. - BOOST_CHECK_EQUAL( st.updateCompletion(wc, 1700).size(), 0); - - // We should test it: - BOOST_CHECK_EQUAL( st.updateCompletion(wc, 2400).size(), 2); - - // Too many attempts: - BOOST_CHECK_EQUAL( st.updateCompletion(wc, 24000).size(), 0); - - st.dropCompletion("WELL_NAME", 2); - st.dropCompletion("WELLX", 3); - BOOST_CHECK_EQUAL(st.sizeCompletions(), 1); -} - - - diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/WellSolventTests.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/WellSolventTests.cpp deleted file mode 100644 index 10f236e244..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/WellSolventTests.cpp +++ /dev/null @@ -1,237 +0,0 @@ -/* - Copyright 2015 IRIS - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#define BOOST_TEST_MODULE WellSolventTests - -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -using namespace Opm; - -static Deck createDeckWithOutSolvent() { - Opm::Parser parser; - std::string input = - "GRID\n" - "PERMX\n" - " 1000*0.25/\n" - "COPY\n" - " PERMX PERMY /\n" - " PERMX PERMZ /\n" - "/\n" - "SCHEDULE\n" - "WELSPECS\n" - " 'W_1' 'OP' 2 2 1* \'OIL\' 7* / \n" - "/\n" - "COMPDAT\n" - " 'W_1' 2* 1 1 'OPEN' / \n" - "/\n" - "WCONINJE\n" - " 'W_1' 'WATER' 'OPEN' 'BHP' 1 2 3/\n/\n"; - - return parser.parseString(input); -} - -static Deck createDeckWithGasInjector() { - Opm::Parser parser; - std::string input = - "GRID\n" - "PERMX\n" - " 1000*0.25/\n" - "COPY\n" - " PERMX PERMY /\n" - " PERMX PERMZ /\n" - "/\n" - "SCHEDULE\n" - "WELSPECS\n" - " 'W_1' 'OP' 1 1 1* \'GAS\' 7* / \n" - "/\n" - "COMPDAT\n" - " 'W_1' 2* 1 1 'OPEN' / \n" - "/\n" - "WCONINJE\n" - " 'W_1' 'GAS' 'OPEN' 'BHP' 1 2 3/\n/\n" - "WSOLVENT\n" - " 'W_1' 1 / \n " - "/\n"; - - return parser.parseString(input); -} - -static Deck createDeckWithDynamicWSOLVENT() { - Opm::Parser parser; - std::string input = - "START -- 0 \n" - "1 JAN 2000 / \n" - "GRID\n" - "PERMX\n" - " 1000*0.25/\n" - "COPY\n" - " PERMX PERMY /\n" - " PERMX PERMZ /\n" - "/\n" - "SCHEDULE\n" - "WELSPECS\n" - " 'W_1' 'OP' 1 1 1* \'GAS\' 7* / \n" - "/\n" - "COMPDAT\n" - " 'W_1' 2* 1 1 'OPEN' / \n" - "/\n" - "WCONINJE\n" - " 'W_1' 'GAS' 'OPEN' 'BHP' 1 2 3/\n/\n" - "DATES -- 2\n" - " 1 MAY 2000 / \n" - "/\n" - "WSOLVENT\n" - " 'W_1' 1 / \n " - "/\n" - "DATES -- 3,4\n" - " 1 JUL 2000 / \n" - " 1 AUG 2000 / \n" - "/\n" - "WSOLVENT\n" - " 'W_1' 0 / \n " - "/\n"; - - return parser.parseString(input); -} - -static Deck createDeckWithOilInjector() { - Opm::Parser parser; - std::string input = - "GRID\n" - "PERMX\n" - " 1000*0.25/\n" - "COPY\n" - " PERMX PERMY /\n" - " PERMX PERMZ /\n" - "/\n" - "SCHEDULE\n" - "WELSPECS\n" - " 'W_1' 'OP' 2 2 1* \'OIL\' 7* / \n" - "/\n" - "COMPDAT\n" - " 'W_1' 2* 1 1 'OPEN' / \n" - "/\n" - "WCONINJE\n" - " 'W_1' 'OIL' 'OPEN' 'BHP' 1 2 3/\n/\n" - "WSOLVENT\n" - " 'W_1' 1 / \n " - "/\n"; - - return parser.parseString(input); -} - -static Deck createDeckWithWaterInjector() { - Opm::Parser parser; - std::string input = - "GRID\n" - "PERMX\n" - " 1000*0.25/\n" - "COPY\n" - " PERMX PERMY /\n" - " PERMX PERMZ /\n" - "/\n" - "SCHEDULE\n" - "WELSPECS\n" - " 'W_1' 'OP' 2 2 1* \'OIL\' 7* / \n" - "/\n" - "COMPDAT\n" - " 'W_1' 2* 1 1 'OPEN' / \n" - "/\n" - "WCONINJE\n" - " 'W_1' 'WATER' 'OPEN' 'BHP' 1 2 3/\n/\n" - "WSOLVENT\n" - " 'W_1' 1 / \n " - "/\n"; - - return parser.parseString(input); -} -BOOST_AUTO_TEST_CASE(TestNoSolvent) { - auto deck = createDeckWithOutSolvent(); - auto python = std::make_shared(); - EclipseGrid grid(10,10,10); - TableManager table ( deck ); - FieldPropsManager fp(deck, Phases{true, true, true}, grid, table); - Runspec runspec(deck); - Schedule schedule(deck, grid , fp, runspec, python); - BOOST_CHECK(!deck.hasKeyword("WSOLVENT")); -} - -BOOST_AUTO_TEST_CASE(TestGasInjector) { - auto deck = createDeckWithGasInjector(); - auto python = std::make_shared(); - EclipseGrid grid(10,10,10); - TableManager table ( deck ); - FieldPropsManager fp(deck, Phases{true, true, true}, grid, table); - Runspec runspec(deck); - Schedule schedule(deck, grid , fp, runspec, python); - BOOST_CHECK(deck.hasKeyword("WSOLVENT")); -} - -BOOST_AUTO_TEST_CASE(TestDynamicWSOLVENT) { - auto deck = createDeckWithDynamicWSOLVENT(); - auto python = std::make_shared(); - EclipseGrid grid(10,10,10); - TableManager table ( deck ); - FieldPropsManager fp(deck, Phases{true, true, true}, grid, table); - Runspec runspec(deck); - Schedule schedule(deck, grid , fp, runspec, python); - BOOST_CHECK(deck.hasKeyword("WSOLVENT")); - const auto& keyword = deck.getKeyword("WSOLVENT"); - BOOST_CHECK_EQUAL(keyword.size(),1); - const auto& record = keyword.getRecord(0); - const std::string& well_name = record.getItem("WELL").getTrimmedString(0); - BOOST_CHECK_EQUAL(well_name, "W_1"); - BOOST_CHECK_EQUAL(schedule.getWell("W_1", 0).getSolventFraction(),0); //default 0 - BOOST_CHECK_EQUAL(schedule.getWell("W_1", 1).getSolventFraction(),1); - BOOST_CHECK_EQUAL(schedule.getWell("W_1", 2).getSolventFraction(),1); - BOOST_CHECK_EQUAL(schedule.getWell("W_1", 3).getSolventFraction(),0); -} - -BOOST_AUTO_TEST_CASE(TestOilInjector) { - auto deck = createDeckWithOilInjector(); - auto python = std::make_shared(); - EclipseGrid grid(10,10,10); - TableManager table ( deck ); - FieldPropsManager fp(deck, Phases{true, true, true}, grid, table); - Runspec runspec(deck); - BOOST_CHECK_THROW (Schedule(deck , grid , fp, runspec, python), std::invalid_argument); -} - -BOOST_AUTO_TEST_CASE(TestWaterInjector) { - auto deck = createDeckWithWaterInjector(); - auto python = std::make_shared(); - EclipseGrid grid(10,10,10); - TableManager table ( deck ); - FieldPropsManager fp(deck, Phases{true, true, true}, grid, table); - Runspec runspec(deck); - BOOST_CHECK_THROW (Schedule(deck, grid , fp, runspec, python), std::invalid_argument); -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/WellTests.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/WellTests.cpp deleted file mode 100644 index d62204a1d7..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/WellTests.cpp +++ /dev/null @@ -1,1222 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include -#include - -#define BOOST_TEST_MODULE WellTest -#include - -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -using namespace Opm; - - -namespace Opm { -inline std::ostream& operator<<( std::ostream& stream, const Connection& c ) { - return stream << "(" << c.getI() << "," << c.getJ() << "," << c.getK() << ")"; -} -inline std::ostream& operator<<( std::ostream& stream, const Well& well ) { - return stream << "(" << well.name() << ")"; -} -} - - - -BOOST_AUTO_TEST_CASE(WellCOMPDATtestTRACK) { - Opm::Parser parser; - std::string input = - "START -- 0 \n" - "19 JUN 2007 / \n" - "SCHEDULE\n" - "DATES -- 1\n" - " 10 OKT 2008 / \n" - "/\n" - "WELSPECS\n" - " 'OP_1' 'OP' 9 9 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / \n" - "/\n" - "COMPORD\n" - " OP_1 TRACK / \n" - "/\n" - "COMPDAT\n" - " 'OP_1' 9 9 1 1 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / \n" - " 'OP_1' 9 9 3 9 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / \n" - " 'OP_1' 9 9 2 2 'OPEN' 1* 46.825 0.311 4332.346 1* 1* 'X' 22.123 / \n" - "/\n" - "DATES -- 2\n" - " 20 JAN 2010 / \n" - "/\n"; - - - auto deck = parser.parseString(input); - auto python = std::make_shared(); - Opm::EclipseGrid grid(10,10,10); - TableManager table ( deck ); - FieldPropsManager fp( deck, Phases{true, true, true}, grid, table); - Opm::Runspec runspec (deck); - Opm::Schedule schedule(deck, grid , fp, runspec, python); - const auto& op_1 = schedule.getWell("OP_1", 2); - - const auto& completions = op_1.getConnections(); - BOOST_CHECK_EQUAL(9U, completions.size()); - - //Verify TRACK completion ordering - for (size_t k = 0; k < completions.size(); ++k) { - BOOST_CHECK_EQUAL(completions.get( k ).getK(), k); - } - - // Output / input ordering - const auto& output_connections = completions.output(grid); - std::vector expected = {0,2,3,4,5,6,7,8,1}; - for (size_t k = 0; k < completions.size(); ++k) - BOOST_CHECK_EQUAL( expected[k], output_connections[k]->getK()); -} - - -BOOST_AUTO_TEST_CASE(WellCOMPDATtestDefaultTRACK) { - Opm::Parser parser; - std::string input = - "START -- 0 \n" - "19 JUN 2007 / \n" - "SCHEDULE\n" - "DATES -- 1\n" - " 10 OKT 2008 / \n" - "/\n" - "WELSPECS\n" - " 'OP_1' 'OP' 9 9 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / \n" - "/\n" - "COMPDAT\n" - " 'OP_1' 9 9 1 1 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / \n" - " 'OP_1' 9 9 3 9 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / \n" - " 'OP_1' 9 9 2 2 'OPEN' 1* 46.825 0.311 4332.346 1* 1* 'X' 22.123 / \n" - "/\n" - "DATES -- 2\n" - " 20 JAN 2010 / \n" - "/\n"; - - - auto deck = parser.parseString(input); - auto python = std::make_shared(); - Opm::EclipseGrid grid(10,10,10); - TableManager table ( deck ); - FieldPropsManager fp( deck, Phases{true, true, true}, grid, table); - Opm::Runspec runspec (deck); - Opm::Schedule schedule(deck, grid , fp, runspec, python); - const auto& op_1 = schedule.getWell("OP_1", 2); - - const auto& completions = op_1.getConnections(); - BOOST_CHECK_EQUAL(9U, completions.size()); - - //Verify TRACK completion ordering - for (size_t k = 0; k < completions.size(); ++k) { - BOOST_CHECK_EQUAL(completions.get( k ).getK(), k); - } -} - -BOOST_AUTO_TEST_CASE(WellCOMPDATtestINPUT) { - Opm::Parser parser; - std::string input = - "START -- 0 \n" - "19 JUN 2007 / \n" - "SCHEDULE\n" - "DATES -- 1\n" - " 10 OKT 2008 / \n" - "/\n" - "WELSPECS\n" - " 'OP_1' 'OP' 9 9 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / \n" - "/\n" - "COMPORD\n" - " OP_1 INPUT / \n" - "/\n" - "COMPDAT\n" - " 'OP_1' 9 9 1 1 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / \n" - " 'OP_1' 9 9 3 9 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / \n" - " 'OP_1' 9 9 2 2 'OPEN' 1* 46.825 0.311 4332.346 1* 1* 'X' 22.123 / \n" - "/\n" - "DATES -- 2\n" - " 20 JAN 2010 / \n" - "/\n"; - - - auto deck = parser.parseString(input); - Opm::EclipseGrid grid(10,10,10); - Opm::ErrorGuard errors; - TableManager table ( deck ); - FieldPropsManager fp( deck, Phases{true, true, true}, grid, table); - Opm::Runspec runspec (deck); - auto python = std::make_shared(); - Opm::Schedule schedule(deck, grid , fp, runspec, Opm::ParseContext(), errors, python); - const auto& op_1 = schedule.getWell("OP_1", 2); - - const auto& completions = op_1.getConnections(); - BOOST_CHECK_EQUAL(9U, completions.size()); - BOOST_CHECK_EQUAL(completions.get( 1 ).getK(), 2); - BOOST_CHECK_EQUAL(completions.get( 2 ).getK(), 3); - BOOST_CHECK_EQUAL(completions.get( 3 ).getK(), 4); - BOOST_CHECK_EQUAL(completions.get( 4 ).getK(), 5); - BOOST_CHECK_EQUAL(completions.get( 5 ).getK(), 6); - BOOST_CHECK_EQUAL(completions.get( 6 ).getK(), 7); - BOOST_CHECK_EQUAL(completions.get( 7 ).getK(), 8); - BOOST_CHECK_EQUAL(completions.get( 8 ).getK(), 1); -} - -BOOST_AUTO_TEST_CASE(NewWellZeroCompletions) { - Opm::Well well("WELL1", "GROUP", 0, 1, 0, 0, 0.0, Opm::WellType(Opm::Phase::OIL), Opm::Well::ProducerCMode::CMODE_UNDEFINED, Connection::Order::DEPTH, UnitSystem::newMETRIC(), 0, 1.0, false, false, 0, Opm::Well::GasInflowEquation::STD); - BOOST_CHECK_EQUAL( 0U , well.getConnections( ).size() ); -} - - -BOOST_AUTO_TEST_CASE(isProducerCorrectlySet) { - // HACK: This test checks correctly setting of isProducer/isInjector. This property depends on which of - // WellProductionProperties/WellInjectionProperties is set last, independent of actual values. - { - Opm::Well well("WELL1" , "GROUP", 0, 1, 0, 0, 0.0, Opm::WellType(Opm::Phase::OIL), Opm::Well::ProducerCMode::CMODE_UNDEFINED, Connection::Order::DEPTH, UnitSystem::newMETRIC(), 0, 1.0, false, false, 0, Opm::Well::GasInflowEquation::STD); - - - /* 1: Well is created as producer */ - BOOST_CHECK_EQUAL( false , well.isInjector()); - BOOST_CHECK_EQUAL( true , well.isProducer()); - - /* Set a surface injection rate => Well becomes an Injector */ - auto injectionProps1 = std::make_shared(well.getInjectionProperties()); - injectionProps1->surfaceInjectionRate = 100; - well.updateInjection(injectionProps1); - BOOST_CHECK_EQUAL( true , well.isInjector()); - BOOST_CHECK_EQUAL( false , well.isProducer()); - BOOST_CHECK_EQUAL( 100 , well.getInjectionProperties().surfaceInjectionRate.get()); - } - - - { - Opm::Well well("WELL1" , "GROUP", 0, 1, 0, 0, 0.0, Opm::WellType(Opm::Phase::OIL), Opm::Well::ProducerCMode::CMODE_UNDEFINED, Connection::Order::DEPTH, UnitSystem::newMETRIC(), 0, 1.0, false, false, 0, Opm::Well::GasInflowEquation::STD); - - /* Set a reservoir injection rate => Well becomes an Injector */ - auto injectionProps2 = std::make_shared(well.getInjectionProperties()); - injectionProps2->reservoirInjectionRate = 200; - well.updateInjection(injectionProps2); - BOOST_CHECK_EQUAL( false , well.isProducer()); - BOOST_CHECK_EQUAL( 200 , well.getInjectionProperties().reservoirInjectionRate.get()); - } - - { - Opm::Well well("WELL1" , "GROUP", 0, 1, 0, 0, 0.0, Opm::WellType(Opm::Phase::OIL), Opm::Well::ProducerCMode::CMODE_UNDEFINED, Connection::Order::DEPTH, UnitSystem::newMETRIC(), 0, 1.0, false, false, 0, Opm::Well::GasInflowEquation::STD); - - /* Set rates => Well becomes a producer; injection rate should be set to 0. */ - auto injectionProps3 = std::make_shared(well.getInjectionProperties()); - well.updateInjection(injectionProps3); - - auto properties = std::make_shared( well.getProductionProperties() ); - properties->OilRate = 100; - properties->GasRate = 200; - properties->WaterRate = 300; - well.updateProduction(properties); - - BOOST_CHECK_EQUAL( false , well.isInjector()); - BOOST_CHECK_EQUAL( true , well.isProducer()); - BOOST_CHECK_EQUAL( 0 , well.getInjectionProperties().surfaceInjectionRate.get()); - BOOST_CHECK_EQUAL( 0 , well.getInjectionProperties().reservoirInjectionRate.get()); - BOOST_CHECK_EQUAL( 100 , well.getProductionProperties().OilRate.get()); - BOOST_CHECK_EQUAL( 200 , well.getProductionProperties().GasRate.get()); - BOOST_CHECK_EQUAL( 300 , well.getProductionProperties().WaterRate.get()); - } -} - -BOOST_AUTO_TEST_CASE(GroupnameCorretlySet) { - Opm::Well well("WELL1" , "G1", 0, 1, 0, 0, 0.0, Opm::WellType(Opm::Phase::OIL), Opm::Well::ProducerCMode::CMODE_UNDEFINED, Connection::Order::DEPTH, UnitSystem::newMETRIC(), 0, 1.0, false, false, 0, Opm::Well::GasInflowEquation::STD); - - BOOST_CHECK_EQUAL("G1" , well.groupName()); - well.updateGroup( "GROUP2"); - BOOST_CHECK_EQUAL("GROUP2" , well.groupName()); -} - - -BOOST_AUTO_TEST_CASE(addWELSPECS_setData_dataSet) { - Opm::Well well("WELL1", "GROUP", 0, 1, 23, 42, 2334.32, Opm::WellType(Opm::Phase::WATER), Opm::Well::ProducerCMode::CMODE_UNDEFINED, Connection::Order::DEPTH, UnitSystem::newMETRIC(), 0, 1.0, false, false, 0, Opm::Well::GasInflowEquation::STD); - - BOOST_CHECK_EQUAL(23, well.getHeadI()); - BOOST_CHECK_EQUAL(42, well.getHeadJ()); - BOOST_CHECK_EQUAL(2334.32, well.getRefDepth()); - BOOST_CHECK_EQUAL(Opm::Phase::WATER, well.getPreferredPhase()); -} - - -BOOST_AUTO_TEST_CASE(XHPLimitDefault) { - Opm::Well well("WELL1", "GROUP", 0, 1, 23, 42, 2334.32, Opm::WellType(Opm::Phase::WATER), Opm::Well::ProducerCMode::CMODE_UNDEFINED, Connection::Order::DEPTH, UnitSystem::newMETRIC(), 0, 1.0, false, false, 0, Opm::Well::GasInflowEquation::STD); - - - auto productionProps = std::make_shared(well.getProductionProperties()); - productionProps->BHPTarget = 100; - productionProps->addProductionControl(Opm::Well::ProducerCMode::BHP); - well.updateProduction(productionProps); - BOOST_CHECK_EQUAL( 100 , well.getProductionProperties().BHPTarget.get()); - BOOST_CHECK_EQUAL( true, well.getProductionProperties().hasProductionControl( Opm::Well::ProducerCMode::BHP )); - - auto injProps = std::make_shared(well.getInjectionProperties()); - injProps->THPTarget = 200; - well.updateInjection(injProps); - BOOST_CHECK_EQUAL( 200 , well.getInjectionProperties().THPTarget.get()); - BOOST_CHECK( !well.getInjectionProperties().hasInjectionControl( Opm::Well::InjectorCMode::THP )); -} - - - -BOOST_AUTO_TEST_CASE(ScheduleTypesInjectorType) { - Opm::Well well("WELL1", "GROUP", 0, 1, 23, 42, 2334.32, Opm::WellType(Opm::Phase::WATER), Opm::Well::ProducerCMode::CMODE_UNDEFINED, Connection::Order::DEPTH, UnitSystem::newMETRIC(), 0, 1.0, false, false, 0, Opm::Well::GasInflowEquation::STD); - - - auto injectionProps = std::make_shared(well.getInjectionProperties()); - injectionProps->injectorType = Opm::InjectorType::WATER; - well.updateInjection(injectionProps); - // TODO: Should we test for something other than wate here, as long as - // the default value for InjectorType is WellInjector::WATER? - BOOST_CHECK( Opm::InjectorType::WATER == well.getInjectionProperties().injectorType); - -} - - - -/*****************************************************************/ - - -BOOST_AUTO_TEST_CASE(WellHaveProductionControlLimit) { - Opm::Well well("WELL1", "GROUP", 0, 1, 23, 42, 2334.32, Opm::WellType(Opm::Phase::WATER), Opm::Well::ProducerCMode::CMODE_UNDEFINED, Connection::Order::DEPTH, UnitSystem::newMETRIC(), 0, 1.0, false, false, 0, Opm::Well::GasInflowEquation::STD); - - - BOOST_CHECK( !well.getProductionProperties().hasProductionControl( Opm::Well::ProducerCMode::ORAT )); - BOOST_CHECK( !well.getProductionProperties().hasProductionControl( Opm::Well::ProducerCMode::RESV )); - - auto properties1 = std::make_shared(well.getProductionProperties()); - properties1->OilRate = 100; - properties1->addProductionControl(Opm::Well::ProducerCMode::ORAT); - well.updateProduction(properties1); - BOOST_CHECK( well.getProductionProperties().hasProductionControl( Opm::Well::ProducerCMode::ORAT )); - BOOST_CHECK( !well.getProductionProperties().hasProductionControl( Opm::Well::ProducerCMode::RESV )); - - auto properties2 = std::make_shared(well.getProductionProperties()); - properties2->ResVRate = 100; - properties2->addProductionControl(Opm::Well::ProducerCMode::RESV); - well.updateProduction(properties2); - BOOST_CHECK( well.getProductionProperties().hasProductionControl( Opm::Well::ProducerCMode::RESV )); - - auto properties3 = std::make_shared(well.getProductionProperties()); - properties3->OilRate = 100; - properties3->WaterRate = 100; - properties3->GasRate = 100; - properties3->LiquidRate = 100; - properties3->ResVRate = 100; - properties3->BHPTarget = 100; - properties3->THPTarget = 100; - properties3->addProductionControl(Opm::Well::ProducerCMode::ORAT); - properties3->addProductionControl(Opm::Well::ProducerCMode::LRAT); - properties3->addProductionControl(Opm::Well::ProducerCMode::BHP); - well.updateProduction(properties3); - - BOOST_CHECK( well.getProductionProperties().hasProductionControl( Opm::Well::ProducerCMode::ORAT )); - BOOST_CHECK( well.getProductionProperties().hasProductionControl( Opm::Well::ProducerCMode::LRAT )); - BOOST_CHECK( well.getProductionProperties().hasProductionControl( Opm::Well::ProducerCMode::BHP )); - - auto properties4 = std::make_shared(well.getProductionProperties()); - properties4->dropProductionControl( Opm::Well::ProducerCMode::LRAT ); - well.updateProduction(properties4); - - BOOST_CHECK( well.getProductionProperties().hasProductionControl( Opm::Well::ProducerCMode::ORAT )); - BOOST_CHECK(!well.getProductionProperties().hasProductionControl( Opm::Well::ProducerCMode::LRAT )); - BOOST_CHECK( well.getProductionProperties().hasProductionControl( Opm::Well::ProducerCMode::BHP )); -} - - -BOOST_AUTO_TEST_CASE(WellHaveInjectionControlLimit) { - Opm::Well well("WELL1", "GROUP", 0, 1, 23, 42, 2334.32, Opm::WellType(Opm::Phase::WATER), Opm::Well::ProducerCMode::CMODE_UNDEFINED, Connection::Order::DEPTH, UnitSystem::newMETRIC(), 0, 1.0, false, false, 0, Opm::Well::GasInflowEquation::STD); - - BOOST_CHECK( !well.getInjectionProperties().hasInjectionControl( Opm::Well::InjectorCMode::RATE )); - BOOST_CHECK( !well.getInjectionProperties().hasInjectionControl( Opm::Well::InjectorCMode::RESV )); - - auto injProps1 = std::make_shared(well.getInjectionProperties()); - injProps1->surfaceInjectionRate = 100; - injProps1->addInjectionControl(Opm::Well::InjectorCMode::RATE); - well.updateInjection(injProps1); - BOOST_CHECK( well.getInjectionProperties().hasInjectionControl( Opm::Well::InjectorCMode::RATE )); - BOOST_CHECK( !well.getInjectionProperties().hasInjectionControl( Opm::Well::InjectorCMode::RESV )); - - auto injProps2 = std::make_shared(well.getInjectionProperties()); - injProps2->reservoirInjectionRate = 100; - injProps2->addInjectionControl(Opm::Well::InjectorCMode::RESV); - well.updateInjection(injProps2); - BOOST_CHECK( well.getInjectionProperties().hasInjectionControl( Opm::Well::InjectorCMode::RESV )); - - auto injProps3 = std::make_shared(well.getInjectionProperties()); - injProps3->BHPTarget = 100; - injProps3->addInjectionControl(Opm::Well::InjectorCMode::BHP); - injProps3->THPTarget = 100; - injProps3->addInjectionControl(Opm::Well::InjectorCMode::THP); - well.updateInjection(injProps3); - - BOOST_CHECK( well.getInjectionProperties().hasInjectionControl( Opm::Well::InjectorCMode::RATE )); - BOOST_CHECK( well.getInjectionProperties().hasInjectionControl( Opm::Well::InjectorCMode::RESV )); - BOOST_CHECK( well.getInjectionProperties().hasInjectionControl( Opm::Well::InjectorCMode::THP )); - BOOST_CHECK( well.getInjectionProperties().hasInjectionControl( Opm::Well::InjectorCMode::BHP )); - - - auto injProps4 = std::make_shared(well.getInjectionProperties()); - injProps4->dropInjectionControl( Opm::Well::InjectorCMode::RESV ); - well.updateInjection(injProps4); - BOOST_CHECK( well.getInjectionProperties().hasInjectionControl( Opm::Well::InjectorCMode::RATE )); - BOOST_CHECK( !well.getInjectionProperties().hasInjectionControl( Opm::Well::InjectorCMode::RESV )); - BOOST_CHECK( well.getInjectionProperties().hasInjectionControl( Opm::Well::InjectorCMode::THP )); - BOOST_CHECK( well.getInjectionProperties().hasInjectionControl( Opm::Well::InjectorCMode::BHP )); -} -/*********************************************************************/ - -BOOST_AUTO_TEST_CASE(WellGuideRatePhase_GuideRatePhaseSet) { - Opm::Well well("WELL1" , "GROUP", 0, 1, 0, 0, 0.0, Opm::WellType(Opm::Phase::OIL), Opm::Well::ProducerCMode::CMODE_UNDEFINED, Connection::Order::DEPTH, UnitSystem::newMETRIC(), 0, 1.0, false, false, 0, Opm::Well::GasInflowEquation::STD); - - BOOST_CHECK(Opm::Well::GuideRateTarget::UNDEFINED == well.getGuideRatePhase()); - - BOOST_CHECK(well.updateWellGuideRate(true, 100, Opm::Well::GuideRateTarget::RAT, 66.0)); - BOOST_CHECK(Opm::Well::GuideRateTarget::RAT == well.getGuideRatePhase()); - BOOST_CHECK_EQUAL(100, well.getGuideRate()); - BOOST_CHECK_EQUAL(66.0, well.getGuideRateScalingFactor()); -} - -BOOST_AUTO_TEST_CASE(WellEfficiencyFactorSet) { - Opm::Well well("WELL1" , "GROUP", 0, 1, 0, 0, 0.0, Opm::WellType(Opm::Phase::OIL), Opm::Well::ProducerCMode::CMODE_UNDEFINED, Connection::Order::DEPTH, UnitSystem::newMETRIC(), 0, 1.0, false, false, 0, Opm::Well::GasInflowEquation::STD); - - BOOST_CHECK_EQUAL(1.0, well.getEfficiencyFactor()); - BOOST_CHECK( well.updateEfficiencyFactor(0.9)); - BOOST_CHECK_EQUAL(0.9, well.getEfficiencyFactor()); -} - - -namespace { - namespace WCONHIST { - std::string all_specified_CMODE_THP() { - const std::string input = - "WCONHIST\n" - "'P' 'OPEN' 'THP' 1 2 3/\n/\n"; - - return input; - } - - - - std::string all_specified() { - const std::string input = - "WCONHIST\n" - "'P' 'OPEN' 'ORAT' 1 2 3/\n/\n"; - - return input; - } - - std::string orat_defaulted() { - const std::string input = - "WCONHIST\n" - "'P' 'OPEN' 'WRAT' 1* 2 3/\n/\n"; - - return input; - } - - std::string owrat_defaulted() { - const std::string input = - "WCONHIST\n" - "'P' 'OPEN' 'GRAT' 1* 1* 3/\n/\n"; - - return input; - } - - std::string all_defaulted() { - const std::string input = - "WCONHIST\n" - "'P' 'OPEN' 'LRAT'/\n/\n"; - - return input; - } - - std::string all_defaulted_with_bhp() { - const std::string input = - "WCONHIST\n" - "-- 1 2 3 4-9 10\n" - " 'P' 'OPEN' 'RESV' 6* 500/\n/\n"; - - return input; - } - - std::string bhp_defaulted() { - const std::string input = - "WCONHIST\n" - "-- 1 2 3 4-9 10\n" - " 'P' 'OPEN' 'BHP' 6* 500/\n/\n"; - - return input; - } - - std::string all_defaulted_with_bhp_vfp_table() { - const std::string input = - "WCONHIST\n" - "-- 1 2 3 4-6 7 8 9 10\n" - " 'P' 'OPEN' 'RESV' 3* 3 10. 1* 500/\n/\n"; - - return input; - } - - - Opm::Well::WellProductionProperties properties(const std::string& input) { - Opm::Parser parser; - Opm::UnitSystem unit_system(Opm::UnitSystem::UnitType::UNIT_TYPE_METRIC); - auto deck = parser.parseString(input); - const auto& record = deck.getKeyword("WCONHIST").getRecord(0); - Opm::Well::WellProductionProperties hist(unit_system, "W"); - hist.handleWCONHIST(record); - - - return hist; - } - } // namespace WCONHIST - - namespace WCONPROD { - std::string - all_specified_CMODE_BHP() - { - const std::string input = - "WCONHIST\n" - "'P' 'OPEN' 'BHP' 1 2 3/\n/\n"; - - return input; - } - - std::string orat_CMODE_other_defaulted() - { - const std::string input = - "WCONPROD\n" - "'P' 'OPEN' 'ORAT' 1 2 3/\n/\n"; - - return input; - } - - std::string thp_CMODE() - { - const std::string input = - "WCONPROD\n" - "'P' 'OPEN' 'THP' 1 2 3 3* 10. 8 13./\n/\n"; - - return input; - } - - std::string bhp_CMODE() - { - const std::string input = - "WCONPROD\n" - "'P' 'OPEN' 'BHP' 1 2 3 2* 20. 10. 8 13./\n/\n"; - - return input; - } - - Opm::UnitSystem unit_system(Opm::UnitSystem::UnitType::UNIT_TYPE_METRIC); - Opm::Well::WellProductionProperties properties(const std::string& input) - { - Opm::Parser parser; - auto deck = parser.parseString(input); - const auto& kwd = deck.getKeyword("WCONPROD"); - const auto& record = kwd.getRecord(0); - Opm::Well::WellProductionProperties pred(unit_system, "W"); - pred.handleWCONPROD("WELL", record); - - return pred; - } - } - -} // namespace anonymous - -BOOST_AUTO_TEST_CASE(WCH_All_Specified_BHP_Defaulted) -{ - Opm::SummaryState st(std::chrono::system_clock::now()); - const Opm::Well::WellProductionProperties& p = - WCONHIST::properties(WCONHIST::all_specified()); - - BOOST_CHECK(p.hasProductionControl(Opm::Well::ProducerCMode::ORAT)); - BOOST_CHECK( !p.hasProductionControl(Opm::Well::ProducerCMode::WRAT)); - BOOST_CHECK( !p.hasProductionControl(Opm::Well::ProducerCMode::GRAT)); - BOOST_CHECK( !p.hasProductionControl(Opm::Well::ProducerCMode::LRAT)); - BOOST_CHECK( !p.hasProductionControl(Opm::Well::ProducerCMode::RESV)); - - BOOST_CHECK(p.controlMode == Opm::Well::ProducerCMode::ORAT); - - BOOST_CHECK(p.hasProductionControl(Opm::Well::ProducerCMode::BHP)); - - const auto& controls = p.controls(st, 0); - BOOST_CHECK_EQUAL(controls.bhp_limit, 101325.); -} - -BOOST_AUTO_TEST_CASE(WCH_ORAT_Defaulted_BHP_Defaulted) -{ - Opm::SummaryState st(std::chrono::system_clock::now()); - const Opm::Well::WellProductionProperties& p = - WCONHIST::properties(WCONHIST::orat_defaulted()); - - BOOST_CHECK( !p.hasProductionControl(Opm::Well::ProducerCMode::ORAT)); - BOOST_CHECK(p.hasProductionControl(Opm::Well::ProducerCMode::WRAT)); - BOOST_CHECK( !p.hasProductionControl(Opm::Well::ProducerCMode::GRAT)); - BOOST_CHECK( !p.hasProductionControl(Opm::Well::ProducerCMode::LRAT)); - BOOST_CHECK( !p.hasProductionControl(Opm::Well::ProducerCMode::RESV)); - BOOST_CHECK(p.controlMode == Opm::Well::ProducerCMode::WRAT); - - BOOST_CHECK(p.hasProductionControl(Opm::Well::ProducerCMode::BHP)); - const auto& controls = p.controls(st, 0); - BOOST_CHECK_EQUAL(controls.bhp_limit, 101325.); -} - -BOOST_AUTO_TEST_CASE(WCH_OWRAT_Defaulted_BHP_Defaulted) -{ - Opm::SummaryState st(std::chrono::system_clock::now()); - const Opm::Well::WellProductionProperties& p = - WCONHIST::properties(WCONHIST::owrat_defaulted()); - - BOOST_CHECK( !p.hasProductionControl(Opm::Well::ProducerCMode::ORAT)); - BOOST_CHECK( !p.hasProductionControl(Opm::Well::ProducerCMode::WRAT)); - BOOST_CHECK(p.hasProductionControl(Opm::Well::ProducerCMode::GRAT)); - BOOST_CHECK( !p.hasProductionControl(Opm::Well::ProducerCMode::LRAT)); - BOOST_CHECK( !p.hasProductionControl(Opm::Well::ProducerCMode::RESV)); - BOOST_CHECK(p.controlMode == Opm::Well::ProducerCMode::GRAT); - - BOOST_CHECK(p.hasProductionControl(Opm::Well::ProducerCMode::BHP)); - const auto& controls = p.controls(st, 0); - BOOST_CHECK_EQUAL(controls.bhp_limit, 101325.); -} - -BOOST_AUTO_TEST_CASE(WCH_Rates_Defaulted_BHP_Defaulted) -{ - Opm::SummaryState st(std::chrono::system_clock::now()); - const Opm::Well::WellProductionProperties& p = - WCONHIST::properties(WCONHIST::all_defaulted()); - - BOOST_CHECK( !p.hasProductionControl(Opm::Well::ProducerCMode::ORAT)); - BOOST_CHECK( !p.hasProductionControl(Opm::Well::ProducerCMode::WRAT)); - BOOST_CHECK( !p.hasProductionControl(Opm::Well::ProducerCMode::GRAT)); - BOOST_CHECK(p.hasProductionControl(Opm::Well::ProducerCMode::LRAT)); - BOOST_CHECK( !p.hasProductionControl(Opm::Well::ProducerCMode::RESV)); - BOOST_CHECK(p.controlMode == Opm::Well::ProducerCMode::LRAT); - - BOOST_CHECK(p.hasProductionControl(Opm::Well::ProducerCMode::BHP)); - const auto& controls = p.controls(st, 0); - BOOST_CHECK_EQUAL(controls.bhp_limit, 101325.); -} - -BOOST_AUTO_TEST_CASE(WCH_Rates_Defaulted_BHP_Specified) -{ - Opm::SummaryState st(std::chrono::system_clock::now()); - const Opm::Well::WellProductionProperties& p = - WCONHIST::properties(WCONHIST::all_defaulted_with_bhp()); - - BOOST_CHECK( !p.hasProductionControl(Opm::Well::ProducerCMode::ORAT)); - BOOST_CHECK( !p.hasProductionControl(Opm::Well::ProducerCMode::WRAT)); - BOOST_CHECK( !p.hasProductionControl(Opm::Well::ProducerCMode::GRAT)); - BOOST_CHECK( !p.hasProductionControl(Opm::Well::ProducerCMode::LRAT)); - BOOST_CHECK(p.hasProductionControl(Opm::Well::ProducerCMode::RESV)); - - BOOST_CHECK(p.controlMode == Opm::Well::ProducerCMode::RESV); - - BOOST_CHECK_EQUAL(true, p.hasProductionControl(Opm::Well::ProducerCMode::BHP)); - const auto& controls = p.controls(st, 0); - BOOST_CHECK_EQUAL(controls.bhp_limit, 101325.); -} - -BOOST_AUTO_TEST_CASE(WCH_Rates_NON_Defaulted_VFP) -{ - Opm::SummaryState st(std::chrono::system_clock::now()); - const Opm::Well::WellProductionProperties& p = - WCONHIST::properties(WCONHIST::all_defaulted_with_bhp_vfp_table()); - - BOOST_CHECK( !p.hasProductionControl(Opm::Well::ProducerCMode::ORAT)); - BOOST_CHECK( !p.hasProductionControl(Opm::Well::ProducerCMode::WRAT)); - BOOST_CHECK( !p.hasProductionControl(Opm::Well::ProducerCMode::GRAT)); - BOOST_CHECK( !p.hasProductionControl(Opm::Well::ProducerCMode::LRAT)); - BOOST_CHECK(p.hasProductionControl(Opm::Well::ProducerCMode::RESV)); - - BOOST_CHECK(p.controlMode == Opm::Well::ProducerCMode::RESV); - - BOOST_CHECK_EQUAL(true, p.hasProductionControl(Opm::Well::ProducerCMode::BHP)); - BOOST_CHECK_EQUAL(p.VFPTableNumber, 3); - BOOST_CHECK_EQUAL(p.ALQValue, 10.); - const auto& controls = p.controls(st, 0); - BOOST_CHECK_EQUAL(controls.bhp_limit, 101325.); -} - -BOOST_AUTO_TEST_CASE(WCH_BHP_Specified) -{ - Opm::SummaryState st(std::chrono::system_clock::now()); - const Opm::Well::WellProductionProperties& p = - WCONHIST::properties(WCONHIST::bhp_defaulted()); - - BOOST_CHECK( !p.hasProductionControl(Opm::Well::ProducerCMode::ORAT)); - BOOST_CHECK( !p.hasProductionControl(Opm::Well::ProducerCMode::WRAT)); - BOOST_CHECK( !p.hasProductionControl(Opm::Well::ProducerCMode::GRAT)); - BOOST_CHECK( !p.hasProductionControl(Opm::Well::ProducerCMode::LRAT)); - BOOST_CHECK( !p.hasProductionControl(Opm::Well::ProducerCMode::RESV)); - - BOOST_CHECK(p.controlMode == Opm::Well::ProducerCMode::BHP); - - BOOST_CHECK_EQUAL(true, p.hasProductionControl(Opm::Well::ProducerCMode::BHP)); - const auto& controls = p.controls(st, 0); - BOOST_CHECK_EQUAL(controls.bhp_limit, 5e7); -} - -BOOST_AUTO_TEST_CASE(WCONPROD_ORAT_CMode) -{ - const Opm::Well::WellProductionProperties& p = WCONPROD::properties(WCONPROD::orat_CMODE_other_defaulted()); - - BOOST_CHECK( p.hasProductionControl(Opm::Well::ProducerCMode::ORAT)); - BOOST_CHECK( p.hasProductionControl(Opm::Well::ProducerCMode::WRAT)); - BOOST_CHECK( p.hasProductionControl(Opm::Well::ProducerCMode::GRAT)); - BOOST_CHECK( !p.hasProductionControl(Opm::Well::ProducerCMode::LRAT)); - BOOST_CHECK( !p.hasProductionControl(Opm::Well::ProducerCMode::RESV)); - BOOST_CHECK( !p.hasProductionControl(Opm::Well::ProducerCMode::THP)); - - BOOST_CHECK(p.controlMode == Opm::Well::ProducerCMode::ORAT); - - BOOST_CHECK_EQUAL(true, p.hasProductionControl(Opm::Well::ProducerCMode::BHP)); - - BOOST_CHECK_EQUAL(p.VFPTableNumber, 0); - BOOST_CHECK_EQUAL(p.ALQValue, 0.); -} - -BOOST_AUTO_TEST_CASE(WCONPROD_THP_CMode) -{ - const Opm::Well::WellProductionProperties& p = - WCONPROD::properties(WCONPROD::thp_CMODE()); - - BOOST_CHECK( p.hasProductionControl(Opm::Well::ProducerCMode::ORAT)); - BOOST_CHECK( p.hasProductionControl(Opm::Well::ProducerCMode::WRAT)); - BOOST_CHECK( p.hasProductionControl(Opm::Well::ProducerCMode::GRAT)); - BOOST_CHECK( !p.hasProductionControl(Opm::Well::ProducerCMode::LRAT)); - BOOST_CHECK( !p.hasProductionControl(Opm::Well::ProducerCMode::RESV)); - BOOST_CHECK( p.hasProductionControl(Opm::Well::ProducerCMode::THP)); - - BOOST_CHECK(p.controlMode == Opm::Well::ProducerCMode::THP); - - BOOST_CHECK_EQUAL(true, p.hasProductionControl(Opm::Well::ProducerCMode::BHP)); - - BOOST_CHECK_EQUAL(p.VFPTableNumber, 8); - BOOST_CHECK_EQUAL(p.ALQValue, 13.); - BOOST_CHECK_EQUAL(p.THPTarget.getSI(), 1000000.); // 10 barsa - BOOST_CHECK_EQUAL(p.BHPTarget.getSI(), 101325.); // 1 atm. -} - -BOOST_AUTO_TEST_CASE(WCONPROD_BHP_CMode) -{ - const Opm::Well::WellProductionProperties& p = - WCONPROD::properties(WCONPROD::bhp_CMODE()); - - BOOST_CHECK( p.hasProductionControl(Opm::Well::ProducerCMode::ORAT)); - BOOST_CHECK( p.hasProductionControl(Opm::Well::ProducerCMode::WRAT)); - BOOST_CHECK( p.hasProductionControl(Opm::Well::ProducerCMode::GRAT)); - BOOST_CHECK( !p.hasProductionControl(Opm::Well::ProducerCMode::LRAT)); - BOOST_CHECK( !p.hasProductionControl(Opm::Well::ProducerCMode::RESV)); - BOOST_CHECK( p.hasProductionControl(Opm::Well::ProducerCMode::THP)); - - BOOST_CHECK(p.controlMode == Opm::Well::ProducerCMode::BHP); - - BOOST_CHECK_EQUAL(true, p.hasProductionControl(Opm::Well::ProducerCMode::BHP)); - - BOOST_CHECK_EQUAL(p.VFPTableNumber, 8); - BOOST_CHECK_EQUAL(p.ALQValue, 13.); - BOOST_CHECK_EQUAL(p.THPTarget.get(), 10.); // 10 barsa - BOOST_CHECK_EQUAL(p.BHPTarget.get(), 20.); // 20 barsa - BOOST_CHECK_EQUAL(p.THPTarget.getSI(), 1000000.); // 10 barsa - BOOST_CHECK_EQUAL(p.BHPTarget.getSI(), 2000000.); // 20 barsa -} - - -BOOST_AUTO_TEST_CASE(BHP_CMODE) -{ - BOOST_CHECK_THROW( WCONHIST::properties(WCONHIST::all_specified_CMODE_THP()) , std::invalid_argument); - BOOST_CHECK_THROW( WCONPROD::properties(WCONPROD::all_specified_CMODE_BHP()) , std::invalid_argument); -} - - - - -BOOST_AUTO_TEST_CASE(CMODE_DEFAULT) { - auto unit_system = UnitSystem::newMETRIC(); - const Opm::Well::WellProductionProperties Pproperties(unit_system, "W"); - const Opm::Well::WellInjectionProperties Iproperties(unit_system, "W"); - - BOOST_CHECK( Pproperties.controlMode == Opm::Well::ProducerCMode::CMODE_UNDEFINED ); - BOOST_CHECK( Iproperties.controlMode == Opm::Well::InjectorCMode::CMODE_UNDEFINED ); -} - - - - -BOOST_AUTO_TEST_CASE(WELL_CONTROLS) { - auto unit_system = UnitSystem::newMETRIC(); - Opm::Well well("WELL", "GROUP", 0, 0, 0, 0, 1000, Opm::WellType(Opm::Phase::OIL), Opm::Well::ProducerCMode::CMODE_UNDEFINED, Opm::Connection::Order::DEPTH, unit_system, 0, 1.0, false, false, 0, Opm::Well::GasInflowEquation::STD); - Opm::Well::WellProductionProperties prod(unit_system, "OP1"); - Opm::SummaryState st(std::chrono::system_clock::now()); - well.productionControls(st); - - // Use a scalar FIELD variable - that should work; although it is a bit weird. - st.update("FUX", 1); - prod.OilRate = UDAValue("FUX"); - BOOST_CHECK_EQUAL(1, prod.controls(st, 0).oil_rate); - - - // Use the wellrate WUX for well OP1; the well is now added with - // SummaryState::update_well_var() and we should automatically fetch the - // correct well value. - prod.OilRate = UDAValue("WUX"); - st.update_well_var("OP1", "WUX", 10); - BOOST_CHECK_EQUAL(10, prod.controls(st, 0).oil_rate); -} - - -BOOST_AUTO_TEST_CASE(ExtraAccessors) { - Opm::Well inj("WELL1" , "GROUP", 0, 1, 0, 0, 0.0, Opm::WellType(Opm::Phase::OIL), Opm::Well::ProducerCMode::CMODE_UNDEFINED, Connection::Order::DEPTH, UnitSystem::newMETRIC(), 0, 1.0, false, false, 0, Opm::Well::GasInflowEquation::STD); - Opm::Well prod("WELL1" , "GROUP", 0, 1, 0, 0, 0.0, Opm::WellType(Opm::Phase::OIL), Opm::Well::ProducerCMode::CMODE_UNDEFINED, Connection::Order::DEPTH, UnitSystem::newMETRIC(), 0, 1.0, false, false, 0, Opm::Well::GasInflowEquation::STD); - - auto inj_props= std::make_shared(inj.getInjectionProperties()); - inj_props->VFPTableNumber = 100; - inj.updateInjection(inj_props); - - auto prod_props = std::make_shared( prod.getProductionProperties() ); - prod_props->VFPTableNumber = 200; - prod.updateProduction(prod_props); - - BOOST_CHECK_THROW(inj.alq_value(), std::runtime_error); - BOOST_CHECK_THROW(prod.temperature(), std::runtime_error); - BOOST_CHECK_EQUAL(inj.vfp_table_number(), 100); - BOOST_CHECK_EQUAL(prod.vfp_table_number(), 200); -} - -BOOST_AUTO_TEST_CASE(WELOPEN) { - Opm::Parser parser; - std::string input = - "START -- 0 \n" - "19 JUN 2007 / \n" - "SCHEDULE\n" - "DATES -- 1\n" - " 10 OKT 2008 / \n" - "/\n" - "WELSPECS\n" - " 'OP_1' 'OP' 9 9 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / \n" - "/\n" - "COMPDAT\n" - " 'OP_1' 9 9 1 1 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / \n" - " 'OP_1' 9 9 3 9 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / \n" - " 'OP_1' 9 9 2 2 'OPEN' 1* 46.825 0.311 4332.346 1* 1* 'X' 22.123 / \n" - "/\n" - "WELOPEN \n" - " 'OP_1' 'OPEN' /\n" - "/\n" - "DATES -- 2\n" - " 20 JAN 2010 / \n" - "/\n" - "WELOPEN \n" - " 'OP_1' 'SHUT' 0 0 0 2* /\n" - "/\n"; - - - auto deck = parser.parseString(input); - auto python = std::make_shared(); - Opm::EclipseGrid grid(10,10,10); - TableManager table ( deck ); - FieldPropsManager fp(deck, Phases{true, true, true}, grid, table); - Opm::Runspec runspec (deck); - Opm::Schedule schedule(deck, grid , fp, runspec, python); - { - const auto& op_1 = schedule.getWell("OP_1", 1); - BOOST_CHECK(op_1.getStatus() == Well::Status::OPEN); - } - { - const auto& op_1 = schedule.getWell("OP_1", 2); - BOOST_CHECK(op_1.getStatus() == Well::Status::SHUT); - } -} - - -BOOST_AUTO_TEST_CASE(WellTypeTest) { - BOOST_CHECK_THROW(Opm::WellType(0, 3), std::invalid_argument); - BOOST_CHECK_THROW(Opm::WellType(5, 3), std::invalid_argument); - BOOST_CHECK_THROW(Opm::WellType(3, 0), std::invalid_argument); - BOOST_CHECK_THROW(Opm::WellType(3, 5), std::invalid_argument); - - Opm::WellType wt1(1,1); - BOOST_CHECK(wt1.producer()); - BOOST_CHECK(!wt1.injector()); - BOOST_CHECK_EQUAL(wt1.ecl_wtype(), 1); - BOOST_CHECK_EQUAL(wt1.ecl_phase(), 1); - BOOST_CHECK(wt1.preferred_phase() == Phase::OIL); - BOOST_CHECK_THROW(wt1.injector_type(), std::invalid_argument); - - Opm::WellType wt4(4,3); - BOOST_CHECK(!wt4.producer()); - BOOST_CHECK(wt4.injector()); - BOOST_CHECK_EQUAL(wt4.ecl_wtype(), 4); - BOOST_CHECK_EQUAL(wt4.ecl_phase(), 3); - BOOST_CHECK(wt4.preferred_phase() == Phase::GAS); - BOOST_CHECK(wt4.injector_type() == InjectorType::GAS); - - BOOST_CHECK(wt4.update(true)); - BOOST_CHECK(!wt4.update(true)); - BOOST_CHECK(wt4.producer()); - BOOST_CHECK(!wt4.injector()); - BOOST_CHECK_EQUAL(wt4.ecl_wtype(), 1); - BOOST_CHECK_EQUAL(wt4.ecl_phase(), 3); - BOOST_CHECK(wt4.preferred_phase() == Phase::GAS); - - Opm::WellType wtp(false, Phase::WATER); - BOOST_CHECK(!wtp.producer()); - BOOST_CHECK(wtp.injector()); - BOOST_CHECK_EQUAL(wtp.ecl_wtype(), 3); - BOOST_CHECK_EQUAL(wtp.ecl_phase(), 2); - BOOST_CHECK(wtp.preferred_phase() == Phase::WATER); - BOOST_CHECK(wtp.injector_type() == InjectorType::WATER); - - wtp.update( InjectorType::GAS ); - BOOST_CHECK_EQUAL(wtp.ecl_wtype(), 4); - BOOST_CHECK_EQUAL(wtp.ecl_phase(), 2); - BOOST_CHECK(wtp.preferred_phase() == Phase::WATER); - BOOST_CHECK(wtp.injector_type() == InjectorType::GAS); -} - -BOOST_AUTO_TEST_CASE(Injector_Control_Mode) { - using IMode = ::Opm::Well::InjectorCMode; - using IType = ::Opm::InjectorType; - using WStat = ::Opm::Well::Status; - - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::GRUP, IType::GAS, WStat::OPEN), -1); - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::GRUP, IType::GAS, WStat::SHUT), 0); - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::GRUP, IType::GAS, WStat::STOP), -1); - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::GRUP, IType::GAS, WStat::AUTO), -1); - - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::GRUP, IType::WATER, WStat::OPEN), -1); - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::GRUP, IType::WATER, WStat::SHUT), 0); - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::GRUP, IType::WATER, WStat::STOP), -1); - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::GRUP, IType::WATER, WStat::AUTO), -1); - - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::GRUP, IType::MULTI, WStat::OPEN), -1); - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::GRUP, IType::MULTI, WStat::SHUT), 0); - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::GRUP, IType::MULTI, WStat::STOP), -1); - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::GRUP, IType::MULTI, WStat::AUTO), -1); - - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::GRUP, IType::OIL, WStat::OPEN), -1); - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::GRUP, IType::OIL, WStat::SHUT), 0); - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::GRUP, IType::OIL, WStat::STOP), -1); - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::GRUP, IType::OIL, WStat::AUTO), -1); - - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::RATE, IType::OIL, WStat::OPEN), 1); - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::RATE, IType::OIL, WStat::SHUT), 0); - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::RATE, IType::OIL, WStat::STOP), 1); - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::RATE, IType::OIL, WStat::AUTO), 1); - - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::RATE, IType::WATER, WStat::OPEN), 2); - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::RATE, IType::WATER, WStat::SHUT), 0); - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::RATE, IType::WATER, WStat::STOP), 2); - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::RATE, IType::WATER, WStat::AUTO), 2); - - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::RATE, IType::GAS, WStat::OPEN), 3); - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::RATE, IType::GAS, WStat::SHUT), 0); - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::RATE, IType::GAS, WStat::STOP), 3); - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::RATE, IType::GAS, WStat::AUTO), 3); - - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::RATE, IType::MULTI, WStat::OPEN), -10); - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::RATE, IType::MULTI, WStat::SHUT), 0); - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::RATE, IType::MULTI, WStat::STOP), -10); - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::RATE, IType::MULTI, WStat::AUTO), -10); - - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::RESV, IType::GAS, WStat::OPEN), 5); - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::RESV, IType::GAS, WStat::SHUT), 0); - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::RESV, IType::GAS, WStat::STOP), 5); - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::RESV, IType::GAS, WStat::AUTO), 5); - - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::RESV, IType::WATER, WStat::OPEN), 5); - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::RESV, IType::WATER, WStat::SHUT), 0); - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::RESV, IType::WATER, WStat::STOP), 5); - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::RESV, IType::WATER, WStat::AUTO), 5); - - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::RESV, IType::MULTI, WStat::OPEN), 5); - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::RESV, IType::MULTI, WStat::SHUT), 0); - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::RESV, IType::MULTI, WStat::STOP), 5); - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::RESV, IType::MULTI, WStat::AUTO), 5); - - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::RESV, IType::OIL, WStat::OPEN), 5); - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::RESV, IType::OIL, WStat::SHUT), 0); - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::RESV, IType::OIL, WStat::STOP), 5); - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::RESV, IType::OIL, WStat::AUTO), 5); - - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::THP, IType::GAS, WStat::OPEN), 6); - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::THP, IType::GAS, WStat::SHUT), 0); - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::THP, IType::GAS, WStat::STOP), 6); - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::THP, IType::GAS, WStat::AUTO), 6); - - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::THP, IType::WATER, WStat::OPEN), 6); - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::THP, IType::WATER, WStat::SHUT), 0); - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::THP, IType::WATER, WStat::STOP), 6); - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::THP, IType::WATER, WStat::AUTO), 6); - - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::THP, IType::MULTI, WStat::OPEN), 6); - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::THP, IType::MULTI, WStat::SHUT), 0); - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::THP, IType::MULTI, WStat::STOP), 6); - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::THP, IType::MULTI, WStat::AUTO), 6); - - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::THP, IType::OIL, WStat::OPEN), 6); - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::THP, IType::OIL, WStat::SHUT), 0); - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::THP, IType::OIL, WStat::STOP), 6); - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::THP, IType::OIL, WStat::AUTO), 6); - - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::BHP, IType::GAS, WStat::OPEN), 7); - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::BHP, IType::GAS, WStat::SHUT), 0); - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::BHP, IType::GAS, WStat::STOP), 7); - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::BHP, IType::GAS, WStat::AUTO), 7); - - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::BHP, IType::WATER, WStat::OPEN), 7); - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::BHP, IType::WATER, WStat::SHUT), 0); - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::BHP, IType::WATER, WStat::STOP), 7); - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::BHP, IType::WATER, WStat::AUTO), 7); - - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::BHP, IType::MULTI, WStat::OPEN), 7); - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::BHP, IType::MULTI, WStat::SHUT), 0); - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::BHP, IType::MULTI, WStat::STOP), 7); - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::BHP, IType::MULTI, WStat::AUTO), 7); - - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::BHP, IType::OIL, WStat::OPEN), 7); - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::BHP, IType::OIL, WStat::SHUT), 0); - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::BHP, IType::OIL, WStat::STOP), 7); - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::BHP, IType::OIL, WStat::AUTO), 7); - - BOOST_CHECK_EQUAL(eclipseControlMode(IMode::CMODE_UNDEFINED, IType::WATER, WStat::SHUT), 0); - BOOST_CHECK_EQUAL(eclipseControlMode(static_cast(1729), IType::WATER, WStat::SHUT), 0); - BOOST_CHECK_EQUAL(eclipseControlMode(static_cast(1729), IType::WATER, WStat::STOP), -10); // Unknown combination - BOOST_CHECK_EQUAL(eclipseControlMode(static_cast(1729), IType::WATER, WStat::OPEN), -10); // Unknown combination -} - -BOOST_AUTO_TEST_CASE(Producer_Control_Mode) { - using PMode = ::Opm::Well::ProducerCMode; - using WStat = ::Opm::Well::Status; - - BOOST_CHECK_EQUAL(eclipseControlMode(PMode::GRUP, WStat::OPEN), -1); - BOOST_CHECK_EQUAL(eclipseControlMode(PMode::GRUP, WStat::STOP), -1); - BOOST_CHECK_EQUAL(eclipseControlMode(PMode::GRUP, WStat::SHUT), 0); - BOOST_CHECK_EQUAL(eclipseControlMode(PMode::GRUP, WStat::AUTO), -1); - - BOOST_CHECK_EQUAL(eclipseControlMode(PMode::ORAT, WStat::OPEN), 1); - BOOST_CHECK_EQUAL(eclipseControlMode(PMode::ORAT, WStat::STOP), 1); - BOOST_CHECK_EQUAL(eclipseControlMode(PMode::ORAT, WStat::SHUT), 0); - BOOST_CHECK_EQUAL(eclipseControlMode(PMode::ORAT, WStat::AUTO), 1); - - BOOST_CHECK_EQUAL(eclipseControlMode(PMode::WRAT, WStat::OPEN), 2); - BOOST_CHECK_EQUAL(eclipseControlMode(PMode::WRAT, WStat::STOP), 2); - BOOST_CHECK_EQUAL(eclipseControlMode(PMode::WRAT, WStat::SHUT), 0); - BOOST_CHECK_EQUAL(eclipseControlMode(PMode::WRAT, WStat::AUTO), 2); - - BOOST_CHECK_EQUAL(eclipseControlMode(PMode::GRAT, WStat::OPEN), 3); - BOOST_CHECK_EQUAL(eclipseControlMode(PMode::GRAT, WStat::STOP), 3); - BOOST_CHECK_EQUAL(eclipseControlMode(PMode::GRAT, WStat::SHUT), 0); - BOOST_CHECK_EQUAL(eclipseControlMode(PMode::GRAT, WStat::AUTO), 3); - - BOOST_CHECK_EQUAL(eclipseControlMode(PMode::LRAT, WStat::OPEN), 4); - BOOST_CHECK_EQUAL(eclipseControlMode(PMode::LRAT, WStat::STOP), 4); - BOOST_CHECK_EQUAL(eclipseControlMode(PMode::LRAT, WStat::SHUT), 0); - BOOST_CHECK_EQUAL(eclipseControlMode(PMode::LRAT, WStat::AUTO), 4); - - BOOST_CHECK_EQUAL(eclipseControlMode(PMode::RESV, WStat::OPEN), 5); - BOOST_CHECK_EQUAL(eclipseControlMode(PMode::RESV, WStat::STOP), 5); - BOOST_CHECK_EQUAL(eclipseControlMode(PMode::RESV, WStat::SHUT), 0); - BOOST_CHECK_EQUAL(eclipseControlMode(PMode::RESV, WStat::AUTO), 5); - - BOOST_CHECK_EQUAL(eclipseControlMode(PMode::THP, WStat::OPEN), 6); - BOOST_CHECK_EQUAL(eclipseControlMode(PMode::THP, WStat::STOP), 6); - BOOST_CHECK_EQUAL(eclipseControlMode(PMode::THP, WStat::SHUT), 0); - BOOST_CHECK_EQUAL(eclipseControlMode(PMode::THP, WStat::AUTO), 6); - - BOOST_CHECK_EQUAL(eclipseControlMode(PMode::BHP, WStat::OPEN), 7); - BOOST_CHECK_EQUAL(eclipseControlMode(PMode::BHP, WStat::STOP), 7); - BOOST_CHECK_EQUAL(eclipseControlMode(PMode::BHP, WStat::SHUT), 0); - BOOST_CHECK_EQUAL(eclipseControlMode(PMode::BHP, WStat::AUTO), 7); - - BOOST_CHECK_EQUAL(eclipseControlMode(PMode::CRAT, WStat::OPEN), 9); - BOOST_CHECK_EQUAL(eclipseControlMode(PMode::CRAT, WStat::STOP), 9); - BOOST_CHECK_EQUAL(eclipseControlMode(PMode::CRAT, WStat::SHUT), 0); - BOOST_CHECK_EQUAL(eclipseControlMode(PMode::CRAT, WStat::AUTO), 9); - - BOOST_CHECK_EQUAL(eclipseControlMode(PMode::NONE, WStat::OPEN), -10); - BOOST_CHECK_EQUAL(eclipseControlMode(PMode::NONE, WStat::STOP), -10); - BOOST_CHECK_EQUAL(eclipseControlMode(PMode::NONE, WStat::SHUT), 0); - BOOST_CHECK_EQUAL(eclipseControlMode(PMode::NONE, WStat::AUTO), -10); - - BOOST_CHECK_EQUAL(eclipseControlMode(PMode::CMODE_UNDEFINED, WStat::OPEN), -10); - BOOST_CHECK_EQUAL(eclipseControlMode(PMode::CMODE_UNDEFINED, WStat::STOP), -10); - BOOST_CHECK_EQUAL(eclipseControlMode(PMode::CMODE_UNDEFINED, WStat::SHUT), 0); - BOOST_CHECK_EQUAL(eclipseControlMode(PMode::CMODE_UNDEFINED, WStat::AUTO), -10); - - BOOST_CHECK_EQUAL(eclipseControlMode(static_cast(271828), WStat::OPEN), -10); - BOOST_CHECK_EQUAL(eclipseControlMode(static_cast(271828), WStat::STOP), -10); - BOOST_CHECK_EQUAL(eclipseControlMode(static_cast(271828), WStat::SHUT), 0); - BOOST_CHECK_EQUAL(eclipseControlMode(static_cast(271828), WStat::AUTO), -10); -} - - -BOOST_AUTO_TEST_CASE(WPIMULT) { - Opm::Parser parser; - std::string input = R"( -START -- 0 -19 JUN 2007 / - -REGIONS - -PVTNUM - 1000*77 / - -SCHEDULE - -WELSPECS - 'OP_1' 'OP' 9 9 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / - 'OP_2' 'OP' 9 9 1* 'OIL' 1* 1* 1* 1* 66 / -/ -COMPDAT - 'OP_1' 9 9 1 1 'OPEN' 1* 1.0 0.311 3047.839 1* 1* 'X' 22.100 / - 'OP_1' 9 9 2 2 'OPEN' 1* 2.0 0.311 3047.839 1* 1* 'X' 22.100 / - 'OP_1' 9 9 3 3 'OPEN' 1* 3.0 0.311 4332.346 1* 1* 'X' 22.123 / -/ -DATES -- 1 - 20 JAN 2010 / -/ - --- Should not hit any connections -WPIMULT - 'OP_1' 2 5 / -/ - -DATES -- 2 - 20 FEB 2010 / -/ - --- -WPIMULT - 'OP_1' 2 9 9 1 / -/ - -DATES -- 3 - 20 MAR 2010 / -/ - --- -WPIMULT - 'OP_1' 2 9 9 2 / -/ - -DATES -- 4 - 20 APR 2010 / -/ - --- -WPIMULT - 'OP_1' 2 9 9 3 / -/ - -DATES -- 5 - 20 JUN 2010 / -/ - --- -WPIMULT - 'OP_1' 0.5 / -/ - -)"; - - - auto deck = parser.parseString(input); - const auto& units = deck.getActiveUnitSystem(); - auto python = std::make_shared(); - Opm::EclipseGrid grid(10,10,10); - TableManager table ( deck ); - FieldPropsManager fp(deck, Phases{true, true, true}, grid, table); - Opm::Runspec runspec (deck); - Opm::Schedule schedule(deck, grid , fp, runspec, python); - const auto CF0 = units.to_si(Opm::UnitSystem::measure::transmissibility, 1.0); - { - const auto& well = schedule.getWell("OP_1", 0); - const auto& connections = well.getConnections(); - BOOST_CHECK_CLOSE( connections[0].CF(), 1.0 * CF0, 1e-6); - BOOST_CHECK_CLOSE( connections[1].CF(), 2.0 * CF0, 1e-6); - BOOST_CHECK_CLOSE( connections[2].CF(), 3.0 * CF0, 1e-6); - BOOST_CHECK_EQUAL( well.pvt_table_number(), 77); - - const auto& well2 = schedule.getWell("OP_2", 0); - BOOST_CHECK_EQUAL( well2.pvt_table_number(), 66); - } - { - const auto& well = schedule.getWell("OP_1", 1); - const auto& connections = well.getConnections(); - BOOST_CHECK_CLOSE( connections[0].CF(), 1.0 * CF0, 1e-6); - BOOST_CHECK_CLOSE( connections[1].CF(), 2.0 * CF0, 1e-6); - BOOST_CHECK_CLOSE( connections[2].CF(), 3.0 * CF0, 1e-6); - } - { - const auto& well = schedule.getWell("OP_1", 2); - const auto& connections = well.getConnections(); - BOOST_CHECK_CLOSE( connections[0].CF(), 2.0 * CF0, 1e-6); - BOOST_CHECK_CLOSE( connections[1].CF(), 2.0 * CF0, 1e-6); - BOOST_CHECK_CLOSE( connections[2].CF(), 3.0 * CF0, 1e-6); - } - { - const auto& well = schedule.getWell("OP_1", 3); - const auto& connections = well.getConnections(); - BOOST_CHECK_CLOSE( connections[0].CF(), 2.0 * CF0, 1e-6); - BOOST_CHECK_CLOSE( connections[1].CF(), 4.0 * CF0, 1e-6); - BOOST_CHECK_CLOSE( connections[2].CF(), 3.0 * CF0, 1e-6); - } - { - const auto& well = schedule.getWell("OP_1", 4); - const auto& connections = well.getConnections(); - BOOST_CHECK_CLOSE( connections[0].CF(), 2.0 * CF0, 1e-6); - BOOST_CHECK_CLOSE( connections[1].CF(), 4.0 * CF0, 1e-6); - BOOST_CHECK_CLOSE( connections[2].CF(), 6.0 * CF0, 1e-6); - } - { - const auto& well = schedule.getWell("OP_1", 5); - const auto& connections = well.getConnections(); - BOOST_CHECK_CLOSE( connections[0].CF(), 1.0 * CF0, 1e-6); - BOOST_CHECK_CLOSE( connections[1].CF(), 2.0 * CF0, 1e-6); - BOOST_CHECK_CLOSE( connections[2].CF(), 3.0 * CF0, 1e-6); - } -} - - diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/WellTracerTests.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/WellTracerTests.cpp deleted file mode 100644 index 0cedfc7d0c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/WellTracerTests.cpp +++ /dev/null @@ -1,178 +0,0 @@ -/* - Copyright 2018 NORCE - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#define BOOST_TEST_MODULE WellTracerTests - -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -using namespace Opm; - -static Deck createDeckWithOutTracer() { - Opm::Parser parser; - std::string input = - "GRID\n" - "PERMX\n" - " 1000*0.25/\n" - "COPY\n" - " PERMX PERMY /\n" - " PERMX PERMZ /\n" - "/\n" - "SCHEDULE\n" - "WELSPECS\n" - " 'W_1' 'OP' 2 2 1* \'OIL\' 7* / \n" - "/\n" - "COMPDAT\n" - " 'W_1' 2* 1 1 'OPEN' / \n" - "/\n" - "WCONINJE\n" - " 'W_1' 'WATER' 'OPEN' 'BHP' 1 2 3/\n/\n"; - - return parser.parseString(input); -} - - -static Deck createDeckWithDynamicWTRACER() { - Opm::Parser parser; - std::string input = - "START -- 0 \n" - "1 JAN 2000 / \n" - "GRID\n" - "PERMX\n" - " 1000*0.25/\n" - "COPY\n" - " PERMX PERMY /\n" - " PERMX PERMZ /\n" - "/\n" - "SCHEDULE\n" - "WELSPECS\n" - " 'W_1' 'OP' 1 1 1* \'GAS\' 7* / \n" - "/\n" - "COMPDAT\n" - " 'W_1' 2* 1 1 'OPEN' / \n" - "/\n" - "WCONINJE\n" - " 'W_1' 'GAS' 'OPEN' 'BHP' 1 2 3/\n/\n" - "DATES -- 1\n" - " 1 MAY 2000 / \n" - "/\n" - "WTRACER\n" - " 'W_1' 'I1' 1 / \n " - " 'W_1' 'I2' 1 / \n " - "/\n" - "DATES -- 2, 3\n" - " 1 JUL 2000 / \n" - " 1 AUG 2000 / \n" - "/\n" - "WTRACER\n" - " 'W_1' 'I1' 0 / \n " - "/\n" - "DATES -- 4\n" - " 1 SEP 2000 / \n" - "/\n"; - - return parser.parseString(input); -} - -static Deck createDeckWithTracerInProducer() { - Opm::Parser parser; - std::string input = - "START -- 0 \n" - "1 JAN 2000 / \n" - "GRID\n" - "PERMX\n" - " 1000*0.25/\n" - "COPY\n" - " PERMX PERMY /\n" - " PERMX PERMZ /\n" - "/\n" - "SCHEDULE\n" - "WELSPECS\n" - " 'W_1' 'OP' 1 1 1* \'GAS\' 7* / \n" - "/\n" - "COMPDAT\n" - " 'W_1' 2* 1 1 'OPEN' / \n" - "/\n" - "WCONPROD\n" - "'W_1' 'OPEN' 'ORAT' 20000 4* 1000 /\n" - "WTRACER\n" - " 'W_1' 'I1' 1 / \n " - " 'W_1' 'I2' 1 / \n " - "/\n"; - - return parser.parseString(input); -} - - -BOOST_AUTO_TEST_CASE(TestNoTracer) { - auto deck = createDeckWithOutTracer(); - EclipseGrid grid(10,10,10); - TableManager table ( deck ); - FieldPropsManager fp(deck, Phases{true, true, true}, grid, table); - auto python = std::make_shared(); - Runspec runspec ( deck ); - Schedule schedule(deck, grid , fp, runspec, python); - BOOST_CHECK(!deck.hasKeyword("WTRACER")); -} - - -BOOST_AUTO_TEST_CASE(TestDynamicWTRACER) { - auto deck = createDeckWithDynamicWTRACER(); - auto python = std::make_shared(); - EclipseGrid grid(10,10,10); - TableManager table ( deck ); - FieldPropsManager fp( deck, Phases{true, true, true}, grid, table); - Runspec runspec ( deck ); - Schedule schedule(deck, grid , fp, runspec, python); - BOOST_CHECK(deck.hasKeyword("WTRACER")); - const auto& keyword = deck.getKeyword("WTRACER"); - BOOST_CHECK_EQUAL(keyword.size(),1); - const auto& record = keyword.getRecord(0); - const std::string& well_name = record.getItem("WELL").getTrimmedString(0); - BOOST_CHECK_EQUAL(well_name, "W_1"); - BOOST_CHECK_EQUAL(schedule.getWell("W_1", 0).getTracerProperties().getConcentration("I1"),0); //default 0 - BOOST_CHECK_EQUAL(schedule.getWell("W_1", 0).getTracerProperties().getConcentration("I2"),0); //default 0 - BOOST_CHECK_EQUAL(schedule.getWell("W_1", 1).getTracerProperties().getConcentration("I1"),1); - BOOST_CHECK_EQUAL(schedule.getWell("W_1", 2).getTracerProperties().getConcentration("I1"),1); - BOOST_CHECK_EQUAL(schedule.getWell("W_1", 4).getTracerProperties().getConcentration("I1"),0); - BOOST_CHECK_EQUAL(schedule.getWell("W_1", 4).getTracerProperties().getConcentration("I2"),1); -} - - -BOOST_AUTO_TEST_CASE(TestTracerInProducerTHROW) { - auto deck = createDeckWithTracerInProducer(); - auto python = std::make_shared(); - EclipseGrid grid(10,10,10); - TableManager table ( deck ); - FieldPropsManager fp( deck, Phases{true, true, true}, grid, table); - Runspec runspec ( deck ); - - BOOST_CHECK_THROW(Schedule(deck, grid, fp, runspec, python), std::invalid_argument); -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/config/directory1/Bpr b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/config/directory1/Bpr deleted file mode 100644 index adf3de67df..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/config/directory1/Bpr +++ /dev/null @@ -1,8 +0,0 @@ -{ - "name" : "BPR", - "sections":["SUMMARY"], - "items" : - [{"name": "I" , "size_type" : "SINGLE" , "value_type" : "INT"}, - {"name": "J" , "size_type" : "SINGLE" , "value_type" : "INT"}, - {"name": "K" , "size_type" : "SINGLE" , "value_type" : "INT"}] -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/config/directory1/WWCT b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/config/directory1/WWCT deleted file mode 100644 index c7c324bd78..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/config/directory1/WWCT +++ /dev/null @@ -1,5 +0,0 @@ -{ - "name" : "WWCT", - "sections":["SUMMARY"], - "items" : [{"name" : "wells" , "size_type" : "ALL" , "value_type" : "STRING"}] -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/config/directory1/subdir/DIMENS b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/config/directory1/subdir/DIMENS deleted file mode 100644 index b3f6fddf9a..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/config/directory1/subdir/DIMENS +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name" : "DIMENS", - "sections":["RUNSPEC"], - "size" : 1, - "items" : - [{"name": "NX" , "size_type" : "SINGLE" , "value_type" : "INT"}, - {"name": "NY" , "size_type" : "SINGLE" , "value_type" : "INT"}, - {"name": "NZ" , "size_type" : "SINGLE" , "value_type" : "INT"}] -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/ACTION/ACTION.txt b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/ACTION/ACTION.txt deleted file mode 100644 index 3f56f40649..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/ACTION/ACTION.txt +++ /dev/null @@ -1,15 +0,0 @@ - -DIMENS -- /This is flagged as IGNORE_WARNING - and should give a warning at line: 6 - 10 10 10 / - -WCONHIST - 'OP_1' 'OPEN' 'ORAT' 4000.000 4.000 1.46402E+006 5* / - 'OP_2' 'OPEN' 'ORAT' 7998.000 2.000 1461075.000 5* / - 'OP_3' 'OPEN' 'ORAT' 7999.000 1.000 1471824.000 1 0.25 0.25 0.25 1* / -/ - - - - - - diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/ACTION/ACTION_EXCEPTION.txt b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/ACTION/ACTION_EXCEPTION.txt deleted file mode 100644 index cb22b6c18b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/ACTION/ACTION_EXCEPTION.txt +++ /dev/null @@ -1,8 +0,0 @@ -THROW - -- This keyword should raise an exception in the parser - Some data / -/ - - - - diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/BOX/BOXTEST1 b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/BOX/BOXTEST1 deleted file mode 100644 index 10e381b87b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/BOX/BOXTEST1 +++ /dev/null @@ -1,225 +0,0 @@ -RUNSPEC - -DIMENS - 10 10 10 / - -GRID -DX -1000*1 / -DY -1000*1 / -DZ -1000*1 / -TOPS -100*1 / - -PORO - 1000*0.15 / - -NTG - 1000*1 / - -MULTX - 1000*4 / - -OPERATE - NTG 1 10 1 5 1 1 'MULTA' MULTX 2 0.50 / -- NTG = MULTX * 2 + 0.50 - NTG 1 10 6 10 1 1 'POLY' MULTX 2 0.50 / -- NTG = NTG + 2 * MULTX^0.5 --- - NTG 1 10 1 5 2 2 'COPY' MULTX / -- NTG = MULTX - NTG 1 10 6 10 2 2 'MINLIM' MULTX 2 / -- NTG = max(swat, 2 ) --- - NTG 1 10 1 5 3 3 'MAXLIM' MULTX 2 / -- NTG = min(swat, 2 ) -/ - -MAXVALUE -NTG 0.5 1 10 1 5 4 4 / -- NTG <= 0.5 -/ - -MINVALUE -NTG 1.5 1 10 1 5 5 5 / -- NTG >= 1.5 -/ - -FLUXNUM - 1000*1 / - -PERMX - 1000*1 / - -COPY - PERMX PERMZ / - PERMX PERMY / -/ - -ADD - PERMY 1 / -/ - -MULTIPLY - PERMZ 0.25 / -/ - -EQUALS - PORO 0.25 / -/ - -EDIT - -OIL -GAS - -TITLE -The title - -START -8 MAR 1998 / - -PROPS - -REGIONS - - -SATNUM - 1000*2 / - -PVTNUM - 1000*77 / - -COPY - SATNUM FIPNUM / -/ - -BOX - 1 2 1 2 1 2 / - -SATNUM - 8*10 / - - -COPY - SATNUM FIPNUM / -/ - -ENDBOX - -MULTIPLY - FIPNUM 2 / -/ - -BOX - 1 2 1 2 1 2 / - -MULTIPLY - FIPNUM 2 / -/ - -ENDBOX - - -EQUALS - PVTNUM 0 1 10 1 10 1 1 / - PVTNUM 1 1 10 1 10 2 2 / - PVTNUM 2 1 10 1 10 3 3 / - PVTNUM 3 1 10 1 10 4 4 / - PVTNUM 4 1 10 1 10 5 5 / - PVTNUM 5 1 10 1 10 6 6 / - PVTNUM 6 1 10 1 10 7 7 / - PVTNUM 7 1 10 1 10 8 8 / - PVTNUM 8 1 10 1 10 9 9 / - PVTNUM 9 1 10 1 10 10 10 / -/ - -EQUALS - EQLNUM 77 / -/ - -ADD - EQLNUM 0 1 10 1 10 1 1 / - EQLNUM 1 1 10 1 10 2 2 / - EQLNUM 2 1 10 1 10 3 3 / - EQLNUM 3 1 10 1 10 4 4 / - EQLNUM 4 1 10 1 10 5 5 / - EQLNUM 5 1 10 1 10 6 6 / - EQLNUM 6 1 10 1 10 7 7 / - EQLNUM 7 1 10 1 10 8 8 / - EQLNUM 8 1 10 1 10 9 9 / - EQLNUM 9 1 10 1 10 10 10 / -/ - - - - -BOX - 1 10 1 10 1 1 / - -ADD - EQLNUM 0 / -/ - -BOX - 1 10 1 10 2 2 / - -ADD - EQLNUM 1 / -/ - -BOX - 1 10 1 10 3 3 / - -ADD - EQLNUM 2 / -/ - -BOX - 1 10 1 10 4 4 / - -ADD - EQLNUM 3 / -/ - -BOX - 1 10 1 10 5 5 / - -ADD - EQLNUM 4 / -/ - -BOX - 1 10 1 10 6 6 / - -ADD - EQLNUM 5 / -/ - -BOX - 1 10 1 10 7 7 / - -ADD - EQLNUM 6 / -/ - -BOX - 1 10 1 10 8 8 / - -ADD - EQLNUM 7 / -/ - -BOX - 1 10 1 10 9 9 / - -ADD - EQLNUM 8 / -/ - -BOX - 1 10 1 10 10 10 / - -ADD - EQLNUM 9 / -/ - -SOLUTION - -SCHEDULE - diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/DEBUG/DEBUG.DATA b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/DEBUG/DEBUG.DATA deleted file mode 100644 index c2a2e63c84..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/DEBUG/DEBUG.DATA +++ /dev/null @@ -1,39 +0,0 @@ -RUNSPEC - -DEBUG -/ - -GRID - -DEBUG -0 / - -EDIT - -DEBUG -0 1 6*0 1 / - -PROPS - -DEBUG -78*0 / - -REGIONS - -DEBUG -87*1 / - -SOLUTION - -DEBUG -10*1 10*0 / - -SUMMARY - -DEBUG -/ - -SCHEDULE - -DEBUG -10*0 12*1 10*0 / diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/DENSITY/DENSITY1 b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/DENSITY/DENSITY1 deleted file mode 100644 index 38effae900..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/DENSITY/DENSITY1 +++ /dev/null @@ -1,9 +0,0 @@ -FIELD - -TABDIMS - 1 2 30 24 10 20 / - -DENSITY - 500 1000 1 / - 5000 10000 10 / - diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/EDITNNC/EDITNNC.DATA b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/EDITNNC/EDITNNC.DATA deleted file mode 100644 index 7eb7a744a1..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/EDITNNC/EDITNNC.DATA +++ /dev/null @@ -1,43 +0,0 @@ -RUNSPEC - -OIL -GAS -WATER - - -DIMENS - 10 10 1 / - -GRID - -DXV -10*1000.0 -/ - -DYV -10*1000.0 -/ - -DZ -100*20.0 -/ - -TOPS -100*10 -/ - -PORO - 100*0.15 / - -EDIT - -EDITNNC -3 1 1 1 1 1 0.1 / -1 1 1 1 2 1 0.01 / -2 1 1 2 3 1 0.1 / -/ - -EDITNNC -1 1 1 2 1 1 0.1 / -2 1 1 2 3 1 0.1 / -/ diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/END/END1.txt b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/END/END1.txt deleted file mode 100644 index e527913e37..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/END/END1.txt +++ /dev/null @@ -1,14 +0,0 @@ -OIL --- Comment - -END - -- This keyword should cause the parser to terminate -/ - -GAS --- Comment - - - - - diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/END/ENDINC1.txt b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/END/ENDINC1.txt deleted file mode 100644 index ad24d2fbe8..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/END/ENDINC1.txt +++ /dev/null @@ -1,14 +0,0 @@ -OIL --- Comment - -ENDINC - -- This keyword should cause the parser to terminate - - -GAS --- Comment - - - - - diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/EQUIL/EQUIL1 b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/EQUIL/EQUIL1 deleted file mode 100644 index 6350df2b3f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/EQUIL/EQUIL1 +++ /dev/null @@ -1,8 +0,0 @@ -EQLDIMS - 3 100 20 1 1 / - - -EQUIL - 2469 382.4 1705.0 0.0 500 0.0 1 1 20 / - 2469 382.4 1000.0 0.0 500 0.0 1 1 20 / - 2469 382.4 3000.0 0.0 500 0.0 1 1 20 / diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/GRID/CORNERPOINT.DATA b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/GRID/CORNERPOINT.DATA deleted file mode 100644 index b793a0039b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/GRID/CORNERPOINT.DATA +++ /dev/null @@ -1,1199 +0,0 @@ -RUNSPEC - -DIMENS - 10 10 5 / - -GRID - -COORD - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.20000000E+02 0.10000000E+02 0.00000000E+00 - 0.00000000E+00 0.10000000E+02 0.00000000E+00 0.20000000E+02 - 0.20000000E+02 0.00000000E+00 0.00000000E+00 0.20000000E+02 - 0.00000000E+00 0.20000000E+02 0.30000000E+02 0.00000000E+00 - 0.00000000E+00 0.30000000E+02 0.00000000E+00 0.20000000E+02 - 0.40000000E+02 0.00000000E+00 0.00000000E+00 0.40000000E+02 - 0.00000000E+00 0.20000000E+02 0.50000000E+02 0.00000000E+00 - 0.00000000E+00 0.50000000E+02 0.00000000E+00 0.20000000E+02 - 0.60000000E+02 0.00000000E+00 0.00000000E+00 0.60000000E+02 - 0.00000000E+00 0.20000000E+02 0.70000000E+02 0.00000000E+00 - 0.00000000E+00 0.70000000E+02 0.00000000E+00 0.20000000E+02 - 0.80000000E+02 0.00000000E+00 0.00000000E+00 0.80000000E+02 - 0.00000000E+00 0.20000000E+02 0.90000000E+02 0.00000000E+00 - 0.00000000E+00 0.90000000E+02 0.00000000E+00 0.20000000E+02 - 0.10000000E+03 0.00000000E+00 0.00000000E+00 0.10000000E+03 - 0.00000000E+00 0.20000000E+02 0.00000000E+00 0.12000000E+02 - 0.00000000E+00 0.00000000E+00 0.12000000E+02 0.20000000E+02 - 0.10000000E+02 0.12000000E+02 0.00000000E+00 0.10000000E+02 - 0.12000000E+02 0.20000000E+02 0.20000000E+02 0.12000000E+02 - 0.00000000E+00 0.20000000E+02 0.12000000E+02 0.20000000E+02 - 0.30000000E+02 0.12000000E+02 0.00000000E+00 0.30000000E+02 - 0.12000000E+02 0.20000000E+02 0.40000000E+02 0.12000000E+02 - 0.00000000E+00 0.40000000E+02 0.12000000E+02 0.20000000E+02 - 0.50000000E+02 0.12000000E+02 0.00000000E+00 0.50000000E+02 - 0.12000000E+02 0.20000000E+02 0.60000000E+02 0.12000000E+02 - 0.00000000E+00 0.60000000E+02 0.12000000E+02 0.20000000E+02 - 0.70000000E+02 0.12000000E+02 0.00000000E+00 0.70000000E+02 - 0.12000000E+02 0.20000000E+02 0.80000000E+02 0.12000000E+02 - 0.00000000E+00 0.80000000E+02 0.12000000E+02 0.20000000E+02 - 0.90000000E+02 0.12000000E+02 0.00000000E+00 0.90000000E+02 - 0.12000000E+02 0.20000000E+02 0.10000000E+03 0.12000000E+02 - 0.00000000E+00 0.10000000E+03 0.12000000E+02 0.20000000E+02 - 0.00000000E+00 0.24000000E+02 0.00000000E+00 0.00000000E+00 - 0.24000000E+02 0.20000000E+02 0.10000000E+02 0.24000000E+02 - 0.00000000E+00 0.10000000E+02 0.24000000E+02 0.20000000E+02 - 0.20000000E+02 0.24000000E+02 0.00000000E+00 0.20000000E+02 - 0.24000000E+02 0.20000000E+02 0.30000000E+02 0.24000000E+02 - 0.00000000E+00 0.30000000E+02 0.24000000E+02 0.20000000E+02 - 0.40000000E+02 0.24000000E+02 0.00000000E+00 0.40000000E+02 - 0.24000000E+02 0.20000000E+02 0.50000000E+02 0.24000000E+02 - 0.00000000E+00 0.50000000E+02 0.24000000E+02 0.20000000E+02 - 0.60000000E+02 0.24000000E+02 0.00000000E+00 0.60000000E+02 - 0.24000000E+02 0.20000000E+02 0.70000000E+02 0.24000000E+02 - 0.00000000E+00 0.70000000E+02 0.24000000E+02 0.20000000E+02 - 0.80000000E+02 0.24000000E+02 0.00000000E+00 0.80000000E+02 - 0.24000000E+02 0.20000000E+02 0.90000000E+02 0.24000000E+02 - 0.00000000E+00 0.90000000E+02 0.24000000E+02 0.20000000E+02 - 0.10000000E+03 0.24000000E+02 0.00000000E+00 0.10000000E+03 - 0.24000000E+02 0.20000000E+02 0.00000000E+00 0.36000000E+02 - 0.00000000E+00 0.00000000E+00 0.36000000E+02 0.20000000E+02 - 0.10000000E+02 0.36000000E+02 0.00000000E+00 0.10000000E+02 - 0.36000000E+02 0.20000000E+02 0.20000000E+02 0.36000000E+02 - 0.00000000E+00 0.20000000E+02 0.36000000E+02 0.20000000E+02 - 0.30000000E+02 0.36000000E+02 0.00000000E+00 0.30000000E+02 - 0.36000000E+02 0.20000000E+02 0.40000000E+02 0.36000000E+02 - 0.00000000E+00 0.40000000E+02 0.36000000E+02 0.20000000E+02 - 0.50000000E+02 0.36000000E+02 0.00000000E+00 0.50000000E+02 - 0.36000000E+02 0.20000000E+02 0.60000000E+02 0.36000000E+02 - 0.00000000E+00 0.60000000E+02 0.36000000E+02 0.20000000E+02 - 0.70000000E+02 0.36000000E+02 0.00000000E+00 0.70000000E+02 - 0.36000000E+02 0.20000000E+02 0.80000000E+02 0.36000000E+02 - 0.00000000E+00 0.80000000E+02 0.36000000E+02 0.20000000E+02 - 0.90000000E+02 0.36000000E+02 0.00000000E+00 0.90000000E+02 - 0.36000000E+02 0.20000000E+02 0.10000000E+03 0.36000000E+02 - 0.00000000E+00 0.10000000E+03 0.36000000E+02 0.20000000E+02 - 0.00000000E+00 0.48000000E+02 0.00000000E+00 0.00000000E+00 - 0.48000000E+02 0.20000000E+02 0.10000000E+02 0.48000000E+02 - 0.00000000E+00 0.10000000E+02 0.48000000E+02 0.20000000E+02 - 0.20000000E+02 0.48000000E+02 0.00000000E+00 0.20000000E+02 - 0.48000000E+02 0.20000000E+02 0.30000000E+02 0.48000000E+02 - 0.00000000E+00 0.30000000E+02 0.48000000E+02 0.20000000E+02 - 0.40000000E+02 0.48000000E+02 0.00000000E+00 0.40000000E+02 - 0.48000000E+02 0.20000000E+02 0.50000000E+02 0.48000000E+02 - 0.00000000E+00 0.50000000E+02 0.48000000E+02 0.20000000E+02 - 0.60000000E+02 0.48000000E+02 0.00000000E+00 0.60000000E+02 - 0.48000000E+02 0.20000000E+02 0.70000000E+02 0.48000000E+02 - 0.00000000E+00 0.70000000E+02 0.48000000E+02 0.20000000E+02 - 0.80000000E+02 0.48000000E+02 0.00000000E+00 0.80000000E+02 - 0.48000000E+02 0.20000000E+02 0.90000000E+02 0.48000000E+02 - 0.00000000E+00 0.90000000E+02 0.48000000E+02 0.20000000E+02 - 0.10000000E+03 0.48000000E+02 0.00000000E+00 0.10000000E+03 - 0.48000000E+02 0.20000000E+02 0.00000000E+00 0.60000000E+02 - 0.00000000E+00 0.00000000E+00 0.60000000E+02 0.20000000E+02 - 0.10000000E+02 0.60000000E+02 0.00000000E+00 0.10000000E+02 - 0.60000000E+02 0.20000000E+02 0.20000000E+02 0.60000000E+02 - 0.00000000E+00 0.20000000E+02 0.60000000E+02 0.20000000E+02 - 0.30000000E+02 0.60000000E+02 0.00000000E+00 0.30000000E+02 - 0.60000000E+02 0.20000000E+02 0.40000000E+02 0.60000000E+02 - 0.00000000E+00 0.40000000E+02 0.60000000E+02 0.20000000E+02 - 0.50000000E+02 0.60000000E+02 0.00000000E+00 0.50000000E+02 - 0.60000000E+02 0.20000000E+02 0.60000000E+02 0.60000000E+02 - 0.00000000E+00 0.60000000E+02 0.60000000E+02 0.20000000E+02 - 0.70000000E+02 0.60000000E+02 0.00000000E+00 0.70000000E+02 - 0.60000000E+02 0.20000000E+02 0.80000000E+02 0.60000000E+02 - 0.00000000E+00 0.80000000E+02 0.60000000E+02 0.20000000E+02 - 0.90000000E+02 0.60000000E+02 0.00000000E+00 0.90000000E+02 - 0.60000000E+02 0.20000000E+02 0.10000000E+03 0.60000000E+02 - 0.00000000E+00 0.10000000E+03 0.60000000E+02 0.20000000E+02 - 0.00000000E+00 0.72000000E+02 0.00000000E+00 0.00000000E+00 - 0.72000000E+02 0.20000000E+02 0.10000000E+02 0.72000000E+02 - 0.00000000E+00 0.10000000E+02 0.72000000E+02 0.20000000E+02 - 0.20000000E+02 0.72000000E+02 0.00000000E+00 0.20000000E+02 - 0.72000000E+02 0.20000000E+02 0.30000000E+02 0.72000000E+02 - 0.00000000E+00 0.30000000E+02 0.72000000E+02 0.20000000E+02 - 0.40000000E+02 0.72000000E+02 0.00000000E+00 0.40000000E+02 - 0.72000000E+02 0.20000000E+02 0.50000000E+02 0.72000000E+02 - 0.00000000E+00 0.50000000E+02 0.72000000E+02 0.20000000E+02 - 0.60000000E+02 0.72000000E+02 0.00000000E+00 0.60000000E+02 - 0.72000000E+02 0.20000000E+02 0.70000000E+02 0.72000000E+02 - 0.00000000E+00 0.70000000E+02 0.72000000E+02 0.20000000E+02 - 0.80000000E+02 0.72000000E+02 0.00000000E+00 0.80000000E+02 - 0.72000000E+02 0.20000000E+02 0.90000000E+02 0.72000000E+02 - 0.00000000E+00 0.90000000E+02 0.72000000E+02 0.20000000E+02 - 0.10000000E+03 0.72000000E+02 0.00000000E+00 0.10000000E+03 - 0.72000000E+02 0.20000000E+02 0.00000000E+00 0.84000000E+02 - 0.00000000E+00 0.00000000E+00 0.84000000E+02 0.20000000E+02 - 0.10000000E+02 0.84000000E+02 0.00000000E+00 0.10000000E+02 - 0.84000000E+02 0.20000000E+02 0.20000000E+02 0.84000000E+02 - 0.00000000E+00 0.20000000E+02 0.84000000E+02 0.20000000E+02 - 0.30000000E+02 0.84000000E+02 0.00000000E+00 0.30000000E+02 - 0.84000000E+02 0.20000000E+02 0.40000000E+02 0.84000000E+02 - 0.00000000E+00 0.40000000E+02 0.84000000E+02 0.20000000E+02 - 0.50000000E+02 0.84000000E+02 0.00000000E+00 0.50000000E+02 - 0.84000000E+02 0.20000000E+02 0.60000000E+02 0.84000000E+02 - 0.00000000E+00 0.60000000E+02 0.84000000E+02 0.20000000E+02 - 0.70000000E+02 0.84000000E+02 0.00000000E+00 0.70000000E+02 - 0.84000000E+02 0.20000000E+02 0.80000000E+02 0.84000000E+02 - 0.00000000E+00 0.80000000E+02 0.84000000E+02 0.20000000E+02 - 0.90000000E+02 0.84000000E+02 0.00000000E+00 0.90000000E+02 - 0.84000000E+02 0.20000000E+02 0.10000000E+03 0.84000000E+02 - 0.00000000E+00 0.10000000E+03 0.84000000E+02 0.20000000E+02 - 0.00000000E+00 0.96000000E+02 0.00000000E+00 0.00000000E+00 - 0.96000000E+02 0.20000000E+02 0.10000000E+02 0.96000000E+02 - 0.00000000E+00 0.10000000E+02 0.96000000E+02 0.20000000E+02 - 0.20000000E+02 0.96000000E+02 0.00000000E+00 0.20000000E+02 - 0.96000000E+02 0.20000000E+02 0.30000000E+02 0.96000000E+02 - 0.00000000E+00 0.30000000E+02 0.96000000E+02 0.20000000E+02 - 0.40000000E+02 0.96000000E+02 0.00000000E+00 0.40000000E+02 - 0.96000000E+02 0.20000000E+02 0.50000000E+02 0.96000000E+02 - 0.00000000E+00 0.50000000E+02 0.96000000E+02 0.20000000E+02 - 0.60000000E+02 0.96000000E+02 0.00000000E+00 0.60000000E+02 - 0.96000000E+02 0.20000000E+02 0.70000000E+02 0.96000000E+02 - 0.00000000E+00 0.70000000E+02 0.96000000E+02 0.20000000E+02 - 0.80000000E+02 0.96000000E+02 0.00000000E+00 0.80000000E+02 - 0.96000000E+02 0.20000000E+02 0.90000000E+02 0.96000000E+02 - 0.00000000E+00 0.90000000E+02 0.96000000E+02 0.20000000E+02 - 0.10000000E+03 0.96000000E+02 0.00000000E+00 0.10000000E+03 - 0.96000000E+02 0.20000000E+02 0.00000000E+00 0.10800000E+03 - 0.00000000E+00 0.00000000E+00 0.10800000E+03 0.20000000E+02 - 0.10000000E+02 0.10800000E+03 0.00000000E+00 0.10000000E+02 - 0.10800000E+03 0.20000000E+02 0.20000000E+02 0.10800000E+03 - 0.00000000E+00 0.20000000E+02 0.10800000E+03 0.20000000E+02 - 0.30000000E+02 0.10800000E+03 0.00000000E+00 0.30000000E+02 - 0.10800000E+03 0.20000000E+02 0.40000000E+02 0.10800000E+03 - 0.00000000E+00 0.40000000E+02 0.10800000E+03 0.20000000E+02 - 0.50000000E+02 0.10800000E+03 0.00000000E+00 0.50000000E+02 - 0.10800000E+03 0.20000000E+02 0.60000000E+02 0.10800000E+03 - 0.00000000E+00 0.60000000E+02 0.10800000E+03 0.20000000E+02 - 0.70000000E+02 0.10800000E+03 0.00000000E+00 0.70000000E+02 - 0.10800000E+03 0.20000000E+02 0.80000000E+02 0.10800000E+03 - 0.00000000E+00 0.80000000E+02 0.10800000E+03 0.20000000E+02 - 0.90000000E+02 0.10800000E+03 0.00000000E+00 0.90000000E+02 - 0.10800000E+03 0.20000000E+02 0.10000000E+03 0.10800000E+03 - 0.00000000E+00 0.10000000E+03 0.10800000E+03 0.20000000E+02 - 0.00000000E+00 0.12000000E+03 0.00000000E+00 0.00000000E+00 - 0.12000000E+03 0.20000000E+02 0.10000000E+02 0.12000000E+03 - 0.00000000E+00 0.10000000E+02 0.12000000E+03 0.20000000E+02 - 0.20000000E+02 0.12000000E+03 0.00000000E+00 0.20000000E+02 - 0.12000000E+03 0.20000000E+02 0.30000000E+02 0.12000000E+03 - 0.00000000E+00 0.30000000E+02 0.12000000E+03 0.20000000E+02 - 0.40000000E+02 0.12000000E+03 0.00000000E+00 0.40000000E+02 - 0.12000000E+03 0.20000000E+02 0.50000000E+02 0.12000000E+03 - 0.00000000E+00 0.50000000E+02 0.12000000E+03 0.20000000E+02 - 0.60000000E+02 0.12000000E+03 0.00000000E+00 0.60000000E+02 - 0.12000000E+03 0.20000000E+02 0.70000000E+02 0.12000000E+03 - 0.00000000E+00 0.70000000E+02 0.12000000E+03 0.20000000E+02 - 0.80000000E+02 0.12000000E+03 0.00000000E+00 0.80000000E+02 - 0.12000000E+03 0.20000000E+02 0.90000000E+02 0.12000000E+03 - 0.00000000E+00 0.90000000E+02 0.12000000E+03 0.20000000E+02 - 0.10000000E+03 0.12000000E+03 0.00000000E+00 0.10000000E+03 - 0.12000000E+03 0.20000000E+02 -/ - -ZCORN - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 -/ - -PORO - 500*0.15 / - -EDIT \ No newline at end of file diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/GRID/CORNERPOINT_ACTNUM.DATA b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/GRID/CORNERPOINT_ACTNUM.DATA deleted file mode 100644 index 61de9062d2..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/GRID/CORNERPOINT_ACTNUM.DATA +++ /dev/null @@ -1,1213 +0,0 @@ -RUNSPEC - -DIMENS - 10 10 5 / - -TABDIMS - 2 / - -GRID - -COORD - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.20000000E+02 0.10000000E+02 0.00000000E+00 - 0.00000000E+00 0.10000000E+02 0.00000000E+00 0.20000000E+02 - 0.20000000E+02 0.00000000E+00 0.00000000E+00 0.20000000E+02 - 0.00000000E+00 0.20000000E+02 0.30000000E+02 0.00000000E+00 - 0.00000000E+00 0.30000000E+02 0.00000000E+00 0.20000000E+02 - 0.40000000E+02 0.00000000E+00 0.00000000E+00 0.40000000E+02 - 0.00000000E+00 0.20000000E+02 0.50000000E+02 0.00000000E+00 - 0.00000000E+00 0.50000000E+02 0.00000000E+00 0.20000000E+02 - 0.60000000E+02 0.00000000E+00 0.00000000E+00 0.60000000E+02 - 0.00000000E+00 0.20000000E+02 0.70000000E+02 0.00000000E+00 - 0.00000000E+00 0.70000000E+02 0.00000000E+00 0.20000000E+02 - 0.80000000E+02 0.00000000E+00 0.00000000E+00 0.80000000E+02 - 0.00000000E+00 0.20000000E+02 0.90000000E+02 0.00000000E+00 - 0.00000000E+00 0.90000000E+02 0.00000000E+00 0.20000000E+02 - 0.10000000E+03 0.00000000E+00 0.00000000E+00 0.10000000E+03 - 0.00000000E+00 0.20000000E+02 0.00000000E+00 0.12000000E+02 - 0.00000000E+00 0.00000000E+00 0.12000000E+02 0.20000000E+02 - 0.10000000E+02 0.12000000E+02 0.00000000E+00 0.10000000E+02 - 0.12000000E+02 0.20000000E+02 0.20000000E+02 0.12000000E+02 - 0.00000000E+00 0.20000000E+02 0.12000000E+02 0.20000000E+02 - 0.30000000E+02 0.12000000E+02 0.00000000E+00 0.30000000E+02 - 0.12000000E+02 0.20000000E+02 0.40000000E+02 0.12000000E+02 - 0.00000000E+00 0.40000000E+02 0.12000000E+02 0.20000000E+02 - 0.50000000E+02 0.12000000E+02 0.00000000E+00 0.50000000E+02 - 0.12000000E+02 0.20000000E+02 0.60000000E+02 0.12000000E+02 - 0.00000000E+00 0.60000000E+02 0.12000000E+02 0.20000000E+02 - 0.70000000E+02 0.12000000E+02 0.00000000E+00 0.70000000E+02 - 0.12000000E+02 0.20000000E+02 0.80000000E+02 0.12000000E+02 - 0.00000000E+00 0.80000000E+02 0.12000000E+02 0.20000000E+02 - 0.90000000E+02 0.12000000E+02 0.00000000E+00 0.90000000E+02 - 0.12000000E+02 0.20000000E+02 0.10000000E+03 0.12000000E+02 - 0.00000000E+00 0.10000000E+03 0.12000000E+02 0.20000000E+02 - 0.00000000E+00 0.24000000E+02 0.00000000E+00 0.00000000E+00 - 0.24000000E+02 0.20000000E+02 0.10000000E+02 0.24000000E+02 - 0.00000000E+00 0.10000000E+02 0.24000000E+02 0.20000000E+02 - 0.20000000E+02 0.24000000E+02 0.00000000E+00 0.20000000E+02 - 0.24000000E+02 0.20000000E+02 0.30000000E+02 0.24000000E+02 - 0.00000000E+00 0.30000000E+02 0.24000000E+02 0.20000000E+02 - 0.40000000E+02 0.24000000E+02 0.00000000E+00 0.40000000E+02 - 0.24000000E+02 0.20000000E+02 0.50000000E+02 0.24000000E+02 - 0.00000000E+00 0.50000000E+02 0.24000000E+02 0.20000000E+02 - 0.60000000E+02 0.24000000E+02 0.00000000E+00 0.60000000E+02 - 0.24000000E+02 0.20000000E+02 0.70000000E+02 0.24000000E+02 - 0.00000000E+00 0.70000000E+02 0.24000000E+02 0.20000000E+02 - 0.80000000E+02 0.24000000E+02 0.00000000E+00 0.80000000E+02 - 0.24000000E+02 0.20000000E+02 0.90000000E+02 0.24000000E+02 - 0.00000000E+00 0.90000000E+02 0.24000000E+02 0.20000000E+02 - 0.10000000E+03 0.24000000E+02 0.00000000E+00 0.10000000E+03 - 0.24000000E+02 0.20000000E+02 0.00000000E+00 0.36000000E+02 - 0.00000000E+00 0.00000000E+00 0.36000000E+02 0.20000000E+02 - 0.10000000E+02 0.36000000E+02 0.00000000E+00 0.10000000E+02 - 0.36000000E+02 0.20000000E+02 0.20000000E+02 0.36000000E+02 - 0.00000000E+00 0.20000000E+02 0.36000000E+02 0.20000000E+02 - 0.30000000E+02 0.36000000E+02 0.00000000E+00 0.30000000E+02 - 0.36000000E+02 0.20000000E+02 0.40000000E+02 0.36000000E+02 - 0.00000000E+00 0.40000000E+02 0.36000000E+02 0.20000000E+02 - 0.50000000E+02 0.36000000E+02 0.00000000E+00 0.50000000E+02 - 0.36000000E+02 0.20000000E+02 0.60000000E+02 0.36000000E+02 - 0.00000000E+00 0.60000000E+02 0.36000000E+02 0.20000000E+02 - 0.70000000E+02 0.36000000E+02 0.00000000E+00 0.70000000E+02 - 0.36000000E+02 0.20000000E+02 0.80000000E+02 0.36000000E+02 - 0.00000000E+00 0.80000000E+02 0.36000000E+02 0.20000000E+02 - 0.90000000E+02 0.36000000E+02 0.00000000E+00 0.90000000E+02 - 0.36000000E+02 0.20000000E+02 0.10000000E+03 0.36000000E+02 - 0.00000000E+00 0.10000000E+03 0.36000000E+02 0.20000000E+02 - 0.00000000E+00 0.48000000E+02 0.00000000E+00 0.00000000E+00 - 0.48000000E+02 0.20000000E+02 0.10000000E+02 0.48000000E+02 - 0.00000000E+00 0.10000000E+02 0.48000000E+02 0.20000000E+02 - 0.20000000E+02 0.48000000E+02 0.00000000E+00 0.20000000E+02 - 0.48000000E+02 0.20000000E+02 0.30000000E+02 0.48000000E+02 - 0.00000000E+00 0.30000000E+02 0.48000000E+02 0.20000000E+02 - 0.40000000E+02 0.48000000E+02 0.00000000E+00 0.40000000E+02 - 0.48000000E+02 0.20000000E+02 0.50000000E+02 0.48000000E+02 - 0.00000000E+00 0.50000000E+02 0.48000000E+02 0.20000000E+02 - 0.60000000E+02 0.48000000E+02 0.00000000E+00 0.60000000E+02 - 0.48000000E+02 0.20000000E+02 0.70000000E+02 0.48000000E+02 - 0.00000000E+00 0.70000000E+02 0.48000000E+02 0.20000000E+02 - 0.80000000E+02 0.48000000E+02 0.00000000E+00 0.80000000E+02 - 0.48000000E+02 0.20000000E+02 0.90000000E+02 0.48000000E+02 - 0.00000000E+00 0.90000000E+02 0.48000000E+02 0.20000000E+02 - 0.10000000E+03 0.48000000E+02 0.00000000E+00 0.10000000E+03 - 0.48000000E+02 0.20000000E+02 0.00000000E+00 0.60000000E+02 - 0.00000000E+00 0.00000000E+00 0.60000000E+02 0.20000000E+02 - 0.10000000E+02 0.60000000E+02 0.00000000E+00 0.10000000E+02 - 0.60000000E+02 0.20000000E+02 0.20000000E+02 0.60000000E+02 - 0.00000000E+00 0.20000000E+02 0.60000000E+02 0.20000000E+02 - 0.30000000E+02 0.60000000E+02 0.00000000E+00 0.30000000E+02 - 0.60000000E+02 0.20000000E+02 0.40000000E+02 0.60000000E+02 - 0.00000000E+00 0.40000000E+02 0.60000000E+02 0.20000000E+02 - 0.50000000E+02 0.60000000E+02 0.00000000E+00 0.50000000E+02 - 0.60000000E+02 0.20000000E+02 0.60000000E+02 0.60000000E+02 - 0.00000000E+00 0.60000000E+02 0.60000000E+02 0.20000000E+02 - 0.70000000E+02 0.60000000E+02 0.00000000E+00 0.70000000E+02 - 0.60000000E+02 0.20000000E+02 0.80000000E+02 0.60000000E+02 - 0.00000000E+00 0.80000000E+02 0.60000000E+02 0.20000000E+02 - 0.90000000E+02 0.60000000E+02 0.00000000E+00 0.90000000E+02 - 0.60000000E+02 0.20000000E+02 0.10000000E+03 0.60000000E+02 - 0.00000000E+00 0.10000000E+03 0.60000000E+02 0.20000000E+02 - 0.00000000E+00 0.72000000E+02 0.00000000E+00 0.00000000E+00 - 0.72000000E+02 0.20000000E+02 0.10000000E+02 0.72000000E+02 - 0.00000000E+00 0.10000000E+02 0.72000000E+02 0.20000000E+02 - 0.20000000E+02 0.72000000E+02 0.00000000E+00 0.20000000E+02 - 0.72000000E+02 0.20000000E+02 0.30000000E+02 0.72000000E+02 - 0.00000000E+00 0.30000000E+02 0.72000000E+02 0.20000000E+02 - 0.40000000E+02 0.72000000E+02 0.00000000E+00 0.40000000E+02 - 0.72000000E+02 0.20000000E+02 0.50000000E+02 0.72000000E+02 - 0.00000000E+00 0.50000000E+02 0.72000000E+02 0.20000000E+02 - 0.60000000E+02 0.72000000E+02 0.00000000E+00 0.60000000E+02 - 0.72000000E+02 0.20000000E+02 0.70000000E+02 0.72000000E+02 - 0.00000000E+00 0.70000000E+02 0.72000000E+02 0.20000000E+02 - 0.80000000E+02 0.72000000E+02 0.00000000E+00 0.80000000E+02 - 0.72000000E+02 0.20000000E+02 0.90000000E+02 0.72000000E+02 - 0.00000000E+00 0.90000000E+02 0.72000000E+02 0.20000000E+02 - 0.10000000E+03 0.72000000E+02 0.00000000E+00 0.10000000E+03 - 0.72000000E+02 0.20000000E+02 0.00000000E+00 0.84000000E+02 - 0.00000000E+00 0.00000000E+00 0.84000000E+02 0.20000000E+02 - 0.10000000E+02 0.84000000E+02 0.00000000E+00 0.10000000E+02 - 0.84000000E+02 0.20000000E+02 0.20000000E+02 0.84000000E+02 - 0.00000000E+00 0.20000000E+02 0.84000000E+02 0.20000000E+02 - 0.30000000E+02 0.84000000E+02 0.00000000E+00 0.30000000E+02 - 0.84000000E+02 0.20000000E+02 0.40000000E+02 0.84000000E+02 - 0.00000000E+00 0.40000000E+02 0.84000000E+02 0.20000000E+02 - 0.50000000E+02 0.84000000E+02 0.00000000E+00 0.50000000E+02 - 0.84000000E+02 0.20000000E+02 0.60000000E+02 0.84000000E+02 - 0.00000000E+00 0.60000000E+02 0.84000000E+02 0.20000000E+02 - 0.70000000E+02 0.84000000E+02 0.00000000E+00 0.70000000E+02 - 0.84000000E+02 0.20000000E+02 0.80000000E+02 0.84000000E+02 - 0.00000000E+00 0.80000000E+02 0.84000000E+02 0.20000000E+02 - 0.90000000E+02 0.84000000E+02 0.00000000E+00 0.90000000E+02 - 0.84000000E+02 0.20000000E+02 0.10000000E+03 0.84000000E+02 - 0.00000000E+00 0.10000000E+03 0.84000000E+02 0.20000000E+02 - 0.00000000E+00 0.96000000E+02 0.00000000E+00 0.00000000E+00 - 0.96000000E+02 0.20000000E+02 0.10000000E+02 0.96000000E+02 - 0.00000000E+00 0.10000000E+02 0.96000000E+02 0.20000000E+02 - 0.20000000E+02 0.96000000E+02 0.00000000E+00 0.20000000E+02 - 0.96000000E+02 0.20000000E+02 0.30000000E+02 0.96000000E+02 - 0.00000000E+00 0.30000000E+02 0.96000000E+02 0.20000000E+02 - 0.40000000E+02 0.96000000E+02 0.00000000E+00 0.40000000E+02 - 0.96000000E+02 0.20000000E+02 0.50000000E+02 0.96000000E+02 - 0.00000000E+00 0.50000000E+02 0.96000000E+02 0.20000000E+02 - 0.60000000E+02 0.96000000E+02 0.00000000E+00 0.60000000E+02 - 0.96000000E+02 0.20000000E+02 0.70000000E+02 0.96000000E+02 - 0.00000000E+00 0.70000000E+02 0.96000000E+02 0.20000000E+02 - 0.80000000E+02 0.96000000E+02 0.00000000E+00 0.80000000E+02 - 0.96000000E+02 0.20000000E+02 0.90000000E+02 0.96000000E+02 - 0.00000000E+00 0.90000000E+02 0.96000000E+02 0.20000000E+02 - 0.10000000E+03 0.96000000E+02 0.00000000E+00 0.10000000E+03 - 0.96000000E+02 0.20000000E+02 0.00000000E+00 0.10800000E+03 - 0.00000000E+00 0.00000000E+00 0.10800000E+03 0.20000000E+02 - 0.10000000E+02 0.10800000E+03 0.00000000E+00 0.10000000E+02 - 0.10800000E+03 0.20000000E+02 0.20000000E+02 0.10800000E+03 - 0.00000000E+00 0.20000000E+02 0.10800000E+03 0.20000000E+02 - 0.30000000E+02 0.10800000E+03 0.00000000E+00 0.30000000E+02 - 0.10800000E+03 0.20000000E+02 0.40000000E+02 0.10800000E+03 - 0.00000000E+00 0.40000000E+02 0.10800000E+03 0.20000000E+02 - 0.50000000E+02 0.10800000E+03 0.00000000E+00 0.50000000E+02 - 0.10800000E+03 0.20000000E+02 0.60000000E+02 0.10800000E+03 - 0.00000000E+00 0.60000000E+02 0.10800000E+03 0.20000000E+02 - 0.70000000E+02 0.10800000E+03 0.00000000E+00 0.70000000E+02 - 0.10800000E+03 0.20000000E+02 0.80000000E+02 0.10800000E+03 - 0.00000000E+00 0.80000000E+02 0.10800000E+03 0.20000000E+02 - 0.90000000E+02 0.10800000E+03 0.00000000E+00 0.90000000E+02 - 0.10800000E+03 0.20000000E+02 0.10000000E+03 0.10800000E+03 - 0.00000000E+00 0.10000000E+03 0.10800000E+03 0.20000000E+02 - 0.00000000E+00 0.12000000E+03 0.00000000E+00 0.00000000E+00 - 0.12000000E+03 0.20000000E+02 0.10000000E+02 0.12000000E+03 - 0.00000000E+00 0.10000000E+02 0.12000000E+03 0.20000000E+02 - 0.20000000E+02 0.12000000E+03 0.00000000E+00 0.20000000E+02 - 0.12000000E+03 0.20000000E+02 0.30000000E+02 0.12000000E+03 - 0.00000000E+00 0.30000000E+02 0.12000000E+03 0.20000000E+02 - 0.40000000E+02 0.12000000E+03 0.00000000E+00 0.40000000E+02 - 0.12000000E+03 0.20000000E+02 0.50000000E+02 0.12000000E+03 - 0.00000000E+00 0.50000000E+02 0.12000000E+03 0.20000000E+02 - 0.60000000E+02 0.12000000E+03 0.00000000E+00 0.60000000E+02 - 0.12000000E+03 0.20000000E+02 0.70000000E+02 0.12000000E+03 - 0.00000000E+00 0.70000000E+02 0.12000000E+03 0.20000000E+02 - 0.80000000E+02 0.12000000E+03 0.00000000E+00 0.80000000E+02 - 0.12000000E+03 0.20000000E+02 0.90000000E+02 0.12000000E+03 - 0.00000000E+00 0.90000000E+02 0.12000000E+03 0.20000000E+02 - 0.10000000E+03 0.12000000E+03 0.00000000E+00 0.10000000E+03 - 0.12000000E+03 0.20000000E+02 -/ - -ZCORN - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.40000000E+01 0.40000000E+01 0.40000000E+01 0.40000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.80000000E+01 0.80000000E+01 0.80000000E+01 0.80000000E+01 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.12000000E+02 0.12000000E+02 0.12000000E+02 0.12000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.16000000E+02 0.16000000E+02 0.16000000E+02 0.16000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 - 0.20000000E+02 0.20000000E+02 0.20000000E+02 0.20000000E+02 -/ - -ACTNUM - 200*0 100*1 200*0 / - -PORO - 500*0.15 / - -EDIT - -PROPS - -SWOF - 1 2 3 4 - 5 6 7 8 / - 9 10 11 12 / - diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/GRID/TOPS.DATA b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/GRID/TOPS.DATA deleted file mode 100644 index fddc5e89d2..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/GRID/TOPS.DATA +++ /dev/null @@ -1,434 +0,0 @@ -RUNSPEC -TITLE - SIMPLE TEST - -DIMENS - 9 9 2 / - -NONNC - -OIL - -WATER - -GAS - -DISGAS - -VAPOIL - -METRIC - -EQLDIMS - 1 100 2 1 1 / -TABDIMS - 1 1 33 60 16 60 / - -WELLDIMS - 18 2 2 10 / - -NUPCOL - 4 / - -VFPPDIMS - 7 3 4 2 0 1 / - -VFPIDIMS - 6 3 1 / - -START - 1 'JAN' 1983 / - -NSTACK - 4 / - -GRID ================================================ -DXV - 9*400 / -DYV - 9*300 / -DZV - 2*10 / -TOPS - 81*2202 / - -PERMX - 162*400 / - -PERMY - 162*300 / - -PERMZ - 162*30 / - -PORO - 162*0.3 / - - - -PROPS =============================================================== -PVTO - --- RSO PRESSURE B-OIL VISCOSITY --- (BAR) (CP) - - 20.59 50.00 1.10615 1.180 - 75.00 1.10164 1.247 - 100.00 1.09744 1.315 - 125.00 1.09351 1.384 - 150.00 1.08984 1.453 / - - 28.19 70.00 1.12522 1.066 - 95.00 1.12047 1.124 - 120.00 1.11604 1.182 - 145.00 1.11191 1.241 - 170.00 1.10804 1.300 / - - 36.01 90.00 1.14458 0.964 - 115.00 1.13959 1.014 - 140.00 1.13494 1.064 - 165.00 1.13060 1.115 - 190.00 1.12653 1.166 / - - 44.09 110.00 1.16437 0.880 - 135.00 1.15915 0.924 - 160.00 1.15428 0.968 - 185.00 1.14973 1.012 - 210.00 1.14547 1.056 / - - 52.46 130.00 1.18467 0.805 - 155.00 1.17921 0.843 - 180.00 1.17413 0.882 - 205.00 1.16937 0.920 - 230.00 1.16491 0.959 / - - 61.13 150.00 1.20555 0.746 - 175.00 1.19985 0.780 - 200.00 1.19454 0.814 - 225.00 1.18958 0.849 - 250.00 1.18492 0.883 / - - 70.14 170.00 1.22704 0.698 - 195.00 1.22111 0.729 - 220.00 1.21558 0.759 - 245.00 1.21040 0.790 - 270.00 1.20555 0.821 / - - 79.50 190.00 1.24922 0.658 - 215.00 1.24305 0.686 - 240.00 1.23729 0.714 - 265.00 1.23190 0.742 - 290.00 1.22685 0.770 / - - 89.24 210.00 1.27214 0.637 - 235.00 1.26573 0.664 - 260.00 1.25974 0.693 - 285.00 1.25414 0.725 - 310.00 1.24888 0.760 / - - 99.39 230.00 1.29586 0.622 - 255.00 1.28921 0.641 - 280.00 1.28300 0.661 - 305.00 1.27718 0.680 - 330.00 1.27171 0.699 / - - 110.41 250.80 1.32148 0.610 - 275.80 1.31457 0.628 - 300.80 1.30812 0.647 - 325.80 1.30207 0.665 - 350.80 1.29638 0.682 / - - 120.32 268.42 1.34449 0.576 - 293.42 1.33735 0.593 - 318.42 1.33068 0.609 - 343.42 1.32442 0.626 - 368.42 1.31853 0.642 / - - 130.23 285.33 1.36737 0.5335 - 310.33 1.36001 0.5487 - 335.33 1.35313 0.5638 - 360.33 1.34667 0.5787 - 385.33 1.34059 0.5934 / - - 140.12 301.59 1.39015 0.4956 - 326.59 1.38257 0.5094 - 351.59 1.37548 0.5230 - 376.59 1.36882 0.5365 - 401.59 1.36255 0.5498 / - - 150.01 317.23 1.41282 0.4614 - 342.23 1.40503 0.4739 - 367.23 1.39773 0.4863 - 392.23 1.39088 0.4986 - 417.23 1.38443 0.5107 / - - 159.89 332.29 1.43539 0.43042 - 357.29 1.42739 0.44183 - 382.29 1.41990 0.45312 - 407.29 1.41286 0.46430 - 432.29 1.40622 0.47537 / - - 169.76 346.80 1.45788 0.41191 - 371.80 1.44967 0.42260 - 396.80 1.44198 0.43318 - 421.80 1.43475 0.44365 - 446.80 1.42794 0.45402 / - - 179.63 360.80 1.48028 0.39503 - 385.80 1.47187 0.40508 - 410.80 1.46398 0.41502 - 435.80 1.45657 0.42487 - 460.80 1.44958 0.43461 / - - 189.48 374.31 1.50260 0.37959 - 399.31 1.49399 0.38907 - 424.31 1.48591 0.39845 - 449.31 1.47832 0.40773 - 474.31 1.47116 0.41692 / - - 199.34 387.36 1.52484 0.36543 - 412.36 1.51603 0.37439 - 437.36 1.50777 0.38326 - 462.36 1.50000 0.39203 - 487.36 1.49267 0.40072 / - - 209.18 399.99 1.54700 0.35239 - 424.99 1.53800 0.36089 - 449.99 1.52956 0.36929 - 474.99 1.52161 0.37762 - 499.99 1.51411 0.38585 / - - 219.02 412.21 1.56910 0.34035 - 437.21 1.55991 0.34843 - 462.21 1.55128 0.35642 - 487.21 1.54316 0.36433 - 512.21 1.53549 0.37216 / - - 228.85 424.05 1.59112 0.32921 - 449.05 1.58174 0.33691 - 474.05 1.57294 0.34453 - 499.05 1.56464 0.35206 - 524.05 1.55681 0.35952 / - - 238.67 435.53 1.61307 0.31888 - 460.53 1.60351 0.32623 - 485.53 1.59453 0.33350 - 510.53 1.58606 0.34070 - 535.53 1.57807 0.34782 / - - 248.48 446.68 1.63496 0.30927 - 471.68 1.62522 0.31630 - 496.68 1.61606 0.32326 - 521.68 1.60743 0.33014 - 546.68 1.59927 0.33695 / - - 258.29 457.51 1.65678 0.30032 - 482.51 1.64686 0.30706 - 507.51 1.63753 0.31373 - 532.51 1.62873 0.32032 - 557.51 1.62042 0.32685 / - - 268.09 468.04 1.67853 0.29196 - 493.04 1.66843 0.29843 - 518.04 1.65893 0.30483 - 543.04 1.64997 0.31117 - 568.04 1.64150 0.31743 / - - 277.89 478.30 1.70022 0.28414 - 503.30 1.68994 0.29037 - 528.30 1.68028 0.29652 - 553.30 1.67116 0.30261 - 578.30 1.66253 0.30864 / - - 287.68 488.30 1.72184 0.27681 - 513.30 1.71139 0.28281 - 538.30 1.70156 0.28874 - 563.30 1.69228 0.29460 - 588.30 1.68350 0.30040 / - - 297.46 498.06 1.74339 0.26994 - 523.06 1.73277 0.27572 - 548.06 1.72278 0.28144 - 573.06 1.71334 0.28709 - 598.06 1.70442 0.29269 / - - 307.23 507.59 1.76487 0.26347 - 532.59 1.75409 0.26906 - 557.59 1.74393 0.27458 - 582.59 1.73434 0.28004 - 607.59 1.72527 0.28544 / - - 317.00 516.92 1.78628 0.25738 - 541.92 1.77533 0.26279 - 566.92 1.76502 0.26812 - 591.92 1.75528 0.27340 - 616.92 1.74606 0.27863 / - - 326.76 526.06 1.80761 0.25165 - 551.06 1.79651 0.25688 - 576.06 1.78604 0.26204 - 601.06 1.77615 0.26716 - 626.06 1.76679 0.27221 / - - 336.51 535.02 1.82887 0.24623 - 560.02 1.81761 0.25130 - 585.02 1.80699 0.25631 - 610.02 1.79696 0.26126 - 635.02 1.78746 0.26616 / - - 346.26 543.83 1.85005 0.24112 - 568.83 1.83864 0.24603 - 593.83 1.82787 0.25089 - 618.83 1.81770 0.25570 - 643.83 1.80806 0.26045 / - - 356.00 552.49 1.87115 0.23628 - 577.49 1.85959 0.24105 - 602.49 1.84868 0.24577 - 627.49 1.83836 0.25043 - 652.49 1.82858 0.25505 / - - 365.73 561.04 1.89217 0.23170 - 586.04 1.88046 0.23634 - 611.04 1.86940 0.24092 - 636.04 1.85895 0.24546 - 661.04 1.84904 0.24994 / - - 375.46 569.48 1.91309 0.22736 - 594.48 1.90124 0.23187 - 619.48 1.89004 0.23633 - 644.48 1.87946 0.24074 - 669.48 1.86942 0.24510 / - - 385.18 577.82 1.93391 0.22325 - 602.82 1.92192 0.22764 - 627.82 1.91060 0.23198 - 652.82 1.89988 0.23627 - 677.82 1.88971 0.24052 / - - 394.89 586.09 1.95464 0.21934 - 611.09 1.94252 0.22362 - 636.09 1.93106 0.22785 - 661.09 1.92021 0.23204 - 686.09 1.90993 0.23617 / - - 404.60 594.29 1.97527 0.21564 - 619.29 1.96301 0.21981 - 644.29 1.95143 0.22393 - 669.29 1.94046 0.22801 - 694.29 1.93005 0.23204 / -/ - - - ---------------------------------------------------------------------- --- ROCK COMPRESSIBILITY --- REF.PRES. COMPR. -ROCK - 277.0 4.84E-5 / - --- ================================================================== --- PVT PROPERTIES OF WATER --- --- REF.PRES. REF.FVF. COMPR. REF.VISC. VISCOSIBILITY --- ========================================================== -PVTW - 277.0 1.038 4.67E-5 0.318 0.0 / - ---------------------------------------------------------------------- --- SURFACE DENSITIE OF RESERVOIR FLUIDS --- OIL WATER GAS -DENSITY - 859.5 1033.0 0.854 / Justert 22/7 - -SWOF --- Sw Krw Kro Pc - 0.000000 0.000000 1.00000 3.75633 - 0.0500000 0.000860000 0.847820 1.86981 - 0.100000 0.00263000 0.697460 1.23731 - 0.150000 0.00524000 0.557170 0.91821 - 0.200000 0.00877000 0.432860 0.72451 - 0.250000 0.0133800 0.327570 0.59341 - 0.300000 0.0192700 0.241770 0.49811 - 0.350000 0.0267200 0.174150 0.42511 - 0.400000 0.0360800 0.122370 0.36691 - 0.450000 0.0478100 0.0837400 0.31911 - 0.500000 0.0625000 0.0556500 0.27881 - 0.550000 0.0809000 0.0357200 0.24401 - 0.600000 0.103940 0.0219900 0.21351 - 0.650000 0.132770 0.0128400 0.18631 - 0.700000 0.168690 0.00699000 0.16161 - 0.750000 0.213020 0.00346000 0.13901 - 0.800000 0.266670 0.00149000 0.11801 - 0.850000 0.329180 0.000510000 0.09831 - 0.900000 0.397060 0.000120000 0.07961 - 0.950000 0.461030 0.00001 0.06161 - 1.00000 0.500000 0.000000 0.04408 -/ - -SOLUTION ============================================================= - --- ---EQUIL 1 TABLES 2 NODES IN EACH METRIC 11:29 14 OCT 83 --- 2210.00 310.000 2210.00 .00000 2210.00 .00000 1 1 0 / - -PRESSURE - 162*310 / - -SWAT - 162*0.2 / - -SGAS - 162*0.1 / - -RS - 162*18.5717334747/ - --- OIL INITIALLY SET SATURATED, ALTHOUGH NO LIQUID OIL IN INITIAL STATE - -RSVD 1 TABLES 2 NODES IN EACH METRIC 11:31 14 OCT 83 - 2000.0 100 - 2500.0 100 -/ - --- VAPOUR INITIALLY UNDER-SATURATED WITH RV = 0.00035 - -RVVD 1 TABLES 2 NODES IN EACH METRIC 11:31 14 OCT 83 - 2000.0 .00035 - 2500.0 .00035 -/ - -SUMMARY - ---ALL ---SEPARATE - -SCHEDULE ========================================================== - --- REPORT SWITCHES --- ---RPTSCHED --- 'PRES' 'SOIL' 'SWAT' 'RV' 'RESTART=2' 'FIP=1' 'WELLS=2' 'VFPPROD=1' 'SUMMARY=2' ---'CPU=2' 'WELSPECS' 'NEWTON=2' / --- -WELSPECS - 'PRODUCER' 'G' 5 5 2000 'GAS' / -/ - -COMPDAT - 'PRODUCER' 5 5 1 1 'OPEN' 1* -1 0.5 / - / - --- PRODUCTION WELL CONTROLS --- --- WELL OPEN/ CNTL OIL WATER GAS LIQU RES BHP --- NAME SHUT MODE RATE RATE RATE RATE RATE - -WCONPROD - 'PRODUCER' 'OPEN' 'GRAT' 2* 5.0E5 / - / - -TSTEP - 4*500.0 / --- -END diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/IOConfig/RPTRST_DECK.DATA b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/IOConfig/RPTRST_DECK.DATA deleted file mode 100644 index 1d584927b1..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/IOConfig/RPTRST_DECK.DATA +++ /dev/null @@ -1,1001 +0,0 @@ -RUNSPEC -DIMENS -46 112 22 / -START - 06 'NOV' 1997 / -GRID -DX -113344*1 / -DY -113344*1 / -DZ -113344*1 / -TOPS -5152*1 / -SPECGRID - 46 112 22 1 F / -PORO - 113344*0.15/ -SOLUTION -RPTRST -'BASIC = 2' KRO KRW KRG / -RPTSOL -FIP=3 SWAT / -SCHEDULE -DATES - 14 'NOV' 1997 00:00:00.001 / -/ -DATES - 1 'DEC' 1997 / -/ -DATES - 17 'DEC' 1997 / -/ -DATES - 1 'JAN' 1998 / -/ -RPTSCHED - 0 0 0 0 0 0 2 2 2 0 1 1 0 1 1 0 0 / -DATES - 1 'FEB' 1998 / -/ -RPTSCHED - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 / -DATES - 1 'MAR' 1998 / -/ -DATES - 29 'MAR' 1998 / -/ -DATES - 30 'MAR' 1998 / -/ -DATES - 1 'APR' 1998 / -/ -RPTSCHED - 0 0 0 0 0 0 2 2 2 0 1 1 0 1 1 0 0 / -DATES - 23 'APR' 1998 / -/ -RPTSCHED - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 / -DATES - 1 'MAY' 1998 / -/ -DATES - 26 'MAY' 1998 / -/ -DATES - 27 'MAY' 1998 / -/ -DATES - 1 'JUN' 1998 / -/ -DATES - 14 'JUN' 1998 / -/ -DATES - 23 'JUN' 1998 / -/ -DATES - 24 'JUN' 1998 / -/ -DATES - 1 'JUL' 1998 / -/ -RPTSCHED - 0 0 0 0 0 0 2 2 2 0 1 1 0 1 1 0 0 / -DATES - 16 'JUL' 1998 / -/ -RPTSCHED - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 / -DATES - 1 'AUG' 1998 / -/ -DATES - 30 'AUG' 1998 / -/ -DATES - 31 'AUG' 1998 / -/ -DATES - 1 'SEP' 1998 / -/ -DATES - 18 'SEP' 1998 / -/ -DATES - 28 'SEP' 1998 / -/ -DATES - 1 'OCT' 1998 / -/ -RPTSCHED - 0 0 0 0 0 0 2 2 2 0 1 1 0 1 1 0 0 / -DATES - 13 'OCT' 1998 / -/ -RPTSCHED - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 / -DATES - 17 'OCT' 1998 / -/ -DATES - 1 'NOV' 1998 / -/ -DATES - 1 'DEC' 1998 / -/ -DATES - 25 'DEC' 1998 / -/ -DATES - 1 'JAN' 1999 / -/ -RPTSCHED - 0 0 0 0 0 0 2 2 2 0 1 1 0 1 1 0 0 / -DATES - 4 'JAN' 1999 / -/ -RPTSCHED - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 / -DATES - 19 'JAN' 1999 / -/ -DATES - 21 'JAN' 1999 / -/ -DATES - 1 'FEB' 1999 / -/ -DATES - 24 'FEB' 1999 / -/ -DATES - 1 'MAR' 1999 / -/ -DATES - 5 'MAR' 1999 / -/ -DATES - 23 'MAR' 1999 / -/ -DATES - 26 'MAR' 1999 / -/ -DATES - 28 'MAR' 1999 / -/ -DATES - 1 'APR' 1999 / -/ -RPTSCHED - 0 0 0 0 0 0 2 2 2 0 1 1 0 1 1 0 0 / -DATES - 1 'MAY' 1999 / -/ -RPTSCHED - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 / -DATES - 4 'MAY' 1999 / -/ -DATES - 5 'MAY' 1999 / -/ -DATES - 17 'MAY' 1999 / -/ -DATES - 20 'MAY' 1999 / -/ -DATES - 21 'MAY' 1999 / -/ -DATES - 1 'JUN' 1999 / -/ -DATES - 22 'JUN' 1999 / -/ -DATES - 1 'JUL' 1999 / -/ -RPTSCHED - 0 0 0 0 0 0 2 2 2 0 1 1 0 1 1 0 0 / -DATES - 15 'JUL' 1999 / -/ -RPTSCHED - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 / -DATES - 1 'AUG' 1999 / -/ -DATES - 5 'AUG' 1999 / -/ -DATES - 30 'AUG' 1999 / -/ -DATES - 1 'SEP' 1999 / -/ -DATES - 3 'SEP' 1999 / -/ -DATES - 21 'SEP' 1999 / -/ -DATES - 22 'SEP' 1999 / -/ -DATES - 1 'OCT' 1999 / -/ -RPTSCHED - 0 0 0 0 0 0 2 2 2 0 1 1 0 1 1 0 0 / -DATES - 3 'OCT' 1999 / -/ -RPTSCHED - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 / -DATES - 4 'OCT' 1999 / -/ -DATES - 13 'OCT' 1999 / -/ -DATES - 16 'OCT' 1999 / -/ -DATES - 1 'NOV' 1999 / -/ -DATES - 9 'NOV' 1999 / -/ -DATES - 10 'NOV' 1999 / -/ -DATES - 13 'NOV' 1999 / -/ -DATES - 1 'DEC' 1999 / -/ -DATES - 1 'JAN' 2000 / -/ -RPTSCHED - 0 0 0 0 0 0 2 2 2 0 1 1 0 1 1 0 0 / -DATES - 1 'FEB' 2000 / -/ -RPTSCHED - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 / -DATES - 1 'MAR' 2000 / -/ -DATES - 2 'MAR' 2000 / -/ -DATES - 3 'MAR' 2000 / -/ -DATES - 1 'APR' 2000 / -/ -RPTSCHED - 0 0 0 0 0 0 2 2 2 0 1 1 0 1 1 0 0 / -DATES - 1 'MAY' 2000 / -/ -RPTSCHED - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 / -DATES - 26 'MAY' 2000 / -/ -DATES - 1 'JUN' 2000 / -/ -DATES - 9 'JUN' 2000 / -/ -DATES - 30 'JUN' 2000 / -/ -DATES - 1 'JUL' 2000 / -/ -RPTSCHED - 0 0 0 0 0 0 2 2 2 0 1 1 0 1 1 0 0 / -DATES - 1 'AUG' 2000 / -/ -RPTSCHED - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 / -DATES - 2 'AUG' 2000 / -/ -DATES - 3 'AUG' 2000 / -/ -DATES - 20 'AUG' 2000 / -/ -DATES - 26 'AUG' 2000 / -/ -DATES - 27 'AUG' 2000 / -/ -DATES - 1 'SEP' 2000 / -/ -DATES - 9 'SEP' 2000 / -/ -DATES - 10 'SEP' 2000 / -/ -DATES - 21 'SEP' 2000 / -/ -DATES - 22 'SEP' 2000 / -/ -DATES - 1 'OCT' 2000 / -/ -RPTSCHED - 0 0 0 0 0 0 2 2 2 0 1 1 0 1 1 0 0 / -DATES - 1 'NOV' 2000 / -/ -RPTSCHED - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 / -DATES - 1 'DEC' 2000 / -/ -DATES - 1 'JAN' 2001 / -/ -RPTSCHED - 0 0 0 0 0 0 2 2 2 0 1 1 0 1 1 0 0 / -DATES - 1 'FEB' 2001 / -/ -RPTSCHED - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 / -DATES - 1 'MAR' 2001 / -/ -DATES - 1 'APR' 2001 / -/ -RPTSCHED - 0 0 0 0 0 0 2 2 2 0 1 1 0 1 1 0 0 / -DATES - 1 'MAY' 2001 / -/ -RPTSCHED - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 / -DATES - 31 'MAY' 2001 / -/ -DATES - 1 'JUN' 2001 / -/ -DATES - 6 'JUN' 2001 / -/ -DATES - 7 'JUN' 2001 / -/ -DATES - 18 'JUN' 2001 / -/ -DATES - 19 'JUN' 2001 / -/ -DATES - 1 'JUL' 2001 / -/ -RPTSCHED - 0 0 0 0 0 0 2 2 2 0 1 1 0 1 1 0 0 / -DATES - 2 'JUL' 2001 / -/ -RPTSCHED - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 / -DATES - 3 'JUL' 2001 / -/ -DATES - 15 'JUL' 2001 / -/ -RPTRST - 2 / -DATES - 16 'JUL' 2001 / -/ -RPTRST - 0 / -DATES - 30 'JUL' 2001 / -/ -DATES - 1 'AUG' 2001 / -/ -DATES - 10 'AUG' 2001 / -/ -DATES - 16 'AUG' 2001 / -/ -DATES - 1 'SEP' 2001 / -/ -DATES - 10 'SEP' 2001 / -/ -DATES - 1 'OCT' 2001 / -/ -RPTSCHED - 0 0 0 0 0 0 2 2 2 0 1 1 0 1 1 0 0 / -DATES - 1 'NOV' 2001 / -/ -RPTSCHED - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 / -DATES - 1 'DEC' 2001 / -/ -DATES - 29 'DEC' 2001 / -/ -DATES - 1 'JAN' 2002 / -/ -RPTSCHED - 0 0 0 0 0 0 2 2 2 0 1 1 0 1 1 0 0 / -DATES - 1 'FEB' 2002 / -/ -RPTSCHED - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 / -DATES - 12 'FEB' 2002 / -/ -DATES - 13 'FEB' 2002 / -/ -DATES - 1 'MAR' 2002 / -/ -DATES - 1 'APR' 2002 / -/ -RPTSCHED - 0 0 0 0 0 0 2 2 2 0 1 1 0 1 1 0 0 / -DATES - 1 'MAY' 2002 / -/ -RPTSCHED - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 / -DATES - 1 'JUN' 2002 / -/ -DATES - 1 'JUL' 2002 / -/ -RPTSCHED - 0 0 0 0 0 0 2 2 2 0 1 1 0 1 1 0 0 / -DATES - 8 'JUL' 2002 / -/ -RPTSCHED - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 / -DATES - 11 'JUL' 2002 / -/ -DATES - 15 'JUL' 2002 / -/ -DATES - 1 'AUG' 2002 / -/ -DATES - 14 'AUG' 2002 / -/ -DATES - 1 'SEP' 2002 / -/ -DATES - 2 'SEP' 2002 / -/ -DATES - 15 'SEP' 2002 / -/ -DATES - 1 'OCT' 2002 / -/ -RPTSCHED - 0 0 0 0 0 0 2 2 2 0 1 1 0 1 1 0 0 / -DATES - 7 'OCT' 2002 / -/ -RPTSCHED - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 / -DATES - 14 'OCT' 2002 / -/ -DATES - 1 'NOV' 2002 / -/ -DATES - 16 'NOV' 2002 / -/ -DATES - 1 'DEC' 2002 / -/ -DATES - 24 'DEC' 2002 / -/ -DATES - 1 'JAN' 2003 / -/ -RPTSCHED - 0 0 0 0 0 0 2 2 2 0 1 1 0 1 1 0 0 / -DATES - 2 'JAN' 2003 / -/ -RPTSCHED - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 / -DATES - 12 'JAN' 2003 / -/ -DATES - 20 'JAN' 2003 / -/ -DATES - 1 'FEB' 2003 / -/ -DATES - 14 'FEB' 2003 / -/ -DATES - 1 'MAR' 2003 / -/ -DATES - 6 'MAR' 2003 / -/ -DATES - 7 'MAR' 2003 / -/ -DATES - 1 'APR' 2003 / -/ -RPTSCHED - 0 0 0 0 0 0 2 2 2 0 1 1 0 1 1 0 0 / -DATES - 1 'MAY' 2003 / -/ -RPTSCHED - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 / -DATES - 1 'JUN' 2003 / -/ -DATES - 3 'JUN' 2003 / -/ -DATES - 1 'JUL' 2003 / -/ -RPTSCHED - 0 0 0 0 0 0 2 2 2 0 1 1 0 1 1 0 0 / -DATES - 10 'JUL' 2003 / -/ -RPTSCHED - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 / -DATES - 1 'AUG' 2003 / -/ -DATES - 10 'AUG' 2003 / -/ -RPTRST - 2 / -DATES - 12 'AUG' 2003 / -/ -RPTRST - 0 / -DATES - 1 'SEP' 2003 / -/ -DATES - 2 'SEP' 2003 / -/ -DATES - 10 'SEP' 2003 / -/ -DATES - 12 'SEP' 2003 / -/ -DATES - 13 'SEP' 2003 / -/ -DATES - 16 'SEP' 2003 / -/ -DATES - 1 'OCT' 2003 / -/ -RPTSCHED - 0 0 0 0 0 0 2 2 2 0 1 1 0 1 1 0 0 / -DATES - 23 'OCT' 2003 / -/ -RPTSCHED - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 / -DATES - 1 'NOV' 2003 / -/ -DATES - 18 'NOV' 2003 / -/ -DATES - 1 'DEC' 2003 / -/ -DATES - 8 'DEC' 2003 / -/ -DATES - 9 'DEC' 2003 / -/ -DATES - 18 'DEC' 2003 / -/ -DATES - 1 'JAN' 2004 / -/ -RPTSCHED - 0 0 0 0 0 0 2 2 2 0 1 1 0 1 1 0 0 / -DATES - 19 'JAN' 2004 / -/ -RPTSCHED - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 / -DATES - 20 'JAN' 2004 / -/ -DATES - 1 'FEB' 2004 / -/ -DATES - 1 'MAR' 2004 / -/ -DATES - 1 'APR' 2004 / -/ -RPTSCHED - 0 0 0 0 0 0 2 2 2 0 1 1 0 1 1 0 0 / -DATES - 1 'MAY' 2004 / -/ -RPTSCHED - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 / -DATES - 1 'JUN' 2004 / -/ -DATES - 1 'JUL' 2004 / -/ -RPTSCHED - 0 0 0 0 0 0 2 2 2 0 1 1 0 1 1 0 0 / -DATES - 3 'JUL' 2004 / -/ -RPTSCHED - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 / -DATES - 25 'JUL' 2004 / -/ -DATES - 1 'AUG' 2004 / -/ -DATES - 15 'AUG' 2004 / -/ -RPTRST - 2 / -DATES - 16 'AUG' 2004 / -/ -RPTRST - 0 / -DATES - 1 'SEP' 2004 / -/ -DATES - 20 'SEP' 2004 / -/ -DATES - 1 'OCT' 2004 / -/ -RPTSCHED - 0 0 0 0 0 0 2 2 2 0 1 1 0 1 1 0 0 / -DATES - 1 'NOV' 2004 / -/ -RPTSCHED - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 / -DATES - 1 'DEC' 2004 / -/ -DATES - 1 'JAN' 2005 / -/ -RPTSCHED - 0 0 0 0 0 0 2 2 2 0 1 1 0 1 1 0 0 / -DATES - 12 'JAN' 2005 / -/ -RPTSCHED - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 / -DATES - 26 'JAN' 2005 / -/ -DATES - 1 'FEB' 2005 / -/ -DATES - 1 'MAR' 2005 / -/ -DATES - 23 'MAR' 2005 / -/ -DATES - 24 'MAR' 2005 / -/ -DATES - 1 'APR' 2005 / -/ -RPTSCHED - 0 0 0 0 0 0 2 2 2 0 1 1 0 1 1 0 0 / -DATES - 24 'APR' 2005 / -/ -RPTSCHED - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 / -DATES - 1 'MAY' 2005 / -/ -DATES - 1 'JUN' 2005 / -/ -DATES - 2 'JUN' 2005 / -/ -DATES - 26 'JUN' 2005 / -/ -DATES - 1 'JUL' 2005 / -/ -RPTSCHED - 0 0 0 0 0 0 2 2 2 0 1 1 0 1 1 0 0 / -DATES - 10 'JUL' 2005 / -/ -RPTSCHED - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 / -DATES - 16 'JUL' 2005 / -/ -DATES - 29 'JUL' 2005 / -/ -DATES - 1 'AUG' 2005 / -/ -DATES - 3 'AUG' 2005 / -/ -DATES - 4 'AUG' 2005 / -/ -DATES - 1 'SEP' 2005 / -/ -DATES - 14 'SEP' 2005 / -/ -DATES - 1 'OCT' 2005 / -/ -RPTSCHED - 0 0 0 0 0 0 2 2 2 0 1 1 0 1 1 0 0 / -DATES - 1 'NOV' 2005 / -/ -RPTSCHED - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 / -GCONINJE - 'FIELD' 'WATER' 'RATE' 42000.000 9* / -/ -DATES - 1 'DEC' 2005 / -/ -DATES - 2 'DEC' 2005 / -/ -DATES - 30 'DEC' 2005 / -/ -DATES - 1 'JAN' 2006 / -/ -RPTSCHED - 0 0 0 0 0 0 2 2 2 0 1 1 0 1 1 0 0 / -DATES - 18 'JAN' 2006 / -/ -RPTSCHED - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 / -DATES - 1 'FEB' 2006 / -/ -DATES - 24 'FEB' 2006 / -/ -DATES - 1 'MAR' 2006 / -/ -DATES - 1 'APR' 2006 / -/ -RPTSCHED - 0 0 0 0 0 0 2 2 2 0 1 1 0 1 1 0 0 / -DATES - 25 'APR' 2006 / -/ -RPTSCHED - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 / -DATES - 1 'MAY' 2006 / -/ -DATES - 1 'JUN' 2006 / -/ -DATES - 1 'JUL' 2006 / -/ -RPTSCHED - 0 0 0 0 0 0 2 2 2 0 1 1 0 1 1 0 0 / -DATES - 1 'AUG' 2006 / -/ -RPTSCHED - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 / -DATES - 15 'AUG' 2006 / -/ -RPTRST - 2 / -DATES - 16 'AUG' 2006 / -/ -RPTRST - 0 / -DATES - 1 'SEP' 2006 / -/ -DATES - 14 'SEP' 2006 / -/ -DATES - 1 'OCT' 2006 / -/ -RPTSCHED - 0 0 0 0 0 0 2 2 2 0 1 1 0 1 1 0 0 / -DATES - 10 'OCT' 2006 / -/ -RPTSCHED - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 / -DATES - 15 'OCT' 2006 / -/ -DATES - 1 'NOV' 2006 / -/ -DATES - 9 'NOV' 2006 / -/ -DATES - 11 'NOV' 2006 / -/ -DATES - 17 'NOV' 2006 / -/ -DATES - 1 'DEC' 2006 / -/ -END diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/IOConfig/RPT_TEST2.DATA b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/IOConfig/RPT_TEST2.DATA deleted file mode 100644 index f3a9081094..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/IOConfig/RPT_TEST2.DATA +++ /dev/null @@ -1,814 +0,0 @@ -RUNSPEC - -DIMENS - 137 236 28 / - - -START -1 'JAN' 2000 / - -GRID -DX -905296*1 / -DY -905296*1 / -DZ -905296*1 / -TOPS -32332*1 / - -PORO - 905296*0.15 / - -SOLUTION - -RPTSOL - 'THPRES' 'FIP=2' / - -RPTRST - ALLPROPS RVSAT RSSAT PBPD NORST=1 / ---ALLPROPS --> fluid densities, viscosities , reciprocal formation volume factors and phase relative permeabilities ---NORST=1 --> output for visualization only - -SCHEDULE - - -RPTSCHED - 'RESTART=1' 'FIP=3' 'WELSPECS' 'WELLS=0' 'NEWTON=1' 'SUMMARY=1' 'CPU=1' / - - -RPTRST - BASIC=5 FREQ=6 ALLPROPS CONV=10 RVSAT RSSAT PBPD NORST=1 / ---ALLPROPS --> fluid densities, viscosities , reciprocal formation volume factors and phase relative permeabilities ---NORST=1 --> output for visualization only - -WELSPECS - 'F-14A' 'FIELD' 12 85 99.00 'OIL' 7* / -/ - -DATES - 3 'JAN' 2000 / -/ -DATES - 4 'JAN' 2000 / -/ -DATES - 5 'FEB' 2000 / -/ -DATES - 1 'MAR' 2000 / -/ -DATES - 1 'APR' 2000 / -/ -DATES - 1 'MAY' 2000 / -/ -DATES - 1 'JUN' 2000 / -/ -DATES - 1 'JUL' 2000 / -/ -DATES - 1 'AUG' 2000 / -/ -DATES - 11 'AUG' 2000 / -/ -DATES - 12 'AUG' 2000 / -/ -DATES - 1 'SEP' 2000 / -/ -DATES - 22 'SEP' 2000 / -/ - -DATES - 23 'SEP' 2000 / -/ -DATES - 24 'SEP' 2000 / -/ -DATES - 1 'OCT' 2000 / -/ -DATES - 7 'OCT' 2000 / -/ -DATES - 30 'OCT' 2000 / -/ -DATES - 1 'NOV' 2000 / -/ -DATES - 30 'NOV' 2000 / -/ -DATES - 1 'DEC' 2000 / -/ -DATES - 2 'DEC' 2000 / -/ -DATES - 8 'DEC' 2000 / -/ -DATES - 9 'DEC' 2000 / -/ -DATES - 10 'DEC' 2000 / -/ -DATES - 12 'DEC' 2000 / -/ -DATES - 1 'JAN' 2001 / -/ -RPTRST - 'FREQ=6' / -DATES - 15 'JAN' 2001 / -/ -DATES - 16 'JAN' 2001 / -/ -DATES - 1 'FEB' 2001 / -/ -DATES - 6 'FEB' 2001 / -/ -DATES - 1 'MAR' 2001 / -/ -DATES - 7 'MAR' 2001 / -/ -DATES - 1 'APR' 2001 / -/ -DATES - 13 'APR' 2001 / -/ -WTEST - 'F-14A' 7.000 'P' 2* / -/ -DATES - 15 'APR' 2001 / -/ -DATES - 1 'MAY' 2001 / -/ -DATES - 1 'JUN' 2001 / -/ -DATES - 2 'JUN' 2001 / -/ -DATES - 11 'JUN' 2001 / -/ -DATES - 12 'JUN' 2001 / -/ -DATES - 18 'JUN' 2001 / -/ -DATES - 19 'JUN' 2001 / -/ -DATES - 26 'JUN' 2001 / -/ -DATES - 1 'JUL' 2001 / -/ -DATES - 5 'JUL' 2001 / -/ -DATES - 1 'AUG' 2001 / -/ -DATES - 18 'AUG' 2001 / -/ -DATES - 21 'AUG' 2001 / -/ -DATES - 24 'AUG' 2001 / -/ -DATES - 1 'SEP' 2001 / -/ -DATES - 18 'SEP' 2001 / -/ -DATES - 27 'SEP' 2001 / -/ -DATES - 1 'OCT' 2001 / -/ -DATES - 2 'OCT' 2001 / -/ -DATES - 15 'OCT' 2001 / -/ -DATES - 1 'NOV' 2001 / -/ -DATES - 1 'DEC' 2001 / -/ -DATES - 2 'DEC' 2001 / -/ -DATES - 5 'DEC' 2001 / -/ -DATES - 1 'JAN' 2002 / -/ -DATES - 19 'JAN' 2002 / -/ -DATES - 1 'FEB' 2002 / -/ -DATES - 1 'MAR' 2002 / -/ -DATES - 6 'MAR' 2002 / -/ -DATES - 7 'MAR' 2002 / -/ -DATES - 28 'MAR' 2002 / -/ -DATES - 1 'APR' 2002 / -/ -DATES - 22 'APR' 2002 / -/ -DATES - 1 'MAY' 2002 / -/ -DATES - 4 'MAY' 2002 / -/ -DATES - 5 'MAY' 2002 / -/ -DATES - 26 'MAY' 2002 / -/ -DATES - 1 'JUN' 2002 / -/ -DATES - 2 'JUN' 2002 / -/ -DATES - 18 'JUN' 2002 / -/ -DATES - 19 'JUN' 2002 / -/ -DATES - 28 'JUN' 2002 / -/ -DATES - 1 'JUL' 2002 / -/ -DATES - 3 'JUL' 2002 / -/ -DATES - 19 'JUL' 2002 / -/ -DATES - 20 'JUL' 2002 / -/ -DATES - 1 'AUG' 2002 / -/ -DATES - 1 'SEP' 2002 / -/ -DATES - 1 'OCT' 2002 / -/ -DATES - 1 'NOV' 2002 / -/ -DATES - 1 'DEC' 2002 / -/ -DATES - 6 'DEC' 2002 / -/ -DATES - 1 'JAN' 2003 / -/ -DATES - 22 'JAN' 2003 / -/ -DATES - 23 'JAN' 2003 / -/ -DATES - 1 'FEB' 2003 / -/ -DATES - 1 'MAR' 2003 / -/ -DATES - 1 'APR' 2003 / -/ -DATES - 30 'APR' 2003 / -/ -DATES - 1 'MAY' 2003 / -/ -DATES - 1 'JUN' 2003 / -/ -DATES - 26 'JUN' 2003 / -/ -DATES - 1 'JUL' 2003 / -/ -DATES - 4 'JUL' 2003 / -/ -DATES - 1 'AUG' 2003 / -/ -DATES - 27 'AUG' 2003 / -/ -DATES - 28 'AUG' 2003 / -/ -DATES - 1 'SEP' 2003 / -/ -DATES - 1 'OCT' 2003 / -/ -DATES - 1 'NOV' 2003 / -/ -DATES - 3 'NOV' 2003 / -/ -DATES - 1 'DEC' 2003 / -/ -DATES - 1 'JAN' 2004 / -/ -DATES - 26 'JAN' 2004 / -/ -DATES - 1 'FEB' 2004 / -/ -DATES - 13 'FEB' 2004 / -/ -DATES - 1 'MAR' 2004 / -/ -DATES - 11 'MAR' 2004 / -/ -DATES - 18 'MAR' 2004 / -/ -DATES - 1 'APR' 2004 / -/ -DATES - 19 'APR' 2004 / -/ -DATES - 28 'APR' 2004 / -/ -DATES - 29 'APR' 2004 / -/ -DATES - 1 'MAY' 2004 / -/ -DATES - 2 'MAY' 2004 / -/ -DATES - 21 'MAY' 2004 / -/ -DATES - 22 'MAY' 2004 / -/ -DATES - 24 'MAY' 2004 / -/ -DATES - 25 'MAY' 2004 / -/ -DATES - 1 'JUN' 2004 / -/ -DATES - 30 'JUN' 2004 / -/ -DATES - 1 'JUL' 2004 / -/ -DATES - 1 'AUG' 2004 / -/ -DATES - 1 'SEP' 2004 / -/ -DATES - 1 'OCT' 2004 / -/ -DATES - 11 'OCT' 2004 / -/ -DATES - 12 'OCT' 2004 / -/ -DATES - 1 'NOV' 2004 / -/ -DATES - 1 'DEC' 2004 / -/ -DATES - 1 'JAN' 2005 / -/ -DATES - 1 'FEB' 2005 / -/ -DATES - 21 'FEB' 2005 / -/ -DATES - 27 'FEB' 2005 / -/ -DATES - 1 'MAR' 2005 / -/ -DATES - 1 'APR' 2005 / -/ -DATES - 1 'MAY' 2005 / -/ -DATES - 31 'MAY' 2005 / -/ -DATES - 1 'JUN' 2005 / -/ -DATES - 13 'JUN' 2005 / -/ -DATES - 1 'JUL' 2005 / -/ -DATES - 5 'JUL' 2005 / -/ -DATES - 8 'JUL' 2005 / -/ -DATES - 1 'AUG' 2005 / -/ -DATES - 1 'SEP' 2005 / -/ -DATES - 5 'SEP' 2005 / -/ -DATES - 20 'SEP' 2005 / -/ -DATES - 21 'SEP' 2005 / -/ -DATES - 1 'OCT' 2005 / -/ -DATES - 1 'NOV' 2005 / -/ -DATES - 1 'DEC' 2005 / -/ -DATES - 27 'DEC' 2005 / -/ -DATES - 1 'JAN' 2006 / -/ -DATES - 1 'FEB' 2006 / -/ -DATES - 1 'MAR' 2006 / -/ -DATES - 1 'APR' 2006 / -/ -DATES - 1 'MAY' 2006 / -/ -DATES - 1 'JUN' 2006 / -/ -DATES - 1 'JUL' 2006 / -/ -DATES - 1 'AUG' 2006 / -/ -DATES - 1 'SEP' 2006 / -/ -DATES - 1 'OCT' 2006 / -/ -DATES - 1 'NOV' 2006 / -/ -DATES - 1 'DEC' 2006 / -/ -DATES - 1 'JAN' 2007 / -/ -DATES - 8 'JAN' 2007 / -/ -DATES - 9 'JAN' 2007 / -/ -DATES - 1 'FEB' 2007 / -/ -DATES - 1 'MAR' 2007 / -/ -DATES - 1 'APR' 2007 / -/ -DATES - 1 'MAY' 2007 / -/ -DATES - 1 'JUN' 2007 / -/ -DATES - 1 'JUL' 2007 / -/ -DATES - 1 'AUG' 2007 / -/ -DATES - 1 'SEP' 2007 / -/ -DATES - 1 'OCT' 2007 / -/ -DATES - 1 'NOV' 2007 / -/ -DATES - 1 'DEC' 2007 / -/ -DATES - 1 'JAN' 2008 / -/ -DATES - 1 'FEB' 2008 / -/ -DATES - 1 'MAR' 2008 / -/ -DATES - 1 'APR' 2008 / -/ -DATES - 1 'MAY' 2008 / -/ -DATES - 21 'MAY' 2008 / -/ -DATES - 29 'MAY' 2008 / -/ -DATES - 1 'JUN' 2008 / -/ -DATES - 1 'JUL' 2008 / -/ -DATES - 1 'AUG' 2008 / -/ -DATES - 1 'SEP' 2008 / -/ -DATES - 1 'OCT' 2008 / -/ -DATES - 1 'NOV' 2008 / -/ -DATES - 1 'DEC' 2008 / -/ -DATES - 1 'JAN' 2009 / -/ -DATES - 1 'FEB' 2009 / -/ -DATES - 1 'MAR' 2009 / -/ -DATES - 1 'APR' 2009 / -/ -DATES - 1 'MAY' 2009 / -/ -DATES - 1 'JUN' 2009 / -/ -DATES - 1 'JUL' 2009 / -/ -DATES - 1 'AUG' 2009 / -/ -DATES - 1 'SEP' 2009 / -/ -DATES - 1 'OCT' 2009 / -/ -DATES - 1 'NOV' 2009 / -/ -DATES - 1 'DEC' 2009 / -/ -DATES - 1 'JAN' 2010 / -/ -DATES - 1 'FEB' 2010 / -/ -DATES - 1 'MAR' 2010 / -/ -DATES - 1 'APR' 2010 / -/ -DATES - 1 'MAY' 2010 / -/ -DATES - 1 'JUN' 2010 / -/ -DATES - 1 'JUL' 2010 / -/ -DATES - 1 'AUG' 2010 / -/ -DATES - 1 'SEP' 2010 / -/ -DATES - 1 'OCT' 2010 / -/ -DATES - 1 'NOV' 2010 / -/ -DATES - 1 'DEC' 2010 / -/ -DATES - 1 'JAN' 2011 / -/ -DATES - 1 'FEB' 2011 / -/ -DATES - 1 'MAR' 2011 / -/ -DATES - 1 'APR' 2011 / -/ -DATES - 1 'MAY' 2011 / -/ -DATES - 1 'JUN' 2011 / -/ -DATES - 1 'JUL' 2011 / -/ -DATES - 1 'AUG' 2011 / -/ -DATES - 1 'SEP' 2011 / -/ -DATES - 1 'OCT' 2011 / -/ -DATES - 1 'NOV' 2011 / -/ -DATES - 1 'DEC' 2011 / -/ -DATES - 1 'JAN' 2012 / -/ -DATES - 1 'FEB' 2012 / -/ -DATES - 1 'MAR' 2012 / -/ -DATES - 1 'APR' 2012 / -/ -DATES - 1 'MAY' 2012 / -/ -DATES - 1 'JUN' 2012 / -/ -DATES - 1 'JUL' 2012 / -/ -DATES - 1 'AUG' 2012 / -/ -DATES - 1 'SEP' 2012 / -/ -DATES - 1 'OCT' 2012 / -/ -DATES - 1 'NOV' 2012 / -/ -DATES - 1 'DEC' 2012 / -/ -DATES - 1 'JAN' 2013 / -/ -DATES - 1 'FEB' 2013 / -/ -DATES - 1 'MAR' 2013 / -/ -DATES - 1 'APR' 2013 / -/ -DATES - 1 'MAY' 2013 / -/ - ---Write save file at end of history -SAVE - ---there must be a TSTEP or DATES between SAVE and END (otherwise no SAVE is created) -TSTEP - 1 / - -END - diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/IOConfig/SPE1CASE2.DATA b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/IOConfig/SPE1CASE2.DATA deleted file mode 100644 index 984c732fbb..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/IOConfig/SPE1CASE2.DATA +++ /dev/null @@ -1,156 +0,0 @@ --- This reservoir simulation deck is a simplified version of SPE1CASE2.DATA --- found in opm-data: https://github.com/OPM/opm-data/blob/master/spe1/SPE1CASE2.DATA - - --- This reservoir simulation deck is made available under the Open Database --- License: http://opendatacommons.org/licenses/odbl/1.0/. Any rights in --- individual contents of the database are licensed under the Database Contents --- License: http://opendatacommons.org/licenses/dbcl/1.0/ - --- Copyright (C) 2015 Statoil - --- This simulation is based on the data given in --- 'Comparison of Solutions to a Three-Dimensional --- Black-Oil Reservoir Simulation Problem' by Aziz S. Odeh, --- Journal of Petroleum Technology, January 1981 - ---------------------------------------------------------------------------- ------------------------- SPE1 - CASE 2 ------------------------------------ ---------------------------------------------------------------------------- - -RUNSPEC --- ------------------------------------------------------------------------- - -TITLE - SPE1 - CASE 2 - -DIMENS - 10 10 3 / - --- The number of equilibration regions is inferred from the EQLDIMS --- keyword. -EQLDIMS -/ - --- The number of PVTW tables is inferred from the TABDIMS keyword; --- when no data is included in the keyword the default values are used. -TABDIMS -/ - - -OIL -GAS -WATER -DISGAS --- As seen from figure 4 in Odeh, GOR is increasing with time, --- which means that dissolved gas is present - - -FIELD - -START - 1 'JAN' 2015 / - -GRID --- ------------------------------------------------------------------------- - - -DX --- There are in total 300 cells with length 1000ft in x-direction - 300*1000 / -DY --- There are in total 300 cells with length 1000ft in y-direction - 300*1000 / -DZ --- The layers are 20, 30 and 50 ft thick, in each layer there are 100 cells - 100*20 100*30 100*50 / - -TOPS --- The depth of the top of each grid block - 100*8325 / - -PORO --- Constant porosity of 0.3 throughout all 300 grid cells - 300*0.3 / - -PERMX --- The layers have perm. 500mD, 50mD and 200mD, respectively. - 100*500 100*50 100*200 / - -PERMY --- Equal to PERMX - 100*500 100*50 100*200 / - -PERMZ --- Cannot find perm. in z-direction in Odeh's paper --- For the time being, we will assume PERMZ equal to PERMX and PERMY: - 100*500 100*50 100*200 / - - - -SCHEDULE --- ------------------------------------------------------------------------- -RPTSCHED - 'PRES' 'SGAS' 'RS' 'WELLS' / - - --- If no resolution (i.e. case 1), the two following lines must be added: ---DRSDT --- 0 / --- Since this is Case 2, the two lines above have been commented out. --- if DRSDT is set to 0, GOR cannot rise and free gas does not --- dissolve in undersaturated oil -> constant bubble point pressure - -WELSPECS --- Item #: 1 2 3 4 5 6 - 'PROD' 'G1' 10 10 8400 'OIL' / - 'INJ' 'G1' 1 1 8335 'GAS' / -/ --- Coordinates in item 3-4 are retrieved from Odeh's figure 1 and 2 --- Note that the depth at the midpoint of the well grid blocks --- has been used as reference depth for bottom hole pressure in item 5 - -COMPDAT --- Item #: 1 2 3 4 5 6 7 8 9 - 'PROD' 10 10 3 3 'OPEN' 1* 1* 0.5 / - 'INJ' 1 1 1 1 'OPEN' 1* 1* 0.5 / -/ --- Coordinates in item 2-5 are retreived from Odeh's figure 1 and 2 --- Item 9 is the well bore internal diameter, --- the radius is given to be 0.25ft in Odeh's paper - - -WCONPROD --- Item #:1 2 3 4 5 9 - 'PROD' 'OPEN' 'ORAT' 20000 4* 1000 / -/ --- It is stated in Odeh's paper that the maximum oil prod. rate --- is 20 000stb per day which explains the choice of value in item 4. --- The items > 4 are defaulted with the exception of item 9, --- the BHP lower limit, which is given to be 1000psia in Odeh's paper - -WCONINJE --- Item #:1 2 3 4 5 6 7 - 'INJ' 'GAS' 'OPEN' 'RATE' 100000 1* 9014 / -/ --- Stated in Odeh that gas inj. rate (item 5) is 100MMscf per day --- BHP upper limit (item 7) should not be exceeding the highest --- pressure in the PVT table=9014.7psia (default is 100 000psia) - -TSTEP ---Advance the simulater once a month for TEN years: -31 28 31 30 31 30 31 31 30 31 30 31 -31 28 31 30 31 30 31 31 30 31 30 31 -31 28 31 30 31 30 31 31 30 31 30 31 -31 28 31 30 31 30 31 31 30 31 30 31 -31 28 31 30 31 30 31 31 30 31 30 31 -31 28 31 30 31 30 31 31 30 31 30 31 -31 28 31 30 31 30 31 31 30 31 30 31 -31 28 31 30 31 30 31 31 30 31 30 31 -31 28 31 30 31 30 31 31 30 31 30 31 -31 28 31 30 31 30 31 31 30 31 30 31 / - ---Advance the simulator once a year for TEN years: ---10*365 / - -END diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/IOConfig/SPE9_END.DATA b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/IOConfig/SPE9_END.DATA deleted file mode 100644 index 3534ea0e7a..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/IOConfig/SPE9_END.DATA +++ /dev/null @@ -1,174 +0,0 @@ --- This reservoir simulation deck is a simplified version of SPE1CASE2.DATA --- found in opm-data: https://github.com/OPM/opm-data/blob/master/spe1/SPE1CASE2.DATA - - --- This reservoir simulation deck is made available under the Open Database --- License: http://opendatacommons.org/licenses/odbl/1.0/. Any rights in --- individual contents of the database are licensed under the Database Contents --- License: http://opendatacommons.org/licenses/dbcl/1.0/ - --- Copyright (C) 2015 Statoil - --- This simulation is based on the data given in --- 'Comparison of Solutions to a Three-Dimensional --- Black-Oil Reservoir Simulation Problem' by Aziz S. Odeh, --- Journal of Petroleum Technology, January 1981 - ---------------------------------------------------------------------------- ------------------------- SPE1 - CASE 2 ------------------------------------ ---------------------------------------------------------------------------- - -RUNSPEC --- ------------------------------------------------------------------------- - -TITLE - SPE1 - CASE 2 - -DIMENS - 10 10 3 / - --- The number of equilibration regions is inferred from the EQLDIMS --- keyword. -EQLDIMS -/ - --- The number of PVTW tables is inferred from the TABDIMS keyword; --- when no data is included in the keyword the default values are used. -TABDIMS -/ - - -OIL -GAS -WATER -DISGAS --- As seen from figure 4 in Odeh, GOR is increasing with time, --- which means that dissolved gas is present - - -FIELD - -START - 1 'JAN' 2015 / - -GRID --- ------------------------------------------------------------------------- - - -DX --- There are in total 300 cells with length 1000ft in x-direction - 300*1000 / -DY --- There are in total 300 cells with length 1000ft in y-direction - 300*1000 / -DZ --- The layers are 20, 30 and 50 ft thick, in each layer there are 100 cells - 100*20 100*30 100*50 / - -TOPS --- The depth of the top of each grid block - 100*8325 / - -PORO --- Constant porosity of 0.3 throughout all 300 grid cells - 300*0.3 / - -PERMX --- The layers have perm. 500mD, 50mD and 200mD, respectively. - 100*500 100*50 100*200 / - -PERMY --- Equal to PERMX - 100*500 100*50 100*200 / - -PERMZ --- Cannot find perm. in z-direction in Odeh's paper --- For the time being, we will assume PERMZ equal to PERMX and PERMY: - 100*500 100*50 100*200 / - - - -SCHEDULE - -RPTRST - 'BASIC=4' / -WELSPECS --- Column 3: I-value of well head or heel --- Column 4: J-value of well head or heel --- - these coordinates are listed in Killough's dataset --- Column 5: ref. depth of BHP (ft) --- - stated to be 9110ft in Killough --- Column 6: preferred phase for well --- - should be water for injector and oil for producers --- Column 7: drainage radius for calc. of productivity or --- injectivity indices (ft) --- - stated to be 60ft in Killough - --- #: 1 2 3 4 5 6 7 - 'INJE1' 'G' 1 1 9110 'WATER' 60 / - 'PRODU2' 'G' 2 2 9110 'OIL' 60 / - / - -COMPDAT --- Column 2: I-value of connecting grid block --- Column 3: J-value of connecting grid block --- Column 4: K-value of upper connecting grid block --- Column 5: K-value of lower connecting grid block --- - these coordinates are listed in Killough's dataset --- Column 9: well bore diameter --- - Killough says radius is 0.5ft - --- #: 1 2 3 4 5 6 7 8 9 - 'INJE1' 1 1 1 1 'OPEN' 1* 1* 1 / - 'PRODU2' 2 2 2 2 'OPEN' 1* 1* 1 / -/ - -WCONINJE --- Killough says the water injector is set to a max rate of --- 5000 STBW per D with a max BHP of 4000psia at a reference --- depth of 9110ft subsea: --- #: 1 2 3 4 5 7 - 'INJE1' 'WATER' 'OPEN' 'RATE' 5000 1* 4000 / -/ - -WCONPROD --- Killough says the max oil rate for all producers is set to --- 1500 STBO per D at time zero and that the min flowing BHP --- is set to 1000psia (with a ref. depth of 9110ft --- for this pressure in all wells): --- #: 1 2 3 4 9 - 'PRODU*' 'OPEN' 'ORAT' 1500 4* 1000 / --- Here, the wildcard '*' has been used to indicate that this applies --- to all producers; PRODU1-PRODU25. -/ - -TSTEP -30*10 / - -END - --- At 300 days, the max oil rate for all producers is lowered --- to 100 STBO per D: -WCONPROD --- #: 1 2 3 4 9 - 'PRODU*' 'OPEN' 'ORAT' 100 4* 1000 / -/ - -TSTEP -6*10 / - --- At 360 days, the max oil rate for all producers is changed --- back to 1500 STBO per D: -WCONPROD --- #: 1 2 3 4 9 - 'PRODU*' 'OPEN' 'ORAT' 1500 4* 1000 / -/ - -TSTEP -54*10 / --- End of simulation at 900 days - -END - - - diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/LGR/LGR.DATA b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/LGR/LGR.DATA deleted file mode 100644 index b256981351..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/LGR/LGR.DATA +++ /dev/null @@ -1,13 +0,0 @@ -RUNSPEC - --- MAX MAX MAX MAX MAX LSTACK PRESS MAX --- LGR CELLS MCOARS MAMALG MXLALG OPT NCHCOR -LGR - 1* 1* 1* 1 1 1 1* 1* / - -LGR - 1* 1* 1* / - -LGR - / - diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/MULTREGT/MULTREGT b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/MULTREGT/MULTREGT deleted file mode 100644 index 45cb89ee0f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/MULTREGT/MULTREGT +++ /dev/null @@ -1,192 +0,0 @@ -MULTREGT - 2 1 1.0000000000 / - 3 1 1.0000000000 / - 3 2 1.0000000000 / - 4 1 0.0050000000 / - 4 2 1.0000000000 / - 4 3 1.0000000000 / - 5 1 0.0000000000 / - 5 2 0.0000000000 / - 5 3 0.0000000000 / - 5 4 0.0000000000 / - 6 1 0.0000000000 / - 6 2 0.0000000000 / - 6 3 0.0000000000 / - 6 4 0.0000000000 / - 6 5 1.0000000000 / - 7 1 0.0000000000 / - 7 2 0.0000000000 / - 7 3 0.0000000000 / - 7 4 0.0000000000 / - 7 5 1.0000000000 / - 7 6 0.0500000000 / - 8 1 0.0000000000 / - 8 2 0.0000000000 / - 8 3 0.0000000000 / - 8 4 0.0000000000 / - 8 5 0.0100000000 / - 8 6 1.0000000000 / - 8 7 1.0000000000 / - 9 1 0.0000000000 / - 9 2 0.0000000000 / - 9 3 0.0000000000 / - 9 4 0.0000000000 / - 9 5 1.0000000000 / - 9 6 1.0000000000 / - 9 7 1.0000000000 / - 9 8 1.0000000000 / - 10 1 0.0000000000 / - 10 2 0.0000000000 / - 10 3 0.0000000000 / - 10 4 0.0000000000 / - 10 5 1.0000000000 / - 10 6 1.0000000000 / - 10 7 1.0000000000 / - 10 8 1.0000000000 / - 10 9 1.0000000000 / - 11 1 0.0000000000 / - 11 2 0.0000000000 / - 11 3 0.0000000000 / - 11 4 0.0000000000 / - 11 5 1.0000000000 / - 11 6 1.0000000000 / - 11 7 1.0000000000 / - 11 8 1.0000000000 / - 11 9 1.0000000000 / - 11 10 1.0000000000 / - 12 1 0.0000000000 / - 12 2 0.0000000000 / - 12 3 0.0000000000 / - 12 4 0.0000000000 / - 12 5 1.0000000000 / - 12 6 1.0000000000 / - 12 7 1.0000000000 / - 12 8 1.0000000000 / - 12 9 0.0100000000 / - 12 10 1.0000000000 / - 12 11 1.0000000000 / - 13 1 0.0000000000 / - 13 2 0.0000000000 / - 13 3 0.0000000000 / - 13 4 0.0000000000 / - 13 5 0.1000000000 / - 13 6 0.1000000000 / - 13 7 0.1000000000 / - 13 8 0.1000000000 / - 13 9 1.0000000000 / - 13 10 1.0000000000 / - 13 11 1.0000000000 / - 13 12 1.0000000000 / - 14 1 0.0000000000 / - 14 2 0.0000000000 / - 14 3 0.0000000000 / - 14 4 0.0000000000 / - 14 5 0.1000000000 / - 14 6 1.0000000000 / - 14 7 0.1000000000 / - 14 8 0.1000000000 / - 14 9 1.0000000000 / - 14 10 100.0000000000 / - 14 11 1.0000000000 / - 14 12 1.0000000000 / - 14 13 1.0000000000 / - 15 1 0.0000000000 / - 15 2 0.0000000000 / - 15 3 0.0000000000 / - 15 4 0.0000000000 / - 15 5 0.1000000000 / - 15 6 0.1000000000 / - 15 7 0.1000000000 / - 15 8 0.1000000000 / - 15 9 1.0000000000 / - 15 10 1.0000000000 / - 15 11 1.0000000000 / - 15 12 1.0000000000 / - 15 13 1.0000000000 / - 15 14 1.0000000000 / - 16 1 0.0000000000 / - 16 2 0.0000000000 / - 16 3 0.0000000000 / - 16 4 0.0000000000 / - 16 5 0.0100000000 / - 16 6 0.1000000000 / - 16 7 0.1000000000 / - 16 8 0.1000000000 / - 16 9 1.0000000000 / - 16 10 1.0000000000 / - 16 11 1.0000000000 / - 16 12 1.0000000000 / - 16 13 0.0100000000 / - 16 14 1.0000000000 / - 16 15 1.0000000000 / - 17 1 0.0000000000 / - 17 2 0.0000000000 / - 17 3 0.0000000000 / - 17 4 0.0000000000 / - 17 5 0.0000000000 / - 17 6 0.0000000000 / - 17 7 0.0000000000 / - 17 8 0.0000000000 / - 17 9 0.0010000000 / - 17 10 0.0000000000 / - 17 11 0.0000000000 / - 17 12 0.0000000000 / - 17 13 0.0008000000 / - 17 14 0.0000000000 / - 17 15 0.0000000000 / - 17 16 0.0000000000 / - 18 1 0.0000000000 / - 18 2 0.0000000000 / - 18 3 0.0000000000 / - 18 4 0.0000000000 / - 18 5 0.0000000000 / - 18 6 0.0000000000 / - 18 7 0.0000000000 / - 18 8 0.0000000000 / - 18 9 0.0000000000 / - 18 10 1.0000000000 / - 18 11 0.0000000000 / - 18 12 0.0000000000 / - 18 13 0.0000000000 / - 18 14 0.1000000000 / - 18 15 0.0000000000 / - 18 16 0.0000000000 / - 18 17 1.0000000000 / - 19 1 0.0000000000 / - 19 2 0.0000000000 / - 19 3 0.0000000000 / - 19 4 0.0000000000 / - 19 5 0.0000000000 / - 19 6 0.0000000000 / - 19 7 0.0000000000 / - 19 8 0.0000000000 / - 19 9 0.0000000000 / - 19 10 0.0000000000 / - 19 11 0.0010000000 / - 19 12 0.0000000000 / - 19 13 0.0000000000 / - 19 14 0.0000001 / - 19 15 0.0500000000 / - 19 16 0.0000000000 / - 19 17 1.0000000000 / - 19 18 1.0000000000 / - 20 1 0.0000000000 / - 20 2 0.0000000000 / - 20 3 0.0000000000 / - 20 4 0.0000000000 / - 20 5 0.0000000000 / - 20 6 0.0000000000 / - 20 7 0.0000000000 / - 20 8 0.0000000000 / - 20 9 0.0000000000 / - 20 10 0.0000000000 / - 20 11 0.0000000000 / - 20 12 1.0000000000 / - 20 13 0.0000000000 / - 20 14 0.0000000000 / - 20 15 0.0000000000 / - 20 16 0.0010000000 / - 20 17 0.1000000000 / - 20 18 1.0000000000 / - 20 19 1.0000000000 / -/ diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/MULTREGT/MULTREGT.DATA b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/MULTREGT/MULTREGT.DATA deleted file mode 100644 index d25b468f9e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/MULTREGT/MULTREGT.DATA +++ /dev/null @@ -1,57 +0,0 @@ -RUNSPEC - -DIMENS -2 2 2 / - -GRID -DX -8*0.25 / - -DYV -2*0.25 / - -DZ -8*0.25 / - -TOPS -4*0.25 / - -FLUXNUM -1 2 -1 2 -3 4 -3 4 -/ - -MULTNUM -1 2 -1 2 -3 4 -3 4 -/ - -MULTREGT -1 2 0.10 X NONNC M / -3 4 0.50 X NNC M / -/ - -MULTREGT -2 1 0.20 X ALL M / -/ - -MULTREGT -1 3 1.50 XYZ ALL F / -/ - - -MULTREGT -2 4 0.75 Z ALL M / -- This record should be completely overwritten by the next. -2 4 2.50 XY ALL F / -4 2 0.6 XYZ ALL F / -/ - -PORO - 8*0.15 / - -EDIT - diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/NNC/NNC.DATA b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/NNC/NNC.DATA deleted file mode 100644 index 4cb2c8d1f8..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/NNC/NNC.DATA +++ /dev/null @@ -1,40 +0,0 @@ -RUNSPEC - -OIL -GAS -WATER - - -DIMENS - 10 10 1 / - -GRID - -DXV -10*1000.0 -/ - -DYV -10*1000.0 -/ - -DZ -100*20.0 -/ - -TOPS -100*10 -/ - -PORO - 100*0.15 / - -NNC -1 1 1 2 1 1 0.5 / -1 1 1 1 2 1 1.0 / -/ - -NNC -1 1 1 2 1 1 0.5 / -1 2 1 1 2 1 1.0 / -/ diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/NNC/noNNC.DATA b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/NNC/noNNC.DATA deleted file mode 100644 index 0f4f422be3..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/NNC/noNNC.DATA +++ /dev/null @@ -1,30 +0,0 @@ -RUNSPEC - -OIL -GAS -WATER - - -DIMENS - 10 10 1 / - -GRID - -DXV -10*1000.0 -/ - -DYV -10*1000.0 -/ - -DZ -100*20.0 -/ - -TOPS -100*10 -/ - -PORO - 100*0.15 / \ No newline at end of file diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/POLYMER/POLY.inc b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/POLYMER/POLY.inc deleted file mode 100644 index a421206e98..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/POLYMER/POLY.inc +++ /dev/null @@ -1,55 +0,0 @@ --- This reservoir simulation deck is made available under the Open Database --- License: http://opendatacommons.org/licenses/odbl/1.0/. Any rights in --- individual contents of the database are licensed under the Database Contents --- License: http://opendatacommons.org/licenses/dbcl/1.0/ - --- Copyright (C) 2015 Statoil --- Copyright (C) 2015 SINTEF ICT, Applied Mathematics -RUNSPEC - -TABDIMS - 1 1 / - -EQLDIMS - / - - -REGDIMS - 9* 1 / - - -PROPS -NOECHO -PLYVISC -0 1.0 -0.5 3.0 -1.0 6.0 -1.5 12.0 -2.0 24.0 -3.0 48.0 / - - -PLYROCK ---IPV RRF dens AI max ads - 0.05 1.2 2500 2 0.000025 / - - -PLYADS --- conc adsorb-conc - 0.000 0.000000 - 0.250 0.000012 - 0.500 0.000016 - 0.750 0.000019 - 1.000 0.000020 - 1.250 0.000021 - 1.500 0.000023 - 1.750 0.000025 - 3.000 0.000025 / - -PLMIXPAR - 1.0 / - -PLYMAX - 3.00 0 / - -ECHO diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/POLYMER/plyads.data b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/POLYMER/plyads.data deleted file mode 100644 index 28cea6fa10..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/POLYMER/plyads.data +++ /dev/null @@ -1,16 +0,0 @@ -TABDIMS --- NTSFUN NTPVT NSSFUN NPPVT NTFIP NRPVT - 1 1 100 50 1 / - -PLYADS -0.00 0.0 -0.25 0.000010 -0.50 0.000018 -0.75 0.000023 -1.00 0.000027 -1.25 0.000030 -1.50 0.000030 -1.75 0.000030 -2.00 0.000030 -3.00 0.000030 / - diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/POLYMER/plyadss.data b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/POLYMER/plyadss.data deleted file mode 100644 index bc10ca05f1..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/POLYMER/plyadss.data +++ /dev/null @@ -1,18 +0,0 @@ -TABDIMS --- NTSFUN NTPVT NSSFUN NPPVT NTFIP NRPVT - 3 1 100 50 1 / - -PLYADSS -0.00 0.0 0 1 2 3 / -1.00 1.0 0 10 20 30 / -2.00 2.0 0 100 200 300 / -/ -6.00 6.0 0 1 2 3 / -7.00 7.0 0 10 20 30 / -8.00 8.0 0 100 200 300 / -/ -3.00 4.0 0 1 2 3 / -4.00 4.0 0 10 20 30 / -5.00 5.0 0 100 200 300 / -/ - diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/POLYMER/plydhflf.data b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/POLYMER/plydhflf.data deleted file mode 100644 index 5b11325c8f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/POLYMER/plydhflf.data +++ /dev/null @@ -1,10 +0,0 @@ -TABDIMS --- NTSFUN NTPVT NSSFUN NPPVT NTFIP NRPVT - 1 1 100 50 1 / - - -PLYDHFLF - 0.0 365.0 - 50.0 240.0 - 150.0 200.0 / - diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/POLYMER/plyshlog.data b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/POLYMER/plyshlog.data deleted file mode 100644 index 87d27979a8..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/POLYMER/plyshlog.data +++ /dev/null @@ -1,14 +0,0 @@ --- THE TABDIMS IS NOT SUPPORTED FOR PLYSHLOG YET. --- TABDIMS --- NTSFUN NTPVT NSSFUN NPPVT NTFIP NRPVT --- 1 1 100 50 1 / - -PLYSHLOG - 1.0 3.0 -/ - -0.0000001 1.0 -1.0 1.2 -1000.0 2.4 -/ - diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/POLYMER/plyvisc.data b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/POLYMER/plyvisc.data deleted file mode 100644 index 13a03e655d..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/POLYMER/plyvisc.data +++ /dev/null @@ -1,8 +0,0 @@ -TABDIMS --- NTSFUN NTPVT NSSFUN NPPVT NTFIP NRPVT - 1 1 100 50 1 / - - -PLYVISC - 0.0 1.0 - 1.25 30.0 / diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/PORO/PORO1 b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/PORO/PORO1 deleted file mode 100644 index 4382e08a69..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/PORO/PORO1 +++ /dev/null @@ -1,95 +0,0 @@ -PERMX - 1 2 3 997*10 -/ - - -PORO - 0.233782813 0.251224369 0.29638353 0.29790169 0.169350415 - 0.0517521128 0.00144939369 0.0151031613 0.05431756 0.0407604612 - 0.0103957523 0.0100668613 0.0490571633 0.104077779 0.10558667 - 0.201115698 0.17863065 0.0653175786 0.0190387126 0.00337611581 - 0.0063609276 0.0114936661 0.0172659531 0.0805263668 0.134678334 - 0.176294863 0.192887321 0.140515864 0.101473689 0.0844900534 - 0.17002067 0.143918887 0.228476837 0.276182383 0.256196886 - 0.184133664 0.136353821 0.144517705 0.144700915 0.202955201 - 0.240127429 0.317178339 0.319688618 0.251767546 0.160828486 - 0.0956103355 0.037380781 0.0165337157 0.0783403516 0.0808456764 - 0.0912637711 0.0973924324 0.103984341 0.156838894 0.210713655 - 0.253899187 0.242051423 0.185285807 0.0716104209 0.00610434311 - 0.000411647314 0.00933679566 0.0886785686 0.185810968 0.239035457 - 0.257317334 0.257221431 0.184892476 0.12399739 0.0531515479 - 0.121335335 0.103025019 0.187892184 0.229996994 0.24713178 - 0.275338888 0.253360033 0.259308547 0.304893434 0.303201646 - 0.221585765 0.305705786 0.284208864 0.238151267 0.175238907 - 0.233501226 0.170360968 0.0841259062 0.132959858 0.196834058 - 0.201730013 0.180607021 0.24763459 0.280171901 0.246962205 - 0.255853683 0.205411643 0.119471915 0.115516089 0.0203874856 - 0.00532156881 0.0640730336 0.140209481 0.245134518 0.245983586 - 0.247837856 0.236739933 0.145315439 0.0748118684 0.0426140353 - 0.0649707466 0.0420954116 0.146764234 0.20062232 0.224874943 - 0.254481554 0.282053798 0.324059844 0.310452819 0.315820634 - 0.210584491 0.291307151 0.302948236 0.341297835 0.330804944 - 0.309543997 0.281588584 0.20416452 0.220917195 0.273620009 - 0.259581447 0.274220228 0.311186552 0.312752187 0.302147001 - 0.241427705 0.160514459 0.0834907666 0.0833296999 0.0262788143 - 0.00459888205 0.0151637336 0.0557102337 0.130881637 0.13288027 - 0.137242123 0.127250269 0.0870473608 0.0580857433 0.0789224729 - 0.046535816 0.0501726568 0.100927673 0.110647544 0.113335721 - 0.111934848 0.209281906 0.268807977 0.279664367 0.326134771 - 0.25852263 0.33894369 0.374676973 0.400080621 0.352914482 - 0.295502722 0.265623331 0.28812775 0.292017907 0.282535464 - 0.272598714 0.303617328 0.322461724 0.285990119 0.264858067 - 0.181161433 0.159774289 0.113000199 0.105926409 0.0276138727 - 0.0174431559 0.0233534891 0.0517952517 0.0618142448 0.102154315 - 0.171060652 0.0868899971 0.0661903769 0.167647243 0.261588633 - 0.262981534 0.223184273 0.217965215 0.164199457 0.124516942 - 0.125011116 0.096620135 0.145295113 0.244747683 0.29181239 - 0.301577836 0.331127107 0.373395115 0.376733631 0.340226501 - 0.30070883 0.254401416 0.247659594 0.229020178 0.292790681 - 0.23537007 0.240339398 0.25671038 0.219709814 0.240190461 - 0.209971368 0.190836728 0.134359151 0.0891066641 0.0651798025 - 0.0242433585 0.0912179351 0.0951088741 0.0929598138 0.130016878 - 0.203905582 0.111525647 0.0677958876 0.223600835 0.300738782 - 0.29966563 0.302599162 0.299488574 0.247764915 0.183198586 - 0.18049866 0.129561752 0.162591472 0.126442447 0.21619229 - 0.253406048 0.267661303 0.293123543 0.333721131 0.322719991 - 0.283254892 0.217606515 0.145154193 0.173741192 0.213052347 - 0.144042343 0.140837952 0.135061488 0.0657997876 0.130718812 - 0.194786787 0.212136343 0.185938969 0.144389957 0.124783367 - 0.111610219 0.178781137 0.168019235 0.140167356 0.113255277 - 0.179829761 0.159346208 0.120837137 0.264370561 0.346027911 - 0.360584617 0.346581995 0.360609382 0.312403083 0.197688505 - 0.16994445 0.0923819318 0.095169723 0.124563113 0.217348784 - 0.192714646 0.24257867 0.272538751 0.319470525 0.298998207 - 0.236576214 0.168799043 0.129245088 0.157657668 0.166072458 - 0.141835466 0.139559776 0.119177379 0.106017821 0.0754110888 - 0.128155574 0.211125463 0.262580574 0.289803475 0.270597786 - 0.241089642 0.234884322 0.180869028 0.152909532 0.156731009 - 0.231723666 0.210876286 0.247531995 0.300129414 0.351914495 - 0.398535788 0.391000509 0.393742025 0.355129749 0.219685987 - 0.149023101 0.0543690287 0.0521515869 0.0798298419 0.139071539 - 0.186062217 0.252783477 0.26910916 0.238308445 0.172099084 - 0.104361057 0.1015369 0.133604452 0.186505258 0.274802804 - 0.209818006 0.221989691 0.155507818 0.06543044 0.074158527 - 0.119107477 0.242341548 0.27776283 0.330580175 0.339612365 - 0.300224602 0.271729171 0.228520602 0.237141714 0.238545373 - 0.284317732 0.262481213 0.332825124 0.374134123 0.385446161 - 0.386527568 0.383434862 0.367631167 0.321502298 0.168704897 - 0.0890276358 0.0568729155 0.0705353022 0.0873527825 0.189328223 - 0.215201631 0.223124504 0.107606158 0.0522262342 0.0352564603 - 0.0373919159 0.0453047529 0.135370642 0.179698929 0.243843704 - 0.185293019 0.200200781 0.15213269 0.0348231308 0.0162751637 - 0.14487268 0.28416881 0.349487185 0.32969138 0.321630985 - 0.304139674 0.282437801 0.246355176 0.265226454 0.281115353 - 0.287141502 0.28028214 0.321915478 0.407020509 0.395867944 - 0.379479468 0.325734377 0.314330935 0.248417795 0.134201676 - 0.086449869 0.0337512977 0.035505522 0.0627954379 0.207819939 - 0.14222075 0.125409961 0.0882729515 0.0591031797 0.0310302842 - 0.0894995481 0.130140245 0.231017068 0.28279382 0.232155755 - 0.235844567 0.143465191 0.120464049 0.0306820124 0.020004116 - 0.123772971 0.261369765 0.33973974 0.318764687 0.283671945 - 0.26565209 0.220003307 0.233180866 0.234529868 0.214984283 - 0.246029317 0.220358551 0.30363825 0.348013073 0.32261622 - 0.26128 0.1956698 0.232015416 0.187356427 0.141131446 - 0.0409243591 0.0101284841 0.0271459073 0.0713910535 0.155628711 -/ \ No newline at end of file diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/RSVD/RSVD.txt b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/RSVD/RSVD.txt deleted file mode 100644 index 54305f8afe..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/RSVD/RSVD.txt +++ /dev/null @@ -1,28 +0,0 @@ -EQLDIMS - 6 100 20 / - - - -RSVD -2382.0 120.25 -2597.0 110.00 -2640.7 106.77 -2697.0 106.77 / -2550 94.5000 -2510.0 94.3 -2550.0 94.1 / -2582.0 120.25 -2597.0 110.00 -2620.7 106.77 -1697.0 106.77 / -2500 94.5000 -2210.0 94.3 -2390.0 94.1 / -2535.9 120.29 -2599.9 110.00 -2463.6 106.77 -2699.9 106.77 / -2525.9 120.29 -2549.9 110.00 -2631.6 106.77 -2612.9 106.77 / diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE1 b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE1 deleted file mode 100644 index c645ca4008..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE1 +++ /dev/null @@ -1,48 +0,0 @@ -START -10 MAI 2007 / - - -RUNSPEC - -DIMENS - 10 10 10 / - -GRID - -PERMX - 1000*0.25 / - -COPY - PERMX PERMY / - PERMX PERMZ / -/ - - -SCHEDULE - -NETBALAN - 0.000 0.200 6* / - - -DATES -- Bananskrell - 10 'JUN' 2007 / -/ - - -DATES - 10 JLY 2007 / - 10 AUG 2007 / -/ - - - -TSTEP - 10 2*10 / - - -DATES - 10 JLY 2008 / - 10 AUG 2008 / -/ - - diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_CMODE_MISSING_DATA b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_CMODE_MISSING_DATA deleted file mode 100644 index c70b8bb7b8..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_CMODE_MISSING_DATA +++ /dev/null @@ -1,43 +0,0 @@ -START - 10 MAI 2007 / - -RUNSPEC - -DIMENS - 10 10 3 / - -GRID - -PERMX - 300*0.25 / - -COPY - PERMX PERMY / - PERMX PERMZ / -/ - - -SCHEDULE - -WELSPECS - 'W1' 'OP' 30 37 3.33 'OIL' 7* / - 'W2' 'OP' 30 37 3.33 'OIL' 7* / - 'W3' 'OP' 30 37 3.33 'OIL' 7* / - 'W4' 'OP' 30 37 3.33 'OIL' 7* / -/ - - -WCONPROD - 'W2' 'OPEN' 'RESV' 2079.506 0.000 230825.037 5* / -/ - - --- The RESV control mode is currently not supported for historical mode. -WCONHIST - 'W2' 'OPEN' 'RESV' 2079.506 0.000 230825.037 5* / -/ - - -WCONINJE - 'W_1' 'WATER' 1* 'BHP' 20000.000 200000.000 * 678 4* / -/ diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_COMMENTS_AFTER_KEYWORDS b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_COMMENTS_AFTER_KEYWORDS deleted file mode 100644 index 3947f77c1d..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_COMMENTS_AFTER_KEYWORDS +++ /dev/null @@ -1,42 +0,0 @@ -START -10 MAI 2007 / - - -RUNSPEC - -DIMENS - 10 10 10 / - -GRID - -PERMX - 1000*0.25 / - -COPY - PERMX PERMY / - PERMX PERMZ / -/ - - -SCHEDULE - -DATES -- Bananskrell - 10 'JUN' 2007 / -/ - - -DATES - 10 JLY 2007 / - 10 AUG 2007 / -/ - - - -TSTEP -- Fiskepudding - 10 2*10 / - - -DATES - 10 JLY 2008 / - 10 AUG 2008 / -/ diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_COMPDAT1 b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_COMPDAT1 deleted file mode 100644 index 72c364c33b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_COMPDAT1 +++ /dev/null @@ -1,103 +0,0 @@ - -RUNSPEC - -DIMENS - 10 10 10 / - -GRID - -PERMX - 1000*0.25 / - -COPY - PERMX PERMY / - PERMX PERMZ / -/ - - -DX - 1000*1 / -DY - 1000*1 / -DZ - 1000*1 / - -TOPS - 1000*1 / - -SATNUM - 200*1 100*3 700*1 / - -SCHEDULE - -WELSPECS - 'W_1' 'OP' 3 7 3.33 'OIL' 7* / - 'W_2' 'OP' 3 7 3.33 'OIL' 7* / - 'W_3' 'OP' 3 7 3.33 'OIL' 7* / -/ - - -COMPDAT --- WELL I J K1 K2 Sat. CF DIAM KH SKIN ND DIR Ro - 'W_1' 3 3 1 3 'OPEN' 1* 32.948 0.311 3047.839 2* 'X' 22.100 / - 'W_1' 3 3 2 2 'OPEN' 1* * 0.311 4332.346 2* 'X' 22.123 / - 'W_1' 3 3 3 3 'OPEN' 1* 51.867 0.311 4799.764 2* 'X' 22.143 / - 'W_1' 3 3 4 4 'OPEN' 1* 34.243 0.311 3169.482 2* 'X' 22.166 / - 'W_1' 3 3 4 4 'OPEN' 1* 8.988 0.311 832.457 2* 'X' 22.236 / - 'W_1' 3 3 5 5 'OPEN' 1* 36.435 0.311 3375.309 2* 'X' 22.262 / - 'W_1' 3 3 6 6 'OPEN' 1* 39.630 0.311 3672.067 2* 'X' 22.283 / - 'W_1' 3 3 7 7 'OPEN' 1* 33.975 0.311 3148.671 2* 'X' 22.307 / - 'W_1' 3 3 8 8 'OPEN' 1* 24.869 0.311 2305.242 2* 'X' 22.329 / - 'W_1' 3 3 9 9 'OPEN' 1* 38.301 0.311 3551.043 2* 'X' 22.351 / - 'W_1' 3 3 1 1 'OPEN' 1* 6.642 0.311 615.914 2* 'X' 22.372 / - 'W_1' 3 3 1 1 'OPEN' 1* 1.322 0.311 122.614 2* 'X' 22.396 / - 'W_1' 3 3 1 1 'OPEN' 1* 3.797 0.311 352.293 2* 'X' 22.418 / - 'W_1' 3 3 1 1 'OPEN' 1* 14.742 0.311 1367.872 2* 'X' 22.439 / - 'W_1' 3 3 1 1 'OPEN' 1* 19.731 0.311 1831.202 2* 'X' 22.463 / - 'W_2' 2 5 1 1 'SHUT' 1* 1.168 0.311 107.872 2* 'Y' 21.925 / - 'W_2' 2 5 2 2 'SHUT' 1* 15.071 0.311 1391.859 2* 'Y' 21.920 / - 'W_2' 2 5 3 3 'SHUT' 1* 6.242 0.311 576.458 2* 'Y' 21.915 / - 'W_2' 2 5 4 4 'SHUT' 1* 16.493 0.311 1522.982 2* 'Y' 21.908 / - 'W_2' 2 5 5 5 'SHUT' 1* 7.359 0.311 679.489 2* 'Y' 21.903 / - 'W_3' 3 1 1 1 'OPEN' 1* 27.412 0.311 2445.337 2* 'Y' 18.521 / - 'W_3' 3 1 2 2 'OPEN' 1* 55.195 0.311 4923.842 2* 'Y' 18.524 / - 'W_3' 3 1 3 3 'OPEN' 1* 18.032 0.311 1608.615 2* 'Y' 18.526 / - 'W_3' 3 1 3 3 'OPEN' 1* 56.817 0.311 5047.177 2* 'Y' 18.155 / - 'W_3' 3 1 4 4 'OPEN' 1* 4.728 0.311 420.067 2* 'Y' 18.162 / -/ - - -COMPDAT --- WELL I J K1 K2 Sat. CF DIAM KH SKIN ND DIR Ro - 'W_1' 3 7 1 3 'OPEN' 1* 32.948 0.311 3047.839 2* 'X' 22.100 / - 'W_1' 3 7 2 2 'OPEN' 2 23487.0 0.311 4332.346 2* 'X' 22.123 / - 'W_1' 3 7 3 3 'OPEN' 1* 51.867 0.311 4799.764 2* 'X' 22.143 / - 'W_1' 3 7 4 4 'OPEN' 1* 34.243 0.311 3169.482 2* 'X' 22.166 / - 'W_1' 3 7 4 4 'OPEN' 1* 8.988 0.311 832.457 2* 'X' 22.236 / - 'W_1' 3 7 5 5 'OPEN' 1* 36.435 0.311 3375.309 2* 'X' 22.262 / - 'W_1' 3 7 6 6 'OPEN' 1* 39.630 0.311 3672.067 2* 'X' 22.283 / - 'W_1' 3 7 7 7 'OPEN' 1* 33.975 0.311 3148.671 2* 'X' 22.307 / - 'W_1' 3 7 8 8 'OPEN' 1* 24.869 0.311 2305.242 2* 'X' 22.329 / - 'W_1' 3 7 9 9 'OPEN' 1* 38.301 0.311 3551.043 2* 'X' 22.351 / - 'W_1' 3 7 1 1 'OPEN' 1* 6.642 0.311 615.914 2* 'X' 22.372 / - 'W_1' 3 7 1 1 'OPEN' 1* 1.322 0.311 122.614 2* 'X' 22.396 / - 'W_1' 3 7 1 1 'OPEN' 1* 3.797 0.311 352.293 2* 'X' 22.418 / - 'W_1' 3 7 1 1 'OPEN' 1* 14.742 0.311 1367.872 2* 'X' 22.439 / - 'W_1' 3 7 1 1 'OPEN' 1* 19.731 0.311 1831.202 2* 'X' 22.463 / - 'W_2' 2 1 1 1 'SHUT' 1* 1.168 0.311 107.872 2* 'Y' 21.925 / - 'W_2' 2 1 2 2 'SHUT' 1* 15.071 0.311 1391.859 2* 'Y' 21.920 / - 'W_2' 2 1 3 3 'SHUT' 1* 6.242 0.311 576.458 2* 'Y' 21.915 / - 'W_2' 2 1 4 4 'SHUT' 1* 16.493 0.311 1522.982 2* 'Y' 21.908 / - 'W_2' 2 1 5 5 'SHUT' 1* 7.359 0.311 679.489 2* 'Y' 21.903 / - 'W_3' 3 8 1 1 'OPEN' 1* 27.412 0.311 2445.337 2* 'Y' 18.521 / - 'W_3' 3 8 2 2 'OPEN' 1* 55.195 0.311 4923.842 2* 'Y' 18.524 / - 'W_3' 3 8 3 3 'OPEN' 1* 18.032 0.311 1608.615 2* 'Y' 18.526 / - 'W_3' 3 7 3 3 'OPEN' 1* 56.817 0.311 5047.177 2* 'Y' 18.155 / - 'W_3' 3 7 4 4 'OPEN' 1* 4.728 1* 420.067 2* 'Y' 18.162 / -/ - -WCONPROD - 'W_1' 'OPEN' 'ORAT' 20000 4* 1000 / - 'W_2' 'OPEN' 'ORAT' 20000 4* 1000 / - 'W_3' 'OPEN' 'ORAT' 20000 4* 1000 / -/ diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_EVENTS b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_EVENTS deleted file mode 100644 index 04aad5c3c9..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_EVENTS +++ /dev/null @@ -1,92 +0,0 @@ -START -10 MAI 2007 / - -RUNSPEC - -DIMENS - 40 40 30 / - -GRID - -PERMX - 48000*0.25 / - -COPY - PERMX PERMY / - PERMX PERMZ / -/ - -SCHEDULE - -WELSPECS - 'W_1' 'GROUP1' 30 37 1* 'OIL' 7* / -/ - -COMPDAT --- WELL I J K1 K2 Sat. CF DIAM KH SKIN ND DIR Ro --- the spaces around the name and the open/shut flag are intentional! - ' W_1 ' 10 32 1 1 ' OPEN ' 1* 118.457 0.216 12025.229 2* 'Z' 24.860 / -/ - -WELOPEN - 'W_1' 'OPEN' 5* / -/ - - -TSTEP --1 - 10 / - -WELOPEN - 'W_1' 'SHUT' 5* / -/ - -TSTEP --2 - 10 / - -WELSPECS - 'W_2' 'GROUP1' 20 37 1* 'OIL' 7* / -/ - -WELOPEN - 'W_1' 'SHUT' 5* / -/ - - -TSTEP --3 - 10 / - -WELSPECS - 'W_2' 'GROUP2' 20 37 1* 'OIL' 7* / -/ - -WELOPEN - 'W_1' 'OPEN' 5* / -/ - - -TSTEP --4 - 10 / - -WELOPEN - 'W_1' 'AUTO' 5* / -/ - - -TSTEP --5 - 10 / - -WELOPEN - 'W_1' 'STOP' 0 0 0 2* / -/ - -COMPDAT --- WELL I J K1 K2 Sat. CF DIAM KH SKIN ND DIR Ro --- the spaces around the name and the open/shut flag are intentional! - ' W_1 ' 10 32 1 1 ' OPEN ' 1* 120.457 0.216 12025.229 2* 'Z' 24.860 / -/ - - -TSTEP --6 - 10 / - -END diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_FOAM b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_FOAM deleted file mode 100644 index 65447eaab1..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_FOAM +++ /dev/null @@ -1,70 +0,0 @@ --- Based on the SCHEDULE_POLYMER test - -START - 10 MAI 2007 / -RUNSPEC - -DIMENS - 30 30 30 / - -GRID - -PERMX - 27000*0.25 / - -COPY - PERMX PERMY / - PERMX PERMZ / -/ - -SCHEDULE - - -WELSPECS - 'INJE01' 'I' 1 1 1* 'GAS' / - 'INJE02' 'I' 5 1 1* 'GAS' / - 'INJE03' 'I' 10 1 1* 'GAS' / - 'PROD01' 'P' 20 1 1* 'OIL' 7* / -/ - -COMPDAT - 'INJE01' 1 1 2 2 'OPEN' 1* 200. 0.5 / - 'INJE02' 5 1 2 2 'OPEN' 1* 200. 0.5 / - 'INJE03' 10 1 2 2 'OPEN' 1* 200. 0.5 / - 'PROD01' 20 1 1 1 'OPEN' 1* 200. 0.5 / -/ - -WCONINJE - 'INJE01' 'GAS' 'OPEN' 'RATE' 80000.00 1* 1000 / - 'INJE02' 'GAS' 'OPEN' 'RATE' 80000.00 1* 1000 / - 'INJE03' 'GAS' 'OPEN' 'RATE' 80000.00 1* 1000 / -/ -WCONPROD - 'PROD01' 'OPEN' 'BHP' 5* 200 / -/ - -WFOAM - 'INJE01' 0.11 / - 'INJE03' 0.31 / -/ -TSTEP -10 -/ -WFOAM - 'INJE01' 0.12 / - 'INJE02' 0.22 / - 'INJE03' 0.0 / -/ -TSTEP -10 -/ - -WFOAM - 'INJE01' 0.13 / - 'INJE02' 0.0 / - 'INJE03' 0.33 / -/ - -TSTEP -10 -/ diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_GROUPS b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_GROUPS deleted file mode 100644 index 4d17f9e3b6..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_GROUPS +++ /dev/null @@ -1,86 +0,0 @@ -START -- 0 -10 MAI 2007 / - -RUNSPEC - -DIMENS - 10 10 3 / - -GRID - -PERMX - 300*0.25 / - -COPY - PERMX PERMY / - PERMX PERMZ / -/ - -SCHEDULE - -DATES -- 1 - 10 'JUN' 2007 / -/ - - -DATES -- 2,3 - 10 JLY 2007 / - 10 AUG 2007 / -/ - -WELSPECS - 'W_1' 'OP' 30 37 1* 'OIL' 7* / Crap1 - 'W_2' 'INJ' 20 51 1* 'OIL' 7* / Crap2 Crap3 -/ - - -GCONINJE --- the spaces around the strings are intentional! - ' INJ ' ' WATER ' ' VREP ' 10 20 0.75 0.95 6* / -/ - - - -GCONPROD --- the spaces around the strings are intentional! - ' OP ' ' ORAT ' 10 20 30 40 +CON / -/ - - - - -TSTEP -- 4,5,6 - 10 2*10 / - - -GCONINJE - 'INJ' 'OIL' 'RATE' 1000 2* 0.95 6* / -/ - - - -TSTEP - 7 - 3 / - - -TSTEP -- 8 - 4 / - - -DATES -- 9 - 10 JLY 2008 / -/ - -GCONINJE - 'INJ' 'GAS' 'NONE' 1000 2* 0.95 6* / -/ - - -DATES -- 10 - 10 AUG 2008 / -/ - - -DATES -- 11 - 10 SEP 2008 / -/ diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_GROUPS_REPARENT b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_GROUPS_REPARENT deleted file mode 100644 index 8fa010469a..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_GROUPS_REPARENT +++ /dev/null @@ -1,36 +0,0 @@ -START -- Time 0 -10 MAI 2007 / - -RUNSPEC - -DIMENS - 10 10 3 / - -GRID - -PERMX - 300*0.25 / - -COPY - PERMX PERMY / - PERMX PERMZ / -/ - - -SCHEDULE - -GRUPTREE - 'GROUP_BIRGER' 'GROUP_BJARNE' / -- BJARNE under FIELD, BIRGER under BJARNE - 'GROUP_NILS' 'GROUP_NEW' / -- NILS under NEW, NEW should be under FIELD -/ - -TSTEP -- Time 1 - 10 / - -GRUPTREE - 'GROUP_BIRGER' 'GROUP_NEW' / -- Move BIRGER to NEW, i.e. NEW should now have NILS AND BIRGER, and BJARNE is childless -/ - - - - diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_GRUPTREE_EXPLICIT_PARENTING b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_GRUPTREE_EXPLICIT_PARENTING deleted file mode 100644 index dc3a4d28f6..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_GRUPTREE_EXPLICIT_PARENTING +++ /dev/null @@ -1,31 +0,0 @@ -START -10 MAI 2007 / - - -RUNSPEC - -DIMENS - 10 10 3 / - -GRID - -PERMX - 300*0.25 / - -COPY - PERMX PERMY / - PERMX PERMZ / -/ - - -SCHEDULE - - -GRUPTREE - 'FIRST_LEVEL1' 'FIELD' / - 'FIRST_LEVEL2' 'FIELD' / - 'SECOND_LEVEL1' 'FIRST_LEVEL1' / - 'SECOND_LEVEL2' 'FIRST_LEVEL2' / - 'THIRD_LEVEL1' 'SECOND_LEVEL1' / -/ - diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_MISSING_CMODE b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_MISSING_CMODE deleted file mode 100644 index 11efa886dc..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_MISSING_CMODE +++ /dev/null @@ -1,31 +0,0 @@ -START - 10 MAI 2007 / - -RUNSPEC - -DIMENS - 10 10 3 / - -GRID - -PERMX - 300*0.25 / - -COPY - PERMX PERMY / - PERMX PERMZ / -/ - - -SCHEDULE - -WELSPECS - 'D-4H' 'OP' 30 37 3.33 'OIL' 7* / -/ - - -WCONPROD - 'D-4H' 'SHUT' 15* / -/ - - diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_MULTISEGMENT_WELL b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_MULTISEGMENT_WELL deleted file mode 100644 index 423487a53d..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_MULTISEGMENT_WELL +++ /dev/null @@ -1,84 +0,0 @@ --- This reservoir simulation deck is made available under the Open Database --- License: http://opendatacommons.org/licenses/odbl/1.0/. Any rights in --- individual contents of the database are licensed under the Database Contents --- License: http://opendatacommons.org/licenses/dbcl/1.0/ - --- Copyright (C) 2015 SINTEF ICT, Applied Mathematics - -RUNSPEC - -DIMENS -20 1 5 / - -START - 06 'NOV' 2011 / - -GRID - -PERMX - 100*0.25 / - -COPY - PERMX PERMY / - PERMX PERMZ / -/ - -DX -100*200 / -DY -100*200 / -DZ -100*25 / - -TOPS -20*2500 -20*2525 -20*2550 -20*2575 -20*2600 / - -PORO - 100*0.15 / - -SCHEDULE - -WELSPECS - 'PROD01' 'P' 20 1 1* 'OIL' 7* / -/ - - - -COMPDAT - 'PROD01' 20 1 1 1 'OPEN' 1* 200. 0.5 / - 'PROD01' 20 1 2 2 'OPEN' 1* 200. 0.5 / - 'PROD01' 20 1 3 3 'OPEN' 1* 200. 0.4 / - 'PROD01' 19 1 2 2 'OPEN' 1* 200. 0.4 / - 'PROD01' 18 1 2 2 'OPEN' 1* 200. 0.4 / - 'PROD01' 17 1 2 2 'OPEN' 1* 200. 0.4 / - 'PROD01' 16 1 2 2 'OPEN' 1* 200. 0.4 / -/ - -WELSEGS - 'PROD01' 2512.5 2512.5 1.0e-5 'ABS' 'HF-' 'HO' / - 2 2 1 1 2537.5 2537.5 0.3 0.00010 / - 3 3 1 2 2562.5 2562.5 0.2 0.00010 / - 4 4 2 2 2737.5 2537.5 0.2 0.00010 / - 6 6 2 4 3037.5 2539.5 0.2 0.00010 / - 7 7 2 6 3337.5 2534.5 0.2 0.00010 / - 8 8 3 7 3337.6 2534.5 0.2 0.00015 / -/ - -COMPSEGS - 'PROD01'/ - 20 1 1 1 2512.5 2525.0 / - 20 1 2 1 2525.0 2550.0 / - 20 1 3 1 2550.0 2575.0 / - 19 1 2 2 2637.5 2837.5 / - 18 1 2 2 2837.5 3037.5 / - 17 1 2 2 3037.5 3237.5 / - 16 1 2 3 3237.5 3437.5 / -/ - -WSEGSICD - 'PROD01' 8 8 0.002 -0.7 1* 1* 0.6 1* 1* 2* 'SHUT' / -/ diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_POLYMER b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_POLYMER deleted file mode 100644 index 8f311be257..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_POLYMER +++ /dev/null @@ -1,69 +0,0 @@ -START - 10 MAI 2007 / -RUNSPEC - -DIMENS - 30 30 30 / - -GRID - -PERMX - 27000*0.25 / - -COPY - PERMX PERMY / - PERMX PERMZ / -/ - -SCHEDULE - - -WELSPECS - 'INJE01' 'I' 1 1 1* 'WATER' / - 'INJE02' 'I' 5 1 1* 'WATER' / - 'INJE03' 'I' 10 1 1* 'WATER' / - 'PROD01' 'P' 20 1 1* 'OIL' 7* / -/ - -COMPDAT - 'INJE01' 1 1 2 2 'OPEN' 1* 200. 0.5 / - 'INJE02' 5 1 2 2 'OPEN' 1* 200. 0.5 / - 'INJE03' 10 1 2 2 'OPEN' 1* 200. 0.5 / - 'PROD01' 20 1 1 1 'OPEN' 1* 200. 0.5 / -/ - -WCONINJE - 'INJE01' 'WATER' 'OPEN' 'RATE' 800.00 1* 1000 / - 'INJE02' 'WATER' 'OPEN' 'RATE' 800.00 1* 1000 / - 'INJE03' 'WATER' 'OPEN' 'RATE' 800.00 1* 1000 / -/ -WCONPROD - 'PROD01' 'OPEN' 'BHP' 5* 200 / -/ - -WPOLYMER - 'INJE01' 1.5 0.0 / - 'INJE02' 2.0 0.0 / - 'INJE03' 2.5 0.0 / -/ -TSTEP -10 -/ -WPOLYMER - 'INJE01' 1.0 0.0 / - 'INJE02' 1.5 0.0 / - 'INJE03' 2.0 0.0 / -/ -TSTEP -10 -/ - -WPOLYMER - 'INJE01' 0.1 0.0 / - 'INJE02' 0.2 0.0 / - 'INJE03' 0.3 0.0 / -/ - -TSTEP -10 -/ diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_SHUT_WELL b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_SHUT_WELL deleted file mode 100644 index 855b676749..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_SHUT_WELL +++ /dev/null @@ -1,93 +0,0 @@ -START -10 MAI 2007 / - -RUNSPEC - -DIMENS - 20 40 1 / - -GRID - - -PERMX - 800*0.25 / - -COPY - PERMX PERMY / - PERMX PERMZ / -/ - - -SCHEDULE - -WELSPECS - 'W1' 'GROUP1' 30 37 1* 'OIL' 7* / - 'W2' 'GROUP1' 30 37 1* 'OIL' 7* / - 'W3' 'GROUP1' 30 37 1* 'OIL' 7* / -/ - -COMPDAT - 'W1' 10 32 1 1 'OPEN' 1* 118.457 0.216 12025.229 2* 'Z' 24.860 / - 'W2' 10 32 1 1 'OPEN' 1* 118.457 0.216 12025.229 2* 'Z' 24.860 / - 'W3' 10 32 1 1 'OPEN' 1* 118.457 0.216 12025.229 2* 'Z' 24.860 / -/ - -TSTEP -- Step 1 - 10 / - -WCONPROD - 'W1' 'OPEN' 'ORAT' 20000 4* 1000 / - 'W2' 'OPEN' 'ORAT' 20000 4* 1000 / - 'W3' 'OPEN' 'ORAT' 20000 4* 1000 / -/ - - -TSTEP -- Step 2 - 10 / - ---!----------------------------------------------------------------- - -WCONHIST - 'W1' 'OPEN' 'ORAT' 0.000 0.000 0.000 5* / -/ - -WCONPROD - 'W1' 'OPEN' 'RESV' 999 3* 123 100 / -/ - - -WELOPEN - 'W1' 'SHUT' / -/ ---!----------------------------------------------------------------- - -WCONHIST - 'W2' 'OPEN' 'ORAT' 0.000 0.000 0.000 5* / -/ - -WELOPEN - 'W2' 'OPEN' / -/ - - -WCONPROD - 'W2' 'SHUT' / -/ - ---!----------------------------------------------------------------- - -WCONPROD - 'W3' 'OPEN' 'RESV' 999 3* 123 100 / -/ - - -WELOPEN - 'W3' 'OPEN' / -/ - -WCONHIST - 'W3' 'SHUT' 'ORAT'/ -/ - - -END diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_WECON b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_WECON deleted file mode 100644 index 45d14f6902..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_WECON +++ /dev/null @@ -1,59 +0,0 @@ -START - 10 MAY 2007 / - -RUNSPEC - -DIMENS - 30 30 30 / - -GRID - -PERMX - 27000*0.25 / - -COPY - PERMX PERMY / - PERMX PERMZ / -/ - - -SCHEDULE - - -WELSPECS - 'INJE01' 'I' 1 1 1* 'WATER' / - 'PROD01' 'P' 10 1 1* 'OIL' 7* / - 'PROD02' 'P' 20 1 1* 'OIL' 7* / -/ - -COMPDAT - 'INJE01' 1 1 2 2 'OPEN' 1* 200. 0.5 / - 'PROD01' 10 1 1 1 'OPEN' 1* 200. 0.5 / - 'PROD02' 20 1 1 1 'OPEN' 1* 200. 0.5 / -/ - -WCONINJE - 'INJE01' 'WATER' 'OPEN' 'RATE' 800.00 1* 1000 / -/ - -WCONPROD - 'PROD01' 'OPEN' 'BHP' 5* 200 / - 'PROD02' 'OPEN' 'BHP' 5* 200 / -/ - -WECON - 'PROD01' 50 1* 0.95 2* CON NO / -/ - -TSTEP -10 -/ - -WECON - 'PROD01' 1* 1000 0.95 2* CON NO / - 'PROD02' 1* 1000 0.95 2* CON NO / -/ - -TSTEP -10 -/ diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_WELLS2 b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_WELLS2 deleted file mode 100644 index a6378f6d27..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_WELLS2 +++ /dev/null @@ -1,181 +0,0 @@ -RUNSPEC - -DIMENS - 40 60 30 / - -GRID - -PERMX - 72000*0.25 / - -COPY - PERMX PERMY / - PERMX PERMZ / -/ - -SCHEDULE - --- 0 -DATES - 10 'JUN' 2007 / -/ - - --- 1 -DATES - 10 JLY 2007 / --- 2 - 10 AUG 2007 / -/ - --- 3 -WELSPECS - 'W_1' 'OP' 30 37 1* 'OIL' 3* 'NO'/ Crap1 --- the spaces around the phase name are intentional! - 'W_2' 'OP' 20 51 100 ' OIL ' 7* / Crap2 Crap3 --- Note defaulted reference depth for W_3 - 'W_3' 'OP' 31 18 1* 'OIL' 7* / - 'W_4' 'OP' 32 19 1* 'OIL' 7* / -/ - -WRFTPLT - 'W_1' 'YES' 'NO' 'NO' / - 'W_2' 'REPT' 'NO' 'NO' / -/ - -COMPDAT --- WELL I J K1 K2 Sat. CF DIAM KH SKIN ND DIR Ro - 'W_1' 30 37 1 3 'OPEN' 1* 32.948 0.311 3047.839 2* 'X' 22.100 / --- the spaces around the direction indicator are intentional! - 'W_1' 31 37 14 14 'OPEN' 1* 19.731 0.311 1831.202 3.3 1* ' X ' 22.463 / --- - 'W_2' 20 51 1 1 'OPEN' 1* 1.168 0.311 107.872 2* 'Y' 21.925 / - 'W_2' 20 51 5 5 'OPEN' 1* 7.359 0.311 679.489 2* 'Y' 21.903 / --- - 'W_3' 31 18 1 1 'OPEN' 1* 27.412 0.311 2445.337 2* 'Y' 18.521 / - 'W_3' 31 18 2 2 'OPEN' 1* 55.195 0.311 4923.842 2* 'Y' 18.524 / -/ - - - - -WCONHIST --- the spaces around the names indicator are intentional! --- they test that even padded quoted literals as arguments to WCONHIST and --- friends are stripped correctly - ' W_1 ' ' OPEN ' ' ORAT ' 4000.000 4.000 12345 5* / - 'W_2' 'SHUT' 'ORAT' 7998.000 2.000 1461075.000 5* / - 'W_3' 'AUTO' 'ORAT' 7999.000 1.000 1471824.000 5* / -/ - - -TSTEP - 10 / - --- 4 -TSTEP - 10 / - --- 5 -WRFTPLT - 'W_2' 'NO' 'NO' 'NO' / -/ - -TSTEP - 10 / - - - --- 6 -WCONHIST - 'W_1' 'OPEN' 'ORAT' 14000.000 4.000 1.46402E+006 5* / - 'W_2' 'OPEN' 'ORAT' 17998.000 2.000 1461075.000 5* / - 'W_3' 'OPEN' 'ORAT' 17999.000 1.000 1471824.000 5* / -/ - - -TSTEP - 3 / - - --- 7 -COMPDAT - 'W_1' 31 37 14 14 'SHUT' 1* 19.731 0.311 1831.202 2* 'X' 22.463 / -/ - - -WCONPROD - 'W_1' 'OPEN' 'ORAT' 11000.000 44.000 188 5* / - 'W_2' 'OPEN' 'RESV' 17998.000 2.000 1461075.000 * 777 3* / - 'W_3' 'OPEN' 'RESV' 17999.000 1.000 1471824.000 999 999 4* / -/ - -TSTEP - 4 / - --- 8 -WCONHIST - 'W_1' 'OPEN' 'ORAT' 13000.000 4.000 1.46402E+006 5* / - 'W_2' 'OPEN' 'ORAT' 17998.000 2.000 6* / - 'W_3' 'OPEN' 'ORAT' 17999.000 1.000 1471824.000 5* / -/ - -DATES - 10 JLY 2008 / -/ - --- 9 -WCONINJE - 'W_1' 'WATER' 1* 'RESV' 20000.000 200000.000 5* / -/ - -DATES - 10 AUG 2008 / -/ - --- 10 -WCONINJE - 'W_1' 'WATER' 1* 'RATE' 20000.000 200000.000 123 678 4* / -/ - -DATES - 15 AUG 2008 / -/ - - --- 11 -WCONINJH - 'W_1' 'WATER' 1* 5000.000 50000.000 / -/ - - -DATES - 10 SEP 2008 / -/ - --- 12 -WCONINJE - 'W_1' 'WATER' 'OPEN' 'RATE' 20000.000 * 123 678 4* / -/ - -DATES - 10 OCT 2008 / -/ - --- 13 -WCONINJE - 'W_1' 'WATER' 'OPEN' 'RATE' 0.000 * 123 678 4* / -/ - -DATES - 10 NOV 2008 / -/ - --- 14 -WCONINJE - 'W_1' 'WATER' 'OPEN' 'BHP' 2* 100 / -/ - -DATES - 10 DEC 2008 / -/ diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_WELLS_AND_GROUPS b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_WELLS_AND_GROUPS deleted file mode 100644 index 8a5dc38362..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_WELLS_AND_GROUPS +++ /dev/null @@ -1,34 +0,0 @@ -START -10 MAI 2007 / - -RUNSPEC - -DIMENS - 10 10 3 / - -GRID - -PERMX - 300*0.25 / - -COPY - PERMX PERMY / - PERMX PERMZ / -/ - - -SCHEDULE - -WELSPECS - 'W_1' 'GROUP1' 30 37 1* 'OIL' 7* / - 'W_2' 'GROUP1' 20 51 1* 'OIL' 7* / -/ - -TSTEP - 10 / - - - -WELSPECS - 'W_2' 'GROUP2' 20 51 1* 'OIL' 7* / -/ diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_WELOPEN b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_WELOPEN deleted file mode 100644 index 0f24a67b2b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_WELOPEN +++ /dev/null @@ -1,60 +0,0 @@ -START -10 MAI 2007 / - - -SCHEDULE - -WELSPECS - 'W_1' 'GROUP1' 30 37 1* 'OIL' 7* / -/ - -COMPDAT --- WELL I J K1 K2 Sat. CF DIAM KH SKIN ND DIR Ro --- the spaces around the name and the open/shut flag are intentional! - ' W_1 ' 10 32 1 1 ' OPEN ' 1* 118.457 0.216 12025.229 2* 'Z' 24.860 / -/ - -TSTEP - 10 / - -WELOPEN --- the spaces around the name and the open/shut flag are intentional! - ' W_1 ' ' SHUT ' 5* / -/ - -TSTEP - 10 / - -WELOPEN - 'W_1' 'OPEN' 5* / -/ - - -TSTEP - 10 / - -WELOPEN - 'W_1' 'STOP' 5* / -/ - - -TSTEP - 10 / - -WELOPEN - 'W_1' 'AUTO' 5* / -/ - - -TSTEP - 10 / - -WELOPEN - 'W_1' 'STOP' 0 0 0 2* / -/ - - -TSTEP - 10 / - -END diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_WELOPEN_INVALID b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_WELOPEN_INVALID deleted file mode 100644 index 48a70ee155..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_WELOPEN_INVALID +++ /dev/null @@ -1,27 +0,0 @@ -START -10 MAI 2007 / - - -SCHEDULE - -WELSPECS - 'W_1' 'GROUP1' 30 37 1* 'OIL' 7* / - 'W_2' 'GROUP1' 20 51 1* 'OIL' 7* / -/ - -COMPDAT --- WELL I J K1 K2 Sat. CF DIAM KH SKIN ND DIR Ro - 'W_1' 10 32 1 1 'OPEN' 1* 118.457 0.216 12025.229 2* 'Z' 24.860 / -/ - -TSTEP - 10 / - -WELOPEN - 'W_1' 'SHUT' 1 0 0 2* / -/ - -TSTEP - 10 / - -END diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_WELSPECS_GROUPS b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_WELSPECS_GROUPS deleted file mode 100644 index 06d276dc47..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_WELSPECS_GROUPS +++ /dev/null @@ -1,40 +0,0 @@ -START -10 MAI 2007 / - - -RUNSPEC - -DIMENS - 10 10 3 / - -GRID - -PERMX - 300*0.25 / - -COPY - PERMX PERMY / - PERMX PERMZ / -/ - - -SCHEDULE - -WELSPECS - 'W_1' 'GROUP_BIRGER' 30 37 1* 'OIL' 7* / - 'W_3' 'GROUP_ODD' 31 18 1* 'OIL' 7* / - 'W_2' 'GROUP_NILS' 20 51 1* 'OIL' 7* / - -/ - -TSTEP - 10 / - - -GRUPTREE - 'GROUP_BIRGER' 'GROUP_BJARNE' / --- the spaces around the name are intentional! - ' GROUP_NILS ' ' GROUP_NEW ' / -- NILS UNDER NEW, NEW should be under FIELD -/ - -END diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_WELSPECS_GRUPTREE b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_WELSPECS_GRUPTREE deleted file mode 100644 index bd60f5ef12..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_WELSPECS_GRUPTREE +++ /dev/null @@ -1,31 +0,0 @@ -START -10 MAI 2007 / - -RUNSPEC - -DIMENS - 10 10 3 / - -GRID - -PERMX - 300*0.25 / - -COPY - PERMX PERMY / - PERMX PERMZ / -/ - - - -SCHEDULE - - -GRUPTREE - 'INJE' 'FIELD' / - 'PROD' 'FIELD' / - 'MANI-PROD' 'PROD' / - 'MANI-INJ' 'INJE' / - 'DUMMY-PROD' 'MANI-PROD' / - 'DUMMY-INJ' 'MANI-INJ' / -/ diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_WGRUPCON b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_WGRUPCON deleted file mode 100644 index 6846ef51f7..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/SCHEDULE_WGRUPCON +++ /dev/null @@ -1,39 +0,0 @@ -START -10 MAI 2007 / - -RUNSPEC - -DIMENS - 10 10 10 / - -GRID - -PERMX - 1000*0.25 / - -COPY - PERMX PERMY / - PERMX PERMZ / -/ - - -SCHEDULE - -WELSPECS - 'W_1' 'GROUP_BJARNE' 30 37 1* 'OIL' 7* / - 'W_2' 'GROUP_ODD' 31 18 1* 'GAS' 7* / - 'W_3' 'GROUP_BJARNE' 20 51 1* 'WATER' 7* / - -/ - -WGRUPCON - 'W_1' 2* OIL / --- the spaces around the name are intentional! - ' W_2 ' NO / - 'W_3' YES 100 RAT 0.5 / -/ - -TSTEP - 10 / - -END diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/wells_group.data b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/wells_group.data deleted file mode 100644 index 5fa7fb8cc4..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/SCHEDULE/wells_group.data +++ /dev/null @@ -1,69 +0,0 @@ -RUNSPEC - -OIL -GAS -WATER - -DIMENS - 10 10 5 / - -GRID - -DXV -10*1000.0 / - -DYV -10*1000.0 / - -DZV -10.0 20.0 30.0 10.0 5.0 / - -TOPS - 100*10 / - -SCHEDULE - -GRUPTREE - 'G1' 'FIELD' / - 'G2' 'FIELD' / -/ - - -WELSPECS - 'INJ1' 'G1' 1 1 8335 'GAS' / - 'PROD1' 'G2' 10 10 8400 'OIL' / -/ - -TSTEP - 14.0 / - - -WELSPECS - 'INJ2' 'G1' 1 1 8335 'GAS' / - 'PROD2' 'G2' 10 10 8400 'OIL' / -/ - -GCONINJE -'G1' GAS RATE 30000 / -/ - -GCONPROD -'G2' ORAT 10000 / -/ - -WCONINJE - 'INJ1' 'WATER' 'OPEN' 'RESV' 10 20 40 / - 'INJ2' 'WATER' 'OPEN' 'RESV' 10 20 40 / -/ - -WCONPROD - 'PROD1' 'OPEN' 'RESV' 999 3* 123 100 / - 'PROD2' 'OPEN' 'RESV' 999 3* 123 100 / -/ - -TSTEP - 3 / - - - -END diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/TABLES/PVTO2.DATA b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/TABLES/PVTO2.DATA deleted file mode 100644 index 9e94920bf7..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/TABLES/PVTO2.DATA +++ /dev/null @@ -1,296 +0,0 @@ -RUNSPEC - -TITLE - SIMPLE TEST - -DIMENS - 9 9 2 / - -OIL - -WATER - -GAS - -DISGAS - -VAPOIL - -METRIC - -EQLDIMS - 1 100 2 1 1 / -TABDIMS - 1 3 33 60 16 60 / - -PROPS =============================================================== -PVTO - --- RSO PRESSURE B-OIL VISCOSITY --- (BAR) (CP) - - 20.59 50.00 1.10615 1.180 - 75.00 1.10164 1.247 - 100.00 1.09744 1.315 - 125.00 1.09351 1.384 - 150.00 1.08984 1.453 / - - 28.19 70.00 1.12522 1.066 - 95.00 1.12047 1.124 - 120.00 1.11604 1.182 - 145.00 1.11191 1.241 - 170.00 1.10804 1.300 / - - 36.01 90.00 1.14458 0.964 - 115.00 1.13959 1.014 - 140.00 1.13494 1.064 - 165.00 1.13060 1.115 - 190.00 1.12653 1.166 / - - 44.09 110.00 1.16437 0.880 - 135.00 1.15915 0.924 - 160.00 1.15428 0.968 - 185.00 1.14973 1.012 - 210.00 1.14547 1.056 / - - 52.46 130.00 1.18467 0.805 - 155.00 1.17921 0.843 - 180.00 1.17413 0.882 - 205.00 1.16937 0.920 - 230.00 1.16491 0.959 / - - 61.13 150.00 1.20555 0.746 - 175.00 1.19985 0.780 - 200.00 1.19454 0.814 - 225.00 1.18958 0.849 - 250.00 1.18492 0.883 / - - 70.14 170.00 1.22704 0.698 - 195.00 1.22111 0.729 - 220.00 1.21558 0.759 - 245.00 1.21040 0.790 - 270.00 1.20555 0.821 / - - 79.50 190.00 1.24922 0.658 - 215.00 1.24305 0.686 - 240.00 1.23729 0.714 - 265.00 1.23190 0.742 - 290.00 1.22685 0.770 / - - 89.24 210.00 1.27214 0.637 - 235.00 1.26573 0.664 - 260.00 1.25974 0.693 - 285.00 1.25414 0.725 - 310.00 1.24888 0.760 / - - 99.39 230.00 1.29586 0.622 - 255.00 1.28921 0.641 - 280.00 1.28300 0.661 - 305.00 1.27718 0.680 - 330.00 1.27171 0.699 / - - 110.41 250.80 1.32148 0.610 - 275.80 1.31457 0.628 - 300.80 1.30812 0.647 - 325.80 1.30207 0.665 - 350.80 1.29638 0.682 / - - 120.32 268.42 1.34449 0.576 - 293.42 1.33735 0.593 - 318.42 1.33068 0.609 - 343.42 1.32442 0.626 - 368.42 1.31853 0.642 / - - 130.23 285.33 1.36737 0.5335 - 310.33 1.36001 0.5487 - 335.33 1.35313 0.5638 - 360.33 1.34667 0.5787 - 385.33 1.34059 0.5934 / - - 140.12 301.59 1.39015 0.4956 - 326.59 1.38257 0.5094 - 351.59 1.37548 0.5230 - 376.59 1.36882 0.5365 - 401.59 1.36255 0.5498 / - - 150.01 317.23 1.41282 0.4614 - 342.23 1.40503 0.4739 - 367.23 1.39773 0.4863 - 392.23 1.39088 0.4986 - 417.23 1.38443 0.5107 / - - 159.89 332.29 1.43539 0.43042 - 357.29 1.42739 0.44183 - 382.29 1.41990 0.45312 - 407.29 1.41286 0.46430 - 432.29 1.40622 0.47537 / - - 169.76 346.80 1.45788 0.41191 - 371.80 1.44967 0.42260 - 396.80 1.44198 0.43318 - 421.80 1.43475 0.44365 - 446.80 1.42794 0.45402 / - - 179.63 360.80 1.48028 0.39503 - 385.80 1.47187 0.40508 - 410.80 1.46398 0.41502 - 435.80 1.45657 0.42487 - 460.80 1.44958 0.43461 / - - 189.48 374.31 1.50260 0.37959 - 399.31 1.49399 0.38907 - 424.31 1.48591 0.39845 - 449.31 1.47832 0.40773 - 474.31 1.47116 0.41692 / - - 199.34 387.36 1.52484 0.36543 - 412.36 1.51603 0.37439 - 437.36 1.50777 0.38326 - 462.36 1.50000 0.39203 - 487.36 1.49267 0.40072 / - - 209.18 399.99 1.54700 0.35239 - 424.99 1.53800 0.36089 - 449.99 1.52956 0.36929 - 474.99 1.52161 0.37762 - 499.99 1.51411 0.38585 / - - 219.02 412.21 1.56910 0.34035 - 437.21 1.55991 0.34843 - 462.21 1.55128 0.35642 - 487.21 1.54316 0.36433 - 512.21 1.53549 0.37216 / - - 228.85 424.05 1.59112 0.32921 - 449.05 1.58174 0.33691 - 474.05 1.57294 0.34453 - 499.05 1.56464 0.35206 - 524.05 1.55681 0.35952 / - - 238.67 435.53 1.61307 0.31888 - 460.53 1.60351 0.32623 - 485.53 1.59453 0.33350 - 510.53 1.58606 0.34070 - 535.53 1.57807 0.34782 / - - 248.48 446.68 1.63496 0.30927 - 471.68 1.62522 0.31630 - 496.68 1.61606 0.32326 - 521.68 1.60743 0.33014 - 546.68 1.59927 0.33695 / - - 258.29 457.51 1.65678 0.30032 - 482.51 1.64686 0.30706 - 507.51 1.63753 0.31373 - 532.51 1.62873 0.32032 - 557.51 1.62042 0.32685 / - - 268.09 468.04 1.67853 0.29196 - 493.04 1.66843 0.29843 - 518.04 1.65893 0.30483 - 543.04 1.64997 0.31117 - 568.04 1.64150 0.31743 / - - 277.89 478.30 1.70022 0.28414 - 503.30 1.68994 0.29037 - 528.30 1.68028 0.29652 - 553.30 1.67116 0.30261 - 578.30 1.66253 0.30864 / - - 287.68 488.30 1.72184 0.27681 - 513.30 1.71139 0.28281 - 538.30 1.70156 0.28874 - 563.30 1.69228 0.29460 - 588.30 1.68350 0.30040 / - - 297.46 498.06 1.74339 0.26994 - 523.06 1.73277 0.27572 - 548.06 1.72278 0.28144 - 573.06 1.71334 0.28709 - 598.06 1.70442 0.29269 / - - 307.23 507.59 1.76487 0.26347 - 532.59 1.75409 0.26906 - 557.59 1.74393 0.27458 - 582.59 1.73434 0.28004 - 607.59 1.72527 0.28544 / - - 317.00 516.92 1.78628 0.25738 - 541.92 1.77533 0.26279 - 566.92 1.76502 0.26812 - 591.92 1.75528 0.27340 - 616.92 1.74606 0.27863 / - - 326.76 526.06 1.80761 0.25165 - 551.06 1.79651 0.25688 - 576.06 1.78604 0.26204 - 601.06 1.77615 0.26716 - 626.06 1.76679 0.27221 / - - 336.51 535.02 1.82887 0.24623 - 560.02 1.81761 0.25130 - 585.02 1.80699 0.25631 - 610.02 1.79696 0.26126 - 635.02 1.78746 0.26616 / - - 346.26 543.83 1.85005 0.24112 - 568.83 1.83864 0.24603 - 593.83 1.82787 0.25089 - 618.83 1.81770 0.25570 - 643.83 1.80806 0.26045 / - - 356.00 552.49 1.87115 0.23628 - 577.49 1.85959 0.24105 - 602.49 1.84868 0.24577 - 627.49 1.83836 0.25043 - 652.49 1.82858 0.25505 / - - 365.73 561.04 1.89217 0.23170 - 586.04 1.88046 0.23634 - 611.04 1.86940 0.24092 - 636.04 1.85895 0.24546 - 661.04 1.84904 0.24994 / - - 375.46 569.48 1.91309 0.22736 - 594.48 1.90124 0.23187 - 619.48 1.89004 0.23633 - 644.48 1.87946 0.24074 - 669.48 1.86942 0.24510 / - - 385.18 577.82 1.93391 0.22325 - 602.82 1.92192 0.22764 - 627.82 1.91060 0.23198 - 652.82 1.89988 0.23627 - 677.82 1.88971 0.24052 / - - 394.89 586.09 1.95464 0.21934 - 611.09 1.94252 0.22362 - 636.09 1.93106 0.22785 - 661.09 1.92021 0.23204 - 686.09 1.90993 0.23617 / - - 404.60 594.29 1.97527 0.21564 - 619.29 1.96301 0.21981 - 644.29 1.95143 0.22393 - 669.29 1.94046 0.22801 - 694.29 1.93005 0.23204 / --40 -/ --41 - 404.60 594.29 1.97527 0.21564 - 619.29 1.96301 0.21981 - 644.29 1.95143 0.22393 - 669.29 1.94046 0.22801 - 694.29 1.93005 0.23204 / --42 -/ --43 - 404.60 594.29 1.97527 0.21564 - 619.29 1.96301 0.21981 - 644.29 1.95143 0.22393 - 669.29 1.94046 0.22801 - 694.29 1.93005 0.23204 / --44 - - 404.60 594.29 1.97527 0.21564 - 619.29 1.96301 0.21981 - 644.29 1.95143 0.22393 - 669.29 1.94046 0.22801 - 694.29 1.93005 0.23204 / --45 -/ --46 - diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/TABLES/PVTX1.DATA b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/TABLES/PVTX1.DATA deleted file mode 100644 index afed2008fc..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/TABLES/PVTX1.DATA +++ /dev/null @@ -1,55 +0,0 @@ -RUNSPEC - -TITLE - SIMPLE TEST - -DIMENS - 9 9 2 / - -OIL - -WATER - -GAS - -DISGAS - -VAPOIL - -METRIC - -EQLDIMS - 1 100 2 1 1 / -TABDIMS - 1 1 33 60 16 60 / - -PROPS =============================================================== -PVTO - --- RSO PRESSURE B-OIL VISCOSITY --- (BAR) (CP) - - 20.59 50.00 1.10615 1.180 - 75.00 1.10164 1.247 - 100.00 1.09744 1.315 - 125.00 1.09351 1.384 - 150.00 1.08984 1.453 / - - 28.19 70.00 1.12522 1.066 - 95.00 1.12047 1.124 - 120.00 1.11604 1.182 - 145.00 1.11191 1.241 - 170.00 1.10804 1.300 / -/ - - - -PVTG --- - 20.00 0.00002448 0.061895 0.01299 - 0.00001224 0.061810 0.01300 - 0.00000000 0.061725 0.01300 / - 40.00 0.00000628 0.030252 0.01383 - 0.00000314 0.030249 0.01383 - 0.00000000 0.030245 0.01383 / -/ diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/TITLE/TITLE1.txt b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/TITLE/TITLE1.txt deleted file mode 100644 index c16369ff0a..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/TITLE/TITLE1.txt +++ /dev/null @@ -1,5 +0,0 @@ -TITLE -This is the title of the model. - -START - 10 'FEB' 2012 / diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/TRANS/Deck1 b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/TRANS/Deck1 deleted file mode 100644 index a49e267cd5..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/TRANS/Deck1 +++ /dev/null @@ -1,64 +0,0 @@ -START -10 MAI 2007 / - -RUNSPEC - -GRIDOPTS - 'YES' 2 / - -DIMENS - 5 5 1 / - -GRID -DX -25*1 / -DY -25*1 / -DZ -25*1 / -TOPS -25*1 / - -FAULTS - 'F1' 3 3 1 5 1 1 'X' / - 'F2' 4 4 1 5 1 1 'X' / -/ - -MULTFLT - 'F1' 0.10 / - 'F2' 0.10 / -/ - -PORO - 25*0.15 / - -SCHEDULE - - - -DATES - 10 'JUN' 2007 / -/ - - -DATES - 10 JLY 2007 / - 10 AUG 2007 / -/ - - -MULTFLT - 'F1' 20.0 / -/ - - -TSTEP - 10 2*10 / - - -DATES - 10 JLY 2008 / - 10 AUG 2008 / -/ - - diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/TVDP/TVDP1 b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/TVDP/TVDP1 deleted file mode 100644 index 29ec9686b0..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/TVDP/TVDP1 +++ /dev/null @@ -1,22 +0,0 @@ -EQLDIMS - 3 100 20 1 1 / - -TVDPA - 100 10 - 200 20 / - - -TVDPXX - 100 10 - 200 20 / - - -TVDP1 - 100 10 - 200 20 / - - -TVDPYY - 100 10 - 200 20 / - diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/VFPPROD/VFPPROD1 b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/VFPPROD/VFPPROD1 deleted file mode 100644 index 37df98d8fb..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/VFPPROD/VFPPROD1 +++ /dev/null @@ -1,2310 +0,0 @@ -VFPPROD - --- Table Datum Depth Rate Type WFR Type GFR Type TAB Type --- ----- ----------- --------- -------- -------- -------- - 32 394 'LIQ' 'WCT' 'GOR' / - - --- 'LIQ' units - SM3/DAY - 100.0 500.0 1000.0 1500.0 2500.0 - 4000.0 6000.0 8000.0 9000.0 12000.0 -15000.0 20000.0 / - --- 'THP' units - BARSA - 16.01 21.01 26.01 31.01 41.01 - 51.01 61.01 / - --- 'WCT' units - FRACTION - 0 0.1 0.2 0.3 0.5 - 0.7 0.75 0.9 1 / - --- 'GOR' units - SM3 - 90 100 150 200 500 - 700 1000 5000 10000 / - --- 'ALQ' units - - 0 / - - 1 1 1 1 44.85 37.83 32.56 30.13 29.38 - 32.73 41.14 50.28 54.96 70.65 - 86.79 115.14 -/ - 1 1 2 1 44.55 36.91 31.55 29.29 28.93 - 32.97 41.83 51.27 56.67 72.83 - 87.66 117.32 -/ - 1 1 3 1 43.06 33.11 28.00 26.72 28.29 - 34.86 45.74 57.61 61.07 64.40 - 73.48 102.86 -/ - 1 1 4 1 41.67 30.36 26.04 25.67 28.88 - 36.96 47.90 51.87 56.16 68.61 - 81.11 103.27 -/ - 1 1 5 1 35.14 23.93 24.20 26.11 34.10 - 46.38 62.77 79.73 88.44 115.35 - 143.51 194.19 -/ - 1 1 6 1 32.10 22.99 24.45 28.76 39.54 - 55.75 78.41 101.95 113.96 151.07 - 190.19 261.47 -/ - 1 1 7 1 28.88 22.94 26.52 33.71 48.27 - 71.46 103.68 136.75 153.65 206.31 - 262.75 368.93 -/ - 1 1 8 1 21.81 42.21 78.41 115.05 188.76 - 306.15 486.18 703.92 829.68 1274.03 - 1824.52 2170.54 -/ - 1 1 9 1 22.65 77.16 149.18 222.18 381.35 - 672.35 1180.65 1830.41 2164.11 2190.56 - 2209.35 2267.10 -/ - 1 2 1 1 45.61 38.96 33.67 31.09 30.04 - 32.89 40.91 49.85 54.69 69.65 - 85.35 113.10 -/ - 1 2 2 1 45.34 38.08 32.64 30.19 29.50 - 32.99 41.59 50.90 55.65 71.64 - 88.18 117.29 -/ - 1 2 3 1 43.98 34.32 28.92 27.35 28.47 - 34.65 44.84 56.55 62.46 70.19 - 77.50 108.80 -/ - 1 2 4 1 42.69 31.52 26.76 26.04 28.68 - 36.28 48.37 55.37 55.78 66.71 - 78.50 99.23 -/ - 1 2 5 1 36.43 24.47 24.06 25.87 32.85 - 44.35 59.42 74.87 82.80 107.32 - 133.01 179.23 -/ - 1 2 6 1 33.40 23.26 24.74 27.79 37.75 - 52.55 73.07 94.45 105.39 139.19 - 174.71 239.12 -/ - 1 2 7 1 30.07 22.83 25.68 32.07 45.40 - 66.28 95.50 125.57 140.92 188.61 - 239.44 333.83 -/ - 1 2 8 1 21.76 38.98 71.42 104.55 171.02 - 275.39 432.13 617.81 723.77 1098.80 - 1557.46 2465.02 -/ - 1 2 9 1 21.95 70.10 135.14 200.55 340.69 - 590.52 1020.46 1564.51 1881.58 2444.60 - 2489.84 2462.70 -/ - 1 3 1 1 46.37 40.17 34.93 32.22 30.86 - 33.18 40.58 49.71 54.16 68.60 - 83.83 110.97 -/ - 1 3 2 1 46.13 39.32 33.89 31.27 30.24 - 33.14 41.26 50.32 55.22 70.42 - 86.43 114.80 -/ - 1 3 3 1 44.92 35.67 30.01 28.15 28.75 - 34.24 43.95 55.28 61.14 74.88 - 83.73 113.72 -/ - 1 3 4 1 43.73 32.84 27.66 26.59 28.66 - 35.79 47.38 57.89 60.45 64.90 - 76.07 95.41 -/ - 1 3 5 1 37.83 25.18 24.06 26.02 31.61 - 42.38 56.19 70.17 77.32 99.44 - 122.62 164.40 -/ - 1 3 6 1 34.84 23.65 24.71 26.93 35.97 - 49.45 67.86 87.06 96.90 127.35 - 159.27 216.99 -/ - 1 3 7 1 31.44 22.93 24.98 30.50 42.60 - 61.21 87.37 114.40 128.20 170.99 - 216.35 299.71 -/ - 1 3 8 1 21.93 35.84 64.46 94.04 153.37 - 245.33 380.70 537.43 625.52 936.13 - 1313.06 2106.22 -/ - 1 3 9 1 21.53 63.05 121.09 179.16 301.34 - 513.55 870.51 1319.32 1579.23 2501.66 - 2841.44 2842.98 -/ - 1 4 1 1 47.15 41.45 36.36 33.56 31.90 - 33.66 40.35 49.47 53.98 68.64 - 82.77 110.65 -/ - 1 4 2 1 46.94 40.66 35.32 32.57 31.18 - 33.45 40.86 50.04 54.78 69.56 - 84.58 112.20 -/ - 1 4 3 1 45.87 37.16 31.34 29.17 29.18 - 33.94 43.38 53.81 59.59 76.91 - 88.69 118.87 -/ - 1 4 4 1 44.81 34.36 28.79 27.34 28.77 - 35.33 46.14 58.33 63.73 68.63 - 73.83 103.62 -/ - 1 4 5 1 39.32 26.11 24.24 25.90 31.05 - 40.45 53.09 65.67 72.05 91.75 - 112.44 149.72 -/ - 1 4 6 1 36.44 24.23 24.43 26.26 34.12 - 46.44 62.83 79.83 88.56 115.57 - 143.93 195.07 -/ - 1 4 7 1 33.03 23.18 24.69 28.96 39.87 - 56.31 79.35 103.30 115.54 153.41 - 193.42 266.35 -/ - 1 4 8 1 22.24 32.83 57.57 83.53 135.78 - 215.88 331.45 462.01 534.55 785.63 - 1091.75 1723.49 -/ - 1 4 9 1 21.54 56.04 107.03 157.94 263.21 - 441.13 732.08 1095.53 1303.03 2039.68 - 2942.17 3469.33 -/ - 1 5 1 1 48.74 44.26 39.77 36.98 34.83 - 35.60 40.43 48.28 52.84 68.05 - 82.66 109.59 -/ - 1 5 2 1 48.59 43.61 38.83 35.99 33.95 - 35.05 40.53 48.90 53.72 68.75 - 83.40 111.44 -/ - 1 5 3 1 47.81 40.65 34.90 32.17 31.06 - 33.92 42.17 51.65 56.73 72.35 - 89.13 119.12 -/ - 1 5 4 1 47.04 38.10 32.04 29.76 29.67 - 34.34 43.91 54.30 60.22 77.91 - 90.74 122.23 -/ - 1 5 5 1 42.67 29.01 25.32 25.85 30.64 - 39.59 47.25 57.50 62.51 77.61 - 93.31 121.63 -/ - 1 5 6 1 40.17 26.31 24.39 26.14 31.37 - 40.74 53.56 66.34 72.83 92.90 - 113.98 152.05 -/ - 1 5 7 1 37.00 24.31 24.70 26.50 34.58 - 47.18 64.09 81.66 90.69 118.65 - 148.08 201.19 -/ - 1 5 8 1 23.48 27.18 44.16 62.65 100.61 - 158.26 238.30 324.86 371.25 525.58 - 707.02 1078.96 -/ - 1 5 9 1 22.14 42.38 78.81 115.67 189.89 - 308.37 489.75 705.32 827.98 1254.60 - 1770.25 2832.24 -/ - 1 6 1 1 50.46 47.44 44.08 41.72 39.50 - 39.39 42.60 48.51 52.24 65.65 - 80.71 108.26 -/ - 1 6 2 1 50.31 46.99 43.36 40.86 38.59 - 38.62 42.08 48.45 52.38 66.40 - 81.96 110.28 -/ - 1 6 3 1 49.80 44.89 40.12 37.26 35.12 - 36.05 41.26 49.58 54.42 70.12 - 85.46 113.75 -/ - 1 6 4 1 49.33 42.96 37.44 34.53 32.86 - 34.79 41.93 51.72 56.55 72.45 - 87.88 117.66 -/ - 1 6 5 1 46.49 34.46 28.70 27.46 29.51 - 36.85 48.87 62.11 65.68 66.43 - 78.03 97.90 -/ - 1 6 6 1 44.71 30.98 26.36 26.33 30.45 - 39.36 50.42 55.00 59.70 73.53 - 87.55 112.69 -/ - 1 6 7 1 42.27 27.72 24.89 25.89 31.84 - 38.89 50.90 62.54 68.38 86.25 - 104.97 138.82 -/ - 1 6 8 1 26.90 23.69 32.14 42.76 65.63 - 101.30 149.93 200.46 226.71 310.60 - 403.49 582.32 -/ - 1 6 9 1 23.00 29.95 50.95 73.37 118.78 - 187.97 286.08 394.76 453.88 652.79 - 888.47 1362.02 -/ - 1 7 1 1 51.01 48.30 45.32 43.17 41.07 - 40.85 43.84 49.24 52.65 65.34 - 79.85 106.67 -/ - 1 7 2 1 50.83 47.91 44.68 42.39 40.20 - 40.05 43.17 48.90 52.56 65.82 - 80.81 108.34 -/ - 1 7 3 1 50.31 46.08 41.76 38.98 36.74 - 37.23 41.54 49.14 53.61 69.35 - 85.38 114.08 -/ - 1 7 4 1 49.91 44.39 39.27 36.34 34.34 - 35.65 41.63 50.58 55.76 72.04 - 87.72 116.93 -/ - 1 7 5 1 47.53 36.48 30.29 28.56 29.65 - 36.11 46.77 59.60 66.05 79.00 - 81.31 113.43 -/ - 1 7 6 1 45.98 32.94 27.61 26.87 29.81 - 37.91 51.16 60.28 61.55 69.72 - 82.31 104.44 -/ - 1 7 7 1 43.83 29.39 25.57 26.16 31.12 - 40.82 47.96 58.53 63.72 79.32 - 95.45 124.55 -/ - 1 7 8 1 28.57 24.01 29.42 38.30 57.18 - 87.15 128.19 170.56 192.41 261.58 - 337.24 480.46 -/ - 1 7 9 1 23.76 27.23 44.27 62.90 101.07 - 159.08 239.81 327.37 374.35 530.21 - 710.82 1073.88 -/ - 1 8 1 1 53.43 51.26 49.55 48.43 47.46 - 48.13 50.86 54.93 57.40 67.07 - 79.09 102.89 -/ - 1 8 2 1 53.24 51.00 49.18 47.93 46.78 - 47.36 50.12 54.31 56.85 66.85 - 79.18 103.39 -/ - 1 8 3 1 52.47 50.04 47.69 45.95 44.19 - 44.17 47.06 51.88 54.77 66.40 - 80.20 106.28 -/ - 1 8 4 1 51.97 49.23 46.30 44.21 42.15 - 41.94 44.99 50.41 53.82 66.83 - 81.84 109.55 -/ - 1 8 5 1 50.73 44.88 39.58 36.61 34.64 - 36.08 42.41 51.80 57.23 74.50 - 90.92 121.71 -/ - 1 8 6 1 50.09 42.38 36.29 33.43 32.23 - 35.15 43.81 54.41 59.95 76.96 - 94.68 127.64 -/ - 1 8 7 1 49.13 39.14 32.67 30.38 30.45 - 35.66 46.22 57.51 64.10 83.46 - 101.30 137.01 -/ - 1 8 8 1 38.57 24.73 25.16 26.96 35.25 - 48.34 65.96 84.10 93.37 122.12 - 152.43 207.38 -/ - 1 8 9 1 31.17 23.74 27.14 34.33 49.50 - 73.67 107.16 141.62 159.32 214.89 - 275.06 387.80 -/ - 1 9 1 1 55.72 55.67 55.50 55.47 55.74 - 56.76 59.08 62.41 64.44 72.00 - 81.74 102.80 -/ - 1 9 2 1 55.72 55.67 55.50 55.47 55.74 - 56.76 59.08 62.41 64.44 72.00 - 81.74 102.80 -/ - 1 9 3 1 55.72 55.67 55.50 55.47 55.74 - 56.76 59.08 62.41 64.44 72.00 - 81.74 102.80 -/ - 1 9 4 1 55.72 55.67 55.50 55.47 55.74 - 56.76 59.08 62.41 64.44 72.00 - 81.74 102.80 -/ - 1 9 5 1 55.72 55.67 55.50 55.47 55.74 - 56.76 59.08 62.41 64.44 72.00 - 81.74 102.80 -/ - 1 9 6 1 55.72 55.67 55.50 55.47 55.74 - 56.76 59.08 62.41 64.44 72.00 - 81.74 102.80 -/ - 1 9 7 1 55.72 55.67 55.50 55.47 55.74 - 56.76 59.08 62.41 64.44 72.00 - 81.74 102.80 -/ - 1 9 8 1 55.72 55.67 55.50 55.47 55.74 - 56.76 59.08 62.41 64.44 72.00 - 81.74 102.80 -/ - 1 9 9 1 55.72 55.67 55.50 55.47 55.74 - 56.76 59.08 62.41 64.44 72.00 - 81.74 102.80 -/ - 2 1 1 1 50.19 44.42 39.70 37.12 35.76 - 38.00 45.59 54.58 59.17 73.89 - 89.59 117.43 -/ - 2 1 2 1 49.95 43.62 38.71 36.21 35.15 - 37.98 46.37 55.40 60.13 75.90 - 92.49 121.79 -/ - 2 1 3 1 48.70 40.17 35.03 33.20 33.72 - 39.37 49.37 60.95 66.83 70.28 - 76.13 106.62 -/ - 2 1 4 1 47.53 37.53 32.79 31.66 33.63 - 40.92 52.83 56.66 59.15 71.09 - 83.18 104.85 -/ - 2 1 5 1 41.88 30.39 29.36 31.03 37.59 - 49.04 64.64 81.11 89.64 116.18 - 144.13 194.63 -/ - 2 1 6 1 39.10 28.97 29.91 32.65 42.42 - 57.70 79.69 102.85 114.76 151.64 - 190.55 261.72 -/ - 2 1 7 1 35.98 28.24 30.59 36.81 50.38 - 72.79 104.53 137.35 154.15 206.63 - 262.99 369.05 -/ - 2 1 8 1 27.22 44.38 79.53 115.73 189.07 - 306.28 486.19 704.17 829.85 1274.17 - 1825.59 2170.64 -/ - 2 1 9 1 26.99 78.27 149.63 222.42 381.41 - 672.49 1180.78 1831.55 2164.20 2190.64 - 2209.43 2160.05 -/ - 2 2 1 1 50.91 45.46 40.78 38.11 36.54 - 38.35 45.39 54.63 59.09 73.06 - 88.30 115.57 -/ - 2 2 2 1 50.69 44.69 39.79 37.18 35.87 - 38.23 46.03 55.22 59.90 74.88 - 90.98 119.59 -/ - 2 2 3 1 49.55 41.33 36.02 33.96 34.06 - 39.08 48.77 59.93 65.70 76.36 - 83.33 114.14 -/ - 2 2 4 1 48.47 38.69 33.63 32.24 33.74 - 40.63 52.03 60.75 61.34 69.40 - 80.80 101.00 -/ - 2 2 5 1 43.09 31.09 29.56 31.18 36.53 - 47.25 61.51 76.45 84.18 108.29 - 133.73 179.72 -/ - 2 2 6 1 40.35 29.40 29.75 31.94 40.85 - 54.71 74.52 95.48 106.29 139.83 - 175.17 239.43 -/ - 2 2 7 1 37.19 28.46 30.04 35.43 47.72 - 67.78 96.46 126.25 141.51 188.98 - 239.72 333.99 -/ - 2 2 8 1 27.47 41.33 72.67 105.33 171.40 - 275.56 432.17 618.00 724.06 1098.95 - 1558.35 2465.13 -/ - 2 2 9 1 26.64 71.35 135.66 200.83 340.79 - 590.60 1020.60 1565.48 1882.73 2444.69 - 2442.89 2462.77 -/ - 2 3 1 1 51.64 46.56 41.98 39.26 37.49 - 38.91 45.25 54.28 58.82 73.36 - 87.51 114.59 -/ - 2 3 2 1 51.44 45.83 41.00 38.31 36.75 - 38.61 45.75 55.14 59.67 73.85 - 89.41 117.30 -/ - 2 3 3 1 50.42 42.60 37.17 34.90 34.56 - 38.87 48.41 58.73 64.49 80.15 - 89.24 120.33 -/ - 2 3 4 1 49.43 39.99 34.64 32.97 33.95 - 40.31 51.02 63.14 66.15 67.80 - 78.60 97.42 -/ - 2 3 5 1 44.38 31.96 29.79 30.99 35.50 - 45.51 58.54 71.97 78.91 100.57 - 123.48 164.97 -/ - 2 3 6 1 41.73 29.98 29.58 31.40 39.25 - 51.86 69.53 88.26 97.94 128.06 - 159.83 217.32 -/ - 2 3 7 1 38.57 28.76 29.86 34.09 45.18 - 62.92 88.46 115.20 128.89 171.42 - 216.64 299.92 -/ - 2 3 8 1 27.82 38.40 65.87 94.95 153.83 - 245.55 380.77 537.42 625.73 936.30 - 1313.80 2106.33 -/ - 2 3 9 1 26.63 64.47 121.71 179.51 301.48 - 513.55 870.66 1320.14 1580.19 2501.75 - 2843.76 2840.23 -/ - 2 4 1 1 52.38 47.72 43.31 40.58 38.62 - 39.68 45.25 53.77 58.66 73.59 - 87.19 114.45 -/ - 2 4 2 1 52.21 47.04 42.36 39.62 37.82 - 39.23 45.57 54.67 59.54 73.99 - 88.33 116.90 -/ - 2 4 3 1 51.30 43.99 38.53 36.04 35.29 - 38.80 48.01 57.57 63.03 79.91 - 94.81 125.17 -/ - 2 4 4 1 50.41 41.44 35.87 33.90 34.29 - 39.83 49.80 61.71 67.71 74.51 - 78.97 109.43 -/ - 2 4 5 1 45.76 33.06 30.18 30.82 36.40 - 43.77 55.75 67.76 73.92 93.12 - 113.49 150.44 -/ - 2 4 6 1 43.23 30.76 29.61 31.36 37.68 - 49.16 64.77 81.26 89.81 116.44 - 144.58 195.51 -/ - 2 4 7 1 40.12 29.18 30.22 32.88 42.76 - 58.28 80.64 104.21 116.34 153.98 - 193.78 266.61 -/ - 2 4 8 1 28.30 35.66 59.17 84.59 136.34 - 216.15 331.56 462.04 534.54 786.05 - 1091.91 1724.39 -/ - 2 4 9 1 27.12 57.67 107.77 158.36 263.38 - 441.17 732.30 1095.67 1303.81 2039.78 - 2942.25 3469.41 -/ - 2 5 1 1 53.89 50.23 46.42 43.84 41.65 - 41.96 45.93 53.16 57.45 72.52 - 87.65 115.02 -/ - 2 5 2 1 53.76 49.68 45.59 42.90 40.76 - 41.32 45.82 53.58 58.14 73.55 - 88.19 115.59 -/ - 2 5 3 1 53.11 47.14 42.01 39.22 37.61 - 39.46 46.73 56.71 61.38 76.36 - 92.23 121.75 -/ - 2 5 4 1 52.46 44.91 39.25 36.68 35.85 - 39.28 48.68 58.34 63.71 80.99 - 97.02 128.73 -/ - 2 5 5 1 48.78 36.25 31.78 31.45 35.29 - 44.26 50.50 60.31 65.12 79.66 - 94.95 122.82 -/ - 2 5 6 1 46.64 33.30 30.34 31.04 36.72 - 44.07 56.23 68.46 74.73 94.28 - 115.03 152.78 -/ - 2 5 7 1 43.86 30.84 29.76 31.53 38.11 - 49.87 66.00 83.08 91.92 119.50 - 148.70 201.61 -/ - 2 5 8 1 30.00 30.82 46.29 64.14 101.48 - 158.72 238.54 324.99 371.33 525.58 - 707.44 1079.14 -/ - 2 5 9 1 27.58 44.58 79.94 116.35 190.21 - 308.50 489.76 705.57 828.14 1255.31 - 1771.21 2832.33 -/ - 2 6 1 1 55.67 53.04 50.25 48.17 46.12 - 45.90 48.91 54.27 57.74 70.55 - 85.03 111.98 -/ - 2 6 2 1 55.49 52.67 49.62 47.41 45.27 - 45.12 48.25 53.99 57.69 71.10 - 86.10 113.83 -/ - 2 6 3 1 54.96 50.89 46.80 44.11 41.92 - 42.37 46.67 54.41 58.99 75.15 - 90.48 119.24 -/ - 2 6 4 1 54.56 49.25 44.39 41.55 39.58 - 40.80 46.84 56.05 61.37 77.70 - 92.57 122.81 -/ - 2 6 5 1 52.18 41.67 35.74 33.93 34.87 - 41.43 52.49 65.44 71.58 71.26 - 80.73 100.08 -/ - 2 6 6 1 50.68 38.30 33.09 32.18 34.94 - 43.28 55.96 58.11 62.66 76.00 - 89.60 114.23 -/ - 2 6 7 1 48.61 34.88 31.09 31.29 36.19 - 44.13 53.90 65.04 70.65 87.97 - 106.30 139.75 -/ - 2 6 8 1 34.07 29.03 35.33 45.14 67.10 - 102.20 150.48 200.79 227.00 310.76 - 403.57 582.30 -/ - 2 6 9 1 29.32 33.19 52.81 74.64 119.48 - 188.32 286.24 394.83 453.92 653.10 - 888.64 1362.67 -/ - 2 7 1 1 56.27 53.80 51.33 49.46 47.56 - 47.37 50.30 55.31 58.38 70.51 - 84.44 110.67 -/ - 2 7 2 1 56.06 53.47 50.78 48.77 46.76 - 46.54 49.53 54.79 58.15 70.81 - 85.24 112.17 -/ - 2 7 3 1 55.44 51.93 48.25 45.73 43.50 - 43.64 47.35 54.25 58.47 73.58 - 89.95 118.66 -/ - 2 7 4 1 55.10 50.49 46.05 43.25 41.13 - 41.86 46.84 55.22 60.15 76.93 - 92.66 122.32 -/ - 2 7 5 1 53.09 43.56 37.48 35.26 35.32 - 40.61 51.13 63.02 69.37 84.77 - 87.66 119.45 -/ - 2 7 6 1 51.80 40.25 34.52 33.11 34.86 - 42.36 54.77 65.99 67.39 72.54 - 84.75 106.34 -/ - 2 7 7 1 49.98 36.67 32.05 31.75 35.79 - 45.11 52.46 61.40 66.39 81.44 - 97.14 125.77 -/ - 2 7 8 1 35.88 29.06 33.04 41.07 58.97 - 88.25 128.89 171.01 192.79 261.82 - 337.38 480.50 -/ - 2 7 9 1 30.34 30.92 46.44 64.41 101.95 - 159.54 240.05 327.50 374.44 530.20 - 711.26 1074.05 -/ - 2 8 1 1 58.76 56.63 55.13 54.21 53.53 - 54.10 57.08 60.99 63.37 72.72 - 84.38 107.79 -/ - 2 8 2 1 58.57 56.35 54.76 53.72 52.89 - 53.69 56.41 60.42 62.86 72.50 - 84.44 108.22 -/ - 2 8 3 1 57.76 55.36 53.41 51.90 50.29 - 50.64 53.56 58.09 60.82 71.91 - 85.19 110.73 -/ - 2 8 4 1 57.22 54.69 52.23 50.39 48.52 - 48.39 51.40 56.46 59.56 72.04 - 86.51 113.64 -/ - 2 8 5 1 55.93 51.01 46.38 43.52 41.40 - 42.26 47.57 56.38 61.57 79.43 - 95.91 127.14 -/ - 2 8 6 1 55.39 48.86 43.39 40.48 38.81 - 40.75 48.41 59.08 64.85 81.60 - 97.84 130.35 -/ - 2 8 7 1 54.57 46.02 39.92 37.30 36.60 - 40.53 50.85 61.80 67.52 86.49 - 106.81 142.35 -/ - 2 8 8 1 45.53 31.31 30.19 32.10 38.81 - 51.19 68.04 85.63 94.71 123.04 - 153.10 207.79 -/ - 2 8 9 1 38.59 28.93 31.29 37.62 51.82 - 75.11 108.06 142.28 159.88 215.22 - 275.30 387.91 -/ - 2 9 1 1 60.73 60.68 60.50 60.47 60.74 - 61.77 64.08 67.41 69.44 77.00 - 86.74 107.80 -/ - 2 9 2 1 60.73 60.68 60.50 60.47 60.74 - 61.77 64.08 67.41 69.44 77.00 - 86.74 107.80 -/ - 2 9 3 1 60.73 60.68 60.50 60.47 60.74 - 61.77 64.08 67.41 69.44 77.00 - 86.74 107.80 -/ - 2 9 4 1 60.73 60.68 60.50 60.47 60.74 - 61.77 64.08 67.41 69.44 77.00 - 86.74 107.80 -/ - 2 9 5 1 60.73 60.68 60.50 60.47 60.74 - 61.77 64.08 67.41 69.44 77.00 - 86.74 107.80 -/ - 2 9 6 1 60.73 60.68 60.50 60.47 60.74 - 61.77 64.08 67.41 69.44 77.00 - 86.74 107.80 -/ - 2 9 7 1 60.73 60.68 60.50 60.47 60.74 - 61.77 64.08 67.41 69.44 77.00 - 86.74 107.80 -/ - 2 9 8 1 60.73 60.68 60.50 60.47 60.74 - 61.77 64.08 67.41 69.44 77.00 - 86.74 107.80 -/ - 2 9 9 1 60.73 60.68 60.50 60.47 60.74 - 61.77 64.08 67.41 69.44 77.00 - 86.74 107.80 -/ - 3 1 1 1 55.36 50.53 46.35 43.75 42.05 - 43.49 50.21 59.54 64.02 77.51 - 92.74 120.09 -/ - 3 1 2 1 55.15 49.81 45.41 42.83 41.35 - 43.31 50.83 60.14 64.60 79.36 - 95.50 124.28 -/ - 3 1 3 1 54.11 46.68 41.75 39.58 39.31 - 43.99 53.51 64.60 70.28 76.97 - 83.61 114.22 -/ - 3 1 4 1 53.09 44.19 39.37 37.72 38.85 - 45.54 56.74 63.21 62.51 74.03 - 85.74 106.91 -/ - 3 1 5 1 48.13 36.75 34.97 36.31 41.51 - 52.20 67.01 82.95 91.27 117.37 - 145.05 195.29 -/ - 3 1 6 1 45.59 34.96 34.83 37.01 45.80 - 60.16 81.39 104.11 115.86 152.45 - 191.21 262.14 -/ - 3 1 7 1 42.63 33.87 35.15 40.45 53.04 - 74.55 105.71 138.21 154.92 207.17 - 263.36 369.30 -/ - 3 1 8 1 32.89 47.08 80.98 116.65 189.56 - 306.52 486.29 704.16 830.02 1274.37 - 1825.77 2172.38 -/ - 3 1 9 1 31.78 79.69 150.27 222.78 381.57 - 672.49 1180.95 1831.70 2165.59 2190.75 - 2209.53 2160.15 -/ - 3 2 1 1 56.06 51.50 47.38 44.74 42.91 - 44.07 50.15 59.08 63.91 77.59 - 91.59 119.36 -/ - 3 2 2 1 55.87 50.81 46.45 43.81 42.15 - 43.70 50.64 60.21 64.52 78.51 - 94.14 122.25 -/ - 3 2 3 1 54.91 47.79 42.77 40.43 39.85 - 43.84 53.31 63.62 69.28 82.62 - 90.31 119.73 -/ - 3 2 4 1 53.97 45.33 40.27 38.44 39.08 - 45.31 55.91 66.98 67.95 72.52 - 83.56 103.26 -/ - 3 2 5 1 49.27 37.55 35.23 36.10 40.62 - 50.60 64.11 78.49 86.01 109.64 - 134.78 180.50 -/ - 3 2 6 1 46.80 35.52 34.77 36.56 44.40 - 57.39 76.43 96.90 107.54 140.73 - 175.88 239.91 -/ - 3 2 7 1 43.84 34.20 35.00 39.27 50.59 - 69.74 97.76 127.23 142.36 189.60 - 240.16 334.29 -/ - 3 2 8 1 33.25 44.23 74.30 106.38 171.96 - 275.84 432.30 618.03 724.05 1099.40 - 1558.55 2457.93 -/ - 3 2 9 1 31.72 72.94 136.39 201.26 340.98 - 590.64 1020.83 1565.64 1882.89 2466.76 - 2441.74 2462.87 -/ - 3 3 1 1 56.77 52.51 48.51 45.88 43.91 - 44.79 50.21 58.68 63.58 78.03 - 92.08 119.51 -/ - 3 3 2 1 56.60 51.87 47.61 44.93 43.11 - 44.33 50.52 59.61 64.53 78.44 - 92.72 121.14 -/ - 3 3 3 1 55.73 48.99 43.93 41.44 40.54 - 43.80 53.19 62.48 68.15 85.05 - 95.84 125.67 -/ - 3 3 4 1 54.87 46.58 41.35 39.29 39.43 - 44.87 54.89 66.75 72.40 71.09 - 81.58 103.97 -/ - 3 3 5 1 50.49 38.53 35.62 36.05 40.31 - 49.04 61.40 74.27 80.98 102.13 - 124.71 165.87 -/ - 3 3 6 1 48.10 36.24 34.94 36.47 42.98 - 54.79 71.68 89.89 99.38 129.11 - 160.64 217.94 -/ - 3 3 7 1 45.19 34.61 35.38 38.17 48.29 - 65.12 89.95 116.29 129.86 172.14 - 217.20 300.29 -/ - 3 3 8 1 33.72 41.55 67.71 96.15 154.49 - 245.88 380.94 537.49 625.76 936.63 - 1314.00 2107.53 -/ - 3 3 9 1 32.04 66.27 122.55 180.01 301.71 - 513.63 870.80 1320.31 1580.35 2503.24 - 2843.87 2910.90 -/ - 3 4 1 1 57.49 53.57 49.75 47.16 45.09 - 45.68 50.41 58.37 63.02 78.37 - 91.92 119.56 -/ - 3 4 2 1 57.34 52.98 48.89 46.22 44.25 - 45.13 50.55 59.10 64.05 79.16 - 92.97 120.90 -/ - 3 4 3 1 56.56 50.28 45.28 42.65 41.41 - 43.98 52.51 62.30 67.06 83.29 - 101.06 131.63 -/ - 3 4 4 1 55.79 47.97 42.63 40.33 39.97 - 44.52 54.31 65.39 71.24 81.21 - 85.48 115.53 -/ - 3 4 5 1 51.77 39.73 36.18 36.25 40.57 - 47.46 58.86 70.35 76.28 94.94 - 114.93 151.51 -/ - 3 4 6 1 49.51 37.17 35.23 36.60 41.63 - 52.36 67.20 83.16 91.48 117.67 - 145.53 196.20 -/ - 3 4 7 1 46.68 35.20 35.14 37.24 46.14 - 60.76 82.36 105.48 117.46 154.79 - 194.45 267.02 -/ - 3 4 8 1 34.35 39.10 61.23 85.99 137.12 - 216.56 331.78 462.15 534.61 786.02 - 1092.44 1724.59 -/ - 3 4 9 1 32.66 59.73 108.76 158.96 263.68 - 441.28 732.29 1095.85 1303.99 2041.01 - 2942.37 3469.51 -/ - 3 5 1 1 58.96 55.87 52.62 50.26 48.08 - 48.13 51.66 58.26 62.31 76.79 - 92.20 119.59 -/ - 3 5 2 1 58.84 55.39 51.87 49.39 47.22 - 47.45 51.31 58.51 62.83 78.12 - 93.31 121.18 -/ - 3 5 3 1 58.27 53.17 48.61 45.84 43.99 - 45.25 51.56 60.99 66.44 81.13 - 95.66 125.80 -/ - 3 5 4 1 57.70 51.19 46.00 43.30 42.00 - 44.52 53.07 63.21 68.09 84.44 - 102.61 135.40 -/ - 3 5 5 1 54.54 43.05 38.18 37.17 39.89 - 48.42 56.09 63.55 68.18 82.20 - 97.08 124.46 -/ - 3 5 6 1 52.68 40.00 36.35 36.44 40.98 - 47.78 59.37 71.08 77.11 96.12 - 116.49 153.87 -/ - 3 5 7 1 50.20 37.25 35.36 36.91 42.05 - 53.06 68.43 84.95 93.57 120.72 - 149.64 202.28 -/ - 3 5 8 1 36.43 35.00 48.98 66.06 102.65 - 159.39 238.91 325.23 371.53 525.66 - 707.45 1079.81 -/ - 3 5 9 1 33.31 47.31 81.39 117.27 190.69 - 308.74 489.85 705.57 828.32 1255.50 - 1771.38 2833.83 -/ - 3 6 1 1 60.89 58.43 56.07 54.23 52.34 - 52.16 55.15 60.17 63.33 75.63 - 89.59 116.00 -/ - 3 6 2 1 60.67 58.10 55.52 53.55 51.55 - 51.34 54.39 59.68 63.15 76.03 - 90.50 117.70 -/ - 3 6 3 1 60.03 56.56 53.01 50.54 48.34 - 48.51 52.30 59.44 63.79 79.35 - 95.82 125.11 -/ - 3 6 4 1 59.68 55.12 50.85 48.11 46.02 - 46.78 51.98 60.66 65.75 82.70 - 97.56 128.29 -/ - 3 6 5 1 57.63 48.33 42.52 40.32 40.41 - 45.97 56.52 69.11 75.46 78.01 - 83.86 102.76 -/ - 3 6 6 1 56.34 45.12 39.67 38.15 39.97 - 47.70 60.55 63.06 66.01 78.93 - 92.13 116.25 -/ - 3 6 7 1 54.54 41.69 37.30 36.88 41.06 - 50.24 57.30 68.02 73.42 90.16 - 108.08 141.10 -/ - 3 6 8 1 40.92 34.33 39.08 48.09 69.02 - 103.43 151.26 201.33 227.44 311.05 - 403.76 582.37 -/ - 3 6 9 1 35.60 37.01 55.16 76.28 120.42 - 188.84 286.53 395.00 454.04 653.13 - 889.03 1362.87 -/ - 3 7 1 1 61.51 59.11 57.04 55.39 53.58 - 53.67 56.63 61.33 64.17 75.80 - 89.22 114.92 -/ - 3 7 2 1 61.28 58.83 56.56 54.78 52.93 - 52.80 55.80 60.74 63.80 75.98 - 89.88 116.29 -/ - 3 7 3 1 60.52 57.49 54.33 52.03 49.86 - 49.81 53.20 59.54 63.55 78.11 - 93.98 123.49 -/ - 3 7 4 1 60.18 56.24 52.36 49.75 47.57 - 47.95 52.21 60.08 64.79 81.50 - 97.88 126.84 -/ - 3 7 5 1 58.45 50.08 44.30 41.78 41.20 - 45.40 55.93 66.75 73.04 91.39 - 95.26 125.74 -/ - 3 7 6 1 57.34 47.00 41.23 39.34 40.20 - 47.07 58.61 71.88 73.88 75.76 - 87.64 108.73 -/ - 3 7 7 1 55.77 43.52 38.47 37.46 40.35 - 49.22 58.74 64.67 69.51 84.04 - 99.33 127.45 -/ - 3 7 8 1 42.78 34.09 37.16 44.40 61.26 - 89.71 129.85 171.70 193.38 262.19 - 337.66 480.64 -/ - 3 7 9 1 36.83 35.15 49.17 66.35 103.12 - 160.21 240.42 327.74 374.63 530.29 - 711.26 1074.73 -/ - 3 8 1 1 64.00 61.97 60.63 59.86 59.42 - 60.12 62.18 66.05 68.02 78.24 - 89.62 112.73 -/ - 3 8 2 1 63.84 61.67 60.25 59.37 58.79 - 59.44 62.39 66.27 68.43 78.03 - 89.67 113.12 -/ - 3 8 3 1 63.06 60.60 58.90 57.57 56.25 - 56.84 59.75 64.08 66.70 77.38 - 90.25 115.35 -/ - 3 8 4 1 62.47 59.97 57.89 56.26 54.46 - 54.61 57.66 62.44 65.32 77.35 - 91.32 117.95 -/ - 3 8 5 1 61.03 56.78 52.71 50.02 47.83 - 48.32 52.89 61.19 66.17 83.99 - 101.17 131.65 -/ - 3 8 6 1 60.55 54.90 49.99 47.09 45.19 - 46.55 53.25 63.40 69.32 86.57 - 102.77 134.57 -/ - 3 8 7 1 59.85 52.38 46.72 43.93 42.73 - 45.69 55.18 66.45 71.91 89.88 - 109.84 146.42 -/ - 3 8 8 1 51.95 37.77 35.76 37.46 42.77 - 54.50 70.64 87.65 96.49 124.34 - 154.09 208.50 -/ - 3 8 9 1 45.49 34.62 35.96 41.40 54.67 - 77.01 109.30 143.18 160.67 215.77 - 275.66 388.16 -/ - 3 9 1 1 65.73 65.68 65.51 65.47 65.75 - 66.77 69.09 72.41 74.44 82.00 - 91.74 112.80 -/ - 3 9 2 1 65.73 65.68 65.51 65.47 65.75 - 66.77 69.09 72.41 74.44 82.00 - 91.74 112.80 -/ - 3 9 3 1 65.73 65.68 65.51 65.47 65.75 - 66.77 69.09 72.41 74.44 82.00 - 91.74 112.80 -/ - 3 9 4 1 65.73 65.68 65.51 65.47 65.75 - 66.77 69.09 72.41 74.44 82.00 - 91.74 112.80 -/ - 3 9 5 1 65.73 65.68 65.51 65.47 65.75 - 66.77 69.09 72.41 74.44 82.00 - 91.74 112.80 -/ - 3 9 6 1 65.73 65.68 65.51 65.47 65.75 - 66.77 69.09 72.41 74.44 82.00 - 91.74 112.80 -/ - 3 9 7 1 65.73 65.68 65.51 65.47 65.75 - 66.77 69.09 72.41 74.44 82.00 - 91.74 112.80 -/ - 3 9 8 1 65.73 65.68 65.51 65.47 65.75 - 66.77 69.09 72.41 74.44 82.00 - 91.74 112.80 -/ - 3 9 9 1 65.73 65.68 65.51 65.47 65.75 - 66.77 69.09 72.41 74.44 82.00 - 91.74 112.80 -/ - 4 1 1 1 60.44 56.33 52.64 50.13 48.22 - 49.19 55.05 63.85 68.96 82.18 - 96.15 123.99 -/ - 4 1 2 1 60.26 55.69 51.75 49.20 47.46 - 48.78 55.52 64.99 69.60 83.12 - 98.79 127.07 -/ - 4 1 3 1 59.36 52.85 48.21 45.83 45.07 - 48.81 58.20 68.48 74.02 84.29 - 91.06 120.23 -/ - 4 1 4 1 58.48 50.52 45.76 43.83 44.20 - 50.27 60.80 70.11 68.11 77.31 - 88.68 109.36 -/ - 4 1 5 1 54.07 42.98 40.59 41.24 45.75 - 55.72 69.81 85.18 93.27 118.88 - 146.26 196.21 -/ - 4 1 6 1 51.74 40.93 39.99 41.72 49.53 - 63.07 83.49 105.70 117.28 153.51 - 192.08 262.79 -/ - 4 1 7 1 48.96 39.53 40.13 44.47 56.15 - 76.72 107.18 139.35 155.92 207.90 - 263.93 369.69 -/ - 4 1 8 1 38.57 50.22 82.74 117.80 190.20 - 306.86 486.46 704.24 830.05 1274.68 - 1826.00 2172.59 -/ - 4 1 9 1 36.82 81.43 151.09 223.28 381.81 - 672.57 1181.06 1831.89 2165.78 2185.95 - 2209.67 2267.40 -/ - 4 2 1 1 61.12 57.24 53.61 51.11 49.11 - 49.85 55.13 63.55 68.44 82.76 - 96.84 124.38 -/ - 4 2 2 1 60.95 56.64 52.75 50.19 48.31 - 49.38 55.46 64.50 69.75 83.22 - 97.56 126.21 -/ - 4 2 3 1 60.13 53.91 49.22 46.73 45.71 - 48.78 58.17 67.53 73.15 89.53 - 97.31 126.98 -/ - 4 2 4 1 59.31 51.62 46.71 44.58 44.54 - 49.89 59.94 71.71 74.57 75.95 - 86.68 105.91 -/ - 4 2 5 1 55.15 43.86 40.96 41.26 45.07 - 54.28 67.14 80.95 88.23 111.34 - 136.15 181.55 -/ - 4 2 6 1 52.90 41.60 40.20 41.60 48.27 - 60.52 78.75 98.69 109.12 141.92 - 176.83 240.67 -/ - 4 2 7 1 50.15 39.94 40.49 43.47 53.91 - 72.13 99.40 128.47 143.48 190.43 - 240.80 334.71 -/ - 4 2 8 1 39.03 47.59 76.25 107.68 172.69 - 276.24 432.51 618.14 724.12 1099.35 - 1558.79 2458.16 -/ - 4 2 9 1 37.01 74.87 137.31 201.84 341.27 - 590.76 1020.80 1565.85 1883.08 2468.62 - 2441.48 2463.00 -/ - 4 3 1 1 61.81 58.19 54.68 52.21 50.14 - 50.65 55.35 63.32 67.99 83.33 - 96.89 124.70 -/ - 4 3 2 1 61.66 57.62 53.85 51.30 49.31 - 50.11 55.50 64.09 69.07 83.68 - 97.45 126.26 -/ - 4 3 3 1 60.91 55.03 50.37 47.78 46.50 - 48.97 57.59 67.09 72.07 88.53 - 103.36 132.56 -/ - 4 3 4 1 60.16 52.83 47.82 45.49 45.04 - 49.60 59.24 70.63 76.45 77.77 - 84.91 110.69 -/ - 4 3 5 1 56.30 44.91 41.48 41.49 44.59 - 52.87 64.65 76.99 83.46 104.05 - 126.27 167.07 -/ - 4 3 6 1 54.15 42.42 40.49 41.83 47.06 - 58.14 74.25 91.90 101.17 130.46 - 161.71 218.78 -/ - 4 3 7 1 51.46 40.47 40.36 42.60 51.82 - 67.76 91.80 117.69 131.11 173.09 - 217.95 300.78 -/ - 4 3 8 1 39.61 45.17 69.88 97.63 155.33 - 246.35 381.20 537.64 625.87 936.63 - 1314.44 2107.76 -/ - 4 3 9 1 37.60 68.42 123.61 180.67 302.05 - 513.78 870.81 1320.56 1580.56 2503.42 - 2845.95 2911.03 -/ - 4 4 1 1 62.51 59.19 55.85 53.44 51.32 - 51.61 55.71 63.18 67.61 83.31 - 97.52 125.00 -/ - 4 4 2 1 62.37 58.66 55.05 52.55 50.47 - 51.00 55.71 63.76 68.48 84.08 - 97.84 126.19 -/ - 4 4 3 1 61.70 56.24 51.68 49.02 47.47 - 49.34 57.10 67.12 71.83 86.97 - 104.32 135.67 -/ - 4 4 4 1 61.04 54.14 49.11 46.61 45.79 - 49.38 59.16 69.30 75.07 88.58 - 93.12 123.52 -/ - 4 4 5 1 57.50 46.16 42.18 41.79 45.15 - 51.60 62.33 73.35 79.05 97.14 - 116.74 152.92 -/ - 4 4 6 1 55.48 43.46 40.87 41.54 45.92 - 55.93 70.07 85.45 93.55 119.24 - 146.79 197.16 -/ - 4 4 7 1 52.90 41.19 40.25 41.97 49.88 - 63.69 84.48 107.09 118.89 155.87 - 195.33 267.68 -/ - 4 4 8 1 40.36 42.97 63.66 87.69 138.10 - 217.13 332.11 462.35 534.77 786.07 - 1092.40 1724.84 -/ - 4 4 9 1 38.05 62.15 109.99 159.74 264.09 - 441.48 732.35 1095.96 1304.26 2041.20 - 2944.08 3469.65 -/ - 4 5 1 1 64.04 61.33 58.51 56.37 54.26 - 54.16 57.45 63.52 67.37 81.31 - 96.25 124.36 -/ - 4 5 2 1 63.86 60.90 57.83 55.56 53.41 - 53.43 56.98 63.60 67.71 82.45 - 97.93 127.07 -/ - 4 5 3 1 63.33 58.93 54.85 52.20 50.19 - 51.03 56.59 65.52 70.73 86.59 - 101.24 131.20 -/ - 4 5 4 1 62.84 57.15 52.41 49.68 48.08 - 49.90 57.71 68.14 72.94 88.19 - 105.95 138.23 -/ - 4 5 5 1 60.08 49.54 44.48 43.08 44.88 - 52.67 62.63 67.10 71.58 85.12 - 99.61 126.50 -/ - 4 5 6 1 58.43 46.46 42.36 41.99 45.51 - 51.93 62.86 74.10 79.91 98.34 - 118.32 155.29 -/ - 4 5 7 1 56.21 43.54 40.99 41.83 46.31 - 56.62 71.28 87.22 95.62 122.27 - 150.89 203.25 -/ - 4 5 8 1 42.75 39.56 52.14 68.36 104.08 - 160.25 239.44 325.58 371.82 525.84 - 707.54 1079.78 -/ - 4 5 9 1 39.05 50.44 83.15 118.43 191.33 - 309.08 490.02 705.64 828.35 1255.83 - 1771.59 2834.02 -/ - 4 6 1 1 66.11 63.68 61.68 60.05 58.23 - 58.30 61.31 66.06 68.96 80.83 - 94.31 120.23 -/ - 4 6 2 1 65.86 63.40 61.19 59.43 57.49 - 57.43 60.49 65.48 68.67 81.10 - 95.09 121.79 -/ - 4 6 3 1 65.06 62.03 58.93 56.66 54.49 - 54.48 58.01 64.61 68.76 83.80 - 99.82 129.93 -/ - 4 6 4 1 64.71 60.76 56.96 54.39 52.24 - 52.68 57.25 65.46 70.34 87.85 - 102.76 132.83 -/ - 4 6 5 1 62.93 54.61 49.04 46.57 46.09 - 50.75 61.32 73.01 79.19 85.58 - 87.33 110.11 -/ - 4 6 6 1 61.80 51.58 46.09 44.23 45.24 - 52.55 64.61 70.49 69.65 82.19 - 95.04 118.66 -/ - 4 6 7 1 60.21 48.21 43.47 42.60 45.76 - 54.96 61.01 71.35 76.56 92.76 - 110.26 142.80 -/ - 4 6 8 1 47.49 39.35 43.23 51.49 71.37 - 104.93 152.25 202.05 228.07 311.45 - 404.07 582.55 -/ - 4 6 9 1 41.83 41.21 57.92 78.24 121.60 - 189.53 286.93 395.27 454.26 653.23 - 889.04 1363.53 -/ - 4 7 1 1 66.76 64.31 62.55 61.10 59.48 - 59.82 62.78 67.26 69.97 81.14 - 94.12 119.36 -/ - 4 7 2 1 66.51 64.07 62.13 60.55 58.78 - 58.93 61.95 66.63 69.47 81.23 - 94.67 120.59 -/ - 4 7 3 1 65.63 62.89 60.13 58.05 55.96 - 55.82 59.08 64.94 68.77 82.83 - 98.24 127.25 -/ - 4 7 4 1 65.20 61.78 58.36 55.93 53.74 - 53.90 57.77 65.09 69.59 85.74 - 102.52 132.84 -/ - 4 7 5 1 63.68 56.25 50.81 48.13 47.11 - 50.41 60.61 70.97 76.96 95.47 - 102.88 133.97 -/ - 4 7 6 1 62.71 53.39 47.73 45.48 45.65 - 51.63 62.61 75.64 80.43 79.29 - 90.86 111.49 -/ - 4 7 7 1 61.34 50.04 44.79 43.38 45.29 - 53.43 65.13 68.26 72.94 87.03 - 101.90 129.53 -/ - 4 7 8 1 49.36 39.59 41.63 48.15 64.01 - 91.52 131.06 172.59 194.17 262.75 - 338.07 480.90 -/ - 4 7 9 1 43.21 39.74 52.37 68.65 104.55 - 161.07 240.95 328.09 374.93 530.46 - 711.35 1074.70 -/ - 4 8 1 1 69.17 67.29 66.07 65.43 65.19 - 65.92 67.94 70.95 72.80 83.66 - 94.82 117.69 -/ - 4 8 2 1 69.03 66.98 65.68 64.94 64.59 - 65.30 67.35 70.50 72.48 83.46 - 94.86 118.05 -/ - 4 8 3 1 68.34 65.82 64.27 63.11 62.08 - 62.87 65.71 69.89 72.43 82.81 - 95.34 120.07 -/ - 4 8 4 1 67.72 65.16 63.36 61.91 60.28 - 60.67 63.72 68.30 71.06 82.67 - 96.23 122.43 -/ - 4 8 5 1 66.05 62.34 58.72 56.21 54.00 - 54.25 58.34 66.15 70.93 88.18 - 105.81 137.69 -/ - 4 8 6 1 65.63 60.67 56.23 53.45 51.39 - 52.34 58.28 67.95 73.64 92.32 - 107.94 140.24 -/ - 4 8 7 1 65.01 58.40 53.17 50.31 48.79 - 51.01 59.75 71.43 76.84 93.57 - 113.17 149.26 -/ - 4 8 8 1 58.03 44.12 41.42 42.39 47.14 - 58.15 73.64 90.07 98.68 125.99 - 155.42 209.47 -/ - 4 8 9 1 52.04 40.32 41.10 45.51 57.95 - 79.34 110.84 144.31 161.66 216.51 - 276.23 388.54 -/ - 4 9 1 1 70.74 70.69 70.51 70.48 70.75 - 71.77 74.09 77.42 79.45 87.01 - 96.74 117.80 -/ - 4 9 2 1 70.74 70.69 70.51 70.48 70.75 - 71.77 74.09 77.42 79.45 87.01 - 96.74 117.80 -/ - 4 9 3 1 70.74 70.69 70.51 70.48 70.75 - 71.77 74.09 77.42 79.45 87.01 - 96.74 117.80 -/ - 4 9 4 1 70.74 70.69 70.51 70.48 70.75 - 71.77 74.09 77.42 79.45 87.01 - 96.74 117.80 -/ - 4 9 5 1 70.74 70.69 70.51 70.48 70.75 - 71.77 74.09 77.42 79.45 87.01 - 96.74 117.80 -/ - 4 9 6 1 70.74 70.69 70.51 70.48 70.75 - 71.77 74.09 77.42 79.45 87.01 - 96.74 117.80 -/ - 4 9 7 1 70.74 70.69 70.51 70.48 70.75 - 71.77 74.09 77.42 79.45 87.01 - 96.74 117.80 -/ - 4 9 8 1 70.74 70.69 70.51 70.48 70.75 - 71.77 74.09 77.42 79.45 87.01 - 96.74 117.80 -/ - 4 9 9 1 70.74 70.69 70.51 70.48 70.75 - 71.77 74.09 77.42 79.45 87.01 - 96.74 117.80 -/ - 5 1 1 1 70.41 67.41 64.46 62.27 60.18 - 60.56 65.17 73.09 77.75 92.79 - 106.41 134.42 -/ - 5 1 2 1 70.27 66.88 63.69 61.40 59.38 - 60.02 65.37 73.92 78.95 92.86 - 107.18 135.33 -/ - 5 1 3 1 69.59 64.50 60.45 58.05 56.61 - 58.90 67.63 76.92 82.20 98.73 - 106.74 135.52 -/ - 5 1 4 1 68.90 62.48 58.04 55.84 55.04 - 59.73 69.20 80.70 83.42 84.65 - 95.42 115.18 -/ - 5 1 5 1 65.33 55.13 51.91 51.83 55.05 - 63.60 76.43 90.66 98.28 122.82 - 149.53 198.84 -/ - 5 1 6 1 63.38 52.75 50.85 52.06 57.84 - 69.92 88.72 109.83 121.00 156.38 - 194.40 264.63 -/ - 5 1 7 1 60.94 50.85 50.84 53.33 63.42 - 82.12 111.00 142.25 158.52 209.89 - 265.53 370.87 -/ - 5 1 8 1 49.95 57.43 87.10 120.76 191.93 - 307.89 487.08 704.62 830.33 1274.71 - 1826.42 2173.16 -/ - 5 1 9 1 47.34 85.73 153.24 224.67 382.57 - 672.94 1181.11 1832.11 2166.20 2162.74 - 2212.84 2160.75 -/ - 5 2 1 1 71.07 68.24 65.35 63.19 61.08 - 61.32 65.49 73.03 77.50 93.09 - 106.71 135.15 -/ - 5 2 2 1 70.94 67.73 64.60 62.34 60.27 - 60.73 65.54 73.70 78.51 93.51 - 107.34 135.73 -/ - 5 2 3 1 70.31 65.47 61.43 58.98 57.36 - 59.19 67.26 77.16 81.69 97.46 - 113.03 141.49 -/ - 5 2 4 1 69.67 63.51 59.01 56.68 55.73 - 59.54 69.18 79.87 85.53 83.60 - 93.77 116.14 -/ - 5 2 5 1 66.33 56.09 52.46 52.12 54.81 - 62.41 74.14 86.87 93.68 115.68 - 139.77 184.46 -/ - 5 2 6 1 64.45 53.55 51.20 52.05 56.86 - 67.76 84.43 103.22 113.22 145.10 - 179.44 242.69 -/ - 5 2 7 1 62.07 51.42 50.61 52.67 61.55 - 77.97 103.62 131.71 146.38 192.65 - 242.61 336.09 -/ - 5 2 8 1 50.56 55.26 81.03 110.98 174.63 - 277.40 433.21 618.61 724.49 1099.48 - 1559.08 2458.75 -/ - 5 2 9 1 47.90 79.60 139.73 203.40 342.14 - 591.21 1020.93 1565.95 1883.36 2469.09 - 2441.47 2463.36 -/ - 5 3 1 1 71.74 69.09 66.32 64.22 62.08 - 62.19 65.97 73.04 77.30 92.46 - 107.03 135.89 -/ - 5 3 2 1 71.61 68.63 65.60 63.39 61.28 - 61.56 65.85 73.56 78.13 94.11 - 108.05 137.20 -/ - 5 3 3 1 71.03 66.49 62.52 60.04 58.26 - 59.63 66.96 77.23 82.00 96.21 - 113.52 145.15 -/ - 5 3 4 1 70.46 64.61 60.12 57.68 56.47 - 59.44 69.18 78.87 84.44 94.51 - 99.02 127.99 -/ - 5 3 5 1 67.36 57.21 53.16 52.49 54.97 - 61.29 72.02 83.39 89.41 108.87 - 130.32 170.34 -/ - 5 3 6 1 65.59 54.52 51.64 51.89 55.98 - 65.75 80.43 96.92 105.74 134.02 - 164.66 221.09 -/ - 5 3 7 1 63.30 52.14 50.76 52.25 59.82 - 74.10 96.50 121.34 134.39 175.59 - 219.99 302.37 -/ - 5 3 8 1 51.31 53.28 75.11 101.34 157.55 - 247.69 382.02 538.20 626.34 936.85 - 1314.46 2108.53 -/ - 5 3 9 1 48.61 73.65 126.35 182.46 303.06 - 514.33 871.03 1320.55 1580.71 2503.91 - 2877.48 2841.96 -/ - 5 4 1 1 72.49 69.99 67.38 65.36 63.20 - 63.21 66.74 73.20 77.24 91.85 - 106.70 135.43 -/ - 5 4 2 1 72.31 69.56 66.69 64.55 62.42 - 62.53 66.36 73.52 77.84 93.28 - 108.81 137.56 -/ - 5 4 3 1 71.78 67.57 63.74 61.27 59.33 - 60.36 66.75 76.34 82.00 95.49 - 111.47 141.82 -/ - 5 4 4 1 71.26 65.81 61.38 58.86 57.38 - 59.62 68.44 78.28 83.36 100.25 - 110.17 139.39 -/ - 5 4 5 1 68.45 58.51 54.06 52.99 54.95 - 63.98 70.07 80.25 85.54 102.51 - 121.34 156.64 -/ - 5 4 6 1 66.80 55.68 52.23 52.15 55.32 - 63.89 76.79 91.03 98.67 123.28 - 150.14 199.85 -/ - 5 4 7 1 64.62 53.06 51.11 52.37 58.22 - 70.57 89.74 111.24 122.62 158.75 - 197.66 269.51 -/ - 5 4 8 1 52.26 51.55 69.45 91.88 140.67 - 218.69 333.08 463.04 535.35 786.41 - 1092.54 1725.40 -/ - 5 4 9 1 49.04 67.95 113.13 161.81 265.27 - 442.15 732.68 1096.06 1304.26 2041.66 - 2944.55 3472.38 -/ - 5 5 1 1 74.27 71.90 69.74 68.01 66.01 - 65.91 69.12 74.33 77.85 90.88 - 104.92 132.08 -/ - 5 5 2 1 73.99 71.56 69.17 67.30 65.19 - 65.10 68.42 74.14 77.90 91.68 - 106.29 134.48 -/ - 5 5 3 1 73.30 69.94 66.61 64.29 62.15 - 62.49 66.97 75.05 79.88 96.87 - 111.62 141.44 -/ - 5 5 4 1 72.91 68.48 64.48 61.94 59.97 - 60.99 67.41 77.20 82.98 96.85 - 113.23 144.52 -/ - 5 5 5 1 70.75 61.83 56.74 54.84 55.31 - 62.39 74.04 74.97 79.15 91.83 - 105.60 131.55 -/ - 5 5 6 1 69.42 58.86 54.27 53.20 55.23 - 64.54 70.64 81.04 86.44 103.75 - 122.95 159.04 -/ - 5 5 7 1 67.61 55.80 52.33 52.33 55.67 - 64.58 77.96 92.76 100.69 126.28 - 154.20 205.88 -/ - 5 5 8 1 55.06 49.59 59.44 73.89 107.67 - 162.52 240.92 326.64 372.73 526.47 - 707.97 1079.95 -/ - 5 5 9 1 50.54 57.65 87.52 121.39 193.07 - 310.11 490.63 706.01 828.62 1255.86 - 1772.03 2834.53 -/ - 5 6 1 1 76.58 74.02 72.47 71.20 69.75 - 69.93 73.24 77.60 80.08 91.35 - 104.04 129.13 -/ - 5 6 2 1 76.28 73.75 72.07 70.69 69.04 - 69.36 72.42 76.98 79.75 91.46 - 104.62 130.44 -/ - 5 6 3 1 75.20 72.65 70.20 68.32 66.20 - 66.12 69.48 75.23 79.05 93.20 - 108.36 137.55 -/ - 5 6 4 1 74.66 71.62 68.53 66.31 64.12 - 64.21 68.09 75.39 79.91 96.34 - 112.88 145.00 -/ - 5 6 5 1 73.25 66.48 61.43 58.82 57.57 - 60.63 71.00 81.28 87.30 101.98 - 98.67 126.98 -/ - 5 6 6 1 72.36 63.80 58.47 56.23 55.98 - 61.96 73.04 85.57 80.45 89.50 - 101.70 124.41 -/ - 5 6 7 1 71.09 60.65 55.59 54.09 55.62 - 63.75 69.19 78.81 83.67 98.86 - 115.57 147.19 -/ - 5 6 8 1 60.01 50.14 52.24 59.24 77.04 - 108.69 154.83 203.99 229.79 312.73 - 405.00 583.20 -/ - 5 6 9 1 54.05 50.35 64.43 83.00 124.62 - 191.40 288.13 396.09 454.98 653.69 - 889.31 1363.53 -/ - 5 7 1 1 77.29 74.72 73.23 72.11 71.01 - 71.46 74.51 78.27 80.19 91.81 - 104.07 128.57 -/ - 5 7 2 1 77.00 74.40 72.86 71.64 70.27 - 70.53 73.82 78.15 80.62 91.79 - 104.48 129.60 -/ - 5 7 3 1 75.90 73.39 71.24 69.55 67.58 - 67.52 70.79 75.94 79.44 92.68 - 107.22 135.31 -/ - 5 7 4 1 75.23 72.49 69.74 67.70 65.52 - 65.47 69.01 75.42 79.56 94.78 - 110.75 141.48 -/ - 5 7 5 1 73.90 67.91 63.11 60.43 58.79 - 60.86 69.74 80.95 85.97 102.97 - 119.06 150.35 -/ - 5 7 6 1 73.14 65.44 60.15 57.66 56.82 - 61.24 71.99 83.81 90.05 87.08 - 98.11 117.89 -/ - 5 7 7 1 72.05 62.41 57.09 55.16 55.71 - 63.18 75.43 76.17 80.57 93.81 - 107.96 134.67 -/ - 5 7 8 1 61.82 50.68 51.35 56.47 70.52 - 96.01 134.14 174.94 196.26 264.33 - 339.28 481.77 -/ - 5 7 9 1 55.62 49.84 59.69 74.19 108.13 - 163.35 242.44 329.15 375.84 531.09 - 711.77 1074.85 -/ - 5 8 1 1 79.41 77.95 76.90 76.44 76.31 - 77.07 79.12 82.11 83.95 94.29 - 105.11 127.63 -/ - 5 8 2 1 79.31 77.63 76.49 75.97 75.81 - 76.56 78.59 81.58 83.42 94.12 - 105.14 127.94 -/ - 5 8 3 1 78.77 76.31 74.93 74.05 73.48 - 74.19 76.30 79.94 82.00 93.51 - 105.50 129.67 -/ - 5 8 4 1 78.22 75.47 73.98 72.83 71.66 - 72.11 75.38 79.67 82.29 93.27 - 106.17 131.67 -/ - 5 8 5 1 76.08 73.09 70.13 67.99 65.78 - 65.77 69.47 76.34 80.77 97.09 - 113.95 146.30 -/ - 5 8 6 1 75.63 71.72 68.02 65.54 63.32 - 63.75 68.61 77.46 82.79 101.78 - 118.79 150.92 -/ - 5 8 7 1 75.15 69.84 65.33 62.61 60.65 - 61.94 69.32 80.37 86.94 102.18 - 120.46 155.59 -/ - 5 8 8 1 69.53 56.47 52.80 52.82 56.44 - 66.10 80.51 95.90 104.04 130.21 - 158.85 212.12 -/ - 5 8 9 1 64.37 51.74 51.79 54.42 65.42 - 84.95 114.75 147.27 164.30 218.51 - 277.87 389.69 -/ - 5 9 1 1 80.76 80.70 80.52 80.49 80.76 - 81.78 84.10 87.42 89.45 97.01 - 106.75 127.80 -/ - 5 9 2 1 80.76 80.70 80.52 80.49 80.76 - 81.78 84.10 87.42 89.45 97.01 - 106.75 127.80 -/ - 5 9 3 1 80.76 80.70 80.52 80.49 80.76 - 81.78 84.10 87.42 89.45 97.01 - 106.75 127.80 -/ - 5 9 4 1 80.76 80.70 80.52 80.49 80.76 - 81.78 84.10 87.42 89.45 97.01 - 106.75 127.80 -/ - 5 9 5 1 80.76 80.70 80.52 80.49 80.76 - 81.78 84.10 87.42 89.45 97.01 - 106.75 127.80 -/ - 5 9 6 1 80.76 80.70 80.52 80.49 80.76 - 81.78 84.10 87.42 89.45 97.01 - 106.75 127.80 -/ - 5 9 7 1 80.76 80.70 80.52 80.49 80.76 - 81.78 84.10 87.42 89.45 97.01 - 106.75 127.80 -/ - 5 9 8 1 80.76 80.70 80.52 80.49 80.76 - 81.78 84.10 87.42 89.45 97.01 - 106.75 127.80 -/ - 5 9 9 1 80.76 80.70 80.52 80.49 80.76 - 81.78 84.10 87.42 89.45 97.01 - 106.75 127.80 -/ - 6 1 1 1 80.30 78.05 75.67 73.82 71.68 - 71.77 75.63 82.80 87.09 101.98 - 117.30 145.68 -/ - 6 1 2 1 80.14 77.60 74.97 73.02 70.88 - 71.16 75.61 83.42 88.06 103.36 - 117.95 146.35 -/ - 6 1 3 1 79.59 75.58 72.05 69.82 67.95 - 69.36 77.07 87.17 91.48 106.58 - 123.68 151.98 -/ - 6 1 4 1 79.04 73.82 69.77 67.56 66.27 - 69.57 79.15 89.30 94.83 92.86 - 103.08 125.97 -/ - 6 1 5 1 76.10 66.89 63.19 62.64 65.10 - 72.29 84.01 97.21 104.38 127.80 - 153.74 202.31 -/ - 6 1 6 1 74.44 64.37 61.76 62.31 66.90 - 77.75 95.06 114.97 125.67 160.07 - 197.49 267.14 -/ - 6 1 7 1 72.31 62.15 60.99 62.88 71.63 - 88.59 115.76 146.00 161.90 212.54 - 267.75 372.67 -/ - 6 1 8 1 61.27 65.56 92.42 124.54 194.25 - 309.36 488.03 705.32 830.92 1275.03 - 1826.50 2173.60 -/ - 6 1 9 1 58.12 91.03 156.07 226.58 383.71 - 673.61 1181.41 1832.14 2166.12 2192.42 - 2213.47 2268.25 -/ - 6 2 1 1 81.02 78.82 76.50 74.70 72.58 - 72.57 76.25 82.93 87.05 101.58 - 116.53 145.58 -/ - 6 2 2 1 80.80 78.40 75.83 73.91 71.76 - 71.92 75.96 83.39 87.82 103.19 - 118.29 147.06 -/ - 6 2 3 1 80.27 76.47 72.98 70.74 68.76 - 69.89 76.88 86.90 91.97 105.55 - 122.78 154.60 -/ - 6 2 4 1 79.77 74.78 70.73 68.44 66.93 - 69.53 78.98 88.57 93.94 99.16 - 105.14 134.35 -/ - 6 2 5 1 77.02 67.89 63.86 63.04 65.31 - 71.34 82.03 93.82 100.19 121.09 - 144.40 188.28 -/ - 6 2 6 1 75.44 65.26 62.22 62.31 66.18 - 75.88 91.19 108.84 118.35 149.17 - 182.85 245.48 -/ - 6 2 7 1 73.38 62.84 61.18 62.57 70.03 - 84.89 108.84 135.83 150.11 195.58 - 245.05 338.08 -/ - 6 2 8 1 62.00 63.74 86.77 115.15 177.22 - 279.04 434.30 619.41 725.18 1099.89 - 1559.28 2459.04 -/ - 6 2 9 1 58.95 85.34 142.87 205.52 343.41 - 591.97 1021.33 1566.09 1883.38 2469.31 - 2442.09 2467.25 -/ - 6 3 1 1 81.81 79.62 77.40 75.67 73.58 - 73.49 77.02 83.19 87.13 101.25 - 115.80 144.27 -/ - 6 3 2 1 81.54 79.22 76.76 74.90 72.76 - 72.80 76.56 83.45 87.67 102.61 - 117.94 147.77 -/ - 6 3 3 1 80.97 77.41 74.01 71.78 69.70 - 70.58 76.77 86.21 91.85 105.06 - 121.02 151.64 -/ - 6 3 4 1 80.51 75.81 71.80 69.47 67.74 - 69.72 78.41 88.22 93.11 109.95 - 117.01 144.93 -/ - 6 3 5 1 77.98 69.02 64.68 63.54 65.01 - 71.54 80.22 90.75 96.36 114.75 - 135.45 174.59 -/ - 6 3 6 1 76.49 66.29 62.79 62.56 65.65 - 74.17 87.63 103.03 111.38 138.54 - 168.46 224.22 -/ - 6 3 7 1 74.53 63.69 61.53 62.67 68.58 - 81.48 102.25 125.91 138.54 178.87 - 222.72 304.60 -/ - 6 3 8 1 62.88 62.13 81.36 105.94 160.46 - 249.54 383.26 539.09 627.14 937.39 - 1314.77 2108.53 -/ - 6 3 9 1 59.49 79.90 129.87 184.84 304.51 - 515.19 871.54 1320.79 1580.84 2503.96 - 2878.10 2842.60 -/ - 6 4 1 1 82.67 80.44 78.36 76.73 74.72 - 74.60 77.99 83.63 87.38 101.01 - 115.12 142.95 -/ - 6 4 2 1 82.36 80.08 77.76 75.99 73.89 - 73.82 77.40 83.67 87.68 102.11 - 116.94 146.01 -/ - 6 4 3 1 81.68 78.40 75.15 72.96 70.80 - 71.42 76.79 85.64 90.90 106.34 - 121.23 152.10 -/ - 6 4 4 1 81.27 76.90 73.01 70.65 68.73 - 70.15 77.94 88.79 93.26 108.22 - 126.66 156.47 -/ - 6 4 5 1 78.97 70.31 65.69 64.23 65.01 - 71.66 78.59 88.02 92.94 108.90 - 127.00 161.42 -/ - 6 4 6 1 77.60 67.51 63.55 62.99 65.47 - 72.62 84.44 97.67 104.86 128.35 - 154.43 203.39 -/ - 6 4 7 1 75.75 64.73 62.02 62.66 67.29 - 78.41 96.08 116.39 127.30 162.46 - 200.77 272.03 -/ - 6 4 8 1 63.96 60.79 76.27 96.99 143.99 - 220.81 334.51 464.08 536.25 787.08 - 1092.98 1725.54 -/ - 6 4 9 1 60.07 74.74 117.13 164.53 266.93 - 443.16 733.31 1096.42 1304.51 2041.64 - 2944.85 3473.00 -/ - 6 5 1 1 84.65 82.19 80.49 79.15 77.40 - 77.22 80.73 85.16 88.58 100.87 - 114.10 140.40 -/ - 6 5 2 1 84.30 81.91 80.01 78.53 76.65 - 76.63 79.92 84.94 88.43 101.42 - 115.22 142.53 -/ - 6 5 3 1 83.20 80.56 77.78 75.79 73.59 - 73.70 77.64 84.95 89.44 105.43 - 121.76 153.64 -/ - 6 5 4 1 82.83 79.32 75.89 73.63 71.42 - 72.06 77.48 86.55 91.94 107.90 - 123.20 155.10 -/ - 6 5 5 1 81.08 73.50 68.55 66.44 65.97 - 71.98 82.91 83.61 87.50 99.39 - 112.54 137.64 -/ - 6 5 6 1 79.99 70.71 65.92 64.44 65.29 - 72.61 79.17 88.83 93.86 110.17 - 128.64 163.83 -/ - 6 5 7 1 78.47 67.67 63.64 63.15 65.75 - 73.27 85.57 99.35 106.83 131.28 - 158.42 209.36 -/ - 6 5 8 1 66.98 59.89 67.61 80.47 112.12 - 165.48 242.95 328.18 374.11 527.45 - 708.76 1080.44 -/ - 6 5 9 1 61.98 65.78 92.84 125.18 195.40 - 311.59 491.57 706.69 829.19 1256.15 - 1772.10 2835.01 -/ - 6 6 1 1 87.07 84.46 82.99 82.03 81.08 - 81.67 83.86 87.14 89.13 101.88 - 113.95 138.39 -/ - 6 6 2 1 86.78 84.07 82.59 81.53 80.30 - 80.75 83.03 86.42 88.47 101.91 - 114.40 139.52 -/ - 6 6 3 1 85.51 83.00 81.01 79.50 77.59 - 77.57 80.94 86.05 89.61 103.03 - 117.41 145.76 -/ - 6 6 4 1 84.71 82.14 79.56 77.70 75.52 - 75.46 79.14 85.63 89.87 105.40 - 121.24 152.50 -/ - 6 6 5 1 83.34 77.75 73.17 70.66 68.84 - 70.97 80.26 91.30 96.08 113.95 - 118.01 145.55 -/ - 6 6 6 1 82.62 75.39 70.33 67.97 66.95 - 71.66 82.16 94.39 97.52 97.56 - 109.20 131.10 -/ - 6 6 7 1 81.58 72.49 67.36 65.53 65.82 - 73.36 83.60 87.01 91.57 105.89 - 121.92 152.64 -/ - 6 6 8 1 71.91 61.05 61.92 67.76 83.72 - 113.38 158.13 206.58 232.13 314.54 - 406.48 584.21 -/ - 6 6 9 1 65.98 60.27 71.93 88.77 128.43 - 193.89 289.83 397.37 456.08 654.49 - 889.89 1363.82 -/ - 6 7 1 1 87.69 85.25 83.83 82.98 82.35 - 83.04 85.17 88.34 90.28 102.40 - 114.11 138.04 -/ - 6 7 2 1 87.46 84.83 83.38 82.44 81.57 - 82.21 84.39 87.65 89.63 102.33 - 114.43 138.94 -/ - 6 7 3 1 86.30 83.66 81.92 80.58 78.84 - 78.71 82.32 87.09 90.20 102.81 - 116.61 143.91 -/ - 6 7 4 1 85.44 82.91 80.64 78.97 76.91 - 76.79 80.30 86.00 89.88 104.33 - 119.53 149.41 -/ - 6 7 5 1 83.93 79.03 74.76 72.25 70.25 - 71.55 79.35 90.61 96.62 111.19 - 130.41 166.52 -/ - 6 7 6 1 83.31 76.88 71.98 69.48 67.98 - 71.14 81.91 92.54 98.46 102.12 - 106.17 125.22 -/ - 6 7 7 1 82.42 74.15 68.94 66.78 66.35 - 72.74 84.28 86.18 88.91 101.41 - 114.96 140.84 -/ - 6 7 8 1 73.61 61.81 61.95 65.46 77.97 - 101.50 138.06 178.00 199.03 266.51 - 341.08 483.08 -/ - 6 7 9 1 67.64 60.18 67.87 80.79 112.59 - 166.31 244.49 330.71 377.23 532.06 - 712.54 1075.32 -/ - 6 8 1 1 89.57 88.42 87.54 87.15 87.08 - 87.86 89.96 93.06 94.95 104.75 - 115.32 137.57 -/ - 6 8 2 1 89.48 88.17 87.19 86.76 86.66 - 87.43 89.52 92.56 94.43 104.61 - 115.34 137.85 -/ - 6 8 3 1 89.05 86.89 85.57 84.91 84.66 - 85.39 87.46 90.53 92.41 104.06 - 115.64 139.39 -/ - 6 8 4 1 88.61 85.89 84.45 83.56 82.85 - 83.56 85.73 88.98 90.95 103.80 - 116.18 141.14 -/ - 6 8 5 1 86.28 83.55 81.06 79.27 77.12 - 77.01 80.64 86.79 90.95 106.51 - 122.62 154.14 -/ - 6 8 6 1 85.56 82.39 79.20 77.05 74.72 - 74.93 79.17 87.32 92.33 110.39 - 128.39 162.19 -/ - 6 8 7 1 85.13 80.80 76.83 74.37 72.17 - 72.96 79.25 89.56 95.72 113.57 - 128.35 163.90 -/ - 6 8 8 1 80.50 68.43 64.15 63.67 66.60 - 74.75 88.18 102.64 110.34 135.38 - 163.18 215.60 -/ - 6 8 9 1 76.03 63.14 61.87 63.99 73.61 - 91.53 119.61 151.06 167.73 221.19 - 280.09 391.46 -/ - 6 9 1 1 90.78 90.71 90.53 90.50 90.77 - 91.79 94.11 97.43 99.46 107.02 - 116.75 137.79 -/ - 6 9 2 1 90.78 90.71 90.53 90.50 90.77 - 91.79 94.11 97.43 99.46 107.02 - 116.75 137.79 -/ - 6 9 3 1 90.78 90.71 90.53 90.50 90.77 - 91.79 94.11 97.43 99.46 107.02 - 116.75 137.79 -/ - 6 9 4 1 90.78 90.71 90.53 90.50 90.77 - 91.79 94.11 97.43 99.46 107.02 - 116.75 137.79 -/ - 6 9 5 1 90.78 90.71 90.53 90.50 90.77 - 91.79 94.11 97.43 99.46 107.02 - 116.75 137.79 -/ - 6 9 6 1 90.78 90.71 90.53 90.50 90.77 - 91.79 94.11 97.43 99.46 107.02 - 116.75 137.79 -/ - 6 9 7 1 90.78 90.71 90.53 90.50 90.77 - 91.79 94.11 97.43 99.46 107.02 - 116.75 137.79 -/ - 6 9 8 1 90.78 90.71 90.53 90.50 90.77 - 91.79 94.11 97.43 99.46 107.02 - 116.75 137.79 -/ - 6 9 9 1 90.78 90.71 90.53 90.50 90.77 - 91.79 94.11 97.43 99.46 107.02 - 116.75 137.79 -/ - 7 1 1 1 90.39 88.43 86.52 85.00 83.00 - 82.58 86.17 92.86 96.85 110.76 - 125.39 154.08 -/ - 7 1 2 1 90.07 88.05 85.90 84.25 82.18 - 81.84 86.08 93.23 97.54 112.32 - 127.85 158.08 -/ - 7 1 3 1 89.45 86.30 83.25 81.23 79.25 - 79.71 86.83 96.65 102.32 114.97 - 132.08 164.05 -/ - 7 1 4 1 89.01 84.77 81.13 79.01 77.41 - 79.65 88.86 98.33 103.53 104.53 - 112.57 144.60 -/ - 7 1 5 1 86.55 78.35 74.40 73.49 75.58 - 81.50 92.25 104.53 111.26 133.56 - 158.73 206.53 -/ - 7 1 6 1 85.13 75.79 72.68 72.70 76.45 - 86.20 102.16 120.92 131.13 164.51 - 201.28 270.33 -/ - 7 1 7 1 83.27 73.37 71.57 72.91 80.39 - 95.82 121.33 150.48 166.00 215.83 - 270.54 375.02 -/ - 7 1 8 1 72.51 74.29 98.55 129.07 197.14 - 311.26 489.37 706.28 831.84 1275.63 - 1826.86 2173.63 -/ - 7 1 9 1 69.00 97.16 159.54 228.98 385.23 - 674.53 1181.97 1832.41 2166.27 2192.43 - 2213.29 2172.16 -/ - 7 2 1 1 91.21 89.15 87.30 85.83 83.88 - 83.47 86.69 93.19 97.03 110.60 - 124.88 153.05 -/ - 7 2 2 1 90.84 88.80 86.71 85.10 83.06 - 82.65 86.74 93.39 97.52 111.93 - 127.05 156.67 -/ - 7 2 3 1 90.12 87.13 84.13 82.12 80.08 - 80.33 86.80 96.10 101.73 115.10 - 131.25 162.59 -/ - 7 2 4 1 89.71 85.67 82.05 79.90 78.14 - 79.26 88.40 98.19 102.85 117.86 - 123.84 153.71 -/ - 7 2 5 1 87.42 79.34 75.14 73.97 75.36 - 80.77 90.54 101.51 107.47 127.29 - 149.84 192.87 -/ - 7 2 6 1 86.07 76.72 73.22 72.93 75.99 - 84.59 98.69 115.22 124.28 153.99 - 186.99 248.97 -/ - 7 2 7 1 84.28 74.15 71.87 72.97 79.03 - 92.53 114.88 140.72 154.58 199.19 - 248.11 340.65 -/ - 7 2 8 1 73.33 72.77 93.34 120.08 180.41 - 281.15 435.78 620.51 726.13 1100.61 - 1559.76 2459.19 -/ - 7 2 9 1 69.84 91.92 146.70 208.17 345.09 - 593.02 1022.00 1566.47 1883.64 2469.27 - 2442.51 2468.08 -/ - 7 3 1 1 92.09 89.91 88.14 86.74 84.86 - 84.52 87.23 93.65 97.34 110.53 - 124.41 152.02 -/ - 7 3 2 1 91.69 89.58 87.58 86.04 84.05 - 83.62 87.44 93.67 97.62 111.61 - 126.28 155.24 -/ - 7 3 3 1 90.80 88.01 85.10 83.13 81.03 - 81.43 86.86 95.65 100.93 116.07 - 131.73 163.44 -/ - 7 3 4 1 90.42 86.63 83.08 80.92 79.01 - 79.79 88.03 98.92 103.42 118.17 - 135.09 162.89 -/ - 7 3 5 1 88.31 80.46 76.03 74.60 75.34 - 80.22 89.00 98.79 104.04 121.42 - 141.38 179.63 -/ - 7 3 6 1 87.06 77.79 73.91 73.31 75.80 - 83.14 95.54 109.90 117.79 143.83 - 173.01 228.06 -/ - 7 3 7 1 85.36 75.08 72.33 73.09 77.83 - 89.53 108.79 131.27 143.45 182.85 - 226.12 307.42 -/ - 7 3 8 1 74.30 71.47 88.41 111.33 164.02 - 251.89 384.91 540.37 628.25 938.24 - 1315.37 2108.81 -/ - 7 3 9 1 70.39 86.94 134.12 187.80 306.38 - 516.41 872.34 1321.29 1581.21 2504.03 - 2877.89 2843.40 -/ - 7 4 1 1 93.04 90.69 89.03 87.73 85.94 - 85.74 88.36 93.26 97.81 110.57 - 124.02 151.01 -/ - 7 4 2 1 92.62 90.38 88.51 87.07 85.16 - 84.78 87.89 94.12 97.88 111.40 - 125.58 153.80 -/ - 7 4 3 1 91.49 88.94 86.16 84.25 82.12 - 82.36 87.05 95.30 100.23 116.87 - 132.76 164.12 -/ - 7 4 4 1 91.15 87.64 84.22 82.08 80.05 - 80.49 87.75 97.84 103.96 116.74 - 134.40 167.57 -/ - 7 4 5 1 89.24 81.71 77.11 75.41 75.65 - 79.93 87.66 96.42 101.02 116.09 - 133.49 167.01 -/ - 7 4 6 1 88.09 79.03 74.78 73.85 75.97 - 81.87 92.74 105.06 111.81 134.20 - 159.50 207.68 -/ - 7 4 7 1 86.50 76.20 72.94 72.98 76.84 - 86.85 103.16 122.34 132.77 166.90 - 204.58 275.20 -/ - 7 4 8 1 75.46 70.52 83.88 102.93 147.99 - 223.48 336.38 465.54 537.57 788.08 - 1093.73 1725.98 -/ - 7 4 9 1 71.11 82.29 121.89 167.88 269.05 - 444.55 734.24 1097.05 1305.03 2041.85 - 2944.84 3473.79 -/ - 7 5 1 1 95.15 92.47 90.99 89.93 88.51 - 88.87 91.23 94.75 96.87 111.04 - 123.60 149.17 -/ - 7 5 2 1 94.76 92.11 90.57 89.39 87.74 - 87.85 90.35 94.04 98.97 111.41 - 124.53 151.06 -/ - 7 5 3 1 93.28 90.95 88.62 86.94 84.85 - 84.41 88.55 95.12 99.35 114.45 - 130.15 161.19 -/ - 7 5 4 1 92.65 89.88 86.91 84.93 82.75 - 83.01 87.77 96.24 101.32 118.59 - 134.99 167.44 -/ - 7 5 5 1 91.20 84.74 80.04 77.87 76.92 - 81.73 91.91 98.82 96.40 107.60 - 120.19 144.49 -/ - 7 5 6 1 90.29 82.17 77.36 75.65 75.93 - 80.31 88.24 97.23 101.95 117.36 - 135.12 169.42 -/ - 7 5 7 1 89.01 79.23 74.88 74.00 76.39 - 82.48 93.81 106.67 113.70 137.05 - 163.41 213.58 -/ - 7 5 8 1 78.58 70.43 76.35 87.85 117.38 - 169.09 245.52 330.19 375.92 528.87 - 709.83 1081.26 -/ - 7 5 9 1 73.34 74.52 98.97 129.72 198.30 - 313.51 492.90 707.62 830.07 1256.72 - 1772.43 2835.03 -/ - 7 6 1 1 97.38 95.04 93.60 92.83 92.32 - 93.03 95.16 98.34 100.29 112.37 - 123.93 147.86 -/ - 7 6 2 1 97.15 94.55 93.09 92.24 91.49 - 92.18 94.37 97.63 99.61 112.35 - 124.30 148.86 -/ - 7 6 3 1 95.96 93.19 91.55 90.33 88.63 - 88.67 91.24 95.00 100.23 113.09 - 126.79 154.40 -/ - 7 6 4 1 94.95 92.45 90.29 88.74 86.73 - 86.24 90.24 96.09 100.10 114.83 - 130.05 160.51 -/ - 7 6 5 1 93.29 88.65 84.52 82.17 80.15 - 81.43 89.89 101.68 106.88 122.28 - 136.43 165.40 -/ - 7 6 6 1 92.69 86.56 81.82 79.48 78.07 - 81.55 92.63 103.32 109.39 106.22 - 117.39 138.56 -/ - 7 6 7 1 91.83 83.91 78.88 76.87 76.58 - 83.43 95.11 95.78 100.07 113.60 - 129.01 158.88 -/ - 7 6 8 1 83.37 71.99 72.13 76.76 91.16 - 118.87 162.15 209.77 235.05 316.87 - 408.43 585.75 -/ - 7 6 9 1 77.64 70.51 80.11 95.36 132.97 - 196.96 292.00 399.06 457.61 655.59 - 890.80 1364.39 -/ - 7 7 1 1 97.95 95.90 94.51 93.84 93.54 - 94.25 96.35 99.48 101.41 112.90 - 124.18 147.66 -/ - 7 7 2 1 97.76 95.41 93.97 93.23 92.78 - 93.50 95.63 98.80 100.74 112.82 - 124.44 148.46 -/ - 7 7 3 1 96.78 93.83 92.37 91.30 89.83 - 90.23 92.64 96.20 98.71 113.05 - 126.23 152.86 -/ - 7 7 4 1 95.81 93.16 91.27 89.89 88.03 - 87.74 91.54 96.16 100.36 114.18 - 128.68 157.79 -/ - 7 7 5 1 93.84 89.80 85.99 83.71 81.52 - 82.36 89.23 99.79 106.18 119.91 - 138.43 173.60 -/ - 7 7 6 1 93.33 87.91 83.41 81.01 79.22 - 81.32 91.24 102.09 107.38 120.44 - 114.83 141.66 -/ - 7 7 7 1 92.59 85.46 80.47 78.23 77.31 - 82.46 93.24 103.68 97.81 109.64 - 122.64 147.72 -/ - 7 7 8 1 84.96 72.92 72.45 74.89 86.07 - 107.81 142.74 181.73 202.44 269.25 - 343.39 484.93 -/ - 7 7 9 1 79.33 70.77 76.61 88.18 117.85 - 169.92 247.06 332.73 379.06 533.48 - 713.59 1076.12 -/ - 7 8 1 1 99.67 98.76 98.00 97.66 97.64 - 98.44 100.56 103.67 105.59 115.10 - 125.46 147.52 -/ - 7 8 2 1 99.60 98.54 97.70 97.33 97.27 - 98.07 100.18 103.30 105.22 114.98 - 125.49 147.77 -/ - 7 8 3 1 99.24 97.47 96.25 95.72 95.54 - 96.30 98.37 101.42 103.29 114.50 - 125.75 149.17 -/ - 7 8 4 1 98.87 96.42 94.99 94.28 93.93 - 94.67 96.79 99.94 101.87 114.24 - 126.21 150.75 -/ - 7 8 5 1 96.65 93.83 91.72 90.22 88.25 - 88.15 91.79 97.35 101.32 116.24 - 131.66 162.42 -/ - 7 8 6 1 95.66 92.84 90.07 88.20 85.95 - 85.90 89.95 97.36 102.12 119.36 - 136.75 171.16 -/ - 7 8 7 1 95.01 91.45 87.94 85.74 83.43 - 83.87 89.40 99.10 104.94 124.65 - 139.74 175.34 -/ - 7 8 8 1 91.13 80.07 75.43 74.54 77.17 - 84.62 96.37 110.02 117.32 141.29 - 168.27 219.82 -/ - 7 8 9 1 87.24 74.48 72.46 74.08 82.30 - 98.83 125.29 155.60 171.88 224.53 - 282.92 393.76 -/ - 7 9 1 1 100.80 100.72 100.54 100.50 100.77 - 101.80 104.11 107.44 109.47 117.02 - 126.75 147.79 -/ - 7 9 2 1 100.80 100.72 100.54 100.50 100.77 - 101.80 104.11 107.44 109.47 117.02 - 126.75 147.79 -/ - 7 9 3 1 100.80 100.72 100.54 100.50 100.77 - 101.80 104.11 107.44 109.47 117.02 - 126.75 147.79 -/ - 7 9 4 1 100.80 100.72 100.54 100.50 100.77 - 101.80 104.11 107.44 109.47 117.02 - 126.75 147.79 -/ - 7 9 5 1 100.80 100.72 100.54 100.50 100.77 - 101.80 104.11 107.44 109.47 117.02 - 126.75 147.79 -/ - 7 9 6 1 100.80 100.72 100.54 100.50 100.77 - 101.80 104.11 107.44 109.47 117.02 - 126.75 147.79 -/ - 7 9 7 1 100.80 100.72 100.54 100.50 100.77 - 101.80 104.11 107.44 109.47 117.02 - 126.75 147.79 -/ - 7 9 8 1 100.80 100.72 100.54 100.50 100.77 - 101.80 104.11 107.44 109.47 117.02 - 126.75 147.79 -/ - 7 9 9 1 100.80 100.72 100.54 100.50 100.77 - 101.80 104.11 107.44 109.47 117.02 - 126.75 147.79 -/ - -WLIFT FIELD 10:19 5 MAR 90 -'* ' 2000.00000 'OIL' 0 .50000000 1* / -/ - - -INCLUDE - 'VFPPROD2' / - - -BPR - 1 2 3 / -/ - - diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/VFPPROD/VFPPROD2 b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/VFPPROD/VFPPROD2 deleted file mode 100644 index c25d06a722..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/VFPPROD/VFPPROD2 +++ /dev/null @@ -1,2301 +0,0 @@ -VFPPROD - --- Table Datum Depth Rate Type WFR Type GFR Type TAB Type --- ----- ----------- --------- -------- -------- -------- - 32 394 'LIQ' 'WCT' 'GOR' / - - --- 'LIQ' units - SM3/DAY - 100.0 500.0 1000.0 1500.0 2500.0 - 4000.0 6000.0 8000.0 9000.0 12000.0 -15000.0 20000.0 / - --- 'THP' units - BARSA - 16.01 21.01 26.01 31.01 41.01 - 51.01 61.01 / - --- 'WCT' units - FRACTION - 0 0.1 0.2 0.3 0.5 - 0.7 0.75 0.9 1 / - --- 'GOR' units - SM3 - 90 100 150 200 500 - 700 1000 5000 10000 / - --- 'ALQ' units - - 0 / - - 1 1 1 1 44.85 37.83 32.56 30.13 29.38 - 32.73 41.14 50.28 54.96 70.65 - 86.79 115.14 -/ - 1 1 2 1 44.55 36.91 31.55 29.29 28.93 - 32.97 41.83 51.27 56.67 72.83 - 87.66 117.32 -/ - 1 1 3 1 43.06 33.11 28.00 26.72 28.29 - 34.86 45.74 57.61 61.07 64.40 - 73.48 102.86 -/ - 1 1 4 1 41.67 30.36 26.04 25.67 28.88 - 36.96 47.90 51.87 56.16 68.61 - 81.11 103.27 -/ - 1 1 5 1 35.14 23.93 24.20 26.11 34.10 - 46.38 62.77 79.73 88.44 115.35 - 143.51 194.19 -/ - 1 1 6 1 32.10 22.99 24.45 28.76 39.54 - 55.75 78.41 101.95 113.96 151.07 - 190.19 261.47 -/ - 1 1 7 1 28.88 22.94 26.52 33.71 48.27 - 71.46 103.68 136.75 153.65 206.31 - 262.75 368.93 -/ - 1 1 8 1 21.81 42.21 78.41 115.05 188.76 - 306.15 486.18 703.92 829.68 1274.03 - 1824.52 2170.54 -/ - 1 1 9 1 22.65 77.16 149.18 222.18 381.35 - 672.35 1180.65 1830.41 2164.11 2190.56 - 2209.35 2267.10 -/ - 1 2 1 1 45.61 38.96 33.67 31.09 30.04 - 32.89 40.91 49.85 54.69 69.65 - 85.35 113.10 -/ - 1 2 2 1 45.34 38.08 32.64 30.19 29.50 - 32.99 41.59 50.90 55.65 71.64 - 88.18 117.29 -/ - 1 2 3 1 43.98 34.32 28.92 27.35 28.47 - 34.65 44.84 56.55 62.46 70.19 - 77.50 108.80 -/ - 1 2 4 1 42.69 31.52 26.76 26.04 28.68 - 36.28 48.37 55.37 55.78 66.71 - 78.50 99.23 -/ - 1 2 5 1 36.43 24.47 24.06 25.87 32.85 - 44.35 59.42 74.87 82.80 107.32 - 133.01 179.23 -/ - 1 2 6 1 33.40 23.26 24.74 27.79 37.75 - 52.55 73.07 94.45 105.39 139.19 - 174.71 239.12 -/ - 1 2 7 1 30.07 22.83 25.68 32.07 45.40 - 66.28 95.50 125.57 140.92 188.61 - 239.44 333.83 -/ - 1 2 8 1 21.76 38.98 71.42 104.55 171.02 - 275.39 432.13 617.81 723.77 1098.80 - 1557.46 2465.02 -/ - 1 2 9 1 21.95 70.10 135.14 200.55 340.69 - 590.52 1020.46 1564.51 1881.58 2444.60 - 2489.84 2462.70 -/ - 1 3 1 1 46.37 40.17 34.93 32.22 30.86 - 33.18 40.58 49.71 54.16 68.60 - 83.83 110.97 -/ - 1 3 2 1 46.13 39.32 33.89 31.27 30.24 - 33.14 41.26 50.32 55.22 70.42 - 86.43 114.80 -/ - 1 3 3 1 44.92 35.67 30.01 28.15 28.75 - 34.24 43.95 55.28 61.14 74.88 - 83.73 113.72 -/ - 1 3 4 1 43.73 32.84 27.66 26.59 28.66 - 35.79 47.38 57.89 60.45 64.90 - 76.07 95.41 -/ - 1 3 5 1 37.83 25.18 24.06 26.02 31.61 - 42.38 56.19 70.17 77.32 99.44 - 122.62 164.40 -/ - 1 3 6 1 34.84 23.65 24.71 26.93 35.97 - 49.45 67.86 87.06 96.90 127.35 - 159.27 216.99 -/ - 1 3 7 1 31.44 22.93 24.98 30.50 42.60 - 61.21 87.37 114.40 128.20 170.99 - 216.35 299.71 -/ - 1 3 8 1 21.93 35.84 64.46 94.04 153.37 - 245.33 380.70 537.43 625.52 936.13 - 1313.06 2106.22 -/ - 1 3 9 1 21.53 63.05 121.09 179.16 301.34 - 513.55 870.51 1319.32 1579.23 2501.66 - 2841.44 2842.98 -/ - 1 4 1 1 47.15 41.45 36.36 33.56 31.90 - 33.66 40.35 49.47 53.98 68.64 - 82.77 110.65 -/ - 1 4 2 1 46.94 40.66 35.32 32.57 31.18 - 33.45 40.86 50.04 54.78 69.56 - 84.58 112.20 -/ - 1 4 3 1 45.87 37.16 31.34 29.17 29.18 - 33.94 43.38 53.81 59.59 76.91 - 88.69 118.87 -/ - 1 4 4 1 44.81 34.36 28.79 27.34 28.77 - 35.33 46.14 58.33 63.73 68.63 - 73.83 103.62 -/ - 1 4 5 1 39.32 26.11 24.24 25.90 31.05 - 40.45 53.09 65.67 72.05 91.75 - 112.44 149.72 -/ - 1 4 6 1 36.44 24.23 24.43 26.26 34.12 - 46.44 62.83 79.83 88.56 115.57 - 143.93 195.07 -/ - 1 4 7 1 33.03 23.18 24.69 28.96 39.87 - 56.31 79.35 103.30 115.54 153.41 - 193.42 266.35 -/ - 1 4 8 1 22.24 32.83 57.57 83.53 135.78 - 215.88 331.45 462.01 534.55 785.63 - 1091.75 1723.49 -/ - 1 4 9 1 21.54 56.04 107.03 157.94 263.21 - 441.13 732.08 1095.53 1303.03 2039.68 - 2942.17 3469.33 -/ - 1 5 1 1 48.74 44.26 39.77 36.98 34.83 - 35.60 40.43 48.28 52.84 68.05 - 82.66 109.59 -/ - 1 5 2 1 48.59 43.61 38.83 35.99 33.95 - 35.05 40.53 48.90 53.72 68.75 - 83.40 111.44 -/ - 1 5 3 1 47.81 40.65 34.90 32.17 31.06 - 33.92 42.17 51.65 56.73 72.35 - 89.13 119.12 -/ - 1 5 4 1 47.04 38.10 32.04 29.76 29.67 - 34.34 43.91 54.30 60.22 77.91 - 90.74 122.23 -/ - 1 5 5 1 42.67 29.01 25.32 25.85 30.64 - 39.59 47.25 57.50 62.51 77.61 - 93.31 121.63 -/ - 1 5 6 1 40.17 26.31 24.39 26.14 31.37 - 40.74 53.56 66.34 72.83 92.90 - 113.98 152.05 -/ - 1 5 7 1 37.00 24.31 24.70 26.50 34.58 - 47.18 64.09 81.66 90.69 118.65 - 148.08 201.19 -/ - 1 5 8 1 23.48 27.18 44.16 62.65 100.61 - 158.26 238.30 324.86 371.25 525.58 - 707.02 1078.96 -/ - 1 5 9 1 22.14 42.38 78.81 115.67 189.89 - 308.37 489.75 705.32 827.98 1254.60 - 1770.25 2832.24 -/ - 1 6 1 1 50.46 47.44 44.08 41.72 39.50 - 39.39 42.60 48.51 52.24 65.65 - 80.71 108.26 -/ - 1 6 2 1 50.31 46.99 43.36 40.86 38.59 - 38.62 42.08 48.45 52.38 66.40 - 81.96 110.28 -/ - 1 6 3 1 49.80 44.89 40.12 37.26 35.12 - 36.05 41.26 49.58 54.42 70.12 - 85.46 113.75 -/ - 1 6 4 1 49.33 42.96 37.44 34.53 32.86 - 34.79 41.93 51.72 56.55 72.45 - 87.88 117.66 -/ - 1 6 5 1 46.49 34.46 28.70 27.46 29.51 - 36.85 48.87 62.11 65.68 66.43 - 78.03 97.90 -/ - 1 6 6 1 44.71 30.98 26.36 26.33 30.45 - 39.36 50.42 55.00 59.70 73.53 - 87.55 112.69 -/ - 1 6 7 1 42.27 27.72 24.89 25.89 31.84 - 38.89 50.90 62.54 68.38 86.25 - 104.97 138.82 -/ - 1 6 8 1 26.90 23.69 32.14 42.76 65.63 - 101.30 149.93 200.46 226.71 310.60 - 403.49 582.32 -/ - 1 6 9 1 23.00 29.95 50.95 73.37 118.78 - 187.97 286.08 394.76 453.88 652.79 - 888.47 1362.02 -/ - 1 7 1 1 51.01 48.30 45.32 43.17 41.07 - 40.85 43.84 49.24 52.65 65.34 - 79.85 106.67 -/ - 1 7 2 1 50.83 47.91 44.68 42.39 40.20 - 40.05 43.17 48.90 52.56 65.82 - 80.81 108.34 -/ - 1 7 3 1 50.31 46.08 41.76 38.98 36.74 - 37.23 41.54 49.14 53.61 69.35 - 85.38 114.08 -/ - 1 7 4 1 49.91 44.39 39.27 36.34 34.34 - 35.65 41.63 50.58 55.76 72.04 - 87.72 116.93 -/ - 1 7 5 1 47.53 36.48 30.29 28.56 29.65 - 36.11 46.77 59.60 66.05 79.00 - 81.31 113.43 -/ - 1 7 6 1 45.98 32.94 27.61 26.87 29.81 - 37.91 51.16 60.28 61.55 69.72 - 82.31 104.44 -/ - 1 7 7 1 43.83 29.39 25.57 26.16 31.12 - 40.82 47.96 58.53 63.72 79.32 - 95.45 124.55 -/ - 1 7 8 1 28.57 24.01 29.42 38.30 57.18 - 87.15 128.19 170.56 192.41 261.58 - 337.24 480.46 -/ - 1 7 9 1 23.76 27.23 44.27 62.90 101.07 - 159.08 239.81 327.37 374.35 530.21 - 710.82 1073.88 -/ - 1 8 1 1 53.43 51.26 49.55 48.43 47.46 - 48.13 50.86 54.93 57.40 67.07 - 79.09 102.89 -/ - 1 8 2 1 53.24 51.00 49.18 47.93 46.78 - 47.36 50.12 54.31 56.85 66.85 - 79.18 103.39 -/ - 1 8 3 1 52.47 50.04 47.69 45.95 44.19 - 44.17 47.06 51.88 54.77 66.40 - 80.20 106.28 -/ - 1 8 4 1 51.97 49.23 46.30 44.21 42.15 - 41.94 44.99 50.41 53.82 66.83 - 81.84 109.55 -/ - 1 8 5 1 50.73 44.88 39.58 36.61 34.64 - 36.08 42.41 51.80 57.23 74.50 - 90.92 121.71 -/ - 1 8 6 1 50.09 42.38 36.29 33.43 32.23 - 35.15 43.81 54.41 59.95 76.96 - 94.68 127.64 -/ - 1 8 7 1 49.13 39.14 32.67 30.38 30.45 - 35.66 46.22 57.51 64.10 83.46 - 101.30 137.01 -/ - 1 8 8 1 38.57 24.73 25.16 26.96 35.25 - 48.34 65.96 84.10 93.37 122.12 - 152.43 207.38 -/ - 1 8 9 1 31.17 23.74 27.14 34.33 49.50 - 73.67 107.16 141.62 159.32 214.89 - 275.06 387.80 -/ - 1 9 1 1 55.72 55.67 55.50 55.47 55.74 - 56.76 59.08 62.41 64.44 72.00 - 81.74 102.80 -/ - 1 9 2 1 55.72 55.67 55.50 55.47 55.74 - 56.76 59.08 62.41 64.44 72.00 - 81.74 102.80 -/ - 1 9 3 1 55.72 55.67 55.50 55.47 55.74 - 56.76 59.08 62.41 64.44 72.00 - 81.74 102.80 -/ - 1 9 4 1 55.72 55.67 55.50 55.47 55.74 - 56.76 59.08 62.41 64.44 72.00 - 81.74 102.80 -/ - 1 9 5 1 55.72 55.67 55.50 55.47 55.74 - 56.76 59.08 62.41 64.44 72.00 - 81.74 102.80 -/ - 1 9 6 1 55.72 55.67 55.50 55.47 55.74 - 56.76 59.08 62.41 64.44 72.00 - 81.74 102.80 -/ - 1 9 7 1 55.72 55.67 55.50 55.47 55.74 - 56.76 59.08 62.41 64.44 72.00 - 81.74 102.80 -/ - 1 9 8 1 55.72 55.67 55.50 55.47 55.74 - 56.76 59.08 62.41 64.44 72.00 - 81.74 102.80 -/ - 1 9 9 1 55.72 55.67 55.50 55.47 55.74 - 56.76 59.08 62.41 64.44 72.00 - 81.74 102.80 -/ - 2 1 1 1 50.19 44.42 39.70 37.12 35.76 - 38.00 45.59 54.58 59.17 73.89 - 89.59 117.43 -/ - 2 1 2 1 49.95 43.62 38.71 36.21 35.15 - 37.98 46.37 55.40 60.13 75.90 - 92.49 121.79 -/ - 2 1 3 1 48.70 40.17 35.03 33.20 33.72 - 39.37 49.37 60.95 66.83 70.28 - 76.13 106.62 -/ - 2 1 4 1 47.53 37.53 32.79 31.66 33.63 - 40.92 52.83 56.66 59.15 71.09 - 83.18 104.85 -/ - 2 1 5 1 41.88 30.39 29.36 31.03 37.59 - 49.04 64.64 81.11 89.64 116.18 - 144.13 194.63 -/ - 2 1 6 1 39.10 28.97 29.91 32.65 42.42 - 57.70 79.69 102.85 114.76 151.64 - 190.55 261.72 -/ - 2 1 7 1 35.98 28.24 30.59 36.81 50.38 - 72.79 104.53 137.35 154.15 206.63 - 262.99 369.05 -/ - 2 1 8 1 27.22 44.38 79.53 115.73 189.07 - 306.28 486.19 704.17 829.85 1274.17 - 1825.59 2170.64 -/ - 2 1 9 1 26.99 78.27 149.63 222.42 381.41 - 672.49 1180.78 1831.55 2164.20 2190.64 - 2209.43 2160.05 -/ - 2 2 1 1 50.91 45.46 40.78 38.11 36.54 - 38.35 45.39 54.63 59.09 73.06 - 88.30 115.57 -/ - 2 2 2 1 50.69 44.69 39.79 37.18 35.87 - 38.23 46.03 55.22 59.90 74.88 - 90.98 119.59 -/ - 2 2 3 1 49.55 41.33 36.02 33.96 34.06 - 39.08 48.77 59.93 65.70 76.36 - 83.33 114.14 -/ - 2 2 4 1 48.47 38.69 33.63 32.24 33.74 - 40.63 52.03 60.75 61.34 69.40 - 80.80 101.00 -/ - 2 2 5 1 43.09 31.09 29.56 31.18 36.53 - 47.25 61.51 76.45 84.18 108.29 - 133.73 179.72 -/ - 2 2 6 1 40.35 29.40 29.75 31.94 40.85 - 54.71 74.52 95.48 106.29 139.83 - 175.17 239.43 -/ - 2 2 7 1 37.19 28.46 30.04 35.43 47.72 - 67.78 96.46 126.25 141.51 188.98 - 239.72 333.99 -/ - 2 2 8 1 27.47 41.33 72.67 105.33 171.40 - 275.56 432.17 618.00 724.06 1098.95 - 1558.35 2465.13 -/ - 2 2 9 1 26.64 71.35 135.66 200.83 340.79 - 590.60 1020.60 1565.48 1882.73 2444.69 - 2442.89 2462.77 -/ - 2 3 1 1 51.64 46.56 41.98 39.26 37.49 - 38.91 45.25 54.28 58.82 73.36 - 87.51 114.59 -/ - 2 3 2 1 51.44 45.83 41.00 38.31 36.75 - 38.61 45.75 55.14 59.67 73.85 - 89.41 117.30 -/ - 2 3 3 1 50.42 42.60 37.17 34.90 34.56 - 38.87 48.41 58.73 64.49 80.15 - 89.24 120.33 -/ - 2 3 4 1 49.43 39.99 34.64 32.97 33.95 - 40.31 51.02 63.14 66.15 67.80 - 78.60 97.42 -/ - 2 3 5 1 44.38 31.96 29.79 30.99 35.50 - 45.51 58.54 71.97 78.91 100.57 - 123.48 164.97 -/ - 2 3 6 1 41.73 29.98 29.58 31.40 39.25 - 51.86 69.53 88.26 97.94 128.06 - 159.83 217.32 -/ - 2 3 7 1 38.57 28.76 29.86 34.09 45.18 - 62.92 88.46 115.20 128.89 171.42 - 216.64 299.92 -/ - 2 3 8 1 27.82 38.40 65.87 94.95 153.83 - 245.55 380.77 537.42 625.73 936.30 - 1313.80 2106.33 -/ - 2 3 9 1 26.63 64.47 121.71 179.51 301.48 - 513.55 870.66 1320.14 1580.19 2501.75 - 2843.76 2840.23 -/ - 2 4 1 1 52.38 47.72 43.31 40.58 38.62 - 39.68 45.25 53.77 58.66 73.59 - 87.19 114.45 -/ - 2 4 2 1 52.21 47.04 42.36 39.62 37.82 - 39.23 45.57 54.67 59.54 73.99 - 88.33 116.90 -/ - 2 4 3 1 51.30 43.99 38.53 36.04 35.29 - 38.80 48.01 57.57 63.03 79.91 - 94.81 125.17 -/ - 2 4 4 1 50.41 41.44 35.87 33.90 34.29 - 39.83 49.80 61.71 67.71 74.51 - 78.97 109.43 -/ - 2 4 5 1 45.76 33.06 30.18 30.82 36.40 - 43.77 55.75 67.76 73.92 93.12 - 113.49 150.44 -/ - 2 4 6 1 43.23 30.76 29.61 31.36 37.68 - 49.16 64.77 81.26 89.81 116.44 - 144.58 195.51 -/ - 2 4 7 1 40.12 29.18 30.22 32.88 42.76 - 58.28 80.64 104.21 116.34 153.98 - 193.78 266.61 -/ - 2 4 8 1 28.30 35.66 59.17 84.59 136.34 - 216.15 331.56 462.04 534.54 786.05 - 1091.91 1724.39 -/ - 2 4 9 1 27.12 57.67 107.77 158.36 263.38 - 441.17 732.30 1095.67 1303.81 2039.78 - 2942.25 3469.41 -/ - 2 5 1 1 53.89 50.23 46.42 43.84 41.65 - 41.96 45.93 53.16 57.45 72.52 - 87.65 115.02 -/ - 2 5 2 1 53.76 49.68 45.59 42.90 40.76 - 41.32 45.82 53.58 58.14 73.55 - 88.19 115.59 -/ - 2 5 3 1 53.11 47.14 42.01 39.22 37.61 - 39.46 46.73 56.71 61.38 76.36 - 92.23 121.75 -/ - 2 5 4 1 52.46 44.91 39.25 36.68 35.85 - 39.28 48.68 58.34 63.71 80.99 - 97.02 128.73 -/ - 2 5 5 1 48.78 36.25 31.78 31.45 35.29 - 44.26 50.50 60.31 65.12 79.66 - 94.95 122.82 -/ - 2 5 6 1 46.64 33.30 30.34 31.04 36.72 - 44.07 56.23 68.46 74.73 94.28 - 115.03 152.78 -/ - 2 5 7 1 43.86 30.84 29.76 31.53 38.11 - 49.87 66.00 83.08 91.92 119.50 - 148.70 201.61 -/ - 2 5 8 1 30.00 30.82 46.29 64.14 101.48 - 158.72 238.54 324.99 371.33 525.58 - 707.44 1079.14 -/ - 2 5 9 1 27.58 44.58 79.94 116.35 190.21 - 308.50 489.76 705.57 828.14 1255.31 - 1771.21 2832.33 -/ - 2 6 1 1 55.67 53.04 50.25 48.17 46.12 - 45.90 48.91 54.27 57.74 70.55 - 85.03 111.98 -/ - 2 6 2 1 55.49 52.67 49.62 47.41 45.27 - 45.12 48.25 53.99 57.69 71.10 - 86.10 113.83 -/ - 2 6 3 1 54.96 50.89 46.80 44.11 41.92 - 42.37 46.67 54.41 58.99 75.15 - 90.48 119.24 -/ - 2 6 4 1 54.56 49.25 44.39 41.55 39.58 - 40.80 46.84 56.05 61.37 77.70 - 92.57 122.81 -/ - 2 6 5 1 52.18 41.67 35.74 33.93 34.87 - 41.43 52.49 65.44 71.58 71.26 - 80.73 100.08 -/ - 2 6 6 1 50.68 38.30 33.09 32.18 34.94 - 43.28 55.96 58.11 62.66 76.00 - 89.60 114.23 -/ - 2 6 7 1 48.61 34.88 31.09 31.29 36.19 - 44.13 53.90 65.04 70.65 87.97 - 106.30 139.75 -/ - 2 6 8 1 34.07 29.03 35.33 45.14 67.10 - 102.20 150.48 200.79 227.00 310.76 - 403.57 582.30 -/ - 2 6 9 1 29.32 33.19 52.81 74.64 119.48 - 188.32 286.24 394.83 453.92 653.10 - 888.64 1362.67 -/ - 2 7 1 1 56.27 53.80 51.33 49.46 47.56 - 47.37 50.30 55.31 58.38 70.51 - 84.44 110.67 -/ - 2 7 2 1 56.06 53.47 50.78 48.77 46.76 - 46.54 49.53 54.79 58.15 70.81 - 85.24 112.17 -/ - 2 7 3 1 55.44 51.93 48.25 45.73 43.50 - 43.64 47.35 54.25 58.47 73.58 - 89.95 118.66 -/ - 2 7 4 1 55.10 50.49 46.05 43.25 41.13 - 41.86 46.84 55.22 60.15 76.93 - 92.66 122.32 -/ - 2 7 5 1 53.09 43.56 37.48 35.26 35.32 - 40.61 51.13 63.02 69.37 84.77 - 87.66 119.45 -/ - 2 7 6 1 51.80 40.25 34.52 33.11 34.86 - 42.36 54.77 65.99 67.39 72.54 - 84.75 106.34 -/ - 2 7 7 1 49.98 36.67 32.05 31.75 35.79 - 45.11 52.46 61.40 66.39 81.44 - 97.14 125.77 -/ - 2 7 8 1 35.88 29.06 33.04 41.07 58.97 - 88.25 128.89 171.01 192.79 261.82 - 337.38 480.50 -/ - 2 7 9 1 30.34 30.92 46.44 64.41 101.95 - 159.54 240.05 327.50 374.44 530.20 - 711.26 1074.05 -/ - 2 8 1 1 58.76 56.63 55.13 54.21 53.53 - 54.10 57.08 60.99 63.37 72.72 - 84.38 107.79 -/ - 2 8 2 1 58.57 56.35 54.76 53.72 52.89 - 53.69 56.41 60.42 62.86 72.50 - 84.44 108.22 -/ - 2 8 3 1 57.76 55.36 53.41 51.90 50.29 - 50.64 53.56 58.09 60.82 71.91 - 85.19 110.73 -/ - 2 8 4 1 57.22 54.69 52.23 50.39 48.52 - 48.39 51.40 56.46 59.56 72.04 - 86.51 113.64 -/ - 2 8 5 1 55.93 51.01 46.38 43.52 41.40 - 42.26 47.57 56.38 61.57 79.43 - 95.91 127.14 -/ - 2 8 6 1 55.39 48.86 43.39 40.48 38.81 - 40.75 48.41 59.08 64.85 81.60 - 97.84 130.35 -/ - 2 8 7 1 54.57 46.02 39.92 37.30 36.60 - 40.53 50.85 61.80 67.52 86.49 - 106.81 142.35 -/ - 2 8 8 1 45.53 31.31 30.19 32.10 38.81 - 51.19 68.04 85.63 94.71 123.04 - 153.10 207.79 -/ - 2 8 9 1 38.59 28.93 31.29 37.62 51.82 - 75.11 108.06 142.28 159.88 215.22 - 275.30 387.91 -/ - 2 9 1 1 60.73 60.68 60.50 60.47 60.74 - 61.77 64.08 67.41 69.44 77.00 - 86.74 107.80 -/ - 2 9 2 1 60.73 60.68 60.50 60.47 60.74 - 61.77 64.08 67.41 69.44 77.00 - 86.74 107.80 -/ - 2 9 3 1 60.73 60.68 60.50 60.47 60.74 - 61.77 64.08 67.41 69.44 77.00 - 86.74 107.80 -/ - 2 9 4 1 60.73 60.68 60.50 60.47 60.74 - 61.77 64.08 67.41 69.44 77.00 - 86.74 107.80 -/ - 2 9 5 1 60.73 60.68 60.50 60.47 60.74 - 61.77 64.08 67.41 69.44 77.00 - 86.74 107.80 -/ - 2 9 6 1 60.73 60.68 60.50 60.47 60.74 - 61.77 64.08 67.41 69.44 77.00 - 86.74 107.80 -/ - 2 9 7 1 60.73 60.68 60.50 60.47 60.74 - 61.77 64.08 67.41 69.44 77.00 - 86.74 107.80 -/ - 2 9 8 1 60.73 60.68 60.50 60.47 60.74 - 61.77 64.08 67.41 69.44 77.00 - 86.74 107.80 -/ - 2 9 9 1 60.73 60.68 60.50 60.47 60.74 - 61.77 64.08 67.41 69.44 77.00 - 86.74 107.80 -/ - 3 1 1 1 55.36 50.53 46.35 43.75 42.05 - 43.49 50.21 59.54 64.02 77.51 - 92.74 120.09 -/ - 3 1 2 1 55.15 49.81 45.41 42.83 41.35 - 43.31 50.83 60.14 64.60 79.36 - 95.50 124.28 -/ - 3 1 3 1 54.11 46.68 41.75 39.58 39.31 - 43.99 53.51 64.60 70.28 76.97 - 83.61 114.22 -/ - 3 1 4 1 53.09 44.19 39.37 37.72 38.85 - 45.54 56.74 63.21 62.51 74.03 - 85.74 106.91 -/ - 3 1 5 1 48.13 36.75 34.97 36.31 41.51 - 52.20 67.01 82.95 91.27 117.37 - 145.05 195.29 -/ - 3 1 6 1 45.59 34.96 34.83 37.01 45.80 - 60.16 81.39 104.11 115.86 152.45 - 191.21 262.14 -/ - 3 1 7 1 42.63 33.87 35.15 40.45 53.04 - 74.55 105.71 138.21 154.92 207.17 - 263.36 369.30 -/ - 3 1 8 1 32.89 47.08 80.98 116.65 189.56 - 306.52 486.29 704.16 830.02 1274.37 - 1825.77 2172.38 -/ - 3 1 9 1 31.78 79.69 150.27 222.78 381.57 - 672.49 1180.95 1831.70 2165.59 2190.75 - 2209.53 2160.15 -/ - 3 2 1 1 56.06 51.50 47.38 44.74 42.91 - 44.07 50.15 59.08 63.91 77.59 - 91.59 119.36 -/ - 3 2 2 1 55.87 50.81 46.45 43.81 42.15 - 43.70 50.64 60.21 64.52 78.51 - 94.14 122.25 -/ - 3 2 3 1 54.91 47.79 42.77 40.43 39.85 - 43.84 53.31 63.62 69.28 82.62 - 90.31 119.73 -/ - 3 2 4 1 53.97 45.33 40.27 38.44 39.08 - 45.31 55.91 66.98 67.95 72.52 - 83.56 103.26 -/ - 3 2 5 1 49.27 37.55 35.23 36.10 40.62 - 50.60 64.11 78.49 86.01 109.64 - 134.78 180.50 -/ - 3 2 6 1 46.80 35.52 34.77 36.56 44.40 - 57.39 76.43 96.90 107.54 140.73 - 175.88 239.91 -/ - 3 2 7 1 43.84 34.20 35.00 39.27 50.59 - 69.74 97.76 127.23 142.36 189.60 - 240.16 334.29 -/ - 3 2 8 1 33.25 44.23 74.30 106.38 171.96 - 275.84 432.30 618.03 724.05 1099.40 - 1558.55 2457.93 -/ - 3 2 9 1 31.72 72.94 136.39 201.26 340.98 - 590.64 1020.83 1565.64 1882.89 2466.76 - 2441.74 2462.87 -/ - 3 3 1 1 56.77 52.51 48.51 45.88 43.91 - 44.79 50.21 58.68 63.58 78.03 - 92.08 119.51 -/ - 3 3 2 1 56.60 51.87 47.61 44.93 43.11 - 44.33 50.52 59.61 64.53 78.44 - 92.72 121.14 -/ - 3 3 3 1 55.73 48.99 43.93 41.44 40.54 - 43.80 53.19 62.48 68.15 85.05 - 95.84 125.67 -/ - 3 3 4 1 54.87 46.58 41.35 39.29 39.43 - 44.87 54.89 66.75 72.40 71.09 - 81.58 103.97 -/ - 3 3 5 1 50.49 38.53 35.62 36.05 40.31 - 49.04 61.40 74.27 80.98 102.13 - 124.71 165.87 -/ - 3 3 6 1 48.10 36.24 34.94 36.47 42.98 - 54.79 71.68 89.89 99.38 129.11 - 160.64 217.94 -/ - 3 3 7 1 45.19 34.61 35.38 38.17 48.29 - 65.12 89.95 116.29 129.86 172.14 - 217.20 300.29 -/ - 3 3 8 1 33.72 41.55 67.71 96.15 154.49 - 245.88 380.94 537.49 625.76 936.63 - 1314.00 2107.53 -/ - 3 3 9 1 32.04 66.27 122.55 180.01 301.71 - 513.63 870.80 1320.31 1580.35 2503.24 - 2843.87 2910.90 -/ - 3 4 1 1 57.49 53.57 49.75 47.16 45.09 - 45.68 50.41 58.37 63.02 78.37 - 91.92 119.56 -/ - 3 4 2 1 57.34 52.98 48.89 46.22 44.25 - 45.13 50.55 59.10 64.05 79.16 - 92.97 120.90 -/ - 3 4 3 1 56.56 50.28 45.28 42.65 41.41 - 43.98 52.51 62.30 67.06 83.29 - 101.06 131.63 -/ - 3 4 4 1 55.79 47.97 42.63 40.33 39.97 - 44.52 54.31 65.39 71.24 81.21 - 85.48 115.53 -/ - 3 4 5 1 51.77 39.73 36.18 36.25 40.57 - 47.46 58.86 70.35 76.28 94.94 - 114.93 151.51 -/ - 3 4 6 1 49.51 37.17 35.23 36.60 41.63 - 52.36 67.20 83.16 91.48 117.67 - 145.53 196.20 -/ - 3 4 7 1 46.68 35.20 35.14 37.24 46.14 - 60.76 82.36 105.48 117.46 154.79 - 194.45 267.02 -/ - 3 4 8 1 34.35 39.10 61.23 85.99 137.12 - 216.56 331.78 462.15 534.61 786.02 - 1092.44 1724.59 -/ - 3 4 9 1 32.66 59.73 108.76 158.96 263.68 - 441.28 732.29 1095.85 1303.99 2041.01 - 2942.37 3469.51 -/ - 3 5 1 1 58.96 55.87 52.62 50.26 48.08 - 48.13 51.66 58.26 62.31 76.79 - 92.20 119.59 -/ - 3 5 2 1 58.84 55.39 51.87 49.39 47.22 - 47.45 51.31 58.51 62.83 78.12 - 93.31 121.18 -/ - 3 5 3 1 58.27 53.17 48.61 45.84 43.99 - 45.25 51.56 60.99 66.44 81.13 - 95.66 125.80 -/ - 3 5 4 1 57.70 51.19 46.00 43.30 42.00 - 44.52 53.07 63.21 68.09 84.44 - 102.61 135.40 -/ - 3 5 5 1 54.54 43.05 38.18 37.17 39.89 - 48.42 56.09 63.55 68.18 82.20 - 97.08 124.46 -/ - 3 5 6 1 52.68 40.00 36.35 36.44 40.98 - 47.78 59.37 71.08 77.11 96.12 - 116.49 153.87 -/ - 3 5 7 1 50.20 37.25 35.36 36.91 42.05 - 53.06 68.43 84.95 93.57 120.72 - 149.64 202.28 -/ - 3 5 8 1 36.43 35.00 48.98 66.06 102.65 - 159.39 238.91 325.23 371.53 525.66 - 707.45 1079.81 -/ - 3 5 9 1 33.31 47.31 81.39 117.27 190.69 - 308.74 489.85 705.57 828.32 1255.50 - 1771.38 2833.83 -/ - 3 6 1 1 60.89 58.43 56.07 54.23 52.34 - 52.16 55.15 60.17 63.33 75.63 - 89.59 116.00 -/ - 3 6 2 1 60.67 58.10 55.52 53.55 51.55 - 51.34 54.39 59.68 63.15 76.03 - 90.50 117.70 -/ - 3 6 3 1 60.03 56.56 53.01 50.54 48.34 - 48.51 52.30 59.44 63.79 79.35 - 95.82 125.11 -/ - 3 6 4 1 59.68 55.12 50.85 48.11 46.02 - 46.78 51.98 60.66 65.75 82.70 - 97.56 128.29 -/ - 3 6 5 1 57.63 48.33 42.52 40.32 40.41 - 45.97 56.52 69.11 75.46 78.01 - 83.86 102.76 -/ - 3 6 6 1 56.34 45.12 39.67 38.15 39.97 - 47.70 60.55 63.06 66.01 78.93 - 92.13 116.25 -/ - 3 6 7 1 54.54 41.69 37.30 36.88 41.06 - 50.24 57.30 68.02 73.42 90.16 - 108.08 141.10 -/ - 3 6 8 1 40.92 34.33 39.08 48.09 69.02 - 103.43 151.26 201.33 227.44 311.05 - 403.76 582.37 -/ - 3 6 9 1 35.60 37.01 55.16 76.28 120.42 - 188.84 286.53 395.00 454.04 653.13 - 889.03 1362.87 -/ - 3 7 1 1 61.51 59.11 57.04 55.39 53.58 - 53.67 56.63 61.33 64.17 75.80 - 89.22 114.92 -/ - 3 7 2 1 61.28 58.83 56.56 54.78 52.93 - 52.80 55.80 60.74 63.80 75.98 - 89.88 116.29 -/ - 3 7 3 1 60.52 57.49 54.33 52.03 49.86 - 49.81 53.20 59.54 63.55 78.11 - 93.98 123.49 -/ - 3 7 4 1 60.18 56.24 52.36 49.75 47.57 - 47.95 52.21 60.08 64.79 81.50 - 97.88 126.84 -/ - 3 7 5 1 58.45 50.08 44.30 41.78 41.20 - 45.40 55.93 66.75 73.04 91.39 - 95.26 125.74 -/ - 3 7 6 1 57.34 47.00 41.23 39.34 40.20 - 47.07 58.61 71.88 73.88 75.76 - 87.64 108.73 -/ - 3 7 7 1 55.77 43.52 38.47 37.46 40.35 - 49.22 58.74 64.67 69.51 84.04 - 99.33 127.45 -/ - 3 7 8 1 42.78 34.09 37.16 44.40 61.26 - 89.71 129.85 171.70 193.38 262.19 - 337.66 480.64 -/ - 3 7 9 1 36.83 35.15 49.17 66.35 103.12 - 160.21 240.42 327.74 374.63 530.29 - 711.26 1074.73 -/ - 3 8 1 1 64.00 61.97 60.63 59.86 59.42 - 60.12 62.18 66.05 68.02 78.24 - 89.62 112.73 -/ - 3 8 2 1 63.84 61.67 60.25 59.37 58.79 - 59.44 62.39 66.27 68.43 78.03 - 89.67 113.12 -/ - 3 8 3 1 63.06 60.60 58.90 57.57 56.25 - 56.84 59.75 64.08 66.70 77.38 - 90.25 115.35 -/ - 3 8 4 1 62.47 59.97 57.89 56.26 54.46 - 54.61 57.66 62.44 65.32 77.35 - 91.32 117.95 -/ - 3 8 5 1 61.03 56.78 52.71 50.02 47.83 - 48.32 52.89 61.19 66.17 83.99 - 101.17 131.65 -/ - 3 8 6 1 60.55 54.90 49.99 47.09 45.19 - 46.55 53.25 63.40 69.32 86.57 - 102.77 134.57 -/ - 3 8 7 1 59.85 52.38 46.72 43.93 42.73 - 45.69 55.18 66.45 71.91 89.88 - 109.84 146.42 -/ - 3 8 8 1 51.95 37.77 35.76 37.46 42.77 - 54.50 70.64 87.65 96.49 124.34 - 154.09 208.50 -/ - 3 8 9 1 45.49 34.62 35.96 41.40 54.67 - 77.01 109.30 143.18 160.67 215.77 - 275.66 388.16 -/ - 3 9 1 1 65.73 65.68 65.51 65.47 65.75 - 66.77 69.09 72.41 74.44 82.00 - 91.74 112.80 -/ - 3 9 2 1 65.73 65.68 65.51 65.47 65.75 - 66.77 69.09 72.41 74.44 82.00 - 91.74 112.80 -/ - 3 9 3 1 65.73 65.68 65.51 65.47 65.75 - 66.77 69.09 72.41 74.44 82.00 - 91.74 112.80 -/ - 3 9 4 1 65.73 65.68 65.51 65.47 65.75 - 66.77 69.09 72.41 74.44 82.00 - 91.74 112.80 -/ - 3 9 5 1 65.73 65.68 65.51 65.47 65.75 - 66.77 69.09 72.41 74.44 82.00 - 91.74 112.80 -/ - 3 9 6 1 65.73 65.68 65.51 65.47 65.75 - 66.77 69.09 72.41 74.44 82.00 - 91.74 112.80 -/ - 3 9 7 1 65.73 65.68 65.51 65.47 65.75 - 66.77 69.09 72.41 74.44 82.00 - 91.74 112.80 -/ - 3 9 8 1 65.73 65.68 65.51 65.47 65.75 - 66.77 69.09 72.41 74.44 82.00 - 91.74 112.80 -/ - 3 9 9 1 65.73 65.68 65.51 65.47 65.75 - 66.77 69.09 72.41 74.44 82.00 - 91.74 112.80 -/ - 4 1 1 1 60.44 56.33 52.64 50.13 48.22 - 49.19 55.05 63.85 68.96 82.18 - 96.15 123.99 -/ - 4 1 2 1 60.26 55.69 51.75 49.20 47.46 - 48.78 55.52 64.99 69.60 83.12 - 98.79 127.07 -/ - 4 1 3 1 59.36 52.85 48.21 45.83 45.07 - 48.81 58.20 68.48 74.02 84.29 - 91.06 120.23 -/ - 4 1 4 1 58.48 50.52 45.76 43.83 44.20 - 50.27 60.80 70.11 68.11 77.31 - 88.68 109.36 -/ - 4 1 5 1 54.07 42.98 40.59 41.24 45.75 - 55.72 69.81 85.18 93.27 118.88 - 146.26 196.21 -/ - 4 1 6 1 51.74 40.93 39.99 41.72 49.53 - 63.07 83.49 105.70 117.28 153.51 - 192.08 262.79 -/ - 4 1 7 1 48.96 39.53 40.13 44.47 56.15 - 76.72 107.18 139.35 155.92 207.90 - 263.93 369.69 -/ - 4 1 8 1 38.57 50.22 82.74 117.80 190.20 - 306.86 486.46 704.24 830.05 1274.68 - 1826.00 2172.59 -/ - 4 1 9 1 36.82 81.43 151.09 223.28 381.81 - 672.57 1181.06 1831.89 2165.78 2185.95 - 2209.67 2267.40 -/ - 4 2 1 1 61.12 57.24 53.61 51.11 49.11 - 49.85 55.13 63.55 68.44 82.76 - 96.84 124.38 -/ - 4 2 2 1 60.95 56.64 52.75 50.19 48.31 - 49.38 55.46 64.50 69.75 83.22 - 97.56 126.21 -/ - 4 2 3 1 60.13 53.91 49.22 46.73 45.71 - 48.78 58.17 67.53 73.15 89.53 - 97.31 126.98 -/ - 4 2 4 1 59.31 51.62 46.71 44.58 44.54 - 49.89 59.94 71.71 74.57 75.95 - 86.68 105.91 -/ - 4 2 5 1 55.15 43.86 40.96 41.26 45.07 - 54.28 67.14 80.95 88.23 111.34 - 136.15 181.55 -/ - 4 2 6 1 52.90 41.60 40.20 41.60 48.27 - 60.52 78.75 98.69 109.12 141.92 - 176.83 240.67 -/ - 4 2 7 1 50.15 39.94 40.49 43.47 53.91 - 72.13 99.40 128.47 143.48 190.43 - 240.80 334.71 -/ - 4 2 8 1 39.03 47.59 76.25 107.68 172.69 - 276.24 432.51 618.14 724.12 1099.35 - 1558.79 2458.16 -/ - 4 2 9 1 37.01 74.87 137.31 201.84 341.27 - 590.76 1020.80 1565.85 1883.08 2468.62 - 2441.48 2463.00 -/ - 4 3 1 1 61.81 58.19 54.68 52.21 50.14 - 50.65 55.35 63.32 67.99 83.33 - 96.89 124.70 -/ - 4 3 2 1 61.66 57.62 53.85 51.30 49.31 - 50.11 55.50 64.09 69.07 83.68 - 97.45 126.26 -/ - 4 3 3 1 60.91 55.03 50.37 47.78 46.50 - 48.97 57.59 67.09 72.07 88.53 - 103.36 132.56 -/ - 4 3 4 1 60.16 52.83 47.82 45.49 45.04 - 49.60 59.24 70.63 76.45 77.77 - 84.91 110.69 -/ - 4 3 5 1 56.30 44.91 41.48 41.49 44.59 - 52.87 64.65 76.99 83.46 104.05 - 126.27 167.07 -/ - 4 3 6 1 54.15 42.42 40.49 41.83 47.06 - 58.14 74.25 91.90 101.17 130.46 - 161.71 218.78 -/ - 4 3 7 1 51.46 40.47 40.36 42.60 51.82 - 67.76 91.80 117.69 131.11 173.09 - 217.95 300.78 -/ - 4 3 8 1 39.61 45.17 69.88 97.63 155.33 - 246.35 381.20 537.64 625.87 936.63 - 1314.44 2107.76 -/ - 4 3 9 1 37.60 68.42 123.61 180.67 302.05 - 513.78 870.81 1320.56 1580.56 2503.42 - 2845.95 2911.03 -/ - 4 4 1 1 62.51 59.19 55.85 53.44 51.32 - 51.61 55.71 63.18 67.61 83.31 - 97.52 125.00 -/ - 4 4 2 1 62.37 58.66 55.05 52.55 50.47 - 51.00 55.71 63.76 68.48 84.08 - 97.84 126.19 -/ - 4 4 3 1 61.70 56.24 51.68 49.02 47.47 - 49.34 57.10 67.12 71.83 86.97 - 104.32 135.67 -/ - 4 4 4 1 61.04 54.14 49.11 46.61 45.79 - 49.38 59.16 69.30 75.07 88.58 - 93.12 123.52 -/ - 4 4 5 1 57.50 46.16 42.18 41.79 45.15 - 51.60 62.33 73.35 79.05 97.14 - 116.74 152.92 -/ - 4 4 6 1 55.48 43.46 40.87 41.54 45.92 - 55.93 70.07 85.45 93.55 119.24 - 146.79 197.16 -/ - 4 4 7 1 52.90 41.19 40.25 41.97 49.88 - 63.69 84.48 107.09 118.89 155.87 - 195.33 267.68 -/ - 4 4 8 1 40.36 42.97 63.66 87.69 138.10 - 217.13 332.11 462.35 534.77 786.07 - 1092.40 1724.84 -/ - 4 4 9 1 38.05 62.15 109.99 159.74 264.09 - 441.48 732.35 1095.96 1304.26 2041.20 - 2944.08 3469.65 -/ - 4 5 1 1 64.04 61.33 58.51 56.37 54.26 - 54.16 57.45 63.52 67.37 81.31 - 96.25 124.36 -/ - 4 5 2 1 63.86 60.90 57.83 55.56 53.41 - 53.43 56.98 63.60 67.71 82.45 - 97.93 127.07 -/ - 4 5 3 1 63.33 58.93 54.85 52.20 50.19 - 51.03 56.59 65.52 70.73 86.59 - 101.24 131.20 -/ - 4 5 4 1 62.84 57.15 52.41 49.68 48.08 - 49.90 57.71 68.14 72.94 88.19 - 105.95 138.23 -/ - 4 5 5 1 60.08 49.54 44.48 43.08 44.88 - 52.67 62.63 67.10 71.58 85.12 - 99.61 126.50 -/ - 4 5 6 1 58.43 46.46 42.36 41.99 45.51 - 51.93 62.86 74.10 79.91 98.34 - 118.32 155.29 -/ - 4 5 7 1 56.21 43.54 40.99 41.83 46.31 - 56.62 71.28 87.22 95.62 122.27 - 150.89 203.25 -/ - 4 5 8 1 42.75 39.56 52.14 68.36 104.08 - 160.25 239.44 325.58 371.82 525.84 - 707.54 1079.78 -/ - 4 5 9 1 39.05 50.44 83.15 118.43 191.33 - 309.08 490.02 705.64 828.35 1255.83 - 1771.59 2834.02 -/ - 4 6 1 1 66.11 63.68 61.68 60.05 58.23 - 58.30 61.31 66.06 68.96 80.83 - 94.31 120.23 -/ - 4 6 2 1 65.86 63.40 61.19 59.43 57.49 - 57.43 60.49 65.48 68.67 81.10 - 95.09 121.79 -/ - 4 6 3 1 65.06 62.03 58.93 56.66 54.49 - 54.48 58.01 64.61 68.76 83.80 - 99.82 129.93 -/ - 4 6 4 1 64.71 60.76 56.96 54.39 52.24 - 52.68 57.25 65.46 70.34 87.85 - 102.76 132.83 -/ - 4 6 5 1 62.93 54.61 49.04 46.57 46.09 - 50.75 61.32 73.01 79.19 85.58 - 87.33 110.11 -/ - 4 6 6 1 61.80 51.58 46.09 44.23 45.24 - 52.55 64.61 70.49 69.65 82.19 - 95.04 118.66 -/ - 4 6 7 1 60.21 48.21 43.47 42.60 45.76 - 54.96 61.01 71.35 76.56 92.76 - 110.26 142.80 -/ - 4 6 8 1 47.49 39.35 43.23 51.49 71.37 - 104.93 152.25 202.05 228.07 311.45 - 404.07 582.55 -/ - 4 6 9 1 41.83 41.21 57.92 78.24 121.60 - 189.53 286.93 395.27 454.26 653.23 - 889.04 1363.53 -/ - 4 7 1 1 66.76 64.31 62.55 61.10 59.48 - 59.82 62.78 67.26 69.97 81.14 - 94.12 119.36 -/ - 4 7 2 1 66.51 64.07 62.13 60.55 58.78 - 58.93 61.95 66.63 69.47 81.23 - 94.67 120.59 -/ - 4 7 3 1 65.63 62.89 60.13 58.05 55.96 - 55.82 59.08 64.94 68.77 82.83 - 98.24 127.25 -/ - 4 7 4 1 65.20 61.78 58.36 55.93 53.74 - 53.90 57.77 65.09 69.59 85.74 - 102.52 132.84 -/ - 4 7 5 1 63.68 56.25 50.81 48.13 47.11 - 50.41 60.61 70.97 76.96 95.47 - 102.88 133.97 -/ - 4 7 6 1 62.71 53.39 47.73 45.48 45.65 - 51.63 62.61 75.64 80.43 79.29 - 90.86 111.49 -/ - 4 7 7 1 61.34 50.04 44.79 43.38 45.29 - 53.43 65.13 68.26 72.94 87.03 - 101.90 129.53 -/ - 4 7 8 1 49.36 39.59 41.63 48.15 64.01 - 91.52 131.06 172.59 194.17 262.75 - 338.07 480.90 -/ - 4 7 9 1 43.21 39.74 52.37 68.65 104.55 - 161.07 240.95 328.09 374.93 530.46 - 711.35 1074.70 -/ - 4 8 1 1 69.17 67.29 66.07 65.43 65.19 - 65.92 67.94 70.95 72.80 83.66 - 94.82 117.69 -/ - 4 8 2 1 69.03 66.98 65.68 64.94 64.59 - 65.30 67.35 70.50 72.48 83.46 - 94.86 118.05 -/ - 4 8 3 1 68.34 65.82 64.27 63.11 62.08 - 62.87 65.71 69.89 72.43 82.81 - 95.34 120.07 -/ - 4 8 4 1 67.72 65.16 63.36 61.91 60.28 - 60.67 63.72 68.30 71.06 82.67 - 96.23 122.43 -/ - 4 8 5 1 66.05 62.34 58.72 56.21 54.00 - 54.25 58.34 66.15 70.93 88.18 - 105.81 137.69 -/ - 4 8 6 1 65.63 60.67 56.23 53.45 51.39 - 52.34 58.28 67.95 73.64 92.32 - 107.94 140.24 -/ - 4 8 7 1 65.01 58.40 53.17 50.31 48.79 - 51.01 59.75 71.43 76.84 93.57 - 113.17 149.26 -/ - 4 8 8 1 58.03 44.12 41.42 42.39 47.14 - 58.15 73.64 90.07 98.68 125.99 - 155.42 209.47 -/ - 4 8 9 1 52.04 40.32 41.10 45.51 57.95 - 79.34 110.84 144.31 161.66 216.51 - 276.23 388.54 -/ - 4 9 1 1 70.74 70.69 70.51 70.48 70.75 - 71.77 74.09 77.42 79.45 87.01 - 96.74 117.80 -/ - 4 9 2 1 70.74 70.69 70.51 70.48 70.75 - 71.77 74.09 77.42 79.45 87.01 - 96.74 117.80 -/ - 4 9 3 1 70.74 70.69 70.51 70.48 70.75 - 71.77 74.09 77.42 79.45 87.01 - 96.74 117.80 -/ - 4 9 4 1 70.74 70.69 70.51 70.48 70.75 - 71.77 74.09 77.42 79.45 87.01 - 96.74 117.80 -/ - 4 9 5 1 70.74 70.69 70.51 70.48 70.75 - 71.77 74.09 77.42 79.45 87.01 - 96.74 117.80 -/ - 4 9 6 1 70.74 70.69 70.51 70.48 70.75 - 71.77 74.09 77.42 79.45 87.01 - 96.74 117.80 -/ - 4 9 7 1 70.74 70.69 70.51 70.48 70.75 - 71.77 74.09 77.42 79.45 87.01 - 96.74 117.80 -/ - 4 9 8 1 70.74 70.69 70.51 70.48 70.75 - 71.77 74.09 77.42 79.45 87.01 - 96.74 117.80 -/ - 4 9 9 1 70.74 70.69 70.51 70.48 70.75 - 71.77 74.09 77.42 79.45 87.01 - 96.74 117.80 -/ - 5 1 1 1 70.41 67.41 64.46 62.27 60.18 - 60.56 65.17 73.09 77.75 92.79 - 106.41 134.42 -/ - 5 1 2 1 70.27 66.88 63.69 61.40 59.38 - 60.02 65.37 73.92 78.95 92.86 - 107.18 135.33 -/ - 5 1 3 1 69.59 64.50 60.45 58.05 56.61 - 58.90 67.63 76.92 82.20 98.73 - 106.74 135.52 -/ - 5 1 4 1 68.90 62.48 58.04 55.84 55.04 - 59.73 69.20 80.70 83.42 84.65 - 95.42 115.18 -/ - 5 1 5 1 65.33 55.13 51.91 51.83 55.05 - 63.60 76.43 90.66 98.28 122.82 - 149.53 198.84 -/ - 5 1 6 1 63.38 52.75 50.85 52.06 57.84 - 69.92 88.72 109.83 121.00 156.38 - 194.40 264.63 -/ - 5 1 7 1 60.94 50.85 50.84 53.33 63.42 - 82.12 111.00 142.25 158.52 209.89 - 265.53 370.87 -/ - 5 1 8 1 49.95 57.43 87.10 120.76 191.93 - 307.89 487.08 704.62 830.33 1274.71 - 1826.42 2173.16 -/ - 5 1 9 1 47.34 85.73 153.24 224.67 382.57 - 672.94 1181.11 1832.11 2166.20 2162.74 - 2212.84 2160.75 -/ - 5 2 1 1 71.07 68.24 65.35 63.19 61.08 - 61.32 65.49 73.03 77.50 93.09 - 106.71 135.15 -/ - 5 2 2 1 70.94 67.73 64.60 62.34 60.27 - 60.73 65.54 73.70 78.51 93.51 - 107.34 135.73 -/ - 5 2 3 1 70.31 65.47 61.43 58.98 57.36 - 59.19 67.26 77.16 81.69 97.46 - 113.03 141.49 -/ - 5 2 4 1 69.67 63.51 59.01 56.68 55.73 - 59.54 69.18 79.87 85.53 83.60 - 93.77 116.14 -/ - 5 2 5 1 66.33 56.09 52.46 52.12 54.81 - 62.41 74.14 86.87 93.68 115.68 - 139.77 184.46 -/ - 5 2 6 1 64.45 53.55 51.20 52.05 56.86 - 67.76 84.43 103.22 113.22 145.10 - 179.44 242.69 -/ - 5 2 7 1 62.07 51.42 50.61 52.67 61.55 - 77.97 103.62 131.71 146.38 192.65 - 242.61 336.09 -/ - 5 2 8 1 50.56 55.26 81.03 110.98 174.63 - 277.40 433.21 618.61 724.49 1099.48 - 1559.08 2458.75 -/ - 5 2 9 1 47.90 79.60 139.73 203.40 342.14 - 591.21 1020.93 1565.95 1883.36 2469.09 - 2441.47 2463.36 -/ - 5 3 1 1 71.74 69.09 66.32 64.22 62.08 - 62.19 65.97 73.04 77.30 92.46 - 107.03 135.89 -/ - 5 3 2 1 71.61 68.63 65.60 63.39 61.28 - 61.56 65.85 73.56 78.13 94.11 - 108.05 137.20 -/ - 5 3 3 1 71.03 66.49 62.52 60.04 58.26 - 59.63 66.96 77.23 82.00 96.21 - 113.52 145.15 -/ - 5 3 4 1 70.46 64.61 60.12 57.68 56.47 - 59.44 69.18 78.87 84.44 94.51 - 99.02 127.99 -/ - 5 3 5 1 67.36 57.21 53.16 52.49 54.97 - 61.29 72.02 83.39 89.41 108.87 - 130.32 170.34 -/ - 5 3 6 1 65.59 54.52 51.64 51.89 55.98 - 65.75 80.43 96.92 105.74 134.02 - 164.66 221.09 -/ - 5 3 7 1 63.30 52.14 50.76 52.25 59.82 - 74.10 96.50 121.34 134.39 175.59 - 219.99 302.37 -/ - 5 3 8 1 51.31 53.28 75.11 101.34 157.55 - 247.69 382.02 538.20 626.34 936.85 - 1314.46 2108.53 -/ - 5 3 9 1 48.61 73.65 126.35 182.46 303.06 - 514.33 871.03 1320.55 1580.71 2503.91 - 2877.48 2841.96 -/ - 5 4 1 1 72.49 69.99 67.38 65.36 63.20 - 63.21 66.74 73.20 77.24 91.85 - 106.70 135.43 -/ - 5 4 2 1 72.31 69.56 66.69 64.55 62.42 - 62.53 66.36 73.52 77.84 93.28 - 108.81 137.56 -/ - 5 4 3 1 71.78 67.57 63.74 61.27 59.33 - 60.36 66.75 76.34 82.00 95.49 - 111.47 141.82 -/ - 5 4 4 1 71.26 65.81 61.38 58.86 57.38 - 59.62 68.44 78.28 83.36 100.25 - 110.17 139.39 -/ - 5 4 5 1 68.45 58.51 54.06 52.99 54.95 - 63.98 70.07 80.25 85.54 102.51 - 121.34 156.64 -/ - 5 4 6 1 66.80 55.68 52.23 52.15 55.32 - 63.89 76.79 91.03 98.67 123.28 - 150.14 199.85 -/ - 5 4 7 1 64.62 53.06 51.11 52.37 58.22 - 70.57 89.74 111.24 122.62 158.75 - 197.66 269.51 -/ - 5 4 8 1 52.26 51.55 69.45 91.88 140.67 - 218.69 333.08 463.04 535.35 786.41 - 1092.54 1725.40 -/ - 5 4 9 1 49.04 67.95 113.13 161.81 265.27 - 442.15 732.68 1096.06 1304.26 2041.66 - 2944.55 3472.38 -/ - 5 5 1 1 74.27 71.90 69.74 68.01 66.01 - 65.91 69.12 74.33 77.85 90.88 - 104.92 132.08 -/ - 5 5 2 1 73.99 71.56 69.17 67.30 65.19 - 65.10 68.42 74.14 77.90 91.68 - 106.29 134.48 -/ - 5 5 3 1 73.30 69.94 66.61 64.29 62.15 - 62.49 66.97 75.05 79.88 96.87 - 111.62 141.44 -/ - 5 5 4 1 72.91 68.48 64.48 61.94 59.97 - 60.99 67.41 77.20 82.98 96.85 - 113.23 144.52 -/ - 5 5 5 1 70.75 61.83 56.74 54.84 55.31 - 62.39 74.04 74.97 79.15 91.83 - 105.60 131.55 -/ - 5 5 6 1 69.42 58.86 54.27 53.20 55.23 - 64.54 70.64 81.04 86.44 103.75 - 122.95 159.04 -/ - 5 5 7 1 67.61 55.80 52.33 52.33 55.67 - 64.58 77.96 92.76 100.69 126.28 - 154.20 205.88 -/ - 5 5 8 1 55.06 49.59 59.44 73.89 107.67 - 162.52 240.92 326.64 372.73 526.47 - 707.97 1079.95 -/ - 5 5 9 1 50.54 57.65 87.52 121.39 193.07 - 310.11 490.63 706.01 828.62 1255.86 - 1772.03 2834.53 -/ - 5 6 1 1 76.58 74.02 72.47 71.20 69.75 - 69.93 73.24 77.60 80.08 91.35 - 104.04 129.13 -/ - 5 6 2 1 76.28 73.75 72.07 70.69 69.04 - 69.36 72.42 76.98 79.75 91.46 - 104.62 130.44 -/ - 5 6 3 1 75.20 72.65 70.20 68.32 66.20 - 66.12 69.48 75.23 79.05 93.20 - 108.36 137.55 -/ - 5 6 4 1 74.66 71.62 68.53 66.31 64.12 - 64.21 68.09 75.39 79.91 96.34 - 112.88 145.00 -/ - 5 6 5 1 73.25 66.48 61.43 58.82 57.57 - 60.63 71.00 81.28 87.30 101.98 - 98.67 126.98 -/ - 5 6 6 1 72.36 63.80 58.47 56.23 55.98 - 61.96 73.04 85.57 80.45 89.50 - 101.70 124.41 -/ - 5 6 7 1 71.09 60.65 55.59 54.09 55.62 - 63.75 69.19 78.81 83.67 98.86 - 115.57 147.19 -/ - 5 6 8 1 60.01 50.14 52.24 59.24 77.04 - 108.69 154.83 203.99 229.79 312.73 - 405.00 583.20 -/ - 5 6 9 1 54.05 50.35 64.43 83.00 124.62 - 191.40 288.13 396.09 454.98 653.69 - 889.31 1363.53 -/ - 5 7 1 1 77.29 74.72 73.23 72.11 71.01 - 71.46 74.51 78.27 80.19 91.81 - 104.07 128.57 -/ - 5 7 2 1 77.00 74.40 72.86 71.64 70.27 - 70.53 73.82 78.15 80.62 91.79 - 104.48 129.60 -/ - 5 7 3 1 75.90 73.39 71.24 69.55 67.58 - 67.52 70.79 75.94 79.44 92.68 - 107.22 135.31 -/ - 5 7 4 1 75.23 72.49 69.74 67.70 65.52 - 65.47 69.01 75.42 79.56 94.78 - 110.75 141.48 -/ - 5 7 5 1 73.90 67.91 63.11 60.43 58.79 - 60.86 69.74 80.95 85.97 102.97 - 119.06 150.35 -/ - 5 7 6 1 73.14 65.44 60.15 57.66 56.82 - 61.24 71.99 83.81 90.05 87.08 - 98.11 117.89 -/ - 5 7 7 1 72.05 62.41 57.09 55.16 55.71 - 63.18 75.43 76.17 80.57 93.81 - 107.96 134.67 -/ - 5 7 8 1 61.82 50.68 51.35 56.47 70.52 - 96.01 134.14 174.94 196.26 264.33 - 339.28 481.77 -/ - 5 7 9 1 55.62 49.84 59.69 74.19 108.13 - 163.35 242.44 329.15 375.84 531.09 - 711.77 1074.85 -/ - 5 8 1 1 79.41 77.95 76.90 76.44 76.31 - 77.07 79.12 82.11 83.95 94.29 - 105.11 127.63 -/ - 5 8 2 1 79.31 77.63 76.49 75.97 75.81 - 76.56 78.59 81.58 83.42 94.12 - 105.14 127.94 -/ - 5 8 3 1 78.77 76.31 74.93 74.05 73.48 - 74.19 76.30 79.94 82.00 93.51 - 105.50 129.67 -/ - 5 8 4 1 78.22 75.47 73.98 72.83 71.66 - 72.11 75.38 79.67 82.29 93.27 - 106.17 131.67 -/ - 5 8 5 1 76.08 73.09 70.13 67.99 65.78 - 65.77 69.47 76.34 80.77 97.09 - 113.95 146.30 -/ - 5 8 6 1 75.63 71.72 68.02 65.54 63.32 - 63.75 68.61 77.46 82.79 101.78 - 118.79 150.92 -/ - 5 8 7 1 75.15 69.84 65.33 62.61 60.65 - 61.94 69.32 80.37 86.94 102.18 - 120.46 155.59 -/ - 5 8 8 1 69.53 56.47 52.80 52.82 56.44 - 66.10 80.51 95.90 104.04 130.21 - 158.85 212.12 -/ - 5 8 9 1 64.37 51.74 51.79 54.42 65.42 - 84.95 114.75 147.27 164.30 218.51 - 277.87 389.69 -/ - 5 9 1 1 80.76 80.70 80.52 80.49 80.76 - 81.78 84.10 87.42 89.45 97.01 - 106.75 127.80 -/ - 5 9 2 1 80.76 80.70 80.52 80.49 80.76 - 81.78 84.10 87.42 89.45 97.01 - 106.75 127.80 -/ - 5 9 3 1 80.76 80.70 80.52 80.49 80.76 - 81.78 84.10 87.42 89.45 97.01 - 106.75 127.80 -/ - 5 9 4 1 80.76 80.70 80.52 80.49 80.76 - 81.78 84.10 87.42 89.45 97.01 - 106.75 127.80 -/ - 5 9 5 1 80.76 80.70 80.52 80.49 80.76 - 81.78 84.10 87.42 89.45 97.01 - 106.75 127.80 -/ - 5 9 6 1 80.76 80.70 80.52 80.49 80.76 - 81.78 84.10 87.42 89.45 97.01 - 106.75 127.80 -/ - 5 9 7 1 80.76 80.70 80.52 80.49 80.76 - 81.78 84.10 87.42 89.45 97.01 - 106.75 127.80 -/ - 5 9 8 1 80.76 80.70 80.52 80.49 80.76 - 81.78 84.10 87.42 89.45 97.01 - 106.75 127.80 -/ - 5 9 9 1 80.76 80.70 80.52 80.49 80.76 - 81.78 84.10 87.42 89.45 97.01 - 106.75 127.80 -/ - 6 1 1 1 80.30 78.05 75.67 73.82 71.68 - 71.77 75.63 82.80 87.09 101.98 - 117.30 145.68 -/ - 6 1 2 1 80.14 77.60 74.97 73.02 70.88 - 71.16 75.61 83.42 88.06 103.36 - 117.95 146.35 -/ - 6 1 3 1 79.59 75.58 72.05 69.82 67.95 - 69.36 77.07 87.17 91.48 106.58 - 123.68 151.98 -/ - 6 1 4 1 79.04 73.82 69.77 67.56 66.27 - 69.57 79.15 89.30 94.83 92.86 - 103.08 125.97 -/ - 6 1 5 1 76.10 66.89 63.19 62.64 65.10 - 72.29 84.01 97.21 104.38 127.80 - 153.74 202.31 -/ - 6 1 6 1 74.44 64.37 61.76 62.31 66.90 - 77.75 95.06 114.97 125.67 160.07 - 197.49 267.14 -/ - 6 1 7 1 72.31 62.15 60.99 62.88 71.63 - 88.59 115.76 146.00 161.90 212.54 - 267.75 372.67 -/ - 6 1 8 1 61.27 65.56 92.42 124.54 194.25 - 309.36 488.03 705.32 830.92 1275.03 - 1826.50 2173.60 -/ - 6 1 9 1 58.12 91.03 156.07 226.58 383.71 - 673.61 1181.41 1832.14 2166.12 2192.42 - 2213.47 2268.25 -/ - 6 2 1 1 81.02 78.82 76.50 74.70 72.58 - 72.57 76.25 82.93 87.05 101.58 - 116.53 145.58 -/ - 6 2 2 1 80.80 78.40 75.83 73.91 71.76 - 71.92 75.96 83.39 87.82 103.19 - 118.29 147.06 -/ - 6 2 3 1 80.27 76.47 72.98 70.74 68.76 - 69.89 76.88 86.90 91.97 105.55 - 122.78 154.60 -/ - 6 2 4 1 79.77 74.78 70.73 68.44 66.93 - 69.53 78.98 88.57 93.94 99.16 - 105.14 134.35 -/ - 6 2 5 1 77.02 67.89 63.86 63.04 65.31 - 71.34 82.03 93.82 100.19 121.09 - 144.40 188.28 -/ - 6 2 6 1 75.44 65.26 62.22 62.31 66.18 - 75.88 91.19 108.84 118.35 149.17 - 182.85 245.48 -/ - 6 2 7 1 73.38 62.84 61.18 62.57 70.03 - 84.89 108.84 135.83 150.11 195.58 - 245.05 338.08 -/ - 6 2 8 1 62.00 63.74 86.77 115.15 177.22 - 279.04 434.30 619.41 725.18 1099.89 - 1559.28 2459.04 -/ - 6 2 9 1 58.95 85.34 142.87 205.52 343.41 - 591.97 1021.33 1566.09 1883.38 2469.31 - 2442.09 2467.25 -/ - 6 3 1 1 81.81 79.62 77.40 75.67 73.58 - 73.49 77.02 83.19 87.13 101.25 - 115.80 144.27 -/ - 6 3 2 1 81.54 79.22 76.76 74.90 72.76 - 72.80 76.56 83.45 87.67 102.61 - 117.94 147.77 -/ - 6 3 3 1 80.97 77.41 74.01 71.78 69.70 - 70.58 76.77 86.21 91.85 105.06 - 121.02 151.64 -/ - 6 3 4 1 80.51 75.81 71.80 69.47 67.74 - 69.72 78.41 88.22 93.11 109.95 - 117.01 144.93 -/ - 6 3 5 1 77.98 69.02 64.68 63.54 65.01 - 71.54 80.22 90.75 96.36 114.75 - 135.45 174.59 -/ - 6 3 6 1 76.49 66.29 62.79 62.56 65.65 - 74.17 87.63 103.03 111.38 138.54 - 168.46 224.22 -/ - 6 3 7 1 74.53 63.69 61.53 62.67 68.58 - 81.48 102.25 125.91 138.54 178.87 - 222.72 304.60 -/ - 6 3 8 1 62.88 62.13 81.36 105.94 160.46 - 249.54 383.26 539.09 627.14 937.39 - 1314.77 2108.53 -/ - 6 3 9 1 59.49 79.90 129.87 184.84 304.51 - 515.19 871.54 1320.79 1580.84 2503.96 - 2878.10 2842.60 -/ - 6 4 1 1 82.67 80.44 78.36 76.73 74.72 - 74.60 77.99 83.63 87.38 101.01 - 115.12 142.95 -/ - 6 4 2 1 82.36 80.08 77.76 75.99 73.89 - 73.82 77.40 83.67 87.68 102.11 - 116.94 146.01 -/ - 6 4 3 1 81.68 78.40 75.15 72.96 70.80 - 71.42 76.79 85.64 90.90 106.34 - 121.23 152.10 -/ - 6 4 4 1 81.27 76.90 73.01 70.65 68.73 - 70.15 77.94 88.79 93.26 108.22 - 126.66 156.47 -/ - 6 4 5 1 78.97 70.31 65.69 64.23 65.01 - 71.66 78.59 88.02 92.94 108.90 - 127.00 161.42 -/ - 6 4 6 1 77.60 67.51 63.55 62.99 65.47 - 72.62 84.44 97.67 104.86 128.35 - 154.43 203.39 -/ - 6 4 7 1 75.75 64.73 62.02 62.66 67.29 - 78.41 96.08 116.39 127.30 162.46 - 200.77 272.03 -/ - 6 4 8 1 63.96 60.79 76.27 96.99 143.99 - 220.81 334.51 464.08 536.25 787.08 - 1092.98 1725.54 -/ - 6 4 9 1 60.07 74.74 117.13 164.53 266.93 - 443.16 733.31 1096.42 1304.51 2041.64 - 2944.85 3473.00 -/ - 6 5 1 1 84.65 82.19 80.49 79.15 77.40 - 77.22 80.73 85.16 88.58 100.87 - 114.10 140.40 -/ - 6 5 2 1 84.30 81.91 80.01 78.53 76.65 - 76.63 79.92 84.94 88.43 101.42 - 115.22 142.53 -/ - 6 5 3 1 83.20 80.56 77.78 75.79 73.59 - 73.70 77.64 84.95 89.44 105.43 - 121.76 153.64 -/ - 6 5 4 1 82.83 79.32 75.89 73.63 71.42 - 72.06 77.48 86.55 91.94 107.90 - 123.20 155.10 -/ - 6 5 5 1 81.08 73.50 68.55 66.44 65.97 - 71.98 82.91 83.61 87.50 99.39 - 112.54 137.64 -/ - 6 5 6 1 79.99 70.71 65.92 64.44 65.29 - 72.61 79.17 88.83 93.86 110.17 - 128.64 163.83 -/ - 6 5 7 1 78.47 67.67 63.64 63.15 65.75 - 73.27 85.57 99.35 106.83 131.28 - 158.42 209.36 -/ - 6 5 8 1 66.98 59.89 67.61 80.47 112.12 - 165.48 242.95 328.18 374.11 527.45 - 708.76 1080.44 -/ - 6 5 9 1 61.98 65.78 92.84 125.18 195.40 - 311.59 491.57 706.69 829.19 1256.15 - 1772.10 2835.01 -/ - 6 6 1 1 87.07 84.46 82.99 82.03 81.08 - 81.67 83.86 87.14 89.13 101.88 - 113.95 138.39 -/ - 6 6 2 1 86.78 84.07 82.59 81.53 80.30 - 80.75 83.03 86.42 88.47 101.91 - 114.40 139.52 -/ - 6 6 3 1 85.51 83.00 81.01 79.50 77.59 - 77.57 80.94 86.05 89.61 103.03 - 117.41 145.76 -/ - 6 6 4 1 84.71 82.14 79.56 77.70 75.52 - 75.46 79.14 85.63 89.87 105.40 - 121.24 152.50 -/ - 6 6 5 1 83.34 77.75 73.17 70.66 68.84 - 70.97 80.26 91.30 96.08 113.95 - 118.01 145.55 -/ - 6 6 6 1 82.62 75.39 70.33 67.97 66.95 - 71.66 82.16 94.39 97.52 97.56 - 109.20 131.10 -/ - 6 6 7 1 81.58 72.49 67.36 65.53 65.82 - 73.36 83.60 87.01 91.57 105.89 - 121.92 152.64 -/ - 6 6 8 1 71.91 61.05 61.92 67.76 83.72 - 113.38 158.13 206.58 232.13 314.54 - 406.48 584.21 -/ - 6 6 9 1 65.98 60.27 71.93 88.77 128.43 - 193.89 289.83 397.37 456.08 654.49 - 889.89 1363.82 -/ - 6 7 1 1 87.69 85.25 83.83 82.98 82.35 - 83.04 85.17 88.34 90.28 102.40 - 114.11 138.04 -/ - 6 7 2 1 87.46 84.83 83.38 82.44 81.57 - 82.21 84.39 87.65 89.63 102.33 - 114.43 138.94 -/ - 6 7 3 1 86.30 83.66 81.92 80.58 78.84 - 78.71 82.32 87.09 90.20 102.81 - 116.61 143.91 -/ - 6 7 4 1 85.44 82.91 80.64 78.97 76.91 - 76.79 80.30 86.00 89.88 104.33 - 119.53 149.41 -/ - 6 7 5 1 83.93 79.03 74.76 72.25 70.25 - 71.55 79.35 90.61 96.62 111.19 - 130.41 166.52 -/ - 6 7 6 1 83.31 76.88 71.98 69.48 67.98 - 71.14 81.91 92.54 98.46 102.12 - 106.17 125.22 -/ - 6 7 7 1 82.42 74.15 68.94 66.78 66.35 - 72.74 84.28 86.18 88.91 101.41 - 114.96 140.84 -/ - 6 7 8 1 73.61 61.81 61.95 65.46 77.97 - 101.50 138.06 178.00 199.03 266.51 - 341.08 483.08 -/ - 6 7 9 1 67.64 60.18 67.87 80.79 112.59 - 166.31 244.49 330.71 377.23 532.06 - 712.54 1075.32 -/ - 6 8 1 1 89.57 88.42 87.54 87.15 87.08 - 87.86 89.96 93.06 94.95 104.75 - 115.32 137.57 -/ - 6 8 2 1 89.48 88.17 87.19 86.76 86.66 - 87.43 89.52 92.56 94.43 104.61 - 115.34 137.85 -/ - 6 8 3 1 89.05 86.89 85.57 84.91 84.66 - 85.39 87.46 90.53 92.41 104.06 - 115.64 139.39 -/ - 6 8 4 1 88.61 85.89 84.45 83.56 82.85 - 83.56 85.73 88.98 90.95 103.80 - 116.18 141.14 -/ - 6 8 5 1 86.28 83.55 81.06 79.27 77.12 - 77.01 80.64 86.79 90.95 106.51 - 122.62 154.14 -/ - 6 8 6 1 85.56 82.39 79.20 77.05 74.72 - 74.93 79.17 87.32 92.33 110.39 - 128.39 162.19 -/ - 6 8 7 1 85.13 80.80 76.83 74.37 72.17 - 72.96 79.25 89.56 95.72 113.57 - 128.35 163.90 -/ - 6 8 8 1 80.50 68.43 64.15 63.67 66.60 - 74.75 88.18 102.64 110.34 135.38 - 163.18 215.60 -/ - 6 8 9 1 76.03 63.14 61.87 63.99 73.61 - 91.53 119.61 151.06 167.73 221.19 - 280.09 391.46 -/ - 6 9 1 1 90.78 90.71 90.53 90.50 90.77 - 91.79 94.11 97.43 99.46 107.02 - 116.75 137.79 -/ - 6 9 2 1 90.78 90.71 90.53 90.50 90.77 - 91.79 94.11 97.43 99.46 107.02 - 116.75 137.79 -/ - 6 9 3 1 90.78 90.71 90.53 90.50 90.77 - 91.79 94.11 97.43 99.46 107.02 - 116.75 137.79 -/ - 6 9 4 1 90.78 90.71 90.53 90.50 90.77 - 91.79 94.11 97.43 99.46 107.02 - 116.75 137.79 -/ - 6 9 5 1 90.78 90.71 90.53 90.50 90.77 - 91.79 94.11 97.43 99.46 107.02 - 116.75 137.79 -/ - 6 9 6 1 90.78 90.71 90.53 90.50 90.77 - 91.79 94.11 97.43 99.46 107.02 - 116.75 137.79 -/ - 6 9 7 1 90.78 90.71 90.53 90.50 90.77 - 91.79 94.11 97.43 99.46 107.02 - 116.75 137.79 -/ - 6 9 8 1 90.78 90.71 90.53 90.50 90.77 - 91.79 94.11 97.43 99.46 107.02 - 116.75 137.79 -/ - 6 9 9 1 90.78 90.71 90.53 90.50 90.77 - 91.79 94.11 97.43 99.46 107.02 - 116.75 137.79 -/ - 7 1 1 1 90.39 88.43 86.52 85.00 83.00 - 82.58 86.17 92.86 96.85 110.76 - 125.39 154.08 -/ - 7 1 2 1 90.07 88.05 85.90 84.25 82.18 - 81.84 86.08 93.23 97.54 112.32 - 127.85 158.08 -/ - 7 1 3 1 89.45 86.30 83.25 81.23 79.25 - 79.71 86.83 96.65 102.32 114.97 - 132.08 164.05 -/ - 7 1 4 1 89.01 84.77 81.13 79.01 77.41 - 79.65 88.86 98.33 103.53 104.53 - 112.57 144.60 -/ - 7 1 5 1 86.55 78.35 74.40 73.49 75.58 - 81.50 92.25 104.53 111.26 133.56 - 158.73 206.53 -/ - 7 1 6 1 85.13 75.79 72.68 72.70 76.45 - 86.20 102.16 120.92 131.13 164.51 - 201.28 270.33 -/ - 7 1 7 1 83.27 73.37 71.57 72.91 80.39 - 95.82 121.33 150.48 166.00 215.83 - 270.54 375.02 -/ - 7 1 8 1 72.51 74.29 98.55 129.07 197.14 - 311.26 489.37 706.28 831.84 1275.63 - 1826.86 2173.63 -/ - 7 1 9 1 69.00 97.16 159.54 228.98 385.23 - 674.53 1181.97 1832.41 2166.27 2192.43 - 2213.29 2172.16 -/ - 7 2 1 1 91.21 89.15 87.30 85.83 83.88 - 83.47 86.69 93.19 97.03 110.60 - 124.88 153.05 -/ - 7 2 2 1 90.84 88.80 86.71 85.10 83.06 - 82.65 86.74 93.39 97.52 111.93 - 127.05 156.67 -/ - 7 2 3 1 90.12 87.13 84.13 82.12 80.08 - 80.33 86.80 96.10 101.73 115.10 - 131.25 162.59 -/ - 7 2 4 1 89.71 85.67 82.05 79.90 78.14 - 79.26 88.40 98.19 102.85 117.86 - 123.84 153.71 -/ - 7 2 5 1 87.42 79.34 75.14 73.97 75.36 - 80.77 90.54 101.51 107.47 127.29 - 149.84 192.87 -/ - 7 2 6 1 86.07 76.72 73.22 72.93 75.99 - 84.59 98.69 115.22 124.28 153.99 - 186.99 248.97 -/ - 7 2 7 1 84.28 74.15 71.87 72.97 79.03 - 92.53 114.88 140.72 154.58 199.19 - 248.11 340.65 -/ - 7 2 8 1 73.33 72.77 93.34 120.08 180.41 - 281.15 435.78 620.51 726.13 1100.61 - 1559.76 2459.19 -/ - 7 2 9 1 69.84 91.92 146.70 208.17 345.09 - 593.02 1022.00 1566.47 1883.64 2469.27 - 2442.51 2468.08 -/ - 7 3 1 1 92.09 89.91 88.14 86.74 84.86 - 84.52 87.23 93.65 97.34 110.53 - 124.41 152.02 -/ - 7 3 2 1 91.69 89.58 87.58 86.04 84.05 - 83.62 87.44 93.67 97.62 111.61 - 126.28 155.24 -/ - 7 3 3 1 90.80 88.01 85.10 83.13 81.03 - 81.43 86.86 95.65 100.93 116.07 - 131.73 163.44 -/ - 7 3 4 1 90.42 86.63 83.08 80.92 79.01 - 79.79 88.03 98.92 103.42 118.17 - 135.09 162.89 -/ - 7 3 5 1 88.31 80.46 76.03 74.60 75.34 - 80.22 89.00 98.79 104.04 121.42 - 141.38 179.63 -/ - 7 3 6 1 87.06 77.79 73.91 73.31 75.80 - 83.14 95.54 109.90 117.79 143.83 - 173.01 228.06 -/ - 7 3 7 1 85.36 75.08 72.33 73.09 77.83 - 89.53 108.79 131.27 143.45 182.85 - 226.12 307.42 -/ - 7 3 8 1 74.30 71.47 88.41 111.33 164.02 - 251.89 384.91 540.37 628.25 938.24 - 1315.37 2108.81 -/ - 7 3 9 1 70.39 86.94 134.12 187.80 306.38 - 516.41 872.34 1321.29 1581.21 2504.03 - 2877.89 2843.40 -/ - 7 4 1 1 93.04 90.69 89.03 87.73 85.94 - 85.74 88.36 93.26 97.81 110.57 - 124.02 151.01 -/ - 7 4 2 1 92.62 90.38 88.51 87.07 85.16 - 84.78 87.89 94.12 97.88 111.40 - 125.58 153.80 -/ - 7 4 3 1 91.49 88.94 86.16 84.25 82.12 - 82.36 87.05 95.30 100.23 116.87 - 132.76 164.12 -/ - 7 4 4 1 91.15 87.64 84.22 82.08 80.05 - 80.49 87.75 97.84 103.96 116.74 - 134.40 167.57 -/ - 7 4 5 1 89.24 81.71 77.11 75.41 75.65 - 79.93 87.66 96.42 101.02 116.09 - 133.49 167.01 -/ - 7 4 6 1 88.09 79.03 74.78 73.85 75.97 - 81.87 92.74 105.06 111.81 134.20 - 159.50 207.68 -/ - 7 4 7 1 86.50 76.20 72.94 72.98 76.84 - 86.85 103.16 122.34 132.77 166.90 - 204.58 275.20 -/ - 7 4 8 1 75.46 70.52 83.88 102.93 147.99 - 223.48 336.38 465.54 537.57 788.08 - 1093.73 1725.98 -/ - 7 4 9 1 71.11 82.29 121.89 167.88 269.05 - 444.55 734.24 1097.05 1305.03 2041.85 - 2944.84 3473.79 -/ - 7 5 1 1 95.15 92.47 90.99 89.93 88.51 - 88.87 91.23 94.75 96.87 111.04 - 123.60 149.17 -/ - 7 5 2 1 94.76 92.11 90.57 89.39 87.74 - 87.85 90.35 94.04 98.97 111.41 - 124.53 151.06 -/ - 7 5 3 1 93.28 90.95 88.62 86.94 84.85 - 84.41 88.55 95.12 99.35 114.45 - 130.15 161.19 -/ - 7 5 4 1 92.65 89.88 86.91 84.93 82.75 - 83.01 87.77 96.24 101.32 118.59 - 134.99 167.44 -/ - 7 5 5 1 91.20 84.74 80.04 77.87 76.92 - 81.73 91.91 98.82 96.40 107.60 - 120.19 144.49 -/ - 7 5 6 1 90.29 82.17 77.36 75.65 75.93 - 80.31 88.24 97.23 101.95 117.36 - 135.12 169.42 -/ - 7 5 7 1 89.01 79.23 74.88 74.00 76.39 - 82.48 93.81 106.67 113.70 137.05 - 163.41 213.58 -/ - 7 5 8 1 78.58 70.43 76.35 87.85 117.38 - 169.09 245.52 330.19 375.92 528.87 - 709.83 1081.26 -/ - 7 5 9 1 73.34 74.52 98.97 129.72 198.30 - 313.51 492.90 707.62 830.07 1256.72 - 1772.43 2835.03 -/ - 7 6 1 1 97.38 95.04 93.60 92.83 92.32 - 93.03 95.16 98.34 100.29 112.37 - 123.93 147.86 -/ - 7 6 2 1 97.15 94.55 93.09 92.24 91.49 - 92.18 94.37 97.63 99.61 112.35 - 124.30 148.86 -/ - 7 6 3 1 95.96 93.19 91.55 90.33 88.63 - 88.67 91.24 95.00 100.23 113.09 - 126.79 154.40 -/ - 7 6 4 1 94.95 92.45 90.29 88.74 86.73 - 86.24 90.24 96.09 100.10 114.83 - 130.05 160.51 -/ - 7 6 5 1 93.29 88.65 84.52 82.17 80.15 - 81.43 89.89 101.68 106.88 122.28 - 136.43 165.40 -/ - 7 6 6 1 92.69 86.56 81.82 79.48 78.07 - 81.55 92.63 103.32 109.39 106.22 - 117.39 138.56 -/ - 7 6 7 1 91.83 83.91 78.88 76.87 76.58 - 83.43 95.11 95.78 100.07 113.60 - 129.01 158.88 -/ - 7 6 8 1 83.37 71.99 72.13 76.76 91.16 - 118.87 162.15 209.77 235.05 316.87 - 408.43 585.75 -/ - 7 6 9 1 77.64 70.51 80.11 95.36 132.97 - 196.96 292.00 399.06 457.61 655.59 - 890.80 1364.39 -/ - 7 7 1 1 97.95 95.90 94.51 93.84 93.54 - 94.25 96.35 99.48 101.41 112.90 - 124.18 147.66 -/ - 7 7 2 1 97.76 95.41 93.97 93.23 92.78 - 93.50 95.63 98.80 100.74 112.82 - 124.44 148.46 -/ - 7 7 3 1 96.78 93.83 92.37 91.30 89.83 - 90.23 92.64 96.20 98.71 113.05 - 126.23 152.86 -/ - 7 7 4 1 95.81 93.16 91.27 89.89 88.03 - 87.74 91.54 96.16 100.36 114.18 - 128.68 157.79 -/ - 7 7 5 1 93.84 89.80 85.99 83.71 81.52 - 82.36 89.23 99.79 106.18 119.91 - 138.43 173.60 -/ - 7 7 6 1 93.33 87.91 83.41 81.01 79.22 - 81.32 91.24 102.09 107.38 120.44 - 114.83 141.66 -/ - 7 7 7 1 92.59 85.46 80.47 78.23 77.31 - 82.46 93.24 103.68 97.81 109.64 - 122.64 147.72 -/ - 7 7 8 1 84.96 72.92 72.45 74.89 86.07 - 107.81 142.74 181.73 202.44 269.25 - 343.39 484.93 -/ - 7 7 9 1 79.33 70.77 76.61 88.18 117.85 - 169.92 247.06 332.73 379.06 533.48 - 713.59 1076.12 -/ - 7 8 1 1 99.67 98.76 98.00 97.66 97.64 - 98.44 100.56 103.67 105.59 115.10 - 125.46 147.52 -/ - 7 8 2 1 99.60 98.54 97.70 97.33 97.27 - 98.07 100.18 103.30 105.22 114.98 - 125.49 147.77 -/ - 7 8 3 1 99.24 97.47 96.25 95.72 95.54 - 96.30 98.37 101.42 103.29 114.50 - 125.75 149.17 -/ - 7 8 4 1 98.87 96.42 94.99 94.28 93.93 - 94.67 96.79 99.94 101.87 114.24 - 126.21 150.75 -/ - 7 8 5 1 96.65 93.83 91.72 90.22 88.25 - 88.15 91.79 97.35 101.32 116.24 - 131.66 162.42 -/ - 7 8 6 1 95.66 92.84 90.07 88.20 85.95 - 85.90 89.95 97.36 102.12 119.36 - 136.75 171.16 -/ - 7 8 7 1 95.01 91.45 87.94 85.74 83.43 - 83.87 89.40 99.10 104.94 124.65 - 139.74 175.34 -/ - 7 8 8 1 91.13 80.07 75.43 74.54 77.17 - 84.62 96.37 110.02 117.32 141.29 - 168.27 219.82 -/ - 7 8 9 1 87.24 74.48 72.46 74.08 82.30 - 98.83 125.29 155.60 171.88 224.53 - 282.92 393.76 -/ - 7 9 1 1 100.80 100.72 100.54 100.50 100.77 - 101.80 104.11 107.44 109.47 117.02 - 126.75 147.79 -/ - 7 9 2 1 100.80 100.72 100.54 100.50 100.77 - 101.80 104.11 107.44 109.47 117.02 - 126.75 147.79 -/ - 7 9 3 1 100.80 100.72 100.54 100.50 100.77 - 101.80 104.11 107.44 109.47 117.02 - 126.75 147.79 -/ - 7 9 4 1 100.80 100.72 100.54 100.50 100.77 - 101.80 104.11 107.44 109.47 117.02 - 126.75 147.79 -/ - 7 9 5 1 100.80 100.72 100.54 100.50 100.77 - 101.80 104.11 107.44 109.47 117.02 - 126.75 147.79 -/ - 7 9 6 1 100.80 100.72 100.54 100.50 100.77 - 101.80 104.11 107.44 109.47 117.02 - 126.75 147.79 -/ - 7 9 7 1 100.80 100.72 100.54 100.50 100.77 - 101.80 104.11 107.44 109.47 117.02 - 126.75 147.79 -/ - 7 9 8 1 100.80 100.72 100.54 100.50 100.77 - 101.80 104.11 107.44 109.47 117.02 - 126.75 147.79 -/ - 7 9 9 1 100.80 100.72 100.54 100.50 100.77 - 101.80 104.11 107.44 109.47 117.02 - 126.75 147.79 -/ - -WLIFT FIELD 10:19 5 MAR 90 -'* ' 2000.00000 'OIL' 0 .50000000 1* / -/ - - diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/WCONHIST/WCONHIST1 b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/WCONHIST/WCONHIST1 deleted file mode 100644 index 39f515ddd9..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/WCONHIST/WCONHIST1 +++ /dev/null @@ -1,14 +0,0 @@ -WCONHIST - 'OP_1' 'OPEN' 'ORAT' 4000.000 4.000 1.46402E+006 5* / - 'OP_2' 'OPEN' 'ORAT' 7998.000 2.000 1461075.000 5* / - 'OP_3' 'OPEN' 'ORAT' 7999.000 1.000 1471824.000 1 0.25 0.25 0.25 1* / -/ - - - - -WCONHIST - 'OP_1_B' 'OPEN' 'ORAT' 2000.000 2.000 1.46402E+006 5* / - 'OP_2_B' 'SHUT' 'ORAT' 2998.000 2.000 1461075.000 5* / - 'OP_3_B' 'OPEN' 'GRAT' 2999.000 1.000 1471824.000 1 0.25 0.25 0.25 1* / -/ diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/WellWithWildcards/WCONINJE1 b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/WellWithWildcards/WCONINJE1 deleted file mode 100644 index c3fe462acd..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/WellWithWildcards/WCONINJE1 +++ /dev/null @@ -1,26 +0,0 @@ -START -10 MAI 2007 / - - -SCHEDULE - -WELSPECS --- Well specification data -'PROD1' 'P' 11 3 9110 'OIL' / -'INJE2' 'I' 24 25 9110 'WATER' / -'INJE3' 'I' 24 25 9110 'WATER' / -'PROD4' 'P' 11 3 9110 'OIL' / -'INJX5' 'I' 10 4 9110 'WATER' / -/ - -WCONINJE -'INJE2' 'WATER' 'OPEN' 'RATE' 1000 4* 1000 / -'INJX5' 'WATER' 'OPEN' 'RATE' 2000 4* 1000 / -/ - -TSTEP - 10 / - -WCONINJE -'INJE*' 'WATER' 'OPEN' 'RATE' 1500 4* 1000 / -/ diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/WellWithWildcards/WCONPROD1 b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/WellWithWildcards/WCONPROD1 deleted file mode 100644 index 32262c7959..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/WellWithWildcards/WCONPROD1 +++ /dev/null @@ -1,26 +0,0 @@ -START -10 MAI 2007 / - - -SCHEDULE - -WELSPECS --- Well specification data -'INJE1' 'I' 24 25 9110 'WATER' / -'PROD2' 'P' 5 1 9110 'OIL' / -'PROD3' 'P' 8 2 9110 'OIL' / -'PROD4' 'P' 11 3 9110 'OIL' / -'PROX5' 'P' 10 4 9110 'OIL' / -/ - -WCONPROD -'PROD2' 'OPEN' 'ORAT' 1000 4* 1000 / -'PROX5' 'OPEN' 'ORAT' 2000 4* 1000 / -/ - -TSTEP - 10 / - -WCONPROD -'PROD*' 'OPEN' 'ORAT' 1500 4* 1000 / -/ diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/bpr.data b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/bpr.data deleted file mode 100644 index 10d8bb7e25..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/bpr.data +++ /dev/null @@ -1,8 +0,0 @@ -SUMMARY - --- Kommentar -BPR -1 2 3 / --Snasent -4 5 6 / -/ - diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/include path/readthis.sch b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/include path/readthis.sch deleted file mode 100644 index c8e25f1ec3..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/include path/readthis.sch +++ /dev/null @@ -1,9 +0,0 @@ -GRUPTREE - 'WI' 'FIELD' / - 'OP' 'FIELD' / -/ - -WHISTCTL - 'RESV' 1* / - -METRIC diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/mini.data b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/mini.data deleted file mode 100644 index 425f7dd025..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/mini.data +++ /dev/null @@ -1,3 +0,0 @@ ---Use saturation table end-point scaling -ENDSCALE - 'NODIR' 'REVERS' 1 20 / diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/small.data b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/small.data deleted file mode 100644 index d824750cfc..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/small.data +++ /dev/null @@ -1,17 +0,0 @@ --- Dette er en supertest - OK -OIL - --- Saa bare en - OK ---INCLUDE --- 'include path/readthis.sch' / ----- Saa kommer en for lang en, skal bli "trunkert", slik at keywordet blir ABCXYZFF - OK - -GRIDUNIT Tull kommer her --- Saa kommer det data -METRES / - --- Og en med tall - OK - - -RADFIN4 - 'NAME' 213 123 123 123 7 7 18 18 18 18 / \ No newline at end of file diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/someobscureelements.data b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/someobscureelements.data deleted file mode 100644 index 1af06826d5..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/someobscureelements.data +++ /dev/null @@ -1,15 +0,0 @@ --- Comment -OIL - -GRIDUNIT -METRES / - -GRUDINT -- A wrong, or unknown keyword - "text" 3 5 / - 3 3 3 3 3 3 / -/ - - - -RADFIN4 - 'NAME' 213 123 123 123 7 7 18 18 18 18 / diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/truncated_records.data b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/truncated_records.data deleted file mode 100644 index 781d86d631..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/truncated_records.data +++ /dev/null @@ -1,10 +0,0 @@ --- Comment -OIL - -RADFIN4 - 'NAME' 213 123 123 123 7 7 18 18 18 18 / - -RADFIN4 - 'NAME' 213 123 123 123 7 7 18 18 18 / - - diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/udq.data b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/udq.data deleted file mode 100644 index e7365e95c3..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/udq.data +++ /dev/null @@ -1,718 +0,0 @@ -const std::string deck_string = R"( -RUNSPEC - - -TITLE - 'Generic' 'Reservoir' - -NOECHO - - -DIMENS - 3 5 4 / - - -START - 22 'AUG' 2018 / - - -OIL - - -GAS - - -WATER - - -DISGAS - - -METRIC - - -TABDIMS - 1 1 130 24 1 20 / - - -EQLDIMS - 2 100 20 / - - -WELLDIMS - 230 120 50 80 / - - -UNIFIN - - -UNIFOUT - - -UDQDIMS - 50 25 0 50 50 0 0 50 0 20 / - - -UDADIMS - 10 1* 10 / - - -GRID - - -NOECHO - - -INIT - - -GRIDFILE - 0 1 / - - -MAPAXES - 0 100 0 0 100 0 / - - -NOECHO - - -SPECGRID - 3 5 4 1 'F' / - - -COORD - 2000 2000 2000 1999.5638 2000 2039.9619 2199.8096 2000 2008.7239 2199.3735 2000 2048.6858 2399.6193 2000 2017.4478 2399.1831 - 2000 2057.4097 2599.4289 2000 2026.1716 2598.9927 2000 2066.1336 2000 2200 2000 1999.5638 2200 2039.9619 2199.8096 2200 - 2008.7239 2199.3735 2200 2048.6858 2399.6193 2200 2017.4478 2399.1831 2200 2057.4097 2599.4289 2200 2026.1716 2598.9927 2200 2066.1336 - 2000 2400 2000 1999.5638 2400 2039.9619 2199.8096 2400 2008.7239 2199.3735 2400 2048.6858 2399.6193 2400 2017.4478 2399.1831 - 2400 2057.4097 2599.4289 2400 2026.1716 2598.9927 2400 2066.1336 2000 2600 2000 1999.5638 2600 2039.9619 2199.8096 2600 - 2008.7239 2199.3735 2600 2048.6858 2399.6193 2600 2017.4478 2399.1831 2600 2057.4097 2599.4289 2600 2026.1716 2598.9927 2600 2066.1336 - 2000 2800 2000 1999.5638 2800 2039.9619 2199.8096 2800 2008.7239 2199.3735 2800 2048.6858 2399.6193 2800 2017.4478 2399.1831 - 2800 2057.4097 2599.4289 2800 2026.1716 2598.9927 2800 2066.1336 2000 3000 2000 1999.5638 3000 2039.9619 2199.8096 3000 - 2008.7239 2199.3735 3000 2048.6858 2399.6193 3000 2017.4478 2399.1831 3000 2057.4097 2599.4289 3000 2026.1716 2598.9927 3000 2066.1336 / - - -ZCORN - 2000 2008.7239 2008.7239 2017.4478 2017.4478 2026.1716 2000 2008.7239 2008.7239 2017.4478 2017.4478 2026.1716 2000 2008.7239 2008.7239 2017.4478 - 2017.4478 2026.1716 2000 2008.7239 2008.7239 2017.4478 2017.4478 2026.1716 2000 2008.7239 2008.7239 2017.4478 2017.4478 2026.1716 2000 2008.7239 - 2008.7239 2017.4478 2017.4478 2026.1716 2000 2008.7239 2008.7239 2017.4478 2017.4478 2026.1716 2000 2008.7239 2008.7239 2017.4478 2017.4478 2026.1716 - 2000 2008.7239 2008.7239 2017.4478 2017.4478 2026.1716 2000 2008.7239 2008.7239 2017.4478 2017.4478 2026.1716 2009.9905 2018.7144 2018.7144 2027.4382 - 2027.4382 2036.1621 2009.9905 2018.7144 2018.7144 2027.4382 2027.4382 2036.1621 2009.9905 2018.7144 2018.7144 2027.4382 2027.4382 2036.1621 2009.9905 2018.7144 - 2018.7144 2027.4382 2027.4382 2036.1621 2009.9905 2018.7144 2018.7144 2027.4382 2027.4382 2036.1621 2009.9905 2018.7144 2018.7144 2027.4382 2027.4382 2036.1621 - 2009.9905 2018.7144 2018.7144 2027.4382 2027.4382 2036.1621 2009.9905 2018.7144 2018.7144 2027.4382 2027.4382 2036.1621 2009.9905 2018.7144 2018.7144 2027.4382 - 2027.4382 2036.1621 2009.9905 2018.7144 2018.7144 2027.4382 2027.4382 2036.1621 2009.9905 2018.7144 2018.7144 2027.4382 2027.4382 2036.1621 2009.9905 2018.7144 - 2018.7144 2027.4382 2027.4382 2036.1621 2009.9905 2018.7144 2018.7144 2027.4382 2027.4382 2036.1621 2009.9905 2018.7144 2018.7144 2027.4382 2027.4382 2036.1621 - 2009.9905 2018.7144 2018.7144 2027.4382 2027.4382 2036.1621 2009.9905 2018.7144 2018.7144 2027.4382 2027.4382 2036.1621 2009.9905 2018.7144 2018.7144 2027.4382 - 2027.4382 2036.1621 2009.9905 2018.7144 2018.7144 2027.4382 2027.4382 2036.1621 2009.9905 2018.7144 2018.7144 2027.4382 2027.4382 2036.1621 2009.9905 2018.7144 - 2018.7144 2027.4382 2027.4382 2036.1621 2019.981 2028.7048 2028.7048 2037.4287 2037.4287 2046.1526 2019.981 2028.7048 2028.7048 2037.4287 2037.4287 2046.1526 - 2019.981 2028.7048 2028.7048 2037.4287 2037.4287 2046.1526 2019.981 2028.7048 2028.7048 2037.4287 2037.4287 2046.1526 2019.981 2028.7048 2028.7048 2037.4287 - 2037.4287 2046.1526 2019.981 2028.7048 2028.7048 2037.4287 2037.4287 2046.1526 2019.981 2028.7048 2028.7048 2037.4287 2037.4287 2046.1526 2019.981 2028.7048 - 2028.7048 2037.4287 2037.4287 2046.1526 2019.981 2028.7048 2028.7048 2037.4287 2037.4287 2046.1526 2019.981 2028.7048 2028.7048 2037.4287 2037.4287 2046.1526 - 2019.981 2028.7048 2028.7048 2037.4287 2037.4287 2046.1526 2019.981 2028.7048 2028.7048 2037.4287 2037.4287 2046.1526 2019.981 2028.7048 2028.7048 2037.4287 - 2037.4287 2046.1526 2019.981 2028.7048 2028.7048 2037.4287 2037.4287 2046.1526 2019.981 2028.7048 2028.7048 2037.4287 2037.4287 2046.1526 2019.981 2028.7048 - 2028.7048 2037.4287 2037.4287 2046.1526 2019.981 2028.7048 2028.7048 2037.4287 2037.4287 2046.1526 2019.981 2028.7048 2028.7048 2037.4287 2037.4287 2046.1526 - 2019.981 2028.7048 2028.7048 2037.4287 2037.4287 2046.1526 2019.981 2028.7048 2028.7048 2037.4287 2037.4287 2046.1526 2029.9714 2038.6953 2038.6953 2047.4192 - 2047.4192 2056.1431 2029.9714 2038.6953 2038.6953 2047.4192 2047.4192 2056.1431 2029.9714 2038.6953 2038.6953 2047.4192 2047.4192 2056.1431 2029.9714 2038.6953 - 2038.6953 2047.4192 2047.4192 2056.1431 2029.9714 2038.6953 2038.6953 2047.4192 2047.4192 2056.1431 2029.9714 2038.6953 2038.6953 2047.4192 2047.4192 2056.1431 - 2029.9714 2038.6953 2038.6953 2047.4192 2047.4192 2056.1431 2029.9714 2038.6953 2038.6953 2047.4192 2047.4192 2056.1431 2029.9714 2038.6953 2038.6953 2047.4192 - 2047.4192 2056.1431 2029.9714 2038.6953 2038.6953 2047.4192 2047.4192 2056.1431 2029.9714 2038.6953 2038.6953 2047.4192 2047.4192 2056.1431 2029.9714 2038.6953 - 2038.6953 2047.4192 2047.4192 2056.1431 2029.9714 2038.6953 2038.6953 2047.4192 2047.4192 2056.1431 2029.9714 2038.6953 2038.6953 2047.4192 2047.4192 2056.1431 - 2029.9714 2038.6953 2038.6953 2047.4192 2047.4192 2056.1431 2029.9714 2038.6953 2038.6953 2047.4192 2047.4192 2056.1431 2029.9714 2038.6953 2038.6953 2047.4192 - 2047.4192 2056.1431 2029.9714 2038.6953 2038.6953 2047.4192 2047.4192 2056.1431 2029.9714 2038.6953 2038.6953 2047.4192 2047.4192 2056.1431 2029.9714 2038.6953 - 2038.6953 2047.4192 2047.4192 2056.1431 2039.9619 2048.6858 2048.6858 2057.4097 2057.4097 2066.1336 2039.9619 2048.6858 2048.6858 2057.4097 2057.4097 2066.1336 - 2039.9619 2048.6858 2048.6858 2057.4097 2057.4097 2066.1336 2039.9619 2048.6858 2048.6858 2057.4097 2057.4097 2066.1336 2039.9619 2048.6858 2048.6858 2057.4097 - 2057.4097 2066.1336 2039.9619 2048.6858 2048.6858 2057.4097 2057.4097 2066.1336 2039.9619 2048.6858 2048.6858 2057.4097 2057.4097 2066.1336 2039.9619 2048.6858 - 2048.6858 2057.4097 2057.4097 2066.1336 2039.9619 2048.6858 2048.6858 2057.4097 2057.4097 2066.1336 2039.9619 2048.6858 2048.6858 2057.4097 2057.4097 2066.1336 / - - -PORO - 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.2 - 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.23 0.23 - 0.23 0.23 0.23 0.23 0.23 0.23 0.23 0.23 0.23 0.23 0.23 0.23 0.23 0.18 0.18 0.18 - 0.18 0.18 0.18 0.18 0.18 0.18 0.18 0.18 0.18 0.18 0.18 0.18 / - - -PERMX - 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 100 - 100 100 100 100 100 100 100 100 100 100 100 100 100 100 1000 1000 - 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 250 250 250 - 250 250 250 250 250 250 250 250 250 250 250 250 / - - -COPY - 'PERMX' 'PERMY' / - 'PERMX' 'PERMZ' / -/ - - -MULTIPLY - 'PERMZ' 0.1 / -/ - - -MULTZ - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 / - - -EDIT - - -PROPS - - -SGOF - 0 0 1 0 0.0183 0.001480314 0.8127534 0 0.0366 0.004696335 0.675857 0 0.0549 0.009371694 0.5622753 0 - 0.0732 0.01546379 0.4663578 0 0.0915 0.02298664 0.385133 0 0.1098 0.03197913 0.3164995 0 0.1281 0.04249268 0.2587408 0 - 0.1464 0.05458466 0.2103665 0 0.1647 0.06831379 0.1700565 0 0.183 0.08373629 0.1366388 0 0.2013 0.1009022 0.1090792 0 - 0.2196 0.1198516 0.08647139 0 0.2379 0.1406109 0.06802822 0 0.2562 0.1631885 0.05307051 0 0.2745 0.1875705 0.04101619 0 - 0.2928 0.2137163 0.03136912 0 0.3111 0.2415547 0.02370834 0 0.3294 0.2709792 0.01767817 0 0.3477 0.3018447 0.01297907 0 - 0.366 0.3339653 0.009359652 0 0.3843 0.3671116 0.006609586 0 0.4026 0.401011 0.00455345 0 0.4209 0.4353486 0.003045475 0 - 0.4392 0.4697695 0.001965044 0 0.4575 0.5038828 0.001212868 0 0.4758 0.5372664 0.0007077659 0 0.4941 0.5694721 0.000383946 0 - 0.5124 0.6000285 0.0001887263 0 0.5307 0.6284408 8.062741e-05 0 0.549 0.6541796 2.778023e-05 0 0.5673 0.676644 6.602397e-06 0 - 0.5856 0.6950468 7.048731e-07 0 0.61 0.71 0 0 0.6275 0.7825 0 0 0.645 0.855 0 0 - 0.6625 0.9275 0 0 0.68 1 0 0 / - - -SWOF - 0.32 0 1 0 0.3365 3.00925e-08 0.9804566 0 0.353 7.541952e-07 0.9391194 0 0.3695 5.01876e-06 0.8832853 0 - 0.386 1.941502e-05 0.8178788 0 0.4025 5.581854e-05 0.7471578 0 0.419 0.0001330574 0.674704 0 0.4355 0.0002787865 0.60333 0 - 0.452 0.0005316304 0.535068 0 0.4685 0.0009436502 0.4712431 0 0.485 0.001583182 0.412597 0 0.5015 0.002538082 0.3594268 0 - 0.518 0.00391938 0.3117147 0 0.5345 0.005865308 0.2692366 0 0.551 0.008545575 0.2316458 0 0.5675 0.01216566 0.1985336 0 - 0.584 0.01697073 0.169471 0 0.6005 0.0232485 0.1440352 0 0.617 0.03133019 0.1218258 0 0.6335 0.04158825 0.1024735 0 - 0.65 0.05442925 0.08564409 0 0.6665 0.07028023 0.0710386 0 0.683 0.08956673 0.05839253 0 0.6995 0.1126816 0.0474734 0 - 0.716 0.1399451 0.03807806 0 0.7325 0.1715593 0.03002991 0 0.749 0.2075632 0.02317622 0 0.7655 0.2478002 0.01738581 0 - 0.782 0.2919105 0.01254709 0 0.7985 0.3393688 0.008566921 0 0.815 0.3895919 0.005370427 0 0.8315 0.4421811 0.002903191 0 - 0.848 0.4975608 0.001139647 0 0.87 0.59168 0 0 0.8885714 0.6500114 0 0 0.9071429 0.7083429 0 0 - 0.9257143 0.7666743 0 0 0.9442857 0.8250057 0 0 0.9628571 0.8833371 0 0 0.9814286 0.9416686 0 0 - 1 1 0 0 / - - -PVDG - 20 0.061895 0.01299 40 0.030252 0.01383 60 0.019844 0.0145 80 0.014686 0.0152 100 0.011627 0.01596 120 - 0.009619 0.01682 140 0.008213 0.0178 160 0.007184 0.0189 197.66 0.00582 0.0216 231.13 0.005042 0.02477 261.31 0.004561 - 0.02844 288.87 0.004255 0.03272 314.34 0.004062 0.03783 338.2 0.003953 0.0441 360.83 0.003947 0.0521 382.58 0.003915 0.06273 - 403.6 0.003912 0.07723 423.77 0.003907 0.09631 / - - -PVTO - 19.6 20 1.12324 0.96519 55 1.11698 1.03237 90 1.11127 1.10051 125 1.10602 1.16942 160 1.10119 1.2389 - 195 1.09672 1.30876 230 1.09256 1.37884 265 1.08868 1.44899 300 1.08504 1.51908 335 1.08164 1.58903 370 - 1.07843 1.65876 / - 31.5 40 1.15981 0.85738 75 1.15288 0.91402 110 1.14657 0.97137 145 1.14079 1.02927 180 1.13546 1.08759 - 215 1.13053 1.14617 250 1.12595 1.20488 285 1.12168 1.2636 320 1.11768 1.32224 355 1.11394 1.38073 390 - 1.11042 1.43898 / - 42.4 60 1.191 0.7868 95 1.184 0.8364 130 1.177 0.8866 165 1.171 0.9371 200 1.165 0.988 - 235 1.16 1.039 270 1.155 1.0902 305 1.15 1.1413 340 1.146 1.1922 375 1.142 1.2431 410 - 1.138 1.2936 / - 53.4 80 1.222 0.7175 115 1.214 0.7608 150 1.206 0.8045 185 1.2 0.8485 220 1.194 0.8928 - 255 1.188 0.9371 290 1.183 0.9815 325 1.178 1.0258 360 1.173 1.07 395 1.169 1.1141 430 - 1.165 1.1579 / - 64.6 100 1.252 0.6544 135 1.244 0.6923 170 1.236 0.7305 205 1.229 0.7689 240 1.222 0.8075 - 275 1.216 0.8461 310 1.211 0.8847 345 1.205 0.9233 380 1.2 0.9618 415 1.196 1 450 - 1.191 1.0381 / - 76.3 120 1.284 0.5978 155 1.275 0.6312 190 1.266 0.6648 225 1.259 0.6985 260 1.252 0.7323 - 295 1.245 0.7661 330 1.239 0.7999 365 1.234 0.8337 400 1.229 0.8673 435 1.224 0.9007 470 - 1.219 0.934 / - 88.5 140 1.316 0.5477 175 1.307 0.5749 210 1.298 0.602 245 1.29 0.629 280 1.282 0.6559 - 315 1.276 0.6827 350 1.269 0.7095 385 1.263 0.7362 420 1.258 0.7629 455 1.253 0.7895 490 - 1.248 0.8161 / - 101.3 160 1.35 0.502 195 1.34 0.5227 230 1.331 0.5432 265 1.322 0.5635 300 1.314 0.5835 - 335 1.307 0.6034 370 1.3 0.6231 405 1.294 0.6426 440 1.288 0.662 475 1.283 0.6813 / - 114.7 180 1.385 0.4636 215 1.375 0.482 250 1.365 0.5003 285 1.356 0.5183 320 1.347 0.5362 - 355 1.34 0.5538 390 1.333 0.5712 425 1.326 0.5885 460 1.32 0.6055 495 1.314 0.6222 / - 128.9 200 1.422 0.429 235 1.411 0.4455 270 1.401 0.4618 305 1.391 0.4779 340 1.382 0.4938 - 375 1.374 0.5096 410 1.367 0.5252 445 1.36 0.5406 480 1.353 0.5558 / - 143.8 220 1.461 0.3977 255 1.449 0.4125 290 1.438 0.4271 325 1.428 0.4415 360 1.419 0.4558 - 395 1.41 0.4699 430 1.402 0.4839 465 1.395 0.4977 / - 159.5 240 1.502 0.3692 275 1.489 0.3825 310 1.478 0.3956 345 1.467 0.4086 380 1.458 0.4214 - 415 1.449 0.4341 450 1.44 0.4466 485 1.432 0.459 / - 184 268.79 1.565 0.3324 303.79 1.551 0.3438 338.79 1.539 0.3551 373.79 1.528 0.3663 408.79 1.517 0.3774 - 443.79 1.508 0.3883 478.79 1.499 0.3991 / - 226.3 306.18 1.679 0.2855 341.18 1.664 0.2949 376.18 1.65 0.3041 411.18 1.637 0.3132 446.18 1.625 0.3222 - 481.18 1.614 0.3311 / - 268.6 339.93 1.792 0.2517 374.93 1.775 0.2597 409.93 1.76 0.2675 444.93 1.746 0.2751 479.93 1.732 0.2827 / - 310.9 371.44 1.903 0.2265 406.44 1.885 0.2333 441.44 1.868 0.2401 476.44 1.853 0.2468 / - 353.3 401.66 2.013 0.2071 436.66 1.993 0.2132 471.66 1.975 0.2192 / -/ - - -PVTW - 344.83 1.0292 4.002e-05 0.36 0 / - - -ROCK - 383 4.12e-05 / - - -DENSITY - 842.3 1001.1 0.9 / - - -REGIONS - - -EQLNUM - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - 2 2 2 2 2 2 2 2 2 2 2 2 / - - -SOLUTION - - -EQUIL - 2030 382.4 2030 0 500 0 1 1 0 / - 2050 382.4 2050 0 500 0 1 1 0 / - - -RSVD - 1500 180 4000 180 / - 1500 180 4000 180 / - - -RPTRST - 'BASIC=2' 'PBPD' / - - -SUMMARY - - -FOPR - - -FOPRH - - -FGPR - - -FGPRH - - -FWPR - - -FWPRH - - -FWIR - - -FWIP - - -FOIP - - -FGIP - - -FWCT - - -FWCTH - - -FGOR - - -FGORH - - -FPR - - -RPR - / - - -ROIP - / - - -ROIPL - / - - -ROIPG - / - - -RGIP - / - - -RGIPL - / - - -RGIPG - / - - -RGPR - / - - -RGPT - / - - -GWIR - / - - -GVIR - / - - -GOPR - / - - -GWPR - / - - -GLPR - / - - -GLPR - / - - -GVPR - / - - -WOPR - / - - -WOPRH - / - - -WGPR - / - - -WGPRH - / - - -WWPR - / - - -WWPRH - / - - -WOPT - / - - -WWPT - / - - -WGPT - / - - -WOPTH - / - - -WWPTH - / - - -WGPTH - / - - -WWCT - / - - -WWCTH - / - - -WGOR - / - - -WGORH - / - - -WWIR - / - - -WWIRH - / - - -WGIR - / - - -WGIRH - / - - -WWIT - / - - -WWITH - / - - -WGIT - / - - -WGITH - / - - -WBHP - / - - -WTHP - / - - -WPI - / - - -WVPR - / - - -WBP - / - - -WBP4 - / - - -WBP9 - / - - -WMCTL - / - - -WLPR - / - - -TCPU - - -TCPUDAY - - -FMWIN - - -FMWPR - - -GMWPR - 'UPPER' 'LOWER' / - - -GMWIN - 'UPPER' 'LOWER' / - - -WUOPRL - 'OPL01' 'OPL02' 'OPU01' 'OPU02' / - - -WULPRL - 'OPL01' 'OPL02' 'OPU01' 'OPU02' / - - -WUOPRU - 'OPL01' 'OPL02' 'OPU01' 'OPU02' / - - -WULPRU - 'OPL01' 'OPL02' 'OPU01' 'OPU02' / - - -SCHEDULE - - -GRUPTREE - 'UPPER' 'TEST' / - 'LOWER' 'TEST' / -/ - - -WELSPECS - 'OPU01' 'UPPER' 1 2 2002 'OIL' 0 'STD' 'SHUT' 'YES' 0 'SEG' / - 'OPU02' 'UPPER' 1 4 2002 'OIL' 0 'STD' 'SHUT' 'YES' 0 'SEG' / - 'OPL01' 'LOWER' 1 2 2025 'OIL' 0 'STD' 'SHUT' 'YES' 0 'SEG' / - 'OPL02' 'LOWER' 1 4 2025 'OIL' 0 'STD' 'SHUT' 'YES' 0 'SEG' / -/ - - -WELSPECS - 'WIU01' 'UPPER' 3 3 2030 'WATER' 0 'STD' 'SHUT' 'YES' 0 'SEG' / - 'WIL01' 'LOWER' 3 3 2050 'WATER' 0 'STD' 'SHUT' 'YES' 0 'SEG' / -/ - - -COMPDAT - 'OPU01' 1 2 1 1 'OPEN' 0 1* 0.241 1* 2.5 0 'Z' / - 'OPU02' 1 4 1 1 'OPEN' 0 1* 0.241 1* 2.5 0 'Z' / - 'OPL01' 1 2 3 3 'OPEN' 0 1* 0.241 1* 2.5 0 'Z' / - 'OPL02' 1 4 3 3 'OPEN' 0 1* 0.241 1* 2.5 0 'Z' / - 'WIU01' 3 3 2 2 'OPEN' 0 1* 0.241 1* 2.5 0 'Z' / - 'WIL01' 3 3 4 4 'OPEN' 0 1* 0.241 1* 2.5 0 'Z' / -/ - - -WCONPROD - 'OPU*' 'SHUT' 'GRUP' 1500 2* 2500 1* 60 / - 'OPL*' 'SHUT' 'GRUP' 1500 2* 2500 1* 60 / -/ - - -WCONINJE - 'WIU*' 'WATER' 'SHUT' 'GRUP' 10500 1* 400 / - 'WIL*' 'WATER' 'SHUT' 'GRUP' 10500 1* 400 / -/ - -UDQ --- test ---oil & liquid capacities at GEFAC = 0.8995 -DEFINE WUOPRL (WOPR OPL01 - 150) * 0.90 / -DEFINE WULPRL (WLPR OPL01 - 200) * 0.90 / -DEFINE WUOPRU (WOPR OPU01 - 250) * 0.80 / -DEFINE WULPRU (WLPR OPU01 - 300) * 0.80 / --- units -UNITS WUOPRL SM3/DAY / -UNITS WULPRL SM3/DAY / -UNITS WUOPRU SM3/DAY / -UNITS WULPRU SM3/DAY / --- -/ - - -GCONPROD - 'TEST' 'LRAT' 6000 2* 6000 'RATE' 'NO' / - 'LOWER' 'FLD' 6000 2* 6000 'RATE' 'YES' 1* 'FORM' / - 'UPPER' 'FLD' 3000 2* 6000 'RATE' 'YES' 1* 'FORM' / -/ - - -GCONINJE - 'LOWER' 'WATER' 'VREP' 3* 1.2 / - 'UPPER' 'WATER' 'VREP' 3* 1.2 / -/ - - -GUIDERAT - 0 'OIL' 1 0.5 1 1 0 0 'YES' 0.5 / - - -WCONPROD - 'OPL02' 'OPEN' 'GRUP' 'WUOPRL' 2* 'WULPRL' 1* 60 / -/ - - -WCONPROD - 'OPU02' 'OPEN' 'GRUP' 'WUOPRU' 2* 'WULPRU' 1* 60 / -/ - - -DATES - 1 'SEP' 2018 / -/ - - -WELOPEN - 'OPL01' 'OPEN' / -/ - - -DATES - 1 'OCT' 2018 / -/ - - -WELOPEN - 'WIL01' 'OPEN' / -/ - - -DATES - 1 'NOV' 2018 / -/ - -WCONPROD - 'OPL02' 'OPEN' 'GRUP' 100 2* 200 1* 60 / -/ - -WELOPEN - 'OPL02' 'OPEN' / -/ - - -DATES - 1 'DEC' 2018 / -/ - - -WELOPEN - 'OPU01' 'OPEN' / -/ - - -DATES - 1 'JAN' 2019 / -/ - - -WELOPEN - 'OPU02' 'OPEN' / -/ - - -DATES - 1 'FEB' 2019 / -/ - - -WELOPEN - 'WIU01' 'OPEN' / -/ -DATES - 1 'MAR' 2019 / - 1 'APR' 2019 / - 1 'MAY' 2019 / - 1 'JUN' 2019 / - 1 'JUL' 2019 / - 1 'JAN' 2020 / -/ -)"; \ No newline at end of file diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/udq2.data b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/udq2.data deleted file mode 100644 index b1a5207b5e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/udq2.data +++ /dev/null @@ -1,318 +0,0 @@ -std::string deck_string = R"( -RUNSPEC - -TITLE -2 PRODUCERS AND INJECTORS, 2 WELL GROUPS AND ONE INTERMEDIATE GROUP LEVEL BELOW THE FIELD LEVEL - -DIMENS - 10 5 10 / - - -OIL - -WATER - -GAS - -DISGAS - -FIELD - -TABDIMS - 1 1 15 15 2 15 / - -EQLDIMS - 2 / - -WELLDIMS - 4 20 4 2 / - -UNIFIN -UNIFOUT - -FMTIN -FMTOUT --- Dimensions for used defined quantity facility --- max functions permitted in a quantity definition --- max arguments permitted in a quantity definition --- max user defined connection quantities --- max user defined field quantities --- max user defined group quantities --- max user defined region quantities --- max user defined segment quantities --- max user defined well quantities --- max user defined aquifer quantities --- max user defined block quantities --- whether new randon number generator seed computed for restart runs -UDQDIMS - 50 25 0 50 50 0 0 50 0 20 / - --- Dimensions for the user defined arguments facility --- number of keyword arguments in which UDQs replace numerical values --- ratained for back-compatibility --- total number of unique instances in which a UDQ is used in a keyword argument -UDADIMS - 10 1* 10 / - -START - 1 'JAN' 2015 / - --- RPTRUNSP - -GRID ========================================================= - ---NOGGF -BOX - 1 10 1 5 1 1 / - -TOPS -50*7000 / - -BOX -1 10 1 5 1 10 / - -DXV -10*100 / -DYV -5*100 / -DZV -2*20 100 7*20 / - -EQUALS --- 'DX' 100 / --- 'DY' 100 / - 'PERMX' 50 / - 'PERMZ' 5 / --- 'DZ' 20 / - 'PORO' 0.2 / --- 'TOPS' 7000 1 10 1 5 1 1 / - --'DZ' 100 1 10 1 5 3 3 / - 'PORO' 0.0 1 10 1 5 3 3 / - / - -COPY - PERMX PERMY / - / - -RPTGRID - -- Report Levels for Grid Section Data - -- - / - -PROPS ========================================================== - --- WATER RELATIVE PERMEABILITY AND CAPILLARY PRESSURE ARE TABULATED AS --- A FUNCTION OF WATER SATURATION. --- --- SWAT KRW PCOW -SWFN - - 0.12 0 0 - 1.0 0.00001 0 / - --- SIMILARLY FOR GAS --- --- SGAS KRG PCOG -SGFN - - 0 0 0 - 0.02 0 0 - 0.05 0.005 0 - 0.12 0.025 0 - 0.2 0.075 0 - 0.25 0.125 0 - 0.3 0.19 0 - 0.4 0.41 0 - 0.45 0.6 0 - 0.5 0.72 0 - 0.6 0.87 0 - 0.7 0.94 0 - 0.85 0.98 0 - 1.0 1.0 0 -/ - --- OIL RELATIVE PERMEABILITY IS TABULATED AGAINST OIL SATURATION --- FOR OIL-WATER AND OIL-GAS-CONNATE WATER CASES --- --- SOIL KROW KROG -SOF3 - - 0 0 0 - 0.18 0 0 - 0.28 0.0001 0.0001 - 0.38 0.001 0.001 - 0.43 0.01 0.01 - 0.48 0.021 0.021 - 0.58 0.09 0.09 - 0.63 0.2 0.2 - 0.68 0.35 0.35 - 0.76 0.7 0.7 - 0.83 0.98 0.98 - 0.86 0.997 0.997 - 0.879 1 1 - 0.88 1 1 / - - --- PVT PROPERTIES OF WATER --- --- REF. PRES. REF. FVF COMPRESSIBILITY REF VISCOSITY VISCOSIBILITY -PVTW - 4014.7 1.029 3.13D-6 0.31 0 / - --- ROCK COMPRESSIBILITY --- --- REF. PRES COMPRESSIBILITY -ROCK - 14.7 3.0D-6 / - --- SURFACE DENSITIES OF RESERVOIR FLUIDS --- --- OIL WATER GAS -DENSITY - 49.1 64.79 0.06054 / - --- PVT PROPERTIES OF DRY GAS (NO VAPOURISED OIL) --- WE WOULD USE PVTG TO SPECIFY THE PROPERTIES OF WET GAS --- --- PGAS BGAS VISGAS -PVDG - 14.7 166.666 0.008 - 264.7 12.093 0.0096 - 514.7 6.274 0.0112 - 1014.7 3.197 0.014 - 2014.7 1.614 0.0189 - 2514.7 1.294 0.0208 - 3014.7 1.080 0.0228 - 4014.7 0.811 0.0268 - 5014.7 0.649 0.0309 - 9014.7 0.386 0.047 / - --- PVT PROPERTIES OF LIVE OIL (WITH DISSOLVED GAS) --- WE WOULD USE PVDO TO SPECIFY THE PROPERTIES OF DEAD OIL --- --- FOR EACH VALUE OF RS THE SATURATION PRESSURE, FVF AND VISCOSITY --- ARE SPECIFIED. FOR RS=1.27 AND 1.618, THE FVF AND VISCOSITY OF --- UNDERSATURATED OIL ARE DEFINED AS A FUNCTION OF PRESSURE. DATA --- FOR UNDERSATURATED OIL MAY BE SUPPLIED FOR ANY RS, BUT MUST BE --- SUPPLIED FOR THE HIGHEST RS (1.618). --- --- RS POIL FVFO VISO -PVTO - 0.001 14.7 1.062 1.04 / - 0.0905 264.7 1.15 0.975 / - 0.18 514.7 1.207 0.91 / - 0.371 1014.7 1.295 0.83 / - 0.636 2014.7 1.435 0.695 / - 0.775 2514.7 1.5 0.641 / - 0.93 3014.7 1.565 0.594 / - 1.270 4014.7 1.695 0.51 - 5014.7 1.671 0.549 - 9014.7 1.579 0.74 / - 1.618 5014.7 1.827 0.449 - 9014.7 1.726 0.605 / -/ - - -RPTPROPS --- PROPS Reporting Options --- -/ - -REGIONS =========================================================== - - -FIPNUM - - 100*1 - 400*2 -/ - -EQLNUM - - 100*1 - 400*2 -/ - -RPTREGS - - / - -SOLUTION ============================================================ - -EQUIL - 7020.00 2700.00 7990.00 .00000 7020.00 .00000 0 0 5 / - 7200.00 3700.00 7300.00 .00000 7000.00 .00000 1 0 5 / - -RSVD 2 TABLES 3 NODES IN EACH FIELD 12:00 17 AUG 83 - 7000.0 1.0000 - 7990.0 1.0000 -/ - 7000.0 1.0000 - 7400.0 1.0000 -/ - -RPTRST --- Restart File Output Control --- -'BASIC=2' 'FLOWS' 'POT' 'PRES' / - - -SUMMARY =========================================================== - -FOPR - -WOPR - / - -FGPR - -FWPR - -FWIR - -FWCT - -FGOR - ---RUNSUM - -ALL - -MSUMLINS - -MSUMNEWT - -SEPARATE -SCHEDULE =========================================================== - -GRUPTREE - 'GRP1' 'FIELD' / - 'WGRP1' 'GRP1' / - 'WGRP2' 'GRP1' / -/ - -WELSPECS - 'PROD1' 'WGRP1' 1 5 7030 'OIL' 0.0 'STD' 'STOP' / - 'PROD2' 'WGRP2' 1 5 7030 'OIL' 0.0 'STD' 'STOP' / - 'WINJ1' 'WGRP1' 10 1 7030 'WAT' 0.0 'STD' 'STOP' / - 'WINJ2' 'WGRP2' 10 1 7030 'WAT' 0.0 'STD' 'STOP' / -/ - -COMPDAT - - 'PROD1' 1 5 2 2 3* 0.2 3* 'X' / - 'PROD1' 2 5 2 2 3* 0.2 3* 'X' / - 'PROD1' 3 5 2 2 3* 0.2 3* 'X' / - 'PROD2' 4 5 2 2 3* 0.2 3* 'X' / - 'PROD2' 5 5 2 2 3* 0.2 3* 'X' / - - 'WINJ1' 10 1 9 9 3* 0.2 3* 'X' / - 'WINJ1' 9 1 9 9 3* 0.2 3* 'X' / - 'WINJ1' 8 1 9 9 3* 0.2 3* 'X' / - 'WINJ2' 7 1 9 9 3* 0.2 3* 'X' / - 'WINJ2' 6 1 9 9 3* 0.2 3* 'X' / -/ - - - -)"; \ No newline at end of file diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/wwct.data b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/wwct.data deleted file mode 100644 index fac1763227..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/integration_tests/wwct.data +++ /dev/null @@ -1,7 +0,0 @@ -SUMMARY - --- Kommentar -WWCT - 'WELL-1' 'WELL-2' / --Snasent -/ - diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/json/BPR b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/json/BPR deleted file mode 100644 index fac1bf4ad0..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/json/BPR +++ /dev/null @@ -1,7 +0,0 @@ -{ - "name" : "BPR", - "sections":["SUMMARY"], - "items" : - [{"name": "I" , "size_type" : "SINGLE" , "value_type" : "INT"}, - {"name": "J" , "size_type" : "SINGLE" , "value_type" : "INT"}, - {"name": "K" , "size_type" : "SINGLE" , "value_type" : "INT"}]} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/json/example_invalid_json b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/json/example_invalid_json deleted file mode 100644 index a5edda0798..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/json/example_invalid_json +++ /dev/null @@ -1,2 +0,0 @@ -{"keywords" : [{"name" : "BPR"} , {"name" : "WWCT"} - diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/json/example_missing_keyword.json b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/json/example_missing_keyword.json deleted file mode 100644 index 83506a5863..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/json/example_missing_keyword.json +++ /dev/null @@ -1,2 +0,0 @@ -{"keywordsXX" : [{"name" : "BPR"} , {"name" : "WWCT"}]} - diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/json/example_missing_name.json b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/json/example_missing_name.json deleted file mode 100644 index 2e208f9e22..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/json/example_missing_name.json +++ /dev/null @@ -1,4 +0,0 @@ -{"items" : - [{"name": "I" , "size_type" : "SINGLE" , "value_type" : "INT"}, - {"name": "J" , "size_type" : "SINGLE" , "value_type" : "INT"}, - {"name": "K" , "size_type" : "SINGLE" , "value_type" : "INT"}]} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/EQLDIMS2 b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/EQLDIMS2 deleted file mode 100644 index b68a3141b8..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/EQLDIMS2 +++ /dev/null @@ -1,7 +0,0 @@ -{ - "name" : "EQLDIMS", - "size" : 1, - "sections": ["RUNSPEC"], - "items": - [{"name" : "NEW" , "value_type" : "INT" , "default" : 1}] -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/PATHSInInclude.data b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/PATHSInInclude.data deleted file mode 100644 index 013a00d4e5..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/PATHSInInclude.data +++ /dev/null @@ -1,7 +0,0 @@ -INCLUDE - 'include/foo.inc' -/ - -INCLUDE - '$FOOPATH/foo_target.inc' -/ diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/PATHSInIncludeInvalid.data b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/PATHSInIncludeInvalid.data deleted file mode 100644 index 7d2817b9ca..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/PATHSInIncludeInvalid.data +++ /dev/null @@ -1,7 +0,0 @@ -INCLUDE - 'include/foo_invalid.inc' -/ - -INCLUDE - '$FOOPATH/foo_target.inc' -/ diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/PATHSWithBackslashes.data b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/PATHSWithBackslashes.data deleted file mode 100644 index 41090dd412..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/PATHSWithBackslashes.data +++ /dev/null @@ -1,7 +0,0 @@ -INCLUDE - 'include\foobackslash.inc' -/ - -INCLUDE - '$FOOPATH\foo_target.inc' -/ diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/include/foo.inc b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/include/foo.inc deleted file mode 100644 index 057c9a77f9..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/include/foo.inc +++ /dev/null @@ -1,3 +0,0 @@ -PATHS - 'FOOPATH' 'include/foopath' / -/ diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/include/foo_invalid.inc b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/include/foo_invalid.inc deleted file mode 100644 index c010f0c2e0..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/include/foo_invalid.inc +++ /dev/null @@ -1,3 +0,0 @@ -PATHS - 'FOOPATH' 'include/invalid' / -/ diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/include/foobackslash.inc b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/include/foobackslash.inc deleted file mode 100644 index 2ce015f5f2..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/include/foobackslash.inc +++ /dev/null @@ -1,3 +0,0 @@ -PATHS - 'FOOPATH' 'include\foopath' / -/ diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/include/foopath/foo_target.inc b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/include/foopath/foo_target.inc deleted file mode 100644 index c3e31e44a4..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/include/foopath/foo_target.inc +++ /dev/null @@ -1 +0,0 @@ -OIL diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/include/some_flags.inc b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/include/some_flags.inc deleted file mode 100644 index c3e31e44a4..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/include/some_flags.inc +++ /dev/null @@ -1 +0,0 @@ -OIL diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/includeInvalid.data b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/includeInvalid.data deleted file mode 100644 index 7e8a1f56a6..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/includeInvalid.data +++ /dev/null @@ -1,3 +0,0 @@ -INCLUDE - 'some_nonexisting_file.inc' -/ diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/includeSymlinkTestdata/symlink1/actual_file_dir/case.data b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/includeSymlinkTestdata/symlink1/actual_file_dir/case.data deleted file mode 100644 index a83017d266..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/includeSymlinkTestdata/symlink1/actual_file_dir/case.data +++ /dev/null @@ -1,3 +0,0 @@ -INCLUDE - 'include/include.inc' -/ diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/includeSymlinkTestdata/symlink1/actual_file_dir/include/include.inc b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/includeSymlinkTestdata/symlink1/actual_file_dir/include/include.inc deleted file mode 100644 index c3e31e44a4..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/includeSymlinkTestdata/symlink1/actual_file_dir/include/include.inc +++ /dev/null @@ -1 +0,0 @@ -OIL diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/includeSymlinkTestdata/symlink1/case_symlink.data b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/includeSymlinkTestdata/symlink1/case_symlink.data deleted file mode 100644 index a83017d266..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/includeSymlinkTestdata/symlink1/case_symlink.data +++ /dev/null @@ -1,3 +0,0 @@ -INCLUDE - 'include/include.inc' -/ diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/includeSymlinkTestdata/symlink2/actual_inlude_file/include.inc b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/includeSymlinkTestdata/symlink2/actual_inlude_file/include.inc deleted file mode 100644 index c3e31e44a4..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/includeSymlinkTestdata/symlink2/actual_inlude_file/include.inc +++ /dev/null @@ -1 +0,0 @@ -OIL diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/includeSymlinkTestdata/symlink2/caseWithIncludedSymlink.data b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/includeSymlinkTestdata/symlink2/caseWithIncludedSymlink.data deleted file mode 100644 index fc9cc228f8..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/includeSymlinkTestdata/symlink2/caseWithIncludedSymlink.data +++ /dev/null @@ -1,3 +0,0 @@ -INCLUDE - 'include/symlink_include.inc' -/ diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/includeSymlinkTestdata/symlink3/actual_include_file/include_oil.inc b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/includeSymlinkTestdata/symlink3/actual_include_file/include_oil.inc deleted file mode 100644 index c3e31e44a4..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/includeSymlinkTestdata/symlink3/actual_include_file/include_oil.inc +++ /dev/null @@ -1 +0,0 @@ -OIL diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/includeSymlinkTestdata/symlink3/case.data b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/includeSymlinkTestdata/symlink3/case.data deleted file mode 100644 index 90027e2251..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/includeSymlinkTestdata/symlink3/case.data +++ /dev/null @@ -1,3 +0,0 @@ -INCLUDE -'include.inc' -/ diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/includeSymlinkTestdata/symlink3/include.inc b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/includeSymlinkTestdata/symlink3/include.inc deleted file mode 100644 index a3f4901186..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/includeSymlinkTestdata/symlink3/include.inc +++ /dev/null @@ -1,4 +0,0 @@ -INCLUDE -'include/incl_symlink.inc' -/ - diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/includeSymlinkTestdata/symlink3/include/incl_symlink.inc b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/includeSymlinkTestdata/symlink3/include/incl_symlink.inc deleted file mode 100644 index c3e31e44a4..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/includeSymlinkTestdata/symlink3/include/incl_symlink.inc +++ /dev/null @@ -1 +0,0 @@ -OIL diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/includeSymlinkTestdata/symlink4/case.data b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/includeSymlinkTestdata/symlink4/case.data deleted file mode 100644 index 01e6596820..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/includeSymlinkTestdata/symlink4/case.data +++ /dev/null @@ -1,3 +0,0 @@ -INCLUDE -'oil.inc' -/ diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/includeSymlinkTestdata/symlink4/oil.inc b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/includeSymlinkTestdata/symlink4/oil.inc deleted file mode 100644 index c3e31e44a4..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/includeSymlinkTestdata/symlink4/oil.inc +++ /dev/null @@ -1 +0,0 @@ -OIL diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/includeSymlinkTestdata/symlink4/path/case.data b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/includeSymlinkTestdata/symlink4/path/case.data deleted file mode 100644 index 01e6596820..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/includeSymlinkTestdata/symlink4/path/case.data +++ /dev/null @@ -1,3 +0,0 @@ -INCLUDE -'oil.inc' -/ diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/includeValid.data b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/includeValid.data deleted file mode 100644 index ac7c5c1227..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/includeValid.data +++ /dev/null @@ -1,3 +0,0 @@ -INCLUDE - 'include/some_flags.inc' -/ diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/includeWrongCase1.data b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/includeWrongCase1.data deleted file mode 100644 index 8e31f17b19..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/includeWrongCase1.data +++ /dev/null @@ -1,3 +0,0 @@ -INCLUDE - 'include/SOME_flags.inc' -/ diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/includeWrongCase2.data b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/includeWrongCase2.data deleted file mode 100644 index 5e977d778c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/includeWrongCase2.data +++ /dev/null @@ -1,3 +0,0 @@ -INCLUDE - 'Include/some_flags.inc' -/ diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/includeWrongCase3.data b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/includeWrongCase3.data deleted file mode 100644 index 40b17f1c74..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/includeWrongCase3.data +++ /dev/null @@ -1,3 +0,0 @@ -INCLUDE - 'Include/SOME_flags.inc' -/ diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/keyword-generator/PORO-invalid b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/keyword-generator/PORO-invalid deleted file mode 100644 index 43a104a8b4..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/keyword-generator/PORO-invalid +++ /dev/null @@ -1,3 +0,0 @@ -{"name" : "PORO" , "sections" : ["GRID"], "data" : {"value_type" : "DOUBLE" , "default" : "XX" , "dimension":"1"}} - - diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/keyword-generator/PORO.json b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/keyword-generator/PORO.json deleted file mode 100644 index 04ce37c261..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/keyword-generator/PORO.json +++ /dev/null @@ -1,3 +0,0 @@ -{"name" : "PORO" , "sections" : ["GRID"], "data" : {"value_type" : "DOUBLE" , "default" : 0 , "dimension":"1"}} - - diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/keyword-generator/invalid.json b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/keyword-generator/invalid.json deleted file mode 100644 index d534dd9ad9..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/keyword-generator/invalid.json +++ /dev/null @@ -1,3 +0,0 @@ -{"name" : "PORO" , "sections" : ["GRID"], "data" : {"value_type" : "DOUBLE" , "default" : 0 , "dimension":"1"} - - diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/keyword-generator/loader/001_ECLIPSE100/A/2ADDREG b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/keyword-generator/loader/001_ECLIPSE100/A/2ADDREG deleted file mode 100644 index 1554bd3696..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/keyword-generator/loader/001_ECLIPSE100/A/2ADDREG +++ /dev/null @@ -1,5 +0,0 @@ -{"name" : "ADDREG" , "sections" : ["GRID","EDIT","PROPS","REGIONS","SOLUTION"], - "items" : - [{"name" : "ARRAY" , "value_type" : "STRING" , "description" : "The 3D array we will update"}, - {"name" : "SHIFT" , "value_type" : "DOUBLE" , "description" : "The value we will multiply with" , "default" : 0} , - {"name" : "REGION_NAME" , "value_type" : "STRING" , "description" : "The name of the region we are interested in" , "default" : "M"}]} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/keyword-generator/loader/001_ECLIPSE100/A/ACTNUM b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/keyword-generator/loader/001_ECLIPSE100/A/ACTNUM deleted file mode 100644 index 26e9589211..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/keyword-generator/loader/001_ECLIPSE100/A/ACTNUM +++ /dev/null @@ -1 +0,0 @@ -{"name" : "ACTNUM", "sections" : ["GRID"], "data" : {"value_type" : "INT" }} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/keyword-generator/loader/001_ECLIPSE100/A/ADDREG b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/keyword-generator/loader/001_ECLIPSE100/A/ADDREG deleted file mode 100644 index 1554bd3696..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/keyword-generator/loader/001_ECLIPSE100/A/ADDREG +++ /dev/null @@ -1,5 +0,0 @@ -{"name" : "ADDREG" , "sections" : ["GRID","EDIT","PROPS","REGIONS","SOLUTION"], - "items" : - [{"name" : "ARRAY" , "value_type" : "STRING" , "description" : "The 3D array we will update"}, - {"name" : "SHIFT" , "value_type" : "DOUBLE" , "description" : "The value we will multiply with" , "default" : 0} , - {"name" : "REGION_NAME" , "value_type" : "STRING" , "description" : "The name of the region we are interested in" , "default" : "M"}]} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/keyword-generator/loader/001_ECLIPSE100/B/BLOCK_PROBE b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/keyword-generator/loader/001_ECLIPSE100/B/BLOCK_PROBE deleted file mode 100644 index ba00cb3ff6..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/keyword-generator/loader/001_ECLIPSE100/B/BLOCK_PROBE +++ /dev/null @@ -1,145 +0,0 @@ -{ - "name" : "BLOCK_PROBE" , - "sections" : ["SUMMARY"], - - "comment": "E100 only", - "deck_names" : [ - "BOSAT", - "BSOIL", - "BOIP", - "BOIPL", - "BOIPG", - "BPPO", - "BVOIL", - "BOVIS", - "BDENO", - "BODEN", - "BFLOOI", - "BFLOOJ", - "BFLOOK", - "BVELOI", - "BVELOJ", - "BVELOK", - "BWSAT", - "BSWAT", - "BWIP", - "BPPW", - "BVWAT", - "BWVIS", - "BDENW", - "BWDEN", - "BFLOWI", - "BVELWJ", - "BVELWK", - "BVELWI", - "BVELWJ", - "BVELWK", - "BGSAT", - "BSGAS", - "BGIP", - "BGIPL", - "BGIPG", - "BPPG", - "BVGAS", - "BGVIS", - "BDENG", - "BGDEN", - "BFLOGI", - "BFLOGJ", - "BFLOGK", - "BVELGI", - "BVELGJ", - "BVELGK", - "BPR", - "BWPR", - "BGPR", - "BRS", - "BRV", - "BPBUB", - "BPDEW", - "BRSSAT", - "BRVSAT", - "BSTATE", - "BPPC", - "BOKR", - "BWKR", - "BGKR", - "BKRO", - "BKRG", - "BKRW", - "BWPC", - "BGPC", - "BGTRP", - "BGTPD", - "BGSHY", - "BGSTRP", - "BWSHY", - "BWSMA", - "BHD", - "BHDF", - "BPR_X", - "BHD_X", - "BHDF_X", - "BSCN_X", - "BCTRA_X", - "LBPR_X", - "LBHD_X", - "LBHDF_X", - "LBSCN_X", - "LBCTRA_X", - "BRPV", - "BOPV", - "BWPV", - "BGPV", - "BHPV", - "BRTM", - "BPORVMOD", - "BPERMMOD", - "BAPI", - "BSCN", - "BSIP", - "BEWV_SAL", - "BTCNFANI", - "BTCNFCAT", - "BTRADCAT", - "BTSADCAT", - "BESALSUR", - "BESALPLY", - "BTCNFHEA", - "BTIPTHEA", - "BCGC", - "BCSC", - "BTCNFFOA", - "BTCNMFOA", - "BTIPTFOA", - "BTADSFOA", - "BTDCYFOA", - "BTMOBFOA", - "BTHLFFOA", - "BGI", - "BSIP", - "BNSAT", - "BNIP", - "BNKR", - "BTCNFSUR", - "BTIPTSUR", - "BTADSUR", - "BTCASUR", - "BTSTSUR", - "BEWV_SUR", - "BTCNFALK", - "BTADSALK", - "BTSTMALK", - "BTSADALK", - "BTPADALK" - ], - - "comment":"Some keywords need to be suffixed by a tracer name...", - "deck_name_regex":"BU.+|BTIPF.+|BTIPS.+|BTCNF.+|BTCNS.+|BTCN[1-9][0-9]*.+|BTIPT.+|BTIPF.+|BTIPS.+|BTIP[1-9][0-9]*.+|BTADS.+|BTDCY", - - "items" : [ - {"name": "I" , "value_type" : "INT"}, - {"name": "J" , "value_type" : "INT"}, - {"name": "K" , "value_type" : "INT"} - ] -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/keyword-generator/loader/001_ECLIPSE100/B/BOX b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/keyword-generator/loader/001_ECLIPSE100/B/BOX deleted file mode 100644 index 13b0a2f5a0..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/keyword-generator/loader/001_ECLIPSE100/B/BOX +++ /dev/null @@ -1,7 +0,0 @@ -{"name" : "BOX" , "sections" : ["GRID", "EDIT", "PROPS", "REGIONS", "SOLUTION", "SCHEDULE"], "size" : 1 , "items" : [ - {"name" : "I1" , "value_type" : "INT"}, - {"name" : "I2" , "value_type" : "INT"}, - {"name" : "J1" , "value_type" : "INT"}, - {"name" : "J2" , "value_type" : "INT"}, - {"name" : "K1" , "value_type" : "INT"}, - {"name" : "K2" , "value_type" : "INT"}]} \ No newline at end of file diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/keyword-generator/loader/002_ECLIPSE300/ADDREG b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/keyword-generator/loader/002_ECLIPSE300/ADDREG deleted file mode 100644 index 4cd4ad38f2..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/keyword-generator/loader/002_ECLIPSE300/ADDREG +++ /dev/null @@ -1,6 +0,0 @@ -{"name" : "ADDREG" , "sections" : ["GRID","EDIT","PROPS","REGIONS","SOLUTION"], - "items" : - [{"name" : "ARRAY" , "value_type" : "STRING" , "description" : "The 3D array we will update"}, - {"name" : "SHIFT" , "value_type" : "DOUBLE" , "description" : "The value we will multiply with" , "default" : 0} , - {"name" : "REGION_NUMBER" , "value_type" : "INT" , "description" : "The region number we are interested in"} , - {"name" : "REGION_NAME" , "value_type" : "STRING" , "description" : "The name of the region we are interested in" , "default" : "M"}]} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/keyword-generator/loader/002_ECLIPSE300/EQUIL b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/keyword-generator/loader/002_ECLIPSE300/EQUIL deleted file mode 100644 index 9f3ee5e3b5..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/keyword-generator/loader/002_ECLIPSE300/EQUIL +++ /dev/null @@ -1,13 +0,0 @@ -{"name" : "EQUIL" , "sections" : ["SOLUTION"], "size" : {"keyword":"EQLDIMS" , "item":"NTEQUL"}, - "description": "The EQUIL item is used when equilibrationg the model. The item should consist of one record for each PVT region", - "items" : - [{"name" : "DATUM_DEPTH" , "value_type" : "DOUBLE" , "default" : 0.0 , "dimension" : "Length"}, - {"name" : "DATUM_PRESSURE" , "value_type" : "DOUBLE" , "dimension" : "Pressure"} , - {"name" : "OWC" , "value_type" : "DOUBLE" , "default" : 0.0 , "dimension" : "Length", - "description" : "The OWC item is depth of the OIL Water contact. This should ..."} , - {"name" : "PC_OWC" , "value_type" : "DOUBLE" , "default" : 0.0 , "dimension" : "Pressure"} , - {"name" : "GOC" , "value_type" : "DOUBLE" , "default" : 0.0 , "dimension" : "Length"} , - {"name" : "PC_GOC" , "value_type" : "DOUBLE" , "default" : 0.0 , "dimension" : "Pressure"} , - {"name" : "BLACK_OIL_INIT" , "value_type" : "INT" , "default" : 0} , - {"name" : "BLACK_OIL_INIT_WG" , "value_type" : "INT" , "default" : 0} , - {"name" : "OIP_INIT" , "value_type" : "INT" , "default" : -5 , "comment":"The default is a state variable"}]} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/keyword-generator/loader/ZCORN b/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/keyword-generator/loader/ZCORN deleted file mode 100644 index 523ae7792e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/data/parser/keyword-generator/loader/ZCORN +++ /dev/null @@ -1 +0,0 @@ -{"name" : "ZCORN", "sections" : ["GRID"], "data" : {"value_type" : "DOUBLE", "dimension" : "Length" }} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/integration/BoxTest.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/integration/BoxTest.cpp deleted file mode 100644 index 72b9681377..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/integration/BoxTest.cpp +++ /dev/null @@ -1,170 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#define BOOST_TEST_MODULE BoxTest - -#include -#include - -#include - -#include -#include -#include -#include -#include - -using namespace Opm; - -inline std::string prefix() { - return boost::unit_test::framework::master_test_suite().argv[1]; -} - -inline Deck makeDeck(const std::string& fileName) { - Parser parser; - Opm::filesystem::path boxFile(fileName); - return parser.parseFile(boxFile.string()); -} - -inline EclipseState makeState(const std::string& fileName) { - return EclipseState( makeDeck(fileName) ); -} - - -BOOST_AUTO_TEST_CASE( PERMX ) { - EclipseState state = makeState( prefix() + "BOX/BOXTEST1" ); - const auto& permx = state.fieldProps().get_global_double( "PERMX" ); - const auto& permy = state.fieldProps().get_global_double( "PERMY" ); - const auto& permz = state.fieldProps().get_global_double( "PERMZ" ); - size_t i, j, k; - const EclipseGrid& grid = state.getInputGrid(); - - for (k = 0; k < grid.getNZ(); k++) { - for (j = 0; j < grid.getNY(); j++) { - for (i = 0; i < grid.getNX(); i++) { - std::size_t g = grid.getGlobalIndex(i,j,k); - - BOOST_CHECK_CLOSE( permx[g] * 0.25, permz[g], 0.001 ); - BOOST_CHECK_EQUAL( permx[g] * 2 , permy[g] ); - - } - } - } -} - - - -BOOST_AUTO_TEST_CASE( PARSE_BOX_OK ) { - EclipseState state = makeState( prefix() + "BOX/BOXTEST1" ); - const auto& satnum = state.fieldProps().get_global_int( "SATNUM" ); - { - size_t i, j, k; - const EclipseGrid& grid = state.getInputGrid(); - for (k = 0; k < grid.getNZ(); k++) { - for (j = 0; j < grid.getNY(); j++) { - for (i = 0; i < grid.getNX(); i++) { - - size_t g = i + j * grid.getNX() + k * grid.getNX() * grid.getNY(); - if (i <= 1 && j <= 1 && k <= 1) - BOOST_CHECK_EQUAL( satnum[ g ], 10 ); - else - BOOST_CHECK_EQUAL( satnum[g], 2 ); - - } - } - } - } -} - -BOOST_AUTO_TEST_CASE( PARSE_MULTIPLY_COPY ) { - EclipseState state = makeState( prefix() + "BOX/BOXTEST1" ); - const auto& satnum = state.fieldProps().get_global_int( "SATNUM" ); - const auto& fipnum = state.fieldProps().get_global_int( "FIPNUM" ); - size_t i, j, k; - const EclipseGrid& grid = state.getInputGrid(); - - for (k = 0; k < grid.getNZ(); k++) { - for (j = 0; j < grid.getNY(); j++) { - for (i = 0; i < grid.getNX(); i++) { - - size_t g = grid.getGlobalIndex(i,j,k); - if (i <= 1 && j <= 1 && k <= 1) - BOOST_CHECK_EQUAL( 4 * satnum[g], fipnum[g] ); - else - BOOST_CHECK_EQUAL( 2 * satnum[g], fipnum[g] ); - - } - } - } -} - - - - -BOOST_AUTO_TEST_CASE( EQUALS ) { - EclipseState state = makeState( prefix() + "BOX/BOXTEST1" ); - const auto& pvtnum = state.fieldProps().get_global_int( "PVTNUM" ); - const auto& eqlnum = state.fieldProps().get_global_int( "EQLNUM" ); - const auto& poro = state.fieldProps().get_global_double( "PORO" ); - size_t i, j, k; - const EclipseGrid& grid = state.getInputGrid(); - - for (k = 0; k < grid.getNZ(); k++) { - for (j = 0; j < grid.getNY(); j++) { - for (i = 0; i < grid.getNX(); i++) { - size_t g = grid.getGlobalIndex(i,j,k); - - BOOST_CHECK_EQUAL( pvtnum[g], k ); - BOOST_CHECK_EQUAL( eqlnum[g], 77 + 2 * k ); - BOOST_CHECK_EQUAL( poro[g], 0.25 ); - } - } - } -} - - -BOOST_AUTO_TEST_CASE( OPERATE ) { - EclipseState state = makeState( prefix() + "BOX/BOXTEST1" ); - const EclipseGrid& grid = state.getInputGrid(); - const auto& ntg = state.fieldProps().get_global_double("NTG"); - BOOST_CHECK_EQUAL( ntg[grid.getGlobalIndex(0,0,0)], 8.50 ); // MULTA - BOOST_CHECK_EQUAL( ntg[grid.getGlobalIndex(0,5,0)], 5.00 ); // POLY - BOOST_CHECK_EQUAL( ntg[grid.getGlobalIndex(0,0,1)], 4.0 ); // COPY - BOOST_CHECK_EQUAL( ntg[grid.getGlobalIndex(0,5,1)], 4.0 ); // MINLIM - BOOST_CHECK_EQUAL( ntg[grid.getGlobalIndex(0,0,2)], 2.0 ); // MAXLIM - BOOST_CHECK_EQUAL( ntg[grid.getGlobalIndex(0,0,3)], 0.5 ); // MAXVALUE - BOOST_CHECK_EQUAL( ntg[grid.getGlobalIndex(0,0,4)], 1.5 ); // MINVALUE -} - - -BOOST_AUTO_TEST_CASE( CONSTRUCTOR_AND_UPDATE ) { - auto deck = makeDeck( prefix() + "BOX/BOXTEST1" ); - EclipseGrid grid(deck); - const auto& box_keyword = deck.getKeyword("BOX", 0); - const auto& operate_keyword = deck.getKeyword("OPERATE"); - Box box(grid); - box.update(box_keyword.getRecord(0)); - BOOST_CHECK_EQUAL(box.size(), 8); - - box.update( operate_keyword.getRecord(0) ); - BOOST_CHECK_EQUAL(box.size(), 50); - - box.reset(); - BOOST_CHECK_EQUAL(box.size(), 1000); -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/integration/CheckDeckValidity.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/integration/CheckDeckValidity.cpp deleted file mode 100644 index 0ee0bdf553..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/integration/CheckDeckValidity.cpp +++ /dev/null @@ -1,106 +0,0 @@ -/* - Copyright 2014 Andreas Lauser - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#define BOOST_TEST_MODULE ParserIntegrationTests -#include -#include - -#include -#include -#include -#include -#include -#include - - -BOOST_AUTO_TEST_CASE( KeywordInCorrectSection ) { - Opm::Parser parser; - Opm::ParseContext parseContext; - Opm::ErrorGuard errorGuard; - - { - const char *correctDeckString = - "RUNSPEC\n" - "DIMENS\n" - "3 3 3 /\n" - "GRID\n" - "DXV\n" - "1 1 1 /\n" - "DYV\n" - "1 1 1 /\n" - "DZV\n" - "1 1 1 /\n" - "TOPS\n" - "9*100 /\n" - "BOX\n" - "1 3 1 3 1 3 /\n" - "PROPS\n" - "SOLUTION\n" - "SCHEDULE\n"; - - auto deck = parser.parseString(correctDeckString); - BOOST_CHECK(Opm::checkDeck(deck, parser, parseContext, errorGuard)); - } - - { - // wrong section ordering - const char *correctDeckString = - "GRID\n" - "RUNSPEC\n" - "PROPS\n" - "SOLUTION\n" - "SCHEDULE\n"; - - auto deck = parser.parseString(correctDeckString); - BOOST_CHECK(!Opm::checkDeck(deck, parser, parseContext, errorGuard)); - BOOST_CHECK(Opm::checkDeck(deck, parser, parseContext, errorGuard, ~Opm::SectionTopology)); - } - - { - // the BOX keyword is in a section where it's not supposed to be - const char *incorrectDeckString = - "RUNSPEC\n" - "BOX\n" - "1 3 1 3 1 3 /\n" - "DIMENS\n" - "3 3 3 /\n" - "GRID\n" - "DXV\n" - "1 1 1 /\n" - "DYV\n" - "1 1 1 /\n" - "DZV\n" - "1 1 1 /\n" - "TOPS\n" - "9*100 /\n" - "PROPS\n" - "SOLUTION\n" - "SCHEDULE\n"; - - auto deck = parser.parseString(incorrectDeckString); - BOOST_CHECK(!Opm::checkDeck(deck, parser, parseContext, errorGuard)); - - // this is supposed to succeed as we don't ensure that all keywords are in the - // correct section - BOOST_CHECK(Opm::checkDeck(deck, parser, parseContext, errorGuard, Opm::SectionTopology)); - - // this fails because of the incorrect BOX keyword - BOOST_CHECK(!Opm::checkDeck(deck, parser, parseContext, errorGuard, Opm::SectionTopology | Opm::KeywordSection)); - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/integration/EDITNNCTests.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/integration/EDITNNCTests.cpp deleted file mode 100644 index 4dec620ad8..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/integration/EDITNNCTests.cpp +++ /dev/null @@ -1,69 +0,0 @@ -/* - Copyright 2015 IRIS - Copyright 2018 Equinor AS - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include -#include -#include -#include -#include -#include - -#define BOOST_TEST_MODULE NNCTests - -#include - -using namespace Opm; - -inline std::string pathprefix() { - return boost::unit_test::framework::master_test_suite().argv[1]; -} - -BOOST_AUTO_TEST_CASE(noNNC) -{ - Parser parser; - auto deck = parser.parseFile(pathprefix() + "NNC/noNNC.DATA"); - EclipseState eclipseState(deck); - const auto& editnnc = eclipseState.getInputEDITNNC(); - BOOST_CHECK(!eclipseState.hasInputEDITNNC()); - BOOST_CHECK(editnnc.empty()); -} - -BOOST_AUTO_TEST_CASE(readDeck) -{ - Parser parser; - auto deck = parser.parseFile(pathprefix() + "EDITNNC/EDITNNC.DATA"); - EclipseState eclipseState(deck); - const auto& editnnc = eclipseState.getInputEDITNNC(); - BOOST_CHECK(!editnnc.empty()); - const std::vector& data = editnnc.data(); - - // test the NNCs in nnc.DATA - BOOST_CHECK_EQUAL(editnnc.size(), 3); //neighbouring connections in EDITNNC are ignored - BOOST_CHECK_EQUAL(data[0].cell1, 1); - BOOST_CHECK_EQUAL(data[0].cell2, 21); - BOOST_CHECK_EQUAL(data[0].trans, 0.1); - BOOST_CHECK_EQUAL(data[1].cell1, 1); - BOOST_CHECK_EQUAL(data[1].cell2, 21); - BOOST_CHECK_EQUAL(data[1].trans, 0.1); - BOOST_CHECK_EQUAL(data[2].cell1, 2); - BOOST_CHECK_EQUAL(data[2].cell2, 0); - BOOST_CHECK_EQUAL(data[2].trans, 0.1); - -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/integration/EclipseGridCreateFromDeck.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/integration/EclipseGridCreateFromDeck.cpp deleted file mode 100644 index 29ddfe8bca..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/integration/EclipseGridCreateFromDeck.cpp +++ /dev/null @@ -1,118 +0,0 @@ -/* - Copyright 2014 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#define BOOST_TEST_MODULE ScheduleIntegrationTests -#include - -#include -#include -#include - -#include - -#include -#include -#include -#include -#include -#include - -using namespace Opm; - -inline std::string prefix() { - return boost::unit_test::framework::master_test_suite().argv[1]; -} - -BOOST_AUTO_TEST_CASE(CreateCPGrid) { - Parser parser; - Opm::filesystem::path scheduleFile(prefix() + "GRID/CORNERPOINT.DATA"); - auto deck = parser.parseFile(scheduleFile.string()); - EclipseState es(deck); - const auto& grid = es.getInputGrid(); - - BOOST_CHECK_EQUAL( 10U , grid.getNX( )); - BOOST_CHECK_EQUAL( 10U , grid.getNY( )); - BOOST_CHECK_EQUAL( 5U , grid.getNZ( )); - BOOST_CHECK_EQUAL( 500U , grid.getNumActive() ); -} - - -BOOST_AUTO_TEST_CASE(CreateCPActnumGrid) { - Parser parser; - Opm::filesystem::path scheduleFile(prefix() + "GRID/CORNERPOINT_ACTNUM.DATA"); - auto deck = parser.parseFile(scheduleFile.string()); - EclipseState es(deck); - const auto& grid = es.getInputGrid(); - - BOOST_CHECK_EQUAL( 10U , grid.getNX( )); - BOOST_CHECK_EQUAL( 10U , grid.getNY( )); - BOOST_CHECK_EQUAL( 5U , grid.getNZ( )); - BOOST_CHECK_EQUAL( 100U , grid.getNumActive() ); -} - - -BOOST_AUTO_TEST_CASE(ExportFromCPGridAllActive) { - Parser parser; - Opm::filesystem::path scheduleFile(prefix() + "GRID/CORNERPOINT.DATA"); - auto deck = parser.parseFile(scheduleFile.string()); - EclipseState es(deck); - const auto& grid = es.getInputGrid(); - - std::vector actnum; - - actnum = grid.getACTNUM(); - BOOST_CHECK_EQUAL( actnum.size() , 500U ); -} - - - - -BOOST_AUTO_TEST_CASE(ExportFromCPGridACTNUM) { - Parser parser; - Opm::filesystem::path scheduleFile(prefix() + "GRID/CORNERPOINT_ACTNUM.DATA"); - auto deck = parser.parseFile(scheduleFile.string()); - EclipseState es(deck); - auto& grid = es.getInputGrid(); - - std::vector coord; - std::vector zcorn; - std::vector actnum; - size_t volume = grid.getNX()*grid.getNY()*grid.getNZ(); - - coord = grid.getCOORD(); - BOOST_CHECK_EQUAL( coord.size() , (grid.getNX() + 1) * (grid.getNY() + 1) * 6); - - zcorn = grid.getZCORN(); - BOOST_CHECK_EQUAL( zcorn.size() , volume * 8); - - actnum = grid.getACTNUM(); - BOOST_CHECK_EQUAL( actnum.size() , volume ); - - { - const std::vector& deckActnum = deck.getKeyword("ACTNUM").getIntData(); - const std::vector& deckZCORN = deck.getKeyword("ZCORN").getSIDoubleData(); - - for (size_t i = 0; i < volume; i++) { - BOOST_CHECK_EQUAL( deckActnum[i] , actnum[i]); - for (size_t j=0; j < 8; j++) - BOOST_CHECK_CLOSE( zcorn[i*8 + j] , deckZCORN[i*8 + j] , 0.0001); - } - } -} - diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/integration/IOConfigIntegrationTest.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/integration/IOConfigIntegrationTest.cpp deleted file mode 100644 index 1b53aabc29..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/integration/IOConfigIntegrationTest.cpp +++ /dev/null @@ -1,371 +0,0 @@ -/* - Copyright 2015 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#define BOOST_TEST_MODULE IOCONFIG_INTEGRATION_TEST -#include -#include - -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -using namespace Opm; - -inline std::string path_prefix() { - return boost::unit_test::framework::master_test_suite().argv[1]; -} - -inline void verifyRestartConfig( const TimeMap& tm, const RestartConfig& rst, std::vector>& rptConfig) { - - for (auto rptrst : rptConfig) { - int report_step = std::get<0>(rptrst); - bool save = std::get<1>(rptrst); - boost::gregorian::date report_date = std::get<2>(rptrst); - - BOOST_CHECK_EQUAL( save, rst.getWriteRestartFile( report_step ) ); - if (save) { - std::time_t t = tm[report_step]; - boost::posix_time::ptime epoch(boost::gregorian::date(1970,1,1)); - boost::posix_time::ptime report_date_ptime(report_date); - boost::posix_time::time_duration::sec_type duration = (report_date_ptime - epoch).total_seconds(); - - BOOST_CHECK_EQUAL( duration , t ); - } - } -} - -BOOST_AUTO_TEST_CASE( NorneRestartConfig ) { - std::vector > rptConfig; - rptConfig.push_back( std::make_tuple(0 , true , boost::gregorian::date( 1997,11,6)) ); - rptConfig.push_back( std::make_tuple(1 , true , boost::gregorian::date( 1997,11,14)) ); - rptConfig.push_back( std::make_tuple(2 , true , boost::gregorian::date( 1997,12,1)) ); - rptConfig.push_back( std::make_tuple(3 , true , boost::gregorian::date( 1997,12,17)) ); - rptConfig.push_back( std::make_tuple(4 , true , boost::gregorian::date( 1998,1,1)) ); - rptConfig.push_back( std::make_tuple(5 , true , boost::gregorian::date( 1998,2,1)) ); - rptConfig.push_back( std::make_tuple(6 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(7 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(8 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(9 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(10 , true , boost::gregorian::date( 1998,4,23)) ); - rptConfig.push_back( std::make_tuple(11 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(12 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(13 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(14 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(15 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(16 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(17 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(18 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(19 , true , boost::gregorian::date( 1998,7,16)) ); - rptConfig.push_back( std::make_tuple(20 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(21 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(22 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(23 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(24 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(25 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(26 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(27 , true , boost::gregorian::date( 1998,10,13)) ); - rptConfig.push_back( std::make_tuple(28 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(29 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(30 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(31 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(32 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(33 , true , boost::gregorian::date( 1999,1,4)) ); - rptConfig.push_back( std::make_tuple(34 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(35 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(36 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(37 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(38 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(39 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(40 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(41 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(42 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(43 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(44 , true , boost::gregorian::date( 1999,5,1)) ); - rptConfig.push_back( std::make_tuple(45 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(46 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(47 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(48 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(49 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(50 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(51 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(52 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(53 , true , boost::gregorian::date( 1999,7,15)) ); - rptConfig.push_back( std::make_tuple(54 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(55 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(56 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(57 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(58 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(59 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(60 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(61 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(62 , true , boost::gregorian::date( 1999,10,3)) ); - rptConfig.push_back( std::make_tuple(63 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(64 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(65 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(66 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(67 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(68 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(69 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(70 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(71 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(72 , true , boost::gregorian::date( 2000,2,1)) ); - rptConfig.push_back( std::make_tuple(73 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(74 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(75 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(76 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(77 , true , boost::gregorian::date( 2000,5,1)) ); - rptConfig.push_back( std::make_tuple(78 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(79 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(80 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(81 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(82 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(83 , true , boost::gregorian::date( 2000,8,1)) ); - rptConfig.push_back( std::make_tuple(84 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(85 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(86 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(87 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(88 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(89 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(90 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(91 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(92 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(93 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(94 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(95 , true , boost::gregorian::date( 2000,11,1)) ); - rptConfig.push_back( std::make_tuple(96 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(97 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(98 , true , boost::gregorian::date( 2001,2,1)) ); - rptConfig.push_back( std::make_tuple(99 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(100 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(101 , true , boost::gregorian::date( 2001,5,1)) ); - rptConfig.push_back( std::make_tuple(102 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(103 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(104 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(105 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(106 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(107 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(108 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(109 , true , boost::gregorian::date( 2001,7,2)) ); - rptConfig.push_back( std::make_tuple(110 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(111 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(112 , true , boost::gregorian::date( 2001,7,16)) ); - rptConfig.push_back( std::make_tuple(113 , true , boost::gregorian::date( 2001,7,30)) ); - rptConfig.push_back( std::make_tuple(114 , true , boost::gregorian::date( 2001,8,1)) ); - rptConfig.push_back( std::make_tuple(115 , true , boost::gregorian::date( 2001,8,10)) ); - rptConfig.push_back( std::make_tuple(116 , true , boost::gregorian::date( 2001,8,16)) ); - rptConfig.push_back( std::make_tuple(117 , true , boost::gregorian::date( 2001,9,1)) ); - rptConfig.push_back( std::make_tuple(118 , true , boost::gregorian::date( 2001,9,10)) ); - rptConfig.push_back( std::make_tuple(119 , true , boost::gregorian::date( 2001,10,1)) ); - rptConfig.push_back( std::make_tuple(120 , true , boost::gregorian::date( 2001,11,1)) ); - rptConfig.push_back( std::make_tuple(121 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(122 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(123 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(124 , true , boost::gregorian::date( 2002,2,1)) ); - rptConfig.push_back( std::make_tuple(125 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(126 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(127 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(128 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(129 , true , boost::gregorian::date( 2002,5,1)) ); - rptConfig.push_back( std::make_tuple(130 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(131 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(132 , true , boost::gregorian::date( 2002,7,8)) ); - rptConfig.push_back( std::make_tuple(133 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(134 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(135 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(136 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(137 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(138 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(139 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(140 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(141 , true , boost::gregorian::date( 2002,10,7)) ); - rptConfig.push_back( std::make_tuple(142 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(143 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(144 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(145 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(146 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(147 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(148 , true , boost::gregorian::date( 2003,1,2)) ); - rptConfig.push_back( std::make_tuple(149 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(150 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(151 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(152 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(153 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(154 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(155 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(156 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(157 , true , boost::gregorian::date( 2003,5,1)) ); - rptConfig.push_back( std::make_tuple(158 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(159 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(160 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(161 , true , boost::gregorian::date( 2003,7,10)) ); - rptConfig.push_back( std::make_tuple(162 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(163 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(164 , true , boost::gregorian::date( 2003,8,12)) ); - rptConfig.push_back( std::make_tuple(165 , true , boost::gregorian::date( 2003,9,1)) ); - rptConfig.push_back( std::make_tuple(166 , true , boost::gregorian::date( 2003,9,2)) ); - rptConfig.push_back( std::make_tuple(167 , true , boost::gregorian::date( 2003,9,10)) ); - rptConfig.push_back( std::make_tuple(168 , true , boost::gregorian::date( 2003,9,12)) ); - rptConfig.push_back( std::make_tuple(169 , true , boost::gregorian::date( 2003,9,13)) ); - rptConfig.push_back( std::make_tuple(170 , true , boost::gregorian::date( 2003,9,16)) ); - rptConfig.push_back( std::make_tuple(171 , true , boost::gregorian::date( 2003,10,1)) ); - rptConfig.push_back( std::make_tuple(172 , true , boost::gregorian::date( 2003,10,23)) ); - rptConfig.push_back( std::make_tuple(173 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(174 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(175 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(176 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(177 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(178 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(179 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(180 , true , boost::gregorian::date( 2004,1,19)) ); - rptConfig.push_back( std::make_tuple(181 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(182 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(183 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(184 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(185 , true , boost::gregorian::date( 2004,5,1)) ); - rptConfig.push_back( std::make_tuple(186 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(187 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(188 , true , boost::gregorian::date( 2004,7,3)) ); - rptConfig.push_back( std::make_tuple(189 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(190 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(191 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(192 , true , boost::gregorian::date( 2004,8,16)) ); - rptConfig.push_back( std::make_tuple(193 , true , boost::gregorian::date( 2004,9,1)) ); - rptConfig.push_back( std::make_tuple(194 , true , boost::gregorian::date( 2004,9,20)) ); - rptConfig.push_back( std::make_tuple(195 , true , boost::gregorian::date( 2004,10,1)) ); - rptConfig.push_back( std::make_tuple(196 , true , boost::gregorian::date( 2004,11,1)) ); - rptConfig.push_back( std::make_tuple(197 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(198 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(199 , true , boost::gregorian::date( 2005,1,12)) ); - rptConfig.push_back( std::make_tuple(200 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(201 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(202 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(203 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(204 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(205 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(206 , true , boost::gregorian::date( 2005,4,24)) ); - rptConfig.push_back( std::make_tuple(207 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(208 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(209 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(210 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(211 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(212 , true , boost::gregorian::date( 2005,7,10)) ); - rptConfig.push_back( std::make_tuple(213 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(214 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(215 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(216 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(217 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(218 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(219 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(220 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(221 , true , boost::gregorian::date( 2005,11,1)) ); - rptConfig.push_back( std::make_tuple(222 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(223 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(224 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(225 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(226 , true , boost::gregorian::date( 2006,1,18)) ); - rptConfig.push_back( std::make_tuple(227 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(228 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(229 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(230 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(231 , true , boost::gregorian::date( 2006,4,25)) ); - rptConfig.push_back( std::make_tuple(232 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(233 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(234 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(235 , true , boost::gregorian::date( 2006,8,1)) ); - rptConfig.push_back( std::make_tuple(236 , false , boost::gregorian::date(1970,1,1)) ); - rptConfig.push_back( std::make_tuple(237 , true , boost::gregorian::date( 2006,8,16)) ); - rptConfig.push_back( std::make_tuple(238 , true , boost::gregorian::date( 2006,9,1)) ); - rptConfig.push_back( std::make_tuple(239 , true , boost::gregorian::date( 2006,9,14)) ); - rptConfig.push_back( std::make_tuple(240 , true , boost::gregorian::date( 2006,10,1)) ); - rptConfig.push_back( std::make_tuple(241 , true , boost::gregorian::date( 2006,10,10)) ); - - auto python = std::make_shared(); - Parser parser; - auto deck = parser.parseFile( path_prefix() + "IOConfig/RPTRST_DECK.DATA"); - EclipseState state(deck); - Schedule schedule(deck, state, python); - - verifyRestartConfig(schedule.getTimeMap(), schedule.restart(), rptConfig); -} - - -BOOST_AUTO_TEST_CASE( RestartConfig2 ) { - std::vector> rptConfig; - - for (size_t report_step = 0; report_step <= 251; ++report_step) { - if (0 == report_step) rptConfig.push_back( std::make_tuple(report_step, true, boost::gregorian::date(2000,1,1))); - else if (8 == report_step) rptConfig.push_back( std::make_tuple(report_step, true, boost::gregorian::date(2000,7,1))); - else if (27 == report_step) rptConfig.push_back( std::make_tuple(report_step, true, boost::gregorian::date(2001,1,1))); - else if (45 == report_step) rptConfig.push_back( std::make_tuple(report_step, true, boost::gregorian::date(2001,7,1))); - else if (61 == report_step) rptConfig.push_back( std::make_tuple(report_step, true, boost::gregorian::date(2002,1,1))); - else if (79 == report_step) rptConfig.push_back( std::make_tuple(report_step, true, boost::gregorian::date(2002,7,1))); - else if (89 == report_step) rptConfig.push_back( std::make_tuple(report_step, true, boost::gregorian::date(2003,1,1))); - else if (99 == report_step) rptConfig.push_back( std::make_tuple(report_step, true, boost::gregorian::date(2003,7,1))); - else if (109 == report_step) rptConfig.push_back( std::make_tuple(report_step, true, boost::gregorian::date(2004,1,1))); - else if (128 == report_step) rptConfig.push_back( std::make_tuple(report_step, true, boost::gregorian::date(2004,7,1))); - else if (136 == report_step) rptConfig.push_back( std::make_tuple(report_step, true, boost::gregorian::date(2005,1,1))); - else if (146 == report_step) rptConfig.push_back( std::make_tuple(report_step, true, boost::gregorian::date(2005,7,1))); - else if (158 == report_step) rptConfig.push_back( std::make_tuple(report_step, true, boost::gregorian::date(2006,1,1))); - else if (164 == report_step) rptConfig.push_back( std::make_tuple(report_step, true, boost::gregorian::date(2006,7,1))); - else if (170 == report_step) rptConfig.push_back( std::make_tuple(report_step, true, boost::gregorian::date(2007,1,1))); - else if (178 == report_step) rptConfig.push_back( std::make_tuple(report_step, true, boost::gregorian::date(2007,7,1))); - else if (184 == report_step) rptConfig.push_back( std::make_tuple(report_step, true, boost::gregorian::date(2008,1,1))); - else if (192 == report_step) rptConfig.push_back( std::make_tuple(report_step, true, boost::gregorian::date(2008,7,1))); - else if (198 == report_step) rptConfig.push_back( std::make_tuple(report_step, true, boost::gregorian::date(2009,1,1))); - else if (204 == report_step) rptConfig.push_back( std::make_tuple(report_step, true, boost::gregorian::date(2009,7,1))); - else if (210 == report_step) rptConfig.push_back( std::make_tuple(report_step, true, boost::gregorian::date(2010,1,1))); - else if (216 == report_step) rptConfig.push_back( std::make_tuple(report_step, true, boost::gregorian::date(2010,7,1))); - else if (222 == report_step) rptConfig.push_back( std::make_tuple(report_step, true, boost::gregorian::date(2011,1,1))); - else if (228 == report_step) rptConfig.push_back( std::make_tuple(report_step, true, boost::gregorian::date(2011,7,1))); - else if (234 == report_step) rptConfig.push_back( std::make_tuple(report_step, true, boost::gregorian::date(2012,1,1))); - else if (240 == report_step) rptConfig.push_back( std::make_tuple(report_step, true, boost::gregorian::date(2012,7,1))); - else if (246 == report_step) rptConfig.push_back( std::make_tuple(report_step, true, boost::gregorian::date(2013,1,1))); - // output when SAVE is in the deck - else if (251 == report_step) rptConfig.push_back( std::make_tuple(report_step, true, boost::gregorian::date(2013,5,2))); - else rptConfig.push_back( std::make_tuple(report_step, false, boost::gregorian::date(2000,1,1))); - } - - - auto python = std::make_shared(); - Parser parser; - auto deck = parser.parseFile(path_prefix() + "IOConfig/RPT_TEST2.DATA"); - EclipseState state( deck); - Schedule schedule(deck, state, python); - const auto& rstConfig = schedule.restart(); - verifyRestartConfig(schedule.getTimeMap(), rstConfig, rptConfig); - - BOOST_CHECK_EQUAL( rstConfig.getFirstRestartStep() , 0 ); -} - - - -BOOST_AUTO_TEST_CASE( SPE9END ) { - Parser parser; - auto deck = parser.parseFile(path_prefix() + "IOConfig/SPE9_END.DATA"); - BOOST_CHECK_NO_THROW( EclipseState state( deck) ); -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/integration/IncludeTest.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/integration/IncludeTest.cpp deleted file mode 100644 index 48871ad750..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/integration/IncludeTest.cpp +++ /dev/null @@ -1,192 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#define BOOST_TEST_MODULE ParserIntegrationTests -#include -#include -#include -#include -#include -#include -#include - -#include - -#include -#include - -#include - -using namespace Opm; -using namespace Opm::filesystem; - -static void -createDeckWithInclude(path& datafile, std::string addEndKeyword) -{ - path tmpdir = temp_directory_path(); - path root = tmpdir / unique_path("%%%%-%%%%"); - path absoluteInclude = root / "absolute.include"; - path includePath1 = root / "include"; - path includePath2 = root / "include2"; - path pathIncludeFile = "path.file"; - - create_directories(root); - create_directories(includePath1); - create_directories(includePath2); - - { - datafile = root / "TEST.DATA"; - - std::ofstream of(datafile.string().c_str()); - - of << "PATHS" << std::endl; - of << "PATH1 '" << includePath1.string() << "' /" << std::endl; - of << "PATH2 '" << includePath2.string() << "' /" << std::endl; - of << "/" << std::endl; - - of << "INCLUDE" << std::endl; - of << " \'relative.include\' /" << std::endl; - - of << std::endl; - - of << "INCLUDE" << std::endl; - of << " \'" << absoluteInclude.string() << "\' /" << std::endl; - - of << std::endl; - - of << "INCLUDE" << std::endl; - of << " \'include/nested.include\' /" << std::endl; - - of << std::endl; - - - - of << std::endl; - - of << "INCLUDE" << std::endl; - of << " \'$PATH1/" << pathIncludeFile.string() << "\' /" << std::endl; - - of << std::endl; - - of << "INCLUDE" << std::endl; - of << " \'$PATH2/" << pathIncludeFile.string() << "\' /" << std::endl; - - of.close(); - } - - { - path relativeInclude = root / "relative.include"; - std::ofstream of(relativeInclude.string().c_str()); - - of << "START" << std::endl; - of << " 10 'FEB' 2012 /" << std::endl; - of.close(); - } - - { - std::ofstream of(absoluteInclude.string().c_str()); - - if (addEndKeyword.length() > 0) { - of << addEndKeyword << std::endl; - } - of << "DIMENS" << std::endl; - of << " 10 20 30 /" << std::endl; - of.close(); - } - - { - path nestedInclude = includePath1 / "nested.include"; - path gridInclude = includePath1 / "grid.include"; - std::ofstream of(nestedInclude.string().c_str()); - - of << "INCLUDE" << std::endl; - of << " \'$PATH1/grid.include\' /" << std::endl; - of.close(); - - std::ofstream of2(gridInclude.string().c_str()); - of2 << "GRIDUNIT" << std::endl; - of2 << "/" << std::endl; - of2.close(); - } - - { - path fullPathToPathIncludeFile1 = includePath1 / pathIncludeFile; - std::ofstream of1(fullPathToPathIncludeFile1.string().c_str()); - of1 << "TITLE" << std::endl; - of1 << "This is the title /" << std::endl; - of1.close(); - - path fullPathToPathIncludeFile2 = includePath2 / pathIncludeFile; - std::ofstream of2(fullPathToPathIncludeFile2.string().c_str()); - of2 << "BOX" << std::endl; - of2 << " 1 2 3 4 5 6 /" << std::endl; - of2.close(); - } - - std::cout << datafile << std::endl; - - -} - - - - -BOOST_AUTO_TEST_CASE(parse_fileWithWWCTKeyword_deckReturned) { - path datafile; - Parser parser; - createDeckWithInclude (datafile, ""); - auto deck = parser.parseFile(datafile.string()); - - BOOST_CHECK( deck.hasKeyword("START")); - BOOST_CHECK( deck.hasKeyword("DIMENS")); - BOOST_CHECK( deck.hasKeyword("GRIDUNIT")); -} - -BOOST_AUTO_TEST_CASE(parse_fileWithENDINCKeyword_deckReturned) { - path datafile; - Parser parser; - createDeckWithInclude (datafile, "ENDINC"); - auto deck = parser.parseFile(datafile.string()); - - BOOST_CHECK( deck.hasKeyword("START")); - BOOST_CHECK( !deck.hasKeyword("DIMENS")); - BOOST_CHECK( deck.hasKeyword("GRIDUNIT")); -} - -BOOST_AUTO_TEST_CASE(parse_fileWithENDKeyword_deckReturned) { - path datafile; - Parser parser; - createDeckWithInclude (datafile, "END"); - auto deck = parser.parseFile(datafile.string()); - - BOOST_CHECK( deck.hasKeyword("START")); - BOOST_CHECK( !deck.hasKeyword("DIMENS")); - BOOST_CHECK( !deck.hasKeyword("GRIDUNIT")); -} - -BOOST_AUTO_TEST_CASE(parse_fileWithPathsKeyword_IncludeExtendsPath) { - path datafile; - Parser parser; - createDeckWithInclude (datafile, ""); - auto deck = parser.parseFile(datafile.string()); - - BOOST_CHECK( deck.hasKeyword("TITLE")); - BOOST_CHECK( deck.hasKeyword("BOX")); -} - diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/integration/IntegrationTests.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/integration/IntegrationTests.cpp deleted file mode 100644 index f9ca1d3d7e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/integration/IntegrationTests.cpp +++ /dev/null @@ -1,240 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#define BOOST_TEST_MODULE ParserIntegrationTests -#include -#include -#include - -#include -#include -#include - -#include -#include -#include - -#include - -using namespace Opm; - -inline std::string pathprefix() { - return boost::unit_test::framework::master_test_suite().argv[1]; -} - -namespace { - -ParserKeyword createFixedSized(const std::string& kw , size_t size) { - ParserKeyword pkw(kw); - pkw.setFixedSize( size ); - return pkw; -} - -ParserKeyword createDynamicSized(const std::string& kw) { - ParserKeyword pkw( kw ); - pkw.setSizeType(SLASH_TERMINATED); - return pkw; -} - -Parser createWWCTParser() { - auto parserKeyword = createDynamicSized("WWCT"); - - ParserRecord record; - ParserItem item("WELL", ParserItem::itype::STRING); - item.setSizeType(ParserItem::item_size::ALL); - record.addItem(item); - parserKeyword.addRecord( record ); - - auto summaryKeyword = createFixedSized("SUMMARY" , (size_t) 0); - - Parser parser; - parser.addParserKeyword( std::move( parserKeyword ) ); - parser.addParserKeyword( std::move( summaryKeyword ) ); - return parser; -} - -} - -BOOST_AUTO_TEST_CASE(parse_fileWithWWCTKeyword_deckReturned) { - Opm::filesystem::path singleKeywordFile(pathprefix() + "wwct.data"); - auto parser = createWWCTParser(); - BOOST_CHECK( parser.isRecognizedKeyword("WWCT")); - BOOST_CHECK( parser.isRecognizedKeyword("SUMMARY")); - BOOST_CHECK_NO_THROW( parser.parseFile(singleKeywordFile.string()) ); -} - -BOOST_AUTO_TEST_CASE(parse_stringWithWWCTKeyword_deckReturned) { - const char *wwctString = - "SUMMARY\n" - "\n" - "-- Kommentar\n" - "WWCT\n" - " 'WELL-1' 'WELL-2' / -- Ehne mehne muh\n" - "/\n"; - auto parser = createWWCTParser(); - BOOST_CHECK( parser.isRecognizedKeyword("WWCT")); - BOOST_CHECK( parser.isRecognizedKeyword("SUMMARY")); - BOOST_CHECK_NO_THROW(parser.parseString(wwctString)); -} - -BOOST_AUTO_TEST_CASE(parse_streamWithWWCTKeyword_deckReturned) { - const char *wwctString = - "SUMMARY\n" - "\n" - "-- Kommentar\n" - "WWCT\n" - " 'WELL-1' 'WELL-2' / -- Rumpelstilzchen\n" - "/\n"; - auto parser = createWWCTParser(); - BOOST_CHECK( parser.isRecognizedKeyword("WWCT")); - BOOST_CHECK( parser.isRecognizedKeyword("SUMMARY")); - BOOST_CHECK_NO_THROW(parser.parseString( wwctString)); -} - -BOOST_AUTO_TEST_CASE(parse_fileWithWWCTKeyword_deckHasWWCT) { - Opm::filesystem::path singleKeywordFile(pathprefix() + "wwct.data"); - auto parser = createWWCTParser(); - auto deck = parser.parseFile(singleKeywordFile.string()); - BOOST_CHECK(deck.hasKeyword("SUMMARY")); - BOOST_CHECK(deck.hasKeyword("WWCT")); -} - -BOOST_AUTO_TEST_CASE(parse_fileWithWWCTKeyword_dataIsCorrect) { - Opm::filesystem::path singleKeywordFile(pathprefix() + "wwct.data"); - auto parser = createWWCTParser(); - auto deck = parser.parseFile(singleKeywordFile.string()); - BOOST_CHECK_EQUAL("WELL-1", deck.getKeyword("WWCT" , 0).getRecord(0).getItem(0).get< std::string >(0)); - BOOST_CHECK_EQUAL("WELL-2", deck.getKeyword("WWCT" , 0).getRecord(0).getItem(0).get< std::string >(1)); -} - -BOOST_AUTO_TEST_CASE(parser_internal_name_vs_deck_name) { - Parser parser; - - // internal names cannot appear in the deck if the deck names and/or deck regular - // match expressions are given - BOOST_CHECK(!parser.isRecognizedKeyword("WELL_PROBE")); - - // an existing deck name - BOOST_CHECK(parser.isRecognizedKeyword("WWPR")); - - // a non-existing deck name - BOOST_CHECK(!parser.isRecognizedKeyword("WWPRFOO")); - - // user defined quantity. (regex needs to be used.) - BOOST_CHECK(parser.isRecognizedKeyword("WUFOO")); -} - -static Parser createBPRParser() { - auto parserKeyword = createDynamicSized("BPR"); - { - ParserRecord bprRecord; - bprRecord.addItem( ParserItem("I", ParserItem::itype::INT) ); - bprRecord.addItem( ParserItem("J", ParserItem::itype::INT) ); - bprRecord.addItem( ParserItem("K", ParserItem::itype::INT) ); - parserKeyword.addRecord( bprRecord ); - } - auto summaryKeyword = createFixedSized("SUMMARY" , (size_t) 0); - Parser parser; - parser.addParserKeyword( std::move( parserKeyword ) ); - parser.addParserKeyword( std::move( summaryKeyword ) ); - return parser; -} - -BOOST_AUTO_TEST_CASE(parse_fileWithBPRKeyword_deckReturned) { - Opm::filesystem::path singleKeywordFile(pathprefix() + "bpr.data"); - auto parser = createBPRParser(); - - BOOST_CHECK_NO_THROW(parser.parseFile(singleKeywordFile.string())); -} - -BOOST_AUTO_TEST_CASE(parse_fileWithBPRKeyword_DeckhasBRP) { - Opm::filesystem::path singleKeywordFile(pathprefix() + "bpr.data"); - - auto parser = createBPRParser(); - auto deck = parser.parseFile(singleKeywordFile.string()); - - BOOST_CHECK_EQUAL(true, deck.hasKeyword("BPR")); -} - -BOOST_AUTO_TEST_CASE(parse_fileWithBPRKeyword_dataiscorrect) { - Opm::filesystem::path singleKeywordFile(pathprefix() + "bpr.data"); - - auto parser = createBPRParser(); - auto deck = parser.parseFile(singleKeywordFile.string()); - - const auto& keyword = deck.getKeyword("BPR" , 0); - BOOST_CHECK_EQUAL(2U, keyword.size()); - - const auto& record1 = keyword.getRecord(0); - BOOST_CHECK_EQUAL(3U, record1.size()); - - BOOST_CHECK_EQUAL(1, record1.getItem(0).get< int >(0)); - BOOST_CHECK_EQUAL(1, record1.getItem("I").get< int >(0)); - - BOOST_CHECK_EQUAL(2, record1.getItem(1).get< int >(0)); - BOOST_CHECK_EQUAL(2, record1.getItem("J").get< int >(0)); - - BOOST_CHECK_EQUAL(3, record1.getItem(2).get< int >(0)); - BOOST_CHECK_EQUAL(3, record1.getItem("K").get< int >(0)); -} - - -/***************** Testing non-recognized keywords ********************/ -BOOST_AUTO_TEST_CASE(parse_unknownkeyword_exceptionthrown) { - Parser parser; - BOOST_CHECK_THROW( parser.parseFile(pathprefix() + "someobscureelements.data"), std::invalid_argument); -} - -/*********************Testing truncated (default) records ***************************/ - - -// Datafile contains 3 RADFIN4 keywords. One fully specified, one with 2 out of 11 items, and one with no items. -BOOST_AUTO_TEST_CASE(parse_truncatedrecords_deckFilledWithDefaults) { - Parser parser; - auto deck = parser.parseFile(pathprefix() + "truncated_records.data"); - BOOST_CHECK_EQUAL(3U, deck.size()); - const auto& radfin4_0_full= deck.getKeyword("RADFIN4", 0); - const auto& radfin4_1_partial= deck.getKeyword("RADFIN4", 1); - - // Specified in datafile - BOOST_CHECK_EQUAL("NAME", radfin4_0_full.getRecord(0).getItem(0).get< std::string >(0)); - BOOST_CHECK_EQUAL("NAME", radfin4_1_partial.getRecord(0).getItem(0).get< std::string >(0)); - - // Specified in datafile - BOOST_CHECK_EQUAL(213, radfin4_0_full.getRecord(0).getItem(1).get< int >(0)); - BOOST_CHECK_EQUAL(213, radfin4_1_partial.getRecord(0).getItem(1).get< int >(0)); - - const auto& record_0 = radfin4_0_full.getRecord(0); - const auto& lastItem_0 = record_0.getItem(record_0.size() - 1); - BOOST_CHECK(!lastItem_0.defaultApplied(0)); - BOOST_CHECK_EQUAL(lastItem_0.get< int >(0), 18); - - const auto& record_1 = radfin4_1_partial.getRecord(0); - const auto& lastItem_1 = record_1.getItem(record_1.size() - 1); - BOOST_CHECK_EQUAL(213, radfin4_1_partial.getRecord(0).getItem(1).get< int >(0)); - BOOST_CHECK(lastItem_1.defaultApplied(0)); - BOOST_CHECK_EQUAL(lastItem_1.get< int >(0), 1); - - const auto& parserKeyword = parser.getParserKeywordFromDeckName("RADFIN4"); - const auto& parserRecord = parserKeyword.getRecord(0); - const auto& intItem = parserRecord.get("NWMAX"); - - BOOST_CHECK_EQUAL(18, radfin4_0_full.getRecord(0).getItem(10).get< int >(0)); - BOOST_CHECK_EQUAL(intItem.getDefault< int >(), radfin4_1_partial.getRecord(0).getItem(10).get< int >(0)); -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/integration/NNCTests.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/integration/NNCTests.cpp deleted file mode 100644 index a627b7f5b7..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/integration/NNCTests.cpp +++ /dev/null @@ -1,96 +0,0 @@ -/* - Copyright 2015 IRIS - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include -#include -#include -#include -#include -#include - -#define BOOST_TEST_MODULE NNCTests - -#include - -using namespace Opm; - -inline std::string pathprefix() { - return boost::unit_test::framework::master_test_suite().argv[1]; -} - -BOOST_AUTO_TEST_CASE(noNNC) -{ - Parser parser; - auto deck = parser.parseFile(pathprefix() + "NNC/noNNC.DATA"); - EclipseState eclipseState(deck); - const auto& nnc = eclipseState.getInputNNC(); - BOOST_CHECK(!eclipseState.hasInputNNC()); - BOOST_CHECK(!nnc.hasNNC()); -} - -BOOST_AUTO_TEST_CASE(readDeck) -{ - Parser parser; - auto deck = parser.parseFile(pathprefix() + "NNC/NNC.DATA"); - EclipseState eclipseState(deck); - const auto& nnc = eclipseState.getInputNNC(); - BOOST_CHECK(nnc.hasNNC()); - const std::vector& nncdata = nnc.data(); - - // test the NNCs in nnc.DATA - BOOST_CHECK_EQUAL(nnc.numNNC(), 4); - BOOST_CHECK_EQUAL(nncdata[0].cell1, 0); - BOOST_CHECK_EQUAL(nncdata[0].cell2, 1); - BOOST_CHECK_EQUAL(nncdata[0].trans, 0.5 * Opm::Metric::Transmissibility); - BOOST_CHECK_EQUAL(nncdata[1].cell1, 0); - BOOST_CHECK_EQUAL(nncdata[1].cell2, 10); - BOOST_CHECK_EQUAL(nncdata[1].trans, 1.0 * Opm::Metric::Transmissibility); - -} - -BOOST_AUTO_TEST_CASE(addNNCfromDeck) -{ - Parser parser; - auto deck = parser.parseFile(pathprefix() + "NNC/NNC.DATA"); - EclipseState eclipseState(deck); - auto nnc = eclipseState.getInputNNC(); - BOOST_CHECK(nnc.hasNNC()); - const std::vector& nncdata = nnc.data(); - - BOOST_CHECK_EQUAL(nnc.numNNC(), 4); - // test add NNC - nnc.addNNC(2, 2, 2.0); - BOOST_CHECK_EQUAL(nnc.numNNC(), 5); - BOOST_CHECK_EQUAL(nncdata[4].cell1, 2); - BOOST_CHECK_EQUAL(nncdata[4].cell2, 2); - BOOST_CHECK_EQUAL(nncdata[4].trans, 2.0); -} - -BOOST_AUTO_TEST_CASE(addNNC) -{ - Opm::NNC nnc; - // add NNC - nnc.addNNC(2,2,2.0); - const std::vector& nncdata = nnc.data(); - BOOST_CHECK_EQUAL(nnc.numNNC(), 1); - BOOST_CHECK_EQUAL(nncdata[0].cell1, 2); - BOOST_CHECK_EQUAL(nncdata[0].cell1, 2); - BOOST_CHECK_EQUAL(nncdata[0].trans, 2.0); -} - diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/integration/ParseKEYWORD.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/integration/ParseKEYWORD.cpp deleted file mode 100644 index 63b115ec56..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/integration/ParseKEYWORD.cpp +++ /dev/null @@ -1,1505 +0,0 @@ -/* - Copyright 2017 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#define BOOST_TEST_MODULE ParserKeywordsIntegrationTests -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -using namespace Opm; - -inline std::string pathprefix() { - return boost::unit_test::framework::master_test_suite().argv[1]; -} - -BOOST_AUTO_TEST_CASE( debug ) { - Parser().parseFile( pathprefix() + "DEBUG/DEBUG.DATA" ); -} - -BOOST_AUTO_TEST_CASE( CECON ) { - const std::string input = R"( -CECON - PROD1 4* 0.7 / - 'P*' 2* 2 2 1* 3.5 / -/ - )"; - Parser().parseString( input ); -} - -BOOST_AUTO_TEST_CASE( COORDSYS ) { - const std::string input = R"( -RUNSPEC - NUMRES - 1 / -GRID - COORDSYS - 1 1141 / - COORDSYS - 1 1141 'COMP' 'JOIN' 1 2 / - COORDSYS - 1 1141 'COMP' 'JOIN' / - COORDSYS - 1 1141 'INCOMP' / -)"; - Parser().parseString( input ); -} - -BOOST_AUTO_TEST_CASE( DENSITY ) { - Parser parser; - std::string file(pathprefix() + "DENSITY/DENSITY1"); - auto deck = parser.parseFile(file); - const auto& densityKw = deck.getKeyword("DENSITY" , 0); - - - BOOST_CHECK_EQUAL( 2U , densityKw.size()); - const auto& rec1 = densityKw.getRecord(0); - - const auto& oilDensity = rec1.getItem("OIL"); - const auto& waterDensity = rec1.getItem("WATER"); - const auto& gasDensity = rec1.getItem("GAS"); - - const auto density = Field::Density; - BOOST_CHECK_CLOSE( 500 * density, oilDensity.getSIDouble(0), 0.001 ); - BOOST_CHECK_CLOSE( 1000 * density, waterDensity.getSIDouble(0), 0.001 ); - BOOST_CHECK_CLOSE( 1 * density, gasDensity.getSIDouble(0), 0.001 ); -} - -BOOST_AUTO_TEST_CASE( END ) { - Parser parser; - std::string fileWithTitleKeyword = pathprefix() + "END/END1.txt"; - auto deck = parser.parseFile(fileWithTitleKeyword); - - BOOST_CHECK_EQUAL(size_t(1), deck.size()); - BOOST_CHECK_EQUAL(true, deck.hasKeyword("OIL")); - BOOST_CHECK_EQUAL(false, deck.hasKeyword("GAS")); - BOOST_CHECK_EQUAL(false, deck.hasKeyword("END")); -} - -BOOST_AUTO_TEST_CASE( ENDINC ) { - Parser parser; - std::string fileWithTitleKeyword(pathprefix() + "END/ENDINC1.txt"); - auto deck = parser.parseFile(fileWithTitleKeyword); - - BOOST_CHECK_EQUAL(size_t(1), deck.size()); - BOOST_CHECK_EQUAL(true, deck.hasKeyword("OIL")); - BOOST_CHECK_EQUAL(false, deck.hasKeyword("GAS")); - BOOST_CHECK_EQUAL(false, deck.hasKeyword("ENDINC")); -} - -BOOST_AUTO_TEST_CASE( EQUIL_MISSING_DIMS ) { - Parser parser; - ErrorGuard errors; - ParseContext parseContext; - parseContext.update(ParseContext::PARSE_MISSING_DIMS_KEYWORD, InputError::IGNORE); - const std::string equil = "EQUIL\n" - "2469 382.4 1705.0 0.0 500 0.0 1 1 20 /"; - auto deck = parser.parseString(equil, parseContext, errors); - const auto& kw1 = deck.getKeyword("EQUIL" , 0); - BOOST_CHECK_EQUAL( 1U , kw1.size() ); - - const auto& rec1 = kw1.getRecord(0); - const auto& item1 = rec1.getItem("OWC"); - const auto& item1_index = rec1.getItem(2); - - BOOST_CHECK_EQUAL( &item1 , &item1_index ); - BOOST_CHECK( fabs(item1.getSIDouble(0) - 1705) < 0.001); -} - - -BOOST_AUTO_TEST_CASE( EQUIL ) { - Parser parser; - std::string pvtgFile(pathprefix() + "EQUIL/EQUIL1"); - auto deck = parser.parseFile(pvtgFile); - const auto& kw1 = deck.getKeyword("EQUIL" , 0); - BOOST_CHECK_EQUAL( 3U , kw1.size() ); - - const auto& rec1 = kw1.getRecord(0); - BOOST_CHECK_EQUAL( 9U , rec1.size() ); - - const auto& rec2 = kw1.getRecord(1); - BOOST_CHECK_EQUAL( 9U , rec2.size() ); - - const auto& rec3 = kw1.getRecord(2); - BOOST_CHECK_EQUAL( 9U , rec3.size() ); - - const auto& item1 = rec1.getItem("OWC"); - const auto& item1_index = rec1.getItem(2); - - BOOST_CHECK_EQUAL( &item1 , &item1_index ); - BOOST_CHECK( fabs(item1.getSIDouble(0) - 1705) < 0.001 ); - - const auto& item3 = rec3.getItem("OWC"); - const auto& item3_index = rec3.getItem(2); - - BOOST_CHECK_EQUAL( &item3 , &item3_index ); - BOOST_CHECK( fabs(item3.getSIDouble(0) - 3000) < 0.001 ); -} - -BOOST_AUTO_TEST_CASE( GRUPRIG ) { - const std::string input = R"( --- GRUP WORK DRILL RIG --- NAME RIG RIG OPTN -GRUPRIG - 'FIELD' 1 1 ADD / - 'FIELD' 2* REMOVE / -/ - )"; - Parser().parseString( input ); -} - -BOOST_AUTO_TEST_CASE( LGR ) { - Parser().parseFile( pathprefix() + "LGR/LGR.DATA" ); -} - -const std::string miscibleData = R"( -MISCIBLE - 2 3 / -)"; - -const std::string miscibleTightData = R"( -MISCIBLE - 1 2 / -)"; - -const std::string sorwmisData = R"( -SORWMIS - .00 .00 - .50 .00 - 1.0 .00 / - .00 .00 - .30 .20 - 1.0 .80 / -)"; - -const std::string sgcwmisData = R"( -SGCWMIS - .00 .00 - .20 .00 - 1.0 .00 / - .00 .00 - .80 .20 - 1.0 .70 / -)"; - -BOOST_AUTO_TEST_CASE( SORWMIS ) { - - Parser parser; - // missing miscible keyword - BOOST_CHECK_THROW (parser.parseString(sorwmisData), std::invalid_argument ); - - //too many tables - BOOST_CHECK_THROW( parser.parseString(miscibleTightData + sorwmisData), std::invalid_argument); - - auto deck1 = parser.parseString(miscibleData + sorwmisData); - - const auto& sorwmis = deck1.getKeyword("SORWMIS"); - const auto& miscible = deck1.getKeyword("MISCIBLE"); - - const auto& miscible0 = miscible.getRecord(0); - const auto& sorwmis0 = sorwmis.getRecord(0); - const auto& sorwmis1 = sorwmis.getRecord(1); - - // test number of columns - size_t ntmisc = miscible0.getItem(0).get< int >(0); - Opm::SorwmisTable sorwmisTable0(sorwmis0.getItem(0)); - BOOST_CHECK_EQUAL(sorwmisTable0.numColumns(),ntmisc); - - // test table input 1 - BOOST_CHECK_EQUAL(3U, sorwmisTable0.getWaterSaturationColumn().size()); - BOOST_CHECK_EQUAL(1.0, sorwmisTable0.getWaterSaturationColumn()[2]); - BOOST_CHECK_EQUAL(0.0, sorwmisTable0.getMiscibleResidualOilColumn()[2]); - - // test table input 2 - Opm::SorwmisTable sorwmisTable1(sorwmis1.getItem(0)); - BOOST_CHECK_EQUAL(sorwmisTable1.numColumns(),ntmisc); - - BOOST_CHECK_EQUAL(3U, sorwmisTable1.getWaterSaturationColumn().size()); - BOOST_CHECK_EQUAL(0.3, sorwmisTable1.getWaterSaturationColumn()[1]); - BOOST_CHECK_EQUAL(0.8, sorwmisTable1.getMiscibleResidualOilColumn()[2]); -} - -BOOST_AUTO_TEST_CASE( SGCWMIS ) { - Parser parser; - auto deck1 = parser.parseString(miscibleData + sgcwmisData); - - const auto& sgcwmis = deck1.getKeyword("SGCWMIS"); - const auto& miscible = deck1.getKeyword("MISCIBLE"); - - const auto& miscible0 = miscible.getRecord(0); - const auto& sgcwmis0 = sgcwmis.getRecord(0); - const auto& sgcwmis1 = sgcwmis.getRecord(1); - - // test number of columns - size_t ntmisc = miscible0.getItem(0).get< int >(0); - Opm::SgcwmisTable sgcwmisTable0(sgcwmis0.getItem(0)); - BOOST_CHECK_EQUAL(sgcwmisTable0.numColumns(),ntmisc); - - // test table input 1 - BOOST_CHECK_EQUAL(3U, sgcwmisTable0.getWaterSaturationColumn().size()); - BOOST_CHECK_EQUAL(0.2, sgcwmisTable0.getWaterSaturationColumn()[1]); - BOOST_CHECK_EQUAL(0.0, sgcwmisTable0.getMiscibleResidualGasColumn()[1]); - - // test table input 2 - Opm::SgcwmisTable sgcwmisTable1(sgcwmis1.getItem(0)); - BOOST_CHECK_EQUAL(sgcwmisTable1.numColumns(),ntmisc); - - BOOST_CHECK_EQUAL(3U, sgcwmisTable1.getWaterSaturationColumn().size()); - BOOST_CHECK_EQUAL(0.8, sgcwmisTable1.getWaterSaturationColumn()[1]); - BOOST_CHECK_EQUAL(0.2, sgcwmisTable1.getMiscibleResidualGasColumn()[1]); -} - -const std::string miscData = R"( -MISCIBLE - 1 3 / - -MISC - 0.0 0.0 - 0.1 0.5 - 1.0 1.0 / -)"; - -const std::string miscOutOfRangeData = R"( -MISCIBLE - 1 3 / - -MISC - 0.0 0.0 - 1.0 0.5 - 2.0 1.0 / -)"; - -const std::string miscTooSmallRangeData = R"( -MISCIBLE - 1 3 / - -MISC - 0.0 0.0 - 1.0 0.5 / -)"; - -BOOST_AUTO_TEST_CASE( MISC ) { - Parser parser; - - // out of range MISC keyword - auto deck1 = parser.parseString(miscOutOfRangeData); - const auto& item = deck1.getKeyword("MISC").getRecord(0).getItem(0); - Opm::MiscTable miscTable1(item); - - // too litle range of MISC keyword - auto deck2 = parser.parseString(miscTooSmallRangeData); - const auto& item2 = deck2.getKeyword("MISC").getRecord(0).getItem(0); - Opm::MiscTable miscTable2(item2); - - // test table input - auto deck3 = parser.parseString(miscData); - const auto& item3 = deck3.getKeyword("MISC").getRecord(0).getItem(0); - Opm::MiscTable miscTable3(item3); - BOOST_CHECK_EQUAL(3U, miscTable3.getSolventFractionColumn().size()); - BOOST_CHECK_EQUAL(0.1, miscTable3.getSolventFractionColumn()[1]); - BOOST_CHECK_EQUAL(0.5, miscTable3.getMiscibilityColumn()[1]); -} - -const std::string pmiscData = R"( -MISCIBLE - 1 3 / - -PMISC - 100 0.0 - 200 0.5 - 500 1.0 / -)"; - -BOOST_AUTO_TEST_CASE( PMISC ) { - Parser parser; - auto deck = parser.parseString(pmiscData); - Opm::PmiscTable pmiscTable(deck.getKeyword("PMISC").getRecord(0).getItem(0)); - BOOST_CHECK_EQUAL(3U, pmiscTable.getOilPhasePressureColumn().size()); - BOOST_CHECK_EQUAL(200*1e5, pmiscTable.getOilPhasePressureColumn()[1]); - BOOST_CHECK_EQUAL(0.5, pmiscTable.getMiscibilityColumn()[1]); -} - -const std::string msfnData = R"( -TABDIMS - 2 / - -MSFN - 0.0 0.0 1.0 - 1.0 1.0 0.0 / - 0.0 0.0 1.0 - 0.5 0.3 0.7 - 1.0 1.0 0.0 / -)"; - -BOOST_AUTO_TEST_CASE( MSFN ) { - Parser parser; - auto deck = parser.parseString(msfnData); - - Opm::MsfnTable msfnTable1(deck.getKeyword("MSFN").getRecord(0).getItem(0)); - BOOST_CHECK_EQUAL(2U, msfnTable1.getGasPhaseFractionColumn().size()); - BOOST_CHECK_EQUAL(1.0, msfnTable1.getGasPhaseFractionColumn()[1]); - BOOST_CHECK_EQUAL(1.0, msfnTable1.getGasSolventRelpermMultiplierColumn()[1]); - BOOST_CHECK_EQUAL(0.0, msfnTable1.getOilRelpermMultiplierColumn()[1]); - - Opm::MsfnTable msfnTable2(deck.getKeyword("MSFN").getRecord(1).getItem(0)); - BOOST_CHECK_EQUAL(3U, msfnTable2.getGasPhaseFractionColumn().size()); - BOOST_CHECK_EQUAL(0.5, msfnTable2.getGasPhaseFractionColumn()[1]); - BOOST_CHECK_EQUAL(0.3, msfnTable2.getGasSolventRelpermMultiplierColumn()[1]); - BOOST_CHECK_EQUAL(0.7, msfnTable2.getOilRelpermMultiplierColumn()[1]); -} - -BOOST_AUTO_TEST_CASE( TLPMIXPA ) { - const std::string tlpmixpa = R"( - MISCIBLE - 1 3 / - - TLPMIXPA - 100 0.0 - 200 0.5 - 500 1.0 / - )"; - - Parser parser; - auto deck = parser.parseString(tlpmixpa); - Opm::TlpmixpaTable tlpmixpaTable(deck.getKeyword("TLPMIXPA").getRecord(0).getItem(0)); - BOOST_CHECK_EQUAL(3U, tlpmixpaTable.getOilPhasePressureColumn().size()); - BOOST_CHECK_EQUAL(200*1e5, tlpmixpaTable.getOilPhasePressureColumn()[1]); - BOOST_CHECK_EQUAL(0.5, tlpmixpaTable.getMiscibilityColumn()[1]); -} - -BOOST_AUTO_TEST_CASE( MULTREGT_ECLIPSE_STATE ) { - Parser parser; - auto deck = parser.parseFile(pathprefix() + "MULTREGT/MULTREGT.DATA"); - EclipseState state(deck); - const auto& transMult = state.getTransMult(); - - // Test NONNC - // cell 0 and 1 are neigbour - // The last occurence of multiplier between region 1 and 2 is 0.2. - // Note that MULTREGT is not direction dependent - BOOST_CHECK_EQUAL( 0.20 , transMult.getRegionMultiplier( 0 , 1 , FaceDir::DirEnum::XPlus)); - // cell 0 and 3 are not neigbours ==> 1 - BOOST_CHECK_EQUAL( 0.20 , transMult.getRegionMultiplier( 0 , 3 , FaceDir::DirEnum::XPlus)); - - // Test NNC - // cell 4 and 5 are neigbours ==> 1 - BOOST_CHECK_EQUAL( 1.00 , transMult.getRegionMultiplier( 4 , 5 , FaceDir::DirEnum::XPlus)); - // cell 4 and 7 are not neigbours - BOOST_CHECK_EQUAL( 0.50 , transMult.getRegionMultiplier( 4 , 7 , FaceDir::DirEnum::XPlus)); - - // Test direction X, returns 1 for directions other than +-X - BOOST_CHECK_EQUAL( 1.00 , transMult.getRegionMultiplier( 0 , 1 , FaceDir::DirEnum::YPlus)); - BOOST_CHECK_EQUAL( 1.00 , transMult.getRegionMultiplier( 0 , 1 , FaceDir::DirEnum::ZPlus)); - BOOST_CHECK_EQUAL( 0.20 , transMult.getRegionMultiplier( 0 , 1 , FaceDir::DirEnum::XMinus)); - BOOST_CHECK_EQUAL( 1.00 , transMult.getRegionMultiplier( 0 , 1 , FaceDir::DirEnum::YMinus)); - BOOST_CHECK_EQUAL( 1.00 , transMult.getRegionMultiplier( 0 , 1 , FaceDir::DirEnum::ZMinus)); - BOOST_CHECK_EQUAL( 0.20 , transMult.getRegionMultiplier( 1 , 0 , FaceDir::DirEnum::XPlus)); - BOOST_CHECK_EQUAL( 1.00 , transMult.getRegionMultiplier( 1 , 0 , FaceDir::DirEnum::YPlus)); - BOOST_CHECK_EQUAL( 1.00 , transMult.getRegionMultiplier( 1 , 0 , FaceDir::DirEnum::ZPlus)); - BOOST_CHECK_EQUAL( 0.20 , transMult.getRegionMultiplier( 1 , 0 , FaceDir::DirEnum::XMinus)); - BOOST_CHECK_EQUAL( 1.00 , transMult.getRegionMultiplier( 1 , 0 , FaceDir::DirEnum::YMinus)); - BOOST_CHECK_EQUAL( 1.00 , transMult.getRegionMultiplier( 1 , 0 , FaceDir::DirEnum::ZMinus)); - - // Multipliers between cells of the same region should return 1 - BOOST_CHECK_EQUAL( 1.00 , transMult.getRegionMultiplier( 0 , 2 , FaceDir::DirEnum::XPlus)); - BOOST_CHECK_EQUAL( 1.00 , transMult.getRegionMultiplier( 2 , 0 , FaceDir::DirEnum::XPlus)); - - // Test direcion XYZ, returns values for all directions - BOOST_CHECK_EQUAL( 1.50 , transMult.getRegionMultiplier( 0 , 4 , FaceDir::DirEnum::XPlus)); - BOOST_CHECK_EQUAL( 1.50 , transMult.getRegionMultiplier( 0 , 4 , FaceDir::DirEnum::YPlus)); - BOOST_CHECK_EQUAL( 1.50 , transMult.getRegionMultiplier( 0 , 4 , FaceDir::DirEnum::ZPlus)); - BOOST_CHECK_EQUAL( 1.50 , transMult.getRegionMultiplier( 4 , 0 , FaceDir::DirEnum::XPlus)); - - // The first record is overwritten by the third since MULTREGT is direction dependent - BOOST_CHECK_EQUAL( 0.60 , transMult.getRegionMultiplier( 3 , 7 , FaceDir::DirEnum::XPlus)); - BOOST_CHECK_EQUAL( 0.60 , transMult.getRegionMultiplier( 3 , 7 , FaceDir::DirEnum::YPlus)); - - // The 2 4 0.75 Z input is overwritten by 2 4 2.5 XY, ==) that 2 4 Z returns the 4 2 value = 0.6 - BOOST_CHECK_EQUAL( 0.60 , transMult.getRegionMultiplier( 7 , 3 , FaceDir::DirEnum::XPlus)); - BOOST_CHECK_EQUAL( 0.60 , transMult.getRegionMultiplier( 3 , 7 , FaceDir::DirEnum::ZPlus)); -} - -BOOST_AUTO_TEST_CASE( MULTISEGMENT_ABS ) { - Parser parser; - const std::string deckFile(pathprefix() + "SCHEDULE/SCHEDULE_MULTISEGMENT_WELL"); - const auto deck = parser.parseFile(deckFile); - - // for WELSEGS keyword - const auto& kw = deck.getKeyword("WELSEGS"); - - BOOST_CHECK_EQUAL( 7, kw.size() ); - - // check the information for the top segment and the segment set - { - const auto& rec1 = kw.getRecord(0); // top segment - - const std::string well_name = rec1.getItem("WELL").getTrimmedString(0); - const double depth_top = rec1.getItem("DEPTH").get< double >(0); - const double length_top = rec1.getItem("LENGTH").get< double >(0); - const double volume_top = rec1.getItem("WELLBORE_VOLUME").get< double >(0); - const WellSegments::LengthDepth length_depth_type = WellSegments::LengthDepthFromString(rec1.getItem("INFO_TYPE").getTrimmedString(0)); - const WellSegments::CompPressureDrop comp_pressure_drop = WellSegments::CompPressureDropFromString(rec1.getItem("PRESSURE_COMPONENTS").getTrimmedString(0)); - const WellSegments::MultiPhaseModel multiphase_model = WellSegments::MultiPhaseModelFromString(rec1.getItem("FLOW_MODEL").getTrimmedString(0)); - - BOOST_CHECK_EQUAL( "PROD01", well_name ); - BOOST_CHECK_EQUAL( 2512.5, depth_top ); - BOOST_CHECK_EQUAL( 2512.5, length_top ); - BOOST_CHECK_EQUAL( 1.0e-5, volume_top ); - const std::string length_depth_type_string = WellSegments::LengthDepthToString(length_depth_type); - BOOST_CHECK_EQUAL( length_depth_type_string, "ABS" ); - const std::string comp_pressure_drop_string = WellSegments::CompPressureDropToString(comp_pressure_drop); - BOOST_CHECK_EQUAL( comp_pressure_drop_string, "HF-" ); - const std::string multiphase_model_string = WellSegments::MultiPhaseModelToString(multiphase_model); - BOOST_CHECK_EQUAL( multiphase_model_string, "HO" ); - } - - // check the information for the other segments - // Here, we check the information for the segment 2 and 6 as samples. - { - const auto& rec2 = kw.getRecord(1); - const int segment1 = rec2.getItem("SEGMENT2").get< int >(0); - const int segment2 = rec2.getItem("SEGMENT2").get< int >(0); - BOOST_CHECK_EQUAL( 2, segment1 ); - BOOST_CHECK_EQUAL( 2, segment2 ); - const int branch = rec2.getItem("BRANCH").get< int >(0); - const int outlet_segment = rec2.getItem("JOIN_SEGMENT").get< int >(0); - const double segment_length = rec2.getItem("SEGMENT_LENGTH").get< double >(0); - const double depth_change = rec2.getItem("DEPTH_CHANGE").get< double >(0); - const double diameter = rec2.getItem("DIAMETER").get< double >(0); - const double roughness = rec2.getItem("ROUGHNESS").get< double >(0); - BOOST_CHECK_EQUAL( 1, branch ); - BOOST_CHECK_EQUAL( 1, outlet_segment ); - BOOST_CHECK_EQUAL( 2537.5, segment_length ); - BOOST_CHECK_EQUAL( 2537.5, depth_change ); - BOOST_CHECK_EQUAL( 0.3, diameter ); - BOOST_CHECK_EQUAL( 0.0001, roughness ); - } - - { - const auto& rec6 = kw.getRecord(4); - const int segment1 = rec6.getItem("SEGMENT2").get< int >(0); - const int segment2 = rec6.getItem("SEGMENT2").get< int >(0); - BOOST_CHECK_EQUAL( 6, segment1 ); - BOOST_CHECK_EQUAL( 6, segment2 ); - const int branch = rec6.getItem("BRANCH").get< int >(0); - const int outlet_segment = rec6.getItem("JOIN_SEGMENT").get< int >(0); - const double segment_length = rec6.getItem("SEGMENT_LENGTH").get< double >(0); - const double depth_change = rec6.getItem("DEPTH_CHANGE").get< double >(0); - const double diameter = rec6.getItem("DIAMETER").get< double >(0); - const double roughness = rec6.getItem("ROUGHNESS").get< double >(0); - BOOST_CHECK_EQUAL( 2, branch ); - BOOST_CHECK_EQUAL( 4, outlet_segment ); - BOOST_CHECK_EQUAL( 3037.5, segment_length ); - BOOST_CHECK_EQUAL( 2539.5, depth_change ); - BOOST_CHECK_EQUAL( 0.2, diameter ); - BOOST_CHECK_EQUAL( 0.0001, roughness ); - } - - { - const auto& rec7 = kw.getRecord(6); - const int segment1 = rec7.getItem("SEGMENT2").get< int >(0); - const int segment2 = rec7.getItem("SEGMENT2").get< int >(0); - BOOST_CHECK_EQUAL( 8, segment1 ); - BOOST_CHECK_EQUAL( 8, segment2 ); - const int branch = rec7.getItem("BRANCH").get< int >(0); - const int outlet_segment = rec7.getItem("JOIN_SEGMENT").get< int >(0); - const double segment_length = rec7.getItem("SEGMENT_LENGTH").get< double >(0); - const double depth_change = rec7.getItem("DEPTH_CHANGE").get< double >(0); - const double diameter = rec7.getItem("DIAMETER").get< double >(0); - const double roughness = rec7.getItem("ROUGHNESS").get< double >(0); - BOOST_CHECK_EQUAL( 3, branch ); - BOOST_CHECK_EQUAL( 7, outlet_segment ); - BOOST_CHECK_EQUAL( 3337.6, segment_length ); - BOOST_CHECK_EQUAL( 2534.5, depth_change ); - BOOST_CHECK_EQUAL( 0.2, diameter ); - BOOST_CHECK_EQUAL( 0.00015, roughness ); - } - - // for COMPSEG keyword - const auto& kw1 = deck.getKeyword("COMPSEGS"); - // check the size of the keywords - BOOST_CHECK_EQUAL( 8, kw1.size() ); - // first record only contains the well name - { - const auto& rec1 = kw1.getRecord(0); - const std::string well_name = rec1.getItem("WELL").getTrimmedString(0); - BOOST_CHECK_EQUAL( "PROD01", well_name ); - } - - // check the third record and the seventh record - { - const auto& rec3 = kw1.getRecord(2); - const int i = rec3.getItem("I").get< int >(0); - const int j = rec3.getItem("J").get< int >(0); - const int k = rec3.getItem("K").get< int >(0); - const int branch = rec3.getItem("BRANCH").get< int >(0); - const double distance_start = rec3.getItem("DISTANCE_START").get< double >(0); - const double distance_end = rec3.getItem("DISTANCE_END").get< double >(0); - - BOOST_CHECK_EQUAL( 20, i ); - BOOST_CHECK_EQUAL( 1, j ); - BOOST_CHECK_EQUAL( 2, k ); - BOOST_CHECK_EQUAL( 1, branch ); - BOOST_CHECK_EQUAL( 2525.0, distance_start ); - BOOST_CHECK_EQUAL( 2550.0, distance_end ); - } - - { - const auto& rec7 = kw1.getRecord(6); - const int i = rec7.getItem("I").get< int >(0); - const int j = rec7.getItem("J").get< int >(0); - const int k = rec7.getItem("K").get< int >(0); - const int branch = rec7.getItem("BRANCH").get< int >(0); - const double distance_start = rec7.getItem("DISTANCE_START").get< double >(0); - const double distance_end = rec7.getItem("DISTANCE_END").get< double >(0); - - BOOST_CHECK_EQUAL( 17, i ); - BOOST_CHECK_EQUAL( 1, j ); - BOOST_CHECK_EQUAL( 2, k ); - BOOST_CHECK_EQUAL( 2, branch ); - BOOST_CHECK_EQUAL( 3037.5, distance_start ); - BOOST_CHECK_EQUAL( 3237.5, distance_end ); - } - - - const EclipseState state(deck); - const TableManager table ( deck ); - Runspec runspec (deck); - auto python = std::make_shared(); - const Schedule sched(deck, state, python); - - // checking the relation between segments and completions - // and also the depth of completions - BOOST_CHECK(sched.hasWell("PROD01")); - const auto& well = sched.getWell("PROD01", 0); - const auto& connections = well.getConnections(); - BOOST_CHECK_EQUAL(7U, connections.size()); - - const Connection& connection5 = connections.get(4); - const int seg_number_connection5 = connection5.segment(); - const double connection5_depth = connection5.depth(); - BOOST_CHECK_EQUAL(seg_number_connection5, 6); - BOOST_CHECK_CLOSE(connection5_depth, 2538.83, 0.001); - - const Connection& connection6 = connections.get(5); - const int seg_number_connection6 = connection6.segment(); - const double connection6_depth = connection6.depth(); - BOOST_CHECK_EQUAL(seg_number_connection6, 6); - BOOST_CHECK_CLOSE(connection6_depth, 2537.83, 0.001); - - const Connection& connection1 = connections.get(0); - const int seg_number_connection1 = connection1.segment(); - const double connection1_depth = connection1.depth(); - BOOST_CHECK_EQUAL(seg_number_connection1, 1); - BOOST_CHECK_EQUAL(connection1_depth, 2512.5); - - const Connection& connection3 = connections.get(2); - const int seg_number_connection3 = connection3.segment(); - const double connection3_depth = connection3.depth(); - BOOST_CHECK_EQUAL(seg_number_connection3, 3); - BOOST_CHECK_EQUAL(connection3_depth, 2562.5); - -} - -BOOST_AUTO_TEST_CASE( PLYADS ) { - Parser parser; - auto deck = parser.parseFile(pathprefix() + "POLYMER/plyads.data"); - const auto& kw = deck.getKeyword("PLYADS"); - const auto& rec = kw.getRecord(0); - const auto& item = rec.getItem(0); - - BOOST_CHECK_EQUAL( 0.0 , item.get< double >(0) ); - BOOST_CHECK_EQUAL( 0.25 , item.get< double >(2) ); -} - -BOOST_AUTO_TEST_CASE( PLYADSS ) { - Parser parser; - std::string deckFile(pathprefix() + "POLYMER/plyadss.data"); - auto deck = parser.parseFile(deckFile); - const auto& kw = deck.getKeyword("PLYADSS"); - BOOST_CHECK_EQUAL( kw.size() , 11U ); -} - -BOOST_AUTO_TEST_CASE( PLYDHFLF ) { - Parser parser; - std::string deckFile(pathprefix() + "POLYMER/plydhflf.data"); - auto deck = parser.parseFile(deckFile); - const auto& kw = deck.getKeyword("PLYDHFLF"); - const auto& rec = kw.getRecord(0); - const auto& item = rec.getItem(0); - - BOOST_CHECK_EQUAL( 0.0 , item.get< double >(0) ); - BOOST_CHECK_EQUAL( 365.0, item.get< double >(1) ); - BOOST_CHECK_EQUAL( 200.0 , item.get< double >(5) ); -} - -BOOST_AUTO_TEST_CASE( PLYSHLOG ) { - Parser parser; - std::string deckFile(pathprefix() + "POLYMER/plyshlog.data"); - auto deck = parser.parseFile(deckFile); - const auto& kw = deck.getKeyword("PLYSHLOG"); - const auto& rec1 = kw.getRecord(0); // reference conditions - - const auto& itemRefPolyConc = rec1.getItem("REF_POLYMER_CONCENTRATION"); - const auto& itemRefSali = rec1.getItem("REF_SALINITY"); - const auto& itemRefTemp = rec1.getItem("REF_TEMPERATURE"); - - BOOST_CHECK_EQUAL( true, itemRefPolyConc.hasValue(0) ); - BOOST_CHECK_EQUAL( true, itemRefSali.hasValue(0) ); - BOOST_CHECK_EQUAL( false, itemRefTemp.hasValue(0) ); - - BOOST_CHECK_EQUAL( 1.0, itemRefPolyConc.get< double >(0) ); - BOOST_CHECK_EQUAL( 3.0, itemRefSali.get< double >(0) ); - - const auto& rec2 = kw.getRecord(1); - const auto& itemData = rec2.getItem(0); - - BOOST_CHECK_EQUAL( 1.e-7 , itemData.get< double >(0) ); - BOOST_CHECK_EQUAL( 1.0 , itemData.get< double >(1) ); - BOOST_CHECK_EQUAL( 1.0 , itemData.get< double >(2) ); - BOOST_CHECK_EQUAL( 1.2 , itemData.get< double >(3) ); - BOOST_CHECK_EQUAL( 1.e3 , itemData.get< double >(4) ); - BOOST_CHECK_EQUAL( 2.4 , itemData.get< double >(5) ); -} - -BOOST_AUTO_TEST_CASE( PLYVISC ) { - Parser parser; - std::string deckFile(pathprefix() + "POLYMER/plyvisc.data"); - auto deck = parser.parseFile(deckFile); - const auto& kw = deck.getKeyword("PLYVISC"); - const auto& rec = kw.getRecord(0); - const auto& item = rec.getItem(0); - - BOOST_CHECK_EQUAL( 0.0 , item.get< double >(0) ); - BOOST_CHECK_EQUAL( 1.25 , item.get< double >(2) ); -} - -BOOST_AUTO_TEST_CASE( PORO_PERMX ) { - Parser parser; - std::string poroFile(pathprefix() + "PORO/PORO1"); - auto deck = parser.parseFile(poroFile); - const auto& kw1 = deck.getKeyword("PORO" , 0); - const auto& kw2 = deck.getKeyword("PERMX" , 0); - - BOOST_CHECK_THROW( kw1.getIntData() , std::logic_error ); - BOOST_CHECK_THROW( kw1.getStringData() , std::logic_error ); - - const std::vector& poro = kw1.getRawDoubleData(); - BOOST_CHECK_EQUAL( 440U , poro.size() ); - BOOST_CHECK_EQUAL( 0.233782813 , poro[0]); - BOOST_CHECK_EQUAL( 0.251224369 , poro[1]); - BOOST_CHECK_EQUAL( 0.155628711 , poro[439]); - - const auto& permx = kw2.getSIDoubleData(); - BOOST_CHECK_EQUAL( 1000U , permx.size() ); - - BOOST_CHECK_CLOSE( Metric::Permeability * 1 , permx[0] , 0.001); - BOOST_CHECK_CLOSE( Metric::Permeability * 2 , permx[1] , 0.001); - BOOST_CHECK_CLOSE( Metric::Permeability * 3 , permx[2] , 0.001); - BOOST_CHECK_CLOSE( Metric::Permeability * 10, permx[999] , 0.001); -} - -BOOST_AUTO_TEST_CASE( PRORDER ) { - const std::string input = R"( --- PROD NO 1 NO 2 NO 3 NO 4 NO 5 --- ORDER OPTN OPTN OPTN OPTN OPTN -PRORDER - DRILL / - NO / - -PRORDER - DRILL THP REPREF / - NO / - )"; - Parser().parseString( input ); -} - -BOOST_AUTO_TEST_CASE( RSVD ) { - Parser parser; - std::string pvtgFile(pathprefix() + "RSVD/RSVD.txt"); - auto deck = parser.parseFile(pvtgFile); - const auto& kw1 = deck.getKeyword("RSVD" , 0); - BOOST_CHECK_EQUAL( 6U , kw1.size() ); - - const auto& rec1 = kw1.getRecord(0); - const auto& rec3 = kw1.getRecord(2); - - const auto& item1 = rec1.getItem("DATA"); - BOOST_CHECK( fabs(item1.getSIDouble(0) - 2382) < 0.001); - - const auto& item3 = rec3.getItem("DATA"); - BOOST_CHECK( fabs(item3.getSIDouble(7) - 106.77) < 0.001); -} - -BOOST_AUTO_TEST_CASE( PVTG ) { -const std::string pvtgData = R"( -TABDIMS --- NTSFUN NTPVT NSSFUN NPPVT NTFIP NRPVT - 1 2 30 24 10 20 / - -PVTG --- - 20.00 0.00002448 0.061895 0.01299 - 0.00001224 0.061810 0.01300 - 0.00000000 0.061725 0.01300 / - 40.00 0.00000628 0.030252 0.01383 - 0.00000314 0.030249 0.01383 - 0.00000000 0.030245 0.01383 / -/ - 197.66 0.00006327 1* 0.02160 - 0.00003164 * 0.02122 - 0.00000000 0.005860 0.02086 / - 231.13 0.00010861 0.005042 0.02477 - 0.00005431 0.005061 0.02389 - 0.00000000 0.005082 0.02306 / -/ -)"; - - Parser parser; - auto deck = parser.parseString(pvtgData); - const auto& kw1 = deck.getKeyword("PVTG" , 0); - BOOST_CHECK_EQUAL(5U , kw1.size()); - - const auto& record0 = kw1.getRecord(0); - const auto& record1 = kw1.getRecord(1); - const auto& record2 = kw1.getRecord(2); - const auto& record3 = kw1.getRecord(3); - const auto& record4 = kw1.getRecord(4); - - const auto& item0_0 = record0.getItem("GAS_PRESSURE"); - const auto& item0_1 = record0.getItem("DATA"); - BOOST_CHECK(item0_0.hasValue(0)); - BOOST_CHECK_EQUAL(9U , item0_1.data_size()); - - const auto& item1_0 = record1.getItem("GAS_PRESSURE"); - const auto& item1_1 = record1.getItem("DATA"); - BOOST_CHECK(item1_0.hasValue(0)); - BOOST_CHECK_EQUAL(9U , item1_1.data_size()); - - const auto& item2_0 = record2.getItem("GAS_PRESSURE"); - const auto& item2_1 = record2.getItem("DATA"); - BOOST_CHECK( item2_0.defaultApplied(0)); - BOOST_CHECK_EQUAL(0U , item2_1.data_size()); - - - const auto& item3_0 = record3.getItem("GAS_PRESSURE"); - const auto& item3_1 = record3.getItem("DATA"); - BOOST_CHECK( !item3_1.defaultApplied(0)); - BOOST_CHECK( item3_1.defaultApplied(1)); - BOOST_CHECK( !item3_1.defaultApplied(2)); - BOOST_CHECK( !item3_1.defaultApplied(3)); - BOOST_CHECK( item3_1.defaultApplied(4)); - BOOST_CHECK( !item3_1.defaultApplied(5)); - BOOST_CHECK(item3_0.hasValue(0)); - BOOST_CHECK_EQUAL(9U , item3_1.data_size()); - - - const auto& item4_0 = record4.getItem("GAS_PRESSURE"); - const auto& item4_1 = record4.getItem("DATA"); - BOOST_CHECK(item4_0.hasValue(0)); - BOOST_CHECK_EQUAL(9U , item4_1.data_size()); - - /* - { - Opm::PvtgTable pvtgTable; - pvtgTable.initFORUNITTESTONLY(kw1, 0); - - const auto &outerTable = *pvtgTable.getOuterTable(); - const auto &innerTable0 = *pvtgTable.getInnerTable(0); - - BOOST_CHECK_EQUAL(2U, outerTable.numRows()); - BOOST_CHECK_EQUAL(4U, outerTable.numColumns()); - BOOST_CHECK_EQUAL(3U, innerTable0.numRows()); - BOOST_CHECK_EQUAL(3U, innerTable0.numColumns()); - - BOOST_CHECK_EQUAL(20.0e5, outerTable.getPressureColumn()[0]); - BOOST_CHECK_EQUAL(0.00002448, outerTable.getOilSolubilityColumn()[0]); - BOOST_CHECK_EQUAL(outerTable.getOilSolubilityColumn()[0], innerTable0.getOilSolubilityColumn()[0]); - BOOST_CHECK_EQUAL(0.061895, outerTable.getGasFormationFactorColumn()[0]); - BOOST_CHECK_EQUAL(outerTable.getGasFormationFactorColumn()[0], innerTable0.getGasFormationFactorColumn()[0]); - BOOST_CHECK_EQUAL(1.299e-5, outerTable.getGasViscosityColumn()[0]); - BOOST_CHECK_EQUAL(outerTable.getGasViscosityColumn()[0], innerTable0.getGasViscosityColumn()[0]); - } - */ -} - -BOOST_AUTO_TEST_CASE( PVTO ) { -const std::string pvtoData = R"( -TABDIMS --- NTSFUN NTPVT NSSFUN NPPVT NTFIP NRPVT - 1 2 30 24 10 20 / - -PVTO --- Rs PO BO MUO - 1e-3 1 1.20 1.02 - 250 1.15 0.95 - 500 1.01 0.93 / - 1e-2 14.8 1.30 1.03 - 251 1.25 0.98 - 502 1.05 0.95 / -/ - 1e-1 1.1 1.21 1.03 - 253 1.16 0.96 - 504 1.02 0.97 / - 1e00 15 1.31 1.04 - 255 1.26 0.99 - 506 1.06 0.96 / -/ -)"; - - Parser parser; - auto deck = parser.parseString(pvtoData); - const auto& kw1 = deck.getKeyword("PVTO" , 0); - BOOST_CHECK_EQUAL(5U , kw1.size()); - - const auto& record0 = kw1.getRecord(0); - const auto& record1 = kw1.getRecord(1); - const auto& record2 = kw1.getRecord(2); - const auto& record3 = kw1.getRecord(3); - const auto& record4 = kw1.getRecord(4); - - const auto& item0_0 = record0.getItem("RS"); - const auto& item0_1 = record0.getItem("DATA"); - BOOST_CHECK(item0_0.hasValue(0)); - BOOST_CHECK_EQUAL(9U , item0_1.data_size()); - BOOST_CHECK_EQUAL(2U , record0.size()); - - const auto& item1_0 = record1.getItem("RS"); - const auto& item1_1 = record1.getItem("DATA"); - BOOST_CHECK(item1_0.hasValue(0)); - BOOST_CHECK_EQUAL(9U , item1_1.data_size()); - BOOST_CHECK_EQUAL(2U , record1.size()); - - const auto& item2_0 = record2.getItem("RS"); - const auto& item2_1 = record2.getItem("DATA"); - BOOST_CHECK(item2_0.defaultApplied(0)); - BOOST_CHECK_EQUAL(0U , item2_1.data_size()); - BOOST_CHECK_EQUAL(2U , record2.size()); - - const auto& item3_0 = record3.getItem("RS"); - const auto& item3_1 = record3.getItem("DATA"); - BOOST_CHECK(item3_0.hasValue(0)); - BOOST_CHECK_EQUAL(9U , item3_1.data_size()); - BOOST_CHECK_EQUAL(2U , record3.size()); - - const auto& item4_0 = record4.getItem("RS"); - const auto& item4_1 = record4.getItem("DATA"); - BOOST_CHECK(item4_0.hasValue(0)); - BOOST_CHECK_EQUAL(9U , item4_1.data_size()); - BOOST_CHECK_EQUAL(2U , record4.size()); - - - Opm::PvtoTable pvtoTable(kw1 , 0); - BOOST_CHECK_EQUAL(2, pvtoTable.size()); - - const auto &table0 = pvtoTable.getUnderSaturatedTable(0); - const auto& BO = table0.getColumn( "BO" ); - - BOOST_CHECK_EQUAL( 3, table0.numRows()); - BOOST_CHECK_EQUAL( 3, table0.numColumns()); - BOOST_CHECK_EQUAL( BO.front( ) , 1.20 ); - BOOST_CHECK_EQUAL( BO.back( ) , 1.01 ); - - BOOST_CHECK_CLOSE(1.15 , table0.evaluate( "BO" , 250*1e5 ) , 1e-6); - - BOOST_CHECK_CLOSE( 1.15 , pvtoTable.evaluate( "BO" , 1e-3 , 250*1e5 ) , 1e-6 ); - BOOST_CHECK_CLOSE( 1.15 , pvtoTable.evaluate( "BO" , 0.0 , 250*1e5 ) , 1e-6 ); -} - -BOOST_AUTO_TEST_CASE( SGOF ) { -const std::string parserData = R"( -TABDIMS --- NTSFUN NTPVT NSSFUN NPPVT NTFIP NRPVT - 1 1 30 1 1 1 / - --- S_g k_rg k_rog p_cog -SGOF - 0.1 0.0 1.0 0.0 - 0.2 0.1 1.0 1.0 - 0.3 0.2 0.9 2.0 - 0.4 0.3 0.8 3.0 - 0.5 0.5 0.5 4.0 - 0.6 0.6 0.4 5.0 - 0.7 0.8 0.3 6.0 - 0.8 0.9 0.2 7.0 - 0.9 0.5 0.1 8.0 - 1.0 1.0 0.1 9.0 /; -)"; - Parser parser; - auto deck = parser.parseString(parserData); - - const auto& kw1 = deck.getKeyword("SGOF"); - BOOST_CHECK_EQUAL(1U , kw1.size()); - const auto& record0 = kw1.getRecord(0); - BOOST_CHECK_EQUAL(1U , record0.size()); - const auto& item0 = record0.getItem(0); - BOOST_CHECK_EQUAL(10U * 4, item0.data_size()); - - Opm::SgofTable sgofTable(deck.getKeyword("SGOF").getRecord(0).getItem(0), false); - BOOST_CHECK_EQUAL(10U, sgofTable.getSgColumn().size()); - BOOST_CHECK_EQUAL(0.1, sgofTable.getSgColumn()[0]); - BOOST_CHECK_EQUAL(0.0, sgofTable.getKrgColumn()[0]); - BOOST_CHECK_EQUAL(1.0, sgofTable.getKrogColumn()[0]); - BOOST_CHECK_EQUAL(0.0, sgofTable.getPcogColumn()[0]); -} - -BOOST_AUTO_TEST_CASE( SWOF ) { - - const std::string parserData = R"( -TABDIMS --- NTSFUN NTPVT NSSFUN NPPVT NTFIP NRPVT - 1 1 30 1 1 1 / - --- S_w k_rw k_row p_cow -SWOF - 0.1 2* 0.0 - 0.2 0.1 1.0 1.0 - 0.3 1* 0.9 2.0 - 0.4 0.3 1* 3.0 - 0.5 0.5 0.5 4.0 - 0.6 0.6 0.4 1* - 0.7 0.8 0.3 6.0 - 0.8 0.9 0.2 7.0 - 0.9 0.5 0.1 8.0 - 1.0 1* 0.1 9.0 / -)"; - Parser parser; - auto deck = parser.parseString(parserData); - - const auto& kw1 = deck.getKeyword("SWOF"); - const auto& record0 = kw1.getRecord(0); - const auto& item0 = record0.getItem(0); - BOOST_CHECK_EQUAL(1U , kw1.size()); - BOOST_CHECK_EQUAL(1U , record0.size()); - BOOST_CHECK_EQUAL(10U * 4, item0.data_size()); - - Opm::SwofTable swofTable(deck.getKeyword("SWOF").getRecord(0).getItem(0), false); - BOOST_CHECK_EQUAL(10U, swofTable.getSwColumn().size()); - BOOST_CHECK_CLOSE(0.1, swofTable.getSwColumn()[0], 1e-8); - BOOST_CHECK_CLOSE(1.0, swofTable.getSwColumn().back(), 1e-8); - - BOOST_CHECK_CLOSE(0.1, swofTable.getKrwColumn()[0], 1e-8); - BOOST_CHECK_CLOSE(0.1, swofTable.getKrwColumn()[1], 1e-8); - BOOST_CHECK_CLOSE(0.2, swofTable.getKrwColumn()[2], 1e-8); - BOOST_CHECK_CLOSE(0.3, swofTable.getKrwColumn()[3], 1e-8); - BOOST_CHECK_CLOSE(0.5, swofTable.getKrwColumn().back(), 1e-8); - - BOOST_CHECK_CLOSE(1.0, swofTable.getKrowColumn()[0], 1e-8); - BOOST_CHECK_CLOSE(0.9, swofTable.getKrowColumn()[2], 1e-8); - BOOST_CHECK_CLOSE(0.7, swofTable.getKrowColumn()[3], 1e-8); - BOOST_CHECK_CLOSE(0.5, swofTable.getKrowColumn()[4], 1e-8); - - BOOST_CHECK_CLOSE(4.0e5, swofTable.getPcowColumn()[4], 1e-8); - BOOST_CHECK_CLOSE(5.0e5, swofTable.getPcowColumn()[5], 1e-8); - BOOST_CHECK_CLOSE(6.0e5, swofTable.getPcowColumn()[6], 1e-8); - - BOOST_CHECK_CLOSE(0.10, swofTable.evaluate("KRW", -0.1), 1e-8); - BOOST_CHECK_CLOSE(0.15, swofTable.evaluate("KRW", 0.25), 1e-8); - BOOST_CHECK_CLOSE(0.50, swofTable.evaluate("KRW", 1.1), 1e-8); -} - -BOOST_AUTO_TEST_CASE( SLGOF ) { - -const std::string parserData = R"( -TABDIMS --- NTSFUN NTPVT NSSFUN NPPVT NTFIP NRPVT - 1 1 30 1 1 1 / - --- S_l k_rg k_rog p_cog -SLGOF - 0.1 1.0 0.0 9.0 - 0.2 0.9 0.2 8.0 - 0.3 0.8 0.3 7.0 - 0.4 0.7 0.3 6.0 - 0.5 0.6 0.4 5.0 - 0.6 0.5 0.5 4.0 - 0.7 0.3 0.8 3.0 - 0.8 0.2 0.9 2.0 - 0.9 0.1 1.0 1.0 - 1.0 0.0 1.0 0.0 /; -)"; - - Parser parser; - auto deck = parser.parseString(parserData); - - const auto& kw1 = deck.getKeyword("SLGOF"); - const auto& record0 = kw1.getRecord(0); - const auto& item0 = record0.getItem(0); - BOOST_CHECK_EQUAL(1U , kw1.size()); - BOOST_CHECK_EQUAL(1U , record0.size()); - BOOST_CHECK_EQUAL(10U * 4, item0.data_size()); - - Opm::SlgofTable slgofTable( deck.getKeyword("SLGOF").getRecord(0).getItem(0), false ); - BOOST_CHECK_EQUAL(10U, slgofTable.getSlColumn().size()); - BOOST_CHECK_EQUAL(0.1, slgofTable.getSlColumn()[0]); - BOOST_CHECK_EQUAL(1.0, slgofTable.getSlColumn()[9]); - BOOST_CHECK_EQUAL(0.0, slgofTable.getKrgColumn()[9]); - BOOST_CHECK_EQUAL(1.0, slgofTable.getKrogColumn()[9]); - BOOST_CHECK_EQUAL(0.0, slgofTable.getPcogColumn()[9]); -} - -BOOST_AUTO_TEST_CASE( TITLE ) { - Parser parser; - std::string fileWithTitleKeyword(pathprefix() + "TITLE/TITLE1.txt"); - - auto deck = parser.parseFile(fileWithTitleKeyword); - - BOOST_CHECK_EQUAL(size_t(2), deck.size()); - BOOST_CHECK_EQUAL (true, deck.hasKeyword("TITLE")); - - const auto& titleKeyword = deck.getKeyword("TITLE"); - const auto& record = titleKeyword.getRecord(0); - const auto& item = record.getItem(0); - - std::vector itemValue = item.getData< std::string >(); - std::vector expected = {"This", "is", "the", "title", "of", "the", "model."}; - BOOST_CHECK(itemValue == expected); - BOOST_CHECK_EQUAL(true, deck.hasKeyword("START")); -} - -BOOST_AUTO_TEST_CASE( TOPS ) { - Parser parser; - std::string deckFile(pathprefix() + "GRID/TOPS.DATA"); - auto deck = parser.parseFile(deckFile); - EclipseState state(deck); - const auto& grid = state.getInputGrid(); - - BOOST_CHECK_EQUAL( grid.getNX() , 9 ); - BOOST_CHECK_EQUAL( grid.getNY() , 9 ); - BOOST_CHECK_EQUAL( grid.getNZ() , 2 ); - - for (size_t g=0; g < 9*9*2; g++) - BOOST_CHECK_CLOSE( grid.getCellVolume( g ) , 400*300*10 , 0.1); - - for (size_t k=0; k < grid.getNZ(); k++) { - for (size_t j=0; j < grid.getNY(); j++) { - for (size_t i=0; i < grid.getNX(); i++) { - auto pos = grid.getCellCenter( i,j,k ); - BOOST_CHECK_CLOSE( std::get<0>(pos) , i*400 + 200 , 0.10 ); - BOOST_CHECK_CLOSE( std::get<1>(pos) , j*300 + 150 , 0.10 ); - BOOST_CHECK_CLOSE( std::get<2>(pos) , k*10 + 5 + 2202 , 0.10 ); - } - } - } -} - -BOOST_AUTO_TEST_CASE( TRACERS ) { - const std::string input = R"( -RUNSPEC --- NO OIL NO WAT NO GAS NO ENV DIFF MAX MIN TRACER --- TRACERS TRACERS TRACERS TRACERS CONTL NONLIN NONLIN NONLIN -TRACERS - 0 0 1 0 'NODIFF' 1* 1* 1* / - -)"; - Parser().parseString( input ); -} - -BOOST_AUTO_TEST_CASE( TUNINGDP ) { - const std::string input = R"( -TUNINGDP -/ -TUNINGDP - 1.0 -/ -TUNINGDP - 1.0 2.0 -/ -TUNINGDP - 1.0 2.0 3.0 -/ -TUNINGDP - 1.0 2.0 3.0 4.0 -/ - -)"; - Parser().parseString( input ); -} - -BOOST_AUTO_TEST_CASE( TVDP ) { - Parser parser; - std::string poroFile(pathprefix() + "TVDP/TVDP1"); - auto deck = parser.parseFile(poroFile); - - BOOST_CHECK(!deck.hasKeyword("TVDP*")); - BOOST_CHECK( deck.hasKeyword("TVDPA")); - BOOST_CHECK( deck.hasKeyword("TVDP1")); - BOOST_CHECK( deck.hasKeyword("TVDPXX")); - BOOST_CHECK( deck.hasKeyword("TVDPYY")); -} - -BOOST_AUTO_TEST_CASE( VFPPROD ) { - Parser parser; - std::string file(pathprefix() + "VFPPROD/VFPPROD1"); - BOOST_CHECK( parser.isRecognizedKeyword("VFPPROD")); - - auto deck = parser.parseFile(file); - const auto& VFPPROD1 = deck.getKeyword("VFPPROD" , 0); - const auto& BPR = deck.getKeyword("BPR" , 0); - const auto& VFPPROD2 = deck.getKeyword("VFPPROD" , 1); - - BOOST_CHECK_EQUAL( 573U , VFPPROD1.size() ); - BOOST_CHECK_EQUAL( 1U , BPR.size()); - BOOST_CHECK_EQUAL( 573U , VFPPROD2.size()); - - { - const auto& record = VFPPROD1.getRecord(0); - - BOOST_CHECK_EQUAL( record.getItem("TABLE").get< int >(0) , 32 ); - BOOST_CHECK_EQUAL( record.getItem("DATUM_DEPTH").getSIDouble(0) , 394); - BOOST_CHECK_EQUAL( record.getItem("RATE_TYPE").get< std::string >(0) , "LIQ"); - BOOST_CHECK_EQUAL( record.getItem("WFR").get< std::string >(0) , "WCT"); - BOOST_CHECK_EQUAL( record.getItem("GFR").get< std::string >(0) , "GOR"); - } - - { - const auto& record = VFPPROD1.getRecord(1); - const auto& item = record.getItem("FLOW_VALUES"); - - BOOST_CHECK_EQUAL( item.data_size() , 12 ); - BOOST_CHECK_EQUAL( item.get< double >(0) , 100 ); - BOOST_CHECK_EQUAL( item.get< double >(11) , 20000 ); - } - - { - const auto& record = VFPPROD1.getRecord(2); - const auto& item = record.getItem("THP_VALUES"); - - BOOST_CHECK_EQUAL( item.data_size() , 7 ); - BOOST_CHECK_CLOSE( item.get< double >(0) , 16.01 , 0.0001 ); - BOOST_CHECK_CLOSE( item.get< double >(6) , 61.01 , 0.0001 ); - } - - { - const auto& record = VFPPROD1.getRecord(3); - const auto& item = record.getItem("WFR_VALUES"); - - BOOST_CHECK_EQUAL( item.data_size() , 9 ); - BOOST_CHECK_CLOSE( item.get< double >(1) , 0.1 , 0.0001 ); - BOOST_CHECK_CLOSE( item.get< double >(7) , 0.9 , 0.0001 ); - } - - { - const auto& record = VFPPROD1.getRecord(4); - const auto& item = record.getItem("GFR_VALUES"); - - BOOST_CHECK_EQUAL( item.data_size() , 9 ); - BOOST_CHECK_EQUAL( item.get< double >(0) , 90 ); - BOOST_CHECK_EQUAL( item.get< double >(8) , 10000 ); - } - - { - const auto& record = VFPPROD1.getRecord(5); - const auto& item = record.getItem("ALQ_VALUES"); - - BOOST_CHECK_EQUAL( item.data_size() , 1 ); - BOOST_CHECK_EQUAL( item.get< double >(0) , 0 ); - } - - { - const auto& record = VFPPROD1.getRecord(6); - - { - const auto& item = record.getItem("THP_INDEX"); - BOOST_CHECK( item.hasValue(0)); - BOOST_CHECK_EQUAL( item.get< int >(0) , 1 ); - } - - { - const auto& item = record.getItem("WFR_INDEX"); - BOOST_CHECK( item.hasValue(0)); - BOOST_CHECK_EQUAL( item.get< int >(0) , 1 ); - } - { - const auto& item = record.getItem("GFR_INDEX"); - BOOST_CHECK( item.hasValue(0)); - BOOST_CHECK_EQUAL( item.get< int >(0) , 1 ); - } - { - const auto& item = record.getItem("ALQ_INDEX"); - BOOST_CHECK( item.hasValue(0)); - BOOST_CHECK_EQUAL( item.get< int >(0) , 1 ); - } - { - const auto& item = record.getItem("VALUES"); - BOOST_CHECK_EQUAL( item.data_size() , 12 ); - BOOST_CHECK_EQUAL( item.get< double >(0) , 44.85 ); - BOOST_CHECK_EQUAL( item.get< double >(11) , 115.14 ); - } - } - - { - const auto& record = VFPPROD1.getRecord(572); - { - const auto& item = record.getItem("THP_INDEX"); - BOOST_CHECK( item.hasValue(0)); - BOOST_CHECK_EQUAL( item.get< int >(0) , 7 ); - } - { - const auto& item = record.getItem("WFR_INDEX"); - BOOST_CHECK( item.hasValue(0)); - BOOST_CHECK_EQUAL( item.get< int >(0) , 9 ); - } - { - const auto& item = record.getItem("GFR_INDEX"); - BOOST_CHECK( item.hasValue(0)); - BOOST_CHECK_EQUAL( item.get< int >(0) , 9 ); - } - { - const auto& item = record.getItem("ALQ_INDEX"); - BOOST_CHECK( item.hasValue(0)); - BOOST_CHECK_EQUAL( item.get< int >(0) , 1 ); - } - { - const auto& item = record.getItem("VALUES"); - BOOST_CHECK_EQUAL( item.data_size() , 12 ); - BOOST_CHECK_EQUAL( item.get< double >(0) , 100.80 ); - BOOST_CHECK_EQUAL( item.get< double >(11) , 147.79 ); - } - } -} - -BOOST_AUTO_TEST_CASE( WCHONHIST ) { - Parser parser; - std::string wconhistFile(pathprefix() + "WCONHIST/WCONHIST1"); - auto deck = parser.parseFile(wconhistFile); - const auto& kw1 = deck.getKeyword("WCONHIST" , 0); - BOOST_CHECK_EQUAL( 3U , kw1.size() ); - - const auto& rec1 = kw1.getRecord(0); - BOOST_CHECK_EQUAL( 11U , rec1.size() ); - - const auto& rec3 = kw1.getRecord(2); - BOOST_CHECK_EQUAL( 11U , rec3.size() ); - - const auto& item1 = rec1.getItem("WELL"); - const auto& item1_index = rec1.getItem(0); - - BOOST_CHECK_EQUAL( &item1 , &item1_index ); - BOOST_CHECK_EQUAL( "OP_1" , item1.get< std::string >(0)); - - const auto& kw2 = deck.getKeyword( "WCONHIST", 1 ); - BOOST_CHECK_EQUAL( "OP_3" , rec3.getItem("WELL").get< std::string >(0)); - BOOST_CHECK_EQUAL( 2U , deck.count("WCONHIST")); - BOOST_CHECK_EQUAL( "OP_3_B" , kw2.getRecord( 2 ).getItem("WELL").get< std::string >(0)); - BOOST_CHECK( !deck.hasKeyword( "DIMENS" ) ); -} - -BOOST_AUTO_TEST_CASE( WDFACCOR ) { - const std::string input = R"( --- WELL COEFF POWER POWER --- NAME A B C -WDFACCOR - '*' 1.200E-3 -1.045 0.0 / -/ -)"; - Parser().parseString( input ); -} - -BOOST_AUTO_TEST_CASE( WEFAC ) { - const std::string input = R"( --- WELL EFF NETWK --- NAME FACT OPTN - -WEFAC - '* ' 0.950 / -/ -)"; - Parser().parseString( input ); -} - -BOOST_AUTO_TEST_CASE( WELL_PROBE ) { - const std::string validDeckString = R"( -WBHP - / -WOPR - /; -)"; - Parser parser; - - // TODO: for some reason, the parser does not seem to throw here. Investigate -/* - const char *invalidDeckString = - "WELL_PROBE\n" - "/\n"; - BOOST_CHECK_THROW(parser->parseString(invalidDeckString), std::invalid_argument); -*/ - - auto deck = parser.parseString(validDeckString); - BOOST_CHECK( !deck.hasKeyword("WELL_PROBE")); - BOOST_CHECK( deck.hasKeyword("WBHP")); - BOOST_CHECK( deck.hasKeyword("WOPR")); - BOOST_CHECK( !deck.hasKeyword("WWPR")); -} - -BOOST_AUTO_TEST_CASE( WCONPROD ) { - Parser parser; - std::string wconprodFile(pathprefix() + "WellWithWildcards/WCONPROD1"); - auto deck = parser.parseFile(wconprodFile); - EclipseGrid grid(30,30,30); - TableManager table ( deck ); - FieldPropsManager fp( deck, Phases{true, true, true}, grid, table); - Runspec runspec (deck); - auto python = std::make_shared(); - Schedule sched(deck, grid, fp, runspec, python); - - BOOST_CHECK_EQUAL(5U, sched.numWells()); - BOOST_CHECK(sched.hasWell("INJE1")); - BOOST_CHECK(sched.hasWell("PROD2")); - BOOST_CHECK(sched.hasWell("PROD3")); - BOOST_CHECK(sched.hasWell("PROD4")); - BOOST_CHECK(sched.hasWell("PROX5")); - - { - const auto& well0 = sched.getWell("PROD2", 0 ); - const auto& well1 = sched.getWell("PROD2", 1 ); - BOOST_CHECK_CLOSE(1000, well0.getProductionProperties().OilRate.get(), 0.001); - BOOST_CHECK_CLOSE(1500, well1.getProductionProperties().OilRate.get(), 0.001); - BOOST_CHECK_CLOSE(1000/Metric::Time, well0.getProductionProperties().OilRate.getSI(), 0.001); - BOOST_CHECK_CLOSE(1500/Metric::Time, well1.getProductionProperties().OilRate.getSI(), 0.001); - } - - { - const auto& well0 = sched.getWell("PROD3", 0 ); - const auto& well1 = sched.getWell("PROD3", 1 ); - BOOST_CHECK_CLOSE(0 , well0.getProductionProperties().OilRate.get(), 0.001); - BOOST_CHECK_CLOSE(1500, well1.getProductionProperties().OilRate.get(), 0.001); - BOOST_CHECK_CLOSE(0/Metric::Time , well0.getProductionProperties().OilRate.getSI(), 0.001); - BOOST_CHECK_CLOSE(1500/Metric::Time, well1.getProductionProperties().OilRate.getSI(), 0.001); - } - - { - const auto& well0 = sched.getWell("PROX5", 0); - const auto& well1 = sched.getWell("PROX5", 1); - BOOST_CHECK_CLOSE(2000, well0.getProductionProperties().OilRate.get(), 0.001); - BOOST_CHECK_CLOSE(2000, well1.getProductionProperties().OilRate.get(), 0.001); - BOOST_CHECK_CLOSE(2000/Metric::Time, well0.getProductionProperties().OilRate.getSI(), 0.001); - BOOST_CHECK_CLOSE(2000/Metric::Time, well1.getProductionProperties().OilRate.getSI(), 0.001); - } -} - - -BOOST_AUTO_TEST_CASE( WCONINJE ) { - Parser parser; - std::string wconprodFile(pathprefix() + "WellWithWildcards/WCONINJE1"); - auto deck = parser.parseFile(wconprodFile); - auto python = std::make_shared(); - EclipseGrid grid(30,30,30); - TableManager table ( deck ); - FieldPropsManager fp(deck, Phases{true, true, true}, grid, table); - Runspec runspec (deck); - Schedule sched( deck, grid, fp, runspec, python); - SummaryState st(std::chrono::system_clock::now()); - - BOOST_CHECK_EQUAL(5U, sched.numWells()); - BOOST_CHECK(sched.hasWell("PROD1")); - BOOST_CHECK(sched.hasWell("INJE2")); - BOOST_CHECK(sched.hasWell("INJE3")); - BOOST_CHECK(sched.hasWell("PROD4")); - BOOST_CHECK(sched.hasWell("INJX5")); - - { - const auto& well0 = sched.getWell("INJE2", 0); - const auto& well1 = sched.getWell("INJE2", 1); - const auto controls0 = well0.injectionControls(st); - const auto controls1 = well1.injectionControls(st); - BOOST_CHECK_CLOSE(1000/Metric::Time, controls0.surface_rate, 0.001); - BOOST_CHECK_CLOSE(1500/Metric::Time, controls1.surface_rate, 0.001); - } - - { - const auto& well1 = sched.getWell("INJE3", 1); - const auto controls1 = well1.injectionControls(st); - BOOST_CHECK_CLOSE(1500/Metric::Time, controls1.surface_rate, 0.001); - } - - { - const auto& well0 = sched.getWell("INJX5", 0); - const auto& well1 = sched.getWell("INJX5", 1); - const auto controls0 = well0.injectionControls(st); - const auto controls1 = well1.injectionControls(st); - BOOST_CHECK_CLOSE(2000/Metric::Time, controls0.surface_rate, 0.001); - BOOST_CHECK_CLOSE(2000/Metric::Time, controls1.surface_rate, 0.001); - } -} - -BOOST_AUTO_TEST_CASE( WORKLIM ) { - const std::string input = R"( -WORKLIM - 10.0 -/ -)"; - Parser().parseString( input ); -} - - - -BOOST_AUTO_TEST_CASE(PVTWSALT) { - const std::string input = R"( -RUNSPEC - -TABDIMS - 1 2 / - -PROPS - -PVTWSALT - 1000 0 / - 1 2 3 4 5 - 6 7 8 9 10 / - 2000 0.50 / - 1.5 2.5 3.5 4.5 5.5 - 6.5 7.5 8.5 9.5 10.5/ - --- S_g k_rg k_rog p_cog -SGOF - 0.1 0.0 1.0 0.0 - 0.2 0.1 1.0 1.0 - 0.3 0.2 0.9 2.0 - 0.4 0.3 0.8 3.0 - 0.5 0.5 0.5 4.0 - 0.6 0.6 0.4 5.0 - 0.7 0.8 0.3 6.0 - 0.8 0.9 0.2 7.0 - 0.9 0.5 0.1 8.0 - 1.0 1.0 0.1 9.0 /; - - -)"; - auto deck = Parser{}.parseString(input); - const auto& pvtwsalt = deck.getKeyword("PVTWSALT"); - BOOST_CHECK_EQUAL(pvtwsalt.size(), 4); - - const auto& sgof = deck.getKeyword("SGOF"); - BOOST_CHECK_EQUAL(sgof.size(), 1); -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/integration/Polymer.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/integration/Polymer.cpp deleted file mode 100644 index fec69aadac..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/integration/Polymer.cpp +++ /dev/null @@ -1,78 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#define BOOST_TEST_MODULE ParserIntegrationTests -#include - -#include -#include -#include -#include -#include -#include -#include - -using namespace Opm; - -inline std::string pathprefix() { - return boost::unit_test::framework::master_test_suite().argv[1]; -} - -BOOST_AUTO_TEST_CASE( parse_polymer_tables ) { - Parser parser; - auto deck = parser.parseFile(pathprefix() + "POLYMER/POLY.inc"); - Opm::TableManager tables( deck ); - const TableContainer& plymax = tables.getPlymaxTables(); - const TableContainer& plyrock = tables.getPlyrockTables(); - const TableContainer& plyads = tables.getPlyadsTables(); - const TableContainer& plyvis = tables.getPlyviscTables(); - - BOOST_CHECK_EQUAL( plymax.size() , 1U ); - BOOST_CHECK_EQUAL( plyrock.size() , 1U ); - BOOST_CHECK_EQUAL( plyvis.size() , 1U ); - BOOST_CHECK_EQUAL( plyads.size() , 1U ); - - { - const Opm::PlymaxTable& table0 = plymax.getTable(0); - BOOST_CHECK_EQUAL( table0.numColumns() , 2U ); - BOOST_CHECK_EQUAL( table0.getPolymerConcentrationColumn()[0] , 3.0 ); - BOOST_CHECK_EQUAL( table0.getMaxPolymerConcentrationColumn()[0] , 0.0 ); - } - - { - const Opm::PlyviscTable& table0 = plyvis.getTable(0); - BOOST_CHECK_EQUAL( table0.numColumns() , 2U ); - BOOST_CHECK_EQUAL( table0.getPolymerConcentrationColumn()[5] , 3.0 ); - BOOST_CHECK_EQUAL( table0.getViscosityMultiplierColumn()[5] , 48.0 ); - } - - { - const Opm::PlyrockTable& table0 = plyrock.getTable(0); - BOOST_CHECK_EQUAL( table0.numColumns() , 5U ); - BOOST_CHECK_EQUAL( table0.getDeadPoreVolumeColumn()[0] , 0.05 ); - BOOST_CHECK_EQUAL( table0.getMaxAdsorbtionColumn()[0] , 0.000025 ); - } - - { - const Opm::PlyadsTable& table0 = plyads.getTable(0); - BOOST_CHECK_EQUAL( table0.numColumns() , 2U ); - BOOST_CHECK_EQUAL( table0.getPolymerConcentrationColumn()[8] , 3.0 ); - BOOST_CHECK_EQUAL( table0.getAdsorbedPolymerColumn()[8] , 0.000025 ); - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/integration/ScheduleCreateFromDeck.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/integration/ScheduleCreateFromDeck.cpp deleted file mode 100644 index 949e236313..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/integration/ScheduleCreateFromDeck.cpp +++ /dev/null @@ -1,912 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#define BOOST_TEST_MODULE ScheduleIntegrationTests -#include - -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -using namespace Opm; - - -inline std::string pathprefix() { - return boost::unit_test::framework::master_test_suite().argv[1]; -} - -BOOST_AUTO_TEST_CASE(CreateSchedule) { - Parser parser; - auto python = std::make_shared(); - EclipseGrid grid(10,10,10); - std::string scheduleFile(pathprefix() + "SCHEDULE/SCHEDULE1"); - auto deck1 = parser.parseFile(scheduleFile); - std::stringstream ss; - ss << deck1; - auto deck2 = parser.parseString( ss.str()); - for (const auto& deck : {deck1 , deck2}) { - TableManager table ( deck ); - FieldPropsManager fp(deck, Phases{true, true, true}, grid, table); - Runspec runspec (deck); - Schedule sched(deck, grid , fp, runspec, python); - const auto& timeMap = sched.getTimeMap(); - BOOST_CHECK_EQUAL(TimeMap::mkdate(2007 , 5 , 10), sched.getStartTime()); - BOOST_CHECK_EQUAL(9U, timeMap.size()); - BOOST_CHECK( deck.hasKeyword("NETBALAN") ); - } -} - - -BOOST_AUTO_TEST_CASE(CreateSchedule_Comments_After_Keywords) { - Parser parser; - std::string scheduleFile(pathprefix() + "SCHEDULE/SCHEDULE_COMMENTS_AFTER_KEYWORDS"); - auto deck = parser.parseFile(scheduleFile); - EclipseGrid grid(10,10,10); - TableManager table ( deck ); - FieldPropsManager fp(deck, Phases{true, true, true}, grid, table); - Runspec runspec (deck); - auto python = std::make_shared(); - Schedule sched(deck, grid , fp, runspec, python); - const auto& timeMap = sched.getTimeMap(); - BOOST_CHECK_EQUAL(TimeMap::mkdate(2007, 5 , 10) , sched.getStartTime()); - BOOST_CHECK_EQUAL(9U, timeMap.size()); -} - - -BOOST_AUTO_TEST_CASE(WCONPROD_MissingCmode) { - Parser parser; - std::string scheduleFile(pathprefix() + "SCHEDULE/SCHEDULE_MISSING_CMODE"); - auto deck = parser.parseFile(scheduleFile); - EclipseGrid grid(10,10,3); - TableManager table ( deck ); - FieldPropsManager fp(deck, Phases{true, true, true}, grid, table); - auto python = std::make_shared(); - Runspec runspec (deck); - BOOST_CHECK_NO_THROW( Schedule(deck, grid , fp, runspec, python) ); -} - - -BOOST_AUTO_TEST_CASE(WCONPROD_Missing_DATA) { - Parser parser; - std::string scheduleFile(pathprefix() + "SCHEDULE/SCHEDULE_CMODE_MISSING_DATA"); - auto deck = parser.parseFile(scheduleFile); - EclipseGrid grid(10,10,3); - TableManager table ( deck ); - FieldPropsManager fp(deck, Phases{true, true, true}, grid, table); - Runspec runspec (deck); - auto python = std::make_shared(); - BOOST_CHECK_THROW( Schedule(deck, grid , fp, runspec, python) , std::invalid_argument ); -} - - -BOOST_AUTO_TEST_CASE(WellTestRefDepth) { - Parser parser; - std::string scheduleFile(pathprefix() + "SCHEDULE/SCHEDULE_WELLS2"); - auto deck = parser.parseFile(scheduleFile); - EclipseGrid grid(40,60,30); - TableManager table ( deck ); - FieldPropsManager fp(deck, Phases{true, true, true}, grid, table); - Runspec runspec (deck); - auto python = std::make_shared(); - Schedule sched(deck , grid , fp, runspec, python); - - const auto& well1 = sched.getWellatEnd("W_1"); - const auto& well2 = sched.getWellatEnd("W_2"); - const auto& well4 = sched.getWellatEnd("W_4"); - BOOST_CHECK_EQUAL( well1.getRefDepth() , grid.getCellDepth( 29 , 36 , 0 )); - BOOST_CHECK_EQUAL( well2.getRefDepth() , 100 ); - BOOST_CHECK_THROW( well4.getRefDepth() , std::invalid_argument ); -} - - - - - -BOOST_AUTO_TEST_CASE(WellTesting) { - Parser parser; - std::string scheduleFile(pathprefix() + "SCHEDULE/SCHEDULE_WELLS2"); - auto deck = parser.parseFile(scheduleFile); - EclipseGrid grid(40,60,30); - TableManager table ( deck ); - FieldPropsManager fp(deck, Phases{true, true, true}, grid, table); - Runspec runspec (deck); - auto python = std::make_shared(); - Schedule sched(deck, grid , fp, runspec, python); - - BOOST_CHECK_EQUAL(4U, sched.numWells()); - BOOST_CHECK(sched.hasWell("W_1")); - BOOST_CHECK(sched.hasWell("W_2")); - BOOST_CHECK(sched.hasWell("W_3")); - - BOOST_CHECK_CLOSE( 777/Metric::Time , sched.getWell("W_2", 7).getProductionProperties().ResVRate.getSI() , 0.0001); - BOOST_CHECK_CLOSE( 777 , sched.getWell("W_2", 7).getProductionProperties().ResVRate.get() , 0.0001); - BOOST_CHECK_EQUAL( 0 , sched.getWell("W_2", 8).getProductionProperties().ResVRate.get()); - - BOOST_CHECK( Well::Status::SHUT == sched.getWell("W_2", 3).getStatus()); - - { - const auto& rft_config = sched.rftConfig(); - BOOST_CHECK( !rft_config.rft("W_2", 2)); - BOOST_CHECK( rft_config.rft("W_2", 3)); - BOOST_CHECK( rft_config.rft("W_2", 4)); - BOOST_CHECK( !rft_config.rft("W_2", 5)); - BOOST_CHECK( rft_config.rft("W_1", 3)); - } - { - const auto & prop3 = sched.getWell("W_2", 3).getProductionProperties(); - BOOST_CHECK( Well::ProducerCMode::ORAT == prop3.controlMode); - BOOST_CHECK( prop3.hasProductionControl(Well::ProducerCMode::ORAT)); - BOOST_CHECK( !prop3.hasProductionControl(Well::ProducerCMode::GRAT)); - BOOST_CHECK( !prop3.hasProductionControl(Well::ProducerCMode::WRAT)); - } - - - BOOST_CHECK( Well::Status::AUTO == sched.getWell("W_3", 3).getStatus()); - { - const auto& prop7 = sched.getWell("W_3", 7).getProductionProperties(); - BOOST_CHECK_CLOSE( 999/Metric::Time , prop7.LiquidRate.getSI() , 0.001); - BOOST_CHECK_CLOSE( 999 , prop7.LiquidRate.get() , 0.001); - BOOST_CHECK( Well::ProducerCMode::RESV == prop7.controlMode); - } - BOOST_CHECK_CLOSE( 8000/Metric::Time , sched.getWell("W_3", 3).getProductionProperties().LiquidRate.getSI(), 1.e-12); - BOOST_CHECK_CLOSE( 18000/Metric::Time, sched.getWell("W_3", 8).getProductionProperties().LiquidRate.getSI(), 1.e-12); - BOOST_CHECK_CLOSE( 8000 , sched.getWell("W_3", 3).getProductionProperties().LiquidRate.get(), 1.e-12); - BOOST_CHECK_CLOSE( 18000, sched.getWell("W_3", 8).getProductionProperties().LiquidRate.get(), 1.e-12); - - - { - BOOST_CHECK_EQUAL(sched.getWell("W_1", 3).getProductionProperties().predictionMode, false); - BOOST_CHECK_CLOSE(sched.getWell("W_1", 3).getProductionProperties().WaterRate.get() , 4, 0.001); - BOOST_CHECK_CLOSE(sched.getWell("W_1", 3).getProductionProperties().GasRate.get() , 12345, 0.001); - BOOST_CHECK_CLOSE(sched.getWell("W_1", 3).getProductionProperties().OilRate.get() , 4000, 0.001); - - BOOST_CHECK_CLOSE(sched.getWell("W_1", 4).getProductionProperties().OilRate.get() , 4000, 0.001); - BOOST_CHECK_CLOSE(sched.getWell("W_1", 4).getProductionProperties().WaterRate.get() , 4, 0.001); - BOOST_CHECK_CLOSE(sched.getWell("W_1", 4).getProductionProperties().GasRate.get() , 12345,0.001); - - BOOST_CHECK_CLOSE(sched.getWell("W_1", 5).getProductionProperties().WaterRate.get(), 4, 0.001); - BOOST_CHECK_CLOSE(sched.getWell("W_1", 5).getProductionProperties().GasRate.get() , 12345, 0.001); - BOOST_CHECK_CLOSE(sched.getWell("W_1", 5).getProductionProperties().OilRate.get() , 4000, 0.001); - - - BOOST_CHECK_EQUAL(sched.getWell("W_1", 6).getProductionProperties().predictionMode, false); - BOOST_CHECK_CLOSE(sched.getWell("W_1", 6).getProductionProperties().OilRate.get() , 14000, 0.001); - - BOOST_CHECK_EQUAL(sched.getWell("W_1", 7).getProductionProperties().predictionMode, true); - BOOST_CHECK_CLOSE(sched.getWell("W_1", 7).getProductionProperties().OilRate.get() , 11000, 0.001); - BOOST_CHECK_CLOSE(sched.getWell("W_1", 7).getProductionProperties().WaterRate.get() , 44, 0.001); - - - BOOST_CHECK_EQUAL(sched.getWell("W_1", 8).getProductionProperties().predictionMode, false); - BOOST_CHECK_CLOSE(sched.getWell("W_1", 8).getProductionProperties().OilRate.get() , 13000, 0.001); - - BOOST_CHECK_CLOSE(sched.getWell("W_1", 10).getInjectionProperties().BHPTarget.get(), 123.00 , 0.001); - BOOST_CHECK_CLOSE(sched.getWell("W_1", 10).getInjectionProperties().THPTarget.get(), 678.00 , 0.001); - - //---- - - BOOST_CHECK_EQUAL(sched.getWell("W_1", 3).getProductionProperties().predictionMode, false); - BOOST_CHECK_CLOSE(sched.getWell("W_1", 3).getProductionProperties().WaterRate.getSI() , 4/Metric::Time, 0.001); - BOOST_CHECK_CLOSE(sched.getWell("W_1", 3).getProductionProperties().GasRate.getSI() , 12345/Metric::Time, 0.001); - BOOST_CHECK_CLOSE(sched.getWell("W_1", 3).getProductionProperties().OilRate.getSI() , 4000/Metric::Time, 0.001); - - BOOST_CHECK_CLOSE(sched.getWell("W_1", 4).getProductionProperties().OilRate.getSI() , 4000/Metric::Time, 0.001); - BOOST_CHECK_CLOSE(sched.getWell("W_1", 4).getProductionProperties().WaterRate.getSI() , 4/Metric::Time, 0.001); - BOOST_CHECK_CLOSE(sched.getWell("W_1", 4).getProductionProperties().GasRate.getSI() , 12345/Metric::Time,0.001); - - BOOST_CHECK_CLOSE(sched.getWell("W_1", 5).getProductionProperties().WaterRate.getSI(), 4/Metric::Time, 0.001); - BOOST_CHECK_CLOSE(sched.getWell("W_1", 5).getProductionProperties().GasRate.getSI() , 12345/Metric::Time, 0.001); - BOOST_CHECK_CLOSE(sched.getWell("W_1", 5).getProductionProperties().OilRate.getSI() , 4000/Metric::Time, 0.001); - - - BOOST_CHECK_EQUAL(sched.getWell("W_1", 6).getProductionProperties().predictionMode, false); - BOOST_CHECK_CLOSE(sched.getWell("W_1", 6).getProductionProperties().OilRate.getSI() , 14000/Metric::Time, 0.001); - - BOOST_CHECK_EQUAL(sched.getWell("W_1", 7).getProductionProperties().predictionMode, true); - BOOST_CHECK_CLOSE(sched.getWell("W_1", 7).getProductionProperties().OilRate.getSI() , 11000/Metric::Time, 0.001); - BOOST_CHECK_CLOSE(sched.getWell("W_1", 7).getProductionProperties().WaterRate.getSI() , 44/Metric::Time, 0.001); - - - BOOST_CHECK_EQUAL(sched.getWell("W_1", 8).getProductionProperties().predictionMode, false); - BOOST_CHECK_CLOSE(sched.getWell("W_1", 8).getProductionProperties().OilRate.getSI() , 13000/Metric::Time , 0.001); - - BOOST_CHECK_CLOSE(sched.getWell("W_1", 10).getInjectionProperties().BHPTarget.getSI(), 123.00 * Metric::Pressure , 0.001); - BOOST_CHECK_CLOSE(sched.getWell("W_1", 10).getInjectionProperties().THPTarget.getSI(), 678.00 * Metric::Pressure , 0.001); - - - - - BOOST_CHECK( sched.getWell("W_1", 9).isInjector()); - { - SummaryState st(std::chrono::system_clock::now()); - const auto controls = sched.getWell("W_1", 9).injectionControls(st); - BOOST_CHECK_CLOSE(20000/Metric::Time , controls.surface_rate , 0.001); - BOOST_CHECK_CLOSE(200000/Metric::Time , controls.reservoir_rate, 0.001); - BOOST_CHECK_CLOSE(6895 * Metric::Pressure , controls.bhp_limit, 0.001); - BOOST_CHECK_CLOSE(0 , controls.thp_limit , 0.001); - BOOST_CHECK( Well::InjectorCMode::RESV == controls.cmode); - BOOST_CHECK( controls.hasControl(Well::InjectorCMode::RATE )); - BOOST_CHECK( controls.hasControl(Well::InjectorCMode::RESV )); - BOOST_CHECK( !controls.hasControl(Well::InjectorCMode::THP)); - BOOST_CHECK( controls.hasControl(Well::InjectorCMode::BHP)); - } - - - BOOST_CHECK( Well::Status::OPEN == sched.getWell("W_1", 11).getStatus( )); - BOOST_CHECK( Well::Status::OPEN == sched.getWell("W_1", 12).getStatus( )); - BOOST_CHECK( Well::Status::SHUT == sched.getWell("W_1", 13).getStatus( )); - BOOST_CHECK( Well::Status::OPEN == sched.getWell("W_1", 14).getStatus( )); - { - SummaryState st(std::chrono::system_clock::now()); - const auto controls = sched.getWell("W_1", 12).injectionControls(st); - BOOST_CHECK( controls.hasControl(Well::InjectorCMode::RATE )); - BOOST_CHECK( !controls.hasControl(Well::InjectorCMode::RESV)); - BOOST_CHECK( controls.hasControl(Well::InjectorCMode::THP )); - BOOST_CHECK( controls.hasControl(Well::InjectorCMode::BHP )); - } - } -} - - -BOOST_AUTO_TEST_CASE(WellTestCOMPDAT_DEFAULTED_ITEMS) { - Parser parser; - std::string scheduleFile(pathprefix() + "SCHEDULE/SCHEDULE_COMPDAT1"); - auto deck = parser.parseFile(scheduleFile); - EclipseGrid grid(10,10,10); - TableManager table ( deck ); - FieldPropsManager fp(deck, Phases{true, true, true}, grid, table); - Runspec runspec (deck); - auto python = std::make_shared(); - Schedule sched(deck, grid , fp, runspec, python); -} - - -BOOST_AUTO_TEST_CASE(WellTestCOMPDAT) { - Parser parser; - std::string scheduleFile(pathprefix() + "SCHEDULE/SCHEDULE_WELLS2"); - auto deck = parser.parseFile(scheduleFile); - EclipseGrid grid(40,60,30); - TableManager table ( deck ); - FieldPropsManager fp(deck, Phases{true, true, true}, grid, table); - Runspec runspec (deck); - auto python = std::make_shared(); - Schedule sched(deck, grid , fp, runspec, python); - - BOOST_CHECK_EQUAL(4U, sched.numWells()); - BOOST_CHECK(sched.hasWell("W_1")); - BOOST_CHECK(sched.hasWell("W_2")); - BOOST_CHECK(sched.hasWell("W_3")); - { - BOOST_CHECK_CLOSE(13000/Metric::Time , sched.getWell("W_1", 8).getProductionProperties().OilRate.getSI() , 0.0001); - BOOST_CHECK_CLOSE(13000 , sched.getWell("W_1", 8).getProductionProperties().OilRate.get() , 0.0001); - { - const auto& connections = sched.getWell("W_1", 3).getConnections(); - BOOST_CHECK_EQUAL(4U, connections.size()); - - BOOST_CHECK(Connection::State::OPEN == connections.get(3).state()); - BOOST_CHECK_EQUAL(2.2836805555555556e-12 , connections.get(3).CF()); - } - { - const auto& connections = sched.getWell("W_1", 7).getConnections(); - BOOST_CHECK_EQUAL(4U, connections.size() ); - BOOST_CHECK(Connection::State::SHUT == connections.get( 3 ).state() ); - } - } -} - - - - -BOOST_AUTO_TEST_CASE(GroupTreeTest_GRUPTREE_correct) { - Parser parser; - std::string scheduleFile(pathprefix() + "SCHEDULE/SCHEDULE_WELSPECS_GRUPTREE"); - auto deck = parser.parseFile(scheduleFile); - EclipseGrid grid(10,10,3); - TableManager table ( deck ); - FieldPropsManager fp(deck, Phases{true, true, true}, grid, table); - Runspec runspec (deck); - auto python = std::make_shared(); - Schedule schedule(deck, grid , fp, runspec, python); - - BOOST_CHECK( schedule.hasGroup( "FIELD" )); - BOOST_CHECK( schedule.hasGroup( "PROD" )); - BOOST_CHECK( schedule.hasGroup( "INJE" )); - BOOST_CHECK( schedule.hasGroup( "MANI-PROD" )); - BOOST_CHECK( schedule.hasGroup( "MANI-INJ" )); - BOOST_CHECK( schedule.hasGroup( "DUMMY-PROD" )); - BOOST_CHECK( schedule.hasGroup( "DUMMY-INJ" )); -} - - - - -BOOST_AUTO_TEST_CASE(GroupTreeTest_GRUPTREE_WITH_REPARENT_correct_tree) { - Parser parser; - std::string scheduleFile(pathprefix() + "SCHEDULE/SCHEDULE_GROUPS_REPARENT"); - auto deck = parser.parseFile(scheduleFile); - EclipseGrid grid(10,10,3); - TableManager table ( deck ); - FieldPropsManager fp(deck, Phases{true, true, true}, grid, table); - Runspec runspec (deck); - auto python = std::make_shared(); - Schedule sched(deck, grid , fp, runspec, python); - - const auto& field_group = sched.getGroup("FIELD", 1); - const auto& new_group = sched.getGroup("GROUP_NEW", 1); - const auto& nils_group = sched.getGroup("GROUP_NILS", 1); - BOOST_CHECK_EQUAL(field_group.groups().size(), 2); - BOOST_CHECK( field_group.hasGroup("GROUP_NEW")); - BOOST_CHECK( field_group.hasGroup("GROUP_BJARNE")); - BOOST_CHECK_EQUAL( new_group.control_group().value_or("ERROR"), "FIELD"); - BOOST_CHECK_EQUAL( new_group.flow_group().value_or("ERROR"), "FIELD"); - BOOST_CHECK( new_group.hasGroup("GROUP_NILS")); - BOOST_CHECK_EQUAL( nils_group.control_group().value_or("ERROR"), "GROUP_NEW"); - BOOST_CHECK_EQUAL( nils_group.flow_group().value_or("ERROR"), "GROUP_NEW"); -} - -BOOST_AUTO_TEST_CASE( WellTestGroups ) { - Parser parser; - std::string scheduleFile(pathprefix() + "SCHEDULE/SCHEDULE_GROUPS"); - auto deck = parser.parseFile(scheduleFile); - EclipseGrid grid(10,10,3); - TableManager table ( deck ); - FieldPropsManager fp(deck, Phases{true, true, true}, grid, table); - Runspec runspec (deck); - auto python = std::make_shared(); - Schedule sched(deck, grid , fp, runspec, python); - SummaryState st(std::chrono::system_clock::now()); - - BOOST_CHECK_EQUAL( 3U , sched.numGroups() ); - BOOST_CHECK( sched.hasGroup( "INJ" )); - BOOST_CHECK( sched.hasGroup( "OP" )); - - { - auto& group = sched.getGroup("INJ", 3); - const auto& injection = group.injectionControls(Phase::WATER, st); - BOOST_CHECK_EQUAL( Phase::WATER , injection.phase); - BOOST_CHECK( Group::InjectionCMode::VREP == injection.cmode); - BOOST_CHECK_CLOSE( 10/Metric::Time , injection.surface_max_rate, 0.001); - BOOST_CHECK_CLOSE( 20/Metric::Time , injection.resv_max_rate, 0.001); - BOOST_CHECK_EQUAL( 0.75 , injection.target_reinj_fraction); - BOOST_CHECK_EQUAL( 0.95 , injection.target_void_fraction); - BOOST_CHECK_EQUAL("INJ" , injection.reinj_group); - BOOST_CHECK_EQUAL("INJ" , injection.voidage_group); - BOOST_CHECK(group.isInjectionGroup()); - } - { - auto& group = sched.getGroup("INJ", 6); - const auto& injection = group.injectionControls(Phase::OIL, st); - BOOST_CHECK_EQUAL( Phase::OIL , injection.phase); - BOOST_CHECK( Group::InjectionCMode::RATE == injection.cmode); - BOOST_CHECK_CLOSE( 1000/Metric::Time , injection.surface_max_rate, 0.0001); - BOOST_CHECK(group.isInjectionGroup()); - } - - { - auto& group = sched.getGroup("OP", 3); - const auto& production = group.productionControls(st); - BOOST_CHECK( Group::ProductionCMode::ORAT == production.cmode); - BOOST_CHECK_CLOSE( 10/Metric::Time , production.oil_target , 0.001); - BOOST_CHECK_CLOSE( 20/Metric::Time , production.water_target , 0.001); - BOOST_CHECK_CLOSE( 30/Metric::Time , production.gas_target , 0.001); - BOOST_CHECK_CLOSE( 40/Metric::Time , production.liquid_target , 0.001); - BOOST_CHECK(group.isProductionGroup()); - } - -} - - -BOOST_AUTO_TEST_CASE( WellTestGroupAndWellRelation ) { - Parser parser; - std::string scheduleFile(pathprefix() + "SCHEDULE/SCHEDULE_WELLS_AND_GROUPS"); - auto deck = parser.parseFile(scheduleFile); - EclipseGrid grid(10,10,3); - TableManager table ( deck ); - FieldPropsManager fp(deck, Phases{true, true, true}, grid, table); - Runspec runspec (deck); - auto python = std::make_shared(); - Schedule sched(deck, grid , fp, runspec, python); - - { - auto& group1 = sched.getGroup("GROUP1", 0); - - BOOST_CHECK( group1.defined(0)); - BOOST_CHECK( group1.hasWell("W_1")); - BOOST_CHECK( group1.hasWell("W_2")); - } - - { - auto& group1 = sched.getGroup("GROUP1", 1); - auto& group2 = sched.getGroup("GROUP2", 1); - - BOOST_CHECK( group1.hasWell("W_1")); - BOOST_CHECK( !group1.hasWell("W_2")); - BOOST_CHECK( !group2.hasWell("W_1")); - BOOST_CHECK( group2.hasWell("W_2")); - - BOOST_CHECK( !group2.defined(0)); - BOOST_CHECK( group2.defined(1)); - } -} - - -/* -BOOST_AUTO_TEST_CASE(WellTestWELOPEN_ConfigWithIndexes_Throws) { - Parser parser; - std::string scheduleFile(pathprefix() + "SCHEDULE/SCHEDULE_WELOPEN_INVALID"); - auto deck = parser.parseFile(scheduleFile); - std::shared_ptr grid = std::make_shared(10,10,3); - BOOST_CHECK_THROW(Schedule(grid , deck), std::logic_error); -} - - -BOOST_AUTO_TEST_CASE(WellTestWELOPENControlsSet) { - Parser parser; - std::string scheduleFile(pathprefix() + "SCHEDULE/SCHEDULE_WELOPEN"); - auto deck = parser.parseFile(scheduleFile); - std::shared_ptr grid = std::make_shared( 10,10,10 ); - Schedule sched(grid , deck); - - const auto* well1 = sched.getWell("W_1"); - BOOST_CHECK_EQUAL(WellCommon::StatusEnum::OPEN, sched.getWell("W_1")->getStatus(0)); - BOOST_CHECK_EQUAL(WellCommon::StatusEnum::SHUT, sched.getWell("W_1")->getStatus(1)); - BOOST_CHECK_EQUAL(WellCommon::StatusEnum::OPEN, sched.getWell("W_1")->getStatus(2)); - BOOST_CHECK_EQUAL(WellCommon::StatusEnum::STOP, sched.getWell("W_1")->getStatus(3)); - BOOST_CHECK_EQUAL(WellCommon::StatusEnum::AUTO, sched.getWell("W_1")->getStatus(4)); - BOOST_CHECK_EQUAL(WellCommon::StatusEnum::STOP, sched.getWell("W_1")->getStatus(5)); -} -*/ - - - -BOOST_AUTO_TEST_CASE(WellTestWGRUPCONWellPropertiesSet) { - Parser parser; - std::string scheduleFile(pathprefix() + "SCHEDULE/SCHEDULE_WGRUPCON"); - auto deck = parser.parseFile(scheduleFile); - auto python = std::make_shared(); - EclipseGrid grid(10,10,10); - TableManager table ( deck ); - FieldPropsManager fp(deck, Phases{true, true, true}, grid, table); - Runspec runspec (deck); - Schedule sched(deck, grid , fp, runspec, python); - - const auto& well1 = sched.getWell("W_1", 0); - BOOST_CHECK(well1.isAvailableForGroupControl( )); - BOOST_CHECK_EQUAL(-1, well1.getGuideRate( )); - BOOST_CHECK(Well::GuideRateTarget::OIL == well1.getGuideRatePhase( )); - BOOST_CHECK_EQUAL(1.0, well1.getGuideRateScalingFactor( )); - - const auto& well2 = sched.getWell("W_2", 0); - BOOST_CHECK(!well2.isAvailableForGroupControl( )); - BOOST_CHECK_EQUAL(-1, well2.getGuideRate( )); - BOOST_CHECK(Well::GuideRateTarget::UNDEFINED == well2.getGuideRatePhase( )); - BOOST_CHECK_EQUAL(1.0, well2.getGuideRateScalingFactor( )); - - const auto& well3 = sched.getWell("W_3", 0); - BOOST_CHECK(well3.isAvailableForGroupControl( )); - BOOST_CHECK_EQUAL(100, well3.getGuideRate( )); - BOOST_CHECK(Well::GuideRateTarget::RAT == well3.getGuideRatePhase( )); - BOOST_CHECK_EQUAL(0.5, well3.getGuideRateScalingFactor( )); -} - - -BOOST_AUTO_TEST_CASE(TestDefaultedCOMPDATIJ) { - Parser parser; - const char * deckString = "\n\ -START\n\ -\n\ -10 MAI 2007 /\n\ -\n\ -GRID\n\ -PERMX\n\ - 9000*0.25 /\n\ -COPY \n\ - PERMX PERMY /\n\ - PERMX PERMZ /\n\ -/\n\ -SCHEDULE\n\ -WELSPECS \n\ - 'W1' 'OP' 11 21 3.33 'OIL' 7* / \n\ -/\n\ -COMPDAT \n\ - 'W1' 2* 1 1 'OPEN' 1* 32.948 0.311 3047.839 2* 'X' 22.100 /\n\ -/\n"; - auto deck = parser.parseString(deckString); - auto python = std::make_shared(); - EclipseGrid grid(30,30,10); - TableManager table ( deck ); - FieldPropsManager fp(deck, Phases{true, true, true}, grid, table); - Runspec runspec (deck); - Schedule sched(deck, grid , fp, runspec, python); - const auto& connections = sched.getWell("W1", 0).getConnections(); - BOOST_CHECK_EQUAL( 10 , connections.get(0).getI() ); - BOOST_CHECK_EQUAL( 20 , connections.get(0).getJ() ); -} - - -/** - This is a deck used in the opm-core wellsManager testing; just be - certain we can parse it. -*/ -BOOST_AUTO_TEST_CASE(OpmCode) { - Parser parser; - std::string scheduleFile(pathprefix() + "SCHEDULE/wells_group.data"); - auto deck = parser.parseFile(scheduleFile); - auto python = std::make_shared(); - EclipseGrid grid(10,10,5); - TableManager table ( deck ); - Runspec runspec (deck); - FieldPropsManager fp(deck, runspec.phases(), grid, table); - BOOST_CHECK_NO_THROW( Schedule(deck , grid , fp, runspec, python) ); -} - - - -BOOST_AUTO_TEST_CASE(WELLS_SHUT) { - Parser parser; - auto python = std::make_shared(); - std::string scheduleFile(pathprefix() + "SCHEDULE/SCHEDULE_SHUT_WELL"); - auto deck = parser.parseFile(scheduleFile); - EclipseGrid grid(20,40,1); - TableManager table ( deck ); - FieldPropsManager fp(deck, Phases{true, true, true}, grid, table); - Runspec runspec (deck); - Schedule sched(deck, grid , fp, runspec, python); - - - { - const auto& well1 = sched.getWell("W1", 1); - const auto& well2 = sched.getWell("W2", 1); - const auto& well3 = sched.getWell("W3", 1); - BOOST_CHECK( Well::Status::OPEN == well1.getStatus()); - BOOST_CHECK( Well::Status::OPEN == well2.getStatus()); - BOOST_CHECK( Well::Status::OPEN == well3.getStatus()); - } - { - const auto& well1 = sched.getWell("W1", 2); - const auto& well2 = sched.getWell("W2", 2); - const auto& well3 = sched.getWell("W3", 2); - BOOST_CHECK( Well::Status::SHUT == well1.getStatus()); - BOOST_CHECK( Well::Status::SHUT == well2.getStatus()); - BOOST_CHECK( Well::Status::SHUT == well3.getStatus()); - } -} - - -BOOST_AUTO_TEST_CASE(WellTestWPOLYMER) { - Parser parser; - std::string scheduleFile(pathprefix() + "SCHEDULE/SCHEDULE_POLYMER"); - auto deck = parser.parseFile(scheduleFile); - EclipseGrid grid(30,30,30); - TableManager table ( deck ); - FieldPropsManager fp(deck, Phases{true, true, true}, grid, table); - Runspec runspec (deck); - auto python = std::make_shared(); - Schedule sched(deck, grid , fp, runspec, python); - - - BOOST_CHECK_EQUAL(4U, sched.numWells()); - BOOST_CHECK(sched.hasWell("INJE01")); - BOOST_CHECK(sched.hasWell("PROD01")); - - { - const auto& well1 = sched.getWell("INJE01", 0); - BOOST_CHECK( well1.isInjector()); - const WellPolymerProperties& props_well10 = well1.getPolymerProperties(); - BOOST_CHECK_CLOSE(1.5*Metric::PolymerDensity, props_well10.m_polymerConcentration, 0.0001); - } - { - const auto& well1 = sched.getWell("INJE01", 1); - const WellPolymerProperties& props_well11 = well1.getPolymerProperties(); - BOOST_CHECK_CLOSE(1.0*Metric::PolymerDensity, props_well11.m_polymerConcentration, 0.0001); - } - { - const auto& well1 = sched.getWell("INJE01", 2); - const WellPolymerProperties& props_well12 = well1.getPolymerProperties(); - BOOST_CHECK_CLOSE(0.1*Metric::PolymerDensity, props_well12.m_polymerConcentration, 0.0001); - } - - { - const auto& well2 = sched.getWell("INJE02", 0); - BOOST_CHECK( well2.isInjector()); - const WellPolymerProperties& props_well20 = well2.getPolymerProperties(); - BOOST_CHECK_CLOSE(2.0*Metric::PolymerDensity, props_well20.m_polymerConcentration, 0.0001); - } - { - const auto& well2 = sched.getWell("INJE02", 1); - const WellPolymerProperties& props_well21 = well2.getPolymerProperties(); - BOOST_CHECK_CLOSE(1.5*Metric::PolymerDensity, props_well21.m_polymerConcentration, 0.0001); - } - { - const auto& well2 = sched.getWell("INJE02", 2); - const WellPolymerProperties& props_well22 = well2.getPolymerProperties(); - BOOST_CHECK_CLOSE(0.2*Metric::PolymerDensity, props_well22.m_polymerConcentration, 0.0001); - } - { - const auto& well3 = sched.getWell("INJE03", 0); - BOOST_CHECK( well3.isInjector()); - const WellPolymerProperties& props_well30 = well3.getPolymerProperties(); - BOOST_CHECK_CLOSE(2.5*Metric::PolymerDensity, props_well30.m_polymerConcentration, 0.0001); - } - { - const auto& well3 = sched.getWell("INJE03", 1); - const WellPolymerProperties& props_well31 = well3.getPolymerProperties(); - BOOST_CHECK_CLOSE(2.0*Metric::PolymerDensity, props_well31.m_polymerConcentration, 0.0001); - } - { - const auto& well3 = sched.getWell("INJE03", 2); - const WellPolymerProperties& props_well32 = well3.getPolymerProperties(); - BOOST_CHECK_CLOSE(0.3*Metric::PolymerDensity, props_well32.m_polymerConcentration, 0.0001); - } -} - - -BOOST_AUTO_TEST_CASE(WellTestWFOAM) { - Parser parser; - std::string scheduleFile(pathprefix() + "SCHEDULE/SCHEDULE_FOAM"); - auto deck = parser.parseFile(scheduleFile); - EclipseGrid grid(30,30,30); - TableManager table ( deck ); - FieldPropsManager fp(deck, Phases{true, true, true}, grid, table); - Runspec runspec (deck); - auto python = std::make_shared(); - Schedule sched(deck, grid , fp, runspec, python); - - - BOOST_CHECK_EQUAL(4U, sched.numWells()); - BOOST_CHECK(sched.hasWell("INJE01")); - BOOST_CHECK(sched.hasWell("PROD01")); - - { - const auto& well1 = sched.getWell("INJE01", 0); - BOOST_CHECK( well1.isInjector()); - const WellFoamProperties& props_well10 = well1.getFoamProperties(); - BOOST_CHECK_EQUAL(0.11, props_well10.m_foamConcentration); - } - { - const auto& well1 = sched.getWell("INJE01", 1); - const WellFoamProperties& props_well11 = well1.getFoamProperties(); - BOOST_CHECK_EQUAL(0.12, props_well11.m_foamConcentration); - } - { - const auto& well1 = sched.getWell("INJE01", 2); - const WellFoamProperties& props_well12 = well1.getFoamProperties(); - BOOST_CHECK_EQUAL(0.13, props_well12.m_foamConcentration); - } - - { - const auto& well2 = sched.getWell("INJE02", 0); - BOOST_CHECK( well2.isInjector()); - const WellFoamProperties& props_well20 = well2.getFoamProperties(); - BOOST_CHECK_EQUAL(0.0, props_well20.m_foamConcentration); - } - { - const auto& well2 = sched.getWell("INJE02", 1); - const WellFoamProperties& props_well21 = well2.getFoamProperties(); - BOOST_CHECK_EQUAL(0.22, props_well21.m_foamConcentration); - } - { - const auto& well2 = sched.getWell("INJE02", 2); - const WellFoamProperties& props_well22 = well2.getFoamProperties(); - BOOST_CHECK_EQUAL(0.0, props_well22.m_foamConcentration); - } - { - const auto& well3 = sched.getWell("INJE03", 0); - BOOST_CHECK( well3.isInjector()); - const WellFoamProperties& props_well30 = well3.getFoamProperties(); - BOOST_CHECK_EQUAL(0.31, props_well30.m_foamConcentration); - } - { - const auto& well3 = sched.getWell("INJE03", 1); - const WellFoamProperties& props_well31 = well3.getFoamProperties(); - BOOST_CHECK_EQUAL(0.0, props_well31.m_foamConcentration); - } - { - const auto& well3 = sched.getWell("INJE03", 2); - const WellFoamProperties& props_well32 = well3.getFoamProperties(); - BOOST_CHECK_EQUAL(0.33, props_well32.m_foamConcentration); - } -} - - -BOOST_AUTO_TEST_CASE(WellTestWECON) { - Parser parser; - std::string scheduleFile(pathprefix() + "SCHEDULE/SCHEDULE_WECON"); - auto deck = parser.parseFile(scheduleFile); - EclipseGrid grid(30,30,30); - TableManager table ( deck ); - FieldPropsManager fp(deck, Phases{true, true, true}, grid, table); - Runspec runspec (deck); - auto python = std::make_shared(); - Schedule sched(deck, grid , fp, runspec, python); - - BOOST_CHECK_EQUAL(3U, sched.numWells()); - BOOST_CHECK(sched.hasWell("INJE01")); - BOOST_CHECK(sched.hasWell("PROD01")); - BOOST_CHECK(sched.hasWell("PROD02")); - - { - const WellEconProductionLimits& econ_limit1 = sched.getWell("PROD01", 0).getEconLimits(); - BOOST_CHECK(econ_limit1.onMinOilRate()); - BOOST_CHECK(econ_limit1.onMaxWaterCut()); - BOOST_CHECK(!(econ_limit1.onMinGasRate())); - BOOST_CHECK(!(econ_limit1.onMaxGasOilRatio())); - BOOST_CHECK_EQUAL(econ_limit1.maxWaterCut(), 0.95); - BOOST_CHECK_EQUAL(econ_limit1.minOilRate(), 50.0/86400.); - BOOST_CHECK_EQUAL(econ_limit1.minGasRate(), 0.0); - BOOST_CHECK_EQUAL(econ_limit1.maxGasOilRatio(), 0.0); - BOOST_CHECK_EQUAL(econ_limit1.endRun(), false); - BOOST_CHECK_EQUAL(econ_limit1.followonWell(), "'"); - BOOST_CHECK(econ_limit1.quantityLimit() == WellEconProductionLimits::QuantityLimit::RATE); - BOOST_CHECK(econ_limit1.workover() == WellEconProductionLimits::EconWorkover::CON); - BOOST_CHECK(econ_limit1.workoverSecondary() == WellEconProductionLimits::EconWorkover::CON); - BOOST_CHECK(econ_limit1.requireWorkover()); - BOOST_CHECK(econ_limit1.requireSecondaryWorkover()); - BOOST_CHECK(!(econ_limit1.validFollowonWell())); - BOOST_CHECK(!(econ_limit1.endRun())); - BOOST_CHECK(econ_limit1.onAnyRatioLimit()); - BOOST_CHECK(econ_limit1.onAnyRateLimit()); - BOOST_CHECK(econ_limit1.onAnyEffectiveLimit()); - - const WellEconProductionLimits& econ_limit2 = sched.getWell("PROD01", 1).getEconLimits(); - BOOST_CHECK(!(econ_limit2.onMinOilRate())); - BOOST_CHECK(econ_limit2.onMaxWaterCut()); - BOOST_CHECK(econ_limit2.onMinGasRate()); - BOOST_CHECK(!(econ_limit2.onMaxGasOilRatio())); - BOOST_CHECK_EQUAL(econ_limit2.maxWaterCut(), 0.95); - BOOST_CHECK_EQUAL(econ_limit2.minOilRate(), 0.0); - BOOST_CHECK_EQUAL(econ_limit2.minGasRate(), 1000./86400.); - BOOST_CHECK_EQUAL(econ_limit2.maxGasOilRatio(), 0.0); - BOOST_CHECK_EQUAL(econ_limit2.endRun(), false); - BOOST_CHECK_EQUAL(econ_limit2.followonWell(), "'"); - BOOST_CHECK(econ_limit2.quantityLimit() == WellEconProductionLimits::QuantityLimit::RATE); - BOOST_CHECK(econ_limit2.workover() == WellEconProductionLimits::EconWorkover::CON); - BOOST_CHECK(econ_limit2.workoverSecondary() == WellEconProductionLimits::EconWorkover::CON); - BOOST_CHECK(econ_limit2.requireWorkover()); - BOOST_CHECK(econ_limit2.requireSecondaryWorkover()); - BOOST_CHECK(!(econ_limit2.validFollowonWell())); - BOOST_CHECK(!(econ_limit2.endRun())); - BOOST_CHECK(econ_limit2.onAnyRatioLimit()); - BOOST_CHECK(econ_limit2.onAnyRateLimit()); - BOOST_CHECK(econ_limit2.onAnyEffectiveLimit()); - } - - { - const WellEconProductionLimits& econ_limit1 = sched.getWell("PROD02", 0).getEconLimits(); - BOOST_CHECK(!(econ_limit1.onMinOilRate())); - BOOST_CHECK(!(econ_limit1.onMaxWaterCut())); - BOOST_CHECK(!(econ_limit1.onMinGasRate())); - BOOST_CHECK(!(econ_limit1.onMaxGasOilRatio())); - BOOST_CHECK_EQUAL(econ_limit1.maxWaterCut(), 0.0); - BOOST_CHECK_EQUAL(econ_limit1.minOilRate(), 0.0); - BOOST_CHECK_EQUAL(econ_limit1.minGasRate(), 0.0); - BOOST_CHECK_EQUAL(econ_limit1.maxGasOilRatio(), 0.0); - BOOST_CHECK_EQUAL(econ_limit1.endRun(), false); - BOOST_CHECK_EQUAL(econ_limit1.followonWell(), "'"); - BOOST_CHECK(econ_limit1.quantityLimit() == WellEconProductionLimits::QuantityLimit::RATE); - BOOST_CHECK(econ_limit1.workover() == WellEconProductionLimits::EconWorkover::NONE); - BOOST_CHECK(econ_limit1.workoverSecondary() == WellEconProductionLimits::EconWorkover::NONE); - BOOST_CHECK(!(econ_limit1.requireWorkover())); - BOOST_CHECK(!(econ_limit1.requireSecondaryWorkover())); - BOOST_CHECK(!(econ_limit1.validFollowonWell())); - BOOST_CHECK(!(econ_limit1.endRun())); - BOOST_CHECK(!(econ_limit1.onAnyRatioLimit())); - BOOST_CHECK(!(econ_limit1.onAnyRateLimit())); - BOOST_CHECK(!(econ_limit1.onAnyEffectiveLimit())); - - const WellEconProductionLimits& econ_limit2 = sched.getWell("PROD02", 1).getEconLimits(); - BOOST_CHECK(!(econ_limit2.onMinOilRate())); - BOOST_CHECK(econ_limit2.onMaxWaterCut()); - BOOST_CHECK(econ_limit2.onMinGasRate()); - BOOST_CHECK(!(econ_limit2.onMaxGasOilRatio())); - BOOST_CHECK_EQUAL(econ_limit2.maxWaterCut(), 0.95); - BOOST_CHECK_EQUAL(econ_limit2.minOilRate(), 0.0); - BOOST_CHECK_EQUAL(econ_limit2.minGasRate(), 1000.0/86400.); - BOOST_CHECK_EQUAL(econ_limit2.maxGasOilRatio(), 0.0); - BOOST_CHECK_EQUAL(econ_limit2.endRun(), false); - BOOST_CHECK_EQUAL(econ_limit2.followonWell(), "'"); - BOOST_CHECK(econ_limit2.quantityLimit() == WellEconProductionLimits::QuantityLimit::RATE); - BOOST_CHECK(econ_limit2.workover() == WellEconProductionLimits::EconWorkover::CON); - BOOST_CHECK(econ_limit2.workoverSecondary() == WellEconProductionLimits::EconWorkover::CON); - BOOST_CHECK(econ_limit2.requireWorkover()); - BOOST_CHECK(econ_limit2.requireSecondaryWorkover()); - BOOST_CHECK(!(econ_limit2.validFollowonWell())); - BOOST_CHECK(!(econ_limit2.endRun())); - BOOST_CHECK(econ_limit2.onAnyRatioLimit()); - BOOST_CHECK(econ_limit2.onAnyRateLimit()); - BOOST_CHECK(econ_limit2.onAnyEffectiveLimit()); - } -} - - -BOOST_AUTO_TEST_CASE(TestEvents) { - Parser parser; - std::string scheduleFile(pathprefix() + "SCHEDULE/SCHEDULE_EVENTS"); - - auto deck = parser.parseFile(scheduleFile); - EclipseGrid grid(40,40,30); - TableManager table ( deck ); - FieldPropsManager fp(deck, Phases{true, true, true}, grid, table); - Runspec runspec (deck); - auto python = std::make_shared(); - Schedule sched(deck , grid , fp, runspec, python); - const Events& events = sched.getEvents(); - - BOOST_CHECK( events.hasEvent(ScheduleEvents::NEW_WELL , 0 ) ); - BOOST_CHECK( !events.hasEvent(ScheduleEvents::NEW_WELL , 1 ) ); - BOOST_CHECK( events.hasEvent(ScheduleEvents::NEW_WELL , 2 ) ); - BOOST_CHECK( !events.hasEvent(ScheduleEvents::NEW_WELL , 3 ) ); - - BOOST_CHECK( events.hasEvent(ScheduleEvents::COMPLETION_CHANGE , 0 ) ); - BOOST_CHECK( !events.hasEvent(ScheduleEvents::COMPLETION_CHANGE , 1) ); - BOOST_CHECK( events.hasEvent(ScheduleEvents::COMPLETION_CHANGE , 5 ) ); - - BOOST_CHECK( events.hasEvent(ScheduleEvents::WELL_STATUS_CHANGE , 1 )); - BOOST_CHECK( !events.hasEvent(ScheduleEvents::WELL_STATUS_CHANGE , 2 )); - BOOST_CHECK( events.hasEvent(ScheduleEvents::WELL_STATUS_CHANGE , 3 )); - BOOST_CHECK( events.hasEvent(ScheduleEvents::COMPLETION_CHANGE , 5) ); - - BOOST_CHECK( events.hasEvent(ScheduleEvents::GROUP_CHANGE , 0 )); - BOOST_CHECK( !events.hasEvent(ScheduleEvents::GROUP_CHANGE , 1 )); - BOOST_CHECK( events.hasEvent(ScheduleEvents::GROUP_CHANGE , 3 ) ); - BOOST_CHECK( !events.hasEvent(ScheduleEvents::NEW_GROUP , 2 ) ); - BOOST_CHECK( events.hasEvent(ScheduleEvents::NEW_GROUP , 3 ) ); -} - - -BOOST_AUTO_TEST_CASE(TestWellEvents) { - Parser parser; - std::string scheduleFile(pathprefix() + "SCHEDULE/SCHEDULE_EVENTS"); - - auto deck = parser.parseFile(scheduleFile); - EclipseGrid grid(40,40,30); - TableManager table ( deck ); - FieldPropsManager fp(deck, Phases{true, true, true}, grid, table); - Runspec runspec(deck); - auto python = std::make_shared(); - Schedule sched(deck , grid , fp, runspec, python); - - BOOST_CHECK( sched.hasWellGroupEvent( "W_1", ScheduleEvents::NEW_WELL , 0 )); - BOOST_CHECK( sched.hasWellGroupEvent( "W_2", ScheduleEvents::NEW_WELL , 2 )); - BOOST_CHECK( !sched.hasWellGroupEvent( "W_2", ScheduleEvents::NEW_WELL , 3 )); - BOOST_CHECK( sched.hasWellGroupEvent( "W_2", ScheduleEvents::WELL_WELSPECS_UPDATE , 3 )); - - BOOST_CHECK( sched.hasWellGroupEvent( "W_1", ScheduleEvents::WELL_STATUS_CHANGE , 0 )); - BOOST_CHECK( sched.hasWellGroupEvent( "W_1", ScheduleEvents::WELL_STATUS_CHANGE , 1 )); - BOOST_CHECK( sched.hasWellGroupEvent( "W_1", ScheduleEvents::WELL_STATUS_CHANGE , 3 )); - BOOST_CHECK( sched.hasWellGroupEvent( "W_1", ScheduleEvents::WELL_STATUS_CHANGE , 4 )); - BOOST_CHECK( !sched.hasWellGroupEvent( "W_1", ScheduleEvents::WELL_STATUS_CHANGE , 5 )); - - BOOST_CHECK( sched.hasWellGroupEvent( "W_1", ScheduleEvents::COMPLETION_CHANGE , 0 )); - BOOST_CHECK( sched.hasWellGroupEvent( "W_1", ScheduleEvents::COMPLETION_CHANGE , 5 )); -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/integration/TransMultIntegrationTests.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/integration/TransMultIntegrationTests.cpp deleted file mode 100644 index 21a1ddebe9..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/integration/TransMultIntegrationTests.cpp +++ /dev/null @@ -1,55 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#define BOOST_TEST_MODULE TransMultTests -#include -#include - -#include -#include -#include -#include -#include - -using namespace Opm; - -inline std::string pathprefix() { - return boost::unit_test::framework::master_test_suite().argv[1]; -} - -BOOST_AUTO_TEST_CASE(MULTFLT_IN_SCHEDULE) { - Parser parser; - auto python = std::make_shared(); - std::string scheduleFile(pathprefix() + "TRANS/Deck1"); - ParseContext parseContext; - auto deck = parser.parseFile(scheduleFile); - EclipseState state(deck); - const auto& trans = state.getTransMult(); - Schedule schedule(deck, state, python); - const Events& events = schedule.getEvents(); - - BOOST_CHECK_EQUAL( 0.10 , trans.getMultiplier( 3,2,0,FaceDir::XPlus )); - BOOST_CHECK_EQUAL( 0.10 , trans.getMultiplier( 2,2,0,FaceDir::XPlus )); - BOOST_CHECK( events.hasEvent( ScheduleEvents::GEO_MODIFIER , 3 ) ); - { - const auto& mini_deck = schedule.getModifierDeck(3); - state.applyModifierDeck( mini_deck ); - } - BOOST_CHECK_EQUAL( 2.00 , trans.getMultiplier( 2,2,0,FaceDir::XPlus )); - BOOST_CHECK_EQUAL( 0.10 , trans.getMultiplier( 3,2,0,FaceDir::XPlus )); -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/integration/parse_write.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/integration/parse_write.cpp deleted file mode 100644 index 7d5c4de637..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/integration/parse_write.cpp +++ /dev/null @@ -1,68 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include -#include - -#include -#include -#include -#include -#include -#include - -inline void loadDeck( const char * deck_file) { - Opm::Parser parser; - auto python = std::make_shared(); - - auto deck = parser.parseFile(deck_file); - Opm::EclipseState state( deck); - Opm::Schedule schedule( deck, state, python); - Opm::SummaryConfig summary( deck, schedule, state.getTableManager( )); - { - std::stringstream ss; - - ss << deck; - auto deck2 = parser.parseString(ss.str()); - if (deck.size() != deck2.size()) { - std::cerr << "Deck size mismatch original:" << deck.size() << " new: " << deck2.size( ) << std::endl; - std::exit( 1 ); - } - - for (size_t index=0; index < deck.size(); index++) { - const auto& kw1 = deck.getKeyword( index ); - const auto& kw2 = deck2.getKeyword( index ); - - if (!kw1.equal( kw2 , true , true)) { - std::cerr << "Keyword " << index << " different " << kw1.name() << " " << kw2.name() << std::endl; - std::cerr << kw1 << std::endl; - std::cerr << std::endl << "-----------------------------------------------------------------" << std::endl; - std::cerr << kw2 << std::endl; - std::exit( 1 ); - } - } - } -} - - -int main(int argc, char** argv) { - for (int iarg = 1; iarg < argc; iarg++) - loadDeck( argv[iarg] ); -} - diff --git a/ThirdParty/custom-opm-common/opm-common/tests/parser/test_ReportConfig.cpp b/ThirdParty/custom-opm-common/opm-common/tests/parser/test_ReportConfig.cpp deleted file mode 100644 index 22cde95e8c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/parser/test_ReportConfig.cpp +++ /dev/null @@ -1,162 +0,0 @@ -/* - Copyright 2020 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include -#include - - -#define BOOST_TEST_MODULE ReportConfigTest -#include - -#include -#include -#include -#include -#include -#include - - - -Opm::Schedule make_schedule(const std::string& sched_string) { - std::string deck_string = R"( -RUNSPEC -DIMENS -5 5 5 / -OIL -WATER -TABDIMS -/ -WELLDIMS -2 10 3 2 / -GRID -DXV -5*100 / -DYV -5*100 / -DZV -5*5 / -TOPS -25*2500 / -PORO -125*0.15 / -PERMX -125*500 / -COPY -'PERMX' 'PERMY' / -'PERMX' 'PERMZ' / -/ -MULTIPLY -'PERMZ' 0.1 / -/ -PROPS -SWOF -0 0 1 0 -1 1 0 0 / - -SCHEDULE -)"; - Opm::Parser parser; - auto deck = parser.parseString(deck_string + sched_string); - Opm::EclipseState ecl_state(deck); - auto python = std::make_shared(); - return Opm::Schedule(deck, ecl_state, python); -} - - - -BOOST_AUTO_TEST_CASE(ReportConfig_INVALID) { - const std::string sched_string1 = R"( -RPTSCHED - FIPSOL=X -)"; - - const std::string sched_string2 = R"( -RPTSCHED - FIPSOL=-1 -)"; - - const std::string sched_string3 = R"( -RPTSCHED - FIPSOL=2.50 -)"; - - BOOST_CHECK_THROW(make_schedule(sched_string1), std::invalid_argument); - BOOST_CHECK_THROW(make_schedule(sched_string2), std::invalid_argument); - BOOST_CHECK_THROW(make_schedule(sched_string3), std::invalid_argument); -} - - - - -BOOST_AUTO_TEST_CASE(ReportConfig) { - const std::string sched_string = R"( -DATES - 1 'JAN' 2000 / -/ - -RPTSCHED - FIPSOL FIP=3 / - -DATES - 1 'FEB' 2000 / -/ - -RPTSCHED - FIPSOL FIP=3 NOTHING / - -)"; - auto sched = make_schedule(sched_string); - - // Empty initial report configuration - { - auto report_config = sched.report_config(0); - BOOST_CHECK_EQUAL(report_config.size(), 0); - - BOOST_CHECK(!report_config.contains("FIPFOAM")); - BOOST_CHECK_THROW( report_config.at("FIPFOAM"), std::out_of_range); - } - - // Configuration at step 1 - { - auto report_config = sched.report_config(1); - BOOST_CHECK_EQUAL( report_config.size() , 2); - - for (const auto& p : report_config) { - if (p.first == "FIPSOL") - BOOST_CHECK_EQUAL(p.second, 1); - - if (p.first == "FIP") - BOOST_CHECK_EQUAL(p.second, 3); - } - - BOOST_CHECK(!report_config.contains("FIPFOAM")); - BOOST_CHECK(report_config.contains("FIP")); - BOOST_CHECK_EQUAL(report_config.at("FIP"), 3); - BOOST_CHECK_EQUAL(report_config.at("FIPSOL"), 1); - } - - // Configuration at step 2 - the special 'NOTHING' has cleared everything - { - auto report_config = sched.report_config(2); - BOOST_CHECK_EQUAL(report_config.size(), 0); - - BOOST_CHECK(!report_config.contains("FIPFOAM")); - BOOST_CHECK_THROW( report_config.at("FIPFOAM"), std::out_of_range); - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/restart/MODEL2.UNRST b/ThirdParty/custom-opm-common/opm-common/tests/restart/MODEL2.UNRST deleted file mode 100644 index 171571bb09a9e2bda562404cff6cde4e87260c31..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 135624 zcmeEP1$Y!!*ADLP?k>e0vNT`Tzi4(+yl zd?h6<{Y$^@JkKzhxpwY*&Uw$dcV=5BC#S3(Tt9Eqsddq!PEJnAnz!lb%4=4hDS77n z`I=RE-ptjdF{{k^wN7demODA6$k~GbCVTVufB%z-k8<k-Pb?K=54?`f? z6-D2T+jf$lZQ!c%xAKfJxU5RE@y&cxoy|X8gU-CUI`5pN9J8Ijt^Vdv{Tx}H&;NA) zOS!#XyS}Z@JzVwTO=JG!oWEAW?SiOezklCVRr042=TM!k>H3_(jW!XQhOt{e2I9uf`uMw~ueX zO6_JrH`tZ)lb`yt-@8-}HUISF|L0%3JoeF?-?+o9+4lQ)ug-rFKJSk6q4%mk>Bo(9 z5szl?-q6hM$A8pM>mQxFDC1-);ryVcv;OX+L3a7y#mmksDtm?hr>je8^ATkzm(oLH zm8)GY=i_e_KHE9!=j-F2dC$&&@6q=!^{)+hbEuR~lW_bp{?Gl}@89jh{@kvgcgyYe z`&V7<mVak$-n4zYqCA*C zt$k}gBiU{VenE$@AW^|DgqnFTBqm5-akW zuK!2>ejg9~(fb!nwMQ?`41uhZO7PV3KC`^4?f z-*>gwf4lsB&+L6FS6d~`owx7b{#)rQvHQ2ne(UeIW%)CI|5o3>^~^qoQueOwzg1s( z=4^gn$sc=em%-}L-y1vrP(3JU+p)9%{UI9o*!ugBF&%Y2T?FhlbVG|K7ZA z&D!;s_?Z06uluIC&E}s??|oOhWvaFYE9w4gmr_MS?a%(q)usBlm^b~cY`5dupXtca z)`5Tnfln3zyPv;LKo^JqzYm%>&sDn?mo{e)9PGTQoNKNWV|6a&=T5cAi-oFhtIzx~ z{g%3kHfCX?t7$I#bv)Eg)$44&^0%6LxyV}m!o0^dH^cOc+E;Nv6UBA>71E1&ni=Tn8= zQr_!)^}dl^Hb(DHcweF8xdQ92v)#|%1;w5}C)NMo?dO00KDU{3%-Zdj{b{G1Xy(#hdB$^L^ENG9mG6{( z?`YS)ZR6jola%r%&0Sl4NQa7yimc7MxVBRI=jS+Se*K;*V?mas=Ba#tqin?6f4ic5 zH=w-JSH82de`{sG=cE5TxKBR!KcBq0d-F|zvWNZ~W%ft*-&)!4lXQKnZ@Y|1YVWB0 z|BirSSIX~p6x-nM?%vp(^0)G>gkppC@4(*J4)6c#_ylatF5`d6=6LW)Az$6ZWI<4-fVM(%C&Y@Cs%XRm&!z(LpJ^Ldqmd~ z1LrBvYL_{@R=FyN{hO_y?tZ^1&;QKf%*Mah*V{U<%i6r`i=y_wm8)yS7r(r}b1gh2QjzJe(z9Kj zKQr%l+bZ*Udk*iGe~f!OUiQB1I=16)pO~7!J-a5~9qzojdi7?;Ax^Hz&sTS? z6_rbo`)yxvEm`*scmGv-R>rks^|7wXeBPeJ$Lja(e*Q^%Zv3FAQ$vNf%_E%}KPXY% z^|SQZl)1c(k!$ghwUuXom7bMxmHt2Gq0Hy)Ieg5%?S1`|^sLD0y2koTtg*}fHs`sP zUiZew|0+Ez4$y0Ss_}0&=sg}3QwB_ZfQ>u+=Ur+P%D`cOm%6(o?*?HmJ8eJLK zXI_afr>J@_8`?PQs;>6(KYMklvbJjWE4kOHO5PEbp;8Z*dG{V&&(=DHORb z=Qk7k*VNhY_{C~p`z%!6CUd48T@Tvt|L*I@erM?%Fn?spGuHpw*MAq6cjvA8=Jp%A zfA_iLK4}PiY<(te^#7gO@A~bB&P=svP>%yuEy zophPrHp9o?t^3b09d~~o0o8(HwveOk)Xw^cbyDQo6Xufnc=@dp_J;ELjlH=(Z=hOc zliZQ*SK3EXc}Dfv{rK#P^KY!}BEEZXf3EV2dw4bU`cwP;-*tW8w~rrNp7-JK?l_M1!n=qh z?f(BupGlMIpI3YTwvH{D`j=kw$0g6%j%~Ac`(?k;Da%{m#A=jpU90}a$E^HT_O~7v zRq9v!jrz*->c8=v{rpz-qLfLa$kiNe+bGTWIZlUPzje*BkY&m@5pRF*%G>vUC-HOH zf9(q>jS@MO_ha@k(*9iUz29Q6T&bVbF_ilDG3@`1`NYOh>L+y!<(o|V7|OSF%8}R@ z_HQ_Us_FRGfq(-62Lk_p2q@g7aH;+K^4}X-sh?C%RQk7%pO7SAWFO;0Vw63evDpV7$~V3CF_iBu zl_Rk@sMJsDJl=Hb_{V{O1A*T}K=HS?f6t**O3VlUD7V|k_z+H1I3cNiuGF`W@gbb3 z)KBUd3Rm05P_D|67*>CT+kfiS@vj4ckBUH+g-qXm`A+Ca~1A$K!0fnnG^0fbMQIYen;CA~MAHs=$ zG=H~`@gaKwe752>&GuE(W-v%$4wnxSuGbib!ctesLfvGNZsOR9{h zQ(>5E$rXbX8JmoGsQf>{-+L%^-&>f3f~3mma(Hc8*HTT}C^EX{uAZn2O5G%g^4_XR zmGQkDISL#II1q3k;6T8Ez`q0mqz`zd{C7Lv-{&ZGlOoIe>Lyjj_x0m=?m)nSfCB*s0uBWJEeN=*OIua>?_|EoDN^V{ z5}UVDH?i^$ElX;=c4?Zqvula61>fWpGgNyL8%L>|Sow#RB~?aLn?Ay|#IZLyZj%w4 z8z(l7Qa7>k4=qcoj4svsws9>v@cJ7ZM~s=4*f>hv#L7Rk>_27vuywlfKHG6P5O5&i zK)`{31A%`#0?3g5fb!qCR^oP(4y^|#hKEu&vGNZs`_H(Yc&j(xpH2PlTh}tJp1sK} z625$tSPK`{O|1Mw%aSUi%+5Q-wagu>BBSfA%F1ta-g_u@-&>f3f~3lrgsvS`9SArO za3J77z=6O=MnGAoC#(38JN+N;?hRg9yZ-VUf~>E8{r^`KQK{-J*?s@W!mpfFms+%( z7SdUDqjz}Y)j!<&9|z^V)3g8oIo@006E9G;G|qZ5%I}hM`zvu%ljqy1x@M@Gvxn^d z#Kr#0#8bI%c4{8!yX-F;;4ki2wIt(`s7u}poTv8;Zl0=kb(hQ|0y6ox|KQLMc5O5&iK)`{30|5sD4g?$s zI1q3k;6T8E!2dD=D&L!ro<)pZ;_R7u+?txEbE+#iTDFm_`(K`OVslfurybzay<(#O zJ@drc|J`LO|H@aAPur_<_Nlh(V2M1=s`wMT)6Oa2{CCUsca5)dFFYmBk5&9jSjOe}!6qw%>nhdzE{QW82y+y8Vxp-z{IQRdIbz zIESQf_$utyF4cuKUoQW;cC~-%eEzK5D)*Mzbor+&__O^u+W%DuINqcGRmeK}bs*qC zz=41R0S5vO1RMxB5O5&iK)`{30|5sD4g?$sI1u=B5m0p>e`0^eW6PZ7@Z)g- zhpO{k?ziOAmH4lfOywEXWB22;|Je72s-DHNY1?=0@2qN_tZ-ld0M)S#v3xGJyI zO}|{$W8&W}#~&SE^~K3ab;f^N+_`z2$C08NzEB-LRAWiO(<}dIfB*D$DzAbkwrm;j zueIlYy8ayUI}mUn@NYuE@gDu(q;1Ds9SArOa3J77z=41R0S5vO1RMxB5O5&yZ%4rV zGXVP+*&5!S(fzLd{@;p=$}jHW)zIrt|Ecr0>u_5O5&iK)`{3 z0|5sD4g?$s{5ug)-lL~~@b8?vW7ZA?90)iNa3J77z=41R0S5yA9t7UxyjeSRbZOtQ zL)%u$yj#0==)g->`}-ql4Z=kqKJp}$rD`tPp5kfQ|*C7QrcT@8b| z9SmXDVa#(J#$MN8TzUh>n|)y_{}`sheV|WZn}_i*WN8RPkvXgWQRT~2Kt*zU`YJ{hTOYhD7_kn+8l4(dKe;-!&tB+jD0)6xau*CcYDB8 zxd!wXmqUNGF7!`s!jQc_48@bfQ1w0x>Npto=Y%n37Z_WPhHJ)TVaT)+hC&@+s8j}qFKfWCvM>zyePFCr21fl-%6Ai{E@3E{!QgQhhUL`XRoYO=*DwzF9QsAE&~NgA{@e1cKHL z)Ao{$r~SD@KfE&ZbIL)#?mDq31^tyd(Eo4=hV;*gAKO-}21EA<7&dX9Fa2S}Ip_yx zgIPGs2ZMF(A&kTdM1PtHSAr2>DY&`_}-nXImCC)SRKz~R} zo2@`Qr=2FJ4dtOdRlEhm*jcoP#xNFX1LK!Fq3?1S`hkO>ALk1Fo@%te9njy%0sSlb zMh@Cjx&HKvFb1WAz72h~XDIZhAn3Pqj1!d4Hkz1crym+%D8;$#qrIh@ zL;a+LapEQD8$W`+eHZBch~K7W&>tn-LL3J>($f~=NCnLx<}kn+@K$hp^vkEr(rP8>kp$P0s5-Lpl?WD?b4Sv;Sc?O z%5~A3zEKPM*OOt$77C;4C5*$@z<9DKOc{wsj%Kv|T(m99-i~_ABIFXW9mLl~|#CwCo%QP&a11GiyHHy)-od10E6oc2aL zNK5(hO(5S5hM_*^XRyI=E-j2jGsD<_5R7Z8!}#btOm(ioq&-2L-HF)~j?;$t9D$)m zEDYX{$*ue84>{-$yJ4K#jNDKjreZEI^(WSsgDKw+#HbDo1<4VWJHgPeC=9Dw!0==d zjCI$NyVNl5I|EaSc$k_Tq#wN1Zc}8#rzp{k#~tvKz;m^%TY^ z@^SuN(1%mcaoBElhuU-UP-vGdTZ3Fz)?<{X0|t)XO>A>y`RH`*vp-B8gAt zQ7{hNKs!qV$AKW;;zg&cgX_pe?7MEpH`f^nh_wSr~sbkO!_n zzx-S1Pj~;x?lX3y&5%2)bM8%jXd8WDEN}`&^+58pKY6+Z^yAY&KcBJZF!|sic{z1Y z+LV?2G>-Pf`);jabRGcXc=E>iOEBf6JfT+Trw)hy8~%N(Gi~fT47r-ZP=VN}XeXVI zz}Te>jLY>fUOUFP7zuqaeR%Xd=-0Y%-W==4957_w%b3-iHoX&u4vaekePP_Qf*5Ur z$(1PNp+!Qkl*LsV@TU6*pcEns}U6{c3S*Lgf|wSt*G zWUjXv=I)Fu4d}zI=+lG8z;Nm=V`gI*XOh3}yTjysAExnjVTxK0bJkTbSK9}32P1uZ z9d&mPhOemigXH^)E-;S$5ymU5U!yEcAtzuu`8mvK55ru31I#TMFKXnaFOefFl3SL{ zq|V7NtY?g3JTIrApYMWcw-?OG%EDY?D9nw&qEB4qSVPDWk6@U}d?QOya^5`{!^*)_ zFemexnlP>7oSrm-xzIA08`1YFtY>{*TkxEui_#pIOg zFgQoTFoE27yBP5%*0YzjLU6c^v+G+O-;Kb z-!(f)Jzao_d5SrsmN9k@<$DE#3pr_|Ck&^*WL`*q?MYr)IfZ!_`>)ajCjVHNw$tvO z9fBbheIzGssB8ts%LB~2c9Ofub!}F_IEgyGKpxI?7^c?5VI2ALlrR06`b<}XzIhym zp6AJ3lVEtUhrZbhM$Hc5M;pD@O1Sj%DBk&!u3Zsq}ZDPu5gFARne#3U*ijD$Gaq1^2-;p&+C!;2Fti*`A8Z3d;8+-jOoyoe zVDhC8?l=Y0^GVPzs7szQGasNWWFQ9=BX_#eN4^}+oRVCv9RpKi>SpQ|nBu0=U;W6v z1(>@9a9(2=XDDA`&fl3BenDIOY9Qwp2a`t;+9-V|1%13!KIq4sg?h1ux@ z%;mmJKkj0GmoNKF6FfDmReqnR;gj3I7!mzgq43D!jhv~{S(PEe~(ti7LKI=SS`r!r4MVrG6 z%K24Cn1|Dr-I%|uA^+ce0;3CK&4Tjes5H!9UcoebB21TwL9Y8S*WJiDt$|t380g7d zA&mC_g1Kok9gH(p!g#$4O!e4iB>gPh0&{u;%#}l7{=7HLepxBoIOe~DVNB}|W77tV zwRK^PB&U@)%Q<~TyX2TJM^aC>V0ItCY}1AF=tTRONl<($g#4) z>_S_sP0sa81H=03%o*Ld-X&jezt8`#YL*69W(+ITs}`U6E^%vzi}Ho!<8G){Jg zaZwhS0#3tZIZu7{r;Lp8H^_58j-ae;v#}WcgYm93bE*~-VEkepbw}=5F@tsy1#{sC zFgr7kv~XQ^pLuc4p|lOo%}S2SvJ}S3^r?EZkA~M_+Gm0}jT`MR6U;5nLw~70^Bv}s zFIc|;@w`Cno$|w2Xc~;=^T1fUH*uhiW{-urHsf8_^;|o19TUZM$*uOp-<>gK0R5dZ z<=D$L5_6=|w27y*g_6-QH*ZG2CC?vZo^+}W*Xh}r?-Bd(v$XY6%qclm{*r7rnLPE9 zw)#EH+*dH0BB0-yifghHl<_okBgTg?=3#e;S1QKiT#S7MnNNJi9HISwm;*b*JiRMC zE~SUZvI}sJT>|&2M!2on1UGDlTj}<2s~Q5gmMh^FkOFR&EpQ(Y3HOWV;h8-dJTA0^ z`zt-%n@okpS^;jEH^8mbLbz3mgj=~Vxb3_N_ra&&PA>3lG!UK@dcvdKa=3?1 zg4<{<2G8yWH>aX-YdsQfS;8^chtEg)zySd!7eyt8yO$SNg(j{7`rloCc4(h2d2;CA{i)fLHMm@YFto$Nf9-m{|=TQ~JO| zT@~&x)4{#_4S4jQ4^Q`p@XE0tUe^!9yI2Q!tJ=ZqRS$SgJ_;|F1@Ou<6`n5^!P8a` zp1VJXSMzG{PS+LQ3);gcnG1ZXkActP_3#;=7CxUfgZINn@IF@;-erJXnP287@caB8{6=+z zUzi{KI~0Te*Dv5d!xjEL4Dhe|8h+<$!tZ!A{O-iTzfv^(eOb1B8T?-iM?n2U2u#)y zflZbo;KyDFnD{*cT-@RRTmyegIRvC|MZlNo5U{&60y9-YV8Yc=|5|7=?t&(HJ*XoaKy3+trdI`MbG3smHP@@%)iAdA zXRa6w^VhYY$#M^xG(SL-^99@Lp?+?LrgT$iF4>^v{!wrr`g8J>2vL{EknuY)v~xqK zzq=0g3oYm64oxBA@$wclMKV$LXy~T-ay{4=Ay>O%=(emFR=gdC*B~A@XG8sD1T>ie zO;%^9~bT!vt0D-3<^VZ@yh z7(KT&#>#1o4ek#0*%wgXpkCA7hNe+NXgmOIfj!Wr{1(BrRx!_OjS&O-Vf5DG7@Ia6 zV>Qd*@%kElGYB62Uc-Iu4!GyF!EH+|xE*N=x2u`p?z9%}W&6W@>MVE^m;jH_<>6VM zKArI{JVM9?YXadGRu67<$XT;W!7Zu@+%7x8E#3lmZ+CbU`5GQe$UB2}!t=|0@VN2? zeZK(QPA|vcA<=MKPzdfR>vBByQ7k{)8(xA(^MmksOn!?z2hRs*;5layJZ|5FN12y! zpVk2G(IId@l?`s!=VIWoaJV;K3y+IU;khI~ybgW~uS@RmS~Ut@<-5Xj?rM0png-97 z9pG6p4LrW?0gvo8;aR{&ZaM(3WAot6JwETKNO)hk2k)61;9dF!yl$L^*NJ-Y+LRVv zlLo`fJCvL>1m64V!l$DRJ_lOD=k7)LX1fZX`}5$lYXE$voPdvcF?@!VfX|%i@Y$_{ zZ|2MJ4QUU*RK?-@EIa%vri5SDwD4;=0De_2!LLLZ{3-;%uSpF20*1ox+e7eA_6YtB zp2Od`0sgC-!vFFK_@5E@&+QHWpey7V75q)z;lDTl{?}(Bpj3SX3_6B@HQyoN&UpmZ zt%pF*y9g|C0|5t%BY^V@7@HRXlfFg3wr2>;F$aO(7Z7-04T4fWMbJP4f(Aq(D0Bvb zs+tjaG=x0!6oHx|2n?x$z+IgXRH`DnPyCTiSeG`ukC6Lasp5Di1UlZa~BRX7%JEP&fL9_0mDzb1Br} zZqT$|1P%A=wLR`Y`|We+N~ea#m0ZxP4m73O(~n%CP6#5GoQI}MacJVRK^xi_x={xZ z+@mV=AzZ_GMbTf#8BLo*Q)f3cRXah`b^tU}&Ow{AGPEaCLbszA_mW03M_bMOcN{{v z*3i`L3Qe__&@dm@G_MCuFvpE{fp!deY7+Nka(@kTpDhTvumVGFR>jbDO`s`G-!Dtf zaGncIiv`el?}6sraLQg8!C+o;I21$L_#rfVCJYOV#_+Lsp~*!bExH++dIC*D@?(vH z&~)eo?V_g$-pX}%vrvTkmB4UyEJi#VfRU5tkQ28-Q<(FrK|E@Z>mQ#+(6>3EZJ8ax zPq{8V;)>zxN@7%*au{tXh0$NJ|MZll@O<)k1T^ilLgRJ2fe z4#s>j5#t_)V62(-QgY4(dQi4x&=D;xMI!5jpiZR9eW9*W4QbM0QXtZaNo8G?(rkx(XuQ&&h3V$>J>b9&4uT(Z|KMM z*ybwS2bG80;VE!;NeTDyS=p`@`JoFuO1FSV1nYLw!z;s&@O-@(o)ek7EIteO{x31O ze<0jt5!}D23wOh1xJ8ino{&G1SB2+l<{ab4!fW;;c(rOs?zv8Gp^U0E@R*hd9-&X* zzGxc;b(_n)>o`0aGrhW+;jL*7?@J4wchw+|p8{S6dFy5Z1pn`Axk??I&4!%Bf;d{Udel_FZx92?kR##&V zGY5Xr$KiK39)6Ku!SCo+_{EZUp4EXr_YwUy=i$F;8vGxwLO`|t2xzb#0WC8lz%>d1 zRgWVeFYj|UM?m!e1av-)fW58C; zOi*_z4fXn+P~T$Qt=0_cg`rSCmJrJI)?Q}4meBanXJQ^R z$Dq&GUkT0diqOIaO{dwkaX-dM<{?*{=~ok>8FB^M6g#0^;tXAOcjyA{Ko{i-jo&E7 z^$gIsGnbgOm;A9Enyn9@&EOC1V!ryTz{ zv`){VZ59jdi5AeAY9pBOS6MHcb_T#46^aly*6-gMnlH&W#=OvcHv!tp^y~4DpmW}g zVBvnwp+YcUI))*2vtTIdA~cN;G;RE$=@&(Fz)v+(e++T?C>q=l;=~U2Ec|^YUq-+9hy)U4h zzXrNGvk|P~yP!FRV7yIv9_ukCGAqV)e1&mb9cjv!BJUEvJ~g53R-3ue1?YyiN3b{d z^%rc1v0O!rE+ZJTU?RqbRmQk#-dsa|M z-SRfPUbcl-yNvK0!S&J;uD#m!gJ;9j@aV~$DcfUs?BW=$yTdz6>Yvu>83)0qazAoN z9K2uWhW7~OEw2ONwRI@G4v+(v&w*D3&Uvzs*Mi|a?OXU%I|tv|&hTwJhujecpIf)d zN4z>Ghfj@E@To8dKFR06J3$8@?`^CTPEP3nKi6XL>pdNQog?Ab@G*Q}PlvB9C48f! z;rnm_e81PBq%upMFUra{e*kTAg zd=)`i_8_R`Pz0qVzf=rGP>zNOyp;xl`y)2xhjJ8hau>2G6Y>a2zBvbs7HPYO@=$r^gRvD+)!w)Ofm79NHc9-7ay^9g0D4$vp@j^^CE17qm6lN8xVJ$|Go-T!eP;YH0V7qnfOM z?)DA@-{iZg-Pd8bksL-_4RX$2X!FKETZw!(VGy)iJ3#xYEOh3q2(Hd|WO=~%R5Q6R zX+cPby<8KK-zG9Q+R+8tYK@^?l^WWF+|c0$bi^(AG56p7ry|6?35M*@V(6|D2sLqi z7BUx_^*x|1a|_y~ZK1t5kbHOw!DV|uznJfUT*5GPQY#Eg^Ay8d<;RF&Gi4EmZE?eh1uBdxyceTpeGknb<`t83K$|f+wB9SA zZAjhSKLOo5?$fmzijZ7tjLfhVqgxp<=0R$V>Aw}4e&n5DdAath1?`5+(4O7^U5+CN z?!x^;kGU{!nTgS9D`TwJYfK=Mj9auCnx0vpQO|}pQwa5y5jw8TboaJ#{y}_Clpdx- zei(h+31fSf!?<&kFm7ubXgYtvHC7gAlbNB*Rvo$tXAxYV`&lLZ_^yMTb;A{-Upr%L z;hPxek{aVCrh(V@ci_eMEMA_&;kh+8Jd2Zm_AP-&40D`R7vNcf+|$w@o;y6@rOF7e z^$p-%d_26<1i@=cZ?<^=kCVILQIb5el3etR>#%J~sxz_s->?)M(BAfkj_*x_GjbiF>51UTqR|$vunfulOAZ_vxFRf_Z;Q zgq(80kly>~n+KuwEClU!*6+C+y6HCPe%y!PRc)bH-dUHQgpg}DFtmDAgx0=*(3iK# zeYv3R$Cw{`3A!(;LN~e}ba$I0IIacv)wxfaw=_aCkH)aj4j6uXI7X&k3~dP`_f9;S zQ*kX*uRV0F`$E@;{=GQ`-{l4(B-;uMulfT<7QBX0^Il+do~6t|9+N*`L%aVxbR~B) ze_`&l+8e>2Pvv(Ms}VBw3`UOO-pGko80+~B#za%D+^)<;$Rmfz2mNb97kUM{;~QPTnJA49fFq(<@++e?|V@h z<}YqzOw%qH8(j(GTR+11DvhCeO1z6QuiQpnKT;LJjlV|lgDTvst`B3nynN?Cd4fA( z?5wL8x9bOtPostRn(yH~=Ony~mV?(|a=?Ym@bn4cI;R`gNxtxmS`Dw{A>6mAdxTa#V?jGD2o?nz=K6DnIOY6Yn1@}t0$LC$1>y_}A@Yz@eK3fmNr%!!& zZ$1mJTVe3(!Eg?lO6;lHmid7?4=`)`4NlQZydb^!j}`@r9QFZWsU z!vFSD1oRld{gfsM2;WVf;QsCPWe7}_76JE0A;9(}0-drUu;^(7c0NYl00JWpA}H?! z1a-0@sB<;$sch$-NO}Y{eTAS}Um&Q;1q5~7&wZA92nyr3wx`fG za)WkSQ|MA~e`HK==w7@;aE-!GVj-pKKgIfXB@Pgg-#dMsmc1_T#r zfZ&7twx-k==tp>PZ$$-N`&-aWoe$l}{oE7o4Bf^t(9zz4%dSW8*IaXS;P*^zeE9Bb z9!%T$ey~5e&NYNwSB~64zWH$&`z?&%LCiyLF?X4B6ovrq{pP%fklL9rq**Bpxq5~1 z`ZRRK5}=#C8o}9WAh>051h0+enuhOsJMp`;$9XVBHyJ}WRzm23y%;uz`^YzMLzm|| zbllqu&Qy+js+|zL%oX}c)A>I449q+BB6QXg3{PJGBf11&t{ zLM&b8iN*A-Sf=$7%bJQ}O@CLco~OimvWeI#9u(WSOJcjRPZGo`meSvdrGBJXJ|83& zE$27>iCC5{63fl9Vr}(Wtm{{ZEsIWU-mfX2MiNSgi=}8ivD9oMmKN*8;uj~Dk(}TB z;$k^=Tdbc=5bNX_VtsN>ZavCTLnwg)<~6dEp;8d|ZmyegKy)RT6DSSD;2%d!b#dDd90T`q`qN0`|1 zZxNerwAjv5rmU2wEbF^G70VYkvG}SeUx-*1loLyAbFtPdA=X)5VttxMY~99-ZQCxf zBxC)&#H?DFSlY7gppIfO^ZCp`vFs}>)tEl_OZ^GN(-%AP*ASc>-* zOXHzp>D5mxnv7zZ7$ugKpNr-BW3jgQQLKxmi}i;WV*A`v;;&wp_!qOpl7l$cCFUK9 zip6u8SVrh6-*d4X_YiBruZYDZv7X-{wyLEh{z5y6zdK(nsVa)4N-f$%tXTRb7mLAD zEYtIdWpyR7T-__y9&N;Wl(LmINc?^$iI3eS@!$6+7Ac5D3$b)xNc+1){hkxclJ;V` zGG46RHi-2AZJ~HoiJw_a;y2uo`0HL`DWau(7sb+XEA20pSVpg+O&Gm^>BO5&IHC+5^mUgBFTNGzQ` z6N^8w7=K@^Q?iLIS&YP^gT&U!FY#SBN&H}|#807&Ka>|s&XJrG?Y1rT&nSD{ag5zEFCVmZ=BtW6$@bzf7ll^!6rQEYdc+|VkISS!-DYP=$5Q^n#&yD@u+ zWtEX~Q%99J*5V@6kwI)8=jn$b5}&t*#CLBZv7o(nC+2=_#4?IHTWF zp?l~@@w7S4<;#0w8NxPmiC-*js9r9yPNR)KS|B!;Nn)E>Mr`*EOG4A{#Zrto*S63W zz7&g^wmvDfSog+?E&Ex{f0V@UE+ui=T+~0gyDVda>L`7CDgEGpSSKVG>*_P)g{u!3H|o@5{cQrPGZ`QllY56B>oOL zs$}(_>|RZ~n9Tci-;sBTcLM#{Tv2R;&PvQ+okTzXUgA&elX&YXvE&wVO+m4Ehtj5K ze=BZ^>>b?Tu+R5FxD@*NE-=f9*|6I>I`DLKT8tI(3bYbNnD545_9PXiP4)R zrr15|o3^xt_O^YfSgUOpYjk?CeZ@Q_)*=ZlT8q_sMdI#X=bSc4%s1sEruh)+doJrY zr5-*LYh^WgudUcR3>Dj{J(5scPfq(z;@3Tw*v7RbX5)7f^Z9i85%u_W1#(I+u~wzs zZ<`>thS$Zmg%}r9iEXJnbwIUirOzWa1F^eKKX1}atX~Y3 zxSLvux%pILM&B08*k#oBM6pD#6l)dYJt-^Wayqf~^rl^gN&@4i_35_~KeVsJ7Ux*U zDl_)%pnT87a-g7Ci!r|&vX^mxQ$BtS*q)lcgl)=t|~9qnHQKP7U;dZ!(ItXbgFVG3|a&vDIUo z7_wY!b8HefYy~lxB{4?YX043m0pj3IUSC3vNoEymPsW=~v10xHYq528Ax}+{*lg6z zv^^42zYTL0#@q5~#nQ(_f2Q4CW=>d%@!aiea%CshCtvPzl9-EIB&OX%iTm`iQ#4#K5J=bpJ%xLmB z$GjXy45P(bI4|cnT@tFNkyz%x(Fcc0wEJd>zdwihz(uiq)_^z+pj~`Rn{W}!_pij7 zhW3|ljwCd%BC+1RBzj1^M3*M-CbS?=X_*gPV~q6@%T(I!;d9J)skf(xIUfBTF%q-Y zU!q-8NYv#>=3tETSIJH3vNNBgeNU_=mOb^vVq;u;xQufnuRK03(V>$i>S-s5ns-#< zkM3YzBohDQTE>ANsN0#$-@$laM=ZCA(Ti>pccLR@$|_M?>q*oXjB9I4i1m=SSaA?Pbjvu?;9KwxgVTk9-p6lu=?% zEtDAFF%pwIvqbN@F429}oqy23ldZ5ibP-7#W{_k&M2Fa@p*p}=Gn{-raqU1e2-+* z(=+O6j#yJR6>G23V%Pm z<{mkhzBy?J@hVDw=ep>`_vE!UVl91G;w!(F*h(iPX61c}sk)DIYQ)@<^GW_dteu-P zXQVAO>BRL=0)2BBeY!B$c{+*hTTo(#jUsjiVt1c;&jhiY|B~wz^5KT3l#gqH5!BVS zHRKQ4uWvqy&&J%KerJh}93as~`j|Uo)m*~>0*T&GR-)Th zm#8O|w9Yp|W<`=`CdR)K9*%qz;Sl=yasCE6#YM5iw#Q5(pm_2`#v zXD}bUOxti0>+E30$-QDrRatDgXz%&+NL*kOiLU1%QHRq?lv})5Dlz|Z;o6{YU&g4T zVjX1`>tT&p?{fY2>U*(eD=l$Vwn=p6H4HH zaw^+g2`}G4!rBj&lPxmHiB?7B#P)r1GTm&p?;t0NJdl%3uSi&*SrVRSh@3Jy^W<13 zib!~_%o5hNpq$*$Mo!*7B_}OQC|?gb)^L`bZ1cHdcd2@iZO;XYR+yhBb2J9|UI%7jX|v#*@$bWKjD=_aSIkC!tg-QLdPfm|p zC#P%2$mt9NZx$CFpe8XaLe&`c9zju^eNHs(*OnD#|erzZgVqVFGc^Bn^&o#M_VUAo# zen>8qIUyH3hRTJ_r{%({dUCO8R=GIpp4@NAbKU|S04f{^(B2m-5C2Bn5 z|D0oNJB$8%QKHsoljuR`BqpQ~;|ibcFCkF__exZjWfHmUsYK~+NmNKI=T%gqmQhyb zl2OY&$>~KU)+M9FzbYkB>GDft#Mct38z7ODvP+cb4T;hQNz_!zKmD*o^%*ZwHN%-p zd?vBG^K(rzNFx2hB(fp(@tsJ-t{oh+ALXQMiR$rB<8Q)3Ns2vi0x17YeFvn~$ULv*(kcep! z648B)L^NL|Q9a5^RDdUCJ1S8Jzmlj^?h@VGU1GEYBraJ^iJ!PoB6?(!h*8w<;QJEM zk8|&Mk8@(X38^LO=s=13F~^(yE@ovWiG4DYd7hhGdU}#J<|z>~q9vjyee&`$`X(g2 z(J=|rKb4c#C2}(8GdVe`y_{TiK~5e`FDD$-*O?(Xhx zkO?GtVBro)2v97FYu#O;PMvy7-Q7!_;ueD{b$7Rao%bE*`~G{!?HD=Xl)bZUt-0o$ z&ptU(J*c4Dams%mNBQBkC~q>iU%HZVK8~c^;H8wiQAN4C_E7G2FUk}5qP#DQDSze^ zDv(X10{1GEe`6Ns{twDcA4WODT_`u=9_8lb@OWa%Dc?kSwNF!i_qvpCyiWzU>QX^v zG!-mpMfnBX?=NGPt~=!&&{EzO3FYozK-m!`l-KA3<)2Kaf@QW;m=#Bbh7nYld65d4 zTNEseqk<9VsbDyNPBUN1U$&O=o_SJ1RXZwdEuz938B}!Ci;AA6QBh?O6>Zy2Mg5|v z@YyaZ%=V+ggJ-F55x0%jGA6B~qFfyn$Lyry+n!WXUq>ZF=TS*R7b-S3qT>AnsCdl_ zD&BCAijT)pv1vG!3<{!>T_dS<*hMPsU7t!rZc}M$6qQbGK&7hBR4VV!f9FJ{6QoqS zwF{N9b}zk8R5oP}mB|=)-nAyffahdr<3ME(v{ZH`i%K8gqcZm5%F@?R+4(>!>)w{i zrf#CLO^i*)JCkwMH!|iQCFAr2GPYsd`FV%RCOo9FlvRvnaa6YGDV62drn0O3$}8G0NiLjZqvK^YmmACMtTPli)6GW=m|>(03I{wrCA za6T2jCG#M6G8KZ1p~D!j+LO_11R4APB;(vSWPHS**??oNO*vV3pUT;1vZQnVH03-z zV@;-Y=g1Ub;e6>xCaVn289ABWJ|J`58Dx6ihAf3E882+ea-b3CQCG4=hVbuCkSTLF znf(TndCd&QfZt?Zq$jgmBAMIxbH3CjOA+J3WzM-XR~VmOk@-psGW+-Ec{83IK0)T| zd>&NDl*oMX(&NheEbE#}?_$uc;IETZu|Z^l8dATo!fGFI}u+j)>F z?HpP5{DXZH$dX+_ma-XS`I$wQ2CPHa-z<-#i~`-0&jHdFBpZ=aMCl`SB{|22BU?+FEjMiy6bM$+(4aVD$*bGiz>}L6!@Fybs*R zdJL7<$Y3w18I_-XPbLN9K<80peA|kQXBgX;G2UkK8D%jB-DbY=We$~B%c1h+%q#nz zrwRvqGS%Hc#)sX>xRuW|nlU)lM3!yycrV^ic@yS#Q#DlXa+%8W*>~wbkt&{W+eNF% zxUVi5XLTWC0MBVQpHD_Rp4Sd4AC^Ytr{3}zucY!@o2jCUhAPGeaV)$gW9oh~&i+Bh zpyyODlW}Bh80EiV-qWui1xJB3Q7_MnoWZB*hFNF`xQs3ba&}Bk{3s) zG}47JW+9b6@Zh{ZNM$V!Q0eqORMxB~l~tKRWv!B_%<2V|#VDz4_%tdTQrVJ!Q^G;+KGMEfb3(0UehzvKrlDSS1nQcnQWZ6Wf zJBPM0@lU-ot@vfS^$G0wT$ZZ{dv9wXDhc4V5R zAyal!GF|f~Q@S6S=2Vc$iMhZZ)(?XplI1I7%{W^!CA{F*c`_BuBl8UAO1B%5>Cs~{ z?F}H4ejMXwFKxblu4HnEA>)S@WK8FA%!|l!&zHwy z9A3ozRy88?Gv*0u#@5l>nUh74si~GsbsCcKoCotv#=P7OWHD7C%Lm5Bj(5qtEsL>x zCS#R7?@0qPTMm)&-WW0-X+uVbUu1YAW4*<^rR)b;UWPM-1is*N<}q9rlCjQX zGGt2_qeqgZxC?tE>@6r4QTgn~{HjUivLoDQFPDYp&l zB(L+7vz2vLnuT%-$58I(nUv>xg7WU2X6~|@3R|wE0+&9Nzb=dN9?qtmiCZY|`V-3i z@PTp+Gx*=LD0j4m@(wf31*K5oW(O+tV!rZb8x?$#6W)G!_^ORG?EvrH;_w~vZLo>TF& z2~=Ehj!K$2QiGc!;-ONI5(LL4F-^5$9pp5KIb^%nmS-J83kX~0?j!$b!46`Ayd`gWVp*%S9zM_ zvWRggos1k;#zW1>c(@iB(>{_hnRQJ6x# z&sX8PS~QW2yZ(}KoDG#n6tG{^gEb7-NJ%X+$+=cH3ntT;H)MLu-2eUoGF5jX<6SWs zuiYl&3IK4(ql6^t*o7kJ&g4+(jkJ|18`x|9s(catIgE}!=# zvb;&8@@7i1=uR;YY|0$V#JX=3ndjFc^T<##8IQ0Y&n83WB*p}eq0~2wFI5;XxNQOR zmi7%9D+^fL^7_TBvmQ4i)A%$p9N$KU)jY2>9xpY9YsnL?4Y#R${5;mljPKd|$y~I6 z%#2Z{74^x~Zyv9^CC`cHmin1reW);_2^E-^P+_MAlt0=)dF(ysI=!Qu(_Ja&ZWqd} zKb&&645qv~%w?pzD9@R>%;zF1klv*H--{@J@M+dN7bxe62jw(n&!%@idpNHtS22}x z-(6rHw4d_W4=(7>n021{$(Bu2(1LYWhBf6nvRBl)1?8@tNV$WqQ_c(4dmpM(-jmCe zU!UhRvXTlXFQ>w(@2N0IOa(tnsUUhM<)^Nud_5@doq=-LqsqVQP6d9gsbJD_Dr)tS ziURggQS=)s8V4%UZ=k{tj6Kl2O=;(NxrE0~NixPQ}5msCeZm z<~4y-Jbxt>ALhUFD`WgQN5%FT%!$TQN#_hIk#?byp8RUmn)wcUG)8AC$=^dIuUStu zenh2B8DqQ_P^t5HDh(PzrAvNN>CIHelrdBq&z{Xy<~VJyGQNDIQr5p^b^qZaGRBnV ztetdJwl#`%)JrP6RY_&9Bbn8C zf@)OWKa0u}*@JiDynN4`rPV<)-eA5m@H3erE|JNvf{b~LJ$ufOae{`7R?Qhh*zZq{ zq>7%b?dxSSZ({zk{1$sgbNOek_iM(H@g(!?{KL#|&XKYGW#&nJsA3-bKGt$F_wPz( zd-fe^G?_ayZ~4fc(J@;xR*1-`?7?F!B7=#2OfBn+adBk&n@DEWO3t14WS-iJ%)=wd z+>QB5;V&}s^IT)|Wn?HFMTYGvvWV@;{AL2Ttw&~lerYx>Wqt-SyWV5nw2Vw%SD5#C zF(*9A^}8P#7BLsA)rENow<}#omNx7?z2^LOSx#n8=1iV4GM4gwXG|r-R^IESd1N@5 z^BqluPo|X5WUO4rxypKYQ7q#QW5YlBZOwSok$EQXmSrgKf%zb}=Q+AR zB9rD486Q7n%(3NhGPoblF|93Gl+1l3j33MDkfj%EFNbt8pKZgqJ&jCrGs$?G_iGVj z+%i8N;~!jbB#S@e;1@opi;Q=JezErx!=7FNnaUaS>)5lNS8+^j;Lqpzr8*cZ-Fi^o&mNRtgLN9;{V39Yq=LsI*!vm5 z-VNh`+d;}}IE!*Cep2r7+LU{1B;_|BOZh3^SgXZRQDf#8d?&9k`xzAk^`U}>tEoWV zo$@aPQ@-1F$~$U9xtDz?--DutYo%>1 zsmv{yN}l|n((ZSuwEh+$ylo)8IH0J5;z9-Z($FH_0S|WnT9b3cTFL~ zQ?7v*u9C6cXfn=yN5+zkWL&`9yy|AITUE$Vl0$~gNsK$J&D)oexi52&=UcgLAjkhS z)(OlBo-xPXz%{k@IIfQuxDKCT9?ZV$)5%oP)r!i0DLHSrw)u}DlWTV}*>Nt^<33k; z4qZ9lp16>)H*3I43aTh>MYlUe@$)>^DyrLL?!^60FpmjmP1Nx$8Sn6%U+{a!lkEL` zAww2__Q|hw+kPO|Va|d5bGVlFAXDB{=04TQ)N(T!zx^R&UBHl&K@UAD+kWA9QKwY$^3{t zpaj-(?|7^++2uC$uGcqzv*(h| zUTP8<&)YEO58`_NlG}Uoi#1AQ5Ls3+zu3b#@W4psAl|op#+gGj=<3Z8*ugllPeBQD_wRNHSr^+FGI!UCv|i=qBG7aHdjXtPtHZ*l^WE^QGtV<4ilP9x?` zG~$}9gKF6asEj+I?qGp>OEajS9EN7#Cuk#|L$|jj^cAZR)y@jhfzuE(V;f?3SwS_m z2~<~FL0xAl)M>mQ#iyWYvkaPVY0yb;LqDw^BF|1o)aNfezln(T90gTW5mft+L-m3C zjC~6A`50)b2SBrQ0JL{^K;KPz1$LS=3Pb$D~AGw<@A z2SGE`0PXb6&|RB?$Qp|g<#Ywn<3A#1-9xCte?qnA7gS#sLGADY>P5q$E)zl1em%59 z#zCiXgnsjIMBW>Y=r#$6v0V(6)dr~M^yYo&0Cf*O+vM#$zirUeIs#3>MChtoLyvuk zOzDECLk|&sr!Q1B4nXC@XS8Du)YX(w%O^s;T>|yHThJtRhn9cV6+}S)^D&|Z7!Vy4 zfN#R|LYB+y4OMYyru9-6%aPI04k@JP;EKEah?cu5RZ4NEi|nsLwof& z^qpN0so;1Rvk2i~83^CL3K8D*pz1yws_9`+J&cCh`6b81N@!}I;=IU*KJ@`2cZVU$ z9EtD|2N6DAj)=xmsOl_&N_7va8~vaj%;%Jz3-wnMbi0Q^|FIXM`d&k{Ul79UMj+hT z58Kk97apycqxChO&r_emgMD#BO;&-$`LN4coE632Hp-`8Ypi%aKW^XcdDc2C$ z&KXg<#faXKhM4P`*1C;2`>}}ER6zBY z&(g<*v5U{=%^GOz>O;%l=BryFh5oa^`7j&N5m|^?I~}pcOvG2e4pqTzsM~N(B<4V! zw+ot%CTQ!mgU+c9^sAf^nZt4SxgTP>Ekmrl3*x3tM)fOhn{;hzf za0z2W9q0#yAu^P6FC2)T2*j-PL+q(C(b}34>(VX9L>q>_L)e$DP@AVhf2oX>AN}Z$3s1r zW9H5QXhaR5SuzBg%5R8tVtl_l3o$)o5$n|q5q^mXAJ+vTs$GmVouQ8X$}x2rn(m&^ z%v{QSG7$Oj5u#l>A!f>8#BS_`h~DE7kuU?Q)^(tI&9%pUCDaE_K+}Z#Bv*r`q!dv; zTz8J}-V}X7T-7BA|1%vC4n26h{*3XAgZ-;Ry^QDhy$qUg2{c#7B5F-b#I$*gSXn6I zCf?z^?9ch!5)m~bp_;|H(oPKZq%5fKiJ_q)Xf|x-I@%F2#}^~^+c3m;zlQM483@0V zj_}*@LaSnX$TNwxW45z+C^v`C9O?-g3BM%XOn=xw2P=p_ILAdEER2vxw ze(`!n+CqKqA~daDLlYH**rq!X=XnP4oMQ<)_;V7uUYytpE&4*=ZWSW`79sj@Fk%O7 zM%=osNT|^ri6g_1w6-ylvmYSkeNWEa-q39O3T>|v=w2;Aqf*yyhr>+ zA0#&ZgCxIANS=8JDLV_G@#?~uuZOnTCFqX-MC1~#%|czoFvp1NFGl>leMl%gi=?{W zk!&*uDXLgLZ(eJVGc+wfL)VYb&(RCf4XYq#O%25Uj6%HMQ6wyGgT(75Bz+G>O6NV$ zbYX7e8O}NA3hlE`h^%ixROuMR1eYN8(j>&U*@Fbn^GKY>{{_;u5+uJ4fu`vfXaeRy zvypMXq6zfHk2rqsah`8R?93mC%l1M-t;R^S-;Ja(Ly^q;qW-l48izE-6eF~cOQBy= zi71%_(Z(%^?ei6J$pYe!-ax|3QY3Zik7W7-_5FF!^coCJyfw7NU7(NUdi00meu@oZ z3i~0h*-yj=Xppd~7>PHnk@VsQ)E^f@BVnxEmIdwecF?=UajkfQ=&qX(Gp#vdk1j{t zTNfk@`HsYxN+d1TK%LW{YgiyOw|YT)pRvEA0+F$s5p~8BG3}Oe?tVku{I!f-HIVR! z&$fRTsMj(7s$^Upn+ffan$W$OkI12Jh>GL*Kf3}k@0KC1?OnvX$&fJ728lbGK^^rC zRmxgIQ_UXQqzLHte}n$ZImWJDh?a+No_$2@^c2Kx^hW$S1rqKY6J0NDYJF?rTG5Mp z%!fX3Eq4xp{>*aD&GU$Q6wUi5Ma=UJ%<)Dd-c`qAO%fGNY#?fPr~>|ncz)r_p*^?; z`nKB<>7Rxu=M#t?_69K>Ch_?mMttW;B&b%2)-D?)x}ItUbxZ|wfRWI;E1(;*8~U^y zM8-@*6xZA6*Bcq{c+Z<~E_g7<6Pux$&oxNWgY$VRG*1seYfgb~^GoRayF#DB{4T@; zan;i}_EsZdLJO$cF(=Y6muy;%ancH!@!O&Gu!8nA@5kVue9k;Zy{61_+af;m6B4p- zBI5mBs6?Ej5Be~7kTQ<*x}Mg8HhB`XnY=#6pxDtdh%;_L{O_?y9H>M@_EV_p*MMp* z&u?uo)SnwdvxT`=&nwV|avfdGcyrE(cu6!8rc@$v*DgeC)F8rK2$e6_wVBJIe$*A3 zx!mvj4`>IOp-oIc+}N6kukc4=*AyiA97IHNTSV*%g{lMNesVa}hHPk}KSOi>0<kh;DKNF%Kk&Tg~Utc|H;sWFhJ4D5TgVVAP~37`<;i#uV|HpLq@a zWFBwy14J2aA?Da<#Obdi{%s)=qJ%br?0G21aXJV$8yK&_&jUUQ`I(hX#o9 zk3&q%J;V)NgZT3ek=XqTk|xeZ@=05yyq$~D-ELrvy9ac(Q=s>J2L1TAi2TW%e)x05 zey_?n%W?l?CX&Q4NFFl+DThih>UlQCG+PGkR|E7N_CtTv3X#7*Bl_D0#AfwJy#0J6 zY&?p@S6`4kz=)Kn?HIM;6h>cJ3GJ%4&~2*${Sr?^Rr`kMOTLJmxEpcb4jk}jG9us9M)We?@7}Euw_S<&&uK`sH6m$x9+EE^ zcuik0x_K#|SrzCWsG&c#m3cPvmqZI<{bZjr}W?S3JI+QBuYObDX9#}+kljOf+pV|+9w%2)_6p&ib7P`HpFyx zWnANWJLwzZH}*lowznKd?nrt#0V%augStg??B+oiCSuOG3{eR=tcP|Xwr+pK)jfr{ zpUg8G{6V61IFgdbBY8XLb2)RsBY~__4nsdH1d%3=Rma|lnOKI{xN3;=W*n%|gU`1i zlH7`syy%1|XMStWnIF)+V4hj+79yEHMr}$)^ob|D7gbq@a?TxaXDsAeV%HwYW6wcd z%lhAYy->>-4{FJwJ9q_=jDb_jWnNMW6>N?!(58FPGl)?s11A2oRYv$-aFEk@*= zxrn^<4GGVA44o^Icl}0+f#(+8nl;5F=2qjNaba%zW+(LfRwA;?Ox8$u5IOo661O-a zxuzT`o}7adzd&XC3aVtr)k~|`qo@bn(`6j%TM=2?36T<>V?Yv;bcIciL$Iwe6XIEeA+C8Ew#r$+!wnFn zmclwE9oC7fV7jUwy&LoI#K8H=e-LSQag}CAj#3vN6{bd6i)fR}N#ju+F71sVD zSie@lI@tiL!G|Hzb%V`RJ#5W^knny=<}QbLz%SUA?t#t7?m*u#V8caVZYr#g?Z(hG zHy}#Z!ZzI+V$m%~kKTvWQVi*?LP+HIAeM}R-J;pBn^gci_m8lZuYpaYEwJk`4HD6E zNK>oA-YNt3dk(<<*+AH9`$0$@0_l_4kS;$9X-EX5J=#NJ*$3(89N16vhr_O1P=Yu3 zfe##y-iG5s@I~mZAfH4~qtT%HdXO7mMwsdb$DaG(RLcd<4YT2#5)YT2x8bt;9b88L zfb+R!aGtmx&g=^~uSX?OAYZ zFNa&b32^go0k^WAa1ZSS_ZJP}G3F~gKFxvGtk3XnbO~O`mGIo6gva0K@EB!+hs`B; z%u0u+-41wuO@!C_3V8RE!uxdvd|s@BZ>N0ttoQ=&Q%ZPcEr8cBJ-k|{z-#eUc;=?@@lp924+74RP%3IBpkklm|DwkICzE8w3B()u0%40YL}uBI@f~ zEZAs^6{5yiyVDyRsyIR>Pls%@J7k;g@T)EFWlQ)LuY%5q$jTIu9kzySRYL^We!@u4`G}gl7VA!T#-7+zoOOJAr^C9c9+2B$Od43 z3Pk7QAiDno==2iY8Q6ISHZ#7!c6l$@C5s?7yoPxEJJ^Mnz~)dBi1@6nuRMWhZYfZ^ zFVOBL&}M@_1RWPCpA2 z|Ag%u8N|-MkT&lPsbd->Ydj#f8VTFIBG}9lVB7EmY(CuqdNjvSOFiJ;b%<-9fMjP8 zgco07-z)>d>DG{*S^>$rGKjzVL;N`#;*)z}cgY#H)A;jNw}EuGBZM#4;BeX%)UgEA z{3#sPN5lR^TiA<^LHJP4~6BMDCFec|N8|HGn3 zr{K8K0LMiBpO=hhyxFk~j!z!JiS?lK=t{UuJp-4hSh(c%fNPHzaIK#V7sDO6oLd2x z-0EjO_?HoSr};Pvq+yu-f3EBh$Cs?UUH{w;W}o&(RVpWykrD!g_T!&_Yp zpIUd}vt$E&1H9m?s0!buzv1&N20qPpz&o-Byho+Ndrk?wf3$*6;Wqf@G=<+3EBLXG z;=gDF{6}wt|4S$M4?7FrKZ)>l?+o98gW;>ogkQal+^#eHf6wBWw}ISC4taV{$b0R8 z!j^MrH{-^kmGG~vh2Q5p@OQodS?_+3_q_x~{3!%@RYKX}Jd~B=A#dlwcrgMpGspO7 z#svQi$X48kT>KmgZ^ot#5(MtsfZ(rZ5Ye^-TImwVTPq;%z&ZVQJ!J3pLq54!g zoE->dzgGyVyNNwx_N8QC{yPs7s3zo943K@Q4tbMHkaxKQ`TSu}IENr$?3zH!l=vjy71yo=!%yI@oyf z3}pN7GM?$UEo0$V-h(k~;Mb@+0{T=Ul(}xgnI2dr-GnWQTG;coDR%XjL$=KXS@ei)OUn7Yl$+WhOfe6!Z;G+8aWwX4r{R3lDLA(BDr9ShLUt{b=f-ETIuHuh zCIRcT2t2wCq4U{u^GU;|Z-jl;wQ>CMW1KjtfovhK=Omxcw-%6_>Ox^ihEmiFK@D#r zbZm2IyMM-}$s+8V9f@N#PvFGdEJ#x8K{7fW;!)jU`|~Ai3Ugpnhq;BM3vAMs!shx} z*tTj4TlROv)wmshA%Vm!fn`4L$w@B=GxtDP zzZcSPk@a2%$9*5muDWq-N!@jc<9CV3r^xp@^wb$UNKLmQV0uGe8vurS&Kl#Dsel@s$u!d{SX1Fz}4YvXOE^i07-g$7V)e~-mf59!j2HXl-!96Y% z?)R9RL^Os6`|loKLgCpw2%dG!@VKvm#{uRnJ08O0VHQ05H-zWa1b7YY0}brTWYr6cATHAp*j3(Kdy!Rl+*Aa8aW@;;*> z5BUv+s3#O5SD{$Kd`%S0UhQ@y%@4tnh~rp;>e%?X4z@IX26?SvkoQ;xxvx7Ejp{?b zF9iP0M?*Qe3nDVZF)C&)*6sQ7!pN1e= z4WagPNIO(8Uy6e59L5prSlCL7VOz;K#XQ0GLomdxcR?~O0MdDVAUw{5aJd$wFE&C_ zmoaJV09ch@fUWol?8H-Hd%Zqv#_fmQk+YB(Y#}g*vwv3;_J3EyUflpf^$bW7=Q9tw z1M%-45SPz~U8@v~NWKHRk{giz83g+|*Z;lO3(A&(o-YAKzk$Q}p|IDhAQVX$6L^n!1@H9_;nP?TpB-}ecDM(hRq^n-8w#I&YWM^> z!l&9a__SjU6rTm3gFE3n*%f|+v*Bm#4}bq@koA}gza>B5ckdwlwv2(F5C5)i4E< zhF`#U_!Y#%KjS6yc3a35;~>vALlMlF5xyF-_X8nYIuA0ZweV-H=U*v;j6GD@t0c&8 z4S?cqG-E^%l>Jko9RCN3fuRUkVqgtp%{7?0#>ID#pSFdf*&PH_sRm`O<_L88ji7G% z2>QDeBd=|RB61ZJKRHJWjv}DVbOdx!A|P@#l+9BS*uw=uDT5H2@&KxCR?vs$Am$X0 z;}!zN)eTU*T7`h4#}V+C`Ob=_2;}D_!S<68CVqvedn%+zuVT`MFib!E5c0#(P*nK> z#h2R%coG3+@E8PkVhuFQ0im0oLd$%8a^f${PTh$G&HEs2##_i&tc3g(ujj!p1l+z2 zrEm{{wUh{M%sOLlN5n;YV7}rH7C*R&^hHXntI3=yelX+(KN*vC2-q|M0oPt3;PpoY ztxjQY_ajC>GGp1}saQ9u6SfQr!L~{3A&=O^*n10#J;x9*YA*sB{-cYgA+RKwpVvOY zgv77Nh?tI@tFv)f@W6q3yuSfmAzzmP#nAx>_^=Sl5lSd8>_KoPd%q(VVr>0K$gD94 z$NI0sRm&BeWnV?^#(Zy@9*X^E_`EhFP_RePcp!AcQD_!1zdHN{d&Z>W=#|Mh7t$AJ z4<3cwjyY`<*MpU_p*%eSfv1cJ)@LAW{7YzVyhMy?Gxi>Lz!7-{PFL09Olfu4EBe7+ z%(*Evf+V*U#M`dG?sj8{TbzS9W;4V)-a-7OE+ob5ojeR=3|R*I{e56Rb`FFzJtTST zpL`k(+wDtWci=t5vbNmM2V(UFNai!|cw^0)W*Hn5UEnb280>?aK|1~(>>e(MD5MB> zd+S2HFAL%k%VGQY7bIPWL2zyZ`_*Bf@Vo4%%z*{_kLRzr}lB0Q$CZs{?_7&ne zJ7D$J9TJDPu#Y#w;p1{RSy#d-@HZTdy+Dui;ZV8(4q|=}91Dl8yxu;;ApIB(hdNK- zSlt#*!Zf&em9ic>%eZkI&PVIP>GBIWDL=x=VF8?m4ua#|U^s5R52thc;bL_YuG)=o zOIQTA9navlv;=NpiEzDV1=npdxULc4%J)}X3*F&1G!<@zm2f}X86Fjh@W>2hTwyQf z_Gx&w83d1ayWmkc0-kjjz|&O$&wZir@)!p%zHi}ex0|`k19)GHfOo}qc;}sh_l6Vj zo=_j&F^%Azd#S@(ho4XTHTev`d5-X_=FR@eRQR>40^b{(;F~-PzNshS zd*?g+e=^Rv4}h#*9{kUag#XwQ_|I^J|FufUb6C^6GcW(n8s{+U4pkrK0jz6wEQKPd zE&{A#p!CQ_VDE*Tzi$!va5DmyvM%~ZD`c)lfKrbD=3)We%?Ow_4a#^W0!NKS&~X7H z#}*>ATLi*>&E;D94a$g1P})s`a?Ttm7kffknt;F=6A-j~B|`eTB4YJIX!#CJOhgG1 zJ_I4)1VK4?8DjzCQfDy&(L2^E_{XJBJXdlolthFL}0`d1a8ekQ2)gUtKXmRp`5|QaaFPF zV=J6&^&U42yK(+IdsMrep?J9t%C?N5j~GMu_dkwmn=u z;j%j%wy;;aO98>!3DUZ$kl0^`WX4}eOiv+gQ2}Wbdlz&K_VU$m;CnsPo^?mX71+PG zgJ4q&67?^LYXm^T&tN522C=>hg{1Txq(9hSRsDuT%r4O7O3*47IGo~f%I87i9Ss}r zdyq8U1!+fHNcJ>^I4}v)HD6$V&JR@c85|2bz|j&0$3getP}~{zb|)ZoltFlq0^#Im zNWR4Zo`>0=Nnves6OP)EaNgq!=iFF03wsy~YQoX3A!zGX<~7Yh>DS?~oN+L+18BlU zIE_n#^MSW;y>b_>A3MQy%Qm>S`v4bP1)NXk!g=3xIB#))v-@c{_XvOsmcw<|8n_wu z!~IDGJUVQI`}fXpKm8EybRF)sroz2m6x;`YgF8Qqc0W259_&whTFc=TG!0(up2EwM zIf-vyc%?Eg32Ou|nh7uFmtK6&%X_dFysu7&&v51+C)>k!Xf}L@#lct3o~oNWd|Tdt z&xaxKdDf8`ASL^t@KoCW{IS*&@s^Y4n`U-c9G zgSJ4XI1Sl-))(DNAV0vIAfX==tjp#4Wai|jAWvuldDrpmMX)FFb{gbXFQ8~X7>dX9 z5pcdflzYD;u;W<-cH=%oo^`IdK*Njl&RdaS@amcMy2+0fJUm zN3e5!1eeA``FbboqV@=^S_tLED$FT%K)I0LAI|4mJQG1r-XSEb4#K9CB4XHmz9Zv@ zKuHw@UY>)%Ju4CT(i?%SXM^k)Be>}ZgpB4pC7wyp9GHtJ_K_3DvJc}>h`_F&8S4mv z*KRU)RN>E!#K?g{ww<37lYJ^C$ z5upl&{_uN@9a;xzAOB*7?ibb~ADgOXv%cWW!UEe6U+0VISl^luJSpIJ+)_yj!pa8p@pK4njE=V;`@?%-zGWCD{i1 zPw&J@8!3*;d7Qp}P>zj9VA^g36%Ix)`?MoB@SVMukNJ7xK}_d+X!|1Vab`thq2h!5_VCr%yGOYD)oLR`(t#xBxc z$KU;1MbH!-5H$2mP}{i(ssl@fupG;t~{BX)i@tNtZ#A_4|;)Ef2;@-Yj>@Idc zXM4n)AZS~s3Yvx21@)}qg6h*qK^2)QxStIZzq8I2-zpm;-u^yRJiUgq*f!o|_b7a= zUH3sbg4XsougRL%B;z&R;5D@pLJXPWPwy6qOD$pIL(X#X{NFBOuhgpInwz`ZB`qE) zXv2efP5XIGrMxCr+RM{FaP2uR?RpfZX+?+ZFGqdv@=f# znvY+2O=4ctI$qNcUQ-`wTWJw02TI><-t)uDym@0*_mZOTAF^Kg}*QFaj2 z*;+wu`-s=%#A}L?Snm0Y3k~nYCmU}Qrw3FMYnm((x4ybk(C%(1Xm6YnG{?LJ^~)u^ zrmDQAae|6YN)tWLh~N557H4H_5^pq)6Hk~@Bp&!FPtd*h5p>!bg0}1|_p9VJISQ(e zn*^0UTL@{@UUKlxQt_RX3*v(%_rwdtlf=%^mj%7`T|u{drJ!r)DriN`1WiMepl-$e z7VH!vEN`UA=i5p`=dBd)?bAs-v;S7H_3QnDeoBm>d(&CaMU)8Ikw*lLZIGb0;n>@^ zKu~qelpg$1Q&N(%M!e+74{`8`9pXCef&~5L&w_sVUO|@`A!w)B29F09@NR;B^mpzzP0$aSC}_@;pc%w{wzUz|En@}M{AWT$ zxkRY?`MY@Bh)#A(-6#DgfAqdv1^vXQf^O7(L33}2ppnH1>KnCqO(H?Hzlosg^iW#9 z`keSkLmS(9&C>qc$8Wcw_gx_9_Hj&9vk^4oG6nT>-t*80f~wGm*ECA{JH|os?$zmk z+W+%M(EB&xJ`RHJ?PNjQ>$0F(&oR;Pte~E;ozE$SV^5HNkvtS1zc=B(J^s^YjG*^h zF6faiXgwilE-n!?LlXq`4qjJlSI(zN(gQVm{oDS(>Vi*#+Epp2tqO#QHS2{zyL#AuKh?lC zTiMrU>3)-_qwJArVA5OBg4}Qa(??UKrl20}AgEQ3gb1U9Fz{w`yKd*BY=_Y#n|mid zin=O4{M+{5cR_uGb7`ZSpfb!6RQ3M|U1FEorCsi8+i=YgnuXLG|F-|< zT~J@D5Y#@53zts{s$SMYyOR&>=AW#vwOqbo8$8R!CMYjn)M41df7)9APOc^Dafh+1 z=14&^m-nzb=aFzhXmi3}T+ic#-IA~)wtGhHw{2AHZhgsquBe5xNVIj5M6~9vMbHM% z7BsoH1&u^2sLuWsykf_TZMRm~-R{)h_Se9RHov-$v#CA%u1I=cF3RoWDmqc$P0()c zAZVKu37VOk1ofWzf@;r0yN>JYB4_GAR1<&vXHNh85wwp73EF^dg61Y;R|MnI1;VFXd!+Sxy)*`4qErMzt zV|#Ny!O=q{(8OfHF|EC*=CN?=?*-fbr;o1ZPeFUvNzm-c64ci^2&x+&1(mC-;3)SN zoK7wloEJ5>D}I-2ZCqdZzkS{>7j%^#g06>$pc(T;P*({OR52k!#GzG!lif|h7)1a6ZFk*3%Zy$f@Uq(tKN(mGtLMRw;u|Q+b;^v9wJfWm^IcLr+fTw zpFw*Cz37~vJ2YL;oVz2az0(BM&c}kP-6z3u=`_LR#La)({`)TI9nu8-`4B<(sY1|L z0tB_rLr~@Z6jUCCg0uA-fyzEw&FG%~Z~K4VC5y#!$%0`DY0Qd!Vn4}saliEEcBhq# zZD-#9Kl1qh=u={@ExE8dQ@UjLT(Qr)ed208*edDT+OFEQ|K#fbzwN(23lT}@q>VQY z`~TW|@2DuYX8(JJfgvZ!NX}UVQJC)fwmIjV1rgIbzN^iy1R!K@>$4R754` z^edlxxz9PrbDwjbb>Bbkde>#GS-X38RnL5S?_Im9c6Wodoi~eXi?zhI%~uLlXH$eW z8)sI_{IQh!U1$nbFOhZ}&mrIR7%?pRf>`6xTwzHI^FPW~?@OWbG%7!_nCxqril^qM ziNW#lqD%XU!toKORZSn-R?Gdil=%4sv`w zR&Pt8U6Pq;4?MO6idQ>#6U8exMZ04UglAV)2+&Qamiuifg-&*n`kgT`T zO(zTyHKQI08CJc7$fVQ1m95^ELY+on*0eY}v(i#reP)|*+jW|dDB6ok&&k53mV;HQ zoe!&Jt4k@g$uP(c4-j7@wi6>f76>1FI}4Al&lUFfJ}Ye9w?y^vxWb;-YNoD{0_ zh#WR`6$cdhik(-z6jrJG2q$Mm3wQenLSS)9wQO}Mg_d-X!s^takDcV=!MiiXUSIc# zo|96AoE77QxbfeF6?qXVacTW(`Jbf}uE}F>ZvIJH%_3I*7|hz7n^8N)|^(#fYx9 z`O1+`dlPwY`VS3G1rU7RzlOjLDt6B4rRe=GkV-?LgF zg{$A@`6dQKp1c=VX4Ds3>fRBTjhY~8&s!sEy}0s=PX89JQh3Q)DKxbZqh~A^uW#Hc z&h>94){cKJTJ>Bft_>~tMJGHpmHn@kQfP%9Ml{M7-z}7ji^5FAuAV_+>I9nAoXkTiVj}y+&ew(_c|wEN&Q_7q_8*JrG6iW&{=CI z@yizv@!W}b)XaGaZmwJVTlt^cQvaespaRz%YmMxzjq3j zo=N;gX8^H%KlVTh@1@Rt?;R~$5-#SQ+$laC+Dc3q@EwB+_Wn^voHxTnY(4jas2h4# zu+Sg&$K!vtFGkOC5PL056!orr7lP~#|C!7m>%_GSLdCEf7ewdPi-p-8BL8^&&-TT2 z6}jS|&EcYX|CPcvg}O?35c_9xzpWE@PUbszb6<$H&J7ddrlqJJ>)8GF_@8Zy$8Bqi z<5x5mo2ESx($+2zTogb4OzyXJ;>C|6#Hb$AL@a$Ld{Z0|2CnV&+v9(>E#AELT3n#( zE{dNY3E8FJgf%8JLcY;|YeRpYgG|RIiz9aQ5o=HHY^F+hA;X=OVZQ-4xQs~xl#-GVn z*NF$W91@LJacrVDL3Gee71c&Y2`g9hQCZV}&AHXG)uot{p(C!1TP${}nR2BE0fFDg^Wi`J-(0z7+b(0AYHQ z#e?bmkBtu27Cm;F3i&-;g&7M5Rm=Rbl)|i+R^Qhvg+85*`o49=X|~Z~%c9z%k*%q4 zY`C%NI@I1^!a#RWF2^b`lrebQZhU8X}suOcw6<-XUP`Yt@0f{(sbC8^Upj z`VP31HJ28E^sn{(zP;}}h z6H5H937by(2|cS8{Gta|LY zSXo>2^vV+|3m*un+BN>DgE#xfVpF;^Ry28tb!{xMR{K0wE{H~lO3>ZzZRq56BZ`^X zl(y@d&=M;@nswi-NN)w11Y0b6g@haKo`}<(&3}+ zXt~OY=6V%Mq3gNjyh^dnvj9u)C1c0T2iRJ%2gdmdx@%=iFIRq`p_A2>o+jR)HD}yu&B`~lt?gObFl!AhY}b`$dMu#G78j)kL-*oQ zr$7uk{Q#XcEZ`S!PkB8S(c*K*Y2=J^H0j|Rnq8GbBj$dkp6xypHhhxIr9gb`9g5|# zLD;zR8ivWX!f0LTwq3fCN$n69H4)7~u=Z@S+VcgxJhb<1~%VUnj5Ht3NQnph!em41}e7KP$zjXvl;NsW9~ z4Hw^R+bdp-8YeDO-V%FGF%#<*_=}1Y-#8{ZBZb-Al9aa2sG8CO_if_P&aV!sU%DqA zZd^xPb*exliyOilr)c5G^Grc`oa3V(H#nwTA%%W6mlV=i+!<2=<9b)b$MY_TOCNR= z`<YSa+Ku8qj9#^IErb(zLukv*lbIlXmMcR zAN#cwKCDOzd)iQP)2}V5zjVS8ufY%)DaKfA&ONy?(QB^WzD@&9?V1-_t*qZw}eeT?$-vN>Z;-;cUaR1O55OP5ZOY@N& z%wI{Nl_OF0u^BE5*A^d@`-_W8L~+5j-{mO&LucY)DQv2_hf}3VT1l-VNJvYF=Bw77-Z2??AIh+oaa9r^NQ@L<#;bKI&Qo;XYP8^ z-KwC;vu%W&gsFmHt`syUHWWVZc_BPolqA|twiLU(I*3v2b*P(jthlUXnRu@8T@6J^{?X*B>R&#tQ;iYA^Nl@(t#(sHrv7|?EScS|uvmCj9QbfBppr?`r*X51PppSh*<(p~ElG7tk(m$ntzlB34?eQXW zD$bQzpvma9qJD=KznA!R53ips#aqR7yqf`q+P0a_*Ja37+tp z$0qf?quNN52wE>V6SV3?CwPRw#eAVaV0k^@2QM zscNm`1l7VDv8v|TzvMh=&7vn_TH?NtNs9MBbyS9Z|8fjrbl+R>o^n#`&{_AVj-Z@B z=V$q^{&4ZbMr>`FPhV<<1sg1S@ULX6kKui5Lp*$3h&k7@#1)D|)%E|XL{ga=Ql9!? zozrjvhVfs?Rv(wb+}=ov&RY@u#=E-iuS(8WSxB-B1GG4}s#-SW zPF!L2_Meqf*e;F(U3a6e?_bV4)%sFcYJe2he-~yi{l^+Zb^X68d9AgF6t?pLR*$~) zujKwW98*o6S6|rJJ2B*bM3=w&dsIVxJyhk55>=bN>W0X=Eepw8+Dcfy@I{ESOU-|t z!*IucuC@QOinl^8Io45~+a9Ufzhs=M&*K%Ug&WqX#vdLY(#h@d?*#v_quQiQS6v=@ zM76EkBh_MgSn#*_uYVBvWmjd8YN&EaD-T)n;QKEJ{|6Pq#oibG9d%W#$6B(kH|^ii z5wDJXOdoGsbG+mDclGG7TM=d_ET-Nk;#C2YVj_1~vUFng2f@53yE?f5sPV9^P4)m&4B#xcu#Lq5Am7k@jhfQQh?TM|}8a z=l!#~kX-?P%jW!^74kUH_kVhh z|I`1EE1+s|V*I~zE%*`r1aWIlpOD0kf7|B~zF*Fz^9h4R=b`TZ&UdMVgBAad{Qt@R zZ@&V1L--dOb?U|s4)Na~@9U)xLv3;q)Qv_! zW6ySIhAe^BLjgK{j#Fy)eUyGbi+&h3rQBI3sW5jcRmAm$Y?=ksOnsp^SPqT)Q=oit z0$PKQK)Yl-y%#ko?Pz=YmRmwO0|TibF`UYa8$o842KmvBP&642^*7C+9QhDh3NvW0 z^`{j30rYX@dCE+Pr0nJ@%D;Gx$_B2as(!5@Z{7!LDG5*?Uj?O3A~d&6fVO`ky;Hl* zOxDcQpR#SmiL&YG&#QwJDy=6vIqUnCT`nji%&JPRul(nGP|NIpxmGVx|&i zdcaK0nJE;CL*C4En3=va(>Ho^Zw|c|l9|blnT}9S{|G90`JS21KxS^mOf#8jBQr%p zIZBP0+R^L78O+p#nW8E4WjSRxJx2NGw@}%Dp3HQLnU*k91=J_lL#Zogrv3CbJcm+W z5`AhmioRZ$OIco{C~u1wl~_J!rZ3F2keOOB(@kb7V5V$JZW=-F&!44quN2DIl14xD zbD3#6Gfifu3}%X8rg_ZNjhUW9`O=hL?<}Dd(@ykpK@@$NHJq8oGt)9ENNB=LE0{@O zrbEp1l9^63QyY3UehDRiPNmeIwdwN!O>QSM%5HX^@-KX+vi{eZ=_@mRgxdSj%ygES z_EAC$6MB8AH>LRAVWyGHbeQ{I4&`mr;C2e8%GFIFKkf!avrwqNZ3N}$SMEWKK; zO>gDHnQ1CBz2kNoNx8Gk5%e^>J0*l4qt`DrDa}A& zrfJM{m~sXbayvOvdC^Cxo9~6jpaY)JQG?Yhe1c~`yVeK{PCs7MVj<(=4NJ! zXQq$b_ug{f>r44(h#69$yM8b9-G;&7bZ3@#;}22%{q@}U3Yf`>nH-s^4rO`Hr98fG zPdD%g^lo{;pkr+qrc7peAO1Aq&kpW;EtzQ!Gi_z2J>2&uQ10}e&o9XmrK~p}rNI7o7RAy}k+2pfO^L2qjy9Ly@U4pVs8Z_@;fOemq(D`u=dXwwZ z=OJe)^YsPF)|FF<)>O!BUP4}G4u!fI)PobD@z@BO{Z~P&=sR>4jfI}&MEYvSzio;Q zoKG+Jf?n@!R zegO)-XsB=ZU?yW`>Im(=ouQMxkkSLwDPyN2{V+|VeEsHBT4MrLt;m49qX!f<6wJh9 z<4FT(4y*&M(%R5j+?_sZI?(6I^C&aVh;mQGQPDj=DBi|GS+5kD@dC8_O@mI39lcLj zMd=;$DdV;cHn@zArLNALEe(MS7-^m*M9%I?#L^0$1Y zvUc~OCUIK~v4++cPbI{sM0DLa)VJ& z>$eO#F*TvvGah=MMHr0zO3zE4(W@bo>0?Me`q6D3<+eCXg-eG}d7nFwS=50%PZxSQ zO6V;xfPvWr819Ovr!Pw>0mYQ6XHVZF?@-R%fmAT6J(UgirOKH;kk#{m-hs)`KUNQh zjf`P@!j&E$97QjT)9KyYWAv?iTgu+imGWDUq|%1dsG@~8Ret>r{X=muc;6mI8!p1^ z-UEuCc!r*ST0qIiS5qd9rK~k`H|NYpMLzDXOZ`3Wj;jVdCHi%jpea`;f=7$03SeQbMnK zcu%Sm6m*hOs6%B?>&cw!)@413xwl1AF6Z@hwR7;D0WvuLp2=A z_yy1kb%1uxCg{$72YsWLFxa*ZM&37Iy5$V4GIml$k9UwY>kEan5b7_xK{@0!G|NUn zdubqaZSO(vh&c>|x-h&u3MMTYz;fMCDxXYLb^SEdk^-PUq7X_&Uudq|0&R~I(7CV; zdMyb0iAP~L&>Y4ES7Fh}kxG5nP-Q-kiLp0JVt zsWCGtnduNSX;9&-N~$<@9PRyBr`=ZQ#dp2r-IAL zRQ`!=m;PnQ_s)TWN|>p|e=?n6rmM^}o0)RBot&9zB;{M~qEd5Ds{FPH^7;*-mUt5C zk$fH0wlR~EnFcY_TxROXOdq+OI#JHIu~gW%58JMWknyuRYNH=QUCW1=1~JokZYL!( zZDgi+W{QQO+Azwx){gQ6EUC1Wf|=Nl)GdS}W(G4^G1F3Jx&WO^M$l`S3H_u=FdX!O zzONA|R~bNs6Eh(*n8!?enaPEjG@0oY_q`s_%~%ipNiHzd*af2lw<&XQI%Oq2r~Fn& zsj6LlW;y`1R|C17bhz(@G1DXHn}3AC?*1^UJsYO`pU{WoP4v0#JIb}6MwPQyLH2qq z)W*EvzGnlC9U9OKS_Fee<}iFBhe?lASnl(u_s3l*-HFF^UPG!l-I|#;K}~-Q6nkbv zLlmHV))$5&?xTjzJy>*a2%Ftm^lt7s`cP;@-|tv(J83hM1LXU9@^~tPdg3Q2M_9n< zaz~hJ`=e&pR&a>1pyY1N=>5Hel({K`%6xOFs%-`24O&9&HD8A@%%rszrm-7ft*n53 zr!jEZ_LyFKy`pzpTT;e|b5#7{0WrlOp}>uHWYh#3`#R#b7~8m+t;DpEfqRnIzVsYau{eFf#IqI z)L1bB7H^lr)-wT4;V@U>H0ohfxoGnALp`>$zKD|9Avk ztt0vRoMxug%v1#}uP|s|ngZQcY}fdD8w^w_dFpo}WrqRq~4B4A>W=dqHx=@yNhSpNPcJ?mJREL=yndv!~N@nWH zOd{kjTR{_OGnWC8KDl-K#lkg8F`3N4D8q1)*neDrO z0yJ;6hj!Po%+!XNo-$J%W{P5_cg$qUOk*HR+y=FgN1?94^Us4l(CjxFS~)+M$%mN? zndvSwb!Mg+%v8oq8zD110r~#XJYG6OW6($_OF3p;+66jx-Q1)1d+ z$WNSu`WC)+{+Y}KW*Wy#+qv(}hf$vaFhew~7q^6cqAQh1E2whk5y-x_gL>T(X8OWR z*SVbrFjGD=Rlp?cC9FsRyJ$~1zvx9-8#r|Txn5|vgYtEpA#;jizi}qB-RJgVe}7qD z=r}Bd?uk9H`0mb+?Vp3w0#|tP9Qi$B3+24MPnD-CxV=6z+a7MOk=zHZcw9Y(Zrf+5 znUM^~dMDt%q7MS5U7$<}lyzb}RX9zDLerkvLZPfZo%`T2Xm@8H_3Life>w-(Iw7ca zzY|o?I#5Q9_w;?f3zh6oh1$*w%=Q5q4|xs`y$!8=Pv|Vz0q3-F@U^f*u)-V7E-t1| zpJr2L_XH~R3V@ohnwf&2F<6V49`m@G2OXz(@Cu7TQ2QZhG@~uLX1P<^MQ6(J;rOG1 zW6GBUm}v+zZD*#_%ybdjvF{MD$rVzAO0BG`k`Ydy%oTnQgAK8-o-~wiH zW~P3NraoEIpYRFwPNlJe{9q=Gd{j?Z6EiQ^$E4_ZN0tp`IM5C^pj7EqTw zpmDnaeZSC=vOciyJ+YYblA2IK@Nz0#dyR@aZ=r2X~zY#p^rJ2IE%!_^IBUE_*0Tq|TQ@MdJRXH_=+}Z|eF~gzmpL|rM%PO zRA87!g+uvO5+0qXOpK(;wm%>{z8z{I=b*UJo4)Ccr>t7dDSMS4<>c`-@0djS$Cpx} zjye^Ex1iFY$(QzxObr31)VAH-9#z~G^fIag^>A9g8W!66anlPp4&#RZ5-(xkMGZX z-%8ftFO>agGv)fa@Ypy(`H7pT&~qQ;E!RNp?h&ZBxXAHh9KG_nMaj-)lzyu|Wf|%- z6F*h)GJ(fN56Yi5j|%RxZ7}8hPBG^Q$8Cj{+8Iiq#`HR{Cw+WbNk7hcQMS!?%9(YD zauZszZ)`yYgI}X<2Q^q`euUdxe`v>R(Tg_Q=~bgel=|s2eNQc>teaCQ$Jd!-A%Dud ze~k)^GVrK=f84s4iS(MSpyy;j&-!FjLZ=&)QdmUa(w9-zuqbA#q+HiP${QO%`B(Z& z+L3{ha(j_vZ?h1?y0@YyBbv~Q0lM@~GmtVr52dUc9VmPB3Cg+OnDT6oQ2uZqyjwUC zCKgF(ZDa`Dmbd89j4kwR++a$!@Tad|H}hEMyn)3y${9VKa_^|KPdyVu(Gc1rVxjYW zC-fryC~sCd<-gfPMWLIiwC)tDX!j7ZKptbU3pf{M3iT(GpzJXWnyGfs9%9G$=Lb-p zXC&p%%b_CeSyVFm6qPTvrK-KnA@8+=^I_N6ryU24VmoNg><4X)7tmRcM&fSi5g;qg4<#gkIe6~5|8(*NpHLIyOY6O*STf*}m`71Q z?v*mixA{Q@Q`iPPe?=vM+o-&`AyxHKLLO8FwJRN<-gGH69_@x^S6j+X;IUlSlJeFE zQGwllj&1a)cyJ<>O>0h-%Y7kxd$a+0a>#=gfd&@+_V+uR^(~A!Us`%zb|Z<<=QX`2*R$#}-hLIY)$P zFQ~jw1(||vT6-fX5_vxF$FcmU+w|jl56X67dl;oj`FfsI5MD`z7jiilT}b7gC#fnp z8j3NUpqq!f^frm~7t% zhvg>paqe;YJmE5BO?gat%2$-%dlVI%$YT4xhDz?GQ~B#L*t#VH_3qR{z|7qkW!0Th z*L0%vXhZt(pc&;J?Lzt5$EcuRH!3`)PbEK}1J10Hlvfua$=DQ`Y3(rEy_8aRU!jki zM$`9@Ih5P2KhIfTsK88}3VZRKC30M7kT2OyjgV}*K9_8RAEMdF8T9sy3#A@>Mwu<2 zQBGw9<@F5XIcpCU%2ZS|VGrbMk|dW44w6$+8_6&8Jrcco(3`kuO1b1k8NGcdXRk5k zR_>$x&YZK^8_BtzD^zlQmt++y;#i+?c;=Z69hcv zhk8OgFc&(PIp5VV9r|}S!m#Z@DpI>lB?Avql}iuE?Yltj@N&)x1kwm~ss7u1VdLOJU*wDcpP&GDM9?Put12MkMi?yQ*zkv%ZK`M&cj=cgXZq>(603mI;U4ckMp+ru{_VNn?!{_ zj!;QQBdRi32)T(m)V8v3?|us!CniEu;C$q2Fa8`(Et7uJ}mB^X5}! zeQU@La{LuUP+YAAjpl5tpN2!L$2DlD`ayT_3+R1s$o9Q16$YA8(YX~=F?uv)jcP+4 z&+ixM$~l!3j;Dsyf@W3*v?uO>PL(@O6pq4co z>XX8uludwU6z77CoT0Nm9C~)EsG#vID%@sE#W&tiS)vnFX7bux73bKZMW`E>L1W_w zXgUsu*8XSE@o&m`=ZBOZTaOCOHd4_he=5`MLzNDk|J#@YHRlmf99D-$;C?7C@_JcA zUYol&7rN~`vkhoN1-zb8c%zs~rBhVV`7~s8dh(pb@m`Y*sK@t*vNOjIZ&pIPzZ1s~ zyC|>s2+BWUOogWER5Ffp0@0hOYU>QhyCv}2*L|oDwt?~_&poQI(0(=%x=|^dYv%aJ zFpml%`cUzqvs8Aqgesr2-NRcziX2*BfK_@LcD2a~$d{?*w6U1*~{o%=*V{ z*sb3LhgI%yT5=jL^RnPJxeh!c9pTlxEqprMfnO7A1Uy)bkXJ)s6;}o8k^Zo=G=M{m zGjKA9fQ#i8xRy za;xB$;Q){KKJa?_9zNIh!SB>))R~?Dt7cDN^+6BTsZ|{N?|{RcmvEYt2$vCC;Wl70 zJbLbeSBrG`sCvN9y8;0xKf}tVFRac^g>}C$*eSJOU$GO8`2leLY75sC!2LxUJa5&6 z_t{AJ?)?V;+;gzZ(Sy}uGgy0s!*;F?>?hBM<4De<4crLVo_26=*9)G~GI;wZ!Pn^! zYB|n;Rr7tY`gj~QIp=6A8vwhaF>v@k8crV?!X2OC9*FoCPa8 zUaL626xIta!Djjw*p0gZhlnw73hND*&adFsJP01bSa|sjhmYe-_?bk)GSvoFQ}%Jc zSb~~m7h#)w683x_yW_iVaDH|huD5;Qe*P3Z4{d<=wpjSCYz50zTVUm5&g&v)QFDq8 zY)9q5ey|9~-o4=5z9C#2eujI{1bDhxz}tEOd>uqsHeLeDq+zg{m;vh&Ic%~vz%Knd z9A2lu=}|MdT(^h&>BsP1)(%*dgl_K>U{U-6mMc!c%DWk?Cq0MF$QrO4a1;(bJmA#2 z6I`VAsCRQN<}`YNgiUKvc0C6cN4LSUNir-`xLxf}qh=Q8AJaC$o^#EP59DyQ|At%9 zC6az(s^qjHMsn?*3-g8ZVd1C)%hf@!Dmo1QS1hm{mddF|f`{gw2-|uzPzI0oU*1=G0q~_j_~6f6`W|j{kY7 z&dqi(`|*Xps{j@iC9pbpAJ!A=!Y1+{>|VXWpohC9<)mP#_NEh3(4B@-i1iXFp#2G$ zZGQ}Np*Ji}c7@fvv#@sbj~M@D-SK@Z|40 z4~sz)VAZ>nnTDh0nAh<0kmG*DHObO`mK1cNktD8}Cp8LcFV%HdgPB@KnC+Ym3+r>R zs`DLIj~c)_YZbRsH#9UkhnFupOa7MgrNEkj2HEiK>*aU7d$KbKa3SP@c z!e@3U{KhRq;H7A&;^NWZK{(p1T!_9+d||iy8XOk9hl}q*xVb%qhwW2%=`@6oS}uG` zE+L@CQ-oL_Mt!$%v>dt--4i~+E^s>>GzreUmgc(eCfv72!t;IxyyvZk?*vWw_Zo$I z!x{n$N1~bDM06f0!SV@{4WFVI)UrE{;3Fvzuh&GQ z2^MHyv>&!!Y^yBT7cMh`OU!DxZ8!yw<=XI?x)(mWOzd`+4iD;?g2OGcMu=DVS zebE6pZ?S^ws#kE2o&nD(pWr>}0(^(phJVY|sCTdmxafxFtsGJF$V%AmDTn?1BXF)+ z4p-y4aMv=2N2L?IzF&mTx6SaYdVrwqtss6@L!%4ahdCy+i|-DHJ^FCk@)Ry>;^DT) z4j$9n!fUJ&KB2?mhYtvxQx4UEbTsIm1Dg&Wu&cit4$jBnWc3^_2H)YPl@1TtT-01y z0^6u~*bj<@5^ZE;~ui8y}21nzGaMr8~m-0NgFr+7fuh zb%4*6#_+2I>P0n2;}PnxmItEdrWDxDTL_1h!{M~>AzY?Oa2v(;aF9Q|I@qI@>vRlp z55fLHFY)$eGOP|+!Fq`iY@!n2V9aX~+Qx9MYyj6>3GV5=;MJb6&HtQa@F7z2y+IM0@mypA=jpTHI>s07qXwZ3zrW6DYK#ll65J7~gDdp(>gJ>Zfz8?~>cBgyKt6!c}R1XodNK-;7Sg=`CQhQTu02G%1)`i8MI9N)WusY52g70FU zUsu9O?*JNPsY~kj^`yWW?rTdBdgV5xDWhSd7~6Ik>Z3yb_Nuo_wiwnvj-zqJTX z>jJT&B1!T-wMnWM8YI>4Wh6D}J40$S`HIxi{4^{KoM5p(lK;g9+xS}VVDI>W+fW;; zg4;{AJnW?qjUG~i{kNoM`E#XqO9G|V(Y;{K_ikDA1}vYv;dQCou-kJS4$&9j+I|C$ zTk1=GqxVP+?_H8w-`0`ZJSdi070iM8Tw7Qe^?>Eic`N7<_w&(k(5VT>@?&tfxPzUa z%A_{??nrH#w3XU=+e)qb#=_-@J=>4x@M``VKK0+huU-}cb~+;DO&Z=90{I;4Zvx&Vldc0QkSJiF#Rwfyxjx*Sm(UfeJ)qMI8hwK(j(4bae_s#N#uFI@c492c6-(eK=g#u%8k<7v6p*@O9Qj zEz1q4t8*7*JVC_Dnf;pHyErzYDQgU1LMzaAkA?NER9 zKD26e1U<@iFy>qfI6mnD=QvBaUR(_K<2B&9XBxaWo`CN%Zl}G&QSVeZaD5J%-OERp zw_b>7eFKg)MzP&+WxLS^?!Ncn>D&$8mX`3Hy3J1>za5)wMw_OqNSV!=R8i=|J zwt-*$Dp{8}NM8N>N&)*jNP=xISRDw5_2`+f53+zuz)YT3x5L9~DZCsLFvB)RvX5;j z`QCpa1>BWMA;Yz$27TnP>T3k6VhgtQrf@!U53UE7!+l!;JhMmR@S{VLmu3see{2VS zS-LY%rthVx0k>gQV%sEA0PA7x z;CRI!&L_ITb(b03S5Jj^>`~my`yh>OC|1k=EUVww+qrqiCY_qM|M`9}^~UYGH01K< wv$78S`Nv;i_@% diff --git a/ThirdParty/custom-opm-common/opm-common/tests/restart/MSW.UNRST b/ThirdParty/custom-opm-common/opm-common/tests/restart/MSW.UNRST deleted file mode 100644 index 11fc4a0ed21b5267e8c6f6dc5210e8e3d574f050..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 453632 zcmeF)2Urxx+W_#x-b;+e-b}_-4>mKcWao{sw&Kd5*ceot=5-H?sqKdv_=lib4+d?b~!}UB0|Rp|EPv zrlUR23-Mbve#`SZFC?CCZg1Cw7n%OHOpc*^yF!um>!0{ftHk^N{2}Uieam|Loy|F4 z-_OGH{`@BLulX%6zrCBL^9R2C7R+y1-`()~ehHp`$8XBlkB9SI&2Q`ZE&J=|L~LL2 zTXB99v52-sd!mmbiR~YXKe0eEKXUPHysn&o@;o=ciTaaEa!hiWeEg1RTlC}I7(~6| zCXyJBq)C`1P4fOp^Q7f6!(-tr#!q+(cac73|EkohpTbDY0pTe2E5>i*Uf<_gx+Qrm z(yhY(K}F&?E6HzS-sMlP_7ZqXuewrN&*x|}rLj@D)Cwg2zA4nIZL=1yeitcx#C={1 zpQlzg#8``z+FHNF@)_63>V_EaCT%;h*K^>exc_Pni4JdD-DZ@yh*_^ADB#*z@xK za{jUMJ7YdpB5m8{_T`*4Z0>cNSEYLRsy_L#T`f)Et7rZMgy!_;Z=TzuAd+z?UZL6Eh$8lPZQ=0=b=H?s6Dyd@XtNbI!I?3@T^^(^WNiOg| z%I&HS{arL=S5@sQayc&5p~L~7rn>MtfAD(Ulh?lwjQ5-Je-BJdlBhHl=}r5u>z5xV ztwMfY9-pM!<@x(><#PK;+fDDsa{O|=a({oV@@n0epZ`!Uuct}lOINn-+}ptSh)N4t`qf4?kpKz&7X|1z|Flt&)`uP%x$rBq^lcGa z>#MhV+A;N%W2`spRYg%pp=XO0L)4BLI=RQ{7$F?Vp_haR0I|+~g36KB@kN^pg011!)36KB@ zkN^pg011!)36KB@kN^q%_XNsG3PssD|Gl^zD29eEyO=^NkK~dhc788M@2qOplJ*HR!ve+g%~?A zhAkZIn~CBIMd3P0{uht@J)Gh@Pv8AMQgL70#Q*9{Odt5)De~r|c^>|R*kAm=Pq{8R z7j23ENt>8bS+DqitYZIc{Pu2ra$Dm6@Fu2I)|-p(Bw`i+^HtO(Cvji2^^N>QD(e;h z4_NG7#>JVY)hQLpIB zoBuJK%6bdD-d`TSck2~x38Tc6%6i5BkQMuj`Iay`n8~%q6B& z#w*rAaZCx1H^%_KFUC#uMQ$^-@rrd&>@UVIX}zK?VU(Cs8LwCe#r|TxC9PMqCB`%{ zrLtbJ4vPK7@sYG%(UzFQi7A!!ig6M9i@SXwr16Tj#2ida zsjOEx%6}sytyi=qj=98?%6jG9C?^3DAOR8}f&Z{T!8zjpUHpdwq|iu!1W14cNPq-L zfCNZ@1W14cNZ<<+p!4)EXt1fPBtQZrKmsH{0wh2JBtQZrKmz}H0Xk3r&kqp=NCG54 z0wh2JBtQZrKmsH{0wnMS35fIb9MTumVd^RgkN^pgK)MPf{thYBq7`#^_5CM`uit+E ziJ~2EN_-!H_-wiOobsFR;^6nwnnazVy$-M2JNUM}tmR)A%0(cu3MB7eGs3Ce)l^i_`^3zlo2=4Pw~0;cfZ4cKYWu!Oro5y z5TCPt_cQbSAte&{Hw6-pkwP8bd|#1Ap(brRG2SAd+vOx_{@ldI<@`gD*xq=$!EoIv zRxbA@-<}Y?by)lAs>)`^iofMMr8-mj2Y>5%=OnfCp{g>)^QxFk(GBWEItj@0A*Fdb zHJj_r+*{K%Z=C97Q{|4M>%yh^rxOcG^N+pC zH(%&AsD!1H>f2*JM}EjrT6MrZ=k?3a_DO1oV^y9vcYIZA=KCqnyUf=!>QPz*J^OiT2 z)apkw3*GIPSSS>70`4Fd9fNNJviCccPW-mFJbU}Aqiz8*D9EGI3%SNXDX zJ8oz;f2V3V;pMuA`+Zg6lXum_K*6NIsth;q%==m?O#sm)UQX=6LF*klV9c2PgU?)uzI}8?riTxy^Fi6 z!sq9_ACc6ZBlg=4e3n=!6aJ9rT_)@rbtw%3@_a~Xo`xpUxJx-nTt`pi&Yx{Jd0pE1 z`a1SU*QG@d5@UUHy=`LeTz;)PFM?lV?mzL09HsiB58hj-ydtT8uDk1&a_ML5*uUJc zJpcaXW~llMA|TI)l;#zV?Mmr++p<^x zMoOB0JW)q7&Nl`2T)h=edN!(Bd(;ip#rBH%PT}YIdE51wheEbwRzi8+W!C;tzfvb4 z&xe%esjL0VDJ`!@ZyZ1NI@0p_i8#{yldp1r$2!)>+dqZNy23|~c`_sSq{Zv_ z`PxkH@Zz&FtEB9eS^G!*N}Yf_A5xm9uJ$jdw7eckum7v;N6*(5PE5p+7QFg*vC@Ps zil2NdZMU5|^vR!Mo@W!C;tzfvb4&xe%esjL0V zDJ`!@JLT82wuigwB;rW&`?bfGUD~nC>QS~+G}+b915c^K`|tUq zLvSxi?LTSg?ORVWtE4>dGHd^+U#Sz2=R->K)Ybmwl$O^cxyP!Htw&2XBo=+M9+_{9 z`6~PF$F@_usv6arwo4U0q(H>tM*fmIc;1XHHTuf+X0}|OcbTnU)Sr(DB!3-Uo);<2 zKi1lpx?NtEq}Ko+U6+>GCzg~JPr-R?)*X^XZ`b@Pl~5tvNo@$U zl$$2LS0hs?IpE7{CjC$m(0p2&%4apKk8TN1myXU(mZvwe>tV)^=PO3 zI?~6kvn_n}7Hnz3kVGVDV$<>=Sx*P5D!0np;l_cys_-$-g1htzkkl*AdjGYA-mm@T zOrj@4eG8ot15Tw)YZ04eO36hT8=@%MoArhENk?6T90H{$}_bd?X$@3wl`Tsn?4AP*y9=&n=*!kKD>%^YDdHra_$=1qUor|a{x7hY043bpg^G?^? z=wUcXsm(!jS4PWv^84NIN7ENd7u{lEVM_hw{8gY5t$@&}RxzUYB;J^mXk; zH4-D07QBAn_S9$f%1JvXs_bIduP;2f5C2}I`wsc4_LS7W&T5uWkFNWFrg5ca|F;4u zU5Dgy|J&#?PHXadl;Y2iEDlfXoV4Ke_q9!~nt!Lg`wW%c&pWl@m;X|QFSOcHVALE* zeb9T7Rf|_&zMXM6QXDDGs}xgx5e4P>kkb5%KuJR<<@M-|x-kpKyh011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!) zT}P)mKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JZw2T& z`dbUSM*<{30wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JbRC`M z011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@ycMA9=x;6P z9tn^D36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@&~*eKmsH{0wh2J zBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0(2dn<^Tzh011!)36KB@kN^pg z011!)36KB@kN^pg011!)36KB@kN^pg011!)3A`1c>*#MS=pG4>011!)36KB@kN^pg z011!)36KB@kN^pg011!)36KB@kN^pg011!)3D9+Pngb+20wh2JBtQZrKmsH{0wh2J zBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JB=A;%uA{%TpnD`h0wh2JBtQZrKmsH{0wh2J zBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtX~EX%3J836KB@kN^pg011!)36KB@kN^pg z011!)36KB@kN^pg011!)36KB@kic63x{m(Vg6@$336KB@kN^pg011!)36KB@kN^pg z011!)36KB@kN^pg011!)36KB@kN{mrr#V0ZBtQZrKmsH{0wh2JBtQZrKmsH{0wh2J zBtQZrKmsH{0wh2JBtQZrKmubE!uRn=QR~l zD6*aBxz+1iPM+uHx2&%pi#*Hg8_yEUiTvFpwkr}65@x*nyQUa>9VJ=^4`M4M?& zAE`Ud_0o?2nm`_2v$)BrB)=o(keDlCF39sCaqjTP@213UnRKp+{t639=_Zi4wiR-C zv+gM#cCfc=#jEG*Ue*)6SB{8iI=Ht&e~S9t2!kL!l^Qc>B6b!8v@J_#GswZ2Pf`-D2ei^ZR10A(eorg0wh2JBtQZrKmsH{0wh2JB=Cs>;v7BkJpB{v zq1{P<1W14cNPq-LfCNZ@1W14cNPq-BU4YKhKi!aOAOR8}0TLjA|BQfm4_ThqH~IZ! za{j&`#Wwl9Xz$zpzURdI-Q+gJeUXxDLwXyeOC03%mXhY;FO?i1id2Xeo4N+dSA@Y=_e7vBDNj4DsB{$}x zyl6w@DNXr#LD7ahmSVr;+7RVM8zN6>D!>bhHsm=e_Dik}QC_qm@|326yr5`9KDNYu z$+aQMi#9}_(j?wfE!vRR2(e#sZHV%s4Uwlb73KxSc+2gG{gP`#loxG?Jf-O?UQj;H z<#jH(Hbi;RhR9QzitvK+ah{SkM0wGM$WxlW<^|>BJSA<2@}doqr!W5amT1B2Q@&pKTXyh;dIz8=|~ugFX|_5h#%W36KB@ zkN^pg011!)36Q|QBT#S-z3=_sk)>KmfCNZ@1W14cNPq-LfCNZ@1V|wD0^&SfQOM!V z_sf;f_4fO%3(mpj3WfOoYVm!^O~-E?dg9%#_tUO z=@?VuO=U=c1W14cNPq-LfCNZ@1W14cK9>MpXa8LC)Gi5-011!)36KB@kN^pg011!) z3H(!l&eQ*CLeG!@36KB@kN^pg011!)36KB@kih2>p!4+4B~R^=011!)36KB@kN^pg z011!)36Q`)1?W8epC+IGnZ(cHm&uiGpL4e_b3$Ry>q{=B>H7l8rr&oO*q7_gV?2>u zh>A4DSU#7+_UO@LO{ZD+Os?{jeD8vN`51+WGr5$e7%LV}zZfe9Dny*gr8LD@$tnF} ztXxQ8&*Mxkr76bBo6|4GDsvR}JkI1&nqn-wB>iIi!I8&!KDiLncFdHWl72BZKCiIn zaVD42=9rFS{S$ZOaVD427UPKYbL`9=d7R0mw8dyhzZm;*M;>Q#DNQk!hxCiF?(M|y z;z|D)zfHdwRZa?f9%phXZI0;}V@vMH<4i84Eym{Q=jg~Cd7R0mw8fZ?j{UhKk2ATH zrWh+Zrk`VjTnc;sy-UfZw8fZ?W6cZ-dmd+U>9fb!mOJt|lS`jH#%|n^$C+G8Ta4*A zADy@(k2ATHrWh+PNxx&J;S_~^jpE6Ln2Nv6-kztw`K~tpcVD`l*EA`vu;=k6m(u2W zJN;s8$31zR$)&W#_%!`u?7v-FZBw2nh2r~mP1<&1yiWcB=5kWt z>&ka6JCDDao$chuub=+nGRe!M-HKWJTr+CN-nDaUq5bU&43Hmxu6RCoyOP(gUpD@+<~``Ud7{<^5ZWpm((r)^1M_p zCZqOSYIk^T;Ro9mHR{q@b8Y2brL=3&lr>c?V=`)gJ~eJh?YMKp(lSAxTF>X&Uvju> z>X`M+RaMRFWseVPKU~@~%7LvuIqh@B^SRrV)LsR)7x6g%x#LJ{`%27^tp~Msi)5xw9>Bl=kHJ2B9MNLF`240c2n(BWqUR? z{=T$-*tXVne_WWh+A{uLl6rmnM_H_cGipzyuH9DDjxlyqT|461yL&;SbnsdS*GAr$ zQTy|$aZBoBE0_9vPXE+;KG*(I&ph9#7v%2P=)o_CFTaTVM!L4j62AFFp3fD}=WbV0 z516`cd+y7hJC3xrFZHssRXaa=*zlUwn7>LpKaigP5Ze0e{^n_|FQe}#sa;|oZ0h&s zJT9a4N9y-o-T{xB+k^MttCmD;cCyR5Z);rpCjB#7Khi5+N$p+p*|xD(=~dtVx*lm@ zlQn*uOLI<=)lMI~oOyMF>jm}tU&rxZX-`u7)+tw@T!!txG^{|}f|&mBiv+m{Bea-5Bo2dkPaQ}#XkWQBCL(()1uAJ$20 zeHnc}No}ZByWV=AjM@)r5cX=jWXTqlz1PaT-yMyR&K}D#q3eLP8MQy38n>hl8+)ru zofe;3&*$1-8hWwHrjZk}sygK9S)on&S<}5QS6aJhK=93*zF<5UMx}lUU1b9 z7u_7Cb7QSagyFo5+MiF2TT*X*?%}z)-lx{{x%QWw`VM#Rl+!_Vc4yvvbMl^+evj2} zbj2_Dy7t}*HrwiE*w?S6!4+&g$`*UBI%hK_{DN1IbbgNg(wr}key;iTx!aZ0hkZ^I zu9EF@$C1|dCATN_duJV*P4&m-j@_)T6_>ZiP(^tq0n^7c|zQtDr& zWxE%XI;tMld30*SsDsk!+>x5Ar?RJP@61<9QlAPrT7O@7M(vq2bVP88`r5;)M}G}y z={WqEbn)(z(@R%IX4L+CYTT0gQUSy8c=M;$^SSnyJc~Cx_v7Hhs%Q1g&HpZHk*+Jw z8xFUg@wwvp-0e#0>uqb#zaRCv<49}!l2`p(bHeIHs^ZEVFVG??Sh|_BM!tls1JYVw zM&D0TM;3C3KYt{n_CxZuvV?a#? z`Kk5L{v<#GBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQaRn!tbaI{KG33e;Z`AOR8} z0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}f&YpCT}S_~j0D9&0wh2J zBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JB=BDlpzG-Wg;AgwNPq-L zfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCT<40^&OQSG)cz(NG*D zKmsH{0wh2JBtQZrKmsH{0wh2JBtQZr@P2{B*RTpXbhPWx(V=ZCQKq%Mg9FbBiCeo4 z{6VJ<_6kMT+a2uf#CHCC!8sUuX*ZgluSCO~6R3N32DSJ7QR`9_wH0ch=6+|?{9YL~ z2P>ethBX>DYtWGEC)6$e3bn_wqqg%&)E2mjnycQZ*%yhLP5aSs^bi{I6hXb!4b)XF zk6QCjsIAKDxVa5A+YX{;o(44&E}*_dF4XNGfjXPss9kXZwXhmBw<@4!!(qO?I%@p> zM2+hT)D_Bw+8awyJ9Zo|!;_=!u%V z`!VEnSqzz;A4B>q$B?QyF*s^6YIOTh;~$8c-aP)=^)ck$0t{I;4ny3lVMv1$7KpKS7R8~i)=Si$<8xukCe(JhgxV6^`qo_3=Q5)1(tXq!%A>CO zLtdrJ}V9o##Q+ zbycJ3SQ9kmtk1{oIT~u7M16=G>hl&w-KM&z^XA8(eIC?R>BP4$LPNL{8tQCD{p<>; zufVtMt%ACdKk#G5g}Yi%d!Qrg6Zq|PVbqUWjruZ;P`57|>PGRr0q_6qeyAPei<Yz4^o7I1WnkDs6cie!wa6sL}5~%Cb3w7lt zqV_zu8q3EA|3J;X-%;Z^8g<5zsPnptx(-gLE6LY^b2U&qjvu2f&YSIcl%-GNzk+j3@E&yU53H9BTUP=EtRkx|Sm5OQ_4vx3B7e+G2p3-*`O} z2BF50A7=$}V8|X{ob>yA99#M*TC&wbQfqVd}SXc*y(`e%oE zT@I-4W zVGA0D+oGXxN!0(6ANBo)puQNN2m8CAZs=IlM&(6A-STKC%HzJg2K6%^^LWOiJ|Fkr z(V3U2kGjI#Vaia{Z|jBnMSyyLJ?fhr=)Gbn9Tdl*MS~c z`SHuQ$5-TK!uh=1$&ce|{22R&yWc?VcV$tJ+^F_J)aRJU=L$d0U8|$6!ZXxftjO1l zg{WtWj{aWR-@rJJ#VWb8XC<+ePk;>HV;wXvI6R&U!u;>8VyVM@5-?T zH1zjHL-oC=|C^8hOdaYwJwko%Z&0^}uL&wYG;}V51~w86rT992%?0(d_`K}W2=#@B zpzc?`#=4$HUC!BPsK)1Skvpirt3dsdDX4GfjrweMsN2qubFW|c8q3%Glkt3g=41Qf zF6s~SvGEMyG0#Jt=}*)-@c2vQLG5p6`LR9@XP=pmle2tWa|%Y`0jdNL7B4R@n) z+kG@T-$rBo-_cmA3r-4bjpMq6V3;fa-TrGBnl@EOQxR@3w;UQftUzPgI%v$&8b@Eb zfT0iCqor6yG#6ckrtUS-czO{U)oO0G3Jp=q(Qs@mTAK7g^EO8`mwAY$pzUaUx)+Vc zCTOg65e-*)xfy(X`u%{W`w!5xo3E$*_%uFmfyU7FXsmq!4Hp8@5Yhk*RXw@q?`Zm( z|Gn{e6OVfb8a<-WSg9QvPIW{>P!lwK-yij-{ziRg0~*IqLZg2vG`75i#zL|D?~fvA z2=2h=+&I)n@U?UNC~oeL#zt%Tv3mrKR{Xd-z{fe5uhWehp#H%X)Gz)W^&R-{#q*wM z%=Z-j7U!3td6o>Joh2;j#R+6b&l@4UT+`IKhu~ zy%(P=JpO{EQFnm4kjr+bQF{pX;i!f`ZLI)wuvHenN|9M>O;KX?o7bccd?GuQwVGaL=HjXl#BQ zE$y?QCHGh~>x%OB`lBhh8=6YY$tH06&)55A_Xy~F2RS2UI` z#>eI!8uYo*fP8G@mZ5$FpW7E)(75LpG>+x%N;lAO@ID%Rj`MZpJ}*-P^*j0R(4Ysn zxNI$){yn#@H48`IsfVEKukILH zavWMpFGsUJJDRKUHSFFwH2uccwLk-o9dE$V!$L81ZwOjuwMFxv_0Zg_8k%#oL(>8N zH^G7mIQrnPI6BKR41IV7Eie0_rC}B{Prt?M3P95l{<|!ACYm~K#?Yh9G1R#XT27zj zWe%Wu*)=qOe+^B0`4~DkMN@HpTpW)=O9vOURPy0}a~wgldM=s^JVVpE^Jwa^15J4@ zqLHs3M!$<_4&ujm@2zOA&ii(!KAPt8dH1syA3y$kapzVv`bb8xq2i?(lC>o6+tk9t&=>XoZVQ6a1W4YcQjbkeE<8%lb^VdVe*|TU^F$I?_o`W+wt-* zXleW%S`>VJx>gD&Y;2F?PSnORYw}~*!$lanuRHg)pv6~#ma>D<{MSLgPFdsFZ1r$V zBR($G0K+Pu#?bB!(Xx%NV~A+J8II-|Ptfds1jFKQVc6s&7#i=6p}kh35t~&i}>+=5=|EtplMzkv`in5 zmJu7!V&{V9cqe|G8__)U4w@^3qv z>FOag&2Z<(AfTzyL^MCBjOHs>(7bgHnuD#-Y&{lD(fn`BMNiPw_a>UEH$zjly=cC0 z7|r|YqInvR*>M%0n=R3_VH}#=3Zkj@Jv2V!$Jg1Pamf!>ICDq^oU~{pj`LWFqhFlI zuobQt`nU~-nj2zhD>H`HT7okk9mgqt?Qufira0Eg9!G};Vwmq}em=P!L%r@|C_LuJ z%yOI#85{)hL)ItmM2GX+)u$cR?El4ts{;e z=!s!d?qTRtTMQk!7DLO8LCd-NXj!oX$22{RqyLD+(W*HZHp2$Pay-XS?F3#=UbO7! zjTU!q2RATm$5sr}_rkDRvoZ9b8bkY)#?Y)=(XwhcT6*yMiWcT>oiX&R1w+^Hn0@&D z1~btT)fg=c*Px|aZnPBm9nHsXqIsStAN$`hw8btAt@syOBA20MWoxty9Ld)NEt=2q zah~xDn!OKWXiX2^Z$3{R_T_Upg0H_0d@c+`^VJ7@9lng_0lsLq%YmUqvZE#5nIGpX z&@!I)jjv_q2mE+l(V5Q&eoQyy<67jdI7b)f>Kz=)C#HX#zgso`gS|L;jXiFgh23`> z&SLV7WKmaiEUNxw7J1Z$MOu!qNSCJUC9Yym|60u+-WkDSR}N>cAqK`?1FxzhMs}7qk1p-C0cFQWjmgBa4#uv&hv~Sfs;F7Fm1=i+FaM-QPTo z#Xc#>V%A!*Xty&gYOp_x{3Sb!Y?6&dJnhLMcCTX*3$nAAHji0!WN#K-*PBH--(!*M z2eU{vkwruvXAv_`vxt5M7Gb-MMQOZPR9gj$d{}}-hU!`5_lH@;#iuO7?-7fr_JrNL zv54K*R(LZ zdmx(KZF-K~*|m(_!TUTG8y2y*B8$+hXAwnh*}ajC+1w}a z;bXkM3cIiTncXkckj3_oU@>MLFH?a)$os|1A;*Rp8G-}oFr7WFrubIvpP3x3R$V=?8gu;}Fj|4}aX!D1HMdK-&baFRto z+RvhEC$PxB54|ntke9_Cu&~&ArCCfEKenzru;`j$EUJGu7ForE-OtyC#s0CD#fCVr z*gS<dtihTTXvIyN{c5mZF7V~>;7PH8S z#lW{LdRP?}Rr&#o^yh6o<@3qo7d{WBuzTg_zU@cS@%Y@2tMB8-P0R=4+sW>G?O?Hw z53<QSX48g|5q;dQ4EXywh)W)?!cnYu4mB=%d;qh zhDH9G`)#?V`B|*5Gm9y0WYPYGS=6&-EXqS-k^H!ftT^LsxzFvNw0(a*7Q@4niI1MVB1&n)I{Qx?-t$)dNl zV9|9N{IlG9`<3K(%>Sf}F#3?69M1(_rVhLBqW?%gBKUT`M)q9zk#eG5Ubgt<6qMs- zb9^kmS8>MfYW~ssVxN1l*mk2nTJHVxPWGUjd@}VMz)G#7u}JwAn8&3WX2(L9rR5S- z9B^X^5l>kB-HZ9w4ZxhUJTaSM5?UQugNiW?S;CrPEPmfP7T@3y zi;L-xxhECFoJ}`jwl#+^%fta_Rci(+(3T~1^k(rR_p-R#(^%Z(DVY76Z!ue?eVFCc zJ+zt?go|5GEL9jKYQ70Fne+0A}TH)L&aR4+q7f}`f)6N>TMPmUYWhTUyZ%2>%d-U+}VpPTUf&U z?^r^67Z!i~Jd3Zpjm4QH_VUkV?B(}v?1f);_Wa5T_S|bWiyy6E@!joNT*7k}ry0s# zMl|5(U{~0S$wv14;S2VBa5eV)YkL-7+=0bK2C=yD=U809((L7cw(P~GitI)H#q7Cj zQTFUkclKUgvoY=?@AeEfzsN5wb3Ea8X~W~;Luv#x%OSz@MP zmg-(;<)=f%^-HMezknq?+|CjtZWn$Avp5{XEc`WZtEF*hRo5C7;hv~yxr8O0D9;iK zA7Sx>F0r@>6>ox4&yEch6?KyEFmg^B{Zwb=K^ml zCMSz)r)DpY+On5khf&dEA}Z`%P*J2aOBik8^KLbZFA>k;JRJFa=*Q>PZ1ysLo;T<3 zo!@`{4xu_X(5_n#qh=O^;d48Jy1{yI32y;I+y4kdJhH&xd-GuMlD|OLU^xUgy$gQ5 zPQ$RveZWmq9bDS|2}7Qjh9MQE!{AvxVQ|+-2(Z)yKW9A*KUM?WYaRvHpCVwW(=`}U z|2_=%I1J8@W`py3U-0_r1$df@f&0V@;ClBG4Bf4QA&q!F?MHy~S^($9PT&-82K8Po zxIH`uu1=1Ao9s^F*;$i61CNNZ=1BUGPhQX0_U~t8L z;Or3#PD@w9peMUwkaKkyl z+7tTK=?Z;z$3m|f3t;@R%3$!n4?%Y)f!}uvVfeTr;4%CZs5kZpx7B{&8j%BBM{EIO z?rfmB^)mzxx(Ys;j^Mdx6u3V*3F>acz^(mOaCJWcE)On1@PHB!=+XfET&jWB?jkU( zMFOaw*8{iFqj){1!6lTz(8pE4Z&FV1xrE>qSpbIp6$$P?=LWZpdBD~5H@Nh2grT+O z!Vue+Fg&(3c*g$$!x~lscRUVm>%+m-au-~hw}K&mbb-N5xruE%a1ZwYcW?l8FE?=O zw+vi+e-AF@Z^DqRLtwB?I5;i;6`ab%g4@l%z%9%JTqARX>sNPS=wG}{m=g@He-oVc zJb*!U9bup)7F@R$<#Rv{E(Zc&=+5OZBrqoouIC3%XD7m-{>@>)6>hmH99*6wG6^8bF27|ZOfI-tkVPLOc zU_iSX(BF0e^!?ov`b-`PGxMy1uw3IovuF(jwm1vEFCT*U@_jIT`U>!Dwho4M$p#*$ z)i65ee$YR2hLB1xAfP}C@U7_%-qmu$@b8bou+v$<l;PICmxF7BV?%(BrK&O)s@ck+!PnLuMhsgHUVYAjXK)=DX4M1SeI|f9$0Ts=Hy?&9L-5WT4PGuS zV0bSV@GNy5JofQ1Zut$kT@C`*?tFaLBMdII5j?}YgJ-Kq7&dY#c=R6v?)m3}+crCJ z9W;~A6AcV;$N|nJr^7H?BY0fs2_8iXf%@?sJ`W7w>M|Q#zIq5lW*>sV1)G6WmB--G zX)CzLE(iAtrNAw6Gq|?M4MYFz4MT!=!Qdayg43>-{J5+F?h!@7ePmNmk8c33v6o?J z87mlks53aP>kdwn3c;Wsp1^=ZQLyB|2AJINEEqK25K&yoX%T^R|14NE~lKmv?h^8@&e-U>cr`hoZ5!Qj<+K6o14!DH@Epso-K{`eF4 zEp7t7Aw|Ha%vSK8ofEvW+k$70tKc!)5!6Qqf~zqYeD)RwpP#0~h(Y(k8=_$Nk=x+e zJO(`W>;v~&UBFF02wdDN@qT-Q_qNI4#T|!l-VUBWHRJR0M{sv23~tv?aQ7TA)Vm0H z*SQ8>`&Yy8zgL5&ek6D-eF^R*vVz;5CE)6@9b6QDz>waH!E2{Gc(vRO!|htaFsJ9B zcKik0vh4?#7&8n#xfX`F-i5(=*2CroAu#93Vi?`*7U5=~2Vqq4M&LiTH2AskG2E>L?G_zq&ILe7Uj+mm<;PRMYA`C$8vM78 z1HW3oaksiKVsax0KI;v^Jyt@{uu%}$vo?&H`U3p7ZwEg`R`9Xu2Hq|BdbWUX+myhM zxqA>WaUP5+b{qWt+kx*fF*eJ=yIXe{KIAxf#5{*l2hPH%pA;~%Q$Fx7C4uiEEAT1R z8N4Ui!0?A{z_YLexUZ-VBXc|e{}~MY4vq!iv5&x~+$r#0QUJUvOajj!8}L}kkI(6D z;Gd7rrP*1*H@ph?{A>d65qvIP%nqJEF9MJAeZgII4BVz)0>24s!LPIhd<#Xvh(`Pv zUGyCcYnlT*O0EKRlsmXtj)QCeZ{Wbq?_p`T%P{fzZZI9p0@`IQAY{&O5ZvJr1i3eW z!0XE(aQY%x9NrA3XXy{4zwQe9bHSi_Q4>OJ6CgNeI|!)l0`?3sZvL1)vF)JV__z5@L0f80kLco|oV66K9^t)?=?yKpbagK!GM`Iy~|1J(Z zu?hm>_Q5FaOBmUvAZTZ<1?@MyOgUc&ezpOEPU#@BV)&c|92+vZEOVZsa+xHnihiQt%jg-8VC&N4grR?F!D)T z@E@`dd=Evyh#N<_`9lbN+?pS|^&zlh4+v1Z!pP^Pz~7gzoiXRY$H5uALmq&8Iggw`Q;cQmWRSX2p5q}7|_8dam zmVl6K17USbJD9VuI!vfI6wF&+f__bJ(C%;mjlY(UpBrE6R1m!DAxs^17REc~hR}-3 z!C1Tm=$4s5TYL+I#21GU{&z`mSXKzG;|gImgTT_H9~d_{g5HH6PixzOrl%u>w6TU@ z^(hEiTLpr?u?1tN4qzBx3iRKv0PVITpcyg~LOQpG;GO||zKn-JpT{t2?H zJ7{jV22J5-5K?0R1h*IlK||aiP+JB9Dt`t37rq0H<7Ci$QyD@g-hto;4ja|;MT7s`jo?=`FZj$U4Z(BzKycqF5cDUX4_2EY zz?;vNLs`Lpm)iAF7 zN(gOY08=$DFq8}i-QM${J=F=cRa=7QfD4STastNe-v*(Fw}QD^127g?2zsY@(ABhn z_J>KJ8QK;?qC+9HdoQrGISi)Fkzgzo4*Id1LD%>;XiNVJnrf~P!hdH6>&Aew%lBZo zU;zD#0MI??3feoDK@;r)np|H)NY$MX>@Wv{=Ej4*d_B+|EDyT+(?A>205rR1L&y^a zpDW)&a90fkO}`95*?Fwd*Fn3%6|^npfo9V>&}8A|8efKBF9tyy8$(dOoDeuUJ81h& z25p@}pgG9r=6CrZq{lhF9`NJ%NM#5roCN~in?k@N9&fpup!qv5pHG(|Wc3sX4o3*O zPzi#{c7nj+^&nt7KX(4C2zN_Ag>bzeEa)*FCU+|Yqp#%vOIH<`hR*`y&yB#a>LeI? zHi0dFuZ3lGO2W*RMPWj%4G^~BGMF#c0#og5U@X@Q3_c^kQ0*+t`D*9|HOs6+zeecYbUIgJs-auw*R? z=AsS3q{sz^h#{cATNLzGR{VH3f!2|G?C}Cq`J7AOV{8gXx;LFW}TiNg9Zp$84ZTcRlrbr zBd-r)Kc5@`7SC2-K60HOGe%e#XMs5#d|~Q|6EMN2KaAOX z2*O5QgV3@juvGX3%w9{tTyh&sJ2M!jcprp`l~pkIsS!pSmP6?2Yhcmw<3)ECOnWMW zsm(7iVM$gP-)}064Kl;%v8y2TMGRPG)ByAF(qI}j4~#4KfU(FP82y-UcYF?EgEl~D z`zWy3dV$%dI+!}v1f%ybFs$QaSSc5T4j&Dng#*Ci%j4Y_3}yxYy=kKdqk0k;=Bhy- za})Hw$N1RuHQ<>Z%%jhMDWNWy+5s3xZwABuxnRh%iO-jBL7(Fkn3rDS{pNG7@Nh7B zKjZ7K1D^}s`P}65!POCTXY+v0JqFDEw}ZLnMt+fQf(F?)&?q>YL6RRn6{PQw`1CNHubJ zRaL;r+^T>R&uqVW_|Uf9)?Kz!a>d!+>AqO?ovXX5MyrTiTAY{Zm^; zmGjr8s;Y28<!MTn6zii3 z*k4~2u(vsHd%G%N=VMjfmm#V~Q(LGyH0`Jw>{44bvI&o8_cK+%j_*_f;dxa7o7boU zHr`PUXko7!`s)al_nAGafPGn20lUug?QK*6n~JIeR{y06Sgue7ES{tCF04@bK3K}j zxbQMp`2GQ^fHi|u0ZT5a0_N;i1x%@-3K(xzjYt@y8r4|OWBo}Lu(hTtV3nsTV4+qO zFw?9G7-y#n@UE>27*aH&_+3KX;tOkI(9aS64Pu-lqj9Fkagww8OjiKJLUGD=PMHqUA3uwtGP|*F1eDH zQ&#m;D`)1ZqrBE-qs=!;X45nwr_JECtKThW9U5+vHm%C^u~~d=d7~OHtJzMe`%pP@**8i{#T&}S zv+F5O+&N>DwdPQp=F^tg%&&i^QT{33jix-FXuHKwQhB=mM&&K%Vm8?ijj^d(D%i&5 z*+rXQvW7KMOsUzZiCx=98;;Mn4exf$CTFqVZ1VP(Y|4)Q z=|vlLsS@7kmpO}U&5@;)CtD0ro(#&Wj4WTtrl$2EoBK;{H7eWxR->jn@;CDEncQer z(3-|k`I;*aRDG#D@6p|6(8*IaJGHxQ>(0$->sBa-t?QxFwmpYN+ZLYuym6^XUFH5J z&7r}r^VaM9N?G6cQz#1z?U!`B{Mfpp(bxJw{%*<~`5P;XjkzN~pES4D-?Xz{@MCT3 z71cG?OB%j$ez%;puFgj5-`bS6epKg{a`KDW${n*ezPnxAx1O}Lx6-QC6=l^PR?2`f zi-x z{TpTe4GWYtAy(OO;%4Q7AaCWF12#4}>o&3Ju-V<_&$&;m@9U0O-(O$X`k`i-GS{L? zN)Owj%E^5P*jUGT+x$H9f{oYES~l~8*D9-RzOT%^WudZYwx!AegWKBV*cxn8a@}&9 zhAkG@wA(b>#?9N+W?=pb%3|hNWtpnAm2FmbP%g{A%BGZFZ)4q{ij8C5UN*zCI@?To z(cNax{;6B> zzWS`4Ck9)uZK<<9mE*AT-fmz1s=}yu%QaYnKU(X}!PZB&K2Y{})>Ao4%C0o!XYI-Vj?#rgMemGS*Wr9!Aa@JWUo>p4jYo+`l&upbf2_NN#&I!t^ z5%rUnqsQqlU_Ei)rH|EWz2WFCWrZx-kCmhCBtQZrKmsK2et}o-pLh7#uA{gD|Bv(c z?aQrgrrmODxcbb{AB~5y*Up{e&+2(kovXZ{mA-8BwA#f_HXHv{y*B-9)?Pi`@Zrlr zKPH@ys=f2a1~n=iocVw4T%d1XK_-T;c4Twa&U< z?w^nkwN|gyRrTv%b$#ew)m`oq{|1%*cBAdjq@OB!7GpkOdtTG_bwz+lRIz$s*=3&$ zFSYy8@pqiEs)CgwpX)MJ^dsreg^4CnO-}x&AG}jvxBtnfc#4^aQ*(mzm(Bt93G^hn z^d|$WuU~y(R_YdD6npA{I&I|-KD&B?J+}TH>%y!zcBl)@Rt#?6OnDAok@zKFF}8jm zB|P!S*!xv3U+pyB=6t*Efx`k_fnw+KKd2wlwn^27LX+%&tR1y?g1bQ2C34$yxyz|C z)zLobn3KG7UOnYh=%_!@DNyRYZVBDRw~1yUzO5`Y@7Q2U#+KE_DYUQ z-kTbw8ycEyQVRl~9}x(Q7xM8I+IpWx8QUbXl4zCYr{{#2#JKJjJzMydU}1ECK;U4= z>-^_zNZE%SwNT`ki{}R_M}L}qdepkrrUKbJ{yb><*Bwm6i(rRH#bHCl`nw z)QE>ZjyqNQou9B+=Gjs+&Sh!!A^XFw;Wk{g9`06NCZhiRjODFg{96+|)Zqdb@A-*k zZf0}OIIdOuC{C|gZ_UNVPgry~hEYv97~ooRNPVwH?4u3nbzgYM*~z~r+U{*&jBJO` zYKzwRN7Hi^aR0b9R(=_Ma0heQu~BkkOhxy@lR zwO3JLyM?wJh_cYH?G@jjT5S~h&s49RNk6$ul9Qd@#*6ItaDj?|#4@Vtd^!K~XP$WH z$u&kJZBv9rQI}j@j)tiYxiu69-mgO%5qXfn7g6Wb@o-$YG$TUbd;~~&FLQn1|DztZF86FLl)4HY^&u%mvTww z@D$Bz#Q=6<|7I~C25O$H7Q8)=U zYdB&lEexU~_Gudu?`U(yuG-)gKQd2)TA0Is&`jY!9x+9MXM)n}^R$;OL$&#`L)xTJ zq78I8$Gm(siLV83WE^BGHSZTBX?iW^X!BBrw7NX8HrjPq>uN+XSFf2e<2rLRJ%_6` zJ+gJ0?wvQ7`#W>AJ^_DfZNfRG^OBs&4Qgj>M`mbxpA1B88@7BI^#niyLR#~izNfcZgfz*NLe;@>C4F$bnB zX3ot%#8j?&$HX_TWO5^ln8;5$nW__2%+k#f%+iVpOyuriCX9QtY;B=Q3lS6fUI##JZ;kuvYu`;?ukv=vkNwp!yRO zyAA?f{wYwyLDHY(5)&VvqnLwYd16o@K)Sv@UO=&=#4TUqlu`p{x9yq^NgQ9a3*v!2P zboU{k-84Y8%mM057f_92P|t4yFFXb+!?|F`M1kzv<3Q*80&PivYO4m?XBH^RZ-9Na zA=tI|fvkQ!$gIZ$ogxN0svKz7BA}<;1p2Zm*vvcu^jaCvUjzf~Spu}Z0BBVq(9SVD zheDwGP62Ix7HDr?PblZt8vxX6p8vpTpt>&s^{)h=E{6csnhUf)@3UU2FiV zf!BW+0JIm+H|QLXoeK0ZZ;;i^0NZ_HUhgVz8w6CB9nhs~KsnzZlzXRw-M-aeS7QW< z=*3_gJf9sC+QKT=?qNq)R$xQ+YqXg-9(KuXAYHH!bPH!d>bWpT-7=e1Y+A^Q(-1qS zEW^2;W$F7w7p(I5G zZTAP@)RIe(*E9pN)9*u;@)TqpRzU7&58%uZDb#qSz~SWwAm>F2WF_r|&E?&Yp3@KM z3vR(?ze>o|;&khhC=#=8u&h?8&YpK zLuz#mq&`UiUFgrCyKDuz8hg;yH$YnLJIJz)g#Ds$&>8Oo-BtmlX^dgBcot;+c^tA+ z??d)$Gsyig4GL~PgNsQ#XB+|DJuRfiu7@rDL$Et_GVDpIf?Zd_p}1TP`O5~Nq+Q4| zCN8Y%ZZd1}nGcR^YsBi>C=9!sfr@vfC^>Qj#Y_d7E_PyF*cGfz+*{VTwgw-FH{y5q zSEFxZAjn`d<3^~If7`PEb0 z-ggs2-i4rAm58q1#pv=f7RO%o##OJ%FzxwjOf=q)p*NSIdaNlrR)nK`oIA=wzd@U} zcj&x05of#RqjDe?W#v9-wXYwg^KPKzegjG^;!)DI2&K0sqH@zKj9xGq&BrC7xtK+X zs~K9h*&_Y09A*1gqK%*om7mYUfbt;BII|Qjl1`%4U-M%>q5}=+8{>olhNsY77Pq?%PUD_B}^gq7^GVofPqR^)UGd*Vd+>byJl$Uoq~xggfE=PhexK9Myq+rpZ7 zyuo2*Huk@rhrQ2&uy-H<2afM%N0(5n@&C$M(LgPJ?9*dkdMEy|Jr}#EYxr#ZSRQja z_5?<;!o=(NV%sh3Y_Guf->dQQH+}dxAr7BBPsaA^&G=hc2zHZ`tVk7zZB~BR+CL8; zr<}zO$0Y1Bi^CW5x8aN5l-RxQ9DaxlXHA19VaKxue3ri+JJ1K8SH)wmpaS0xXJUU` zEWUr(&k7`R)+E{t+v8Q(VNYXMsu}j?zhwmu6l>6&#R~T2. -*/ -#include -#include -#include - -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -void initLogging() { - std::shared_ptr cout_log = std::make_shared(std::cout, Opm::Log::DefaultMessageTypes); - Opm::OpmLog::addBackend( "COUT" , cout_log); -} - -/* - This is a small test application which can be used to check that the Schedule - object is correctly initialized from a restart file. The program can take - either one or two commandline arguments: - - rst_test RESTART_CASE.DATA - - We just verify that the Schedule object can be initialized from - RESTART_CASE.DATA. - - rst_test CASE.DATA RESTART_CASE.DATA - - The Schedule object initialized from the restart file and the Schedule object - initialized from the normal case are compared. The restart time configured in - the second .DATA file must be within the time range covered by the first .DATA - file. - - In both cases the actual restart file pointed to by the RESTART_CASE.DATA file - must also be present. -*/ - - -Opm::Schedule load_schedule(std::shared_ptr python, const std::string& fname, int& report_step) { - Opm::Parser parser; - auto deck = parser.parseFile(fname); - Opm::EclipseState state(deck); - - const auto& init_config = state.getInitConfig(); - if (init_config.restartRequested()) { - report_step = init_config.getRestartStep(); - const auto& rst_filename = state.getIOConfig().getRestartFileName( init_config.getRestartRootName(), report_step, false ); - Opm::EclIO::ERst rst_file(rst_filename); - - const auto& rst = Opm::RestartIO::RstState::load(rst_file, report_step); - return Opm::Schedule(deck, state, python, &rst); - } else - return Opm::Schedule(deck, state, python); -} - -Opm::Schedule load_schedule(std::shared_ptr python, const std::string& fname) { - int report_step; - return load_schedule(python, fname, report_step); -} - - - -int main(int argc, char ** argv) { - auto python = std::make_shared(); - initLogging(); - if (argc == 2) - load_schedule(python, argv[1]); - else { - int report_step; - const auto& sched = load_schedule(python, argv[1]); - const auto& rst_sched = load_schedule(python, argv[2], report_step); - - if (Opm::Schedule::cmp(sched, rst_sched, report_step) ) { - std::cout << "Schedule objects were equal!" << std::endl; - std::exit( EXIT_SUCCESS ); - } else { - std::cout << "Differences were encountered between the Schedule objects" << std::endl; - std::exit( EXIT_FAILURE ); - } - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/summary_deck.DATA b/ThirdParty/custom-opm-common/opm-common/tests/summary_deck.DATA deleted file mode 100644 index 2e1dddde72..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/summary_deck.DATA +++ /dev/null @@ -1,788 +0,0 @@ --- Synthetic test deck based on Norne. This data set is meant to be a simple, --- well-documented deck for the behaviour of SUMMARY specified output. Data --- is mostly entered to *traceable* and does not necessarily make sense from --- a simulation point of view. - -START -10 MAI 2007 / -RUNSPEC - -TITLE -SUMMARYTESTS - --- A simple 10x10x10 cube. Simple to reason about, large enough for all tests -DIMENS - 10 10 10 / - -REGDIMS - 10 / - -WELLDIMS --- Item 1: NWMAX (Maximum number of wells in model) --- Item 2: NCWMAX (Maximum number of connections per well) --- Item 3: NGMAX (Maximum number of groups in model--excluding FIELD) --- Item 4: NWGMAX (Maximum number of wells or child groups per group) --- NWMAX NCWMAX NGMAX NWGMAX - 6 2 3 2 -/ - -OIL -GAS -WATER - -UNIFIN -UNIFOUT - -GRID - -DX -1000*1 / -DY -1000*1 / -DZ -1000*1 / -TOPS -100*1 / - --- Cell 2,1,10 is inactive -ACTNUM - 901*1 0 98*1 / - -PORO -1000*0.2 / - -PERMX -1000*50 / - -PERMY -1000*50 / - -PERMZ -1000*10 / - -REGIONS - -FIPNUM - 100*1 - 100*2 - 100*3 - 100*4 - 100*5 - 100*6 - 100*7 - 100*8 - 100*9 - 100*10 / - - -SUMMARY -DATE -PERFORMA --- --- Field Data --- Production Rates -FVPR -FWPR -FWPRH -FOPR -FOPRH -FGPR -FGPRH -FLPR -FLPRH -FGSR -FGCR -FNPR -- solvent -FGPRF -FGPRS -FOPRF -FOPRS ---FTPRSEA --- Injection Rates -FVIR -FWIR -FWIRH -FGIR -FNIR -- solvent -FGIRH -FCIR --- Production Cummulatives -FVPT -FWPT -FOPT -FLPT -FLPTH -FGPT -FNPT -FOPTH -FGPTH -FWPTH -FGST -FGCT -FGPTS -FGPTF -FOPTF -FOPTS -FVPRT --- Injection Cummulatives -FVIT -FWIT -FWITH -FGIT -FNIT -FGITH -FCIT --- In place -FWIP -FOIP -FOIPL -FGIP -FGIPG --- Ratios -FWCT -FWCTH -FGOR -FGORH - --- From model2 -FMWPR -FMWIN -FOE - -FOPP -FWPP -FGPP -FGPI -FWPI - --- Pressures -FPR - -BPR - 1 1 1 / - 1 1 2 / - 1 1 3 / - 1 1 4 / - 1 1 5 / - 1 1 6 / - 1 1 7 / - 1 1 8 / - 1 1 9 / - 1 1 10 / - 2 1 10 / -- This cell is not ACTIVE -/ - -BSGAS - 1 1 1 / -/ - - -BSWAT - 1 1 1 / -/ - -BOSAT - 1 1 1 / -/ - -BWKR - 2 1 1 / -/ - -BOKR - 2 1 1 / -/ - -BKRO - 2 1 1 / -/ - -BGKR - 2 1 1 / -/ - -BKRG - 2 1 1 / -/ - -BKRW - 2 1 1 / -/ - -BWPC - 1 2 1 / -/ - -BGPC - 1 2 1 / -/ - -BVWAT - 1 1 1 / -/ - -BWVIS - 1 1 1 / -/ - -BVGAS - 1 1 1 / -/ - -BGVIS - 1 1 1 / -/ - -BVOIL - 1 1 1 / -/ - -BOVIS - 1 1 1 / -/ - --- Region data -RPR -/ -ROPT -/ -RGPT -/ -RWPT -/ -RGFT -/ -RWFT -/ -ROIP -/ -ROP -/ -ROPR -/ -RGPR -/ -RWPR -/ -RGIR -/ -RGIT -/ -RWIR -/ -RWIT -/ -RWPT -/ -ROIPL -/ -ROIPG -/ -RGIP -/ -RGIPL -/ -RGIPG -/ -RWIP -/ -RPPO -/ - --- Group data -- -GPR -/ -GLPR -/ -GOPT -/ -GGPT -/ -GWPT -/ -GNPT -/ -GOPR -/ -GGPR -/ -GWPR -/ -GWPRH -/ -GGIR -/ -GNPR -/ - -GNIR -/ -GGIRH -/ -GGIT -/ -GNIT -/ -GGITH -/ -GWCT -/ -GWCTH -/ -GGOR -/ -GGORH -/ -GWIR -/ -GWIT -/ -GCIR -/ -GCIT -/ -GWIRH -/ -GWITH -/ -GOPRH -/ -GGPRH -/ -GLPRH -/ -GWPTH -/ -GOPTH -/ -GGPTH -/ -GLPTH -/ -GPRG -/ -GPRW -/ -GOPTF -/ -GOPTS -/ -GOPTH -/ -GOPRF -/ -GOPRS -/ -GOPRH -/ -GGPTF -/ -GGPTS -/ -GGPTH -/ -GGPRF -/ -GGPRS -/ -GGPTF -/ -GGPTS -/ -GGPTH -/ -GGLR -/ -GGLIR -/ -GGLRH -/ -GVPR -/ -GVPT -/ -GMCTP -/ -GOPP -/ -GWPP -/ -GGPP -/ -GGPI -/ -GWPI -/ -GVIR -/ -GVIT -/ -GVPRT -/ -GMWPR -/ -GMWIN -/ --- Well Data --- Production Rates -WWPR -/ -WWPRH -/ -WOPR -/ -WGVPR - W_1 W_2 / -WOPRH -/ -WGPR -/ -WNPR -/ -WGPRH -/ -WLPR -/ -WLPRH -/ - -WLPT -/ - -WLPTH -/ - -WGPRS -/ - -WGPRF -/ - --- Injection Rates -WWIR - W_3 -/ -WWIT - W_3 -/ -WWIRH - W_3 -/ -WGVIR - W_3 -/ -WWVIR - W_3 -/ -WWITH - W_3 -/ - -WGIT - W_3 -/ -WGIR - W_3 -/ -WGIRH - W_3 -/ -WGITH - W_3 -/ -WNIR - W_3 -/ -WCIR - W_3 -/ -WCIT - W_3 -/ -WNIT - W_3 -/ - --- Production Cummulatives -WWPT -/ -WWPTH -/ -WOPT -/ -WOPTH -/ -WGPT -/ -WGPTH -/ -WNPT -/ -WGPTF -/ -WGPTS -/ -WOPTF -/ -WOPTS -/ - --- Tracers ---WTPRSEA ---/ ---WTPTSEA ---/ --- Injection Cummulatives -WWIT - W_3 -/ --- Ratios -WWCT -/ -WWCTH -/ -WGOR -/ -WGORH -/ -WGLR -/ -WGLRH -/ - - --- Performance -WBHP -/ -WBHPH -/ -WTHP -/ -WTHPH -/ -WPI -/ -WBP -/ -WBP4 -/ - --- from model2 -WOPTF -/ -WOPTS -/ -WOPTH -/ -WOPRS -/ -WOPRF -/ -WGPTF -/ -WGPTS -/ -WGPRF -/ -WTPRS -/ -WGLIR -/ -WVPR -/ -WVPT -/ -WVPRT -/ -WOPP -/ -WWPP -/ -WGPP -/ -WGPI -/ -WWPI -/ -WVIR -/ -WVIT -/ -WMCTL -/ - --- Water injection per connection -CWIR - * / -/ - --- Gas injection on 3 1 1 (45) -CGIR -'W_3' 3 1 1 / -/ - -CWIT -'W_3' / -/ - -CGIT -* / -/ - --- Production per connection --- Using all the different ways of specifying connections here --- as an informal test that we still get the data we want -CWPR - 'W_1' 1 1 1 / -/ - -COPR - 'W_1' / - 'W_2' / - 'W_3' / -/ - -CGPR - '*' / -/ - -CNFR - '*' / -/ - -CNPT - '*' / -/ - -CNIT - '*' / -/ - -CCIR - '*' / -/ - -CCIT - '*' / -/ - -CWPT - 'W_1' 1 1 1 / -/ - -COPT - 'W_1' / -/ - -CGPT - 'W_1' / - 'W_2' / - 'W_3' / -/ - -CTFAC - 'W_1' / - 'W_2' / - 'W_3' / -/ - ----- Connection production rates -----CGFR -----'E-4AH' / -----/ -----CWFR -----'E-2H' / -----/ - -WUBHP -/ - - -SCHEDULE - -UDQ - UNITS WUBHP 'BARSA' / -/ - --- Three wells, two producers (so that we can form a group) and one injector -WELSPECS - 'W_1' 'G_1' 1 1 3.33 'OIL' 7* / - 'W_2' 'G_1' 2 1 3.33 'OIL' 7* / - 'W_3' 'G_2' 3 1 3.92 'WATER' 7* / - 'W_6' 'G_2' 8 8 3.92 'GAS' 7* / - 'W_5' 'G_3' 4 1 3.92 'OIL' 7* / -/ - --- Completion data. -COMPDAT --- Passing 0 to I/J means they'll get the well head I/J --- 'Well' I J K1 K2 STATUS SatTable TransFact Rw Kh S - W_1 0 0 1 1 2* 100 3* / -- Active index: 0 - W_2 0 0 1 1 2* 1* 5 20 0.5 / -- Active index: 1 - W_2 0 0 2 2 2* 1* 5 10 0.2 / -- Active index: 101 - W_3 0 0 1 1 2* 1* 2* 0.7 / -- Active index: 2 - W_6 0 0 2 2 2* 1* 2* 0.7 / -- Active index: 2 -/ - -WCONHIST --- history rates are set so that W_1 produces 1, W_2 produces 2 etc. --- index.offset. --- organised as oil-water-gas - W_1 SHUT ORAT 10.1 10 10.2 2* 0.2 0.1 / - W_2 SHUT ORAT 20.1 20 20.2 2* 1.2 1.1 / -/ - -WCONINJH --- Injection historical rates (water only, as we only support pure injectors) - W_3 WATER STOP 30.0 2.1 2.2 / -/ - -WPOLYMER -'W_3' 1.5 1.0 / -/ -WCONINJH --- Injection historical rates (water only, as we only support pure injectors) - W_6 GAS STOP 30000.0 / -/ - -WCONPROD - W_5 SHUT ORAT 0.0 0.0 0.0 1* 30.1 / -/ - -TSTEP --- register time steps (in days). This allows us to write *two* report steps (1 --- and 2. Without this, totals/accumulations would fail (segfault) when looking --- up historical rates and volumes. These volumes however don't change, i.e. --- every time step has the same set of values -10 / - -WPOLYMER -'W_3' 2.5 1.0 / -/ - -TSTEP -10 / - --- Register a fourth well with completions later. This ensure we handle when --- wells are registered or activated later in a simulation -WELSPECS - 'W_4' 'G_3' 1 1 3.33 'OIL' 7* / -/ - -COMPDAT - W_4 1 1 3 3 / -/ - -WPIMULT -W_1 0.5 / -/ - -TSTEP -10 / - -WPIMULT -W_1 0.5 / -/ - -TSTEP -10 / diff --git a/ThirdParty/custom-opm-common/opm-common/tests/summary_deck_non_constant_porosity.DATA b/ThirdParty/custom-opm-common/opm-common/tests/summary_deck_non_constant_porosity.DATA deleted file mode 100644 index 6eb61571a3..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/summary_deck_non_constant_porosity.DATA +++ /dev/null @@ -1,582 +0,0 @@ --- Synthetic test deck based on Norne. This data set is meant to be a simple, --- well-documented deck for the behaviour of SUMMARY specified output. Data --- is mostly entered to *traceable* and does not necessarily make sense from --- a simulation point of view. - -START -10 MAI 2007 / -RUNSPEC - -TITLE -SUMMARYTESTS - --- A simple 10x10x10 cube. Simple to reason about, large enough for all tests -DIMENS - 10 10 10 / - -REGDIMS - 3 / - -OIL -GAS -WATER - -WELLDIMS --- Item 1: NWMAX (Maximum number of wells in model) --- Item 2: NCWMAX (Maximum number of connections per well) --- Item 3: NGMAX (Maximum number of groups in model--excluding FIELD) --- Item 4: NWGMAX (Maximum number of wells or child groups per group) --- NWMAX NCWMAX NGMAX NWGMAX - 4 2 3 2 -/ - -GRID - -DX -1000*1 / -DY -1000*1 / -DZ -1000*1 / -TOPS -100*1 / - -ACTNUM - 1000*1/ - -PORO -500*0.1 500*0.2/ - -REGIONS - -FIPNUM - 400*1 - 200*2 - 400*3 / - - -SUMMARY -DATE -PERFORMA --- --- Field Data --- Production Rates -FVPR -FWPR -FWPRH -FOPR -FOPRH -FGPR -FGPRH -FLPR -FLPRH -FGSR -FGCR -FNPR -- solvent ---FTPRSEA --- Injection Rates -FVIR -FWIR -FWIRH -FGIR -FNIR -- solvent -FGIRH --- Production Cummulatives -FVPT -FWPT -FOPT -FLPT -FLPTH -FGPT -FNPT -FOPTH -FGPTH -FWPTH -FGST -FGCT --- Injection Cummulatives -FVIT -FWIT -FWITH -FGIT -FNIT -FGITH --- In place -FWIP -FOIP -FGIP --- Ratios -FWCT -FWCTH -FGOR -FGORH - --- From model2 -FMWPR -FMWIN -FOE - --- Pressures -FPR -FPRP - -BPR - 1 1 1 / - 1 1 2 / - 1 1 3 / - 1 1 4 / - 1 1 5 / - 1 1 6 / - 1 1 7 / - 1 1 8 / - 1 1 9 / - 1 1 10 / - 2 1 10 / -- This cell is not ACTIVE -/ - -BSGAS - 1 1 1 / -/ - - -BSWAT - 1 1 1 / -/ - - --- Region data -RPR -/ -ROPT -/ -RGPT -/ -RWPT -/ -RGFT -/ -RWFT -/ -ROIP -/ -ROP -/ -ROPR -/ -RGPR -/ -RWPR -/ -RGIR -/ -RGIT -/ -RWIR -/ -RWIT -/ -RWPT -/ -ROIPL -/ -ROIPG -/ -RGIP -/ -RGIPL -/ -RGIPG -/ -RWIP -/ -RPPO -/ - --- Group data -- -GPR -/ -GLPR -/ -GOPT -/ -GGPT -/ -GWPT -/ -GNPT -/ -GOPR -/ -GGPR -/ -GWPR -/ -GWPRH -/ -GGIR -/ -GNPR -/ - -GNIR -/ -GGIRH -/ -GGIT -/ -GNIT -/ -GGITH -/ -GWCT -/ -GWCTH -/ -GGOR -/ -GGORH -/ -GWIR -/ -GWIT -/ -GWIRH -/ -GWITH -/ -GOPRH -/ -GGPRH -/ -GLPRH -/ -GWPTH -/ -GOPTH -/ -GGPTH -/ -GLPTH -/ -GPRG -/ -GPRW -/ -GOPTF -/ -GOPTS -/ -GOPTH -/ -GOPRF -/ -GOPRS -/ -GOPRH -/ -GGPTF -/ -GGPTS -/ -GGPTH -/ -GGPTF -/ -GGPTS -/ -GGPTH -/ -GGLR -/ -GGLIR -/ -GGLRH -/ -GVPR -/ -GVPT -/ -GMCTP -/ -GOPP -/ -GVIR -/ -GVIT -/ -GVPRT -/ -GMWPR -/ -GMWIN -/ --- Well Data --- Production Rates -WWPR -/ -WWPRH -/ -WOPR -/ -WOPRH -/ -WGPR -/ -WNPR -/ -WGPRH -/ -WLPR -/ -WLPRH -/ - -WLPT -/ - -WLPTH -/ - --- Injection Rates -WWIR - W_3 -/ -WWIT - W_3 -/ -WWIRH - W_3 -/ -WWITH - W_3 -/ - -WGIT - W_3 -/ -WGIR - W_3 -/ -WGIRH - W_3 -/ -WGITH - W_3 -/ -WNIR - W_3 -/ -WNIT - W_3 -/ - --- Production Cummulatives -WWPT -/ -WWPTH -/ -WOPT -/ -WOPTH -/ -WGPT -/ -WGPTH -/ -WNPT -/ - --- Tracers ---WTPRSEA ---/ ---WTPTSEA ---/ --- Injection Cummulatives -WWIT - W_3 -/ --- Ratios -WWCT -/ -WWCTH -/ -WGOR -/ -WGORH -/ -WGLR -/ -WGLRH -/ - - --- Performance -WBHP -/ -WBHPH -/ -WTHP -/ -WTHPH -/ -WPI -/ -WBP -/ -WBP4 -/ - --- from model2 -WOPTF -/ -WOPTS -/ -WOPTH -/ -WOPRS -/ -WOPRF -/ -WGPTF -/ -WGPTS -/ -WGPRF -/ -WTPRS -/ -WGLIR -/ -WVPR -/ -WVPT -/ -WOPP -/ -WVIR -/ -WVIT -/ -WMCTL -/ - --- Water injection per connection -CWIR - * / -/ - --- Gas injection on 3 1 1 (45) -CGIR -'W_3' 3 1 1 / -/ - -CWIT -'W_3' / -/ - -CGIT -* / -/ - --- Production per connection --- Using all the different ways of specifying connections here --- as an informal test that we still get the data we want -CWPR - 'W_1' 1 1 1 / -/ - -COPR - 'W_1' / - 'W_2' / - 'W_3' / -/ - -CGPR - '*' / -/ - -CNFR - '*' / -/ - -CNPT - '*' / -/ - -CNIT - '*' / -/ - -CWPT - 'W_1' 1 1 1 / -/ - -COPT - 'W_1' / -/ - -CGPT - 'W_1' / - 'W_2' / - 'W_3' / -/ - ----- Connection production rates -----CGFR -----'E-4AH' / -----/ -----CWFR -----'E-2H' / -----/ - -SCHEDULE - --- Three wells, two producers (so that we can form a group) and one injector -WELSPECS - 'W_1' 'G_1' 1 1 3.33 'OIL' 7* / - 'W_2' 'G_1' 2 1 3.33 'OIL' 7* / - 'W_3' 'G_2' 3 1 3.92 'WATER' 7* / -/ - --- Completion data. -COMPDAT --- 'Well' I J K1 K2 --- Passing 0 to I/J means they'll get the well head I/J - W_1 0 0 1 1 / -- Active index: 0 - W_2 0 0 1 1 / -- Active index: 1 - W_2 0 0 2 2 / -- Active index: 101 - W_3 0 0 1 1 / -- Active index: 2 -/ - -WCONHIST --- history rates are set so that W_1 produces 1, W_2 produces 2 etc. --- index.offset. --- organised as oil-water-gas - W_1 SHUT ORAT 10.1 10 10.2 / - W_2 SHUT ORAT 20.1 20 20.2 / -/ - -WCONINJH --- Injection historical rates (water only, as we only support pure injectors) - W_3 WATER STOP 30.0 / -/ - -TSTEP --- register time steps (in days). This allows us to write *two* report steps (1 --- and 2. Without this, totals/accumulations would fail (segfault) when looking --- up historical rates and volumes. These volumes however don't change, i.e. --- every time step has the same set of values -10 10 / - --- Register a fourth well with completions later. This ensure we handle when --- wells are registered or activated later in a simulation -WELSPECS - 'W_4' 'G_3' 1 1 3.33 'OIL' 7* / -/ - -COMPDAT - W_4 1 1 3 3 / -/ - -TSTEP -10 10 / diff --git a/ThirdParty/custom-opm-common/opm-common/tests/table_deck.DATA b/ThirdParty/custom-opm-common/opm-common/tests/table_deck.DATA deleted file mode 100644 index 45deeec40c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/table_deck.DATA +++ /dev/null @@ -1,81 +0,0 @@ -RUNSPEC - -TITLE - SIMPLE TEST - -DIMENS - 10 10 10 / - -OIL - -WATER - -GAS - -DISGAS - -VAPOIL - -METRIC - -EQLDIMS - 1 100 2 1 1 / - -TABDIMS - 1 1 33 60 16 60 / - - -GRID - -DX -1000*1 / - -DY -1000*1 / - -DZ -1000*1 / - -TOPS -100*1 / - -PORO -1000*0.2 / - -PROPS =============================================================== -PVTO - --- RSO PRESSURE B-OIL VISCOSITY --- (BAR) (CP) - - 20.59 50.00 1.10615 1.180 - 75.00 1.10164 1.247 - 100.00 1.09744 1.315 - 125.00 1.09351 1.384 - 150.00 1.08984 1.453 / - - 28.19 70.00 1.12522 1.066 - 95.00 1.12047 1.124 - 120.00 1.11604 1.182 - 170.00 1.10804 1.300 / -/ - - - -PVTG --- - 20.00 0.00002448 0.061895 0.01299 - 0.00001224 0.061810 0.01300 - 0.00000000 0.061725 0.01300 / - 40.00 0.00000628 0.030252 0.01383 - 0.00000314 0.030249 0.01383 - 0.00000000 0.030245 0.01383 / -/ - - -PVTW - 247.7 1.03665 0.41726E-04 0.29120 0.99835E-04 / - - -DENSITY - 859.5 1033.0 0.854 / diff --git a/ThirdParty/custom-opm-common/opm-common/tests/test_ActiveGridCells.cpp b/ThirdParty/custom-opm-common/opm-common/tests/test_ActiveGridCells.cpp deleted file mode 100644 index fbf1935e7e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/test_ActiveGridCells.cpp +++ /dev/null @@ -1,88 +0,0 @@ -/* - Copyright 2019 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include "config.h" - -#define BOOST_TEST_MODULE ActiveGridCells -#include - -#include -#include - -BOOST_AUTO_TEST_SUITE(Default) - -BOOST_AUTO_TEST_CASE(testLocal) { - std::size_t nx=2, ny = 3, nz=2; - Opm::GridDims dims(nx, ny, nz); - std::vector cells(9); - std::set > inactive; - inactive.insert({{0,0,0}}); - inactive.insert({{1,1,0}}); - inactive.insert({{1,0,1}}); - - for(std::size_t k = 0, index = 0; k < nz; ++k) - { - for(std::size_t j = 0; j < ny; ++j) - { - for(std::size_t i = 0; i < nx; ++i) - { - if ( inactive.find({{i,j,k}})==inactive.end()) - { - cells[index++] = dims.getGlobalIndex(i,j,k); - } - } - } - } - - Opm::ActiveGridCells active(nx, ny, nz, cells.data(), cells.size()); - - const auto& actnum = active.actNum(); - - for(std::size_t k = 0, index = 0; k < nz; ++k) - { - for(std::size_t j = 0; j < ny; ++j) - { - for(std::size_t i = 0; i < nx; ++i) - { - auto cartIndex = dims.getGlobalIndex(i,j,k); - - if ( inactive.find({{i,j,k}})!=inactive.end()) - { - BOOST_CHECK(actnum[cartIndex] == 0); - BOOST_CHECK(active.localCell(cartIndex) == -1); - BOOST_CHECK(active.localCell(i,j,k) == -1); - BOOST_CHECK(!active.cellActive(cartIndex)); - BOOST_CHECK(!active.cellActive(i, j, k)); - } - else - { - BOOST_CHECK(actnum[cartIndex] == 1); - BOOST_CHECK(active.localCell(cartIndex) == (int)index); - BOOST_CHECK(active.localCell(i,j,k) == (int)index); - BOOST_CHECK(active.cellActive(cartIndex)); - BOOST_CHECK(active.cellActive(i, j, k)); - ++index; - } - } - } - } -} - - -BOOST_AUTO_TEST_SUITE_END() diff --git a/ThirdParty/custom-opm-common/opm-common/tests/test_AggregateActionxData.cpp b/ThirdParty/custom-opm-common/opm-common/tests/test_AggregateActionxData.cpp deleted file mode 100644 index 25248e4d5e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/test_AggregateActionxData.cpp +++ /dev/null @@ -1,553 +0,0 @@ -#define BOOST_TEST_MODULE UDQ-ACTIONX_Data - -#include - -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -#include -#include -#include - -#include -#include -#include -#include -#include - -#include -#include - -#include - -#include -#include -#include -#include -#include -#include - -namespace { - - Opm::Deck first_sim(std::string fname) { - return Opm::Parser{}.parseFile(fname); - } -} - -Opm::SummaryState sum_state_TEST1() - { - auto state = Opm::SummaryState{std::chrono::system_clock::now()}; - state.update_well_var("OPU01", "WWPR", 21.); - state.update_well_var("OPU02", "WWPR", 22.); - state.update_well_var("OPL01", "WWPR", 23.); - state.update_well_var("OPL02", "WWPR", 24.); - - state.update_well_var("OPU01", "WGPR", 230.); - state.update_well_var("OPU02", "WGPR", 231.); - state.update_well_var("OPL01", "WGPR", 232.); - state.update_well_var("OPL02", "WGPR", 233.); - - state.update_group_var("UPPER", "GWPR", 36.); - state.update_group_var("LOWER", "GWPR", 37.); - state.update_group_var("TEST", "GWPR", 73.); - - state.update_group_var("UPPER", "GGPR", 460.); - state.update_group_var("LOWER", "GGPR", 461.); - state.update_group_var("TEST", "GGPR", 821.); - - - state.update_group_var("TEST", "GMWPR", 4); - - state.update("FWPR", 73.); - - state.update("FMWPR", 4); - - - return state; -} - -//int main(int argc, char* argv[]) -struct SimulationCase -{ - explicit SimulationCase(const Opm::Deck& deck) - : es { deck } - , grid { deck } - , python{ std::make_shared() } - , sched{ deck, es, python } - {} - - // Order requirement: 'es' must be declared/initialised before 'sched'. - Opm::EclipseState es; - Opm::EclipseGrid grid; - std::shared_ptr python; - Opm::Schedule sched; - -}; - -BOOST_AUTO_TEST_SUITE(Aggregate_Actionx) - - - -// test constructed UDQ-Actionx restart data -BOOST_AUTO_TEST_CASE (Declared_Actionx_data) -{ - const auto simCase = SimulationCase{first_sim("UDQ_ACTIONX_TEST1.DATA")}; - - Opm::EclipseState es = simCase.es; - Opm::Runspec rspec = es.runspec(); - Opm::SummaryState st = sum_state_TEST1(); - Opm::Schedule sched = simCase.sched; - Opm::EclipseGrid grid = simCase.grid; - const auto& ioConfig = es.getIOConfig(); - //const auto& restart = es.cfg().restart(); - - - // Report Step 1: 2008-10-10 --> 2011-01-20 - const auto rptStep = std::size_t{1}; - std::string outputDir = "./"; - std::string baseName = "UDQ_ACTIONX_TEST1"; - Opm::EclIO::OutputStream::Restart rstFile { - Opm::EclIO::OutputStream::ResultSet { outputDir, baseName }, - rptStep, - Opm::EclIO::OutputStream::Formatted { ioConfig.getFMTOUT() }, - Opm::EclIO::OutputStream::Unified { ioConfig.getUNIFOUT() } - }; - - double secs_elapsed = 3.1536E07; - const auto ih = Opm::RestartIO::Helpers:: - createInteHead(es, grid, sched, secs_elapsed, - rptStep, rptStep, rptStep); - - //set dummy value for next_step_size - const double next_step_size= 0.1; - const auto dh = Opm::RestartIO::Helpers::createDoubHead(es, sched, rptStep, - secs_elapsed, next_step_size); - - const auto udqDims = Opm::RestartIO::Helpers::createUdqDims(sched, rptStep, ih); - auto udqData = Opm::RestartIO::Helpers::AggregateUDQData(udqDims); - udqData.captureDeclaredUDQData(sched, rptStep, st, ih); - - const auto actDims = Opm::RestartIO::Helpers::createActionxDims(rspec, sched, rptStep); - auto actionxData = Opm::RestartIO::Helpers::AggregateActionxData(actDims); - actionxData.captureDeclaredActionxData(sched, st, actDims, rptStep); - - { - /* - Check of InteHEAD and DoubHEAD data for UDQ variables - - INTEHEAD - - Intehead[156] - The number of ACTIONS - Intehead[157] - The max number of lines of schedule data including ENDACTIO keyword for any ACTION - - ---------------------------------------------------------------------------------------------------------------------] - - */ - const auto rptStep_1 = std::size_t{0}; - const auto ih_1 = Opm::RestartIO::Helpers::createInteHead(es, grid, sched, - secs_elapsed, rptStep, rptStep_1 + 1, rptStep_1); - - BOOST_CHECK_EQUAL(ih_1[156] , 2); - BOOST_CHECK_EQUAL(ih_1[157] , 7); - - - const auto rptStep_2 = std::size_t{1}; - const auto ih_2 = Opm::RestartIO::Helpers::createInteHead(es, grid, sched, - secs_elapsed, rptStep, rptStep_2 + 1, rptStep_2); - BOOST_CHECK_EQUAL(ih_2[156] , 3); - BOOST_CHECK_EQUAL(ih_2[157] , 10); - - const auto rptStep_3 = std::size_t{2}; - const auto ih_3 = Opm::RestartIO::Helpers::createInteHead(es, grid, sched, - secs_elapsed, rptStep, rptStep_3 + 1, rptStep_3); - - BOOST_CHECK_EQUAL(ih_3[156] , 3); - BOOST_CHECK_EQUAL(ih_3[157] , 10); - - } - - { - /* - IACT - --length is equal to 9*the number of ACTIONX keywords - //item [0]: is unknown, (=0) - //item [1]: The number of lines of schedule data including ENDACTIO - //item [2]: is unknown, (=1) - //item [3]: is unknown, (=7) - //item [4]: is unknown, (=0) - //item [5]: The number of times the action is triggered - //item [6]: is unknown, (=0) - //item [7]: is unknown, (=0) - //item [8]: The number of times the action is triggered - */ - - - const auto& iAct = actionxData.getIACT(); - - auto start = 0*actDims[1]; - BOOST_CHECK_EQUAL(iAct[start + 0] , 0); - BOOST_CHECK_EQUAL(iAct[start + 1] , 10); - BOOST_CHECK_EQUAL(iAct[start + 2] , 1); - BOOST_CHECK_EQUAL(iAct[start + 3] , 7); - BOOST_CHECK_EQUAL(iAct[start + 4] , 0); - BOOST_CHECK_EQUAL(iAct[start + 5] , 10); - BOOST_CHECK_EQUAL(iAct[start + 6] , 0); - BOOST_CHECK_EQUAL(iAct[start + 7] , 0); - BOOST_CHECK_EQUAL(iAct[start + 8] , 3); - - - start = 1*actDims[1]; - BOOST_CHECK_EQUAL(iAct[start + 0] , 0); - BOOST_CHECK_EQUAL(iAct[start + 1] , 7); - BOOST_CHECK_EQUAL(iAct[start + 2] , 1); - BOOST_CHECK_EQUAL(iAct[start + 3] , 7); - BOOST_CHECK_EQUAL(iAct[start + 4] , 0); - BOOST_CHECK_EQUAL(iAct[start + 5] , 11); - BOOST_CHECK_EQUAL(iAct[start + 6] , 0); - BOOST_CHECK_EQUAL(iAct[start + 7] , 0); - BOOST_CHECK_EQUAL(iAct[start + 8] , 3); - - start = 2*actDims[1]; - BOOST_CHECK_EQUAL(iAct[start + 0] , 0); - BOOST_CHECK_EQUAL(iAct[start + 1] , 4); - BOOST_CHECK_EQUAL(iAct[start + 2] , 1); - BOOST_CHECK_EQUAL(iAct[start + 3] , 7); - BOOST_CHECK_EQUAL(iAct[start + 4] , 0); - BOOST_CHECK_EQUAL(iAct[start + 5] , 13); - BOOST_CHECK_EQUAL(iAct[start + 6] , 0); - BOOST_CHECK_EQUAL(iAct[start + 7] , 0); - BOOST_CHECK_EQUAL(iAct[start + 8] , 3); - - } - - { - /* - ZACT - --length 4 times 8-chars pr ACTIONX keyword - - Name of action 4 times 8 chars (up to 8 chars for name) - - */ - - const auto& zAct = actionxData.getZACT(); - - auto start = 0*actDims[3]; - BOOST_CHECK_EQUAL(zAct[start + 0].c_str() , "ACT01 "); - - start = 1*actDims[3]; - BOOST_CHECK_EQUAL(zAct[start + 0].c_str() , "ACT02 "); - - start = 2*actDims[3]; - BOOST_CHECK_EQUAL(zAct[start + 0].c_str() , "ACT03 "); - - } - - { - /* - ZLACT - -- length = ACTDIMS_item3*(max-over-action of number of lines of data pr ACTION) - - */ - - const auto& zLact = actionxData.getZLACT(); - - //First action - auto start_a = 0*actDims[4]; - auto start = start_a + 0*actDims[8]; - BOOST_CHECK_EQUAL(zLact[start + 0].c_str() , "WELOPEN "); - - start = start_a + 1*actDims[8]; - BOOST_CHECK_EQUAL(zLact[start + 0].c_str() , " '?' '"); - BOOST_CHECK_EQUAL(zLact[start + 1].c_str() , "SHUT' 0 "); - BOOST_CHECK_EQUAL(zLact[start + 2].c_str() , "0 0 / "); - - start = start_a + 2*actDims[8]; - BOOST_CHECK_EQUAL(zLact[start + 0].c_str() , "/ "); - - start = start_a + 3*actDims[8]; - BOOST_CHECK_EQUAL(zLact[start + 0].c_str() , "WELOPEN "); - - //Second action - start_a = 1*actDims[4]; - start = start_a + 0*actDims[8]; - BOOST_CHECK_EQUAL(zLact[start + 0].c_str() , "WELOPEN "); - - start = start_a + 1*actDims[8]; - BOOST_CHECK_EQUAL(zLact[start + 0].c_str() , " '?' '"); - BOOST_CHECK_EQUAL(zLact[start + 1].c_str() , "SHUT' 0 "); - BOOST_CHECK_EQUAL(zLact[start + 2].c_str() , "0 0 / "); - - start = start_a + 2*actDims[8]; - BOOST_CHECK_EQUAL(zLact[start + 0].c_str() , "/ "); - - start = start_a + 3*actDims[8]; - BOOST_CHECK_EQUAL(zLact[start + 0].c_str() , "WELOPEN "); - - start = start_a + 4*actDims[8]; - BOOST_CHECK_EQUAL(zLact[start + 0].c_str() , " 'OPL0"); - BOOST_CHECK_EQUAL(zLact[start + 1].c_str() , "1' 'OPEN"); - BOOST_CHECK_EQUAL(zLact[start + 2].c_str() , "' / "); - - start = start_a + 5*actDims[8]; - BOOST_CHECK_EQUAL(zLact[start + 0].c_str() , "/ "); - - - start = start_a + 6*actDims[8]; - BOOST_CHECK_EQUAL(zLact[start + 0].c_str() , "ENDACTIO"); - - - } - - { - /* - ZACN - //(Max number of conditions pr ACTIONX) * ((max no characters pr line = 104) / (8 - characters pr string)(104/8 = 13) - - */ - - const auto& zAcn = actionxData.getZACN(); - - //First action - auto start_a = 0*actDims[5]; - auto start = start_a + 0*13; - BOOST_CHECK_EQUAL(zAcn[start + 0].c_str() , "FMWPR "); - BOOST_CHECK_EQUAL(zAcn[start + 1].c_str() , " "); - BOOST_CHECK_EQUAL(zAcn[start + 2].c_str() , "> "); - BOOST_CHECK_EQUAL(zAcn[start + 3].c_str() , " "); - - start = start_a + 1*13; - BOOST_CHECK_EQUAL(zAcn[start + 0].c_str() , "WUPR3 "); - BOOST_CHECK_EQUAL(zAcn[start + 1].c_str() , " "); - BOOST_CHECK_EQUAL(zAcn[start + 2].c_str() , "> "); - BOOST_CHECK_EQUAL(zAcn[start + 3].c_str() , "OP* "); - BOOST_CHECK_EQUAL(zAcn[start + 4].c_str() , " "); - BOOST_CHECK_EQUAL(zAcn[start + 5].c_str() , " "); - - start = start_a + 2*13; - BOOST_CHECK_EQUAL(zAcn[start + 0].c_str() , " "); - BOOST_CHECK_EQUAL(zAcn[start + 1].c_str() , " "); - BOOST_CHECK_EQUAL(zAcn[start + 2].c_str() , "> "); - BOOST_CHECK_EQUAL(zAcn[start + 3].c_str() , " "); - BOOST_CHECK_EQUAL(zAcn[start + 4].c_str() , " "); - - - - //Second action - start_a = 1*actDims[5]; - start = start_a + 0*13; - BOOST_CHECK_EQUAL(zAcn[start + 0].c_str() , "FMWPR "); - BOOST_CHECK_EQUAL(zAcn[start + 1].c_str() , " "); - BOOST_CHECK_EQUAL(zAcn[start + 2].c_str() , "> "); - BOOST_CHECK_EQUAL(zAcn[start + 3].c_str() , " "); - - start = start_a + 1*13; - BOOST_CHECK_EQUAL(zAcn[start + 0].c_str() , "WGPR "); - BOOST_CHECK_EQUAL(zAcn[start + 1].c_str() , "GGPR "); - BOOST_CHECK_EQUAL(zAcn[start + 2].c_str() , "> "); - BOOST_CHECK_EQUAL(zAcn[start + 3].c_str() , "OPL02 "); - BOOST_CHECK_EQUAL(zAcn[start + 4].c_str() , " "); - BOOST_CHECK_EQUAL(zAcn[start + 5].c_str() , " "); - BOOST_CHECK_EQUAL(zAcn[start + 6].c_str() , "LOWER "); - - start = start_a + 2*13; - BOOST_CHECK_EQUAL(zAcn[start + 0].c_str() , " "); - BOOST_CHECK_EQUAL(zAcn[start + 1].c_str() , " "); - BOOST_CHECK_EQUAL(zAcn[start + 2].c_str() , "> "); - BOOST_CHECK_EQUAL(zAcn[start + 3].c_str() , " "); - BOOST_CHECK_EQUAL(zAcn[start + 4].c_str() , " "); - } - - { - /* - IACN - 26*Max number of conditions pr ACTIONX - - */ - - - const auto& iAcn = actionxData.getIACN(); - - auto start_a = 0*actDims[6]; - auto start = start_a + 0*26; - BOOST_CHECK_EQUAL(iAcn[start + 0] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 1] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 2] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 3] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 4] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 5] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 6] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 7] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 8] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 9] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 10] , 1); - BOOST_CHECK_EQUAL(iAcn[start + 11] , 8); - BOOST_CHECK_EQUAL(iAcn[start + 12] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 13] , 1); - BOOST_CHECK_EQUAL(iAcn[start + 14] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 15] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 16] , 1); - BOOST_CHECK_EQUAL(iAcn[start + 17] , 0); - - start = start_a + 1*26; - BOOST_CHECK_EQUAL(iAcn[start + 0] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 1] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 2] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 3] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 4] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 5] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 6] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 7] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 8] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 9] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 10] , 2); - BOOST_CHECK_EQUAL(iAcn[start + 11] , 8); - BOOST_CHECK_EQUAL(iAcn[start + 12] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 13] , 2); - BOOST_CHECK_EQUAL(iAcn[start + 14] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 15] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 16] , 1); - BOOST_CHECK_EQUAL(iAcn[start + 17] , 0); - - start_a = 1*actDims[6]; - start = start_a + 0*26; - BOOST_CHECK_EQUAL(iAcn[start + 0] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 1] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 2] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 3] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 4] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 5] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 6] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 7] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 8] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 9] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 10] , 1); - BOOST_CHECK_EQUAL(iAcn[start + 11] , 8); - BOOST_CHECK_EQUAL(iAcn[start + 12] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 13] , 1); - BOOST_CHECK_EQUAL(iAcn[start + 14] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 15] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 16] , 1); - BOOST_CHECK_EQUAL(iAcn[start + 17] , 0); - - start = start_a + 1*26; - BOOST_CHECK_EQUAL(iAcn[start + 0] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 1] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 2] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 3] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 4] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 5] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 6] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 7] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 8] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 9] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 10] , 2); - BOOST_CHECK_EQUAL(iAcn[start + 11] , 3); - BOOST_CHECK_EQUAL(iAcn[start + 12] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 13] , 1); - BOOST_CHECK_EQUAL(iAcn[start + 14] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 15] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 16] , 1); - BOOST_CHECK_EQUAL(iAcn[start + 17] , 0); - - start = start_a + 2*26; - BOOST_CHECK_EQUAL(iAcn[start + 0] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 1] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 2] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 3] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 4] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 5] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 6] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 7] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 8] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 9] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 10] , 11); - BOOST_CHECK_EQUAL(iAcn[start + 11] , 8); - BOOST_CHECK_EQUAL(iAcn[start + 12] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 13] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 14] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 15] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 16] , 1); - BOOST_CHECK_EQUAL(iAcn[start + 17] , 1); - - } - - - - { - /* - SACN - 26*Max number of conditions pr ACTIONX - - */ - - - const auto& sAcn = actionxData.getSACN(); - - auto start_a = 0*actDims[6]; - auto start = start_a + 0*16; - BOOST_CHECK_EQUAL(sAcn[start + 0] , 0); - BOOST_CHECK_EQUAL(sAcn[start + 1] , 0); - BOOST_CHECK_EQUAL(sAcn[start + 2] , 45); - BOOST_CHECK_EQUAL(sAcn[start + 3] , 0); - BOOST_CHECK_EQUAL(sAcn[start + 4] , 4); - BOOST_CHECK_EQUAL(sAcn[start + 5] , 45); - BOOST_CHECK_EQUAL(sAcn[start + 6] , 4); - BOOST_CHECK_EQUAL(sAcn[start + 7] , 45); - BOOST_CHECK_EQUAL(sAcn[start + 8] , 4); - BOOST_CHECK_EQUAL(sAcn[start + 9] , 45); - BOOST_CHECK_EQUAL(sAcn[start + 10] , 0); - BOOST_CHECK_EQUAL(sAcn[start + 11] , 0); - BOOST_CHECK_EQUAL(sAcn[start + 12] , 0); - BOOST_CHECK_EQUAL(sAcn[start + 13] , 0); - BOOST_CHECK_EQUAL(sAcn[start + 14] , 0); - BOOST_CHECK_EQUAL(sAcn[start + 15] , 0); - - start = start_a + 1*16; - BOOST_CHECK_EQUAL(sAcn[start + 0] , 0); - BOOST_CHECK_EQUAL(sAcn[start + 1] , 0); - BOOST_CHECK_EQUAL(sAcn[start + 2] , 46); - BOOST_CHECK_EQUAL(sAcn[start + 3] , 0); - BOOST_CHECK_EQUAL(sAcn[start + 4] , 0); - BOOST_CHECK_EQUAL(sAcn[start + 5] , 46); - BOOST_CHECK_EQUAL(sAcn[start + 6] , 0); - BOOST_CHECK_EQUAL(sAcn[start + 7] , 46); - BOOST_CHECK_EQUAL(sAcn[start + 8] , 0); - BOOST_CHECK_EQUAL(sAcn[start + 9] , 46); - BOOST_CHECK_EQUAL(sAcn[start + 10] , 0); - BOOST_CHECK_EQUAL(sAcn[start + 11] , 0); - BOOST_CHECK_EQUAL(sAcn[start + 12] , 0); - BOOST_CHECK_EQUAL(sAcn[start + 13] , 0); - BOOST_CHECK_EQUAL(sAcn[start + 14] , 0); - BOOST_CHECK_EQUAL(sAcn[start + 15] , 0); - - start = start_a + 2*16; - BOOST_CHECK_EQUAL(sAcn[start + 0] , 0); - BOOST_CHECK_EQUAL(sAcn[start + 1] , 0); - BOOST_CHECK_EQUAL(sAcn[start + 2] , 10); - BOOST_CHECK_EQUAL(sAcn[start + 3] , 0); - BOOST_CHECK_EQUAL(sAcn[start + 4] , 1.E+20); - BOOST_CHECK_EQUAL(sAcn[start + 5] , 1.E+20); - BOOST_CHECK_EQUAL(sAcn[start + 6] , 1.E+20); - BOOST_CHECK_EQUAL(sAcn[start + 7] , 1.E+20); - BOOST_CHECK_EQUAL(sAcn[start + 8] , 1.E+20); - BOOST_CHECK_EQUAL(sAcn[start + 9] , 1.E+20); - BOOST_CHECK_EQUAL(sAcn[start + 10] , 0); - BOOST_CHECK_EQUAL(sAcn[start + 11] , 0); - BOOST_CHECK_EQUAL(sAcn[start + 12] , 0); - BOOST_CHECK_EQUAL(sAcn[start + 13] , 0); - BOOST_CHECK_EQUAL(sAcn[start + 14] , 0); - BOOST_CHECK_EQUAL(sAcn[start + 15] , 0); - - } - -} - -BOOST_AUTO_TEST_SUITE_END() diff --git a/ThirdParty/custom-opm-common/opm-common/tests/test_AggregateActionxData_2.cpp b/ThirdParty/custom-opm-common/opm-common/tests/test_AggregateActionxData_2.cpp deleted file mode 100644 index 848032f59e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/test_AggregateActionxData_2.cpp +++ /dev/null @@ -1,564 +0,0 @@ -#define BOOST_TEST_MODULE UDQ-ACTIONX_Data - -#include - -#include -#include -#include -#include -#include - -#include -#include -#include - -#include -#include -#include - -#include -#include -#include -#include -#include - -#include -#include - -#include - -#include -#include -#include -#include -#include -#include - -namespace { - - Opm::Deck first_sim(std::string fname) { - return Opm::Parser{}.parseFile(fname); - } -} - -Opm::SummaryState sum_state_TEST1() - { - auto state = Opm::SummaryState{std::chrono::system_clock::now()}; - state.update_well_var("OPU01", "WWPR", 21.); - state.update_well_var("OPU02", "WWPR", 22.); - state.update_well_var("OPL01", "WWPR", 23.); - state.update_well_var("OPL02", "WWPR", 24.); - - state.update_well_var("OPU01", "WGPR", 230.); - state.update_well_var("OPU02", "WGPR", 231.); - state.update_well_var("OPL01", "WGPR", 232.); - state.update_well_var("OPL02", "WGPR", 233.); - - state.update_group_var("UPPER", "GWPR", 36.); - state.update_group_var("LOWER", "GWPR", 37.); - state.update_group_var("TEST", "GWPR", 73.); - - state.update_group_var("UPPER", "GGPR", 460.); - state.update_group_var("LOWER", "GGPR", 461.); - state.update_group_var("TEST", "GGPR", 821.); - - - state.update_group_var("TEST", "GMWPR", 4); - - state.update("FWPR", 73.); - - state.update("FMWPR", 4); - - - return state; -} - -//int main(int argc, char* argv[]) -struct SimulationCase -{ - explicit SimulationCase(const Opm::Deck& deck) - : es { deck } - , grid { deck } - , sched{ deck, es } - {} - - // Order requirement: 'es' must be declared/initialised before 'sched'. - Opm::EclipseState es; - Opm::EclipseGrid grid; - Opm::Schedule sched; - -}; - -BOOST_AUTO_TEST_SUITE(Aggregate_Actionx) - - - -// test constructed UDQ-Actionx restart data -BOOST_AUTO_TEST_CASE (Declared_Actionx_data) -{ - const auto simCase = SimulationCase{first_sim("UDQ_ACTIONX_TEST1.DATA")}; - - Opm::EclipseState es = simCase.es; - Opm::Runspec rspec = es.runspec(); - Opm::SummaryState st = sum_state_TEST1(); - Opm::Schedule sched = simCase.sched; - Opm::EclipseGrid grid = simCase.grid; - const auto& ioConfig = es.getIOConfig(); - //const auto& restart = es.cfg().restart(); - - - // Report Step 1: 2008-10-10 --> 2011-01-20 - const auto rptStep = std::size_t{1}; - std::string outputDir = "./"; - std::string baseName = "UDQ_ACTIONX_TEST1"; - Opm::EclIO::OutputStream::Restart rstFile { - Opm::EclIO::OutputStream::ResultSet { outputDir, baseName }, - rptStep, - Opm::EclIO::OutputStream::Formatted { ioConfig.getFMTOUT() }, - Opm::EclIO::OutputStream::Unified { ioConfig.getUNIFOUT() } - }; - - double secs_elapsed = 3.1536E07; - const auto ih = Opm::RestartIO::Helpers::createInteHead(es, grid, sched, - secs_elapsed, rptStep, rptStep); - //set dummy value for next_step_size - const double next_step_size= 0.1; - const auto dh = Opm::RestartIO::Helpers::createDoubHead(es, sched, rptStep, - secs_elapsed, next_step_size); - - const auto udqDims = Opm::RestartIO::Helpers::createUdqDims(sched, rptStep, ih); - auto udqData = Opm::RestartIO::Helpers::AggregateUDQData(udqDims); - udqData.captureDeclaredUDQData(sched, rptStep, st, ih); - - const auto actDims = Opm::RestartIO::Helpers::createActionxDims(rspec, sched, rptStep); - auto actionxData = Opm::RestartIO::Helpers::AggregateActionxData(actDims); - actionxData.captureDeclaredActionxData(sched, st, actDims, rptStep); - - /*rstFile.write("INTEHEAD", ih); - rstFile.write("IUDQ", udqData.getIUDQ()); - rstFile.write("IUAD", udqData.getIUAD()); - rstFile.write("IGPH", udqData.getIGPH()); - rstFile.write("IUAP", udqData.getIUAP()); - rstFile.write("ZUDN", udqData.getZUDN()); - rstFile.write("ZUDL", udqData.getZUDL()); - - rstFile.write("IACT", actionxData.getIACT()); - rstFile.write("SACT", actionxData.getSACT()); - rstFile.write("ZACT", actionxData.getZACT()); - rstFile.write("ZLACT", actionxData.getZLACT()); - rstFile.write("ZACN", actionxData.getZACN()); - rstFile.write("IACN", actionxData.getIACN()); - rstFile.write("SACN", actionxData.getSACN()); */ - - { - /* - Check of InteHEAD and DoubHEAD data for UDQ variables - - INTEHEAD - - Intehead[156] - The number of ACTIONS - Intehead[157] - The max number of lines of schedule data including ENDACTIO keyword for any ACTION - - ---------------------------------------------------------------------------------------------------------------------] - - */ - const auto rptStep_1 = std::size_t{0}; - const auto ih_1 = Opm::RestartIO::Helpers::createInteHead(es, grid, sched, - secs_elapsed, rptStep, rptStep_1); - - BOOST_CHECK_EQUAL(ih_1[156] , 2); - BOOST_CHECK_EQUAL(ih_1[157] , 7); - - - const auto rptStep_2 = std::size_t{1}; - const auto ih_2 = Opm::RestartIO::Helpers::createInteHead(es, grid, sched, - secs_elapsed, rptStep, rptStep_2); - BOOST_CHECK_EQUAL(ih_2[156] , 3); - BOOST_CHECK_EQUAL(ih_2[157] , 7); - - const auto rptStep_3 = std::size_t{2}; - const auto ih_3 = Opm::RestartIO::Helpers::createInteHead(es, grid, sched, - secs_elapsed, rptStep, rptStep_3); - - BOOST_CHECK_EQUAL(ih_3[156] , 3); - BOOST_CHECK_EQUAL(ih_3[157] , 10); - - } - - { - /* - IACT - --length is equal to 9*the number of ACTIONX keywords - //item [0]: is unknown, (=0) - //item [1]: The number of lines of schedule data including ENDACTIO - //item [2]: is unknown, (=1) - //item [3]: is unknown, (=7) - //item [4]: is unknown, (=0) - //item [5]: The number of times the action is triggered - //item [6]: is unknown, (=0) - //item [7]: is unknown, (=0) - //item [8]: The number of times the action is triggered - */ - - - const auto& iAct = actionxData.getIACT(); - - auto start = 0*actDims[1]; - BOOST_CHECK_EQUAL(iAct[start + 0] , 0); - BOOST_CHECK_EQUAL(iAct[start + 1] , 4); - BOOST_CHECK_EQUAL(iAct[start + 2] , 1); - BOOST_CHECK_EQUAL(iAct[start + 3] , 7); - BOOST_CHECK_EQUAL(iAct[start + 4] , 0); - BOOST_CHECK_EQUAL(iAct[start + 5] , 10); - BOOST_CHECK_EQUAL(iAct[start + 6] , 0); - BOOST_CHECK_EQUAL(iAct[start + 7] , 0); - BOOST_CHECK_EQUAL(iAct[start + 8] , 3); - - - start = 1*actDims[1]; - BOOST_CHECK_EQUAL(iAct[start + 0] , 0); - BOOST_CHECK_EQUAL(iAct[start + 1] , 7); - BOOST_CHECK_EQUAL(iAct[start + 2] , 1); - BOOST_CHECK_EQUAL(iAct[start + 3] , 7); - BOOST_CHECK_EQUAL(iAct[start + 4] , 0); - BOOST_CHECK_EQUAL(iAct[start + 5] , 11); - BOOST_CHECK_EQUAL(iAct[start + 6] , 0); - BOOST_CHECK_EQUAL(iAct[start + 7] , 0); - BOOST_CHECK_EQUAL(iAct[start + 8] , 3); - - start = 2*actDims[1]; - BOOST_CHECK_EQUAL(iAct[start + 0] , 0); - BOOST_CHECK_EQUAL(iAct[start + 1] , 4); - BOOST_CHECK_EQUAL(iAct[start + 2] , 1); - BOOST_CHECK_EQUAL(iAct[start + 3] , 7); - BOOST_CHECK_EQUAL(iAct[start + 4] , 0); - BOOST_CHECK_EQUAL(iAct[start + 5] , 13); - BOOST_CHECK_EQUAL(iAct[start + 6] , 0); - BOOST_CHECK_EQUAL(iAct[start + 7] , 0); - BOOST_CHECK_EQUAL(iAct[start + 8] , 3); - - } - - { - /* - ZACT - --length 4 times 8-chars pr ACTIONX keyword - - Name of action 4 times 8 chars (up to 8 chars for name) - - */ - - const auto& zAct = actionxData.getZACT(); - - auto start = 0*actDims[3]; - BOOST_CHECK_EQUAL(zAct[start + 0].c_str() , "ACT01 "); - - start = 1*actDims[3]; - BOOST_CHECK_EQUAL(zAct[start + 0].c_str() , "ACT02 "); - - start = 2*actDims[3]; - BOOST_CHECK_EQUAL(zAct[start + 0].c_str() , "ACT03 "); - - } - - { - /* - ZLACT - -- length = ACTDIMS_item3*(max-over-action of number of lines of data pr ACTION) - - */ - - const auto& zLact = actionxData.getZLACT(); - - //First action - auto start_a = 0*actDims[4]; - auto start = start_a + 0*actDims[8]; - BOOST_CHECK_EQUAL(zLact[start + 0].c_str() , "WELOPEN "); - - start = start_a + 1*actDims[8]; - BOOST_CHECK_EQUAL(zLact[start + 0].c_str() , " '?' '"); - BOOST_CHECK_EQUAL(zLact[start + 1].c_str() , "SHUT' 0 "); - BOOST_CHECK_EQUAL(zLact[start + 2].c_str() , "0 0 / "); - - start = start_a + 2*actDims[8]; - BOOST_CHECK_EQUAL(zLact[start + 0].c_str() , "/ "); - - start = start_a + 3*actDims[8]; - BOOST_CHECK_EQUAL(zLact[start + 0].c_str() , "ENDACTIO"); - - //Second action - start_a = 1*actDims[4]; - start = start_a + 0*actDims[8]; - BOOST_CHECK_EQUAL(zLact[start + 0].c_str() , "WELOPEN "); - - start = start_a + 1*actDims[8]; - BOOST_CHECK_EQUAL(zLact[start + 0].c_str() , " '?' '"); - BOOST_CHECK_EQUAL(zLact[start + 1].c_str() , "SHUT' 0 "); - BOOST_CHECK_EQUAL(zLact[start + 2].c_str() , "0 0 / "); - - start = start_a + 2*actDims[8]; - BOOST_CHECK_EQUAL(zLact[start + 0].c_str() , "/ "); - - start = start_a + 3*actDims[8]; - BOOST_CHECK_EQUAL(zLact[start + 0].c_str() , "WELOPEN "); - - start = start_a + 4*actDims[8]; - BOOST_CHECK_EQUAL(zLact[start + 0].c_str() , " 'OPL0"); - BOOST_CHECK_EQUAL(zLact[start + 1].c_str() , "1' 'OPEN"); - BOOST_CHECK_EQUAL(zLact[start + 2].c_str() , "' / "); - - start = start_a + 5*actDims[8]; - BOOST_CHECK_EQUAL(zLact[start + 0].c_str() , "/ "); - - - start = start_a + 6*actDims[8]; - BOOST_CHECK_EQUAL(zLact[start + 0].c_str() , "ENDACTIO"); - - - } - - { - /* - ZACN - //(Max number of conditions pr ACTIONX) * ((max no characters pr line = 104) / (8 - characters pr string)(104/8 = 13) - - */ - - const auto& zAcn = actionxData.getZACN(); - - //First action - auto start_a = 0*actDims[5]; - auto start = start_a + 0*13; - BOOST_CHECK_EQUAL(zAcn[start + 0].c_str() , "WWPR "); - BOOST_CHECK_EQUAL(zAcn[start + 1].c_str() , " "); - BOOST_CHECK_EQUAL(zAcn[start + 2].c_str() , "> "); - BOOST_CHECK_EQUAL(zAcn[start + 3].c_str() , "OP* "); - - start = start_a + 1*13; - BOOST_CHECK_EQUAL(zAcn[start + 0].c_str() , "GMWPR "); - BOOST_CHECK_EQUAL(zAcn[start + 1].c_str() , " "); - BOOST_CHECK_EQUAL(zAcn[start + 2].c_str() , "> "); - BOOST_CHECK_EQUAL(zAcn[start + 3].c_str() , " "); - BOOST_CHECK_EQUAL(zAcn[start + 4].c_str() , " "); - BOOST_CHECK_EQUAL(zAcn[start + 5].c_str() , "T* "); - - start = start_a + 2*13; - BOOST_CHECK_EQUAL(zAcn[start + 0].c_str() , " "); - BOOST_CHECK_EQUAL(zAcn[start + 1].c_str() , " "); - BOOST_CHECK_EQUAL(zAcn[start + 2].c_str() , "> "); - BOOST_CHECK_EQUAL(zAcn[start + 3].c_str() , " "); - BOOST_CHECK_EQUAL(zAcn[start + 4].c_str() , " "); - - - - //Second action - start_a = 1*actDims[5]; - start = start_a + 0*13; - BOOST_CHECK_EQUAL(zAcn[start + 0].c_str() , "FMWPR "); - BOOST_CHECK_EQUAL(zAcn[start + 1].c_str() , " "); - BOOST_CHECK_EQUAL(zAcn[start + 2].c_str() , "> "); - BOOST_CHECK_EQUAL(zAcn[start + 3].c_str() , " "); - - start = start_a + 1*13; - BOOST_CHECK_EQUAL(zAcn[start + 0].c_str() , "WGPR "); - BOOST_CHECK_EQUAL(zAcn[start + 1].c_str() , "GGPR "); - BOOST_CHECK_EQUAL(zAcn[start + 2].c_str() , "> "); - BOOST_CHECK_EQUAL(zAcn[start + 3].c_str() , "OPL02 "); - BOOST_CHECK_EQUAL(zAcn[start + 4].c_str() , " "); - BOOST_CHECK_EQUAL(zAcn[start + 5].c_str() , " "); - BOOST_CHECK_EQUAL(zAcn[start + 6].c_str() , "LOWER "); - - start = start_a + 2*13; - BOOST_CHECK_EQUAL(zAcn[start + 0].c_str() , " "); - BOOST_CHECK_EQUAL(zAcn[start + 1].c_str() , " "); - BOOST_CHECK_EQUAL(zAcn[start + 2].c_str() , "> "); - BOOST_CHECK_EQUAL(zAcn[start + 3].c_str() , " "); - BOOST_CHECK_EQUAL(zAcn[start + 4].c_str() , " "); - } - - { - /* - IACN - 26*Max number of conditions pr ACTIONX - - */ - - - const auto& iAcn = actionxData.getIACN(); - - auto start_a = 0*actDims[6]; - auto start = start_a + 0*26; - BOOST_CHECK_EQUAL(iAcn[start + 0] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 1] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 2] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 3] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 4] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 5] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 6] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 7] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 8] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 9] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 10] , 2); - BOOST_CHECK_EQUAL(iAcn[start + 11] , 8); - BOOST_CHECK_EQUAL(iAcn[start + 12] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 13] , 2); - BOOST_CHECK_EQUAL(iAcn[start + 14] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 15] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 16] , 1); - BOOST_CHECK_EQUAL(iAcn[start + 17] , 0); - - start = start_a + 1*26; - BOOST_CHECK_EQUAL(iAcn[start + 0] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 1] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 2] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 3] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 4] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 5] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 6] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 7] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 8] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 9] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 10] , 3); - BOOST_CHECK_EQUAL(iAcn[start + 11] , 8); - BOOST_CHECK_EQUAL(iAcn[start + 12] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 13] , 1); - BOOST_CHECK_EQUAL(iAcn[start + 14] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 15] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 16] , 1); - BOOST_CHECK_EQUAL(iAcn[start + 17] , 0); - - start_a = 1*actDims[6]; - start = start_a + 0*26; - BOOST_CHECK_EQUAL(iAcn[start + 0] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 1] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 2] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 3] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 4] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 5] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 6] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 7] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 8] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 9] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 10] , 1); - BOOST_CHECK_EQUAL(iAcn[start + 11] , 8); - BOOST_CHECK_EQUAL(iAcn[start + 12] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 13] , 1); - BOOST_CHECK_EQUAL(iAcn[start + 14] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 15] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 16] , 1); - BOOST_CHECK_EQUAL(iAcn[start + 17] , 0); - - start = start_a + 1*26; - BOOST_CHECK_EQUAL(iAcn[start + 0] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 1] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 2] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 3] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 4] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 5] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 6] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 7] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 8] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 9] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 10] , 2); - BOOST_CHECK_EQUAL(iAcn[start + 11] , 3); - BOOST_CHECK_EQUAL(iAcn[start + 12] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 13] , 1); - BOOST_CHECK_EQUAL(iAcn[start + 14] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 15] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 16] , 1); - BOOST_CHECK_EQUAL(iAcn[start + 17] , 0); - - start = start_a + 2*26; - BOOST_CHECK_EQUAL(iAcn[start + 0] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 1] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 2] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 3] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 4] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 5] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 6] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 7] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 8] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 9] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 10] , 11); - BOOST_CHECK_EQUAL(iAcn[start + 11] , 8); - BOOST_CHECK_EQUAL(iAcn[start + 12] , 1); - BOOST_CHECK_EQUAL(iAcn[start + 13] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 14] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 15] , 0); - BOOST_CHECK_EQUAL(iAcn[start + 16] , 1); - BOOST_CHECK_EQUAL(iAcn[start + 17] , 1); - - } - - - - { - /* - SACN - 26*Max number of conditions pr ACTIONX - - */ - - - const auto& sAcn = actionxData.getSACN(); - - auto start_a = 0*actDims[6]; - auto start = start_a + 0*16; - BOOST_CHECK_EQUAL(sAcn[start + 0] , 0); - BOOST_CHECK_EQUAL(sAcn[start + 1] , 0); - BOOST_CHECK_EQUAL(sAcn[start + 2] , 17); - BOOST_CHECK_EQUAL(sAcn[start + 3] , 0); - BOOST_CHECK_EQUAL(sAcn[start + 4] , 24); - BOOST_CHECK_EQUAL(sAcn[start + 5] , 17); - BOOST_CHECK_EQUAL(sAcn[start + 6] , 24); - BOOST_CHECK_EQUAL(sAcn[start + 7] , 17); - BOOST_CHECK_EQUAL(sAcn[start + 8] , 24); - BOOST_CHECK_EQUAL(sAcn[start + 9] , 17); - BOOST_CHECK_EQUAL(sAcn[start + 10] , 0); - BOOST_CHECK_EQUAL(sAcn[start + 11] , 0); - BOOST_CHECK_EQUAL(sAcn[start + 12] , 0); - BOOST_CHECK_EQUAL(sAcn[start + 13] , 0); - BOOST_CHECK_EQUAL(sAcn[start + 14] , 0); - BOOST_CHECK_EQUAL(sAcn[start + 15] , 0); - - start = start_a + 1*16; - BOOST_CHECK_EQUAL(sAcn[start + 0] , 0); - BOOST_CHECK_EQUAL(sAcn[start + 1] , 0); - BOOST_CHECK_EQUAL(sAcn[start + 2] , 14); - BOOST_CHECK_EQUAL(sAcn[start + 3] , 0); - BOOST_CHECK_EQUAL(sAcn[start + 4] , 0); - BOOST_CHECK_EQUAL(sAcn[start + 5] , 14); - BOOST_CHECK_EQUAL(sAcn[start + 6] , 0); - BOOST_CHECK_EQUAL(sAcn[start + 7] , 14); - BOOST_CHECK_EQUAL(sAcn[start + 8] , 0); - BOOST_CHECK_EQUAL(sAcn[start + 9] , 14); - BOOST_CHECK_EQUAL(sAcn[start + 10] , 0); - BOOST_CHECK_EQUAL(sAcn[start + 11] , 0); - BOOST_CHECK_EQUAL(sAcn[start + 12] , 0); - BOOST_CHECK_EQUAL(sAcn[start + 13] , 0); - BOOST_CHECK_EQUAL(sAcn[start + 14] , 0); - BOOST_CHECK_EQUAL(sAcn[start + 15] , 0); - - start = start_a + 2*16; - BOOST_CHECK_EQUAL(sAcn[start + 0] , 0); - BOOST_CHECK_EQUAL(sAcn[start + 1] , 0); - BOOST_CHECK_EQUAL(sAcn[start + 2] , 3); - BOOST_CHECK_EQUAL(sAcn[start + 3] , 0); - BOOST_CHECK_EQUAL(sAcn[start + 4] , 1.E+20); - BOOST_CHECK_EQUAL(sAcn[start + 5] , 1.E+20); - BOOST_CHECK_EQUAL(sAcn[start + 6] , 1.E+20); - BOOST_CHECK_EQUAL(sAcn[start + 7] , 1.E+20); - BOOST_CHECK_EQUAL(sAcn[start + 8] , 1.E+20); - BOOST_CHECK_EQUAL(sAcn[start + 9] , 1.E+20); - BOOST_CHECK_EQUAL(sAcn[start + 10] , 0); - BOOST_CHECK_EQUAL(sAcn[start + 11] , 0); - BOOST_CHECK_EQUAL(sAcn[start + 12] , 0); - BOOST_CHECK_EQUAL(sAcn[start + 13] , 0); - BOOST_CHECK_EQUAL(sAcn[start + 14] , 0); - BOOST_CHECK_EQUAL(sAcn[start + 15] , 0); - - } - -} - -BOOST_AUTO_TEST_SUITE_END() diff --git a/ThirdParty/custom-opm-common/opm-common/tests/test_AggregateConnectionData.cpp b/ThirdParty/custom-opm-common/opm-common/tests/test_AggregateConnectionData.cpp deleted file mode 100644 index c5b0fe11f2..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/test_AggregateConnectionData.cpp +++ /dev/null @@ -1,815 +0,0 @@ -/* - Copyright 2018 Statoil ASA - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - - -#define BOOST_TEST_MODULE Aggregate_Connection_Data -#include -#include -#include -#include -#include -#include - -#include - -#include - -#include -#include - -#include - -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include - -struct MockIH -{ - MockIH(const int numWells, - - const int nsegWell = 1, // E100 - const int ncwMax = 20, - const int iConnPerConn = 25, // NICONZ - const int sConnPerConn = 41, // NSCONZ - const int xConnPerConn = 58); // NXCONZ - - - std::vector value; - - using Sz = std::vector::size_type; - - Sz nwells; - Sz nsegwl; - Sz nsegmx; - Sz nswlmx; - Sz ncwmax; - Sz niconz; - Sz nsconz; - Sz nxconz; -}; - -MockIH::MockIH(const int numWells, - const int nsegWell, - const int /* ncwMax */, - const int iConnPerConn, - const int sConnPerConn, - const int xConnPerConn) - : value(411, 0) -{ - using Ix = ::Opm::RestartIO::Helpers::VectorItems::intehead; - - this->nwells = this->value[Ix::NWELLS] = numWells; - - this->nsegwl = this->value[Ix::NSEGWL] = nsegWell; - this->ncwmax = this->value[Ix::NCWMAX] = 20; - this->nswlmx = this->value[Ix::NSWLMX] = 1; - this->nsegmx = this->value[Ix::NSEGMX] = 32; - this->niconz = this->value[Ix::NICONZ] = iConnPerConn; - this->nsconz = this->value[Ix::NSCONZ] = sConnPerConn; - this->nxconz = this->value[Ix::NXCONZ] = xConnPerConn; -} - -namespace { - Opm::Deck first_sim() - { - // Mostly copy of tests/FIRST_SIM.DATA - const auto input = std::string { - R"~( -RUNSPEC - -TITLE - TWO MULTI-LATERAL WELLS; WINJUCER AND INJECTOR - MULTI-SEGMENT BRANCHES - -DIMENS - 10 5 10 / - - -OIL - -WATER - -GAS - -DISGAS - -FIELD - -TABDIMS - 1 1 15 15 2 15 / - -EQLDIMS - 2 / - -WELLDIMS - 3 20 1 3 / - -WSEGDIMS - 1 32 5 / - -UNIFIN -UNIFOUT - ---FMTIN ---FMTOUT - -START - 1 'JAN' 2015 / - --- RPTRUNSP - -GRID ========================================================= - ---NOGGF -BOX - 1 10 1 5 1 1 / - -TOPS -50*7000 / - -BOX -1 10 1 5 1 10 / - -DXV -10*100 / -DYV -5*100 / -DZV -2*20 100 7*20 / - -EQUALS --- 'DX' 100 / --- 'DY' 100 / - 'PERMX' 50 / - 'PERMZ' 5 / --- 'DZ' 20 / - 'PORO' 0.2 / --- 'TOPS' 7000 1 10 1 5 1 1 / --- 'DZ' 100 1 10 1 5 3 3 / --- 'PORO' 0.0 1 10 1 5 3 3 / - / - -COPY - PERMX PERMY / - / - - -PORO - 500*0.15 / - -RPTGRID - -- Report Levels for Grid Section Data - -- - / - -EDIT - -EQUALS - 'PORV' 0.0 7 7 1 1 9 9 / -/ - -PROPS ========================================================== - --- WATER RELATIVE PERMEABILITY AND CAPILLARY PRESSURE ARE TABULATED AS --- A FUNCTION OF WATER SATURATION. --- --- SWAT KRW PCOW -SWFN - - 0.12 0 0 - 1.0 0.00001 0 / - --- SIMILARLY FOR GAS --- --- SGAS KRG PCOG -SGFN - - 0 0 0 - 0.02 0 0 - 0.05 0.005 0 - 0.12 0.025 0 - 0.2 0.075 0 - 0.25 0.125 0 - 0.3 0.19 0 - 0.4 0.41 0 - 0.45 0.6 0 - 0.5 0.72 0 - 0.6 0.87 0 - 0.7 0.94 0 - 0.85 0.98 0 - 1.0 1.0 0 -/ - --- OIL RELATIVE PERMEABILITY IS TABULATED AGAINST OIL SATURATION --- FOR OIL-WATER AND OIL-GAS-CONNATE WATER CASES --- --- SOIL KROW KROG -SOF3 - - 0 0 0 - 0.18 0 0 - 0.28 0.0001 0.0001 - 0.38 0.001 0.001 - 0.43 0.01 0.01 - 0.48 0.021 0.021 - 0.58 0.09 0.09 - 0.63 0.2 0.2 - 0.68 0.35 0.35 - 0.76 0.7 0.7 - 0.83 0.98 0.98 - 0.86 0.997 0.997 - 0.879 1 1 - 0.88 1 1 / - - --- PVT PROPERTIES OF WATER --- --- REF. PRES. REF. FVF COMPRESSIBILITY REF VISCOSITY VISCOSIBILITY -PVTW - 4014.7 1.029 3.13D-6 0.31 0 / - --- ROCK COMPRESSIBILITY --- --- REF. PRES COMPRESSIBILITY -ROCK - 14.7 3.0D-6 / - --- SURFACE DENSITIES OF RESERVOIR FLUIDS --- --- OIL WATER GAS -DENSITY - 49.1 64.79 0.06054 / - --- PVT PROPERTIES OF DRY GAS (NO VAPOURISED OIL) --- WE WOULD USE PVTG TO SPECIFY THE PROPERTIES OF WET GAS --- --- PGAS BGAS VISGAS -PVDG - 14.7 166.666 0.008 - 264.7 12.093 0.0096 - 514.7 6.274 0.0112 - 1014.7 3.197 0.014 - 2014.7 1.614 0.0189 - 2514.7 1.294 0.0208 - 3014.7 1.080 0.0228 - 4014.7 0.811 0.0268 - 5014.7 0.649 0.0309 - 9014.7 0.386 0.047 / - --- PVT PROPERTIES OF LIVE OIL (WITH DISSOLVED GAS) --- WE WOULD USE PVDO TO SPECIFY THE PROPERTIES OF DEAD OIL --- --- RS POIL FVFO VISO -PVTO - 0.001 14.7 1.062 1.04 / - 0.0905 264.7 1.15 0.975 / - 0.18 514.7 1.207 0.91 / - 0.371 1014.7 1.295 0.83 / - 0.636 2014.7 1.435 0.695 / - 0.775 2514.7 1.5 0.641 / - 0.93 3014.7 1.565 0.594 / - 1.270 4014.7 1.695 0.51 - 5014.7 1.671 0.549 - 9014.7 1.579 0.74 / - 1.618 5014.7 1.827 0.449 - 9014.7 1.726 0.605 / -/ - - -RPTPROPS --- PROPS Reporting Options --- -/ - -REGIONS =========================================================== - - -FIPNUM - - 100*1 - 400*2 -/ - -EQLNUM - - 100*1 - 400*2 -/ - -RPTREGS - - / - -SOLUTION ============================================================ - -EQUIL - 7020.00 2700.00 7990.00 .00000 7020.00 .00000 0 0 5 / - 7200.00 3700.00 7300.00 .00000 7000.00 .00000 1 0 5 / - -RSVD 2 TABLES 3 NODES IN EACH FIELD 12:00 17 AUG 83 - 7000.0 1.0000 - 7990.0 1.0000 -/ - 7000.0 1.0000 - 7400.0 1.0000 -/ - -RPTRST --- Restart File Output Control --- -'BASIC=2' 'FLOWS' 'POT' 'PRES' / - ---RPTSOL --- --- Initialisation Print Output --- ---'PRES' 'SOIL' 'SWAT' 'SGAS' 'RS' 'RESTART=1' 'FIP=2' 'EQUIL' 'RSVD' / - -SUMMARY =========================================================== - -FOPR - -WOPR - 'WINJ' - / - -FGPR - -FWPR - -FWIR - -FWCT - -FGOR - ---RUNSUM - -ALL - -MSUMLINS - -MSUMNEWT - -SEPARATE - -SCHEDULE =========================================================== - -DEBUG - 1 3 / - -DRSDT - 1.0E20 / - -RPTSCHED - 'PRES' 'SWAT' 'SGAS' 'RESTART=1' 'RS' 'WELLS=2' 'SUMMARY=2' - 'CPU=2' 'WELSPECS' 'NEWTON=2' / - -NOECHO - - -ECHO - -WELSPECS - 'PROD' 'G' 1 5 7030 'OIL' 0.0 'STD' 'STOP' / - 'WINJ' 'G' 10 1 7030 'WAT' 0.0 'STD' 'STOP' / -/ - -COMPDAT - - 'PROD' 1 5 2 2 3* 0.2 3* 'X' / - 'PROD' 2 5 2 2 3* 0.2 3* 'X' / - 'PROD' 3 5 2 2 3* 0.2 3* 'X' / -- This connection is explicitly made inactive in the InactiveCell test - 'PROD' 4 5 2 2 3* 0.2 3* 'X' / - 'PROD' 5 5 2 2 3* 0.2 3* 'X' / - 'WINJ' 10 1 9 9 3* 0.2 3* 'X' / - 'WINJ' 9 1 9 9 3* 0.2 3* 'X' / - 'WINJ' 8 1 9 9 3* 0.2 3* 'X' / - 'WINJ' 7 1 9 9 3* 0.2 3* 'X' / - 'WINJ' 6 1 9 9 3* 0.2 3* 'X' / -/ - -WELSEGS - --- Name Dep 1 Tlen 1 Vol 1 - 'PROD' 7010 10 0.31 'INC' / - --- First Last Branch Outlet Length Depth Diam Ruff Area Vol --- Seg Seg Num Seg Chang --- Main Stem - 2 12 1 1 20 20 0.2 1.E-3 1* 1* / --- Top Branch - 13 13 2 3 50 0 0.2 1.E-3 1* 1* / - 14 17 2 13 100 0 0.2 1.E-3 1* 1* / - / - -COMPSEGS - --- Name - 'PROD' / - --- I J K Brn Start End Dirn End --- No Length Length Penet Range --- Top Branch - 1 5 2 2 30 130 'X' 3* / - 2 5 2 2 130 230 'X' 3* / - 3 5 2 2 230 330 'X' 3* / - 4 5 2 2 330 430 'X' 3* / - 5 5 2 2 430 530 'X' 3* / --- Middle Branch - / - - -WCONPROD - 'PROD' 'OPEN' 'LRAT' 3* 2000 1* 2500 1* / - / - -WCONINJE - 'WINJ' 'WAT' 'OPEN' 'BHP' 1* 20000 3500 1* / - / - - -TUNING - / - / - / - -TSTEP - 2 2 -/ - - -END - - -)~" }; - - return Opm::Parser{}.parseString(input); - } - - - Opm::data::WellRates - wr(const Opm::Schedule& sched) - { - using o = ::Opm::data::Rates::opt; - - auto xw = ::Opm::data::WellRates {}; - - { - xw["PROD"].rates.set(o::wat, 1.0).set(o::oil, 2.0).set(o::gas, 3.0); - xw["PROD"].bhp = 213.0; - double qo = 5.; - double qw = 4.; - double qg = 50.; - { - const auto& well = sched.getWell("PROD", 0); - const auto& connections = well.getConnections(); - for (int i = 0; i < 5; i++) { - xw["PROD"].connections.emplace_back(); - auto& c = xw["PROD"].connections.back(); - - c.rates.set(o::wat, qw * (float(i) + 1.)) - .set(o::oil, qo * (float(i) + 1.)) - .set(o::gas, qg * (float(i) + 1.)); - c.pressure = 215.; - c.index = connections[i].global_index(); - } - auto seg = Opm::data::Segment {}; - for (std::size_t i = 1; i < 5; i++) { - xw["PROD"].segments.insert(std::pair(i, seg)); - } - } - { - const auto& well = sched.getWell("WINJ", 0); - const auto& connections = well.getConnections(); - xw["WINJ"].bhp = 234.0; - - xw["WINJ"].rates.set(o::wat, 5.0); - xw["WINJ"].rates.set(o::oil, 0.0); - xw["WINJ"].rates.set(o::gas, 0.0); - qw = 7.; - for (int i = 0; i < 4; i++) { - xw["WINJ"].connections.emplace_back(); - auto& c = xw["WINJ"].connections.back(); - - c.rates.set(o::wat, qw * (float(i) + 1.)).set(o::oil, 0.).set(o::gas, 0.); - c.pressure = 218.; - c.index = connections[i].global_index(); - } - } - } - return xw; - } - } // namespace - - struct SimulationCase { - explicit SimulationCase(const Opm::Deck& deck) - : es(deck) - , python(std::make_shared()) - , grid(deck) - , sched(deck, es, python) - { - } - - // Order requirement: 'es' must be declared/initialised before 'sched'. - Opm::EclipseState es; - std::shared_ptr python; - Opm::EclipseGrid grid; - Opm::Schedule sched; - }; - -// ===================================================================== - -BOOST_AUTO_TEST_SUITE(Aggregate_ConnData) - - -// test dimensions of Connection data -BOOST_AUTO_TEST_CASE (Constructor) -{ - const auto ih = MockIH{ 5 }; - - const auto amconn = Opm::RestartIO::Helpers::AggregateConnectionData{ ih.value }; - - BOOST_CHECK_EQUAL(amconn.getIConn().size(), ih.nwells * ih.ncwmax * ih.niconz); - BOOST_CHECK_EQUAL(amconn.getSConn().size(), ih.nwells * ih.ncwmax * ih.nsconz); - BOOST_CHECK_EQUAL(amconn.getXConn().size(), ih.nwells * ih.ncwmax * ih.nxconz); -} - - -BOOST_AUTO_TEST_CASE(Declared_Connection_Data) -{ - const auto simCase = SimulationCase {first_sim()}; - - // Report Step 1: 2115-01-01 --> 2015-01-03 - const auto rptStep = std::size_t {1}; - - const auto ih = MockIH {static_cast(simCase.sched.getWells(rptStep).size())}; - - BOOST_CHECK_EQUAL(ih.nwells, MockIH::Sz {2}); - - const Opm::data::WellRates wrc = wr(simCase.sched); - auto amconn = Opm::RestartIO::Helpers::AggregateConnectionData {ih.value}; - amconn.captureDeclaredConnData(simCase.sched, simCase.grid, simCase.es.getUnits(), wrc, rptStep); - - // ICONN (PROD) - { - using Ix = ::Opm::RestartIO::Helpers::VectorItems::IConn::index; - - auto start = 0 * ih.niconz; - - const auto& iConn = amconn.getIConn(); - BOOST_CHECK_EQUAL(iConn[start + Ix::SeqIndex], 1); // PROD-connection 1, sequence number - BOOST_CHECK_EQUAL(iConn[start + Ix::CellI], 1); // PROD-connection 1, Cell I - BOOST_CHECK_EQUAL(iConn[start + Ix::CellJ], 5); // PROD-connection 1, Cell J - BOOST_CHECK_EQUAL(iConn[start + Ix::CellK], 2); // PROD-connection 1, Cell K - BOOST_CHECK_EQUAL(iConn[start + Ix::ConnStat], 1); // PROD-connection 1, ConnStat - BOOST_CHECK_EQUAL(iConn[start + Ix::Drainage], 0); // PROD-connection 1, Drainage saturation table - BOOST_CHECK_EQUAL(iConn[start + Ix::Imbibition], 0); // PROD-connection 1, Imbibition saturation table - BOOST_CHECK_EQUAL(iConn[start + Ix::ComplNum], 1); // PROD-connection 1, Complum number - BOOST_CHECK_EQUAL(iConn[start + Ix::ConnDir], 1); // PROD-connection 1, Connection direction - BOOST_CHECK_EQUAL(iConn[start + Ix::Segment], 13); // PROD-connection 1, Segment ID for direction - - start = 3 * ih.niconz; - BOOST_CHECK_EQUAL(iConn[start + Ix::SeqIndex], 4); // PROD-connection 4, sequence number - BOOST_CHECK_EQUAL(iConn[start + Ix::CellI], 4); // PROD-connection 4, Cell I - BOOST_CHECK_EQUAL(iConn[start + Ix::CellJ], 5); // PROD-connection 4, Cell J - BOOST_CHECK_EQUAL(iConn[start + Ix::CellK], 2); // PROD-connection 4, Cell K - BOOST_CHECK_EQUAL(iConn[start + Ix::ConnStat], 1); // PROD-connection 4, ConnStat - BOOST_CHECK_EQUAL(iConn[start + Ix::Drainage], 0); // PROD-connection 4, Drainage saturation table - BOOST_CHECK_EQUAL(iConn[start + Ix::Imbibition], 0); // PROD-connection 4, Imbibition saturation table - BOOST_CHECK_EQUAL(iConn[start + Ix::ComplNum], 4); // PROD-connection 4, Complum number - BOOST_CHECK_EQUAL(iConn[start + Ix::ConnDir], 1); // PROD-connection 4, Connection direction - BOOST_CHECK_EQUAL(iConn[start + Ix::Segment], 16); // PROD-connection 4, Segment ID for direction - - // ICONN (WINJ) - start = ih.ncwmax * ih.niconz; - BOOST_CHECK_EQUAL(iConn[start + Ix::SeqIndex], 1); // WINJ-connection 1, sequence number - BOOST_CHECK_EQUAL(iConn[start + Ix::CellI], 10); // WINJ-connection 1, Cell I - BOOST_CHECK_EQUAL(iConn[start + Ix::CellJ], 1); // WINJ-connection 1, Cell J - BOOST_CHECK_EQUAL(iConn[start + Ix::CellK], 9); // WINJ-connection 1, Cell K - BOOST_CHECK_EQUAL(iConn[start + Ix::ConnStat], 1); // WINJ-connection 1, ConnStat - BOOST_CHECK_EQUAL(iConn[start + Ix::Drainage], 0); // WINJ-connection 1, Drainage saturation table - BOOST_CHECK_EQUAL(iConn[start + Ix::Imbibition], 0); // WINJ-connection 1, Imbibition saturation table - BOOST_CHECK_EQUAL(iConn[start + Ix::ComplNum], 1); // WINJ-connection 1, Complum number - BOOST_CHECK_EQUAL(iConn[start + Ix::ConnDir], 1); // WINJ-connection 1, Connection direction - BOOST_CHECK_EQUAL(iConn[start + Ix::Segment], 0); // WINJ-connection 1, Segment ID for direction - - start = ih.ncwmax * ih.niconz + 2 * ih.niconz; - BOOST_CHECK_EQUAL(iConn[start + Ix::SeqIndex], 3); // WINJ-connection 3, sequence number - BOOST_CHECK_EQUAL(iConn[start + Ix::CellI], 8); // WINJ-connection 3, Cell I - BOOST_CHECK_EQUAL(iConn[start + Ix::CellJ], 1); // WINJ-connection 3, Cell J - BOOST_CHECK_EQUAL(iConn[start + Ix::CellK], 9); // WINJ-connection 3, Cell K - BOOST_CHECK_EQUAL(iConn[start + Ix::ConnStat], 1); // WINJ-connection 3, ConnStat - BOOST_CHECK_EQUAL(iConn[start + Ix::Drainage], 0); // WINJ-connection 3, Drainage saturation table - BOOST_CHECK_EQUAL(iConn[start + Ix::Imbibition], 0); // WINJ-connection 3, Imbibition saturation table - BOOST_CHECK_EQUAL(iConn[start + Ix::ComplNum], 3); // WINJ-connection 3, Complum number - BOOST_CHECK_EQUAL(iConn[start + Ix::ConnDir], 1); // WINJ-connection 3, Connection direction - BOOST_CHECK_EQUAL(iConn[start + Ix::Segment], 0); // WINJ-connection 3, Segment ID for direction - - start = ih.ncwmax * ih.niconz + 3 * ih.niconz; - BOOST_CHECK_EQUAL(iConn[start + Ix::SeqIndex], 4); // WINJ-connection 4, sequence number - BOOST_CHECK_EQUAL(iConn[start + Ix::CellI], 6); // WINJ-connection 4, Cell I - BOOST_CHECK_EQUAL(iConn[start + Ix::CellJ], 1); // WINJ-connection 4, Cell J - BOOST_CHECK_EQUAL(iConn[start + Ix::CellK], 9); // WINJ-connection 4, Cell K - BOOST_CHECK_EQUAL(iConn[start + Ix::ConnStat], 1); // WINJ-connection 4, ConnStat - BOOST_CHECK_EQUAL(iConn[start + Ix::Drainage], 0); // WINJ-connection 4, Drainage saturation table - BOOST_CHECK_EQUAL(iConn[start + Ix::Imbibition], 0); // WINJ-connection 4, Imbibition saturation table - BOOST_CHECK_EQUAL(iConn[start + Ix::ComplNum], 4); // WINJ-connection 4, Complum number - BOOST_CHECK_EQUAL(iConn[start + Ix::ConnDir], 1); // WINJ-connection 4, Connection direction - BOOST_CHECK_EQUAL(iConn[start + Ix::Segment], 0); // WINJ-connection 4, Segment ID for direction - } - - // SCONN (PROD) + (WINJ) - { - // well no 1 - PROD - using Ix = ::Opm::RestartIO::Helpers::VectorItems::SConn::index; - const auto& sconn = amconn.getSConn(); - int connNo = 1; - auto i0 = (connNo - 1) * ih.nsconz; - BOOST_CHECK_CLOSE(sconn[i0 + Ix::ConnTrans], 2.55826545, 1.0e-5); // PROD - conn 1 : Transmissibility factor - BOOST_CHECK_CLOSE(sconn[i0 + Ix::Depth], 7050., 1.0e-5); // PROD - conn 1 : Centre depth - BOOST_CHECK_CLOSE(sconn[i0 + Ix::Diameter], 0.20, 1.0e-5); // PROD - conn 1 : diameter - BOOST_CHECK_CLOSE(sconn[i0 + Ix::EffectiveKH], 1581.13879, 1.0e-5); // PROD - conn 1 : effective kh-product - BOOST_CHECK_CLOSE(sconn[i0 + Ix::item12], 2.55826545, 1.0e-5); // PROD - conn 1 : Transmissibility factor - BOOST_CHECK_CLOSE( - sconn[i0 + Ix::SegDistEnd], 130., 1.0e-5); // PROD - conn 1 : Distance to end of connection in segment - BOOST_CHECK_CLOSE( - sconn[i0 + Ix::SegDistStart], 30., 1.0e-5); // PROD - conn 1 : Distance to start of connection in segment - - // Well no 2 - WINJ well - connNo = 3; - i0 = ih.ncwmax * ih.nsconz + (connNo - 1) * ih.nsconz; - BOOST_CHECK_CLOSE(sconn[i0 + Ix::ConnTrans], 2.55826545, 1.0e-5); // WINJ - conn 3 : Transmissibility factor - BOOST_CHECK_CLOSE(sconn[i0 + Ix::Depth], 7250., 1.0e-5); // WINJ - conn 3 : Centre depth - BOOST_CHECK_CLOSE(sconn[i0 + Ix::Diameter], 0.20, 1.0e-5); // WINJ - conn 3 : diameter - BOOST_CHECK_CLOSE(sconn[i0 + Ix::EffectiveKH], 1581.13879, 1.0e-5); // WINJ - conn 3 : effective kh-product - BOOST_CHECK_CLOSE(sconn[i0 + Ix::item12], 2.55826545, 1.0e-5); // WINJ - conn 3 : Transmissibility factor - BOOST_CHECK_CLOSE( - sconn[i0 + Ix::SegDistEnd], 0., 1.0e-5); // WINJ - conn 3 : Distance to end of connection in segment - BOOST_CHECK_CLOSE( - sconn[i0 + Ix::SegDistStart], 0., 1.0e-5); // WINJ - conn 3 : Distance to start of connection in segment - - connNo = 4; - i0 = ih.ncwmax * ih.nsconz + (connNo - 1) * ih.nsconz; - BOOST_CHECK_CLOSE(sconn[i0 + Ix::ConnTrans], 2.55826545, 1.0e-5); // WINJ - conn 4 : Transmissibility factor - BOOST_CHECK_CLOSE(sconn[i0 + Ix::Depth], 7250., 1.0e-5); // WINJ - conn 4 : Centre depth - BOOST_CHECK_CLOSE(sconn[i0 + Ix::Diameter], 0.20, 1.0e-5); // WINJ - conn 4 : diameter - BOOST_CHECK_CLOSE(sconn[i0 + Ix::EffectiveKH], 1581.13879, 1.0e-5); // WINJ - conn 4 : effective kh-product - BOOST_CHECK_CLOSE(sconn[i0 + Ix::item12], 2.55826545, 1.0e-5); // WINJ - conn 4 : Transmissibility factor - BOOST_CHECK_CLOSE( - sconn[i0 + Ix::SegDistEnd], 0., 1.0e-5); // WINJ - conn 4 : Distance to end of connection in segment - BOOST_CHECK_CLOSE( - sconn[i0 + Ix::SegDistStart], 0., 1.0e-5); // WINJ - conn 4 : Distance to start of connection in segment - } - - // XCONN (PROD) + (WINJ) - { - using Ix = ::Opm::RestartIO::Helpers::VectorItems::XConn::index; - const auto& units = simCase.es.getUnits(); - using M = ::Opm::UnitSystem::measure; - const auto& xconn = amconn.getXConn(); - - // PROD well - int connNo = 1; - auto i0 = (connNo - 1) * ih.nxconz; - BOOST_CHECK_CLOSE(xconn[i0 + Ix::OilRate], - -units.from_si(M::liquid_surface_rate, 5. * (float(connNo))), - 1.0e-5); // PROD - conn 1 : Surface oil rate - BOOST_CHECK_CLOSE(xconn[i0 + Ix::WaterRate], - -units.from_si(M::liquid_surface_rate, 4. * (float(connNo))), - 1.0e-5); // PROD - conn 1 : Surface water rate - BOOST_CHECK_CLOSE(xconn[i0 + Ix::GasRate], - -units.from_si(M::gas_surface_rate, 50. * (float(connNo))), - 1.0e-5); // PROD - conn 1 : Surface gas rate - BOOST_CHECK_CLOSE( - xconn[i0 + Ix::Pressure], units.from_si(M::pressure, 215.), 1.0e-5); // PROD - conn 1 : Connection pressure - BOOST_CHECK_CLOSE(xconn[i0 + Ix::ResVRate], 0., 1.0e-5); // PROD - conn 1 : Reservoir volume rate - - // WINJ well - connNo = 3; - i0 = ih.ncwmax * ih.nxconz + (connNo - 1) * ih.nxconz; - BOOST_CHECK_CLOSE(xconn[i0 + Ix::WaterRate], - -units.from_si(M::liquid_surface_rate, 7. * (float(connNo))), - 1.0e-5); // WINJ - conn 3 : Surface water rate - BOOST_CHECK_CLOSE( - xconn[i0 + Ix::Pressure], units.from_si(M::pressure, 218.), 1.0e-5); // WINJ - conn 3 : Connection pressure - BOOST_CHECK_CLOSE(xconn[i0 + Ix::ResVRate], 0., 1.0e-5); // WINJ - conn 3 : Reservoir volume rate - - connNo = 4; - i0 = ih.ncwmax * ih.nxconz + (connNo - 1) * ih.nxconz; - BOOST_CHECK_CLOSE(xconn[i0 + Ix::WaterRate], - -units.from_si(M::liquid_surface_rate, 7. * (float(connNo))), - 1.0e-5); // WINJ - conn 3 : Surface water rate - BOOST_CHECK_CLOSE( - xconn[i0 + Ix::Pressure], units.from_si(M::pressure, 218.), 1.0e-5); // WINJ - conn 3 : Connection pressure - BOOST_CHECK_CLOSE(xconn[i0 + Ix::ResVRate], 0., 1.0e-5); // WINJ - conn 3 : Reservoir volume rate - } -} - - -BOOST_AUTO_TEST_CASE(InactiveCell) { - auto simCase = SimulationCase{first_sim()}; - const auto rptStep = std::size_t{1}; - const auto ih = MockIH {static_cast(simCase.sched.getWells(rptStep).size())}; - const Opm::data::WellRates wrc = wr(simCase.sched); - auto conn0 = Opm::RestartIO::Helpers::AggregateConnectionData{ih.value}; - conn0.captureDeclaredConnData(simCase.sched, - simCase.grid, - simCase.es.getUnits(), - wrc, - rptStep - ); - - std::vector actnum(500, 1); - // Here we deactive the cell holding connection number 2. - actnum[simCase.grid.getGlobalIndex(2,4,1)] = 0; - simCase.grid.resetACTNUM(actnum); - - auto conn1 = Opm::RestartIO::Helpers::AggregateConnectionData{ih.value}; - conn1.captureDeclaredConnData(simCase.sched, - simCase.grid, - simCase.es.getUnits(), - wrc, - rptStep - ); - - const std::size_t num_test_connections = 4; - - { - using IC = ::Opm::RestartIO::Helpers::VectorItems::IConn::index; - const auto iconn0 = conn0.getIConn(); - const auto iconn1 = conn1.getIConn(); - for (std::size_t conn_index = 0; conn_index < num_test_connections; conn_index++) { - std::size_t offset1 = conn_index * ih.niconz; - std::size_t offset0 = offset1; - - if (conn_index >= 2) - offset0 += ih.niconz; - - for (std::size_t elm_index = 0; elm_index < ih.niconz; elm_index++) { - if (elm_index == IC::SeqIndex && conn_index >= 2) { - // Comparing the connection ID - which should be different; - BOOST_CHECK_EQUAL(iconn1[offset1 + elm_index] + 1 , iconn0[offset0 + elm_index]); - } else - BOOST_CHECK_EQUAL(iconn1[offset1 + elm_index], iconn0[offset0 + elm_index]); - } - } - } - - - { - const auto sconn0 = conn0.getSConn(); - const auto sconn1 = conn1.getSConn(); - for (std::size_t conn_index = 0; conn_index < num_test_connections; conn_index++) { - std::size_t offset1 = conn_index * ih.nsconz; - std::size_t offset0 = offset1; - - if (conn_index >= 2) - offset0 += ih.nsconz; - - for (std::size_t elm_index = 0; elm_index < ih.nsconz; elm_index++) - BOOST_CHECK_EQUAL(sconn1[offset1 + elm_index], sconn0[offset0 + elm_index]); - } - } - - { - const auto xconn0 = conn0.getXConn(); - const auto xconn1 = conn1.getXConn(); - for (std::size_t conn_index = 0; conn_index < num_test_connections; conn_index++) { - std::size_t offset1 = conn_index * ih.nxconz; - std::size_t offset0 = offset1; - - if (conn_index >= 2) - offset0 += ih.nxconz; - - for (std::size_t elm_index = 0; elm_index < ih.nxconz; elm_index++) - BOOST_CHECK_EQUAL(xconn1[offset1 + elm_index], xconn0[offset0 + elm_index]); - } - } -} - -BOOST_AUTO_TEST_SUITE_END() diff --git a/ThirdParty/custom-opm-common/opm-common/tests/test_AggregateGroupData.cpp b/ThirdParty/custom-opm-common/opm-common/tests/test_AggregateGroupData.cpp deleted file mode 100644 index 83351f838b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/test_AggregateGroupData.cpp +++ /dev/null @@ -1,584 +0,0 @@ -/* - Copyright 2018 Statoil ASA - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#define BOOST_TEST_MODULE Aggregate_Group_Data -#include - -#include - -#include - -#include -#include -#include - -#include - -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include - -struct MockIH -{ - MockIH(const int numWells, - - const int igrpPerGrp = 101, // no of data elements per group in IGRP array - const int sgrpPerGrp = 112, // number of data elements per group in SGRP array - const int xgrpPerGrp = 180, // number of data elements per group in XGRP array - const int zgrpPerGrp = 5); // number of data elements per group in XGRP array - - - std::vector value; - - using Sz = std::vector::size_type; - - Sz nwells; - Sz nwgmax; - Sz ngmaxz; - Sz nigrpz; - Sz nsgrpz; - Sz nxgrpz; - Sz nzgrpz; -}; - -MockIH::MockIH(const int numWells, - const int igrpPerGrp, - const int sgrpPerGrp, - const int xgrpPerGrp, - const int zgrpPerGrp) - : value(411, 0) -{ - using Ix = ::Opm::RestartIO::Helpers::VectorItems::intehead; - - this->nwells = this->value[Ix::NWELLS] = numWells; - - this->ngmaxz = this->value[Ix::NGMAXZ] = 5; - this->nwgmax = this->value[Ix::NWGMAX] = 4; - this->nigrpz = this->value[Ix::NIGRPZ] = igrpPerGrp; - this->nsgrpz = this->value[Ix::NSGRPZ] = sgrpPerGrp; - this->nxgrpz = this->value[Ix::NXGRPZ] = xgrpPerGrp; - this->nzgrpz = this->value[Ix::NZGRPZ] = zgrpPerGrp; -} - -namespace { - Opm::Deck first_sim() - { - // Mostly copy of tests/FIRST_SIM.DATA - const std::string input = std::string { - R"~( -RUNSPEC - -TITLE -2 PRODUCERS AND INJECTORS, 2 WELL GROUPS AND ONE INTERMEDIATE GROUP LEVEL BELOW THE FIELD LEVEL - -DIMENS - 10 5 10 / - - -OIL - -WATER - -GAS - -DISGAS - -FIELD - -TABDIMS - 1 1 15 15 2 15 / - -EQLDIMS - 2 / - -WELLDIMS - 4 20 4 2 / - -UNIFIN -UNIFOUT - ---FMTIN ---FMTOUT - -START - 1 'JAN' 2015 / - --- RPTRUNSP - -GRID ========================================================= - ---NOGGF -BOX - 1 10 1 5 1 1 / - -TOPS -50*7000 / - -BOX -1 10 1 5 1 10 / - -DXV -10*100 / -DYV -5*100 / -DZV -2*20 100 7*20 / - -EQUALS --- 'DX' 100 / --- 'DY' 100 / - 'PERMX' 50 / - 'PERMZ' 5 / --- 'DZ' 20 / - 'PORO' 0.2 / --- 'TOPS' 7000 1 10 1 5 1 1 / --- 'DZ' 100 1 10 1 5 3 3 / --- 'PORO' 0.0 1 10 1 5 3 3 / - / - -COPY - PERMX PERMY / - / - -RPTGRID - -- Report Levels for Grid Section Data - -- - / - -PROPS ========================================================== - --- WATER RELATIVE PERMEABILITY AND CAPILLARY PRESSURE ARE TABULATED AS --- A FUNCTION OF WATER SATURATION. --- --- SWAT KRW PCOW -SWFN - - 0.12 0 0 - 1.0 0.00001 0 / - --- SIMILARLY FOR GAS --- --- SGAS KRG PCOG -SGFN - - 0 0 0 - 0.02 0 0 - 0.05 0.005 0 - 0.12 0.025 0 - 0.2 0.075 0 - 0.25 0.125 0 - 0.3 0.19 0 - 0.4 0.41 0 - 0.45 0.6 0 - 0.5 0.72 0 - 0.6 0.87 0 - 0.7 0.94 0 - 0.85 0.98 0 - 1.0 1.0 0 -/ - --- OIL RELATIVE PERMEABILITY IS TABULATED AGAINST OIL SATURATION --- FOR OIL-WATER AND OIL-GAS-CONNATE WATER CASES --- --- SOIL KROW KROG -SOF3 - - 0 0 0 - 0.18 0 0 - 0.28 0.0001 0.0001 - 0.38 0.001 0.001 - 0.43 0.01 0.01 - 0.48 0.021 0.021 - 0.58 0.09 0.09 - 0.63 0.2 0.2 - 0.68 0.35 0.35 - 0.76 0.7 0.7 - 0.83 0.98 0.98 - 0.86 0.997 0.997 - 0.879 1 1 - 0.88 1 1 / - - --- PVT PROPERTIES OF WATER --- --- REF. PRES. REF. FVF COMPRESSIBILITY REF VISCOSITY VISCOSIBILITY -PVTW - 4014.7 1.029 3.13D-6 0.31 0 / - --- ROCK COMPRESSIBILITY --- --- REF. PRES COMPRESSIBILITY -ROCK - 14.7 3.0D-6 / - --- SURFACE DENSITIES OF RESERVOIR FLUIDS --- --- OIL WATER GAS -DENSITY - 49.1 64.79 0.06054 / - --- PVT PROPERTIES OF DRY GAS (NO VAPOURISED OIL) --- WE WOULD USE PVTG TO SPECIFY THE PROPERTIES OF WET GAS --- --- PGAS BGAS VISGAS -PVDG - 14.7 166.666 0.008 - 264.7 12.093 0.0096 - 514.7 6.274 0.0112 - 1014.7 3.197 0.014 - 2014.7 1.614 0.0189 - 2514.7 1.294 0.0208 - 3014.7 1.080 0.0228 - 4014.7 0.811 0.0268 - 5014.7 0.649 0.0309 - 9014.7 0.386 0.047 / - --- PVT PROPERTIES OF LIVE OIL (WITH DISSOLVED GAS) --- WE WOULD USE PVDO TO SPECIFY THE PROPERTIES OF DEAD OIL --- --- FOR EACH VALUE OF RS THE SATURATION PRESSURE, FVF AND VISCOSITY --- ARE SPECIFIED. FOR RS=1.27 AND 1.618, THE FVF AND VISCOSITY OF --- UNDERSATURATED OIL ARE DEFINED AS A FUNCTION OF PRESSURE. DATA --- FOR UNDERSATURATED OIL MAY BE SUPPLIED FOR ANY RS, BUT MUST BE --- SUPPLIED FOR THE HIGHEST RS (1.618). --- --- RS POIL FVFO VISO -PVTO - 0.001 14.7 1.062 1.04 / - 0.0905 264.7 1.15 0.975 / - 0.18 514.7 1.207 0.91 / - 0.371 1014.7 1.295 0.83 / - 0.636 2014.7 1.435 0.695 / - 0.775 2514.7 1.5 0.641 / - 0.93 3014.7 1.565 0.594 / - 1.270 4014.7 1.695 0.51 - 5014.7 1.671 0.549 - 9014.7 1.579 0.74 / - 1.618 5014.7 1.827 0.449 - 9014.7 1.726 0.605 / -/ - - -RPTPROPS --- PROPS Reporting Options --- -/ - -REGIONS =========================================================== - - -FIPNUM - - 100*1 - 400*2 -/ - -EQLNUM - - 100*1 - 400*2 -/ - -RPTREGS - - / - -SOLUTION ============================================================ - -EQUIL - 7020.00 2700.00 7990.00 .00000 7020.00 .00000 0 0 5 / - 7200.00 3700.00 7300.00 .00000 7000.00 .00000 1 0 5 / - -RSVD 2 TABLES 3 NODES IN EACH FIELD 12:00 17 AUG 83 - 7000.0 1.0000 - 7990.0 1.0000 -/ - 7000.0 1.0000 - 7400.0 1.0000 -/ - -RPTRST --- Restart File Output Control --- -'BASIC=2' 'FLOWS' 'POT' 'PRES' / - - -SUMMARY =========================================================== - -FOPR - -WOPR - / - -FGPR - -FWPR - -FWIR - -FWCT - -FGOR - ---RUNSUM - -ALL - -MSUMLINS - -MSUMNEWT - -SEPARATE - -SCHEDULE =========================================================== - -DEBUG - 1 3 / - -DRSDT - 1.0E20 / - -RPTSCHED - 'PRES' 'SWAT' 'SGAS' 'RESTART=1' 'RS' 'WELLS=2' 'SUMMARY=2' - 'CPU=2' 'WELSPECS' 'NEWTON=2' / - -NOECHO - - -ECHO - -GRUPTREE - 'GRP1' 'FIELD' / - 'WGRP1' 'GRP1' / - 'WGRP2' 'GRP1' / -/ - -WELSPECS - 'PROD1' 'WGRP1' 1 5 7030 'OIL' 0.0 'STD' 'STOP' / - 'PROD2' 'WGRP2' 1 5 7030 'OIL' 0.0 'STD' 'STOP' / - 'WINJ1' 'WGRP1' 10 1 7030 'WAT' 0.0 'STD' 'STOP' / - 'WINJ2' 'WGRP2' 10 1 7030 'WAT' 0.0 'STD' 'STOP' / -/ - -COMPDAT - - 'PROD1' 1 5 2 2 3* 0.2 3* 'X' / - 'PROD1' 2 5 2 2 3* 0.2 3* 'X' / - 'PROD1' 3 5 2 2 3* 0.2 3* 'X' / - 'PROD2' 4 5 2 2 3* 0.2 3* 'X' / - 'PROD2' 5 5 2 2 3* 0.2 3* 'X' / - - 'WINJ1' 10 1 9 9 3* 0.2 3* 'X' / - 'WINJ1' 9 1 9 9 3* 0.2 3* 'X' / - 'WINJ1' 8 1 9 9 3* 0.2 3* 'X' / - 'WINJ2' 7 1 9 9 3* 0.2 3* 'X' / - 'WINJ2' 6 1 9 9 3* 0.2 3* 'X' / -/ - - -WCONPROD - 'PROD1' 'OPEN' 'LRAT' 3* 1200 1* 2500 1* / - 'PROD2' 'OPEN' 'LRAT' 3* 800 1* 2500 1* / - / - -WCONINJE - 'WINJ1' 'WAT' 'OPEN' 'BHP' 1* 1200 3500 1* / - 'WINJ2' 'WAT' 'OPEN' 'BHP' 1* 800 3500 1* / - / - - -TUNING - / - / - / - -TSTEP - 4 -/ - - -END - -)~" }; - - return Opm::Parser{}.parseString(input); - } - - Opm::SummaryState sim_state() - { - auto state = Opm::SummaryState{std::chrono::system_clock::now()}; - - state.update("GOPR:GRP1", 235.); - state.update("GGPR:GRP1", 100237.); - state.update("GWPR:GRP1", 239.); - - state.update("GOPR:WGRP1", 23.); - state.update("GGPR:WGRP1", 50237.); - state.update("GWPR:WGRP1", 29.); - - - state.update("GOPR:WGRP2", 43.); - state.update("GGPR:WGRP2", 70237.); - state.update("GWPR:WGRP2", 59.); - - state.update("FOPR", 3456.); - state.update("FGPR", 2003456.); - state.update("FWPR", 5678.); - - return state; - } -} - -struct SimulationCase -{ - explicit SimulationCase(const Opm::Deck& deck) - : es ( deck ) - , python( std::make_shared() ) - , sched (deck, es, python ) - {} - - // Order requirement: 'es' must be declared/initialised before 'sched'. - Opm::EclipseState es; - std::shared_ptr python; - Opm::Schedule sched; -}; - -// ===================================================================== - -BOOST_AUTO_TEST_SUITE(Aggregate_Group) - - -// test dimensions of multisegment data -BOOST_AUTO_TEST_CASE (Constructor) -{ - const auto ih = MockIH{ 5 }; - - const auto agrpd = Opm::RestartIO::Helpers::AggregateGroupData{ ih.value }; - - BOOST_CHECK_EQUAL(agrpd.getIGroup().size(), ih.ngmaxz * ih.nigrpz); - BOOST_CHECK_EQUAL(agrpd.getSGroup().size(), ih.ngmaxz * ih.nsgrpz); - BOOST_CHECK_EQUAL(agrpd.getXGroup().size(), ih.ngmaxz * ih.nxgrpz); - BOOST_CHECK_EQUAL(agrpd.getZGroup().size(), ih.ngmaxz * ih.nzgrpz); -} - - -BOOST_AUTO_TEST_CASE (Declared_Group_Data) -{ - const auto simCase = SimulationCase{first_sim()}; - - // Report Step 1: 2115-01-01 --> 2015-01-05 - const auto rptStep = std::size_t{1}; - - const auto ih = MockIH { - static_cast(simCase.sched.getWells(rptStep).size()) - }; - - BOOST_CHECK_EQUAL(ih.nwells, MockIH::Sz{4}); - - const auto smry = sim_state(); - const auto& units = simCase.es.getUnits(); - auto agrpd = Opm::RestartIO::Helpers::AggregateGroupData{ih.value}; - agrpd.captureDeclaredGroupData(simCase.sched, units, rptStep, smry, - ih.value); - - // IGRP (PROD) - { - auto start = 0*ih.nigrpz; - - const auto& iGrp = agrpd.getIGroup(); - BOOST_CHECK_EQUAL(iGrp[start + 0] , 2); // Group GRP1 - Child group number one - equal to group WGRP1 (no 2) - BOOST_CHECK_EQUAL(iGrp[start + 1] , 3); // Group GRP1 - Child group number two - equal to group WGRP2 (no 3) - BOOST_CHECK_EQUAL(iGrp[start + 4] , 2); // Group GRP1 - No of child groups - BOOST_CHECK_EQUAL(iGrp[start + ih.nwgmax + 26] , 1); // Group GRP1 - Group type (well group = 0, node group = 1) - BOOST_CHECK_EQUAL(iGrp[start + ih.nwgmax + 27] , 1); // Group GRP1 - Group level (FIELD level is 0) - BOOST_CHECK_EQUAL(iGrp[start + ih.nwgmax + 28] , 5); // Group GRP1 - index of parent group (= 0 for FIELD) - - start = 1*ih.nigrpz; - BOOST_CHECK_EQUAL(iGrp[start + 0] , 1); // Group WGRP1 - Child well number one - equal to well PROD1 (no 1) - BOOST_CHECK_EQUAL(iGrp[start + 1] , 3); // Group WGRP1 - Child well number two - equal to well WINJ1 (no 3) - BOOST_CHECK_EQUAL(iGrp[start + 4] , 2); // Group WGRP1 - No of child wells - BOOST_CHECK_EQUAL(iGrp[start + ih.nwgmax + 26] , 0); // Group WGRP1 - Group type (well group = 0, node group = 1) - BOOST_CHECK_EQUAL(iGrp[start + ih.nwgmax + 27] , 2); // Group WGRP1 - Group level (FIELD level is 0) - BOOST_CHECK_EQUAL(iGrp[start + ih.nwgmax + 28] , 1); // Group GRP1 - index of parent group (= 0 for FIELD) - - start = (ih.ngmaxz-1)*ih.nigrpz; - BOOST_CHECK_EQUAL(iGrp[start + 0] , 1); // Group FIELD - Child group number one - equal to group GRP1 - BOOST_CHECK_EQUAL(iGrp[start + 4] , 1); // Group FIELD - No of child groups - BOOST_CHECK_EQUAL(iGrp[start + ih.nwgmax + 26] , 1); // Group FIELD - Group type (well group = 0, node group = 1) - BOOST_CHECK_EQUAL(iGrp[start + ih.nwgmax + 27] , 0); // Group FIELD - Group level (FIELD level is 0) - } - - - // XGRP (PROD) - { - auto start = 0*ih.nxgrpz; - - const auto& xGrp = agrpd.getXGroup(); - BOOST_CHECK_EQUAL(xGrp[start + 0] , 235.); // Group GRP1 - GOPR - BOOST_CHECK_EQUAL(xGrp[start + 1] , 239.); // Group GRP1 - GWPR - BOOST_CHECK_EQUAL(xGrp[start + 2] , 100237.); // Group GRP1 - GGPR - - start = 1*ih.nxgrpz; - BOOST_CHECK_EQUAL(xGrp[start + 0] , 23.); // Group WGRP1 - GOPR - BOOST_CHECK_EQUAL(xGrp[start + 1] , 29.); // Group WGRP1 - GWPR - BOOST_CHECK_EQUAL(xGrp[start + 2] , 50237.); // Group WGRP1 - GGPR - - start = 2*ih.nxgrpz; - BOOST_CHECK_EQUAL(xGrp[start + 0] , 43.); // Group WGRP2 - GOPR - BOOST_CHECK_EQUAL(xGrp[start + 1] , 59.); // Group WGRP2 - GWPR - BOOST_CHECK_EQUAL(xGrp[start + 2] , 70237.); // Group WGRP2 - GGPR - - - start = (ih.ngmaxz-1)*ih.nxgrpz; - BOOST_CHECK_EQUAL(xGrp[start + 0] , 3456.); // Group FIELD - FOPR - BOOST_CHECK_EQUAL(xGrp[start + 1] , 5678.); // Group FIELD - FWPR - BOOST_CHECK_EQUAL(xGrp[start + 2] , 2003456.); // Group FIELD - FGPR - } - - // ZGRP (PROD) - { - auto start = 0*ih.nzgrpz; - - const auto& zGrp = agrpd.getZGroup(); - BOOST_CHECK_EQUAL(zGrp[start + 0].c_str() , "GRP1 "); // Group GRP1 - GOPR - - start = 1*ih.nzgrpz; - BOOST_CHECK_EQUAL(zGrp[start + 0].c_str() , "WGRP1 "); // Group WGRP1 - GOPR - - start = 2*ih.nzgrpz; - BOOST_CHECK_EQUAL(zGrp[start + 0].c_str() , "WGRP2 "); // Group WGRP2 - GOPR - - start = (ih.ngmaxz-1)*ih.nzgrpz; - BOOST_CHECK_EQUAL(zGrp[start + 0].c_str() , "FIELD "); // Group FIELD - FOPR - } - - -} - - -BOOST_AUTO_TEST_SUITE_END() diff --git a/ThirdParty/custom-opm-common/opm-common/tests/test_AggregateMSWData.cpp b/ThirdParty/custom-opm-common/opm-common/tests/test_AggregateMSWData.cpp deleted file mode 100644 index b805c86d18..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/test_AggregateMSWData.cpp +++ /dev/null @@ -1,854 +0,0 @@ -/* - Copyright 2018 Statoil ASA - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#define BOOST_TEST_MODULE Aggregate_MSW_Data -#include - -#include - -#include -#include - -#include -#include - -#include - -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include - -struct MockIH -{ - MockIH(const int numWells, - - const int nsegWell = 2, // E100 - const int isegPerWell = 22, // E100 - const int rsegPerWell = 146, // E100 - const int ilbsPerWell = 5, // E100 - const int ilbrPerWell = 10); // E100 - - - std::vector value; - - using Sz = std::vector::size_type; - - Sz nwells; - - Sz nsegwl; - Sz nswlmx; - Sz nsegmx; - Sz nlbrmx; - Sz nisegz; - Sz nrsegz; - Sz nilbrz; -}; - -MockIH::MockIH(const int numWells, - const int nsegWell, - const int isegPerWell, - const int rsegPerWell, - const int ilbsPerWell, - const int ilbrPerWell ) - : value(411, 0) -{ - using Ix = ::Opm::RestartIO::Helpers::VectorItems::intehead; - - this->nwells = this->value[Ix::NWELLS] = numWells; - - this->nsegwl = this->value[Ix::NSEGWL] = nsegWell; - this->nswlmx = this->value[Ix::NSWLMX] = 2; - this->nsegmx = this->value[Ix::NSEGMX] = 32; - this->nisegz = this->value[Ix::NISEGZ] = isegPerWell; - this->nrsegz = this->value[Ix::NRSEGZ] = rsegPerWell; - this->nlbrmx = this->value[Ix::NLBRMX] = ilbsPerWell; - this->nilbrz = this->value[Ix::NILBRZ] = ilbrPerWell; -} - -namespace { - Opm::Deck first_sim() - { - // Mostly copy of tests/FIRST_SIM.DATA - const std::string input = std::string { - R"~( -RUNSPEC - -TITLE - TWO MULTI-LATERAL WELLS; PRODUCER AND INJECTOR - MULTI-SEGMENT BRANCHES - -DIMENS - 10 5 10 / - - -OIL - -WATER - -GAS - -DISGAS - -FIELD - -TABDIMS - 1 1 15 15 2 15 / - -EQLDIMS - 2 / - -WELLDIMS - 3 20 1 3 / - -WSEGDIMS - 2 32 5 / - -UNIFIN -UNIFOUT - ---FMTIN ---FMTOUT - -START - 1 'JAN' 2015 / - --- RPTRUNSP - -GRID ========================================================= - ---NOGGF -BOX - 1 10 1 5 1 1 / - -TOPS -50*7000 / - -BOX -1 10 1 5 1 10 / - -DXV -10*100 / -DYV -5*100 / -DZV -2*20 100 7*20 / - -EQUALS --- 'DX' 100 / --- 'DY' 100 / - 'PERMX' 50 / - 'PERMZ' 5 / --- 'DZ' 20 / - 'PORO' 0.2 / --- 'TOPS' 7000 1 10 1 5 1 1 / --- 'DZ' 100 1 10 1 5 3 3 / --- 'PORO' 0.0 1 10 1 5 3 3 / - / - -COPY - PERMX PERMY / - / - -RPTGRID - -- Report Levels for Grid Section Data - -- - / - -PORO - 500*0.15 / - -PROPS ========================================================== - --- WATER RELATIVE PERMEABILITY AND CAPILLARY PRESSURE ARE TABULATED AS --- A FUNCTION OF WATER SATURATION. --- --- SWAT KRW PCOW -SWFN - - 0.12 0 0 - 1.0 0.00001 0 / - --- SIMILARLY FOR GAS --- --- SGAS KRG PCOG -SGFN - - 0 0 0 - 0.02 0 0 - 0.05 0.005 0 - 0.12 0.025 0 - 0.2 0.075 0 - 0.25 0.125 0 - 0.3 0.19 0 - 0.4 0.41 0 - 0.45 0.6 0 - 0.5 0.72 0 - 0.6 0.87 0 - 0.7 0.94 0 - 0.85 0.98 0 - 1.0 1.0 0 -/ - --- OIL RELATIVE PERMEABILITY IS TABULATED AGAINST OIL SATURATION --- FOR OIL-WATER AND OIL-GAS-CONNATE WATER CASES --- --- SOIL KROW KROG -SOF3 - - 0 0 0 - 0.18 0 0 - 0.28 0.0001 0.0001 - 0.38 0.001 0.001 - 0.43 0.01 0.01 - 0.48 0.021 0.021 - 0.58 0.09 0.09 - 0.63 0.2 0.2 - 0.68 0.35 0.35 - 0.76 0.7 0.7 - 0.83 0.98 0.98 - 0.86 0.997 0.997 - 0.879 1 1 - 0.88 1 1 / - - --- PVT PROPERTIES OF WATER --- --- REF. PRES. REF. FVF COMPRESSIBILITY REF VISCOSITY VISCOSIBILITY -PVTW - 4014.7 1.029 3.13D-6 0.31 0 / - --- ROCK COMPRESSIBILITY --- --- REF. PRES COMPRESSIBILITY -ROCK - 14.7 3.0D-6 / - --- SURFACE DENSITIES OF RESERVOIR FLUIDS --- --- OIL WATER GAS -DENSITY - 49.1 64.79 0.06054 / - --- PVT PROPERTIES OF DRY GAS (NO VAPOURISED OIL) --- WE WOULD USE PVTG TO SPECIFY THE PROPERTIES OF WET GAS --- --- PGAS BGAS VISGAS -PVDG - 14.7 166.666 0.008 - 264.7 12.093 0.0096 - 514.7 6.274 0.0112 - 1014.7 3.197 0.014 - 2014.7 1.614 0.0189 - 2514.7 1.294 0.0208 - 3014.7 1.080 0.0228 - 4014.7 0.811 0.0268 - 5014.7 0.649 0.0309 - 9014.7 0.386 0.047 / - --- PVT PROPERTIES OF LIVE OIL (WITH DISSOLVED GAS) --- WE WOULD USE PVDO TO SPECIFY THE PROPERTIES OF DEAD OIL --- --- FOR EACH VALUE OF RS THE SATURATION PRESSURE, FVF AND VISCOSITY --- ARE SPECIFIED. FOR RS=1.27 AND 1.618, THE FVF AND VISCOSITY OF --- UNDERSATURATED OIL ARE DEFINED AS A FUNCTION OF PRESSURE. DATA --- FOR UNDERSATURATED OIL MAY BE SUPPLIED FOR ANY RS, BUT MUST BE --- SUPPLIED FOR THE HIGHEST RS (1.618). --- --- RS POIL FVFO VISO -PVTO - 0.001 14.7 1.062 1.04 / - 0.0905 264.7 1.15 0.975 / - 0.18 514.7 1.207 0.91 / - 0.371 1014.7 1.295 0.83 / - 0.636 2014.7 1.435 0.695 / - 0.775 2514.7 1.5 0.641 / - 0.93 3014.7 1.565 0.594 / - 1.270 4014.7 1.695 0.51 - 5014.7 1.671 0.549 - 9014.7 1.579 0.74 / - 1.618 5014.7 1.827 0.449 - 9014.7 1.726 0.605 / -/ - - -RPTPROPS --- PROPS Reporting Options --- -/ - -REGIONS =========================================================== - - -FIPNUM - - 100*1 - 400*2 -/ - -EQLNUM - - 100*1 - 400*2 -/ - -RPTREGS - - / - -SOLUTION ============================================================ - -EQUIL - 7020.00 2700.00 7990.00 .00000 7020.00 .00000 0 0 5 / - 7200.00 3700.00 7300.00 .00000 7000.00 .00000 1 0 5 / - -RSVD 2 TABLES 3 NODES IN EACH FIELD 12:00 17 AUG 83 - 7000.0 1.0000 - 7990.0 1.0000 -/ - 7000.0 1.0000 - 7400.0 1.0000 -/ - -RPTRST --- Restart File Output Control --- -'BASIC=2' 'FLOWS' 'POT' 'PRES' / - ---RPTSOL --- --- Initialisation Print Output --- ---'PRES' 'SOIL' 'SWAT' 'SGAS' 'RS' 'RESTART=1' 'FIP=2' 'EQUIL' 'RSVD' / - -SUMMARY =========================================================== - -FOPR - -WOPR - 'PROD' - / - -FGPR - -FWPR - -FWIR - -FWCT - -FGOR - ---RUNSUM - -ALL - -MSUMLINS - -MSUMNEWT - -SEPARATE - -SCHEDULE =========================================================== - -DEBUG - 1 3 / - -DRSDT - 1.0E20 / - -RPTSCHED - 'PRES' 'SWAT' 'SGAS' 'RESTART=1' 'RS' 'WELLS=2' 'SUMMARY=2' - 'CPU=2' 'WELSPECS' 'NEWTON=2' / - -NOECHO - - -ECHO - -WELSPECS - 'PROD' 'G' 1 5 7030 'OIL' 0.0 'STD' 'STOP' / - 'WINJ' 'G' 10 1 7030 'WAT' 0.0 'STD' 'STOP' / -/ - -COMPDAT - - 'PROD' 1 5 2 2 3* 0.2 3* 'X' / - 'PROD' 2 5 2 2 3* 0.2 3* 'X' / - 'PROD' 3 5 2 2 3* 0.2 3* 'X' / - 'PROD' 4 5 2 2 3* 0.2 3* 'X' / - 'PROD' 5 5 2 2 3* 0.2 3* 'X' / - -'WINJ' 10 1 9 9 3* 0.2 3* 'X' / - 'WINJ' 9 1 9 9 3* 0.2 3* 'X' / - 'WINJ' 8 1 9 9 3* 0.2 3* 'X' / - 'WINJ' 7 1 9 9 3* 0.2 3* 'X' / - 'WINJ' 6 1 9 9 3* 0.2 3* 'X' / -/ - -WELSEGS - --- Name Dep 1 Tlen 1 Vol 1 - 'PROD' 7010 10 0.31 'INC' / - --- First Last Branch Outlet Length Depth Diam Ruff Area Vol --- Seg Seg Num Seg Chang --- Main Stem - 2 12 1 1 20 20 0.2 1.E-3 1* 1* / --- Top Branch - 13 13 2 3 50 0 0.2 1.E-3 1* 1* / - 14 17 2 13 100 0 0.2 1.E-3 1* 1* / - / - -COMPSEGS - --- Name - 'PROD' / - --- I J K Brn Start End Dirn End --- No Length Length Penet Range --- Top Branch - 1 5 2 2 30 130 'X' 3* / - 2 5 2 2 130 230 'X' 3* / - 3 5 2 2 230 330 'X' 3* / - 4 5 2 2 330 430 'X' 3* / - 5 5 2 2 430 530 'X' 3* / --- Middle Branch - / - -WELSEGS - --- Name Dep 1 Tlen 1 Vol 1 - 'WINJ' 7010 10 0.31 'INC' / - --- First Last Branch Outlet Length Depth Diam Ruff Area Vol --- Seg Seg Num Seg Chang --- Main Stem - 2 14 1 1 20 20 0.2 1.E-3 1* 1* / - --- Bottom Branch - 15 15 2 14 50 0 0.2 1.E-3 1* 1* / - 16 19 2 15 100 0 0.2 1.E-3 1* 1* / - / - -COMPSEGS - --- Name - 'WINJ' / - --- I J K Brn Start End Dirn End --- No Length Length Penet Range - --- Bottom Branch - 10 1 9 2 270 370 'X' 3* / - 9 1 9 2 370 470 'X' 3* / - 8 1 9 2 470 570 'X' 3* / - 7 1 9 2 570 670 'X' 3* / - 6 1 9 2 670 770 'X' 3* / - / - - -WCONPROD - 'PROD' 'OPEN' 'LRAT' 3* 2000 1* 2500 1* / - / - -WCONINJE - 'WINJ' 'WAT' 'OPEN' 'RESV' 1* 2000 3500 1* / - / - - -TUNING - / - / - / - -TSTEP - 2 2 -/ - - -END - - -)~" }; - - return Opm::Parser{}.parseString(input); - } - - Opm::SummaryState sim_state() - { - auto state = Opm::SummaryState{std::chrono::system_clock::now()}; - - state.update("SPR:PROD:1", 235.); - state.update("SPR:PROD:2", 237.); - state.update("SPR:PROD:3", 239.); - state.update("SPR:PROD:4", 243.); - - state.update("SOFR:PROD:1", 35.); - state.update("SOFR:PROD:2", 30.); - state.update("SOFR:PROD:3", 25.); - state.update("SOFR:PROD:4", 20.); - - state.update("SGFR:PROD:1", 25.E3); - state.update("SGFR:PROD:2", 20.E3); - state.update("SGFR:PROD:3", 15.E3); - state.update("SGFR:PROD:4", 10.E3); - - state.update("SWFR:PROD:1", 11.); - state.update("SWFR:PROD:2", 12.); - state.update("SWFR:PROD:3", 13.); - state.update("SWFR:PROD:4", 14.); - - state.update("SPR:WINJ:1", 310.); - state.update("SPR:WINJ:2", 320.); - state.update("SPR:WINJ:3", 330.); - state.update("SPR:WINJ:4", 340.); - - state.update("SWFR:WINJ:1", 21.); - state.update("SWFR:WINJ:2", 22.); - state.update("SWFR:WINJ:3", 23.); - state.update("SWFR:WINJ:4", 24.); - - state.update("WBHP:WINJ", 234.); - return state; - } - Opm::data::WellRates wr() - { - using o = ::Opm::data::Rates::opt; - - auto xw = ::Opm::data::WellRates{}; - - { - xw["PROD"].rates - .set(o::wat, 1.0) - .set(o::oil, 2.0) - .set(o::gas, 3.0); - xw["PROD"].bhp = 213.0; - double qo = 5.; - double qw = 4.; - double qg = 50.; - for (int i = 0; i < 5; i++) { - xw["PROD"].connections.emplace_back(); - auto& c = xw["PROD"].connections.back(); - - c.rates.set(o::wat, qw*(float(i)+1.)) - .set(o::oil, qo*(float(i)+1.)) - .set(o::gas, qg*(float(i)+1.)); - } - auto seg = Opm::data::Segment{}; - for (std::size_t i = 1; i < 5; i++) { - xw["PROD"].segments.insert(std::pair(i,seg)); - } - xw["WINJ"].bhp = 234.0; - - xw["WINJ"].rates.set(o::wat, 5.0); - xw["WINJ"].rates.set(o::oil, 0.0); - xw["WINJ"].rates.set(o::gas, 0.0); - qw = 7.; - for (int i = 0; i < 5; i++) { - xw["WINJ"].connections.emplace_back(); - auto& c = xw["WINJ"].connections.back(); - - c.rates.set(o::wat, qw*(float(i)+1.)) - .set(o::oil, 0.) - .set(o::gas, 0.); - } - } - return xw; - } -} - -struct SimulationCase -{ - explicit SimulationCase(const Opm::Deck& deck) - : es ( deck ) - , grid ( deck ) - , python( std::make_shared() ) - , sched( deck, es, python ) - {} - - // Order requirement: 'es' must be declared/initialised before 'sched'. - Opm::EclipseState es; - Opm::EclipseGrid grid; - std::shared_ptr python; - Opm::Schedule sched; -}; - -// ===================================================================== - -BOOST_AUTO_TEST_SUITE(Aggregate_MSW) - - -// test dimensions of multisegment data -BOOST_AUTO_TEST_CASE (Constructor) -{ - const auto ih = MockIH{ 5 }; - - const auto amswd = Opm::RestartIO::Helpers::AggregateMSWData{ ih.value }; - - BOOST_CHECK_EQUAL(amswd.getISeg().size(), ih.nswlmx * ih.nsegmx * ih.nisegz); - BOOST_CHECK_EQUAL(amswd.getRSeg().size(), ih.nswlmx * ih.nsegmx * ih.nrsegz); - BOOST_CHECK_EQUAL(amswd.getILBs().size(), ih.nswlmx * ih.nlbrmx); - BOOST_CHECK_EQUAL(amswd.getILBr().size(), ih.nswlmx * ih.nlbrmx * ih.nilbrz); -} - - -BOOST_AUTO_TEST_CASE (Declared_MSW_Data) -{ - const auto simCase = SimulationCase{first_sim()}; - - // Report Step 1: 2115-01-01 --> 2015-01-03 - const auto rptStep = std::size_t{1}; - - const auto ih = MockIH { - static_cast(simCase.sched.getWells(rptStep).size()) - }; - - BOOST_CHECK_EQUAL(ih.nwells, MockIH::Sz{2}); - - const auto smry = sim_state(); - const Opm::data::WellRates wrc = wr(); - auto amswd = Opm::RestartIO::Helpers::AggregateMSWData{ih.value}; - amswd.captureDeclaredMSWData(simCase.sched, - rptStep, - simCase.es.getUnits(), - ih.value, - simCase.grid, - smry, - wrc - ); - - // ISEG (PROD) - { - auto start = 2*ih.nisegz; - - const auto& iSeg = amswd.getISeg(); - BOOST_CHECK_EQUAL(iSeg[start + 0] , 15); // PROD-segment 3, ordered segment - BOOST_CHECK_EQUAL(iSeg[start + 1] , 2); // PROD-segment 3, outlet segment - BOOST_CHECK_EQUAL(iSeg[start + 2] , 4); // PROD-segment 3, inflow segment current branch - BOOST_CHECK_EQUAL(iSeg[start + 3] , 1); // PROD-segment 3, branch number - BOOST_CHECK_EQUAL(iSeg[start + 4] , 1); // PROD-segment 3, number of inflow branches - BOOST_CHECK_EQUAL(iSeg[start + 5] , 1); // PROD-segment 3, Sum number of inflow branches from first segment to current segment - BOOST_CHECK_EQUAL(iSeg[start + 6] , 0); // PROD-segment 3, number of connections in segment - BOOST_CHECK_EQUAL(iSeg[start + 7] , 0); // PROD-segment 3, sum of connections with lower segmeent number than current segment - BOOST_CHECK_EQUAL(iSeg[start + 8] , 15); // PROD-segment 3, ordered segment - - start = 13*ih.nisegz; - - BOOST_CHECK_EQUAL(iSeg[start + 0] , 4); // PROD-segment 14, ordered segment - BOOST_CHECK_EQUAL(iSeg[start + 1] , 13); // PROD-segment 14, outlet segment - BOOST_CHECK_EQUAL(iSeg[start + 2] , 15); // PROD-segment 14, inflow segment current branch - BOOST_CHECK_EQUAL(iSeg[start + 3] , 2); // PROD-segment 14, branch number - BOOST_CHECK_EQUAL(iSeg[start + 4] , 0); // PROD-segment 14, number of inflow branches - BOOST_CHECK_EQUAL(iSeg[start + 5] , 0); // PROD-segment 14, Sum number of inflow branches from first segment to current segment - BOOST_CHECK_EQUAL(iSeg[start + 6] , 1); // PROD-segment 14, number of connections in segment - BOOST_CHECK_EQUAL(iSeg[start + 7] , 2); // PROD-segment 14, sum of connections with lower segmeent number than current segment - BOOST_CHECK_EQUAL(iSeg[start + 8] , 4); // PROD-segment 14, ordered segment - - } - - // ISEG (WINJ) - { - auto start = ih.nisegz*ih.nsegmx + 13*ih.nisegz; - - const auto& iSeg = amswd.getISeg(); - BOOST_CHECK_EQUAL(iSeg[start + 0] , 6); // WINJ-segment 14, ordered segment - BOOST_CHECK_EQUAL(iSeg[start + 1] , 13); // WINJ-segment 14, outlet segment - BOOST_CHECK_EQUAL(iSeg[start + 2] , 0); // WINJ-segment 14, inflow segment current branch - BOOST_CHECK_EQUAL(iSeg[start + 3] , 1); // WINJ-segment 14, branch number - BOOST_CHECK_EQUAL(iSeg[start + 4] , 1); // WINJ-segment 14, number of inflow branches - BOOST_CHECK_EQUAL(iSeg[start + 5] , 1); // WINJ-segment 14, Sum number of inflow branches from first segment to current segment - BOOST_CHECK_EQUAL(iSeg[start + 6] , 0); // WINJ-segment 14, number of connections in segment - BOOST_CHECK_EQUAL(iSeg[start + 7] , 0); // WINJ-segment 14, sum of connections with lower segmeent number than current segment - BOOST_CHECK_EQUAL(iSeg[start + 8] , 6); // WINJ-segment 14, ordered segment - - start = ih.nisegz*ih.nsegmx + 16*ih.nisegz; - BOOST_CHECK_EQUAL(iSeg[start + 0] , 3); // WINJ-segment 17, ordered segment - BOOST_CHECK_EQUAL(iSeg[start + 1] , 16); // WINJ-segment 17, outlet segment - BOOST_CHECK_EQUAL(iSeg[start + 2] , 18); // WINJ-segment 17, inflow segment current branch - BOOST_CHECK_EQUAL(iSeg[start + 3] , 2); // WINJ-segment 17, branch number - BOOST_CHECK_EQUAL(iSeg[start + 4] , 0); // WINJ-segment 17, number of inflow branches - BOOST_CHECK_EQUAL(iSeg[start + 5] , 0); // WINJ-segment 17, Sum number of inflow branches from first segment to current segment - BOOST_CHECK_EQUAL(iSeg[start + 6] , 1); // WINJ-segment 17, number of connections in segment - BOOST_CHECK_EQUAL(iSeg[start + 7] , 3); // WINJ-segment 17, sum of connections with lower segmeent number than current segment - BOOST_CHECK_EQUAL(iSeg[start + 8] , 3); // WINJ-segment 17, ordered segment - - } - - // RSEG (PROD) + (WINJ) - { - // well no 1 - PROD - const std::string wname = "PROD"; - int segNo = 1; - // 'stringSegNum' is one-based (1 .. #segments inclusive) - std::string stringSegNo = std::to_string(segNo); - - const auto i0 = (segNo-1)*ih.nrsegz; - const auto& units = simCase.es.getUnits(); - const auto gfactor = (units.getType() == Opm::UnitSystem::UnitType::UNIT_TYPE_FIELD) - ? 0.1781076 : 0.001; - const auto& rseg = amswd.getRSeg(); - - BOOST_CHECK_CLOSE(rseg[i0 ], 10. , 1.0e-10); - BOOST_CHECK_CLOSE(rseg[i0 + 1], 7010. , 1.0e-10); - BOOST_CHECK_CLOSE(rseg[i0 + 5], 0.31 , 1.0e-10); - BOOST_CHECK_CLOSE(rseg[i0 + 6], 10. , 1.0e-10); - BOOST_CHECK_CLOSE(rseg[i0 + 7], 7010. , 1.0e-10); - - const double temp_o = smry.get("SOFR:PROD:1"); - const double temp_w = smry.get("SWFR:PROD:1")*0.1; - const double temp_g = smry.get("SGFR:PROD:1")*gfactor; - - auto t0 = temp_o + temp_w + temp_g; - double t1 = (std::abs(temp_w) > 0) ? temp_w / t0 : 0.; - double t2 = (std::abs(temp_g) > 0) ? temp_g / t0 : 0.; - - BOOST_CHECK_CLOSE(rseg[i0 + 8], t0, 1.0e-10); - BOOST_CHECK_CLOSE(rseg[i0 + 9], t1, 1.0e-10); - BOOST_CHECK_CLOSE(rseg[i0 + 10], t2, 1.0e-10); - BOOST_CHECK_CLOSE(rseg[i0 + 11], 235., 1.0e-10); - } - - { - // well no 2 - WINJ - const std::string wname = "WINJ"; - int segNo = 1; - // 'stringSegNum' is one-based (1 .. #segments inclusive) - std::string stringSegNo = std::to_string(segNo); - - const auto i0 = ih.nrsegz*ih.nsegmx + (segNo-1)*ih.nrsegz; - const auto& units = simCase.es.getUnits(); - using M = ::Opm::UnitSystem::measure; - const auto gfactor = (units.getType() == Opm::UnitSystem::UnitType::UNIT_TYPE_FIELD) - ? 0.1781076 : 0.001; - const auto& rseg = amswd.getRSeg(); - - BOOST_CHECK_CLOSE(rseg[i0 ], 10. , 1.0e-10); - BOOST_CHECK_CLOSE(rseg[i0 + 1], 7010. , 1.0e-10); - BOOST_CHECK_CLOSE(rseg[i0 + 5], 0.31 , 1.0e-10); - BOOST_CHECK_CLOSE(rseg[i0 + 6], 10. , 1.0e-10); - BOOST_CHECK_CLOSE(rseg[i0 + 7], 7010. , 1.0e-10); - - const double temp_o = 0.; - const double temp_w = -units.from_si(M::liquid_surface_rate,105.)*0.1; - const double temp_g = 0.0*gfactor; - - auto t0 = temp_o + temp_w + temp_g; - double t1 = (std::abs(temp_w) > 0) ? temp_w / t0 : 0.; - double t2 = (std::abs(temp_g) > 0) ? temp_g / t0 : 0.; - - BOOST_CHECK_CLOSE(rseg[i0 + 8], t0, 1.0e-10); - BOOST_CHECK_CLOSE(rseg[i0 + 9], t1, 1.0e-10); - BOOST_CHECK_CLOSE(rseg[i0 + 10], t2, 1.0e-10); - BOOST_CHECK_CLOSE(rseg[i0 + 11], 234., 1.0e-10); - - } - - // ILBR - { - auto start = 0*ih.nilbrz; - - const auto& iLBr = amswd.getILBr(); - //PROD - BOOST_CHECK_EQUAL(iLBr[start + 0] , 0); // PROD-branch 1, outlet segment - BOOST_CHECK_EQUAL(iLBr[start + 1] , 12); // PROD-branch 1, No of segments in branch - BOOST_CHECK_EQUAL(iLBr[start + 2] , 1); // PROD-branch 1, first segment - BOOST_CHECK_EQUAL(iLBr[start + 3] , 12); // PROD-branch 1, last segment - BOOST_CHECK_EQUAL(iLBr[start + 4] , 0); // PROD-branch 1, branch no - 1 - //PROD - start = 1*ih.nilbrz; - BOOST_CHECK_EQUAL(iLBr[start + 0] , 3); // PROD-branch 2, outlet segment - BOOST_CHECK_EQUAL(iLBr[start + 1] , 5); // PROD-branch 2, No of segments in branch - BOOST_CHECK_EQUAL(iLBr[start + 2] , 13); // PROD-branch 2, first segment - BOOST_CHECK_EQUAL(iLBr[start + 3] , 17); // PROD-branch 2, last segment - BOOST_CHECK_EQUAL(iLBr[start + 4] , 1); // PROD-branch 2, branch no - 1 - - - start = ih.nilbrz*ih.nlbrmx + 0*ih.nilbrz; - //WINJ - BOOST_CHECK_EQUAL(iLBr[start + 0] , 0); // WINJ-branch 1, outlet segment - BOOST_CHECK_EQUAL(iLBr[start + 1] , 14); // WINJ-branch 1, No of segments in branch - BOOST_CHECK_EQUAL(iLBr[start + 2] , 1); // WINJ-branch 1, first segment - BOOST_CHECK_EQUAL(iLBr[start + 3] , 14); // WINJ-branch 1, last segment - BOOST_CHECK_EQUAL(iLBr[start + 4] , 0); // WINJ-branch 1, branch no - 1 - - start = ih.nilbrz*ih.nlbrmx + 1*ih.nilbrz; - //WINJ - BOOST_CHECK_EQUAL(iLBr[start + 0] , 14); // WINJ-branch 2, outlet segment - BOOST_CHECK_EQUAL(iLBr[start + 1] , 5); // WINJ-branch 2, No of segments in branch - BOOST_CHECK_EQUAL(iLBr[start + 2] , 15); // WINJ-branch 2, first segment - BOOST_CHECK_EQUAL(iLBr[start + 3] , 19); // WINJ-branch 2, last segment - BOOST_CHECK_EQUAL(iLBr[start + 4] , 1); // WINJ-branch 2, branch no - 1 - - - } - - // ILBS - { - auto start = 0*ih.nlbrmx; - - const auto& iLBs = amswd.getILBs(); - //PROD - BOOST_CHECK_EQUAL(iLBs[start + 0] , 13); // PROD-branch 2, first segment in branch - - start = ih.nlbrmx + 0*ih.nlbrmx; - //WINJ - BOOST_CHECK_EQUAL(iLBs[start + 0] , 15); // WINJ-branch 2, first segment in branch - - } -} - - -BOOST_AUTO_TEST_CASE(MSW_RST) { - const auto simCase = SimulationCase{first_sim()}; - - // Report Step 1: 2115-01-01 --> 2015-01-03 - const auto rptStep = std::size_t{1}; - - const auto ih = MockIH { - static_cast(simCase.sched.getWells(rptStep).size()) - }; - - const auto smry = sim_state(); - const Opm::data::WellRates wrc = wr(); - auto amswd = Opm::RestartIO::Helpers::AggregateMSWData{ih.value}; - amswd.captureDeclaredMSWData(simCase.sched, - rptStep, - simCase.es.getUnits(), - ih.value, - simCase.grid, - smry, - wrc - ); - const auto& iseg = amswd.getISeg(); - const auto& rseg = amswd.getRSeg(); - auto segment = Opm::RestartIO::RstSegment(simCase.es.getUnits(), 1, iseg.data(), rseg.data()); -} - - - -BOOST_AUTO_TEST_SUITE_END() diff --git a/ThirdParty/custom-opm-common/opm-common/tests/test_AggregateUDQData.cpp b/ThirdParty/custom-opm-common/opm-common/tests/test_AggregateUDQData.cpp deleted file mode 100644 index c20b603c4d..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/test_AggregateUDQData.cpp +++ /dev/null @@ -1,455 +0,0 @@ -#define BOOST_TEST_MODULE UDQ_Data - -#include - -#include -#include -#include -#include -#include - -#include -#include - -#include -#include -#include -#include - -#include -#include -#include -#include - -//#include -//#include - -#include -#include - -#include - -#include -#include -#include -#include -#include -#include - -namespace { - - Opm::Deck first_sim(std::string fname) { - return Opm::Parser{}.parseFile(fname); - } - /* - Opm::UDQActive udq_active() { - int update_count = 0; - // construct record data for udq_active - Opm::UDQParams params; - Opm::UDQConfig conf(params); - Opm::UDQActive udq_act; - Opm::UDAValue uda1("WUOPRL"); - update_count += udq_act.update(conf, uda1, "PROD1", Opm::UDAControl::WCONPROD_ORAT); - - Opm::UDAValue uda2("WULPRL"); - update_count += udq_act.update(conf, uda2, "PROD1", Opm::UDAControl::WCONPROD_LRAT); - Opm::UDAValue uda3("WUOPRU"); - update_count += udq_act.update(conf, uda3, "PROD2", Opm::UDAControl::WCONPROD_ORAT); - Opm::UDAValue uda4("WULPRU"); - update_count += udq_act.update(conf, uda4, "PROD2", Opm::UDAControl::WCONPROD_LRAT); - - for (std::size_t index=0; index < udq_act.IUAD_size(); index++) - { - const auto & record = udq_act[index]; - auto ind = record.input_index; - auto udq_key = record.udq; - auto name = record.wgname; - auto ctrl_type = record.control; - } - return udq_act; - } - */ -} - - Opm::SummaryState sum_state() - { - auto state = Opm::SummaryState{std::chrono::system_clock::now()}; - state.update_well_var("PROD1", "WUOPRL", 210.); - state.update_well_var("PROD2", "WUOPRL", 211.); - state.update_well_var("WINJ1", "WUOPRL", 212.); - state.update_well_var("WINJ2", "WUOPRL", 213.); - - state.update_well_var("PROD1", "WULPRL", 230.); - state.update_well_var("PROD2", "WULPRL", 231.); - state.update_well_var("WINJ1", "WULPRL", 232.); - state.update_well_var("WINJ2", "WULPRL", 233.); - - state.update_well_var("PROD1", "WUOPRU", 220.); - state.update_well_var("PROD2", "WUOPRU", 221.); - state.update_well_var("WINJ1", "WUOPRU", 222.); - state.update_well_var("WINJ2", "WUOPRU", 223.); - - state.update_group_var("WGRP1", "GUOPRU", 360.); - state.update_group_var("WGRP2", "GUOPRU", 361.); - state.update_group_var("GRP1", "GUOPRU", 362.); - - state.update_well_var("PROD1", "WULPRU", 160.); - state.update_well_var("PROD2", "WULPRU", 161.); - state.update_well_var("WINJ1", "WULPRU", 162.); - state.update_well_var("WINJ2", "WULPRU", 163.); - - state.update("FULPR", 460.); - - return state; - } - - -//int main(int argc, char* argv[]) -struct SimulationCase -{ - explicit SimulationCase(const Opm::Deck& deck) - : es { deck } - , grid { deck } - , python { std::make_shared()} - , sched{ deck, es, python } - {} - - // Order requirement: 'es' must be declared/initialised before 'sched'. - Opm::EclipseState es; - Opm::EclipseGrid grid; - std::shared_ptr python; - Opm::Schedule sched; - -}; - -BOOST_AUTO_TEST_SUITE(Aggregate_UDQ) - - - -// test constructed UDQ restart data -BOOST_AUTO_TEST_CASE (Declared_UDQ_data) -{ - const auto simCase = SimulationCase{first_sim("UDQ_TEST_WCONPROD_IUAD-2.DATA")}; - - Opm::EclipseState es = simCase.es; - Opm::SummaryState st = sum_state(); - Opm::Schedule sched = simCase.sched; - Opm::EclipseGrid grid = simCase.grid; - const auto& ioConfig = es.getIOConfig(); - //const auto& restart = es.cfg().restart(); - - // Report Step 1: 2008-10-10 --> 2011-01-20 - const auto rptStep = std::size_t{1}; - - std::string outputDir = "./"; - std::string baseName = "TEST_UDQRST"; - Opm::EclIO::OutputStream::Restart rstFile { - Opm::EclIO::OutputStream::ResultSet { outputDir, baseName }, - rptStep, - Opm::EclIO::OutputStream::Formatted { ioConfig.getFMTOUT() }, - Opm::EclIO::OutputStream::Unified { ioConfig.getUNIFOUT() } - }; - - double secs_elapsed = 3.1536E07; - const auto ih = Opm::RestartIO::Helpers:: - createInteHead(es, grid, sched, secs_elapsed, - rptStep, rptStep, rptStep); - - //set dummy value for next_step_size - const double next_step_size= 0.1; - const auto dh = Opm::RestartIO::Helpers::createDoubHead(es, sched, rptStep, - secs_elapsed, next_step_size); - - const auto udqDims = Opm::RestartIO::Helpers::createUdqDims(sched, rptStep, ih); - auto udqData = Opm::RestartIO::Helpers::AggregateUDQData(udqDims); - udqData.captureDeclaredUDQData(sched, rptStep, st, ih); - - rstFile.write("ZUDN", udqData.getZUDN()); - rstFile.write("ZUDL", udqData.getZUDL()); - rstFile.write("IUDQ", udqData.getIUDQ()); - rstFile.write("DUDF", udqData.getDUDF()); - rstFile.write("DUDG", udqData.getDUDG()); - rstFile.write("DUDW", udqData.getDUDW()); - rstFile.write("IUAD", udqData.getIUAD()); - rstFile.write("IUAP", udqData.getIUAP()); - rstFile.write("IGPH", udqData.getIGPH()); - - { - /* - Check of InteHEAD and DoubHEAD data for UDQ variables - - INTEHEAD - - UDQPARAM (1) = - InteHead [267 ] - - --------------------------------------------------------------------------------------------------------------------- - - DOUBHEAD - - UDQPARAM (2) = Doubhead [212] - UDQPARAM (3) = Doubhead [213] - UDQPARAM (4) = Doubhead [214] - - */ - - BOOST_CHECK_EQUAL(ih[267] , -1); - BOOST_CHECK_EQUAL(dh[212] , 1.0E+20); - BOOST_CHECK_EQUAL(dh[213] , 0.0); - BOOST_CHECK_EQUAL(dh[214] , 1.0E-4); - - } - - - { - /* - IUDQ - 3- integers pr UDQ (line/quantity) - - Integer no 1 = type of UDQ ( 0 - ASSIGN, UPDATE-OFF - 1-update+NEXT, - 2 - DEFINE, 2- UPDATE-ON - 3 - units) - - Integer no 2 = -4 : used for ASSIGN - numerical value - -4 : used for DEFINE - -1 : used for DEFINE MIN() function, SUM() function, AVEA() function - -4 : used for DEFINE MAX() - function - also used for SUM() function - must check on (-1 - value) - 1 : used for UPDATE quantity - - Integer no 3 = sequence number of UDQ pr type (CU, FU, GU, RU, , SU, WU, AU or BU etc.) - (1 - based) - - NOTE: UPDATE - does not define a new quantity, only updates an alredy defined quantity! - */ - - - const auto& iUdq = udqData.getIUDQ(); - - auto start = 0*udqDims[1]; - BOOST_CHECK_EQUAL(iUdq[start + 0] , 2); // udq NO. 1 - ( 0 - ASSIGN, 2 - DEFINE) - BOOST_CHECK_EQUAL(iUdq[start + 1] , -4); // udq NO. 1 - (-4 - DEFINE / ASSIGN - BOOST_CHECK_EQUAL(iUdq[start + 2] , 1); // udq NO. 1 - (sequence number of UDQ pr type (CU, FU, GU, RU, , SU, WU, AU or BU etc.) - - start = 1*udqDims[1]; - BOOST_CHECK_EQUAL(iUdq[start + 0] , 0); // udq NO. 2 - ( 0 - ASSIGN, 2 - DEFINE) - BOOST_CHECK_EQUAL(iUdq[start + 1] , -4); // udq NO. 2 - (-4 - DEFINE / ASSIGN - BOOST_CHECK_EQUAL(iUdq[start + 2] , 2); // udq NO. 2 - (sequence number of UDQ pr type (CU, FU, GU, RU, , SU, WU, AU or BU etc.) - - start = 2*udqDims[1]; - BOOST_CHECK_EQUAL(iUdq[start + 0] , 2); // udq NO. 2 - ( 0 - ASSIGN, 2 - DEFINE) - BOOST_CHECK_EQUAL(iUdq[start + 1] , -4); // udq NO. 2 - (-4 - DEFINE / ASSIGN - BOOST_CHECK_EQUAL(iUdq[start + 2] , 3); // udq NO. 2 - (sequence number of UDQ pr type (CU, FU, GU, RU, , SU, WU, AU or BU etc.) - - start = 3*udqDims[1]; - BOOST_CHECK_EQUAL(iUdq[start + 0] , 2); // udq NO. 2 - ( 0 - ASSIGN, 2 - DEFINE) - BOOST_CHECK_EQUAL(iUdq[start + 1] , -4); // udq NO. 2 - (-4 - DEFINE / ASSIGN - BOOST_CHECK_EQUAL(iUdq[start + 2] , 1); // udq NO. 2 - (sequence number of UDQ pr type (CU, FU, GU, RU, , SU, WU, AU or BU etc.) - - start = 4*udqDims[1]; - BOOST_CHECK_EQUAL(iUdq[start + 0] , 2); // udq NO. 2 - ( 0 - ASSIGN, 2 - DEFINE) - BOOST_CHECK_EQUAL(iUdq[start + 1] , -4); // udq NO. 2 - (-4 - DEFINE / ASSIGN - BOOST_CHECK_EQUAL(iUdq[start + 2] , 4); // udq NO. 2 - (sequence number of UDQ pr type (CU, FU, GU, RU, , SU, WU, AU or BU etc.) - - start = 5*udqDims[1]; - BOOST_CHECK_EQUAL(iUdq[start + 0] , 2); // udq NO. 2 - ( 0 - ASSIGN, 2 - DEFINE) - BOOST_CHECK_EQUAL(iUdq[start + 1] , -4); // udq NO. 2 - (-4 - DEFINE / ASSIGN - BOOST_CHECK_EQUAL(iUdq[start + 2] , 1); // udq NO. 2 - (sequence number of UDQ pr type (CU, FU, GU, RU, , SU, WU, AU or BU etc.) - - } - - { - /* - IUAD: - Sequences of 5 items pr UDQ that is used for various well and group controls, - i.e. sorted on the various active controls, see list for item (1).This means that - one udq can occur several times, one for each control it is used for - Only the active controls are output - and the sequence is according to when - they are defined - - dimension 5*no_of_udq-constraint-used in well and group controls - - item (1) : = 200000 + 19 for GCONPROD and ORAT - 300000 + 19 for GCONPROD and WRAT - 400000 + 19 for GCONPROD and GRAT - 500000 + 19 for GCONPROD and LRAT - 300000 + 4 for WCONPROD + oil rate target or upper limit - 400000 + 4 for WCONPROD + water rate target or upper limit - 500000 + 4 for WCONPROD + gas rate target or upper limit - 600000 + 4 for WCONPROD + liquid rate target or upper limit - ? 300000 + 3 for WCONINJE + oil rate target or upper limit - 400000 + 3 for WCONINJE + surface rate target or upper limit - 500000 + 3 for WCONINJE + reservoir volume rate target or upper limit - 1000000 + 27 for CECON + minimum oil rate - - item (2) - sequence number of UDQ used (from input sequence) for the actual constraint/target - - item (3) - do not know yet (value: 1) - item (4) - number of times the UDQ variable is used (e.g. for several different wells) - item (5) - the sequence number for the first use of the actual UDQ (index i+1) = 1+sum over (no_use_udq(i)) - */ - - const auto& iUad = udqData.getIUAD(); - - auto start = 0*udqDims[3]; - BOOST_CHECK_EQUAL(iUad[start + 0] , 300004); // iuad NO. 1 - BOOST_CHECK_EQUAL(iUad[start + 1] , 3); // iuad NO. 1 - BOOST_CHECK_EQUAL(iUad[start + 2] , 1); // iuad NO. 1 - BOOST_CHECK_EQUAL(iUad[start + 3] , 2); // iuad NO. 1 - BOOST_CHECK_EQUAL(iUad[start + 4] , 1); // iuad NO. 1 - - start = 1*udqDims[3]; - BOOST_CHECK_EQUAL(iUad[start + 0] , 600004); // iuad NO. 2 - BOOST_CHECK_EQUAL(iUad[start + 1] , 5); // iuad NO. 2 - BOOST_CHECK_EQUAL(iUad[start + 2] , 1); // iuad NO. 2 - BOOST_CHECK_EQUAL(iUad[start + 3] , 2); // iuad NO. 2 - BOOST_CHECK_EQUAL(iUad[start + 4] , 3); // iuad NO. 2 - - } - - { - /* - ZUDN: - contains UDQ keyword data: - Pairs of: - quantity name (item2): e.g. 'WUOPRL ' and - units: e.g.: 'SM3/DAY ' - - Length is dependent on number of UDQ quantities = 2*no of UDQ's - */ - - const auto& zUdn = udqData.getZUDN(); - - auto start = 0*udqDims[4]; - BOOST_CHECK_EQUAL(zUdn[start + 0].c_str() , "WUOPRL "); // udq NO. 1 - BOOST_CHECK_EQUAL(zUdn[start + 1].c_str() , "SM3/DAY "); // udq NO. 1 - - start = 1*udqDims[4]; - BOOST_CHECK_EQUAL(zUdn[start + 0].c_str() , "WULPRL "); // udq NO. 2 - BOOST_CHECK_EQUAL(zUdn[start + 1].c_str() , "SM3/DAY "); // udq NO. 2 - - start = 2*udqDims[4]; - BOOST_CHECK_EQUAL(zUdn[start + 0].c_str() , "WUOPRU "); // udq NO. 3 - BOOST_CHECK_EQUAL(zUdn[start + 1].c_str() , "SM3/DAY "); // udq NO. 3 - - start = 3*udqDims[4]; - BOOST_CHECK_EQUAL(zUdn[start + 0].c_str() , "GUOPRU "); // udq NO. 4 - BOOST_CHECK_EQUAL(zUdn[start + 1].c_str() , "SM3/DAY "); // udq NO. 4 - - start = 4*udqDims[4]; - BOOST_CHECK_EQUAL(zUdn[start + 0].c_str() , "WULPRU "); // udq NO. 5 - BOOST_CHECK_EQUAL(zUdn[start + 1].c_str() , "SM3/DAY "); // udq NO. 5 - - start = 5*udqDims[4]; - BOOST_CHECK_EQUAL(zUdn[start + 0].c_str() , "FULPR "); // udq NO. 6 - BOOST_CHECK_EQUAL(zUdn[start + 1].c_str() , "SM3/DAY "); // udq NO. 6 - - } - - - { - /* - ZUDL: - contains string that define the "Data for operation" for the defined quantity - - e.g. - '(WOPR OP' 'L01 - 15' '0) * 0.9' '0 ' ' ' ' ' ' ' - - The appropriate data are split into strings of 8 characters each. - - Length: No of UDQ's * 16 - */ - - const auto& zUdl = udqData.getZUDL(); - - auto start = 0*udqDims[5]; - BOOST_CHECK_EQUAL(zUdl[start + 0].c_str() , "(WOPR PR"); // udq NO. 1 - BOOST_CHECK_EQUAL(zUdl[start + 1].c_str() , "OD1 - 17"); // udq NO. 1 - BOOST_CHECK_EQUAL(zUdl[start + 2].c_str() , "0) * 0.6"); // udq NO. 1 - BOOST_CHECK_EQUAL(zUdl[start + 3].c_str() , "0 "); // udq NO. 1 - - start = 3*udqDims[5]; - BOOST_CHECK_EQUAL(zUdl[start + 0].c_str() , "(GOPR GR"); // udq NO. 1 - BOOST_CHECK_EQUAL(zUdl[start + 1].c_str() , "P1 - 449"); // udq NO. 1 - BOOST_CHECK_EQUAL(zUdl[start + 2].c_str() , ") * 0.77"); // udq NO. 1 - BOOST_CHECK_EQUAL(zUdl[start + 3].c_str() , " "); // udq NO. 1 - - start = 4*udqDims[5]; - BOOST_CHECK_EQUAL(zUdl[start + 0].c_str() , "(WLPR PR"); // udq NO. 1 - BOOST_CHECK_EQUAL(zUdl[start + 1].c_str() , "OD2 - 30"); // udq NO. 1 - BOOST_CHECK_EQUAL(zUdl[start + 2].c_str() , "0) * 0.8"); // udq NO. 1 - BOOST_CHECK_EQUAL(zUdl[start + 3].c_str() , "0 "); // udq NO. 1 - - start = 5*udqDims[5]; - BOOST_CHECK_EQUAL(zUdl[start + 0].c_str() , "(FLPR - "); // udq NO. 1 - BOOST_CHECK_EQUAL(zUdl[start + 1].c_str() , "543) * 0"); // udq NO. 1 - BOOST_CHECK_EQUAL(zUdl[start + 2].c_str() , ".65 "); // udq NO. 1 - BOOST_CHECK_EQUAL(zUdl[start + 3].c_str() , " "); // udq NO. 1 - - } - -#if 0 - { - /* - 'DUDW ' 24 'DOUB' - - Dimension = max no wells * no of UDQ's - Value = value of UDQ for the different wells - */ - - const auto& dUdw = udqData.getDUDW(); - - auto start = 0*udqDims[8]; - BOOST_CHECK_EQUAL(dUdw[start + 0] , 210); // duDw NO. 1 - BOOST_CHECK_EQUAL(dUdw[start + 1] , 211); // duDw NO. 1 - BOOST_CHECK_EQUAL(dUdw[start + 2] , 212); // duDw NO. 1 - BOOST_CHECK_EQUAL(dUdw[start + 3] , 213); // duDw NO. 1 - BOOST_CHECK_EQUAL(dUdw[start + 4] , -0.3E+21); // duDw NO. 1 - - start = 1*udqDims[8]; - BOOST_CHECK_EQUAL(dUdw[start + 0] , 230); // duDw NO. 1 - BOOST_CHECK_EQUAL(dUdw[start + 1] , 231); // duDw NO. 1 - BOOST_CHECK_EQUAL(dUdw[start + 2] , 232); // duDw NO. 1 - BOOST_CHECK_EQUAL(dUdw[start + 3] , 233); // duDw NO. 1 - BOOST_CHECK_EQUAL(dUdw[start + 4] , -0.3E+21); // duDw NO. 1 - - - } -#endif - { - /* - 'DUDG ' 5 'DOUB' - - Dimension = (max no groups+1) * no of group UDQ's - Value = value of UDQ for the different groups - */ - - const auto& dUdg = udqData.getDUDG(); - - auto start = 0*udqDims[11]; - BOOST_CHECK_EQUAL(dUdg[start + 0] , 362); // duDg NO. 1 - BOOST_CHECK_EQUAL(dUdg[start + 1] , 360); // duDg NO. 1 - BOOST_CHECK_EQUAL(dUdg[start + 2] , 361); // duDg NO. 1 - BOOST_CHECK_EQUAL(dUdg[start + 3] , -0.3E+21); // duDg NO. 1 - BOOST_CHECK_EQUAL(dUdg[start + 4] , -0.3E+21); // duDg NO. 1 - - - } - - - { - /* - 'DUDG ' 1 'DOUB' - - Dimension = 1 * no of Field UDQ's - Value = value of UDQ for the field - */ - - const auto& dUdf = udqData.getDUDF(); - - auto start = 0*udqDims[12]; - BOOST_CHECK_EQUAL(dUdf[start + 0] , 460); // duDf NO. 1 - - } -} - -BOOST_AUTO_TEST_SUITE_END() diff --git a/ThirdParty/custom-opm-common/opm-common/tests/test_AggregateWellData.cpp b/ThirdParty/custom-opm-common/opm-common/tests/test_AggregateWellData.cpp deleted file mode 100644 index 10b2c3a6f3..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/test_AggregateWellData.cpp +++ /dev/null @@ -1,867 +0,0 @@ -/* - Copyright 2019 Equinor - Copyright 2018 Statoil ASA - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#define BOOST_TEST_MODULE Aggregate_Well_Data - -#include - -#include -#include - -#include -#include -#include -#include - -#include -#include -#include - -#include - -#include -#include -#include -#include - -#include -#include -#include -#include - -struct MockIH -{ - MockIH(const int numWells, - const int iwelPerWell = 155, // E100 - const int swelPerWell = 122, // E100 - const int xwelPerWell = 130, // E100 - const int zwelPerWell = 3); // E100 - - std::vector value; - - using Sz = std::vector::size_type; - - Sz nwells; - Sz niwelz; - Sz nswelz; - Sz nxwelz; - Sz nzwelz; -}; - -MockIH::MockIH(const int numWells, - const int iwelPerWell, - const int swelPerWell, - const int xwelPerWell, - const int zwelPerWell) - : value(411, 0) -{ - using Ix = ::Opm::RestartIO::Helpers::VectorItems::intehead; - - this->nwells = this->value[Ix::NWELLS] = numWells; - this->niwelz = this->value[Ix::NIWELZ] = iwelPerWell; - this->nswelz = this->value[Ix::NSWELZ] = swelPerWell; - this->nxwelz = this->value[Ix::NXWELZ] = xwelPerWell; - this->nzwelz = this->value[Ix::NZWELZ] = zwelPerWell; -} - -namespace { - Opm::Deck first_sim() - { - // Mostly copy of tests/FIRST_SIM.DATA - const auto input = std::string { - R"~( -RUNSPEC -OIL -GAS -WATER -DISGAS -VAPOIL -UNIFOUT -UNIFIN -DIMENS - 10 10 10 / - -GRID -DXV -10*0.25 / -DYV -10*0.25 / -DZV -10*0.25 / -TOPS -100*0.25 / - -PORO -1000*0.2 / - -SOLUTION - - -START -- 0 -1 NOV 1979 / - -SCHEDULE -RPTRST -BASIC=1 -/ -DATES -- 1 - 10 OKT 2008 / -/ -WELSPECS - 'OP_1' 'OP' 9 9 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / - 'OP_2' 'OP' 9 9 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / -/ -COMPDAT - 'OP_1' 9 9 1 1 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / - 'OP_2' 9 9 2 2 'OPEN' 1* 46.825 0.311 4332.346 1* 1* 'X' 22.123 / - 'OP_1' 9 9 3 3 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / -/ -WCONPROD - 'OP_1' 'OPEN' 'ORAT' 20000 4* 1000 / -/ -WCONINJE - 'OP_2' 'GAS' 'OPEN' 'RATE' 100 200 400 / -/ - -DATES -- 2 - 20 JAN 2011 / -/ -WELSPECS - 'OP_3' 'OP' 9 9 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / -/ -COMPDAT - 'OP_3' 9 9 1 1 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / -/ -WCONPROD - 'OP_3' 'OPEN' 'ORAT' 20000 4* 1000 / -/ -WCONINJE - 'OP_2' 'WATER' 'OPEN' 'RATE' 100 200 400 / -/ - -DATES -- 3 - 15 JUN 2013 / -/ -COMPDAT - 'OP_2' 9 9 3 9 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / - 'OP_1' 9 9 7 7 'SHUT' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / -/ - -DATES -- 4 - 22 APR 2014 / -/ -WELSPECS - 'OP_4' 'OP' 9 9 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / -/ -COMPDAT - 'OP_4' 9 9 3 9 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / - 'OP_3' 9 9 3 9 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / -/ -WCONPROD - 'OP_4' 'OPEN' 'ORAT' 20000 4* 1000 / -/ - -DATES -- 5 - 30 AUG 2014 / -/ -WELSPECS - 'OP_5' 'OP' 9 9 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / -/ -COMPDAT - 'OP_5' 9 9 3 9 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / -/ -WCONPROD - 'OP_5' 'OPEN' 'ORAT' 20000 4* 1000 / -/ - -DATES -- 6 - 15 SEP 2014 / -/ -WCONPROD - 'OP_3' 'SHUT' 'ORAT' 20000 4* 1000 / -/ - -DATES -- 7 - 9 OCT 2014 / -/ -WELSPECS - 'OP_6' 'OP' 9 9 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / -/ -COMPDAT - 'OP_6' 9 9 3 9 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / -/ -WCONPROD - 'OP_6' 'OPEN' 'ORAT' 20000 4* 1000 / -/ -TSTEP -- 8 -10 / -)~" }; - - return Opm::Parser{}.parseString(input); - } - - Opm::SummaryState sim_state() - { - auto state = Opm::SummaryState{std::chrono::system_clock::now()}; - - state.update("WOPR:OP_1" , 1.0); - state.update("WWPR:OP_1" , 2.0); - state.update("WGPR:OP_1" , 3.0); - state.update("WVPR:OP_1" , 4.0); - state.update("WOPT:OP_1" , 10.0); - state.update("WWPT:OP_1" , 20.0); - state.update("WGPT:OP_1" , 30.0); - state.update("WVPT:OP_1" , 40.0); - state.update("WWIR:OP_1" , 0.0); - state.update("WGIR:OP_1" , 0.0); - state.update("WWIT:OP_1" , 0.0); - state.update("WGIT:OP_1" , 0.0); - state.update("WVIT:OP_1" , 0.0); - state.update("WWCT:OP_1" , 0.625); - state.update("WGOR:OP_1" , 234.5); - state.update("WBHP:OP_1" , 314.15); - state.update("WOPTH:OP_1", 345.6); - state.update("WWPTH:OP_1", 456.7); - state.update("WGPTH:OP_1", 567.8); - state.update("WWITH:OP_1", 0.0); - state.update("WGITH:OP_1", 0.0); - state.update("WGVIR:OP_1", 0.0); - state.update("WWVIR:OP_1", 0.0); - - state.update("WOPR:OP_2" , 0.0); - state.update("WWPR:OP_2" , 0.0); - state.update("WGPR:OP_2" , 0.0); - state.update("WVPR:OP_2" , 0.0); - state.update("WOPT:OP_2" , 0.0); - state.update("WWPT:OP_2" , 0.0); - state.update("WGPT:OP_2" , 0.0); - state.update("WVPT:OP_2" , 0.0); - state.update("WWIR:OP_2" , 100.0); - state.update("WGIR:OP_2" , 200.0); - state.update("WWIT:OP_2" , 1000.0); - state.update("WGIT:OP_2" , 2000.0); - state.update("WVIT:OP_2" , 1234.5); - state.update("WWCT:OP_2" , 0.0); - state.update("WGOR:OP_2" , 0.0); - state.update("WBHP:OP_2" , 400.6); - state.update("WOPTH:OP_2", 0.0); - state.update("WWPTH:OP_2", 0.0); - state.update("WGPTH:OP_2", 0.0); - state.update("WWITH:OP_2", 1515.0); - state.update("WGITH:OP_2", 3030.0); - state.update("WGVIR:OP_2", 1234.0); - state.update("WWVIR:OP_2", 4321.0); - - state.update("WOPR:OP_3" , 11.0); - state.update("WWPR:OP_3" , 12.0); - state.update("WGPR:OP_3" , 13.0); - state.update("WVPR:OP_3" , 14.0); - state.update("WOPT:OP_3" , 110.0); - state.update("WWPT:OP_3" , 120.0); - state.update("WGPT:OP_3" , 130.0); - state.update("WVPT:OP_3" , 140.0); - state.update("WWIR:OP_3" , 0.0); - state.update("WGIR:OP_3" , 0.0); - state.update("WWIT:OP_3" , 0.0); - state.update("WGIT:OP_3" , 0.0); - state.update("WVIT:OP_3" , 0.0); - state.update("WWCT:OP_3" , 0.0625); - state.update("WGOR:OP_3" , 1234.5); - state.update("WBHP:OP_3" , 314.15); - state.update("WOPTH:OP_3", 2345.6); - state.update("WWPTH:OP_3", 3456.7); - state.update("WGPTH:OP_3", 4567.8); - state.update("WWITH:OP_3", 0.0); - state.update("WGITH:OP_3", 0.0); - state.update("WGVIR:OP_3", 0.0); - state.update("WWVIR:OP_3", 43.21); - - return state; - } - - Opm::data::WellRates well_rates_1() - { - using o = ::Opm::data::Rates::opt; - - auto xw = ::Opm::data::WellRates{}; - - { - xw["OP_1"].rates - .set(o::wat, 1.0) - .set(o::oil, 2.0) - .set(o::gas, 3.0); - - xw["OP_1"].connections.emplace_back(); - auto& c = xw["OP_1"].connections.back(); - - c.rates.set(o::wat, 1.0) - .set(o::oil, 2.0) - .set(o::gas, 3.0); - } - - { - xw["OP_2"].bhp = 234.0; - - xw["OP_2"].rates.set(o::gas, 5.0); - xw["OP_2"].connections.emplace_back(); - } - - return xw; - } - - Opm::data::WellRates well_rates_2() - { - using o = ::Opm::data::Rates::opt; - - auto xw = ::Opm::data::WellRates{}; - - { - xw["OP_1"].bhp = 150.0; // Closed - } - - { - xw["OP_2"].bhp = 234.0; - - xw["OP_2"].rates.set(o::wat, 5.0); - xw["OP_2"].connections.emplace_back(); - - auto& c = xw["OP_2"].connections.back(); - c.rates.set(o::wat, 5.0); - } - - return xw; - } - - -} // namespace - -struct SimulationCase -{ - explicit SimulationCase(const Opm::Deck& deck) - : es { deck } - , grid { deck } - , python{ std::make_shared()} - , sched{ deck, es, python } - {} - - // Order requirement: 'es' must be declared/initialised before 'sched'. - Opm::EclipseState es; - Opm::EclipseGrid grid; - std::shared_ptr python; - Opm::Schedule sched; -}; - -// ===================================================================== - -BOOST_AUTO_TEST_SUITE(Aggregate_WD) - -BOOST_AUTO_TEST_CASE (Constructor) -{ - const auto ih = MockIH{ 5 }; - - const auto awd = Opm::RestartIO::Helpers::AggregateWellData{ ih.value }; - - BOOST_CHECK_EQUAL(awd.getIWell().size(), ih.nwells * ih.niwelz); - BOOST_CHECK_EQUAL(awd.getSWell().size(), ih.nwells * ih.nswelz); - BOOST_CHECK_EQUAL(awd.getXWell().size(), ih.nwells * ih.nxwelz); - BOOST_CHECK_EQUAL(awd.getZWell().size(), ih.nwells * ih.nzwelz); -} - -BOOST_AUTO_TEST_CASE (Declared_Well_Data) -{ - const auto simCase = SimulationCase{first_sim()}; - - // Report Step 1: 2008-10-10 --> 2011-01-20 - const auto rptStep = std::size_t{1}; - - const auto ih = MockIH { - static_cast(simCase.sched.getWells(rptStep).size()) - }; - - BOOST_CHECK_EQUAL(ih.nwells, MockIH::Sz{2}); - - const auto smry = sim_state(); - auto awd = Opm::RestartIO::Helpers::AggregateWellData{ih.value}; - awd.captureDeclaredWellData(simCase.sched, - simCase.es.getUnits(), rptStep, smry, ih.value); - - // IWEL (OP_1) - { - using Ix = ::Opm::RestartIO::Helpers::VectorItems::IWell::index; - - const auto start = 0*ih.niwelz; - - const auto& iwell = awd.getIWell(); - BOOST_CHECK_EQUAL(iwell[start + Ix::IHead] , 9); // OP_1 -> I - BOOST_CHECK_EQUAL(iwell[start + Ix::JHead] , 9); // OP_1 -> J - BOOST_CHECK_EQUAL(iwell[start + Ix::FirstK], 1); // OP_1/Head -> K - BOOST_CHECK_EQUAL(iwell[start + Ix::NConn] , 2); // OP_1 #Compl - BOOST_CHECK_EQUAL(iwell[start + Ix::WType] , 1); // OP_1 -> Producer - BOOST_CHECK_EQUAL(iwell[start + Ix::VFPTab], 0); // VFP defaulted -> 0 - - // Completion order - BOOST_CHECK_EQUAL(iwell[start + Ix::CompOrd], 0); // Track ordering (default) - - BOOST_CHECK_EQUAL(iwell[start + Ix::item18], -100); // M2 Magic - BOOST_CHECK_EQUAL(iwell[start + Ix::item25], - 1); // M2 Magic - BOOST_CHECK_EQUAL(iwell[start + Ix::item48], - 1); // M2 Magic - BOOST_CHECK_EQUAL(iwell[start + Ix::item32], 7); // M2 Magic - } - - // IWEL (OP_2) - { - using Ix = ::Opm::RestartIO::Helpers::VectorItems::IWell::index; - - const auto start = 1*ih.niwelz; - - const auto& iwell = awd.getIWell(); - BOOST_CHECK_EQUAL(iwell[start + Ix::IHead] , 9); // OP_2 -> I - BOOST_CHECK_EQUAL(iwell[start + Ix::JHead] , 9); // OP_2 -> J - BOOST_CHECK_EQUAL(iwell[start + Ix::FirstK], 2); // OP_2/Head -> K - BOOST_CHECK_EQUAL(iwell[start + Ix::NConn] , 1); // OP_2 #Compl - BOOST_CHECK_EQUAL(iwell[start + Ix::WType] , 4); // OP_2 -> Gas Inj. - BOOST_CHECK_EQUAL(iwell[start + Ix::VFPTab], 0); // VFP defaulted -> 0 - - // Completion order - BOOST_CHECK_EQUAL(iwell[start + Ix::CompOrd], 0); // Track ordering (default) - - BOOST_CHECK_EQUAL(iwell[start + Ix::item18], -100); // M2 Magic - BOOST_CHECK_EQUAL(iwell[start + Ix::item25], - 1); // M2 Magic - BOOST_CHECK_EQUAL(iwell[start + Ix::item48], - 1); // M2 Magic - BOOST_CHECK_EQUAL(iwell[start + Ix::item32], 7); // M2 Magic - } - - // SWEL (OP_1) - { - using Ix = ::Opm::RestartIO::Helpers::VectorItems::SWell::index; - - const auto i0 = 0*ih.nswelz; - - const auto& swell = awd.getSWell(); - BOOST_CHECK_CLOSE(swell[i0 + Ix::OilRateTarget], 20.0e3f, 1.0e-7f); - - // No WRAT limit - BOOST_CHECK_CLOSE(swell[i0 + Ix::WatRateTarget], 1.0e20f, 1.0e-7f); - - // No GRAT limit - BOOST_CHECK_CLOSE(swell[i0 + Ix::GasRateTarget], 1.0e20f, 1.0e-7f); - - // LRAT limit derived from ORAT + WRAT (= ORAT + 0.0) - BOOST_CHECK_CLOSE(swell[i0 + Ix::LiqRateTarget], 1.0e20f, 1.0e-7f); - - // No direct limit, extract value from 'smry' (WVPR:OP_1) - BOOST_CHECK_CLOSE(swell[i0 + Ix::ResVRateTarget], 1.0e20f, 1.0e-7f); - - // No THP limit - BOOST_CHECK_CLOSE(swell[i0 + Ix::THPTarget] , 0.0f, 1.0e-7f); - BOOST_CHECK_CLOSE(swell[i0 + Ix::BHPTarget] , 1000.0f, 1.0e-7f); - BOOST_CHECK_CLOSE(swell[i0 + Ix::DatumDepth], 0.375f, 1.0e-7f); - } - - // SWEL (OP_2) - { - using Ix = ::Opm::RestartIO::Helpers::VectorItems::SWell::index; - - const auto i1 = 1*ih.nswelz; - - const auto& swell = awd.getSWell(); - BOOST_CHECK_CLOSE(swell[i1 + Ix::THPTarget], 1.0e20f, 1.0e-7f); - BOOST_CHECK_CLOSE(swell[i1 + Ix::BHPTarget], 400.0f, 1.0e-7f); - - BOOST_CHECK_CLOSE(swell[i1 + Ix::DatumDepth], 0.625f, 1.0e-7f); - } - - // XWEL (OP_1) - { - using Ix = ::Opm::RestartIO::Helpers::VectorItems::XWell::index; - - const auto i0 = 0*ih.nxwelz; - - const auto& xwell = awd.getXWell(); - - BOOST_CHECK_CLOSE(xwell[i0 + Ix::BHPTarget], 1000.0, 1.0e-10); - } - - // XWEL (OP_2) - { - using Ix = ::Opm::RestartIO::Helpers::VectorItems::XWell::index; - - const auto i1 = 1*ih.nxwelz; - - const auto& xwell = awd.getXWell(); - - BOOST_CHECK_CLOSE(xwell[i1 + Ix::BHPTarget], 400.0, 1.0e-10); - } - - // ZWEL (OP_1) - { - using Ix = ::Opm::RestartIO::Helpers::VectorItems::ZWell::index; - - const auto i0 = 0*ih.nzwelz; - - const auto& zwell = awd.getZWell(); - - BOOST_CHECK_EQUAL(zwell[i0 + Ix::WellName].c_str(), "OP_1 "); - } - - // ZWEL (OP_2) - { - using Ix = ::Opm::RestartIO::Helpers::VectorItems::ZWell::index; - - const auto i1 = 1*ih.nzwelz; - - const auto& zwell = awd.getZWell(); - - BOOST_CHECK_EQUAL(zwell[i1 + Ix::WellName].c_str(), "OP_2 "); - } -} - -// -------------------------------------------------------------------- - -BOOST_AUTO_TEST_CASE (Dynamic_Well_Data_Step1) -{ - const auto simCase = SimulationCase{first_sim()}; - - // Report Step 1: 2008-10-10 --> 2011-01-20 - const auto rptStep = std::size_t{1}; - - const auto ih = MockIH { - static_cast(simCase.sched.getWells(rptStep).size()) - }; - - const auto xw = well_rates_1(); - const auto smry = sim_state(); - auto awd = Opm::RestartIO::Helpers::AggregateWellData{ih.value}; - - awd.captureDynamicWellData(simCase.sched, rptStep, xw, smry); - - // IWEL (OP_1) - { - using Ix = ::Opm::RestartIO::Helpers::VectorItems::IWell::index; - - const auto i0 = 0*ih.niwelz; - - const auto& iwell = awd.getIWell(); - - BOOST_CHECK_EQUAL(iwell[i0 + Ix::item9 ], iwell[i0 + Ix::ActWCtrl]); - BOOST_CHECK_EQUAL(iwell[i0 + Ix::item11], 1); - } - - // IWEL (OP_2) - { - using Ix = ::Opm::RestartIO::Helpers::VectorItems::IWell::index; - - const auto i1 = 1*ih.niwelz; - - const auto& iwell = awd.getIWell(); - - BOOST_CHECK_EQUAL(iwell[i1 + Ix::item9 ], -1); // No flowing conns. - BOOST_CHECK_EQUAL(iwell[i1 + Ix::item11], 1); // Well open/shut flag - } - - // XWEL (OP_1) - { - using Ix = ::Opm::RestartIO::Helpers::VectorItems::XWell::index; - - const auto i0 = 0*ih.nxwelz; - const auto& xwell = awd.getXWell(); - - BOOST_CHECK_CLOSE(xwell[i0 + Ix::OilPrRate], 1.0, 1.0e-10); - BOOST_CHECK_CLOSE(xwell[i0 + Ix::WatPrRate], 2.0, 1.0e-10); - BOOST_CHECK_CLOSE(xwell[i0 + Ix::GasPrRate], 3.0, 1.0e-10); - BOOST_CHECK_CLOSE(xwell[i0 + Ix::LiqPrRate], 1.0 + 2.0, 1.0e-10); - BOOST_CHECK_CLOSE(xwell[i0 + Ix::VoidPrRate], 4.0, 1.0e-10); - - BOOST_CHECK_CLOSE(xwell[i0 + Ix::FlowBHP], 314.15 , 1.0e-10); - BOOST_CHECK_CLOSE(xwell[i0 + Ix::WatCut] , 0.625, 1.0e-10); - BOOST_CHECK_CLOSE(xwell[i0 + Ix::GORatio], 234.5 , 1.0e-10); - - BOOST_CHECK_CLOSE(xwell[i0 + Ix::OilPrTotal], 10.0, 1.0e-10); - BOOST_CHECK_CLOSE(xwell[i0 + Ix::WatPrTotal], 20.0, 1.0e-10); - BOOST_CHECK_CLOSE(xwell[i0 + Ix::GasPrTotal], 30.0, 1.0e-10); - BOOST_CHECK_CLOSE(xwell[i0 + Ix::VoidPrTotal], 40.0, 1.0e-10); - - BOOST_CHECK_CLOSE(xwell[i0 + Ix::item37], - xwell[i0 + Ix::WatPrRate], 1.0e-10); - - BOOST_CHECK_CLOSE(xwell[i0 + Ix::item38], - xwell[i0 + Ix::GasPrRate], 1.0e-10); - - BOOST_CHECK_CLOSE(xwell[i0 + Ix::HistOilPrTotal], 345.6, 1.0e-10); - BOOST_CHECK_CLOSE(xwell[i0 + Ix::HistWatPrTotal], 456.7, 1.0e-10); - BOOST_CHECK_CLOSE(xwell[i0 + Ix::HistGasPrTotal], 567.8, 1.0e-10); - - BOOST_CHECK_CLOSE(xwell[i0 + Ix::HistWatInjTotal], 0.0, 1.0e-10); - BOOST_CHECK_CLOSE(xwell[i0 + Ix::HistGasInjTotal], 0.0, 1.0e-10); - } - - // XWEL (OP_2) - { - using Ix = ::Opm::RestartIO::Helpers::VectorItems::XWell::index; - - const auto i1 = 1*ih.nxwelz; - const auto& xwell = awd.getXWell(); - - BOOST_CHECK_CLOSE(xwell[i1 + Ix::GasPrRate], -200.0, 1.0e-10); - BOOST_CHECK_CLOSE(xwell[i1 + Ix::VoidPrRate], -1234.0, 1.0e-10); - BOOST_CHECK_CLOSE(xwell[i1 + Ix::FlowBHP], 400.6, 1.0e-10); - - BOOST_CHECK_CLOSE(xwell[i1 + Ix::WatInjTotal], 1000.0, 1.0e-10); - BOOST_CHECK_CLOSE(xwell[i1 + Ix::GasInjTotal], 2000.0, 1.0e-10); - BOOST_CHECK_CLOSE(xwell[i1 + Ix::VoidInjTotal], 1234.5, 1.0e-10); - - // Bg = VGIR / GIR = 1234.0 / 200.0 - BOOST_CHECK_CLOSE(xwell[i1 + Ix::GasFVF], 6.17, 1.0e-10); - - BOOST_CHECK_CLOSE(xwell[i1 + Ix::item38], - xwell[i1 + Ix::GasPrRate], 1.0e-10); - - BOOST_CHECK_CLOSE(xwell[i1 + Ix::HistOilPrTotal] , 0.0, 1.0e-10); - BOOST_CHECK_CLOSE(xwell[i1 + Ix::HistWatPrTotal] , 0.0, 1.0e-10); - BOOST_CHECK_CLOSE(xwell[i1 + Ix::HistGasPrTotal] , 0.0, 1.0e-10); - BOOST_CHECK_CLOSE(xwell[i1 + Ix::HistWatInjTotal], 1515.0, 1.0e-10); - BOOST_CHECK_CLOSE(xwell[i1 + Ix::HistGasInjTotal], 3030.0, 1.0e-10); - } -} - -// -------------------------------------------------------------------- - -BOOST_AUTO_TEST_CASE (Dynamic_Well_Data_Step2) -{ - const auto simCase = SimulationCase{first_sim()}; - - // Report Step 2: 2011-01-20 --> 2013-06-15 - const auto rptStep = std::size_t{2}; - - const auto ih = MockIH { - static_cast(simCase.sched.getWells(rptStep).size()) - }; - - const auto xw = well_rates_2(); - const auto smry = sim_state(); - auto awd = Opm::RestartIO::Helpers::AggregateWellData{ih.value}; - - awd.captureDynamicWellData(simCase.sched, rptStep, xw, smry); - - // IWEL (OP_1) -- closed producer - { - using Ix = ::Opm::RestartIO::Helpers::VectorItems::IWell::index; - - const auto i0 = 0*ih.niwelz; - - const auto& iwell = awd.getIWell(); - - BOOST_CHECK_EQUAL(iwell[i0 + Ix::item9] , -1000); - BOOST_CHECK_EQUAL(iwell[i0 + Ix::item11], -1000); - } - - // IWEL (OP_2) -- water injector - { - using Ix = ::Opm::RestartIO::Helpers::VectorItems::IWell::index; - - const auto i1 = 1*ih.niwelz; - - const auto& iwell = awd.getIWell(); - - BOOST_CHECK_EQUAL(iwell[i1 + Ix::item9], - iwell[i1 + Ix::ActWCtrl]); - BOOST_CHECK_EQUAL(iwell[i1 + Ix::item11], 1); - } - - // XWEL (OP_1) -- closed producer - { - using Ix = ::Opm::RestartIO::Helpers::VectorItems::XWell::index; - - const auto i0 = 0*ih.nxwelz; - const auto& xwell = awd.getXWell(); - - BOOST_CHECK_CLOSE(xwell[i0 + Ix::OilPrRate], 1.0, 1.0e-10); - BOOST_CHECK_CLOSE(xwell[i0 + Ix::WatPrRate], 2.0, 1.0e-10); - BOOST_CHECK_CLOSE(xwell[i0 + Ix::GasPrRate], 3.0, 1.0e-10); - BOOST_CHECK_CLOSE(xwell[i0 + Ix::LiqPrRate], 1.0 + 2.0, 1.0e-10); - BOOST_CHECK_CLOSE(xwell[i0 + Ix::VoidPrRate], 4.0, 1.0e-10); - - BOOST_CHECK_CLOSE(xwell[i0 + Ix::FlowBHP], 314.15, 1.0e-10); - BOOST_CHECK_CLOSE(xwell[i0 + Ix::WatCut] , 0.625, 1.0e-10); - BOOST_CHECK_CLOSE(xwell[i0 + Ix::GORatio], 234.5, 1.0e-10); - - BOOST_CHECK_CLOSE(xwell[i0 + Ix::OilPrTotal], 10.0, 1.0e-10); - BOOST_CHECK_CLOSE(xwell[i0 + Ix::WatPrTotal], 20.0, 1.0e-10); - BOOST_CHECK_CLOSE(xwell[i0 + Ix::GasPrTotal], 30.0, 1.0e-10); - BOOST_CHECK_CLOSE(xwell[i0 + Ix::VoidPrTotal], 40.0, 1.0e-10); - - BOOST_CHECK_CLOSE(xwell[i0 + Ix::item37], - xwell[i0 + Ix::WatPrRate], 1.0e-10); - - BOOST_CHECK_CLOSE(xwell[i0 + Ix::item38], - xwell[i0 + Ix::GasPrRate], 1.0e-10); - - BOOST_CHECK_CLOSE(xwell[i0 + Ix::HistOilPrTotal], 345.6, 1.0e-10); - BOOST_CHECK_CLOSE(xwell[i0 + Ix::HistWatPrTotal], 456.7, 1.0e-10); - BOOST_CHECK_CLOSE(xwell[i0 + Ix::HistGasPrTotal], 567.8, 1.0e-10); - } - - // XWEL (OP_2) -- water injector - { - using Ix = ::Opm::RestartIO::Helpers::VectorItems::XWell::index; - - const auto i1 = 1*ih.nxwelz; - const auto& xwell = awd.getXWell(); - - BOOST_CHECK_CLOSE(xwell[i1 + Ix::WatPrRate], -100.0, 1.0e-10); - - // Copy of WWIR - BOOST_CHECK_CLOSE(xwell[i1 + Ix::LiqPrRate], - xwell[i1 + Ix::WatPrRate], 1.0e-10); - - BOOST_CHECK_CLOSE(xwell[i1 + Ix::FlowBHP], 400.6, 1.0e-10); - - BOOST_CHECK_CLOSE(xwell[i1 + Ix::WatInjTotal], 1000.0, 1.0e-10); - BOOST_CHECK_CLOSE(xwell[i1 + Ix::GasInjTotal], 2000.0, 1.0e-10); - BOOST_CHECK_CLOSE(xwell[i1 + Ix::VoidInjTotal], 1234.5, 1.0e-10); - - // Copy of WWIR - BOOST_CHECK_CLOSE(xwell[i1 + Ix::item37], - xwell[i1 + Ix::WatPrRate], 1.0e-10); - - BOOST_CHECK_CLOSE(xwell[i1 + Ix::HistOilPrTotal] , 0.0, 1.0e-10); - BOOST_CHECK_CLOSE(xwell[i1 + Ix::HistWatPrTotal] , 0.0, 1.0e-10); - BOOST_CHECK_CLOSE(xwell[i1 + Ix::HistGasPrTotal] , 0.0, 1.0e-10); - BOOST_CHECK_CLOSE(xwell[i1 + Ix::HistWatInjTotal], 1515.0, 1.0e-10); - BOOST_CHECK_CLOSE(xwell[i1 + Ix::HistGasInjTotal], 3030.0, 1.0e-10); - - // WWVIR - BOOST_CHECK_CLOSE(xwell[i1 + Ix::WatVoidPrRate], - -4321.0, 1.0e-10); - } - - // XWEL (OP_3) -- producer - { - using Ix = ::Opm::RestartIO::Helpers::VectorItems::XWell::index; - - const auto i2 = 2*ih.nxwelz; - const auto& xwell = awd.getXWell(); - - BOOST_CHECK_CLOSE(xwell[i2 + Ix::OilPrRate], 11.0, 1.0e-10); - BOOST_CHECK_CLOSE(xwell[i2 + Ix::WatPrRate], 12.0, 1.0e-10); - BOOST_CHECK_CLOSE(xwell[i2 + Ix::GasPrRate], 13.0, 1.0e-10); - BOOST_CHECK_CLOSE(xwell[i2 + Ix::LiqPrRate], 11.0 + 12.0, 1.0e-10); // LPR - BOOST_CHECK_CLOSE(xwell[i2 + Ix::VoidPrRate], 14.0, 1.0e-10); - - BOOST_CHECK_CLOSE(xwell[i2 + Ix::FlowBHP], 314.15, 1.0e-10); - BOOST_CHECK_CLOSE(xwell[i2 + Ix::WatCut] , 0.0625, 1.0e-10); - BOOST_CHECK_CLOSE(xwell[i2 + Ix::GORatio], 1234.5, 1.0e-10); - - BOOST_CHECK_CLOSE(xwell[i2 + Ix::OilPrTotal], 110.0, 1.0e-10); - BOOST_CHECK_CLOSE(xwell[i2 + Ix::WatPrTotal], 120.0, 1.0e-10); - BOOST_CHECK_CLOSE(xwell[i2 + Ix::GasPrTotal], 130.0, 1.0e-10); - BOOST_CHECK_CLOSE(xwell[i2 + Ix::VoidPrTotal], 140.0, 1.0e-10); - - // Copy of WWPR - BOOST_CHECK_CLOSE(xwell[i2 + Ix::item37], - xwell[i2 + Ix::WatPrRate], 1.0e-10); - - // Copy of WGPR - BOOST_CHECK_CLOSE(xwell[i2 + Ix::item38], - xwell[i2 + Ix::GasPrRate], 1.0e-10); - - BOOST_CHECK_CLOSE(xwell[i2 + Ix::HistOilPrTotal], 2345.6, 1.0e-10); - BOOST_CHECK_CLOSE(xwell[i2 + Ix::HistWatPrTotal], 3456.7, 1.0e-10); - BOOST_CHECK_CLOSE(xwell[i2 + Ix::HistGasPrTotal], 4567.8, 1.0e-10); - } -} - - -BOOST_AUTO_TEST_CASE(WELL_POD) { - const auto simCase = SimulationCase{first_sim()}; - const auto& units = simCase.es.getUnits(); - // Report Step 2: 2011-01-20 --> 2013-06-15 - const auto rptStep = std::size_t{2}; - const auto sim_step = rptStep - 1; - Opm::SummaryState sumState(std::chrono::system_clock::now()); - - const auto ih = Opm::RestartIO::Helpers::createInteHead(simCase.es, - simCase.grid, - simCase.sched, - 0, - sim_step, - sim_step, - sim_step); - - auto wellData = Opm::RestartIO::Helpers::AggregateWellData(ih); - wellData.captureDeclaredWellData(simCase.sched, units, sim_step, sumState, ih); - wellData.captureDynamicWellData(simCase.sched, sim_step, {} , sumState); - - auto connectionData = Opm::RestartIO::Helpers::AggregateConnectionData(ih); - connectionData.captureDeclaredConnData(simCase.sched, simCase.grid, units, {} , sim_step); - - const auto& iwel = wellData.getIWell(); - const auto& swel = wellData.getSWell(); - const auto& xwel = wellData.getXWell(); - const auto& zwel8 = wellData.getZWell(); - - const auto& icon = connectionData.getIConn(); - const auto& scon = connectionData.getSConn(); - const auto& xcon = connectionData.getXConn(); - - Opm::RestartIO::RstHeader header(ih, std::vector(100), std::vector(1000)); - std::vector wells; - std::vector zwel; - for (const auto& s8: zwel8) - zwel.push_back(s8.c_str()); - - for (auto iw = 0; iw < header.num_wells; iw++) { - std::size_t zwel_offset = header.nzwelz * iw; - std::size_t iwel_offset = header.niwelz * iw; - std::size_t swel_offset = header.nswelz * iw; - std::size_t xwel_offset = header.nxwelz * iw; - std::size_t icon_offset = header.niconz * header.ncwmax * iw; - std::size_t scon_offset = header.nsconz * header.ncwmax * iw; - std::size_t xcon_offset = header.nxconz * header.ncwmax * iw; - - wells.emplace_back(units, - header, - "GROUP", - zwel.data() + zwel_offset, - iwel.data() + iwel_offset, - swel.data() + swel_offset, - xwel.data() + xwel_offset, - icon.data() + icon_offset, - scon.data() + scon_offset, - xcon.data() + xcon_offset); - - } - - // Well OP2 - const auto& well2 = wells[1]; - BOOST_CHECK_EQUAL(well2.k1k2.first, 1); - BOOST_CHECK_EQUAL(well2.k1k2.second, 1); - BOOST_CHECK_EQUAL(well2.ij[0], 8); - BOOST_CHECK_EQUAL(well2.ij[1], 8); - BOOST_CHECK_EQUAL(well2.name, "OP_2"); - - BOOST_CHECK_EQUAL(well2.connections.size(), 1); - const auto& conn1 = well2.connections[0]; - BOOST_CHECK_EQUAL(conn1.ijk[0], 8); - BOOST_CHECK_EQUAL(conn1.ijk[1], 8); - BOOST_CHECK_EQUAL(conn1.ijk[2], 1); -} - -BOOST_AUTO_TEST_SUITE_END() diff --git a/ThirdParty/custom-opm-common/opm-common/tests/test_ArrayDimChecker.cpp b/ThirdParty/custom-opm-common/opm-common/tests/test_ArrayDimChecker.cpp deleted file mode 100644 index 8a9e81b7c2..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/test_ArrayDimChecker.cpp +++ /dev/null @@ -1,487 +0,0 @@ -/* - Copyright 2019 Equinor ASA - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#define BOOST_TEST_MODULE Array_Dimension_Checker - -#include -#include - -#include - -#include -#include -#include -#include - -#include -#include -#include - -#include -#include - -namespace { - Opm::Deck simCaseWellDims() - { - const auto input = std::string{ R"(RUNSPEC -TITLE - 'Check Well Dimensions' / - -DIMENS - 20 20 15 / - -OIL -WATER - -METRIC - -EQLDIMS --- Defaulted -/ - -TABDIMS --- Defaulted -/ - -WELLDIMS --- Defaulted -/ - --- ==================================================================== -GRID - -SPECGRID - 20 20 15 1 F / - -DXV - 20*100.0 / - -DYV - 20*100.0 / - -DZV - 15*0.1 / - -DEPTHZ - 441*2000 / - -PORO - 6000*0.3 / - -PERMX - 6000*100.0 / - -COPY - 'PERMX' 'PERMY' / - 'PERMX' 'PERMZ' / -/ - -MULTIPLY - 'PERMZ' 0.1 / -/ - --- ==================================================================== -PROPS - -SWOF - 0 0 1 0 - 1 1 0 0 / - -PVDO - 1 1.0 0.5 - 800 0.99 0.51 / - -PVTW - 300 0.99 1.0e-6 0.25 0 / - -DENSITY - 850.0 1014.0 1.05 / - --- ==================================================================== -SOLUTION - -EQUIL - 2000 300 2010 0.0 2000 10 / - --- ==================================================================== -SUMMARY -ALL - --- ==================================================================== -SCHEDULE - -RPTRST - BASIC=5 FREQ=6 / - -GRUPTREE - 'G1' 'FIELD' / - 'PLAT1' 'G1' / - 'PLAT2' 'G1' / - 'I-NORTH' 'PLAT1' / - 'P-NORTH' 'PLAT1' / - 'O-WEST' 'PLAT2' / - 'I-SOUTH' 'PLAT2' / - 'P-EAST' 'PLAT2' / - 'G2' 'FIELD' / - 'PLAT3' 'G2' / - 'I-2' 'PLAT3' / -/ - -WELSPECS - 'I-N-1' 'I-NORTH' 1 1 2000.15 'WATER' / - 'I-N-2' 'I-NORTH' 5 1 2001.05 'WATER' / - 'P-N-0' 'P-NORTH' 1 10 2000.15 'OIL' / - 'P-N-1' 'P-NORTH' 10 15 2000.15 'OIL' / - 'P-N-2' 'P-NORTH' 1 20 2000.15 'OIL' / - 'P-N-3' 'P-NORTH' 19 20 2000.15 'OIL' / - 'P-N-4' 'P-NORTH' 15 10 2000.15 'OIL' / - 'P-N-5' 'P-NORTH' 10 10 2000.15 'OIL' / - 'P-N-6' 'P-NORTH' 10 20 2000.15 'OIL' / - 'P-N-7' 'P-NORTH' 7 15 2000.15 'OIL' / - 'P-N-8' 'P-NORTH' 2 20 2000.15 'OIL' / - 'P-N-9' 'P-NORTH' 20 1 2000.05 'OIL' / -/ - -COMPDAT - 'I-N-1' 0 0 2 10 'OPEN' 1* 1* 1.0 / - 'I-N-2' 0 0 10 15 'OPEN' 1* 1* 1.0 / - 'P-N-0' 0 0 2 3 'OPEN' 1* 1* 1.0 / - 'P-N-1' 0 0 2 4 'OPEN' 1* 1* 1.0 / - 'P-N-2' 0 0 2 5 'OPEN' 1* 1* 1.0 / - 'P-N-3' 0 0 2 6 'OPEN' 1* 1* 1.0 / - 'P-N-4' 0 0 2 7 'OPEN' 1* 1* 1.0 / - 'P-N-5' 0 0 2 8 'OPEN' 1* 1* 1.0 / - 'P-N-6' 0 0 2 9 'OPEN' 1* 1* 1.0 / - 'P-N-7' 0 0 2 10 'OPEN' 1* 1* 1.0 / - 'P-N-8' 0 0 2 5 'OPEN' 1* 1* 1.0 / - 'P-N-9' 0 0 1 15 'OPEN' 1* 1* 1.0 / -/ - -WCONPROD --- Well O/S Mode ORAT WRAT GRAT LRAT RESV BHP - 'P-N-*' 'OPEN' 'LRAT' 1* 1* 1* 5E3 1* 100 / -/ - -WCONINJE --- Well Type O/S Mode RATE RESV BHP - 'I-N-*' 'WATER' 'OPEN' 'RATE' 25E3 1* 500 / -/ - -TSTEP -100*30 / - -END -)" }; - - return Opm::Parser{}.parseString(input); - } - - Opm::Deck simCaseNodeGroupSizeFailure() - { - const auto input = std::string{ R"(RUNSPEC -TITLE - 'Check Well Dimensions' / - -DIMENS - 20 20 15 / - -OIL -WATER - -METRIC - -EQLDIMS --- Defaulted -/ - -TABDIMS --- Defaulted -/ - -WELLDIMS --- NWMAX NCMAX NGMAX NWGMAX (too small) - 2 20 16 4 -/ - --- ==================================================================== -GRID - -SPECGRID - 20 20 15 1 F / - -DXV - 20*100.0 / - -DYV - 20*100.0 / - -DZV - 15*0.1 / - -DEPTHZ - 441*2000 / - -PORO - 6000*0.3 / - -PERMX - 6000*100.0 / - -COPY - 'PERMX' 'PERMY' / - 'PERMX' 'PERMZ' / -/ - -MULTIPLY - 'PERMZ' 0.1 / -/ - --- ==================================================================== -PROPS - -SWOF - 0 0 1 0 - 1 1 0 0 / - -PVDO - 1 1.0 0.5 - 800 0.99 0.51 / - -PVTW - 300 0.99 1.0e-6 0.25 0 / - -DENSITY - 850.0 1014.0 1.05 / - --- ==================================================================== -SOLUTION - -EQUIL - 2000 300 2010 0.0 2000 10 / - --- ==================================================================== -SUMMARY -ALL - --- ==================================================================== -SCHEDULE - -RPTRST - BASIC=5 FREQ=6 / - -GRUPTREE - 'G1' 'FIELD' / - 'PLAT1' 'G1' / - 'PLAT2' 'G1' / - 'I-NORTH' 'PLAT1' / - 'P-NORTH' 'PLAT1' / - 'O-WEST' 'PLAT2' / - 'I-SOUTH' 'PLAT2' / - 'P-EAST' 'PLAT2' / - 'G2' 'FIELD' / - 'PLAT3' 'G2' / - 'I-2' 'PLAT3' / - 'I-21' 'PLAT3' / - 'I-22' 'PLAT3' / - 'I-23' 'PLAT3' / - 'I-24' 'PLAT3' / - 'I-25' 'PLAT3' / -/ - -WELSPECS - 'I-N-1' 'I-NORTH' 1 1 2000.15 'WATER' / - 'P-N-0' 'P-NORTH' 1 10 2000.15 'OIL' / -/ - -COMPDAT - 'I-N-1' 0 0 2 10 'OPEN' 1* 1* 1.0 / - 'P-N-0' 0 0 2 3 'OPEN' 1* 1* 1.0 / -/ - -WCONPROD --- Well O/S Mode ORAT WRAT GRAT LRAT RESV BHP - 'P-N-*' 'OPEN' 'LRAT' 1* 1* 1* 5E3 1* 100 / -/ - -WCONINJE --- Well Type O/S Mode RATE RESV BHP - 'I-N-*' 'WATER' 'OPEN' 'RATE' 25E3 1* 500 / -/ - -TSTEP -100*30 / - -END -)" }; - - return Opm::Parser{}.parseString(input); - } -} - -struct CaseObjects -{ - explicit CaseObjects(const Opm::Deck& deck, const Opm::ParseContext& ctxt); - ~CaseObjects(); - - CaseObjects(const CaseObjects& rhs) = default; - CaseObjects(CaseObjects&& rhs) = default; - - CaseObjects& operator=(const CaseObjects& rhs) = delete; - CaseObjects& operator=(CaseObjects&& rhs) = delete; - - Opm::ErrorGuard guard; - Opm::EclipseState es; - std::shared_ptr python; - Opm::Schedule sched; -}; - -CaseObjects::CaseObjects(const Opm::Deck& deck, const Opm::ParseContext& ctxt) - : guard{} - , es (deck) - , python( std::make_shared()) - , sched(deck, es, ctxt, guard, python) -{ -} - -CaseObjects::~CaseObjects() -{ - this->guard.clear(); -} - -class RedirectCERR -{ -public: - explicit RedirectCERR(std::streambuf* buf); - ~RedirectCERR(); - -private: - std::streambuf* orig_; -}; - -RedirectCERR::RedirectCERR(std::streambuf* buf) - : orig_{ std::cerr.rdbuf(buf) } -{ -} - -RedirectCERR::~RedirectCERR() -{ - std::cerr.rdbuf(this->orig_); -} - -// ==================================================================== - -BOOST_AUTO_TEST_SUITE(WellDimensions) - -namespace { - void setWellDimsContext(const Opm::InputError::Action action, - Opm::ParseContext& ctxt) - { - ctxt.update(Opm::ParseContext::RUNSPEC_NUMWELLS_TOO_LARGE, action); - ctxt.update(Opm::ParseContext::RUNSPEC_CONNS_PER_WELL_TOO_LARGE, action); - ctxt.update(Opm::ParseContext::RUNSPEC_NUMGROUPS_TOO_LARGE, action); - ctxt.update(Opm::ParseContext::RUNSPEC_GROUPSIZE_TOO_LARGE, action); - } -} - -BOOST_AUTO_TEST_CASE(MaxGroupSize) -{ - Opm::ParseContext parseContext; - auto cse = CaseObjects{ simCaseWellDims(), parseContext }; - - // Verify at most ten wells in a single group. - BOOST_CHECK_EQUAL(Opm::maxGroupSize(cse.sched, 1), 10); -} - -BOOST_AUTO_TEST_CASE(ManyChildGroups) -{ - auto cse = CaseObjects { - simCaseNodeGroupSizeFailure(), - Opm::ParseContext{} - }; - - // 6 Child groups of 'PLAT3' - BOOST_CHECK_EQUAL(Opm::maxGroupSize(cse.sched, 1), 6); -} - -BOOST_AUTO_TEST_CASE(WellDims) -{ - Opm::ParseContext parseContext; - setWellDimsContext(Opm::InputError::THROW_EXCEPTION, parseContext); - - auto cse = CaseObjects{ simCaseWellDims(), parseContext}; - - // There should be no failures in basic input layer - BOOST_CHECK(!cse.guard); - - BOOST_CHECK_THROW( Opm::checkConsistentArrayDimensions(cse.es , cse.sched, - parseContext, cse.guard), - std::invalid_argument); - - setWellDimsContext(Opm::InputError::DELAYED_EXIT1, parseContext); - Opm::checkConsistentArrayDimensions(cse.es , cse.sched, - parseContext, cse.guard); - - // There *should* be errors from dimension checking - BOOST_CHECK(cse.guard); - - // Verify that we get expected output from ErrorGuard::dump() - boost::test_tools::output_test_stream output{"expect-wdims.err.out", true}; - { - RedirectCERR stream(output.rdbuf()); - - cse.guard.dump(); - - BOOST_CHECK(output.match_pattern()); - } -} - -BOOST_AUTO_TEST_CASE(WellDims_ManyChildGroups) -{ - Opm::ParseContext parseContext; - setWellDimsContext(Opm::InputError::THROW_EXCEPTION, parseContext); - - auto cse = CaseObjects{ simCaseNodeGroupSizeFailure(), parseContext}; - - // There should be no failures in basic input layer - BOOST_CHECK(!cse.guard); - - // There *should* be errors from dimension checking - BOOST_CHECK_THROW( Opm::checkConsistentArrayDimensions(cse.es , cse.sched, - parseContext, cse.guard), - std::invalid_argument); - - setWellDimsContext(Opm::InputError::DELAYED_EXIT1, parseContext); - Opm::checkConsistentArrayDimensions(cse.es , cse.sched, - parseContext, cse.guard); - - // There *should* be errors from dimension checking - BOOST_CHECK(cse.guard); - - // Verify that we get expected output from ErrorGuard::dump() - boost::test_tools::output_test_stream output{"expect-wdims.chldg.err.out", true}; - { - RedirectCERR stream(output.rdbuf()); - - cse.guard.dump(); - - BOOST_CHECK(output.match_pattern()); - } -} - -BOOST_AUTO_TEST_SUITE_END() diff --git a/ThirdParty/custom-opm-common/opm-common/tests/test_DoubHEAD.cpp b/ThirdParty/custom-opm-common/opm-common/tests/test_DoubHEAD.cpp deleted file mode 100644 index a19d0c26fc..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/test_DoubHEAD.cpp +++ /dev/null @@ -1,94 +0,0 @@ -/* - Copyright 2018 Statoil IT - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#define BOOST_TEST_MODULE DoubHEAD_Vector - -#include - -#include - -#include - -#include -#include -#include -#include - -#include -#include -#include -#include // partial_sum() -#include -#include - -namespace { - using Day = std::chrono::duration> - >; - - std::chrono::time_point startSimulation() - { - // 2015-04-09T00:00:00+0000 - auto timePoint = std::tm{}; - - timePoint.tm_year = 115; // 2015 - timePoint.tm_mon = 4 - 1; // April - timePoint.tm_mday = 9; // 9th - - return std::chrono::system_clock::from_time_t( - ::Opm::RestartIO::makeUTCTime(timePoint)); - } - - std::chrono::duration tstep_123() - { - return Day{ 123 }; - } - - Opm::RestartIO::DoubHEAD::TimeStamp - makeTStamp(std::chrono::time_point start, - std::chrono::duration elapsed) - { - return { start, elapsed }; - } -} // Anonymous - -BOOST_AUTO_TEST_SUITE(Member_Functions) - -BOOST_AUTO_TEST_CASE(Time_Stamp) -{ - const auto dh = Opm::RestartIO::DoubHEAD{} - .timeStamp(makeTStamp(startSimulation(), tstep_123())); - - const auto& v = dh.data(); - - // Start + elapsed = current (in days) - BOOST_CHECK_CLOSE(v[1 - 1] + v[161 - 1], v[162 - 1], 1.0e-10); - - // Elapsed time in days. - BOOST_CHECK_CLOSE(v[1 - 1], 123.0, 1.0e-10); - - // DateNum(startSimulation()) == - // floor(365.25 * 2015) + day_of_year(=99) - BOOST_CHECK_CLOSE(v[161 - 1], 736077.0, 1.0e-10); - - // Start + elapsed (days) - BOOST_CHECK_CLOSE(v[162 - 1], 736200.0, 1.0e-10); -} - -BOOST_AUTO_TEST_SUITE_END() diff --git a/ThirdParty/custom-opm-common/opm-common/tests/test_EGrid.cpp b/ThirdParty/custom-opm-common/opm-common/tests/test_EGrid.cpp deleted file mode 100644 index 40492535c9..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/test_EGrid.cpp +++ /dev/null @@ -1,187 +0,0 @@ -/* - + Copyright 2019 Equinor ASA. - + - + This file is part of the Open Porous Media project (OPM). - + - + OPM is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - + the Free Software Foundation, either version 3 of the License, or - + (at your option) any later version. - + - + OPM is distributed in the hope that it will be useful, - + but WITHOUT ANY WARRANTY; without even the implied warranty of - + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - + GNU General Public License for more details. - + - + You should have received a copy of the GNU General Public License - + along with OPM. If not, see . - + */ - - -#include "config.h" - -#include - -#define BOOST_TEST_MODULE Test EGrid -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -using Opm::EclIO::EGrid; - -template -bool -range_equal(InputIterator1 first1, InputIterator1 last1, - InputIterator2 first2, InputIterator2 last2) -{ - while(first1 != last1 && first2 != last2) - { - if(*first1 != *first2) return false; - ++first1; - ++first2; - } - return (first1 == last1) && (first2 == last2); -} - -bool compare_files(const std::string& filename1, const std::string& filename2) -{ - std::ifstream file1(filename1); - std::ifstream file2(filename2); - - std::istreambuf_iterator begin1(file1); - std::istreambuf_iterator begin2(file2); - - std::istreambuf_iterator end; - - return range_equal(begin1, end, begin2, end); -} - - -template -bool operator==(const std::vector & t1, const std::vector & t2) -{ - return std::equal(t1.begin(), t1.end(), t2.begin(), t2.end()); -} - -// test is using SPE1CASE1, with minor modifications in order to test API for EGrid class -// -> 6 cells made inactive, box: 5 7 5 6 1 1 - -// first pilar at x=0.0, y=0.0 and z=0.0 -// dx = 1000 ft, dy = 1000 ft. dz = 20 ft for layer 1, 30 ft for layer 2 and 50 ft for layer 3. -// size of grid is 10x10x3 - - -BOOST_AUTO_TEST_CASE(DimensAndIndices) { - - std::string testFile="SPE1CASE1.EGRID"; - - EGrid grid1(testFile); - - int nAct=grid1.activeCells(); - int nTot=grid1.totalNumberOfCells(); - - BOOST_CHECK_EQUAL(nAct,294); - BOOST_CHECK_EQUAL(nTot,300); - - auto dim = grid1.dimension(); - - BOOST_CHECK_EQUAL(dim[0],10); - BOOST_CHECK_EQUAL(dim[1],10); - BOOST_CHECK_EQUAL(dim[2],3); - - int globInd = grid1.global_index(3, 2, 1); - - BOOST_CHECK_EQUAL(globInd, 123); // 10*10*1 + 10*2 + 3 = 100+20+3 = 123 - - BOOST_CHECK_EQUAL(grid1.global_index(0, 0, 0), 0); - BOOST_CHECK_EQUAL(grid1.global_index(dim[0] - 1, dim[1] - 1, dim[2] - 1), nTot - 1); - - // check global_index valid range, should throw exception if outside - - BOOST_CHECK_THROW(grid1.global_index(-1, -1, -1), std::invalid_argument); - BOOST_CHECK_THROW(grid1.global_index(0, -1, 0), std::invalid_argument); - BOOST_CHECK_THROW(grid1.global_index(0, 0, -1), std::invalid_argument); - - BOOST_CHECK_THROW(grid1.global_index(dim[0], 0, 0), std::invalid_argument); - BOOST_CHECK_THROW(grid1.global_index(dim[0], dim[1], 0), std::invalid_argument); - BOOST_CHECK_THROW(grid1.global_index(dim[0], dim[1], dim[2]), std::invalid_argument); - - // 6 inactive cells in first layer, actInd not same as glogInd - // actInd and globInd are zero based indices - - int actInd = grid1.active_index(3,2,1); - - BOOST_CHECK_EQUAL(actInd, 117); // global index 123, - 6 inactive - BOOST_CHECK_EQUAL(grid1.active_index(0, 0, 0), 0); - BOOST_CHECK_EQUAL(grid1.active_index(dim[0] - 1, dim[1] - 1, dim[2] - 1), nAct - 1); - - // check active_index valid range, should throw exception if outside - - BOOST_CHECK_THROW(grid1.active_index(-1, 0, 0), std::invalid_argument); - BOOST_CHECK_THROW(grid1.active_index(-1, -1, 0), std::invalid_argument); - BOOST_CHECK_THROW(grid1.active_index(-1, -1, -1), std::invalid_argument); - - BOOST_CHECK_THROW(grid1.active_index(dim[0], 0, 0), std::invalid_argument); - BOOST_CHECK_THROW(grid1.active_index(dim[0], dim[1], 0), std::invalid_argument); - BOOST_CHECK_THROW(grid1.active_index(dim[0], dim[1], dim[2]), std::invalid_argument); - - auto res = grid1.ijk_from_active_index(actInd); - - BOOST_CHECK_EQUAL(res[0], 3); - BOOST_CHECK_EQUAL(res[1], 2); - BOOST_CHECK_EQUAL(res[2], 1); - - BOOST_CHECK_THROW(grid1.ijk_from_active_index(-1), std::invalid_argument); - BOOST_CHECK_THROW(grid1.ijk_from_active_index(nAct), std::invalid_argument); - - res = grid1.ijk_from_global_index(globInd); - - BOOST_CHECK_EQUAL(res[0], 3); - BOOST_CHECK_EQUAL(res[1], 2); - BOOST_CHECK_EQUAL(res[2], 1); - - BOOST_CHECK_THROW(grid1.ijk_from_global_index(-1), std::invalid_argument); - BOOST_CHECK_THROW(grid1.ijk_from_global_index(nTot), std::invalid_argument); -} - - -BOOST_AUTO_TEST_CASE(getCellCorners) { - - std::string testFile="SPE1CASE1.EGRID"; - - std::array ref_X = {3000,4000,3000,4000,3000,4000,3000,4000}; - std::array ref_Y = {2000,2000,3000,3000,2000,2000,3000,3000}; - std::array ref_Z = {8345,8345,8345,8345,8375,8375,8375,8375}; - - EGrid grid1(testFile); - - std::array X = {0.0}; - std::array Y = {0.0}; - std::array Z = {0.0}; - - // cell 4,3,2 => zero based 3,2,1 - grid1.getCellCorners({3, 2, 1}, X, Y, Z); - - BOOST_CHECK_EQUAL(X == ref_X, true); - BOOST_CHECK_EQUAL(Y == ref_Y, true); - BOOST_CHECK_EQUAL(Z == ref_Z, true); - - X = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0}; - Y = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0}; - Z = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0}; - - int globInd=grid1.global_index(3,2,1); - - grid1.getCellCorners(globInd,X,Y,Z); - - BOOST_CHECK_EQUAL(X == ref_X, true); - BOOST_CHECK_EQUAL(Y == ref_Y, true); - BOOST_CHECK_EQUAL(Z == ref_Z, true); -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/test_ERft.cpp b/ThirdParty/custom-opm-common/opm-common/tests/test_ERft.cpp deleted file mode 100644 index f6b44a41ed..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/test_ERft.cpp +++ /dev/null @@ -1,226 +0,0 @@ -/* - + Copyright 2019 Equinor ASA. - + - + This file is part of the Open Porous Media project (OPM). - + - + OPM is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - + the Free Software Foundation, either version 3 of the License, or - + (at your option) any later version. - + - + OPM is distributed in the hope that it will be useful, - + but WITHOUT ANY WARRANTY; without even the implied warranty of - + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - + GNU General Public License for more details. - + - + You should have received a copy of the GNU General Public License - + along with OPM. If not, see . - + */ - -#include "config.h" - -#include - -#define BOOST_TEST_MODULE Test EGrid -#include - -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -using namespace Opm::EclIO; - -template -bool -range_equal(InputIterator1 first1, InputIterator1 last1, - InputIterator2 first2, InputIterator2 last2) -{ - while(first1 != last1 && first2 != last2) - { - if(*first1 != *first2) return false; - ++first1; - ++first2; - } - return (first1 == last1) && (first2 == last2); -} - -bool compare_files(const std::string& filename1, const std::string& filename2) -{ - std::ifstream file1(filename1); - std::ifstream file2(filename2); - - std::istreambuf_iterator begin1(file1); - std::istreambuf_iterator begin2(file2); - - std::istreambuf_iterator end; - - return range_equal(begin1, end, begin2, end); -} - - -template -bool operator==(const std::vector & t1, const std::vector & t2) -{ - return std::equal(t1.begin(), t1.end(), t2.begin(), t2.end()); -} - -// test is using SPE1CASE1, with minor modifications in order to test API for EGrid class -// -> 6 cells made inactive, box: 5 7 5 6 1 1 - -// first pilar at x=0.0, y=0.0 and z=0.0 -// dx = 1000 ft, dy = 1000 ft. dz = 20 ft for layer 1, 30 ft for layer 2 and 50 ft for layer 3. -// size of grid is 10x10x3 - - -BOOST_AUTO_TEST_CASE(TestERft_1) { - using Date = std::tuple; - - std::vector ref_wellList= {"A-1H", "B-2H", "INJ", "PROD"}; - std::vector ref_dates= { - Date{2015,1, 1}, - Date{2015,9, 1}, - Date{2016,5,31}, - Date{2017,7,31}, - }; - - const std::vector> ref_rftList = { - {"PROD", Date{2015,1, 1}, 0.00000000e+00}, - {"INJ" , Date{2015,1, 1}, 0.00000000e+00}, - {"A-1H", Date{2015,9, 1}, 0.24300000E+03}, - {"B-2H", Date{2016,5,31}, 0.51600000E+03}, - {"PROD", Date{2017,7,31}, 0.94200000E+03} - }; - - std::string testFile="SPE1CASE1.RFT"; - - ERft rft1(testFile); - - std::vector wellList = rft1.listOfWells(); - std::vector rftDates = rft1.listOfdates(); - std::vector> rftList = rft1.listOfRftReports(); - - BOOST_CHECK_EQUAL(wellList==ref_wellList, true); - BOOST_CHECK_EQUAL(rftDates==ref_dates, true); - - BOOST_CHECK_EQUAL(rftList==ref_rftList, true); - - BOOST_CHECK_EQUAL(rft1.hasRft("PROD", Date{2015,1,1}), true); - BOOST_CHECK_EQUAL(rft1.hasRft("PROD",2015,1,1), true); - - BOOST_CHECK_EQUAL(rft1.hasRft("PROD", Date{2015,10,1}), false); - BOOST_CHECK_EQUAL(rft1.hasRft("XXXX", Date{2015,1,1}), false); - BOOST_CHECK_EQUAL(rft1.hasRft("PROD",2015,10,1), false); - BOOST_CHECK_EQUAL(rft1.hasRft("XXXX",2015,1,1), false); - - // test member function hasArray - - BOOST_CHECK_EQUAL(rft1.hasArray("SGAS","B-2H", Date{2016,5,31}), true); - BOOST_CHECK_EQUAL(rft1.hasArray("XXXX","B-2H", Date{2016,5,31}), false); - - BOOST_CHECK_THROW(rft1.hasArray("SGAS","C-2H", Date{2016,5,31}),std::invalid_argument); - BOOST_CHECK_THROW(rft1.hasArray("SGAS","B-2H", Date{2016,5,30}),std::invalid_argument); - BOOST_CHECK_THROW(rft1.hasArray("SGAS","C-2H", Date{2016,5,30}),std::invalid_argument); - BOOST_CHECK_THROW(rft1.hasArray("XXXX","C-2H", Date{2016,5,30}),std::invalid_argument); - - // // test member function getRft(name, wellName, date) - - std::vector vect1=rft1.getRft("CONIPOS","B-2H", Date{2016,5,31}); - std::vector vect2=rft1.getRft("PRESSURE","B-2H", Date{2016,5,31}); - std::vector vect3=rft1.getRft("WELLETC","B-2H", Date{2016,5,31}); - - BOOST_CHECK_EQUAL(vect1.size(), 3); - BOOST_CHECK_EQUAL(vect2.size(), 3); - BOOST_CHECK_EQUAL(vect3.size(), 16); - - // test member function getRft(name, reportIndex) - - std::vector vect1a=rft1.getRft("CONIPOS", 3); - BOOST_CHECK_EQUAL(vect1.size(), vect1a.size()); - - std::vector vect2a = rft1.getRft("PRESSURE", 3); - BOOST_CHECK_EQUAL(vect2.size(), vect2a.size()); - - for (size_t t = 0; t < vect2.size(); t++){ - BOOST_CHECK_EQUAL(vect2[t], vect2a[t]); - } - - std::vector vect3a = rft1.getRft("WELLETC", 3); - BOOST_CHECK_EQUAL(vect2.size(), vect2a.size()); - - for (size_t t = 0; t < vect3.size(); t++){ - BOOST_CHECK_EQUAL(vect3[t], vect3a[t]); - } - - // called with invalid argument, array not existing, wrong well name or wrong date - BOOST_CHECK_THROW(std::vector vect11=rft1.getRft("CONIPOS","C-2H", Date{2016,5,31}),std::invalid_argument); - BOOST_CHECK_THROW(std::vector vect11=rft1.getRft("CONIPOS","B-2H", Date{2016,5,30}),std::invalid_argument); - BOOST_CHECK_THROW(std::vector vect11=rft1.getRft("XXXXXXX","B-2H", Date{2016,5,31}),std::invalid_argument); - - // called with wrong type - BOOST_CHECK_THROW(std::vector vect11=rft1.getRft("SGAS","B-2H", Date{2016,5,31}),std::runtime_error); - BOOST_CHECK_THROW(std::vector vect11=rft1.getRft("CONIPOS","B-2H", Date{2016,5,31}),std::runtime_error); - BOOST_CHECK_THROW(std::vector vect11=rft1.getRft("CONIPOS","B-2H", Date{2016,5,31}), std::runtime_error); -} - - -BOOST_AUTO_TEST_CASE(TestERft_2) { - - std::string testFile="SPE1CASE1.RFT"; - - std::string outFile="TEST.RFT"; - - { - EclOutput eclTest(outFile, false); - - ERft rft1(testFile); - - auto rftList = rft1.listOfRftReports(); - - for (auto& rft : rftList) { - std::string wellName = std::get<0>(rft); - auto date = std::get<1>(rft); - - auto arrayList = rft1.listOfRftArrays(wellName, date); - - for (auto& array : arrayList) { - std::string arrName = std::get<0>(array); - eclArrType arrType = std::get<1>(array); - - if (arrType == INTE) { - std::vector vect = rft1.getRft(arrName, wellName, date); - eclTest.write(arrName, vect); - } else if (arrType == REAL) { - std::vector vect = rft1.getRft(arrName, wellName, date); - eclTest.write(arrName, vect); - } else if (arrType == DOUB) { - std::vector vect = rft1.getRft(arrName, wellName, date); - eclTest.write(arrName, vect); - } else if (arrType == LOGI) { - std::vector vect = rft1.getRft(arrName, wellName, date); - eclTest.write(arrName, vect); - } else if (arrType == CHAR) { - std::vector vect = rft1.getRft(arrName, wellName, date); - eclTest.write(arrName, vect); - } else if (arrType == MESS) { - eclTest.write(arrName, std::vector()); - } else { - std::cout << "unknown type " << std::endl; - exit(1); - } - } - } - } - - BOOST_CHECK_EQUAL(compare_files(testFile, outFile), true); - - if (remove(outFile.c_str())==-1) { - std::cout << " > Warning! temporary file was not deleted" << std::endl; - }; -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/test_ERsm.cpp b/ThirdParty/custom-opm-common/opm-common/tests/test_ERsm.cpp deleted file mode 100644 index 88691e64ee..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/test_ERsm.cpp +++ /dev/null @@ -1,212 +0,0 @@ -/* - Copyright 2020 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ -#define BOOST_TEST_MODULE EclipseRSMLoader - -#include - -#include -#include -#include -#include - -Opm::EclIO::ERsm create(const std::string& rsm_data) { - WorkArea work_area("test_ERsm"); - { - std::ofstream os("TEST.RSM"); - os << rsm_data; - } - return Opm::EclIO::ERsm("TEST.RSM"); -} - - -// Dont touch the string literals - it is all part of the format; down to the number of whitespace ... :-( - -std::string block1_days = R"(1 - ------------------------------------------------------------------------------------------------------------------------------- - SUMMARY OF RUN nor01-temp01-rsm-all OPM FLOW VERSION 1910 ANYTHING CAN GO HERE: USER, MACHINE ETC. - ------------------------------------------------------------------------------------------------------------------------------- - TIME YEARS FOPR GOPR GOPR GOPR GOPR GOPR GOPR GOPR - DAYS YEARS SM3/DAY SM3/DAY SM3/DAY SM3/DAY SM3/DAY SM3/DAY SM3/DAY SM3/DAY - MANI-C B1-DUMMY MANI-D1 INJE PROD MANI-B2 MANI-B1 - - ------------------------------------------------------------------------------------------------------------------------------- - 0 0 0 0 0 0 0 0 0 0 - 1.000000 0.002738 4379.802 0 0 4379.802 0 4379.802 0 0 - 4.000000 0.010951 4380.562 0 0 4380.562 0 4380.562 0 0 - 8.000000 0.021903 4381.301 0 0 4381.301 0 4381.301 0 0 -)"; - -std::string block1_hours = R"(1 - ------------------------------------------------------------------------------------------------------------------------------- - SUMMARY OF RUN nor01-temp01-rsm-all OPM FLOW VERSION 1910 ANYTHING CAN GO HERE: USER, MACHINE ETC. - ------------------------------------------------------------------------------------------------------------------------------- - TIME YEARS FOPR GOPR GOPR GOPR GOPR GOPR GOPR GOPR - HOURS YEARS SM3/DAY SM3/DAY SM3/DAY SM3/DAY SM3/DAY SM3/DAY SM3/DAY SM3/DAY - MANI-C B1-DUMMY MANI-D1 INJE PROD MANI-B2 MANI-B1 - - ------------------------------------------------------------------------------------------------------------------------------- - 0 0 0 0 0 0 0 0 0 0 - 1.000000 0.002738 4379.802 0 0 4379.802 0 4379.802 0 0 - 4.000000 0.010951 4380.562 0 0 4380.562 0 4380.562 0 0 - 8.000000 0.021903 4381.301 0 0 4381.301 0 4381.301 0 0 -)"; - - - -std::string block1_date = R"(1 - ------------------------------------------------------------------------------------------------------------------------------- - SUMMARY OF RUN nor01-temp01-rsm-date OPM FLOW VERSION 1910 ANYTHING CAN GO HERE: USER, MACHINE ETC. - ------------------------------------------------------------------------------------------------------------------------------- - DATE WWIT WWIT WWIT WWIT WWIT WWIT WWIT WWIT WWCT - SM3 SM3 SM3 SM3 SM3 SM3 SM3 SM3 - *10**3 *10**3 *10**3 *10**3 - C-2H C-3H C-4H C-4AH F-1H F-2H F-3H F-4H C-4H - - ------------------------------------------------------------------------------------------------------------------------------- - 1-MAR-1999 227.7381 0 46279.20 0 0 0 0 0 0 - 3-MAR-1999 238.5447 0 63147.95 0 0 0 0 0 0 - 4-MAR-1999 243.9480 0 71582.33 0 0 0 0 0 0 - 5-MAR-1999 249.3513 0 80016.70 0 0 0 0 0 0 -)"; - -std::string block2_date = R"(1 - ------------------------------------------------------------------------------------------------------------------------------- - SUMMARY OF RUN nor01-temp01-rsm-date OPM FLOW VERSION 1910 ANYTHING CAN GO HERE: USER, MACHINE ETC. - ------------------------------------------------------------------------------------------------------------------------------- - DATE WWIT WWIT WWIT WWIT WWIT WWIT WWIT WWIT WWCT - SM3 SM3 SM3 SM3 SM3 SM3 SM3 SM3 - *10**3 *10**3 *10**3 *10**3 - C-2H C-3H C-4H C-4AH F-1H F-2H F-3H F-4H C-4H - - ------------------------------------------------------------------------------------------------------------------------------- - 1-MAR-1999 227.7381 0 46279.20 0 0 0 0 0 0 - 3-MAR-1999 238.5447 0 63147.95 0 0 0 0 0 0 - 4-MAR-1999 243.9480 0 71582.33 0 0 0 0 0 0 -)"; - -std::string missing_time = R"(1 - ------------------------------------------------------------------------------------------------------------------------------- - SUMMARY OF RUN nor01-temp01-rsm-date OPM FLOW VERSION 1910 ANYTHING CAN GO HERE: USER, MACHINE ETC. - ------------------------------------------------------------------------------------------------------------------------------- - XDATE WWIT WWIT WWIT WWIT WWIT WWIT WWIT WWIT WWCT - SM3 SM3 SM3 SM3 SM3 SM3 SM3 SM3 - *10**3 *10**3 *10**3 *10**3 - C-2H C-3H C-4H C-4AH F-1H F-2H F-3H F-4H C-4H - - ------------------------------------------------------------------------------------------------------------------------------- - 1-MAR-1999 227.7381 0 46279.20 0 0 0 0 0 0 -)"; - - -std::string no_wgnames = R"(1 - ------------------------------------------------------------------------------------------------------------------------------- - SUMMARY OF RUN SPE1CASE1 OPM FLOW VERSION 1910 ANYTHING CAN GO HERE: USER, MACHINE ETC. - ------------------------------------------------------------------------------------------------------------------------------- - TIME DAY MONTH YEAR BGSAT BGSAT BGSAT BGSAT BGSAT BGSAT - DAYS - - 1 10 100 101 110 200 - ------------------------------------------------------------------------------------------------------------------------------- - 7 8 1 2015 0 0 0 0 0 0 - 14 15 1 2015 0 0 0 0 0 0 - 21 22 1 2015 0 0 0 0 0 0 - 28 29 1 2015 0 0 0 0 0 0 - 31 1 2 2015 0 0 0 0 0 0 - 38 8 2 2015 0 0 0 0 0 0 - 45 15 2 2015 0 0 0 0 0 0 -)"; - - -std::string multiple_blocks = R"(1 - ------------------------------------------------------------------------------------------------------------------------------- - SUMMARY OF RUN SPE1CASE1 OPM FLOW VERSION 1910 ANYTHING CAN GO HERE: USER, MACHINE ETC. - ------------------------------------------------------------------------------------------------------------------------------- - DATE BGSAT BGSAT BGSAT BGSAT BGSAT BGSAT BGSAT BGSAT BGSAT - - - 1 10 100 101 110 200 201 210 300 - ------------------------------------------------------------------------------------------------------------------------------- - 8-JAN-2015 0 0 0 0 0 0 0 0 0 - 15-JAN-2015 0 0 0 0 0 0 0 0 0 - 22-JAN-2015 0 0 0 0 0 0 0 0 0 - 29-JAN-2015 0 0 0 0 0 0 0 0 0 - 1-FEB-2015 0 0 0 0 0 0 0 0 0 -1 - ------------------------------------------------------------------------------------------------------------------------------- - SUMMARY OF RUN SPE1CASE1 OPM FLOW VERSION 1910 ANYTHING CAN GO HERE: USER, MACHINE ETC. - ------------------------------------------------------------------------------------------------------------------------------- - DATE BPR BPR FGOR FOPR WBHP WBHP WGIR WGIR WGIT - PSIA PSIA MSCF/STB STB/DAY PSIA PSIA MSCF/DAY MSCF/DAY MSCF - *10**3 - INJ PROD INJ PROD INJ - 1 300 - ------------------------------------------------------------------------------------------------------------------------------- - 8-JAN-2015 0 0 -0 604.7999 0 0 0 0 0 - 15-JAN-2015 0 0 -0 1209.599 0 0 0 0 0 - 22-JAN-2015 0 0 -0 1814.400 0 0 0 0 0 - 29-JAN-2015 0 0 -0 2419.199 0 0 0 0 0 - 1-FEB-2015 0 0 -0 2678.399 0 0 0 0 0 -)"; - - -BOOST_AUTO_TEST_CASE(ERsm) { - BOOST_CHECK_THROW(Opm::EclIO::ERsm("file/does/not/exist"), std::invalid_argument); - BOOST_CHECK_THROW( create("SomeThingInvalid"), std::invalid_argument); - BOOST_CHECK_THROW( create( block1_date + block2_date ) , std::invalid_argument ); - BOOST_CHECK_THROW( create( block1_hours ) , std::invalid_argument ); - auto rsm1 = create(block1_days); - auto rsm2 = create(block1_date); - - BOOST_CHECK_THROW( rsm1.dates(), std::invalid_argument); - BOOST_CHECK_THROW( rsm2.days(), std::invalid_argument); - BOOST_CHECK_THROW( rsm1.get("NO_SUCH_KEY"), std::out_of_range); - - const auto& wwit_c_2h = rsm2.get("WWIT:C-2H"); - BOOST_CHECK_EQUAL( wwit_c_2h.size(), 4 ); - std::vector expected = {227.7381, 238.5447, 243.9480, 249.3513}; - for (std::size_t index = 0; index < 4; index++) - BOOST_CHECK_CLOSE( expected[index] * 1000 , wwit_c_2h[index], 1e-6); - - const auto& wwit_c_4h = rsm2.get("WWIT:C-4H"); - BOOST_CHECK_EQUAL( wwit_c_4h.size(), 4 ); - std::vector expected2 = {46279.20, 63147.95, 71582.33, 80016.70}; - for (std::size_t index = 0; index < 4; index++) - BOOST_CHECK_CLOSE( expected2[index] * 1 , wwit_c_4h[index], 1e-6); - - std::vector expected_days = {0, 1, 4 , 8}; - BOOST_CHECK( rsm1.days() == expected_days); - - std::vector expected_dates = {{1999, 3, 1}, - {1999, 3, 3}, - {1999, 3, 4}, - {1999, 3, 5}}; - BOOST_CHECK( expected_dates == rsm2.dates() ); - BOOST_CHECK( rsm2.has_dates() ); - BOOST_CHECK( !rsm1.has_dates() ); - BOOST_CHECK( rsm2.has("WWIT:C-2H") ); - BOOST_CHECK( !rsm2.has("NO_SUCH_KEY") ); - - auto nums = create( no_wgnames ); - BOOST_CHECK( nums.has("BGSAT:1")); - - auto fopr_rsm = create( multiple_blocks ); - const auto& fopr = fopr_rsm.get("FOPR"); - std::vector expected_fopr = {604799.9, 1209599, 1814400, 2419199, 2678399}; - BOOST_CHECK(fopr == expected_fopr); -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/test_ERst.cpp b/ThirdParty/custom-opm-common/opm-common/tests/test_ERst.cpp deleted file mode 100644 index 58f3b7e788..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/test_ERst.cpp +++ /dev/null @@ -1,971 +0,0 @@ -/* - + Copyright 2019 Equinor ASA. - + - + This file is part of the Open Porous Media project (OPM). - + - + OPM is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - + the Free Software Foundation, either version 3 of the License, or - + (at your option) any later version. - + - + OPM is distributed in the hope that it will be useful, - + but WITHOUT ANY WARRANTY; without even the implied warranty of - + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - + GNU General Public License for more details. - + - + You should have received a copy of the GNU General Public License - + along with OPM. If not, see . - + */ - -#include "config.h" - -#include - -#define BOOST_TEST_MODULE Test EclIO -#include - -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -using namespace Opm::EclIO; - -template -bool -range_equal(InputIterator1 first1, InputIterator1 last1, - InputIterator2 first2, InputIterator2 last2) -{ - while(first1 != last1 && first2 != last2) - { - if(*first1 != *first2) return false; - ++first1; - ++first2; - } - return (first1 == last1) && (first2 == last2); -} - -bool compare_files(const std::string& filename1, const std::string& filename2) -{ - std::ifstream file1(filename1); - std::ifstream file2(filename2); - - std::istreambuf_iterator begin1(file1); - std::istreambuf_iterator begin2(file2); - - std::istreambuf_iterator end; - - return range_equal(begin1, end, begin2, end); -} - - -template -bool operator==(const std::vector & t1, const std::vector & t2) -{ - return std::equal(t1.begin(), t1.end(), t2.begin(), t2.end()); -} - -template -T calcSum(const std::vector& x) -{ - return std::accumulate(x.begin(), x.end(), T(0)); -} - - -BOOST_AUTO_TEST_CASE(TestERst_1) { - - std::string testFile="SPE1_TESTCASE.UNRST"; - std::vector refReportStepNumbers= {1,2,5,10,15,25,50,100,120}; - - std::vector ref_zwel_10 = {"PROD","","","INJ","",""}; - std::vector ref_zwel_25 = {"PROD","","","INJ","",""}; - - std::vector ref_icon_10 = {1,10,10,3,0,1,0,0,0,0,0,0,1,3,0,0,0,0,0,0,0,0,0,0,0,1,1, - 1,1,0,1,0,0,0,0,0,0,1,3,0,0,0,0,0,0,0,0,0,0,0}; - - std::vector ref_icon_25 = {1,10,10,3,0,1,0,0,0,0,0,0,1,3,0,0,0,0,0,0,0,0,0,0,0,1,1, - 1,1,0,1,0,0,0,0,0,0,1,3,0,0,0,0,0,0,0,0,0,0,0}; - - std::vector ref_logih_10 = {true,true,false,false,false,false,false,false,false,false,false,false,false, - false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false, - false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false, - false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false, - false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false, - false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false, - false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false, - false,false,false,false,false,false}; - - - std::vector ref_logih_25 = ref_logih_10; - - ERst rst1(testFile); - rst1.loadReportStepNumber(5); - - std::vector reportStepNumbers = rst1.listOfReportStepNumbers(); - BOOST_CHECK_EQUAL(reportStepNumbers==refReportStepNumbers, true); - - BOOST_CHECK_EQUAL(rst1.hasReportStepNumber(4), false); - BOOST_CHECK_EQUAL(rst1.hasReportStepNumber(5), true); - - // try loading non-existing report step, should throw exception - BOOST_CHECK_THROW(rst1.loadReportStepNumber(4) , std::invalid_argument ); - - - // try to get a list of vectors from non-existing report step, should throw exception - std::vector> rstArrays; // = rst1.listOfRstArrays(4); - BOOST_CHECK_THROW(rstArrays = rst1.listOfRstArrays(4), std::invalid_argument); - - // non exising report step number, should throw exception - - BOOST_CHECK_THROW(std::vector vect1=rst1.getRst("ICON",0, 0) , std::invalid_argument ); - BOOST_CHECK_THROW(std::vector vect2=rst1.getRst("PRESSURE",0, 0) , std::invalid_argument ); - BOOST_CHECK_THROW(std::vector vect3=rst1.getRst("XGRP",0, 0) , std::invalid_argument ); - BOOST_CHECK_THROW(std::vector vect4=rst1.getRst("LOGIHEAD",0, 0) , std::invalid_argument ); - BOOST_CHECK_THROW(std::vector vect4=rst1.getRst("ZWEL",0, 0) , std::invalid_argument ); - - // calling getRst member function with wrong type, should throw exception - - BOOST_CHECK_THROW(std::vector vect1=rst1.getRst("ICON",5, 0) , std::runtime_error ); - BOOST_CHECK_THROW(std::vector vect2=rst1.getRst("PRESSURE",5, 0), std::runtime_error ); - BOOST_CHECK_THROW(std::vector vect3=rst1.getRst("XGRP",5, 0), std::runtime_error ); - BOOST_CHECK_THROW(std::vector vect4=rst1.getRst("LOGIHEAD",5, 0), std::runtime_error ); - BOOST_CHECK_THROW(std::vector vect5=rst1.getRst("ZWEL",5, 0), std::runtime_error ); - - // report step number exists, but data is not loaded. Vector should in this case - // be loaded on demand. Hence not throwing an exception - - std::vector vect1=rst1.getRst("ICON",10, 0); - std::vector vect2=rst1.getRst("PRESSURE",10, 0); - std::vector vect3=rst1.getRst("XGRP",10, 0); - std::vector vect4=rst1.getRst("LOGIHEAD",10, 0); - std::vector vect5=rst1.getRst("ZWEL",10, 0); - - BOOST_CHECK_EQUAL(ref_icon_10==vect1, true); - - BOOST_CHECK_EQUAL(vect2.size()==300, true); - BOOST_REQUIRE_CLOSE (calcSum(vect2), 1.68803e+06, 1e-3); - - BOOST_CHECK_EQUAL(vect3.size()==360, true); - BOOST_REQUIRE_CLOSE (calcSum(vect3), 1.81382e+08, 1e-3); - - BOOST_CHECK_EQUAL(ref_logih_10==vect4, true); - BOOST_CHECK_EQUAL(ref_zwel_10==vect5, true); - - rst1.loadReportStepNumber(25); - - vect1 = rst1.getRst("ICON",25, 0); - vect2 = rst1.getRst("PRESSURE",25, 0); - vect3 = rst1.getRst("XGRP",25, 0); - vect4 = rst1.getRst("LOGIHEAD",25, 0); - vect5 = rst1.getRst("ZWEL",25, 0); - - BOOST_CHECK_EQUAL(ref_icon_25==vect1, true); - - BOOST_CHECK_EQUAL(vect2.size()==300, true); - BOOST_REQUIRE_CLOSE (calcSum(vect2), 1.92496e+06, 1e-3); - - BOOST_CHECK_EQUAL(vect3.size()==360, true); - BOOST_REQUIRE_CLOSE (calcSum(vect3), 4.58807e+08, 1e-3); - - BOOST_CHECK_EQUAL(ref_logih_25==vect4, true); - BOOST_CHECK_EQUAL(ref_zwel_25==vect5, true); - -} - -static void readAndWrite(EclOutput& eclTest, ERst& rst1, - const std::string& name, int seqnum, - eclArrType arrType) -{ - if (arrType == INTE) { - std::vector vect = rst1.getRst(name, seqnum, 0); - eclTest.write(name, vect); - } else if (arrType == REAL) { - std::vector vect = rst1.getRst(name, seqnum, 0); - eclTest.write(name, vect); - } else if (arrType == DOUB) { - std::vector vect = rst1.getRst(name, seqnum, 0); - eclTest.write(name, vect); - } else if (arrType == LOGI) { - std::vector vect = rst1.getRst(name, seqnum, 0); - eclTest.write(name, vect); - } else if (arrType == CHAR) { - std::vector vect = rst1.getRst(name, seqnum, 0); - eclTest.write(name, vect); - } else if (arrType == MESS) { - eclTest.write(name, std::vector()); - } else { - std::cout << "unknown type " << std::endl; - exit(1); - } -} - - -BOOST_AUTO_TEST_CASE(TestERst_2) { - - std::string testFile="SPE1_TESTCASE.UNRST"; - std::string outFile="TEST.UNRST"; - - // using API for ERst to read all array from a binary unified restart file1 - // Then write the data back to a new file and check that new file is identical with input file - - ERst rst1(testFile); - - { - EclOutput eclTest(outFile, false); - - std::vector seqnums = rst1.listOfReportStepNumbers(); - - for (size_t i = 0; i < seqnums.size(); i++) { - rst1.loadReportStepNumber(seqnums[i]); - - auto rstArrays = rst1.listOfRstArrays(seqnums[i]); - - for (auto& array : rstArrays) { - std::string name = std::get<0>(array); - eclArrType arrType = std::get<1>(array); - readAndWrite(eclTest, rst1, name, seqnums[i], arrType); - } - } - } - - BOOST_CHECK_EQUAL(compare_files(testFile, outFile), true); - - if (remove(outFile.c_str()) == -1) { - std::cout << " > Warning! temporary file was not deleted" << std::endl; - }; -} - -BOOST_AUTO_TEST_CASE(TestERst_3) { - - std::string testFile="SPE1_TESTCASE.FUNRST"; - std::string outFile="TEST.FUNRST"; - - // using API for ERst to read all array from a formatted unified restart file1 - // Then write the data back to a new file and check that new file is identical with input file - - ERst rst1(testFile); - - EclOutput eclTest(outFile, true); - - std::vector seqnums = rst1.listOfReportStepNumbers(); - for (unsigned int i=0; i(array); - eclArrType arrType = std::get<1>(array); - readAndWrite(eclTest, rst1, name, seqnums[i], arrType); - } - } - - BOOST_CHECK_EQUAL(compare_files(testFile, outFile), true); - - if (remove(outFile.c_str() )== -1) { - std::cout << " > Warning! temporary file was not deleted" << std::endl; - }; -} - -BOOST_AUTO_TEST_CASE(TestERst_4) { - - std::string testFile1="./SPE1_TESTCASE.UNRST"; - std::string testFile2="./SPE1_TESTCASE.F0025"; - std::string testFile3="./SPE1_TESTCASE.X0025"; - - ERst rst1(testFile1); - rst1.loadReportStepNumber(25); - - ERst rst2(testFile2); - rst2.loadReportStepNumber(25); - - ERst rst3(testFile3); - rst3.loadReportStepNumber(25); - - BOOST_CHECK_EQUAL(rst1.hasReportStepNumber(4), false); - BOOST_CHECK_EQUAL(rst1.hasReportStepNumber(25), true); - - BOOST_CHECK_EQUAL(rst2.hasReportStepNumber(4), false); - BOOST_CHECK_EQUAL(rst2.hasReportStepNumber(25), true); - - BOOST_CHECK_EQUAL(rst3.hasReportStepNumber(4), false); - BOOST_CHECK_EQUAL(rst3.hasReportStepNumber(25), true); - - std::vector pres1 = rst1.getRst("PRESSURE",25, 0); - std::vector pres2 = rst2.getRst("PRESSURE",25, 0); - std::vector pres3 = rst3.getRst("PRESSURE",25, 0); - - BOOST_CHECK_EQUAL(pres1==pres2, true); - BOOST_CHECK_EQUAL(pres1==pres3, true); - -} - - -// ==================================================================== -class RSet -{ -public: - explicit RSet(std::string base) - : odir_(Opm::filesystem::temp_directory_path() / - Opm::unique_path("rset-%%%%")) - , base_(std::move(base)) - { - Opm::filesystem::create_directories(this->odir_); - } - - ~RSet() - { - Opm::filesystem::remove_all(this->odir_); - } - - operator ::Opm::EclIO::OutputStream::ResultSet() const - { - return { this->odir_.string(), this->base_ }; - } - -private: - Opm::filesystem::path odir_; - std::string base_; -}; - -namespace { - template - void check_is_close(const Coll& c1, const Coll& c2) - { - using ElmType = typename std::remove_cv< - typename std::remove_reference< - typename std::iterator_traits< - decltype(std::begin(c1)) - >::value_type - >::type - >::type; - - for (auto b1 = c1.begin(), e1 = c1.end(), b2 = c2.begin(); - b1 != e1; ++b1, ++b2) - { - BOOST_CHECK_CLOSE(*b1, *b2, static_cast(1.0e-7)); - } - } -} // Anonymous namespace - -namespace Opm { namespace EclIO { - - // Needed by BOOST_CHECK_EQUAL_COLLECTIONS. - std::ostream& - operator<<(std::ostream& os, const EclFile::EclEntry& e) - { - os << "{ " << std::get<0>(e) - << ", " << static_cast(std::get<1>(e)) - << ", " << std::get<2>(e) - << " }"; - - return os; - } -}} // Namespace Opm::EclIO - -BOOST_AUTO_TEST_SUITE(Separate) - -BOOST_AUTO_TEST_CASE(Unformatted) -{ - const auto rset = RSet("CASE"); - const auto fmt = ::Opm::EclIO::OutputStream::Formatted{ false }; - const auto unif = ::Opm::EclIO::OutputStream::Unified { false }; - - { - const auto seqnum = 1; - auto rst = ::Opm::EclIO::OutputStream::Restart { - rset, seqnum, fmt, unif - }; - - rst.write("I", std::vector {1, 7, 2, 9}); - rst.write("L", std::vector {true, false, false, true}); - rst.write("S", std::vector {3.1f, 4.1f, 59.265f}); - rst.write("D", std::vector {2.71, 8.21}); - rst.write("Z", std::vector{"W1", "W2"}); - } - - { - const auto seqnum = 13; - auto rst = ::Opm::EclIO::OutputStream::Restart { - rset, seqnum, fmt, unif - }; - - rst.write("I", std::vector {35, 51, 13}); - rst.write("L", std::vector {true, true, true, false}); - rst.write("S", std::vector {17.29e-02f, 1.4142f}); - rst.write("D", std::vector {0.6931, 1.6180, 123.45e6}); - rst.write("Z", std::vector{"G1", "FIELD"}); - } - - { - const auto fname = ::Opm::EclIO::OutputStream:: - outputFileName(rset, "X0001"); - - auto rst = ::Opm::EclIO::ERst{fname}; - - BOOST_CHECK(rst.hasReportStepNumber(1)); - - { - const auto seqnum = rst.listOfReportStepNumbers(); - const auto expect_seqnum = std::vector{1}; - - BOOST_CHECK_EQUAL_COLLECTIONS(seqnum.begin(), seqnum.end(), - expect_seqnum.begin(), - expect_seqnum.end()); - } - - { - const auto vectors = rst.listOfRstArrays(1); - const auto expect_vectors = std::vector{ - Opm::EclIO::EclFile::EclEntry{"I", Opm::EclIO::eclArrType::INTE, 4}, - Opm::EclIO::EclFile::EclEntry{"L", Opm::EclIO::eclArrType::LOGI, 4}, - Opm::EclIO::EclFile::EclEntry{"S", Opm::EclIO::eclArrType::REAL, 3}, - Opm::EclIO::EclFile::EclEntry{"D", Opm::EclIO::eclArrType::DOUB, 2}, - Opm::EclIO::EclFile::EclEntry{"Z", Opm::EclIO::eclArrType::CHAR, 2}, - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(vectors.begin(), vectors.end(), - expect_vectors.begin(), - expect_vectors.end()); - } - - rst.loadReportStepNumber(1); - - { - const auto& I = rst.getRst("I", 1, 0); - const auto expect_I = std::vector{ 1, 7, 2, 9 }; - BOOST_CHECK_EQUAL_COLLECTIONS(I.begin(), I.end(), - expect_I.begin(), - expect_I.end()); - } - - { - const auto& L = rst.getRst("L", 1, 0); - const auto expect_L = std::vector { - true, false, false, true, - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(L.begin(), L.end(), - expect_L.begin(), - expect_L.end()); - } - - { - const auto& S = rst.getRst("S", 1, 0); - const auto expect_S = std::vector{ - 3.1f, 4.1f, 59.265f, - }; - - check_is_close(S, expect_S); - } - - { - const auto& D = rst.getRst("D", 1, 0); - const auto expect_D = std::vector{ - 2.71, 8.21, - }; - - check_is_close(D, expect_D); - } - - { - const auto& Z = rst.getRst("Z", 1, 0); - const auto expect_Z = std::vector{ - "W1", "W2", // ERst trims trailing blanks - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(Z.begin(), Z.end(), - expect_Z.begin(), - expect_Z.end()); - } - } - - { - const auto seqnum = 5; - auto rst = ::Opm::EclIO::OutputStream::Restart { - rset, seqnum, fmt, unif - }; - - rst.write("I", std::vector {1, 2, 3, 4}); - rst.write("L", std::vector {false, false, false, true}); - rst.write("S", std::vector {1.23e-04f, 1.234e5f, -5.4321e-9f}); - rst.write("D", std::vector {0.6931, 1.6180}); - rst.write("Z", std::vector{"HELLO", ", ", "WORLD"}); - } - - { - const auto fname = ::Opm::EclIO::OutputStream:: - outputFileName(rset, "X0005"); - - auto rst = ::Opm::EclIO::ERst{fname}; - - BOOST_CHECK(!rst.hasReportStepNumber( 1)); - BOOST_CHECK( rst.hasReportStepNumber( 5)); - BOOST_CHECK(!rst.hasReportStepNumber(13)); - - { - const auto seqnum = rst.listOfReportStepNumbers(); - const auto expect_seqnum = std::vector{5}; - - BOOST_CHECK_EQUAL_COLLECTIONS(seqnum.begin(), seqnum.end(), - expect_seqnum.begin(), - expect_seqnum.end()); - } - - { - const auto vectors = rst.listOfRstArrays(5); - const auto expect_vectors = std::vector{ - Opm::EclIO::EclFile::EclEntry{"I", Opm::EclIO::eclArrType::INTE, 4}, - Opm::EclIO::EclFile::EclEntry{"L", Opm::EclIO::eclArrType::LOGI, 4}, - Opm::EclIO::EclFile::EclEntry{"S", Opm::EclIO::eclArrType::REAL, 3}, - Opm::EclIO::EclFile::EclEntry{"D", Opm::EclIO::eclArrType::DOUB, 2}, - Opm::EclIO::EclFile::EclEntry{"Z", Opm::EclIO::eclArrType::CHAR, 3}, - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(vectors.begin(), vectors.end(), - expect_vectors.begin(), - expect_vectors.end()); - } - - rst.loadReportStepNumber(5); - - { - const auto& I = rst.getRst("I", 5, 0); - const auto expect_I = std::vector{ 1, 2, 3, 4 }; - BOOST_CHECK_EQUAL_COLLECTIONS(I.begin(), I.end(), - expect_I.begin(), - expect_I.end()); - } - - { - const auto& L = rst.getRst("L", 5, 0); - const auto expect_L = std::vector { - false, false, false, true, - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(L.begin(), L.end(), - expect_L.begin(), - expect_L.end()); - } - - { - const auto& S = rst.getRst("S", 5, 0); - const auto expect_S = std::vector{ - 1.23e-04f, 1.234e5f, -5.4321e-9f, - }; - - check_is_close(S, expect_S); - } - - { - const auto& D = rst.getRst("D", 5, 0); - const auto expect_D = std::vector{ - 0.6931, 1.6180, - }; - - check_is_close(D, expect_D); - } - - { - const auto& Z = rst.getRst("Z", 5, 0); - const auto expect_Z = std::vector{ - "HELLO", ",", "WORLD", // ERst trims trailing blanks - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(Z.begin(), Z.end(), - expect_Z.begin(), - expect_Z.end()); - } - } - - { - const auto seqnum = 13; - auto rst = ::Opm::EclIO::OutputStream::Restart { - rset, seqnum, fmt, unif - }; - - rst.write("I", std::vector {35, 51, 13}); - rst.write("L", std::vector {true, true, true, false}); - rst.write("S", std::vector {17.29e-02f, 1.4142f}); - rst.write("D", std::vector {0.6931, 1.6180, 123.45e6}); - rst.write("Z", std::vector{"G1", "FIELD"}); - } - - { - const auto fname = ::Opm::EclIO::OutputStream:: - outputFileName(rset, "X0013"); - - auto rst = ::Opm::EclIO::ERst{fname}; - - BOOST_CHECK(!rst.hasReportStepNumber( 1)); - BOOST_CHECK(!rst.hasReportStepNumber( 5)); - BOOST_CHECK( rst.hasReportStepNumber(13)); - - { - const auto seqnum = rst.listOfReportStepNumbers(); - const auto expect_seqnum = std::vector{13}; - - BOOST_CHECK_EQUAL_COLLECTIONS(seqnum.begin(), seqnum.end(), - expect_seqnum.begin(), - expect_seqnum.end()); - } - - { - const auto vectors = rst.listOfRstArrays(13); - const auto expect_vectors = std::vector{ - Opm::EclIO::EclFile::EclEntry{"I", Opm::EclIO::eclArrType::INTE, 3}, - Opm::EclIO::EclFile::EclEntry{"L", Opm::EclIO::eclArrType::LOGI, 4}, - Opm::EclIO::EclFile::EclEntry{"S", Opm::EclIO::eclArrType::REAL, 2}, - Opm::EclIO::EclFile::EclEntry{"D", Opm::EclIO::eclArrType::DOUB, 3}, - Opm::EclIO::EclFile::EclEntry{"Z", Opm::EclIO::eclArrType::CHAR, 2}, - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(vectors.begin(), vectors.end(), - expect_vectors.begin(), - expect_vectors.end()); - } - - rst.loadReportStepNumber(13); - - { - const auto& I = rst.getRst("I", 13, 0); - const auto expect_I = std::vector{ 35, 51, 13}; - BOOST_CHECK_EQUAL_COLLECTIONS(I.begin(), I.end(), - expect_I.begin(), - expect_I.end()); - } - - { - const auto& L = rst.getRst("L", 13, 0); - const auto expect_L = std::vector { - true, true, true, false, - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(L.begin(), L.end(), - expect_L.begin(), - expect_L.end()); - } - - { - const auto& S = rst.getRst("S", 13, 0); - const auto expect_S = std::vector{ - 17.29e-02f, 1.4142f, - }; - - check_is_close(S, expect_S); - } - - { - const auto& D = rst.getRst("D", 13, 0); - const auto expect_D = std::vector{ - 0.6931, 1.6180, 123.45e6, - }; - - check_is_close(D, expect_D); - } - - { - const auto& Z = rst.getRst("Z", 13, 0); - const auto expect_Z = std::vector{ - "G1", "FIELD", // ERst trims trailing blanks - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(Z.begin(), Z.end(), - expect_Z.begin(), - expect_Z.end()); - } - } -} - -BOOST_AUTO_TEST_CASE(Formatted) -{ - const auto rset = RSet("CASE.T01."); - const auto fmt = ::Opm::EclIO::OutputStream::Formatted{ true }; - const auto unif = ::Opm::EclIO::OutputStream::Unified { false }; - - { - const auto seqnum = 1; - auto rst = ::Opm::EclIO::OutputStream::Restart { - rset, seqnum, fmt, unif - }; - - rst.write("I", std::vector {1, 7, 2, 9}); - rst.write("L", std::vector {true, false, false, true}); - rst.write("S", std::vector {3.1f, 4.1f, 59.265f}); - rst.write("D", std::vector {2.71, 8.21}); - rst.write("Z", std::vector{"W1", "W2"}); - } - - { - const auto seqnum = 13; - auto rst = ::Opm::EclIO::OutputStream::Restart { - rset, seqnum, fmt, unif - }; - - rst.write("I", std::vector {35, 51, 13}); - rst.write("L", std::vector {true, true, true, false}); - rst.write("S", std::vector {17.29e-02f, 1.4142f}); - rst.write("D", std::vector {0.6931, 1.6180, 123.45e6}); - rst.write("Z", std::vector{"G1", "FIELD"}); - } - - { - using ::Opm::EclIO::OutputStream::Restart; - - const auto fname = ::Opm::EclIO::OutputStream:: - outputFileName(rset, "F0013"); - - auto rst = ::Opm::EclIO::ERst{fname}; - - { - const auto vectors = rst.listOfRstArrays(13); - const auto expect_vectors = std::vector{ - // No SEQNUM in separate output files - Opm::EclIO::EclFile::EclEntry{"I", Opm::EclIO::eclArrType::INTE, 3}, - Opm::EclIO::EclFile::EclEntry{"L", Opm::EclIO::eclArrType::LOGI, 4}, - Opm::EclIO::EclFile::EclEntry{"S", Opm::EclIO::eclArrType::REAL, 2}, - Opm::EclIO::EclFile::EclEntry{"D", Opm::EclIO::eclArrType::DOUB, 3}, - Opm::EclIO::EclFile::EclEntry{"Z", Opm::EclIO::eclArrType::CHAR, 2}, - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(vectors.begin(), vectors.end(), - expect_vectors.begin(), - expect_vectors.end()); - } - - rst.loadReportStepNumber(13); - - { - const auto& I = rst.getRst("I", 13, 0); - const auto expect_I = std::vector{ 35, 51, 13 }; - BOOST_CHECK_EQUAL_COLLECTIONS(I.begin(), I.end(), - expect_I.begin(), - expect_I.end()); - } - - { - const auto& L = rst.getRst("L", 13, 0); - const auto expect_L = std::vector { - true, true, true, false, - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(L.begin(), L.end(), - expect_L.begin(), - expect_L.end()); - } - - { - const auto& S = rst.getRst("S", 13, 0); - const auto expect_S = std::vector{ - 17.29e-02f, 1.4142f, - }; - - check_is_close(S, expect_S); - } - - { - const auto& D = rst.getRst("D", 13, 0); - const auto expect_D = std::vector{ - 0.6931, 1.6180, 123.45e6, - }; - - check_is_close(D, expect_D); - } - - { - const auto& Z = rst.getRst("Z", 13, 0); - const auto expect_Z = std::vector{ - "G1", "FIELD", // ERst trims trailing blanks - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(Z.begin(), Z.end(), - expect_Z.begin(), - expect_Z.end()); - } - } - - { - // Separate output. Step 13 should be unaffected. - const auto seqnum = 5; - auto rst = ::Opm::EclIO::OutputStream::Restart { - rset, seqnum, fmt, unif - }; - - rst.write("I", std::vector {1, 2, 3, 4}); - rst.write("L", std::vector {false, false, false, true}); - rst.write("S", std::vector {1.23e-04f, 1.234e5f, -5.4321e-9f}); - rst.write("D", std::vector {0.6931, 1.6180}); - rst.write("Z", std::vector{"HELLO", ", ", "WORLD"}); - } - - { - using ::Opm::EclIO::OutputStream::Restart; - - const auto fname = ::Opm::EclIO::OutputStream:: - outputFileName(rset, "F0005"); - - auto rst = ::Opm::EclIO::ERst{fname}; - - { - const auto vectors = rst.listOfRstArrays(5); - const auto expect_vectors = std::vector{ - // No SEQNUM in separate output files - Opm::EclIO::EclFile::EclEntry{"I", Opm::EclIO::eclArrType::INTE, 4}, - Opm::EclIO::EclFile::EclEntry{"L", Opm::EclIO::eclArrType::LOGI, 4}, - Opm::EclIO::EclFile::EclEntry{"S", Opm::EclIO::eclArrType::REAL, 3}, - Opm::EclIO::EclFile::EclEntry{"D", Opm::EclIO::eclArrType::DOUB, 2}, - Opm::EclIO::EclFile::EclEntry{"Z", Opm::EclIO::eclArrType::CHAR, 3}, - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(vectors.begin(), vectors.end(), - expect_vectors.begin(), - expect_vectors.end()); - } - - rst.loadReportStepNumber(5); - - { - const auto& I = rst.getRst("I", 5, 0); - const auto expect_I = std::vector{ 1, 2, 3, 4 }; - BOOST_CHECK_EQUAL_COLLECTIONS(I.begin(), I.end(), - expect_I.begin(), - expect_I.end()); - } - - { - const auto& L = rst.get("L"); - const auto expect_L = std::vector { - false, false, false, true, - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(L.begin(), L.end(), - expect_L.begin(), - expect_L.end()); - } - - { - const auto& S = rst.getRst("S", 5, 0); - const auto expect_S = std::vector{ - 1.23e-04f, 1.234e5f, -5.4321e-9f, - }; - - check_is_close(S, expect_S); - } - - { - const auto& D = rst.getRst("D", 5, 0); - const auto expect_D = std::vector{ - 0.6931, 1.6180, - }; - - check_is_close(D, expect_D); - } - - { - const auto& Z = rst.getRst("Z", 5, 0); - const auto expect_Z = std::vector{ - "HELLO", ",", "WORLD", // ERst trims trailing blanks - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(Z.begin(), Z.end(), - expect_Z.begin(), - expect_Z.end()); - } - } - - // ------------------------------------------------------- - // Don't rewrite step 13. Output file should still exist. - // ------------------------------------------------------- - - { - using ::Opm::EclIO::OutputStream::Restart; - - const auto fname = ::Opm::EclIO::OutputStream:: - outputFileName(rset, "F0013"); - - auto rst = ::Opm::EclIO::ERst{fname}; - - BOOST_CHECK(rst.hasReportStepNumber(13)); - - { - const auto vectors = rst.listOfRstArrays(13); - const auto expect_vectors = std::vector{ - // No SEQNUM in separate output files. - Opm::EclIO::EclFile::EclEntry{"I", Opm::EclIO::eclArrType::INTE, 3}, - Opm::EclIO::EclFile::EclEntry{"L", Opm::EclIO::eclArrType::LOGI, 4}, - Opm::EclIO::EclFile::EclEntry{"S", Opm::EclIO::eclArrType::REAL, 2}, - Opm::EclIO::EclFile::EclEntry{"D", Opm::EclIO::eclArrType::DOUB, 3}, - Opm::EclIO::EclFile::EclEntry{"Z", Opm::EclIO::eclArrType::CHAR, 2}, - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(vectors.begin(), vectors.end(), - expect_vectors.begin(), - expect_vectors.end()); - } - - rst.loadReportStepNumber(13); - - { - const auto& I = rst.getRst("I", 13, 0); - const auto expect_I = std::vector{ 35, 51, 13 }; - BOOST_CHECK_EQUAL_COLLECTIONS(I.begin(), I.end(), - expect_I.begin(), - expect_I.end()); - } - - { - const auto& L = rst.getRst("L", 13, 0); - const auto expect_L = std::vector { - true, true, true, false, - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(L.begin(), L.end(), - expect_L.begin(), - expect_L.end()); - } - - { - const auto& S = rst.getRst("S", 13, 0); - const auto expect_S = std::vector{ - 17.29e-02f, 1.4142f, - }; - - check_is_close(S, expect_S); - } - - { - const auto& D = rst.getRst("D", 13, 0); - const auto expect_D = std::vector{ - 0.6931, 1.6180, 123.45e6, - }; - - check_is_close(D, expect_D); - } - - { - const auto& Z = rst.getRst("Z", 13, 0); - const auto expect_Z = std::vector{ - "G1", "FIELD", // ERst trims trailing blanks - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(Z.begin(), Z.end(), - expect_Z.begin(), - expect_Z.end()); - } - } -} - - - -BOOST_AUTO_TEST_SUITE_END() diff --git a/ThirdParty/custom-opm-common/opm-common/tests/test_ESmry.cpp b/ThirdParty/custom-opm-common/opm-common/tests/test_ESmry.cpp deleted file mode 100644 index d6dce5c617..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/test_ESmry.cpp +++ /dev/null @@ -1,388 +0,0 @@ -/* - + Copyright 2019 Equinor ASA. - + - + This file is part of the Open Porous Media project (OPM). - + - + OPM is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - + the Free Software Foundation, either version 3 of the License, or - + (at your option) any later version. - + - + OPM is distributed in the hope that it will be useful, - + but WITHOUT ANY WARRANTY; without even the implied warranty of - + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - + GNU General Public License for more details. - + - + You should have received a copy of the GNU General Public License - + along with OPM. If not, see . - + */ - -#include "config.h" - -#include -#include - -#define BOOST_TEST_MODULE Test EclIO -#include - -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -using Opm::EclIO::ESmry; - -template -bool -range_equal(InputIterator1 first1, InputIterator1 last1, - InputIterator2 first2, InputIterator2 last2) -{ - while(first1 != last1 && first2 != last2) - { - if(*first1 != *first2) return false; - ++first1; - ++first2; - } - return (first1 == last1) && (first2 == last2); -} - -bool compare_files(const std::string& filename1, const std::string& filename2) -{ - std::ifstream file1(filename1); - std::ifstream file2(filename2); - - std::istreambuf_iterator begin1(file1); - std::istreambuf_iterator begin2(file2); - - std::istreambuf_iterator end; - - return range_equal(begin1, end, begin2, end); -} - - -template -bool operator==(const std::vector & t1, const std::vector & t2) -{ - return std::equal(t1.begin(), t1.end(), t2.begin(), t2.end()); -} - - - -void getRefSmryVect(std::vector &time_ref, std::vector &wgpr_prod_ref, std::vector &wbhp_prod_ref, std::vector &wbhp_inj_ref, - std::vector &fgor_ref, std::vector &bpr_111_ref, std::vector &bpr_10103_ref) { - - // reference vectors check against resinsight, right click and show plot data. - - time_ref = {1,4,13,31,59,90,120,151,181,212,243,273,304,334,365,396,424,455,485,516,546,577,608,638,669,699,730,761,789,820,850, - 881,911,942,973,1003,1034,1064,1095,1126,1154,1185,1215,1246,1276,1307,1338,1368,1399,1429,1460,1491,1519,1550,1580,1611,1641,1672,1703,1733, - 1764,1794,1825,1856,1884,1915,1945,1976,2006,2037,2068,2098,2129,2159,2190,2221,2249,2280,2310,2341,2371,2402,2433,2463,2494,2524,2555,2586, - 2614,2645,2675,2706,2736,2767,2798,2828,2859,2889,2920,2951,2979,3010,3040,3071,3101,3132,3163,3193,3224,3254,3285,3316,3344,3375,3405,3436, - 3466,3497,3528,3558,3589,3619,3650}; - - - - wgpr_prod_ref = { 25400,25400.01,25400,24868.41,24679.34,24722.67,24727.77,24727.34,24727.29,24728.52,24730.62,24733.06,24735.76, - 24738.4,24741.04,24743.66,24745.98,24748.4,24750.63,24752.83,24756.07,24761.09,24764.1,24784,27066.45,33575.16,43705.94,54388.21,65340.68, - 77829.57,88535.32,98802.72,108186,117395.1,125395.9,128689.4,129727.7,130422.1,130712.2,130653.5,130509.7,130192.4,129639.2,128959.1,128221.1, - 127395.6,126528,125665.9,124767.1,123897.2,123015.2,122150.7,121380.2,120541.4,119750.7,119008.2,118720,118329.8,117777.3,117232.2,116687.7, - 116198.9,115723,115269.7,114877.9,114498.6,113968.2,113365.6,112830.9,112342.7,111902.2,111506.3,111429.6,111820.9,112200.7,112393.1,112350.7, - 112093,111747.9,111399.3,111158.4,110974.7,110812.2,110704,110753.9,110856.4,110930.2,111033.1,111159.7,111290.7,111532.7,111754.7,111923.3, - 112092.7,112282.4,112476.8,112690.1,112907.5,113139.5,113373.6,113588.7,113835.7,114116.7,114427.3,114735.8,115058.2,115383.3,115700.7,116031.4, - 116362.3,116715.3,117065.4,117363.8,117677.7,117947.1,118135.7,118303.8,118480.7,118663,118842.3,119024.9,119195,119350.3}; - - wbhp_prod_ref = {2904.77,2667.102,2430.112,2295.094,2233.452,2252.221,2311.47,2386.978,2464.336,2544.591,2623.208,2697.206, - 2771.272,2840.809,2910.732,2978.707,3038.701,3104.135,3166.967,3231.747,3294.372,3358.698,3434.863,3509.692,3539.855,3415.612,3121.1,2793.217,2517.024, - 2246.404,2005.897,1766.418,1534.75,1295.477,1072.804,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000, - 1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000, - 1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000, - 1000,1000,1000,1000,1000,1000,1000,1000,1000,1000}; - - wbhp_inj_ref = {8253.15,8014.97,7329.12,6983.16,6684.92,6575.38,6528.93,6476.34,6453.38,6449.5,6458.79,6480.98,6510.48,6542.09,6577.34, - 6614.92,6650.01,6689.56,6728.47,6769.33,6808.93,6849.93,6890.88,6930.45,6970.21,7004.62,7031.64,7047.83,7052.25,7043.31,7022.21,6988.23,6944.89, - 6889.79,6825.3,6757.2,6684.39,6613.54,6540.99,6469.54,6406.19,6337.45,6272.51,6207.1,6145.47,6083.56,6023.49,5967.08,5910.65,5857.73,5804.9,5753.85, - 5709.25,5661.67,5617.34,5573.38,5532.49,5491.8,5452.55,5415.84,5379.28,5345.09,5311.01,5277.73,5248.81,5217.83,5188.74,5159.81,5132.76,5105.75,5079.57, - 5054.97,5030.16,5006.49,4982.17,4958,4936.49,4913.21,4891.25,4869.29,4848.68,4827.92,4807.7,4788.72,4769.62,4751.56,4733.24,4715.3,4699.48,4682.35, - 4666.14,4649.83,4634.43,4618.94,4603.88,4589.81,4575.75,4562.72,4549.85,4537.6,4526.95,4515.46,4504.59,4493.46,4482.87,4471.97,4461.14,4450.65,4439.73, - 4429.22,4418.21,4407.14,4397.07,4385.85,4374.93,4363.59,4352.5,4341.05,4329.71,4318.7,4307.34,4296.4,4285.14}; - - fgor_ref = { 1.27,1.27,1.27,1.24342,1.23397,1.23613,1.23639,1.23637,1.23636,1.23643,1.23653,1.23665,1.23679,1.23692,1.23705,1.23718,1.2373, - 1.23742,1.23753,1.23764,1.2378,1.23805,1.2382,1.2392,1.35323,1.67876,2.18511,2.71941,3.26676,3.888,4.42677,4.93806,5.4093,5.86975,6.2698,6.60301, - 6.91579,7.19277,7.44386,7.66559,7.8618,8.06106,8.22055,8.37112,8.50559,8.63422,8.75421,8.86387,8.97159,9.07182,9.17264,9.27578,9.36818,9.4675,9.56145, - 9.6552,9.81817,9.96311,10.0741,10.1726,10.2715,10.3662,10.4631,10.5602,10.648,10.7503,10.812,10.8645,10.9203,10.985,11.055,11.1259,11.2608,11.4882, - 11.7386,11.9596,12.1154,12.2423,12.3375,12.4268,12.5285,12.6496,12.7744,12.9017,13.0636,13.2416,13.4274,13.6136,13.7875,13.9853,14.2141,14.4478, - 14.6595,14.8698,15.081,15.29,15.5087,15.7207,15.9375,16.1507,16.3397,16.5477,16.7576,16.9828,17.2054,17.4386,17.6743,17.9048,18.1461,18.3837,18.6359,18.8934,19.1273,19.3865,19.6289,19.8495,20.0575,20.2783,20.5075,20.7371,20.9815,21.2229,21.4733}; - - bpr_111_ref = {5192.06,5606.51,5909.88,6057.86,6080.45,6080.23,6081.54,6084.29,6097.11,6119.32,6147.81,6181.28,6218.68,6256.71,6297.53, - 6339.85,6378.65,6421.72,6463.58,6507.1,6548.96,6591.99,6634.73,6675.85,6717.01,6752.59,6780.59,6797.41,6802.21,6793.55,6772.59,6738.64,6695.22, - 6639.93,6575.16,6506.73,6433.56,6362.35,6289.45,6217.66,6154.01,6084.96,6019.74,5954.06,5892.19,5830.05,5769.77,5713.17,5656.56,5603.5,5550.54, - 5499.38,5454.69,5407.03,5362.65,5318.65,5277.74,5237.04,5197.81,5161.12,5124.6,5090.45,5056.44,5023.23,4994.12,4962.81,4933.43,4904.23,4876.93, - 4849.68,4823.29,4798.5,4773.5,4749.65,4725.15,4700.79,4679.13,4655.68,4633.58,4611.48,4590.75,4569.88,4549.56,4530.49,4511.31,4493.19,4474.8,4456.8, - 4440.94,4423.76,4407.52,4391.18,4375.77,4360.26,4345.2,4331.13,4317.09,4304.08,4291.25,4279.05,4268.46,4257.02,4246.22,4235.16,4224.65,4213.81, - 4203.05,4192.62,4181.76,4171.3,4160.34,4149.32,4139.29,4128.11,4117.22,4105.91,4094.85,4083.42,4072.1,4061.11,4049.77,4038.84,4027.6}; - - bpr_10103_ref = { 4583.96,4323.13,4063.73,3936.52,3884.46,3904.56,3969.39,4052.03,4136.77,4224.77,4311.05,4392.34,4473.78,4550.3,4627.31, - 4702.24,4768.42,4840.68,4910.14,4981.81,5051.17,5122.48,5206.98,5290.2,5339.93,5335.32,5290.28,5224.73,5142.4,5051.97,4968.24,4882.83,4793.78,4697.18, - 4600.77,4541.35,4502.17,4466.12,4428.31,4389.78,4355.46,4318.33,4282.8,4246.64,4212.19,4177.25,4143.1,4110.87,4078.55,4048.17,4017.89,3989.55,3964.72, - 3938.13,3913.35,3888.53,3864.13,3839.42,3816.21,3794.87,3773.77,3754.37,3735.2,3716.65,3700.38,3683.04,3667.23,3651.1,3635.94,3620.84,3606.19,3592.37, - 3578.56,3565.21,3550.34,3535.32,3521.95,3507.4,3493.98,3481.08,3469.23,3457.1,3445.23,3434.31,3423.9,3413.55,3402.49,3392.2,3383.36,3373.38,3363.72, - 3353.81,3344.61,3335.8,3327.55,3319.76,3312.03,3304.96,3298.14,3291.74,3286.38,3280.83,3275.92,3271,3266.36,3261.69,3257.16,3252.91,3248.64,3244.7, - 3240.73,3236.73,3232.96,3228.72,3224.57,3220.09,3215.85,3211.46,3207.02,3202.65,3198.03,3193.45,3188.54}; - -} - -std::vector getFrom(const std::vector &ref_vect,int from){ - - std::vector vect; - - for (unsigned int i=from; i time_ref, wgpr_prod_ref, wbhp_prod_ref, wbhp_inj_ref, fgor_ref, bpr_111_ref, bpr_10103_ref; - - getRefSmryVect(time_ref, wgpr_prod_ref, wbhp_prod_ref, wbhp_inj_ref,fgor_ref, bpr_111_ref, bpr_10103_ref); - - ESmry smry1("SPE1CASE1.SMSPEC"); - smry1.LoadData(); - - std::vector smryVect = smry1.get("TIME"); - BOOST_CHECK_EQUAL(smryVect==time_ref, true); - const auto dates = smry1.dates(); - for (std::size_t index = 0; index < dates.size(); index++) { - auto diff = dates[index]- smry1.startdate(); - auto diff_seconds = std::chrono::duration_cast(diff).count(); - BOOST_CHECK_CLOSE(diff_seconds, 24*3600 * smryVect[index], 1e-6); - } - - - - smryVect = smry1.get("WGPR:PROD"); - - for (unsigned int i=0;i< smryVect.size();i++){ - BOOST_REQUIRE_CLOSE (smryVect[i], wgpr_prod_ref[i], 0.01); - } - - smryVect = smry1.get("WBHP:PROD"); - - for (unsigned int i=0;i< smryVect.size();i++){ - BOOST_REQUIRE_CLOSE (smryVect[i], wbhp_prod_ref[i], 0.01); - } - - smryVect = smry1.get("WBHP:INJ"); - - for (unsigned int i=0;i< smryVect.size();i++){ - BOOST_REQUIRE_CLOSE (smryVect[i], wbhp_inj_ref[i], 0.01); - } - - smryVect = smry1.get("FGOR"); - - for (unsigned int i=0;i< smryVect.size();i++){ - BOOST_REQUIRE_CLOSE (smryVect[i], fgor_ref[i], 0.01); - } - - smryVect = smry1.get("BPR:1,1,1"); - - for (unsigned int i=0;i< smryVect.size();i++){ - BOOST_REQUIRE_CLOSE (smryVect[i], bpr_111_ref[i], 0.01); - } - - smryVect = smry1.get("BPR:10,10,3"); - - for (unsigned int i=0;i< smryVect.size();i++){ - BOOST_REQUIRE_CLOSE (smryVect[i], bpr_10103_ref[i], 0.01); - } -} - -BOOST_AUTO_TEST_CASE(TestESmry_2) { - - // using a syntetic restart file. - // - // # 1 copied SPE1CASE1 to TMP.DATA - // - added two extra summary vectors (FOPT and FGPR) - // - deleted 4 vectors WOIR:PROD, WOIR:INJ, WOIT:PROD and WOIT:INJ - // # 2 run full simulation with TMP.DATA - // - exact same solution as SPE1CASE1 - // # 3 renamed TMP1.SMSPEC to SPE1CASE1_RST60.SMSPEC + manual modifications - // - update RESTART keyword ('SPE1CASE' '1 ' ... ) - // - updated DIMENS, last item equal to 60 => restart from report report step 60 - // # 4 copy TMP1.UNSMRY to SPE1CASE1_RST60.UNSMRY + manual modifications - // - delete all data from ministep 0 to ministep 62, (ministep 62 = report step 60 in this run) - - // this is what the summary file from the restart run would be if the restart was 100% perfect. - // changing summary keywords to make the file realistic. - - - std::vector time_ref, wgpr_prod_ref, wbhp_prod_ref, wbhp_inj_ref, fgor_ref, bpr_111_ref, bpr_10103_ref; - - getRefSmryVect(time_ref, wgpr_prod_ref, wbhp_prod_ref, wbhp_inj_ref,fgor_ref, bpr_111_ref, bpr_10103_ref); - - // defaulting second argument, loadBaseRunData. Only data from the restarted run - // will be loaded. No data from base run (SPE1CASE1 in this case) - - ESmry smry1("SPE1CASE1_RST60.SMSPEC"); // equivalent to smry1("SPE1CASE1_RST60.SMSPEC",false) - smry1.LoadData(); - - std::vector smryVect = smry1.get("TIME"); - std::vector time_ref_rst60 = getFrom(time_ref,63); - - BOOST_CHECK_EQUAL(smryVect==time_ref_rst60, true); - - smryVect = smry1.get("WGPR:PROD"); - std::vector ref_rst60 = getFrom(wgpr_prod_ref,63); - - for (unsigned int i=0;i< smryVect.size();i++){ - BOOST_REQUIRE_CLOSE (smryVect[i], ref_rst60[i], 0.01); - } - - smryVect = smry1.get("WBHP:PROD"); - ref_rst60 = getFrom(wbhp_prod_ref,63); - - for (unsigned int i=0;i< smryVect.size();i++){ - BOOST_REQUIRE_CLOSE (smryVect[i], ref_rst60[i], 0.01); - } - - smryVect = smry1.get("WBHP:INJ"); - ref_rst60 = getFrom(wbhp_inj_ref,63); - - for (unsigned int i=0;i< smryVect.size();i++){ - BOOST_REQUIRE_CLOSE (smryVect[i], ref_rst60[i], 0.01); - } - - smryVect = smry1.get("FGOR"); - ref_rst60 = getFrom(fgor_ref,63); - - for (unsigned int i=0;i< smryVect.size();i++){ - BOOST_REQUIRE_CLOSE (smryVect[i], ref_rst60[i], 0.01); - } - - smryVect = smry1.get("BPR:1,1,1"); - ref_rst60 = getFrom(bpr_111_ref,63); - - for (unsigned int i=0;i< smryVect.size();i++){ - BOOST_REQUIRE_CLOSE (smryVect[i], ref_rst60[i], 0.01); - } - - smryVect = smry1.get("BPR:10,10,3"); - ref_rst60 = getFrom(bpr_10103_ref,63); - - for (unsigned int i=0;i< smryVect.size();i++){ - BOOST_REQUIRE_CLOSE (smryVect[i], ref_rst60[i], 0.01); - } - -} - -BOOST_AUTO_TEST_CASE(TestESmry_3) { - - // using a syntetic restart file. - // - // # 1 copied SPE1CASE1 to TMP.DATA - // - added two extra summary vectors (FOPT and FGPR) - // - deleted 4 vectors WOIR:PROD, WOIR:INJ, WOIT:PROD and WOIT:INJ - // # 2 run full simulation with TMP.DATA - // - exact same solution as SPE1CASE1 - // # 3 renamed TMP1.SMSPEC to SPE1CASE1_RST60.SMSPEC + manual modifications - // - update RESTART keyword ('SPE1CASE' '1 ' ... ) - // - updated DIMENS, last item equal to 60 => restart from report report step 60 - // # 4 copy TMP1.UNSMRY to SPE1CASE1_RST60.UNSMRY + manual modifications - // - delete all data from ministep 0 to ministep 62, (ministep 62 = report step 60 in this run) - - // this is what the summary file from the restart run would be if the restart was 100% perfect. - // changing summary keywords to make the file realistic. - - - std::vector time_ref, wgpr_prod_ref, wbhp_prod_ref, wbhp_inj_ref, fgor_ref, bpr_111_ref, bpr_10103_ref; - - getRefSmryVect(time_ref, wgpr_prod_ref, wbhp_prod_ref, wbhp_inj_ref,fgor_ref, bpr_111_ref, bpr_10103_ref); - - // second argument, loadBaseRunData = true. Both data from restarted run and base run loaded - // vectors should be equal to reference vectors (from SPE1CASE1) - - ESmry smry1("SPE1CASE1_RST60.SMSPEC",true); - smry1.LoadData(); - - std::vector smryVect = smry1.get("TIME"); - BOOST_CHECK_EQUAL(smryVect==time_ref, true); - - smryVect = smry1.get("WGPR:PROD"); - for (unsigned int i=0;i< smryVect.size();i++){ - BOOST_REQUIRE_CLOSE (smryVect[i], wgpr_prod_ref[i], 0.01); - } - - - smryVect = smry1.get("WBHP:PROD"); - - for (unsigned int i=0;i< smryVect.size();i++){ - BOOST_REQUIRE_CLOSE (smryVect[i], wbhp_prod_ref[i], 0.01); - } - - smryVect = smry1.get("WBHP:INJ"); - - for (unsigned int i=0;i< smryVect.size();i++){ - BOOST_REQUIRE_CLOSE (smryVect[i], wbhp_inj_ref[i], 0.01); - } - - smryVect = smry1.get("FGOR"); - - for (unsigned int i=0;i< smryVect.size();i++){ - BOOST_REQUIRE_CLOSE (smryVect[i], fgor_ref[i], 0.01); - } - - smryVect = smry1.get("BPR:1,1,1"); - - for (unsigned int i=0;i< smryVect.size();i++){ - BOOST_REQUIRE_CLOSE (smryVect[i], bpr_111_ref[i], 0.01); - } - - smryVect = smry1.get("BPR:10,10,3"); - - for (unsigned int i=0;i< smryVect.size();i++){ - BOOST_REQUIRE_CLOSE (smryVect[i], bpr_10103_ref[i], 0.01); - } -} - -BOOST_AUTO_TEST_CASE(TestESmry_4) { - - std::vector time_ref = {31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365, 396, 424, 455, 485, 516, 546, 577, 608, 638, 669, 699, 730, 761, 789, 820, 850, 881, 911, 942, 973, 1003, 1034, 1064, 1095, 1126, 1154, 1185, 1215, 1246, 1276, 1307, 1338, 1368, 1399, 1429, 1460, 1491, 1519, 1550, 1580, 1611, 1641, 1672, 1703, 1733, 1764, 1794, 1825, 1856, 1884, 1915, 1945, 1976, 2006, 2037, 2068, 2098, 2129, 2159, 2190, 2221, 2249, 2280, 2310, 2341, 2371, 2402, 2433, 2463, 2494, 2524, 2555, 2586, 2614, 2645, 2675, 2706, 2736, 2767, 2798, 2828, 2859, 2889, 2920, 2951, 2979, 3010, 3040, 3071, 3101, 3132, 3163, 3193, 3224, 3254, 3285, 3316, 3344, 3375, 3405, 3436, 3466, 3497, 3528, 3558, 3589, 3619, 3650}; - - ESmry smry1("SPE1CASE1.SMSPEC"); - smry1.LoadData(); - - std::vector smryVect = smry1.get("TIME"); - std::vector smryVect_rstep = smry1.get_at_rstep("TIME"); - - BOOST_CHECK_EQUAL(smryVect==time_ref, false); - BOOST_CHECK_EQUAL(smryVect_rstep==time_ref, true); - -} - - -namespace fs = Opm::filesystem; -BOOST_AUTO_TEST_CASE(TestCreateRSM) { - ESmry smry1("SPE1CASE1.SMSPEC"); - smry1.LoadData(); - - smry1.write_rsm_file(); - BOOST_CHECK(fs::exists("SPE1CASE1.RSM")); - - smry1.write_rsm_file("TEST.RSM"); - BOOST_CHECK(fs::exists("TEST.RSM")); -} - -BOOST_AUTO_TEST_CASE(TestUnits) { - ESmry smry("SPE1CASE1.SMSPEC"); - smry.LoadData(); - - BOOST_CHECK_THROW( smry.get_unit("NO_SUCH_KEY"), std::out_of_range); - BOOST_CHECK_EQUAL( smry.get_unit("TIME"), "DAYS"); - BOOST_CHECK_EQUAL( smry.get_unit("WOPR:PROD"), "STB/DAY"); -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/test_EclFilesComparator.cpp b/ThirdParty/custom-opm-common/opm-common/tests/test_EclFilesComparator.cpp deleted file mode 100644 index 81ea493d84..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/test_EclFilesComparator.cpp +++ /dev/null @@ -1,69 +0,0 @@ -/* - Copyright 2016 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include "config.h" - -#define BOOST_TEST_MODULE EclFilesComparatorTest - -#include - -#include - -BOOST_AUTO_TEST_CASE(deviation) { - double a = 1; - double b = 3; - const double tol = 1.0e-14; - - Deviation dev = ECLFilesComparator::calculateDeviations(a,b); - - BOOST_CHECK_EQUAL(dev.abs, 2.0); - BOOST_CHECK_CLOSE(dev.rel, 2.0/3, tol); - - a = 0; - - dev = ECLFilesComparator::calculateDeviations(a,b); - - BOOST_CHECK_EQUAL(dev.abs, 3.0); - BOOST_CHECK_EQUAL(dev.rel, -1.0); -} - - - -BOOST_AUTO_TEST_CASE(median) { - std::vector vec = {1,3,4,5}; - - double med = ECLFilesComparator::median(vec); - - BOOST_CHECK_EQUAL(med, 3.5); - - vec = {1,4,5}; - med = ECLFilesComparator::median(vec); - - BOOST_CHECK_EQUAL(med, 4); -} - - - -BOOST_AUTO_TEST_CASE(average) { - std::vector vec = {1,3,4,5}; - const double tol = 1.0e-14; - - double avg = ECLFilesComparator::average(vec); - - BOOST_CHECK_CLOSE(avg, 13.0/4, tol); -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/test_EclIO.cpp b/ThirdParty/custom-opm-common/opm-common/tests/test_EclIO.cpp deleted file mode 100644 index d4e9378de7..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/test_EclIO.cpp +++ /dev/null @@ -1,416 +0,0 @@ -/* - + Copyright 2019 Equinor ASA. - + - + This file is part of the Open Porous Media project (OPM). - + - + OPM is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - + the Free Software Foundation, either version 3 of the License, or - + (at your option) any later version. - + - + OPM is distributed in the hope that it will be useful, - + but WITHOUT ANY WARRANTY; without even the implied warranty of - + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - + GNU General Public License for more details. - + - + You should have received a copy of the GNU General Public License - + along with OPM. If not, see . - + */ - -#include "config.h" -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include "WorkArea.cpp" - -#include - -#define BOOST_TEST_MODULE Test EclIO -#include - - - -using namespace Opm::EclIO; - -template -bool -range_equal(InputIterator1 first1, InputIterator1 last1, - InputIterator2 first2, InputIterator2 last2) -{ - while(first1 != last1 && first2 != last2) - { - if(*first1 != *first2) return false; - ++first1; - ++first2; - } - return (first1 == last1) && (first2 == last2); -} - -bool compare_files(const std::string& filename1, const std::string& filename2) -{ - std::ifstream file1(filename1); - std::ifstream file2(filename2); - - std::istreambuf_iterator begin1(file1); - std::istreambuf_iterator begin2(file2); - - std::istreambuf_iterator end; - - return range_equal(begin1, end, begin2, end); -} - -template -bool operator==(const std::vector & t1, const std::vector & t2) -{ - return std::equal(t1.begin(), t1.end(), t2.begin(), t2.end()); -} - -void write_header(std::ofstream& ofileH, std::string& arrName, int size, std::string arrtype){ - - int bhead = flipEndianInt(16); - int fsize = flipEndianInt(size); - - ofileH.write(reinterpret_cast(&bhead), sizeof(bhead)); - ofileH.write(arrName.c_str(), 8); - ofileH.write(reinterpret_cast(&fsize), sizeof(fsize)); - ofileH.write(arrtype.c_str(), 4); - ofileH.write(reinterpret_cast(&bhead), sizeof(bhead)); -} - - -BOOST_AUTO_TEST_CASE(TestEclFile_X231) { - - std::string filename = "TEST.DAT"; - std::string arrName = "TESTX231"; - - std::vector ivect(10); - std::iota(ivect.begin(), ivect.end(), -4); - - { - std::ofstream ofileH; - ofileH.open(filename, std::ios_base::binary); - - int size = static_cast((-1) * std::pow(2,31) + 10); - - write_header(ofileH, arrName, -1, std::string("X231")); - write_header(ofileH, arrName, size, std::string("INTE")); - - int sizeData = ivect.size()*sizeof(int); - sizeData = flipEndianInt(sizeData); - - ofileH.write(reinterpret_cast(&sizeData), sizeof(sizeData)); - - for (auto v : ivect){ - int fval = flipEndianInt(v); - ofileH.write(reinterpret_cast(&fval), sizeof(fval)); - } - - ofileH.write(reinterpret_cast(&sizeData), sizeof(sizeData)); - ofileH.close(); - } - - EclFile test1(filename); - auto array = test1.get(arrName); - - for (size_t n = 0; n < 10; n++){ - BOOST_CHECK_EQUAL(array[n], ivect[n]); - } -} - - -BOOST_AUTO_TEST_CASE(TestEclFile_BINARY) { - - std::string testFile="ECLFILE.INIT"; - - // check that exception is thrown when input file doesn't exist - - BOOST_CHECK_THROW(EclFile file1("DUMMY.DAT") , std::invalid_argument ); - - EclFile file1(testFile); - - // check that exeption is thrown when member function get is used with wrong type - - BOOST_CHECK_THROW(std::vector vect1=file1.get(2) , std::runtime_error ); - BOOST_CHECK_THROW(std::vector vect1=file1.get("PORV") , std::runtime_error ); - - BOOST_CHECK_THROW(std::vector vect1=file1.get(0) , std::runtime_error ); - BOOST_CHECK_THROW(std::vector vect1=file1.get("ICON") , std::runtime_error ); - - BOOST_CHECK_THROW(std::vector vect1=file1.get(0) , std::runtime_error ); - BOOST_CHECK_THROW(std::vector vect1=file1.get("KEYWORDS") , std::runtime_error ); - - BOOST_CHECK_THROW(std::vector vect1=file1.get(0) , std::runtime_error ); - BOOST_CHECK_THROW(std::vector vect1=file1.get("XCON") , std::runtime_error ); - - BOOST_CHECK_THROW(std::vector vect1=file1.get(0) , std::runtime_error ); - BOOST_CHECK_THROW(std::vector vect1=file1.get("XCON") , std::runtime_error ); - - // check member function hasKey - - BOOST_CHECK_EQUAL(file1.hasKey("PORV"), true); - BOOST_CHECK_EQUAL(file1.hasKey("XPORV"), false); - - // test member functon get, use size of vector to confirm that vectror is ok - - std::vector vect1a=file1.get(0); - std::vector vect1b=file1.get("ICON"); - - BOOST_CHECK_EQUAL(vect1a.size(), 1875); - BOOST_CHECK_EQUAL(vect1b.size(), 1875); - - std::vector vect2a=file1.get(1); - std::vector vect2b=file1.get("LOGIHEAD"); - - BOOST_CHECK_EQUAL(vect2a.size(), 121); - BOOST_CHECK_EQUAL(vect2b.size(), 121); - - std::vector vect3a=file1.get(2); - std::vector vect3b=file1.get("PORV"); - - BOOST_CHECK_EQUAL(vect3a.size(), 3146); - BOOST_CHECK_EQUAL(vect3b.size(), 3146); - - std::vector vect4a=file1.get(3); - std::vector vect4b=file1.get("XCON"); - - BOOST_CHECK_EQUAL(vect4a.size(), 1740); - BOOST_CHECK_EQUAL(vect4b.size(), 1740); - - std::vector vect5a=file1.get(4); - std::vector vect5b=file1.get("KEYWORDS"); - - BOOST_CHECK_EQUAL(vect5a.size(), 312); - BOOST_CHECK_EQUAL(vect5b.size(), 312); -} - -BOOST_AUTO_TEST_CASE(TestEclFile_FORMATTED) { - - std::string testFile1="ECLFILE.INIT"; - std::string testFile2="ECLFILE.FINIT"; - - // loading data both from binary and formatted file. Check that - // date vectors are identical - - EclFile file1(testFile1); - file1.loadData(); - - EclFile file2(testFile2); - file2.loadData(); - - std::vector vect1a=file1.get("ICON"); - std::vector vect1b=file2.get("ICON"); - - BOOST_CHECK_EQUAL(vect1a.size(), vect1b.size()); - BOOST_CHECK(vect1a == vect1b); - - std::vector vect2a=file1.get("PORV"); - std::vector vect2b=file2.get("PORV"); - - BOOST_CHECK_EQUAL(vect2a.size(), vect2b.size()); - BOOST_CHECK(vect2a == vect2b); - - std::vector vect3a=file1.get("XCON"); - std::vector vect3b=file2.get("XCON"); - - BOOST_CHECK(vect3a == vect3b); - - std::vector vect4a=file1.get("LOGIHEAD"); - std::vector vect4b=file2.get("LOGIHEAD"); - - BOOST_CHECK_EQUAL(vect4a.size(), vect4b.size()); - BOOST_CHECK(vect4a == vect4b); - - std::vector vect5a=file1.get("KEYWORDS"); - std::vector vect5b=file2.get("KEYWORDS"); - - BOOST_CHECK_EQUAL(vect5a.size(), vect5b.size()); - BOOST_CHECK(vect5a == vect5b); - -} - -BOOST_AUTO_TEST_CASE(TestEcl_Write_binary) { - - std::string inputFile="ECLFILE.INIT"; - std::string testFile="TEST.DAT"; - - // loading vectors from binary file and write these back to a binary file1 - // compare input and output file and delete file. - - EclFile file1(inputFile); - file1.loadData(); - - std::vector icon=file1.get("ICON"); - std::vector porv=file1.get("PORV"); - std::vector xcon=file1.get("XCON"); - std::vector logihead=file1.get("LOGIHEAD"); - std::vector keywords=file1.get("KEYWORDS"); - - // writing vectors to test file (TEST.DAT) using class EclOutput - - { - EclOutput eclTest(testFile, false); - - eclTest.write("ICON",icon); - eclTest.write("LOGIHEAD",logihead); - eclTest.write("PORV",porv); - eclTest.write("XCON",xcon); - eclTest.write("KEYWORDS",keywords); - eclTest.write("ENDSOL",std::vector()); - } - - BOOST_CHECK_EQUAL(compare_files(inputFile, testFile), true); - - if (remove(testFile.c_str())==-1) { - std::cout << " > Warning! temporary file was not deleted" << std::endl; - }; -} - -BOOST_AUTO_TEST_CASE(TestEcl_Write_formatted) { - - std::string inputFile="ECLFILE.FINIT"; - std::string testFile="TEST.FDAT"; - - // loading vectors from formatted input file and write data back to a formatted file1 - // compare input and output file, and delete file. - - EclFile file1(inputFile, true); - - std::vector icon = file1.get("ICON"); - std::vector porv = file1.get("PORV"); - std::vector xcon = file1.get("XCON"); - std::vector logihead = file1.get("LOGIHEAD"); - std::vector keywords = file1.get("KEYWORDS"); - - // writing vectors to test file (TEST.FDAT) using class EclOutput - - EclOutput eclTest(testFile, true); - - eclTest.write("ICON",icon); - eclTest.write("LOGIHEAD",logihead); - eclTest.write("PORV",porv); - eclTest.write("XCON",xcon); - eclTest.write("KEYWORDS",keywords); - eclTest.write("ENDSOL",std::vector()); - - BOOST_CHECK_EQUAL(compare_files(inputFile, testFile), true); - - if (remove(testFile.c_str())==-1) { - std::cout << " > Warning! temporary file was not deleted" << std::endl; - }; -} - -BOOST_AUTO_TEST_CASE(TestEcl_Write_formatted_not_finite) { - WorkArea wa; - std::vector float_vector{std::numeric_limits::infinity() , std::numeric_limits::quiet_NaN()}; - std::vector double_vector{std::numeric_limits::infinity(), std::numeric_limits::quiet_NaN()}; - - { - EclOutput testfile("TEST.FINIT", true); - testfile.write("FLOAT", float_vector); - testfile.write("DOUBLE", double_vector); - } - - EclFile file1("TEST.FINIT"); - file1.loadData(); - auto f = file1.get("FLOAT"); - auto d = file1.get("DOUBLE"); - BOOST_CHECK(std::isinf(f[0])); - BOOST_CHECK(std::isinf(d[0])); - BOOST_CHECK(std::isnan(f[1])); - BOOST_CHECK(std::isnan(d[1])); - - BOOST_CHECK_EQUAL(file1.size(), 2); -} - - -BOOST_AUTO_TEST_CASE(TestEcl_getList) { - - std::string inputFile="ECLFILE.INIT"; - std::string testFile="TEST.DAT"; - - // use EclFile to read/open a binary file - // Use API for class EclFile together with class EclOutput to write an - // identical eclfile - // EclFile::getList(), EclFile::get(int) - - EclFile file1(inputFile); - file1.loadData(); - - { - EclOutput eclTest(testFile, false); - - auto arrayList = file1.getList(); - int n=0; - for (auto array : arrayList) { - std::string name = std::get<0>(array); - eclArrType arrType = std::get<1>(array); - - if (arrType == INTE) { - std::vector vect = file1.get(n); - eclTest.write(name, vect); - } else if (arrType == REAL) { - std::vector vect = file1.get(n); - eclTest.write(name, vect); - } else if (arrType == DOUB) { - std::vector vect = file1.get(n); - eclTest.write(name, vect); - } else if (arrType == LOGI) { - std::vector vect = file1.get(n); - eclTest.write(name, vect); - } else if (arrType == CHAR) { - std::vector vect = file1.get(n); - eclTest.write(name, vect); - } else if (arrType == MESS) { - eclTest.write(name, std::vector()); - } else { - std::cout << "unknown type " << std::endl; - exit(1); - } - - n++; - } - } - - BOOST_CHECK_EQUAL(compare_files(inputFile, testFile), true); - - if (remove(testFile.c_str())==-1) { - std::cout << " > Warning! temporary file was not deleted" << std::endl; - }; -} - - -BOOST_AUTO_TEST_CASE(TestEcl_Write_CHAR) { - - std::string testFile="TEST.FDAT"; - std::vector refStrList = {"This", "is", "a test.", "", "charact", "er >'<", "can be", "part of", "a string"}; - - { - EclOutput eclTest(testFile, true); - eclTest.write("TEST",refStrList); - } - - { - EclFile file1(testFile); - std::vector strList=file1.get("TEST"); - - for (size_t n = 0; n < refStrList.size(); n++) { - BOOST_CHECK(refStrList[n] == strList[n]); - } - } - - if (remove(testFile.c_str())==-1) { - std::cout << " > Warning! temporary file was not deleted" << std::endl; - }; - - -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/test_EclRegressionTest.cpp b/ThirdParty/custom-opm-common/opm-common/tests/test_EclRegressionTest.cpp deleted file mode 100644 index de49798a49..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/test_EclRegressionTest.cpp +++ /dev/null @@ -1,1383 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include "config.h" - -#define BOOST_TEST_MODULE EclRegressionTest - -#include - -#include - -#include -#include -#include - -#include - -using Opm::EclIO::EGrid; -using Opm::EclIO::ESmry; -using Opm::EclIO::EclOutput; - -void makeEgridFile(const std::string &fileName, const std::vector &coord, - const std::vector &zcorn, const std::vector &gridhead, - const std::vector &filehead, - const std::vector &gridunits, - const std::vector actnum, const std::vector &nnc1, - const std::vector &nnc2) -{ - EclOutput eclTest(fileName, false); - - eclTest.write("FILEHEAD", filehead); - eclTest.write("GRIDUNIT", gridunits); - eclTest.write("GRIDHEAD", gridhead); - eclTest.write("COORD", coord); - eclTest.write("ZCORN", zcorn); - if (actnum.size() > 0) { - eclTest.write("ACTNUM", actnum); - } - - eclTest.write("ENDGRID",std::vector()); - - if (!nnc1.empty() && !nnc2.empty()) { - std::vector nnchead(10,0); - nnchead[0] = nnc1.size(); - - eclTest.write("NNCHEAD", nnchead); - eclTest.write("NNC1", nnc1); - eclTest.write("NNC2", nnc2); - } -} - - -void makeInitFile(const std::string &fileName, std::vector floatKeys, std::vector> floatData, std::vector intKeys, std::vector> intData){ - - std::vector doubhead = {0.0,1,0,365,0.10000000149012E+00,0.15000000596046E+00,0.30000000000000E+01}; - std::vector intehead = {-957688424,201702,1,-2345,-2345,-2345,-2345,-2345,2,3,2,12,6,0,1,-2345,0,10,0,10,11,0,0,0,155,122,130,3,107,112,1,-2345,25,40,58, - -2345,107,112,180,5,0,1,18,24,10,7,2,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,2000,0,0,0,1,0,0,0,0,0,1,10,0,0,12,1,25,1,-2345,-2345, - 8,8,3,4,2,3,2,1,100,0,6,0,-17,1,0,1,0,1,0,2,3,2,12,1,1,1,1,2,3,2,25,1,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,14,11,10,17,2,1,1,1,1,11,1,1,1, - 1,1,1,98,122,0,0,0,0,0,0,1,10,4,5,9,0,6,8,8,12,1,25,1,-1073741823,-1073741823,-1073741823,-1073741823,0,1,1,1,22,126,10,1,1,1,1,22, - 122,-1073741823,-1073741823,0,0,130,58,180,10,0,25,155,0,0,1,10,122,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,-1,12,0,0,10,13,1,0,0,0,0,2,0,0, - 3600,1,6,1,10,1,10,1,1,1,0,30,3,26,16,13,6,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0,1,0,0,1,2,0,0,1,1,1,1,2,1,0,2,0,2,0,2,1,12,0,0,0,0,1,0, - 0,0,1,0,0,0,1,0,-2345,-2345,-2345,-2345,-2345,-2345,-2345,-2345,-2345,-2345,-2345,-2345,-2345,-2345,-2345,-2345,-2345,-2345,-2345, - -2345,-2345,-2345,-2345,-2345,-2345,-2345,-2345,-2345,-2345,-2345,-2345,-2345,-2345,-2345,-2345,-2345,-2345,-2345,-2345,-2345,-2345, - -2345,-2345,-2345,-2345,-2345,-2345,-2345,-2345,-2345,-2345,-2345,-2345,-2345,-2345,-2345,-2345,-2345,-2345,-2345,-2345,-2345,-2345, - -2345,-2345,-2345,-2345,-2345,-2345,-2345,-2345,-2345,-2345,-2345,-2345,-2345,-2345,-2345,-2345,-2345,-2345,-2345,-2345,-2345,-2345, - -2345,-2345,-2345,-2345,-2345,-2345,-2345,-2345,-2345,-2345,-2345,-2345,-2345,-2345,-2345,-2345,-2345,-2345,-2345,-2345,-2345,-2345, - -2345,0}; - - std::vector logihead = {false,false,false,true,false,false,false,false,true,false,false,false,false,false,false}; - - EclOutput eclTest(fileName, false); - - eclTest.write("INTEHEAD",intehead); - eclTest.write("LOGIHEAD",logihead); - eclTest.write("DOUBHEAD",doubhead); - - for (size_t i = 0; i < floatKeys.size(); i++) { - eclTest.write(floatKeys[i], floatData[i]); - } - - for (size_t i = 0; i < intKeys.size(); i++) { - eclTest.write(intKeys[i], intData[i]); - } -} - - -void makeUnrstFile(const std::string &fileName, std::vector seqnum, - const std::vector>& dates, - const std::vector& time, - const std::vector& logihead, - std::vector& doubhead, - const std::vector& zgrp, - const std::vector& iwel, - const std::vector& solutionNames, - const std::vector>>& solutions) -{ - std::vector intehead= {-957688424,201702,1,-2345,-2345,-2345,-2345,-2345,2,3,2,12,6,0,1,-2345,0,10,0,10,11,0,0,0,155,122,130,3,107,112,1,-2345,25,40,58, - -2345,107,112,180,5,0,1,18,24,10,7,2,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,2000,0,0,0,1,0,0,0,0,0,1,10,0,0,12,1,25,1,-2345,-2345,8,8,3,4,2,3,2,1,100}; - - EclOutput eclTest(fileName, false); - - for (size_t i = 0; i < seqnum.size(); i++) { - std::vector seqnumVect; - seqnumVect.push_back(seqnum[i]); - - eclTest.write("SEQNUM", seqnumVect); - - intehead[66]=std::get<0>(dates[i]); - intehead[65]=std::get<1>(dates[i]); - intehead[64]=std::get<2>(dates[i]); - - eclTest.write("INTEHEAD", intehead); - - eclTest.write("LOGIHEAD", logihead); - - doubhead[0] = time[i]; - - eclTest.write("DOUBHEAD", doubhead); - eclTest.write("ZGRP", zgrp); - eclTest.write("IWEL", iwel); - eclTest.write("STARTSOL", std::vector()); - - for (size_t n = 0; n < solutionNames.size(); n++) { - eclTest.write(solutionNames[n], solutions[n][i]); - } - - eclTest.write("ENDSOL", std::vector()); - } -} - - -void makeSmryFile(const std::string &fileName, - const std::vector& keywords, - const std::vector& wgnames, - const std::vector& nums, - const std::vector& units, - const std::vector>& params) -{ - std::vector intehead = {1,100}; - std::vector restart = {"","","","","","","","",""}; - std::vector dimens = {-1, 2, 3, 1, 0, -1}; - std::vector startd= {1,1,2000,0,0,0}; - - std::vector seqhdr = {0,4,5,6,7,8,9}; - - std::vector seqhdrValue = {-957426774}; - - dimens[0] = params[0].size(); - - EclOutput eclSmspecTest(fileName, false); - - eclSmspecTest.write("INTEHEAD", intehead); - eclSmspecTest.write("RESTART", restart); - eclSmspecTest.write("DIMENS", dimens); - eclSmspecTest.write("KEYWORDS", keywords); - eclSmspecTest.write("WGNAMES", wgnames); - eclSmspecTest.write("NUMS", nums); - eclSmspecTest.write("UNITS", units); - eclSmspecTest.write("STARTDAT", startd); - - int strL = fileName.size(); - std::string unsmryFilename = fileName.substr(0,strL-6)+"UNSMRY"; - - EclOutput eclUnsmryTest(unsmryFilename, false); - - int nSteps = params.size(); - - for (int i = 0; i < nSteps; i++) { - auto search = std::find(seqhdr.begin(), seqhdr.end(), i); - - if (search != seqhdr.end()) { - eclUnsmryTest.write("SEQHDR", {1}); - } - - std::vector ministep; - ministep.push_back(i); - - eclUnsmryTest.write("MINISTEP", {1}); - eclUnsmryTest.write("PARAMS", params[i]); - } -} - - -void makeRftFile(const std::string &fileName, - const std::vector& time, - const std::vector>& date, - const std::vector& wellN, - const std::vector>& conipos, - const std::vector>& conjpos, - const std::vector>& conkpos, - const std::vector>& depth, - const std::vector& solutionNames, - const std::vector>>& solutions) -{ - std::vector welletc = {" DAYS", "A-1H", "", " METRES", " BARSA", "R", "STANDARD", " SM3/DAY", " SM3/DAY", " RM3/DAY", " M/SEC", "", " CP", " KG/SM3", " KG/DAY ", " KG/KG"}; - - int nRfts = time.size(); - - EclOutput eclRftTest(fileName, false); - for (int i = 0; i < nRfts; i++){ - std::vector timeVect; - timeVect.push_back(time[i]); - - eclRftTest.write("TIME",timeVect); - - std::vector dateVect; - dateVect.push_back(std::get<2>(date[i])); - dateVect.push_back(std::get<1>(date[i])); - dateVect.push_back(std::get<0>(date[i])); - - eclRftTest.write("DATE", dateVect); - - welletc[1] = wellN[i]; - eclRftTest.write("WELLETC", welletc); - - eclRftTest.write("CONIPOS", conipos[i]); - eclRftTest.write("CONJPOS", conjpos[i]); - eclRftTest.write("CONKPOS", conkpos[i]); - - eclRftTest.write("DEPTH", depth[i]); - - for (size_t n = 0; n < solutionNames.size(); n++) { - eclRftTest.write(solutionNames[n], solutions[n][i]); - } - } -} - - - -BOOST_AUTO_TEST_CASE(gridCompare) { - - std::vector coord = {2000,2000,2000,1999.9127,1999.8691,2009.9951,2099.9849,2000,2001.7452,2099.8975,1999.8691,2011.7404,2199.9695,2000,2003.4905,2199.8823, - 1999.8691,2013.4855,2000,2099.9658,2002.6177,1999.9127,2099.8347,2012.6127,2099.9849,2099.9658,2007.3629,2099.8975,2099.8347,2017.358,2199.9695,2099.9658, - 2009.1082,2199.8823,2099.8347,2019.1031,2000,2199.9314,2005.2354,1999.9127,2199.8005,2015.2303,2099.9849,2199.9314,2009.9806,2099.8975,2199.8005,2019.9757, - 2199.9695,2199.9314,2011.726,2199.8823,2199.8005,2021.7209,2000,2299.8972,2007.8531,1999.9127,2299.7664,2017.8481,2099.9849,2299.8972,2012.5983,2099.8975, - 2299.7664,2022.5934,2199.9695,2299.8972,2014.3436,2199.8823,2299.7664,2024.3386}; - - std::vector zcorn = {2000,2001.7452,2001.7452,2003.4905,2002.6177,2004.3629,2004.3629,2006.1082,2002.6177,2004.3629,2007.3629,2009.1082,2005.2354, - 2006.9806,2009.9806,2011.726,2005.2354,2006.9806,2009.9806,2011.726,2007.8531,2009.5983,2012.5983,2014.3436,2004.9976,2006.7428,2006.7428,2008.488, - 2007.6152,2009.3605,2009.3605,2011.1057,2007.6152,2009.3605,2012.3605,2014.1057,2010.2329,2011.9781,2014.9781,2016.7234,2010.2329,2011.9781,2014.9781, - 2016.7234,2012.8506,2014.5959,2017.5959,2019.3411,2004.9976,2006.7428,2006.7428,2008.488,2007.6152,2009.3605,2009.3605,2011.1057,2007.6152,2009.3605, - 2012.3605,2014.1057,2010.2329,2011.9781,2014.9781,2016.7234,2010.2329,2011.9781,2014.9781,2016.7234,2012.8506,2014.5959,2017.5959,2019.3411,2009.9951, - 2011.7404,2011.7404,2013.4855,2012.6127,2014.358,2014.358,2016.1031,2012.6127,2014.358,2017.358,2019.1031,2015.2303,2016.9757,2019.9757,2021.7209, - 2015.2303,2016.9757,2019.9757,2021.7209,2017.8481,2019.5934,2022.5934,2024.3386}; - - std::vector gridhead = {1,2,3,2,0,0}; - std::vector filehead = {3,0,0,0,0,0}; - - std::vector nnc1; - std::vector nnc2; - std::vector actnum; - - //------------------------------------------------------------- - // base: identical grids - - std::vector gridunits= {"METRES", ""}; - std::vector gdorient= {"INC", "INC", "INC", "DOWN", "RIGHT"}; - - makeEgridFile("TMP1.EGRID",coord, zcorn, gridhead, filehead, gridunits, actnum, nnc1, nnc2); - makeEgridFile("TMP2.EGRID",coord, zcorn, gridhead, filehead, gridunits, actnum, nnc1, nnc2); - - ECLRegressionTest base("TMP1", "TMP2", 1e-4, 1e-4); - - base.loadGrids(); - base.gridCompare(); - - //------------------------------------------------------------- - // test1: add actnum array, identical - - actnum.assign(12,1); - actnum[0]=0; - - makeEgridFile("TMP1.EGRID",coord, zcorn, gridhead, filehead, gridunits, actnum, nnc1, nnc2); - makeEgridFile("TMP2.EGRID",coord, zcorn, gridhead, filehead, gridunits, actnum, nnc1, nnc2); - - ECLRegressionTest test1("TMP1", "TMP2", 1e-4, 1e-4); - - test1.loadGrids(); - test1.gridCompare(); - - - //------------------------------------------------------------- - // test2: adding nncs, still identical - - nnc1 = {8, 9, 11}; - nnc2 = {4, 4, 6}; - - makeEgridFile("TMP1.EGRID",coord, zcorn, gridhead, filehead, gridunits, actnum, nnc1, nnc2); - makeEgridFile("TMP2.EGRID",coord, zcorn, gridhead, filehead, gridunits, actnum, nnc1, nnc2); - - ECLRegressionTest test2("TMP1", "TMP2", 1e-4, 1e-4); - - test2.loadGrids(); - test2.gridCompare(); - - //------------------------------------------------------------- - // test 3: changing two grid pillars, should fail - - std::vector coordTest3=coord; - coordTest3[12]=coordTest3[12]+0.1; - coordTest3[52]=coordTest3[52]+0.1; - - makeEgridFile("TMP2.EGRID",coordTest3, zcorn, gridhead, filehead, gridunits, actnum, nnc1, nnc2); - - ECLRegressionTest test3("TMP1", "TMP2", 1e-3, 1e-3); - - test3.loadGrids(); - BOOST_CHECK_THROW(test3.gridCompare(),std::runtime_error); - - // do full analysis - test3.doAnalysis(true); - test3.gridCompare(); - - // 2 keywords should exhibit failures (x and y coordinates) - BOOST_CHECK_EQUAL(test3.countDev(),2); - //------------------------------------------------------------- - // test 4: changing two zcorn values, should fail - - std::vector zcornTest4=zcorn; - zcornTest4[15]=zcornTest4[15]+0.1; - zcornTest4[52]=zcornTest4[52]+0.1; - - makeEgridFile("TMP2.EGRID",coord, zcornTest4, gridhead, filehead, gridunits, actnum, nnc1, nnc2); - - ECLRegressionTest test4("TMP1", "TMP2", 1e-3, 1e-3); - - test4.loadGrids(); - - BOOST_CHECK_THROW(test4.gridCompare(),std::runtime_error); - - test4.doAnalysis(true); - test4.gridCompare(); - - BOOST_CHECK_EQUAL(test4.countDev(),3); - - //------------------------------------------------------------- - // test 5: add one nnc for TMP2, should fail - - std::vector nnc1_5=nnc1; - std::vector nnc2_5=nnc2; - - nnc1_5.push_back(1); - nnc2_5.push_back(12); - - makeEgridFile("TMP2.EGRID",coord, zcorn, gridhead, filehead, gridunits, actnum, nnc1_5, nnc2_5); - - ECLRegressionTest test5("TMP1", "TMP2", 1e-3, 1e-3); - - test5.loadGrids(); - - BOOST_CHECK_THROW(test5.gridCompare(),std::runtime_error); - - //------------------------------------------------------------- - // test 6: different definition of active cells in TMP2, should fail - - std::vector actnum6=actnum; - actnum6[10]=0; - - makeEgridFile("TMP2.EGRID",coord, zcorn, gridhead, filehead, gridunits, actnum6, nnc1, nnc2); - - ECLRegressionTest test6("TMP1", "TMP2", 1e-3, 1e-3); - - test6.loadGrids(); - - BOOST_CHECK_THROW(test6.gridCompare(),std::runtime_error); - - if (remove("TMP1.EGRID")==-1) { - std::cout << " > Warning! temporary file was not deleted" << std::endl; - }; - - if (remove("TMP2.EGRID")==-1) { - std::cout << " > Warning! temporary file was not deleted" << std::endl; - }; -} - -BOOST_AUTO_TEST_CASE(results_init_1) { - - std::vector> intData1; - std::vector> floatData1; - - std::vector> intData2; - std::vector> floatData2; - - std::vector permx1(12,1000.0); - std::vector porv1(12,1000.0); - std::vector poro1(12,0.25); - std::vector fipnum1(12,1); - - std::vector permx2(12,1000.0); - std::vector porv2(12,1000.0); - std::vector poro2(12,0.25); - std::vector fipnum2(12,1); - - // -- TMP1 vectors - - floatData1.push_back(porv1); - floatData1.push_back(permx1); - intData1.push_back(fipnum1); - - std::vector intKeys1={"FIPNUM"}; - std::vector floatKeys1={"PORV","PERMX"}; - - // -- TMP2 vectors - - floatData2.push_back(porv2); - floatData2.push_back(permx2); - floatData2.push_back(poro2); - intData2.push_back(fipnum2); - - std::vector intKeys2={"FIPNUM"}; - std::vector floatKeys2={"PORV","PERMX","PORO"}; - - makeInitFile("TMP1.INIT", floatKeys1,floatData1,intKeys1, intData1); - makeInitFile("TMP2.INIT", floatKeys2,floatData2,intKeys2, intData2); - - // --------------------------------------------------------------------------- - // test accept extra keywords in second case - - ECLRegressionTest test1("TMP1", "TMP2", 1e-3, 1e-3); - - // should fail, since extra vector PORO in second case (TMP2) - BOOST_CHECK_THROW(test1.results_init(),std::runtime_error); - - // enabeling extra keywords in second case, all vectors are identical except for extra vector PORO - test1.setAcceptExtraKeywords(true); - - // should be ok - test1.results_init(); - - // new test with extra keyword in first case - ECLRegressionTest test1a("TMP2", "TMP1", 1e-3, 1e-3); - - test1a.setAcceptExtraKeywords(true); - - // should fail, even though using accept extra keywords option - BOOST_CHECK_THROW(test1a.results_init(),std::runtime_error); - - // check with spesific kewyword PORV, found in both cases and should be ok - test1a.setAcceptExtraKeywords(false); - test1a.compareSpesificKeyword("PORV"); - - test1a.results_init(); - - // check with spesific kewyword PORO, found in second case only, should throw exeption - test1a.compareSpesificKeyword("PORO"); - - BOOST_CHECK_THROW(test1a.results_init(),std::runtime_error); - - // check with spesific kewyword not found in any of the cases, should throw exeption - test1a.compareSpesificKeyword("XXXXX"); - - BOOST_CHECK_THROW(test1a.results_init(),std::runtime_error); - - - if (remove("TMP1.INIT")==-1) { - std::cout << " > Warning! temporary file was not deleted" << std::endl; - } - - if (remove("TMP2.INIT")==-1) { - std::cout << " > Warning! temporary file was not deleted" << std::endl; - }; -} - -BOOST_AUTO_TEST_CASE(results_init_2) { - - std::vector> intData1; - std::vector> floatData1; - - std::vector> intData2; - std::vector> floatData2; - - std::vector permx1(12,1000.0); - std::vector porv1(12,1000.0); - std::vector poro1(12,0.25); - std::vector fipnum1(12,1); - - std::vector permx2(12,1000.0); - std::vector porv2(12,1000.0); - std::vector poro2(12,0.25); - std::vector fipnum2(12,1); - - // --------------------------------------------------------------------------- - // array PORV requires strict tolerances, 1e-6 - - floatData1.push_back(porv1); - floatData1.push_back(permx1); - intData1.push_back(fipnum1); - - porv2[2]=999.9999; // deviation less that 1e-6 - - floatData2.push_back(porv2); - floatData2.push_back(permx2); - intData2.push_back(fipnum2); - - std::vector intKeys={"FIPNUM"}; - std::vector floatKeys={"PORV","PERMX"}; - - makeInitFile("TMP1.INIT", floatKeys,floatData1,intKeys, intData1); - makeInitFile("TMP2.INIT", floatKeys,floatData2,intKeys, intData2); - - ECLRegressionTest test2("TMP1", "TMP2", 1e-3, 1e-3); - test2.results_init(); - - porv2=porv1; - porv2[2]=999.998; // relativ deviation 2e-6 > tolerances, abs deviaton 2e-3 > tolerances - - floatData2.clear(); - floatData2.push_back(porv2); - floatData2.push_back(permx2); - - makeInitFile("TMP1.INIT", floatKeys,floatData1,intKeys, intData1); - makeInitFile("TMP2.INIT", floatKeys,floatData2,intKeys, intData2); - - ECLRegressionTest test2a("TMP1", "TMP2", 1e-3, 1e-3); - - // should fail, both relativ and absolute error > tolerance - BOOST_CHECK_THROW(test2a.results_init(),std::runtime_error); - - test2a.doAnalysis(true); - test2a.results_init(); - - // should be one keyword with failure - BOOST_CHECK_EQUAL(test2a.countDev(),1); - - // --------------------------------------------------------------------------- - // compare specific keyword, should be ok sinze PORV not checked in this case - - test2a.compareSpesificKeyword("PERMX"); - test2a.doAnalysis(false); - test2a.results_init(); - - // --------------------------------------------------------------------------- - // fipnum is different (not floading point vector) - - floatData1.clear(); - floatData2.clear(); - intData1.clear(); - intData2.clear(); - - fipnum2=fipnum1; - fipnum2[8]=2; - - floatData1.push_back(porv1); - floatData1.push_back(permx1); - - intData1.push_back(fipnum1); - - floatData2.push_back(porv2); - floatData2.push_back(permx2); - - intData2.push_back(fipnum2); - - makeInitFile("TMP1.INIT", floatKeys,floatData1,intKeys, intData1); - makeInitFile("TMP2.INIT", floatKeys,floatData2,intKeys, intData2); - - ECLRegressionTest test3("TMP1", "TMP2", 1e-3, 1e-3); - - BOOST_CHECK_THROW(test3.results_init(),std::runtime_error); - - if (remove("TMP1.INIT")==-1) { - std::cout << " > Warning! temporary file was not deleted" << std::endl; - } - - if (remove("TMP2.INIT")==-1) { - std::cout << " > Warning! temporary file was not deleted" << std::endl; - }; -} - -BOOST_AUTO_TEST_CASE(results_unrst_1) { - using Date = std::tuple; - - std::vector seqnum1 = {0,1,4,7}; - std::vector dates1 = { - Date{2000,1, 1}, - Date{2000,1,10}, - Date{2000,2, 1}, - Date{2000,3, 1} - }; - std::vector logihead1 = {false, false,false,true,false,false,false,false,true,false,false,false,false,false,false}; - std::vector doubhead1 = {0.0,1,0, 365, 0.10000000149012E+00,0.15000000596046E+00,0.30000000000000E+01}; - std::vector time1 = {0, 9, 31,60}; - - std::vector> pressure1 = {{210,210.1,210.2,210.05,210.15,210.25},{200,200.1,200.2,200.05,200.15,200.25}, - {190,190.1,190.2,190.05,190.15,190.25},{185,185.1,185.2,185.05,185.15,185.25}}; - - std::vector> rs1 = {{150,150.1,150.2,150.05,150.15,150.25},{160,160.1,160.2,160.05,160.15,160.25}, - {165,165.1,165.2,165.05,165.15,165.25},{168,168.1,168.2,168.05,168.15,168.25}}; - - std::vector zgrp1 = {"GRP1", "GRP2"}; - std::vector iwel1 = {1,4,6,8}; - - std::vector solutionNames1; - std::vector>> solutions1; - - solutionNames1={"PRESSURE","RS"}; - solutions1.push_back(pressure1); - solutions1.push_back(rs1); - -// ------------------------- - - std::vector seqnum2 = {0,1,4,7}; - std::vector dates2 = { - Date{2000,1, 1}, - Date{2000,1,10}, - Date{2000,2, 1}, - Date{2000,3, 1} - }; - - std::vector logihead2 = {false, false,false,true,false,false,false,false,true,false,false,false,false,false,false}; - std::vector doubhead2 = {0.0,1,0, 365, 0.10000000149012E+00,0.15000000596046E+00,0.30000000000000E+01}; - std::vector time2 = {0, 9, 31,60}; - - std::vector> pressure2 = {{210,210.1,210.2,210.05,210.15,210.25},{200,200.1,200.2,200.05,200.15,200.25}, - {190,190.1,190.2,190.05,190.15,190.25},{185,185.1,185.2,185.05,185.15,185.25}}; - - std::vector> rs2 = {{150,150.1,150.2,150.05,150.15,150.25},{160,160.1,160.2,160.05,160.15,160.25}, - {165,165.1,165.2,165.05,165.15,165.25},{168,168.1,168.2,168.05,168.15,168.25}}; - - std::vector zgrp2 = {"GRP1", "GRP2"}; - - std::vector iwel2 = {1,4,6,8}; - - std::vector solutionNames2; - std::vector>> solutions2; - - solutionNames2={"PRESSURE","RS"}; - solutions2.push_back(pressure2); - solutions2.push_back(rs2); - -// ------------------------- - - makeUnrstFile("TMP1.UNRST", seqnum1, dates1, time1, logihead1, doubhead1, zgrp1, iwel1,solutionNames1,solutions1); - makeUnrstFile("TMP2.UNRST", seqnum2, dates2, time2, logihead2, doubhead2, zgrp2, iwel2,solutionNames2,solutions2); - - ECLRegressionTest test1("TMP1", "TMP2", 1e-3, 1e-3); - test1.results_rst(); - - // different length of vector zgrp, should throw exception - zgrp2 = {"GRP1"}; - makeUnrstFile("TMP2.UNRST", seqnum2, dates2, time2, logihead2, doubhead2, zgrp2, iwel2,solutionNames2,solutions2); - - ECLRegressionTest test1a("TMP1", "TMP2", 1e-3, 1e-3); - BOOST_CHECK_THROW(test1a.results_rst(),std::runtime_error); - - // rs vector missing in second case - // zgrp2 equal to zgrp1 - - zgrp2 = {"GRP1", "GRP2"}; - - solutionNames2={"PRESSURE"}; - solutions2.clear(); - solutions2.push_back(pressure2); - - makeUnrstFile("TMP2.UNRST", seqnum2, dates2, time2, logihead2, doubhead2, zgrp2, iwel2,solutionNames2,solutions2); - - // should fail, not same keywords missing keywords in first case - ECLRegressionTest test2("TMP1", "TMP2", 1e-3, 1e-3); - - BOOST_CHECK_THROW(test2.results_rst(),std::runtime_error); - - // use accept extra keywords, should still fail - test2.setAcceptExtraKeywords(true); - - BOOST_CHECK_THROW(test2.results_rst(),std::runtime_error); - - // new test, using TMP2 as first case - ECLRegressionTest test2a("TMP2", "TMP1", 1e-3, 1e-3); - - test2a.setAcceptExtraKeywords(true); - test2a.results_rst(); - - // checking for spesific keyword PRESSURE, found in both cases - test2a.setAcceptExtraKeywords(false); - test2a.compareSpesificKeyword("PRESSURE"); - - // test should be ok - test2a.results_rst(); - - // checking for spesific keyword RS, only present in one of the cases - test2a.compareSpesificKeyword("RS"); - - // should fail - BOOST_CHECK_THROW(test2a.results_rst(),std::runtime_error); - - // checking for spesific keyword XXXX, not found in any of the cases - test2a.compareSpesificKeyword("XXXX"); - - // should fail - BOOST_CHECK_THROW(test2a.results_rst(),std::runtime_error); - - if (remove("TMP1.UNRST")==-1) { - std::cout << " > Warning! temporary file was not deleted" << std::endl; - } - - if (remove("TMP2.UNRST")==-1) { - std::cout << " > Warning! temporary file was not deleted" << std::endl; - }; -} - -BOOST_AUTO_TEST_CASE(results_unrst_2) { - using Date = std::tuple; - - std::vector seqnum1 = {0,1,4,7}; - std::vector dates1 = { - Date{2000,1, 1}, - Date{2000,1,10}, - Date{2000,2, 1}, - Date{2000,3, 1} - }; - - std::vector logihead1 = {false, false,false,true,false,false,false,false,true,false,false,false,false,false,false}; - std::vector doubhead1 = {0.0,1,0, 365, 0.10000000149012E+00,0.15000000596046E+00,0.30000000000000E+01}; - std::vector time1 = {0, 9, 31,60}; - - std::vector> pressure1 = {{210,210.1,210.2,210.05,210.15,210.25},{200,200.1,200.2,200.05,200.15,200.25}, - {190,190.1,190.2,190.05,190.15,190.25},{185,185.1,185.2,185.05,185.15,185.25}}; - - std::vector> rs1 = {{150,150.1,150.2,150.05,150.15,150.25},{160,160.1,160.2,160.05,160.15,160.25}, - {165,165.1,165.2,165.05,165.15,165.25},{168,168.1,168.2,168.05,168.15,168.25}}; - - std::vector zgrp1 = {"GRP1", "GRP2"}; - std::vector iwel1 = {1,4,6,8}; - - std::vector solutionNames1; - std::vector>> solutions1; - - solutionNames1={"PRESSURE","RS"}; - solutions1.push_back(pressure1); - solutions1.push_back(rs1); - -// ------------------------- - -// reportStepNumber #4 missing in second case - - std::vector seqnum2 = {0,1,7}; - std::vector dates2 = { - Date{2000,1, 1}, - Date{2000,1,10}, - Date{2000,3, 1} - }; - - std::vector logihead2 = {false, false,false,true,false,false,false,false,true,false,false,false,false,false,false}; - std::vector doubhead2 = {0.0,1,0, 365, 0.10000000149012E+00,0.15000000596046E+00,0.30000000000000E+01}; - std::vector time2 = {0, 9, 60}; - - std::vector> pressure2 = {{210,210.1,210.2,210.05,210.15,210.25},{200,200.1,200.2,200.05,200.15,200.25}, - {185,185.1,185.2,185.05,185.15,185.25}}; - - std::vector> rs2 = {{150,150.1,150.2,150.05,150.15,150.25},{160,160.1,160.2,160.05,160.15,160.25}, - {168,168.1,168.2,168.05,168.15,168.25}}; - - std::vector zgrp2 = {"GRP1", "GRP2"}; - - std::vector iwel2 = {1,4,6,8}; - - std::vector solutionNames2; - std::vector>> solutions2; - - solutionNames2={"PRESSURE","RS"}; - solutions2.push_back(pressure2); - solutions2.push_back(rs2); - -// ------------------------- - - makeUnrstFile("TMP1.UNRST", seqnum1, dates1, time1, logihead1, doubhead1, zgrp1, iwel1,solutionNames1,solutions1); - makeUnrstFile("TMP2.UNRST", seqnum2, dates2, time2, logihead2, doubhead2, zgrp2, iwel2,solutionNames2,solutions2); - - // should fail since sequence #4 is missing in second file" - - ECLRegressionTest test1("TMP1", "TMP2", 1e-3, 1e-3); - BOOST_CHECK_THROW(test1.results_rst(),std::runtime_error); - - // compare only last report step number, should be ok - test1.setOnlyLastReportNumber(true); - test1.results_rst(); - - // compare only sequence # 1, should be ok - test1.setOnlyLastReportNumber(false); - test1.compareSpesificRstReportStepNumber(1); - - test1.results_rst(); - - if (remove("TMP1.UNRST")==-1) { - std::cout << " > Warning! temporary file was not deleted" << std::endl; - } - - if (remove("TMP2.UNRST")==-1) { - std::cout << " > Warning! temporary file was not deleted" << std::endl; - }; -} - - -BOOST_AUTO_TEST_CASE(results_unrst_3) { - using Date = std::tuple; - - std::vector seqnum1 = {0,1,4,7}; - std::vector dates1 = { - Date{2000,1, 1}, - Date{2000,1,10}, - Date{2000,2, 1}, - Date{2000,3, 1}, - }; - std::vector logihead1 = {false, false,false,true,false,false,false,false,true,false,false,false,false,false,false}; - std::vector doubhead1 = {0.0,1,0, 365, 0.10000000149012E+00,0.15000000596046E+00,0.30000000000000E+01}; - std::vector time1 = {0, 9, 31,60}; - - std::vector> pressure1 = {{210,210.1,210.2,210.05,210.15,210.25},{200,200.1,200.2,200.05,200.15,200.25}, - {190,190.1,190.2,190.05,190.15,190.25},{185,185.1,185.2,185.05,185.15,185.25}}; - - std::vector> rs1 = {{150,150.1,150.2,150.05,150.15,150.25},{160,160.1,160.2,160.05,160.15,160.25}, - {165,165.1,165.2,165.05,165.15,165.25},{168,168.1,168.2,168.05,168.15,168.25}}; - - std::vector zgrp1 = {"GRP1", "GRP2"}; - std::vector iwel1 = {1,4,6,8}; - - std::vector solutionNames1; - std::vector>> solutions1; - - solutionNames1={"PRESSURE","RS"}; - solutions1.push_back(pressure1); - solutions1.push_back(rs1); - -// ------------------------- - - std::vector seqnum2 = {0,1,4,7}; - std::vector dates2 = { - Date{2000,1, 1}, - Date{2000,1,10}, - Date{2000,2, 1}, - Date{2000,3, 1}, - }; - std::vector logihead2 = {false, false,false,true,false,false,false,false,true,false,false,false,false,false,false}; - std::vector doubhead2 = {0.0,1,0, 365, 0.10000000149012E+00,0.15000000596046E+00,0.30000000000000E+01}; - std::vector time2 = {0, 9, 31,60}; - - std::vector> pressure2 = {{210,210.1,210.2,210.05,210.15,210.25},{200,200.1,200.2,200.05,200.15,200.25}, - {190,190.1,190.2,190.05,190.15,190.25},{185,185.1,185.2,185.05,185.15,185.25}}; - - std::vector> rs2 = {{150,150.1,150.2,150.05,150.15,150.25},{160,160.1,160.2,160.05,160.15,160.25}, - {165,165.1,165.2,165.05,165.15,165.25},{168,168.1,168.2,168.05,168.15,168.25}}; - - std::vector zgrp2 = {"GRP1", "GRP2"}; - - std::vector iwel2 = {1,4,6,8}; - - std::vector solutionNames2; - std::vector>> solutions2; - - solutionNames2={"PRESSURE","RS"}; - solutions2.push_back(pressure2); - solutions2.push_back(rs2); - -// ------------------------- - - makeUnrstFile("TMP1.UNRST", seqnum1, dates1, time1, logihead1, doubhead1, zgrp1, iwel1,solutionNames1,solutions1); - makeUnrstFile("TMP2.UNRST", seqnum2, dates2, time2, logihead2, doubhead2, zgrp2, iwel2,solutionNames2,solutions2); - - ECLRegressionTest test1("TMP1", "TMP2", 1e-3, 1e-3); - test1.results_rst(); - - // different pressure in sequence 4 cell 4 - // changed from 190.05 to 191.05 - - pressure2[2][3]=191.05; - - // different pressure in sequence 7, cell 3 - // changed from 185.2 to 185.82 - - pressure2[3][2]=185.82; - - solutions2.clear(); - solutions2.push_back(pressure2); - solutions2.push_back(rs2); - - makeUnrstFile("TMP2.UNRST", seqnum2, dates2, time2, logihead2, doubhead2, zgrp2, iwel2,solutionNames2,solutions2); - - ECLRegressionTest test2("TMP1", "TMP2", 1e-3, 1e-3); - BOOST_CHECK_THROW(test2.results_rst(),std::runtime_error); - - // check spesific keyword RS, should be OK - - test2.compareSpesificKeyword("RS"); - test2.results_rst(); - - // run full analysis, will not throw on first error - test2.compareSpesificKeyword(""); - test2.doAnalysis(true); - test2.results_rst(); - - // should get deviations for two keywords - BOOST_CHECK_EQUAL(test2.countDev(),2); - - if (remove("TMP1.UNRST")==-1) { - std::cout << " > Warning! temporary file was not deleted" << std::endl; - } - - if (remove("TMP2.UNRST")==-1) { - std::cout << " > Warning! temporary file was not deleted" << std::endl; - }; -} - - -BOOST_AUTO_TEST_CASE(results_unsmry_1) { - - std::vector keywords1 = {"TIME", "YEARS", "FOPR", "FOPT", "WOPR", "WOPR", "WBHP", "WBHP", "ROIP"}; - std::vector wgnames1 = {":+:+:+:+", ":+:+:+:+", "FIELD", "FIELD", "A-1H", "A-2H", "A-1H", "A-2H", ":+:+:+:+"}; - std::vector nums1 = {-32767, -32767, 0, 0, 1, 2, 1, 2, 1}; - std::vector units1={"DAYS", "YEARS", "SM3/DAY", "SM3", "SM3/DAY", "SM3/DAY", "BARSA", "BARSA", "SM3"}; - - std::vector> params1 = {{0,0,0,0,0,0,208.7515,0,56288.06}, - {1,0.002737851,25,25,25,0,206.7109,0,56263.06}, - {4,0.0109514,25,100,25,0,201.8462,0,56188.06}, - {9,0.02464066,25,225,25,0,194.1811,0,56063.06}, - {19,0.05201916,25,475,25,0,179.2262,0,55813.06}, - {31,0.08487337,25,775,25,0,161.2498,0,55513.06}, - {40,0.109514,25,1000,25,0,147.4961,0,55288.06}, - {50,0.1368925,25,1250,25,0,130.1973,0,55038.06}, - {60,0.164271,25,1500,25,0,112.8681,0,54788.06}, - {69,0.1889117,25,1725,25,0,98.51605,0,54563.07}}; - - std::vector keywords2 = {"TIME", "YEARS", "FOPR", "FOPT", "WOPR", "WOPR", "WBHP", "WBHP", "ROIP"}; - std::vector wgnames2 = {":+:+:+:+", ":+:+:+:+", "FIELD", "FIELD", "A-1H", "A-2H", "A-1H", "A-2H", ":+:+:+:+"}; - std::vector nums2 = {-32767, -32767, 0, 0, 1, 2, 1, 2, 1}; - std::vector units2={"DAYS", "YEARS", "SM3/DAY", "SM3", "SM3/DAY", "SM3/DAY", "BARSA", "BARSA", "SM3"}; - - std::vector> params2 = {{0,0,0,0,0,0,208.7515,0,56288.06}, - {1,0.002737851,25,25,25,0,206.7109,0,56263.06}, - {4,0.0109514,25,100,25,0,201.8462,0,56188.06}, - {9,0.02464066,25,225,25,0,194.1811,0,56063.06}, - {19,0.05201916,25,475,25,0,179.2262,0,55813.06}, - {31,0.08487337,25,775,25,0,161.2498,0,55513.06}, - {40,0.109514,25,1000,25,0,147.4961,0,55288.06}, - {50,0.1368925,25,1250,25,0,130.1973,0,55038.06}, - {60,0.164271,25,1500,25,0,112.8681,0,54788.06}, - {69,0.1889117,25,1725,25,0,98.51605,0,54563.07}}; - - makeSmryFile("TMP1.SMSPEC", keywords1, wgnames1, nums1, units1, params1); - makeSmryFile("TMP2.SMSPEC", keywords2, wgnames2, nums2, units2, params2); - - ECLRegressionTest test1("TMP1", "TMP2", 1e-3, 1e-3); - - test1.results_smry(); - - // test with option integration test (-i) - - test1.setIntegrationTest(true); - test1.results_smry(); - - // remove vector ROIP from case2, rest is identical to first case - - keywords2 = {"TIME", "YEARS", "FOPR", "FOPT", "WOPR", "WOPR", "WBHP", "WBHP"}; - wgnames2 = {":+:+:+:+", ":+:+:+:+", "FIELD", "FIELD", "A-1H", "A-2H", "A-1H", "A-2H"}; - nums2 = {-32767, -32767, 0, 0, 1, 2, 1, 2}; - units2={"DAYS", "YEARS", "SM3/DAY", "SM3", "SM3/DAY", "SM3/DAY", "BARSA", "BARSA"}; - - params2 = {{0,0,0,0,0,0,208.7515,0}, - {1,0.002737851,25,25,25,0,206.7109,0}, - {4,0.0109514,25,100,25,0,201.8462,0}, - {9,0.02464066,25,225,25,0,194.1811,0}, - {19,0.05201916,25,475,25,0,179.2262,0}, - {31,0.08487337,25,775,25,0,161.2498,0}, - {40,0.109514,25,1000,25,0,147.4961,0}, - {50,0.1368925,25,1250,25,0,130.1973,0}, - {60,0.164271,25,1500,25,0,112.8681,0}, - {69,0.1889117,25,1725,25,0,98.51605,0}}; - - - makeSmryFile("TMP2.SMSPEC", keywords2, wgnames2, nums2, units2, params2); - - ECLRegressionTest test2("TMP1", "TMP2", 1e-3, 1e-3); - - BOOST_CHECK_THROW(test2.results_smry(),std::runtime_error); - - ECLRegressionTest test2a("TMP2", "TMP1", 1e-3, 1e-3); - - BOOST_CHECK_THROW(test2a.results_smry(),std::runtime_error); - - test2a.setAcceptExtraKeywords(true); - test2a.results_smry(); - - test2a.setAcceptExtraKeywords(false); - - // should be ok, since both cases have vector FOPT - test2a.compareSpesificKeyword("FOPT"); - test2a.results_smry(); - - // should fail since vector ROIP only found in first case - test2a.compareSpesificKeyword("ROIP:1"); - BOOST_CHECK_THROW(test2a.results_smry(),std::runtime_error); - - // should fail since not found in any of the cases - test2a.compareSpesificKeyword("XXXXX"); - BOOST_CHECK_THROW(test2a.results_smry(),std::runtime_error); - - if (remove("TMP1.SMSPEC")==-1) { - std::cout << " > Warning! temporary file was not deleted" << std::endl; - } - - if (remove("TMP2.SMSPEC")==-1) { - std::cout << " > Warning! temporary file was not deleted" << std::endl; - } - - if (remove("TMP1.UNSMRY")==-1) { - std::cout << " > Warning! temporary file was not deleted" << std::endl; - } - - if (remove("TMP2.UNSMRY")==-1) { - std::cout << " > Warning! temporary file was not deleted" << std::endl; - } - -} - - - -BOOST_AUTO_TEST_CASE(results_unsmry_2) { - - std::vector keywords1 = {"TIME", "YEARS", "FOPR", "FOPT", "WOPR", "WOPR", "WBHP", "WBHP", "ROIP"}; - std::vector wgnames1 = {":+:+:+:+", ":+:+:+:+", "FIELD", "FIELD", "A-1H", "A-2H", "A-1H", "A-2H", ":+:+:+:+"}; - std::vector nums1 = {-32767, -32767, 0, 0, 1, 2, 1, 2, 1}; - std::vector units1={"DAYS", "YEARS", "SM3/DAY", "SM3", "SM3/DAY", "SM3/DAY", "BARSA", "BARSA", "SM3"}; - - std::vector> params1 = {{0,0,0,0,0,0,208.7515,0,56288.06}, - {1,0.002737851,25,25,25,0,206.7109,0,56263.06}, - {4,0.0109514,25,100,25,0,201.8462,0,56188.06}, - {9,0.02464066,25,225,25,0,194.1811,0,56063.06}, - {19,0.05201916,25,475,25,0,179.2262,0,55813.06}, - {31,0.08487337,25,775,25,0,161.2498,0,55513.06}, - {40,0.109514,25,1000,25,0,147.4961,0,55288.06}, - {50,0.1368925,25,1250,25,0,130.1973,0,55038.06}, - {60,0.164271,25,1500,25,0,112.8681,0,54788.06}, - {69,0.1889117,25,1725,25,0,98.51605,0,54563.07}}; - - std::vector keywords2 = {"TIME", "YEARS", "FOPR", "FOPT", "WOPR", "WOPR", "WBHP", "WBHP", "ROIP"}; - std::vector wgnames2 = {":+:+:+:+", ":+:+:+:+", "FIELD", "FIELD", "A-1H", "A-2H", "A-1H", "A-2H", ":+:+:+:+"}; - std::vector nums2 = {-32767, -32767, 0, 0, 1, 2, 1, 2, 1}; - std::vector units2={"DAYS", "YEARS", "SM3/DAY", "SM3", "SM3/DAY", "SM3/DAY", "BARSA", "BARSA", "SM3"}; - - std::vector> params2 = {{0,0,0,0,0,0,208.7515,0,56288.06}, - {1,0.002737851,25,25,25,0,206.7109,0,56263.06}, - {4,0.0109514,25,100,25,0,201.8462,0,56188.06}, - {9,0.02464066,25,225,25,0,194.1811,0,56063.06}, - {19,0.05201916,25,475,25,0,179.2262,0,55813.06}, - {31,0.08487337,25,775,25,0,161.2498,0,55513.06}, - {40,0.109514,25,1000,25,0,147.4961,0,55288.06}, - {50,0.1368925,25,1250,25,0,130.1973,0,55038.06}, - {60,0.164271,25,1500,25,0,112.8681,0,54788.06}, - {69,0.1889117,25,1725,25,0,98.51605,0,54563.07}}; - - makeSmryFile("TMP1.SMSPEC", keywords1, wgnames1, nums1, units1, params1); - makeSmryFile("TMP2.SMSPEC", keywords2, wgnames2, nums2, units2, params2); - - ECLRegressionTest test1("TMP1", "TMP2", 1e-3, 1e-3); - - test1.results_smry(); - - // changing wbhp:A-1H for timestep 5, from 161.2498 to 161.3498 - params2[5][6]=161.3498; - - // changing FOPT for timestep 3, from 225 to 223 - params2[3][3]=223; - - makeSmryFile("TMP2.SMSPEC", keywords2, wgnames2, nums2, units2, params2); - - ECLRegressionTest test2("TMP1", "TMP2", 1e-4, 1e-4); - - BOOST_CHECK_THROW(test2.results_smry(),std::runtime_error); - - // run full analysis, will not throw on first error - test2.doAnalysis(true); - - test2.results_smry(); - - // should get deviations for two keywords - BOOST_CHECK_EQUAL(test2.countDev(),2); - - if (remove("TMP1.SMSPEC")==-1) { - std::cout << " > Warning! temporary file was not deleted" << std::endl; - } - - if (remove("TMP2.SMSPEC")==-1) { - std::cout << " > Warning! temporary file was not deleted" << std::endl; - } - - if (remove("TMP1.UNSMRY")==-1) { - std::cout << " > Warning! temporary file was not deleted" << std::endl; - } - - if (remove("TMP2.UNSMRY")==-1) { - std::cout << " > Warning! temporary file was not deleted" << std::endl; - } - -} - - - -BOOST_AUTO_TEST_CASE(results_unsmry_3) { - - - ECLRegressionTest test1("SPE1CASE1", "SPE1CASE1A", 1e-3, 1e-3); - - BOOST_CHECK_THROW(test1.results_smry(),std::runtime_error); - - test1.setReportStepOnly(true); - - BOOST_CHECK_NO_THROW(test1.results_smry()); - -} - - -BOOST_AUTO_TEST_CASE(results_rft_1) { - using Date = std::tuple; - - std::vector time1 = {0.0, 40.0, 50.0}; - std::vector date1 = { - Date{2000,1, 1}, - Date{2000,2,10}, - Date{2000,2,20}, - }; - std::vector wellN1 = {"A-1H", "A-1H", "A-2H"}; - - std::vector> conipos1 = {{1,1},{1,1},{2,2}}; - std::vector> conjpos1 = {{1,1},{1,1},{3,3}}; - std::vector> conkpos1 = {{1,2},{1,2},{1,2}}; - - std::vector> depth1 = {{2004.68,2009.67},{2004.68,2009.67},{2014.66, 2019.66}}; - - std::vector> pressure1 = {{208.75, 209.07},{178.045, 178.361},{171.278, 171.594}}; - std::vector> swat1 = {{0.0, 0.0},{0.0, 0.0},{0.0, 0.0}}; - std::vector> sgas1 = {{0.0, 0.0},{0.0, 0.0},{0.0, 0.0}}; - std::vector solutionNames1 = {"PRESSURE", "SWAT", "SGAS"}; - - std::vector>> solutions1; - - solutions1.push_back(pressure1); - solutions1.push_back(swat1); - solutions1.push_back(sgas1); - - // ------ second case dentical with first case --------------- - - std::vector time2 = {0.0, 40.0, 50.0}; - std::vector date2 = { - Date{2000,1 ,1}, - Date{2000,2,10}, - Date{2000,2,20}, - }; - std::vector wellN2 = {"A-1H", "A-1H", "A-2H"}; - - std::vector> conipos2 = {{1,1},{1,1},{2,2}}; - std::vector> conjpos2 = {{1,1},{1,1},{3,3}}; - std::vector> conkpos2 = {{1,2},{1,2},{1,2}}; - - std::vector> depth2 = {{2004.68,2009.67},{2004.68,2009.67},{2014.66, 2019.66}}; - - std::vector> pressure2 = {{208.75, 209.07},{178.045, 178.361},{171.278, 171.594}}; - std::vector> swat2 = {{0.0, 0.0},{0.0, 0.0},{0.0, 0.0}}; - std::vector> sgas2 = {{0.0, 0.0},{0.0, 0.0},{0.0, 0.0}}; - std::vector solutionNames2 = {"PRESSURE", "SWAT", "SGAS"}; - - std::vector>> solutions2; - - solutions2.push_back(pressure2); - solutions2.push_back(swat2); - solutions2.push_back(sgas2); - - // -----------------third case, only two rfts, second rft in A-1H removed - - std::vector time3 = {0.0, 50.0}; - std::vector date3 = { - Date{2000,1,1}, Date{2000,2,20}, - }; - std::vector wellN3 = {"A-1H", "A-2H"}; - - std::vector> conipos3 = {{1,1},{2,2}}; - std::vector> conjpos3 = {{1,1},{3,3}}; - std::vector> conkpos3 = {{1,2},{1,2}}; - - std::vector> depth3 = {{2004.68,2009.67},{2014.66, 2019.66}}; - - std::vector> pressure3 = {{208.75, 209.07},{171.278, 171.594}}; - std::vector> swat3 = {{0.0, 0.0},{0.0, 0.0}}; - std::vector> sgas3 = {{0.0, 0.0},{0.0, 0.0}}; - std::vector solutionNames3 = {"PRESSURE", "SWAT", "SGAS"}; - - std::vector>> solutions3; - - solutions3.push_back(pressure3); - solutions3.push_back(swat3); - solutions3.push_back(sgas3); - - // ----------------------------------- - - makeRftFile("TMP1.RFT", time1, date1, wellN1, conipos1, conjpos1, conkpos1, depth1, solutionNames1, solutions1); - makeRftFile("TMP2.RFT", time2, date2, wellN2, conipos2, conjpos2, conkpos2, depth2, solutionNames2, solutions2); - - ECLRegressionTest test1("TMP1", "TMP2", 1e-3, 1e-3); - - test1.results_rft(); - - // remove SGAS in second case TMP2, should fail - - solutionNames2 = {"PRESSURE", "SWAT"}; - - solutions2.clear(); - - solutions2.push_back(pressure2); - solutions2.push_back(swat2); - - makeRftFile("TMP2.RFT", time2, date2, wellN2, conipos2, conjpos2, conkpos2, depth2, solutionNames2, solutions2); - - ECLRegressionTest test1a("TMP1", "TMP2", 1e-3, 1e-3); - - BOOST_CHECK_THROW(test1a.results_rft(),std::runtime_error); - - // use TMP2 as first case, SGAS then one extra solution in TMP1 - // should still fail - - ECLRegressionTest test1b("TMP2", "TMP1", 1e-3, 1e-3); - BOOST_CHECK_THROW(test1b.results_rft(),std::runtime_error); - - // accept extra keyword, test should now be ok - test1b.setAcceptExtraKeywords(true); - - test1b.results_rft(); - - // accept extra keyword to false, but check for spesific keyword (PRESSSURE) - - test1b.setAcceptExtraKeywords(false); - test1b.compareSpesificKeyword("PRESSURE"); - - // should be ok since both cases have solution PRESSURE, only solution checked - test1b.results_rft(); - - // SGAS, only present in second case, should fail - test1b.compareSpesificKeyword("SGAS"); - - BOOST_CHECK_THROW(test1b.results_rft(),std::runtime_error); - - // testing third case, missing one rft and should fail - makeRftFile("TMP3.RFT", time3, date3, wellN3, conipos3, conjpos3, conkpos3, depth3, solutionNames3, solutions3); - ECLRegressionTest test2("TMP1", "TMP3", 1e-3, 1e-3); - - BOOST_CHECK_THROW(test2.results_rft(),std::runtime_error); - - if (remove("TMP1.RFT")==-1) { - std::cout << " > Warning! temporary file was not deleted" << std::endl; - } - - if (remove("TMP2.RFT")==-1) { - std::cout << " > Warning! temporary file was not deleted" << std::endl; - } - - if (remove("TMP3.RFT")==-1) { - std::cout << " > Warning! temporary file was not deleted" << std::endl; - } - -} - -BOOST_AUTO_TEST_CASE(results_rft_2) { - using Date = std::tuple; - - std::vector time1 = {0.0, 40.0, 50.0}; - std::vector date1 = { - Date{2000,1,1}, Date{2000,2,10}, Date{2000,2,20}, - }; - std::vector wellN1 = {"A-1H", "A-1H", "A-2H"}; - - std::vector> conipos1 = {{1,1},{1,1},{2,2}}; - std::vector> conjpos1 = {{1,1},{1,1},{3,3}}; - std::vector> conkpos1 = {{1,2},{1,2},{1,2}}; - - std::vector> depth1 = {{2004.68,2009.67},{2004.68,2009.67},{2014.66, 2019.66}}; - - std::vector> pressure1 = {{208.75, 209.07},{178.045, 178.361},{171.278, 171.594}}; - std::vector> swat1 = {{0.0, 0.0},{0.0, 0.0},{0.0, 0.0}}; - std::vector> sgas1 = {{0.0, 0.0},{0.0, 0.0},{0.0, 0.0}}; - std::vector solutionNames1 = {"PRESSURE", "SWAT", "SGAS"}; - - std::vector>> solutions1; - - solutions1.push_back(pressure1); - solutions1.push_back(swat1); - solutions1.push_back(sgas1); - - // ------ second case dentical with first case --------------- - - std::vector time2 = {0.0, 40.0, 50.0}; - std::vector date2 = { - Date{2000,1,1}, Date{2000,2,10}, Date{2000,2,20}, - }; - std::vector wellN2 = {"A-1H", "A-1H", "A-2H"}; - - std::vector> conipos2 = {{1,1},{1,1},{2,2}}; - std::vector> conjpos2 = {{1,1},{1,1},{3,3}}; - std::vector> conkpos2 = {{1,2},{1,2},{1,2}}; - - std::vector> depth2 = {{2004.68,2009.67},{2004.68,2009.67},{2014.66, 2019.66}}; - - std::vector> pressure2 = {{208.75, 209.07},{178.045, 178.361},{171.278, 171.594}}; - std::vector> swat2 = {{0.0, 0.0},{0.0, 0.0},{0.0, 0.0}}; - std::vector> sgas2 = {{0.0, 0.0},{0.0, 0.0},{0.0, 0.0}}; - std::vector solutionNames2 = {"PRESSURE", "SWAT", "SGAS"}; - - std::vector>> solutions2; - - solutions2.push_back(pressure2); - solutions2.push_back(swat2); - solutions2.push_back(sgas2); - - // ----------------------------------- - - makeRftFile("TMP1.RFT", time1, date1, wellN1, conipos1, conjpos1, conkpos1, depth1, solutionNames1, solutions1); - makeRftFile("TMP2.RFT", time2, date2, wellN2, conipos2, conjpos2, conkpos2, depth2, solutionNames2, solutions2); - - ECLRegressionTest test1("TMP1", "TMP2", 1e-3, 1e-3); - - // solutions1 and solutions2 are identical so far. Test should be ok. - test1.results_rft(); - - // changing pressure solutions in second case, rft #2 - - // modify pressure within tolerances - pressure2[1][1]=pressure2[1][1]*(1+1.0e-5); - - solutions2.clear(); - solutions2.push_back(pressure2); - solutions2.push_back(swat2); - solutions2.push_back(sgas2); - - makeRftFile("TMP2.RFT", time2, date2, wellN2, conipos2, conjpos2, conkpos2, depth2, solutionNames2, solutions2); - - // test should be ok, changes within tolerances - ECLRegressionTest test2("TMP1", "TMP2", 1e-3, 1e-3); - test2.results_rft(); - - // modify pressure for second rft to be outside tolerances - pressure2[1][1]=pressure2[1][1]*(1+1.0e-3); - - // Also modify modify gas saturation for third rft to be outside tolerances - sgas2[2][1] = 0.01; - - solutions2.clear(); - solutions2.push_back(pressure2); - solutions2.push_back(swat2); - solutions2.push_back(sgas2); - - makeRftFile("TMP2.RFT", time2, date2, wellN2, conipos2, conjpos2, conkpos2, depth2, solutionNames2, solutions2); - - // test should fail - ECLRegressionTest test3("TMP1", "TMP2", 1e-3, 1e-3); - BOOST_CHECK_THROW(test3.results_rft(),std::runtime_error); - - // run full analysis, will not throw on first error - test3.doAnalysis(true); - test3.results_rft(); - - // should get deviations for two keywords - BOOST_CHECK_EQUAL(test3.countDev(), 2); - - if (remove("TMP1.RFT")==-1) { - std::cout << " > Warning! temporary file was not deleted" << std::endl; - } - - if (remove("TMP2.RFT")==-1) { - std::cout << " > Warning! temporary file was not deleted" << std::endl; - } - -} - diff --git a/ThirdParty/custom-opm-common/opm-common/tests/test_EclipseIO.cpp b/ThirdParty/custom-opm-common/opm-common/tests/test_EclipseIO.cpp deleted file mode 100644 index 9dae9bc1a8..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/test_EclipseIO.cpp +++ /dev/null @@ -1,383 +0,0 @@ -/* - Copyright 2014 Andreas Lauser - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ -#include "config.h" - -#define BOOST_TEST_MODULE EclipseIO -#include - -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -#include - -#include -#include -#include -#include -#include -#include - -#include - -#include - -using namespace Opm; - -namespace { - -bool keywordExists(const std::vector& knownVec, - const std::string& arrayname) -{ - return std::any_of(knownVec.begin(), knownVec.end(), - [&arrayname](const EclIO::EclFile::EclEntry& entry) -> bool - { - return std::get<0>(entry) == arrayname; - }); -} - -template -T sum(const std::vector& array) -{ - return std::accumulate(array.begin(), array.end(), T(0)); -} - -data::Solution createBlackoilState( int timeStepIdx, int numCells ) { - - std::vector< double > pressure( numCells ); - std::vector< double > swat( numCells ); - std::vector< double > sgas( numCells ); - std::vector< double > rs( numCells ); - std::vector< double > rv( numCells ); - - for( int cellIdx = 0; cellIdx < numCells; ++cellIdx) { - - pressure[cellIdx] = timeStepIdx*1e5 + 1e4 + cellIdx; - sgas[cellIdx] = timeStepIdx*1e5 +2.2e4 + cellIdx; - swat[cellIdx] = timeStepIdx*1e5 +2.3e4 + cellIdx; - - // oil vaporization factor - rv[cellIdx] = timeStepIdx*1e5 +3e4 + cellIdx; - // gas dissolution factor - rs[cellIdx] = timeStepIdx*1e5 + 4e4 + cellIdx; - } - - data::Solution solution; - - solution.insert( "PRESSURE" , UnitSystem::measure::pressure , pressure, data::TargetType::RESTART_SOLUTION ); - solution.insert( "SWAT" , UnitSystem::measure::identity , swat, data::TargetType::RESTART_SOLUTION ); - solution.insert( "SGAS" , UnitSystem::measure::identity , sgas, data::TargetType::RESTART_SOLUTION ); - solution.insert( "RS" , UnitSystem::measure::identity , rs, data::TargetType::RESTART_SOLUTION ); - solution.insert( "RV" , UnitSystem::measure::identity , rv, data::TargetType::RESTART_SOLUTION ); - - return solution; -} - -template< typename T, typename U > -void compareErtData(const std::vector< T > &src, - const std::vector< U > &dst, - double tolerance ) { - BOOST_REQUIRE_EQUAL(src.size(), dst.size()); - - for (size_t i = 0; i < src.size(); ++i) - BOOST_CHECK_CLOSE(src[i], dst[i], tolerance); -} - -void compareErtData(const std::vector &src, const std::vector &dst) -{ - BOOST_CHECK_EQUAL_COLLECTIONS( src.begin(), src.end(), - dst.begin(), dst.end() ); -} - -void checkEgridFile( const EclipseGrid& eclGrid ) { - auto egridFile = EclIO::EGrid("FOO.EGRID"); - - const auto numCells = eclGrid.getNX() * eclGrid.getNY() * eclGrid.getNZ(); - - { - const auto& coord = egridFile.get("COORD"); - const auto& expect = eclGrid.getCOORD(); - compareErtData(expect, coord, 1e-6); - } - - { - const auto& zcorn = egridFile.get("ZCORN"); - const auto& expect = eclGrid.getZCORN(); - compareErtData(expect, zcorn, 1e-6); - } - - if (egridFile.hasKey("ACTNUM")) { - const auto& actnum = egridFile.get("ACTNUM"); - auto expect = eclGrid.getACTNUM(); - - if (expect.empty()) - expect.assign(numCells, 1); - - compareErtData(expect, actnum); - } -} - -void checkInitFile( const Deck& deck, const data::Solution& simProps) { - EclIO::EclFile initFile { "FOO.INIT" }; - - if (initFile.hasKey("PORO")) { - const auto& poro = initFile.get("PORO"); - const auto& expect = deck.getKeyword("PORO").getSIDoubleData(); - - compareErtData(expect, poro, 1e-4); - } - - if (initFile.hasKey("PERMX")) { - const auto& expect = deck.getKeyword("PERMX").getSIDoubleData(); - auto permx = initFile.get("PERMX"); - - for (auto& kx : permx) { - kx *= 9.869233e-16; - } - - compareErtData(expect, permx, 1e-4); - } - - /* - These keyword should always be in the INIT file, irrespective of - whether they appear in the inut deck or not. - */ - BOOST_CHECK_MESSAGE( initFile.hasKey("NTG"), R"(INIT file must have "NTG" array)" ); - BOOST_CHECK_MESSAGE( initFile.hasKey("FIPNUM"), R"(INIT file must have "FIPNUM" array)"); - BOOST_CHECK_MESSAGE( initFile.hasKey("SATNUM"), R"(INIT file must have "SATNUM" array)"); - - for (const auto& prop : simProps) { - BOOST_CHECK_MESSAGE( initFile.hasKey(prop.first), R"(INIT file must have ")" + prop.first + R"(" array)" ); - } -} - -void checkRestartFile( int timeStepIdx ) { - EclIO::ERst rstFile{ "FOO.UNRST" }; - - for (int i = 1; i <= timeStepIdx; ++i) { - if (! rstFile.hasReportStepNumber(i)) - continue; - - auto sol = createBlackoilState( i, 3 * 3 * 3 ); - - rstFile.loadReportStepNumber(i); - - const auto& knownVec = rstFile.listOfRstArrays(i); - - if (keywordExists(knownVec, "PRESSURE")) { - const auto& press = rstFile.getRst("PRESSURE", i, 0); - for( auto& x : sol.data("PRESSURE") ) - x /= Metric::Pressure; - - compareErtData( sol.data("PRESSURE"), press, 1e-4 ); - } - - if (keywordExists(knownVec, "SWAT")) { - const auto& swat = rstFile.getRst("SWAT", i, 0); - compareErtData( sol.data("SWAT"), swat, 1e-4 ); - } - - if (keywordExists(knownVec, "SGAS")) { - const auto& sgas = rstFile.getRst("SGAS", i, 0); - compareErtData( sol.data("SGAS"), sgas, 1e-4 ); - } - - if (keywordExists(knownVec, "KRO")) { - const auto& kro = rstFile.getRst("KRO", i, 0); - BOOST_CHECK_CLOSE(1.0 * i * kro.size(), sum(kro), 1.0e-8); - } - - if (keywordExists(knownVec, "KRG")) { - const auto& krg = rstFile.getRst("KRG", i, 0); - BOOST_CHECK_CLOSE(10.0 * i * krg.size(), sum(krg), 1.0e-8); - } - } -} - -time_t ecl_util_make_date( const int day, const int month, const int year ) -{ - const auto ymd = Opm::TimeStampUTC::YMD{ year, month, day }; - return static_cast(asTimeT(Opm::TimeStampUTC{ymd})); -} - -} // Anonymous namespace - -BOOST_AUTO_TEST_CASE(EclipseIOIntegration) { - const char *deckString = - "RUNSPEC\n" - "UNIFOUT\n" - "OIL\n" - "GAS\n" - "WATER\n" - "METRIC\n" - "DIMENS\n" - "3 3 3/\n" - "GRID\n" - "PORO\n" - "27*0.3 /\n" - "PERMX\n" - "27*1 /\n" - "INIT\n" - "DXV\n" - "1.0 2.0 3.0 /\n" - "DYV\n" - "4.0 5.0 6.0 /\n" - "DZV\n" - "7.0 8.0 9.0 /\n" - "TOPS\n" - "9*100 /\n" - "PORO \n" - " 27*0.15 /\n" - "PROPS\n" - "REGIONS\n" - "SATNUM\n" - "27*2 /\n" - "FIPNUM\n" - "27*3 /\n" - "SOLUTION\n" - "RPTRST\n" - "BASIC=2\n" - "/\n" - "SCHEDULE\n" - "TSTEP\n" - "1.0 2.0 3.0 4.0 5.0 6.0 7.0 /\n" - "WELSPECS\n" - "'INJ' 'G' 1 1 2000 'GAS' /\n" - "'PROD' 'G' 3 3 1000 'OIL' /\n" - "/\n"; - - auto write_and_check = [&]( int first = 1, int last = 5 ) { - auto deck = Parser().parseString( deckString); - auto es = EclipseState( deck ); - auto& eclGrid = es.getInputGrid(); - auto python = std::make_shared(); - Schedule schedule(deck, es, python); - SummaryConfig summary_config( deck, schedule, es.getTableManager( )); - SummaryState st(std::chrono::system_clock::now()); - es.getIOConfig().setBaseName( "FOO" ); - - EclipseIO eclWriter( es, eclGrid , schedule, summary_config); - - using measure = UnitSystem::measure; - using TargetType = data::TargetType; - auto start_time = ecl_util_make_date( 10, 10, 2008 ); - std::vector tranx(3*3*3); - std::vector trany(3*3*3); - std::vector tranz(3*3*3); - data::Solution eGridProps { - { "TRANX", { measure::transmissibility, tranx, TargetType::INIT } }, - { "TRANY", { measure::transmissibility, trany, TargetType::INIT } }, - { "TRANZ", { measure::transmissibility, tranz, TargetType::INIT } }, - }; - - std::map> int_data = {{"STR_ULONGNAME" , {1,1,1,1,1,1,1,1} } }; - - std::vector v(27); v[2] = 67; v[26] = 89; - int_data["STR_V"] = v; - - eclWriter.writeInitial( ); - - BOOST_CHECK_THROW( eclWriter.writeInitial( eGridProps , int_data) , std::invalid_argument); - - int_data.erase("STR_ULONGNAME"); - eclWriter.writeInitial( eGridProps , int_data ); - - data::Wells wells; - - for( int i = first; i < last; ++i ) { - data::Solution sol = createBlackoilState( i, 3 * 3 * 3 ); - sol.insert("KRO", measure::identity , std::vector(3*3*3 , i), TargetType::RESTART_AUXILIARY); - sol.insert("KRG", measure::identity , std::vector(3*3*3 , i*10), TargetType::RESTART_AUXILIARY); - - RestartValue restart_value(sol, wells); - auto first_step = ecl_util_make_date( 10 + i, 11, 2008 ); - eclWriter.writeTimeStep( st, - i, - false, - first_step - start_time, - restart_value); - - checkRestartFile( i ); - } - - checkInitFile( deck , eGridProps); - checkEgridFile( eclGrid ); - - EclIO::EclFile initFile("FOO.INIT"); - BOOST_CHECK_MESSAGE( initFile.hasKey("STR_V"), R"(INIT file must have "STR_V" array)" ); - const auto& kw = initFile.get("STR_V"); - BOOST_CHECK_EQUAL(67, kw[ 2]); - BOOST_CHECK_EQUAL(89, kw[26]); - - std::ifstream file( "FOO.UNRST", std::ios::binary ); - std::streampos file_size = 0; - - file_size = file.tellg(); - file.seekg( 0, std::ios::end ); - file_size = file.tellg() - file_size; - - return file_size; - }; - - /* - * write the file and calculate the file size. FOO.UNRST should be - * overwitten for every time step, i.e. the file size should not change - * between runs. This is to verify that UNRST files are properly - * overwritten, which they used not to. - * - * * https://github.com/OPM/opm-simulators/issues/753 - * * https://github.com/OPM/opm-output/pull/61 - */ - - WorkArea work_area("test_ecl_writer"); - const auto file_size = write_and_check(); - - for( int i = 0; i < 3; ++i ) - BOOST_CHECK_EQUAL( file_size, write_and_check() ); - - /* - * check that "restarting" and writing over previous timesteps does not - * change the file size, if the total amount of steps are the same - */ - BOOST_CHECK_EQUAL( file_size, write_and_check( 3, 5 ) ); - - /* verify that adding steps from restart also increases file size */ - BOOST_CHECK( file_size < write_and_check( 3, 7 ) ); - - /* - * verify that restarting a simulation, then writing fewer steps truncates - * the file - */ - BOOST_CHECK_EQUAL( file_size, write_and_check( 3, 5 ) ); -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/test_InteHEAD.cpp b/ThirdParty/custom-opm-common/opm-common/tests/test_InteHEAD.cpp deleted file mode 100644 index 76c0165f04..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/test_InteHEAD.cpp +++ /dev/null @@ -1,631 +0,0 @@ -/* - Copyright 2018 Statoil IT - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#define BOOST_TEST_MODULE InteHEAD_Vector - -#include - -#include - -#include - -#include -#include -#include -#include -#include - -#include - -#include -#include -#include -#include -#include // partial_sum() -#include -#include - -namespace VI = ::Opm::RestartIO::Helpers::VectorItems; - -namespace { - std::vector elapsedTime(const Opm::TimeMap& tmap) - { - auto elapsed = std::vector{}; - - elapsed.reserve(tmap.numTimesteps() + 1); - elapsed.push_back(0.0); - - for (auto nstep = tmap.numTimesteps(), - step = 0*nstep; step < nstep; ++step) - { - elapsed.push_back(tmap.getTimeStepLength(step)); - } - - std::partial_sum(std::begin(elapsed), std::end(elapsed), - std::begin(elapsed)); - - return elapsed; - } - - void expectDate(const Opm::RestartIO::InteHEAD::TimePoint& tp, - const int year, const int month, const int day) - { - BOOST_CHECK_EQUAL(tp.year , year); - BOOST_CHECK_EQUAL(tp.month , month); - BOOST_CHECK_EQUAL(tp.day , day); - - BOOST_CHECK_EQUAL(tp.hour , 0); - BOOST_CHECK_EQUAL(tp.minute , 0); - BOOST_CHECK_EQUAL(tp.second , 0); - BOOST_CHECK_EQUAL(tp.microseconds, 0); - } -} // Anonymous - -BOOST_AUTO_TEST_SUITE(Member_Functions) - -BOOST_AUTO_TEST_CASE(Dimensions_Individual) -{ - const auto ih = Opm::RestartIO::InteHEAD{} - .dimensions(100, 60, 15); - - const auto& v = ih.data(); - - BOOST_CHECK_EQUAL(v[VI::intehead::NX], 100); - BOOST_CHECK_EQUAL(v[VI::intehead::NY], 60); - BOOST_CHECK_EQUAL(v[VI::intehead::NZ], 15); -} - -BOOST_AUTO_TEST_CASE(Dimensions_Array) -{ - const auto ih = Opm::RestartIO::InteHEAD{} - .dimensions({ {100, 60, 15} }); - - const auto& v = ih.data(); - - BOOST_CHECK_EQUAL(v[VI::intehead::NX], 100); - BOOST_CHECK_EQUAL(v[VI::intehead::NY], 60); - BOOST_CHECK_EQUAL(v[VI::intehead::NZ], 15); -} - -BOOST_AUTO_TEST_CASE(NumActive) -{ - const auto ih = Opm::RestartIO::InteHEAD{} - .numActive(72390); - - const auto& v = ih.data(); - - BOOST_CHECK_EQUAL(v[VI::intehead::NACTIV], 72390); -} - -BOOST_AUTO_TEST_CASE(UnitConventions) -{ - auto ih = Opm::RestartIO::InteHEAD{}; - - // Metric - { - ih.unitConventions(Opm::UnitSystem::newMETRIC()); - - const auto& v = ih.data(); - - BOOST_CHECK_EQUAL(v[VI::intehead::UNIT], 1); - } - - // Field - { - ih.unitConventions(Opm::UnitSystem::newFIELD()); - - const auto& v = ih.data(); - - BOOST_CHECK_EQUAL(v[VI::intehead::UNIT], 2); - } - - // Lab - { - ih.unitConventions(Opm::UnitSystem::newLAB()); - - const auto& v = ih.data(); - - BOOST_CHECK_EQUAL(v[VI::intehead::UNIT], 3); - } - - // PVT-M - { - ih.unitConventions(Opm::UnitSystem::newPVT_M()); - - const auto& v = ih.data(); - - BOOST_CHECK_EQUAL(v[VI::intehead::UNIT], 4); - } -} - -BOOST_AUTO_TEST_CASE(WellTableDimensions) -{ - const auto numWells = 17; - const auto maxPerf = 29; - const auto maxWellsInGroup = 3; - const auto maxGroupInField = 14; - const auto maxWellsInField = 25; - - const auto ih = Opm::RestartIO::InteHEAD{} - .wellTableDimensions({ - numWells, maxPerf, maxWellsInGroup, maxGroupInField, maxWellsInField - }); - - const auto& v = ih.data(); - const auto nwgmax = std::max(maxWellsInGroup, maxGroupInField); - - BOOST_CHECK_EQUAL(v[VI::intehead::NWELLS], numWells); - BOOST_CHECK_EQUAL(v[VI::intehead::NCWMAX], maxPerf); - BOOST_CHECK_EQUAL(v[VI::intehead::NWGMAX], nwgmax); - BOOST_CHECK_EQUAL(v[VI::intehead::NGMAXZ], maxGroupInField + 1); - //BOOST_CHECK_EQUAL(v[VI::intehead::NWMAXZ], maxWellsInField); -} - -BOOST_AUTO_TEST_CASE(CalendarDate) -{ - // 2015-04-09T11:22:33.987654+0000 - - const auto ih = Opm::RestartIO::InteHEAD{} - .calendarDate({ - 2015, 4, 9, 11, 22, 33, 987654, - }); - - const auto& v = ih.data(); - - BOOST_CHECK_EQUAL(v[67 - 1], 2015); // Year - BOOST_CHECK_EQUAL(v[66 - 1], 4); // Month - BOOST_CHECK_EQUAL(v[65 - 1], 9); // Day - - BOOST_CHECK_EQUAL(v[207 - 1], 11); // Hour - BOOST_CHECK_EQUAL(v[208 - 1], 22); // Minute - BOOST_CHECK_EQUAL(v[411 - 1], 33987654); // Second (in microseconds) -} - -BOOST_AUTO_TEST_CASE(ActivePhases) -{ - using Ph = Opm::RestartIO::InteHEAD::Phases; - auto ih = Opm::RestartIO::InteHEAD{}; - - // Oil - { - ih.activePhases(Ph{ 1, 0, 0 }); - - const auto& v = ih.data(); - - BOOST_CHECK_EQUAL(v[VI::intehead::PHASE], 1); - } - - // Water - { - ih.activePhases(Ph{ 0, 1, 0 }); - - const auto& v = ih.data(); - - BOOST_CHECK_EQUAL(v[VI::intehead::PHASE], 2); - } - - // Gas - { - ih.activePhases(Ph{ 0, 0, 1 }); - - const auto& v = ih.data(); - - BOOST_CHECK_EQUAL(v[VI::intehead::PHASE], 4); - } - - // Oil/Water - { - ih.activePhases(Ph{ 1, 1, 0 }); - - const auto& v = ih.data(); - - BOOST_CHECK_EQUAL(v[VI::intehead::PHASE], 3); - } - - // Oil/Gas - { - ih.activePhases(Ph{ 1, 0, 1 }); - - const auto& v = ih.data(); - - BOOST_CHECK_EQUAL(v[VI::intehead::PHASE], 5); - } - - // Water/Gas - { - ih.activePhases(Ph{ 0, 1, 1 }); - - const auto& v = ih.data(); - - BOOST_CHECK_EQUAL(v[VI::intehead::PHASE], 6); - } - - // Oil/Water/Gas - { - ih.activePhases(Ph{ 1, 1, 1 }); - - const auto& v = ih.data(); - - BOOST_CHECK_EQUAL(v[VI::intehead::PHASE], 7); - } -} - -BOOST_AUTO_TEST_CASE(NWell_Parameters) -{ - const auto ih = Opm::RestartIO::InteHEAD{} - .params_NWELZ(27, 18, 28, 1); - - const auto& v = ih.data(); - - BOOST_CHECK_EQUAL(v[VI::intehead::NIWELZ], 27); - BOOST_CHECK_EQUAL(v[VI::intehead::NSWELZ], 18); - BOOST_CHECK_EQUAL(v[VI::intehead::NXWELZ], 28); - BOOST_CHECK_EQUAL(v[VI::intehead::NZWELZ], 1); -} - -BOOST_AUTO_TEST_CASE(NConn_Parameters) -{ - const auto ih = Opm::RestartIO::InteHEAD{} - .params_NCON(31, 41, 59); - - const auto& v = ih.data(); - - BOOST_CHECK_EQUAL(v[VI::intehead::NICONZ], 31); - BOOST_CHECK_EQUAL(v[VI::intehead::NSCONZ], 41); - BOOST_CHECK_EQUAL(v[VI::intehead::NXCONZ], 59); -} - -BOOST_AUTO_TEST_CASE(GroupSize_Parameters) -{ - // https://oeis.org/A001620 - const auto ih = Opm::RestartIO::InteHEAD{} - .params_GRPZ({ - { 577, 215, 664, 901 } - }); - - const auto& v = ih.data(); - - BOOST_CHECK_EQUAL(v[VI::intehead::NIGRPZ], 577); - BOOST_CHECK_EQUAL(v[VI::intehead::NSGRPZ], 215); - BOOST_CHECK_EQUAL(v[VI::intehead::NXGRPZ], 664); - BOOST_CHECK_EQUAL(v[VI::intehead::NZGRPZ], 901); -} - -BOOST_AUTO_TEST_CASE(Analytic_Aquifer_Parameters) -{ - // https://oeis.org/A001622 - const auto ih = Opm::RestartIO::InteHEAD{} - .params_NAAQZ(1, 61, 803, 3988, 74989, 484820, 4586834); - - const auto& v = ih.data(); - - BOOST_CHECK_EQUAL(v[VI::intehead::NCAMAX], 1); - BOOST_CHECK_EQUAL(v[VI::intehead::NIAAQZ], 61); - BOOST_CHECK_EQUAL(v[VI::intehead::NSAAQZ], 803); - BOOST_CHECK_EQUAL(v[VI::intehead::NXAAQZ], 3988); - BOOST_CHECK_EQUAL(v[VI::intehead::NICAQZ], 74989); - BOOST_CHECK_EQUAL(v[VI::intehead::NSCAQZ], 484820); - BOOST_CHECK_EQUAL(v[VI::intehead::NACAQZ], 4586834); -} - -BOOST_AUTO_TEST_CASE(Time_and_report_step) -{ - const auto ih = Opm::RestartIO::InteHEAD{} - .stepParam(12, 2); - - const auto& v = ih.data(); - - BOOST_CHECK_EQUAL(v[VI::intehead::NUM_SOLVER_STEPS], 12); // TSTEP (1st argument to stepParam) - BOOST_CHECK_EQUAL(v[VI::intehead::REPORT_STEP], 2); // REP_STEP (2nd argument to stepParam) -} - -BOOST_AUTO_TEST_CASE(Tuning_param) -{ - const auto newtmx = 17; - const auto newtmn = 5; - const auto litmax = 102; - const auto litmin = 20; - const auto mxwsit = 8; - const auto mxwpit = 6; - - const auto ih = Opm::RestartIO::InteHEAD{} - .tuningParam({ - newtmx, newtmn, litmax, litmin, mxwsit, mxwpit - }); - - const auto& v = ih.data(); - - BOOST_CHECK_EQUAL(v[VI::intehead::NEWTMX], newtmx); - BOOST_CHECK_EQUAL(v[VI::intehead::NEWTMN], newtmn); - BOOST_CHECK_EQUAL(v[VI::intehead::LITMAX], litmax); - BOOST_CHECK_EQUAL(v[VI::intehead::LITMIN], litmin); - BOOST_CHECK_EQUAL(v[VI::intehead::MXWSIT], mxwsit); - BOOST_CHECK_EQUAL(v[VI::intehead::MXWPIT], mxwpit); -} - -BOOST_AUTO_TEST_CASE(Various_Parameters) -{ - const auto ih = Opm::RestartIO::InteHEAD{} - .variousParam(2015, 100); - - const auto& v = ih.data(); - - BOOST_CHECK_EQUAL(v[VI::intehead::VERSION], 2015); // VERSION - BOOST_CHECK_EQUAL(v[VI::intehead::IPROG], 100); // IPROG - BOOST_CHECK_EQUAL(v[ 76], 5); // IH_076 - BOOST_CHECK_EQUAL(v[101], 1); // IH_101 - BOOST_CHECK_EQUAL(v[103], 1); // IH_103 -} - -BOOST_AUTO_TEST_CASE(wellSegDimensions) -{ - const auto nsegwl = 3; - const auto nswlmx = 4; - const auto nsegmx = 5; - const auto nlbrmx = 6; - const auto nisegz = 7; - const auto nrsegz = 8; - const auto nilbrz = 9; - - const auto ih = Opm::RestartIO::InteHEAD{} - .wellSegDimensions({ - nsegwl, nswlmx, nsegmx, nlbrmx, nisegz, nrsegz, nilbrz - }); - - const auto& v = ih.data(); - - BOOST_CHECK_EQUAL(v[VI::intehead::NSEGWL], nsegwl); - BOOST_CHECK_EQUAL(v[VI::intehead::NSWLMX], nswlmx); - BOOST_CHECK_EQUAL(v[VI::intehead::NSEGMX], nsegmx); - BOOST_CHECK_EQUAL(v[VI::intehead::NLBRMX], nlbrmx); - BOOST_CHECK_EQUAL(v[VI::intehead::NISEGZ], nisegz); - BOOST_CHECK_EQUAL(v[VI::intehead::NRSEGZ], nrsegz); - BOOST_CHECK_EQUAL(v[VI::intehead::NILBRZ], nilbrz); -} - -BOOST_AUTO_TEST_CASE(regionDimensions) -{ - const auto ntfip = 12; - const auto nmfipr = 22; - const auto nrfreg = 5; - const auto ntfreg = 6; - const auto nplmix = 7; - - const auto ih = Opm::RestartIO::InteHEAD{} - .regionDimensions({ - ntfip, nmfipr, nrfreg, ntfreg, nplmix - }); - - const auto& v = ih.data(); - - BOOST_CHECK_EQUAL(v[VI::intehead::NTFIP], ntfip); - BOOST_CHECK_EQUAL(v[VI::intehead::NMFIPR], nmfipr); -} - -BOOST_AUTO_TEST_CASE(ngroups) -{ - const auto ngroup = 8; - - const auto ih = Opm::RestartIO::InteHEAD{} - .ngroups({ ngroup }); - - const auto& v = ih.data(); - - BOOST_CHECK_EQUAL(v[VI::intehead::NGRP], ngroup); -} -BOOST_AUTO_TEST_CASE(SimulationDate) -{ - const auto input = std::string { R"( -RUNSPEC - -START - 1 JAN 2000 -/ - -SCHEDULE - -DATES - 1 'JAN' 2001 / -/ - -TSTEP ---Advance the simulater for TEN years: - 10*365.0D0 / -)" }; - - const auto tmap = ::Opm::TimeMap { - ::Opm::Parser{}.parseString(input) - }; - - const auto start = tmap.getStartTime(0); - const auto elapsed = elapsedTime(tmap); - - auto checkDate = [start, &elapsed] - (const std::vector::size_type i, - const std::array& expectYMD) -> void - { - using ::Opm::RestartIO::getSimulationTimePoint; - - expectDate(getSimulationTimePoint(start, elapsed[i]), - expectYMD[0], expectYMD[1], expectYMD[2]); - }; - - // START - checkDate(0, { 2000, 1, 1 }); // Start == 2000-01-01 - - // DATES (2000 being leap year is immaterial) - checkDate(1, { 2001, 1, 1 }); // RStep 1 == 2000-01-01 -> 2001-01-01 - - // TSTEP - checkDate(2, { 2002, 1, 1 }); // RStep 2 == 2001-01-01 -> 2002-01-01 - checkDate(3, { 2003, 1, 1 }); // RStep 3 == 2002-01-01 -> 2003-01-01 - checkDate(4, { 2004, 1, 1 }); // RStep 4 == 2003-01-01 -> 2004-01-01 - - // Leap year: 2004 - checkDate(5, { 2004, 12, 31 }); // RStep 5 == 2004-01-01 -> 2004-12-31 - checkDate(6, { 2005, 12, 31 }); // RStep 6 == 2004-12-31 -> 2005-12-31 - checkDate(7, { 2006, 12, 31 }); // RStep 7 == 2005-12-31 -> 2006-12-31 - checkDate(8, { 2007, 12, 31 }); // RStep 8 == 2006-12-31 -> 2007-12-31 - - // Leap year: 2008 - checkDate( 9, { 2008, 12, 30 }); // RStep 9 == 2007-12-31 -> 2008-12-30 - checkDate(10, { 2009, 12, 30 }); // RStep 10 == 2008-12-30 -> 2009-12-30 - checkDate(11, { 2010, 12, 30 }); // RStep 11 == 2009-12-30 -> 2010-12-30 -} - -BOOST_AUTO_TEST_SUITE_END() // Member_Functions - -// ===================================================================== - -BOOST_AUTO_TEST_SUITE(Transfer_Protocol) - -BOOST_AUTO_TEST_CASE(TestHeader) { - using Ph = Opm::RestartIO::InteHEAD::Phases; - - const auto nx = 10; - const auto ny = 11; - const auto nz = 12; - const auto nactive = 1345; - const auto numWells = 17; - const auto maxPerf = 29; - const auto maxWellsInGroup = 3; - const auto maxGroupInField = 14; - const auto maxWellsInField = 25; - const auto year = 2010; - const auto month = 1; - const auto mday = 27; - const auto hour = 11; - const auto minute = 22; - const auto seconds = 30; - const auto mseconds = 1234; - const auto total_mseconds = seconds * 1000000 + mseconds; - const auto phase_sum = 7; - const auto niwelz = 10; - const auto nswelz = 11; - const auto nxwelz = 12; - const auto nzwelz = 13; - const auto niconz = 77; - const auto nsconz = 88; - const auto nxconz = 99; - const auto nigrpz = 21; - const auto nsgrpz = 22; - const auto nxgrpz = 23; - const auto nzgrpz = 24; - const auto ncamax = 1; - const auto niaaqz = 11; - const auto nsaaqz = 111; - const auto nxaaqz = 11111; - const auto nicaqz = 111111; - const auto nscaqz = 1111111; - const auto nacaqz = 11111111; - const auto tstep = 78; - const auto report_step = 12; - const auto newtmx = 17; - const auto newtmn = 5; - const auto litmax = 102; - const auto litmin = 20; - const auto mxwsit = 8; - const auto mxwpit = 6; - const auto version = 2015; - const auto iprog = 100; - const auto nsegwl = 3; - const auto nswlmx = 4; - const auto nsegmx = 5; - const auto nlbrmx = 6; - const auto nisegz = 7; - const auto nrsegz = 8; - const auto nilbrz = 9; - const auto ntfip = 12; - const auto nmfipr = 22; - const auto ngroup = 8; - - auto ih = Opm::RestartIO::InteHEAD{} - .dimensions(nx, ny, nz) - .numActive(nactive) - .unitConventions(Opm::UnitSystem::newMETRIC()) - .wellTableDimensions({ numWells, maxPerf, maxWellsInGroup, maxGroupInField, maxWellsInField}) - .calendarDate({year, month, mday, hour, minute, seconds, mseconds}) - .activePhases(Ph{1,1,1}) - .params_NWELZ(niwelz, nswelz, nxwelz, nzwelz) - .params_NCON(niconz, nsconz, nxconz) - .params_GRPZ({nigrpz, nsgrpz, nxgrpz, nzgrpz}) - .params_NAAQZ(ncamax, niaaqz, nsaaqz, nxaaqz, nicaqz, nscaqz, nacaqz) - .stepParam(tstep, report_step) - .tuningParam({newtmx, newtmn, litmax, litmin, mxwsit, mxwpit}) - .variousParam(version, iprog) - .wellSegDimensions({nsegwl, nswlmx, nsegmx, nlbrmx, nisegz, nrsegz, nilbrz}) - .regionDimensions({ntfip, nmfipr, 0,0,0}) - .ngroups({ngroup}); - - Opm::RestartIO::RstHeader header(ih.data(), std::vector(100), std::vector(1000)); - BOOST_CHECK_EQUAL(header.nx, nx); - BOOST_CHECK_EQUAL(header.ny, ny); - BOOST_CHECK_EQUAL(header.nactive, nactive); - BOOST_CHECK_EQUAL(header.num_wells, numWells); - BOOST_CHECK_EQUAL(header.ncwmax, maxPerf); - BOOST_CHECK_EQUAL(header.max_wells_in_group, std::max(maxWellsInGroup , maxGroupInField)); - BOOST_CHECK_EQUAL(header.max_groups_in_field, maxGroupInField + 1); - BOOST_CHECK_EQUAL(header.max_wells_in_field, maxWellsInField); - BOOST_CHECK_EQUAL(header.year, year); - BOOST_CHECK_EQUAL(header.month, month); - BOOST_CHECK_EQUAL(header.mday, mday); - BOOST_CHECK_EQUAL(header.hour, hour); - BOOST_CHECK_EQUAL(header.minute, minute); - BOOST_CHECK_EQUAL(header.microsecond, total_mseconds); - BOOST_CHECK_EQUAL(header.phase_sum , phase_sum); - BOOST_CHECK_EQUAL(header.niwelz, niwelz); - BOOST_CHECK_EQUAL(header.nswelz, nswelz); - BOOST_CHECK_EQUAL(header.nxwelz, nxwelz); - BOOST_CHECK_EQUAL(header.nzwelz, nzwelz); - BOOST_CHECK_EQUAL(header.niconz, niconz); - BOOST_CHECK_EQUAL(header.nsconz, nsconz); - BOOST_CHECK_EQUAL(header.nxconz, nxconz); - BOOST_CHECK_EQUAL(header.nigrpz, nigrpz); - BOOST_CHECK_EQUAL(header.nsgrpz, nsgrpz); - BOOST_CHECK_EQUAL(header.nxgrpz, nxgrpz); - BOOST_CHECK_EQUAL(header.nzgrpz, nzgrpz); - BOOST_CHECK_EQUAL(header.ncamax, ncamax); - BOOST_CHECK_EQUAL(header.niaaqz, niaaqz); - BOOST_CHECK_EQUAL(header.nsaaqz, nsaaqz); - BOOST_CHECK_EQUAL(header.nxaaqz, nxaaqz); - BOOST_CHECK_EQUAL(header.nicaqz, nicaqz); - BOOST_CHECK_EQUAL(header.nscaqz, nscaqz); - BOOST_CHECK_EQUAL(header.nacaqz, nacaqz); - BOOST_CHECK_EQUAL(header.tstep, tstep); - BOOST_CHECK_EQUAL(header.report_step, report_step); - BOOST_CHECK_EQUAL(header.newtmx, newtmx); - BOOST_CHECK_EQUAL(header.newtmn, newtmn); - BOOST_CHECK_EQUAL(header.litmax, litmax); - BOOST_CHECK_EQUAL(header.litmin, litmin); - BOOST_CHECK_EQUAL(header.mxwsit, mxwsit); - BOOST_CHECK_EQUAL(header.mxwpit, mxwpit); - BOOST_CHECK_EQUAL(header.version, version); - BOOST_CHECK_EQUAL(header.iprog, iprog); - BOOST_CHECK_EQUAL(header.nsegwl, nsegwl); - BOOST_CHECK_EQUAL(header.nswlmx, nswlmx); - BOOST_CHECK_EQUAL(header.nsegmx, nsegmx); - BOOST_CHECK_EQUAL(header.nlbrmx, nlbrmx); - BOOST_CHECK_EQUAL(header.nisegz, nisegz); - BOOST_CHECK_EQUAL(header.nilbrz, nilbrz); - BOOST_CHECK_EQUAL(header.ntfip, ntfip); - BOOST_CHECK_EQUAL(header.nmfipr, nmfipr); - BOOST_CHECK_EQUAL(header.ngroup, ngroup); -} - -BOOST_AUTO_TEST_SUITE_END() // Transfer_Protocol diff --git a/ThirdParty/custom-opm-common/opm-common/tests/test_LinearisedOutputTable.cpp b/ThirdParty/custom-opm-common/opm-common/tests/test_LinearisedOutputTable.cpp deleted file mode 100644 index 20e136eb84..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/test_LinearisedOutputTable.cpp +++ /dev/null @@ -1,646 +0,0 @@ -/* - Copyright 2017 Statoil ASA. - - This file is part of the Open Porous Media Project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ -#include "config.h" - -#define NVERBOSE - -#define BOOST_TEST_MODULE TEST_LINEARISEDOUTPUTTABLE - -#include - -#include - -#include -#include -#include - -namespace { - template - void check_is_close(const Collection1& c1, const Collection2& c2) - { - BOOST_REQUIRE_EQUAL(c1.size(), c2.size()); - - if (! c1.empty()) { - auto i1 = c1.begin(), e1 = c1.end(); - auto i2 = c2.begin(); - - for (; i1 != e1; ++i1, ++i2) { - BOOST_CHECK_CLOSE(*i1, *i2, 1.0e-10); - } - } - } - - std::vector - makeTable(const std::size_t ncol, - std::initializer_list data) - { - auto result = std::vector(data.size(), 0.0); - const auto nrows = data.size() / ncol; - - auto di = std::begin(data); - for (auto i = 0*nrows; i < nrows; ++i) { - for (auto j = 0*ncol; j < ncol; ++j, ++di) { - result[i + j*nrows] = *di; - } - } - - return result; - } - - std::vector norne_pvto_1_1_incl_der() - { - return makeTable(5, { - 5.00e+01, 9.040365230755323e-01, 7.661326466741799e-01, 2.000000000000000e+20, 2.000000000000000e+20, - 7.50e+01, 9.077375549181221e-01, 7.279370929575959e-01, 1.480412737035941e-04, -1.527822148663360e-03, - 1.00e+02, 9.112115468727220e-01, 6.929365375457962e-01, 1.389596781839941e-04, -1.400022216471988e-03, - 1.25e+02, 9.144863787253888e-01, 6.607560539923331e-01, 1.309932741066744e-04, -1.287219342138526e-03, - 1.50e+02, 9.175658812302724e-01, 6.314975094496025e-01, 1.231801001953414e-04, -1.170341781709223e-03, - }); - } - - std::vector norne_pvto_1_2_incl_der() - { - return makeTable(5, { - 7.00e+01, 8.887150957146157e-01, 8.336914593945738e-01, -2.015977284331128e-03, 8.889317463209720e-03, - 9.50e+01, 8.924826189009969e-01, 7.940236822962605e-01, 1.507009274552473e-04, -1.586711083932530e-03, - 1.20e+02, 8.960252320705352e-01, 7.580585719716880e-01, 1.417045267815320e-04, -1.438604412982900e-03, - 1.45e+02, 8.993533649306149e-01, 7.247005358022682e-01, 1.331253144031885e-04, -1.334321446776792e-03, - 1.70e+02, 9.024944947835819e-01, 6.942265344489091e-01, 1.256451941186798e-04, -1.218960054134364e-03, - }); - } - - std::vector norne_pvto_1_3_incl_der() - { - return makeTable(5, { - 9.00e+01, 8.736829229935872e-01, 9.063100860929328e-01, -1.922272726474237e-03, 9.286269398767148e-03, - 1.15e+02, 8.775085776463464e-01, 8.653930746019195e-01, 1.530261861103677e-04, -1.636680459640534e-03, - 1.40e+02, 8.811038468993955e-01, 8.281051192663491e-01, 1.438107701219638e-04, -1.491518213422815e-03, - 1.65e+02, 8.844861135680170e-01, 7.932610884018090e-01, 1.352906667448606e-04, -1.393761234581605e-03, - 1.90e+02, 8.876816418559648e-01, 7.613050101680658e-01, 1.278211315179112e-04, -1.278243129349725e-03, - }); - } - - std::vector norne_sgfn_incl_der() - { - return makeTable(5, { - 0, 0, 0, 0, 0, - 5.000000000000000e-02, 1.655000000000000e-03, 0, 3.310000000000000e-02, 0, - 1.000000000000000e-01, 6.913000000000000e-03, 0, 1.051600000000000e-01, 0, - 1.500000000000000e-01, 1.621300000000000e-02, 0, 1.860000000000001e-01, 0, - 2.000000000000000e-01, 2.999000000000000e-02, 0, 2.755399999999998e-01, 0, - 2.500000000000000e-01, 4.865500000000000e-02, 0, 3.733000000000000e-01, 0, - 3.000000000000000e-01, 7.257300000000000e-02, 0, 4.783600000000001e-01, 0, - 3.500000000000000e-01, 1.020460000000000e-01, 0, 5.894600000000001e-01, 0, - 4.000000000000000e-01, 1.372870000000000e-01, 0, 7.048199999999992e-01, 0, - 4.500000000000000e-01, 1.784020000000000e-01, 0, 8.223000000000005e-01, 0, - 5.000000000000000e-01, 2.253680000000000e-01, 0, 9.393200000000004e-01, 0, - 5.500000000000000e-01, 2.780300000000000e-01, 0, 1.053239999999999e+00, 0, - 6.000000000000000e-01, 3.360930000000000e-01, 0, 1.161260000000001e+00, 0, - 6.500000000000000e-01, 3.991350000000000e-01, 0, 1.260840000000000e+00, 0, - 7.000000000000000e-01, 4.666310000000000e-01, 0, 1.349920000000002e+00, 0, - 7.500000000000000e-01, 5.380000000000000e-01, 0, 1.427379999999999e+00, 0, - 8.000000000000000e-01, 6.126650000000000e-01, 0, 1.493299999999998e+00, 0, - 8.500000000000000e-01, 6.901690000000000e-01, 0, 1.550080000000002e+00, 0, - 9.000000000000000e-01, 7.703950000000001e-01, 0, 1.604519999999999e+00, 0, - 9.500000000000000e-01, 8.542180000000000e-01, 0, 1.676460000000002e+00, 0, - 9.999000000000000e-01, 9.499000000000000e-01, 0, 1.917474949899796e+00, 0, - 1.000000000000000e+00, 9.500000000000000e-01, 0, 1.000000000000000e+00, 0, - }); - } -} // Anonymous - -// --------------------------------------------------------------------- -// Constructors - -BOOST_AUTO_TEST_SUITE (Basic_Operations) - -BOOST_AUTO_TEST_CASE (Construct_Defaulted_FillVal) -{ - const auto numTables = std::size_t{2}; - const auto numPrimary = std::size_t{3}; - const auto numRows = std::size_t{4}; - const auto numCols = std::size_t{5}; - - auto linTable = ::Opm::LinearisedOutputTable { - numTables, numPrimary, numRows, numCols - }; - - const auto expect_initial = std::vector( - numTables * numPrimary * numRows * numCols, 1.0e20); - - check_is_close(linTable.getData(), expect_initial); -} - -BOOST_AUTO_TEST_CASE (Construct_UserDefined_FillVal) -{ - const auto numTables = std::size_t{2}; - const auto numPrimary = std::size_t{3}; - const auto numRows = std::size_t{4}; - const auto numCols = std::size_t{5}; - const auto fillVal = 1.234e-5; - - auto linTable = ::Opm::LinearisedOutputTable { - numTables, numPrimary, numRows, numCols, fillVal - }; - - const auto expect_initial = std::vector( - numTables * numPrimary * numRows * numCols, fillVal); - - check_is_close(linTable.getData(), expect_initial); -} - -BOOST_AUTO_TEST_SUITE_END () - -// --------------------------------------------------------------------- -// Saturation Functions - -BOOST_AUTO_TEST_SUITE (Tabulated_Functions) - -BOOST_AUTO_TEST_CASE (SGFN) -{ - const auto inputData = norne_sgfn_incl_der(); - const auto tableRows = inputData.size() / 5; - - const auto numTables = std::size_t{ 1}; - const auto numPrimary = std::size_t{ 1}; - const auto numRows = std::size_t{30}; - const auto numCols = std::size_t{ 5}; - - auto sgfn = ::Opm::LinearisedOutputTable { - numTables, numPrimary, numRows, numCols - }; - - // Sg - { - const auto tableID = std::size_t{0}; - const auto primID = std::size_t{0}; - const auto colID = std::size_t{0}; - - std::copy(inputData.begin() + 0*tableRows, - inputData.begin() + 1*tableRows, - sgfn.column(tableID, primID, colID)); - } - - // Krg - { - const auto tableID = std::size_t{0}; - const auto primID = std::size_t{0}; - const auto colID = std::size_t{1}; - - std::copy(inputData.begin() + 1*tableRows, - inputData.begin() + 2*tableRows, - sgfn.column(tableID, primID, colID)); - } - - // Pcgo - { - const auto tableID = std::size_t{0}; - const auto primID = std::size_t{0}; - const auto colID = std::size_t{2}; - - std::copy(inputData.begin() + 2*tableRows, - inputData.begin() + 3*tableRows, - sgfn.column(tableID, primID, colID)); - } - - // d[Krg]/dSg - { - const auto tableID = std::size_t{0}; - const auto primID = std::size_t{0}; - const auto colID = std::size_t{3}; - - std::copy(inputData.begin() + 3*tableRows, - inputData.begin() + 4*tableRows, - sgfn.column(tableID, primID, colID)); - } - - // d[Pcgo]/dSg - { - const auto tableID = std::size_t{0}; - const auto primID = std::size_t{0}; - const auto colID = std::size_t{4}; - - std::copy(inputData.begin() + 4*tableRows, - inputData.begin() + 5*tableRows, - sgfn.column(tableID, primID, colID)); - } - - const auto expect = makeTable(5, - { - 0, 0, 0, 0, 0, - 5.000e-02, 1.65500e-03, 0, 3.310000000000000e-02, 0, - 1.000e-01, 6.91300e-03, 0, 1.051600000000000e-01, 0, - 1.500e-01, 1.62130e-02, 0, 1.860000000000001e-01, 0, - 2.000e-01, 2.99900e-02, 0, 2.755399999999998e-01, 0, - 2.500e-01, 4.86550e-02, 0, 3.733000000000000e-01, 0, - 3.000e-01, 7.25730e-02, 0, 4.783600000000001e-01, 0, - 3.500e-01, 1.02046e-01, 0, 5.894600000000001e-01, 0, - 4.000e-01, 1.37287e-01, 0, 7.048199999999992e-01, 0, - 4.500e-01, 1.78402e-01, 0, 8.223000000000005e-01, 0, - 5.000e-01, 2.25368e-01, 0, 9.393200000000004e-01, 0, - 5.500e-01, 2.78030e-01, 0, 1.053239999999999e+00, 0, - 6.000e-01, 3.36093e-01, 0, 1.161260000000001e+00, 0, - 6.500e-01, 3.99135e-01, 0, 1.260840000000000e+00, 0, - 7.000e-01, 4.66631e-01, 0, 1.349920000000002e+00, 0, - 7.500e-01, 5.38000e-01, 0, 1.427379999999999e+00, 0, - 8.000e-01, 6.12665e-01, 0, 1.493299999999998e+00, 0, - 8.500e-01, 6.90169e-01, 0, 1.550080000000002e+00, 0, - 9.000e-01, 7.70395e-01, 0, 1.604519999999999e+00, 0, - 9.500e-01, 8.54218e-01, 0, 1.676460000000002e+00, 0, - 9.999e-01, 9.49900e-01, 0, 1.917474949899796e+00, 0, - 1.000e+00, 9.50000e-01, 0, 1.000000000000000e+00, 0, - 1.000e+20, 1.00000e+20, 1.e+20, 1.000000000000000e+20, 1.e+20, - 1.000e+20, 1.00000e+20, 1.e+20, 1.000000000000000e+20, 1.e+20, - 1.000e+20, 1.00000e+20, 1.e+20, 1.000000000000000e+20, 1.e+20, - 1.000e+20, 1.00000e+20, 1.e+20, 1.000000000000000e+20, 1.e+20, - 1.000e+20, 1.00000e+20, 1.e+20, 1.000000000000000e+20, 1.e+20, - 1.000e+20, 1.00000e+20, 1.e+20, 1.000000000000000e+20, 1.e+20, - 1.000e+20, 1.00000e+20, 1.e+20, 1.000000000000000e+20, 1.e+20, - 1.000e+20, 1.00000e+20, 1.e+20, 1.000000000000000e+20, 1.e+20, - }); - - check_is_close(sgfn.getData(), expect); -} - -// --------------------------------------------------------------------- -// PVT - -BOOST_AUTO_TEST_CASE (PVTO) -{ - const auto inputData = std::vector< std::vector > - { - norne_pvto_1_1_incl_der(), - norne_pvto_1_2_incl_der(), - norne_pvto_1_3_incl_der(), - }; - - const auto numTables = std::size_t{1}; - const auto numPrimary = std::size_t{5}; - const auto numRows = std::size_t{8}; - const auto numCols = std::size_t{5}; - - auto pvto = ::Opm::LinearisedOutputTable { - numTables, numPrimary, numRows, numCols - }; - - { - auto primID = std::size_t{0}; - for (const auto& subTab : inputData) { - const auto tableRows = subTab.size() / numCols; - - // Po - { - const auto tableID = std::size_t{0}; - const auto colID = std::size_t{0}; - - std::copy(subTab.begin() + 0*tableRows, - subTab.begin() + 1*tableRows, - pvto.column(tableID, primID, colID)); - } - - // 1/Bo - { - const auto tableID = std::size_t{0}; - const auto colID = std::size_t{1}; - - std::copy(subTab.begin() + 1*tableRows, - subTab.begin() + 2*tableRows, - pvto.column(tableID, primID, colID)); - } - - // 1/(Bo*mu_o) - { - const auto tableID = std::size_t{0}; - const auto colID = std::size_t{2}; - - std::copy(subTab.begin() + 2*tableRows, - subTab.begin() + 3*tableRows, - pvto.column(tableID, primID, colID)); - } - - // d[1/Bo]/dPo - { - const auto tableID = std::size_t{0}; - const auto colID = std::size_t{3}; - - std::copy(subTab.begin() + 3*tableRows, - subTab.begin() + 4*tableRows, - pvto.column(tableID, primID, colID)); - } - - // d[1/(Bo*mu_o)]/dPo - { - const auto tableID = std::size_t{0}; - const auto colID = std::size_t{4}; - - std::copy(subTab.begin() + 4*tableRows, - subTab.begin() + 5*tableRows, - pvto.column(tableID, primID, colID)); - } - - primID += 1; - } - } - - const auto expect = makeTable(5, { - 5.000000000000000e+01, 9.040365230755323e-01, 7.661326466741799e-01, 2.000000000000000e+20, 2.000000000000000e+20, - 7.500000000000000e+01, 9.077375549181221e-01, 7.279370929575959e-01, 1.480412737035941e-04, -1.527822148663360e-03, - 1.000000000000000e+02, 9.112115468727220e-01, 6.929365375457962e-01, 1.389596781839941e-04, -1.400022216471988e-03, - 1.250000000000000e+02, 9.144863787253888e-01, 6.607560539923331e-01, 1.309932741066744e-04, -1.287219342138526e-03, - 1.500000000000000e+02, 9.175658812302724e-01, 6.314975094496025e-01, 1.231801001953414e-04, -1.170341781709223e-03, - 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 7.000000000000000e+01, 8.887150957146157e-01, 8.336914593945738e-01, -2.015977284331128e-03, 8.889317463209720e-03, - 9.500000000000000e+01, 8.924826189009969e-01, 7.940236822962605e-01, 1.507009274552473e-04, -1.586711083932530e-03, - 1.200000000000000e+02, 8.960252320705352e-01, 7.580585719716880e-01, 1.417045267815320e-04, -1.438604412982900e-03, - 1.450000000000000e+02, 8.993533649306149e-01, 7.247005358022682e-01, 1.331253144031885e-04, -1.334321446776792e-03, - 1.700000000000000e+02, 9.024944947835819e-01, 6.942265344489091e-01, 1.256451941186798e-04, -1.218960054134364e-03, - 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 9.000000000000000e+01, 8.736829229935872e-01, 9.063100860929328e-01, -1.922272726474237e-03, 9.286269398767148e-03, - 1.150000000000000e+02, 8.775085776463464e-01, 8.653930746019195e-01, 1.530261861103677e-04, -1.636680459640534e-03, - 1.400000000000000e+02, 8.811038468993955e-01, 8.281051192663491e-01, 1.438107701219638e-04, -1.491518213422815e-03, - 1.650000000000000e+02, 8.844861135680170e-01, 7.932610884018090e-01, 1.352906667448606e-04, -1.393761234581605e-03, - 1.900000000000000e+02, 8.876816418559648e-01, 7.613050101680658e-01, 1.278211315179112e-04, -1.278243129349725e-03, - 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - }); - - check_is_close(pvto.getData(), expect); -} - -BOOST_AUTO_TEST_SUITE_END () - -// --------------------------------------------------------------------- -// Derivatives of tabulated, piecewise linear functions - -BOOST_AUTO_TEST_SUITE (Calculated_Slopes) - -BOOST_AUTO_TEST_CASE (No_Derivatives) -{ - auto descr = ::Opm::DifferentiateOutputTable::Descriptor{}; - - descr.tableID = 0; - descr.primID = 0; - descr.numActRows = 1; - - auto linTable = ::Opm::LinearisedOutputTable { - 1, 1, 3, 3 // Single table, one prim. key, 3 declared rows, 3 cols. - }; - - { - auto x = 0.0; - auto y = x; - - *linTable.column(descr.tableID, descr.primID, 0) = x; - *linTable.column(descr.tableID, descr.primID, 1) = y; - } - - // Argument dependent symbol lookup. - calcSlopes(1, descr, linTable); // One dependent column. - - // Too few active rows (< 2). Leave derivatives alone - const auto expect = makeTable(3, { - 0, 0, 1.e+20, - 1.e+20, 1.e+20, 1.e+20, - 1.e+20, 1.e+20, 1.e+20, - }); - - check_is_close(linTable.getData(), expect); -} - -BOOST_AUTO_TEST_CASE (Constant_Function) -{ - auto descr = ::Opm::DifferentiateOutputTable::Descriptor{}; - - descr.tableID = 0; - descr.primID = 0; - descr.numActRows = 11; - - auto linTable = ::Opm::LinearisedOutputTable { - 1, 1, 15, 3 // Single table, one prim. key, 15 declared rows, 3 cols. - }; - - { - auto x = std::vector { - 0.0, 0.1, 0.2, 0.3, 0.4, - 0.5, 0.6, 0.7, 0.8, 0.9, 1.0 }; - - auto y = std::vector(x.size(), 1.25); - - std::copy(x.begin(), x.end(), - linTable.column(descr.tableID, descr.primID, 0)); - - std::copy(y.begin(), y.end(), - linTable.column(descr.tableID, descr.primID, 1)); - } - - // Argument dependent symbol lookup. - calcSlopes(1, descr, linTable); // One dependent column. - - // Compute slopes for all intervals, store in left end point. - // Non-active rows left at defaulted values. - const auto expect = makeTable(3, { - 0, 1.25e+00, 1.0e+20, - 1.0e-01, 1.25e+00, 0, - 2.0e-01, 1.25e+00, 0, - 3.0e-01, 1.25e+00, 0, - 4.0e-01, 1.25e+00, 0, - 5.0e-01, 1.25e+00, 0, - 6.0e-01, 1.25e+00, 0, - 7.0e-01, 1.25e+00, 0, - 8.0e-01, 1.25e+00, 0, - 9.0e-01, 1.25e+00, 0, - 1.0e+00, 1.25e+00, 0, - 1.0e+20, 1.00e+20, 1.0e+20, - 1.0e+20, 1.00e+20, 1.0e+20, - 1.0e+20, 1.00e+20, 1.0e+20, - 1.0e+20, 1.00e+20, 1.0e+20, - }); - - check_is_close(linTable.getData(), expect); -} - -BOOST_AUTO_TEST_CASE (Linear_Function) -{ - auto descr = ::Opm::DifferentiateOutputTable::Descriptor{}; - - descr.tableID = 0; - descr.primID = 0; - descr.numActRows = 11; - - auto linTable = ::Opm::LinearisedOutputTable { - 1, 1, 11, 3 // Single table, one prim. key, 11 declared rows, 3 cols. - }; - - { - auto x = std::vector { - 0.0, 0.1, 0.2, 0.3, 0.4, - 0.5, 0.6, 0.7, 0.8, 0.9, 1.0 }; - - auto y = x; - - std::copy(x.begin(), x.end(), - linTable.column(descr.tableID, descr.primID, 0)); - - std::copy(y.begin(), y.end(), - linTable.column(descr.tableID, descr.primID, 1)); - } - - // Argument dependent symbol lookup. - calcSlopes(1, descr, linTable); // One dependent column. - - // Compute slopes for all intervals, store in left end point. - const auto expect = makeTable(3, { - 0, 0, 1.0e+20, - 1.0e-01, 1.0e-01, 1.0, - 2.0e-01, 2.0e-01, 1.0, - 3.0e-01, 3.0e-01, 1.0, - 4.0e-01, 4.0e-01, 1.0, - 5.0e-01, 5.0e-01, 1.0, - 6.0e-01, 6.0e-01, 1.0, - 7.0e-01, 7.0e-01, 1.0, - 8.0e-01, 8.0e-01, 1.0, - 9.0e-01, 9.0e-01, 1.0, - 1.0e+00, 1.0e+00, 1.0, - }); - - check_is_close(linTable.getData(), expect); -} - -BOOST_AUTO_TEST_CASE (Nonlinear_Functions) -{ - auto descr = ::Opm::DifferentiateOutputTable::Descriptor{}; - - descr.tableID = 0; - descr.primID = 0; - descr.numActRows = 11; - - auto linTable = ::Opm::LinearisedOutputTable { - 1, 1, 15, 7 // Single table, one prim. key, 15 declared rows, 7 cols. - }; - - { - const auto x = std::vector { - 0.0, 0.1, 0.2, 0.3, 0.4, - 0.5, 0.6, 0.7, 0.8, 0.9, 1.0 }; - - // sin(2*pi * x) - const auto s = std::vector { - 0, - 5.877852522924731e-01, - 9.510565162951535e-01, - 9.510565162951536e-01, - 5.877852522924732e-01, - 1.224646799147353e-16, - -5.877852522924730e-01, - -9.510565162951535e-01, - -9.510565162951536e-01, - -5.877852522924734e-01, - -2.449293598294706e-16, - }; - - // cos(4*pi * x)^2 - const auto c = std::vector { - 1.000000000000000e+00, - 9.549150281252630e-02, - 6.545084971874736e-01, - 6.545084971874737e-01, - 9.549150281252616e-02, - 1.000000000000000e+00, - 9.549150281252648e-02, - 6.545084971874734e-01, - 6.545084971874742e-01, - 9.549150281252602e-02, - 1.000000000000000e+00, - }; - - // exp(-x) / (1 + x) - const auto f = std::vector { - 1.000000000000000e+00, - 8.225794709417813e-01, - 6.822756275649848e-01, - 5.698601697551676e-01, - 4.788000328825995e-01, - 4.043537731417556e-01, - 3.430072725587666e-01, - 2.921090022302409e-01, - 2.496272022873453e-01, - 2.139840314424206e-01, - 1.839397205857212e-01, - }; - - std::copy(x.begin(), x.end(), - linTable.column(descr.tableID, descr.primID, 0)); - - std::copy(s.begin(), s.end(), - linTable.column(descr.tableID, descr.primID, 1)); - - std::copy(c.begin(), c.end(), - linTable.column(descr.tableID, descr.primID, 2)); - - std::copy(f.begin(), f.end(), - linTable.column(descr.tableID, descr.primID, 3)); - } - - // Argument dependent symbol lookup. - calcSlopes(3, descr, linTable); // Three dependent columns. - - // Compute slopes for all intervals, store in left end point. - const auto expect = makeTable(7, { - 0, 0, 1.000000000000000e+00, 1.000000000000000e+00, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.0e-01, 5.877852522924731e-01, 9.549150281252630e-02, 8.225794709417813e-01, 5.877852522924731e+00, -9.045084971874736e+00, -1.774205290582187e+00, - 2.0e-01, 9.510565162951535e-01, 6.545084971874736e-01, 6.822756275649848e-01, 3.632712640026804e+00, 5.590169943749473e+00, -1.403038433767965e+00, - 3.0e-01, 9.510565162951536e-01, 6.545084971874737e-01, 5.698601697551676e-01, 1.110223024625157e-15, 1.110223024625157e-15, -1.124154578098172e+00, - 4.0e-01, 5.877852522924732e-01, 9.549150281252616e-02, 4.788000328825995e-01, -3.632712640026803e+00, -5.590169943749474e+00, -9.106013687256805e-01, - 5.0e-01, 1.224646799147353e-16, 1.000000000000000e+00, 4.043537731417556e-01, -5.877852522924733e+00, 9.045084971874740e+00, -7.444625974084391e-01, - 6.0e-01, -5.877852522924730e-01, 9.549150281252648e-02, 3.430072725587666e-01, -5.877852522924733e+00, -9.045084971874736e+00, -6.134650058298908e-01, - 7.0e-01, -9.510565162951535e-01, 6.545084971874734e-01, 2.921090022302409e-01, -3.632712640026806e+00, 5.590169943749470e+00, -5.089827032852569e-01, - 8.0e-01, -9.510565162951536e-01, 6.545084971874742e-01, 2.496272022873453e-01, -1.110223024625156e-15, 7.771561172376089e-15, -4.248179994289554e-01, - 9.0e-01, -5.877852522924734e-01, 9.549150281252602e-02, 2.139840314424206e-01, 3.632712640026804e+00, -5.590169943749483e+00, -3.564317084492472e-01, - 1.0e+00, -2.449293598294706e-16, 1.000000000000000e+00, 1.839397205857212e-01, 5.877852522924733e+00, 9.045084971874742e+00, -3.004431085669943e-01, - 1.0e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.0e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.0e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.0e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - }); - - check_is_close(linTable.getData(), expect); -} - -BOOST_AUTO_TEST_SUITE_END () diff --git a/ThirdParty/custom-opm-common/opm-common/tests/test_LogiHEAD.cpp b/ThirdParty/custom-opm-common/opm-common/tests/test_LogiHEAD.cpp deleted file mode 100644 index 037bbd6942..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/test_LogiHEAD.cpp +++ /dev/null @@ -1,253 +0,0 @@ -/* - Copyright 2019 Equinor - Copyright 2018 Statoil IT - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#define BOOST_TEST_MODULE LogiHEAD_Vector - -#include - -#include - -#include - -BOOST_AUTO_TEST_SUITE(Member_Functions) - -BOOST_AUTO_TEST_CASE(Radial_Settings_and_Init) -{ - const auto e300_radial = false; - const auto e100_radial = true; - const auto enableHyster = true; - - const auto lh = Opm::RestartIO::LogiHEAD{} - .variousParam(e300_radial, e100_radial, 4, enableHyster); - - const auto& v = lh.data(); - - BOOST_CHECK_EQUAL(v[ 3], false); // E300 Radial - BOOST_CHECK_EQUAL(v[ 4], true); // E100 Radial - BOOST_CHECK_EQUAL(v[ 6], true); // enableHyster - BOOST_CHECK_EQUAL(v[ 75], true); // MS Well Simulation Case -} - -BOOST_AUTO_TEST_CASE(PVTModel) -{ - namespace VI = ::Opm::RestartIO::Helpers::VectorItems; - - // Defaulted => dead oil, dry gas, non-constant Co. - { - auto pvt = ::Opm::RestartIO::LogiHEAD::PVTModel{}; - - const auto lh = - ::Opm::RestartIO::LogiHEAD{}.pvtModel(pvt); - - const auto& v = lh.data(); - - BOOST_CHECK_EQUAL(v[ VI::logihead::IsLiveOil ], false); - BOOST_CHECK_EQUAL(v[ VI::logihead::IsWetGas ], false); - BOOST_CHECK_EQUAL(v[ VI::logihead::ConstCo ], false); - } - - // Live oil, others defaulted - { - auto pvt = ::Opm::RestartIO::LogiHEAD::PVTModel{}; - - pvt.isLiveOil = true; - - const auto lh = - ::Opm::RestartIO::LogiHEAD{}.pvtModel(pvt); - - const auto& v = lh.data(); - - BOOST_CHECK_EQUAL(v[ VI::logihead::IsLiveOil ], true); - BOOST_CHECK_EQUAL(v[ VI::logihead::IsWetGas ], false); - BOOST_CHECK_EQUAL(v[ VI::logihead::ConstCo ], false); - } - - // Wet gas, others defaulted - { - auto pvt = ::Opm::RestartIO::LogiHEAD::PVTModel{}; - - pvt.isWetGas = true; - - const auto lh = - ::Opm::RestartIO::LogiHEAD{}.pvtModel(pvt); - - const auto& v = lh.data(); - - BOOST_CHECK_EQUAL(v[ VI::logihead::IsLiveOil ], false); - BOOST_CHECK_EQUAL(v[ VI::logihead::IsWetGas ], true); - BOOST_CHECK_EQUAL(v[ VI::logihead::ConstCo ], false); - } - - // Constant oil compressibility, others defaulted - { - auto pvt = ::Opm::RestartIO::LogiHEAD::PVTModel{}; - - pvt.constComprOil = true; - - const auto lh = - ::Opm::RestartIO::LogiHEAD{}.pvtModel(pvt); - - const auto& v = lh.data(); - - BOOST_CHECK_EQUAL(v[ VI::logihead::IsLiveOil ], false); - BOOST_CHECK_EQUAL(v[ VI::logihead::IsWetGas ], false); - BOOST_CHECK_EQUAL(v[ VI::logihead::ConstCo ], true); - } -} - -BOOST_AUTO_TEST_CASE(SaturationFunction) -{ - namespace VI = ::Opm::RestartIO::Helpers::VectorItems; - - // Defaulted => non-directional and reversible Kr, no EPS but - // reversible if actually enabled. - { - auto sfunc = ::Opm::RestartIO::LogiHEAD::SatfuncFlags{}; - - const auto lh = - ::Opm::RestartIO::LogiHEAD{}.saturationFunction(sfunc); - - const auto& v = lh.data(); - - BOOST_CHECK_EQUAL(v[ VI::logihead::DirKr ], false); - BOOST_CHECK_EQUAL(v[ VI::logihead::E100RevKr ], true); - BOOST_CHECK_EQUAL(v[ VI::logihead::EndScale ], false); - BOOST_CHECK_EQUAL(v[ VI::logihead::DirEPS ], false); - BOOST_CHECK_EQUAL(v[ VI::logihead::RevEPS ], true); - BOOST_CHECK_EQUAL(v[ VI::logihead::AltEPS ], false); - } - - // Directionally dependent relative permeability, all other defaulted. - { - auto sfunc = ::Opm::RestartIO::LogiHEAD::SatfuncFlags {}; - - sfunc.useDirectionalRelPerm = true; - - const auto lh = - ::Opm::RestartIO::LogiHEAD{}.saturationFunction(sfunc); - - const auto& v = lh.data(); - - BOOST_CHECK_EQUAL(v[ VI::logihead::DirKr ], true); - BOOST_CHECK_EQUAL(v[ VI::logihead::E100RevKr ], true); - BOOST_CHECK_EQUAL(v[ VI::logihead::EndScale ], false); - BOOST_CHECK_EQUAL(v[ VI::logihead::DirEPS ], false); - BOOST_CHECK_EQUAL(v[ VI::logihead::RevEPS ], true); - BOOST_CHECK_EQUAL(v[ VI::logihead::AltEPS ], false); - } - - // Irreversible relative permeability, all other defaulted. - { - auto sfunc = ::Opm::RestartIO::LogiHEAD::SatfuncFlags {}; - - sfunc.useReversibleRelPerm = false; - - const auto lh = - ::Opm::RestartIO::LogiHEAD{}.saturationFunction(sfunc); - - const auto& v = lh.data(); - - BOOST_CHECK_EQUAL(v[ VI::logihead::DirKr ], false); - BOOST_CHECK_EQUAL(v[ VI::logihead::E100RevKr ], false); - BOOST_CHECK_EQUAL(v[ VI::logihead::EndScale ], false); - BOOST_CHECK_EQUAL(v[ VI::logihead::DirEPS ], false); - BOOST_CHECK_EQUAL(v[ VI::logihead::RevEPS ], true); - BOOST_CHECK_EQUAL(v[ VI::logihead::AltEPS ], false); - } - - // End-point scaling activated, all other defaulted. - { - auto sfunc = ::Opm::RestartIO::LogiHEAD::SatfuncFlags {}; - - sfunc.useEndScale = true; - - const auto lh = - ::Opm::RestartIO::LogiHEAD{}.saturationFunction(sfunc); - - const auto& v = lh.data(); - - BOOST_CHECK_EQUAL(v[ VI::logihead::DirKr ], false); - BOOST_CHECK_EQUAL(v[ VI::logihead::E100RevKr ], true); - BOOST_CHECK_EQUAL(v[ VI::logihead::EndScale ], true); - BOOST_CHECK_EQUAL(v[ VI::logihead::DirEPS ], false); - BOOST_CHECK_EQUAL(v[ VI::logihead::RevEPS ], true); - BOOST_CHECK_EQUAL(v[ VI::logihead::AltEPS ], false); - } - - // Directionally dependent end-point scaling, all other defaulted. - { - auto sfunc = ::Opm::RestartIO::LogiHEAD::SatfuncFlags {}; - - sfunc.useDirectionalEPS = true; - - const auto lh = - ::Opm::RestartIO::LogiHEAD{}.saturationFunction(sfunc); - - const auto& v = lh.data(); - - BOOST_CHECK_EQUAL(v[ VI::logihead::DirKr ], false); - BOOST_CHECK_EQUAL(v[ VI::logihead::E100RevKr ], true); - BOOST_CHECK_EQUAL(v[ VI::logihead::EndScale ], false); - BOOST_CHECK_EQUAL(v[ VI::logihead::DirEPS ], true); - BOOST_CHECK_EQUAL(v[ VI::logihead::RevEPS ], true); - BOOST_CHECK_EQUAL(v[ VI::logihead::AltEPS ], false); - } - - // Irreversible end-point scaling, all other defaulted. - { - auto sfunc = ::Opm::RestartIO::LogiHEAD::SatfuncFlags {}; - - sfunc.useReversibleEPS = false; - - const auto lh = - ::Opm::RestartIO::LogiHEAD{}.saturationFunction(sfunc); - - const auto& v = lh.data(); - - BOOST_CHECK_EQUAL(v[ VI::logihead::DirKr ], false); - BOOST_CHECK_EQUAL(v[ VI::logihead::E100RevKr ], true); - BOOST_CHECK_EQUAL(v[ VI::logihead::EndScale ], false); - BOOST_CHECK_EQUAL(v[ VI::logihead::DirEPS ], false); - BOOST_CHECK_EQUAL(v[ VI::logihead::RevEPS ], false); - BOOST_CHECK_EQUAL(v[ VI::logihead::AltEPS ], false); - } - - // Alternative end-point scaling option (three-point method), all other - // defaulted. - { - auto sfunc = ::Opm::RestartIO::LogiHEAD::SatfuncFlags {}; - - sfunc.useAlternateEPS = true; - - const auto lh = - ::Opm::RestartIO::LogiHEAD{}.saturationFunction(sfunc); - - const auto& v = lh.data(); - - BOOST_CHECK_EQUAL(v[ VI::logihead::DirKr ], false); - BOOST_CHECK_EQUAL(v[ VI::logihead::E100RevKr ], true); - BOOST_CHECK_EQUAL(v[ VI::logihead::EndScale ], false); - BOOST_CHECK_EQUAL(v[ VI::logihead::DirEPS ], false); - BOOST_CHECK_EQUAL(v[ VI::logihead::RevEPS ], true); - BOOST_CHECK_EQUAL(v[ VI::logihead::AltEPS ], true); - } -} - -BOOST_AUTO_TEST_SUITE_END() diff --git a/ThirdParty/custom-opm-common/opm-common/tests/test_OpmLog.cpp b/ThirdParty/custom-opm-common/opm-common/tests/test_OpmLog.cpp deleted file mode 100644 index d286763317..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/test_OpmLog.cpp +++ /dev/null @@ -1,426 +0,0 @@ -/* - Copyright 2013 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include - -#define BOOST_TEST_MODULE LogTests - -#include -#include -#include - -#include -#include -#include - - -#include -#include -#include -#include -#include -#include -#include - -using namespace Opm; - - -BOOST_AUTO_TEST_CASE(DoLogging) { - OpmLog::addMessage(Log::MessageType::Warning , "Warning1"); - OpmLog::addMessage(Log::MessageType::Warning , "Warning2"); -} - - -BOOST_AUTO_TEST_CASE(Test_Format) { - BOOST_CHECK_EQUAL( "There is an error here?\nIn file /path/to/file, line 100\n" , Log::fileMessage(Location("/path/to/file" , 100) , "There is an error here?")); - - BOOST_CHECK_EQUAL( "\nError: This is the error" , Log::prefixMessage(Log::MessageType::Error , "This is the error")); - BOOST_CHECK_EQUAL( "\nWarning: This is the warning" , Log::prefixMessage(Log::MessageType::Warning , "This is the warning")); - BOOST_CHECK_EQUAL( "Info: This is the info" , Log::prefixMessage(Log::MessageType::Info , "This is the info")); -} - - - -BOOST_AUTO_TEST_CASE(Test_Logger) { - Logger logger; - std::ostringstream log_stream; - std::shared_ptr counter = std::make_shared(); - std::shared_ptr streamLog = std::make_shared( log_stream , Log::MessageType::Warning ); - BOOST_CHECK_THROW( StreamLog( "/non/existing/directory/logfile", Log::MessageType::Warning ) , std::runtime_error ); - BOOST_CHECK_EQUAL( false , logger.hasBackend("NO")); - - logger.addBackend("COUNTER" , counter); - logger.addBackend("STREAM" , streamLog); - BOOST_CHECK_EQUAL( true , logger.hasBackend("COUNTER")); - BOOST_CHECK_EQUAL( true , logger.hasBackend("STREAM")); - - logger.addMessage( Log::MessageType::Error , "Error"); - logger.addMessage( Log::MessageType::Warning , "Warning"); - BOOST_CHECK_EQUAL( 1U , counter->numMessages(Log::MessageType::Error) ); - BOOST_CHECK_EQUAL( 1U , counter->numMessages(Log::MessageType::Warning) ); - BOOST_CHECK_EQUAL( 0U , counter->numMessages(Log::MessageType::Info) ); - - BOOST_CHECK_EQUAL( log_stream.str() , "Warning\n"); - - - BOOST_CHECK_THROW( logger.getBackend("No") , std::invalid_argument ); - { - auto counter2 = logger.getBackend("COUNTER"); - BOOST_CHECK_EQUAL( 1U , counter2->numMessages( Log::MessageType::Warning)); - BOOST_CHECK_EQUAL( 1U , counter2->numMessages( Log::MessageType::Error)); - BOOST_CHECK_EQUAL( 0 , counter2->numMessages( Log::MessageType::Info)); - } - - BOOST_CHECK_EQUAL( false , logger.removeBackend("NO-not-found")); - BOOST_CHECK_EQUAL( true , logger.removeBackend("COUNTER")); - BOOST_CHECK_EQUAL( false , logger.hasBackend("COUNTER") ); - - { - auto stream2 = logger.popBackend("STREAM"); - BOOST_CHECK_EQUAL( false , logger.hasBackend("STREAM") ); - BOOST_CHECK_THROW( logger.popBackend("STREAM") , std::invalid_argument ); - } -} - - -BOOST_AUTO_TEST_CASE(LoggerAddTypes_PowerOf2) { - Logger logger; - int64_t not_power_of2 = 13; - int64_t power_of2 = 4096; - - BOOST_CHECK_THROW( logger.addMessageType( not_power_of2 , "Prefix") , std::invalid_argument); - BOOST_CHECK_THROW( logger.enabledMessageType( not_power_of2 ) , std::invalid_argument); - - logger.addMessageType( power_of2 , "Prefix"); - BOOST_CHECK( logger.enabledMessageType( power_of2 )); - BOOST_CHECK_EQUAL( false , logger.enabledMessageType( 2*power_of2 )); -} - - -class TestLog: public LogBackend { -public: - TestLog( int64_t messageMask ) : LogBackend( messageMask ) - { - m_defaultMessages = 0; - m_specialMessages = 0; - } - - void addMessageUnconditionally(int64_t messageType , const std::string& /* message */) override - { - if (messageType & Log::DefaultMessageTypes) - m_defaultMessages +=1; - else - m_specialMessages += 1; - } - - int m_defaultMessages; - int m_specialMessages; -}; -/* - Testing that the logger frontend does not let unknown message types - pass through; even though the backend has shown interest in the - phony 4096 messagetype. -*/ - -BOOST_AUTO_TEST_CASE(LoggerMasksTypes) { - Logger logger; - int64_t power_of2 = 4096; - - std::shared_ptr testLog = std::make_shared(Log::DefaultMessageTypes + power_of2); - logger.addBackend("TEST" , testLog); - BOOST_CHECK_EQUAL( false , logger.enabledMessageType( power_of2 )); - - logger.addMessage( Log::MessageType::Error , "Error"); - logger.addMessage( Log::MessageType::Warning , "Warning"); - logger.addMessage( Log::MessageType::Info , "Info"); - - BOOST_CHECK_THROW( logger.addMessage( power_of2 , "Blocked message") , std::invalid_argument ); - BOOST_CHECK_EQUAL( testLog->m_defaultMessages , 3 ); - BOOST_CHECK_EQUAL( testLog->m_specialMessages , 0 ); - - logger.addMessageType( power_of2 , "Phony"); - logger.addMessage( power_of2 , "Passing through"); - BOOST_CHECK_EQUAL( testLog->m_specialMessages , 1 ); -} - - - - - -BOOST_AUTO_TEST_CASE(LoggerDefaultTypesEnabled) { - Logger logger; - BOOST_CHECK_EQUAL( logger.enabledMessageTypes() , Log::DefaultMessageTypes); -} - -BOOST_AUTO_TEST_CASE( CounterLogTesting) { - CounterLog counter(Log::DefaultMessageTypes); - - counter.addMessage( Log::MessageType::Error , "This is an error ..."); - counter.addMessage( Log::MessageType::Warning , "This is a warning"); - counter.addMessage( Log::MessageType::Note , "This is a note"); - - BOOST_CHECK_EQUAL(1U , counter.numMessages( Log::MessageType::Error )); - BOOST_CHECK_EQUAL(1U , counter.numMessages( Log::MessageType::Warning )); - BOOST_CHECK_EQUAL(0 , counter.numMessages( Log::MessageType::Info )); - BOOST_CHECK_EQUAL(1U , counter.numMessages( Log::MessageType::Note )); - - { - int64_t not_enabled = 4096; - int64_t not_power2 = 4095; - - BOOST_CHECK_EQUAL( 0 , counter.numMessages( not_enabled )); - BOOST_CHECK_THROW( counter.numMessages( not_power2 ) , std::invalid_argument); - } -} - -BOOST_AUTO_TEST_CASE(TestTimerLog) { - Logger logger; - std::ostringstream sstream; - std::shared_ptr timer = std::make_shared(sstream); - logger.addBackend( "TIMER" , timer ); - logger.addMessageType( TimerLog::StartTimer , "Start"); - logger.addMessageType( TimerLog::StopTimer , "Stop"); - - logger.addMessage( TimerLog::StartTimer , ""); - logger.addMessage( TimerLog::StopTimer , "This was fast"); - std::cout << sstream.str() << std::endl; -} - - -/*****************************************************************/ -void initLogger(std::ostringstream& log_stream); - -void initLogger(std::ostringstream& log_stream) { - std::shared_ptr counter = std::make_shared(); - std::shared_ptr streamLog = std::make_shared( log_stream , Log::MessageType::Warning ); - - BOOST_CHECK_EQUAL( false , OpmLog::hasBackend("NO")); - - OpmLog::addBackend("COUNTER" , counter); - OpmLog::addBackend("STREAM" , streamLog); - BOOST_CHECK_EQUAL( true , OpmLog::hasBackend("COUNTER")); - BOOST_CHECK_EQUAL( true , OpmLog::hasBackend("STREAM")); -} - - - -BOOST_AUTO_TEST_CASE(TestOpmLog) { - std::ostringstream log_stream; - - initLogger(log_stream); - - OpmLog::addMessage( Log::MessageType::Warning , "Warning"); - OpmLog::addMessage( Log::MessageType::Error , "Error"); - - { - auto counter = OpmLog::getBackend("COUNTER"); - - BOOST_CHECK_EQUAL( 1 , counter->numMessages(Log::MessageType::Error) ); - BOOST_CHECK_EQUAL( 1 , counter->numMessages(Log::MessageType::Warning) ); - BOOST_CHECK_EQUAL( 0 , counter->numMessages(Log::MessageType::Info) ); - } - - BOOST_CHECK_EQUAL( log_stream.str() , "Warning\n"); -} - - - -BOOST_AUTO_TEST_CASE(TestHelperFunctions) -{ - using namespace Log; - - // isPower2 - BOOST_CHECK(!isPower2(0)); - BOOST_CHECK(isPower2(1)); - BOOST_CHECK(isPower2(1 << 3)); - BOOST_CHECK(isPower2(1ul << 62)); - - // fileMessage - BOOST_CHECK_EQUAL(fileMessage(Location("foo/bar", 1), "message"), "message\nIn file foo/bar, line 1\n"); - BOOST_CHECK_EQUAL(fileMessage(MessageType::Error, Location("foo/bar", 1), "message"), "\nError: message\nIn file foo/bar, line 1\n"); - - // prefixMessage - BOOST_CHECK_EQUAL(prefixMessage(MessageType::Error, "message"), "\nError: message"); - BOOST_CHECK_EQUAL(prefixMessage(MessageType::Info, "message"), "Info: message"); - BOOST_CHECK_EQUAL(prefixMessage(MessageType::Note, "message"), "Note: message"); - - // colorCode Message - BOOST_CHECK_EQUAL(colorCodeMessage(MessageType::Info, "message"), "message"); - BOOST_CHECK_EQUAL(colorCodeMessage(MessageType::Warning, "message"), AnsiTerminalColors::blue_strong + "message" + AnsiTerminalColors::none); - BOOST_CHECK_EQUAL(colorCodeMessage(MessageType::Error, "message"), AnsiTerminalColors::red_strong + "message" + AnsiTerminalColors::none); -} - - - -BOOST_AUTO_TEST_CASE(TestOpmLogWithColors) -{ - OpmLog::removeAllBackends(); - - std::ostringstream log_stream; - - { - std::shared_ptr counter = std::make_shared(); - std::shared_ptr streamLog = std::make_shared(log_stream, Log::DefaultMessageTypes); - BOOST_CHECK_EQUAL( false , OpmLog::hasBackend("NO")); - OpmLog::addBackend("COUNTER" , counter); - OpmLog::addBackend("STREAM" , streamLog); - BOOST_CHECK_EQUAL( true , OpmLog::hasBackend("COUNTER")); - BOOST_CHECK_EQUAL( true , OpmLog::hasBackend("STREAM")); - - streamLog->setMessageFormatter(std::make_shared(false, true)); - } - - OpmLog::warning("Warning"); - OpmLog::error("Error"); - OpmLog::info("Info"); - OpmLog::bug("Bug"); - - const std::string expected = Log::colorCodeMessage(Log::MessageType::Warning, "Warning") + "\n" - + Log::colorCodeMessage(Log::MessageType::Error, "Error") + "\n" - + Log::colorCodeMessage(Log::MessageType::Info, "Info") + "\n" - + Log::colorCodeMessage(Log::MessageType::Bug, "Bug") + "\n"; - - BOOST_CHECK_EQUAL(log_stream.str(), expected); - - { - auto counter = OpmLog::getBackend("COUNTER"); - - BOOST_CHECK_EQUAL( 1 , counter->numMessages(Log::MessageType::Error) ); - BOOST_CHECK_EQUAL( 1 , counter->numMessages(Log::MessageType::Warning) ); - BOOST_CHECK_EQUAL( 1 , counter->numMessages(Log::MessageType::Info) ); - BOOST_CHECK_EQUAL( 1 , counter->numMessages(Log::MessageType::Bug) ); - } - - - std::cout << log_stream.str() << std::endl; -} - - - - -BOOST_AUTO_TEST_CASE(TestOpmLogWithLimits) -{ - OpmLog::removeAllBackends(); - - std::ostringstream log_stream1; - std::ostringstream log_stream2; - - { - std::shared_ptr streamLog1 = std::make_shared(log_stream1, Log::DefaultMessageTypes); - std::shared_ptr streamLog2 = std::make_shared(log_stream2, Log::DefaultMessageTypes); - OpmLog::addBackend("STREAM1" , streamLog1); - OpmLog::addBackend("STREAM2" , streamLog2); - BOOST_CHECK_EQUAL( true , OpmLog::hasBackend("STREAM1")); - BOOST_CHECK_EQUAL( true , OpmLog::hasBackend("STREAM2")); - - streamLog1->setMessageFormatter(std::make_shared(false, true)); - streamLog1->setMessageLimiter(std::make_shared(2)); - streamLog2->setMessageFormatter(std::make_shared(false, true)); - std::shared_ptr lim(new MessageLimiter(MessageLimiter::NoLimit, {{ Log::MessageType::Warning, 2 }})); - streamLog2->setMessageLimiter(lim); // no tag limit, but a warning category limit - } - - const std::string tag = "ExampleTag"; - OpmLog::warning(tag, "Warning"); - OpmLog::error("Error"); - OpmLog::info("Info"); - OpmLog::bug("Bug"); - OpmLog::warning(tag, "Warning"); - OpmLog::warning(tag, "Warning"); - OpmLog::warning(tag, "Warning"); - - const std::string expected1 = Log::colorCodeMessage(Log::MessageType::Warning, "Warning") + "\n" - + Log::colorCodeMessage(Log::MessageType::Error, "Error") + "\n" - + Log::colorCodeMessage(Log::MessageType::Info, "Info") + "\n" - + Log::colorCodeMessage(Log::MessageType::Bug, "Bug") + "\n" - + Log::colorCodeMessage(Log::MessageType::Warning, "Warning") + "\n" - + Log::colorCodeMessage(Log::MessageType::Warning, "Message limit reached for message tag: " + tag) + "\n"; - - BOOST_CHECK_EQUAL(log_stream1.str(), expected1); - - const std::string expected2 = Log::colorCodeMessage(Log::MessageType::Warning, "Warning") + "\n" - + Log::colorCodeMessage(Log::MessageType::Error, "Error") + "\n" - + Log::colorCodeMessage(Log::MessageType::Info, "Info") + "\n" - + Log::colorCodeMessage(Log::MessageType::Bug, "Bug") + "\n" - + Log::colorCodeMessage(Log::MessageType::Warning, "Warning") + "\n" - + Log::colorCodeMessage(Log::MessageType::Warning, "Message limit reached for message category: \nWarning") + "\n"; - - BOOST_CHECK_EQUAL(log_stream2.str(), expected2); - - std::cout << log_stream1.str() << std::endl; - std::cout << log_stream2.str() << std::endl; -} - - - - -BOOST_AUTO_TEST_CASE(TestsetupSimpleLog) -{ - bool use_prefix = false; - OpmLog::setupSimpleDefaultLogging(use_prefix); - BOOST_CHECK_EQUAL(true, OpmLog::hasBackend("SimpleDefaultLog")); -} - - - -BOOST_AUTO_TEST_CASE(TestFormat) -{ - OpmLog::removeAllBackends(); - std::ostringstream log_stream1; - std::ostringstream log_stream2; - std::ostringstream log_stream3; - { - std::shared_ptr streamLog1 = std::make_shared(log_stream1, Log::DefaultMessageTypes); - std::shared_ptr streamLog2 = std::make_shared(log_stream2, Log::DefaultMessageTypes); - std::shared_ptr streamLog3 = std::make_shared(log_stream3, Log::DefaultMessageTypes); - OpmLog::addBackend("STREAM1" , streamLog1); - OpmLog::addBackend("STREAM2" , streamLog2); - OpmLog::addBackend("STREAM3" , streamLog3); - BOOST_CHECK_EQUAL( true , OpmLog::hasBackend("STREAM1")); - BOOST_CHECK_EQUAL( true , OpmLog::hasBackend("STREAM2")); - BOOST_CHECK_EQUAL( true , OpmLog::hasBackend("STREAM3")); - streamLog1->setMessageFormatter(std::make_shared(false, true)); - streamLog2->setMessageFormatter(std::make_shared(Log::MessageType::Info, true)); - streamLog3->setMessageFormatter(std::make_shared(false)); - } - - OpmLog::warning("Warning"); - OpmLog::error("Error"); - OpmLog::info("Info"); - OpmLog::bug("Bug"); - - const std::string expected1 = Log::colorCodeMessage(Log::MessageType::Warning, "Warning") + "\n" - + Log::colorCodeMessage(Log::MessageType::Error, "Error") + "\n" - + Log::colorCodeMessage(Log::MessageType::Info, "Info") + "\n" - + Log::colorCodeMessage(Log::MessageType::Bug, "Bug") + "\n"; - - const std::string expected2 = Log::colorCodeMessage(Log::MessageType::Warning, "Warning") + "\n" - + Log::colorCodeMessage(Log::MessageType::Error, "Error") + "\n" - + Log::colorCodeMessage(Log::MessageType::Info, "Info: Info") + "\n" - + Log::colorCodeMessage(Log::MessageType::Bug, "Bug") + "\n"; - - const std::string expected3 = Log::prefixMessage(Log::MessageType::Warning, "Warning") + "\n" - + Log::prefixMessage(Log::MessageType::Error, "Error") + "\n" - + "Info" + "\n" - + Log::prefixMessage(Log::MessageType::Bug, "Bug") + "\n"; - - BOOST_CHECK_EQUAL(log_stream1.str(), expected1); - BOOST_CHECK_EQUAL(log_stream2.str(), expected2); - BOOST_CHECK_EQUAL(log_stream3.str(), expected3); -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/test_OutputStream.cpp b/ThirdParty/custom-opm-common/opm-common/tests/test_OutputStream.cpp deleted file mode 100644 index dd46a7d07e..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/test_OutputStream.cpp +++ /dev/null @@ -1,2428 +0,0 @@ -/* - Copyright 2019 Equinor - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#define BOOST_TEST_MODULE OutputStream - -#include - -#include - -#include -#include -#include -#include - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -namespace Opm { namespace EclIO { - - // Needed by BOOST_CHECK_EQUAL_COLLECTIONS. - std::ostream& - operator<<(std::ostream& os, const EclFile::EclEntry& e) - { - os << "{ " << std::get<0>(e) - << ", " << static_cast(std::get<1>(e)) - << ", " << std::get<2>(e) - << " }"; - - return os; - } -}} // Namespace Opm::ecl - -namespace { - template - void check_is_close(const Coll& c1, const Coll& c2) - { - using ElmType = typename std::remove_cv< - typename std::remove_reference< - typename std::iterator_traits< - decltype(std::begin(c1)) - >::value_type - >::type - >::type; - - for (auto b1 = c1.begin(), e1 = c1.end(), b2 = c2.begin(); - b1 != e1; ++b1, ++b2) - { - BOOST_CHECK_CLOSE(*b1, *b2, static_cast(1.0e-7)); - } - } -} // Anonymous namespace - -BOOST_AUTO_TEST_SUITE(FileName) - -BOOST_AUTO_TEST_CASE(ResultSetDescriptor) -{ - const auto odir = std::string{"/x/y/z/"}; - const auto ext = std::string{"F0123"}; - - { - const auto rset = ::Opm::EclIO::OutputStream::ResultSet { - odir, "CASE" - }; - - const auto fname = outputFileName(rset, ext); - - BOOST_CHECK_EQUAL(fname, odir + "CASE.F0123"); - } - - { - const auto rset = ::Opm::EclIO::OutputStream::ResultSet { - odir, "CASE." // CASE DOT - }; - - const auto fname = outputFileName(rset, ext); - - BOOST_CHECK_EQUAL(fname, odir + "CASE.F0123"); - } - - { - const auto rset = ::Opm::EclIO::OutputStream::ResultSet { - odir, "CASE.01" - }; - - const auto fname = outputFileName(rset, ext); - - BOOST_CHECK_EQUAL(fname, odir + "CASE.01.F0123"); - } - - { - const auto rset = ::Opm::EclIO::OutputStream::ResultSet { - odir, "CASE.01." // CASE.01 DOT - }; - - const auto fname = outputFileName(rset, ext); - - BOOST_CHECK_EQUAL(fname, odir + "CASE.01.F0123"); - } -} - -BOOST_AUTO_TEST_SUITE_END() // FileName - -// ========================================================================== -class RSet -{ -public: - explicit RSet(std::string base) - : odir_(Opm::filesystem::temp_directory_path() / - Opm::unique_path("rset-%%%%")) - , base_(std::move(base)) - { - Opm::filesystem::create_directories(this->odir_); - } - - ~RSet() - { - Opm::filesystem::remove_all(this->odir_); - } - - operator ::Opm::EclIO::OutputStream::ResultSet() const - { - return { this->odir_.string(), this->base_ }; - } - -private: - Opm::filesystem::path odir_; - std::string base_; -}; - -// ========================================================================== - -BOOST_AUTO_TEST_SUITE(Class_Init) - -BOOST_AUTO_TEST_CASE(Unformatted) -{ - const auto rset = RSet("CASE"); - const auto fmt = ::Opm::EclIO::OutputStream::Formatted{ false }; - - { - auto init = ::Opm::EclIO::OutputStream::Init { - rset, fmt - }; - - init.write("I", std::vector {1, 7, 2, 9}); - init.write("L", std::vector {true, false, false, true}); - init.write("S", std::vector {3.1f, 4.1f, 59.265f}); - init.write("D", std::vector{2.71, 8.21}); - } - - { - const auto fname = ::Opm::EclIO::OutputStream:: - outputFileName(rset, "INIT"); - - auto init = ::Opm::EclIO::EclFile{fname}; - - BOOST_CHECK(init.hasKey("I")); - BOOST_CHECK(init.hasKey("L")); - BOOST_CHECK(init.hasKey("S")); - BOOST_CHECK(init.hasKey("D")); - - { - const auto vectors = init.getList(); - const auto expect_vectors = std::vector{ - Opm::EclIO::EclFile::EclEntry{"I", Opm::EclIO::eclArrType::INTE, 4}, - Opm::EclIO::EclFile::EclEntry{"L", Opm::EclIO::eclArrType::LOGI, 4}, - Opm::EclIO::EclFile::EclEntry{"S", Opm::EclIO::eclArrType::REAL, 3}, - Opm::EclIO::EclFile::EclEntry{"D", Opm::EclIO::eclArrType::DOUB, 2}, - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(vectors.begin(), vectors.end(), - expect_vectors.begin(), - expect_vectors.end()); - } - - init.loadData(); - - { - const auto& I = init.get("I"); - const auto expect_I = std::vector{ 1, 7, 2, 9 }; - BOOST_CHECK_EQUAL_COLLECTIONS(I.begin(), I.end(), - expect_I.begin(), - expect_I.end()); - } - - { - const auto& L = init.get("L"); - const auto expect_L = std::vector { - true, false, false, true, - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(L.begin(), L.end(), - expect_L.begin(), - expect_L.end()); - } - - { - const auto& S = init.get("S"); - const auto expect_S = std::vector{ - 3.1f, 4.1f, 59.265f, - }; - - check_is_close(S, expect_S); - } - - { - const auto& D = init.get("D"); - const auto expect_D = std::vector{ - 2.71, 8.21, - }; - - check_is_close(D, expect_D); - } - } - - // Second write request replaces original contents - { - auto init = ::Opm::EclIO::OutputStream::Init { - rset, fmt - }; - - init.write("I2", std::vector {1, 2, 3, 4, 5, 6}); - init.write("L2", std::vector {false, false, true, true}); - init.write("S2", std::vector {-1.0f, 2.0f, -3.0e-4f}); - init.write("D2", std::vector{2.71, 8.21, 18.28459}); - } - - { - const auto fname = ::Opm::EclIO::OutputStream:: - outputFileName(rset, "INIT"); - - auto init = ::Opm::EclIO::EclFile{fname}; - - BOOST_CHECK(!init.hasKey("I")); - BOOST_CHECK(!init.hasKey("L")); - BOOST_CHECK(!init.hasKey("S")); - BOOST_CHECK(!init.hasKey("D")); - - BOOST_CHECK(init.hasKey("I2")); - BOOST_CHECK(init.hasKey("L2")); - BOOST_CHECK(init.hasKey("S2")); - BOOST_CHECK(init.hasKey("D2")); - - { - const auto vectors = init.getList(); - const auto expect_vectors = std::vector{ - Opm::EclIO::EclFile::EclEntry{"I2", Opm::EclIO::eclArrType::INTE, 6}, - Opm::EclIO::EclFile::EclEntry{"L2", Opm::EclIO::eclArrType::LOGI, 4}, - Opm::EclIO::EclFile::EclEntry{"S2", Opm::EclIO::eclArrType::REAL, 3}, - Opm::EclIO::EclFile::EclEntry{"D2", Opm::EclIO::eclArrType::DOUB, 3}, - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(vectors.begin(), vectors.end(), - expect_vectors.begin(), - expect_vectors.end()); - } - - init.loadData(); - - { - const auto& I = init.get("I2"); - const auto expect_I = std::vector{ 1, 2, 3, 4, 5, 6 }; - BOOST_CHECK_EQUAL_COLLECTIONS(I.begin(), I.end(), - expect_I.begin(), - expect_I.end()); - } - - { - const auto& L = init.get("L2"); - const auto expect_L = std::vector { - false, false, true, true, - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(L.begin(), L.end(), - expect_L.begin(), - expect_L.end()); - } - - { - const auto& S = init.get("S2"); - const auto expect_S = std::vector{ - -1.0f, 2.0f, -3.0e-4f, - }; - - check_is_close(S, expect_S); - } - - { - const auto& D = init.get("D2"); - const auto expect_D = std::vector{ - 2.71, 8.21, 18.28459, - }; - - check_is_close(D, expect_D); - } - } -} - -BOOST_AUTO_TEST_CASE(Formatted) -{ - const auto rset = RSet("CASE"); - const auto fmt = ::Opm::EclIO::OutputStream::Formatted{ true }; - - { - auto init = ::Opm::EclIO::OutputStream::Init { - rset, fmt - }; - - init.write("I", std::vector {1, 7, 2, 9}); - init.write("L", std::vector {true, false, false, true}); - init.write("S", std::vector {3.1f, 4.1f, 59.265f}); - init.write("D", std::vector{2.71, 8.21}); - } - - { - const auto fname = ::Opm::EclIO::OutputStream:: - outputFileName(rset, "FINIT"); - - auto init = ::Opm::EclIO::EclFile{fname}; - - BOOST_CHECK(init.hasKey("I")); - BOOST_CHECK(init.hasKey("L")); - BOOST_CHECK(init.hasKey("S")); - BOOST_CHECK(init.hasKey("D")); - - { - const auto vectors = init.getList(); - const auto expect_vectors = std::vector{ - Opm::EclIO::EclFile::EclEntry{"I", Opm::EclIO::eclArrType::INTE, 4}, - Opm::EclIO::EclFile::EclEntry{"L", Opm::EclIO::eclArrType::LOGI, 4}, - Opm::EclIO::EclFile::EclEntry{"S", Opm::EclIO::eclArrType::REAL, 3}, - Opm::EclIO::EclFile::EclEntry{"D", Opm::EclIO::eclArrType::DOUB, 2}, - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(vectors.begin(), vectors.end(), - expect_vectors.begin(), - expect_vectors.end()); - } - - init.loadData(); - - { - const auto& I = init.get("I"); - const auto expect_I = std::vector{ 1, 7, 2, 9 }; - BOOST_CHECK_EQUAL_COLLECTIONS(I.begin(), I.end(), - expect_I.begin(), - expect_I.end()); - } - - { - const auto& L = init.get("L"); - const auto expect_L = std::vector { - true, false, false, true, - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(L.begin(), L.end(), - expect_L.begin(), - expect_L.end()); - } - - { - const auto& S = init.get("S"); - const auto expect_S = std::vector{ - 3.1f, 4.1f, 59.265f, - }; - - check_is_close(S, expect_S); - } - - { - const auto& D = init.get("D"); - const auto expect_D = std::vector{ - 2.71, 8.21, - }; - - check_is_close(D, expect_D); - } - } - - - // Second write request replaces original contents - { - auto init = ::Opm::EclIO::OutputStream::Init { - rset, fmt - }; - - init.write("I2", std::vector {1, 2, 3, 4, 5, 6}); - init.write("L2", std::vector {false, false, true, true}); - init.write("S2", std::vector {-1.0f, 2.0f, -3.0e-4f}); - init.write("D2", std::vector{2.71, 8.21, 18.28459}); - } - - { - const auto fname = ::Opm::EclIO::OutputStream:: - outputFileName(rset, "FINIT"); - - auto init = ::Opm::EclIO::EclFile{fname}; - - BOOST_CHECK(!init.hasKey("I")); - BOOST_CHECK(!init.hasKey("L")); - BOOST_CHECK(!init.hasKey("S")); - BOOST_CHECK(!init.hasKey("D")); - - BOOST_CHECK(init.hasKey("I2")); - BOOST_CHECK(init.hasKey("L2")); - BOOST_CHECK(init.hasKey("S2")); - BOOST_CHECK(init.hasKey("D2")); - - { - const auto vectors = init.getList(); - const auto expect_vectors = std::vector{ - Opm::EclIO::EclFile::EclEntry{"I2", Opm::EclIO::eclArrType::INTE, 6}, - Opm::EclIO::EclFile::EclEntry{"L2", Opm::EclIO::eclArrType::LOGI, 4}, - Opm::EclIO::EclFile::EclEntry{"S2", Opm::EclIO::eclArrType::REAL, 3}, - Opm::EclIO::EclFile::EclEntry{"D2", Opm::EclIO::eclArrType::DOUB, 3}, - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(vectors.begin(), vectors.end(), - expect_vectors.begin(), - expect_vectors.end()); - } - - init.loadData(); - - { - const auto& I = init.get("I2"); - const auto expect_I = std::vector{ 1, 2, 3, 4, 5, 6 }; - BOOST_CHECK_EQUAL_COLLECTIONS(I.begin(), I.end(), - expect_I.begin(), - expect_I.end()); - } - - { - const auto& L = init.get("L2"); - const auto expect_L = std::vector { - false, false, true, true, - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(L.begin(), L.end(), - expect_L.begin(), - expect_L.end()); - } - - { - const auto& S = init.get("S2"); - const auto expect_S = std::vector{ - -1.0f, 2.0f, -3.0e-4f, - }; - - check_is_close(S, expect_S); - } - - { - const auto& D = init.get("D2"); - const auto expect_D = std::vector{ - 2.71, 8.21, 18.28459, - }; - - check_is_close(D, expect_D); - } - } -} - -BOOST_AUTO_TEST_SUITE_END() - -// ========================================================================== - -BOOST_AUTO_TEST_SUITE(Class_Restart) - -BOOST_AUTO_TEST_CASE(Unformatted_Unified) -{ - const auto rset = RSet("CASE"); - const auto fmt = ::Opm::EclIO::OutputStream::Formatted{ false }; - const auto unif = ::Opm::EclIO::OutputStream::Unified { true }; - - { - const auto seqnum = 1; - auto rst = ::Opm::EclIO::OutputStream::Restart { - rset, seqnum, fmt, unif - }; - - rst.write("I", std::vector {1, 7, 2, 9}); - rst.write("L", std::vector {true, false, false, true}); - rst.write("S", std::vector {3.1f, 4.1f, 59.265f}); - rst.write("D", std::vector {2.71, 8.21}); - rst.write("Z", std::vector{"W1", "W2"}); - } - - { - const auto seqnum = 13; - auto rst = ::Opm::EclIO::OutputStream::Restart { - rset, seqnum, fmt, unif - }; - - rst.write("I", std::vector {35, 51, 13}); - rst.write("L", std::vector {true, true, true, false}); - rst.write("S", std::vector {17.29e-02f, 1.4142f}); - rst.write("D", std::vector {0.6931, 1.6180, 123.45e6}); - rst.write("Z", std::vector{"G1", "FIELD"}); - } - - { - const auto fname = ::Opm::EclIO::OutputStream:: - outputFileName(rset, "UNRST"); - - auto rst = ::Opm::EclIO::ERst{fname}; - - BOOST_CHECK(rst.hasReportStepNumber( 1)); - BOOST_CHECK(rst.hasReportStepNumber(13)); - - { - const auto seqnum = rst.listOfReportStepNumbers(); - const auto expect_seqnum = std::vector{1, 13}; - - BOOST_CHECK_EQUAL_COLLECTIONS(seqnum.begin(), seqnum.end(), - expect_seqnum.begin(), - expect_seqnum.end()); - } - - { - const auto vectors = rst.listOfRstArrays(13); - const auto expect_vectors = std::vector{ - Opm::EclIO::EclFile::EclEntry{"SEQNUM", Opm::EclIO::eclArrType::INTE, 1}, - Opm::EclIO::EclFile::EclEntry{"I", Opm::EclIO::eclArrType::INTE, 3}, - Opm::EclIO::EclFile::EclEntry{"L", Opm::EclIO::eclArrType::LOGI, 4}, - Opm::EclIO::EclFile::EclEntry{"S", Opm::EclIO::eclArrType::REAL, 2}, - Opm::EclIO::EclFile::EclEntry{"D", Opm::EclIO::eclArrType::DOUB, 3}, - Opm::EclIO::EclFile::EclEntry{"Z", Opm::EclIO::eclArrType::CHAR, 2}, - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(vectors.begin(), vectors.end(), - expect_vectors.begin(), - expect_vectors.end()); - } - - rst.loadReportStepNumber(13); - - { - const auto& I = rst.getRst("I", 13, 0); - const auto expect_I = std::vector{ 35, 51, 13}; - BOOST_CHECK_EQUAL_COLLECTIONS(I.begin(), I.end(), - expect_I.begin(), - expect_I.end()); - } - - { - const auto& L = rst.getRst("L", 13, 0); - const auto expect_L = std::vector { - true, true, true, false, - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(L.begin(), L.end(), - expect_L.begin(), - expect_L.end()); - } - - { - const auto& S = rst.getRst("S", 13, 0); - const auto expect_S = std::vector{ - 17.29e-02f, 1.4142f, - }; - - check_is_close(S, expect_S); - } - - { - const auto& D = rst.getRst("D", 13, 0); - const auto expect_D = std::vector{ - 0.6931, 1.6180, 123.45e6, - }; - - check_is_close(D, expect_D); - } - - { - const auto& Z = rst.getRst("Z", 13, 0); - const auto expect_Z = std::vector{ - "G1", "FIELD", // ERst trims trailing blanks - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(Z.begin(), Z.end(), - expect_Z.begin(), - expect_Z.end()); - } - } - - { - const auto seqnum = 5; // Before 13. Should overwrite 13 - auto rst = ::Opm::EclIO::OutputStream::Restart { - rset, seqnum, fmt, unif - }; - - rst.write("I", std::vector {1, 2, 3, 4}); - rst.write("L", std::vector {false, false, false, true}); - rst.write("S", std::vector {1.23e-04f, 1.234e5f, -5.4321e-9f}); - rst.write("D", std::vector {0.6931, 1.6180}); - rst.write("Z", std::vector{"HELLO", ", ", "WORLD"}); - } - - { - const auto fname = ::Opm::EclIO::OutputStream:: - outputFileName(rset, "UNRST"); - - auto rst = ::Opm::EclIO::ERst{fname}; - - BOOST_CHECK( rst.hasReportStepNumber( 1)); - BOOST_CHECK( rst.hasReportStepNumber( 5)); - BOOST_CHECK(!rst.hasReportStepNumber(13)); - - { - const auto seqnum = rst.listOfReportStepNumbers(); - const auto expect_seqnum = std::vector{1, 5}; - - BOOST_CHECK_EQUAL_COLLECTIONS(seqnum.begin(), seqnum.end(), - expect_seqnum.begin(), - expect_seqnum.end()); - } - - { - const auto vectors = rst.listOfRstArrays(5); - const auto expect_vectors = std::vector{ - Opm::EclIO::EclFile::EclEntry{"SEQNUM", Opm::EclIO::eclArrType::INTE, 1}, - Opm::EclIO::EclFile::EclEntry{"I", Opm::EclIO::eclArrType::INTE, 4}, - Opm::EclIO::EclFile::EclEntry{"L", Opm::EclIO::eclArrType::LOGI, 4}, - Opm::EclIO::EclFile::EclEntry{"S", Opm::EclIO::eclArrType::REAL, 3}, - Opm::EclIO::EclFile::EclEntry{"D", Opm::EclIO::eclArrType::DOUB, 2}, - Opm::EclIO::EclFile::EclEntry{"Z", Opm::EclIO::eclArrType::CHAR, 3}, - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(vectors.begin(), vectors.end(), - expect_vectors.begin(), - expect_vectors.end()); - } - - rst.loadReportStepNumber(5); - - { - const auto& I = rst.getRst("I", 5, 0); - const auto expect_I = std::vector{ 1, 2, 3, 4 }; - BOOST_CHECK_EQUAL_COLLECTIONS(I.begin(), I.end(), - expect_I.begin(), - expect_I.end()); - } - - { - const auto& L = rst.getRst("L", 5, 0); - const auto expect_L = std::vector { - false, false, false, true, - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(L.begin(), L.end(), - expect_L.begin(), - expect_L.end()); - } - - { - const auto& S = rst.getRst("S", 5, 0); - const auto expect_S = std::vector{ - 1.23e-04f, 1.234e5f, -5.4321e-9f, - }; - - check_is_close(S, expect_S); - } - - { - const auto& D = rst.getRst("D", 5, 0); - const auto expect_D = std::vector{ - 0.6931, 1.6180, - }; - - check_is_close(D, expect_D); - } - - { - const auto& Z = rst.getRst("Z", 5, 0); - const auto expect_Z = std::vector{ - "HELLO", ",", "WORLD", // ERst trims trailing blanks - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(Z.begin(), Z.end(), - expect_Z.begin(), - expect_Z.end()); - } - } - - { - const auto seqnum = 13; - auto rst = ::Opm::EclIO::OutputStream::Restart { - rset, seqnum, fmt, unif - }; - - rst.write("I", std::vector {35, 51, 13}); - rst.write("L", std::vector {true, true, true, false}); - rst.write("S", std::vector {17.29e-02f, 1.4142f}); - rst.write("D", std::vector {0.6931, 1.6180, 123.45e6}); - rst.write("Z", std::vector{"G1", "FIELD"}); - } - - { - const auto fname = ::Opm::EclIO::OutputStream:: - outputFileName(rset, "UNRST"); - - auto rst = ::Opm::EclIO::ERst{fname}; - - BOOST_CHECK(rst.hasReportStepNumber( 1)); - BOOST_CHECK(rst.hasReportStepNumber( 5)); - BOOST_CHECK(rst.hasReportStepNumber(13)); - - { - const auto seqnum = rst.listOfReportStepNumbers(); - const auto expect_seqnum = std::vector{1, 5, 13}; - - BOOST_CHECK_EQUAL_COLLECTIONS(seqnum.begin(), seqnum.end(), - expect_seqnum.begin(), - expect_seqnum.end()); - } - - { - const auto vectors = rst.listOfRstArrays(13); - const auto expect_vectors = std::vector{ - Opm::EclIO::EclFile::EclEntry{"SEQNUM", Opm::EclIO::eclArrType::INTE, 1}, - Opm::EclIO::EclFile::EclEntry{"I", Opm::EclIO::eclArrType::INTE, 3}, - Opm::EclIO::EclFile::EclEntry{"L", Opm::EclIO::eclArrType::LOGI, 4}, - Opm::EclIO::EclFile::EclEntry{"S", Opm::EclIO::eclArrType::REAL, 2}, - Opm::EclIO::EclFile::EclEntry{"D", Opm::EclIO::eclArrType::DOUB, 3}, - Opm::EclIO::EclFile::EclEntry{"Z", Opm::EclIO::eclArrType::CHAR, 2}, - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(vectors.begin(), vectors.end(), - expect_vectors.begin(), - expect_vectors.end()); - } - - rst.loadReportStepNumber(13); - - { - const auto& I = rst.getRst("I", 13, 0); - const auto expect_I = std::vector{ 35, 51, 13}; - BOOST_CHECK_EQUAL_COLLECTIONS(I.begin(), I.end(), - expect_I.begin(), - expect_I.end()); - } - - { - const auto& L = rst.getRst("L", 13, 0); - const auto expect_L = std::vector { - true, true, true, false, - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(L.begin(), L.end(), - expect_L.begin(), - expect_L.end()); - } - - { - const auto& S = rst.getRst("S", 13, 0); - const auto expect_S = std::vector{ - 17.29e-02f, 1.4142f, - }; - - check_is_close(S, expect_S); - } - - { - const auto& D = rst.getRst("D", 13, 0); - const auto expect_D = std::vector{ - 0.6931, 1.6180, 123.45e6, - }; - - check_is_close(D, expect_D); - } - - { - const auto& Z = rst.getRst("Z", 13, 0); - const auto expect_Z = std::vector{ - "G1", "FIELD", // ERst trims trailing blanks - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(Z.begin(), Z.end(), - expect_Z.begin(), - expect_Z.end()); - } - } -} - -BOOST_AUTO_TEST_CASE(Formatted_Separate) -{ - const auto rset = RSet("CASE.T01."); - const auto fmt = ::Opm::EclIO::OutputStream::Formatted{ true }; - const auto unif = ::Opm::EclIO::OutputStream::Unified { false }; - - { - const auto seqnum = 1; - auto rst = ::Opm::EclIO::OutputStream::Restart { - rset, seqnum, fmt, unif - }; - - rst.write("I", std::vector {1, 7, 2, 9}); - rst.write("L", std::vector {true, false, false, true}); - rst.write("S", std::vector {3.1f, 4.1f, 59.265f}); - rst.write("D", std::vector {2.71, 8.21}); - rst.write("Z", std::vector{"W1", "W2"}); - } - - { - const auto seqnum = 13; - auto rst = ::Opm::EclIO::OutputStream::Restart { - rset, seqnum, fmt, unif - }; - - rst.write("I", std::vector {35, 51, 13}); - rst.write("L", std::vector {true, true, true, false}); - rst.write("S", std::vector {17.29e-02f, 1.4142f}); - rst.write("D", std::vector {0.6931, 1.6180, 123.45e6}); - rst.write("Z", std::vector{"G1", "FIELD"}); - } - - { - using ::Opm::EclIO::OutputStream::Restart; - - const auto fname = ::Opm::EclIO::OutputStream:: - outputFileName(rset, "F0013"); - - auto rst = ::Opm::EclIO::EclFile{fname}; - - { - const auto vectors = rst.getList(); - const auto expect_vectors = std::vector{ - // No SEQNUM in separate output files - Opm::EclIO::EclFile::EclEntry{"I", Opm::EclIO::eclArrType::INTE, 3}, - Opm::EclIO::EclFile::EclEntry{"L", Opm::EclIO::eclArrType::LOGI, 4}, - Opm::EclIO::EclFile::EclEntry{"S", Opm::EclIO::eclArrType::REAL, 2}, - Opm::EclIO::EclFile::EclEntry{"D", Opm::EclIO::eclArrType::DOUB, 3}, - Opm::EclIO::EclFile::EclEntry{"Z", Opm::EclIO::eclArrType::CHAR, 2}, - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(vectors.begin(), vectors.end(), - expect_vectors.begin(), - expect_vectors.end()); - } - - rst.loadData(); - - { - const auto& I = rst.get("I"); - const auto expect_I = std::vector{ 35, 51, 13 }; - BOOST_CHECK_EQUAL_COLLECTIONS(I.begin(), I.end(), - expect_I.begin(), - expect_I.end()); - } - - { - const auto& L = rst.get("L"); - const auto expect_L = std::vector { - true, true, true, false, - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(L.begin(), L.end(), - expect_L.begin(), - expect_L.end()); - } - - { - const auto& S = rst.get("S"); - const auto expect_S = std::vector{ - 17.29e-02f, 1.4142f, - }; - - check_is_close(S, expect_S); - } - - { - const auto& D = rst.get("D"); - const auto expect_D = std::vector{ - 0.6931, 1.6180, 123.45e6, - }; - - check_is_close(D, expect_D); - } - - { - const auto& Z = rst.get("Z"); - const auto expect_Z = std::vector{ - "G1", "FIELD", // ERst trims trailing blanks - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(Z.begin(), Z.end(), - expect_Z.begin(), - expect_Z.end()); - } - } - - { - // Separate output. Step 13 should be unaffected. - const auto seqnum = 5; - auto rst = ::Opm::EclIO::OutputStream::Restart { - rset, seqnum, fmt, unif - }; - - rst.write("I", std::vector {1, 2, 3, 4}); - rst.write("L", std::vector {false, false, false, true}); - rst.write("S", std::vector {1.23e-04f, 1.234e5f, -5.4321e-9f}); - rst.write("D", std::vector {0.6931, 1.6180}); - rst.write("Z", std::vector{"HELLO", ", ", "WORLD"}); - } - - { - using ::Opm::EclIO::OutputStream::Restart; - - const auto fname = ::Opm::EclIO::OutputStream:: - outputFileName(rset, "F0005"); - - auto rst = ::Opm::EclIO::EclFile{fname}; - - { - const auto vectors = rst.getList(); - const auto expect_vectors = std::vector{ - // No SEQNUM in separate output files - Opm::EclIO::EclFile::EclEntry{"I", Opm::EclIO::eclArrType::INTE, 4}, - Opm::EclIO::EclFile::EclEntry{"L", Opm::EclIO::eclArrType::LOGI, 4}, - Opm::EclIO::EclFile::EclEntry{"S", Opm::EclIO::eclArrType::REAL, 3}, - Opm::EclIO::EclFile::EclEntry{"D", Opm::EclIO::eclArrType::DOUB, 2}, - Opm::EclIO::EclFile::EclEntry{"Z", Opm::EclIO::eclArrType::CHAR, 3}, - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(vectors.begin(), vectors.end(), - expect_vectors.begin(), - expect_vectors.end()); - } - - rst.loadData(); - - { - const auto& I = rst.get("I"); - const auto expect_I = std::vector{ 1, 2, 3, 4 }; - BOOST_CHECK_EQUAL_COLLECTIONS(I.begin(), I.end(), - expect_I.begin(), - expect_I.end()); - } - - { - const auto& L = rst.get("L"); - const auto expect_L = std::vector { - false, false, false, true, - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(L.begin(), L.end(), - expect_L.begin(), - expect_L.end()); - } - - { - const auto& S = rst.get("S"); - const auto expect_S = std::vector{ - 1.23e-04f, 1.234e5f, -5.4321e-9f, - }; - - check_is_close(S, expect_S); - } - - { - const auto& D = rst.get("D"); - const auto expect_D = std::vector{ - 0.6931, 1.6180, - }; - - check_is_close(D, expect_D); - } - - { - const auto& Z = rst.get("Z"); - const auto expect_Z = std::vector{ - "HELLO", ",", "WORLD", // ERst trims trailing blanks - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(Z.begin(), Z.end(), - expect_Z.begin(), - expect_Z.end()); - } - } - - // ------------------------------------------------------- - // Don't rewrite step 13. Output file should still exist. - // ------------------------------------------------------- - - { - using ::Opm::EclIO::OutputStream::Restart; - - const auto fname = ::Opm::EclIO::OutputStream:: - outputFileName(rset, "F0013"); - - auto rst = ::Opm::EclIO::EclFile{fname}; - - { - const auto vectors = rst.getList(); - const auto expect_vectors = std::vector{ - // No SEQNUM in separate output files. - Opm::EclIO::EclFile::EclEntry{"I", Opm::EclIO::eclArrType::INTE, 3}, - Opm::EclIO::EclFile::EclEntry{"L", Opm::EclIO::eclArrType::LOGI, 4}, - Opm::EclIO::EclFile::EclEntry{"S", Opm::EclIO::eclArrType::REAL, 2}, - Opm::EclIO::EclFile::EclEntry{"D", Opm::EclIO::eclArrType::DOUB, 3}, - Opm::EclIO::EclFile::EclEntry{"Z", Opm::EclIO::eclArrType::CHAR, 2}, - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(vectors.begin(), vectors.end(), - expect_vectors.begin(), - expect_vectors.end()); - } - - rst.loadData(); - - { - const auto& I = rst.get("I"); - const auto expect_I = std::vector{ 35, 51, 13 }; - BOOST_CHECK_EQUAL_COLLECTIONS(I.begin(), I.end(), - expect_I.begin(), - expect_I.end()); - } - - { - const auto& L = rst.get("L"); - const auto expect_L = std::vector { - true, true, true, false, - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(L.begin(), L.end(), - expect_L.begin(), - expect_L.end()); - } - - { - const auto& S = rst.get("S"); - const auto expect_S = std::vector{ - 17.29e-02f, 1.4142f, - }; - - check_is_close(S, expect_S); - } - - { - const auto& D = rst.get("D"); - const auto expect_D = std::vector{ - 0.6931, 1.6180, 123.45e6, - }; - - check_is_close(D, expect_D); - } - - { - const auto& Z = rst.get("Z"); - const auto expect_Z = std::vector{ - "G1", "FIELD", // ERst trims trailing blanks - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(Z.begin(), Z.end(), - expect_Z.begin(), - expect_Z.end()); - } - } -} - -BOOST_AUTO_TEST_SUITE_END() // Class_Restart - -// ========================================================================== - -BOOST_AUTO_TEST_SUITE(Class_RFT) - -BOOST_AUTO_TEST_CASE(Unformatted_New) -{ - using Char8 = ::Opm::EclIO::PaddedOutputString<8>; - - const auto rset = RSet("CASE"); - const auto fmt = ::Opm::EclIO::OutputStream::Formatted{ false }; - const auto exist = ::Opm::EclIO::OutputStream::RFT::OpenExisting{ false }; - - { - auto rft = ::Opm::EclIO::OutputStream::RFT { - rset, fmt, exist - }; - - rft.write("I", std::vector {1, 7, 2, 9}); - rft.write("S", std::vector {3.1f, 4.1f, 59.265f}); - rft.write("Z", std::vector { - Char8{" Hello "}, Char8{" World "} - }); - } - - { - const auto fname = ::Opm::EclIO::OutputStream:: - outputFileName(rset, "RFT"); - - auto rft = ::Opm::EclIO::EclFile{fname}; - - BOOST_CHECK(rft.hasKey("I")); - BOOST_CHECK(rft.hasKey("S")); - BOOST_CHECK(rft.hasKey("Z")); - BOOST_CHECK(!rft.hasKey("C")); - - { - const auto vectors = rft.getList(); - const auto expect_vectors = std::vector{ - Opm::EclIO::EclFile::EclEntry{"I", Opm::EclIO::eclArrType::INTE, 4}, - Opm::EclIO::EclFile::EclEntry{"S", Opm::EclIO::eclArrType::REAL, 3}, - Opm::EclIO::EclFile::EclEntry{"Z", Opm::EclIO::eclArrType::CHAR, 2}, - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(vectors.begin(), vectors.end(), - expect_vectors.begin(), - expect_vectors.end()); - } - - rft.loadData(); - - { - const auto& I = rft.get("I"); - const auto expect_I = std::vector{ 1, 7, 2, 9 }; - BOOST_CHECK_EQUAL_COLLECTIONS(I.begin(), I.end(), - expect_I.begin(), - expect_I.end()); - } - - { - const auto& S = rft.get("S"); - const auto expect_S = std::vector{ - 3.1f, 4.1f, 59.265f, - }; - - check_is_close(S, expect_S); - } - - { - const auto& Z = rft.get("Z"); - const auto expect_Z = std::vector{ - " Hello", " World" // Trailing blanks trimmed - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(Z.begin(), Z.end(), - expect_Z.begin(), expect_Z.end()); - } - } - - { - auto rft = ::Opm::EclIO::OutputStream::RFT { - rset, fmt, exist - }; - - rft.write("I2", std::vector {11, 22, 33}); - rft.write("S2", std::vector {2.71f, 828.1f, 8.218f}); - rft.write("Z2", std::vector { - Char8{"Good B"}, Char8{" ye"}, Char8{ "W0rlD" }, - }); - } - - { - const auto fname = ::Opm::EclIO::OutputStream:: - outputFileName(rset, "RFT"); - - auto rft = ::Opm::EclIO::EclFile{fname}; - - BOOST_CHECK(!rft.hasKey("I")); - BOOST_CHECK(!rft.hasKey("S")); - BOOST_CHECK(!rft.hasKey("Z")); - - BOOST_CHECK(rft.hasKey("I2")); - BOOST_CHECK(rft.hasKey("S2")); - BOOST_CHECK(rft.hasKey("Z2")); - - { - const auto vectors = rft.getList(); - const auto expect_vectors = std::vector{ - Opm::EclIO::EclFile::EclEntry{"I2", Opm::EclIO::eclArrType::INTE, 3}, - Opm::EclIO::EclFile::EclEntry{"S2", Opm::EclIO::eclArrType::REAL, 3}, - Opm::EclIO::EclFile::EclEntry{"Z2", Opm::EclIO::eclArrType::CHAR, 3}, - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(vectors.begin(), vectors.end(), - expect_vectors.begin(), - expect_vectors.end()); - } - - rft.loadData(); - - { - const auto& I = rft.get("I2"); - const auto expect_I = std::vector{ 11, 22, 33 }; - BOOST_CHECK_EQUAL_COLLECTIONS(I.begin(), I.end(), - expect_I.begin(), - expect_I.end()); - } - - { - const auto& S = rft.get("S2"); - const auto expect_S = std::vector{ - 2.71f, 828.1f, 8.218f, - }; - - check_is_close(S, expect_S); - } - - { - const auto& Z = rft.get("Z2"); - const auto expect_Z = std::vector{ - "Good B", " ye", "W0rlD" - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(Z.begin(), Z.end(), - expect_Z.begin(), expect_Z.end()); - } - } -} - -BOOST_AUTO_TEST_CASE(Unformatted_Existing) -{ - using Char8 = ::Opm::EclIO::PaddedOutputString<8>; - - const auto rset = RSet("CASE"); - const auto fmt = ::Opm::EclIO::OutputStream::Formatted{ false }; - const auto exist = ::Opm::EclIO::OutputStream::RFT::OpenExisting{ true }; - - { - auto rft = ::Opm::EclIO::OutputStream::RFT { - rset, fmt, exist - }; - - rft.write("I", std::vector {1, 7, 2, 9}); - rft.write("S", std::vector {3.1f, 4.1f, 59.265f}); - rft.write("Z", std::vector { - Char8{" Hello "}, Char8{" World "} - }); - } - - { - const auto fname = ::Opm::EclIO::OutputStream:: - outputFileName(rset, "RFT"); - - auto rft = ::Opm::EclIO::EclFile{fname}; - - BOOST_CHECK(rft.hasKey("I")); - BOOST_CHECK(rft.hasKey("S")); - BOOST_CHECK(rft.hasKey("Z")); - - BOOST_CHECK(!rft.hasKey("C")); - - { - const auto vectors = rft.getList(); - const auto expect_vectors = std::vector{ - Opm::EclIO::EclFile::EclEntry{"I", Opm::EclIO::eclArrType::INTE, 4}, - Opm::EclIO::EclFile::EclEntry{"S", Opm::EclIO::eclArrType::REAL, 3}, - Opm::EclIO::EclFile::EclEntry{"Z", Opm::EclIO::eclArrType::CHAR, 2}, - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(vectors.begin(), vectors.end(), - expect_vectors.begin(), - expect_vectors.end()); - } - - rft.loadData(); - - { - const auto& I = rft.get("I"); - const auto expect_I = std::vector{ 1, 7, 2, 9 }; - BOOST_CHECK_EQUAL_COLLECTIONS(I.begin(), I.end(), - expect_I.begin(), - expect_I.end()); - } - - { - const auto& S = rft.get("S"); - const auto expect_S = std::vector{ - 3.1f, 4.1f, 59.265f, - }; - - check_is_close(S, expect_S); - } - - { - const auto& Z = rft.get("Z"); - const auto expect_Z = std::vector{ - " Hello", " World" // Trailing blanks trimmed - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(Z.begin(), Z.end(), - expect_Z.begin(), expect_Z.end()); - } - } - - { - auto rft = ::Opm::EclIO::OutputStream::RFT { - rset, fmt, exist - }; - - rft.write("I2", std::vector {11, 22, 33}); - rft.write("S2", std::vector {2.71f, 828.1f, 8.218f}); - rft.write("Z2", std::vector { - Char8{"Good B"}, Char8{" ye"}, Char8{ "W0rlD" }, - }); - } - - { - const auto fname = ::Opm::EclIO::OutputStream:: - outputFileName(rset, "RFT"); - - auto rft = ::Opm::EclIO::EclFile{fname}; - - BOOST_CHECK(rft.hasKey("I")); - BOOST_CHECK(rft.hasKey("S")); - BOOST_CHECK(rft.hasKey("Z")); - BOOST_CHECK(rft.hasKey("I2")); - BOOST_CHECK(rft.hasKey("S2")); - BOOST_CHECK(rft.hasKey("Z2")); - - BOOST_CHECK(!rft.hasKey("C")); - - { - const auto vectors = rft.getList(); - const auto expect_vectors = std::vector{ - Opm::EclIO::EclFile::EclEntry{"I", Opm::EclIO::eclArrType::INTE, 4}, - Opm::EclIO::EclFile::EclEntry{"S", Opm::EclIO::eclArrType::REAL, 3}, - Opm::EclIO::EclFile::EclEntry{"Z", Opm::EclIO::eclArrType::CHAR, 2}, - Opm::EclIO::EclFile::EclEntry{"I2", Opm::EclIO::eclArrType::INTE, 3}, - Opm::EclIO::EclFile::EclEntry{"S2", Opm::EclIO::eclArrType::REAL, 3}, - Opm::EclIO::EclFile::EclEntry{"Z2", Opm::EclIO::eclArrType::CHAR, 3}, - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(vectors.begin(), vectors.end(), - expect_vectors.begin(), - expect_vectors.end()); - } - - rft.loadData(); - - { - const auto& I = rft.get("I"); - const auto expect_I = std::vector{ 1, 7, 2, 9 }; - BOOST_CHECK_EQUAL_COLLECTIONS(I.begin(), I.end(), - expect_I.begin(), - expect_I.end()); - } - - { - const auto& S = rft.get("S"); - const auto expect_S = std::vector{ - 3.1f, 4.1f, 59.265f, - }; - - check_is_close(S, expect_S); - } - - { - const auto& Z = rft.get("Z"); - const auto expect_Z = std::vector{ - " Hello", " World" // Trailing blanks trimmed - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(Z.begin(), Z.end(), - expect_Z.begin(), expect_Z.end()); - } - { - const auto& I = rft.get("I2"); - const auto expect_I = std::vector{ 11, 22, 33 }; - BOOST_CHECK_EQUAL_COLLECTIONS(I.begin(), I.end(), - expect_I.begin(), - expect_I.end()); - } - - { - const auto& S = rft.get("S2"); - const auto expect_S = std::vector{ - 2.71f, 828.1f, 8.218f, - }; - - check_is_close(S, expect_S); - } - - { - const auto& Z = rft.get("Z2"); - const auto expect_Z = std::vector{ - "Good B", " ye", "W0rlD" - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(Z.begin(), Z.end(), - expect_Z.begin(), expect_Z.end()); - } - } -} - -BOOST_AUTO_TEST_CASE(Formatted_New) -{ - using Char8 = ::Opm::EclIO::PaddedOutputString<8>; - - const auto rset = RSet("CASE"); - const auto fmt = ::Opm::EclIO::OutputStream::Formatted{ true }; - const auto exist = ::Opm::EclIO::OutputStream::RFT::OpenExisting{ false }; - - { - auto rft = ::Opm::EclIO::OutputStream::RFT { - rset, fmt, exist - }; - - rft.write("I", std::vector {1, 7, 2, 9}); - rft.write("S", std::vector {3.1f, 4.1f, 59.265f}); - rft.write("Z", std::vector { - Char8{" Hello "}, Char8{" World "} - }); - } - - { - const auto fname = ::Opm::EclIO::OutputStream:: - outputFileName(rset, "FRFT"); - - auto rft = ::Opm::EclIO::EclFile{fname}; - - BOOST_CHECK(rft.hasKey("I")); - BOOST_CHECK(rft.hasKey("S")); - BOOST_CHECK(rft.hasKey("Z")); - BOOST_CHECK(!rft.hasKey("C")); - - { - const auto vectors = rft.getList(); - const auto expect_vectors = std::vector{ - Opm::EclIO::EclFile::EclEntry{"I", Opm::EclIO::eclArrType::INTE, 4}, - Opm::EclIO::EclFile::EclEntry{"S", Opm::EclIO::eclArrType::REAL, 3}, - Opm::EclIO::EclFile::EclEntry{"Z", Opm::EclIO::eclArrType::CHAR, 2}, - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(vectors.begin(), vectors.end(), - expect_vectors.begin(), - expect_vectors.end()); - } - - rft.loadData(); - - { - const auto& I = rft.get("I"); - const auto expect_I = std::vector{ 1, 7, 2, 9 }; - BOOST_CHECK_EQUAL_COLLECTIONS(I.begin(), I.end(), - expect_I.begin(), - expect_I.end()); - } - - { - const auto& S = rft.get("S"); - const auto expect_S = std::vector{ - 3.1f, 4.1f, 59.265f, - }; - - check_is_close(S, expect_S); - } - - { - const auto& Z = rft.get("Z"); - const auto expect_Z = std::vector{ - " Hello", " World" // Trailing blanks trimmed - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(Z.begin(), Z.end(), - expect_Z.begin(), expect_Z.end()); - } - } - - { - auto rft = ::Opm::EclIO::OutputStream::RFT { - rset, fmt, exist - }; - - rft.write("I2", std::vector {11, 22, 33}); - rft.write("S2", std::vector {2.71f, 828.1f, 8.218f}); - rft.write("Z2", std::vector { - Char8{"Good B"}, Char8{" ye"}, Char8{ "W0rlD" }, - }); - } - - { - const auto fname = ::Opm::EclIO::OutputStream:: - outputFileName(rset, "FRFT"); - - auto rft = ::Opm::EclIO::EclFile{fname}; - - BOOST_CHECK(!rft.hasKey("I")); - BOOST_CHECK(!rft.hasKey("S")); - BOOST_CHECK(!rft.hasKey("Z")); - - BOOST_CHECK(rft.hasKey("I2")); - BOOST_CHECK(rft.hasKey("S2")); - BOOST_CHECK(rft.hasKey("Z2")); - - { - const auto vectors = rft.getList(); - const auto expect_vectors = std::vector{ - Opm::EclIO::EclFile::EclEntry{"I2", Opm::EclIO::eclArrType::INTE, 3}, - Opm::EclIO::EclFile::EclEntry{"S2", Opm::EclIO::eclArrType::REAL, 3}, - Opm::EclIO::EclFile::EclEntry{"Z2", Opm::EclIO::eclArrType::CHAR, 3}, - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(vectors.begin(), vectors.end(), - expect_vectors.begin(), - expect_vectors.end()); - } - - rft.loadData(); - - { - const auto& I = rft.get("I2"); - const auto expect_I = std::vector{ 11, 22, 33 }; - BOOST_CHECK_EQUAL_COLLECTIONS(I.begin(), I.end(), - expect_I.begin(), - expect_I.end()); - } - - { - const auto& S = rft.get("S2"); - const auto expect_S = std::vector{ - 2.71f, 828.1f, 8.218f, - }; - - check_is_close(S, expect_S); - } - - { - const auto& Z = rft.get("Z2"); - const auto expect_Z = std::vector{ - "Good B", " ye", "W0rlD" - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(Z.begin(), Z.end(), - expect_Z.begin(), expect_Z.end()); - } - } -} - -BOOST_AUTO_TEST_CASE(Formatted_Existing) -{ - using Char8 = ::Opm::EclIO::PaddedOutputString<8>; - - const auto rset = RSet("CASE"); - const auto fmt = ::Opm::EclIO::OutputStream::Formatted{ true }; - const auto exist = ::Opm::EclIO::OutputStream::RFT::OpenExisting{ true }; - - { - auto rft = ::Opm::EclIO::OutputStream::RFT { - rset, fmt, exist - }; - - rft.write("I", std::vector {1, 7, 2, 9}); - rft.write("S", std::vector {3.1f, 4.1f, 59.265f}); - rft.write("Z", std::vector { - Char8{" Hello "}, Char8{" World "} - }); - } - - { - const auto fname = ::Opm::EclIO::OutputStream:: - outputFileName(rset, "FRFT"); - - auto rft = ::Opm::EclIO::EclFile{fname}; - - BOOST_CHECK(rft.hasKey("I")); - BOOST_CHECK(rft.hasKey("S")); - BOOST_CHECK(rft.hasKey("Z")); - - BOOST_CHECK(!rft.hasKey("C")); - - { - const auto vectors = rft.getList(); - const auto expect_vectors = std::vector{ - Opm::EclIO::EclFile::EclEntry{"I", Opm::EclIO::eclArrType::INTE, 4}, - Opm::EclIO::EclFile::EclEntry{"S", Opm::EclIO::eclArrType::REAL, 3}, - Opm::EclIO::EclFile::EclEntry{"Z", Opm::EclIO::eclArrType::CHAR, 2}, - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(vectors.begin(), vectors.end(), - expect_vectors.begin(), - expect_vectors.end()); - } - - rft.loadData(); - - { - const auto& I = rft.get("I"); - const auto expect_I = std::vector{ 1, 7, 2, 9 }; - BOOST_CHECK_EQUAL_COLLECTIONS(I.begin(), I.end(), - expect_I.begin(), - expect_I.end()); - } - - { - const auto& S = rft.get("S"); - const auto expect_S = std::vector{ - 3.1f, 4.1f, 59.265f, - }; - - check_is_close(S, expect_S); - } - - { - const auto& Z = rft.get("Z"); - const auto expect_Z = std::vector{ - " Hello", " World" // Trailing blanks trimmed - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(Z.begin(), Z.end(), - expect_Z.begin(), expect_Z.end()); - } - } - - { - auto rft = ::Opm::EclIO::OutputStream::RFT { - rset, fmt, exist - }; - - rft.write("I2", std::vector {11, 22, 33}); - rft.write("S2", std::vector {2.71f, 828.1f, 8.218f}); - rft.write("Z2", std::vector { - Char8{"Good B"}, Char8{" ye"}, Char8{ "W0rlD" }, - }); - } - - { - const auto fname = ::Opm::EclIO::OutputStream:: - outputFileName(rset, "FRFT"); - - auto rft = ::Opm::EclIO::EclFile{fname}; - - BOOST_CHECK(rft.hasKey("I")); - BOOST_CHECK(rft.hasKey("S")); - BOOST_CHECK(rft.hasKey("Z")); - BOOST_CHECK(rft.hasKey("I2")); - BOOST_CHECK(rft.hasKey("S2")); - BOOST_CHECK(rft.hasKey("Z2")); - - BOOST_CHECK(!rft.hasKey("C")); - - { - const auto vectors = rft.getList(); - const auto expect_vectors = std::vector{ - Opm::EclIO::EclFile::EclEntry{"I", Opm::EclIO::eclArrType::INTE, 4}, - Opm::EclIO::EclFile::EclEntry{"S", Opm::EclIO::eclArrType::REAL, 3}, - Opm::EclIO::EclFile::EclEntry{"Z", Opm::EclIO::eclArrType::CHAR, 2}, - Opm::EclIO::EclFile::EclEntry{"I2", Opm::EclIO::eclArrType::INTE, 3}, - Opm::EclIO::EclFile::EclEntry{"S2", Opm::EclIO::eclArrType::REAL, 3}, - Opm::EclIO::EclFile::EclEntry{"Z2", Opm::EclIO::eclArrType::CHAR, 3}, - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(vectors.begin(), vectors.end(), - expect_vectors.begin(), - expect_vectors.end()); - } - - rft.loadData(); - - { - const auto& I = rft.get("I"); - const auto expect_I = std::vector{ 1, 7, 2, 9 }; - BOOST_CHECK_EQUAL_COLLECTIONS(I.begin(), I.end(), - expect_I.begin(), - expect_I.end()); - } - - { - const auto& S = rft.get("S"); - const auto expect_S = std::vector{ - 3.1f, 4.1f, 59.265f, - }; - - check_is_close(S, expect_S); - } - - { - const auto& Z = rft.get("Z"); - const auto expect_Z = std::vector{ - " Hello", " World" // Trailing blanks trimmed - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(Z.begin(), Z.end(), - expect_Z.begin(), expect_Z.end()); - } - { - const auto& I = rft.get("I2"); - const auto expect_I = std::vector{ 11, 22, 33 }; - BOOST_CHECK_EQUAL_COLLECTIONS(I.begin(), I.end(), - expect_I.begin(), - expect_I.end()); - } - - { - const auto& S = rft.get("S2"); - const auto expect_S = std::vector{ - 2.71f, 828.1f, 8.218f, - }; - - check_is_close(S, expect_S); - } - - { - const auto& Z = rft.get("Z2"); - const auto expect_Z = std::vector{ - "Good B", " ye", "W0rlD" - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(Z.begin(), Z.end(), - expect_Z.begin(), expect_Z.end()); - } - } -} - -BOOST_AUTO_TEST_SUITE_END() // Class_RFT - -// ========================================================================== - -BOOST_AUTO_TEST_SUITE(Class_SummarySpecification) - -namespace { - std::time_t advance(const std::time_t tp, const double sec) - { - using namespace std::chrono; - - using TP = time_point; - using DoubSec = duration; - - const auto t = system_clock::from_time_t(tp) + - duration_cast(DoubSec(sec)); - - return system_clock::to_time_t(t); - } - - std::time_t makeUTCTime(const std::tm& timePoint) - { - auto tp = timePoint; // Mutable copy. - const auto ltime = std::mktime(&tp); - auto tmval = *std::gmtime(<ime); // Mutable. - - // offset = ltime - tmval - // == #seconds by which 'ltime' is AHEAD of tmval. - const auto offset = - std::difftime(ltime, std::mktime(&tmval)); - - // Advance 'ltime' by 'offset' so that std::gmtime(return value) will - // have the same broken-down elements as 'tp'. - return advance(ltime, offset); - } - - std::string noWGName() - { - return ":+:+:+:+"; - } - - int noNum() { return 0; } - - Opm::EclIO::OutputStream::SummarySpecification::StartTime - start(const int year, const int month, const int day, - const int hour, const int minute, const int second) - { - using std::chrono::system_clock; - - auto timepoint = std::tm {}; - - timepoint.tm_sec = second; - timepoint.tm_min = minute; - timepoint.tm_hour = hour; - timepoint.tm_mday = day; - timepoint.tm_mon = month - 1; - timepoint.tm_year = year - 1900; - - return system_clock::from_time_t(makeUTCTime(timepoint)); - } - - Opm::EclIO::OutputStream::SummarySpecification::RestartSpecification - noRestart() - { - return { "", -1 }; - } - - Opm::EclIO::OutputStream::SummarySpecification::RestartSpecification - restartedSimulation() - { - // 28 characters = 3x8 + 4 - return { "BASE-RUN-WITH-LONG-CASE-NAME", 123 }; - } - - Opm::EclIO::OutputStream::SummarySpecification::RestartSpecification - restartedSimulationTooLongBasename() - { - return { std::string(73, 'X'), 123 }; - } - - Opm::EclIO::OutputStream::SummarySpecification::Parameters - summaryParameters() - { - auto prm = Opm::EclIO::OutputStream:: - SummarySpecification::Parameters{}; - - prm.add("TIME", noWGName(), noNum(), "DAYS"); - prm.add("WBHP", "PROD01", noNum(), "BARSA"); - prm.add("GGOR", "N-PROD", noNum(), "SM3/SM3"); - prm.add("BGSAT", noWGName(), 523, ""); - - return prm; - } -} // Anonymous - -BOOST_AUTO_TEST_CASE(Unformatted_Base) -{ - using SMSpec = ::Opm::EclIO::OutputStream::SummarySpecification; - - const auto rset = RSet("CASE"); - const auto fmt = ::Opm::EclIO::OutputStream::Formatted{ false }; - const auto cartDims = std::array{ 46, 112, 22 }; // Norne dimensions - - { - using UConv = SMSpec::UnitConvention; - - // Invalid unit convention - const auto uconv = static_cast(1729); - - BOOST_CHECK_THROW(SMSpec(rset, fmt, uconv, cartDims, noRestart(), - start(2019, 10, 1, 12, 34, 56)), - std::invalid_argument); - } - - // ========================= METRIC ======================= - { - const auto uconv = SMSpec::UnitConvention::Metric; - - auto smspec = SMSpec { - rset, fmt, uconv, cartDims, noRestart(), - start(2019, 10, 1, 12, 34, 56) - }; - - smspec.write(summaryParameters()); - } - - { - const auto fname = ::Opm::EclIO::OutputStream:: - outputFileName(rset, "SMSPEC"); - - auto smspec = ::Opm::EclIO::EclFile{fname}; - - //BOOST_CHECK_MESSAGE(! smspec.hasKey("RESTART"), "SMSPEC File must NOT have 'RESTART'"); - - { - const auto vectors = smspec.getList(); - const auto expect_vectors = std::vector{ - Opm::EclIO::EclFile::EclEntry{"INTEHEAD", Opm::EclIO::eclArrType::INTE, 2}, - Opm::EclIO::EclFile::EclEntry{"RESTART", Opm::EclIO::eclArrType::CHAR, 9}, - Opm::EclIO::EclFile::EclEntry{"DIMENS", Opm::EclIO::eclArrType::INTE, 6}, - Opm::EclIO::EclFile::EclEntry{"KEYWORDS", Opm::EclIO::eclArrType::CHAR, 4}, - Opm::EclIO::EclFile::EclEntry{"WGNAMES", Opm::EclIO::eclArrType::CHAR, 4}, - Opm::EclIO::EclFile::EclEntry{"NUMS", Opm::EclIO::eclArrType::INTE, 4}, - Opm::EclIO::EclFile::EclEntry{"UNITS", Opm::EclIO::eclArrType::CHAR, 4}, - Opm::EclIO::EclFile::EclEntry{"STARTDAT", Opm::EclIO::eclArrType::INTE, 6}, - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(vectors.begin(), vectors.end(), - expect_vectors.begin(), - expect_vectors.end()); - } - - smspec.loadData(); - - { - const auto& Ih = smspec.get("INTEHEAD"); - const auto expect = std::vector{ 1, 100 }; - BOOST_CHECK_EQUAL_COLLECTIONS(Ih.begin(), Ih.end(), - expect.begin(), - expect.end()); - } - - { - const auto& D = smspec.get("DIMENS"); - const auto expect = std::vector { - 4, 46, 112, 22, 0, -1 - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(D.begin(), D.end(), - expect.begin(), expect.end()); - } - - { - const auto& K = smspec.get("KEYWORDS"); - const auto expect = std::vector { - "TIME", "WBHP", "GGOR", "BGSAT" - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(K.begin(), K.end(), - expect.begin(), expect.end()); - } - - { - const auto& W = smspec.get("WGNAMES"); - const auto expect = std::vector { - ":+:+:+:+", "PROD01", "N-PROD", ":+:+:+:+" - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(W.begin(), W.end(), - expect.begin(), expect.end()); - } - - { - const auto& N = smspec.get("NUMS"); - const auto expect = std::vector { 0, 0, 0, 523 }; - - BOOST_CHECK_EQUAL_COLLECTIONS(N.begin(), N.end(), - expect.begin(), expect.end()); - } - - { - const auto& U = smspec.get("UNITS"); - const auto expect = std::vector { - "DAYS", "BARSA", "SM3/SM3", "" - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(U.begin(), U.end(), - expect.begin(), expect.end()); - } - - { - const auto& S = smspec.get("STARTDAT"); - const auto expect = std::vector { - 1, 10, 2019, 12, 34, - 56 * 1000 * 1000 - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(S.begin(), S.end(), - expect.begin(), expect.end()); - } - } - - // ========================= FIELD ======================= - { - const auto uconv = SMSpec::UnitConvention::Field; - - auto smspec = SMSpec { - rset, fmt, uconv, cartDims, noRestart(), - start(1970, 1, 1, 0, 0, 0) - }; - - smspec.write(summaryParameters()); - } - - { - const auto fname = ::Opm::EclIO::OutputStream:: - outputFileName(rset, "SMSPEC"); - - auto smspec = ::Opm::EclIO::EclFile{fname}; - - { - const auto vectors = smspec.getList(); - const auto expect_vectors = std::vector{ - Opm::EclIO::EclFile::EclEntry{"INTEHEAD", Opm::EclIO::eclArrType::INTE, 2}, - Opm::EclIO::EclFile::EclEntry{"RESTART", Opm::EclIO::eclArrType::CHAR, 9}, - Opm::EclIO::EclFile::EclEntry{"DIMENS", Opm::EclIO::eclArrType::INTE, 6}, - Opm::EclIO::EclFile::EclEntry{"KEYWORDS", Opm::EclIO::eclArrType::CHAR, 4}, - Opm::EclIO::EclFile::EclEntry{"WGNAMES", Opm::EclIO::eclArrType::CHAR, 4}, - Opm::EclIO::EclFile::EclEntry{"NUMS", Opm::EclIO::eclArrType::INTE, 4}, - Opm::EclIO::EclFile::EclEntry{"UNITS", Opm::EclIO::eclArrType::CHAR, 4}, - Opm::EclIO::EclFile::EclEntry{"STARTDAT", Opm::EclIO::eclArrType::INTE, 6}, - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(vectors.begin(), vectors.end(), - expect_vectors.begin(), - expect_vectors.end()); - } - - smspec.loadData(); - - { - const auto& Ih = smspec.get("INTEHEAD"); - const auto expect = std::vector{ 2, 100 }; - BOOST_CHECK_EQUAL_COLLECTIONS(Ih.begin(), Ih.end(), - expect.begin(), - expect.end()); - } - - { - const auto& D = smspec.get("DIMENS"); - const auto expect = std::vector { - 4, 46, 112, 22, 0, -1 - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(D.begin(), D.end(), - expect.begin(), expect.end()); - } - - { - const auto& K = smspec.get("KEYWORDS"); - const auto expect = std::vector { - "TIME", "WBHP", "GGOR", "BGSAT" - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(K.begin(), K.end(), - expect.begin(), expect.end()); - } - - { - const auto& W = smspec.get("WGNAMES"); - const auto expect = std::vector { - ":+:+:+:+", "PROD01", "N-PROD", ":+:+:+:+" - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(W.begin(), W.end(), - expect.begin(), expect.end()); - } - - { - const auto& N = smspec.get("NUMS"); - const auto expect = std::vector { 0, 0, 0, 523 }; - - BOOST_CHECK_EQUAL_COLLECTIONS(N.begin(), N.end(), - expect.begin(), expect.end()); - } - - { - const auto& U = smspec.get("UNITS"); - const auto expect = std::vector { - // (!) (!) - "DAYS", "BARSA", "SM3/SM3", "" - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(U.begin(), U.end(), - expect.begin(), expect.end()); - } - - { - const auto& S = smspec.get("STARTDAT"); - const auto expect = std::vector { - 1, 1, 1970, 0, 0, 0 - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(S.begin(), S.end(), - expect.begin(), expect.end()); - } - } - - // ========================= LAB ======================= - { - const auto uconv = SMSpec::UnitConvention::Lab; - - auto smspec = SMSpec { - rset, fmt, uconv, cartDims, noRestart(), - start(2018, 12, 24, 17, 0, 0) - }; - - smspec.write(summaryParameters()); - } - - { - const auto fname = ::Opm::EclIO::OutputStream:: - outputFileName(rset, "SMSPEC"); - - auto smspec = ::Opm::EclIO::EclFile{fname}; - - { - const auto vectors = smspec.getList(); - const auto expect_vectors = std::vector{ - Opm::EclIO::EclFile::EclEntry{"INTEHEAD", Opm::EclIO::eclArrType::INTE, 2}, - Opm::EclIO::EclFile::EclEntry{"RESTART", Opm::EclIO::eclArrType::CHAR, 9}, - Opm::EclIO::EclFile::EclEntry{"DIMENS", Opm::EclIO::eclArrType::INTE, 6}, - Opm::EclIO::EclFile::EclEntry{"KEYWORDS", Opm::EclIO::eclArrType::CHAR, 4}, - Opm::EclIO::EclFile::EclEntry{"WGNAMES", Opm::EclIO::eclArrType::CHAR, 4}, - Opm::EclIO::EclFile::EclEntry{"NUMS", Opm::EclIO::eclArrType::INTE, 4}, - Opm::EclIO::EclFile::EclEntry{"UNITS", Opm::EclIO::eclArrType::CHAR, 4}, - Opm::EclIO::EclFile::EclEntry{"STARTDAT", Opm::EclIO::eclArrType::INTE, 6}, - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(vectors.begin(), vectors.end(), - expect_vectors.begin(), - expect_vectors.end()); - } - - smspec.loadData(); - - { - const auto& Ih = smspec.get("INTEHEAD"); - const auto expect = std::vector{ 3, 100 }; - BOOST_CHECK_EQUAL_COLLECTIONS(Ih.begin(), Ih.end(), - expect.begin(), - expect.end()); - } - - { - const auto& D = smspec.get("DIMENS"); - const auto expect = std::vector { - 4, 46, 112, 22, 0, -1 - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(D.begin(), D.end(), - expect.begin(), expect.end()); - } - - { - const auto& K = smspec.get("KEYWORDS"); - const auto expect = std::vector { - "TIME", "WBHP", "GGOR", "BGSAT" - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(K.begin(), K.end(), - expect.begin(), expect.end()); - } - - { - const auto& W = smspec.get("WGNAMES"); - const auto expect = std::vector { - ":+:+:+:+", "PROD01", "N-PROD", ":+:+:+:+" - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(W.begin(), W.end(), - expect.begin(), expect.end()); - } - - { - const auto& N = smspec.get("NUMS"); - const auto expect = std::vector { 0, 0, 0, 523 }; - - BOOST_CHECK_EQUAL_COLLECTIONS(N.begin(), N.end(), - expect.begin(), expect.end()); - } - - { - const auto& U = smspec.get("UNITS"); - const auto expect = std::vector { - // (!) (!) - "DAYS", "BARSA", "SM3/SM3", "" - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(U.begin(), U.end(), - expect.begin(), expect.end()); - } - - { - const auto& S = smspec.get("STARTDAT"); - const auto expect = std::vector { - 24, 12, 2018, 17, 0, 0 - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(S.begin(), S.end(), - expect.begin(), expect.end()); - } - } - - // ========================= PVT-M ======================= - { - const auto uconv = SMSpec::UnitConvention::Pvt_M; - - auto smspec = SMSpec { - rset, fmt, uconv, cartDims, noRestart(), - start(1983, 1, 1, 1, 2, 3) - }; - - smspec.write(summaryParameters()); - } - - { - const auto fname = ::Opm::EclIO::OutputStream:: - outputFileName(rset, "SMSPEC"); - - auto smspec = ::Opm::EclIO::EclFile{fname}; - - { - const auto vectors = smspec.getList(); - const auto expect_vectors = std::vector{ - Opm::EclIO::EclFile::EclEntry{"INTEHEAD", Opm::EclIO::eclArrType::INTE, 2}, - Opm::EclIO::EclFile::EclEntry{"RESTART", Opm::EclIO::eclArrType::CHAR, 9}, - Opm::EclIO::EclFile::EclEntry{"DIMENS", Opm::EclIO::eclArrType::INTE, 6}, - Opm::EclIO::EclFile::EclEntry{"KEYWORDS", Opm::EclIO::eclArrType::CHAR, 4}, - Opm::EclIO::EclFile::EclEntry{"WGNAMES", Opm::EclIO::eclArrType::CHAR, 4}, - Opm::EclIO::EclFile::EclEntry{"NUMS", Opm::EclIO::eclArrType::INTE, 4}, - Opm::EclIO::EclFile::EclEntry{"UNITS", Opm::EclIO::eclArrType::CHAR, 4}, - Opm::EclIO::EclFile::EclEntry{"STARTDAT", Opm::EclIO::eclArrType::INTE, 6}, - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(vectors.begin(), vectors.end(), - expect_vectors.begin(), - expect_vectors.end()); - } - - smspec.loadData(); - - { - const auto& Ih = smspec.get("INTEHEAD"); - const auto expect = std::vector{ 4, 100 }; - BOOST_CHECK_EQUAL_COLLECTIONS(Ih.begin(), Ih.end(), - expect.begin(), - expect.end()); - } - - { - const auto& D = smspec.get("DIMENS"); - const auto expect = std::vector { - 4, 46, 112, 22, 0, -1 - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(D.begin(), D.end(), - expect.begin(), expect.end()); - } - - { - const auto& K = smspec.get("KEYWORDS"); - const auto expect = std::vector { - "TIME", "WBHP", "GGOR", "BGSAT" - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(K.begin(), K.end(), - expect.begin(), expect.end()); - } - - { - const auto& W = smspec.get("WGNAMES"); - const auto expect = std::vector { - ":+:+:+:+", "PROD01", "N-PROD", ":+:+:+:+" - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(W.begin(), W.end(), - expect.begin(), expect.end()); - } - - { - const auto& N = smspec.get("NUMS"); - const auto expect = std::vector { 0, 0, 0, 523 }; - - BOOST_CHECK_EQUAL_COLLECTIONS(N.begin(), N.end(), - expect.begin(), expect.end()); - } - - { - const auto& U = smspec.get("UNITS"); - const auto expect = std::vector { - // (!) (!) - "DAYS", "BARSA", "SM3/SM3", "" - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(U.begin(), U.end(), - expect.begin(), expect.end()); - } - - { - const auto& S = smspec.get("STARTDAT"); - const auto expect = std::vector { - 1, 1, 1983, 1, 2, 3 * 1000 * 1000 - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(S.begin(), S.end(), - expect.begin(), expect.end()); - } - } -} - -BOOST_AUTO_TEST_CASE(Formatted_Restarted) -{ - using SMSpec = ::Opm::EclIO::OutputStream::SummarySpecification; - - const auto rset = RSet("CASE"); - const auto fmt = ::Opm::EclIO::OutputStream::Formatted{ true }; - const auto cartDims = std::array{ 46, 112, 22 }; // Norne dimensions - - // === Restart root name too long ========================= - { - using UConv = SMSpec::UnitConvention; - - auto smspec = SMSpec { - rset, fmt, UConv::Pvt_M, cartDims, - restartedSimulationTooLongBasename(), - start(2019, 10, 1, 12, 34, 56) - }; - - // Should *NOT* write RESTART vector (name too long). - smspec.write(summaryParameters()); - } - - { - const auto fname = ::Opm::EclIO::OutputStream:: - outputFileName(rset, "FSMSPEC"); - - auto smspec = ::Opm::EclIO::EclFile{fname}; - -#if 0 - BOOST_CHECK_MESSAGE(! smspec.hasKey("RESTART"), - "SMSPEC file must NOT have RESTART " - "data if root name is too long"); -#endif - } - - // ========================= METRIC ======================= - { - const auto uconv = SMSpec::UnitConvention::Metric; - - auto smspec = SMSpec { - rset, fmt, uconv, cartDims, restartedSimulation(), - start(2019, 10, 1, 12, 34, 56) - }; - - smspec.write(summaryParameters()); - } - - { - const auto fname = ::Opm::EclIO::OutputStream:: - outputFileName(rset, "FSMSPEC"); - - auto smspec = ::Opm::EclIO::EclFile{fname}; - - { - const auto vectors = smspec.getList(); - const auto expect_vectors = std::vector{ - Opm::EclIO::EclFile::EclEntry{"INTEHEAD", Opm::EclIO::eclArrType::INTE, 2}, - Opm::EclIO::EclFile::EclEntry{"RESTART", Opm::EclIO::eclArrType::CHAR, 9}, - Opm::EclIO::EclFile::EclEntry{"DIMENS", Opm::EclIO::eclArrType::INTE, 6}, - Opm::EclIO::EclFile::EclEntry{"KEYWORDS", Opm::EclIO::eclArrType::CHAR, 4}, - Opm::EclIO::EclFile::EclEntry{"WGNAMES", Opm::EclIO::eclArrType::CHAR, 4}, - Opm::EclIO::EclFile::EclEntry{"NUMS", Opm::EclIO::eclArrType::INTE, 4}, - Opm::EclIO::EclFile::EclEntry{"UNITS", Opm::EclIO::eclArrType::CHAR, 4}, - Opm::EclIO::EclFile::EclEntry{"STARTDAT", Opm::EclIO::eclArrType::INTE, 6}, - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(vectors.begin(), vectors.end(), - expect_vectors.begin(), - expect_vectors.end()); - } - - smspec.loadData(); - - { - const auto& Ih = smspec.get("INTEHEAD"); - const auto expect = std::vector{ 1, 100 }; - BOOST_CHECK_EQUAL_COLLECTIONS(Ih.begin(), Ih.end(), - expect.begin(), - expect.end()); - } - - { - const auto& R = smspec.get("RESTART"); - const auto expect = std::vector { - "BASE-RUN", "-WITH-LO", "NG-CASE-", // 0 .. 2 - "NAME" , "" , "" , // 3 .. 5 - "" , "" , "" , // 6 .. 8 - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(R.begin(), R.end(), - expect.begin(), expect.end()); - } - - { - const auto& D = smspec.get("DIMENS"); - const auto expect = std::vector { - 4, 46, 112, 22, 0, 123 - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(D.begin(), D.end(), - expect.begin(), expect.end()); - } - - { - const auto& K = smspec.get("KEYWORDS"); - const auto expect = std::vector { - "TIME", "WBHP", "GGOR", "BGSAT" - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(K.begin(), K.end(), - expect.begin(), expect.end()); - } - - { - const auto& W = smspec.get("WGNAMES"); - const auto expect = std::vector { - ":+:+:+:+", "PROD01", "N-PROD", ":+:+:+:+" - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(W.begin(), W.end(), - expect.begin(), expect.end()); - } - - { - const auto& N = smspec.get("NUMS"); - const auto expect = std::vector { 0, 0, 0, 523 }; - - BOOST_CHECK_EQUAL_COLLECTIONS(N.begin(), N.end(), - expect.begin(), expect.end()); - } - - { - const auto& U = smspec.get("UNITS"); - const auto expect = std::vector { - "DAYS", "BARSA", "SM3/SM3", "" - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(U.begin(), U.end(), - expect.begin(), expect.end()); - } - - { - const auto& S = smspec.get("STARTDAT"); - const auto expect = std::vector { - 1, 10, 2019, 12, 34, - 56 * 1000 * 1000 - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(S.begin(), S.end(), - expect.begin(), expect.end()); - } - } -} - -BOOST_AUTO_TEST_SUITE_END() // Class_SummarySpecification diff --git a/ThirdParty/custom-opm-common/opm-common/tests/test_PaddedOutputString.cpp b/ThirdParty/custom-opm-common/opm-common/tests/test_PaddedOutputString.cpp deleted file mode 100644 index aa10175f53..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/test_PaddedOutputString.cpp +++ /dev/null @@ -1,107 +0,0 @@ -#define BOOST_TEST_MODULE Padded_Output_String - -#include - -#include -#include - -// Convenience alias. -template -using PadString = ::Opm::EclIO::PaddedOutputString; - -// ===================================================================== - -BOOST_AUTO_TEST_SUITE(PadString8) - -BOOST_AUTO_TEST_CASE (Basic_Operations) -{ - // Default Constructor - { - const auto s = PadString<8>{}; - - BOOST_CHECK_EQUAL(s.c_str(), std::string(8, ' ')); - } - - // Construct from Constant String - { - const auto s = PadString<8>{"Inj-1"}; - - BOOST_CHECK_EQUAL(s.c_str(), std::string{"Inj-1 "}); - } - - // Copy Construction - { - const auto s1 = PadString<8>{"Inj-1"}; - const auto s2 = s1; - - BOOST_CHECK_EQUAL(s2.c_str(), std::string{"Inj-1 "}); - } - - // Move Construction - { - auto s1 = PadString<8>{"Inj-1"}; - const auto s2 = std::move(s1); - - BOOST_CHECK_EQUAL(s2.c_str(), std::string{"Inj-1 "}); - } - - // Assignment Operator - { - const auto s1 = PadString<8>{"Inj-1"}; - auto s2 = PadString<8>{"Prod-2"}; - - s2 = s1; - BOOST_CHECK_EQUAL(s2.c_str(), std::string{"Inj-1 "}); - } - - // Move Assignment Operator - { - auto s1 = PadString<8>{"Inj-1"}; - auto s2 = PadString<8>{"Prod-2"}; - - s2 = std::move(s1); - BOOST_CHECK_EQUAL(s2.c_str(), std::string{"Inj-1 "}); - } - - // Assign std::string - { - auto s = PadString<8>{"@Hi Hoo@"}; - - s = "Prod-2"; - BOOST_CHECK_EQUAL(s.c_str(), std::string{"Prod-2 "}); - } -} - -BOOST_AUTO_TEST_CASE (String_Shortening) -{ - // Construct from string of more than N characters - { - const auto s = PadString<10>{ - "String too long" - }; - - BOOST_CHECK_EQUAL(s.c_str(), std::string{"String too"}); - } - - // Assign string of more than N characters - { - auto s = PadString<11>{}; - - s = "This string has too many characters"; - - BOOST_CHECK_EQUAL(s.c_str(), std::string{"This string"}); - } -} - -BOOST_AUTO_TEST_CASE (Trim) { - const auto s1 = PadString<4>{"X"}; - BOOST_CHECK_EQUAL(Opm::trim_copy(s1), std::string{"X"}); - - const auto s2 = PadString<4>{"ABCD"}; - BOOST_CHECK_EQUAL(Opm::trim_copy(s2), std::string{"ABCD"}); - - const auto s3 = PadString<4>{""}; - BOOST_CHECK_EQUAL(Opm::trim_copy(s3), std::string{""}); -} - -BOOST_AUTO_TEST_SUITE_END() diff --git a/ThirdParty/custom-opm-common/opm-common/tests/test_RFT.cpp b/ThirdParty/custom-opm-common/opm-common/tests/test_RFT.cpp deleted file mode 100644 index 8df2c54c48..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/test_RFT.cpp +++ /dev/null @@ -1,2427 +0,0 @@ -/* - Copyright 2015 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ -#include "config.h" - -#define BOOST_TEST_MODULE EclipseRFTWriter - -#include - -#include -#include -#include - -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -#include -#include - -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -using namespace Opm; - -namespace std { // hack... - // For printing ERft::RftDate objects. Needed by EQUAL_COLLECTIONS. - static ostream& operator<<(ostream& os, const tuple& d) - { - os << setw(4) << get<0>(d) - << "-" << setw(2) << setfill('0') << get<1>(d) - << "-" << setw(2) << setfill('0') << get<2>(d); - - return os; - } -} - -namespace { - class RSet - { - public: - explicit RSet(std::string base) - : odir_(Opm::filesystem::temp_directory_path() / - Opm::unique_path("rset-%%%%")) - , base_(std::move(base)) - { - Opm::filesystem::create_directories(this->odir_); - } - - ~RSet() - { - Opm::filesystem::remove_all(this->odir_); - } - - std::string outputDir() const - { - return this->odir_.string(); - } - - operator ::Opm::EclIO::OutputStream::ResultSet() const - { - return { this->odir_.string(), this->base_ }; - } - - private: - Opm::filesystem::path odir_; - std::string base_; - }; - - class RFTRresults - { - public: - explicit RFTRresults(const ::Opm::EclIO::ERft& rft, - const std::string& well, - const ::Opm::EclIO::ERft::RftDate& date); - - float depth(const int i, const int j, const int k) const - { - return this->depth_[this->conIx(i, j, k)]; - } - - float pressure(const int i, const int j, const int k) const - { - return this->press_[this->conIx(i, j, k)]; - } - - float sgas(const int i, const int j, const int k) const - { - return this->sgas_[this->conIx(i, j, k)]; - } - - float swat(const int i, const int j, const int k) const - { - return this->swat_[this->conIx(i, j, k)]; - } - - private: - std::vector depth_; - std::vector press_; - std::vector sgas_; - std::vector swat_; - - std::map, std::size_t> xConIx_; - - std::size_t conIx(const int i, const int j, const int k) const; - }; - - RFTRresults::RFTRresults(const ::Opm::EclIO::ERft& rft, - const std::string& well, - const ::Opm::EclIO::ERft::RftDate& date) - { - BOOST_REQUIRE(rft.hasRft(well, date)); - BOOST_REQUIRE(rft.hasArray("CONIPOS", well, date)); - BOOST_REQUIRE(rft.hasArray("CONJPOS", well, date)); - BOOST_REQUIRE(rft.hasArray("CONKPOS", well, date)); - - const auto& I = rft.getRft("CONIPOS", well, date); - const auto& J = rft.getRft("CONJPOS", well, date); - const auto& K = rft.getRft("CONKPOS", well, date); - - for (auto ncon = I.size(), con = 0*ncon; con < ncon; ++con) { - this->xConIx_[std::make_tuple(I[con], J[con], K[con])] = con; - } - - BOOST_REQUIRE(rft.hasArray("DEPTH" , well, date)); - BOOST_REQUIRE(rft.hasArray("PRESSURE", well, date)); - BOOST_REQUIRE(rft.hasArray("SGAS" , well, date)); - BOOST_REQUIRE(rft.hasArray("SWAT" , well, date)); - - this->depth_ = rft.getRft("DEPTH" , well, date); - this->press_ = rft.getRft("PRESSURE", well, date); - this->sgas_ = rft.getRft("SGAS" , well, date); - this->swat_ = rft.getRft("SWAT" , well, date); - } - - std::size_t RFTRresults::conIx(const int i, const int j, const int k) const - { - auto conIx = this->xConIx_.find(std::make_tuple(i, j, k)); - - if (conIx == this->xConIx_.end()) { - BOOST_FAIL("Invalid IJK Tuple (" << i << ", " - << j << ", " << k << ')'); - } - - return conIx->second; - } - - void verifyRFTFile(const std::string& rft_filename) - { - using RftDate = ::Opm::EclIO::ERft::RftDate; - - const auto rft = ::Opm::EclIO::ERft{ rft_filename }; - - const auto xRFT = RFTRresults { - rft, "OP_1", RftDate{ 2008, 10, 10 } - }; - - const auto tol = 1.0e-5; - - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 1), 0.0 , tol); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 2), 1.0e-5, tol); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 3), 2.0e-5, tol); - - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 1), 0.0, tol); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 2), 0.2, tol); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 3), 0.4, tol); - - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 1), 0.0, tol); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 2), 0.1, tol); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 3), 0.2, tol); - - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 1), 1*0.250 + 0.250/2, tol); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 2), 2*0.250 + 0.250/2, tol); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 3), 3*0.250 + 0.250/2, tol); - } - - data::Solution createBlackoilState(int timeStepIdx, int numCells) - { - std::vector< double > pressure( numCells ); - std::vector< double > swat( numCells, 0 ); - std::vector< double > sgas( numCells, 0 ); - - for (int i = 0; i < numCells; ++i) { - pressure[i] = timeStepIdx*1e5 + 1e4 + i; - } - - data::Solution sol; - sol.insert( "PRESSURE", UnitSystem::measure::pressure, pressure , data::TargetType::RESTART_SOLUTION ); - sol.insert( "SWAT", UnitSystem::measure::identity, swat , data::TargetType::RESTART_SOLUTION ); - sol.insert( "SGAS", UnitSystem::measure::identity, sgas, data::TargetType::RESTART_SOLUTION ); - - return sol; - } - - std::time_t timeStamp(const ::Opm::EclIO::ERft::RftDate& date) - { - auto tp = std::tm{}; - - tp.tm_year = std::get<0>(date) - 1900; - tp.tm_mon = std::get<1>(date) - 1; // 0..11 - tp.tm_mday = std::get<2>(date); // 1..31 - - return ::Opm::RestartIO::makeUTCTime(tp); - } -} // Anonymous namespace - -BOOST_AUTO_TEST_SUITE(Using_EclipseIO) - -BOOST_AUTO_TEST_CASE(test_RFT) -{ - auto python = std::make_shared(); - const auto rset = RSet{ "TESTRFT" }; - - const auto eclipse_data_filename = std::string{ "testrft.DATA" }; - - const auto deck = Parser{}.parseFile(eclipse_data_filename); - auto eclipseState = EclipseState { deck }; - - eclipseState.getIOConfig().setOutputDir(rset.outputDir()); - - { - /* eclipseWriter is scoped here to ensure it is destroyed after the - * file itself has been written, because we're going to reload it - * immediately. first upon destruction can we guarantee it being - * written to disk and flushed. - */ - - const auto& grid = eclipseState.getInputGrid(); - const auto numCells = grid.getCartesianSize( ); - - const Schedule schedule(deck, eclipseState, python); - const SummaryConfig summary_config( deck, schedule, eclipseState.getTableManager( )); - - EclipseIO eclipseWriter( eclipseState, grid, schedule, summary_config ); - - const auto start_time = schedule.posixStartTime(); - const auto step_time = timeStamp(::Opm::EclIO::ERft::RftDate{ 2008, 10, 10 }); - - SummaryState st(std::chrono::system_clock::now()); - - data::Rates r1, r2; - r1.set( data::Rates::opt::wat, 4.11 ); - r1.set( data::Rates::opt::oil, 4.12 ); - r1.set( data::Rates::opt::gas, 4.13 ); - - r2.set( data::Rates::opt::wat, 4.21 ); - r2.set( data::Rates::opt::oil, 4.22 ); - r2.set( data::Rates::opt::gas, 4.23 ); - - std::vector well1_comps(9); - for (size_t i = 0; i < 9; ++i) { - Opm::data::Connection well_comp { grid.getGlobalIndex(8,8,i) ,r1, 0.0 , 0.0, (double)i, 0.1*i,0.2*i, 1.2e3}; - well1_comps[i] = std::move(well_comp); - } - std::vector well2_comps(6); - for (size_t i = 0; i < 6; ++i) { - Opm::data::Connection well_comp { grid.getGlobalIndex(3,3,i+3) ,r2, 0.0 , 0.0, (double)i, i*0.1,i*0.2, 0.15}; - well2_comps[i] = std::move(well_comp); - } - - Opm::data::Solution solution = createBlackoilState(2, numCells); - Opm::data::Wells wells; - - using SegRes = decltype(wells["w"].segments); - using Ctrl = decltype(wells["w"].current_control); - - wells["OP_1"] = { std::move(r1), 1.0, 1.1, 3.1, 1, std::move(well1_comps), SegRes{}, Ctrl{} }; - wells["OP_2"] = { std::move(r2), 1.0, 1.1, 3.2, 1, std::move(well2_comps), SegRes{}, Ctrl{} }; - - RestartValue restart_value(std::move(solution), std::move(wells)); - - eclipseWriter.writeTimeStep( st, - 2, - false, - step_time - start_time, - std::move(restart_value)); - } - - verifyRFTFile(Opm::EclIO::OutputStream::outputFileName(rset, "RFT")); -} - -namespace { - void verifyRFTFile2(const std::string& rft_filename) - { - using RftDate = Opm::EclIO::ERft::RftDate; - const auto rft = ::Opm::EclIO::ERft{ rft_filename }; - - auto dates = std::unordered_map< - std::string, std::vector - >{}; - - for (const auto& wellDate : rft.listOfRftReports()) { - dates[std::get<0>(wellDate)].push_back(std::get<1>(wellDate)); - } - - // Well OP_1 - { - auto op_1 = dates.find("OP_1"); - if (op_1 == dates.end()) { - BOOST_FAIL("Missing RFT Data for Well OP_1"); - } - - const auto expect = std::vector { - RftDate{ 2008, 10, 10 }, - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(op_1->second.begin(), - op_1->second.end(), - expect.begin(), expect.end()); - } - - // Well OP_2 - { - auto op_2 = dates.find("OP_2"); - if (op_2 == dates.end()) { - BOOST_FAIL("Missing RFT Data for Well OP_2"); - } - - const auto expect = std::vector { - RftDate{ 2008, 10, 10 }, - RftDate{ 2008, 11, 10 }, - }; - - BOOST_CHECK_EQUAL_COLLECTIONS(op_2->second.begin(), - op_2->second.end(), - expect.begin(), expect.end()); - } - } -} - -BOOST_AUTO_TEST_CASE(test_RFT2) -{ - auto python = std::make_shared(); - const auto rset = RSet{ "TESTRFT" }; - - const auto eclipse_data_filename = std::string{ "testrft.DATA" }; - - const auto deck = Parser().parseFile( eclipse_data_filename ); - auto eclipseState = EclipseState(deck); - - eclipseState.getIOConfig().setOutputDir(rset.outputDir()); - - { - /* eclipseWriter is scoped here to ensure it is destroyed after the - * file itself has been written, because we're going to reload it - * immediately. first upon destruction can we guarantee it being - * written to disk and flushed. - */ - - const auto& grid = eclipseState.getInputGrid(); - const auto numCells = grid.getCartesianSize( ); - - Schedule schedule(deck, eclipseState, python); - SummaryConfig summary_config( deck, schedule, eclipseState.getTableManager( )); - SummaryState st(std::chrono::system_clock::now()); - - const auto start_time = schedule.posixStartTime(); - const auto& time_map = schedule.getTimeMap( ); - - for (int counter = 0; counter < 2; counter++) { - EclipseIO eclipseWriter( eclipseState, grid, schedule, summary_config ); - for (size_t step = 0; step < time_map.size(); step++) { - const auto step_time = time_map[step]; - - data::Rates r1, r2; - r1.set( data::Rates::opt::wat, 4.11 ); - r1.set( data::Rates::opt::oil, 4.12 ); - r1.set( data::Rates::opt::gas, 4.13 ); - - r2.set( data::Rates::opt::wat, 4.21 ); - r2.set( data::Rates::opt::oil, 4.22 ); - r2.set( data::Rates::opt::gas, 4.23 ); - - std::vector well1_comps(9); - for (size_t i = 0; i < 9; ++i) { - Opm::data::Connection well_comp { grid.getGlobalIndex(8,8,i) ,r1, 0.0 , 0.0, (double)i, 0.1*i,0.2*i, 3.14e5}; - well1_comps[i] = std::move(well_comp); - } - std::vector well2_comps(6); - for (size_t i = 0; i < 6; ++i) { - Opm::data::Connection well_comp { grid.getGlobalIndex(3,3,i+3) ,r2, 0.0 , 0.0, (double)i, i*0.1,i*0.2, 355.113}; - well2_comps[i] = std::move(well_comp); - } - - Opm::data::Wells wells; - Opm::data::Solution solution = createBlackoilState(2, numCells); - - using SegRes = decltype(wells["w"].segments); - using Ctrl = decltype(wells["w"].current_control); - - wells["OP_1"] = { std::move(r1), 1.0, 1.1, 3.1, 1, std::move(well1_comps), SegRes{}, Ctrl{} }; - wells["OP_2"] = { std::move(r2), 1.0, 1.1, 3.2, 1, std::move(well2_comps), SegRes{}, Ctrl{} }; - - RestartValue restart_value(std::move(solution), std::move(wells)); - - eclipseWriter.writeTimeStep( st, - step, - false, - step_time - start_time, - std::move(restart_value)); - } - - verifyRFTFile2(Opm::EclIO::OutputStream::outputFileName(rset, "RFT")); - } - } -} - -BOOST_AUTO_TEST_SUITE_END() // Using_EclipseIO - -// ===================================================================== - -BOOST_AUTO_TEST_SUITE(Using_Direct_Write) - -namespace { - struct Setup - { - explicit Setup(const std::string& deckfile) - : Setup{ ::Opm::Parser{}.parseFile(deckfile) } - {} - - explicit Setup(const ::Opm::Deck& deck) - : es { deck } - , python{ std::make_shared<::Opm::Python>() } - , sched { deck, es , python } - { - } - - ::Opm::EclipseState es; - std::shared_ptr<::Opm::Python> python; - ::Opm::Schedule sched; - }; - - std::vector - connRes_OP1(const ::Opm::EclipseGrid& grid) - { - auto xcon = std::vector{}; - xcon.reserve(9); - - for (auto con = 0; con < 9; ++con) { - xcon.emplace_back(); - - auto& c = xcon.back(); - c.index = grid.getGlobalIndex(8, 8, con); - - c.cell_pressure = (120 + con*10)*::Opm::unit::barsa; - - c.cell_saturation_gas = 0.15; - c.cell_saturation_water = 0.3 + con/20.0; - } - - return xcon; - } - - ::Opm::data::Well wellSol_OP1(const ::Opm::EclipseGrid& grid) - { - auto xw = ::Opm::data::Well{}; - xw.connections = connRes_OP1(grid); - - return xw; - } - - std::vector - connRes_OP2(const ::Opm::EclipseGrid& grid) - { - auto xcon = std::vector{}; - xcon.reserve(6); - - for (auto con = 3; con < 9; ++con) { - xcon.emplace_back(); - - auto& c = xcon.back(); - c.index = grid.getGlobalIndex(3, 3, con); - - c.cell_pressure = (120 + con*10)*::Opm::unit::barsa; - - c.cell_saturation_gas = 0.6 - con/20.0; - c.cell_saturation_water = 0.25; - } - - return xcon; - } - - ::Opm::data::Well wellSol_OP2(const ::Opm::EclipseGrid& grid) - { - auto xw = ::Opm::data::Well{}; - xw.connections = connRes_OP2(grid); - - return xw; - } - - ::Opm::data::WellRates wellSol(const ::Opm::EclipseGrid& grid) - { - auto xw = ::Opm::data::Wells{}; - - xw["OP_1"] = wellSol_OP1(grid); - xw["OP_2"] = wellSol_OP2(grid); - - return xw; - } -} - -BOOST_AUTO_TEST_CASE(Basic_Unformatted) -{ - using RftDate = ::Opm::EclIO::ERft::RftDate; - - const auto rset = RSet { "TESTRFT" }; - const auto model = Setup{ "testrft.DATA" }; - - { - auto rftFile = ::Opm::EclIO::OutputStream::RFT { - rset, ::Opm::EclIO::OutputStream::Formatted { false }, - ::Opm::EclIO::OutputStream::RFT::OpenExisting{ false } - }; - - const auto reportStep = 2; - const auto elapsed = model.sched.seconds(reportStep); - const auto& grid = model.es.getInputGrid(); - - ::Opm::RftIO::write(reportStep, elapsed, model.es.getUnits(), - grid, model.sched, wellSol(grid), rftFile); - } - - { - const auto rft = ::Opm::EclIO::ERft { - ::Opm::EclIO::OutputStream::outputFileName(rset, "RFT") - }; - - { - const auto xRFT = RFTRresults { - rft, "OP_1", RftDate{ 2008, 10, 10 } - }; - - const auto thick = 0.25f; - - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 1), 1*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 2), 2*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 3), 3*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 4), 4*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 5), 5*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 6), 6*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 7), 7*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 8), 8*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 9), 9*thick + thick/2.0f, 1.0e-10f); - - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 1), 120.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 2), 130.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 3), 140.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 4), 150.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 5), 160.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 6), 170.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 7), 180.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 8), 190.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 9), 200.0f, 1.0e-10f); - - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 1), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 2), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 3), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 4), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 5), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 6), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 7), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 8), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 9), 0.15f, 1.0e-10f); - - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 1), 0.30f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 2), 0.35f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 3), 0.40f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 4), 0.45f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 5), 0.50f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 6), 0.55f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 7), 0.60f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 8), 0.65f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 9), 0.70f, 1.0e-10f); - } - - { - const auto xRFT = RFTRresults { - rft, "OP_2", RftDate{ 2008, 10, 10 } - }; - - const auto thick = 0.25f; - - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 4), 4*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 5), 5*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 6), 6*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 7), 7*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 8), 8*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 9), 9*thick + thick/2.0f, 1.0e-10f); - - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 4), 150.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 5), 160.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 6), 170.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 7), 180.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 8), 190.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 9), 200.0f, 1.0e-10f); - - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 4), 0.45f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 5), 0.40f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 6), 0.35f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 7), 0.30f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 8), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 9), 0.20f, 1.0e-10f); - - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 4), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 5), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 6), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 7), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 8), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 9), 0.25f, 1.0e-10f); - } - - { - const auto date = RftDate{2008, 10, 10}; - - BOOST_CHECK(rft.hasArray("WELLETC", "OP_1", date)); - - const auto& welletc = rft.getRft("WELLETC", "OP_1", date); - - BOOST_CHECK_EQUAL(welletc[ 0], " DAYS"); - BOOST_CHECK_EQUAL(welletc[ 1], "OP_1"); - BOOST_CHECK_EQUAL(welletc[ 2], ""); - BOOST_CHECK_EQUAL(welletc[ 3], " METRES"); - BOOST_CHECK_EQUAL(welletc[ 4], " BARSA"); - BOOST_CHECK_EQUAL(welletc[ 5], "R"); - BOOST_CHECK_EQUAL(welletc[ 6], "STANDARD"); - BOOST_CHECK_EQUAL(welletc[ 7], " SM3/DAY"); - BOOST_CHECK_EQUAL(welletc[ 8], " SM3/DAY"); - BOOST_CHECK_EQUAL(welletc[ 9], " RM3/DAY"); - BOOST_CHECK_EQUAL(welletc[10], " M/SEC"); - // No check for welletc[11] - BOOST_CHECK_EQUAL(welletc[12], " CP"); - BOOST_CHECK_EQUAL(welletc[13], " KG/SM3"); - BOOST_CHECK_EQUAL(welletc[14], " KG/DAY"); - BOOST_CHECK_EQUAL(welletc[15], " KG/KG"); - } - - { - const auto date = RftDate{2008, 10, 10}; - - BOOST_CHECK(rft.hasArray("WELLETC", "OP_2", date)); - - const auto& welletc = rft.getRft("WELLETC", "OP_2", date); - - BOOST_CHECK_EQUAL(welletc[ 0], " DAYS"); - BOOST_CHECK_EQUAL(welletc[ 1], "OP_2"); - BOOST_CHECK_EQUAL(welletc[ 2], ""); - BOOST_CHECK_EQUAL(welletc[ 3], " METRES"); - BOOST_CHECK_EQUAL(welletc[ 4], " BARSA"); - BOOST_CHECK_EQUAL(welletc[ 5], "R"); - BOOST_CHECK_EQUAL(welletc[ 6], "STANDARD"); - BOOST_CHECK_EQUAL(welletc[ 7], " SM3/DAY"); - BOOST_CHECK_EQUAL(welletc[ 8], " SM3/DAY"); - BOOST_CHECK_EQUAL(welletc[ 9], " RM3/DAY"); - BOOST_CHECK_EQUAL(welletc[10], " M/SEC"); - // No check for welletc[11] - BOOST_CHECK_EQUAL(welletc[12], " CP"); - BOOST_CHECK_EQUAL(welletc[13], " KG/SM3"); - BOOST_CHECK_EQUAL(welletc[14], " KG/DAY"); - BOOST_CHECK_EQUAL(welletc[15], " KG/KG"); - } - } - - { - auto rftFile = ::Opm::EclIO::OutputStream::RFT { - rset, ::Opm::EclIO::OutputStream::Formatted { false }, - ::Opm::EclIO::OutputStream::RFT::OpenExisting{ true } - }; - - const auto reportStep = 3; - const auto elapsed = model.sched.seconds(reportStep); - const auto& grid = model.es.getInputGrid(); - - ::Opm::RftIO::write(reportStep, elapsed, model.es.getUnits(), - grid, model.sched, wellSol(grid), rftFile); - } - - { - const auto rft = ::Opm::EclIO::ERft { - ::Opm::EclIO::OutputStream::outputFileName(rset, "RFT") - }; - - { - const auto xRFT = RFTRresults { - rft, "OP_1", RftDate{ 2008, 10, 10 } - }; - - const auto thick = 0.25f; - - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 1), 1*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 2), 2*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 3), 3*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 4), 4*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 5), 5*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 6), 6*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 7), 7*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 8), 8*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 9), 9*thick + thick/2.0f, 1.0e-10f); - - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 1), 120.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 2), 130.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 3), 140.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 4), 150.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 5), 160.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 6), 170.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 7), 180.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 8), 190.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 9), 200.0f, 1.0e-10f); - - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 1), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 2), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 3), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 4), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 5), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 6), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 7), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 8), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 9), 0.15f, 1.0e-10f); - - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 1), 0.30f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 2), 0.35f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 3), 0.40f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 4), 0.45f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 5), 0.50f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 6), 0.55f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 7), 0.60f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 8), 0.65f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 9), 0.70f, 1.0e-10f); - } - - { - const auto xRFT = RFTRresults { - rft, "OP_2", RftDate{ 2008, 10, 10 } - }; - - const auto thick = 0.25f; - - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 4), 4*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 5), 5*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 6), 6*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 7), 7*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 8), 8*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 9), 9*thick + thick/2.0f, 1.0e-10f); - - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 4), 150.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 5), 160.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 6), 170.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 7), 180.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 8), 190.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 9), 200.0f, 1.0e-10f); - - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 4), 0.45f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 5), 0.40f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 6), 0.35f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 7), 0.30f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 8), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 9), 0.20f, 1.0e-10f); - - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 4), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 5), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 6), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 7), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 8), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 9), 0.25f, 1.0e-10f); - } - - { - const auto xRFT = RFTRresults { - rft, "OP_2", RftDate{ 2008, 11, 10 } - }; - - const auto thick = 0.25f; - - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 4), 4*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 5), 5*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 6), 6*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 7), 7*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 8), 8*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 9), 9*thick + thick/2.0f, 1.0e-10f); - - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 4), 150.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 5), 160.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 6), 170.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 7), 180.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 8), 190.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 9), 200.0f, 1.0e-10f); - - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 4), 0.45f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 5), 0.40f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 6), 0.35f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 7), 0.30f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 8), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 9), 0.20f, 1.0e-10f); - - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 4), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 5), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 6), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 7), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 8), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 9), 0.25f, 1.0e-10f); - } - - { - const auto date = RftDate{2008, 10, 10}; - - BOOST_CHECK(rft.hasArray("WELLETC", "OP_1", date)); - - const auto& welletc = rft.getRft("WELLETC", "OP_1", date); - - BOOST_CHECK_EQUAL(welletc[ 0], " DAYS"); - BOOST_CHECK_EQUAL(welletc[ 1], "OP_1"); - BOOST_CHECK_EQUAL(welletc[ 2], ""); - BOOST_CHECK_EQUAL(welletc[ 3], " METRES"); - BOOST_CHECK_EQUAL(welletc[ 4], " BARSA"); - BOOST_CHECK_EQUAL(welletc[ 5], "R"); - BOOST_CHECK_EQUAL(welletc[ 6], "STANDARD"); - BOOST_CHECK_EQUAL(welletc[ 7], " SM3/DAY"); - BOOST_CHECK_EQUAL(welletc[ 8], " SM3/DAY"); - BOOST_CHECK_EQUAL(welletc[ 9], " RM3/DAY"); - BOOST_CHECK_EQUAL(welletc[10], " M/SEC"); - // No check for welletc[11] - BOOST_CHECK_EQUAL(welletc[12], " CP"); - BOOST_CHECK_EQUAL(welletc[13], " KG/SM3"); - BOOST_CHECK_EQUAL(welletc[14], " KG/DAY"); - BOOST_CHECK_EQUAL(welletc[15], " KG/KG"); - } - - { - const auto date = RftDate{2008, 10, 10}; - - BOOST_CHECK(rft.hasArray("WELLETC", "OP_2", date)); - - const auto& welletc = rft.getRft("WELLETC", "OP_2", date); - - BOOST_CHECK_EQUAL(welletc[ 0], " DAYS"); - BOOST_CHECK_EQUAL(welletc[ 1], "OP_2"); - BOOST_CHECK_EQUAL(welletc[ 2], ""); - BOOST_CHECK_EQUAL(welletc[ 3], " METRES"); - BOOST_CHECK_EQUAL(welletc[ 4], " BARSA"); - BOOST_CHECK_EQUAL(welletc[ 5], "R"); - BOOST_CHECK_EQUAL(welletc[ 6], "STANDARD"); - BOOST_CHECK_EQUAL(welletc[ 7], " SM3/DAY"); - BOOST_CHECK_EQUAL(welletc[ 8], " SM3/DAY"); - BOOST_CHECK_EQUAL(welletc[ 9], " RM3/DAY"); - BOOST_CHECK_EQUAL(welletc[10], " M/SEC"); - // No check for welletc[11] - BOOST_CHECK_EQUAL(welletc[12], " CP"); - BOOST_CHECK_EQUAL(welletc[13], " KG/SM3"); - BOOST_CHECK_EQUAL(welletc[14], " KG/DAY"); - BOOST_CHECK_EQUAL(welletc[15], " KG/KG"); - } - - { - const auto date = RftDate{2008, 11, 10}; - - BOOST_CHECK(rft.hasArray("WELLETC", "OP_2", date)); - - const auto& welletc = rft.getRft("WELLETC", "OP_2", date); - - BOOST_CHECK_EQUAL(welletc[ 0], " DAYS"); - BOOST_CHECK_EQUAL(welletc[ 1], "OP_2"); - BOOST_CHECK_EQUAL(welletc[ 2], ""); - BOOST_CHECK_EQUAL(welletc[ 3], " METRES"); - BOOST_CHECK_EQUAL(welletc[ 4], " BARSA"); - BOOST_CHECK_EQUAL(welletc[ 5], "R"); - BOOST_CHECK_EQUAL(welletc[ 6], "STANDARD"); - BOOST_CHECK_EQUAL(welletc[ 7], " SM3/DAY"); - BOOST_CHECK_EQUAL(welletc[ 8], " SM3/DAY"); - BOOST_CHECK_EQUAL(welletc[ 9], " RM3/DAY"); - BOOST_CHECK_EQUAL(welletc[10], " M/SEC"); - // No check for welletc[11] - BOOST_CHECK_EQUAL(welletc[12], " CP"); - BOOST_CHECK_EQUAL(welletc[13], " KG/SM3"); - BOOST_CHECK_EQUAL(welletc[14], " KG/DAY"); - BOOST_CHECK_EQUAL(welletc[15], " KG/KG"); - } - } -} - -BOOST_AUTO_TEST_CASE(Basic_Formatted) -{ - using RftDate = ::Opm::EclIO::ERft::RftDate; - - const auto rset = RSet { "TESTRFT" }; - const auto model = Setup{ "testrft.DATA" }; - - { - auto rftFile = ::Opm::EclIO::OutputStream::RFT { - rset, ::Opm::EclIO::OutputStream::Formatted { true }, - ::Opm::EclIO::OutputStream::RFT::OpenExisting{ false } - }; - - const auto reportStep = 2; - const auto elapsed = model.sched.seconds(reportStep); - const auto& grid = model.es.getInputGrid(); - - ::Opm::RftIO::write(reportStep, elapsed, model.es.getUnits(), - grid, model.sched, wellSol(grid), rftFile); - } - - { - const auto rft = ::Opm::EclIO::ERft { - ::Opm::EclIO::OutputStream::outputFileName(rset, "FRFT") - }; - - { - const auto xRFT = RFTRresults { - rft, "OP_1", RftDate{ 2008, 10, 10 } - }; - - const auto thick = 0.25f; - - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 1), 1*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 2), 2*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 3), 3*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 4), 4*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 5), 5*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 6), 6*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 7), 7*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 8), 8*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 9), 9*thick + thick/2.0f, 1.0e-10f); - - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 1), 120.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 2), 130.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 3), 140.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 4), 150.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 5), 160.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 6), 170.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 7), 180.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 8), 190.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 9), 200.0f, 1.0e-10f); - - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 1), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 2), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 3), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 4), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 5), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 6), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 7), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 8), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 9), 0.15f, 1.0e-10f); - - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 1), 0.30f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 2), 0.35f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 3), 0.40f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 4), 0.45f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 5), 0.50f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 6), 0.55f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 7), 0.60f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 8), 0.65f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 9), 0.70f, 1.0e-10f); - } - - { - const auto xRFT = RFTRresults { - rft, "OP_2", RftDate{ 2008, 10, 10 } - }; - - const auto thick = 0.25f; - - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 4), 4*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 5), 5*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 6), 6*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 7), 7*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 8), 8*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 9), 9*thick + thick/2.0f, 1.0e-10f); - - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 4), 150.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 5), 160.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 6), 170.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 7), 180.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 8), 190.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 9), 200.0f, 1.0e-10f); - - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 4), 0.45f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 5), 0.40f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 6), 0.35f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 7), 0.30f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 8), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 9), 0.20f, 1.0e-10f); - - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 4), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 5), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 6), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 7), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 8), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 9), 0.25f, 1.0e-10f); - } - - { - const auto date = RftDate{2008, 10, 10}; - - BOOST_CHECK(rft.hasArray("WELLETC", "OP_1", date)); - - const auto& welletc = rft.getRft("WELLETC", "OP_1", date); - - BOOST_CHECK_EQUAL(welletc[ 0], " DAYS"); - BOOST_CHECK_EQUAL(welletc[ 1], "OP_1"); - BOOST_CHECK_EQUAL(welletc[ 2], ""); - BOOST_CHECK_EQUAL(welletc[ 3], " METRES"); - BOOST_CHECK_EQUAL(welletc[ 4], " BARSA"); - BOOST_CHECK_EQUAL(welletc[ 5], "R"); - BOOST_CHECK_EQUAL(welletc[ 6], "STANDARD"); - BOOST_CHECK_EQUAL(welletc[ 7], " SM3/DAY"); - BOOST_CHECK_EQUAL(welletc[ 8], " SM3/DAY"); - BOOST_CHECK_EQUAL(welletc[ 9], " RM3/DAY"); - BOOST_CHECK_EQUAL(welletc[10], " M/SEC"); - // No check for welletc[11] - BOOST_CHECK_EQUAL(welletc[12], " CP"); - BOOST_CHECK_EQUAL(welletc[13], " KG/SM3"); - BOOST_CHECK_EQUAL(welletc[14], " KG/DAY"); - BOOST_CHECK_EQUAL(welletc[15], " KG/KG"); - } - - { - const auto date = RftDate{2008, 10, 10}; - - BOOST_CHECK(rft.hasArray("WELLETC", "OP_2", date)); - - const auto& welletc = rft.getRft("WELLETC", "OP_2", date); - - BOOST_CHECK_EQUAL(welletc[ 0], " DAYS"); - BOOST_CHECK_EQUAL(welletc[ 1], "OP_2"); - BOOST_CHECK_EQUAL(welletc[ 2], ""); - BOOST_CHECK_EQUAL(welletc[ 3], " METRES"); - BOOST_CHECK_EQUAL(welletc[ 4], " BARSA"); - BOOST_CHECK_EQUAL(welletc[ 5], "R"); - BOOST_CHECK_EQUAL(welletc[ 6], "STANDARD"); - BOOST_CHECK_EQUAL(welletc[ 7], " SM3/DAY"); - BOOST_CHECK_EQUAL(welletc[ 8], " SM3/DAY"); - BOOST_CHECK_EQUAL(welletc[ 9], " RM3/DAY"); - BOOST_CHECK_EQUAL(welletc[10], " M/SEC"); - // No check for welletc[11] - BOOST_CHECK_EQUAL(welletc[12], " CP"); - BOOST_CHECK_EQUAL(welletc[13], " KG/SM3"); - BOOST_CHECK_EQUAL(welletc[14], " KG/DAY"); - BOOST_CHECK_EQUAL(welletc[15], " KG/KG"); - } - } - - { - auto rftFile = ::Opm::EclIO::OutputStream::RFT { - rset, ::Opm::EclIO::OutputStream::Formatted { true }, - ::Opm::EclIO::OutputStream::RFT::OpenExisting{ true } - }; - - const auto reportStep = 3; - const auto elapsed = model.sched.seconds(reportStep); - const auto& grid = model.es.getInputGrid(); - - ::Opm::RftIO::write(reportStep, elapsed, model.es.getUnits(), - grid, model.sched, wellSol(grid), rftFile); - } - - { - const auto rft = ::Opm::EclIO::ERft { - ::Opm::EclIO::OutputStream::outputFileName(rset, "FRFT") - }; - - { - const auto xRFT = RFTRresults { - rft, "OP_1", RftDate{ 2008, 10, 10 } - }; - - const auto thick = 0.25f; - - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 1), 1*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 2), 2*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 3), 3*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 4), 4*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 5), 5*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 6), 6*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 7), 7*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 8), 8*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 9), 9*thick + thick/2.0f, 1.0e-10f); - - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 1), 120.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 2), 130.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 3), 140.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 4), 150.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 5), 160.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 6), 170.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 7), 180.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 8), 190.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 9), 200.0f, 1.0e-10f); - - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 1), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 2), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 3), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 4), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 5), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 6), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 7), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 8), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 9), 0.15f, 1.0e-10f); - - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 1), 0.30f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 2), 0.35f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 3), 0.40f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 4), 0.45f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 5), 0.50f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 6), 0.55f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 7), 0.60f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 8), 0.65f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 9), 0.70f, 1.0e-10f); - } - - { - const auto xRFT = RFTRresults { - rft, "OP_2", RftDate{ 2008, 10, 10 } - }; - - const auto thick = 0.25f; - - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 4), 4*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 5), 5*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 6), 6*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 7), 7*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 8), 8*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 9), 9*thick + thick/2.0f, 1.0e-10f); - - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 4), 150.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 5), 160.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 6), 170.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 7), 180.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 8), 190.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 9), 200.0f, 1.0e-10f); - - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 4), 0.45f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 5), 0.40f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 6), 0.35f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 7), 0.30f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 8), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 9), 0.20f, 1.0e-10f); - - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 4), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 5), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 6), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 7), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 8), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 9), 0.25f, 1.0e-10f); - } - - { - const auto xRFT = RFTRresults { - rft, "OP_2", RftDate{ 2008, 11, 10 } - }; - - const auto thick = 0.25f; - - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 4), 4*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 5), 5*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 6), 6*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 7), 7*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 8), 8*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 9), 9*thick + thick/2.0f, 1.0e-10f); - - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 4), 150.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 5), 160.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 6), 170.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 7), 180.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 8), 190.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 9), 200.0f, 1.0e-10f); - - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 4), 0.45f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 5), 0.40f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 6), 0.35f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 7), 0.30f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 8), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 9), 0.20f, 1.0e-10f); - - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 4), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 5), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 6), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 7), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 8), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 9), 0.25f, 1.0e-10f); - } - - { - const auto date = RftDate{2008, 10, 10}; - - BOOST_CHECK(rft.hasArray("WELLETC", "OP_1", date)); - - const auto& welletc = rft.getRft("WELLETC", "OP_1", date); - - BOOST_CHECK_EQUAL(welletc[ 0], " DAYS"); - BOOST_CHECK_EQUAL(welletc[ 1], "OP_1"); - BOOST_CHECK_EQUAL(welletc[ 2], ""); - BOOST_CHECK_EQUAL(welletc[ 3], " METRES"); - BOOST_CHECK_EQUAL(welletc[ 4], " BARSA"); - BOOST_CHECK_EQUAL(welletc[ 5], "R"); - BOOST_CHECK_EQUAL(welletc[ 6], "STANDARD"); - BOOST_CHECK_EQUAL(welletc[ 7], " SM3/DAY"); - BOOST_CHECK_EQUAL(welletc[ 8], " SM3/DAY"); - BOOST_CHECK_EQUAL(welletc[ 9], " RM3/DAY"); - BOOST_CHECK_EQUAL(welletc[10], " M/SEC"); - // No check for welletc[11] - BOOST_CHECK_EQUAL(welletc[12], " CP"); - BOOST_CHECK_EQUAL(welletc[13], " KG/SM3"); - BOOST_CHECK_EQUAL(welletc[14], " KG/DAY"); - BOOST_CHECK_EQUAL(welletc[15], " KG/KG"); - } - - { - const auto date = RftDate{2008, 10, 10}; - - BOOST_CHECK(rft.hasArray("WELLETC", "OP_2", date)); - - const auto& welletc = rft.getRft("WELLETC", "OP_2", date); - - BOOST_CHECK_EQUAL(welletc[ 0], " DAYS"); - BOOST_CHECK_EQUAL(welletc[ 1], "OP_2"); - BOOST_CHECK_EQUAL(welletc[ 2], ""); - BOOST_CHECK_EQUAL(welletc[ 3], " METRES"); - BOOST_CHECK_EQUAL(welletc[ 4], " BARSA"); - BOOST_CHECK_EQUAL(welletc[ 5], "R"); - BOOST_CHECK_EQUAL(welletc[ 6], "STANDARD"); - BOOST_CHECK_EQUAL(welletc[ 7], " SM3/DAY"); - BOOST_CHECK_EQUAL(welletc[ 8], " SM3/DAY"); - BOOST_CHECK_EQUAL(welletc[ 9], " RM3/DAY"); - BOOST_CHECK_EQUAL(welletc[10], " M/SEC"); - // No check for welletc[11] - BOOST_CHECK_EQUAL(welletc[12], " CP"); - BOOST_CHECK_EQUAL(welletc[13], " KG/SM3"); - BOOST_CHECK_EQUAL(welletc[14], " KG/DAY"); - BOOST_CHECK_EQUAL(welletc[15], " KG/KG"); - } - - { - const auto date = RftDate{2008, 11, 10}; - - BOOST_CHECK(rft.hasArray("WELLETC", "OP_2", date)); - - const auto& welletc = rft.getRft("WELLETC", "OP_2", date); - - BOOST_CHECK_EQUAL(welletc[ 0], " DAYS"); - BOOST_CHECK_EQUAL(welletc[ 1], "OP_2"); - BOOST_CHECK_EQUAL(welletc[ 2], ""); - BOOST_CHECK_EQUAL(welletc[ 3], " METRES"); - BOOST_CHECK_EQUAL(welletc[ 4], " BARSA"); - BOOST_CHECK_EQUAL(welletc[ 5], "R"); - BOOST_CHECK_EQUAL(welletc[ 6], "STANDARD"); - BOOST_CHECK_EQUAL(welletc[ 7], " SM3/DAY"); - BOOST_CHECK_EQUAL(welletc[ 8], " SM3/DAY"); - BOOST_CHECK_EQUAL(welletc[ 9], " RM3/DAY"); - BOOST_CHECK_EQUAL(welletc[10], " M/SEC"); - // No check for welletc[11] - BOOST_CHECK_EQUAL(welletc[12], " CP"); - BOOST_CHECK_EQUAL(welletc[13], " KG/SM3"); - BOOST_CHECK_EQUAL(welletc[14], " KG/DAY"); - BOOST_CHECK_EQUAL(welletc[15], " KG/KG"); - } - } -} - -BOOST_AUTO_TEST_CASE(Field_Units) -{ - using RftDate = ::Opm::EclIO::ERft::RftDate; - - const auto rset = RSet { "TESTRFT" }; - const auto model = Setup{ "testrft.DATA" }; - const auto usys = ::Opm::UnitSystem::newFIELD(); - - { - auto rftFile = ::Opm::EclIO::OutputStream::RFT { - rset, ::Opm::EclIO::OutputStream::Formatted { false }, - ::Opm::EclIO::OutputStream::RFT::OpenExisting{ false } - }; - - const auto reportStep = 2; - const auto elapsed = model.sched.seconds(reportStep); - const auto& grid = model.es.getInputGrid(); - - ::Opm::RftIO::write(reportStep, elapsed, usys, grid, - model.sched, wellSol(grid), rftFile); - } - - { - const auto rft = ::Opm::EclIO::ERft { - ::Opm::EclIO::OutputStream::outputFileName(rset, "RFT") - }; - - { - const auto xRFT = RFTRresults { - rft, "OP_1", RftDate{ 2008, 10, 10 } - }; - - const auto thick = ::Opm::unit::convert::to(0.25f, ::Opm::unit::feet); - - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 1), 1*thick + thick/2.0f, 5.0e-6f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 2), 2*thick + thick/2.0f, 5.0e-6f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 3), 3*thick + thick/2.0f, 5.0e-6f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 4), 4*thick + thick/2.0f, 5.0e-6f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 5), 5*thick + thick/2.0f, 5.0e-6f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 6), 6*thick + thick/2.0f, 5.0e-6f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 7), 7*thick + thick/2.0f, 5.0e-6f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 8), 8*thick + thick/2.0f, 5.0e-6f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 9), 9*thick + thick/2.0f, 5.0e-6f); - - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 1), 1.740452852762511e+03f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 2), 1.885490590492720e+03f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 3), 2.030528328222930e+03f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 4), 2.175566065953139e+03f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 5), 2.320603803683348e+03f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 6), 2.465641541413557e+03f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 7), 2.610679279143767e+03f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 8), 2.755717016873976e+03f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 9), 2.900754754604185e+03f, 1.0e-10f); - - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 1), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 2), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 3), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 4), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 5), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 6), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 7), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 8), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 9), 0.15f, 1.0e-10f); - - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 1), 0.30f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 2), 0.35f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 3), 0.40f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 4), 0.45f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 5), 0.50f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 6), 0.55f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 7), 0.60f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 8), 0.65f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 9), 0.70f, 1.0e-10f); - } - - { - const auto xRFT = RFTRresults { - rft, "OP_2", RftDate{ 2008, 10, 10 } - }; - - const auto thick = ::Opm::unit::convert::to(0.25f, ::Opm::unit::feet); - - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 4), 4*thick + thick/2.0f, 5.0e-6f); - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 5), 5*thick + thick/2.0f, 5.0e-6f); - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 6), 6*thick + thick/2.0f, 5.0e-6f); - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 7), 7*thick + thick/2.0f, 5.0e-6f); - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 8), 8*thick + thick/2.0f, 5.0e-6f); - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 9), 9*thick + thick/2.0f, 5.0e-6f); - - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 4), 2.175566065953139e+03f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 5), 2.320603803683348e+03f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 6), 2.465641541413557e+03f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 7), 2.610679279143767e+03f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 8), 2.755717016873976e+03f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 9), 2.900754754604185e+03f, 1.0e-10f); - - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 4), 0.45f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 5), 0.40f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 6), 0.35f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 7), 0.30f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 8), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 9), 0.20f, 1.0e-10f); - - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 4), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 5), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 6), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 7), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 8), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 9), 0.25f, 1.0e-10f); - } - - { - const auto date = RftDate{2008, 10, 10}; - - BOOST_CHECK(rft.hasArray("WELLETC", "OP_1", date)); - - const auto& welletc = rft.getRft("WELLETC", "OP_1", date); - - BOOST_CHECK_EQUAL(welletc[ 0], " DAYS"); - BOOST_CHECK_EQUAL(welletc[ 1], "OP_1"); - BOOST_CHECK_EQUAL(welletc[ 2], ""); - BOOST_CHECK_EQUAL(welletc[ 3], " FEET"); - BOOST_CHECK_EQUAL(welletc[ 4], " PSIA"); - BOOST_CHECK_EQUAL(welletc[ 5], "R"); - BOOST_CHECK_EQUAL(welletc[ 6], "STANDARD"); - BOOST_CHECK_EQUAL(welletc[ 7], " STB/DAY"); - BOOST_CHECK_EQUAL(welletc[ 8], "MSCF/DAY"); - BOOST_CHECK_EQUAL(welletc[ 9], " RB/DAY"); - BOOST_CHECK_EQUAL(welletc[10], " FT/SEC"); - // No check for welletc[11] - BOOST_CHECK_EQUAL(welletc[12], " CP"); - BOOST_CHECK_EQUAL(welletc[13], " LB/STB"); - BOOST_CHECK_EQUAL(welletc[14], " LB/DAY"); - BOOST_CHECK_EQUAL(welletc[15], " LB/LB"); - } - - { - const auto date = RftDate{2008, 10, 10}; - - BOOST_CHECK(rft.hasArray("WELLETC", "OP_2", date)); - - const auto& welletc = rft.getRft("WELLETC", "OP_2", date); - - BOOST_CHECK_EQUAL(welletc[ 0], " DAYS"); - BOOST_CHECK_EQUAL(welletc[ 1], "OP_2"); - BOOST_CHECK_EQUAL(welletc[ 2], ""); - BOOST_CHECK_EQUAL(welletc[ 3], " FEET"); - BOOST_CHECK_EQUAL(welletc[ 4], " PSIA"); - BOOST_CHECK_EQUAL(welletc[ 5], "R"); - BOOST_CHECK_EQUAL(welletc[ 6], "STANDARD"); - BOOST_CHECK_EQUAL(welletc[ 7], " STB/DAY"); - BOOST_CHECK_EQUAL(welletc[ 8], "MSCF/DAY"); - BOOST_CHECK_EQUAL(welletc[ 9], " RB/DAY"); - BOOST_CHECK_EQUAL(welletc[10], " FT/SEC"); - // No check for welletc[11] - BOOST_CHECK_EQUAL(welletc[12], " CP"); - BOOST_CHECK_EQUAL(welletc[13], " LB/STB"); - BOOST_CHECK_EQUAL(welletc[14], " LB/DAY"); - BOOST_CHECK_EQUAL(welletc[15], " LB/LB"); - } - } - - { - auto rftFile = ::Opm::EclIO::OutputStream::RFT { - rset, ::Opm::EclIO::OutputStream::Formatted { false }, - ::Opm::EclIO::OutputStream::RFT::OpenExisting{ true } - }; - - const auto reportStep = 3; - const auto elapsed = model.sched.seconds(reportStep); - const auto& grid = model.es.getInputGrid(); - - ::Opm::RftIO::write(reportStep, elapsed, usys, grid, - model.sched, wellSol(grid), rftFile); - } - - { - const auto rft = ::Opm::EclIO::ERft { - ::Opm::EclIO::OutputStream::outputFileName(rset, "RFT") - }; - - { - const auto xRFT = RFTRresults { - rft, "OP_1", RftDate{ 2008, 10, 10 } - }; - - const auto thick = ::Opm::unit::convert::to(0.25f, ::Opm::unit::feet); - - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 1), 1*thick + thick/2.0f, 5.0e-6f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 2), 2*thick + thick/2.0f, 5.0e-6f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 3), 3*thick + thick/2.0f, 5.0e-6f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 4), 4*thick + thick/2.0f, 5.0e-6f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 5), 5*thick + thick/2.0f, 5.0e-6f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 6), 6*thick + thick/2.0f, 5.0e-6f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 7), 7*thick + thick/2.0f, 5.0e-6f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 8), 8*thick + thick/2.0f, 5.0e-6f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 9), 9*thick + thick/2.0f, 5.0e-6f); - - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 1), 1.740452852762511e+03f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 2), 1.885490590492720e+03f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 3), 2.030528328222930e+03f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 4), 2.175566065953139e+03f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 5), 2.320603803683348e+03f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 6), 2.465641541413557e+03f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 7), 2.610679279143767e+03f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 8), 2.755717016873976e+03f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 9), 2.900754754604185e+03f, 1.0e-10f); - - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 1), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 2), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 3), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 4), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 5), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 6), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 7), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 8), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 9), 0.15f, 1.0e-10f); - - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 1), 0.30f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 2), 0.35f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 3), 0.40f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 4), 0.45f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 5), 0.50f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 6), 0.55f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 7), 0.60f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 8), 0.65f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 9), 0.70f, 1.0e-10f); - } - - { - const auto xRFT = RFTRresults { - rft, "OP_2", RftDate{ 2008, 10, 10 } - }; - - const auto thick = ::Opm::unit::convert::to(0.25f, ::Opm::unit::feet); - - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 4), 4*thick + thick/2.0f, 5.0e-6f); - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 5), 5*thick + thick/2.0f, 5.0e-6f); - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 6), 6*thick + thick/2.0f, 5.0e-6f); - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 7), 7*thick + thick/2.0f, 5.0e-6f); - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 8), 8*thick + thick/2.0f, 5.0e-6f); - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 9), 9*thick + thick/2.0f, 5.0e-6f); - - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 4), 2.175566065953139e+03f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 5), 2.320603803683348e+03f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 6), 2.465641541413557e+03f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 7), 2.610679279143767e+03f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 8), 2.755717016873976e+03f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 9), 2.900754754604185e+03f, 1.0e-10f); - - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 4), 0.45f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 5), 0.40f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 6), 0.35f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 7), 0.30f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 8), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 9), 0.20f, 1.0e-10f); - - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 4), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 5), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 6), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 7), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 8), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 9), 0.25f, 1.0e-10f); - } - - { - const auto xRFT = RFTRresults { - rft, "OP_2", RftDate{ 2008, 11, 10 } - }; - - const auto thick = ::Opm::unit::convert::to(0.25f, ::Opm::unit::feet); - - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 4), 4*thick + thick/2.0f, 5.0e-6f); - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 5), 5*thick + thick/2.0f, 5.0e-6f); - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 6), 6*thick + thick/2.0f, 5.0e-6f); - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 7), 7*thick + thick/2.0f, 5.0e-6f); - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 8), 8*thick + thick/2.0f, 5.0e-6f); - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 9), 9*thick + thick/2.0f, 5.0e-6f); - - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 4), 2.175566065953139e+03f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 5), 2.320603803683348e+03f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 6), 2.465641541413557e+03f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 7), 2.610679279143767e+03f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 8), 2.755717016873976e+03f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 9), 2.900754754604185e+03f, 1.0e-10f); - - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 4), 0.45f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 5), 0.40f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 6), 0.35f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 7), 0.30f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 8), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 9), 0.20f, 1.0e-10f); - - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 4), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 5), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 6), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 7), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 8), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 9), 0.25f, 1.0e-10f); - } - - { - const auto date = RftDate{2008, 10, 10}; - - BOOST_CHECK(rft.hasArray("WELLETC", "OP_1", date)); - - const auto& welletc = rft.getRft("WELLETC", "OP_1", date); - - BOOST_CHECK_EQUAL(welletc[ 0], " DAYS"); - BOOST_CHECK_EQUAL(welletc[ 1], "OP_1"); - BOOST_CHECK_EQUAL(welletc[ 2], ""); - BOOST_CHECK_EQUAL(welletc[ 3], " FEET"); - BOOST_CHECK_EQUAL(welletc[ 4], " PSIA"); - BOOST_CHECK_EQUAL(welletc[ 5], "R"); - BOOST_CHECK_EQUAL(welletc[ 6], "STANDARD"); - BOOST_CHECK_EQUAL(welletc[ 7], " STB/DAY"); - BOOST_CHECK_EQUAL(welletc[ 8], "MSCF/DAY"); - BOOST_CHECK_EQUAL(welletc[ 9], " RB/DAY"); - BOOST_CHECK_EQUAL(welletc[10], " FT/SEC"); - // No check for welletc[11] - BOOST_CHECK_EQUAL(welletc[12], " CP"); - BOOST_CHECK_EQUAL(welletc[13], " LB/STB"); - BOOST_CHECK_EQUAL(welletc[14], " LB/DAY"); - BOOST_CHECK_EQUAL(welletc[15], " LB/LB"); - } - - { - const auto date = RftDate{2008, 10, 10}; - - BOOST_CHECK(rft.hasArray("WELLETC", "OP_2", date)); - - const auto& welletc = rft.getRft("WELLETC", "OP_2", date); - - BOOST_CHECK_EQUAL(welletc[ 0], " DAYS"); - BOOST_CHECK_EQUAL(welletc[ 1], "OP_2"); - BOOST_CHECK_EQUAL(welletc[ 2], ""); - BOOST_CHECK_EQUAL(welletc[ 3], " FEET"); - BOOST_CHECK_EQUAL(welletc[ 4], " PSIA"); - BOOST_CHECK_EQUAL(welletc[ 5], "R"); - BOOST_CHECK_EQUAL(welletc[ 6], "STANDARD"); - BOOST_CHECK_EQUAL(welletc[ 7], " STB/DAY"); - BOOST_CHECK_EQUAL(welletc[ 8], "MSCF/DAY"); - BOOST_CHECK_EQUAL(welletc[ 9], " RB/DAY"); - BOOST_CHECK_EQUAL(welletc[10], " FT/SEC"); - // No check for welletc[11] - BOOST_CHECK_EQUAL(welletc[12], " CP"); - BOOST_CHECK_EQUAL(welletc[13], " LB/STB"); - BOOST_CHECK_EQUAL(welletc[14], " LB/DAY"); - BOOST_CHECK_EQUAL(welletc[15], " LB/LB"); - } - - { - const auto date = RftDate{2008, 11, 10}; - - BOOST_CHECK(rft.hasArray("WELLETC", "OP_2", date)); - - const auto& welletc = rft.getRft("WELLETC", "OP_2", date); - - BOOST_CHECK_EQUAL(welletc[ 0], " DAYS"); - BOOST_CHECK_EQUAL(welletc[ 1], "OP_2"); - BOOST_CHECK_EQUAL(welletc[ 2], ""); - BOOST_CHECK_EQUAL(welletc[ 3], " FEET"); - BOOST_CHECK_EQUAL(welletc[ 4], " PSIA"); - BOOST_CHECK_EQUAL(welletc[ 5], "R"); - BOOST_CHECK_EQUAL(welletc[ 6], "STANDARD"); - BOOST_CHECK_EQUAL(welletc[ 7], " STB/DAY"); - BOOST_CHECK_EQUAL(welletc[ 8], "MSCF/DAY"); - BOOST_CHECK_EQUAL(welletc[ 9], " RB/DAY"); - BOOST_CHECK_EQUAL(welletc[10], " FT/SEC"); - // No check for welletc[11] - BOOST_CHECK_EQUAL(welletc[12], " CP"); - BOOST_CHECK_EQUAL(welletc[13], " LB/STB"); - BOOST_CHECK_EQUAL(welletc[14], " LB/DAY"); - BOOST_CHECK_EQUAL(welletc[15], " LB/LB"); - } - } -} - -BOOST_AUTO_TEST_CASE(Lab_Units) -{ - using RftDate = ::Opm::EclIO::ERft::RftDate; - - const auto rset = RSet { "TESTRFT" }; - const auto model = Setup{ "testrft.DATA" }; - const auto usys = ::Opm::UnitSystem::newLAB(); - - { - auto rftFile = ::Opm::EclIO::OutputStream::RFT { - rset, ::Opm::EclIO::OutputStream::Formatted { false }, - ::Opm::EclIO::OutputStream::RFT::OpenExisting{ false } - }; - - const auto reportStep = 2; - const auto elapsed = model.sched.seconds(reportStep); - const auto& grid = model.es.getInputGrid(); - - ::Opm::RftIO::write(reportStep, elapsed, usys, grid, - model.sched, wellSol(grid), rftFile); - } - - { - const auto rft = ::Opm::EclIO::ERft { - ::Opm::EclIO::OutputStream::outputFileName(rset, "RFT") - }; - - { - const auto xRFT = RFTRresults { - rft, "OP_1", RftDate{ 2008, 10, 10 } - }; - - const auto thick = 25.0f; // cm - - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 1), 1*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 2), 2*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 3), 3*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 4), 4*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 5), 5*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 6), 6*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 7), 7*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 8), 8*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 9), 9*thick + thick/2.0f, 1.0e-10f); - - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 1), 1.184307920059215e+02f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 2), 1.283000246730817e+02f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 3), 1.381692573402418e+02f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 4), 1.480384900074019e+02f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 5), 1.579077226745621e+02f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 6), 1.677769553417222e+02f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 7), 1.776461880088823e+02f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 8), 1.875154206760424e+02f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 9), 1.973846533432026e+02f, 1.0e-10f); - - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 1), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 2), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 3), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 4), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 5), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 6), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 7), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 8), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 9), 0.15f, 1.0e-10f); - - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 1), 0.30f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 2), 0.35f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 3), 0.40f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 4), 0.45f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 5), 0.50f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 6), 0.55f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 7), 0.60f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 8), 0.65f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 9), 0.70f, 1.0e-10f); - } - - { - const auto xRFT = RFTRresults { - rft, "OP_2", RftDate{ 2008, 10, 10 } - }; - - const auto thick = 25.0f; // cm - - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 4), 4*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 5), 5*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 6), 6*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 7), 7*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 8), 8*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 9), 9*thick + thick/2.0f, 1.0e-10f); - - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 4), 1.480384900074019e+02f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 5), 1.579077226745621e+02f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 6), 1.677769553417222e+02f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 7), 1.776461880088823e+02f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 8), 1.875154206760424e+02f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 9), 1.973846533432026e+02f, 1.0e-10f); - - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 4), 0.45f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 5), 0.40f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 6), 0.35f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 7), 0.30f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 8), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 9), 0.20f, 1.0e-10f); - - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 4), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 5), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 6), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 7), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 8), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 9), 0.25f, 1.0e-10f); - } - - { - const auto date = RftDate{2008, 10, 10}; - - BOOST_CHECK(rft.hasArray("WELLETC", "OP_1", date)); - - const auto& welletc = rft.getRft("WELLETC", "OP_1", date); - - BOOST_CHECK_EQUAL(welletc[ 0], " HR"); - BOOST_CHECK_EQUAL(welletc[ 1], "OP_1"); - BOOST_CHECK_EQUAL(welletc[ 2], ""); - BOOST_CHECK_EQUAL(welletc[ 3], " CM"); - BOOST_CHECK_EQUAL(welletc[ 4], " ATMA"); - BOOST_CHECK_EQUAL(welletc[ 5], "R"); - BOOST_CHECK_EQUAL(welletc[ 6], "STANDARD"); - BOOST_CHECK_EQUAL(welletc[ 7], " SCC/HR"); - BOOST_CHECK_EQUAL(welletc[ 8], " SCC/HR"); - BOOST_CHECK_EQUAL(welletc[ 9], " RCC/HR"); - BOOST_CHECK_EQUAL(welletc[10], " CM/SEC"); - // No check for welletc[11] - BOOST_CHECK_EQUAL(welletc[12], " CP"); - BOOST_CHECK_EQUAL(welletc[13], " GM/SCC"); - BOOST_CHECK_EQUAL(welletc[14], " GM/HR"); - BOOST_CHECK_EQUAL(welletc[15], " GM/GM"); - } - - { - const auto date = RftDate{2008, 10, 10}; - - BOOST_CHECK(rft.hasArray("WELLETC", "OP_2", date)); - - const auto& welletc = rft.getRft("WELLETC", "OP_2", date); - - BOOST_CHECK_EQUAL(welletc[ 0], " HR"); - BOOST_CHECK_EQUAL(welletc[ 1], "OP_2"); - BOOST_CHECK_EQUAL(welletc[ 2], ""); - BOOST_CHECK_EQUAL(welletc[ 3], " CM"); - BOOST_CHECK_EQUAL(welletc[ 4], " ATMA"); - BOOST_CHECK_EQUAL(welletc[ 5], "R"); - BOOST_CHECK_EQUAL(welletc[ 6], "STANDARD"); - BOOST_CHECK_EQUAL(welletc[ 7], " SCC/HR"); - BOOST_CHECK_EQUAL(welletc[ 8], " SCC/HR"); - BOOST_CHECK_EQUAL(welletc[ 9], " RCC/HR"); - BOOST_CHECK_EQUAL(welletc[10], " CM/SEC"); - // No check for welletc[11] - BOOST_CHECK_EQUAL(welletc[12], " CP"); - BOOST_CHECK_EQUAL(welletc[13], " GM/SCC"); - BOOST_CHECK_EQUAL(welletc[14], " GM/HR"); - BOOST_CHECK_EQUAL(welletc[15], " GM/GM"); - } - } - - { - auto rftFile = ::Opm::EclIO::OutputStream::RFT { - rset, ::Opm::EclIO::OutputStream::Formatted { false }, - ::Opm::EclIO::OutputStream::RFT::OpenExisting{ true } - }; - - const auto reportStep = 3; - const auto elapsed = model.sched.seconds(reportStep); - const auto& grid = model.es.getInputGrid(); - - ::Opm::RftIO::write(reportStep, elapsed, usys, grid, - model.sched, wellSol(grid), rftFile); - } - - { - const auto rft = ::Opm::EclIO::ERft { - ::Opm::EclIO::OutputStream::outputFileName(rset, "RFT") - }; - - { - const auto xRFT = RFTRresults { - rft, "OP_1", RftDate{ 2008, 10, 10 } - }; - - const auto thick = 25.0f; // cm - - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 1), 1*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 2), 2*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 3), 3*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 4), 4*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 5), 5*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 6), 6*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 7), 7*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 8), 8*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 9), 9*thick + thick/2.0f, 1.0e-10f); - - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 1), 1.184307920059215e+02f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 2), 1.283000246730817e+02f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 3), 1.381692573402418e+02f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 4), 1.480384900074019e+02f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 5), 1.579077226745621e+02f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 6), 1.677769553417222e+02f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 7), 1.776461880088823e+02f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 8), 1.875154206760424e+02f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 9), 1.973846533432026e+02f, 1.0e-10f); - - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 1), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 2), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 3), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 4), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 5), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 6), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 7), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 8), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 9), 0.15f, 1.0e-10f); - - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 1), 0.30f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 2), 0.35f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 3), 0.40f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 4), 0.45f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 5), 0.50f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 6), 0.55f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 7), 0.60f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 8), 0.65f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 9), 0.70f, 1.0e-10f); - } - - { - const auto xRFT = RFTRresults { - rft, "OP_2", RftDate{ 2008, 10, 10 } - }; - - const auto thick = 25.0f; // cm - - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 4), 4*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 5), 5*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 6), 6*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 7), 7*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 8), 8*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 9), 9*thick + thick/2.0f, 1.0e-10f); - - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 4), 1.480384900074019e+02f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 5), 1.579077226745621e+02f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 6), 1.677769553417222e+02f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 7), 1.776461880088823e+02f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 8), 1.875154206760424e+02f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 9), 1.973846533432026e+02f, 1.0e-10f); - - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 4), 0.45f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 5), 0.40f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 6), 0.35f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 7), 0.30f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 8), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 9), 0.20f, 1.0e-10f); - - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 4), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 5), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 6), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 7), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 8), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 9), 0.25f, 1.0e-10f); - } - - { - const auto xRFT = RFTRresults { - rft, "OP_2", RftDate{ 2008, 11, 10 } - }; - - const auto thick = 25.0f; // cm - - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 4), 4*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 5), 5*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 6), 6*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 7), 7*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 8), 8*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 9), 9*thick + thick/2.0f, 1.0e-10f); - - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 4), 1.480384900074019e+02f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 5), 1.579077226745621e+02f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 6), 1.677769553417222e+02f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 7), 1.776461880088823e+02f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 8), 1.875154206760424e+02f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 9), 1.973846533432026e+02f, 1.0e-10f); - - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 4), 0.45f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 5), 0.40f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 6), 0.35f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 7), 0.30f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 8), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 9), 0.20f, 1.0e-10f); - - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 4), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 5), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 6), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 7), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 8), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 9), 0.25f, 1.0e-10f); - } - - { - const auto date = RftDate{2008, 10, 10}; - - BOOST_CHECK(rft.hasArray("WELLETC", "OP_1", date)); - - const auto& welletc = rft.getRft("WELLETC", "OP_1", date); - - BOOST_CHECK_EQUAL(welletc[ 0], " HR"); - BOOST_CHECK_EQUAL(welletc[ 1], "OP_1"); - BOOST_CHECK_EQUAL(welletc[ 2], ""); - BOOST_CHECK_EQUAL(welletc[ 3], " CM"); - BOOST_CHECK_EQUAL(welletc[ 4], " ATMA"); - BOOST_CHECK_EQUAL(welletc[ 5], "R"); - BOOST_CHECK_EQUAL(welletc[ 6], "STANDARD"); - BOOST_CHECK_EQUAL(welletc[ 7], " SCC/HR"); - BOOST_CHECK_EQUAL(welletc[ 8], " SCC/HR"); - BOOST_CHECK_EQUAL(welletc[ 9], " RCC/HR"); - BOOST_CHECK_EQUAL(welletc[10], " CM/SEC"); - // No check for welletc[11] - BOOST_CHECK_EQUAL(welletc[12], " CP"); - BOOST_CHECK_EQUAL(welletc[13], " GM/SCC"); - BOOST_CHECK_EQUAL(welletc[14], " GM/HR"); - BOOST_CHECK_EQUAL(welletc[15], " GM/GM"); - } - - { - const auto date = RftDate{2008, 10, 10}; - - BOOST_CHECK(rft.hasArray("WELLETC", "OP_2", date)); - - const auto& welletc = rft.getRft("WELLETC", "OP_2", date); - - BOOST_CHECK_EQUAL(welletc[ 0], " HR"); - BOOST_CHECK_EQUAL(welletc[ 1], "OP_2"); - BOOST_CHECK_EQUAL(welletc[ 2], ""); - BOOST_CHECK_EQUAL(welletc[ 3], " CM"); - BOOST_CHECK_EQUAL(welletc[ 4], " ATMA"); - BOOST_CHECK_EQUAL(welletc[ 5], "R"); - BOOST_CHECK_EQUAL(welletc[ 6], "STANDARD"); - BOOST_CHECK_EQUAL(welletc[ 7], " SCC/HR"); - BOOST_CHECK_EQUAL(welletc[ 8], " SCC/HR"); - BOOST_CHECK_EQUAL(welletc[ 9], " RCC/HR"); - BOOST_CHECK_EQUAL(welletc[10], " CM/SEC"); - // No check for welletc[11] - BOOST_CHECK_EQUAL(welletc[12], " CP"); - BOOST_CHECK_EQUAL(welletc[13], " GM/SCC"); - BOOST_CHECK_EQUAL(welletc[14], " GM/HR"); - BOOST_CHECK_EQUAL(welletc[15], " GM/GM"); - } - - { - const auto date = RftDate{2008, 11, 10}; - - BOOST_CHECK(rft.hasArray("WELLETC", "OP_2", date)); - - const auto& welletc = rft.getRft("WELLETC", "OP_2", date); - - BOOST_CHECK_EQUAL(welletc[ 0], " HR"); - BOOST_CHECK_EQUAL(welletc[ 1], "OP_2"); - BOOST_CHECK_EQUAL(welletc[ 2], ""); - BOOST_CHECK_EQUAL(welletc[ 3], " CM"); - BOOST_CHECK_EQUAL(welletc[ 4], " ATMA"); - BOOST_CHECK_EQUAL(welletc[ 5], "R"); - BOOST_CHECK_EQUAL(welletc[ 6], "STANDARD"); - BOOST_CHECK_EQUAL(welletc[ 7], " SCC/HR"); - BOOST_CHECK_EQUAL(welletc[ 8], " SCC/HR"); - BOOST_CHECK_EQUAL(welletc[ 9], " RCC/HR"); - BOOST_CHECK_EQUAL(welletc[10], " CM/SEC"); - // No check for welletc[11] - BOOST_CHECK_EQUAL(welletc[12], " CP"); - BOOST_CHECK_EQUAL(welletc[13], " GM/SCC"); - BOOST_CHECK_EQUAL(welletc[14], " GM/HR"); - BOOST_CHECK_EQUAL(welletc[15], " GM/GM"); - } - } -} - -BOOST_AUTO_TEST_CASE(PVT_M_Units) -{ - using RftDate = ::Opm::EclIO::ERft::RftDate; - - const auto rset = RSet { "TESTRFT" }; - const auto model = Setup{ "testrft.DATA" }; - const auto usys = ::Opm::UnitSystem::newPVT_M(); - - { - auto rftFile = ::Opm::EclIO::OutputStream::RFT { - rset, ::Opm::EclIO::OutputStream::Formatted { false }, - ::Opm::EclIO::OutputStream::RFT::OpenExisting{ false } - }; - - const auto reportStep = 2; - const auto elapsed = model.sched.seconds(reportStep); - const auto& grid = model.es.getInputGrid(); - - ::Opm::RftIO::write(reportStep, elapsed, usys, grid, - model.sched, wellSol(grid), rftFile); - } - - { - const auto rft = ::Opm::EclIO::ERft { - ::Opm::EclIO::OutputStream::outputFileName(rset, "RFT") - }; - - { - const auto xRFT = RFTRresults { - rft, "OP_1", RftDate{ 2008, 10, 10 } - }; - - const auto thick = 0.25f; - - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 1), 1*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 2), 2*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 3), 3*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 4), 4*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 5), 5*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 6), 6*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 7), 7*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 8), 8*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 9), 9*thick + thick/2.0f, 1.0e-10f); - - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 1), 1.184307920059215e+02f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 2), 1.283000246730817e+02f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 3), 1.381692573402418e+02f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 4), 1.480384900074019e+02f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 5), 1.579077226745621e+02f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 6), 1.677769553417222e+02f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 7), 1.776461880088823e+02f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 8), 1.875154206760424e+02f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 9), 1.973846533432026e+02f, 1.0e-10f); - - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 1), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 2), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 3), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 4), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 5), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 6), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 7), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 8), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 9), 0.15f, 1.0e-10f); - - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 1), 0.30f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 2), 0.35f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 3), 0.40f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 4), 0.45f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 5), 0.50f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 6), 0.55f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 7), 0.60f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 8), 0.65f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 9), 0.70f, 1.0e-10f); - } - - { - const auto xRFT = RFTRresults { - rft, "OP_2", RftDate{ 2008, 10, 10 } - }; - - const auto thick = 0.25f; - - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 4), 4*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 5), 5*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 6), 6*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 7), 7*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 8), 8*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 9), 9*thick + thick/2.0f, 1.0e-10f); - - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 4), 1.480384900074019e+02f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 5), 1.579077226745621e+02f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 6), 1.677769553417222e+02f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 7), 1.776461880088823e+02f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 8), 1.875154206760424e+02f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 9), 1.973846533432026e+02f, 1.0e-10f); - - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 4), 0.45f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 5), 0.40f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 6), 0.35f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 7), 0.30f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 8), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 9), 0.20f, 1.0e-10f); - - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 4), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 5), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 6), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 7), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 8), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 9), 0.25f, 1.0e-10f); - } - - { - const auto date = RftDate{2008, 10, 10}; - - BOOST_CHECK(rft.hasArray("WELLETC", "OP_1", date)); - - const auto& welletc = rft.getRft("WELLETC", "OP_1", date); - - BOOST_CHECK_EQUAL(welletc[ 0], " DAYS"); - BOOST_CHECK_EQUAL(welletc[ 1], "OP_1"); - BOOST_CHECK_EQUAL(welletc[ 2], ""); - BOOST_CHECK_EQUAL(welletc[ 3], " METRES"); - BOOST_CHECK_EQUAL(welletc[ 4], " ATMA"); - BOOST_CHECK_EQUAL(welletc[ 5], "R"); - BOOST_CHECK_EQUAL(welletc[ 6], "STANDARD"); - BOOST_CHECK_EQUAL(welletc[ 7], " SM3/DAY"); - BOOST_CHECK_EQUAL(welletc[ 8], " SM3/DAY"); - BOOST_CHECK_EQUAL(welletc[ 9], " RM3/DAY"); - BOOST_CHECK_EQUAL(welletc[10], " M/SEC"); - // No check for welletc[11] - BOOST_CHECK_EQUAL(welletc[12], " CP"); - BOOST_CHECK_EQUAL(welletc[13], " KG/SM3"); - BOOST_CHECK_EQUAL(welletc[14], " KG/DAY"); - BOOST_CHECK_EQUAL(welletc[15], " KG/KG"); - } - - { - const auto date = RftDate{2008, 10, 10}; - - BOOST_CHECK(rft.hasArray("WELLETC", "OP_2", date)); - - const auto& welletc = rft.getRft("WELLETC", "OP_2", date); - - BOOST_CHECK_EQUAL(welletc[ 0], " DAYS"); - BOOST_CHECK_EQUAL(welletc[ 1], "OP_2"); - BOOST_CHECK_EQUAL(welletc[ 2], ""); - BOOST_CHECK_EQUAL(welletc[ 3], " METRES"); - BOOST_CHECK_EQUAL(welletc[ 4], " ATMA"); - BOOST_CHECK_EQUAL(welletc[ 5], "R"); - BOOST_CHECK_EQUAL(welletc[ 6], "STANDARD"); - BOOST_CHECK_EQUAL(welletc[ 7], " SM3/DAY"); - BOOST_CHECK_EQUAL(welletc[ 8], " SM3/DAY"); - BOOST_CHECK_EQUAL(welletc[ 9], " RM3/DAY"); - BOOST_CHECK_EQUAL(welletc[10], " M/SEC"); - // No check for welletc[11] - BOOST_CHECK_EQUAL(welletc[12], " CP"); - BOOST_CHECK_EQUAL(welletc[13], " KG/SM3"); - BOOST_CHECK_EQUAL(welletc[14], " KG/DAY"); - BOOST_CHECK_EQUAL(welletc[15], " KG/KG"); - } - } - - { - auto rftFile = ::Opm::EclIO::OutputStream::RFT { - rset, ::Opm::EclIO::OutputStream::Formatted { false }, - ::Opm::EclIO::OutputStream::RFT::OpenExisting{ true } - }; - - const auto reportStep = 3; - const auto elapsed = model.sched.seconds(reportStep); - const auto& grid = model.es.getInputGrid(); - - ::Opm::RftIO::write(reportStep, elapsed, usys, grid, - model.sched, wellSol(grid), rftFile); - } - - { - const auto rft = ::Opm::EclIO::ERft { - ::Opm::EclIO::OutputStream::outputFileName(rset, "RFT") - }; - - { - const auto xRFT = RFTRresults { - rft, "OP_1", RftDate{ 2008, 10, 10 } - }; - - const auto thick = 0.25; - - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 1), 1*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 2), 2*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 3), 3*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 4), 4*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 5), 5*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 6), 6*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 7), 7*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 8), 8*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(9, 9, 9), 9*thick + thick/2.0f, 1.0e-10f); - - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 1), 1.184307920059215e+02f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 2), 1.283000246730817e+02f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 3), 1.381692573402418e+02f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 4), 1.480384900074019e+02f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 5), 1.579077226745621e+02f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 6), 1.677769553417222e+02f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 7), 1.776461880088823e+02f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 8), 1.875154206760424e+02f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(9, 9, 9), 1.973846533432026e+02f, 1.0e-10f); - - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 1), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 2), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 3), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 4), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 5), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 6), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 7), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 8), 0.15f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(9, 9, 9), 0.15f, 1.0e-10f); - - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 1), 0.30f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 2), 0.35f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 3), 0.40f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 4), 0.45f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 5), 0.50f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 6), 0.55f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 7), 0.60f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 8), 0.65f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(9, 9, 9), 0.70f, 1.0e-10f); - } - - { - const auto xRFT = RFTRresults { - rft, "OP_2", RftDate{ 2008, 10, 10 } - }; - - const auto thick = 0.25; - - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 4), 4*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 5), 5*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 6), 6*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 7), 7*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 8), 8*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 9), 9*thick + thick/2.0f, 1.0e-10f); - - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 4), 1.480384900074019e+02f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 5), 1.579077226745621e+02f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 6), 1.677769553417222e+02f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 7), 1.776461880088823e+02f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 8), 1.875154206760424e+02f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 9), 1.973846533432026e+02f, 1.0e-10f); - - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 4), 0.45f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 5), 0.40f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 6), 0.35f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 7), 0.30f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 8), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 9), 0.20f, 1.0e-10f); - - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 4), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 5), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 6), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 7), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 8), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 9), 0.25f, 1.0e-10f); - } - - { - const auto xRFT = RFTRresults { - rft, "OP_2", RftDate{ 2008, 11, 10 } - }; - - const auto thick = 0.25; - - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 4), 4*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 5), 5*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 6), 6*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 7), 7*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 8), 8*thick + thick/2.0f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.depth(4, 4, 9), 9*thick + thick/2.0f, 1.0e-10f); - - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 4), 1.480384900074019e+02f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 5), 1.579077226745621e+02f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 6), 1.677769553417222e+02f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 7), 1.776461880088823e+02f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 8), 1.875154206760424e+02f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.pressure(4, 4, 9), 1.973846533432026e+02f, 1.0e-10f); - - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 4), 0.45f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 5), 0.40f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 6), 0.35f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 7), 0.30f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 8), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.sgas(4, 4, 9), 0.20f, 1.0e-10f); - - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 4), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 5), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 6), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 7), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 8), 0.25f, 1.0e-10f); - BOOST_CHECK_CLOSE(xRFT.swat(4, 4, 9), 0.25f, 1.0e-10f); - } - - { - const auto date = RftDate{2008, 10, 10}; - - BOOST_CHECK(rft.hasArray("WELLETC", "OP_1", date)); - - const auto& welletc = rft.getRft("WELLETC", "OP_1", date); - - BOOST_CHECK_EQUAL(welletc[ 0], " DAYS"); - BOOST_CHECK_EQUAL(welletc[ 1], "OP_1"); - BOOST_CHECK_EQUAL(welletc[ 2], ""); - BOOST_CHECK_EQUAL(welletc[ 3], " METRES"); - BOOST_CHECK_EQUAL(welletc[ 4], " ATMA"); - BOOST_CHECK_EQUAL(welletc[ 5], "R"); - BOOST_CHECK_EQUAL(welletc[ 6], "STANDARD"); - BOOST_CHECK_EQUAL(welletc[ 7], " SM3/DAY"); - BOOST_CHECK_EQUAL(welletc[ 8], " SM3/DAY"); - BOOST_CHECK_EQUAL(welletc[ 9], " RM3/DAY"); - BOOST_CHECK_EQUAL(welletc[10], " M/SEC"); - // No check for welletc[11] - BOOST_CHECK_EQUAL(welletc[12], " CP"); - BOOST_CHECK_EQUAL(welletc[13], " KG/SM3"); - BOOST_CHECK_EQUAL(welletc[14], " KG/DAY"); - BOOST_CHECK_EQUAL(welletc[15], " KG/KG"); - } - - { - const auto date = RftDate{2008, 10, 10}; - - BOOST_CHECK(rft.hasArray("WELLETC", "OP_2", date)); - - const auto& welletc = rft.getRft("WELLETC", "OP_2", date); - - BOOST_CHECK_EQUAL(welletc[ 0], " DAYS"); - BOOST_CHECK_EQUAL(welletc[ 1], "OP_2"); - BOOST_CHECK_EQUAL(welletc[ 2], ""); - BOOST_CHECK_EQUAL(welletc[ 3], " METRES"); - BOOST_CHECK_EQUAL(welletc[ 4], " ATMA"); - BOOST_CHECK_EQUAL(welletc[ 5], "R"); - BOOST_CHECK_EQUAL(welletc[ 6], "STANDARD"); - BOOST_CHECK_EQUAL(welletc[ 7], " SM3/DAY"); - BOOST_CHECK_EQUAL(welletc[ 8], " SM3/DAY"); - BOOST_CHECK_EQUAL(welletc[ 9], " RM3/DAY"); - BOOST_CHECK_EQUAL(welletc[10], " M/SEC"); - // No check for welletc[11] - BOOST_CHECK_EQUAL(welletc[12], " CP"); - BOOST_CHECK_EQUAL(welletc[13], " KG/SM3"); - BOOST_CHECK_EQUAL(welletc[14], " KG/DAY"); - BOOST_CHECK_EQUAL(welletc[15], " KG/KG"); - } - - { - const auto date = RftDate{2008, 11, 10}; - - BOOST_CHECK(rft.hasArray("WELLETC", "OP_2", date)); - - const auto& welletc = rft.getRft("WELLETC", "OP_2", date); - - BOOST_CHECK_EQUAL(welletc[ 0], " DAYS"); - BOOST_CHECK_EQUAL(welletc[ 1], "OP_2"); - BOOST_CHECK_EQUAL(welletc[ 2], ""); - BOOST_CHECK_EQUAL(welletc[ 3], " METRES"); - BOOST_CHECK_EQUAL(welletc[ 4], " ATMA"); - BOOST_CHECK_EQUAL(welletc[ 5], "R"); - BOOST_CHECK_EQUAL(welletc[ 6], "STANDARD"); - BOOST_CHECK_EQUAL(welletc[ 7], " SM3/DAY"); - BOOST_CHECK_EQUAL(welletc[ 8], " SM3/DAY"); - BOOST_CHECK_EQUAL(welletc[ 9], " RM3/DAY"); - BOOST_CHECK_EQUAL(welletc[10], " M/SEC"); - // No check for welletc[11] - BOOST_CHECK_EQUAL(welletc[12], " CP"); - BOOST_CHECK_EQUAL(welletc[13], " KG/SM3"); - BOOST_CHECK_EQUAL(welletc[14], " KG/DAY"); - BOOST_CHECK_EQUAL(welletc[15], " KG/KG"); - } - } -} - -BOOST_AUTO_TEST_SUITE_END() // Using_Direct_Write diff --git a/ThirdParty/custom-opm-common/opm-common/tests/test_Restart.cpp b/ThirdParty/custom-opm-common/opm-common/tests/test_Restart.cpp deleted file mode 100644 index b3d85f076f..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/test_Restart.cpp +++ /dev/null @@ -1,943 +0,0 @@ -/* - Copyright 2014 Statoil IT - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ -#include "config.h" - -#include - -#define BOOST_TEST_MODULE EclipseIO -#include - -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -#include - -#include - -#include - -using namespace Opm; - -namespace { - int ecl_file_get_num_named_kw(Opm::EclIO::ERst& rst, - const std::string& kw) - { - int count = 0; - for (const auto& step : rst.listOfReportStepNumbers()) { - for (const auto& vec : rst.listOfRstArrays(step)) { - count += std::get<0>(vec) == kw; - } - } - - return count; - } - - EclIO::EclFile::EclEntry - ecl_file_iget_named_kw(Opm::EclIO::ERst& rst, - const std::string& kw, - const int seqnum) - { - for (const auto& vec : rst.listOfRstArrays(seqnum)) { - if (std::get<0>(vec) == kw) { - return vec; - } - } - - return EclIO::EclFile::EclEntry{ "NoSuchKeyword", Opm::EclIO::eclArrType::MESS, 0 }; - } - - EclIO::eclArrType ecl_kw_get_type(const EclIO::EclFile::EclEntry& vec) - { - return std::get<1>(vec); - } -} - - -namespace Opm { -namespace data { - -/* - * Some test specific equivalence definitions and pretty-printing. Not fit as a - * general purpose implementation, but does its job for testing and - * pretty-pringing for debugging purposes. - */ - -std::ostream& operator<<( std::ostream& stream, const Rates& r ) { - return stream << "{ " - << "wat: " << r.get( Rates::opt::wat, 0.0 ) << ", " - << "oil: " << r.get( Rates::opt::oil, 0.0 ) << ", " - << "gas: " << r.get( Rates::opt::gas, 0.0 ) << " " - << "}"; -} - -std::ostream& operator<<( std::ostream& stream, const Connection& c ) { - return stream << "{ index: " - << c.index << ", " - << c.rates << ", " - << c.pressure << " }"; -} - -std::ostream& operator<<( std::ostream& stream, - const std::map< std::string, Well >& m ) { - stream << "\n"; - - for( const auto& p : m ) { - stream << p.first << ": \n" - << "\t" << "bhp: " << p.second.bhp << "\n" - << "\t" << "temp: " << p.second.temperature << "\n" - << "\t" << "rates: " << p.second.rates << "\n" - << "\t" << "connections: [\n"; - - for( const auto& c : p.second.connections ) - stream << c << " "; - - stream << "]\n"; - } - - return stream; -} - -} - - -data::Wells mkWells() { - data::Rates r1, r2, rc1, rc2, rc3; - r1.set( data::Rates::opt::wat, 5.67 ); - r1.set( data::Rates::opt::oil, 6.78 ); - r1.set( data::Rates::opt::gas, 7.89 ); - - r2.set( data::Rates::opt::wat, 8.90 ); - r2.set( data::Rates::opt::oil, 9.01 ); - r2.set( data::Rates::opt::gas, 10.12 ); - - rc1.set( data::Rates::opt::wat, 20.41 ); - rc1.set( data::Rates::opt::oil, 21.19 ); - rc1.set( data::Rates::opt::gas, 22.41 ); - - rc2.set( data::Rates::opt::wat, 23.19 ); - rc2.set( data::Rates::opt::oil, 24.41 ); - rc2.set( data::Rates::opt::gas, 25.19 ); - - rc3.set( data::Rates::opt::wat, 26.41 ); - rc3.set( data::Rates::opt::oil, 27.19 ); - rc3.set( data::Rates::opt::gas, 28.41 ); - - data::Well w1, w2; - w1.rates = r1; - w1.thp = 1.0; - w1.bhp = 1.23; - w1.temperature = 3.45; - w1.control = 1; - - /* - * the completion keys (active indices) and well names correspond to the - * input deck. All other entries in the well structures are arbitrary. - */ - w1.connections.push_back( { 88, rc1, 30.45, 123.4, 543.21, 0.62, 0.15, 1.0e3 } ); - w1.connections.push_back( { 288, rc2, 33.19, 123.4, 432.1, 0.26, 0.45, 2.56 } ); - - w2.rates = r2; - w2.thp = 2.0; - w2.bhp = 2.34; - w2.temperature = 4.56; - w2.control = 2; - w2.connections.push_back( { 188, rc3, 36.22, 123.4, 256.1, 0.55, 0.0125, 314.15 } ); - - { - data::Wells wellRates; - - wellRates["OP_1"] = w1; - wellRates["OP_2"] = w2; - - return wellRates; - } -} - -data::Solution mkSolution( int numCells ) { - - using measure = UnitSystem::measure; - using namespace data; - - data::Solution sol = { - { "PRESSURE", { measure::pressure, std::vector( numCells ), TargetType::RESTART_SOLUTION } }, - { "TEMP", { measure::temperature, std::vector( numCells ), TargetType::RESTART_SOLUTION } }, - { "SWAT", { measure::identity, std::vector( numCells ), TargetType::RESTART_SOLUTION } }, - { "SGAS", { measure::identity, std::vector( numCells ), TargetType::RESTART_SOLUTION } } - }; - - - sol.data("PRESSURE").assign( numCells, 6.0 ); - sol.data("TEMP").assign( numCells, 7.0 ); - sol.data("SWAT").assign( numCells, 8.0 ); - sol.data("SGAS").assign( numCells, 9.0 ); - - fun::iota rsi( 300, 300 + numCells ); - fun::iota rvi( 400, 400 + numCells ); - - sol.insert( "RS", measure::identity, { rsi.begin(), rsi.end() } , TargetType::RESTART_SOLUTION ); - sol.insert( "RV", measure::identity, { rvi.begin(), rvi.end() } , TargetType::RESTART_SOLUTION ); - - return sol; -} - -Opm::SummaryState sim_state() -{ - auto state = Opm::SummaryState{std::chrono::system_clock::now()}; - - state.update("WOPR:OP_1" , 1.0); - state.update("WWPR:OP_1" , 2.0); - state.update("WGPR:OP_1" , 3.0); - state.update("WVPR:OP_1" , 4.0); - state.update("WOPT:OP_1" , 10.0); - state.update("WWPT:OP_1" , 20.0); - state.update("WGPT:OP_1" , 30.0); - state.update("WVPT:OP_1" , 40.0); - state.update("WWIR:OP_1" , 0.0); - state.update("WGIR:OP_1" , 0.0); - state.update("WWIT:OP_1" , 0.0); - state.update("WGIT:OP_1" , 0.0); - state.update("WVIT:OP_1" , 0.0); - state.update("WWCT:OP_1" , 0.625); - state.update("WGOR:OP_1" , 234.5); - state.update("WBHP:OP_1" , 314.15); - state.update("WOPTH:OP_1", 345.6); - state.update("WWPTH:OP_1", 456.7); - state.update("WGPTH:OP_1", 567.8); - state.update("WWITH:OP_1", 0.0); - state.update("WGITH:OP_1", 0.0); - state.update("WGVIR:OP_1", 0.0); - state.update("WWVIR:OP_1", 0.0); - - state.update("WOPR:OP_2" , 0.0); - state.update("WWPR:OP_2" , 0.0); - state.update("WGPR:OP_2" , 0.0); - state.update("WVPR:OP_2" , 0.0); - state.update("WOPT:OP_2" , 0.0); - state.update("WWPT:OP_2" , 0.0); - state.update("WGPT:OP_2" , 0.0); - state.update("WVPT:OP_2" , 0.0); - state.update("WWIR:OP_2" , 100.0); - state.update("WGIR:OP_2" , 200.0); - state.update("WWIT:OP_2" , 1000.0); - state.update("WGIT:OP_2" , 2000.0); - state.update("WVIT:OP_2" , 1234.5); - state.update("WWCT:OP_2" , 0.0); - state.update("WGOR:OP_2" , 0.0); - state.update("WBHP:OP_2" , 400.6); - state.update("WOPTH:OP_2", 0.0); - state.update("WWPTH:OP_2", 0.0); - state.update("WGPTH:OP_2", 0.0); - state.update("WWITH:OP_2", 1515.0); - state.update("WGITH:OP_2", 3030.0); - state.update("WGVIR:OP_2", 1234.0); - state.update("WWVIR:OP_2", 4321.0); - - state.update("WOPR:OP_3" , 11.0); - state.update("WWPR:OP_3" , 12.0); - state.update("WGPR:OP_3" , 13.0); - state.update("WVPR:OP_3" , 14.0); - state.update("WOPT:OP_3" , 110.0); - state.update("WWPT:OP_3" , 120.0); - state.update("WGPT:OP_3" , 130.0); - state.update("WVPT:OP_3" , 140.0); - state.update("WWIR:OP_3" , 0.0); - state.update("WGIR:OP_3" , 0.0); - state.update("WWIT:OP_3" , 0.0); - state.update("WGIT:OP_3" , 0.0); - state.update("WVIT:OP_3" , 0.0); - state.update("WWCT:OP_3" , 0.0625); - state.update("WGOR:OP_3" , 1234.5); - state.update("WBHP:OP_3" , 314.15); - state.update("WOPTH:OP_3", 2345.6); - state.update("WWPTH:OP_3", 3456.7); - state.update("WGPTH:OP_3", 4567.8); - state.update("WWITH:OP_3", 0.0); - state.update("WGITH:OP_3", 0.0); - state.update("WGVIR:OP_3", 0.0); - state.update("WWVIR:OP_3", 43.21); - - state.update("GOPR:OP" , 110.0); - state.update("GWPR:OP" , 120.0); - state.update("GGPR:OP" , 130.0); - state.update("GVPR:OP" , 140.0); - state.update("GOPT:OP" , 1100.0); - state.update("GWPT:OP" , 1200.0); - state.update("GGPT:OP" , 1300.0); - state.update("GVPT:OP" , 1400.0); - state.update("GWIR:OP" , - 256.0); - state.update("GGIR:OP" , - 65536.0); - state.update("GWIT:OP" , 31415.9); - state.update("GGIT:OP" , 27182.8); - state.update("GVIT:OP" , 44556.6); - state.update("GWCT:OP" , 0.625); - state.update("GGOR:OP" , 1234.5); - state.update("GGVIR:OP", 123.45); - state.update("GWVIR:OP", 1234.56); - state.update("GOPTH:OP", 5678.90); - state.update("GWPTH:OP", 6789.01); - state.update("GGPTH:OP", 7890.12); - state.update("GWITH:OP", 8901.23); - state.update("GGITH:OP", 9012.34); - - state.update("FOPR" , 1100.0); - state.update("FWPR" , 1200.0); - state.update("FGPR" , 1300.0); - state.update("FVPR" , 1400.0); - state.update("FOPT" , 11000.0); - state.update("FWPT" , 12000.0); - state.update("FGPT" , 13000.0); - state.update("FVPT" , 14000.0); - state.update("FWIR" , - 2560.0); - state.update("FGIR" , - 655360.0); - state.update("FWIT" , 314159.2); - state.update("FGIT" , 271828.1); - state.update("FVIT" , 445566.77); - state.update("FWCT" , 0.625); - state.update("FGOR" , 1234.5); - state.update("FOPTH", 56789.01); - state.update("FWPTH", 67890.12); - state.update("FGPTH", 78901.23); - state.update("FWITH", 89012.34); - state.update("FGITH", 90123.45); - state.update("FGVIR", 1234.56); - state.update("FWVIR", 12345.67); - - return state; -} - -struct Setup { - Deck deck; - EclipseState es; - const EclipseGrid& grid; - std::shared_ptr python; - Schedule schedule; - SummaryConfig summary_config; - - Setup( const char* path) : - deck( Parser().parseFile( path) ), - es( deck), - grid( es.getInputGrid( ) ), - python( std::make_shared() ), - schedule( deck, es, python ), - summary_config( deck, schedule, es.getTableManager( )) - { - auto& io_config = es.getIOConfig(); - io_config.setEclCompatibleRST(false); - } - -}; - - -RestartValue first_sim(const Setup& setup, SummaryState& st, bool write_double) { - EclipseIO eclWriter( setup.es, setup.grid, setup.schedule, setup.summary_config); - auto num_cells = setup.grid.getNumActive( ); - int report_step = 1; - auto start_time = setup.schedule.getStartTime(); - auto first_step = setup.schedule.simTime(report_step); - - auto sol = mkSolution( num_cells ); - auto wells = mkWells(); - RestartValue restart_value(sol, wells); - - eclWriter.writeTimeStep( st, - report_step, - false, - std::difftime(first_step, start_time), - restart_value, - write_double); - - return restart_value; -} - -RestartValue second_sim(const Setup& setup, SummaryState& summary_state, const std::vector& solution_keys) { - EclipseIO writer(setup.es, setup.grid, setup.schedule, setup.summary_config); - return writer.loadRestart( summary_state, solution_keys ); -} - - -void compare( const RestartValue& fst, - const RestartValue& snd, - const std::vector& solution_keys) { - - for (const auto& value : solution_keys) { - double tol = 0.00001; - const std::string& key = value.key; - auto first = fst.solution.data( key ).begin(); - auto second = snd.solution.data( key ).begin(); - - if (key == "TEMP") - tol *= 10; - - for( ; first != fst.solution.data( key).end(); ++first, ++second ) - BOOST_CHECK_CLOSE( *first, *second, tol ); - } - - BOOST_CHECK_EQUAL( fst.wells, snd.wells ); -} - - - - -BOOST_AUTO_TEST_CASE(EclipseReadWriteWellStateData) { - std::vector keys {{"PRESSURE" , UnitSystem::measure::pressure}, - {"SWAT" , UnitSystem::measure::identity}, - {"SGAS" , UnitSystem::measure::identity}, - {"TEMP" , UnitSystem::measure::temperature}}; - WorkArea test_area("test_restart"); - test_area.copyIn("BASE_SIM.DATA"); - test_area.copyIn("RESTART_SIM.DATA"); - - Setup base_setup("BASE_SIM.DATA"); - SummaryState st(std::chrono::system_clock::now()); - auto state1 = first_sim( base_setup , st, false ); - - Setup restart_setup("RESTART_SIM.DATA"); - auto state2 = second_sim( restart_setup , st , keys ); - compare(state1, state2 , keys); - - BOOST_CHECK_THROW( second_sim( restart_setup, st, {{"SOIL", UnitSystem::measure::pressure}} ) , std::runtime_error ); - BOOST_CHECK_THROW( second_sim( restart_setup, st, {{"SOIL", UnitSystem::measure::pressure, true}}) , std::runtime_error ); -} - - -BOOST_AUTO_TEST_CASE(ECL_FORMATTED) { - namespace OS = ::Opm::EclIO::OutputStream; - - WorkArea test_area("test_Restart"); - test_area.copyIn("BASE_SIM.DATA"); - - Setup base_setup("BASE_SIM.DATA"); - auto& io_config = base_setup.es.getIOConfig(); - { - auto num_cells = base_setup.grid.getNumActive( ); - auto cells = mkSolution( num_cells ); - auto wells = mkWells(); - auto sumState = sim_state(); - { - RestartValue restart_value(cells, wells); - - io_config.setEclCompatibleRST( false ); - restart_value.addExtra("EXTRA", UnitSystem::measure::pressure, {10,1,2,3}); - - const auto outputDir = test_area.currentWorkingDirectory(); - - { - const auto seqnum = 1; - auto rstFile = OS::Restart { - OS::ResultSet{ outputDir, "OPM_FILE" }, seqnum, - OS::Formatted{ false }, OS::Unified{ true } - }; - - RestartIO::save(rstFile, seqnum, - 100, - restart_value, - base_setup.es, - base_setup.grid, - base_setup.schedule, - sumState, - true); - } - - { - const auto rstFile = ::Opm::EclIO::OutputStream:: - outputFileName({outputDir, "OPM_FILE"}, "UNRST"); - - EclIO::ERst rst{ rstFile }; - - BOOST_CHECK_MESSAGE(rst.hasKey("SWAT"), "Restart file must have SWAT vector"); - BOOST_CHECK_MESSAGE(rst.hasKey("EXTRA"), "Restart file must have EXTRA vector"); - } - - io_config.setEclCompatibleRST( true ); - { - const auto seqnum = 1; - auto rstFile = OS::Restart { - OS::ResultSet{ outputDir, "ECL_FILE" }, seqnum, - OS::Formatted{ false }, OS::Unified{ true } - }; - - RestartIO::save(rstFile, seqnum, - 100, - restart_value, - base_setup.es, - base_setup.grid, - base_setup.schedule, - sumState, - true); - } - - { - const auto rstFile = ::Opm::EclIO::OutputStream:: - outputFileName({outputDir, "ECL_FILE"}, "UNRST"); - - EclIO::ERst rst{ rstFile }; - - BOOST_CHECK_MESSAGE(rst.hasKey("SWAT"), "Restart file must have SWAT vector"); - BOOST_CHECK_MESSAGE(!rst.hasKey("EXTRA"), "Restart file must NOT have EXTRA vector"); - BOOST_CHECK_MESSAGE(!rst.hasKey("OPM_IWEL"), "Restart file must NOT have OPM_IWEL vector"); - BOOST_CHECK_MESSAGE(!rst.hasKey("OPM_XWEL"), "Restart file must NOT have OPM_XWEL vector"); - } - } - } -} - - - - - -void compare_equal( const RestartValue& fst, - const RestartValue& snd , - const std::vector& keys) { - - for (const auto& value : keys) { - const std::string& key = value.key; - auto first = fst.solution.data( key ).begin(); - auto second = snd.solution.data( key ).begin(); - - for( ; first != fst.solution.data( key ).end(); ++first, ++second ) - BOOST_CHECK_EQUAL( *first, *second); - } - - BOOST_CHECK_EQUAL( fst.wells, snd.wells ); - //BOOST_CHECK_EQUAL( fst.extra, snd.extra ); -} - -BOOST_AUTO_TEST_CASE(EclipseReadWriteWellStateData_double) { - /* - Observe that the purpose of this test is to verify that with - write_double == true we can load solution fields which are - bitwise equal to those we stored. Unfortunately the scaling back - and forth between SI units and output units is enough to break - this equality for the pressure. For this test we therefor only - consider the saturations which have identity unit. - */ - std::vector solution_keys {RestartKey("SWAT", UnitSystem::measure::identity), - RestartKey("SGAS", UnitSystem::measure::identity)}; - - WorkArea test_area("test_Restart"); - test_area.copyIn("RESTART_SIM.DATA"); - test_area.copyIn("BASE_SIM.DATA"); - Setup base_setup("BASE_SIM.DATA"); - SummaryState st(std::chrono::system_clock::now()); - - auto state1 = first_sim( base_setup , st, true); - Setup restart_setup("RESTART_SIM.DATA"); - - auto state2 = second_sim( restart_setup, st, solution_keys ); - compare_equal( state1 , state2 , solution_keys); -} - - -BOOST_AUTO_TEST_CASE(WriteWrongSOlutionSize) { - namespace OS = ::Opm::EclIO::OutputStream; - - WorkArea test_area("test_Restart"); - test_area.copyIn("BASE_SIM.DATA"); - test_area.copyIn("RESTART_SIM.DATA"); - Setup setup("BASE_SIM.DATA"); - { - auto num_cells = setup.grid.getNumActive( ) + 1; - auto cells = mkSolution( num_cells ); - auto wells = mkWells(); - Opm::SummaryState sumState(std::chrono::system_clock::now()); - - const auto seqnum = 1; - auto rstFile = OS::Restart { - OS::ResultSet { test_area.currentWorkingDirectory(), "FILE" }, seqnum, - OS::Formatted { false }, OS::Unified { true } - }; - - BOOST_CHECK_THROW( RestartIO::save(rstFile, seqnum, - 100, - RestartValue(cells, wells), - setup.es, - setup.grid , - setup.schedule, - sumState), - std::runtime_error); - } -} - - -BOOST_AUTO_TEST_CASE(ExtraData_KEYS) { - Setup setup("BASE_SIM.DATA"); - auto num_cells = setup.grid.getNumActive( ); - auto cells = mkSolution( num_cells ); - auto wells = mkWells(); - RestartValue restart_value(cells, wells); - - BOOST_CHECK_THROW( restart_value.addExtra("TOO-LONG-KEY", {0,1,2}), std::runtime_error); - - // Keys must be unique - restart_value.addExtra("KEY", {0,1,1}); - BOOST_CHECK_THROW( restart_value.addExtra("KEY", {0,1,1}), std::runtime_error); - - /* The keys must be unique across solution and extra_data */ - BOOST_CHECK_THROW( restart_value.addExtra("PRESSURE", {0,1}), std::runtime_error); - - /* Must avoid using reserved keys like 'LOGIHEAD' */ - BOOST_CHECK_THROW( restart_value.addExtra("LOGIHEAD", {0,1}), std::runtime_error); -} - -BOOST_AUTO_TEST_CASE(ExtraData_content) { - namespace OS = ::Opm::EclIO::OutputStream; - - WorkArea test_area("test_Restart"); - test_area.copyIn("BASE_SIM.DATA"); - test_area.copyIn("RESTART_SIM.DATA"); - Setup setup("BASE_SIM.DATA"); - { - auto num_cells = setup.grid.getNumActive( ); - auto cells = mkSolution( num_cells ); - auto wells = mkWells(); - const auto& units = setup.es.getUnits(); - { - RestartValue restart_value(cells, wells); - SummaryState st(std::chrono::system_clock::now()); - const auto sumState = sim_state(); - - restart_value.addExtra("EXTRA", UnitSystem::measure::pressure, {10,1,2,3}); - - const auto outputDir = test_area.currentWorkingDirectory(); - - { - const auto seqnum = 1; - auto rstFile = OS::Restart { - OS::ResultSet { outputDir, "FILE" }, seqnum, - OS::Formatted { false }, OS::Unified{ true } - }; - - RestartIO::save(rstFile, seqnum, - 100, - restart_value, - setup.es, - setup.grid, - setup.schedule, - sumState); - } - - const auto rstFile = ::Opm::EclIO::OutputStream:: - outputFileName({outputDir, "FILE"}, "UNRST"); - - { - EclIO::ERst rst{ rstFile }; - BOOST_CHECK_MESSAGE( rst.hasKey("EXTRA"), "Restart file is expexted to have EXTRA vector"); - - const auto& ex = rst.getRst("EXTRA", 1, 0); - BOOST_CHECK_CLOSE( 10 , units.to_si( UnitSystem::measure::pressure, ex[0] ), 0.00001); - BOOST_CHECK_CLOSE( units.from_si( UnitSystem::measure::pressure, 3), ex[3], 0.00001); - } - - BOOST_CHECK_THROW( RestartIO::load( rstFile , 1 , st, {}, setup.es, setup.grid , setup.schedule, - {{"NOT-THIS", UnitSystem::measure::identity, true}}) , std::runtime_error ); - { - const auto rst_value = RestartIO::load(rstFile , 1 , st, - /* solution_keys = */ { - RestartKey("SWAT", UnitSystem::measure::identity), - RestartKey("NO" , UnitSystem::measure::identity, false) - }, - setup.es, setup.grid , setup.schedule, - /* extra_keys = */ { - {"EXTRA" , UnitSystem::measure::pressure, true} , - {"EXTRA2", UnitSystem::measure::identity, false} - }); - - BOOST_CHECK(!rst_value.hasExtra("EXTRA2")); - BOOST_CHECK( rst_value.hasExtra("EXTRA")); - BOOST_CHECK_THROW(rst_value.getExtra("EXTRA2"), std::invalid_argument); - const auto& extraval = rst_value.getExtra("EXTRA"); - const std::vector expected = {10,1,2,3}; - - BOOST_CHECK_EQUAL( rst_value.solution.has("NO") , false ); - for (size_t i=0; i < expected.size(); i++) - BOOST_CHECK_CLOSE(extraval[i], expected[i], 1e-5); - } - } - } -} - - -BOOST_AUTO_TEST_CASE(STORE_THPRES) { - namespace OS = ::Opm::EclIO::OutputStream; - - WorkArea test_area("test_Restart_THPRES"); - test_area.copyIn("BASE_SIM_THPRES.DATA"); - Setup base_setup("BASE_SIM_THPRES.DATA"); - { - auto num_cells = base_setup.grid.getNumActive( ); - auto cells = mkSolution( num_cells ); - auto wells = mkWells(); - const auto outputDir = test_area.currentWorkingDirectory(); - { - RestartValue restart_value(cells, wells); - RestartValue restart_value2(cells, wells); - - /* Missing THPRES data in extra container. */ - /* Because it proved to difficult to update the legacy simulators - to pass THPRES values when writing restart files this BOOST_CHECK_THROW - had to be disabled. The RestartIO::save() function will just log a warning. - - BOOST_CHECK_THROW( RestartIO::save("FILE.UNRST", 1 , - 100, - restart_value, - setup.es, - setup.grid, - setup.schedule), std::runtime_error); - */ - - restart_value.addExtra("THRESHPR", UnitSystem::measure::pressure, {0,1}); - const auto sumState = sim_state(); - - /* THPRES data has wrong size in extra container. */ - { - const auto seqnum = 1; - auto rstFile = OS::Restart { - OS::ResultSet { outputDir, "FILE" }, seqnum, - OS::Formatted { false }, OS::Unified { true } - }; - - BOOST_CHECK_THROW( RestartIO::save(rstFile, seqnum, - 100, - restart_value, - base_setup.es, - base_setup.grid, - base_setup.schedule, - sumState), - std::runtime_error); - } - - int num_regions = base_setup.es.getTableManager().getEqldims().getNumEquilRegions(); - std::vector thpres(num_regions * num_regions, 78); - restart_value2.addExtra("THRESHPR", UnitSystem::measure::pressure, thpres); - restart_value2.addExtra("EXTRA", UnitSystem::measure::pressure, thpres); - - { - const auto seqnum = 1; - auto rstFile = OS::Restart { - OS::ResultSet { outputDir, "FILE2" }, seqnum, - OS::Formatted { false }, OS::Unified { true } - }; - - RestartIO::save(rstFile, seqnum, - 100, - restart_value2, - base_setup.es, - base_setup.grid, - base_setup.schedule, sumState); - } - - { - const auto rstFile = ::Opm::EclIO::OutputStream:: - outputFileName({outputDir, "FILE2"}, "UNRST"); - - EclIO::ERst rst(rstFile); - std::map kw_pos; - - { - auto i = 0; - for (const auto& vec : rst.listOfRstArrays(1)) - kw_pos[ std::get<0>(vec) ] = i++; - } - - BOOST_CHECK( kw_pos["STARTSOL"] < kw_pos["THRESHPR"] ); - BOOST_CHECK( kw_pos["THRESHPR"] < kw_pos["ENDSOL"] ); - BOOST_CHECK( kw_pos["ENDSOL"] < kw_pos["EXTRA"] ); - - BOOST_CHECK_EQUAL( ecl_file_get_num_named_kw(rst, "THRESHPR"), 1); - BOOST_CHECK_EQUAL( ecl_file_get_num_named_kw(rst, "EXTRA"), 1); - BOOST_CHECK_MESSAGE( ecl_kw_get_type(ecl_file_iget_named_kw(rst, "THRESHPR", 1)) == EclIO::eclArrType::DOUB, - R"("THRESHPR" vector must have type DOUB)"); - } - } - } -} - - - -BOOST_AUTO_TEST_CASE(Restore_Cumulatives) -{ - WorkArea wa{"test_Restart"}; - wa.copyIn("BASE_SIM.DATA"); - wa.copyIn("RESTART_SIM.DATA"); - Setup setup("BASE_SIM.DATA"); - - // Write fully ECLIPSE compatible output. This also saves cumulatives. - setup.es.getIOConfig().setEclCompatibleRST(true); - - const auto restart_value = RestartValue { - mkSolution(setup.grid.getNumActive()), - mkWells() - }; - const auto sumState = sim_state(); - - namespace OS = ::Opm::EclIO::OutputStream; - - const auto rset = OS::ResultSet{ wa.currentWorkingDirectory(), "FILE" }; - const auto seqnum = 1; - { - auto rstFile = OS::Restart { - rset, seqnum, OS::Formatted{ false }, OS::Unified{ true } - }; - - RestartIO::save(rstFile, seqnum, 100, restart_value, - setup.es, setup.grid, setup.schedule, sumState); - } - - SummaryState rstSumState(std::chrono::system_clock::now()); - RestartIO::load(OS::outputFileName(rset, "UNRST"), seqnum, rstSumState, - /* solution_keys = */ { - RestartKey("SWAT", UnitSystem::measure::identity), - }, - setup.es, setup.grid, setup.schedule, - /* extra_keys = */ {}); - - - // Verify that the restored summary state has all of its requisite - // cumulative summary vectors. - - // Producer => W*IT{,H} saved/restored as zero (0.0) - BOOST_CHECK(rstSumState.has("WOPT:OP_1")); - BOOST_CHECK(rstSumState.has("WGPT:OP_1")); - BOOST_CHECK(rstSumState.has("WWPT:OP_1")); - BOOST_CHECK(rstSumState.has("WVPT:OP_1")); - BOOST_CHECK(rstSumState.has("WWIT:OP_1")); - BOOST_CHECK(rstSumState.has("WGIT:OP_1")); - BOOST_CHECK(rstSumState.has("WVIT:OP_1")); - BOOST_CHECK(rstSumState.has("WOPTH:OP_1")); - BOOST_CHECK(rstSumState.has("WGPTH:OP_1")); - BOOST_CHECK(rstSumState.has("WWPTH:OP_1")); - BOOST_CHECK(rstSumState.has("WWITH:OP_1")); - BOOST_CHECK(rstSumState.has("WGITH:OP_1")); - - BOOST_CHECK_CLOSE(rstSumState.get("WOPT:OP_1"), 10.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstSumState.get("WGPT:OP_1"), 30.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstSumState.get("WWPT:OP_1"), 20.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstSumState.get("WVPT:OP_1"), 40.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstSumState.get("WWIT:OP_1"), 0.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstSumState.get("WGIT:OP_1"), 0.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstSumState.get("WVIT:OP_1"), 0.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstSumState.get("WOPTH:OP_1"), 345.6, 1.0e-10); - BOOST_CHECK_CLOSE(rstSumState.get("WWPTH:OP_1"), 456.7, 1.0e-10); - BOOST_CHECK_CLOSE(rstSumState.get("WGPTH:OP_1"), 567.8, 1.0e-10); - BOOST_CHECK_CLOSE(rstSumState.get("WWITH:OP_1"), 0.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstSumState.get("WGITH:OP_1"), 0.0, 1.0e-10); - - // Gas injector => W*PT{,H} saved/restored as zero (0.0) - BOOST_CHECK(rstSumState.has("WOPT:OP_2")); - BOOST_CHECK(rstSumState.has("WGPT:OP_2")); - BOOST_CHECK(rstSumState.has("WWPT:OP_2")); - BOOST_CHECK(rstSumState.has("WVPT:OP_2")); - BOOST_CHECK(rstSumState.has("WWIT:OP_2")); - BOOST_CHECK(rstSumState.has("WGIT:OP_2")); - BOOST_CHECK(rstSumState.has("WVIT:OP_2")); - BOOST_CHECK(rstSumState.has("WOPTH:OP_2")); - BOOST_CHECK(rstSumState.has("WGPTH:OP_2")); - BOOST_CHECK(rstSumState.has("WWPTH:OP_2")); - BOOST_CHECK(rstSumState.has("WWITH:OP_2")); - BOOST_CHECK(rstSumState.has("WGITH:OP_2")); - - BOOST_CHECK_CLOSE(rstSumState.get("WOPT:OP_2"), 0.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstSumState.get("WGPT:OP_2"), 0.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstSumState.get("WWPT:OP_2"), 0.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstSumState.get("WVPT:OP_2"), 0.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstSumState.get("WWIT:OP_2"), 1000.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstSumState.get("WGIT:OP_2"), 2000.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstSumState.get("WVIT:OP_2"), 1234.5, 1.0e-10); - BOOST_CHECK_CLOSE(rstSumState.get("WOPTH:OP_2"), 0.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstSumState.get("WGPTH:OP_2"), 0.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstSumState.get("WWPTH:OP_2"), 0.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstSumState.get("WWITH:OP_2"), 1515.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstSumState.get("WGITH:OP_2"), 3030.0, 1.0e-10); - - // Group cumulatives saved/restored for all phases - BOOST_CHECK(rstSumState.has("GOPT:OP")); - BOOST_CHECK(rstSumState.has("GGPT:OP")); - BOOST_CHECK(rstSumState.has("GWPT:OP")); - BOOST_CHECK(rstSumState.has("GVPT:OP")); - BOOST_CHECK(rstSumState.has("GWIT:OP")); - BOOST_CHECK(rstSumState.has("GGIT:OP")); - BOOST_CHECK(rstSumState.has("GVIT:OP")); - BOOST_CHECK(rstSumState.has("GOPTH:OP")); - BOOST_CHECK(rstSumState.has("GGPTH:OP")); - BOOST_CHECK(rstSumState.has("GWPTH:OP")); - BOOST_CHECK(rstSumState.has("GWITH:OP")); - BOOST_CHECK(rstSumState.has("GGITH:OP")); - - BOOST_CHECK_CLOSE(rstSumState.get("GOPT:OP"), 1100.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstSumState.get("GWPT:OP"), 1200.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstSumState.get("GGPT:OP"), 1300.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstSumState.get("GVPT:OP"), 1400.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstSumState.get("GWIT:OP"), 31415.9, 1.0e-10); - BOOST_CHECK_CLOSE(rstSumState.get("GGIT:OP"), 27182.8, 1.0e-10); - BOOST_CHECK_CLOSE(rstSumState.get("GVIT:OP"), 44556.6, 1.0e-10); - - BOOST_CHECK_CLOSE(rstSumState.get("GOPTH:OP"), 5678.90, 1.0e-10); - BOOST_CHECK_CLOSE(rstSumState.get("GGPTH:OP"), 7890.12, 1.0e-10); - BOOST_CHECK_CLOSE(rstSumState.get("GWPTH:OP"), 6789.01, 1.0e-10); - BOOST_CHECK_CLOSE(rstSumState.get("GWITH:OP"), 8901.23, 1.0e-10); - BOOST_CHECK_CLOSE(rstSumState.get("GGITH:OP"), 9012.34, 1.0e-10); - - // Field cumulatives saved/restored for all phases - BOOST_CHECK(rstSumState.has("FOPT")); - BOOST_CHECK(rstSumState.has("FGPT")); - BOOST_CHECK(rstSumState.has("FWPT")); - BOOST_CHECK(rstSumState.has("FVPT")); - BOOST_CHECK(rstSumState.has("FWIT")); - BOOST_CHECK(rstSumState.has("FGIT")); - BOOST_CHECK(rstSumState.has("FVIT")); - BOOST_CHECK(rstSumState.has("FOPTH")); - BOOST_CHECK(rstSumState.has("FGPTH")); - BOOST_CHECK(rstSumState.has("FWPTH")); - BOOST_CHECK(rstSumState.has("FWITH")); - BOOST_CHECK(rstSumState.has("FGITH")); - - BOOST_CHECK_CLOSE(rstSumState.get("FOPT"), 11000.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstSumState.get("FWPT"), 12000.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstSumState.get("FGPT"), 13000.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstSumState.get("FVPT"), 14000.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstSumState.get("FWIT"), 314159.2, 1.0e-10); - BOOST_CHECK_CLOSE(rstSumState.get("FGIT"), 271828.1, 1.0e-10); - BOOST_CHECK_CLOSE(rstSumState.get("FVIT"), 445566.77, 1.0e-10); - - BOOST_CHECK_CLOSE(rstSumState.get("FOPTH"), 56789.01, 1.0e-10); - BOOST_CHECK_CLOSE(rstSumState.get("FGPTH"), 78901.23, 1.0e-10); - BOOST_CHECK_CLOSE(rstSumState.get("FWPTH"), 67890.12, 1.0e-10); - BOOST_CHECK_CLOSE(rstSumState.get("FWITH"), 89012.34, 1.0e-10); - BOOST_CHECK_CLOSE(rstSumState.get("FGITH"), 90123.45, 1.0e-10); -} - - -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/test_RootFinders.cpp b/ThirdParty/custom-opm-common/opm-common/tests/test_RootFinders.cpp deleted file mode 100644 index 9723c303f0..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/test_RootFinders.cpp +++ /dev/null @@ -1,62 +0,0 @@ -/* - Copyright 2019 Equinor ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include - -#define NVERBOSE // to suppress our messages when throwing - -#define BOOST_TEST_MODULE RootFindersTest -#include - -#include - -using namespace Opm; - - -template -struct Test -{ - template - static int run(const Functor& f, - const double a, - const double b, - const int max_iter, - const double tolerance) - { - int iter = 0; - Method::solve(f, a, b, max_iter, tolerance, iter); - return iter; - } -}; - - -BOOST_AUTO_TEST_CASE(SimpleFunction) -{ - auto f = [](double x) { return (x - 1.0)*x; }; - BOOST_CHECK_EQUAL(Test>::run(f, -0.5, 0.99, 50, 1e-12), 10); - BOOST_CHECK_EQUAL(Test>::run(f, -0.5, 0.99, 50, 1e-12), 15); -} - -BOOST_AUTO_TEST_CASE(ToughFunction) -{ - auto f = [](double x) { return x < 50.0 ? -0.0001 : x - 50.0001; }; - BOOST_CHECK_THROW(Test>::run(f, 0.0, 100.0, 50, 1e-12), std::exception); - BOOST_CHECK_EQUAL(Test>::run(f, 0.0, 100.0, 1000000, 1e-12), 90); - BOOST_CHECK_EQUAL(Test>::run(f, 0.0, 100.0, 1000000, 1e-12), 2); -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/test_SimulationDataContainer.cpp b/ThirdParty/custom-opm-common/opm-common/tests/test_SimulationDataContainer.cpp deleted file mode 100644 index 9b6474dda9..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/test_SimulationDataContainer.cpp +++ /dev/null @@ -1,207 +0,0 @@ -/* - Copyright 2016 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include - -#define BOOST_TEST_MODULE SIMULATION_DATA_CONTAINER_TESTS -#include - -#include -#include -#include - -using namespace Opm; - - -BOOST_AUTO_TEST_CASE(TestCreate) { - SimulationDataContainer container(1000 , 10 , 2); - - BOOST_CHECK_EQUAL( 2U , container.numPhases() ); - BOOST_CHECK_EQUAL( 1000U , container.numCells() ); - BOOST_CHECK_EQUAL( 10U , container.numFaces() ); -} - - - - -/* - This test verifies that the default fields are correctly registered; - this special behavior is deprecated - and the test should die; along - with the behavior. -*/ - -BOOST_AUTO_TEST_CASE(TestRegisterDefaults) { - SimulationDataContainer container(1000 , 10 , 2); - - BOOST_CHECK( container.hasCellData("PRESSURE") ); - BOOST_CHECK( container.hasCellData("SATURATION") ); - - { - auto pressure = container.getCellData("PRESSURE"); - BOOST_CHECK_EQUAL( pressure.size() , 1000U ); - BOOST_CHECK_EQUAL( container.numCellDataComponents( "PRESSURE") , 1U); - - auto sat = container.getCellData("SATURATION"); - BOOST_CHECK_EQUAL( sat.size() , 1000U*2 ); - BOOST_CHECK_EQUAL( container.numCellDataComponents( "SATURATION") , 2U); - } - - { - auto pressure = container.pressure(); - BOOST_CHECK_EQUAL( pressure.size() , 1000U ); - - auto sat = container.saturation(); - BOOST_CHECK_EQUAL( sat.size() , 1000U*2 ); - } - - BOOST_CHECK( container.hasFaceData("FACEPRESSURE") ); - BOOST_CHECK( container.hasFaceData("FACEFLUX") ); -} - - - - -BOOST_AUTO_TEST_CASE(TestRegisterFaceData) { - SimulationDataContainer container(100 , 10 , 2); - BOOST_CHECK( !container.hasFaceData("FLUX")); - BOOST_CHECK_THROW( container.getFaceData("FLUX") , std::invalid_argument ); - - container.registerFaceData("FLUX" , 1 , 99 ); - auto& flux = container.getFaceData("FLUX"); - BOOST_CHECK_EQUAL( flux.size() , 10U ); - BOOST_CHECK_EQUAL( flux[0] , 99 ); -} - - - -BOOST_AUTO_TEST_CASE(TestRegisterCellData) { - - SimulationDataContainer container(100 , 10 , 2); - BOOST_CHECK( !container.hasCellData("FIELDX")); - BOOST_CHECK_THROW( container.getCellData("FIELDX") , std::invalid_argument ); - - container.registerCellData("FIELDX" , 1 , 123 ); - { - auto& fieldx = container.getCellData("FIELDX"); - BOOST_CHECK_EQUAL( fieldx.size() , 100U ); - for (auto v : fieldx) - BOOST_CHECK_EQUAL( v , 123 ); - - fieldx[0] *= 2; - } - - { - auto fieldx = container.getCellData("FIELDX"); - BOOST_CHECK_EQUAL( fieldx[0] , 246 ); - BOOST_CHECK_EQUAL( fieldx[1] , 123 ); - } - -} - - -BOOST_AUTO_TEST_CASE(Test_Equal) { - { - SimulationDataContainer container1(100 , 10 , 2); - SimulationDataContainer container2(100 , 10 , 2); - BOOST_CHECK( container1.equal( container2 )); - } - - { - SimulationDataContainer container1(100 , 10 , 2); - SimulationDataContainer container2(100 , 10 , 1); - BOOST_CHECK( !container1.equal( container2 )); - } - - { - SimulationDataContainer container1(100 , 10 , 2); - SimulationDataContainer container2(100 , 10 , 2); - - container1.registerCellData( "FIELDX" , 1 , 123 ); - BOOST_CHECK( !container1.equal( container2 )); - container2.registerCellData( "FIELDX" , 1 , 123 ); - BOOST_CHECK( container1.equal( container2 )); - - container1.registerFaceData( "FACEX" , 1 , 123 ); - BOOST_CHECK( !container1.equal( container2 )); - container2.registerFaceData( "FACEX" , 1 , 123 ); - BOOST_CHECK( container1.equal( container2 )); - } - - { - SimulationDataContainer container1(100 , 10 , 2); - SimulationDataContainer container2(100 , 10 , 2); - - container1.registerCellData( "FIELD1" , 1 , 123 ); - container2.registerCellData( "FIELD2" , 1 , 123 ); - BOOST_CHECK( !container1.equal( container2 )); - } - - { - SimulationDataContainer container1(100 , 10 , 2); - SimulationDataContainer container2(100 , 10 , 2); - - container1.registerFaceData( "FIELD1" , 1 , 123 ); - container2.registerFaceData( "FIELD2" , 1 , 123 ); - BOOST_CHECK( !container1.equal( container2 )); - } - - { - SimulationDataContainer container1(100 , 10 , 2); - SimulationDataContainer container2(100 , 10 , 2); - - container1.registerFaceData( "FIELD1" , 1 , 123 ); - container2.registerFaceData( "FIELD1" , 1 , 123 ); - BOOST_CHECK( container1.equal( container2 )); - - std::vector& f = container1.getFaceData( "FIELD1" ); - f[0] *= 1.1; - BOOST_CHECK( !container1.equal( container2 )); - } -} - - - -BOOST_AUTO_TEST_CASE(TestSetComponent) { - - SimulationDataContainer container(100 , 10 , 2); - container.registerCellData("FIELDX" , 2 , 123 ); - std::vector cells = { 1,2,3}; - std::vector cells2 = { 1,2,3,4}; - std::vector cells3 = { 1,2,100}; - std::vector values0 = {20,30,40}; - std::vector values1 = {2,3,4}; - - BOOST_CHECK_THROW( container.setCellDataComponent( "FIELDY" , 0 , cells , values0 ) , std::invalid_argument ); - BOOST_CHECK_THROW( container.setCellDataComponent( "FIELDX" , 2 , cells , values0 ) , std::invalid_argument ); - BOOST_CHECK_THROW( container.setCellDataComponent( "FIELDX" , 0 , cells2 , values0 ) , std::invalid_argument ); - BOOST_CHECK_THROW( container.setCellDataComponent( "FIELDX" , 0 , cells3 , values0 ) , std::invalid_argument ); - - container.setCellDataComponent( "FIELDX" , 0 , cells , values0 ); - container.setCellDataComponent( "FIELDX" , 1 , cells , values1 ); - const auto& data = container.getCellData( "FIELDX" ); - - BOOST_CHECK_EQUAL( data[1*2 + 1] , 2 ); - BOOST_CHECK_EQUAL( data[2*2 + 1] , 3 ); - BOOST_CHECK_EQUAL( data[3*2 + 1] , 4 ); - - BOOST_CHECK_EQUAL( data[1*2] , 20 ); - BOOST_CHECK_EQUAL( data[2*2] , 30 ); - BOOST_CHECK_EQUAL( data[3*2] , 40 ); - -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/test_Solution.cpp b/ThirdParty/custom-opm-common/opm-common/tests/test_Solution.cpp deleted file mode 100644 index 29845451a5..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/test_Solution.cpp +++ /dev/null @@ -1,97 +0,0 @@ -/* - Copyright 2016 Statoil ASA - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ -#include "config.h" - -#define BOOST_TEST_MODULE Solution -#include - -#include - -#include -#include - -using namespace Opm; - - -BOOST_AUTO_TEST_CASE(Create) -{ - data::Solution c; - BOOST_CHECK_EQUAL( c.size() , 0U ); - BOOST_CHECK_EQUAL( c.has("NO") , false); - - { - std::vector data(100); - c.insert("NAME", UnitSystem::measure::identity, data , data::TargetType::RESTART_SOLUTION); - BOOST_CHECK_EQUAL( c.size() , 1U ); - BOOST_CHECK_EQUAL( c.has("NAME") , true); - - BOOST_CHECK_EQUAL( c.find("NAME")->first, "NAME"); - - BOOST_CHECK_THROW( c.at("NotLikeThis") , std::out_of_range ); - - - c.insert( "NAME2" , UnitSystem::measure::identity, data , data::TargetType::RESTART_SOLUTION ); - c.insert( "NAME3" , UnitSystem::measure::identity, data , data::TargetType::RESTART_SOLUTION ); - BOOST_CHECK_EQUAL( c.size() , 3U ); - - std::vector expected = {"NAME" , "NAME2" , "NAME3"}; - std::vector actual; - - - for (const auto& prop : c) - actual.push_back( prop.first ); - - BOOST_CHECK_EQUAL_COLLECTIONS( expected.begin() , expected.end() , actual.begin() , actual.end() ); - } -} - - -BOOST_AUTO_TEST_CASE(Create2) -{ - - std::vector data(100); - data::Solution c = { - { "TRANX", { UnitSystem::measure::transmissibility, data, data::TargetType::RESTART_SOLUTION } }, - { "TRANY", { UnitSystem::measure::transmissibility, data, data::TargetType::RESTART_SOLUTION } }, - { "TRANZ", { UnitSystem::measure::transmissibility, data, data::TargetType::RESTART_SOLUTION } } - }; - - auto c2 = c; - BOOST_CHECK_EQUAL( c2.size() , 3U ); - BOOST_CHECK( c2.has("TRANX") ); -} - - - -BOOST_AUTO_TEST_CASE(UNITS) { - std::vector data(100,1); - data::Solution c; - auto metric = UnitSystem::newMETRIC(); - - c.insert("NAME", UnitSystem::measure::pressure, data , data::TargetType::RESTART_SOLUTION); - - double si0 = c.data("NAME")[0]; - c.convertFromSI( metric ); - double metric0 = c.data("NAME")[0]; - c.convertFromSI( metric ); - BOOST_CHECK_EQUAL( metric0 , c.data("NAME")[0] ); - c.convertToSI( metric ); - BOOST_CHECK_EQUAL( si0 , c.data("NAME")[0] ); -} - diff --git a/ThirdParty/custom-opm-common/opm-common/tests/test_Summary.cpp b/ThirdParty/custom-opm-common/opm-common/tests/test_Summary.cpp deleted file mode 100644 index c592074a42..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/test_Summary.cpp +++ /dev/null @@ -1,3382 +0,0 @@ -/* - Copyright 2016 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include "config.h" - -#define BOOST_TEST_MODULE Wells -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -#include - -#include - -using namespace Opm; -using rt = data::Rates::opt; -using p_cmode = Opm::Group::ProductionCMode; -using i_cmode = Opm::Group::InjectionCMode; - -namespace { - double sm3_pr_day() - { - return unit::cubic(unit::meter) / unit::day; - } - - std::string toupper(std::string input) - { - for (auto& c : input) { - const auto uc = std::toupper(static_cast(c)); - c = static_cast(uc); - } - - return input; - } -} // Anonymous - -namespace SegmentResultHelpers { - data::Well prod01_results(); - data::Well inje01_results(); -} // SegmentResultHelpers - -namespace { -/* conversion factor for whenever 'day' is the unit of measure, whereas we - * expect input in SI units (seconds) - */ -static const int day = 24 * 60 * 60; - - -/* - This is quite misleading, because the values prepared in the test - input deck are NOT used. -*/ -static data::Wells result_wells() { - /* populate with the following pattern: - * - * Wells are named W_1, W_2 etc, i.e. wells are 1 indexed. - * - * rates on a well are populated with 10 * wellidx . type (where type is - * 0-1-2 from owg) - * - * bhp is wellidx.1 - * bhp is wellidx.2 - * - * completions are 100*wellidx . type - */ - - // conversion factor Pascal (simulator output) <-> barsa - const double ps = 100000; - - data::Rates rates1; - rates1.set( rt::wat, -10.0 / day ); - rates1.set( rt::oil, -10.1 / day ); - rates1.set( rt::gas, -10.2 / day ); - rates1.set( rt::solvent, -10.3 / day ); - rates1.set( rt::dissolved_gas, -10.4 / day ); - rates1.set( rt::vaporized_oil, -10.5 / day ); - rates1.set( rt::reservoir_water, -10.6 / day ); - rates1.set( rt::reservoir_oil, -10.7 / day ); - rates1.set( rt::reservoir_gas, -10.8 / day ); - rates1.set( rt::productivity_index_water, -10.9 / day ); - rates1.set( rt::productivity_index_oil, -10.11 / day ); - rates1.set( rt::productivity_index_gas, -10.12 / day ); - rates1.set( rt::well_potential_water, -10.13 / day ); - rates1.set( rt::well_potential_oil, -10.14 / day ); - rates1.set( rt::well_potential_gas, -10.15 / day ); - - data::Rates rates2; - rates2.set( rt::wat, -20.0 / day ); - rates2.set( rt::oil, -20.1 / day ); - rates2.set( rt::gas, -20.2 / day ); - rates2.set( rt::solvent, -20.3 / day ); - rates2.set( rt::dissolved_gas, -20.4 / day ); - rates2.set( rt::vaporized_oil, -20.5 / day ); - rates2.set( rt::reservoir_water, -20.6 / day ); - rates2.set( rt::reservoir_oil, -20.7 / day ); - rates2.set( rt::reservoir_gas, -20.8 / day ); - rates2.set( rt::productivity_index_water, -20.9 / day ); - rates2.set( rt::productivity_index_oil, -20.11 / day ); - rates2.set( rt::productivity_index_gas, -20.12 / day ); - rates2.set( rt::well_potential_water, -20.13 / day ); - rates2.set( rt::well_potential_oil, -20.14 / day ); - rates2.set( rt::well_potential_gas, -20.15 / day ); - - data::Rates rates3; - rates3.set( rt::wat, 30.0 / day ); - rates3.set( rt::oil, 30.1 / day ); - rates3.set( rt::gas, 30.2 / day ); - rates3.set( rt::solvent, 30.3 / day ); - rates3.set( rt::dissolved_gas, 30.4 / day ); - rates3.set( rt::vaporized_oil, 30.5 / day ); - rates3.set( rt::reservoir_water, 30.6 / day ); - rates3.set( rt::reservoir_oil, 30.7 / day ); - rates3.set( rt::reservoir_gas, 30.8 / day ); - rates3.set( rt::productivity_index_water, -30.9 / day ); - rates3.set( rt::productivity_index_oil, -30.11 / day ); - rates3.set( rt::productivity_index_gas, -30.12 / day ); - rates3.set( rt::well_potential_water, 30.13 / day ); - rates3.set( rt::well_potential_oil, 30.14 / day ); - rates3.set( rt::well_potential_gas, 30.15 / day ); - - - data::Rates rates6; - rates6.set( rt::wat, 60.0 / day ); - rates6.set( rt::oil, 60.1 / day ); - rates6.set( rt::gas, 60.2 / day ); - rates6.set( rt::solvent, 60.3 / day ); - rates6.set( rt::dissolved_gas, 60.4 / day ); - rates6.set( rt::vaporized_oil, 60.5 / day ); - rates6.set( rt::reservoir_water, 60.6 / day ); - rates6.set( rt::reservoir_oil, 60.7 / day ); - rates6.set( rt::reservoir_gas, 60.8 / day ); - rates6.set( rt::productivity_index_water, -60.9 / day ); - rates6.set( rt::productivity_index_oil, -60.11 / day ); - rates6.set( rt::productivity_index_gas, -60.12 / day ); - rates6.set( rt::well_potential_water, 60.13 / day ); - rates6.set( rt::well_potential_oil, 60.14 / day ); - rates6.set( rt::well_potential_gas, 60.15 / day ); - /* completion rates */ - data::Rates crates1; - crates1.set( rt::wat, -100.0 / day ); - crates1.set( rt::oil, -100.1 / day ); - crates1.set( rt::gas, -100.2 / day ); - crates1.set( rt::solvent, -100.3 / day ); - crates1.set( rt::dissolved_gas, -100.4 / day ); - crates1.set( rt::vaporized_oil, -100.5 / day ); - crates1.set( rt::reservoir_water, -100.6 / day ); - crates1.set( rt::reservoir_oil, -100.7 / day ); - crates1.set( rt::reservoir_gas, -100.8 / day ); - - data::Rates crates2; - crates2.set( rt::wat, -200.0 / day ); - crates2.set( rt::oil, -200.1 / day ); - crates2.set( rt::gas, -200.2 / day ); - crates2.set( rt::solvent, -200.3 / day ); - crates2.set( rt::dissolved_gas, -200.4 / day ); - crates2.set( rt::vaporized_oil, -200.5 / day ); - crates2.set( rt::reservoir_water, -200.6 / day ); - crates2.set( rt::reservoir_oil, -200.7 / day ); - crates2.set( rt::reservoir_gas, -200.8 / day ); - - data::Rates crates3; - crates3.set( rt::wat, 300.0 / day ); - crates3.set( rt::oil, 300.1 / day ); - crates3.set( rt::gas, 300.2 / day ); - crates3.set( rt::solvent, 300.3 / day ); - crates3.set( rt::dissolved_gas, 300.4 / day ); - crates3.set( rt::vaporized_oil, 300.5 / day ); - crates3.set( rt::reservoir_water, 300.6 / day ); - crates3.set( rt::reservoir_oil, 300.7 / day ); - crates3.set( rt::reservoir_gas, 300.8 / day ); - - data::Rates crates6; - crates6.set( rt::wat, 600.0 / day ); - crates6.set( rt::oil, 600.1 / day ); - crates6.set( rt::gas, 600.2 / day ); - crates6.set( rt::solvent, 600.3 / day ); - crates6.set( rt::dissolved_gas, 600.4 / day ); - crates6.set( rt::vaporized_oil, 600.5 / day ); - crates6.set( rt::reservoir_water, 600.6 / day ); - crates6.set( rt::reservoir_oil, 600.7 / day ); - crates6.set( rt::reservoir_gas, 600.8 / day ); - - // Segment vectors - auto segment = ::Opm::data::Segment{}; - segment.rates.set(rt::wat, 123.45*sm3_pr_day()); - segment.rates.set(rt::oil, 543.21*sm3_pr_day()); - segment.rates.set(rt::gas, 1729.496*sm3_pr_day()); - { - const auto pres_idx = Opm::data::SegmentPressures::Value::Pressure; - segment.pressures[pres_idx] = 314.159*unit::barsa; - } - segment.segNumber = 1; - - /* - The global index assigned to the completion must be manually - syncronized with the global index in the COMPDAT keyword in the - input deck. - */ - data::Connection well1_comp1 { 0 , crates1, 1.9 , 123.4, 314.15, 0.35, 0.25, 2.718e2}; - data::Connection well2_comp1 { 1 , crates2, 1.10 , 123.4, 212.1, 0.78, 0.0, 12.34}; - data::Connection well2_comp2 { 101, crates3, 1.11 , 123.4, 150.6, 0.001, 0.89, 100.0}; - data::Connection well3_comp1 { 2 , crates3, 1.11 , 123.4, 456.78, 0.0, 0.15, 432.1}; - data::Connection well6_comp1 { 5 , crates6, 6.11 , 623.4, 656.78, 0.0, 0.65, 632.1}; - /* - The completions - */ - data::Well well1 { - rates1, 0.1 * ps, 0.2 * ps, 0.3 * ps, 1, - { {well1_comp1} }, - { { segment.segNumber, segment } }, - data::CurrentControl{} - }; - well1.current_control.isProducer = true; - well1.current_control.prod = ::Opm::Well::ProducerCMode::THP; - - using SegRes = decltype(well1.segments); - using Ctrl = data::CurrentControl; - - data::Well well2 { rates2, 1.1 * ps, 1.2 * ps, 1.3 * ps, 2, { {well2_comp1 , well2_comp2} }, SegRes{}, Ctrl{} }; - well2.current_control.prod = ::Opm::Well::ProducerCMode::ORAT; - - data::Well well3 { rates3, 2.1 * ps, 2.2 * ps, 2.3 * ps, 3, { {well3_comp1} }, SegRes{}, Ctrl{} }; - well3.current_control.isProducer = false; - well3.current_control.inj = ::Opm::Well::InjectorCMode::BHP; - - data::Well well6 { rates6, 2.1 * ps, 2.2 * ps, 2.3 * ps, 3, { {well6_comp1} }, SegRes{}, Ctrl{} }; - well6.current_control.isProducer = false; - well6.current_control.inj = ::Opm::Well::InjectorCMode::GRUP; - - data::Wells wellrates; - - wellrates["W_1"] = well1; - wellrates["W_2"] = well2; - wellrates["W_3"] = well3; - wellrates["W_6"] = well6; - - wellrates["INJE01"] = SegmentResultHelpers::inje01_results(); - wellrates["PROD01"] = SegmentResultHelpers::prod01_results(); - - return wellrates; -} - -static data::Group result_groups() { - - data::Group groups; - data::currentGroupConstraints cgc_group; - - cgc_group.set(p_cmode::NONE, i_cmode::VREP, i_cmode::RATE); - groups.emplace("G_1", cgc_group); - - cgc_group.set(p_cmode::ORAT, i_cmode::RESV, i_cmode::FLD); - groups.emplace("G_2", cgc_group); - - cgc_group.set(p_cmode::GRAT, i_cmode::REIN, i_cmode::VREP); - groups.emplace("G_3", cgc_group); - - cgc_group.set(p_cmode::NONE, i_cmode::NONE, i_cmode::NONE); - groups.emplace("FIELD", cgc_group); - - return groups; - -} - -std::unique_ptr< EclIO::ESmry > readsum( const std::string& base ) { - return std::make_unique(base); -} - -bool ecl_sum_has_key( const EclIO::ESmry* smry, - const std::string& key ) -{ - return smry->hasKey(key); -} - -bool ecl_sum_has_field_var( const EclIO::ESmry* smry, - const std::string& variable ) -{ - return smry->hasKey(variable); -} - -double ecl_sum_get_field_var(const EclIO::ESmry* smry, - const int timeIdx, - const std::string& var) -{ - return smry->get(var)[timeIdx]; -} - -bool ecl_sum_has_general_var( const EclIO::ESmry* smry, - const std::string& variable) -{ - return smry->hasKey(variable); -} - -double ecl_sum_get_general_var(const EclIO::ESmry* smry, - const int timeIdx, - const std::string& var) -{ - return smry->get(var)[timeIdx]; -} - -bool ecl_sum_has_well_var( const EclIO::ESmry* smry, - const std::string& wellname, - const std::string& variable ) -{ - return smry->hasKey(variable + ':' + wellname); -} - -double ecl_sum_get_well_var( const EclIO::ESmry* smry, - const int timeIdx, - const std::string& wellname, - const std::string& variable ) -{ - return smry->get(variable + ':' + wellname)[timeIdx]; -} - -double ecl_sum_get_group_var( const EclIO::ESmry* smry, - const int timeIdx, - const std::string& groupname, - const std::string& variable ) -{ - return smry->get(variable + ':' + groupname)[timeIdx]; -} - -double ecl_sum_get_well_completion_var( const EclIO::ESmry* smry, - const int timeIdx, - const std::string& wellname, - const std::string& variable, - const int i, - const int j, - const int k) -{ - const auto ijk = std::to_string(i) + ',' + std::to_string(j) + ',' + std::to_string(k); - return smry->get(variable + ':' + wellname + ':' + ijk)[timeIdx]; -} - -struct setup { - Deck deck; - EclipseState es; - const EclipseGrid& grid; - std::shared_ptr python; - Schedule schedule; - SummaryConfig config; - data::Wells wells; - data::Group groups; - std::string name; - WorkArea ta; - - /*-----------------------------------------------------------------*/ - - setup(std::string fname, const std::string& path = "summary_deck.DATA") : - deck( Parser().parseFile( path) ), - es( deck ), - grid( es.getInputGrid() ), - python( std::make_shared() ), - schedule( deck, es, python), - config( deck, schedule, es.getTableManager()), - wells( result_wells() ), - groups( result_groups() ), - name( toupper(std::move(fname)) ), - ta( "summary_test" ) - {} -}; -} // Anonymous namespace - -BOOST_AUTO_TEST_SUITE(Summary) -/* - * Tests works by reading the Deck, write the summary output, then immediately - * read it again (with ERT), and compare the read values with the input. - */ -BOOST_AUTO_TEST_CASE(well_keywords) { - setup cfg( "test_summary_well" ); - - // Force to run in a directory, to make sure the basename with - // leading path works. - cfg.ta.makeSubDir( "PATH" ); - cfg.name = "PATH/CASE"; - - SummaryState st(std::chrono::system_clock::now()); - - out::Summary writer( cfg.es, cfg.config, cfg.grid, cfg.schedule , cfg.name ); - writer.eval(st, 0, 0*day, cfg.es, cfg.schedule, cfg.wells, cfg.groups, {}); - writer.add_timestep( st, 0); - - writer.eval(st, 1, 1*day, cfg.es, cfg.schedule, cfg.wells, cfg.groups, {}); - writer.add_timestep( st, 1); - - writer.eval(st, 2, 2*day, cfg.es, cfg.schedule, cfg.wells, cfg.groups, {}); - writer.add_timestep( st, 2); - writer.write(); - - - - - auto res = readsum( cfg.name ); - const auto* resp = res.get(); - - /* Production rates */ - BOOST_CHECK_CLOSE( 10.0, ecl_sum_get_well_var( resp, 1, "W_1", "WWPR" ), 1e-5 ); - - BOOST_CHECK_CLOSE( 20.0, ecl_sum_get_well_var( resp, 1, "W_2", "WWPR" ), 1e-5 ); - - BOOST_CHECK_CLOSE( 10.1, ecl_sum_get_well_var( resp, 1, "W_1", "WOPR" ), 1e-5 ); - - BOOST_CHECK_CLOSE( 20.1, ecl_sum_get_well_var( resp, 1, "W_2", "WOPR" ), 1e-5 ); - - BOOST_CHECK_CLOSE( 10.2, ecl_sum_get_well_var( resp, 1, "W_1", "WGPR" ), 1e-5 ); - BOOST_CHECK_CLOSE( 10.8, ecl_sum_get_well_var( resp, 1, "W_1", "WGVPR" ), 1e-5 ); - BOOST_CHECK_CLOSE( 20.2, ecl_sum_get_well_var( resp, 1, "W_2", "WGPR" ), 1e-5 ); - BOOST_CHECK_CLOSE( 20.8, ecl_sum_get_well_var( resp, 1, "W_2", "WGVPR" ), 1e-5 ); - BOOST_CHECK_CLOSE( 10.0 + 10.1, ecl_sum_get_well_var( resp, 1, "W_1", "WLPR" ), 1e-5 ); - BOOST_CHECK_CLOSE( 20.0 + 20.1, ecl_sum_get_well_var( resp, 1, "W_2", "WLPR" ), 1e-5 ); - BOOST_CHECK_CLOSE( 10.3, ecl_sum_get_well_var( resp, 1, "W_1", "WNPR" ), 1e-5 ); - BOOST_CHECK_CLOSE( 20.3, ecl_sum_get_well_var( resp, 1, "W_2", "WNPR" ), 1e-5 ); - - BOOST_CHECK_CLOSE( 10.4, ecl_sum_get_well_var( resp, 1, "W_1", "WGPRS" ), 1e-5 ); - BOOST_CHECK_CLOSE( 20.4, ecl_sum_get_well_var( resp, 1, "W_2", "WGPRS" ), 1e-5 ); - BOOST_CHECK_CLOSE( 10.2 - 10.4, ecl_sum_get_well_var( resp, 1, "W_1", "WGPRF" ), 1e-5 ); - BOOST_CHECK_CLOSE( 20.2 - 20.4, ecl_sum_get_well_var( resp, 1, "W_2", "WGPRF" ), 1e-5 ); - BOOST_CHECK_CLOSE( 10.6 + 10.7 + 10.8, - ecl_sum_get_well_var( resp, 1, "W_1", "WVPR" ), 1e-5 ); - BOOST_CHECK_CLOSE( 20.6 + 20.7 + 20.8, - ecl_sum_get_well_var( resp, 1, "W_2", "WVPR" ), 1e-5 ); - - BOOST_CHECK_CLOSE( 10.5, ecl_sum_get_well_var( resp, 1, "W_1", "WOPRS" ), 1e-5 ); - BOOST_CHECK_CLOSE( 20.5, ecl_sum_get_well_var( resp, 1, "W_2", "WOPRS" ), 1e-5 ); - BOOST_CHECK_CLOSE( (10.1 - 10.5), ecl_sum_get_well_var( resp, 1, "W_1", "WOPRF" ), 1e-5 ); - BOOST_CHECK_CLOSE( (20.1 - 20.5), ecl_sum_get_well_var( resp, 1, "W_2", "WOPRF" ), 1e-5 ); - - BOOST_CHECK_CLOSE( -10.13, ecl_sum_get_well_var( resp, 1, "W_1", "WWPP" ), 1e-5 ); - BOOST_CHECK_CLOSE( -10.14, ecl_sum_get_well_var( resp, 1, "W_1", "WOPP" ), 1e-5 ); - BOOST_CHECK_CLOSE( -10.15, ecl_sum_get_well_var( resp, 1, "W_1", "WGPP" ), 1e-5 ); - BOOST_CHECK_CLOSE( -20.13, ecl_sum_get_well_var( resp, 1, "W_2", "WWPP" ), 1e-5 ); - BOOST_CHECK_CLOSE( -20.14, ecl_sum_get_well_var( resp, 1, "W_2", "WOPP" ), 1e-5 ); - BOOST_CHECK_CLOSE( -20.15, ecl_sum_get_well_var( resp, 1, "W_2", "WGPP" ), 1e-5 ); - BOOST_CHECK_CLOSE( 30.13, ecl_sum_get_well_var( resp, 1, "W_3", "WWPI" ), 1e-5 ); - BOOST_CHECK_CLOSE( 60.15, ecl_sum_get_well_var( resp, 1, "W_6", "WGPI" ), 1e-5 ); - - /* Production totals */ - BOOST_CHECK_CLOSE( 10.0, ecl_sum_get_well_var( resp, 1, "W_1", "WWPT" ), 1e-5 ); - BOOST_CHECK_CLOSE( 20.0, ecl_sum_get_well_var( resp, 1, "W_2", "WWPT" ), 1e-5 ); - BOOST_CHECK_CLOSE( 10.1, ecl_sum_get_well_var( resp, 1, "W_1", "WOPT" ), 1e-5 ); - BOOST_CHECK_CLOSE( 20.1, ecl_sum_get_well_var( resp, 1, "W_2", "WOPT" ), 1e-5 ); - BOOST_CHECK_CLOSE( 10.2, ecl_sum_get_well_var( resp, 1, "W_1", "WGPT" ), 1e-5 ); - BOOST_CHECK_CLOSE( 20.2, ecl_sum_get_well_var( resp, 1, "W_2", "WGPT" ), 1e-5 ); - BOOST_CHECK_CLOSE( 10.3, ecl_sum_get_well_var( resp, 1, "W_1", "WNPT" ), 1e-5 ); - BOOST_CHECK_CLOSE( 20.3, ecl_sum_get_well_var( resp, 1, "W_2", "WNPT" ), 1e-5 ); - BOOST_CHECK_CLOSE( (10.0 + 10.1), ecl_sum_get_well_var( resp, 1, "W_1", "WLPT" ), 1e-5 ); - BOOST_CHECK_CLOSE( (20.0 + 20.1), ecl_sum_get_well_var( resp, 1, "W_2", "WLPT" ), 1e-5 ); - BOOST_CHECK_CLOSE( 10.5, ecl_sum_get_well_var( resp, 1, "W_1", "WOPTS" ), 1e-5 ); - BOOST_CHECK_CLOSE( 20.5, ecl_sum_get_well_var( resp, 1, "W_2", "WOPTS" ), 1e-5 ); - BOOST_CHECK_CLOSE( (10.1 - 10.5), ecl_sum_get_well_var( resp, 1, "W_1", "WOPTF" ), 1e-5 ); - BOOST_CHECK_CLOSE( (20.1 - 20.5), ecl_sum_get_well_var( resp, 1, "W_2", "WOPTF" ), 1e-5 ); - BOOST_CHECK_CLOSE( 10.6 + 10.7 + 10.8, - ecl_sum_get_well_var( resp, 1, "W_1", "WVPT" ), 1e-5 ); - BOOST_CHECK_CLOSE( 20.6 + 20.7 + 20.8, - ecl_sum_get_well_var( resp, 1, "W_2", "WVPT" ), 1e-5 ); - - BOOST_CHECK_CLOSE( 2 * 10.0, ecl_sum_get_well_var( resp, 2, "W_1", "WWPT" ), 1e-5 ); - BOOST_CHECK_CLOSE( 2 * 20.0, ecl_sum_get_well_var( resp, 2, "W_2", "WWPT" ), 1e-5 ); - BOOST_CHECK_CLOSE( 2 * 10.1, ecl_sum_get_well_var( resp, 2, "W_1", "WOPT" ), 1e-5 ); - BOOST_CHECK_CLOSE( 2 * 20.1, ecl_sum_get_well_var( resp, 2, "W_2", "WOPT" ), 1e-5 ); - BOOST_CHECK_CLOSE( 2 * 10.2, ecl_sum_get_well_var( resp, 2, "W_1", "WGPT" ), 1e-5 ); - BOOST_CHECK_CLOSE( 2 * 20.2, ecl_sum_get_well_var( resp, 2, "W_2", "WGPT" ), 1e-5 ); - BOOST_CHECK_CLOSE( ( 20.0 + 20.1 ), ecl_sum_get_well_var( resp, 2, "W_2", "WLPR" ), 1e-5 ); - BOOST_CHECK_CLOSE( 2 * (20.0 + 20.1), ecl_sum_get_well_var( resp, 2, "W_2", "WLPT" ), 1e-5 ); - BOOST_CHECK_CLOSE( 2 * 10.3, ecl_sum_get_well_var( resp, 2, "W_1", "WNPT" ), 1e-5 ); - BOOST_CHECK_CLOSE( 2 * 20.3, ecl_sum_get_well_var( resp, 2, "W_2", "WNPT" ), 1e-5 ); - - BOOST_CHECK_CLOSE( 2 * 10.4, ecl_sum_get_well_var( resp, 2, "W_1", "WGPTS" ), 1e-5 ); - BOOST_CHECK_CLOSE( 2 * 20.4, ecl_sum_get_well_var( resp, 2, "W_2", "WGPTS" ), 1e-5 ); - BOOST_CHECK_CLOSE( 2 * ( 10.2 - 10.4 ), ecl_sum_get_well_var( resp, 2, "W_1", "WGPTF" ), 1e-5 ); - BOOST_CHECK_CLOSE( 2 * ( 20.2 - 20.4 ), ecl_sum_get_well_var( resp, 2, "W_2", "WGPTF" ), 1e-5 ); - - BOOST_CHECK_CLOSE( 2 * 10.5, ecl_sum_get_well_var( resp, 2, "W_1", "WOPTS" ), 1e-5 ); - BOOST_CHECK_CLOSE( 2 * 20.5, ecl_sum_get_well_var( resp, 2, "W_2", "WOPTS" ), 1e-5 ); - BOOST_CHECK_CLOSE( 2 * ( 10.1 - 10.5 ), ecl_sum_get_well_var( resp, 2, "W_1", "WOPTF" ), 1e-5 ); - BOOST_CHECK_CLOSE( 2 * ( 20.1 - 20.5 ), ecl_sum_get_well_var( resp, 2, "W_2", "WOPTF" ), 1e-5 ); - BOOST_CHECK_CLOSE( 2 * (10.6 + 10.7 + 10.8), - ecl_sum_get_well_var( resp, 2, "W_1", "WVPT" ), 1e-5 ); - BOOST_CHECK_CLOSE( 2 * (20.6 + 20.7 + 20.8), - ecl_sum_get_well_var( resp, 2, "W_2", "WVPT" ), 1e-5 ); - - /* Production rates (history) */ - BOOST_CHECK_CLOSE( 10, ecl_sum_get_well_var( resp, 1, "W_1", "WWPRH" ), 1e-5 ); - BOOST_CHECK_CLOSE( 20, ecl_sum_get_well_var( resp, 1, "W_2", "WWPRH" ), 1e-5 ); - BOOST_CHECK_CLOSE( 10.1, ecl_sum_get_well_var( resp, 1, "W_1", "WOPRH" ), 1e-5 ); - BOOST_CHECK_CLOSE( 20.1, ecl_sum_get_well_var( resp, 1, "W_2", "WOPRH" ), 1e-5 ); - BOOST_CHECK_CLOSE( 10.2, ecl_sum_get_well_var( resp, 1, "W_1", "WGPRH" ), 1e-5 ); - BOOST_CHECK_CLOSE( 20.2, ecl_sum_get_well_var( resp, 1, "W_2", "WGPRH" ), 1e-5 ); - - /* Production totals (history) */ - BOOST_CHECK_CLOSE( 2 * 10.0, ecl_sum_get_well_var( resp, 2, "W_1", "WWPTH" ), 1e-5 ); - BOOST_CHECK_CLOSE( 2 * 20.0, ecl_sum_get_well_var( resp, 2, "W_2", "WWPTH" ), 1e-5 ); - BOOST_CHECK_CLOSE( 2 * 10.1, ecl_sum_get_well_var( resp, 2, "W_1", "WOPTH" ), 1e-5 ); - BOOST_CHECK_CLOSE( 2 * 20.1, ecl_sum_get_well_var( resp, 2, "W_2", "WOPTH" ), 1e-5 ); - BOOST_CHECK_CLOSE( 2 * 10.2, ecl_sum_get_well_var( resp, 2, "W_1", "WGPTH" ), 1e-5 ); - BOOST_CHECK_CLOSE( 2 * 20.2, ecl_sum_get_well_var( resp, 2, "W_2", "WGPTH" ), 1e-5 ); - - /* Injection rates */ - BOOST_CHECK_CLOSE( 30.0, ecl_sum_get_well_var( resp, 1, "W_3", "WWIR" ), 1e-5 ); - BOOST_CHECK_CLOSE( 30.6, ecl_sum_get_well_var( resp, 1, "W_3", "WWVIR" ), 1e-5 ); - BOOST_CHECK_CLOSE( 30.8, ecl_sum_get_well_var( resp, 1, "W_3", "WGVIR" ), 1e-5 ); - BOOST_CHECK_CLOSE( 30.2, ecl_sum_get_well_var( resp, 1, "W_3", "WGIR" ), 1e-5 ); - BOOST_CHECK_CLOSE( 30.3, ecl_sum_get_well_var( resp, 1, "W_3", "WNIR" ), 1e-5 ); - BOOST_CHECK_CLOSE( 30.0 * 1.5, ecl_sum_get_well_var( resp, 1, "W_3", "WCIR" ), 1e-5 ); - BOOST_CHECK_CLOSE( 30.0 * 2.5, ecl_sum_get_well_var( resp, 2, "W_3", "WCIR" ), 1e-5 ); - - /* Injection totals */ - BOOST_CHECK_CLOSE( 30.0, ecl_sum_get_well_var( resp, 1, "W_3", "WWIT" ), 1e-5 ); - BOOST_CHECK_CLOSE( 30.2, ecl_sum_get_well_var( resp, 1, "W_3", "WGIT" ), 1e-5 ); - BOOST_CHECK_CLOSE( 30.3, ecl_sum_get_well_var( resp, 1, "W_3", "WNIT" ), 1e-5 ); - BOOST_CHECK_CLOSE( 30.0 * 1.5, ecl_sum_get_well_var( resp, 1, "W_3", "WCIT" ), 1e-5 ); - BOOST_CHECK_CLOSE( (30.6 + 30.7 + 30.8), - ecl_sum_get_well_var( resp, 1, "W_3", "WVIT" ), 1e-5 ); - BOOST_CHECK_CLOSE( 2 * 30.0, ecl_sum_get_well_var( resp, 2, "W_3", "WWIT" ), 1e-5 ); - BOOST_CHECK_CLOSE( 2 * 30.2, ecl_sum_get_well_var( resp, 2, "W_3", "WGIT" ), 1e-5 ); - BOOST_CHECK_CLOSE( 2 * 30.3, ecl_sum_get_well_var( resp, 2, "W_3", "WNIT" ), 1e-5 ); - BOOST_CHECK_CLOSE( 30.0 * 1.5 + 30.0 * 2.5, ecl_sum_get_well_var( resp, 2, "W_3", "WCIT" ), 1e-5 ); - BOOST_CHECK_CLOSE( 2* (30.6 + 30.7 + 30.8), - ecl_sum_get_well_var( resp, 2, "W_3", "WVIT" ), 1e-5 ); - - /* Injection rates (history) */ - BOOST_CHECK_CLOSE( 30.0, ecl_sum_get_well_var( resp, 1, "W_3", "WWIRH" ), 1e-5 ); - BOOST_CHECK_CLOSE( 0, ecl_sum_get_well_var( resp, 1, "W_3", "WGIRH" ), 1e-5 ); - - /* Injection totals (history) */ - BOOST_CHECK_CLOSE( 30.0, ecl_sum_get_well_var( resp, 1, "W_3", "WWITH" ), 1e-5 ); - BOOST_CHECK_CLOSE( 0, ecl_sum_get_well_var( resp, 1, "W_3", "WGITH" ), 1e-5 ); - BOOST_CHECK_CLOSE( 60.0, ecl_sum_get_well_var( resp, 2, "W_3", "WWITH" ), 1e-5 ); - BOOST_CHECK_CLOSE( 0, ecl_sum_get_well_var( resp, 2, "W_3", "WGITH" ), 1e-5 ); - - /* Production targets */ - BOOST_CHECK_CLOSE( 30.1 , ecl_sum_get_well_var( resp, 1, "W_5", "WVPRT" ), 1e-5 ); - - /* WWCT - water cut */ - const double wwcut1 = 10.0 / ( 10.0 + 10.1 ); - const double wwcut2 = 20.0 / ( 20.0 + 20.1 ); - const double wwcut3 = 0; - - BOOST_CHECK_CLOSE( wwcut1, ecl_sum_get_well_var( resp, 1, "W_1", "WWCT" ), 1e-5 ); - BOOST_CHECK_CLOSE( wwcut2, ecl_sum_get_well_var( resp, 1, "W_2", "WWCT" ), 1e-5 ); - BOOST_CHECK_CLOSE( wwcut3, ecl_sum_get_well_var( resp, 1, "W_3", "WWCT" ), 1e-5 ); - - /* gas-oil ratio */ - const double wgor1 = 10.2 / 10.1; - const double wgor2 = 20.2 / 20.1; - const double wgor3 = 0; - - BOOST_CHECK_CLOSE( wgor1, ecl_sum_get_well_var( resp, 1, "W_1", "WGOR" ), 1e-5 ); - BOOST_CHECK_CLOSE( wgor2, ecl_sum_get_well_var( resp, 1, "W_2", "WGOR" ), 1e-5 ); - BOOST_CHECK_CLOSE( wgor3, ecl_sum_get_well_var( resp, 1, "W_3", "WGOR" ), 1e-5 ); - - BOOST_CHECK_CLOSE( wgor1, ecl_sum_get_well_var( resp, 1, "W_1", "WGORH" ), 1e-5 ); - BOOST_CHECK_CLOSE( wgor2, ecl_sum_get_well_var( resp, 1, "W_2", "WGORH" ), 1e-5 ); - BOOST_CHECK_CLOSE( 0, ecl_sum_get_well_var( resp, 1, "W_3", "WGORH" ), 1e-5 ); - - /* WGLR - gas-liquid rate */ - const double wglr1 = 10.2 / ( 10.0 + 10.1 ); - const double wglr2 = 20.2 / ( 20.0 + 20.1 ); - const double wglr3 = 0; - - BOOST_CHECK_CLOSE( wglr1, ecl_sum_get_well_var( resp, 1, "W_1", "WGLR" ), 1e-5 ); - BOOST_CHECK_CLOSE( wglr2, ecl_sum_get_well_var( resp, 1, "W_2", "WGLR" ), 1e-5 ); - BOOST_CHECK_CLOSE( wglr3, ecl_sum_get_well_var( resp, 1, "W_3", "WGLR" ), 1e-5 ); - - BOOST_CHECK_CLOSE( wglr1, ecl_sum_get_well_var( resp, 1, "W_1", "WGLRH" ), 1e-5 ); - BOOST_CHECK_CLOSE( wglr2, ecl_sum_get_well_var( resp, 1, "W_2", "WGLRH" ), 1e-5 ); - BOOST_CHECK_CLOSE( 0, ecl_sum_get_well_var( resp, 1, "W_3", "WGLRH" ), 1e-5 ); - - /* BHP */ - BOOST_CHECK_CLOSE( 0.1, ecl_sum_get_well_var( resp, 1, "W_1", "WBHP" ), 1e-5 ); - BOOST_CHECK_CLOSE( 1.1, ecl_sum_get_well_var( resp, 1, "W_2", "WBHP" ), 1e-5 ); - BOOST_CHECK_CLOSE( 2.1, ecl_sum_get_well_var( resp, 1, "W_3", "WBHP" ), 1e-5 ); - - /* THP */ - BOOST_CHECK_CLOSE( 0.2, ecl_sum_get_well_var( resp, 1, "W_1", "WTHP" ), 1e-5 ); - BOOST_CHECK_CLOSE( 1.2, ecl_sum_get_well_var( resp, 1, "W_2", "WTHP" ), 1e-5 ); - BOOST_CHECK_CLOSE( 2.2, ecl_sum_get_well_var( resp, 1, "W_3", "WTHP" ), 1e-5 ); - - /* BHP (history) */ - BOOST_CHECK_CLOSE( 0.1, ecl_sum_get_well_var( resp, 1, "W_1", "WBHPH" ), 1e-5 ); - BOOST_CHECK_CLOSE( 1.1, ecl_sum_get_well_var( resp, 1, "W_2", "WBHPH" ), 1e-5 ); - BOOST_CHECK_CLOSE( 2.1, ecl_sum_get_well_var( resp, 1, "W_3", "WBHPH" ), 1e-5 ); - - /* THP (history) */ - BOOST_CHECK_CLOSE( 0.2, ecl_sum_get_well_var( resp, 1, "W_1", "WTHPH" ), 1e-5 ); - BOOST_CHECK_CLOSE( 1.2, ecl_sum_get_well_var( resp, 1, "W_2", "WTHPH" ), 1e-5 ); - BOOST_CHECK_CLOSE( 2.2, ecl_sum_get_well_var( resp, 1, "W_3", "WTHPH" ), 1e-5 ); -} - -BOOST_AUTO_TEST_CASE(udq_keywords) { - setup cfg( "test_summary_udq" ); - - out::Summary writer( cfg.es, cfg.config, cfg.grid, cfg.schedule , cfg.name ); - SummaryState st(std::chrono::system_clock::now()); - writer.eval( st, 0, 0 * day, cfg.es, cfg.schedule, cfg.wells , cfg.groups, {}); - writer.add_timestep( st, 0); - writer.eval( st, 1, 1 * day, cfg.es, cfg.schedule, cfg.wells , cfg.groups, {}); - writer.add_timestep( st, 1); - writer.eval( st, 2, 2 * day, cfg.es, cfg.schedule, cfg.wells , cfg.groups, {}); - writer.add_timestep( st, 2); - writer.write(); - - auto res = readsum( cfg.name ); - const auto* resp = res.get(); - - const auto& udq_params = cfg.es.runspec().udqParams(); - BOOST_CHECK_CLOSE( ecl_sum_get_well_var(resp, 1, "W_1", "WUBHP"), udq_params.undefinedValue(), 1e-5 ); - BOOST_CHECK_CLOSE( ecl_sum_get_well_var(resp, 1, "W_3", "WUBHP"), udq_params.undefinedValue(), 1e-5 ); - -#if 0 - BOOST_CHECK_EQUAL( std::string(ecl_sum_get_unit(resp, "WUBHP:W_1")), "BARSA"); -#endif -} - -BOOST_AUTO_TEST_CASE(group_keywords) { - setup cfg( "test_summary_group" ); - - out::Summary writer( cfg.es, cfg.config, cfg.grid, cfg.schedule, cfg.name ); - SummaryState st(std::chrono::system_clock::now()); - writer.eval( st, 0, 0 * day, cfg.es, cfg.schedule, cfg.wells , cfg.groups, {}); - writer.add_timestep( st, 0); - - writer.eval( st, 1, 1 * day, cfg.es, cfg.schedule, cfg.wells , cfg.groups, {}); - writer.add_timestep( st, 1); - - writer.eval( st, 2, 2 * day, cfg.es, cfg.schedule, cfg.wells , cfg.groups, {}); - writer.add_timestep( st, 2); - - writer.write(); - - auto res = readsum( cfg.name ); - const auto* resp = res.get(); - - /* Production rates */ - BOOST_CHECK_CLOSE( 10.0 + 20.0, ecl_sum_get_group_var( resp, 1, "G_1", "GWPR" ), 1e-5 ); - BOOST_CHECK_CLOSE( 10.1 + 20.1, ecl_sum_get_group_var( resp, 1, "G_1", "GOPR" ), 1e-5 ); - BOOST_CHECK_CLOSE( 10.2 + 20.2, ecl_sum_get_group_var( resp, 1, "G_1", "GGPR" ), 1e-5 ); - BOOST_CHECK_CLOSE( 10.3 + 20.3, ecl_sum_get_group_var( resp, 1, "G_1", "GNPR" ), 1e-5 ); - BOOST_CHECK_CLOSE( 10.4 + 20.4, ecl_sum_get_group_var( resp, 1, "G_1", "GGPRS" ), 1e-5 ); - BOOST_CHECK_CLOSE((10.2 - 10.4) + (20.2 - 20.4), - ecl_sum_get_group_var( resp, 1, "G_1", "GGPRF" ), 1e-5 ); - BOOST_CHECK_CLOSE( 10.5 + 20.5, ecl_sum_get_group_var( resp, 1, "G_1", "GOPRS" ), 1e-5 ); - BOOST_CHECK_CLOSE((10.1 - 10.5) + (20.1 - 20.5), - ecl_sum_get_group_var( resp, 1, "G_1", "GOPRF" ), 1e-5 ); - BOOST_CHECK_CLOSE( 10.6 + 10.7 + 10.8 + 20.6 + 20.7 + 20.8, - ecl_sum_get_group_var( resp, 1, "G_1", "GVPR" ), 1e-5 ); - - BOOST_CHECK_CLOSE( -10.13 - 20.13, ecl_sum_get_group_var( resp, 1, "G_1", "GWPP" ), 1e-5 ); - BOOST_CHECK_CLOSE( -10.14 - 20.14, ecl_sum_get_group_var( resp, 1, "G_1", "GOPP" ), 1e-5 ); - BOOST_CHECK_CLOSE( -10.15 - 20.15, ecl_sum_get_group_var( resp, 1, "G_1", "GGPP" ), 1e-5 ); - BOOST_CHECK_CLOSE( 30.13 + 60.13, ecl_sum_get_group_var( resp, 1, "G_2", "GWPI" ), 1e-5 ); - BOOST_CHECK_CLOSE( 30.15 + 60.15, ecl_sum_get_group_var( resp, 1, "G_2", "GGPI" ), 1e-5 ); - - /* Production totals */ - BOOST_CHECK_CLOSE( 10.0 + 20.0, ecl_sum_get_group_var( resp, 1, "G_1", "GWPT" ), 1e-5 ); - BOOST_CHECK_CLOSE( 10.1 + 20.1, ecl_sum_get_group_var( resp, 1, "G_1", "GOPT" ), 1e-5 ); - BOOST_CHECK_CLOSE( 10.2 + 20.2, ecl_sum_get_group_var( resp, 1, "G_1", "GGPT" ), 1e-5 ); - BOOST_CHECK_CLOSE( 10.3 + 20.3, ecl_sum_get_group_var( resp, 1, "G_1", "GNPT" ), 1e-5 ); - BOOST_CHECK_CLOSE( 10.4 + 20.4, ecl_sum_get_group_var( resp, 1, "G_1", "GGPTS" ), 1e-5 ); - BOOST_CHECK_CLOSE( 10.5 + 20.5, ecl_sum_get_group_var( resp, 1, "G_1", "GOPTS" ), 1e-5 ); - BOOST_CHECK_CLOSE( (10.1 - 10.5) + (20.1 - 20.5), ecl_sum_get_group_var( resp, 1, "G_1", "GOPTF" ), 1e-5 ); - BOOST_CHECK_CLOSE( (10.2 - 10.4) + (20.2 - 20.4), ecl_sum_get_group_var( resp, 1, "G_1", "GGPTF" ), 1e-5 ); - BOOST_CHECK_CLOSE( 10.6 + 10.7 + 10.8 + 20.6 + 20.7 + 20.8, - ecl_sum_get_group_var( resp, 1, "G_1", "GVPT" ), 1e-5 ); - BOOST_CHECK_CLOSE( 2 * (10.0 + 20.0), ecl_sum_get_group_var( resp, 2, "G_1", "GWPT" ), 1e-5 ); - BOOST_CHECK_CLOSE( 2 * (10.1 + 20.1), ecl_sum_get_group_var( resp, 2, "G_1", "GOPT" ), 1e-5 ); - BOOST_CHECK_CLOSE( 2 * (10.2 + 20.2), ecl_sum_get_group_var( resp, 2, "G_1", "GGPT" ), 1e-5 ); - BOOST_CHECK_CLOSE( 2 * (10.3 + 20.3), ecl_sum_get_group_var( resp, 2, "G_1", "GNPT" ), 1e-5 ); - BOOST_CHECK_CLOSE( 2 * (10.4 + 20.4), ecl_sum_get_group_var( resp, 2, "G_1", "GGPTS" ), 1e-5 ); - BOOST_CHECK_CLOSE( 2 * (10.5 + 20.5), ecl_sum_get_group_var( resp, 2, "G_1", "GOPTS" ), 1e-5 ); - BOOST_CHECK_CLOSE( 2 * ((10.2 - 10.4) + (20.2 - 20.4)), ecl_sum_get_group_var( resp, 2, "G_1", "GGPTF" ), 1e-5 ); - BOOST_CHECK_CLOSE( 2 * ((10.1 - 10.5) + (20.1 - 20.5)), ecl_sum_get_group_var( resp, 2, "G_1", "GOPTF" ), 1e-5 ); - BOOST_CHECK_CLOSE( 2 * (10.6 + 10.7 + 10.8 + 20.6 + 20.7 + 20.8), - ecl_sum_get_group_var( resp, 2, "G_1", "GVPT" ), 1e-5 ); - - /* Production rates (history) */ - BOOST_CHECK_CLOSE( 10.0 + 20.0, ecl_sum_get_group_var( resp, 1, "G_1", "GWPRH" ), 1e-5 ); - BOOST_CHECK_CLOSE( 10.1 + 20.1, ecl_sum_get_group_var( resp, 1, "G_1", "GOPRH" ), 1e-5 ); - BOOST_CHECK_CLOSE( 10.2 + 20.2, ecl_sum_get_group_var( resp, 1, "G_1", "GGPRH" ), 1e-5 ); - BOOST_CHECK_CLOSE( 10.0 + 10.1 + 20.0 + 20.1, - ecl_sum_get_group_var( resp, 1, "G_1", "GLPRH" ), 1e-5 ); - - /* Production totals (history) */ - BOOST_CHECK_CLOSE( (10.0 + 20.0), ecl_sum_get_group_var( resp, 1, "G_1", "GWPTH" ), 1e-5 ); - BOOST_CHECK_CLOSE( 0, ecl_sum_get_group_var( resp, 1, "G_2", "GWPTH" ), 1e-5 ); - BOOST_CHECK_CLOSE( (10.1 + 20.1), ecl_sum_get_group_var( resp, 1, "G_1", "GOPTH" ), 1e-5 ); - BOOST_CHECK_CLOSE( 0, ecl_sum_get_group_var( resp, 1, "G_2", "GOPTH" ), 1e-5 ); - BOOST_CHECK_CLOSE( (10.2 + 20.2), ecl_sum_get_group_var( resp, 1, "G_1", "GGPTH" ), 1e-5 ); - BOOST_CHECK_CLOSE( 0, ecl_sum_get_group_var( resp, 1, "G_2", "GGPTH" ), 1e-5 ); - BOOST_CHECK_CLOSE( (10.0 + 20.0 + 10.1 + 20.1), - ecl_sum_get_group_var( resp, 1, "G_1", "GLPTH" ), 1e-5 ); - BOOST_CHECK_CLOSE( 0, ecl_sum_get_group_var( resp, 1, "G_2", "GLPTH" ), 1e-5 ); - - /* Production targets */ - BOOST_CHECK_CLOSE( 30.1 , ecl_sum_get_group_var( resp, 1, "G_3", "GVPRT" ), 1e-5 ); - - /* Injection rates */ - BOOST_CHECK_CLOSE( 30.0 + 60.0, ecl_sum_get_group_var( resp, 1, "G_2", "GWIR" ), 1e-5 ); - BOOST_CHECK_CLOSE( 30.2 + 60.2, ecl_sum_get_group_var( resp, 1, "G_2", "GGIR" ), 1e-5 ); - BOOST_CHECK_CLOSE( 30.3 + 60.3, ecl_sum_get_group_var( resp, 1, "G_2", "GNIR" ), 1e-5 ); - BOOST_CHECK_CLOSE( 30.0 * 1.5, ecl_sum_get_group_var( resp, 1, "G_2", "GCIR" ), 1e-5 ); - BOOST_CHECK_CLOSE( 30.0 * 2.5, ecl_sum_get_group_var( resp, 2, "G_2", "GCIR" ), 1e-5 ); - BOOST_CHECK_CLOSE( (30.6 + 30.7 + 30.8 + 60.6 + 60.7 + 60.8), - ecl_sum_get_group_var( resp, 1, "G_2", "GVIR" ), 1e-5 ); - - /* Injection totals */ - BOOST_CHECK_CLOSE( 30.0 + 60.0, ecl_sum_get_group_var( resp, 1, "G_2", "GWIT" ), 1e-5 ); - BOOST_CHECK_CLOSE( 30.2 + 60.2, ecl_sum_get_group_var( resp, 1, "G_2", "GGIT" ), 1e-5 ); - BOOST_CHECK_CLOSE( 30.3 + 60.3, ecl_sum_get_group_var( resp, 1, "G_2", "GNIT" ), 1e-5 ); - BOOST_CHECK_CLOSE( 30.0 * 1.5, ecl_sum_get_group_var( resp, 1, "G_2", "GCIT" ), 1e-5 ); - BOOST_CHECK_CLOSE( (30.6 + 30.7 + 30.8 + 60.6 + 60.7 + 60.8), - ecl_sum_get_group_var( resp, 1, "G_2", "GVIT" ), 1e-5 ); - BOOST_CHECK_CLOSE( 2 * (30.0 + 60.0), ecl_sum_get_group_var( resp, 2, "G_2", "GWIT" ), 1e-5 ); - BOOST_CHECK_CLOSE( 2 * (30.2 + 60.2), ecl_sum_get_group_var( resp, 2, "G_2", "GGIT" ), 1e-5 ); - BOOST_CHECK_CLOSE( 2 * (30.3 + 60.3), ecl_sum_get_group_var( resp, 2, "G_2", "GNIT" ), 1e-5 ); - BOOST_CHECK_CLOSE( 30.0 * 1.5 + 30.0 * 2.5, ecl_sum_get_group_var( resp, 2, "G_2", "GCIT" ), 1e-5 ); - BOOST_CHECK_CLOSE( 2 * (30.6 + 30.7 + 30.8 + 60.6 + 60.7 + 60.8), - ecl_sum_get_group_var( resp, 2, "G_2", "GVIT" ), 1e-5 ); - - /* Injection totals (history) */ - BOOST_CHECK_CLOSE( 30.0, ecl_sum_get_group_var( resp, 1, "G_2", "GWITH" ), 1e-5 ); - BOOST_CHECK_CLOSE( 30000., ecl_sum_get_group_var( resp, 1, "G_2", "GGITH" ), 1e-5 ); - BOOST_CHECK_CLOSE( 60.0, ecl_sum_get_group_var( resp, 2, "G_2", "GWITH" ), 1e-5 ); - BOOST_CHECK_CLOSE( 60000., ecl_sum_get_group_var( resp, 2, "G_2", "GGITH" ), 1e-5 ); - - /* gwct - water cut */ - const double gwcut1 = (10.0 + 20.0) / ( 10.0 + 10.1 + 20.0 + 20.1 ); - const double gwcut2 = 0; - BOOST_CHECK_CLOSE( gwcut1, ecl_sum_get_group_var( resp, 1, "G_1", "GWCT" ), 1e-5 ); - BOOST_CHECK_CLOSE( gwcut2, ecl_sum_get_group_var( resp, 1, "G_2", "GWCT" ), 1e-5 ); - - BOOST_CHECK_CLOSE( gwcut1, ecl_sum_get_group_var( resp, 1, "G_1", "GWCTH" ), 1e-5 ); - BOOST_CHECK_CLOSE( gwcut2, ecl_sum_get_group_var( resp, 1, "G_2", "GWCTH" ), 1e-5 ); - - /* ggor - gas-oil ratio */ - const double ggor1 = (10.2 + 20.2) / (10.1 + 20.1); - const double ggor2 = 0; - BOOST_CHECK_CLOSE( ggor1, ecl_sum_get_group_var( resp, 1, "G_1", "GGOR" ), 1e-5 ); - BOOST_CHECK_CLOSE( ggor2, ecl_sum_get_group_var( resp, 1, "G_2", "GGOR" ), 1e-5 ); - - BOOST_CHECK_CLOSE( ggor1, ecl_sum_get_group_var( resp, 1, "G_1", "GGORH" ), 1e-5 ); - BOOST_CHECK_CLOSE( ggor2, ecl_sum_get_group_var( resp, 1, "G_2", "GGORH" ), 1e-5 ); - - const double gglr1 = (10.2 + 20.2) / ( 10.0 + 10.1 + 20.0 + 20.1 ); - const double gglr2 = 0; - BOOST_CHECK_CLOSE( gglr1, ecl_sum_get_group_var( resp, 1, "G_1", "GGLR" ), 1e-5 ); - BOOST_CHECK_CLOSE( gglr2, ecl_sum_get_group_var( resp, 1, "G_2", "GGLR" ), 1e-5 ); - - BOOST_CHECK_CLOSE( gglr1, ecl_sum_get_group_var( resp, 1, "G_1", "GGLRH" ), 1e-5 ); - BOOST_CHECK_CLOSE( gglr2, ecl_sum_get_group_var( resp, 1, "G_2", "GGLRH" ), 1e-5 ); - - - BOOST_CHECK_EQUAL( 0, ecl_sum_get_group_var( resp, 1, "G_1", "GMWIN" ) ); - BOOST_CHECK_EQUAL( 2, ecl_sum_get_group_var( resp, 1, "G_1", "GMWPR" ) ); - BOOST_CHECK_EQUAL( 2, ecl_sum_get_group_var( resp, 1, "G_2", "GMWIN" ) ); - BOOST_CHECK_EQUAL( 0, ecl_sum_get_group_var( resp, 1, "G_2", "GMWPR" ) ); -} - -BOOST_AUTO_TEST_CASE(group_group) { - setup cfg( "test_summary_group_group" , "group_group.DATA"); - - out::Summary writer( cfg.es, cfg.config, cfg.grid, cfg.schedule, cfg.name ); - SummaryState st(std::chrono::system_clock::now()); - writer.eval( st, 0, 0 * day, cfg.es, cfg.schedule, cfg.wells , cfg.groups, {}); - writer.add_timestep( st, 0); - writer.eval( st, 1, 1 * day, cfg.es, cfg.schedule, cfg.wells , cfg.groups, {}); - writer.add_timestep( st, 1); - writer.eval( st, 2, 2 * day, cfg.es, cfg.schedule, cfg.wells , cfg.groups, {}); - writer.add_timestep( st, 2); - writer.write(); - - auto res = readsum( cfg.name ); - const auto* resp = res.get(); - - /* Production rates */ - BOOST_CHECK_CLOSE( 10.0 , ecl_sum_get_well_var( resp, 1, "W_1", "WWPR" ), 1e-5 ); - BOOST_CHECK_CLOSE( 10.0 , ecl_sum_get_group_var( resp, 1, "G_1", "GWPR" ), 1e-5 ); - BOOST_CHECK_CLOSE( 10.1 , ecl_sum_get_well_var( resp, 1, "W_1", "WOPR" ), 1e-5 ); - BOOST_CHECK_CLOSE( 10.1 , ecl_sum_get_group_var( resp, 1, "G_1", "GOPR" ), 1e-5 ); - BOOST_CHECK_CLOSE( 10.2 , ecl_sum_get_well_var( resp, 1, "W_1", "WGPR" ), 1e-5 ); - BOOST_CHECK_CLOSE( 10.2 , ecl_sum_get_group_var( resp, 1, "G_1", "GGPR" ), 1e-5 ); - - BOOST_CHECK_CLOSE( 20.0 , ecl_sum_get_well_var( resp, 1, "W_2", "WWPR" ), 1e-5 ); - BOOST_CHECK_CLOSE( 20.0 , ecl_sum_get_group_var( resp, 1, "G_2", "GWPR" ), 1e-5 ); - BOOST_CHECK_CLOSE( 20.1 , ecl_sum_get_well_var( resp, 1, "W_2", "WOPR" ), 1e-5 ); - BOOST_CHECK_CLOSE( 20.1 , ecl_sum_get_group_var( resp, 1, "G_2", "GOPR" ), 1e-5 ); - BOOST_CHECK_CLOSE( 20.2 , ecl_sum_get_well_var( resp, 1, "W_2", "WGPR" ), 1e-5 ); - BOOST_CHECK_CLOSE( 20.2 , ecl_sum_get_group_var( resp, 1, "G_2", "GGPR" ), 1e-5 ); - - - // Production totals - for (int step = 1; step <= 2; step++) { - BOOST_CHECK( ecl_sum_get_group_var( resp , step , "G_1" , "GWPT" ) == ecl_sum_get_well_var( resp , step , "W_1" , "WWPT")); - BOOST_CHECK( ecl_sum_get_group_var( resp , step , "G_1" , "GOPT" ) == ecl_sum_get_well_var( resp , step , "W_1" , "WOPT")); - BOOST_CHECK( ecl_sum_get_group_var( resp , step , "G_1" , "GGPT" ) == ecl_sum_get_well_var( resp , step , "W_1" , "WGPT")); - - BOOST_CHECK( ecl_sum_get_group_var( resp , step , "G_2" , "GWPT" ) == ecl_sum_get_well_var( resp , step , "W_2" , "WWPT")); - BOOST_CHECK( ecl_sum_get_group_var( resp , step , "G_2" , "GOPT" ) == ecl_sum_get_well_var( resp , step , "W_2" , "WOPT")); - BOOST_CHECK( ecl_sum_get_group_var( resp , step , "G_2" , "GGPT" ) == ecl_sum_get_well_var( resp , step , "W_2" , "WGPT")); - } - - for (const auto& gvar : {"GGPR", "GOPR", "GWPR"}) - BOOST_CHECK_CLOSE( ecl_sum_get_group_var( resp , 1 , "G" , gvar) , - ecl_sum_get_group_var( resp , 1 , "G_1" , gvar) + ecl_sum_get_group_var( resp , 1 , "G_2" , gvar) , 1e-5); - - for (int step = 1; step <= 2; step++) { - for (const auto& gvar : {"GGPT", "GOPT", "GWPT"}) - BOOST_CHECK_CLOSE( ecl_sum_get_group_var( resp , step , "G" , gvar) , - ecl_sum_get_group_var( resp , step , "G_1" , gvar) + ecl_sum_get_group_var( resp , step , "G_2" , gvar) , 1e-5); - } -} - - - -BOOST_AUTO_TEST_CASE(completion_kewords) { - setup cfg( "test_summary_completion" ); - - out::Summary writer( cfg.es, cfg.config, cfg.grid, cfg.schedule, cfg.name ); - SummaryState st(std::chrono::system_clock::now()); - writer.eval( st, 0, 0 * day, cfg.es, cfg.schedule, cfg.wells , cfg.groups, {}); - writer.add_timestep( st, 0); - writer.eval( st, 1, 1 * day, cfg.es, cfg.schedule, cfg.wells , cfg.groups, {}); - writer.add_timestep( st, 1); - writer.eval( st, 2, 2 * day, cfg.es, cfg.schedule, cfg.wells , cfg.groups, {}); - writer.add_timestep( st, 2); - writer.write(); - - auto res = readsum( cfg.name ); - const auto* resp = res.get(); - - /* Production rates */ - BOOST_CHECK_CLOSE( 100.0, ecl_sum_get_well_completion_var( resp, 1, "W_1", "CWPR", 1, 1, 1 ), 1e-5 ); - BOOST_CHECK_CLOSE( 100.1, ecl_sum_get_well_completion_var( resp, 1, "W_1", "COPR", 1, 1, 1 ), 1e-5 ); - BOOST_CHECK_CLOSE( 100.2, ecl_sum_get_well_completion_var( resp, 1, "W_1", "CGPR", 1, 1, 1 ), 1e-5 ); - - /* Production totals */ - BOOST_CHECK_CLOSE( 100.0, ecl_sum_get_well_completion_var( resp, 1, "W_1", "CWPT", 1, 1, 1 ), 1e-5 ); - BOOST_CHECK_CLOSE( 100.1, ecl_sum_get_well_completion_var( resp, 1, "W_1", "COPT", 1, 1, 1 ), 1e-5 ); - BOOST_CHECK_CLOSE( 100.2, ecl_sum_get_well_completion_var( resp, 1, "W_1", "CGPT", 1, 1, 1 ), 1e-5 ); - BOOST_CHECK_CLOSE( 100.3, ecl_sum_get_well_completion_var( resp, 1, "W_1", "CNPT", 1, 1, 1 ), 1e-5 ); - BOOST_CHECK_CLOSE( 2 * 100.0, ecl_sum_get_well_completion_var( resp, 2, "W_1", "CWPT", 1, 1, 1 ), 1e-5 ); - BOOST_CHECK_CLOSE( 2 * 100.1, ecl_sum_get_well_completion_var( resp, 2, "W_1", "COPT", 1, 1, 1 ), 1e-5 ); - - BOOST_CHECK_CLOSE( 2 * 100.2, ecl_sum_get_well_completion_var( resp, 2, "W_1", "CGPT", 1, 1, 1 ), 1e-5 ); - BOOST_CHECK_CLOSE( 2 * 200.2, ecl_sum_get_well_completion_var( resp, 2, "W_2", "CGPT", 2, 1, 1 ), 1e-5 ); - BOOST_CHECK_CLOSE( 0 , ecl_sum_get_well_completion_var( resp, 2, "W_3", "CGPT", 3, 1, 1 ), 1e-5 ); - - BOOST_CHECK_CLOSE( 1 * 100.2, ecl_sum_get_well_completion_var( resp, 1, "W_1", "CGPT", 1, 1, 1 ), 1e-5 ); - BOOST_CHECK_CLOSE( 1 * 200.2, ecl_sum_get_well_completion_var( resp, 1, "W_2", "CGPT", 2, 1, 1 ), 1e-5 ); - BOOST_CHECK_CLOSE( 0 , ecl_sum_get_well_completion_var( resp, 1, "W_3", "CGPT", 3, 1, 1 ), 1e-5 ); - - BOOST_CHECK_CLOSE( 2 * 100.3, ecl_sum_get_well_completion_var( resp, 2, "W_1", "CNPT", 1, 1, 1 ), 1e-5 ); - - /* Injection rates */ - BOOST_CHECK_CLOSE( 300.0, ecl_sum_get_well_completion_var( resp, 1, "W_3", "CWIR", 3, 1, 1 ), 1e-5 ); - BOOST_CHECK_CLOSE( 300.2, ecl_sum_get_well_completion_var( resp, 1, "W_3", "CGIR", 3, 1, 1 ), 1e-5 ); - BOOST_CHECK_CLOSE( 300.0 * 1.5, ecl_sum_get_well_completion_var( resp, 1, "W_3", "CCIR", 3, 1, 1 ), 1e-5 ); - BOOST_CHECK_CLOSE( 300.0 * 2.5, ecl_sum_get_well_completion_var( resp, 2, "W_3", "CCIR", 3, 1, 1 ), 1e-5 ); - - /* Injection totals */ - BOOST_CHECK_CLOSE( 300.0, ecl_sum_get_well_completion_var( resp, 1, "W_3", "CWIT", 3, 1, 1 ), 1e-5 ); - BOOST_CHECK_CLOSE( 300.2, ecl_sum_get_well_completion_var( resp, 1, "W_3", "CGIT", 3, 1, 1 ), 1e-5 ); - BOOST_CHECK_CLOSE( 300.3, ecl_sum_get_well_completion_var( resp, 1, "W_3", "CNIT", 3, 1, 1 ), 1e-5 ); - BOOST_CHECK_CLOSE( 300.0 * 1.5, ecl_sum_get_well_completion_var( resp, 1, "W_3", "CCIT", 3, 1, 1 ), 1e-5 ); - BOOST_CHECK_CLOSE( 2 * 300.0, ecl_sum_get_well_completion_var( resp, 2, "W_3", "CWIT", 3, 1, 1 ), 1e-5 ); - BOOST_CHECK_CLOSE( 2 * 300.2, ecl_sum_get_well_completion_var( resp, 2, "W_3", "CGIT", 3, 1, 1 ), 1e-5 ); - BOOST_CHECK_CLOSE( 2 * 300.3, ecl_sum_get_well_completion_var( resp, 2, "W_3", "CNIT", 3, 1, 1 ), 1e-5 ); - BOOST_CHECK_CLOSE( 300.0 * 1.5 + 300.0 * 2.5, - ecl_sum_get_well_completion_var( resp, 2, "W_3", "CCIT", 3, 1, 1 ), 1e-5 ); - - /* Solvent flow rate + or - Note OPM uses negative values for producers, while CNFR outputs positive - values for producers*/ - BOOST_CHECK_CLOSE( -300.3, ecl_sum_get_well_completion_var( resp, 1, "W_3", "CNFR", 3, 1, 1 ), 1e-5 ); - BOOST_CHECK_CLOSE( 200.3, ecl_sum_get_well_completion_var( resp, 1, "W_2", "CNFR", 2, 1, 1 ), 1e-5 ); -} - -BOOST_AUTO_TEST_CASE(DATE) { - setup cfg( "test_summary_DATE" ); - - out::Summary writer( cfg.es, cfg.config, cfg.grid, cfg.schedule, cfg.name ); - SummaryState st(std::chrono::system_clock::now()); - writer.eval( st, 1, 1 * day, cfg.es, cfg.schedule, cfg.wells , cfg.groups, {}); - writer.add_timestep( st, 1); - writer.eval( st, 2, 2 * day, cfg.es, cfg.schedule, cfg.wells , cfg.groups, {}); - writer.add_timestep( st, 2); - writer.eval( st, 3, 18 * day, cfg.es, cfg.schedule, cfg.wells , cfg.groups, {}); - writer.add_timestep( st, 3); - writer.eval( st, 4, 22 * day, cfg.es, cfg.schedule, cfg.wells , cfg.groups, {}); - writer.add_timestep( st, 4); - writer.write(); - - auto res = readsum( cfg.name ); - const auto* resp = res.get(); - - const auto& days = resp->get_at_rstep("DAY"); - BOOST_CHECK_EQUAL(days[0], 11); - BOOST_CHECK_EQUAL(days[1], 12); - BOOST_CHECK_EQUAL(days[2], 28); - BOOST_CHECK_EQUAL(days[3], 1); - - const auto& month = resp->get_at_rstep("MONTH"); - BOOST_CHECK_EQUAL(month[0], 5); - BOOST_CHECK_EQUAL(month[1], 5); - BOOST_CHECK_EQUAL(month[2], 5); - BOOST_CHECK_EQUAL(month[3], 6); - - const auto& year = resp->get_at_rstep("YEAR"); - BOOST_CHECK_EQUAL(year[0], 2007); - BOOST_CHECK_EQUAL(year[1], 2007); - BOOST_CHECK_EQUAL(year[2], 2007); - BOOST_CHECK_EQUAL(year[3], 2007); -} - -BOOST_AUTO_TEST_CASE(field_keywords) { - setup cfg( "test_summary_field" ); - - out::Summary writer( cfg.es, cfg.config, cfg.grid, cfg.schedule, cfg.name ); - SummaryState st(std::chrono::system_clock::now()); - writer.eval( st, 0, 0 * day, cfg.es, cfg.schedule, cfg.wells , cfg.groups, {}); - writer.add_timestep( st, 0); - writer.eval( st, 1, 1 * day, cfg.es, cfg.schedule, cfg.wells , cfg.groups, {}); - writer.add_timestep( st, 1); - writer.eval( st, 2, 2 * day, cfg.es, cfg.schedule, cfg.wells , cfg.groups, {}); - writer.add_timestep( st, 2); - writer.write(); - - auto res = readsum( cfg.name ); - const auto* resp = res.get(); - - /* Production rates */ - BOOST_CHECK_CLOSE( 10.0 + 20.0, ecl_sum_get_field_var( resp, 1, "FWPR" ), 1e-5 ); - BOOST_CHECK_CLOSE( 10.1 + 20.1, ecl_sum_get_field_var( resp, 1, "FOPR" ), 1e-5 ); - BOOST_CHECK_CLOSE( 10.2 + 20.2, ecl_sum_get_field_var( resp, 1, "FGPR" ), 1e-5 ); - BOOST_CHECK_CLOSE( 10.0 + 20.0 + 10.1 + 20.1, - ecl_sum_get_field_var( resp, 1, "FLPR" ), 1e-5 ); - BOOST_CHECK_CLOSE( 10.6 + 10.7 + 10.8 + 20.6 + 20.7 + 20.8, - ecl_sum_get_field_var( resp, 1, "FVPR" ), 1e-5 ); - BOOST_CHECK_CLOSE( 10.4 + 20.4, - ecl_sum_get_field_var( resp, 1, "FGPRS" ), 1e-5 ); - BOOST_CHECK_CLOSE( 10.2 - 10.4 + 20.2 - 20.4, - ecl_sum_get_field_var( resp, 1, "FGPRF" ), 1e-5 ); - BOOST_CHECK_CLOSE( 10.5 + 20.5, - ecl_sum_get_field_var( resp, 1, "FOPRS" ), 1e-5 ); - BOOST_CHECK_CLOSE( 10.1 - 10.5 + 20.1 - 20.5, - ecl_sum_get_field_var( resp, 1, "FOPRF" ), 1e-5 ); - - BOOST_CHECK_CLOSE( -10.13 - 20.13, ecl_sum_get_field_var( resp, 1, "FWPP" ), 1e-5 ); - BOOST_CHECK_CLOSE( -10.14 - 20.14, ecl_sum_get_field_var( resp, 1, "FOPP" ), 1e-5 ); - BOOST_CHECK_CLOSE( -10.15 - 20.15, ecl_sum_get_field_var( resp, 1, "FGPP" ), 1e-5 ); - BOOST_CHECK_CLOSE( 30.15 + 60.15, ecl_sum_get_field_var( resp, 1, "FGPI" ), 1e-5 ); - BOOST_CHECK_CLOSE( 30.13 + 60.13, ecl_sum_get_field_var( resp, 1, "FWPI" ), 1e-5 ); - - /* Production totals */ - BOOST_CHECK_CLOSE( 10.0 + 20.0, ecl_sum_get_field_var( resp, 1, "FWPT" ), 1e-5 ); - BOOST_CHECK_CLOSE( 10.1 + 20.1, ecl_sum_get_field_var( resp, 1, "FOPT" ), 1e-5 ); - BOOST_CHECK_CLOSE( 10.2 + 20.2, ecl_sum_get_field_var( resp, 1, "FGPT" ), 1e-5 ); - BOOST_CHECK_CLOSE( 10.0 + 20.0 + 10.1 + 20.1, - ecl_sum_get_field_var( resp, 1, "FLPT" ), 1e-5 ); - BOOST_CHECK_CLOSE( 10.6 + 10.7 + 10.8 + 20.6 + 20.7 + 20.8, - ecl_sum_get_field_var( resp, 1, "FVPT" ), 1e-5 ); - BOOST_CHECK_CLOSE( 10.4 + 20.4, - ecl_sum_get_field_var( resp, 1, "FGPTS" ), 1e-5 ); - BOOST_CHECK_CLOSE( 10.2 - 10.4 + 20.2 - 20.4, - ecl_sum_get_field_var( resp, 1, "FGPTF" ), 1e-5 ); - BOOST_CHECK_CLOSE( 10.5 + 20.5, - ecl_sum_get_field_var( resp, 1, "FOPTS" ), 1e-5 ); - BOOST_CHECK_CLOSE( 10.1 - 10.5 + 20.1 - 20.5, - ecl_sum_get_field_var( resp, 1, "FOPTF" ), 1e-5 ); - - BOOST_CHECK_CLOSE( 2 * (10.0 + 20.0), ecl_sum_get_field_var( resp, 2, "FWPT" ), 1e-5 ); - BOOST_CHECK_CLOSE( 2 * (10.1 + 20.1), ecl_sum_get_field_var( resp, 2, "FOPT" ), 1e-5 ); - BOOST_CHECK_CLOSE( 2 * (10.2 + 20.2), ecl_sum_get_field_var( resp, 2, "FGPT" ), 1e-5 ); - BOOST_CHECK_CLOSE( 2 * (10.0 + 20.0 + 10.1 + 20.1), - ecl_sum_get_field_var( resp, 2, "FLPT" ), 1e-5 ); - BOOST_CHECK_CLOSE( 2 * (10.6 + 10.7 + 10.8 + 20.6 + 20.7 + 20.8), - ecl_sum_get_field_var( resp, 2, "FVPT" ), 1e-5 ); - BOOST_CHECK_CLOSE( 2 * (10.4 + 20.4), - ecl_sum_get_field_var( resp, 2, "FGPTS" ), 1e-5 ); - BOOST_CHECK_CLOSE( 2 * (10.2 - 10.4 + 20.2 - 20.4), - ecl_sum_get_field_var( resp, 2, "FGPTF" ), 1e-5 ); - BOOST_CHECK_CLOSE( 2 * (10.5 + 20.5), - ecl_sum_get_field_var( resp, 2, "FOPTS" ), 1e-5 ); - BOOST_CHECK_CLOSE( 2 * (10.1 - 10.5 + 20.1 - 20.5), - ecl_sum_get_field_var( resp, 2, "FOPTF" ), 1e-5 ); - - /* Production rates (history) */ - BOOST_CHECK_CLOSE( 10.0 + 20.0, ecl_sum_get_field_var( resp, 1, "FWPRH" ), 1e-5 ); - BOOST_CHECK_CLOSE( 10.1 + 20.1, ecl_sum_get_field_var( resp, 1, "FOPRH" ), 1e-5 ); - BOOST_CHECK_CLOSE( 10.2 + 20.2, ecl_sum_get_field_var( resp, 1, "FGPRH" ), 1e-5 ); - BOOST_CHECK_CLOSE( 10.0 + 10.1 + 20.0 + 20.1, - ecl_sum_get_field_var( resp, 1, "FLPRH" ), 1e-5 ); - - /* Production totals (history) */ - BOOST_CHECK_CLOSE( (10.0 + 20.0), ecl_sum_get_field_var( resp, 1, "FWPTH" ), 1e-5 ); - BOOST_CHECK_CLOSE( (10.1 + 20.1), ecl_sum_get_field_var( resp, 1, "FOPTH" ), 1e-5 ); - BOOST_CHECK_CLOSE( (10.2 + 20.2), ecl_sum_get_field_var( resp, 1, "FGPTH" ), 1e-5 ); - BOOST_CHECK_CLOSE( (10.0 + 20.0 + 10.1 + 20.1), - ecl_sum_get_field_var( resp, 1, "FLPTH" ), 1e-5 ); - - BOOST_CHECK_CLOSE( 2 * (10.0 + 20.0), ecl_sum_get_field_var( resp, 2, "FWPTH" ), 1e-5 ); - BOOST_CHECK_CLOSE( 2 * (10.1 + 20.1), ecl_sum_get_field_var( resp, 2, "FOPTH" ), 1e-5 ); - BOOST_CHECK_CLOSE( 2 * (10.2 + 20.2), ecl_sum_get_field_var( resp, 2, "FGPTH" ), 1e-5 ); - BOOST_CHECK_CLOSE( 2 * (10.0 + 20.0 + 10.1 + 20.1), - ecl_sum_get_field_var( resp, 2, "FLPTH" ), 1e-5 ); - - /* Injection rates */ - BOOST_CHECK_CLOSE( 30.0 + 60., ecl_sum_get_field_var( resp, 1, "FWIR" ), 1e-5 ); - BOOST_CHECK_CLOSE( 30.2 + 60.2, ecl_sum_get_field_var( resp, 1, "FGIR" ), 1e-5 ); - BOOST_CHECK_CLOSE( 30.6 + 30.7 + 30.8 + 60.6 + 60.7 + 60.8, ecl_sum_get_field_var( resp, 1, "FVIR" ), 1e-5 ); - BOOST_CHECK_CLOSE( 30.0 * 1.5, ecl_sum_get_field_var( resp, 1, "FCIR" ), 1e-5 ); - BOOST_CHECK_CLOSE( 30.0 * 2.5, ecl_sum_get_field_var( resp, 2, "FCIR" ), 1e-5 ); - - /* Injection totals */ - BOOST_CHECK_CLOSE( 30.0 + 60., ecl_sum_get_field_var( resp, 1, "FWIT" ), 1e-5 ); - BOOST_CHECK_CLOSE( 30.2 + 60.2, ecl_sum_get_field_var( resp, 1, "FGIT" ), 1e-5 ); - BOOST_CHECK_CLOSE( 30.6 + 30.7 + 30.8 + 60.6 + 60.7 + 60.8, ecl_sum_get_field_var( resp, 1, "FVIT" ), 1e-5 ); - BOOST_CHECK_CLOSE( 30.0 * 1.5, ecl_sum_get_field_var( resp, 1, "FCIT" ), 1e-5 ); - - BOOST_CHECK_CLOSE( 2 * (30.0 + 60.0), ecl_sum_get_field_var( resp, 2, "FWIT" ), 1e-5 ); - BOOST_CHECK_CLOSE( 2 * (30.2 + 60.2), ecl_sum_get_field_var( resp, 2, "FGIT" ), 1e-5 ); - BOOST_CHECK_CLOSE( 2 * (30.6 + 30.7 + 30.8 + 60.6 + 60.7 + 60.8), ecl_sum_get_field_var( resp, 2, "FVIT" ), 1e-5 ); - BOOST_CHECK_CLOSE( 30.0 * 1.5 + 30.0 * 2.5, ecl_sum_get_field_var( resp, 2, "FCIT" ), 1e-5 ); - - /* Injection totals (history) */ - BOOST_CHECK_CLOSE( 30.0, ecl_sum_get_field_var( resp, 1, "FWITH" ), 1e-5 ); - BOOST_CHECK_CLOSE( 60.0, ecl_sum_get_field_var( resp, 2, "FWITH" ), 1e-5 ); - - /* Production targets */ - BOOST_CHECK_CLOSE( 30.1 , ecl_sum_get_field_var( resp, 1, "FVPRT" ), 1e-5 ); - - /* fwct - water cut */ - const double wcut = (10.0 + 20.0) / ( 10.0 + 10.1 + 20.0 + 20.1 ); - BOOST_CHECK_CLOSE( wcut, ecl_sum_get_field_var( resp, 1, "FWCT" ), 1e-5 ); - BOOST_CHECK_CLOSE( wcut, ecl_sum_get_field_var( resp, 1, "FWCTH" ), 1e-5 ); - - /* ggor - gas-oil ratio */ - const double ggor = (10.2 + 20.2) / (10.1 + 20.1); - BOOST_CHECK_CLOSE( ggor, ecl_sum_get_field_var( resp, 1, "FGOR" ), 1e-5 ); - BOOST_CHECK_CLOSE( ggor, ecl_sum_get_field_var( resp, 1, "FGORH" ), 1e-5 ); - -} - -#if 0 -BOOST_AUTO_TEST_CASE(report_steps_time) { - setup cfg( "test_summary_report_steps_time" ); - - out::Summary writer( cfg.es, cfg.config, cfg.grid, cfg.schedule, cfg.name ); - SummaryState st(std::chrono::system_clock::now()); - writer.eval( st, 1, 2 * day, cfg.es, cfg.schedule, cfg.wells , cfg.groups, {}); - writer.add_timestep( st, 1); - writer.eval( st, 1, 5 * day, cfg.es, cfg.schedule, cfg.wells , cfg.groups, {}); - writer.add_timestep( st, 1); - writer.eval( st, 2, 10 * day, cfg.es, cfg.schedule, cfg.wells , cfg.groups, {}); - writer.add_timestep( st, 2); - writer.write(); - - auto res = readsum( cfg.name ); - const auto* resp = res.get(); - - BOOST_CHECK( ecl_sum_has_report_step( resp, 1 ) ); - BOOST_CHECK( ecl_sum_has_report_step( resp, 2 ) ); - BOOST_CHECK( !ecl_sum_has_report_step( resp, 3 ) ); - - BOOST_CHECK_EQUAL( ecl_sum_iget_sim_days( resp, 0 ), 2 ); - BOOST_CHECK_EQUAL( ecl_sum_iget_sim_days( resp, 1 ), 5 ); - BOOST_CHECK_EQUAL( ecl_sum_iget_sim_days( resp, 2 ), 10 ); - BOOST_CHECK_EQUAL( ecl_sum_get_sim_length( resp ), 10 ); -} -#endif - -BOOST_AUTO_TEST_CASE(skip_unknown_var) { - setup cfg( "test_summary_skip_unknown_var" ); - - out::Summary writer( cfg.es, cfg.config, cfg.grid, cfg.schedule, cfg.name ); - SummaryState st(std::chrono::system_clock::now()); - writer.eval( st, 1, 2 * day, cfg.es, cfg.schedule, cfg.wells , cfg.groups, {}); - writer.add_timestep( st, 1); - writer.eval( st, 1, 5 * day, cfg.es, cfg.schedule, cfg.wells , cfg.groups, {}); - writer.add_timestep( st, 1); - writer.eval( st, 2, 10 * day, cfg.es, cfg.schedule, cfg.wells , cfg.groups, {}); - writer.add_timestep( st, 2); - writer.write(); - - auto res = readsum( cfg.name ); - const auto* resp = res.get(); - - /* verify that some non-supported keywords aren't written to the file */ - BOOST_CHECK( !ecl_sum_has_well_var( resp, "W_1", "WPI" ) ); - BOOST_CHECK( !ecl_sum_has_field_var( resp, "FGST" ) ); -} - - - -BOOST_AUTO_TEST_CASE(region_vars) { - setup cfg( "region_vars" ); - - std::map> region_values; - - { - std::vector values(10, 0.0); - for (size_t r=1; r <= 10; r++) { - values[r - 1] = r *1.0; - } - region_values["RPR"] = values; - } - { - double area = cfg.grid.getNX() * cfg.grid.getNY(); - std::vector values(10, 0.0); - for (size_t r=1; r <= 10; r++) { - if (r == 10) - area -= 1; - - values[r - 1] = area * 2*r * 1.0; - } - region_values["ROIP"] = values; - } - { - double area = cfg.grid.getNX() * cfg.grid.getNY(); - std::vector values(10, 0.0); - for (size_t r=1; r <= 10; r++) { - if (r == 10) - area -= 1; - - values[r - 1] = area * 2.2*r * 1.0; - } - region_values["RWIP"] = values; - } - { - double area = cfg.grid.getNX() * cfg.grid.getNY(); - std::vector values(10, 0.0); - for (size_t r=1; r <= 10; r++) { - if (r == 10) - area -= 1; - - values[r - 1] = area * 2.1*r * 1.0; - } - region_values["RGIP"] = values; - } - { - double area = cfg.grid.getNX() * cfg.grid.getNY(); - std::vector values(10, 0.0); - for (size_t r=1; r <= 10; r++) { - if (r == 10) - area -= 1; - - values[r - 1] = area * (2*r - 1) * 1.0; - } - region_values["ROIPL"] = values; - } - { - double area = cfg.grid.getNX() * cfg.grid.getNY(); - std::vector values(10, 0.0); - for (size_t r=1; r <= 10; r++) { - if (r == 10) - area -= 1; - - values[r - 1] = area * (2*r + 1 ) * 1.0; - } - region_values["ROIPG"] = values; - } - { - double area = cfg.grid.getNX() * cfg.grid.getNY(); - std::vector values(10, 0.0); - for (size_t r=1; r <= 10; r++) { - if (r == 10) - area -= 1; - - values[r - 1] = area * (2.1*r - 1) * 1.0; - } - region_values["RGIPL"] = values; - } - { - double area = cfg.grid.getNX() * cfg.grid.getNY(); - std::vector values(10, 0.0); - for (size_t r=1; r <= 10; r++) { - if (r == 10) - area -= 1; - - values[r - 1] = area * (2.1*r + 1) * 1.0; - } - region_values["RGIPG"] = values; - } - - { - out::Summary writer( cfg.es, cfg.config, cfg.grid, cfg.schedule, cfg.name ); - SummaryState st(std::chrono::system_clock::now()); - writer.eval( st, 1, 2 * day, cfg.es, cfg.schedule, cfg.wells, cfg.groups, {}, region_values); - writer.add_timestep( st, 1); - writer.eval( st, 1, 5 * day, cfg.es, cfg.schedule, cfg.wells, cfg.groups, {}, region_values); - writer.add_timestep( st, 1); - writer.eval( st, 2, 10 * day, cfg.es, cfg.schedule, cfg.wells, cfg.groups, {}, region_values); - writer.add_timestep( st, 2); - writer.write(); - } - - auto res = readsum( cfg.name ); - const auto* resp = res.get(); - - BOOST_CHECK( ecl_sum_has_general_var( resp , "RPR:1")); - BOOST_CHECK( ecl_sum_has_general_var( resp , "RPR:10")); - BOOST_CHECK( !ecl_sum_has_general_var( resp , "RPR:11")); - UnitSystem units( UnitSystem::UnitType::UNIT_TYPE_METRIC ); - - for (size_t r=1; r <= 10; r++) { - std::string rpr_key = "RPR:" + std::to_string( r ); - std::string roip_key = "ROIP:" + std::to_string( r ); - std::string rwip_key = "RWIP:" + std::to_string( r ); - std::string rgip_key = "RGIP:" + std::to_string( r ); - std::string roipl_key = "ROIPL:" + std::to_string( r ); - std::string roipg_key = "ROIPG:" + std::to_string( r ); - std::string rgipl_key = "RGIPL:" + std::to_string( r ); - std::string rgipg_key = "RGIPG:" + std::to_string( r ); - double area = cfg.grid.getNX() * cfg.grid.getNY(); - - //BOOST_CHECK_CLOSE( r * 1.0 , units.to_si( UnitSystem::measure::pressure , ecl_sum_get_general_var( resp, 1, rpr_key.c_str())) , 1e-5); - - // There is one inactive cell in the bottom layer. - if (r == 10) - area -= 1; - - BOOST_CHECK_CLOSE( area * 2*r * 1.0 , units.to_si( UnitSystem::measure::volume , ecl_sum_get_general_var( resp, 1, roip_key.c_str())) , 1e-5); - BOOST_CHECK_CLOSE( area * (2*r - 1) * 1.0 , units.to_si( UnitSystem::measure::volume , ecl_sum_get_general_var( resp, 1, roipl_key.c_str())) , 1e-5); - BOOST_CHECK_CLOSE( area * (2*r + 1 ) * 1.0 , units.to_si( UnitSystem::measure::volume , ecl_sum_get_general_var( resp, 1, roipg_key.c_str())) , 1e-5); - BOOST_CHECK_CLOSE( area * 2.1*r * 1.0 , units.to_si( UnitSystem::measure::volume , ecl_sum_get_general_var( resp, 1, rgip_key.c_str())) , 1e-5); - BOOST_CHECK_CLOSE( area * (2.1*r - 1) * 1.0, units.to_si( UnitSystem::measure::volume , ecl_sum_get_general_var( resp, 1, rgipl_key.c_str())) , 1e-5); - BOOST_CHECK_CLOSE( area * (2.1*r + 1) * 1.0, units.to_si( UnitSystem::measure::volume , ecl_sum_get_general_var( resp, 1, rgipg_key.c_str())) , 1e-5); - BOOST_CHECK_CLOSE( area * 2.2*r * 1.0 , units.to_si( UnitSystem::measure::volume , ecl_sum_get_general_var( resp, 1, rwip_key.c_str())) , 1e-5); - } -} - - -BOOST_AUTO_TEST_CASE(region_production) { - setup cfg( "region_production" ); - - { - out::Summary writer( cfg.es, cfg.config, cfg.grid, cfg.schedule, cfg.name ); - SummaryState st(std::chrono::system_clock::now()); - writer.eval( st, 0, 0 * day, cfg.es, cfg.schedule, cfg.wells , cfg.groups, {}); - writer.add_timestep( st, 0); - writer.eval( st, 1, 1 * day, cfg.es, cfg.schedule, cfg.wells , cfg.groups, {}); - writer.add_timestep( st, 1); - writer.eval( st, 2, 2 * day, cfg.es, cfg.schedule, cfg.wells , cfg.groups, {}); - writer.add_timestep( st, 2); - writer.write(); - } - - auto res = readsum( cfg.name ); - const auto* resp = res.get(); - - BOOST_CHECK( ecl_sum_has_general_var( resp , "ROPR:1")); - BOOST_CHECK_CLOSE(ecl_sum_get_general_var( resp , 1 , "ROPR:1" ) , - ecl_sum_get_general_var( resp , 1 , "COPR:W_1:1,1,1") + - ecl_sum_get_general_var( resp , 1 , "COPR:W_2:2,1,1") + - ecl_sum_get_general_var( resp , 1 , "COPR:W_3:3,1,1"), 1e-5); - - - - BOOST_CHECK( ecl_sum_has_general_var( resp , "RGPT:1")); - BOOST_CHECK_CLOSE(ecl_sum_get_general_var( resp , 2 , "RGPT:1" ) , - ecl_sum_get_general_var( resp , 2 , "CGPT:W_1:1,1,1") + - ecl_sum_get_general_var( resp , 2 , "CGPT:W_2:2,1,1") + - ecl_sum_get_general_var( resp , 2 , "CGPT:W_3:3,1,1"), 1e-5); -} - -BOOST_AUTO_TEST_CASE(region_injection) { - setup cfg( "region_injection" ); - - out::Summary writer( cfg.es, cfg.config, cfg.grid, cfg.schedule, cfg.name ); - SummaryState st(std::chrono::system_clock::now()); - writer.eval( st, 0, 0 * day, cfg.es, cfg.schedule, cfg.wells , cfg.groups, {}); - writer.add_timestep( st, 0); - writer.eval( st, 1, 1 * day, cfg.es, cfg.schedule, cfg.wells , cfg.groups, {}); - writer.add_timestep( st, 1); - writer.eval( st, 2, 2 * day, cfg.es, cfg.schedule, cfg.wells , cfg.groups, {}); - writer.add_timestep( st, 2); - writer.write(); - - auto res = readsum( cfg.name ); - const auto* resp = res.get(); - - BOOST_CHECK( ecl_sum_has_general_var( resp , "RWIR:1")); - BOOST_CHECK_CLOSE(ecl_sum_get_general_var( resp , 1 , "RWIR:1" ) , - ecl_sum_get_general_var( resp , 1 , "CWIR:W_1:1,1,1") + - ecl_sum_get_general_var( resp , 1 , "CWIR:W_2:2,1,1") + - ecl_sum_get_general_var( resp , 1 , "CWIR:W_3:3,1,1"), 1e-5); - - - - BOOST_CHECK( ecl_sum_has_general_var( resp , "RGIT:1")); - BOOST_CHECK_CLOSE(ecl_sum_get_general_var( resp , 2 , "RGIT:1" ) , - ecl_sum_get_general_var( resp , 2 , "CGIT:W_1:1,1,1") + - ecl_sum_get_general_var( resp , 2 , "CGIT:W_2:2,1,1") + - ecl_sum_get_general_var( resp , 2 , "CGIT:W_3:3,1,1"), 1e-5); -} - - - -BOOST_AUTO_TEST_CASE(BLOCK_VARIABLES) { - setup cfg( "region_injection" ); - - - std::map, double> block_values; - for (size_t r=1; r <= 10; r++) { - block_values[std::make_pair("BPR", (r-1)*100 + 1)] = r*1.0; - } - block_values[std::make_pair("BSWAT", 1)] = 8.0; - block_values[std::make_pair("BSGAS", 1)] = 9.0; - block_values[std::make_pair("BOSAT", 1)] = 0.91; - block_values[std::make_pair("BWKR", 2)] = 0.81; - block_values[std::make_pair("BOKR", 2)] = 0.71; - block_values[std::make_pair("BKRO", 2)] = 0.73; - block_values[std::make_pair("BGKR", 2)] = 0.61; - block_values[std::make_pair("BKRG", 2)] = 0.63; - block_values[std::make_pair("BKRW", 2)] = 0.51; - block_values[std::make_pair("BWPC", 11)] = 0.53; - block_values[std::make_pair("BGPC", 11)] = 5.3; - block_values[std::make_pair("BVWAT", 1)] = 4.1; - block_values[std::make_pair("BWVIS", 1)] = 4.3; - block_values[std::make_pair("BVGAS", 1)] = 0.031; - block_values[std::make_pair("BGVIS", 1)] = 0.037; - block_values[std::make_pair("BVOIL", 1)] = 31.0; - block_values[std::make_pair("BOVIS", 1)] = 33.0; - - out::Summary writer( cfg.es, cfg.config, cfg.grid, cfg.schedule, cfg.name ); - SummaryState st(std::chrono::system_clock::now()); - writer.eval( st, 0, 0 * day, cfg.es, cfg.schedule, cfg.wells , cfg.groups, {},{}, block_values); - writer.add_timestep( st, 0); - writer.eval( st, 1, 1 * day, cfg.es, cfg.schedule, cfg.wells , cfg.groups, {},{}, block_values); - writer.add_timestep( st, 1); - writer.eval( st, 2, 2 * day, cfg.es, cfg.schedule, cfg.wells , cfg.groups, {},{}, block_values); - writer.add_timestep( st, 2); - writer.eval( st, 3, 2 * day, cfg.es, cfg.schedule, cfg.wells , cfg.groups, {},{}, block_values); - writer.add_timestep( st, 3); - writer.eval( st, 4, 2 * day, cfg.es, cfg.schedule, cfg.wells , cfg.groups, {},{}, block_values); - writer.add_timestep( st, 4); - writer.write(); - - auto res = readsum( cfg.name ); - const auto* resp = res.get(); - - UnitSystem units( UnitSystem::UnitType::UNIT_TYPE_METRIC ); - for (size_t r=1; r <= 10; r++) { - std::string bpr_key = "BPR:1,1," + std::to_string( r ); - BOOST_CHECK( ecl_sum_has_general_var( resp , bpr_key.c_str())); - - BOOST_CHECK_CLOSE( r * 1.0 , units.to_si( UnitSystem::measure::pressure , ecl_sum_get_general_var( resp, 1, bpr_key.c_str())) , 1e-5); - - } - - BOOST_CHECK_CLOSE( 8.0 , units.to_si( UnitSystem::measure::identity , ecl_sum_get_general_var( resp, 1, "BSWAT:1,1,1")) , 1e-5); - BOOST_CHECK_CLOSE( 9.0 , units.to_si( UnitSystem::measure::identity , ecl_sum_get_general_var( resp, 1, "BSGAS:1,1,1")) , 1e-5); - BOOST_CHECK_CLOSE( 0.91 , units.to_si( UnitSystem::measure::identity , ecl_sum_get_general_var( resp, 1, "BOSAT:1,1,1")) , 1e-5); - BOOST_CHECK_CLOSE( 0.81 , units.to_si( UnitSystem::measure::identity , ecl_sum_get_general_var( resp, 1, "BWKR:2,1,1")) , 1e-5); - BOOST_CHECK_CLOSE( 0.71 , units.to_si( UnitSystem::measure::identity , ecl_sum_get_general_var( resp, 1, "BOKR:2,1,1")) , 1e-5); - BOOST_CHECK_CLOSE( 0.73 , units.to_si( UnitSystem::measure::identity , ecl_sum_get_general_var( resp, 1, "BKRO:2,1,1")) , 1e-5); - BOOST_CHECK_CLOSE( 0.61 , units.to_si( UnitSystem::measure::identity , ecl_sum_get_general_var( resp, 1, "BGKR:2,1,1")) , 1e-5); - BOOST_CHECK_CLOSE( 0.63 , units.to_si( UnitSystem::measure::identity , ecl_sum_get_general_var( resp, 1, "BKRG:2,1,1")) , 1e-5); - BOOST_CHECK_CLOSE( 0.51 , units.to_si( UnitSystem::measure::identity , ecl_sum_get_general_var( resp, 1, "BKRW:2,1,1")) , 1e-5); - BOOST_CHECK_CLOSE( 0.53 , units.to_si( UnitSystem::measure::pressure , ecl_sum_get_general_var( resp, 1, "BWPC:1,2,1")) , 1e-5); - BOOST_CHECK_CLOSE( 5.3 , units.to_si( UnitSystem::measure::pressure , ecl_sum_get_general_var( resp, 1, "BGPC:1,2,1")) , 1e-5); - BOOST_CHECK_CLOSE( 4.1 , units.to_si( UnitSystem::measure::viscosity , ecl_sum_get_general_var( resp, 1, "BVWAT:1,1,1")) , 1e-5); - BOOST_CHECK_CLOSE( 4.3 , units.to_si( UnitSystem::measure::viscosity , ecl_sum_get_general_var( resp, 1, "BWVIS:1,1,1")) , 1e-5); - BOOST_CHECK_CLOSE( 0.031 , units.to_si( UnitSystem::measure::viscosity , ecl_sum_get_general_var( resp, 1, "BVGAS:1,1,1")) , 1e-5); - BOOST_CHECK_CLOSE( 0.037 , units.to_si( UnitSystem::measure::viscosity , ecl_sum_get_general_var( resp, 1, "BGVIS:1,1,1")) , 1e-5); - BOOST_CHECK_CLOSE( 31.0 , units.to_si( UnitSystem::measure::viscosity , ecl_sum_get_general_var( resp, 1, "BVOIL:1,1,1")) , 1e-5); - BOOST_CHECK_CLOSE( 33.0 , units.to_si( UnitSystem::measure::viscosity , ecl_sum_get_general_var( resp, 1, "BOVIS:1,1,1")) , 1e-5); - - BOOST_CHECK_CLOSE( 100 , ecl_sum_get_well_completion_var( resp, 1, "W_1", "CTFAC", 1, 1, 1), 1e-5); - BOOST_CHECK_CLOSE( 2.1430730819702148 , ecl_sum_get_well_completion_var( resp, 1, "W_2", "CTFAC", 2, 1, 1), 1e-5); - BOOST_CHECK_CLOSE( 2.6788413524627686 , ecl_sum_get_well_completion_var( resp, 1, "W_2", "CTFAC", 2, 1, 2), 1e-5); - BOOST_CHECK_CLOSE( 2.7855057716369629 , ecl_sum_get_well_completion_var( resp, 1, "W_3", "CTFAC", 3, 1, 1), 1e-5); - - BOOST_CHECK_CLOSE( 50 , ecl_sum_get_well_completion_var( resp, 3, "W_1", "CTFAC", 1, 1, 1), 1e-5); - BOOST_CHECK_CLOSE( 25 , ecl_sum_get_well_completion_var( resp, 4, "W_1", "CTFAC", 1, 1, 1), 1e-5); - - // Cell is not active - BOOST_CHECK( !ecl_sum_has_general_var( resp , "BPR:2,1,10")); -} - - - -/* - The SummaryConfig.require3DField( ) implementation is slightly ugly: - - 1. Which 3D fields are required is implicitly given by the - implementation of the Summary() class here in opm-output. - - 2. The implementation of the SummaryConfig.require3DField( ) is - based on a hardcoded list in SummaryConfig.cpp - i.e. there is a - inverse dependency between the opm-parser and opm-output modules. - - The test here just to ensure that *something* breaks if the - opm-parser implementation is changed/removed. -*/ - - - -BOOST_AUTO_TEST_CASE( require3D ) -{ - setup cfg( "XXXX" ); - const auto summaryConfig = cfg.config; - - BOOST_CHECK( summaryConfig.require3DField( "PRESSURE" )); - BOOST_CHECK( summaryConfig.require3DField( "SGAS" )); - BOOST_CHECK( summaryConfig.require3DField( "SWAT" )); - BOOST_CHECK( summaryConfig.require3DField( "WIP" )); - BOOST_CHECK( summaryConfig.require3DField( "GIP" )); - BOOST_CHECK( summaryConfig.require3DField( "OIP" )); - BOOST_CHECK( summaryConfig.require3DField( "OIPL" )); - BOOST_CHECK( summaryConfig.require3DField( "OIPG" )); - BOOST_CHECK( summaryConfig.require3DField( "GIPL" )); - BOOST_CHECK( summaryConfig.require3DField( "GIPG" )); - - BOOST_CHECK( summaryConfig.requireFIPNUM( )); -} - - -BOOST_AUTO_TEST_CASE(MISC) { - setup cfg( "test_misc"); - - out::Summary writer( cfg.es, cfg.config, cfg.grid, cfg.schedule , cfg.name ); - SummaryState st(std::chrono::system_clock::now()); - writer.eval( st, 0, 0 * day, cfg.es, cfg.schedule, cfg.wells , cfg.groups, {}); - writer.add_timestep( st, 0); - writer.eval( st, 1, 1 * day, cfg.es, cfg.schedule, cfg.wells , cfg.groups, {}); - writer.add_timestep( st, 1); - writer.eval( st, 2, 2 * day, cfg.es, cfg.schedule, cfg.wells , cfg.groups, {}); - writer.add_timestep( st, 2); - writer.write(); - - auto res = readsum( cfg.name ); - const auto* resp = res.get(); - BOOST_CHECK( ecl_sum_has_key( resp , "TCPU" )); -} - - -BOOST_AUTO_TEST_CASE(EXTRA) { - setup cfg( "test_extra"); - - { - out::Summary writer( cfg.es, cfg.config, cfg.grid, cfg.schedule , cfg.name ); - SummaryState st(std::chrono::system_clock::now()); - writer.eval( st, 0, 0 * day, cfg.es, cfg.schedule, cfg.wells , cfg.groups, { {"TCPU" , 0 }}); - writer.add_timestep( st, 0); - writer.eval( st, 1, 1 * day, cfg.es, cfg.schedule, cfg.wells , cfg.groups, { {"TCPU" , 1 }}); - writer.add_timestep( st, 1); - writer.eval( st, 2, 2 * day, cfg.es, cfg.schedule, cfg.wells , cfg.groups, { {"TCPU" , 2}}); - writer.add_timestep( st, 2); - - /* Add a not-recognized key; that is OK */ - BOOST_CHECK_NO_THROW( writer.eval( st, 3, 3 * day, cfg.es, cfg.schedule, cfg.wells , cfg.groups, { {"MISSING" , 2 }})); - BOOST_CHECK_NO_THROW( writer.add_timestep( st, 3)); - - /* Override a NOT MISC variable - ignored. */ - writer.eval( st, 4, 4 * day, cfg.es, cfg.schedule, cfg.wells, cfg.groups, {}); - writer.add_timestep( st, 4); - writer.write(); - } - - auto res = readsum( cfg.name ); - const auto* resp = res.get(); - BOOST_CHECK( ecl_sum_has_key( resp , "TCPU" )); - BOOST_CHECK_CLOSE( 1 , ecl_sum_get_general_var( resp , 1 , "TCPU") , 0.001); - BOOST_CHECK_CLOSE( 2 , ecl_sum_get_general_var( resp , 2 , "TCPU") , 0.001); - - /* Not passed explicitly in timesteps 3 and 4 - the TCPU value will therefor - stay at the value assigned at step 2 - it is a "state" variable after all ... */ - BOOST_CHECK_CLOSE( 2 , ecl_sum_get_general_var( resp , 4 , "TCPU") , 0.001); - - /* Override a NOT MISC variable - ignored. */ - BOOST_CHECK( ecl_sum_get_general_var( resp , 4 , "FOPR") > 0.0 ); -} - -struct MessageBuffer -{ - std::stringstream str_; - - template - void read( T& value ) - { - str_.read( (char *) &value, sizeof(value) ); - } - - template - void write( const T& value ) - { - str_.write( (const char *) &value, sizeof(value) ); - } - - void write( const std::string& str) - { - int size = str.size(); - write(size); - for (int k = 0; k < size; ++k) { - write(str[k]); - } - } - - void read( std::string& str) - { - int size = 0; - read(size); - str.resize(size); - for (int k = 0; k < size; ++k) { - read(str[k]); - } - } - -}; - -BOOST_AUTO_TEST_CASE(READ_WRITE_WELLDATA) { - - Opm::data::Wells wellRates = result_wells(); - - MessageBuffer buffer; - wellRates.write(buffer); - - Opm::data::Wells wellRatesCopy; - wellRatesCopy.read(buffer); - - BOOST_CHECK_CLOSE( wellRatesCopy.get( "W_1" , rt::wat) , wellRates.get( "W_1" , rt::wat), 1e-16); - BOOST_CHECK_CLOSE( wellRatesCopy.get( "W_2" , 101 , rt::wat) , wellRates.get( "W_2" , 101 , rt::wat), 1e-16); - - const auto& seg = wellRatesCopy.at("W_1").segments.at(1); - BOOST_CHECK_CLOSE(seg.rates.get(rt::wat), 123.45*sm3_pr_day(), 1.0e-10); - BOOST_CHECK_CLOSE(seg.rates.get(rt::oil), 543.21*sm3_pr_day(), 1.0e-10); - BOOST_CHECK_CLOSE(seg.rates.get(rt::gas), 1729.496*sm3_pr_day(), 1.0e-10); - const auto pres_idx = Opm::data::SegmentPressures::Value::Pressure; - BOOST_CHECK_CLOSE(seg.pressures[pres_idx], 314.159*unit::barsa, 1.0e-10); - BOOST_CHECK_EQUAL(seg.segNumber, 1); - - // No data for segment 10 of well W_2 (or no such segment). - const auto& W2 = wellRatesCopy.at("W_2"); - BOOST_CHECK_THROW(W2.segments.at(10), std::out_of_range); - - const auto& W6 = wellRatesCopy.at("W_6"); - const auto& curr = W6.current_control; - BOOST_CHECK_MESSAGE(!curr.isProducer, "W_6 must be an injector"); - BOOST_CHECK_MESSAGE(curr.prod == ::Opm::Well::ProducerCMode::CMODE_UNDEFINED, "W_6 must have an undefined producer control"); - BOOST_CHECK_MESSAGE(curr.inj == ::Opm::Well::InjectorCMode::GRUP, "W_6 must be on GRUP control"); -} - -BOOST_AUTO_TEST_CASE(efficiency_factor) { - setup cfg( "test_efficiency_factor", "SUMMARY_EFF_FAC.DATA" ); - - out::Summary writer( cfg.es, cfg.config, cfg.grid, cfg.schedule, cfg.name ); - SummaryState st(std::chrono::system_clock::now()); - writer.eval( st, 0, 0 * day, cfg.es, cfg.schedule, cfg.wells, cfg.groups, {}); - writer.add_timestep( st, 0); - writer.eval( st, 1, 1 * day, cfg.es, cfg.schedule, cfg.wells, cfg.groups, {}); - writer.add_timestep( st, 1); - writer.eval( st, 2, 2 * day, cfg.es, cfg.schedule, cfg.wells, cfg.groups, {}); - writer.add_timestep( st, 2); - writer.write(); - auto res = readsum( cfg.name ); - const auto* resp = res.get(); - - /* No WEFAC assigned to W_1 */ - BOOST_CHECK_CLOSE( 10.1, ecl_sum_get_well_var( resp, 1, "W_1", "WOPR" ), 1e-5 ); - BOOST_CHECK_CLOSE( 10.1, ecl_sum_get_well_var( resp, 1, "W_1", "WOPT" ), 1e-5 ); - BOOST_CHECK_CLOSE( 2 * 10.1, ecl_sum_get_well_var( resp, 2, "W_1", "WOPT" ), 1e-5 ); - - /* WEFAC 0.2 assigned to W_2. - * W_2 assigned to group G2. GEFAC G2 = 0.01 */ - BOOST_CHECK_CLOSE( 20.1, ecl_sum_get_well_var( resp, 1, "W_2", "WOPR" ), 1e-5 ); - BOOST_CHECK_CLOSE( 20.1 * 0.2 * 0.01, ecl_sum_get_well_var( resp, 1, "W_2", "WOPT" ), 1e-5 ); - BOOST_CHECK_CLOSE( 2 * 20.1 * 0.2 * 0.01, ecl_sum_get_well_var( resp, 2, "W_2", "WOPT" ), 1e-5 ); - - /* WEFAC 0.3 assigned to W_3. - * W_3 assigned to group G3. GEFAC G_3 = 0.02 - * G_3 assigned to group G4. GEFAC G_4 = 0.03*/ - BOOST_CHECK_CLOSE( 30.1, ecl_sum_get_well_var( resp, 1, "W_3", "WOIR" ), 1e-5 ); - BOOST_CHECK_CLOSE( 30.1 * 0.3 * 0.02 * 0.03, ecl_sum_get_well_var( resp, 1, "W_3", "WOIT" ), 1e-5 ); - BOOST_CHECK_CLOSE( 30.1 * 0.3 * 0.02 * 0.03 + 30.1 * 0.3 * 0.02 * 0.04, ecl_sum_get_well_var( resp, 2, "W_3", "WOIT" ), 1e-5 ); - - /* WEFAC 0.2 assigned to W_2. - * W_2 assigned to group G2. GEFAC G2 = 0.01 */ - BOOST_CHECK_CLOSE( 20.1 * 0.2, ecl_sum_get_group_var( resp, 1, "G_2", "GOPR" ), 1e-5 ); - BOOST_CHECK_CLOSE( 20.1 * 0.2 * 0.01, ecl_sum_get_group_var( resp, 1, "G_2", "GOPT" ), 1e-5 ); - BOOST_CHECK_CLOSE( 2 * 20.1 * 0.2 * 0.01, ecl_sum_get_group_var( resp, 2, "G_2", "GOPT" ), 1e-5 ); - - /* WEFAC 0.3 assigned to W_3. - * W_3 assigned to group G3. GEFAC G_3 = 0.02 - * G_3 assigned to group G4. GEFAC G_4 = 0.03*/ - BOOST_CHECK_CLOSE( 30.1 * 0.3, ecl_sum_get_group_var( resp, 1, "G_3", "GOIR" ), 1e-5 ); - BOOST_CHECK_CLOSE( 30.1 * 0.3 * 0.02 * 0.03, ecl_sum_get_group_var( resp, 1, "G_3", "GOIT" ), 1e-5 ); - BOOST_CHECK_CLOSE( 30.1 * 0.3 * 0.02 * 0.03 + 30.1 * 0.3 * 0.02 * 0.04, ecl_sum_get_group_var( resp, 2, "G_3", "GOIT" ), 1e-5 ); - - /* WEFAC 0.3 assigned to W_3. - * W_3 assigned to group G3. GEFAC G_3 = 0.02 - * G_3 assigned to group G4. GEFAC G_4 = 0.03 - * The rate for a group is calculated including WEFAC and GEFAC for subgroups */ - BOOST_CHECK_CLOSE( 30.1 * 0.3 * 0.02, ecl_sum_get_group_var( resp, 1, "G_4", "GOIR" ), 1e-5 ); - BOOST_CHECK_CLOSE( 30.1 * 0.3 * 0.02 * 0.03, ecl_sum_get_group_var( resp, 1, "G_4", "GOIT" ), 1e-5 ); - BOOST_CHECK_CLOSE( 30.1 * 0.3 * 0.02 * 0.03 + 30.1 * 0.3 * 0.02 * 0.04, ecl_sum_get_group_var( resp, 2, "G_4", "GOIT" ), 1e-5 ); - - BOOST_CHECK_CLOSE( 10.1 + 20.1 * 0.2 * 0.01, ecl_sum_get_field_var( resp, 1, "FOPR" ), 1e-5 ); - BOOST_CHECK_CLOSE( 10.1 + 20.1 * 0.2 * 0.01, ecl_sum_get_field_var( resp, 1, "FOPT" ), 1e-5 ); - BOOST_CHECK_CLOSE( 2 * (10.1 + 20.1 * 0.2 * 0.01), ecl_sum_get_field_var( resp, 2, "FOPT" ), 1e-5 ); - - BOOST_CHECK_CLOSE( 30.1 * 0.3 * 0.02 * 0.03, ecl_sum_get_field_var( resp, 1, "FOIR" ), 1e-5 ); - BOOST_CHECK_CLOSE( 30.1 * 0.3 * 0.02 * 0.03, ecl_sum_get_field_var( resp, 1, "FOIT" ), 1e-5 ); - BOOST_CHECK_CLOSE( 30.1 * 0.3 * 0.02 * 0.03 + 30.1 * 0.3 * 0.02 * 0.04, ecl_sum_get_field_var( resp, 2, "FOIT" ), 1e-5 ); - - BOOST_CHECK_CLOSE( 200.1 * 0.2 * 0.01, ecl_sum_get_general_var( resp , 1 , "ROPR:1" ) , 1e-5); - - BOOST_CHECK_CLOSE( 100.1, ecl_sum_get_general_var( resp , 1 , "ROPR:2" ) , 1e-5); - - BOOST_CHECK_CLOSE( 300 * 0.2 * 0.01, ecl_sum_get_general_var( resp , 1 , "RWIR:1" ) , 1e-5); - - BOOST_CHECK_CLOSE( 200.1, ecl_sum_get_well_completion_var( resp, 1, "W_2", "COPR", 2, 1, 1 ), 1e-5 ); - BOOST_CHECK_CLOSE( 200.1 * 0.2 * 0.01, ecl_sum_get_well_completion_var( resp, 1, "W_2", "COPT", 2, 1, 1 ), 1e-5 ); -} - - - - -BOOST_AUTO_TEST_CASE(Test_SummaryState) { - Opm::SummaryState st(std::chrono::system_clock::now()); - st.update("WWCT:OP_2", 100); - BOOST_CHECK_CLOSE(st.get("WWCT:OP_2"), 100, 1e-5); - BOOST_CHECK_THROW(st.get("NO_SUCH_KEY"), std::out_of_range); - BOOST_CHECK(st.has("WWCT:OP_2")); - BOOST_CHECK(!st.has("NO_SUCH_KEY")); - - - st.update_well_var("OP1", "WWCT", 0.75); - st.update_well_var("OP2", "WWCT", 0.75); - st.update_well_var("OP3", "WOPT", 0.75); - st.update_well_var("OP3", "WGPR", 0.75); - BOOST_CHECK( st.has_well_var("OP1", "WWCT")); - BOOST_CHECK_EQUAL( st.get_well_var("OP1", "WWCT"), 0.75); - BOOST_CHECK_EQUAL( st.get_well_var("OP1", "WWCT"), st.get("WWCT:OP1")); - const auto& wopr_wells = st.wells("WOPR"); - BOOST_CHECK_EQUAL( wopr_wells.size() , 0); - - const auto& wwct_wells = st.wells("WWCT"); - BOOST_CHECK_EQUAL( wwct_wells.size(), 2); - - st.update_group_var("G1", "GWCT", 0.25); - st.update_group_var("G2", "GWCT", 0.25); - st.update_group_var("G3", "GOPT", 0.25); - BOOST_CHECK( st.has_group_var("G1", "GWCT")); - BOOST_CHECK_EQUAL( st.get_group_var("G1", "GWCT"), 0.25); - BOOST_CHECK_EQUAL( st.get_group_var("G1", "GWCT"), st.get("GWCT:G1")); - const auto& gopr_groups = st.groups("GOPR"); - BOOST_CHECK_EQUAL( gopr_groups.size() , 0); - - const auto& gwct_groups = st.groups("GWCT"); - BOOST_CHECK_EQUAL( gwct_groups.size(), 2); - BOOST_CHECK_EQUAL(std::count(gwct_groups.begin(), gwct_groups.end(), "G1"), 1); - BOOST_CHECK_EQUAL(std::count(gwct_groups.begin(), gwct_groups.end(), "G2"), 1); - const auto& all_groups = st.groups(); - BOOST_CHECK_EQUAL( all_groups.size(), 3); - BOOST_CHECK_EQUAL(std::count(all_groups.begin(), all_groups.end(), "G1"), 1); - BOOST_CHECK_EQUAL(std::count(all_groups.begin(), all_groups.end(), "G2"), 1); - BOOST_CHECK_EQUAL(std::count(all_groups.begin(), all_groups.end(), "G3"), 1); - - const auto& all_wells = st.wells(); - BOOST_CHECK_EQUAL( all_wells.size(), 3); - BOOST_CHECK_EQUAL(std::count(all_wells.begin(), all_wells.end(), "OP1"), 1); - BOOST_CHECK_EQUAL(std::count(all_wells.begin(), all_wells.end(), "OP2"), 1); - BOOST_CHECK_EQUAL(std::count(all_wells.begin(), all_wells.end(), "OP3"), 1); - - BOOST_CHECK_EQUAL(st.size(), 11); // Size = 8 + 3 - where the the three are DAY, MNTH and YEAR - - // The well 'OP_2' which was indirectly added with the - // st.update("WWCT:OP_2", 100) call is *not* counted as a well! - BOOST_CHECK_EQUAL(st.num_wells(), 3); -} - -BOOST_AUTO_TEST_SUITE_END() - -// #################################################################### - -namespace { - Opm::SummaryState calculateRestartVectors(const setup& config) - { - ::Opm::out::Summary smry { - config.es, config.config, config.grid, - config.schedule, "Ignore.This" - }; - - SummaryState st(std::chrono::system_clock::now()); - smry.eval(st, 0, 0*day, config.es, config.schedule, config.wells, config.groups, {}); - smry.add_timestep(st, 0); - smry.eval(st, 1, 1*day, config.es, config.schedule, config.wells, config.groups, {}); - smry.add_timestep(st, 1); - smry.eval(st, 2, 2*day, config.es, config.schedule, config.wells, config.groups, {}); - smry.add_timestep(st, 2); - - return st; - } - - auto calculateRestartVectors() - -> decltype(calculateRestartVectors({"test.Restart"})) - { - return calculateRestartVectors({"test.Restart"}); - } - - auto calculateRestartVectorsEffFac() - -> decltype(calculateRestartVectors({"test.Restart.EffFac", - "SUMMARY_EFF_FAC.DATA"})) - { - return calculateRestartVectors({ - "test.Restart.EffFac", "SUMMARY_EFF_FAC.DATA" - }); - } - - auto calculateRestartVectorsSegment() - -> decltype(calculateRestartVectors({"test.Restart.Segment", - "SOFR_TEST.DATA"})) - { - return calculateRestartVectors({ - "test.Restart.Segment", "SOFR_TEST.DATA" - }); - } - - std::vector restartVectors() - { - return { - "WPR", "OPR", "GPR", "VPR", - "WPT", "OPT", "GPT", "VPT", - "WIR", "GIR", "WIT", "GIT", - "GOR", "WCT", - }; - } - - std::vector activeWells() - { - return { "W_1", "W_2", "W_3" }; - } - - std::vector activeGroups() - { - return { "G_1", "G_2" }; - } - - std::vector activeGroupsEffFac() - { - return { "G_1", "G", "G_2", "G_3", "G_4" }; - } -} - -// ==================================================================== - -BOOST_AUTO_TEST_SUITE(Restart) - -BOOST_AUTO_TEST_CASE(Well_Vectors_Present) -{ - const auto rstrt = calculateRestartVectors(); - - for (const auto& vector : restartVectors()) { - for (const auto& w : activeWells()) { - BOOST_CHECK( rstrt.has("W" + vector + ':' + w)); - BOOST_CHECK(!rstrt.has("W" + vector)); - } - } - - for (const auto& w : activeWells()) { - BOOST_CHECK( rstrt.has("WBHP:" + w)); - BOOST_CHECK(!rstrt.has("WBHP")); - } -} - -// -------------------------------------------------------------------- - -BOOST_AUTO_TEST_CASE(Well_Vectors_Correct) -{ - const auto rstrt = calculateRestartVectors(); - - // W_1 (Producer) - { - // Production rates - BOOST_CHECK_CLOSE(rstrt.get("WWPR:W_1"), 10.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("WOPR:W_1"), 10.1, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("WGPR:W_1"), 10.2, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("WVPR:W_1"), 10.6 + 10.7 + 10.8, 1.0e-10); - - // Production cumulative totals - BOOST_CHECK_CLOSE(rstrt.get("WWPT:W_1"), 2 * 1.0 * 10.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("WOPT:W_1"), 2 * 1.0 * 10.1, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("WGPT:W_1"), 2 * 1.0 * 10.2, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("WVPT:W_1"), 2 * 1.0 * (10.6 + 10.7 + 10.8), 1.0e-10); - - // Injection rates - BOOST_CHECK_CLOSE(rstrt.get("WWIR:W_1"), 0.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("WGIR:W_1"), 0.0, 1.0e-10); - - // Injection totals - BOOST_CHECK_CLOSE(rstrt.get("WWIT:W_1"), 0.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("WGIT:W_1"), 0.0, 1.0e-10); - - // BHP - BOOST_CHECK_CLOSE(rstrt.get("WBHP:W_1"), 0.1, 1.0e-10); // Bars - - // Water cut - BOOST_CHECK_CLOSE(rstrt.get("WWCT:W_1"), 10.0 / (10.0 + 10.1), 1.0e-10); - - // Producing gas/oil ratio - BOOST_CHECK_CLOSE(rstrt.get("WGOR:W_1"), 10.2 / 10.1, 1.0e-10); - } - - // W_2 (Producer) - { - // Production rates - BOOST_CHECK_CLOSE(rstrt.get("WWPR:W_2"), 20.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("WOPR:W_2"), 20.1, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("WGPR:W_2"), 20.2, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("WVPR:W_2"), 20.6 + 20.7 + 20.8, 1.0e-10); - - // Production cumulative totals - BOOST_CHECK_CLOSE(rstrt.get("WWPT:W_2"), 2 * 1.0 * 20.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("WOPT:W_2"), 2 * 1.0 * 20.1, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("WGPT:W_2"), 2 * 1.0 * 20.2, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("WVPT:W_2"), 2 * 1.0 * (20.6 + 20.7 + 20.8), 1.0e-10); - - // Injection rates - BOOST_CHECK_CLOSE(rstrt.get("WWIR:W_2"), 0.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("WGIR:W_2"), 0.0, 1.0e-10); - - // Injection totals - BOOST_CHECK_CLOSE(rstrt.get("WWIT:W_2"), 0.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("WGIT:W_2"), 0.0, 1.0e-10); - - // BHP - BOOST_CHECK_CLOSE(rstrt.get("WBHP:W_2"), 1.1, 1.0e-10); // Bars - - // Water cut - BOOST_CHECK_CLOSE(rstrt.get("WWCT:W_2"), 20.0 / (20.0 + 20.1), 1.0e-10); - - // Producing gas/oil ratio - BOOST_CHECK_CLOSE(rstrt.get("WGOR:W_2"), 20.2 / 20.1, 1.0e-10); - } - - // W_3 (Injector) - { - // Production rates - BOOST_CHECK_CLOSE(rstrt.get("WWPR:W_3"), 0.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("WOPR:W_3"), 0.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("WGPR:W_3"), 0.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("WVPR:W_3"), 0.0, 1.0e-10); - - // Production cumulative totals - BOOST_CHECK_CLOSE(rstrt.get("WWPT:W_3"), 0.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("WOPT:W_3"), 0.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("WGPT:W_3"), 0.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("WVPT:W_3"), 0.0, 1.0e-10); - - // Injection rates - BOOST_CHECK_CLOSE(rstrt.get("WWIR:W_3"), 30.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("WGIR:W_3"), 30.2, 1.0e-10); - - // Injection totals - BOOST_CHECK_CLOSE(rstrt.get("WWIT:W_3"), 2 * 1.0 * 30.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("WGIT:W_3"), 2 * 1.0 * 30.2, 1.0e-10); - - // BHP - BOOST_CHECK_CLOSE(rstrt.get("WBHP:W_3"), 2.1, 1.0e-10); // Bars - - // Water cut - BOOST_CHECK_CLOSE(rstrt.get("WWCT:W_3"), 0.0, 1.0e-10); - - // Producing gas/oil ratio - BOOST_CHECK_CLOSE(rstrt.get("WGOR:W_3"), 0.0, 1.0e-10); - } -} - -// ==================================================================== - -BOOST_AUTO_TEST_CASE(Group_Vectors_Present) -{ - const auto& rstrt = calculateRestartVectors(); - - for (const auto& vector : restartVectors()) { - for (const auto& g : activeGroups()) { - BOOST_CHECK( rstrt.has("G" + vector + ':' + g)); - BOOST_CHECK(!rstrt.has("G" + vector)); - } - } -} - -// -------------------------------------------------------------------- - -BOOST_AUTO_TEST_CASE(Group_Vectors_Correct) -{ - const auto rstrt = calculateRestartVectors(); - - // G_1 (Producer, W_1 + W_2) - { - // Production rates - BOOST_CHECK_CLOSE(rstrt.get("GWPR:G_1"), 10.0 + 20.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("GOPR:G_1"), 10.1 + 20.1, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("GGPR:G_1"), 10.2 + 20.2, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("GVPR:G_1"), - (10.6 + 10.7 + 10.8) + - (20.6 + 20.7 + 20.8), 1.0e-10); - - // Production cumulative totals - BOOST_CHECK_CLOSE(rstrt.get("GWPT:G_1"), 2 * 1.0 * (10.0 + 20.0), 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("GOPT:G_1"), 2 * 1.0 * (10.1 + 20.1), 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("GGPT:G_1"), 2 * 1.0 * (10.2 + 20.2), 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("GVPT:G_1"), - 2 * 1.0 * - ((10.6 + 10.7 + 10.8) + - (20.6 + 20.7 + 20.8)), 1.0e-10); - - // Injection rates - BOOST_CHECK_CLOSE(rstrt.get("GWIR:G_1"), 0.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("GGIR:G_1"), 0.0, 1.0e-10); - - // Injection totals - BOOST_CHECK_CLOSE(rstrt.get("GWIT:G_1"), 0.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("GGIT:G_1"), 0.0, 1.0e-10); - - // Water cut - BOOST_CHECK_CLOSE(rstrt.get("GWCT:G_1"), - (10.0 + 20.0) / ((10.0 + 10.1) + (20.0 + 20.1)), 1.0e-10); - - // Producing gas/oil ratio - BOOST_CHECK_CLOSE(rstrt.get("GGOR:G_1"), - (10.2 + 20.2) / (10.1 + 20.1), 1.0e-10); - } - - // G_2 (Injector, W_3) - { - // Production rates - BOOST_CHECK_CLOSE(rstrt.get("GWPR:G_2"), 0.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("GOPR:G_2"), 0.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("GGPR:G_2"), 0.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("GVPR:G_2"), 0.0, 1.0e-10); - - // Production cumulative totals - BOOST_CHECK_CLOSE(rstrt.get("GWPT:G_2"), 0.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("GOPT:G_2"), 0.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("GGPT:G_2"), 0.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("GVPT:G_2"), 0.0, 1.0e-10); - - // Injection rates - BOOST_CHECK_CLOSE(rstrt.get("GWIR:G_2"), 30.0 + 60.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("GGIR:G_2"), 30.2 + 60.2, 1.0e-10); - - // Injection totals - BOOST_CHECK_CLOSE(rstrt.get("GWIT:G_2"), 2 * 1.0 * (30.0 + 60.0), 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("GGIT:G_2"), 2 * 1.0 * (30.2 + 60.2), 1.0e-10); - - // Water cut - BOOST_CHECK_CLOSE(rstrt.get("GWCT:G_2"), 0.0, 1.0e-10); - - // Producing gas/oil ratio - BOOST_CHECK_CLOSE(rstrt.get("GGOR:G_2"), 0.0, 1.0e-10); - } -} - -// ==================================================================== - -BOOST_AUTO_TEST_CASE(Field_Vectors_Present) -{ - const auto& rstrt = calculateRestartVectors(); - - for (const auto& vector : restartVectors()) { - BOOST_CHECK( rstrt.has("F" + vector)); - BOOST_CHECK(!rstrt.has("F" + vector + ":FIELD")); - } -} - -// -------------------------------------------------------------------- - -BOOST_AUTO_TEST_CASE(Field_Vectors_Correct) -{ - const auto rstrt = calculateRestartVectors(); - - // Production rates (F = G_1 = W_1 + W_2) - BOOST_CHECK_CLOSE(rstrt.get("FWPR"), 10.0 + 20.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("FOPR"), 10.1 + 20.1, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("FGPR"), 10.2 + 20.2, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("FVPR"), - (10.6 + 10.7 + 10.8) + - (20.6 + 20.7 + 20.8), 1.0e-10); - - // Production cumulative totals (F = G_1 = W_1 + W_2) - BOOST_CHECK_CLOSE(rstrt.get("FWPT"), 2 * 1.0 * (10.0 + 20.0), 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("FOPT"), 2 * 1.0 * (10.1 + 20.1), 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("FGPT"), 2 * 1.0 * (10.2 + 20.2), 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("FVPT"), - 2 * 1.0 * - ((10.6 + 10.7 + 10.8) + - (20.6 + 20.7 + 20.8)), 1.0e-10); - - // Injection rates (F = G_2 = W_3) - BOOST_CHECK_CLOSE(rstrt.get("FWIR"), (30.0 + 60.0), 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("FGIR"), (30.2 + 60.2), 1.0e-10); - - // Injection totals (F = G_2 = W_3) - BOOST_CHECK_CLOSE(rstrt.get("FWIT"), 2 * 1.0 * (30.0 + 60.0), 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("FGIT"), 2 * 1.0 * (30.2 + 60.2), 1.0e-10); - - // Water cut (F = G_1 = W_1 + W_2) - BOOST_CHECK_CLOSE(rstrt.get("FWCT"), - (10.0 + 20.0) / ((10.0 + 10.1) + (20.0 + 20.1)), 1.0e-10); - - // Producing gas/oil ratio (F = G_1 = W_1 + W_2) - BOOST_CHECK_CLOSE(rstrt.get("FGOR"), - (10.2 + 20.2) / (10.1 + 20.1), 1.0e-10); -} - -BOOST_AUTO_TEST_SUITE_END() - -// #################################################################### - -BOOST_AUTO_TEST_SUITE(Restart_EffFac) - -BOOST_AUTO_TEST_CASE(Well_Vectors_Correct) -{ - const auto rstrt = calculateRestartVectorsEffFac(); - - // W_1 (Producer, efficiency factor = 1--no difference) - { - // Production rates - BOOST_CHECK_CLOSE(rstrt.get("WWPR:W_1"), 10.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("WOPR:W_1"), 10.1, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("WGPR:W_1"), 10.2, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("WVPR:W_1"), 10.6 + 10.7 + 10.8, 1.0e-10); - - // Production cumulative totals - BOOST_CHECK_CLOSE(rstrt.get("WWPT:W_1"), 2 * 1.0 * 10.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("WOPT:W_1"), 2 * 1.0 * 10.1, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("WGPT:W_1"), 2 * 1.0 * 10.2, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("WVPT:W_1"), 2 * 1.0 * (10.6 + 10.7 + 10.8), 1.0e-10); - - // Injection rates - BOOST_CHECK_CLOSE(rstrt.get("WWIR:W_1"), 0.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("WGIR:W_1"), 0.0, 1.0e-10); - - // Injection totals - BOOST_CHECK_CLOSE(rstrt.get("WWIT:W_1"), 0.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("WGIT:W_1"), 0.0, 1.0e-10); - - // BHP - BOOST_CHECK_CLOSE(rstrt.get("WBHP:W_1"), 0.1, 1.0e-10); // Bars - - // Water cut - BOOST_CHECK_CLOSE(rstrt.get("WWCT:W_1"), 10.0 / (10.0 + 10.1), 1.0e-10); - - // Producing gas/oil ratio - BOOST_CHECK_CLOSE(rstrt.get("WGOR:W_1"), 10.2 / 10.1, 1.0e-10); - } - - // W_2 (Producer, efficiency factor = 0.2) - { - const auto wefac = 0.2; - const auto gefac = 0.01; - - // Production rates (unaffected by WEFAC) - BOOST_CHECK_CLOSE(rstrt.get("WWPR:W_2"), 20.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("WOPR:W_2"), 20.1, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("WGPR:W_2"), 20.2, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("WVPR:W_2"), (20.6 + 20.7 + 20.8), 1.0e-10); - - // Production cumulative totals (affected by WEFAC and containing GEFAC) - BOOST_CHECK_CLOSE(rstrt.get("WWPT:W_2"), 2 * 1.0 * wefac * gefac * 20.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("WOPT:W_2"), 2 * 1.0 * wefac * gefac * 20.1, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("WGPT:W_2"), 2 * 1.0 * wefac * gefac * 20.2, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("WVPT:W_2"), 2 * 1.0 * wefac * gefac * (20.6 + 20.7 + 20.8), 1.0e-10); - - // Injection rates - BOOST_CHECK_CLOSE(rstrt.get("WWIR:W_2"), 0.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("WGIR:W_2"), 0.0, 1.0e-10); - - // Injection totals - BOOST_CHECK_CLOSE(rstrt.get("WWIT:W_2"), 0.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("WGIT:W_2"), 0.0, 1.0e-10); - - // BHP - BOOST_CHECK_CLOSE(rstrt.get("WBHP:W_2"), 1.1, 1.0e-10); // Bars - - // Water cut (unaffected by WEFAC) - BOOST_CHECK_CLOSE(rstrt.get("WWCT:W_2"), 20.0 / (20.0 + 20.1), 1.0e-10); - - // Producing gas/oil ratio (unaffected by WEFAC) - BOOST_CHECK_CLOSE(rstrt.get("WGOR:W_2"), 20.2 / 20.1, 1.0e-10); - } - - // W_3 (Injector, efficiency factor = 0.3) - { - const auto wefac = 0.3; - const auto gefac = 0.02; // G_3 - - // Production rates - BOOST_CHECK_CLOSE(rstrt.get("WWPR:W_3"), 0.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("WOPR:W_3"), 0.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("WGPR:W_3"), 0.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("WVPR:W_3"), 0.0, 1.0e-10); - - // Production cumulative totals - BOOST_CHECK_CLOSE(rstrt.get("WWPT:W_3"), 0.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("WOPT:W_3"), 0.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("WGPT:W_3"), 0.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("WVPT:W_3"), 0.0, 1.0e-10); - - // Injection rates (unaffected by WEFAC) - BOOST_CHECK_CLOSE(rstrt.get("WWIR:W_3"), 30.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("WGIR:W_3"), 30.2, 1.0e-10); - - // Injection totals (affected by WEFAC and containing GEFAC) - // GEFAC(G_4) = 0.03 at sim_step = 1 - // GEFAC(G_4) = 0.04 at sim_step = 2 - BOOST_CHECK_CLOSE(rstrt.get("WWIT:W_3"), - 30.0 * wefac * gefac * - ((1.0 * 0.03) + (1.0 * 0.04)), 1.0e-10); - - BOOST_CHECK_CLOSE(rstrt.get("WGIT:W_3"), - 30.2 * wefac * gefac * - ((1.0 * 0.03) + (1.0 * 0.04)), 1.0e-10); - - // BHP - BOOST_CHECK_CLOSE(rstrt.get("WBHP:W_3"), 2.1, 1.0e-10); // Bars - - // Water cut (zero for injectors) - BOOST_CHECK_CLOSE(rstrt.get("WWCT:W_3"), 0.0, 1.0e-10); - - // Producing gas/oil ratio (zero for injectors) - BOOST_CHECK_CLOSE(rstrt.get("WGOR:W_3"), 0.0, 1.0e-10); - } -} - -// ==================================================================== - -BOOST_AUTO_TEST_CASE(Group_Vectors_Present) -{ - const auto& rstrt = calculateRestartVectorsEffFac(); - - for (const auto& vector : restartVectors()) { - for (const auto& g : activeGroupsEffFac()) { - BOOST_CHECK( rstrt.has("G" + vector + ':' + g)); - BOOST_CHECK(!rstrt.has("G" + vector)); - } - } -} - -// -------------------------------------------------------------------- - -BOOST_AUTO_TEST_CASE(Group_Vectors_Correct) -{ - const auto rstrt = calculateRestartVectorsEffFac(); - - // G_1 (Producer, W_1, GEFAC = 1--no change) - { - // Production rates - BOOST_CHECK_CLOSE(rstrt.get("GWPR:G_1"), 10.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("GOPR:G_1"), 10.1, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("GGPR:G_1"), 10.2, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("GVPR:G_1"), (10.6 + 10.7 + 10.8), 1.0e-10); - - // Production cumulative totals - BOOST_CHECK_CLOSE(rstrt.get("GWPT:G_1"), 2 * 1.0 * 10.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("GOPT:G_1"), 2 * 1.0 * 10.1, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("GGPT:G_1"), 2 * 1.0 * 10.2, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("GVPT:G_1"), - 2 * 1.0 * (10.6 + 10.7 + 10.8), 1.0e-10); - - // Injection rates - BOOST_CHECK_CLOSE(rstrt.get("GWIR:G_1"), 0.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("GGIR:G_1"), 0.0, 1.0e-10); - - // Injection totals - BOOST_CHECK_CLOSE(rstrt.get("GWIT:G_1"), 0.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("GGIT:G_1"), 0.0, 1.0e-10); - - // Water cut - BOOST_CHECK_CLOSE(rstrt.get("GWCT:G_1"), - 10.0 / (10.0 + 10.1), 1.0e-10); - - // Producing gas/oil ratio - BOOST_CHECK_CLOSE(rstrt.get("GGOR:G_1"), - 10.2 / 10.1, 1.0e-10); - } - - // G_2 (Producer, W_2, GEFAC = 0.01) - { - const auto wefac = 0.2; - const auto gefac = 0.01; - - // Production rates (affected by WEFAC) - BOOST_CHECK_CLOSE(rstrt.get("GWPR:G_2"), wefac * 20.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("GOPR:G_2"), wefac * 20.1, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("GGPR:G_2"), wefac * 20.2, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("GVPR:G_2"), wefac * (20.6 + 20.7 + 20.8), 1.0e-10); - - // Production cumulative totals (affected by both WEFAC and GEFAC) - BOOST_CHECK_CLOSE(rstrt.get("GWPT:G_2"), 2 * 1.0 * gefac * wefac * 20.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("GOPT:G_2"), 2 * 1.0 * gefac * wefac * 20.1, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("GGPT:G_2"), 2 * 1.0 * gefac * wefac * 20.2, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("GVPT:G_2"), 2 * 1.0 * gefac * wefac * (20.6 + 20.7 + 20.8), 1.0e-10); - - // Injection rates - BOOST_CHECK_CLOSE(rstrt.get("GWIR:G_2"), 0.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("GGIR:G_2"), 0.0, 1.0e-10); - - // Injection totals - BOOST_CHECK_CLOSE(rstrt.get("GWIT:G_2"), 0.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("GGIT:G_2"), 0.0, 1.0e-10); - - // Water cut (unaffected by WEFAC or GEFAC since G_2 = W_2) - BOOST_CHECK_CLOSE(rstrt.get("GWCT:G_2"), 20.0 / (20.0 + 20.1), 1.0e-10); - - // Producing gas/oil ratio (unaffected by WEFAC or GEFAC since G_2 = W_2) - BOOST_CHECK_CLOSE(rstrt.get("GGOR:G_2"), 20.2 / 20.1, 1.0e-10); - } - - // G (Producer, G_1 + G_2) - { - const auto gwefac = 0.01 * 0.2; - - BOOST_CHECK_CLOSE(rstrt.get("GWPR:G"), 10.0 + (gwefac * 20.0), 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("GOPR:G"), 10.1 + (gwefac * 20.1), 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("GGPR:G"), 10.2 + (gwefac * 20.2), 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("GVPR:G"), - (10.6 + 10.7 + 10.8) + - (gwefac * (20.6 + 20.7 + 20.8)), 1.0e-10); - - // Production cumulative totals - BOOST_CHECK_CLOSE(rstrt.get("GWPT:G"), - 2 * 1.0 * (10.0 + (gwefac * 20.0)), 1.0e-10); - - BOOST_CHECK_CLOSE(rstrt.get("GOPT:G"), - 2 * 1.0 * (10.1 + (gwefac * 20.1)), 1.0e-10); - - BOOST_CHECK_CLOSE(rstrt.get("GGPT:G"), - 2 * 1.0 * (10.2 + (gwefac * 20.2)), 1.0e-10); - - BOOST_CHECK_CLOSE(rstrt.get("GVPT:G"), - 2 * 1.0 * - ( (10.6 + 10.7 + 10.8) + - (gwefac * (20.6 + 20.7 + 20.8))), 1.0e-10); - - // Injection rates - BOOST_CHECK_CLOSE(rstrt.get("GWIR:G"), 0.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("GGIR:G"), 0.0, 1.0e-10); - - // Injection totals - BOOST_CHECK_CLOSE(rstrt.get("GWIT:G"), 0.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("GGIT:G"), 0.0, 1.0e-10); - - // Water cut - BOOST_CHECK_CLOSE(rstrt.get("GWCT:G"), - (10.0 + (gwefac * 20.0)) / - (10.0 + 10.1 + (gwefac * (20.0 + 20.1))), 1.0e-10); - - // Producing gas/oil ratio - BOOST_CHECK_CLOSE(rstrt.get("GGOR:G"), - (10.2 + (gwefac * 20.2)) / - (10.1 + (gwefac * 20.1)), 1.0e-10); - } - - // G_3 (Injector, W_3) - { - const auto wefac = 0.3; - const auto gefac_3 = 0.02; - - // Production rates - BOOST_CHECK_CLOSE(rstrt.get("GWPR:G_3"), 0.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("GOPR:G_3"), 0.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("GGPR:G_3"), 0.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("GVPR:G_3"), 0.0, 1.0e-10); - - // Production cumulative totals - BOOST_CHECK_CLOSE(rstrt.get("GWPT:G_3"), 0.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("GOPT:G_3"), 0.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("GGPT:G_3"), 0.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("GVPT:G_3"), 0.0, 1.0e-10); - - // Injection rates - BOOST_CHECK_CLOSE(rstrt.get("GWIR:G_3"), wefac * 30.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("GGIR:G_3"), wefac * 30.2, 1.0e-10); - - // Injection totals - BOOST_CHECK_CLOSE(rstrt.get("GWIT:G_3"), - 30.0 * gefac_3 * wefac * - ((1.0 * 0.03) + (1.0 * 0.04)), 1.0e-10); - - BOOST_CHECK_CLOSE(rstrt.get("GGIT:G_3"), - 30.2 * gefac_3 * wefac * - ((1.0 * 0.03) + (1.0 * 0.04)), 1.0e-10); - - // Water cut (zero for injectors) - BOOST_CHECK_CLOSE(rstrt.get("GWCT:G_3"), 0.0, 1.0e-10); - - // Producing gas/oil ratio (zero for injectors) - BOOST_CHECK_CLOSE(rstrt.get("GGOR:G_3"), 0.0, 1.0e-10); - } - - // G_4 (Injector, G_3, GEFAC = 0.03 and 0.04) - { - // Production rates - BOOST_CHECK_CLOSE(rstrt.get("GWPR:G_4"), 0.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("GOPR:G_4"), 0.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("GGPR:G_4"), 0.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("GVPR:G_4"), 0.0, 1.0e-10); - - // Production cumulative totals - BOOST_CHECK_CLOSE(rstrt.get("GWPT:G_4"), 0.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("GOPT:G_4"), 0.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("GGPT:G_4"), 0.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("GVPT:G_4"), 0.0, 1.0e-10); - - // Injection rates (at sim_step = 2) - BOOST_CHECK_CLOSE(rstrt.get("GWIR:G_4"), 0.02 * 0.3 * 30.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("GGIR:G_4"), 0.02 * 0.3 * 30.2, 1.0e-10); - - // Injection totals (GEFAC(G_4) = 0.03 at sim_step = 1, - // GEFAC(G_4) = 0.04 at sim_step = 2) - BOOST_CHECK_CLOSE(rstrt.get("GWIT:G_4"), - 30.0 * 0.3 * 0.02 * - ((0.03 * 1.0) + (0.04 * 1.0)), 1.0e-10); - - BOOST_CHECK_CLOSE(rstrt.get("GGIT:G_4"), - 30.2 * 0.3 * 0.02 * - ((0.03 * 1.0) + (0.04 * 1.0)), 1.0e-10); - - // Water cut - BOOST_CHECK_CLOSE(rstrt.get("GWCT:G_4"), 0.0, 1.0e-10); - - // Producing gas/oil ratio - BOOST_CHECK_CLOSE(rstrt.get("GGOR:G_4"), 0.0, 1.0e-10); - } -} - -// ==================================================================== - -BOOST_AUTO_TEST_CASE(Field_Vectors_Correct) -{ - const auto rstrt = calculateRestartVectorsEffFac(); - - // Field = G + G_4 - const auto efac_G = 0.01 * 0.2; - - BOOST_CHECK_CLOSE(rstrt.get("FWPR"), 10.0 + (efac_G * 20.0), 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("FOPR"), 10.1 + (efac_G * 20.1), 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("FGPR"), 10.2 + (efac_G * 20.2), 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("FVPR"), - (10.6 + 10.7 + 10.8) + - (efac_G * (20.6 + 20.7 + 20.8)), 1.0e-10); - - // Production cumulative totals - BOOST_CHECK_CLOSE(rstrt.get("FWPT"), - 2 * 1.0 * (10.0 + (efac_G * 20.0)), 1.0e-10); - - BOOST_CHECK_CLOSE(rstrt.get("FOPT"), - 2 * 1.0 * (10.1 + (efac_G * 20.1)), 1.0e-10); - - BOOST_CHECK_CLOSE(rstrt.get("FGPT"), - 2 * 1.0 * (10.2 + (efac_G * 20.2)), 1.0e-10); - - BOOST_CHECK_CLOSE(rstrt.get("FVPT"), - 2 * 1.0 * - ( (10.6 + 10.7 + 10.8) + - (efac_G * (20.6 + 20.7 + 20.8))), 1.0e-10); - - // Injection rates (at sim_step = 2, GEFAC(G_4) = 0.04) - BOOST_CHECK_CLOSE(rstrt.get("FWIR"), 0.02 * 0.04 * 0.3 * 30.0, 1.0e-10); - BOOST_CHECK_CLOSE(rstrt.get("FGIR"), 0.02 * 0.04 * 0.3 * 30.2, 1.0e-10); - - // Injection totals (GEFAC(G_4) = 0.03 at sim_step = 1, - // GEFAC(G_4) = 0.04 at sim_step = 2) - BOOST_CHECK_CLOSE(rstrt.get("FWIT"), - 30.0 * 0.3 * 0.02 * - ((0.03 * 1.0) + (0.04 * 1.0)), 1.0e-10); - - BOOST_CHECK_CLOSE(rstrt.get("FGIT"), - 30.2 * 0.3 * 0.02 * - ((0.03 * 1.0) + (0.04 * 1.0)), 1.0e-10); - - // Water cut - BOOST_CHECK_CLOSE(rstrt.get("FWCT"), - (10.0 + (efac_G * 20.0)) / - (10.0 + 10.1 + (efac_G * (20.0 + 20.1))), 1.0e-10); - - // Producing gas/oil ratio - BOOST_CHECK_CLOSE(rstrt.get("FGOR"), - (10.2 + (efac_G * 20.2)) / - (10.1 + (efac_G * 20.1)), 1.0e-10); -} - -BOOST_AUTO_TEST_SUITE_END() - -// #################################################################### - -namespace { - void fill_surface_rates(const std::size_t id, - const double sign, - data::Rates& rates) - { - const auto topRate = id * 1000*sm3_pr_day(); - - rates.set(data::Rates::opt::wat, sign * (topRate + 100*sm3_pr_day())); - rates.set(data::Rates::opt::oil, sign * (topRate + 200*sm3_pr_day())); - rates.set(data::Rates::opt::gas, sign * (topRate + 400*sm3_pr_day())); - } - - std::size_t numSegProd01() - { - return 26; - } - - data::Connection conn_results(const std::size_t connID, - const std::size_t cellID, - const double sign) - { - auto res = data::Connection{}; - - res.index = cellID; - - fill_surface_rates(connID, sign, res.rates); - - // Not meant to be realistic, other than possibly order of magnitude. - res.pressure = (200.0 + connID)*unit::barsa; - res.reservoir_rate = (125.0 + connID)*sm3_pr_day(); - res.cell_pressure = (250.0 + cellID)*unit::barsa; - - return res; - } - - data::Segment seg_results(const std::size_t segID, const double sign) - { - auto res = data::Segment{}; - - fill_surface_rates(segID, sign, res.rates); - - const auto pres_idx = Opm::data::SegmentPressures::Value::Pressure; - res.pressures[pres_idx] = (100.0 + segID)*unit::barsa; - - res.segNumber = segID; - - return res; - } - - std::unordered_map prod01_seg_results() - { - auto res = std::unordered_map{}; - - // Flow's producer rates are negative (positive fluxes well -> reservoir). - const auto sign = -1.0; - - for (auto nSeg = numSegProd01(), segID = 0*nSeg; - segID < nSeg; ++segID) - { - res[segID + 1] = seg_results(segID + 1, sign); - } - - return res; - } - - std::vector prod01_conn_results() - { - auto res = std::vector{}; - res.reserve(26); - - const auto cellID = std::vector { - 99, // IJK = (10, 10, 1) - 199, // IJK = (10, 10, 2) - 299, // IJK = (10, 10, 3) - 399, // IJK = (10, 10, 4) - 499, // IJK = (10, 10, 5) - 599, // IJK = (10, 10, 6) - - 198, // IJK = ( 9, 10, 2) - 197, // IJK = ( 8, 10, 2) - 196, // IJK = ( 7, 10, 2) - 195, // IJK = ( 6, 10, 2) - 194, // IJK = ( 5, 10, 2) - - 289, // IJK = (10, 9, 3) - 279, // IJK = (10, 8, 3) - 269, // IJK = (10, 7, 3) - 259, // IJK = (10, 6, 3) - 249, // IJK = (10, 5, 3) - - 498, // IJK = ( 9, 10, 5) - 497, // IJK = ( 8, 10, 5) - 496, // IJK = ( 7, 10, 5) - 495, // IJK = ( 6, 10, 5) - 494, // IJK = ( 5, 10, 5) - - 589, // IJK = (10, 9, 6) - 579, // IJK = (10, 8, 6) - 569, // IJK = (10, 7, 6) - 559, // IJK = (10, 6, 6) - 549, // IJK = (10, 5, 6) - }; - - // Flow's producer rates are negative (positive fluxes well -> reservoir). - const auto sign = -1.0; - - for (auto nConn = cellID.size(), connID = 0*nConn; - connID < nConn; ++connID) - { - res.push_back(conn_results(connID, cellID[connID], sign)); - } - - return res; - } - - std::vector inje01_conn_results() - { - auto res = std::vector{}; - res.reserve(3); - - const auto cellID = std::vector { - 600, // IJK = ( 1, 1, 7) - 700, // IJK = ( 1, 1, 8) - 800, // IJK = ( 1, 1, 9) - }; - - // Flow's injection rates are positive (positive fluxes well -> reservoir). - const auto sign = +1.0; - - for (auto nConn = cellID.size(), connID = 0*nConn; - connID < nConn; ++connID) - { - res.push_back(conn_results(connID, cellID[connID], sign)); - } - - return res; - } - - std::string genKeyPROD01(const std::string& vector, - const std::size_t segID) - { - return vector + ":PROD01:" + std::to_string(segID); - } -} // Anonymous - -data::Well SegmentResultHelpers::prod01_results() -{ - auto res = data::Well{}; - - fill_surface_rates(0, -1.0, res.rates); - - res.bhp = 123.45*unit::barsa; - res.thp = 60.221409*unit::barsa; - res.temperature = 298.15; - res.control = 0; - - res.connections = prod01_conn_results(); - res.segments = prod01_seg_results(); - - return res; -} - -data::Well SegmentResultHelpers::inje01_results() -{ - auto res = data::Well{}; - - fill_surface_rates(0, 1.0, res.rates); - - res.bhp = 543.21*unit::barsa; - res.thp = 256.821*unit::barsa; - res.temperature = 298.15; - res.control = 0; - - res.connections = inje01_conn_results(); - - return res; -} - -// ==================================================================== - -BOOST_AUTO_TEST_SUITE(Restart_Segment) - -BOOST_AUTO_TEST_CASE(Vectors_Present) -{ - const auto rstrt = calculateRestartVectorsSegment(); - - for (const auto* vector : { "SGFR", "SOFR", "SPR", "SWFR"}) { - for (auto nSeg = numSegProd01(), segID = 0*nSeg; - segID < nSeg; ++segID) - { - BOOST_CHECK(rstrt.has(genKeyPROD01(vector, segID + 1))); - } - - BOOST_CHECK(!rstrt.has(genKeyPROD01(vector, 27))); - BOOST_CHECK(!rstrt.has(vector + std::string{":INJE01:1"})); - } -} - -// ==================================================================== - -BOOST_AUTO_TEST_CASE(Pressure_Correct) -{ - const auto rstrt = calculateRestartVectorsSegment(); - for (auto nSeg = numSegProd01(), segID = 0*nSeg; - segID < nSeg; ++segID) - { - const auto& key = genKeyPROD01("SPR", segID + 1); - - // Pressure value converted to METRIC output units (bars). - BOOST_CHECK_CLOSE(rstrt.get(key), 100.0 + (segID + 1), 1.0e-10); - } -} - -// ==================================================================== - -BOOST_AUTO_TEST_CASE(OilRate_Correct) -{ - const auto rstrt = calculateRestartVectorsSegment(); - for (auto nSeg = numSegProd01(), segID = 0*nSeg; - segID < nSeg; ++segID) - { - const auto& key = genKeyPROD01("SOFR", segID + 1); - - // Producer rates positive in 'rstrt', converted to METRIC - // output units (SM3/day). - BOOST_CHECK_CLOSE(rstrt.get(key), 1000.0*(segID + 1) + 200, 1.0e-10); - } -} - -// ==================================================================== - -BOOST_AUTO_TEST_CASE(GasRate_Correct) -{ - const auto rstrt = calculateRestartVectorsSegment(); - for (auto nSeg = numSegProd01(), segID = 0*nSeg; - segID < nSeg; ++segID) - { - const auto& key = genKeyPROD01("SGFR", segID + 1); - - // Producer rates positive in 'rstrt', converted to METRIC - // output units (SM3/day). - BOOST_CHECK_CLOSE(rstrt.get(key), 1000.0*(segID + 1) + 400, 1.0e-10); - } -} - -// ==================================================================== - -BOOST_AUTO_TEST_CASE(WaterRate_Correct) -{ - const auto rstrt = calculateRestartVectorsSegment(); - for (auto nSeg = numSegProd01(), segID = 0*nSeg; - segID < nSeg; ++segID) - { - const auto& key = genKeyPROD01("SWFR", segID + 1); - - // Producer rates positive in 'rstrt', converted to METRIC - // output units (SM3/day). - BOOST_CHECK_CLOSE(rstrt.get(key), 1000.0*(segID + 1) + 100, 1.0e-10); - } -} - -// ==================================================================== - -namespace { - bool hasSegmentVariable_Prod01(const Opm::EclIO::ESmry* ecl_sum, - const char* vector, - const int segID) - { - const auto lookup_kw = genKeyPROD01(vector, segID); - - return ecl_sum_has_general_var(ecl_sum, lookup_kw); - } - - double getSegmentVariable_Prod01(const Opm::EclIO::ESmry* ecl_sum, - const int timeIdx, - const char* vector, - const int segID) - { - const auto lookup_kw = genKeyPROD01(vector, segID); - - return ecl_sum_get_general_var(ecl_sum, timeIdx, lookup_kw); - } -} // Anonymous - -BOOST_AUTO_TEST_CASE(Write_Read) -{ - const setup config{"test.Restart.Segment.RW", "SOFR_TEST.DATA"}; - - ::Opm::out::Summary writer { - config.es, config.config, config.grid, config.schedule - }; - - SummaryState st(std::chrono::system_clock::now()); - writer.eval(st, 0, 0*day, config.es, config.schedule, config.wells, config.groups, {}); - writer.add_timestep(st, 0); - writer.eval(st, 1, 1*day, config.es, config.schedule, config.wells, config.groups, {}); - writer.add_timestep(st, 1); - writer.eval(st, 2, 2*day, config.es, config.schedule, config.wells, config.groups, {}); - writer.add_timestep(st, 2); - writer.write(); - - auto res = readsum("SOFR_TEST"); - const auto* resp = res.get(); - - const int timeIdx = 2; - - // Rate Setup - // - // const auto topRate = id * 1000*sm3_pr_day(); - // rates.set(data::Rates::opt::wat, sign * (topRate + 100*sm3_pr_day())); - // rates.set(data::Rates::opt::oil, sign * (topRate + 200*sm3_pr_day())); - // rates.set(data::Rates::opt::gas, sign * (topRate + 400*sm3_pr_day())); - // - // Pressure Setup - // res.pressure = (100.0 + segID)*unit::barsa; - - // Note: Producer rates reported as positive. - - // SOFR_TEST Summary Section: - // - // SUMMARY - // - // -- ALL - // - // SOFR - // 'PROD01' 1 / - // 'PROD01' 10 / - // 'PROD01' 21 / - // / - // - // SGFR - // 'PROD01' / - // / - // - // SPR - // 1* 10 / - // / - // - // SWFR - // / - - // Segment 1: SOFR, SGFR, SWFR - { - const auto segID = 1; - - BOOST_CHECK( hasSegmentVariable_Prod01(resp, "SOFR", segID)); - BOOST_CHECK( hasSegmentVariable_Prod01(resp, "SGFR", segID)); - BOOST_CHECK( hasSegmentVariable_Prod01(resp, "SWFR", segID)); - BOOST_CHECK(!hasSegmentVariable_Prod01(resp, "SPR" , segID)); - - BOOST_CHECK_CLOSE(getSegmentVariable_Prod01(resp, timeIdx, "SOFR", segID), - segID*1000.0 + 200.0, 1.0e-10); - - BOOST_CHECK_CLOSE(getSegmentVariable_Prod01(resp, timeIdx, "SGFR", segID), - segID*1000.0 + 400.0, 1.0e-10); - - BOOST_CHECK_CLOSE(getSegmentVariable_Prod01(resp, timeIdx, "SWFR", segID), - segID*1000.0 + 100.0, 1.0e-10); - } - - // Segment 2: SGFR, SWFR - { - const auto segID = 2; - - BOOST_CHECK(!hasSegmentVariable_Prod01(resp, "SOFR", segID)); - BOOST_CHECK( hasSegmentVariable_Prod01(resp, "SGFR", segID)); - BOOST_CHECK( hasSegmentVariable_Prod01(resp, "SWFR", segID)); - BOOST_CHECK(!hasSegmentVariable_Prod01(resp, "SPR" , segID)); - - BOOST_CHECK_CLOSE(getSegmentVariable_Prod01(resp, timeIdx, "SGFR", segID), - segID*1000.0 + 400.0, 1.0e-10); - - BOOST_CHECK_CLOSE(getSegmentVariable_Prod01(resp, timeIdx, "SWFR", segID), - segID*1000.0 + 100.0, 1.0e-10); - } - - // Segment 3: SGFR, SWFR - { - const auto segID = 3; - - BOOST_CHECK(!hasSegmentVariable_Prod01(resp, "SOFR", segID)); - BOOST_CHECK( hasSegmentVariable_Prod01(resp, "SGFR", segID)); - BOOST_CHECK( hasSegmentVariable_Prod01(resp, "SWFR", segID)); - BOOST_CHECK(!hasSegmentVariable_Prod01(resp, "SPR" , segID)); - - BOOST_CHECK_CLOSE(getSegmentVariable_Prod01(resp, timeIdx, "SGFR", segID), - segID*1000.0 + 400.0, 1.0e-10); - - BOOST_CHECK_CLOSE(getSegmentVariable_Prod01(resp, timeIdx, "SWFR", segID), - segID*1000.0 + 100.0, 1.0e-10); - } - - // Segment 4: SGFR, SWFR - { - const auto segID = 4; - - BOOST_CHECK(!hasSegmentVariable_Prod01(resp, "SOFR", segID)); - BOOST_CHECK( hasSegmentVariable_Prod01(resp, "SGFR", segID)); - BOOST_CHECK( hasSegmentVariable_Prod01(resp, "SWFR", segID)); - BOOST_CHECK(!hasSegmentVariable_Prod01(resp, "SPR" , segID)); - - BOOST_CHECK_CLOSE(getSegmentVariable_Prod01(resp, timeIdx, "SGFR", segID), - segID*1000.0 + 400.0, 1.0e-10); - - BOOST_CHECK_CLOSE(getSegmentVariable_Prod01(resp, timeIdx, "SWFR", segID), - segID*1000.0 + 100.0, 1.0e-10); - } - - // Segment 5: SGFR, SWFR - { - const auto segID = 5; - - BOOST_CHECK(!hasSegmentVariable_Prod01(resp, "SOFR", segID)); - BOOST_CHECK( hasSegmentVariable_Prod01(resp, "SGFR", segID)); - BOOST_CHECK( hasSegmentVariable_Prod01(resp, "SWFR", segID)); - BOOST_CHECK(!hasSegmentVariable_Prod01(resp, "SPR" , segID)); - - BOOST_CHECK_CLOSE(getSegmentVariable_Prod01(resp, timeIdx, "SGFR", segID), - segID*1000.0 + 400.0, 1.0e-10); - - BOOST_CHECK_CLOSE(getSegmentVariable_Prod01(resp, timeIdx, "SWFR", segID), - segID*1000.0 + 100.0, 1.0e-10); - } - - // Segment 6: SGFR, SWFR - { - const auto segID = 6; - - BOOST_CHECK(!hasSegmentVariable_Prod01(resp, "SOFR", segID)); - BOOST_CHECK( hasSegmentVariable_Prod01(resp, "SGFR", segID)); - BOOST_CHECK( hasSegmentVariable_Prod01(resp, "SWFR", segID)); - BOOST_CHECK(!hasSegmentVariable_Prod01(resp, "SPR" , segID)); - - BOOST_CHECK_CLOSE(getSegmentVariable_Prod01(resp, timeIdx, "SGFR", segID), - segID*1000.0 + 400.0, 1.0e-10); - - BOOST_CHECK_CLOSE(getSegmentVariable_Prod01(resp, timeIdx, "SWFR", segID), - segID*1000.0 + 100.0, 1.0e-10); - } - - // Segment 7: SGFR, SWFR - { - const auto segID = 7; - - BOOST_CHECK(!hasSegmentVariable_Prod01(resp, "SOFR", segID)); - BOOST_CHECK( hasSegmentVariable_Prod01(resp, "SGFR", segID)); - BOOST_CHECK( hasSegmentVariable_Prod01(resp, "SWFR", segID)); - BOOST_CHECK(!hasSegmentVariable_Prod01(resp, "SPR" , segID)); - - BOOST_CHECK_CLOSE(getSegmentVariable_Prod01(resp, timeIdx, "SGFR", segID), - segID*1000.0 + 400.0, 1.0e-10); - - BOOST_CHECK_CLOSE(getSegmentVariable_Prod01(resp, timeIdx, "SWFR", segID), - segID*1000.0 + 100.0, 1.0e-10); - } - - // Segment 8: SGFR, SWFR - { - const auto segID = 8; - - BOOST_CHECK(!hasSegmentVariable_Prod01(resp, "SOFR", segID)); - BOOST_CHECK( hasSegmentVariable_Prod01(resp, "SGFR", segID)); - BOOST_CHECK( hasSegmentVariable_Prod01(resp, "SWFR", segID)); - BOOST_CHECK(!hasSegmentVariable_Prod01(resp, "SPR" , segID)); - - BOOST_CHECK_CLOSE(getSegmentVariable_Prod01(resp, timeIdx, "SGFR", segID), - segID*1000.0 + 400.0, 1.0e-10); - - BOOST_CHECK_CLOSE(getSegmentVariable_Prod01(resp, timeIdx, "SWFR", segID), - segID*1000.0 + 100.0, 1.0e-10); - } - - // Segment 9: SGFR, SWFR - { - const auto segID = 9; - - BOOST_CHECK(!hasSegmentVariable_Prod01(resp, "SOFR", segID)); - BOOST_CHECK( hasSegmentVariable_Prod01(resp, "SGFR", segID)); - BOOST_CHECK( hasSegmentVariable_Prod01(resp, "SWFR", segID)); - BOOST_CHECK(!hasSegmentVariable_Prod01(resp, "SPR" , segID)); - - BOOST_CHECK_CLOSE(getSegmentVariable_Prod01(resp, timeIdx, "SGFR", segID), - segID*1000.0 + 400.0, 1.0e-10); - - BOOST_CHECK_CLOSE(getSegmentVariable_Prod01(resp, timeIdx, "SWFR", segID), - segID*1000.0 + 100.0, 1.0e-10); - } - - // Segment 10: SOFR, SGFR, SWFR, SPR - { - const auto segID = 10; - - BOOST_CHECK( hasSegmentVariable_Prod01(resp, "SOFR", segID)); - BOOST_CHECK( hasSegmentVariable_Prod01(resp, "SGFR", segID)); - BOOST_CHECK( hasSegmentVariable_Prod01(resp, "SWFR", segID)); - BOOST_CHECK( hasSegmentVariable_Prod01(resp, "SPR" , segID)); - - BOOST_CHECK_CLOSE(getSegmentVariable_Prod01(resp, timeIdx, "SGFR", segID), - segID*1000.0 + 400.0, 1.0e-10); - - BOOST_CHECK_CLOSE(getSegmentVariable_Prod01(resp, timeIdx, "SWFR", segID), - segID*1000.0 + 100.0, 1.0e-10); - - BOOST_CHECK_CLOSE(getSegmentVariable_Prod01(resp, timeIdx, "SWFR", segID), - segID*1000.0 + 100.0, 1.0e-10); - - BOOST_CHECK_CLOSE(getSegmentVariable_Prod01(resp, timeIdx, "SPR", segID), - 100.0 + segID, 1.0e-10); - } - - // Segment 11: SGFR, SWFR - { - const auto segID = 11; - - BOOST_CHECK(!hasSegmentVariable_Prod01(resp, "SOFR", segID)); - BOOST_CHECK( hasSegmentVariable_Prod01(resp, "SGFR", segID)); - BOOST_CHECK( hasSegmentVariable_Prod01(resp, "SWFR", segID)); - BOOST_CHECK(!hasSegmentVariable_Prod01(resp, "SPR" , segID)); - - BOOST_CHECK_CLOSE(getSegmentVariable_Prod01(resp, timeIdx, "SGFR", segID), - segID*1000.0 + 400.0, 1.0e-10); - - BOOST_CHECK_CLOSE(getSegmentVariable_Prod01(resp, timeIdx, "SWFR", segID), - segID*1000.0 + 100.0, 1.0e-10); - } - - // Segment 12: SGFR, SWFR - { - const auto segID = 12; - - BOOST_CHECK(!hasSegmentVariable_Prod01(resp, "SOFR", segID)); - BOOST_CHECK( hasSegmentVariable_Prod01(resp, "SGFR", segID)); - BOOST_CHECK( hasSegmentVariable_Prod01(resp, "SWFR", segID)); - BOOST_CHECK(!hasSegmentVariable_Prod01(resp, "SPR" , segID)); - - BOOST_CHECK_CLOSE(getSegmentVariable_Prod01(resp, timeIdx, "SGFR", segID), - segID*1000.0 + 400.0, 1.0e-10); - - BOOST_CHECK_CLOSE(getSegmentVariable_Prod01(resp, timeIdx, "SWFR", segID), - segID*1000.0 + 100.0, 1.0e-10); - } - - // Segment 13: SGFR, SWFR - { - const auto segID = 13; - - BOOST_CHECK(!hasSegmentVariable_Prod01(resp, "SOFR", segID)); - BOOST_CHECK( hasSegmentVariable_Prod01(resp, "SGFR", segID)); - BOOST_CHECK( hasSegmentVariable_Prod01(resp, "SWFR", segID)); - BOOST_CHECK(!hasSegmentVariable_Prod01(resp, "SPR" , segID)); - - BOOST_CHECK_CLOSE(getSegmentVariable_Prod01(resp, timeIdx, "SGFR", segID), - segID*1000.0 + 400.0, 1.0e-10); - - BOOST_CHECK_CLOSE(getSegmentVariable_Prod01(resp, timeIdx, "SWFR", segID), - segID*1000.0 + 100.0, 1.0e-10); - } - - // Segment 14: SGFR, SWFR - { - const auto segID = 14; - - BOOST_CHECK(!hasSegmentVariable_Prod01(resp, "SOFR", segID)); - BOOST_CHECK( hasSegmentVariable_Prod01(resp, "SGFR", segID)); - BOOST_CHECK( hasSegmentVariable_Prod01(resp, "SWFR", segID)); - BOOST_CHECK(!hasSegmentVariable_Prod01(resp, "SPR" , segID)); - - BOOST_CHECK_CLOSE(getSegmentVariable_Prod01(resp, timeIdx, "SGFR", segID), - segID*1000.0 + 400.0, 1.0e-10); - - BOOST_CHECK_CLOSE(getSegmentVariable_Prod01(resp, timeIdx, "SWFR", segID), - segID*1000.0 + 100.0, 1.0e-10); - } - - // Segment 15: SGFR, SWFR - { - const auto segID = 15; - - BOOST_CHECK(!hasSegmentVariable_Prod01(resp, "SOFR", segID)); - BOOST_CHECK( hasSegmentVariable_Prod01(resp, "SGFR", segID)); - BOOST_CHECK( hasSegmentVariable_Prod01(resp, "SWFR", segID)); - BOOST_CHECK(!hasSegmentVariable_Prod01(resp, "SPR" , segID)); - - BOOST_CHECK_CLOSE(getSegmentVariable_Prod01(resp, timeIdx, "SGFR", segID), - segID*1000.0 + 400.0, 1.0e-10); - - BOOST_CHECK_CLOSE(getSegmentVariable_Prod01(resp, timeIdx, "SWFR", segID), - segID*1000.0 + 100.0, 1.0e-10); - } - - // Segment 16: SGFR, SWFR - { - const auto segID = 16; - - BOOST_CHECK(!hasSegmentVariable_Prod01(resp, "SOFR", segID)); - BOOST_CHECK( hasSegmentVariable_Prod01(resp, "SGFR", segID)); - BOOST_CHECK( hasSegmentVariable_Prod01(resp, "SWFR", segID)); - BOOST_CHECK(!hasSegmentVariable_Prod01(resp, "SPR" , segID)); - - BOOST_CHECK_CLOSE(getSegmentVariable_Prod01(resp, timeIdx, "SGFR", segID), - segID*1000.0 + 400.0, 1.0e-10); - - BOOST_CHECK_CLOSE(getSegmentVariable_Prod01(resp, timeIdx, "SWFR", segID), - segID*1000.0 + 100.0, 1.0e-10); - } - - // Segment 17: SGFR, SWFR - { - const auto segID = 17; - - BOOST_CHECK(!hasSegmentVariable_Prod01(resp, "SOFR", segID)); - BOOST_CHECK( hasSegmentVariable_Prod01(resp, "SGFR", segID)); - BOOST_CHECK( hasSegmentVariable_Prod01(resp, "SWFR", segID)); - BOOST_CHECK(!hasSegmentVariable_Prod01(resp, "SPR" , segID)); - - BOOST_CHECK_CLOSE(getSegmentVariable_Prod01(resp, timeIdx, "SGFR", segID), - segID*1000.0 + 400.0, 1.0e-10); - - BOOST_CHECK_CLOSE(getSegmentVariable_Prod01(resp, timeIdx, "SWFR", segID), - segID*1000.0 + 100.0, 1.0e-10); - } - - // Segment 18: SGFR, SWFR - { - const auto segID = 18; - - BOOST_CHECK(!hasSegmentVariable_Prod01(resp, "SOFR", segID)); - BOOST_CHECK( hasSegmentVariable_Prod01(resp, "SGFR", segID)); - BOOST_CHECK( hasSegmentVariable_Prod01(resp, "SWFR", segID)); - BOOST_CHECK(!hasSegmentVariable_Prod01(resp, "SPR" , segID)); - - BOOST_CHECK_CLOSE(getSegmentVariable_Prod01(resp, timeIdx, "SGFR", segID), - segID*1000.0 + 400.0, 1.0e-10); - - BOOST_CHECK_CLOSE(getSegmentVariable_Prod01(resp, timeIdx, "SWFR", segID), - segID*1000.0 + 100.0, 1.0e-10); - } - - // Segment 19: SGFR, SWFR - { - const auto segID = 19; - - BOOST_CHECK(!hasSegmentVariable_Prod01(resp, "SOFR", segID)); - BOOST_CHECK( hasSegmentVariable_Prod01(resp, "SGFR", segID)); - BOOST_CHECK( hasSegmentVariable_Prod01(resp, "SWFR", segID)); - BOOST_CHECK(!hasSegmentVariable_Prod01(resp, "SPR" , segID)); - - BOOST_CHECK_CLOSE(getSegmentVariable_Prod01(resp, timeIdx, "SGFR", segID), - segID*1000.0 + 400.0, 1.0e-10); - - BOOST_CHECK_CLOSE(getSegmentVariable_Prod01(resp, timeIdx, "SWFR", segID), - segID*1000.0 + 100.0, 1.0e-10); - } - - // Segment 20: SGFR, SWFR - { - const auto segID = 20; - - BOOST_CHECK(!hasSegmentVariable_Prod01(resp, "SOFR", segID)); - BOOST_CHECK( hasSegmentVariable_Prod01(resp, "SGFR", segID)); - BOOST_CHECK( hasSegmentVariable_Prod01(resp, "SWFR", segID)); - BOOST_CHECK(!hasSegmentVariable_Prod01(resp, "SPR" , segID)); - - BOOST_CHECK_CLOSE(getSegmentVariable_Prod01(resp, timeIdx, "SWFR", segID), - segID*1000.0 + 100.0, 1.0e-10); - - BOOST_CHECK_CLOSE(getSegmentVariable_Prod01(resp, timeIdx, "SWFR", segID), - segID*1000.0 + 100.0, 1.0e-10); - } - - // Segment 21: SOFR, SGFR, SWFR - { - const auto segID = 21; - - BOOST_CHECK( hasSegmentVariable_Prod01(resp, "SOFR", segID)); - BOOST_CHECK( hasSegmentVariable_Prod01(resp, "SGFR", segID)); - BOOST_CHECK( hasSegmentVariable_Prod01(resp, "SWFR", segID)); - BOOST_CHECK(!hasSegmentVariable_Prod01(resp, "SPR" , segID)); - - BOOST_CHECK_CLOSE(getSegmentVariable_Prod01(resp, timeIdx, "SOFR", segID), - segID*1000.0 + 200.0, 1.0e-10); - - BOOST_CHECK_CLOSE(getSegmentVariable_Prod01(resp, timeIdx, "SGFR", segID), - segID*1000.0 + 400.0, 1.0e-10); - - BOOST_CHECK_CLOSE(getSegmentVariable_Prod01(resp, timeIdx, "SWFR", segID), - segID*1000.0 + 100.0, 1.0e-10); - } - - // Segment 22: SGFR, SWFR - { - const auto segID = 22; - - BOOST_CHECK(!hasSegmentVariable_Prod01(resp, "SOFR", segID)); - BOOST_CHECK( hasSegmentVariable_Prod01(resp, "SGFR", segID)); - BOOST_CHECK( hasSegmentVariable_Prod01(resp, "SWFR", segID)); - BOOST_CHECK(!hasSegmentVariable_Prod01(resp, "SPR" , segID)); - - BOOST_CHECK_CLOSE(getSegmentVariable_Prod01(resp, timeIdx, "SGFR", segID), - segID*1000.0 + 400.0, 1.0e-10); - - BOOST_CHECK_CLOSE(getSegmentVariable_Prod01(resp, timeIdx, "SWFR", segID), - segID*1000.0 + 100.0, 1.0e-10); - } - - // Segment 23: SGFR, SWFR - { - const auto segID = 23; - - BOOST_CHECK(!hasSegmentVariable_Prod01(resp, "SOFR", segID)); - BOOST_CHECK( hasSegmentVariable_Prod01(resp, "SGFR", segID)); - BOOST_CHECK( hasSegmentVariable_Prod01(resp, "SWFR", segID)); - BOOST_CHECK(!hasSegmentVariable_Prod01(resp, "SPR" , segID)); - - BOOST_CHECK_CLOSE(getSegmentVariable_Prod01(resp, timeIdx, "SGFR", segID), - segID*1000.0 + 400.0, 1.0e-10); - - BOOST_CHECK_CLOSE(getSegmentVariable_Prod01(resp, timeIdx, "SWFR", segID), - segID*1000.0 + 100.0, 1.0e-10); - } - - // Segment 24: SGFR, SWFR - { - const auto segID = 24; - - BOOST_CHECK(!hasSegmentVariable_Prod01(resp, "SOFR", segID)); - BOOST_CHECK( hasSegmentVariable_Prod01(resp, "SGFR", segID)); - BOOST_CHECK( hasSegmentVariable_Prod01(resp, "SWFR", segID)); - BOOST_CHECK(!hasSegmentVariable_Prod01(resp, "SPR" , segID)); - - BOOST_CHECK_CLOSE(getSegmentVariable_Prod01(resp, timeIdx, "SGFR", segID), - segID*1000.0 + 400.0, 1.0e-10); - - BOOST_CHECK_CLOSE(getSegmentVariable_Prod01(resp, timeIdx, "SWFR", segID), - segID*1000.0 + 100.0, 1.0e-10); - } - - // Segment 25: SGFR, SWFR - { - const auto segID = 25; - - BOOST_CHECK(!hasSegmentVariable_Prod01(resp, "SOFR", segID)); - BOOST_CHECK( hasSegmentVariable_Prod01(resp, "SGFR", segID)); - BOOST_CHECK( hasSegmentVariable_Prod01(resp, "SWFR", segID)); - BOOST_CHECK(!hasSegmentVariable_Prod01(resp, "SPR" , segID)); - - BOOST_CHECK_CLOSE(getSegmentVariable_Prod01(resp, timeIdx, "SGFR", segID), - segID*1000.0 + 400.0, 1.0e-10); - - BOOST_CHECK_CLOSE(getSegmentVariable_Prod01(resp, timeIdx, "SWFR", segID), - segID*1000.0 + 100.0, 1.0e-10); - } - - // Segment 26: SGFR, SWFR - { - const auto segID = 26; - - BOOST_CHECK(!hasSegmentVariable_Prod01(resp, "SOFR", segID)); - BOOST_CHECK( hasSegmentVariable_Prod01(resp, "SGFR", segID)); - BOOST_CHECK( hasSegmentVariable_Prod01(resp, "SWFR", segID)); - BOOST_CHECK(!hasSegmentVariable_Prod01(resp, "SPR" , segID)); - - BOOST_CHECK_CLOSE(getSegmentVariable_Prod01(resp, timeIdx, "SGFR", segID), - segID*1000.0 + 400.0, 1.0e-10); - - BOOST_CHECK_CLOSE(getSegmentVariable_Prod01(resp, timeIdx, "SWFR", segID), - segID*1000.0 + 100.0, 1.0e-10); - } - - // Segment 256: No such segment - { - const auto segID = 256; - - BOOST_CHECK(!hasSegmentVariable_Prod01(resp, "SOFR", segID)); - BOOST_CHECK(!hasSegmentVariable_Prod01(resp, "SGFR", segID)); - BOOST_CHECK(!hasSegmentVariable_Prod01(resp, "SWFR", segID)); - BOOST_CHECK(!hasSegmentVariable_Prod01(resp, "SPR" , segID)); - } -} - -BOOST_AUTO_TEST_SUITE_END() - -// ===================================================================== - -BOOST_AUTO_TEST_SUITE(Reset_Cumulative_Vectors) - -BOOST_AUTO_TEST_CASE(SummaryState_TOTAL) { - SummaryState st(std::chrono::system_clock::now()); - st.update("FOPR", 100); - BOOST_CHECK_EQUAL(st.get("FOPR"), 100); - st.update("FOPR", 100); - BOOST_CHECK_EQUAL(st.get("FOPR"), 100); - st.update("WOPR:OP1", 100); - BOOST_CHECK_EQUAL(st.get("WOPR:OP1"), 100); - st.update("WOPR:OP1", 100); - BOOST_CHECK_EQUAL(st.get("WOPR:OP1"), 100); - - st.update("FOPT", 100); - BOOST_CHECK_EQUAL(st.get("FOPT"), 100); - st.update("FOPT", 100); - BOOST_CHECK_EQUAL(st.get("FOPT"), 200); - st.update("WOPT:OP1", 100); - BOOST_CHECK_EQUAL(st.get("WOPT:OP1"), 100); - st.update("WOPT:OP1", 100); - BOOST_CHECK_EQUAL(st.get("WOPT:OP1"), 200); - - st.update_well_var("OP1", "WOPR", 100); - BOOST_CHECK_EQUAL(st.get_well_var("OP1", "WOPR"), 100); - st.update_well_var("OP1", "WOPR", 100); - BOOST_CHECK_EQUAL(st.get_well_var("OP1", "WOPR"), 100); - - st.update_well_var("OP1", "WWCT", 0.50); - BOOST_CHECK_EQUAL(st.get_well_var("OP1", "WWCT"), 0.50); - st.update_well_var("OP1", "WWCT", 0.50); - BOOST_CHECK_EQUAL(st.get_well_var("OP1", "WWCT"), 0.50); - - st.update_well_var("OP1", "WOPT", 100); - BOOST_CHECK_EQUAL(st.get_well_var("OP1", "WOPT"), 100); - st.update_well_var("OP1", "WOPT", 100); - BOOST_CHECK_EQUAL(st.get_well_var("OP1", "WOPT"), 200); - - st.update_well_var("OP1", "WOPTH", 100); - BOOST_CHECK_EQUAL(st.get_well_var("OP1", "WOPTH"), 100); - st.update_well_var("OP1", "WOPTH", 100); - BOOST_CHECK_EQUAL(st.get_well_var("OP1", "WOPTH"), 200); - - st.update_group_var("G1", "GOPTH", 100); - BOOST_CHECK_EQUAL(st.get_group_var("G1", "GOPTH"), 100); - st.update_group_var("G1", "GOPTH", 100); - BOOST_CHECK_EQUAL(st.get_group_var("G1", "GOPTH"), 200); - - st.update("FOPTH", 100); - BOOST_CHECK_EQUAL(st.get("FOPTH"), 100); - st.update("FOPTH", 100); - BOOST_CHECK_EQUAL(st.get("FOPTH"), 200); - - st.update("WGPTS", 100); - BOOST_CHECK_EQUAL(st.get("WGPTS"), 100); - st.update("WGPTS", 100); - BOOST_CHECK_EQUAL(st.get("WGPTS"), 200); - - st.update_elapsed(100); - BOOST_CHECK_EQUAL(st.get_elapsed(), 100); - st.update_elapsed(100); - BOOST_CHECK_EQUAL(st.get_elapsed(), 200); -} - -namespace { -bool equal(const SummaryState& st1 , const SummaryState& st2) { - if (st1.size() != st2.size()) - return false; - - { - const auto& wells2 = st2.wells(); - if (wells2.size() != st1.wells().size()) - return false; - - for (const auto& well : st1.wells()) { - auto f = std::find(wells2.begin(), wells2.end(), well); - if (f == wells2.end()) - return false; - } - } - - { - const auto& groups2 = st2.groups(); - if (groups2.size() != st1.groups().size()) - return false; - - for (const auto& group : st1.groups()) { - auto f = std::find(groups2.begin(), groups2.end(), group); - if (f == groups2.end()) - return false; - } - } - - - for (const auto& value_pair : st1) { - const std::string& key = value_pair.first; - double value = value_pair.second; - if (value != st2.get(key)) - return false; - } - - return st1.get_elapsed() == st2.get_elapsed(); -} - - -void test_serialize(const SummaryState& st) { - SummaryState st2(std::chrono::system_clock::now()); - auto serial = st.serialize(); - st2.deserialize(serial); - BOOST_CHECK( equal(st, st2)); - - st2.update_elapsed(1234567.09); - st2.update("FOPT", 200); - st2.deserialize(serial); - BOOST_CHECK( equal(st, st2)); -} -} // Anonymous namespace - -BOOST_AUTO_TEST_CASE(serialize_sumary_state) { - SummaryState st(std::chrono::system_clock::now()); - test_serialize(st); - - st.update_elapsed(1000); - test_serialize(st); - - st.update("FOPT", 100); - test_serialize(st); - - st.update("FGPT", 100); - test_serialize(st); - - st.update_well_var("OP_1", "WOPR", 1000); - test_serialize(st); - - st.update_well_var("OP_2", "WGOR", 0.67); - test_serialize(st); - - st.update_group_var("G1", "GOPR", 1000); - test_serialize(st); - - st.update_group_var("G2", "GGOR", 0.67); - test_serialize(st); - -} - - -BOOST_AUTO_TEST_CASE(SummaryState__TIME) { - struct tm ts; - ts.tm_year = 100; - ts.tm_mon = 1; - ts.tm_mday = 1; - ts.tm_hour = 0; - ts.tm_min = 0; - ts.tm_sec = 0; - auto start_time = timegm(&ts); - SummaryState st(std::chrono::system_clock::from_time_t(start_time)); - BOOST_CHECK_EQUAL(st.get("YEAR"), 2000); - BOOST_CHECK_EQUAL(st.get("DAY"), 1); - BOOST_CHECK_EQUAL(st.get("MNTH"), 1); - - // Next day - st.update_elapsed(100000); - BOOST_CHECK_EQUAL(st.get("YEAR"), 2000); - BOOST_CHECK_EQUAL(st.get("DAY"), 2); - BOOST_CHECK_EQUAL(st.get("MNTH"), 1); - - // Well into 2001 - st.update_elapsed(400 * 86400); - BOOST_CHECK_EQUAL(st.get("YEAR"), 2001); -} - -BOOST_AUTO_TEST_SUITE_END() diff --git a/ThirdParty/custom-opm-common/opm-common/tests/test_SummaryNode.cpp b/ThirdParty/custom-opm-common/opm-common/tests/test_SummaryNode.cpp deleted file mode 100644 index 1ea499ed6a..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/test_SummaryNode.cpp +++ /dev/null @@ -1,76 +0,0 @@ -/* - Copyright 2019 Equinor - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#define BOOST_TEST_MODULE SummaryNode - -#include - -#include - -namespace { - void expect_key(const Opm::EclIO::SummaryNode& node, const std::string& unique_key) { - BOOST_CHECK_EQUAL(node.unique_key(), unique_key); - } -} - -BOOST_AUTO_TEST_SUITE(UniqueKey) - -BOOST_AUTO_TEST_CASE(UniqueKey) { - using Category = Opm::EclIO::SummaryNode::Category; - using Type = Opm::EclIO::SummaryNode::Type; - - expect_key( { "KEYW", Category::Well, Type::Rate, "NORA", 1 }, "KEYW:NORA" ); - expect_key( { "KEYW", Category::Group, Type::Rate, "NORA", 2 }, "KEYW:NORA" ); - expect_key( { "KEYW", Category::Field, Type::Rate, "NORA", 3 }, "KEYW" ); - expect_key( { "KEYW", Category::Region, Type::Rate, "NORA", 4 }, "KEYW:4" ); - expect_key( { "KEYW", Category::Block, Type::Rate, "NORA", 5 }, "KEYW:5" ); - expect_key( { "KEYW", Category::Connection, Type::Rate, "NORA", 6 }, "KEYW:NORA:6" ); - expect_key( { "KEYW", Category::Segment, Type::Rate, "NORA", 7 }, "KEYW:NORA:7" ); - expect_key( { "KEYW", Category::Miscellaneous, Type::Rate, "NORA", 8 }, "KEYW" ); -} - -BOOST_AUTO_TEST_CASE(InjectedNumberRenderer) { - using Category = Opm::EclIO::SummaryNode::Category; - using Type = Opm::EclIO::SummaryNode::Type; - - Opm::EclIO::SummaryNode positiveNode { - "SIGN", - Category::Region, - Type::Undefined, - "-", - 2 - }; - - Opm::EclIO::SummaryNode negativeNode { - "SIGN", - Category::Region, - Type::Undefined, - "-", - -2 - }; - - auto chooseSign = [](const Opm::EclIO::SummaryNode& node) -> std::string { - return node.number > 0 ? "+" : "-"; - }; - - BOOST_CHECK_EQUAL(positiveNode.unique_key(chooseSign), "SIGN:+"); - BOOST_CHECK_EQUAL(negativeNode.unique_key(chooseSign), "SIGN:-"); -} - -BOOST_AUTO_TEST_SUITE_END() // UniqueKey diff --git a/ThirdParty/custom-opm-common/opm-common/tests/test_Summary_Group.cpp b/ThirdParty/custom-opm-common/opm-common/tests/test_Summary_Group.cpp deleted file mode 100644 index 0b85b8ec51..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/test_Summary_Group.cpp +++ /dev/null @@ -1,282 +0,0 @@ -/* - Copyright 2016 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include "config.h" - -#define BOOST_TEST_MODULE Wells -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -#include - -#include - -using namespace Opm; -using rt = data::Rates::opt; - -namespace { - double sm3_pr_day() - { - return unit::cubic(unit::meter) / unit::day; - } - - std::string toupper(std::string input) - { - for (auto& c : input) { - const auto uc = std::toupper(static_cast(c)); - c = static_cast(uc); - } - - return input; - } - - bool ecl_sum_has_group_var( const EclIO::ESmry* smry, - const std::string& groupname, - const std::string& variable ) - { - return smry->hasKey(variable + ':' + groupname); - } - - double ecl_sum_get_group_var( const EclIO::ESmry* smry, - const int timeIdx, - const std::string& groupname, - const std::string& variable ) - { - return smry->get(variable + ':' + groupname)[timeIdx]; - } - -} // Anonymous - - - -namespace { -/* conversion factor for whenever 'day' is the unit of measure, whereas we - * expect input in SI units (seconds) - */ - -std::unique_ptr< EclIO::ESmry > readsum( const std::string& base ) { - return std::make_unique(base); -} - -using p_cmode = Opm::Group::ProductionCMode; -using i_cmode = Opm::Group::InjectionCMode; - -static const int day = 24 * 60 * 60; - -static data::Wells result_wells() { - /* populate with the following pattern: - * - * Wells are named W_1, W_2 etc, i.e. wells are 1 indexed. - * - * rates on a well are populated with 10 * wellidx . type (where type is - * 0-1-2 from owg) - * - * bhp is wellidx.1 - * bhp is wellidx.2 - * - * completions are 100*wellidx . type - */ - - // conversion factor Pascal (simulator output) <-> barsa - const double ps = 100000; - - data::Rates rates1; - rates1.set( rt::wat, -10.0 / day ); - rates1.set( rt::oil, -10.1 / day ); - rates1.set( rt::gas, -10.2 / day ); - rates1.set( rt::solvent, -10.3 / day ); - rates1.set( rt::dissolved_gas, -10.4 / day ); - rates1.set( rt::vaporized_oil, -10.5 / day ); - rates1.set( rt::reservoir_water, -10.6 / day ); - rates1.set( rt::reservoir_oil, -10.7 / day ); - rates1.set( rt::reservoir_gas, -10.8 / day ); - rates1.set( rt::productivity_index_water, -10.9 / day ); - rates1.set( rt::productivity_index_oil, -10.11 / day ); - rates1.set( rt::productivity_index_gas, -10.12 / day ); - rates1.set( rt::well_potential_water, -10.13 / day ); - rates1.set( rt::well_potential_oil, -10.14 / day ); - rates1.set( rt::well_potential_gas, -10.15 / day ); - - /* completion rates */ - data::Rates crates1; - crates1.set( rt::wat, -100.0 / day ); - crates1.set( rt::oil, -100.1 / day ); - crates1.set( rt::gas, -100.2 / day ); - crates1.set( rt::solvent, -100.3 / day ); - crates1.set( rt::dissolved_gas, -100.4 / day ); - crates1.set( rt::vaporized_oil, -100.5 / day ); - crates1.set( rt::reservoir_water, -100.6 / day ); - crates1.set( rt::reservoir_oil, -100.7 / day ); - crates1.set( rt::reservoir_gas, -100.8 / day ); - - // Segment vectors - auto segment = ::Opm::data::Segment{}; - segment.rates.set(rt::wat, 123.45*sm3_pr_day()); - segment.rates.set(rt::oil, 543.21*sm3_pr_day()); - segment.rates.set(rt::gas, 1729.496*sm3_pr_day()); - { - const auto pres_idx = Opm::data::SegmentPressures::Value::Pressure; - segment.pressures[pres_idx] = 314.159*unit::barsa; - } - segment.segNumber = 1; - - /* - The global index assigned to the completion must be manually - syncronized with the global index in the COMPDAT keyword in the - input deck. - */ - data::Connection well1_comp1 { 0 , crates1, 1.9 , 123.4, 314.15, 0.35, 0.25, 2.718e2}; - - /* - The completions - */ - data::Well well1 { - rates1, 0.1 * ps, 0.2 * ps, 0.3 * ps, 1, - { {well1_comp1} }, - { { segment.segNumber, segment } }, - data::CurrentControl{} - }; - well1.current_control.isProducer = true; - well1.current_control.prod = ::Opm::Well::ProducerCMode::BHP; - - data::Wells wellrates; - - wellrates["OPU01"] = well1; - - return wellrates; - -} - -static data::Group result_groups() { - data::Group groups; - data::currentGroupConstraints cgc_group; - - cgc_group.set(p_cmode::NONE, i_cmode::VREP, i_cmode::RATE); - groups.emplace("TEST", cgc_group); - - cgc_group.set(p_cmode::ORAT, i_cmode::RESV, i_cmode::REIN); - groups.emplace("LOWER", cgc_group); - - cgc_group.set(p_cmode::GRAT, i_cmode::REIN, i_cmode::VREP); - groups.emplace("UPPER", cgc_group); - - cgc_group.set(p_cmode::NONE, i_cmode::NONE, i_cmode::NONE); - groups.emplace("FIELD", cgc_group); - - return groups; -} - - -struct setup { - Deck deck; - EclipseState es; - const EclipseGrid& grid; - std::shared_ptr python; - Schedule schedule; - SummaryConfig config; - data::Wells wells; - data::Group groups; - std::string name; - WorkArea ta; - - /*-----------------------------------------------------------------*/ - - setup(std::string fname, const std::string& path = "UDQ_ACTIONX_TEST1_U.DATA") : - deck( Parser().parseFile( path) ), - es( deck ), - grid( es.getInputGrid() ), - python( std::make_shared() ), - schedule( deck, es, python), - config( deck, schedule, es.getTableManager()), - wells( result_wells() ), - groups( result_groups() ), - name( toupper(std::move(fname)) ), - ta( "test_summary_group_constraints" ) - {} - }; -} // Anonymous namespace - -BOOST_AUTO_TEST_SUITE(Summary) -/* - * Tests works by reading the Deck, write the summary output, then immediately - * read it again (with ERT), and compare the read values with the input. - */ -BOOST_AUTO_TEST_CASE(group_keywords) { - setup cfg( "test_summary_group_constraints"); - - // Force to run in a directory, to make sure the basename with - // leading path works. - cfg.ta.makeSubDir( "PATH" ); - cfg.name = "PATH/CASE"; - - SummaryState st(std::chrono::system_clock::now()); - - out::Summary writer( cfg.es, cfg.config, cfg.grid, cfg.schedule , cfg.name ); - writer.eval(st, 0, 0*day, cfg.es, cfg.schedule, cfg.wells, cfg.groups, {}); - writer.add_timestep( st, 0); - - writer.eval(st, 1, 1*day, cfg.es, cfg.schedule, cfg.wells, cfg.groups, {}); - writer.add_timestep( st, 1); - - writer.write(); - - auto res = readsum( cfg.name ); - const auto* resp = res.get(); - - //BOOST_CHECK( ecl_sum_has_report_step( resp, 1 ) ); - BOOST_CHECK( ecl_sum_has_group_var( resp, "TEST", "GMCTP" ) ); - - - // Integer flag indicating current active group control - BOOST_CHECK_EQUAL( static_cast(ecl_sum_get_group_var( resp, 1, "TEST", "GMCTP" )), 0 ); - BOOST_CHECK_EQUAL( static_cast(ecl_sum_get_group_var( resp, 1, "LOWER", "GMCTW" )), 3 ); - BOOST_CHECK_EQUAL( static_cast(ecl_sum_get_group_var( resp, 1, "LOWER", "GMCTP" )), 1 ); - - BOOST_CHECK_EQUAL( static_cast(ecl_sum_get_group_var( resp, 1, "UPPER", "GMCTP" )), 3 ); - BOOST_CHECK_EQUAL( static_cast(ecl_sum_get_group_var( resp, 1, "UPPER", "GMCTW" )), 4 ); - BOOST_CHECK_EQUAL( static_cast(ecl_sum_get_group_var( resp, 1, "UPPER", "GMCTG" )), 3 ); - - -} - -BOOST_AUTO_TEST_SUITE_END() diff --git a/ThirdParty/custom-opm-common/opm-common/tests/test_Tables.cpp b/ThirdParty/custom-opm-common/opm-common/tests/test_Tables.cpp deleted file mode 100644 index 0e0d705cec..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/test_Tables.cpp +++ /dev/null @@ -1,3198 +0,0 @@ -/* - Copyright 2019 Equinor. - Copyright 2016 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include "config.h" - -#define BOOST_TEST_MODULE Tabular_INIT_Output -#include - -#include - -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include - -#include - -using Ix = ::Opm::RestartIO::Helpers::VectorItems::TabDims::index; - -namespace { - template - void check_is_close(const Collection1& c1, const Collection2& c2) - { - BOOST_REQUIRE_EQUAL(c1.size(), c2.size()); - - if (! c1.empty()) { - auto i1 = c1.begin(), e1 = c1.end(); - auto i2 = c2.begin(); - - for (; i1 != e1; ++i1, ++i2) { - BOOST_CHECK_CLOSE(*i1, *i2, 1.0e-10); - } - } - } - - std::vector - makeTable(const std::size_t ncol, - std::initializer_list data) - { - auto result = std::vector(data.size(), 0.0); - const auto nrows = data.size() / ncol; - - auto di = std::begin(data); - for (auto i = 0*nrows; i < nrows; ++i) { - for (auto j = 0*ncol; j < ncol; ++j, ++di) { - result[i + j*nrows] = *di; - } - } - - return result; - } - - namespace SPE1 { // Family II (SGFN, SOF{2,3}, SWFN) - namespace TwoPhase { - namespace GasOil { - Opm::EclipseState satfuncTables() - { - const auto* input = R"( -RUNSPEC -OIL -GAS - -METRIC - -DIMENS - 1 1 1 / - -TABDIMS -/ - --- ======================================= -GRID - -DXV - 1 / - -DYV - 1 / - -DZV - 0.1 / - -DEPTHZ - 4*2000.0 / - -PERMX - 100.0 / - -COPY - 'PERMX' 'PERMY' / - 'PERMX' 'PERMZ' / -/ - -MULTIPLY - 'PERMZ' 0.1 / -/ - -PORO - 0.3 / - --- ======================================= -PROPS - -SGFN --- SPE 1 Table - 0 0 0 - 0.001 0 0 - 0.02 0 0 - 0.05 0.005 0 - 0.12 0.025 0 - 0.2 0.075 0 - 0.25 0.125 0 - 0.3 0.190 0 - 0.4 0.410 0 - 0.45 0.60 0 - 0.5 0.72 0 - 0.6 0.87 0 - 0.7 0.94 0 - 0.85 0.98 0 - 0.88 0.984 0 / - -SOF2 --- SPE 1 Table - 0 0 - 0.03 0 - 0.18 0 - 0.28 0.0001 - 0.38 0.001 - 0.43 0.01 - 0.48 0.021 - 0.58 0.09 - 0.63 0.2 - 0.68 0.35 - 0.76 0.7 - 0.83 0.98 - 0.86 0.997 - 0.879 1 - 0.88 1 / - -DENSITY - 853.0 1014.0 0.75 / - -END -)"; - - const auto deck = Opm::Deck{ - Opm::Parser{}.parseString(input) - }; - - return {deck}; - } - - std::vector expect_SGFN() - { - return makeTable(5, { - 0, 0, 0, 1.000000000000000e+20, 1.0e+20, - 1.00e-03, 0, 0, 0, 0, - 2.00e-02, 0, 0, 0, 0, - 5.00e-02, 5.000000000000000e-03, 0, 1.666666666666667e-01, 0, - 1.20e-01, 2.500000000000000e-02, 0, 2.857142857142858e-01, 0, - 2.00e-01, 7.500000000000000e-02, 0, 6.249999999999998e-01, 0, - 2.50e-01, 1.250000000000000e-01, 0, 1.000000000000000e+00, 0, - 3.00e-01, 1.900000000000000e-01, 0, 1.300000000000000e+00, 0, - 4.00e-01, 4.100000000000000e-01, 0, 2.199999999999999e+00, 0, - 4.50e-01, 6.000000000000000e-01, 0, 3.800000000000001e+00, 0, - 5.00e-01, 7.200000000000000e-01, 0, 2.400000000000000e+00, 0, - 6.00e-01, 8.700000000000000e-01, 0, 1.500000000000001e+00, 0, - 7.00e-01, 9.399999999999999e-01, 0, 6.999999999999996e-01, 0, - 8.50e-01, 9.800000000000000e-01, 0, 2.666666666666669e-01, 0, - 8.80e-01, 9.840000000000000e-01, 0, 1.333333333333333e-01, 0, - 1.00e+20, 1.000000000000000e+20, 1.0e+20, 1.000000000000000e+20, 1.0e+20, - 1.00e+20, 1.000000000000000e+20, 1.0e+20, 1.000000000000000e+20, 1.0e+20, - 1.00e+20, 1.000000000000000e+20, 1.0e+20, 1.000000000000000e+20, 1.0e+20, - 1.00e+20, 1.000000000000000e+20, 1.0e+20, 1.000000000000000e+20, 1.0e+20, - 1.00e+20, 1.000000000000000e+20, 1.0e+20, 1.000000000000000e+20, 1.0e+20, - }); - } - - std::vector expect_SOFN() - { - return makeTable(3, { - 0, 0, 1.000000000000000e+20, - 3.00e-02, 0, 0, - 1.80e-01, 0, 0, - 2.80e-01, 1.00e-04, 9.999999999999998e-04, - 3.80e-01, 1.00e-03, 9.000000000000001e-03, - 4.30e-01, 1.00e-02, 1.800000000000000e-01, - 4.80e-01, 2.10e-02, 2.200000000000001e-01, - 5.80e-01, 9.00e-02, 6.900000000000001e-01, - 6.30e-01, 2.00e-01, 2.199999999999998e+00, - 6.80e-01, 3.50e-01, 2.999999999999997e+00, - 7.60e-01, 7.00e-01, 4.375000000000002e+00, - 8.30e-01, 9.80e-01, 4.000000000000004e+00, - 8.60e-01, 9.97e-01, 5.666666666666667e-01, - 8.79e-01, 1.00e+00, 1.578947368421053e-01, - 8.80e-01, 1.00e+00, 0, - 1.00e+20, 1.00e+20, 1.000000000000000e+20, - 1.00e+20, 1.00e+20, 1.000000000000000e+20, - 1.00e+20, 1.00e+20, 1.000000000000000e+20, - 1.00e+20, 1.00e+20, 1.000000000000000e+20, - 1.00e+20, 1.00e+20, 1.000000000000000e+20, - }); - } - } // GasOil - - namespace OilWater { - Opm::EclipseState satfuncTables() - { - const auto* input = R"( -RUNSPEC -WATER -OIL - -METRIC - -DIMENS - 1 1 1 / - -TABDIMS -/ - --- ======================================= -GRID - -DXV - 1 / - -DYV - 1 / - -DZV - 0.1 / - -DEPTHZ - 4*2000.0 / - -PERMX - 100.0 / - -COPY - 'PERMX' 'PERMY' / - 'PERMX' 'PERMZ' / -/ - -MULTIPLY - 'PERMZ' 0.1 / -/ - -PORO - 0.3 / - --- ======================================= -PROPS - -SWFN --- SPE 1 Table - 0.12 0 0 - 0.18 4.64876033057851E-008 0 - 0.24 0.000000186 0 - 0.3 4.18388429752066E-007 0 - 0.36 7.43801652892562E-007 0 - 0.42 1.16219008264463E-006 0 - 0.48 1.67355371900826E-006 0 - 0.54 2.27789256198347E-006 0 - 0.6 2.97520661157025E-006 0 - 0.66 3.7654958677686E-006 0 - 0.72 4.64876033057851E-006 0 - 0.78 0.000005625 0 - 0.84 6.69421487603306E-006 0 - 0.91 8.05914256198347E-006 0 - 1 0.00001 0 / - -SOF2 --- SPE 1 Table - 0 0 - 0.03 0 - 0.18 0 - 0.28 0.0001 - 0.38 0.001 - 0.43 0.01 - 0.48 0.021 - 0.58 0.09 - 0.63 0.2 - 0.68 0.35 - 0.76 0.7 - 0.83 0.98 - 0.86 0.997 - 0.879 1 - 0.88 1 - / - -DENSITY - 853.0 1014.0 0.75 / - -END -)"; - - const auto deck = Opm::Deck{ - Opm::Parser{}.parseString(input) - }; - - return {deck}; - } - - std::vector expect_SOFN() - { - return makeTable(3, { - 0, 0, 1.000000000000000e+20, - 3.00e-02, 0, 0, - 1.80e-01, 0, 0, - 2.80e-01, 1.00e-04, 9.999999999999998e-04, - 3.80e-01, 1.00e-03, 9.000000000000001e-03, - 4.30e-01, 1.00e-02, 1.800000000000000e-01, - 4.80e-01, 2.10e-02, 2.200000000000001e-01, - 5.80e-01, 9.00e-02, 6.900000000000001e-01, - 6.30e-01, 2.00e-01, 2.199999999999998e+00, - 6.80e-01, 3.50e-01, 2.999999999999997e+00, - 7.60e-01, 7.00e-01, 4.375000000000002e+00, - 8.30e-01, 9.80e-01, 4.000000000000004e+00, - 8.60e-01, 9.97e-01, 5.666666666666667e-01, - 8.79e-01, 1.00e+00, 1.578947368421053e-01, - 8.80e-01, 1.00e+00, 0, - 1.00e+20, 1.00e+20, 1.000000000000000e+20, - 1.00e+20, 1.00e+20, 1.000000000000000e+20, - 1.00e+20, 1.00e+20, 1.000000000000000e+20, - 1.00e+20, 1.00e+20, 1.000000000000000e+20, - 1.00e+20, 1.00e+20, 1.000000000000000e+20, - }); - } - - std::vector expect_SWFN() - { - return makeTable(5, { - 1.20e-01, 0, 0, 1.000000000000000e+20, 1.0e+20, - 1.80e-01, 0, 0, 0, 0, - 2.40e-01, 0, 0, 0, 0, - 3.00e-01, 0, 0, 0, 0, - 3.60e-01, 0, 0, 0, 0, - 4.20e-01, 1.162190082644630e-06, 0, 1.936983471074384e-05, 0, - 4.80e-01, 1.673553719008260e-06, 0, 8.522727272727165e-06, 0, - 5.40e-01, 2.277892561983470e-06, 0, 1.007231404958682e-05, 0, - 6.00e-01, 2.975206611570250e-06, 0, 1.162190082644635e-05, 0, - 6.60e-01, 3.765495867768600e-06, 0, 1.317148760330582e-05, 0, - 7.20e-01, 4.648760330578510e-06, 0, 1.472107438016518e-05, 0, - 7.80e-01, 5.625000000000000e-06, 0, 1.627066115702482e-05, 0, - 8.40e-01, 6.694214876033060e-06, 0, 1.782024793388435e-05, 0, - 9.10e-01, 8.059142561983471e-06, 0, 1.949896694214870e-05, 0, - 1.00e+00, 1.000000000000000e-05, 0, 2.156508264462812e-05, 0, - 1.00e+20, 1.000000000000000e+20, 1.0e+20, 1.000000000000000e+20, 1.0e+20, - 1.00e+20, 1.000000000000000e+20, 1.0e+20, 1.000000000000000e+20, 1.0e+20, - 1.00e+20, 1.000000000000000e+20, 1.0e+20, 1.000000000000000e+20, 1.0e+20, - 1.00e+20, 1.000000000000000e+20, 1.0e+20, 1.000000000000000e+20, 1.0e+20, - 1.00e+20, 1.000000000000000e+20, 1.0e+20, 1.000000000000000e+20, 1.0e+20, - }); - } - } // OilWater - } // TwoPhase - - namespace ThreePhase { - Opm::EclipseState satfuncTables() - { - const auto* input = R"( -RUNSPEC -WATER -OIL -GAS - -METRIC - -DIMENS - 1 1 1 / - -TABDIMS -/ - --- ======================================= -GRID - -DXV - 1 / - -DYV - 1 / - -DZV - 0.1 / - -DEPTHZ - 4*2000.0 / - -PERMX - 100.0 / - -COPY - 'PERMX' 'PERMY' / - 'PERMX' 'PERMZ' / -/ - -MULTIPLY - 'PERMZ' 0.1 / -/ - -PORO - 0.3 / - --- ======================================= -PROPS - -SWFN --- SPE 1 Table - 0.12 0 0 - 0.18 4.64876033057851E-008 0 - 0.24 0.000000186 0 - 0.3 4.18388429752066E-007 0 - 0.36 7.43801652892562E-007 0 - 0.42 1.16219008264463E-006 0 - 0.48 1.67355371900826E-006 0 - 0.54 2.27789256198347E-006 0 - 0.6 2.97520661157025E-006 0 - 0.66 3.7654958677686E-006 0 - 0.72 4.64876033057851E-006 0 - 0.78 0.000005625 0 - 0.84 6.69421487603306E-006 0 - 0.91 8.05914256198347E-006 0 - 1 0.00001 0 / - -SGFN --- SPE 1 Table - 0 0 0 - 0.001 0 0 - 0.02 0 0 - 0.05 0.005 0 - 0.12 0.025 0 - 0.2 0.075 0 - 0.25 0.125 0 - 0.3 0.190 0 - 0.4 0.410 0 - 0.45 0.60 0 - 0.5 0.72 0 - 0.6 0.87 0 - 0.7 0.94 0 - 0.85 0.98 0 - 0.88 0.984 0 / - -SOF3 --- SPE 1 Table - 0 0 0 - 0.03 0 0 - 0.18 0 0 - 0.28 0.0001 0.0001 - 0.38 0.001 0.001 - 0.43 0.01 0.01 - 0.48 0.021 0.021 - 0.58 0.09 0.09 - 0.63 0.2 0.2 - 0.68 0.35 0.35 - 0.76 0.7 0.7 - 0.83 0.98 0.98 - 0.86 0.997 0.997 - 0.879 1 1 - 0.88 1 1 / - -DENSITY - 853.0 1014.0 0.75 / - -END -)"; - - const auto deck = Opm::Deck{ - Opm::Parser{}.parseString(input) - }; - - return {deck}; - } - - std::vector expect_SGFN() - { - return makeTable(5, { - 0, 0, 0, 1.000000000000000e+20, 1.0e+20, - 1.00e-03, 0, 0, 0, 0, - 2.00e-02, 0, 0, 0, 0, - 5.00e-02, 5.000000000000000e-03, 0, 1.666666666666667e-01, 0, - 1.20e-01, 2.500000000000000e-02, 0, 2.857142857142858e-01, 0, - 2.00e-01, 7.500000000000000e-02, 0, 6.249999999999998e-01, 0, - 2.50e-01, 1.250000000000000e-01, 0, 1.000000000000000e+00, 0, - 3.00e-01, 1.900000000000000e-01, 0, 1.300000000000000e+00, 0, - 4.00e-01, 4.100000000000000e-01, 0, 2.199999999999999e+00, 0, - 4.50e-01, 6.000000000000000e-01, 0, 3.800000000000001e+00, 0, - 5.00e-01, 7.200000000000000e-01, 0, 2.400000000000000e+00, 0, - 6.00e-01, 8.700000000000000e-01, 0, 1.500000000000001e+00, 0, - 7.00e-01, 9.399999999999999e-01, 0, 6.999999999999996e-01, 0, - 8.50e-01, 9.800000000000000e-01, 0, 2.666666666666669e-01, 0, - 8.80e-01, 9.840000000000000e-01, 0, 1.333333333333333e-01, 0, - 1.00e+20, 1.000000000000000e+20, 1.0e+20, 1.000000000000000e+20, 1.0e+20, - 1.00e+20, 1.000000000000000e+20, 1.0e+20, 1.000000000000000e+20, 1.0e+20, - 1.00e+20, 1.000000000000000e+20, 1.0e+20, 1.000000000000000e+20, 1.0e+20, - 1.00e+20, 1.000000000000000e+20, 1.0e+20, 1.000000000000000e+20, 1.0e+20, - 1.00e+20, 1.000000000000000e+20, 1.0e+20, 1.000000000000000e+20, 1.0e+20, - }); - } - - std::vector expect_SOFN() - { - return makeTable(5, { - 0, 0, 0, 1.000000000000000e+20, 1.000000000000000e+20, - 3.00e-02, 0, 0, 0, 0, - 1.80e-01, 0, 0, 0, 0, - 2.80e-01, 1.00e-04, 1.00e-04, 9.999999999999998e-04, 9.999999999999998e-04, - 3.80e-01, 1.00e-03, 1.00e-03, 9.000000000000001e-03, 9.000000000000001e-03, - 4.30e-01, 1.00e-02, 1.00e-02, 1.800000000000000e-01, 1.800000000000000e-01, - 4.80e-01, 2.10e-02, 2.10e-02, 2.200000000000001e-01, 2.200000000000001e-01, - 5.80e-01, 9.00e-02, 9.00e-02, 6.900000000000001e-01, 6.900000000000001e-01, - 6.30e-01, 2.00e-01, 2.00e-01, 2.199999999999998e+00, 2.199999999999998e+00, - 6.80e-01, 3.50e-01, 3.50e-01, 2.999999999999997e+00, 2.999999999999997e+00, - 7.60e-01, 7.00e-01, 7.00e-01, 4.375000000000002e+00, 4.375000000000002e+00, - 8.30e-01, 9.80e-01, 9.80e-01, 4.000000000000004e+00, 4.000000000000004e+00, - 8.60e-01, 9.97e-01, 9.97e-01, 5.666666666666667e-01, 5.666666666666667e-01, - 8.79e-01, 1.00e+00, 1.00e+00, 1.578947368421053e-01, 1.578947368421053e-01, - 8.80e-01, 1.00e+00, 1.00e+00, 0, 0, - 1.00e+20, 1.00e+20, 1.00e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.00e+20, 1.00e+20, 1.00e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.00e+20, 1.00e+20, 1.00e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.00e+20, 1.00e+20, 1.00e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.00e+20, 1.00e+20, 1.00e+20, 1.000000000000000e+20, 1.000000000000000e+20, - }); - } - - std::vector expect_SWFN() - { - return makeTable(5, { - 1.20e-01, 0, 0, 1.000000000000000e+20, 1.0e+20, - 1.80e-01, 0, 0, 0, 0, - 2.40e-01, 0, 0, 0, 0, - 3.00e-01, 0, 0, 0, 0, - 3.60e-01, 0, 0, 0, 0, - 4.20e-01, 1.162190082644630e-06, 0, 1.936983471074384e-05, 0, - 4.80e-01, 1.673553719008260e-06, 0, 8.522727272727165e-06, 0, - 5.40e-01, 2.277892561983470e-06, 0, 1.007231404958682e-05, 0, - 6.00e-01, 2.975206611570250e-06, 0, 1.162190082644635e-05, 0, - 6.60e-01, 3.765495867768600e-06, 0, 1.317148760330582e-05, 0, - 7.20e-01, 4.648760330578510e-06, 0, 1.472107438016518e-05, 0, - 7.80e-01, 5.625000000000000e-06, 0, 1.627066115702482e-05, 0, - 8.40e-01, 6.694214876033060e-06, 0, 1.782024793388435e-05, 0, - 9.10e-01, 8.059142561983471e-06, 0, 1.949896694214870e-05, 0, - 1.00e+00, 1.000000000000000e-05, 0, 2.156508264462812e-05, 0, - 1.00e+20, 1.000000000000000e+20, 1.0e+20, 1.000000000000000e+20, 1.0e+20, - 1.00e+20, 1.000000000000000e+20, 1.0e+20, 1.000000000000000e+20, 1.0e+20, - 1.00e+20, 1.000000000000000e+20, 1.0e+20, 1.000000000000000e+20, 1.0e+20, - 1.00e+20, 1.000000000000000e+20, 1.0e+20, 1.000000000000000e+20, 1.0e+20, - 1.00e+20, 1.000000000000000e+20, 1.0e+20, 1.000000000000000e+20, 1.0e+20, - }); - } - } // ThreePhase - } // SPE1 - - namespace SPE9 { // Family One (SGOF and SWOF) - namespace TwoPhase { - namespace GasOil { - Opm::EclipseState satfuncTables() - { - const auto* input = R"( -RUNSPEC -OIL -GAS - -METRIC - -DIMENS - 1 1 1 / - -TABDIMS - 1 1 30 20 1 20 / - --- ======================================= -GRID - -DXV - 1 / - -DYV - 1 / - -DZV - 0.1 / - -DEPTHZ - 4*2000.0 / - -PERMX - 100.0 / - -COPY - 'PERMX' 'PERMY' / - 'PERMX' 'PERMZ' / -/ - -MULTIPLY - 'PERMZ' 0.1 / -/ - -PORO - 0.3 / - --- ======================================= -PROPS - -SGOF --- SPE 9 Table - 0 0 1.000000000000000e+00 0 - 4.000000000000000e-02 0 6.000000000000000e-01 1.378951458633672e-02 - 1.000000000000000e-01 2.200000000000000e-02 3.300000000000000e-01 3.447378646584180e-02 - 2.000000000000000e-01 1.000000000000000e-01 1.000000000000000e-01 6.894757293168360e-02 - 3.000000000000000e-01 2.400000000000000e-01 2.000000000000000e-02 1.034213593975254e-01 - 4.000000000000000e-01 3.400000000000000e-01 0 1.378951458633672e-01 - 5.000000000000000e-01 4.200000000000000e-01 0 1.723689323292090e-01 - 6.000000000000000e-01 5.000000000000000e-01 0 2.068427187950508e-01 - 7.000000000000000e-01 8.125000000000000e-01 0 2.413165052608926e-01 - 8.489100000000001e-01 9.635000000000000e-01 0 2.633797285990314e-01 / - -DENSITY - 853.0 1014.0 0.75 / - -END -)"; - - const auto deck = Opm::Deck{ - Opm::Parser{}.parseString(input) - }; - - return {deck}; - } - - std::vector expect_SGFN() - { - // Columns 1, 2, 4 (+ derivatives) of SGOF - return makeTable(5, { - 0, 0, 0, 1.000000000000000e+20, 1.000000000000000e+20, - 4.0000e-02, 0, 1.378951458633672e-02, 0, 3.447378646584180e-01, - 1.0000e-01, 2.200e-02, 3.447378646584180e-02, 3.666666666666666e-01, 3.447378646584180e-01, - 2.0000e-01, 1.000e-01, 6.894757293168360e-02, 7.800000000000001e-01, 3.447378646584180e-01, - 3.0000e-01, 2.400e-01, 1.034213593975254e-01, 1.400000000000000e+00, 3.447378646584180e-01, - 4.0000e-01, 3.400e-01, 1.378951458633672e-01, 1.000000000000000e+00, 3.447378646584179e-01, - 5.0000e-01, 4.200e-01, 1.723689323292090e-01, 7.999999999999998e-01, 3.447378646584180e-01, - 6.0000e-01, 5.000e-01, 2.068427187950508e-01, 8.000000000000004e-01, 3.447378646584180e-01, - 7.0000e-01, 8.125e-01, 2.413165052608926e-01, 3.125000000000001e+00, 3.447378646584180e-01, - 8.4891e-01, 9.635e-01, 2.633797285990314e-01, 1.014035323349674e+00, 1.481648199458648e-01, - 1.0000e+20, 1.000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.0000e+20, 1.000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.0000e+20, 1.000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.0000e+20, 1.000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.0000e+20, 1.000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.0000e+20, 1.000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.0000e+20, 1.000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.0000e+20, 1.000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.0000e+20, 1.000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.0000e+20, 1.000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.0000e+20, 1.000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.0000e+20, 1.000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.0000e+20, 1.000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.0000e+20, 1.000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.0000e+20, 1.000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.0000e+20, 1.000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.0000e+20, 1.000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.0000e+20, 1.000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.0000e+20, 1.000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.0000e+20, 1.000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - }); - } - - std::vector expect_SOFN() - { - // Columns 1 and 3 from SGOF (using So = 1 - Sg in 2p - // system) + derivatives - return makeTable(3, { - 1.510899999999999e-01, 0, 1.000000000000000e+20, - 3.000000000000000e-01, 0, 0, - 4.000000000000000e-01, 0, 0, - 5.000000000000000e-01, 0, 0, - 6.000000000000000e-01, 0, 0, - 7.000000000000000e-01, 2.0e-02, 2.000000000000000e-01, - 8.000000000000000e-01, 1.0e-01, 7.999999999999993e-01, - 9.000000000000000e-01, 3.3e-01, 2.300000000000001e+00, - 9.600000000000000e-01, 6.0e-01, 4.500000000000004e+00, - 1.000000000000000e+00, 1.0e+00, 9.999999999999991e+00, - 1.000000000000000e+20, 1.0e+20, 1.000000000000000e+20, - 1.000000000000000e+20, 1.0e+20, 1.000000000000000e+20, - 1.000000000000000e+20, 1.0e+20, 1.000000000000000e+20, - 1.000000000000000e+20, 1.0e+20, 1.000000000000000e+20, - 1.000000000000000e+20, 1.0e+20, 1.000000000000000e+20, - 1.000000000000000e+20, 1.0e+20, 1.000000000000000e+20, - 1.000000000000000e+20, 1.0e+20, 1.000000000000000e+20, - 1.000000000000000e+20, 1.0e+20, 1.000000000000000e+20, - 1.000000000000000e+20, 1.0e+20, 1.000000000000000e+20, - 1.000000000000000e+20, 1.0e+20, 1.000000000000000e+20, - 1.000000000000000e+20, 1.0e+20, 1.000000000000000e+20, - 1.000000000000000e+20, 1.0e+20, 1.000000000000000e+20, - 1.000000000000000e+20, 1.0e+20, 1.000000000000000e+20, - 1.000000000000000e+20, 1.0e+20, 1.000000000000000e+20, - 1.000000000000000e+20, 1.0e+20, 1.000000000000000e+20, - 1.000000000000000e+20, 1.0e+20, 1.000000000000000e+20, - 1.000000000000000e+20, 1.0e+20, 1.000000000000000e+20, - 1.000000000000000e+20, 1.0e+20, 1.000000000000000e+20, - 1.000000000000000e+20, 1.0e+20, 1.000000000000000e+20, - 1.000000000000000e+20, 1.0e+20, 1.000000000000000e+20, - }); - } - } // GasOil - - namespace OilWater { - Opm::EclipseState satfuncTables() - { - const auto* input = R"( -RUNSPEC -WATER -OIL - -METRIC - -DIMENS - 1 1 1 / - -TABDIMS - 1 1 30 20 1 20 / - --- ======================================= -GRID - -DXV - 1 / - -DYV - 1 / - -DZV - 0.1 / - -DEPTHZ - 4*2000.0 / - -PERMX - 100.0 / - -COPY - 'PERMX' 'PERMY' / - 'PERMX' 'PERMZ' / -/ - -MULTIPLY - 'PERMZ' 0.1 / -/ - -PORO - 0.3 / - --- ======================================= -PROPS - -SWOF --- SPE 9 Table - 1.510900000000000e-01 0 1.000000000000000e+00 2.757902917267344e+01 - 1.512300000000000e-01 0 9.999700000000000e-01 2.476527872133143e+01 - 1.517400000000000e-01 0 9.999300000000000e-01 1.778295801053983e+01 - 1.524600000000000e-01 0 9.999100000000000e-01 1.284562231290197e+01 - 1.564700000000000e-01 0 9.995100000000000e-01 5.450995115978905e+00 - 1.658500000000000e-01 0 9.962900000000000e-01 2.758592392996661e+00 - 1.783500000000000e-01 0 9.915900000000000e-01 1.925705711981923e+00 - 2.033500000000000e-01 1.000000000000000e-05 9.788300000000000e-01 1.406530487806345e+00 - 2.533500000000000e-01 3.000000000000000e-05 9.437300000000000e-01 1.072134759087680e+00 - 3.500000000000000e-01 2.800000000000000e-04 8.302300000000000e-01 8.035839625187723e-01 - 3.520000000000000e-01 2.292000000000000e-03 8.042770000000000e-01 6.012228359642811e-01 - 3.540000000000000e-01 4.304000000000000e-03 7.783260000000000e-01 4.100312162247224e-01 - 3.560000000000000e-01 6.316000000000000e-03 7.523740000000000e-01 2.286990994143945e-01 - 3.580000000000000e-01 8.328000000000000e-03 7.264220000000000e-01 8.032392246541140e-02 - 3.600000000000000e-01 1.034000000000000e-02 7.004700000000000e-01 3.192272626736951e-02 - 3.643950000000000e-01 1.554800000000000e-02 6.422580000000000e-01 -3.440483889291011e-02 - 3.687900000000000e-01 2.075600000000000e-02 5.840460000000000e-01 -7.853128556918762e-02 - 3.700000000000000e-01 2.219000000000000e-02 5.680200000000000e-01 -8.232340208043021e-02 - 3.800000000000000e-01 3.589000000000000e-02 4.349800000000000e-01 -1.066618953253145e-01 - 4.000000000000000e-01 6.952999999999999e-02 1.714300000000000e-01 -1.105919069824205e-01 - 4.334500000000000e-01 8.790000000000001e-02 1.253100000000000e-01 -1.179003497131789e-01 - 4.613900000000000e-01 1.049100000000000e-01 9.497999999999999e-02 -1.227266798183968e-01 - 4.893200000000000e-01 1.232900000000000e-01 7.053000000000000e-02 -1.282424856529315e-01 - 5.172500000000000e-01 1.430300000000000e-01 5.113000000000000e-02 -1.330688157581493e-01 - 5.731200000000000e-01 1.865900000000000e-01 2.464000000000000e-02 -1.427214759685850e-01 - 6.010600000000000e-01 2.103800000000000e-01 1.619000000000000e-02 -1.468583303444861e-01 - 6.569300000000000e-01 2.619000000000000e-01 5.940000000000000e-03 -1.558215148256049e-01 - 7.128000000000000e-01 3.186500000000000e-01 1.590000000000000e-03 -1.640952235774069e-01 - 8.111100000000000e-01 4.309200000000000e-01 2.000000000000000e-05 -1.792636896223773e-01 - 8.814900000000000e-01 4.900000000000000e-01 0 -1.896058255621299e-01 / - -DENSITY - 853.0 1014.0 0.75 / - -END -)"; - - const auto deck = Opm::Deck{ - Opm::Parser{}.parseString(input) - }; - - return {deck}; - } - - std::vector expect_SOFN() - { - return makeTable(3, { - 1.185100000000000e-01, 0, 1.000000000000000e+20, - 1.888900000000000e-01, 2.000000000000000e-05, 2.841716396703610e-04, - 2.872000000000000e-01, 1.590000000000000e-03, 1.596989116061438e-02, - 3.430700000000000e-01, 5.940000000000000e-03, 7.785931626991233e-02, - 3.989400000000000e-01, 1.619000000000000e-02, 1.834616073026670e-01, - 4.268800000000000e-01, 2.464000000000000e-02, 3.024337866857543e-01, - 4.827500000000000e-01, 5.113000000000000e-02, 4.741363880436731e-01, - 5.106800000000000e-01, 7.053000000000000e-02, 6.945936269244535e-01, - 5.386100000000000e-01, 9.497999999999999e-02, 8.754027926960254e-01, - 5.665500000000000e-01, 1.253100000000000e-01, 1.085540443808162e+00, - 6.000000000000000e-01, 1.714300000000000e-01, 1.378774289985053e+00, - 6.200000000000000e-01, 4.349800000000000e-01, 1.317749999999999e+01, - 6.300000000000000e-01, 5.680200000000000e-01, 1.330399999999999e+01, - 6.312100000000000e-01, 5.840460000000000e-01, 1.324462809917306e+01, - 6.356050000000000e-01, 6.422580000000000e-01, 1.324505119453948e+01, - 6.400000000000000e-01, 7.004700000000000e-01, 1.324505119453914e+01, - 6.420000000000000e-01, 7.264220000000000e-01, 1.297599999999998e+01, - 6.440000000000000e-01, 7.523740000000000e-01, 1.297599999999998e+01, - 6.460000000000000e-01, 7.783260000000000e-01, 1.297599999999998e+01, - 6.480000000000000e-01, 8.042770000000000e-01, 1.297550000000002e+01, - 6.500000000000000e-01, 8.302300000000000e-01, 1.297649999999999e+01, - 7.466500000000000e-01, 9.437300000000000e-01, 1.174340403517847e+00, - 7.966500000000000e-01, 9.788300000000000e-01, 7.020000000000013e-01, - 8.216500000000000e-01, 9.915900000000000e-01, 5.103999999999993e-01, - 8.341499999999999e-01, 9.962900000000000e-01, 3.760000000000043e-01, - 8.435300000000000e-01, 9.995100000000000e-01, 3.432835820895503e-01, - 8.475400000000000e-01, 9.999100000000000e-01, 9.975062344138656e-02, - 8.482600000000000e-01, 9.999300000000000e-01, 2.777777777780348e-02, - 8.487700000000000e-01, 9.999700000000000e-01, 7.843137254909643e-02, - 8.489100000000001e-01, 1.000000000000000e+00, 2.142857142854877e-01, - }); - } - - std::vector expect_SWFN() - { - // Columns 1, 2, 4 (+ derivatives) of SWOF - return makeTable(5, { - 1.51090e-01, 0, 2.757902917267344e+01, 1.000000000000000e+20, 1.000000000000000e+20, - 1.51230e-01, 0, 2.476527872133143e+01, 0, -2.009821750958577e+04, - 1.51740e-01, 0, 1.778295801053983e+01, 0, -1.369082492312075e+04, - 1.52460e-01, 0, 1.284562231290197e+01, 0, -6.857410691163744e+03, - 1.56470e-01, 0, 5.450995115978905e+00, 0, -1.844046682524494e+03, - 1.65850e-01, 0, 2.758592392996661e+00, 0, -2.870365376313702e+02, - 1.78350e-01, 0, 1.925705711981923e+00, 0, -6.663093448117903e+01, - 2.03350e-01, 1.000000000000000e-05, 1.406530487806345e+00, 4.000000000000000e-04, -2.076700896702310e+01, - 2.53350e-01, 3.000000000000000e-05, 1.072134759087680e+00, 4.000000000000000e-04, -6.687914574373308e+00, - 3.50000e-01, 2.800000000000000e-04, 8.035839625187723e-01, 2.586652871184700e-03, -2.778590756015570e+00, - 3.52000e-01, 2.292000000000000e-03, 6.012228359642811e-01, 1.006000000000000e+00, -1.011805632772457e+02, - 3.54000e-01, 4.304000000000000e-03, 4.100312162247224e-01, 1.006000000000000e+00, -9.559580986977932e+01, - 3.56000e-01, 6.316000000000000e-03, 2.286990994143945e-01, 1.006000000000000e+00, -9.066605840516394e+01, - 3.58000e-01, 8.328000000000000e-03, 8.032392246541140e-02, 1.006000000000000e+00, -7.418758847449155e+01, - 3.60000e-01, 1.034000000000000e-02, 3.192272626736951e-02, 1.006000000000000e+00, -2.420059809902094e+01, - 3.64395e-01, 1.554800000000000e-02, -3.440483889291011e-02, 1.184982935153600e+00, -1.509159616843634e+01, - 3.68790e-01, 2.075600000000000e-02, -7.853128556918762e-02, 1.184982935153600e+00, -1.004014713908486e+01, - 3.70000e-01, 2.219000000000000e-02, -8.232340208043021e-02, 1.185123966942200e+00, -3.133980587803838e+00, - 3.80000e-01, 3.589000000000000e-02, -1.066618953253145e-01, 1.370000000000000e+00, -2.433849324488431e+00, - 4.00000e-01, 6.952999999999999e-02, -1.105919069824205e-01, 1.682000000000000e+00, -1.965005828552983e-01, - 4.33450e-01, 8.790000000000001e-02, -1.179003497131789e-01, 5.491778774290000e-01, -2.184885719210279e-01, - 4.61390e-01, 1.049100000000000e-01, -1.227266798183968e-01, 6.088045812455301e-01, -1.727390875167428e-01, - 4.89320e-01, 1.232900000000000e-01, -1.282424856529315e-01, 6.580737558181200e-01, -1.974867824752831e-01, - 5.17250e-01, 1.430300000000000e-01, -1.330688157581493e-01, 7.067669172932300e-01, -1.728009346658736e-01, - 5.73120e-01, 1.865900000000000e-01, -1.427214759685850e-01, 7.796670843028500e-01, -1.727700055563935e-01, - 6.01060e-01, 2.103800000000000e-01, -1.468583303444861e-01, 8.514674302075900e-01, -1.480620750143510e-01, - 6.56930e-01, 2.619000000000000e-01, -1.558215148256049e-01, 9.221406837300899e-01, -1.604292908737955e-01, - 7.12800e-01, 3.186500000000000e-01, -1.640952235774069e-01, 1.015750850187900e+00, -1.480885761911974e-01, - 8.11110e-01, 4.309200000000000e-01, -1.792636896223773e-01, 1.141999796561900e+00, -1.542921986061490e-01, - 8.81490e-01, 4.900000000000000e-01, -1.896058255621299e-01, 8.394430235862500e-01, -1.469470863846619e-01, - }); - } - } // OilWater - } // TwoPhase - - namespace ThreePhase { - Opm::EclipseState satfuncTables() - { - const auto* input = R"( -RUNSPEC -WATER -OIL -GAS - -METRIC - -DIMENS - 1 1 1 / - -TABDIMS - 1 1 30 20 1 20 / - --- ======================================= -GRID - -DXV - 1 / - -DYV - 1 / - -DZV - 0.1 / - -DEPTHZ - 4*2000.0 / - -PERMX - 100.0 / - -COPY - 'PERMX' 'PERMY' / - 'PERMX' 'PERMZ' / -/ - -MULTIPLY - 'PERMZ' 0.1 / -/ - -PORO - 0.3 / - --- ======================================= -PROPS - -SWOF --- SPE 9 Table - 1.510900000000000e-01 0 1.000000000000000e+00 2.757902917267344e+01 - 1.512300000000000e-01 0 9.999700000000000e-01 2.476527872133143e+01 - 1.517400000000000e-01 0 9.999300000000000e-01 1.778295801053983e+01 - 1.524600000000000e-01 0 9.999100000000000e-01 1.284562231290197e+01 - 1.564700000000000e-01 0 9.995100000000000e-01 5.450995115978905e+00 - 1.658500000000000e-01 0 9.962900000000000e-01 2.758592392996661e+00 - 1.783500000000000e-01 0 9.915900000000000e-01 1.925705711981923e+00 - 2.033500000000000e-01 1.000000000000000e-05 9.788300000000000e-01 1.406530487806345e+00 - 2.533500000000000e-01 3.000000000000000e-05 9.437300000000000e-01 1.072134759087680e+00 - 3.500000000000000e-01 2.800000000000000e-04 8.302300000000000e-01 8.035839625187723e-01 - 3.520000000000000e-01 2.292000000000000e-03 8.042770000000000e-01 6.012228359642811e-01 - 3.540000000000000e-01 4.304000000000000e-03 7.783260000000000e-01 4.100312162247224e-01 - 3.560000000000000e-01 6.316000000000000e-03 7.523740000000000e-01 2.286990994143945e-01 - 3.580000000000000e-01 8.328000000000000e-03 7.264220000000000e-01 8.032392246541140e-02 - 3.600000000000000e-01 1.034000000000000e-02 7.004700000000000e-01 3.192272626736951e-02 - 3.643950000000000e-01 1.554800000000000e-02 6.422580000000000e-01 -3.440483889291011e-02 - 3.687900000000000e-01 2.075600000000000e-02 5.840460000000000e-01 -7.853128556918762e-02 - 3.700000000000000e-01 2.219000000000000e-02 5.680200000000000e-01 -8.232340208043021e-02 - 3.800000000000000e-01 3.589000000000000e-02 4.349800000000000e-01 -1.066618953253145e-01 - 4.000000000000000e-01 6.952999999999999e-02 1.714300000000000e-01 -1.105919069824205e-01 - 4.334500000000000e-01 8.790000000000001e-02 1.253100000000000e-01 -1.179003497131789e-01 - 4.613900000000000e-01 1.049100000000000e-01 9.497999999999999e-02 -1.227266798183968e-01 - 4.893200000000000e-01 1.232900000000000e-01 7.053000000000000e-02 -1.282424856529315e-01 - 5.172500000000000e-01 1.430300000000000e-01 5.113000000000000e-02 -1.330688157581493e-01 - 5.731200000000000e-01 1.865900000000000e-01 2.464000000000000e-02 -1.427214759685850e-01 - 6.010600000000000e-01 2.103800000000000e-01 1.619000000000000e-02 -1.468583303444861e-01 - 6.569300000000000e-01 2.619000000000000e-01 5.940000000000000e-03 -1.558215148256049e-01 - 7.128000000000000e-01 3.186500000000000e-01 1.590000000000000e-03 -1.640952235774069e-01 - 8.111100000000000e-01 4.309200000000000e-01 2.000000000000000e-05 -1.792636896223773e-01 - 8.814900000000000e-01 4.900000000000000e-01 0 -1.896058255621299e-01 / - -SGOF --- SPE 9 Table - 0 0 1.000000000000000e+00 0 - 4.000000000000000e-02 0 6.000000000000000e-01 1.378951458633672e-02 - 1.000000000000000e-01 2.200000000000000e-02 3.300000000000000e-01 3.447378646584180e-02 - 2.000000000000000e-01 1.000000000000000e-01 1.000000000000000e-01 6.894757293168360e-02 - 3.000000000000000e-01 2.400000000000000e-01 2.000000000000000e-02 1.034213593975254e-01 - 4.000000000000000e-01 3.400000000000000e-01 0 1.378951458633672e-01 - 5.000000000000000e-01 4.200000000000000e-01 0 1.723689323292090e-01 - 6.000000000000000e-01 5.000000000000000e-01 0 2.068427187950508e-01 - 7.000000000000000e-01 8.125000000000000e-01 0 2.413165052608926e-01 - 8.489100000000001e-01 9.635000000000000e-01 0 2.633797285990314e-01 / - -DENSITY - 853.0 1014.0 0.75 / - -END -)"; - - const auto deck = Opm::Deck{ - Opm::Parser{}.parseString(input) - }; - - return {deck}; - } - - std::vector expect_SGFN() - { - // Columns 1, 2, 4 (+ derivatives) of SGOF - return makeTable(5, { - 0, 0, 0, 1.000000000000000e+20, 1.000000000000000e+20, - 4.0000e-02, 0, 1.378951458633672e-02, 0, 3.447378646584180e-01, - 1.0000e-01, 2.200e-02, 3.447378646584180e-02, 3.666666666666666e-01, 3.447378646584180e-01, - 2.0000e-01, 1.000e-01, 6.894757293168360e-02, 7.800000000000001e-01, 3.447378646584180e-01, - 3.0000e-01, 2.400e-01, 1.034213593975254e-01, 1.400000000000000e+00, 3.447378646584180e-01, - 4.0000e-01, 3.400e-01, 1.378951458633672e-01, 1.000000000000000e+00, 3.447378646584179e-01, - 5.0000e-01, 4.200e-01, 1.723689323292090e-01, 7.999999999999998e-01, 3.447378646584180e-01, - 6.0000e-01, 5.000e-01, 2.068427187950508e-01, 8.000000000000004e-01, 3.447378646584180e-01, - 7.0000e-01, 8.125e-01, 2.413165052608926e-01, 3.125000000000001e+00, 3.447378646584180e-01, - 8.4891e-01, 9.635e-01, 2.633797285990314e-01, 1.014035323349674e+00, 1.481648199458648e-01, - 1.0000e+20, 1.000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.0000e+20, 1.000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.0000e+20, 1.000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.0000e+20, 1.000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.0000e+20, 1.000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.0000e+20, 1.000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.0000e+20, 1.000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.0000e+20, 1.000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.0000e+20, 1.000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.0000e+20, 1.000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.0000e+20, 1.000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.0000e+20, 1.000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.0000e+20, 1.000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.0000e+20, 1.000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.0000e+20, 1.000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.0000e+20, 1.000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.0000e+20, 1.000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.0000e+20, 1.000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.0000e+20, 1.000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.0000e+20, 1.000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - }); - } - - std::vector expect_SOFN() - { - // Column 1 from SGOF merged with column 1 from SWOF, Column 3 from - // SWOF (+ piecewise linear interp), Column 3 from SGOF (+piecewise - // linear interp) + derivatives of those. - return makeTable(5, { - 0, 0, 0, 1.000000000000000e+20, 1.000000000000000e+20, - 1.185100000000000e-01, 0, 0, 0, 0, - 1.489100000000001e-01, 8.638817845978999e-06, 0, 2.841716396703609e-04, 0, - 1.888900000000000e-01, 2.000000000000000e-05, 0, 2.841716396703610e-04, 0, - 2.489100000000001e-01, 9.785128674600764e-04, 0, 1.596989116061438e-02, 0, - 2.872000000000000e-01, 1.590000000000000e-03, 0, 1.596989116061438e-02, 0, - 3.430700000000000e-01, 5.940000000000000e-03, 0, 7.785931626991233e-02, 0, - 3.489100000000001e-01, 7.011415786647587e-03, 0, 1.834616073026669e-01, 0, - 3.989400000000000e-01, 1.619000000000000e-02, 0, 1.834616073026670e-01, 0, - 4.268800000000000e-01, 2.464000000000000e-02, 0, 3.024337866857543e-01, 0, - 4.489100000000000e-01, 3.508522462860211e-02, 0, 4.741363880436730e-01, 0, - 4.827500000000000e-01, 5.113000000000000e-02, 6.767999999999998e-03, 4.741363880436731e-01, 2.000000000000000e-01, - 5.106800000000000e-01, 7.053000000000000e-02, 1.235400000000000e-02, 6.945936269244535e-01, 2.000000000000000e-01, - 5.386100000000000e-01, 9.497999999999999e-02, 1.794000000000000e-02, 8.754027926960254e-01, 2.000000000000001e-01, - 5.489100000000000e-01, 1.061610665712240e-01, 2.000000000000000e-02, 1.085540443808162e+00, 2.000000000000001e-01, - 5.665500000000000e-01, 1.253100000000000e-01, 3.411199999999998e-02, 1.085540443808162e+00, 7.999999999999990e-01, - 6.000000000000000e-01, 1.714300000000000e-01, 6.087199999999994e-02, 1.378774289985053e+00, 7.999999999999994e-01, - 6.200000000000000e-01, 4.349800000000000e-01, 7.687199999999994e-02, 1.317749999999999e+01, 7.999999999999993e-01, - 6.300000000000000e-01, 5.680200000000000e-01, 8.487199999999995e-02, 1.330399999999999e+01, 8.000000000000000e-01, - 6.312100000000000e-01, 5.840460000000000e-01, 8.583999999999999e-02, 1.324462809917306e+01, 8.000000000000023e-01, - 6.356050000000000e-01, 6.422580000000000e-01, 8.935599999999992e-02, 1.324505119453948e+01, 7.999999999999987e-01, - 6.400000000000000e-01, 7.004700000000000e-01, 9.287199999999994e-02, 1.324505119453914e+01, 7.999999999999975e-01, - 6.420000000000000e-01, 7.264220000000000e-01, 9.447199999999994e-02, 1.297599999999998e+01, 8.000000000000014e-01, - 6.440000000000000e-01, 7.523740000000000e-01, 9.607199999999995e-02, 1.297599999999998e+01, 8.000000000000014e-01, - 6.460000000000000e-01, 7.783260000000000e-01, 9.767199999999995e-02, 1.297599999999998e+01, 8.000000000000014e-01, - 6.480000000000000e-01, 8.042770000000000e-01, 9.927199999999994e-02, 1.297550000000002e+01, 7.999999999999945e-01, - 6.489100000000001e-01, 8.160856150000010e-01, 1.000000000000000e-01, 1.297649999999996e+01, 8.000000000000000e-01, - 6.500000000000000e-01, 8.302300000000000e-01, 1.025069999999998e-01, 1.297650000000002e+01, 2.300000000000002e+00, - 7.466500000000000e-01, 9.437300000000000e-01, 3.248019999999999e-01, 1.174340403517847e+00, 2.300000000000000e+00, - 7.489100000000001e-01, 9.453165200000000e-01, 3.300000000000000e-01, 7.020000000000034e-01, 2.300000000000000e+00, - 7.966500000000000e-01, 9.788300000000000e-01, 5.448299999999997e-01, 7.020000000000013e-01, 4.500000000000004e+00, - 8.089100000000000e-01, 9.850875040000000e-01, 6.000000000000000e-01, 5.104000000000000e-01, 4.500000000000004e+00, - 8.216500000000000e-01, 9.915900000000000e-01, 7.273999999999996e-01, 5.103999999999986e-01, 9.999999999999991e+00, - 8.341499999999999e-01, 9.962900000000000e-01, 8.523999999999990e-01, 3.760000000000043e-01, 9.999999999999991e+00, - 8.435300000000000e-01, 9.995100000000000e-01, 9.461999999999995e-01, 3.432835820895503e-01, 9.999999999999988e+00, - 8.475400000000000e-01, 9.999100000000000e-01, 9.862999999999991e-01, 9.975062344138656e-02, 1.000000000000000e+01, - 8.482600000000000e-01, 9.999300000000000e-01, 9.934999999999996e-01, 2.777777777780348e-02, 1.000000000000000e+01, - 8.487700000000000e-01, 9.999700000000000e-01, 9.985999999999997e-01, 7.843137254909643e-02, 1.000000000000000e+01, - 8.489100000000001e-01, 1.000000000000000e+00, 1.000000000000000e+00, 2.142857142854877e-01, 1.000000000000000e+01, - 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, 1.000000000000000e+20, - }); - } - - std::vector expect_SWFN() - { - // Columns 1, 2, 4 (+ derivatives) of SWOF - return makeTable(5, { - 1.51090e-01, 0, 2.757902917267344e+01, 1.000000000000000e+20, 1.000000000000000e+20, - 1.51230e-01, 0, 2.476527872133143e+01, 0, -2.009821750958577e+04, - 1.51740e-01, 0, 1.778295801053983e+01, 0, -1.369082492312075e+04, - 1.52460e-01, 0, 1.284562231290197e+01, 0, -6.857410691163744e+03, - 1.56470e-01, 0, 5.450995115978905e+00, 0, -1.844046682524494e+03, - 1.65850e-01, 0, 2.758592392996661e+00, 0, -2.870365376313702e+02, - 1.78350e-01, 0, 1.925705711981923e+00, 0, -6.663093448117903e+01, - 2.03350e-01, 1.000000000000000e-05, 1.406530487806345e+00, 4.000000000000000e-04, -2.076700896702310e+01, - 2.53350e-01, 3.000000000000000e-05, 1.072134759087680e+00, 4.000000000000000e-04, -6.687914574373308e+00, - 3.50000e-01, 2.800000000000000e-04, 8.035839625187723e-01, 2.586652871184700e-03, -2.778590756015570e+00, - 3.52000e-01, 2.292000000000000e-03, 6.012228359642811e-01, 1.006000000000000e+00, -1.011805632772457e+02, - 3.54000e-01, 4.304000000000000e-03, 4.100312162247224e-01, 1.006000000000000e+00, -9.559580986977932e+01, - 3.56000e-01, 6.316000000000000e-03, 2.286990994143945e-01, 1.006000000000000e+00, -9.066605840516394e+01, - 3.58000e-01, 8.328000000000000e-03, 8.032392246541140e-02, 1.006000000000000e+00, -7.418758847449155e+01, - 3.60000e-01, 1.034000000000000e-02, 3.192272626736951e-02, 1.006000000000000e+00, -2.420059809902094e+01, - 3.64395e-01, 1.554800000000000e-02, -3.440483889291011e-02, 1.184982935153600e+00, -1.509159616843634e+01, - 3.68790e-01, 2.075600000000000e-02, -7.853128556918762e-02, 1.184982935153600e+00, -1.004014713908486e+01, - 3.70000e-01, 2.219000000000000e-02, -8.232340208043021e-02, 1.185123966942200e+00, -3.133980587803838e+00, - 3.80000e-01, 3.589000000000000e-02, -1.066618953253145e-01, 1.370000000000000e+00, -2.433849324488431e+00, - 4.00000e-01, 6.952999999999999e-02, -1.105919069824205e-01, 1.682000000000000e+00, -1.965005828552983e-01, - 4.33450e-01, 8.790000000000001e-02, -1.179003497131789e-01, 5.491778774290000e-01, -2.184885719210279e-01, - 4.61390e-01, 1.049100000000000e-01, -1.227266798183968e-01, 6.088045812455301e-01, -1.727390875167428e-01, - 4.89320e-01, 1.232900000000000e-01, -1.282424856529315e-01, 6.580737558181200e-01, -1.974867824752831e-01, - 5.17250e-01, 1.430300000000000e-01, -1.330688157581493e-01, 7.067669172932300e-01, -1.728009346658736e-01, - 5.73120e-01, 1.865900000000000e-01, -1.427214759685850e-01, 7.796670843028500e-01, -1.727700055563935e-01, - 6.01060e-01, 2.103800000000000e-01, -1.468583303444861e-01, 8.514674302075900e-01, -1.480620750143510e-01, - 6.56930e-01, 2.619000000000000e-01, -1.558215148256049e-01, 9.221406837300899e-01, -1.604292908737955e-01, - 7.12800e-01, 3.186500000000000e-01, -1.640952235774069e-01, 1.015750850187900e+00, -1.480885761911974e-01, - 8.11110e-01, 4.309200000000000e-01, -1.792636896223773e-01, 1.141999796561900e+00, -1.542921986061490e-01, - 8.81490e-01, 4.900000000000000e-01, -1.896058255621299e-01, 8.394430235862500e-01, -1.469470863846619e-01, - }); - } - } // ThreePhase - } // SPE9 -} - -// ##################################################################### - -BOOST_AUTO_TEST_SUITE (Two_Phase) - -BOOST_AUTO_TEST_CASE (Oil_Water_Family_One) -{ - const auto es = SPE9::TwoPhase::OilWater::satfuncTables(); - - auto tables = Opm::Tables{ es.getUnits() }; - tables.addSatFunc(es); - - const auto& tabdims = tables.tabdims(); - const auto& tab = tables.tab(); - - // SOFN - { - const auto ibsofn = tabdims[ Ix::SofnTableStart ] - 1; - const auto nssofn = tabdims[ Ix::SofnNumSatNodes ]; - const auto ntsofn = tabdims[ Ix::SofnNumTables ]; - const auto ncol = 3; - - const auto sofn = std::vector { - &tab[ ibsofn ] + 0, - &tab[ ibsofn ] + ntsofn*nssofn*ncol - }; - - BOOST_CHECK_EQUAL(nssofn, 30); - BOOST_CHECK_EQUAL(ntsofn, 1); - - check_is_close(sofn, SPE9::TwoPhase::OilWater::expect_SOFN()); - } - - // SWFN - { - const auto ibswfn = tabdims[ Ix::SwfnTableStart ] - 1; - const auto nsswfn = tabdims[ Ix::SwfnNumSatNodes ]; - const auto ntswfn = tabdims[ Ix::SwfnNumTables ]; - const auto ncol = 5; - - const auto swfn = std::vector { - &tab[ ibswfn ] + 0, - &tab[ ibswfn ] + ntswfn*nsswfn*ncol - }; - - BOOST_CHECK_EQUAL(nsswfn, 30); - BOOST_CHECK_EQUAL(ntswfn, 1); - - check_is_close(swfn, SPE9::TwoPhase::OilWater::expect_SWFN()); - } -} - -BOOST_AUTO_TEST_CASE (Oil_Water_Family_Two) -{ - const auto es = SPE1::TwoPhase::OilWater::satfuncTables(); - - auto tables = Opm::Tables{ es.getUnits() }; - tables.addSatFunc(es); - - const auto& tabdims = tables.tabdims(); - const auto& tab = tables.tab(); - - // SOFN - { - const auto ibsofn = tabdims[ Ix::SofnTableStart ] - 1; - const auto nssofn = tabdims[ Ix::SofnNumSatNodes ]; - const auto ntsofn = tabdims[ Ix::SofnNumTables ]; - const auto ncol = 3; - - const auto sofn = std::vector { - &tab[ ibsofn ] + 0, - &tab[ ibsofn ] + ntsofn*nssofn*ncol - }; - - BOOST_CHECK_EQUAL(nssofn, 20); - BOOST_CHECK_EQUAL(ntsofn, 1); - - check_is_close(sofn, SPE1::TwoPhase::OilWater::expect_SOFN()); - } - - // SWFN - { - const auto ibswfn = tabdims[ Ix::SwfnTableStart ] - 1; - const auto nsswfn = tabdims[ Ix::SwfnNumSatNodes ]; - const auto ntswfn = tabdims[ Ix::SwfnNumTables ]; - const auto ncol = 5; - - const auto swfn = std::vector { - &tab[ ibswfn ] + 0, - &tab[ ibswfn ] + ntswfn*nsswfn*ncol - }; - - BOOST_CHECK_EQUAL(nsswfn, 20); - BOOST_CHECK_EQUAL(ntswfn, 1); - - check_is_close(swfn, SPE1::TwoPhase::OilWater::expect_SWFN()); - } -} - -BOOST_AUTO_TEST_CASE (Gas_Oil_Familiy_One) -{ - const auto es = SPE9::TwoPhase::GasOil::satfuncTables(); - - auto tables = Opm::Tables{ es.getUnits() }; - tables.addSatFunc(es); - - const auto& tabdims = tables.tabdims(); - const auto& tab = tables.tab(); - - // SGFN - { - const auto ibsgfn = tabdims[ Ix::SgfnTableStart ] - 1; - const auto nssgfn = tabdims[ Ix::SgfnNumSatNodes ]; - const auto ntsgfn = tabdims[ Ix::SgfnNumTables ]; - const auto ncol = 5; - - const auto sgfn = std::vector { - &tab[ ibsgfn ] + 0, - &tab[ ibsgfn ] + ntsgfn*nssgfn*ncol - }; - - BOOST_CHECK_EQUAL(nssgfn, 30); - BOOST_CHECK_EQUAL(ntsgfn, 1); - - check_is_close(sgfn, SPE9::TwoPhase::GasOil::expect_SGFN()); - } - - // SOFN - { - const auto ibsofn = tabdims[ Ix::SofnTableStart ] - 1; - const auto nssofn = tabdims[ Ix::SofnNumSatNodes ]; - const auto ntsofn = tabdims[ Ix::SofnNumTables ]; - const auto ncol = 3; - - const auto sofn = std::vector { - &tab[ ibsofn ] + 0, - &tab[ ibsofn ] + ntsofn*nssofn*ncol - }; - - BOOST_CHECK_EQUAL(nssofn, 30); - BOOST_CHECK_EQUAL(ntsofn, 1); - - check_is_close(sofn, SPE9::TwoPhase::GasOil::expect_SOFN()); - } -} - -BOOST_AUTO_TEST_CASE (Gas_Oil_Familiy_Two) -{ - const auto es = SPE1::TwoPhase::GasOil::satfuncTables(); - - auto tables = Opm::Tables{ es.getUnits() }; - tables.addSatFunc(es); - - const auto& tabdims = tables.tabdims(); - const auto& tab = tables.tab(); - - // SGFN - { - const auto ibsgfn = tabdims[ Ix::SgfnTableStart ] - 1; - const auto nssgfn = tabdims[ Ix::SgfnNumSatNodes ]; - const auto ntsgfn = tabdims[ Ix::SgfnNumTables ]; - const auto ncol = 5; - - const auto sgfn = std::vector { - &tab[ ibsgfn ] + 0, - &tab[ ibsgfn ] + ntsgfn*nssgfn*ncol - }; - - BOOST_CHECK_EQUAL(nssgfn, 20); - BOOST_CHECK_EQUAL(ntsgfn, 1); - - check_is_close(sgfn, SPE1::TwoPhase::GasOil::expect_SGFN()); - } - - // SOFN - { - const auto ibsofn = tabdims[ Ix::SofnTableStart ] - 1; - const auto nssofn = tabdims[ Ix::SofnNumSatNodes ]; - const auto ntsofn = tabdims[ Ix::SofnNumTables ]; - const auto ncol = 3; - - const auto sofn = std::vector { - &tab[ ibsofn ] + 0, - &tab[ ibsofn ] + ntsofn*nssofn*ncol - }; - - BOOST_CHECK_EQUAL(nssofn, 20); - BOOST_CHECK_EQUAL(ntsofn, 1); - - check_is_close(sofn, SPE1::TwoPhase::GasOil::expect_SOFN()); - } -} - -BOOST_AUTO_TEST_SUITE_END () - -// ##################################################################### - -BOOST_AUTO_TEST_SUITE (Three_Phase) - -BOOST_AUTO_TEST_CASE (Serialize_Family_One) -{ - const auto es = SPE9::ThreePhase::satfuncTables(); - - auto tables = Opm::Tables{ es.getUnits() }; - tables.addSatFunc(es); - - const auto& tabdims = tables.tabdims(); - const auto& tab = tables.tab(); - - // SGFN - { - const auto ibsgfn = tabdims[ Ix::SgfnTableStart ] - 1; - const auto nssgfn = tabdims[ Ix::SgfnNumSatNodes ]; - const auto ntsgfn = tabdims[ Ix::SgfnNumTables ]; - const auto ncol = 5; - - const auto sgfn = std::vector { - &tab[ ibsgfn ] + 0, - &tab[ ibsgfn ] + ntsgfn*nssgfn*ncol - }; - - BOOST_CHECK_EQUAL(nssgfn, 30); - BOOST_CHECK_EQUAL(ntsgfn, 1); - - check_is_close(sgfn, SPE9::ThreePhase::expect_SGFN()); - } - - // SOFN - { - const auto ibsofn = tabdims[ Ix::SofnTableStart ] - 1; - const auto nssofn = tabdims[ Ix::SofnNumSatNodes ]; - const auto ntsofn = tabdims[ Ix::SofnNumTables ]; - const auto ncol = 5; - - const auto sofn = std::vector { - &tab[ ibsofn ] + 0, - &tab[ ibsofn ] + ntsofn*nssofn*ncol - }; - - BOOST_CHECK_EQUAL(nssofn, 2 * 30); - BOOST_CHECK_EQUAL(ntsofn, 1); - - check_is_close(sofn, SPE9::ThreePhase::expect_SOFN()); - } - - // SWFN - { - const auto ibswfn = tabdims[ Ix::SwfnTableStart ] - 1; - const auto nsswfn = tabdims[ Ix::SwfnNumSatNodes ]; - const auto ntswfn = tabdims[ Ix::SwfnNumTables ]; - const auto ncol = 5; - - const auto swfn = std::vector { - &tab[ ibswfn ] + 0, - &tab[ ibswfn ] + ntswfn*nsswfn*ncol - }; - - BOOST_CHECK_EQUAL(nsswfn, 30); - BOOST_CHECK_EQUAL(ntswfn, 1); - - check_is_close(swfn, SPE9::ThreePhase::expect_SWFN()); - } -} - -BOOST_AUTO_TEST_CASE (Serialize_Family_Two) -{ - const auto es = SPE1::ThreePhase::satfuncTables(); - - auto tables = Opm::Tables{ es.getUnits() }; - tables.addSatFunc(es); - - const auto& tabdims = tables.tabdims(); - const auto& tab = tables.tab(); - - // SGFN - { - const auto ibsgfn = tabdims[ Ix::SgfnTableStart ] - 1; - const auto nssgfn = tabdims[ Ix::SgfnNumSatNodes ]; - const auto ntsgfn = tabdims[ Ix::SgfnNumTables ]; - const auto ncol = 5; - - const auto sgfn = std::vector { - &tab[ ibsgfn ] + 0, - &tab[ ibsgfn ] + ntsgfn*nssgfn*ncol - }; - - BOOST_CHECK_EQUAL(nssgfn, 20); - BOOST_CHECK_EQUAL(ntsgfn, 1); - - check_is_close(sgfn, SPE1::ThreePhase::expect_SGFN()); - } - - // SOFN - { - const auto ibsofn = tabdims[ Ix::SofnTableStart ] - 1; - const auto nssofn = tabdims[ Ix::SofnNumSatNodes ]; - const auto ntsofn = tabdims[ Ix::SofnNumTables ]; - const auto ncol = 5; - - const auto sofn = std::vector { - &tab[ ibsofn ] + 0, - &tab[ ibsofn ] + ntsofn*nssofn*ncol - }; - - BOOST_CHECK_EQUAL(nssofn, 20); - BOOST_CHECK_EQUAL(ntsofn, 1); - - check_is_close(sofn, SPE1::ThreePhase::expect_SOFN()); - } - - // SWFN - { - const auto ibswfn = tabdims[ Ix::SwfnTableStart ] - 1; - const auto nsswfn = tabdims[ Ix::SwfnNumSatNodes ]; - const auto ntswfn = tabdims[ Ix::SwfnNumTables ]; - const auto ncol = 5; - - const auto swfn = std::vector { - &tab[ ibswfn ] + 0, - &tab[ ibswfn ] + ntswfn*nsswfn*ncol - }; - - BOOST_CHECK_EQUAL(nsswfn, 20); - BOOST_CHECK_EQUAL(ntswfn, 1); - - check_is_close(swfn, SPE1::ThreePhase::expect_SWFN()); - } -} - -BOOST_AUTO_TEST_SUITE_END () - -// ##################################################################### - -BOOST_AUTO_TEST_SUITE (PVTTables) - -namespace { - Opm::EclipseState parse(const std::string& rspec, - const std::string& props) - { - return { - Opm::Parser{}.parseString(rspec + R"(GRID -INIT - -DXV - 10*200 / - -DYV - 10*200 / - -DZV - 10*25 / - -TOPS - 100*2500 / - -PORO - 1000*0.3 / - -PERMX - 1000*100 / - -COPY - 'PERMX' 'PERMY' / - 'PERMX' 'PERMZ' / -/ - -MULTIPLY - 'PERMZ' 0.1 / -/ - -PROPS -)" + props + R"( -END -)") }; - } -} - -BOOST_AUTO_TEST_SUITE (Gas) - -BOOST_AUTO_TEST_CASE (PVDG_Regular) -{ - const auto rspec = std::string { R"(RUNSPEC -DIMENS - 10 10 10 / - -TITLE - Test PVDG Output - -GAS - -FIELD - -TABDIMS --- NTSFUN NTPVT NSSFUN NPPVT NTFIP NRPVT - 1* 2 1* 16 1* 1* -/ -)" }; - - const auto props = std::string { R"( -PVDG - 14.7 166.666 0.0080 - 264.7 12.093 0.0096 - 514.7 6.274 0.0112 -1014.7 3.197 0.0140 -2014.7 1.614 0.0189 -2514.7 1.294 0.0208 -3014.7 1.080 0.0228 -4014.7 0.811 0.0268 -5014.7 0.649 0.0309 -9014.7 0.386 0.0470 / - 400.0 5.900 0.0130 - 800.0 2.950 0.0135 -1200.0 1.960 0.0140 -1600.0 1.470 0.0145 -2000.0 1.180 0.0150 -2400.0 0.980 0.0155 -2800.0 0.840 0.0160 -3200.0 0.740 0.0165 -3600.0 0.650 0.0170 -4000.0 0.590 0.0175 -4400.0 0.540 0.0180 -4800.0 0.490 0.0185 -5200.0 0.450 0.0190 -5600.0 0.420 0.0195 / -)" }; - - const auto es = parse(rspec, props); - - auto tables = ::Opm::Tables(es.getUnits()); - tables.addPVTTables(es); - - const auto& tabdims = tables.tabdims(); - const auto& tab = tables.tab(); - - const auto ibpvtg = tabdims[ Ix::PvtgMainStart ] - 1; - const auto nppvtg = tabdims[ Ix::NumPvtgPressNodes ]; - const auto ntpvtg = tabdims[ Ix::NumPvtgTables ]; - const auto ncol = 5; - - // Pg table defaulted - BOOST_CHECK_EQUAL(tabdims[Ix::PvtgPressStart], 1); - BOOST_CHECK_EQUAL(tabdims[Ix::NumPvtgCompNodes], 1); - - BOOST_CHECK_EQUAL(nppvtg, 16); - BOOST_CHECK_EQUAL(ntpvtg, 2); - - const auto pvdg = std::vector { - &tab[ ibpvtg ] + 0, - &tab[ ibpvtg ] + ntpvtg*nppvtg*ncol - }; - - const auto expect_pvdg = makeTable(5, { - // Pg 1/Bg 1/(Bg*mu_g) d(1/Bg)/dPg d(1/(Bg*mu_g))/dPg - // - // Table 1 (10 pressure nodes) - 1.470000000000000e+01, 6.000024000096002e-03, 7.500030000120003e-01, 2.000000000000000e+20, 2.000000000000000e+20, - 2.647000000000000e+02, 8.269246671628215e-02, 8.613798616279391e+00, 3.067697708647446e-04, 3.145518246506956e-02, - 5.147000000000000e+02, 1.593879502709595e-01, 1.423106698847853e+01, 3.067819342187094e-04, 2.246907348879655e-02, - 1.014700000000000e+03, 3.127932436659369e-01, 2.234237454756692e+01, 3.068105867899547e-04, 1.622261511817678e-02, - 2.014700000000000e+03, 6.195786864931847e-01, 3.278194108429548e+01, 3.067854428272479e-04, 1.043956653672856e-02, - 2.514700000000000e+03, 7.727975270479135e-01, 3.715372726191892e+01, 3.064376811094576e-04, 8.743572355246868e-03, - 3.014700000000000e+03, 9.259259259259259e-01, 4.061078622482131e+01, 3.062567977560249e-04, 6.914117925804789e-03, - 4.014699999999999e+03, 1.233045622688040e+00, 4.600916502567312e+01, 3.071196967621139e-04, 5.398378800851812e-03, - 5.014700000000000e+03, 1.540832049306626e+00, 4.986511486429210e+01, 3.077864266185862e-04, 3.855949838618981e-03, - 9.014699999999999e+03, 2.590673575129534e+00, 5.512071436445817e+01, 2.624603814557271e-04, 1.313899875041518e-03, - 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, - 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, - 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, - 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, - 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, - 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, - - // =========================================================================================================================== - - // Table 2 (14 pressure nodes) - 4.000000000000000e+02, 1.694915254237289e-01, 1.303780964797914e+01, 2.000000000000000e+20, 2.000000000000000e+20, - 8.000000000000000e+02, 3.389830508474577e-01, 2.510985561833020e+01, 4.237288135593221e-04, 3.018011492587764e-02, - 1.200000000000000e+03, 5.102040816326532e-01, 3.644314868804666e+01, 4.280525769629887e-04, 2.833323267429114e-02, - 1.600000000000000e+03, 6.802721088435375e-01, 4.691531785127844e+01, 4.251700680272108e-04, 2.618042290807946e-02, - 2.000000000000000e+03, 8.474576271186441e-01, 5.649717514124294e+01, 4.179637956877669e-04, 2.395464322491127e-02, - 2.400000000000000e+03, 1.020408163265306e+00, 6.583278472679396e+01, 4.323763403666553e-04, 2.333902396387753e-02, - 2.800000000000000e+03, 1.190476190476191e+00, 7.440476190476191e+01, 4.251700680272113e-04, 2.142994294491990e-02, - 3.200000000000000e+03, 1.351351351351352e+00, 8.190008190008190e+01, 4.021879021879017e-04, 1.873829998829995e-02, - 3.600000000000000e+03, 1.538461538461539e+00, 9.049773755656106e+01, 4.677754677754675e-04, 2.149413914119791e-02, - 4.000000000000000e+03, 1.694915254237288e+00, 9.685230024213075e+01, 3.911342894393748e-04, 1.588640671392424e-02, - 4.400000000000000e+03, 1.851851851851852e+00, 1.028806584362140e+02, 3.923414940364085e-04, 1.507089548520804e-02, - 4.800000000000000e+03, 2.040816326530613e+00, 1.103143960286818e+02, 4.724111866969022e-04, 1.858434398116948e-02, - 5.199999999999999e+03, 2.222222222222222e+00, 1.169590643274854e+02, 4.535147392290250e-04, 1.661167074700910e-02, - 5.599999999999999e+03, 2.380952380952381e+00, 1.221001221001221e+02, 3.968253968253976e-04, 1.285264443159182e-02, - 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, - 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, - }); - - check_is_close(pvdg, expect_pvdg); -} - -BOOST_AUTO_TEST_CASE (PVDG_Exceed_Tabdims_Limits) -{ - // This checks that Flow's extended table allocation scheme does what - // it's supposed to do. Normally, one would announce the maximum sizes - // in the RUNSPEC keyword 'TABDIMS'. Note that the maximum sizes need - // to be big enough in order to run the case in ECLIPSE. Other than - // NTPVT, Flow does not really care about these declared maximum sizes. - - const auto rspec = std::string { R"(RUNSPEC -DIMENS - 10 10 10 / - -TITLE - Test PVDG Output - -GAS - -FIELD - -TABDIMS --- NTSFUN NTPVT NSSFUN NPPVT NTFIP NRPVT - 1* 2 1* 2 1* 1* -/ -)" }; - - const auto props = std::string { R"( -PVDG - 14.7 166.666 0.0080 - 264.7 12.093 0.0096 - 514.7 6.274 0.0112 -1014.7 3.197 0.0140 -2014.7 1.614 0.0189 -2514.7 1.294 0.0208 -3014.7 1.080 0.0228 -4014.7 0.811 0.0268 -5014.7 0.649 0.0309 -9014.7 0.386 0.0470 / - 400.0 5.900 0.0130 - 800.0 2.950 0.0135 -1200.0 1.960 0.0140 -1600.0 1.470 0.0145 -2000.0 1.180 0.0150 -2400.0 0.980 0.0155 -2800.0 0.840 0.0160 -3200.0 0.740 0.0165 -3600.0 0.650 0.0170 -4000.0 0.590 0.0175 -4400.0 0.540 0.0180 -4800.0 0.490 0.0185 -5200.0 0.450 0.0190 -5600.0 0.420 0.0195 / -)" }; - - const auto es = parse(rspec, props); - - auto tables = ::Opm::Tables(es.getUnits()); - tables.addPVTTables(es); - - const auto& tabdims = tables.tabdims(); - const auto& tab = tables.tab(); - - const auto ibpvtg = tabdims[ Ix::PvtgMainStart ] - 1; - const auto nppvtg = tabdims[ Ix::NumPvtgPressNodes ]; - const auto ntpvtg = tabdims[ Ix::NumPvtgTables ]; - const auto ncol = 5; - - // Pg table defaulted - BOOST_CHECK_EQUAL(tabdims[Ix::PvtgPressStart], 1); - BOOST_CHECK_EQUAL(tabdims[Ix::NumPvtgCompNodes], 1); - - BOOST_CHECK_EQUAL(nppvtg, 14); // Table 2 - BOOST_CHECK_EQUAL(ntpvtg, 2); - - const auto pvdg = std::vector { - &tab[ ibpvtg ] + 0, - &tab[ ibpvtg ] + ntpvtg*nppvtg*ncol - }; - - const auto expect_pvdg = makeTable(5, { - // Pg 1/Bg 1/(Bg*mu_g) d(1/Bg)/dPg d(1/(Bg*mu_g))/dPg - // - // Table 1 (10 pressure nodes) - 1.470000000000000e+01, 6.000024000096002e-03, 7.500030000120003e-01, 2.000000000000000e+20, 2.000000000000000e+20, - 2.647000000000000e+02, 8.269246671628215e-02, 8.613798616279391e+00, 3.067697708647446e-04, 3.145518246506956e-02, - 5.147000000000000e+02, 1.593879502709595e-01, 1.423106698847853e+01, 3.067819342187094e-04, 2.246907348879655e-02, - 1.014700000000000e+03, 3.127932436659369e-01, 2.234237454756692e+01, 3.068105867899547e-04, 1.622261511817678e-02, - 2.014700000000000e+03, 6.195786864931847e-01, 3.278194108429548e+01, 3.067854428272479e-04, 1.043956653672856e-02, - 2.514700000000000e+03, 7.727975270479135e-01, 3.715372726191892e+01, 3.064376811094576e-04, 8.743572355246868e-03, - 3.014700000000000e+03, 9.259259259259259e-01, 4.061078622482131e+01, 3.062567977560249e-04, 6.914117925804789e-03, - 4.014699999999999e+03, 1.233045622688040e+00, 4.600916502567312e+01, 3.071196967621139e-04, 5.398378800851812e-03, - 5.014700000000000e+03, 1.540832049306626e+00, 4.986511486429210e+01, 3.077864266185862e-04, 3.855949838618981e-03, - 9.014699999999999e+03, 2.590673575129534e+00, 5.512071436445817e+01, 2.624603814557271e-04, 1.313899875041518e-03, - 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, - 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, - 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, - 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, - - // =========================================================================================================================== - - // Table 2 (14 pressure nodes) - 4.000000000000000e+02, 1.694915254237289e-01, 1.303780964797914e+01, 2.000000000000000e+20, 2.000000000000000e+20, - 8.000000000000000e+02, 3.389830508474577e-01, 2.510985561833020e+01, 4.237288135593221e-04, 3.018011492587764e-02, - 1.200000000000000e+03, 5.102040816326532e-01, 3.644314868804666e+01, 4.280525769629887e-04, 2.833323267429114e-02, - 1.600000000000000e+03, 6.802721088435375e-01, 4.691531785127844e+01, 4.251700680272108e-04, 2.618042290807946e-02, - 2.000000000000000e+03, 8.474576271186441e-01, 5.649717514124294e+01, 4.179637956877669e-04, 2.395464322491127e-02, - 2.400000000000000e+03, 1.020408163265306e+00, 6.583278472679396e+01, 4.323763403666553e-04, 2.333902396387753e-02, - 2.800000000000000e+03, 1.190476190476191e+00, 7.440476190476191e+01, 4.251700680272113e-04, 2.142994294491990e-02, - 3.200000000000000e+03, 1.351351351351352e+00, 8.190008190008190e+01, 4.021879021879017e-04, 1.873829998829995e-02, - 3.600000000000000e+03, 1.538461538461539e+00, 9.049773755656106e+01, 4.677754677754675e-04, 2.149413914119791e-02, - 4.000000000000000e+03, 1.694915254237288e+00, 9.685230024213075e+01, 3.911342894393748e-04, 1.588640671392424e-02, - 4.400000000000000e+03, 1.851851851851852e+00, 1.028806584362140e+02, 3.923414940364085e-04, 1.507089548520804e-02, - 4.800000000000000e+03, 2.040816326530613e+00, 1.103143960286818e+02, 4.724111866969022e-04, 1.858434398116948e-02, - 5.199999999999999e+03, 2.222222222222222e+00, 1.169590643274854e+02, 4.535147392290250e-04, 1.661167074700910e-02, - 5.599999999999999e+03, 2.380952380952381e+00, 1.221001221001221e+02, 3.968253968253976e-04, 1.285264443159182e-02, - }); - - check_is_close(pvdg, expect_pvdg); -} - -BOOST_AUTO_TEST_CASE (PVTG_USat_Defaulted) -{ - const auto rspec = std::string { R"(RUNSPEC -DIMENS - 10 10 10 / - -TITLE - Test PVTG Output - -GAS - -METRIC - -TABDIMS --- NTSFUN NTPVT NSSFUN NPPVT NTFIP NRPVT - 1* 2 1* 7 1* 2 -/ -)" }; - - const auto props = std::string { R"( -PVTG -30 0.00014 0.0523 0.0234 - 0 0.0521 0.0238 / -90 0.00012 0.0132 0.0252 - 0 0.0131 0.0253 / -150 0.00015 0.00877 0.0281 - 0 0.00861 0.0275 / -210 0.00019 0.00554 0.0318 - 0 0.00555 0.0302 / -270 0.00029 0.00417 0.0355 - 0 0.00421 0.0330 / -330 0.00049 0.00357 0.0392 - 0 0.00361 0.0358 / -530 0.00060 0.00356 0.0393 - 0 0.00360 0.0359 / -/ -60 0.00014 0.0523 0.0234 / -120 0.00012 0.0132 0.0252 / -180 0.00015 0.00877 0.0281 / -240 0.00019 0.00554 0.0318 / -300 0.00029 0.00417 0.0355 / -360 0.00049 0.00357 0.0392 / -560 0.00060 0.00356 0.0393 - 0 0.00360 0.0359 / -/ -)" }; - - const auto es = parse(rspec, props); - - auto tables = ::Opm::Tables(es.getUnits()); - tables.addPVTTables(es); - - const auto& tabdims = tables.tabdims(); - const auto& tab = tables.tab(); - - const auto ibpvtg = tabdims[ Ix::PvtgMainStart ] - 1; - const auto jbpvtg = tabdims[ Ix::PvtgPressStart ] - 1; - const auto nppvtg = tabdims[ Ix::NumPvtgPressNodes ]; - const auto nrpvtg = tabdims[ Ix::NumPvtgCompNodes ]; - const auto ntpvtg = tabdims[ Ix::NumPvtgTables ]; - const auto ncol = 5; - - BOOST_CHECK_EQUAL(nppvtg, 7); - BOOST_CHECK_EQUAL(nrpvtg, 2); - BOOST_CHECK_EQUAL(ntpvtg, 2); - - const auto pvtg = std::vector { - &tab[ ibpvtg ] + 0, - &tab[ ibpvtg ] + ntpvtg*nppvtg*nrpvtg*ncol - }; - - const auto pg = std::vector { - &tab[ jbpvtg ] + 0, - &tab[ jbpvtg ] + ntpvtg*nppvtg - }; - - const auto expect_pvtg = makeTable(5, { - // Rv 1/Bg 1/(Bg*mu_g) d(1/Bg)/dRv d(1/(Bg*mu_g))/dRv - // - // Table 1 (Pg 1) - 1.400000000000000e-04, 1.912045889101339e+01, 8.171136278210848e+02, -2.000000000000000e+20, -2.000000000000000e+20, - 0, 1.919385796545106e+01, 8.064646203971031e+02, -5.242791031262176e+02, 7.606433874272674e+04, - - // Table 1 (Pg 2) ------------------------------------------------------------------------------------------------------------ - - 1.200000000000000e-04, 7.575757575757576e+01, 3.006253006253006e+03, -2.000000000000000e+20, -2.000000000000000e+20, - 0, 7.633587786259541e+01, 3.017228374015629e+03, -4.819184208497044e+03, -9.146139802185188e+04, - - // Table 1 (Pg 3) ------------------------------------------------------------------------------------------------------------ - - 1.500000000000000e-04, 1.140250855188141e+02, 4.057832224868830e+03, -2.000000000000000e+20, -2.000000000000000e+20, - 0, 1.161440185830430e+02, 4.223418857565199e+03, -1.412622042819227e+04, -1.103910884642458e+06, - - // Table 1 (Pg 4) ------------------------------------------------------------------------------------------------------------ - - 1.900000000000000e-04, 1.805054151624549e+02, 5.676270917058329e+03, -2.000000000000000e+20, -2.000000000000000e+20, - 0, 1.801801801801802e+02, 5.966231131794045e+03, 1.711763064603725e+03, -1.526106393345871e+06, - - // Table 1 (Pg 5) ------------------------------------------------------------------------------------------------------------ - - 2.900000000000000e-04, 2.398081534772182e+02, 6.755159252879387e+03, -2.000000000000000e+20, -2.000000000000000e+20, - 0, 2.375296912114014e+02, 7.197869430648528e+03, 7.856766433850982e+03, -1.526586819893588e+06, - - // Table 1 (Pg 6) ------------------------------------------------------------------------------------------------------------ - - 4.900000000000000e-04, 2.801120448179272e+02, 7.145715429028755e+03, -2.000000000000000e+20, -2.000000000000000e+20, - 0, 2.770083102493075e+02, 7.737662297466691e+03, 6.334152180856531e+03, -1.208054833546807e+06, - - // Table 1 (Pg 7) ------------------------------------------------------------------------------------------------------------ - - 5.999999999999999e-04, 2.808988764044944e+02, 7.147554106984589e+03, -2.000000000000000e+20, -2.000000000000000e+20, - 0, 2.777777777777778e+02, 7.737542556484059e+03, 5.201831044527695e+03, -9.833140824991158e+05, - - // ========================================================================================================================== - - // Table 2 (Pg 1) - 1.400000000000000e-04, 1.912045889101339e+01, 8.171136278210848e+02, -2.000000000000000e+20, -2.000000000000000e+20, - -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, - - // Table 2 (Pg 2) ------------------------------------------------------------------------------------------------------------ - - 1.200000000000000e-04, 7.575757575757576e+01, 3.006253006253006e+03, -2.000000000000000e+20, -2.000000000000000e+20, - -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, - - // Table 2 (Pg 3) ------------------------------------------------------------------------------------------------------------ - - 1.500000000000000e-04, 1.140250855188141e+02, 4.057832224868830e+03, -2.000000000000000e+20, -2.000000000000000e+20, - -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, - - // Table 2 (Pg 4) ------------------------------------------------------------------------------------------------------------ - - 1.900000000000000e-04, 1.805054151624549e+02, 5.676270917058329e+03, -2.000000000000000e+20, -2.000000000000000e+20, - -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, - - // Table 2 (Pg 5) ------------------------------------------------------------------------------------------------------------ - - 2.900000000000000e-04, 2.398081534772182e+02, 6.755159252879387e+03, -2.000000000000000e+20, -2.000000000000000e+20, - -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, - - // Table 2 (Pg 6) ------------------------------------------------------------------------------------------------------------ - - 4.900000000000000e-04, 2.801120448179272e+02, 7.145715429028755e+03, -2.000000000000000e+20, -2.000000000000000e+20, - -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, - - // Table 2 (Pg 7) ------------------------------------------------------------------------------------------------------------ - - 5.999999999999999e-04, 2.808988764044944e+02, 7.147554106984589e+03, -2.000000000000000e+20, -2.000000000000000e+20, - 0, 2.777777777777778e+02, 7.737542556484059e+03, 5.201831044527695e+03, -9.833140824991158e+05, - }); - - const auto expect_pg = makeTable(1, { - // Table 1 - 30, 90, 150, 210, 270, 330, 530, - - // Table 2 - 60, 120, 180, 240, 300, 360, 560, - }); - - check_is_close(pvtg, expect_pvtg); - check_is_close(pg , expect_pg ); -} - -BOOST_AUTO_TEST_CASE (PVTG_USat_Full_Large_Tabdims) -{ - const auto rspec = std::string { R"(RUNSPEC -DIMENS - 10 10 10 / - -TITLE - Test PVTG Output - -GAS - -METRIC - -TABDIMS --- NTSFUN NTPVT NSSFUN NPPVT NTFIP NRPVT - 1* 1 1* 7 1* 5 -/ -)" }; - - const auto props = std::string { R"( -PVTG - 50.00 0.00000497 0.024958 0.01441 - 0.00000248 0.024958 0.01440 - 0.00000000 0.024958 0.01440 / - 70.00 0.00000521 0.017639 0.01491 - 0.00000261 0.017641 0.01490 - 0.00000000 0.017643 0.01490 / - 90.00 0.00000627 0.013608 0.01547 - 0.00000313 0.013611 0.01546 - 0.00000000 0.013615 0.01544 / -110.00 0.00000798 0.011072 0.01609 - 0.00000399 0.011076 0.01607 - 0.00000000 0.011081 0.01605 / -/ -)" }; - - const auto es = parse(rspec, props); - - auto tables = ::Opm::Tables(es.getUnits()); - tables.addPVTTables(es); - - const auto& tabdims = tables.tabdims(); - const auto& tab = tables.tab(); - - const auto ibpvtg = tabdims[ Ix::PvtgMainStart ] - 1; - const auto jbpvtg = tabdims[ Ix::PvtgPressStart ] - 1; - const auto nppvtg = tabdims[ Ix::NumPvtgPressNodes ]; - const auto nrpvtg = tabdims[ Ix::NumPvtgCompNodes ]; - const auto ntpvtg = tabdims[ Ix::NumPvtgTables ]; - const auto ncol = 5; - - BOOST_CHECK_EQUAL(nppvtg, 7); - BOOST_CHECK_EQUAL(nrpvtg, 5); - BOOST_CHECK_EQUAL(ntpvtg, 1); - - const auto pvtg = std::vector { - &tab[ ibpvtg ] + 0, - &tab[ ibpvtg ] + ntpvtg*nppvtg*nrpvtg*ncol - }; - - const auto pg = std::vector { - &tab[ jbpvtg ] + 0, - &tab[ jbpvtg ] + ntpvtg*nppvtg - }; - - const auto expect_pvtg = makeTable(5, { - // Rv 1/Bg 1/(Bg*mu_g) d(1/Bg)/dRv d(1/(Bg*mu_g))/dRv - // - // Table 1 (Pg 1) - 4.970000000000000e-06, 4.006731308598445e+01, 2.780521380012800e+03, -2.000000000000000e+20, -2.000000000000000e+20, - 2.480000000000000e-06, 4.006731308598445e+01, 2.782452297637809e+03, 0, -7.754689257064208e+05, - 0, 4.006731308598445e+01, 2.782452297637809e+03, 0, 0, - -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, - -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, - - // Table 1 (Pg 2) ------------------------------------------------------------------------------------------------------------ - - 5.210000000000000e-06, 5.669255626736210e+01, 3.802317657100074e+03, -2.000000000000000e+20, -2.000000000000000e+20, - 2.610000000000000e-06, 5.668612890425712e+01, 3.804438181493767e+03, 2.472062732683009e+03, -8.155863052665014e+05, - 0, 5.667970299835629e+01, 3.804006912641362e+03, 2.462032912196776e+03, 1.652371082011811e+05, - -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, - -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, - - // Table 1 (Pg 3) ------------------------------------------------------------------------------------------------------------ - - 6.270000000000000e-06, 7.348618459729570e+01, 4.750238176942192e+03, -2.000000000000000e+20, -2.000000000000000e+20, - 3.130000000000000e-06, 7.346998751010213e+01, 4.752263098971676e+03, 5.158308023431543e+03, -6.448796272243677e+05, - 0, 7.344840249724568e+01, 4.757020887127311e+03, 6.896170241676778e+03, -1.520060113621228e+06, - -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, - -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, - - // Table 1 (Pg 4) ------------------------------------------------------------------------------------------------------------ - - 7.980000000000000e-06, 9.031791907514450e+01, 5.613295156938751e+03, -2.000000000000000e+20, -2.000000000000000e+20, - 3.990000000000000e-06, 9.028530155290719e+01, 5.618251496758381e+03, 8.174817603337499e+03, -1.242190430985102e+06, - 0, 9.024456276509339e+01, 5.622714190971551e+03, 1.021022250972279e+04, -1.118469727611510e+06, - -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, - -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, - - // Table 1 (Pg 5) ------------------------------------------------------------------------------------------------------------ - - -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, - -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, - -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, - -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, - -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, - - // Table 1 (Pg 6) ------------------------------------------------------------------------------------------------------------ - - -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, - -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, - -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, - -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, - -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, - - // Table 1 (Pg 7) ------------------------------------------------------------------------------------------------------------ - - -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, - -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, - -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, - -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, - -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, - }); - - const auto expect_pg = makeTable(1, { - // Table 1 - 50.00, 70.00, 90.00, 110.00, 2.0e20, 2.0e20, 2.0e20, - }); - - check_is_close(pvtg, expect_pvtg); - check_is_close(pg , expect_pg ); -} - -BOOST_AUTO_TEST_CASE (PVTG_Exceed_Tabdims_Limits) -{ - // This checks that Flow's extended table allocation scheme does what - // it's supposed to do. Normally, one would announce the maximum sizes - // in the RUNSPEC keyword 'TABDIMS'. Note that the maximum sizes need - // to be big enough in order to run the case in ECLIPSE. Other than - // NTPVT, Flow does not really care about these declared maximum sizes. - - const auto rspec = std::string { R"(RUNSPEC -DIMENS - 10 10 10 / - -TITLE - Test PVTG Output - -GAS - -METRIC - -TABDIMS --- NTSFUN NTPVT NSSFUN NPPVT NTFIP NRPVT - 1* 2 1* 1 1* 1 -/ -)" }; - - const auto props = std::string { R"( -PVTG - 50.00 0.00000497 0.024958 0.01441 - 0.00000248 0.024958 0.01440 - 0.00000000 0.024958 0.01440 / - 70.00 0.00000521 0.017639 0.01491 - 0.00000261 0.017641 0.01490 - 0.00000000 0.017643 0.01490 / - 90.00 0.00000627 0.013608 0.01547 - 0.00000313 0.013611 0.01546 - 0.00000000 0.013615 0.01544 / -110.00 0.00000798 0.011072 0.01609 - 0.00000399 0.011076 0.01607 - 0.00000000 0.011081 0.01605 / -130.00 0.00001041 0.009340 0.01677 - 0.00000520 0.009346 0.01674 - 0.00000000 0.009352 0.01671 / -/ - 50.00 0.00000497 0.024958 0.01441 - 0.00000248 0.024958 0.01440 - 0.00000000 0.024958 0.01440 / -/ -)" }; - - const auto es = parse(rspec, props); - - auto tables = ::Opm::Tables(es.getUnits()); - tables.addPVTTables(es); - - const auto& tabdims = tables.tabdims(); - const auto& tab = tables.tab(); - - const auto ibpvtg = tabdims[ Ix::PvtgMainStart ] - 1; - const auto jbpvtg = tabdims[ Ix::PvtgPressStart ] - 1; - const auto nppvtg = tabdims[ Ix::NumPvtgPressNodes ]; - const auto nrpvtg = tabdims[ Ix::NumPvtgCompNodes ]; - const auto ntpvtg = tabdims[ Ix::NumPvtgTables ]; - const auto ncol = 5; - - BOOST_CHECK_EQUAL(nppvtg, 5); // Table 1 - BOOST_CHECK_EQUAL(nrpvtg, 3); // Table 1, Pg 1 - BOOST_CHECK_EQUAL(ntpvtg, 2); // TABDIMS - - const auto pvtg = std::vector { - &tab[ ibpvtg ] + 0, - &tab[ ibpvtg ] + ntpvtg*nppvtg*nrpvtg*ncol - }; - - const auto pg = std::vector { - &tab[ jbpvtg ] + 0, - &tab[ jbpvtg ] + ntpvtg*nppvtg - }; - - const auto expect_pvtg = makeTable(5, { - // Rv 1/Bg 1/(Bg*mu_g) d(1/Bg)/dRv d(1/(Bg*mu_g))/dRv - // - // Table 1 (Pg 1) - 4.970000000000000e-06, 4.006731308598445e+01, 2.780521380012800e+03, -2.000000000000000e+20, -2.000000000000000e+20, - 2.480000000000000e-06, 4.006731308598445e+01, 2.782452297637809e+03, 0, -7.754689257064208e+05, - 0, 4.006731308598445e+01, 2.782452297637809e+03, 0, 0, - - // Table 1 (Pg 2) ------------------------------------------------------------------------------------------------------------ - - 5.210000000000000e-06, 5.669255626736210e+01, 3.802317657100074e+03, -2.000000000000000e+20, -2.000000000000000e+20, - 2.610000000000000e-06, 5.668612890425712e+01, 3.804438181493767e+03, 2.472062732683009e+03, -8.155863052665014e+05, - 0, 5.667970299835629e+01, 3.804006912641362e+03, 2.462032912196776e+03, 1.652371082011811e+05, - - // Table 1 (Pg 3) ------------------------------------------------------------------------------------------------------------ - - 6.270000000000000e-06, 7.348618459729570e+01, 4.750238176942192e+03, -2.000000000000000e+20, -2.000000000000000e+20, - 3.130000000000000e-06, 7.346998751010213e+01, 4.752263098971676e+03, 5.158308023431543e+03, -6.448796272243677e+05, - 0, 7.344840249724568e+01, 4.757020887127311e+03, 6.896170241676778e+03, -1.520060113621228e+06, - - // Table 1 (Pg 4) ------------------------------------------------------------------------------------------------------------ - - 7.980000000000000e-06, 9.031791907514450e+01, 5.613295156938751e+03, -2.000000000000000e+20, -2.000000000000000e+20, - 3.990000000000000e-06, 9.028530155290719e+01, 5.618251496758381e+03, 8.174817603337499e+03, -1.242190430985102e+06, - 0, 9.024456276509339e+01, 5.622714190971551e+03, 1.021022250972279e+04, -1.118469727611510e+06, - - // Table 1 (Pg 5) ------------------------------------------------------------------------------------------------------------ - - 1.041000000000000e-05, 1.070663811563169e+02, 6.384399591909179e+03, -2.000000000000000e+20, -2.000000000000000e+20, - 5.200000000000000e-06, 1.069976460517869e+02, 6.391735128541628e+03, 1.319291833590461e+04, -1.407972482235984e+06, - 0, 1.069289991445680e+02, 6.399102282738958e+03, 1.320132831131706e+04, -1.416760422563444e+06, - - // ========================================================================================================================== - - // Table 2 (Pg 1) - 4.970000000000000e-06, 4.006731308598445e+01, 2.780521380012800e+03, -2.000000000000000e+20, -2.000000000000000e+20, - 2.480000000000000e-06, 4.006731308598445e+01, 2.782452297637809e+03, 0, -7.754689257064208e+05, - 0, 4.006731308598445e+01, 2.782452297637809e+03, 0, 0, - - // Table 2 (Pg 2) ------------------------------------------------------------------------------------------------------------ - - -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, - -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, - -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, - - // Table 2 (Pg 3) ------------------------------------------------------------------------------------------------------------ - - -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, - -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, - -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, - - // Table 2 (Pg 4) ------------------------------------------------------------------------------------------------------------ - - -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, - -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, - -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, - - // Table 2 (Pg 5) ------------------------------------------------------------------------------------------------------------ - - -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, - -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, - -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, -2.000000000000000e+20, - }); - - const auto expect_pg = makeTable(1, { - // Table 1 - 50.00, 70.00, 90.00, 110.00, 130.0, - - // Table 2 - 50.00, 2.0e20, 2.0e20, 2.0e20, 2.0e20, - }); - - check_is_close(pvtg, expect_pvtg); - check_is_close(pg , expect_pg ); -} - -BOOST_AUTO_TEST_SUITE_END () - -// ===================================================================== - -BOOST_AUTO_TEST_SUITE (Oil) - -BOOST_AUTO_TEST_CASE (PVCDO) -{ - const auto rspec = std::string { R"(RUNSPEC -DIMENS - 10 10 10 / - -TITLE - Test PVCDO Output - -OIL -WATER - -METRIC - -TABDIMS --- NTSFUN NTPVT NSSFUN NPPVT NTFIP NRPVT - 1* 2 1* 4 1* 3 -/ -)" }; - - const auto props = std::string { R"( -PVCDO --- Pref Bo(Pref) Co Vo(Pref) Cv - 200 1.23 0.321e-4 0.25 0.654e-3 / - 250 0.987 1.234e-5 0.314 0.9876e-5 / -)" }; - - const auto es = parse(rspec, props); - - auto tables = ::Opm::Tables(es.getUnits()); - tables.addPVTTables(es); - - const auto& tabdims = tables.tabdims(); - const auto& tab = tables.tab(); - - const auto ibpvto = tabdims[ Ix::PvtoMainStart ] - 1; - const auto nppvto = tabdims[ Ix::NumPvtoPressNodes ]; - const auto ntpvto = tabdims[ Ix::NumPvtoTables ]; - const auto ncol = 5; - - // Rs table defaulted - BOOST_CHECK_EQUAL(tabdims[Ix::PvtoCompStart], 1); - BOOST_CHECK_EQUAL(tabdims[Ix::NumPvtoCompNodes], 1); - - BOOST_CHECK_EQUAL(nppvto, 4); - BOOST_CHECK_EQUAL(ntpvto, 2); - - const auto pvcdo = std::vector { - &tab[ ibpvto ] + 0, - &tab[ ibpvto ] + ntpvto*nppvto*ncol - }; - - const auto expect_pvcdo = makeTable(5, { - // Po Bo Co Vo Cv - // - // Table 1 - 2.000000000000000e+02, 1.230000000000000e+00, 3.210000000000000e-05, 2.500000000000000e-01, 6.540000000000001e-04, - -1.000000000000000e+20, -1.000000000000000e+20, -1.000000000000000e+20, -1.000000000000000e+20, -1.000000000000000e+20, - -1.000000000000000e+20, -1.000000000000000e+20, -1.000000000000000e+20, -1.000000000000000e+20, -1.000000000000000e+20, - -1.000000000000000e+20, -1.000000000000000e+20, -1.000000000000000e+20, -1.000000000000000e+20, -1.000000000000000e+20, - - // =========================================================================================================================== - - // Table 2 - 2.500000000000000e+02, 9.870000000000000e-01, 1.234000000000000e-05, 3.140000000000000e-01, 9.876000000000000e-06, - -1.000000000000000e+20, -1.000000000000000e+20, -1.000000000000000e+20, -1.000000000000000e+20, -1.000000000000000e+20, - -1.000000000000000e+20, -1.000000000000000e+20, -1.000000000000000e+20, -1.000000000000000e+20, -1.000000000000000e+20, - -1.000000000000000e+20, -1.000000000000000e+20, -1.000000000000000e+20, -1.000000000000000e+20, -1.000000000000000e+20, - }); - - check_is_close(pvcdo, expect_pvcdo); -} - -BOOST_AUTO_TEST_CASE (PVDO_Regular) -{ - const auto rspec = std::string { R"(RUNSPEC -DIMENS - 10 10 10 / - -TITLE - Test PVDO Output - -OIL -WATER - -FIELD - -TABDIMS --- NTSFUN NTPVT NSSFUN NPPVT NTFIP NRPVT - 1* 2 1* 8 1* 1* -/ -)" }; - - const auto props = std::string { R"( -PVDO -400 1.012 1.16 -1200 1.0040 1.164 -2000 0.9960 1.167 -2800 0.9880 1.172 -3600 0.9802 1.177 -4400 0.9724 1.181 -5200 0.9646 1.185 -5600 0.9607 1.19 / -800 1.0255 1.14 -1600 1.0172 1.14 -2400 1.0091 1.14 -3200 1.0011 1.14 -4000 0.9931 1.14 -4800 0.9852 1.14 -5600 0.9774 1.14 / -)" }; - - const auto es = parse(rspec, props); - - auto tables = ::Opm::Tables(es.getUnits()); - tables.addPVTTables(es); - - const auto& tabdims = tables.tabdims(); - const auto& tab = tables.tab(); - - const auto ibpvto = tabdims[ Ix::PvtoMainStart ] - 1; - const auto nppvto = tabdims[ Ix::NumPvtoPressNodes ]; - const auto ntpvto = tabdims[ Ix::NumPvtoTables ]; - const auto ncol = 5; - - // Rs table defaulted - BOOST_CHECK_EQUAL(tabdims[Ix::PvtoCompStart], 1); - BOOST_CHECK_EQUAL(tabdims[Ix::NumPvtoCompNodes], 1); - - BOOST_CHECK_EQUAL(nppvto, 8); - BOOST_CHECK_EQUAL(ntpvto, 2); - - const auto pvdo = std::vector { - &tab[ ibpvto ] + 0, - &tab[ ibpvto ] + ntpvto*nppvto*ncol - }; - - const auto expect_pvdo = makeTable(5, { - // Po 1/Bo 1/(Bo*mu_o) d(1/Bo)/dPo d(1/(Bo*mu_o))/dPo - // - // Table 1 (8 pressure nodes) - 4.000000000000000e+02, 9.881422924901185e-01, 8.518468038707919e-01, 2.000000000000000e+20, 2.000000000000000e+20, - 1.200000000000000e+03, 9.960159362549801e-01, 8.556837940334882e-01, 9.842054706076935e-06, 4.796237703370287e-06, - 2.000000000000000e+03, 1.004016064257028e+00, 8.603393866812581e-01, 1.000016000256010e-05, 5.819490809712421e-06, - 2.800000000000000e+03, 1.012145748987854e+00, 8.636055878735959e-01, 1.016210591353262e-05, 4.082751490422227e-06, - 3.600000000000000e+03, 1.020199959192002e+00, 8.667799143517431e-01, 1.006776275518428e-05, 3.967908097683990e-06, - 4.400000000000000e+03, 1.028383381324558e+00, 8.707733965491598e-01, 1.022927766569509e-05, 4.991852746770858e-06, - 5.199999999999999e+03, 1.036699149906697e+00, 8.748516032967908e-01, 1.039471072767418e-05, 5.097758434538807e-06, - 5.599999999999999e+03, 1.040907671489539e+00, 8.747123289828058e-01, 1.052130395710449e-05, -3.481857849624292e-07, - - // =========================================================================================================================== - - // Table 2 (7 pressure nodes) - 8.000000000000000e+02, 9.751340809361286e-01, 8.553807727509901e-01, 2.000000000000000e+20, 2.000000000000000e+20, - 1.600000000000000e+03, 9.830908375933936e-01, 8.623603838538541e-01, 9.945945821581148e-06, 8.724513878579920e-06, - 2.400000000000000e+03, 9.909820632246555e-01, 8.692825116005751e-01, 9.864032039077486e-06, 8.652659683401343e-06, - 3.200000000000000e+03, 9.989012086704624e-01, 8.762291304126864e-01, 9.898931807258565e-06, 8.683273515139035e-06, - 4.000000000000000e+03, 1.006947940791461e+00, 8.832876673609308e-01, 1.005841515124826e-05, 8.823171185305545e-06, - 4.800000000000000e+03, 1.015022330491271e+00, 8.903704653432202e-01, 1.009298712476236e-05, 8.853497477861732e-06, - 5.599999999999999e+03, 1.023122570083896e+00, 8.974759386700842e-01, 1.012529949078135e-05, 8.881841658580091e-06, - 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, - }); - - check_is_close(pvdo, expect_pvdo); -} - -BOOST_AUTO_TEST_CASE (PVDO_Exceed_Tabdims_Limits) -{ - // This checks that Flow's extended table allocation scheme does what - // it's supposed to do. Normally, one would announce the maximum sizes - // in the RUNSPEC keyword 'TABDIMS'. Note that the maximum sizes need - // to be big enough in order to run the case in ECLIPSE. Other than - // NTPVT, Flow does not really care about these declared maximum sizes. - - const auto rspec = std::string { R"(RUNSPEC -DIMENS - 10 10 10 / - -TITLE - Test PVDO Output - -OIL -WATER - -FIELD - -TABDIMS --- NTSFUN NTPVT NSSFUN NPPVT NTFIP NRPVT - 1* 2 1* 2 1* 1* -/ -)" }; - - const auto props = std::string { R"( -PVDO -400 1.012 1.16 -1200 1.0040 1.164 -2000 0.9960 1.167 -2800 0.9880 1.172 -3600 0.9802 1.177 -4000 0.9752 1.179 -4400 0.9724 1.181 -5200 0.9646 1.185 -5400 0.9630 1.187 -5600 0.9607 1.19 / -800 1.0255 1.14 -1600 1.0172 1.14 -5600 0.9774 1.14 / -)" }; - - const auto es = parse(rspec, props); - - auto tables = ::Opm::Tables(es.getUnits()); - tables.addPVTTables(es); - - const auto& tabdims = tables.tabdims(); - const auto& tab = tables.tab(); - - const auto ibpvto = tabdims[ Ix::PvtoMainStart ] - 1; - const auto nppvto = tabdims[ Ix::NumPvtoPressNodes ]; - const auto ntpvto = tabdims[ Ix::NumPvtoTables ]; - const auto ncol = 5; - - // Rs table defaulted - BOOST_CHECK_EQUAL(tabdims[Ix::PvtoCompStart], 1); - BOOST_CHECK_EQUAL(tabdims[Ix::NumPvtoCompNodes], 1); - - BOOST_CHECK_EQUAL(nppvto, 10); // Table 1 - BOOST_CHECK_EQUAL(ntpvto, 2); - - // Verify declared TABDIMS from input - { - const auto& tabd = es.runspec().tabdims(); - - BOOST_CHECK_EQUAL(tabd.getNumPVTTables(), 2); - BOOST_CHECK_EQUAL(tabd.getNumPressureNodes(), 2); - } - - const auto pvdo = std::vector { - &tab[ ibpvto ] + 0, - &tab[ ibpvto ] + ntpvto*nppvto*ncol - }; - - const auto expect_pvdo = makeTable(5, { - // Po 1/Bo 1/(Bo*mu_o) d(1/Bo)/dPo d(1/(Bo*mu_o))/dPo - // - // Table 1 (10 pressure nodes) - 4.000000000000000e+02, 9.881422924901185e-01, 8.518468038707919e-01, 2.000000000000000e+20, 2.000000000000000e+20, - 1.200000000000000e+03, 9.960159362549801e-01, 8.556837940334882e-01, 9.842054706076935e-06, 4.796237703370287e-06, - 2.000000000000000e+03, 1.004016064257028e+00, 8.603393866812581e-01, 1.000016000256010e-05, 5.819490809712421e-06, - 2.800000000000000e+03, 1.012145748987854e+00, 8.636055878735959e-01, 1.016210591353262e-05, 4.082751490422227e-06, - 3.600000000000000e+03, 1.020199959192002e+00, 8.667799143517431e-01, 1.006776275518428e-05, 3.967908097683990e-06, - 4.000000000000000e+03, 1.025430680885972e+00, 8.697461245852181e-01, 1.307680423492609e-05, 7.415525583687474e-06, - 4.400000000000000e+03, 1.028383381324558e+00, 8.707733965491598e-01, 7.381751096464098e-06, 2.568179909854249e-06, - 5.199999999999999e+03, 1.036699149906697e+00, 8.748516032967908e-01, 1.039471072767418e-05, 5.097758434538807e-06, - 5.400000000000000e+03, 1.038421599169263e+00, 8.748286429395642e-01, 8.612246312827937e-06, -1.148017861329892e-07, - 5.599999999999999e+03, 1.040907671489539e+00, 8.747123289828058e-01, 1.243036160138106e-05, -5.815697837918713e-07, - - // =========================================================================================================================== - - // Table 2 (3 pressure nodes) - 8.000000000000000e+02, 9.751340809361286e-01, 8.553807727509901e-01, 2.000000000000000e+20, 2.000000000000000e+20, - 1.600000000000000e+03, 9.830908375933936e-01, 8.623603838538541e-01, 9.945945821581148e-06, 8.724513878579920e-06, - 5.599999999999999e+03, 1.023122570083896e+00, 8.974759386700842e-01, 1.000793312262560e-05, 8.778888704057549e-06, - 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, - 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, - 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, - 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, - 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, - 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, - 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, - }); - - check_is_close(pvdo, expect_pvdo); -} - -BOOST_AUTO_TEST_CASE (PVTO_SPE1_USat_Defaulted) -{ - const auto rspec = std::string { R"(RUNSPEC -DIMENS - 10 10 10 / - -TITLE - Test PVTO Output - -OIL -WATER - -FIELD - -TABDIMS --- NTSFUN NTPVT NSSFUN NPPVT NTFIP NRPVT - 1* 2 1* 4 1* 3 -/ -)" }; - - const auto props = std::string { R"( -PVTO -0.3710 1014.7 1.2950 0.8300 / -0.9300 3014.7 1.5650 0.5940 / -1.6180 5014.7 1.8270 0.4490 - 9014.7 1.7370 0.6310 / -/ -0.0010 14.7 1.0620 1.0400 / -1.2700 4014.7 1.6950 0.5100 - 9014.7 1.5790 0.7400 / -/ -)" }; - - const auto es = parse(rspec, props); - - auto tables = ::Opm::Tables(es.getUnits()); - tables.addPVTTables(es); - - const auto& tabdims = tables.tabdims(); - const auto& tab = tables.tab(); - - const auto ibpvto = tabdims[ Ix::PvtoMainStart ] - 1; - const auto jbpvto = tabdims[ Ix::PvtoCompStart ] - 1; - const auto nppvto = tabdims[ Ix::NumPvtoPressNodes ]; - const auto nrpvto = tabdims[ Ix::NumPvtoCompNodes ]; - const auto ntpvto = tabdims[ Ix::NumPvtoTables ]; - const auto ncol = 5; - - BOOST_CHECK_EQUAL(nppvto, 4); - BOOST_CHECK_EQUAL(nrpvto, 3); - BOOST_CHECK_EQUAL(ntpvto, 2); - - const auto pvto = std::vector { - &tab[ ibpvto ] + 0, - &tab[ ibpvto ] + ntpvto*nrpvto*nppvto*ncol - }; - - const auto rs = std::vector { - &tab[ jbpvto ] + 0, - &tab[ jbpvto ] + ntpvto*nrpvto - }; - - const auto expect_pvto = makeTable(5, { - // Po 1/Bo 1/(Bo*mu_o) d(1/Bo)/dPo d(1/(Bo*mu_o))/dPo - // - // Table 1 (Comp 1) - 1.014700000000000e+03, 7.722007722007722e-01, 9.303623761455088e-01, 2.000000000000000e+20, 2.000000000000000e+20, - 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, - 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, - 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, - - // Table 1 (Comp 2) ---------------------------------------------------------------------------------------------------------- - - 3.014700000000000e+03, 6.389776357827476e-01, 1.075719925560181e+00, 2.000000000000000e+20, 2.000000000000000e+20, - 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, - 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, - 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, - - // Table 1 (Comp 3) ---------------------------------------------------------------------------------------------------------- - - 5.014700000000000e+03, 5.473453749315819e-01, 1.219032015437822e+00, 2.000000000000000e+20, 2.000000000000000e+20, - 9.014699999999999e+03, 5.757052389176741e-01, 9.123696337839526e-01, 7.089965996523064e-06, -7.666559541346725e-05, - 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, - 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, - - // ========================================================================================================================== - - // Table 2 (Comp 1) - 1.470000000000000e+01, 9.416195856873822e-01, 9.054034477763291e-01, 2.000000000000000e+20, 2.000000000000000e+20, - 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, - 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, - 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, - - // Table 2 (Comp 2) ---------------------------------------------------------------------------------------------------------- - - 4.014699999999999e+03, 5.899705014749262e-01, 1.156804904852797e+00, 2.000000000000000e+20, 2.000000000000000e+20, - 9.014699999999999e+03, 6.333122229259025e-01, 8.558273282782466e-01, 8.668344290195251e-06, -6.019551531491001e-05, - 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, - 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, - - // Table 2 (Comp 3, unused) -------------------------------------------------------------------------------------------------- - - 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, - 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, - 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, - 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, - }); - - const auto expect_rs = makeTable(1, { - // Table 1 - 0.3710, 0.9300, 1.6180, - - // Table 2 - 0.0010, 1.2700, 2.0e+20, - }); - - check_is_close(pvto, expect_pvto); - check_is_close(rs , expect_rs ); -} - -BOOST_AUTO_TEST_CASE (PVTO_USat_Full) -{ - const auto rspec = std::string { R"(RUNSPEC -DIMENS - 10 10 10 / - -TITLE - Test PVTO Output - -OIL -WATER - -METRIC - -TABDIMS --- NTSFUN NTPVT NSSFUN NPPVT NTFIP NRPVT - 1* 2 1* 5 1* 4 -/ -)" }; - - const auto props = std::string { R"( -PVTO -20.59 50.00 1.10615 1.180 - 75.00 1.10164 1.247 - 100.00 1.09744 1.315 - 125.00 1.09351 1.384 - 150.00 1.08984 1.453 / -28.19 70.00 1.12522 1.066 - 95.00 1.12047 1.124 - 120.00 1.11604 1.182 - 145.00 1.11191 1.241 - 170.00 1.10804 1.300 / -36.01 90.00 1.14458 0.964 - 115.00 1.13959 1.014 - 140.00 1.13494 1.064 - 165.00 1.13060 1.115 - 190.00 1.12653 1.166 / -44.09 110.00 1.16437 0.880 - 135.00 1.15915 0.924 - 160.00 1.15428 0.968 - 185.00 1.14973 1.012 - 210.00 1.14547 1.056 / -/ -32.91 80.00 1.13304 1.04537 - 114.00 1.12837 1.10009 - 148.00 1.12401 1.15521 - 182.00 1.11994 1.21063 / -40.99 100.00 1.15276 0.97219 - 134.00 1.14786 1.02086 - 168.00 1.14328 1.06983 - 202.00 1.13900 1.11901 / -49.36 120.00 1.17297 0.91124 - 154.00 1.16783 0.95496 - 188.00 1.16303 0.99891 - 222.00 1.15854 1.04301 / -58.04 140.00 1.19374 0.85942 - 174.00 1.18836 0.89902 - 208.00 1.18334 0.93878 - 242.00 1.17864 0.97864 / -/ -)" }; - - const auto es = parse(rspec, props); - - auto tables = ::Opm::Tables(es.getUnits()); - tables.addPVTTables(es); - - const auto& tabdims = tables.tabdims(); - const auto& tab = tables.tab(); - - const auto ibpvto = tabdims[ Ix::PvtoMainStart ] - 1; - const auto jbpvto = tabdims[ Ix::PvtoCompStart ] - 1; - const auto nppvto = tabdims[ Ix::NumPvtoPressNodes ]; - const auto nrpvto = tabdims[ Ix::NumPvtoCompNodes ]; - const auto ntpvto = tabdims[ Ix::NumPvtoTables ]; - const auto ncol = 5; - - BOOST_CHECK_EQUAL(nppvto, 5); - BOOST_CHECK_EQUAL(nrpvto, 4); - BOOST_CHECK_EQUAL(ntpvto, 2); - - const auto pvto = std::vector { - &tab[ ibpvto ] + 0, - &tab[ ibpvto ] + ntpvto*nrpvto*nppvto*ncol - }; - - const auto rs = std::vector { - &tab[ jbpvto ] + 0, - &tab[ jbpvto ] + ntpvto*nrpvto - }; - - const auto expect_pvto = makeTable(5, { - // Po 1/Bo 1/(Bo*mu_o) d(1/Bo)/dPo d(1/(Bo*mu_o))/dPo - // - // Table 1 (Comp 1) - 5.000000000000001e+01, 9.040365230755323e-01, 7.661326466741798e-01, 2.000000000000000e+20, 2.000000000000000e+20, - 7.500000000000000e+01, 9.077375549181221e-01, 7.279370929575959e-01, 1.480412737035941e-04, -1.527822148663356e-03, - 1.000000000000000e+02, 9.112115468727220e-01, 6.929365375457962e-01, 1.389596781839940e-04, -1.400022216471987e-03, - 1.250000000000000e+02, 9.144863787253888e-01, 6.607560539923329e-01, 1.309932741066744e-04, -1.287219342138530e-03, - 1.500000000000000e+02, 9.175658812302724e-01, 6.314975094496025e-01, 1.231801001953415e-04, -1.170341781709219e-03, - - // Table 1 (Comp 2) ---------------------------------------------------------------------------------------------------------- - - 7.000000000000000e+01, 8.887150957146157e-01, 8.336914593945738e-01, 2.000000000000000e+20, 2.000000000000000e+20, - 9.500000000000001e+01, 8.924826189009969e-01, 7.940236822962605e-01, 1.507009274552472e-04, -1.586711083932530e-03, - 1.200000000000000e+02, 8.960252320705352e-01, 7.580585719716880e-01, 1.417045267815320e-04, -1.438604412982900e-03, - 1.450000000000000e+02, 8.993533649306149e-01, 7.247005358022682e-01, 1.331253144031886e-04, -1.334321446776793e-03, - 1.700000000000000e+02, 9.024944947835819e-01, 6.942265344489090e-01, 1.256451941186798e-04, -1.218960054134368e-03, - - // Table 1 (Comp 3) ---------------------------------------------------------------------------------------------------------- - - 9.000000000000001e+01, 8.736829229935872e-01, 9.063100860929328e-01, 2.000000000000000e+20, 2.000000000000000e+20, - 1.150000000000000e+02, 8.775085776463464e-01, 8.653930746019195e-01, 1.530261861103677e-04, -1.636680459640534e-03, - 1.400000000000000e+02, 8.811038468993955e-01, 8.281051192663491e-01, 1.438107701219638e-04, -1.491518213422816e-03, - 1.650000000000000e+02, 8.844861135680170e-01, 7.932610884018088e-01, 1.352906667448606e-04, -1.393761234581614e-03, - 1.900000000000000e+02, 8.876816418559648e-01, 7.613050101680658e-01, 1.278211315179111e-04, -1.278243129349715e-03, - - // Table 1 (Comp 4) ---------------------------------------------------------------------------------------------------------- - - 1.100000000000000e+02, 8.588335322964350e-01, 9.759471957914034e-01, 2.000000000000000e+20, 2.000000000000000e+20, - 1.350000000000000e+02, 8.627011171979468e-01, 9.336592177466957e-01, 1.547033960604739e-04, -1.691519121788311e-03, - 1.600000000000000e+02, 8.663409224798143e-01, 8.949802918179900e-01, 1.455922112746988e-04, -1.547157037148228e-03, - 1.850000000000000e+02, 8.697694241256644e-01, 8.594559526933443e-01, 1.371400658340026e-04, -1.420973564985826e-03, - 2.100000000000000e+02, 8.730040943892027e-01, 8.267084227170479e-01, 1.293868105415319e-04, -1.309901199051855e-03, - - // =========================================================================================================================== - - // Table 2 (Comp 1) - 8.000000000000000e+01, 8.825813740026830e-01, 8.442765470624592e-01, 2.000000000000000e+20, 2.000000000000000e+20, - 1.140000000000000e+02, 8.862341253312299e-01, 8.056014738168967e-01, 1.074338626043212e-04, -1.137502154281250e-03, - 1.480000000000000e+02, 8.896718000729531e-01, 7.701385895836714e-01, 1.011080806389172e-04, -1.043026006859568e-03, - 1.820000000000000e+02, 8.929049770523422e-01, 7.375539818543586e-01, 9.509344057026681e-05, -9.583708155680233e-04, - 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, - - // Table 2 (Comp 2) ---------------------------------------------------------------------------------------------------------- - - 1.000000000000000e+02, 8.674832575731288e-01, 8.922980668111468e-01, 2.000000000000000e+20, 2.000000000000000e+20, - 1.340000000000000e+02, 8.711863816144825e-01, 8.533847752037326e-01, 1.089154129809896e-04, -1.144508576688653e-03, - 1.680000000000000e+02, 8.746763697431950e-01, 8.175844477563677e-01, 1.026467096680142e-04, -1.052950807275436e-03, - 2.020000000000000e+02, 8.779631255487269e-01, 7.845891685943172e-01, 9.666928839799841e-05, -9.704493871191340e-04, - 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, - - // Table 2 (Comp 3) ---------------------------------------------------------------------------------------------------------- - - 1.200000000000000e+02, 8.525367230193440e-01, 9.355786873044905e-01, 2.000000000000000e+20, 2.000000000000000e+20, - 1.540000000000000e+02, 8.562890146682309e-01, 8.966752687738030e-01, 1.103615190849091e-04, -1.144218192079043e-03, - 1.880000000000000e+02, 8.598230484166358e-01, 8.607612782098846e-01, 1.039421690707318e-04, -1.056293840115247e-03, - 2.220000000000000e+02, 8.631553507000190e-01, 8.275619128292337e-01, 9.800889068774162e-05, -9.764519229603183e-04, - 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, - - // Table 2 (Comp 4) ---------------------------------------------------------------------------------------------------------- - - 1.400000000000000e+02, 8.377033524888167e-01, 9.747310424342193e-01, 2.000000000000000e+20, 2.000000000000000e+20, - 1.740000000000000e+02, 8.414958430105355e-01, 9.360145970173471e-01, 1.115438388740827e-04, -1.138718982849180e-03, - 2.080000000000000e+02, 8.450656616019064e-01, 9.001743343508666e-01, 1.049946644520869e-04, -1.054125372543546e-03, - 2.420000000000000e+02, 8.484354849657233e-01, 8.669536141642721e-01, 9.911245187696645e-05, -9.770800054880735e-04, - 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, - }); - - const auto expect_rs = makeTable(1, { - // Table 1 - 20.59, 28.19, 36.01, 44.09, - - // Table 2 - 32.91, 40.99, 49.36, 58.04, - }); - - check_is_close(pvto, expect_pvto); - check_is_close(rs , expect_rs ); -} - -BOOST_AUTO_TEST_CASE (PVTO_Exceed_Tabdims_Limits) -{ - // This checks that Flow's extended table allocation scheme does what - // it's supposed to do. Normally, one would announce the maximum sizes - // in the RUNSPEC keyword 'TABDIMS'. Note that the maximum sizes need - // to be big enough in order to run the case in ECLIPSE. Other than - // NTPVT, Flow does not really care about these declared maximum sizes. - - const auto rspec = std::string { R"(RUNSPEC -DIMENS - 10 10 10 / - -TITLE - Test PVTO Output - -OIL -WATER - -METRIC - -TABDIMS --- NTSFUN NTPVT NSSFUN NPPVT NTFIP NRPVT - 1* 2 1* 2 1* 1 -/ -)" }; - - const auto props = std::string { R"( -PVTO -20.59 50.00 1.10615 1.180 - 75.00 1.10164 1.247 / -28.19 70.00 1.12522 1.066 / -44.09 110.00 1.16437 0.880 - 135.00 1.15915 0.924 - 160.00 1.15428 0.968 - 185.00 1.14973 1.012 - 210.00 1.14547 1.056 / -/ -32.91 80.00 1.13304 1.04537 - 114.00 1.12837 1.10009 / -40.99 100.00 1.15276 0.97219 - 134.00 1.14786 1.02086 - 168.00 1.14328 1.06983 / -49.36 120.00 1.17297 0.91124 - 154.00 1.16783 0.95496 / -58.04 140.00 1.19374 0.85942 - 174.00 1.18836 0.89902 / -/ -)" }; - - const auto es = parse(rspec, props); - - auto tables = ::Opm::Tables(es.getUnits()); - tables.addPVTTables(es); - - const auto& tabdims = tables.tabdims(); - const auto& tab = tables.tab(); - - const auto ibpvto = tabdims[ Ix::PvtoMainStart ] - 1; - const auto jbpvto = tabdims[ Ix::PvtoCompStart ] - 1; - const auto nppvto = tabdims[ Ix::NumPvtoPressNodes ]; - const auto nrpvto = tabdims[ Ix::NumPvtoCompNodes ]; - const auto ntpvto = tabdims[ Ix::NumPvtoTables ]; - const auto ncol = 5; - - // Verify declared TABDIMS from input - { - const auto& tabd = es.runspec().tabdims(); - - BOOST_CHECK_EQUAL(tabd.getNumPVTTables(), 2); - BOOST_CHECK_EQUAL(tabd.getNumRSNodes(), 1); - BOOST_CHECK_EQUAL(tabd.getNumPressureNodes(), 2); - } - - // Verify active TABDIMS from dynamic sizes - BOOST_CHECK_EQUAL(nppvto, 5); // Table 1, Comp 3 - BOOST_CHECK_EQUAL(nrpvto, 4); // Table 2 - BOOST_CHECK_EQUAL(ntpvto, 2); - - const auto pvto = std::vector { - &tab[ ibpvto ] + 0, - &tab[ ibpvto ] + ntpvto*nrpvto*nppvto*ncol - }; - - const auto rs = std::vector { - &tab[ jbpvto ] + 0, - &tab[ jbpvto ] + ntpvto*nrpvto - }; - - const auto expect_pvto = makeTable(5, { - // Po 1/Bo 1/(Bo*mu_o) d(1/Bo)/dPo d(1/(Bo*mu_o))/dPo - // - // Table 1 (Comp 1) - 5.000000000000001e+01, 9.040365230755323e-01, 7.661326466741798e-01, 2.000000000000000e+20, 2.000000000000000e+20, - 7.500000000000000e+01, 9.077375549181221e-01, 7.279370929575959e-01, 1.480412737035941e-04, -1.527822148663356e-03, - 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, - 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, - 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, - - // Table 1 (Comp 2) ---------------------------------------------------------------------------------------------------------- - - 7.000000000000000e+01, 8.887150957146157e-01, 8.336914593945738e-01, 2.000000000000000e+20, 2.000000000000000e+20, - 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, - 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, - 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, - 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, - - // Table 1 (Comp 3) ---------------------------------------------------------------------------------------------------------- - - 1.100000000000000e+02, 8.588335322964350e-01, 9.759471957914034e-01, 2.000000000000000e+20, 2.000000000000000e+20, - 1.350000000000000e+02, 8.627011171979468e-01, 9.336592177466957e-01, 1.547033960604739e-04, -1.691519121788311e-03, - 1.600000000000000e+02, 8.663409224798143e-01, 8.949802918179900e-01, 1.455922112746988e-04, -1.547157037148228e-03, - 1.850000000000000e+02, 8.697694241256644e-01, 8.594559526933443e-01, 1.371400658340026e-04, -1.420973564985826e-03, - 2.100000000000000e+02, 8.730040943892027e-01, 8.267084227170479e-01, 1.293868105415319e-04, -1.309901199051855e-03, - - // Table 1 (Comp 4 -- unused) ------------------------------------------------------------------------------------------------ - - 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, - 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, - 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, - 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, - 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, - - // =========================================================================================================================== - - // Table 2 (Comp 1) - 8.000000000000000e+01, 8.825813740026830e-01, 8.442765470624592e-01, 2.000000000000000e+20, 2.000000000000000e+20, - 1.140000000000000e+02, 8.862341253312299e-01, 8.056014738168967e-01, 1.074338626043212e-04, -1.137502154281250e-03, - 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, - 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, - 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, - - // Table 2 (Comp 2) ---------------------------------------------------------------------------------------------------------- - - 1.000000000000000e+02, 8.674832575731288e-01, 8.922980668111468e-01, 2.000000000000000e+20, 2.000000000000000e+20, - 1.340000000000000e+02, 8.711863816144825e-01, 8.533847752037326e-01, 1.089154129809896e-04, -1.144508576688653e-03, - 1.680000000000000e+02, 8.746763697431950e-01, 8.175844477563677e-01, 1.026467096680142e-04, -1.052950807275436e-03, - 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, - 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, - - // Table 2 (Comp 3) ---------------------------------------------------------------------------------------------------------- - - 1.200000000000000e+02, 8.525367230193440e-01, 9.355786873044905e-01, 2.000000000000000e+20, 2.000000000000000e+20, - 1.540000000000000e+02, 8.562890146682309e-01, 8.966752687738030e-01, 1.103615190849091e-04, -1.144218192079043e-03, - 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, - 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, - 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, - - // Table 2 (Comp 4) ---------------------------------------------------------------------------------------------------------- - - 1.400000000000000e+02, 8.377033524888167e-01, 9.747310424342193e-01, 2.000000000000000e+20, 2.000000000000000e+20, - 1.740000000000000e+02, 8.414958430105355e-01, 9.360145970173471e-01, 1.115438388740827e-04, -1.138718982849180e-03, - 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, - 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, - 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, 2.000000000000000e+20, - }); - - const auto expect_rs = makeTable(1, { - // Table 1 - 20.59, 28.19, 44.09, +2.0e20, - - // Table 2 - 32.91, 40.99, 49.36, 58.04, - }); - - check_is_close(pvto, expect_pvto); - check_is_close(rs , expect_rs ); -} - -BOOST_AUTO_TEST_SUITE_END () - -// ===================================================================== - -BOOST_AUTO_TEST_SUITE (Water) - -BOOST_AUTO_TEST_CASE (PVTW) -{ - const auto rspec = std::string { R"(RUNSPEC -DIMENS - 10 10 10 / - -TITLE - Test PVTW Output - -WATER - -METRIC - -TABDIMS --- NTSFUN NTPVT NSSFUN NPPVT NTFIP NRPVT - 1* 2 1* 4 1* 3 -/ -)" }; - - const auto props = std::string { R"( -PVTW --- Pref Bw(Pref) Cw Vw(Pref) Cv - 200 1.23 0.321e-4 0.25 0.654e-3 / - 250 0.987 1.234e-5 0.314 0.9876e-5 / -)" }; - - const auto es = parse(rspec, props); - - auto tables = ::Opm::Tables(es.getUnits()); - tables.addPVTTables(es); - - const auto& tabdims = tables.tabdims(); - const auto& tab = tables.tab(); - - const auto ibpvtw = tabdims[ Ix::PvtwStart ] - 1; - const auto ntpvtw = tabdims[ Ix::NumPvtwTables ]; - const auto ncol = 5; - - BOOST_CHECK_EQUAL(ntpvtw, 2); - - const auto pvtw = std::vector { - &tab[ ibpvtw ] + 0, - &tab[ ibpvtw ] + ntpvtw*ncol - }; - - const auto expect_pvtw = makeTable(5, { - // Pw 1/Bw Cw 1/(Bw*mu_w) Cw - Cv - 2.000000000000000e+02, 8.130081300813008e-01, 3.210000000000000e-05, 3.252032520325203e+00, -6.219000000000000e-04, - 2.500000000000000e+02, 1.013171225937183e+00, 1.234000000000000e-05, 3.226659955213960e+00, 2.464000000000000e-06, - }); - - check_is_close(pvtw, expect_pvtw); -} - -BOOST_AUTO_TEST_SUITE_END () - -// ===================================================================== - -BOOST_AUTO_TEST_SUITE_END () - -// ===================================================================== - -BOOST_AUTO_TEST_SUITE (Density) - -BOOST_AUTO_TEST_CASE (Single_Region) -{ - const auto input = std::string { R"(RUNSPEC -DIMENS - 10 10 10 / - -TITLE - Test DENSITY Output - -OIL -WATER - -METRIC - -TABDIMS --- NTSFUN NTPVT NSSFUN NPPVT NTFIP NRPVT - 1* 1 1* 4 1* 3 -/ - -GRID -INIT -DXV - 10*100 / -DYV - 10*100 / -DZV - 10*10 / - -DEPTHZ - 121*2000 / - -PERMX - 1000*100.0 / - -COPY - 'PERMX' 'PERMY' / - 'PERMX' 'PERMZ' / -/ - -MULTIPLY - 'PERMZ' 0.1 / -/ - -PORO - 1000*0.3 / - -PROPS -DENSITY - 859.1 1033.2 0.859 / - -END -)" }; - - const auto es = ::Opm::EclipseState { Opm::Parser{}.parseString(input) }; - - auto tables = ::Opm::Tables(es.getUnits()); - tables.addDensity(es.getTableManager().getDensityTable()); - - const auto& tabdims = tables.tabdims(); - const auto& tab = tables.tab(); - - const auto ibdens = tabdims[ Ix::DensityTableStart ] - 1; - const auto ntdens = tabdims[ Ix::DensityNumTables ]; - const auto ncol = 3; - - BOOST_CHECK_EQUAL(ntdens, 1); - - const auto density = std::vector { - &tab[ ibdens ] + 0, - &tab[ ibdens ] + ntdens*ncol - }; - - const auto expect_density = makeTable(ncol, { - // rhoOS rhoWS rhoGS - 859.1, 1033.2, 0.859, - }); - - check_is_close(density, expect_density); -} - -BOOST_AUTO_TEST_CASE (Multi_Region) -{ - const auto input = std::string { R"(RUNSPEC -DIMENS - 10 10 10 / - -TITLE - Test DENSITY Output - -OIL -WATER - -METRIC - -TABDIMS --- NTSFUN NTPVT NSSFUN NPPVT NTFIP NRPVT - 1* 4 1* 4 1* 3 -/ - -GRID -INIT -DXV - 10*100 / -DYV - 10*100 / -DZV - 10*10 / - -DEPTHZ - 121*2000 / - -PERMX - 1000*100.0 / - -COPY - 'PERMX' 'PERMY' / - 'PERMX' 'PERMZ' / -/ - -MULTIPLY - 'PERMZ' 0.1 / -/ - -PORO - 1000*0.3 / - -PROPS -DENSITY - 859.1 1035.4 0.8591 / - 860.2 1037.6 0.8592 / - 861.3 1039.8 0.8593 / - 862.4 1042.0 0.8594 / - -END -)" }; - - const auto es = ::Opm::EclipseState { Opm::Parser{}.parseString(input) }; - - auto tables = ::Opm::Tables(es.getUnits()); - tables.addDensity(es.getTableManager().getDensityTable()); - - const auto& tabdims = tables.tabdims(); - const auto& tab = tables.tab(); - - const auto ibdens = tabdims[ Ix::DensityTableStart ] - 1; - const auto ntdens = tabdims[ Ix::DensityNumTables ]; - const auto ncol = 3; - - BOOST_CHECK_EQUAL(ntdens, 4); - - const auto density = std::vector { - &tab[ ibdens ] + 0, - &tab[ ibdens ] + ntdens*ncol - }; - - const auto expect_density = makeTable(ncol, { - // rhoOS rhoWS rhoGS - 859.1, 1035.4, 0.8591, - 860.2, 1037.6, 0.8592, - 861.3, 1039.8, 0.8593, - 862.4, 1042.0, 0.8594, - }); - - check_is_close(density, expect_density); -} - -BOOST_AUTO_TEST_SUITE_END () // Density diff --git a/ThirdParty/custom-opm-common/opm-common/tests/test_Wells.cpp b/ThirdParty/custom-opm-common/opm-common/tests/test_Wells.cpp deleted file mode 100644 index 95274a52b6..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/test_Wells.cpp +++ /dev/null @@ -1,131 +0,0 @@ -/* - Copyright 2016 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include "config.h" - -#define BOOST_TEST_MODULE Wells -#include - -#include - -#include - -using namespace Opm; -using rt = data::Rates::opt; - -BOOST_AUTO_TEST_CASE(has) { - data::Rates rates; - - rates.set( rt::wat, 10 ); - BOOST_CHECK( rates.has( rt::wat ) ); - BOOST_CHECK( !rates.has( rt::gas ) ); - BOOST_CHECK( !rates.has( rt::oil ) ); - - rates.set( rt::gas, 0 ); - BOOST_CHECK( rates.has( rt::gas ) ); - BOOST_CHECK( !rates.has( rt::oil ) ); -} - -BOOST_AUTO_TEST_CASE(set_and_get) { - data::Rates rates; - - const double wat = 10; - const double gas = 10; - - rates.set( rt::wat, wat ); - rates.set( rt::gas, gas ); - - BOOST_CHECK_EQUAL( wat, rates.get( rt::wat ) ); - BOOST_CHECK_EQUAL( gas, rates.get( rt::gas ) ); -} - -BOOST_AUTO_TEST_CASE(get_wrong) { - data::Rates rates; - const double wat = 10; - const double gas = 10; - - rates.set( rt::wat, wat ); - rates.set( rt::gas, gas ); - - const double def = 1; - - BOOST_CHECK_EQUAL( def, rates.get( rt::oil, def ) ); - BOOST_CHECK_THROW( rates.get( rt::oil ), std::invalid_argument ); -} - - - -BOOST_AUTO_TEST_CASE(get_completions) { - data::Rates r1, r2, rc1, rc2, rc3; - r1.set( data::Rates::opt::wat, 5.67 ); - r1.set( data::Rates::opt::oil, 6.78 ); - r1.set( data::Rates::opt::gas, 7.89 ); - - r2.set( data::Rates::opt::wat, 8.90 ); - r2.set( data::Rates::opt::oil, 9.01 ); - r2.set( data::Rates::opt::gas, 10.12 ); - - rc1.set( data::Rates::opt::wat, 20.41 ); - rc1.set( data::Rates::opt::oil, 21.19 ); - rc1.set( data::Rates::opt::gas, 22.41 ); - - rc2.set( data::Rates::opt::wat, 23.19 ); - rc2.set( data::Rates::opt::oil, 24.41 ); - rc2.set( data::Rates::opt::gas, 25.19 ); - - rc3.set( data::Rates::opt::wat, 26.41 ); - rc3.set( data::Rates::opt::oil, 27.19 ); - rc3.set( data::Rates::opt::gas, 28.41 ); - - data::Well w1, w2; - w1.rates = r1; - w1.bhp = 1.23; - w1.temperature = 3.45; - w1.control = 1; - - /* - * the completion keys (active indices) and well names correspond to the - * input deck. All other entries in the well structures are arbitrary. - */ - w1.connections.push_back( { 88, rc1, 30.45, 123.45, 543.21, 0.123, 0.5, 17.29 } ); - w1.connections.push_back( { 288, rc2, 33.19, 67.89, 98.76, 0.5, 0.125, 355.113 } ); - - w2.rates = r2; - w2.bhp = 2.34; - w2.temperature = 4.56; - w2.control = 2; - w2.connections.push_back( { 188, rc3, 36.22, 19.28, 28.91, 0.125, 0.125, 3.141 } ); - - data::Wells wellRates; - - wellRates["OP_1"] = w1; - wellRates["OP_2"] = w2; - - BOOST_CHECK_EQUAL( 0.0, wellRates.get("NO_SUCH_WELL" , data::Rates::opt::wat) ); - BOOST_CHECK_EQUAL( 5.67 , wellRates.get( "OP_1" , data::Rates::opt::wat)); - - BOOST_CHECK_EQUAL( 0.0, wellRates.get("OP_2" , 10000 , data::Rates::opt::wat) ); - BOOST_CHECK_EQUAL( 26.41 , wellRates.get( "OP_2" , 188 , data::Rates::opt::wat)); - - - BOOST_CHECK(w1.find_connection(1234567) == nullptr); - const auto& conn = w1.find_connection(88); - BOOST_CHECK_EQUAL( 20.41, conn->rates.get(data::Rates::opt::wat)); - BOOST_CHECK_EQUAL( 22.41, conn->rates.get(data::Rates::opt::gas)); -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/test_WindowedArray.cpp b/ThirdParty/custom-opm-common/opm-common/tests/test_WindowedArray.cpp deleted file mode 100644 index 53d9889778..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/test_WindowedArray.cpp +++ /dev/null @@ -1,158 +0,0 @@ -/* - Copyright 2018 Statoil IT - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#define BOOST_TEST_MODULE Windowed_Array - -#include - -#include - -#include -#include -#include -#include - -BOOST_AUTO_TEST_SUITE(WriteOperations) - -BOOST_AUTO_TEST_CASE(EmptyArray) -{ - using Wa = Opm::RestartIO::Helpers::WindowedArray; - using Wm = Opm::RestartIO::Helpers::WindowedMatrix; - BOOST_CHECK_NO_THROW( Wa( Wa::NumWindows{ 0 }, Wa::WindowSize{ 1 }) ); - BOOST_CHECK_NO_THROW( Wm( Wm::NumRows{ 0 }, Wm::NumCols{ 2 }, Wm::WindowSize{ 3 } )); - - BOOST_CHECK_THROW( Wa(Wa::NumWindows{ 5 }, Wa::WindowSize{ 0 }), std::invalid_argument); - BOOST_CHECK_THROW( Wm(Wm::NumRows{ 3 }, Wm::NumCols{ 0 }, Wm::WindowSize{ 4 } ), std::invalid_argument); - BOOST_CHECK_THROW( Wm(Wm::NumRows{ 3 }, Wm::NumCols{ 2 }, Wm::WindowSize{ 0 } ), std::invalid_argument); -} - - -BOOST_AUTO_TEST_CASE(Array) -{ - using Wa = Opm::RestartIO::Helpers::WindowedArray; - - auto wa = Wa{ Wa::NumWindows{ 5 }, Wa::WindowSize{ 7 } }; - - for (auto m = wa.numWindows(), i = 0*m; i < m; ++i) { - auto w = wa[i]; - - std::fill(std::begin(w), std::end(w), 10*i); - } - - BOOST_CHECK_EQUAL(wa.numWindows(), Wa::Idx{5}); - BOOST_CHECK_EQUAL(wa.windowSize(), Wa::Idx{7}); - - { - const auto expect = std::vector{ - // 0 1 2 3 4 5 6 - 0, 0, 0, 0, 0, 0, 0, // 0 - 10, 10, 10, 10, 10, 10, 10, // 1 - 20, 20, 20, 20, 20, 20, 20, // 2 - 30, 30, 30, 30, 30, 30, 30, // 3 - 40, 40, 40, 40, 40, 40, 40, // 4 - }; - - const auto& actual = wa.data(); - - BOOST_CHECK_EQUAL_COLLECTIONS(std::begin(actual), std::end(actual), - std::begin(expect), std::end(expect)); - } - - for (auto m = wa.numWindows(), i = 0*m; i < m; ++i) { - auto w = wa[i]; - - for (auto n = w.size(), j = 0*n; j < n; ++j) { - w[j] = 10*i - 3*j; - } - } - - { - const auto expect = std::vector{ - // 0 1 2 3 4 5 6 - 0, - 3, - 6, - 9, -12, -15, -18, // 0 - 10, 7, 4, 1, - 2, - 5, - 8, // 1 - 20, 17, 14, 11, 8, 5, 2, // 2 - 30, 27, 24, 21, 18, 15, 12, // 3 - 40, 37, 34, 31, 28, 25, 22, // 4 - }; - - const auto& actual = wa.data(); - - BOOST_CHECK_EQUAL_COLLECTIONS(std::begin(actual), std::end(actual), - std::begin(expect), std::end(expect)); - } -} - -// ==================================================================== - -BOOST_AUTO_TEST_CASE(Matrix) -{ - using Wm = Opm::RestartIO::Helpers::WindowedMatrix; - - auto wm = Wm{ Wm::NumRows{ 3 }, Wm::NumCols{ 2 }, Wm::WindowSize{ 4 } }; - - BOOST_CHECK_EQUAL(wm.numCols(), Wm::Idx{2}); - BOOST_CHECK_EQUAL(wm.numRows(), Wm::Idx{3}); - - for (auto m = wm.numRows(), i = 0*m; i < m; ++i) { - for (auto n = wm.numCols(), j = 0*n; j < n; ++j) { - auto w = wm(i, j); - - std::fill(std::begin(w), std::end(w), 100*i + 10*j); - } - } - - { - const auto expect = std::vector { - 0, 0, 0, 0, 10, 10, 10, 10, - 100, 100, 100, 100, 110, 110, 110, 110, - 200, 200, 200, 200, 210, 210, 210, 210, - }; - - const auto& actual = wm.data(); - - BOOST_CHECK_EQUAL_COLLECTIONS(std::begin(actual), std::end(actual), - std::begin(expect), std::end(expect)); - } - - for (auto m = wm.numRows(), i = 0*m; i < m; ++i) { - for (auto n = wm.numCols(), j = 0*n; j < n; ++j) { - auto w = wm(i, j); - - for (auto sz = w.size(), k = 0*sz; k < sz; ++k) { - w[k] = 100*i + 10*j - 13*k; - } - } - } - - { - const auto expect = std::vector { - 0, - 13, - 26, - 39, 10, - 3, - 16, - 29, - 100, 87, 74, 61, 110, 97, 84, 71, - 200, 187, 174, 161, 210, 197, 184, 171, - }; - - const auto& actual = wm.data(); - - BOOST_CHECK_EQUAL_COLLECTIONS(std::begin(actual), std::end(actual), - std::begin(expect), std::end(expect)); - } -} - -BOOST_AUTO_TEST_SUITE_END () diff --git a/ThirdParty/custom-opm-common/opm-common/tests/test_calculateCellVol.cpp b/ThirdParty/custom-opm-common/opm-common/tests/test_calculateCellVol.cpp deleted file mode 100644 index 101bb99e35..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/test_calculateCellVol.cpp +++ /dev/null @@ -1,63 +0,0 @@ - -/* - Copyright 2018 Statoil ASA. - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include "config.h" - -#define NVERBOSE // Suppress own messages when throw()ing - -#define BOOST_TEST_MODULE CubicTest -#include -#include - -/* --- our own headers --- */ -#include - - - -//using namespace Opm; - -BOOST_AUTO_TEST_SUITE () - -BOOST_AUTO_TEST_CASE (calc_cellvol) -{ - - /* This is four example cells with different geometries. */ - - std::array x1 {488100.140035, 488196.664549, 488085.584866, 488182.365605, 488099.065709, 488195.880889, 488084.559409, 488181.633495}; - std::array y1 {6692539.945578, 6692550.834909, 6692638.574346, 6692650.086244, 6692538.810649, 6692550.080826, 6692637.628127, 6692649.429649}; - std::array z1 {2841.856000, 2840.138000, 2842.042000, 2839.816000, 2846.142000, 2844.252000, 2846.244000, 2843.868000}; - - std::array x2 {489539.050892, 489638.562319, 489527.025803, 489627.914272, 489537.173839, 489638.562319, 489524.119410, 489627.914272}; - std::array y2 {6695907.426615, 6695923.399538, 6696003.688945, 6696020.073168, 6695908.526577, 6695923.399538, 6696005.533276, 6696020.073168}; - std::array z2 {2652.859000, 2651.765000, 2652.381000, 2652.608000, 2655.276000, 2651.765000, 2656.381000, 2652.608000}; - - std::array x3 {486819.009056, 486904.877179, 486812.975440, 486900.527416, 486818.450563, 486903.978383, 486812.975440, 486900.527416}; - std::array y3 {6694966.253697, 6694998.360834, 6695061.104896, 6695086.717018, 6694967.135567, 6695000.197284, 6695061.104896, 6695086.717018}; - std::array z3 {2795.193000, 2799.997000, 2792.240000, 2793.972000, 2795.671000, 2800.927000, 2792.240000, 2793.972000}; - - std::array x4 {489194.711544, 489259.232449, 489206.220219, 489294.099099, 489194.711544, 489254.725623, 489201.723535, 489289.423088}; - std::array y4 {6694510.504054, 6694525.862296, 6694608.410134, 6694621.029382, 6694510.504054, 6694526.272988, 6694608.819829, 6694621.467114}; - std::array z4 {2740.7340, 2754.7810, 2730.0150, 2726.1080, 2740.7340, 2758.3530, 2733.9490, 2730.1080}; - - BOOST_REQUIRE_CLOSE (calculateCellVol(x1,y1,z1), 40368.7852157, 1e-9); - BOOST_REQUIRE_CLOSE (calculateCellVol(x2,y2,z2), 15766.9187847524, 1e-9); - BOOST_REQUIRE_CLOSE (calculateCellVol(x3,y3,z3), 3268.8819007839, 1e-9); - BOOST_REQUIRE_CLOSE (calculateCellVol(x4,y4,z4), 23391.4917234564, 1e-9); -} - -BOOST_AUTO_TEST_SUITE_END() diff --git a/ThirdParty/custom-opm-common/opm-common/tests/test_cmp.cpp b/ThirdParty/custom-opm-common/opm-common/tests/test_cmp.cpp deleted file mode 100644 index c23b627051..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/test_cmp.cpp +++ /dev/null @@ -1,123 +0,0 @@ -/* - Copyright 2016 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include - -#define BOOST_TEST_MODULE FLOAT_CMP_TESTS -#include - -#include - -#include - -using namespace Opm; - -/** - Ahhh - the joys of comparing floating point numbers .... - - http://www.cygnus-software.com/papers/comparingfloats/comparingfloats.htm -*/ - -BOOST_AUTO_TEST_CASE(TestSCalarcmp) { - const double abs_epsilon = cmp::default_abs_epsilon; - const double rel_epsilon = cmp::default_rel_epsilon; - - BOOST_CHECK( cmp::scalar_equal(1,1)); - BOOST_CHECK_EQUAL( false , cmp::scalar_equal(1,0)); - BOOST_CHECK_EQUAL( false , cmp::scalar_equal(0,1)); - BOOST_CHECK_EQUAL( false , cmp::scalar_equal(-1,1)); - - - - double v1,v2; - /* Should be equal: */ - { - v1 = 0.0; - v2 = 0.0; - BOOST_CHECK( cmp::scalar_equal( v1 , v2)); - - v1 = 1e-12; - v2 = v1 + 0.5*abs_epsilon; - BOOST_CHECK( cmp::scalar_equal( v1 , v2)); - - v1 = 7.0; - v2 = 7.0; - BOOST_CHECK( cmp::scalar_equal( v1 , v2)); - - v1 = -7.0; - v2 = -7.0; - BOOST_CHECK( cmp::scalar_equal( v1 , v2)); - - v1 = 0; - v2 = 0.5 * abs_epsilon; - BOOST_CHECK( cmp::scalar_equal( v1 , v2)); - - - v1 = 1e7; - v2 = 1e7 + 2*abs_epsilon; - BOOST_CHECK( cmp::scalar_equal( v1 , v2 )); - - v1 = 1e7*(1 - abs_epsilon); - v2 = 1e7*(1 + rel_epsilon); - BOOST_CHECK( !cmp::scalar_equal( v1 , v2 )); - - v1 = 1e7*(1 + abs_epsilon); - v2 = 1e7*(1 + rel_epsilon); - BOOST_CHECK( cmp::scalar_equal( v1 , v2 )); - } - - /* Should be different: */ - { - v1 = 0; - v2 = 1.5 * abs_epsilon; - BOOST_CHECK( !cmp::scalar_equal( v1 , v2 )); - - v1 = 1e-8; - v2 = v1 + 1.5*abs_epsilon; - BOOST_CHECK( !cmp::scalar_equal( v1 , v2 )); - - v1 = 1; - v2 = v1*(1 + 2*rel_epsilon + abs_epsilon); - BOOST_CHECK( !cmp::scalar_equal( v1 , v2 )); - - v1 = 10; - v2 = v1*(1 + 2*rel_epsilon + abs_epsilon); - BOOST_CHECK( !cmp::scalar_equal( v1 , v2 )); - - v1 = 1e7; - v2 = 1e7*(1 + 2*rel_epsilon + abs_epsilon); - BOOST_CHECK( !cmp::scalar_equal( v1 , v2 )); - } -} - -/* Ensure that float instantiation works. */ -BOOST_AUTO_TEST_CASE(TestFloatcmp) { - std::vector v1; - std::vector v2; - for (size_t i =0; i < 10; i++) { - v1.push_back( i * 1.0 ); - v2.push_back( i * 1.0 ); - } - BOOST_CHECK( cmp::vector_equal(v1 , v2 )); - v1.push_back( 27 ); - BOOST_CHECK( !cmp::vector_equal(v1 , v2 )); - v2.push_back( 27 ); - BOOST_CHECK( cmp::vector_equal(v1 , v2 )); -} - diff --git a/ThirdParty/custom-opm-common/opm-common/tests/test_compareSummary.cpp b/ThirdParty/custom-opm-common/opm-common/tests/test_compareSummary.cpp deleted file mode 100644 index 29b08572cb..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/test_compareSummary.cpp +++ /dev/null @@ -1,95 +0,0 @@ -/* - + Copyright 2016 Statoil ASA. - + - + This file is part of the Open Porous Media project (OPM). - + - + OPM is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - + the Free Software Foundation, either version 3 of the License, or - + (at your option) any later version. - + - + OPM is distributed in the hope that it will be useful, - + but WITHOUT ANY WARRANTY; without even the implied warranty of - + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - + GNU General Public License for more details. - + - + You should have received a copy of the GNU General Public License - + along with OPM. If not, see . - + */ - - -#include "config.h" -#include -#include - - -#define BOOST_TEST_MODULE CalculationTest -#include - - -BOOST_AUTO_TEST_CASE(deviation){ - double a = 5; - double b = 10; - const double tol = 1.0e-14; - - Deviation dev = SummaryComparator::calculateDeviations(a,b); - BOOST_CHECK_EQUAL(dev.abs, 5); - BOOST_CHECK_CLOSE(dev.rel, 5.0/10.0, tol); -} - - -BOOST_AUTO_TEST_CASE(area) { - double width1 = 0; - double width2 = 2; - double width3 = 10; - - double area1 = SummaryIntegrationTest::getRectangleArea(1,width2); - double area2 = SummaryIntegrationTest::getRectangleArea(10,width1); - double area3 = SummaryIntegrationTest::getRectangleArea(4,width3); - - BOOST_CHECK_EQUAL(area1,2); - BOOST_CHECK_EQUAL(area2,0); - BOOST_CHECK_EQUAL(area3,40); -} - - -BOOST_AUTO_TEST_CASE(operatorOverload) { - WellProductionVolume volumeA; - WellProductionVolume volumeB; - volumeA.total = 2; - volumeA.error = 2; - volumeB.total = 3; - volumeB.error = 1; - volumeA += volumeB; - - BOOST_CHECK_EQUAL(volumeA.total,5); - BOOST_CHECK_EQUAL(volumeA.error,3); -} - - -BOOST_AUTO_TEST_CASE(integration) { - std::vector data1 = {2,2,2,2,2,2}; - std::vector time1 = {0,1,2,3,4,5}; - - double val1 = SummaryIntegrationTest::integrate(time1, data1); - - std::vector data2 = {3, 3, 4, 3, 2, 1, 0, 4}; - std::vector time2 = {0, 0.5, 1, 2, 3, 3.5, 4.5, 5}; - - std::vector data3 = {0, 0, 0, 0, 0, 0, 0, 0}; - - std::vector data4 = {0, 1, 4, 1, 2, 4, 0, 2, 5, 6, 3}; - std::vector time4 = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10}; - - std::vector data5 = {0, 4, 3, 2, 5, 6, 3, 1, 0, 4, 2, 1}; - std::vector time5 = {0, 0.5, 1, 2.5, 3, 4, 4.5, 6, 7.5,8, 9.5 ,10}; - - double val2 = SummaryIntegrationTest::integrateError(time1, data1, time2, data2); - double val3 = SummaryIntegrationTest::integrateError(time1, data1, time2, data3); - double val4 = SummaryIntegrationTest::integrateError(time1, data1, time1, data1); - double val5 = SummaryIntegrationTest::integrateError(time4, data4, time5, data5); - BOOST_CHECK_EQUAL(val1,10); - BOOST_CHECK_EQUAL(val2,6); - BOOST_CHECK_EQUAL(val3,10); - BOOST_CHECK_EQUAL(val4,0); - BOOST_CHECK_EQUAL(val5,24.5); -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/test_cubic.cpp b/ThirdParty/custom-opm-common/opm-common/tests/test_cubic.cpp deleted file mode 100644 index 5210e7d4fd..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/test_cubic.cpp +++ /dev/null @@ -1,68 +0,0 @@ -//=========================================================================== -// -// File: monotcubicinterpolator_test.cpp -// -// Created: Tue Dec 8 12:25:30 2009 -// -// Author(s): Atgeirr F Rasmussen -// Bård Skaflestad -// -// $Date$ -// -// $Revision$ -// -//=========================================================================== - -/* - Copyright 2009, 2010 SINTEF ICT, Applied Mathematics. - Copyright 2009, 2010 Statoil ASA. - Portions Copyright 2013 Uni Research AS. - - This file is part of The Open Reservoir Simulator Project (OpenRS). - - OpenRS is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OpenRS is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenRS. If not, see . -*/ - -#include - -#define NVERBOSE // Suppress own messages when throw()ing - -#define BOOST_TEST_MODULE CubicTest -#include -#include - -/* --- our own headers --- */ -#include -using namespace Opm; - -BOOST_AUTO_TEST_SUITE () - -BOOST_AUTO_TEST_CASE (cubic) -{ - const int num_v = 3; - double xv[num_v] = {0.0, 1.0, 2.0}; - double fv[num_v] = {10.0, 21.0, 2.0}; - std::vector x(xv, xv + num_v); - std::vector f(fv, fv + num_v); - MonotCubicInterpolator interp(x, f); - BOOST_REQUIRE_CLOSE (interp.evaluate(-1.0), 10., 0.00001); - BOOST_REQUIRE_CLOSE (interp.evaluate(0.0), 10., 0.00001); - BOOST_REQUIRE_CLOSE (interp.evaluate(0.0001), 10.0011, 0.00001); - BOOST_REQUIRE_CLOSE (interp.evaluate(0.5), 17.375, 0.00001); - BOOST_REQUIRE_CLOSE (interp.evaluate(1.0), 21., 0.00001); - BOOST_REQUIRE_CLOSE (interp.evaluate(2.0), 2., 0.00001); - BOOST_REQUIRE_CLOSE (interp.evaluate(4.0), 2., 0.00001); -} - -BOOST_AUTO_TEST_SUITE_END() diff --git a/ThirdParty/custom-opm-common/opm-common/tests/test_messagelimiter.cpp b/ThirdParty/custom-opm-common/opm-common/tests/test_messagelimiter.cpp deleted file mode 100644 index 3059089bd7..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/test_messagelimiter.cpp +++ /dev/null @@ -1,160 +0,0 @@ -/* - Copyright 2016 SINTEF ICT, Applied Mathematics. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include - -#define BOOST_TEST_MODULE MESSAGELIMITER_TESTS - -#include -#include -#include - -#include -#include - -using namespace Opm; - - -BOOST_AUTO_TEST_CASE(ConstructionAndLimits) -{ - MessageLimiter m1; - BOOST_CHECK_EQUAL(m1.tagMessageLimit(), MessageLimiter::NoLimit); - MessageLimiter m2(0); - BOOST_CHECK_EQUAL(m2.tagMessageLimit(), 0); - MessageLimiter m3(1); - BOOST_CHECK_EQUAL(m3.tagMessageLimit(), 1); - MessageLimiter m4(-4); - BOOST_CHECK_EQUAL(m4.tagMessageLimit(), MessageLimiter::NoLimit); -} - -BOOST_AUTO_TEST_CASE(TagResponse) -{ - using namespace Opm; - { - // No limits. - MessageLimiter m; - BOOST_CHECK(m.handleMessageLimits("tag1", Log::MessageType::Info) == MessageLimiter::Response::PrintMessage); - BOOST_CHECK(m.handleMessageLimits("tag2", Log::MessageType::Info) == MessageLimiter::Response::PrintMessage); - BOOST_CHECK(m.handleMessageLimits("tag1", Log::MessageType::Info) == MessageLimiter::Response::PrintMessage); - BOOST_CHECK(m.handleMessageLimits("tag2", Log::MessageType::Info) == MessageLimiter::Response::PrintMessage); - BOOST_CHECK(m.handleMessageLimits("tag1", Log::MessageType::Info) == MessageLimiter::Response::PrintMessage); - BOOST_CHECK(m.handleMessageLimits("tag2", Log::MessageType::Info) == MessageLimiter::Response::PrintMessage); - BOOST_CHECK(m.categoryMessageCounts().at(Log::MessageType::Info) == 6); - } - - { - // Limit == 0. - MessageLimiter m(0); - BOOST_CHECK(m.handleMessageLimits("tag1", Log::MessageType::Info) == MessageLimiter::Response::JustOverTagLimit); - BOOST_CHECK(m.handleMessageLimits("tag2", Log::MessageType::Info) == MessageLimiter::Response::JustOverTagLimit); - BOOST_CHECK(m.handleMessageLimits("tag1", Log::MessageType::Info) == MessageLimiter::Response::OverTagLimit); - BOOST_CHECK(m.handleMessageLimits("tag2", Log::MessageType::Info) == MessageLimiter::Response::OverTagLimit); - BOOST_CHECK(m.handleMessageLimits("tag1", Log::MessageType::Info) == MessageLimiter::Response::OverTagLimit); - BOOST_CHECK(m.handleMessageLimits("tag2", Log::MessageType::Info) == MessageLimiter::Response::OverTagLimit); - BOOST_CHECK(m.categoryMessageCounts().at(Log::MessageType::Info) == 0); - } - - { - // Limit == 1. - MessageLimiter m(1); - BOOST_CHECK(m.handleMessageLimits("tag1", Log::MessageType::Info) == MessageLimiter::Response::PrintMessage); - BOOST_CHECK(m.handleMessageLimits("tag2", Log::MessageType::Info) == MessageLimiter::Response::PrintMessage); - BOOST_CHECK(m.handleMessageLimits("tag1", Log::MessageType::Info) == MessageLimiter::Response::JustOverTagLimit); - BOOST_CHECK(m.handleMessageLimits("tag2", Log::MessageType::Info) == MessageLimiter::Response::JustOverTagLimit); - BOOST_CHECK(m.handleMessageLimits("tag1", Log::MessageType::Info) == MessageLimiter::Response::OverTagLimit); - BOOST_CHECK(m.handleMessageLimits("tag2", Log::MessageType::Info) == MessageLimiter::Response::OverTagLimit); - BOOST_CHECK(m.categoryMessageCounts().at(Log::MessageType::Info) == 2); - } -} - - -BOOST_AUTO_TEST_CASE(CategoryResponse) -{ - using namespace Opm; - { - // No limits. - MessageLimiter m; - BOOST_CHECK(m.handleMessageLimits("", Log::MessageType::Info) == MessageLimiter::Response::PrintMessage); - BOOST_CHECK(m.handleMessageLimits("", Log::MessageType::Info) == MessageLimiter::Response::PrintMessage); - BOOST_CHECK(m.handleMessageLimits("", Log::MessageType::Info) == MessageLimiter::Response::PrintMessage); - BOOST_CHECK(m.categoryMessageCounts().at(Log::MessageType::Info) == 3); - } - - { - // Limit == 0. - MessageLimiter m(MessageLimiter::NoLimit, - {{ Log::MessageType::Info, 0 }}); - BOOST_CHECK(m.handleMessageLimits("", Log::MessageType::Info) == MessageLimiter::Response::JustOverCategoryLimit); - BOOST_CHECK(m.handleMessageLimits("", Log::MessageType::Info) == MessageLimiter::Response::OverCategoryLimit); - BOOST_CHECK(m.handleMessageLimits("", Log::MessageType::Info) == MessageLimiter::Response::OverCategoryLimit); - BOOST_CHECK(m.categoryMessageCounts().at(Log::MessageType::Info) == 3); - } - - { - // Limit == 1. - MessageLimiter m(MessageLimiter::NoLimit, - {{ Log::MessageType::Info, 1 }}); - BOOST_CHECK(m.handleMessageLimits("", Log::MessageType::Info) == MessageLimiter::Response::PrintMessage); - BOOST_CHECK(m.handleMessageLimits("", Log::MessageType::Info) == MessageLimiter::Response::JustOverCategoryLimit); - BOOST_CHECK(m.handleMessageLimits("", Log::MessageType::Info) == MessageLimiter::Response::OverCategoryLimit); - BOOST_CHECK(m.categoryMessageCounts().at(Log::MessageType::Info) == 3); - } -} - - -BOOST_AUTO_TEST_CASE(MixedResponse) -{ - using namespace Opm; - { - // Tag Limit == 1. Category limit = 0. - MessageLimiter m(1, {{ Log::MessageType::Info, 0 }}); - BOOST_CHECK(m.handleMessageLimits("tag1", Log::MessageType::Info) == MessageLimiter::Response::JustOverCategoryLimit); - BOOST_CHECK(m.handleMessageLimits("tag2", Log::MessageType::Info) == MessageLimiter::Response::OverCategoryLimit); - BOOST_CHECK(m.handleMessageLimits("tag1", Log::MessageType::Info) == MessageLimiter::Response::JustOverTagLimit); - BOOST_CHECK(m.handleMessageLimits("tag2", Log::MessageType::Info) == MessageLimiter::Response::JustOverTagLimit); - BOOST_CHECK(m.handleMessageLimits("tag1", Log::MessageType::Info) == MessageLimiter::Response::OverTagLimit); - BOOST_CHECK(m.handleMessageLimits("tag2", Log::MessageType::Info) == MessageLimiter::Response::OverTagLimit); - BOOST_CHECK(m.categoryMessageCounts().at(Log::MessageType::Info) == 2); - } - - { - // Tag Limit == 0. Category limit = 1. - MessageLimiter m(0, {{ Log::MessageType::Info, 1 }}); - BOOST_CHECK(m.handleMessageLimits("tag1", Log::MessageType::Info) == MessageLimiter::Response::JustOverTagLimit); - BOOST_CHECK(m.handleMessageLimits("tag2", Log::MessageType::Info) == MessageLimiter::Response::JustOverTagLimit); - BOOST_CHECK(m.handleMessageLimits("tag1", Log::MessageType::Info) == MessageLimiter::Response::OverTagLimit); - BOOST_CHECK(m.handleMessageLimits("tag2", Log::MessageType::Info) == MessageLimiter::Response::OverTagLimit); - BOOST_CHECK(m.handleMessageLimits("tag1", Log::MessageType::Info) == MessageLimiter::Response::OverTagLimit); - BOOST_CHECK(m.handleMessageLimits("tag2", Log::MessageType::Info) == MessageLimiter::Response::OverTagLimit); - BOOST_CHECK(m.categoryMessageCounts().at(Log::MessageType::Info) == 0); - } - - { - // Tag Limit == 1. Category limit = 1. - MessageLimiter m(1, {{ Log::MessageType::Info, 1 }}); - BOOST_CHECK(m.handleMessageLimits("tag1", Log::MessageType::Info) == MessageLimiter::Response::PrintMessage); - BOOST_CHECK(m.handleMessageLimits("tag2", Log::MessageType::Info) == MessageLimiter::Response::JustOverCategoryLimit); - BOOST_CHECK(m.handleMessageLimits("tag1", Log::MessageType::Info) == MessageLimiter::Response::JustOverTagLimit); - BOOST_CHECK(m.handleMessageLimits("tag2", Log::MessageType::Info) == MessageLimiter::Response::JustOverTagLimit); - BOOST_CHECK(m.handleMessageLimits("tag1", Log::MessageType::Info) == MessageLimiter::Response::OverTagLimit); - BOOST_CHECK(m.handleMessageLimits("tag2", Log::MessageType::Info) == MessageLimiter::Response::OverTagLimit); - BOOST_CHECK(m.categoryMessageCounts().at(Log::MessageType::Info) == 2); - } - -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/test_nonuniformtablelinear.cpp b/ThirdParty/custom-opm-common/opm-common/tests/test_nonuniformtablelinear.cpp deleted file mode 100644 index e30c9bc327..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/test_nonuniformtablelinear.cpp +++ /dev/null @@ -1,88 +0,0 @@ -/* - Copyright 2009, 2010 SINTEF ICT, Applied Mathematics. - Copyright 2009, 2010 Statoil ASA. - - This file is part of The Open Reservoir Simulator Project (OpenRS). - - OpenRS is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OpenRS is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenRS. If not, see . -*/ -#include - -#define NVERBOSE // to suppress our messages when throwing - - -#define BOOST_TEST_MODULE NonuniformTableLinearTests -#include - -#include - - -BOOST_AUTO_TEST_CASE(utility_functions) -{ - // Test isNondecreasing(). - using Opm::isNondecreasing; - double xva1[] = { -1.0, 2.0, 2.2, 3.0, 5.0 }; - const int numvals1 = sizeof(xva1)/sizeof(xva1[0]); - BOOST_CHECK(isNondecreasing(xva1, xva1 + numvals1)); - double xva2[] = { -1.0, 2.0, 2.0, 2.0, 5.0 }; - const int numvals2 = sizeof(xva2)/sizeof(xva2[0]); - BOOST_CHECK(isNondecreasing(xva2, xva2 + numvals2)); - double xva3[] = { -1.0, 2.0, 1.9, 3.0, 5.0 }; - const int numvals3 = sizeof(xva3)/sizeof(xva3[0]); - BOOST_CHECK(!isNondecreasing(xva3, xva3 + numvals3)); -} - -BOOST_AUTO_TEST_CASE(table_operations) -{ - // Make a simple table. - double xva[] = { -1.0, 2.0, 2.2, 3.0, 5.0 }; - const int numvals = sizeof(xva)/sizeof(xva[0]); - std::vector xv(xva, xva + numvals); - double yva[numvals] = { 1.0, 2.0, 3.0, 4.0, 2.0 }; - std::vector yv(yva, yva + numvals); - Opm::NonuniformTableLinear t1(xv, yv); - Opm::NonuniformTableLinear t1_copy1(xv, yv); - Opm::NonuniformTableLinear t1_copy2(t1); - - // Check equality. - BOOST_CHECK(t1 == t1_copy1); - BOOST_CHECK(t1 == t1_copy2); - - // Check some evaluations. - for (int i = 0; i < numvals; ++i) { - BOOST_CHECK_EQUAL(t1(xv[i]), yv[i]); - } - BOOST_CHECK_EQUAL(t1(2.6), 3.5); - BOOST_CHECK_EQUAL(t1(4.0), 3.0); - BOOST_CHECK_EQUAL(t1.derivative(4.0), -1.0); - // Derivatives at endpoints. - BOOST_CHECK_CLOSE(t1.derivative(-1.0), 1.0/3.0, 1e-13); - BOOST_CHECK_CLOSE(t1.derivative(5.0), -1.0, 1e-13); - // Extrapolation of values. - BOOST_CHECK_CLOSE(t1(xv[0] - 1.0), 2.0/3.0, 1e-13); - BOOST_CHECK_CLOSE(t1(xv.back() + 1.0), 1.0, 1e-13); - - // Domains. - BOOST_CHECK_EQUAL(t1.domain().first, xv[0]); - BOOST_CHECK_EQUAL(t1.domain().second, xv.back()); - std::pair new_domain(-100.0, 20.0); - t1.rescaleDomain(new_domain); - BOOST_CHECK_EQUAL(t1.domain().first, new_domain.first); - BOOST_CHECK_EQUAL(t1.domain().second, new_domain.second); - for (int i = 0; i < numvals; ++i) { - BOOST_CHECK_EQUAL(t1((xv[i] + 1.0)*20.0 - 100.0), yv[i]); - } - BOOST_CHECK_EQUAL(t1(0.0), 3.0); - BOOST_CHECK(std::fabs(t1.derivative(0.0) + 1.0/20.0) < 1e-11); -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/test_param.cpp b/ThirdParty/custom-opm-common/opm-common/tests/test_param.cpp deleted file mode 100644 index 1ad47ed30b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/test_param.cpp +++ /dev/null @@ -1,121 +0,0 @@ -//=========================================================================== -// -// File: param_test.cpp -// -// Created: Sun Dec 13 20:08:36 2009 -// -// Author(s): Atgeirr F Rasmussen -// BÃ¥rd Skaflestad -// -// $Date$ -// -// $Revision$ -// -//=========================================================================== - -/* - Copyright 2009, 2010 SINTEF ICT, Applied Mathematics. - Copyright 2009, 2010 Statoil ASA. - - This file is part of The Open Reservoir Simulator Project (OpenRS). - - OpenRS is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OpenRS is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenRS. If not, see . -*/ - - -#include - -#define NVERBOSE // to suppress our messages when throwing - -#define BOOST_TEST_MODULE ParameterTest -#include - -#include -#include -#include -#include - -using namespace Opm; - -BOOST_AUTO_TEST_CASE(commandline_syntax_init) -{ - typedef const char* cp; - std::vector argv = { "program_command", - "topitem=somestring", - "/slashtopitem=anotherstring", - "/group/item=1", - "/group/anotheritem=2", - "/group/subgroup/item=3", - "/group/subgroup/anotheritem=4", - "/group/item=overridingstring", - 0 }; - const std::size_t argc = argv.size() - 1; - ParameterGroup p(argc, argv.data()); - BOOST_CHECK(p.get("topitem") == "somestring"); - std::ostringstream os; - p.writeParamToStream(os); - std::string correct_answer = "/group/anotheritem=2\n" - "/group/item=overridingstring\n" - "/group/subgroup/anotheritem=4\n" - "/group/subgroup/item=3\n" - "/slashtopitem=anotherstring\n" - "/topitem=somestring\n"; - BOOST_CHECK(os.str() == correct_answer); - BOOST_CHECK(p.unhandledArguments().empty()); - - // Tests that only run in debug mode. -#ifndef NDEBUG -#endif -} - - -BOOST_AUTO_TEST_CASE(xml_syntax_init) -{ - typedef const char* cp; - std::vector argv = { "program_command", - "testdata.param", - "/group/item=overridingstring", - "unhandledargument", - 0}; - const std::size_t argc = argv.size() - 1; - ParameterGroup p(argc, argv.data(), false); - BOOST_CHECK(p.get("topitem") == "somestring"); - std::ostringstream os; - p.writeParamToStream(os); - std::string correct_answer = "/group/anotheritem=2\n" - "/group/item=overridingstring\n" - "/group/subgroup/anotheritem=4\n" - "/group/subgroup/item=3\n" - "/slashtopitem=anotherstring\n" - "/topitem=somestring\n"; - BOOST_CHECK(os.str() == correct_answer); - BOOST_REQUIRE(p.unhandledArguments().size() == 1); - BOOST_CHECK_EQUAL(p.unhandledArguments()[0], "unhandledargument"); - // Tests that only run in debug mode. -#ifndef NDEBUG -#endif -} - - -BOOST_AUTO_TEST_CASE(failing_strict_xml_syntax_init) -{ - typedef const char* cp; - std::vector argv = { "program_command", - "testdata.param", - "/group/item=overridingstring", - "unhandledargument", - 0 }; - const std::size_t argc = argv.size() - 1; - BOOST_CHECK_THROW(ParameterGroup p(argc, argv.data()), std::runtime_error); -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/test_regionCache.cpp b/ThirdParty/custom-opm-common/opm-common/tests/test_regionCache.cpp deleted file mode 100644 index 5bc88da824..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/test_regionCache.cpp +++ /dev/null @@ -1,64 +0,0 @@ -/* - Copyright 2016 Statoil ASA. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . - */ - -#include "config.h" - -#define BOOST_TEST_MODULE RegionCache -#include - -#include - -#include -#include -#include -#include -#include -#include -#include - -#include - -using namespace Opm; - -const char* path = "summary_deck.DATA"; - - -BOOST_AUTO_TEST_CASE(create) { - auto python = std::make_shared(); - Parser parser; - Deck deck( parser.parseFile( path )); - EclipseState es(deck); - const EclipseGrid& grid = es.getInputGrid(); - Schedule schedule( deck, es, python); - out::RegionCache rc(es.fieldProps().get_int("FIPNUM"), grid, schedule); - { - const auto& empty = rc.connections( 4 ); - BOOST_CHECK_EQUAL( empty.size() , 0 ); - } - - { - const auto& top_layer = rc.connections( 1 ); - BOOST_CHECK_EQUAL( top_layer.size() , 3 ); - { - auto pair = top_layer[0]; - BOOST_CHECK_EQUAL( pair.first , "W_1"); - BOOST_CHECK_EQUAL( pair.second , grid.activeIndex( 0,0,0)); - } - } -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/test_restartwellinfo.cpp b/ThirdParty/custom-opm-common/opm-common/tests/test_restartwellinfo.cpp deleted file mode 100644 index 0af5700ec4..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/test_restartwellinfo.cpp +++ /dev/null @@ -1,240 +0,0 @@ - -/* - Copyright 2014 Statoil IT - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#include "config.h" - -#define BOOST_TEST_MODULE EclipseWriter -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#include - -#include -#include - - -void verifyWellState(const std::string& rst_filename, const Opm::Schedule& schedule) { - - /* - reference variables ref_wellList, ref_wellHead and ref_wellConn are - based on WELSPECS and COMPDAT in data deck -> testblackoilstate3.DATA. - - */ - - int step = std::stoi( rst_filename.substr(rst_filename.size()-1)) -1; - Opm::EclIO::EclFile rstFile(rst_filename); - - std::vector> ref_wellList = { - {}, - {"OP_1", "OP_2", "OP_3"}, - {"OP_1", "OP_2", "OP_3", "OP_4", "OP_5", "OP_6"}, - {"OP_1", "OP_2", "OP_3", "OP_4", "OP_5", "OP_6", "WI_1", "WI_2", "GI_1"} - }; - - using T2 = std::tuple; - using T3 = std::tuple; - - std::vector>> ref_wellHead = { - {}, - {T2{9,9}, T2{8,8}, T2{7,7}}, - {T2{9,9}, T2{8,8}, T2{7,7}, T2{2,2}, T2{5,4}, T2{8,2}}, - {T2{9,9}, T2{8,8}, T2{7,7}, T2{2,2}, T2{5,4}, T2{8,2}, T2{3,3}, T2{3,9}, T2{3,6}} - }; - - std::vector>>> ref_wellConn = { - {{{}}}, // <- timestep 0 - { {T3{9,9,1},T3{9,9,2},T3{9,9,3},T3{9,9,4},T3{9,9,5},T3{9,9,6},T3{9,9,7},T3{9,9,8},T3{9,9,9},T3{9,9,10}}, // OP_1 - {T3{8,8,1},T3{8,8,2},T3{8,8,3},T3{8,7,3},T3{8,7,4},T3{8,7,5},T3{8,7,6}}, // OP_2 - {T3{7,7,1},T3{7,7,2},T3{7,7,3},T3{7,7,4},T3{7,7,5}} // OP_3 - }, // <- timestep 1 - { {T3{9,9,1},T3{9,9,2},T3{9,9,3},T3{9,9,4},T3{9,9,5},T3{9,9,6},T3{9,9,7},T3{9,9,8},T3{9,9,9},T3{9,9,10}}, - {T3{8,8,1},T3{8,8,2},T3{8,8,3},T3{8,7,3},T3{8,7,4},T3{8,7,5},T3{8,7,6}}, // OP_2 - {T3{7,7,1},T3{7,7,2},T3{7,7,3},T3{7,7,4},T3{7,7,5}}, // OP_3 - {T3{2,2,1},T3{2,2,2},T3{2,2,3},T3{2,2,4},T3{2,2,5},T3{2,2,6},T3{2,2,7},T3{2,2,8},T3{2,2,9},T3{2,2,10}}, // OP_4 - {T3{5,4,1},T3{5,4,2},T3{5,4,3}}, // OP_5 - {T3{8,2,1},T3{8,2,2},T3{8,2,3},T3{8,3,3},T3{8,4,3},T3{8,5,3},T3{8,5,4},T3{8,5,5},T3{8,5,6}} // OP_6 - }, // <- timestep 2 - { {T3{9,9,1},T3{9,9,2},T3{9,9,3},T3{9,9,4},T3{9,9,5},T3{9,9,6},T3{9,9,7},T3{9,9,8},T3{9,9,9},T3{9,9,10}}, - {T3{8,8,1},T3{8,8,2},T3{8,8,3},T3{8,7,3},T3{8,7,4},T3{8,7,5},T3{8,7,6}}, // OP_2 - {T3{7,7,1},T3{7,7,2},T3{7,7,3},T3{7,7,4},T3{7,7,5}}, // OP_3 - {T3{2,2,1},T3{2,2,2},T3{2,2,3},T3{2,2,4},T3{2,2,5},T3{2,2,6},T3{2,2,7},T3{2,2,8},T3{2,2,9},T3{2,2,10}}, // OP_4 - {T3{5,4,1},T3{5,4,2},T3{5,4,3}}, // OP_5 - {T3{8,2,1},T3{8,2,2},T3{8,2,3},T3{8,3,3},T3{8,4,3},T3{8,5,3},T3{8,5,4},T3{8,5,5},T3{8,5,6}}, // OP_6 - {T3{3,3,1},T3{3,3,2},T3{3,3,3},T3{3,3,4},T3{3,3,5},T3{3,3,6},T3{3,3,7},T3{3,3,8},T3{3,3,9},T3{3,3,10}}, // WI_1 - {T3{3,9,1},T3{3,9,2},T3{3,9,3},T3{3,9,4},T3{3,9,5},T3{3,9,6},T3{3,9,7}}, // WI_2 - {T3{3,6,1},T3{3,6,2},T3{3,6,3}} // WI_3 - } // <- timestep 3 - - }; - - std::vector intehead = rstFile.get("INTEHEAD"); - std::vector zwel; - std::vector iwel; - std::vector icon; - - int ncwmax = intehead[17]; - int niwelz = intehead[24]; - int niconz = intehead[32]; - - if (rstFile.hasKey("ZWEL")) { - zwel = rstFile.get("ZWEL"); - } - - if (rstFile.hasKey("IWEL")) { - iwel = rstFile.get("IWEL"); - } - - if (rstFile.hasKey("ICON")) { - icon = rstFile.get("ICON"); - } - - std::vector wellList = schedule.wellNames(step); - - //Verify number of active wells - BOOST_CHECK_EQUAL( wellList.size(), intehead[16]); - - for (size_t i=0; i< wellList.size(); i++) { - - // Verify wellname - BOOST_CHECK_EQUAL(zwel[i*3], ref_wellList[step][i]); - BOOST_CHECK_EQUAL(zwel[i*3], wellList[i]); - - // Verify well I, J head - - BOOST_CHECK_EQUAL(iwel[i*niwelz], std::get<0>(ref_wellHead[step][i])); - BOOST_CHECK_EQUAL(iwel[i*niwelz + 1], std::get<1>(ref_wellHead[step][i])); - - Opm::Well sched_well2 = schedule.getWell(wellList[i], step); - - BOOST_CHECK_EQUAL(iwel[i*niwelz], sched_well2.getHeadI() +1 ); - BOOST_CHECK_EQUAL(iwel[i*niwelz + 1], sched_well2.getHeadJ() +1 ); - - int sched_wtype = -99; - - if (sched_well2.isProducer()) { - sched_wtype = 1; - } else { - switch( sched_well2.getInjectionProperties( ).injectorType ) { - case Opm::InjectorType::WATER: - sched_wtype = 3; - break; - case Opm::InjectorType::GAS: - sched_wtype = 4; - break; - case Opm::InjectorType::OIL: - sched_wtype = 2; - break; - default: - break; - } - } - - // Verify well type - // 1 = producer, 2 = oil injection, 3 = water injector, 4 = gas injector - - BOOST_CHECK_EQUAL(iwel[i*niwelz + 6], sched_wtype ); - - const auto& connections_set = sched_well2.getConnections(); - - // Verify number of connections - - BOOST_CHECK_EQUAL(iwel[i*niwelz + 4], connections_set.size() ); - BOOST_CHECK_EQUAL(ref_wellConn[step][i].size(), connections_set.size() ); - - - for (size_t n=0; n< connections_set.size(); n++) { - const auto& completion = connections_set.get(n); - - // Verify I, J and K indices for each connection - - BOOST_CHECK_EQUAL(completion.getI()+1 , std::get<0>(ref_wellConn[step][i][n])); - BOOST_CHECK_EQUAL(completion.getJ()+1 , std::get<1>(ref_wellConn[step][i][n])); - BOOST_CHECK_EQUAL(completion.getK()+1 , std::get<2>(ref_wellConn[step][i][n])); - - size_t ind = i*ncwmax*niconz+n*niconz; - - BOOST_CHECK_EQUAL(completion.getI()+1 , icon[ind+1]); - BOOST_CHECK_EQUAL(completion.getJ()+1 , icon[ind+2]); - BOOST_CHECK_EQUAL(completion.getK()+1 , icon[ind+3]); - } - } -} - - -BOOST_AUTO_TEST_CASE(EclipseWriteRestartWellInfo) { - - std::string eclipse_data_filename = "testblackoilstate3.DATA"; - - auto python = std::make_shared(); - Opm::Parser parser; - Opm::Deck deck( parser.parseFile( eclipse_data_filename )); - Opm::EclipseState es(deck); - const Opm::EclipseGrid& grid = es.getInputGrid(); - Opm::Schedule schedule( deck, es, python); - Opm::SummaryConfig summary_config( deck, schedule, es.getTableManager( )); - const auto num_cells = grid.getCartesianSize(); - Opm::EclipseIO eclipseWriter( es, grid , schedule, summary_config); - int countTimeStep = schedule.getTimeMap().numTimesteps(); - Opm::SummaryState st(std::chrono::system_clock::from_time_t(schedule.getStartTime())); - - Opm::data::Solution solution; - solution.insert( "PRESSURE", Opm::UnitSystem::measure::pressure , std::vector< double >( num_cells, 1 ) , Opm::data::TargetType::RESTART_SOLUTION); - solution.insert( "SWAT" , Opm::UnitSystem::measure::identity , std::vector< double >( num_cells, 1 ) , Opm::data::TargetType::RESTART_SOLUTION); - solution.insert( "SGAS" , Opm::UnitSystem::measure::identity , std::vector< double >( num_cells, 1 ) , Opm::data::TargetType::RESTART_SOLUTION); - Opm::data::Wells wells; - - for(int timestep = 0; timestep <= countTimeStep; ++timestep) { - - eclipseWriter.writeTimeStep( st, - timestep, - false, - schedule.seconds(timestep), - Opm::RestartValue(solution, wells)); - } - - for (int i=1; i <=4; i++) { - verifyWellState("TESTBLACKOILSTATE3.X000" + std::to_string(i), schedule); - } - - // cleaning up after test - - for (int i=1; i <=4; i++) { - std::string fileName = "TESTBLACKOILSTATE3.X000" + std::to_string(i); - remove(fileName.c_str()); - - fileName = "testblackoilstate3.s000" + std::to_string(i); - remove(fileName.c_str()); - } - - remove("testblackoilstate3.smspec"); -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/test_rst.cpp b/ThirdParty/custom-opm-common/opm-common/tests/test_rst.cpp deleted file mode 100644 index 6c5cea879b..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/test_rst.cpp +++ /dev/null @@ -1,319 +0,0 @@ -/* - Copyright 2020 Equinor ASA - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#define BOOST_TEST_MODULE test_rst - -#include - -#include - -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -#include - -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include - -namespace { - Opm::Deck first_sim() - { - // Mostly copy of tests/FIRST_SIM.DATA - const auto input = std::string { - R"~( -RUNSPEC -OIL -GAS -WATER -DISGAS -VAPOIL -UNIFOUT -UNIFIN -DIMENS - 10 10 10 / - -GRID -DXV -10*0.25 / -DYV -10*0.25 / -DZV -10*0.25 / -TOPS -100*0.25 / - -PORO -1000*0.2 / - -SOLUTION - - -START -- 0 -1 NOV 1979 / - -SCHEDULE -RPTRST -BASIC=1 -/ -DATES -- 1 - 10 OKT 2008 / -/ -WELSPECS - 'OP_1' 'OP' 9 9 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / - 'OP_2' 'OP' 9 9 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / -/ -COMPDAT - 'OP_1' 9 9 1 1 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / - 'OP_2' 9 9 2 2 'OPEN' 1* 46.825 0.311 4332.346 1* 1* 'X' 22.123 / - 'OP_1' 9 9 3 3 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / -/ -WCONPROD - 'OP_1' 'OPEN' 'ORAT' 20000 4* 1000 / -/ -WCONINJE - 'OP_2' 'GAS' 'OPEN' 'RATE' 100 200 400 / -/ - -DATES -- 2 - 20 JAN 2011 / -/ -WELSPECS - 'OP_3' 'OP' 9 9 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / -/ -COMPDAT - 'OP_3' 9 9 1 1 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / -/ -WCONPROD - 'OP_3' 'OPEN' 'ORAT' 20000 4* 1000 / -/ -WCONINJE - 'OP_2' 'WATER' 'OPEN' 'RATE' 100 200 400 / -/ - -DATES -- 3 - 15 JUN 2013 / -/ -COMPDAT - 'OP_2' 9 9 3 9 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / - 'OP_1' 9 9 7 7 'SHUT' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / -/ - -DATES -- 4 - 22 APR 2014 / -/ -WELSPECS - 'OP_4' 'OP' 9 9 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / -/ -COMPDAT - 'OP_4' 9 9 3 9 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / - 'OP_3' 9 9 3 9 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / -/ -WCONPROD - 'OP_4' 'OPEN' 'ORAT' 20000 4* 1000 / -/ - -DATES -- 5 - 30 AUG 2014 / -/ -WELSPECS - 'OP_5' 'OP' 9 9 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / -/ -COMPDAT - 'OP_5' 9 9 3 9 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / -/ -WCONPROD - 'OP_5' 'OPEN' 'ORAT' 20000 4* 1000 / -/ - -DATES -- 6 - 15 SEP 2014 / -/ -WCONPROD - 'OP_3' 'SHUT' 'ORAT' 20000 4* 1000 / -/ - -DATES -- 7 - 9 OCT 2014 / -/ -WELSPECS - 'OP_6' 'OP' 9 9 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / -/ -COMPDAT - 'OP_6' 9 9 3 9 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / -/ -WCONPROD - 'OP_6' 'OPEN' 'ORAT' 20000 4* 1000 / -/ -TSTEP -- 8 -10 / -)~" }; - - return Opm::Parser{}.parseString(input); - } -} // namespace - -struct SimulationCase -{ - explicit SimulationCase(const Opm::Deck& deck) - : es { deck } - , grid { deck } - , python{ std::make_shared() } - , sched { deck, es, python} - {} - - // Order requirement: 'es' must be declared/initialised before 'sched'. - Opm::EclipseState es; - Opm::EclipseGrid grid; - std::shared_ptr python; - Opm::Schedule sched; -}; - -// ===================================================================== -BOOST_AUTO_TEST_CASE(group_test) { - const auto simCase = SimulationCase{first_sim()}; - const auto& units = simCase.es.getUnits(); - // Report Step 2: 2011-01-20 --> 2013-06-15 - const auto rptStep = std::size_t{2}; - const auto sim_step = rptStep - 1; - Opm::SummaryState sumState(std::chrono::system_clock::now()); - - const auto ih = Opm::RestartIO::Helpers::createInteHead(simCase.es, - simCase.grid, - simCase.sched, - 0, - sim_step, - sim_step, - sim_step); - - const auto lh = Opm::RestartIO::Helpers::createLogiHead(simCase.es); - - const auto dh = Opm::RestartIO::Helpers::createDoubHead(simCase.es, - simCase.sched, - sim_step, - 0, 0); - - auto groupData = Opm::RestartIO::Helpers::AggregateGroupData(ih); - groupData.captureDeclaredGroupData(simCase.sched, units, sim_step, sumState, ih); - - const auto& igrp = groupData.getIGroup(); - const auto& sgrp = groupData.getSGroup(); - const auto& xgrp = groupData.getXGroup(); - const auto& zgrp8 = groupData.getZGroup(); - - Opm::UnitSystem unit_system(Opm::UnitSystem::UnitType::UNIT_TYPE_METRIC); - std::vector zgrp; - for (const auto& s8: zgrp8) - zgrp.push_back(s8.c_str()); - - Opm::RestartIO::RstHeader header(ih,lh,dh); - for (int ig=0; ig < header.ngroup; ig++) { - std::size_t zgrp_offset = ig * header.nzgrpz; - std::size_t igrp_offset = ig * header.nigrpz; - std::size_t sgrp_offset = ig * header.nsgrpz; - std::size_t xgrp_offset = ig * header.nxgrpz; - - Opm::RestartIO::RstGroup group(unit_system, - zgrp.data() + zgrp_offset, - igrp.data() + igrp_offset, - sgrp.data() + sgrp_offset, - xgrp.data() + xgrp_offset); - } -} - -BOOST_AUTO_TEST_CASE(State_test) { - const auto simCase = SimulationCase{first_sim()}; - const auto& units = simCase.es.getUnits(); - // Report Step 2: 2011-01-20 --> 2013-06-15 - const auto rptStep = std::size_t{4}; - const auto sim_step = rptStep - 1; - Opm::SummaryState sumState(std::chrono::system_clock::now()); - - const auto ih = Opm::RestartIO::Helpers::createInteHead(simCase.es, - simCase.grid, - simCase.sched, - 0, - sim_step, - sim_step, - sim_step); - - const auto lh = Opm::RestartIO::Helpers::createLogiHead(simCase.es); - - const auto dh = Opm::RestartIO::Helpers::createDoubHead(simCase.es, - simCase.sched, - sim_step, - 0, 0); - - auto wellData = Opm::RestartIO::Helpers::AggregateWellData(ih); - wellData.captureDeclaredWellData(simCase.sched, units, sim_step, sumState, ih); - wellData.captureDynamicWellData(simCase.sched, sim_step, {} , sumState); - - auto connectionData = Opm::RestartIO::Helpers::AggregateConnectionData(ih); - connectionData.captureDeclaredConnData(simCase.sched, simCase.grid, units, {} , sim_step); - - auto groupData = Opm::RestartIO::Helpers::AggregateGroupData(ih); - groupData.captureDeclaredGroupData(simCase.sched, units, sim_step, sumState, ih); - - const auto& iwel = wellData.getIWell(); - const auto& swel = wellData.getSWell(); - const auto& xwel = wellData.getXWell(); - const auto& zwel8 = wellData.getZWell(); - - const auto& icon = connectionData.getIConn(); - const auto& scon = connectionData.getSConn(); - const auto& xcon = connectionData.getXConn(); - - const auto& zgrp8 = groupData.getZGroup(); - const auto& igrp = groupData.getIGroup(); - const auto& sgrp = groupData.getSGroup(); - const auto& xgrp = groupData.getXGroup(); - - std::vector zwel; - for (const auto& s8: zwel8) - zwel.push_back(s8.c_str()); - - std::vector zgrp; - for (const auto& s8: zgrp8) - zgrp.push_back(s8.c_str()); - - Opm::RestartIO::RstState state(units, - ih, lh, dh, - zgrp, igrp, sgrp, xgrp, - zwel, iwel, swel, xwel, - icon, scon, xcon); - - const auto& well = state.get_well("OP_3"); - BOOST_CHECK_THROW(well.segment(10), std::invalid_argument); -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/test_sparsevector.cpp b/ThirdParty/custom-opm-common/opm-common/tests/test_sparsevector.cpp deleted file mode 100644 index b635a33ece..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/test_sparsevector.cpp +++ /dev/null @@ -1,106 +0,0 @@ -//=========================================================================== -// -// File: sparsevector_test.cpp -// -// Created: Mon Jun 29 21:00:53 2009 -// -// Author(s): Atgeirr F Rasmussen -// Bård Skaflestad -// -// $Date$ -// -// $Revision$ -// -//=========================================================================== - -/* - Copyright 2009, 2010 SINTEF ICT, Applied Mathematics. - Copyright 2009, 2010 Statoil ASA. - - This file is part of The Open Reservoir Simulator Project (OpenRS). - - OpenRS is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OpenRS is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenRS. If not, see . -*/ - -#include - -#define NVERBOSE // to suppress our messages when throwing - -#define BOOST_TEST_MODULE SparseVectorTest -#include - -#include - -using namespace Opm; - -BOOST_AUTO_TEST_CASE(construction_and_queries) -{ - const SparseVector sv1; - BOOST_CHECK(sv1.empty()); - BOOST_CHECK_EQUAL(sv1.size(), 0); - BOOST_CHECK_EQUAL(sv1.nonzeroSize(), 0); - - const int size = 100; - const int num_elem = 9; - const int elem[num_elem] = { 9, 8, 7, 6, 5, 4, 3, 2, 1 }; - const int indices[num_elem] = { 1, 2, 3, 5, 8, 13, 21, 34, 55 }; - const SparseVector sv2(size, elem, elem + num_elem, indices, indices + num_elem); - BOOST_CHECK(!sv2.empty()); - BOOST_CHECK_EQUAL(sv2.size(), size); - BOOST_CHECK_EQUAL(sv2.element(0), 0); - BOOST_CHECK_EQUAL(sv2.element(1), 9); - BOOST_CHECK_EQUAL(sv2.element(2), 8); - BOOST_CHECK_EQUAL(sv2.element(3), 7); - BOOST_CHECK_EQUAL(sv2.element(4), 0); - BOOST_CHECK_EQUAL(sv2.element(5), 6); - BOOST_CHECK_EQUAL(sv2.element(55), 1); - BOOST_CHECK_EQUAL(sv2.element(99), 0); - BOOST_CHECK_EQUAL(sv2.nonzeroSize(), num_elem); - for (int i = 0; i < num_elem; ++i) { - BOOST_CHECK_EQUAL(sv2.nonzeroElement(i), elem[i]); - } - const SparseVector sv2_again(size, elem, elem + num_elem, indices, indices + num_elem); - BOOST_CHECK(sv2 == sv2_again); - SparseVector sv2_append(size, elem, elem + num_elem - 1, indices, indices + num_elem - 1); - BOOST_CHECK_EQUAL(sv2_append.nonzeroSize(), num_elem - 1); - sv2_append.addElement(elem[num_elem - 1], indices[num_elem - 1]); - BOOST_CHECK(sv2 == sv2_append); - SparseVector sv2_append2(size); - for (int i = 0; i < num_elem; ++i) { - sv2_append2.addElement(elem[i], indices[i]); - } - BOOST_CHECK(sv2 == sv2_append2); - sv2_append2.clear(); - SparseVector sv_empty; - BOOST_CHECK(sv2_append2 == sv_empty); - - // Tests that only run in debug mode. -#ifndef NDEBUG - // One element too few. - BOOST_CHECK_THROW(const SparseVector sv3(size, elem, elem + num_elem - 1, indices, indices + num_elem), std::exception); - // One element too many. - BOOST_CHECK_THROW(const SparseVector sv4(size, elem, elem + num_elem, indices, indices + num_elem - 1), std::exception); - // Indices out of range. - BOOST_CHECK_THROW(const SparseVector sv5(4, elem, elem + num_elem, indices, indices + num_elem), std::exception); - // Indices not strictly increasing. Cheating by using the elements as indices. - BOOST_CHECK_THROW(const SparseVector sv5(size, elem, elem + num_elem, elem, elem + num_elem), std::exception); - - // Do not ask for out of range indices. - BOOST_CHECK_THROW(sv1.element(0), std::exception); - BOOST_CHECK_THROW(sv2.element(-1), std::exception); - BOOST_CHECK_THROW(sv2.element(sv2.size()), std::exception); - BOOST_CHECK_THROW(sv2.nonzeroElement(sv2.nonzeroSize()), std::exception); -#endif -} - diff --git a/ThirdParty/custom-opm-common/opm-common/tests/test_uniformtablelinear.cpp b/ThirdParty/custom-opm-common/opm-common/tests/test_uniformtablelinear.cpp deleted file mode 100644 index a8bb9aabe9..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/test_uniformtablelinear.cpp +++ /dev/null @@ -1,70 +0,0 @@ -/* - Copyright 2010 SINTEF ICT, Applied Mathematics. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ -#include - -#define NVERBOSE // to suppress our messages when throwing - - -#define BOOST_TEST_MODULE UniformTableLinearTests -#include -#include - - - -BOOST_AUTO_TEST_CASE(table_operations) -{ - // Make a simple table. - double yva[] = { 1.0, -1.0, 3.0, 4.0, 2.0 }; - const int numvals = sizeof(yva)/sizeof(yva[0]); - std::vector yv(yva, yva + numvals); - const double xmin = 1.0; - const double xdelta = 2.5; - const double xmax = xmin + (numvals - 1)*xdelta; - Opm::utils::UniformTableLinear t1(xmin, xmax, yv); - Opm::utils::UniformTableLinear t1_copy1(1.0, 11.0, yv); - Opm::utils::UniformTableLinear t1_copy2(t1); - - // Check equality. - BOOST_CHECK(t1 == t1_copy1); - BOOST_CHECK(t1 == t1_copy2); - - // Check some evaluations. - for (int i = 0; i < numvals; ++i) { - BOOST_CHECK_EQUAL(t1(xmin + i*xdelta), yv[i]); - } - BOOST_CHECK_EQUAL(t1(2.25), 0.0); - BOOST_CHECK_EQUAL(t1(9.75), 3.0); - BOOST_CHECK_EQUAL(t1.derivative(9.75), -2.0/xdelta); - // Until we implement anything but the ClosestValue end policy, we only test that. - BOOST_CHECK_EQUAL(t1(xmin - 1.0), yv[0]); - BOOST_CHECK_EQUAL(t1(xmax + 1.0), yv.back()); - - // Domains. - BOOST_CHECK_EQUAL(t1.domain().first, xmin); - BOOST_CHECK_EQUAL(t1.domain().second, xmin + (numvals-1)*xdelta); - std::pair new_domain(-100.0, 20.0); - t1.rescaleDomain(new_domain); - BOOST_CHECK_EQUAL(t1.domain().first, new_domain.first); - BOOST_CHECK_EQUAL(t1.domain().second, new_domain.second); - for (int i = 0; i < numvals; ++i) { - BOOST_CHECK_EQUAL(t1(-100.0 + i*120.0/(double(numvals - 1))), yv[i]); - } - BOOST_CHECK_EQUAL(t1(-85.0), 0.0); - BOOST_CHECK(std::fabs(t1.derivative(0.0) + 2.0/30.0) < 1e-14); -} diff --git a/ThirdParty/custom-opm-common/opm-common/tests/testblackoilstate3.DATA b/ThirdParty/custom-opm-common/opm-common/tests/testblackoilstate3.DATA deleted file mode 100644 index 6a408aff2c..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/testblackoilstate3.DATA +++ /dev/null @@ -1,144 +0,0 @@ -RUNSPEC - -TITLE -UNIT TEST - - -START -1 NOV 1979 / - -OIL -GAS -WATER - - -METRIC - -DIMENS - 10 10 10 / - -WELLDIMS --- Item 1: NWMAX (Maximum number of wells in model) --- Item 2: NCWMAX (Maximum number of connections per well) --- Item 3: NGMAX (Maximum number of groups in model--excluding FIELD) --- Item 4: NWGMAX (Maximum number of wells or child groups per group) --- NWMAX NCWMAX NGMAX NWGMAX - 9 10 2 6 -/ - -GRID -DXV -10*10 / - -DYV -10*10 / - -DZV -10*10 / - -DEPTHZ -121*1000 / - -PORO -1000*0.2 / - -SCHEDULE - - -RPTSCHED - RESTART=2/ - -DATES - 1 DES 1979/ -/ - -WELSPECS - 'OP_1' 'OP' 9 9 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / - 'OP_2' 'OP' 8 8 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / - 'OP_3' 'OP' 7 7 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / -/ - -COMPDAT - 'OP_1' 9 9 1 1 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / - 'OP_1' 9 9 2 2 'OPEN' 1* 46.825 0.311 4332.346 1* 1* 'X' 22.123 / - 'OP_1' 9 9 3 3 'OPEN' 1* 51.867 0.311 4799.764 1* 1* 'X' 22.143 / - 'OP_1' 9 9 4 4 'OPEN' 1* 34.243 0.311 3169.482 1* 1* 'X' 22.166 / - 'OP_1' 9 9 5 5 'OPEN' 1* 36.435 0.311 3375.309 1* 1* 'X' 22.262 / - 'OP_1' 9 9 6 6 'OPEN' 1* 39.630 0.311 3672.067 1* 1* 'X' 22.283 / - 'OP_1' 9 9 7 7 'OPEN' 1* 33.975 0.311 3148.671 1* 1* 'X' 22.307 / - 'OP_1' 9 9 8 8 'OPEN' 1* 24.869 0.311 2305.242 1* 1* 'X' 22.329 / - 'OP_1' 9 9 9 9 'OPEN' 1* 38.301 0.311 3551.043 1* 1* 'X' 22.351 / - 'OP_1' 9 9 10 10 'OPEN' 1* 6.642 0.311 615.914 1* 1* 'X' 22.372 / - 'OP_2' 8 8 1 3 'OPEN' 1* 1.168 0.311 107.872 1* 1* 'Y' 21.925 / - 'OP_2' 8 7 3 3 'OPEN' 1* 15.071 0.311 1391.859 1* 1* 'Y' 21.920 / - 'OP_2' 8 7 3 6 'OPEN' 1* 6.242 0.311 576.458 1* 1* 'Y' 21.915 / - 'OP_3' 7 7 1 1 'OPEN' 1* 27.412 0.311 2445.337 1* 1* 'Y' 18.521 / - 'OP_3' 7 7 2 2 'OPEN' 1* 55.195 0.311 4923.842 1* 1* 'Y' 18.524 / - 'OP_3' 7 7 3 3 'OPEN' 1* 18.032 0.311 1608.615 1* 1* 'Y' 18.526 / - 'OP_3' 7 7 4 4 'OPEN' 1* 56.817 0.311 5047.177 1* 1* 'Y' 18.155 / - 'OP_3' 7 7 5 5 'OPEN' 1* 4.728 0.311 420.067 1* 1* 'Y' 18.162 / -/ - -WCONPROD - 'OP_1' OPEN ORAT 1000.0 4* 90.0 / - 'OP_2' OPEN ORAT 1000.0 4* 90.0 / - 'OP_3' SHUT ORAT 1000.0 4* 90.0 / -/ - - -DATES - 1 JUN 1980/ -/ - - -WELSPECS - 'OP_4' 'OP' 2 2 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / - 'OP_5' 'OP' 5 4 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / - 'OP_6' 'OP' 8 2 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / -/ - -COMPDAT - 'OP_4' 2 2 1 10 'OPEN' 1* 6.642 0.311 615.914 1* 1* 'X' 22.372 / - 'OP_5' 5 4 1 3 'OPEN' 1* 1.168 0.311 107.872 1* 1* 'Y' 21.925 / - 'OP_6' 8 2 1 3 'OPEN' 1* 27.412 0.311 2445.337 1* 1* 'Y' 18.521 / - 'OP_6' 8 3 3 3 'OPEN' 1* 55.195 0.311 4923.842 1* 1* 'Y' 18.524 / - 'OP_6' 8 4 3 3 'OPEN' 1* 18.032 0.311 1608.615 1* 1* 'Y' 18.526 / - 'OP_6' 8 5 3 5 'OPEN' 1* 56.817 0.311 5047.177 1* 1* 'Y' 18.155 / - 'OP_6' 8 5 5 6 'OPEN' 1* 4.728 0.311 420.067 1* 1* 'Y' 18.162 / -/ - -WCONPROD - 'OP_4' OPEN ORAT 1000.0 4* 90.0 / - 'OP_5' OPEN ORAT 1000.0 4* 90.0 / - 'OP_6' OPEN ORAT 1000.0 4* 90.0 / -/ - -DATES - 1 NOV 1980/ -/ - - -WELSPECS - 'WI_1' 'WI' 3 3 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / - 'WI_2' 'WI' 3 9 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / - 'GI_1' 'WI' 3 6 1* 'GAS' 1* 1* 1* 1* 1* 1* 1* / -/ - -COMPDAT - 'WI_1' 3 3 1 10 'OPEN' 1* 6.642 0.311 615.914 1* 1* 'X' 22.372 / - 'WI_2' 3 9 1 7 'OPEN' 1* 1.168 0.311 107.872 1* 1* 'Y' 21.925 / - 'GI_1' 3 6 1 3 'OPEN' 1* 27.412 0.311 2445.337 1* 1* 'Y' 18.521 / -/ - -WCONINJE - 'WI_1' WATER OPEN RATE 1000.0 / - 'WI_2' WATER OPEN RATE 1000.0 / - 'GI_1' GAS OPEN RATE 1.0E6 / -/ - -DATES - 1 NOV 1982/ -/ - -END - diff --git a/ThirdParty/custom-opm-common/opm-common/tests/testdata.param b/ThirdParty/custom-opm-common/opm-common/tests/testdata.param deleted file mode 100644 index e85f7e9f75..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/testdata.param +++ /dev/null @@ -1,6 +0,0 @@ -topitem=somestring -/slashtopitem=anotherstring -/group/item=1 -/group/anotheritem=2 -/group/subgroup/item=3 -/group/subgroup/anotheritem=4 diff --git a/ThirdParty/custom-opm-common/opm-common/tests/testrft.DATA b/ThirdParty/custom-opm-common/opm-common/tests/testrft.DATA deleted file mode 100644 index c1d09f74d6..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/testrft.DATA +++ /dev/null @@ -1,62 +0,0 @@ -RUNSPEC -OIL -GAS -WATER -DIMENS - 10 10 10 / -GRID -DXV -10*0.25 / -DYV -10*0.25 / -DZV -10*0.25 / -TOPS -100*0.25 / - -PORO -1000*0.2 / - -START -- 0 -1 NOV 1979 / -SCHEDULE -DATES -- 1 - 1 DES 1979/ -/ -WELSPECS - 'OP_1' 'OP' 9 9 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / - 'OP_2' 'OP' 4 4 1* 'OIL' 1* 1* 1* 1* 1* 1* 1* / -/ -COMPDAT - 'OP_1' 9 9 1 1 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / - 'OP_1' 9 9 2 2 'OPEN' 1* 46.825 0.311 4332.346 1* 1* 'X' 22.123 / - 'OP_1' 9 9 3 9 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / - 'OP_2' 4 4 4 9 'OPEN' 1* 32.948 0.311 3047.839 1* 1* 'X' 22.100 / -/ -DATES -- 2 - 10 OKT 2008 / -/ -WRFTPLT - 'OP_1' 'YES' / - 'OP_2' 'REPT' / -/ -WELOPEN - 'OP_1' OPEN / - 'OP_2' OPEN / -/ -DATES -- 3 - 10 NOV 2008 / -/ - - -DATES -- 4 - 20 NOV 2008 / -/ - -WRFTPLT - 'OP_2' 'NO' / -/ - -DATES -- 5 - 30 NOV 2008 / -/ diff --git a/ThirdParty/custom-opm-common/opm-common/tests/wclose.py b/ThirdParty/custom-opm-common/opm-common/tests/wclose.py deleted file mode 100644 index 039ff6a370..0000000000 --- a/ThirdParty/custom-opm-common/opm-common/tests/wclose.py +++ /dev/null @@ -1,24 +0,0 @@ -import sys - -def run(ecl_state, schedule, report_step, summary_state): - sys.stdout.write("Running PYACTION arg1:{}\n".format(ecl_state)) - if "FOPR" in summary_state: - sys.stdout.write("Have FOPR: {}\n".format( summary_state["FOPR"] )) - else: - sys.stdout.write("Missing FOPR\n") - - grid = ecl_state.grid() - sys.stdout.write("Grid dimensions: ({},{},{})\n".format(grid.nx, grid.ny, grid.nz)) - - prod_well = schedule.get_well("PROD1", report_step) - sys.stdout.write("Well status: {}\n".format(prod_well.status())) - if not "list" in storage: - storage["list"] = [] - storage["list"].append(report_step) - sys.stdout.write("storage[list]: {}\n".format(storage["list"])) - - if summary_state.well_var("PROD1", "WWCT") > 0.80: - schedule.shut_well("PROD1", report_step) - schedule.open_well("PROD2", report_step) - summary_state.update("RUN_COUNT", 1) - return True From 7b2b2af5e4907a7a843a2a42881b0abeccd5a6c3 Mon Sep 17 00:00:00 2001 From: magnesj Date: Fri, 8 Jul 2022 08:37:01 +0000 Subject: [PATCH 022/129] Fwk : Remove obsolete helper template --- .../cafPdmCore/cafPdmField.h | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/Fwk/AppFwk/cafProjectDataModel/cafPdmCore/cafPdmField.h b/Fwk/AppFwk/cafProjectDataModel/cafPdmCore/cafPdmField.h index dc58a79ae4..a764f81f2d 100644 --- a/Fwk/AppFwk/cafProjectDataModel/cafPdmCore/cafPdmField.h +++ b/Fwk/AppFwk/cafProjectDataModel/cafPdmCore/cafPdmField.h @@ -5,21 +5,3 @@ #include "cafPdmDataValueField.h" #undef PdmDataValueField #undef CAF_IS_DEFINING_PDM_FIELD - -#ifndef __clang__ -namespace caf -{ -// Specialization to create compiler errors to help finding the PdmField's to rename - -#ifdef WIN32 - -template -class PdmField : public Rename_PdmField_of_pointer_to_PdmChildField // You must rename PdmField to - // PdmChildField -{ -}; - -#endif // WIN32 - -} // namespace caf -#endif // __clang__ From ee715a86e0698e158a2be0ed534faf1fea18ce25 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Fri, 8 Jul 2022 11:01:23 +0200 Subject: [PATCH 023/129] #9125 Do not reset user defined axis range when stepping data source --- .../Summary/RimSummaryPlotSourceStepping.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlotSourceStepping.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlotSourceStepping.cpp index 0eb550b7a5..6b859facbc 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlotSourceStepping.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlotSourceStepping.cpp @@ -321,6 +321,8 @@ void RimSummaryPlotSourceStepping::fieldChangedByUi( const caf::PdmFieldHandle* std::vector curves; if ( dataSourceSteppingObject() ) curves = dataSourceSteppingObject()->allCurves( m_sourceSteppingType ); + bool isAutoZoomAllowed = false; + if ( changedField == &m_stepDimension ) { RiuPlotMainWindow* mainPlotWindow = RiaGuiApplication::instance()->getOrCreateMainPlotWindow(); @@ -444,6 +446,7 @@ void RimSummaryPlotSourceStepping::fieldChangedByUi( const caf::PdmFieldHandle* } m_vectorName.uiCapability()->updateConnectedEditors(); triggerLoadDataAndUpdate = true; + isAutoZoomAllowed = true; } if ( changedField != &m_vectorName ) @@ -521,7 +524,9 @@ void RimSummaryPlotSourceStepping::fieldChangedByUi( const caf::PdmFieldHandle* { summaryMultiPlot->updatePlots(); summaryMultiPlot->updatePlotWindowTitle(); - summaryMultiPlot->zoomAllYAxes(); + + if ( isAutoZoomAllowed ) summaryMultiPlot->zoomAllYAxes(); + RiuPlotMainWindow* mainPlotWindow = RiaGuiApplication::instance()->mainPlotWindow(); mainPlotWindow->updateMultiPlotToolBar(); } From f80fde85caf28b6961aa6f2abe7505013c3a561b Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Fri, 8 Jul 2022 14:54:48 +0200 Subject: [PATCH 024/129] #9126 Improve plot and curve handling for ensembles Add append plots and append curves to context menu of ensembles Make sure we create an unique color when adding multiple ensembles --- .../Application/Tools/RiaColorTools.cpp | 4 +- ...endSummaryCurvesForSummaryCasesFeature.cpp | 18 +++- ...RicAppendSummaryPlotsForObjectsFeature.cpp | 79 +++++++++++++++- .../RicAppendSummaryPlotsForObjectsFeature.h | 16 +++- ...pendSummaryPlotsForSummaryCasesFeature.cpp | 52 +++++----- ...AppendSummaryPlotsForSummaryCasesFeature.h | 7 +- .../RimContextCommandBuilder.cpp | 2 + .../RimSummaryCurveAppearanceCalculator.cpp | 9 +- .../Summary/RimSummaryMultiPlot.cpp | 5 +- .../Summary/RimSummaryPlot.cpp | 94 +++++++++++++++---- .../ProjectDataModel/Summary/RimSummaryPlot.h | 6 +- 11 files changed, 221 insertions(+), 71 deletions(-) diff --git a/ApplicationLibCode/Application/Tools/RiaColorTools.cpp b/ApplicationLibCode/Application/Tools/RiaColorTools.cpp index 04bdce0935..0a0e175524 100644 --- a/ApplicationLibCode/Application/Tools/RiaColorTools.cpp +++ b/ApplicationLibCode/Application/Tools/RiaColorTools.cpp @@ -196,8 +196,10 @@ cvf::Color3f RiaColorTools::makeLighter( const cvf::Color3f& color, float normal double l = 0.0; qColor.getHslF( &h, &s, &l ); + // A negative value will make the color darker l = l + ( 1.0 - l ) * normalizedScalingFactor; - l = std::min( 1.0, l ); + + l = std::clamp( l, 0.0, 1.0 ); qColor.setHslF( h, s, l ); diff --git a/ApplicationLibCode/Commands/PlotBuilderCommands/RicAppendSummaryCurvesForSummaryCasesFeature.cpp b/ApplicationLibCode/Commands/PlotBuilderCommands/RicAppendSummaryCurvesForSummaryCasesFeature.cpp index a40c7045a4..abbe5f2da0 100644 --- a/ApplicationLibCode/Commands/PlotBuilderCommands/RicAppendSummaryCurvesForSummaryCasesFeature.cpp +++ b/ApplicationLibCode/Commands/PlotBuilderCommands/RicAppendSummaryCurvesForSummaryCasesFeature.cpp @@ -24,6 +24,7 @@ #include "RimSummaryAddressCollection.h" #include "RimSummaryCase.h" +#include "RimSummaryCaseCollection.h" #include "RimSummaryMultiPlot.h" #include "RimSummaryPlot.h" @@ -77,12 +78,21 @@ void RicAppendSummaryCurvesForSummaryCasesFeature::setupActionLook( QAction* act //-------------------------------------------------------------------------------------------------- std::vector RicAppendSummaryCurvesForSummaryCasesFeature::selectedCases() { - std::vector objects; - caf::SelectionManager::instance()->objectsByType( &objects ); - // Make the object type general to match the expected type for handleDroppedObjects(); std::vector generalObjects; - generalObjects.insert( generalObjects.begin(), objects.begin(), objects.end() ); + + { + std::vector objects; + caf::SelectionManager::instance()->objectsByType( &objects ); + + generalObjects.insert( generalObjects.begin(), objects.begin(), objects.end() ); + } + { + std::vector objects; + caf::SelectionManager::instance()->objectsByType( &objects ); + + generalObjects.insert( generalObjects.begin(), objects.begin(), objects.end() ); + } return generalObjects; } diff --git a/ApplicationLibCode/Commands/PlotBuilderCommands/RicAppendSummaryPlotsForObjectsFeature.cpp b/ApplicationLibCode/Commands/PlotBuilderCommands/RicAppendSummaryPlotsForObjectsFeature.cpp index 0793ec30a5..1c38f6486f 100644 --- a/ApplicationLibCode/Commands/PlotBuilderCommands/RicAppendSummaryPlotsForObjectsFeature.cpp +++ b/ApplicationLibCode/Commands/PlotBuilderCommands/RicAppendSummaryPlotsForObjectsFeature.cpp @@ -77,9 +77,21 @@ void RicAppendSummaryPlotsForObjectsFeature::appendPlots( RimSummaryMultiPlot* s summaryMultiPlot->addPlot( duplicatedPlot ); auto summaryCase = RiaSummaryTools::summaryCaseById( summaryAdrCollection->caseId() ); - for ( auto c : duplicatedPlot->summaryCurves() ) + if ( summaryCase ) { - c->setSummaryCaseY( summaryCase ); + for ( auto c : duplicatedPlot->summaryCurves() ) + { + c->setSummaryCaseY( summaryCase ); + } + } + + auto ensemble = RiaSummaryTools::ensembleById( summaryAdrCollection->ensembleId() ); + if ( ensemble ) + { + for ( auto c : duplicatedPlot->curveSets() ) + { + c->setSummaryCaseCollection( ensemble ); + } } } else @@ -102,6 +114,51 @@ void RicAppendSummaryPlotsForObjectsFeature::appendPlots( RimSummaryMultiPlot* s } } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RicAppendSummaryPlotsForObjectsFeature::appendPlots( RimSummaryMultiPlot* summaryMultiPlot, + const std::vector& cases, + const std::vector& ensembles ) +{ + auto addressCollectionsToBeDeleted = + RicAppendSummaryPlotsForObjectsFeature::createAddressCollections( cases, ensembles ); + RicAppendSummaryPlotsForObjectsFeature::appendPlots( summaryMultiPlot, addressCollectionsToBeDeleted ); + + for ( auto obj : addressCollectionsToBeDeleted ) + { + delete obj; + } +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::vector + RicAppendSummaryPlotsForObjectsFeature::createAddressCollections( const std::vector& cases, + const std::vector& ensembles ) +{ + std::vector addresses; + + for ( auto c : cases ) + { + auto myColl = new RimSummaryAddressCollection; + myColl->setContentType( RimSummaryAddressCollection::CollectionContentType::SUMMARY_CASE ); + myColl->setCaseId( c->caseId() ); + addresses.push_back( myColl ); + } + + for ( auto c : ensembles ) + { + auto myColl = new RimSummaryAddressCollection; + myColl->setContentType( RimSummaryAddressCollection::CollectionContentType::SUMMARY_CASE ); + myColl->setEnsembleId( c->ensembleId() ); + addresses.push_back( myColl ); + } + + return addresses; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -276,8 +333,9 @@ std::vector RicAppendSummaryPlotsForObjectsFeature::plotsForOne std::string wellNameToMatch; std::string groupNameToMatch; - int regionToMatch = -1; - int caseIdToMatch = -1; + int regionToMatch = -1; + int caseIdToMatch = -1; + int ensembleIdToMatch = -1; RiaSummaryAddressAnalyzer myAnalyser; for ( auto sourcePlot : sourcePlots ) @@ -307,6 +365,11 @@ std::vector RicAppendSummaryPlotsForObjectsFeature::plotsForOne { caseIdToMatch = curves.front()->summaryCaseY()->caseId(); } + auto curveSets = sourcePlots.back()->curveSets(); + if ( !curveSets.empty() ) + { + ensembleIdToMatch = curveSets.front()->ensembleId(); + } } } @@ -322,6 +385,14 @@ std::vector RicAppendSummaryPlotsForObjectsFeature::plotsForOne if ( c->summaryCaseY()->caseId() == caseIdToMatch ) isMatching = true; } } + else if ( ensembleIdToMatch != -1 ) + { + auto curveSets = sourcePlot->curveSets(); + for ( auto c : curveSets ) + { + if ( c->summaryCaseCollection()->ensembleId() == ensembleIdToMatch ) isMatching = true; + } + } else { auto addresses = RimSummaryAddressModifier::createEclipseSummaryAddress( sourcePlot ); diff --git a/ApplicationLibCode/Commands/PlotBuilderCommands/RicAppendSummaryPlotsForObjectsFeature.h b/ApplicationLibCode/Commands/PlotBuilderCommands/RicAppendSummaryPlotsForObjectsFeature.h index 6723f922ed..ae3b88c8ee 100644 --- a/ApplicationLibCode/Commands/PlotBuilderCommands/RicAppendSummaryPlotsForObjectsFeature.h +++ b/ApplicationLibCode/Commands/PlotBuilderCommands/RicAppendSummaryPlotsForObjectsFeature.h @@ -29,6 +29,8 @@ class RimSummaryAddressCollection; class RimSummaryMultiPlot; class RifEclipseSummaryAddress; class RimSummaryPlot; +class RimSummaryCase; +class RimSummaryCaseCollection; //================================================================================================== /// @@ -39,21 +41,31 @@ class RicAppendSummaryPlotsForObjectsFeature : public caf::CmdFeature public: static std::vector selectedCollections(); + static std::vector - plotsForOneInstanceOfObjectType( const std::vector& sourcePlots, - RimSummaryAddressCollection::CollectionContentType objectType ); + plotsForOneInstanceOfObjectType( const std::vector& sourcePlots, + RimSummaryAddressCollection::CollectionContentType objectType ); + static bool isSelectionCompatibleWithPlot( const std::vector& selection, RimSummaryMultiPlot* summaryMultiPlot ); static void appendPlots( RimSummaryMultiPlot* summaryMultiPlot, const std::vector& selection ); + static void appendPlots( RimSummaryMultiPlot* summaryMultiPlot, + const std::vector& cases, + const std::vector& ensembles ); + protected: bool isCommandEnabled() override; void onActionTriggered( bool isChecked ) override; void setupActionLook( QAction* actionToSetup ) override; private: + static std::vector + createAddressCollections( const std::vector& cases, + const std::vector& ensembles ); + static RifEclipseSummaryAddress modifyAddress( const RifEclipseSummaryAddress& sourceAddress, RimSummaryAddressCollection* summaryAddressCollection ); }; diff --git a/ApplicationLibCode/Commands/PlotBuilderCommands/RicAppendSummaryPlotsForSummaryCasesFeature.cpp b/ApplicationLibCode/Commands/PlotBuilderCommands/RicAppendSummaryPlotsForSummaryCasesFeature.cpp index 364dcc799b..7959b10957 100644 --- a/ApplicationLibCode/Commands/PlotBuilderCommands/RicAppendSummaryPlotsForSummaryCasesFeature.cpp +++ b/ApplicationLibCode/Commands/PlotBuilderCommands/RicAppendSummaryPlotsForSummaryCasesFeature.cpp @@ -24,6 +24,7 @@ #include "RimSummaryAddressCollection.h" #include "RimSummaryCase.h" +#include "RimSummaryCaseCollection.h" #include "RimSummaryMultiPlot.h" #include "cafSelectionManager.h" @@ -32,39 +33,17 @@ CAF_CMD_SOURCE_INIT( RicAppendSummaryPlotsForSummaryCasesFeature, "RicAppendSummaryPlotsForSummaryCasesFeature" ); -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RicAppendSummaryPlotsForSummaryCasesFeature::appendPlotsForCases( RimSummaryMultiPlot* summaryMultiPlot, - const std::vector& cases ) -{ - if ( !summaryMultiPlot ) return; - if ( cases.empty() ) return; - - std::vector tmp; - - for ( auto c : cases ) - { - auto myColl = new RimSummaryAddressCollection; - myColl->setContentType( RimSummaryAddressCollection::CollectionContentType::SUMMARY_CASE ); - myColl->setCaseId( c->caseId() ); - tmp.push_back( myColl ); - } - - RicAppendSummaryPlotsForObjectsFeature::appendPlots( summaryMultiPlot, tmp ); - - for ( auto obj : tmp ) - { - delete obj; - } -} - //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- bool RicAppendSummaryPlotsForSummaryCasesFeature::isCommandEnabled() { - return !selectedCases().empty(); + auto cases = selectedCases(); + auto ensembles = selectedEnsembles(); + + if ( cases.empty() && ensembles.empty() ) return false; + + return true; } //-------------------------------------------------------------------------------------------------- @@ -77,10 +56,10 @@ void RicAppendSummaryPlotsForSummaryCasesFeature::onActionTriggered( bool isChec auto summaryMultiPlot = dynamic_cast( app->activePlotWindow() ); if ( !summaryMultiPlot ) return; - auto cases = selectedCases(); - if ( cases.empty() ) return; + auto cases = selectedCases(); + auto ensembles = selectedEnsembles(); - appendPlotsForCases( summaryMultiPlot, cases ); + RicAppendSummaryPlotsForObjectsFeature::appendPlots( summaryMultiPlot, cases, ensembles ); } //-------------------------------------------------------------------------------------------------- @@ -105,3 +84,14 @@ std::vector RicAppendSummaryPlotsForSummaryCasesFeature::select return objects; } + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::vector RicAppendSummaryPlotsForSummaryCasesFeature::selectedEnsembles() +{ + std::vector objects; + caf::SelectionManager::instance()->objectsByType( &objects ); + + return objects; +} diff --git a/ApplicationLibCode/Commands/PlotBuilderCommands/RicAppendSummaryPlotsForSummaryCasesFeature.h b/ApplicationLibCode/Commands/PlotBuilderCommands/RicAppendSummaryPlotsForSummaryCasesFeature.h index ab1c6acd96..f202d32311 100644 --- a/ApplicationLibCode/Commands/PlotBuilderCommands/RicAppendSummaryPlotsForSummaryCasesFeature.h +++ b/ApplicationLibCode/Commands/PlotBuilderCommands/RicAppendSummaryPlotsForSummaryCasesFeature.h @@ -24,6 +24,7 @@ class RimSummaryCase; class RimSummaryMultiPlot; +class RimSummaryCaseCollection; //================================================================================================== /// @@ -32,14 +33,12 @@ class RicAppendSummaryPlotsForSummaryCasesFeature : public caf::CmdFeature { CAF_CMD_HEADER_INIT; -public: - static void appendPlotsForCases( RimSummaryMultiPlot* summaryMultiPlot, const std::vector& cases ); - protected: bool isCommandEnabled() override; void onActionTriggered( bool isChecked ) override; void setupActionLook( QAction* actionToSetup ) override; private: - static std::vector selectedCases(); + static std::vector selectedCases(); + static std::vector selectedEnsembles(); }; diff --git a/ApplicationLibCode/ProjectDataModel/RimContextCommandBuilder.cpp b/ApplicationLibCode/ProjectDataModel/RimContextCommandBuilder.cpp index 7a979e476e..dbb0c0db8e 100644 --- a/ApplicationLibCode/ProjectDataModel/RimContextCommandBuilder.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimContextCommandBuilder.cpp @@ -777,6 +777,8 @@ caf::CmdFeatureMenuBuilder RimContextCommandBuilder::commandsFromSelection() menuBuilder << "RicNewDerivedEnsembleFeature"; menuBuilder << "RicOpenSummaryPlotEditorFeature"; menuBuilder << "RicNewSummaryCrossPlotFeature"; + menuBuilder << "RicAppendSummaryCurvesForSummaryCasesFeature"; + menuBuilder << "RicAppendSummaryPlotsForSummaryCasesFeature"; menuBuilder.addSeparator(); menuBuilder << "RicConvertGroupToEnsembleFeature"; menuBuilder.addSeparator(); diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCurveAppearanceCalculator.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCurveAppearanceCalculator.cpp index 6539a32574..fdf551096f 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCurveAppearanceCalculator.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCurveAppearanceCalculator.cpp @@ -396,18 +396,21 @@ cvf::Color3f RimSummaryCurveAppearanceCalculator::computeTintedCurveColorForAddr { bool usePhaseColor = RiaPreferencesSummary::current()->colorCurvesByPhase(); + float scalingFactor = 0.25; cvf::Color3f curveColor; + if ( usePhaseColor ) { - curveColor = RimSummaryCurveAppearanceCalculator::assignColorByPhase( address ); + // A negative scaling factor will make the color darker + scalingFactor = -0.1 * colorIndex; + curveColor = RimSummaryCurveAppearanceCalculator::assignColorByPhase( address ); } else { curveColor = RiaColorTables::summaryCurveDefaultPaletteColors().cycledColor3f( colorIndex ); } - float scalingFactor = 0.25; - curveColor = RiaColorTools::makeLighter( curveColor, scalingFactor ); + curveColor = RiaColorTools::makeLighter( curveColor, scalingFactor ); return curveColor; } diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.cpp index 056c310ad1..f5b9f18074 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.cpp @@ -222,6 +222,7 @@ void RimSummaryMultiPlot::handleDroppedObjects( const std::vector addresses; std::vector addressCollections; std::vector cases; + std::vector ensembles; for ( auto o : objects ) { @@ -243,11 +244,13 @@ void RimSummaryMultiPlot::handleDroppedObjects( const std::vector( o ); if ( summaryCase ) cases.push_back( summaryCase ); + auto ensemble = dynamic_cast( o ); + if ( ensemble ) ensembles.push_back( ensemble ); } RicAppendSummaryPlotsForSummaryAddressesFeature::appendPlotsForAddresses( this, addresses ); RicAppendSummaryPlotsForObjectsFeature::appendPlots( this, addressCollections ); - RicAppendSummaryPlotsForSummaryCasesFeature::appendPlotsForCases( this, cases ); + RicAppendSummaryPlotsForObjectsFeature::appendPlots( this, cases, ensembles ); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlot.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlot.cpp index e8c9f5805d..a5137c7a63 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlot.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlot.cpp @@ -770,22 +770,7 @@ size_t RimSummaryPlot::singleColorCurveCount() const void RimSummaryPlot::applyDefaultCurveAppearances() { applyDefaultCurveAppearances( summaryCurves() ); - - // Ensemble curve sets - int colorIndex = 0; - for ( auto& curveSet : this->ensembleCurveSetCollection()->curveSets() ) - { - if ( curveSet->colorMode() != RimEnsembleCurveSet::ColorMode::SINGLE_COLOR ) continue; - - cvf::Color3f curveColor = - RimSummaryCurveAppearanceCalculator::computeTintedCurveColorForAddress( curveSet->summaryAddress(), - colorIndex++ ); - - auto adr = curveSet->summaryAddress(); - if ( adr.isHistoryVector() ) curveColor = RiaPreferencesSummary::current()->historyCurveContrastColor(); - - curveSet->setColor( curveColor ); - } + applyDefaultCurveAppearances( ensembleCurveSetCollection()->curveSets() ); } //-------------------------------------------------------------------------------------------------- @@ -803,6 +788,36 @@ void RimSummaryPlot::applyDefaultCurveAppearances( std::vector } } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimSummaryPlot::applyDefaultCurveAppearances( std::vector ensembleCurvesToUpdate ) +{ + auto allCurveSets = ensembleCurveSetCollection()->curveSets(); + + for ( auto curveSet : ensembleCurvesToUpdate ) + { + size_t colorIndex = 0; + + auto it = std::find( allCurveSets.begin(), allCurveSets.end(), curveSet ); + if ( it != allCurveSets.end() ) + { + colorIndex = std::distance( allCurveSets.begin(), it ); + } + + if ( curveSet->colorMode() != RimEnsembleCurveSet::ColorMode::SINGLE_COLOR ) continue; + + cvf::Color3f curveColor = + RimSummaryCurveAppearanceCalculator::computeTintedCurveColorForAddress( curveSet->summaryAddress(), + static_cast( colorIndex ) ); + + auto adr = curveSet->summaryAddress(); + if ( adr.isHistoryVector() ) curveColor = RiaPreferencesSummary::current()->historyCurveContrastColor(); + + curveSet->setColor( curveColor ); + } +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -1997,6 +2012,34 @@ std::pair> RimSummaryPlot::handleSummaryCaseD return { newCurves, curves }; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::pair> RimSummaryPlot::handleEnsembleDrop( RimSummaryCaseCollection* ensemble ) +{ + int newCurves = 0; + std::vector curveSetsToUpdate; + + std::map> dataVectorMap; + + for ( auto& curve : curveSets() ) + { + const auto addr = curve->summaryAddress(); + dataVectorMap[addr].insert( curve->summaryCaseCollection() ); + } + + for ( const auto& [addr, ensembles] : dataVectorMap ) + { + if ( ensembles.count( ensemble ) > 0 ) continue; + + auto curveSet = addNewEnsembleCurveY( addr, ensemble ); + curveSetsToUpdate.push_back( curveSet ); + newCurves++; + } + + return { newCurves, curveSetsToUpdate }; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -2195,8 +2238,9 @@ std::pair> RimSummaryPlot::handleSummaryAddre //-------------------------------------------------------------------------------------------------- void RimSummaryPlot::handleDroppedObjects( const std::vector& objects ) { - int accumulatedCurveCount = 0; - std::vector curvesToUpdate; + int accumulatedCurveCount = 0; + std::vector curvesToUpdate; + std::vector curveSetsToUpdate; for ( auto obj : objects ) { @@ -2208,6 +2252,14 @@ void RimSummaryPlot::handleDroppedObjects( const std::vector( obj ); + if ( ensemble ) + { + auto [curveCount, curvesCreated] = handleEnsembleDrop( ensemble ); + accumulatedCurveCount += curveCount; + curveSetsToUpdate.insert( curveSetsToUpdate.end(), curvesCreated.begin(), curvesCreated.end() ); + continue; + } auto summaryAddr = dynamic_cast( obj ); if ( summaryAddr ) @@ -2244,6 +2296,7 @@ void RimSummaryPlot::handleDroppedObjects( const std::vector 0 ) { applyDefaultCurveAppearances( curvesToUpdate ); + applyDefaultCurveAppearances( curveSetsToUpdate ); loadDataAndUpdate(); @@ -2269,7 +2322,8 @@ RimSummaryCurve* RimSummaryPlot::addNewCurveY( const RifEclipseSummaryAddress& a //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RimSummaryPlot::addNewEnsembleCurveY( const RifEclipseSummaryAddress& address, RimSummaryCaseCollection* ensemble ) +RimEnsembleCurveSet* RimSummaryPlot::addNewEnsembleCurveY( const RifEclipseSummaryAddress& address, + RimSummaryCaseCollection* ensemble ) { auto* curveSet = new RimEnsembleCurveSet(); @@ -2288,6 +2342,8 @@ void RimSummaryPlot::addNewEnsembleCurveY( const RifEclipseSummaryAddress& addre curveSet->setColor( curveColor ); ensembleCurveSetCollection()->addCurveSet( curveSet ); + + return curveSet; } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlot.h b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlot.h index b22152d220..fa79ba1b63 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlot.h +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlot.h @@ -165,6 +165,7 @@ public: size_t singleColorCurveCount() const; void applyDefaultCurveAppearances(); void applyDefaultCurveAppearances( std::vector curvesToUpdate ); + void applyDefaultCurveAppearances( std::vector ensembleCurvesToUpdate ); void setNormalizationEnabled( bool enable ); bool isNormalizationEnabled(); @@ -288,13 +289,14 @@ private: void assignPlotAxis( RimSummaryCurve* curve ); RimSummaryCurve* addNewCurveY( const RifEclipseSummaryAddress& address, RimSummaryCase* summaryCase ); - void addNewEnsembleCurveY( const RifEclipseSummaryAddress& address, RimSummaryCaseCollection* ensemble ); + RimEnsembleCurveSet* addNewEnsembleCurveY( const RifEclipseSummaryAddress& address, RimSummaryCaseCollection* ensemble ); void updateStackedCurveData(); bool updateStackedCurveDataForAxis( RiuPlotAxis plotAxis ); bool updateStackedCurveDataForRelevantAxes(); - std::pair> handleSummaryCaseDrop( RimSummaryCase* summaryCase ); + std::pair> handleSummaryCaseDrop( RimSummaryCase* summaryCase ); + std::pair> handleEnsembleDrop( RimSummaryCaseCollection* ensemble ); std::pair> handleAddressCollectionDrop( RimSummaryAddressCollection* addrColl ); std::pair> handleSummaryAddressDrop( RimSummaryAddress* summaryAddr ); From 3c835f7eb2196c3d583f4be27c11337d6ce97a11 Mon Sep 17 00:00:00 2001 From: Kristian Bendiksen Date: Mon, 1 Aug 2022 11:30:26 +0200 Subject: [PATCH 025/129] Thermal Fracture Import: handle csv with space between name and unit --- .../RifThermalFractureReader.cpp | 24 +++++++++++++++---- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/ApplicationLibCode/FileInterface/RifThermalFractureReader.cpp b/ApplicationLibCode/FileInterface/RifThermalFractureReader.cpp index 54f0718112..26797ace5a 100644 --- a/ApplicationLibCode/FileInterface/RifThermalFractureReader.cpp +++ b/ApplicationLibCode/FileInterface/RifThermalFractureReader.cpp @@ -24,8 +24,11 @@ #include "RifFileParseTools.h" +#include "cafAssert.h" + #include #include +#include #include //-------------------------------------------------------------------------------------------------- @@ -45,6 +48,7 @@ std::pair, QString> QString separator = ","; auto appendPropertyValues = [def]( int nodeIndex, int valueOffset, const QStringList& values ) { + CAF_ASSERT( valueOffset <= values.size() ); for ( int i = valueOffset; i < values.size() - 1; i++ ) { double value = values[i].toDouble(); @@ -79,7 +83,7 @@ std::pair, QString> for ( int i = valueOffset; i < headerValues.size() - 1; i++ ) { auto [name, unit] = parseNameAndUnit( headerValues[i] ); - def->addProperty( name, unit ); + if ( !name.isEmpty() && !unit.isEmpty() ) def->addProperty( name, unit ); } isFirstHeader = false; @@ -179,8 +183,18 @@ bool RifThermalFractureReader::isPerimeterNodeLine( const QString& line ) //-------------------------------------------------------------------------------------------------- std::pair RifThermalFractureReader::parseNameAndUnit( const QString& value ) { - QStringList values = value.split( " " ); - QString name = values[0]; - QString unit = values[1].replace( "(", "" ).replace( ")", "" ); - return std::make_pair( name, unit ); + // Expected values: "name(unit)" or "name (unit)" + QRegularExpression re( "(\\w*)\\s?\\(([^\\)]+)\\)" ); + + QRegularExpressionMatch match = re.match( value ); + if ( match.hasMatch() ) + { + QString name = match.captured( 1 ); + QString unit = match.captured( 2 ); + return std::make_pair( name, unit ); + } + else + { + return std::make_pair( "", "" ); + } } From 530329aed6a6326a1e8c261b5799622e463dde27 Mon Sep 17 00:00:00 2001 From: Jon Jenssen Date: Mon, 1 Aug 2022 15:42:26 +0200 Subject: [PATCH 026/129] Fix intersection depth filter limit calculations --- ...udedCurveIntersectionGeometryGenerator.cpp | 6 ++--- .../RivExtrudedCurveIntersectionPartMgr.cpp | 2 +- .../RimExtrudedCurveIntersection.cpp | 24 +++++++++---------- .../RimExtrudedCurveIntersection.h | 4 ++-- 4 files changed, 17 insertions(+), 19 deletions(-) diff --git a/ApplicationLibCode/ModelVisualization/Intersections/RivExtrudedCurveIntersectionGeometryGenerator.cpp b/ApplicationLibCode/ModelVisualization/Intersections/RivExtrudedCurveIntersectionGeometryGenerator.cpp index cfc11611b9..f6fe15b6ae 100644 --- a/ApplicationLibCode/ModelVisualization/Intersections/RivExtrudedCurveIntersectionGeometryGenerator.cpp +++ b/ApplicationLibCode/ModelVisualization/Intersections/RivExtrudedCurveIntersectionGeometryGenerator.cpp @@ -291,11 +291,9 @@ void RivExtrudedCurveIntersectionGeometryGenerator::calculateArrays() calculateLineSegementTransforms(); calculateTransformedPolyline(); - const double gridRadius = gridBBox.radius(); - // set up our horizontal cut planes - const double topDepth = -1.0 * m_intersection->upperFilterDepth( gridRadius ); - const double bottomDepth = -1.0 * m_intersection->lowerFilterDepth( gridRadius ); + const double topDepth = m_intersection->upperFilterDepth( gridBBox.max().z() ); + const double bottomDepth = m_intersection->lowerFilterDepth( gridBBox.min().z() ); std::array corners; gridBBox.cornerVertices( corners.data() ); diff --git a/ApplicationLibCode/ModelVisualization/Intersections/RivExtrudedCurveIntersectionPartMgr.cpp b/ApplicationLibCode/ModelVisualization/Intersections/RivExtrudedCurveIntersectionPartMgr.cpp index cd65d860c6..e5ef915e91 100644 --- a/ApplicationLibCode/ModelVisualization/Intersections/RivExtrudedCurveIntersectionPartMgr.cpp +++ b/ApplicationLibCode/ModelVisualization/Intersections/RivExtrudedCurveIntersectionPartMgr.cpp @@ -237,7 +237,7 @@ void RivExtrudedCurveIntersectionPartMgr::generatePartGeometry() if ( m_intersectionGenerator.isNull() ) return; if ( m_rimIntersection->depthFilterType() == RimIntersectionFilterEnum::INTERSECT_FILTER_BETWEEN && - ( m_rimIntersection->lowerFilterDepth( 1.0 ) <= m_rimIntersection->upperFilterDepth( 1.0 ) ) ) + ( m_rimIntersection->lowerFilterDepth( 1.0 ) >= m_rimIntersection->upperFilterDepth( 1.0 ) ) ) return; bool useBufferObjects = true; diff --git a/ApplicationLibCode/ProjectDataModel/Intersections/RimExtrudedCurveIntersection.cpp b/ApplicationLibCode/ProjectDataModel/Intersections/RimExtrudedCurveIntersection.cpp index 25760249b8..81e86a44b1 100644 --- a/ApplicationLibCode/ProjectDataModel/Intersections/RimExtrudedCurveIntersection.cpp +++ b/ApplicationLibCode/ProjectDataModel/Intersections/RimExtrudedCurveIntersection.cpp @@ -251,10 +251,10 @@ RimExtrudedCurveIntersection::RimExtrudedCurveIntersection() m_surfaceIntersections = new RimSurfaceIntersectionCollection; m_surfaceIntersections->objectChanged.connect( this, &RimExtrudedCurveIntersection::onSurfaceIntersectionsChanged ); - CAF_PDM_InitField( &m_depthUpperThreshold, "UpperThreshold", 2000.0, "Upper Threshold" ); + CAF_PDM_InitField( &m_depthUpperThreshold, "UpperThreshold", 0.0, "Upper Threshold" ); m_depthUpperThreshold.uiCapability()->setUiEditorTypeName( caf::PdmUiDoubleSliderEditor::uiEditorTypeName() ); - CAF_PDM_InitField( &m_depthLowerThreshold, "LowerThreshold", 3000.0, "Lower Threshold" ); + CAF_PDM_InitField( &m_depthLowerThreshold, "LowerThreshold", 300000.0, "Lower Threshold" ); m_depthLowerThreshold.uiCapability()->setUiEditorTypeName( caf::PdmUiDoubleSliderEditor::uiEditorTypeName() ); CAF_PDM_InitFieldNoDefault( &m_depthFilterType, "DepthFilter", "Depth Filter" ); @@ -313,7 +313,7 @@ void RimExtrudedCurveIntersection::setName( const QString& newName ) //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -double RimExtrudedCurveIntersection::upperFilterDepth( double sceneRadius ) const +double RimExtrudedCurveIntersection::upperFilterDepth( double upperGridLimit ) const { if ( m_depthThresholdOverridden ) { @@ -321,12 +321,12 @@ double RimExtrudedCurveIntersection::upperFilterDepth( double sceneRadius ) cons { case RimIntersectionFilterEnum::INTERSECT_FILTER_BELOW: case RimIntersectionFilterEnum::INTERSECT_FILTER_BETWEEN: - return m_collectionUpperThreshold; + return -m_collectionUpperThreshold; case RimIntersectionFilterEnum::INTERSECT_FILTER_ABOVE: case RimIntersectionFilterEnum::INTERSECT_FILTER_NONE: default: - return -sceneRadius; + return upperGridLimit; } } @@ -334,12 +334,12 @@ double RimExtrudedCurveIntersection::upperFilterDepth( double sceneRadius ) cons { case RimIntersectionFilterEnum::INTERSECT_FILTER_BELOW: case RimIntersectionFilterEnum::INTERSECT_FILTER_BETWEEN: - return m_depthUpperThreshold; + return -m_depthUpperThreshold; case RimIntersectionFilterEnum::INTERSECT_FILTER_ABOVE: case RimIntersectionFilterEnum::INTERSECT_FILTER_NONE: default: - return -sceneRadius; + return upperGridLimit; } } @@ -358,7 +358,7 @@ RimIntersectionFilterEnum RimExtrudedCurveIntersection::depthFilterType() const //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -double RimExtrudedCurveIntersection::lowerFilterDepth( double sceneRadius ) const +double RimExtrudedCurveIntersection::lowerFilterDepth( double lowerGridLimit ) const { if ( m_depthThresholdOverridden ) { @@ -366,12 +366,12 @@ double RimExtrudedCurveIntersection::lowerFilterDepth( double sceneRadius ) cons { case RimIntersectionFilterEnum::INTERSECT_FILTER_ABOVE: case RimIntersectionFilterEnum::INTERSECT_FILTER_BETWEEN: - return m_collectionLowerThreshold; + return -m_collectionLowerThreshold; case RimIntersectionFilterEnum::INTERSECT_FILTER_BELOW: case RimIntersectionFilterEnum::INTERSECT_FILTER_NONE: default: - return sceneRadius; + return lowerGridLimit; } } @@ -379,12 +379,12 @@ double RimExtrudedCurveIntersection::lowerFilterDepth( double sceneRadius ) cons { case RimIntersectionFilterEnum::INTERSECT_FILTER_ABOVE: case RimIntersectionFilterEnum::INTERSECT_FILTER_BETWEEN: - return m_depthLowerThreshold; + return -m_depthLowerThreshold; case RimIntersectionFilterEnum::INTERSECT_FILTER_BELOW: case RimIntersectionFilterEnum::INTERSECT_FILTER_NONE: default: - return sceneRadius; + return lowerGridLimit; } } diff --git a/ApplicationLibCode/ProjectDataModel/Intersections/RimExtrudedCurveIntersection.h b/ApplicationLibCode/ProjectDataModel/Intersections/RimExtrudedCurveIntersection.h index d1a0a78393..be726af8db 100644 --- a/ApplicationLibCode/ProjectDataModel/Intersections/RimExtrudedCurveIntersection.h +++ b/ApplicationLibCode/ProjectDataModel/Intersections/RimExtrudedCurveIntersection.h @@ -78,8 +78,8 @@ public: QString name() const override; void setName( const QString& newName ); - double upperFilterDepth( double sceneRadius ) const; - double lowerFilterDepth( double sceneRadius ) const; + double upperFilterDepth( double upperGridLimit ) const; + double lowerFilterDepth( double lowerGridLimit ) const; RimIntersectionFilterEnum depthFilterType() const; void setDepthOverride( bool collectionOverride ); From dbc4aef3845884389115d6e923b794d38030c0cc Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Tue, 2 Aug 2022 07:52:34 +0200 Subject: [PATCH 027/129] Set minimum CMake version to 3.15 to avoid warnings on MSVC Set CMake version on top level to avoid warnings on MSVC when warning level is set to something else than the default. https://stackoverflow.com/questions/58708772/cmake-project-in-visual-studio-gives-flag-override-warnings-command-line-warnin --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0d9adc73f8..26154330f1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.12) +cmake_minimum_required(VERSION 3.15) include(CheckCSourceCompiles) project(ResInsight) From 97888f4f5e30406ad81cc41369bbfa5976d4394d Mon Sep 17 00:00:00 2001 From: Jon Jenssen Date: Wed, 3 Aug 2022 12:32:08 +0200 Subject: [PATCH 028/129] Update qtadvanced docking to latest version --- ThirdParty/qtadvanceddocking | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ThirdParty/qtadvanceddocking b/ThirdParty/qtadvanceddocking index 3d365a0b84..b7849e37e6 160000 --- a/ThirdParty/qtadvanceddocking +++ b/ThirdParty/qtadvanceddocking @@ -1 +1 @@ -Subproject commit 3d365a0b84e4ae87481e5545c30abd002676812c +Subproject commit b7849e37e6cb18233a682881ce96e12510c118f2 From 803b8adc25c313cf5c1576dbdee7a8604aa932e3 Mon Sep 17 00:00:00 2001 From: Kristian Bendiksen Date: Mon, 1 Aug 2022 14:58:55 +0200 Subject: [PATCH 029/129] #9101 Thermal Fracture Import: detect and refuse inconsistent units. All values in the file should be in either field or metric units, and mixing is not allowed. --- .../RifThermalFractureReader.cpp | 102 +++++++++++++++++- .../FileInterface/RifThermalFractureReader.h | 8 ++ .../RifThermalFractureReader-Test.cpp | 13 +++ .../fracture_mixed_units.csv | 91 ++++++++++++++++ 4 files changed, 212 insertions(+), 2 deletions(-) create mode 100644 ApplicationLibCode/UnitTests/TestData/RifThermalFractureReader/fracture_mixed_units.csv diff --git a/ApplicationLibCode/FileInterface/RifThermalFractureReader.cpp b/ApplicationLibCode/FileInterface/RifThermalFractureReader.cpp index 26797ace5a..cec9a4671c 100644 --- a/ApplicationLibCode/FileInterface/RifThermalFractureReader.cpp +++ b/ApplicationLibCode/FileInterface/RifThermalFractureReader.cpp @@ -18,6 +18,7 @@ #include "RifThermalFractureReader.h" +#include "RiaDefines.h" #include "RiaTextStringTools.h" #include "RigThermalFractureDefinition.h" @@ -60,7 +61,6 @@ std::pair, QString> QTextStream in( &file ); int lineNumber = 1; - QStringList headerValues; // The two items in the csv is name and timestep const int valueOffset = 2; int nodeIndex = 0; @@ -76,7 +76,7 @@ std::pair, QString> } else if ( isHeaderLine( line ) ) { - headerValues = RifFileParseTools::splitLineAndTrim( line, separator ); + QStringList headerValues = RifFileParseTools::splitLineAndTrim( line, separator ); if ( isFirstHeader ) { // Create the result vector when encountering the first header @@ -86,6 +86,21 @@ std::pair, QString> if ( !name.isEmpty() && !unit.isEmpty() ) def->addProperty( name, unit ); } + // Detect unit system + RiaDefines::EclipseUnitSystem unitSystem = detectUnitSystem( def ); + if ( unitSystem == RiaDefines::EclipseUnitSystem::UNITS_UNKNOWN ) + { + return std::make_pair( nullptr, QString( "Unknown unit system found in file: %1" ).arg( filePath ) ); + } + + // Verify that all values have consistent units: + // all values should be either metric or field, and mixing is not allowed + bool isUnitsConsistent = checkUnits( def, unitSystem ); + if ( !isUnitsConsistent ) + { + return std::make_pair( nullptr, QString( "Inconsistent units found in file: %1" ).arg( filePath ) ); + } + isFirstHeader = false; } else if ( isValidNode ) @@ -198,3 +213,86 @@ std::pair RifThermalFractureReader::parseNameAndUnit( const QS return std::make_pair( "", "" ); } } + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RiaDefines::EclipseUnitSystem + RifThermalFractureReader::detectUnitSystem( std::shared_ptr definition ) +{ + // Use XCoord property to determine expected unit for entire file + QString targetName = "XCoord"; + auto namesAndUnits = definition->getPropertyNamesUnits(); + auto res = std::find_if( namesAndUnits.begin(), namesAndUnits.end(), [&]( const auto& val ) { + return val.first == targetName; + } ); + + if ( res != namesAndUnits.end() ) + { + QString unit = res->second; + if ( unit == getExpectedUnit( targetName, RiaDefines::EclipseUnitSystem::UNITS_METRIC ) ) + return RiaDefines::EclipseUnitSystem::UNITS_METRIC; + else if ( unit == getExpectedUnit( targetName, RiaDefines::EclipseUnitSystem::UNITS_FIELD ) ) + return RiaDefines::EclipseUnitSystem::UNITS_FIELD; + } + + return RiaDefines::EclipseUnitSystem::UNITS_UNKNOWN; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +bool RifThermalFractureReader::checkUnits( std::shared_ptr definition, + RiaDefines::EclipseUnitSystem unitSystem ) +{ + auto namesAndUnits = definition->getPropertyNamesUnits(); + for ( auto [name, unit] : namesAndUnits ) + { + auto expectedUnit = getExpectedUnit( name, unitSystem ); + if ( expectedUnit != unit ) return false; + } + + return true; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QString RifThermalFractureReader::getExpectedUnit( const QString& name, RiaDefines::EclipseUnitSystem unitSystem ) +{ + CAF_ASSERT( unitSystem == RiaDefines::EclipseUnitSystem::UNITS_METRIC || + unitSystem == RiaDefines::EclipseUnitSystem::UNITS_FIELD ); + + // parameter name --> { metric unit, field unit } + std::map> mapping = { { "XCoord", { "m", "feet" } }, + { "YCoord", { "m", "feet" } }, + { "ZCoord", { "m", "feet" } }, + { "Width", { "cm", "inches" } }, + { "Pressure", { "BARa", "psia" } }, + { "Temperature", { "deg C", "deg F" } }, + { "Stress", { "BARa", "psia" } }, + { "Density", { "Kg/m3", "lb/ft3" } }, + { "Viscosity", { "mPa.s", "centipoise" } }, + { "LeakoffMobility", { "m/day/bar", "ft/day/psi" } }, + { "Conductivity", { "D.m", "D.ft" } }, + { "Velocity", { "m/sec", "ft/sec" } }, + { "ResPressure", { "BARa", "psia" } }, + { "ResTemperature", { "deg C", "deg F" } }, + { "FiltrateThickness", { "cm", "inches" } }, + { "FiltratePressureDrop", { "bar", "psi" } }, + { "EffectiveResStress", { "bar", "psi" } }, + { "EffectiveFracStress", { "bar", "psi" } }, + { "LeakoffPressureDrop", { "bar", "psi" } } }; + + auto res = std::find_if( mapping.begin(), mapping.end(), [&]( const auto& val ) { return val.first == name; } ); + + if ( res != mapping.end() ) + { + if ( unitSystem == RiaDefines::EclipseUnitSystem::UNITS_METRIC ) + return res->second.first; + else + return res->second.second; + } + + return ""; +} diff --git a/ApplicationLibCode/FileInterface/RifThermalFractureReader.h b/ApplicationLibCode/FileInterface/RifThermalFractureReader.h index 37b9a58bab..d87ef0887c 100644 --- a/ApplicationLibCode/FileInterface/RifThermalFractureReader.h +++ b/ApplicationLibCode/FileInterface/RifThermalFractureReader.h @@ -18,6 +18,8 @@ #pragma once +#include "RiaDefines.h" + #include #include @@ -42,4 +44,10 @@ private: static QDateTime parseDateTime( const QString& dateString ); static std::pair parseNameAndUnit( const QString& value ); + + static RiaDefines::EclipseUnitSystem detectUnitSystem( std::shared_ptr definition ); + static bool checkUnits( std::shared_ptr definition, + RiaDefines::EclipseUnitSystem unitSystem ); + + static QString getExpectedUnit( const QString& name, RiaDefines::EclipseUnitSystem unitSystem ); }; diff --git a/ApplicationLibCode/UnitTests/RifThermalFractureReader-Test.cpp b/ApplicationLibCode/UnitTests/RifThermalFractureReader-Test.cpp index c06fe988bd..71ad181fde 100644 --- a/ApplicationLibCode/UnitTests/RifThermalFractureReader-Test.cpp +++ b/ApplicationLibCode/UnitTests/RifThermalFractureReader-Test.cpp @@ -79,3 +79,16 @@ TEST( RifThermalFractureReaderTest, LoadFile ) EXPECT_DOUBLE_EQ( expectedValue, fractureData->getPropertyValue( propertyIndex, nodeIndex, timeStepIndex ) ); } } + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +TEST( RifThermalFractureReaderTest, LoadFileMixedUnits ) +{ + QString fileName = CASE_REAL_TEST_DATA_DIRECTORY_03 + "fracture_mixed_units.csv"; + + auto [fractureData, errorMessage] = RifThermalFractureReader::readFractureCsvFile( fileName ); + + EXPECT_FALSE( errorMessage.isEmpty() ); + EXPECT_FALSE( fractureData.get() ); +} diff --git a/ApplicationLibCode/UnitTests/TestData/RifThermalFractureReader/fracture_mixed_units.csv b/ApplicationLibCode/UnitTests/TestData/RifThermalFractureReader/fracture_mixed_units.csv new file mode 100644 index 0000000000..9193cbf933 --- /dev/null +++ b/ApplicationLibCode/UnitTests/TestData/RifThermalFractureReader/fracture_mixed_units.csv @@ -0,0 +1,91 @@ +frac01 +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (psi), +Centre Node(1),09.12.1997 22:12:00,459352,-7.32599e+06,2735,0.203163,386.075,10.065,373.207,1000.26,0.318,0.171043,708.241,0.378137,339.935,11.655,1.13368,55.5623,33.2722,12.8677,46.1399, +Centre Node(1),05.02.1998 14:35:11,459352,-7.32599e+06,2735,0.0145999,386.695,10.0547,383.818,1000.09,0.318,0.104823,2.39161,0.251669,349.508,10.8229,1.96263,44.6939,34.3095,2.87659,37.1861, +Centre Node(1),12.04.1998 23:29:05,459352,-7.32599e+06,2735,3.048e-07,387.256,10.0513,384.736,1000.23,0.318,0.0867732,2.39161,0.318317,349.9,10.6303,2.37484,36.7878,34.8364,2.51953,37.3559, +Centre Node(1),16.08.1998 08:06:27,459352,-7.32599e+06,2735,3.048e-07,369.704,10.048,385.031,999.891,0.318,0.0661685,2.39161,0.270915,356.062,10.4218,3.12029,36.5477,28.9691,-15.3269,13.6422, +Centre Node(1),18.10.1998 00:25:09,459352,-7.32599e+06,2735,0.0196283,358.935,10.0472,354.586,999.02,0.318,0.059019,2.39161,0.253608,328.444,10.331,3.50965,15.9013,26.1427,4.34837,30.4911, +Centre Node(1),19.12.1998 16:43:50,459352,-7.32599e+06,2735,3.048e-07,359.538,10.046,363.972,999.394,0.318,0.0531779,2.39161,0.23897,346.357,10.1943,3.90434,29.5867,17.6145,-4.43427,13.1802, +Centre Node(1),20.02.1999 09:02:31,459352,-7.32599e+06,2735,0.0654113,356.182,10.046,351.254,998.87,0.318,0.0509413,23.6377,0.306383,332.373,10.2413,4.08035,16.3121,18.8811,4.92782,23.8089, +Centre Node(1),25.06.1999 17:39:53,459352,-7.32599e+06,2735,3.048e-07,356.823,10.0454,358.075,999.279,0.318,0.047726,2.39161,0.213626,345.413,10.1879,4.36182,23.9339,12.6622,-1.25206,11.4101, +Centre Node(1),27.08.1999 09:58:34,459352,-7.32599e+06,2735,0.0611455,348.962,10.0461,344.596,998.538,0.318,0.0454833,19.3081,0.253291,331.773,10.2773,4.58259,12.1052,12.8234,4.36582,17.1892, +Centre Node(1),30.12.1999 18:35:56,459352,-7.32599e+06,2735,3.048e-07,346.141,10.0458,349.588,998.802,0.318,0.0437597,2.39161,0.205237,341.446,10.2272,4.76739,17.4866,8.14196,-3.44711,4.69484, +Centre Node(1),06.09.2000 11:50:41,459352,-7.32599e+06,2735,0.233762,352.457,10.0458,344.958,998.529,0.318,0.0420014,1078.87,0.0488517,337.201,10.2886,4.97238,9.44804,7.75672,7.49942,15.2561, +Centre Node(1),09.01.2001 20:28:03,459352,-7.32599e+06,2735,3.048e-07,357.064,10.0446,355.522,999.055,0.318,0.037812,2.39161,0.149205,349.83,10.2275,5.53701,15.0515,5.69248,1.54212,7.2346, +Centre Node(1),13.03.2001 12:46:44,459352,-7.32599e+06,2735,0.0120971,356.622,10.0443,354.848,998.893,0.318,0.0369852,2.39161,0.0795952,345.34,10.2559,5.66429,10.4831,9.50854,1.7738,11.2823, +Centre Node(1),15.05.2001 05:05:26,459352,-7.32599e+06,2735,3.048e-07,357.873,10.0439,358.476,999.033,0.318,0.0363807,2.39161,0.164569,349.439,10.2206,5.76072,11.5569,9.03685,-0.603314,8.43353, +Centre Node(1),17.09.2001 13:42:48,459352,-7.32599e+06,2735,3.048e-07,359.578,10.0436,359.131,999.025,0.318,0.0358769,2.39161,0.108665,348.804,10.2158,5.84359,9.90427,10.3269,0.44658,10.7734, +Centre Node(1),20.01.2002 22:20:10,459352,-7.32599e+06,2735,3.048e-07,361.355,10.043,361.758,999.11,0.318,0.0347939,2.39161,0.136498,350.695,10.1917,6.02965,11.5023,11.0628,-0.40253,10.6602, +Centre Node(1),26.05.2002 06:57:32,459352,-7.32599e+06,2735,3.048e-07,362.868,10.0425,364.125,999.179,0.318,0.033819,2.39161,0.151089,351.681,10.184,6.20725,11.8582,12.4443,-1.25682,11.1875, +Centre Node(1),28.09.2002 15:34:55,459352,-7.32599e+06,2735,3.048e-07,363.865,10.0422,365.508,999.229,0.318,0.0330033,2.39161,0.118395,351.177,10.1936,6.36387,12.0343,14.3314,-1.64288,12.6885, +Centre Node(1),30.11.2002 07:53:36,459352,-7.32599e+06,2735,3.048e-07,364.545,10.0418,367.193,999.262,0.318,0.0321458,2.39161,0.178793,351.841,10.187,6.53685,12.4601,15.3515,-2.64796,12.7035, +Centre Node(1),01.02.2003 00:12:17,459352,-7.32599e+06,2735,3.048e-07,363.627,10.0417,367.714,999.322,0.318,0.0317612,2.39161,0.15142,351.19,10.1908,6.61741,12.7751,16.5245,-4.08718,12.4373, +Centre Node(1),04.04.2003 16:30:58,459352,-7.32599e+06,2735,3.048e-07,365.695,10.0416,368.613,999.379,0.318,0.0313672,2.39161,0.184146,351.767,10.188,6.70203,12.449,16.8459,-2.91809,13.9278, +Centre Node(1),06.06.2003 08:49:39,459352,-7.32599e+06,2735,3.048e-07,365.727,10.0414,369.026,999.322,0.318,0.0309654,2.39161,0.18378,351.64,10.1843,6.7904,13.493,17.3859,-3.29888,14.087, +Centre Node(1),09.10.2003 17:27:02,459352,-7.32599e+06,2735,3.048e-07,365.504,10.0413,369.403,999.384,0.318,0.0305869,2.39161,0.197575,351.087,10.1856,6.87576,13.7367,18.3158,-3.89881,14.417, +Centre Node(1),16.06.2004 10:41:46,459352,-7.32599e+06,2735,3.048e-07,366.158,10.0409,370.272,999.336,0.318,0.0298311,2.39161,0.1477,350.997,10.1814,7.05265,13.933,19.2749,-4.11468,15.1602, +Centre Node(1),19.10.2004 19:19:08,459352,-7.32599e+06,2735,3.048e-07,366.217,10.0402,371.358,999.34,0.318,0.0284053,2.39161,0.13999,349.952,10.1761,7.41172,14.6994,21.4053,-5.14031,16.265, +Centre Node(1),27.06.2005 12:33:53,459352,-7.32599e+06,2735,3.048e-07,366.277,10.0399,371.973,999.343,0.318,0.0277035,2.39161,0.137228,349.601,10.1697,7.60194,15.9773,22.372,-5.69557,16.6764, +Centre Node(1),10.11.2006 23:03:22,459352,-7.32599e+06,2735,3.048e-07,366.061,10.0392,372.701,999.332,0.318,0.0263759,2.39161,0.123303,348.552,10.163,7.98935,16.6566,24.1483,-6.6394,17.5089, +Centre Node(1),01.12.2006,459352,-7.32599e+06,2735,3.048e-07,365.274,10.0381,373.945,999.534,0.318,0.0241579,2.39161,0.192062,346.399,10.1611,8.73137,17.3607,27.5455,-8.6708,18.8747, +Centre Node(1),01.12.2006,459352,-7.32599e+06,2735,3.048e-07,365.274,10.0381,373.945,999.534,0.318,0.0241579,2.39161,0.192062,346.399,10.1611,8.73137,17.3607,27.5455,-8.6708,18.8747, +,Date,XCoord (feet),YCoord (feet),ZCoord (feet),Width (inches),Pressure (psia),Temperature (deg F),Stress (psia),Density (lb/ft3),Viscosity (centipoise),LeakoffMobility (ft/day/psi),Conductivity (D.ft),Velocity (ft/sec),ResPressure (psia),ResTemperature (deg F),FiltrateThickness (inches),FiltratePressureDrop (psi),EffectiveResStress (psi),EffectiveFracStress (psi),LeakoffPressureDrop (psi) +Internal Node(2),09.12.1997 22:12:00,459353,-7.32599e+06,2737.75,0.214692,386.349,10.0776,374.548,1000.28,0.318,0.21136,835.779,0.558425,337.235,12.5731,0.922452,54.0624,37.313,11.8009,49.1139, +Internal Node(2),05.02.1998 14:35:11,459353,-7.32599e+06,2737.86,0.0319557,387.372,10.0603,384.308,1000.09,0.318,0.129537,2.75609,0.541816,348.331,10.3126,1.61019,45.5135,35.977,3.06492,39.0419, +Internal Node(2),12.04.1998 23:29:05,459353,-7.32599e+06,2738.03,3.048e-07,388.008,10.0582,385.821,1000.27,0.318,0.108826,2.39161,0.49317,349.584,10.1468,1.93867,37.6044,36.2375,2.18693,38.4245, +Internal Node(2),16.08.1998 08:06:27,459353,-7.32599e+06,2738.3,3.048e-07,370.483,10.0526,386.439,999.891,0.318,0.0845194,2.39161,0.406183,356.281,10.0775,2.57414,37.3057,30.158,-15.9554,14.2026, +Internal Node(2),18.10.1998 00:25:09,459353,-7.32599e+06,2738.3,0.0182279,359.713,10.0741,356.566,999.055,0.318,0.0746502,2.39161,0.399063,328.906,10.1393,2.96712,15.9965,27.6602,3.14687,30.807, +Internal Node(2),19.12.1998 16:43:50,459353,-7.32599e+06,2738.33,3.048e-07,360.336,10.061,365.606,999.394,0.318,0.0671088,2.39161,0.368173,346.769,10.0958,3.33974,29.969,18.8364,-5.27016,13.5663, +Internal Node(2),20.02.1999 09:02:31,459353,-7.32599e+06,2738.33,0.0710909,356.625,10.0673,352.812,998.891,0.318,0.0640904,30.3451,0.996201,332.811,10.1162,3.51536,16.5686,20.0016,3.81265,23.8142, +Internal Node(2),25.06.1999 17:39:53,459353,-7.32599e+06,2738.92,3.048e-07,357.721,10.061,359.7,999.279,0.318,0.0638275,2.39161,0.315588,345.977,10.0927,3.64514,24.146,13.7224,-1.97916,11.7433, +Internal Node(2),27.08.1999 09:58:34,459353,-7.32599e+06,2738.81,0.0782147,349.424,10.0703,345.63,998.56,0.318,0.0597016,40.4121,0.727501,332.462,10.1199,3.92288,12.1594,13.168,3.7936,16.9616, +Internal Node(2),30.12.1999 18:35:56,459353,-7.32599e+06,2739.39,3.048e-07,347.193,10.0651,350.662,998.805,0.318,0.0610211,2.39161,0.29857,342.381,10.0999,3.98693,17.3417,8.28087,-3.46939,4.81148, +Internal Node(2),06.09.2000 11:50:41,459353,-7.32599e+06,2739.8,0.277512,352.929,10.0729,345.603,998.554,0.318,0.0609499,1805.07,0.135766,338.059,10.1169,4.13238,9.50737,7.54346,7.32628,14.8697, +Internal Node(2),09.01.2001 20:28:03,459353,-7.32599e+06,2741.59,0.0396045,358.254,10.0657,355.523,999.085,0.318,0.0230041,5.24662,0.34556,351.154,10.0858,4.37345,14.6214,4.36935,2.73073,7.10008, +Internal Node(2),13.03.2001 12:46:44,459353,-7.32599e+06,2741.59,0.0566387,357.527,10.0666,354.265,998.935,0.318,0.0224112,15.3457,0.562818,347.103,10.0941,4.50831,10.016,7.16273,3.26135,10.4241, +Internal Node(2),15.05.2001 05:05:26,459353,-7.32599e+06,2741.59,3.048e-07,359.226,10.0635,357.708,999.073,0.318,0.0220002,2.39161,0.22552,351.123,10.0854,4.60247,10.3723,6.5851,1.51844,8.10353, +Internal Node(2),17.09.2001 13:42:48,459353,-7.32599e+06,2741.59,0.0424055,360.574,10.0628,357.976,999.078,0.318,0.021655,6.44038,0.3058,350.31,10.0832,4.68512,9.11852,7.6661,2.59823,10.2643, +Internal Node(2),20.01.2002 22:20:10,459353,-7.32599e+06,2742.44,0.0313943,362.603,10.0595,360.213,999.172,0.318,0.023673,2.61336,0.198526,352.488,10.0707,4.6921,10.5297,7.72522,2.38994,10.1152, +Internal Node(2),26.05.2002 06:57:32,459353,-7.32598e+06,2743.23,0.0230018,364.297,10.0579,361.973,999.249,0.318,0.0260991,2.39161,0.18688,353.636,10.0622,4.70192,10.8756,8.33745,2.324,10.6614, +Internal Node(2),28.09.2002 15:34:55,459353,-7.32598e+06,2743.24,0.026665,364.901,10.0585,362.816,999.278,0.318,0.0253968,2.39161,0.106679,352.999,10.0622,4.85586,11.1937,9.81749,2.08447,11.902, +Internal Node(2),30.11.2002 07:53:36,459354,-7.32598e+06,2743.87,0.00374847,365.745,10.0576,363.976,999.318,0.318,0.0276662,2.39161,0.131835,353.784,10.0568,4.89136,11.4124,10.1914,1.7688,11.9602, +Internal Node(2),01.02.2003 00:12:17,459354,-7.32598e+06,2743.87,3.048e-07,365.294,10.0577,364.169,999.354,0.318,0.0272634,2.39161,0.211069,353.073,10.0567,4.97084,11.9067,11.096,1.12519,12.2212, +Internal Node(2),04.04.2003 16:30:58,459354,-7.32598e+06,2743.87,0.00668589,366.522,10.0574,364.961,999.416,0.318,0.0268508,2.39161,0.0940554,353.672,10.0564,5.05491,11.7302,11.2894,1.56095,12.8504, +Internal Node(2),06.06.2003 08:49:39,459354,-7.32598e+06,2744.01,3.048e-07,366.441,10.0567,365.159,999.354,0.318,0.0271479,2.39161,0.0772942,353.566,10.0548,5.11187,12.4465,11.593,1.28255,12.8755, +Internal Node(2),09.10.2003 17:27:02,459354,-7.32598e+06,2744.01,3.048e-07,366.367,10.0566,365.269,999.421,0.318,0.0267513,2.39161,0.107006,352.973,10.0547,5.19413,12.6547,12.2962,1.09801,13.3942, +Internal Node(2),16.06.2004 10:41:46,459354,-7.32598e+06,2744.01,3.048e-07,366.765,10.0559,365.862,999.364,0.318,0.0259631,2.39161,0.0480474,352.899,10.0542,5.36529,12.9325,12.9628,0.903322,13.8661, +Internal Node(2),19.10.2004 19:19:08,459354,-7.32598e+06,2744.01,3.048e-07,366.786,10.0547,366.328,999.366,0.318,0.0245119,2.39161,0.0418185,351.835,10.0533,5.7077,13.5434,14.4925,0.458457,14.951, +Internal Node(2),27.06.2005 12:33:53,459354,-7.32598e+06,2744.01,3.048e-07,366.833,10.0536,366.641,999.368,0.318,0.0238104,2.39161,0.0398264,351.491,10.0521,5.88781,14.7958,15.1499,0.19203,15.3419, +Internal Node(2),10.11.2006 23:03:22,459354,-7.32598e+06,2744.01,3.048e-07,366.626,10.0523,366.852,999.358,0.318,0.0225005,2.39161,0.0336846,350.446,10.0511,6.25398,15.4831,16.4059,-0.226119,16.1798, +Internal Node(2),01.12.2006,459354,-7.32598e+06,2744.01,3.048e-07,365.774,10.0511,367.13,999.573,0.318,0.0203622,2.39161,0.064133,348.261,10.0502,6.95193,16.224,18.8689,-1.35635,17.5125, +Internal Node(2),01.12.2006,459354,-7.32598e+06,2744.01,3.048e-07,365.774,10.0511,367.13,999.573,0.318,0.0203622,2.39161,0.064133,348.261,10.0502,6.95193,16.224,18.8689,-1.35635,17.5125, +,Date,XCoord (m),YCoord (m),ZCoord (m),Width (cm),Pressure (BARa),Temperature (deg C),Stress (BARa),Density (Kg/m3),Viscosity (mPa.s),LeakoffMobility (m/day/bar),Conductivity (D.m),Velocity (m/sec),ResPressure (BARa),ResTemperature (deg C),FiltrateThickness (cm),FiltratePressureDrop (bar),EffectiveResStress (bar),EffectiveFracStress (bar),LeakoffPressureDrop (bar), +Internal Node(3),09.12.1997 22:12:00,459354,-7.32599e+06,2736.66,0.217377,386.231,10.0776,373,1000.27,0.318,0.211058,867.532,0.214156,336.393,12.3051,0.918064,56.2871,36.6071,13.2318,49.8389, +Internal Node(3),05.02.1998 14:35:11,459354,-7.32599e+06,2737.25,0.0282413,386.673,10.0603,383.591,1000.09,0.318,0.132589,2.39161,0.193155,347.788,10.4025,1.56185,46.2791,35.8028,3.08283,38.8857, +Internal Node(3),12.04.1998 23:29:05,459355,-7.32599e+06,2737.72,3.048e-07,387.166,10.0582,385.228,1000.23,0.318,0.114114,2.39161,0.208694,348.846,10.2115,1.83241,37.9522,36.3826,1.93781,38.3205, +Internal Node(3),16.08.1998 08:06:27,459355,-7.32599e+06,2738.03,3.048e-07,369.689,10.0526,385.831,999.891,0.318,0.0865555,2.39161,0.174937,355.437,10.099,2.46583,37.8083,30.3941,-16.1425,14.2516, +Internal Node(3),18.10.1998 00:25:09,459355,-7.32599e+06,2738.02,0.0228391,358.911,10.0741,355.876,999.023,0.318,0.0751982,2.39161,0.172664,328.512,10.1538,2.88064,16.3007,27.3644,3.03443,30.3988, +Internal Node(3),19.12.1998 16:43:50,459356,-7.32599e+06,2738.33,3.048e-07,359.586,10.061,365.123,999.394,0.318,0.0692069,2.39161,0.157074,346.021,10.1017,3.18087,30.5803,19.1026,-5.53722,13.5653, +Internal Node(3),20.02.1999 09:02:31,459356,-7.32599e+06,2738.32,0.0734611,356.424,10.0673,352.399,998.881,0.318,0.0657377,33.4826,0.253158,332.532,10.1282,3.3655,16.8407,19.8668,4.02525,23.892, +Internal Node(3),25.06.1999 17:39:53,459356,-7.32599e+06,2738.6,3.048e-07,356.937,10.061,359.057,999.279,0.318,0.0630752,2.39161,0.132659,345.436,10.1023,3.56246,24.569,13.6211,-2.12045,11.5006, +Internal Node(3),27.08.1999 09:58:34,459357,-7.32599e+06,2738.57,0.0818295,349.205,10.0703,345.14,998.55,0.318,0.0593299,46.2781,0.245973,332.311,10.1449,3.81922,12.2438,12.8289,4.06427,16.8932, +Internal Node(3),30.12.1999 18:35:56,459357,-7.32599e+06,2739.04,3.048e-07,346.345,10.0651,350.123,998.805,0.318,0.059599,2.39161,0.123888,341.956,10.1132,3.90959,17.6081,8.1664,-3.77798,4.38841, +Internal Node(3),06.09.2000 11:50:41,459357,-7.32599e+06,2739.22,0.276558,352.869,10.0729,345.141,998.545,0.318,0.0577837,1786.51,0.0502581,337.825,10.1415,4.09511,9.55761,7.31593,7.72785,15.0438, +Internal Node(3),09.01.2001 20:28:03,459358,-7.326e+06,2740.19,0.0265492,357.406,10.0657,355.541,999.078,0.318,0.0567941,2.39161,0.0801013,350.903,10.1061,4.50612,14.729,4.63732,1.86512,6.50244, +Internal Node(3),13.03.2001 12:46:44,459358,-7.326e+06,2740.19,0.0601587,356.99,10.0666,354.296,998.91,0.318,0.055307,18.3883,0.172623,346.473,10.1313,4.6479,10.2637,7.82376,2.69358,10.5173, +Internal Node(3),15.05.2001 05:05:26,459359,-7.326e+06,2740.04,3.048e-07,358.191,10.0635,357.809,999.05,0.318,0.0533459,2.39161,0.0948542,350.489,10.1182,4.76647,10.8773,7.31963,0.38267,7.7023, +Internal Node(3),17.09.2001 13:42:48,459359,-7.326e+06,2740.04,0.0343934,359.901,10.0628,358.231,999.04,0.318,0.0524528,3.43614,0.0711521,349.777,10.1201,4.85418,9.39518,8.45429,1.66986,10.1242, +Internal Node(3),20.01.2002 22:20:10,459359,-7.326e+06,2740.04,0.0160658,361.662,10.0595,360.652,999.125,0.318,0.050618,2.39161,0.0698229,351.649,10.1077,5.04629,11.0482,9.00255,1.01013,10.0127, +Internal Node(3),26.05.2002 06:57:32,459359,-7.326e+06,2740.28,3.048e-07,363.192,10.0579,362.699,999.195,0.318,0.0502127,2.39161,0.0773277,352.632,10.0995,5.18913,11.4538,10.0671,0.492803,10.5599, +Internal Node(3),28.09.2002 15:34:55,459359,-7.326e+06,2740.31,3.048e-07,364.169,10.0585,363.826,999.244,0.318,0.0489939,2.39161,0.0461299,352.123,10.1001,5.34971,11.6346,11.7031,0.343346,12.0464, +Internal Node(3),30.11.2002 07:53:36,459359,-7.326e+06,2740.42,3.048e-07,364.758,10.0576,365.326,999.272,0.318,0.048094,2.39161,0.0690758,352.811,10.0937,5.50778,12.0001,12.5149,-0.567727,11.9472, +Internal Node(3),01.02.2003 00:12:17,459358,-7.326e+06,2740.44,3.048e-07,364.003,10.0577,365.679,999.336,0.318,0.0475705,2.39161,0.0883882,352.16,10.0937,5.59053,12.3122,13.5184,-1.67603,11.8423, +Internal Node(3),04.04.2003 16:30:58,459358,-7.326e+06,2740.45,3.048e-07,365.819,10.0574,366.526,999.4,0.318,0.0469385,2.39161,0.0604581,352.746,10.0915,5.6772,12.0203,13.7801,-0.706257,13.0739, +Internal Node(3),06.06.2003 08:49:39,459358,-7.326e+06,2740.45,3.048e-07,365.829,10.0567,366.86,999.328,0.318,0.0462841,2.39161,0.0580416,352.612,10.0892,5.76694,12.9491,14.2483,-1.03108,13.2172, +Internal Node(3),09.10.2003 17:27:02,459358,-7.326e+06,2740.46,3.048e-07,365.605,10.0566,367.107,999.405,0.318,0.045672,2.39161,0.0651232,352.043,10.0892,5.85329,13.1869,15.0644,-1.50226,13.5621, +Internal Node(3),16.06.2004 10:41:46,459358,-7.326e+06,2740.46,3.048e-07,366.307,10.0559,367.857,999.342,0.318,0.0444019,2.39161,0.0514364,351.955,10.0872,6.03286,13.3928,15.9018,-1.54976,14.352, +Internal Node(3),19.10.2004 19:19:08,459358,-7.326e+06,2740.46,3.048e-07,366.378,10.0547,368.668,999.347,0.318,0.0420732,2.39161,0.0512134,350.91,10.0844,6.39491,14.1482,17.7575,-2.2901,15.4674, +Internal Node(3),27.06.2005 12:33:53,459358,-7.326e+06,2740.46,3.048e-07,366.442,10.0536,369.145,999.35,0.318,0.0409375,2.39161,0.0512939,350.557,10.0814,6.58551,15.4316,18.5879,-2.70238,15.8855, +Internal Node(3),10.11.2006 23:03:22,459358,-7.326e+06,2740.47,3.048e-07,366.25,10.0523,369.639,999.341,0.318,0.0388269,2.39161,0.0480579,349.512,10.0785,6.97207,16.1185,20.1262,-3.38872,16.7375, +Internal Node(3),01.12.2006,459358,-7.326e+06,2740.48,3.048e-07,365.343,10.0511,370.472,999.558,0.318,0.0353239,2.39161,0.0641843,347.393,10.0771,7.70754,16.8,23.0796,-5.12944,17.9501, +Internal Node(3),01.12.2006,459358,-7.326e+06,2740.48,3.048e-07,365.343,10.0511,370.472,999.558,0.318,0.0353239,2.39161,0.0641843,347.393,10.0771,7.70754,16.8,23.0796,-5.12944,17.9501, From a377449492713f2f94a3cf362737aebedd0f0424 Mon Sep 17 00:00:00 2001 From: Kristian Bendiksen Date: Mon, 1 Aug 2022 15:02:50 +0200 Subject: [PATCH 030/129] Thermal Fracture Import: Add test for loading non-existing file. --- .../UnitTests/RifThermalFractureReader-Test.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/ApplicationLibCode/UnitTests/RifThermalFractureReader-Test.cpp b/ApplicationLibCode/UnitTests/RifThermalFractureReader-Test.cpp index 71ad181fde..a3a4e02226 100644 --- a/ApplicationLibCode/UnitTests/RifThermalFractureReader-Test.cpp +++ b/ApplicationLibCode/UnitTests/RifThermalFractureReader-Test.cpp @@ -92,3 +92,16 @@ TEST( RifThermalFractureReaderTest, LoadFileMixedUnits ) EXPECT_FALSE( errorMessage.isEmpty() ); EXPECT_FALSE( fractureData.get() ); } + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +TEST( RifThermalFractureReaderTest, LoadFileNonExistingFiles ) +{ + QString fileName = CASE_REAL_TEST_DATA_DIRECTORY_03 + "this_file_does_not_exist.csv"; + + auto [fractureData, errorMessage] = RifThermalFractureReader::readFractureCsvFile( fileName ); + + EXPECT_FALSE( errorMessage.isEmpty() ); + EXPECT_FALSE( fractureData.get() ); +} From 52a2d2d1fc6550d25f6766af12641545f31a6bc2 Mon Sep 17 00:00:00 2001 From: Kristian Bendiksen Date: Mon, 1 Aug 2022 15:26:24 +0200 Subject: [PATCH 031/129] Thermal Fracture Import: fix crash when import fails. --- .../ProjectDataModel/Completions/RimThermalFractureTemplate.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ApplicationLibCode/ProjectDataModel/Completions/RimThermalFractureTemplate.cpp b/ApplicationLibCode/ProjectDataModel/Completions/RimThermalFractureTemplate.cpp index 66463f6889..cbec330d93 100644 --- a/ApplicationLibCode/ProjectDataModel/Completions/RimThermalFractureTemplate.cpp +++ b/ApplicationLibCode/ProjectDataModel/Completions/RimThermalFractureTemplate.cpp @@ -80,7 +80,7 @@ RimThermalFractureTemplate::~RimThermalFractureTemplate() //-------------------------------------------------------------------------------------------------- void RimThermalFractureTemplate::setDefaultsBasedOnFile() { - if ( m_fractureDefinitionData ) return; + if ( !m_fractureDefinitionData ) return; computeDepthOfWellPathAtFracture(); computePerforationLength(); From d7346c077bf632b921966dc3ca9a6a5aca03faa6 Mon Sep 17 00:00:00 2001 From: Kristian Bendiksen Date: Wed, 3 Aug 2022 09:09:53 +0200 Subject: [PATCH 032/129] janitor: Improve variable name. --- .../FileInterface/RifThermalFractureReader.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/ApplicationLibCode/FileInterface/RifThermalFractureReader.cpp b/ApplicationLibCode/FileInterface/RifThermalFractureReader.cpp index cec9a4671c..e79a127af2 100644 --- a/ApplicationLibCode/FileInterface/RifThermalFractureReader.cpp +++ b/ApplicationLibCode/FileInterface/RifThermalFractureReader.cpp @@ -44,17 +44,17 @@ std::pair, QString> return std::make_pair( nullptr, QString( "Unable to open file: %1" ).arg( filePath ) ); } - std::shared_ptr def = std::make_shared(); + std::shared_ptr definition = std::make_shared(); QString separator = ","; - auto appendPropertyValues = [def]( int nodeIndex, int valueOffset, const QStringList& values ) { + auto appendPropertyValues = [definition]( int nodeIndex, int valueOffset, const QStringList& values ) { CAF_ASSERT( valueOffset <= values.size() ); for ( int i = valueOffset; i < values.size() - 1; i++ ) { double value = values[i].toDouble(); int propertyIndex = i - valueOffset; - def->appendPropertyValue( propertyIndex, nodeIndex, value ); + definition->appendPropertyValue( propertyIndex, nodeIndex, value ); } }; @@ -72,7 +72,7 @@ std::pair, QString> if ( lineNumber == 1 ) { // The first line is the name of the fracture - def->setName( line ); + definition->setName( line ); } else if ( isHeaderLine( line ) ) { @@ -83,11 +83,11 @@ std::pair, QString> for ( int i = valueOffset; i < headerValues.size() - 1; i++ ) { auto [name, unit] = parseNameAndUnit( headerValues[i] ); - if ( !name.isEmpty() && !unit.isEmpty() ) def->addProperty( name, unit ); + if ( !name.isEmpty() && !unit.isEmpty() ) definition->addProperty( name, unit ); } // Detect unit system - RiaDefines::EclipseUnitSystem unitSystem = detectUnitSystem( def ); + RiaDefines::EclipseUnitSystem unitSystem = detectUnitSystem( definition ); if ( unitSystem == RiaDefines::EclipseUnitSystem::UNITS_UNKNOWN ) { return std::make_pair( nullptr, QString( "Unknown unit system found in file: %1" ).arg( filePath ) ); @@ -95,7 +95,7 @@ std::pair, QString> // Verify that all values have consistent units: // all values should be either metric or field, and mixing is not allowed - bool isUnitsConsistent = checkUnits( def, unitSystem ); + bool isUnitsConsistent = checkUnits( definition, unitSystem ); if ( !isUnitsConsistent ) { return std::make_pair( nullptr, QString( "Inconsistent units found in file: %1" ).arg( filePath ) ); @@ -115,7 +115,7 @@ std::pair, QString> // Second is the timestamp QDateTime dateTime = parseDateTime( values[1] ); - def->addTimeStep( dateTime.toSecsSinceEpoch() ); + definition->addTimeStep( dateTime.toSecsSinceEpoch() ); // appendPropertyValues( nodeIndex, valueOffset, values ); @@ -135,7 +135,7 @@ std::pair, QString> lineNumber++; } - return std::make_pair( def, "" ); + return std::make_pair( definition, "" ); } //-------------------------------------------------------------------------------------------------- From 040933b8a98561aba567252b027e771c79f21cd8 Mon Sep 17 00:00:00 2001 From: Jon Jenssen Date: Wed, 3 Aug 2022 14:01:51 +0200 Subject: [PATCH 033/129] Make sure project tree is updated on ensemble curve copy/paste --- .../SummaryPlotCommands/RicPasteEnsembleCurveSetFeature.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/ApplicationLibCode/Commands/SummaryPlotCommands/RicPasteEnsembleCurveSetFeature.cpp b/ApplicationLibCode/Commands/SummaryPlotCommands/RicPasteEnsembleCurveSetFeature.cpp index e67f79f40e..3515d81ed8 100644 --- a/ApplicationLibCode/Commands/SummaryPlotCommands/RicPasteEnsembleCurveSetFeature.cpp +++ b/ApplicationLibCode/Commands/SummaryPlotCommands/RicPasteEnsembleCurveSetFeature.cpp @@ -112,6 +112,7 @@ void RicPasteEnsembleCurveSetFeature::onActionTriggered( bool isChecked ) if ( plot ) { plot->updateAll(); + plot->updateConnectedEditors(); } coll->updateConnectedEditors(); From 3a1fe7d04f6f13a2c445b7d6b542689da4001d5e Mon Sep 17 00:00:00 2001 From: jonjenssen <69144954+jonjenssen@users.noreply.github.com> Date: Thu, 4 Aug 2022 07:14:12 +0200 Subject: [PATCH 034/129] Only create and show plot window if we import a summary file. (#9155) * Only create and show plot window if we import a summary file. If window is already there, no change. --- .../Application/RiaGuiApplication.cpp | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/ApplicationLibCode/Application/RiaGuiApplication.cpp b/ApplicationLibCode/Application/RiaGuiApplication.cpp index 6fefcf5d8c..a669d8e5ba 100644 --- a/ApplicationLibCode/Application/RiaGuiApplication.cpp +++ b/ApplicationLibCode/Application/RiaGuiApplication.cpp @@ -1188,19 +1188,18 @@ void RiaGuiApplication::invokeProcessEvents( QEventLoop::ProcessEventsFlags flag //-------------------------------------------------------------------------------------------------- void RiaGuiApplication::onFileSuccessfullyLoaded( const QString& fileName, RiaDefines::ImportFileType fileType ) { - if ( int( fileType ) & int( RiaDefines::ImportFileType::ANY_ECLIPSE_FILE ) ) + if ( uint( fileType ) & uint( RiaDefines::ImportFileType::ANY_ECLIPSE_FILE ) ) { - getOrCreateAndShowMainPlotWindow(); - - if ( fileType != RiaDefines::ImportFileType::ECLIPSE_SUMMARY_FILE ) + if ( fileType == RiaDefines::ImportFileType::ECLIPSE_SUMMARY_FILE ) { - if ( mainWindow() ) - { - mainWindow()->raise(); - } + auto plotWindow = getOrCreateAndShowMainPlotWindow(); + plotWindow->raise(); + } + else + { + auto mainWindow = getOrCreateAndShowMainWindow(); + mainWindow->raise(); } - auto plotWindow = getOrCreateMainPlotWindow(); - plotWindow->show(); } if ( !RiaGuiApplication::hasValidProjectFileExtension( fileName ) ) From 0cfdaab7201a9c357ce8b4d6cbdbcba06b11a6ce Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Thu, 4 Aug 2022 13:15:02 +0200 Subject: [PATCH 035/129] #9156 Use PdmPointer to avoid dangling pointer in Plot Editor --- .../Commands/SummaryPlotCommands/RicSummaryPlotEditorUi.cpp | 5 ++++- .../Commands/SummaryPlotCommands/RicSummaryPlotEditorUi.h | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/ApplicationLibCode/Commands/SummaryPlotCommands/RicSummaryPlotEditorUi.cpp b/ApplicationLibCode/Commands/SummaryPlotCommands/RicSummaryPlotEditorUi.cpp index 77b6641c07..71f903c9d3 100644 --- a/ApplicationLibCode/Commands/SummaryPlotCommands/RicSummaryPlotEditorUi.cpp +++ b/ApplicationLibCode/Commands/SummaryPlotCommands/RicSummaryPlotEditorUi.cpp @@ -164,7 +164,10 @@ void RicSummaryPlotEditorUi::updateFromSummaryPlot( RimSummaryPlot* if ( m_targetPlot ) { - targetPlot->firstAncestorOfType( m_plotContainer ); + RimSummaryMultiPlot* parentPlot = nullptr; + targetPlot->firstAncestorOfType( parentPlot ); + m_plotContainer = parentPlot; + populateCurveCreator( *m_targetPlot ); syncPreviewCurvesFromUiSelection(); setInitialCurveVisibility( targetPlot ); diff --git a/ApplicationLibCode/Commands/SummaryPlotCommands/RicSummaryPlotEditorUi.h b/ApplicationLibCode/Commands/SummaryPlotCommands/RicSummaryPlotEditorUi.h index f88b4df977..ec027b8721 100644 --- a/ApplicationLibCode/Commands/SummaryPlotCommands/RicSummaryPlotEditorUi.h +++ b/ApplicationLibCode/Commands/SummaryPlotCommands/RicSummaryPlotEditorUi.h @@ -134,5 +134,5 @@ private: std::unique_ptr m_summaryCurveSelectionEditor; - RimSummaryMultiPlot* m_plotContainer; + caf::PdmPointer m_plotContainer; }; From d2d6e61271f5636012cae6155232515d1dc79ab8 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Fri, 5 Aug 2022 13:14:58 +0200 Subject: [PATCH 036/129] Improve annotations to work in both vertical and horizontal plots (#9154) * Move enums to RiaPlotDefines.h * Add support for formation names shading in horizontal plots * Refactor line property code * modernize code --- .../Application/RiaPlotDefines.h | 28 ++ .../RicNewStimPlanModelPlotFeature.cpp | 6 +- .../RicNewWellBoreStabilityPlotFeature.cpp | 15 +- .../ProjectDataModel/Flow/RimWellPltPlot.cpp | 3 +- .../ProjectDataModel/Flow/RimWellRftPlot.cpp | 3 +- .../Summary/RimSummaryPlot.cpp | 2 + .../WellLog/RimWellLogTrack.cpp | 107 +++--- .../WellLog/RimWellLogTrack.h | 15 +- .../UserInterface/RiuGridCrossQwtPlot.cpp | 3 +- .../UserInterface/RiuPlotAnnotationTool.cpp | 314 +++++++++--------- .../UserInterface/RiuPlotAnnotationTool.h | 96 ++---- .../UserInterface/RiuSummaryPlot.h | 1 + .../UserInterface/RiuSummaryQtChartsPlot.cpp | 7 + .../UserInterface/RiuSummaryQtChartsPlot.h | 1 + .../UserInterface/RiuSummaryQwtPlot.cpp | 13 +- .../UserInterface/RiuSummaryQwtPlot.h | 1 + 16 files changed, 308 insertions(+), 307 deletions(-) diff --git a/ApplicationLibCode/Application/RiaPlotDefines.h b/ApplicationLibCode/Application/RiaPlotDefines.h index 1bbb56cae2..e333e0ca31 100644 --- a/ApplicationLibCode/Application/RiaPlotDefines.h +++ b/ApplicationLibCode/Application/RiaPlotDefines.h @@ -31,6 +31,34 @@ enum class PlotAxis PLOT_AXIS_TOP }; +enum class RegionAnnotationType +{ + NO_ANNOTATIONS = 0, + FORMATION_ANNOTATIONS = 1, + // Used to have Wbs-parameter coding as 2 + RESULT_PROPERTY_ANNOTATIONS = 3 +}; +enum RegionDisplay +{ + DARK_LINES = 0x01, + COLORED_LINES = 0x02, + COLOR_SHADING = 0x04, + COLOR_SHADING_AND_LINES = 0x05, + LIGHT_LINES = 0x08, +}; +enum class TrackSpan +{ + FULL_WIDTH, + LEFT_COLUMN, + CENTRE_COLUMN, + RIGHT_COLUMN +}; +enum class Orientation +{ + HORIZONTAL = 0, + VERTICAL +}; + double minimumDefaultValuePlot(); double minimumDefaultLogValuePlot(); double maximumDefaultValuePlot(); diff --git a/ApplicationLibCode/Commands/CompletionCommands/RicNewStimPlanModelPlotFeature.cpp b/ApplicationLibCode/Commands/CompletionCommands/RicNewStimPlanModelPlotFeature.cpp index 1f7f89e54f..ee0e93175f 100644 --- a/ApplicationLibCode/Commands/CompletionCommands/RicNewStimPlanModelPlotFeature.cpp +++ b/ApplicationLibCode/Commands/CompletionCommands/RicNewStimPlanModelPlotFeature.cpp @@ -223,7 +223,7 @@ void RicNewStimPlanModelPlotFeature::createFormationTrack( RimStimPlanModelPlot* RimWellLogTrack* formationTrack = RicNewWellLogPlotFeatureImpl::createWellLogPlotTrack( false, "Formations", plot ); formationTrack->setFormationWellPath( stimPlanModel->thicknessDirectionWellPath() ); formationTrack->setFormationCase( eclipseCase ); - formationTrack->setAnnotationType( RiuPlotAnnotationTool::RegionAnnotationType::FORMATION_ANNOTATIONS ); + formationTrack->setAnnotationType( RiaDefines::RegionAnnotationType::FORMATION_ANNOTATIONS ); formationTrack->setPropertyValueAxisGridVisibility( RimWellLogPlot::AxisGridVisibility::AXIS_GRID_NONE ); formationTrack->setShowWellPathAttributes( true ); formationTrack->setShowBothSidesOfWell( false ); @@ -255,9 +255,9 @@ void RicNewStimPlanModelPlotFeature::createFaciesTrack( RimStimPlanModelPlot* pl RimWellLogTrack* faciesTrack = RicNewWellLogPlotFeatureImpl::createWellLogPlotTrack( false, "Facies", plot ); faciesTrack->setFormationWellPath( stimPlanModel->thicknessDirectionWellPath() ); faciesTrack->setFormationCase( eclipseCase ); - faciesTrack->setAnnotationType( RiuPlotAnnotationTool::RegionAnnotationType::RESULT_PROPERTY_ANNOTATIONS ); + faciesTrack->setAnnotationType( RiaDefines::RegionAnnotationType::RESULT_PROPERTY_ANNOTATIONS ); faciesTrack->setRegionPropertyResultType( faciesDefinition->resultType(), faciesDefinition->resultVariable() ); - faciesTrack->setAnnotationDisplay( RiuPlotAnnotationTool::COLOR_SHADING ); + faciesTrack->setAnnotationDisplay( RiaDefines::COLOR_SHADING ); faciesTrack->setOverburdenHeight( stimPlanModel->overburdenHeight() ); faciesTrack->setUnderburdenHeight( stimPlanModel->underburdenHeight() ); faciesTrack->setPropertyValueAxisTitle( stimPlanModel->unitForProperty( RiaDefines::CurveProperty::FACIES ) ); diff --git a/ApplicationLibCode/Commands/WellLogCommands/RicNewWellBoreStabilityPlotFeature.cpp b/ApplicationLibCode/Commands/WellLogCommands/RicNewWellBoreStabilityPlotFeature.cpp index 0fa87faedf..97c2e4d42c 100644 --- a/ApplicationLibCode/Commands/WellLogCommands/RicNewWellBoreStabilityPlotFeature.cpp +++ b/ApplicationLibCode/Commands/WellLogCommands/RicNewWellBoreStabilityPlotFeature.cpp @@ -20,6 +20,7 @@ #include "RiaColorTables.h" #include "RiaLogging.h" +#include "RiaPlotDefines.h" #include "RiaResultNames.h" #include "RicNewWellLogCurveExtractionFeature.h" @@ -219,7 +220,7 @@ void RicNewWellBoreStabilityPlotFeature::createFormationTrack( RimWellBoreStabil RimWellLogTrack* formationTrack = RicNewWellLogPlotFeatureImpl::createWellLogPlotTrack( false, "Formations", plot ); formationTrack->setFormationWellPath( wellPath ); formationTrack->setFormationCase( geoMechCase ); - formationTrack->setAnnotationType( RiuPlotAnnotationTool::RegionAnnotationType::FORMATION_ANNOTATIONS ); + formationTrack->setAnnotationType( RiaDefines::RegionAnnotationType::FORMATION_ANNOTATIONS ); formationTrack->setVisiblePropertyValueRange( 0.0, 0.0 ); formationTrack->setColSpan( RimPlot::ONE ); } @@ -235,8 +236,8 @@ void RicNewWellBoreStabilityPlotFeature::createCasingShoeTrack( RimWellBoreStabi casingShoeTrack->setColSpan( RimPlot::ONE ); casingShoeTrack->setFormationWellPath( wellPath ); casingShoeTrack->setFormationCase( geoMechCase ); - casingShoeTrack->setAnnotationType( RiuPlotAnnotationTool::RegionAnnotationType::FORMATION_ANNOTATIONS ); - casingShoeTrack->setAnnotationDisplay( RiuPlotAnnotationTool::COLOR_SHADING_AND_LINES ); + casingShoeTrack->setAnnotationType( RiaDefines::RegionAnnotationType::FORMATION_ANNOTATIONS ); + casingShoeTrack->setAnnotationDisplay( RiaDefines::COLOR_SHADING_AND_LINES ); casingShoeTrack->setShowRegionLabels( false ); casingShoeTrack->setShowWellPathAttributes( true ); casingShoeTrack->setShowBothSidesOfWell( false ); @@ -312,8 +313,8 @@ void RicNewWellBoreStabilityPlotFeature::createStabilityCurvesTrack( RimWellBore stabilityCurvesTrack->setPropertyValueAxisGridVisibility( RimWellLogPlot::AXIS_GRID_MAJOR_AND_MINOR ); stabilityCurvesTrack->setFormationWellPath( wellPath ); stabilityCurvesTrack->setFormationCase( geoMechCase ); - stabilityCurvesTrack->setAnnotationType( RiuPlotAnnotationTool::RegionAnnotationType::FORMATION_ANNOTATIONS ); - stabilityCurvesTrack->setAnnotationDisplay( RiuPlotAnnotationTool::LIGHT_LINES ); + stabilityCurvesTrack->setAnnotationType( RiaDefines::RegionAnnotationType::FORMATION_ANNOTATIONS ); + stabilityCurvesTrack->setAnnotationDisplay( RiaDefines::LIGHT_LINES ); stabilityCurvesTrack->setShowRegionLabels( false ); std::vector resultNames = RiaResultNames::wbsDerivedResultNames(); @@ -431,7 +432,7 @@ void RicNewWellBoreStabilityPlotFeature::createAnglesTrack( RimWellBoreStability wellPathAnglesTrack->setPropertyValueAxisGridVisibility( RimWellLogPlot::AXIS_GRID_MAJOR_AND_MINOR ); wellPathAnglesTrack->setFormationWellPath( wellPath ); wellPathAnglesTrack->setFormationCase( geoMechCase ); - wellPathAnglesTrack->setAnnotationType( RiuPlotAnnotationTool::RegionAnnotationType::FORMATION_ANNOTATIONS ); - wellPathAnglesTrack->setAnnotationDisplay( RiuPlotAnnotationTool::LIGHT_LINES ); + wellPathAnglesTrack->setAnnotationType( RiaDefines::RegionAnnotationType::FORMATION_ANNOTATIONS ); + wellPathAnglesTrack->setAnnotationDisplay( RiaDefines::LIGHT_LINES ); wellPathAnglesTrack->setShowRegionLabels( false ); } diff --git a/ApplicationLibCode/ProjectDataModel/Flow/RimWellPltPlot.cpp b/ApplicationLibCode/ProjectDataModel/Flow/RimWellPltPlot.cpp index f07a0a66d1..821c646f6b 100644 --- a/ApplicationLibCode/ProjectDataModel/Flow/RimWellPltPlot.cpp +++ b/ApplicationLibCode/ProjectDataModel/Flow/RimWellPltPlot.cpp @@ -20,6 +20,7 @@ #include "RiaDateStringParser.h" #include "RiaLogging.h" +#include "RiaPlotDefines.h" #include "RiaQDateTimeTools.h" #include "RiaWellNameComparer.h" @@ -1096,7 +1097,7 @@ void RimWellPltPlot::onLoadDataAndUpdate() RimWellLogTrack* const plotTrack = dynamic_cast( plotByIndex( 0 ) ); if ( plotTrack ) { - plotTrack->setAnnotationType( RiuPlotAnnotationTool::RegionAnnotationType::FORMATION_ANNOTATIONS ); + plotTrack->setAnnotationType( RiaDefines::RegionAnnotationType::FORMATION_ANNOTATIONS ); } } m_isOnLoad = false; diff --git a/ApplicationLibCode/ProjectDataModel/Flow/RimWellRftPlot.cpp b/ApplicationLibCode/ProjectDataModel/Flow/RimWellRftPlot.cpp index 6da96b0eaf..545ea821d8 100644 --- a/ApplicationLibCode/ProjectDataModel/Flow/RimWellRftPlot.cpp +++ b/ApplicationLibCode/ProjectDataModel/Flow/RimWellRftPlot.cpp @@ -21,6 +21,7 @@ #include "RiaColorTables.h" #include "RiaColorTools.h" #include "RiaDateStringParser.h" +#include "RiaPlotDefines.h" #include "RiaSimWellBranchTools.h" #include "RifReaderEclipseRft.h" @@ -1058,7 +1059,7 @@ void RimWellRftPlot::onLoadDataAndUpdate() RimWellLogTrack* const plotTrack = dynamic_cast( plotByIndex( 0 ) ); if ( plotTrack ) { - plotTrack->setAnnotationType( RiuPlotAnnotationTool::RegionAnnotationType::FORMATION_ANNOTATIONS ); + plotTrack->setAnnotationType( RiaDefines::RegionAnnotationType::FORMATION_ANNOTATIONS ); } } diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlot.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlot.cpp index a5137c7a63..7a75cc294c 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlot.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlot.cpp @@ -217,6 +217,8 @@ void RimSummaryPlot::updateAxes() updateAxis( RiaDefines::PlotAxis::PLOT_AXIS_LEFT ); updateAxis( RiaDefines::PlotAxis::PLOT_AXIS_RIGHT ); + m_summaryPlot->clearAnnotationObjects(); + if ( timeAxisProperties() && plotWidget() ) { m_summaryPlot->updateAnnotationObjects( timeAxisProperties() ); diff --git a/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogTrack.cpp b/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogTrack.cpp index 0fc0aa01c5..f7bc5ed4ac 100644 --- a/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogTrack.cpp +++ b/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogTrack.cpp @@ -149,23 +149,23 @@ void AppEnum::setUp() } template <> -void AppEnum::setUp() +void AppEnum::setUp() { - addItem( RiuPlotAnnotationTool::RegionAnnotationType::NO_ANNOTATIONS, "NO_ANNOTATIONS", "No Annotations" ); - addItem( RiuPlotAnnotationTool::RegionAnnotationType::FORMATION_ANNOTATIONS, "FORMATIONS", "Formations" ); - addItem( RiuPlotAnnotationTool::RegionAnnotationType::RESULT_PROPERTY_ANNOTATIONS, "RESULT_PROPERTY", "Result Property" ); - setDefault( RiuPlotAnnotationTool::RegionAnnotationType::NO_ANNOTATIONS ); + addItem( RiaDefines::RegionAnnotationType::NO_ANNOTATIONS, "NO_ANNOTATIONS", "No Annotations" ); + addItem( RiaDefines::RegionAnnotationType::FORMATION_ANNOTATIONS, "FORMATIONS", "Formations" ); + addItem( RiaDefines::RegionAnnotationType::RESULT_PROPERTY_ANNOTATIONS, "RESULT_PROPERTY", "Result Property" ); + setDefault( RiaDefines::RegionAnnotationType::NO_ANNOTATIONS ); } template <> -void AppEnum::setUp() +void AppEnum::setUp() { - addItem( RiuPlotAnnotationTool::DARK_LINES, "DARK_LINES", "Dark Lines" ); - addItem( RiuPlotAnnotationTool::LIGHT_LINES, "LIGHT_LINES", "Light Lines" ); - addItem( RiuPlotAnnotationTool::COLORED_LINES, "COLORED_LINES", "Colored Lines" ); - addItem( RiuPlotAnnotationTool::COLOR_SHADING, "COLOR_SHADING", "Color Shading" ); - addItem( RiuPlotAnnotationTool::COLOR_SHADING_AND_LINES, "SHADING_AND_LINES", "Color Shading and Lines" ); - setDefault( RiuPlotAnnotationTool::COLOR_SHADING_AND_LINES ); + addItem( RiaDefines::DARK_LINES, "DARK_LINES", "Dark Lines" ); + addItem( RiaDefines::LIGHT_LINES, "LIGHT_LINES", "Light Lines" ); + addItem( RiaDefines::COLORED_LINES, "COLORED_LINES", "Colored Lines" ); + addItem( RiaDefines::COLOR_SHADING, "COLOR_SHADING", "Color Shading" ); + addItem( RiaDefines::COLOR_SHADING_AND_LINES, "SHADING_AND_LINES", "Color Shading and Lines" ); + setDefault( RiaDefines::COLOR_SHADING_AND_LINES ); } } // namespace caf @@ -1305,8 +1305,8 @@ void RimWellLogTrack::onLoadDataAndUpdate() m_curves[cIdx]->loadDataAndUpdate( false ); } - if ( m_regionAnnotationType == RiuPlotAnnotationTool::RegionAnnotationType::FORMATION_ANNOTATIONS || - m_regionAnnotationType == RiuPlotAnnotationTool::RegionAnnotationType::RESULT_PROPERTY_ANNOTATIONS ) + if ( m_regionAnnotationType == RiaDefines::RegionAnnotationType::FORMATION_ANNOTATIONS || + m_regionAnnotationType == RiaDefines::RegionAnnotationType::RESULT_PROPERTY_ANNOTATIONS ) { m_resultDefinition->loadDataAndUpdate(); setFormationFieldsUiReadOnly( false ); @@ -1315,7 +1315,7 @@ void RimWellLogTrack::onLoadDataAndUpdate() { setFormationFieldsUiReadOnly( true ); } - bool noAnnotations = m_regionAnnotationType() == RiuPlotAnnotationTool::RegionAnnotationType::NO_ANNOTATIONS; + bool noAnnotations = m_regionAnnotationType() == RiaDefines::RegionAnnotationType::NO_ANNOTATIONS; m_regionAnnotationDisplay.uiCapability()->setUiReadOnly( noAnnotations ); m_showRegionLabels.uiCapability()->setUiReadOnly( noAnnotations ); @@ -1356,7 +1356,7 @@ void RimWellLogTrack::setAndUpdateWellPathFormationNamesData( RimCase* rimCase, updateConnectedEditors(); - if ( m_regionAnnotationType != RiuPlotAnnotationTool::RegionAnnotationType::NO_ANNOTATIONS ) + if ( m_regionAnnotationType != RiaDefines::RegionAnnotationType::NO_ANNOTATIONS ) { updateRegionAnnotationsOnPlot(); } @@ -1388,7 +1388,7 @@ void RimWellLogTrack::setAndUpdateSimWellFormationNamesData( RimCase* rimCase, c updateConnectedEditors(); - if ( m_regionAnnotationType != RiuPlotAnnotationTool::RegionAnnotationType::NO_ANNOTATIONS ) + if ( m_regionAnnotationType != RiaDefines::RegionAnnotationType::NO_ANNOTATIONS ) { updateRegionAnnotationsOnPlot(); } @@ -1730,7 +1730,7 @@ void RimWellLogTrack::setColorShadingLegend( RimColorLegend* colorLegend ) //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RimWellLogTrack::setAnnotationType( RiuPlotAnnotationTool::RegionAnnotationType annotationType ) +void RimWellLogTrack::setAnnotationType( RiaDefines::RegionAnnotationType annotationType ) { m_regionAnnotationType = annotationType; } @@ -1738,7 +1738,7 @@ void RimWellLogTrack::setAnnotationType( RiuPlotAnnotationTool::RegionAnnotation //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RimWellLogTrack::setAnnotationDisplay( RiuPlotAnnotationTool::RegionDisplay annotationDisplay ) +void RimWellLogTrack::setAnnotationDisplay( RiaDefines::RegionDisplay annotationDisplay ) { m_regionAnnotationDisplay = annotationDisplay; } @@ -1754,7 +1754,7 @@ void RimWellLogTrack::setAnnotationTransparency( int percent ) //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -RiuPlotAnnotationTool::RegionAnnotationType RimWellLogTrack::annotationType() const +RiaDefines::RegionAnnotationType RimWellLogTrack::annotationType() const { return m_regionAnnotationType(); } @@ -1762,7 +1762,7 @@ RiuPlotAnnotationTool::RegionAnnotationType RimWellLogTrack::annotationType() co //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -RiuPlotAnnotationTool::RegionDisplay RimWellLogTrack::annotationDisplay() const +RiaDefines::RegionDisplay RimWellLogTrack::annotationDisplay() const { return m_regionAnnotationDisplay(); } @@ -1772,7 +1772,7 @@ RiuPlotAnnotationTool::RegionDisplay RimWellLogTrack::annotationDisplay() const //-------------------------------------------------------------------------------------------------- bool RimWellLogTrack::showFormations() const { - return m_regionAnnotationType() == RiuPlotAnnotationTool::RegionAnnotationType::FORMATION_ANNOTATIONS; + return m_regionAnnotationType() == RiaDefines::RegionAnnotationType::FORMATION_ANNOTATIONS; } //-------------------------------------------------------------------------------------------------- @@ -1919,14 +1919,13 @@ void RimWellLogTrack::defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering annotationGroup->add( &m_regionAnnotationType ); annotationGroup->add( &m_regionAnnotationDisplay ); annotationGroup->add( &m_showRegionLabels ); - if ( m_regionAnnotationType() == RiuPlotAnnotationTool::RegionAnnotationType::RESULT_PROPERTY_ANNOTATIONS ) + if ( m_regionAnnotationType() == RiaDefines::RegionAnnotationType::RESULT_PROPERTY_ANNOTATIONS ) annotationGroup->add( &m_regionLabelFontSize ); - if ( m_regionAnnotationDisplay() & RiuPlotAnnotationTool::COLOR_SHADING || - m_regionAnnotationDisplay() & RiuPlotAnnotationTool::COLORED_LINES ) + if ( m_regionAnnotationDisplay() & RiaDefines::COLOR_SHADING || m_regionAnnotationDisplay() & RiaDefines::COLORED_LINES ) { annotationGroup->add( &m_colorShadingLegend ); - if ( m_regionAnnotationDisplay() & RiuPlotAnnotationTool::COLOR_SHADING ) + if ( m_regionAnnotationDisplay() & RiaDefines::COLOR_SHADING ) { annotationGroup->add( &m_colorShadingTransparency ); } @@ -1975,7 +1974,7 @@ void RimWellLogTrack::defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering } } - if ( m_regionAnnotationType() == RiuPlotAnnotationTool::RegionAnnotationType::RESULT_PROPERTY_ANNOTATIONS ) + if ( m_regionAnnotationType() == RiaDefines::RegionAnnotationType::RESULT_PROPERTY_ANNOTATIONS ) { m_resultDefinition->uiOrdering( uiConfigName, *annotationGroup ); } @@ -2002,7 +2001,7 @@ void RimWellLogTrack::defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering //-------------------------------------------------------------------------------------------------- void RimWellLogTrack::initAfterRead() { - if ( m_regionAnnotationType() == RiuPlotAnnotationTool::RegionAnnotationType::RESULT_PROPERTY_ANNOTATIONS ) + if ( m_regionAnnotationType() == RiaDefines::RegionAnnotationType::RESULT_PROPERTY_ANNOTATIONS ) { RimEclipseCase* eclipseCase = dynamic_cast( m_formationCase.value() ); m_resultDefinition->setEclipseCase( dynamic_cast( eclipseCase ) ); @@ -2708,18 +2707,18 @@ void RimWellLogTrack::updateRegionAnnotationsOnPlot() { removeRegionAnnotations(); - if ( m_regionAnnotationType == RiuPlotAnnotationTool::RegionAnnotationType::NO_ANNOTATIONS ) return; + if ( m_regionAnnotationType == RiaDefines::RegionAnnotationType::NO_ANNOTATIONS ) return; if ( m_annotationTool == nullptr ) { m_annotationTool = std::unique_ptr( new RiuPlotAnnotationTool() ); } - if ( m_regionAnnotationType == RiuPlotAnnotationTool::RegionAnnotationType::FORMATION_ANNOTATIONS ) + if ( m_regionAnnotationType == RiaDefines::RegionAnnotationType::FORMATION_ANNOTATIONS ) { updateFormationNamesOnPlot(); } - else if ( m_regionAnnotationType == RiuPlotAnnotationTool::RegionAnnotationType::RESULT_PROPERTY_ANNOTATIONS ) + else if ( m_regionAnnotationType == RiaDefines::RegionAnnotationType::RESULT_PROPERTY_ANNOTATIONS ) { updateResultPropertyNamesOnPlot(); } @@ -2740,6 +2739,10 @@ void RimWellLogTrack::updateFormationNamesOnPlot() RiaDefines::DepthUnitType fromDepthUnit = plot->caseDepthUnit(); RiaDefines::DepthUnitType toDepthUnit = plot->depthUnit(); + RiaDefines::Orientation orientation = RiaDefines::Orientation::HORIZONTAL; + if ( plot->depthOrientation() == RimDepthTrackPlot::DepthOrientation::VERTICAL ) + orientation = RiaDefines::Orientation::VERTICAL; + if ( m_formationSource() == FormationSource::WELL_PICK_FILTER ) { if ( m_formationWellPathForSourceWellPath == nullptr ) return; @@ -2833,8 +2836,6 @@ void RimWellLogTrack::updateFormationNamesOnPlot() if ( geoMechWellLogExtractor ) { // Attach water and rock base formations - const std::pair xRange = - std::make_pair( m_visiblePropertyValueRangeMin(), m_visiblePropertyValueRangeMax() ); const caf::ColorTable waterAndRockColors = RiaColorTables::waterAndRockPaletteColors(); const std::vector> waterAndRockIntervals = @@ -2845,13 +2846,13 @@ void RimWellLogTrack::updateFormationNamesOnPlot() m_annotationTool->attachNamedRegions( m_plotWidget->qwtPlot(), { "Sea Level", "" }, - xRange, + orientation, convertedYValues, m_regionAnnotationDisplay(), waterAndRockColors, ( ( 100 - m_colorShadingTransparency ) * 255 ) / 100, m_showRegionLabels(), - RiuPlotAnnotationTool::TrackSpan::LEFT_COLUMN, + RiaDefines::TrackSpan::LEFT_COLUMN, { Qt::SolidPattern, Qt::Dense6Pattern } ); } @@ -2882,16 +2883,13 @@ void RimWellLogTrack::updateFormationNamesOnPlot() &formationNamesToPlot, &yValues ); - const std::pair xRange = - std::make_pair( m_visiblePropertyValueRangeMin(), m_visiblePropertyValueRangeMax() ); - std::vector> convertedYValues = RiaWellLogUnitTools::convertDepths( yValues, fromDepthUnit, toDepthUnit ); caf::ColorTable colorTable( m_colorShadingLegend->colorArray() ); m_annotationTool->attachNamedRegions( m_plotWidget->qwtPlot(), formationNamesToPlot, - xRange, + orientation, convertedYValues, m_regionAnnotationDisplay(), colorTable, @@ -2912,6 +2910,10 @@ void RimWellLogTrack::updateResultPropertyNamesOnPlot() RiaDefines::DepthUnitType fromDepthUnit = plot->caseDepthUnit(); RiaDefines::DepthUnitType toDepthUnit = plot->depthUnit(); + RiaDefines::Orientation orientation = RiaDefines::Orientation::HORIZONTAL; + if ( plot->depthOrientation() == RimDepthTrackPlot::DepthOrientation::VERTICAL ) + orientation = RiaDefines::Orientation::VERTICAL; + RigEclipseWellLogExtractor* eclWellLogExtractor = RiaExtractionTools::findOrCreateWellLogExtractor( m_formationWellPathForSourceCase, dynamic_cast( m_formationCase() ) ); @@ -2944,8 +2946,6 @@ void RimWellLogTrack::updateResultPropertyNamesOnPlot() CurveSamplingPointData curveData = RimWellLogTrack::curveSamplingPointData( eclWellLogExtractor, resultAccessor.p() ); // Attach water and rock base formations - const std::pair xRange = - std::make_pair( m_visiblePropertyValueRangeMin(), m_visiblePropertyValueRangeMax() ); if ( m_formationSource == FormationSource::CASE ) { @@ -2987,7 +2987,7 @@ void RimWellLogTrack::updateResultPropertyNamesOnPlot() std::vector> convertedYValues = RiaWellLogUnitTools::convertDepths( yValues, fromDepthUnit, toDepthUnit ); - // TODO: unecessarily messy! + // TODO: unnecessarily messy! // Need to map colors to names (since a category can be used several times) for ( QString nameToPlot : namesToPlot ) { @@ -3020,13 +3020,13 @@ void RimWellLogTrack::updateResultPropertyNamesOnPlot() m_annotationTool->attachNamedRegions( m_plotWidget->qwtPlot(), namesToPlot, - xRange, + orientation, convertedYValues, m_regionAnnotationDisplay(), colorTable, ( ( 100 - m_colorShadingTransparency ) * 255 ) / 100, m_showRegionLabels(), - RiuPlotAnnotationTool::TrackSpan::FULL_WIDTH, + RiaDefines::TrackSpan::FULL_WIDTH, {}, fontSize ); } @@ -3044,6 +3044,10 @@ void RimWellLogTrack::updateCurveDataRegionsOnPlot() RiaDefines::DepthUnitType fromDepthUnit = wellBoreStabilityPlot->caseDepthUnit(); RiaDefines::DepthUnitType toDepthUnit = wellBoreStabilityPlot->depthUnit(); + RiaDefines::Orientation orientation = RiaDefines::Orientation::HORIZONTAL; + if ( wellBoreStabilityPlot->depthOrientation() == RimDepthTrackPlot::DepthOrientation::VERTICAL ) + orientation = RiaDefines::Orientation::VERTICAL; + wellBoreStabilityPlot->updateCommonDataSource(); RimGeoMechCase* geoMechCase = dynamic_cast( wellBoreStabilityPlot->commonDataSource()->caseToApply() ); @@ -3056,9 +3060,6 @@ void RimWellLogTrack::updateCurveDataRegionsOnPlot() RiaExtractionTools::findOrCreateWellLogExtractor( wellPath, dynamic_cast( geoMechCase ) ); if ( !geoMechWellLogExtractor ) return; - std::pair xRange = - std::make_pair( m_visiblePropertyValueRangeMin(), m_visiblePropertyValueRangeMax() ); - CurveSamplingPointData curveData; curveData.md = geoMechWellLogExtractor->cellIntersectionMDs(); curveData.tvd = geoMechWellLogExtractor->cellIntersectionTVDs(); @@ -3098,13 +3099,13 @@ void RimWellLogTrack::updateCurveDataRegionsOnPlot() m_annotationTool->attachNamedRegions( m_plotWidget->qwtPlot(), sourceNamesToPlot, - xRange, + orientation, convertedYValues, m_regionAnnotationDisplay(), colorTable, ( ( ( 100 - m_colorShadingTransparency ) * 255 ) / 100 ) / 3, m_showRegionLabels(), - RiuPlotAnnotationTool::TrackSpan::LEFT_COLUMN ); + RiaDefines::TrackSpan::LEFT_COLUMN ); } { caf::ColorTable colorTable( m_colorShadingLegend->colorArray() ); @@ -3129,13 +3130,13 @@ void RimWellLogTrack::updateCurveDataRegionsOnPlot() m_annotationTool->attachNamedRegions( m_plotWidget->qwtPlot(), sourceNamesToPlot, - xRange, + orientation, convertedYValues, m_regionAnnotationDisplay(), colorTable, ( ( ( 100 - m_colorShadingTransparency ) * 255 ) / 100 ) / 3, m_showRegionLabels(), - RiuPlotAnnotationTool::TrackSpan::CENTRE_COLUMN ); + RiaDefines::TrackSpan::CENTRE_COLUMN ); } { caf::ColorTable colorTable( m_colorShadingLegend->colorArray() ); @@ -3159,13 +3160,13 @@ void RimWellLogTrack::updateCurveDataRegionsOnPlot() m_annotationTool->attachNamedRegions( m_plotWidget->qwtPlot(), sourceNamesToPlot, - xRange, + orientation, convertedYValues, m_regionAnnotationDisplay(), colorTable, ( ( ( 100 - m_colorShadingTransparency ) * 255 ) / 100 ) / 3, m_showRegionLabels(), - RiuPlotAnnotationTool::TrackSpan::RIGHT_COLUMN ); + RiaDefines::TrackSpan::RIGHT_COLUMN ); } } } diff --git a/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogTrack.h b/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogTrack.h index 5b23753ce0..fe4519a495 100644 --- a/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogTrack.h +++ b/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogTrack.h @@ -21,8 +21,8 @@ #include "RimWellLogPlot.h" +#include "RiaPlotDefines.h" #include "RigWellPathFormations.h" -#include "RiuPlotAnnotationTool.h" #include "RimPlot.h" @@ -57,6 +57,7 @@ class RigWellLogExtractor; class RimEclipseResultDefinition; class RimColorLegend; class RimEnsembleWellLogCurveSet; +class RiuPlotAnnotationTool; struct CurveSamplingPointData { @@ -87,8 +88,8 @@ public: WELL_PICK_FILTER }; - using RegionAnnotationTypeEnum = caf::AppEnum; - using RegionAnnotationDisplayEnum = caf::AppEnum; + using RegionAnnotationTypeEnum = caf::AppEnum; + using RegionAnnotationDisplayEnum = caf::AppEnum; public: RimWellLogTrack(); @@ -166,13 +167,13 @@ public: void setMinAndMaxTicksOnly( bool enable ); void setPropertyValueAxisGridVisibility( RimWellLogPlot::AxisGridVisibility gridLines ); - void setAnnotationType( RiuPlotAnnotationTool::RegionAnnotationType annotationType ); - void setAnnotationDisplay( RiuPlotAnnotationTool::RegionDisplay annotationDisplay ); + void setAnnotationType( RiaDefines::RegionAnnotationType annotationType ); + void setAnnotationDisplay( RiaDefines::RegionDisplay annotationDisplay ); void setAnnotationTransparency( int percent ); void setColorShadingLegend( RimColorLegend* colorLegend ); - RiuPlotAnnotationTool::RegionAnnotationType annotationType() const; - RiuPlotAnnotationTool::RegionDisplay annotationDisplay() const; + RiaDefines::RegionAnnotationType annotationType() const; + RiaDefines::RegionDisplay annotationDisplay() const; bool showFormations() const; diff --git a/ApplicationLibCode/UserInterface/RiuGridCrossQwtPlot.cpp b/ApplicationLibCode/UserInterface/RiuGridCrossQwtPlot.cpp index a28ad6e771..6b7b57b3f8 100644 --- a/ApplicationLibCode/UserInterface/RiuGridCrossQwtPlot.cpp +++ b/ApplicationLibCode/UserInterface/RiuGridCrossQwtPlot.cpp @@ -18,6 +18,7 @@ #include "RiuGridCrossQwtPlot.h" #include "RiaFontCache.h" +#include "RiaPlotDefines.h" #include "RimGridCrossPlot.h" #include "RimGridCrossPlotCurve.h" @@ -145,7 +146,7 @@ void RiuGridCrossQwtPlot::updateAnnotationObjects( RimPlotAxisPropertiesInterfac annotation->color(), annotation->name(), annotation->value(), - RiuPlotAnnotationTool::Orientation::HORIZONTAL ); + RiaDefines::Orientation::HORIZONTAL ); } } diff --git a/ApplicationLibCode/UserInterface/RiuPlotAnnotationTool.cpp b/ApplicationLibCode/UserInterface/RiuPlotAnnotationTool.cpp index 35b02f8a98..51fa04a752 100644 --- a/ApplicationLibCode/UserInterface/RiuPlotAnnotationTool.cpp +++ b/ApplicationLibCode/UserInterface/RiuPlotAnnotationTool.cpp @@ -44,17 +44,17 @@ RiuPlotAnnotationTool::~RiuPlotAnnotationTool() //-------------------------------------------------------------------------------------------------- void RiuPlotAnnotationTool::attachNamedRegions( QwtPlot* plot, const std::vector& names, - const std::pair xRange, - const std::vector>& yPositions, - RegionDisplay regionDisplay, + RiaDefines::Orientation depthOrientation, + const std::vector>& regionRanges, + RiaDefines::RegionDisplay regionDisplay, const caf::ColorTable& colorTable, int shadingAlphaByte, bool showNames /*= true */, - TrackSpan trackSpan /*= FULL_WIDTH*/, + RiaDefines::TrackSpan trackSpan /*= FULL_WIDTH*/, const std::vector& brushStyles /* = {}*/, int fontSize ) { - if ( names.size() != yPositions.size() ) return; + if ( names.size() != regionRanges.size() ) return; m_plot = plot; double delta = 0.5; @@ -66,27 +66,36 @@ void RiuPlotAnnotationTool::attachNamedRegions( QwtPlot* catMapper.setCategories( categoryIndices ); catMapper.setInterpolateColors( colorTable.color3ubArray() ); + RiaDefines::Orientation annotationOrientation = RiaDefines::Orientation::HORIZONTAL; + if ( depthOrientation == RiaDefines::Orientation::HORIZONTAL ) + annotationOrientation = RiaDefines::Orientation::VERTICAL; + for ( size_t i = 0; i < names.size(); i++ ) { - QwtPlotMarker* line( new QwtPlotMarker() ); + auto* line( new QwtPlotMarker() ); QString name; if ( showNames && !names[i].isEmpty() ) { name = names[i]; - if ( ( regionDisplay & COLOR_SHADING ) == 0 && names[i].toLower().indexOf( "top" ) == -1 ) + if ( ( regionDisplay & RiaDefines::COLOR_SHADING ) == 0 && names[i].toLower().indexOf( "top" ) == -1 ) { name += " Top"; } } - if ( regionDisplay & COLOR_SHADING ) + if ( regionDisplay & RiaDefines::COLOR_SHADING ) { cvf::Color3ub cvfColor = catMapper.mapToColor( static_cast( i ) ); QColor shadingColor( cvfColor.r(), cvfColor.g(), cvfColor.b(), shadingAlphaByte ); - QwtPlotZoneItem* shading = new QwtPlotZoneItem(); - shading->setOrientation( Qt::Horizontal ); - shading->setInterval( yPositions[i].first, yPositions[i].second ); + auto* shading = new QwtPlotZoneItem(); + + if ( depthOrientation == RiaDefines::Orientation::HORIZONTAL ) + shading->setOrientation( Qt::Vertical ); + else + shading->setOrientation( Qt::Horizontal ); + + shading->setInterval( regionRanges[i].first, regionRanges[i].second ); shading->setPen( shadingColor, 0.0, Qt::NoPen ); QBrush brush( shadingColor ); if ( i < brushStyles.size() ) @@ -97,21 +106,22 @@ void RiuPlotAnnotationTool::attachNamedRegions( QwtPlot* shading->attach( m_plot ); shading->setZ( -100.0 ); shading->setXAxis( QwtAxis::XTop ); - m_horizontalMarkers.push_back( std::move( shading ) ); + m_plotItems.push_back( shading ); } QColor lineColor( 0, 0, 0, 0 ); QColor textColor( 0, 0, 0, 255 ); - if ( regionDisplay & DARK_LINES || regionDisplay & COLORED_LINES || regionDisplay & LIGHT_LINES ) + if ( regionDisplay & RiaDefines::DARK_LINES || regionDisplay & RiaDefines::COLORED_LINES || + regionDisplay & RiaDefines::LIGHT_LINES ) { cvf::Color3ub cvfColor = catMapper.mapToColor( static_cast( i ) ); QColor cycledColor( cvfColor.r(), cvfColor.g(), cvfColor.b() ); - if ( regionDisplay & DARK_LINES ) + if ( regionDisplay & RiaDefines::DARK_LINES ) { lineColor = QColor( 50, 50, 100 ); } - else if ( regionDisplay & LIGHT_LINES ) + else if ( regionDisplay & RiaDefines::LIGHT_LINES ) { lineColor = QColor( 200, 200, 200 ); } @@ -122,29 +132,34 @@ void RiuPlotAnnotationTool::attachNamedRegions( QwtPlot* textColor = lineColor; } Qt::Alignment horizontalAlignment = trackTextAlignment( trackSpan ); - RiuPlotAnnotationTool::horizontalDashedLine( line, - name, - yPositions[i].first, - lineColor, - textColor, - horizontalAlignment, - fontSize ); + + RiuPlotAnnotationTool::setLineProperties( line, + name, + annotationOrientation, + regionRanges[i].first, + Qt::DashLine, + lineColor, + textColor, + horizontalAlignment, + fontSize ); line->attach( m_plot ); - m_horizontalMarkers.push_back( std::move( line ) ); + m_plotItems.push_back( line ); - if ( ( i != names.size() - 1 ) && cvf::Math::abs( yPositions[i].second - yPositions[i + 1].first ) > delta ) + if ( ( i != names.size() - 1 ) && cvf::Math::abs( regionRanges[i].second - regionRanges[i + 1].first ) > delta ) { - QwtPlotMarker* bottomLine( new QwtPlotMarker() ); - RiuPlotAnnotationTool::horizontalDashedLine( bottomLine, - QString(), - yPositions[i].second, - lineColor, - textColor, - Qt::AlignRight, - fontSize ); + auto* bottomLine( new QwtPlotMarker() ); + RiuPlotAnnotationTool::setLineProperties( bottomLine, + QString(), + annotationOrientation, + regionRanges[i].second, + Qt::DashLine, + lineColor, + textColor, + Qt::AlignRight, + fontSize ); bottomLine->attach( m_plot ); - m_horizontalMarkers.push_back( std::move( bottomLine ) ); + m_plotItems.push_back( bottomLine ); } } } @@ -156,68 +171,63 @@ void RiuPlotAnnotationTool::attachWellPicks( QwtPlot* plot, const std::vector& names, const std::vector& yPositions ) { - detachAllAnnotations( Orientation::HORIZONTAL ); + detachAllAnnotations(); if ( names.size() != yPositions.size() ) return; m_plot = plot; for ( size_t i = 0; i < names.size(); i++ ) { - QwtPlotMarker* line( new QwtPlotMarker() ); - RiuPlotAnnotationTool::horizontalDashedLine( line, names[i], yPositions[i] ); + auto* line( new QwtPlotMarker() ); + RiuPlotAnnotationTool::setLineProperties( line, names[i], RiaDefines::Orientation::HORIZONTAL, yPositions[i] ); line->attach( m_plot ); - m_horizontalMarkers.push_back( std::move( line ) ); + m_plotItems.push_back( line ); } } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RiuPlotAnnotationTool::attachAnnotationLine( QwtPlot* plot, - const QColor& color, - const QString& annotationText, - const double position, - Orientation orientation ) +void RiuPlotAnnotationTool::attachAnnotationLine( QwtPlot* plot, + const QColor& color, + const QString& annotationText, + const double position, + RiaDefines::Orientation orientation ) { m_plot = plot; - QwtPlotMarker* line( new QwtPlotMarker() ); - if ( orientation == Orientation::HORIZONTAL ) + auto* line( new QwtPlotMarker() ); + + auto textColor = color; + if ( orientation == RiaDefines::Orientation::VERTICAL ) { - RiuPlotAnnotationTool::horizontalDashedLine( line, annotationText, position, color, color ); - m_horizontalMarkers.push_back( std::move( line ) ); - } - else if ( orientation == Orientation::VERTICAL ) - { - RiuPlotAnnotationTool::verticalLine( line, - annotationText, - position, - color, - RiuGuiTheme::getColorByVariableName( "textColor" ) ); - m_verticalMarkers.push_back( std::move( line ) ); + textColor = RiuGuiTheme::getColorByVariableName( "textColor" ); } + + RiuPlotAnnotationTool::setLineProperties( line, annotationText, orientation, position, Qt::SolidLine, color, textColor ); + m_plotItems.push_back( line ); line->attach( m_plot ); } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RiuPlotAnnotationTool::attachAnnotationRange( QwtPlot* plot, - const QColor& color, - const QString& annotationText, - const double rangeStart, - const double rangeEnd, - Orientation orientation ) +void RiuPlotAnnotationTool::attachAnnotationRange( QwtPlot* plot, + const QColor& color, + const QString& annotationText, + const double rangeStart, + const double rangeEnd, + RiaDefines::Orientation orientation ) { m_plot = plot; - if ( orientation == Orientation::HORIZONTAL ) + if ( orientation == RiaDefines::Orientation::HORIZONTAL ) { RiuPlotAnnotationTool::horizontalRange( annotationText, std::make_pair( rangeStart, rangeEnd ), color, RiuGuiTheme::getColorByVariableName( "textColor" ) ); } - else if ( orientation == Orientation::VERTICAL ) + else if ( orientation == RiaDefines::Orientation::VERTICAL ) { RiuPlotAnnotationTool::verticalRange( annotationText, std::make_pair( rangeStart, rangeEnd ), @@ -230,91 +240,38 @@ void RiuPlotAnnotationTool::attachAnnotationRange( QwtPlot* plot, //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RiuPlotAnnotationTool::detachAllAnnotations( Orientation orientation ) +void RiuPlotAnnotationTool::detachAllAnnotations() { if ( m_plot ) { - if ( orientation == Orientation::HORIZONTAL ) + for ( auto& plotItem : m_plotItems ) { - for ( size_t i = 0; i < m_horizontalMarkers.size(); i++ ) - { - m_horizontalMarkers[i]->detach(); - delete m_horizontalMarkers[i]; - } - } - else if ( orientation == Orientation::VERTICAL ) - { - for ( size_t i = 0; i < m_verticalMarkers.size(); i++ ) - { - m_verticalMarkers[i]->detach(); - delete m_verticalMarkers[i]; - } + plotItem->detach(); + delete plotItem; } } - if ( orientation == Orientation::HORIZONTAL ) - { - m_horizontalMarkers.clear(); - } - else if ( orientation == Orientation::VERTICAL ) - { - m_verticalMarkers.clear(); - } + m_plotItems.clear(); } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RiuPlotAnnotationTool::detachAllAnnotations() -{ - detachAllAnnotations( Orientation::HORIZONTAL ); - detachAllAnnotations( Orientation::VERTICAL ); -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -Qt::Alignment RiuPlotAnnotationTool::trackTextAlignment( TrackSpan trackSpan ) +Qt::Alignment RiuPlotAnnotationTool::trackTextAlignment( RiaDefines::TrackSpan trackSpan ) { switch ( trackSpan ) { - case TrackSpan::FULL_WIDTH: + case RiaDefines::TrackSpan::FULL_WIDTH: return Qt::AlignRight; - case TrackSpan::LEFT_COLUMN: + case RiaDefines::TrackSpan::LEFT_COLUMN: return Qt::AlignLeft; - case TrackSpan::CENTRE_COLUMN: + case RiaDefines::TrackSpan::CENTRE_COLUMN: return Qt::AlignCenter; - case TrackSpan::RIGHT_COLUMN: + case RiaDefines::TrackSpan::RIGHT_COLUMN: return Qt::AlignRight; } return Qt::AlignRight; } -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RiuPlotAnnotationTool::horizontalDashedLine( QwtPlotMarker* line, - const QString& name, - double yValue, - const QColor& color /*= QColor(0, 0, 100) */, - const QColor& textColor /*= QColor(0, 0, 100) */, - Qt::Alignment horizontalAlignment /*= Qt::AlignRight */, - int fontSize ) -{ - QPen curvePen; - curvePen.setStyle( Qt::DashLine ); - curvePen.setColor( color ); - curvePen.setWidth( 1 ); - - line->setLineStyle( QwtPlotMarker::HLine ); - line->setLinePen( curvePen ); - line->setYValue( yValue ); - QwtText label( name ); - label.setColor( textColor ); - if ( fontSize > 0 ) label.setFont( QFont( label.font().key(), fontSize ) ); - line->setLabel( label ); - line->setLabelAlignment( horizontalAlignment | Qt::AlignBottom ); -} - //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -327,7 +284,7 @@ void RiuPlotAnnotationTool::horizontalRange( const QString& nam QColor shadingColor = color; shadingColor.setAlpha( 10 ); - QwtPlotZoneItem* shading = new QwtPlotZoneItem(); + auto* shading = new QwtPlotZoneItem(); shading->setOrientation( Qt::Horizontal ); shading->setInterval( yRange.first, yRange.second ); shading->setPen( shadingColor, 0.0, Qt::NoPen ); @@ -336,18 +293,31 @@ void RiuPlotAnnotationTool::horizontalRange( const QString& nam shading->attach( m_plot ); shading->setZ( -100.0 ); shading->setXAxis( QwtAxis::XBottom ); - m_horizontalMarkers.push_back( std::move( shading ) ); + m_plotItems.push_back( shading ); - QwtPlotMarker* line( new QwtPlotMarker() ); - RiuPlotAnnotationTool::horizontalDashedLine( line, name, yRange.first, color, color, horizontalAlignment ); + auto* line( new QwtPlotMarker() ); + RiuPlotAnnotationTool::setLineProperties( line, + name, + RiaDefines::Orientation::HORIZONTAL, + yRange.first, + Qt::DashLine, + color, + color, + horizontalAlignment ); line->attach( m_plot ); - m_horizontalMarkers.push_back( std::move( line ) ); + m_plotItems.push_back( line ); - QwtPlotMarker* bottomLine( new QwtPlotMarker() ); - RiuPlotAnnotationTool::horizontalDashedLine( bottomLine, QString(), yRange.second, color, color ); + auto* bottomLine( new QwtPlotMarker() ); + RiuPlotAnnotationTool::setLineProperties( bottomLine, + QString(), + RiaDefines::Orientation::HORIZONTAL, + yRange.second, + Qt::DashLine, + color, + color ); bottomLine->attach( m_plot ); - m_horizontalMarkers.push_back( std::move( bottomLine ) ); + m_plotItems.push_back( bottomLine ); } //-------------------------------------------------------------------------------------------------- @@ -362,7 +332,7 @@ void RiuPlotAnnotationTool::verticalRange( const QString& name, QColor shadingColor = color; shadingColor.setAlpha( 50 ); - QwtPlotZoneItem* shading = new QwtPlotZoneItem(); + auto* shading = new QwtPlotZoneItem(); shading->setOrientation( Qt::Vertical ); shading->setInterval( xRange.first, xRange.second ); shading->setPen( shadingColor, 0.0, Qt::NoPen ); @@ -371,56 +341,68 @@ void RiuPlotAnnotationTool::verticalRange( const QString& name, shading->attach( m_plot ); shading->setZ( -100.0 ); shading->setXAxis( QwtAxis::XBottom ); - m_verticalMarkers.push_back( std::move( shading ) ); + m_plotItems.push_back( shading ); QStringList labels = name.split( " - " ); - QwtPlotMarker* line( new QwtPlotMarker() ); - RiuPlotAnnotationTool::verticalLine( line, - labels[0], - xRange.first, - color, - textColor, - Qt::SolidLine, - Qt::AlignRight | horizontalAlignment ); + auto* line( new QwtPlotMarker() ); + RiuPlotAnnotationTool::setLineProperties( line, + labels[0], + RiaDefines::Orientation::VERTICAL, + xRange.first, + Qt::SolidLine, + color, + textColor, + Qt::AlignRight | horizontalAlignment ); line->attach( m_plot ); - m_verticalMarkers.push_back( std::move( line ) ); + m_plotItems.push_back( line ); - QwtPlotMarker* rightLine( new QwtPlotMarker() ); - RiuPlotAnnotationTool::verticalLine( rightLine, - labels.size() == 2 ? labels[1] : QString(), - xRange.second, - color, - textColor, - Qt::SolidLine, - Qt::AlignLeft | horizontalAlignment ); + auto* rightLine( new QwtPlotMarker() ); + RiuPlotAnnotationTool::setLineProperties( rightLine, + labels.size() == 2 ? labels[1] : QString(), + RiaDefines::Orientation::VERTICAL, + xRange.second, + Qt::SolidLine, + color, + textColor, + Qt::AlignLeft | horizontalAlignment ); rightLine->attach( m_plot ); - m_verticalMarkers.push_back( std::move( rightLine ) ); + m_plotItems.push_back( rightLine ); } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RiuPlotAnnotationTool::verticalLine( QwtPlotMarker* line, - const QString& name, - double xValue, - const QColor& color /*= QColor(0, 0, 100) */, - const QColor& textColor /*= QColor(0, 0, 100) */, - Qt::PenStyle lineStyle /*= Qt::DashLine */, - Qt::Alignment horizontalAlignment /*= Qt::AlignRight | Qt::AlignBottom */ ) +void RiuPlotAnnotationTool::setLineProperties( QwtPlotMarker* line, + const QString& name, + RiaDefines::Orientation orientation, + double linePosition, + Qt::PenStyle lineStyle, + const QColor& color /*= QColor( 0, 0, 100 )*/, + const QColor& textColor /*= QColor( 0, 0, 100 )*/, + Qt::Alignment horizontalAlignment /*= Qt::AlignRight*/, + int fontSize /*= 0 */ ) { QPen curvePen; curvePen.setStyle( lineStyle ); curvePen.setColor( color ); curvePen.setWidth( 1 ); - line->setAxes( QwtAxis::XBottom, QwtAxis::YLeft ); - line->setLineStyle( QwtPlotMarker::VLine ); line->setLinePen( curvePen ); - line->setXValue( xValue ); QwtText label( name ); label.setColor( textColor ); + if ( fontSize > 0 ) label.setFont( QFont( label.font().key(), fontSize ) ); line->setLabel( label ); - line->setLabelAlignment( horizontalAlignment ); - line->setLabelOrientation( Qt::Orientation::Vertical ); + line->setLabelAlignment( horizontalAlignment | Qt::AlignBottom ); + + if ( orientation == RiaDefines::Orientation::HORIZONTAL ) + { + line->setLineStyle( QwtPlotMarker::HLine ); + line->setYValue( linePosition ); + } + else + { + line->setLineStyle( QwtPlotMarker::VLine ); + line->setXValue( linePosition ); + } } diff --git a/ApplicationLibCode/UserInterface/RiuPlotAnnotationTool.h b/ApplicationLibCode/UserInterface/RiuPlotAnnotationTool.h index a37f45664f..6c6da109b3 100644 --- a/ApplicationLibCode/UserInterface/RiuPlotAnnotationTool.h +++ b/ApplicationLibCode/UserInterface/RiuPlotAnnotationTool.h @@ -18,6 +18,8 @@ #pragma once +#include "RiaPlotDefines.h" + #include "cafColorTable.h" #include "qwt_plot_marker.h" @@ -33,64 +35,35 @@ class QwtPlot; class RiuPlotAnnotationTool { -public: - enum class RegionAnnotationType - { - NO_ANNOTATIONS = 0, - FORMATION_ANNOTATIONS = 1, - // Used to have Wbs-parameter coding as 2 - RESULT_PROPERTY_ANNOTATIONS = 3 - }; - enum RegionDisplay - { - DARK_LINES = 0x01, - COLORED_LINES = 0x02, - COLOR_SHADING = 0x04, - COLOR_SHADING_AND_LINES = 0x05, - LIGHT_LINES = 0x08, - }; - enum class TrackSpan - { - FULL_WIDTH, - LEFT_COLUMN, - CENTRE_COLUMN, - RIGHT_COLUMN - }; - enum class Orientation - { - HORIZONTAL = 0, - VERTICAL - }; - public: RiuPlotAnnotationTool(){}; ~RiuPlotAnnotationTool(); void attachNamedRegions( QwtPlot* plot, const std::vector& names, - const std::pair xRange, - const std::vector>& yPositions, - RegionDisplay regionDisplay, + RiaDefines::Orientation orientation, + const std::vector>& regionRanges, + RiaDefines::RegionDisplay regionDisplay, const caf::ColorTable& colorTable, int shadingAlphaByte, - bool showNames = true, - TrackSpan trackSpan = TrackSpan::FULL_WIDTH, - const std::vector& brushStyles = {}, - int fontSize = 0 ); + bool showNames = true, + RiaDefines::TrackSpan trackSpan = RiaDefines::TrackSpan::FULL_WIDTH, + const std::vector& brushStyles = {}, + int fontSize = 0 ); void attachWellPicks( QwtPlot* plot, const std::vector& names, const std::vector& yPositions ); - void attachAnnotationLine( QwtPlot* plot, - const QColor& color, - const QString& annotationText, - const double position, - Orientation orientation ); + void attachAnnotationLine( QwtPlot* plot, + const QColor& color, + const QString& annotationText, + const double position, + RiaDefines::Orientation orientation ); - void attachAnnotationRange( QwtPlot* plot, - const QColor& color, - const QString& annotationText, - const double rangeStart, - const double rangeEnd, - Orientation orientation ); + void attachAnnotationRange( QwtPlot* plot, + const QColor& color, + const QString& annotationText, + const double rangeStart, + const double rangeEnd, + RiaDefines::Orientation orientation ); void horizontalRange( const QString& name, const std::pair yRange, @@ -105,28 +78,21 @@ public: Qt::Alignment horizontalAlignment = Qt::AlignRight ); void detachAllAnnotations(); - void detachAllAnnotations( Orientation orientation ); private: - static Qt::Alignment trackTextAlignment( TrackSpan trackSpan ); - static void horizontalDashedLine( QwtPlotMarker* line, - const QString& name, - double yValue, - const QColor& color = QColor( 0, 0, 100 ), - const QColor& textColor = QColor( 0, 0, 100 ), - Qt::Alignment horizontalAlignment = Qt::AlignRight, - int fontSize = 0 ); + static Qt::Alignment trackTextAlignment( RiaDefines::TrackSpan trackSpan ); - void verticalLine( QwtPlotMarker* line, - const QString& name, - double xValue, - const QColor& color = QColor( 0, 0, 100 ), - const QColor& textColor = QColor( 0, 0, 100 ), - Qt::PenStyle lineStyle = Qt::DashLine, - Qt::Alignment horizontalAlignment = Qt::AlignRight | Qt::AlignBottom ); + static void setLineProperties( QwtPlotMarker* line, + const QString& name, + RiaDefines::Orientation orientation, + double linePosition, + Qt::PenStyle lineStyle = Qt::DashLine, + const QColor& color = QColor( 0, 0, 100 ), + const QColor& textColor = QColor( 0, 0, 100 ), + Qt::Alignment horizontalAlignment = Qt::AlignRight, + int fontSize = 0 ); private: QPointer m_plot; - std::vector m_horizontalMarkers; - std::vector m_verticalMarkers; + std::vector m_plotItems; }; diff --git a/ApplicationLibCode/UserInterface/RiuSummaryPlot.h b/ApplicationLibCode/UserInterface/RiuSummaryPlot.h index 87fd5cca17..2d2149b334 100644 --- a/ApplicationLibCode/UserInterface/RiuSummaryPlot.h +++ b/ApplicationLibCode/UserInterface/RiuSummaryPlot.h @@ -47,6 +47,7 @@ public: virtual void useTimeBasedTimeAxis() = 0; + virtual void clearAnnotationObjects() = 0; virtual void updateAnnotationObjects( RimPlotAxisPropertiesInterface* axisProperties ) = 0; virtual RiuPlotWidget* plotWidget() const = 0; diff --git a/ApplicationLibCode/UserInterface/RiuSummaryQtChartsPlot.cpp b/ApplicationLibCode/UserInterface/RiuSummaryQtChartsPlot.cpp index ec7a8936c5..4f9f10b4c2 100644 --- a/ApplicationLibCode/UserInterface/RiuSummaryQtChartsPlot.cpp +++ b/ApplicationLibCode/UserInterface/RiuSummaryQtChartsPlot.cpp @@ -73,6 +73,13 @@ void RiuSummaryQtChartsPlot::useTimeBasedTimeAxis() m_plotWidget->setAxisScaleType( RiuPlotAxis::defaultBottom(), RiuPlotWidget::AxisScaleType::DATE ); } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RiuSummaryQtChartsPlot::clearAnnotationObjects() +{ +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/UserInterface/RiuSummaryQtChartsPlot.h b/ApplicationLibCode/UserInterface/RiuSummaryQtChartsPlot.h index 26cbf33154..5f9912592e 100644 --- a/ApplicationLibCode/UserInterface/RiuSummaryQtChartsPlot.h +++ b/ApplicationLibCode/UserInterface/RiuSummaryQtChartsPlot.h @@ -50,6 +50,7 @@ public: void useTimeBasedTimeAxis() override; + void clearAnnotationObjects() override; void updateAnnotationObjects( RimPlotAxisPropertiesInterface* axisProperties ) override; RiuPlotWidget* plotWidget() const override; diff --git a/ApplicationLibCode/UserInterface/RiuSummaryQwtPlot.cpp b/ApplicationLibCode/UserInterface/RiuSummaryQwtPlot.cpp index deee087cc4..8b166615f0 100644 --- a/ApplicationLibCode/UserInterface/RiuSummaryQwtPlot.cpp +++ b/ApplicationLibCode/UserInterface/RiuSummaryQwtPlot.cpp @@ -149,12 +149,11 @@ void RiuSummaryQwtPlot::useTimeBasedTimeAxis() //-------------------------------------------------------------------------------------------------- void RiuSummaryQwtPlot::updateAnnotationObjects( RimPlotAxisPropertiesInterface* axisProperties ) { - RiuPlotAnnotationTool::Orientation orientation = RiuPlotAnnotationTool::Orientation::HORIZONTAL; + RiaDefines::Orientation orientation = RiaDefines::Orientation::HORIZONTAL; if ( axisProperties->plotAxisType().axis() == RiaDefines::PlotAxis::PLOT_AXIS_BOTTOM ) { - orientation = RiuPlotAnnotationTool::Orientation::VERTICAL; + orientation = RiaDefines::Orientation::VERTICAL; } - m_annotationTool->detachAllAnnotations( orientation ); for ( auto annotation : axisProperties->annotations() ) { @@ -221,3 +220,11 @@ RiuPlotWidget* RiuSummaryQwtPlot::plotWidget() const { return m_plotWidget; } + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RiuSummaryQwtPlot::clearAnnotationObjects() +{ + m_annotationTool->detachAllAnnotations(); +} diff --git a/ApplicationLibCode/UserInterface/RiuSummaryQwtPlot.h b/ApplicationLibCode/UserInterface/RiuSummaryQwtPlot.h index a5ff1f4ad7..189e0f2cdd 100644 --- a/ApplicationLibCode/UserInterface/RiuSummaryQwtPlot.h +++ b/ApplicationLibCode/UserInterface/RiuSummaryQwtPlot.h @@ -55,6 +55,7 @@ public: void useTimeBasedTimeAxis() override; + void clearAnnotationObjects() override; void updateAnnotationObjects( RimPlotAxisPropertiesInterface* axisProperties ) override; RiuPlotWidget* plotWidget() const override; From 49bfc62ea7db4d79a115e0c08e93c547b44f1cf7 Mon Sep 17 00:00:00 2001 From: Kristian Bendiksen Date: Wed, 3 Aug 2022 14:07:20 +0200 Subject: [PATCH 037/129] #9102 Thermal Fracture: handle field units. --- .../Application/Tools/RiaEclipseUnitTools.cpp | 24 ++++++++++++------ .../Application/Tools/RiaEclipseUnitTools.h | 4 +-- .../RifThermalFractureReader.cpp | 1 + .../RimThermalFractureTemplate.cpp | 10 +++----- .../RigThermalFractureDefinition.cpp | 17 +++++++++++++ .../RigThermalFractureDefinition.h | 5 ++++ .../RigThermalFractureResultUtil.cpp | 25 +++++++++++++++++++ 7 files changed, 70 insertions(+), 16 deletions(-) diff --git a/ApplicationLibCode/Application/Tools/RiaEclipseUnitTools.cpp b/ApplicationLibCode/Application/Tools/RiaEclipseUnitTools.cpp index ca6d1d256e..480a73821b 100644 --- a/ApplicationLibCode/Application/Tools/RiaEclipseUnitTools.cpp +++ b/ApplicationLibCode/Application/Tools/RiaEclipseUnitTools.cpp @@ -96,7 +96,7 @@ QString RiaEclipseUnitTools::unitStringPressure( RiaDefines::EclipseUnitSystem u //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -double RiaEclipseUnitTools::convertToMeter( double sourceValue, const QString& sourceValueUnitText ) +double RiaEclipseUnitTools::convertToMeter( double sourceValue, const QString& sourceValueUnitText, bool replaceUnmatched ) { QString timmed = sourceValueUnitText.trimmed(); @@ -112,30 +112,35 @@ double RiaEclipseUnitTools::convertToMeter( double sourceValue, const QString& s { return sourceValue / 1000.0; } - else if ( timmed.compare( "in", Qt::CaseInsensitive ) == 0 ) + else if ( timmed.compare( "in", Qt::CaseInsensitive ) == 0 || timmed.compare( "inches", Qt::CaseInsensitive ) == 0 ) { return RiaEclipseUnitTools::inchToMeter( sourceValue ); } - else if ( timmed.compare( "ft", Qt::CaseInsensitive ) == 0 || timmed.compare( "md-ft", Qt::CaseInsensitive ) == 0 ) + else if ( timmed.compare( "ft", Qt::CaseInsensitive ) == 0 || timmed.compare( "feet", Qt::CaseInsensitive ) == 0 || + timmed.compare( "md-ft", Qt::CaseInsensitive ) == 0 ) { return RiaEclipseUnitTools::feetToMeter( sourceValue ); } - return HUGE_VAL; + if ( replaceUnmatched ) + return HUGE_VAL; + else + return sourceValue; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -double RiaEclipseUnitTools::convertToFeet( double sourceValue, const QString& sourceValueUnitText ) +double RiaEclipseUnitTools::convertToFeet( double sourceValue, const QString& sourceValueUnitText, bool replaceUnmatched ) { QString timmed = sourceValueUnitText.trimmed(); - if ( timmed.compare( "ft", Qt::CaseInsensitive ) == 0 || timmed.compare( "md-ft", Qt::CaseInsensitive ) == 0 ) + if ( timmed.compare( "ft", Qt::CaseInsensitive ) == 0 || timmed.compare( "feet", Qt::CaseInsensitive ) == 0 || + timmed.compare( "md-ft", Qt::CaseInsensitive ) == 0 ) { return sourceValue; } - else if ( timmed.compare( "in", Qt::CaseInsensitive ) == 0 ) + else if ( timmed.compare( "in", Qt::CaseInsensitive ) == 0 || timmed.compare( "inches", Qt::CaseInsensitive ) == 0 ) { return RiaEclipseUnitTools::inchToFeet( sourceValue ); } @@ -154,5 +159,8 @@ double RiaEclipseUnitTools::convertToFeet( double sourceValue, const QString& so return RiaEclipseUnitTools::meterToFeet( sourceValue ); } - return HUGE_VAL; + if ( replaceUnmatched ) + return HUGE_VAL; + else + return sourceValue; } diff --git a/ApplicationLibCode/Application/Tools/RiaEclipseUnitTools.h b/ApplicationLibCode/Application/Tools/RiaEclipseUnitTools.h index 8d53ecad0e..ab17656f09 100644 --- a/ApplicationLibCode/Application/Tools/RiaEclipseUnitTools.h +++ b/ApplicationLibCode/Application/Tools/RiaEclipseUnitTools.h @@ -49,6 +49,6 @@ public: static QString unitStringPressure( RiaDefines::EclipseUnitSystem unitSystem ); - static double convertToMeter( double sourceValue, const QString& unitText ); - static double convertToFeet( double sourceValue, const QString& unitText ); + static double convertToMeter( double sourceValue, const QString& unitText, bool replaceUnmatched = true ); + static double convertToFeet( double sourceValue, const QString& unitText, bool replaceUnmatched = true ); }; diff --git a/ApplicationLibCode/FileInterface/RifThermalFractureReader.cpp b/ApplicationLibCode/FileInterface/RifThermalFractureReader.cpp index e79a127af2..46a0f60f4b 100644 --- a/ApplicationLibCode/FileInterface/RifThermalFractureReader.cpp +++ b/ApplicationLibCode/FileInterface/RifThermalFractureReader.cpp @@ -101,6 +101,7 @@ std::pair, QString> return std::make_pair( nullptr, QString( "Inconsistent units found in file: %1" ).arg( filePath ) ); } + definition->setUnitSystem( unitSystem ); isFirstHeader = false; } else if ( isValidNode ) diff --git a/ApplicationLibCode/ProjectDataModel/Completions/RimThermalFractureTemplate.cpp b/ApplicationLibCode/ProjectDataModel/Completions/RimThermalFractureTemplate.cpp index cbec330d93..32ec0a2650 100644 --- a/ApplicationLibCode/ProjectDataModel/Completions/RimThermalFractureTemplate.cpp +++ b/ApplicationLibCode/ProjectDataModel/Completions/RimThermalFractureTemplate.cpp @@ -160,12 +160,10 @@ void RimThermalFractureTemplate::loadDataAndUpdate() { setDefaultConductivityResultIfEmpty(); - // if ( fractureTemplateUnit() == RiaDefines::EclipseUnitSystem::UNITS_UNKNOWN ) - // { - // setUnitSystem( m_fractureDefinitionData->unitSet() ); - // } - // TODO: handle other units - setUnitSystem( RiaDefines::EclipseUnitSystem::UNITS_METRIC ); + if ( fractureTemplateUnit() == RiaDefines::EclipseUnitSystem::UNITS_UNKNOWN ) + { + setUnitSystem( m_fractureDefinitionData->unitSystem() ); + } if ( !m_userDefinedWellPathDepthAtFracture ) { diff --git a/ApplicationLibCode/ReservoirDataModel/RigThermalFractureDefinition.cpp b/ApplicationLibCode/ReservoirDataModel/RigThermalFractureDefinition.cpp index c2896480c6..0ee3f3c28a 100644 --- a/ApplicationLibCode/ReservoirDataModel/RigThermalFractureDefinition.cpp +++ b/ApplicationLibCode/ReservoirDataModel/RigThermalFractureDefinition.cpp @@ -27,6 +27,7 @@ /// //-------------------------------------------------------------------------------------------------- RigThermalFractureDefinition::RigThermalFractureDefinition() + : m_unitSystem( RiaDefines::EclipseUnitSystem::UNITS_UNKNOWN ) { } @@ -53,6 +54,22 @@ QString RigThermalFractureDefinition::name() const return m_name; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RigThermalFractureDefinition::setUnitSystem( RiaDefines::EclipseUnitSystem unitSystem ) +{ + m_unitSystem = unitSystem; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RiaDefines::EclipseUnitSystem RigThermalFractureDefinition::unitSystem() const +{ + return m_unitSystem; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ReservoirDataModel/RigThermalFractureDefinition.h b/ApplicationLibCode/ReservoirDataModel/RigThermalFractureDefinition.h index baec2f9b9a..bd04039526 100644 --- a/ApplicationLibCode/ReservoirDataModel/RigThermalFractureDefinition.h +++ b/ApplicationLibCode/ReservoirDataModel/RigThermalFractureDefinition.h @@ -58,9 +58,14 @@ public: std::vector relativeCoordinates( int timeStepIndex ) const; + void setUnitSystem( RiaDefines::EclipseUnitSystem unitSystem ); + + RiaDefines::EclipseUnitSystem unitSystem() const; + private: QString m_name; + RiaDefines::EclipseUnitSystem m_unitSystem; std::vector m_timeSteps; std::vector m_results; }; diff --git a/ApplicationLibCode/ReservoirDataModel/RigThermalFractureResultUtil.cpp b/ApplicationLibCode/ReservoirDataModel/RigThermalFractureResultUtil.cpp index e4c4ae303f..695f4e1115 100644 --- a/ApplicationLibCode/ReservoirDataModel/RigThermalFractureResultUtil.cpp +++ b/ApplicationLibCode/ReservoirDataModel/RigThermalFractureResultUtil.cpp @@ -18,6 +18,7 @@ #include "RigThermalFractureResultUtil.h" +#include "RiaEclipseUnitTools.h" #include "RiaLogging.h" #include "RiaWeightedMeanCalculator.h" @@ -256,6 +257,30 @@ cvf::cref return nullptr; } + // Check that the data is in the required unit system. + // Convert if not the case. + if ( requiredUnitSet != fractureDefinition->unitSystem() ) + { + // Convert to the conductivity unit system used by the fracture template + // The conductivity value is used in the computations of transmissibility when exporting COMPDAT, and has unit + // md-m or md-ft This unit must match the unit used to represent coordinates of the grid used for export + + for ( auto& yValues : conductivityValues ) + { + for ( auto& xVal : yValues ) + { + if ( requiredUnitSet == RiaDefines::EclipseUnitSystem::UNITS_FIELD ) + { + xVal = RiaEclipseUnitTools::convertToFeet( xVal, conductivityUnitTextOnFile, false ); + } + else if ( requiredUnitSet == RiaDefines::EclipseUnitSystem::UNITS_METRIC ) + { + xVal = RiaEclipseUnitTools::convertToMeter( xVal, conductivityUnitTextOnFile, false ); + } + } + } + } + // Create bounding box cvf::BoundingBox boundingBox; for ( auto p : points ) From 97d1b7b36fe7637864de561072069b95de0318fd Mon Sep 17 00:00:00 2001 From: Kristian Bendiksen Date: Mon, 8 Aug 2022 11:31:43 +0200 Subject: [PATCH 038/129] #9161 QtCharts: Refactor to make QtCharts optional again. --- .../UserInterface/CMakeLists_files.cmake | 2 + .../UserInterface/RiuMultiPlotPage.cpp | 6 +- .../RiuPlotCurveSymbolImageCreator.cpp | 551 +++++++++++++++++ .../RiuPlotCurveSymbolImageCreator.h | 56 ++ .../RiuQtChartsPlotCurveSymbol.cpp | 566 +----------------- .../RiuQtChartsPlotCurveSymbol.h | 10 - .../UserInterface/RiuQwtPlotTools.cpp | 13 +- 7 files changed, 625 insertions(+), 579 deletions(-) create mode 100644 ApplicationLibCode/UserInterface/RiuPlotCurveSymbolImageCreator.cpp create mode 100644 ApplicationLibCode/UserInterface/RiuPlotCurveSymbolImageCreator.h diff --git a/ApplicationLibCode/UserInterface/CMakeLists_files.cmake b/ApplicationLibCode/UserInterface/CMakeLists_files.cmake index 1faccdfb4b..a76b6651b8 100644 --- a/ApplicationLibCode/UserInterface/CMakeLists_files.cmake +++ b/ApplicationLibCode/UserInterface/CMakeLists_files.cmake @@ -6,6 +6,7 @@ set(SOURCE_GROUP_HEADER_FILES ${CMAKE_CURRENT_LIST_DIR}/RiuGeoQuestNavigation.h ${CMAKE_CURRENT_LIST_DIR}/RiuInterfaceToViewWindow.h ${CMAKE_CURRENT_LIST_DIR}/RiuPlotCurveSymbol.h + ${CMAKE_CURRENT_LIST_DIR}/RiuPlotCurveSymbolImageCreator.h ${CMAKE_CURRENT_LIST_DIR}/RiuQwtSymbol.h ${CMAKE_CURRENT_LIST_DIR}/RiuPlotCurve.h ${CMAKE_CURRENT_LIST_DIR}/RiuQwtPlotCurve.h @@ -112,6 +113,7 @@ set(SOURCE_GROUP_SOURCE_FILES ${CMAKE_CURRENT_LIST_DIR}/RiuGeoQuestNavigation.cpp ${CMAKE_CURRENT_LIST_DIR}/RiuInterfaceToViewWindow.cpp ${CMAKE_CURRENT_LIST_DIR}/RiuPlotCurveSymbol.cpp + ${CMAKE_CURRENT_LIST_DIR}/RiuPlotCurveSymbolImageCreator.cpp ${CMAKE_CURRENT_LIST_DIR}/RiuQwtSymbol.cpp ${CMAKE_CURRENT_LIST_DIR}/RiuPlotCurve.cpp ${CMAKE_CURRENT_LIST_DIR}/RiuQwtPlotCurve.cpp diff --git a/ApplicationLibCode/UserInterface/RiuMultiPlotPage.cpp b/ApplicationLibCode/UserInterface/RiuMultiPlotPage.cpp index 176c31acd2..f286440254 100644 --- a/ApplicationLibCode/UserInterface/RiuMultiPlotPage.cpp +++ b/ApplicationLibCode/UserInterface/RiuMultiPlotPage.cpp @@ -37,10 +37,12 @@ #include "RiuPlotMainWindow.h" #include "RiuPlotObjectPicker.h" #include "RiuPlotWidget.h" -#include "RiuQtChartsPlotWidget.h" #include "RiuQwtPlotLegend.h" #include "RiuQwtPlotTools.h" #include "RiuQwtPlotWidget.h" +#ifdef USE_QTCHARTS +#include "RiuQtChartsPlotWidget.h" +#endif #include "cafCmdFeatureMenuBuilder.h" #include "cafSelectionManager.h" @@ -183,10 +185,12 @@ void RiuMultiPlotPage::insertPlot( RiuPlotWidget* plotWidget, size_t index ) } else { +#ifdef USE_QTCHARTS auto qtchartPlotWidget = dynamic_cast( plotWidget ); legend->connect( qtchartPlotWidget, SIGNAL( legendDataChanged( const QList& ) ), SLOT( updateLegend( const QList& ) ) ); +#endif } QObject::connect( legend, SIGNAL( legendUpdated() ), this, SLOT( onLegendUpdated() ) ); diff --git a/ApplicationLibCode/UserInterface/RiuPlotCurveSymbolImageCreator.cpp b/ApplicationLibCode/UserInterface/RiuPlotCurveSymbolImageCreator.cpp new file mode 100644 index 0000000000..383b0e9184 --- /dev/null +++ b/ApplicationLibCode/UserInterface/RiuPlotCurveSymbolImageCreator.cpp @@ -0,0 +1,551 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2022- Equinor ASA +// +// ResInsight is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU General Public License at +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#include "RiuPlotCurveSymbolImageCreator.h" + +#include "cafFontTools.h" +#include "cvfAssert.h" + +#include +#include +#include + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QImage RiuPlotCurveSymbolImageCreator::createSymbolImage( RiuPlotCurveSymbol::PointSymbolEnum symbolStyle, + const QSize& size, + const QPen& pen, + const QColor& color ) +{ + if ( symbolStyle == RiuPlotCurveSymbol::PointSymbolEnum::SYMBOL_NONE ) + { + return QImage(); + } + + if ( symbolStyle == RiuPlotCurveSymbol::PointSymbolEnum::SYMBOL_RECT ) + { + return createRectImage( size, pen, color ); + } + else if ( symbolStyle == RiuPlotCurveSymbol::PointSymbolEnum::SYMBOL_ELLIPSE ) + { + return createEllipseImage( size, pen, color ); + } + else if ( symbolStyle == RiuPlotCurveSymbol::PointSymbolEnum::SYMBOL_CROSS ) + { + return createCrossImage( size, pen, color ); + } + else if ( symbolStyle == RiuPlotCurveSymbol::PointSymbolEnum::SYMBOL_XCROSS ) + { + return createXCrossImage( size, pen, color ); + } + else if ( symbolStyle == RiuPlotCurveSymbol::PointSymbolEnum::SYMBOL_DIAMOND ) + { + return createDiamondImage( size, pen, color ); + } + else if ( symbolStyle == RiuPlotCurveSymbol::PointSymbolEnum::SYMBOL_HEXAGON ) + { + return createHexagonImage( size, pen, color ); + } + else if ( symbolStyle == RiuPlotCurveSymbol::PointSymbolEnum::SYMBOL_STAR1 ) + { + return createStar1Image( size, pen, color ); + } + else if ( symbolStyle == RiuPlotCurveSymbol::PointSymbolEnum::SYMBOL_STAR1 ) + { + return createStar1Image( size, pen, color ); + } + else if ( symbolStyle == RiuPlotCurveSymbol::PointSymbolEnum::SYMBOL_STAR2 ) + { + return createStar2Image( size, pen, color ); + } + else if ( symbolStyle == RiuPlotCurveSymbol::PointSymbolEnum::SYMBOL_TRIANGLE || + symbolStyle == RiuPlotCurveSymbol::PointSymbolEnum::SYMBOL_UP_TRIANGLE || + symbolStyle == RiuPlotCurveSymbol::PointSymbolEnum::SYMBOL_DOWN_TRIANGLE || + symbolStyle == RiuPlotCurveSymbol::PointSymbolEnum::SYMBOL_LEFT_TRIANGLE || + symbolStyle == RiuPlotCurveSymbol::PointSymbolEnum::SYMBOL_RIGHT_TRIANGLE ) + { + return createTriangleImage( symbolStyle, size, pen, color ); + } + + return QImage(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QImage RiuPlotCurveSymbolImageCreator::createSymbolImage( RiuPlotCurveSymbol::RiuPlotCurveSymbol::PointSymbolEnum symbolStyle, + const QSize& size, + const QColor& color ) +{ + QPen defaultPen; + return createSymbolImage( symbolStyle, size, defaultPen, color ); +} + +//-------------------------------------------------------------------------------------------------- +/// Adapted from QwtSymbol::qwtDrawTriangleSymbols +//-------------------------------------------------------------------------------------------------- +QImage RiuPlotCurveSymbolImageCreator::createTriangleImage( RiuPlotCurveSymbol::RiuPlotCurveSymbol::PointSymbolEnum symbolStyle, + const QSize& size, + const QPen& m_pen, + const QColor& color ) +{ + QImage star( size, QImage::Format_ARGB32 ); + star.fill( Qt::transparent ); + + QPainter painter( &star ); + painter.setRenderHint( QPainter::Antialiasing ); + + QPen pen( m_pen ); + pen.setWidth( 1.0 ); + pen.setJoinStyle( Qt::MiterJoin ); + + painter.setPen( pen ); + painter.setBrush( color ); + + double sw2 = 0.5 * size.width(); + double sh2 = 0.5 * size.height(); + + QPolygonF triangle( 3 ); + QPointF* trianglePoints = triangle.data(); + + double x = size.width() * 0.5; + double y = size.width() * 0.5; + + const double x1 = x - sw2; + const double x2 = x1 + size.width(); + const double y1 = y - sh2; + const double y2 = y1 + size.height(); + + if ( symbolStyle == RiuPlotCurveSymbol::PointSymbolEnum::SYMBOL_LEFT_TRIANGLE ) + { + trianglePoints[0].rx() = x2; + trianglePoints[0].ry() = y1; + + trianglePoints[1].rx() = x1; + trianglePoints[1].ry() = y; + + trianglePoints[2].rx() = x2; + trianglePoints[2].ry() = y2; + } + + if ( symbolStyle == RiuPlotCurveSymbol::PointSymbolEnum::SYMBOL_RIGHT_TRIANGLE ) + { + trianglePoints[0].rx() = x1; + trianglePoints[0].ry() = y1; + + trianglePoints[1].rx() = x2; + trianglePoints[1].ry() = y; + + trianglePoints[2].rx() = x1; + trianglePoints[2].ry() = y2; + } + + if ( symbolStyle == RiuPlotCurveSymbol::PointSymbolEnum::SYMBOL_UP_TRIANGLE || + symbolStyle == RiuPlotCurveSymbol::PointSymbolEnum::SYMBOL_TRIANGLE ) + { + trianglePoints[0].rx() = x1; + trianglePoints[0].ry() = y2; + + trianglePoints[1].rx() = x; + trianglePoints[1].ry() = y1; + + trianglePoints[2].rx() = x2; + trianglePoints[2].ry() = y2; + } + + if ( symbolStyle == RiuPlotCurveSymbol::PointSymbolEnum::SYMBOL_DOWN_TRIANGLE ) + { + trianglePoints[0].rx() = x1; + trianglePoints[0].ry() = y1; + + trianglePoints[1].rx() = x; + trianglePoints[1].ry() = y2; + + trianglePoints[2].rx() = x2; + trianglePoints[2].ry() = y1; + } + + painter.drawPolygon( triangle ); + + return star; +} + +//-------------------------------------------------------------------------------------------------- +/// Adapted from QwtSymbol::qwtDrawLineSymbols +//-------------------------------------------------------------------------------------------------- +QImage RiuPlotCurveSymbolImageCreator::createCrossImage( const QSize& size, const QPen& m_pen, const QColor& color ) +{ + QImage image( size, QImage::Format_ARGB32 ); + image.fill( Qt::transparent ); + + QPainter painter( &image ); + painter.setRenderHint( QPainter::Antialiasing ); + + QPen pen( m_pen ); + pen.setWidth( 1.0 ); + pen.setJoinStyle( Qt::MiterJoin ); + + painter.setPen( pen ); + painter.setBrush( color ); + + const double sw = size.width(); + const double sh = size.height(); + const double sw2 = 0.5 * size.width(); + const double sh2 = 0.5 * size.height(); + + double midX = size.width() * 0.5; + double midY = size.height() * 0.5; + + { + const double x = midX - sw2; + const double y = midY; + + painter.drawLine( x, y, x + sw, y ); + } + { + const double y = midY - sh2; + const double x = midX; + + painter.drawLine( x, y, x, y + sh ); + } + + return image; +} + +//-------------------------------------------------------------------------------------------------- +/// Adapted from QwtSymbol::qwtDrawXCrossSymbols +//-------------------------------------------------------------------------------------------------- +QImage RiuPlotCurveSymbolImageCreator::createXCrossImage( const QSize& size, const QPen& m_pen, const QColor& color ) +{ + QImage image( size, QImage::Format_ARGB32 ); + image.fill( Qt::transparent ); + + QPainter painter( &image ); + painter.setRenderHint( QPainter::Antialiasing ); + + QPen pen( m_pen ); + pen.setWidth( 1.0 ); + pen.setJoinStyle( Qt::MiterJoin ); + + painter.setPen( pen ); + painter.setBrush( color ); + + const double sw = size.width(); + const double sh = size.height(); + const double sw2 = 0.5 * size.width(); + const double sh2 = 0.5 * size.height(); + + double midX = size.width() * 0.5; + double midY = size.height() * 0.5; + + const double x1 = midX - sw2; + const double x2 = x1 + sw; + const double y1 = midY - sh2; + const double y2 = y1 + sh; + + painter.drawLine( x1, y1, x2, y2 ); + painter.drawLine( x1, y2, x2, y1 ); + + return image; +} + +//-------------------------------------------------------------------------------------------------- +/// Adapted from QwtSymbol::qwtDrawRectSymbols +//-------------------------------------------------------------------------------------------------- +QImage RiuPlotCurveSymbolImageCreator::createRectImage( const QSize& size, const QPen& m_pen, const QColor& color ) +{ + QImage image( size, QImage::Format_ARGB32 ); + image.fill( Qt::transparent ); + + QPainter painter( &image ); + painter.setRenderHint( QPainter::Antialiasing ); + + QPen pen( m_pen ); + pen.setWidth( 1.0 ); + pen.setJoinStyle( Qt::MiterJoin ); + + painter.setPen( pen ); + painter.setBrush( color ); + + const double sw = size.width(); + const double sh = size.height(); + const double sw2 = 0.5 * size.width(); + const double sh2 = 0.5 * size.height(); + + // Mid point + const double x = sw * 0.5; + const double y = sw * 0.5; + + const QRectF r( x - sw2, y - sh2, sw, sh ); + painter.drawRect( r ); + + return image; +} + +//-------------------------------------------------------------------------------------------------- +/// Adapted from QwtSymbol::qwtDrawEllipseSymbols +//-------------------------------------------------------------------------------------------------- +QImage RiuPlotCurveSymbolImageCreator::createEllipseImage( const QSize& size, const QPen& m_pen, const QColor& color ) +{ + QImage image( size, QImage::Format_ARGB32 ); + image.fill( Qt::transparent ); + + QPainter painter( &image ); + painter.setRenderHint( QPainter::Antialiasing ); + + QPen pen( m_pen ); + pen.setWidth( 1.0 ); + pen.setJoinStyle( Qt::MiterJoin ); + + painter.setPen( pen ); + painter.setBrush( color ); + + const double sw = size.width(); + const double sh = size.height(); + const double sw2 = 0.5 * size.width(); + const double sh2 = 0.5 * size.height(); + + // Mid point + const double x = sw * 0.5; + const double y = sw * 0.5; + + const QRectF r( x - sw2, y - sh2, sw, sh ); + painter.drawEllipse( r ); + + return image; +} + +//-------------------------------------------------------------------------------------------------- +/// Adapted from QwtSymbol::qwtDrawStar1Symbols +//-------------------------------------------------------------------------------------------------- +QImage RiuPlotCurveSymbolImageCreator::createStar1Image( const QSize& size, const QPen& m_pen, const QColor& color ) +{ + QImage image( size, QImage::Format_ARGB32 ); + image.fill( Qt::transparent ); + + QPainter painter( &image ); + painter.setRenderHint( QPainter::Antialiasing ); + + QPen pen( m_pen ); + pen.setWidth( 1.0 ); + pen.setJoinStyle( Qt::MiterJoin ); + + painter.setPen( pen ); + painter.setBrush( color ); + + QRectF r( 0, 0, size.width(), size.height() ); + + const double sqrt1_2 = 1.0 / std::sqrt( 2 ); + + const QPointF c = r.center(); + const double d1 = r.width() / 2.0 * ( 1.0 - sqrt1_2 ); + + painter.drawLine( r.left() + d1, r.top() + d1, r.right() - d1, r.bottom() - d1 ); + painter.drawLine( r.left() + d1, r.bottom() - d1, r.right() - d1, r.top() + d1 ); + painter.drawLine( c.x(), r.top(), c.x(), r.bottom() ); + painter.drawLine( r.left(), c.y(), r.right(), c.y() ); + + return image; +} + +//-------------------------------------------------------------------------------------------------- +/// Adapted from QwtSymbol::qwtDrawStar2Symbols +//-------------------------------------------------------------------------------------------------- +QImage RiuPlotCurveSymbolImageCreator::createStar2Image( const QSize& size, const QPen& m_pen, const QColor& color ) +{ + QImage image( size, QImage::Format_ARGB32 ); + image.fill( Qt::transparent ); + + QPainter painter( &image ); + painter.setRenderHint( QPainter::Antialiasing ); + + QPen pen( m_pen ); + pen.setWidth( 1.0 ); + pen.setJoinStyle( Qt::MiterJoin ); + + painter.setPen( pen ); + painter.setBrush( color ); + + QRectF r( 0, 0, size.width(), size.height() ); + + const double cos30 = 0.866025; // cos(30°) + + const double dy = 0.25 * size.height(); + const double dx = 0.5 * size.width() * cos30 / 3.0; + + QPolygonF star( 12 ); + QPointF* starPoints = star.data(); + + double x = size.width() * 0.5; + double y = size.height() * 0.5; + + double x1 = x - 3 * dx; + double y1 = y - 2 * dy; + + const double x2 = x1 + 1 * dx; + const double x3 = x1 + 2 * dx; + const double x4 = x1 + 3 * dx; + const double x5 = x1 + 4 * dx; + const double x6 = x1 + 5 * dx; + const double x7 = x1 + 6 * dx; + + const double y2 = y1 + 1 * dy; + const double y3 = y1 + 2 * dy; + const double y4 = y1 + 3 * dy; + const double y5 = y1 + 4 * dy; + + starPoints[0].rx() = x4; + starPoints[0].ry() = y1; + + starPoints[1].rx() = x5; + starPoints[1].ry() = y2; + + starPoints[2].rx() = x7; + starPoints[2].ry() = y2; + + starPoints[3].rx() = x6; + starPoints[3].ry() = y3; + + starPoints[4].rx() = x7; + starPoints[4].ry() = y4; + + starPoints[5].rx() = x5; + starPoints[5].ry() = y4; + + starPoints[6].rx() = x4; + starPoints[6].ry() = y5; + + starPoints[7].rx() = x3; + starPoints[7].ry() = y4; + + starPoints[8].rx() = x1; + starPoints[8].ry() = y4; + + starPoints[9].rx() = x2; + starPoints[9].ry() = y3; + + starPoints[10].rx() = x1; + starPoints[10].ry() = y2; + + starPoints[11].rx() = x3; + starPoints[11].ry() = y2; + + painter.drawPolygon( star ); + + return image; +} + +//-------------------------------------------------------------------------------------------------- +/// Adapted from QwtSymbol::qwtDrawHexagonSymbols +//-------------------------------------------------------------------------------------------------- +QImage RiuPlotCurveSymbolImageCreator::createHexagonImage( const QSize& size, const QPen& m_pen, const QColor& color ) +{ + QImage image( size, QImage::Format_ARGB32 ); + image.fill( Qt::transparent ); + + QPainter painter( &image ); + painter.setRenderHint( QPainter::Antialiasing ); + + QPen pen( m_pen ); + pen.setWidth( 1.0 ); + pen.setJoinStyle( Qt::MiterJoin ); + + painter.setPen( pen ); + painter.setBrush( color ); + + QRectF r( 0, 0, size.width(), size.height() ); + + const double cos30 = 0.866025; // cos(30°) + const double dx = 0.5 * ( size.height() - cos30 ); + + const double dy = 0.25 * size.height(); + + QPolygonF hexaPolygon( 6 ); + QPointF* hexaPoints = hexaPolygon.data(); + + double x = size.width() * 0.5; + double y = size.height() * 0.5; + + double x1 = x - dx; + double y1 = y - 2 * dy; + + const double x2 = x1 + 1 * dx; + const double x3 = x1 + 2 * dx; + + const double y2 = y1 + 1 * dy; + const double y3 = y1 + 3 * dy; + const double y4 = y1 + 4 * dy; + + hexaPoints[0].rx() = x2; + hexaPoints[0].ry() = y1; + + hexaPoints[1].rx() = x3; + hexaPoints[1].ry() = y2; + + hexaPoints[2].rx() = x3; + hexaPoints[2].ry() = y3; + + hexaPoints[3].rx() = x2; + hexaPoints[3].ry() = y4; + + hexaPoints[4].rx() = x1; + hexaPoints[4].ry() = y3; + + hexaPoints[5].rx() = x1; + hexaPoints[5].ry() = y2; + + painter.drawPolygon( hexaPolygon ); + return image; +} + +//-------------------------------------------------------------------------------------------------- +/// Adapted from QwtSymbol::qwtDrawDiamondSymbols +//-------------------------------------------------------------------------------------------------- +QImage RiuPlotCurveSymbolImageCreator::createDiamondImage( const QSize& size, const QPen& m_pen, const QColor& color ) +{ + QImage image( size, QImage::Format_ARGB32 ); + image.fill( Qt::transparent ); + + QPainter painter( &image ); + painter.setRenderHint( QPainter::Antialiasing ); + + QPen pen( m_pen ); + pen.setWidth( 1.0 ); + pen.setJoinStyle( Qt::MiterJoin ); + + painter.setPen( pen ); + painter.setBrush( color ); + + double x = size.width() * 0.5; + double y = size.height() * 0.5; + const double x1 = x - 0.5 * size.width(); + const double y1 = y - 0.5 * size.height(); + const double x2 = x1 + size.width(); + const double y2 = y1 + size.height(); + + QPolygonF polygon; + polygon += QPointF( x, y1 ); + polygon += QPointF( x2, y ); + polygon += QPointF( x, y2 ); + polygon += QPointF( x1, y ); + + painter.drawPolygon( polygon ); + + return image; +} diff --git a/ApplicationLibCode/UserInterface/RiuPlotCurveSymbolImageCreator.h b/ApplicationLibCode/UserInterface/RiuPlotCurveSymbolImageCreator.h new file mode 100644 index 0000000000..7afc63f746 --- /dev/null +++ b/ApplicationLibCode/UserInterface/RiuPlotCurveSymbolImageCreator.h @@ -0,0 +1,56 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2015- Equinor ASA +// Copyright (C) 2015- Ceetron Solutions AS +// +// ResInsight is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU General Public License at +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#pragma once + +#include "RiuPlotCurveSymbol.h" + +#include + +class QColor; +class QPen; + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +class RiuPlotCurveSymbolImageCreator +{ +public: + static QImage createSymbolImage( RiuPlotCurveSymbol::PointSymbolEnum symbolStyle, + const QSize& size, + const QPen& pen, + const QColor& color ); + + static QImage + createSymbolImage( RiuPlotCurveSymbol::PointSymbolEnum symbolStyle, const QSize& size, const QColor& color ); + +protected: + static QImage createTriangleImage( RiuPlotCurveSymbol::PointSymbolEnum symbolStyle, + const QSize& size, + const QPen& pen, + const QColor& color ); + static QImage createRectImage( const QSize& size, const QPen& pen, const QColor& color ); + static QImage createStar1Image( const QSize& size, const QPen& pen, const QColor& color ); + static QImage createStar2Image( const QSize& size, const QPen& pen, const QColor& color ); + static QImage createHexagonImage( const QSize& size, const QPen& pen, const QColor& color ); + static QImage createEllipseImage( const QSize& size, const QPen& pen, const QColor& color ); + static QImage createCrossImage( const QSize& size, const QPen& pen, const QColor& color ); + static QImage createXCrossImage( const QSize& size, const QPen& pen, const QColor& color ); + static QImage createDiamondImage( const QSize& size, const QPen& pen, const QColor& color ); +}; diff --git a/ApplicationLibCode/UserInterface/RiuQtChartsPlotCurveSymbol.cpp b/ApplicationLibCode/UserInterface/RiuQtChartsPlotCurveSymbol.cpp index fe91037e38..1ca4c8d1f6 100644 --- a/ApplicationLibCode/UserInterface/RiuQtChartsPlotCurveSymbol.cpp +++ b/ApplicationLibCode/UserInterface/RiuQtChartsPlotCurveSymbol.cpp @@ -24,6 +24,8 @@ #include "RiaLogging.h" #include "RiuPlotCurveSymbol.h" +#include "RiuPlotCurveSymbolImageCreator.h" + #include "cvfAssert.h" #include @@ -87,113 +89,16 @@ void RiuQtChartsPlotCurveSymbol::applyToScatterSeries( QtCharts::QScatterSeries* series->show(); - if ( m_style == PointSymbolEnum::SYMBOL_RECT ) + QImage image = RiuPlotCurveSymbolImageCreator::createSymbolImage( m_style, QSize( m_size, m_size ), m_pen, m_color ); + if ( !image.isNull() ) { - setImageBrush( series, createRectImage() ); - } - else if ( m_style == PointSymbolEnum::SYMBOL_ELLIPSE ) - { - setImageBrush( series, createEllipseImage() ); - } - else if ( m_style == PointSymbolEnum::SYMBOL_CROSS ) - { - setImageBrush( series, createCrossImage() ); - } - else if ( m_style == PointSymbolEnum::SYMBOL_XCROSS ) - { - setImageBrush( series, createXCrossImage() ); - } - else if ( m_style == PointSymbolEnum::SYMBOL_DIAMOND ) - { - setImageBrush( series, createDiamondImage() ); - } - else if ( m_style == PointSymbolEnum::SYMBOL_HEXAGON ) - { - setImageBrush( series, createHexagonImage() ); - } - else if ( m_style == PointSymbolEnum::SYMBOL_STAR1 ) - { - setImageBrush( series, createStar1Image() ); - } - else if ( m_style == PointSymbolEnum::SYMBOL_STAR1 ) - { - setImageBrush( series, createStar1Image() ); - } - else if ( m_style == PointSymbolEnum::SYMBOL_STAR2 ) - { - setImageBrush( series, createStar2Image() ); - } - else if ( m_style == PointSymbolEnum::SYMBOL_TRIANGLE || m_style == PointSymbolEnum::SYMBOL_UP_TRIANGLE || - m_style == PointSymbolEnum::SYMBOL_DOWN_TRIANGLE || m_style == PointSymbolEnum::SYMBOL_LEFT_TRIANGLE || - m_style == PointSymbolEnum::SYMBOL_RIGHT_TRIANGLE ) - { - setImageBrush( series, createTriangleImage( m_style ) ); - } - else - { - RiaLogging::warning( "Missing symbol style." ); + setImageBrush( series, image ); } series->setMarkerSize( m_size ); series->setColor( m_color ); } -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -QImage RiuQtChartsPlotCurveSymbol::image() const -{ - if ( m_style == PointSymbolEnum::SYMBOL_NONE ) - { - return QImage(); - } - - if ( m_style == PointSymbolEnum::SYMBOL_RECT ) - { - return createRectImage(); - } - else if ( m_style == PointSymbolEnum::SYMBOL_ELLIPSE ) - { - return createEllipseImage(); - } - else if ( m_style == PointSymbolEnum::SYMBOL_CROSS ) - { - return createCrossImage(); - } - else if ( m_style == PointSymbolEnum::SYMBOL_XCROSS ) - { - return createXCrossImage(); - } - else if ( m_style == PointSymbolEnum::SYMBOL_DIAMOND ) - { - return createDiamondImage(); - } - else if ( m_style == PointSymbolEnum::SYMBOL_HEXAGON ) - { - return createHexagonImage(); - } - else if ( m_style == PointSymbolEnum::SYMBOL_STAR1 ) - { - return createStar1Image(); - } - else if ( m_style == PointSymbolEnum::SYMBOL_STAR1 ) - { - return createStar1Image(); - } - else if ( m_style == PointSymbolEnum::SYMBOL_STAR2 ) - { - return createStar2Image(); - } - else if ( m_style == PointSymbolEnum::SYMBOL_TRIANGLE || m_style == PointSymbolEnum::SYMBOL_UP_TRIANGLE || - m_style == PointSymbolEnum::SYMBOL_DOWN_TRIANGLE || m_style == PointSymbolEnum::SYMBOL_LEFT_TRIANGLE || - m_style == PointSymbolEnum::SYMBOL_RIGHT_TRIANGLE ) - { - return createTriangleImage( m_style ); - } - - return QImage(); -} - //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -204,467 +109,6 @@ void RiuQtChartsPlotCurveSymbol::setImageBrush( QtCharts::QScatterSeries* series series->setPen( QColor( Qt::transparent ) ); } -//-------------------------------------------------------------------------------------------------- -/// Adapted from QwtSymbol::qwtDrawTriangleSymbols -//-------------------------------------------------------------------------------------------------- -QImage RiuQtChartsPlotCurveSymbol::createTriangleImage( RiuPlotCurveSymbol::PointSymbolEnum symbolStyle ) const -{ - QSize size( m_size, m_size ); - - QImage star( size.width(), size.height(), QImage::Format_ARGB32 ); - star.fill( Qt::transparent ); - - QPainter painter( &star ); - painter.setRenderHint( QPainter::Antialiasing ); - - QPen pen( m_pen ); - pen.setWidth( 1.0 ); - pen.setJoinStyle( Qt::MiterJoin ); - - painter.setPen( pen ); - painter.setBrush( m_color ); - - double sw2 = 0.5 * size.width(); - double sh2 = 0.5 * size.height(); - - QPolygonF triangle( 3 ); - QPointF* trianglePoints = triangle.data(); - - double x = size.width() * 0.5; - double y = size.width() * 0.5; - - const double x1 = x - sw2; - const double x2 = x1 + size.width(); - const double y1 = y - sh2; - const double y2 = y1 + size.height(); - - if ( symbolStyle == PointSymbolEnum::SYMBOL_LEFT_TRIANGLE ) - { - trianglePoints[0].rx() = x2; - trianglePoints[0].ry() = y1; - - trianglePoints[1].rx() = x1; - trianglePoints[1].ry() = y; - - trianglePoints[2].rx() = x2; - trianglePoints[2].ry() = y2; - } - - if ( symbolStyle == PointSymbolEnum::SYMBOL_RIGHT_TRIANGLE ) - { - trianglePoints[0].rx() = x1; - trianglePoints[0].ry() = y1; - - trianglePoints[1].rx() = x2; - trianglePoints[1].ry() = y; - - trianglePoints[2].rx() = x1; - trianglePoints[2].ry() = y2; - } - - if ( symbolStyle == PointSymbolEnum::SYMBOL_UP_TRIANGLE || symbolStyle == PointSymbolEnum::SYMBOL_TRIANGLE ) - { - trianglePoints[0].rx() = x1; - trianglePoints[0].ry() = y2; - - trianglePoints[1].rx() = x; - trianglePoints[1].ry() = y1; - - trianglePoints[2].rx() = x2; - trianglePoints[2].ry() = y2; - } - - if ( symbolStyle == PointSymbolEnum::SYMBOL_DOWN_TRIANGLE ) - { - trianglePoints[0].rx() = x1; - trianglePoints[0].ry() = y1; - - trianglePoints[1].rx() = x; - trianglePoints[1].ry() = y2; - - trianglePoints[2].rx() = x2; - trianglePoints[2].ry() = y1; - } - - painter.drawPolygon( triangle ); - - return star; -} - -//-------------------------------------------------------------------------------------------------- -/// Adapted from QwtSymbol::qwtDrawLineSymbols -//-------------------------------------------------------------------------------------------------- -QImage RiuQtChartsPlotCurveSymbol::createCrossImage() const -{ - const QSize size( m_size, m_size ); - - QImage image( m_size, m_size, QImage::Format_ARGB32 ); - image.fill( Qt::transparent ); - - QPainter painter( &image ); - painter.setRenderHint( QPainter::Antialiasing ); - - QPen pen( m_pen ); - pen.setWidth( 1.0 ); - pen.setJoinStyle( Qt::MiterJoin ); - - painter.setPen( pen ); - painter.setBrush( m_color ); - - const double sw = size.width(); - const double sh = size.height(); - const double sw2 = 0.5 * size.width(); - const double sh2 = 0.5 * size.height(); - - double midX = size.width() * 0.5; - double midY = size.height() * 0.5; - - { - const double x = midX - sw2; - const double y = midY; - - painter.drawLine( x, y, x + sw, y ); - } - { - const double y = midY - sh2; - const double x = midX; - - painter.drawLine( x, y, x, y + sh ); - } - - return image; -} - -//-------------------------------------------------------------------------------------------------- -/// Adapted from QwtSymbol::qwtDrawXCrossSymbols -//-------------------------------------------------------------------------------------------------- -QImage RiuQtChartsPlotCurveSymbol::createXCrossImage() const -{ - const QSize size( m_size, m_size ); - - QImage image( m_size, m_size, QImage::Format_ARGB32 ); - image.fill( Qt::transparent ); - - QPainter painter( &image ); - painter.setRenderHint( QPainter::Antialiasing ); - - QPen pen( m_pen ); - pen.setWidth( 1.0 ); - pen.setJoinStyle( Qt::MiterJoin ); - - painter.setPen( pen ); - painter.setBrush( m_color ); - - const double sw = size.width(); - const double sh = size.height(); - const double sw2 = 0.5 * size.width(); - const double sh2 = 0.5 * size.height(); - - double midX = size.width() * 0.5; - double midY = size.height() * 0.5; - - const double x1 = midX - sw2; - const double x2 = x1 + sw; - const double y1 = midY - sh2; - const double y2 = y1 + sh; - - painter.drawLine( x1, y1, x2, y2 ); - painter.drawLine( x1, y2, x2, y1 ); - - return image; -} - -//-------------------------------------------------------------------------------------------------- -/// Adapted from QwtSymbol::qwtDrawRectSymbols -//-------------------------------------------------------------------------------------------------- -QImage RiuQtChartsPlotCurveSymbol::createRectImage() const -{ - const QSize size( m_size, m_size ); - - QImage image( m_size, m_size, QImage::Format_ARGB32 ); - image.fill( Qt::transparent ); - - QPainter painter( &image ); - painter.setRenderHint( QPainter::Antialiasing ); - - QPen pen( m_pen ); - pen.setWidth( 1.0 ); - pen.setJoinStyle( Qt::MiterJoin ); - - painter.setPen( pen ); - painter.setBrush( m_color ); - - const double sw = size.width(); - const double sh = size.height(); - const double sw2 = 0.5 * size.width(); - const double sh2 = 0.5 * size.height(); - - // Mid point - const double x = sw * 0.5; - const double y = sw * 0.5; - - const QRectF r( x - sw2, y - sh2, sw, sh ); - painter.drawRect( r ); - - return image; -} - -//-------------------------------------------------------------------------------------------------- -/// Adapted from QwtSymbol::qwtDrawEllipseSymbols -//-------------------------------------------------------------------------------------------------- -QImage RiuQtChartsPlotCurveSymbol::createEllipseImage() const -{ - const QSize size( m_size, m_size ); - - QImage image( m_size, m_size, QImage::Format_ARGB32 ); - image.fill( Qt::transparent ); - - QPainter painter( &image ); - painter.setRenderHint( QPainter::Antialiasing ); - - QPen pen( m_pen ); - pen.setWidth( 1.0 ); - pen.setJoinStyle( Qt::MiterJoin ); - - painter.setPen( pen ); - painter.setBrush( m_color ); - - const double sw = size.width(); - const double sh = size.height(); - const double sw2 = 0.5 * size.width(); - const double sh2 = 0.5 * size.height(); - - // Mid point - const double x = sw * 0.5; - const double y = sw * 0.5; - - const QRectF r( x - sw2, y - sh2, sw, sh ); - painter.drawEllipse( r ); - - return image; -} - -//-------------------------------------------------------------------------------------------------- -/// Adapted from QwtSymbol::qwtDrawStar1Symbols -//-------------------------------------------------------------------------------------------------- -QImage RiuQtChartsPlotCurveSymbol::createStar1Image() const -{ - QImage image( m_size, m_size, QImage::Format_ARGB32 ); - image.fill( Qt::transparent ); - - QPainter painter( &image ); - painter.setRenderHint( QPainter::Antialiasing ); - - QPen pen( m_pen ); - pen.setWidth( 1.0 ); - pen.setJoinStyle( Qt::MiterJoin ); - - painter.setPen( pen ); - painter.setBrush( m_color ); - - QRectF r( 0, 0, m_size, m_size ); - - const double sqrt1_2 = 1.0 / sqrt( 2 ); - - const QPointF c = r.center(); - const double d1 = r.width() / 2.0 * ( 1.0 - sqrt1_2 ); - - painter.drawLine( r.left() + d1, r.top() + d1, r.right() - d1, r.bottom() - d1 ); - painter.drawLine( r.left() + d1, r.bottom() - d1, r.right() - d1, r.top() + d1 ); - painter.drawLine( c.x(), r.top(), c.x(), r.bottom() ); - painter.drawLine( r.left(), c.y(), r.right(), c.y() ); - - return image; -} - -//-------------------------------------------------------------------------------------------------- -/// Adapted from QwtSymbol::qwtDrawStar2Symbols -//-------------------------------------------------------------------------------------------------- -QImage RiuQtChartsPlotCurveSymbol::createStar2Image() const -{ - QImage image( m_size, m_size, QImage::Format_ARGB32 ); - image.fill( Qt::transparent ); - - QPainter painter( &image ); - painter.setRenderHint( QPainter::Antialiasing ); - - QPen pen( m_pen ); - pen.setWidth( 1.0 ); - pen.setJoinStyle( Qt::MiterJoin ); - - painter.setPen( pen ); - painter.setBrush( m_color ); - - QRectF r( 0, 0, m_size, m_size ); - - const double cos30 = 0.866025; // cos(30°) - - const double dy = 0.25 * m_size; - const double dx = 0.5 * m_size * cos30 / 3.0; - - QPolygonF star( 12 ); - QPointF* starPoints = star.data(); - - double x = m_size * 0.5; - double y = m_size * 0.5; - - double x1 = x - 3 * dx; - double y1 = y - 2 * dy; - - const double x2 = x1 + 1 * dx; - const double x3 = x1 + 2 * dx; - const double x4 = x1 + 3 * dx; - const double x5 = x1 + 4 * dx; - const double x6 = x1 + 5 * dx; - const double x7 = x1 + 6 * dx; - - const double y2 = y1 + 1 * dy; - const double y3 = y1 + 2 * dy; - const double y4 = y1 + 3 * dy; - const double y5 = y1 + 4 * dy; - - starPoints[0].rx() = x4; - starPoints[0].ry() = y1; - - starPoints[1].rx() = x5; - starPoints[1].ry() = y2; - - starPoints[2].rx() = x7; - starPoints[2].ry() = y2; - - starPoints[3].rx() = x6; - starPoints[3].ry() = y3; - - starPoints[4].rx() = x7; - starPoints[4].ry() = y4; - - starPoints[5].rx() = x5; - starPoints[5].ry() = y4; - - starPoints[6].rx() = x4; - starPoints[6].ry() = y5; - - starPoints[7].rx() = x3; - starPoints[7].ry() = y4; - - starPoints[8].rx() = x1; - starPoints[8].ry() = y4; - - starPoints[9].rx() = x2; - starPoints[9].ry() = y3; - - starPoints[10].rx() = x1; - starPoints[10].ry() = y2; - - starPoints[11].rx() = x3; - starPoints[11].ry() = y2; - - painter.drawPolygon( star ); - - return image; -} - -//-------------------------------------------------------------------------------------------------- -/// Adapted from QwtSymbol::qwtDrawHexagonSymbols -//-------------------------------------------------------------------------------------------------- -QImage RiuQtChartsPlotCurveSymbol::createHexagonImage() const -{ - QImage image( m_size, m_size, QImage::Format_ARGB32 ); - image.fill( Qt::transparent ); - - QPainter painter( &image ); - painter.setRenderHint( QPainter::Antialiasing ); - - QPen pen( m_pen ); - pen.setWidth( 1.0 ); - pen.setJoinStyle( Qt::MiterJoin ); - - painter.setPen( pen ); - painter.setBrush( m_color ); - - QRectF r( 0, 0, m_size, m_size ); - - const double cos30 = 0.866025; // cos(30°) - const double dx = 0.5 * ( m_size - cos30 ); - - const double dy = 0.25 * m_size; - - QPolygonF hexaPolygon( 6 ); - QPointF* hexaPoints = hexaPolygon.data(); - - double x = m_size * 0.5; - double y = m_size * 0.5; - - double x1 = x - dx; - double y1 = y - 2 * dy; - - const double x2 = x1 + 1 * dx; - const double x3 = x1 + 2 * dx; - - const double y2 = y1 + 1 * dy; - const double y3 = y1 + 3 * dy; - const double y4 = y1 + 4 * dy; - - hexaPoints[0].rx() = x2; - hexaPoints[0].ry() = y1; - - hexaPoints[1].rx() = x3; - hexaPoints[1].ry() = y2; - - hexaPoints[2].rx() = x3; - hexaPoints[2].ry() = y3; - - hexaPoints[3].rx() = x2; - hexaPoints[3].ry() = y4; - - hexaPoints[4].rx() = x1; - hexaPoints[4].ry() = y3; - - hexaPoints[5].rx() = x1; - hexaPoints[5].ry() = y2; - - painter.drawPolygon( hexaPolygon ); - return image; -} - -//-------------------------------------------------------------------------------------------------- -/// Adapted from QwtSymbol::qwtDrawDiamondSymbols -//-------------------------------------------------------------------------------------------------- -QImage RiuQtChartsPlotCurveSymbol::createDiamondImage() const -{ - QImage image( m_size, m_size, QImage::Format_ARGB32 ); - image.fill( Qt::transparent ); - - QPainter painter( &image ); - painter.setRenderHint( QPainter::Antialiasing ); - - QPen pen( m_pen ); - pen.setWidth( 1.0 ); - pen.setJoinStyle( Qt::MiterJoin ); - - painter.setPen( pen ); - painter.setBrush( m_color ); - - QSize size( m_size, m_size ); - - double x = size.width() * 0.5; - double y = size.height() * 0.5; - const double x1 = x - 0.5 * size.width(); - const double y1 = y - 0.5 * size.height(); - const double x2 = x1 + size.width(); - const double y2 = y1 + size.height(); - - QPolygonF polygon; - polygon += QPointF( x, y1 ); - polygon += QPointF( x2, y ); - polygon += QPointF( x, y2 ); - polygon += QPointF( x1, y ); - - painter.drawPolygon( polygon ); - - return image; -} - //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/UserInterface/RiuQtChartsPlotCurveSymbol.h b/ApplicationLibCode/UserInterface/RiuQtChartsPlotCurveSymbol.h index 5fd3d02fbf..4ad8e0f1d7 100644 --- a/ApplicationLibCode/UserInterface/RiuQtChartsPlotCurveSymbol.h +++ b/ApplicationLibCode/UserInterface/RiuQtChartsPlotCurveSymbol.h @@ -63,16 +63,6 @@ public: QImage image() const; private: - QImage createTriangleImage( RiuPlotCurveSymbol::PointSymbolEnum symbolStyle ) const; - QImage createRectImage() const; - QImage createStar1Image() const; - QImage createStar2Image() const; - QImage createHexagonImage() const; - QImage createEllipseImage() const; - QImage createCrossImage() const; - QImage createXCrossImage() const; - QImage createDiamondImage() const; - void setImageBrush( QtCharts::QScatterSeries* series, const QImage& image ) const; QColor m_color; diff --git a/ApplicationLibCode/UserInterface/RiuQwtPlotTools.cpp b/ApplicationLibCode/UserInterface/RiuQwtPlotTools.cpp index 9ac0460fb8..0923fa4ab7 100644 --- a/ApplicationLibCode/UserInterface/RiuQwtPlotTools.cpp +++ b/ApplicationLibCode/UserInterface/RiuQwtPlotTools.cpp @@ -26,7 +26,7 @@ #include "RimPlotCurve.h" #include "RiuGuiTheme.h" -#include "RiuQtChartsPlotCurveSymbol.h" +#include "RiuPlotCurveSymbolImageCreator.h" #include "RiuQwtPlotLegend.h" #include "qwt_axis.h" @@ -323,13 +323,12 @@ QList RiuQwtPlotTools::createLegendData( const std::vectorsymbol() != RiuQtChartsPlotCurveSymbol::SYMBOL_NONE ) + if ( c->symbol() != RiuPlotCurveSymbol::SYMBOL_NONE ) { - RiuQtChartsPlotCurveSymbol symbol( c->symbol() ); - symbol.setSize( size.height() / 2, size.height() / 2 ); - symbol.setColor( RiaColorTools::toQColor( c->color() ) ); - - auto image = symbol.image(); + auto image = + RiuPlotCurveSymbolImageCreator::createSymbolImage( c->symbol(), + QSize( size.width() / 2, size.height() / 2 ), + RiaColorTools::toQColor( c->color() ) ); QPoint p( size.width() / 4, size.height() / 4 ); painter.drawImage( p, image ); From 0c7fe7da1a18891faf002722dae9d008838a0df8 Mon Sep 17 00:00:00 2001 From: jonjenssen <69144954+jonjenssen@users.noreply.github.com> Date: Mon, 8 Aug 2022 13:34:27 +0200 Subject: [PATCH 039/129] Summary context menu cleanup and fixes (#9165) * Make summary plot ctx menu items show up for the plot you right-click on, not the one selected in the project tree. --- .../CMakeLists_files.cmake | 2 + .../RicShowPlotDataCtxFeature.cpp | 29 ++++++ .../RicShowPlotDataCtxFeature.h | 32 ++++++ .../RicShowPlotDataFeature.cpp | 99 ++++++++++++++----- .../RicShowPlotDataFeature.h | 5 + .../RicSplitMultiPlotFeature.cpp | 2 +- .../CMakeLists_files.cmake | 4 + .../RicDeleteSubPlotCtxFeature.cpp | 29 ++++++ .../RicDeleteSubPlotCtxFeature.h | 32 ++++++ .../RicEditSummaryPlotCtxFeature.cpp | 29 ++++++ .../RicEditSummaryPlotCtxFeature.h | 32 ++++++ .../RicEditSummaryPlotFeature.cpp | 10 ++ .../RicEditSummaryPlotFeature.h | 2 +- .../RicDeleteSubPlotFeature.cpp | 25 +---- .../UserInterface/RiuSummaryPlot.cpp | 22 ++--- 15 files changed, 296 insertions(+), 58 deletions(-) create mode 100644 ApplicationLibCode/Commands/ApplicationCommands/RicShowPlotDataCtxFeature.cpp create mode 100644 ApplicationLibCode/Commands/ApplicationCommands/RicShowPlotDataCtxFeature.h create mode 100644 ApplicationLibCode/Commands/SummaryPlotCommands/RicDeleteSubPlotCtxFeature.cpp create mode 100644 ApplicationLibCode/Commands/SummaryPlotCommands/RicDeleteSubPlotCtxFeature.h create mode 100644 ApplicationLibCode/Commands/SummaryPlotCommands/RicEditSummaryPlotCtxFeature.cpp create mode 100644 ApplicationLibCode/Commands/SummaryPlotCommands/RicEditSummaryPlotCtxFeature.h diff --git a/ApplicationLibCode/Commands/ApplicationCommands/CMakeLists_files.cmake b/ApplicationLibCode/Commands/ApplicationCommands/CMakeLists_files.cmake index e2d3a74038..3be6c63f93 100644 --- a/ApplicationLibCode/Commands/ApplicationCommands/CMakeLists_files.cmake +++ b/ApplicationLibCode/Commands/ApplicationCommands/CMakeLists_files.cmake @@ -20,6 +20,7 @@ set(SOURCE_GROUP_HEADER_FILES ${CMAKE_CURRENT_LIST_DIR}/RicExportObjectAndFieldKeywordsFeature.h ${CMAKE_CURRENT_LIST_DIR}/RicSaveProjectNoGlobalPathsFeature.h ${CMAKE_CURRENT_LIST_DIR}/RicShowClassNamesFeature.h + ${CMAKE_CURRENT_LIST_DIR}/RicShowPlotDataCtxFeature.h ) set(SOURCE_GROUP_SOURCE_FILES @@ -44,6 +45,7 @@ set(SOURCE_GROUP_SOURCE_FILES ${CMAKE_CURRENT_LIST_DIR}/RicExportObjectAndFieldKeywordsFeature.cpp ${CMAKE_CURRENT_LIST_DIR}/RicSaveProjectNoGlobalPathsFeature.cpp ${CMAKE_CURRENT_LIST_DIR}/RicShowClassNamesFeature.cpp + ${CMAKE_CURRENT_LIST_DIR}/RicShowPlotDataCtxFeature.cpp ) list(APPEND COMMAND_CODE_HEADER_FILES ${SOURCE_GROUP_HEADER_FILES}) diff --git a/ApplicationLibCode/Commands/ApplicationCommands/RicShowPlotDataCtxFeature.cpp b/ApplicationLibCode/Commands/ApplicationCommands/RicShowPlotDataCtxFeature.cpp new file mode 100644 index 0000000000..d5f358191f --- /dev/null +++ b/ApplicationLibCode/Commands/ApplicationCommands/RicShowPlotDataCtxFeature.cpp @@ -0,0 +1,29 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2022 Equinor ASA +// +// ResInsight is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU General Public License at +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#include "RicShowPlotDataCtxFeature.h" + +CAF_CMD_SOURCE_INIT( RicShowPlotDataCtxFeature, "RicShowPlotDataCtxFeature" ); + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +bool RicShowPlotDataCtxFeature::isCommandEnabled() +{ + return true; +} diff --git a/ApplicationLibCode/Commands/ApplicationCommands/RicShowPlotDataCtxFeature.h b/ApplicationLibCode/Commands/ApplicationCommands/RicShowPlotDataCtxFeature.h new file mode 100644 index 0000000000..bb703f03d1 --- /dev/null +++ b/ApplicationLibCode/Commands/ApplicationCommands/RicShowPlotDataCtxFeature.h @@ -0,0 +1,32 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2022 Equinor ASA +// +// ResInsight is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU General Public License at +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#pragma once + +#include "RicShowPlotDataFeature.h" + +//================================================================================================== +/// +//================================================================================================== +class RicShowPlotDataCtxFeature : public RicShowPlotDataFeature +{ + CAF_CMD_HEADER_INIT; + +protected: + bool isCommandEnabled() override; +}; diff --git a/ApplicationLibCode/Commands/ApplicationCommands/RicShowPlotDataFeature.cpp b/ApplicationLibCode/Commands/ApplicationCommands/RicShowPlotDataFeature.cpp index 7d3dc74ed2..4c70fd8d58 100644 --- a/ApplicationLibCode/Commands/ApplicationCommands/RicShowPlotDataFeature.cpp +++ b/ApplicationLibCode/Commands/ApplicationCommands/RicShowPlotDataFeature.cpp @@ -25,6 +25,7 @@ #include "RimGridCrossPlot.h" #include "RimGridCrossPlotCurve.h" +#include "RimPlot.h" #include "RimProject.h" #include "RimSummaryCrossPlot.h" #include "RimSummaryPlot.h" @@ -173,30 +174,26 @@ bool RicShowPlotDataFeature::isCommandEnabled() return true; } - auto selectedSummaryPlots = caf::selectedObjectsByType(); - if ( selectedSummaryPlots.size() > 0 ) + std::vector selection; + getSelection( selection ); + + int validPlots = 0; + + for ( auto plot : selection ) { - for ( auto c : selectedSummaryPlots ) + if ( dynamic_cast( plot ) ) { - if ( dynamic_cast( c ) ) - { - return false; - } + return false; } - return true; + if ( dynamic_cast( plot ) != nullptr || + ( dynamic_cast( plot ) != nullptr || dynamic_cast( plot ) != nullptr || + dynamic_cast( plot ) != nullptr ) ) + { + validPlots++; + } } - - auto wellLogPlots = caf::selectedObjectsByType(); - if ( wellLogPlots.size() > 0 ) return true; - - auto gridCrossPlots = caf::selectedObjectsByType(); - if ( gridCrossPlots.size() > 0 ) return true; - - auto vfpPlots = caf::selectedObjectsByType(); - if ( vfpPlots.size() > 0 ) return true; - - return false; + return ( validPlots > 0 ); } //-------------------------------------------------------------------------------------------------- @@ -220,10 +217,45 @@ void RicShowPlotDataFeature::onActionTriggered( bool isChecked ) this->disableModelChangeContribution(); - std::vector selectedSummaryPlots = caf::selectedObjectsByType(); - std::vector wellLogPlots = caf::selectedObjectsByType(); - std::vector crossPlots = caf::selectedObjectsByType(); - std::vector vfpPlots = caf::selectedObjectsByType(); + std::vector selection; + getSelection( selection ); + + std::vector selectedSummaryPlots; + std::vector wellLogPlots; + std::vector crossPlots; + std::vector vfpPlots; + + for ( auto plot : selection ) + { + auto sumPlot = dynamic_cast( plot ); + if ( sumPlot ) + { + selectedSummaryPlots.push_back( sumPlot ); + continue; + } + + auto wellPlot = dynamic_cast( plot ); + if ( wellPlot ) + { + wellLogPlots.push_back( wellPlot ); + continue; + } + + auto xPlot = dynamic_cast( plot ); + if ( xPlot ) + { + crossPlots.push_back( xPlot ); + continue; + } + + auto vfpPlot = dynamic_cast( plot ); + if ( vfpPlot ) + { + vfpPlots.push_back( vfpPlot ); + continue; + } + } + if ( selectedSummaryPlots.empty() && wellLogPlots.empty() && crossPlots.empty() && vfpPlots.empty() ) { CVF_ASSERT( false ); @@ -303,3 +335,24 @@ void RicShowPlotDataFeature::showTextWindow( const QString& title, const QString plotwindow->addToTemporaryWidgets( textWiget ); } + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RicShowPlotDataFeature::getSelection( std::vector& selection ) +{ + if ( sender() ) + { + QVariant userData = this->userData(); + if ( !userData.isNull() && userData.canConvert() ) + { + RimPlot* plot = static_cast( userData.value() ); + if ( plot ) selection.push_back( plot ); + } + } + + if ( selection.empty() ) + { + caf::SelectionManager::instance()->objectsByType( &selection ); + } +} diff --git a/ApplicationLibCode/Commands/ApplicationCommands/RicShowPlotDataFeature.h b/ApplicationLibCode/Commands/ApplicationCommands/RicShowPlotDataFeature.h index 3e3c4a36f8..a16effac74 100644 --- a/ApplicationLibCode/Commands/ApplicationCommands/RicShowPlotDataFeature.h +++ b/ApplicationLibCode/Commands/ApplicationCommands/RicShowPlotDataFeature.h @@ -21,8 +21,10 @@ #include "cafCmdFeature.h" #include +#include class RiuTabbedTextProvider; +class RimPlot; //================================================================================================== /// @@ -36,6 +38,9 @@ protected: void onActionTriggered( bool isChecked ) override; void setupActionLook( QAction* actionToSetup ) override; +private: + void getSelection( std::vector& selection ); + public: static void showTabbedTextWindow( RiuTabbedTextProvider* textProvider ); static void showTextWindow( const QString& title, const QString& text ); diff --git a/ApplicationLibCode/Commands/PlotBuilderCommands/RicSplitMultiPlotFeature.cpp b/ApplicationLibCode/Commands/PlotBuilderCommands/RicSplitMultiPlotFeature.cpp index 6bfa01c2d6..626e2d27f5 100644 --- a/ApplicationLibCode/Commands/PlotBuilderCommands/RicSplitMultiPlotFeature.cpp +++ b/ApplicationLibCode/Commands/PlotBuilderCommands/RicSplitMultiPlotFeature.cpp @@ -46,7 +46,7 @@ bool RicSplitMultiPlotFeature::isCommandEnabled() return ( ( plot->summaryCurves().size() > 1 ) || ( plot->curveSets().size() > 1 ) ); } - return false; + return true; } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/Commands/SummaryPlotCommands/CMakeLists_files.cmake b/ApplicationLibCode/Commands/SummaryPlotCommands/CMakeLists_files.cmake index fe183d08c8..e1067d594c 100644 --- a/ApplicationLibCode/Commands/SummaryPlotCommands/CMakeLists_files.cmake +++ b/ApplicationLibCode/Commands/SummaryPlotCommands/CMakeLists_files.cmake @@ -44,6 +44,8 @@ set(SOURCE_GROUP_HEADER_FILES ${CMAKE_CURRENT_LIST_DIR}/RicNewPlotAxisPropertiesFeature.h ${CMAKE_CURRENT_LIST_DIR}/RicShowSummaryPlotManagerFeature.h ${CMAKE_CURRENT_LIST_DIR}/RicPasteSummaryMultiPlotFeature.h + ${CMAKE_CURRENT_LIST_DIR}/RicDeleteSubPlotCtxFeature.h + ${CMAKE_CURRENT_LIST_DIR}/RicEditSummaryPlotCtxFeature.h ) set(SOURCE_GROUP_SOURCE_FILES @@ -92,6 +94,8 @@ set(SOURCE_GROUP_SOURCE_FILES ${CMAKE_CURRENT_LIST_DIR}/RicNewPlotAxisPropertiesFeature.cpp ${CMAKE_CURRENT_LIST_DIR}/RicShowSummaryPlotManagerFeature.cpp ${CMAKE_CURRENT_LIST_DIR}/RicPasteSummaryMultiPlotFeature.cpp + ${CMAKE_CURRENT_LIST_DIR}/RicDeleteSubPlotCtxFeature.cpp + ${CMAKE_CURRENT_LIST_DIR}/RicEditSummaryPlotCtxFeature.cpp ) list(APPEND COMMAND_CODE_HEADER_FILES ${SOURCE_GROUP_HEADER_FILES}) diff --git a/ApplicationLibCode/Commands/SummaryPlotCommands/RicDeleteSubPlotCtxFeature.cpp b/ApplicationLibCode/Commands/SummaryPlotCommands/RicDeleteSubPlotCtxFeature.cpp new file mode 100644 index 0000000000..b9b107e2c7 --- /dev/null +++ b/ApplicationLibCode/Commands/SummaryPlotCommands/RicDeleteSubPlotCtxFeature.cpp @@ -0,0 +1,29 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2022 Equinor ASA +// +// ResInsight is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU General Public License at +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#include "RicDeleteSubPlotCtxFeature.h" + +CAF_CMD_SOURCE_INIT( RicDeleteSubPlotCtxFeature, "RicDeleteSubPlotCtxFeature" ); + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +bool RicDeleteSubPlotCtxFeature::isCommandEnabled() +{ + return true; +} diff --git a/ApplicationLibCode/Commands/SummaryPlotCommands/RicDeleteSubPlotCtxFeature.h b/ApplicationLibCode/Commands/SummaryPlotCommands/RicDeleteSubPlotCtxFeature.h new file mode 100644 index 0000000000..e0643f4783 --- /dev/null +++ b/ApplicationLibCode/Commands/SummaryPlotCommands/RicDeleteSubPlotCtxFeature.h @@ -0,0 +1,32 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2022 Equinor ASA +// +// ResInsight is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU General Public License at +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#pragma once + +#include "WellLogCommands/RicDeleteSubPlotFeature.h" + +//================================================================================================== +/// +//================================================================================================== +class RicDeleteSubPlotCtxFeature : public RicDeleteSubPlotFeature +{ + CAF_CMD_HEADER_INIT; + +protected: + bool isCommandEnabled() override; +}; diff --git a/ApplicationLibCode/Commands/SummaryPlotCommands/RicEditSummaryPlotCtxFeature.cpp b/ApplicationLibCode/Commands/SummaryPlotCommands/RicEditSummaryPlotCtxFeature.cpp new file mode 100644 index 0000000000..93974aa1ac --- /dev/null +++ b/ApplicationLibCode/Commands/SummaryPlotCommands/RicEditSummaryPlotCtxFeature.cpp @@ -0,0 +1,29 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2022 Equinor ASA +// +// ResInsight is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU General Public License at +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#include "RicEditSummaryPlotCtxFeature.h" + +CAF_CMD_SOURCE_INIT( RicEditSummaryPlotCtxFeature, "RicEditSummaryPlotCtxFeature" ); + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +bool RicEditSummaryPlotCtxFeature::isCommandEnabled() +{ + return true; +} diff --git a/ApplicationLibCode/Commands/SummaryPlotCommands/RicEditSummaryPlotCtxFeature.h b/ApplicationLibCode/Commands/SummaryPlotCommands/RicEditSummaryPlotCtxFeature.h new file mode 100644 index 0000000000..b1e307fc72 --- /dev/null +++ b/ApplicationLibCode/Commands/SummaryPlotCommands/RicEditSummaryPlotCtxFeature.h @@ -0,0 +1,32 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2022 Equinor ASA +// +// ResInsight is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU General Public License at +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#pragma once + +#include "RicEditSummaryPlotFeature.h" + +//================================================================================================== +/// +//================================================================================================== +class RicEditSummaryPlotCtxFeature : public RicEditSummaryPlotFeature +{ + CAF_CMD_HEADER_INIT; + +protected: + bool isCommandEnabled() override; +}; diff --git a/ApplicationLibCode/Commands/SummaryPlotCommands/RicEditSummaryPlotFeature.cpp b/ApplicationLibCode/Commands/SummaryPlotCommands/RicEditSummaryPlotFeature.cpp index 1daab4da12..a12729fea4 100644 --- a/ApplicationLibCode/Commands/SummaryPlotCommands/RicEditSummaryPlotFeature.cpp +++ b/ApplicationLibCode/Commands/SummaryPlotCommands/RicEditSummaryPlotFeature.cpp @@ -133,6 +133,16 @@ RimSummaryPlot* RicEditSummaryPlotFeature::selectedSummaryPlot() { RimSummaryPlot* sumPlot = nullptr; + if ( sender() ) + { + QVariant userData = this->userData(); + if ( !userData.isNull() && userData.canConvert() ) + { + RimSummaryPlot* plot = static_cast( userData.value() ); + if ( plot ) return plot; + } + } + caf::PdmObject* selObj = dynamic_cast( caf::SelectionManager::instance()->selectedItem() ); if ( selObj ) { diff --git a/ApplicationLibCode/Commands/SummaryPlotCommands/RicEditSummaryPlotFeature.h b/ApplicationLibCode/Commands/SummaryPlotCommands/RicEditSummaryPlotFeature.h index 29dca7d6c0..816093a460 100644 --- a/ApplicationLibCode/Commands/SummaryPlotCommands/RicEditSummaryPlotFeature.h +++ b/ApplicationLibCode/Commands/SummaryPlotCommands/RicEditSummaryPlotFeature.h @@ -43,5 +43,5 @@ protected: void setupActionLook( QAction* actionToSetup ) override; private: - static RimSummaryPlot* selectedSummaryPlot(); + RimSummaryPlot* selectedSummaryPlot(); }; diff --git a/ApplicationLibCode/Commands/WellLogCommands/RicDeleteSubPlotFeature.cpp b/ApplicationLibCode/Commands/WellLogCommands/RicDeleteSubPlotFeature.cpp index 571c5c92c5..56b6cba8bf 100644 --- a/ApplicationLibCode/Commands/WellLogCommands/RicDeleteSubPlotFeature.cpp +++ b/ApplicationLibCode/Commands/WellLogCommands/RicDeleteSubPlotFeature.cpp @@ -44,29 +44,10 @@ bool RicDeleteSubPlotFeature::isCommandEnabled() { if ( RicWellLogPlotCurveFeatureImpl::parentWellAllocationPlot() ) return false; - std::vector selection; - caf::SelectionManager::instance()->objectsByType( &selection ); + std::vector selection; + getSelection( selection ); - if ( selection.size() > 0 ) - { - if ( dynamic_cast( selection.front() ) ) return false; - - size_t plotsSelected = 0; - for ( caf::PdmObject* object : selection ) - { - RimMultiPlot* multiPlot = nullptr; - RimWellLogPlot* wellLogPlot = nullptr; - object->firstAncestorOrThisOfType( multiPlot ); - object->firstAncestorOrThisOfType( wellLogPlot ); - if ( dynamic_cast( object ) && ( multiPlot || wellLogPlot ) ) - { - plotsSelected++; - } - } - return plotsSelected == selection.size(); - } - - return false; + return ( selection.size() > 0 ); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/UserInterface/RiuSummaryPlot.cpp b/ApplicationLibCode/UserInterface/RiuSummaryPlot.cpp index d6db4b0782..1e5a4a920e 100644 --- a/ApplicationLibCode/UserInterface/RiuSummaryPlot.cpp +++ b/ApplicationLibCode/UserInterface/RiuSummaryPlot.cpp @@ -59,7 +59,17 @@ void RiuSummaryPlot::showContextMenu( QPoint pos ) QMenu menu; caf::CmdFeatureMenuBuilder menuBuilder; - menuBuilder << "RicShowPlotDataFeature"; + RimSummaryPlot* plot = dynamic_cast( plotWidget()->plotDefinition() ); + if ( plot ) + { + QVariant plotVariant( QVariant::fromValue( static_cast( plot ) ) ); + menuBuilder.addCmdFeatureWithUserData( "RicShowPlotDataCtxFeature", "Show Plot Data", plotVariant ); + menuBuilder.addCmdFeatureWithUserData( "RicEditSummaryPlotCtxFeature", "Edit Plot", plotVariant ); + menuBuilder.addCmdFeatureWithUserData( "RicSplitMultiPlotFeature", "Split into Multiple Plots", plotVariant ); + menuBuilder.addSeparator(); + menuBuilder.addCmdFeatureWithUserData( "RicDeleteSubPlotCtxFeature", "Delete Plot", plotVariant ); + } + menuBuilder.addSeparator(); double distanceFromClick = std::numeric_limits::infinity(); @@ -192,16 +202,6 @@ void RiuSummaryPlot::showContextMenu( QPoint pos ) } } - menuBuilder.addSeparator(); - - RimSummaryPlot* plot = dynamic_cast( plotWidget()->plotDefinition() ); - if ( plot ) - { - QVariant plotVariant( QVariant::fromValue( static_cast( plot ) ) ); - menuBuilder.addCmdFeatureWithUserData( "RicSplitMultiPlotFeature", "Split into Multiple Plots", plotVariant ); - menuBuilder.addCmdFeatureWithUserData( "RicDeleteSubPlotFeature", "Delete Plot", plotVariant ); - } - menuBuilder.appendToMenu( &menu ); if ( !menu.actions().empty() ) From b5708424e24fabf642b503f7356ae3ff6cee1ece Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Tue, 9 Aug 2022 13:04:36 +0200 Subject: [PATCH 040/129] Guard pointer before use --- ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlot.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlot.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlot.cpp index 7a75cc294c..11bd74d0c8 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlot.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlot.cpp @@ -217,7 +217,7 @@ void RimSummaryPlot::updateAxes() updateAxis( RiaDefines::PlotAxis::PLOT_AXIS_LEFT ); updateAxis( RiaDefines::PlotAxis::PLOT_AXIS_RIGHT ); - m_summaryPlot->clearAnnotationObjects(); + if ( m_summaryPlot ) m_summaryPlot->clearAnnotationObjects(); if ( timeAxisProperties() && plotWidget() ) { From 99f17f1818199caee0b643b9e6ba12dee8715355 Mon Sep 17 00:00:00 2001 From: jonjenssen <69144954+jonjenssen@users.noreply.github.com> Date: Tue, 9 Aug 2022 16:40:50 +0200 Subject: [PATCH 041/129] Get rid of "ghost" windows on startup. (#9171) * Get rid of "ghost" windows on startup. Removes hide all docking windows feature for now, to be replaced by a new implementation. Will probably break some tests due to this. --- .../Application/RiaGuiApplication.cpp | 21 +- .../Tools/RiaRegressionTestRunner.cpp | 3 - .../RicfExportSnapshots.cpp | 2 - .../CMakeLists_files.cmake | 4 - .../RicDefaultDockConfigEclipseFeature.cpp | 54 ------ .../RicDefaultDockConfigEclipseFeature.h | 34 ---- .../RicDefaultDockConfigGeoMechFeature.cpp | 49 ----- .../RicDefaultDockConfigGeoMechFeature.h | 34 ---- .../RicShowMainWindowFeature.cpp | 2 - .../UserInterface/RiuDockWidgetTools.cpp | 180 +----------------- .../UserInterface/RiuDockWidgetTools.h | 19 +- .../UserInterface/RiuMainWindow.cpp | 38 ++-- .../UserInterface/RiuMainWindow.h | 2 - .../UserInterface/RiuMainWindowBase.cpp | 54 ------ .../UserInterface/RiuMainWindowBase.h | 4 - .../UserInterface/RiuPlotMainWindow.cpp | 13 +- 16 files changed, 24 insertions(+), 489 deletions(-) delete mode 100644 ApplicationLibCode/Commands/ApplicationCommands/RicDefaultDockConfigEclipseFeature.cpp delete mode 100644 ApplicationLibCode/Commands/ApplicationCommands/RicDefaultDockConfigEclipseFeature.h delete mode 100644 ApplicationLibCode/Commands/ApplicationCommands/RicDefaultDockConfigGeoMechFeature.cpp delete mode 100644 ApplicationLibCode/Commands/ApplicationCommands/RicDefaultDockConfigGeoMechFeature.h diff --git a/ApplicationLibCode/Application/RiaGuiApplication.cpp b/ApplicationLibCode/Application/RiaGuiApplication.cpp index a669d8e5ba..f858290fec 100644 --- a/ApplicationLibCode/Application/RiaGuiApplication.cpp +++ b/ApplicationLibCode/Application/RiaGuiApplication.cpp @@ -425,8 +425,7 @@ void RiaGuiApplication::initialize() // Create main windows // The plot window is created to be able to set expanded state on created objects, but hidden by default getOrCreateAndShowMainWindow(); - RiuPlotMainWindow* plotMainWindow = getOrCreateMainPlotWindow(); - plotMainWindow->hideAllDockWidgets(); + getOrCreateMainPlotWindow(); RiuGuiTheme::updateGuiTheme( m_preferences->guiTheme() ); @@ -968,7 +967,6 @@ void RiaGuiApplication::createMainWindow() m_mainWindow->setWindowTitle( "ResInsight " + platform ); m_mainWindow->setDefaultWindowSize(); m_mainWindow->setDefaultToolbarVisibility(); - m_mainWindow->storeDefaultDockWidgetVisibilitiesIfRequired(); m_mainWindow->loadWinGeoAndDockToolBarLayout(); m_mainWindow->showWindow(); } @@ -996,18 +994,12 @@ void RiaGuiApplication::createMainPlotWindow() //-------------------------------------------------------------------------------------------------- RiuPlotMainWindow* RiaGuiApplication::getOrCreateAndShowMainPlotWindow() { - bool triggerReloadOfDockWidgetVisibilities = false; - if ( !m_mainPlotWindow ) { createMainPlotWindow(); m_mainPlotWindow->initializeGuiNewProjectLoaded(); loadAndUpdatePlotData(); } - else - { - triggerReloadOfDockWidgetVisibilities = !m_mainPlotWindow->isVisible(); - } if ( m_mainPlotWindow->isMinimized() ) { @@ -1022,11 +1014,6 @@ RiuPlotMainWindow* RiaGuiApplication::getOrCreateAndShowMainPlotWindow() m_mainPlotWindow->raise(); m_mainPlotWindow->activateWindow(); - if ( triggerReloadOfDockWidgetVisibilities ) - { - m_mainPlotWindow->restoreDockWidgetVisibilities(); - } - return m_mainPlotWindow.get(); } @@ -1252,8 +1239,6 @@ void RiaGuiApplication::onProjectOpened() m_mainPlotWindow->show(); m_mainPlotWindow->raise(); } - - m_mainPlotWindow->restoreDockWidgetVisibilities(); } else if ( mainPlotWindow() ) { @@ -1640,8 +1625,6 @@ void RiaGuiApplication::runMultiCaseSnapshots( const QString& templateProj { if ( !m_mainWindow ) return; - m_mainWindow->hideAllDockWidgets(); - const size_t numGridFiles = gridFileNames.size(); for ( size_t i = 0; i < numGridFiles; i++ ) { @@ -1656,8 +1639,6 @@ void RiaGuiApplication::runMultiCaseSnapshots( const QString& templateProj RicSnapshotAllViewsToFileFeature::exportSnapshotOfViewsIntoFolder( snapshotFolderName ); } } - - m_mainWindow->loadWinGeoAndDockToolBarLayout(); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/Application/Tools/RiaRegressionTestRunner.cpp b/ApplicationLibCode/Application/Tools/RiaRegressionTestRunner.cpp index f5285f52f4..0739248025 100644 --- a/ApplicationLibCode/Application/Tools/RiaRegressionTestRunner.cpp +++ b/ApplicationLibCode/Application/Tools/RiaRegressionTestRunner.cpp @@ -657,7 +657,6 @@ void RiaRegressionTestRunner::executeRegressionTests( const QString& regressionT RiuMainWindow* mainWnd = RiuMainWindow::instance(); if ( mainWnd ) { - mainWnd->hideAllDockWidgets(); mainWnd->statusBar()->close(); mainWnd->setDefaultWindowSize(); @@ -667,8 +666,6 @@ void RiaRegressionTestRunner::executeRegressionTests( const QString& regressionT m_rootPath = regressionTestPath; m_testFilter = testFilter; runRegressionTest(); - - mainWnd->loadWinGeoAndDockToolBarLayout(); } } diff --git a/ApplicationLibCode/CommandFileInterface/RicfExportSnapshots.cpp b/ApplicationLibCode/CommandFileInterface/RicfExportSnapshots.cpp index 137dab6268..30395974b2 100644 --- a/ApplicationLibCode/CommandFileInterface/RicfExportSnapshots.cpp +++ b/ApplicationLibCode/CommandFileInterface/RicfExportSnapshots.cpp @@ -82,7 +82,6 @@ caf::PdmScriptResponse RicfExportSnapshots::execute() RiuMainWindow* mainWnd = RiuMainWindow::instance(); CVF_ASSERT( mainWnd ); - mainWnd->hideAllDockWidgets(); RiaGuiApplication::instance()->processEvents(); QString absolutePathToSnapshotDir = @@ -134,7 +133,6 @@ caf::PdmScriptResponse RicfExportSnapshots::execute() fileSuffix ); } - mainWnd->loadWinGeoAndDockToolBarLayout(); RiaGuiApplication::instance()->processEvents(); return caf::PdmScriptResponse(); diff --git a/ApplicationLibCode/Commands/ApplicationCommands/CMakeLists_files.cmake b/ApplicationLibCode/Commands/ApplicationCommands/CMakeLists_files.cmake index 3be6c63f93..aed4c8023a 100644 --- a/ApplicationLibCode/Commands/ApplicationCommands/CMakeLists_files.cmake +++ b/ApplicationLibCode/Commands/ApplicationCommands/CMakeLists_files.cmake @@ -15,8 +15,6 @@ set(SOURCE_GROUP_HEADER_FILES ${CMAKE_CURRENT_LIST_DIR}/RicLaunchRegressionTestsFeature.h ${CMAKE_CURRENT_LIST_DIR}/RicRunCommandFileFeature.h ${CMAKE_CURRENT_LIST_DIR}/RicShowMemoryCleanupDialogFeature.h - ${CMAKE_CURRENT_LIST_DIR}/RicDefaultDockConfigEclipseFeature.h - ${CMAKE_CURRENT_LIST_DIR}/RicDefaultDockConfigGeoMechFeature.h ${CMAKE_CURRENT_LIST_DIR}/RicExportObjectAndFieldKeywordsFeature.h ${CMAKE_CURRENT_LIST_DIR}/RicSaveProjectNoGlobalPathsFeature.h ${CMAKE_CURRENT_LIST_DIR}/RicShowClassNamesFeature.h @@ -40,8 +38,6 @@ set(SOURCE_GROUP_SOURCE_FILES ${CMAKE_CURRENT_LIST_DIR}/RicLaunchRegressionTestsFeature.cpp ${CMAKE_CURRENT_LIST_DIR}/RicRunCommandFileFeature.cpp ${CMAKE_CURRENT_LIST_DIR}/RicShowMemoryCleanupDialogFeature.cpp - ${CMAKE_CURRENT_LIST_DIR}/RicDefaultDockConfigEclipseFeature.cpp - ${CMAKE_CURRENT_LIST_DIR}/RicDefaultDockConfigGeoMechFeature.cpp ${CMAKE_CURRENT_LIST_DIR}/RicExportObjectAndFieldKeywordsFeature.cpp ${CMAKE_CURRENT_LIST_DIR}/RicSaveProjectNoGlobalPathsFeature.cpp ${CMAKE_CURRENT_LIST_DIR}/RicShowClassNamesFeature.cpp diff --git a/ApplicationLibCode/Commands/ApplicationCommands/RicDefaultDockConfigEclipseFeature.cpp b/ApplicationLibCode/Commands/ApplicationCommands/RicDefaultDockConfigEclipseFeature.cpp deleted file mode 100644 index edc5122cf8..0000000000 --- a/ApplicationLibCode/Commands/ApplicationCommands/RicDefaultDockConfigEclipseFeature.cpp +++ /dev/null @@ -1,54 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// -// Copyright (C) 2019- Equinor ASA -// -// ResInsight is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY -// WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. -// -// See the GNU General Public License at -// for more details. -// -///////////////////////////////////////////////////////////////////////////////// - -#include "RicDefaultDockConfigEclipseFeature.h" - -#include "RiuDockWidgetTools.h" - -#include - -CAF_CMD_SOURCE_INIT( RicDefaultDockConfigEclipseFeature, "RicDefaultDockConfigEclipseFeature" ); - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -bool RicDefaultDockConfigEclipseFeature::isCommandEnabled() -{ - return true; -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RicDefaultDockConfigEclipseFeature::onActionTriggered( bool isChecked ) -{ - RiuDockWidgetTools::setVisibleDockingWindowsForEclipse(); -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RicDefaultDockConfigEclipseFeature::setupActionLook( QAction* actionToSetup ) -{ - QString menuText = "Default Window Visibility"; -#ifdef USE_ODB_API - menuText += " (Eclipse)"; -#endif - - actionToSetup->setText( menuText ); -} diff --git a/ApplicationLibCode/Commands/ApplicationCommands/RicDefaultDockConfigEclipseFeature.h b/ApplicationLibCode/Commands/ApplicationCommands/RicDefaultDockConfigEclipseFeature.h deleted file mode 100644 index fdf62764ce..0000000000 --- a/ApplicationLibCode/Commands/ApplicationCommands/RicDefaultDockConfigEclipseFeature.h +++ /dev/null @@ -1,34 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// -// Copyright (C) 2019- Equinor ASA -// -// ResInsight is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY -// WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. -// -// See the GNU General Public License at -// for more details. -// -///////////////////////////////////////////////////////////////////////////////// - -#pragma once - -#include "cafCmdFeature.h" - -//================================================================================================== -/// -//================================================================================================== -class RicDefaultDockConfigEclipseFeature : public caf::CmdFeature -{ - CAF_CMD_HEADER_INIT; - -protected: - bool isCommandEnabled() override; - void onActionTriggered( bool isChecked ) override; - void setupActionLook( QAction* actionToSetup ) override; -}; diff --git a/ApplicationLibCode/Commands/ApplicationCommands/RicDefaultDockConfigGeoMechFeature.cpp b/ApplicationLibCode/Commands/ApplicationCommands/RicDefaultDockConfigGeoMechFeature.cpp deleted file mode 100644 index f134e9cf55..0000000000 --- a/ApplicationLibCode/Commands/ApplicationCommands/RicDefaultDockConfigGeoMechFeature.cpp +++ /dev/null @@ -1,49 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// -// Copyright (C) 2019- Equinor ASA -// -// ResInsight is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY -// WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. -// -// See the GNU General Public License at -// for more details. -// -///////////////////////////////////////////////////////////////////////////////// - -#include "RicDefaultDockConfigGeoMechFeature.h" - -#include "RiuDockWidgetTools.h" - -#include - -CAF_CMD_SOURCE_INIT( RicDefaultDockConfigGeoMechFeature, "RicDefaultDockConfigGeoMechFeature" ); - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -bool RicDefaultDockConfigGeoMechFeature::isCommandEnabled() -{ - return true; -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RicDefaultDockConfigGeoMechFeature::onActionTriggered( bool isChecked ) -{ - RiuDockWidgetTools::setVisibleDockingWindowsForGeoMech(); -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RicDefaultDockConfigGeoMechFeature::setupActionLook( QAction* actionToSetup ) -{ - actionToSetup->setText( "Default Window Visibility (Geo Mech)" ); -} diff --git a/ApplicationLibCode/Commands/ApplicationCommands/RicDefaultDockConfigGeoMechFeature.h b/ApplicationLibCode/Commands/ApplicationCommands/RicDefaultDockConfigGeoMechFeature.h deleted file mode 100644 index afab0a0992..0000000000 --- a/ApplicationLibCode/Commands/ApplicationCommands/RicDefaultDockConfigGeoMechFeature.h +++ /dev/null @@ -1,34 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// -// Copyright (C) 2019- Equinor ASA -// -// ResInsight is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY -// WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. -// -// See the GNU General Public License at -// for more details. -// -///////////////////////////////////////////////////////////////////////////////// - -#pragma once - -#include "cafCmdFeature.h" - -//================================================================================================== -/// -//================================================================================================== -class RicDefaultDockConfigGeoMechFeature : public caf::CmdFeature -{ - CAF_CMD_HEADER_INIT; - -protected: - bool isCommandEnabled() override; - void onActionTriggered( bool isChecked ) override; - void setupActionLook( QAction* actionToSetup ) override; -}; diff --git a/ApplicationLibCode/Commands/ApplicationCommands/RicShowMainWindowFeature.cpp b/ApplicationLibCode/Commands/ApplicationCommands/RicShowMainWindowFeature.cpp index 5defd8c9ac..28f6176390 100644 --- a/ApplicationLibCode/Commands/ApplicationCommands/RicShowMainWindowFeature.cpp +++ b/ApplicationLibCode/Commands/ApplicationCommands/RicShowMainWindowFeature.cpp @@ -46,8 +46,6 @@ void RicShowMainWindowFeature::showMainWindow() } mainWnd->raise(); - - mainWnd->restoreDockWidgetVisibilities(); } else { diff --git a/ApplicationLibCode/UserInterface/RiuDockWidgetTools.cpp b/ApplicationLibCode/UserInterface/RiuDockWidgetTools.cpp index f8c8009759..cb40ce9f9f 100644 --- a/ApplicationLibCode/UserInterface/RiuDockWidgetTools.cpp +++ b/ApplicationLibCode/UserInterface/RiuDockWidgetTools.cpp @@ -198,50 +198,6 @@ QString RiuDockWidgetTools::messagesName() return "dockMessages"; } -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -QMap RiuDockWidgetTools::widgetVisibilitiesForEclipse() -{ - QMap widgetVisibility; - - widgetVisibility[RiuDockWidgetTools::projectTreeName()] = true; - widgetVisibility[RiuDockWidgetTools::propertyEditorName()] = true; - widgetVisibility[RiuDockWidgetTools::resultInfoName()] = true; - widgetVisibility[RiuDockWidgetTools::processMonitorName()] = true; - widgetVisibility[RiuDockWidgetTools::resultPlotName()] = true; - widgetVisibility[RiuDockWidgetTools::relPermPlotName()] = true; - widgetVisibility[RiuDockWidgetTools::pvtPlotName()] = true; - widgetVisibility[RiuDockWidgetTools::messagesName()] = true; - widgetVisibility[RiuDockWidgetTools::undoStackName()] = false; - - widgetVisibility[RiuDockWidgetTools::mohrsCirclePlotName()] = false; - - return widgetVisibility; -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -QMap RiuDockWidgetTools::widgetVisibilitiesForGeoMech() -{ - QMap widgetVisibility; - - widgetVisibility[RiuDockWidgetTools::projectTreeName()] = true; - widgetVisibility[RiuDockWidgetTools::propertyEditorName()] = true; - widgetVisibility[RiuDockWidgetTools::resultInfoName()] = true; - widgetVisibility[RiuDockWidgetTools::processMonitorName()] = true; - widgetVisibility[RiuDockWidgetTools::resultPlotName()] = true; - widgetVisibility[RiuDockWidgetTools::relPermPlotName()] = false; - widgetVisibility[RiuDockWidgetTools::pvtPlotName()] = false; - widgetVisibility[RiuDockWidgetTools::messagesName()] = true; - widgetVisibility[RiuDockWidgetTools::undoStackName()] = false; - - widgetVisibility[RiuDockWidgetTools::mohrsCirclePlotName()] = true; - - return widgetVisibility; -} - //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -267,138 +223,12 @@ QAction* RiuDockWidgetTools::toggleActionForWidget( const ads::CDockManager* doc //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RiuDockWidgetTools::setVisibleDockingWindowsForEclipse() +void RiuDockWidgetTools::showDockWidget( const ads::CDockManager* dockManager, const QString& dockWidgetName ) { - if ( !RiuMainWindow::instance() ) return; - - RiuMainWindow* mainWindow = RiuMainWindow::instance(); - auto widgetVisibilities = widgetVisibilitiesForEclipse(); - - applyDockWidgetVisibilities( mainWindow->dockManager(), widgetVisibilities ); -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RiuDockWidgetTools::setVisibleDockingWindowsForGeoMech() -{ - if ( !RiuMainWindow::instance() ) return; - - RiuMainWindow* mainWindow = RiuMainWindow::instance(); - auto widgetVisibilities = widgetVisibilitiesForGeoMech(); - - applyDockWidgetVisibilities( mainWindow->dockManager(), widgetVisibilities ); -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RiuDockWidgetTools::setDockWidgetVisibility( const ads::CDockManager* dockManager, - const QString& dockWidgetName, - bool isVisible ) -{ - ads::CDockWidget* dockWidget = findDockWidget( dockManager, dockWidgetName ); - if ( dockWidget ) + auto dw = findDockWidget( dockManager, dockWidgetName ); + if ( dw ) { - dockWidget->setVisible( isVisible ); - } -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -QVariant RiuDockWidgetTools::dockWidgetsVisibility( const ads::CDockManager* dockManager ) -{ - QMap widgetVisibility; - - auto dockWidgets = dockManager->dockWidgetsMap(); - - for ( auto dock : dockWidgets ) - { - if ( dock ) - { - bool isVisible = dock->isVisible(); - widgetVisibility[dock->objectName()] = isVisible; - } - } - - return QVariant( widgetVisibility ); -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -QVariant RiuDockWidgetTools::defaultDockWidgetVisibilities() -{ - return QVariant( widgetVisibilitiesForEclipse() ); -} - -//-------------------------------------------------------------------------------------------------- -/// Qwt widgets in non-visible dock widgets (tabbed dock windows) will on some systems enter an -/// eternal update loop. This is seen on both Windows and Linux. -/// The workaround is to hide all dock widgets, and then set visible the docking windows seen to -/// trigger the unwanted behavior -/// -/// https://github.com/OPM/ResInsight/issues/6743 -/// https://github.com/OPM/ResInsight/issues/6627 -//-------------------------------------------------------------------------------------------------- -void RiuDockWidgetTools::workaroundForQwtDockWidgets() -{ - if ( !RiuMainWindow::instance() ) return; - - RiuMainWindow* mainWindow = RiuMainWindow::instance(); - - auto dockWidgets = mainWindow->dockManager()->dockWidgetsMap(); - - for ( auto dock : dockWidgets ) - { - if ( dock ) dock->setVisible( false ); - } - QApplication::processEvents(); - - { - auto dock = mainWindow->dockManager()->findDockWidget( relPermPlotName() ); - if ( dock ) - { - dock->setVisible( true ); - } - } - - { - auto dock = mainWindow->dockManager()->findDockWidget( pvtPlotName() ); - if ( dock ) - { - dock->setVisible( true ); - } - } - - QApplication::processEvents(); - - mainWindow->loadWinGeoAndDockToolBarLayout(); - mainWindow->restoreDockWidgetVisibilities(); -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RiuDockWidgetTools::applyDockWidgetVisibilities( const ads::CDockManager* dockManager, - const QMap& widgetVisibilities ) -{ - auto dockWidgets = dockManager->dockWidgetsMap(); - - for ( auto dock : dockWidgets ) - { - if ( dock ) - { - bool isVisible = true; - - auto widgetVisibility = widgetVisibilities.find( dock->objectName() ); - if ( widgetVisibility != widgetVisibilities.end() ) - { - isVisible = widgetVisibility.value().toBool(); - } - - dock->setVisible( isVisible ); - } + dw->show(); + dw->raise(); } } diff --git a/ApplicationLibCode/UserInterface/RiuDockWidgetTools.h b/ApplicationLibCode/UserInterface/RiuDockWidgetTools.h index b0da92517d..412f0468b8 100644 --- a/ApplicationLibCode/UserInterface/RiuDockWidgetTools.h +++ b/ApplicationLibCode/UserInterface/RiuDockWidgetTools.h @@ -68,22 +68,7 @@ public: static QAction* toggleActionForWidget( const ads::CDockManager* dockManager, const QString& dockWidgetName ); - static QVariant dockWidgetsVisibility( const ads::CDockManager* dockManager ); - static QVariant defaultDockWidgetVisibilities(); + static ads::CDockWidget* findDockWidget( const ads::CDockManager* dockManager, const QString& dockWidgetName ); - static void workaroundForQwtDockWidgets(); - - static void setVisibleDockingWindowsForEclipse(); - static void setVisibleDockingWindowsForGeoMech(); - - static void - setDockWidgetVisibility( const ads::CDockManager* dockManager, const QString& dockWidgetName, bool isVisible ); - static void applyDockWidgetVisibilities( const ads::CDockManager* dockManager, - const QMap& visibilityMap ); - - static ads::CDockWidget* findDockWidget( const ads::CDockManager*, const QString& dockWidgetName ); - -private: - static QMap widgetVisibilitiesForEclipse(); - static QMap widgetVisibilitiesForGeoMech(); + static void showDockWidget( const ads::CDockManager* dockManager, const QString& dockWidgetName ); }; diff --git a/ApplicationLibCode/UserInterface/RiuMainWindow.cpp b/ApplicationLibCode/UserInterface/RiuMainWindow.cpp index c2cb5e5cb1..cf3d65e755 100644 --- a/ApplicationLibCode/UserInterface/RiuMainWindow.cpp +++ b/ApplicationLibCode/UserInterface/RiuMainWindow.cpp @@ -163,11 +163,6 @@ RiuMainWindow::RiuMainWindow() m_memoryRefreshTimer = new QTimer( this ); connect( m_memoryRefreshTimer, SIGNAL( timeout() ), this, SLOT( updateMemoryUsage() ) ); m_memoryRefreshTimer->start( 1000 ); - - auto dockTimer = new QTimer( this ); - dockTimer->setSingleShot( true ); - connect( dockTimer, SIGNAL( timeout() ), this, SLOT( slotWorkaroundForQwtDockWidgets() ) ); - dockTimer->start( 1000 ); } //-------------------------------------------------------------------------------------------------- @@ -316,7 +311,6 @@ void RiuMainWindow::closeEvent( QCloseEvent* event ) } } this->saveWinGeoAndDockToolBarLayout(); - this->hideAllDockWidgets(); QMainWindow::closeEvent( event ); } @@ -754,7 +748,7 @@ void RiuMainWindow::createDockPanels() for ( int i = 0; i < nTreeViews; i++ ) { - ads::CDockWidget* dockWidget = new ads::CDockWidget( treeViewTitles[i], this ); + ads::CDockWidget* dockWidget = new ads::CDockWidget( treeViewTitles[i], dockManager() ); dockWidget->setObjectName( treeViewDockNames[i] ); caf::PdmUiTreeView* projectTree = projectTreeView( i ); @@ -795,14 +789,14 @@ void RiuMainWindow::createDockPanels() // undo/redo view if ( m_undoView && RiaPreferences::current()->useUndoRedo() ) { - ads::CDockWidget* dockWidget = new ads::CDockWidget( "Undo Stack", this ); + ads::CDockWidget* dockWidget = new ads::CDockWidget( "Undo Stack", dockManager() ); dockWidget->setObjectName( RiuDockWidgetTools::undoStackName() ); dockWidget->setWidget( m_undoView ); rightWidgets.push_back( dockWidget ); } { - ads::CDockWidget* dockWidget = new ads::CDockWidget( "Result Plot", this ); + ads::CDockWidget* dockWidget = new ads::CDockWidget( "Result Plot", dockManager() ); dockWidget->setObjectName( RiuDockWidgetTools::resultPlotName() ); m_resultQwtPlot = new RiuResultQwtPlot( dockWidget ); dockWidget->setWidget( m_resultQwtPlot ); @@ -816,7 +810,7 @@ void RiuMainWindow::createDockPanels() dockManager()->centralWidget()->dockAreaWidget() ); { - ads::CDockWidget* dockWidget = new ads::CDockWidget( "Property Editor", this ); + ads::CDockWidget* dockWidget = new ads::CDockWidget( "Property Editor", dockManager() ); dockWidget->setObjectName( RiuDockWidgetTools::propertyEditorName() ); m_pdmUiPropertyView = new caf::PdmUiPropertyView( dockWidget ); @@ -826,7 +820,7 @@ void RiuMainWindow::createDockPanels() #ifdef USE_ODB_API { - ads::CDockWidget* dockWidget = new ads::CDockWidget( "Mohr's Circle Plot", this ); + ads::CDockWidget* dockWidget = new ads::CDockWidget( "Mohr's Circle Plot", dockManager() ); dockWidget->setObjectName( RiuDockWidgetTools::mohrsCirclePlotName() ); m_mohrsCirclePlot = new RiuMohrsCirclePlot( dockWidget ); dockWidget->setWidget( m_mohrsCirclePlot ); @@ -835,7 +829,7 @@ void RiuMainWindow::createDockPanels() #endif { - ads::CDockWidget* dockWidget = new ads::CDockWidget( "Relative Permeability Plot", this ); + ads::CDockWidget* dockWidget = new ads::CDockWidget( "Relative Permeability Plot", dockManager() ); dockWidget->setObjectName( RiuDockWidgetTools::relPermPlotName() ); m_relPermPlotPanel = new RiuRelativePermeabilityPlotPanel( dockWidget ); dockWidget->setWidget( m_relPermPlotPanel ); @@ -843,7 +837,7 @@ void RiuMainWindow::createDockPanels() } { - ads::CDockWidget* dockWidget = new ads::CDockWidget( "PVT Plot", this ); + ads::CDockWidget* dockWidget = new ads::CDockWidget( "PVT Plot", dockManager() ); dockWidget->setObjectName( RiuDockWidgetTools::pvtPlotName() ); m_pvtPlotPanel = new RiuPvtPlotPanel( dockWidget ); dockWidget->setWidget( m_pvtPlotPanel ); @@ -852,7 +846,7 @@ void RiuMainWindow::createDockPanels() // result info { - ads::CDockWidget* dockWidget = new ads::CDockWidget( "Result Info", this ); + ads::CDockWidget* dockWidget = new ads::CDockWidget( "Result Info", dockManager() ); dockWidget->setObjectName( RiuDockWidgetTools::resultInfoName() ); m_resultInfoPanel = new RiuResultInfoPanel( dockWidget ); dockWidget->setWidget( m_resultInfoPanel ); @@ -862,7 +856,7 @@ void RiuMainWindow::createDockPanels() ads::CDockAreaWidget* procAndMsgTabs = nullptr; // process monitor { - ads::CDockWidget* dockWidget = new ads::CDockWidget( "Process Monitor", this ); + ads::CDockWidget* dockWidget = new ads::CDockWidget( "Process Monitor", dockManager() ); dockWidget->setObjectName( RiuDockWidgetTools::processMonitorName() ); m_processMonitor = new RiuProcessMonitor( dockWidget ); dockWidget->setWidget( m_processMonitor ); @@ -870,7 +864,7 @@ void RiuMainWindow::createDockPanels() } { - ads::CDockWidget* dockWidget = new ads::CDockWidget( "Messages", this ); + ads::CDockWidget* dockWidget = new ads::CDockWidget( "Messages", dockManager() ); dockWidget->setObjectName( RiuDockWidgetTools::messagesName() ); m_messagePanel = new RiuMessagePanel( dockWidget ); dockWidget->setWidget( m_messagePanel ); @@ -886,8 +880,6 @@ void RiuMainWindow::createDockPanels() for ( ads::CDockWidget* dock : widgets ) { connect( dock->toggleViewAction(), SIGNAL( triggered() ), SLOT( slotDockWidgetToggleViewActionTriggered() ) ); - dock->setVisible( true ); - dock->raise(); } } @@ -1761,7 +1753,7 @@ void RiuMainWindow::updateMemoryUsage() //-------------------------------------------------------------------------------------------------- void RiuMainWindow::showProcessMonitorDockPanel() { - RiuDockWidgetTools::setDockWidgetVisibility( this->dockManager(), RiuDockWidgetTools::processMonitorName(), true ); + RiuDockWidgetTools::showDockWidget( this->dockManager(), RiuDockWidgetTools::processMonitorName() ); } //-------------------------------------------------------------------------------------------------- @@ -1955,14 +1947,6 @@ void RiuMainWindow::customMenuRequested( const QPoint& pos ) } } -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RiuMainWindow::slotWorkaroundForQwtDockWidgets() -{ - RiuDockWidgetTools::workaroundForQwtDockWidgets(); -} - //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/UserInterface/RiuMainWindow.h b/ApplicationLibCode/UserInterface/RiuMainWindow.h index 9de3fcb70d..191dab32c8 100644 --- a/ApplicationLibCode/UserInterface/RiuMainWindow.h +++ b/ApplicationLibCode/UserInterface/RiuMainWindow.h @@ -245,8 +245,6 @@ private slots: void selectedObjectsChanged(); void customMenuRequested( const QPoint& pos ); - void slotWorkaroundForQwtDockWidgets(); - private: void selectViewInProjectTreePreservingSubItemSelection( const Rim3dView* previousActiveReservoirView, Rim3dView* activatedView ); diff --git a/ApplicationLibCode/UserInterface/RiuMainWindowBase.cpp b/ApplicationLibCode/UserInterface/RiuMainWindowBase.cpp index 057530167a..f2b9767248 100644 --- a/ApplicationLibCode/UserInterface/RiuMainWindowBase.cpp +++ b/ApplicationLibCode/UserInterface/RiuMainWindowBase.cpp @@ -158,8 +158,6 @@ void RiuMainWindowBase::loadWinGeoAndDockToolBarLayout() settings.beginGroup( registryFolderName() ); m_dockManager->loadPerspectives( settings ); - - restoreDockWidgetVisibilities(); } //-------------------------------------------------------------------------------------------------- @@ -189,44 +187,6 @@ void RiuMainWindowBase::saveWinGeoAndDockToolBarLayout() settings.setValue( QString( "%1/isMaximized" ).arg( registryFolderName() ), isMaximized() ); settings.setValue( QString( "%1/dockLayout" ).arg( registryFolderName() ), m_dockManager->saveState( 1 ) ); - - if ( this->isVisible() ) - { - QVariant dockWindowVisibilities = RiuDockWidgetTools::dockWidgetsVisibility( this->dockManager() ); - QString key = mainWindowDockWidgetSettingsKey( registryFolderName() ); - - settings.setValue( key, dockWindowVisibilities ); - } -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RiuMainWindowBase::storeDefaultDockWidgetVisibilitiesIfRequired() -{ - QSettings settings; - - QString key = mainWindowDockWidgetSettingsKey( registryFolderName() ); - - if ( !settings.contains( key ) ) - { - QVariant dockWidgetVisibilities = RiuDockWidgetTools::defaultDockWidgetVisibilities(); - settings.setValue( key, dockWidgetVisibilities ); - } -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RiuMainWindowBase::restoreDockWidgetVisibilities() -{ - // Company and appname set through QCoreApplication - QSettings settings; - - QString key = mainWindowDockWidgetSettingsKey( registryFolderName() ); - - QVariant dockWindowVisibilities = settings.value( key ); - RiuDockWidgetTools::applyDockWidgetVisibilities( this->dockManager(), dockWindowVisibilities.toMap() ); } //-------------------------------------------------------------------------------------------------- @@ -246,20 +206,6 @@ void RiuMainWindowBase::showWindow() } } -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RiuMainWindowBase::hideAllDockWidgets() -{ - for ( auto dock : dockManager()->dockWidgetsMap() ) - { - if ( dock ) - { - dock->hide(); - } - } -} - //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/UserInterface/RiuMainWindowBase.h b/ApplicationLibCode/UserInterface/RiuMainWindowBase.h index 1c4cfa5800..5f76b7aaaf 100644 --- a/ApplicationLibCode/UserInterface/RiuMainWindowBase.h +++ b/ApplicationLibCode/UserInterface/RiuMainWindowBase.h @@ -69,12 +69,8 @@ public: RimMdiWindowGeometry windowGeometryForViewer( QWidget* viewer ); void loadWinGeoAndDockToolBarLayout(); void saveWinGeoAndDockToolBarLayout(); - void storeDefaultDockWidgetVisibilitiesIfRequired(); - void restoreDockWidgetVisibilities(); void showWindow(); - void hideAllDockWidgets(); - std::vector projectTreeViews(); caf::PdmUiTreeView* projectTreeView( int treeId ); caf::PdmUiTreeView* getTreeViewWithItem( const caf::PdmUiItem* item ); diff --git a/ApplicationLibCode/UserInterface/RiuPlotMainWindow.cpp b/ApplicationLibCode/UserInterface/RiuPlotMainWindow.cpp index cf7efc51f8..9373757a29 100644 --- a/ApplicationLibCode/UserInterface/RiuPlotMainWindow.cpp +++ b/ApplicationLibCode/UserInterface/RiuPlotMainWindow.cpp @@ -249,7 +249,6 @@ void RiuPlotMainWindow::closeEvent( QCloseEvent* event ) } } this->saveWinGeoAndDockToolBarLayout(); - this->hideAllDockWidgets(); QMainWindow::closeEvent( event ); } @@ -503,7 +502,7 @@ void RiuPlotMainWindow::createDockPanels() // the project trees for ( int i = 0; i < nTreeViews; i++ ) { - ads::CDockWidget* dockWidget = new ads::CDockWidget( treeViewTitles[i], this ); + ads::CDockWidget* dockWidget = new ads::CDockWidget( treeViewTitles[i], dockManager() ); dockWidget->setObjectName( treeViewDockNames[i] ); caf::PdmUiTreeView* projectTree = projectTreeView( i ); @@ -543,7 +542,7 @@ void RiuPlotMainWindow::createDockPanels() // the plot manager { - ads::CDockWidget* dockWidget = new ads::CDockWidget( "Plot Manager", this ); + ads::CDockWidget* dockWidget = new ads::CDockWidget( "Plot Manager", dockManager() ); dockWidget->setObjectName( RiuDockWidgetTools::summaryPlotManagerName() ); m_summaryPlotManagerView = std::make_unique( dockWidget ); @@ -561,7 +560,7 @@ void RiuPlotMainWindow::createDockPanels() // the undo stack if ( m_undoView && RiaPreferences::current()->useUndoRedo() ) { - ads::CDockWidget* dockWidget = new ads::CDockWidget( "Undo Stack", this ); + ads::CDockWidget* dockWidget = new ads::CDockWidget( "Undo Stack", dockManager() ); dockWidget->setObjectName( RiuDockWidgetTools::plotMainWindowUndoStackName() ); dockWidget->setWidget( m_undoView ); rightWidgets.push_back( dockWidget ); @@ -575,7 +574,7 @@ void RiuPlotMainWindow::createDockPanels() // the property editor { - ads::CDockWidget* dockWidget = new ads::CDockWidget( "Property Editor", this ); + ads::CDockWidget* dockWidget = new ads::CDockWidget( "Property Editor", dockManager() ); dockWidget->setObjectName( RiuDockWidgetTools::plotMainWindowPropertyEditorName() ); m_pdmUiPropertyView = std::make_unique( dockWidget ); @@ -585,7 +584,7 @@ void RiuPlotMainWindow::createDockPanels() // the log message view { - ads::CDockWidget* dockWidget = new ads::CDockWidget( "Messages", this ); + ads::CDockWidget* dockWidget = new ads::CDockWidget( "Messages", dockManager() ); dockWidget->setObjectName( RiuDockWidgetTools::plotMainWindowMessagesName() ); m_messagePanel = new RiuMessagePanel( dockWidget ); dockWidget->setWidget( m_messagePanel ); @@ -602,8 +601,6 @@ void RiuPlotMainWindow::createDockPanels() for ( ads::CDockWidget* dock : widgets ) { connect( dock->toggleViewAction(), SIGNAL( triggered() ), SLOT( slotDockWidgetToggleViewActionTriggered() ) ); - dock->setVisible( true ); - dock->raise(); } } From 69f7c23ce4fd28cf5ce733c35de360238d623d5a Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Tue, 9 Aug 2022 15:15:48 +0200 Subject: [PATCH 042/129] Make sure curve names and plot titles are updated using Plot Editor --- .../Commands/SummaryPlotCommands/RicSummaryPlotEditorUi.cpp | 2 +- ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlot.cpp | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/ApplicationLibCode/Commands/SummaryPlotCommands/RicSummaryPlotEditorUi.cpp b/ApplicationLibCode/Commands/SummaryPlotCommands/RicSummaryPlotEditorUi.cpp index 71f903c9d3..ef3dc2cae4 100644 --- a/ApplicationLibCode/Commands/SummaryPlotCommands/RicSummaryPlotEditorUi.cpp +++ b/ApplicationLibCode/Commands/SummaryPlotCommands/RicSummaryPlotEditorUi.cpp @@ -702,8 +702,8 @@ void RicSummaryPlotEditorUi::updateTargetPlot() m_targetPlot->loadDataAndUpdate(); - m_targetPlot->updatePlotTitle(); m_targetPlot->updateConnectedEditors(); + m_targetPlot->curvesChanged.send(); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlot.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlot.cpp index 11bd74d0c8..33edc7c402 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlot.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlot.cpp @@ -2708,6 +2708,8 @@ bool RimSummaryPlot::handleGlobalKeyEvent( QKeyEvent* keyEvent ) //-------------------------------------------------------------------------------------------------- void RimSummaryPlot::onCurveCollectionChanged( const SignalEmitter* emitter ) { + curvesChanged.send(); + updateStackedCurveData(); scheduleReplotIfVisible(); From 3fe6022c33d811d6132a5123b6878c24f333b37c Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Tue, 9 Aug 2022 16:00:21 +0200 Subject: [PATCH 043/129] Plot Manager: Activate individual sub plots per data source --- .../ProjectDataModel/Summary/RimSummaryPlotManager.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlotManager.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlotManager.cpp index 3b263fe4e5..fdc015972b 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlotManager.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlotManager.cpp @@ -399,6 +399,8 @@ void RimSummaryPlotManager::createNewPlot() if ( m_individualPlotPerObject ) groping = RicSummaryPlotBuilder::RicGraphCurveGrouping::CURVES_FOR_OBJECT; plotBuilder.setGrouping( groping ); + plotBuilder.setIndividualPlotPerDataSource( m_individualPlotPerDataSource ); + auto plots = plotBuilder.createPlots(); if ( m_createMultiPlot ) { From d3330cff90306302c6dd4d75d8860e7b40928c60 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Wed, 10 Aug 2022 13:32:13 +0200 Subject: [PATCH 044/129] Avoid setting summaryCaseX, as this will cause issues for RimSummaryPlotNameHelper In summary plots, we only use summary case for Y-axis --- .../ProjectDataModel/Summary/RimSummaryMultiPlot.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.cpp index f5b9f18074..9266c311d5 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.cpp @@ -1357,8 +1357,12 @@ void RimSummaryMultiPlot::appendSubPlotByStepping( int direction ) RimSummaryCase* newCase = m_sourceStepping()->stepCase( direction ); for ( auto curve : newPlot->allCurves( RimSummaryDataSourceStepping::Axis::Y_AXIS ) ) { - curve->setSummaryCaseX( newCase ); curve->setSummaryCaseY( newCase ); + + // NOTE: If summary cross plots should be handled here, we also need to call + // curve->setSummaryCaseX( newCase ); + // Setting summaryCaseX with a default uninitialized summary address causes issues for the summary name + // analyzer } } else if ( m_sourceStepping()->stepDimension() == RimSummaryDataSourceStepping::SourceSteppingDimension::ENSEMBLE ) From c10a5411b6cde27ce91383a3690716643fdf33df Mon Sep 17 00:00:00 2001 From: Kristian Bendiksen Date: Wed, 10 Aug 2022 13:52:30 +0200 Subject: [PATCH 045/129] #9093 MultiPlot: improve axis alignment by resizing scales --- .../UserInterface/RiuMultiPlotPage.cpp | 96 ++++++++++++++++++- .../UserInterface/RiuMultiPlotPage.h | 25 +++-- .../UserInterface/RiuSummaryMultiPlotPage.cpp | 4 + .../UserInterface/RiuWellLogPlot.cpp | 1 + 4 files changed, 116 insertions(+), 10 deletions(-) diff --git a/ApplicationLibCode/UserInterface/RiuMultiPlotPage.cpp b/ApplicationLibCode/UserInterface/RiuMultiPlotPage.cpp index f286440254..186811e92f 100644 --- a/ApplicationLibCode/UserInterface/RiuMultiPlotPage.cpp +++ b/ApplicationLibCode/UserInterface/RiuMultiPlotPage.cpp @@ -49,10 +49,12 @@ #include "cvfAssert.h" +#include "qwt_axis.h" #include "qwt_legend.h" #include "qwt_plot_layout.h" #include "qwt_plot_renderer.h" #include "qwt_scale_draw.h" +#include "qwt_scale_widget.h" #include #include @@ -579,6 +581,7 @@ void RiuMultiPlotPage::performUpdate( RiaDefines::MultiPlotPageUpdateType whatTo reinsertPlotWidgets(); alignCanvasTops(); + alignAxes(); return; } @@ -586,7 +589,9 @@ void RiuMultiPlotPage::performUpdate( RiaDefines::MultiPlotPageUpdateType whatTo { refreshLegends(); alignCanvasTops(); + alignAxes(); } + if ( ( whatToUpdate & RiaDefines::MultiPlotPageUpdateType::TITLE ) == RiaDefines::MultiPlotPageUpdateType::TITLE ) { updateSubTitles(); @@ -624,6 +629,8 @@ void RiuMultiPlotPage::reinsertPlotWidgets() QList> legends = this->legendsForVisiblePlots(); QList> plotWidgets = this->visiblePlotWidgets(); + m_visibleIndexToPositionMapping.clear(); + if ( !plotWidgets.empty() ) { auto [rowCount, columnCount] = this->rowAndColumnCount( plotWidgets.size() ); @@ -636,7 +643,10 @@ void RiuMultiPlotPage::reinsertPlotWidgets() int colSpan = std::min( expectedColSpan, columnCount ); int rowSpan = plotWidgets[visibleIndex]->rowSpan(); - std::tie( row, column ) = findAvailableRowAndColumn( row, column, colSpan, columnCount ); + auto position = findAvailableRowAndColumn( row, column, colSpan, columnCount ); + std::tie( row, column ) = position; + + m_visibleIndexToPositionMapping[visibleIndex] = position; m_gridLayout->addWidget( subTitles[visibleIndex], 3 * row, column, 1, colSpan ); if ( legends[visibleIndex] ) @@ -928,3 +938,87 @@ void RiuMultiPlotPage::updateTitleFont() titleFont.setPixelSize( m_titleFontPixelSize ); m_plotTitle->setFont( titleFont ); } + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RiuMultiPlotPage::alignAxes() +{ + auto [rowCount, columnCount] = rowAndColumnCount( visiblePlotWidgets().size() ); + + auto matchRow = []( int row, int column, int targetRow ) { return row == targetRow; }; + + for ( int row = 0; row < rowCount; row++ ) + { + alignAxis( QwtAxisId( QwtAxis::Position::XTop, 0 ), row, matchRow ); + alignAxis( QwtAxisId( QwtAxis::Position::XBottom, 0 ), row, matchRow ); + } + + auto matchColumn = []( int row, int column, int targetColumn ) { return column == targetColumn; }; + + for ( int column = 0; column < columnCount; column++ ) + { + alignAxis( QwtAxisId( QwtAxis::Position::YLeft, 0 ), column, matchColumn ); + alignAxis( QwtAxisId( QwtAxis::Position::YRight, 0 ), column, matchColumn ); + } +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RiuMultiPlotPage::alignAxis( QwtAxisId axis, int targetRowOrColumn, std::function matchPosition ) +{ + auto rowAndColumnFromIdx = [this]( int idx ) { + auto hit = m_visibleIndexToPositionMapping.find( idx ); + CAF_ASSERT( hit != m_visibleIndexToPositionMapping.end() ); + return hit->second; + }; + + QList> plotWidgets = visiblePlotWidgets(); + + // Find the max extent of the "scale draws" for the given axis + double maxExtent = 0; + for ( int tIdx = 0; tIdx < plotWidgets.size(); ++tIdx ) + { + RiuPlotWidget* plotWidget = plotWidgets[tIdx]; + auto [row, column] = rowAndColumnFromIdx( tIdx ); + bool matchesRowOrColumn = matchPosition( row, column, targetRowOrColumn ); + if ( plotWidget && matchesRowOrColumn ) + { + RiuQwtPlotWidget* riuQwtPlotWidget = dynamic_cast( plotWidget ); + + if ( riuQwtPlotWidget ) + { + QwtPlot* p = riuQwtPlotWidget->qwtPlot(); + if ( p ) + { + QwtScaleWidget* scaleWidget = p->axisWidget( axis ); + QwtScaleDraw* sd = scaleWidget->scaleDraw(); + sd->setMinimumExtent( 0.0 ); + maxExtent = std::max( sd->extent( scaleWidget->font() ), maxExtent ); + } + } + } + } + + // Set minimum extent for all "scale draws" for the given axis. + for ( int tIdx = 0; tIdx < plotWidgets.size(); ++tIdx ) + { + RiuPlotWidget* plotWidget = plotWidgets[tIdx]; + auto [row, column] = rowAndColumnFromIdx( tIdx ); + bool matchesRowOrColumn = matchPosition( row, column, targetRowOrColumn ); + if ( plotWidget && matchesRowOrColumn ) + { + RiuQwtPlotWidget* riuQwtPlotWidget = dynamic_cast( plotWidget ); + if ( riuQwtPlotWidget ) + { + QwtPlot* p = riuQwtPlotWidget->qwtPlot(); + if ( p ) + { + QwtScaleWidget* scaleWidget = p->axisWidget( axis ); + scaleWidget->scaleDraw()->setMinimumExtent( maxExtent ); + } + } + } + } +} diff --git a/ApplicationLibCode/UserInterface/RiuMultiPlotPage.h b/ApplicationLibCode/UserInterface/RiuMultiPlotPage.h index 575bdb6f2b..2427bf340e 100644 --- a/ApplicationLibCode/UserInterface/RiuMultiPlotPage.h +++ b/ApplicationLibCode/UserInterface/RiuMultiPlotPage.h @@ -24,6 +24,8 @@ #include "cafPdmPointer.h" #include "cafSelectionChangedReceiver.h" +#include "qwt_axis_id.h" + #include #include #include @@ -31,6 +33,7 @@ #include #include +#include #include class RiaPlotWindowRedrawScheduler; @@ -105,6 +108,9 @@ protected: std::pair rowAndColumnCount( int plotWidgetCount ) const; + void alignAxes(); + void alignAxis( QwtAxisId axis, int row, std::function positionMatcher ); + void onSelectionManagerSelectionChanged( const std::set& changedSelectionLevels ) override; virtual bool showYAxis( int row, int column ) const; @@ -128,15 +134,16 @@ private slots: void onLegendUpdated(); protected: - QPointer m_layout; - QPointer m_plotLayout; - QPointer m_plotWidgetFrame; - QPointer m_gridLayout; - QPointer m_plotTitle; - QList> m_subTitles; - QList> m_legends; - QList> m_plotWidgets; - caf::PdmPointer m_plotDefinition; + QPointer m_layout; + QPointer m_plotLayout; + QPointer m_plotWidgetFrame; + QPointer m_gridLayout; + QPointer m_plotTitle; + QList> m_subTitles; + QList> m_legends; + QList> m_plotWidgets; + std::map> m_visibleIndexToPositionMapping; + caf::PdmPointer m_plotDefinition; int m_titleFontPixelSize; int m_subTitleFontPixelSize; diff --git a/ApplicationLibCode/UserInterface/RiuSummaryMultiPlotPage.cpp b/ApplicationLibCode/UserInterface/RiuSummaryMultiPlotPage.cpp index 72ff0aa121..528aa649ef 100644 --- a/ApplicationLibCode/UserInterface/RiuSummaryMultiPlotPage.cpp +++ b/ApplicationLibCode/UserInterface/RiuSummaryMultiPlotPage.cpp @@ -73,6 +73,8 @@ void RiuSummaryMultiPlotPage::reinsertPlotWidgets() QList> legends = this->legendsForVisiblePlots(); QList> plotWidgets = this->visiblePlotWidgets(); + m_visibleIndexToPositionMapping.clear(); + int visibleIndex = 0; int phIndex = 0; @@ -90,6 +92,8 @@ void RiuSummaryMultiPlotPage::reinsertPlotWidgets() continue; } + m_visibleIndexToPositionMapping[visibleIndex] = std::make_pair( row, col ); + auto plotWidget = plotWidgets[visibleIndex]; int expectedColSpan = plotWidget->colSpan(); int colSpan = std::min( expectedColSpan, cols - col ); diff --git a/ApplicationLibCode/UserInterface/RiuWellLogPlot.cpp b/ApplicationLibCode/UserInterface/RiuWellLogPlot.cpp index c24427b4ec..caf9ad6658 100644 --- a/ApplicationLibCode/UserInterface/RiuWellLogPlot.cpp +++ b/ApplicationLibCode/UserInterface/RiuWellLogPlot.cpp @@ -160,4 +160,5 @@ void RiuWellLogPlot::performUpdate( RiaDefines::MultiPlotPageUpdateType /* whatT reinsertScrollbar(); int axisShift = alignCanvasTops(); alignScrollbar( axisShift ); + alignAxes(); } From 806e7672e44063b4ccd5e6e353ae0f0143dc1d24 Mon Sep 17 00:00:00 2001 From: Jon Jenssen Date: Wed, 10 Aug 2022 17:06:13 +0200 Subject: [PATCH 046/129] Add default dock window layouts and support hiding dock widgets before running tests. --- .../Application/RiaGuiApplication.cpp | 5 + .../Tools/RiaRegressionTestRunner.cpp | 5 + .../RicfExportSnapshots.cpp | 8 + .../UserInterface/RiuDockWidgetTools.cpp | 281 ++++++++++++++++++ .../UserInterface/RiuDockWidgetTools.h | 16 + .../UserInterface/RiuMainWindow.cpp | 12 +- .../UserInterface/RiuMainWindow.h | 3 +- .../UserInterface/RiuMainWindowBase.cpp | 89 +++++- .../UserInterface/RiuMainWindowBase.h | 4 + .../UserInterface/RiuPlotMainWindow.cpp | 14 +- .../UserInterface/RiuPlotMainWindow.h | 2 + 11 files changed, 424 insertions(+), 15 deletions(-) diff --git a/ApplicationLibCode/Application/RiaGuiApplication.cpp b/ApplicationLibCode/Application/RiaGuiApplication.cpp index f858290fec..9377748201 100644 --- a/ApplicationLibCode/Application/RiaGuiApplication.cpp +++ b/ApplicationLibCode/Application/RiaGuiApplication.cpp @@ -1625,6 +1625,10 @@ void RiaGuiApplication::runMultiCaseSnapshots( const QString& templateProj { if ( !m_mainWindow ) return; + QByteArray curState = m_mainWindow->dockManager()->saveState( 0 ); + m_mainWindow->dockManager()->restoreState( + RiuDockWidgetTools::defaultDockState( RiuDockWidgetTools::dockStateHideAll3DWindowName() ) ); + const size_t numGridFiles = gridFileNames.size(); for ( size_t i = 0; i < numGridFiles; i++ ) { @@ -1639,6 +1643,7 @@ void RiaGuiApplication::runMultiCaseSnapshots( const QString& templateProj RicSnapshotAllViewsToFileFeature::exportSnapshotOfViewsIntoFolder( snapshotFolderName ); } } + m_mainWindow->dockManager()->restoreState( curState ); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/Application/Tools/RiaRegressionTestRunner.cpp b/ApplicationLibCode/Application/Tools/RiaRegressionTestRunner.cpp index 0739248025..c110de405f 100644 --- a/ApplicationLibCode/Application/Tools/RiaRegressionTestRunner.cpp +++ b/ApplicationLibCode/Application/Tools/RiaRegressionTestRunner.cpp @@ -35,6 +35,7 @@ #include "RimMainPlotCollection.h" #include "RimProject.h" +#include "RiuDockWidgetTools.h" #include "RiuMainWindow.h" #include "RiuMainWindowTools.h" #include "RiuPlotMainWindow.h" @@ -658,6 +659,9 @@ void RiaRegressionTestRunner::executeRegressionTests( const QString& regressionT if ( mainWnd ) { mainWnd->statusBar()->close(); + QByteArray curState = mainWnd->dockManager()->saveState( 0 ); + mainWnd->dockManager()->restoreState( + RiuDockWidgetTools::defaultDockState( RiuDockWidgetTools::dockStateHideAll3DWindowName() ) ); mainWnd->setDefaultWindowSize(); @@ -666,6 +670,7 @@ void RiaRegressionTestRunner::executeRegressionTests( const QString& regressionT m_rootPath = regressionTestPath; m_testFilter = testFilter; runRegressionTest(); + mainWnd->dockManager()->restoreState( curState ); } } diff --git a/ApplicationLibCode/CommandFileInterface/RicfExportSnapshots.cpp b/ApplicationLibCode/CommandFileInterface/RicfExportSnapshots.cpp index 30395974b2..7a41173112 100644 --- a/ApplicationLibCode/CommandFileInterface/RicfExportSnapshots.cpp +++ b/ApplicationLibCode/CommandFileInterface/RicfExportSnapshots.cpp @@ -27,6 +27,7 @@ #include "RiaLogging.h" #include "RiaRegressionTestRunner.h" +#include "RiuDockWidgetTools.h" #include "RiuMainWindow.h" #include "cafPdmFieldScriptingCapability.h" @@ -82,6 +83,11 @@ caf::PdmScriptResponse RicfExportSnapshots::execute() RiuMainWindow* mainWnd = RiuMainWindow::instance(); CVF_ASSERT( mainWnd ); + + QByteArray curState = mainWnd->dockManager()->saveState( 0 ); + mainWnd->dockManager()->restoreState( + RiuDockWidgetTools::defaultDockState( RiuDockWidgetTools::dockStateHideAll3DWindowName() ) ); + RiaGuiApplication::instance()->processEvents(); QString absolutePathToSnapshotDir = @@ -135,5 +141,7 @@ caf::PdmScriptResponse RicfExportSnapshots::execute() RiaGuiApplication::instance()->processEvents(); + mainWnd->dockManager()->restoreState( curState ); + return caf::PdmScriptResponse(); } diff --git a/ApplicationLibCode/UserInterface/RiuDockWidgetTools.cpp b/ApplicationLibCode/UserInterface/RiuDockWidgetTools.cpp index cb40ce9f9f..a06689172c 100644 --- a/ApplicationLibCode/UserInterface/RiuDockWidgetTools.cpp +++ b/ApplicationLibCode/UserInterface/RiuDockWidgetTools.cpp @@ -198,6 +198,46 @@ QString RiuDockWidgetTools::messagesName() return "dockMessages"; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QString RiuDockWidgetTools::dockState3DEclipseName() +{ + return "Default (Eclipse data)"; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QString RiuDockWidgetTools::dockState3DGeoMechName() +{ + return "Default (GeoMech data)"; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QString RiuDockWidgetTools::dockStatePlotWindowName() +{ + return "Default (Plot Window)"; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QString RiuDockWidgetTools::dockStateHideAllPlotWindowName() +{ + return "Hide All (Plot Window)"; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QString RiuDockWidgetTools::dockStateHideAll3DWindowName() +{ + return "Hide All"; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -232,3 +272,244 @@ void RiuDockWidgetTools::showDockWidget( const ads::CDockManager* dockManager, c dw->raise(); } } + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QByteArray RiuDockWidgetTools::defaultDockState( const QString& layoutName ) +{ + if ( layoutName == dockState3DEclipseName() ) + return defaultEclipseDockState(); + else if ( layoutName == dockState3DGeoMechName() ) + return defaultGeoMechDockState(); + else if ( layoutName == dockStatePlotWindowName() ) + return defaultPlotDockState(); + else if ( layoutName == dockStateHideAll3DWindowName() ) + return hideAllDocking3DState(); + else if ( layoutName == dockStateHideAllPlotWindowName() ) + return hideAllDockingPlotState(); + + // unknown dock state name found + CAF_ASSERT( false ); + return QByteArray(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QByteArray RiuDockWidgetTools::defaultEclipseDockState() +{ + // In Debug builds: + // Set up the dock widgets the way you want it using the GUI inside ResInsight - then use "Export Layout to + // Clipboard" from the Windows menu and paste the exported text into this file to update the default states. + + static const char stateData[] = + { '\x00', '\x00', '\x05', '\x2e', '\x78', '\xda', '\x95', '\x54', '\x4d', '\x4f', '\x02', '\x31', '\x10', + '\xbd', '\xfb', '\x2b', '\x9a', '\xbd', '\x23', '\xfb', '\x85', '\x42', '\xb2', '\x40', '\x08', '\x48', + '\xe2', '\x01', '\x45', '\x96', '\x8f', '\xa3', '\xa9', '\xbb', '\x23', '\x56', '\xbb', '\x2d', '\x99', + '\x16', '\x50', '\xe3', '\x8f', '\xb7', '\x0b', '\x66', '\x05', '\x2c', '\x8b', '\x9c', '\x76', '\x3b', + '\xef', '\xbd', '\x99', '\x79', '\xd3', '\x49', '\xa3', '\xf6', '\x7b', '\xc6', '\xc9', '\x0a', '\x50', + '\x31', '\x29', '\x9a', '\x8e', '\x77', '\xe9', '\x3a', '\x04', '\x44', '\x22', '\x53', '\x26', '\xe6', + '\x4d', '\x67', '\x32', '\xee', '\x57', '\xea', '\x4e', '\xbb', '\x15', '\x3d', '\xe8', '\x4e', '\xba', + '\xa2', '\x22', '\x81', '\xb4', '\x27', '\x93', '\x37', '\x83', '\xc5', '\x1f', '\x4a', '\x43', '\x46', + '\xa6', '\x85', '\xd0', '\x21', '\x13', '\x05', '\xb8', '\x7b', '\xee', '\x4a', '\xa1', '\x29', '\x13', + '\x26', '\xb2', '\x3d', '\x82', '\xd0', '\x48', '\xf9', '\x8c', '\xa5', '\x73', '\xd0', '\x4d', '\x27', + '\xe8', '\x91', '\x29', '\x83', '\xb5', '\x72', '\x5a', '\x51', '\x41', '\x24', '\x7d', '\x2e', '\xa9', + '\xde', '\x54', '\x76', '\x4d', '\x3c', '\x5e', '\x70', '\xa6', '\xb5', '\x09', '\xdf', '\x23', '\x33', + '\x62', '\x83', '\xe4', '\x99', '\xbf', '\xf2', '\xcc', '\x4b', '\x61', '\x52', '\xf8', '\x47', '\x39', + '\x95', '\x3d', '\x4e', '\x07', '\x81', '\x92', '\x31', '\x7d', '\x32', '\x7d', '\x04', '\x06', '\x58', + '\x22', '\x42', '\x0e', '\x65', '\xa6', '\xe6', '\x8c', '\x89', '\x54', '\xae', '\x1f', '\x53', '\x63', + '\x6a', '\x88', '\xf2', '\x15', '\x12', '\x3d', '\x46', '\x00', '\xa3', '\xd9', '\xb6', '\x49', '\xee', + '\x68', '\x06', '\xa5', '\x4c', '\xd2', '\xe5', '\x52', '\x41', '\x9a', '\x37', '\x5c', '\x2d', '\x57', + '\xf5', '\xa8', '\xa6', '\xb1', '\x5c', '\x62', '\x02', '\x67', '\x0a', '\xe3', '\x04', '\xd9', '\x42', + '\x2b', '\x8b', '\xaa', '\x9a', '\x3b', '\xdb', '\xf3', '\xe7', '\xed', '\xf8', '\xcb', '\xb5', '\x0b', + '\x94', '\x0b', '\x40', '\xfd', '\x71', '\x93', '\x32', '\x2d', '\xf1', '\xd0', '\x97', '\x85', '\x61', + '\x2d', '\x10', '\xb3', '\x4f', '\x50', '\xad', '\xeb', '\x46', '\x8d', '\x84', '\xb5', '\x1a', '\x89', + '\xaa', '\xdb', '\xb3', '\xf9', '\xfe', '\x0c', '\xff', '\xec', '\x6b', '\xd8', '\x6d', '\xb3', '\x58', + '\x04', '\x73', '\xfb', '\x74', '\xbe', '\x01', '\x0f', '\xda', '\xfc', '\x65', '\x58', '\x9b', '\x3b', + '\xb1', '\x25', '\x81', '\x53', '\x3a', '\xa1', '\x11', '\xa8', '\x25', '\xd7', '\xb7', '\xe2', '\x59', + '\xda', '\xa6', '\xb3', '\x83', '\x9e', '\x1a', '\x7d', '\x68', '\x4d', '\x3c', '\xe4', '\x52', '\x1f', + '\x4f', '\xbc', '\x41', '\x4b', '\x36', '\x21', '\x67', '\x0e', '\xe4', '\x0b', '\xaa', '\x2e', '\xc3', + '\x84', '\xc3', '\x3e', '\xdd', '\xb3', '\xd2', '\x47', '\xc0', '\x87', '\x80', '\xd9', '\x7f', '\x32', + '\x0f', '\x57', '\xb6', '\x06', '\xfe', '\x3a', '\xf3', '\x0f', '\x9c', '\x0d', '\x40', '\x29', '\x3a', + '\x07', '\x65', '\xf3', '\x55', '\x60', '\xa7', '\x6a', '\xa3', '\x4c', '\x0c', '\x75', '\x20', '\xc5', + '\xa9', '\xb5', '\x0b', '\x6a', '\x1e', '\xf1', '\x42', '\xd7', '\x27', '\x61', '\xe8', '\xda', '\x77', + '\x6f', '\x13', '\x69', '\xd4', '\x7d', '\xe2', '\x5f', '\xd5', '\x4b', '\x18', '\x41', '\xd8', '\x20', + '\xbe', '\xef', '\xda', '\x17', '\xb8', '\x5a', '\x3c', '\x42', '\xe6', '\xff', '\xc8', '\x6b', '\xd7', + '\xba', '\xf8', '\x06', '\x84', '\x98', '\xbb', '\x1d' }; + + QByteArray retVal( stateData, sizeof( stateData ) ); + + return retVal; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QByteArray RiuDockWidgetTools::defaultGeoMechDockState() +{ + static const char stateData[] = + { '\x00', '\x00', '\x05', '\x2e', '\x78', '\xda', '\x95', '\x54', '\x4d', '\x53', '\xc2', '\x30', '\x10', + '\xbd', '\xfb', '\x2b', '\x32', '\xbd', '\x2b', '\xfd', '\x42', '\x61', '\x06', '\x70', '\x1c', '\x90', + '\x19', '\x0f', '\x28', '\x5a', '\x84', '\xa3', '\x13', '\xdb', '\x15', '\xa3', '\x69', '\xc2', '\x6c', + '\x02', '\xa8', '\xe3', '\x8f', '\x77', '\x0b', '\x4e', '\x05', '\x0c', '\x45', '\x4f', '\x4d', '\xf6', + '\xbd', '\xb7', '\xd9', '\xb7', '\xd9', '\xa6', '\x75', '\xfe', '\x96', '\x4b', '\xb6', '\x00', '\x34', + '\x42', '\xab', '\xb6', '\x17', '\x9c', '\xf8', '\x1e', '\x03', '\x95', '\xea', '\x4c', '\xa8', '\x69', + '\xdb', '\xbb', '\x1f', '\xf5', '\x8f', '\x1b', '\xde', '\x79', '\xa7', '\x75', '\x6b', '\x2f', '\xb2', + '\x05', '\x57', '\x29', '\x64', '\x3d', '\x9d', '\xbe', '\x12', '\x96', '\xbc', '\x1b', '\x0b', '\x39', + '\x1b', '\x97', '\x42', '\x8f', '\xdd', '\x1b', '\xc0', '\xcd', '\x7d', '\x57', '\x2b', '\xcb', '\x85', + '\xa2', '\xc8', '\x7a', '\x0b', '\xca', '\x22', '\x97', '\x13', '\x91', '\x4d', '\xc1', '\xb6', '\xbd', + '\xa8', '\xc7', '\xc6', '\x02', '\x96', '\xc6', '\xeb', '\xb4', '\x4a', '\x22', '\xeb', '\x4b', '\xcd', + '\xed', '\xea', '\x64', '\x9f', '\xe2', '\xc9', '\x4c', '\x0a', '\x6b', '\x29', '\x7c', '\x83', '\x82', + '\xc4', '\x84', '\x14', '\x99', '\x3f', '\x8b', '\xcc', '\x73', '\x45', '\x29', '\xc2', '\xbd', '\x9c', + '\xe3', '\x2d', '\xce', '\x05', '\x02', '\x67', '\x23', '\xfe', '\x48', '\x75', '\x44', '\x04', '\xcc', + '\x11', '\xa1', '\x80', '\x72', '\x3a', '\x73', '\x22', '\x54', '\xa6', '\x97', '\x0f', '\x19', '\x99', + '\x1a', '\xa2', '\x7e', '\x81', '\xd4', '\x8e', '\x10', '\x80', '\x34', '\xeb', '\x32', '\xd9', '\x35', + '\xcf', '\xa1', '\x92', '\xc9', '\xba', '\x52', '\x1b', '\xc8', '\x8a', '\x82', '\x6b', '\xd5', '\xaa', + '\x1e', '\xb7', '\x3c', '\xd1', '\x73', '\x4c', '\xe1', '\x9f', '\xc2', '\x24', '\x45', '\x31', '\xb3', + '\xc6', '\xa1', '\xaa', '\x15', '\xce', '\xb6', '\xfc', '\x05', '\x1b', '\xfe', '\x0a', '\xed', '\x0c', + '\xf5', '\x0c', '\xd0', '\xbe', '\x5f', '\x66', '\xc2', '\x6a', '\xdc', '\xf5', '\xe5', '\x60', '\x38', + '\x0f', '\x48', '\xc4', '\x07', '\x98', '\xce', '\x59', '\xb3', '\xce', '\xe2', '\x7a', '\x9d', '\xb5', + '\x6a', '\xeb', '\x3d', '\x7d', '\xbf', '\x9b', '\xff', '\xef', '\x6b', '\xd8', '\x2c', '\xb3', '\x1c', + '\x04', '\xba', '\x7d', '\x3e', '\x5d', '\x81', '\x3b', '\x65', '\xfe', '\x30', '\x9c', '\xc5', '\x1d', + '\x98', '\x92', '\xc8', '\xab', '\xec', '\xd0', '\x1d', '\x98', '\xb9', '\xb4', '\x57', '\xea', '\x49', + '\xbb', '\xba', '\xb3', '\x81', '\x1e', '\x6a', '\x7d', '\xec', '\x4c', '\x3c', '\x94', '\xda', '\xee', + '\x4f', '\xbc', '\x42', '\x2b', '\x26', '\xa1', '\x60', '\x0e', '\xf4', '\x33', '\x9a', '\xae', '\xc0', + '\x54', '\xc2', '\x5f', '\xe8', '\x77', '\x20', '\x87', '\x80', '\xf9', '\x36', '\x35', '\x70', '\x52', + '\x87', '\x0b', '\xeb', '\xa0', '\xfd', '\x76', '\x16', '\xee', '\x38', '\x1b', '\x80', '\x31', '\x7c', + '\x0a', '\xc6', '\xe5', '\xab', '\xc4', '\x0e', '\x94', '\x49', '\xff', '\x50', '\x4a', '\xd4', '\x81', + '\x56', '\x87', '\xc6', '\x2e', '\xaa', '\x07', '\x2c', '\x88', '\xfd', '\x90', '\xc5', '\xb1', '\xef', + '\x9e', '\xbd', '\x55', '\xa4', '\xd9', '\x08', '\x59', '\x78', '\xda', '\xa8', '\x60', '\x44', '\x71', + '\x93', '\x85', '\xa1', '\xef', '\x1e', '\xe0', '\x5a', '\xf9', '\x08', '\xd1', '\x7a', '\xcf', '\x6b', + '\xd7', '\x39', '\xfa', '\x02', '\x85', '\x8e', '\xbb', '\x1e' }; + + QByteArray retVal( stateData, sizeof( stateData ) ); + + return retVal; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QByteArray RiuDockWidgetTools::defaultPlotDockState() +{ + static const char stateData[] = + { '\x00', '\x00', '\x04', '\x87', '\x78', '\xda', '\xa5', '\x54', '\x4d', '\x6f', '\xc2', '\x30', '\x0c', + '\xbd', '\xef', '\x57', '\x44', '\xbd', '\xb3', '\x7e', '\x20', '\xb1', '\x22', '\x95', '\x22', '\x04', + '\xe3', '\xc6', '\xc6', '\xd4', '\x02', '\xc7', '\x29', '\x6b', '\xac', '\x2a', '\x5a', '\x9b', '\x54', + '\x49', '\xca', '\xc6', '\xb4', '\x1f', '\x3f', '\xb7', '\x9d', '\x2a', '\x40', '\xe5', '\x63', '\xec', + '\xd4', '\xd8', '\x7e', '\xcf', '\x7e', '\x8e', '\xdd', '\x04', '\xe3', '\xcf', '\x3c', '\x23', '\x5b', + '\x50', '\x9a', '\x4b', '\x31', '\xb2', '\xdc', '\x7b', '\xc7', '\x22', '\x20', '\x12', '\xc9', '\xb8', + '\x48', '\x47', '\xd6', '\x2a', '\x9e', '\xf7', '\x7c', '\x6b', '\x1c', '\x06', '\x2f', '\x66', '\xc2', + '\xb6', '\x54', '\x24', '\xc0', '\x66', '\x32', '\x79', '\xc7', '\x58', '\xb4', '\xd3', '\x06', '\x72', + '\xb2', '\x6e', '\x89', '\x16', '\x59', '\x69', '\x50', '\xfb', '\xf6', '\x54', '\x0a', '\x43', '\xb9', + '\x40', '\x4f', '\x63', '\x82', '\x30', '\x8a', '\x66', '\x1b', '\xce', '\x52', '\x30', '\x23', '\x6b', + '\x99', '\x49', '\x43', '\x36', '\x5c', '\x30', '\xf9', '\x61', '\x85', '\x41', '\x8b', '\x25', '\xf3', + '\x4c', '\x52', '\x53', '\x17', '\x77', '\xd0', '\x1f', '\x15', '\x19', '\x37', '\x06', '\xdd', '\xcf', + '\x8a', '\x23', '\x1f', '\x23', '\x55', '\xf2', '\xef', '\x2a', '\x79', '\x29', '\x30', '\x4b', '\xff', + '\x24', '\xa6', '\xd7', '\x62', '\x3c', '\xc4', '\x4c', '\x14', '\x50', '\x12', '\xd3', '\x37', '\x5d', + '\x51', '\xc8', '\xb4', '\x54', '\x0a', '\xaa', '\x50', '\x81', '\x22', '\x16', '\x58', '\xb7', '\xd1', + '\xf1', '\xca', '\xb0', '\xb7', '\x4a', '\x97', '\x8e', '\x15', '\x00', '\xb2', '\x1a', '\xad', '\xe4', + '\x89', '\xe6', '\x70', '\x01', '\x4b', '\xa6', '\x99', '\xd4', '\xc0', '\x2a', '\xd1', '\xf6', '\x65', + '\x5e', '\x0c', '\x79', '\x91', '\x51', '\x03', '\xb7', '\x70', '\xa3', '\x44', '\xf1', '\xa2', '\xb3', + '\xaa', '\x5d', '\x35', '\x79', '\xd0', '\xaa', '\x7b', '\xa1', '\x55', '\x25', '\x0b', '\x50', '\x66', + '\xf7', '\xc8', '\xb8', '\x91', '\xea', '\x9a', '\x7e', '\x0f', '\x09', '\x9d', '\xe5', '\x23', '\xfe', + '\x05', '\x3a', '\xf4', '\x87', '\x0e', '\xe9', '\xfb', '\x0f', '\x24', '\xb0', '\x1b', '\x1b', '\xbf', + '\xbf', '\x53', '\x3a', '\x29', '\x70', '\x7f', '\x21', '\x70', '\x0b', '\x68', '\x5a', '\xc7', '\x8f', + '\x44', '\x1d', '\x80', '\x3a', '\xcb', '\xff', '\x6d', '\x19', '\xbc', '\xf3', '\x37', '\x34', '\xa3', + '\x86', '\x46', '\xb2', '\x54', '\x09', '\x5c', '\xb9', '\x11', '\x47', '\x84', '\x33', '\xa3', '\xad', + '\x67', '\x59', '\xe6', '\x39', '\x55', '\xbb', '\x65', '\x9d', '\x47', '\xd0', '\x14', '\xd4', '\x7f', + '\x47', '\xba', '\x00', '\xad', '\x31', '\x8f', '\xbe', '\x42', '\x6a', '\x0b', '\xbd', '\x71', '\x8c', + '\x8d', '\xc7', '\x1b', '\xb8', '\xc4', '\x73', '\xdc', '\x21', '\xf1', '\x06', '\x7e', '\x27', '\xcc', + '\x6e', '\x7f', '\x6d', '\x3c', '\x9f', '\x78', '\x46', '\xc2', '\xbb', '\x1f', '\x8d', '\x36', '\x8d', + '\x30' }; + + QByteArray retVal( stateData, sizeof( stateData ) ); + + return retVal; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QByteArray RiuDockWidgetTools::hideAllDocking3DState() +{ + static const char stateData[] = + { '\x00', '\x00', '\x05', '\x29', '\x78', '\xda', '\x95', '\x54', '\x4d', '\x53', '\xc2', '\x30', '\x10', + '\xbd', '\xfb', '\x2b', '\x32', '\xbd', '\x23', '\x05', '\xd4', '\xf1', '\xc0', '\xc7', '\x30', '\x20', + '\x33', '\x1e', '\x50', '\xa4', '\x7c', '\x1c', '\x9d', '\xd8', '\xae', '\x18', '\x4d', '\x13', '\x66', + '\x13', '\x40', '\x1c', '\x7f', '\xbc', '\xdb', '\x22', '\xb5', '\xad', '\xd0', '\xc2', '\xa9', '\xcd', + '\xbe', '\xb7', '\x9b', '\xf7', '\x92', '\x37', '\x69', '\x76', '\x3e', '\x43', '\xc9', '\xd6', '\x80', + '\x46', '\x68', '\xd5', '\x72', '\x6a', '\x97', '\xae', '\xc3', '\x40', '\xf9', '\x3a', '\x10', '\x6a', + '\xd1', '\x72', '\xa6', '\x93', '\x41', '\xe5', '\xd6', '\xe9', '\xb4', '\x9b', '\x4f', '\xb6', '\x1b', + '\xac', '\xb9', '\xf2', '\x21', '\xe8', '\x6b', '\xff', '\x83', '\x30', '\x6f', '\x6b', '\x2c', '\x84', + '\x6c', '\x96', '\x34', '\x3a', '\x6c', '\x6a', '\x00', '\xd3', '\xeb', '\x9e', '\x56', '\x96', '\x0b', + '\x45', '\x95', '\xdd', '\x12', '\x94', '\x45', '\x2e', '\xe7', '\x22', '\x58', '\x80', '\x6d', '\x39', + '\x8d', '\x3e', '\x9b', '\x09', '\xd8', '\x18', '\xa7', '\xdd', '\x4c', '\x88', '\x6c', '\x20', '\x35', + '\xb7', '\xf1', '\xce', '\x2e', '\xd5', '\xbd', '\xa5', '\x14', '\xd6', '\x52', '\xf9', '\x11', '\x05', + '\x35', '\x13', '\x12', '\x4d', '\xfe', '\x8e', '\x26', '\xaf', '\x14', '\x8d', '\xa8', '\x1f', '\xe5', + '\x54', '\x32', '\x9c', '\x2e', '\x02', '\x67', '\x13', '\xfe', '\x42', '\x3a', '\x1a', '\x04', '\xac', + '\x10', '\x21', '\x82', '\x42', '\xda', '\x73', '\x2e', '\x54', '\xa0', '\x37', '\xcf', '\x01', '\x99', + '\xf2', '\x7c', '\x14', '\x4b', '\x6b', '\x26', '\x08', '\x40', '\x3d', '\x3b', '\x99', '\xec', '\x81', + '\x87', '\xf0', '\x8f', '\x39', '\x42', '\xfd', '\x0e', '\xbe', '\x8d', '\x99', '\xac', '\x27', '\xb5', + '\x81', '\x20', '\x72', '\x58', '\x2d', '\xee', '\xea', '\x73', '\xcb', '\x3d', '\xbd', '\x42', '\x1f', + '\xce', '\x6c', '\x4c', '\x0b', '\xcb', '\x76', '\x55', '\x23', '\x67', '\x19', '\x7f', '\xb5', '\x94', + '\xbf', '\xa8', '\x77', '\x89', '\x7a', '\x09', '\x68', '\xb7', '\x77', '\x81', '\xb0', '\x1a', '\xf3', + '\xbe', '\x0e', '\x30', '\x0e', '\x6e', '\xe0', '\x89', '\x2f', '\x30', '\x6d', '\x97', '\xd5', '\xea', + '\xd7', '\x37', '\xac', '\x59', '\xdd', '\x2d', '\xe9', '\xfb', '\x7b', '\xf6', '\x67', '\xdf', '\x42', + '\x5a', '\x65', '\x92', '\x03', '\xba', '\x7c', '\xbe', '\x88', '\xc1', '\x9c', '\xca', '\x3f', '\xc6', + '\x5e', '\x9b', '\x9b', '\xd6', '\x56', '\x12', '\x92', '\x86', '\x53', '\x78', '\x40', '\x63', '\x30', + '\x2b', '\x69', '\xef', '\xd5', '\xab', '\x3e', '\x74', '\x38', '\x29', '\xb4', '\xec', '\xe4', '\xaf', + '\x72', '\x83', '\x47', '\x6b', '\x3b', '\x92', '\xda', '\x1e', '\x9f', '\x1a', '\xa3', '\x05', '\x29', + '\x88', '\x98', '\x43', '\xfd', '\x86', '\xa6', '\x27', '\xd0', '\x97', '\x70', '\x0a', '\x7d', '\x0c', + '\x72', '\x04', '\x18', '\x9e', '\x42', '\xdd', '\xcb', '\x2b', '\xb3', '\x55', '\xcf', '\xdb', '\x42', + '\xed', '\x83', '\x31', '\x43', '\xad', '\x8e', '\x05', '\x6a', '\x48', '\x30', '\x5f', '\x80', '\x29', + '\x55', '\x90', '\x9d', '\x54', '\x18', '\x3c', '\x97', '\x51', '\xf2', '\xdc', '\xc3', '\xd1', '\x8b', + '\x2b', '\x71', '\x32', '\x8b', '\x08', '\x05', '\x13', '\xaa', '\xc9', '\xfb', '\x43', '\xff', '\x47', + '\x1e', '\xba', '\xf6', '\xc5', '\x0f', '\xd0', '\x5d', '\xba', '\xc1' }; + + QByteArray retVal( stateData, sizeof( stateData ) ); + + return retVal; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QByteArray RiuDockWidgetTools::hideAllDockingPlotState() +{ + static const char stateData[] = + { '\x00', '\x00', '\x04', '\x78', '\x78', '\xda', '\xa5', '\x54', '\xc1', '\x4e', '\x83', '\x40', '\x10', + '\xbd', '\xfb', '\x15', '\x1b', '\xee', '\x15', '\x4a', '\xa3', '\xe9', '\x81', '\xd2', '\x34', '\xad', + '\xbd', '\x55', '\x6b', '\xa0', '\xf6', '\x68', '\x56', '\x76', '\x42', '\x36', '\x2e', '\xbb', '\x64', + '\x77', '\xa9', '\xd6', '\xf8', '\xf1', '\x0e', '\x60', '\x09', '\x98', '\x62', '\x6b', '\x3d', '\xc1', + '\xcc', '\xbc', '\x37', '\xf3', '\xde', '\xce', '\x42', '\x30', '\x7d', '\xcf', '\x04', '\xd9', '\x81', + '\x36', '\x5c', '\xc9', '\x89', '\x33', '\xbc', '\xf6', '\x1c', '\x02', '\x32', '\x51', '\x8c', '\xcb', + '\x74', '\xe2', '\x6c', '\xe2', '\xe5', '\x60', '\xec', '\x4c', '\xc3', '\xe0', '\xd1', '\xce', '\xd8', + '\x8e', '\xca', '\x04', '\xd8', '\x42', '\x25', '\xaf', '\x58', '\x8b', '\xf6', '\xc6', '\x42', '\x46', + '\x9e', '\x1a', '\xa2', '\x43', '\x36', '\x06', '\x74', '\x3b', '\x9e', '\x2b', '\x69', '\x29', '\x97', + '\x98', '\xa9', '\x43', '\x90', '\x56', '\x53', '\xb1', '\xe5', '\x2c', '\x05', '\x3b', '\x71', '\xd6', + '\x42', '\x59', '\xb2', '\xe5', '\x92', '\xa9', '\x37', '\x27', '\x0c', '\x1a', '\x2c', '\x59', '\x0a', + '\x45', '\x6d', '\x35', '\xdc', '\xc3', '\x7c', '\x94', '\x0b', '\x6e', '\x2d', '\xa6', '\x1f', '\x34', + '\x47', '\x3e', '\x56', '\xca', '\xe6', '\x9f', '\x65', '\xf3', '\x42', '\x62', '\x97', '\x51', '\x2f', + '\x66', '\xd0', '\x60', '\x7c', '\xc4', '\xcc', '\x34', '\x50', '\x12', '\xd3', '\x17', '\x53', '\x52', + '\xc8', '\xbc', '\xd0', '\x1a', '\xca', '\x52', '\x8e', '\x22', '\x56', '\x38', '\xb7', '\xd6', '\xf1', + '\xcc', '\xd0', '\x5b', '\x94', '\x68', '\x9e', '\x5b', '\x13', '\x6b', '\x00', '\xe4', '\xd5', '\x6a', + '\xc9', '\x3d', '\xcd', '\xe0', '\x28', '\xba', '\x74', '\x51', '\x63', '\xc9', '\x5c', '\x28', '\x03', + '\xac', '\xb4', '\xea', '\x9e', '\xe6', '\xc5', '\x90', '\xe5', '\x82', '\x5a', '\xb8', '\x84', '\xdb', + '\x56', '\xd8', '\x65', '\xba', '\xa5', '\xcd', '\x8e', '\xd9', '\xe1', '\xef', '\x66', '\xd7', '\x5a', + '\xe5', '\xa0', '\xed', '\xfe', '\x8e', '\x71', '\xab', '\xf4', '\x39', '\x7e', '\xbb', '\x84', '\xa3', + '\xe3', '\x23', '\xfe', '\x01', '\x26', '\xf4', '\xc8', '\xd0', '\x1f', '\x8f', '\x48', '\xe0', '\xd6', + '\x21', '\x3e', '\xbf', '\xd7', '\xd4', '\xab', '\xaf', '\x7d', '\x23', '\xf0', '\x1a', '\xd0', '\xb4', + '\xaa', '\xff', '\xd0', '\xd4', '\x01', '\x1d', '\xa6', '\x7b', '\xed', '\xe9', '\x7f', '\xbb', '\x0d', + '\x7e', '\x4b', '\x40', '\x75', '\xb8', '\x45', '\x96', '\x51', '\xbd', '\x5f', '\x57', '\xd6', '\x25', + '\x4d', '\xe1', '\x9c', '\x53', '\x59', '\x50', '\x4b', '\x23', '\x55', '\xe8', '\x04', '\x4e', '\xad', + '\xb3', '\x67', '\xc4', '\x3f', '\xd7', '\xb8', '\x02', '\x63', '\xb0', '\x8f', '\x39', '\x43', '\x6a', + '\x03', '\xbd', '\x6c', '\x75', '\x07', '\x80', '\x7f', '\x73', '\xeb', '\x11', '\xef', '\x28', '\xc4', + '\x6d', '\xbe', '\x65', '\x7c', '\xef', '\xf9', '\x6f', '\x84', '\x57', '\x5f', '\x87', '\xd7', '\x88', + '\x5d' }; + + QByteArray retVal( stateData, sizeof( stateData ) ); + + return retVal; +} diff --git a/ApplicationLibCode/UserInterface/RiuDockWidgetTools.h b/ApplicationLibCode/UserInterface/RiuDockWidgetTools.h index 412f0468b8..765d339678 100644 --- a/ApplicationLibCode/UserInterface/RiuDockWidgetTools.h +++ b/ApplicationLibCode/UserInterface/RiuDockWidgetTools.h @@ -18,6 +18,7 @@ #pragma once +#include #include #include #include @@ -66,9 +67,24 @@ public: static QString plotMainWindowMessagesName(); static QString plotMainWindowUndoStackName(); + static QString dockState3DEclipseName(); + static QString dockState3DGeoMechName(); + static QString dockStatePlotWindowName(); + static QString dockStateHideAllPlotWindowName(); + static QString dockStateHideAll3DWindowName(); + static QAction* toggleActionForWidget( const ads::CDockManager* dockManager, const QString& dockWidgetName ); static ads::CDockWidget* findDockWidget( const ads::CDockManager* dockManager, const QString& dockWidgetName ); static void showDockWidget( const ads::CDockManager* dockManager, const QString& dockWidgetName ); + + static QByteArray defaultDockState( const QString& layoutName ); + static QByteArray hideAllDocking3DState(); + static QByteArray hideAllDockingPlotState(); + +private: + static QByteArray defaultEclipseDockState(); + static QByteArray defaultGeoMechDockState(); + static QByteArray defaultPlotDockState(); }; diff --git a/ApplicationLibCode/UserInterface/RiuMainWindow.cpp b/ApplicationLibCode/UserInterface/RiuMainWindow.cpp index cf3d65e755..8ba196b417 100644 --- a/ApplicationLibCode/UserInterface/RiuMainWindow.cpp +++ b/ApplicationLibCode/UserInterface/RiuMainWindow.cpp @@ -876,7 +876,6 @@ void RiuMainWindow::createDockPanels() if ( bottomArea ) bottomArea->setCurrentIndex( 0 ); auto widgets = dockManager()->dockWidgetsMap().values(); - std::reverse( widgets.begin(), widgets.end() ); for ( ads::CDockWidget* dock : widgets ) { connect( dock->toggleViewAction(), SIGNAL( triggered() ), SLOT( slotDockWidgetToggleViewActionTriggered() ) ); @@ -2081,3 +2080,14 @@ RicGridCalculatorDialog* RiuMainWindow::gridCalculatorDialog( bool createIfNotPr return m_gridCalculatorDialog.get(); } + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QStringList RiuMainWindow::defaultDockStateNames() +{ + QStringList retList = { RiuDockWidgetTools::dockState3DEclipseName(), + RiuDockWidgetTools::dockState3DGeoMechName(), + RiuDockWidgetTools::dockStateHideAll3DWindowName() }; + return retList; +} diff --git a/ApplicationLibCode/UserInterface/RiuMainWindow.h b/ApplicationLibCode/UserInterface/RiuMainWindow.h index 191dab32c8..00828a1098 100644 --- a/ApplicationLibCode/UserInterface/RiuMainWindow.h +++ b/ApplicationLibCode/UserInterface/RiuMainWindow.h @@ -138,7 +138,8 @@ public: RicGridCalculatorDialog* gridCalculatorDialog( bool createIfNotPresent ); protected: - void closeEvent( QCloseEvent* event ) override; + void closeEvent( QCloseEvent* event ) override; + QStringList defaultDockStateNames() override; private: void createActions(); diff --git a/ApplicationLibCode/UserInterface/RiuMainWindowBase.cpp b/ApplicationLibCode/UserInterface/RiuMainWindowBase.cpp index f2b9767248..163459718a 100644 --- a/ApplicationLibCode/UserInterface/RiuMainWindowBase.cpp +++ b/ApplicationLibCode/UserInterface/RiuMainWindowBase.cpp @@ -39,6 +39,7 @@ #include "DockWidget.h" #include +#include #include #include #include @@ -49,6 +50,8 @@ #include #include +#define DOCKSTATE_VERSION 1 + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -137,23 +140,23 @@ void RiuMainWindowBase::loadWinGeoAndDockToolBarLayout() // Company and appname set through QCoreApplication QSettings settings; - QVariant winGeo = settings.value( QString( "%1/winGeometry" ).arg( registryFolderName() ) ); - QVariant layout = settings.value( QString( "%1/toolBarLayout" ).arg( registryFolderName() ) ); - QVariant dockState = settings.value( QString( "%1/dockLayout" ).arg( registryFolderName() ) ); + QVariant winGeo = settings.value( QString( "%1/winGeometry" ).arg( registryFolderName() ) ); + QVariant toolbarLayout = settings.value( QString( "%1/toolBarLayout" ).arg( registryFolderName() ) ); + QVariant dockState = settings.value( QString( "%1/dockLayout" ).arg( registryFolderName() ) ); if ( winGeo.isValid() ) { if ( restoreGeometry( winGeo.toByteArray() ) ) { - if ( layout.isValid() ) + if ( toolbarLayout.isValid() ) { - restoreState( layout.toByteArray(), 0 ); + restoreState( toolbarLayout.toByteArray(), 0 ); } } } if ( dockState.isValid() ) { - m_dockManager->restoreState( dockState.toByteArray(), 1 ); + m_dockManager->restoreState( dockState.toByteArray(), DOCKSTATE_VERSION ); } settings.beginGroup( registryFolderName() ); @@ -186,7 +189,8 @@ void RiuMainWindowBase::saveWinGeoAndDockToolBarLayout() settings.setValue( QString( "%1/isMaximized" ).arg( registryFolderName() ), isMaximized() ); - settings.setValue( QString( "%1/dockLayout" ).arg( registryFolderName() ), m_dockManager->saveState( 1 ) ); + settings.setValue( QString( "%1/dockLayout" ).arg( registryFolderName() ), + m_dockManager->saveState( DOCKSTATE_VERSION ) ); } //-------------------------------------------------------------------------------------------------- @@ -578,6 +582,22 @@ ads::CDockAreaWidget* RiuMainWindowBase::addTabbedWidgets( std::vector( this->sender() ); + if ( action ) + { + QString layoutName = action->text(); + + QByteArray state = RiuDockWidgetTools::defaultDockState( layoutName ); + + dockManager()->restoreState( state, DOCKSTATE_VERSION ); + } +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -617,6 +637,39 @@ void RiuMainWindowBase::deleteDockLayout() } } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RiuMainWindowBase::exportDockLayout() +{ + QClipboard* clipboard = QApplication::clipboard(); + if ( clipboard ) + { + QByteArray state = dockManager()->saveState( DOCKSTATE_VERSION ); + + QString exportStr; + int i = 0; + + exportStr = "static const char stateData[] = {\n"; + + for ( unsigned char c : state ) + { + if ( i > 0 ) + { + if ( i % 25 == 0 ) + exportStr += ",\n"; + else + exportStr += ", "; + } + exportStr += QString( "'\\x%1'" ).arg( c, 2, 16, QChar( '0' ) ); + i++; + } + exportStr += "\n};\n"; + + clipboard->setText( exportStr ); + } +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -650,11 +703,22 @@ void RiuMainWindowBase::addDefaultEntriesToWindowsMenu() QAction* saveLayoutAction = m_windowMenu->addAction( "Save Window Layout..." ); connect( saveLayoutAction, SIGNAL( triggered() ), this, SLOT( saveDockLayout() ) ); - QStringList names = dockManager()->perspectiveNames(); - if ( names.size() > 0 ) + QStringList defaultNames = defaultDockStateNames(); + QStringList names = dockManager()->perspectiveNames(); + + if ( defaultNames.size() + names.size() > 0 ) { QMenu* layoutsMenu = m_windowMenu->addMenu( "Use Window Layout" ); - QMenu* deleteLayoutMenu = m_windowMenu->addMenu( "Delete Window Layout" ); + QMenu* deleteLayoutMenu = nullptr; + if ( names.size() > 0 ) deleteLayoutMenu = m_windowMenu->addMenu( "Delete Window Layout" ); + + for ( auto& defLayout : defaultNames ) + { + QAction* defLayoutAction = layoutsMenu->addAction( defLayout ); + connect( defLayoutAction, SIGNAL( triggered() ), this, SLOT( setDefaultDockLayout() ) ); + } + + if ( defaultNames.size() > 0 ) layoutsMenu->addSeparator(); for ( auto& layout : names ) { @@ -665,6 +729,11 @@ void RiuMainWindowBase::addDefaultEntriesToWindowsMenu() } } +#ifdef _DEBUG + QAction* exportLayoutAction = m_windowMenu->addAction( "Export Layout to Clipboard" ); + connect( exportLayoutAction, SIGNAL( triggered() ), this, SLOT( exportDockLayout() ) ); +#endif + m_windowMenu->addSeparator(); QAction* cascadeWindowsAction = new QAction( "Cascade Windows", this ); connect( cascadeWindowsAction, SIGNAL( triggered() ), m_mdiArea, SLOT( cascadeSubWindows() ) ); diff --git a/ApplicationLibCode/UserInterface/RiuMainWindowBase.h b/ApplicationLibCode/UserInterface/RiuMainWindowBase.h index 5f76b7aaaf..f0797d71ac 100644 --- a/ApplicationLibCode/UserInterface/RiuMainWindowBase.h +++ b/ApplicationLibCode/UserInterface/RiuMainWindowBase.h @@ -111,6 +111,8 @@ protected: void addDefaultEntriesToWindowsMenu(); + virtual QStringList defaultDockStateNames() = 0; + protected slots: void slotDockWidgetToggleViewActionTriggered(); void slotRefreshHelpActions(); @@ -119,9 +121,11 @@ protected slots: void slotUndo(); void slotRefreshUndoRedoActions(); + void setDefaultDockLayout(); void setDockLayout(); void deleteDockLayout(); void saveDockLayout(); + void exportDockLayout(); protected: bool m_allowActiveViewChangeFromSelection; // To be used in selectedObjectsChanged() to control diff --git a/ApplicationLibCode/UserInterface/RiuPlotMainWindow.cpp b/ApplicationLibCode/UserInterface/RiuPlotMainWindow.cpp index 9373757a29..8c4c6049f1 100644 --- a/ApplicationLibCode/UserInterface/RiuPlotMainWindow.cpp +++ b/ApplicationLibCode/UserInterface/RiuPlotMainWindow.cpp @@ -87,7 +87,7 @@ RiuPlotMainWindow::RiuPlotMainWindow() m_mdiArea = new RiuMdiArea( this ); connect( m_mdiArea, SIGNAL( subWindowActivated( QMdiSubWindow* ) ), SLOT( slotSubWindowActivated( QMdiSubWindow* ) ) ); - ads::CDockWidget* widget = new ads::CDockWidget( "Plots", this ); + ads::CDockWidget* widget = new ads::CDockWidget( "Plot Window", this ); widget->setWidget( m_mdiArea ); auto dockArea = dockManager()->setCentralWidget( widget ); dockArea->setVisible( true ); @@ -596,8 +596,6 @@ void RiuPlotMainWindow::createDockPanels() if ( bottomArea ) bottomArea->setCurrentIndex( 0 ); auto widgets = dockManager()->dockWidgetsMap().values(); - std::reverse( widgets.begin(), widgets.end() ); - for ( ads::CDockWidget* dock : widgets ) { connect( dock->toggleViewAction(), SIGNAL( triggered() ), SLOT( slotDockWidgetToggleViewActionTriggered() ) ); @@ -1149,3 +1147,13 @@ void RiuPlotMainWindow::dropEvent( QDropEvent* event ) RicSummaryPlotBuilder::createAndAppendSummaryMultiPlot( objects ); } } + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QStringList RiuPlotMainWindow::defaultDockStateNames() +{ + QStringList retList = { RiuDockWidgetTools::dockStatePlotWindowName(), + RiuDockWidgetTools::dockStateHideAllPlotWindowName() }; + return retList; +} diff --git a/ApplicationLibCode/UserInterface/RiuPlotMainWindow.h b/ApplicationLibCode/UserInterface/RiuPlotMainWindow.h index fd19fd3e3f..d5bc2509cb 100644 --- a/ApplicationLibCode/UserInterface/RiuPlotMainWindow.h +++ b/ApplicationLibCode/UserInterface/RiuPlotMainWindow.h @@ -102,6 +102,8 @@ protected: void dragEnterEvent( QDragEnterEvent* event ) override; void dropEvent( QDropEvent* event ) override; + QStringList defaultDockStateNames() override; + private: void setPdmRoot( caf::PdmObject* pdmRoot ); From 98df56280e86ba52b90613a4722892cc0b9bd668 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Thu, 11 Aug 2022 13:04:16 +0200 Subject: [PATCH 047/129] #9183 Do not use undo/redo for GeoMech result definition --- .../GeoMech/RimGeoMechResultDefinition.cpp | 14 ++++++++++++++ .../GeoMech/RimGeoMechResultDefinition.h | 1 + 2 files changed, 15 insertions(+) diff --git a/ApplicationLibCode/ProjectDataModel/GeoMech/RimGeoMechResultDefinition.cpp b/ApplicationLibCode/ProjectDataModel/GeoMech/RimGeoMechResultDefinition.cpp index cab5b4be93..4d2da14dbc 100644 --- a/ApplicationLibCode/ProjectDataModel/GeoMech/RimGeoMechResultDefinition.cpp +++ b/ApplicationLibCode/ProjectDataModel/GeoMech/RimGeoMechResultDefinition.cpp @@ -473,6 +473,20 @@ void RimGeoMechResultDefinition::calculateNormalizationAirGapDefault() } } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +bool RimGeoMechResultDefinition::useUndoRedoForFieldChanged() +{ + // Do not use undo/redo, because a state variable is initialized in fieldChanged(), and the undo/redo framework + // trigger a call to defineUiOrdering() before fieldChanged causing invalid state in this object. + // Having a state variable in fieldChanged/defineUiOrdering is a fragile pattern and should be avoided + + // See CmdFieldChangeExec::redo() + + return false; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/GeoMech/RimGeoMechResultDefinition.h b/ApplicationLibCode/ProjectDataModel/GeoMech/RimGeoMechResultDefinition.h index ad794dc2f2..aeafc13f92 100644 --- a/ApplicationLibCode/ProjectDataModel/GeoMech/RimGeoMechResultDefinition.h +++ b/ApplicationLibCode/ProjectDataModel/GeoMech/RimGeoMechResultDefinition.h @@ -98,6 +98,7 @@ private: void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) override; void calculateNormalizationAirGapDefault(); + bool useUndoRedoForFieldChanged() override; void initAfterRead() override; void defineEditorAttribute( const caf::PdmFieldHandle* field, From e7ec4818fd09823e0a2ed5a80dee152d4e91d3c4 Mon Sep 17 00:00:00 2001 From: Kristian Bendiksen Date: Fri, 12 Aug 2022 15:40:27 +0200 Subject: [PATCH 048/129] #9131 Summary Plot: Show area fill also when line style is 'None'. Fixes #9131. Fixed by drawing the line with Qt::NoPen (invisible). --- ApplicationLibCode/UserInterface/RiuQwtPlotCurve.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ApplicationLibCode/UserInterface/RiuQwtPlotCurve.cpp b/ApplicationLibCode/UserInterface/RiuQwtPlotCurve.cpp index 4f5415b654..1809734e5f 100644 --- a/ApplicationLibCode/UserInterface/RiuQwtPlotCurve.cpp +++ b/ApplicationLibCode/UserInterface/RiuQwtPlotCurve.cpp @@ -226,7 +226,7 @@ void RiuQwtPlotCurve::setAppearance( RiuQwtPlotCurveDefines::LineStyleEnum const QColor& curveColor, const QBrush& fillBrush /* = QBrush( Qt::NoBrush )*/ ) { - QwtPlotCurve::CurveStyle curveStyle = QwtPlotCurve::NoCurve; + QwtPlotCurve::CurveStyle curveStyle = QwtPlotCurve::Lines; Qt::PenStyle penStyle = RiuQwtPlotCurveDefines::convertToPenStyle( lineStyle ); // Qwt bug workaround (#4135): need to set 0 curve thickness for STYLE_NONE From e984e634e79b3a6d0bc19e0ee95de0c5c3d45c6a Mon Sep 17 00:00:00 2001 From: Kristian Bendiksen Date: Wed, 10 Aug 2022 08:35:17 +0200 Subject: [PATCH 049/129] Well Log Plot: Avoid hard-coded axis (gave incorrect axis labeling). --- .../ProjectDataModel/WellLog/RimWellLogExtractionCurve.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogExtractionCurve.cpp b/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogExtractionCurve.cpp index 307999ac3d..8b84b92e7e 100644 --- a/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogExtractionCurve.cpp +++ b/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogExtractionCurve.cpp @@ -394,7 +394,7 @@ void RimWellLogExtractionCurve::onLoadDataAndUpdate( bool updateParentPlot ) RiuQwtPlotWidget* viewer = wellLogTrack->viewer(); if ( viewer ) { - viewer->setAxisTitleText( RiuPlotAxis::defaultLeft(), "PL/" + wellLogPlot->depthAxisTitle() ); + viewer->setAxisTitleText( wellLogPlot->depthAxis(), "PL/" + wellLogPlot->depthAxisTitle() ); } } From d9aa8bd6d230e448bd8a22424a4891d627da041c Mon Sep 17 00:00:00 2001 From: Kristian Bendiksen Date: Wed, 10 Aug 2022 08:39:03 +0200 Subject: [PATCH 050/129] #9092 WLP: show only axis for first and last track. --- .../ProjectDataModel/RimDepthTrackPlot.cpp | 33 +++++++++++++++++++ .../ProjectDataModel/RimDepthTrackPlot.h | 3 ++ .../WellLog/RimWellLogTrack.cpp | 10 +++++- .../UserInterface/RiuWellLogTrack.cpp | 11 +++++-- 4 files changed, 53 insertions(+), 4 deletions(-) diff --git a/ApplicationLibCode/ProjectDataModel/RimDepthTrackPlot.cpp b/ApplicationLibCode/ProjectDataModel/RimDepthTrackPlot.cpp index 59045f5ac8..e7d52b4510 100644 --- a/ApplicationLibCode/ProjectDataModel/RimDepthTrackPlot.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimDepthTrackPlot.cpp @@ -767,6 +767,39 @@ void RimDepthTrackPlot::onPlotsReordered( const SignalEmitter* emitter ) recreatePlotWidgets(); loadDataAndUpdate(); } + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +bool RimDepthTrackPlot::isFirstVisibleTrack( RimWellLogTrack* track ) +{ + // Find first visible track + auto findFirstVisibleTrack = [this]() { + auto plots = visiblePlots(); + if ( !plots.empty() ) return plots.front(); + return static_cast( nullptr ); + }; + + auto firstVisibleTrack = findFirstVisibleTrack(); + return firstVisibleTrack && firstVisibleTrack == track; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +bool RimDepthTrackPlot::isLastVisibleTrack( RimWellLogTrack* track ) +{ + // Find last visible track + auto findLastVisibleTrack = [this]() { + auto plots = visiblePlots(); + if ( !plots.empty() ) return plots.back(); + return static_cast( nullptr ); + }; + + auto lastVisibleTrack = findLastVisibleTrack(); + return lastVisibleTrack && lastVisibleTrack == track; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/RimDepthTrackPlot.h b/ApplicationLibCode/ProjectDataModel/RimDepthTrackPlot.h index 2c86032c84..e1661f0e3f 100644 --- a/ApplicationLibCode/ProjectDataModel/RimDepthTrackPlot.h +++ b/ApplicationLibCode/ProjectDataModel/RimDepthTrackPlot.h @@ -146,6 +146,9 @@ public: RiaDefines::DepthUnitType caseDepthUnit() const; + bool isFirstVisibleTrack( RimWellLogTrack* track ); + bool isLastVisibleTrack( RimWellLogTrack* track ); + protected: QImage snapshotWindowContent() override; diff --git a/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogTrack.cpp b/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogTrack.cpp index f7bc5ed4ac..0b7223e2c3 100644 --- a/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogTrack.cpp +++ b/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogTrack.cpp @@ -1290,13 +1290,21 @@ void RimWellLogTrack::onLoadDataAndUpdate() if ( wellLogPlot->depthOrientation() == RimDepthTrackPlot::DepthOrientation::VERTICAL ) { + // Show depth axis only for the first track (on the left side) + bool isFirstTrack = wellLogPlot->isFirstVisibleTrack( this ); m_plotWidget->setAxisEnabled( QwtAxis::XTop, true ); m_plotWidget->setAxisEnabled( QwtAxis::XBottom, false ); + m_plotWidget->setAxisEnabled( QwtAxis::YLeft, isFirstTrack ); + m_plotWidget->setAxisEnabled( QwtAxis::YRight, false ); } else { + // Show depth axis only for the last track (on the bottom side) + bool isLastTrack = wellLogPlot->isLastVisibleTrack( this ); m_plotWidget->setAxisEnabled( QwtAxis::XTop, false ); - m_plotWidget->setAxisEnabled( QwtAxis::XBottom, true ); + m_plotWidget->setAxisEnabled( QwtAxis::XBottom, isLastTrack ); + m_plotWidget->setAxisEnabled( QwtAxis::YLeft, true ); + m_plotWidget->setAxisEnabled( QwtAxis::YRight, false ); } } diff --git a/ApplicationLibCode/UserInterface/RiuWellLogTrack.cpp b/ApplicationLibCode/UserInterface/RiuWellLogTrack.cpp index 73cd2fe029..a26818c3a3 100644 --- a/ApplicationLibCode/UserInterface/RiuWellLogTrack.cpp +++ b/ApplicationLibCode/UserInterface/RiuWellLogTrack.cpp @@ -135,10 +135,14 @@ static WellLogCurveInfoTextProvider wellLogCurveInfoTextProvider; RiuWellLogTrack::RiuWellLogTrack( RimWellLogTrack* track, QWidget* parent /*= nullptr */ ) : RiuQwtPlotWidget( track, parent ) { + RimWellLogPlot* wlp = nullptr; + track->firstAncestorOfType( wlp ); + + bool isVertical = ( wlp && wlp->depthOrientation() == RimDepthTrackPlot::DepthOrientation::VERTICAL ); setAxisEnabled( QwtAxis::YLeft, true ); setAxisEnabled( QwtAxis::YRight, false ); - setAxisEnabled( QwtAxis::XTop, true ); - setAxisEnabled( QwtAxis::XBottom, true ); + setAxisEnabled( QwtAxis::XTop, !isVertical ); + setAxisEnabled( QwtAxis::XBottom, isVertical ); new RiuWellLogCurvePointTracker( this->qwtPlot(), &wellLogCurveInfoTextProvider, track ); } @@ -166,6 +170,7 @@ void RiuWellLogTrack::setAxisEnabled( QwtAxis::Position axis, bool enabled ) qwtPlot()->axisScaleDraw( axis )->setMinimumExtent( axisExtent( plotAxis ) ); qwtPlot()->axisWidget( axis )->setMargin( 0 ); - setAxisTitleEnabled( plotAxis, true ); } + + setAxisTitleEnabled( plotAxis, enabled ); } From 34cdd1f0d75d916e18d4c8e64c6a0a50fb30ac60 Mon Sep 17 00:00:00 2001 From: Kristian Bendiksen Date: Fri, 12 Aug 2022 08:36:52 +0200 Subject: [PATCH 051/129] Well Log Plot: avoid hard-coding depth/value axis --- .../ProjectDataModel/WellLog/RimWellLogCurve.cpp | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogCurve.cpp b/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogCurve.cpp index 7f2510c472..108161fa21 100644 --- a/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogCurve.cpp +++ b/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogCurve.cpp @@ -231,12 +231,15 @@ void RimWellLogCurve::updateCurveAppearance() RimDepthTrackPlot* wellLogPlot = nullptr; firstAncestorOrThisOfType( wellLogPlot ); - if ( wellLogPlot ) orientation = wellLogPlot->depthOrientation(); - - if ( m_plotCurve ) + if ( wellLogPlot ) { - m_plotCurve->setXAxis( RiuPlotAxis::defaultTop() ); - m_plotCurve->setYAxis( RiuPlotAxis::defaultLeft() ); + orientation = wellLogPlot->depthOrientation(); + + if ( m_plotCurve ) + { + m_plotCurve->setXAxis( wellLogPlot->valueAxis() ); + m_plotCurve->setYAxis( wellLogPlot->depthAxis() ); + } } if ( fillStyle() != Qt::BrushStyle::NoBrush ) @@ -252,7 +255,7 @@ void RimWellLogCurve::updateCurveAppearance() else { qwtPlotCurve->setOrientation( Qt::Vertical ); - qwtPlotCurve->setBaseline( 0.0 ); + qwtPlotCurve->setBaseline( -std::numeric_limits::infinity() ); } } } From 29cf555b59af06cfe4e1e85cb4a22ca8d5fa377b Mon Sep 17 00:00:00 2001 From: Kristian Bendiksen Date: Fri, 12 Aug 2022 10:46:26 +0200 Subject: [PATCH 052/129] Multiplot/WLP: fix missing update of title font size --- ApplicationLibCode/UserInterface/RiuMultiPlotPage.cpp | 2 ++ ApplicationLibCode/UserInterface/RiuWellLogPlot.cpp | 1 + 2 files changed, 3 insertions(+) diff --git a/ApplicationLibCode/UserInterface/RiuMultiPlotPage.cpp b/ApplicationLibCode/UserInterface/RiuMultiPlotPage.cpp index 186811e92f..29fd299325 100644 --- a/ApplicationLibCode/UserInterface/RiuMultiPlotPage.cpp +++ b/ApplicationLibCode/UserInterface/RiuMultiPlotPage.cpp @@ -577,6 +577,7 @@ void RiuMultiPlotPage::performUpdate( RiaDefines::MultiPlotPageUpdateType whatTo if ( whatToUpdate == RiaDefines::MultiPlotPageUpdateType::ALL ) { applyLook(); + updateTitleFont(); updateMarginsFromPageLayout(); reinsertPlotWidgets(); @@ -594,6 +595,7 @@ void RiuMultiPlotPage::performUpdate( RiaDefines::MultiPlotPageUpdateType whatTo if ( ( whatToUpdate & RiaDefines::MultiPlotPageUpdateType::TITLE ) == RiaDefines::MultiPlotPageUpdateType::TITLE ) { + updateTitleFont(); updateSubTitles(); } } diff --git a/ApplicationLibCode/UserInterface/RiuWellLogPlot.cpp b/ApplicationLibCode/UserInterface/RiuWellLogPlot.cpp index caf9ad6658..47fb3c94bb 100644 --- a/ApplicationLibCode/UserInterface/RiuWellLogPlot.cpp +++ b/ApplicationLibCode/UserInterface/RiuWellLogPlot.cpp @@ -158,6 +158,7 @@ void RiuWellLogPlot::performUpdate( RiaDefines::MultiPlotPageUpdateType /* whatT reinsertPlotWidgets(); reinsertScrollbar(); + updateTitleFont(); int axisShift = alignCanvasTops(); alignScrollbar( axisShift ); alignAxes(); From 613ab6279d84f43a50aad098ed044e8550fad786 Mon Sep 17 00:00:00 2001 From: Kristian Bendiksen Date: Fri, 12 Aug 2022 14:34:54 +0200 Subject: [PATCH 053/129] #9117 Summary/Well Log Plot: fix missing update on legend font size change. --- .../UserInterface/RiuMultiPlotPage.cpp | 44 +++++++++++++++---- .../UserInterface/RiuMultiPlotPage.h | 3 ++ .../UserInterface/RiuSummaryMultiPlotPage.cpp | 11 +---- 3 files changed, 40 insertions(+), 18 deletions(-) diff --git a/ApplicationLibCode/UserInterface/RiuMultiPlotPage.cpp b/ApplicationLibCode/UserInterface/RiuMultiPlotPage.cpp index 29fd299325..6a89c8450b 100644 --- a/ApplicationLibCode/UserInterface/RiuMultiPlotPage.cpp +++ b/ApplicationLibCode/UserInterface/RiuMultiPlotPage.cpp @@ -40,6 +40,7 @@ #include "RiuQwtPlotLegend.h" #include "RiuQwtPlotTools.h" #include "RiuQwtPlotWidget.h" +#include "qwt_legend_label.h" #ifdef USE_QTCHARTS #include "RiuQtChartsPlotWidget.h" #endif @@ -683,15 +684,8 @@ void RiuMultiPlotPage::reinsertPlotWidgets() { if ( m_plotDefinition->legendsVisible() ) { - int legendColumns = 1; - if ( m_plotDefinition->legendsHorizontal() ) - { - legendColumns = 0; // unlimited - } - legends[visibleIndex]->setMaxColumns( legendColumns ); - QFont legendFont = legends[visibleIndex]->font(); - legendFont.setPixelSize( m_legendFontPixelSize ); - legends[visibleIndex]->setFont( legendFont ); + updateLegendColumns( legends[visibleIndex] ); + updateLegendFont( legends[visibleIndex] ); legends[visibleIndex]->show(); } else @@ -714,6 +708,38 @@ void RiuMultiPlotPage::reinsertPlotWidgets() } } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RiuMultiPlotPage::updateLegendFont( RiuQwtPlotLegend* legend ) +{ + QFont legendFont = legend->font(); + legendFont.setPixelSize( m_legendFontPixelSize ); + + // Set font size for all existing labels + QList labels = legend->findChildren(); + for ( QwtLegendLabel* label : labels ) + { + label->setFont( legendFont ); + } + + legend->setFont( legendFont ); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RiuMultiPlotPage::updateLegendColumns( RiuQwtPlotLegend* legend ) +{ + int legendColumns = 1; + if ( m_plotDefinition->legendsHorizontal() ) + { + legendColumns = 0; // unlimited + } + + legend->setMaxColumns( legendColumns ); +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/UserInterface/RiuMultiPlotPage.h b/ApplicationLibCode/UserInterface/RiuMultiPlotPage.h index 2427bf340e..fe203c7b92 100644 --- a/ApplicationLibCode/UserInterface/RiuMultiPlotPage.h +++ b/ApplicationLibCode/UserInterface/RiuMultiPlotPage.h @@ -106,6 +106,9 @@ protected: bool hasHeightForWidth() const override; void updateMarginsFromPageLayout(); + void updateLegendColumns( RiuQwtPlotLegend* legend ); + void updateLegendFont( RiuQwtPlotLegend* legend ); + std::pair rowAndColumnCount( int plotWidgetCount ) const; void alignAxes(); diff --git a/ApplicationLibCode/UserInterface/RiuSummaryMultiPlotPage.cpp b/ApplicationLibCode/UserInterface/RiuSummaryMultiPlotPage.cpp index 528aa649ef..7fa24a1b9e 100644 --- a/ApplicationLibCode/UserInterface/RiuSummaryMultiPlotPage.cpp +++ b/ApplicationLibCode/UserInterface/RiuSummaryMultiPlotPage.cpp @@ -130,15 +130,8 @@ void RiuSummaryMultiPlotPage::reinsertPlotWidgets() { if ( m_plotDefinition->legendsVisible() && !legends[visibleIndex]->isEmpty() ) { - int legendColumns = 1; - if ( m_plotDefinition->legendsHorizontal() ) - { - legendColumns = 0; // unlimited - } - legends[visibleIndex]->setMaxColumns( legendColumns ); - QFont legendFont = legends[visibleIndex]->font(); - legendFont.setPixelSize( m_legendFontPixelSize ); - legends[visibleIndex]->setFont( legendFont ); + updateLegendColumns( legends[visibleIndex] ); + updateLegendFont( legends[visibleIndex] ); legends[visibleIndex]->show(); } else From 4b1a6b48a55291fe5788194b2286636e316f267a Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Mon, 15 Aug 2022 16:55:17 +0200 Subject: [PATCH 054/129] Show well completion annotations in horizontal plots (#9193) --- .../Application/RiaPlotDefines.cpp | 22 +++ .../Application/RiaPlotDefines.h | 5 +- .../ProjectDataModel/RimDepthTrackPlot.cpp | 50 +++++- .../ProjectDataModel/RimDepthTrackPlot.h | 5 + .../WellLog/RimWellLogTrack.cpp | 8 +- .../UserInterface/RiuPlotCurveSymbol.h | 3 +- .../UserInterface/RiuQwtSymbol.cpp | 12 ++ .../RiuWellPathComponentPlotItem.cpp | 149 +++++++++++++----- .../RiuWellPathComponentPlotItem.h | 50 +++--- 9 files changed, 227 insertions(+), 77 deletions(-) diff --git a/ApplicationLibCode/Application/RiaPlotDefines.cpp b/ApplicationLibCode/Application/RiaPlotDefines.cpp index 6ee4a9f171..49ae37cdc5 100644 --- a/ApplicationLibCode/Application/RiaPlotDefines.cpp +++ b/ApplicationLibCode/Application/RiaPlotDefines.cpp @@ -77,6 +77,28 @@ bool RiaDefines::isVertical( RiaDefines::PlotAxis axis ) return ( axis == RiaDefines::PlotAxis::PLOT_AXIS_LEFT || axis == RiaDefines::PlotAxis::PLOT_AXIS_RIGHT ); } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RiaDefines::PlotAxis RiaDefines::opposite( PlotAxis axis ) +{ + switch ( axis ) + { + case RiaDefines::PlotAxis::PLOT_AXIS_BOTTOM: + return RiaDefines::PlotAxis::PLOT_AXIS_TOP; + case RiaDefines::PlotAxis::PLOT_AXIS_TOP: + return RiaDefines::PlotAxis::PLOT_AXIS_BOTTOM; + case RiaDefines::PlotAxis::PLOT_AXIS_LEFT: + return RiaDefines::PlotAxis::PLOT_AXIS_RIGHT; + case RiaDefines::PlotAxis::PLOT_AXIS_RIGHT: + return RiaDefines::PlotAxis::PLOT_AXIS_LEFT; + } + + // Should never come here + CVF_ASSERT( false ); + return {}; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/Application/RiaPlotDefines.h b/ApplicationLibCode/Application/RiaPlotDefines.h index e333e0ca31..a8b9834c0f 100644 --- a/ApplicationLibCode/Application/RiaPlotDefines.h +++ b/ApplicationLibCode/Application/RiaPlotDefines.h @@ -63,8 +63,9 @@ double minimumDefaultValuePlot(); double minimumDefaultLogValuePlot(); double maximumDefaultValuePlot(); -bool isHorizontal( PlotAxis axis ); -bool isVertical( PlotAxis axis ); +bool isHorizontal( PlotAxis axis ); +bool isVertical( PlotAxis axis ); +PlotAxis opposite( PlotAxis axis ); double scalingFactor( QPaintDevice* paintDevice ); diff --git a/ApplicationLibCode/ProjectDataModel/RimDepthTrackPlot.cpp b/ApplicationLibCode/ProjectDataModel/RimDepthTrackPlot.cpp index e7d52b4510..f75c100eab 100644 --- a/ApplicationLibCode/ProjectDataModel/RimDepthTrackPlot.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimDepthTrackPlot.cpp @@ -1222,10 +1222,17 @@ RimDepthTrackPlot::DepthOrientation RimDepthTrackPlot::depthOrientation() const //-------------------------------------------------------------------------------------------------- RiuPlotAxis RimDepthTrackPlot::depthAxis() const { - if ( m_depthOrientation() == RimDepthTrackPlot::DepthOrientation::VERTICAL ) - return RiuPlotAxis::defaultLeft(); - else - return RiuPlotAxis::defaultBottom(); + return depthAxis( m_depthOrientation() ); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RiuPlotAxis RimDepthTrackPlot::depthAxis( DepthOrientation depthOrientation ) +{ + if ( depthOrientation == RimDepthTrackPlot::DepthOrientation::VERTICAL ) return RiuPlotAxis::defaultLeft(); + + return RiuPlotAxis::defaultBottom(); } //-------------------------------------------------------------------------------------------------- @@ -1233,10 +1240,37 @@ RiuPlotAxis RimDepthTrackPlot::depthAxis() const //-------------------------------------------------------------------------------------------------- RiuPlotAxis RimDepthTrackPlot::valueAxis() const { - if ( m_depthOrientation() == RimDepthTrackPlot::DepthOrientation::VERTICAL ) - return RiuPlotAxis::defaultTop(); - else - return RiuPlotAxis::defaultLeft(); + return valueAxis( m_depthOrientation() ); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RiuPlotAxis RimDepthTrackPlot::valueAxis( DepthOrientation depthOrientation ) +{ + if ( depthOrientation == RimDepthTrackPlot::DepthOrientation::VERTICAL ) return RiuPlotAxis::defaultTop(); + + return RiuPlotAxis::defaultLeft(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RiuPlotAxis RimDepthTrackPlot::annotationAxis() const +{ + return annotationAxis( m_depthOrientation() ); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RiuPlotAxis RimDepthTrackPlot::annotationAxis( DepthOrientation depthOrientation ) +{ + auto riuAxis = valueAxis( depthOrientation ); + + auto oppositeAxis = RiaDefines::opposite( riuAxis.axis() ); + + return RiuPlotAxis( oppositeAxis ); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/RimDepthTrackPlot.h b/ApplicationLibCode/ProjectDataModel/RimDepthTrackPlot.h index e1661f0e3f..403c601d80 100644 --- a/ApplicationLibCode/ProjectDataModel/RimDepthTrackPlot.h +++ b/ApplicationLibCode/ProjectDataModel/RimDepthTrackPlot.h @@ -107,6 +107,7 @@ public: RimDepthTrackPlot::DepthOrientation depthOrientation() const; RiuPlotAxis depthAxis() const; RiuPlotAxis valueAxis() const; + RiuPlotAxis annotationAxis() const; void setAutoScalePropertyValuesEnabled( bool enabled ); void setAutoScaleDepthValuesEnabled( bool enabled ); @@ -149,6 +150,10 @@ public: bool isFirstVisibleTrack( RimWellLogTrack* track ); bool isLastVisibleTrack( RimWellLogTrack* track ); + static RiuPlotAxis depthAxis( DepthOrientation depthOrientation ); + static RiuPlotAxis valueAxis( DepthOrientation depthOrientation ); + static RiuPlotAxis annotationAxis( DepthOrientation depthOrientation ); + protected: QImage snapshotWindowContent() override; diff --git a/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogTrack.cpp b/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogTrack.cpp index 0b7223e2c3..0c5f6aeb3f 100644 --- a/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogTrack.cpp +++ b/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogTrack.cpp @@ -452,7 +452,7 @@ void RimWellLogTrack::calculateDepthZoomRange() { double minObjectDepth = HUGE_VAL; double maxObjectDepth = -HUGE_VAL; - if ( plotObject->yValueRange( &minObjectDepth, &maxObjectDepth ) ) + if ( plotObject->depthValueRange( &minObjectDepth, &maxObjectDepth ) ) { if ( minObjectDepth < minDepth ) { @@ -522,7 +522,7 @@ void RimWellLogTrack::updatePropertyValueZoom() { m_plotWidget->setAxisRange( RiuPlotAxis::defaultBottom(), componentRangeMin, componentRangeMax ); } - else if ( wellLogPlot->depthOrientation() == RimDepthTrackPlot::DepthOrientation::VERTICAL ) + else { m_plotWidget->setAxisRange( RiuPlotAxis::defaultRight(), componentRangeMin, componentRangeMax ); } @@ -3258,11 +3258,13 @@ void RimWellLogTrack::updateWellPathAttributesOnPlot() RimDepthTrackPlot* wellLogPlot; this->firstAncestorOrThisOfTypeAsserted( wellLogPlot ); - RimWellLogPlot::DepthTypeEnum depthType = wellLogPlot->depthType(); + RimWellLogPlot::DepthTypeEnum depthType = wellLogPlot->depthType(); + auto depthOrientation = wellLogPlot->depthOrientation(); for ( auto& attributePlotObject : m_wellPathAttributePlotObjects ) { attributePlotObject->setDepthType( depthType ); + attributePlotObject->setDepthOrientation( depthOrientation ); attributePlotObject->setShowLabel( m_showWellPathComponentLabels() ); attributePlotObject->loadDataAndUpdate( false ); attributePlotObject->setParentPlotNoReplot( m_plotWidget->qwtPlot() ); diff --git a/ApplicationLibCode/UserInterface/RiuPlotCurveSymbol.h b/ApplicationLibCode/UserInterface/RiuPlotCurveSymbol.h index 93ca53d803..a0d8c9a9a8 100644 --- a/ApplicationLibCode/UserInterface/RiuPlotCurveSymbol.h +++ b/ApplicationLibCode/UserInterface/RiuPlotCurveSymbol.h @@ -60,7 +60,8 @@ public: SYMBOL_STAR2, SYMBOL_HEXAGON, SYMBOL_LEFT_TRIANGLE, - SYMBOL_RIGHT_TRIANGLE + SYMBOL_RIGHT_TRIANGLE, + SYMBOL_DOWN_ALIGNED_TRIANGLE }; RiuPlotCurveSymbol( PointSymbolEnum riuStyle, diff --git a/ApplicationLibCode/UserInterface/RiuQwtSymbol.cpp b/ApplicationLibCode/UserInterface/RiuQwtSymbol.cpp index b8f292b726..c4ecb95160 100644 --- a/ApplicationLibCode/UserInterface/RiuQwtSymbol.cpp +++ b/ApplicationLibCode/UserInterface/RiuQwtSymbol.cpp @@ -61,6 +61,18 @@ RiuQwtSymbol::RiuQwtSymbol( PointSymbolEnum riuStyle, const QString& label, Labe case SYMBOL_DOWN_TRIANGLE: style = QwtSymbol::DTriangle; break; + case SYMBOL_DOWN_ALIGNED_TRIANGLE: + style = QwtSymbol::Path; + { + QPainterPath path; + path.moveTo( 0, 0 ); + path.lineTo( 0, -10 ); + path.lineTo( -10, -10 ); + path.lineTo( 0, 0 ); + setPath( path ); + setPinPoint( QPointF( 0, -10 ) ); + } + break; case SYMBOL_LEFT_ALIGNED_TRIANGLE: style = QwtSymbol::Path; { diff --git a/ApplicationLibCode/UserInterface/RiuWellPathComponentPlotItem.cpp b/ApplicationLibCode/UserInterface/RiuWellPathComponentPlotItem.cpp index 94abab598d..0928c99922 100644 --- a/ApplicationLibCode/UserInterface/RiuWellPathComponentPlotItem.cpp +++ b/ApplicationLibCode/UserInterface/RiuWellPathComponentPlotItem.cpp @@ -20,7 +20,9 @@ #include "RiaColorTables.h" #include "RiaColorTools.h" +#include "RiaPlotDefines.h" +#include "RimDepthTrackPlot.h" #include "RimFishbones.h" #include "RimFracture.h" #include "RimFractureTemplate.h" @@ -33,6 +35,7 @@ #include "RimWellPathValve.h" #include "RigWellPath.h" +#include "RiuPlotAxis.h" #include "RiuQwtPlotTools.h" #include "qwt_plot.h" @@ -51,6 +54,7 @@ RiuWellPathComponentPlotItem::RiuWellPathComponentPlotItem( const RimWellPath* w , m_componentType( RiaDefines::WellPathComponentType::WELL_PATH ) , m_columnOffset( 0.0 ) , m_depthType( RiaDefines::DepthTypeEnum::MEASURED_DEPTH ) + , m_depthOrientation( RimWellLogPlot::DepthOrientation::VERTICAL ) , m_maxColumnOffset( 0.0 ) , m_showLabel( false ) { @@ -181,8 +185,18 @@ void RiuWellPathComponentPlotItem::onLoadDataAndUpdate( bool updateParentPlot ) double posMax = 0.75 + m_columnOffset; addColumnFeature( -posMax, -posMin, startDepth, endDepth, componentColor() ); addColumnFeature( posMin, posMax, startDepth, endDepth, componentColor() ); - addMarker( -posMax, endDepth, 12, RiuPlotCurveSymbol::SYMBOL_LEFT_ANGLED_TRIANGLE, componentColor() ); - addMarker( posMax, endDepth, 12, RiuPlotCurveSymbol::SYMBOL_RIGHT_ANGLED_TRIANGLE, componentColor() ); + + if ( m_depthOrientation == RimWellLogPlot::DepthOrientation::VERTICAL ) + { + addMarker( -posMax, endDepth, 12, RiuPlotCurveSymbol::SYMBOL_LEFT_ANGLED_TRIANGLE, componentColor() ); + addMarker( posMax, endDepth, 12, RiuPlotCurveSymbol::SYMBOL_RIGHT_ANGLED_TRIANGLE, componentColor() ); + } + else + { + addMarker( -posMax, endDepth, 12, RiuPlotCurveSymbol::SYMBOL_DOWN_ALIGNED_TRIANGLE, componentColor() ); + addMarker( posMax, endDepth, 12, RiuPlotCurveSymbol::SYMBOL_LEFT_ANGLED_TRIANGLE, componentColor() ); + } + addMarker( casingTrackEnd, endDepth, 12, @@ -209,18 +223,20 @@ void RiuWellPathComponentPlotItem::onLoadDataAndUpdate( bool updateParentPlot ) const double markerSpacing = 30; const int markerSize = 6; double markerDepth = startDepth; + + auto plotSymbol1 = RiuPlotCurveSymbol::SYMBOL_LEFT_ALIGNED_TRIANGLE; + auto plotSymbol2 = RiuPlotCurveSymbol::SYMBOL_RIGHT_ALIGNED_TRIANGLE; + + if ( m_depthOrientation == RimWellLogPlot::DepthOrientation::HORIZONTAL ) + { + plotSymbol1 = RiuPlotCurveSymbol::SYMBOL_DOWN_TRIANGLE; + plotSymbol2 = RiuPlotCurveSymbol::SYMBOL_UP_TRIANGLE; + } + while ( markerDepth < endDepth - 5 ) { - addMarker( -casingTrackEnd, - markerDepth, - markerSize, - RiuPlotCurveSymbol::SYMBOL_LEFT_ALIGNED_TRIANGLE, - componentColor() ); - addMarker( casingTrackEnd, - markerDepth, - markerSize, - RiuPlotCurveSymbol::SYMBOL_RIGHT_ALIGNED_TRIANGLE, - componentColor() ); + addMarker( -casingTrackEnd, markerDepth, markerSize, plotSymbol1, componentColor() ); + addMarker( casingTrackEnd, markerDepth, markerSize, plotSymbol2, componentColor() ); markerDepth += markerSpacing; } @@ -396,35 +412,36 @@ std::pair RiuWellPathComponentPlotItem::depthsOfDepthType() cons //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RiuWellPathComponentPlotItem::addMarker( double posX, +void RiuWellPathComponentPlotItem::addMarker( double position, double depth, int size, RiuPlotCurveSymbol::PointSymbolEnum symbolType, cvf::Color4f baseColor, - const QString& label /*= QString("")*/, - Qt::Alignment labelAlignment /*= Qt::AlignTop*/, - Qt::Orientation labelOrientation /*= Qt::Vertical*/, - bool drawLine /*= false*/, - bool contrastTextColor /*= true*/ ) + const QString& label /*= QString( "" )*/, + Qt::Alignment labelAlignment /*= Qt::AlignVCenter | Qt::AlignRight*/, + Qt::Orientation labelOrientation /*= Qt::Horizontal*/, + bool drawLine /*= false*/, + bool contrastTextColor /*= false */ ) { QwtPlotItem* marker = - createMarker( posX, depth, size, symbolType, baseColor, label, labelAlignment, labelOrientation, drawLine, contrastTextColor ); + createMarker( position, depth, size, symbolType, baseColor, label, labelAlignment, labelOrientation, drawLine, contrastTextColor ); m_combinedComponentGroup.addPlotItem( marker ); } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -QwtPlotItem* RiuWellPathComponentPlotItem::createMarker( double posX, - double depth, - int size, - RiuPlotCurveSymbol::PointSymbolEnum symbolType, - cvf::Color4f baseColor, - const QString& label /*= QString("")*/, - Qt::Alignment labelAlignment /*= Qt::AlignTop*/, - Qt::Orientation labelOrientation /*= Qt::Vertical*/, - bool drawLine /*= false*/, - bool contrastTextColor /*= true*/ ) +QwtPlotItem* + RiuWellPathComponentPlotItem::createMarker( double position, + double depth, + int size, + RiuPlotCurveSymbol::PointSymbolEnum symbolType, + cvf::Color4f baseColor, + const QString& label /*= QString( "" )*/, + Qt::Alignment labelAlignment /*= Qt::AlignVCenter | Qt::AlignRight*/, + Qt::Orientation labelOrientation /*= Qt::Horizontal*/, + bool drawLine /*= false*/, + bool contrastTextColor /*= false */ ) { QColor bgColor = RiaColorTools::toQColor( baseColor ); QColor textColor = RiaColorTools::toQColor( baseColor.toColor3f(), 1.0 ); @@ -438,8 +455,19 @@ QwtPlotItem* RiuWellPathComponentPlotItem::createMarker( double symbol->setColor( bgColor ); marker->setSymbol( symbol ); marker->setSpacing( 6 ); - marker->setXValue( posX ); - marker->setYValue( depth ); + + if ( m_depthOrientation == RimWellLogPlot::DepthOrientation::HORIZONTAL ) + { + marker->setXValue( depth ); + marker->setYValue( position ); + labelOrientation = Qt::Vertical; + labelAlignment = Qt::AlignTop; + } + else + { + marker->setXValue( position ); + marker->setYValue( depth ); + } if ( m_showLabel ) { @@ -455,7 +483,15 @@ QwtPlotItem* RiuWellPathComponentPlotItem::createMarker( double if ( drawLine ) { - marker->setLineStyle( QwtPlotMarker::HLine ); + if ( m_depthOrientation == RimWellLogPlot::DepthOrientation::HORIZONTAL ) + { + marker->setLineStyle( QwtPlotMarker::HLine ); + } + else + { + marker->setLineStyle( QwtPlotMarker::VLine ); + } + marker->setLinePen( bgColor, 2.0, Qt::SolidLine ); } return marker; @@ -464,13 +500,26 @@ QwtPlotItem* RiuWellPathComponentPlotItem::createMarker( double //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RiuWellPathComponentPlotItem::addColumnFeature( double startX, - double endX, +void RiuWellPathComponentPlotItem::addColumnFeature( double startPosition, + double endPosition, double startDepth, double endDepth, cvf::Color4f baseColor, - Qt::BrushStyle brushStyle /*= Qt::SolidPattern*/ ) + Qt::BrushStyle brushStyle /*= Qt::SolidPattern */ ) { + double startX = startPosition; + double endX = endPosition; + double startY = startDepth; + double endY = endDepth; + + if ( m_depthOrientation == RimWellLogPlot::DepthOrientation::HORIZONTAL ) + { + startX = startDepth; + endX = endDepth; + startY = startPosition; + endY = endPosition; + } + QColor baseQColor = RiaColorTools::toQColor( baseColor ); if ( brushStyle != Qt::SolidPattern ) { @@ -478,11 +527,11 @@ void RiuWellPathComponentPlotItem::addColumnFeature( double startX, QColor semiTransparentWhite( Qt::white ); semiTransparentWhite.setAlphaF( 0.9f ); QwtPlotItem* backgroundShape = - RiuQwtPlotTools::createBoxShape( label(), startX, endX, startDepth, endDepth, semiTransparentWhite, Qt::SolidPattern ); + RiuQwtPlotTools::createBoxShape( label(), startX, endX, startY, endY, semiTransparentWhite, Qt::SolidPattern ); m_combinedComponentGroup.addPlotItem( backgroundShape ); QwtPlotItem* patternShape = - RiuQwtPlotTools::createBoxShape( label(), startX, endX, startDepth, endDepth, baseQColor, brushStyle ); + RiuQwtPlotTools::createBoxShape( label(), startX, endX, startY, endY, baseQColor, brushStyle ); m_combinedComponentGroup.addPlotItem( patternShape ); if ( endX >= 0.0 ) { @@ -498,7 +547,7 @@ void RiuWellPathComponentPlotItem::addColumnFeature( double startX, else { QwtPlotItem* backgroundShape = - RiuQwtPlotTools::createBoxShape( label(), startX, endX, startDepth, endDepth, baseQColor, Qt::SolidPattern ); + RiuQwtPlotTools::createBoxShape( label(), startX, endX, startY, endY, baseQColor, Qt::SolidPattern ); m_combinedComponentGroup.addPlotItem( backgroundShape ); if ( endX >= 0.0 ) @@ -521,7 +570,7 @@ cvf::Color4f RiuWellPathComponentPlotItem::componentColor( float alpha /*= 1.0*/ //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -bool RiuWellPathComponentPlotItem::xValueRange( double* minimumValue, double* maximumValue ) const +bool RiuWellPathComponentPlotItem::propertyValueRange( double* minimumValue, double* maximumValue ) const { CVF_ASSERT( minimumValue && maximumValue ); *maximumValue = 1.0; @@ -532,7 +581,7 @@ bool RiuWellPathComponentPlotItem::xValueRange( double* minimumValue, double* ma //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -bool RiuWellPathComponentPlotItem::yValueRange( double* minimumValue, double* maximumValue ) const +bool RiuWellPathComponentPlotItem::depthValueRange( double* minimumValue, double* maximumValue ) const { CVF_ASSERT( minimumValue && maximumValue ); @@ -560,6 +609,14 @@ void RiuWellPathComponentPlotItem::setDepthType( RimWellLogPlot::DepthTypeEnum d m_depthType = depthType; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RiuWellPathComponentPlotItem::setDepthOrientation( RimWellLogPlot::DepthOrientation depthOrientation ) +{ + m_depthOrientation = depthOrientation; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -597,6 +654,18 @@ void RiuWellPathComponentPlotItem::attachToQwt() if ( m_parentQwtPlot ) { m_combinedComponentGroup.attach( m_parentQwtPlot ); + + auto riuAxis = RimDepthTrackPlot::annotationAxis( m_depthOrientation ); + auto qwtAxis = RiuQwtPlotTools::toQwtPlotAxisEnum( riuAxis.axis() ); + + if ( m_depthOrientation == RimWellLogPlot::DepthOrientation::VERTICAL ) + { + m_combinedComponentGroup.setXAxis( qwtAxis ); + } + else + { + m_combinedComponentGroup.setYAxis( qwtAxis ); + } } } diff --git a/ApplicationLibCode/UserInterface/RiuWellPathComponentPlotItem.h b/ApplicationLibCode/UserInterface/RiuWellPathComponentPlotItem.h index 3a28088fe7..82e297934b 100644 --- a/ApplicationLibCode/UserInterface/RiuWellPathComponentPlotItem.h +++ b/ApplicationLibCode/UserInterface/RiuWellPathComponentPlotItem.h @@ -60,37 +60,39 @@ public: RiaDefines::WellPathComponentType componentType() const; - bool xValueRange( double* minimumValue, double* maximumValue ) const; - bool yValueRange( double* minimumValue, double* maximumValue ) const; + bool propertyValueRange( double* minimumValue, double* maximumValue ) const; + bool depthValueRange( double* minimumValue, double* maximumValue ) const; void setShowLabel( bool showLabel ); void setDepthType( RimWellLogPlot::DepthTypeEnum depthType ); + void setDepthOrientation( RimWellLogPlot::DepthOrientation depthOrientation ); void setContributeToLegend( bool contributeToLegend ); - void setParentQwtPlotAndReplot( QwtPlot* plot ); void setParentPlotNoReplot( QwtPlot* plot ); void attachToQwt(); void detachFromQwt(); void reattachToQwt(); private: + void setParentQwtPlotAndReplot( QwtPlot* plot ); void calculateColumnOffsets( const RimWellPathComponentInterface* component ); void onLoadDataAndUpdate( bool updateParentPlot ); std::pair depthsOfDepthType() const; - void addMarker( double posX, - double depth, - int size, - RiuPlotCurveSymbol::PointSymbolEnum symbolType, - cvf::Color4f baseColor, - const QString& label = QString( "" ), - Qt::Alignment labelAlignment = Qt::AlignVCenter | Qt::AlignRight, - Qt::Orientation labelOrientation = Qt::Horizontal, - bool drawLine = false, - bool contrastTextColor = false ); - QwtPlotItem* createMarker( double posX, + void addMarker( double position, + double depth, + int size, + RiuPlotCurveSymbol::PointSymbolEnum symbolType, + cvf::Color4f baseColor, + const QString& label = QString( "" ), + Qt::Alignment labelAlignment = Qt::AlignVCenter | Qt::AlignRight, + Qt::Orientation labelOrientation = Qt::Horizontal, + bool drawLine = false, + bool contrastTextColor = false ); + + QwtPlotItem* createMarker( double position, double depth, int size, RiuPlotCurveSymbol::PointSymbolEnum symbolType, @@ -100,12 +102,13 @@ private: Qt::Orientation labelOrientation = Qt::Horizontal, bool drawLine = false, bool contrastTextColor = false ); - void addColumnFeature( double startX, - double endX, - double startDepth, - double endDepth, - cvf::Color4f baseColor, - Qt::BrushStyle brushStyle = Qt::SolidPattern ); + + void addColumnFeature( double startPosition, + double endPosition, + double startDepth, + double endDepth, + cvf::Color4f baseColor, + Qt::BrushStyle brushStyle = Qt::SolidPattern ); cvf::Color4f componentColor( float alpha = 1.0 ) const; @@ -121,9 +124,10 @@ private: double m_columnOffset; double m_maxColumnOffset; - RimWellLogPlot::DepthTypeEnum m_depthType; - QPointer m_parentQwtPlot; - RiuQwtPlotItemGroup m_combinedComponentGroup; + RimWellLogPlot::DepthTypeEnum m_depthType; + RimWellLogPlot::DepthOrientation m_depthOrientation; + QPointer m_parentQwtPlot; + RiuQwtPlotItemGroup m_combinedComponentGroup; bool m_showLabel; }; From d6ab69a1545ca1a7d916e9cc2230fc9e25c61881 Mon Sep 17 00:00:00 2001 From: jonjenssen <69144954+jonjenssen@users.noreply.github.com> Date: Mon, 15 Aug 2022 20:27:49 +0200 Subject: [PATCH 055/129] Link selection in 3D view with plots (#9195) * Allow well selections in 3D view to update well selection in summary plots and well log plots --- .../Resources/Link3DandPlots.png | Bin 0 -> 1291 bytes ApplicationExeCode/Resources/ResInsight.qrc | 1 + .../RimMainPlotCollection.cpp | 17 ++++++ .../ProjectDataModel/RimMainPlotCollection.h | 1 + .../Summary/RimSummaryMultiPlot.cpp | 19 ++++++ .../Summary/RimSummaryMultiPlot.h | 3 + .../Summary/RimSummaryPlotSourceStepping.cpp | 41 +++++++++++++ .../Summary/RimSummaryPlotSourceStepping.h | 2 + .../RimWellLogCurveCommonDataSource.cpp | 24 ++++++++ .../WellLog/RimWellLogCurveCommonDataSource.h | 3 + .../WellLog/RimWellLogPlot.cpp | 8 +++ .../ProjectDataModel/WellLog/RimWellLogPlot.h | 4 ++ .../UserInterface/RiuPlotMainWindow.cpp | 55 +++++++++++++++++- .../UserInterface/RiuPlotMainWindow.h | 9 ++- .../UserInterface/RiuViewerCommands.cpp | 2 + 15 files changed, 184 insertions(+), 5 deletions(-) create mode 100644 ApplicationExeCode/Resources/Link3DandPlots.png diff --git a/ApplicationExeCode/Resources/Link3DandPlots.png b/ApplicationExeCode/Resources/Link3DandPlots.png new file mode 100644 index 0000000000000000000000000000000000000000..b910be85b3363fea28b42cb9d9f108cc800cb55f GIT binary patch literal 1291 zcmV+m1@!ufP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vG?A^-p`A_1!6-I4$R1fWSoK~zXfrBq!^ z990-SGdugkEK8B_x0F(d+ih$#LMz2Av|3|@g!rKN;sY^FOqz&3m?p-=Cw*#+tuY24 ze5k3R5nHkKK`DwhLfWV##9{ztg~i?Sx7}U#e|BegX8i8#Aeb&|6VJ)rxqI*2@7#O7 zZ!YI{yPq5w7-+4puLs9*xGw}ZphlyBvkvc^dw+d)c5c|1xd%cnm+Mni^;J<6(c9bm z-y*3Lq~RghTrE&KJK+z8UNUBig16i47LUh+o}M0Ks00Fjq%VAod?E=P^+0HBhRI?z zCX0jDG!1kLWHK3J2w-EZ?S!`ML;TW3Z zz@8A2-ERDDp2L^nw-8ijAzDN@Y?a2U;@}gB1STgZF*-VG3~fWbF^>4?2yE^s7N6O~ zH@RW_8vg<9wSDN_`v%(Uo<+57pYe8a2o8q>U0q#hYirxCAo5ur{|eE_*9aa{FjrRz zXVo!0UEYC4(<6m<2&__B>UOI^z%kXI#e&vB4l zGL!=f;HI!m)Nbkm5R#PS@2`$vA-|5+C(MX6yYX1dYZP$%17bV(`Es~^Jwsv~y1VUg zxe9LZF&^3=^IFh7S2e0UD+w9P1(Ci)H+ft6Kn1+!2XV;Shfv6jJ9h#Q#eMMmRouSq zrT%`h#74RDqN&LZNy=ekV*?F64M^4{kyg^=N(R0UeSnK1`wanwGvThY9kaoM2#ock>yz61QOgj*0D-tyIx7G=mP8{Ywkxv0#Da&3DWdMXBdza#OVDfeZd)YLC-yGJ>3NR*Eh!-J63+q$iEPKL z&jjd1l$kAppendNextCurve.png AppendPrevCurve.png CheckOverlay16x16.png + Link3DandPlots.png fs_CellFace.glsl diff --git a/ApplicationLibCode/ProjectDataModel/RimMainPlotCollection.cpp b/ApplicationLibCode/ProjectDataModel/RimMainPlotCollection.cpp index 9f6e42d5c4..3a6e11c20f 100644 --- a/ApplicationLibCode/ProjectDataModel/RimMainPlotCollection.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimMainPlotCollection.cpp @@ -42,6 +42,7 @@ #include "RimStimPlanModelPlotCollection.h" #include "RimSummaryAddress.h" #include "RimSummaryCrossPlotCollection.h" +#include "RimSummaryMultiPlot.h" #include "RimSummaryMultiPlotCollection.h" #include "RimSummaryPlotCollection.h" #include "RimVfpPlotCollection.h" @@ -390,6 +391,22 @@ void RimMainPlotCollection::loadDataAndUpdateAllPlots() loadDataAndUpdatePlotCollectionsWithProgressInfo( plotCollections ); } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimMainPlotCollection::updateSelectedWell( QString wellName ) +{ + for ( auto plot : summaryMultiPlotCollection()->multiPlots() ) + { + plot->selectWell( wellName ); + } + + for ( auto plot : wellLogPlotCollection()->wellLogPlots() ) + { + plot->selectWell( wellName ); + } +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/RimMainPlotCollection.h b/ApplicationLibCode/ProjectDataModel/RimMainPlotCollection.h index 0dd87c344c..a76ee3c1ba 100644 --- a/ApplicationLibCode/ProjectDataModel/RimMainPlotCollection.h +++ b/ApplicationLibCode/ProjectDataModel/RimMainPlotCollection.h @@ -88,6 +88,7 @@ public: void ensureDefaultFlowPlotsAreCreated(); void ensureCalculationIdsAreAssigned(); void loadDataAndUpdateAllPlots(); + void updateSelectedWell( QString wellName ); protected: void initAfterRead() override; diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.cpp index 9266c311d5..5b50bb61fc 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.cpp @@ -57,6 +57,7 @@ #include "RiuSummaryMultiPlotBook.h" #include "RiuSummaryVectorSelectionUi.h" +#include "cafPdmUiCheckBoxEditor.h" #include "cafPdmUiComboBoxEditor.h" #include "cafPdmUiPushButtonEditor.h" #include "cafPdmUiTreeOrdering.h" @@ -143,8 +144,13 @@ RimSummaryMultiPlot::RimSummaryMultiPlot() m_appendPrevCurve.uiCapability()->setUiIconFromResourceString( ":/AppendPrevCurve.png" ); CAF_PDM_InitField( &m_linkSubPlotAxes, "LinkSubPlotAxes", true, "Link Sub Plot Axes" ); + caf::PdmUiNativeCheckBoxEditor::configureFieldForEditor( &m_linkSubPlotAxes ); CAF_PDM_InitField( &m_linkTimeAxis, "LinkTimeAxis", true, "Link Time Axis" ); + caf::PdmUiNativeCheckBoxEditor::configureFieldForEditor( &m_linkTimeAxis ); CAF_PDM_InitField( &m_autoAdjustAppearance, "AutoAdjustAppearance", true, "Auto Adjust Appearance" ); + caf::PdmUiNativeCheckBoxEditor::configureFieldForEditor( &m_autoAdjustAppearance ); + CAF_PDM_InitField( &m_allow3DSelectionLink, "Allow3DSelectionLink", true, "Allow Well Selection from 3D View" ); + caf::PdmUiNativeCheckBoxEditor::configureFieldForEditor( &m_allow3DSelectionLink ); CAF_PDM_InitFieldNoDefault( &m_axisRangeAggregation, "AxisRangeAggregation", "Axis Range Control" ); @@ -399,6 +405,9 @@ void RimSummaryMultiPlot::defineUiOrdering( QString uiConfigName, caf::PdmUiOrde dataSourceGroup->setCollapsedByDefault( true ); m_sourceStepping()->uiOrdering( uiConfigName, *dataSourceGroup ); + if ( m_sourceStepping->stepDimension() == SourceSteppingDimension::WELL ) + dataSourceGroup->add( &m_allow3DSelectionLink ); + auto titlesGroup = uiOrdering.addNewGroup( "Main Plot Settings" ); titlesGroup->setCollapsedByDefault( true ); titlesGroup->add( &m_autoPlotTitle ); @@ -1489,3 +1498,13 @@ void RimSummaryMultiPlot::updateStepDimensionFromDefault() { m_sourceStepping->setStepDimension( m_defaultStepDimension() ); } + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimSummaryMultiPlot::selectWell( QString wellName ) +{ + if ( !m_allow3DSelectionLink ) return; + if ( m_sourceStepping->stepDimension() != SourceSteppingDimension::WELL ) return; + m_sourceStepping->setStep( wellName ); +} diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.h b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.h index 5871d3851e..66357d832d 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.h +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.h @@ -111,6 +111,8 @@ public: void storeStepDimensionFromToolbar(); void updateStepDimensionFromDefault(); + void selectWell( QString wellName ); + protected: bool handleGlobalKeyEvent( QKeyEvent* keyEvent ) override; bool handleGlobalWheelEvent( QWheelEvent* wheelEvent ) override; @@ -154,6 +156,7 @@ private: caf::PdmField m_linkSubPlotAxes; caf::PdmField m_linkTimeAxis; caf::PdmField m_autoAdjustAppearance; + caf::PdmField m_allow3DSelectionLink; caf::PdmField m_hidePlotsWithValuesBelow; caf::PdmField m_plotFilterYAxisThreshold; diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlotSourceStepping.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlotSourceStepping.cpp index 6b859facbc..50c3d990b4 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlotSourceStepping.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlotSourceStepping.cpp @@ -239,11 +239,14 @@ QList { if ( fieldNeedingOptions == &m_vectorName ) { + m_cachedIdentifiers.clear(); + auto displayAndValueStrings = optionsForQuantity( analyzer ); for ( const auto& displayAndValue : displayAndValueStrings ) { options.append( caf::PdmOptionItemInfo( displayAndValue.first, displayAndValue.second ) ); + m_cachedIdentifiers.push_back( displayAndValue.first ); } if ( options.isEmpty() ) @@ -294,11 +297,14 @@ QList identifierTexts = analyzer->identifierTexts( category, secondaryIdentifier ); } + m_cachedIdentifiers.clear(); + if ( !identifierTexts.empty() ) { for ( const auto& text : identifierTexts ) { options.append( caf::PdmOptionItemInfo( text, text ) ); + m_cachedIdentifiers.push_back( text ); } } else @@ -1179,6 +1185,41 @@ void RimSummaryPlotSourceStepping::syncWithStepper( RimSummaryPlotSourceStepping } } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimSummaryPlotSourceStepping::setStep( QString stepIdentifier ) +{ + if ( std::count( m_cachedIdentifiers.begin(), m_cachedIdentifiers.end(), stepIdentifier ) == 0 ) return; + + switch ( m_stepDimension() ) + { + case RimSummaryDataSourceStepping::SourceSteppingDimension::WELL: + m_wellName.setValueWithFieldChanged( stepIdentifier ); + break; + + case RimSummaryDataSourceStepping::SourceSteppingDimension::GROUP: + m_groupName.setValueWithFieldChanged( stepIdentifier ); + break; + + case RimSummaryDataSourceStepping::SourceSteppingDimension::VECTOR: + m_vectorName.setValueWithFieldChanged( stepIdentifier ); + break; + + case RimSummaryDataSourceStepping::SourceSteppingDimension::BLOCK: + m_cellBlock.setValueWithFieldChanged( stepIdentifier ); + break; + + case RimSummaryDataSourceStepping::SourceSteppingDimension::AQUIFER: + case RimSummaryDataSourceStepping::SourceSteppingDimension::REGION: + case RimSummaryDataSourceStepping::SourceSteppingDimension::ENSEMBLE: + case RimSummaryDataSourceStepping::SourceSteppingDimension::SUMMARY_CASE: + default: + CAF_ASSERT( false ); // not supported for these dimensions, yet + return; + } +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlotSourceStepping.h b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlotSourceStepping.h index 9ce872bcc7..1280b00aec 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlotSourceStepping.h +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlotSourceStepping.h @@ -62,6 +62,7 @@ public: RimSummaryCaseCollection* stepEnsemble( int direction ); void syncWithStepper( RimSummaryPlotSourceStepping* other ); + void setStep( QString stepIdentifier ); RimSummaryDataSourceStepping::SourceSteppingDimension stepDimension() const; void setStepDimension( RimSummaryDataSourceStepping::SourceSteppingDimension dimension ); @@ -130,4 +131,5 @@ private: caf::PdmField m_includeEnsembleCasesForCaseStepping; RimSummaryDataSourceStepping::Axis m_sourceSteppingType; + std::vector m_cachedIdentifiers; }; diff --git a/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogCurveCommonDataSource.cpp b/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogCurveCommonDataSource.cpp index ae5efde4fd..a5a5d6660b 100644 --- a/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogCurveCommonDataSource.cpp +++ b/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogCurveCommonDataSource.cpp @@ -43,6 +43,7 @@ #include "RimWellPath.h" #include "RimWellPathCollection.h" +#include "cafPdmUiCheckBoxEditor.h" #include "cafPdmUiCheckBoxTristateEditor.h" #include "cafPdmUiComboBoxEditor.h" #include "cafPdmUiLineEditor.h" @@ -89,6 +90,9 @@ RimWellLogCurveCommonDataSource::RimWellLogCurveCommonDataSource() "", "Compute branches based on how simulation well cells are organized", "" ); + CAF_PDM_InitField( &m_allow3DSelectionLink, "Allow3DSelectionLink", true, "Allow Well Selection from 3D View" ); + caf::PdmUiNativeCheckBoxEditor::configureFieldForEditor( &m_allow3DSelectionLink ); + m_branchDetection.v() = caf::Tristate::State::PartiallyTrue; m_branchDetection.uiCapability()->setUiEditorTypeName( caf::PdmUiCheckBoxTristateEditor::uiEditorTypeName() ); CAF_PDM_InitField( &m_branchIndex, "Branch", -1, "Branch Index" ); @@ -1011,6 +1015,8 @@ void RimWellLogCurveCommonDataSource::defineUiOrdering( QString uiConfigName, ca else if ( trajectoryTypeToApply() == RimWellLogExtractionCurve::SIMULATION_WELL ) { group->add( &m_simWellName ); + group->add( &m_allow3DSelectionLink ); + if ( RiaSimWellBranchTools::simulationWellBranches( m_simWellName(), true ).size() > 1 ) { group->add( &m_branchDetection ); @@ -1124,3 +1130,21 @@ RifReaderRftInterface* RimWellLogCurveCommonDataSource::rftReader() return nullptr; } + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimWellLogCurveCommonDataSource::selectSimWell( QString wellName ) +{ + if ( !m_allow3DSelectionLink() ) return; + + auto* eclipseCase = dynamic_cast( m_case() ); + if ( eclipseCase ) + { + std::set sortedWellNames = eclipseCase->sortedSimWellNames(); + if ( std::count( sortedWellNames.begin(), sortedWellNames.end(), wellName ) > 0 ) + { + m_simWellName.setValueWithFieldChanged( wellName ); + } + } +} diff --git a/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogCurveCommonDataSource.h b/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogCurveCommonDataSource.h index 28c1a490e9..54b83959ef 100644 --- a/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogCurveCommonDataSource.h +++ b/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogCurveCommonDataSource.h @@ -80,6 +80,8 @@ public: int timeStepToApply() const; void setTimeStepToApply( int val ); + void selectSimWell( QString wellName ); + void resetDefaultOptions(); void analyseCurvesAndTracks( const std::vector& curves, const std::vector& tracks ); void analyseCurvesAndTracks(); @@ -116,6 +118,7 @@ private: caf::PdmField m_trajectoryType; caf::PdmPtrField m_wellPath; caf::PdmField m_simWellName; + caf::PdmField m_allow3DSelectionLink; caf::PdmField m_branchIndex; caf::PdmField m_branchDetection; caf::PdmField m_timeStep; diff --git a/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogPlot.cpp b/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogPlot.cpp index d16536f526..3e98fbbd8b 100644 --- a/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogPlot.cpp +++ b/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogPlot.cpp @@ -79,3 +79,11 @@ RimWellLogPlot& RimWellLogPlot::operator=( RimWellLogPlot&& rhs ) RimDepthTrackPlot::operator=( std::move( rhs ) ); return *this; } + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimWellLogPlot::selectWell( QString wellName ) +{ + if ( m_commonDataSourceEnabled ) m_commonDataSource->selectSimWell( wellName ); +} diff --git a/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogPlot.h b/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogPlot.h index dbc2995cac..b9be6ed157 100644 --- a/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogPlot.h +++ b/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogPlot.h @@ -23,6 +23,8 @@ #include "RimDepthTrackPlot.h" +#include + //================================================================================================== /// /// @@ -36,4 +38,6 @@ public: ~RimWellLogPlot() override; RimWellLogPlot& operator=( RimWellLogPlot&& rhs ); + + void selectWell( QString wellName ); }; diff --git a/ApplicationLibCode/UserInterface/RiuPlotMainWindow.cpp b/ApplicationLibCode/UserInterface/RiuPlotMainWindow.cpp index 8c4c6049f1..75fe6414c8 100644 --- a/ApplicationLibCode/UserInterface/RiuPlotMainWindow.cpp +++ b/ApplicationLibCode/UserInterface/RiuPlotMainWindow.cpp @@ -83,6 +83,8 @@ //-------------------------------------------------------------------------------------------------- RiuPlotMainWindow::RiuPlotMainWindow() : m_activePlotViewWindow( nullptr ) + , m_selection3DLinkEnabled( false ) + , m_toggleSelectionLinkAction( nullptr ) { m_mdiArea = new RiuMdiArea( this ); connect( m_mdiArea, SIGNAL( subWindowActivated( QMdiSubWindow* ) ), SLOT( slotSubWindowActivated( QMdiSubWindow* ) ) ); @@ -92,15 +94,18 @@ RiuPlotMainWindow::RiuPlotMainWindow() auto dockArea = dockManager()->setCentralWidget( widget ); dockArea->setVisible( true ); + m_toggleSelectionLinkAction = new QAction( QIcon( ":/Link3DandPlots.png" ), tr( "Link With Selection in 3D" ), this ); + m_toggleSelectionLinkAction->setToolTip( "Update wells used in plots from well selections in 3D view." ); + m_toggleSelectionLinkAction->setCheckable( true ); + m_toggleSelectionLinkAction->setChecked( m_selection3DLinkEnabled ); + connect( m_toggleSelectionLinkAction, SIGNAL( triggered() ), SLOT( slotToggleSelectionLink() ) ); + createMenus(); createToolBars(); createDockPanels(); setAcceptDrops( true ); - // Store the layout so we can offer reset option - m_initialDockAndToolbarLayout = saveState( 0 ); - if ( m_undoView ) { m_undoView->setStack( caf::CmdExecCommandManager::instance()->undoStack() ); @@ -139,6 +144,22 @@ RiuPlotMainWindow* RiuPlotMainWindow::instance() return nullptr; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RiuPlotMainWindow::wellSelected( QString wellName ) +{ + RiuPlotMainWindow* plotWnd = instance(); + if ( !plotWnd ) return; + + if ( !plotWnd->selection3DLinkEnabled() ) return; + + RimProject* project = RimProject::current(); + if ( !project ) return; + + project->mainPlotCollection()->updateSelectedWell( wellName ); +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -441,6 +462,10 @@ void RiuPlotMainWindow::createToolBars() { toolbar->addAction( cmdFeatureMgr->action( s ) ); } + if ( toolbarName == "View" ) + { + toolbar->addAction( m_toggleSelectionLinkAction ); + } } m_wellLogPlotToolBarEditor = std::make_unique( "Well Log Plot", this ); @@ -1157,3 +1182,27 @@ QStringList RiuPlotMainWindow::defaultDockStateNames() RiuDockWidgetTools::dockStateHideAllPlotWindowName() }; return retList; } + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RiuPlotMainWindow::enable3DSelectionLink( bool enable ) +{ + m_selection3DLinkEnabled = enable; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +bool RiuPlotMainWindow::selection3DLinkEnabled() +{ + return m_selection3DLinkEnabled; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RiuPlotMainWindow::slotToggleSelectionLink() +{ + m_selection3DLinkEnabled = !m_selection3DLinkEnabled; +} diff --git a/ApplicationLibCode/UserInterface/RiuPlotMainWindow.h b/ApplicationLibCode/UserInterface/RiuPlotMainWindow.h index d5bc2509cb..b6e9968ed3 100644 --- a/ApplicationLibCode/UserInterface/RiuPlotMainWindow.h +++ b/ApplicationLibCode/UserInterface/RiuPlotMainWindow.h @@ -60,6 +60,7 @@ public: ~RiuPlotMainWindow() override; static RiuPlotMainWindow* instance(); + static void wellSelected( QString wellName ); QString mainWindowName() override; @@ -72,6 +73,8 @@ public: void setActiveViewer( QWidget* subWindow ) override; void setDefaultWindowSize(); + void enable3DSelectionLink( bool enable ); + bool selection3DLinkEnabled(); void tileSubWindows() override; void storeSubWindowTiling( bool tiled ) override; @@ -118,6 +121,7 @@ private: static QStringList toolbarCommandIds( const QString& toolbarName = "" ); private slots: + void slotToggleSelectionLink(); friend class RiuMdiSubWindow; @@ -129,8 +133,6 @@ private slots: void customMenuRequested( const QPoint& pos ); private: - QByteArray m_initialDockAndToolbarLayout; // Initial dock window and toolbar layout, used to reset GUI - caf::PdmPointer m_activePlotViewWindow; QPointer m_messagePanel; @@ -146,4 +148,7 @@ private: std::unique_ptr m_summaryPlotManager; std::vector m_temporaryWidgets; + + QAction* m_toggleSelectionLinkAction; + bool m_selection3DLinkEnabled; }; diff --git a/ApplicationLibCode/UserInterface/RiuViewerCommands.cpp b/ApplicationLibCode/UserInterface/RiuViewerCommands.cpp index 1c08a703ea..6a58054724 100644 --- a/ApplicationLibCode/UserInterface/RiuViewerCommands.cpp +++ b/ApplicationLibCode/UserInterface/RiuViewerCommands.cpp @@ -73,6 +73,7 @@ #include "Riu3dSelectionManager.h" #include "RiuMainWindow.h" #include "RiuPickItemInfo.h" +#include "RiuPlotMainWindow.h" #include "RiuResultTextBuilder.h" #include "RiuViewer.h" @@ -871,6 +872,7 @@ void RiuViewerCommands::handlePickAction( int winPosX, int winPosY, Qt::Keyboard { bool allowActiveViewChange = dynamic_cast( m_viewer->ownerViewWindow() ) == nullptr; + RiuPlotMainWindow::wellSelected( eclipseWellSourceInfo->well()->name() ); RiuMainWindow::instance()->selectAsCurrentItem( eclipseWellSourceInfo->well(), allowActiveViewChange ); } else if ( wellConnectionSourceInfo ) From 37d6a44b2a5ff60ee7da818b8bbc9739d8d2dea8 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Mon, 15 Aug 2022 16:02:47 +0200 Subject: [PATCH 056/129] #9194 Area Fill : Area filled curves should use zero as base line --- .../ProjectDataModel/WellLog/RimWellLogCurve.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogCurve.cpp b/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogCurve.cpp index 108161fa21..eadf11f853 100644 --- a/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogCurve.cpp +++ b/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogCurve.cpp @@ -250,12 +250,12 @@ void RimWellLogCurve::updateCurveAppearance() if ( orientation == RimDepthTrackPlot::DepthOrientation::VERTICAL ) { qwtPlotCurve->setOrientation( Qt::Horizontal ); - qwtPlotCurve->setBaseline( -std::numeric_limits::infinity() ); + qwtPlotCurve->setBaseline( 0.0 ); } else { qwtPlotCurve->setOrientation( Qt::Vertical ); - qwtPlotCurve->setBaseline( -std::numeric_limits::infinity() ); + qwtPlotCurve->setBaseline( 0.0 ); } } } From 4cb26f69c5fbf20cbe8bcf9c99ee1dd0982ee77a Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Tue, 16 Aug 2022 12:40:25 +0200 Subject: [PATCH 057/129] RFT: Support device and annulus branches (#9168) * Add unit test used to read data from WSEGLINK * Add segment branch type * Add detection of device branches * Add data source stepping on branch type * parse wseglink data * add RFT case as child of RimFileSummaryCase --- .../Application/RiaRftDefines.cpp | 24 +- .../Application/RiaRftDefines.h | 3 +- .../FileInterface/RifEclipseRftAddress.cpp | 64 +++- .../FileInterface/RifEclipseRftAddress.h | 35 +- .../FileInterface/RifReaderOpmRft.cpp | 220 +++++++++++-- .../FileInterface/RifReaderOpmRft.h | 8 + .../FileInterface/RifRftSegment.cpp | 103 ++++++ .../FileInterface/RifRftSegment.h | 22 +- .../ProjectDataModel/CMakeLists_files.cmake | 4 +- ...bleExtractor.cpp => RiaOpmParserTools.cpp} | 309 +++++++++++------- ...fpTableExtractor.h => RiaOpmParserTools.h} | 5 +- .../ProjectDataModel/RimVfpPlot.cpp | 6 +- .../Summary/CMakeLists_files.cmake | 2 + .../Summary/RimFileSummaryCase.cpp | 40 ++- .../Summary/RimFileSummaryCase.h | 7 +- .../ProjectDataModel/Summary/RimRftCase.cpp | 71 ++++ .../ProjectDataModel/Summary/RimRftCase.h | 45 +++ .../ProjectDataModel/WellLog/RimRftTools.cpp | 11 +- .../ProjectDataModel/WellLog/RimRftTools.h | 2 +- .../RimWellLogCurveCommonDataSource.cpp | 41 ++- .../WellLog/RimWellLogCurveCommonDataSource.h | 15 +- .../WellLog/RimWellLogRftCurve.cpp | 72 ++-- .../WellLog/RimWellLogRftCurve.h | 10 +- .../TestData/test_wseglink.DATA | 22 ++ .../opm-parser-BasicTest.cpp | 72 +++- 25 files changed, 952 insertions(+), 261 deletions(-) rename ApplicationLibCode/ProjectDataModel/{RimVfpTableExtractor.cpp => RiaOpmParserTools.cpp} (57%) rename ApplicationLibCode/ProjectDataModel/{RimVfpTableExtractor.h => RiaOpmParserTools.h} (89%) create mode 100644 ApplicationLibCode/ProjectDataModel/Summary/RimRftCase.cpp create mode 100644 ApplicationLibCode/ProjectDataModel/Summary/RimRftCase.h create mode 100644 ThirdParty/custom-opm-common/custom-opm-parser-tests/TestData/test_wseglink.DATA diff --git a/ApplicationLibCode/Application/RiaRftDefines.cpp b/ApplicationLibCode/Application/RiaRftDefines.cpp index 410dde165b..75f74fbfa7 100644 --- a/ApplicationLibCode/Application/RiaRftDefines.cpp +++ b/ApplicationLibCode/Application/RiaRftDefines.cpp @@ -17,6 +17,7 @@ ///////////////////////////////////////////////////////////////////////////////// #include "RiaRftDefines.h" +#include "cafAppEnum.h" //-------------------------------------------------------------------------------------------------- /// @@ -63,5 +64,26 @@ QString RiaDefines::allBranches() //-------------------------------------------------------------------------------------------------- QString RiaDefines::segmentBranchNumberResultName() { - return "SegmenBranchNumber"; + return "SegmentBranchNumber"; } + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QString RiaDefines::segmentOneBasedBranchIndexResultName() +{ + return "SegmentOneBasedBranchIndex"; +} + +namespace caf +{ +template <> +void caf::AppEnum::setUp() +{ + addItem( RiaDefines::RftBranchType::RFT_TUBING, "RFT_TUBING", "Tubing" ); + addItem( RiaDefines::RftBranchType::RFT_DEVICE, "RFT_DEVICE", "Device" ); + addItem( RiaDefines::RftBranchType::RFT_ANNULUS, "RFT_ANNULUS", "Annulus" ); + addItem( RiaDefines::RftBranchType::RFT_UNKNOWN, "RFT_UNKNOWN", "Unknown" ); + setDefault( RiaDefines::RftBranchType::RFT_TUBING ); +} +} // namespace caf diff --git a/ApplicationLibCode/Application/RiaRftDefines.h b/ApplicationLibCode/Application/RiaRftDefines.h index 5467b6c4ed..2eb3247e28 100644 --- a/ApplicationLibCode/Application/RiaRftDefines.h +++ b/ApplicationLibCode/Application/RiaRftDefines.h @@ -29,12 +29,13 @@ QString segmentNumberResultName(); QString allBranches(); QString segmentBranchNumberResultName(); +QString segmentOneBasedBranchIndexResultName(); enum class RftBranchType { RFT_TUBING, - RFT_ANNULAR, RFT_DEVICE, + RFT_ANNULUS, RFT_UNKNOWN }; diff --git a/ApplicationLibCode/FileInterface/RifEclipseRftAddress.cpp b/ApplicationLibCode/FileInterface/RifEclipseRftAddress.cpp index 7ab3d925cd..a7d47228db 100644 --- a/ApplicationLibCode/FileInterface/RifEclipseRftAddress.cpp +++ b/ApplicationLibCode/FileInterface/RifEclipseRftAddress.cpp @@ -21,16 +21,18 @@ //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -RifEclipseRftAddress::RifEclipseRftAddress( const QString& wellName, - const QDateTime& timeStep, - RftWellLogChannelType wellLogChannelName, - const QString& segmentResultName, - int segmentBranchNumber ) +RifEclipseRftAddress::RifEclipseRftAddress( const QString& wellName, + const QDateTime& timeStep, + RftWellLogChannelType wellLogChannelName, + const QString& segmentResultName, + int segmentBranchIndex, + RiaDefines::RftBranchType segmentBranchType ) : m_wellName( wellName ) , m_timeStep( timeStep ) , m_wellLogChannel( wellLogChannelName ) , m_segmentResultName( segmentResultName ) - , m_segmentBranchNumber( segmentBranchNumber ) + , m_segmentBranchIndex( segmentBranchIndex ) + , m_segmentBranchType( segmentBranchType ) { } @@ -43,7 +45,31 @@ RifEclipseRftAddress RifEclipseRftAddress::createAddress( const QString& { auto segmentResultName = ""; auto segmentBranchNumber = -1; - auto adr = RifEclipseRftAddress( wellName, timeStep, wellLogChannel, segmentResultName, segmentBranchNumber ); + auto adr = RifEclipseRftAddress( wellName, + timeStep, + wellLogChannel, + segmentResultName, + segmentBranchNumber, + RiaDefines::RftBranchType::RFT_UNKNOWN ); + + return adr; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RifEclipseRftAddress RifEclipseRftAddress::createBranchSegmentAddress( const QString& wellName, + const QDateTime& dateTime, + const QString& resultName, + int segmentBranchIndex, + RiaDefines::RftBranchType segmentBranchType ) +{ + auto adr = RifEclipseRftAddress( wellName, + dateTime, + RifEclipseRftAddress::RftWellLogChannelType::SEGMENT_VALUES, + resultName, + segmentBranchIndex, + segmentBranchType ); return adr; } @@ -53,14 +79,14 @@ RifEclipseRftAddress RifEclipseRftAddress::createAddress( const QString& //-------------------------------------------------------------------------------------------------- RifEclipseRftAddress RifEclipseRftAddress::createSegmentAddress( const QString& wellName, const QDateTime& dateTime, - const QString& resultName, - int segmentBranchNumber ) + const QString& resultName ) { auto adr = RifEclipseRftAddress( wellName, dateTime, RifEclipseRftAddress::RftWellLogChannelType::SEGMENT_VALUES, resultName, - segmentBranchNumber ); + -1, + RiaDefines::RftBranchType::RFT_UNKNOWN ); return adr; } @@ -76,9 +102,17 @@ QString RifEclipseRftAddress::segmentResultName() const //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -int RifEclipseRftAddress::segmentBranchNumber() const +int RifEclipseRftAddress::segmentBranchIndex() const { - return m_segmentBranchNumber; + return m_segmentBranchIndex; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RiaDefines::RftBranchType RifEclipseRftAddress::segmentBranchType() const +{ + return m_segmentBranchType; } //-------------------------------------------------------------------------------------------------- @@ -137,7 +171,7 @@ bool operator==( const RifEclipseRftAddress& first, const RifEclipseRftAddress& if ( first.timeStep() != second.timeStep() ) return false; if ( first.wellLogChannel() != second.wellLogChannel() ) return false; if ( first.segmentResultName() != second.segmentResultName() ) return false; - if ( first.segmentBranchNumber() != second.segmentBranchNumber() ) return false; + if ( first.segmentBranchIndex() != second.segmentBranchIndex() ) return false; return true; } @@ -153,8 +187,8 @@ bool operator<( const RifEclipseRftAddress& first, const RifEclipseRftAddress& s return ( first.wellLogChannel() < second.wellLogChannel() ); if ( first.segmentResultName() != second.segmentResultName() ) return first.segmentResultName() < second.segmentResultName(); - if ( first.segmentBranchNumber() != second.segmentBranchNumber() ) - return first.segmentBranchNumber() < second.segmentBranchNumber(); + if ( first.segmentBranchIndex() != second.segmentBranchIndex() ) + return first.segmentBranchIndex() < second.segmentBranchIndex(); return false; } diff --git a/ApplicationLibCode/FileInterface/RifEclipseRftAddress.h b/ApplicationLibCode/FileInterface/RifEclipseRftAddress.h index 92e5ac1903..0158586214 100644 --- a/ApplicationLibCode/FileInterface/RifEclipseRftAddress.h +++ b/ApplicationLibCode/FileInterface/RifEclipseRftAddress.h @@ -18,6 +18,8 @@ #pragma once +#include "RiaRftDefines.h" + #include #include #include @@ -55,13 +57,18 @@ public: static RifEclipseRftAddress createAddress( const QString& wellName, const QDateTime& timeStep, RftWellLogChannelType wellLogChannel ); - static RifEclipseRftAddress createSegmentAddress( const QString& wellName, - const QDateTime& dateTime, - const QString& resultName, - int segmentBranchNumber ); + static RifEclipseRftAddress + createSegmentAddress( const QString& wellName, const QDateTime& dateTime, const QString& resultName ); - QString segmentResultName() const; - int segmentBranchNumber() const; + static RifEclipseRftAddress createBranchSegmentAddress( const QString& wellName, + const QDateTime& dateTime, + const QString& resultName, + int segmentBranchIndex, + RiaDefines::RftBranchType segmentBranchType ); + + QString segmentResultName() const; + int segmentBranchIndex() const; + RiaDefines::RftBranchType segmentBranchType() const; const QString& wellName() const; QDateTime timeStep() const; @@ -71,19 +78,21 @@ public: static std::set pltPlotChannelTypes(); private: - RifEclipseRftAddress( const QString& wellName, - const QDateTime& timeStep, - RftWellLogChannelType wellLogChannel, - const QString& segmentResultName, - int segmentBranchNumber ); + RifEclipseRftAddress( const QString& wellName, + const QDateTime& timeStep, + RftWellLogChannelType wellLogChannel, + const QString& segmentResultName, + int segmentBranchIndex, + RiaDefines::RftBranchType segmentBranchType ); private: QString m_wellName; QDateTime m_timeStep; RftWellLogChannelType m_wellLogChannel; - QString m_segmentResultName; - int m_segmentBranchNumber; + QString m_segmentResultName; + int m_segmentBranchIndex; + RiaDefines::RftBranchType m_segmentBranchType; }; bool operator==( const RifEclipseRftAddress& first, const RifEclipseRftAddress& second ); diff --git a/ApplicationLibCode/FileInterface/RifReaderOpmRft.cpp b/ApplicationLibCode/FileInterface/RifReaderOpmRft.cpp index ad1dabf252..480e05aae9 100644 --- a/ApplicationLibCode/FileInterface/RifReaderOpmRft.cpp +++ b/ApplicationLibCode/FileInterface/RifReaderOpmRft.cpp @@ -23,6 +23,10 @@ #include "RiaRftDefines.h" #include "RiaStdStringTools.h" +#include "RiaOpmParserTools.h" + +#include "opm/input/eclipse/Parser/Parser.hpp" +#include "opm/input/eclipse/Parser/ParserKeywords/W.hpp" #include "opm/io/eclipse/ERft.hpp" #include "cafAssert.h" @@ -31,25 +35,20 @@ #include #include +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RifReaderOpmRft::RifReaderOpmRft( const QString& fileName, const QString& dataDeckFileName ) +{ + openFiles( fileName, dataDeckFileName ); +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- RifReaderOpmRft::RifReaderOpmRft( const QString& fileName ) { - try - { - m_opm_rft = std::make_unique( fileName.toStdString() ); - - buildMetaData(); - } - catch ( const std::exception& e ) - { - RiaLogging::error( QString( "Failed to open RFT file %1\n%2" ).arg( fileName ).arg( e.what() ) ); - } - catch ( ... ) - { - RiaLogging::error( QString( "Failed to open RFT file %1" ).arg( fileName ) ); - } + openFiles( fileName, "" ); } //-------------------------------------------------------------------------------------------------- @@ -82,12 +81,13 @@ void RifReaderOpmRft::values( const RifEclipseRftAddress& rftAddress, std::vecto { auto data = segment.topology(); - auto indices = segment.indicesForBranchNumber( rftAddress.segmentBranchNumber() ); + auto indices = segment.indicesForBranchIndex( rftAddress.segmentBranchIndex(), rftAddress.segmentBranchType() ); for ( const auto& i : indices ) { CAF_ASSERT( i < data.size() ); values->push_back( data[i].segNo() ); } + return; } else if ( rftAddress.segmentResultName() == RiaDefines::segmentBranchNumberResultName() ) { @@ -96,6 +96,16 @@ void RifReaderOpmRft::values( const RifEclipseRftAddress& rftAddress, std::vecto { values->push_back( branchNumber ); } + return; + } + else if ( rftAddress.segmentResultName() == RiaDefines::segmentOneBasedBranchIndexResultName() ) + { + auto branchIndices = segment.oneBasedBranchIndices(); + for ( const auto& branchNumber : branchIndices ) + { + values->push_back( branchNumber ); + } + return; } } @@ -114,7 +124,8 @@ void RifReaderOpmRft::values( const RifEclipseRftAddress& rftAddress, std::vecto auto key = std::make_pair( wellName, RftDate{ y, m, d } ); auto segment = m_rftWellDateSegments[key]; - auto indices = segment.indicesForBranchNumber( rftAddress.segmentBranchNumber() ); + auto indices = + segment.indicesForBranchIndex( rftAddress.segmentBranchIndex(), rftAddress.segmentBranchType() ); for ( const auto& i : indices ) { CAF_ASSERT( i < data.size() ); @@ -253,6 +264,37 @@ void RifReaderOpmRft::cellIndices( const RifEclipseRftAddress& rftAddress, std:: } } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RifReaderOpmRft::readWseglink( const std::string& filePath ) +{ + m_wseglink = RiaOpmParserTools::extractWseglink( filePath ); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RifReaderOpmRft::openFiles( const QString& fileName, const QString& dataDeckFileName ) +{ + try + { + m_opm_rft = std::make_unique( fileName.toStdString() ); + + readWseglink( dataDeckFileName.toStdString() ); + + buildMetaData(); + } + catch ( const std::exception& e ) + { + RiaLogging::error( QString( "Failed to open RFT file %1\n%2" ).arg( fileName ).arg( e.what() ) ); + } + catch ( ... ) + { + RiaLogging::error( QString( "Failed to open RFT file %1" ).arg( fileName ) ); + } +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -317,16 +359,14 @@ void RifReaderOpmRft::buildMetaData() auto resultName = std::get<0>( resultNameAndSize ); auto adr = RifEclipseRftAddress::createSegmentAddress( QString::fromStdString( wellName ), dt, - QString::fromStdString( resultName ), - -1 ); + QString::fromStdString( resultName ) ); m_addresses.insert( adr ); } auto adr = RifEclipseRftAddress::createSegmentAddress( QString::fromStdString( wellName ), dt, - RiaDefines::segmentNumberResultName(), - -1 ); + RiaDefines::segmentNumberResultName() ); m_addresses.insert( adr ); } @@ -456,6 +496,17 @@ void RifReaderOpmRft::importWellNames() //-------------------------------------------------------------------------------------------------- void RifReaderOpmRft::buildSegmentBranchTypes( const RftSegmentKey& segmentKey ) { + // A branch can have up to three layers of branches + // Tubing branch + // The inner most branch representing the tubing pipe + // + // Device branch + // Layer between tubing branch and annulus branch or reservoir + // The device segment is connected to a segment on the tubing branch + // + // Annulus branch + // Layer between device branch and reservoir. The segment connection data is imported from WSEGLINK in the data deck + auto wellName = segmentKey.first; auto date = segmentKey.second; RifRftSegment& segmentRef = m_rftWellDateSegments[segmentKey]; @@ -469,8 +520,7 @@ void RifReaderOpmRft::buildSegmentBranchTypes( const RftSegmentKey& segmentKey ) std::vector seglenstValues; std::vector seglenenValues; { - auto resultName = - RifEclipseRftAddress::createSegmentAddress( QString::fromStdString( wellName ), dt, "SEGLENST", -1 ); + auto resultName = RifEclipseRftAddress::createSegmentAddress( QString::fromStdString( wellName ), dt, "SEGLENST" ); values( resultName, &seglenstValues ); @@ -480,37 +530,124 @@ void RifReaderOpmRft::buildSegmentBranchTypes( const RftSegmentKey& segmentKey ) } } { - auto resultName = - RifEclipseRftAddress::createSegmentAddress( QString::fromStdString( wellName ), dt, "SEGLENEN", -1 ); + auto resultName = RifEclipseRftAddress::createSegmentAddress( QString::fromStdString( wellName ), dt, "SEGLENEN" ); values( resultName, &seglenenValues ); } + int oneBasedBranchIndex = 1; + if ( !seglenenValues.empty() && !seglenstValues.empty() ) { + // Find tubing and annulus branch types + auto branchIds = segmentRef.branchIds(); for ( auto id : branchIds ) { double minimumMD = std::numeric_limits::max(); double maximumMD = std::numeric_limits::min(); + std::vector segmentNumbers; + auto indices = segmentRef.indicesForBranchNumber( id ); for ( auto i : indices ) { minimumMD = std::min( minimumMD, seglenstValues[i] ); maximumMD = std::max( maximumMD, seglenenValues[i] ); + segmentNumbers.push_back( segmentRef.topology()[i].segNo() ); } double length = maximumMD - minimumMD; segmentRef.setBranchLength( id, length ); - const double tubingThreshold = 1.0; - RiaDefines::RftBranchType branchType = RiaDefines::RftBranchType::RFT_UNKNOWN; - if ( length > tubingThreshold ) branchType = RiaDefines::RftBranchType::RFT_TUBING; + RiaDefines::RftBranchType branchType = RiaDefines::RftBranchType::RFT_UNKNOWN; + + bool hasFoundAnnulusBranch = false; + + auto annulusSegments = annulusSegmentsForWell( wellName ); + + std::vector matchingSegments; + std::set_intersection( segmentNumbers.begin(), + segmentNumbers.end(), + annulusSegments.begin(), + annulusSegments.end(), + std::inserter( matchingSegments, matchingSegments.end() ) ); + + if ( !matchingSegments.empty() ) + { + { + branchType = RiaDefines::RftBranchType::RFT_ANNULUS; + + // NOTE: Assign branch index after device branch is detected + hasFoundAnnulusBranch = true; + } + } + + if ( !hasFoundAnnulusBranch ) + { + const double tubingThreshold = 1.0; + if ( length > tubingThreshold ) + { + branchType = RiaDefines::RftBranchType::RFT_TUBING; + segmentRef.setOneBasedBranchIndex( id, oneBasedBranchIndex++ ); + } + } segmentRef.setBranchType( id, branchType ); } + + auto tubingBranchIds = segmentRef.tubingBranchIds(); + + for ( auto& segment : segmentRef.topology() ) + { + auto segmentBranchId = segment.segBrno(); + auto it = std::find( tubingBranchIds.begin(), tubingBranchIds.end(), segmentBranchId ); + if ( it == tubingBranchIds.end() ) + { + auto tubingSegmentNumber = segment.segNext(); + + auto tubingSegmentData = segmentRef.segmentData( tubingSegmentNumber ); + if ( tubingSegmentData != nullptr ) + { + auto it = std::find( tubingBranchIds.begin(), tubingBranchIds.end(), tubingSegmentData->segBrno() ); + if ( it != tubingBranchIds.end() ) + { + // Find all connected segments that is not assigned a branch type, and mark as device + // layer + + auto tubingBranchIndex = segmentRef.oneBasedBranchIndexForBranchId( tubingSegmentData->segBrno() ); + segmentRef.createDeviceBranch( segment.segNo(), tubingBranchIndex ); + } + } + } + } + + // Assign branch index to annulus branches + + for ( auto branchId : branchIds ) + { + auto branchType = segmentRef.branchType( branchId ); + if ( branchType == RiaDefines::RftBranchType::RFT_ANNULUS ) + { + auto segmentIndices = segmentRef.indicesForBranchNumber( branchId ); + if ( segmentIndices.empty() ) continue; + + auto firstSegmentIndex = segmentIndices.front(); + auto firstSegment = segmentRef.topology()[firstSegmentIndex]; + auto candidateSegmentNumber = firstSegment.segNext(); + + auto candidateDeviceSeg = segmentRef.segmentData( candidateSegmentNumber ); + if ( candidateDeviceSeg ) + { + auto branchIndex = segmentRef.oneBasedBranchIndexForBranchId( candidateDeviceSeg->segBrno() ); + if ( branchIndex >= 0 ) + { + segmentRef.setOneBasedBranchIndex( branchId, branchIndex ); + } + } + } + } } } @@ -540,6 +677,35 @@ std::vector return {}; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::vector> RifReaderOpmRft::annulusLinksForWell( const std::string& wellName ) const +{ + auto it = m_wseglink.find( wellName ); + if ( it != m_wseglink.end() ) + { + return it->second; + } + + return {}; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::vector RifReaderOpmRft::annulusSegmentsForWell( const std::string& wellName ) const +{ + std::vector annulusSegments; + + for ( auto it : annulusLinksForWell( wellName ) ) + { + annulusSegments.push_back( it.first ); + } + + return annulusSegments; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/FileInterface/RifReaderOpmRft.h b/ApplicationLibCode/FileInterface/RifReaderOpmRft.h index bdfac4ceb7..df716becb6 100644 --- a/ApplicationLibCode/FileInterface/RifReaderOpmRft.h +++ b/ApplicationLibCode/FileInterface/RifReaderOpmRft.h @@ -37,6 +37,7 @@ class RifReaderOpmRft : public RifReaderRftInterface, public cvf::Object { public: RifReaderOpmRft( const QString& fileName ); + RifReaderOpmRft( const QString& fileName, const QString& dataDeckFileName ); std::set eclipseRftAddresses() override; void values( const RifEclipseRftAddress& rftAddress, std::vector* values ) override; @@ -58,6 +59,7 @@ private: using RftDate = std::tuple; using RftSegmentKey = std::pair; + void openFiles( const QString& fileName, const QString& dataDeckFileName ); void buildMetaData(); void buildSegmentData(); void segmentDataDebugLog() const; @@ -67,6 +69,10 @@ private: std::vector importWellData( const std::string& wellName, const std::string& propertyName, const RftDate& date ) const; + void readWseglink( const std::string& filePath ); + std::vector> annulusLinksForWell( const std::string& wellName ) const; + std::vector annulusSegmentsForWell( const std::string& wellName ) const; + static RifEclipseRftAddress::RftWellLogChannelType identifyChannelType( const std::string& resultName ); static std::string resultNameFromChannelType( RifEclipseRftAddress::RftWellLogChannelType channelType ); @@ -79,4 +85,6 @@ private: std::map m_rftWellDateSegments; std::set m_rftSegmentTimeSteps; + + std::map>> m_wseglink; }; diff --git a/ApplicationLibCode/FileInterface/RifRftSegment.cpp b/ApplicationLibCode/FileInterface/RifRftSegment.cpp index 3cdad97006..6969e55228 100644 --- a/ApplicationLibCode/FileInterface/RifRftSegment.cpp +++ b/ApplicationLibCode/FileInterface/RifRftSegment.cpp @@ -149,6 +149,62 @@ std::vector RifRftSegment::branchIds() const return v; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::set RifRftSegment::oneBasedBranchIndices() const +{ + std::set indices; + + for ( auto b : m_oneBasedBranchIndexMap ) + { + indices.insert( b.second ); + } + + return indices; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +int RifRftSegment::oneBasedBranchIndexForBranchId( int branchId ) const +{ + if ( m_oneBasedBranchIndexMap.count( branchId ) > 0 ) return m_oneBasedBranchIndexMap.at( branchId ); + + return -1; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +const RifRftSegmentData* RifRftSegment::segmentData( int segmentNumber ) const +{ + for ( const auto& segData : m_topology ) + { + if ( segData.segNo() == segmentNumber ) return &segData; + } + + return nullptr; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RifRftSegment::createDeviceBranch( int deviceBranchFirstSegmentNumber, int oneBasedBranchIndex ) +{ + for ( auto& segData : m_topology ) + { + if ( segData.segNo() < deviceBranchFirstSegmentNumber ) continue; + + auto branchNumber = segData.segBrno(); + if ( branchType( branchNumber ) != RiaDefines::RftBranchType::RFT_UNKNOWN ) return; + + setOneBasedBranchIndex( segData.segBrno(), oneBasedBranchIndex ); + + setBranchType( segData.segBrno(), RiaDefines::RftBranchType::RFT_DEVICE ); + } +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -165,6 +221,24 @@ void RifRftSegment::setBranchType( int branchId, RiaDefines::RftBranchType branc m_branchType[branchId] = branchType; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RifRftSegment::setOneBasedBranchIndex( int branchId, int oneBasedBranchIndex ) +{ + m_oneBasedBranchIndexMap[branchId] = oneBasedBranchIndex; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RiaDefines::RftBranchType RifRftSegment::branchType( int branchId ) const +{ + if ( m_branchType.count( branchId ) ) return m_branchType.at( branchId ); + + return RiaDefines::RftBranchType::RFT_UNKNOWN; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -182,3 +256,32 @@ std::vector RifRftSegment::indicesForBranchNumber( int branchNumber ) co return v; } + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::vector RifRftSegment::indicesForBranchIndex( int branchIndex, RiaDefines::RftBranchType branchType ) const +{ + std::vector v; + for ( size_t i = 0; i < m_topology.size(); i++ ) + { + if ( branchIndex <= 0 ) + { + v.push_back( i ); + continue; + } + + auto segment = m_topology[i]; + + auto it = m_oneBasedBranchIndexMap.find( segment.segBrno() ); + if ( it != m_oneBasedBranchIndexMap.end() ) + { + if ( it->second == branchIndex && m_branchType.at( segment.segBrno() ) == branchType ) + { + v.push_back( i ); + } + } + } + + return v; +} diff --git a/ApplicationLibCode/FileInterface/RifRftSegment.h b/ApplicationLibCode/FileInterface/RifRftSegment.h index 6093ec89b0..f8194f5815 100644 --- a/ApplicationLibCode/FileInterface/RifRftSegment.h +++ b/ApplicationLibCode/FileInterface/RifRftSegment.h @@ -18,13 +18,15 @@ #pragma once +#include "RiaRftDefines.h" + +#include "opm/io/eclipse/EclFile.hpp" + +#include #include #include #include -#include "RiaRftDefines.h" -#include "opm/io/eclipse/EclFile.hpp" - class RifRftSegmentData { public: @@ -53,13 +55,22 @@ public: void addResultNameAndSize( const Opm::EclIO::EclFile::EclEntry& resultNameAndSize ); std::vector resultNameAndSize() const; - std::vector tubingBranchIds() const; - std::vector branchIds() const; + std::vector tubingBranchIds() const; + std::vector branchIds() const; + std::set oneBasedBranchIndices() const; + int oneBasedBranchIndexForBranchId( int branchId ) const; + const RifRftSegmentData* segmentData( int segmentNumber ) const; + + void createDeviceBranch( int deviceBranchFirstSegmentNumber, int oneBasedBranchIndex ); void setBranchLength( int branchId, double length ); void setBranchType( int branchId, RiaDefines::RftBranchType branchType ); + void setOneBasedBranchIndex( int branchId, int oneBasedBranchIndex ); + + RiaDefines::RftBranchType branchType( int branchId ) const; std::vector indicesForBranchNumber( int branchNumber ) const; + std::vector indicesForBranchIndex( int branchIndex, RiaDefines::RftBranchType branchType ) const; private: std::vector m_topology; @@ -67,4 +78,5 @@ private: std::map m_branchLength; std::map m_branchType; + std::map m_oneBasedBranchIndexMap; }; diff --git a/ApplicationLibCode/ProjectDataModel/CMakeLists_files.cmake b/ApplicationLibCode/ProjectDataModel/CMakeLists_files.cmake index f782207f5e..38e5957e57 100644 --- a/ApplicationLibCode/ProjectDataModel/CMakeLists_files.cmake +++ b/ApplicationLibCode/ProjectDataModel/CMakeLists_files.cmake @@ -110,7 +110,7 @@ set(SOURCE_GROUP_HEADER_FILES ${CMAKE_CURRENT_LIST_DIR}/RimColorLegendItem.h ${CMAKE_CURRENT_LIST_DIR}/RimAbstractPlotCollection.h ${CMAKE_CURRENT_LIST_DIR}/RimPolylinePickerInterface.h - ${CMAKE_CURRENT_LIST_DIR}/RimVfpTableExtractor.h + ${CMAKE_CURRENT_LIST_DIR}/RiaOpmParserTools.h ${CMAKE_CURRENT_LIST_DIR}/RimCaseDisplayNameTools.h ${CMAKE_CURRENT_LIST_DIR}/RimCustomObjectiveFunctionCollection.h ${CMAKE_CURRENT_LIST_DIR}/RimCustomObjectiveFunction.h @@ -238,7 +238,7 @@ set(SOURCE_GROUP_SOURCE_FILES ${CMAKE_CURRENT_LIST_DIR}/RimColorLegendCollection.cpp ${CMAKE_CURRENT_LIST_DIR}/RimColorLegend.cpp ${CMAKE_CURRENT_LIST_DIR}/RimColorLegendItem.cpp - ${CMAKE_CURRENT_LIST_DIR}/RimVfpTableExtractor.cpp + ${CMAKE_CURRENT_LIST_DIR}/RiaOpmParserTools.cpp ${CMAKE_CURRENT_LIST_DIR}/RimCaseDisplayNameTools.cpp ${CMAKE_CURRENT_LIST_DIR}/RimCustomObjectiveFunctionCollection.cpp ${CMAKE_CURRENT_LIST_DIR}/RimCustomObjectiveFunction.cpp diff --git a/ApplicationLibCode/ProjectDataModel/RimVfpTableExtractor.cpp b/ApplicationLibCode/ProjectDataModel/RiaOpmParserTools.cpp similarity index 57% rename from ApplicationLibCode/ProjectDataModel/RimVfpTableExtractor.cpp rename to ApplicationLibCode/ProjectDataModel/RiaOpmParserTools.cpp index 40a82b7334..bada06f166 100644 --- a/ApplicationLibCode/ProjectDataModel/RimVfpTableExtractor.cpp +++ b/ApplicationLibCode/ProjectDataModel/RiaOpmParserTools.cpp @@ -1,121 +1,188 @@ -///////////////////////////////////////////////////////////////////////////////// -// -// Copyright (C) 2020- Equinor ASA -// -// ResInsight is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY -// WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. -// -// See the GNU General Public License at -// for more details. -// -///////////////////////////////////////////////////////////////////////////////// - -#include "RimVfpTableExtractor.h" - -#include "cafPdmUiItem.h" -#include "cafUtils.h" - -#include "opm/input/eclipse/Deck/Deck.hpp" -#include "opm/input/eclipse/Parser/Parser.hpp" -#include "opm/input/eclipse/Parser/ParserKeywords/V.hpp" - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -std::vector RimVfpTableExtractor::extractVfpInjectionTables( const std::string& filename ) -{ - std::vector tables; - - try - { - Opm::Parser parser( false ); - const ::Opm::ParserKeywords::VFPINJ kw1; - const ::Opm::ParserKeywords::VFPIDIMS kw2; - - parser.addParserKeyword( kw1 ); - parser.addParserKeyword( kw2 ); - - auto deck = parser.parseFile( filename ); - - std::string myKeyword = "VFPINJ"; - auto keywordList = deck.getKeywordList( myKeyword ); - - for ( auto kw : keywordList ) - { - auto name = kw->name(); - - Opm::UnitSystem unitSystem; - { - const auto& header = kw->getRecord( 0 ); - - if ( header.getItem().hasValue( 0 ) ) - { - std::string units_string; - units_string = header.getItem().get( 0 ); - unitSystem = Opm::UnitSystem( units_string ); - } - } - - Opm::VFPInjTable table( *kw, unitSystem ); - tables.push_back( table ); - } - } - catch ( ... ) - { - } - - return tables; -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -std::vector RimVfpTableExtractor::extractVfpProductionTables( const std::string& filename ) -{ - std::vector tables; - - try - { - Opm::Parser parser( false ); - const ::Opm::ParserKeywords::VFPPROD kw1; - - parser.addParserKeyword( kw1 ); - - auto deck = parser.parseFile( filename ); - - std::string myKeyword = "VFPPROD"; - auto keywordList = deck.getKeywordList( myKeyword ); - - for ( auto kw : keywordList ) - { - auto name = kw->name(); - - Opm::UnitSystem unitSystem; - { - const auto& header = kw->getRecord( 0 ); - - if ( header.getItem().hasValue( 0 ) ) - { - std::string units_string; - units_string = header.getItem().get( 0 ); - unitSystem = Opm::UnitSystem( units_string ); - } - } - - bool gaslift_opt_active = false; - Opm::VFPProdTable table( *kw, gaslift_opt_active, unitSystem ); - tables.push_back( table ); - } - } - catch ( ... ) - { - } - - return tables; -} +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2020- Equinor ASA +// +// ResInsight is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU General Public License at +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#include "RiaOpmParserTools.h" + +#include "cafPdmUiItem.h" +#include "cafUtils.h" + +#include "opm/input/eclipse/Deck/Deck.hpp" +#include "opm/input/eclipse/Parser/ParseContext.hpp" +#include "opm/input/eclipse/Parser/Parser.hpp" +#include "opm/input/eclipse/Parser/ParserKeywords/V.hpp" +#include "opm/input/eclipse/Parser/ParserKeywords/W.hpp" + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::vector RiaOpmParserTools::extractVfpInjectionTables( const std::string& filename ) +{ + std::vector tables; + + try + { + Opm::Parser parser( false ); + const ::Opm::ParserKeywords::VFPINJ kw1; + const ::Opm::ParserKeywords::VFPIDIMS kw2; + + parser.addParserKeyword( kw1 ); + parser.addParserKeyword( kw2 ); + + auto deck = parser.parseFile( filename ); + + std::string myKeyword = "VFPINJ"; + auto keywordList = deck.getKeywordList( myKeyword ); + + for ( auto kw : keywordList ) + { + auto name = kw->name(); + + Opm::UnitSystem unitSystem; + { + const auto& header = kw->getRecord( 0 ); + + if ( header.getItem().hasValue( 0 ) ) + { + std::string units_string; + units_string = header.getItem().get( 0 ); + unitSystem = Opm::UnitSystem( units_string ); + } + } + + Opm::VFPInjTable table( *kw, unitSystem ); + tables.push_back( table ); + } + } + catch ( ... ) + { + } + + return tables; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::vector RiaOpmParserTools::extractVfpProductionTables( const std::string& filename ) +{ + std::vector tables; + + try + { + Opm::Parser parser( false ); + const ::Opm::ParserKeywords::VFPPROD kw1; + + parser.addParserKeyword( kw1 ); + + auto deck = parser.parseFile( filename ); + + std::string myKeyword = "VFPPROD"; + auto keywordList = deck.getKeywordList( myKeyword ); + + for ( auto kw : keywordList ) + { + auto name = kw->name(); + + Opm::UnitSystem unitSystem; + { + const auto& header = kw->getRecord( 0 ); + + if ( header.getItem().hasValue( 0 ) ) + { + std::string units_string; + units_string = header.getItem().get( 0 ); + unitSystem = Opm::UnitSystem( units_string ); + } + } + + bool gaslift_opt_active = false; + Opm::VFPProdTable table( *kw, gaslift_opt_active, unitSystem ); + tables.push_back( table ); + } + } + catch ( ... ) + { + } + + return tables; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::map>> RiaOpmParserTools::extractWseglink( const std::string& filename ) +{ + if ( !std::filesystem::exists( filename ) ) return {}; + + Opm::Parser parser( false ); + const Opm::ParserKeywords::WSEGLINK kw1; + + parser.addParserKeyword( kw1 ); + + std::stringstream ss; + Opm::ParseContext parseContext( Opm::InputError::Action::WARN ); + auto deck = parser.parseFile( filename, parseContext ); + + std::string keyword = "WSEGLINK"; + auto keywordList = deck.getKeywordList( keyword ); + if ( keywordList.empty() ) return {}; + + std::map>> wseglink; + for ( auto kw : keywordList ) + { + auto name = kw->name(); + + for ( size_t i = 0; i < kw->size(); i++ ) + { + auto deckRecord = kw->getRecord( i ); + + std::string wellName; + int segment1 = -1; + int segment2 = -1; + + { + auto itemName = ::Opm::ParserKeywords::WSEGLINK::WELL::itemName; + if ( deckRecord.hasItem( itemName ) && deckRecord.getItem( itemName ).hasValue( 0 ) ) + { + wellName = deckRecord.getItem( itemName ).getTrimmedString( 0 ); + } + } + { + auto itemName = ::Opm::ParserKeywords::WSEGLINK::SEGMENT1::itemName; + if ( deckRecord.hasItem( itemName ) && deckRecord.getItem( itemName ).hasValue( 0 ) ) + { + segment1 = deckRecord.getItem( itemName ).get( 0 ); + } + } + { + auto itemName = ::Opm::ParserKeywords::WSEGLINK::SEGMENT2::itemName; + if ( deckRecord.hasItem( itemName ) && deckRecord.getItem( itemName ).hasValue( 0 ) ) + { + segment2 = deckRecord.getItem( itemName ).get( 0 ); + } + } + + if ( segment1 != -1 && segment2 != -1 ) + { + wseglink[wellName].push_back( std::make_pair( segment1, segment2 ) ); + } + } + } + + return wseglink; +} diff --git a/ApplicationLibCode/ProjectDataModel/RimVfpTableExtractor.h b/ApplicationLibCode/ProjectDataModel/RiaOpmParserTools.h similarity index 89% rename from ApplicationLibCode/ProjectDataModel/RimVfpTableExtractor.h rename to ApplicationLibCode/ProjectDataModel/RiaOpmParserTools.h index cba4ebf1f7..9036f2035f 100644 --- a/ApplicationLibCode/ProjectDataModel/RimVfpTableExtractor.h +++ b/ApplicationLibCode/ProjectDataModel/RiaOpmParserTools.h @@ -18,6 +18,7 @@ #pragma once +#include #include #include @@ -27,9 +28,11 @@ //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -class RimVfpTableExtractor +class RiaOpmParserTools { public: static std::vector extractVfpInjectionTables( const std::string& filename ); static std::vector extractVfpProductionTables( const std::string& filename ); + + static std::map>> extractWseglink( const std::string& filename ); }; diff --git a/ApplicationLibCode/ProjectDataModel/RimVfpPlot.cpp b/ApplicationLibCode/ProjectDataModel/RimVfpPlot.cpp index 45313e556e..7159f751cd 100644 --- a/ApplicationLibCode/ProjectDataModel/RimVfpPlot.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimVfpPlot.cpp @@ -19,8 +19,8 @@ #include "RimVfpPlot.h" #include "RiaDefines.h" +#include "RiaOpmParserTools.h" #include "RimVfpDefines.h" -#include "RimVfpTableExtractor.h" #include "RiaColorTables.h" #include "RiaEclipseUnitTools.h" @@ -431,7 +431,7 @@ void RimVfpPlot::onLoadDataAndUpdate() // Try to read the file as an prod table first (most common) const std::vector tables = - RimVfpTableExtractor::extractVfpProductionTables( filePath.toStdString() ); + RiaOpmParserTools::extractVfpProductionTables( filePath.toStdString() ); if ( !tables.empty() ) { m_prodTable = std::make_unique( tables[0] ); @@ -446,7 +446,7 @@ void RimVfpPlot::onLoadDataAndUpdate() else { const std::vector tables = - RimVfpTableExtractor::extractVfpInjectionTables( filePath.toStdString() ); + RiaOpmParserTools::extractVfpInjectionTables( filePath.toStdString() ); if ( !tables.empty() ) { m_injectionTable = std::make_unique( tables[0] ); diff --git a/ApplicationLibCode/ProjectDataModel/Summary/CMakeLists_files.cmake b/ApplicationLibCode/ProjectDataModel/Summary/CMakeLists_files.cmake index 01c73aeea1..8826f57724 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/CMakeLists_files.cmake +++ b/ApplicationLibCode/ProjectDataModel/Summary/CMakeLists_files.cmake @@ -47,6 +47,7 @@ set(SOURCE_GROUP_HEADER_FILES ${CMAKE_CURRENT_LIST_DIR}/RimSummaryPlotControls.h ${CMAKE_CURRENT_LIST_DIR}/RimEnsembleCurveInfoTextProvider.h ${CMAKE_CURRENT_LIST_DIR}/RimSummaryAddressModifier.h + ${CMAKE_CURRENT_LIST_DIR}/RimRftCase.h ) set(SOURCE_GROUP_SOURCE_FILES @@ -98,6 +99,7 @@ set(SOURCE_GROUP_SOURCE_FILES ${CMAKE_CURRENT_LIST_DIR}/RimSummaryPlotControls.cpp ${CMAKE_CURRENT_LIST_DIR}/RimEnsembleCurveInfoTextProvider.cpp ${CMAKE_CURRENT_LIST_DIR}/RimSummaryAddressModifier.cpp + ${CMAKE_CURRENT_LIST_DIR}/RimRftCase.cpp ) list(APPEND CODE_HEADER_FILES ${SOURCE_GROUP_HEADER_FILES}) diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimFileSummaryCase.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimFileSummaryCase.cpp index 3906ebbffc..15ddb24b06 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimFileSummaryCase.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimFileSummaryCase.cpp @@ -33,11 +33,13 @@ #include "RifSummaryReaderMultipleFiles.h" #include "RimProject.h" +#include "RimRftCase.h" #include "RimTools.h" #include "cafPdmFieldScriptingCapability.h" #include "cafPdmObjectScriptingCapability.h" #include "cafPdmUiFilePathEditor.h" +#include "cafPdmUiTreeOrdering.h" #include #include @@ -63,6 +65,9 @@ RimFileSummaryCase::RimFileSummaryCase() "AdditionalSummaryFilePath", "Additional File Path (set invisible when ready)" ); m_additionalSummaryFilePath.uiCapability()->setUiHidden( true ); + + CAF_PDM_InitFieldNoDefault( &m_rftCase, "RftCase", "RFT Case" ); + m_rftCase = new RimRftCase; } //-------------------------------------------------------------------------------------------------- @@ -131,7 +136,19 @@ void RimFileSummaryCase::createSummaryReaderInterface() //-------------------------------------------------------------------------------------------------- void RimFileSummaryCase::createRftReaderInterface() { - m_summaryEclipseRftReader = RimFileSummaryCase::findRftDataAndCreateReader( this->summaryHeaderFilename() ); + QFileInfo fileInfo( summaryHeaderFilename() ); + QString folder = fileInfo.absolutePath(); + + QString rftFileName = folder + "/" + fileInfo.completeBaseName() + ".RFT"; + QFileInfo rftFileInfo( rftFileName ); + + if ( rftFileInfo.exists() ) + { + m_rftCase()->setRftFileName( rftFileName ); + } + + m_summaryEclipseRftReader = + RimFileSummaryCase::findRftDataAndCreateReader( rftFileName, m_rftCase->dataDeckFilePath() ); } //-------------------------------------------------------------------------------------------------- @@ -186,17 +203,13 @@ RifSummaryReaderInterface* RimFileSummaryCase::findRelatedFilesAndCreateReader( //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -RifReaderOpmRft* RimFileSummaryCase::findRftDataAndCreateReader( const QString& headerFileName ) +RifReaderOpmRft* RimFileSummaryCase::findRftDataAndCreateReader( const QString& rftFileName, const QString& dataDeckFileName ) { - QFileInfo fileInfo( headerFileName ); - QString folder = fileInfo.absolutePath(); + QFileInfo fi( rftFileName ); - QString rftFileName = folder + "/" + fileInfo.completeBaseName() + ".RFT"; - QFileInfo rftFileInfo( rftFileName ); - - if ( rftFileInfo.exists() ) + if ( fi.exists() ) { - return new RifReaderOpmRft( rftFileInfo.filePath() ); + return new RifReaderOpmRft( rftFileName, dataDeckFileName ); } return nullptr; @@ -219,6 +232,15 @@ void RimFileSummaryCase::defineEditorAttribute( const caf::PdmFieldHandle* field } } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimFileSummaryCase::defineUiTreeOrdering( caf::PdmUiTreeOrdering& uiTreeOrdering, QString uiConfigName /*= "" */ ) +{ + RimSummaryCase::defineUiTreeOrdering( uiTreeOrdering, uiConfigName ); + uiTreeOrdering.add( m_rftCase() ); +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimFileSummaryCase.h b/ApplicationLibCode/ProjectDataModel/Summary/RimFileSummaryCase.h index a7daa01d71..8f9104ece2 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimFileSummaryCase.h +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimFileSummaryCase.h @@ -29,6 +29,7 @@ class RiaThreadSafeLogger; class RifOpmCommonEclipseSummary; class RifEclipseSummaryAddress; class RifMultipleSummaryReaders; +class RimRftCase; //================================================================================================== // @@ -66,12 +67,14 @@ protected: QString uiConfigName, caf::PdmUiEditorAttribute* attribute ) override; + void defineUiTreeOrdering( caf::PdmUiTreeOrdering& uiTreeOrdering, QString uiConfigName = "" ) override; + private: void openAndAttachAdditionalReader(); QString additionalSummaryDataFilePath() const; static QString createAdditionalSummaryFileName(); - static RifReaderOpmRft* findRftDataAndCreateReader( const QString& headerFileName ); + static RifReaderOpmRft* findRftDataAndCreateReader( const QString& rftFileName, const QString& dataDeckFileName ); private: cvf::ref m_fileSummaryReader; @@ -81,4 +84,6 @@ private: caf::PdmField m_additionalSummaryFilePath; cvf::ref m_additionalSummaryFileReader; + + caf::PdmChildField m_rftCase; }; diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimRftCase.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimRftCase.cpp new file mode 100644 index 0000000000..24ca0e0e5f --- /dev/null +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimRftCase.cpp @@ -0,0 +1,71 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2022- Equinor ASA +// +// ResInsight is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU General Public License at +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#include "RimRftCase.h" + +//================================================================================================== +// +// +// +//================================================================================================== +CAF_PDM_SOURCE_INIT( RimRftCase, "RimRftCase" ); + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RimRftCase::RimRftCase() +{ + CAF_PDM_InitObject( "RFT Case ", ":/SummaryCases16x16.png", "", "" ); + + CAF_PDM_InitFieldNoDefault( &m_rftFilePath, "RftFilePath", "Rft File" ); + m_rftFilePath.uiCapability()->setUiReadOnly( true ); + + CAF_PDM_InitFieldNoDefault( &m_dataDeckFilePath, "DataDeckFilePath", "Data Deck File" ); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimRftCase::setDataDeckFileName( const QString& fileName ) +{ + m_dataDeckFilePath.v().setPath( fileName ); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimRftCase::setRftFileName( const QString& fileName ) +{ + m_rftFilePath.v().setPath( fileName ); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QString RimRftCase::rftFilePath() const +{ + return m_rftFilePath().path(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QString RimRftCase::dataDeckFilePath() const +{ + return m_dataDeckFilePath().path(); +} diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimRftCase.h b/ApplicationLibCode/ProjectDataModel/Summary/RimRftCase.h new file mode 100644 index 0000000000..6ccffc3b57 --- /dev/null +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimRftCase.h @@ -0,0 +1,45 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2022- Equinor ASA +// +// ResInsight is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU General Public License at +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#pragma once + +#include "cafPdmField.h" +#include "cafPdmObject.h" + +//================================================================================================== +// +// +// +//================================================================================================== +class RimRftCase : public caf::PdmObject +{ + CAF_PDM_HEADER_INIT; + +public: + RimRftCase(); + + void setDataDeckFileName( const QString& fileName ); + void setRftFileName( const QString& fileName ); + + QString rftFilePath() const; + QString dataDeckFilePath() const; + +private: + caf::PdmField m_rftFilePath; + caf::PdmField m_dataDeckFilePath; +}; diff --git a/ApplicationLibCode/ProjectDataModel/WellLog/RimRftTools.cpp b/ApplicationLibCode/ProjectDataModel/WellLog/RimRftTools.cpp index 0d51edc996..a7fbdeba9b 100644 --- a/ApplicationLibCode/ProjectDataModel/WellLog/RimRftTools.cpp +++ b/ApplicationLibCode/ProjectDataModel/WellLog/RimRftTools.cpp @@ -140,9 +140,9 @@ QList RimRftTools::segmentResultNameOptions( RifReaderRf //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -QList RimRftTools::segmentBranchIdOptions( RifReaderRftInterface* readerRft, - const QString& wellName, - const QDateTime& timeStep ) +QList RimRftTools::segmentBranchIndexOptions( RifReaderRftInterface* readerRft, + const QString& wellName, + const QDateTime& timeStep ) { QList options; @@ -152,8 +152,9 @@ QList RimRftTools::segmentBranchIdOptions( RifReaderRftI { std::vector values; - auto adr = - RifEclipseRftAddress::createSegmentAddress( wellName, timeStep, RiaDefines::segmentBranchNumberResultName(), -1 ); + auto adr = RifEclipseRftAddress::createSegmentAddress( wellName, + timeStep, + RiaDefines::segmentOneBasedBranchIndexResultName() ); readerRft->values( adr, &values ); for ( const auto& v : values ) diff --git a/ApplicationLibCode/ProjectDataModel/WellLog/RimRftTools.h b/ApplicationLibCode/ProjectDataModel/WellLog/RimRftTools.h index fdc1e48f08..adb5ac3485 100644 --- a/ApplicationLibCode/ProjectDataModel/WellLog/RimRftTools.h +++ b/ApplicationLibCode/ProjectDataModel/WellLog/RimRftTools.h @@ -42,5 +42,5 @@ public: static QList segmentResultNameOptions( RifReaderRftInterface* readerRft, const QString& wellName, const QDateTime& timeStep ); static QList - segmentBranchIdOptions( RifReaderRftInterface* readerRft, const QString& wellName, const QDateTime& timeStep ); + segmentBranchIndexOptions( RifReaderRftInterface* readerRft, const QString& wellName, const QDateTime& timeStep ); }; diff --git a/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogCurveCommonDataSource.cpp b/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogCurveCommonDataSource.cpp index a5a5d6660b..cb7c6862a5 100644 --- a/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogCurveCommonDataSource.cpp +++ b/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogCurveCommonDataSource.cpp @@ -107,7 +107,8 @@ RimWellLogCurveCommonDataSource::RimWellLogCurveCommonDataSource() CAF_PDM_InitFieldNoDefault( &m_rftTimeStep, "RftTimeStep", "RFT Time Step" ); CAF_PDM_InitFieldNoDefault( &m_rftWellName, "RftWellName", "RFT Well Name" ); - CAF_PDM_InitFieldNoDefault( &m_rftSegmentBranchId, "SegmentBranchId", "RFT Segment Branch" ); + CAF_PDM_InitFieldNoDefault( &m_rftSegmentBranchIndex, "SegmentBranchIndex", "RFT Branch" ); + CAF_PDM_InitFieldNoDefault( &m_rftSegmentBranchType, "SegmentBranchType", "RFT Branch Type" ); m_case = nullptr; m_wellPath = nullptr; @@ -310,7 +311,8 @@ void RimWellLogCurveCommonDataSource::resetDefaultOptions() m_uniqueRftTimeSteps.clear(); m_uniqueRftWellNames.clear(); - m_uniqueRftBranchIds.clear(); + m_uniqueRftBranchIndices.clear(); + m_uniqueRftBranchTypes.clear(); } //-------------------------------------------------------------------------------------------------- @@ -390,7 +392,8 @@ void RimWellLogCurveCommonDataSource::analyseCurvesAndTracks( const std::vector< { m_uniqueRftWellNames.insert( adr.wellName() ); m_uniqueRftTimeSteps.insert( adr.timeStep() ); - m_uniqueRftBranchIds.insert( adr.segmentBranchNumber() ); + m_uniqueRftBranchIndices.insert( adr.segmentBranchIndex() ); + m_uniqueRftBranchTypes.insert( adr.segmentBranchType() ); } } } @@ -479,10 +482,17 @@ void RimWellLogCurveCommonDataSource::analyseCurvesAndTracks( const std::vector< m_rftTimeStep = *( m_uniqueRftTimeSteps.begin() ); } - if ( m_uniqueRftBranchIds.size() == 1u ) + if ( m_uniqueRftBranchIndices.size() == 1u ) { - m_rftSegmentBranchId = *( m_uniqueRftBranchIds.begin() ); + m_rftSegmentBranchIndex = *( m_uniqueRftBranchIndices.begin() ); } + + if ( m_uniqueRftBranchTypes.size() == 1u ) + { + m_rftSegmentBranchType = *( m_uniqueRftBranchTypes.begin() ); + } + else + m_rftSegmentBranchType = RiaDefines::RftBranchType::RFT_UNKNOWN; } //-------------------------------------------------------------------------------------------------- @@ -616,9 +626,13 @@ void RimWellLogCurveCommonDataSource::applyDataSourceChanges( const std::vector< } else if ( rftCurve ) { + if ( m_summaryCase() ) rftCurve->setSummaryCase( m_summaryCase() ); rftCurve->setTimeStep( m_rftTimeStep() ); rftCurve->setWellName( m_rftWellName() ); - rftCurve->setSegmentBranchId( m_rftSegmentBranchId() ); + rftCurve->setSegmentBranchIndex( m_rftSegmentBranchIndex() ); + + if ( m_rftSegmentBranchType() != RiaDefines::RftBranchType::RFT_UNKNOWN ) + rftCurve->setSegmentBranchType( m_rftSegmentBranchType() ); RimWellLogPlot* parentPlot = nullptr; rftCurve->firstAncestorOrThisOfTypeAsserted( parentPlot ); @@ -794,7 +808,8 @@ std::vector RimWellLogCurveCommonDataSource::fieldsToShowI if ( m_uniqueRftWellNames.size() == 1u ) fieldsToDisplay.push_back( &m_rftWellName ); if ( m_uniqueTimeSteps.size() == 1u ) fieldsToDisplay.push_back( &m_timeStep ); if ( m_uniqueRftTimeSteps.size() == 1u ) fieldsToDisplay.push_back( &m_rftTimeStep ); - if ( m_uniqueRftBranchIds.size() == 1u ) fieldsToDisplay.push_back( &m_rftSegmentBranchId ); + if ( m_uniqueRftBranchIndices.size() == 1u ) fieldsToDisplay.push_back( &m_rftSegmentBranchIndex ); + if ( m_uniqueRftBranchTypes.size() == 1u ) fieldsToDisplay.push_back( &m_rftSegmentBranchType ); return fieldsToDisplay; } @@ -985,9 +1000,9 @@ QList { options = RimRftTools::wellNameOptions( rftReader() ); } - else if ( fieldNeedingOptions == &m_rftSegmentBranchId ) + else if ( fieldNeedingOptions == &m_rftSegmentBranchIndex ) { - options = RimRftTools::segmentBranchIdOptions( rftReader(), m_rftWellName(), m_rftTimeStep() ); + options = RimRftTools::segmentBranchIndexOptions( rftReader(), m_rftWellName(), m_rftTimeStep() ); } return options; @@ -1047,7 +1062,8 @@ void RimWellLogCurveCommonDataSource::defineUiOrdering( QString uiConfigName, ca if ( !m_uniqueRftTimeSteps.empty() ) group->add( &m_rftTimeStep ); if ( !m_uniqueRftWellNames.empty() ) group->add( &m_rftWellName ); - if ( !m_uniqueRftBranchIds.empty() ) group->add( &m_rftSegmentBranchId ); + if ( !m_uniqueRftBranchIndices.empty() ) group->add( &m_rftSegmentBranchIndex ); + if ( !m_uniqueRftBranchTypes.empty() ) group->add( &m_rftSegmentBranchType ); uiOrdering.skipRemainingFields( true ); } @@ -1062,8 +1078,9 @@ void RimWellLogCurveCommonDataSource::defineEditorAttribute( const caf::PdmField auto* myAttr = dynamic_cast( attribute ); if ( myAttr ) { - if ( field == &m_case || field == &m_simWellName || field == &m_wellPath || field == &m_timeStep || - field == &m_rftTimeStep || field == &m_rftSegmentBranchId || field == &m_rftWellName ) + if ( field == &m_case || field == &m_summaryCase || field == &m_simWellName || field == &m_wellPath || + field == &m_timeStep || field == &m_rftTimeStep || field == &m_rftSegmentBranchIndex || + field == &m_rftWellName ) { myAttr->showPreviousAndNextButtons = true; myAttr->nextIcon = QIcon( ":/ComboBoxDown.svg" ); diff --git a/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogCurveCommonDataSource.h b/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogCurveCommonDataSource.h index 54b83959ef..bb001e8db5 100644 --- a/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogCurveCommonDataSource.h +++ b/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogCurveCommonDataSource.h @@ -19,6 +19,7 @@ #pragma once #include "RiaDefines.h" +#include "RiaRftDefines.h" #include "cafPdmField.h" #include "cafPdmObject.h" @@ -125,9 +126,10 @@ private: caf::PdmField m_wbsSmoothing; caf::PdmField m_wbsSmoothingThreshold; - caf::PdmField m_rftTimeStep; - caf::PdmField m_rftWellName; - caf::PdmField m_rftSegmentBranchId; + caf::PdmField m_rftTimeStep; + caf::PdmField m_rftWellName; + caf::PdmField m_rftSegmentBranchIndex; + caf::PdmField> m_rftSegmentBranchType; std::set m_uniqueCases; std::set m_uniqueSummaryCases; @@ -140,7 +142,8 @@ private: std::set m_uniqueWbsSmoothing; std::set m_uniqueWbsSmoothingThreshold; - std::set m_uniqueRftTimeSteps; - std::set m_uniqueRftWellNames; - std::set m_uniqueRftBranchIds; + std::set m_uniqueRftTimeSteps; + std::set m_uniqueRftWellNames; + std::set m_uniqueRftBranchIndices; + std::set m_uniqueRftBranchTypes; }; diff --git a/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogRftCurve.cpp b/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogRftCurve.cpp index 8ee4b02003..98ca5218f2 100644 --- a/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogRftCurve.cpp +++ b/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogRftCurve.cpp @@ -174,7 +174,8 @@ RimWellLogRftCurve::RimWellLogRftCurve() CAF_PDM_InitFieldNoDefault( &m_rftDataType, "RftDataType", "Data Type" ); CAF_PDM_InitField( &m_segmentResultName, "SegmentResultName", RiaResultNames::undefinedResultName(), "Segment Result Name" ); - CAF_PDM_InitField( &m_segmentBranchId, "SegmentBranchId", -1, "Segment Branch" ); + CAF_PDM_InitField( &m_segmentBranchIndex, "SegmentBranchIndex", -1, "Segment Branch" ); + CAF_PDM_InitFieldNoDefault( &m_segmentBranchType, "SegmentBranchType", "Branch Type" ); } //-------------------------------------------------------------------------------------------------- @@ -235,9 +236,17 @@ QDateTime RimWellLogRftCurve::timeStep() const //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RimWellLogRftCurve::setSegmentBranchId( int branchId ) +void RimWellLogRftCurve::setSegmentBranchIndex( int branchIndex ) { - m_segmentBranchId = branchId; + m_segmentBranchIndex = branchIndex; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimWellLogRftCurve::setSegmentBranchType( RiaDefines::RftBranchType branchType ) +{ + m_segmentBranchType = branchType; } //-------------------------------------------------------------------------------------------------- @@ -315,9 +324,9 @@ void RimWellLogRftCurve::setRftAddress( RifEclipseRftAddress address ) if ( address.wellLogChannel() == RifEclipseRftAddress::RftWellLogChannelType::SEGMENT_VALUES ) { - m_rftDataType = RftDataType::RFT_SEGMENT_DATA; - m_segmentResultName = address.segmentResultName(); - m_segmentBranchId = address.segmentBranchNumber(); + m_rftDataType = RftDataType::RFT_SEGMENT_DATA; + m_segmentResultName = address.segmentResultName(); + m_segmentBranchIndex = address.segmentBranchIndex(); } else { @@ -332,7 +341,11 @@ RifEclipseRftAddress RimWellLogRftCurve::rftAddress() const { if ( m_rftDataType == RftDataType::RFT_SEGMENT_DATA ) { - return RifEclipseRftAddress::createSegmentAddress( m_wellName, m_timeStep, m_segmentResultName(), m_segmentBranchId() ); + return RifEclipseRftAddress::createBranchSegmentAddress( m_wellName, + m_timeStep, + m_segmentResultName(), + m_segmentBranchIndex(), + m_segmentBranchType() ); } return RifEclipseRftAddress::createAddress( m_wellName, m_timeStep, m_wellLogChannelName() ); @@ -470,8 +483,10 @@ QString RimWellLogRftCurve::createCurveAutoName() { name.push_back( m_segmentResultName ); - QString branchText = QString( "Branch %1" ).arg( m_segmentBranchId() ); + QString branchText = QString( "Branch %1" ).arg( m_segmentBranchIndex() ); name.push_back( branchText ); + + name.push_back( m_segmentBranchType().uiText() ); } if ( !m_timeStep().isNull() ) @@ -694,7 +709,8 @@ void RimWellLogRftCurve::defineUiOrdering( QString uiConfigName, caf::PdmUiOrder else { curveDataGroup->add( &m_segmentResultName ); - curveDataGroup->add( &m_segmentBranchId ); + curveDataGroup->add( &m_segmentBranchIndex ); + curveDataGroup->add( &m_segmentBranchType ); } caf::PdmUiGroup* stackingGroup = uiOrdering.addNewGroup( "Stacking" ); @@ -759,9 +775,9 @@ QList RimWellLogRftCurve::calculateValueOptions( const c { options = RimRftTools::segmentResultNameOptions( reader, m_wellName(), m_timeStep() ); } - else if ( fieldNeedingOptions == &m_segmentBranchId ) + else if ( fieldNeedingOptions == &m_segmentBranchIndex ) { - options = RimRftTools::segmentBranchIdOptions( reader, m_wellName(), m_timeStep() ); + options = RimRftTools::segmentBranchIndexOptions( reader, m_wellName(), m_timeStep() ); } return options; @@ -811,8 +827,8 @@ void RimWellLogRftCurve::fieldChangedByUi( const caf::PdmFieldHandle* changedFie } loadData = true; } - else if ( changedField == &m_timeStep || changedField == &m_segmentResultName || - changedField == &m_segmentBranchId || changedField == &m_rftDataType ) + else if ( changedField == &m_timeStep || changedField == &m_segmentResultName || changedField == &m_segmentBranchIndex || + changedField == &m_rftDataType || changedField == &m_segmentBranchType ) { loadData = true; } @@ -999,8 +1015,11 @@ std::vector RimWellLogRftCurve::xValues() if ( m_rftDataType() == RftDataType::RFT_SEGMENT_DATA ) { - auto depthAddress = - RifEclipseRftAddress::createSegmentAddress( m_wellName(), m_timeStep, m_segmentResultName(), segmentBranchId() ); + auto depthAddress = RifEclipseRftAddress::createBranchSegmentAddress( m_wellName(), + m_timeStep, + m_segmentResultName(), + segmentBranchIndex(), + m_segmentBranchType() ); reader->values( depthAddress, &values ); @@ -1063,10 +1082,11 @@ std::vector RimWellLogRftCurve::tvDepthValues() if ( m_rftDataType() == RftDataType::RFT_SEGMENT_DATA ) { - auto depthAddress = RifEclipseRftAddress::createSegmentAddress( m_wellName(), - m_timeStep, - RiaDefines::segmentTvdDepthResultName(), - segmentBranchId() ); + auto depthAddress = RifEclipseRftAddress::createBranchSegmentAddress( m_wellName(), + m_timeStep, + RiaDefines::segmentTvdDepthResultName(), + segmentBranchIndex(), + m_segmentBranchType() ); reader->values( depthAddress, &values ); return values; @@ -1108,10 +1128,12 @@ std::vector RimWellLogRftCurve::measuredDepthValues() RifReaderRftInterface* reader = rftReader(); if ( reader ) { - auto depthAddress = RifEclipseRftAddress::createSegmentAddress( m_wellName(), - m_timeStep, - RiaDefines::segmentStartDepthResultName(), - segmentBranchId() ); + auto depthAddress = + RifEclipseRftAddress::createBranchSegmentAddress( m_wellName(), + m_timeStep, + RiaDefines::segmentStartDepthResultName(), + segmentBranchIndex(), + m_segmentBranchType() ); reader->values( depthAddress, &values ); @@ -1236,7 +1258,7 @@ bool RimWellLogRftCurve::deriveMeasuredDepthFromObservedData( const std::vector< //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -int RimWellLogRftCurve::segmentBranchId() const +int RimWellLogRftCurve::segmentBranchIndex() const { - return m_segmentBranchId(); + return m_segmentBranchIndex(); } diff --git a/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogRftCurve.h b/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogRftCurve.h index 73ddae2aee..7f7bbcd65d 100644 --- a/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogRftCurve.h +++ b/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogRftCurve.h @@ -76,7 +76,8 @@ public: void setTimeStep( const QDateTime& dateTime ); QDateTime timeStep() const; - void setSegmentBranchId( int branchId ); + void setSegmentBranchIndex( int branchIndex ); + void setSegmentBranchType( RiaDefines::RftBranchType branchType ); void setEclipseResultCase( RimEclipseResultCase* eclipseResultCase ); RimEclipseResultCase* eclipseResultCase() const; @@ -130,7 +131,7 @@ private: bool deriveMeasuredDepthFromObservedData( const std::vector& tvDepthValues, std::vector& derivedMDValues ); - int segmentBranchId() const; + int segmentBranchIndex() const; private: caf::PdmPtrField m_eclipseResultCase; @@ -144,8 +145,9 @@ private: caf::PdmField> m_rftDataType; - caf::PdmField m_segmentResultName; - caf::PdmField m_segmentBranchId; + caf::PdmField m_segmentResultName; + caf::PdmField m_segmentBranchIndex; + caf::PdmField> m_segmentBranchType; std::map m_idxInWellPathToIdxInRftFile; caf::PdmField> m_wellLogChannelName; diff --git a/ThirdParty/custom-opm-common/custom-opm-parser-tests/TestData/test_wseglink.DATA b/ThirdParty/custom-opm-common/custom-opm-parser-tests/TestData/test_wseglink.DATA new file mode 100644 index 0000000000..de5bc36cd1 --- /dev/null +++ b/ThirdParty/custom-opm-common/custom-opm-parser-tests/TestData/test_wseglink.DATA @@ -0,0 +1,22 @@ +-- WSEGLINK +-- well-name segment-no-1 segment-no-2 +-- If item #2 and #3 are undefined, all segment links for the well are removed. +-- If either item #2 or #3 is undefined, all segment links are removed for the well and segment given. +-- + +WSEGLINK + PROD 22 30 / + PROD2 25 37 / +/ + +WSEGLINK + PROD_A 20 30 / +/ + +WSEGLINK + PROD_A 20 / +/ + +WSEGLINK + PROD_A / +/ diff --git a/ThirdParty/custom-opm-common/custom-opm-parser-tests/opm-parser-BasicTest.cpp b/ThirdParty/custom-opm-common/custom-opm-parser-tests/opm-parser-BasicTest.cpp index 952a1f70ad..22e05ad6c1 100644 --- a/ThirdParty/custom-opm-common/custom-opm-parser-tests/opm-parser-BasicTest.cpp +++ b/ThirdParty/custom-opm-common/custom-opm-parser-tests/opm-parser-BasicTest.cpp @@ -3,13 +3,14 @@ #include "gtest/gtest.h" -#include "opm/input/eclipse/Parser/ParseContext.hpp" #include "opm/input/eclipse/Parser/ParseContext.hpp" #include "opm/input/eclipse/Schedule/VFPInjTable.hpp" #include "opm/input/eclipse/Schedule/VFPProdTable.hpp" #include "opm/input/eclipse/Parser/Parser.hpp" #include "opm/input/eclipse/Deck/Deck.hpp" + #include +#include "opm/input/eclipse/Parser/ParserKeywords/W.hpp" #include "OpmTestDataDirectory.h" @@ -24,9 +25,9 @@ TEST(OpmParserTest, ReadFromFile) { Parser parser(false); - const ::Opm::ParserKeywords::VFPPROD kw1; + const ::Opm::ParserKeywords::VFPPROD kw1; - parser.addParserKeyword(kw1); + parser.addParserKeyword(kw1); std::stringstream ss; ss << TEST_DATA_DIR << "/B1BH.Ecl"; @@ -50,12 +51,12 @@ TEST(OpmParserTest, ReadFromFile) } } { - Parser parser(false); - const ::Opm::ParserKeywords::VFPINJ kw1; - const ::Opm::ParserKeywords::VFPIDIMS kw2; + Parser parser(false); + const ::Opm::ParserKeywords::VFPINJ kw1; + const ::Opm::ParserKeywords::VFPIDIMS kw2; - parser.addParserKeyword(kw1); - parser.addParserKeyword(kw2); + parser.addParserKeyword(kw1); + parser.addParserKeyword(kw2); std::stringstream ss; ss << TEST_DATA_DIR << "/C1H.Ecl"; @@ -80,6 +81,59 @@ TEST(OpmParserTest, ReadFromFile) } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +TEST(OpmParserTest, ReadAndParseWSEGLINK) +{ + Parser parser(false); + const ::Opm::ParserKeywords::WSEGLINK kw1; + parser.addParserKeyword(kw1); - \ No newline at end of file + std::stringstream ss; + ss << TEST_DATA_DIR << "/test_wseglink.DATA"; + std::string testFile = ss.str(); + + auto deck = parser.parseFile(testFile); + + std::string myKeyword = "WSEGLINK"; + auto keywordList = deck.getKeywordList(myKeyword); + for (auto kw : keywordList) + { + auto name = kw->name(); + + for (size_t i = 0; i < kw->size(); i++) + { + auto deckRecord = kw->getRecord(i); + + std::string wellName; + int segment1 = -1; + int segment2 = -1; + + { + auto itemName = ::Opm::ParserKeywords::WSEGLINK::WELL::itemName; + if (deckRecord.hasItem(itemName) && deckRecord.getItem(itemName).hasValue(0)) + { + wellName = deckRecord.getItem(itemName).getTrimmedString(0); + } + } + { + auto itemName = ::Opm::ParserKeywords::WSEGLINK::SEGMENT1::itemName; + if (deckRecord.hasItem(itemName) && deckRecord.getItem(itemName).hasValue(0)) + { + segment1 = deckRecord.getItem(itemName).get(0); + } + } + { + auto itemName = ::Opm::ParserKeywords::WSEGLINK::SEGMENT2::itemName; + if (deckRecord.hasItem(itemName) && deckRecord.getItem(itemName).hasValue(0)) + { + segment2 = deckRecord.getItem(itemName).get(0); + } + } + + std::cout << wellName << " " << segment1 << " " << segment2 << std::endl; + } + } +} \ No newline at end of file From 0dded5a2528bed7f1eba7e70f5834fb26d45c4d7 Mon Sep 17 00:00:00 2001 From: jonjenssen Date: Tue, 16 Aug 2022 12:43:15 +0200 Subject: [PATCH 058/129] Tiny refactor --- ApplicationLibCode/UserInterface/RiuPlotMainWindow.cpp | 2 +- ApplicationLibCode/UserInterface/RiuPlotMainWindow.h | 2 +- ApplicationLibCode/UserInterface/RiuViewerCommands.cpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/ApplicationLibCode/UserInterface/RiuPlotMainWindow.cpp b/ApplicationLibCode/UserInterface/RiuPlotMainWindow.cpp index 75fe6414c8..d87ce4ce99 100644 --- a/ApplicationLibCode/UserInterface/RiuPlotMainWindow.cpp +++ b/ApplicationLibCode/UserInterface/RiuPlotMainWindow.cpp @@ -147,7 +147,7 @@ RiuPlotMainWindow* RiuPlotMainWindow::instance() //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RiuPlotMainWindow::wellSelected( QString wellName ) +void RiuPlotMainWindow::onWellSelected( QString wellName ) { RiuPlotMainWindow* plotWnd = instance(); if ( !plotWnd ) return; diff --git a/ApplicationLibCode/UserInterface/RiuPlotMainWindow.h b/ApplicationLibCode/UserInterface/RiuPlotMainWindow.h index b6e9968ed3..3395fc2e98 100644 --- a/ApplicationLibCode/UserInterface/RiuPlotMainWindow.h +++ b/ApplicationLibCode/UserInterface/RiuPlotMainWindow.h @@ -60,7 +60,7 @@ public: ~RiuPlotMainWindow() override; static RiuPlotMainWindow* instance(); - static void wellSelected( QString wellName ); + static void onWellSelected( QString wellName ); QString mainWindowName() override; diff --git a/ApplicationLibCode/UserInterface/RiuViewerCommands.cpp b/ApplicationLibCode/UserInterface/RiuViewerCommands.cpp index 6a58054724..46b1d5e34a 100644 --- a/ApplicationLibCode/UserInterface/RiuViewerCommands.cpp +++ b/ApplicationLibCode/UserInterface/RiuViewerCommands.cpp @@ -872,7 +872,7 @@ void RiuViewerCommands::handlePickAction( int winPosX, int winPosY, Qt::Keyboard { bool allowActiveViewChange = dynamic_cast( m_viewer->ownerViewWindow() ) == nullptr; - RiuPlotMainWindow::wellSelected( eclipseWellSourceInfo->well()->name() ); + RiuPlotMainWindow::onWellSelected( eclipseWellSourceInfo->well()->name() ); RiuMainWindow::instance()->selectAsCurrentItem( eclipseWellSourceInfo->well(), allowActiveViewChange ); } else if ( wellConnectionSourceInfo ) From 05e0817074ec16575448add72975696795eb5a8e Mon Sep 17 00:00:00 2001 From: jonjenssen <69144954+jonjenssen@users.noreply.github.com> Date: Wed, 17 Aug 2022 08:11:30 +0200 Subject: [PATCH 059/129] Make sure toolbar is refreshed when a new plot is added (#9199) --- .../AnalysisPlotCommands/RicNewAnalysisPlotFeature.cpp | 1 + .../CompletionCommands/RicNewStimPlanModelPlotFeature.cpp | 1 + .../RicNewCorrelationMatrixPlotFeature.cpp | 1 + .../CorrelationPlotCommands/RicNewCorrelationPlotFeature.cpp | 1 + .../RicNewCorrelationReportPlotFeature.cpp | 1 + .../RicNewParameterResultCrossPlotFeature.cpp | 1 + .../RicAddStoredFlowCharacteristicsPlotFeature.cpp | 1 + .../FlowCommands/RicAddStoredWellAllocationPlotFeature.cpp | 1 + .../FlowCommands/RicShowFlowCharacteristicsPlotFeature.cpp | 1 + .../FlowCommands/RicShowWellAllocationPlotFeature.cpp | 1 + .../GridCrossPlotCommands/RicCreateGridCrossPlotFeature.cpp | 1 + .../RicCreateSaturationPressurePlotsFeature.cpp | 1 + .../RicCreateEnsembleFractureStatisticsPlotFeature.cpp | 1 + .../Commands/RicCreateEnsembleWellLogFeature.cpp | 1 + .../Commands/RicCreateGridStatisticsPlotFeature.cpp | 1 + ApplicationLibCode/Commands/RicImportSummaryCasesFeature.cpp | 1 + ApplicationLibCode/Commands/RicNewVfpPlotFeature.cpp | 1 + .../RicNewSummaryCrossPlotCurveFeature.cpp | 4 ++-- .../SummaryPlotCommands/RicNewSummaryCrossPlotFeature.cpp | 1 + .../Commands/WellLogCommands/RicAddWellLogToPlotFeature.cpp | 1 + .../Commands/WellLogCommands/RicNewPltPlotFeature.cpp | 1 + .../Commands/WellLogCommands/RicNewRftPlotFeature.cpp | 1 + .../WellLogCommands/RicNewWellBoreStabilityPlotFeature.cpp | 1 + .../Commands/WellLogCommands/RicNewWellLogPlotFeature.cpp | 3 +++ 24 files changed, 27 insertions(+), 2 deletions(-) diff --git a/ApplicationLibCode/Commands/AnalysisPlotCommands/RicNewAnalysisPlotFeature.cpp b/ApplicationLibCode/Commands/AnalysisPlotCommands/RicNewAnalysisPlotFeature.cpp index 881d7a7c14..35af3e91a8 100644 --- a/ApplicationLibCode/Commands/AnalysisPlotCommands/RicNewAnalysisPlotFeature.cpp +++ b/ApplicationLibCode/Commands/AnalysisPlotCommands/RicNewAnalysisPlotFeature.cpp @@ -98,6 +98,7 @@ void RicNewAnalysisPlotFeature::onActionTriggered( bool isChecked ) RiuPlotMainWindowTools::setExpanded( newPlot ); RiuPlotMainWindowTools::selectAsCurrentItem( newPlot ); + RiuPlotMainWindowTools::refreshToolbars(); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/Commands/CompletionCommands/RicNewStimPlanModelPlotFeature.cpp b/ApplicationLibCode/Commands/CompletionCommands/RicNewStimPlanModelPlotFeature.cpp index ee0e93175f..f0eb7d6508 100644 --- a/ApplicationLibCode/Commands/CompletionCommands/RicNewStimPlanModelPlotFeature.cpp +++ b/ApplicationLibCode/Commands/CompletionCommands/RicNewStimPlanModelPlotFeature.cpp @@ -176,6 +176,7 @@ RimStimPlanModelPlot* RicNewStimPlanModelPlotFeature::createPlot( RimStimPlanMod } RiuPlotMainWindowTools::selectAsCurrentItem( plot ); + RiuPlotMainWindowTools::refreshToolbars(); // Make sure the summary plot window is visible RiuPlotMainWindowTools::showPlotMainWindow(); diff --git a/ApplicationLibCode/Commands/CorrelationPlotCommands/RicNewCorrelationMatrixPlotFeature.cpp b/ApplicationLibCode/Commands/CorrelationPlotCommands/RicNewCorrelationMatrixPlotFeature.cpp index 97e860f937..b7f4fd55cd 100644 --- a/ApplicationLibCode/Commands/CorrelationPlotCommands/RicNewCorrelationMatrixPlotFeature.cpp +++ b/ApplicationLibCode/Commands/CorrelationPlotCommands/RicNewCorrelationMatrixPlotFeature.cpp @@ -102,6 +102,7 @@ void RicNewCorrelationMatrixPlotFeature::onActionTriggered( bool isChecked ) RiuPlotMainWindowTools::setExpanded( newPlot ); RiuPlotMainWindowTools::selectAsCurrentItem( newPlot ); + RiuPlotMainWindowTools::refreshToolbars(); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/Commands/CorrelationPlotCommands/RicNewCorrelationPlotFeature.cpp b/ApplicationLibCode/Commands/CorrelationPlotCommands/RicNewCorrelationPlotFeature.cpp index 8bc865e4f0..3211e13da4 100644 --- a/ApplicationLibCode/Commands/CorrelationPlotCommands/RicNewCorrelationPlotFeature.cpp +++ b/ApplicationLibCode/Commands/CorrelationPlotCommands/RicNewCorrelationPlotFeature.cpp @@ -97,6 +97,7 @@ void RicNewCorrelationPlotFeature::onActionTriggered( bool isChecked ) RiuPlotMainWindowTools::setExpanded( newPlot ); RiuPlotMainWindowTools::selectAsCurrentItem( newPlot ); + RiuPlotMainWindowTools::refreshToolbars(); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/Commands/CorrelationPlotCommands/RicNewCorrelationReportPlotFeature.cpp b/ApplicationLibCode/Commands/CorrelationPlotCommands/RicNewCorrelationReportPlotFeature.cpp index 87dec6856e..38612778dc 100644 --- a/ApplicationLibCode/Commands/CorrelationPlotCommands/RicNewCorrelationReportPlotFeature.cpp +++ b/ApplicationLibCode/Commands/CorrelationPlotCommands/RicNewCorrelationReportPlotFeature.cpp @@ -103,6 +103,7 @@ void RicNewCorrelationReportPlotFeature::onActionTriggered( bool isChecked ) RiuPlotMainWindowTools::setExpanded( newPlot ); RiuPlotMainWindowTools::selectAsCurrentItem( newPlot ); + RiuPlotMainWindowTools::refreshToolbars(); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/Commands/CorrelationPlotCommands/RicNewParameterResultCrossPlotFeature.cpp b/ApplicationLibCode/Commands/CorrelationPlotCommands/RicNewParameterResultCrossPlotFeature.cpp index 9af051b106..9f5d06da5c 100644 --- a/ApplicationLibCode/Commands/CorrelationPlotCommands/RicNewParameterResultCrossPlotFeature.cpp +++ b/ApplicationLibCode/Commands/CorrelationPlotCommands/RicNewParameterResultCrossPlotFeature.cpp @@ -107,6 +107,7 @@ void RicNewParameterResultCrossPlotFeature::onActionTriggered( bool isChecked ) RiuPlotMainWindowTools::setExpanded( newPlot ); RiuPlotMainWindowTools::selectAsCurrentItem( newPlot ); + RiuPlotMainWindowTools::refreshToolbars(); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/Commands/FlowCommands/RicAddStoredFlowCharacteristicsPlotFeature.cpp b/ApplicationLibCode/Commands/FlowCommands/RicAddStoredFlowCharacteristicsPlotFeature.cpp index 2fd814dc55..857ff4b94d 100644 --- a/ApplicationLibCode/Commands/FlowCommands/RicAddStoredFlowCharacteristicsPlotFeature.cpp +++ b/ApplicationLibCode/Commands/FlowCommands/RicAddStoredFlowCharacteristicsPlotFeature.cpp @@ -84,6 +84,7 @@ void RicAddStoredFlowCharacteristicsPlotFeature::onActionTriggered( bool isCheck RiuPlotMainWindowTools::selectAsCurrentItem( flowCharacteristicsPlot ); RiuPlotMainWindowTools::setExpanded( flowCharacteristicsPlot ); + RiuPlotMainWindowTools::refreshToolbars(); } } } diff --git a/ApplicationLibCode/Commands/FlowCommands/RicAddStoredWellAllocationPlotFeature.cpp b/ApplicationLibCode/Commands/FlowCommands/RicAddStoredWellAllocationPlotFeature.cpp index 0fabd8d2dd..ae6e6c2918 100644 --- a/ApplicationLibCode/Commands/FlowCommands/RicAddStoredWellAllocationPlotFeature.cpp +++ b/ApplicationLibCode/Commands/FlowCommands/RicAddStoredWellAllocationPlotFeature.cpp @@ -83,6 +83,7 @@ void RicAddStoredWellAllocationPlotFeature::onActionTriggered( bool isChecked ) RiuPlotMainWindowTools::selectAsCurrentItem( wellAllocationPlot ); RiuPlotMainWindowTools::setExpanded( wellAllocationPlot ); + RiuPlotMainWindowTools::refreshToolbars(); } } } diff --git a/ApplicationLibCode/Commands/FlowCommands/RicShowFlowCharacteristicsPlotFeature.cpp b/ApplicationLibCode/Commands/FlowCommands/RicShowFlowCharacteristicsPlotFeature.cpp index c45871882a..96ad70499e 100644 --- a/ApplicationLibCode/Commands/FlowCommands/RicShowFlowCharacteristicsPlotFeature.cpp +++ b/ApplicationLibCode/Commands/FlowCommands/RicShowFlowCharacteristicsPlotFeature.cpp @@ -98,6 +98,7 @@ void RicShowFlowCharacteristicsPlotFeature::onActionTriggered( bool isChecked ) // Make sure the summary plot window is created and visible RiuPlotMainWindowTools::selectAsCurrentItem( flowPlotColl->defaultFlowCharacteristicsPlot() ); + RiuPlotMainWindowTools::refreshToolbars(); } } } diff --git a/ApplicationLibCode/Commands/FlowCommands/RicShowWellAllocationPlotFeature.cpp b/ApplicationLibCode/Commands/FlowCommands/RicShowWellAllocationPlotFeature.cpp index a1f8c59e56..188bd4d740 100644 --- a/ApplicationLibCode/Commands/FlowCommands/RicShowWellAllocationPlotFeature.cpp +++ b/ApplicationLibCode/Commands/FlowCommands/RicShowWellAllocationPlotFeature.cpp @@ -114,6 +114,7 @@ void RicShowWellAllocationPlotFeature::onActionTriggered( bool isChecked ) // Make sure the summary plot window is created and visible RiuPlotMainWindowTools::showPlotMainWindow(); RiuPlotMainWindowTools::selectAsCurrentItem( flowPlotColl->defaultWellAllocPlot() ); + RiuPlotMainWindowTools::refreshToolbars(); } } } diff --git a/ApplicationLibCode/Commands/GridCrossPlotCommands/RicCreateGridCrossPlotFeature.cpp b/ApplicationLibCode/Commands/GridCrossPlotCommands/RicCreateGridCrossPlotFeature.cpp index 6164d3894e..1af2c46a51 100644 --- a/ApplicationLibCode/Commands/GridCrossPlotCommands/RicCreateGridCrossPlotFeature.cpp +++ b/ApplicationLibCode/Commands/GridCrossPlotCommands/RicCreateGridCrossPlotFeature.cpp @@ -83,6 +83,7 @@ void RicCreateGridCrossPlotFeature::onActionTriggered( bool isChecked ) collection->updateAllRequiredEditors(); RiaGuiApplication::instance()->getOrCreateAndShowMainPlotWindow(); RiuPlotMainWindowTools::selectAsCurrentItem( dataSet ); + RiuPlotMainWindowTools::refreshToolbars(); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/Commands/GridCrossPlotCommands/RicCreateSaturationPressurePlotsFeature.cpp b/ApplicationLibCode/Commands/GridCrossPlotCommands/RicCreateSaturationPressurePlotsFeature.cpp index 80ca09499b..78d835de4f 100644 --- a/ApplicationLibCode/Commands/GridCrossPlotCommands/RicCreateSaturationPressurePlotsFeature.cpp +++ b/ApplicationLibCode/Commands/GridCrossPlotCommands/RicCreateSaturationPressurePlotsFeature.cpp @@ -200,6 +200,7 @@ void RicCreateSaturationPressurePlotsFeature::onActionTriggered( bool isChecked if ( objectToSelect ) { RiuPlotMainWindowTools::selectAsCurrentItem( objectToSelect ); + RiuPlotMainWindowTools::refreshToolbars(); } } diff --git a/ApplicationLibCode/Commands/RicCreateEnsembleFractureStatisticsPlotFeature.cpp b/ApplicationLibCode/Commands/RicCreateEnsembleFractureStatisticsPlotFeature.cpp index c895e81598..474d33a559 100644 --- a/ApplicationLibCode/Commands/RicCreateEnsembleFractureStatisticsPlotFeature.cpp +++ b/ApplicationLibCode/Commands/RicCreateEnsembleFractureStatisticsPlotFeature.cpp @@ -60,6 +60,7 @@ void RicCreateEnsembleFractureStatisticsPlotFeature::onActionTriggered( bool isC collection->updateAllRequiredEditors(); RiaGuiApplication::instance()->getOrCreateAndShowMainPlotWindow(); RiuPlotMainWindowTools::selectAsCurrentItem( plot ); + RiuPlotMainWindowTools::refreshToolbars(); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/Commands/RicCreateEnsembleWellLogFeature.cpp b/ApplicationLibCode/Commands/RicCreateEnsembleWellLogFeature.cpp index ee672001d4..2485e1fa45 100644 --- a/ApplicationLibCode/Commands/RicCreateEnsembleWellLogFeature.cpp +++ b/ApplicationLibCode/Commands/RicCreateEnsembleWellLogFeature.cpp @@ -273,6 +273,7 @@ void RicCreateEnsembleWellLogFeature::executeCommand( const RicCreateEnsembleWel RiuPlotMainWindowTools::showPlotMainWindow(); RiuPlotMainWindowTools::selectAsCurrentItem( wellLogPlot ); + RiuPlotMainWindowTools::refreshToolbars(); } } } diff --git a/ApplicationLibCode/Commands/RicCreateGridStatisticsPlotFeature.cpp b/ApplicationLibCode/Commands/RicCreateGridStatisticsPlotFeature.cpp index 4585c53686..3c81d2b015 100644 --- a/ApplicationLibCode/Commands/RicCreateGridStatisticsPlotFeature.cpp +++ b/ApplicationLibCode/Commands/RicCreateGridStatisticsPlotFeature.cpp @@ -65,6 +65,7 @@ void RicCreateGridStatisticsPlotFeature::onActionTriggered( bool isChecked ) collection->updateAllRequiredEditors(); RiaGuiApplication::instance()->getOrCreateAndShowMainPlotWindow(); RiuPlotMainWindowTools::selectAsCurrentItem( plot ); + RiuPlotMainWindowTools::refreshToolbars(); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/Commands/RicImportSummaryCasesFeature.cpp b/ApplicationLibCode/Commands/RicImportSummaryCasesFeature.cpp index 50e834532f..55f5e34b9d 100644 --- a/ApplicationLibCode/Commands/RicImportSummaryCasesFeature.cpp +++ b/ApplicationLibCode/Commands/RicImportSummaryCasesFeature.cpp @@ -145,6 +145,7 @@ bool RicImportSummaryCasesFeature::createAndAddSummaryCasesFromFiles( const QStr { RiuPlotMainWindowTools::setExpanded( plotToSelect ); RiuPlotMainWindowTools::selectAsCurrentItem( plotToSelect ); + RiuPlotMainWindowTools::refreshToolbars(); } } diff --git a/ApplicationLibCode/Commands/RicNewVfpPlotFeature.cpp b/ApplicationLibCode/Commands/RicNewVfpPlotFeature.cpp index 7cbf1755e2..ddbdeed945 100644 --- a/ApplicationLibCode/Commands/RicNewVfpPlotFeature.cpp +++ b/ApplicationLibCode/Commands/RicNewVfpPlotFeature.cpp @@ -98,6 +98,7 @@ void RicNewVfpPlotFeature::onActionTriggered( bool isChecked ) if ( !vfpPlots.empty() ) { RiuPlotMainWindowTools::selectAsCurrentItem( vfpPlots.front() ); + RiuPlotMainWindowTools::refreshToolbars(); } } } diff --git a/ApplicationLibCode/Commands/SummaryPlotCommands/RicNewSummaryCrossPlotCurveFeature.cpp b/ApplicationLibCode/Commands/SummaryPlotCommands/RicNewSummaryCrossPlotCurveFeature.cpp index 995fd126c7..0d25918a57 100644 --- a/ApplicationLibCode/Commands/SummaryPlotCommands/RicNewSummaryCrossPlotCurveFeature.cpp +++ b/ApplicationLibCode/Commands/SummaryPlotCommands/RicNewSummaryCrossPlotCurveFeature.cpp @@ -30,6 +30,7 @@ #include "RimSummaryCurve.h" #include "RiuPlotMainWindow.h" +#include "RiuPlotMainWindowTools.h" #include "WellLogCommands/RicWellLogPlotCurveFeatureImpl.h" @@ -76,8 +77,7 @@ void RicNewSummaryCrossPlotCurveFeature::onActionTriggered( bool isChecked ) RiaGuiApplication::instance()->getOrCreateAndShowMainPlotWindow()->selectAsCurrentItem( newCurve ); - RiuPlotMainWindow* mainPlotWindow = RiaGuiApplication::instance()->mainPlotWindow(); - mainPlotWindow->updateMultiPlotToolBar(); + RiuPlotMainWindowTools::refreshToolbars(); } } diff --git a/ApplicationLibCode/Commands/SummaryPlotCommands/RicNewSummaryCrossPlotFeature.cpp b/ApplicationLibCode/Commands/SummaryPlotCommands/RicNewSummaryCrossPlotFeature.cpp index 213fc8e49c..a0fd75ff6f 100644 --- a/ApplicationLibCode/Commands/SummaryPlotCommands/RicNewSummaryCrossPlotFeature.cpp +++ b/ApplicationLibCode/Commands/SummaryPlotCommands/RicNewSummaryCrossPlotFeature.cpp @@ -90,6 +90,7 @@ void RicNewSummaryCrossPlotFeature::onActionTriggered( bool isChecked ) RiuPlotMainWindowTools::showPlotMainWindow(); RiuPlotMainWindowTools::selectAsCurrentItem( summaryPlot ); RiuPlotMainWindowTools::setExpanded( summaryPlot ); + RiuPlotMainWindowTools::refreshToolbars(); } } diff --git a/ApplicationLibCode/Commands/WellLogCommands/RicAddWellLogToPlotFeature.cpp b/ApplicationLibCode/Commands/WellLogCommands/RicAddWellLogToPlotFeature.cpp index eab9e8c98e..981dd0d565 100644 --- a/ApplicationLibCode/Commands/WellLogCommands/RicAddWellLogToPlotFeature.cpp +++ b/ApplicationLibCode/Commands/WellLogCommands/RicAddWellLogToPlotFeature.cpp @@ -107,6 +107,7 @@ void RicAddWellLogToPlotFeature::onActionTriggered( bool isChecked ) RiuPlotMainWindowTools::showPlotMainWindow(); RiuPlotMainWindowTools::selectAsCurrentItem( plot ); RiuPlotMainWindowTools::setExpanded( plotTrack ); + RiuPlotMainWindowTools::refreshToolbars(); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/Commands/WellLogCommands/RicNewPltPlotFeature.cpp b/ApplicationLibCode/Commands/WellLogCommands/RicNewPltPlotFeature.cpp index 15657e0144..a83dce0b56 100644 --- a/ApplicationLibCode/Commands/WellLogCommands/RicNewPltPlotFeature.cpp +++ b/ApplicationLibCode/Commands/WellLogCommands/RicNewPltPlotFeature.cpp @@ -123,6 +123,7 @@ void RicNewPltPlotFeature::onActionTriggered( bool isChecked ) RiuPlotMainWindowTools::showPlotMainWindow(); RiuPlotMainWindowTools::setExpanded( plotTrack ); RiuPlotMainWindowTools::selectAsCurrentItem( pltPlot ); + RiuPlotMainWindowTools::refreshToolbars(); } } diff --git a/ApplicationLibCode/Commands/WellLogCommands/RicNewRftPlotFeature.cpp b/ApplicationLibCode/Commands/WellLogCommands/RicNewRftPlotFeature.cpp index acdbd313da..82fe37f957 100644 --- a/ApplicationLibCode/Commands/WellLogCommands/RicNewRftPlotFeature.cpp +++ b/ApplicationLibCode/Commands/WellLogCommands/RicNewRftPlotFeature.cpp @@ -87,6 +87,7 @@ void RicNewRftPlotFeature::onActionTriggered( bool isChecked ) RiuPlotMainWindowTools::showPlotMainWindow(); RiuPlotMainWindowTools::setExpanded( plotTrack ); RiuPlotMainWindowTools::selectAsCurrentItem( rftPlot ); + RiuPlotMainWindowTools::refreshToolbars(); } } diff --git a/ApplicationLibCode/Commands/WellLogCommands/RicNewWellBoreStabilityPlotFeature.cpp b/ApplicationLibCode/Commands/WellLogCommands/RicNewWellBoreStabilityPlotFeature.cpp index 97c2e4d42c..4cce4a286d 100644 --- a/ApplicationLibCode/Commands/WellLogCommands/RicNewWellBoreStabilityPlotFeature.cpp +++ b/ApplicationLibCode/Commands/WellLogCommands/RicNewWellBoreStabilityPlotFeature.cpp @@ -124,6 +124,7 @@ RimWellBoreStabilityPlot* // Make sure the summary plot window is visible RiuPlotMainWindowTools::showPlotMainWindow(); + RiuPlotMainWindowTools::refreshToolbars(); return plot; } diff --git a/ApplicationLibCode/Commands/WellLogCommands/RicNewWellLogPlotFeature.cpp b/ApplicationLibCode/Commands/WellLogCommands/RicNewWellLogPlotFeature.cpp index ff60c5d5a8..4dd0fd4698 100644 --- a/ApplicationLibCode/Commands/WellLogCommands/RicNewWellLogPlotFeature.cpp +++ b/ApplicationLibCode/Commands/WellLogCommands/RicNewWellLogPlotFeature.cpp @@ -29,6 +29,8 @@ #include "RimWellLogPlot.h" #include "RimWellLogTrack.h" +#include "RiuPlotMainWindowTools.h" + #include "RicWellLogTools.h" #include @@ -57,6 +59,7 @@ void RicNewWellLogPlotFeature::onActionTriggered( bool isChecked ) RimWellLogPlot* plot = nullptr; plotTrack->firstAncestorOrThisOfTypeAsserted( plot ); plot->zoomAll(); + RiuPlotMainWindowTools::refreshToolbars(); } //-------------------------------------------------------------------------------------------------- From 6a745671d78545bcedee48c60b5f79192fe7f0c8 Mon Sep 17 00:00:00 2001 From: jonjenssen Date: Wed, 17 Aug 2022 00:18:12 +0200 Subject: [PATCH 060/129] Selecting a well path in 3d view can now update selected well path in well log plots --- .../RicWellPathPickEventHandler.cpp | 3 ++ .../RimWellLogCurveCommonDataSource.cpp | 34 +++++++++++++++---- .../WellLog/RimWellLogCurveCommonDataSource.h | 2 +- .../WellLog/RimWellLogPlot.cpp | 2 +- 4 files changed, 33 insertions(+), 8 deletions(-) diff --git a/ApplicationLibCode/Commands/WellPathCommands/RicWellPathPickEventHandler.cpp b/ApplicationLibCode/Commands/WellPathCommands/RicWellPathPickEventHandler.cpp index e14e5b59fe..c81c86a3cc 100644 --- a/ApplicationLibCode/Commands/WellPathCommands/RicWellPathPickEventHandler.cpp +++ b/ApplicationLibCode/Commands/WellPathCommands/RicWellPathPickEventHandler.cpp @@ -35,6 +35,7 @@ #include "RimWellPathValve.h" #include "RiuMainWindow.h" +#include "RiuPlotMainWindow.h" #include "RivExtrudedCurveIntersectionPartMgr.h" #include "RivObjectSourceInfo.h" @@ -231,6 +232,8 @@ bool RicWellPathPickEventHandler::handle3dPickEvent( const Ric3dPickEvent& event RiuMainWindow::instance()->setResultInfo( wellPathText ); + RiuPlotMainWindow::onWellSelected( wellPathSourceInfo->wellPath()->name() ); + if ( objectToSelect ) { RiuMainWindow::instance()->selectAsCurrentItem( objectToSelect ); diff --git a/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogCurveCommonDataSource.cpp b/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogCurveCommonDataSource.cpp index cb7c6862a5..989873e24c 100644 --- a/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogCurveCommonDataSource.cpp +++ b/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogCurveCommonDataSource.cpp @@ -1151,17 +1151,39 @@ RifReaderRftInterface* RimWellLogCurveCommonDataSource::rftReader() //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RimWellLogCurveCommonDataSource::selectSimWell( QString wellName ) +void RimWellLogCurveCommonDataSource::selectWell( QString wellName ) { if ( !m_allow3DSelectionLink() ) return; - auto* eclipseCase = dynamic_cast( m_case() ); - if ( eclipseCase ) + if ( m_trajectoryType() == RimWellLogExtractionCurve::WELL_PATH ) { - std::set sortedWellNames = eclipseCase->sortedSimWellNames(); - if ( std::count( sortedWellNames.begin(), sortedWellNames.end(), wellName ) > 0 ) + QList options; + RimTools::wellPathOptionItems( &options ); + + for ( auto& opt : options ) { - m_simWellName.setValueWithFieldChanged( wellName ); + if ( opt.optionUiText() == wellName ) + { + QVariant oldPath = m_wellPath.toQVariant(); + RimWellPath* wellPath = + RimProject::current()->activeOilField()->wellPathCollection->wellPathByName( wellName ); + + m_wellPath = wellPath; + m_wellPath.uiCapability()->notifyFieldChanged( oldPath, opt.value() ); + break; + } + } + } + else if ( m_trajectoryType() == RimWellLogExtractionCurve::SIMULATION_WELL ) + { + auto* eclipseCase = dynamic_cast( m_case() ); + if ( eclipseCase ) + { + std::set sortedWellNames = eclipseCase->sortedSimWellNames(); + if ( std::count( sortedWellNames.begin(), sortedWellNames.end(), wellName ) > 0 ) + { + m_simWellName.setValueWithFieldChanged( wellName ); + } } } } diff --git a/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogCurveCommonDataSource.h b/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogCurveCommonDataSource.h index bb001e8db5..d10f1a452f 100644 --- a/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogCurveCommonDataSource.h +++ b/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogCurveCommonDataSource.h @@ -81,7 +81,7 @@ public: int timeStepToApply() const; void setTimeStepToApply( int val ); - void selectSimWell( QString wellName ); + void selectWell( QString wellName ); void resetDefaultOptions(); void analyseCurvesAndTracks( const std::vector& curves, const std::vector& tracks ); diff --git a/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogPlot.cpp b/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogPlot.cpp index 3e98fbbd8b..85ea08d46e 100644 --- a/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogPlot.cpp +++ b/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogPlot.cpp @@ -85,5 +85,5 @@ RimWellLogPlot& RimWellLogPlot::operator=( RimWellLogPlot&& rhs ) //-------------------------------------------------------------------------------------------------- void RimWellLogPlot::selectWell( QString wellName ) { - if ( m_commonDataSourceEnabled ) m_commonDataSource->selectSimWell( wellName ); + if ( m_commonDataSourceEnabled ) m_commonDataSource->selectWell( wellName ); } From a36c07dd6448df0b3d6562e9977a99a682660bcf Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Wed, 17 Aug 2022 10:04:10 +0200 Subject: [PATCH 061/129] Create features to append plots with RFT curves (#9200) * Add create plot with RFT curve * Add RFT segment plot with curve * Create tracks for all three branch types * Make sure the zero is displayed when adjusted minimum is changing sign --- .../Commands/RicWellLogTools.cpp | 61 +++++++++ ApplicationLibCode/Commands/RicWellLogTools.h | 10 ++ .../WellLogCommands/CMakeLists_files.cmake | 4 + .../RicNewRftSegmentWellLogCurveFeature.cpp | 119 ++++++++++++++++++ .../RicNewRftSegmentWellLogCurveFeature.h | 45 +++++++ .../RicNewRftWellLogCurveFeature.cpp | 92 ++++++++++++++ .../RicNewRftWellLogCurveFeature.h | 34 +++++ .../RicNewWellLogPlotFeatureImpl.cpp | 11 ++ .../RicNewWellLogPlotFeatureImpl.h | 17 ++- .../RimContextCommandBuilder.cpp | 6 + .../ProjectDataModel/RimDepthTrackPlot.cpp | 8 ++ .../ProjectDataModel/RimDepthTrackPlot.h | 8 +- .../WellLog/RimWellLogRftCurve.cpp | 1 + .../WellLog/RimWellLogTrack.cpp | 6 +- 14 files changed, 412 insertions(+), 10 deletions(-) create mode 100644 ApplicationLibCode/Commands/WellLogCommands/RicNewRftSegmentWellLogCurveFeature.cpp create mode 100644 ApplicationLibCode/Commands/WellLogCommands/RicNewRftSegmentWellLogCurveFeature.h create mode 100644 ApplicationLibCode/Commands/WellLogCommands/RicNewRftWellLogCurveFeature.cpp create mode 100644 ApplicationLibCode/Commands/WellLogCommands/RicNewRftWellLogCurveFeature.h diff --git a/ApplicationLibCode/Commands/RicWellLogTools.cpp b/ApplicationLibCode/Commands/RicWellLogTools.cpp index 3632ed87a5..89fed50fd0 100644 --- a/ApplicationLibCode/Commands/RicWellLogTools.cpp +++ b/ApplicationLibCode/Commands/RicWellLogTools.cpp @@ -466,6 +466,67 @@ RimWellLogExtractionCurve* RicWellLogTools::addWellLogExtractionCurve( RimWellLo showPlotWindow ); } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RimWellLogCurve* RicWellLogTools::addSummaryRftCurve( RimWellLogTrack* plotTrack, RimSummaryCase* rimCase ) +{ + auto curve = new RimWellLogRftCurve(); + + curve->setSummaryCase( rimCase ); + auto rftReader = rimCase->rftReader(); + + QString wellName; + auto wellNames = rftReader->wellNames(); + if ( !wellNames.empty() ) wellName = *wellNames.begin(); + + QDateTime dateTime; + + auto timeSteps = rftReader->availableTimeSteps( wellName ); + if ( !timeSteps.empty() ) dateTime = *timeSteps.rbegin(); + + RifEclipseRftAddress adr = + RifEclipseRftAddress::createAddress( wellName, dateTime, RifEclipseRftAddress::RftWellLogChannelType::PRESSURE ); + curve->setRftAddress( adr ); + + plotTrack->addCurve( curve ); + + return curve; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RimWellLogCurve* RicWellLogTools::addSummaryRftSegmentCurve( RimWellLogTrack* plotTrack, + const QString& resultName, + RiaDefines::RftBranchType branchType, + RimSummaryCase* rimCase ) +{ + auto curve = new RimWellLogRftCurve(); + + curve->setSummaryCase( rimCase ); + auto rftReader = rimCase->rftReader(); + + QString wellName; + auto wellNames = rftReader->wellNames(); + if ( !wellNames.empty() ) wellName = *wellNames.begin(); + + QDateTime dateTime; + + auto timeSteps = rftReader->availableTimeSteps( wellName ); + if ( !timeSteps.empty() ) dateTime = *timeSteps.rbegin(); + + RifEclipseRftAddress adr = + RifEclipseRftAddress::createBranchSegmentAddress( wellName, dateTime, resultName, 1, branchType ); + curve->setRftAddress( adr ); + + curve->setInterpolation( RiuQwtPlotCurveDefines::CurveInterpolationEnum::INTERPOLATION_STEP_LEFT ); + + plotTrack->addCurve( curve ); + + return curve; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/Commands/RicWellLogTools.h b/ApplicationLibCode/Commands/RicWellLogTools.h index 540e514478..c5cb594cb6 100644 --- a/ApplicationLibCode/Commands/RicWellLogTools.h +++ b/ApplicationLibCode/Commands/RicWellLogTools.h @@ -18,6 +18,8 @@ #pragma once +#include "RiaRftDefines.h" + #include #include @@ -34,6 +36,8 @@ class RimWellLogTrack; class RimWellLogWbsCurve; class RimWellPath; class RimWellMeasurementCurve; +class RimSummaryCase; +class RimWellLogCurve; //-------------------------------------------------------------------------------------------------- /// @@ -73,6 +77,12 @@ public: const QString& measurementName, bool showPlotWindow = true ); + static RimWellLogCurve* addSummaryRftCurve( RimWellLogTrack* plotTrack, RimSummaryCase* rimCase ); + static RimWellLogCurve* addSummaryRftSegmentCurve( RimWellLogTrack* plotTrack, + const QString& resultName, + RiaDefines::RftBranchType branchType, + RimSummaryCase* rimCase ); + private: template static ExtractionCurveType* addExtractionCurve( RimWellLogTrack* plotTrack, diff --git a/ApplicationLibCode/Commands/WellLogCommands/CMakeLists_files.cmake b/ApplicationLibCode/Commands/WellLogCommands/CMakeLists_files.cmake index 84d957aec4..bb63a201ce 100644 --- a/ApplicationLibCode/Commands/WellLogCommands/CMakeLists_files.cmake +++ b/ApplicationLibCode/Commands/WellLogCommands/CMakeLists_files.cmake @@ -27,6 +27,8 @@ set(SOURCE_GROUP_HEADER_FILES ${CMAKE_CURRENT_LIST_DIR}/RicNewWellBoreStabilityPlotFeature.h ${CMAKE_CURRENT_LIST_DIR}/RicNewWellMeasurementCurveFeature.h ${CMAKE_CURRENT_LIST_DIR}/RicNewEnsembleWellLogCurveSetFeature.h + ${CMAKE_CURRENT_LIST_DIR}/RicNewRftWellLogCurveFeature.h + ${CMAKE_CURRENT_LIST_DIR}/RicNewRftSegmentWellLogCurveFeature.h ) set(SOURCE_GROUP_SOURCE_FILES @@ -58,6 +60,8 @@ set(SOURCE_GROUP_SOURCE_FILES ${CMAKE_CURRENT_LIST_DIR}/RicNewWellBoreStabilityPlotFeature.cpp ${CMAKE_CURRENT_LIST_DIR}/RicNewWellMeasurementCurveFeature.cpp ${CMAKE_CURRENT_LIST_DIR}/RicNewEnsembleWellLogCurveSetFeature.cpp + ${CMAKE_CURRENT_LIST_DIR}/RicNewRftWellLogCurveFeature.cpp + ${CMAKE_CURRENT_LIST_DIR}/RicNewRftSegmentWellLogCurveFeature.cpp ) list(APPEND COMMAND_CODE_HEADER_FILES ${SOURCE_GROUP_HEADER_FILES}) diff --git a/ApplicationLibCode/Commands/WellLogCommands/RicNewRftSegmentWellLogCurveFeature.cpp b/ApplicationLibCode/Commands/WellLogCommands/RicNewRftSegmentWellLogCurveFeature.cpp new file mode 100644 index 0000000000..42ba16e65f --- /dev/null +++ b/ApplicationLibCode/Commands/WellLogCommands/RicNewRftSegmentWellLogCurveFeature.cpp @@ -0,0 +1,119 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2022 Equinor ASA +// +// ResInsight is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU General Public License at +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#include "RicNewRftSegmentWellLogCurveFeature.h" + +#include "RicNewWellLogPlotFeatureImpl.h" +#include "RicWellLogPlotCurveFeatureImpl.h" +#include "RicWellLogTools.h" + +#include "RiaApplication.h" +#include "RiaRftDefines.h" + +#include "RigWellLogCurveData.h" + +#include "RimRftCase.h" +#include "RimSummaryCase.h" +#include "RimWellLogExtractionCurve.h" +#include "RimWellLogPlot.h" +#include "RimWellLogTrack.h" + +#include "Riu3dSelectionManager.h" +#include "RiuPlotMainWindow.h" +#include "RiuPlotMainWindowTools.h" + +#include "cafSelectionManager.h" + +#include + +#include + +CAF_CMD_SOURCE_INIT( RicNewRftSegmentWellLogCurveFeature, "RicNewRftSegmentWellLogCurveFeature" ); + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +bool RicNewRftSegmentWellLogCurveFeature::isCommandEnabled() +{ + return true; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RicNewRftSegmentWellLogCurveFeature::onActionTriggered( bool isChecked ) +{ + auto rftCase = caf::SelectionManager::instance()->selectedItemOfType(); + if ( !rftCase ) return; + + RimSummaryCase* summaryCase = nullptr; + rftCase->firstAncestorOfType( summaryCase ); + + auto plot = RicNewWellLogPlotFeatureImpl::createHorizontalWellLogPlot(); + + QString resultName = "SEGGRAT"; + + { + auto branchType = RiaDefines::RftBranchType::RFT_TUBING; + + appendTrackAndCurveForBranchType( plot, resultName, branchType, summaryCase ); + } + { + auto branchType = RiaDefines::RftBranchType::RFT_DEVICE; + + appendTrackAndCurveForBranchType( plot, resultName, branchType, summaryCase ); + } + { + auto branchType = RiaDefines::RftBranchType::RFT_ANNULUS; + + appendTrackAndCurveForBranchType( plot, resultName, branchType, summaryCase ); + } + + RiuPlotMainWindowTools::selectAsCurrentItem( plot ); + RiuPlotMainWindowTools::refreshToolbars(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RicNewRftSegmentWellLogCurveFeature::appendTrackAndCurveForBranchType( RimWellLogPlot* plot, + const QString& resultName, + RiaDefines::RftBranchType branchType, + RimSummaryCase* summaryCase ) +{ + RimWellLogTrack* plotTrack = new RimWellLogTrack(); + plot->addPlot( plotTrack ); + plotTrack->setDescription( QString( "Track %1" ).arg( plot->plotCount() ) ); + + plot->loadDataAndUpdate(); + + auto curve = RicWellLogTools::addSummaryRftSegmentCurve( plotTrack, resultName, branchType, summaryCase ); + curve->loadDataAndUpdate( true ); + + curve->updateAllRequiredEditors(); + RiuPlotMainWindowTools::setExpanded( curve ); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RicNewRftSegmentWellLogCurveFeature::setupActionLook( QAction* actionToSetup ) +{ + actionToSetup->setText( "Append RFT Segment Curve" ); + actionToSetup->setIcon( QIcon( ":/WellLogCurve16x16.png" ) ); +} diff --git a/ApplicationLibCode/Commands/WellLogCommands/RicNewRftSegmentWellLogCurveFeature.h b/ApplicationLibCode/Commands/WellLogCommands/RicNewRftSegmentWellLogCurveFeature.h new file mode 100644 index 0000000000..5737bb8f38 --- /dev/null +++ b/ApplicationLibCode/Commands/WellLogCommands/RicNewRftSegmentWellLogCurveFeature.h @@ -0,0 +1,45 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2022 Equinor ASA +// +// ResInsight is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU General Public License at +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#pragma once + +#include "RiaRftDefines.h" + +#include "cafCmdFeature.h" + +class RimWellLogPlot; +class RimSummaryCase; + +//================================================================================================== +/// +//================================================================================================== +class RicNewRftSegmentWellLogCurveFeature : public caf::CmdFeature +{ + CAF_CMD_HEADER_INIT; + +private: + bool isCommandEnabled() override; + void onActionTriggered( bool isChecked ) override; + + void setupActionLook( QAction* actionToSetup ) override; + + void appendTrackAndCurveForBranchType( RimWellLogPlot* plot, + const QString& resultName, + RiaDefines::RftBranchType branchType, + RimSummaryCase* summaryCase ); +}; diff --git a/ApplicationLibCode/Commands/WellLogCommands/RicNewRftWellLogCurveFeature.cpp b/ApplicationLibCode/Commands/WellLogCommands/RicNewRftWellLogCurveFeature.cpp new file mode 100644 index 0000000000..928ba2d6e5 --- /dev/null +++ b/ApplicationLibCode/Commands/WellLogCommands/RicNewRftWellLogCurveFeature.cpp @@ -0,0 +1,92 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2022 Equinor ASA +// +// ResInsight is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU General Public License at +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#include "RicNewRftWellLogCurveFeature.h" + +#include "RicNewWellLogPlotFeatureImpl.h" +#include "RicWellLogPlotCurveFeatureImpl.h" +#include "RicWellLogTools.h" + +#include "RiaApplication.h" + +#include "RigWellLogCurveData.h" + +#include "RimRftCase.h" +#include "RimSummaryCase.h" +#include "RimWellLogExtractionCurve.h" +#include "RimWellLogPlot.h" +#include "RimWellLogTrack.h" + +#include "Riu3dSelectionManager.h" +#include "RiuPlotMainWindow.h" +#include "RiuPlotMainWindowTools.h" + +#include "cafSelectionManager.h" + +#include + +#include + +CAF_CMD_SOURCE_INIT( RicNewRftWellLogCurveFeature, "RicNewRftWellLogCurveFeature" ); + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +bool RicNewRftWellLogCurveFeature::isCommandEnabled() +{ + return true; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RicNewRftWellLogCurveFeature::onActionTriggered( bool isChecked ) +{ + auto rftCase = caf::SelectionManager::instance()->selectedItemOfType(); + if ( !rftCase ) return; + + RimSummaryCase* summaryCase = nullptr; + rftCase->firstAncestorOfType( summaryCase ); + + auto plot = RicNewWellLogPlotFeatureImpl::createWellLogPlot(); + + RimWellLogTrack* plotTrack = new RimWellLogTrack(); + plot->addPlot( plotTrack ); + plotTrack->setDescription( QString( "Track %1" ).arg( plot->plotCount() ) ); + + plot->loadDataAndUpdate(); + + auto curve = RicWellLogTools::addSummaryRftCurve( plotTrack, summaryCase ); + curve->loadDataAndUpdate( true ); + + curve->updateAllRequiredEditors(); + + RiuPlotMainWindowTools::setExpanded( curve ); + RiuPlotMainWindowTools::selectAsCurrentItem( curve ); + + RiuPlotMainWindowTools::refreshToolbars(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RicNewRftWellLogCurveFeature::setupActionLook( QAction* actionToSetup ) +{ + actionToSetup->setText( "Append RFT Well Log Curve" ); + actionToSetup->setIcon( QIcon( ":/WellLogCurve16x16.png" ) ); +} diff --git a/ApplicationLibCode/Commands/WellLogCommands/RicNewRftWellLogCurveFeature.h b/ApplicationLibCode/Commands/WellLogCommands/RicNewRftWellLogCurveFeature.h new file mode 100644 index 0000000000..7b8a1b3b4a --- /dev/null +++ b/ApplicationLibCode/Commands/WellLogCommands/RicNewRftWellLogCurveFeature.h @@ -0,0 +1,34 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2022 Equinor ASA +// +// ResInsight is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU General Public License at +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#pragma once + +#include "cafCmdFeature.h" + +//================================================================================================== +/// +//================================================================================================== +class RicNewRftWellLogCurveFeature : public caf::CmdFeature +{ + CAF_CMD_HEADER_INIT; + +private: + bool isCommandEnabled() override; + void onActionTriggered( bool isChecked ) override; + void setupActionLook( QAction* actionToSetup ) override; +}; diff --git a/ApplicationLibCode/Commands/WellLogCommands/RicNewWellLogPlotFeatureImpl.cpp b/ApplicationLibCode/Commands/WellLogCommands/RicNewWellLogPlotFeatureImpl.cpp index 30f90889ae..3e8115408a 100644 --- a/ApplicationLibCode/Commands/WellLogCommands/RicNewWellLogPlotFeatureImpl.cpp +++ b/ApplicationLibCode/Commands/WellLogCommands/RicNewWellLogPlotFeatureImpl.cpp @@ -80,6 +80,17 @@ RimWellBoreStabilityPlot* return plot; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RimWellLogPlot* RicNewWellLogPlotFeatureImpl::createHorizontalWellLogPlot() +{ + auto plot = createWellLogPlot(); + plot->setDepthOrientation( RimDepthTrackPlot::DepthOrientation::HORIZONTAL ); + + return plot; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/Commands/WellLogCommands/RicNewWellLogPlotFeatureImpl.h b/ApplicationLibCode/Commands/WellLogCommands/RicNewWellLogPlotFeatureImpl.h index 738a309510..8ffdfd6f7a 100644 --- a/ApplicationLibCode/Commands/WellLogCommands/RicNewWellLogPlotFeatureImpl.h +++ b/ApplicationLibCode/Commands/WellLogCommands/RicNewWellLogPlotFeatureImpl.h @@ -37,12 +37,17 @@ public: static RimWellBoreStabilityPlot* createWellBoreStabilityPlot( bool showAfterCreation = true, const QString& plotDescription = QString( "" ), const RimWbsParameters* params = nullptr ); - static RimWellLogPlot* createWellLogPlot( bool showAfterCreation = true, - const QString& plotDescription = QString( "" ) ); - static RimWellLogTrack* createWellLogPlotTrack( bool updateAfterCreation = true, - const QString& trackDescription = QString( "" ), - RimDepthTrackPlot* existingPlot = nullptr ); - static void updateAfterCreation( RimDepthTrackPlot* plot ); + + static RimWellLogPlot* createHorizontalWellLogPlot(); + + static RimWellLogPlot* createWellLogPlot( bool showAfterCreation = true, + const QString& plotDescription = QString( "" ) ); + + static RimWellLogTrack* createWellLogPlotTrack( bool updateAfterCreation = true, + const QString& trackDescription = QString( "" ), + RimDepthTrackPlot* existingPlot = nullptr ); + + static void updateAfterCreation( RimDepthTrackPlot* plot ); private: static RimWellLogPlotCollection* wellLogPlotCollection(); diff --git a/ApplicationLibCode/ProjectDataModel/RimContextCommandBuilder.cpp b/ApplicationLibCode/ProjectDataModel/RimContextCommandBuilder.cpp index dbb0c0db8e..137a501729 100644 --- a/ApplicationLibCode/ProjectDataModel/RimContextCommandBuilder.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimContextCommandBuilder.cpp @@ -106,6 +106,7 @@ #include "RimPltPlotCollection.h" #include "RimPressureTable.h" #include "RimProject.h" +#include "RimRftCase.h" #include "RimRftPlotCollection.h" #include "RimSaturationPressurePlotCollection.h" #include "RimScriptCollection.h" @@ -1070,6 +1071,11 @@ caf::CmdFeatureMenuBuilder RimContextCommandBuilder::commandsFromSelection() { menuBuilder << "RicNewPlotAxisPropertiesFeature"; } + else if ( dynamic_cast( firstUiItem ) ) + { + menuBuilder << "RicNewRftWellLogCurveFeature"; + menuBuilder << "RicNewRftSegmentWellLogCurveFeature"; + } if ( dynamic_cast( firstUiItem ) ) { diff --git a/ApplicationLibCode/ProjectDataModel/RimDepthTrackPlot.cpp b/ApplicationLibCode/ProjectDataModel/RimDepthTrackPlot.cpp index f75c100eab..63a07a858c 100644 --- a/ApplicationLibCode/ProjectDataModel/RimDepthTrackPlot.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimDepthTrackPlot.cpp @@ -1217,6 +1217,14 @@ RimDepthTrackPlot::DepthOrientation RimDepthTrackPlot::depthOrientation() const return m_depthOrientation(); } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimDepthTrackPlot::setDepthOrientation( DepthOrientation depthOrientation ) +{ + m_depthOrientation = depthOrientation; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/RimDepthTrackPlot.h b/ApplicationLibCode/ProjectDataModel/RimDepthTrackPlot.h index 403c601d80..93fde4474f 100644 --- a/ApplicationLibCode/ProjectDataModel/RimDepthTrackPlot.h +++ b/ApplicationLibCode/ProjectDataModel/RimDepthTrackPlot.h @@ -105,9 +105,11 @@ public: AxisGridVisibility depthAxisGridLinesEnabled() const; RimDepthTrackPlot::DepthOrientation depthOrientation() const; - RiuPlotAxis depthAxis() const; - RiuPlotAxis valueAxis() const; - RiuPlotAxis annotationAxis() const; + void setDepthOrientation( RimDepthTrackPlot::DepthOrientation depthOrientation ); + + RiuPlotAxis depthAxis() const; + RiuPlotAxis valueAxis() const; + RiuPlotAxis annotationAxis() const; void setAutoScalePropertyValuesEnabled( bool enabled ); void setAutoScaleDepthValuesEnabled( bool enabled ); diff --git a/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogRftCurve.cpp b/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogRftCurve.cpp index 98ca5218f2..8ebaee2800 100644 --- a/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogRftCurve.cpp +++ b/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogRftCurve.cpp @@ -327,6 +327,7 @@ void RimWellLogRftCurve::setRftAddress( RifEclipseRftAddress address ) m_rftDataType = RftDataType::RFT_SEGMENT_DATA; m_segmentResultName = address.segmentResultName(); m_segmentBranchIndex = address.segmentBranchIndex(); + m_segmentBranchType = address.segmentBranchType(); } else { diff --git a/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogTrack.cpp b/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogTrack.cpp index 0c5f6aeb3f..ae52bc7bc6 100644 --- a/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogTrack.cpp +++ b/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogTrack.cpp @@ -2138,9 +2138,13 @@ std::pair RimWellLogTrack::extendMinMaxRange( double minValue, d auto candidateMinValue = minValue - factor * range; if ( std::signbit( minValue ) == std::signbit( candidateMinValue ) ) { - // Leave minimum unchanged if the changes causes change of sign to make sure that zero is located properly modifiedMin = candidateMinValue; } + else + { + // If the sign of the adjusted minimum changes, set minimum to zero to make sure that zero is located properly + modifiedMin = 0.0; + } return { modifiedMin, modifiedMax }; } From df16e1fe5cf2c3233e934d9efd391d899e824139 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Wed, 17 Aug 2022 22:12:23 -0700 Subject: [PATCH 062/129] Add rename case to summary and grid cases (#9204) * #9203 Summary Case : Add rename to right-click menu * Janitor: Move ID and description to private fields * Eclipse Case: Add rename to right-click menu * Rename feature --- .../Application/RiaApplication.cpp | 2 +- .../Application/Tools/RiaProjectModifier.cpp | 4 +- .../RicfComputeCaseGroupStatistics.cpp | 2 +- .../RicfCreateSaturationPressurePlots.cpp | 2 +- .../CommandFileInterface/RicfCreateView.cpp | 2 +- .../CommandFileInterface/RicfSetTimeStep.cpp | 2 +- .../Commands/CMakeLists_files.cmake | 2 + .../EclipseCommands/CMakeLists_files.cmake | 2 + .../EclipseCommands/RicRenameCaseFeature.cpp | 66 ++++++++++++++++++ .../EclipseCommands/RicRenameCaseFeature.h | 31 +++++++++ .../RicExecuteScriptForCasesFeature.cpp | 2 +- .../Commands/RicRenameSummaryCaseFeature.cpp | 66 ++++++++++++++++++ .../Commands/RicRenameSummaryCaseFeature.h | 31 +++++++++ .../Commands/RicReplaceCaseFeature.cpp | 2 +- .../WellLogCommands/CMakeLists_files.cmake | 4 +- ...=> RicNewRftSegmentWellLogPlotFeature.cpp} | 20 +++--- ...h => RicNewRftSegmentWellLogPlotFeature.h} | 2 +- .../GeoMech/RimGeoMechCase.cpp | 6 +- .../ProjectDataModel/RimCase.cpp | 68 +++++++++++++++---- ApplicationLibCode/ProjectDataModel/RimCase.h | 11 ++- .../RimContextCommandBuilder.cpp | 4 +- .../RimContourMapProjection.cpp | 2 +- .../ProjectDataModel/RimEclipseInputCase.cpp | 10 +-- .../ProjectDataModel/RimEclipseResultCase.cpp | 6 +- .../RimEclipseStatisticsCase.cpp | 4 +- .../RimIdenticalGridCaseGroup.cpp | 4 +- .../ProjectDataModel/RimProject.cpp | 2 +- .../Summary/RimSummaryCase.cpp | 11 +++ .../ProjectDataModel/Summary/RimSummaryCase.h | 2 + .../SocketInterface/RiaCaseInfoCommands.cpp | 6 +- .../RiaProjectInfoCommands.cpp | 4 +- .../RiaPropertyDataCommands.cpp | 4 +- .../SocketInterface/RiaSocketServer.cpp | 2 +- .../SocketInterface/RiaSocketTools.cpp | 4 +- .../RiuRelativePermeabilityPlotUpdater.cpp | 2 +- .../UserInterface/RiuResultQwtPlot.cpp | 4 +- GrpcInterface/RiaGrpcCaseService.cpp | 2 +- GrpcInterface/RiaGrpcPropertiesService.cpp | 2 +- 38 files changed, 331 insertions(+), 71 deletions(-) create mode 100644 ApplicationLibCode/Commands/EclipseCommands/RicRenameCaseFeature.cpp create mode 100644 ApplicationLibCode/Commands/EclipseCommands/RicRenameCaseFeature.h create mode 100644 ApplicationLibCode/Commands/RicRenameSummaryCaseFeature.cpp create mode 100644 ApplicationLibCode/Commands/RicRenameSummaryCaseFeature.h rename ApplicationLibCode/Commands/WellLogCommands/{RicNewRftSegmentWellLogCurveFeature.cpp => RicNewRftSegmentWellLogPlotFeature.cpp} (84%) rename ApplicationLibCode/Commands/WellLogCommands/{RicNewRftSegmentWellLogCurveFeature.h => RicNewRftSegmentWellLogPlotFeature.h} (95%) diff --git a/ApplicationLibCode/Application/RiaApplication.cpp b/ApplicationLibCode/Application/RiaApplication.cpp index 221f6b0da7..da409da9f5 100644 --- a/ApplicationLibCode/Application/RiaApplication.cpp +++ b/ApplicationLibCode/Application/RiaApplication.cpp @@ -888,7 +888,7 @@ bool RiaApplication::openOdbCaseFromFile( const QString& fileName, bool applyTim auto geoMechCase = std::make_unique(); geoMechCase->setGridFileName( fileName ); - geoMechCase->caseUserDescription = caseName; + geoMechCase->setCaseUserDescription( caseName ); geoMechCase->setApplyTimeFilter( applyTimeStepFilter ); m_project->assignCaseIdToCase( geoMechCase.get() ); diff --git a/ApplicationLibCode/Application/Tools/RiaProjectModifier.cpp b/ApplicationLibCode/Application/Tools/RiaProjectModifier.cpp index 3316ec4acc..3acff6a8c2 100644 --- a/ApplicationLibCode/Application/Tools/RiaProjectModifier.cpp +++ b/ApplicationLibCode/Application/Tools/RiaProjectModifier.cpp @@ -216,12 +216,12 @@ void RiaProjectModifier::replaceCase( RimProject* project ) if ( eclipseResultCase ) { eclipseResultCase->setGridFileName( replaceFileName ); - eclipseResultCase->caseUserDescription = caseNameFromGridFileName( replaceFileName ); + eclipseResultCase->setCaseUserDescription( caseNameFromGridFileName( replaceFileName ) ); } else if ( geomechCase ) { geomechCase->setGridFileName( replaceFileName ); - geomechCase->caseUserDescription = caseNameFromGridFileName( replaceFileName ); + geomechCase->setCaseUserDescription( caseNameFromGridFileName( replaceFileName ) ); } } } diff --git a/ApplicationLibCode/CommandFileInterface/RicfComputeCaseGroupStatistics.cpp b/ApplicationLibCode/CommandFileInterface/RicfComputeCaseGroupStatistics.cpp index 87d317dd98..7cb40f64ea 100644 --- a/ApplicationLibCode/CommandFileInterface/RicfComputeCaseGroupStatistics.cpp +++ b/ApplicationLibCode/CommandFileInterface/RicfComputeCaseGroupStatistics.cpp @@ -69,7 +69,7 @@ caf::PdmScriptResponse RicfComputeCaseGroupStatistics::execute() { for ( RimEclipseCase* c : group->statisticsCaseCollection->reservoirs ) { - if ( c->caseId == caseId ) + if ( c->caseId() == caseId ) { RimEclipseStatisticsCase* statsCase = dynamic_cast( c ); if ( statsCase ) diff --git a/ApplicationLibCode/CommandFileInterface/RicfCreateSaturationPressurePlots.cpp b/ApplicationLibCode/CommandFileInterface/RicfCreateSaturationPressurePlots.cpp index 84db70096d..970ea54de0 100644 --- a/ApplicationLibCode/CommandFileInterface/RicfCreateSaturationPressurePlots.cpp +++ b/ApplicationLibCode/CommandFileInterface/RicfCreateSaturationPressurePlots.cpp @@ -83,7 +83,7 @@ caf::PdmScriptResponse RicfCreateSaturationPressurePlots::execute() for ( auto caseId : caseIds ) { - if ( c->caseId == caseId ) + if ( c->caseId() == caseId ) { int timeStep = 0; RicCreateSaturationPressurePlotsFeature::createPlots( eclipseResultCase, timeStep ); diff --git a/ApplicationLibCode/CommandFileInterface/RicfCreateView.cpp b/ApplicationLibCode/CommandFileInterface/RicfCreateView.cpp index 1a518ef432..6ebdf10724 100644 --- a/ApplicationLibCode/CommandFileInterface/RicfCreateView.cpp +++ b/ApplicationLibCode/CommandFileInterface/RicfCreateView.cpp @@ -48,7 +48,7 @@ caf::PdmScriptResponse RicfCreateView::execute() for ( RimCase* rimCase : allCases ) { - if ( rimCase->caseId == m_caseId() ) + if ( rimCase->caseId() == m_caseId() ) { int viewId = -1; RimEclipseCase* eclipseCase = dynamic_cast( rimCase ); diff --git a/ApplicationLibCode/CommandFileInterface/RicfSetTimeStep.cpp b/ApplicationLibCode/CommandFileInterface/RicfSetTimeStep.cpp index b1214012a5..a3678ad0d7 100644 --- a/ApplicationLibCode/CommandFileInterface/RicfSetTimeStep.cpp +++ b/ApplicationLibCode/CommandFileInterface/RicfSetTimeStep.cpp @@ -78,7 +78,7 @@ caf::PdmScriptResponse RicfSetTimeStep::execute() bool foundCase = false; for ( RimCase* c : allCases ) { - if ( c->caseId == m_caseId ) + if ( c->caseId() == m_caseId ) { rimCase = c; foundCase = true; diff --git a/ApplicationLibCode/Commands/CMakeLists_files.cmake b/ApplicationLibCode/Commands/CMakeLists_files.cmake index 87bd2880c6..2d5a7e2c65 100644 --- a/ApplicationLibCode/Commands/CMakeLists_files.cmake +++ b/ApplicationLibCode/Commands/CMakeLists_files.cmake @@ -85,6 +85,7 @@ set(SOURCE_GROUP_HEADER_FILES ${CMAKE_CURRENT_LIST_DIR}/RicUserDefinedCalculatorUi.h ${CMAKE_CURRENT_LIST_DIR}/RicShowDataSourcesForRealization.h ${CMAKE_CURRENT_LIST_DIR}/RicDeleteUncheckedSubItemsFeature.h + ${CMAKE_CURRENT_LIST_DIR}/RicRenameSummaryCaseFeature.h ) set(SOURCE_GROUP_SOURCE_FILES @@ -173,6 +174,7 @@ set(SOURCE_GROUP_SOURCE_FILES ${CMAKE_CURRENT_LIST_DIR}/RicUserDefinedCalculatorUi.cpp ${CMAKE_CURRENT_LIST_DIR}/RicShowDataSourcesForRealization.cpp ${CMAKE_CURRENT_LIST_DIR}/RicDeleteUncheckedSubItemsFeature.cpp + ${CMAKE_CURRENT_LIST_DIR}/RicRenameSummaryCaseFeature.cpp ) if(RESINSIGHT_USE_QT_CHARTS) diff --git a/ApplicationLibCode/Commands/EclipseCommands/CMakeLists_files.cmake b/ApplicationLibCode/Commands/EclipseCommands/CMakeLists_files.cmake index 4fc0c3efdd..392da3bdcb 100644 --- a/ApplicationLibCode/Commands/EclipseCommands/CMakeLists_files.cmake +++ b/ApplicationLibCode/Commands/EclipseCommands/CMakeLists_files.cmake @@ -18,6 +18,7 @@ set(SOURCE_GROUP_HEADER_FILES ${CMAKE_CURRENT_LIST_DIR}/RicEclipsePropertyFilterNewInViewFeature.h ${CMAKE_CURRENT_LIST_DIR}/RicEclipseHideFaultFeature.h ${CMAKE_CURRENT_LIST_DIR}/RicEclipseShowOnlyFaultFeature.h + ${CMAKE_CURRENT_LIST_DIR}/RicRenameCaseFeature.h ) set(SOURCE_GROUP_SOURCE_FILES @@ -40,6 +41,7 @@ set(SOURCE_GROUP_SOURCE_FILES ${CMAKE_CURRENT_LIST_DIR}/RicEclipsePropertyFilterNewInViewFeature.cpp ${CMAKE_CURRENT_LIST_DIR}/RicEclipseHideFaultFeature.cpp ${CMAKE_CURRENT_LIST_DIR}/RicEclipseShowOnlyFaultFeature.cpp + ${CMAKE_CURRENT_LIST_DIR}/RicRenameCaseFeature.cpp ) list(APPEND COMMAND_CODE_HEADER_FILES ${SOURCE_GROUP_HEADER_FILES}) diff --git a/ApplicationLibCode/Commands/EclipseCommands/RicRenameCaseFeature.cpp b/ApplicationLibCode/Commands/EclipseCommands/RicRenameCaseFeature.cpp new file mode 100644 index 0000000000..b594be2a2d --- /dev/null +++ b/ApplicationLibCode/Commands/EclipseCommands/RicRenameCaseFeature.cpp @@ -0,0 +1,66 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2022 Equinor ASA +// +// ResInsight is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU General Public License at +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#include "RicRenameCaseFeature.h" + +#include "RimCase.h" + +#include "cafSelectionManager.h" + +#include +#include + +CAF_CMD_SOURCE_INIT( RicRenameCaseFeature, "RicRenameCaseFeature" ); + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +bool RicRenameCaseFeature::isCommandEnabled() +{ + return true; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RicRenameCaseFeature::onActionTriggered( bool isChecked ) +{ + auto rimCase = caf::SelectionManager::instance()->selectedItemOfType(); + if ( !rimCase ) return; + + bool ok; + QString userDefinedName = QInputDialog::getText( nullptr, + "Rename Case", + "Enter new name:", + QLineEdit::Normal, + rimCase->caseUserDescription(), + &ok ); + + if ( !ok ) return; + + rimCase->setCustomCaseName( userDefinedName.trimmed() ); + rimCase->updateConnectedEditors(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RicRenameCaseFeature::setupActionLook( QAction* actionToSetup ) +{ + actionToSetup->setText( "Rename" ); +} diff --git a/ApplicationLibCode/Commands/EclipseCommands/RicRenameCaseFeature.h b/ApplicationLibCode/Commands/EclipseCommands/RicRenameCaseFeature.h new file mode 100644 index 0000000000..66937f5979 --- /dev/null +++ b/ApplicationLibCode/Commands/EclipseCommands/RicRenameCaseFeature.h @@ -0,0 +1,31 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2022 Equinor ASA +// +// ResInsight is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU General Public License at +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#pragma once + +#include "cafCmdFeature.h" + +class RicRenameCaseFeature : public caf::CmdFeature +{ + CAF_CMD_HEADER_INIT; + +protected: + bool isCommandEnabled() override; + void onActionTriggered( bool isChecked ) override; + void setupActionLook( QAction* actionToSetup ) override; +}; diff --git a/ApplicationLibCode/Commands/OctaveScriptCommands/RicExecuteScriptForCasesFeature.cpp b/ApplicationLibCode/Commands/OctaveScriptCommands/RicExecuteScriptForCasesFeature.cpp index a69854611c..b23dc21161 100644 --- a/ApplicationLibCode/Commands/OctaveScriptCommands/RicExecuteScriptForCasesFeature.cpp +++ b/ApplicationLibCode/Commands/OctaveScriptCommands/RicExecuteScriptForCasesFeature.cpp @@ -96,7 +96,7 @@ void RicExecuteScriptForCasesFeature::onActionTriggered( bool isChecked ) for ( RimCase* rimCase : selection ) { - caseIdsInSelection.push_back( rimCase->caseId ); + caseIdsInSelection.push_back( rimCase->caseId() ); } } diff --git a/ApplicationLibCode/Commands/RicRenameSummaryCaseFeature.cpp b/ApplicationLibCode/Commands/RicRenameSummaryCaseFeature.cpp new file mode 100644 index 0000000000..d924b4d152 --- /dev/null +++ b/ApplicationLibCode/Commands/RicRenameSummaryCaseFeature.cpp @@ -0,0 +1,66 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2022 Equinor ASA +// +// ResInsight is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU General Public License at +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#include "RicRenameSummaryCaseFeature.h" + +#include "RimSummaryCase.h" + +#include "cafSelectionManager.h" + +#include +#include + +CAF_CMD_SOURCE_INIT( RicRenameSummaryCaseFeature, "RicRenameSummaryCaseFeature" ); + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +bool RicRenameSummaryCaseFeature::isCommandEnabled() +{ + return true; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RicRenameSummaryCaseFeature::onActionTriggered( bool isChecked ) +{ + auto summaryCase = caf::SelectionManager::instance()->selectedItemOfType(); + if ( !summaryCase ) return; + + bool ok; + QString userDefinedName = QInputDialog::getText( nullptr, + "Rename Case", + "Enter new name:", + QLineEdit::Normal, + summaryCase->displayCaseName(), + &ok ); + + if ( !ok ) return; + + summaryCase->setCustomCaseName( userDefinedName.trimmed() ); + summaryCase->updateConnectedEditors(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RicRenameSummaryCaseFeature::setupActionLook( QAction* actionToSetup ) +{ + actionToSetup->setText( "Rename" ); +} diff --git a/ApplicationLibCode/Commands/RicRenameSummaryCaseFeature.h b/ApplicationLibCode/Commands/RicRenameSummaryCaseFeature.h new file mode 100644 index 0000000000..6ce2d57f45 --- /dev/null +++ b/ApplicationLibCode/Commands/RicRenameSummaryCaseFeature.h @@ -0,0 +1,31 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2022 Equinor ASA +// +// ResInsight is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU General Public License at +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#pragma once + +#include "cafCmdFeature.h" + +class RicRenameSummaryCaseFeature : public caf::CmdFeature +{ + CAF_CMD_HEADER_INIT; + +protected: + bool isCommandEnabled() override; + void onActionTriggered( bool isChecked ) override; + void setupActionLook( QAction* actionToSetup ) override; +}; diff --git a/ApplicationLibCode/Commands/RicReplaceCaseFeature.cpp b/ApplicationLibCode/Commands/RicReplaceCaseFeature.cpp index 1fb74c865c..126085f8a6 100644 --- a/ApplicationLibCode/Commands/RicReplaceCaseFeature.cpp +++ b/ApplicationLibCode/Commands/RicReplaceCaseFeature.cpp @@ -96,7 +96,7 @@ void RicReplaceCaseFeature::onActionTriggered( bool isChecked ) // Use the file base name as case user description QFileInfo fi( fileName ); - selectedCase->caseUserDescription = fi.baseName(); + selectedCase->setCaseUserDescription( fi.baseName() ); // Find and update attached grid summary cases. RimSummaryCaseMainCollection* sumCaseColl = RiaSummaryTools::summaryCaseMainCollection(); diff --git a/ApplicationLibCode/Commands/WellLogCommands/CMakeLists_files.cmake b/ApplicationLibCode/Commands/WellLogCommands/CMakeLists_files.cmake index bb63a201ce..e6bff1f084 100644 --- a/ApplicationLibCode/Commands/WellLogCommands/CMakeLists_files.cmake +++ b/ApplicationLibCode/Commands/WellLogCommands/CMakeLists_files.cmake @@ -28,7 +28,7 @@ set(SOURCE_GROUP_HEADER_FILES ${CMAKE_CURRENT_LIST_DIR}/RicNewWellMeasurementCurveFeature.h ${CMAKE_CURRENT_LIST_DIR}/RicNewEnsembleWellLogCurveSetFeature.h ${CMAKE_CURRENT_LIST_DIR}/RicNewRftWellLogCurveFeature.h - ${CMAKE_CURRENT_LIST_DIR}/RicNewRftSegmentWellLogCurveFeature.h + ${CMAKE_CURRENT_LIST_DIR}/RicNewRftSegmentWellLogPlotFeature.h ) set(SOURCE_GROUP_SOURCE_FILES @@ -61,7 +61,7 @@ set(SOURCE_GROUP_SOURCE_FILES ${CMAKE_CURRENT_LIST_DIR}/RicNewWellMeasurementCurveFeature.cpp ${CMAKE_CURRENT_LIST_DIR}/RicNewEnsembleWellLogCurveSetFeature.cpp ${CMAKE_CURRENT_LIST_DIR}/RicNewRftWellLogCurveFeature.cpp - ${CMAKE_CURRENT_LIST_DIR}/RicNewRftSegmentWellLogCurveFeature.cpp + ${CMAKE_CURRENT_LIST_DIR}/RicNewRftSegmentWellLogPlotFeature.cpp ) list(APPEND COMMAND_CODE_HEADER_FILES ${SOURCE_GROUP_HEADER_FILES}) diff --git a/ApplicationLibCode/Commands/WellLogCommands/RicNewRftSegmentWellLogCurveFeature.cpp b/ApplicationLibCode/Commands/WellLogCommands/RicNewRftSegmentWellLogPlotFeature.cpp similarity index 84% rename from ApplicationLibCode/Commands/WellLogCommands/RicNewRftSegmentWellLogCurveFeature.cpp rename to ApplicationLibCode/Commands/WellLogCommands/RicNewRftSegmentWellLogPlotFeature.cpp index 42ba16e65f..ac1971be7a 100644 --- a/ApplicationLibCode/Commands/WellLogCommands/RicNewRftSegmentWellLogCurveFeature.cpp +++ b/ApplicationLibCode/Commands/WellLogCommands/RicNewRftSegmentWellLogPlotFeature.cpp @@ -16,7 +16,7 @@ // ///////////////////////////////////////////////////////////////////////////////// -#include "RicNewRftSegmentWellLogCurveFeature.h" +#include "RicNewRftSegmentWellLogPlotFeature.h" #include "RicNewWellLogPlotFeatureImpl.h" #include "RicWellLogPlotCurveFeatureImpl.h" @@ -43,12 +43,12 @@ #include -CAF_CMD_SOURCE_INIT( RicNewRftSegmentWellLogCurveFeature, "RicNewRftSegmentWellLogCurveFeature" ); +CAF_CMD_SOURCE_INIT( RicNewRftSegmentWellLogPlotFeature, "RicNewRftSegmentWellLogCurveFeature" ); //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -bool RicNewRftSegmentWellLogCurveFeature::isCommandEnabled() +bool RicNewRftSegmentWellLogPlotFeature::isCommandEnabled() { return true; } @@ -56,7 +56,7 @@ bool RicNewRftSegmentWellLogCurveFeature::isCommandEnabled() //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RicNewRftSegmentWellLogCurveFeature::onActionTriggered( bool isChecked ) +void RicNewRftSegmentWellLogPlotFeature::onActionTriggered( bool isChecked ) { auto rftCase = caf::SelectionManager::instance()->selectedItemOfType(); if ( !rftCase ) return; @@ -91,10 +91,10 @@ void RicNewRftSegmentWellLogCurveFeature::onActionTriggered( bool isChecked ) //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RicNewRftSegmentWellLogCurveFeature::appendTrackAndCurveForBranchType( RimWellLogPlot* plot, - const QString& resultName, - RiaDefines::RftBranchType branchType, - RimSummaryCase* summaryCase ) +void RicNewRftSegmentWellLogPlotFeature::appendTrackAndCurveForBranchType( RimWellLogPlot* plot, + const QString& resultName, + RiaDefines::RftBranchType branchType, + RimSummaryCase* summaryCase ) { RimWellLogTrack* plotTrack = new RimWellLogTrack(); plot->addPlot( plotTrack ); @@ -112,8 +112,8 @@ void RicNewRftSegmentWellLogCurveFeature::appendTrackAndCurveForBranchType( RimW //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RicNewRftSegmentWellLogCurveFeature::setupActionLook( QAction* actionToSetup ) +void RicNewRftSegmentWellLogPlotFeature::setupActionLook( QAction* actionToSetup ) { - actionToSetup->setText( "Append RFT Segment Curve" ); + actionToSetup->setText( "Create RFT Segment Plot" ); actionToSetup->setIcon( QIcon( ":/WellLogCurve16x16.png" ) ); } diff --git a/ApplicationLibCode/Commands/WellLogCommands/RicNewRftSegmentWellLogCurveFeature.h b/ApplicationLibCode/Commands/WellLogCommands/RicNewRftSegmentWellLogPlotFeature.h similarity index 95% rename from ApplicationLibCode/Commands/WellLogCommands/RicNewRftSegmentWellLogCurveFeature.h rename to ApplicationLibCode/Commands/WellLogCommands/RicNewRftSegmentWellLogPlotFeature.h index 5737bb8f38..24a144e993 100644 --- a/ApplicationLibCode/Commands/WellLogCommands/RicNewRftSegmentWellLogCurveFeature.h +++ b/ApplicationLibCode/Commands/WellLogCommands/RicNewRftSegmentWellLogPlotFeature.h @@ -28,7 +28,7 @@ class RimSummaryCase; //================================================================================================== /// //================================================================================================== -class RicNewRftSegmentWellLogCurveFeature : public caf::CmdFeature +class RicNewRftSegmentWellLogPlotFeature : public caf::CmdFeature { CAF_CMD_HEADER_INIT; diff --git a/ApplicationLibCode/ProjectDataModel/GeoMech/RimGeoMechCase.cpp b/ApplicationLibCode/ProjectDataModel/GeoMech/RimGeoMechCase.cpp index 9f0b361be2..bacb0a0d63 100644 --- a/ApplicationLibCode/ProjectDataModel/GeoMech/RimGeoMechCase.cpp +++ b/ApplicationLibCode/ProjectDataModel/GeoMech/RimGeoMechCase.cpp @@ -296,7 +296,7 @@ RimGeoMechCase* RimGeoMechCase::createCopy( const QString& newInputFileName ) QFileInfo filenameInfo( newInputFileName ); QString newCaseName = filenameInfo.completeBaseName(); - copycase->caseUserDescription.setValue( newCaseName + " (copy of " + caseUserDescription.value() + ")" ); + copycase->setCaseUserDescription( newCaseName + " (copy of " + caseUserDescription() + ")" ); copycase->setGridFileName( newInputFileName ); project->assignCaseIdToCase( copycase ); @@ -1099,8 +1099,8 @@ void RimGeoMechCase::importElementPropertyFile() //-------------------------------------------------------------------------------------------------- void RimGeoMechCase::defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) { - uiOrdering.add( &caseUserDescription ); - uiOrdering.add( &caseId ); + uiOrdering.add( &m_caseUserDescription ); + uiOrdering.add( &m_caseId ); uiOrdering.add( &m_caseFileName ); caf::PdmUiGroup* caseGroup = uiOrdering.addNewGroup( "Case Options" ); diff --git a/ApplicationLibCode/ProjectDataModel/RimCase.cpp b/ApplicationLibCode/ProjectDataModel/RimCase.cpp index 47662a94f7..4199c45e2c 100644 --- a/ApplicationLibCode/ProjectDataModel/RimCase.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimCase.cpp @@ -49,14 +49,14 @@ RimCase::RimCase() { CAF_PDM_InitScriptableObjectWithNameAndComment( "Case", ":/Case48x48.png", "", "", "Case", "The ResInsight base class for Cases" ); - CAF_PDM_InitScriptableField( &caseUserDescription, "Name", QString(), "Case Name" ); - caseUserDescription.registerKeywordAlias( "CaseUserDescription" ); + CAF_PDM_InitScriptableField( &m_caseUserDescription, "Name", QString(), "Case Name" ); + m_caseUserDescription.registerKeywordAlias( "CaseUserDescription" ); CAF_PDM_InitScriptableFieldNoDefault( &m_displayNameOption, "NameSetting", "Name Setting" ); - CAF_PDM_InitScriptableField( &caseId, "Id", -1, "Case ID" ); - caseId.registerKeywordAlias( "CaseId" ); - caseId.uiCapability()->setUiReadOnly( true ); - caseId.capability()->setIOWriteable( false ); + CAF_PDM_InitScriptableField( &m_caseId, "Id", -1, "Case ID" ); + m_caseId.registerKeywordAlias( "CaseId" ); + m_caseId.uiCapability()->setUiReadOnly( true ); + m_caseId.capability()->setIOWriteable( false ); CAF_PDM_InitScriptableFieldNoDefault( &m_caseFileName, "FilePath", "Case File Name" ); m_caseFileName.registerKeywordAlias( "CaseFileName" ); @@ -87,6 +87,38 @@ RimCase::~RimCase() m_isInActiveDestruction = true; // Needed because destruction of m_intersectionViews results in call to views() } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +int RimCase::caseId() const +{ + return m_caseId(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimCase::setCaseId( int id ) +{ + m_caseId = id; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QString RimCase::caseUserDescription() const +{ + return m_caseUserDescription(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimCase::setCaseUserDescription( const QString& description ) +{ + m_caseUserDescription = description; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -106,6 +138,15 @@ QString RimCase::gridFileName() const return m_caseFileName().path(); } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimCase::setCustomCaseName( const QString& caseName ) +{ + m_displayNameOption = RimCaseDisplayNameTools::DisplayName::CUSTOM; + m_caseUserDescription = caseName; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -195,7 +236,7 @@ void RimCase::fieldChangedByUi( const caf::PdmFieldHandle* changedField, const Q { updateAutoShortName(); } - else if ( changedField == &caseUserDescription ) + else if ( changedField == &m_caseUserDescription ) { updateTreeItemName(); } @@ -235,7 +276,8 @@ QList RimCase::calculateValueOptions( const caf::PdmFiel //-------------------------------------------------------------------------------------------------- void RimCase::updateOptionSensitivity() { - caseUserDescription.uiCapability()->setUiReadOnly( m_displayNameOption != RimCaseDisplayNameTools::DisplayName::CUSTOM ); + m_caseUserDescription.uiCapability()->setUiReadOnly( m_displayNameOption != + RimCaseDisplayNameTools::DisplayName::CUSTOM ); } //-------------------------------------------------------------------------------------------------- @@ -243,7 +285,7 @@ void RimCase::updateOptionSensitivity() //-------------------------------------------------------------------------------------------------- void RimCase::initAfterRead() { - if ( caseId() == -1 ) + if ( m_caseId() == -1 ) { RimProject::current()->assignCaseIdToCase( this ); } @@ -262,7 +304,7 @@ void RimCase::initAfterRead() //-------------------------------------------------------------------------------------------------- caf::PdmFieldHandle* RimCase::userDescriptionField() { - return &caseUserDescription; + return &m_caseUserDescription; } //-------------------------------------------------------------------------------------------------- @@ -272,11 +314,11 @@ void RimCase::updateAutoShortName() { if ( m_displayNameOption == RimCaseDisplayNameTools::DisplayName::FULL_CASE_NAME ) { - caseUserDescription = caseName(); + m_caseUserDescription = caseName(); } else if ( m_displayNameOption == RimCaseDisplayNameTools::DisplayName::SHORT_CASE_NAME ) { - caseUserDescription = RimCase::uniqueShortNameCase( this, RimCaseDisplayNameTools::CASE_SHORT_NAME_LENGTH ); + m_caseUserDescription = RimCase::uniqueShortNameCase( this, RimCaseDisplayNameTools::CASE_SHORT_NAME_LENGTH ); } updateTreeItemName(); } @@ -286,7 +328,7 @@ void RimCase::updateAutoShortName() //-------------------------------------------------------------------------------------------------- void RimCase::updateTreeItemName() { - setUiName( caseUserDescription() ); + setUiName( m_caseUserDescription() ); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/RimCase.h b/ApplicationLibCode/ProjectDataModel/RimCase.h index 7cc4675de7..7b637507c8 100644 --- a/ApplicationLibCode/ProjectDataModel/RimCase.h +++ b/ApplicationLibCode/ProjectDataModel/RimCase.h @@ -54,13 +54,16 @@ public: RimCase(); ~RimCase() override; - caf::PdmField caseId; - caf::PdmField caseUserDescription; + int caseId() const; + void setCaseId( int id ); + + QString caseUserDescription() const; + void setCaseUserDescription( const QString& description ); void setGridFileName( const QString& fileName ); QString gridFileName() const; - void setDisplayNameOption( RimCaseDisplayNameTools::DisplayName displayNameOption ); + void setCustomCaseName( const QString& caseName ); void updateAutoShortName(); void updateOptionSensitivity(); @@ -105,6 +108,8 @@ private: caf::PdmFieldHandle* userDescriptionField() override; protected: + caf::PdmField m_caseId; + caf::PdmField m_caseUserDescription; caf::PdmField m_caseFileName; caf::PdmField m_displayNameOption; caf::PdmChildField m_timeStepFilter; diff --git a/ApplicationLibCode/ProjectDataModel/RimContextCommandBuilder.cpp b/ApplicationLibCode/ProjectDataModel/RimContextCommandBuilder.cpp index 137a501729..f6363bf30c 100644 --- a/ApplicationLibCode/ProjectDataModel/RimContextCommandBuilder.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimContextCommandBuilder.cpp @@ -268,6 +268,7 @@ caf::CmdFeatureMenuBuilder RimContextCommandBuilder::commandsFromSelection() } else if ( dynamic_cast( firstUiItem ) ) { + menuBuilder << "RicRenameCaseFeature"; menuBuilder << "RicPasteEclipseCasesFeature"; menuBuilder << "RicPasteEclipseViewsFeature"; menuBuilder << "Separator"; @@ -1074,7 +1075,7 @@ caf::CmdFeatureMenuBuilder RimContextCommandBuilder::commandsFromSelection() else if ( dynamic_cast( firstUiItem ) ) { menuBuilder << "RicNewRftWellLogCurveFeature"; - menuBuilder << "RicNewRftSegmentWellLogCurveFeature"; + menuBuilder << "RicNewRftSegmentWellLogPlotFeature"; } if ( dynamic_cast( firstUiItem ) ) @@ -1124,6 +1125,7 @@ caf::CmdFeatureMenuBuilder RimContextCommandBuilder::commandsFromSelection() menuBuilder << "RicImportObservedDataFeature"; menuBuilder << "RicImportObservedFmuDataFeature"; + menuBuilder << "RicRenameSummaryCaseFeature"; menuBuilder << "RicReloadSummaryCaseFeature"; menuBuilder << "RicReplaceSummaryCaseFeature"; menuBuilder << "RicCreateSummaryCaseCollectionFeature"; diff --git a/ApplicationLibCode/ProjectDataModel/RimContourMapProjection.cpp b/ApplicationLibCode/ProjectDataModel/RimContourMapProjection.cpp index 0f9448cbe5..59fa0d1289 100644 --- a/ApplicationLibCode/ProjectDataModel/RimContourMapProjection.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimContourMapProjection.cpp @@ -266,7 +266,7 @@ QString RimContourMapProjection::caseName() const return QString(); } - return rimCase->caseUserDescription.value(); + return rimCase->caseUserDescription(); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/RimEclipseInputCase.cpp b/ApplicationLibCode/ProjectDataModel/RimEclipseInputCase.cpp index 07ede4cb78..11133e7b1a 100644 --- a/ApplicationLibCode/ProjectDataModel/RimEclipseInputCase.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimEclipseInputCase.cpp @@ -94,8 +94,8 @@ bool RimEclipseInputCase::openDataFileSet( const QStringList& fileNames ) eclipseCaseData()->activeCellInfo( RiaDefines::PorosityModelType::FRACTURE_MODEL )->computeDerivedData(); QFileInfo gridFileName( fileNames[0] ); - QString caseName = gridFileName.completeBaseName(); - this->caseUserDescription = caseName; + QString caseName = gridFileName.completeBaseName(); + this->setCaseUserDescription( caseName ); computeCachedData(); @@ -127,7 +127,7 @@ bool RimEclipseInputCase::openDataFileSet( const QStringList& fileNames ) QFileInfo gridFileName( fileNames[i] ); QString caseName = gridFileName.completeBaseName(); - this->caseUserDescription = caseName; + this->setCaseUserDescription( caseName ); this->eclipseCaseData()->mainGrid()->setFlipAxis( m_flipXAxis, m_flipYAxis ); @@ -299,9 +299,9 @@ cvf::ref RimEclipseInputCase::createMockModel( QString model //-------------------------------------------------------------------------------------------------- void RimEclipseInputCase::defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) { - uiOrdering.add( &caseUserDescription ); + uiOrdering.add( &m_caseUserDescription ); uiOrdering.add( &m_displayNameOption ); - uiOrdering.add( &caseId ); + uiOrdering.add( &m_caseId ); uiOrdering.add( &m_caseFileName ); uiOrdering.add( &m_additionalFiles ); diff --git a/ApplicationLibCode/ProjectDataModel/RimEclipseResultCase.cpp b/ApplicationLibCode/ProjectDataModel/RimEclipseResultCase.cpp index a6f8b85b38..d6008141e2 100644 --- a/ApplicationLibCode/ProjectDataModel/RimEclipseResultCase.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimEclipseResultCase.cpp @@ -560,7 +560,7 @@ RifReaderRftInterface* RimEclipseResultCase::rftReader() //-------------------------------------------------------------------------------------------------- void RimEclipseResultCase::setCaseInfo( const QString& userDescription, const QString& fileName ) { - this->caseUserDescription = userDescription; + this->setCaseUserDescription( userDescription ); setGridFileName( fileName ); RimProject* proj = RimProject::current(); @@ -590,9 +590,9 @@ bool RimEclipseResultCase::hasSourSimFile() //-------------------------------------------------------------------------------------------------- void RimEclipseResultCase::defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) { - uiOrdering.add( &caseUserDescription ); + uiOrdering.add( &m_caseUserDescription ); uiOrdering.add( &m_displayNameOption ); - uiOrdering.add( &caseId ); + uiOrdering.add( &m_caseId ); uiOrdering.add( &m_caseFileName ); uiOrdering.add( &m_unitSystem ); diff --git a/ApplicationLibCode/ProjectDataModel/RimEclipseStatisticsCase.cpp b/ApplicationLibCode/ProjectDataModel/RimEclipseStatisticsCase.cpp index 586a7b9058..5f4574fcd4 100644 --- a/ApplicationLibCode/ProjectDataModel/RimEclipseStatisticsCase.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimEclipseStatisticsCase.cpp @@ -387,8 +387,8 @@ void RimEclipseStatisticsCase::defineUiOrdering( QString uiConfigName, caf::PdmU updateSelectionListVisibilities(); updatePercentileUiVisibility(); - uiOrdering.add( &caseUserDescription ); - uiOrdering.add( &caseId ); + uiOrdering.add( &m_caseUserDescription ); + uiOrdering.add( &m_caseId ); uiOrdering.add( &m_calculateEditCommand ); diff --git a/ApplicationLibCode/ProjectDataModel/RimIdenticalGridCaseGroup.cpp b/ApplicationLibCode/ProjectDataModel/RimIdenticalGridCaseGroup.cpp index 63836de8b0..5a1d7f39e0 100644 --- a/ApplicationLibCode/ProjectDataModel/RimIdenticalGridCaseGroup.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimIdenticalGridCaseGroup.cpp @@ -358,8 +358,8 @@ RimEclipseStatisticsCase* RimIdenticalGridCaseGroup::createAndAppendStatisticsCa { RimEclipseStatisticsCase* newStatisticsCase = new RimEclipseStatisticsCase; - newStatisticsCase->caseUserDescription = QString( "Statistics " ) + - QString::number( statisticsCaseCollection()->reservoirs.size() + 1 ); + newStatisticsCase->setCaseUserDescription( QString( "Statistics " ) + + QString::number( statisticsCaseCollection()->reservoirs.size() + 1 ) ); statisticsCaseCollection()->reservoirs.push_back( newStatisticsCase ); newStatisticsCase->populateResultSelectionAfterLoadingGrid(); diff --git a/ApplicationLibCode/ProjectDataModel/RimProject.cpp b/ApplicationLibCode/ProjectDataModel/RimProject.cpp index 8d374b85e1..67955902b0 100644 --- a/ApplicationLibCode/ProjectDataModel/RimProject.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimProject.cpp @@ -549,7 +549,7 @@ void RimProject::assignCaseIdToCase( RimCase* reservoirCase ) m_nextValidCaseId = std::max( m_nextValidCaseId, rimCase->caseId() + 1 ); } - reservoirCase->caseId = m_nextValidCaseId++; + reservoirCase->setCaseId( m_nextValidCaseId++ ); } } diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCase.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCase.cpp index 882a16c6f4..999087ff32 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCase.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCase.cpp @@ -252,6 +252,8 @@ void RimSummaryCase::buildChildNodes() //-------------------------------------------------------------------------------------------------- void RimSummaryCase::defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) { + updateOptionSensitivity(); + uiOrdering.add( &m_displayName ); uiOrdering.add( &m_displayNameOption ); uiOrdering.add( &m_summaryHeaderFilename ); @@ -380,6 +382,15 @@ int RimSummaryCase::caseId() const return m_caseId(); } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimSummaryCase::setCustomCaseName( const QString& caseName ) +{ + m_displayNameOption = RimCaseDisplayNameTools::DisplayName::CUSTOM; + m_displayName = caseName; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCase.h b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCase.h index 8728d2dea8..7dfbd07501 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCase.h +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCase.h @@ -60,6 +60,8 @@ public: void setCaseId( int caseId ); int caseId() const; + void setCustomCaseName( const QString& caseName ); + caf::AppEnum unitsSystem(); void setDisplayNameOption( RimCaseDisplayNameTools::DisplayName displayNameOption ); diff --git a/ApplicationLibCode/SocketInterface/RiaCaseInfoCommands.cpp b/ApplicationLibCode/SocketInterface/RiaCaseInfoCommands.cpp index ee3365d762..1ebbb8fb59 100644 --- a/ApplicationLibCode/SocketInterface/RiaCaseInfoCommands.cpp +++ b/ApplicationLibCode/SocketInterface/RiaCaseInfoCommands.cpp @@ -632,7 +632,7 @@ public: ->ijkFromCellIndex( eclipseItem->m_gridLocalCellIndex, &i, &j, &k ); gridIndex = eclipseItem->m_gridIndex; - caseId = eclipseItem->m_resultDefinition->eclipseCase()->caseId; + caseId = eclipseItem->m_resultDefinition->eclipseCase()->caseId(); } else if ( item->type() == RiuSelectionItem::GEOMECH_SELECTION_OBJECT ) { @@ -647,14 +647,14 @@ public: CVF_ASSERT( validIndex ); gridIndex = geomechItem->m_gridIndex; - caseId = geomechItem->m_resultDefinition->geoMechCase()->caseId; + caseId = geomechItem->m_resultDefinition->geoMechCase()->caseId(); } else { continue; } - if ( caseId == reservoirCase->caseId && validIndex ) + if ( caseId == reservoirCase->caseId() && validIndex ) { caseNumber.push_back( static_cast( caseId ) ); gridNumber.push_back( static_cast( gridIndex ) ); diff --git a/ApplicationLibCode/SocketInterface/RiaProjectInfoCommands.cpp b/ApplicationLibCode/SocketInterface/RiaProjectInfoCommands.cpp index b8e8b590bc..4d4241918d 100644 --- a/ApplicationLibCode/SocketInterface/RiaProjectInfoCommands.cpp +++ b/ApplicationLibCode/SocketInterface/RiaProjectInfoCommands.cpp @@ -62,8 +62,8 @@ void getCaseInfoFromCases( std::vector& cases, qint64 caseGroupId = -1; RiaSocketTools::getCaseInfoFromCase( rimCase, caseId, caseName, caseType, caseGroupId ); - caseIds.push_back( rimCase->caseId ); - caseNames.push_back( rimCase->caseUserDescription ); + caseIds.push_back( rimCase->caseId() ); + caseNames.push_back( rimCase->caseUserDescription() ); caseTypes.push_back( caseType ); caseGroupIds.push_back( caseGroupId ); } diff --git a/ApplicationLibCode/SocketInterface/RiaPropertyDataCommands.cpp b/ApplicationLibCode/SocketInterface/RiaPropertyDataCommands.cpp index 577253c7e3..964383c3f7 100644 --- a/ApplicationLibCode/SocketInterface/RiaPropertyDataCommands.cpp +++ b/ApplicationLibCode/SocketInterface/RiaPropertyDataCommands.cpp @@ -1343,7 +1343,7 @@ public: { const RiuEclipseSelectionItem* eclipseItem = static_cast( item ); - if ( eclipseItem->m_resultDefinition->eclipseCase()->caseId == reservoirCase->caseId ) + if ( eclipseItem->m_resultDefinition->eclipseCase()->caseId() == reservoirCase->caseId() ) { selectedCells.push_back( std::make_pair( eclipseItem->m_gridIndex, eclipseItem->m_gridLocalCellIndex ) ); } @@ -1352,7 +1352,7 @@ public: { const RiuGeoMechSelectionItem* geomechItem = static_cast( item ); - if ( geomechItem->m_resultDefinition->geoMechCase()->caseId == reservoirCase->caseId ) + if ( geomechItem->m_resultDefinition->geoMechCase()->caseId() == reservoirCase->caseId() ) { selectedCells.push_back( std::make_pair( geomechItem->m_gridIndex, geomechItem->m_cellIndex ) ); } diff --git a/ApplicationLibCode/SocketInterface/RiaSocketServer.cpp b/ApplicationLibCode/SocketInterface/RiaSocketServer.cpp index 3d96126fc0..d0696b0b69 100644 --- a/ApplicationLibCode/SocketInterface/RiaSocketServer.cpp +++ b/ApplicationLibCode/SocketInterface/RiaSocketServer.cpp @@ -165,7 +165,7 @@ RimEclipseCase* RiaSocketServer::findReservoir( int caseId ) for ( size_t i = 0; i < cases.size(); i++ ) { - if ( cases[i]->caseId == currCaseId ) + if ( cases[i]->caseId() == currCaseId ) { return dynamic_cast( cases[i] ); } diff --git a/ApplicationLibCode/SocketInterface/RiaSocketTools.cpp b/ApplicationLibCode/SocketInterface/RiaSocketTools.cpp index 9a77eb4ea2..38f64e6e31 100644 --- a/ApplicationLibCode/SocketInterface/RiaSocketTools.cpp +++ b/ApplicationLibCode/SocketInterface/RiaSocketTools.cpp @@ -72,8 +72,8 @@ void RiaSocketTools::getCaseInfoFromCase( RimCase* rimCase, qint64& caseId, QStr { CVF_ASSERT( rimCase ); - caseId = rimCase->caseId; - caseName = rimCase->caseUserDescription; + caseId = rimCase->caseId(); + caseName = rimCase->caseUserDescription(); RimEclipseCase* eclCase = dynamic_cast( rimCase ); RimCaseCollection* caseCollection = nullptr; diff --git a/ApplicationLibCode/UserInterface/RiuRelativePermeabilityPlotUpdater.cpp b/ApplicationLibCode/UserInterface/RiuRelativePermeabilityPlotUpdater.cpp index a5c40a3b2b..f8930b8940 100644 --- a/ApplicationLibCode/UserInterface/RiuRelativePermeabilityPlotUpdater.cpp +++ b/ApplicationLibCode/UserInterface/RiuRelativePermeabilityPlotUpdater.cpp @@ -208,7 +208,7 @@ bool RiuRelativePermeabilityPlotUpdater::queryDataAndUpdatePlot( const RimEclips QString cellRefText = constructCellReferenceText( eclipseCaseData, gridIndex, gridLocalCellIndex, "SATNUM", cellSATNUM ); - QString caseName = eclipseResultCase->caseUserDescription; + QString caseName = eclipseResultCase->caseUserDescription(); plotPanel->setPlotData( eclipseCaseData->unitsType(), relPermCurveArr, cellSWAT, cellSGAS, caseName, cellRefText ); diff --git a/ApplicationLibCode/UserInterface/RiuResultQwtPlot.cpp b/ApplicationLibCode/UserInterface/RiuResultQwtPlot.cpp index 768335ec35..c9e7c7452b 100644 --- a/ApplicationLibCode/UserInterface/RiuResultQwtPlot.cpp +++ b/ApplicationLibCode/UserInterface/RiuResultQwtPlot.cpp @@ -93,9 +93,9 @@ void RiuResultQwtPlot::addCurve( const RimCase* rimCase, this->replot(); - int caseId = rimCase->caseId; + int caseId = rimCase->caseId(); - m_caseNames[caseId] = rimCase->caseUserDescription; + m_caseNames[caseId] = rimCase->caseUserDescription(); m_curveNames[caseId].push_back( curveName ); m_curveData[caseId].push_back( timeHistoryValues ); m_timeSteps[caseId] = dateTimes; diff --git a/GrpcInterface/RiaGrpcCaseService.cpp b/GrpcInterface/RiaGrpcCaseService.cpp index 7044a203e5..05b8c14999 100644 --- a/GrpcInterface/RiaGrpcCaseService.cpp +++ b/GrpcInterface/RiaGrpcCaseService.cpp @@ -618,7 +618,7 @@ grpc::Status RiaSelectedCellsStateHandler::assignReply( rips::SelectedCells* rep for ( auto item : items ) { RiuEclipseSelectionItem* eclipseItem = dynamic_cast( item ); - if ( eclipseItem && eclipseItem->m_resultDefinition->eclipseCase()->caseId == m_request->id() ) + if ( eclipseItem && eclipseItem->m_resultDefinition->eclipseCase()->caseId() == m_request->id() ) { eclipseItems.push_back( eclipseItem ); } diff --git a/GrpcInterface/RiaGrpcPropertiesService.cpp b/GrpcInterface/RiaGrpcPropertiesService.cpp index 2c596c584c..2236a5bd21 100644 --- a/GrpcInterface/RiaGrpcPropertiesService.cpp +++ b/GrpcInterface/RiaGrpcPropertiesService.cpp @@ -309,7 +309,7 @@ protected: for ( auto item : items ) { RiuEclipseSelectionItem* eclipseItem = dynamic_cast( item ); - if ( eclipseItem && eclipseItem->m_resultDefinition->eclipseCase()->caseId == caseData->ownerCase()->caseId ) + if ( eclipseItem && eclipseItem->m_resultDefinition->eclipseCase()->caseId() == caseData->ownerCase()->caseId() ) { eclipseItems.push_back( eclipseItem ); } From 318f187635c6bd98458310db03c23150cb144323 Mon Sep 17 00:00:00 2001 From: Kristian Bendiksen Date: Wed, 17 Aug 2022 10:10:20 +0200 Subject: [PATCH 063/129] #9202 Well Log Plot: add option for having the legend inside the plot --- .../ProjectDataModel/RimDepthTrackPlot.cpp | 2 +- .../ProjectDataModel/RimPlotWindow.cpp | 44 ++++++++++-- .../ProjectDataModel/RimPlotWindow.h | 29 +++++--- .../UserInterface/CMakeLists_files.cmake | 3 + .../UserInterface/RiuMultiPlotPage.cpp | 68 ++++++++++++++++--- .../UserInterface/RiuMultiPlotPage.h | 29 ++++---- .../RiuQwtLegendOverlayContentFrame.cpp | 56 +++++++++++++++ .../RiuQwtLegendOverlayContentFrame.h | 40 +++++++++++ 8 files changed, 230 insertions(+), 41 deletions(-) create mode 100644 ApplicationLibCode/UserInterface/RiuQwtLegendOverlayContentFrame.cpp create mode 100644 ApplicationLibCode/UserInterface/RiuQwtLegendOverlayContentFrame.h diff --git a/ApplicationLibCode/ProjectDataModel/RimDepthTrackPlot.cpp b/ApplicationLibCode/ProjectDataModel/RimDepthTrackPlot.cpp index 63a07a858c..369957f636 100644 --- a/ApplicationLibCode/ProjectDataModel/RimDepthTrackPlot.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimDepthTrackPlot.cpp @@ -945,7 +945,7 @@ void RimDepthTrackPlot::defineUiOrdering( QString uiConfigName, caf::PdmUiOrderi uiOrderingForAutoName( uiConfigName, *titleGroup ); caf::PdmUiGroup* plotLayoutGroup = uiOrdering.addNewGroup( "Plot Layout" ); - RimPlotWindow::uiOrderingForPlotLayout( uiConfigName, *plotLayoutGroup ); + RimPlotWindow::uiOrderingForPlotLayout( uiConfigName, *plotLayoutGroup, true ); plotLayoutGroup->add( &m_subTitleFontSize ); plotLayoutGroup->add( &m_axisTitleFontSize ); plotLayoutGroup->add( &m_axisValueFontSize ); diff --git a/ApplicationLibCode/ProjectDataModel/RimPlotWindow.cpp b/ApplicationLibCode/ProjectDataModel/RimPlotWindow.cpp index 17b33e746b..15bb532566 100644 --- a/ApplicationLibCode/ProjectDataModel/RimPlotWindow.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimPlotWindow.cpp @@ -33,6 +33,19 @@ CAF_PDM_XML_ABSTRACT_SOURCE_INIT( RimPlotWindow, "RimPlotWindow" ); // Do not use. Abstract class +#include "cafAppEnum.h" + +namespace caf +{ +template <> +void caf::AppEnum::setUp() +{ + addItem( RimPlotWindow::LegendPosition::ABOVE, "ABOVE", "Above" ); + addItem( RimPlotWindow::LegendPosition::INSIDE, "INSIDE", "Inside" ); + setDefault( RimPlotWindow::LegendPosition::ABOVE ); +} +}; // namespace caf + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -59,6 +72,7 @@ RimPlotWindow::RimPlotWindow() CAF_PDM_InitFieldNoDefault( &m_titleFontSize, "TitleFontSize", "Title Font Size" ); CAF_PDM_InitFieldNoDefault( &m_legendFontSize, "LegendDeltaFontSize", "Legend Font Size" ); + CAF_PDM_InitFieldNoDefault( &m_legendPosition, "LegendPosition", "Legend Position" ); m_titleFontSize = caf::FontTools::RelativeSize::XXLarge; m_legendFontSize = caf::FontTools::RelativeSize::Large; @@ -89,6 +103,7 @@ RimPlotWindow& RimPlotWindow::operator=( RimPlotWindow&& rhs ) m_plotLegendsHorizontal = rhs.m_plotLegendsHorizontal(); m_titleFontSize = rhs.m_titleFontSize(); m_legendFontSize = rhs.m_legendFontSize(); + m_legendPosition = rhs.m_legendPosition(); return *this; } @@ -180,6 +195,22 @@ void RimPlotWindow::setLegendFontSize( caf::FontTools::RelativeSize fontSize ) m_legendFontSize = fontSize; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RimPlotWindow::LegendPosition RimPlotWindow::legendPosition() const +{ + return m_legendPosition(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimPlotWindow::setLegendPosition( RimPlotWindow::LegendPosition legendPosition ) +{ + m_legendPosition = legendPosition; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -250,11 +281,8 @@ void RimPlotWindow::fieldChangedByUi( const caf::PdmFieldHandle* changedField, updateWindowVisibility(); } - if ( changedField == &m_showPlotLegends || changedField == &m_plotLegendsHorizontal ) - { - updateLayout(); - } - else if ( changedField == &m_legendFontSize || changedField == &m_titleFontSize ) + if ( changedField == &m_showPlotLegends || changedField == &m_plotLegendsHorizontal || + changedField == &m_legendFontSize || changedField == &m_titleFontSize || changedField == &m_legendPosition ) { updateLayout(); } @@ -284,10 +312,14 @@ QList RimPlotWindow::calculateValueOptions( const caf::P //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RimPlotWindow::uiOrderingForPlotLayout( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) +void RimPlotWindow::uiOrderingForPlotLayout( QString uiConfigName, caf::PdmUiOrdering& uiOrdering, bool showLegendPosition ) { uiOrdering.add( &m_showPlotLegends ); uiOrdering.add( &m_plotLegendsHorizontal ); + if ( showLegendPosition ) + { + uiOrdering.add( &m_legendPosition ); + } uiOrdering.add( &m_titleFontSize ); uiOrdering.add( &m_legendFontSize ); } diff --git a/ApplicationLibCode/ProjectDataModel/RimPlotWindow.h b/ApplicationLibCode/ProjectDataModel/RimPlotWindow.h index 304c0e8bfa..5cf02e815e 100644 --- a/ApplicationLibCode/ProjectDataModel/RimPlotWindow.h +++ b/ApplicationLibCode/ProjectDataModel/RimPlotWindow.h @@ -44,6 +44,12 @@ class RimPlotWindow : public RimViewWindow CAF_PDM_HEADER_INIT; public: + enum class LegendPosition + { + ABOVE, + INSIDE, + }; + RimPlotWindow(); ~RimPlotWindow() override; @@ -54,11 +60,13 @@ public: bool plotTitleVisible() const; void setPlotTitleVisible( bool showPlotTitle ); - virtual QString description() const = 0; - bool legendsVisible() const; - void setLegendsVisible( bool doShow ); - bool legendsHorizontal() const; - void setLegendsHorizontal( bool horizontal ); + virtual QString description() const = 0; + bool legendsVisible() const; + void setLegendsVisible( bool doShow ); + bool legendsHorizontal() const; + void setLegendsHorizontal( bool horizontal ); + void setLegendPosition( RimPlotWindow::LegendPosition legendPosition ); + RimPlotWindow::LegendPosition legendPosition() const; void updateFonts() override; @@ -84,7 +92,7 @@ protected: QList calculateValueOptions( const caf::PdmFieldHandle* fieldNeedingOptions ) override; - void uiOrderingForPlotLayout( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ); + void uiOrderingForPlotLayout( QString uiConfigName, caf::PdmUiOrdering& uiOrdering, bool showLegendPosition = false ); void updateWindowVisibility(); @@ -100,10 +108,11 @@ private: void assignIdIfNecessary() final; protected: - caf::PdmField m_id; - caf::PdmField m_showPlotTitle; - caf::PdmField m_showPlotLegends; - caf::PdmField m_plotLegendsHorizontal; + caf::PdmField m_id; + caf::PdmField m_showPlotTitle; + caf::PdmField m_showPlotLegends; + caf::PdmField m_plotLegendsHorizontal; + caf::PdmField> m_legendPosition; caf::PdmField m_titleFontSize; caf::PdmField m_legendFontSize; diff --git a/ApplicationLibCode/UserInterface/CMakeLists_files.cmake b/ApplicationLibCode/UserInterface/CMakeLists_files.cmake index a76b6651b8..3eb868fb51 100644 --- a/ApplicationLibCode/UserInterface/CMakeLists_files.cmake +++ b/ApplicationLibCode/UserInterface/CMakeLists_files.cmake @@ -96,6 +96,7 @@ set(SOURCE_GROUP_HEADER_FILES ${CMAKE_CURRENT_LIST_DIR}/RiuMainWindowTools.h ${CMAKE_CURRENT_LIST_DIR}/RiuComparisonViewMover.h ${CMAKE_CURRENT_LIST_DIR}/RiuAbstractOverlayContentFrame.h + ${CMAKE_CURRENT_LIST_DIR}/RiuQwtLegendOverlayContentFrame.h ${CMAKE_CURRENT_LIST_DIR}/RiuAbstractLegendFrame.h ${CMAKE_CURRENT_LIST_DIR}/RiuCategoryLegendFrame.h ${CMAKE_CURRENT_LIST_DIR}/RiuScalarMapperLegendFrame.h @@ -206,6 +207,7 @@ set(SOURCE_GROUP_SOURCE_FILES ${CMAKE_CURRENT_LIST_DIR}/RiuQssSyntaxHighlighter.cpp ${CMAKE_CURRENT_LIST_DIR}/RiuTextEditWithCompletion.cpp ${CMAKE_CURRENT_LIST_DIR}/RiuTextContentFrame.cpp + ${CMAKE_CURRENT_LIST_DIR}/RiuQwtLegendOverlayContentFrame.cpp ${CMAKE_CURRENT_LIST_DIR}/RiuQwtDateScaleWrapper.cpp ) @@ -295,6 +297,7 @@ list( ${CMAKE_CURRENT_LIST_DIR}/RiuScalarMapperLegendFrame.h ${CMAKE_CURRENT_LIST_DIR}/RiuTextEditWithCompletion.h ${CMAKE_CURRENT_LIST_DIR}/RiuTextContentFrame.h + ${CMAKE_CURRENT_LIST_DIR}/RiuQwtLegendOverlayContentFrame.h ) list(APPEND QT_UI_FILES) diff --git a/ApplicationLibCode/UserInterface/RiuMultiPlotPage.cpp b/ApplicationLibCode/UserInterface/RiuMultiPlotPage.cpp index 6a89c8450b..f2f98a85c6 100644 --- a/ApplicationLibCode/UserInterface/RiuMultiPlotPage.cpp +++ b/ApplicationLibCode/UserInterface/RiuMultiPlotPage.cpp @@ -20,27 +20,28 @@ #include "RiuMultiPlotPage.h" #include "RiaApplication.h" +#include "RiaGuiApplication.h" +#include "RiaPlotDefines.h" #include "RiaPlotWindowRedrawScheduler.h" #include "RiaPreferences.h" #include "WellLogCommands/RicWellLogPlotTrackFeatureImpl.h" -#include "RiaGuiApplication.h" -#include "RiaPlotDefines.h" - #include "RimContextCommandBuilder.h" #include "RimMultiPlot.h" #include "RimPlotCurve.h" +#include "RimPlotWindow.h" #include "RimWellLogTrack.h" +#include "RiuDraggableOverlayFrame.h" #include "RiuMainWindow.h" #include "RiuPlotMainWindow.h" #include "RiuPlotObjectPicker.h" #include "RiuPlotWidget.h" +#include "RiuQwtLegendOverlayContentFrame.h" #include "RiuQwtPlotLegend.h" #include "RiuQwtPlotTools.h" #include "RiuQwtPlotWidget.h" -#include "qwt_legend_label.h" #ifdef USE_QTCHARTS #include "RiuQtChartsPlotWidget.h" #endif @@ -52,6 +53,7 @@ #include "qwt_axis.h" #include "qwt_legend.h" +#include "qwt_legend_label.h" #include "qwt_plot_layout.h" #include "qwt_plot_renderer.h" #include "qwt_scale_draw.h" @@ -167,10 +169,17 @@ void RiuMultiPlotPage::insertPlot( RiuPlotWidget* plotWidget, size_t index ) subTitle->setVisible( false ); m_subTitles.insert( static_cast( index ), subTitle ); - RiuQwtPlotLegend* legend = nullptr; + RiuQwtPlotWidget* qwtPlotWidget = dynamic_cast( plotWidget ); + + RiuQwtPlotLegend* legend = new RiuQwtPlotLegend( this ); + RiuDraggableOverlayFrame* legendFrame = nullptr; + if ( qwtPlotWidget ) + { + legendFrame = new RiuDraggableOverlayFrame( qwtPlotWidget->qwtPlot()->canvas(), plotWidget->overlayMargins() ); + } + if ( m_plotDefinition->legendsVisible() && plotWidget->plotDefinition()->legendsVisible() ) { - legend = new RiuQwtPlotLegend( this ); int legendColumns = 1; if ( m_plotDefinition->legendsHorizontal() ) { @@ -179,7 +188,6 @@ void RiuMultiPlotPage::insertPlot( RiuPlotWidget* plotWidget, size_t index ) legend->setMaxColumns( legendColumns ); legend->horizontalScrollBar()->setVisible( false ); legend->verticalScrollBar()->setVisible( false ); - RiuQwtPlotWidget* qwtPlotWidget = dynamic_cast( plotWidget ); if ( qwtPlotWidget ) { legend->connect( qwtPlotWidget->qwtPlot(), @@ -200,9 +208,11 @@ void RiuMultiPlotPage::insertPlot( RiuPlotWidget* plotWidget, size_t index ) legend->contentsWidget()->layout()->setAlignment( Qt::AlignBottom | Qt::AlignHCenter ); legend->setVisible( false ); + plotWidget->updateLegend(); } m_legends.insert( static_cast( index ), legend ); + m_legendFrames.insert( static_cast( index ), legendFrame ); scheduleUpdate(); } @@ -628,9 +638,10 @@ void RiuMultiPlotPage::reinsertPlotWidgets() { clearGridLayout(); - QList> subTitles = this->subTitlesForVisiblePlots(); - QList> legends = this->legendsForVisiblePlots(); - QList> plotWidgets = this->visiblePlotWidgets(); + QList> subTitles = this->subTitlesForVisiblePlots(); + QList> legends = this->legendsForVisiblePlots(); + QList> legendFrames = this->legendFramesForVisiblePlots(); + QList> plotWidgets = this->visiblePlotWidgets(); m_visibleIndexToPositionMapping.clear(); @@ -654,7 +665,25 @@ void RiuMultiPlotPage::reinsertPlotWidgets() m_gridLayout->addWidget( subTitles[visibleIndex], 3 * row, column, 1, colSpan ); if ( legends[visibleIndex] ) { - m_gridLayout->addWidget( legends[visibleIndex], 3 * row + 1, column, 1, colSpan, Qt::AlignHCenter | Qt::AlignBottom ); + if ( m_plotDefinition->legendPosition() == RimPlotWindow::LegendPosition::ABOVE ) + { + m_gridLayout->addWidget( legends[visibleIndex], + 3 * row + 1, + column, + 1, + colSpan, + Qt::AlignHCenter | Qt::AlignBottom ); + } + else + { + CAF_ASSERT( m_plotDefinition->legendPosition() == RimPlotWindow::LegendPosition::INSIDE ); + + auto overlayFrame = new RiuQwtLegendOverlayContentFrame; + overlayFrame->setLegend( legends[visibleIndex] ); + legendFrames[visibleIndex]->setContentFrame( overlayFrame ); + legendFrames[visibleIndex]->setAnchorCorner( RiuDraggableOverlayFrame::AnchorCorner::TopRight ); + plotWidgets[visibleIndex]->addOverlayFrame( legendFrames[visibleIndex] ); + } } m_gridLayout->addWidget( plotWidgets[visibleIndex], 3 * row + 2, column, 1 + ( rowSpan - 1 ) * 3, colSpan ); @@ -830,6 +859,7 @@ void RiuMultiPlotPage::clearGridLayout() { if ( m_plotWidgets[tIdx] ) { + m_plotWidgets[tIdx]->removeOverlayFrame( m_legendFrames[tIdx] ); m_plotWidgets[tIdx]->hide(); } if ( m_legends[tIdx] ) @@ -875,6 +905,22 @@ QList> RiuMultiPlotPage::legendsForVisiblePlots() con return legends; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QList> RiuMultiPlotPage::legendFramesForVisiblePlots() const +{ + QList> legendFrames; + for ( int i = 0; i < m_plotWidgets.size(); ++i ) + { + if ( m_plotWidgets[i]->isChecked() ) + { + legendFrames.push_back( m_legendFrames[i] ); + } + } + return legendFrames; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/UserInterface/RiuMultiPlotPage.h b/ApplicationLibCode/UserInterface/RiuMultiPlotPage.h index fe203c7b92..7564973eba 100644 --- a/ApplicationLibCode/UserInterface/RiuMultiPlotPage.h +++ b/ApplicationLibCode/UserInterface/RiuMultiPlotPage.h @@ -17,6 +17,7 @@ ///////////////////////////////////////////////////////////////////////////////// #pragma once +#include "RiuDraggableOverlayFrame.h" #include "RiuInterfaceToViewWindow.h" #include "RiaDefines.h" @@ -127,9 +128,10 @@ protected: void clearGridLayout(); - QList> visiblePlotWidgets() const; - QList> legendsForVisiblePlots() const; - QList> subTitlesForVisiblePlots() const; + QList> visiblePlotWidgets() const; + QList> legendsForVisiblePlots() const; + QList> subTitlesForVisiblePlots() const; + QList> legendFramesForVisiblePlots() const; void applyLook(); @@ -137,16 +139,17 @@ private slots: void onLegendUpdated(); protected: - QPointer m_layout; - QPointer m_plotLayout; - QPointer m_plotWidgetFrame; - QPointer m_gridLayout; - QPointer m_plotTitle; - QList> m_subTitles; - QList> m_legends; - QList> m_plotWidgets; - std::map> m_visibleIndexToPositionMapping; - caf::PdmPointer m_plotDefinition; + QPointer m_layout; + QPointer m_plotLayout; + QPointer m_plotWidgetFrame; + QPointer m_gridLayout; + QPointer m_plotTitle; + QList> m_subTitles; + QList> m_legends; + QList> m_legendFrames; + QList> m_plotWidgets; + std::map> m_visibleIndexToPositionMapping; + caf::PdmPointer m_plotDefinition; int m_titleFontPixelSize; int m_subTitleFontPixelSize; diff --git a/ApplicationLibCode/UserInterface/RiuQwtLegendOverlayContentFrame.cpp b/ApplicationLibCode/UserInterface/RiuQwtLegendOverlayContentFrame.cpp new file mode 100644 index 0000000000..bde5e7e766 --- /dev/null +++ b/ApplicationLibCode/UserInterface/RiuQwtLegendOverlayContentFrame.cpp @@ -0,0 +1,56 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2022- Equinor ASA +// +// ResInsight is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU General Public License at +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// +#include "RiuQwtLegendOverlayContentFrame.h" + +#include +#include +#include + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RiuQwtLegendOverlayContentFrame::RiuQwtLegendOverlayContentFrame( QWidget* parent ) + : RiuAbstractOverlayContentFrame( parent ) +{ + QVBoxLayout* layout = new QVBoxLayout( this ); + layout->setContentsMargins( 4, 4, 4, 4 ); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RiuQwtLegendOverlayContentFrame::setLegend( QwtLegend* legend ) +{ + m_legend = legend; + layout()->addWidget( legend ); + legend->adjustSize(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RiuQwtLegendOverlayContentFrame::renderTo( QPainter* painter, const QRect& targetRect ) +{ + painter->save(); + painter->translate( targetRect.topLeft() + QPoint( this->contentsMargins().left(), this->contentsMargins().top() ) ); + + QRegion sourceRegion = visibleRegion(); + render( painter, QPoint(), sourceRegion ); + + painter->restore(); +} diff --git a/ApplicationLibCode/UserInterface/RiuQwtLegendOverlayContentFrame.h b/ApplicationLibCode/UserInterface/RiuQwtLegendOverlayContentFrame.h new file mode 100644 index 0000000000..7560cb3d9c --- /dev/null +++ b/ApplicationLibCode/UserInterface/RiuQwtLegendOverlayContentFrame.h @@ -0,0 +1,40 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2022- Equinor ASA +// +// ResInsight is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU General Public License at +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// +#pragma once + +#include "RiuAbstractOverlayContentFrame.h" + +#include +#include + +#include "qwt_legend.h" + +class QLabel; + +class RiuQwtLegendOverlayContentFrame : public RiuAbstractOverlayContentFrame +{ + Q_OBJECT +public: + RiuQwtLegendOverlayContentFrame( QWidget* parent = nullptr ); + + void setLegend( QwtLegend* legend ); + void renderTo( QPainter* painter, const QRect& targetRect ) override; + +private: + QPointer m_legend; +}; From f9f49e9f58fdc47f88a8fcf0ec7baeb69e31aa76 Mon Sep 17 00:00:00 2001 From: Kristian Bendiksen Date: Wed, 17 Aug 2022 14:38:16 +0200 Subject: [PATCH 064/129] #9202 Summary Multi Plot: add option for having the legend inside the plot --- .../Summary/RimSummaryMultiPlot.cpp | 1 + .../UserInterface/RiuMultiPlotPage.cpp | 14 ++++---- .../UserInterface/RiuPlotWidget.cpp | 10 ++++++ .../UserInterface/RiuPlotWidget.h | 1 + .../UserInterface/RiuSummaryMultiPlotPage.cpp | 33 ++++++++++++++++--- 5 files changed, 48 insertions(+), 11 deletions(-) diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.cpp index 5b50bb61fc..609c967c98 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.cpp @@ -425,6 +425,7 @@ void RimSummaryMultiPlot::defineUiOrdering( QString uiConfigName, caf::PdmUiOrde legendsGroup->setCollapsedByDefault( true ); legendsGroup->add( &m_showPlotLegends ); legendsGroup->add( &m_plotLegendsHorizontal ); + legendsGroup->add( &m_legendPosition ); legendsGroup->add( &m_legendFontSize ); uiOrdering.skipRemainingFields( true ); diff --git a/ApplicationLibCode/UserInterface/RiuMultiPlotPage.cpp b/ApplicationLibCode/UserInterface/RiuMultiPlotPage.cpp index f2f98a85c6..41b95317f7 100644 --- a/ApplicationLibCode/UserInterface/RiuMultiPlotPage.cpp +++ b/ApplicationLibCode/UserInterface/RiuMultiPlotPage.cpp @@ -169,14 +169,13 @@ void RiuMultiPlotPage::insertPlot( RiuPlotWidget* plotWidget, size_t index ) subTitle->setVisible( false ); m_subTitles.insert( static_cast( index ), subTitle ); + plotWidget->clearOverlayFrames(); + RiuQwtPlotWidget* qwtPlotWidget = dynamic_cast( plotWidget ); - RiuQwtPlotLegend* legend = new RiuQwtPlotLegend( this ); - RiuDraggableOverlayFrame* legendFrame = nullptr; - if ( qwtPlotWidget ) - { - legendFrame = new RiuDraggableOverlayFrame( qwtPlotWidget->qwtPlot()->canvas(), plotWidget->overlayMargins() ); - } + RiuQwtPlotLegend* legend = new RiuQwtPlotLegend( this ); + RiuDraggableOverlayFrame* legendFrame = + new RiuDraggableOverlayFrame( plotWidget->getParentForOverlay(), plotWidget->overlayMargins() ); if ( m_plotDefinition->legendsVisible() && plotWidget->plotDefinition()->legendsVisible() ) { @@ -209,6 +208,8 @@ void RiuMultiPlotPage::insertPlot( RiuPlotWidget* plotWidget, size_t index ) legend->contentsWidget()->layout()->setAlignment( Qt::AlignBottom | Qt::AlignHCenter ); legend->setVisible( false ); + legendFrame->setVisible( false ); + plotWidget->updateLegend(); } m_legends.insert( static_cast( index ), legend ); @@ -677,7 +678,6 @@ void RiuMultiPlotPage::reinsertPlotWidgets() else { CAF_ASSERT( m_plotDefinition->legendPosition() == RimPlotWindow::LegendPosition::INSIDE ); - auto overlayFrame = new RiuQwtLegendOverlayContentFrame; overlayFrame->setLegend( legends[visibleIndex] ); legendFrames[visibleIndex]->setContentFrame( overlayFrame ); diff --git a/ApplicationLibCode/UserInterface/RiuPlotWidget.cpp b/ApplicationLibCode/UserInterface/RiuPlotWidget.cpp index 1fd7ea5437..3980882e28 100644 --- a/ApplicationLibCode/UserInterface/RiuPlotWidget.cpp +++ b/ApplicationLibCode/UserInterface/RiuPlotWidget.cpp @@ -168,6 +168,16 @@ void RiuPlotWidget::removeOverlayFrame( RiuDraggableOverlayFrame* overlayFrame ) m_overlayFrames.removeOne( overlayFrame ); } +//-------------------------------------------------------------------------------------------------- +/// Remove all overlay widgets. +//-------------------------------------------------------------------------------------------------- +void RiuPlotWidget::clearOverlayFrames() +{ + for ( auto p : m_overlayFrames ) + p->deleteLater(); + m_overlayFrames.clear(); +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/UserInterface/RiuPlotWidget.h b/ApplicationLibCode/UserInterface/RiuPlotWidget.h index fd2bcd16cc..5067885226 100644 --- a/ApplicationLibCode/UserInterface/RiuPlotWidget.h +++ b/ApplicationLibCode/UserInterface/RiuPlotWidget.h @@ -165,6 +165,7 @@ public: void addOverlayFrame( RiuDraggableOverlayFrame* overlayWidget ); void removeOverlayFrame( RiuDraggableOverlayFrame* overlayWidget ); + void clearOverlayFrames(); virtual void updateLayout() = 0; virtual void renderTo( QPainter* painter, const QRect& targetRect, double scaling ) = 0; diff --git a/ApplicationLibCode/UserInterface/RiuSummaryMultiPlotPage.cpp b/ApplicationLibCode/UserInterface/RiuSummaryMultiPlotPage.cpp index 7fa24a1b9e..b6b366c3cc 100644 --- a/ApplicationLibCode/UserInterface/RiuSummaryMultiPlotPage.cpp +++ b/ApplicationLibCode/UserInterface/RiuSummaryMultiPlotPage.cpp @@ -22,6 +22,7 @@ #include "RimSummaryPlot.h" #include "RiuPlotWidget.h" +#include "RiuQwtLegendOverlayContentFrame.h" #include "RiuQwtPlotLegend.h" #include @@ -69,9 +70,10 @@ void RiuSummaryMultiPlotPage::reinsertPlotWidgets() int nCells = cols * rows; reservePlaceholders( nCells - nPlots ); - QList> subTitles = this->subTitlesForVisiblePlots(); - QList> legends = this->legendsForVisiblePlots(); - QList> plotWidgets = this->visiblePlotWidgets(); + QList> subTitles = this->subTitlesForVisiblePlots(); + QList> legends = this->legendsForVisiblePlots(); + QList> legendFrames = this->legendFramesForVisiblePlots(); + QList> plotWidgets = this->visiblePlotWidgets(); m_visibleIndexToPositionMapping.clear(); @@ -101,7 +103,20 @@ void RiuSummaryMultiPlotPage::reinsertPlotWidgets() m_gridLayout->addWidget( subTitles[visibleIndex], 3 * row, col, 1, colSpan ); if ( legends[visibleIndex] ) { - m_gridLayout->addWidget( legends[visibleIndex], 3 * row + 1, col, 1, colSpan, Qt::AlignHCenter | Qt::AlignBottom ); + if ( m_plotDefinition->legendPosition() == RimPlotWindow::LegendPosition::ABOVE ) + { + m_gridLayout->addWidget( legends[visibleIndex], 3 * row + 1, col, 1, colSpan, Qt::AlignHCenter | Qt::AlignBottom ); + } + else + { + CAF_ASSERT( m_plotDefinition->legendPosition() == RimPlotWindow::LegendPosition::INSIDE ); + auto overlayFrame = new RiuQwtLegendOverlayContentFrame; + overlayFrame->setLegend( legends[visibleIndex] ); + legendFrames[visibleIndex]->setContentFrame( overlayFrame ); + legendFrames[visibleIndex]->setAnchorCorner( RiuDraggableOverlayFrame::AnchorCorner::TopRight ); + plotWidgets[visibleIndex]->removeOverlayFrame( legendFrames[visibleIndex] ); + plotWidgets[visibleIndex]->addOverlayFrame( legendFrames[visibleIndex] ); + } } m_gridLayout->addWidget( plotWidget, 3 * row + 2, col, 1, colSpan ); auto summaryPlot = dynamic_cast( plotWidget->plotDefinition() ); @@ -133,10 +148,20 @@ void RiuSummaryMultiPlotPage::reinsertPlotWidgets() updateLegendColumns( legends[visibleIndex] ); updateLegendFont( legends[visibleIndex] ); legends[visibleIndex]->show(); + + if ( m_plotDefinition->legendPosition() == RimPlotWindow::LegendPosition::INSIDE ) + legendFrames[visibleIndex]->show(); + else + { + plotWidget->removeOverlayFrame( legendFrames[visibleIndex] ); + legendFrames[visibleIndex]->hide(); + } } else { legends[visibleIndex]->hide(); + legendFrames[visibleIndex]->hide(); + plotWidget->removeOverlayFrame( legendFrames[visibleIndex] ); } } // Set basic row and column stretches From acaea8de816d8693449a742baefd384ebfcf537c Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Thu, 18 Aug 2022 08:09:05 +0200 Subject: [PATCH 065/129] Renaming of features --- .../Commands/WellLogCommands/CMakeLists_files.cmake | 4 ++-- .../RicNewRftSegmentWellLogPlotFeature.cpp | 2 +- ...veFeature.cpp => RicNewRftWellLogPlotFeature.cpp} | 12 ++++++------ ...gCurveFeature.h => RicNewRftWellLogPlotFeature.h} | 2 +- .../ProjectDataModel/RimContextCommandBuilder.cpp | 2 +- 5 files changed, 11 insertions(+), 11 deletions(-) rename ApplicationLibCode/Commands/WellLogCommands/{RicNewRftWellLogCurveFeature.cpp => RicNewRftWellLogPlotFeature.cpp} (87%) rename ApplicationLibCode/Commands/WellLogCommands/{RicNewRftWellLogCurveFeature.h => RicNewRftWellLogPlotFeature.h} (95%) diff --git a/ApplicationLibCode/Commands/WellLogCommands/CMakeLists_files.cmake b/ApplicationLibCode/Commands/WellLogCommands/CMakeLists_files.cmake index e6bff1f084..93357db61e 100644 --- a/ApplicationLibCode/Commands/WellLogCommands/CMakeLists_files.cmake +++ b/ApplicationLibCode/Commands/WellLogCommands/CMakeLists_files.cmake @@ -27,7 +27,7 @@ set(SOURCE_GROUP_HEADER_FILES ${CMAKE_CURRENT_LIST_DIR}/RicNewWellBoreStabilityPlotFeature.h ${CMAKE_CURRENT_LIST_DIR}/RicNewWellMeasurementCurveFeature.h ${CMAKE_CURRENT_LIST_DIR}/RicNewEnsembleWellLogCurveSetFeature.h - ${CMAKE_CURRENT_LIST_DIR}/RicNewRftWellLogCurveFeature.h + ${CMAKE_CURRENT_LIST_DIR}/RicNewRftWellLogPlotFeature.h ${CMAKE_CURRENT_LIST_DIR}/RicNewRftSegmentWellLogPlotFeature.h ) @@ -60,7 +60,7 @@ set(SOURCE_GROUP_SOURCE_FILES ${CMAKE_CURRENT_LIST_DIR}/RicNewWellBoreStabilityPlotFeature.cpp ${CMAKE_CURRENT_LIST_DIR}/RicNewWellMeasurementCurveFeature.cpp ${CMAKE_CURRENT_LIST_DIR}/RicNewEnsembleWellLogCurveSetFeature.cpp - ${CMAKE_CURRENT_LIST_DIR}/RicNewRftWellLogCurveFeature.cpp + ${CMAKE_CURRENT_LIST_DIR}/RicNewRftWellLogPlotFeature.cpp ${CMAKE_CURRENT_LIST_DIR}/RicNewRftSegmentWellLogPlotFeature.cpp ) diff --git a/ApplicationLibCode/Commands/WellLogCommands/RicNewRftSegmentWellLogPlotFeature.cpp b/ApplicationLibCode/Commands/WellLogCommands/RicNewRftSegmentWellLogPlotFeature.cpp index ac1971be7a..3ded3d50ee 100644 --- a/ApplicationLibCode/Commands/WellLogCommands/RicNewRftSegmentWellLogPlotFeature.cpp +++ b/ApplicationLibCode/Commands/WellLogCommands/RicNewRftSegmentWellLogPlotFeature.cpp @@ -43,7 +43,7 @@ #include -CAF_CMD_SOURCE_INIT( RicNewRftSegmentWellLogPlotFeature, "RicNewRftSegmentWellLogCurveFeature" ); +CAF_CMD_SOURCE_INIT( RicNewRftSegmentWellLogPlotFeature, "RicNewRftSegmentWellLogPlotFeature" ); //-------------------------------------------------------------------------------------------------- /// diff --git a/ApplicationLibCode/Commands/WellLogCommands/RicNewRftWellLogCurveFeature.cpp b/ApplicationLibCode/Commands/WellLogCommands/RicNewRftWellLogPlotFeature.cpp similarity index 87% rename from ApplicationLibCode/Commands/WellLogCommands/RicNewRftWellLogCurveFeature.cpp rename to ApplicationLibCode/Commands/WellLogCommands/RicNewRftWellLogPlotFeature.cpp index 928ba2d6e5..958e6a09fc 100644 --- a/ApplicationLibCode/Commands/WellLogCommands/RicNewRftWellLogCurveFeature.cpp +++ b/ApplicationLibCode/Commands/WellLogCommands/RicNewRftWellLogPlotFeature.cpp @@ -16,7 +16,7 @@ // ///////////////////////////////////////////////////////////////////////////////// -#include "RicNewRftWellLogCurveFeature.h" +#include "RicNewRftWellLogPlotFeature.h" #include "RicNewWellLogPlotFeatureImpl.h" #include "RicWellLogPlotCurveFeatureImpl.h" @@ -42,12 +42,12 @@ #include -CAF_CMD_SOURCE_INIT( RicNewRftWellLogCurveFeature, "RicNewRftWellLogCurveFeature" ); +CAF_CMD_SOURCE_INIT( RicNewRftWellLogPlotFeature, "RicNewRftWellLogPlotFeature" ); //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -bool RicNewRftWellLogCurveFeature::isCommandEnabled() +bool RicNewRftWellLogPlotFeature::isCommandEnabled() { return true; } @@ -55,7 +55,7 @@ bool RicNewRftWellLogCurveFeature::isCommandEnabled() //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RicNewRftWellLogCurveFeature::onActionTriggered( bool isChecked ) +void RicNewRftWellLogPlotFeature::onActionTriggered( bool isChecked ) { auto rftCase = caf::SelectionManager::instance()->selectedItemOfType(); if ( !rftCase ) return; @@ -85,8 +85,8 @@ void RicNewRftWellLogCurveFeature::onActionTriggered( bool isChecked ) //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RicNewRftWellLogCurveFeature::setupActionLook( QAction* actionToSetup ) +void RicNewRftWellLogPlotFeature::setupActionLook( QAction* actionToSetup ) { - actionToSetup->setText( "Append RFT Well Log Curve" ); + actionToSetup->setText( "Create RFT Well Log Plot" ); actionToSetup->setIcon( QIcon( ":/WellLogCurve16x16.png" ) ); } diff --git a/ApplicationLibCode/Commands/WellLogCommands/RicNewRftWellLogCurveFeature.h b/ApplicationLibCode/Commands/WellLogCommands/RicNewRftWellLogPlotFeature.h similarity index 95% rename from ApplicationLibCode/Commands/WellLogCommands/RicNewRftWellLogCurveFeature.h rename to ApplicationLibCode/Commands/WellLogCommands/RicNewRftWellLogPlotFeature.h index 7b8a1b3b4a..83d9c617c0 100644 --- a/ApplicationLibCode/Commands/WellLogCommands/RicNewRftWellLogCurveFeature.h +++ b/ApplicationLibCode/Commands/WellLogCommands/RicNewRftWellLogPlotFeature.h @@ -23,7 +23,7 @@ //================================================================================================== /// //================================================================================================== -class RicNewRftWellLogCurveFeature : public caf::CmdFeature +class RicNewRftWellLogPlotFeature : public caf::CmdFeature { CAF_CMD_HEADER_INIT; diff --git a/ApplicationLibCode/ProjectDataModel/RimContextCommandBuilder.cpp b/ApplicationLibCode/ProjectDataModel/RimContextCommandBuilder.cpp index f6363bf30c..5069f5b709 100644 --- a/ApplicationLibCode/ProjectDataModel/RimContextCommandBuilder.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimContextCommandBuilder.cpp @@ -1074,7 +1074,7 @@ caf::CmdFeatureMenuBuilder RimContextCommandBuilder::commandsFromSelection() } else if ( dynamic_cast( firstUiItem ) ) { - menuBuilder << "RicNewRftWellLogCurveFeature"; + menuBuilder << "RicNewRftWellLogPlotFeature"; menuBuilder << "RicNewRftSegmentWellLogPlotFeature"; } From a268e6ff3a9202cda5f744baa9682c5e9df4869c Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Thu, 18 Aug 2022 09:41:19 +0200 Subject: [PATCH 066/129] #9210 New Ensemble Curve Set : Missing update in Plots panel --- .../RicNewSummaryEnsembleCurveSetFeature.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ApplicationLibCode/Commands/SummaryPlotCommands/RicNewSummaryEnsembleCurveSetFeature.cpp b/ApplicationLibCode/Commands/SummaryPlotCommands/RicNewSummaryEnsembleCurveSetFeature.cpp index 785ee478fb..de037df0d8 100644 --- a/ApplicationLibCode/Commands/SummaryPlotCommands/RicNewSummaryEnsembleCurveSetFeature.cpp +++ b/ApplicationLibCode/Commands/SummaryPlotCommands/RicNewSummaryEnsembleCurveSetFeature.cpp @@ -180,7 +180,7 @@ void RicNewSummaryEnsembleCurveSetFeature::onActionTriggered( bool isChecked ) if ( !curveSets.empty() ) firstCurveSet = curveSets.front(); } plot->loadDataAndUpdate(); - plot->ensembleCurveSetCollection()->updateAllRequiredEditors(); + plot->updateAllRequiredEditors(); RiaGuiApplication* app = RiaGuiApplication::instance(); RiuPlotMainWindow* mainPlotWindow = app->getOrCreateAndShowMainPlotWindow(); From ee116c8f3d5d502f79e9e0d3f5b4a4f98871d346 Mon Sep 17 00:00:00 2001 From: Jon Jenssen Date: Wed, 17 Aug 2022 17:59:45 +0200 Subject: [PATCH 067/129] Make sure errorbars are shown on project reload --- ApplicationLibCode/ProjectDataModel/RimPlotCurve.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ApplicationLibCode/ProjectDataModel/RimPlotCurve.cpp b/ApplicationLibCode/ProjectDataModel/RimPlotCurve.cpp index eab9ecba4b..e9dba3b12c 100644 --- a/ApplicationLibCode/ProjectDataModel/RimPlotCurve.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimPlotCurve.cpp @@ -1003,7 +1003,9 @@ void RimPlotCurve::setParentPlotNoReplot( RiuPlotWidget* plotWidget ) return; } - m_plotCurve = m_parentPlot->createPlotCurve( this, "", RiaColorTools::toQColor( m_curveAppearance->color() ) ); + auto color = RiaColorTools::toQColor( m_curveAppearance->color() ); + m_plotCurve = m_parentPlot->createPlotCurve( this, "", color ); + m_plotCurve->updateErrorBarsAppearance( m_showErrorBars, color ); // PERFORMANCE NOTE // When the z-value of a curve is changed, several update calls are made to the plot. Make sure that the default From 30921a158b0654e7c2f115fc9ccc237edd0abc19 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Thu, 18 Aug 2022 03:37:51 -0700 Subject: [PATCH 068/129] Simplify RiuPlotMainWindowTools (#9211) * Janitor: Add and use onObjectAppended() * Janitor: Simplify API --- .../RicNewAnalysisPlotFeature.cpp | 4 +--- .../RicNewPlotDataFilterFeature.cpp | 3 +-- .../RicNewStimPlanModelPlotFeature.cpp | 5 +--- .../RicNewCorrelationMatrixPlotFeature.cpp | 4 +--- .../RicNewCorrelationPlotFeature.cpp | 4 +--- .../RicNewCorrelationReportPlotFeature.cpp | 4 +--- .../RicNewParameterResultCrossPlotFeature.cpp | 4 +--- ...ddStoredFlowCharacteristicsPlotFeature.cpp | 5 +--- .../RicAddStoredWellAllocationPlotFeature.cpp | 4 +--- .../RicShowFlowCharacteristicsPlotFeature.cpp | 4 +--- .../RicShowWellAllocationPlotFeature.cpp | 4 +--- .../RicCreateGridCrossPlotFeature.cpp | 4 ++-- ...icCreateSaturationPressurePlotsFeature.cpp | 3 +-- .../RicSummaryPlotBuilder.cpp | 8 +++---- ...eEnsembleFractureStatisticsPlotFeature.cpp | 3 +-- .../RicCreateEnsembleWellLogFeature.cpp | 3 +-- .../RicCreateGridStatisticsPlotFeature.cpp | 3 +-- .../Commands/RicImportSummaryCasesFeature.cpp | 4 +--- ...ewCustomObjectiveFunctionWeightFeature.cpp | 3 +-- .../Commands/RicNewVfpPlotFeature.cpp | 3 +-- .../RicNewSummaryCrossPlotCurveFeature.cpp | 4 +--- .../RicNewSummaryCrossPlotFeature.cpp | 4 +--- .../RicAddWellLogToPlotFeature.cpp | 4 +--- .../RicNewEnsembleWellLogCurveSetFeature.cpp | 4 ++-- .../WellLogCommands/RicNewPltPlotFeature.cpp | 4 +--- .../WellLogCommands/RicNewRftPlotFeature.cpp | 4 +--- .../RicNewRftSegmentWellLogPlotFeature.cpp | 3 +-- .../RicNewRftWellLogPlotFeature.cpp | 5 +--- .../RicNewWellBoreStabilityPlotFeature.cpp | 5 +--- .../RimObservedDataCollection.cpp | 3 +-- .../Summary/RimSummaryMultiPlot.cpp | 2 +- .../Summary/RimSummaryMultiPlotCollection.cpp | 2 +- .../UserInterface/RiuPlotMainWindowTools.cpp | 24 +++++++++++++++---- .../UserInterface/RiuPlotMainWindowTools.h | 12 +++++++--- 34 files changed, 66 insertions(+), 93 deletions(-) diff --git a/ApplicationLibCode/Commands/AnalysisPlotCommands/RicNewAnalysisPlotFeature.cpp b/ApplicationLibCode/Commands/AnalysisPlotCommands/RicNewAnalysisPlotFeature.cpp index 35af3e91a8..2936aab8e7 100644 --- a/ApplicationLibCode/Commands/AnalysisPlotCommands/RicNewAnalysisPlotFeature.cpp +++ b/ApplicationLibCode/Commands/AnalysisPlotCommands/RicNewAnalysisPlotFeature.cpp @@ -96,9 +96,7 @@ void RicNewAnalysisPlotFeature::onActionTriggered( bool isChecked ) if ( analysisPlotColl ) analysisPlotColl->updateConnectedEditors(); - RiuPlotMainWindowTools::setExpanded( newPlot ); - RiuPlotMainWindowTools::selectAsCurrentItem( newPlot ); - RiuPlotMainWindowTools::refreshToolbars(); + RiuPlotMainWindowTools::onObjectAppended( newPlot ); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/Commands/AnalysisPlotCommands/RicNewPlotDataFilterFeature.cpp b/ApplicationLibCode/Commands/AnalysisPlotCommands/RicNewPlotDataFilterFeature.cpp index c1da4506d2..592f86a0c3 100644 --- a/ApplicationLibCode/Commands/AnalysisPlotCommands/RicNewPlotDataFilterFeature.cpp +++ b/ApplicationLibCode/Commands/AnalysisPlotCommands/RicNewPlotDataFilterFeature.cpp @@ -56,8 +56,7 @@ void RicNewPlotDataFilterFeature::onActionTriggered( bool isChecked ) analysisPlot->updateConnectedEditors(); - RiuPlotMainWindowTools::setExpanded( newFilter ); - RiuPlotMainWindowTools::selectAsCurrentItem( newFilter ); + RiuPlotMainWindowTools::onObjectAppended( newFilter ); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/Commands/CompletionCommands/RicNewStimPlanModelPlotFeature.cpp b/ApplicationLibCode/Commands/CompletionCommands/RicNewStimPlanModelPlotFeature.cpp index f0eb7d6508..a446daaa2b 100644 --- a/ApplicationLibCode/Commands/CompletionCommands/RicNewStimPlanModelPlotFeature.cpp +++ b/ApplicationLibCode/Commands/CompletionCommands/RicNewStimPlanModelPlotFeature.cpp @@ -175,11 +175,8 @@ RimStimPlanModelPlot* RicNewStimPlanModelPlotFeature::createPlot( RimStimPlanMod plot->setAutoScaleDepthValuesEnabled( true ); } - RiuPlotMainWindowTools::selectAsCurrentItem( plot ); - RiuPlotMainWindowTools::refreshToolbars(); - - // Make sure the summary plot window is visible RiuPlotMainWindowTools::showPlotMainWindow(); + RiuPlotMainWindowTools::onObjectAppended( plot ); plot->loadDataAndUpdate(); diff --git a/ApplicationLibCode/Commands/CorrelationPlotCommands/RicNewCorrelationMatrixPlotFeature.cpp b/ApplicationLibCode/Commands/CorrelationPlotCommands/RicNewCorrelationMatrixPlotFeature.cpp index b7f4fd55cd..d07e248af1 100644 --- a/ApplicationLibCode/Commands/CorrelationPlotCommands/RicNewCorrelationMatrixPlotFeature.cpp +++ b/ApplicationLibCode/Commands/CorrelationPlotCommands/RicNewCorrelationMatrixPlotFeature.cpp @@ -100,9 +100,7 @@ void RicNewCorrelationMatrixPlotFeature::onActionTriggered( bool isChecked ) if ( correlationPlotColl ) correlationPlotColl->updateConnectedEditors(); - RiuPlotMainWindowTools::setExpanded( newPlot ); - RiuPlotMainWindowTools::selectAsCurrentItem( newPlot ); - RiuPlotMainWindowTools::refreshToolbars(); + RiuPlotMainWindowTools::onObjectAppended( newPlot ); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/Commands/CorrelationPlotCommands/RicNewCorrelationPlotFeature.cpp b/ApplicationLibCode/Commands/CorrelationPlotCommands/RicNewCorrelationPlotFeature.cpp index 3211e13da4..e88f2d33b9 100644 --- a/ApplicationLibCode/Commands/CorrelationPlotCommands/RicNewCorrelationPlotFeature.cpp +++ b/ApplicationLibCode/Commands/CorrelationPlotCommands/RicNewCorrelationPlotFeature.cpp @@ -95,9 +95,7 @@ void RicNewCorrelationPlotFeature::onActionTriggered( bool isChecked ) if ( correlationPlotColl ) correlationPlotColl->updateConnectedEditors(); - RiuPlotMainWindowTools::setExpanded( newPlot ); - RiuPlotMainWindowTools::selectAsCurrentItem( newPlot ); - RiuPlotMainWindowTools::refreshToolbars(); + RiuPlotMainWindowTools::onObjectAppended( newPlot ); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/Commands/CorrelationPlotCommands/RicNewCorrelationReportPlotFeature.cpp b/ApplicationLibCode/Commands/CorrelationPlotCommands/RicNewCorrelationReportPlotFeature.cpp index 38612778dc..9c824d9a1e 100644 --- a/ApplicationLibCode/Commands/CorrelationPlotCommands/RicNewCorrelationReportPlotFeature.cpp +++ b/ApplicationLibCode/Commands/CorrelationPlotCommands/RicNewCorrelationReportPlotFeature.cpp @@ -101,9 +101,7 @@ void RicNewCorrelationReportPlotFeature::onActionTriggered( bool isChecked ) if ( correlationPlotColl ) correlationPlotColl->updateConnectedEditors(); - RiuPlotMainWindowTools::setExpanded( newPlot ); - RiuPlotMainWindowTools::selectAsCurrentItem( newPlot ); - RiuPlotMainWindowTools::refreshToolbars(); + RiuPlotMainWindowTools::onObjectAppended( newPlot ); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/Commands/CorrelationPlotCommands/RicNewParameterResultCrossPlotFeature.cpp b/ApplicationLibCode/Commands/CorrelationPlotCommands/RicNewParameterResultCrossPlotFeature.cpp index 9f5d06da5c..a0b1e13bfe 100644 --- a/ApplicationLibCode/Commands/CorrelationPlotCommands/RicNewParameterResultCrossPlotFeature.cpp +++ b/ApplicationLibCode/Commands/CorrelationPlotCommands/RicNewParameterResultCrossPlotFeature.cpp @@ -105,9 +105,7 @@ void RicNewParameterResultCrossPlotFeature::onActionTriggered( bool isChecked ) if ( correlationPlotColl ) correlationPlotColl->updateConnectedEditors(); - RiuPlotMainWindowTools::setExpanded( newPlot ); - RiuPlotMainWindowTools::selectAsCurrentItem( newPlot ); - RiuPlotMainWindowTools::refreshToolbars(); + RiuPlotMainWindowTools::onObjectAppended( newPlot ); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/Commands/FlowCommands/RicAddStoredFlowCharacteristicsPlotFeature.cpp b/ApplicationLibCode/Commands/FlowCommands/RicAddStoredFlowCharacteristicsPlotFeature.cpp index 857ff4b94d..4c71357e59 100644 --- a/ApplicationLibCode/Commands/FlowCommands/RicAddStoredFlowCharacteristicsPlotFeature.cpp +++ b/ApplicationLibCode/Commands/FlowCommands/RicAddStoredFlowCharacteristicsPlotFeature.cpp @@ -81,10 +81,7 @@ void RicAddStoredFlowCharacteristicsPlotFeature::onActionTriggered( bool isCheck flowPlotColl->updateConnectedEditors(); RiuPlotMainWindowTools::showPlotMainWindow(); - - RiuPlotMainWindowTools::selectAsCurrentItem( flowCharacteristicsPlot ); - RiuPlotMainWindowTools::setExpanded( flowCharacteristicsPlot ); - RiuPlotMainWindowTools::refreshToolbars(); + RiuPlotMainWindowTools::onObjectAppended( flowCharacteristicsPlot ); } } } diff --git a/ApplicationLibCode/Commands/FlowCommands/RicAddStoredWellAllocationPlotFeature.cpp b/ApplicationLibCode/Commands/FlowCommands/RicAddStoredWellAllocationPlotFeature.cpp index ae6e6c2918..f1297e64e6 100644 --- a/ApplicationLibCode/Commands/FlowCommands/RicAddStoredWellAllocationPlotFeature.cpp +++ b/ApplicationLibCode/Commands/FlowCommands/RicAddStoredWellAllocationPlotFeature.cpp @@ -81,9 +81,7 @@ void RicAddStoredWellAllocationPlotFeature::onActionTriggered( bool isChecked ) flowPlotColl->updateConnectedEditors(); - RiuPlotMainWindowTools::selectAsCurrentItem( wellAllocationPlot ); - RiuPlotMainWindowTools::setExpanded( wellAllocationPlot ); - RiuPlotMainWindowTools::refreshToolbars(); + RiuPlotMainWindowTools::onObjectAppended( wellAllocationPlot ); } } } diff --git a/ApplicationLibCode/Commands/FlowCommands/RicShowFlowCharacteristicsPlotFeature.cpp b/ApplicationLibCode/Commands/FlowCommands/RicShowFlowCharacteristicsPlotFeature.cpp index 96ad70499e..7e2ea1e591 100644 --- a/ApplicationLibCode/Commands/FlowCommands/RicShowFlowCharacteristicsPlotFeature.cpp +++ b/ApplicationLibCode/Commands/FlowCommands/RicShowFlowCharacteristicsPlotFeature.cpp @@ -96,9 +96,7 @@ void RicShowFlowCharacteristicsPlotFeature::onActionTriggered( bool isChecked ) flowPlotColl->defaultFlowCharacteristicsPlot()->setFromFlowSolution( eclCase->defaultFlowDiagSolution() ); flowPlotColl->defaultFlowCharacteristicsPlot()->updateConnectedEditors(); - // Make sure the summary plot window is created and visible - RiuPlotMainWindowTools::selectAsCurrentItem( flowPlotColl->defaultFlowCharacteristicsPlot() ); - RiuPlotMainWindowTools::refreshToolbars(); + RiuPlotMainWindowTools::onObjectAppended( flowPlotColl->defaultFlowCharacteristicsPlot() ); } } } diff --git a/ApplicationLibCode/Commands/FlowCommands/RicShowWellAllocationPlotFeature.cpp b/ApplicationLibCode/Commands/FlowCommands/RicShowWellAllocationPlotFeature.cpp index 188bd4d740..2acbcf571f 100644 --- a/ApplicationLibCode/Commands/FlowCommands/RicShowWellAllocationPlotFeature.cpp +++ b/ApplicationLibCode/Commands/FlowCommands/RicShowWellAllocationPlotFeature.cpp @@ -111,10 +111,8 @@ void RicShowWellAllocationPlotFeature::onActionTriggered( bool isChecked ) flowPlotColl->defaultWellAllocPlot()->setFromSimulationWell( simWell ); flowPlotColl->defaultWellAllocPlot()->updateConnectedEditors(); - // Make sure the summary plot window is created and visible RiuPlotMainWindowTools::showPlotMainWindow(); - RiuPlotMainWindowTools::selectAsCurrentItem( flowPlotColl->defaultWellAllocPlot() ); - RiuPlotMainWindowTools::refreshToolbars(); + RiuPlotMainWindowTools::onObjectAppended( flowPlotColl->defaultWellAllocPlot() ); } } } diff --git a/ApplicationLibCode/Commands/GridCrossPlotCommands/RicCreateGridCrossPlotFeature.cpp b/ApplicationLibCode/Commands/GridCrossPlotCommands/RicCreateGridCrossPlotFeature.cpp index 1af2c46a51..eeed0ccaf7 100644 --- a/ApplicationLibCode/Commands/GridCrossPlotCommands/RicCreateGridCrossPlotFeature.cpp +++ b/ApplicationLibCode/Commands/GridCrossPlotCommands/RicCreateGridCrossPlotFeature.cpp @@ -82,8 +82,8 @@ void RicCreateGridCrossPlotFeature::onActionTriggered( bool isChecked ) collection->updateAllRequiredEditors(); RiaGuiApplication::instance()->getOrCreateAndShowMainPlotWindow(); - RiuPlotMainWindowTools::selectAsCurrentItem( dataSet ); - RiuPlotMainWindowTools::refreshToolbars(); + + RiuPlotMainWindowTools::onObjectAppended( dataSet ); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/Commands/GridCrossPlotCommands/RicCreateSaturationPressurePlotsFeature.cpp b/ApplicationLibCode/Commands/GridCrossPlotCommands/RicCreateSaturationPressurePlotsFeature.cpp index 78d835de4f..a325fab989 100644 --- a/ApplicationLibCode/Commands/GridCrossPlotCommands/RicCreateSaturationPressurePlotsFeature.cpp +++ b/ApplicationLibCode/Commands/GridCrossPlotCommands/RicCreateSaturationPressurePlotsFeature.cpp @@ -199,8 +199,7 @@ void RicCreateSaturationPressurePlotsFeature::onActionTriggered( bool isChecked if ( objectToSelect ) { - RiuPlotMainWindowTools::selectAsCurrentItem( objectToSelect ); - RiuPlotMainWindowTools::refreshToolbars(); + RiuPlotMainWindowTools::onObjectAppended( objectToSelect ); } } diff --git a/ApplicationLibCode/Commands/PlotBuilderCommands/RicSummaryPlotBuilder.cpp b/ApplicationLibCode/Commands/PlotBuilderCommands/RicSummaryPlotBuilder.cpp index 9e3dfcd53d..0cec5d2ae8 100644 --- a/ApplicationLibCode/Commands/PlotBuilderCommands/RicSummaryPlotBuilder.cpp +++ b/ApplicationLibCode/Commands/PlotBuilderCommands/RicSummaryPlotBuilder.cpp @@ -342,11 +342,11 @@ RimMultiPlot* RicSummaryPlotBuilder::createAndAppendMultiPlot( const std::vector if ( !plots.empty() ) { - RiuPlotMainWindowTools::selectAsCurrentItem( plots[0], true ); + RiuPlotMainWindowTools::selectAsCurrentItem( plots[0] ); } else { - RiuPlotMainWindowTools::selectAsCurrentItem( plotWindow, true ); + RiuPlotMainWindowTools::selectAsCurrentItem( plotWindow ); } return plotWindow; @@ -374,12 +374,12 @@ RimSummaryMultiPlot* if ( plotWindow->summaryPlots().size() == 1 ) { RiuPlotMainWindowTools::selectAsCurrentItem( plotWindow->summaryPlots()[0] ); - RiuPlotMainWindowTools::setExpanded( plotWindow->summaryPlots()[0], true ); + RiuPlotMainWindowTools::setExpanded( plotWindow->summaryPlots()[0] ); } else { RiuPlotMainWindowTools::selectAsCurrentItem( plotWindow ); - RiuPlotMainWindowTools::setExpanded( plotWindow, true ); + RiuPlotMainWindowTools::setExpanded( plotWindow ); } return plotWindow; diff --git a/ApplicationLibCode/Commands/RicCreateEnsembleFractureStatisticsPlotFeature.cpp b/ApplicationLibCode/Commands/RicCreateEnsembleFractureStatisticsPlotFeature.cpp index 474d33a559..165edf718c 100644 --- a/ApplicationLibCode/Commands/RicCreateEnsembleFractureStatisticsPlotFeature.cpp +++ b/ApplicationLibCode/Commands/RicCreateEnsembleFractureStatisticsPlotFeature.cpp @@ -59,8 +59,7 @@ void RicCreateEnsembleFractureStatisticsPlotFeature::onActionTriggered( bool isC collection->addEnsembleFractureStatisticsPlot( plot ); collection->updateAllRequiredEditors(); RiaGuiApplication::instance()->getOrCreateAndShowMainPlotWindow(); - RiuPlotMainWindowTools::selectAsCurrentItem( plot ); - RiuPlotMainWindowTools::refreshToolbars(); + RiuPlotMainWindowTools::onObjectAppended( plot ); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/Commands/RicCreateEnsembleWellLogFeature.cpp b/ApplicationLibCode/Commands/RicCreateEnsembleWellLogFeature.cpp index 2485e1fa45..0b7cf3cd02 100644 --- a/ApplicationLibCode/Commands/RicCreateEnsembleWellLogFeature.cpp +++ b/ApplicationLibCode/Commands/RicCreateEnsembleWellLogFeature.cpp @@ -272,8 +272,7 @@ void RicCreateEnsembleWellLogFeature::executeCommand( const RicCreateEnsembleWel wellLogPlot->updateConnectedEditors(); RiuPlotMainWindowTools::showPlotMainWindow(); - RiuPlotMainWindowTools::selectAsCurrentItem( wellLogPlot ); - RiuPlotMainWindowTools::refreshToolbars(); + RiuPlotMainWindowTools::onObjectAppended( wellLogPlot ); } } } diff --git a/ApplicationLibCode/Commands/RicCreateGridStatisticsPlotFeature.cpp b/ApplicationLibCode/Commands/RicCreateGridStatisticsPlotFeature.cpp index 3c81d2b015..63bc5c7192 100644 --- a/ApplicationLibCode/Commands/RicCreateGridStatisticsPlotFeature.cpp +++ b/ApplicationLibCode/Commands/RicCreateGridStatisticsPlotFeature.cpp @@ -64,8 +64,7 @@ void RicCreateGridStatisticsPlotFeature::onActionTriggered( bool isChecked ) collection->addGridStatisticsPlot( plot ); collection->updateAllRequiredEditors(); RiaGuiApplication::instance()->getOrCreateAndShowMainPlotWindow(); - RiuPlotMainWindowTools::selectAsCurrentItem( plot ); - RiuPlotMainWindowTools::refreshToolbars(); + RiuPlotMainWindowTools::onObjectAppended( plot ); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/Commands/RicImportSummaryCasesFeature.cpp b/ApplicationLibCode/Commands/RicImportSummaryCasesFeature.cpp index 55f5e34b9d..0ecdb8968d 100644 --- a/ApplicationLibCode/Commands/RicImportSummaryCasesFeature.cpp +++ b/ApplicationLibCode/Commands/RicImportSummaryCasesFeature.cpp @@ -143,9 +143,7 @@ bool RicImportSummaryCasesFeature::createAndAddSummaryCasesFromFiles( const QStr if ( plotToSelect ) { - RiuPlotMainWindowTools::setExpanded( plotToSelect ); - RiuPlotMainWindowTools::selectAsCurrentItem( plotToSelect ); - RiuPlotMainWindowTools::refreshToolbars(); + RiuPlotMainWindowTools::onObjectAppended( plotToSelect ); } } diff --git a/ApplicationLibCode/Commands/RicNewCustomObjectiveFunctionWeightFeature.cpp b/ApplicationLibCode/Commands/RicNewCustomObjectiveFunctionWeightFeature.cpp index d50a37dfb4..142ba1c469 100644 --- a/ApplicationLibCode/Commands/RicNewCustomObjectiveFunctionWeightFeature.cpp +++ b/ApplicationLibCode/Commands/RicNewCustomObjectiveFunctionWeightFeature.cpp @@ -56,8 +56,7 @@ void RicNewCustomObjectiveFunctionWeightFeature::onActionTriggered( bool isCheck auto newWeight = RimObjectiveFunctionTools::addWeight( firstObjectiveFunction ); firstObjectiveFunction->updateConnectedEditors(); - RiuPlotMainWindowTools::selectAsCurrentItem( newWeight ); - RiuPlotMainWindowTools::setExpanded( func.front() ); + RiuPlotMainWindowTools::onObjectAppended( newWeight, func.front() ); } selObj->updateConnectedEditors(); diff --git a/ApplicationLibCode/Commands/RicNewVfpPlotFeature.cpp b/ApplicationLibCode/Commands/RicNewVfpPlotFeature.cpp index ddbdeed945..b7ec8f0e1a 100644 --- a/ApplicationLibCode/Commands/RicNewVfpPlotFeature.cpp +++ b/ApplicationLibCode/Commands/RicNewVfpPlotFeature.cpp @@ -97,8 +97,7 @@ void RicNewVfpPlotFeature::onActionTriggered( bool isChecked ) if ( !vfpPlots.empty() ) { - RiuPlotMainWindowTools::selectAsCurrentItem( vfpPlots.front() ); - RiuPlotMainWindowTools::refreshToolbars(); + RiuPlotMainWindowTools::onObjectAppended( vfpPlots.front() ); } } } diff --git a/ApplicationLibCode/Commands/SummaryPlotCommands/RicNewSummaryCrossPlotCurveFeature.cpp b/ApplicationLibCode/Commands/SummaryPlotCommands/RicNewSummaryCrossPlotCurveFeature.cpp index 0d25918a57..2b014adcb1 100644 --- a/ApplicationLibCode/Commands/SummaryPlotCommands/RicNewSummaryCrossPlotCurveFeature.cpp +++ b/ApplicationLibCode/Commands/SummaryPlotCommands/RicNewSummaryCrossPlotCurveFeature.cpp @@ -75,9 +75,7 @@ void RicNewSummaryCrossPlotCurveFeature::onActionTriggered( bool isChecked ) plot->updateConnectedEditors(); - RiaGuiApplication::instance()->getOrCreateAndShowMainPlotWindow()->selectAsCurrentItem( newCurve ); - - RiuPlotMainWindowTools::refreshToolbars(); + RiuPlotMainWindowTools::onObjectAppended( newCurve ); } } diff --git a/ApplicationLibCode/Commands/SummaryPlotCommands/RicNewSummaryCrossPlotFeature.cpp b/ApplicationLibCode/Commands/SummaryPlotCommands/RicNewSummaryCrossPlotFeature.cpp index a0fd75ff6f..5304487c80 100644 --- a/ApplicationLibCode/Commands/SummaryPlotCommands/RicNewSummaryCrossPlotFeature.cpp +++ b/ApplicationLibCode/Commands/SummaryPlotCommands/RicNewSummaryCrossPlotFeature.cpp @@ -88,9 +88,7 @@ void RicNewSummaryCrossPlotFeature::onActionTriggered( bool isChecked ) summaryPlot->loadDataAndUpdate(); RiuPlotMainWindowTools::showPlotMainWindow(); - RiuPlotMainWindowTools::selectAsCurrentItem( summaryPlot ); - RiuPlotMainWindowTools::setExpanded( summaryPlot ); - RiuPlotMainWindowTools::refreshToolbars(); + RiuPlotMainWindowTools::onObjectAppended( summaryPlot ); } } diff --git a/ApplicationLibCode/Commands/WellLogCommands/RicAddWellLogToPlotFeature.cpp b/ApplicationLibCode/Commands/WellLogCommands/RicAddWellLogToPlotFeature.cpp index 981dd0d565..cb96a51497 100644 --- a/ApplicationLibCode/Commands/WellLogCommands/RicAddWellLogToPlotFeature.cpp +++ b/ApplicationLibCode/Commands/WellLogCommands/RicAddWellLogToPlotFeature.cpp @@ -105,9 +105,7 @@ void RicAddWellLogToPlotFeature::onActionTriggered( bool isChecked ) plot->updateLayout(); RiuPlotMainWindowTools::showPlotMainWindow(); - RiuPlotMainWindowTools::selectAsCurrentItem( plot ); - RiuPlotMainWindowTools::setExpanded( plotTrack ); - RiuPlotMainWindowTools::refreshToolbars(); + RiuPlotMainWindowTools::onObjectAppended( plot, plotTrack ); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/Commands/WellLogCommands/RicNewEnsembleWellLogCurveSetFeature.cpp b/ApplicationLibCode/Commands/WellLogCommands/RicNewEnsembleWellLogCurveSetFeature.cpp index ac990ccdcf..3368af313b 100644 --- a/ApplicationLibCode/Commands/WellLogCommands/RicNewEnsembleWellLogCurveSetFeature.cpp +++ b/ApplicationLibCode/Commands/WellLogCommands/RicNewEnsembleWellLogCurveSetFeature.cpp @@ -52,9 +52,9 @@ void RicNewEnsembleWellLogCurveSetFeature::onActionTriggered( bool isChecked ) RimEnsembleWellLogCurveSet* curveSet = new RimEnsembleWellLogCurveSet(); wellLogPlotTrack->setEnsembleWellLogCurveSet( curveSet ); wellLogPlotTrack->updateEditors(); - RiuPlotMainWindowTools::selectAsCurrentItem( curveSet ); + + RiuPlotMainWindowTools::onObjectAppended( curveSet ); } - RiuPlotMainWindowTools::refreshToolbars(); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/Commands/WellLogCommands/RicNewPltPlotFeature.cpp b/ApplicationLibCode/Commands/WellLogCommands/RicNewPltPlotFeature.cpp index a83dce0b56..f073a79496 100644 --- a/ApplicationLibCode/Commands/WellLogCommands/RicNewPltPlotFeature.cpp +++ b/ApplicationLibCode/Commands/WellLogCommands/RicNewPltPlotFeature.cpp @@ -121,9 +121,7 @@ void RicNewPltPlotFeature::onActionTriggered( bool isChecked ) pltPlotColl->updateConnectedEditors(); RiuPlotMainWindowTools::showPlotMainWindow(); - RiuPlotMainWindowTools::setExpanded( plotTrack ); - RiuPlotMainWindowTools::selectAsCurrentItem( pltPlot ); - RiuPlotMainWindowTools::refreshToolbars(); + RiuPlotMainWindowTools::onObjectAppended( pltPlot, plotTrack ); } } diff --git a/ApplicationLibCode/Commands/WellLogCommands/RicNewRftPlotFeature.cpp b/ApplicationLibCode/Commands/WellLogCommands/RicNewRftPlotFeature.cpp index 82fe37f957..79013707a1 100644 --- a/ApplicationLibCode/Commands/WellLogCommands/RicNewRftPlotFeature.cpp +++ b/ApplicationLibCode/Commands/WellLogCommands/RicNewRftPlotFeature.cpp @@ -85,9 +85,7 @@ void RicNewRftPlotFeature::onActionTriggered( bool isChecked ) rftPlotColl->updateConnectedEditors(); RiuPlotMainWindowTools::showPlotMainWindow(); - RiuPlotMainWindowTools::setExpanded( plotTrack ); - RiuPlotMainWindowTools::selectAsCurrentItem( rftPlot ); - RiuPlotMainWindowTools::refreshToolbars(); + RiuPlotMainWindowTools::onObjectAppended( rftPlot, plotTrack ); } } diff --git a/ApplicationLibCode/Commands/WellLogCommands/RicNewRftSegmentWellLogPlotFeature.cpp b/ApplicationLibCode/Commands/WellLogCommands/RicNewRftSegmentWellLogPlotFeature.cpp index 3ded3d50ee..92a585ff1c 100644 --- a/ApplicationLibCode/Commands/WellLogCommands/RicNewRftSegmentWellLogPlotFeature.cpp +++ b/ApplicationLibCode/Commands/WellLogCommands/RicNewRftSegmentWellLogPlotFeature.cpp @@ -84,8 +84,7 @@ void RicNewRftSegmentWellLogPlotFeature::onActionTriggered( bool isChecked ) appendTrackAndCurveForBranchType( plot, resultName, branchType, summaryCase ); } - RiuPlotMainWindowTools::selectAsCurrentItem( plot ); - RiuPlotMainWindowTools::refreshToolbars(); + RiuPlotMainWindowTools::onObjectAppended( plot ); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/Commands/WellLogCommands/RicNewRftWellLogPlotFeature.cpp b/ApplicationLibCode/Commands/WellLogCommands/RicNewRftWellLogPlotFeature.cpp index 958e6a09fc..ca3d56bbd6 100644 --- a/ApplicationLibCode/Commands/WellLogCommands/RicNewRftWellLogPlotFeature.cpp +++ b/ApplicationLibCode/Commands/WellLogCommands/RicNewRftWellLogPlotFeature.cpp @@ -76,10 +76,7 @@ void RicNewRftWellLogPlotFeature::onActionTriggered( bool isChecked ) curve->updateAllRequiredEditors(); - RiuPlotMainWindowTools::setExpanded( curve ); - RiuPlotMainWindowTools::selectAsCurrentItem( curve ); - - RiuPlotMainWindowTools::refreshToolbars(); + RiuPlotMainWindowTools::onObjectAppended( curve ); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/Commands/WellLogCommands/RicNewWellBoreStabilityPlotFeature.cpp b/ApplicationLibCode/Commands/WellLogCommands/RicNewWellBoreStabilityPlotFeature.cpp index 4cce4a286d..b15dbaf862 100644 --- a/ApplicationLibCode/Commands/WellLogCommands/RicNewWellBoreStabilityPlotFeature.cpp +++ b/ApplicationLibCode/Commands/WellLogCommands/RicNewWellBoreStabilityPlotFeature.cpp @@ -120,11 +120,8 @@ RimWellBoreStabilityPlot* RicNewWellLogPlotFeatureImpl::updateAfterCreation( plot ); } - RiuPlotMainWindowTools::selectAsCurrentItem( plot ); - - // Make sure the summary plot window is visible RiuPlotMainWindowTools::showPlotMainWindow(); - RiuPlotMainWindowTools::refreshToolbars(); + RiuPlotMainWindowTools::onObjectAppended( plot ); return plot; } diff --git a/ApplicationLibCode/ProjectDataModel/RimObservedDataCollection.cpp b/ApplicationLibCode/ProjectDataModel/RimObservedDataCollection.cpp index 7b7bc9d88d..837e4d916a 100644 --- a/ApplicationLibCode/ProjectDataModel/RimObservedDataCollection.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimObservedDataCollection.cpp @@ -122,8 +122,7 @@ bool RimObservedDataCollection::fileExists( const QString& fileName, QString* er void updateNewObservedDataCreated( caf::PdmObject* object ) { RiuPlotMainWindowTools::showPlotMainWindow(); - RiuPlotMainWindowTools::selectAsCurrentItem( object ); - RiuPlotMainWindowTools::setExpanded( object ); + RiuPlotMainWindowTools::onObjectAppended( object ); caf::PdmUiObjectEditorHandle::updateUiAllObjectEditors(); diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.cpp index 609c967c98..8c33351516 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.cpp @@ -1397,7 +1397,7 @@ void RimSummaryMultiPlot::appendSubPlotByStepping( int direction ) loadDataAndUpdate(); updateConnectedEditors(); - RiuPlotMainWindowTools::selectAsCurrentItem( newPlots.back(), true ); + RiuPlotMainWindowTools::selectAsCurrentItem( newPlots.back() ); updateSourceStepper(); RiuPlotMainWindowTools::refreshToolbars(); diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlotCollection.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlotCollection.cpp index 018e4fe6d4..5f5eed054f 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlotCollection.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlotCollection.cpp @@ -174,7 +174,7 @@ void RimSummaryMultiPlotCollection::duplicatePlot( RimSummaryMultiPlot* plotToDu updateConnectedEditors(); - RiuPlotMainWindowTools::selectAsCurrentItem( plotCopy, true ); + RiuPlotMainWindowTools::selectAsCurrentItem( plotCopy ); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/UserInterface/RiuPlotMainWindowTools.cpp b/ApplicationLibCode/UserInterface/RiuPlotMainWindowTools.cpp index 262ed61c9d..d81d95ab43 100644 --- a/ApplicationLibCode/UserInterface/RiuPlotMainWindowTools.cpp +++ b/ApplicationLibCode/UserInterface/RiuPlotMainWindowTools.cpp @@ -47,25 +47,27 @@ void RiuPlotMainWindowTools::setActiveViewer( QWidget* subWindow ) //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RiuPlotMainWindowTools::setExpanded( const caf::PdmUiItem* uiItem, bool expanded /*= true*/ ) +void RiuPlotMainWindowTools::setExpanded( const caf::PdmUiItem* uiItem ) { if ( RiaGuiApplication::isRunning() ) { RiuPlotMainWindow* mpw = RiaGuiApplication::instance()->mainPlotWindow(); - if ( mpw ) mpw->setExpanded( uiItem, expanded ); + bool expand = true; + if ( mpw ) mpw->setExpanded( uiItem, expand ); } } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RiuPlotMainWindowTools::selectAsCurrentItem( const caf::PdmObject* object, bool allowActiveViewChange /*= true*/ ) +void RiuPlotMainWindowTools::selectAsCurrentItem( const caf::PdmObject* object ) { if ( RiaGuiApplication::isRunning() ) { RiuPlotMainWindow* mpw = RiaGuiApplication::instance()->mainPlotWindow(); + bool allowActiveViewChange = true; if ( mpw ) mpw->selectAsCurrentItem( object, allowActiveViewChange ); } } @@ -73,12 +75,13 @@ void RiuPlotMainWindowTools::selectAsCurrentItem( const caf::PdmObject* object, //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RiuPlotMainWindowTools::toggleItemInSelection( const caf::PdmObject* object, bool allowActiveViewChange /*= true*/ ) +void RiuPlotMainWindowTools::toggleItemInSelection( const caf::PdmObject* object ) { if ( RiaGuiApplication::isRunning() ) { RiuPlotMainWindow* mpw = RiaGuiApplication::instance()->mainPlotWindow(); + bool allowActiveViewChange = true; if ( mpw ) mpw->toggleItemInSelection( object, allowActiveViewChange ); } } @@ -114,3 +117,16 @@ void RiuPlotMainWindowTools::refreshToolbars() } } } + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RiuPlotMainWindowTools::onObjectAppended( const caf::PdmObject* objectToSelect, const caf::PdmObject* objectToExpand ) +{ + if ( objectToExpand == nullptr ) objectToExpand = objectToSelect; + + if ( objectToExpand ) RiuPlotMainWindowTools::setExpanded( objectToExpand ); + if ( objectToSelect ) RiuPlotMainWindowTools::selectAsCurrentItem( objectToSelect ); + + RiuPlotMainWindowTools::refreshToolbars(); +} diff --git a/ApplicationLibCode/UserInterface/RiuPlotMainWindowTools.h b/ApplicationLibCode/UserInterface/RiuPlotMainWindowTools.h index 38da6f5cb6..96c6a1218b 100644 --- a/ApplicationLibCode/UserInterface/RiuPlotMainWindowTools.h +++ b/ApplicationLibCode/UserInterface/RiuPlotMainWindowTools.h @@ -31,9 +31,15 @@ class RiuPlotMainWindowTools public: static void showPlotMainWindow(); static void setActiveViewer( QWidget* subWindow ); - static void setExpanded( const caf::PdmUiItem* uiItem, bool expanded = true ); - static void selectAsCurrentItem( const caf::PdmObject* object, bool allowActiveViewChange = true ); - static void toggleItemInSelection( const caf::PdmObject* object, bool allowActiveViewChange = true ); + static void setExpanded( const caf::PdmUiItem* uiItem ); + static void selectAsCurrentItem( const caf::PdmObject* object ); static void selectOrToggleObject( const caf::PdmObject* object, bool toggle ); static void refreshToolbars(); + + // Use this function to select (and expand) an object in the project tree and update tool bars. Use the second + // parameter to expand a different object than the object to be selected. + static void onObjectAppended( const caf::PdmObject* objectToSelect, const caf::PdmObject* objectToExpand = nullptr ); + +private: + static void toggleItemInSelection( const caf::PdmObject* object ); }; From 3315a369dd7586127b54d28eb157a2a19bdf1e8e Mon Sep 17 00:00:00 2001 From: jonjenssen <69144954+jonjenssen@users.noreply.github.com> Date: Thu, 18 Aug 2022 14:24:28 +0200 Subject: [PATCH 069/129] Make sure errorbars use the same axis as the data curve (#9212) * Make sure errorbars use the same axis as the data curve --- ApplicationLibCode/UserInterface/RiuQwtPlotCurve.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/ApplicationLibCode/UserInterface/RiuQwtPlotCurve.cpp b/ApplicationLibCode/UserInterface/RiuQwtPlotCurve.cpp index 1809734e5f..6f1e70382e 100644 --- a/ApplicationLibCode/UserInterface/RiuQwtPlotCurve.cpp +++ b/ApplicationLibCode/UserInterface/RiuQwtPlotCurve.cpp @@ -500,7 +500,12 @@ void RiuQwtPlotCurve::setXAxis( RiuPlotAxis axis ) //-------------------------------------------------------------------------------------------------- void RiuQwtPlotCurve::setYAxis( RiuPlotAxis axis ) { - if ( m_plotWidget ) QwtPlotCurve::setYAxis( m_plotWidget->toQwtPlotAxis( axis ) ); + if ( m_plotWidget ) + { + auto axisId = m_plotWidget->toQwtPlotAxis( axis ); + QwtPlotCurve::setYAxis( axisId ); + if ( m_qwtCurveErrorBars ) m_qwtCurveErrorBars->setYAxis( axisId ); + } } //-------------------------------------------------------------------------------------------------- From 0b74be6c5e216162ca57908c5da2e360d9e576fb Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Thu, 18 Aug 2022 13:31:49 +0200 Subject: [PATCH 070/129] Preferences : Set initial selection when selecting plot templates --- .../RicSelectPlotTemplateUi.cpp | 17 +++++++++++++- .../RicSelectPlotTemplateUi.h | 2 +- .../RimPlotTemplateFolderItem.cpp | 22 +++++++++++++++++-- .../PlotTemplates/RimPlotTemplateFolderItem.h | 5 ++++- 4 files changed, 41 insertions(+), 5 deletions(-) diff --git a/ApplicationLibCode/Commands/PlotTemplateCommands/RicSelectPlotTemplateUi.cpp b/ApplicationLibCode/Commands/PlotTemplateCommands/RicSelectPlotTemplateUi.cpp index c471fdf4dd..99ffaf400d 100644 --- a/ApplicationLibCode/Commands/PlotTemplateCommands/RicSelectPlotTemplateUi.cpp +++ b/ApplicationLibCode/Commands/PlotTemplateCommands/RicSelectPlotTemplateUi.cpp @@ -56,8 +56,23 @@ void RicSelectPlotTemplateUi::setMultiSelectMode( bool multiSelect ) //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RicSelectPlotTemplateUi::setInitialSelection( std::vector selectedTemplates ) +void RicSelectPlotTemplateUi::setInitialSelection( const std::vector& selectedTemplates ) { + auto plotTemplateRoot = RimProject::current()->rootPlotTemplateItem(); + + std::vector fileItems; + RimPlotTemplateFolderItem::allPlotTemplates( fileItems, plotTemplateRoot ); + + for ( const auto& selectedTemplate : selectedTemplates ) + { + for ( const auto& fileItem : fileItems ) + { + if ( fileItem->absoluteFilePath() == selectedTemplate ) + { + m_selectedPlotTemplates.push_back( fileItem ); + } + } + } } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/Commands/PlotTemplateCommands/RicSelectPlotTemplateUi.h b/ApplicationLibCode/Commands/PlotTemplateCommands/RicSelectPlotTemplateUi.h index 9b584027da..09869786f4 100644 --- a/ApplicationLibCode/Commands/PlotTemplateCommands/RicSelectPlotTemplateUi.h +++ b/ApplicationLibCode/Commands/PlotTemplateCommands/RicSelectPlotTemplateUi.h @@ -39,7 +39,7 @@ public: RicSelectPlotTemplateUi(); void setMultiSelectMode( bool multiSelect ); - void setInitialSelection( std::vector selectedTemplates ); + void setInitialSelection( const std::vector& selectedTemplates ); std::vector selectedPlotTemplates(); diff --git a/ApplicationLibCode/ProjectDataModel/PlotTemplates/RimPlotTemplateFolderItem.cpp b/ApplicationLibCode/ProjectDataModel/PlotTemplates/RimPlotTemplateFolderItem.cpp index 6dcd38add2..baba20195c 100644 --- a/ApplicationLibCode/ProjectDataModel/PlotTemplates/RimPlotTemplateFolderItem.cpp +++ b/ApplicationLibCode/ProjectDataModel/PlotTemplates/RimPlotTemplateFolderItem.cpp @@ -83,7 +83,7 @@ void RimPlotTemplateFolderItem::updateIconState() const //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -std::vector RimPlotTemplateFolderItem::fileNames() const +std::vector RimPlotTemplateFolderItem::fileItems() const { return m_fileNames.children(); } @@ -105,6 +105,24 @@ void RimPlotTemplateFolderItem::appendOptionItemsForPlotTemplates( QList& fileTemplates, + RimPlotTemplateFolderItem* templateFolderItem ) +{ + auto fileItems = templateFolderItem->fileItems(); + for ( auto fileItem : fileItems ) + { + fileTemplates.push_back( fileItem ); + } + + for ( auto folder : templateFolderItem->subFolders() ) + { + allPlotTemplates( fileTemplates, folder ); + } +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -230,7 +248,7 @@ void RimPlotTemplateFolderItem::appendOptionItemsForPlotTemplatesRecursively( QL caf::IconProvider templateIcon( ":/SummaryTemplate16x16.png" ); caf::IconProvider ensTemplateIcon( ":/SummaryEnsembleTemplate16x16.png" ); - auto files = templateFolderItem->fileNames(); + auto files = templateFolderItem->fileItems(); for ( auto file : files ) { caf::IconProvider icon = templateIcon; diff --git a/ApplicationLibCode/ProjectDataModel/PlotTemplates/RimPlotTemplateFolderItem.h b/ApplicationLibCode/ProjectDataModel/PlotTemplates/RimPlotTemplateFolderItem.h index 35a61283ef..e0b5d2cac4 100644 --- a/ApplicationLibCode/ProjectDataModel/PlotTemplates/RimPlotTemplateFolderItem.h +++ b/ApplicationLibCode/ProjectDataModel/PlotTemplates/RimPlotTemplateFolderItem.h @@ -43,11 +43,14 @@ public: void createRootFolderItemsFromFolderPaths( const QStringList& folderPaths ); - std::vector fileNames() const; + std::vector fileItems() const; std::vector subFolders() const; static void appendOptionItemsForPlotTemplates( QList& options, RimPlotTemplateFolderItem* templateFolderItem ); + + static void allPlotTemplates( std::vector& fileItems, + RimPlotTemplateFolderItem* templateFolderItem ); void updateIconState() const; private: From 07f0362298cad3500fd4793678cffd3162c217e8 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Fri, 19 Aug 2022 08:05:59 +0200 Subject: [PATCH 071/129] Add sample count to grid property statistics --- .../EclipseCommands/RicRenameCaseFeature.cpp | 3 ++- .../Commands/RicRenameSummaryCaseFeature.cpp | 3 ++- .../Rim3dOverlayInfoConfig.cpp | 19 +++++++++++++++++++ .../ProjectDataModel/Rim3dOverlayInfoConfig.h | 2 ++ 4 files changed, 25 insertions(+), 2 deletions(-) diff --git a/ApplicationLibCode/Commands/EclipseCommands/RicRenameCaseFeature.cpp b/ApplicationLibCode/Commands/EclipseCommands/RicRenameCaseFeature.cpp index b594be2a2d..207b58f303 100644 --- a/ApplicationLibCode/Commands/EclipseCommands/RicRenameCaseFeature.cpp +++ b/ApplicationLibCode/Commands/EclipseCommands/RicRenameCaseFeature.cpp @@ -32,7 +32,8 @@ CAF_CMD_SOURCE_INIT( RicRenameCaseFeature, "RicRenameCaseFeature" ); //-------------------------------------------------------------------------------------------------- bool RicRenameCaseFeature::isCommandEnabled() { - return true; + auto rimCase = caf::SelectionManager::instance()->selectedItemOfType(); + return ( rimCase != nullptr ); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/Commands/RicRenameSummaryCaseFeature.cpp b/ApplicationLibCode/Commands/RicRenameSummaryCaseFeature.cpp index d924b4d152..321b29e401 100644 --- a/ApplicationLibCode/Commands/RicRenameSummaryCaseFeature.cpp +++ b/ApplicationLibCode/Commands/RicRenameSummaryCaseFeature.cpp @@ -32,7 +32,8 @@ CAF_CMD_SOURCE_INIT( RicRenameSummaryCaseFeature, "RicRenameSummaryCaseFeature" //-------------------------------------------------------------------------------------------------- bool RicRenameSummaryCaseFeature::isCommandEnabled() { - return true; + auto summaryCase = caf::SelectionManager::instance()->selectedItemOfType(); + return ( summaryCase != nullptr ); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/Rim3dOverlayInfoConfig.cpp b/ApplicationLibCode/ProjectDataModel/Rim3dOverlayInfoConfig.cpp index fb825d6450..e8a7fd7af5 100644 --- a/ApplicationLibCode/ProjectDataModel/Rim3dOverlayInfoConfig.cpp +++ b/ApplicationLibCode/ProjectDataModel/Rim3dOverlayInfoConfig.cpp @@ -211,6 +211,19 @@ QString Rim3dOverlayInfoConfig::resultInfoText( const RigHistogramData& histData return ""; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QString Rim3dOverlayInfoConfig::sampleCountText( const std::vector& histogram ) +{ + size_t sampleCount = std::accumulate( histogram.begin(), histogram.end(), size_t( 0 ) ); + + QLocale localeWithSpaceAsGroupSeparator( caf::norwegianLocale() ); + QString text = localeWithSpaceAsGroupSeparator.toString( (qulonglong)sampleCount ); + + return QString( "
Sample Count: %1" ).arg( text ); +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -418,6 +431,9 @@ QString Rim3dOverlayInfoConfig::resultInfoText( const RigHistogramData& histData if ( histData.isMinMaxValid() ) { infoText += QString( "
Statistics: Current Time Step and Visible Cells" ); + + infoText += sampleCountText( histData.histogram ); + infoText += QString( "" "" "" @@ -473,6 +489,9 @@ QString Rim3dOverlayInfoConfig::resultInfoText( const RigHistogramData& histData { infoText += QString( "
Statistics: " ) + timeRangeText + " and " + m_statisticsCellRange().uiText(); + + infoText += sampleCountText( histData.histogram ); + infoText += QString( "
Min Mean Max
%1 %2 %3
" "" diff --git a/ApplicationLibCode/ProjectDataModel/Rim3dOverlayInfoConfig.h b/ApplicationLibCode/ProjectDataModel/Rim3dOverlayInfoConfig.h index b200ed9575..9eef5fde06 100644 --- a/ApplicationLibCode/ProjectDataModel/Rim3dOverlayInfoConfig.h +++ b/ApplicationLibCode/ProjectDataModel/Rim3dOverlayInfoConfig.h @@ -90,6 +90,8 @@ private: QString resultInfoText( const RigHistogramData& histData, RimEclipseView* eclipseView, bool showVolumeWeightedMean ); QString resultInfoText( const RigHistogramData& histData, RimGeoMechView* geoMechView ); + QString sampleCountText( const std::vector& histogram ); + void displayPropertyFilteredStatisticsMessage( bool showSwitchToCurrentTimestep ); bool hasInvalidStatisticsCombination(); From 9f9e29ff8c5c717f400ce8b672c47c5367259381 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Fri, 19 Aug 2022 05:18:36 -0700 Subject: [PATCH 072/129] Remove control flag in setCollapsedByDefault * Remove control flag in setCollapsedByDefault * Set regions/annotations collapsed by default --- .../RicSaveMultiPlotTemplateFeatureSettings.cpp | 2 +- .../SummaryPlotCommands/RicSummaryPlotEditorUi.cpp | 4 ++-- .../ProjectDataModel/CellFilters/RimPolygonFilter.cpp | 4 ++-- .../ProjectDataModel/CellFilters/RimUserDefinedFilter.cpp | 1 - .../Completions/RimEllipseFractureTemplate.cpp | 2 +- .../ProjectDataModel/Completions/RimFishbones.cpp | 2 +- .../ProjectDataModel/Completions/RimFractureTemplate.cpp | 4 ++-- .../Completions/RimMeshFractureTemplate.cpp | 2 +- .../Completions/RimWellPathAicdParameters.cpp | 2 +- .../ProjectDataModel/Faults/RimFaultInViewCollection.cpp | 4 ++-- .../ProjectDataModel/Flow/RimWellPltPlot.cpp | 2 +- .../ProjectDataModel/Flow/RimWellRftPlot.cpp | 2 +- .../ProjectDataModel/GeoMech/RimGeoMechCase.cpp | 2 +- .../Intersections/RimExtrudedCurveIntersection.cpp | 2 +- .../ProjectDataModel/Intersections/RimIntersection.cpp | 2 +- .../ProjectDataModel/RimEclipseContourMapProjection.cpp | 2 +- .../ProjectDataModel/RimEclipseResultCase.cpp | 2 +- .../ProjectDataModel/RimGridTimeHistoryCurve.cpp | 2 +- .../ProjectDataModel/RimSimWellInViewCollection.cpp | 4 ++-- .../ProjectDataModel/Summary/RimAsciiDataCurve.cpp | 2 +- .../ProjectDataModel/Summary/RimEnsembleCurveSet.cpp | 2 +- .../ProjectDataModel/Summary/RimSummaryCurve.cpp | 2 +- .../ProjectDataModel/Summary/RimSummaryCurveAutoName.cpp | 2 +- .../ProjectDataModel/Summary/RimSummaryMultiPlot.cpp | 8 ++++---- .../Summary/RimSummaryTimeAxisProperties.cpp | 2 +- .../WellLog/RimEnsembleWellLogCurveSet.cpp | 2 +- .../WellLog/RimWellLogExtractionCurve.cpp | 2 +- .../ProjectDataModel/WellLog/RimWellLogTrack.cpp | 3 ++- .../cafProjectDataModel/cafPdmUiCore/cafPdmUiGroup.cpp | 4 ++-- .../cafProjectDataModel/cafPdmUiCore/cafPdmUiGroup.h | 5 +++-- 30 files changed, 41 insertions(+), 40 deletions(-) diff --git a/ApplicationLibCode/Commands/PlotTemplateCommands/RicSaveMultiPlotTemplateFeatureSettings.cpp b/ApplicationLibCode/Commands/PlotTemplateCommands/RicSaveMultiPlotTemplateFeatureSettings.cpp index a0ce185a79..e68f524754 100644 --- a/ApplicationLibCode/Commands/PlotTemplateCommands/RicSaveMultiPlotTemplateFeatureSettings.cpp +++ b/ApplicationLibCode/Commands/PlotTemplateCommands/RicSaveMultiPlotTemplateFeatureSettings.cpp @@ -101,7 +101,7 @@ void RicSaveMultiPlotTemplateFeatureSettings::defineUiOrdering( QString uiConfig { auto group = uiOrdering.addNewGroup( "Persist Object Names" ); - group->setCollapsedByDefault( true ); + group->setCollapsedByDefault(); group->add( &m_persistObjectNameForWells ); group->add( &m_persistObjectNameGroups ); group->add( &m_persistObjectNameRegions ); diff --git a/ApplicationLibCode/Commands/SummaryPlotCommands/RicSummaryPlotEditorUi.cpp b/ApplicationLibCode/Commands/SummaryPlotCommands/RicSummaryPlotEditorUi.cpp index ef3dc2cae4..2c87798f7c 100644 --- a/ApplicationLibCode/Commands/SummaryPlotCommands/RicSummaryPlotEditorUi.cpp +++ b/ApplicationLibCode/Commands/SummaryPlotCommands/RicSummaryPlotEditorUi.cpp @@ -293,7 +293,7 @@ void RicSummaryPlotEditorUi::defineUiOrdering( QString uiConfigName, caf::PdmUiO uiOrdering.addNewGroupWithKeyword( "Curve Appearance Assignment", RiuSummaryCurveDefinitionKeywords::appearance() ); caf::PdmUiGroup* appearanceSubGroup = appearanceGroup->addNewGroup( "Appearance Type Assignment" ); - appearanceSubGroup->setCollapsedByDefault( true ); + appearanceSubGroup->setCollapsedByDefault(); appearanceSubGroup->add( &m_useAutoAppearanceAssignment ); appearanceSubGroup->add( &m_caseAppearanceType ); @@ -316,7 +316,7 @@ void RicSummaryPlotEditorUi::defineUiOrdering( QString uiConfigName, caf::PdmUiO // Name config caf::PdmUiGroup* autoNameGroup = uiOrdering.addNewGroupWithKeyword( "Plot and Curve Name Configuration", RiuSummaryCurveDefinitionKeywords::nameConfig() ); - autoNameGroup->setCollapsedByDefault( true ); + autoNameGroup->setCollapsedByDefault(); autoNameGroup->add( &m_useAutoPlotTitleProxy ); diff --git a/ApplicationLibCode/ProjectDataModel/CellFilters/RimPolygonFilter.cpp b/ApplicationLibCode/ProjectDataModel/CellFilters/RimPolygonFilter.cpp index b6a3dffbfc..301946ca7b 100644 --- a/ApplicationLibCode/ProjectDataModel/CellFilters/RimPolygonFilter.cpp +++ b/ApplicationLibCode/ProjectDataModel/CellFilters/RimPolygonFilter.cpp @@ -405,12 +405,12 @@ void RimPolygonFilter::defineUiOrdering( QString uiConfigName, caf::PdmUiOrderin } group2->add( &m_lockPolygonToPlane ); if ( m_lockPolygonToPlane ) group2->add( &m_polygonPlaneDepth ); - group2->setCollapsedByDefault( true ); + group2->setCollapsedByDefault(); auto group3 = uiOrdering.addNewGroup( "Advanced Filter Settings" ); group3->add( &m_enableKFilter ); group3->add( &m_kFilterStr ); - group3->setCollapsedByDefault( true ); + group3->setCollapsedByDefault(); uiOrdering.skipRemainingFields( true ); diff --git a/ApplicationLibCode/ProjectDataModel/CellFilters/RimUserDefinedFilter.cpp b/ApplicationLibCode/ProjectDataModel/CellFilters/RimUserDefinedFilter.cpp index 0952512883..2bfa078da5 100644 --- a/ApplicationLibCode/ProjectDataModel/CellFilters/RimUserDefinedFilter.cpp +++ b/ApplicationLibCode/ProjectDataModel/CellFilters/RimUserDefinedFilter.cpp @@ -64,7 +64,6 @@ void RimUserDefinedFilter::defineUiOrdering( QString uiConfigName, caf::PdmUiOrd RimCellFilter::defineUiOrdering( uiConfigName, uiOrdering ); auto group = uiOrdering.addNewGroup( QString( "Cell Indexes (I J K) to " ) + modeString() ); - group->setCollapsedByDefault( false ); group->add( &m_individualCellIndices ); uiOrdering.skipRemainingFields( true ); diff --git a/ApplicationLibCode/ProjectDataModel/Completions/RimEllipseFractureTemplate.cpp b/ApplicationLibCode/ProjectDataModel/Completions/RimEllipseFractureTemplate.cpp index dd96d7ae5e..1a27996b75 100644 --- a/ApplicationLibCode/ProjectDataModel/Completions/RimEllipseFractureTemplate.cpp +++ b/ApplicationLibCode/ProjectDataModel/Completions/RimEllipseFractureTemplate.cpp @@ -476,7 +476,7 @@ void RimEllipseFractureTemplate::defineUiOrdering( QString uiConfigName, caf::Pd { caf::PdmUiGroup* group = uiOrdering.addNewGroup( "Fracture Truncation" ); - group->setCollapsedByDefault( true ); + group->setCollapsedByDefault(); m_fractureContainment()->uiOrdering( uiConfigName, *group ); } diff --git a/ApplicationLibCode/ProjectDataModel/Completions/RimFishbones.cpp b/ApplicationLibCode/ProjectDataModel/Completions/RimFishbones.cpp index ac44a05850..ae5625a01f 100644 --- a/ApplicationLibCode/ProjectDataModel/Completions/RimFishbones.cpp +++ b/ApplicationLibCode/ProjectDataModel/Completions/RimFishbones.cpp @@ -629,7 +629,7 @@ void RimFishbones::defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& u { caf::PdmUiGroup* mswGroup = uiOrdering.addNewGroup( "Lateral Multi Segment Wells" ); - mswGroup->setCollapsedByDefault( true ); + mswGroup->setCollapsedByDefault(); mswGroup->add( &m_lateralTubingDiameter ); mswGroup->add( &m_lateralOpenHoleRoghnessFactor ); mswGroup->add( &m_lateralTubingRoghnessFactor ); diff --git a/ApplicationLibCode/ProjectDataModel/Completions/RimFractureTemplate.cpp b/ApplicationLibCode/ProjectDataModel/Completions/RimFractureTemplate.cpp index d9947f2c6b..6d64181f6a 100644 --- a/ApplicationLibCode/ProjectDataModel/Completions/RimFractureTemplate.cpp +++ b/ApplicationLibCode/ProjectDataModel/Completions/RimFractureTemplate.cpp @@ -366,7 +366,7 @@ void RimFractureTemplate::defineUiOrdering( QString uiConfigName, caf::PdmUiOrde { auto group = uiOrdering.addNewGroup( "Sensitivity Scale Factors" ); - group->setCollapsedByDefault( true ); + group->setCollapsedByDefault(); group->add( &m_heightScaleFactor ); group->add( &m_halfLengthScaleFactor ); group->add( &m_dFactorScaleFactor ); @@ -414,7 +414,7 @@ void RimFractureTemplate::defineUiOrdering( QString uiConfigName, caf::PdmUiOrde { auto group = nonDarcyFlowGroup->addNewGroup( "D Factor Details" ); - group->setCollapsedByDefault( true ); + group->setCollapsedByDefault(); group->add( &m_dFactorSummaryText ); } } diff --git a/ApplicationLibCode/ProjectDataModel/Completions/RimMeshFractureTemplate.cpp b/ApplicationLibCode/ProjectDataModel/Completions/RimMeshFractureTemplate.cpp index 0999df58b6..6749a12fd9 100644 --- a/ApplicationLibCode/ProjectDataModel/Completions/RimMeshFractureTemplate.cpp +++ b/ApplicationLibCode/ProjectDataModel/Completions/RimMeshFractureTemplate.cpp @@ -489,7 +489,7 @@ void RimMeshFractureTemplate::defineUiOrdering( QString uiConfigName, caf::PdmUi { caf::PdmUiGroup* group = uiOrdering.addNewGroup( "Fracture Truncation" ); - group->setCollapsedByDefault( true ); + group->setCollapsedByDefault(); m_fractureContainment()->uiOrdering( uiConfigName, *group ); } diff --git a/ApplicationLibCode/ProjectDataModel/Completions/RimWellPathAicdParameters.cpp b/ApplicationLibCode/ProjectDataModel/Completions/RimWellPathAicdParameters.cpp index f1b578ab9b..65f0e57cb2 100644 --- a/ApplicationLibCode/ProjectDataModel/Completions/RimWellPathAicdParameters.cpp +++ b/ApplicationLibCode/ProjectDataModel/Completions/RimWellPathAicdParameters.cpp @@ -181,7 +181,7 @@ void RimWellPathAicdParameters::defineUiOrdering( QString uiConfigName, caf::Pdm additionalGroup->add( &m_aicdParameterFields[(AICDParameters)i] ); m_aicdParameterFields[(AICDParameters)i].uiCapability()->setUiReadOnly( readOnly ); } - additionalGroup->setCollapsedByDefault( true ); + additionalGroup->setCollapsedByDefault(); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/Faults/RimFaultInViewCollection.cpp b/ApplicationLibCode/ProjectDataModel/Faults/RimFaultInViewCollection.cpp index 5e26badf1a..bf0d3d5164 100644 --- a/ApplicationLibCode/ProjectDataModel/Faults/RimFaultInViewCollection.cpp +++ b/ApplicationLibCode/ProjectDataModel/Faults/RimFaultInViewCollection.cpp @@ -296,14 +296,14 @@ void RimFaultInViewCollection::uiOrderingFaults( QString uiConfigName, caf::PdmU showOppositeFaultFaces.uiCapability()->setUiReadOnly( isGridVizMode ); caf::PdmUiGroup* ffviz = uiOrdering.addNewGroup( "Fault Face Visibility" ); - ffviz->setCollapsedByDefault( true ); + ffviz->setCollapsedByDefault(); ffviz->add( &showFaultFaces ); ffviz->add( &showOppositeFaultFaces ); ffviz->add( &faultResult ); ffviz->add( &m_onlyShowWithNeighbor ); caf::PdmUiGroup* nncViz = uiOrdering.addNewGroup( "NNC Visibility" ); - nncViz->setCollapsedByDefault( true ); + nncViz->setCollapsedByDefault(); nncViz->add( &showNNCs ); nncViz->add( &hideNncsWhenNoResultIsAvailable ); } diff --git a/ApplicationLibCode/ProjectDataModel/Flow/RimWellPltPlot.cpp b/ApplicationLibCode/ProjectDataModel/Flow/RimWellPltPlot.cpp index 821c646f6b..559e403232 100644 --- a/ApplicationLibCode/ProjectDataModel/Flow/RimWellPltPlot.cpp +++ b/ApplicationLibCode/ProjectDataModel/Flow/RimWellPltPlot.cpp @@ -978,7 +978,7 @@ void RimWellPltPlot::defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrderingForDepthAxis( uiConfigName, *depthGroup ); caf::PdmUiGroup* plotLayoutGroup = uiOrdering.addNewGroup( "Plot Layout" ); - plotLayoutGroup->setCollapsedByDefault( true ); + plotLayoutGroup->setCollapsedByDefault(); RimWellLogPlot::uiOrderingForAutoName( uiConfigName, *plotLayoutGroup ); RimWellLogPlot::uiOrderingForPlotLayout( uiConfigName, *plotLayoutGroup ); } diff --git a/ApplicationLibCode/ProjectDataModel/Flow/RimWellRftPlot.cpp b/ApplicationLibCode/ProjectDataModel/Flow/RimWellRftPlot.cpp index 545ea821d8..fceb6b76cb 100644 --- a/ApplicationLibCode/ProjectDataModel/Flow/RimWellRftPlot.cpp +++ b/ApplicationLibCode/ProjectDataModel/Flow/RimWellRftPlot.cpp @@ -975,7 +975,7 @@ void RimWellRftPlot::defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrderingForDepthAxis( uiConfigName, *depthGroup ); caf::PdmUiGroup* plotLayoutGroup = uiOrdering.addNewGroup( "Plot Layout" ); - plotLayoutGroup->setCollapsedByDefault( true ); + plotLayoutGroup->setCollapsedByDefault(); RimWellLogPlot::uiOrderingForAutoName( uiConfigName, *plotLayoutGroup ); RimWellLogPlot::uiOrderingForPlotLayout( uiConfigName, *plotLayoutGroup ); plotLayoutGroup->add( &m_depthOrientation ); diff --git a/ApplicationLibCode/ProjectDataModel/GeoMech/RimGeoMechCase.cpp b/ApplicationLibCode/ProjectDataModel/GeoMech/RimGeoMechCase.cpp index bacb0a0d63..1b7bd744e9 100644 --- a/ApplicationLibCode/ProjectDataModel/GeoMech/RimGeoMechCase.cpp +++ b/ApplicationLibCode/ProjectDataModel/GeoMech/RimGeoMechCase.cpp @@ -1140,7 +1140,7 @@ void RimGeoMechCase::defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& shearSlipIndicatorGroup->add( &m_waterDensityShearSlipIndicator ); caf::PdmUiGroup* timeStepFilterGroup = uiOrdering.addNewGroup( "Time Step Filter" ); - timeStepFilterGroup->setCollapsedByDefault( true ); + timeStepFilterGroup->setCollapsedByDefault(); m_timeStepFilter->uiOrdering( uiConfigName, *timeStepFilterGroup ); } diff --git a/ApplicationLibCode/ProjectDataModel/Intersections/RimExtrudedCurveIntersection.cpp b/ApplicationLibCode/ProjectDataModel/Intersections/RimExtrudedCurveIntersection.cpp index 81e86a44b1..76d81eef2b 100644 --- a/ApplicationLibCode/ProjectDataModel/Intersections/RimExtrudedCurveIntersection.cpp +++ b/ApplicationLibCode/ProjectDataModel/Intersections/RimExtrudedCurveIntersection.cpp @@ -528,7 +528,7 @@ void RimExtrudedCurveIntersection::defineUiOrdering( QString uiConfigName, caf:: } caf::PdmUiGroup* optionsGroup = uiOrdering.addNewGroup( "Options" ); - optionsGroup->setCollapsedByDefault( true ); + optionsGroup->setCollapsedByDefault(); if ( type() == CrossSectionEnum::CS_AZIMUTHLINE ) { diff --git a/ApplicationLibCode/ProjectDataModel/Intersections/RimIntersection.cpp b/ApplicationLibCode/ProjectDataModel/Intersections/RimIntersection.cpp index 6cc38af465..61c59b6e59 100644 --- a/ApplicationLibCode/ProjectDataModel/Intersections/RimIntersection.cpp +++ b/ApplicationLibCode/ProjectDataModel/Intersections/RimIntersection.cpp @@ -155,7 +155,7 @@ void RimIntersection::defineSeparateDataSourceUi( QString uiConfigName, caf::Pdm caf::PdmUiGroup* separateResultsGroup = uiOrdering.addNewGroupWithKeyword( "Result Reference" + inactiveText, "SeparateResultReference" ); - separateResultsGroup->setCollapsedByDefault( true ); + separateResultsGroup->setCollapsedByDefault(); separateResultsGroup->add( &m_useSeparateDataSource ); separateResultsGroup->add( &m_separateDataSource ); m_separateDataSource.uiCapability()->setUiReadOnly( !m_useSeparateDataSource() ); diff --git a/ApplicationLibCode/ProjectDataModel/RimEclipseContourMapProjection.cpp b/ApplicationLibCode/ProjectDataModel/RimEclipseContourMapProjection.cpp index 9fedcb3128..ef48a47059 100644 --- a/ApplicationLibCode/ProjectDataModel/RimEclipseContourMapProjection.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimEclipseContourMapProjection.cpp @@ -555,7 +555,7 @@ void RimEclipseContourMapProjection::defineUiOrdering( QString uiConfigName, caf caf::PdmUiGroup* weightingGroup = uiOrdering.addNewGroup( "Mean Weighting Options" ); weightingGroup->add( &m_weightByParameter ); - weightingGroup->setCollapsedByDefault( true ); + weightingGroup->setCollapsedByDefault(); m_weightByParameter.uiCapability()->setUiReadOnly( !isMeanResult() ); if ( !isMeanResult() ) diff --git a/ApplicationLibCode/ProjectDataModel/RimEclipseResultCase.cpp b/ApplicationLibCode/ProjectDataModel/RimEclipseResultCase.cpp index d6008141e2..5a1748312e 100644 --- a/ApplicationLibCode/ProjectDataModel/RimEclipseResultCase.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimEclipseResultCase.cpp @@ -605,7 +605,7 @@ void RimEclipseResultCase::defineUiOrdering( QString uiConfigName, caf::PdmUiOrd eclipseCaseData()->results( RiaDefines::PorosityModelType::MATRIX_MODEL )->maxTimeStepCount() > 0 ) { auto group1 = uiOrdering.addNewGroup( "Time Step Filter" ); - group1->setCollapsedByDefault( true ); + group1->setCollapsedByDefault(); m_timeStepFilter->uiOrdering( uiConfigName, *group1 ); } } diff --git a/ApplicationLibCode/ProjectDataModel/RimGridTimeHistoryCurve.cpp b/ApplicationLibCode/ProjectDataModel/RimGridTimeHistoryCurve.cpp index 40fae50a12..969bc57b85 100644 --- a/ApplicationLibCode/ProjectDataModel/RimGridTimeHistoryCurve.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimGridTimeHistoryCurve.cpp @@ -589,7 +589,7 @@ void RimGridTimeHistoryCurve::defineUiOrdering( QString uiConfigName, caf::PdmUi RimPlotCurve::appearanceUiOrdering( *appearanceGroup ); caf::PdmUiGroup* nameGroup = uiOrdering.addNewGroup( "Curve Name" ); - nameGroup->setCollapsedByDefault( true ); + nameGroup->setCollapsedByDefault(); nameGroup->add( &m_showLegend ); RimPlotCurve::curveNameUiOrdering( *nameGroup ); } diff --git a/ApplicationLibCode/ProjectDataModel/RimSimWellInViewCollection.cpp b/ApplicationLibCode/ProjectDataModel/RimSimWellInViewCollection.cpp index c428dfae2f..938760a070 100644 --- a/ApplicationLibCode/ProjectDataModel/RimSimWellInViewCollection.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimSimWellInViewCollection.cpp @@ -680,7 +680,7 @@ void RimSimWellInViewCollection::defineUiOrdering( QString uiConfigName, caf::Pd sizeScalingGroup->add( &spheresScaleFactor ); caf::PdmUiGroup* colorGroup = uiOrdering.addNewGroup( "Colors" ); - colorGroup->setCollapsedByDefault( true ); + colorGroup->setCollapsedByDefault(); colorGroup->add( &showConnectionStatusColors ); colorGroup->add( &wellLabelColor ); colorGroup->add( &m_wellPipeColors ); @@ -696,7 +696,7 @@ void RimSimWellInViewCollection::defineUiOrdering( QString uiConfigName, caf::Pd if ( !isContourMap ) { caf::PdmUiGroup* advancedGroup = uiOrdering.addNewGroup( "Advanced" ); - advancedGroup->setCollapsedByDefault( true ); + advancedGroup->setCollapsedByDefault(); advancedGroup->add( &wellCellTransparencyLevel ); advancedGroup->add( &wellHeadPosition ); } diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimAsciiDataCurve.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimAsciiDataCurve.cpp index 993a2280ae..6d83094424 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimAsciiDataCurve.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimAsciiDataCurve.cpp @@ -185,7 +185,7 @@ void RimAsciiDataCurve::defineUiOrdering( QString uiConfigName, caf::PdmUiOrderi RimPlotCurve::appearanceUiOrdering( *appearanceGroup ); caf::PdmUiGroup* nameGroup = uiOrdering.addNewGroup( "Curve Name" ); - nameGroup->setCollapsedByDefault( true ); + nameGroup->setCollapsedByDefault(); nameGroup->add( &m_showLegend ); RimPlotCurve::curveNameUiOrdering( *nameGroup ); diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimEnsembleCurveSet.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimEnsembleCurveSet.cpp index 249b215956..fba0ee477a 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimEnsembleCurveSet.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimEnsembleCurveSet.cpp @@ -856,7 +856,7 @@ void RimEnsembleCurveSet::defineUiOrdering( QString uiConfigName, caf::PdmUiOrde { caf::PdmUiGroup* nameGroup = uiOrdering.addNewGroup( "Curve Name" ); - nameGroup->setCollapsedByDefault( true ); + nameGroup->setCollapsedByDefault(); nameGroup->add( &m_isUsingAutoName ); if ( m_isUsingAutoName ) { diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCurve.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCurve.cpp index d151c45714..1ba89a948d 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCurve.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCurve.cpp @@ -879,7 +879,7 @@ void RimSummaryCurve::defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering RimPlotCurve::appearanceUiOrdering( *appearanceGroup ); caf::PdmUiGroup* nameGroup = uiOrdering.addNewGroup( "Curve Name" ); - nameGroup->setCollapsedByDefault( true ); + nameGroup->setCollapsedByDefault(); nameGroup->add( &m_showLegend ); RimPlotCurve::curveNameUiOrdering( *nameGroup ); diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCurveAutoName.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCurveAutoName.cpp index 390306632a..bfa7a55184 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCurveAutoName.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCurveAutoName.cpp @@ -446,7 +446,7 @@ void RimSummaryCurveAutoName::defineUiOrdering( QString uiConfigName, caf::PdmUi uiOrdering.add( &m_wellName ); caf::PdmUiGroup& advanced = *( uiOrdering.addNewGroup( "Advanced" ) ); - advanced.setCollapsedByDefault( true ); + advanced.setCollapsedByDefault(); advanced.add( &m_regionNumber ); advanced.add( &m_lgrName ); advanced.add( &m_completion ); diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.cpp index 8c33351516..9ec6e4af23 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.cpp @@ -402,27 +402,27 @@ void RimSummaryMultiPlot::defineUiOrdering( QString uiConfigName, caf::PdmUiOrde plotVisibilityFilterGroup->add( &m_hidePlotsWithValuesBelow ); auto dataSourceGroup = uiOrdering.addNewGroup( "Data Source" ); - dataSourceGroup->setCollapsedByDefault( true ); + dataSourceGroup->setCollapsedByDefault(); m_sourceStepping()->uiOrdering( uiConfigName, *dataSourceGroup ); if ( m_sourceStepping->stepDimension() == SourceSteppingDimension::WELL ) dataSourceGroup->add( &m_allow3DSelectionLink ); auto titlesGroup = uiOrdering.addNewGroup( "Main Plot Settings" ); - titlesGroup->setCollapsedByDefault( true ); + titlesGroup->setCollapsedByDefault(); titlesGroup->add( &m_autoPlotTitle ); titlesGroup->add( &m_showPlotWindowTitle ); titlesGroup->add( &m_plotWindowTitle ); titlesGroup->add( &m_titleFontSize ); auto subPlotSettingsGroup = uiOrdering.addNewGroup( "Sub Plot Settings" ); - subPlotSettingsGroup->setCollapsedByDefault( true ); + subPlotSettingsGroup->setCollapsedByDefault(); subPlotSettingsGroup->add( &m_autoSubPlotTitle ); subPlotSettingsGroup->add( &m_showIndividualPlotTitles ); subPlotSettingsGroup->add( &m_subTitleFontSize ); auto legendsGroup = uiOrdering.addNewGroup( "Legends" ); - legendsGroup->setCollapsedByDefault( true ); + legendsGroup->setCollapsedByDefault(); legendsGroup->add( &m_showPlotLegends ); legendsGroup->add( &m_plotLegendsHorizontal ); legendsGroup->add( &m_legendPosition ); diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryTimeAxisProperties.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryTimeAxisProperties.cpp index 9c6525c699..3ffccd8127 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryTimeAxisProperties.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryTimeAxisProperties.cpp @@ -623,7 +623,7 @@ void RimSummaryTimeAxisProperties::defineUiOrdering( QString uiConfigName, caf:: if ( m_timeMode() == DATE ) { caf::PdmUiGroup* advancedGroup = timeGroup->addNewGroup( "Date/Time Label Format" ); - advancedGroup->setCollapsedByDefault( true ); + advancedGroup->setCollapsedByDefault(); if ( m_automaticDateComponents() || m_dateComponents() != RiaDefines::DateFormatComponents::DATE_FORMAT_NONE ) { advancedGroup->add( &m_dateFormat ); diff --git a/ApplicationLibCode/ProjectDataModel/WellLog/RimEnsembleWellLogCurveSet.cpp b/ApplicationLibCode/ProjectDataModel/WellLog/RimEnsembleWellLogCurveSet.cpp index 758d7e30ba..80e8f3b716 100644 --- a/ApplicationLibCode/ProjectDataModel/WellLog/RimEnsembleWellLogCurveSet.cpp +++ b/ApplicationLibCode/ProjectDataModel/WellLog/RimEnsembleWellLogCurveSet.cpp @@ -484,7 +484,7 @@ void RimEnsembleWellLogCurveSet::defineUiOrdering( QString uiConfigName, caf::Pd { caf::PdmUiGroup* nameGroup = uiOrdering.addNewGroup( "Curve Name" ); - nameGroup->setCollapsedByDefault( true ); + nameGroup->setCollapsedByDefault(); nameGroup->add( &m_isUsingAutoName ); if ( m_isUsingAutoName ) { diff --git a/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogExtractionCurve.cpp b/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogExtractionCurve.cpp index 8b84b92e7e..203f94626e 100644 --- a/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogExtractionCurve.cpp +++ b/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogExtractionCurve.cpp @@ -807,7 +807,7 @@ void RimWellLogExtractionCurve::defineUiOrdering( QString uiConfigName, caf::Pdm RimPlotCurve::appearanceUiOrdering( *appearanceGroup ); caf::PdmUiGroup* nameGroup = uiOrdering.addNewGroup( "Curve Name" ); - nameGroup->setCollapsedByDefault( true ); + nameGroup->setCollapsedByDefault(); nameGroup->add( &m_showLegend ); RimPlotCurve::curveNameUiOrdering( *nameGroup ); diff --git a/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogTrack.cpp b/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogTrack.cpp index ae52bc7bc6..6252788e36 100644 --- a/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogTrack.cpp +++ b/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogTrack.cpp @@ -1923,6 +1923,7 @@ void RimWellLogTrack::defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering uiOrdering.add( &m_colSpan ); caf::PdmUiGroup* annotationGroup = uiOrdering.addNewGroup( "Regions/Annotations" ); + annotationGroup->setCollapsedByDefault(); annotationGroup->add( &m_regionAnnotationType ); annotationGroup->add( &m_regionAnnotationDisplay ); @@ -2373,7 +2374,7 @@ std::vector RimWellLogTrack::visibleCurves() const void RimWellLogTrack::uiOrderingForRftPltFormations( caf::PdmUiOrdering& uiOrdering ) { caf::PdmUiGroup* formationGroup = uiOrdering.addNewGroup( "Zonation/Formation Names" ); - formationGroup->setCollapsedByDefault( true ); + formationGroup->setCollapsedByDefault(); formationGroup->add( &m_regionAnnotationType ); formationGroup->add( &m_regionAnnotationDisplay ); formationGroup->add( &m_formationSource ); diff --git a/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/cafPdmUiGroup.cpp b/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/cafPdmUiGroup.cpp index cb3c9600e2..13c6904eb8 100644 --- a/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/cafPdmUiGroup.cpp +++ b/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/cafPdmUiGroup.cpp @@ -82,9 +82,9 @@ bool PdmUiGroup::isUiGroup() const //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void PdmUiGroup::setCollapsedByDefault( bool doCollapse ) +void PdmUiGroup::setCollapsedByDefault() { - m_isCollapsedByDefault = doCollapse; + m_isCollapsedByDefault = true; } //-------------------------------------------------------------------------------------------------- diff --git a/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/cafPdmUiGroup.h b/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/cafPdmUiGroup.h index 6873520585..3b4e7b7b54 100644 --- a/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/cafPdmUiGroup.h +++ b/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/cafPdmUiGroup.h @@ -56,8 +56,9 @@ public: bool isUiGroup() const override; /// Set this group to be collapsed by default. When the user expands the group, the default no longer has any effect. - void setCollapsedByDefault( bool doCollapse ); - /// Forcifully set the collapsed state of the group, overriding the previous user actions and the default + void setCollapsedByDefault(); + + /// Set the collapsed state of the group, overriding the previous user actions and the default void setCollapsed( bool doCollapse ); void setEnableFrame( bool enableFrame ); From 947de3ffb10d35136273480aadba19b55befe9eb Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Fri, 19 Aug 2022 05:30:25 -0700 Subject: [PATCH 073/129] Simplify access to RimMainPlotCollection * Add current() to RimMainPlotCollection to avoid include of RimProject * Remove "segment" prefix * Reload data when RftCase changes --- .../Application/RiaApplication.cpp | 7 +- .../Application/Tools/RiaExtractionTools.cpp | 10 +-- .../Tools/RiaImportEclipseCaseTools.cpp | 5 +- .../Tools/RiaOptionItemFactory.cpp | 3 +- .../Application/Tools/RiaSummaryTools.cpp | 8 +- .../RicfCreateSaturationPressurePlots.cpp | 2 +- .../RicfExportFlowCharacteristics.cpp | 3 +- .../RicNewStimPlanModelPlotFeature.cpp | 12 +-- .../RicSnapshotAllPlotsToFileFeature.cpp | 2 +- ...ddStoredFlowCharacteristicsPlotFeature.cpp | 47 +++++----- .../RicAddStoredWellAllocationPlotFeature.cpp | 44 ++++------ .../RicShowCumulativePhasePlotFeature.cpp | 6 +- .../RicShowFlowCharacteristicsPlotFeature.cpp | 16 ++-- .../RicShowWellAllocationPlotFeature.cpp | 22 ++--- .../RicCreateGridCrossPlotFeature.cpp | 4 +- ...icCreateSaturationPressurePlotsFeature.cpp | 8 +- .../RicSummaryPlotBuilder.cpp | 19 ++-- .../RicSummaryPlotTemplateTools.cpp | 17 +--- .../Commands/RicCloseObservedDataFeature.cpp | 4 +- ...eEnsembleFractureStatisticsPlotFeature.cpp | 5 +- .../RicCreateEnsembleWellLogFeature.cpp | 2 +- .../RicCreateGridStatisticsPlotFeature.cpp | 5 +- .../Commands/RicCreateTemporaryLgrFeature.cpp | 5 +- .../Commands/RicNewVfpPlotFeature.cpp | 5 +- .../Commands/RicReloadSummaryCaseFeature.cpp | 27 +++--- .../Commands/RicReloadSummaryCaseFeature.h | 3 + ...RicReloadWellPathFormationNamesFeature.cpp | 10 +-- .../RicNewSummaryCrossPlotFeature.cpp | 6 +- .../RicSummaryPlotFeatureImpl.cpp | 5 +- .../WellLogCommands/RicNewPltPlotFeature.cpp | 6 +- .../WellLogCommands/RicNewRftPlotFeature.cpp | 5 +- .../RicNewWellLogPlotFeatureImpl.cpp | 11 +-- ...RicWellPathFormationsImportFileFeature.cpp | 5 +- .../RigFemPartResultsCollection.cpp | 17 +--- .../ProjectDataModel/Flow/RimWellPltPlot.cpp | 2 +- .../GeoMech/RimGeoMechCase.cpp | 13 +-- .../ProjectDataModel/Rim3dView.cpp | 4 +- .../ProjectDataModel/RimEclipseCase.cpp | 24 +----- .../RimMainPlotCollection.cpp | 8 ++ .../ProjectDataModel/RimMainPlotCollection.h | 2 + .../ProjectDataModel/RimProject.cpp | 86 ++++++++++--------- .../ProjectDataModel/RimProject.h | 5 +- .../ProjectDataModel/RimReloadCaseTools.cpp | 58 +------------ .../ProjectDataModel/Summary/RimRftCase.cpp | 37 ++++++++ .../ProjectDataModel/Summary/RimRftCase.h | 7 ++ .../Summary/RimSummaryMultiPlot.cpp | 4 +- .../WellLog/RimWellLogExtractionCurve.cpp | 17 +--- .../WellLog/RimWellLogRftCurve.cpp | 4 +- .../RimWellMeasurementCollection.cpp | 12 +-- .../ProjectDataModel/WellPath/RimWellPath.cpp | 14 +-- .../UserInterface/RiuPlotMainWindow.cpp | 5 +- 51 files changed, 240 insertions(+), 418 deletions(-) diff --git a/ApplicationLibCode/Application/RiaApplication.cpp b/ApplicationLibCode/Application/RiaApplication.cpp index da409da9f5..869ec9af12 100644 --- a/ApplicationLibCode/Application/RiaApplication.cpp +++ b/ApplicationLibCode/Application/RiaApplication.cpp @@ -528,7 +528,7 @@ bool RiaApplication::loadProject( const QString& projectFileName, } { - RimMainPlotCollection* mainPlotColl = m_project->mainPlotCollection(); + RimMainPlotCollection* mainPlotColl = RimMainPlotCollection::current(); mainPlotColl->ensureCalculationIdsAreAssigned(); mainPlotColl->ensureDefaultFlowPlotsAreCreated(); @@ -1532,10 +1532,7 @@ int RiaApplication::launchUnitTestsWithConsole() //-------------------------------------------------------------------------------------------------- void RiaApplication::loadAndUpdatePlotData() { - if ( m_project->mainPlotCollection() ) - { - m_project->mainPlotCollection()->loadDataAndUpdateAllPlots(); - } + RimMainPlotCollection::current()->loadDataAndUpdateAllPlots(); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/Application/Tools/RiaExtractionTools.cpp b/ApplicationLibCode/Application/Tools/RiaExtractionTools.cpp index 85c25cc1f2..9f50065a48 100644 --- a/ApplicationLibCode/Application/Tools/RiaExtractionTools.cpp +++ b/ApplicationLibCode/Application/Tools/RiaExtractionTools.cpp @@ -21,7 +21,6 @@ #include "RigWellPath.h" #include "RimEclipseCase.h" #include "RimMainPlotCollection.h" -#include "RimProject.h" #include "RimSimWellInView.h" #include "RimWellLogPlotCollection.h" @@ -84,12 +83,5 @@ RigEclipseWellLogExtractor* RiaExtractionTools::findOrCreateSimWellExtractor( co //-------------------------------------------------------------------------------------------------- RimWellLogPlotCollection* RiaExtractionTools::wellLogPlotCollection() { - auto proj = RimProject::current(); - if ( !proj ) return nullptr; - - auto plotCollection = proj->mainPlotCollection(); - if ( !plotCollection ) return nullptr; - - auto wellLogPlotCollection = plotCollection->wellLogPlotCollection(); - return wellLogPlotCollection; + return RimMainPlotCollection::current()->wellLogPlotCollection(); } diff --git a/ApplicationLibCode/Application/Tools/RiaImportEclipseCaseTools.cpp b/ApplicationLibCode/Application/Tools/RiaImportEclipseCaseTools.cpp index 211199f370..569e8365c1 100644 --- a/ApplicationLibCode/Application/Tools/RiaImportEclipseCaseTools.cpp +++ b/ApplicationLibCode/Application/Tools/RiaImportEclipseCaseTools.cpp @@ -97,10 +97,7 @@ bool RiaImportEclipseCaseTools::openEclipseCasesFromFile( const QStringList& if ( !openedFiles.empty() ) { - if ( project && project->mainPlotCollection() ) - { - project->mainPlotCollection()->ensureDefaultFlowPlotsAreCreated(); - } + RimMainPlotCollection::current()->ensureDefaultFlowPlotsAreCreated(); } // Import summary cases diff --git a/ApplicationLibCode/Application/Tools/RiaOptionItemFactory.cpp b/ApplicationLibCode/Application/Tools/RiaOptionItemFactory.cpp index 35d3f9f61c..647a0db844 100644 --- a/ApplicationLibCode/Application/Tools/RiaOptionItemFactory.cpp +++ b/ApplicationLibCode/Application/Tools/RiaOptionItemFactory.cpp @@ -22,7 +22,6 @@ #include "RimCase.h" #include "RimEnsembleCurveSet.h" #include "RimMainPlotCollection.h" -#include "RimProject.h" //-------------------------------------------------------------------------------------------------- /// @@ -46,7 +45,7 @@ void RiaOptionItemFactory::appendOptionItemsForEnsembleCurveSets( QListpush_back( caf::PdmOptionItemInfo( "None", nullptr ) ); - RimMainPlotCollection* mainPlotColl = RimProject::current()->mainPlotCollection(); + RimMainPlotCollection* mainPlotColl = RimMainPlotCollection::current(); std::vector ensembleCurveSets; mainPlotColl->descendantsOfType( ensembleCurveSets ); for ( auto ensembleCurveSet : ensembleCurveSets ) diff --git a/ApplicationLibCode/Application/Tools/RiaSummaryTools.cpp b/ApplicationLibCode/Application/Tools/RiaSummaryTools.cpp index 8c43701ea3..9e8e8129db 100644 --- a/ApplicationLibCode/Application/Tools/RiaSummaryTools.cpp +++ b/ApplicationLibCode/Application/Tools/RiaSummaryTools.cpp @@ -49,9 +49,7 @@ //-------------------------------------------------------------------------------------------------- RimSummaryMultiPlotCollection* RiaSummaryTools::summaryMultiPlotCollection() { - RimProject* project = RimProject::current(); - - return project->mainPlotCollection()->summaryMultiPlotCollection(); + return RimMainPlotCollection::current()->summaryMultiPlotCollection(); } //-------------------------------------------------------------------------------------------------- @@ -59,9 +57,7 @@ RimSummaryMultiPlotCollection* RiaSummaryTools::summaryMultiPlotCollection() //-------------------------------------------------------------------------------------------------- RimSummaryCrossPlotCollection* RiaSummaryTools::summaryCrossPlotCollection() { - RimProject* project = RimProject::current(); - - return project->mainPlotCollection()->summaryCrossPlotCollection(); + return RimMainPlotCollection::current()->summaryCrossPlotCollection(); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/CommandFileInterface/RicfCreateSaturationPressurePlots.cpp b/ApplicationLibCode/CommandFileInterface/RicfCreateSaturationPressurePlots.cpp index 970ea54de0..2457d3416e 100644 --- a/ApplicationLibCode/CommandFileInterface/RicfCreateSaturationPressurePlots.cpp +++ b/ApplicationLibCode/CommandFileInterface/RicfCreateSaturationPressurePlots.cpp @@ -91,7 +91,7 @@ caf::PdmScriptResponse RicfCreateSaturationPressurePlots::execute() } } - RimSaturationPressurePlotCollection* collection = project->mainPlotCollection()->saturationPressurePlotCollection(); + RimSaturationPressurePlotCollection* collection = RimMainPlotCollection::current()->saturationPressurePlotCollection(); collection->updateAllRequiredEditors(); RiaGuiApplication::instance()->getOrCreateAndShowMainPlotWindow(); diff --git a/ApplicationLibCode/CommandFileInterface/RicfExportFlowCharacteristics.cpp b/ApplicationLibCode/CommandFileInterface/RicfExportFlowCharacteristics.cpp index 954c246ff1..a3b9b1ef64 100644 --- a/ApplicationLibCode/CommandFileInterface/RicfExportFlowCharacteristics.cpp +++ b/ApplicationLibCode/CommandFileInterface/RicfExportFlowCharacteristics.cpp @@ -27,7 +27,6 @@ #include "RimFlowCharacteristicsPlot.h" #include "RimFlowPlotCollection.h" #include "RimMainPlotCollection.h" -#include "RimProject.h" #include "cafPdmFieldScriptingCapability.h" @@ -88,7 +87,7 @@ caf::PdmScriptResponse RicfExportFlowCharacteristics::execute() exportFileName = exportFolder + "/" + fi.fileName(); } - RimFlowPlotCollection* flowPlotColl = RimProject::current()->mainPlotCollection->flowPlotCollection(); + RimFlowPlotCollection* flowPlotColl = RimMainPlotCollection::current()->flowPlotCollection(); if ( flowPlotColl ) { RimFlowCharacteristicsPlot* plot = flowPlotColl->defaultFlowCharacteristicsPlot(); diff --git a/ApplicationLibCode/Commands/CompletionCommands/RicNewStimPlanModelPlotFeature.cpp b/ApplicationLibCode/Commands/CompletionCommands/RicNewStimPlanModelPlotFeature.cpp index a446daaa2b..6674d07271 100644 --- a/ApplicationLibCode/Commands/CompletionCommands/RicNewStimPlanModelPlotFeature.cpp +++ b/ApplicationLibCode/Commands/CompletionCommands/RicNewStimPlanModelPlotFeature.cpp @@ -37,7 +37,6 @@ #include "RimFaciesProperties.h" #include "RimMainPlotCollection.h" #include "RimModeledWellPath.h" -#include "RimProject.h" #include "RimStimPlanModel.h" #include "RimStimPlanModelCurve.h" #include "RimStimPlanModelPlot.h" @@ -469,16 +468,7 @@ RimStimPlanModelPlot* RicNewStimPlanModelPlotFeature::createStimPlanModelPlot( b //-------------------------------------------------------------------------------------------------- RimStimPlanModelPlotCollection* RicNewStimPlanModelPlotFeature::stimPlanModelPlotCollection() { - RimProject* project = RiaApplication::instance()->project(); - CVF_ASSERT( project ); - - RimMainPlotCollection* mainPlotColl = project->mainPlotCollection(); - CVF_ASSERT( mainPlotColl ); - - RimStimPlanModelPlotCollection* stimPlanModelPlotColl = mainPlotColl->stimPlanModelPlotCollection(); - CVF_ASSERT( stimPlanModelPlotColl ); - - return mainPlotColl->stimPlanModelPlotCollection(); + return RimMainPlotCollection::current()->stimPlanModelPlotCollection(); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/Commands/ExportCommands/RicSnapshotAllPlotsToFileFeature.cpp b/ApplicationLibCode/Commands/ExportCommands/RicSnapshotAllPlotsToFileFeature.cpp index 737184d716..becdce76f3 100644 --- a/ApplicationLibCode/Commands/ExportCommands/RicSnapshotAllPlotsToFileFeature.cpp +++ b/ApplicationLibCode/Commands/ExportCommands/RicSnapshotAllPlotsToFileFeature.cpp @@ -87,7 +87,7 @@ void RicSnapshotAllPlotsToFileFeature::exportSnapshotOfPlotsIntoFolder( const QS const QString absSnapshotPath = snapshotPath.absolutePath(); std::vector viewWindows; - proj->mainPlotCollection()->descendantsIncludingThisOfType( viewWindows ); + RimMainPlotCollection::current()->descendantsIncludingThisOfType( viewWindows ); for ( auto viewWindow : viewWindows ) { diff --git a/ApplicationLibCode/Commands/FlowCommands/RicAddStoredFlowCharacteristicsPlotFeature.cpp b/ApplicationLibCode/Commands/FlowCommands/RicAddStoredFlowCharacteristicsPlotFeature.cpp index 4c71357e59..18bcd70f6c 100644 --- a/ApplicationLibCode/Commands/FlowCommands/RicAddStoredFlowCharacteristicsPlotFeature.cpp +++ b/ApplicationLibCode/Commands/FlowCommands/RicAddStoredFlowCharacteristicsPlotFeature.cpp @@ -21,7 +21,6 @@ #include "RimFlowCharacteristicsPlot.h" #include "RimFlowPlotCollection.h" #include "RimMainPlotCollection.h" -#include "RimProject.h" #include "RiuPlotMainWindowTools.h" @@ -38,18 +37,15 @@ CAF_CMD_SOURCE_INIT( RicAddStoredFlowCharacteristicsPlotFeature, "RicAddStoredFl //-------------------------------------------------------------------------------------------------- bool RicAddStoredFlowCharacteristicsPlotFeature::isCommandEnabled() { - if ( RimProject::current() ) + RimFlowPlotCollection* flowPlotColl = RimMainPlotCollection::current()->flowPlotCollection(); + if ( flowPlotColl ) { - RimFlowPlotCollection* flowPlotColl = RimProject::current()->mainPlotCollection->flowPlotCollection(); - if ( flowPlotColl ) - { - RimFlowCharacteristicsPlot* flowCharacteristicsPlot = - dynamic_cast( caf::SelectionManager::instance()->selectedItem() ); + RimFlowCharacteristicsPlot* flowCharacteristicsPlot = + dynamic_cast( caf::SelectionManager::instance()->selectedItem() ); - if ( flowPlotColl->defaultFlowCharacteristicsPlot() == flowCharacteristicsPlot ) - { - return true; - } + if ( flowPlotColl->defaultFlowCharacteristicsPlot() == flowCharacteristicsPlot ) + { + return true; } } @@ -61,28 +57,25 @@ bool RicAddStoredFlowCharacteristicsPlotFeature::isCommandEnabled() //-------------------------------------------------------------------------------------------------- void RicAddStoredFlowCharacteristicsPlotFeature::onActionTriggered( bool isChecked ) { - if ( RimProject::current() ) + RimFlowPlotCollection* flowPlotColl = RimMainPlotCollection::current()->flowPlotCollection(); + if ( flowPlotColl ) { - RimFlowPlotCollection* flowPlotColl = RimProject::current()->mainPlotCollection->flowPlotCollection(); - if ( flowPlotColl ) - { - RimFlowCharacteristicsPlot* sourceObject = - dynamic_cast( caf::SelectionManager::instance()->selectedItem() ); + RimFlowCharacteristicsPlot* sourceObject = + dynamic_cast( caf::SelectionManager::instance()->selectedItem() ); - RimFlowCharacteristicsPlot* flowCharacteristicsPlot = dynamic_cast( - sourceObject->copyByXmlSerialization( caf::PdmDefaultObjectFactory::instance() ) ); - CVF_ASSERT( flowCharacteristicsPlot ); + RimFlowCharacteristicsPlot* flowCharacteristicsPlot = dynamic_cast( + sourceObject->copyByXmlSerialization( caf::PdmDefaultObjectFactory::instance() ) ); + CVF_ASSERT( flowCharacteristicsPlot ); - flowPlotColl->addFlowCharacteristicsPlotToStoredPlots( flowCharacteristicsPlot ); - flowCharacteristicsPlot->resolveReferencesRecursively(); + flowPlotColl->addFlowCharacteristicsPlotToStoredPlots( flowCharacteristicsPlot ); + flowCharacteristicsPlot->resolveReferencesRecursively(); - flowCharacteristicsPlot->loadDataAndUpdate(); + flowCharacteristicsPlot->loadDataAndUpdate(); - flowPlotColl->updateConnectedEditors(); + flowPlotColl->updateConnectedEditors(); - RiuPlotMainWindowTools::showPlotMainWindow(); - RiuPlotMainWindowTools::onObjectAppended( flowCharacteristicsPlot ); - } + RiuPlotMainWindowTools::showPlotMainWindow(); + RiuPlotMainWindowTools::onObjectAppended( flowCharacteristicsPlot ); } } diff --git a/ApplicationLibCode/Commands/FlowCommands/RicAddStoredWellAllocationPlotFeature.cpp b/ApplicationLibCode/Commands/FlowCommands/RicAddStoredWellAllocationPlotFeature.cpp index f1297e64e6..045f966eb1 100644 --- a/ApplicationLibCode/Commands/FlowCommands/RicAddStoredWellAllocationPlotFeature.cpp +++ b/ApplicationLibCode/Commands/FlowCommands/RicAddStoredWellAllocationPlotFeature.cpp @@ -38,18 +38,15 @@ CAF_CMD_SOURCE_INIT( RicAddStoredWellAllocationPlotFeature, "RicAddStoredWellAll //-------------------------------------------------------------------------------------------------- bool RicAddStoredWellAllocationPlotFeature::isCommandEnabled() { - if ( RimProject::current() ) + RimFlowPlotCollection* flowPlotColl = RimMainPlotCollection::current()->flowPlotCollection(); + if ( flowPlotColl ) { - RimFlowPlotCollection* flowPlotColl = RimProject::current()->mainPlotCollection->flowPlotCollection(); - if ( flowPlotColl ) - { - RimWellAllocationPlot* wellAllocationPlot = - dynamic_cast( caf::SelectionManager::instance()->selectedItem() ); + RimWellAllocationPlot* wellAllocationPlot = + dynamic_cast( caf::SelectionManager::instance()->selectedItem() ); - if ( flowPlotColl->defaultWellAllocPlot() == wellAllocationPlot ) - { - return true; - } + if ( flowPlotColl->defaultWellAllocPlot() == wellAllocationPlot ) + { + return true; } } @@ -61,28 +58,25 @@ bool RicAddStoredWellAllocationPlotFeature::isCommandEnabled() //-------------------------------------------------------------------------------------------------- void RicAddStoredWellAllocationPlotFeature::onActionTriggered( bool isChecked ) { - if ( RimProject::current() ) + RimFlowPlotCollection* flowPlotColl = RimMainPlotCollection::current()->flowPlotCollection(); + if ( flowPlotColl ) { - RimFlowPlotCollection* flowPlotColl = RimProject::current()->mainPlotCollection->flowPlotCollection(); - if ( flowPlotColl ) - { - RimWellAllocationPlot* sourceObject = - dynamic_cast( caf::SelectionManager::instance()->selectedItem() ); + RimWellAllocationPlot* sourceObject = + dynamic_cast( caf::SelectionManager::instance()->selectedItem() ); - RimWellAllocationPlot* wellAllocationPlot = dynamic_cast( - sourceObject->copyByXmlSerialization( caf::PdmDefaultObjectFactory::instance() ) ); + RimWellAllocationPlot* wellAllocationPlot = dynamic_cast( + sourceObject->copyByXmlSerialization( caf::PdmDefaultObjectFactory::instance() ) ); - CVF_ASSERT( wellAllocationPlot ); + CVF_ASSERT( wellAllocationPlot ); - flowPlotColl->addWellAllocPlotToStoredPlots( wellAllocationPlot ); - wellAllocationPlot->resolveReferencesRecursively(); + flowPlotColl->addWellAllocPlotToStoredPlots( wellAllocationPlot ); + wellAllocationPlot->resolveReferencesRecursively(); - wellAllocationPlot->loadDataAndUpdate(); + wellAllocationPlot->loadDataAndUpdate(); - flowPlotColl->updateConnectedEditors(); + flowPlotColl->updateConnectedEditors(); - RiuPlotMainWindowTools::onObjectAppended( wellAllocationPlot ); - } + RiuPlotMainWindowTools::onObjectAppended( wellAllocationPlot ); } } diff --git a/ApplicationLibCode/Commands/FlowCommands/RicShowCumulativePhasePlotFeature.cpp b/ApplicationLibCode/Commands/FlowCommands/RicShowCumulativePhasePlotFeature.cpp index 24be96ce2f..e197d65675 100644 --- a/ApplicationLibCode/Commands/FlowCommands/RicShowCumulativePhasePlotFeature.cpp +++ b/ApplicationLibCode/Commands/FlowCommands/RicShowCumulativePhasePlotFeature.cpp @@ -22,7 +22,6 @@ #include "RimEclipseView.h" #include "RimFlowPlotCollection.h" #include "RimMainPlotCollection.h" -#include "RimProject.h" #include "RimSimWellInView.h" #include "RimWellAllocationPlot.h" #include "RimWellDistributionPlotCollection.h" @@ -72,10 +71,7 @@ void RicShowCumulativePhasePlotFeature::onActionTriggered( bool isChecked ) } } - RimProject* proj = RimProject::current(); - if ( !proj ) return; - - RimFlowPlotCollection* flowPlotColl = proj->mainPlotCollection()->flowPlotCollection(); + RimFlowPlotCollection* flowPlotColl = RimMainPlotCollection::current()->flowPlotCollection(); if ( !flowPlotColl ) return; RimWellDistributionPlotCollection* wdp = flowPlotColl->wellDistributionPlotCollection(); diff --git a/ApplicationLibCode/Commands/FlowCommands/RicShowFlowCharacteristicsPlotFeature.cpp b/ApplicationLibCode/Commands/FlowCommands/RicShowFlowCharacteristicsPlotFeature.cpp index 7e2ea1e591..bb3a5c60b9 100644 --- a/ApplicationLibCode/Commands/FlowCommands/RicShowFlowCharacteristicsPlotFeature.cpp +++ b/ApplicationLibCode/Commands/FlowCommands/RicShowFlowCharacteristicsPlotFeature.cpp @@ -30,7 +30,6 @@ #include "RimFlowDiagSolution.h" #include "RimFlowPlotCollection.h" #include "RimMainPlotCollection.h" -#include "RimProject.h" #include "RiuPlotMainWindowTools.h" @@ -86,18 +85,15 @@ void RicShowFlowCharacteristicsPlotFeature::onActionTriggered( bool isChecked ) } } - if ( RimProject::current() ) + RimFlowPlotCollection* flowPlotColl = RimMainPlotCollection::current()->flowPlotCollection(); + if ( flowPlotColl ) { - RimFlowPlotCollection* flowPlotColl = RimProject::current()->mainPlotCollection->flowPlotCollection(); - if ( flowPlotColl ) - { - RiuPlotMainWindowTools::showPlotMainWindow(); + RiuPlotMainWindowTools::showPlotMainWindow(); - flowPlotColl->defaultFlowCharacteristicsPlot()->setFromFlowSolution( eclCase->defaultFlowDiagSolution() ); - flowPlotColl->defaultFlowCharacteristicsPlot()->updateConnectedEditors(); + flowPlotColl->defaultFlowCharacteristicsPlot()->setFromFlowSolution( eclCase->defaultFlowDiagSolution() ); + flowPlotColl->defaultFlowCharacteristicsPlot()->updateConnectedEditors(); - RiuPlotMainWindowTools::onObjectAppended( flowPlotColl->defaultFlowCharacteristicsPlot() ); - } + RiuPlotMainWindowTools::onObjectAppended( flowPlotColl->defaultFlowCharacteristicsPlot() ); } } } diff --git a/ApplicationLibCode/Commands/FlowCommands/RicShowWellAllocationPlotFeature.cpp b/ApplicationLibCode/Commands/FlowCommands/RicShowWellAllocationPlotFeature.cpp index 2acbcf571f..cd11add6a0 100644 --- a/ApplicationLibCode/Commands/FlowCommands/RicShowWellAllocationPlotFeature.cpp +++ b/ApplicationLibCode/Commands/FlowCommands/RicShowWellAllocationPlotFeature.cpp @@ -22,19 +22,18 @@ #include "Rim3dView.h" #include "RimEclipseResultCase.h" +#include "RimEclipseView.h" #include "RimFlowPlotCollection.h" #include "RimMainPlotCollection.h" -#include "RimProject.h" #include "RimSimWellInView.h" +#include "RimSimWellInViewCollection.h" #include "RimWellAllocationPlot.h" +#include "RimWellPath.h" #include "RiuPlotMainWindowTools.h" #include "cafSelectionManager.h" -#include "RimEclipseView.h" -#include "RimSimWellInViewCollection.h" -#include "RimWellPath.h" #include CAF_CMD_SOURCE_INIT( RicShowWellAllocationPlotFeature, "RicShowWellAllocationPlotFeature" ); @@ -103,17 +102,14 @@ void RicShowWellAllocationPlotFeature::onActionTriggered( bool isChecked ) else return; - if ( RimProject::current() ) + RimFlowPlotCollection* flowPlotColl = RimMainPlotCollection::current()->flowPlotCollection(); + if ( flowPlotColl ) { - RimFlowPlotCollection* flowPlotColl = RimProject::current()->mainPlotCollection->flowPlotCollection(); - if ( flowPlotColl ) - { - flowPlotColl->defaultWellAllocPlot()->setFromSimulationWell( simWell ); - flowPlotColl->defaultWellAllocPlot()->updateConnectedEditors(); + flowPlotColl->defaultWellAllocPlot()->setFromSimulationWell( simWell ); + flowPlotColl->defaultWellAllocPlot()->updateConnectedEditors(); - RiuPlotMainWindowTools::showPlotMainWindow(); - RiuPlotMainWindowTools::onObjectAppended( flowPlotColl->defaultWellAllocPlot() ); - } + RiuPlotMainWindowTools::showPlotMainWindow(); + RiuPlotMainWindowTools::onObjectAppended( flowPlotColl->defaultWellAllocPlot() ); } } diff --git a/ApplicationLibCode/Commands/GridCrossPlotCommands/RicCreateGridCrossPlotFeature.cpp b/ApplicationLibCode/Commands/GridCrossPlotCommands/RicCreateGridCrossPlotFeature.cpp index eeed0ccaf7..2c122d7907 100644 --- a/ApplicationLibCode/Commands/GridCrossPlotCommands/RicCreateGridCrossPlotFeature.cpp +++ b/ApplicationLibCode/Commands/GridCrossPlotCommands/RicCreateGridCrossPlotFeature.cpp @@ -25,7 +25,6 @@ #include "RimGridCrossPlotDataSet.h" #include "RimGridView.h" #include "RimMainPlotCollection.h" -#include "RimProject.h" #include "RiuPlotMainWindowTools.h" #include "RiuViewer.h" @@ -50,12 +49,11 @@ bool RicCreateGridCrossPlotFeature::isCommandEnabled() //-------------------------------------------------------------------------------------------------- void RicCreateGridCrossPlotFeature::onActionTriggered( bool isChecked ) { - RimProject* project = RimProject::current(); RimGridCrossPlotCollection* collection = caf::SelectionManager::instance()->selectedItemAncestorOfType(); if ( !collection ) { - collection = project->mainPlotCollection()->gridCrossPlotCollection(); + collection = RimMainPlotCollection::current()->gridCrossPlotCollection(); } RimGridCrossPlot* plot = collection->createGridCrossPlot(); RimGridCrossPlotDataSet* dataSet = plot->createDataSet(); diff --git a/ApplicationLibCode/Commands/GridCrossPlotCommands/RicCreateSaturationPressurePlotsFeature.cpp b/ApplicationLibCode/Commands/GridCrossPlotCommands/RicCreateSaturationPressurePlotsFeature.cpp index a325fab989..09ecfcfc42 100644 --- a/ApplicationLibCode/Commands/GridCrossPlotCommands/RicCreateSaturationPressurePlotsFeature.cpp +++ b/ApplicationLibCode/Commands/GridCrossPlotCommands/RicCreateSaturationPressurePlotsFeature.cpp @@ -58,9 +58,7 @@ std::vector return plots; } - RimProject* project = RimProject::current(); - - RimSaturationPressurePlotCollection* collection = project->mainPlotCollection()->saturationPressurePlotCollection(); + RimSaturationPressurePlotCollection* collection = RimMainPlotCollection::current()->saturationPressurePlotCollection(); if ( eclipseResultCase && eclipseResultCase->ensureReservoirCaseIsOpen() ) { @@ -123,9 +121,7 @@ bool RicCreateSaturationPressurePlotsFeature::isCommandEnabled() //-------------------------------------------------------------------------------------------------- void RicCreateSaturationPressurePlotsFeature::onActionTriggered( bool isChecked ) { - RimProject* project = RimProject::current(); - - RimSaturationPressurePlotCollection* collection = project->mainPlotCollection()->saturationPressurePlotCollection(); + RimSaturationPressurePlotCollection* collection = RimMainPlotCollection::current()->saturationPressurePlotCollection(); std::vector eclipseCases; { diff --git a/ApplicationLibCode/Commands/PlotBuilderCommands/RicSummaryPlotBuilder.cpp b/ApplicationLibCode/Commands/PlotBuilderCommands/RicSummaryPlotBuilder.cpp index 0cec5d2ae8..22fdfc2e1f 100644 --- a/ApplicationLibCode/Commands/PlotBuilderCommands/RicSummaryPlotBuilder.cpp +++ b/ApplicationLibCode/Commands/PlotBuilderCommands/RicSummaryPlotBuilder.cpp @@ -36,7 +36,6 @@ #include "RimMultiPlot.h" #include "RimMultiPlotCollection.h" #include "RimPlot.h" -#include "RimProject.h" #include "RimSaturationPressurePlot.h" #include "RimSummaryCase.h" #include "RimSummaryCaseCollection.h" @@ -327,8 +326,7 @@ std::vector RicSummaryPlotBuilder::duplicateSummaryPlots( const //-------------------------------------------------------------------------------------------------- RimMultiPlot* RicSummaryPlotBuilder::createAndAppendMultiPlot( const std::vector& plots ) { - RimProject* project = RimProject::current(); - RimMultiPlotCollection* plotCollection = project->mainPlotCollection()->multiPlotCollection(); + RimMultiPlotCollection* plotCollection = RimMainPlotCollection::current()->multiPlotCollection(); auto* plotWindow = new RimMultiPlot; plotWindow->setMultiPlotTitle( QString( "Multi Plot %1" ).arg( plotCollection->multiPlots().size() + 1 ) ); @@ -358,8 +356,7 @@ RimMultiPlot* RicSummaryPlotBuilder::createAndAppendMultiPlot( const std::vector RimSummaryMultiPlot* RicSummaryPlotBuilder::createAndAppendSummaryMultiPlot( const std::vector& objects ) { - RimProject* project = RimProject::current(); - RimSummaryMultiPlotCollection* plotCollection = project->mainPlotCollection()->summaryMultiPlotCollection(); + RimSummaryMultiPlotCollection* plotCollection = RimMainPlotCollection::current()->summaryMultiPlotCollection(); auto* plotWindow = new RimSummaryMultiPlot; plotWindow->setMultiPlotTitle( QString( "Multi Plot %1" ).arg( plotCollection->multiPlots().size() + 1 ) ); @@ -439,8 +436,7 @@ RimSummaryMultiPlot* if ( skipCreationOfPlotBasedOnPreferences && prefs->defaultSummaryCurvesTextFilter().trimmed().isEmpty() ) return nullptr; - RimProject* project = RimProject::current(); - auto* plotCollection = project->mainPlotCollection()->summaryMultiPlotCollection(); + auto* plotCollection = RimMainPlotCollection::current()->summaryMultiPlotCollection(); auto* summaryMultiPlot = new RimSummaryMultiPlot(); summaryMultiPlot->setAsPlotMdiWindow(); @@ -483,8 +479,7 @@ RimSummaryMultiPlot* //-------------------------------------------------------------------------------------------------- RimSummaryMultiPlot* RicSummaryPlotBuilder::createAndAppendSingleSummaryMultiPlotNoAutoSettings( RimSummaryPlot* plot ) { - RimProject* project = RimProject::current(); - auto* plotCollection = project->mainPlotCollection()->summaryMultiPlotCollection(); + auto* plotCollection = RimMainPlotCollection::current()->summaryMultiPlotCollection(); auto* summaryMultiPlot = new RimSummaryMultiPlot(); summaryMultiPlot->setColumnCount( RiaDefines::ColumnCount::COLUMNS_1 ); @@ -521,8 +516,7 @@ RimSummaryMultiPlot* RicSummaryPlotBuilder::createAndAppendSingleSummaryMultiPlo //-------------------------------------------------------------------------------------------------- RimSummaryMultiPlot* RicSummaryPlotBuilder::createAndAppendSummaryMultiPlot( const std::vector& plots ) { - RimProject* project = RimProject::current(); - auto* plotCollection = project->mainPlotCollection()->summaryMultiPlotCollection(); + auto* plotCollection = RimMainPlotCollection::current()->summaryMultiPlotCollection(); auto* summaryMultiPlot = new RimSummaryMultiPlot(); summaryMultiPlot->setAsPlotMdiWindow(); @@ -554,8 +548,7 @@ RimSummaryMultiPlot* RicSummaryPlotBuilder::createAndAppendSummaryMultiPlot( con //-------------------------------------------------------------------------------------------------- RimSummaryMultiPlot* RicSummaryPlotBuilder::createAndAppendSingleSummaryMultiPlot( RimSummaryPlot* plot ) { - RimProject* project = RimProject::current(); - auto* plotCollection = project->mainPlotCollection()->summaryMultiPlotCollection(); + auto* plotCollection = RimMainPlotCollection::current()->summaryMultiPlotCollection(); auto* summaryMultiPlot = new RimSummaryMultiPlot(); summaryMultiPlot->setColumnCount( RiaDefines::ColumnCount::COLUMNS_1 ); diff --git a/ApplicationLibCode/Commands/PlotTemplateCommands/RicSummaryPlotTemplateTools.cpp b/ApplicationLibCode/Commands/PlotTemplateCommands/RicSummaryPlotTemplateTools.cpp index ef44991554..13c2d73547 100644 --- a/ApplicationLibCode/Commands/PlotTemplateCommands/RicSummaryPlotTemplateTools.cpp +++ b/ApplicationLibCode/Commands/PlotTemplateCommands/RicSummaryPlotTemplateTools.cpp @@ -34,7 +34,6 @@ #include "RimEnsembleCurveSet.h" #include "RimEnsembleCurveSetCollection.h" #include "RimMainPlotCollection.h" -#include "RimProject.h" #include "RimSummaryAddressCollection.h" #include "RimSummaryCase.h" #include "RimSummaryCurve.h" @@ -153,8 +152,7 @@ RimSummaryMultiPlot* RicSummaryPlotTemplateTools::create( const QString& fileNam sumCaseCollections.push_back( sumCaseCollection ); } - auto proj = RimProject::current(); - auto collections = proj->mainPlotCollection()->summaryMultiPlotCollection(); + auto collections = RimMainPlotCollection::current()->summaryMultiPlotCollection(); auto newSummaryPlot = RicSummaryPlotTemplateTools::createMultiPlotFromTemplateFile( fileName ); if ( !newSummaryPlot ) return nullptr; @@ -213,8 +211,7 @@ RimSummaryMultiPlot* RicSummaryPlotTemplateTools::create( const QString& if ( !analyzer.regionNumbers().empty() ) regions.push_back( QString::number( *( analyzer.regionNumbers().begin() ) ) ); - auto proj = RimProject::current(); - auto collections = proj->mainPlotCollection()->summaryMultiPlotCollection(); + auto collections = RimMainPlotCollection::current()->summaryMultiPlotCollection(); auto newSummaryPlot = RicSummaryPlotTemplateTools::createMultiPlotFromTemplateFile( fileName ); if ( !newSummaryPlot ) return nullptr; @@ -241,11 +238,6 @@ void RicSummaryPlotTemplateTools::setValuesForPlaceholders( RimSummaryMultiPlot* const std::vector& regions ) { - // Assumes this plot is inserted into the project. This is required when assigning the ptrFields - RimProject* proj = nullptr; - summaryMultiPlot->firstAncestorOfType( proj ); - CAF_ASSERT( proj ); - auto plots = summaryMultiPlot->plots(); for ( auto p : plots ) { @@ -265,11 +257,6 @@ void RicSummaryPlotTemplateTools::setValuesForPlaceholders( RimSummaryPlot* const std::vector& groupNames, const std::vector& regions ) { - // Assumes this plot is inserted into the project. This is required when assigning the ptrFields - RimProject* proj = nullptr; - summaryPlot->firstAncestorOfType( proj ); - CAF_ASSERT( proj ); - { // Replace single summary curves data sources diff --git a/ApplicationLibCode/Commands/RicCloseObservedDataFeature.cpp b/ApplicationLibCode/Commands/RicCloseObservedDataFeature.cpp index 0b0f0da643..17d74162a5 100644 --- a/ApplicationLibCode/Commands/RicCloseObservedDataFeature.cpp +++ b/ApplicationLibCode/Commands/RicCloseObservedDataFeature.cpp @@ -24,7 +24,6 @@ #include "RimObservedDataCollection.h" #include "RimObservedFmuRftData.h" #include "RimObservedSummaryData.h" -#include "RimProject.h" #include "RimRftPlotCollection.h" #include "RimSummaryMultiPlot.h" #include "RimSummaryMultiPlotCollection.h" @@ -80,8 +79,7 @@ void RicCloseObservedDataFeature::deleteObservedSummaryData( const std::vector& data ) { - RimProject* proj = RimProject::current(); - RimRftPlotCollection* rftPlotColl = proj->mainPlotCollection()->rftPlotCollection(); + RimRftPlotCollection* rftPlotColl = RimMainPlotCollection::current()->rftPlotCollection(); for ( RimObservedFmuRftData* observedData : data ) { diff --git a/ApplicationLibCode/Commands/RicCreateEnsembleFractureStatisticsPlotFeature.cpp b/ApplicationLibCode/Commands/RicCreateEnsembleFractureStatisticsPlotFeature.cpp index 165edf718c..5b4e0106ad 100644 --- a/ApplicationLibCode/Commands/RicCreateEnsembleFractureStatisticsPlotFeature.cpp +++ b/ApplicationLibCode/Commands/RicCreateEnsembleFractureStatisticsPlotFeature.cpp @@ -23,7 +23,6 @@ #include "RimEnsembleFractureStatisticsPlot.h" #include "RimEnsembleFractureStatisticsPlotCollection.h" #include "RimMainPlotCollection.h" -#include "RimProject.h" #include "RiuPlotMainWindow.h" #include "RiuPlotMainWindowTools.h" @@ -45,10 +44,8 @@ bool RicCreateEnsembleFractureStatisticsPlotFeature::isCommandEnabled() //-------------------------------------------------------------------------------------------------- void RicCreateEnsembleFractureStatisticsPlotFeature::onActionTriggered( bool isChecked ) { - RimProject* project = RimProject::current(); - RimEnsembleFractureStatisticsPlotCollection* collection = - project->mainPlotCollection()->ensembleFractureStatisticsPlotCollection(); + RimMainPlotCollection::current()->ensembleFractureStatisticsPlotCollection(); RimEnsembleFractureStatisticsPlot* plot = new RimEnsembleFractureStatisticsPlot(); plot->zoomAll(); diff --git a/ApplicationLibCode/Commands/RicCreateEnsembleWellLogFeature.cpp b/ApplicationLibCode/Commands/RicCreateEnsembleWellLogFeature.cpp index 0b7cf3cd02..a7a1aec470 100644 --- a/ApplicationLibCode/Commands/RicCreateEnsembleWellLogFeature.cpp +++ b/ApplicationLibCode/Commands/RicCreateEnsembleWellLogFeature.cpp @@ -121,7 +121,7 @@ void RicCreateEnsembleWellLogFeature::executeCommand( const RicCreateEnsembleWel std::vector> properties = ui.properties(); - RimWellLogPlotCollection* plotCollection = RimProject::current()->mainPlotCollection()->wellLogPlotCollection(); + RimWellLogPlotCollection* plotCollection = RimMainPlotCollection::current()->wellLogPlotCollection(); RimWellPath* wellPath = nullptr; diff --git a/ApplicationLibCode/Commands/RicCreateGridStatisticsPlotFeature.cpp b/ApplicationLibCode/Commands/RicCreateGridStatisticsPlotFeature.cpp index 63bc5c7192..df226a8722 100644 --- a/ApplicationLibCode/Commands/RicCreateGridStatisticsPlotFeature.cpp +++ b/ApplicationLibCode/Commands/RicCreateGridStatisticsPlotFeature.cpp @@ -25,7 +25,6 @@ #include "RimGridStatisticsPlot.h" #include "RimGridStatisticsPlotCollection.h" #include "RimMainPlotCollection.h" -#include "RimProject.h" #include "RiuPlotMainWindow.h" #include "RiuPlotMainWindowTools.h" @@ -47,9 +46,7 @@ bool RicCreateGridStatisticsPlotFeature::isCommandEnabled() //-------------------------------------------------------------------------------------------------- void RicCreateGridStatisticsPlotFeature::onActionTriggered( bool isChecked ) { - RimProject* project = RimProject::current(); - - RimGridStatisticsPlotCollection* collection = project->mainPlotCollection()->gridStatisticsPlotCollection(); + RimGridStatisticsPlotCollection* collection = RimMainPlotCollection::current()->gridStatisticsPlotCollection(); RimGridStatisticsPlot* plot = new RimGridStatisticsPlot(); diff --git a/ApplicationLibCode/Commands/RicCreateTemporaryLgrFeature.cpp b/ApplicationLibCode/Commands/RicCreateTemporaryLgrFeature.cpp index ed557c19a7..3365ac2826 100644 --- a/ApplicationLibCode/Commands/RicCreateTemporaryLgrFeature.cpp +++ b/ApplicationLibCode/Commands/RicCreateTemporaryLgrFeature.cpp @@ -44,7 +44,6 @@ #include "RimEclipseCase.h" #include "RimEclipseView.h" #include "RimMainPlotCollection.h" -#include "RimProject.h" #include "RimWellLogPlotCollection.h" #include "RimWellPath.h" #include "RimWellPathCollection.h" @@ -123,10 +122,10 @@ void RicCreateTemporaryLgrFeature::updateViews( RimEclipseCase* eclipseCase ) if ( guiApp ) guiApp->clearAllSelections(); deleteAllCachedData( eclipseCase ); - RimProject::current()->mainPlotCollection()->deleteAllCachedData(); + RimMainPlotCollection::current()->deleteAllCachedData(); computeCachedData( eclipseCase ); - RimProject::current()->mainPlotCollection()->wellLogPlotCollection()->loadDataAndUpdateAllPlots(); + RimMainPlotCollection::current()->wellLogPlotCollection()->loadDataAndUpdateAllPlots(); if ( guiApp ) eclipseCase->createDisplayModelAndUpdateAllViews(); } diff --git a/ApplicationLibCode/Commands/RicNewVfpPlotFeature.cpp b/ApplicationLibCode/Commands/RicNewVfpPlotFeature.cpp index b7ec8f0e1a..11279a5ce6 100644 --- a/ApplicationLibCode/Commands/RicNewVfpPlotFeature.cpp +++ b/ApplicationLibCode/Commands/RicNewVfpPlotFeature.cpp @@ -22,7 +22,6 @@ #include "RiaGuiApplication.h" #include "RimMainPlotCollection.h" -#include "RimProject.h" #include "RimSimWellInView.h" #include "RimVfpPlot.h" #include "RimVfpPlotCollection.h" @@ -57,8 +56,6 @@ bool RicNewVfpPlotFeature::isCommandEnabled() //-------------------------------------------------------------------------------------------------- void RicNewVfpPlotFeature::onActionTriggered( bool isChecked ) { - RimProject* proj = RiaApplication::instance()->project(); - RiaApplication* app = RiaGuiApplication::instance(); RiuPlotMainWindow* mpw = RiaGuiApplication::instance()->mainPlotWindow(); @@ -73,7 +70,7 @@ void RicNewVfpPlotFeature::onActionTriggered( bool isChecked ) app->setLastUsedDialogDirectory( vfpDataKey, QFileInfo( fileNames.last() ).absolutePath() ); - RimVfpPlotCollection* vfpPlotColl = proj->mainPlotCollection()->vfpPlotCollection(); + RimVfpPlotCollection* vfpPlotColl = RimMainPlotCollection::current()->vfpPlotCollection(); if ( vfpPlotColl ) { std::vector vfpPlots; diff --git a/ApplicationLibCode/Commands/RicReloadSummaryCaseFeature.cpp b/ApplicationLibCode/Commands/RicReloadSummaryCaseFeature.cpp index 4e9b22e805..74cc26264a 100644 --- a/ApplicationLibCode/Commands/RicReloadSummaryCaseFeature.cpp +++ b/ApplicationLibCode/Commands/RicReloadSummaryCaseFeature.cpp @@ -25,7 +25,6 @@ #include "RimMainPlotCollection.h" #include "RimObservedDataCollection.h" #include "RimObservedSummaryData.h" -#include "RimProject.h" #include "RimSummaryCase.h" #include "RimSummaryCaseCollection.h" #include "RimSummaryCaseMainCollection.h" @@ -40,6 +39,18 @@ CAF_CMD_SOURCE_INIT( RicReloadSummaryCaseFeature, "RicReloadSummaryCaseFeature" ); +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RicReloadSummaryCaseFeature::reloadSummaryCase( RimSummaryCase* summaryCase ) +{ + summaryCase->createSummaryReaderInterface(); + summaryCase->createRftReaderInterface(); + summaryCase->refreshMetaData(); + + RicReplaceSummaryCaseFeature::updateRequredCalculatedCurves( summaryCase ); +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -60,22 +71,12 @@ void RicReloadSummaryCaseFeature::onActionTriggered( bool isChecked ) std::vector caseSelection = selectedSummaryCases(); for ( RimSummaryCase* summaryCase : caseSelection ) { - summaryCase->createSummaryReaderInterface(); - summaryCase->createRftReaderInterface(); - summaryCase->refreshMetaData(); - - RicReplaceSummaryCaseFeature::updateRequredCalculatedCurves( summaryCase ); + reloadSummaryCase( summaryCase ); RiaLogging::info( QString( "Reloaded data for %1" ).arg( summaryCase->summaryHeaderFilename() ) ); } - for ( RimSummaryMultiPlot* multiPlot : summaryPlotColl->multiPlots() ) - { - for ( RimSummaryPlot* summaryPlot : multiPlot->summaryPlots() ) - { - summaryPlot->loadDataAndUpdate(); - } - } + RimMainPlotCollection::current()->loadDataAndUpdateAllPlots(); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/Commands/RicReloadSummaryCaseFeature.h b/ApplicationLibCode/Commands/RicReloadSummaryCaseFeature.h index 9868352ccf..7d4ae63a63 100644 --- a/ApplicationLibCode/Commands/RicReloadSummaryCaseFeature.h +++ b/ApplicationLibCode/Commands/RicReloadSummaryCaseFeature.h @@ -28,6 +28,9 @@ class RicReloadSummaryCaseFeature : public caf::CmdFeature { CAF_CMD_HEADER_INIT; +public: + static void reloadSummaryCase( RimSummaryCase* summaryCase ); + protected: bool isCommandEnabled() override; void onActionTriggered( bool isChecked ) override; diff --git a/ApplicationLibCode/Commands/RicReloadWellPathFormationNamesFeature.cpp b/ApplicationLibCode/Commands/RicReloadWellPathFormationNamesFeature.cpp index ac655b7dbd..1cc1d000a7 100644 --- a/ApplicationLibCode/Commands/RicReloadWellPathFormationNamesFeature.cpp +++ b/ApplicationLibCode/Commands/RicReloadWellPathFormationNamesFeature.cpp @@ -19,7 +19,6 @@ #include "RicReloadWellPathFormationNamesFeature.h" #include "RimMainPlotCollection.h" -#include "RimProject.h" #include "RimWellPath.h" #include "RimWellPathCollection.h" @@ -65,14 +64,7 @@ void RicReloadWellPathFormationNamesFeature::onActionTriggered( bool isChecked ) wellPathCollections[0]->reloadAllWellPathFormations(); } - RimProject* project = RimProject::current(); - if ( project ) - { - if ( project->mainPlotCollection() ) - { - project->mainPlotCollection->updatePlotsWithFormations(); - } - } + RimMainPlotCollection::current()->updatePlotsWithFormations(); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/Commands/SummaryPlotCommands/RicNewSummaryCrossPlotFeature.cpp b/ApplicationLibCode/Commands/SummaryPlotCommands/RicNewSummaryCrossPlotFeature.cpp index 5304487c80..51e34b25fc 100644 --- a/ApplicationLibCode/Commands/SummaryPlotCommands/RicNewSummaryCrossPlotFeature.cpp +++ b/ApplicationLibCode/Commands/SummaryPlotCommands/RicNewSummaryCrossPlotFeature.cpp @@ -25,7 +25,6 @@ #include "RicSummaryPlotEditorUi.h" #include "RimMainPlotCollection.h" -#include "RimProject.h" #include "RimSummaryCase.h" #include "RimSummaryCaseCollection.h" #include "RimSummaryCrossPlotCollection.h" @@ -75,10 +74,7 @@ bool RicNewSummaryCrossPlotFeature::isCommandEnabled() //-------------------------------------------------------------------------------------------------- void RicNewSummaryCrossPlotFeature::onActionTriggered( bool isChecked ) { - RimProject* project = RimProject::current(); - CVF_ASSERT( project ); - - RimSummaryCrossPlotCollection* summaryCrossPlotColl = project->mainPlotCollection()->summaryCrossPlotCollection(); + RimSummaryCrossPlotCollection* summaryCrossPlotColl = RimMainPlotCollection::current()->summaryCrossPlotCollection(); RimSummaryPlot* summaryPlot = summaryCrossPlotColl->createSummaryPlot(); summaryCrossPlotColl->addPlot( summaryPlot ); diff --git a/ApplicationLibCode/Commands/SummaryPlotCommands/RicSummaryPlotFeatureImpl.cpp b/ApplicationLibCode/Commands/SummaryPlotCommands/RicSummaryPlotFeatureImpl.cpp index 37b4fcbda3..4a253d65a2 100644 --- a/ApplicationLibCode/Commands/SummaryPlotCommands/RicSummaryPlotFeatureImpl.cpp +++ b/ApplicationLibCode/Commands/SummaryPlotCommands/RicSummaryPlotFeatureImpl.cpp @@ -144,8 +144,7 @@ std::vector openEclipseCasesForCellPlotting( QStringList gridFi std::vector openedCases; RiaApplication* app = RiaApplication::instance(); - RimProject* project = app->project(); - RimEclipseCaseCollection* analysisModels = project->activeOilField()->analysisModels(); + RimEclipseCaseCollection* analysisModels = RimProject::current()->activeOilField()->analysisModels(); for ( const QString& fileName : gridFileNames ) { QFileInfo gridFileInfo( fileName ); @@ -488,7 +487,7 @@ void RicSummaryPlotFeatureImpl::createSummaryPlotsFromArgumentLine( const QStrin if ( lastPlotCreated ) { - RimProject::current()->mainPlotCollection()->summaryMultiPlotCollection()->updateConnectedEditors(); + RimMainPlotCollection::current()->summaryMultiPlotCollection()->updateConnectedEditors(); RiuPlotMainWindow* mpw = RiaGuiApplication::instance()->mainPlotWindow(); // Needed to avoid unnecessary activation of sub windows (plots) diff --git a/ApplicationLibCode/Commands/WellLogCommands/RicNewPltPlotFeature.cpp b/ApplicationLibCode/Commands/WellLogCommands/RicNewPltPlotFeature.cpp index f073a79496..ae885b90da 100644 --- a/ApplicationLibCode/Commands/WellLogCommands/RicNewPltPlotFeature.cpp +++ b/ApplicationLibCode/Commands/WellLogCommands/RicNewPltPlotFeature.cpp @@ -83,9 +83,7 @@ bool RicNewPltPlotFeature::isCommandEnabled() //-------------------------------------------------------------------------------------------------- void RicNewPltPlotFeature::onActionTriggered( bool isChecked ) { - RimProject* proj = RimProject::current(); - - RimPltPlotCollection* pltPlotColl = proj->mainPlotCollection()->pltPlotCollection(); + RimPltPlotCollection* pltPlotColl = RimMainPlotCollection::current()->pltPlotCollection(); if ( pltPlotColl ) { QString wellPathName; @@ -98,7 +96,7 @@ void RicNewPltPlotFeature::onActionTriggered( bool isChecked ) } else if ( ( eclipseWell = caf::firstAncestorOfTypeFromSelectedObject() ) != nullptr ) { - wellPath = proj->wellPathFromSimWellName( eclipseWell->name() ); + wellPath = RimProject::current()->wellPathFromSimWellName( eclipseWell->name() ); if ( !wellPath ) return; wellPathName = wellPath->name(); diff --git a/ApplicationLibCode/Commands/WellLogCommands/RicNewRftPlotFeature.cpp b/ApplicationLibCode/Commands/WellLogCommands/RicNewRftPlotFeature.cpp index 79013707a1..1ab7214719 100644 --- a/ApplicationLibCode/Commands/WellLogCommands/RicNewRftPlotFeature.cpp +++ b/ApplicationLibCode/Commands/WellLogCommands/RicNewRftPlotFeature.cpp @@ -19,7 +19,6 @@ #include "RicNewRftPlotFeature.h" #include "RimMainPlotCollection.h" -#include "RimProject.h" #include "RimRftPlotCollection.h" #include "RimSimWellInView.h" #include "RimWellLogPlot.h" @@ -58,9 +57,7 @@ bool RicNewRftPlotFeature::isCommandEnabled() //-------------------------------------------------------------------------------------------------- void RicNewRftPlotFeature::onActionTriggered( bool isChecked ) { - RimProject* proj = RimProject::current(); - - RimRftPlotCollection* rftPlotColl = proj->mainPlotCollection()->rftPlotCollection(); + RimRftPlotCollection* rftPlotColl = RimMainPlotCollection::current()->rftPlotCollection(); if ( rftPlotColl ) { QString wellName = selectedWellName(); diff --git a/ApplicationLibCode/Commands/WellLogCommands/RicNewWellLogPlotFeatureImpl.cpp b/ApplicationLibCode/Commands/WellLogCommands/RicNewWellLogPlotFeatureImpl.cpp index 3e8115408a..1c62731ea1 100644 --- a/ApplicationLibCode/Commands/WellLogCommands/RicNewWellLogPlotFeatureImpl.cpp +++ b/ApplicationLibCode/Commands/WellLogCommands/RicNewWellLogPlotFeatureImpl.cpp @@ -249,14 +249,5 @@ void RicNewWellLogPlotFeatureImpl::updateAfterCreation( RimDepthTrackPlot* plot //-------------------------------------------------------------------------------------------------- RimWellLogPlotCollection* RicNewWellLogPlotFeatureImpl::wellLogPlotCollection() { - RimProject* project = RimProject::current(); - CVF_ASSERT( project ); - - RimMainPlotCollection* mainPlotColl = project->mainPlotCollection(); - CVF_ASSERT( mainPlotColl ); - - RimWellLogPlotCollection* wellLogPlotColl = mainPlotColl->wellLogPlotCollection(); - CVF_ASSERT( wellLogPlotColl ); - - return mainPlotColl->wellLogPlotCollection(); + return RimMainPlotCollection::current()->wellLogPlotCollection(); } diff --git a/ApplicationLibCode/Commands/WellPathCommands/RicWellPathFormationsImportFileFeature.cpp b/ApplicationLibCode/Commands/WellPathCommands/RicWellPathFormationsImportFileFeature.cpp index 7154634b13..e82cabb6de 100644 --- a/ApplicationLibCode/Commands/WellPathCommands/RicWellPathFormationsImportFileFeature.cpp +++ b/ApplicationLibCode/Commands/WellPathCommands/RicWellPathFormationsImportFileFeature.cpp @@ -69,10 +69,7 @@ void RicWellPathFormationsImportFileFeature::onActionTriggered( bool isChecked ) if ( project ) { project->scheduleCreateDisplayModelAndRedrawAllViews(); - if ( project->mainPlotCollection() ) - { - project->mainPlotCollection->updatePlotsWithFormations(); - } + RimMainPlotCollection::current()->updatePlotsWithFormations(); RimOilField* oilField = project->activeOilField(); diff --git a/ApplicationLibCode/GeoMech/GeoMechDataModel/RigFemPartResultsCollection.cpp b/ApplicationLibCode/GeoMech/GeoMechDataModel/RigFemPartResultsCollection.cpp index beb04230f7..2a155229ef 100644 --- a/ApplicationLibCode/GeoMech/GeoMechDataModel/RigFemPartResultsCollection.cpp +++ b/ApplicationLibCode/GeoMech/GeoMechDataModel/RigFemPartResultsCollection.cpp @@ -66,7 +66,6 @@ #include "RimMainPlotCollection.h" #include "RimMudWeightWindowParameters.h" -#include "RimProject.h" #include "RimWellLogPlot.h" #include "RimWellLogPlotCollection.h" @@ -216,20 +215,10 @@ void RigFemPartResultsCollection::setActiveFormationNames( RigFormationNames* ac { m_activeFormationNamesData = activeFormationNames; - RimProject* project = RimProject::current(); - if ( project ) + RimWellLogPlotCollection* plotCollection = RimMainPlotCollection::current()->wellLogPlotCollection(); + for ( auto wellLogPlot : plotCollection->wellLogPlots() ) { - if ( project->mainPlotCollection() ) - { - RimWellLogPlotCollection* plotCollection = project->mainPlotCollection()->wellLogPlotCollection(); - if ( plotCollection ) - { - for ( auto wellLogPlot : plotCollection->wellLogPlots() ) - { - wellLogPlot->loadDataAndUpdate(); - } - } - } + wellLogPlot->loadDataAndUpdate(); } this->deleteResult( RigFemResultAddress( RIG_FORMATION_NAMES, "Active Formation Names", "" ) ); diff --git a/ApplicationLibCode/ProjectDataModel/Flow/RimWellPltPlot.cpp b/ApplicationLibCode/ProjectDataModel/Flow/RimWellPltPlot.cpp index 559e403232..686341a276 100644 --- a/ApplicationLibCode/ProjectDataModel/Flow/RimWellPltPlot.cpp +++ b/ApplicationLibCode/ProjectDataModel/Flow/RimWellPltPlot.cpp @@ -281,7 +281,7 @@ protected: { RimProject* proj = RimProject::current(); RimWellPath* wellPath = proj->wellPathByName( wellPathName ); - RimWellLogPlotCollection* wellLogCollection = proj->mainPlotCollection()->wellLogPlotCollection(); + RimWellLogPlotCollection* wellLogCollection = RimMainPlotCollection::current()->wellLogPlotCollection(); RigEclipseWellLogExtractor* eclExtractor = wellLogCollection->findOrCreateExtractor( wellPath, eclCase ); return eclExtractor; diff --git a/ApplicationLibCode/ProjectDataModel/GeoMech/RimGeoMechCase.cpp b/ApplicationLibCode/ProjectDataModel/GeoMech/RimGeoMechCase.cpp index 1b7bd744e9..c4da91d3cf 100644 --- a/ApplicationLibCode/ProjectDataModel/GeoMech/RimGeoMechCase.cpp +++ b/ApplicationLibCode/ProjectDataModel/GeoMech/RimGeoMechCase.cpp @@ -185,17 +185,10 @@ RimGeoMechCase::~RimGeoMechCase( void ) { geoMechViews.deleteChildren(); - RimProject* project = RimProject::current(); - if ( project ) + RimWellLogPlotCollection* plotCollection = RimMainPlotCollection::current()->wellLogPlotCollection(); + if ( plotCollection ) { - if ( project->mainPlotCollection() ) - { - RimWellLogPlotCollection* plotCollection = project->mainPlotCollection()->wellLogPlotCollection(); - if ( plotCollection ) - { - plotCollection->removeExtractors( this->geoMechData() ); - } - } + plotCollection->removeExtractors( this->geoMechData() ); } if ( this->geoMechData() ) diff --git a/ApplicationLibCode/ProjectDataModel/Rim3dView.cpp b/ApplicationLibCode/ProjectDataModel/Rim3dView.cpp index 7379a6ced6..2230f21b7e 100644 --- a/ApplicationLibCode/ProjectDataModel/Rim3dView.cpp +++ b/ApplicationLibCode/ProjectDataModel/Rim3dView.cpp @@ -606,9 +606,7 @@ void Rim3dView::updateDisplayModelForCurrentTimeStepAndRedraw() m_isCallingUpdateDisplayModelForCurrentTimestepAndRedraw = false; - RimProject* project; - firstAncestorOrThisOfTypeAsserted( project ); - project->mainPlotCollection()->updateCurrentTimeStepInPlots(); + RimMainPlotCollection::current()->updateCurrentTimeStepInPlots(); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/RimEclipseCase.cpp b/ApplicationLibCode/ProjectDataModel/RimEclipseCase.cpp index e82478abc6..069f322b6e 100644 --- a/ApplicationLibCode/ProjectDataModel/RimEclipseCase.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimEclipseCase.cpp @@ -152,17 +152,10 @@ RimEclipseCase::~RimEclipseCase() delete m_fractureModelResults(); delete m_inputPropertyCollection; - RimProject* project = RimProject::current(); - if ( project ) + RimWellLogPlotCollection* plotCollection = RimMainPlotCollection::current()->wellLogPlotCollection(); + if ( plotCollection ) { - if ( project->mainPlotCollection() ) - { - RimWellLogPlotCollection* plotCollection = project->mainPlotCollection()->wellLogPlotCollection(); - if ( plotCollection ) - { - plotCollection->removeExtractors( this->eclipseCaseData() ); - } - } + plotCollection->removeExtractors( this->eclipseCaseData() ); } if ( this->eclipseCaseData() ) @@ -511,16 +504,7 @@ void RimEclipseCase::updateFormationNamesData() } // Update plots based on formations - { - RimProject* project = RimProject::current(); - if ( project ) - { - if ( project->mainPlotCollection() ) - { - project->mainPlotCollection->updatePlotsWithFormations(); - } - } - } + RimMainPlotCollection::current()->updatePlotsWithFormations(); std::vector views = this->views(); for ( Rim3dView* view : views ) diff --git a/ApplicationLibCode/ProjectDataModel/RimMainPlotCollection.cpp b/ApplicationLibCode/ProjectDataModel/RimMainPlotCollection.cpp index 3a6e11c20f..d4f0456cf7 100644 --- a/ApplicationLibCode/ProjectDataModel/RimMainPlotCollection.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimMainPlotCollection.cpp @@ -155,6 +155,14 @@ RimMainPlotCollection::~RimMainPlotCollection() { } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RimMainPlotCollection* RimMainPlotCollection::current() +{ + return RimProject::current()->mainPlotCollection(); +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/RimMainPlotCollection.h b/ApplicationLibCode/ProjectDataModel/RimMainPlotCollection.h index a76ee3c1ba..ec2b378b74 100644 --- a/ApplicationLibCode/ProjectDataModel/RimMainPlotCollection.h +++ b/ApplicationLibCode/ProjectDataModel/RimMainPlotCollection.h @@ -61,6 +61,8 @@ public: RimMainPlotCollection(); ~RimMainPlotCollection() override; + static RimMainPlotCollection* current(); + RimWellLogPlotCollection* wellLogPlotCollection() const; RimRftPlotCollection* rftPlotCollection() const; RimPltPlotCollection* pltPlotCollection() const; diff --git a/ApplicationLibCode/ProjectDataModel/RimProject.cpp b/ApplicationLibCode/ProjectDataModel/RimProject.cpp index 67955902b0..e0b9ea8085 100644 --- a/ApplicationLibCode/ProjectDataModel/RimProject.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimProject.cpp @@ -154,8 +154,8 @@ RimProject::RimProject( void ) wellPathImport.uiCapability()->setUiTreeHidden( true ); wellPathImport.uiCapability()->setUiTreeChildrenHidden( true ); - CAF_PDM_InitFieldNoDefault( &mainPlotCollection, "MainPlotCollection", "Plots" ); - mainPlotCollection.uiCapability()->setUiTreeHidden( true ); + CAF_PDM_InitFieldNoDefault( &m_mainPlotCollection, "MainPlotCollection", "Plots" ); + m_mainPlotCollection.uiCapability()->setUiTreeHidden( true ); CAF_PDM_InitFieldNoDefault( &viewLinkerCollection, "LinkedViews", "Linked Views", ":/LinkView.svg" ); viewLinkerCollection.uiCapability()->setUiTreeHidden( true ); @@ -212,7 +212,7 @@ RimProject::RimProject( void ) scriptCollection->uiCapability()->setUiName( "Scripts" ); scriptCollection->uiCapability()->setUiIconFromResourceString( ":/octave.png" ); - mainPlotCollection = new RimMainPlotCollection(); + m_mainPlotCollection = new RimMainPlotCollection(); CAF_PDM_InitFieldNoDefault( &m_plotTemplateTopFolder, "PlotTemplateCollection", "Plot Templates" ); m_plotTemplateTopFolder = new RimPlotTemplateFolderItem(); @@ -244,9 +244,9 @@ RimProject* RimProject::current() //-------------------------------------------------------------------------------------------------- void RimProject::close() { - if ( mainPlotCollection() ) + if ( m_mainPlotCollection() ) { - mainPlotCollection()->deleteAllContainedObjects(); + m_mainPlotCollection()->deleteAllContainedObjects(); } oilFields.deleteChildren(); @@ -361,6 +361,14 @@ void RimProject::setupBeforeSave() m_projectFileVersionString = STRPRODUCTVER; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RimMainPlotCollection* RimProject::mainPlotCollection() const +{ + return m_mainPlotCollection(); +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -998,7 +1006,7 @@ void RimProject::reloadCompletionTypeResultsInAllViews() RiaCompletionTypeCalculationScheduler::instance()->clearCompletionTypeResultsInAllCases(); scheduleCreateDisplayModelAndRedrawAllViews(); - mainPlotCollection()->scheduleUpdatePlotsWithCompletions(); + m_mainPlotCollection()->scheduleUpdatePlotsWithCompletions(); } //-------------------------------------------------------------------------------------------------- @@ -1364,82 +1372,82 @@ void RimProject::defineUiTreeOrdering( caf::PdmUiTreeOrdering& uiTreeOrdering, Q { if ( uiConfigName == "PlotWindow.Plots" ) { - if ( mainPlotCollection ) + if ( m_mainPlotCollection ) { - if ( mainPlotCollection->summaryMultiPlotCollection() ) + if ( m_mainPlotCollection->summaryMultiPlotCollection() ) { - uiTreeOrdering.add( mainPlotCollection->summaryMultiPlotCollection() ); + uiTreeOrdering.add( m_mainPlotCollection->summaryMultiPlotCollection() ); } - if ( mainPlotCollection->analysisPlotCollection() ) + if ( m_mainPlotCollection->analysisPlotCollection() ) { - uiTreeOrdering.add( mainPlotCollection->analysisPlotCollection() ); + uiTreeOrdering.add( m_mainPlotCollection->analysisPlotCollection() ); } - if ( mainPlotCollection->correlationPlotCollection() ) + if ( m_mainPlotCollection->correlationPlotCollection() ) { - uiTreeOrdering.add( mainPlotCollection->correlationPlotCollection() ); + uiTreeOrdering.add( m_mainPlotCollection->correlationPlotCollection() ); } - if ( mainPlotCollection->summaryCrossPlotCollection() ) + if ( m_mainPlotCollection->summaryCrossPlotCollection() ) { - uiTreeOrdering.add( mainPlotCollection->summaryCrossPlotCollection() ); + uiTreeOrdering.add( m_mainPlotCollection->summaryCrossPlotCollection() ); } - if ( mainPlotCollection->wellLogPlotCollection() ) + if ( m_mainPlotCollection->wellLogPlotCollection() ) { - uiTreeOrdering.add( mainPlotCollection->wellLogPlotCollection() ); + uiTreeOrdering.add( m_mainPlotCollection->wellLogPlotCollection() ); } - if ( mainPlotCollection->rftPlotCollection() ) + if ( m_mainPlotCollection->rftPlotCollection() ) { - uiTreeOrdering.add( mainPlotCollection->rftPlotCollection() ); + uiTreeOrdering.add( m_mainPlotCollection->rftPlotCollection() ); } - if ( mainPlotCollection->pltPlotCollection() ) + if ( m_mainPlotCollection->pltPlotCollection() ) { - uiTreeOrdering.add( mainPlotCollection->pltPlotCollection() ); + uiTreeOrdering.add( m_mainPlotCollection->pltPlotCollection() ); } - if ( mainPlotCollection->flowPlotCollection() ) + if ( m_mainPlotCollection->flowPlotCollection() ) { - uiTreeOrdering.add( mainPlotCollection->flowPlotCollection() ); + uiTreeOrdering.add( m_mainPlotCollection->flowPlotCollection() ); } - if ( mainPlotCollection->gridCrossPlotCollection() ) + if ( m_mainPlotCollection->gridCrossPlotCollection() ) { - uiTreeOrdering.add( mainPlotCollection->gridCrossPlotCollection() ); + uiTreeOrdering.add( m_mainPlotCollection->gridCrossPlotCollection() ); } - if ( mainPlotCollection->saturationPressurePlotCollection() ) + if ( m_mainPlotCollection->saturationPressurePlotCollection() ) { - uiTreeOrdering.add( mainPlotCollection->saturationPressurePlotCollection() ); + uiTreeOrdering.add( m_mainPlotCollection->saturationPressurePlotCollection() ); } - if ( mainPlotCollection->multiPlotCollection() ) + if ( m_mainPlotCollection->multiPlotCollection() ) { - uiTreeOrdering.add( mainPlotCollection->multiPlotCollection() ); + uiTreeOrdering.add( m_mainPlotCollection->multiPlotCollection() ); } - if ( mainPlotCollection->stimPlanModelPlotCollection() ) + if ( m_mainPlotCollection->stimPlanModelPlotCollection() ) { - uiTreeOrdering.add( mainPlotCollection->stimPlanModelPlotCollection() ); + uiTreeOrdering.add( m_mainPlotCollection->stimPlanModelPlotCollection() ); } - if ( mainPlotCollection->vfpPlotCollection() ) + if ( m_mainPlotCollection->vfpPlotCollection() ) { - uiTreeOrdering.add( mainPlotCollection->vfpPlotCollection() ); + uiTreeOrdering.add( m_mainPlotCollection->vfpPlotCollection() ); } #ifdef USE_QTCHARTS - if ( mainPlotCollection->gridStatisticsPlotCollection() || - mainPlotCollection->ensembleFractureStatisticsPlotCollection() ) + if ( m_mainPlotCollection->gridStatisticsPlotCollection() || + m_mainPlotCollection->ensembleFractureStatisticsPlotCollection() ) { auto statisticsItemCollection = uiTreeOrdering.add( "Statistics Plots", ":/Folder.png" ); - if ( mainPlotCollection->gridStatisticsPlotCollection() ) - statisticsItemCollection->add( mainPlotCollection->gridStatisticsPlotCollection() ); + if ( m_mainPlotCollection->gridStatisticsPlotCollection() ) + statisticsItemCollection->add( m_mainPlotCollection->gridStatisticsPlotCollection() ); - if ( mainPlotCollection->ensembleFractureStatisticsPlotCollection() ) - statisticsItemCollection->add( mainPlotCollection->ensembleFractureStatisticsPlotCollection() ); + if ( m_mainPlotCollection->ensembleFractureStatisticsPlotCollection() ) + statisticsItemCollection->add( m_mainPlotCollection->ensembleFractureStatisticsPlotCollection() ); } #endif } diff --git a/ApplicationLibCode/ProjectDataModel/RimProject.h b/ApplicationLibCode/ProjectDataModel/RimProject.h index 89d64e4651..1cb50af490 100644 --- a/ApplicationLibCode/ProjectDataModel/RimProject.h +++ b/ApplicationLibCode/ProjectDataModel/RimProject.h @@ -97,12 +97,13 @@ public: caf::PdmChildField colorLegendCollection; caf::PdmChildField scriptCollection; caf::PdmChildField wellPathImport; - caf::PdmChildField mainPlotCollection; caf::PdmChildField viewLinkerCollection; caf::PdmChildField calculationCollection; caf::PdmChildField gridCalculationCollection; caf::PdmChildArrayField commandObjects; + RimMainPlotCollection* mainPlotCollection() const; + caf::PdmChildArrayField multiSnapshotDefinitions; caf::PdmField mainWindowTreeViewStates; @@ -208,6 +209,8 @@ private: void distributePathsFromGlobalPathList(); private: + caf::PdmChildField m_mainPlotCollection; + caf::PdmField m_globalPathList; caf::PdmField m_projectFileVersionString; diff --git a/ApplicationLibCode/ProjectDataModel/RimReloadCaseTools.cpp b/ApplicationLibCode/ProjectDataModel/RimReloadCaseTools.cpp index be0c9ea10b..9b7cfb6b44 100644 --- a/ApplicationLibCode/ProjectDataModel/RimReloadCaseTools.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimReloadCaseTools.cpp @@ -30,18 +30,8 @@ #include "RimEclipseContourMapView.h" #include "RimEclipseContourMapViewCollection.h" #include "RimEclipseView.h" -#include "RimFlowPlotCollection.h" -#include "RimGridCrossPlot.h" -#include "RimGridCrossPlotCollection.h" #include "RimMainPlotCollection.h" -#include "RimMultiPlot.h" -#include "RimMultiPlotCollection.h" -#include "RimProject.h" #include "RimSummaryCaseMainCollection.h" -#include "RimSummaryMultiPlot.h" -#include "RimSummaryMultiPlotCollection.h" -#include "RimWellLogPlot.h" -#include "RimWellLogPlotCollection.h" //-------------------------------------------------------------------------------------------------- /// @@ -143,51 +133,5 @@ void RimReloadCaseTools::updateAll3dViews( RimEclipseCase* eclipseCase ) //-------------------------------------------------------------------------------------------------- void RimReloadCaseTools::updateAllPlots() { - RimProject* project = RimProject::current(); - if ( project && project->mainPlotCollection() ) - { - RimWellLogPlotCollection* wellPlotCollection = project->mainPlotCollection()->wellLogPlotCollection(); - - if ( wellPlotCollection ) - { - for ( RimWellLogPlot* wellLogPlot : wellPlotCollection->wellLogPlots() ) - { - wellLogPlot->loadDataAndUpdate(); - } - } - - RimSummaryMultiPlotCollection* summaryMultiPlotCollection = - project->mainPlotCollection()->summaryMultiPlotCollection(); - if ( summaryMultiPlotCollection ) - { - for ( RimSummaryMultiPlot* summaryPlot : summaryMultiPlotCollection->multiPlots() ) - { - summaryPlot->loadDataAndUpdate(); - } - } - - RimGridCrossPlotCollection* gridCrossPlotCollection = project->mainPlotCollection()->gridCrossPlotCollection(); - if ( gridCrossPlotCollection ) - { - for ( RimGridCrossPlot* crossPlot : gridCrossPlotCollection->plots() ) - { - crossPlot->loadDataAndUpdate(); - } - } - - RimFlowPlotCollection* flowPlotCollection = project->mainPlotCollection()->flowPlotCollection(); - if ( flowPlotCollection ) - { - flowPlotCollection->loadDataAndUpdateAllPlots(); - } - - RimMultiPlotCollection* multiPlotCollection = project->mainPlotCollection()->multiPlotCollection(); - if ( multiPlotCollection ) - { - for ( RimMultiPlot* plotWindow : multiPlotCollection->multiPlots() ) - { - plotWindow->loadDataAndUpdate(); - } - } - } + RimMainPlotCollection::current()->loadDataAndUpdateAllPlots(); } diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimRftCase.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimRftCase.cpp index 24ca0e0e5f..7605ea8bc0 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimRftCase.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimRftCase.cpp @@ -18,6 +18,13 @@ #include "RimRftCase.h" +#include "RicReloadSummaryCaseFeature.h" + +#include "RimMainPlotCollection.h" +#include "RimSummaryCase.h" + +#include "cafPdmUiFilePathEditor.h" + //================================================================================================== // // @@ -69,3 +76,33 @@ QString RimRftCase::dataDeckFilePath() const { return m_dataDeckFilePath().path(); } + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimRftCase::fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) +{ + RimSummaryCase* parentCase = nullptr; + firstAncestorOfType( parentCase ); + + if ( parentCase ) RicReloadSummaryCaseFeature::reloadSummaryCase( parentCase ); + + RimMainPlotCollection::current()->loadDataAndUpdateAllPlots(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimRftCase::defineEditorAttribute( const caf::PdmFieldHandle* field, + QString uiConfigName, + caf::PdmUiEditorAttribute* attribute ) +{ + if ( field == &m_dataDeckFilePath ) + { + auto* myAttr = dynamic_cast( attribute ); + if ( myAttr ) + { + myAttr->m_defaultPath = rftFilePath(); + } + } +} diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimRftCase.h b/ApplicationLibCode/ProjectDataModel/Summary/RimRftCase.h index 6ccffc3b57..4a2d0040df 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimRftCase.h +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimRftCase.h @@ -39,6 +39,13 @@ public: QString rftFilePath() const; QString dataDeckFilePath() const; +private: + void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) override; + + void defineEditorAttribute( const caf::PdmFieldHandle* field, + QString uiConfigName, + caf::PdmUiEditorAttribute* attribute ) override; + private: caf::PdmField m_rftFilePath; caf::PdmField m_dataDeckFilePath; diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.cpp index 9ec6e4af23..ce99e4bbdf 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.cpp @@ -39,7 +39,6 @@ #include "RimMultiPlotCollection.h" #include "RimMultipleSummaryPlotNameHelper.h" #include "RimPlotAxisProperties.h" -#include "RimProject.h" #include "RimSummaryAddress.h" #include "RimSummaryAddressCollection.h" #include "RimSummaryAddressModifier.h" @@ -533,8 +532,7 @@ void RimSummaryMultiPlot::updatePlotWindowTitle() if ( title.isEmpty() ) { - auto proj = RimProject::current(); - auto collections = proj->mainPlotCollection()->summaryMultiPlotCollection(); + auto collections = RimMainPlotCollection::current()->summaryMultiPlotCollection(); size_t index = 0; for ( auto p : collections->multiPlots() ) diff --git a/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogExtractionCurve.cpp b/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogExtractionCurve.cpp index 203f94626e..9fb92da788 100644 --- a/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogExtractionCurve.cpp +++ b/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogExtractionCurve.cpp @@ -46,8 +46,6 @@ #include "RimGeoMechResultDefinition.h" #include "RimGeoMechView.h" #include "RimMainPlotCollection.h" -#include "RimOilField.h" -#include "RimProject.h" #include "RimTools.h" #include "RimWellBoreStabilityPlot.h" #include "RimWellLogCurve.h" @@ -438,10 +436,7 @@ void RimWellLogExtractionCurve::extractData( bool* isUsingPseudoLength, clampBranchIndex(); - RimMainPlotCollection* mainPlotCollection; - this->firstAncestorOrThisOfTypeAsserted( mainPlotCollection ); - - RimWellLogPlotCollection* wellLogCollection = mainPlotCollection->wellLogPlotCollection(); + RimWellLogPlotCollection* wellLogCollection = RimMainPlotCollection::current()->wellLogPlotCollection(); cvf::ref eclExtractor; cvf::ref geomExtractor; @@ -696,15 +691,7 @@ std::set RimWellLogExtractionCurve::sortedSimWellNames() //-------------------------------------------------------------------------------------------------- void RimWellLogExtractionCurve::clearGeneratedSimWellPaths() { - RimWellLogPlotCollection* wellLogCollection = nullptr; - - // Need to use this approach, and not firstAnchestor because the curve might not be inside the hierarchy when - // deleted. - - RimProject* proj = RimProject::current(); - if ( proj && proj->mainPlotCollection() ) wellLogCollection = proj->mainPlotCollection()->wellLogPlotCollection(); - - if ( !wellLogCollection ) return; + RimWellLogPlotCollection* wellLogCollection = RimMainPlotCollection::current()->wellLogPlotCollection(); for ( auto wellPath : m_wellPathsWithExtractors ) { diff --git a/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogRftCurve.cpp b/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogRftCurve.cpp index 8ebaee2800..b9353640f1 100644 --- a/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogRftCurve.cpp +++ b/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogRftCurve.cpp @@ -173,8 +173,8 @@ RimWellLogRftCurve::RimWellLogRftCurve() CAF_PDM_InitFieldNoDefault( &m_wellLogChannelName, "WellLogChannelName", "Well Property" ); CAF_PDM_InitFieldNoDefault( &m_rftDataType, "RftDataType", "Data Type" ); - CAF_PDM_InitField( &m_segmentResultName, "SegmentResultName", RiaResultNames::undefinedResultName(), "Segment Result Name" ); - CAF_PDM_InitField( &m_segmentBranchIndex, "SegmentBranchIndex", -1, "Segment Branch" ); + CAF_PDM_InitField( &m_segmentResultName, "SegmentResultName", RiaResultNames::undefinedResultName(), "Result Name" ); + CAF_PDM_InitField( &m_segmentBranchIndex, "SegmentBranchIndex", -1, "Branch" ); CAF_PDM_InitFieldNoDefault( &m_segmentBranchType, "SegmentBranchType", "Branch Type" ); } diff --git a/ApplicationLibCode/ProjectDataModel/WellMeasurement/RimWellMeasurementCollection.cpp b/ApplicationLibCode/ProjectDataModel/WellMeasurement/RimWellMeasurementCollection.cpp index 01c1c411b8..2faf58c13c 100644 --- a/ApplicationLibCode/ProjectDataModel/WellMeasurement/RimWellMeasurementCollection.cpp +++ b/ApplicationLibCode/ProjectDataModel/WellMeasurement/RimWellMeasurementCollection.cpp @@ -60,9 +60,7 @@ RimWellMeasurementCollection::~RimWellMeasurementCollection() //-------------------------------------------------------------------------------------------------- void RimWellMeasurementCollection::updateAllCurves() { - RimProject* proj; - this->firstAncestorOrThisOfTypeAsserted( proj ); - RimMainPlotCollection* plotCollection = proj->mainPlotCollection(); + RimMainPlotCollection* plotCollection = RimMainPlotCollection::current(); std::vector measurementCurves; plotCollection->descendantsIncludingThisOfType( measurementCurves ); @@ -80,9 +78,7 @@ void RimWellMeasurementCollection::updateAllCurves() //-------------------------------------------------------------------------------------------------- void RimWellMeasurementCollection::deleteAllEmptyCurves() { - RimProject* proj; - this->firstAncestorOrThisOfTypeAsserted( proj ); - RimMainPlotCollection* plotCollection = proj->mainPlotCollection(); + RimMainPlotCollection* plotCollection = RimMainPlotCollection::current(); std::vector measurementCurves; plotCollection->descendantsIncludingThisOfType( measurementCurves ); @@ -269,8 +265,6 @@ void RimWellMeasurementCollection::removeMeasurementsForFilePath( RimWellMeasure delete measurementsToRemove[i]; } - RimProject* proj; - this->firstAncestorOrThisOfTypeAsserted( proj ); - proj->scheduleCreateDisplayModelAndRedrawAllViews(); + RimProject::current()->scheduleCreateDisplayModelAndRedrawAllViews(); this->updateAllCurves(); } diff --git a/ApplicationLibCode/ProjectDataModel/WellPath/RimWellPath.cpp b/ApplicationLibCode/ProjectDataModel/WellPath/RimWellPath.cpp index 764bed1621..ce4a2399ad 100644 --- a/ApplicationLibCode/ProjectDataModel/WellPath/RimWellPath.cpp +++ b/ApplicationLibCode/ProjectDataModel/WellPath/RimWellPath.cpp @@ -165,18 +165,10 @@ RimWellPath::~RimWellPath() delete file; } - RimProject* project; - firstAncestorOrThisOfType( project ); - if ( project ) + RimWellLogPlotCollection* plotCollection = RimMainPlotCollection::current()->wellLogPlotCollection(); + if ( plotCollection ) { - if ( project->mainPlotCollection() ) - { - RimWellLogPlotCollection* plotCollection = project->mainPlotCollection()->wellLogPlotCollection(); - if ( plotCollection ) - { - plotCollection->removeExtractors( m_wellPathGeometry.p() ); - } - } + plotCollection->removeExtractors( m_wellPathGeometry.p() ); } } diff --git a/ApplicationLibCode/UserInterface/RiuPlotMainWindow.cpp b/ApplicationLibCode/UserInterface/RiuPlotMainWindow.cpp index d87ce4ce99..5ddaee005c 100644 --- a/ApplicationLibCode/UserInterface/RiuPlotMainWindow.cpp +++ b/ApplicationLibCode/UserInterface/RiuPlotMainWindow.cpp @@ -154,10 +154,7 @@ void RiuPlotMainWindow::onWellSelected( QString wellName ) if ( !plotWnd->selection3DLinkEnabled() ) return; - RimProject* project = RimProject::current(); - if ( !project ) return; - - project->mainPlotCollection()->updateSelectedWell( wellName ); + RimMainPlotCollection::current()->updateSelectedWell( wellName ); } //-------------------------------------------------------------------------------------------------- From f62695c55a20bffc7de8ccd646af10056ad5fb69 Mon Sep 17 00:00:00 2001 From: jonjenssen <69144954+jonjenssen@users.noreply.github.com> Date: Mon, 22 Aug 2022 12:42:29 +0200 Subject: [PATCH 074/129] Docking updates (#9219) * Add icons to dock windows. Rearrange ordering in windows menu. Set default dock layout if last stored layout is not valid when resinsight loads --- ApplicationExeCode/Resources/ResInsight.qrc | 1 + ApplicationExeCode/Resources/info.png | Bin 0 -> 2009 bytes .../UserInterface/RiuDockWidgetTools.cpp | 453 ++++++++++-------- .../UserInterface/RiuDockWidgetTools.h | 28 +- .../UserInterface/RiuMainWindow.cpp | 62 ++- .../UserInterface/RiuMainWindowBase.cpp | 22 +- .../UserInterface/RiuPlotMainWindow.cpp | 35 +- 7 files changed, 360 insertions(+), 241 deletions(-) create mode 100644 ApplicationExeCode/Resources/info.png diff --git a/ApplicationExeCode/Resources/ResInsight.qrc b/ApplicationExeCode/Resources/ResInsight.qrc index b260b936c8..43b65ba1ff 100644 --- a/ApplicationExeCode/Resources/ResInsight.qrc +++ b/ApplicationExeCode/Resources/ResInsight.qrc @@ -270,6 +270,7 @@ AppendPrevCurve.png CheckOverlay16x16.png Link3DandPlots.png + info.png fs_CellFace.glsl diff --git a/ApplicationExeCode/Resources/info.png b/ApplicationExeCode/Resources/info.png new file mode 100644 index 0000000000000000000000000000000000000000..f3b590d116071b701bc679fbeef8fe341a11fa2e GIT binary patch literal 2009 zcmV;~2PXK5P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D2X0A3K~#8N<(prq zR8>z;wf5d; z-+|MoPfw_l;o;#6Y3@d*Ba@KHCR42y$B?7eN{%Ckk!?G7?mS6b8I?Eyqh;Jf$b-lb zGKdsm1gRsRAzN^UoKz~MIRK;2r+F569JyK7Dqt`239=4n{F_|qky0Fh@lVpcj7&=| zRL>D)B~JLD@v%5PIRL{oyx%}(Cl~t9eq7=sO?42|qMGc1JD; zVEhv_dh$wmS*VPCifl!xZ<8xI;eL0}+=o1ZsElTz#Hf+5q46=Bt{i|ODr2jVmy!!{ zdXCEw=#VGhyo#(q2bIw%nGP`HKSuNvV(5u0Gk5L%BA}1-SdC&D0aVqvifQR4Ja zPI%AyDO?Be<;wQoAYQ`z6OU3=ACX6rA#?{aO^$WdY)iM%nUyquWl(0Tx%@3{NqyVPD!3 z72|KWZVG<3+q#*UP74v~7-9(9G`VUcGy+s>LnxM%@Jfw&p7f>GO;NAcbIs~Zw?&9o z9aiClwxxNS1Nfm2inHNMnr&;4$-Ziqr_f75Yg<5P;6h$>r)mIF{m*?1)OIkt|s3_7^I)_+owkC`n0ou&)*7JJ$rEEZSpnT(@&5uHuuHGn6LX@outulyL z_R)lPa`y9ubF6<>flVsqp^)B-O>@;rMgYI4Wv91|wba_P5l{Eq%;r`Iq{@SF7*CbD zs_Q4FyO#@+Qr~odc5g#y;c>R(+3>Lb85kNG(!Tv)NNDT&PP|xXGouskvxJ(zl$=we zt$8iKs=V|%bAVE+4ntj)CR9;0SGY(w)Juzy@kh%tUSQlUG&5+m-E}qXRkT;qUO{^q zttLcM5M}Ao!p>|6%_(H_y>fuJv7kM?GC9GMU61^1pI!3K0K34mWx5=o*Ht03fms?n zi5D^K8Du6-c*`z_$i1`M1)eRFAOAPHSOKojN54cvLm*_G~#O2Y4F~RlVwttt`K@wro6Gj>blSmm7NJ zCTmlSj*k9l-Li2jUEf211n6#q?b@|V>-Q>%hJX$vh0vV6R9FzXFE%NSRXu&-*>YSC z@Yc)T9zkJhwVIm%85vc@zi{_E@PQ46H+Hc@SgWN zNpjH81kj>lGdI$ioIG@0 zN^#cr*3E_Kq{C9)!bcOIRJrfVA*scS7oTU{Og3)Z_@8yV#*8m?NGj+6!Iz#B$K*me zAc6m&iP4hAry#oF9u&~4wQ+%aE420?p7G*2&v@aEfF|5T^)z-!S{_#UT*Hm3I7N~I zos{HM>NL~y5}sI#PSNuX?g$uz&H=|>lS=`eCq9T`Z3mF5fO}|$r-{?sNX&TYysXjn z$s7T~Jg$SsFC-V@oC(L}*CNZ%p{?YF=*j_2P(ri8caWIpn`knlr_j$on2^DWdG~O1 zC%GITOesw^^6VOG<<*ZrnbAScT+Ytz0D%*vtj^wcJ;A9Mh1*jYpZk4gAqO22Y|96dQe-~{CZWq*~+JYmrb8t%)H4H%!9=wkHjfF?LXGsbiCPiH&9 r8A@IXk8|gbr#*1S8T{w-6DIr*kRsAcf-J>X00000NkvXXu0mjfS}DsetObjectName( dockName ); + dockWidget->setToggleViewActionMode( ads::CDockWidget::ActionModeShow ); + dockWidget->setIcon( RiuDockWidgetTools::dockIcon( dockName ) ); + + return dockWidget; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -QString RiuDockWidgetTools::propertyEditorName() +QString RiuDockWidgetTools::mainPlotWindowName() { - return "dockpropertyEditor"; + return "dockPlotWindow_mainPlotWindow"; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -QString RiuDockWidgetTools::resultInfoName() +QString RiuDockWidgetTools::main3DWindowName() { - return "dockResultInfo"; + return "dock3DWindow_mainWindow"; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -QString RiuDockWidgetTools::processMonitorName() +QString RiuDockWidgetTools::mainWindowPropertyEditorName() { - return "dockProcessMonitor"; + return "dockPropertyEditor_mainWindow"; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -QString RiuDockWidgetTools::resultPlotName() +QString RiuDockWidgetTools::mainWindowResultInfoName() { - return "dockResultPlot"; + return "dockResultInfo_mainWindow"; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -QString RiuDockWidgetTools::relPermPlotName() +QString RiuDockWidgetTools::mainWindowProcessMonitorName() { - return "dockRelPermPlot"; + return "dockProcessMonitor_mainWindow"; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -QString RiuDockWidgetTools::pvtPlotName() +QString RiuDockWidgetTools::mainWindowResultPlotName() { - return "dockPvtPlot"; + return "dockResultPlot_mainWindow"; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -QString RiuDockWidgetTools::mohrsCirclePlotName() +QString RiuDockWidgetTools::mainWindowRelPermPlotName() { - return "dockMohrsCirclePlot"; + return "dockRelPermPlot_mainWindow"; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -QString RiuDockWidgetTools::undoStackName() +QString RiuDockWidgetTools::mainWindowPvtPlotName() { - return "dockUndoStack"; + return "dockPvtPlot_mainWindow"; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -QString RiuDockWidgetTools::summaryPlotManagerName() +QString RiuDockWidgetTools::mainWindowMohrsCirclePlotName() +{ + return "dockMohrsCirclePlot_mainWindow"; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QString RiuDockWidgetTools::mainWindowUndoStackName() +{ + return "dockUndoStack_mainWindow"; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QString RiuDockWidgetTools::plotMainWindowPlotManagerName() { return "dockSummaryPlotManager"; } @@ -115,7 +136,7 @@ QString RiuDockWidgetTools::summaryPlotManagerName() //-------------------------------------------------------------------------------------------------- QString RiuDockWidgetTools::mainWindowProjectTreeName() { - return "mainWindow_dockProjectTree"; + return "dockProjectTree_mainWindow"; } //-------------------------------------------------------------------------------------------------- @@ -123,7 +144,7 @@ QString RiuDockWidgetTools::mainWindowProjectTreeName() //-------------------------------------------------------------------------------------------------- QString RiuDockWidgetTools::mainWindowDataSourceTreeName() { - return "mainWindow_dockDataSourceTree"; + return "dockDataSourceTree_mainWindow"; } //-------------------------------------------------------------------------------------------------- @@ -131,7 +152,7 @@ QString RiuDockWidgetTools::mainWindowDataSourceTreeName() //-------------------------------------------------------------------------------------------------- QString RiuDockWidgetTools::mainWindowScriptsTreeName() { - return "mainWindow_dockScriptsTree"; + return "dockScriptsTree_mainWindow"; } //-------------------------------------------------------------------------------------------------- @@ -139,7 +160,7 @@ QString RiuDockWidgetTools::mainWindowScriptsTreeName() //-------------------------------------------------------------------------------------------------- QString RiuDockWidgetTools::plotMainWindowDataSourceTreeName() { - return "plotMainWindow_dockDataSourceTree"; + return "dockDataSourceTree_plotMainWindow"; } //-------------------------------------------------------------------------------------------------- @@ -147,7 +168,7 @@ QString RiuDockWidgetTools::plotMainWindowDataSourceTreeName() //-------------------------------------------------------------------------------------------------- QString RiuDockWidgetTools::plotMainWindowPlotsTreeName() { - return "plotMainWindow_dockPlotsTree"; + return "dockPlotsTree_plotMainWindow"; } //-------------------------------------------------------------------------------------------------- @@ -155,7 +176,7 @@ QString RiuDockWidgetTools::plotMainWindowPlotsTreeName() //-------------------------------------------------------------------------------------------------- QString RiuDockWidgetTools::plotMainWindowTemplateTreeName() { - return "plotMainWindow_dockTemplatesTree"; + return "dockTemplatesTree_plotMainWindow"; } //-------------------------------------------------------------------------------------------------- @@ -163,7 +184,7 @@ QString RiuDockWidgetTools::plotMainWindowTemplateTreeName() //-------------------------------------------------------------------------------------------------- QString RiuDockWidgetTools::plotMainWindowScriptsTreeName() { - return "plotMainWindow_dockScriptsTree"; + return "dockScriptsTree_plotMainWindow"; } //-------------------------------------------------------------------------------------------------- @@ -171,7 +192,7 @@ QString RiuDockWidgetTools::plotMainWindowScriptsTreeName() //-------------------------------------------------------------------------------------------------- QString RiuDockWidgetTools::plotMainWindowPropertyEditorName() { - return "plotMainWindow_dockPropertyEditor"; + return "dockPropertyEditor_plotMainWindow"; } //-------------------------------------------------------------------------------------------------- @@ -179,7 +200,7 @@ QString RiuDockWidgetTools::plotMainWindowPropertyEditorName() //-------------------------------------------------------------------------------------------------- QString RiuDockWidgetTools::plotMainWindowMessagesName() { - return "plotMainWindow_dockMessages"; + return "dockMessages_plotMainWindow"; } //-------------------------------------------------------------------------------------------------- @@ -187,15 +208,15 @@ QString RiuDockWidgetTools::plotMainWindowMessagesName() //-------------------------------------------------------------------------------------------------- QString RiuDockWidgetTools::plotMainWindowUndoStackName() { - return "plotMainWindow_dockUndoStack"; + return "dockUndoStack_plotMainWindow"; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -QString RiuDockWidgetTools::messagesName() +QString RiuDockWidgetTools::mainWindowMessagesName() { - return "dockMessages"; + return "dockMessages_mainWindow"; } //-------------------------------------------------------------------------------------------------- @@ -273,6 +294,59 @@ void RiuDockWidgetTools::showDockWidget( const ads::CDockManager* dockManager, c } } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QIcon RiuDockWidgetTools::dockIcon( const QString dockWidgetName ) +{ + if ( dockWidgetName == plotMainWindowPlotsTreeName() ) + return QIcon( ":/plots.svg" ); + else if ( dockWidgetName == plotMainWindowDataSourceTreeName() ) + return QIcon( ":/data-sources.svg" ); + else if ( dockWidgetName == plotMainWindowTemplateTreeName() ) + return QIcon( ":/SummaryTemplate16x16.png" ); + else if ( dockWidgetName == plotMainWindowScriptsTreeName() ) + return QIcon( ":/scripts.svg" ); + else if ( dockWidgetName == plotMainWindowPropertyEditorName() ) + return QIcon( ":/property-editor.svg" ); + else if ( dockWidgetName == plotMainWindowMessagesName() ) + return QIcon( ":/messages.svg" ); + else if ( dockWidgetName == plotMainWindowUndoStackName() ) + return QIcon( ":/undo-stack.svg" ); + else if ( dockWidgetName == plotMainWindowPlotManagerName() ) + return QIcon( ":/plot-manager.svg" ); + else if ( dockWidgetName == mainWindowPropertyEditorName() ) + return QIcon( ":/property-editor.svg" ); + else if ( dockWidgetName == mainWindowResultInfoName() ) + return QIcon( ":/info.png" ); + else if ( dockWidgetName == mainWindowProcessMonitorName() ) + return QIcon( ":/view.svg" ); + else if ( dockWidgetName == mainWindowResultPlotName() ) + return QIcon( ":/graph.svg" ); + else if ( dockWidgetName == mainWindowRelPermPlotName() ) + return QIcon( ":/graph.svg" ); + else if ( dockWidgetName == mainWindowPvtPlotName() ) + return QIcon( ":/graph.svg" ); + else if ( dockWidgetName == mainWindowMessagesName() ) + return QIcon( ":/messages.svg" ); + else if ( dockWidgetName == mainWindowMohrsCirclePlotName() ) + return QIcon( ":/graph.svg" ); + else if ( dockWidgetName == mainWindowUndoStackName() ) + return QIcon( ":/undo-stack.svg" ); + else if ( dockWidgetName == mainWindowProjectTreeName() ) + return QIcon( ":/standard.svg" ); + else if ( dockWidgetName == mainWindowDataSourceTreeName() ) + return QIcon( ":/data-sources.svg" ); + else if ( dockWidgetName == mainWindowScriptsTreeName() ) + return QIcon( ":/scripts.svg" ); + else if ( dockWidgetName == mainPlotWindowName() ) + return QIcon( ":/window-management.svg" ); + else if ( dockWidgetName == main3DWindowName() ) + return QIcon( ":/window-management.svg" ); + + return QIcon( ":/view.svg" ); +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -304,39 +378,40 @@ QByteArray RiuDockWidgetTools::defaultEclipseDockState() // Clipboard" from the Windows menu and paste the exported text into this file to update the default states. static const char stateData[] = - { '\x00', '\x00', '\x05', '\x2e', '\x78', '\xda', '\x95', '\x54', '\x4d', '\x4f', '\x02', '\x31', '\x10', - '\xbd', '\xfb', '\x2b', '\x9a', '\xbd', '\x23', '\xfb', '\x85', '\x42', '\xb2', '\x40', '\x08', '\x48', - '\xe2', '\x01', '\x45', '\x96', '\x8f', '\xa3', '\xa9', '\xbb', '\x23', '\x56', '\xbb', '\x2d', '\x99', - '\x16', '\x50', '\xe3', '\x8f', '\xb7', '\x0b', '\x66', '\x05', '\x2c', '\x8b', '\x9c', '\x76', '\x3b', - '\xef', '\xbd', '\x99', '\x79', '\xd3', '\x49', '\xa3', '\xf6', '\x7b', '\xc6', '\xc9', '\x0a', '\x50', - '\x31', '\x29', '\x9a', '\x8e', '\x77', '\xe9', '\x3a', '\x04', '\x44', '\x22', '\x53', '\x26', '\xe6', - '\x4d', '\x67', '\x32', '\xee', '\x57', '\xea', '\x4e', '\xbb', '\x15', '\x3d', '\xe8', '\x4e', '\xba', - '\xa2', '\x22', '\x81', '\xb4', '\x27', '\x93', '\x37', '\x83', '\xc5', '\x1f', '\x4a', '\x43', '\x46', - '\xa6', '\x85', '\xd0', '\x21', '\x13', '\x05', '\xb8', '\x7b', '\xee', '\x4a', '\xa1', '\x29', '\x13', - '\x26', '\xb2', '\x3d', '\x82', '\xd0', '\x48', '\xf9', '\x8c', '\xa5', '\x73', '\xd0', '\x4d', '\x27', - '\xe8', '\x91', '\x29', '\x83', '\xb5', '\x72', '\x5a', '\x51', '\x41', '\x24', '\x7d', '\x2e', '\xa9', - '\xde', '\x54', '\x76', '\x4d', '\x3c', '\x5e', '\x70', '\xa6', '\xb5', '\x09', '\xdf', '\x23', '\x33', - '\x62', '\x83', '\xe4', '\x99', '\xbf', '\xf2', '\xcc', '\x4b', '\x61', '\x52', '\xf8', '\x47', '\x39', - '\x95', '\x3d', '\x4e', '\x07', '\x81', '\x92', '\x31', '\x7d', '\x32', '\x7d', '\x04', '\x06', '\x58', - '\x22', '\x42', '\x0e', '\x65', '\xa6', '\xe6', '\x8c', '\x89', '\x54', '\xae', '\x1f', '\x53', '\x63', - '\x6a', '\x88', '\xf2', '\x15', '\x12', '\x3d', '\x46', '\x00', '\xa3', '\xd9', '\xb6', '\x49', '\xee', - '\x68', '\x06', '\xa5', '\x4c', '\xd2', '\xe5', '\x52', '\x41', '\x9a', '\x37', '\x5c', '\x2d', '\x57', - '\xf5', '\xa8', '\xa6', '\xb1', '\x5c', '\x62', '\x02', '\x67', '\x0a', '\xe3', '\x04', '\xd9', '\x42', - '\x2b', '\x8b', '\xaa', '\x9a', '\x3b', '\xdb', '\xf3', '\xe7', '\xed', '\xf8', '\xcb', '\xb5', '\x0b', - '\x94', '\x0b', '\x40', '\xfd', '\x71', '\x93', '\x32', '\x2d', '\xf1', '\xd0', '\x97', '\x85', '\x61', - '\x2d', '\x10', '\xb3', '\x4f', '\x50', '\xad', '\xeb', '\x46', '\x8d', '\x84', '\xb5', '\x1a', '\x89', - '\xaa', '\xdb', '\xb3', '\xf9', '\xfe', '\x0c', '\xff', '\xec', '\x6b', '\xd8', '\x6d', '\xb3', '\x58', - '\x04', '\x73', '\xfb', '\x74', '\xbe', '\x01', '\x0f', '\xda', '\xfc', '\x65', '\x58', '\x9b', '\x3b', - '\xb1', '\x25', '\x81', '\x53', '\x3a', '\xa1', '\x11', '\xa8', '\x25', '\xd7', '\xb7', '\xe2', '\x59', - '\xda', '\xa6', '\xb3', '\x83', '\x9e', '\x1a', '\x7d', '\x68', '\x4d', '\x3c', '\xe4', '\x52', '\x1f', - '\x4f', '\xbc', '\x41', '\x4b', '\x36', '\x21', '\x67', '\x0e', '\xe4', '\x0b', '\xaa', '\x2e', '\xc3', - '\x84', '\xc3', '\x3e', '\xdd', '\xb3', '\xd2', '\x47', '\xc0', '\x87', '\x80', '\xd9', '\x7f', '\x32', - '\x0f', '\x57', '\xb6', '\x06', '\xfe', '\x3a', '\xf3', '\x0f', '\x9c', '\x0d', '\x40', '\x29', '\x3a', - '\x07', '\x65', '\xf3', '\x55', '\x60', '\xa7', '\x6a', '\xa3', '\x4c', '\x0c', '\x75', '\x20', '\xc5', - '\xa9', '\xb5', '\x0b', '\x6a', '\x1e', '\xf1', '\x42', '\xd7', '\x27', '\x61', '\xe8', '\xda', '\x77', - '\x6f', '\x13', '\x69', '\xd4', '\x7d', '\xe2', '\x5f', '\xd5', '\x4b', '\x18', '\x41', '\xd8', '\x20', - '\xbe', '\xef', '\xda', '\x17', '\xb8', '\x5a', '\x3c', '\x42', '\xe6', '\xff', '\xc8', '\x6b', '\xd7', - '\xba', '\xf8', '\x06', '\x84', '\x98', '\xbb', '\x1d' }; + { '\x00', '\x00', '\x06', '\x13', '\x78', '\xda', '\x95', '\x54', '\xdf', '\x4f', '\xc2', '\x30', '\x10', + '\x7e', '\xf7', '\xaf', '\x68', '\xf6', '\xae', '\x30', '\xc6', '\x94', '\x25', '\x80', '\x31', '\xa0', + '\x89', '\x0f', '\x28', '\x3a', '\xd0', '\x47', '\x53', '\xbb', '\x13', '\xab', '\x5d', '\x4b', '\xae', + '\x07', '\xfe', '\x88', '\x7f', '\xbc', '\x1d', '\x18', '\x12', '\xa0', '\xdb', '\xe4', '\x69', '\xdd', + '\xdd', '\xf7', '\xf5', '\xfb', '\xae', '\xbd', '\x6b', '\xf7', '\xfc', '\x33', '\x57', '\x6c', '\x09', + '\x68', '\xa5', '\xd1', '\xbd', '\x20', '\x3c', '\x69', '\x06', '\x0c', '\xb4', '\x30', '\x99', '\xd4', + '\xb3', '\x5e', '\x30', '\x9d', '\x5c', '\x1d', '\x77', '\x82', '\xf3', '\x7e', '\xf7', '\x8e', '\x2e', + '\xb2', '\x25', '\xd7', '\x02', '\xb2', '\xa1', '\x11', '\xef', '\x2e', '\x97', '\x7e', '\x59', '\x82', + '\x9c', '\x3d', '\x6c', '\x88', '\x01', '\x9b', '\x5a', '\xc0', '\xcd', '\x7f', '\x2b', '\x60', '\x03', + '\xa3', '\x89', '\x4b', '\xed', '\x22', '\xab', '\xf4', '\x00', '\x34', '\x21', '\x57', '\x8f', '\x32', + '\x9b', '\x01', '\xf5', '\x82', '\xcc', '\xed', '\x13', '\x0d', '\x1f', '\xa5', '\xce', '\xcc', '\xc7', + '\x53', '\xee', '\x70', '\xeb', '\x65', '\xd0', '\xef', '\x6e', '\x78', '\xec', '\x4a', '\x19', '\x4e', + '\x2b', '\x23', '\x4d', '\x17', '\x4f', '\xe7', '\x4a', '\x12', '\xb9', '\xf0', '\x2d', '\x4a', '\xb7', + '\x97', '\xcb', '\x14', '\x42', '\x3f', '\x85', '\xd0', '\x42', '\x53', '\x21', '\x59', '\x86', '\x39', + '\xde', '\xc2', '\x5c', '\x20', '\x70', '\x36', '\xe1', '\xcf', '\xce', '\x56', '\xe4', '\x12', '\x0b', + '\x44', '\xd0', '\x7f', '\x86', '\xc6', '\x68', '\xde', '\x40', '\xd0', '\x04', '\x01', '\xb6', '\x3d', + '\xad', '\x5d', '\xb3', '\x1b', '\x9e', '\x43', '\x25', '\x92', '\x0d', '\x94', '\xb1', '\x90', '\x15', + '\x86', '\x1b', '\x1e', '\xd6', '\x90', '\x13', '\x4f', '\xcd', '\x02', '\x05', '\x1c', '\x48', '\x4c', + '\x05', '\xca', '\x39', '\xd9', '\x6a', '\x56', '\xa3', '\xa8', '\x6c', '\xab', '\xbe', '\x70', '\xbf', + '\xbe', '\x39', '\x20', '\x7d', '\x5d', '\x66', '\x92', '\x0c', '\xd6', '\x97', '\x58', '\x02', '\xf6', + '\xca', '\xa6', '\xf2', '\x1b', '\x6c', '\xff', '\xac', '\xd3', '\x62', '\xed', '\xd3', '\x0e', '\xeb', + '\x36', '\xd6', '\xff', '\xee', '\xfb', '\x77', '\x25', '\x07', '\x5f', '\xce', '\xae', '\x79', '\x5f', + '\xb7', '\xb8', '\x16', '\xe1', '\xb3', '\x15', '\xd6', '\x53', '\x80', '\x97', '\xe0', '\xb5', '\x5e', + '\xd3', '\x59', '\x51', '\xb5', '\xb1', '\x7b', '\xb0', '\x0b', '\x45', '\xd7', '\xfa', '\xc5', '\xd4', + '\x9c', '\xa8', '\x1f', '\x58', '\x77', '\x89', '\x6d', '\xaf', '\xdc', '\x58', '\x19', '\xfa', '\x97', + '\xdc', '\x2e', '\xb0', '\xa6', '\xd3', '\x46', '\xe6', '\x15', '\xed', '\x40', '\xa2', '\x50', '\x50', + '\xca', '\x0c', '\xbd', '\xcc', '\x7b', '\x50', '\x63', '\xc0', '\xfc', '\x40', '\xbd', '\xf1', '\xb2', + '\xc6', '\xe1', '\xfe', '\x81', '\xec', '\x4e', '\xed', '\x08', '\xac', '\xe5', '\x33', '\xb0', '\x35', + '\xc7', '\xe1', '\x83', '\xd5', '\x99', '\x43', '\x23', '\x1c', '\x6b', '\x64', '\x74', '\xf5', '\x08', + '\xec', '\x11', '\xa7', '\x0e', '\x94', '\x12', '\x17', '\xef', '\xff', '\x1c', '\x9b', '\x28', '\x89', + '\x59', '\xd8', '\x4a', '\x9a', '\xac', '\x1d', '\x97', '\xcc', '\xce', '\x2a', '\xd2', '\x49', '\x4e', + '\x59', '\x14', '\xb7', '\x2b', '\x10', '\x51', '\x92', '\xb0', '\x56', '\x18', '\xc7', '\x5e', '\x48', + '\x63', '\xf3', '\xb4', '\xba', '\x75', '\xc9', '\x93', '\xde', '\x3f', '\xfa', '\x05', '\x48', '\x0b', + '\x16', '\x15' }; QByteArray retVal( stateData, sizeof( stateData ) ); @@ -349,39 +424,40 @@ QByteArray RiuDockWidgetTools::defaultEclipseDockState() QByteArray RiuDockWidgetTools::defaultGeoMechDockState() { static const char stateData[] = - { '\x00', '\x00', '\x05', '\x2e', '\x78', '\xda', '\x95', '\x54', '\x4d', '\x53', '\xc2', '\x30', '\x10', - '\xbd', '\xfb', '\x2b', '\x32', '\xbd', '\x2b', '\xfd', '\x42', '\x61', '\x06', '\x70', '\x1c', '\x90', - '\x19', '\x0f', '\x28', '\x5a', '\x84', '\xa3', '\x13', '\xdb', '\x15', '\xa3', '\x69', '\xc2', '\x6c', - '\x02', '\xa8', '\xe3', '\x8f', '\x77', '\x0b', '\x4e', '\x05', '\x0c', '\x45', '\x4f', '\x4d', '\xf6', - '\xbd', '\xb7', '\xd9', '\xb7', '\xd9', '\xa6', '\x75', '\xfe', '\x96', '\x4b', '\xb6', '\x00', '\x34', - '\x42', '\xab', '\xb6', '\x17', '\x9c', '\xf8', '\x1e', '\x03', '\x95', '\xea', '\x4c', '\xa8', '\x69', - '\xdb', '\xbb', '\x1f', '\xf5', '\x8f', '\x1b', '\xde', '\x79', '\xa7', '\x75', '\x6b', '\x2f', '\xb2', - '\x05', '\x57', '\x29', '\x64', '\x3d', '\x9d', '\xbe', '\x12', '\x96', '\xbc', '\x1b', '\x0b', '\x39', - '\x1b', '\x97', '\x42', '\x8f', '\xdd', '\x1b', '\xc0', '\xcd', '\x7d', '\x57', '\x2b', '\xcb', '\x85', - '\xa2', '\xc8', '\x7a', '\x0b', '\xca', '\x22', '\x97', '\x13', '\x91', '\x4d', '\xc1', '\xb6', '\xbd', - '\xa8', '\xc7', '\xc6', '\x02', '\x96', '\xc6', '\xeb', '\xb4', '\x4a', '\x22', '\xeb', '\x4b', '\xcd', - '\xed', '\xea', '\x64', '\x9f', '\xe2', '\xc9', '\x4c', '\x0a', '\x6b', '\x29', '\x7c', '\x83', '\x82', - '\xc4', '\x84', '\x14', '\x99', '\x3f', '\x8b', '\xcc', '\x73', '\x45', '\x29', '\xc2', '\xbd', '\x9c', - '\xe3', '\x2d', '\xce', '\x05', '\x02', '\x67', '\x23', '\xfe', '\x48', '\x75', '\x44', '\x04', '\xcc', - '\x11', '\xa1', '\x80', '\x72', '\x3a', '\x73', '\x22', '\x54', '\xa6', '\x97', '\x0f', '\x19', '\x99', - '\x1a', '\xa2', '\x7e', '\x81', '\xd4', '\x8e', '\x10', '\x80', '\x34', '\xeb', '\x32', '\xd9', '\x35', - '\xcf', '\xa1', '\x92', '\xc9', '\xba', '\x52', '\x1b', '\xc8', '\x8a', '\x82', '\x6b', '\xd5', '\xaa', - '\x1e', '\xb7', '\x3c', '\xd1', '\x73', '\x4c', '\xe1', '\x9f', '\xc2', '\x24', '\x45', '\x31', '\xb3', - '\xc6', '\xa1', '\xaa', '\x15', '\xce', '\xb6', '\xfc', '\x05', '\x1b', '\xfe', '\x0a', '\xed', '\x0c', - '\xf5', '\x0c', '\xd0', '\xbe', '\x5f', '\x66', '\xc2', '\x6a', '\xdc', '\xf5', '\xe5', '\x60', '\x38', - '\x0f', '\x48', '\xc4', '\x07', '\x98', '\xce', '\x59', '\xb3', '\xce', '\xe2', '\x7a', '\x9d', '\xb5', - '\x6a', '\xeb', '\x3d', '\x7d', '\xbf', '\x9b', '\xff', '\xef', '\x6b', '\xd8', '\x2c', '\xb3', '\x1c', - '\x04', '\xba', '\x7d', '\x3e', '\x5d', '\x81', '\x3b', '\x65', '\xfe', '\x30', '\x9c', '\xc5', '\x1d', - '\x98', '\x92', '\xc8', '\xab', '\xec', '\xd0', '\x1d', '\x98', '\xb9', '\xb4', '\x57', '\xea', '\x49', - '\xbb', '\xba', '\xb3', '\x81', '\x1e', '\x6a', '\x7d', '\xec', '\x4c', '\x3c', '\x94', '\xda', '\xee', - '\x4f', '\xbc', '\x42', '\x2b', '\x26', '\xa1', '\x60', '\x0e', '\xf4', '\x33', '\x9a', '\xae', '\xc0', - '\x54', '\xc2', '\x5f', '\xe8', '\x77', '\x20', '\x87', '\x80', '\xf9', '\x36', '\x35', '\x70', '\x52', - '\x87', '\x0b', '\xeb', '\xa0', '\xfd', '\x76', '\x16', '\xee', '\x38', '\x1b', '\x80', '\x31', '\x7c', - '\x0a', '\xc6', '\xe5', '\xab', '\xc4', '\x0e', '\x94', '\x49', '\xff', '\x50', '\x4a', '\xd4', '\x81', - '\x56', '\x87', '\xc6', '\x2e', '\xaa', '\x07', '\x2c', '\x88', '\xfd', '\x90', '\xc5', '\xb1', '\xef', - '\x9e', '\xbd', '\x55', '\xa4', '\xd9', '\x08', '\x59', '\x78', '\xda', '\xa8', '\x60', '\x44', '\x71', - '\x93', '\x85', '\xa1', '\xef', '\x1e', '\xe0', '\x5a', '\xf9', '\x08', '\xd1', '\x7a', '\xcf', '\x6b', - '\xd7', '\x39', '\xfa', '\x02', '\x85', '\x8e', '\xbb', '\x1e' }; + { '\x00', '\x00', '\x06', '\x13', '\x78', '\xda', '\x95', '\x54', '\xdf', '\x4f', '\xc2', '\x30', '\x10', + '\x7e', '\xf7', '\xaf', '\x68', '\xf6', '\x8e', '\xb0', '\x8d', '\x29', '\x4b', '\xf8', '\x11', '\x03', + '\x9a', '\xf8', '\x80', '\xa2', '\x03', '\x79', '\x34', '\xb5', '\x3b', '\xb1', '\xda', '\xb5', '\xa4', + '\x3d', '\xf0', '\x47', '\xfc', '\xe3', '\xed', '\x86', '\x21', '\x01', '\xba', '\x0d', '\x9e', '\xda', + '\xde', '\x7d', '\x5f', '\xef', '\xbb', '\xeb', '\x5d', '\xbb', '\x83', '\xaf', '\x4c', '\x90', '\x35', + '\x68', '\xc3', '\x95', '\xec', '\x79', '\xfe', '\x79', '\xcb', '\x23', '\x20', '\x99', '\x4a', '\xb9', + '\x5c', '\xf4', '\xbc', '\xd9', '\xf4', '\xa6', '\xd1', '\xf1', '\x06', '\xfd', '\xee', '\x03', '\x5e', + '\xa5', '\x6b', '\x2a', '\x19', '\xa4', '\x23', '\xc5', '\x3e', '\xac', '\x2f', '\xf9', '\x36', '\x08', + '\x19', '\x79', '\xda', '\x12', '\x3d', '\x32', '\x33', '\xa0', '\xb7', '\xe7', '\xc0', '\x23', '\x43', + '\x25', '\x91', '\x72', '\x69', '\x2d', '\x85', '\x7b', '\x08', '\x12', '\x35', '\x15', '\x73', '\x9e', + '\x2e', '\x00', '\x7b', '\x5e', '\x6a', '\xef', '\x09', '\x47', '\x73', '\x2e', '\x53', '\xf5', '\xf9', + '\x9c', '\x59', '\xdc', '\x66', '\xeb', '\xf5', '\xbb', '\x5b', '\x1e', '\xb9', '\x11', '\x8a', '\x62', + '\x21', '\xa4', '\x65', '\xed', '\xc9', '\x52', '\x70', '\x44', '\x6b', '\xbe', '\xd7', '\xdc', '\xde', + '\x65', '\x3d', '\x79', '\xa0', '\xdf', '\x3c', '\xd0', '\x4a', '\x62', '\x1e', '\xb2', '\x0c', '\xd3', + '\xd8', '\xc1', '\x5c', '\x69', '\xa0', '\x64', '\x4a', '\x5f', '\xac', '\xac', '\xd0', '\x3a', '\x56', + '\x5a', '\x83', '\xfc', '\x17', '\x34', '\xd1', '\xea', '\x1d', '\x18', '\x4e', '\x35', '\xc0', '\xae', + '\xa6', '\x8d', '\x6a', '\x72', '\x47', '\x33', '\xa8', '\x44', '\x92', '\xa1', '\x50', '\x06', '\xd2', + '\x5c', '\x70', '\xd3', '\xc1', '\x1a', '\x51', '\xa4', '\x89', '\x5a', '\x69', '\x06', '\x27', '\x12', + '\x13', '\xa6', '\xf9', '\x12', '\x4d', '\x35', '\xab', '\x99', '\x67', '\xb6', '\x93', '\x9f', '\x7f', + '\x98', '\xdf', '\x12', '\x34', '\x7e', '\x5f', '\xa7', '\x1c', '\x95', '\xae', '\x4f', '\xb1', '\x04', + '\xec', '\x0c', '\x9b', '\xf0', '\x1f', '\x30', '\xfd', '\xcb', '\x4e', '\x40', '\xda', '\x17', '\x1d', + '\xd2', '\x6d', '\x6e', '\xce', '\x76', '\xfd', '\x7f', '\x92', '\x93', '\x1f', '\x67', '\x5f', '\xbc', + '\xab', '\x5b', '\x6c', '\x8b', '\xd0', '\x45', '\x81', '\x75', '\x24', '\xe0', '\x24', '\x38', '\xa5', + '\xd7', '\x74', '\x56', '\x58', '\x2d', '\xec', '\x11', '\xcc', '\x4a', '\xe0', '\xad', '\x7c', '\x55', + '\x35', '\x15', '\x75', '\x03', '\xeb', '\x1e', '\xb1', '\xed', '\x0c', '\x37', '\x11', '\x0a', '\x8f', + '\x0a', '\xb7', '\x0f', '\xac', '\xe9', '\xb4', '\xb1', '\x7a', '\xd3', '\x66', '\xc8', '\x35', '\x13', + '\x70', '\x22', '\xf3', '\x11', '\xc4', '\x04', '\x74', '\x56', '\xca', '\xf2', '\x9d', '\xac', '\xc9', + '\x1a', '\xab', '\x19', '\x87', '\x05', '\xd9', '\x9f', '\xda', '\x31', '\x18', '\x43', '\x17', '\x60', + '\x6a', '\xca', '\xe1', '\x82', '\xd5', '\xa4', '\x64', '\x47', '\x80', '\x59', '\xd6', '\x58', '\xc9', + '\xea', '\x11', '\x38', '\x20', '\xce', '\x2c', '\x28', '\x41', '\xca', '\x3e', '\x8e', '\x1c', '\x9b', + '\x30', '\x8e', '\x88', '\x1f', '\xc4', '\x2d', '\xd2', '\x8e', '\x4a', '\x66', '\xa7', '\xb0', '\x74', + '\xe2', '\x0b', '\x12', '\x46', '\xed', '\x0a', '\x44', '\x18', '\xc7', '\x24', '\xf0', '\xa3', '\xc8', + '\x09', '\x69', '\x6e', '\xbf', '\x56', '\xbb', '\x2f', '\xf9', '\xd2', '\xfb', '\x67', '\x7f', '\x49', + '\x4b', '\x16', '\x16' }; QByteArray retVal( stateData, sizeof( stateData ) ); @@ -394,35 +470,36 @@ QByteArray RiuDockWidgetTools::defaultGeoMechDockState() QByteArray RiuDockWidgetTools::defaultPlotDockState() { static const char stateData[] = - { '\x00', '\x00', '\x04', '\x87', '\x78', '\xda', '\xa5', '\x54', '\x4d', '\x6f', '\xc2', '\x30', '\x0c', - '\xbd', '\xef', '\x57', '\x44', '\xbd', '\xb3', '\x7e', '\x20', '\xb1', '\x22', '\x95', '\x22', '\x04', - '\xe3', '\xc6', '\xc6', '\xd4', '\x02', '\xc7', '\x29', '\x6b', '\xac', '\x2a', '\x5a', '\x9b', '\x54', - '\x49', '\xca', '\xc6', '\xb4', '\x1f', '\x3f', '\xb7', '\x9d', '\x2a', '\x40', '\xe5', '\x63', '\xec', - '\xd4', '\xd8', '\x7e', '\xcf', '\x7e', '\x8e', '\xdd', '\x04', '\xe3', '\xcf', '\x3c', '\x23', '\x5b', - '\x50', '\x9a', '\x4b', '\x31', '\xb2', '\xdc', '\x7b', '\xc7', '\x22', '\x20', '\x12', '\xc9', '\xb8', - '\x48', '\x47', '\xd6', '\x2a', '\x9e', '\xf7', '\x7c', '\x6b', '\x1c', '\x06', '\x2f', '\x66', '\xc2', - '\xb6', '\x54', '\x24', '\xc0', '\x66', '\x32', '\x79', '\xc7', '\x58', '\xb4', '\xd3', '\x06', '\x72', - '\xb2', '\x6e', '\x89', '\x16', '\x59', '\x69', '\x50', '\xfb', '\xf6', '\x54', '\x0a', '\x43', '\xb9', - '\x40', '\x4f', '\x63', '\x82', '\x30', '\x8a', '\x66', '\x1b', '\xce', '\x52', '\x30', '\x23', '\x6b', - '\x99', '\x49', '\x43', '\x36', '\x5c', '\x30', '\xf9', '\x61', '\x85', '\x41', '\x8b', '\x25', '\xf3', - '\x4c', '\x52', '\x53', '\x17', '\x77', '\xd0', '\x1f', '\x15', '\x19', '\x37', '\x06', '\xdd', '\xcf', - '\x8a', '\x23', '\x1f', '\x23', '\x55', '\xf2', '\xef', '\x2a', '\x79', '\x29', '\x30', '\x4b', '\xff', - '\x24', '\xa6', '\xd7', '\x62', '\x3c', '\xc4', '\x4c', '\x14', '\x50', '\x12', '\xd3', '\x37', '\x5d', - '\x51', '\xc8', '\xb4', '\x54', '\x0a', '\xaa', '\x50', '\x81', '\x22', '\x16', '\x58', '\xb7', '\xd1', - '\xf1', '\xca', '\xb0', '\xb7', '\x4a', '\x97', '\x8e', '\x15', '\x00', '\xb2', '\x1a', '\xad', '\xe4', - '\x89', '\xe6', '\x70', '\x01', '\x4b', '\xa6', '\x99', '\xd4', '\xc0', '\x2a', '\xd1', '\xf6', '\x65', - '\x5e', '\x0c', '\x79', '\x91', '\x51', '\x03', '\xb7', '\x70', '\xa3', '\x44', '\xf1', '\xa2', '\xb3', - '\xaa', '\x5d', '\x35', '\x79', '\xd0', '\xaa', '\x7b', '\xa1', '\x55', '\x25', '\x0b', '\x50', '\x66', - '\xf7', '\xc8', '\xb8', '\x91', '\xea', '\x9a', '\x7e', '\x0f', '\x09', '\x9d', '\xe5', '\x23', '\xfe', - '\x05', '\x3a', '\xf4', '\x87', '\x0e', '\xe9', '\xfb', '\x0f', '\x24', '\xb0', '\x1b', '\x1b', '\xbf', - '\xbf', '\x53', '\x3a', '\x29', '\x70', '\x7f', '\x21', '\x70', '\x0b', '\x68', '\x5a', '\xc7', '\x8f', - '\x44', '\x1d', '\x80', '\x3a', '\xcb', '\xff', '\x6d', '\x19', '\xbc', '\xf3', '\x37', '\x34', '\xa3', - '\x86', '\x46', '\xb2', '\x54', '\x09', '\x5c', '\xb9', '\x11', '\x47', '\x84', '\x33', '\xa3', '\xad', - '\x67', '\x59', '\xe6', '\x39', '\x55', '\xbb', '\x65', '\x9d', '\x47', '\xd0', '\x14', '\xd4', '\x7f', - '\x47', '\xba', '\x00', '\xad', '\x31', '\x8f', '\xbe', '\x42', '\x6a', '\x0b', '\xbd', '\x71', '\x8c', - '\x8d', '\xc7', '\x1b', '\xb8', '\xc4', '\x73', '\xdc', '\x21', '\xf1', '\x06', '\x7e', '\x27', '\xcc', - '\x6e', '\x7f', '\x6d', '\x3c', '\x9f', '\x78', '\x46', '\xc2', '\xbb', '\x1f', '\x8d', '\x36', '\x8d', - '\x30' }; + { '\x00', '\x00', '\x04', '\xf5', '\x78', '\xda', '\x9d', '\x54', '\x51', '\x6f', '\x82', '\x30', '\x10', + '\x7e', '\xdf', '\xaf', '\x68', '\xfa', '\xee', '\x04', '\x99', '\x13', '\x13', '\xd4', '\x18', '\x9c', + '\x6f', '\x6e', '\x2e', '\xe8', '\x7c', '\x34', '\x1d', '\x5c', '\x48', '\x23', '\xb4', '\xa4', '\x2d', + '\x6e', '\x2e', '\xfb', '\xf1', '\x3b', '\x70', '\x61', '\x9b', '\x01', '\xc5', '\x3d', '\xb5', '\xbd', + '\xfb', '\xbe', '\xbb', '\xef', '\x72', '\x5f', '\xea', '\x4d', '\xde', '\xd3', '\x84', '\xec', '\x41', + '\x69', '\x2e', '\xc5', '\x88', '\xda', '\xb7', '\x16', '\x25', '\x20', '\x42', '\x19', '\x71', '\x11', + '\x8f', '\xe8', '\x7a', '\x35', '\xef', '\xb8', '\x74', '\x32', '\xf6', '\x9e', '\xcd', '\x34', '\xda', + '\x33', '\x11', '\x42', '\x34', '\x93', '\xe1', '\x0e', '\x73', '\xc1', '\x41', '\x1b', '\x48', '\xc9', + '\x4b', '\x45', '\xa4', '\x64', '\xad', '\x41', '\x55', '\xef', '\x1e', '\x25', '\xbe', '\x14', '\x86', + '\x71', '\x81', '\x91', '\x32', '\xed', '\x83', '\x30', '\x8a', '\x25', '\x1b', '\x1e', '\xc5', '\x60', + '\x46', '\x34', '\xc2', '\x3a', '\xcb', '\x44', '\x9a', '\x0d', '\x17', '\x91', '\x7c', '\xdb', '\xa6', + '\x88', '\xfc', '\x79', '\xd2', '\xb1', '\x57', '\xb1', '\xc9', '\x3c', '\x91', '\xcc', '\x94', '\x72', + '\x2c', '\x8c', '\x07', '\x59', '\xc2', '\x8d', '\xc1', '\xf0', '\x93', '\xe2', '\x58', '\x11', '\x33', + '\x45', '\xbb', '\xcf', '\xa2', '\x5d', '\x2e', '\xb0', '\xae', '\xd3', '\x88', '\xe9', '\x54', '\x98', + '\x1e', '\x62', '\xa6', '\x0a', '\x18', '\x59', '\xb1', '\x57', '\x5d', '\x50', '\x88', '\x9f', '\x2b', + '\x05', '\xe2', '\x97', '\x2c', '\xbd', '\x52', '\x00', '\xdb', '\x0c', '\x6f', '\x0b', '\x54', '\x51', + '\xa9', '\x3a', '\xaa', '\x27', '\x8f', '\x2c', '\x85', '\x0b', '\x58', '\xe2', '\x27', '\x52', '\x43', + '\x54', '\x88', '\xee', '\xd6', '\xf0', '\x56', '\x90', '\x66', '\x09', '\x33', '\xf0', '\x1f', '\x6e', + '\x10', '\x2a', '\x9e', '\xb5', '\xe9', '\xda', '\x2d', '\x86', '\xfc', '\x33', '\xaa', '\x7d', '\x3a', + '\xaa', '\x92', '\x19', '\x28', '\x73', '\x78', '\x88', '\xb8', '\x91', '\xaa', '\xcd', '\xbc', '\x67', + '\x09', '\xb5', '\xed', '\x03', '\xfe', '\x01', '\x7a', '\xec', '\xda', '\x43', '\x72', '\xd7', '\x77', + '\x89', '\xd7', '\x3d', '\xbe', '\xf1', '\xfc', '\xde', '\xd2', '\x79', '\x81', '\x8d', '\x16', '\x41', + '\x5f', '\xb0', '\xb8', '\x64', '\x34', '\xac', '\xa5', '\x81', '\x56', '\x2b', '\xf1', '\x3a', '\xc3', + '\xf4', '\x4e', '\x44', '\xce', '\x98', '\x61', '\x81', '\xcc', '\x55', '\x08', '\x2d', '\x5d', '\x73', + '\x9e', '\x70', '\x69', '\xfd', '\x79', '\x9a', '\x32', '\x75', '\x58', '\x96', '\x24', '\xc1', '\x62', + '\x50', '\x17', '\xd7', '\x7e', '\x2a', '\x78', '\x01', '\x5a', '\x23', '\x51', '\xb7', '\x90', '\xda', + '\x04', '\xbd', '\x20', '\x72', '\x8d', '\xa0', '\xc0', '\xb0', '\x70', '\x77', '\x8d', '\x45', '\x86', + '\x16', '\x71', '\xdc', '\x41', '\xad', '\x45', '\x8e', '\x11', '\xc7', '\xe9', '\x13', '\x7b', '\x70', + '\x6f', '\xa1', '\x93', '\x9c', '\x5a', '\x58', '\xb7', '\xfa', '\x36', '\xf0', '\xde', '\xf0', '\x69', + '\x8d', '\x6f', '\xbe', '\x00', '\x0a', '\x89', '\xb7', '\xa8' }; QByteArray retVal( stateData, sizeof( stateData ) ); @@ -435,38 +512,39 @@ QByteArray RiuDockWidgetTools::defaultPlotDockState() QByteArray RiuDockWidgetTools::hideAllDocking3DState() { static const char stateData[] = - { '\x00', '\x00', '\x05', '\x29', '\x78', '\xda', '\x95', '\x54', '\x4d', '\x53', '\xc2', '\x30', '\x10', - '\xbd', '\xfb', '\x2b', '\x32', '\xbd', '\x23', '\x05', '\xd4', '\xf1', '\xc0', '\xc7', '\x30', '\x20', - '\x33', '\x1e', '\x50', '\xa4', '\x7c', '\x1c', '\x9d', '\xd8', '\xae', '\x18', '\x4d', '\x13', '\x66', - '\x13', '\x40', '\x1c', '\x7f', '\xbc', '\xdb', '\x22', '\xb5', '\xad', '\xd0', '\xc2', '\xa9', '\xcd', - '\xbe', '\xb7', '\x9b', '\xf7', '\x92', '\x37', '\x69', '\x76', '\x3e', '\x43', '\xc9', '\xd6', '\x80', - '\x46', '\x68', '\xd5', '\x72', '\x6a', '\x97', '\xae', '\xc3', '\x40', '\xf9', '\x3a', '\x10', '\x6a', - '\xd1', '\x72', '\xa6', '\x93', '\x41', '\xe5', '\xd6', '\xe9', '\xb4', '\x9b', '\x4f', '\xb6', '\x1b', - '\xac', '\xb9', '\xf2', '\x21', '\xe8', '\x6b', '\xff', '\x83', '\x30', '\x6f', '\x6b', '\x2c', '\x84', - '\x6c', '\x96', '\x34', '\x3a', '\x6c', '\x6a', '\x00', '\xd3', '\xeb', '\x9e', '\x56', '\x96', '\x0b', - '\x45', '\x95', '\xdd', '\x12', '\x94', '\x45', '\x2e', '\xe7', '\x22', '\x58', '\x80', '\x6d', '\x39', - '\x8d', '\x3e', '\x9b', '\x09', '\xd8', '\x18', '\xa7', '\xdd', '\x4c', '\x88', '\x6c', '\x20', '\x35', - '\xb7', '\xf1', '\xce', '\x2e', '\xd5', '\xbd', '\xa5', '\x14', '\xd6', '\x52', '\xf9', '\x11', '\x05', - '\x35', '\x13', '\x12', '\x4d', '\xfe', '\x8e', '\x26', '\xaf', '\x14', '\x8d', '\xa8', '\x1f', '\xe5', - '\x54', '\x32', '\x9c', '\x2e', '\x02', '\x67', '\x13', '\xfe', '\x42', '\x3a', '\x1a', '\x04', '\xac', - '\x10', '\x21', '\x82', '\x42', '\xda', '\x73', '\x2e', '\x54', '\xa0', '\x37', '\xcf', '\x01', '\x99', - '\xf2', '\x7c', '\x14', '\x4b', '\x6b', '\x26', '\x08', '\x40', '\x3d', '\x3b', '\x99', '\xec', '\x81', - '\x87', '\xf0', '\x8f', '\x39', '\x42', '\xfd', '\x0e', '\xbe', '\x8d', '\x99', '\xac', '\x27', '\xb5', - '\x81', '\x20', '\x72', '\x58', '\x2d', '\xee', '\xea', '\x73', '\xcb', '\x3d', '\xbd', '\x42', '\x1f', - '\xce', '\x6c', '\x4c', '\x0b', '\xcb', '\x76', '\x55', '\x23', '\x67', '\x19', '\x7f', '\xb5', '\x94', - '\xbf', '\xa8', '\x77', '\x89', '\x7a', '\x09', '\x68', '\xb7', '\x77', '\x81', '\xb0', '\x1a', '\xf3', - '\xbe', '\x0e', '\x30', '\x0e', '\x6e', '\xe0', '\x89', '\x2f', '\x30', '\x6d', '\x97', '\xd5', '\xea', - '\xd7', '\x37', '\xac', '\x59', '\xdd', '\x2d', '\xe9', '\xfb', '\x7b', '\xf6', '\x67', '\xdf', '\x42', - '\x5a', '\x65', '\x92', '\x03', '\xba', '\x7c', '\xbe', '\x88', '\xc1', '\x9c', '\xca', '\x3f', '\xc6', - '\x5e', '\x9b', '\x9b', '\xd6', '\x56', '\x12', '\x92', '\x86', '\x53', '\x78', '\x40', '\x63', '\x30', - '\x2b', '\x69', '\xef', '\xd5', '\xab', '\x3e', '\x74', '\x38', '\x29', '\xb4', '\xec', '\xe4', '\xaf', - '\x72', '\x83', '\x47', '\x6b', '\x3b', '\x92', '\xda', '\x1e', '\x9f', '\x1a', '\xa3', '\x05', '\x29', - '\x88', '\x98', '\x43', '\xfd', '\x86', '\xa6', '\x27', '\xd0', '\x97', '\x70', '\x0a', '\x7d', '\x0c', - '\x72', '\x04', '\x18', '\x9e', '\x42', '\xdd', '\xcb', '\x2b', '\xb3', '\x55', '\xcf', '\xdb', '\x42', - '\xed', '\x83', '\x31', '\x43', '\xad', '\x8e', '\x05', '\x6a', '\x48', '\x30', '\x5f', '\x80', '\x29', - '\x55', '\x90', '\x9d', '\x54', '\x18', '\x3c', '\x97', '\x51', '\xf2', '\xdc', '\xc3', '\xd1', '\x8b', - '\x2b', '\x71', '\x32', '\x8b', '\x08', '\x05', '\x13', '\xaa', '\xc9', '\xfb', '\x43', '\xff', '\x47', - '\x1e', '\xba', '\xf6', '\xc5', '\x0f', '\xd0', '\x5d', '\xba', '\xc1' }; + { '\x00', '\x00', '\x06', '\x11', '\x78', '\xda', '\x95', '\x54', '\x4d', '\x53', '\xc2', '\x30', '\x10', + '\xbd', '\xfb', '\x2b', '\x32', '\xbd', '\x2b', '\x05', '\xd4', '\xf1', '\xc0', '\xc7', '\x30', '\xa0', + '\x33', '\x1e', '\x50', '\xb4', '\x20', '\x47', '\x27', '\xa6', '\x2b', '\x46', '\xd3', '\x84', '\xd9', + '\x2c', '\xf8', '\x31', '\xfe', '\x78', '\xb7', '\x05', '\x19', '\x29', '\xa5', '\x95', '\x53', '\xd3', + '\xdd', '\xf7', '\xf2', '\xde', '\x26', '\xbb', '\x69', '\x75', '\x3f', '\x12', '\x23', '\x96', '\x80', + '\x5e', '\x3b', '\xdb', '\x0e', '\xea', '\x27', '\x61', '\x20', '\xc0', '\x2a', '\x17', '\x6b', '\x3b', + '\x6b', '\x07', '\x93', '\xf1', '\xd5', '\xf1', '\x45', '\xd0', '\xed', '\xb4', '\xee', '\xa8', '\x17', + '\x2f', '\xa5', '\x55', '\x10', '\x0f', '\x9c', '\x7a', '\xe3', '\x5c', '\xf4', '\xe9', '\x09', '\x12', + '\xf1', '\xb0', '\x21', '\x06', '\x62', '\xe2', '\x01', '\x37', '\xff', '\x8d', '\x40', '\xf4', '\x9d', + '\x25', '\xa9', '\x2d', '\x47', '\xb2', '\x74', '\x1f', '\x2c', '\xa1', '\x34', '\x53', '\x1d', '\xcf', + '\x80', '\xda', '\x41', '\xcc', '\xfb', '\x34', '\x07', '\x53', '\x6d', '\x63', '\xf7', '\xfe', '\x98', + '\x30', '\x6e', '\xb5', '\x0c', '\x3a', '\xad', '\x0d', '\x4f', '\x5c', '\x19', '\x27', '\x29', '\x33', + '\x12', '\x72', '\x3c', '\x9a', '\x1b', '\x4d', '\xc4', '\xe1', '\x5b', '\xd4', '\xbc', '\x17', '\x67', + '\x52', '\xa1', '\xef', '\x54', '\x68', '\x61', '\x29', '\x95', '\xdc', '\x87', '\x39', '\xde', '\xc2', + '\xf4', '\x10', '\xa4', '\x18', '\xcb', '\x27', '\xb6', '\xd5', '\xe4', '\xc4', '\x02', '\x11', '\xec', + '\xda', '\x50', '\xa4', '\x50', '\xcf', '\xc9', '\x8f', '\x11', '\x60', '\xdb', '\xd3', '\xca', '\xb5', + '\xb8', '\x91', '\x09', '\xac', '\x90', '\x23', '\x74', '\xaf', '\xa0', '\x28', '\x8f', '\x14', '\x7d', + '\xe3', '\x3c', '\xc4', '\x69', '\xc1', '\xb5', '\x02', '\xd6', '\x40', '\x92', '\x8c', '\xdc', '\x02', + '\x15', '\x1c', '\x48', '\xdc', '\x63', '\x6c', '\x9b', '\x55', '\x4b', '\x2b', '\xdb', '\xaa', '\xaf', + '\x9e', '\xab', '\x8f', '\x5d', '\xcf', '\x01', '\xe9', '\xf3', '\x32', '\xd6', '\xe4', '\xb0', '\xba', + '\xc4', '\x3d', '\xe0', '\x42', '\xd9', '\x48', '\x7f', '\x81', '\xef', '\x84', '\xa2', '\xde', '\x38', + '\x3b', '\x17', '\xad', '\xda', '\xea', '\x97', '\xbf', '\xeb', '\x1b', '\x39', '\xf8', '\x6e', '\xf2', + '\xde', '\x8b', '\x9a', '\x85', '\x3b', '\x44', '\xce', '\x32', '\x6c', '\x81', '\xff', '\x42', '\xc2', + '\xaf', '\xf3', '\xf0', '\xaf', '\xf3', '\x8a', '\xc6', '\x6a', '\x96', '\x1b', '\xbb', '\x07', '\xbf', + '\x30', '\x74', '\x6d', '\x9f', '\x5d', '\xc5', '\x81', '\x16', '\x03', '\xab', '\xee', '\xf0', '\x34', + '\x27', '\x37', '\x74', '\x2f', '\xe8', '\xfb', '\x1a', '\x95', '\x81', '\x91', '\x71', '\xf4', '\x2f', + '\xcd', '\x3c', '\xb0', '\xa2', '\xdb', '\x4a', '\x24', '\x2a', '\x98', '\xf7', '\x60', '\x46', '\x80', + '\xc9', '\x81', '\xac', '\xd1', '\xb2', '\xc2', '\xe1', '\xee', '\xa9', '\xe4', '\x27', '\x77', '\xc2', + '\xac', '\x88', '\xa4', '\x7a', '\xab', '\x38', '\x8f', '\x21', '\x78', '\x2f', '\x67', '\xe0', '\x0f', + '\x71', '\x87', '\x4e', '\x31', '\x6b', '\xe8', '\x6c', '\xf9', '\x1c', '\xec', '\x10', '\x0b', '\x3d', + '\x95', '\xce', '\x4e', '\x28', '\x78', '\x78', '\xc2', '\xe2', '\xe9', '\xc9', '\x22', '\xd9', '\x70', + '\x95', '\x01', '\x4a', '\x76', '\xa8', '\x6d', '\x1e', '\x56', '\x5e', '\xef', '\x79', '\xd0', '\x3b', + '\x47', '\x3f', '\x6f', '\xaf', '\x16', '\x81' }; QByteArray retVal( stateData, sizeof( stateData ) ); @@ -479,35 +557,36 @@ QByteArray RiuDockWidgetTools::hideAllDocking3DState() QByteArray RiuDockWidgetTools::hideAllDockingPlotState() { static const char stateData[] = - { '\x00', '\x00', '\x04', '\x78', '\x78', '\xda', '\xa5', '\x54', '\xc1', '\x4e', '\x83', '\x40', '\x10', - '\xbd', '\xfb', '\x15', '\x1b', '\xee', '\x15', '\x4a', '\xa3', '\xe9', '\x81', '\xd2', '\x34', '\xad', - '\xbd', '\x55', '\x6b', '\xa0', '\xf6', '\x68', '\x56', '\x76', '\x42', '\x36', '\x2e', '\xbb', '\x64', - '\x77', '\xa9', '\xd6', '\xf8', '\xf1', '\x0e', '\x60', '\x09', '\x98', '\x62', '\x6b', '\x3d', '\xc1', - '\xcc', '\xbc', '\x37', '\xf3', '\xde', '\xce', '\x42', '\x30', '\x7d', '\xcf', '\x04', '\xd9', '\x81', - '\x36', '\x5c', '\xc9', '\x89', '\x33', '\xbc', '\xf6', '\x1c', '\x02', '\x32', '\x51', '\x8c', '\xcb', - '\x74', '\xe2', '\x6c', '\xe2', '\xe5', '\x60', '\xec', '\x4c', '\xc3', '\xe0', '\xd1', '\xce', '\xd8', - '\x8e', '\xca', '\x04', '\xd8', '\x42', '\x25', '\xaf', '\x58', '\x8b', '\xf6', '\xc6', '\x42', '\x46', - '\x9e', '\x1a', '\xa2', '\x43', '\x36', '\x06', '\x74', '\x3b', '\x9e', '\x2b', '\x69', '\x29', '\x97', - '\x98', '\xa9', '\x43', '\x90', '\x56', '\x53', '\xb1', '\xe5', '\x2c', '\x05', '\x3b', '\x71', '\xd6', - '\x42', '\x59', '\xb2', '\xe5', '\x92', '\xa9', '\x37', '\x27', '\x0c', '\x1a', '\x2c', '\x59', '\x0a', - '\x45', '\x6d', '\x35', '\xdc', '\xc3', '\x7c', '\x94', '\x0b', '\x6e', '\x2d', '\xa6', '\x1f', '\x34', - '\x47', '\x3e', '\x56', '\xca', '\xe6', '\x9f', '\x65', '\xf3', '\x42', '\x62', '\x97', '\x51', '\x2f', - '\x66', '\xd0', '\x60', '\x7c', '\xc4', '\xcc', '\x34', '\x50', '\x12', '\xd3', '\x17', '\x53', '\x52', - '\xc8', '\xbc', '\xd0', '\x1a', '\xca', '\x52', '\x8e', '\x22', '\x56', '\x38', '\xb7', '\xd6', '\xf1', - '\xcc', '\xd0', '\x5b', '\x94', '\x68', '\x9e', '\x5b', '\x13', '\x6b', '\x00', '\xe4', '\xd5', '\x6a', - '\xc9', '\x3d', '\xcd', '\xe0', '\x28', '\xba', '\x74', '\x51', '\x63', '\xc9', '\x5c', '\x28', '\x03', - '\xac', '\xb4', '\xea', '\x9e', '\xe6', '\xc5', '\x90', '\xe5', '\x82', '\x5a', '\xb8', '\x84', '\xdb', - '\x56', '\xd8', '\x65', '\xba', '\xa5', '\xcd', '\x8e', '\xd9', '\xe1', '\xef', '\x66', '\xd7', '\x5a', - '\xe5', '\xa0', '\xed', '\xfe', '\x8e', '\x71', '\xab', '\xf4', '\x39', '\x7e', '\xbb', '\x84', '\xa3', - '\xe3', '\x23', '\xfe', '\x01', '\x26', '\xf4', '\xc8', '\xd0', '\x1f', '\x8f', '\x48', '\xe0', '\xd6', - '\x21', '\x3e', '\xbf', '\xd7', '\xd4', '\xab', '\xaf', '\x7d', '\x23', '\xf0', '\x1a', '\xd0', '\xb4', - '\xaa', '\xff', '\xd0', '\xd4', '\x01', '\x1d', '\xa6', '\x7b', '\xed', '\xe9', '\x7f', '\xbb', '\x0d', - '\x7e', '\x4b', '\x40', '\x75', '\xb8', '\x45', '\x96', '\x51', '\xbd', '\x5f', '\x57', '\xd6', '\x25', - '\x4d', '\xe1', '\x9c', '\x53', '\x59', '\x50', '\x4b', '\x23', '\x55', '\xe8', '\x04', '\x4e', '\xad', - '\xb3', '\x67', '\xc4', '\x3f', '\xd7', '\xb8', '\x02', '\x63', '\xb0', '\x8f', '\x39', '\x43', '\x6a', - '\x03', '\xbd', '\x6c', '\x75', '\x07', '\x80', '\x7f', '\x73', '\xeb', '\x11', '\xef', '\x28', '\xc4', - '\x6d', '\xbe', '\x65', '\x7c', '\xef', '\xf9', '\x6f', '\x84', '\x57', '\x5f', '\x87', '\xd7', '\x88', - '\x5d' }; + { '\x00', '\x00', '\x04', '\xe7', '\x78', '\xda', '\x9d', '\x94', '\x51', '\x6f', '\x82', '\x30', '\x14', + '\x85', '\xdf', '\xf7', '\x2b', '\x9a', '\xbe', '\x3b', '\x10', '\xb3', '\xc5', '\x07', '\xc4', '\x18', + '\x9c', '\x6f', '\x6e', '\x2e', '\xe0', '\x7c', '\x34', '\x1d', '\xdc', '\x90', '\x46', '\x68', '\x49', + '\x5b', '\xdc', '\x5c', '\xf6', '\xe3', '\x77', '\x41', '\xc5', '\xe9', '\xc0', '\xa9', '\x4f', '\xd0', + '\xf6', '\x9c', '\x9e', '\xef', '\x72', '\x6f', '\x70', '\x87', '\x9f', '\x59', '\x4a', '\xd6', '\xa0', + '\x34', '\x97', '\x62', '\x40', '\xbb', '\xf7', '\x36', '\x25', '\x20', '\x22', '\x19', '\x73', '\x91', + '\x0c', '\xe8', '\x3c', '\x9c', '\x74', '\xfa', '\x74', '\xe8', '\xb9', '\xaf', '\x66', '\x14', '\xaf', + '\x99', '\x88', '\x20', '\x1e', '\xcb', '\x68', '\x85', '\x67', '\xc1', '\x46', '\x1b', '\xc8', '\xc8', + '\x5b', '\x6d', '\xa4', '\x64', '\xae', '\x41', '\xd5', '\x6b', '\x87', '\x12', '\x5f', '\x0a', '\xc3', + '\xb8', '\xc0', '\x9d', '\xea', '\xd8', '\x07', '\x61', '\x14', '\x4b', '\x17', '\x3c', '\x4e', '\xc0', + '\x0c', '\x68', '\x8c', '\xf7', '\xcc', '\x52', '\x69', '\x16', '\x5c', '\xc4', '\xf2', '\x63', '\x99', + '\xa1', '\xf2', '\xb0', '\xa4', '\x9e', '\x5b', '\xbb', '\xc9', '\x24', '\x95', '\xcc', '\x54', '\x38', + '\x36', '\xee', '\x07', '\x79', '\xca', '\x8d', '\xc1', '\xed', '\x17', '\xc5', '\xf1', '\x46', '\x3c', + '\x29', '\xe3', '\xbe', '\xcb', '\xb8', '\x42', '\xe0', '\xbd', '\xbd', '\x56', '\x4d', '\xa7', '\xd6', + '\x38', '\xa8', '\x19', '\x29', '\x60', '\x24', '\x64', '\xef', '\xba', '\xb4', '\x10', '\xbf', '\x50', + '\x0a', '\xc4', '\x0e', '\x2b', '\x88', '\x14', '\xcf', '\x8d', '\x0e', '\x15', '\xc0', '\x32', '\x47', + '\xa6', '\x29', '\x72', '\xd4', '\x5c', '\x5b', '\x7e', '\xf2', '\xcc', '\x32', '\x38', '\x14', '\xd1', + '\xa8', '\x25', '\x7e', '\x2a', '\x35', '\xc4', '\x65', '\xf1', '\x56', '\x83', '\x2f', '\x84', '\x2c', + '\x4f', '\x99', '\x81', '\x5b', '\xbc', '\x67', '\x08', '\x8f', '\x9d', '\x56', '\x59', '\xe6', '\x51', + '\xb1', '\xdd', '\x93', '\x62', '\x67', '\x4a', '\xe6', '\xa0', '\xcc', '\xe6', '\x29', '\xe6', '\x46', + '\xaa', '\x4b', '\xea', '\x3d', '\x6b', '\x68', '\x8c', '\x0f', '\xf8', '\x17', '\x68', '\xcf', '\x26', + '\x5d', '\xa7', '\xdf', '\x23', '\xae', '\xb5', '\x5d', '\xe2', '\x73', '\xd7', '\xa6', '\xf3', '\x7c', + '\xad', '\x33', '\x82', '\x83', '\xc1', '\x92', '\xca', '\xd1', '\xd2', '\x95', '\x16', '\xdb', '\x9e', + '\xd0', '\xfe', '\x4d', '\x78', '\xdd', '\xc4', '\x38', '\xa7', '\x13', '\x53', '\x64', '\x19', '\x53', + '\x9b', '\x59', '\xf5', '\x2d', '\x04', '\x4b', '\x40', '\x35', '\x31', '\x8d', '\x99', '\x61', '\x81', + '\x2c', '\x54', '\x04', '\xb7', '\xb4', '\xfc', '\x6f', '\xc4', '\x7f', '\xad', '\x3e', '\xa5', '\x9c', + '\x63', '\x4e', '\x60', '\x58', '\xb4', '\xba', '\xa0', '\xcb', '\x53', '\xd0', '\x1a', '\x43', '\xf4', + '\x95', '\x94', '\xad', '\x11', '\xb7', '\xcd', '\xc5', '\x5e', '\xe0', '\x3c', '\x3c', '\xda', '\xc4', + '\x6e', '\x94', '\x58', '\xf5', '\x8f', '\x02', '\xdf', '\x5b', '\x7e', '\x53', '\xde', '\xdd', '\x0f', + '\x36', '\x41', '\xb3', '\x2a' }; QByteArray retVal( stateData, sizeof( stateData ) ); diff --git a/ApplicationLibCode/UserInterface/RiuDockWidgetTools.h b/ApplicationLibCode/UserInterface/RiuDockWidgetTools.h index 765d339678..6a4f4cb801 100644 --- a/ApplicationLibCode/UserInterface/RiuDockWidgetTools.h +++ b/ApplicationLibCode/UserInterface/RiuDockWidgetTools.h @@ -42,17 +42,20 @@ class CDockManager; class RiuDockWidgetTools { public: - static QString projectTreeName(); - static QString propertyEditorName(); - static QString resultInfoName(); - static QString processMonitorName(); - static QString resultPlotName(); - static QString relPermPlotName(); - static QString pvtPlotName(); - static QString messagesName(); - static QString mohrsCirclePlotName(); - static QString undoStackName(); - static QString summaryPlotManagerName(); + static ads::CDockWidget* createDockWidget( QString title, QString dockName, QWidget* parent ); + + static QString mainPlotWindowName(); + static QString main3DWindowName(); + + static QString mainWindowPropertyEditorName(); + static QString mainWindowResultInfoName(); + static QString mainWindowProcessMonitorName(); + static QString mainWindowResultPlotName(); + static QString mainWindowRelPermPlotName(); + static QString mainWindowPvtPlotName(); + static QString mainWindowMessagesName(); + static QString mainWindowMohrsCirclePlotName(); + static QString mainWindowUndoStackName(); static QString mainWindowProjectTreeName(); static QString mainWindowDataSourceTreeName(); @@ -66,6 +69,7 @@ public: static QString plotMainWindowPropertyEditorName(); static QString plotMainWindowMessagesName(); static QString plotMainWindowUndoStackName(); + static QString plotMainWindowPlotManagerName(); static QString dockState3DEclipseName(); static QString dockState3DGeoMechName(); @@ -83,6 +87,8 @@ public: static QByteArray hideAllDocking3DState(); static QByteArray hideAllDockingPlotState(); + static QIcon dockIcon( const QString dockWidgetName ); + private: static QByteArray defaultEclipseDockState(); static QByteArray defaultGeoMechDockState(); diff --git a/ApplicationLibCode/UserInterface/RiuMainWindow.cpp b/ApplicationLibCode/UserInterface/RiuMainWindow.cpp index 8ba196b417..ef5c2886c0 100644 --- a/ApplicationLibCode/UserInterface/RiuMainWindow.cpp +++ b/ApplicationLibCode/UserInterface/RiuMainWindow.cpp @@ -128,9 +128,10 @@ RiuMainWindow::RiuMainWindow() m_mdiArea = new RiuMdiArea( this ); connect( m_mdiArea, SIGNAL( subWindowActivated( QMdiSubWindow* ) ), SLOT( slotSubWindowActivated( QMdiSubWindow* ) ) ); - ads::CDockWidget* widget = new ads::CDockWidget( "3D Views", this ); - widget->setWidget( m_mdiArea ); - dockManager()->setCentralWidget( widget ); + ads::CDockWidget* cWidget = + RiuDockWidgetTools::createDockWidget( "3D Views", RiuDockWidgetTools::main3DWindowName(), this ); + cWidget->setWidget( m_mdiArea ); + dockManager()->setCentralWidget( cWidget ); createActions(); createMenus(); @@ -748,8 +749,7 @@ void RiuMainWindow::createDockPanels() for ( int i = 0; i < nTreeViews; i++ ) { - ads::CDockWidget* dockWidget = new ads::CDockWidget( treeViewTitles[i], dockManager() ); - dockWidget->setObjectName( treeViewDockNames[i] ); + auto dockWidget = RiuDockWidgetTools::createDockWidget( treeViewTitles[i], treeViewDockNames[i], dockManager() ); caf::PdmUiTreeView* projectTree = projectTreeView( i ); projectTree->enableSelectionManagerUpdating( true ); @@ -789,15 +789,18 @@ void RiuMainWindow::createDockPanels() // undo/redo view if ( m_undoView && RiaPreferences::current()->useUndoRedo() ) { - ads::CDockWidget* dockWidget = new ads::CDockWidget( "Undo Stack", dockManager() ); - dockWidget->setObjectName( RiuDockWidgetTools::undoStackName() ); + auto dockWidget = RiuDockWidgetTools::createDockWidget( "Undo Stack", + RiuDockWidgetTools::mainWindowUndoStackName(), + dockManager() ); dockWidget->setWidget( m_undoView ); rightWidgets.push_back( dockWidget ); } { - ads::CDockWidget* dockWidget = new ads::CDockWidget( "Result Plot", dockManager() ); - dockWidget->setObjectName( RiuDockWidgetTools::resultPlotName() ); + auto dockWidget = RiuDockWidgetTools::createDockWidget( "Result Plot", + RiuDockWidgetTools::mainWindowResultPlotName(), + dockManager() ); + m_resultQwtPlot = new RiuResultQwtPlot( dockWidget ); dockWidget->setWidget( m_resultQwtPlot ); bottomWidgets.push_back( dockWidget ); @@ -810,8 +813,9 @@ void RiuMainWindow::createDockPanels() dockManager()->centralWidget()->dockAreaWidget() ); { - ads::CDockWidget* dockWidget = new ads::CDockWidget( "Property Editor", dockManager() ); - dockWidget->setObjectName( RiuDockWidgetTools::propertyEditorName() ); + auto dockWidget = RiuDockWidgetTools::createDockWidget( "Property Editor", + RiuDockWidgetTools::mainWindowPropertyEditorName(), + dockManager() ); m_pdmUiPropertyView = new caf::PdmUiPropertyView( dockWidget ); dockWidget->setWidget( m_pdmUiPropertyView ); @@ -820,8 +824,10 @@ void RiuMainWindow::createDockPanels() #ifdef USE_ODB_API { - ads::CDockWidget* dockWidget = new ads::CDockWidget( "Mohr's Circle Plot", dockManager() ); - dockWidget->setObjectName( RiuDockWidgetTools::mohrsCirclePlotName() ); + auto dockWidget = RiuDockWidgetTools::createDockWidget( "Mohr's Circle Plot", + RiuDockWidgetTools::mainWindowMohrsCirclePlotName(), + dockManager() ); + m_mohrsCirclePlot = new RiuMohrsCirclePlot( dockWidget ); dockWidget->setWidget( m_mohrsCirclePlot ); dockManager()->addDockWidgetTabToArea( dockWidget, bottomArea ); @@ -829,16 +835,19 @@ void RiuMainWindow::createDockPanels() #endif { - ads::CDockWidget* dockWidget = new ads::CDockWidget( "Relative Permeability Plot", dockManager() ); - dockWidget->setObjectName( RiuDockWidgetTools::relPermPlotName() ); + auto dockWidget = RiuDockWidgetTools::createDockWidget( "Relative Permeability Plot", + RiuDockWidgetTools::mainWindowRelPermPlotName(), + dockManager() ); + m_relPermPlotPanel = new RiuRelativePermeabilityPlotPanel( dockWidget ); dockWidget->setWidget( m_relPermPlotPanel ); dockManager()->addDockWidgetTabToArea( dockWidget, bottomArea ); } { - ads::CDockWidget* dockWidget = new ads::CDockWidget( "PVT Plot", dockManager() ); - dockWidget->setObjectName( RiuDockWidgetTools::pvtPlotName() ); + auto dockWidget = + RiuDockWidgetTools::createDockWidget( "PVT Plot", RiuDockWidgetTools::mainWindowPvtPlotName(), dockManager() ); + m_pvtPlotPanel = new RiuPvtPlotPanel( dockWidget ); dockWidget->setWidget( m_pvtPlotPanel ); dockManager()->addDockWidgetTabToArea( dockWidget, bottomArea ); @@ -846,8 +855,10 @@ void RiuMainWindow::createDockPanels() // result info { - ads::CDockWidget* dockWidget = new ads::CDockWidget( "Result Info", dockManager() ); - dockWidget->setObjectName( RiuDockWidgetTools::resultInfoName() ); + auto dockWidget = RiuDockWidgetTools::createDockWidget( "Result Info", + RiuDockWidgetTools::mainWindowResultInfoName(), + dockManager() ); + m_resultInfoPanel = new RiuResultInfoPanel( dockWidget ); dockWidget->setWidget( m_resultInfoPanel ); dockManager()->addDockWidget( ads::DockWidgetArea::LeftDockWidgetArea, dockWidget, bottomArea ); @@ -856,16 +867,19 @@ void RiuMainWindow::createDockPanels() ads::CDockAreaWidget* procAndMsgTabs = nullptr; // process monitor { - ads::CDockWidget* dockWidget = new ads::CDockWidget( "Process Monitor", dockManager() ); - dockWidget->setObjectName( RiuDockWidgetTools::processMonitorName() ); + auto dockWidget = RiuDockWidgetTools::createDockWidget( "Process Monitor", + RiuDockWidgetTools::mainWindowProcessMonitorName(), + dockManager() ); + m_processMonitor = new RiuProcessMonitor( dockWidget ); dockWidget->setWidget( m_processMonitor ); procAndMsgTabs = dockManager()->addDockWidget( ads::DockWidgetArea::RightDockWidgetArea, dockWidget, bottomArea ); } { - ads::CDockWidget* dockWidget = new ads::CDockWidget( "Messages", dockManager() ); - dockWidget->setObjectName( RiuDockWidgetTools::messagesName() ); + auto dockWidget = + RiuDockWidgetTools::createDockWidget( "Messages", RiuDockWidgetTools::mainWindowMessagesName(), dockManager() ); + m_messagePanel = new RiuMessagePanel( dockWidget ); dockWidget->setWidget( m_messagePanel ); dockManager()->addDockWidgetTabToArea( dockWidget, procAndMsgTabs ); @@ -1752,7 +1766,7 @@ void RiuMainWindow::updateMemoryUsage() //-------------------------------------------------------------------------------------------------- void RiuMainWindow::showProcessMonitorDockPanel() { - RiuDockWidgetTools::showDockWidget( this->dockManager(), RiuDockWidgetTools::processMonitorName() ); + RiuDockWidgetTools::showDockWidget( this->dockManager(), RiuDockWidgetTools::mainWindowProcessMonitorName() ); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/UserInterface/RiuMainWindowBase.cpp b/ApplicationLibCode/UserInterface/RiuMainWindowBase.cpp index 163459718a..1185c1c4f7 100644 --- a/ApplicationLibCode/UserInterface/RiuMainWindowBase.cpp +++ b/ApplicationLibCode/UserInterface/RiuMainWindowBase.cpp @@ -50,7 +50,7 @@ #include #include -#define DOCKSTATE_VERSION 1 +#define DOCKSTATE_VERSION 2 //-------------------------------------------------------------------------------------------------- /// @@ -154,9 +154,17 @@ void RiuMainWindowBase::loadWinGeoAndDockToolBarLayout() } } } + + bool dockingOk = false; + if ( dockState.isValid() ) { - m_dockManager->restoreState( dockState.toByteArray(), DOCKSTATE_VERSION ); + dockingOk = m_dockManager->restoreState( dockState.toByteArray(), DOCKSTATE_VERSION ); + } + + if ( !dockingOk ) + { + m_dockManager->restoreState( RiuDockWidgetTools::defaultDockState( defaultDockStateNames()[0] ), DOCKSTATE_VERSION ); } settings.beginGroup( registryFolderName() ); @@ -692,11 +700,15 @@ void RiuMainWindowBase::saveDockLayout() //-------------------------------------------------------------------------------------------------- void RiuMainWindowBase::addDefaultEntriesToWindowsMenu() { - QMenu* showHideMenu = m_windowMenu->addMenu( "Show/Hide Windows" ); + QMenu* dockWindowsMenu = m_windowMenu->addMenu( QIcon( ":/window-management.svg" ), "Windows" ); - for ( auto dock : dockManager()->dockWidgetsMap() ) + auto dockMap = dockManager()->dockWidgetsMap(); + auto keys = dockMap.keys(); + keys.sort(); + for ( auto& key : keys ) { - showHideMenu->addAction( dock->toggleViewAction() ); + auto dock = dockMap[key]; + dockWindowsMenu->addAction( dock->toggleViewAction() ); } m_windowMenu->addSeparator(); diff --git a/ApplicationLibCode/UserInterface/RiuPlotMainWindow.cpp b/ApplicationLibCode/UserInterface/RiuPlotMainWindow.cpp index 5ddaee005c..7813716ebd 100644 --- a/ApplicationLibCode/UserInterface/RiuPlotMainWindow.cpp +++ b/ApplicationLibCode/UserInterface/RiuPlotMainWindow.cpp @@ -89,9 +89,11 @@ RiuPlotMainWindow::RiuPlotMainWindow() m_mdiArea = new RiuMdiArea( this ); connect( m_mdiArea, SIGNAL( subWindowActivated( QMdiSubWindow* ) ), SLOT( slotSubWindowActivated( QMdiSubWindow* ) ) ); - ads::CDockWidget* widget = new ads::CDockWidget( "Plot Window", this ); - widget->setWidget( m_mdiArea ); - auto dockArea = dockManager()->setCentralWidget( widget ); + ads::CDockWidget* cWidget = + RiuDockWidgetTools::createDockWidget( "Plot Window", RiuDockWidgetTools::mainPlotWindowName(), this ); + + cWidget->setWidget( m_mdiArea ); + auto dockArea = dockManager()->setCentralWidget( cWidget ); dockArea->setVisible( true ); m_toggleSelectionLinkAction = new QAction( QIcon( ":/Link3DandPlots.png" ), tr( "Link With Selection in 3D" ), this ); @@ -524,8 +526,7 @@ void RiuPlotMainWindow::createDockPanels() // the project trees for ( int i = 0; i < nTreeViews; i++ ) { - ads::CDockWidget* dockWidget = new ads::CDockWidget( treeViewTitles[i], dockManager() ); - dockWidget->setObjectName( treeViewDockNames[i] ); + auto dockWidget = RiuDockWidgetTools::createDockWidget( treeViewTitles[i], treeViewDockNames[i], dockManager() ); caf::PdmUiTreeView* projectTree = projectTreeView( i ); projectTree->enableSelectionManagerUpdating( true ); @@ -564,8 +565,9 @@ void RiuPlotMainWindow::createDockPanels() // the plot manager { - ads::CDockWidget* dockWidget = new ads::CDockWidget( "Plot Manager", dockManager() ); - dockWidget->setObjectName( RiuDockWidgetTools::summaryPlotManagerName() ); + auto dockWidget = RiuDockWidgetTools::createDockWidget( "Plot Manager", + RiuDockWidgetTools::plotMainWindowPlotManagerName(), + dockManager() ); m_summaryPlotManagerView = std::make_unique( dockWidget ); @@ -582,8 +584,10 @@ void RiuPlotMainWindow::createDockPanels() // the undo stack if ( m_undoView && RiaPreferences::current()->useUndoRedo() ) { - ads::CDockWidget* dockWidget = new ads::CDockWidget( "Undo Stack", dockManager() ); - dockWidget->setObjectName( RiuDockWidgetTools::plotMainWindowUndoStackName() ); + auto dockWidget = RiuDockWidgetTools::createDockWidget( "Undo Stack", + RiuDockWidgetTools::plotMainWindowUndoStackName(), + dockManager() ); + dockWidget->setWidget( m_undoView ); rightWidgets.push_back( dockWidget ); } @@ -596,8 +600,9 @@ void RiuPlotMainWindow::createDockPanels() // the property editor { - ads::CDockWidget* dockWidget = new ads::CDockWidget( "Property Editor", dockManager() ); - dockWidget->setObjectName( RiuDockWidgetTools::plotMainWindowPropertyEditorName() ); + auto dockWidget = RiuDockWidgetTools::createDockWidget( "Property Editor", + RiuDockWidgetTools::plotMainWindowPropertyEditorName(), + dockManager() ); m_pdmUiPropertyView = std::make_unique( dockWidget ); dockWidget->setWidget( m_pdmUiPropertyView.get() ); @@ -606,8 +611,10 @@ void RiuPlotMainWindow::createDockPanels() // the log message view { - ads::CDockWidget* dockWidget = new ads::CDockWidget( "Messages", dockManager() ); - dockWidget->setObjectName( RiuDockWidgetTools::plotMainWindowMessagesName() ); + auto dockWidget = RiuDockWidgetTools::createDockWidget( "Messages", + RiuDockWidgetTools::plotMainWindowMessagesName(), + dockManager() ); + m_messagePanel = new RiuMessagePanel( dockWidget ); dockWidget->setWidget( m_messagePanel ); dockManager()->addDockWidget( ads::DockWidgetArea::BottomDockWidgetArea, dockWidget, rightArea ); @@ -806,7 +813,7 @@ RiuMessagePanel* RiuPlotMainWindow::messagePanel() void RiuPlotMainWindow::showAndSetKeyboardFocusToSummaryPlotManager() { auto dockWidget = - RiuDockWidgetTools::findDockWidget( this->dockManager(), RiuDockWidgetTools::summaryPlotManagerName() ); + RiuDockWidgetTools::findDockWidget( this->dockManager(), RiuDockWidgetTools::plotMainWindowPlotManagerName() ); if ( dockWidget ) { dockWidget->setVisible( true ); From b910275886a97b7c6f2a865fbee268e5d8172e29 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Fri, 19 Aug 2022 15:26:46 +0200 Subject: [PATCH 075/129] Show log message when data from WSEGLINK is imported --- ApplicationLibCode/FileInterface/RifReaderOpmRft.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/ApplicationLibCode/FileInterface/RifReaderOpmRft.cpp b/ApplicationLibCode/FileInterface/RifReaderOpmRft.cpp index 480e05aae9..97990d3835 100644 --- a/ApplicationLibCode/FileInterface/RifReaderOpmRft.cpp +++ b/ApplicationLibCode/FileInterface/RifReaderOpmRft.cpp @@ -270,6 +270,14 @@ void RifReaderOpmRft::cellIndices( const RifEclipseRftAddress& rftAddress, std:: void RifReaderOpmRft::readWseglink( const std::string& filePath ) { m_wseglink = RiaOpmParserTools::extractWseglink( filePath ); + + if ( !m_wseglink.empty() ) + { + QString text = QString( "Imported segment data from %1\n" ).arg( QString::fromStdString( filePath ) ); + text += QString( "Number of wells: %1\n" ).arg( m_wseglink.size() ); + + RiaLogging::info( text ); + } } //-------------------------------------------------------------------------------------------------- From 375caf2f2db7421d234fbc484022de363c4d5aaf Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Mon, 22 Aug 2022 07:43:07 +0200 Subject: [PATCH 076/129] Add Export Property to right-click menu in 3D view --- ApplicationLibCode/UserInterface/RiuViewerCommands.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ApplicationLibCode/UserInterface/RiuViewerCommands.cpp b/ApplicationLibCode/UserInterface/RiuViewerCommands.cpp index 46b1d5e34a..ad3b5694e2 100644 --- a/ApplicationLibCode/UserInterface/RiuViewerCommands.cpp +++ b/ApplicationLibCode/UserInterface/RiuViewerCommands.cpp @@ -649,6 +649,8 @@ void RiuViewerCommands::displayContextMenu( QMouseEvent* event ) menuBuilder.addSeparator(); menuBuilder << "RicExportEclipseInputGridFeature"; menuBuilder << "RicSaveEclipseInputActiveVisibleCellsFeature"; + menuBuilder << "RicSaveEclipseResultAsInputPropertyFeature"; + #ifdef USE_QTCHARTS menuBuilder << "RicCreateGridStatisticsPlotFeature"; #endif From ffc14e2b2e6e65b1aeb84debbc4e78e7232e1897 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Mon, 22 Aug 2022 10:56:33 +0200 Subject: [PATCH 077/129] RFT: Add connection data as segment results --- .../FileInterface/RifReaderOpmRft.cpp | 49 ++++++++++++++----- .../FileInterface/RifRftSegment.cpp | 17 +++++++ .../FileInterface/RifRftSegment.h | 2 + 3 files changed, 56 insertions(+), 12 deletions(-) diff --git a/ApplicationLibCode/FileInterface/RifReaderOpmRft.cpp b/ApplicationLibCode/FileInterface/RifReaderOpmRft.cpp index 97990d3835..5a030f4773 100644 --- a/ApplicationLibCode/FileInterface/RifReaderOpmRft.cpp +++ b/ApplicationLibCode/FileInterface/RifReaderOpmRft.cpp @@ -124,12 +124,43 @@ void RifReaderOpmRft::values( const RifEclipseRftAddress& rftAddress, std::vecto auto key = std::make_pair( wellName, RftDate{ y, m, d } ); auto segment = m_rftWellDateSegments[key]; - auto indices = - segment.indicesForBranchIndex( rftAddress.segmentBranchIndex(), rftAddress.segmentBranchType() ); - for ( const auto& i : indices ) + if ( resultName.find( "CON" ) == 0 ) { - CAF_ASSERT( i < data.size() ); - values->push_back( data[i] ); + // Connection results with size equal to length of result CONSEGNO. CONSEGNO defines the segment + // numbers the connection is connected to. + + const std::string consegResultName = "CONSEGNO"; + auto connnectionSegmentNumbers = m_opm_rft->getRft( consegResultName, wellName, y, m, d ); + if ( connnectionSegmentNumbers.empty() ) return; + + auto segmentNumbers = segment.segmentNumbersForBranchIndex( rftAddress.segmentBranchIndex(), + rftAddress.segmentBranchType() ); + + size_t resultDataIndex = 0; + for ( int segmentNumber : segmentNumbers ) + { + if ( std::find( connnectionSegmentNumbers.begin(), connnectionSegmentNumbers.end(), segmentNumber ) != + connnectionSegmentNumbers.end() ) + { + values->push_back( data[resultDataIndex++] ); + } + else + { + // The number of values must be equal to the number of segments, use infinity for segments + // with no data + values->push_back( std::numeric_limits::infinity() ); + } + } + } + else + { + auto indices = + segment.indicesForBranchIndex( rftAddress.segmentBranchIndex(), rftAddress.segmentBranchType() ); + for ( const auto& i : indices ) + { + CAF_ASSERT( i < data.size() ); + values->push_back( data[i] ); + } } } else @@ -356,14 +387,8 @@ void RifReaderOpmRft::buildMetaData() m_rftSegmentTimeSteps.insert( dt ); - auto segmentCount = segmentData.topology().size(); - for ( const auto& resultNameAndSize : resultNameAndSizes ) { - auto resultValueCount = std::get<2>( resultNameAndSize ); - - if ( static_cast( resultValueCount ) != segmentCount ) continue; - auto resultName = std::get<0>( resultNameAndSize ); auto adr = RifEclipseRftAddress::createSegmentAddress( QString::fromStdString( wellName ), dt, @@ -441,7 +466,7 @@ void RifReaderOpmRft::buildSegmentData() for ( const auto& rftResultMetaData : arraysAtWellDate ) { auto [name, arrayType, size] = rftResultMetaData; - if ( name.find( "SEG" ) == 0 ) + if ( ( name.find( "SEG" ) == 0 ) || ( name.find( "CON" ) == 0 ) ) { segment.addResultNameAndSize( rftResultMetaData ); } diff --git a/ApplicationLibCode/FileInterface/RifRftSegment.cpp b/ApplicationLibCode/FileInterface/RifRftSegment.cpp index 6969e55228..2392702fc7 100644 --- a/ApplicationLibCode/FileInterface/RifRftSegment.cpp +++ b/ApplicationLibCode/FileInterface/RifRftSegment.cpp @@ -285,3 +285,20 @@ std::vector RifRftSegment::indicesForBranchIndex( int branchIndex, RiaDe return v; } + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::vector RifRftSegment::segmentNumbersForBranchIndex( int oneBasedBranchIndex, + RiaDefines::RftBranchType branchType ) const +{ + std::vector v; + + auto indices = indicesForBranchIndex( oneBasedBranchIndex, branchType ); + for ( auto index : indices ) + { + v.push_back( m_topology[index].segNo() ); + } + + return v; +} diff --git a/ApplicationLibCode/FileInterface/RifRftSegment.h b/ApplicationLibCode/FileInterface/RifRftSegment.h index f8194f5815..6276a0953f 100644 --- a/ApplicationLibCode/FileInterface/RifRftSegment.h +++ b/ApplicationLibCode/FileInterface/RifRftSegment.h @@ -72,6 +72,8 @@ public: std::vector indicesForBranchNumber( int branchNumber ) const; std::vector indicesForBranchIndex( int branchIndex, RiaDefines::RftBranchType branchType ) const; + std::vector segmentNumbersForBranchIndex( int oneBasedBranchIndex, RiaDefines::RftBranchType branchType ) const; + private: std::vector m_topology; std::vector m_resultNameAndSize; From 8028cb63e0bf94c671e2a769ad7d524c0aae9451 Mon Sep 17 00:00:00 2001 From: Kristian Bendiksen Date: Fri, 19 Aug 2022 10:05:50 +0200 Subject: [PATCH 078/129] #9209 Refactor RiuMultiPlotPage/RiuSummaryMultiPlotPage plot reinsertion. --- .../UserInterface/RiuMultiPlotPage.cpp | 219 ++++++++++++------ .../UserInterface/RiuMultiPlotPage.h | 26 +++ .../UserInterface/RiuSummaryMultiPlotPage.cpp | 95 ++------ 3 files changed, 189 insertions(+), 151 deletions(-) diff --git a/ApplicationLibCode/UserInterface/RiuMultiPlotPage.cpp b/ApplicationLibCode/UserInterface/RiuMultiPlotPage.cpp index 41b95317f7..f3dd024359 100644 --- a/ApplicationLibCode/UserInterface/RiuMultiPlotPage.cpp +++ b/ApplicationLibCode/UserInterface/RiuMultiPlotPage.cpp @@ -654,89 +654,164 @@ void RiuMultiPlotPage::reinsertPlotWidgets() int column = 0; for ( int visibleIndex = 0; visibleIndex < plotWidgets.size(); ++visibleIndex ) { - int expectedColSpan = static_cast( plotWidgets[visibleIndex]->colSpan() ); + auto plotWidget = plotWidgets[visibleIndex]; + auto legend = legends[visibleIndex]; + auto legendFrame = legendFrames[visibleIndex]; + auto subTitle = subTitles[visibleIndex]; + + int expectedColSpan = plotWidget->colSpan(); int colSpan = std::min( expectedColSpan, columnCount ); - int rowSpan = plotWidgets[visibleIndex]->rowSpan(); + int rowSpan = plotWidget->rowSpan(); auto position = findAvailableRowAndColumn( row, column, colSpan, columnCount ); std::tie( row, column ) = position; m_visibleIndexToPositionMapping[visibleIndex] = position; - m_gridLayout->addWidget( subTitles[visibleIndex], 3 * row, column, 1, colSpan ); - if ( legends[visibleIndex] ) - { - if ( m_plotDefinition->legendPosition() == RimPlotWindow::LegendPosition::ABOVE ) - { - m_gridLayout->addWidget( legends[visibleIndex], - 3 * row + 1, - column, - 1, - colSpan, - Qt::AlignHCenter | Qt::AlignBottom ); - } - else - { - CAF_ASSERT( m_plotDefinition->legendPosition() == RimPlotWindow::LegendPosition::INSIDE ); - auto overlayFrame = new RiuQwtLegendOverlayContentFrame; - overlayFrame->setLegend( legends[visibleIndex] ); - legendFrames[visibleIndex]->setContentFrame( overlayFrame ); - legendFrames[visibleIndex]->setAnchorCorner( RiuDraggableOverlayFrame::AnchorCorner::TopRight ); - plotWidgets[visibleIndex]->addOverlayFrame( legendFrames[visibleIndex] ); - } - } - m_gridLayout->addWidget( plotWidgets[visibleIndex], 3 * row + 2, column, 1 + ( rowSpan - 1 ) * 3, colSpan ); - - subTitles[visibleIndex]->setVisible( m_showSubTitles ); - QFont subTitleFont = subTitles[visibleIndex]->font(); - subTitleFont.setPixelSize( m_subTitleFontPixelSize ); - subTitles[visibleIndex]->setFont( subTitleFont ); - - plotWidgets[visibleIndex]->setAxisLabelsAndTicksEnabled( RiuPlotAxis::defaultLeft(), - showYAxis( row, column ), - showYAxis( row, column ) ); - plotWidgets[visibleIndex]->setAxisTitleEnabled( RiuPlotAxis::defaultLeft(), showYAxis( row, column ) ); - plotWidgets[visibleIndex]->setAxesFontsAndAlignment( m_axisTitleFontSize, m_axisValueFontSize ); - - { - auto margins = plotWidgets[visibleIndex]->contentsMargins(); - margins.setBottom( 40 ); - - // Adjust the space below a graph to make sure the heading of the row below is closest to the - // corresponding graph - plotWidgets[visibleIndex]->setContentsMargins( margins ); - } - - plotWidgets[visibleIndex]->show(); - - if ( legends[visibleIndex] ) - { - if ( m_plotDefinition->legendsVisible() ) - { - updateLegendColumns( legends[visibleIndex] ); - updateLegendFont( legends[visibleIndex] ); - legends[visibleIndex]->show(); - } - else - { - legends[visibleIndex]->hide(); - } - } - // Set basic row and column stretches - for ( int r = row; r < row + rowSpan; ++r ) - { - m_gridLayout->setRowStretch( 3 * r + 2, 1 ); - } - for ( int c = column; c < column + colSpan; ++c ) - { - int colStretch = 6; // Empirically chosen to try to counter the width of the axis on the first track - if ( showYAxis( row, column ) ) colStretch += 1; - m_gridLayout->setColumnStretch( c, std::max( colStretch, m_gridLayout->columnStretch( c ) ) ); - } + reinsertPlotWidget( plotWidget, legend, legendFrame, subTitle, row, column, rowSpan, colSpan ); } } } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RiuMultiPlotPage::reinsertPlotWidget( RiuPlotWidget* plotWidget, + RiuQwtPlotLegend* legend, + RiuDraggableOverlayFrame* legendFrame, + QLabel* subTitle, + int row, + int column, + int rowSpan, + int colSpan ) +{ + m_gridLayout->addWidget( subTitle, 3 * row, column, 1, colSpan ); + + addLegendWidget( plotWidget, legend, legendFrame, 3 * row + 1, column, colSpan ); + + m_gridLayout->addWidget( plotWidget, 3 * row + 2, column, 1 + ( rowSpan - 1 ) * 3, colSpan ); + + updateSubTitleVisibility( subTitle ); + + setDefaultAxisProperties( plotWidget, row, column ); + + adjustHeadingSpacing( plotWidget ); + + plotWidget->show(); + + updateLegendVisibility( plotWidget, legend, legendFrame ); + + setRowAndColumnStretches( row, column, rowSpan, colSpan ); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RiuMultiPlotPage::addLegendWidget( RiuPlotWidget* plotWidget, + RiuQwtPlotLegend* legend, + RiuDraggableOverlayFrame* legendFrame, + int row, + int column, + int colSpan ) +{ + if ( m_plotDefinition->legendPosition() == RimPlotWindow::LegendPosition::ABOVE ) + { + m_gridLayout->addWidget( legend, row, column, 1, colSpan, Qt::AlignHCenter | Qt::AlignBottom ); + } + else + { + CAF_ASSERT( m_plotDefinition->legendPosition() == RimPlotWindow::LegendPosition::INSIDE ); + auto overlayFrame = new RiuQwtLegendOverlayContentFrame; + overlayFrame->setLegend( legend ); + legendFrame->setContentFrame( overlayFrame ); + legendFrame->setAnchorCorner( RiuDraggableOverlayFrame::AnchorCorner::TopRight ); + plotWidget->removeOverlayFrame( legendFrame ); + plotWidget->addOverlayFrame( legendFrame ); + } +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RiuMultiPlotPage::updateLegendVisibility( RiuPlotWidget* plotWidget, + RiuQwtPlotLegend* legend, + RiuDraggableOverlayFrame* legendFrame ) +{ + if ( m_plotDefinition->legendsVisible() && !legend->isEmpty() ) + { + updateLegendColumns( legend ); + updateLegendFont( legend ); + legend->show(); + + if ( m_plotDefinition->legendPosition() == RimPlotWindow::LegendPosition::INSIDE ) + legendFrame->show(); + else + { + plotWidget->removeOverlayFrame( legendFrame ); + legendFrame->hide(); + } + } + else + { + legend->hide(); + legendFrame->hide(); + plotWidget->removeOverlayFrame( legendFrame ); + } +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RiuMultiPlotPage::updateSubTitleVisibility( QLabel* subTitle ) +{ + bool isSubTitleVisible = m_showSubTitles && !subTitle->text().isEmpty(); + subTitle->setVisible( isSubTitleVisible ); + QFont subTitleFont = subTitle->font(); + subTitleFont.setPixelSize( m_subTitleFontPixelSize ); + subTitle->setFont( subTitleFont ); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RiuMultiPlotPage::setDefaultAxisProperties( RiuPlotWidget* plotWidget, int row, int column ) +{ + plotWidget->setAxisLabelsAndTicksEnabled( RiuPlotAxis::defaultLeft(), showYAxis( row, column ), showYAxis( row, column ) ); + plotWidget->setAxisTitleEnabled( RiuPlotAxis::defaultLeft(), showYAxis( row, column ) ); + plotWidget->setAxesFontsAndAlignment( m_axisTitleFontSize, m_axisValueFontSize ); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RiuMultiPlotPage::adjustHeadingSpacing( RiuPlotWidget* plotWidget ) +{ + // Adjust the space below a graph to make sure the heading of the row below is closest to the + // corresponding graph + auto margins = plotWidget->contentsMargins(); + margins.setBottom( 40 ); + plotWidget->setContentsMargins( margins ); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RiuMultiPlotPage::setRowAndColumnStretches( int row, int column, int rowSpan, int colSpan ) +{ + // Set basic row and column stretches + for ( int r = row; r < row + rowSpan; ++r ) + { + m_gridLayout->setRowStretch( 3 * r + 2, 1 ); + } + + for ( int c = column; c < column + colSpan; ++c ) + { + int colStretch = 6; // Empirically chosen to try to counter the width of the axis on the first track + if ( showYAxis( row, column ) ) colStretch += 1; + m_gridLayout->setColumnStretch( c, std::max( colStretch, m_gridLayout->columnStretch( c ) ) ); + } +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/UserInterface/RiuMultiPlotPage.h b/ApplicationLibCode/UserInterface/RiuMultiPlotPage.h index 7564973eba..5e8cd2aaa2 100644 --- a/ApplicationLibCode/UserInterface/RiuMultiPlotPage.h +++ b/ApplicationLibCode/UserInterface/RiuMultiPlotPage.h @@ -122,6 +122,32 @@ protected: virtual void reinsertPlotWidgets(); virtual void refreshLegends(); + void addLegendWidget( RiuPlotWidget* plotWidget, + RiuQwtPlotLegend* legend, + RiuDraggableOverlayFrame* legendFrame, + int row, + int column, + int colSpan ); + + void reinsertPlotWidget( RiuPlotWidget* plotWidget, + RiuQwtPlotLegend* legend, + RiuDraggableOverlayFrame* legendFrame, + QLabel* subTitle, + int row, + int column, + int rowSpan, + int colSpan ); + + void updateSubTitleVisibility( QLabel* subTitle ); + + void setDefaultAxisProperties( RiuPlotWidget* plotWidget, int row, int column ); + + void adjustHeadingSpacing( RiuPlotWidget* plotWidget ); + + void setRowAndColumnStretches( int row, int column, int rowSpan, int colSpan ); + + void updateLegendVisibility( RiuPlotWidget* plotWidget, RiuQwtPlotLegend* legend, RiuDraggableOverlayFrame* legendFrame ); + void updateTitleFont(); int alignCanvasTops(); diff --git a/ApplicationLibCode/UserInterface/RiuSummaryMultiPlotPage.cpp b/ApplicationLibCode/UserInterface/RiuSummaryMultiPlotPage.cpp index b6b366c3cc..e5507de3dd 100644 --- a/ApplicationLibCode/UserInterface/RiuSummaryMultiPlotPage.cpp +++ b/ApplicationLibCode/UserInterface/RiuSummaryMultiPlotPage.cpp @@ -82,99 +82,36 @@ void RiuSummaryMultiPlotPage::reinsertPlotWidgets() for ( int row = 0; row < rows; row++ ) { - for ( int col = 0; col < cols; col++ ) + for ( int column = 0; column < cols; column++ ) { if ( visibleIndex >= nPlots ) { - m_gridLayout->addWidget( m_placeholderWidgets[phIndex], row * 3 + 2, col ); + m_gridLayout->addWidget( m_placeholderWidgets[phIndex], row * 3 + 2, column ); m_gridLayout->setRowStretch( row * 3 + 2, 1 ); - m_gridLayout->setColumnStretch( col, 6 ); + m_gridLayout->setColumnStretch( column, 6 ); m_placeholderWidgets[phIndex]->show(); phIndex++; continue; } - m_visibleIndexToPositionMapping[visibleIndex] = std::make_pair( row, col ); + auto plotWidget = plotWidgets[visibleIndex]; + auto legend = legends[visibleIndex]; + auto legendFrame = legendFrames[visibleIndex]; + auto subTitle = subTitles[visibleIndex]; - auto plotWidget = plotWidgets[visibleIndex]; - int expectedColSpan = plotWidget->colSpan(); - int colSpan = std::min( expectedColSpan, cols - col ); + int expectedColSpan = plotWidget->colSpan(); + int colSpan = std::min( expectedColSpan, cols - column ); + int rowSpan = 1; + + m_visibleIndexToPositionMapping[visibleIndex] = std::make_pair( row, column ); + + reinsertPlotWidget( plotWidget, legend, legendFrame, subTitle, row, column, rowSpan, colSpan ); - m_gridLayout->addWidget( subTitles[visibleIndex], 3 * row, col, 1, colSpan ); - if ( legends[visibleIndex] ) - { - if ( m_plotDefinition->legendPosition() == RimPlotWindow::LegendPosition::ABOVE ) - { - m_gridLayout->addWidget( legends[visibleIndex], 3 * row + 1, col, 1, colSpan, Qt::AlignHCenter | Qt::AlignBottom ); - } - else - { - CAF_ASSERT( m_plotDefinition->legendPosition() == RimPlotWindow::LegendPosition::INSIDE ); - auto overlayFrame = new RiuQwtLegendOverlayContentFrame; - overlayFrame->setLegend( legends[visibleIndex] ); - legendFrames[visibleIndex]->setContentFrame( overlayFrame ); - legendFrames[visibleIndex]->setAnchorCorner( RiuDraggableOverlayFrame::AnchorCorner::TopRight ); - plotWidgets[visibleIndex]->removeOverlayFrame( legendFrames[visibleIndex] ); - plotWidgets[visibleIndex]->addOverlayFrame( legendFrames[visibleIndex] ); - } - } - m_gridLayout->addWidget( plotWidget, 3 * row + 2, col, 1, colSpan ); auto summaryPlot = dynamic_cast( plotWidget->plotDefinition() ); - if ( summaryPlot ) m_summaryMultiPlot->setLayoutInfo( summaryPlot, row, col ); - - bool isSubTitleVisible = m_showSubTitles && !subTitles[visibleIndex]->text().isEmpty(); - subTitles[visibleIndex]->setVisible( isSubTitleVisible ); - QFont subTitleFont = subTitles[visibleIndex]->font(); - subTitleFont.setPixelSize( m_subTitleFontPixelSize ); - subTitles[visibleIndex]->setFont( subTitleFont ); - - plotWidget->setAxisLabelsAndTicksEnabled( RiuPlotAxis::defaultLeft(), - showYAxis( row, col ), - showYAxis( row, col ) ); - plotWidget->setAxisTitleEnabled( RiuPlotAxis::defaultLeft(), showYAxis( row, col ) ); - plotWidget->setAxesFontsAndAlignment( m_axisTitleFontSize, m_axisValueFontSize ); - - // Adjust the space below a graph to make sure the heading of the row below is closest to the - // corresponding graph - auto margins = plotWidget->contentsMargins(); - margins.setBottom( 40 ); - plotWidget->setContentsMargins( margins ); - plotWidget->show(); - - if ( legends[visibleIndex] ) - { - if ( m_plotDefinition->legendsVisible() && !legends[visibleIndex]->isEmpty() ) - { - updateLegendColumns( legends[visibleIndex] ); - updateLegendFont( legends[visibleIndex] ); - legends[visibleIndex]->show(); - - if ( m_plotDefinition->legendPosition() == RimPlotWindow::LegendPosition::INSIDE ) - legendFrames[visibleIndex]->show(); - else - { - plotWidget->removeOverlayFrame( legendFrames[visibleIndex] ); - legendFrames[visibleIndex]->hide(); - } - } - else - { - legends[visibleIndex]->hide(); - legendFrames[visibleIndex]->hide(); - plotWidget->removeOverlayFrame( legendFrames[visibleIndex] ); - } - } - // Set basic row and column stretches - m_gridLayout->setRowStretch( 3 * row + 2, 1 ); - for ( int c = col; c < col + colSpan; c++ ) - { - int colStretch = 6; // Empirically chosen to try to counter the width of the axis on the first track - if ( showYAxis( row, col ) ) colStretch += 1; - m_gridLayout->setColumnStretch( c, std::max( colStretch, m_gridLayout->columnStretch( c ) ) ); - } + if ( summaryPlot ) m_summaryMultiPlot->setLayoutInfo( summaryPlot, row, column ); visibleIndex++; - col += colSpan - 1; + column += colSpan - 1; } } } From cd094892c9c104752e0794f810012befa26cb114 Mon Sep 17 00:00:00 2001 From: jonjenssen Date: Mon, 22 Aug 2022 15:01:18 +0200 Subject: [PATCH 079/129] Avoid recalculating streamlines when a 3d calculation is done. --- .../Streamlines/RimStreamlineInViewCollection.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/ApplicationLibCode/ProjectDataModel/Streamlines/RimStreamlineInViewCollection.cpp b/ApplicationLibCode/ProjectDataModel/Streamlines/RimStreamlineInViewCollection.cpp index 86351e8f00..ec4866a9a4 100644 --- a/ApplicationLibCode/ProjectDataModel/Streamlines/RimStreamlineInViewCollection.cpp +++ b/ApplicationLibCode/ProjectDataModel/Streamlines/RimStreamlineInViewCollection.cpp @@ -179,8 +179,11 @@ caf::PdmFieldHandle* RimStreamlineInViewCollection::objectToggleField() //-------------------------------------------------------------------------------------------------- void RimStreamlineInViewCollection::setEclipseCase( RimEclipseCase* reservoir ) { - m_shouldGenerateTracers = true; - m_eclipseCase = reservoir; + if ( reservoir != m_eclipseCase ) + { + m_shouldGenerateTracers = true; + m_eclipseCase = reservoir; + } } //-------------------------------------------------------------------------------------------------- From 7e31e6e55abc3ec8bdecccff48ce42afa4e5788c Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Tue, 23 Aug 2022 13:34:25 +0200 Subject: [PATCH 080/129] Regression Test: Add timeout to command object processing When Octave scripts fails, the application ends up in a deadlock. Add timing to be able to process next regression tests. --- ApplicationLibCode/Application/RiaApplication.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/ApplicationLibCode/Application/RiaApplication.cpp b/ApplicationLibCode/Application/RiaApplication.cpp index 869ec9af12..759da95ba3 100644 --- a/ApplicationLibCode/Application/RiaApplication.cpp +++ b/ApplicationLibCode/Application/RiaApplication.cpp @@ -1340,6 +1340,9 @@ void RiaApplication::executeCommandObjects() //-------------------------------------------------------------------------------------------------- void RiaApplication::waitUntilCommandObjectsHasBeenProcessed() { + auto start = std::chrono::system_clock::now(); + const double timeoutThreshold = 5.0; + // Wait until all command objects have completed bool mutexLockedSuccessfully = m_commandQueueLock.tryLock(); @@ -1348,7 +1351,18 @@ void RiaApplication::waitUntilCommandObjectsHasBeenProcessed() invokeProcessEvents(); mutexLockedSuccessfully = m_commandQueueLock.tryLock(); + + std::chrono::duration elapsed_seconds = std::chrono::system_clock::now() - start; + if ( timeoutThreshold < elapsed_seconds.count() ) + { + // This can happen if the octave plugins fails to execute during regression testing. + + RiaLogging::warning( + QString( "Timeout waiting for command objects to complete, timeout set to %1 seconds." ).arg( timeoutThreshold ) ); + break; + } } + m_commandQueueLock.unlock(); } From 86b21714ebf9f9091dc674bf46c88ef7064b04cb Mon Sep 17 00:00:00 2001 From: Jon Jenssen Date: Tue, 23 Aug 2022 16:05:31 +0200 Subject: [PATCH 081/129] Fix tile windows command, and make sure logger is reconnected to 3d view if it is closed and reopened --- ApplicationLibCode/Application/RiaGuiApplication.cpp | 7 +++++++ ApplicationLibCode/UserInterface/RiuMainWindow.cpp | 8 ++++++++ ApplicationLibCode/UserInterface/RiuMainWindow.h | 1 + ApplicationLibCode/UserInterface/RiuMainWindowBase.cpp | 2 +- ApplicationLibCode/UserInterface/RiuMainWindowBase.h | 3 +++ ApplicationLibCode/UserInterface/RiuMessagePanel.cpp | 7 +++++-- ApplicationLibCode/UserInterface/RiuMessagePanel.h | 2 +- ApplicationLibCode/UserInterface/RiuPlotMainWindow.cpp | 8 ++++++++ ApplicationLibCode/UserInterface/RiuPlotMainWindow.h | 1 + 9 files changed, 35 insertions(+), 4 deletions(-) diff --git a/ApplicationLibCode/Application/RiaGuiApplication.cpp b/ApplicationLibCode/Application/RiaGuiApplication.cpp index 9377748201..3b4ac39bfa 100644 --- a/ApplicationLibCode/Application/RiaGuiApplication.cpp +++ b/ApplicationLibCode/Application/RiaGuiApplication.cpp @@ -969,6 +969,13 @@ void RiaGuiApplication::createMainWindow() m_mainWindow->setDefaultToolbarVisibility(); m_mainWindow->loadWinGeoAndDockToolBarLayout(); m_mainWindow->showWindow(); + + // if there is an existing logger, reconnect to it + auto logger = dynamic_cast( RiaLogging::loggerInstance() ); + if ( logger ) + { + logger->addMessagePanel( m_mainWindow->messagePanel() ); + } } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/UserInterface/RiuMainWindow.cpp b/ApplicationLibCode/UserInterface/RiuMainWindow.cpp index ef5c2886c0..15dc699382 100644 --- a/ApplicationLibCode/UserInterface/RiuMainWindow.cpp +++ b/ApplicationLibCode/UserInterface/RiuMainWindow.cpp @@ -2105,3 +2105,11 @@ QStringList RiuMainWindow::defaultDockStateNames() RiuDockWidgetTools::dockStateHideAll3DWindowName() }; return retList; } + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QAction* RiuMainWindow::tileSubWindowsAction() +{ + return caf::CmdFeatureManager::instance()->action( "RicTileWindowsFeature" ); +} diff --git a/ApplicationLibCode/UserInterface/RiuMainWindow.h b/ApplicationLibCode/UserInterface/RiuMainWindow.h index 00828a1098..317d0ea708 100644 --- a/ApplicationLibCode/UserInterface/RiuMainWindow.h +++ b/ApplicationLibCode/UserInterface/RiuMainWindow.h @@ -140,6 +140,7 @@ public: protected: void closeEvent( QCloseEvent* event ) override; QStringList defaultDockStateNames() override; + QAction* tileSubWindowsAction() override; private: void createActions(); diff --git a/ApplicationLibCode/UserInterface/RiuMainWindowBase.cpp b/ApplicationLibCode/UserInterface/RiuMainWindowBase.cpp index 1185c1c4f7..ed719b4673 100644 --- a/ApplicationLibCode/UserInterface/RiuMainWindowBase.cpp +++ b/ApplicationLibCode/UserInterface/RiuMainWindowBase.cpp @@ -753,7 +753,7 @@ void RiuMainWindowBase::addDefaultEntriesToWindowsMenu() QAction* closeAllSubWindowsAction = new QAction( "Close All Windows", this ); connect( closeAllSubWindowsAction, SIGNAL( triggered() ), m_mdiArea, SLOT( closeAllSubWindows() ) ); - m_windowMenu->addAction( caf::CmdFeatureManager::instance()->action( "RicTilePlotWindowsFeature" ) ); + m_windowMenu->addAction( tileSubWindowsAction() ); m_windowMenu->addAction( cascadeWindowsAction ); m_windowMenu->addAction( closeAllSubWindowsAction ); } diff --git a/ApplicationLibCode/UserInterface/RiuMainWindowBase.h b/ApplicationLibCode/UserInterface/RiuMainWindowBase.h index f0797d71ac..63ee1858b8 100644 --- a/ApplicationLibCode/UserInterface/RiuMainWindowBase.h +++ b/ApplicationLibCode/UserInterface/RiuMainWindowBase.h @@ -39,6 +39,7 @@ class PdmUiTreeView; class PdmUiItem; } // namespace caf +class QAction; class QMdiArea; class QMdiSubWindow; class QUndoView; @@ -113,6 +114,8 @@ protected: virtual QStringList defaultDockStateNames() = 0; + virtual QAction* tileSubWindowsAction() = 0; + protected slots: void slotDockWidgetToggleViewActionTriggered(); void slotRefreshHelpActions(); diff --git a/ApplicationLibCode/UserInterface/RiuMessagePanel.cpp b/ApplicationLibCode/UserInterface/RiuMessagePanel.cpp index a6597c744d..07a8ec4407 100644 --- a/ApplicationLibCode/UserInterface/RiuMessagePanel.cpp +++ b/ApplicationLibCode/UserInterface/RiuMessagePanel.cpp @@ -151,7 +151,10 @@ RiuMessagePanelLogger::RiuMessagePanelLogger() //-------------------------------------------------------------------------------------------------- void RiuMessagePanelLogger::addMessagePanel( RiuMessagePanel* messagePanel ) { - m_messagePanel.push_back( messagePanel ); + // get rid of any unused entries (qpointers are null) + m_messagePanels.erase( std::remove( m_messagePanels.begin(), m_messagePanels.end(), nullptr ), m_messagePanels.end() ); + + m_messagePanels.push_back( messagePanel ); } //-------------------------------------------------------------------------------------------------- @@ -212,7 +215,7 @@ void RiuMessagePanelLogger::writeToMessagePanel( RILogLevel messageLevel, const return; } - for ( auto& panel : m_messagePanel ) + for ( auto& panel : m_messagePanels ) { if ( panel ) { diff --git a/ApplicationLibCode/UserInterface/RiuMessagePanel.h b/ApplicationLibCode/UserInterface/RiuMessagePanel.h index 2103eab6cd..483e89a3f4 100644 --- a/ApplicationLibCode/UserInterface/RiuMessagePanel.h +++ b/ApplicationLibCode/UserInterface/RiuMessagePanel.h @@ -72,6 +72,6 @@ private: void writeToMessagePanel( RILogLevel messageLevel, const char* message ); private: - std::vector> m_messagePanel; + std::vector> m_messagePanels; int m_logLevel; }; diff --git a/ApplicationLibCode/UserInterface/RiuPlotMainWindow.cpp b/ApplicationLibCode/UserInterface/RiuPlotMainWindow.cpp index 7813716ebd..1064b135f5 100644 --- a/ApplicationLibCode/UserInterface/RiuPlotMainWindow.cpp +++ b/ApplicationLibCode/UserInterface/RiuPlotMainWindow.cpp @@ -1210,3 +1210,11 @@ void RiuPlotMainWindow::slotToggleSelectionLink() { m_selection3DLinkEnabled = !m_selection3DLinkEnabled; } + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QAction* RiuPlotMainWindow::tileSubWindowsAction() +{ + return caf::CmdFeatureManager::instance()->action( "RicTilePlotWindowsFeature" ); +} diff --git a/ApplicationLibCode/UserInterface/RiuPlotMainWindow.h b/ApplicationLibCode/UserInterface/RiuPlotMainWindow.h index 3395fc2e98..5883b7af49 100644 --- a/ApplicationLibCode/UserInterface/RiuPlotMainWindow.h +++ b/ApplicationLibCode/UserInterface/RiuPlotMainWindow.h @@ -106,6 +106,7 @@ protected: void dropEvent( QDropEvent* event ) override; QStringList defaultDockStateNames() override; + QAction* tileSubWindowsAction() override; private: void setPdmRoot( caf::PdmObject* pdmRoot ); From 6ac6b5a795ec055a451226d3314c4aacd3f3d65c Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Tue, 23 Aug 2022 23:55:40 -0700 Subject: [PATCH 082/129] Depth Axis : Improve visibility logic --- .../ProjectDataModel/RimDepthTrackPlot.cpp | 35 ++++------- .../ProjectDataModel/RimDepthTrackPlot.h | 3 +- .../WellLog/RimWellLogTrack.cpp | 63 +++++++++++++------ .../WellLog/RimWellLogTrack.h | 1 + 4 files changed, 58 insertions(+), 44 deletions(-) diff --git a/ApplicationLibCode/ProjectDataModel/RimDepthTrackPlot.cpp b/ApplicationLibCode/ProjectDataModel/RimDepthTrackPlot.cpp index 369957f636..f786a94fc5 100644 --- a/ApplicationLibCode/ProjectDataModel/RimDepthTrackPlot.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimDepthTrackPlot.cpp @@ -771,33 +771,20 @@ void RimDepthTrackPlot::onPlotsReordered( const SignalEmitter* emitter ) //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -bool RimDepthTrackPlot::isFirstVisibleTrack( RimWellLogTrack* track ) +void RimDepthTrackPlot::updateDepthAxisVisibility() { - // Find first visible track - auto findFirstVisibleTrack = [this]() { - auto plots = visiblePlots(); - if ( !plots.empty() ) return plots.front(); - return static_cast( nullptr ); - }; + auto plots = visiblePlots(); - auto firstVisibleTrack = findFirstVisibleTrack(); - return firstVisibleTrack && firstVisibleTrack == track; -} + for ( auto p : plots ) + { + auto plotWidget = p->plotWidget(); + if ( !plotWidget ) continue; -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -bool RimDepthTrackPlot::isLastVisibleTrack( RimWellLogTrack* track ) -{ - // Find last visible track - auto findLastVisibleTrack = [this]() { - auto plots = visiblePlots(); - if ( !plots.empty() ) return plots.back(); - return static_cast( nullptr ); - }; + bool isFirstTrack = ( p == plots.front() ); + bool isLastTrack = ( p == plots.back() ); - auto lastVisibleTrack = findLastVisibleTrack(); - return lastVisibleTrack && lastVisibleTrack == track; + p->updateAxesVisibility( depthOrientation(), isFirstTrack, isLastTrack ); + } } //-------------------------------------------------------------------------------------------------- @@ -1066,6 +1053,8 @@ void RimDepthTrackPlot::updatePlots() { if ( m_showWindow ) { + updateDepthAxisVisibility(); + for ( RimPlot* plot : plots() ) { plot->loadDataAndUpdate(); diff --git a/ApplicationLibCode/ProjectDataModel/RimDepthTrackPlot.h b/ApplicationLibCode/ProjectDataModel/RimDepthTrackPlot.h index 93fde4474f..dc8f2ac50c 100644 --- a/ApplicationLibCode/ProjectDataModel/RimDepthTrackPlot.h +++ b/ApplicationLibCode/ProjectDataModel/RimDepthTrackPlot.h @@ -149,8 +149,7 @@ public: RiaDefines::DepthUnitType caseDepthUnit() const; - bool isFirstVisibleTrack( RimWellLogTrack* track ); - bool isLastVisibleTrack( RimWellLogTrack* track ); + void updateDepthAxisVisibility(); static RiuPlotAxis depthAxis( DepthOrientation depthOrientation ); static RiuPlotAxis valueAxis( DepthOrientation depthOrientation ); diff --git a/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogTrack.cpp b/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogTrack.cpp index 6252788e36..acc0f535db 100644 --- a/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogTrack.cpp +++ b/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogTrack.cpp @@ -574,6 +574,10 @@ void RimWellLogTrack::fieldChangedByUi( const caf::PdmFieldHandle* changedField, } updateParentLayout(); + + RimDepthTrackPlot* depthTrackPlot; + this->firstAncestorOrThisOfTypeAsserted( depthTrackPlot ); + depthTrackPlot->updateDepthAxisVisibility(); } else if ( changedField == &m_description ) { @@ -1263,6 +1267,46 @@ bool RimWellLogTrack::isEmptyVisiblePropertyRange() const 1.0e-6 * std::max( 1.0, std::max( m_visiblePropertyValueRangeMax(), m_visiblePropertyValueRangeMin() ) ); } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimWellLogTrack::updateAxesVisibility( RimDepthTrackPlot::DepthOrientation orientation, bool isFirstTrack, bool isLastTrack ) +{ + if ( !m_plotWidget ) return; + + auto setAxisVisible = [this]( QwtAxis::Position axis, bool enable ) { + auto plot = m_plotWidget->qwtPlot(); + if ( !plot ) return false; + + bool isCurrentlyEnabled = plot->isAxisVisible( axis ); + if ( enable == isCurrentlyEnabled ) return false; + + m_plotWidget->setAxisEnabled( axis, enable ); + return true; + }; + + bool needUpdate = false; + + if ( orientation == RimDepthTrackPlot::DepthOrientation::VERTICAL ) + { + // Show depth axis only for the first track (on the left side) + needUpdate |= setAxisVisible( QwtAxis::XBottom, false ); + needUpdate |= setAxisVisible( QwtAxis::XTop, true ); + needUpdate |= setAxisVisible( QwtAxis::YLeft, isFirstTrack ); + needUpdate |= setAxisVisible( QwtAxis::YRight, false ); + } + else + { + // Show depth axis only for the last track (on the bottom side) + needUpdate |= setAxisVisible( QwtAxis::XTop, false ); + needUpdate |= setAxisVisible( QwtAxis::XBottom, isLastTrack ); + needUpdate |= setAxisVisible( QwtAxis::YLeft, true ); + needUpdate |= setAxisVisible( QwtAxis::YRight, false ); + } + + if ( needUpdate ) onLoadDataAndUpdate(); +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -1287,25 +1331,6 @@ void RimWellLogTrack::onLoadDataAndUpdate() { m_plotWidget->setAxisTitleText( valueAxis(), m_propertyValueAxisTitle ); m_plotWidget->setAxisTitleText( depthAxis(), wellLogPlot->depthAxisTitle() ); - - if ( wellLogPlot->depthOrientation() == RimDepthTrackPlot::DepthOrientation::VERTICAL ) - { - // Show depth axis only for the first track (on the left side) - bool isFirstTrack = wellLogPlot->isFirstVisibleTrack( this ); - m_plotWidget->setAxisEnabled( QwtAxis::XTop, true ); - m_plotWidget->setAxisEnabled( QwtAxis::XBottom, false ); - m_plotWidget->setAxisEnabled( QwtAxis::YLeft, isFirstTrack ); - m_plotWidget->setAxisEnabled( QwtAxis::YRight, false ); - } - else - { - // Show depth axis only for the last track (on the bottom side) - bool isLastTrack = wellLogPlot->isLastVisibleTrack( this ); - m_plotWidget->setAxisEnabled( QwtAxis::XTop, false ); - m_plotWidget->setAxisEnabled( QwtAxis::XBottom, isLastTrack ); - m_plotWidget->setAxisEnabled( QwtAxis::YLeft, true ); - m_plotWidget->setAxisEnabled( QwtAxis::YRight, false ); - } } for ( size_t cIdx = 0; cIdx < m_curves.size(); ++cIdx ) diff --git a/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogTrack.h b/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogTrack.h index fe4519a495..f17165f3f8 100644 --- a/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogTrack.h +++ b/ApplicationLibCode/ProjectDataModel/WellLog/RimWellLogTrack.h @@ -237,6 +237,7 @@ public: void setCurvesTreeVisibility( bool isVisible ); void setEnsembleWellLogCurveSet( RimEnsembleWellLogCurveSet* curveSet ); + void updateAxesVisibility( RimDepthTrackPlot::DepthOrientation orientation, bool isFirstTrack, bool isLastTrack ); protected: // RimViewWindow overrides From b7e2e5e3c2a0504d4fa822e0a34a42fead014c99 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Tue, 23 Aug 2022 10:01:24 +0200 Subject: [PATCH 083/129] Regression Test: Do not access RimWellLogPlotCollection directly from desctructors Regression tests are calling RimProject::reset(), and this function deletes the RimProject object. --- .../ProjectDataModel/GeoMech/RimGeoMechCase.cpp | 17 ++++++++++++----- .../ProjectDataModel/GeoMech/RimGeoMechCase.h | 5 +++-- .../GeoMech/RimGeoMechContourMapProjection.cpp | 1 + .../GeoMech/RimGeoMechContourMapProjection.h | 2 +- .../ProjectDataModel/RimEclipseCase.cpp | 13 ++++++++++--- .../ProjectDataModel/RimMainPlotCollection.cpp | 2 ++ 6 files changed, 29 insertions(+), 11 deletions(-) diff --git a/ApplicationLibCode/ProjectDataModel/GeoMech/RimGeoMechCase.cpp b/ApplicationLibCode/ProjectDataModel/GeoMech/RimGeoMechCase.cpp index c4da91d3cf..e5781d0e4d 100644 --- a/ApplicationLibCode/ProjectDataModel/GeoMech/RimGeoMechCase.cpp +++ b/ApplicationLibCode/ProjectDataModel/GeoMech/RimGeoMechCase.cpp @@ -98,7 +98,7 @@ void caf::AppEnum::setUp() //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -RimGeoMechCase::RimGeoMechCase( void ) +RimGeoMechCase::RimGeoMechCase() : m_applyTimeFilter( false ) { CAF_PDM_InitScriptableObjectWithNameAndComment( "GeoMechanical Case", @@ -181,14 +181,21 @@ RimGeoMechCase::RimGeoMechCase( void ) //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -RimGeoMechCase::~RimGeoMechCase( void ) +RimGeoMechCase::~RimGeoMechCase() { geoMechViews.deleteChildren(); - RimWellLogPlotCollection* plotCollection = RimMainPlotCollection::current()->wellLogPlotCollection(); - if ( plotCollection ) + RimProject* project = RimProject::current(); + if ( project ) { - plotCollection->removeExtractors( this->geoMechData() ); + if ( project->mainPlotCollection() ) + { + RimWellLogPlotCollection* plotCollection = project->mainPlotCollection()->wellLogPlotCollection(); + if ( plotCollection ) + { + plotCollection->removeExtractors( this->geoMechData() ); + } + } } if ( this->geoMechData() ) diff --git a/ApplicationLibCode/ProjectDataModel/GeoMech/RimGeoMechCase.h b/ApplicationLibCode/ProjectDataModel/GeoMech/RimGeoMechCase.h index 2e9f6d496b..e2452b3a35 100644 --- a/ApplicationLibCode/ProjectDataModel/GeoMech/RimGeoMechCase.h +++ b/ApplicationLibCode/ProjectDataModel/GeoMech/RimGeoMechCase.h @@ -67,8 +67,9 @@ public: INITIAL_PERMEABILITY_PER_ELEMENT }; - RimGeoMechCase( void ); - ~RimGeoMechCase( void ) override; + RimGeoMechCase(); + + ~RimGeoMechCase() override; CaseOpenStatus openGeoMechCase( std::string* errorMessage ); diff --git a/ApplicationLibCode/ProjectDataModel/GeoMech/RimGeoMechContourMapProjection.cpp b/ApplicationLibCode/ProjectDataModel/GeoMech/RimGeoMechContourMapProjection.cpp index 9fc50d7566..006d4cfc86 100644 --- a/ApplicationLibCode/ProjectDataModel/GeoMech/RimGeoMechContourMapProjection.cpp +++ b/ApplicationLibCode/ProjectDataModel/GeoMech/RimGeoMechContourMapProjection.cpp @@ -31,6 +31,7 @@ #include "RigHexIntersectionTools.h" #include "RimCellFilterCollection.h" +#include "RimGeoMechCase.h" #include "RimGeoMechCellColors.h" #include "RimGeoMechContourMapView.h" #include "RimGeoMechPropertyFilterCollection.h" diff --git a/ApplicationLibCode/ProjectDataModel/GeoMech/RimGeoMechContourMapProjection.h b/ApplicationLibCode/ProjectDataModel/GeoMech/RimGeoMechContourMapProjection.h index c20c60eb62..e8f92773c5 100644 --- a/ApplicationLibCode/ProjectDataModel/GeoMech/RimGeoMechContourMapProjection.h +++ b/ApplicationLibCode/ProjectDataModel/GeoMech/RimGeoMechContourMapProjection.h @@ -23,7 +23,6 @@ #include "RimCheckableNamedObject.h" #include "RimContourMapProjection.h" -#include "RimGeoMechCase.h" #include "cafDisplayCoordTransform.h" #include "cafPdmChildField.h" @@ -37,6 +36,7 @@ #include "cvfVector2.h" class RimGeoMechContourMapView; +class RimGeoMechCase; //================================================================================================== /// diff --git a/ApplicationLibCode/ProjectDataModel/RimEclipseCase.cpp b/ApplicationLibCode/ProjectDataModel/RimEclipseCase.cpp index 069f322b6e..9ca620eea4 100644 --- a/ApplicationLibCode/ProjectDataModel/RimEclipseCase.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimEclipseCase.cpp @@ -152,10 +152,17 @@ RimEclipseCase::~RimEclipseCase() delete m_fractureModelResults(); delete m_inputPropertyCollection; - RimWellLogPlotCollection* plotCollection = RimMainPlotCollection::current()->wellLogPlotCollection(); - if ( plotCollection ) + RimProject* project = RimProject::current(); + if ( project ) { - plotCollection->removeExtractors( this->eclipseCaseData() ); + if ( project->mainPlotCollection() ) + { + RimWellLogPlotCollection* plotCollection = project->mainPlotCollection()->wellLogPlotCollection(); + if ( plotCollection ) + { + plotCollection->removeExtractors( this->eclipseCaseData() ); + } + } } if ( this->eclipseCaseData() ) diff --git a/ApplicationLibCode/ProjectDataModel/RimMainPlotCollection.cpp b/ApplicationLibCode/ProjectDataModel/RimMainPlotCollection.cpp index d4f0456cf7..e26fd2dff5 100644 --- a/ApplicationLibCode/ProjectDataModel/RimMainPlotCollection.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimMainPlotCollection.cpp @@ -160,6 +160,8 @@ RimMainPlotCollection::~RimMainPlotCollection() //-------------------------------------------------------------------------------------------------- RimMainPlotCollection* RimMainPlotCollection::current() { + CVF_ASSERT( RimProject::current() ); + return RimProject::current()->mainPlotCollection(); } From 8f9fbab7e0832285db4b51b0148372f523871d52 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Wed, 24 Aug 2022 09:39:15 +0200 Subject: [PATCH 084/129] #9231 Contour Map: Fix crash when adding formations after a view is created --- .../Commands/RicImportFormationNamesFeature.cpp | 17 ++++++++++++----- .../RimContourMapProjection.cpp | 13 ++++++++++--- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/ApplicationLibCode/Commands/RicImportFormationNamesFeature.cpp b/ApplicationLibCode/Commands/RicImportFormationNamesFeature.cpp index c4916cb28a..3ed3f64c95 100644 --- a/ApplicationLibCode/Commands/RicImportFormationNamesFeature.cpp +++ b/ApplicationLibCode/Commands/RicImportFormationNamesFeature.cpp @@ -33,11 +33,13 @@ #include "RimColorLegendItem.h" #include "RimEclipseCase.h" #include "RimEclipseCellColors.h" +#include "RimEclipseContourMapView.h" #include "RimEclipseView.h" #include "RimFormationNames.h" #include "RimFormationNamesCollection.h" #include "RimGeoMechCase.h" #include "RimGeoMechCellColors.h" +#include "RimGeoMechContourMapView.h" #include "RimGeoMechView.h" #include "RimOilField.h" #include "RimProject.h" @@ -189,12 +191,12 @@ void RicImportFormationNamesFeature::addCustomColorLegend( QString& name, RimFor // return if no formation names or colors (latter e.g. in case of FMU input or LYR without colors) if ( formationNames.empty() || formationColors.empty() ) return; - RimColorLegend* colorLegend = new RimColorLegend; + auto* colorLegend = new RimColorLegend; colorLegend->setColorLegendName( name ); for ( size_t i = 0; i < formationColors.size(); i++ ) { - RimColorLegendItem* colorLegendItem = new RimColorLegendItem; + auto* colorLegendItem = new RimColorLegendItem; colorLegendItem->setValues( formationNames[i], (int)i, formationColors[i] ); @@ -214,9 +216,14 @@ void RicImportFormationNamesFeature::addCustomColorLegend( QString& name, RimFor //-------------------------------------------------------------------------------------------------- void RicImportFormationNamesFeature::setFormationCellResultAndLegend( Rim3dView* activeView, QString& legendName ) { - RimRegularLegendConfig* legendConfig = nullptr; + auto eclipseContourMapView = dynamic_cast( activeView ); + if ( eclipseContourMapView ) return; - RimEclipseView* eclView = dynamic_cast( activeView ); + auto geoMechContourMapView = dynamic_cast( activeView ); + if ( geoMechContourMapView ) return; + + RimRegularLegendConfig* legendConfig = nullptr; + auto* eclView = dynamic_cast( activeView ); if ( eclView ) { eclView->cellResult()->setResultType( RiaDefines::ResultCatType::FORMATION_NAMES ); @@ -229,7 +236,7 @@ void RicImportFormationNamesFeature::setFormationCellResultAndLegend( Rim3dView* eclView->updateAllRequiredEditors(); } - RimGeoMechView* geoMechView = dynamic_cast( activeView ); + auto* geoMechView = dynamic_cast( activeView ); if ( geoMechView ) { legendConfig = geoMechView->cellResult()->legendConfig(); diff --git a/ApplicationLibCode/ProjectDataModel/RimContourMapProjection.cpp b/ApplicationLibCode/ProjectDataModel/RimContourMapProjection.cpp index 59fa0d1289..3d01ad7307 100644 --- a/ApplicationLibCode/ProjectDataModel/RimContourMapProjection.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimContourMapProjection.cpp @@ -1027,9 +1027,16 @@ void RimContourMapProjection::generateTrianglesWithVertexValues() } } } - threadTriangles[myThread][c].insert( threadTriangles[myThread][c].end(), - clippedTriangles.begin(), - clippedTriangles.end() ); + + { + // Add critical section here due to a weird bug when running in a single thread + // Running multi threaded does not require this critical section, as we use a thread local data + // structure +#pragma omp critical + threadTriangles[myThread][c].insert( threadTriangles[myThread][c].end(), + clippedTriangles.begin(), + clippedTriangles.end() ); + } } } } From e94dd905cd6d0a6db152bf352fca9d52670405fa Mon Sep 17 00:00:00 2001 From: Jon Jenssen Date: Wed, 24 Aug 2022 12:51:32 +0200 Subject: [PATCH 085/129] Fix broken observed csv data import --- .../FileInterface/RifEclipseUserDataParserTools.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ApplicationLibCode/FileInterface/RifEclipseUserDataParserTools.cpp b/ApplicationLibCode/FileInterface/RifEclipseUserDataParserTools.cpp index 9e7eae7e5e..f05c744945 100644 --- a/ApplicationLibCode/FileInterface/RifEclipseUserDataParserTools.cpp +++ b/ApplicationLibCode/FileInterface/RifEclipseUserDataParserTools.cpp @@ -842,7 +842,7 @@ bool RifEclipseUserDataParserTools::isScalingText( const std::string& word ) //-------------------------------------------------------------------------------------------------- std::string Column::columnName() const { - return summaryAddress.uiText(); + return summaryAddress.vectorName(); } //-------------------------------------------------------------------------------------------------- From b72bc0e8c63545ccb0c549d97cd29d7d1905d667 Mon Sep 17 00:00:00 2001 From: Jon Jenssen Date: Wed, 24 Aug 2022 16:59:06 +0200 Subject: [PATCH 086/129] Make sure font size is updated in legend refresh. --- ApplicationLibCode/UserInterface/RiuMultiPlotPage.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/ApplicationLibCode/UserInterface/RiuMultiPlotPage.cpp b/ApplicationLibCode/UserInterface/RiuMultiPlotPage.cpp index f3dd024359..e8404d4f09 100644 --- a/ApplicationLibCode/UserInterface/RiuMultiPlotPage.cpp +++ b/ApplicationLibCode/UserInterface/RiuMultiPlotPage.cpp @@ -629,6 +629,7 @@ void RiuMultiPlotPage::refreshLegends() for ( const auto& l : legends ) { l->setVisible( !l->isEmpty() ); + updateLegendFont( l ); } } From 6b053b2023a63013c081ba04a84ecbd5c7a5cc79 Mon Sep 17 00:00:00 2001 From: Kristian Bendiksen Date: Fri, 5 Aug 2022 12:57:23 +0200 Subject: [PATCH 087/129] Thermal Fracture: change polygon to match StimPlan fracture grid --- .../ReservoirDataModel/RigThermalFractureResultUtil.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ApplicationLibCode/ReservoirDataModel/RigThermalFractureResultUtil.cpp b/ApplicationLibCode/ReservoirDataModel/RigThermalFractureResultUtil.cpp index 695f4e1115..55144568c0 100644 --- a/ApplicationLibCode/ReservoirDataModel/RigThermalFractureResultUtil.cpp +++ b/ApplicationLibCode/ReservoirDataModel/RigThermalFractureResultUtil.cpp @@ -306,10 +306,10 @@ cvf::cref for ( int j = 0; j < static_cast( depthCoords.size() ) - 1; j++ ) { std::vector cellPolygon; - cellPolygon.push_back( cvf::Vec3d( xCoords[i], depthCoords[j], 0.0 ) ); - cellPolygon.push_back( cvf::Vec3d( xCoords[i + 1], depthCoords[j], 0.0 ) ); - cellPolygon.push_back( cvf::Vec3d( xCoords[i + 1], depthCoords[j + 1], 0.0 ) ); cellPolygon.push_back( cvf::Vec3d( xCoords[i], depthCoords[j + 1], 0.0 ) ); + cellPolygon.push_back( cvf::Vec3d( xCoords[i + 1], depthCoords[j + 1], 0.0 ) ); + cellPolygon.push_back( cvf::Vec3d( xCoords[i + 1], depthCoords[j], 0.0 ) ); + cellPolygon.push_back( cvf::Vec3d( xCoords[i], depthCoords[j], 0.0 ) ); RigFractureCell stimPlanCell( cellPolygon, i, j ); if ( !conductivityValues.empty() ) // Assuming vector to be of correct length, or no values From a09e17d14a2b8e1248011844df1307a263a9df81 Mon Sep 17 00:00:00 2001 From: Kristian Bendiksen Date: Fri, 5 Aug 2022 15:20:54 +0200 Subject: [PATCH 088/129] #9104 Thermal Fracture: Handle offset and scaling. --- .../RimThermalFractureTemplate.cpp | 88 ++++++------------- .../RigThermalFractureDefinition.cpp | 66 ++++++++++++++ .../RigThermalFractureDefinition.h | 8 ++ .../RigThermalFractureResultUtil.cpp | 77 +++++++++++++--- .../RigThermalFractureResultUtil.h | 7 ++ 5 files changed, 173 insertions(+), 73 deletions(-) diff --git a/ApplicationLibCode/ProjectDataModel/Completions/RimThermalFractureTemplate.cpp b/ApplicationLibCode/ProjectDataModel/Completions/RimThermalFractureTemplate.cpp index 32ec0a2650..9742eeb8a8 100644 --- a/ApplicationLibCode/ProjectDataModel/Completions/RimThermalFractureTemplate.cpp +++ b/ApplicationLibCode/ProjectDataModel/Completions/RimThermalFractureTemplate.cpp @@ -97,15 +97,6 @@ void RimThermalFractureTemplate::setDefaultsBasedOnFile() else RiaLogging::info( QString( "Property for polygon calculation not set." ) ); - // if ( m_fractureDefinitionData->orientation() == RigStimPlanFractureDefinition::Orientation::TRANSVERSE ) - // { - // m_orientationType = TRANSVERSE_WELL_PATH; - // } - // else if ( m_fractureDefinitionData->orientation() == RigStimPlanFractureDefinition::Orientation::LONGITUDINAL ) - // { - // m_orientationType = ALONG_WELL_PATH; - // } - QStringList resultNames = conductivityResultNames(); if ( !resultNames.isEmpty() ) { @@ -216,22 +207,11 @@ QStringList RimThermalFractureTemplate::conductivityResultNames() const //-------------------------------------------------------------------------------------------------- void RimThermalFractureTemplate::computeDepthOfWellPathAtFracture() { - // if ( !m_fractureDefinitionData.isNull() ) - // { - // double firstTvd = m_fractureDefinitionData->topPerfTvd(); - // double lastTvd = m_fractureDefinitionData->bottomPerfTvd(); - - // if ( firstTvd != HUGE_VAL && lastTvd != HUGE_VAL ) - // { - // m_wellPathDepthAtFracture.setValueWithFieldChanged( ( firstTvd + lastTvd ) / 2 ); - // } - // else - // { - // firstTvd = m_fractureDefinitionData->minDepth(); - // lastTvd = m_fractureDefinitionData->maxDepth(); - // m_wellPathDepthAtFracture.setValueWithFieldChanged( ( firstTvd + lastTvd ) / 2 ); - // } - // } + if ( m_fractureDefinitionData ) + { + double z = m_fractureDefinitionData->centerPosition().z(); + m_wellPathDepthAtFracture.setValueWithFieldChanged( z ); + } } //-------------------------------------------------------------------------------------------------- @@ -239,26 +219,27 @@ void RimThermalFractureTemplate::computeDepthOfWellPathAtFracture() //-------------------------------------------------------------------------------------------------- void RimThermalFractureTemplate::computePerforationLength() { - // if ( !m_fractureDefinitionData.isNull() ) - // { - // double firstTvd = m_fractureDefinitionData->topPerfTvd(); - // double lastTvd = m_fractureDefinitionData->bottomPerfTvd(); + if ( m_fractureDefinitionData ) + { + auto [firstTvd, lastTvd] = + RigThermalFractureResultUtil::minMaxDepth( m_fractureDefinitionData, m_activeTimeStepIndex ); - // if ( firstTvd != HUGE_VAL && lastTvd != HUGE_VAL ) - // { - // m_perforationLength = cvf::Math::abs( firstTvd - lastTvd ); - // } - // } + if ( firstTvd != HUGE_VAL && lastTvd != HUGE_VAL ) + { + m_perforationLength = cvf::Math::abs( firstTvd - lastTvd ); + } + } - // if ( fractureTemplateUnit() == RiaDefines::EclipseUnitSystem::UNITS_METRIC && m_perforationLength < 10 ) - // { - // m_perforationLength = 10; - // } - // else if ( fractureTemplateUnit() == RiaDefines::EclipseUnitSystem::UNITS_FIELD && - // m_perforationLength < RiaEclipseUnitTools::meterToFeet( 10 ) ) - // { - // m_perforationLength = std::round( RiaEclipseUnitTools::meterToFeet( 10 ) ); - // } + double minPerforationLength = 10.0; + if ( fractureTemplateUnit() == RiaDefines::EclipseUnitSystem::UNITS_METRIC && m_perforationLength < minPerforationLength ) + { + m_perforationLength = minPerforationLength; + } + else if ( fractureTemplateUnit() == RiaDefines::EclipseUnitSystem::UNITS_FIELD && + m_perforationLength < RiaEclipseUnitTools::meterToFeet( minPerforationLength ) ) + { + m_perforationLength = std::round( RiaEclipseUnitTools::meterToFeet( minPerforationLength ) ); + } } //-------------------------------------------------------------------------------------------------- @@ -664,21 +645,6 @@ void RimThermalFractureTemplate::fractureTriangleGeometry( std::vector RimThermalFractureTemplate::wellPathDepthAtFractureRange() const { - // if ( !m_fractureDefinitionData ) return std::make_pair( 0.0, 1.0 ); + if ( !m_fractureDefinitionData ) return std::make_pair( 0.0, 1.0 ); - // return std::make_pair( m_fractureDefinitionData->minDepth(), m_fractureDefinitionData->maxDepth() ); - - return std::make_pair( 0.0, 1.0 ); + return RigThermalFractureResultUtil::minMaxDepth( m_fractureDefinitionData, m_activeTimeStepIndex ); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ReservoirDataModel/RigThermalFractureDefinition.cpp b/ApplicationLibCode/ReservoirDataModel/RigThermalFractureDefinition.cpp index 0ee3f3c28a..b4ee0f7db6 100644 --- a/ApplicationLibCode/ReservoirDataModel/RigThermalFractureDefinition.cpp +++ b/ApplicationLibCode/ReservoirDataModel/RigThermalFractureDefinition.cpp @@ -185,3 +185,69 @@ std::vector RigThermalFractureDefinition::relativeCoordinates( int t return relCoords; } + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +cvf::Vec3d RigThermalFractureDefinition::centerPosition() const +{ + int xIndex = getPropertyIndex( "XCoord" ); + int yIndex = getPropertyIndex( "YCoord" ); + int zIndex = getPropertyIndex( "ZCoord" ); + if ( xIndex == -1 || yIndex == -1 || zIndex == -1 ) + { + return cvf::Vec3d::UNDEFINED; + } + + // The first node is the center node + int centerNodeIndex = 0; + int timeStepIndex = 0; + cvf::Vec3d centerNode( getPropertyValue( xIndex, centerNodeIndex, timeStepIndex ), + getPropertyValue( yIndex, centerNodeIndex, timeStepIndex ), + getPropertyValue( zIndex, centerNodeIndex, timeStepIndex ) ); + return centerNode; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +cvf::BoundingBox RigThermalFractureDefinition::getBoundingBox( int timeStepIndex ) const +{ + std::vector coords; + + cvf::BoundingBox bb; + + int xIndex = getPropertyIndex( "XCoord" ); + int yIndex = getPropertyIndex( "YCoord" ); + int zIndex = getPropertyIndex( "ZCoord" ); + if ( xIndex == -1 || yIndex == -1 || zIndex == -1 ) + { + return bb; + } + + for ( size_t nodeIndex = 0; nodeIndex < numNodes(); nodeIndex++ ) + { + cvf::Vec3d nodePos( getPropertyValue( xIndex, static_cast( nodeIndex ), timeStepIndex ), + getPropertyValue( yIndex, static_cast( nodeIndex ), timeStepIndex ), + getPropertyValue( zIndex, static_cast( nodeIndex ), timeStepIndex ) ); + bb.add( nodePos ); + } + + return bb; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +double RigThermalFractureDefinition::minDepth( int timeStepIndex ) const +{ + return getBoundingBox( timeStepIndex ).min().z(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +double RigThermalFractureDefinition::maxDepth( int timeStepIndex ) const +{ + return getBoundingBox( timeStepIndex ).max().z(); +} diff --git a/ApplicationLibCode/ReservoirDataModel/RigThermalFractureDefinition.h b/ApplicationLibCode/ReservoirDataModel/RigThermalFractureDefinition.h index bd04039526..78de6b2e1b 100644 --- a/ApplicationLibCode/ReservoirDataModel/RigThermalFractureDefinition.h +++ b/ApplicationLibCode/ReservoirDataModel/RigThermalFractureDefinition.h @@ -22,6 +22,7 @@ #include "RigThermalFractureResult.h" +#include "cvfBoundingBox.h" #include "cvfVector3.h" #include @@ -58,11 +59,18 @@ public: std::vector relativeCoordinates( int timeStepIndex ) const; + cvf::Vec3d centerPosition() const; + + double minDepth( int timeStepIndex ) const; + double maxDepth( int timeStepIndex ) const; + void setUnitSystem( RiaDefines::EclipseUnitSystem unitSystem ); RiaDefines::EclipseUnitSystem unitSystem() const; private: + cvf::BoundingBox getBoundingBox( int timeStepIndex ) const; + QString m_name; RiaDefines::EclipseUnitSystem m_unitSystem; diff --git a/ApplicationLibCode/ReservoirDataModel/RigThermalFractureResultUtil.cpp b/ApplicationLibCode/ReservoirDataModel/RigThermalFractureResultUtil.cpp index 55144568c0..95a47237c3 100644 --- a/ApplicationLibCode/ReservoirDataModel/RigThermalFractureResultUtil.cpp +++ b/ApplicationLibCode/ReservoirDataModel/RigThermalFractureResultUtil.cpp @@ -73,16 +73,8 @@ std::vector> boundingBox.expand( 1.0 ); - // Generate a uniform mesh - auto [xCoordsAtNodes, yCoordsAtNodes] = generateUniformMesh( boundingBox, numSamplesX, numSamplesY ); - - // Find center points - std::vector xCoords; - for ( int i = 0; i < static_cast( xCoordsAtNodes.size() ) - 1; i++ ) - xCoords.push_back( ( xCoordsAtNodes[i] + xCoordsAtNodes[i + 1] ) / 2 ); - std::vector depthCoords; - for ( int i = 0; i < static_cast( yCoordsAtNodes.size() ) - 1; i++ ) - depthCoords.push_back( ( yCoordsAtNodes[i] + yCoordsAtNodes[i + 1] ) / 2 ); + // Generate a uniform mesh (center points) + auto [xCoords, depthCoords] = generateUniformMesh( boundingBox, numSamplesX, numSamplesY ); // Fill with invalid value for ( int i = 0; i < numSamplesY; i++ ) @@ -289,7 +281,18 @@ cvf::cref boundingBox.expand( 1.0 ); // Generate a uniform mesh - auto [xCoordsAtNodes, yCoordsAtNodes] = generateUniformMesh( boundingBox, numSamplesX, numSamplesY ); + auto [Xs, Ys] = generateUniformMesh( boundingBox, numSamplesX, numSamplesY ); + + double centerZ = fractureDefinition->centerPosition().z(); + double offset = wellPathIntersectionAtFractureDepth - centerZ; + + std::vector adjustedYs = adjustedYCoordsAroundWellPathPosition( Ys, offset ); + + std::vector scaledXs = scaleVector( Xs, xScaleFactor ); + std::vector scaledYs = scaleVector( adjustedYs, yScaleFactor ); + + std::vector xCoordsAtNodes = scaledXs; + std::vector yCoordsAtNodes = scaledYs; // Find center points std::vector xCoords; @@ -396,6 +399,36 @@ double RigThermalFractureResultUtil::linearSampling( double minVal return sampleDistance; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::vector RigThermalFractureResultUtil::scaleVector( const std::vector& xs, double scaleFactor ) +{ + std::vector scaledXs; + + // Scale using 0 as scaling anchor + for ( double x : xs ) + { + if ( scaleFactor != 1.0 ) x *= scaleFactor; + scaledXs.push_back( x ); + } + + return scaledXs; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::vector RigThermalFractureResultUtil::adjustedYCoordsAroundWellPathPosition( const std::vector& ys, + double offset ) +{ + std::vector adjusted; + for ( auto p : ys ) + adjusted.push_back( p + offset ); + + return adjusted; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -500,3 +533,25 @@ double RigThermalFractureResultUtil::interpolateProperty( const cvf::Vec3d& return calc.weightedMean(); } + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::pair + RigThermalFractureResultUtil::minMaxDepth( std::shared_ptr fractureDefinition, + int activeTimeStepIndex ) +{ + auto getBoundingBox = []( const std::vector& coords ) { + cvf::BoundingBox bb; + for ( auto c : coords ) + bb.add( c ); + return bb; + }; + + auto relativeCoords = getRelativeCoordinates( fractureDefinition, activeTimeStepIndex ); + auto bb = getBoundingBox( relativeCoords ); + + double centerZ = fractureDefinition->centerPosition().z(); + // Y is depth in fracture coordinate system. + return std::make_pair( centerZ + bb.min().y(), centerZ + bb.max().y() ); +} diff --git a/ApplicationLibCode/ReservoirDataModel/RigThermalFractureResultUtil.h b/ApplicationLibCode/ReservoirDataModel/RigThermalFractureResultUtil.h index cc71bf9ca5..9e57ec3a27 100644 --- a/ApplicationLibCode/ReservoirDataModel/RigThermalFractureResultUtil.h +++ b/ApplicationLibCode/ReservoirDataModel/RigThermalFractureResultUtil.h @@ -83,6 +83,9 @@ public: MinMaxAccumulator& minMaxAccumulator, PosNegAccumulator& posNegAccumulator ); + static std::pair minMaxDepth( std::shared_ptr fractureDefinition, + int activeTimeStepIndex ); + private: static std::pair, std::vector> generateUniformMesh( const cvf::BoundingBox& bb, int numSamplesX, int numSamplesY ); @@ -95,6 +98,10 @@ private: getRelativeCoordinates( std::shared_ptr fractureDefinition, size_t timeStepIndex ); + static std::vector scaleVector( const std::vector& xs, double scaleFactor ); + + static std::vector adjustedYCoordsAroundWellPathPosition( const std::vector& ys, double offset ); + static double interpolateProperty( const cvf::Vec3d& position, const std::vector& points, std::shared_ptr fractureDefinition, From 6fb376156a95c2bf5e32a86e88b6d1d9117b5390 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Thu, 25 Aug 2022 12:51:56 +0200 Subject: [PATCH 089/129] Add multiple selected cell edge results --- .../Commands/RicCreateEnsembleWellLogUi.cpp | 25 +- .../Commands/RicCreateEnsembleWellLogUi.h | 5 + .../RivCellEdgeGeometryUtils.cpp | 56 ++-- .../ProjectDataModel/RimCellEdgeColors.cpp | 285 +++++++++--------- .../ProjectDataModel/RimCellEdgeColors.h | 24 +- .../RimEclipseResultDefinition.cpp | 1 - .../ProjectDataModel/RimEclipseView.cpp | 21 -- .../UserInterface/RiuMainWindow.cpp | 7 - .../UserInterface/RiuResultTextBuilder.cpp | 64 ++-- 9 files changed, 230 insertions(+), 258 deletions(-) diff --git a/ApplicationLibCode/Commands/RicCreateEnsembleWellLogUi.cpp b/ApplicationLibCode/Commands/RicCreateEnsembleWellLogUi.cpp index 5c0686474b..a3cc814f93 100644 --- a/ApplicationLibCode/Commands/RicCreateEnsembleWellLogUi.cpp +++ b/ApplicationLibCode/Commands/RicCreateEnsembleWellLogUi.cpp @@ -190,33 +190,40 @@ bool RicCreateEnsembleWellLogUi::autoCreateEnsembleWellLogs() const //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -std::vector> RicCreateEnsembleWellLogUi::properties() const +std::vector> + RicCreateEnsembleWellLogUi::properties( const std::vector& resultNames, + const std::vector& resultCategories, + const RigEclipseCaseData* caseData ) { - std::vector selectedKeyWords = m_selectedKeywords(); - auto findResultCategory = []( const QString& keyword, const std::vector& categories, - RigEclipseCaseData* caseData ) { + const RigEclipseCaseData* caseData ) { // Find the result category for a given keyword - RigCaseCellResultsData* resultData = caseData->results( RiaDefines::PorosityModelType::MATRIX_MODEL ); + auto resultData = caseData->results( RiaDefines::PorosityModelType::MATRIX_MODEL ); for ( auto category : categories ) if ( resultData->hasResultEntry( RigEclipseResultAddress( category, keyword ) ) ) return category; return RiaDefines::ResultCatType::UNDEFINED; }; - std::vector resultCategories = validResultCategories(); - std::vector> props; - for ( auto keyword : selectedKeyWords ) + for ( auto keyword : resultNames ) { - auto resultCategory = findResultCategory( keyword, resultCategories, m_caseData ); + auto resultCategory = findResultCategory( keyword, resultCategories, caseData ); props.push_back( std::make_pair( keyword, resultCategory ) ); } return props; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::vector> RicCreateEnsembleWellLogUi::properties() const +{ + return properties( m_selectedKeywords.value(), validResultCategories(), m_caseData ); +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/Commands/RicCreateEnsembleWellLogUi.h b/ApplicationLibCode/Commands/RicCreateEnsembleWellLogUi.h index 518aeb63a4..55dbf968fb 100644 --- a/ApplicationLibCode/Commands/RicCreateEnsembleWellLogUi.h +++ b/ApplicationLibCode/Commands/RicCreateEnsembleWellLogUi.h @@ -61,6 +61,11 @@ public: std::vector> properties() const; + static std::vector> + properties( const std::vector& resultNames, + const std::vector& resultCategories, + const RigEclipseCaseData* caseData ); + void setCaseData( RigEclipseCaseData* caseData ); protected: diff --git a/ApplicationLibCode/ModelVisualization/RivCellEdgeGeometryUtils.cpp b/ApplicationLibCode/ModelVisualization/RivCellEdgeGeometryUtils.cpp index 19a4ef5d9b..73100d7994 100644 --- a/ApplicationLibCode/ModelVisualization/RivCellEdgeGeometryUtils.cpp +++ b/ApplicationLibCode/ModelVisualization/RivCellEdgeGeometryUtils.cpp @@ -316,47 +316,29 @@ cvf::ref RivCellEdgeGeometryUtils::createCellEdgeResultAccess { cvf::ref cellEdgeResultAccessor = new RigCellEdgeResultAccessor(); - if ( cellEdgeResultColors->propertyType() == RimCellEdgeColors::ANY_SINGLE_PROPERTY ) + auto resultAddresses = cellEdgeResultColors->resultAddresses(); + + std::vector metaData; + cellEdgeResultColors->cellEdgeMetaData( &metaData ); + + size_t cubeFaceIdx; + for ( cubeFaceIdx = 0; cubeFaceIdx < 6; cubeFaceIdx++ ) { - cvf::ref daObj = - RivCellEdgeGeometryUtils::createCellCenterResultAccessor( cellEdgeResultColors->singleVarEdgeResultColors(), - timeStepIndex, - eclipseCase, - grid ); - - for ( size_t cubeFaceIdx = 0; cubeFaceIdx < 6; cubeFaceIdx++ ) + size_t adjustedTimeStep = timeStepIndex; + if ( metaData[cubeFaceIdx].m_isStatic ) { - cellEdgeResultAccessor->setDataAccessObjectForFace( static_cast( cubeFaceIdx ), - daObj.p() ); + adjustedTimeStep = 0; } - } - else - { - RigEclipseResultAddress resultAddresses[6]; - cellEdgeResultColors->gridScalarIndices( resultAddresses ); - std::vector metaData; - cellEdgeResultColors->cellEdgeMetaData( &metaData ); - - size_t cubeFaceIdx; - for ( cubeFaceIdx = 0; cubeFaceIdx < 6; cubeFaceIdx++ ) - { - size_t adjustedTimeStep = timeStepIndex; - if ( metaData[cubeFaceIdx].m_isStatic ) - { - adjustedTimeStep = 0; - } - - RiaDefines::PorosityModelType porosityModel = cellResultColors->porosityModel(); - cvf::ref daObj = - RigResultAccessorFactory::createFromResultAddress( eclipseCase, - grid->gridIndex(), - porosityModel, - adjustedTimeStep, - resultAddresses[cubeFaceIdx] ); - cellEdgeResultAccessor->setDataAccessObjectForFace( static_cast( cubeFaceIdx ), - daObj.p() ); - } + RiaDefines::PorosityModelType porosityModel = cellResultColors->porosityModel(); + cvf::ref daObj = + RigResultAccessorFactory::createFromResultAddress( eclipseCase, + grid->gridIndex(), + porosityModel, + adjustedTimeStep, + resultAddresses[cubeFaceIdx] ); + cellEdgeResultAccessor->setDataAccessObjectForFace( static_cast( cubeFaceIdx ), + daObj.p() ); } return cellEdgeResultAccessor; diff --git a/ApplicationLibCode/ProjectDataModel/RimCellEdgeColors.cpp b/ApplicationLibCode/ProjectDataModel/RimCellEdgeColors.cpp index 1aceb4f3d4..d3c319e14e 100644 --- a/ApplicationLibCode/ProjectDataModel/RimCellEdgeColors.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimCellEdgeColors.cpp @@ -20,9 +20,12 @@ #include "RimCellEdgeColors.h" -#include "RigCaseCellResultsData.h" -#include "RigFlowDiagResults.h" +#include "RicCreateEnsembleWellLogUi.h" +#include "RigCaseCellResultsData.h" +#include "RigEclipseResultAddress.h" + +#include "RimEclipseCase.h" #include "RimEclipseCellColors.h" #include "RimEclipseView.h" #include "RimRegularLegendConfig.h" @@ -30,8 +33,11 @@ #include "cafPdmUiListEditor.h" #include "cafPdmUiTreeOrdering.h" +#include "cafPdmUiTreeSelectionEditor.h" #include "cvfMath.h" + +#include "RiaLogging.h" #include namespace caf @@ -40,7 +46,8 @@ template <> void AppEnum::setUp() { addItem( RimCellEdgeColors::MULTI_AXIS_STATIC_PROPERTY, "MULTI_AXIS_STATIC_PROPERTY", "Multi Axis Static Property" ); - addItem( RimCellEdgeColors::ANY_SINGLE_PROPERTY, "ANY_SINGLE_PROPERTY", "Any Single Property" ); + QStringList aliasList = { "ANY_SINGLE_PROPERTY" }; + addItem( RimCellEdgeColors::CUSTOM_PROPERTIES, "CUSTOM_PROPERTIES", "Selected Properties", aliasList ); setDefault( RimCellEdgeColors::MULTI_AXIS_STATIC_PROPERTY ); } } // namespace caf @@ -65,13 +72,28 @@ RimCellEdgeColors::RimCellEdgeColors() CAF_PDM_InitFieldNoDefault( &m_legendConfig, "LegendDefinition", "Color Legend", ":/Legend.png" ); - CAF_PDM_InitFieldNoDefault( &m_singleVarEdgeResultColors, "SingleVarEdgeResult", "Result Property", ":/CellResult.png" ); - m_singleVarEdgeResultColors = new RimEclipseCellColors(); + CAF_PDM_InitFieldNoDefault( &m_selectedKeywords, "SelectedProperties", "Selected Properties" ); + m_selectedKeywords.uiCapability()->setUiEditorTypeName( caf::PdmUiTreeSelectionEditor::uiEditorTypeName() ); + + CAF_PDM_InitField( &m_showTextValuesIfItemIsUnchecked, + "ShowTextValuesIfItemIsUnchecked", + false, + "Always Show Values in Result Info Window", + "", + "Allow display of result values in Result Info window if the Cell Edge object is unchecked in " + "Property Editor." ); m_resultVariable.uiCapability()->setUiEditorTypeName( caf::PdmUiListEditor::uiEditorTypeName() ); m_legendConfig = new RimRegularLegendConfig(); + CAF_PDM_InitFieldNoDefault( &m_singleVarEdgeResultColors_OBSOLETE, + "SingleVarEdgeResult", + "Result Property", + ":/CellResult.png" ); + m_singleVarEdgeResultColors_OBSOLETE = new RimEclipseCellColors(); + m_singleVarEdgeResultColors_OBSOLETE.uiCapability()->setUiHidden( true ); + m_ignoredResultScalar = cvf::UNDEFINED_DOUBLE; resetResultAddresses(); } @@ -89,7 +111,6 @@ RimCellEdgeColors::~RimCellEdgeColors() void RimCellEdgeColors::setReservoirView( RimEclipseView* ownerReservoirView ) { m_reservoirView = ownerReservoirView; - m_singleVarEdgeResultColors->setReservoirView( ownerReservoirView ); } //-------------------------------------------------------------------------------------------------- @@ -97,24 +118,47 @@ void RimCellEdgeColors::setReservoirView( RimEclipseView* ownerReservoirView ) //-------------------------------------------------------------------------------------------------- void RimCellEdgeColors::loadResult() { - if ( !m_enableCellEdgeColors ) return; if ( !m_reservoirView->currentGridCellResults() ) return; - if ( isUsingSingleVariable() ) - { - m_singleVarEdgeResultColors->loadResult(); - ; + resetResultAddresses(); - RigEclipseResultAddress resultAddr = m_singleVarEdgeResultColors->eclipseResultAddress(); - for ( int cubeFaceIdx = 0; cubeFaceIdx < 6; ++cubeFaceIdx ) + if ( isUserDefinedPropertiesActive() ) + { + std::vector categories = { RiaDefines::ResultCatType::STATIC_NATIVE, + RiaDefines::ResultCatType::DYNAMIC_NATIVE, + RiaDefines::ResultCatType::INPUT_PROPERTY }; + + std::vector resultNames = m_selectedKeywords(); + if ( resultNames.size() > 6 ) { - m_resultNameToAddressPairs[cubeFaceIdx] = - std::make_pair( m_singleVarEdgeResultColors->resultVariable(), resultAddr ); + QString title = "Cell Edge Results"; + + QString text = + QString( "Selected Cell Edge result property count is %1. Up to 6 results are supported, no " + "data will be loaded.\n\nPlease select equal to or less than 6 properties to show data." ) + .arg( resultNames.size() ); + + RiaLogging::errorInMessageBox( nullptr, title, text ); + + return; + } + + auto properties = RicCreateEnsembleWellLogUi::properties( resultNames, + categories, + m_reservoirView->eclipseCase()->eclipseCaseData() ); + + for ( size_t i = 0; i < properties.size(); i++ ) + { + auto [name, category] = properties[i]; + RigEclipseResultAddress adr = RigEclipseResultAddress( category, name ); + + m_reservoirView->currentGridCellResults()->ensureKnownResultLoaded( adr ); + + m_resultNameToAddressPairs[i] = std::make_pair( name, adr ); } } else { - resetResultAddresses(); QStringList vars = findResultVariableNames(); updateIgnoredScalarValue(); @@ -151,8 +195,12 @@ void RimCellEdgeColors::loadResult() //-------------------------------------------------------------------------------------------------- void RimCellEdgeColors::initAfterRead() { - m_singleVarEdgeResultColors->initAfterRead(); this->updateUiIconFromToggleField(); + + if ( m_singleVarEdgeResultColors_OBSOLETE->resultVariableUiName() != RiaResultNames::undefinedResultName() ) + { + m_selectedKeywords.v().push_back( m_singleVarEdgeResultColors_OBSOLETE->resultVariableUiName() ); + } } //-------------------------------------------------------------------------------------------------- @@ -192,6 +240,8 @@ void RimCellEdgeColors::EdgeFaceEnum::setUp() QList RimCellEdgeColors::calculateValueOptions( const caf::PdmFieldHandle* fieldNeedingOptions ) { + QList options; + if ( fieldNeedingOptions == &m_resultVariable ) { if ( m_reservoirView && m_reservoirView->currentGridCellResults() ) @@ -202,8 +252,6 @@ QList RimCellEdgeColors::calculateValueOptions( const ca // TODO: Must also handle input properties // varList += m_reservoirView->gridCellResults()->resultNames(RiaDefines::INPUT_PROPERTY); - QList options; - std::map> varBaseNameToVarsMap; int i; @@ -258,6 +306,41 @@ QList RimCellEdgeColors::calculateValueOptions( const ca } } + if ( fieldNeedingOptions == &m_selectedKeywords ) + { + RigCaseCellResultsData* resultData = m_reservoirView->currentGridCellResults(); + + std::vector resultCategories = { RiaDefines::ResultCatType::STATIC_NATIVE, + RiaDefines::ResultCatType::DYNAMIC_NATIVE, + RiaDefines::ResultCatType::INPUT_PROPERTY }; + + for ( auto catType : resultCategories ) + { + QList allOptions = + RimEclipseResultDefinition::calcOptionsForVariableUiFieldStandard( catType, resultData ); + + bool isFirstOfCategory = true; + for ( const caf::PdmOptionItemInfo& option : allOptions ) + { + if ( resultData->hasResultEntry( RigEclipseResultAddress( catType, option.optionUiText() ) ) ) + { + if ( isFirstOfCategory ) + { + // Add the category title only when there is at least one valid result + options.push_back( + caf::PdmOptionItemInfo::createHeader( caf::AppEnum::uiText( catType ), + true ) ); + isFirstOfCategory = false; + } + + options.push_back( option ); + } + } + } + + return options; + } + return QList(); } @@ -266,11 +349,12 @@ QList RimCellEdgeColors::calculateValueOptions( const ca //-------------------------------------------------------------------------------------------------- void RimCellEdgeColors::defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) { + uiOrdering.add( &m_showTextValuesIfItemIsUnchecked ); uiOrdering.add( &m_propertyType ); - if ( isUsingSingleVariable() ) + if ( isUserDefinedPropertiesActive() ) { - m_singleVarEdgeResultColors->uiOrdering( uiConfigName, uiOrdering ); + uiOrdering.add( &m_selectedKeywords ); } else { @@ -323,13 +407,15 @@ QStringList RimCellEdgeColors::findResultVariableNames() //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RimCellEdgeColors::gridScalarIndices( RigEclipseResultAddress resultIndices[6] ) +std::array RimCellEdgeColors::resultAddresses() const { - int cubeFaceIndex; - for ( cubeFaceIndex = 0; cubeFaceIndex < 6; ++cubeFaceIndex ) + std::array adr; + for ( int cubeFaceIndex = 0; cubeFaceIndex < 6; ++cubeFaceIndex ) { - resultIndices[cubeFaceIndex] = RigEclipseResultAddress( m_resultNameToAddressPairs[cubeFaceIndex].second ); + adr[cubeFaceIndex] = RigEclipseResultAddress( m_resultNameToAddressPairs[cubeFaceIndex].second ); } + + return adr; } //-------------------------------------------------------------------------------------------------- @@ -349,9 +435,9 @@ void RimCellEdgeColors::gridScalarResultNames( std::vector* resultNames //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -bool RimCellEdgeColors::isUsingSingleVariable() const +bool RimCellEdgeColors::isUserDefinedPropertiesActive() const { - return ( m_propertyType == ANY_SINGLE_PROPERTY ); + return ( m_propertyType == CUSTOM_PROPERTIES ); } //-------------------------------------------------------------------------------------------------- @@ -361,22 +447,22 @@ void RimCellEdgeColors::cellEdgeMetaData( std::vector* meta { CVF_ASSERT( metaDataVector ); - RigEclipseResultAddress resultIndices[6]; - this->gridScalarIndices( resultIndices ); + auto addresses = this->resultAddresses(); std::vector resultNames; this->gridScalarResultNames( &resultNames ); bool isStatic = true; - if ( isUsingSingleVariable() ) - { - isStatic = m_singleVarEdgeResultColors->resultType() == RiaDefines::ResultCatType::STATIC_NATIVE; - } for ( size_t i = 0; i < 6; i++ ) { + if ( isUserDefinedPropertiesActive() ) + { + isStatic = addresses[i].resultCatType() == RiaDefines::ResultCatType::STATIC_NATIVE; + } + RimCellEdgeMetaData metaData; - metaData.m_eclipseResultAddress = resultIndices[i]; + metaData.m_eclipseResultAddress = addresses[i]; metaData.m_resultVariable = resultNames[i]; metaData.m_isStatic = isStatic; @@ -403,7 +489,17 @@ bool RimCellEdgeColors::hasResult() const { if ( !m_enableCellEdgeColors() ) return false; - if ( isUsingSingleVariable() && m_singleVarEdgeResultColors->isFlowDiagOrInjectionFlooding() ) + return showTextResult(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +bool RimCellEdgeColors::showTextResult() const +{ + if ( !m_enableCellEdgeColors && !m_showTextValuesIfItemIsUnchecked ) return false; + + if ( isUserDefinedPropertiesActive() ) { return true; } @@ -444,32 +540,19 @@ void RimCellEdgeColors::minMaxCellEdgeValues( double& min, double& max ) if ( m_reservoirView->currentGridCellResults() ) { - if ( isUsingSingleVariable() && singleVarEdgeResultColors()->isFlowDiagOrInjectionFlooding() ) + auto resultAddresses = this->resultAddresses(); + + size_t faceIdx; + for ( faceIdx = 0; faceIdx < 6; faceIdx++ ) { - int currentTimeStep = m_reservoirView->currentTimeStep(); + if ( !resultAddresses[faceIdx].isValid() ) continue; - RigFlowDiagResults* fldResults = singleVarEdgeResultColors()->flowDiagSolution()->flowDiagResults(); - RigFlowDiagResultAddress resAddr = singleVarEdgeResultColors()->flowDiagResAddress(); - - fldResults->minMaxScalarValues( resAddr, currentTimeStep, &globalMin, &globalMax ); - } - else - { - RigEclipseResultAddress resultAddresses[6]; - this->gridScalarIndices( resultAddresses ); - - size_t faceIdx; - for ( faceIdx = 0; faceIdx < 6; faceIdx++ ) { - if ( !resultAddresses[faceIdx].isValid() ) continue; + double cMin, cMax; + m_reservoirView->currentGridCellResults()->minMaxCellScalarValues( resultAddresses[faceIdx], cMin, cMax ); - { - double cMin, cMax; - m_reservoirView->currentGridCellResults()->minMaxCellScalarValues( resultAddresses[faceIdx], cMin, cMax ); - - globalMin = std::min( globalMin, cMin ); - globalMax = std::max( globalMax, cMax ); - } + globalMin = std::min( globalMin, cMin ); + globalMax = std::max( globalMax, cMax ); } } } @@ -486,8 +569,7 @@ void RimCellEdgeColors::posNegClosestToZero( double& pos, double& neg ) pos = HUGE_VAL; neg = -HUGE_VAL; - RigEclipseResultAddress resultAddresses[6]; - this->gridScalarIndices( resultAddresses ); + auto resultAddresses = this->resultAddresses(); size_t faceIdx; for ( faceIdx = 0; faceIdx < 6; faceIdx++ ) @@ -504,22 +586,6 @@ void RimCellEdgeColors::posNegClosestToZero( double& pos, double& neg ) } } -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimCellEdgeColors::updateUiFieldsFromActiveResult() -{ - m_singleVarEdgeResultColors->updateUiFieldsFromActiveResult(); -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimCellEdgeColors::setEclipseCase( RimEclipseCase* eclipseCase ) -{ - m_singleVarEdgeResultColors->setEclipseCase( eclipseCase ); -} - //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -528,49 +594,21 @@ void RimCellEdgeColors::setResultVariable( const QString& variableName ) m_resultVariable = variableName; } -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -QString RimCellEdgeColors::resultVariable() const -{ - if ( isUsingSingleVariable() ) - { - return m_singleVarEdgeResultColors->resultVariable(); - } - else - { - return m_resultVariable; - } -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -QString RimCellEdgeColors::resultVariableUiName() const -{ - if ( isUsingSingleVariable() ) - { - return m_singleVarEdgeResultColors->resultVariableUiName(); - } - else - { - return m_resultVariable; - } -} - //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- QString RimCellEdgeColors::resultVariableUiShortName() const { - if ( isUsingSingleVariable() ) + if ( isUserDefinedPropertiesActive() ) { - return m_singleVarEdgeResultColors->resultVariableUiShortName(); - } - else - { - return m_resultVariable; + if ( m_selectedKeywords().empty() ) return ""; + + if ( m_selectedKeywords().size() == 1 ) return m_selectedKeywords().front(); + + return "Multiple Properties"; } + + return m_resultVariable; } //-------------------------------------------------------------------------------------------------- @@ -589,35 +627,12 @@ caf::PdmFieldHandle* RimCellEdgeColors::objectToggleField() return &m_enableCellEdgeColors; } -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -bool RimCellEdgeColors::hasCategoryResult() const -{ - return isUsingSingleVariable() && m_singleVarEdgeResultColors->hasCategoryResult(); -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -RimEclipseCellColors* RimCellEdgeColors::singleVarEdgeResultColors() -{ - return m_singleVarEdgeResultColors; -} - //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- RimRegularLegendConfig* RimCellEdgeColors::legendConfig() { - if ( isUsingSingleVariable() ) - { - return m_singleVarEdgeResultColors->legendConfig(); - } - else - { - return m_legendConfig; - } + return m_legendConfig(); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/RimCellEdgeColors.h b/ApplicationLibCode/ProjectDataModel/RimCellEdgeColors.h index e58adccb6d..05aae4d8da 100644 --- a/ApplicationLibCode/ProjectDataModel/RimCellEdgeColors.h +++ b/ApplicationLibCode/ProjectDataModel/RimCellEdgeColors.h @@ -68,39 +68,33 @@ public: enum PropertyType { MULTI_AXIS_STATIC_PROPERTY, - ANY_SINGLE_PROPERTY + CUSTOM_PROPERTIES }; typedef caf::AppEnum EdgeFaceEnum; void setReservoirView( RimEclipseView* ownerReservoirView ); - void setEclipseCase( RimEclipseCase* eclipseCase ); void setResultVariable( const QString& variableName ); - QString resultVariable() const; - QString resultVariableUiName() const; QString resultVariableUiShortName() const; void setActive( bool active ); - double ignoredScalarValue() { return m_ignoredResultScalar; } - void gridScalarIndices( RigEclipseResultAddress resultIndices[6] ); - void cellEdgeMetaData( std::vector* metaData ); + double ignoredScalarValue() { return m_ignoredResultScalar; } + std::array resultAddresses() const; + void cellEdgeMetaData( std::vector* metaData ); void loadResult(); bool hasResult() const; - bool hasCategoryResult() const; - bool isUsingSingleVariable() const; + bool showTextResult() const; + bool isUserDefinedPropertiesActive() const; - RimEclipseCellColors* singleVarEdgeResultColors(); RimRegularLegendConfig* legendConfig(); PropertyType propertyType() const; void minMaxCellEdgeValues( double& min, double& max ); void posNegClosestToZero( double& pos, double& neg ); - void updateUiFieldsFromActiveResult(); - protected: void initAfterRead() override; void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) override; @@ -130,5 +124,9 @@ private: caf::PdmField> m_propertyType; caf::PdmChildField m_legendConfig; - caf::PdmChildField m_singleVarEdgeResultColors; + caf::PdmField> m_selectedKeywords; + caf::PdmField m_showTextValuesIfItemIsUnchecked; + + // Obsolete fields + caf::PdmChildField m_singleVarEdgeResultColors_OBSOLETE; }; diff --git a/ApplicationLibCode/ProjectDataModel/RimEclipseResultDefinition.cpp b/ApplicationLibCode/ProjectDataModel/RimEclipseResultDefinition.cpp index 32a6ee546e..619ef591a7 100644 --- a/ApplicationLibCode/ProjectDataModel/RimEclipseResultDefinition.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimEclipseResultDefinition.cpp @@ -609,7 +609,6 @@ void RimEclipseResultDefinition::loadDataAndUpdate() this->firstAncestorOrThisOfType( cellEdgeColors ); if ( cellEdgeColors ) { - cellEdgeColors->singleVarEdgeResultColors()->updateLegendCategorySettings(); cellEdgeColors->loadResult(); if ( view ) diff --git a/ApplicationLibCode/ProjectDataModel/RimEclipseView.cpp b/ApplicationLibCode/ProjectDataModel/RimEclipseView.cpp index f403c5f8c8..089ed6de2b 100644 --- a/ApplicationLibCode/ProjectDataModel/RimEclipseView.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimEclipseView.cpp @@ -1400,11 +1400,6 @@ void RimEclipseView::onUpdateLegends() { if ( this->cellEdgeResult()->hasResult() ) { - if ( this->cellEdgeResult()->isUsingSingleVariable() ) - { - this->cellEdgeResult()->singleVarEdgeResultColors()->updateRangesForEmbeddedLegends( m_currentTimeStep ); - } - else { double globalMin, globalMax; double globalPosClosestToZero, globalNegClosestToZero; @@ -1416,21 +1411,6 @@ void RimEclipseView::onUpdateLegends() globalPosClosestToZero, globalNegClosestToZero ); this->cellEdgeResult()->legendConfig()->setAutomaticRanges( globalMin, globalMax, globalMin, globalMax ); - - if ( this->cellEdgeResult()->hasCategoryResult() ) - { - if ( cellEdgeResult()->singleVarEdgeResultColors()->resultType() != - RiaDefines::ResultCatType::FORMATION_NAMES ) - { - cellEdgeResult()->legendConfig()->setIntegerCategories( results->uniqueCellScalarValues( - cellEdgeResult()->singleVarEdgeResultColors()->eclipseResultAddress() ) ); - } - else - { - const std::vector fnVector = eclipseCase->formationNames(); - cellEdgeResult()->legendConfig()->setNamedCategories( fnVector ); - } - } } this->cellEdgeResult()->legendConfig()->setTitle( QString( "Edge Results: \n" ) + @@ -1557,7 +1537,6 @@ void RimEclipseView::setEclipseCase( RimEclipseCase* reservoir ) faultResultSettings()->customFaultResult()->setEclipseCase( reservoir ); cellFilterCollection()->setCase( reservoir ); m_streamlineCollection->setEclipseCase( reservoir ); - cellEdgeResult()->setEclipseCase( reservoir ); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/UserInterface/RiuMainWindow.cpp b/ApplicationLibCode/UserInterface/RiuMainWindow.cpp index 15dc699382..709856a471 100644 --- a/ApplicationLibCode/UserInterface/RiuMainWindow.cpp +++ b/ApplicationLibCode/UserInterface/RiuMainWindow.cpp @@ -1703,13 +1703,6 @@ void RiuMainWindow::updateUiFieldsFromActiveResult( caf::PdmObjectHandle* object { eclFaultColors->updateUiFieldsFromActiveResult(); } - - RimCellEdgeColors* cellEdgeColors = nullptr; - cellEdgeColors = dynamic_cast( objectToUpdate ); - if ( cellEdgeColors ) - { - cellEdgeColors->updateUiFieldsFromActiveResult(); - } } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/UserInterface/RiuResultTextBuilder.cpp b/ApplicationLibCode/UserInterface/RiuResultTextBuilder.cpp index 26c0dde78e..1e862ce447 100644 --- a/ApplicationLibCode/UserInterface/RiuResultTextBuilder.cpp +++ b/ApplicationLibCode/UserInterface/RiuResultTextBuilder.cpp @@ -732,49 +732,43 @@ QString RiuResultTextBuilder::cellEdgeResultDetails() { QString text; - if ( m_viewWithFaultsSettings && m_viewWithFaultsSettings->cellEdgeResult()->hasResult() ) + if ( m_viewWithFaultsSettings && m_viewWithFaultsSettings->cellEdgeResult()->showTextResult() ) { + m_viewWithFaultsSettings->cellEdgeResult()->loadResult(); + text += "-- Cell edge result data --\n"; - if ( m_viewWithFaultsSettings->cellEdgeResult()->isUsingSingleVariable() ) - { - text += cellResultText( m_viewWithFaultsSettings->cellEdgeResult()->singleVarEdgeResultColors() ); - text += "\n"; - } - else - { - std::vector metaData; - m_viewWithFaultsSettings->cellEdgeResult()->cellEdgeMetaData( &metaData ); + std::vector metaData; + m_viewWithFaultsSettings->cellEdgeResult()->cellEdgeMetaData( &metaData ); - std::set uniqueResultIndices; + std::set uniqueResultAddresses; - for ( int idx = 0; idx < 6; idx++ ) + for ( int idx = 0; idx < 6; idx++ ) + { + RigEclipseResultAddress resultAddr = metaData[idx].m_eclipseResultAddress; + if ( !resultAddr.isValid() ) continue; + + if ( uniqueResultAddresses.find( resultAddr ) != uniqueResultAddresses.end() ) continue; + + size_t adjustedTimeStep = m_timeStepIndex; + if ( metaData[idx].m_isStatic ) { - RigEclipseResultAddress resultAddr = metaData[idx].m_eclipseResultAddress; - if ( !resultAddr.isValid() ) continue; + adjustedTimeStep = 0; + } - if ( uniqueResultIndices.find( resultAddr ) != uniqueResultIndices.end() ) continue; + RiaDefines::PorosityModelType porosityModel = m_eclResDef->porosityModel(); + cvf::ref resultAccessor = + RigResultAccessorFactory::createFromResultAddress( m_eclResDef->eclipseCase()->eclipseCaseData(), + m_gridIndex, + porosityModel, + adjustedTimeStep, + resultAddr ); + if ( resultAccessor.notNull() ) + { + double scalarValue = resultAccessor->cellScalar( m_cellIndex ); + text.append( QString( "%1 : %2\n" ).arg( metaData[idx].m_resultVariable ).arg( scalarValue ) ); - size_t adjustedTimeStep = m_timeStepIndex; - if ( metaData[idx].m_isStatic ) - { - adjustedTimeStep = 0; - } - - RiaDefines::PorosityModelType porosityModel = m_eclResDef->porosityModel(); - cvf::ref resultAccessor = - RigResultAccessorFactory::createFromResultAddress( m_eclResDef->eclipseCase()->eclipseCaseData(), - m_gridIndex, - porosityModel, - adjustedTimeStep, - resultAddr ); - if ( resultAccessor.notNull() ) - { - double scalarValue = resultAccessor->cellScalar( m_cellIndex ); - text.append( QString( "%1 : %2\n" ).arg( metaData[idx].m_resultVariable ).arg( scalarValue ) ); - - uniqueResultIndices.insert( resultAddr ); - } + uniqueResultAddresses.insert( resultAddr ); } } } From 43e38d8aff07e4ed611f71eb51539c53c9f8423f Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Thu, 25 Aug 2022 11:30:15 +0200 Subject: [PATCH 090/129] Remove unused members and remove includes --- .../Commands/SummaryPlotCommands/RicSummaryPlotEditorUi.h | 1 - .../Intersections/RimExtrudedCurveIntersection.h | 1 - .../ProjectDataModel/Summary/RimEnsembleCurveSet.h | 1 - .../ProjectDataModel/Summary/RimSummaryCurveCollection.h | 1 - .../ProjectDataModel/Summary/RimSummaryMultiPlot.h | 1 - .../ProjectDataModel/Summary/RimSummaryPlot.h | 1 - .../ProjectDataModel/Summary/RimSummaryPlotCollection.h | 1 - .../ProjectDataModelCommands/RimcElasticProperties.h | 1 - .../ProjectDataModelCommands/RimcStimPlanModel.h | 1 - .../ProjectDataModelCommands/RimcStimPlanModelCollection.h | 1 - .../RimcStimPlanModelPlotCollection.h | 1 - .../RimcStimPlanModelTemplateCollection.h | 1 - .../ProjectDataModelCommands/RimcSurfaceCollection.h | 1 - .../ProjectDataModelCommands/RimcWellLogPlot.h | 1 - .../ProjectDataModelCommands/RimcWellLogPlotCollection.h | 1 - .../ProjectDataModelCommands/RimcWellLogTrack.h | 1 - .../cafProjectDataModel/cafPdmCore/cafPdmPtrArrayField.h | 7 +------ 17 files changed, 1 insertion(+), 22 deletions(-) diff --git a/ApplicationLibCode/Commands/SummaryPlotCommands/RicSummaryPlotEditorUi.h b/ApplicationLibCode/Commands/SummaryPlotCommands/RicSummaryPlotEditorUi.h index ec027b8721..dfa5fce41f 100644 --- a/ApplicationLibCode/Commands/SummaryPlotCommands/RicSummaryPlotEditorUi.h +++ b/ApplicationLibCode/Commands/SummaryPlotCommands/RicSummaryPlotEditorUi.h @@ -28,7 +28,6 @@ #include "cafPdmObject.h" #include "cafPdmPointer.h" #include "cafPdmProxyValueField.h" -#include "cafPdmPtrArrayField.h" #include "cafPdmPtrField.h" #include diff --git a/ApplicationLibCode/ProjectDataModel/Intersections/RimExtrudedCurveIntersection.h b/ApplicationLibCode/ProjectDataModel/Intersections/RimExtrudedCurveIntersection.h index be726af8db..8e2bbf2d1f 100644 --- a/ApplicationLibCode/ProjectDataModel/Intersections/RimExtrudedCurveIntersection.h +++ b/ApplicationLibCode/ProjectDataModel/Intersections/RimExtrudedCurveIntersection.h @@ -25,7 +25,6 @@ #include "cafPdmChildField.h" #include "cafPdmProxyValueField.h" -#include "cafPdmPtrArrayField.h" class RimWellPath; class RivExtrudedCurveIntersectionPartMgr; diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimEnsembleCurveSet.h b/ApplicationLibCode/ProjectDataModel/Summary/RimEnsembleCurveSet.h index 27056ab436..8ac2b87b40 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimEnsembleCurveSet.h +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimEnsembleCurveSet.h @@ -43,7 +43,6 @@ #include "cafPdmFieldCvfColor.h" #include "cafPdmObject.h" #include "cafPdmProxyValueField.h" -#include "cafPdmPtrArrayField.h" #include "cafPdmPtrField.h" #include diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCurveCollection.h b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCurveCollection.h index 988aea3e02..952ecbf9fc 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCurveCollection.h +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCurveCollection.h @@ -24,7 +24,6 @@ #include "cafPdmChildField.h" #include "cafPdmField.h" #include "cafPdmObject.h" -#include "cafPdmPtrArrayField.h" class RimSummaryCase; class RimSummaryCurve; diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.h b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.h index 66357d832d..fafb7b49e4 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.h +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.h @@ -23,7 +23,6 @@ #include "cafPdmChildField.h" #include "cafPdmObject.h" -#include "cafPdmPtrArrayField.h" #include "cafPdmUiItem.h" #include "cafSignal.h" diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlot.h b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlot.h index fa79ba1b63..640a51293a 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlot.h +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlot.h @@ -32,7 +32,6 @@ #include "cafPdmChildArrayField.h" #include "cafPdmObjectHandle.h" #include "cafPdmProxyValueField.h" -#include "cafPdmPtrArrayField.h" #include "cafPdmPtrField.h" #include diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlotCollection.h b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlotCollection.h index 93ce7f6ec9..6e8de40312 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlotCollection.h +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlotCollection.h @@ -23,7 +23,6 @@ #include "cafPdmChildArrayField.h" #include "cafPdmObject.h" -#include "cafPdmPtrArrayField.h" class RimSummaryPlot; diff --git a/ApplicationLibCode/ProjectDataModelCommands/RimcElasticProperties.h b/ApplicationLibCode/ProjectDataModelCommands/RimcElasticProperties.h index f1ea4b5ed0..6df8ce757f 100644 --- a/ApplicationLibCode/ProjectDataModelCommands/RimcElasticProperties.h +++ b/ApplicationLibCode/ProjectDataModelCommands/RimcElasticProperties.h @@ -23,7 +23,6 @@ #include "cafPdmField.h" #include "cafPdmObjectHandle.h" #include "cafPdmObjectMethod.h" -#include "cafPdmPtrArrayField.h" #include "cafPdmPtrField.h" #include diff --git a/ApplicationLibCode/ProjectDataModelCommands/RimcStimPlanModel.h b/ApplicationLibCode/ProjectDataModelCommands/RimcStimPlanModel.h index db8edc8a97..9b343c2257 100644 --- a/ApplicationLibCode/ProjectDataModelCommands/RimcStimPlanModel.h +++ b/ApplicationLibCode/ProjectDataModelCommands/RimcStimPlanModel.h @@ -21,7 +21,6 @@ #include "cafPdmField.h" #include "cafPdmObjectHandle.h" #include "cafPdmObjectMethod.h" -#include "cafPdmPtrArrayField.h" #include "cafPdmPtrField.h" #include diff --git a/ApplicationLibCode/ProjectDataModelCommands/RimcStimPlanModelCollection.h b/ApplicationLibCode/ProjectDataModelCommands/RimcStimPlanModelCollection.h index 87665ccb3f..0188ff2a29 100644 --- a/ApplicationLibCode/ProjectDataModelCommands/RimcStimPlanModelCollection.h +++ b/ApplicationLibCode/ProjectDataModelCommands/RimcStimPlanModelCollection.h @@ -23,7 +23,6 @@ #include "cafPdmField.h" #include "cafPdmObjectHandle.h" #include "cafPdmObjectMethod.h" -#include "cafPdmPtrArrayField.h" #include "cafPdmPtrField.h" #include diff --git a/ApplicationLibCode/ProjectDataModelCommands/RimcStimPlanModelPlotCollection.h b/ApplicationLibCode/ProjectDataModelCommands/RimcStimPlanModelPlotCollection.h index bb41d5dd31..104470bb1a 100644 --- a/ApplicationLibCode/ProjectDataModelCommands/RimcStimPlanModelPlotCollection.h +++ b/ApplicationLibCode/ProjectDataModelCommands/RimcStimPlanModelPlotCollection.h @@ -23,7 +23,6 @@ #include "cafPdmField.h" #include "cafPdmObjectHandle.h" #include "cafPdmObjectMethod.h" -#include "cafPdmPtrArrayField.h" #include "cafPdmPtrField.h" class RimStimPlanModel; diff --git a/ApplicationLibCode/ProjectDataModelCommands/RimcStimPlanModelTemplateCollection.h b/ApplicationLibCode/ProjectDataModelCommands/RimcStimPlanModelTemplateCollection.h index 19a10e7c24..c7b64576f3 100644 --- a/ApplicationLibCode/ProjectDataModelCommands/RimcStimPlanModelTemplateCollection.h +++ b/ApplicationLibCode/ProjectDataModelCommands/RimcStimPlanModelTemplateCollection.h @@ -23,7 +23,6 @@ #include "cafPdmField.h" #include "cafPdmObjectHandle.h" #include "cafPdmObjectMethod.h" -#include "cafPdmPtrArrayField.h" #include "cafPdmPtrField.h" #include diff --git a/ApplicationLibCode/ProjectDataModelCommands/RimcSurfaceCollection.h b/ApplicationLibCode/ProjectDataModelCommands/RimcSurfaceCollection.h index 40e4b5f0ff..e46a5ec98e 100644 --- a/ApplicationLibCode/ProjectDataModelCommands/RimcSurfaceCollection.h +++ b/ApplicationLibCode/ProjectDataModelCommands/RimcSurfaceCollection.h @@ -23,7 +23,6 @@ #include "cafPdmField.h" #include "cafPdmObjectHandle.h" #include "cafPdmObjectMethod.h" -#include "cafPdmPtrArrayField.h" #include "cafPdmPtrField.h" #include diff --git a/ApplicationLibCode/ProjectDataModelCommands/RimcWellLogPlot.h b/ApplicationLibCode/ProjectDataModelCommands/RimcWellLogPlot.h index 4c38a9da9b..cd18a1bc3c 100644 --- a/ApplicationLibCode/ProjectDataModelCommands/RimcWellLogPlot.h +++ b/ApplicationLibCode/ProjectDataModelCommands/RimcWellLogPlot.h @@ -23,7 +23,6 @@ #include "cafPdmField.h" #include "cafPdmObjectHandle.h" #include "cafPdmObjectMethod.h" -#include "cafPdmPtrArrayField.h" #include "cafPdmPtrField.h" class RimEclipseCase; diff --git a/ApplicationLibCode/ProjectDataModelCommands/RimcWellLogPlotCollection.h b/ApplicationLibCode/ProjectDataModelCommands/RimcWellLogPlotCollection.h index f31c3cc2c5..1b7c02a4cc 100644 --- a/ApplicationLibCode/ProjectDataModelCommands/RimcWellLogPlotCollection.h +++ b/ApplicationLibCode/ProjectDataModelCommands/RimcWellLogPlotCollection.h @@ -23,7 +23,6 @@ #include "cafPdmField.h" #include "cafPdmObjectHandle.h" #include "cafPdmObjectMethod.h" -#include "cafPdmPtrArrayField.h" #include "cafPdmPtrField.h" class RimStimPlanModel; diff --git a/ApplicationLibCode/ProjectDataModelCommands/RimcWellLogTrack.h b/ApplicationLibCode/ProjectDataModelCommands/RimcWellLogTrack.h index b7cead3bee..4b42821206 100644 --- a/ApplicationLibCode/ProjectDataModelCommands/RimcWellLogTrack.h +++ b/ApplicationLibCode/ProjectDataModelCommands/RimcWellLogTrack.h @@ -23,7 +23,6 @@ #include "cafPdmField.h" #include "cafPdmObjectHandle.h" #include "cafPdmObjectMethod.h" -#include "cafPdmPtrArrayField.h" #include "cafPdmPtrField.h" class RimEclipseCase; diff --git a/Fwk/AppFwk/cafProjectDataModel/cafPdmCore/cafPdmPtrArrayField.h b/Fwk/AppFwk/cafProjectDataModel/cafPdmCore/cafPdmPtrArrayField.h index c1e1b734d8..a1a7453916 100644 --- a/Fwk/AppFwk/cafProjectDataModel/cafPdmCore/cafPdmPtrArrayField.h +++ b/Fwk/AppFwk/cafProjectDataModel/cafPdmCore/cafPdmPtrArrayField.h @@ -35,10 +35,7 @@ class PdmPtrArrayField : public PdmPtrArrayFieldHandle public: typedef std::vector> FieldDataType; - PdmPtrArrayField() - : m_isResolved( false ) - { - } + PdmPtrArrayField() {} virtual ~PdmPtrArrayField(); PdmPtrArrayField& operator()() { return *this; } @@ -91,8 +88,6 @@ private: friend class PdmFieldXmlCap>; std::vector> m_pointers; - QString m_referenceString; - bool m_isResolved; }; } // End of namespace caf From 1f8cc7f4778b5cf780e6af565a1db5c194d63d75 Mon Sep 17 00:00:00 2001 From: Kristian Bendiksen Date: Mon, 29 Aug 2022 10:11:14 +0200 Subject: [PATCH 091/129] #9233 Fix regression in correlation plot Introduced in be236cb. --- ApplicationLibCode/UserInterface/RiuMultiPlotPage.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/ApplicationLibCode/UserInterface/RiuMultiPlotPage.cpp b/ApplicationLibCode/UserInterface/RiuMultiPlotPage.cpp index e8404d4f09..3071498369 100644 --- a/ApplicationLibCode/UserInterface/RiuMultiPlotPage.cpp +++ b/ApplicationLibCode/UserInterface/RiuMultiPlotPage.cpp @@ -173,12 +173,13 @@ void RiuMultiPlotPage::insertPlot( RiuPlotWidget* plotWidget, size_t index ) RiuQwtPlotWidget* qwtPlotWidget = dynamic_cast( plotWidget ); - RiuQwtPlotLegend* legend = new RiuQwtPlotLegend( this ); + RiuQwtPlotLegend* legend = nullptr; RiuDraggableOverlayFrame* legendFrame = new RiuDraggableOverlayFrame( plotWidget->getParentForOverlay(), plotWidget->overlayMargins() ); if ( m_plotDefinition->legendsVisible() && plotWidget->plotDefinition()->legendsVisible() ) { + legend = new RiuQwtPlotLegend( this ); int legendColumns = 1; if ( m_plotDefinition->legendsHorizontal() ) { @@ -715,6 +716,8 @@ void RiuMultiPlotPage::addLegendWidget( RiuPlotWidget* plotWidget, int column, int colSpan ) { + if ( !legend ) return; + if ( m_plotDefinition->legendPosition() == RimPlotWindow::LegendPosition::ABOVE ) { m_gridLayout->addWidget( legend, row, column, 1, colSpan, Qt::AlignHCenter | Qt::AlignBottom ); @@ -738,6 +741,8 @@ void RiuMultiPlotPage::updateLegendVisibility( RiuPlotWidget* plotWid RiuQwtPlotLegend* legend, RiuDraggableOverlayFrame* legendFrame ) { + if ( !legend ) return; + if ( m_plotDefinition->legendsVisible() && !legend->isEmpty() ) { updateLegendColumns( legend ); From fe62fb76ff01c8e77988ac6fda29c09e51f71bde Mon Sep 17 00:00:00 2001 From: Kristian Bendiksen Date: Mon, 29 Aug 2022 15:11:21 +0200 Subject: [PATCH 092/129] #9233 Correction Report Plot: disable axes alignment for better spacing. Regression introduced in 71d18b9e761e. --- .../CorrelationPlots/RimCorrelationReportPlot.cpp | 1 + .../UserInterface/RiuMultiPlotPage.cpp | 13 +++++++++++-- ApplicationLibCode/UserInterface/RiuMultiPlotPage.h | 3 +++ 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/ApplicationLibCode/ProjectDataModel/CorrelationPlots/RimCorrelationReportPlot.cpp b/ApplicationLibCode/ProjectDataModel/CorrelationPlots/RimCorrelationReportPlot.cpp index 8ca5fdd027..98cddef5dc 100644 --- a/ApplicationLibCode/ProjectDataModel/CorrelationPlots/RimCorrelationReportPlot.cpp +++ b/ApplicationLibCode/ProjectDataModel/CorrelationPlots/RimCorrelationReportPlot.cpp @@ -281,6 +281,7 @@ void RimCorrelationReportPlot::doRenderWindowContent( QPaintDevice* paintDevice QWidget* RimCorrelationReportPlot::createViewWidget( QWidget* mainWindowParent /*= nullptr */ ) { m_viewer = new RiuMultiPlotPage( this, mainWindowParent ); + m_viewer->setAutoAlignAxes( false ); m_viewer->setPlotTitle( m_plotWindowTitle() ); recreatePlotWidgets(); diff --git a/ApplicationLibCode/UserInterface/RiuMultiPlotPage.cpp b/ApplicationLibCode/UserInterface/RiuMultiPlotPage.cpp index 3071498369..23f8b82719 100644 --- a/ApplicationLibCode/UserInterface/RiuMultiPlotPage.cpp +++ b/ApplicationLibCode/UserInterface/RiuMultiPlotPage.cpp @@ -82,6 +82,7 @@ RiuMultiPlotPage::RiuMultiPlotPage( RimPlotWindow* plotDefinition, QWidget* pare , m_plotDefinition( plotDefinition ) , m_previewMode( false ) , m_showSubTitles( false ) + , m_autoAlignAxes( true ) , m_titleFontPixelSize( 12 ) , m_subTitleFontPixelSize( 11 ) , m_legendFontPixelSize( 8 ) @@ -595,7 +596,7 @@ void RiuMultiPlotPage::performUpdate( RiaDefines::MultiPlotPageUpdateType whatTo reinsertPlotWidgets(); alignCanvasTops(); - alignAxes(); + if ( m_autoAlignAxes ) alignAxes(); return; } @@ -603,7 +604,7 @@ void RiuMultiPlotPage::performUpdate( RiaDefines::MultiPlotPageUpdateType whatTo { refreshLegends(); alignCanvasTops(); - alignAxes(); + if ( m_autoAlignAxes ) alignAxes(); } if ( ( whatToUpdate & RiaDefines::MultiPlotPageUpdateType::TITLE ) == RiaDefines::MultiPlotPageUpdateType::TITLE ) @@ -1177,3 +1178,11 @@ void RiuMultiPlotPage::alignAxis( QwtAxisId axis, int targetRowOrColumn, std::fu } } } + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RiuMultiPlotPage::setAutoAlignAxes( bool autoAlignAxes ) +{ + m_autoAlignAxes = autoAlignAxes; +} diff --git a/ApplicationLibCode/UserInterface/RiuMultiPlotPage.h b/ApplicationLibCode/UserInterface/RiuMultiPlotPage.h index 5e8cd2aaa2..1aabc4304a 100644 --- a/ApplicationLibCode/UserInterface/RiuMultiPlotPage.h +++ b/ApplicationLibCode/UserInterface/RiuMultiPlotPage.h @@ -82,6 +82,8 @@ public: bool previewModeEnabled() const; void setPagePreviewModeEnabled( bool previewMode ); + void setAutoAlignAxes( bool autoAlignAxes ); + void scheduleUpdate( RiaDefines::MultiPlotPageUpdateType whatToUpdate = RiaDefines::MultiPlotPageUpdateType::ALL ); void scheduleReplotOfAllPlots(); virtual void updateVerticalScrollBar( double visibleMin, double visibleMax, double totalMin, double totalMax ) {} @@ -185,6 +187,7 @@ protected: bool m_previewMode; bool m_showSubTitles; + bool m_autoAlignAxes; std::map m_childCountForAdjustSizeOperation; From d806c5225bdb9bc1711500725cd59dae51d474e2 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Tue, 30 Aug 2022 19:17:17 +0200 Subject: [PATCH 093/129] #9251 Cell Edge : Add more tests on valid cell edge result --- ApplicationLibCode/ProjectDataModel/RimCellEdgeColors.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ApplicationLibCode/ProjectDataModel/RimCellEdgeColors.cpp b/ApplicationLibCode/ProjectDataModel/RimCellEdgeColors.cpp index d3c319e14e..7d4044b92a 100644 --- a/ApplicationLibCode/ProjectDataModel/RimCellEdgeColors.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimCellEdgeColors.cpp @@ -546,6 +546,7 @@ void RimCellEdgeColors::minMaxCellEdgeValues( double& min, double& max ) for ( faceIdx = 0; faceIdx < 6; faceIdx++ ) { if ( !resultAddresses[faceIdx].isValid() ) continue; + if ( !m_reservoirView->currentGridCellResults()->hasResultEntry( resultAddresses[faceIdx] ) ) continue; { double cMin, cMax; @@ -575,6 +576,7 @@ void RimCellEdgeColors::posNegClosestToZero( double& pos, double& neg ) for ( faceIdx = 0; faceIdx < 6; faceIdx++ ) { if ( !resultAddresses[faceIdx].isValid() ) continue; + if ( !m_reservoirView->currentGridCellResults()->hasResultEntry( resultAddresses[faceIdx] ) ) continue; { double localPos, localNeg; From f979aeba2331683ccd597e6a0e954b44325c6208 Mon Sep 17 00:00:00 2001 From: Jon Jenssen Date: Wed, 31 Aug 2022 15:32:53 +0200 Subject: [PATCH 094/129] Make sure curve legends are shown in same order as the curve items in the explorer when moving them up/down --- .../ProjectDataModel/Summary/RimSummaryCurveCollection.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCurveCollection.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCurveCollection.cpp index 553c045716..11177c6976 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCurveCollection.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCurveCollection.cpp @@ -502,6 +502,9 @@ void RimSummaryCurveCollection::defineEditorAttribute( const caf::PdmFieldHandle //-------------------------------------------------------------------------------------------------- void RimSummaryCurveCollection::onCurvesReordered( const SignalEmitter* emitter ) { + // detach and reattach to make sure curve legends are shown in correct order + detachPlotCurves(); + reattachPlotCurves(); curvesChanged.send(); } From 723e047365dcede167c04d8ff14d22498c2d1d6a Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Thu, 1 Sep 2022 07:50:40 +0200 Subject: [PATCH 095/129] Fix some smaller issues * #9253 Well allocation plot: Keep checked state of curves when changing time step * #9254 Guard pointer when clicking on linked time axis icon * #9250 Cross Plot : Ensure summary case change update both x and y data sources --- .../Flow/RimWellAllocationPlot.cpp | 22 ++++++++++++++----- .../Flow/RimWellAllocationPlot.h | 3 ++- .../Summary/RimSummaryPlot.cpp | 10 ++++++++- .../cafPdmUiTreeViewItemDelegate.cpp | 7 ++++-- 4 files changed, 33 insertions(+), 9 deletions(-) diff --git a/ApplicationLibCode/ProjectDataModel/Flow/RimWellAllocationPlot.cpp b/ApplicationLibCode/ProjectDataModel/Flow/RimWellAllocationPlot.cpp index f217257975..910025fc58 100644 --- a/ApplicationLibCode/ProjectDataModel/Flow/RimWellAllocationPlot.cpp +++ b/ApplicationLibCode/ProjectDataModel/Flow/RimWellAllocationPlot.cpp @@ -206,6 +206,8 @@ void RimWellAllocationPlot::deleteViewWidget() //-------------------------------------------------------------------------------------------------- void RimWellAllocationPlot::updateFromWell() { + std::set uncheckedCurveNames; + // Delete existing tracks { std::vector tracks; @@ -213,6 +215,14 @@ void RimWellAllocationPlot::updateFromWell() for ( RimWellLogTrack* t : tracks ) { + for ( auto c : t->curves() ) + { + if ( !c->isCurveVisible() ) + { + uncheckedCurveNames.insert( c->curveName() ); + } + } + accumulatedWellFlowPlot()->removePlot( t ); delete t; } @@ -325,8 +335,8 @@ void RimWellAllocationPlot::updateFromWell() curveDepthValues.insert( curveDepthValues.begin(), curveDepthValues[0] ); accFlow.insert( accFlow.begin(), 0.0 ); - if ( m_flowType == ACCUMULATED && brIdx == 0 && !accFlow.empty() ) // Add fictitious point to -1 for - // first branch + if ( m_flowType == ACCUMULATED && brIdx == 0 && !accFlow.empty() ) // Add fictitious point to -1 + // for first branch { accFlow.push_back( accFlow.back() ); curveDepthValues.push_back( -1.0 ); @@ -378,8 +388,8 @@ void RimWellAllocationPlot::updateFromWell() if ( !accFlow.empty() ) { - addStackedCurve( tracerName, depthType, curveDepthValues, accFlow, plotTrack ); - // TODO: THIs is the data to be plotted... + bool showCurve = uncheckedCurveNames.count( tracerName ) == 0; + addStackedCurve( tracerName, depthType, curveDepthValues, accFlow, plotTrack, showCurve ); } } } @@ -534,7 +544,8 @@ void RimWellAllocationPlot::addStackedCurve( const QString& tracerNa RiaDefines::DepthTypeEnum depthType, const std::vector& depthValues, const std::vector& accFlow, - RimWellLogTrack* plotTrack ) + RimWellLogTrack* plotTrack, + bool showCurve ) { RimWellFlowRateCurve* curve = new RimWellFlowRateCurve; curve->setFlowValuesPrDepthValue( tracerName, depthType, depthValues, accFlow ); @@ -551,6 +562,7 @@ void RimWellAllocationPlot::addStackedCurve( const QString& tracerNa plotTrack->addCurve( curve ); curve->loadDataAndUpdate( true ); + curve->setCurveVisibility( showCurve ); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/Flow/RimWellAllocationPlot.h b/ApplicationLibCode/ProjectDataModel/Flow/RimWellAllocationPlot.h index 3b5f3cd2d5..5588ccded9 100644 --- a/ApplicationLibCode/ProjectDataModel/Flow/RimWellAllocationPlot.h +++ b/ApplicationLibCode/ProjectDataModel/Flow/RimWellAllocationPlot.h @@ -117,7 +117,8 @@ private: RiaDefines::DepthTypeEnum depthType, const std::vector& depthValues, const std::vector& accFlow, - RimWellLogTrack* plotTrack ); + RimWellLogTrack* plotTrack, + bool showCurve ); void updateWidgetTitleWindowTitle(); static QString wellStatusTextForTimeStep( const QString& wellName, diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlot.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlot.cpp index 33edc7c402..93446c5ad5 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlot.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlot.cpp @@ -159,7 +159,15 @@ RimSummaryPlot::RimSummaryPlot( bool isCrossPlot ) CAF_PDM_InitFieldNoDefault( &m_sourceStepping, "SourceStepping", "" ); m_sourceStepping = new RimSummaryPlotSourceStepping; - m_sourceStepping->setSourceSteppingType( RimSummaryDataSourceStepping::Axis::Y_AXIS ); + if ( m_isCrossPlot ) + { + m_sourceStepping->setSourceSteppingType( RimSummaryDataSourceStepping::Axis::UNION_X_Y_AXIS ); + } + else + { + m_sourceStepping->setSourceSteppingType( RimSummaryDataSourceStepping::Axis::Y_AXIS ); + } + m_sourceStepping->setSourceSteppingObject( this ); m_sourceStepping.uiCapability()->setUiTreeHidden( true ); m_sourceStepping.uiCapability()->setUiTreeChildrenHidden( true ); diff --git a/Fwk/AppFwk/cafUserInterface/cafPdmUiTreeViewItemDelegate.cpp b/Fwk/AppFwk/cafUserInterface/cafPdmUiTreeViewItemDelegate.cpp index 65b436a2d5..ec3d41abcd 100644 --- a/Fwk/AppFwk/cafUserInterface/cafPdmUiTreeViewItemDelegate.cpp +++ b/Fwk/AppFwk/cafUserInterface/cafPdmUiTreeViewItemDelegate.cpp @@ -287,8 +287,11 @@ bool PdmUiTreeViewItemDelegate::editorEvent( QEvent* event, PdmFieldReorderCapability* reorderability = PdmFieldReorderCapability::reorderCapabilityOfParentContainer( pdmObject ); - size_t indexInParent = reorderability->indexOf( pdmObject ); - tag->clicked.send( indexInParent ); + if ( reorderability ) + { + size_t indexInParent = reorderability->indexOf( pdmObject ); + tag->clicked.send( indexInParent ); + } } } From edaaf4242a526133af6ecec54f3c38f44f162ed5 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Thu, 1 Sep 2022 10:14:29 +0200 Subject: [PATCH 096/129] #9260 Guard pointer access and update tree view when plot is created Guard access to plot curve Update tree view when object is created Use zoomAll to update x value range --- .../RicNewWellBoreStabilityPlotFeature.cpp | 10 ---------- .../RicNewWellLogPlotFeatureImpl.cpp | 3 +++ .../WellMeasurement/RimWellMeasurementCurve.cpp | 15 +++++++++------ 3 files changed, 12 insertions(+), 16 deletions(-) diff --git a/ApplicationLibCode/Commands/WellLogCommands/RicNewWellBoreStabilityPlotFeature.cpp b/ApplicationLibCode/Commands/WellLogCommands/RicNewWellBoreStabilityPlotFeature.cpp index b15dbaf862..84fb67e70f 100644 --- a/ApplicationLibCode/Commands/WellLogCommands/RicNewWellBoreStabilityPlotFeature.cpp +++ b/ApplicationLibCode/Commands/WellLogCommands/RicNewWellBoreStabilityPlotFeature.cpp @@ -411,16 +411,6 @@ void RicNewWellBoreStabilityPlotFeature::createAnglesTrack( RimWellBoreStability curve->loadDataAndUpdate( false ); - double actualMinValue = minValue, actualMaxValue = maxValue; - curve->xValueRange( &actualMinValue, &actualMaxValue ); - while ( maxValue < actualMaxValue ) - { - maxValue += angleIncrement; - } - while ( minValue > actualMinValue ) - { - minValue -= angleIncrement; - } maxValue = cvf::Math::clamp( maxValue, angleIncrement, 720.0 ); minValue = cvf::Math::clamp( minValue, 0.0, maxValue - 90.0 ); } diff --git a/ApplicationLibCode/Commands/WellLogCommands/RicNewWellLogPlotFeatureImpl.cpp b/ApplicationLibCode/Commands/WellLogCommands/RicNewWellLogPlotFeatureImpl.cpp index 1c62731ea1..e8036affb4 100644 --- a/ApplicationLibCode/Commands/WellLogCommands/RicNewWellLogPlotFeatureImpl.cpp +++ b/ApplicationLibCode/Commands/WellLogCommands/RicNewWellLogPlotFeatureImpl.cpp @@ -72,6 +72,8 @@ RimWellBoreStabilityPlot* QString( "Well Bore Stability Plot %1" ).arg( wellLogPlotCollection()->wellLogPlots().size() ) ); } + wellLogPlotColl->updateConnectedEditors(); + if ( showAfterCreation ) { RiaGuiApplication::instance()->getOrCreateAndShowMainPlotWindow(); @@ -242,6 +244,7 @@ void RicNewWellLogPlotFeatureImpl::updateAfterCreation( RimDepthTrackPlot* plot { CVF_ASSERT( plot ); plot->loadDataAndUpdate(); + plot->zoomAll(); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/WellMeasurement/RimWellMeasurementCurve.cpp b/ApplicationLibCode/ProjectDataModel/WellMeasurement/RimWellMeasurementCurve.cpp index 1f969e59fe..adaadc9574 100644 --- a/ApplicationLibCode/ProjectDataModel/WellMeasurement/RimWellMeasurementCurve.cpp +++ b/ApplicationLibCode/ProjectDataModel/WellMeasurement/RimWellMeasurementCurve.cpp @@ -138,7 +138,7 @@ void RimWellMeasurementCurve::onLoadDataAndUpdate( bool updateParentPlot ) } } - if ( m_isUsingAutoName ) + if ( m_isUsingAutoName && m_plotCurve ) { m_plotCurve->setTitle( createCurveAutoName() ); } @@ -160,11 +160,14 @@ void RimWellMeasurementCurve::onLoadDataAndUpdate( bool updateParentPlot ) depthType = wellLogPlot->depthType(); } - bool useLogarithmicScale = false; - m_plotCurve->setSamplesFromXValuesAndYValues( this->curveData()->propertyValuesByIntervals(), - this->curveData()->depthValuesByIntervals( depthType, displayUnit ), - useLogarithmicScale ); - m_plotCurve->setLineSegmentStartStopIndices( this->curveData()->polylineStartStopIndices() ); + if ( m_plotCurve ) + { + bool useLogarithmicScale = false; + m_plotCurve->setSamplesFromXValuesAndYValues( this->curveData()->propertyValuesByIntervals(), + this->curveData()->depthValuesByIntervals( depthType, displayUnit ), + useLogarithmicScale ); + m_plotCurve->setLineSegmentStartStopIndices( this->curveData()->polylineStartStopIndices() ); + } } this->RimPlotCurve::updateCurvePresentation( updateParentPlot ); From 1467c54aada9c4c9c2c26a13c8d0134fba051dc6 Mon Sep 17 00:00:00 2001 From: jonjenssen <69144954+jonjenssen@users.noreply.github.com> Date: Thu, 1 Sep 2022 11:01:47 +0200 Subject: [PATCH 097/129] Refresh data source tree when a grid calculation is updated (#9255) --- .../ProjectDataModel/RimEclipseCase.cpp | 13 +++++++++++-- .../ProjectDataModel/RimEclipseCase.h | 4 +++- .../ProjectDataModel/RimGridCalculation.cpp | 2 ++ 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/ApplicationLibCode/ProjectDataModel/RimEclipseCase.cpp b/ApplicationLibCode/ProjectDataModel/RimEclipseCase.cpp index 9ca620eea4..2adbad2e9c 100644 --- a/ApplicationLibCode/ProjectDataModel/RimEclipseCase.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimEclipseCase.cpp @@ -581,7 +581,7 @@ void RimEclipseCase::defineUiTreeOrdering( caf::PdmUiTreeOrdering& uiTreeOrderin } else if ( uiConfigName == "MainWindow.DataSources" ) { - if ( m_resultAddressCollections.empty() ) buildChildNodes(); + if ( m_resultAddressCollections.empty() ) buildResultChildNodes(); uiTreeOrdering.add( &m_resultAddressCollections ); } @@ -591,7 +591,7 @@ void RimEclipseCase::defineUiTreeOrdering( caf::PdmUiTreeOrdering& uiTreeOrderin //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RimEclipseCase::buildChildNodes() +void RimEclipseCase::buildResultChildNodes() { m_resultAddressCollections.deleteChildren(); @@ -1163,3 +1163,12 @@ void RimEclipseCase::setReaderSettings( std::shared_ptr reade { m_readerSettings = readerSettings; } + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimEclipseCase::updateResultAddressCollection() +{ + m_resultAddressCollections.deleteChildren(); + updateConnectedEditors(); +} diff --git a/ApplicationLibCode/ProjectDataModel/RimEclipseCase.h b/ApplicationLibCode/ProjectDataModel/RimEclipseCase.h index d7b08daa5e..166bec3c01 100644 --- a/ApplicationLibCode/ProjectDataModel/RimEclipseCase.h +++ b/ApplicationLibCode/ProjectDataModel/RimEclipseCase.h @@ -124,6 +124,8 @@ public: void setReaderSettings( std::shared_ptr readerSettings ); + void updateResultAddressCollection(); + protected: void initAfterRead() override; void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) override; @@ -140,7 +142,7 @@ protected: private: void createTimeStepFormatString(); std::vector allSpecialViews() const override; - void buildChildNodes(); + void buildResultChildNodes(); protected: caf::PdmField m_flipXAxis; diff --git a/ApplicationLibCode/ProjectDataModel/RimGridCalculation.cpp b/ApplicationLibCode/ProjectDataModel/RimGridCalculation.cpp index fbea9d7dee..4682e4a2f3 100644 --- a/ApplicationLibCode/ProjectDataModel/RimGridCalculation.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimGridCalculation.cpp @@ -143,6 +143,8 @@ bool RimGridCalculation::calculate() } } + eclipseCase->updateResultAddressCollection(); + return true; } From 8e627e46a3b8914929a922bcd9e61a288fced27c Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Thu, 1 Sep 2022 11:07:44 +0200 Subject: [PATCH 098/129] Improve error message when grid dimensions are not matching --- .../RigCaseCellResultCalculator.cpp | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/ApplicationLibCode/ReservoirDataModel/RigCaseCellResultCalculator.cpp b/ApplicationLibCode/ReservoirDataModel/RigCaseCellResultCalculator.cpp index ac00907433..a88aa3dbb0 100644 --- a/ApplicationLibCode/ReservoirDataModel/RigCaseCellResultCalculator.cpp +++ b/ApplicationLibCode/ReservoirDataModel/RigCaseCellResultCalculator.cpp @@ -74,7 +74,23 @@ bool RigCaseCellResultCalculator::computeDifference( RigEclipseCaseData* if ( !RigGridManager::isMainGridDimensionsEqual( sourceMainGrid, baseMainGrid ) ) { - RiaLogging::error( "Case difference : Grid cases do not match" ); + auto gridA_i = sourceMainGrid->cellCountI(); + auto gridA_j = sourceMainGrid->cellCountJ(); + auto gridA_k = sourceMainGrid->cellCountK(); + + auto gridB_i = baseMainGrid->cellCountI(); + auto gridB_j = baseMainGrid->cellCountJ(); + auto gridB_k = baseMainGrid->cellCountK(); + + RiaLogging::error( + QString( "Not able to compute cell value difference between two grids, as the Grid Cell Count is not " + "matching: Grid 1 IJK [%1,%2,%3] vs Grid 2 IJK [%4,%5,%6]" ) + .arg( gridA_i ) + .arg( gridA_j ) + .arg( gridA_k ) + .arg( gridB_i ) + .arg( gridB_j ) + .arg( gridB_k ) ); return false; } From b2db9a66a7b6f4511b283f7ed0841ee808e9ad9a Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Fri, 2 Sep 2022 06:51:21 +0200 Subject: [PATCH 099/129] Scale length threshold based on average DZ --- .../RigEclipseWellLogExtractor.cpp | 39 +++++++++++++++++-- .../RigEclipseWellLogExtractor.h | 5 ++- .../RigGeoMechWellLogExtractor.cpp | 3 +- .../RigWellLogExtractionTools.h | 16 +++++--- .../RigWellLogExtractor.cpp | 24 +++++++----- .../ReservoirDataModel/RigWellLogExtractor.h | 1 + 6 files changed, 68 insertions(+), 20 deletions(-) diff --git a/ApplicationLibCode/ReservoirDataModel/RigEclipseWellLogExtractor.cpp b/ApplicationLibCode/ReservoirDataModel/RigEclipseWellLogExtractor.cpp index 62834bc59a..a9d88f17fd 100644 --- a/ApplicationLibCode/ReservoirDataModel/RigEclipseWellLogExtractor.cpp +++ b/ApplicationLibCode/ReservoirDataModel/RigEclipseWellLogExtractor.cpp @@ -21,6 +21,7 @@ #include "RiaLogging.h" +#include "RigCaseCellResultsData.h" #include "RigEclipseCaseData.h" #include "RigMainGrid.h" #include "RigResultAccessor.h" @@ -57,6 +58,8 @@ void RigEclipseWellLogExtractor::calculateIntersection() if ( m_wellPathGeometry->wellPathPoints().empty() ) return; + double tolerance = computeLengthThreshold(); + for ( size_t wpp = 0; wpp < m_wellPathGeometry->wellPathPoints().size() - 1; ++wpp ) { std::vector intersections; @@ -99,7 +102,7 @@ void RigEclipseWellLogExtractor::calculateIntersection() double md1 = m_wellPathGeometry->measuredDepths()[wpp]; double md2 = m_wellPathGeometry->measuredDepths()[wpp + 1]; - insertIntersectionsInMap( intersections, p1, md1, p2, md2, &uniqueIntersections ); + insertIntersectionsInMap( intersections, p1, md1, p2, md2, tolerance, &uniqueIntersections ); } if ( uniqueIntersections.empty() && m_wellPathGeometry->wellPathPoints().size() > 1 ) @@ -139,7 +142,8 @@ void RigEclipseWellLogExtractor::calculateIntersection() globalCellIndex ); RigMDCellIdxEnterLeaveKey enterLeaveKey( m_wellPathGeometry->measuredDepths().front(), globalCellIndex, - isEntering ); + isEntering, + tolerance ); uniqueIntersections.insert( std::make_pair( enterLeaveKey, info ) ); } @@ -151,7 +155,8 @@ void RigEclipseWellLogExtractor::calculateIntersection() HexIntersectionInfo info( lastPoint, isEntering, cvf::StructGridInterface::NO_FACE, globalCellIndex ); RigMDCellIdxEnterLeaveKey enterLeaveKey( m_wellPathGeometry->measuredDepths().back(), globalCellIndex, - isEntering ); + isEntering, + tolerance ); uniqueIntersections.insert( std::make_pair( enterLeaveKey, info ) ); } @@ -208,3 +213,31 @@ cvf::Vec3d RigEclipseWellLogExtractor::calculateLengthInCell( size_t return RigWellPathIntersectionTools::calculateLengthInCell( hexCorners, startPoint, endPoint ); } + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +double RigEclipseWellLogExtractor::computeLengthThreshold() const +{ + // Default length tolerance for most common grid sizes + double tolerance = 0.1; + + // For grids with very thin z-layers, reduce the tolerance to be able to find the intersections + // If not, the intersection will be considered as non-valid cell edge intersection and discarded + // https://github.com/OPM/ResInsight/issues/9244 + + auto gridCellResult = + const_cast( m_caseData->results( RiaDefines::PorosityModelType::MATRIX_MODEL ) ); + + auto resultAdr = RigEclipseResultAddress( RiaDefines::ResultCatType::STATIC_NATIVE, "DZ" ); + if ( gridCellResult && gridCellResult->hasResultEntry( resultAdr ) ) + { + double averageDZ = 0.1; + gridCellResult->meanCellScalarValues( resultAdr, averageDZ ); + + const double scaleFactor = 0.05; + tolerance = std::min( tolerance, averageDZ * scaleFactor ); + } + + return tolerance; +} diff --git a/ApplicationLibCode/ReservoirDataModel/RigEclipseWellLogExtractor.h b/ApplicationLibCode/ReservoirDataModel/RigEclipseWellLogExtractor.h index a05bf68f9c..1193bcc567 100644 --- a/ApplicationLibCode/ReservoirDataModel/RigEclipseWellLogExtractor.h +++ b/ApplicationLibCode/ReservoirDataModel/RigEclipseWellLogExtractor.h @@ -38,7 +38,7 @@ class RigEclipseWellLogExtractor : public RigWellLogExtractor public: RigEclipseWellLogExtractor( gsl::not_null aCase, gsl::not_null wellpath, - const std::string& wellCaseErrorMsgName ); + const std::string& wellCaseErrorMsgName ); void curveData( const RigResultAccessor* resultAccessor, std::vector* values ); const RigEclipseCaseData* caseData() { return m_caseData.p(); } @@ -49,5 +49,8 @@ private: cvf::Vec3d calculateLengthInCell( size_t cellIndex, const cvf::Vec3d& startPoint, const cvf::Vec3d& endPoint ) const override; + double computeLengthThreshold() const; + +private: cvf::cref m_caseData; }; diff --git a/ApplicationLibCode/ReservoirDataModel/RigGeoMechWellLogExtractor.cpp b/ApplicationLibCode/ReservoirDataModel/RigGeoMechWellLogExtractor.cpp index 9cd44595ce..b6369533ad 100644 --- a/ApplicationLibCode/ReservoirDataModel/RigGeoMechWellLogExtractor.cpp +++ b/ApplicationLibCode/ReservoirDataModel/RigGeoMechWellLogExtractor.cpp @@ -1025,7 +1025,8 @@ void RigGeoMechWellLogExtractor::calculateIntersection() double md1 = m_wellPathGeometry->measuredDepths()[wpp]; double md2 = m_wellPathGeometry->measuredDepths()[wpp + 1]; - insertIntersectionsInMap( intersections, p1, md1, p2, md2, &uniqueIntersections ); + const double tolerance = 0.1; + insertIntersectionsInMap( intersections, p1, md1, p2, md2, tolerance, &uniqueIntersections ); } this->populateReturnArrays( uniqueIntersections ); diff --git a/ApplicationLibCode/ReservoirDataModel/RigWellLogExtractionTools.h b/ApplicationLibCode/ReservoirDataModel/RigWellLogExtractionTools.h index 2560bc63e1..9e1922f0e0 100644 --- a/ApplicationLibCode/ReservoirDataModel/RigWellLogExtractionTools.h +++ b/ApplicationLibCode/ReservoirDataModel/RigWellLogExtractionTools.h @@ -30,7 +30,7 @@ struct RigWellLogExtractionTools { - static bool isEqualDepth( double d1, double d2, const double tolerance = 0.1 ) + static bool isEqualDepth( double d1, double d2, const double tolerance ) { double depthDiff = d1 - d2; @@ -46,10 +46,11 @@ struct RigWellLogExtractionTools struct RigMDCellIdxEnterLeaveKey { - RigMDCellIdxEnterLeaveKey( double md, size_t cellIdx, bool entering ) + RigMDCellIdxEnterLeaveKey( double md, size_t cellIdx, bool entering, double tolerance ) : measuredDepth( md ) , hexIndex( cellIdx ) , isEnteringCell( entering ) + , tolerance( tolerance ) { } @@ -57,10 +58,11 @@ struct RigMDCellIdxEnterLeaveKey size_t hexIndex; bool isEnteringCell; // As opposed to leaving. bool isLeavingCell() const { return !isEnteringCell; } + double tolerance; bool operator<( const RigMDCellIdxEnterLeaveKey& other ) const { - if ( RigWellLogExtractionTools::isEqualDepth( measuredDepth, other.measuredDepth ) ) + if ( RigWellLogExtractionTools::isEqualDepth( measuredDepth, other.measuredDepth, tolerance ) ) { if ( hexIndex == other.hexIndex ) { @@ -90,10 +92,11 @@ struct RigMDCellIdxEnterLeaveKey struct RigMDEnterLeaveCellIdxKey { - RigMDEnterLeaveCellIdxKey( double md, bool entering, size_t cellIdx ) + RigMDEnterLeaveCellIdxKey( double md, bool entering, size_t cellIdx, double tolerance ) : measuredDepth( md ) , isEnteringCell( entering ) , hexIndex( cellIdx ) + , tolerance( tolerance ) { } @@ -101,10 +104,11 @@ struct RigMDEnterLeaveCellIdxKey bool isEnteringCell; // As opposed to leaving. bool isLeavingCell() const { return !isEnteringCell; } size_t hexIndex; + double tolerance; bool operator<( const RigMDEnterLeaveCellIdxKey& other ) const { - if ( RigWellLogExtractionTools::isEqualDepth( measuredDepth, other.measuredDepth ) ) + if ( RigWellLogExtractionTools::isEqualDepth( measuredDepth, other.measuredDepth, tolerance ) ) { if ( isEnteringCell == other.isEnteringCell ) { @@ -128,6 +132,6 @@ struct RigMDEnterLeaveCellIdxKey static bool isProperCellEnterLeavePair( const RigMDEnterLeaveCellIdxKey& key1, const RigMDEnterLeaveCellIdxKey& key2 ) { return ( key1.hexIndex == key2.hexIndex && key1.isEnteringCell && key2.isLeavingCell() && - !RigWellLogExtractionTools::isEqualDepth( key1.measuredDepth, key2.measuredDepth ) ); + !RigWellLogExtractionTools::isEqualDepth( key1.measuredDepth, key2.measuredDepth, key1.tolerance ) ); } }; diff --git a/ApplicationLibCode/ReservoirDataModel/RigWellLogExtractor.cpp b/ApplicationLibCode/ReservoirDataModel/RigWellLogExtractor.cpp index f9c5e6daad..38998b7c66 100644 --- a/ApplicationLibCode/ReservoirDataModel/RigWellLogExtractor.cpp +++ b/ApplicationLibCode/ReservoirDataModel/RigWellLogExtractor.cpp @@ -111,6 +111,7 @@ void RigWellLogExtractor::insertIntersectionsInMap( const std::vector* uniqueIntersections ) { for ( size_t intIdx = 0; intIdx < intersections.size(); ++intIdx ) @@ -130,11 +131,11 @@ void RigWellLogExtractor::insertIntersectionsInMap( const std::vectorinsert( - std::make_pair( RigMDCellIdxEnterLeaveKey( measuredDepthOfPoint, - intersections[intIdx].m_hexIndex, - intersections[intIdx].m_isIntersectionEntering ), - intersections[intIdx] ) ); + uniqueIntersections->insert( std::make_pair( RigMDCellIdxEnterLeaveKey( measuredDepthOfPoint, + intersections[intIdx].m_hexIndex, + intersections[intIdx].m_isIntersectionEntering, + tolerance ), + intersections[intIdx] ) ); } } @@ -156,7 +157,9 @@ void RigWellLogExtractor::populateReturnArrays( std::mapfirst.measuredDepth, it2->first.measuredDepth ) ) + if ( RigWellLogExtractionTools::isEqualDepth( it1->first.measuredDepth, + it2->first.measuredDepth, + it1->first.tolerance ) ) { if ( it1->first.hexIndex == it2->first.hexIndex ) { @@ -187,7 +190,8 @@ void RigWellLogExtractor::populateReturnArrays( std::mapfirst.measuredDepth, it->first.isEnteringCell, - it->first.hexIndex ), + it->first.hexIndex, + it->first.tolerance ), it->second ) ); ++it; } @@ -210,7 +214,8 @@ void RigWellLogExtractor::populateReturnArrays( std::mapmeasuredDepths()[0], true, - firstLeavingPoint.m_hexIndex ), + firstLeavingPoint.m_hexIndex, + it->first.tolerance ), firstLeavingPoint ) ); } @@ -230,7 +235,8 @@ void RigWellLogExtractor::populateReturnArrays( std::mapmeasuredDepths().back(), false, - lastEnterPoint.m_hexIndex ), + lastEnterPoint.m_hexIndex, + rit->first.tolerance ), lastEnterPoint ) ); } } diff --git a/ApplicationLibCode/ReservoirDataModel/RigWellLogExtractor.h b/ApplicationLibCode/ReservoirDataModel/RigWellLogExtractor.h index ae745d3219..c24ff94d26 100644 --- a/ApplicationLibCode/ReservoirDataModel/RigWellLogExtractor.h +++ b/ApplicationLibCode/ReservoirDataModel/RigWellLogExtractor.h @@ -75,6 +75,7 @@ protected: double md1, cvf::Vec3d p2, double md2, + double tolerance, std::map* uniqueIntersections ); void populateReturnArrays( std::map& uniqueIntersections ); From 69cc36b3bc7803afa8c68b93d3b8a6d5b12bc5a8 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Fri, 2 Sep 2022 13:20:52 +0200 Subject: [PATCH 100/129] Add framework support for editor auto values Add support for a field to be linked to a value updated by code outside the object itself. Mark the linked field by using a background color and icons for linked/unlinked state. The auto value states is set as attributes in the project xml file. Add reference implementation in cafTestApplication, see Fwk/AppFwk/cafTests/cafTestApplication/MainWindow.cpp * Tree View Editor: Avoid sending notification if selection is unchanged * Use std++17 in test solution * Move icons to icon factory * add support for creating QIcon from SVG text string --- Fwk/AppFwk/CMakeLists.txt | 7 +- .../cafPdmCore/cafPdmFieldCapability.h | 7 + .../cafPdmCore/cafPdmFieldHandle.cpp | 15 + .../cafPdmCore/cafPdmFieldHandle.h | 2 + .../cafInternalPdmUiFieldCapability.inl | 15 +- .../cafPdmUiCore/cafPdmUiFieldHandle.cpp | 118 ++++++ .../cafPdmUiCore/cafPdmUiFieldHandle.h | 15 + .../cafPdmUiCore/cafSelectionManager.cpp | 5 +- .../cafPdmUiCore/cafSelectionManager.h | 2 +- .../cafPdmXml/cafPdmXmlObjectHandle.cpp | 42 ++- .../cafTestApplication/CMakeLists.txt | 4 +- .../cafTests/cafTestApplication/Main.cpp | 8 +- .../cafTestApplication/MainWindow.cpp | 105 +++++- Fwk/AppFwk/cafUserInterface/CMakeLists.txt | 4 + .../cafPdmUiComboBoxEditor.cpp | 194 +++------- .../cafUserInterface/cafPdmUiComboBoxEditor.h | 2 + .../cafUserInterface/cafPdmUiLineEditor.cpp | 60 ++- .../cafUserInterface/cafPdmUiLineEditor.h | 10 +- .../cafPdmUiTreeViewEditor.cpp | 13 +- .../cafUserInterface/cafPdmUiTreeViewEditor.h | 2 +- .../cafUiAppearanceSettings.cpp | 63 ++++ .../cafUiAppearanceSettings.h | 54 +++ .../cafUserInterface/cafUiIconFactory.cpp | 350 ++++++++++++++++++ .../cafUserInterface/cafUiIconFactory.h | 65 ++++ 24 files changed, 979 insertions(+), 183 deletions(-) create mode 100644 Fwk/AppFwk/cafUserInterface/cafUiAppearanceSettings.cpp create mode 100644 Fwk/AppFwk/cafUserInterface/cafUiAppearanceSettings.h create mode 100644 Fwk/AppFwk/cafUserInterface/cafUiIconFactory.cpp create mode 100644 Fwk/AppFwk/cafUserInterface/cafUiIconFactory.h diff --git a/Fwk/AppFwk/CMakeLists.txt b/Fwk/AppFwk/CMakeLists.txt index f5bb62baf2..439c66837e 100644 --- a/Fwk/AppFwk/CMakeLists.txt +++ b/Fwk/AppFwk/CMakeLists.txt @@ -32,9 +32,10 @@ else() include(${QT_USE_FILE}) endif(CEE_USE_QT5) -if(${CMAKE_SYSTEM_NAME} MATCHES "Linux") - set(CMAKE_CXX_FLAGS "-std=c++0x") -endif() +# Use CMake to enforce C++17 +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_CXX_EXTENSIONS OFF) if(MSVC) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP") diff --git a/Fwk/AppFwk/cafProjectDataModel/cafPdmCore/cafPdmFieldCapability.h b/Fwk/AppFwk/cafProjectDataModel/cafPdmCore/cafPdmFieldCapability.h index 35d152e38d..26b7067b1d 100644 --- a/Fwk/AppFwk/cafProjectDataModel/cafPdmCore/cafPdmFieldCapability.h +++ b/Fwk/AppFwk/cafProjectDataModel/cafPdmCore/cafPdmFieldCapability.h @@ -1,5 +1,9 @@ #pragma once +#include + +class QString; + namespace caf { class PdmFieldCapability @@ -7,6 +11,9 @@ class PdmFieldCapability public: PdmFieldCapability() {} virtual ~PdmFieldCapability() {} + + virtual std::vector> attributes() const { return {}; } + virtual void setAttributes( const std::vector>& attributes ) {} }; } // End of namespace caf diff --git a/Fwk/AppFwk/cafProjectDataModel/cafPdmCore/cafPdmFieldHandle.cpp b/Fwk/AppFwk/cafProjectDataModel/cafPdmCore/cafPdmFieldHandle.cpp index f7fcc74622..d34a4a8b84 100644 --- a/Fwk/AppFwk/cafProjectDataModel/cafPdmCore/cafPdmFieldHandle.cpp +++ b/Fwk/AppFwk/cafProjectDataModel/cafPdmCore/cafPdmFieldHandle.cpp @@ -102,6 +102,21 @@ bool PdmFieldHandle::hasPtrReferencedObjects() return ( ptrReffedObjs.size() > 0 ); } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::vector PdmFieldHandle::capabilities() const +{ + std::vector allCapabilities; + + for ( const auto& cap : m_capabilities ) + { + allCapabilities.push_back( cap.first ); + } + + return allCapabilities; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/Fwk/AppFwk/cafProjectDataModel/cafPdmCore/cafPdmFieldHandle.h b/Fwk/AppFwk/cafProjectDataModel/cafPdmCore/cafPdmFieldHandle.h index d481f4a869..6116f8eba3 100644 --- a/Fwk/AppFwk/cafProjectDataModel/cafPdmCore/cafPdmFieldHandle.h +++ b/Fwk/AppFwk/cafProjectDataModel/cafPdmCore/cafPdmFieldHandle.h @@ -46,6 +46,8 @@ public: m_capabilities.push_back( std::make_pair( capability, takeOwnership ) ); } + std::vector capabilities() const; + template CapabilityType* capability(); template diff --git a/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/cafInternalPdmUiFieldCapability.inl b/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/cafInternalPdmUiFieldCapability.inl index 9277531673..fd0283a428 100644 --- a/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/cafInternalPdmUiFieldCapability.inl +++ b/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/cafInternalPdmUiFieldCapability.inl @@ -155,16 +155,11 @@ QVariant PdmFieldUiCap::uiValue() const return QVariant( returnList ); } } - else - { - if ( indexesToFoundOptions.size() == 1 ) - return QVariant( indexesToFoundOptions.front() ); - else - return QVariant( -1 ); // Return -1 if not found instead of assert. Should result in clearing the selection - } - CAF_ASSERT( false ); - return uiBasedQVariant; + if ( indexesToFoundOptions.size() == 1 ) return QVariant( indexesToFoundOptions.front() ); + + // Return -1 if not found, expected result in clearing the selection + return QVariant( -1 ); } else { @@ -217,7 +212,7 @@ QList PdmFieldUiCap::valueOptions() const foundIndexes ); // If not all are found, we have to add the missing to the list, to be able to show it - // This will only work if the field data type (or elemnt type for containers) is supported by + // This will only work if the field data type (or element type for containers) is supported by // QVariant.toString(). Custom classes don't if ( !foundAllFieldValues ) diff --git a/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/cafPdmUiFieldHandle.cpp b/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/cafPdmUiFieldHandle.cpp index ee718b937c..0f914d17b5 100644 --- a/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/cafPdmUiFieldHandle.cpp +++ b/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/cafPdmUiFieldHandle.cpp @@ -13,6 +13,8 @@ namespace caf //-------------------------------------------------------------------------------------------------- PdmUiFieldHandle::PdmUiFieldHandle( PdmFieldHandle* owner, bool giveOwnership ) : m_isAutoAddingOptionFromValue( true ) + , m_useAutoValue( false ) + , m_isAutoValueSupported( false ) { m_owner = owner; owner->addCapability( this, giveOwnership ); @@ -121,6 +123,122 @@ void PdmUiFieldHandle::setAutoAddingOptionFromValue( bool isAddingValue ) m_isAutoAddingOptionFromValue = isAddingValue; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void PdmUiFieldHandle::enableAndSetAutoValue( const QVariant& autoValue ) +{ + setAutoValue( autoValue ); + enableAutoValue( true ); + m_isAutoValueSupported = true; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void PdmUiFieldHandle::setAutoValue( const QVariant& autoValue ) +{ + m_autoValue = autoValue; + + if ( m_useAutoValue ) + { + setValueFromUiEditor( m_autoValue, false ); + updateConnectedEditors(); + } +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QVariant PdmUiFieldHandle::autoValue() const +{ + return m_autoValue; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void PdmUiFieldHandle::enableAutoValue( bool enable ) +{ + m_useAutoValue = enable; + + if ( m_useAutoValue ) + { + setValueFromUiEditor( m_autoValue, false ); + updateConnectedEditors(); + } +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +bool PdmUiFieldHandle::isAutoValueEnabled() const +{ + return m_useAutoValue; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void PdmUiFieldHandle::enableAutoValueSupport( bool enable ) +{ + m_isAutoValueSupported = enable; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +bool PdmUiFieldHandle::isAutoValueSupported() const +{ + return m_isAutoValueSupported; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::vector> PdmUiFieldHandle::attributes() const +{ + std::vector> attr; + + if ( m_useAutoValue ) + { + attr.push_back( { "autoValueEnabled", "true" } ); + } + + if ( m_isAutoValueSupported ) + { + attr.push_back( { "autoValueSupported", "true" } ); + } + + return attr; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void PdmUiFieldHandle::setAttributes( const std::vector>& attributes ) +{ + for ( auto [key, valueString] : attributes ) + { + valueString = valueString.toUpper(); + + if ( key == "autoValueEnabled" ) + { + if ( valueString == "TRUE" ) + { + enableAutoValue( true ); + } + } + else if ( key == "autoValueSupported" ) + { + if ( valueString == "TRUE" ) + { + enableAutoValueSupport( true ); + } + } + } +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/cafPdmUiFieldHandle.h b/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/cafPdmUiFieldHandle.h index a6296f1414..fb8dec754d 100644 --- a/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/cafPdmUiFieldHandle.h +++ b/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/cafPdmUiFieldHandle.h @@ -27,6 +27,17 @@ public: bool isAutoAddingOptionFromValue() const; void setAutoAddingOptionFromValue( bool isAddingValue ); + void enableAndSetAutoValue( const QVariant& autoValue ); + void setAutoValue( const QVariant& autoValue ); + QVariant autoValue() const; + void enableAutoValue( bool enable ); + bool isAutoValueEnabled() const; + void enableAutoValueSupport( bool enable ); + bool isAutoValueSupported() const; + + std::vector> attributes() const override; + void setAttributes( const std::vector>& attributes ) override; + private: friend class PdmUiCommandSystemProxy; friend class CmdFieldChangeExec; @@ -38,6 +49,10 @@ private: private: PdmFieldHandle* m_owner; bool m_isAutoAddingOptionFromValue; + + QVariant m_autoValue; + bool m_useAutoValue; + bool m_isAutoValueSupported; }; } // End of namespace caf diff --git a/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/cafSelectionManager.cpp b/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/cafSelectionManager.cpp index b3f7dbb3b4..76df311229 100644 --- a/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/cafSelectionManager.cpp +++ b/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/cafSelectionManager.cpp @@ -82,7 +82,7 @@ void SelectionManager::selectedItems( std::vector& items, int select //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void SelectionManager::setSelectedItems( const std::vector& items ) +bool SelectionManager::setSelectedItems( const std::vector& items ) { std::map, PdmUiItem*>>> newCompleteSelectionMap; @@ -96,7 +96,10 @@ void SelectionManager::setSelectedItems( const std::vector& items ) { m_selectionPrLevel = newCompleteSelectionMap; notifySelectionChanged( changedLevels ); + return true; } + + return false; } //-------------------------------------------------------------------------------------------------- diff --git a/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/cafSelectionManager.h b/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/cafSelectionManager.h index c5e73e9302..f8db6c212f 100644 --- a/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/cafSelectionManager.h +++ b/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/cafSelectionManager.h @@ -74,7 +74,7 @@ public: void setSelectedItem( PdmUiItem* item ); void setSelectedItemAtLevel( PdmUiItem* item, int selectionLevel ); - void setSelectedItems( const std::vector& items ); + bool setSelectedItems( const std::vector& items ); void setSelectedItemsAtLevel( const std::vector& items, int selectionLevel = 0 ); struct SelectionItem diff --git a/Fwk/AppFwk/cafProjectDataModel/cafPdmXml/cafPdmXmlObjectHandle.cpp b/Fwk/AppFwk/cafProjectDataModel/cafPdmXml/cafPdmXmlObjectHandle.cpp index 4284025b72..5002f4d3a9 100644 --- a/Fwk/AppFwk/cafProjectDataModel/cafPdmXml/cafPdmXmlObjectHandle.cpp +++ b/Fwk/AppFwk/cafProjectDataModel/cafPdmXml/cafPdmXmlObjectHandle.cpp @@ -57,6 +57,22 @@ void PdmXmlObjectHandle::readFields( QXmlStreamReader& xmlStream, PdmObjectFacto PdmFieldHandle* fieldHandle = m_owner->findField( name ); if ( fieldHandle && fieldHandle->xmlCapability() ) { + auto xmlAttributes = xmlStream.attributes(); + if ( !xmlAttributes.isEmpty() ) + { + std::vector> fieldAttributes; + + for ( const auto& xmlAttr : xmlAttributes ) + { + fieldAttributes.emplace_back( xmlAttr.name().toString(), xmlAttr.value().toString() ); + } + + for ( auto capability : fieldHandle->capabilities() ) + { + capability->setAttributes( fieldAttributes ); + } + } + PdmXmlFieldHandle* xmlFieldHandle = fieldHandle->xmlCapability(); bool readable = xmlFieldHandle->isIOReadable(); if ( isCopyOperation && !xmlFieldHandle->isCopyable() ) @@ -66,8 +82,8 @@ void PdmXmlObjectHandle::readFields( QXmlStreamReader& xmlStream, PdmObjectFacto if ( readable ) { // readFieldData assumes that the xmlStream points to first token of field content. - // After reading, the xmlStream is supposed to point to the first token after the field content. - // (typically an "endElement") + // After reading, the xmlStream is supposed to point to the first token after the field + // content. (typically an "endElement") QXmlStreamReader::TokenType tt; tt = xmlStream.readNext(); xmlFieldHandle->readFieldData( xmlStream, objectFactory ); @@ -82,9 +98,10 @@ void PdmXmlObjectHandle::readFields( QXmlStreamReader& xmlStream, PdmObjectFacto // Debug text is commented out, as this code is relatively often reached. Consider a new logging // concept to receive this information // - // std::cout << "Line " << xmlStream.lineNumber() << ": Warning: Could not find a field with name " - // << name.toLatin1().data() << " in the current object : " << classKeyword().toLatin1().data() << - // std::endl; + // std::cout << "Line " << xmlStream.lineNumber() << ": Warning: Could not find a field with + // name " + // << name.toLatin1().data() << " in the current object : " << classKeyword().toLatin1().data() + // << std::endl; xmlStream.skipCurrentElement(); } @@ -120,16 +137,27 @@ void PdmXmlObjectHandle::writeFields( QXmlStreamWriter& xmlStream ) const { std::vector fields; m_owner->fields( fields ); - for ( size_t it = 0; it < fields.size(); ++it ) + for ( const auto& fieldHandle : fields ) { - const PdmXmlFieldHandle* field = fields[it]->xmlCapability(); + const PdmXmlFieldHandle* field = fieldHandle->xmlCapability(); if ( field && field->isIOWritable() ) { QString keyword = field->fieldHandle()->keyword(); CAF_ASSERT( PdmXmlObjectHandle::isValidXmlElementName( keyword ) ); xmlStream.writeStartElement( "", keyword ); + + for ( auto cap : fieldHandle->capabilities() ) + { + auto attributes = cap->attributes(); + for ( const auto& [key, value] : attributes ) + { + xmlStream.writeAttribute( key, value ); + } + } + field->writeFieldData( xmlStream ); + xmlStream.writeEndElement(); } } diff --git a/Fwk/AppFwk/cafTests/cafTestApplication/CMakeLists.txt b/Fwk/AppFwk/cafTests/cafTestApplication/CMakeLists.txt index 89c306b8d4..42151a1089 100644 --- a/Fwk/AppFwk/cafTests/cafTestApplication/CMakeLists.txt +++ b/Fwk/AppFwk/cafTests/cafTestApplication/CMakeLists.txt @@ -18,9 +18,9 @@ set(QRC_FILES ${QRC_FILES} textedit.qrc) find_package( Qt5 COMPONENTS - REQUIRED Core Gui Widgets OpenGL + REQUIRED Core Gui Widgets OpenGL Svg ) -set(QT_LIBRARIES Qt5::Core Qt5::Gui Qt5::Widgets Qt5::OpenGL) +set(QT_LIBRARIES Qt5::Core Qt5::Gui Qt5::Widgets Qt5::OpenGL Qt5::Svg) qt5_wrap_cpp(MOC_SOURCE_FILES ${MOC_HEADER_FILES}) qt5_add_resources(QRC_FILES_CPP ${QRC_FILES}) diff --git a/Fwk/AppFwk/cafTests/cafTestApplication/Main.cpp b/Fwk/AppFwk/cafTests/cafTestApplication/Main.cpp index ce6ab18095..0c839b87c0 100644 --- a/Fwk/AppFwk/cafTests/cafTestApplication/Main.cpp +++ b/Fwk/AppFwk/cafTests/cafTestApplication/Main.cpp @@ -2,14 +2,18 @@ #include "MainWindow.h" #include "cafCmdFeatureManager.h" -#include "cafPdmDefaultObjectFactory.h" - #include "cafFactory.h" +#include "cafPdmDefaultObjectFactory.h" #include "cafPdmUiFieldEditorHandle.h" +#include "cafUiAppearanceSettings.h" + #include int main(int argc, char* argv[]) { + // https://www.w3.org/wiki/CSS/Properties/color/keywords + caf::UiAppearanceSettings::instance()->setAutoValueEditorColor("moccasin"); + auto appExitCode = 0; { QApplication app(argc, argv); diff --git a/Fwk/AppFwk/cafTests/cafTestApplication/MainWindow.cpp b/Fwk/AppFwk/cafTests/cafTestApplication/MainWindow.cpp index c9205c7f73..ab3917bb28 100644 --- a/Fwk/AppFwk/cafTests/cafTestApplication/MainWindow.cpp +++ b/Fwk/AppFwk/cafTests/cafTestApplication/MainWindow.cpp @@ -695,8 +695,6 @@ public: m_proxyEnumField.registerGetMethod(this, &SmallDemoPdmObjectA::enumMember); m_proxyEnumMember = T2; - m_testEnumField.capability()->setUiEditorTypeName(caf::PdmUiListEditor::uiEditorTypeName()); - CAF_PDM_InitFieldNoDefault(&m_multipleAppEnum, "MultipleAppEnumValue", "MultipleAppEnumValue", "", "", ""); m_multipleAppEnum.capability()->setUiEditorTypeName( caf::PdmUiTreeSelectionEditor::uiEditorTypeName()); @@ -803,6 +801,37 @@ public: return &m_textField; } + void enableAutoValueForTestEnum(TestEnumType value) + { + m_testEnumField.uiCapability()->enableAndSetAutoValue(value); + } + + void enableAutoValueForDouble(double value) + { + m_doubleField.uiCapability()->enableAndSetAutoValue(value); + } + + void enableAutoValueForInt(double value) + { + m_intField.uiCapability()->enableAndSetAutoValue(value); + } + + void setAutoValueForTestEnum(TestEnumType value) + { + m_testEnumField.uiCapability()->setAutoValue(value); + } + + void setAutoValueForDouble(double value) + { + m_doubleField.uiCapability()->setAutoValue(value); + m_doubleField.uiCapability()->updateConnectedEditors(); + } + + void setAutoValueForInt(double value) + { + m_intField.uiCapability()->setAutoValue(value); + } + protected: //-------------------------------------------------------------------------------------------------- /// @@ -870,6 +899,13 @@ public: "Demo Object", "", "This object is a demo of the CAF framework", "This object is a demo of the CAF framework"); CAF_PDM_InitField(&m_toggleField, "Toggle", false, "Toggle Field", "", "Toggle Field tooltip", " Toggle Field whatsthis"); + + CAF_PDM_InitField(&m_applyAutoOnChildObjectFields, "ApplyAutoValue", false, "Apply Auto Values"); + m_applyAutoOnChildObjectFields.uiCapability()->setUiEditorTypeName(caf::PdmUiPushButtonEditor::uiEditorTypeName()); + + CAF_PDM_InitField(&m_updateAutoValues, "UpdateAutoValue", false, "Update Auto Values"); + m_updateAutoValues.uiCapability()->setUiEditorTypeName(caf::PdmUiPushButtonEditor::uiEditorTypeName()); + CAF_PDM_InitField(&m_doubleField, "BigNumber", 0.0, @@ -906,7 +942,6 @@ public: "Same type list of PdmObjects"); m_objectListOfSameType.uiCapability()->setUiEditorTypeName(caf::PdmUiTableViewEditor::uiEditorTypeName()); m_objectListOfSameType.uiCapability()->setCustomContextMenuEnabled(true); - ; CAF_PDM_InitFieldNoDefault(&m_ptrField, "m_ptrField", "PtrField", "", "Same type List", "Same type list of PdmObjects"); m_filePath.capability()->setUiEditorTypeName(caf::PdmUiFilePathEditor::uiEditorTypeName()); @@ -922,6 +957,9 @@ public: //-------------------------------------------------------------------------------------------------- void defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) override { + uiOrdering.add(&m_applyAutoOnChildObjectFields); + uiOrdering.add(&m_updateAutoValues); + uiOrdering.add(&m_objectListOfSameType); uiOrdering.add(&m_ptrField); uiOrdering.add(&m_boolField); @@ -992,6 +1030,8 @@ public: caf::PdmPtrField m_ptrField; caf::PdmField m_toggleField; + caf::PdmField m_applyAutoOnChildObjectFields; + caf::PdmField m_updateAutoValues; MenuItemProducer* m_menuItemProducer; @@ -1006,6 +1046,40 @@ public: { std::cout << "Toggle Field changed" << std::endl; } + + static int counter = 0; + counter++; + double doubleValue = 1.23456 + counter; + int intValue = -1213141516 + counter; + auto enumValue = SmallDemoPdmObjectA::TestEnumType::T2; + + if (changedField == &m_applyAutoOnChildObjectFields) + { + std::vector objs; + descendantsIncludingThisOfType(objs); + for (auto obj : objs) + { + obj->enableAutoValueForDouble(doubleValue); + obj->enableAutoValueForInt(intValue); + obj->enableAutoValueForTestEnum(enumValue); + } + + m_applyAutoOnChildObjectFields = false; + } + + if (changedField == &m_updateAutoValues) + { + std::vector objs; + descendantsIncludingThisOfType(objs); + for (auto obj : objs) + { + obj->setAutoValueForDouble(doubleValue); + obj->setAutoValueForInt(intValue); + obj->setAutoValueForTestEnum(enumValue); + } + + m_updateAutoValues = false; + } } //-------------------------------------------------------------------------------------------------- @@ -1043,6 +1117,31 @@ protected: caf::PdmUiTableView::addActionsToMenu(menu, &m_objectListOfSameType); } } + + //-------------------------------------------------------------------------------------------------- + /// + //-------------------------------------------------------------------------------------------------- + void defineEditorAttribute(const caf::PdmFieldHandle* field, + QString uiConfigName, + caf::PdmUiEditorAttribute* attribute) override + { + if (field == &m_applyAutoOnChildObjectFields) + { + auto* attr = dynamic_cast(attribute); + if (attr) + { + attr->m_buttonText = "Apply Auto Values"; + } + } + if (field == &m_updateAutoValues) + { + auto* attr = dynamic_cast(attribute); + if (attr) + { + attr->m_buttonText = "Update Auto Values"; + } + } + } }; CAF_PDM_SOURCE_INIT(DemoPdmObject, "DemoPdmObject"); diff --git a/Fwk/AppFwk/cafUserInterface/CMakeLists.txt b/Fwk/AppFwk/cafUserInterface/CMakeLists.txt index 8d558685b2..d04b63ef21 100644 --- a/Fwk/AppFwk/cafUserInterface/CMakeLists.txt +++ b/Fwk/AppFwk/cafUserInterface/CMakeLists.txt @@ -53,6 +53,8 @@ set(MOC_HEADER_FILES cafPdmDoubleStringValidator.h cafPdmUiPickableLineEditor.h cafPdmUiLabelEditor.h + cafUiAppearanceSettings.h + cafUiIconFactory.h ) find_package( @@ -168,6 +170,8 @@ set(PROJECT_FILES cafPdmUiTreeViewItemDelegate.h cafPdmUiTreeViewItemDelegate.cpp cafPdmUiTreeAttributes.h + cafUiAppearanceSettings.cpp + cafUiIconFactory.cpp ) add_library( diff --git a/Fwk/AppFwk/cafUserInterface/cafPdmUiComboBoxEditor.cpp b/Fwk/AppFwk/cafUserInterface/cafPdmUiComboBoxEditor.cpp index 062fd3689d..086516b95f 100644 --- a/Fwk/AppFwk/cafUserInterface/cafPdmUiComboBoxEditor.cpp +++ b/Fwk/AppFwk/cafUserInterface/cafPdmUiComboBoxEditor.cpp @@ -36,12 +36,13 @@ #include "cafPdmUiComboBoxEditor.h" +#include "cafFactory.h" #include "cafPdmField.h" #include "cafPdmObject.h" #include "cafPdmUiFieldEditorHandle.h" - -#include "cafFactory.h" #include "cafQShortenedLabel.h" +#include "cafUiAppearanceSettings.h" +#include "cafUiIconFactory.h" #include #include @@ -55,146 +56,6 @@ namespace caf { CAF_PDM_UI_FIELD_EDITOR_SOURCE_INIT( PdmUiComboBoxEditor ); -/* GIMP RGBA C-Source image dump (StepDown.c) */ - -static const struct -{ - unsigned int width; - unsigned int height; - unsigned int bytes_per_pixel; /* 2:RGB16, 3:RGB, 4:RGBA */ - unsigned char pixel_data[16 * 16 * 4 + 1]; -} stepDownImageData = { - 16, - 16, - 4, - "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" - "\000\000\000\000\000\000\000\000" - "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" - "\000\000\000\000\000\000\000\000" - "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" - "\000\000\000\000\000\000\000\000" - "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000AA" - "A\001\030\030\030\001" - "\037\037\037\001\020\020\020\001\004\004\004\001\016\016\016\001!!!\001\"\"\"\001(((\001\060\060\060\001$$" - "$\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000UUU\014FFF\242\030\030\030\256\037\037\037" - "\256" - "\022\022\022\256\005\005\005\256\021\021\021\256'''\256...\256\061\061\061\256\067\067\067" - "\256&&&\256AAAzTTT\010\000\000\000\000\000\000\000\000xxx\014```\273\033\033\033\377&&&\377\"" - "\"\"\377\017\017\017\377\"\"\"\377LLL\377___\377^^^\377^^^\377AAA\376OOOXTT" - "T\001\000\000\000\000\000\000\000\000\000\000\000\000JJJ\071+++\343&&&\377%%%\377\017\017\017\377'''\377" - "WWW\377]]]\377hhh\377WWW\376NNN\300\177\177\177\032\000\000\000\000\000\000\000\000\000\000\000" - "\000\000\000\000\000KKK\004\066\066\066z\040\040\040\370\"\"\"\377\014\014\014\377$$$\377SSS\377" - "ccc\377bbb\377NNN\362\202\202\202=\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" - "\000\000\000\000\000\064\064\064\040===\312\032\032\032\375\017\017\017\377$$$\377WWW\377bbb" - "\377MMM\374LLL\200iii\006\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" - "\000\000W" - "WW\001AAA\063###\330\007\007\007\377(((\377VVV\377UUU\377WWW\314\217\217\217\040\000" - "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" - "\000\000\000;;;\001\066\066" - "\066}\027\027\027\371(((\377TTT\377FFF\360\\\\\\C\000\000\000\000\000\000\000\000\000\000\000\000\000\000" - "\000\000\000\000\000\000\000\000\000\000\000\000\000\000TTT\015\025\025\025\036\040\040\040!<<<\"\"\"\067&&" - "&\070$$$\070---:CCC\060;;;" - "\015\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" - "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" - "\000\000\000\000\000\000\000\000" - "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" - "\000\000\000\000\000\000\000\000" - "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" - "\000\000\000\000\000\000\000\000" - "\000\000\000\000\000", -}; - -QIcon createStepDownIcon() -{ - QImage img( stepDownImageData.pixel_data, stepDownImageData.width, stepDownImageData.height, QImage::Format_ARGB32 ); - QPixmap pxMap; - pxMap = QPixmap::fromImage( img ); - - return QIcon( pxMap ); -} - -static const QIcon& stepDownIcon() -{ - static QIcon expandDownIcon( createStepDownIcon() ); - return expandDownIcon; -} - -/* GIMP RGBA C-Source image dump (StepUp.c) */ - -static const struct -{ - unsigned int width; - unsigned int height; - unsigned int bytes_per_pixel; /* 2:RGB16, 3:RGB, 4:RGBA */ - unsigned char pixel_data[16 * 16 * 4 + 1]; -} stepUpImageData = { - 16, - 16, - 4, - "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" - "\000\000\000\000\000\000\000\000" - "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" - "\000\000\000\000\000\000\000\000" - "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" - "\000\000\000\000\000\000\000\000" - "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000;;" - ";\015CCC\060---:" - "$$$\070&&&\070\"\"\"\067///>,,,<---=\070\070\070E@@@?SSS\023\000\000\000\000\000\000\000\000\000\000" - "\000\000???\007\064\064\064\201\062\062\062\335\066\066\066\350\061\061\061\345)))\346$$$\344" - "&&&\353\034\034\034\351\035\035\035\352$$$\363%%%\355QQQ\264bbb\014\000\000\000\000\000\000" - "\000\000AAA\010///\220\032\032\032\343\035\035\035\336###\326###\335!!!\377\022\022\022" - "\377\034\034\034\374\024\024\024\326\015\015\015\316\007\007\007\314\071\071\071\256HHH\015" - "\000\000\000\000\000\000\000\000\000\000\000\000\"\"\"\022\040\040\040\066\026\026\026\061GGG\062ddd\266==" - "=\377\"\"\"\377???\360<<<<\040\040\040!\025\025\025\036TTT\015\000\000\000\000\000\000\000\000\000" - "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\\\\\\CFFF\360TTT\377(((\377\027\027" - "\027\371\066\066\066};;;" - "\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" - "\000\000\000\000\000\000\000\217\217\217\040WWW\314UUU\377VVV\377(((\377\007\007\007\377###\330" - "AAA\063WWW\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000iii" - "\006LLL\200M" - "MM\374bbb\377WWW\377$$$\377\017\017\017\377\032\032\032\375===\312\064\064\064\040" - "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\202\202\202=" - "NNN\362bbb\377" - "ccc\377SSS\377$$$\377\014\014\014\377\"\"\"\377\040\040\040\370\066\066\066zKKK\004" - "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\177\177\177\032NNN\300WWW\376hhh\377]]]\377" - "WWW\377'''\377\017\017\017\377%%%\377&&&\377+++\343JJJ\071\000\000\000\000\000\000\000\000\000" - "\000\000\000TTT\001OOOXAAA\376^^^\377^^^\377___\377LLL\377\"\"\"\377\017\017\017\377" - "\"\"\"\377&&&\377\033\033\033\377```\273xxx\014\000\000\000\000\000\000\000\000TTT\010AAAz&&&" - "\256\067\067\067\256\061\061\061\256...\256'''\256\021\021\021\256\005\005\005\256\022\022" - "\022\256\037\037\037\256\030\030\030\256FFF\242UUU\014\000\000\000\000\000\000\000\000\000\000\000\000\000" - "\000\000\000$$$\001\060\060\060\001(((\001\"\"\"\001!!!\001\016\016\016\001\004\004\004\001\020\020\020\001\037" - "\037\037\001\030\030\030\001AAA\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" - "\000\000\000\000\000" - "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" - "\000\000\000\000\000\000\000\000" - "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" - "\000\000\000\000\000\000\000\000" - "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" - "\000\000\000\000\000\000\000\000" - "\000\000\000\000", -}; - -QIcon createStepUpIcon() -{ - QImage img( stepUpImageData.pixel_data, stepUpImageData.width, stepUpImageData.height, QImage::Format_ARGB32 ); - QPixmap pxMap; - pxMap = QPixmap::fromImage( img ); - - return QIcon( pxMap ); -} - -static const QIcon& stepUpIcon() -{ - static QIcon stepUpIcon( createStepUpIcon() ); - return stepUpIcon; -} - //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -340,7 +201,7 @@ void PdmUiComboBoxEditor::configureAndUpdateUi( const QString& uiConfigName ) } else { - toolButtonIcon = stepUpIcon(); + toolButtonIcon = UiIconFactory::stepUpIcon(); } if ( m_comboBox->count() == 0 || m_comboBox->currentIndex() <= 0 ) @@ -362,7 +223,7 @@ void PdmUiComboBoxEditor::configureAndUpdateUi( const QString& uiConfigName ) } else { - toolButtonIcon = stepDownIcon(); + toolButtonIcon = UiIconFactory::stepDownIcon(); } if ( m_comboBox->count() == 0 || m_comboBox->currentIndex() >= m_comboBox->count() - 1 ) { @@ -401,6 +262,31 @@ void PdmUiComboBoxEditor::configureAndUpdateUi( const QString& uiConfigName ) } } } + + if ( uiField()->isAutoValueEnabled() ) + { + QString highlightColor = UiAppearanceSettings::instance()->autoValueEditorColor(); + m_comboBox->setStyleSheet( QString( "QComboBox {background-color: %1;}" ).arg( highlightColor ) ); + } + else + { + m_comboBox->setStyleSheet( "" ); + } + + if ( uiField()->isAutoValueSupported() ) + { + auto icon = UiIconFactory::createTwoStateChainIcon(); + m_autoValueToolButton->setIcon( icon ); + + m_autoValueToolButton->setChecked( uiField()->isAutoValueEnabled() ); + m_layout->insertWidget( 3, m_autoValueToolButton ); + m_autoValueToolButton->show(); + } + else + { + m_layout->removeWidget( m_autoValueToolButton ); + m_autoValueToolButton->hide(); + } } //-------------------------------------------------------------------------------------------------- @@ -497,6 +383,12 @@ QWidget* PdmUiComboBoxEditor::createEditorWidget( QWidget* parent ) connect( m_comboBox, SIGNAL( activated( int ) ), this, SLOT( slotIndexActivated( int ) ) ); + m_autoValueToolButton = new QToolButton(); + m_autoValueToolButton->setCheckable( true ); + m_autoValueToolButton->setToolButtonStyle( Qt::ToolButtonIconOnly ); + + connect( m_autoValueToolButton, SIGNAL( clicked() ), this, SLOT( slotApplyAutoValue() ) ); + // Forward focus event to combo box editor m_placeholder->setFocusProxy( m_comboBox ); @@ -517,6 +409,8 @@ QWidget* PdmUiComboBoxEditor::createLabelWidget( QWidget* parent ) //-------------------------------------------------------------------------------------------------- void PdmUiComboBoxEditor::slotIndexActivated( int index ) { + uiField()->enableAutoValue( false ); + if ( m_attributes.enableEditableContent ) { // Use the text directly, as the item text could be entered directly by the user @@ -544,6 +438,8 @@ void PdmUiComboBoxEditor::slotEditTextChanged( const QString& text ) { if ( text == m_interactiveEditText ) return; + uiField()->enableAutoValue( false ); + m_interactiveEditText = text; m_interactiveEditCursorPosition = m_comboBox->lineEdit()->cursorPosition(); @@ -576,4 +472,14 @@ void PdmUiComboBoxEditor::slotPreviousButtonPressed() } } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void PdmUiComboBoxEditor::slotApplyAutoValue() +{ + bool enable = m_autoValueToolButton->isChecked(); + uiField()->enableAutoValue( enable ); + configureAndUpdateUi( "" ); +} + } // end namespace caf diff --git a/Fwk/AppFwk/cafUserInterface/cafPdmUiComboBoxEditor.h b/Fwk/AppFwk/cafUserInterface/cafPdmUiComboBoxEditor.h index 4dbb3b1f63..16ef2ed06e 100644 --- a/Fwk/AppFwk/cafUserInterface/cafPdmUiComboBoxEditor.h +++ b/Fwk/AppFwk/cafUserInterface/cafPdmUiComboBoxEditor.h @@ -111,6 +111,7 @@ protected slots: void slotNextButtonPressed(); void slotPreviousButtonPressed(); + void slotApplyAutoValue(); private: QPointer m_comboBox; @@ -118,6 +119,7 @@ private: QPointer m_previousItemButton; QPointer m_nextItemButton; + QPointer m_autoValueToolButton; QPointer m_layout; QPointer m_placeholder; diff --git a/Fwk/AppFwk/cafUserInterface/cafPdmUiLineEditor.cpp b/Fwk/AppFwk/cafUserInterface/cafPdmUiLineEditor.cpp index 4bad41d482..bc7bcf26a2 100644 --- a/Fwk/AppFwk/cafUserInterface/cafPdmUiLineEditor.cpp +++ b/Fwk/AppFwk/cafUserInterface/cafPdmUiLineEditor.cpp @@ -45,10 +45,13 @@ #include "cafPdmUniqueIdValidator.h" #include "cafQShortenedLabel.h" #include "cafSelectionManager.h" +#include "cafUiAppearanceSettings.h" +#include "cafUiIconFactory.h" #include #include #include +#include #include #include #include @@ -89,7 +92,19 @@ QWidget* PdmUiLineEditor::createEditorWidget( QWidget* parent ) connect( m_lineEdit, SIGNAL( editingFinished() ), this, SLOT( slotEditingFinished() ) ); - return m_lineEdit; + m_placeholder = new QWidget( parent ); + m_layout = new QHBoxLayout( m_placeholder ); + m_layout->setContentsMargins( 0, 0, 0, 0 ); + m_layout->setSpacing( 0 ); + m_layout->addWidget( m_lineEdit ); + + m_autoValueToolButton = new QToolButton(); + m_autoValueToolButton->setCheckable( true ); + m_autoValueToolButton->setToolButtonStyle( Qt::ToolButtonIconOnly ); + + connect( m_autoValueToolButton, SIGNAL( clicked() ), this, SLOT( slotApplyAutoValue() ) ); + + return m_placeholder; } //-------------------------------------------------------------------------------------------------- @@ -125,6 +140,31 @@ void PdmUiLineEditor::configureAndUpdateUi( const QString& uiConfigName ) uiObject->editorAttribute( uiField()->fieldHandle(), uiConfigName, &leab ); } + if ( uiField()->isAutoValueEnabled() ) + { + QString highlightColor = UiAppearanceSettings::instance()->autoValueEditorColor(); + m_lineEdit->setStyleSheet( QString( "QLineEdit {background-color: %1;}" ).arg( highlightColor ) ); + } + else + { + m_lineEdit->setStyleSheet( "" ); + } + + if ( uiField()->isAutoValueSupported() ) + { + auto icon = UiIconFactory::createTwoStateChainIcon(); + m_autoValueToolButton->setIcon( icon ); + + m_autoValueToolButton->setChecked( uiField()->isAutoValueEnabled() ); + m_layout->insertWidget( 1, m_autoValueToolButton ); + m_autoValueToolButton->show(); + } + else + { + m_layout->removeWidget( m_autoValueToolButton ); + m_autoValueToolButton->hide(); + } + if ( leab.validator ) { m_lineEdit->setValidator( leab.validator ); @@ -255,6 +295,8 @@ void PdmUiLineEditor::slotEditingFinished() { QVariant v; + uiField()->enableAutoValue( false ); + if ( m_optionCache.size() ) { int index = findIndexToOption( m_lineEdit->text() ); @@ -403,6 +445,16 @@ void PdmUiLineEditor::slotCompleterActivated( const QModelIndex& index ) m_ignoreCompleterActivated = false; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void PdmUiLineEditor::slotApplyAutoValue() +{ + bool enable = m_autoValueToolButton->isChecked(); + uiField()->enableAutoValue( enable ); + configureAndUpdateUi( "" ); +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -420,9 +472,9 @@ int PdmUiLineEditor::findIndexToOption( const QString& uiText ) return -1; } -// Define at this location to avoid duplicate symbol definitions in 'cafPdmUiDefaultObjectEditor.cpp' in a cotire build. -// The variables defined by the macro are prefixed by line numbers causing a crash if the macro is defined at the same -// line number. +// Define at this location to avoid duplicate symbol definitions in 'cafPdmUiDefaultObjectEditor.cpp' in a cotire +// build. The variables defined by the macro are prefixed by line numbers causing a crash if the macro is defined at +// the same line number. CAF_PDM_UI_FIELD_EDITOR_SOURCE_INIT( PdmUiLineEditor ); } // end namespace caf diff --git a/Fwk/AppFwk/cafUserInterface/cafPdmUiLineEditor.h b/Fwk/AppFwk/cafUserInterface/cafPdmUiLineEditor.h index d512e107bb..20b1fe51f9 100644 --- a/Fwk/AppFwk/cafUserInterface/cafPdmUiLineEditor.h +++ b/Fwk/AppFwk/cafUserInterface/cafPdmUiLineEditor.h @@ -38,10 +38,12 @@ #include "cafPdmUiFieldEditorHandle.h" +#include #include #include #include #include +#include #include #include @@ -133,11 +135,12 @@ protected: void configureAndUpdateUi( const QString& uiConfigName ) override; QMargins calculateLabelContentMargins() const override; - virtual bool eventFilter( QObject* watched, QEvent* event ) override; + bool eventFilter( QObject* watched, QEvent* event ) override; protected slots: void slotEditingFinished(); void slotCompleterActivated( const QModelIndex& index ); + void slotApplyAutoValue(); private: bool isMultipleFieldsWithSameKeywordSelected( PdmFieldHandle* editorField ) const; @@ -146,6 +149,11 @@ protected: QPointer m_lineEdit; QPointer m_label; + QPointer m_autoValueToolButton; + + QPointer m_layout; + QPointer m_placeholder; + QPointer m_completer; QPointer m_completerTextList; QList m_optionCache; diff --git a/Fwk/AppFwk/cafUserInterface/cafPdmUiTreeViewEditor.cpp b/Fwk/AppFwk/cafUserInterface/cafPdmUiTreeViewEditor.cpp index 5e9a75d42c..95778c323c 100644 --- a/Fwk/AppFwk/cafUserInterface/cafPdmUiTreeViewEditor.cpp +++ b/Fwk/AppFwk/cafUserInterface/cafPdmUiTreeViewEditor.cpp @@ -560,8 +560,11 @@ bool PdmUiTreeViewEditor::eventFilter( QObject* obj, QEvent* event ) { if ( event->type() == QEvent::FocusIn ) { - this->updateSelectionManager(); - emit selectionChanged(); + bool anyChanges = this->updateSelectionManager(); + if ( anyChanges ) + { + emit selectionChanged(); + } } // standard event processing @@ -571,14 +574,16 @@ bool PdmUiTreeViewEditor::eventFilter( QObject* obj, QEvent* event ) //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void PdmUiTreeViewEditor::updateSelectionManager() +bool PdmUiTreeViewEditor::updateSelectionManager() { if ( m_updateSelectionManager ) { std::vector items; this->selectedUiItems( items ); - SelectionManager::instance()->setSelectedItems( items ); + return SelectionManager::instance()->setSelectedItems( items ); } + + return false; } //-------------------------------------------------------------------------------------------------- diff --git a/Fwk/AppFwk/cafUserInterface/cafPdmUiTreeViewEditor.h b/Fwk/AppFwk/cafUserInterface/cafPdmUiTreeViewEditor.h index bae96c76fa..800da2cf66 100644 --- a/Fwk/AppFwk/cafUserInterface/cafPdmUiTreeViewEditor.h +++ b/Fwk/AppFwk/cafUserInterface/cafPdmUiTreeViewEditor.h @@ -151,7 +151,7 @@ private: QModelIndex mapIndexIfNecessary( QModelIndex index ) const; - void updateSelectionManager(); + bool updateSelectionManager(); void updateItemDelegateForSubTree( const QModelIndex& subRootIndex = QModelIndex() ); bool eventFilter( QObject* obj, QEvent* event ) override; diff --git a/Fwk/AppFwk/cafUserInterface/cafUiAppearanceSettings.cpp b/Fwk/AppFwk/cafUserInterface/cafUiAppearanceSettings.cpp new file mode 100644 index 0000000000..768fa3f1f7 --- /dev/null +++ b/Fwk/AppFwk/cafUserInterface/cafUiAppearanceSettings.cpp @@ -0,0 +1,63 @@ +//################################################################################################## +// +// Custom Visualization Core library +// Copyright (C) 2022- Ceetron Solutions AS +// +// This library may be used under the terms of either the GNU General Public License or +// the GNU Lesser General Public License as follows: +// +// GNU General Public License Usage +// This library is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU General Public License at <> +// for more details. +// +// GNU Lesser General Public License Usage +// This library is free software; you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation; either version 2.1 of the License, or +// (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU Lesser General Public License at <> +// for more details. +// +//################################################################################################## +#include "cafUiAppearanceSettings.h" + +namespace caf +{ +UiAppearanceSettings* UiAppearanceSettings::instance() +{ + static UiAppearanceSettings staticInstance; + + return &staticInstance; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QString UiAppearanceSettings::autoValueEditorColor() const +{ + return m_autoValueEditorColor; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void UiAppearanceSettings::setAutoValueEditorColor( const QString& colorName ) +{ + m_autoValueEditorColor = colorName; +} + +} // namespace caf diff --git a/Fwk/AppFwk/cafUserInterface/cafUiAppearanceSettings.h b/Fwk/AppFwk/cafUserInterface/cafUiAppearanceSettings.h new file mode 100644 index 0000000000..6f2380a1a9 --- /dev/null +++ b/Fwk/AppFwk/cafUserInterface/cafUiAppearanceSettings.h @@ -0,0 +1,54 @@ +//################################################################################################## +// +// Custom Visualization Core library +// Copyright (C) 2022- Ceetron Solutions AS +// +// This library may be used under the terms of either the GNU General Public License or +// the GNU Lesser General Public License as follows: +// +// GNU General Public License Usage +// This library is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU General Public License at <> +// for more details. +// +// GNU Lesser General Public License Usage +// This library is free software; you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation; either version 2.1 of the License, or +// (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU Lesser General Public License at <> +// for more details. +// +//################################################################################################## +#pragma once + +#include + +namespace caf +{ +class UiAppearanceSettings +{ +public: + static UiAppearanceSettings* instance(); + + QString autoValueEditorColor() const; + void setAutoValueEditorColor( const QString& colorName ); + +private: + QString m_autoValueEditorColor; +}; + +} // namespace caf diff --git a/Fwk/AppFwk/cafUserInterface/cafUiIconFactory.cpp b/Fwk/AppFwk/cafUserInterface/cafUiIconFactory.cpp new file mode 100644 index 0000000000..dd441af8b5 --- /dev/null +++ b/Fwk/AppFwk/cafUserInterface/cafUiIconFactory.cpp @@ -0,0 +1,350 @@ +//################################################################################################## +// +// Custom Visualization Core library +// Copyright (C) 2022- Ceetron Solutions AS +// +// This library may be used under the terms of either the GNU General Public License or +// the GNU Lesser General Public License as follows: +// +// GNU General Public License Usage +// This library is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU General Public License at <> +// for more details. +// +// GNU Lesser General Public License Usage +// This library is free software; you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation; either version 2.1 of the License, or +// (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU Lesser General Public License at <> +// for more details. +// +//################################################################################################## + +#include "cafUiIconFactory.h" + +#include "QIcon" +#include "QImage" +#include "QPainter" +#include "QPixmap" +#include "QtSvg/QSvgRenderer" + +namespace caf +{ +/* GIMP RGBA C-Source image dump (StepDown.c) */ + +static const struct +{ + unsigned int width; + unsigned int height; + unsigned int bytes_per_pixel; /* 2:RGB16, 3:RGB, 4:RGBA */ + unsigned char pixel_data[16 * 16 * 4 + 1]; +} stepDownImageData = { + 16, + 16, + 4, + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000AA" + "A\001\030\030\030\001" + "\037\037\037\001\020\020\020\001\004\004\004\001\016\016\016\001!!!\001\"\"\"\001(((\001\060\060\060\001$$" + "$\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000UUU\014FFF\242\030\030\030\256\037\037\037" + "\256" + "\022\022\022\256\005\005\005\256\021\021\021\256'''\256...\256\061\061\061\256\067\067\067" + "\256&&&\256AAAzTTT\010\000\000\000\000\000\000\000\000xxx\014```\273\033\033\033\377&&&\377\"" + "\"\"\377\017\017\017\377\"\"\"\377LLL\377___\377^^^\377^^^\377AAA\376OOOXTT" + "T\001\000\000\000\000\000\000\000\000\000\000\000\000JJJ\071+++\343&&&\377%%%\377\017\017\017\377'''\377" + "WWW\377]]]\377hhh\377WWW\376NNN\300\177\177\177\032\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000KKK\004\066\066\066z\040\040\040\370\"\"\"\377\014\014\014\377$$$\377SSS\377" + "ccc\377bbb\377NNN\362\202\202\202=\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\064\064\064\040===\312\032\032\032\375\017\017\017\377$$$\377WWW\377bbb" + "\377MMM\374LLL\200iii\006\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000W" + "WW\001AAA\063###\330\007\007\007\377(((\377VVV\377UUU\377WWW\314\217\217\217\040\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000;;;\001\066\066" + "\066}\027\027\027\371(((\377TTT\377FFF\360\\\\\\C\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000TTT\015\025\025\025\036\040\040\040!<<<\"\"\"\067&&" + "&\070$$$\070---:CCC\060;;;" + "\015\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000" + "\000\000\000\000\000", +}; + +/* GIMP RGBA C-Source image dump (StepUp.c) */ + +static const struct +{ + unsigned int width; + unsigned int height; + unsigned int bytes_per_pixel; /* 2:RGB16, 3:RGB, 4:RGBA */ + unsigned char pixel_data[16 * 16 * 4 + 1]; +} stepUpImageData = { + 16, + 16, + 4, + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000;;" + ";\015CCC\060---:" + "$$$\070&&&\070\"\"\"\067///>,,,<---=\070\070\070E@@@?SSS\023\000\000\000\000\000\000\000\000\000\000" + "\000\000???\007\064\064\064\201\062\062\062\335\066\066\066\350\061\061\061\345)))\346$$$\344" + "&&&\353\034\034\034\351\035\035\035\352$$$\363%%%\355QQQ\264bbb\014\000\000\000\000\000\000" + "\000\000AAA\010///\220\032\032\032\343\035\035\035\336###\326###\335!!!\377\022\022\022" + "\377\034\034\034\374\024\024\024\326\015\015\015\316\007\007\007\314\071\071\071\256HHH\015" + "\000\000\000\000\000\000\000\000\000\000\000\000\"\"\"\022\040\040\040\066\026\026\026\061GGG\062ddd\266==" + "=\377\"\"\"\377???\360<<<<\040\040\040!\025\025\025\036TTT\015\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\\\\\\CFFF\360TTT\377(((\377\027\027" + "\027\371\066\066\066};;;" + "\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\217\217\217\040WWW\314UUU\377VVV\377(((\377\007\007\007\377###\330" + "AAA\063WWW\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000iii" + "\006LLL\200M" + "MM\374bbb\377WWW\377$$$\377\017\017\017\377\032\032\032\375===\312\064\064\064\040" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\202\202\202=" + "NNN\362bbb\377" + "ccc\377SSS\377$$$\377\014\014\014\377\"\"\"\377\040\040\040\370\066\066\066zKKK\004" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\177\177\177\032NNN\300WWW\376hhh\377]]]\377" + "WWW\377'''\377\017\017\017\377%%%\377&&&\377+++\343JJJ\071\000\000\000\000\000\000\000\000\000" + "\000\000\000TTT\001OOOXAAA\376^^^\377^^^\377___\377LLL\377\"\"\"\377\017\017\017\377" + "\"\"\"\377&&&\377\033\033\033\377```\273xxx\014\000\000\000\000\000\000\000\000TTT\010AAAz&&&" + "\256\067\067\067\256\061\061\061\256...\256'''\256\021\021\021\256\005\005\005\256\022\022" + "\022\256\037\037\037\256\030\030\030\256FFF\242UUU\014\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000$$$\001\060\060\060\001(((\001\"\"\"\001!!!\001\016\016\016\001\004\004\004\001\020\020\020\001\037" + "\037\037\001\030\030\030\001AAA\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" + "\000\000\000\000\000\000\000\000" + "\000\000\000\000", +}; + +// clang-format off + +static char* linked_svg_data = R"( + + + + + +)"; + +static char* linked_white_svg_data = R"( + + + + + + +)"; + +static char* unlinked_svg_data= R"( + + + + + + + + + + + +)"; + + +static char* unlinked_white_svg_data = R"( + + + + + + + + + + + + +)"; + +// clang-format on + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +const QIcon UiIconFactory::stepUpIcon() +{ + static QIcon expandDownIcon( + UiIconFactory::createIcon( stepUpImageData.pixel_data, stepUpImageData.width, stepUpImageData.height ) ); + return expandDownIcon; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +const QIcon UiIconFactory::stepDownIcon() +{ + static QIcon expandDownIcon( + UiIconFactory::createIcon( stepDownImageData.pixel_data, stepDownImageData.width, stepDownImageData.height ) ); + return expandDownIcon; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +const QIcon UiIconFactory::createTwoStateChainIcon() +{ + static QIcon icon( UiIconFactory::createTwoStateIcon( linked_svg_data, + unlinked_svg_data, + UiIconFactory::iconWidth(), + UiIconFactory::iconHeight() ) ); + + return icon; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +const QIcon UiIconFactory::createTwoStateWhiteChainIcon() +{ + static QIcon icon( UiIconFactory::createTwoStateIcon( linked_white_svg_data, + unlinked_white_svg_data, + UiIconFactory::iconWidth(), + UiIconFactory::iconHeight() ) ); + + return icon; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +int UiIconFactory::iconWidth() +{ + return 32; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +int UiIconFactory::iconHeight() +{ + return 32; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +const QIcon UiIconFactory::createTwoStateIcon( const char* onStateSvgData, + const char* offStateSvgData, + unsigned int width, + unsigned int height ) +{ + auto onStatePixmap = UiIconFactory::createPixmap( onStateSvgData, width, height ); + auto offStatePixmap = UiIconFactory::createPixmap( offStateSvgData, width, height ); + + QIcon icon; + icon.addPixmap( onStatePixmap, QIcon::Normal, QIcon::On ); + icon.addPixmap( offStatePixmap, QIcon::Normal, QIcon::Off ); + + return icon; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +const QIcon UiIconFactory::createIcon( const unsigned char* data, unsigned int width, unsigned int height ) +{ + QImage img( data, width, height, QImage::Format_ARGB32 ); + QPixmap pxMap; + pxMap = QPixmap::fromImage( img ); + + return QIcon( pxMap ); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +const QIcon UiIconFactory::createSvgIcon( const char* data, unsigned int width, unsigned int height ) +{ + QPixmap pxMap = createPixmap( data, width, height ); + + return QIcon( pxMap ); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +const QPixmap UiIconFactory::createPixmap( const char* svgData, unsigned int width, unsigned int height ) +{ + auto svg = QSvgRenderer( QByteArray( svgData ) ); + + auto qim = QImage( width, height, QImage::Format_ARGB32 ); + + qim.fill( 0 ); + + auto painter = QPainter(); + painter.begin( &qim ); + svg.render( &painter ); + painter.end(); + + QPixmap pxMap; + pxMap = QPixmap::fromImage( qim ); + + return pxMap; +} + +} // namespace caf diff --git a/Fwk/AppFwk/cafUserInterface/cafUiIconFactory.h b/Fwk/AppFwk/cafUserInterface/cafUiIconFactory.h new file mode 100644 index 0000000000..744e01f329 --- /dev/null +++ b/Fwk/AppFwk/cafUserInterface/cafUiIconFactory.h @@ -0,0 +1,65 @@ +//################################################################################################## +// +// Custom Visualization Core library +// Copyright (C) 2022- Ceetron Solutions AS +// +// This library may be used under the terms of either the GNU General Public License or +// the GNU Lesser General Public License as follows: +// +// GNU General Public License Usage +// This library is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU General Public License at <> +// for more details. +// +// GNU Lesser General Public License Usage +// This library is free software; you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation; either version 2.1 of the License, or +// (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU Lesser General Public License at <> +// for more details. +// +//################################################################################################## +#pragma once + +#include + +namespace caf +{ +class UiIconFactory +{ +public: + static const QIcon stepDownIcon(); + static const QIcon stepUpIcon(); + + static const QIcon createTwoStateChainIcon(); + static const QIcon createTwoStateWhiteChainIcon(); + +private: + static int iconWidth(); + static int iconHeight(); + + static const QIcon createTwoStateIcon( const char* onStateSvgData, + const char* offStateSvgData, + unsigned int width, + unsigned int height ); + + static const QIcon createIcon( const unsigned char* data, unsigned int width, unsigned int height ); + static const QIcon createSvgIcon( const char* data, unsigned int width, unsigned int height ); + static const QPixmap createPixmap( const char* svgData, unsigned int width, unsigned int height ); +}; + +} // namespace caf From 72c070c3a9b713f6ce7a52d457ee6040042ae47b Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Mon, 5 Sep 2022 14:12:49 +0200 Subject: [PATCH 101/129] Use field auto values for summary plots Use auto value concept in summary plot configuration. Default behavior is unchanged, but it is now possible to unlink a field to specify a custom value for this field. Other changes: * Add missing requirement for Svg in test application * Use calculator icon and rename panel text Use icon and relevant text to make it clear that the content in Calculator Data can be used for Grid Property Calculator and nothing else. * Add example with scoped enum and auto value * Use enum value starting av 10 to make sure enum values (not option item index) are working as expected --- ApplicationExeCode/RiaMain.cpp | 5 + .../Tools/RiaSummaryAddressAnalyzer.cpp | 15 ++ .../Tools/RiaSummaryAddressAnalyzer.h | 2 + .../RimPlotAxisProperties.cpp | 137 ++++++++++++------ .../ProjectDataModel/RimPlotAxisProperties.h | 13 +- .../RimPlotAxisPropertiesInterface.cpp | 19 --- .../RimPlotAxisPropertiesInterface.h | 7 - .../Summary/RimSummaryMultiPlot.cpp | 71 +++++---- .../Summary/RimSummaryMultiPlot.h | 3 +- .../Summary/RimSummaryPlot.cpp | 22 ++- .../ProjectDataModel/Summary/RimSummaryPlot.h | 2 +- .../Summary/RimSummaryTimeAxisProperties.cpp | 23 ++- .../Summary/RimSummaryTimeAxisProperties.h | 2 + .../UserInterface/RiuDockWidgetTools.cpp | 2 +- .../UserInterface/RiuMainWindow.cpp | 2 +- .../cafPdmUiCore/cafPdmUiFieldHandle.cpp | 12 +- .../cafPdmUiCore/cafPdmUiFieldHandle.h | 2 +- .../cafTestApplication/MainWindow.cpp | 31 ++-- .../cafTestCvfApplication/CMakeLists.txt | 4 +- Fwk/AppFwk/cafUserInterface/CMakeLists.txt | 2 - .../cafPdmUiComboBoxEditor.cpp | 2 + .../cafUserInterface/cafPdmUiLineEditor.cpp | 3 + .../cafUserInterface/cafUiIconFactory.cpp | 8 +- 23 files changed, 250 insertions(+), 139 deletions(-) diff --git a/ApplicationExeCode/RiaMain.cpp b/ApplicationExeCode/RiaMain.cpp index 67fb3b5232..503144cce5 100644 --- a/ApplicationExeCode/RiaMain.cpp +++ b/ApplicationExeCode/RiaMain.cpp @@ -28,6 +28,8 @@ #include "RiaGuiApplication.h" #endif +#include "cafUiAppearanceSettings.h" + #include "cvfProgramOptions.h" #include "cvfqtUtils.h" @@ -74,6 +76,9 @@ int main( int argc, char* argv[] ) // Create feature manager before the application object is created RiaMainTools::initializeSingletons(); + // https://www.w3.org/wiki/CSS/Properties/color/keywords + caf::UiAppearanceSettings::instance()->setAutoValueEditorColor( "moccasin" ); + std::unique_ptr app( createApplication( argc, argv ) ); cvf::ProgramOptions progOpt; diff --git a/ApplicationLibCode/Application/Tools/RiaSummaryAddressAnalyzer.cpp b/ApplicationLibCode/Application/Tools/RiaSummaryAddressAnalyzer.cpp index ede8e17170..3cb725c7b6 100644 --- a/ApplicationLibCode/Application/Tools/RiaSummaryAddressAnalyzer.cpp +++ b/ApplicationLibCode/Application/Tools/RiaSummaryAddressAnalyzer.cpp @@ -83,6 +83,21 @@ std::set RiaSummaryAddressAnalyzer::quantityNamesNoHistory() const return m_quantitiesNoMatchingHistory; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +bool RiaSummaryAddressAnalyzer::isSingleQuantityIgnoreHistory() const +{ + if ( quantities().size() == 1 ) return true; + + if ( quantities().size() == 2 && quantityNamesWithHistory().size() == 1 ) + { + return true; + } + + return false; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/Application/Tools/RiaSummaryAddressAnalyzer.h b/ApplicationLibCode/Application/Tools/RiaSummaryAddressAnalyzer.h index 685470a417..b8d0b31fa4 100644 --- a/ApplicationLibCode/Application/Tools/RiaSummaryAddressAnalyzer.h +++ b/ApplicationLibCode/Application/Tools/RiaSummaryAddressAnalyzer.h @@ -46,6 +46,8 @@ public: std::set quantityNamesWithHistory() const; std::set quantityNamesNoHistory() const; + bool isSingleQuantityIgnoreHistory() const; + std::string quantityNameForTitle() const; std::set wellNames() const; diff --git a/ApplicationLibCode/ProjectDataModel/RimPlotAxisProperties.cpp b/ApplicationLibCode/ProjectDataModel/RimPlotAxisProperties.cpp index 24f8b8ab60..daa3ebb198 100644 --- a/ApplicationLibCode/ProjectDataModel/RimPlotAxisProperties.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimPlotAxisProperties.cpp @@ -64,9 +64,6 @@ RimPlotAxisProperties::RimPlotAxisProperties() CAF_PDM_InitField( &m_isActive, "Active", true, "Active" ); m_isActive.uiCapability()->setUiHidden( true ); - CAF_PDM_InitField( &m_isMinMaxOverridden, "IsMinMaxOverridden", false, "IsMinMaxOverridden" ); - m_isMinMaxOverridden.uiCapability()->setUiHidden( true ); - CAF_PDM_InitFieldNoDefault( &m_objectName, "Name", "Name" ); m_objectName.uiCapability()->setUiHidden( true ); @@ -76,17 +73,22 @@ RimPlotAxisProperties::RimPlotAxisProperties() CAF_PDM_InitField( &isAutoTitle, "AutoTitle", true, "Auto Title" ); CAF_PDM_InitField( &m_displayLongName, "DisplayLongName", true, " Names" ); + m_displayLongName.uiCapability()->enableAutoValueSupport( true ); + CAF_PDM_InitField( &m_displayShortName, "DisplayShortName", false, " Acronyms" ); CAF_PDM_InitField( &m_displayUnitText, "DisplayUnitText", true, " Units" ); CAF_PDM_InitFieldNoDefault( &m_customTitle, "CustomTitle", "Title" ); CAF_PDM_InitField( &m_visibleRangeMax, "VisibleRangeMax", RiaDefines::maximumDefaultValuePlot(), "Max" ); + m_visibleRangeMax.uiCapability()->enableAutoValueSupport( true ); CAF_PDM_InitField( &m_visibleRangeMin, "VisibleRangeMin", RiaDefines::minimumDefaultValuePlot(), "Min" ); + m_visibleRangeMin.uiCapability()->enableAutoValueSupport( true ); CAF_PDM_InitFieldNoDefault( &m_numberFormat, "NumberFormat", "Number Format" ); CAF_PDM_InitField( &m_numberOfDecimals, "Decimals", 2, "Number of Decimals" ); CAF_PDM_InitField( &m_scaleFactor, "ScaleFactor", 1.0, "Scale Factor" ); + m_scaleFactor.uiCapability()->enableAutoValueSupport( true ); CAF_PDM_InitField( &m_isAutoZoom, "AutoZoom", true, "Set Range Automatically" ); CAF_PDM_InitField( &m_isLogarithmicScaleEnabled, "LogarithmicScale", false, "Logarithmic Scale" ); @@ -106,6 +108,7 @@ RimPlotAxisProperties::RimPlotAxisProperties() m_annotations.uiCapability()->setUiTreeHidden( true ); CAF_PDM_InitFieldNoDefault( &m_majorTickmarkCount, "MajorTickmarkCount", "Major Tickmark Count" ); + m_majorTickmarkCount.uiCapability()->enableAutoValueSupport( true ); updateOptionSensitivity(); } @@ -261,8 +264,6 @@ void RimPlotAxisProperties::defineUiOrdering( QString uiConfigName, caf::PdmUiOr m_plotAxis.uiCapability()->setUiReadOnly( m_isAlwaysRequired ); uiOrdering.skipRemainingFields( true ); - - updateOverriddenLabelAndReadOnlyState(); } //-------------------------------------------------------------------------------------------------- @@ -503,41 +504,52 @@ void RimPlotAxisProperties::setVisible( bool visible ) //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RimPlotAxisProperties::computeAndSetScaleFactor() +void RimPlotAxisProperties::enableAutoValueForScaleFactor( bool enable ) +{ + m_scaleFactor.uiCapability()->enableAutoValue( enable ); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimPlotAxisProperties::computeAndSetAutoValueForScaleFactor() { auto maxAbsValue = std::max( std::fabs( visibleRangeMax() ), std::fabs( visibleRangeMin() ) ); + double scaleFactor = 1.0; + if ( maxAbsValue < 1.0 && maxAbsValue > 1e-6 ) { // Do not use scale factor for small values above 1e-6 - m_scaleFactor = 1.0; - return; + scaleFactor = 1.0; } - - if ( maxAbsValue > 1.0 && maxAbsValue < 1e6 ) + else if ( maxAbsValue > 1.0 && maxAbsValue < 1e6 ) { // Do not use scale factor for values above 1 and below 1e-6 - m_scaleFactor = 1.0; - return; - } - - int exponent = std::floor( std::log10( maxAbsValue ) ); - if ( exponent > 0 ) - { - while ( exponent > -20 && ( exponent % 3 ) != 0 ) - { - exponent--; - } + scaleFactor = 1.0; } else { - while ( exponent < 1 && ( exponent % 3 ) != 0 ) + int exponent = std::floor( std::log10( maxAbsValue ) ); + if ( exponent > 0 ) { - exponent++; + while ( exponent > -20 && ( exponent % 3 ) != 0 ) + { + exponent--; + } } + else + { + while ( exponent < 1 && ( exponent % 3 ) != 0 ) + { + exponent++; + } + } + + scaleFactor = std::pow( 10, exponent ); } - m_scaleFactor = std::pow( 10, exponent ); + m_scaleFactor.uiCapability()->setAutoValue( scaleFactor ); } //-------------------------------------------------------------------------------------------------- @@ -567,9 +579,36 @@ double RimPlotAxisProperties::visibleRangeMax() const //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RimPlotAxisProperties::setMinMaxOverridden( bool isOverridden ) +void RimPlotAxisProperties::enableAutoValueMinMax( bool enable ) { - m_isMinMaxOverridden = isOverridden; + m_visibleRangeMin.uiCapability()->enableAutoValueSupport( enable ); + m_visibleRangeMax.uiCapability()->enableAutoValueSupport( enable ); + + if ( enable ) + { + m_visibleRangeMin.uiCapability()->enableAutoValue( enable ); + m_visibleRangeMax.uiCapability()->enableAutoValue( enable ); + } +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimPlotAxisProperties::setAutoValueVisibleRangeMin( double value ) +{ + // Do not notify editors, as this causes recursive updates + bool notifyFieldChanged = false; + m_visibleRangeMin.uiCapability()->setAutoValue( value, notifyFieldChanged ); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimPlotAxisProperties::setAutoValueVisibleRangeMax( double value ) +{ + // Do not notify editors, as this causes recursive updates + bool notifyFieldChanged = false; + m_visibleRangeMax.uiCapability()->setAutoValue( value, notifyFieldChanged ); } //-------------------------------------------------------------------------------------------------- @@ -588,6 +627,17 @@ void RimPlotAxisProperties::setVisibleRangeMax( double value ) m_visibleRangeMax = value; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimPlotAxisProperties::setAutoZoomIfNoCustomRangeIsSet() +{ + if ( !m_visibleRangeMax.uiCapability()->isAutoValueEnabled() ) return; + if ( !m_visibleRangeMin.uiCapability()->isAutoValueEnabled() ) return; + + setAutoZoom( true ); +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -604,6 +654,24 @@ void RimPlotAxisProperties::setMajorTickmarkCount( LegendTickmarkCount count ) m_majorTickmarkCount = count; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimPlotAxisProperties::setAutoValueForMajorTickmarkCount( LegendTickmarkCount count ) +{ + auto enumValue = static_cast>( count ); + + m_majorTickmarkCount.uiCapability()->setAutoValue( enumValue ); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimPlotAxisProperties::enableAutoValueForMajorTickmarkCount( bool enable ) +{ + m_majorTickmarkCount.uiCapability()->enableAutoValue( enable ); +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -659,23 +727,6 @@ void RimPlotAxisProperties::updateOptionSensitivity() m_customTitle.uiCapability()->setUiReadOnly( isAutoTitle ); } -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimPlotAxisProperties::updateOverriddenLabelAndReadOnlyState() -{ - // Auto Appearance is defined in RimSummaryMultiPlot::analyzePlotsAndAdjustAppearanceSettings() - QString axisRangeToolTip = "Controlled by Axis Range Control"; - - RiaFieldHandleTools::updateOverrideStateAndLabel( &m_visibleRangeMin, m_isMinMaxOverridden, axisRangeToolTip ); - RiaFieldHandleTools::updateOverrideStateAndLabel( &m_visibleRangeMax, m_isMinMaxOverridden, axisRangeToolTip ); - - QString autoAppearanceToolTip = "Controlled by Auto Adjust Appearance"; - RiaFieldHandleTools::updateOverrideStateAndLabel( &m_majorTickmarkCount, isAppearanceOverridden(), autoAppearanceToolTip ); - RiaFieldHandleTools::updateOverrideStateAndLabel( &m_scaleFactor, isAppearanceOverridden(), autoAppearanceToolTip ); - RiaFieldHandleTools::updateOverrideStateAndLabel( &m_displayLongName, isAppearanceOverridden(), autoAppearanceToolTip ); -} - //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/RimPlotAxisProperties.h b/ApplicationLibCode/ProjectDataModel/RimPlotAxisProperties.h index 96a5f62b04..584261e5b1 100644 --- a/ApplicationLibCode/ProjectDataModel/RimPlotAxisProperties.h +++ b/ApplicationLibCode/ProjectDataModel/RimPlotAxisProperties.h @@ -97,7 +97,8 @@ public: double scaleFactor() const; void setVisible( bool visible ); - void computeAndSetScaleFactor(); + void enableAutoValueForScaleFactor( bool enable ); + void computeAndSetAutoValueForScaleFactor(); bool isDeletable() const override; @@ -113,12 +114,17 @@ public: double visibleRangeMin() const override; double visibleRangeMax() const override; - void setMinMaxOverridden( bool isOverridden ); + void enableAutoValueMinMax( bool enable ); + void setAutoValueVisibleRangeMin( double value ); + void setAutoValueVisibleRangeMax( double value ); void setVisibleRangeMin( double value ) override; void setVisibleRangeMax( double value ) override; + void setAutoZoomIfNoCustomRangeIsSet(); LegendTickmarkCount majorTickmarkCount() const override; void setMajorTickmarkCount( LegendTickmarkCount count ) override; + void setAutoValueForMajorTickmarkCount( LegendTickmarkCount count ); + void enableAutoValueForMajorTickmarkCount( bool enable ); protected: void initAfterRead() override; @@ -131,15 +137,12 @@ protected: private: void updateOptionSensitivity(); - void updateOverriddenLabelAndReadOnlyState(); caf::FontTools::FontSize plotFontSize() const; void defineObjectEditorAttribute( QString uiConfigName, caf::PdmUiEditorAttribute* attribute ) override; private: caf::PdmField m_isActive; - caf::PdmField m_isMinMaxOverridden; - caf::PdmField isAutoTitle; caf::PdmField m_displayShortName; caf::PdmField m_displayLongName; diff --git a/ApplicationLibCode/ProjectDataModel/RimPlotAxisPropertiesInterface.cpp b/ApplicationLibCode/ProjectDataModel/RimPlotAxisPropertiesInterface.cpp index 7172d61b09..6a89de2120 100644 --- a/ApplicationLibCode/ProjectDataModel/RimPlotAxisPropertiesInterface.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimPlotAxisPropertiesInterface.cpp @@ -53,9 +53,6 @@ RimPlotAxisPropertiesInterface::RimPlotAxisPropertiesInterface() : settingsChanged( this ) { CAF_PDM_InitObject( "Plot Axis Properties Interface" ); - - CAF_PDM_InitField( &m_isAppearanceOverridden, "IsAppearanceOverridden", false, "IsAppearanceOverridden" ); - m_isAppearanceOverridden.uiCapability()->setUiHidden( true ); } //-------------------------------------------------------------------------------------------------- @@ -74,14 +71,6 @@ bool RimPlotAxisPropertiesInterface::isLogarithmicScaleEnabled() const return false; } -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimPlotAxisPropertiesInterface::setAppearanceOverridden( bool isOverridden ) -{ - m_isAppearanceOverridden = isOverridden; -} - //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -109,11 +98,3 @@ int RimPlotAxisPropertiesInterface::tickmarkCountFromEnum( LegendTickmarkCount c return maxTickmarkCount; } - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -bool RimPlotAxisPropertiesInterface::isAppearanceOverridden() const -{ - return m_isAppearanceOverridden(); -} diff --git a/ApplicationLibCode/ProjectDataModel/RimPlotAxisPropertiesInterface.h b/ApplicationLibCode/ProjectDataModel/RimPlotAxisPropertiesInterface.h index 9ec8bc4983..2abbd3e1f1 100644 --- a/ApplicationLibCode/ProjectDataModel/RimPlotAxisPropertiesInterface.h +++ b/ApplicationLibCode/ProjectDataModel/RimPlotAxisPropertiesInterface.h @@ -78,7 +78,6 @@ public: virtual LegendTickmarkCount majorTickmarkCount() const = 0; virtual void setMajorTickmarkCount( LegendTickmarkCount count ) = 0; - void setAppearanceOverridden( bool isOverridden ); static int tickmarkCountFromEnum( LegendTickmarkCount count ); @@ -86,10 +85,4 @@ public: virtual AxisTitlePositionType titlePosition() const = 0; virtual int titleFontSize() const = 0; virtual int valuesFontSize() const = 0; - -protected: - bool isAppearanceOverridden() const; - -private: - caf::PdmField m_isAppearanceOverridden; }; diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.cpp index ce99e4bbdf..131d9a4f17 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.cpp @@ -146,7 +146,7 @@ RimSummaryMultiPlot::RimSummaryMultiPlot() caf::PdmUiNativeCheckBoxEditor::configureFieldForEditor( &m_linkSubPlotAxes ); CAF_PDM_InitField( &m_linkTimeAxis, "LinkTimeAxis", true, "Link Time Axis" ); caf::PdmUiNativeCheckBoxEditor::configureFieldForEditor( &m_linkTimeAxis ); - CAF_PDM_InitField( &m_autoAdjustAppearance, "AutoAdjustAppearance", true, "Auto Adjust Appearance" ); + CAF_PDM_InitField( &m_autoAdjustAppearance, "AutoAdjustAppearance", true, "Auto Plot Settings" ); caf::PdmUiNativeCheckBoxEditor::configureFieldForEditor( &m_autoAdjustAppearance ); CAF_PDM_InitField( &m_allow3DSelectionLink, "Allow3DSelectionLink", true, "Allow Well Selection from 3D View" ); caf::PdmUiNativeCheckBoxEditor::configureFieldForEditor( &m_allow3DSelectionLink ); @@ -453,9 +453,8 @@ void RimSummaryMultiPlot::fieldChangedByUi( const caf::PdmFieldHandle* changedFi else if ( changedField == &m_linkSubPlotAxes || changedField == &m_axisRangeAggregation || changedField == &m_linkTimeAxis ) { - syncAxisRanges(); - setOverriddenFlag(); + syncAxisRanges(); } else if ( changedField == &m_hidePlotsWithValuesBelow ) { @@ -493,8 +492,8 @@ void RimSummaryMultiPlot::fieldChangedByUi( const caf::PdmFieldHandle* changedFi } else if ( changedField == &m_autoAdjustAppearance ) { - checkAndApplyAutoAppearance(); setOverriddenFlag(); + checkAndApplyAutoAppearance(); } else { @@ -731,6 +730,8 @@ void RimSummaryMultiPlot::onLoadDataAndUpdate() //-------------------------------------------------------------------------------------------------- void RimSummaryMultiPlot::zoomAll() { + setOverriddenFlag(); + // Reset zoom to make sure the complete range for min/max is available RimMultiPlot::zoomAll(); @@ -816,8 +817,16 @@ void RimSummaryMultiPlot::syncAxisRanges() return; } - // Reset zoom to make sure the complete range for min/max is available - RimMultiPlot::zoomAllYAxes(); + // Reset zoom for axes with no custom range set to make sure the complete range for min/max is available + + for ( auto p : summaryPlots() ) + { + for ( auto ax : p->plotYAxes() ) + { + ax->setAutoZoomIfNoCustomRangeIsSet(); + } + } + updateZoom(); if ( m_axisRangeAggregation() == AxisRangeAggregation::SUB_PLOTS ) { @@ -853,8 +862,8 @@ void RimSummaryMultiPlot::syncAxisRanges() auto [minVal, maxVal] = axisRanges[axis->plotAxisType()]; if ( axis->isAxisInverted() ) std::swap( minVal, maxVal ); axis->setAutoZoom( false ); - axis->setVisibleRangeMin( minVal ); - axis->setVisibleRangeMax( maxVal ); + axis->setAutoValueVisibleRangeMin( minVal ); + axis->setAutoValueVisibleRangeMax( maxVal ); } plot->updateAxes(); @@ -1099,8 +1108,8 @@ void RimSummaryMultiPlot::computeAggregatedAxisRange() scaleEngine.autoScale( maxMajorTickIntervalCount, minVal, maxVal, stepSize ); } - axis->setVisibleRangeMin( minVal ); - axis->setVisibleRangeMax( maxVal ); + axis->setAutoValueVisibleRangeMin( minVal ); + axis->setAutoValueVisibleRangeMax( maxVal ); } } @@ -1152,17 +1161,17 @@ void RimSummaryMultiPlot::setOverriddenFlag() /// //-------------------------------------------------------------------------------------------------- void RimSummaryMultiPlot::setOverriddenFlagsForPlot( RimSummaryPlot* summaryPlot, - bool isMinMaxOverridden, - bool isAppearanceOverridden ) + bool enableAutoValueMinMax, + bool enableAutoValueAppearance ) { - for ( auto plotAxis : summaryPlot->plotAxes() ) + auto timeAxisProp = summaryPlot->timeAxisProperties(); + if ( timeAxisProp ) timeAxisProp->enableAutoValueForMajorTickmarkCount( enableAutoValueAppearance ); + + for ( auto plotAxis : summaryPlot->plotYAxes() ) { - plotAxis->setAppearanceOverridden( isAppearanceOverridden ); - auto plotAxProp = dynamic_cast( plotAxis ); - if ( plotAxProp ) - { - plotAxProp->setMinMaxOverridden( isMinMaxOverridden ); - } + plotAxis->enableAutoValueMinMax( enableAutoValueMinMax ); + plotAxis->enableAutoValueForMajorTickmarkCount( enableAutoValueAppearance ); + plotAxis->enableAutoValueForScaleFactor( enableAutoValueAppearance ); } } @@ -1205,16 +1214,16 @@ void RimSummaryMultiPlot::analyzePlotsAndAdjustAppearanceSettings() analyzer.appendAddresses( addresses ); } - bool hasOnlyOneQuantity = analyzer.quantities().size() == 1; + bool hasOnlyOneQuantity = analyzer.isSingleQuantityIgnoreHistory(); for ( auto p : summaryPlots() ) { auto timeAxisProp = p->timeAxisProperties(); if ( columnCount() < 3 ) - timeAxisProp->setMajorTickmarkCount( RimPlotAxisProperties::LegendTickmarkCount::TICKMARK_DEFAULT ); + timeAxisProp->setAutoValueForMajorTickmarkCount( RimPlotAxisProperties::LegendTickmarkCount::TICKMARK_DEFAULT ); else - timeAxisProp->setMajorTickmarkCount( RimPlotAxisProperties::LegendTickmarkCount::TICKMARK_FEW ); + timeAxisProp->setAutoValueForMajorTickmarkCount( RimPlotAxisProperties::LegendTickmarkCount::TICKMARK_FEW ); for ( RimPlotAxisPropertiesInterface* axisInterface : p->plotYAxes() ) { @@ -1223,11 +1232,13 @@ void RimSummaryMultiPlot::analyzePlotsAndAdjustAppearanceSettings() if ( !axisProp ) continue; if ( rowsPerPage() == 1 ) - axisProp->setMajorTickmarkCount( RimPlotAxisPropertiesInterface::LegendTickmarkCount::TICKMARK_DEFAULT ); + axisProp->setAutoValueForMajorTickmarkCount( + RimPlotAxisPropertiesInterface::LegendTickmarkCount::TICKMARK_DEFAULT ); else - axisProp->setMajorTickmarkCount( RimPlotAxisPropertiesInterface::LegendTickmarkCount::TICKMARK_FEW ); + axisProp->setAutoValueForMajorTickmarkCount( + RimPlotAxisPropertiesInterface::LegendTickmarkCount::TICKMARK_FEW ); - axisProp->computeAndSetScaleFactor(); + axisProp->computeAndSetAutoValueForScaleFactor(); if ( hasOnlyOneQuantity ) { @@ -1236,9 +1247,15 @@ void RimSummaryMultiPlot::analyzePlotsAndAdjustAppearanceSettings() auto [row, col] = gridLayoutInfoForSubPlot( p ); if ( col == 0 ) + { axisProp->setShowUnitText( true ); + axisProp->setShowDescription( true ); + } else + { axisProp->setShowUnitText( false ); + axisProp->setShowDescription( false ); + } } } @@ -1369,8 +1386,8 @@ void RimSummaryMultiPlot::appendSubPlotByStepping( int direction ) // NOTE: If summary cross plots should be handled here, we also need to call // curve->setSummaryCaseX( newCase ); - // Setting summaryCaseX with a default uninitialized summary address causes issues for the summary name - // analyzer + // Setting summaryCaseX with a default uninitialized summary address causes issues for the summary + // name analyzer } } else if ( m_sourceStepping()->stepDimension() == RimSummaryDataSourceStepping::SourceSteppingDimension::ENSEMBLE ) diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.h b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.h index fafb7b49e4..3cbe82e24d 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.h +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.h @@ -135,7 +135,8 @@ private: void updatePlotVisibility(); void setOverriddenFlag(); - void setOverriddenFlagsForPlot( RimSummaryPlot* summaryPlot, bool isMinMaxOverridden, bool isAppearanceOverridden ); + static void + setOverriddenFlagsForPlot( RimSummaryPlot* summaryPlot, bool isMinMaxOverridden, bool isAppearanceOverridden ); void duplicate(); diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlot.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlot.cpp index 93446c5ad5..a8d00846f6 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlot.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlot.cpp @@ -1738,8 +1738,19 @@ void RimSummaryPlot::updateZoomFromParentPlot() auto [axisMin, axisMax] = plotWidget()->axisRange( axisProperties->plotAxisType() ); if ( axisProperties->isAxisInverted() ) std::swap( axisMin, axisMax ); - axisProperties->setVisibleRangeMax( axisMax ); - axisProperties->setVisibleRangeMin( axisMin ); + auto propertyAxis = dynamic_cast( axisProperties ); + + if ( propertyAxis ) + { + propertyAxis->setAutoValueVisibleRangeMax( axisMax ); + propertyAxis->setAutoValueVisibleRangeMin( axisMin ); + } + else + { + axisProperties->setVisibleRangeMax( axisMax ); + axisProperties->setVisibleRangeMin( axisMin ); + } + axisProperties->updateConnectedEditors(); } } @@ -2849,12 +2860,13 @@ std::vector RimSummaryPlot::plotAxes() const //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -std::vector RimSummaryPlot::plotYAxes() const +std::vector RimSummaryPlot::plotYAxes() const { - std::vector axisProps; + std::vector axisProps; for ( const auto& ap : m_axisProperties ) { - if ( RiaDefines::isVertical( ap->plotAxisType().axis() ) ) axisProps.push_back( ap ); + auto plotAxisProp = dynamic_cast( ap.p() ); + if ( plotAxisProp ) axisProps.push_back( plotAxisProp ); } return axisProps; diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlot.h b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlot.h index 640a51293a..14086b57cd 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlot.h +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlot.h @@ -197,7 +197,7 @@ public: std::vector allCurves( RimSummaryDataSourceStepping::Axis axis ) const override; std::vector plotAxes() const; - std::vector plotYAxes() const; + std::vector plotYAxes() const; RimPlotAxisPropertiesInterface* axisPropertiesForPlotAxis( RiuPlotAxis plotAxis ) const; diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryTimeAxisProperties.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryTimeAxisProperties.cpp index 3ffccd8127..da2d732e8c 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryTimeAxisProperties.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryTimeAxisProperties.cpp @@ -120,6 +120,7 @@ RimSummaryTimeAxisProperties::RimSummaryTimeAxisProperties() m_timeFormat = RiaPreferences::current()->timeFormat(); CAF_PDM_InitFieldNoDefault( &m_majorTickmarkCount, "MajorTickmarkCount", "Major Tickmark Count" ); + m_majorTickmarkCount.uiCapability()->enableAutoValueSupport( true ); CAF_PDM_InitFieldNoDefault( &m_annotations, "Annotations", "" ); m_annotations.uiCapability()->setUiTreeHidden( true ); @@ -373,6 +374,24 @@ void RimSummaryTimeAxisProperties::setMajorTickmarkCount( LegendTickmarkCount co m_majorTickmarkCount = count; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimSummaryTimeAxisProperties::setAutoValueForMajorTickmarkCount( LegendTickmarkCount count ) +{ + auto enumValue = static_cast>( count ); + + m_majorTickmarkCount.uiCapability()->setAutoValue( enumValue ); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimSummaryTimeAxisProperties::enableAutoValueForMajorTickmarkCount( bool enable ) +{ + m_majorTickmarkCount.uiCapability()->enableAutoValue( enable ); +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -616,10 +635,6 @@ void RimSummaryTimeAxisProperties::defineUiOrdering( QString uiConfigName, caf:: timeGroup->add( &m_valuesFontSize ); timeGroup->add( &m_majorTickmarkCount ); - // Auto Appearance is defined in RimSummaryMultiPlot::analyzePlotsAndAdjustAppearanceSettings() - QString autoAppearanceToolTip = "Controlled by Auto Adjust Appearance"; - RiaFieldHandleTools::updateOverrideStateAndLabel( &m_majorTickmarkCount, isAppearanceOverridden(), autoAppearanceToolTip ); - if ( m_timeMode() == DATE ) { caf::PdmUiGroup* advancedGroup = timeGroup->addNewGroup( "Date/Time Label Format" ); diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryTimeAxisProperties.h b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryTimeAxisProperties.h index 41e908a922..b0d4c3e6fc 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryTimeAxisProperties.h +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryTimeAxisProperties.h @@ -106,6 +106,8 @@ public: LegendTickmarkCount majorTickmarkCount() const override; void setMajorTickmarkCount( LegendTickmarkCount count ) override; + void setAutoValueForMajorTickmarkCount( LegendTickmarkCount count ); + void enableAutoValueForMajorTickmarkCount( bool enable ); const QString objectName() const override; const QString axisTitleText() const override; diff --git a/ApplicationLibCode/UserInterface/RiuDockWidgetTools.cpp b/ApplicationLibCode/UserInterface/RiuDockWidgetTools.cpp index cc9ba6fc80..33f341afe0 100644 --- a/ApplicationLibCode/UserInterface/RiuDockWidgetTools.cpp +++ b/ApplicationLibCode/UserInterface/RiuDockWidgetTools.cpp @@ -336,7 +336,7 @@ QIcon RiuDockWidgetTools::dockIcon( const QString dockWidgetName ) else if ( dockWidgetName == mainWindowProjectTreeName() ) return QIcon( ":/standard.svg" ); else if ( dockWidgetName == mainWindowDataSourceTreeName() ) - return QIcon( ":/data-sources.svg" ); + return QIcon( ":/Calculator.svg" ); else if ( dockWidgetName == mainWindowScriptsTreeName() ) return QIcon( ":/scripts.svg" ); else if ( dockWidgetName == mainPlotWindowName() ) diff --git a/ApplicationLibCode/UserInterface/RiuMainWindow.cpp b/ApplicationLibCode/UserInterface/RiuMainWindow.cpp index 709856a471..337385b788 100644 --- a/ApplicationLibCode/UserInterface/RiuMainWindow.cpp +++ b/ApplicationLibCode/UserInterface/RiuMainWindow.cpp @@ -731,7 +731,7 @@ void RiuMainWindow::createToolBars() void RiuMainWindow::createDockPanels() { const int nTreeViews = 3; - const std::vector treeViewTitles = { "Project Tree", "Data Sources", "Scripts" }; + const std::vector treeViewTitles = { "Project Tree", "Calculator Data ", "Scripts" }; const std::vector treeViewConfigs = { "MainWindow.ProjectTree", "MainWindow.DataSources", "MainWindow.Scripts" }; const std::vector treeViewDockNames = { RiuDockWidgetTools::mainWindowProjectTreeName(), RiuDockWidgetTools::mainWindowDataSourceTreeName(), diff --git a/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/cafPdmUiFieldHandle.cpp b/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/cafPdmUiFieldHandle.cpp index 0f914d17b5..4b62e355d1 100644 --- a/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/cafPdmUiFieldHandle.cpp +++ b/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/cafPdmUiFieldHandle.cpp @@ -136,13 +136,13 @@ void PdmUiFieldHandle::enableAndSetAutoValue( const QVariant& autoValue ) //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void PdmUiFieldHandle::setAutoValue( const QVariant& autoValue ) +void PdmUiFieldHandle::setAutoValue( const QVariant& autoValue, bool notifyFieldChanged ) { m_autoValue = autoValue; - if ( m_useAutoValue ) + if ( m_useAutoValue && m_autoValue.isValid() ) { - setValueFromUiEditor( m_autoValue, false ); + setValueFromUiEditor( m_autoValue, notifyFieldChanged ); updateConnectedEditors(); } } @@ -162,9 +162,9 @@ void PdmUiFieldHandle::enableAutoValue( bool enable ) { m_useAutoValue = enable; - if ( m_useAutoValue ) + if ( m_useAutoValue && m_autoValue.isValid() ) { - setValueFromUiEditor( m_autoValue, false ); + setValueFromUiEditor( m_autoValue, true ); updateConnectedEditors(); } } @@ -174,6 +174,8 @@ void PdmUiFieldHandle::enableAutoValue( bool enable ) //-------------------------------------------------------------------------------------------------- bool PdmUiFieldHandle::isAutoValueEnabled() const { + if ( !m_isAutoValueSupported ) return false; + return m_useAutoValue; } diff --git a/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/cafPdmUiFieldHandle.h b/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/cafPdmUiFieldHandle.h index fb8dec754d..d4f67501b1 100644 --- a/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/cafPdmUiFieldHandle.h +++ b/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/cafPdmUiFieldHandle.h @@ -28,7 +28,7 @@ public: void setAutoAddingOptionFromValue( bool isAddingValue ); void enableAndSetAutoValue( const QVariant& autoValue ); - void setAutoValue( const QVariant& autoValue ); + void setAutoValue( const QVariant& autoValue, bool notifyFieldChanged = true ); QVariant autoValue() const; void enableAutoValue( bool enable ); bool isAutoValueEnabled() const; diff --git a/Fwk/AppFwk/cafTests/cafTestApplication/MainWindow.cpp b/Fwk/AppFwk/cafTests/cafTestApplication/MainWindow.cpp index ab3917bb28..dc441dcd10 100644 --- a/Fwk/AppFwk/cafTests/cafTestApplication/MainWindow.cpp +++ b/Fwk/AppFwk/cafTests/cafTestApplication/MainWindow.cpp @@ -656,9 +656,9 @@ class SmallDemoPdmObjectA : public caf::PdmObject CAF_PDM_HEADER_INIT; public: - enum TestEnumType + enum class TestEnumType { - T1, + T1 = 10, T2, T3 }; @@ -687,13 +687,14 @@ public: "Enter some small number here", "This is a place you can enter a small integer value if you want"); CAF_PDM_InitField(&m_textField, "TextField", QString("Small Demo Object A"), "Name Text Field", "", "", ""); - CAF_PDM_InitField(&m_testEnumField, "TestEnumValue", caf::AppEnum(T1), "EnumField", "", "", ""); + CAF_PDM_InitField( + &m_testEnumField, "TestEnumValue", caf::AppEnum(TestEnumType::T1), "EnumField", "", "", ""); CAF_PDM_InitFieldNoDefault(&m_ptrField, "m_ptrField", "PtrField", "", "", ""); CAF_PDM_InitFieldNoDefault(&m_proxyEnumField, "ProxyEnumValue", "ProxyEnum", "", "", ""); m_proxyEnumField.registerSetMethod(this, &SmallDemoPdmObjectA::setEnumMember); m_proxyEnumField.registerGetMethod(this, &SmallDemoPdmObjectA::enumMember); - m_proxyEnumMember = T2; + m_proxyEnumMember = TestEnumType::T2; CAF_PDM_InitFieldNoDefault(&m_multipleAppEnum, "MultipleAppEnumValue", "MultipleAppEnumValue", "", "", ""); m_multipleAppEnum.capability()->setUiEditorTypeName( @@ -739,7 +740,7 @@ public: } else if (changedField == &m_highlightedEnum) { - std::cout << "Highlight value " << m_highlightedEnum() << std::endl; + std::cout << "Highlight value " << m_highlightedEnum().uiText().toStdString() << std::endl; } else if (changedField == &m_pushButtonField) { @@ -803,7 +804,11 @@ public: void enableAutoValueForTestEnum(TestEnumType value) { - m_testEnumField.uiCapability()->enableAndSetAutoValue(value); + // Convert to integer value as this is used when communicating enum from UI to field enum value + // See PdmUiFieldSpecialization> + auto enumValue = static_cast>(value); + + m_testEnumField.uiCapability()->enableAndSetAutoValue(enumValue); } void enableAutoValueForDouble(double value) @@ -818,7 +823,11 @@ public: void setAutoValueForTestEnum(TestEnumType value) { - m_testEnumField.uiCapability()->setAutoValue(value); + // Convert to integer value as this is used when communicating enum from UI to field enum value + // See PdmUiFieldSpecialization> + auto enumValue = static_cast>(value); + + m_testEnumField.uiCapability()->setAutoValue(enumValue); } void setAutoValueForDouble(double value) @@ -879,10 +888,10 @@ namespace caf template<> void AppEnum::setUp() { - addItem(SmallDemoPdmObjectA::T1, "T1", "An A letter"); - addItem(SmallDemoPdmObjectA::T2, "T2", "A B letter"); - addItem(SmallDemoPdmObjectA::T3, "T3", "A B C letter"); - setDefault(SmallDemoPdmObjectA::T1); + addItem(SmallDemoPdmObjectA::TestEnumType::T1, "T1", "An A letter"); + addItem(SmallDemoPdmObjectA::TestEnumType::T2, "T2", "A B letter"); + addItem(SmallDemoPdmObjectA::TestEnumType::T3, "T3", "A B C letter"); + setDefault(SmallDemoPdmObjectA::TestEnumType::T1); } } // namespace caf diff --git a/Fwk/AppFwk/cafTests/cafTestCvfApplication/CMakeLists.txt b/Fwk/AppFwk/cafTests/cafTestCvfApplication/CMakeLists.txt index dc8227f54f..2715b3567b 100644 --- a/Fwk/AppFwk/cafTests/cafTestCvfApplication/CMakeLists.txt +++ b/Fwk/AppFwk/cafTests/cafTestCvfApplication/CMakeLists.txt @@ -11,9 +11,9 @@ set(QRC_FILES textedit.qrc) find_package( Qt5 COMPONENTS - REQUIRED Core Gui Widgets OpenGL + REQUIRED Core Gui Widgets OpenGL Svg ) -set(QT_LIBRARIES Qt5::Core Qt5::Gui Qt5::Widgets Qt5::OpenGL) +set(QT_LIBRARIES Qt5::Core Qt5::Gui Qt5::Widgets Qt5::OpenGL Qt5::Svg) qt5_wrap_cpp(MOC_SOURCE_FILES ${MOC_HEADER_FILES}) qt5_add_resources(QRC_FILES_CPP ${QRC_FILES}) diff --git a/Fwk/AppFwk/cafUserInterface/CMakeLists.txt b/Fwk/AppFwk/cafUserInterface/CMakeLists.txt index d04b63ef21..74f1cdca3c 100644 --- a/Fwk/AppFwk/cafUserInterface/CMakeLists.txt +++ b/Fwk/AppFwk/cafUserInterface/CMakeLists.txt @@ -53,8 +53,6 @@ set(MOC_HEADER_FILES cafPdmDoubleStringValidator.h cafPdmUiPickableLineEditor.h cafPdmUiLabelEditor.h - cafUiAppearanceSettings.h - cafUiIconFactory.h ) find_package( diff --git a/Fwk/AppFwk/cafUserInterface/cafPdmUiComboBoxEditor.cpp b/Fwk/AppFwk/cafUserInterface/cafPdmUiComboBoxEditor.cpp index 086516b95f..592b35e886 100644 --- a/Fwk/AppFwk/cafUserInterface/cafPdmUiComboBoxEditor.cpp +++ b/Fwk/AppFwk/cafUserInterface/cafPdmUiComboBoxEditor.cpp @@ -279,6 +279,8 @@ void PdmUiComboBoxEditor::configureAndUpdateUi( const QString& uiConfigName ) m_autoValueToolButton->setIcon( icon ); m_autoValueToolButton->setChecked( uiField()->isAutoValueEnabled() ); + QString tooltipText = uiField()->isAutoValueEnabled() ? "Linked" : "Unlinked"; + m_autoValueToolButton->setToolTip( tooltipText ); m_layout->insertWidget( 3, m_autoValueToolButton ); m_autoValueToolButton->show(); } diff --git a/Fwk/AppFwk/cafUserInterface/cafPdmUiLineEditor.cpp b/Fwk/AppFwk/cafUserInterface/cafPdmUiLineEditor.cpp index bc7bcf26a2..32db12e75a 100644 --- a/Fwk/AppFwk/cafUserInterface/cafPdmUiLineEditor.cpp +++ b/Fwk/AppFwk/cafUserInterface/cafPdmUiLineEditor.cpp @@ -156,6 +156,9 @@ void PdmUiLineEditor::configureAndUpdateUi( const QString& uiConfigName ) m_autoValueToolButton->setIcon( icon ); m_autoValueToolButton->setChecked( uiField()->isAutoValueEnabled() ); + QString tooltipText = uiField()->isAutoValueEnabled() ? "Linked" : "Unlinked"; + m_autoValueToolButton->setToolTip( tooltipText ); + m_layout->insertWidget( 1, m_autoValueToolButton ); m_autoValueToolButton->show(); } diff --git a/Fwk/AppFwk/cafUserInterface/cafUiIconFactory.cpp b/Fwk/AppFwk/cafUserInterface/cafUiIconFactory.cpp index dd441af8b5..5f72a504ec 100644 --- a/Fwk/AppFwk/cafUserInterface/cafUiIconFactory.cpp +++ b/Fwk/AppFwk/cafUserInterface/cafUiIconFactory.cpp @@ -156,7 +156,7 @@ static const struct // clang-format off -static char* linked_svg_data = R"( +static const char* linked_svg_data = R"( @@ -168,7 +168,7 @@ static char* linked_svg_data = R"( )"; -static char* linked_white_svg_data = R"( +static const char* linked_white_svg_data = R"( @@ -183,7 +183,7 @@ static char* linked_white_svg_data = R"( )"; -static char* unlinked_svg_data= R"( +static const char* unlinked_svg_data= R"( @@ -201,7 +201,7 @@ static char* unlinked_svg_data= R"( )"; -static char* unlinked_white_svg_data = R"( +static const char* unlinked_white_svg_data = R"( From 54ac7568cb2f469d8a996e9d7b2e04230d1f6e9c Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Mon, 5 Sep 2022 14:16:21 +0200 Subject: [PATCH 102/129] Set version to RC_01 --- ResInsightVersion.cmake | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ResInsightVersion.cmake b/ResInsightVersion.cmake index e2b2443fc3..5a3f6fdb33 100644 --- a/ResInsightVersion.cmake +++ b/ResInsightVersion.cmake @@ -4,14 +4,14 @@ set(RESINSIGHT_MINOR_VERSION 06) set(RESINSIGHT_PATCH_VERSION 1) # Opional text with no restrictions -set(RESINSIGHT_VERSION_TEXT "-dev") -#set(RESINSIGHT_VERSION_TEXT "-RC_03") +#set(RESINSIGHT_VERSION_TEXT "-dev") +set(RESINSIGHT_VERSION_TEXT "-RC_01") # Optional text # Must be unique and increasing within one combination of major/minor/patch version # The uniqueness of this text is independent of RESINSIGHT_VERSION_TEXT # Format of text must be ".xx" -set(RESINSIGHT_DEV_VERSION ".01") +# set(RESINSIGHT_DEV_VERSION ".01") # https://github.com/CRAVA/crava/tree/master/libs/nrlib set(NRLIB_GITHUB_SHA "ba35d4359882f1c6f5e9dc30eb95fe52af50fd6f") From 803c9505b984f04f78bada717fdae1ad53bc4f8a Mon Sep 17 00:00:00 2001 From: Kristian Bendiksen Date: Thu, 25 Aug 2022 14:44:52 +0200 Subject: [PATCH 103/129] Thermal Fracture: fix incorrect weighting when interpolating. --- .../ReservoirDataModel/RigThermalFractureResultUtil.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ApplicationLibCode/ReservoirDataModel/RigThermalFractureResultUtil.cpp b/ApplicationLibCode/ReservoirDataModel/RigThermalFractureResultUtil.cpp index 95a47237c3..b32af79043 100644 --- a/ApplicationLibCode/ReservoirDataModel/RigThermalFractureResultUtil.cpp +++ b/ApplicationLibCode/ReservoirDataModel/RigThermalFractureResultUtil.cpp @@ -521,14 +521,14 @@ double RigThermalFractureResultUtil::interpolateProperty( const cvf::Vec3d& // Sort by distance std::sort( distances.begin(), distances.end() ); - // Create distance-weighthed mean of first few points + // Create inverse-distance-weighthed mean of first few points size_t numPoints = 3; RiaWeightedMeanCalculator calc; for ( size_t i = 0; i < numPoints; i++ ) { auto [distance, nodeIndex] = distances[i]; double value = fractureDefinition->getPropertyValue( propertyIndex, nodeIndex, static_cast( timeStepIndex ) ); - calc.addValueAndWeight( value, distance ); + calc.addValueAndWeight( value, std::pow( 1.0 / distance, 2.0 ) ); } return calc.weightedMean(); From 78464b772fda16ac262f89cabf5e5641123a7a8a Mon Sep 17 00:00:00 2001 From: Kristian Bendiksen Date: Thu, 25 Aug 2022 15:10:23 +0200 Subject: [PATCH 104/129] #9100 Thermal Fracture: add action to place using template data --- .../FractureCommands/CMakeLists_files.cmake | 2 + ...hermalFractureUsingTemplateDataFeature.cpp | 106 ++++++++++++++++++ ...eThermalFractureUsingTemplateDataFeature.h | 39 +++++++ .../RimThermalFractureTemplate.cpp | 16 +++ .../Completions/RimThermalFractureTemplate.h | 2 + .../RimContextCommandBuilder.cpp | 2 + 6 files changed, 167 insertions(+) create mode 100644 ApplicationLibCode/Commands/FractureCommands/RicPlaceThermalFractureUsingTemplateDataFeature.cpp create mode 100644 ApplicationLibCode/Commands/FractureCommands/RicPlaceThermalFractureUsingTemplateDataFeature.h diff --git a/ApplicationLibCode/Commands/FractureCommands/CMakeLists_files.cmake b/ApplicationLibCode/Commands/FractureCommands/CMakeLists_files.cmake index 44b3c832ed..e9061068e8 100644 --- a/ApplicationLibCode/Commands/FractureCommands/CMakeLists_files.cmake +++ b/ApplicationLibCode/Commands/FractureCommands/CMakeLists_files.cmake @@ -21,6 +21,7 @@ set(SOURCE_GROUP_HEADER_FILES ${CMAKE_CURRENT_LIST_DIR}/RicCreateMultipleFracturesUi.h ${CMAKE_CURRENT_LIST_DIR}/RicNewOptionItemFeature.h ${CMAKE_CURRENT_LIST_DIR}/RicDeleteOptionItemFeature.h + ${CMAKE_CURRENT_LIST_DIR}/RicPlaceThermalFractureUsingTemplateDataFeature.h ) set(SOURCE_GROUP_SOURCE_FILES @@ -46,6 +47,7 @@ set(SOURCE_GROUP_SOURCE_FILES ${CMAKE_CURRENT_LIST_DIR}/RicCreateMultipleFracturesUi.cpp ${CMAKE_CURRENT_LIST_DIR}/RicNewOptionItemFeature.cpp ${CMAKE_CURRENT_LIST_DIR}/RicDeleteOptionItemFeature.cpp + ${CMAKE_CURRENT_LIST_DIR}/RicPlaceThermalFractureUsingTemplateDataFeature.cpp ) list(APPEND COMMAND_CODE_HEADER_FILES ${SOURCE_GROUP_HEADER_FILES}) diff --git a/ApplicationLibCode/Commands/FractureCommands/RicPlaceThermalFractureUsingTemplateDataFeature.cpp b/ApplicationLibCode/Commands/FractureCommands/RicPlaceThermalFractureUsingTemplateDataFeature.cpp new file mode 100644 index 0000000000..91c66482e2 --- /dev/null +++ b/ApplicationLibCode/Commands/FractureCommands/RicPlaceThermalFractureUsingTemplateDataFeature.cpp @@ -0,0 +1,106 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2022- Equinor ASA +// +// ResInsight is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU General Public License at +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#include "RicPlaceThermalFractureUsingTemplateDataFeature.h" + +#include "RiaLogging.h" + +#include "RigWellPath.h" +#include "RimProject.h" +#include "RimThermalFractureTemplate.h" +#include "RimWellPath.h" +#include "RimWellPathFracture.h" + +#include "cafSelectionManager.h" + +#include "cvfAssert.h" + +#include +#include + +CAF_CMD_SOURCE_INIT( RicPlaceThermalFractureUsingTemplateDataFeature, "RicPlaceThermalFractureUsingTemplateDataFeature" ); + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RicPlaceThermalFractureUsingTemplateDataFeature::onActionTriggered( bool isChecked ) +{ + RimWellPathFracture* fracture = RicPlaceThermalFractureUsingTemplateDataFeature::selectedThermalFracture(); + if ( !fracture ) return; + + if ( !fracture->fractureTemplate() ) return; + + RimThermalFractureTemplate* thermalTemplate = dynamic_cast( fracture->fractureTemplate() ); + if ( !thermalTemplate ) return; + + RimWellPath* wellPath = nullptr; + fracture->firstAncestorOrThisOfTypeAsserted( wellPath ); + + auto wellPathGeometry = wellPath->wellPathGeometry(); + if ( !wellPathGeometry ) return; + + auto [centerPosition, rotation] = thermalTemplate->computePositionAndRotation(); + + // TODO: y conversion is workaround for strange test data + centerPosition.y() = std::fabs( centerPosition.y() ); + centerPosition.z() *= -1.0; + + double md = wellPathGeometry->closestMeasuredDepth( centerPosition ); + + RiaLogging::info( QString( "Placing thermal fracture. Posotion: [%1 %2 %3]" ) + .arg( centerPosition.x() ) + .arg( centerPosition.y() ) + .arg( centerPosition.z() ) ); + RiaLogging::info( QString( "Computed MD: %1" ).arg( md ) ); + + fracture->setMeasuredDepth( md ); + + fracture->updateConnectedEditors(); + RimProject* project = RimProject::current(); + project->reloadCompletionTypeResultsInAllViews(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RicPlaceThermalFractureUsingTemplateDataFeature::setupActionLook( QAction* actionToSetup ) +{ + actionToSetup->setText( "Place Using Template Data" ); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +bool RicPlaceThermalFractureUsingTemplateDataFeature::isCommandEnabled() +{ + return selectedThermalFracture() != nullptr; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RimWellPathFracture* RicPlaceThermalFractureUsingTemplateDataFeature::selectedThermalFracture() +{ + auto fracture = caf::SelectionManager::instance()->selectedItemOfType(); + if ( !fracture->fractureTemplate() ) return nullptr; + + RimThermalFractureTemplate* thermalTemplate = dynamic_cast( fracture->fractureTemplate() ); + if ( !thermalTemplate ) return nullptr; + + return fracture; +} diff --git a/ApplicationLibCode/Commands/FractureCommands/RicPlaceThermalFractureUsingTemplateDataFeature.h b/ApplicationLibCode/Commands/FractureCommands/RicPlaceThermalFractureUsingTemplateDataFeature.h new file mode 100644 index 0000000000..5087b2f74a --- /dev/null +++ b/ApplicationLibCode/Commands/FractureCommands/RicPlaceThermalFractureUsingTemplateDataFeature.h @@ -0,0 +1,39 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2022- Equinor ASA +// +// ResInsight is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU General Public License at +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#pragma once + +#include "cafCmdFeature.h" + +class RimWellPathFracture; + +//================================================================================================== +/// +//================================================================================================== +class RicPlaceThermalFractureUsingTemplateDataFeature : public caf::CmdFeature +{ + CAF_CMD_HEADER_INIT; + +protected: + void onActionTriggered( bool isChecked ) override; + void setupActionLook( QAction* actionToSetup ) override; + bool isCommandEnabled() override; + +private: + static RimWellPathFracture* selectedThermalFracture(); +}; diff --git a/ApplicationLibCode/ProjectDataModel/Completions/RimThermalFractureTemplate.cpp b/ApplicationLibCode/ProjectDataModel/Completions/RimThermalFractureTemplate.cpp index 9742eeb8a8..36d7df426e 100644 --- a/ApplicationLibCode/ProjectDataModel/Completions/RimThermalFractureTemplate.cpp +++ b/ApplicationLibCode/ProjectDataModel/Completions/RimThermalFractureTemplate.cpp @@ -689,3 +689,19 @@ QString RimThermalFractureTemplate::wellPathDepthAtFractureUiName() const { return "Well/Fracture Intersection Depth"; } + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::pair RimThermalFractureTemplate::computePositionAndRotation() const +{ + cvf::Vec3d centerPosition = cvf::Vec3d::UNDEFINED; + cvf::Vec3d rotation = cvf::Vec3d::UNDEFINED; + + if ( m_fractureDefinitionData ) + { + centerPosition = m_fractureDefinitionData->centerPosition(); + } + + return std::make_pair( centerPosition, rotation ); +} diff --git a/ApplicationLibCode/ProjectDataModel/Completions/RimThermalFractureTemplate.h b/ApplicationLibCode/ProjectDataModel/Completions/RimThermalFractureTemplate.h index f2d5fd46d4..f3e1f77d56 100644 --- a/ApplicationLibCode/ProjectDataModel/Completions/RimThermalFractureTemplate.h +++ b/ApplicationLibCode/ProjectDataModel/Completions/RimThermalFractureTemplate.h @@ -100,6 +100,8 @@ public: static std::pair widthParameterNameAndUnit( std::shared_ptr fractureDefinitionData ); + std::pair computePositionAndRotation() const; + protected: QString getFileSelectionFilter() const override; QStringList conductivityResultNames() const override; diff --git a/ApplicationLibCode/ProjectDataModel/RimContextCommandBuilder.cpp b/ApplicationLibCode/ProjectDataModel/RimContextCommandBuilder.cpp index 5069f5b709..416541cd28 100644 --- a/ApplicationLibCode/ProjectDataModel/RimContextCommandBuilder.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimContextCommandBuilder.cpp @@ -457,6 +457,8 @@ caf::CmdFeatureMenuBuilder RimContextCommandBuilder::commandsFromSelection() dynamic_cast( firstUiItem ) ) { menuBuilder << "RicNewWellPathFractureFeature"; + if ( dynamic_cast( firstUiItem ) ) + menuBuilder << "RicPlaceThermalFractureUsingTemplateDataFeature"; appendExportCompletions( menuBuilder ); } else if ( dynamic_cast( firstUiItem ) ) From a8b3ddc757afde1d6c894fc1720979ee966a8602 Mon Sep 17 00:00:00 2001 From: Kristian Bendiksen Date: Mon, 29 Aug 2022 08:26:00 +0200 Subject: [PATCH 105/129] Thermal Fracture: rotate and place fracture according to template data. --- ...hermalFractureUsingTemplateDataFeature.cpp | 4 + .../Completions/RimFracture.cpp | 16 +++ .../Completions/RimFracture.h | 6 +- .../RimThermalFractureTemplate.cpp | 7 +- .../RigThermalFractureResultUtil.cpp | 99 ++++++++++++++++--- .../RigThermalFractureResultUtil.h | 4 + 6 files changed, 118 insertions(+), 18 deletions(-) diff --git a/ApplicationLibCode/Commands/FractureCommands/RicPlaceThermalFractureUsingTemplateDataFeature.cpp b/ApplicationLibCode/Commands/FractureCommands/RicPlaceThermalFractureUsingTemplateDataFeature.cpp index 91c66482e2..5391516504 100644 --- a/ApplicationLibCode/Commands/FractureCommands/RicPlaceThermalFractureUsingTemplateDataFeature.cpp +++ b/ApplicationLibCode/Commands/FractureCommands/RicPlaceThermalFractureUsingTemplateDataFeature.cpp @@ -70,6 +70,10 @@ void RicPlaceThermalFractureUsingTemplateDataFeature::onActionTriggered( bool is fracture->setMeasuredDepth( md ); + fracture->setAzimuth( rotation.x() ); + fracture->setDip( rotation.y() ); + fracture->setTilt( rotation.z() ); + fracture->updateConnectedEditors(); RimProject* project = RimProject::current(); project->reloadCompletionTypeResultsInAllViews(); diff --git a/ApplicationLibCode/ProjectDataModel/Completions/RimFracture.cpp b/ApplicationLibCode/ProjectDataModel/Completions/RimFracture.cpp index b0374dc1f8..a838824055 100644 --- a/ApplicationLibCode/ProjectDataModel/Completions/RimFracture.cpp +++ b/ApplicationLibCode/ProjectDataModel/Completions/RimFracture.cpp @@ -543,6 +543,22 @@ double RimFracture::tilt() const return m_tilt(); } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimFracture::setTilt( double tilt ) +{ + m_tilt = tilt; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimFracture::setAzimuth( double azimuth ) +{ + m_azimuth = azimuth; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/Completions/RimFracture.h b/ApplicationLibCode/ProjectDataModel/Completions/RimFracture.h index 34d8585f7d..7a1b10eff1 100644 --- a/ApplicationLibCode/ProjectDataModel/Completions/RimFracture.h +++ b/ApplicationLibCode/ProjectDataModel/Completions/RimFracture.h @@ -97,7 +97,11 @@ public: cvf::Mat4d transformMatrix() const; void setDip( double dip ); double dip() const; - double tilt() const; + + void setTilt( double tilt ); + double tilt() const; + + void setAzimuth( double azimuth ); void setFractureTemplateNoUpdate( RimFractureTemplate* fractureTemplate ); void setFractureTemplate( RimFractureTemplate* fractureTemplate ); diff --git a/ApplicationLibCode/ProjectDataModel/Completions/RimThermalFractureTemplate.cpp b/ApplicationLibCode/ProjectDataModel/Completions/RimThermalFractureTemplate.cpp index 36d7df426e..dca38fe560 100644 --- a/ApplicationLibCode/ProjectDataModel/Completions/RimThermalFractureTemplate.cpp +++ b/ApplicationLibCode/ProjectDataModel/Completions/RimThermalFractureTemplate.cpp @@ -695,13 +695,12 @@ QString RimThermalFractureTemplate::wellPathDepthAtFractureUiName() const //-------------------------------------------------------------------------------------------------- std::pair RimThermalFractureTemplate::computePositionAndRotation() const { - cvf::Vec3d centerPosition = cvf::Vec3d::UNDEFINED; - cvf::Vec3d rotation = cvf::Vec3d::UNDEFINED; - if ( m_fractureDefinitionData ) { - centerPosition = m_fractureDefinitionData->centerPosition(); + return RigThermalFractureResultUtil::computePositionAndRotation( m_fractureDefinitionData, m_activeTimeStepIndex ); } + cvf::Vec3d centerPosition = cvf::Vec3d::UNDEFINED; + cvf::Vec3d rotation = cvf::Vec3d::UNDEFINED; return std::make_pair( centerPosition, rotation ); } diff --git a/ApplicationLibCode/ReservoirDataModel/RigThermalFractureResultUtil.cpp b/ApplicationLibCode/ReservoirDataModel/RigThermalFractureResultUtil.cpp index b32af79043..e39ddf42ff 100644 --- a/ApplicationLibCode/ReservoirDataModel/RigThermalFractureResultUtil.cpp +++ b/ApplicationLibCode/ReservoirDataModel/RigThermalFractureResultUtil.cpp @@ -30,10 +30,11 @@ #include "cafAssert.h" #include "cvfBoundingBox.h" +#include "cvfGeometryTools.h" #include -int numSamplesX = 60; +int numSamplesX = 100; int numSamplesY = 60; //-------------------------------------------------------------------------------------------------- @@ -365,16 +366,10 @@ std::pair, std::vector> double maxY = bb.max().y(); std::vector gridXs; - double sampleDistanceX = linearSampling( minX, maxX, numSamplesX, gridXs ); + linearSampling( minX, maxX, numSamplesX, gridXs ); std::vector gridYs; - double sampleDistanceY = linearSampling( minY, maxY, numSamplesY, gridYs ); - - RiaLogging::info( QString( "Uniform Mesh. Output size: %1x%2. Sampling Distance X = %3 Sampling Distance Y = %4" ) - .arg( numSamplesX ) - .arg( numSamplesY ) - .arg( sampleDistanceX ) - .arg( sampleDistanceY ) ); + linearSampling( minY, maxY, numSamplesY, gridYs ); return std::make_pair( gridXs, gridYs ); } @@ -481,13 +476,20 @@ std::vector std::vector relativePos = fractureDefinition->relativeCoordinates( static_cast( timeStepIndex ) ); CAF_ASSERT( relativePos.size() == fractureDefinition->numNodes() ); + for ( auto& r : relativePos ) + { + r.z() *= -1.0; + } + + cvf::Vec3d p0 = relativePos[0]; + cvf::Vec3d p1 = relativePos[1]; + cvf::Vec3d p2 = relativePos[2]; + cvf::Plane plane; - plane.setFromPoints( relativePos[0], relativePos[1], relativePos[2] ); + plane.setFromPoints( p0, p1, p2 ); cvf::Vec3d planeNormal = plane.normal().getNormalized(); - RiaLogging::info( - QString( "Plane normal: [%1 %2 %3]" ).arg( planeNormal.x() ).arg( planeNormal.y() ).arg( planeNormal.z() ) ); - auto rotMat = rotationMatrixBetweenVectors( planeNormal, cvf::Vec3d::Z_AXIS.getNormalized() ); + auto rotMat = rotationMatrixBetweenVectors( planeNormal, ( cvf::Vec3d::Z_AXIS ).getNormalized() ); for ( auto& r : relativePos ) { @@ -495,9 +497,80 @@ std::vector r.z() = 0.0; } + auto findExtrema = []( const std::vector& points ) { + double maxDistance = -1.0; + + cvf::Vec3d e1 = cvf::Vec3d::UNDEFINED; + cvf::Vec3d e2 = cvf::Vec3d::UNDEFINED; + for ( auto p1 : points ) + { + for ( auto p2 : points ) + { + double distance = p1.pointDistanceSquared( p2 ); + if ( distance > maxDistance ) + { + maxDistance = distance; + e1 = p1; + e2 = p2; + } + } + } + + return std::make_pair( e1, e2 ); + }; + + auto [e1, e2] = findExtrema( relativePos ); + cvf::Vec3d direction = e1 - e2; + auto rotMat2 = rotationMatrixBetweenVectors( direction.getNormalized(), cvf::Vec3d::X_AXIS ); + for ( auto& r : relativePos ) + { + r.transformVector( rotMat2 ); + } + return relativePos; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::pair RigThermalFractureResultUtil::computePositionAndRotation( + std::shared_ptr fractureDefinition, + size_t timeStepIndex ) +{ + std::vector relativePos = fractureDefinition->relativeCoordinates( static_cast( timeStepIndex ) ); + CAF_ASSERT( relativePos.size() == fractureDefinition->numNodes() ); + + cvf::Plane plane; + cvf::Vec3d p0 = relativePos[0]; + cvf::Vec3d p1 = relativePos[1]; + cvf::Vec3d p2 = relativePos[2]; + + p0.z() *= -1.0; + p1.z() *= -1.0; + p2.z() *= -1.0; + plane.setFromPoints( p0, p1, p2 ); + + cvf::Vec3d planeNormal = plane.normal().getNormalized(); + RiaLogging::info( + QString( "Plane normal: [%1 %2 %3]" ).arg( planeNormal.x() ).arg( planeNormal.y() ).arg( planeNormal.z() ) ); + + cvf::Plane xyPlane; + xyPlane.setFromPointAndNormal( cvf::Vec3d::ZERO, cvf::Vec3d::Z_AXIS ); + + cvf::Vec3d inPlane; + if ( !xyPlane.projectVector( planeNormal, &inPlane ) ) RiaLogging::info( "Failed to project vector" ); + + double azimuth = cvf::Math::toDegrees( cvf::GeometryTools::getAngle( inPlane, cvf::Vec3d::Y_AXIS ) ) + 90.0; + double dip = cvf::Math::toDegrees( cvf::GeometryTools::getAngle( inPlane, cvf::Vec3d::Z_AXIS ) ) - 90.0; + double tilt = cvf::Math::toDegrees( cvf::GeometryTools::getAngle( planeNormal, cvf::Vec3d::Z_AXIS ) ) - 90.0; + RiaLogging::info( QString( "Dip: %1" ).arg( dip ) ); + RiaLogging::info( QString( "Tilt: %1" ).arg( tilt ) ); + RiaLogging::info( QString( "Azimuth: %1" ).arg( azimuth ) ); + + cvf::Vec3d rotation( azimuth, dip, tilt ); + return std::make_pair( fractureDefinition->centerPosition(), rotation ); +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ReservoirDataModel/RigThermalFractureResultUtil.h b/ApplicationLibCode/ReservoirDataModel/RigThermalFractureResultUtil.h index 9e57ec3a27..05fd82f0a2 100644 --- a/ApplicationLibCode/ReservoirDataModel/RigThermalFractureResultUtil.h +++ b/ApplicationLibCode/ReservoirDataModel/RigThermalFractureResultUtil.h @@ -86,6 +86,10 @@ public: static std::pair minMaxDepth( std::shared_ptr fractureDefinition, int activeTimeStepIndex ); + static std::pair + computePositionAndRotation( std::shared_ptr fractureDefinition, + size_t timeStepIndex ); + private: static std::pair, std::vector> generateUniformMesh( const cvf::BoundingBox& bb, int numSamplesX, int numSamplesY ); From 5014d7ddf743b5715e61e0ef21a55126de684577 Mon Sep 17 00:00:00 2001 From: jonjenssen <69144954+jonjenssen@users.noreply.github.com> Date: Tue, 6 Sep 2022 07:21:24 +0200 Subject: [PATCH 106/129] Highlight the curve belonging to the legend you click on. (#9259) * Highlight the curve belonging to the legend you click on. * Make sure legend curve order remains the same when changing hilited curve --- .../Summary/RimSummaryCurveCollection.cpp | 13 +++- .../Summary/RimSummaryCurveCollection.h | 2 + .../Summary/RimSummaryPlot.cpp | 10 +++ .../ProjectDataModel/Summary/RimSummaryPlot.h | 1 + .../UserInterface/RiuMultiPlotPage.cpp | 4 ++ .../UserInterface/RiuPlotWidget.h | 3 + .../UserInterface/RiuQwtPlotLegend.cpp | 5 ++ .../UserInterface/RiuQwtPlotWidget.cpp | 64 +++++++++++++------ .../UserInterface/RiuQwtPlotWidget.h | 10 ++- 9 files changed, 87 insertions(+), 25 deletions(-) diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCurveCollection.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCurveCollection.cpp index 11177c6976..c365d41e0d 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCurveCollection.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCurveCollection.cpp @@ -502,9 +502,7 @@ void RimSummaryCurveCollection::defineEditorAttribute( const caf::PdmFieldHandle //-------------------------------------------------------------------------------------------------- void RimSummaryCurveCollection::onCurvesReordered( const SignalEmitter* emitter ) { - // detach and reattach to make sure curve legends are shown in correct order - detachPlotCurves(); - reattachPlotCurves(); + refreshCurveOrdering(); curvesChanged.send(); } @@ -543,3 +541,12 @@ void RimSummaryCurveCollection::defineObjectEditorAttribute( QString uiConfigNam myAttr->currentObject = m_currentSummaryCurve.p(); } } + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimSummaryCurveCollection::refreshCurveOrdering() +{ + detachPlotCurves(); + reattachPlotCurves(); +} diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCurveCollection.h b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCurveCollection.h index 952ecbf9fc..a8a133c4a0 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCurveCollection.h +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCurveCollection.h @@ -61,6 +61,8 @@ public: void loadDataAndUpdate( bool updateParentPlot ); + void refreshCurveOrdering(); + private: void setParentPlotAndReplot( RiuPlotWidget* plot ); void setParentPlotNoReplot( RiuPlotWidget* plot ); diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlot.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlot.cpp index a8d00846f6..035af09d97 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlot.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlot.cpp @@ -2456,6 +2456,8 @@ RiuPlotWidget* RimSummaryPlot::doCreatePlotViewWidget( QWidget* mainWindowParent m_summaryPlot = std::make_unique( this, mainWindowParent ); #endif + QObject::connect( plotWidget(), SIGNAL( curveOrderNeedsUpdate() ), this, SLOT( updateCurveOrder() ) ); + for ( const auto& axisProperties : m_axisProperties ) { plotWidget()->ensureAxisIsCreated( axisProperties->plotAxisType() ); @@ -3015,3 +3017,11 @@ RimSummaryPlotSourceStepping* RimSummaryPlot::sourceStepper() { return m_sourceStepping(); } + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimSummaryPlot::updateCurveOrder() +{ + m_summaryCurveCollection->refreshCurveOrdering(); +} diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlot.h b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlot.h index 14086b57cd..44a23813e3 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlot.h +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlot.h @@ -252,6 +252,7 @@ protected: private slots: void onPlotZoomed(); + void updateCurveOrder(); private: std::vector visibleSummaryCurvesForAxis( RiuPlotAxis plotAxis ) const; diff --git a/ApplicationLibCode/UserInterface/RiuMultiPlotPage.cpp b/ApplicationLibCode/UserInterface/RiuMultiPlotPage.cpp index 23f8b82719..ebc5f2e758 100644 --- a/ApplicationLibCode/UserInterface/RiuMultiPlotPage.cpp +++ b/ApplicationLibCode/UserInterface/RiuMultiPlotPage.cpp @@ -189,11 +189,15 @@ void RiuMultiPlotPage::insertPlot( RiuPlotWidget* plotWidget, size_t index ) legend->setMaxColumns( legendColumns ); legend->horizontalScrollBar()->setVisible( false ); legend->verticalScrollBar()->setVisible( false ); + legend->setDefaultItemMode( QwtLegendData::Clickable ); if ( qwtPlotWidget ) { legend->connect( qwtPlotWidget->qwtPlot(), SIGNAL( legendDataChanged( const QVariant&, const QList& ) ), SLOT( updateLegend( const QVariant&, const QList& ) ) ); + qwtPlotWidget->connect( legend, + SIGNAL( clicked( const QVariant&, int ) ), + SLOT( onLegendClicked( const QVariant&, int ) ) ); } else { diff --git a/ApplicationLibCode/UserInterface/RiuPlotWidget.h b/ApplicationLibCode/UserInterface/RiuPlotWidget.h index 5067885226..ef4a0209ee 100644 --- a/ApplicationLibCode/UserInterface/RiuPlotWidget.h +++ b/ApplicationLibCode/UserInterface/RiuPlotWidget.h @@ -188,6 +188,9 @@ public: virtual void updateZoomDependentCurveProperties(); +signals: + void curveOrderNeedsUpdate(); + protected: void updateOverlayFrameLayout(); diff --git a/ApplicationLibCode/UserInterface/RiuQwtPlotLegend.cpp b/ApplicationLibCode/UserInterface/RiuQwtPlotLegend.cpp index c98fd6caf9..ec518927cb 100644 --- a/ApplicationLibCode/UserInterface/RiuQwtPlotLegend.cpp +++ b/ApplicationLibCode/UserInterface/RiuQwtPlotLegend.cpp @@ -17,11 +17,16 @@ ///////////////////////////////////////////////////////////////////////////////// #include "RiuQwtPlotLegend.h" +#include "RiuQwtPlotWidget.h" + #include "qwt_dyngrid_layout.h" #include "qwt_legend_label.h" +#include "qwt_plot.h" +#include "qwt_plot_item.h" #include #include +#include #include diff --git a/ApplicationLibCode/UserInterface/RiuQwtPlotWidget.cpp b/ApplicationLibCode/UserInterface/RiuQwtPlotWidget.cpp index 051d5bcd3d..0d4cd136fc 100644 --- a/ApplicationLibCode/UserInterface/RiuQwtPlotWidget.cpp +++ b/ApplicationLibCode/UserInterface/RiuQwtPlotWidget.cpp @@ -616,17 +616,6 @@ bool RiuQwtPlotWidget::eventFilter( QObject* watched, QEvent* event ) void RiuQwtPlotWidget::hideEvent( QHideEvent* event ) { resetPlotItemHighlighting(); - // TODO: remove? - // m_plot->hideEvent( event ); -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RiuQwtPlotWidget::showEvent( QShowEvent* event ) -{ - // TODO: remove? - // m_plot->showEvent( event ); } //-------------------------------------------------------------------------------------------------- @@ -634,8 +623,6 @@ void RiuQwtPlotWidget::showEvent( QShowEvent* event ) //-------------------------------------------------------------------------------------------------- void RiuQwtPlotWidget::resizeEvent( QResizeEvent* event ) { - // TODO: remove??? - // QwtPlot::resizeEvent( event ); updateOverlayFrameLayout(); event->accept(); } @@ -936,10 +923,10 @@ void RiuQwtPlotWidget::selectClosestPlotItem( const QPoint& pos, bool toggleItem findClosestPlotItem( pos, &closestItem, &closestCurvePoint, &distanceFromClick ); RiuPlotMainWindowTools::showPlotMainWindow(); - resetPlotItemHighlighting(); if ( closestItem && distanceFromClick < 20 ) { - // TODO: highlight all selected curves + bool refreshCurveOrder = false; + resetPlotItemHighlighting( refreshCurveOrder ); std::set plotItems = { closestItem }; highlightPlotItems( plotItems ); auto plotItem = std::make_shared( closestItem ); @@ -947,6 +934,7 @@ void RiuQwtPlotWidget::selectClosestPlotItem( const QPoint& pos, bool toggleItem } else { + resetPlotItemHighlighting(); emit plotSelected( toggleItemInSelection ); } @@ -1015,13 +1003,13 @@ void RiuQwtPlotWidget::highlightPlotItems( const std::set& c m_originalCurveProperties.insert( std::make_pair( plotCurve, properties ) ); m_originalZValues.insert( std::make_pair( plotCurve, zValue ) ); + restoreCurveOrder(); + return; } } } - // NB! Create a copy of the item list before the loop to avoid invalidated iterators when iterating the list - // plotCurve->setZ() causes the ordering of items in the list to change auto plotItemList = m_plot->itemList(); for ( QwtPlotItem* plotItem : plotItemList ) { @@ -1081,15 +1069,15 @@ void RiuQwtPlotWidget::highlightPlotItems( const std::set& c plotShapeItem->setZ( plotShapeItem->z() + 100.0 ); } } + + restoreCurveOrder(); } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RiuQwtPlotWidget::resetPlotItemHighlighting() +void RiuQwtPlotWidget::resetPlotItemHighlighting( bool refreshCurveOrder ) { - // NB! Create a copy of the item list before the loop to avoid invalidated iterators when iterating the list - // plotCurve->setZ() causes the ordering of items in the list to change auto plotItemList = m_plot->itemList(); for ( QwtPlotItem* plotItem : plotItemList ) { @@ -1129,6 +1117,8 @@ void RiuQwtPlotWidget::resetPlotItemHighlighting() m_originalZValues.clear(); resetPlotAxisHighlighting(); + + if ( refreshCurveOrder ) restoreCurveOrder(); } //-------------------------------------------------------------------------------------------------- @@ -1519,3 +1509,37 @@ QwtAxisId RiuQwtPlotWidget::toQwtPlotAxis( RiuPlotAxis plotAxis ) const return { -1, -1 }; } + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RiuQwtPlotWidget::highlightPlotItem( const QwtPlotItem* plotItem ) +{ + bool refreshCurveOrder = false; + resetPlotItemHighlighting( refreshCurveOrder ); + + std::set items; + items.insert( plotItem ); + highlightPlotItems( items ); + + replot(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RiuQwtPlotWidget::onLegendClicked( const QVariant& itemInfo, int index ) +{ + if ( !itemInfo.canConvert() ) return; + + QwtPlotItem* plotItem = qvariant_cast( itemInfo ); + if ( plotItem ) highlightPlotItem( plotItem ); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RiuQwtPlotWidget::restoreCurveOrder() +{ + emit curveOrderNeedsUpdate(); +} diff --git a/ApplicationLibCode/UserInterface/RiuQwtPlotWidget.h b/ApplicationLibCode/UserInterface/RiuQwtPlotWidget.h index 75f85ddbdf..4bcb928c29 100644 --- a/ApplicationLibCode/UserInterface/RiuQwtPlotWidget.h +++ b/ApplicationLibCode/UserInterface/RiuQwtPlotWidget.h @@ -174,6 +174,11 @@ public: QwtAxisId toQwtPlotAxis( RiuPlotAxis axis ) const; + void highlightPlotItem( const QwtPlotItem* plotItem ); + +public slots: + void onLegendClicked( const QVariant& itemInfo, int index ); + signals: void plotSelected( bool toggleSelection ); void axisSelected( RiuPlotAxis axisId, bool toggleSelection ); @@ -185,7 +190,6 @@ signals: protected: bool eventFilter( QObject* watched, QEvent* event ) override; void hideEvent( QHideEvent* event ) override; - void showEvent( QShowEvent* event ) override; void resizeEvent( QResizeEvent* event ) override; void keyPressEvent( QKeyEvent* event ) override; @@ -211,13 +215,15 @@ private: void highlightPlotAxes( QwtAxisId axisIdX, QwtAxisId axisIdY ); void highlightPlotItemsForQwtAxis( QwtAxisId axisId ); void highlightPlotItems( const std::set& closestItems ); - void resetPlotItemHighlighting(); + void resetPlotItemHighlighting( bool refreshCurveOrder = true ); void resetPlotAxisHighlighting(); void onAxisSelected( QwtScaleWidget* scale, bool toggleItemInSelection ); void recalculateAxisExtents( RiuPlotAxis axis ); static int highlightItemWidthAdjustment(); + void restoreCurveOrder(); + private: struct CurveProperties { From e1dda4c6b348c794c55e021a635362bc3e33b999 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Tue, 6 Sep 2022 15:29:10 +0200 Subject: [PATCH 107/129] Adjustments for RC2 * Add dependency to Svg * Renaming * Remove special handling of bright colored curves For some ensemble cases, the curve highlight does not work well. A prototype for ensemble curve highlight was introduced, but this was not working for a collection of standalone summary curves. * Set version to RC_02 --- .../Summary/RimSummaryCurveCollection.cpp | 4 +- .../Summary/RimSummaryCurveCollection.h | 2 +- .../Summary/RimSummaryPlot.cpp | 6 +- .../ProjectDataModel/Summary/RimSummaryPlot.h | 2 +- .../UserInterface/RiuQwtPlotWidget.cpp | 59 ++----------------- .../UserInterface/RiuQwtPlotWidget.h | 4 +- .../cafUserInterface_UnitTests/CMakeLists.txt | 4 +- ResInsightVersion.cmake | 2 +- 8 files changed, 18 insertions(+), 65 deletions(-) diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCurveCollection.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCurveCollection.cpp index c365d41e0d..6fb2df98c9 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCurveCollection.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCurveCollection.cpp @@ -502,7 +502,7 @@ void RimSummaryCurveCollection::defineEditorAttribute( const caf::PdmFieldHandle //-------------------------------------------------------------------------------------------------- void RimSummaryCurveCollection::onCurvesReordered( const SignalEmitter* emitter ) { - refreshCurveOrdering(); + updateCurveOrder(); curvesChanged.send(); } @@ -545,7 +545,7 @@ void RimSummaryCurveCollection::defineObjectEditorAttribute( QString uiConfigNam //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RimSummaryCurveCollection::refreshCurveOrdering() +void RimSummaryCurveCollection::updateCurveOrder() { detachPlotCurves(); reattachPlotCurves(); diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCurveCollection.h b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCurveCollection.h index a8a133c4a0..29fa373d28 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCurveCollection.h +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCurveCollection.h @@ -61,7 +61,7 @@ public: void loadDataAndUpdate( bool updateParentPlot ); - void refreshCurveOrdering(); + void updateCurveOrder(); private: void setParentPlotAndReplot( RiuPlotWidget* plot ); diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlot.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlot.cpp index 035af09d97..41f405c1e2 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlot.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlot.cpp @@ -2456,7 +2456,7 @@ RiuPlotWidget* RimSummaryPlot::doCreatePlotViewWidget( QWidget* mainWindowParent m_summaryPlot = std::make_unique( this, mainWindowParent ); #endif - QObject::connect( plotWidget(), SIGNAL( curveOrderNeedsUpdate() ), this, SLOT( updateCurveOrder() ) ); + QObject::connect( plotWidget(), SIGNAL( curveOrderNeedsUpdate() ), this, SLOT( onUpdateCurveOrder() ) ); for ( const auto& axisProperties : m_axisProperties ) { @@ -3021,7 +3021,7 @@ RimSummaryPlotSourceStepping* RimSummaryPlot::sourceStepper() //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RimSummaryPlot::updateCurveOrder() +void RimSummaryPlot::onUpdateCurveOrder() { - m_summaryCurveCollection->refreshCurveOrdering(); + m_summaryCurveCollection->updateCurveOrder(); } diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlot.h b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlot.h index 44a23813e3..31507c497f 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlot.h +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlot.h @@ -252,7 +252,7 @@ protected: private slots: void onPlotZoomed(); - void updateCurveOrder(); + void onUpdateCurveOrder(); private: std::vector visibleSummaryCurvesForAxis( RiuPlotAxis plotAxis ) const; diff --git a/ApplicationLibCode/UserInterface/RiuQwtPlotWidget.cpp b/ApplicationLibCode/UserInterface/RiuQwtPlotWidget.cpp index 0d4cd136fc..5f933c03e0 100644 --- a/ApplicationLibCode/UserInterface/RiuQwtPlotWidget.cpp +++ b/ApplicationLibCode/UserInterface/RiuQwtPlotWidget.cpp @@ -925,8 +925,8 @@ void RiuQwtPlotWidget::selectClosestPlotItem( const QPoint& pos, bool toggleItem RiuPlotMainWindowTools::showPlotMainWindow(); if ( closestItem && distanceFromClick < 20 ) { - bool refreshCurveOrder = false; - resetPlotItemHighlighting( refreshCurveOrder ); + bool updateCurveOrder = false; + resetPlotItemHighlighting( updateCurveOrder ); std::set plotItems = { closestItem }; highlightPlotItems( plotItems ); auto plotItem = std::make_shared( closestItem ); @@ -963,53 +963,6 @@ void RiuQwtPlotWidget::replot() //-------------------------------------------------------------------------------------------------- void RiuQwtPlotWidget::highlightPlotItems( const std::set& closestItems ) { - if ( closestItems.size() == 1 ) - { - auto* constPlotCurve = dynamic_cast( *closestItems.begin() ); - auto* plotCurve = const_cast( constPlotCurve ); - - if ( plotCurve ) - { - auto curveColor = plotCurve->pen().color(); - if ( RiaColorTools::isBrightnessAboveThreshold( RiaColorTools::fromQColorTo3f( curveColor ) ) ) - { - // The brightness of selected curve is above threshold. Modify the saturation, and leave the other - // curves unchanged - - QColor symbolColor; - QColor symbolLineColor; - auto* symbol = const_cast( plotCurve->symbol() ); - if ( symbol ) - { - symbolColor = symbol->brush().color(); - symbolLineColor = symbol->pen().color(); - } - - double zValue = plotCurve->z(); - plotCurve->setZ( zValue + 100.0 ); - highlightPlotAxes( plotCurve->xAxis(), plotCurve->yAxis() ); - - auto hightlightColor = curveColor; - qreal h, s, v; - hightlightColor.getHsvF( &h, &s, &v ); - hightlightColor.setHsvF( h, 0.95, v ); - - auto curveWidth = plotCurve->pen().width(); - plotCurve->setPen( hightlightColor, - plotCurve->pen().width() + highlightItemWidthAdjustment(), - plotCurve->pen().style() ); - - CurveProperties properties = { curveColor, symbolColor, symbolLineColor, curveWidth }; - m_originalCurveProperties.insert( std::make_pair( plotCurve, properties ) ); - m_originalZValues.insert( std::make_pair( plotCurve, zValue ) ); - - restoreCurveOrder(); - - return; - } - } - } - auto plotItemList = m_plot->itemList(); for ( QwtPlotItem* plotItem : plotItemList ) { @@ -1070,13 +1023,13 @@ void RiuQwtPlotWidget::highlightPlotItems( const std::set& c } } - restoreCurveOrder(); + updateCurveOrder(); } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RiuQwtPlotWidget::resetPlotItemHighlighting( bool refreshCurveOrder ) +void RiuQwtPlotWidget::resetPlotItemHighlighting( bool doUpdateCurveOrder ) { auto plotItemList = m_plot->itemList(); for ( QwtPlotItem* plotItem : plotItemList ) @@ -1118,7 +1071,7 @@ void RiuQwtPlotWidget::resetPlotItemHighlighting( bool refreshCurveOrder ) resetPlotAxisHighlighting(); - if ( refreshCurveOrder ) restoreCurveOrder(); + if ( doUpdateCurveOrder ) updateCurveOrder(); } //-------------------------------------------------------------------------------------------------- @@ -1539,7 +1492,7 @@ void RiuQwtPlotWidget::onLegendClicked( const QVariant& itemInfo, int index ) //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RiuQwtPlotWidget::restoreCurveOrder() +void RiuQwtPlotWidget::updateCurveOrder() { emit curveOrderNeedsUpdate(); } diff --git a/ApplicationLibCode/UserInterface/RiuQwtPlotWidget.h b/ApplicationLibCode/UserInterface/RiuQwtPlotWidget.h index 4bcb928c29..aec51a3dd3 100644 --- a/ApplicationLibCode/UserInterface/RiuQwtPlotWidget.h +++ b/ApplicationLibCode/UserInterface/RiuQwtPlotWidget.h @@ -215,14 +215,14 @@ private: void highlightPlotAxes( QwtAxisId axisIdX, QwtAxisId axisIdY ); void highlightPlotItemsForQwtAxis( QwtAxisId axisId ); void highlightPlotItems( const std::set& closestItems ); - void resetPlotItemHighlighting( bool refreshCurveOrder = true ); + void resetPlotItemHighlighting( bool doUpdateCurveOrder = true ); void resetPlotAxisHighlighting(); void onAxisSelected( QwtScaleWidget* scale, bool toggleItemInSelection ); void recalculateAxisExtents( RiuPlotAxis axis ); static int highlightItemWidthAdjustment(); - void restoreCurveOrder(); + void updateCurveOrder(); private: struct CurveProperties diff --git a/Fwk/AppFwk/cafUserInterface/cafUserInterface_UnitTests/CMakeLists.txt b/Fwk/AppFwk/cafUserInterface/cafUserInterface_UnitTests/CMakeLists.txt index d66d8b99aa..8618b25be2 100644 --- a/Fwk/AppFwk/cafUserInterface/cafUserInterface_UnitTests/CMakeLists.txt +++ b/Fwk/AppFwk/cafUserInterface/cafUserInterface_UnitTests/CMakeLists.txt @@ -5,9 +5,9 @@ project(cafUserInterface_UnitTests) find_package( Qt5 COMPONENTS - REQUIRED Core Gui Widgets + REQUIRED Core Gui Widgets Svg ) -set(QT_LIBRARIES Qt5::Core Qt5::Gui Qt5::Widgets Qt5::OpenGL) +set(QT_LIBRARIES Qt5::Core Qt5::Gui Qt5::Widgets Qt5::OpenGL Qt5::Svg) include_directories(${CMAKE_CURRENT_SOURCE_DIR}) diff --git a/ResInsightVersion.cmake b/ResInsightVersion.cmake index 5a3f6fdb33..6882453f29 100644 --- a/ResInsightVersion.cmake +++ b/ResInsightVersion.cmake @@ -5,7 +5,7 @@ set(RESINSIGHT_PATCH_VERSION 1) # Opional text with no restrictions #set(RESINSIGHT_VERSION_TEXT "-dev") -set(RESINSIGHT_VERSION_TEXT "-RC_01") +set(RESINSIGHT_VERSION_TEXT "-RC_02") # Optional text # Must be unique and increasing within one combination of major/minor/patch version From 129c4a0e3408dde4a12a8849944589d362bf747f Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Mon, 29 Aug 2022 15:15:32 +0200 Subject: [PATCH 108/129] Unit test to export xyz coordinates for N timesteps for a thermal fracture --- .../RifThermalFractureReader-Test.cpp | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/ApplicationLibCode/UnitTests/RifThermalFractureReader-Test.cpp b/ApplicationLibCode/UnitTests/RifThermalFractureReader-Test.cpp index a3a4e02226..193fa7fa38 100644 --- a/ApplicationLibCode/UnitTests/RifThermalFractureReader-Test.cpp +++ b/ApplicationLibCode/UnitTests/RifThermalFractureReader-Test.cpp @@ -5,6 +5,9 @@ #include "RifThermalFractureReader.h" #include "RigThermalFractureDefinition.h" +#include +#include + static const QString CASE_REAL_TEST_DATA_DIRECTORY_03 = QString( "%1/RifThermalFractureReader/" ).arg( TEST_DATA_DIR ); //-------------------------------------------------------------------------------------------------- @@ -105,3 +108,50 @@ TEST( RifThermalFractureReaderTest, LoadFileNonExistingFiles ) EXPECT_FALSE( errorMessage.isEmpty() ); EXPECT_FALSE( fractureData.get() ); } + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +TEST( DISABLED_RifThermalFractureReaderTest, CreateXyzPointCloud ) +{ + QString fileName = CASE_REAL_TEST_DATA_DIRECTORY_03 + "fracture_OS_metric_units_final.csv"; + + auto [fractureData, errorMessage] = RifThermalFractureReader::readFractureCsvFile( fileName ); + + auto numNodes = fractureData->numNodes(); + auto numTimeSteps = fractureData->numTimeSteps(); + auto properties = fractureData->getPropertyNamesUnits(); + + for ( size_t timeStepIndex = 0; timeStepIndex < numTimeSteps; timeStepIndex++ ) + { + QString exportfileName = QString( CASE_REAL_TEST_DATA_DIRECTORY_03 + "msjtest-%1.xyz" ).arg( timeStepIndex ); + + std::vector xs; + std::vector ys; + std::vector zs; + + for ( int nodeIndex = 0; nodeIndex < static_cast( numNodes ); nodeIndex++ ) + { + xs.push_back( + fractureData->getPropertyValue( 0, static_cast( nodeIndex ), static_cast( timeStepIndex ) ) ); + ys.push_back( + fractureData->getPropertyValue( 1, static_cast( nodeIndex ), static_cast( timeStepIndex ) ) ); + zs.push_back( + fractureData->getPropertyValue( 2, static_cast( nodeIndex ), static_cast( timeStepIndex ) ) ); + } + + QFile file( exportfileName ); + if ( file.open( QIODevice::WriteOnly | QIODevice::Text ) ) + { + QTextStream out( &file ); + + out.setRealNumberPrecision( 16 ); + + for ( size_t i = 0; i < xs.size(); i++ ) + { + out << xs[i] << " " << ys[i] << " " << zs[i] << "\n"; + } + } + file.close(); + } +} From a8fbb4f70e9c9f9ef57f81f9176709ee19e7c36b Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Thu, 8 Sep 2022 16:14:05 +0200 Subject: [PATCH 109/129] Fix missing update of export well name --- .../Application/Tools/RiaWellNameComparer.cpp | 12 ++++++++++++ .../Application/Tools/RiaWellNameComparer.h | 2 ++ .../RicPasteModeledWellPathFeature.cpp | 2 +- .../Completions/RimWellPathCompletionSettings.cpp | 13 ++++++++----- .../ProjectDataModel/WellPath/RimWellPathGroup.cpp | 5 ++--- 5 files changed, 25 insertions(+), 9 deletions(-) diff --git a/ApplicationLibCode/Application/Tools/RiaWellNameComparer.cpp b/ApplicationLibCode/Application/Tools/RiaWellNameComparer.cpp index 82270e82c5..b2fcd9849b 100644 --- a/ApplicationLibCode/Application/Tools/RiaWellNameComparer.cpp +++ b/ApplicationLibCode/Application/Tools/RiaWellNameComparer.cpp @@ -102,6 +102,18 @@ void RiaWellNameComparer::clearCache() sm_matchedName.clear(); } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QString RiaWellNameComparer::removeSpacesFromName( const QString& wellName ) +{ + // Eclipse do not support spaces in names in text files. Use this function whenever a string is used in export to + // text files for Eclipse + + QString tmp = wellName; + return tmp.remove( ' ' ); +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/Application/Tools/RiaWellNameComparer.h b/ApplicationLibCode/Application/Tools/RiaWellNameComparer.h index 0a3c2a85d5..141851a6d7 100644 --- a/ApplicationLibCode/Application/Tools/RiaWellNameComparer.h +++ b/ApplicationLibCode/Application/Tools/RiaWellNameComparer.h @@ -38,6 +38,8 @@ public: static void clearCache(); + static QString removeSpacesFromName( const QString& wellName ); + private: static QString tryMatchName( QString searchName, const std::vector& nameList, diff --git a/ApplicationLibCode/Commands/WellPathCommands/RicPasteModeledWellPathFeature.cpp b/ApplicationLibCode/Commands/WellPathCommands/RicPasteModeledWellPathFeature.cpp index 5dd78516c3..f66177898f 100644 --- a/ApplicationLibCode/Commands/WellPathCommands/RicPasteModeledWellPathFeature.cpp +++ b/ApplicationLibCode/Commands/WellPathCommands/RicPasteModeledWellPathFeature.cpp @@ -152,7 +152,7 @@ RimModeledWellPath* RicPasteModeledWellPathFeature::duplicateAndInitializeWellPa auto* destinationWellPath = dynamic_cast( sourceWellPath->xmlCapability()->copyByXmlSerialization( caf::PdmDefaultObjectFactory::instance() ) ); - QString name = sourceWellPath->name() + " (copy)"; + QString name = sourceWellPath->name() + "(copy)"; destinationWellPath->setName( name ); wpc->addWellPath( destinationWellPath, false ); diff --git a/ApplicationLibCode/ProjectDataModel/Completions/RimWellPathCompletionSettings.cpp b/ApplicationLibCode/ProjectDataModel/Completions/RimWellPathCompletionSettings.cpp index ce1fc8fdca..5c9b0148cb 100644 --- a/ApplicationLibCode/ProjectDataModel/Completions/RimWellPathCompletionSettings.cpp +++ b/ApplicationLibCode/ProjectDataModel/Completions/RimWellPathCompletionSettings.cpp @@ -18,9 +18,11 @@ #include "RimWellPathCompletionSettings.h" #include "RiaStdStringTools.h" -#include "RimMswCompletionParameters.h" +#include "RiaWellNameComparer.h" +#include "RimMswCompletionParameters.h" #include "RimWellPath.h" + #include "cafPdmDoubleStringValidator.h" #include "cafPdmUiLineEditor.h" #include "cafPdmUiOrdering.h" @@ -131,8 +133,7 @@ RimWellPathCompletionSettings& RimWellPathCompletionSettings::operator=( const R //-------------------------------------------------------------------------------------------------- void RimWellPathCompletionSettings::setWellNameForExport( const QString& name ) { - auto n = name; - m_wellNameForExport = n.remove( ' ' ); + m_wellNameForExport = RiaWellNameComparer::removeSpacesFromName( name ); } //-------------------------------------------------------------------------------------------------- @@ -141,9 +142,11 @@ void RimWellPathCompletionSettings::setWellNameForExport( const QString& name ) void RimWellPathCompletionSettings::updateWellPathNameHasChanged( const QString& newWellPathName, const QString& previousWellPathName ) { - if ( m_wellNameForExport().isEmpty() || m_wellNameForExport == previousWellPathName ) + auto previousWellNameWithoutSpaces = RiaWellNameComparer::removeSpacesFromName( previousWellPathName ); + + if ( m_wellNameForExport().isEmpty() || m_wellNameForExport == previousWellNameWithoutSpaces ) { - m_wellNameForExport = newWellPathName; + setWellNameForExport( newWellPathName ); } } diff --git a/ApplicationLibCode/ProjectDataModel/WellPath/RimWellPathGroup.cpp b/ApplicationLibCode/ProjectDataModel/WellPath/RimWellPathGroup.cpp index 3bdc04eab8..3c8e971052 100644 --- a/ApplicationLibCode/ProjectDataModel/WellPath/RimWellPathGroup.cpp +++ b/ApplicationLibCode/ProjectDataModel/WellPath/RimWellPathGroup.cpp @@ -18,6 +18,7 @@ #include "RimWellPathGroup.h" #include "RiaTextStringTools.h" +#include "RiaWellNameComparer.h" #include "RigWellPath.h" #include "RimModeledWellPath.h" @@ -326,9 +327,7 @@ QString RimWellPathGroup::createGroupName() const } fullName += trimmedCommonSuffix; - QString nameWithoutSpaces = fullName; - nameWithoutSpaces.remove( ' ' ); - + QString nameWithoutSpaces = RiaWellNameComparer::removeSpacesFromName( fullName ); if ( nameWithoutSpaces.length() > 8 ) fullName = trimmedCommonRoot + trimmedCommonSuffix; if ( fullName.isEmpty() ) fullName = "Well 1"; From b0a959c591ee5724bdccde10048a501476495471 Mon Sep 17 00:00:00 2001 From: Kristian Bendiksen Date: Fri, 9 Sep 2022 13:57:47 +0200 Subject: [PATCH 110/129] #9280 Fix missing horizontal error bars * #9280 Fix missing horizontal error bars. The x axis was not assigned properly for the error bars in the plot curve. * Propagate error bar visibility state --- .../ProjectDataModel/Flow/RimWellRftPlot.cpp | 1 + ApplicationLibCode/UserInterface/RiuQwtPlotCurve.cpp | 7 ++++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/ApplicationLibCode/ProjectDataModel/Flow/RimWellRftPlot.cpp b/ApplicationLibCode/ProjectDataModel/Flow/RimWellRftPlot.cpp index fceb6b76cb..34b2c43dac 100644 --- a/ApplicationLibCode/ProjectDataModel/Flow/RimWellRftPlot.cpp +++ b/ApplicationLibCode/ProjectDataModel/Flow/RimWellRftPlot.cpp @@ -513,6 +513,7 @@ void RimWellRftPlot::updateCurvesInPlot( const std::setsetErrorBarsVisible( m_showErrorInObservedData ); plotTrack->addCurve( curve ); auto observedFmuRftData = curveDefToAdd.address().observedFmuRftData(); diff --git a/ApplicationLibCode/UserInterface/RiuQwtPlotCurve.cpp b/ApplicationLibCode/UserInterface/RiuQwtPlotCurve.cpp index 6f1e70382e..a11389de8b 100644 --- a/ApplicationLibCode/UserInterface/RiuQwtPlotCurve.cpp +++ b/ApplicationLibCode/UserInterface/RiuQwtPlotCurve.cpp @@ -492,7 +492,12 @@ void RiuQwtPlotCurve::setSamplesFromXYErrorValues( const std::vector& //-------------------------------------------------------------------------------------------------- void RiuQwtPlotCurve::setXAxis( RiuPlotAxis axis ) { - if ( m_plotWidget ) QwtPlotCurve::setXAxis( m_plotWidget->toQwtPlotAxis( axis ) ); + if ( m_plotWidget ) + { + auto axisId = m_plotWidget->toQwtPlotAxis( axis ); + QwtPlotCurve::setXAxis( axisId ); + if ( m_qwtCurveErrorBars ) m_qwtCurveErrorBars->setXAxis( axisId ); + } } //-------------------------------------------------------------------------------------------------- From 437f26698dab653dd38ff69a850567dfcd8cccee Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Fri, 9 Sep 2022 13:58:28 +0200 Subject: [PATCH 111/129] Issues related to user course * #9277 Observed Data : Assign case ID when importing observed data If no case ID is assigned, the first observed case is always used when creating new plots of observed data * #9278 Match on summary vector name when curve unit text is missing --- .../RimObservedDataCollection.cpp | 3 ++ .../Summary/RimSummaryPlot.cpp | 51 +++++++++++++++---- 2 files changed, 44 insertions(+), 10 deletions(-) diff --git a/ApplicationLibCode/ProjectDataModel/RimObservedDataCollection.cpp b/ApplicationLibCode/ProjectDataModel/RimObservedDataCollection.cpp index 837e4d916a..2839a6523f 100644 --- a/ApplicationLibCode/ProjectDataModel/RimObservedDataCollection.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimObservedDataCollection.cpp @@ -29,6 +29,7 @@ #include "RimObservedEclipseUserData.h" #include "RimObservedFmuRftData.h" #include "RimObservedSummaryData.h" +#include "RimProject.h" #include "RimSummaryObservedDataFile.h" #include "RiuPlotMainWindow.h" @@ -154,6 +155,7 @@ RimObservedSummaryData* errorText->append( observedData->errorMessagesFromReader() ); } + RimProject::current()->assignCaseIdToSummaryCase( observedData ); updateNewObservedDataCreated( observedData ); this->updateConnectedEditors(); @@ -221,6 +223,7 @@ RimObservedSummaryData* return nullptr; } + RimProject::current()->assignCaseIdToSummaryCase( observedData ); updateNewObservedDataCreated( observedData ); this->updateConnectedEditors(); diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlot.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlot.cpp index 41f405c1e2..d15472414d 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlot.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlot.cpp @@ -2884,16 +2884,45 @@ void RimSummaryPlot::assignPlotAxis( RimSummaryCurve* destinationCurve ) ALL_TO_LEFT, ALL_TO_RIGHT, ALTERNATING, - USE_MATCHING_UNIT + USE_MATCHING_UNIT, + USE_MATCHING_VECTOR }; - RiaDefines::PlotAxis plotAxis = RiaDefines::PlotAxis::PLOT_AXIS_LEFT; - auto strategy = AxisAssignmentStrategy::USE_MATCHING_UNIT; - if ( strategy == AxisAssignmentStrategy::USE_MATCHING_UNIT ) - { - auto destinationUnit = destinationCurve->unitNameY(); + auto destinationUnit = destinationCurve->unitNameY(); + if ( destinationUnit.empty() ) strategy = AxisAssignmentStrategy::USE_MATCHING_VECTOR; + + auto anyCurveWithUnitText = [this, destinationCurve] { + for ( auto c : summaryCurves() ) + { + if ( c == destinationCurve ) continue; + + if ( !c->unitNameY().empty() ) return true; + } + + return false; + }; + + if ( !anyCurveWithUnitText() ) strategy = AxisAssignmentStrategy::USE_MATCHING_VECTOR; + + if ( strategy == AxisAssignmentStrategy::USE_MATCHING_VECTOR ) + { + // Special handling if curve unit is matching. Try to match on summary vector name to avoid creation of new axis + + for ( auto c : summaryCurves() ) + { + if ( c == destinationCurve ) continue; + + if ( c->summaryAddressY().vectorName() == destinationCurve->summaryAddressY().vectorName() ) + { + destinationCurve->setLeftOrRightAxisY( c->axisY() ); + return; + } + } + } + else if ( strategy == AxisAssignmentStrategy::USE_MATCHING_UNIT ) + { bool isLeftUsed = false; bool isRightUsed = false; @@ -2936,6 +2965,8 @@ void RimSummaryPlot::assignPlotAxis( RimSummaryCurve* destinationCurve ) strategy = AxisAssignmentStrategy::ALTERNATING; } + RiaDefines::PlotAxis plotAxisType = RiaDefines::PlotAxis::PLOT_AXIS_LEFT; + if ( strategy == AxisAssignmentStrategy::ALTERNATING ) { size_t axisCountLeft = 0; @@ -2948,15 +2979,15 @@ void RimSummaryPlot::assignPlotAxis( RimSummaryCurve* destinationCurve ) axisCountRight++; } - if ( axisCountLeft > axisCountRight ) plotAxis = RiaDefines::PlotAxis::PLOT_AXIS_RIGHT; + if ( axisCountLeft > axisCountRight ) plotAxisType = RiaDefines::PlotAxis::PLOT_AXIS_RIGHT; } else if ( strategy == AxisAssignmentStrategy::ALL_TO_LEFT ) { - plotAxis = RiaDefines::PlotAxis::PLOT_AXIS_LEFT; + plotAxisType = RiaDefines::PlotAxis::PLOT_AXIS_LEFT; } else if ( strategy == AxisAssignmentStrategy::ALL_TO_RIGHT ) { - plotAxis = RiaDefines::PlotAxis::PLOT_AXIS_RIGHT; + plotAxisType = RiaDefines::PlotAxis::PLOT_AXIS_RIGHT; } RiuPlotAxis newPlotAxis = RiuPlotAxis::defaultLeft(); @@ -2966,7 +2997,7 @@ void RimSummaryPlot::assignPlotAxis( RimSummaryCurve* destinationCurve ) if ( !destinationCurve->summaryAddressY().uiText().empty() ) axisObjectName = QString::fromStdString( destinationCurve->summaryAddressY().uiText() ); - newPlotAxis = plotWidget()->createNextPlotAxis( plotAxis ); + newPlotAxis = plotWidget()->createNextPlotAxis( plotAxisType ); addNewAxisProperties( newPlotAxis, axisObjectName ); } From 2e5626941de261475e3af0eba1c180e11551dad2 Mon Sep 17 00:00:00 2001 From: Kristian Bendiksen Date: Fri, 9 Sep 2022 14:52:11 +0200 Subject: [PATCH 112/129] #9281 Analysis Plot: fix ensemble data source selection. Fixes #9281. --- .../ProjectDataModel/AnalysisPlots/RimAnalysisPlot.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/ApplicationLibCode/ProjectDataModel/AnalysisPlots/RimAnalysisPlot.cpp b/ApplicationLibCode/ProjectDataModel/AnalysisPlots/RimAnalysisPlot.cpp index 9d178e8386..56d1843ca6 100644 --- a/ApplicationLibCode/ProjectDataModel/AnalysisPlots/RimAnalysisPlot.cpp +++ b/ApplicationLibCode/ProjectDataModel/AnalysisPlots/RimAnalysisPlot.cpp @@ -457,6 +457,7 @@ void RimAnalysisPlot::fieldChangedByUi( const caf::PdmFieldHandle* changedField, dlg.enableMultiSelect( true ); dlg.enableIndividualEnsembleCaseSelection( true ); + dlg.hideEnsembles(); dlg.setCurveSelection( this->curveDefinitions() ); if ( dlg.exec() == QDialog::Accepted ) From d1a8de0aa86b07c29f98da13f0cb8afbffd084e5 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Fri, 9 Sep 2022 16:06:56 +0200 Subject: [PATCH 113/129] Improve user interface for axis linking MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Several adjustments to UI as discussed with HÃ¥kon and Alireza. * add link/unlink command to right-click menu of axis * select curve in project tree when clicking on legend item * make sure internal legend is always visible when toggling plot * fix issue when using sub plot as data source for axis range --- .../Tools/RiaImportEclipseCaseTools.cpp | 19 +++- .../CMakeLists_files.cmake | 4 + .../RicSummaryPlotFeatureImpl.cpp | 2 + .../RicToggleXAxisLinkingFeature.cpp | 68 ++++++++++++++ .../RicToggleXAxisLinkingFeature.h | 34 +++++++ .../RicToggleYAxisLinkingFeature.cpp | 76 ++++++++++++++++ .../RicToggleYAxisLinkingFeature.h | 34 +++++++ .../RimContextCommandBuilder.cpp | 10 ++ .../Summary/RimSummaryMultiPlot.cpp | 91 ++++++++++++++----- .../Summary/RimSummaryMultiPlot.h | 8 +- .../Summary/RimSummaryPlot.cpp | 13 +++ .../ProjectDataModel/Summary/RimSummaryPlot.h | 1 + .../UserInterface/RiuMultiPlotPage.cpp | 3 + .../UserInterface/RiuQwtPlotWidget.cpp | 8 +- .../cafPdmUiComboBoxEditor.cpp | 3 +- .../cafUserInterface/cafPdmUiLineEditor.cpp | 3 +- .../cafUiAppearanceSettings.cpp | 16 ++++ .../cafUiAppearanceSettings.h | 3 + 18 files changed, 365 insertions(+), 31 deletions(-) create mode 100644 ApplicationLibCode/Commands/SummaryPlotCommands/RicToggleXAxisLinkingFeature.cpp create mode 100644 ApplicationLibCode/Commands/SummaryPlotCommands/RicToggleXAxisLinkingFeature.h create mode 100644 ApplicationLibCode/Commands/SummaryPlotCommands/RicToggleYAxisLinkingFeature.cpp create mode 100644 ApplicationLibCode/Commands/SummaryPlotCommands/RicToggleYAxisLinkingFeature.h diff --git a/ApplicationLibCode/Application/Tools/RiaImportEclipseCaseTools.cpp b/ApplicationLibCode/Application/Tools/RiaImportEclipseCaseTools.cpp index 569e8365c1..ab48a0e0bd 100644 --- a/ApplicationLibCode/Application/Tools/RiaImportEclipseCaseTools.cpp +++ b/ApplicationLibCode/Application/Tools/RiaImportEclipseCaseTools.cpp @@ -100,8 +100,15 @@ bool RiaImportEclipseCaseTools::openEclipseCasesFromFile( const QStringList& RimMainPlotCollection::current()->ensureDefaultFlowPlotsAreCreated(); } - // Import summary cases - bool importSummaryCases = readerSettings && readerSettings->importSummaryData; + // The default value for summary case import is true, but we use the state from RifReaderSettings if defined + // + // TODO: + // Refactor RifReaderSettings, separate the data structure sent to reader from the data structure in + // preferences. See RifReaderSettings::createGridOnlyReaderSettings() for the only use of importSummaryData flag + // + bool importSummaryCases = true; + if ( readerSettings ) importSummaryCases = readerSettings->importSummaryData; + if ( importSummaryCases && !summaryFileInfos.empty() ) { RimSummaryCaseMainCollection* sumCaseColl = @@ -208,6 +215,14 @@ bool RiaImportEclipseCaseTools::openEclipseCasesFromFile( const QStringList& RiuPlotMainWindowTools::refreshToolbars(); + if ( RiaGuiApplication::isRunning() ) + { + // Call process events to clear the queue. This make sure that we are able raise the 3D window on top of the + // plot window. Otherwise the event processing ends up with the plot window on top. + QApplication::processEvents(); + RiuMainWindow::instance()->activateWindow(); + } + if ( openedFilesOut ) { *openedFilesOut = openedFiles; diff --git a/ApplicationLibCode/Commands/SummaryPlotCommands/CMakeLists_files.cmake b/ApplicationLibCode/Commands/SummaryPlotCommands/CMakeLists_files.cmake index e1067d594c..72459daef4 100644 --- a/ApplicationLibCode/Commands/SummaryPlotCommands/CMakeLists_files.cmake +++ b/ApplicationLibCode/Commands/SummaryPlotCommands/CMakeLists_files.cmake @@ -46,6 +46,8 @@ set(SOURCE_GROUP_HEADER_FILES ${CMAKE_CURRENT_LIST_DIR}/RicPasteSummaryMultiPlotFeature.h ${CMAKE_CURRENT_LIST_DIR}/RicDeleteSubPlotCtxFeature.h ${CMAKE_CURRENT_LIST_DIR}/RicEditSummaryPlotCtxFeature.h + ${CMAKE_CURRENT_LIST_DIR}/RicToggleYAxisLinkingFeature.h + ${CMAKE_CURRENT_LIST_DIR}/RicToggleXAxisLinkingFeature.h ) set(SOURCE_GROUP_SOURCE_FILES @@ -96,6 +98,8 @@ set(SOURCE_GROUP_SOURCE_FILES ${CMAKE_CURRENT_LIST_DIR}/RicPasteSummaryMultiPlotFeature.cpp ${CMAKE_CURRENT_LIST_DIR}/RicDeleteSubPlotCtxFeature.cpp ${CMAKE_CURRENT_LIST_DIR}/RicEditSummaryPlotCtxFeature.cpp + ${CMAKE_CURRENT_LIST_DIR}/RicToggleYAxisLinkingFeature.cpp + ${CMAKE_CURRENT_LIST_DIR}/RicToggleXAxisLinkingFeature.cpp ) list(APPEND COMMAND_CODE_HEADER_FILES ${SOURCE_GROUP_HEADER_FILES}) diff --git a/ApplicationLibCode/Commands/SummaryPlotCommands/RicSummaryPlotFeatureImpl.cpp b/ApplicationLibCode/Commands/SummaryPlotCommands/RicSummaryPlotFeatureImpl.cpp index 4a253d65a2..be0a682ddc 100644 --- a/ApplicationLibCode/Commands/SummaryPlotCommands/RicSummaryPlotFeatureImpl.cpp +++ b/ApplicationLibCode/Commands/SummaryPlotCommands/RicSummaryPlotFeatureImpl.cpp @@ -764,6 +764,8 @@ void RicSummaryPlotFeatureImpl::insertFilteredAddressesInSet( const QStringList& std::set* setToInsertFilteredAddressesIn, std::vector* usedFilters ) { + if ( allAddressesInCase.empty() ) return; + int curveFilterCount = curveFilters.size(); usedFilters->clear(); diff --git a/ApplicationLibCode/Commands/SummaryPlotCommands/RicToggleXAxisLinkingFeature.cpp b/ApplicationLibCode/Commands/SummaryPlotCommands/RicToggleXAxisLinkingFeature.cpp new file mode 100644 index 0000000000..d29ad6132b --- /dev/null +++ b/ApplicationLibCode/Commands/SummaryPlotCommands/RicToggleXAxisLinkingFeature.cpp @@ -0,0 +1,68 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2022- Equinor ASA +// +// ResInsight is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU General Public License at +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#include "RicToggleXAxisLinkingFeature.h" + +#include "RimSummaryMultiPlot.h" + +#include "cafSelectionManagerTools.h" + +#include + +CAF_CMD_SOURCE_INIT( RicToggleXAxisLinkingFeature, "RicToggleXAxisLinkingFeature" ); + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +bool RicToggleXAxisLinkingFeature::isCommandEnabled() +{ + auto* summaryMultiPlot = caf::firstAncestorOfTypeFromSelectedObject(); + return ( summaryMultiPlot != nullptr ); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RicToggleXAxisLinkingFeature::onActionTriggered( bool isChecked ) +{ + auto* summaryMultiPlot = caf::firstAncestorOfTypeFromSelectedObject(); + if ( !summaryMultiPlot ) return; + + bool linkedState = summaryMultiPlot->isTimeAxisLinked(); + summaryMultiPlot->setTimeAxisLinked( !linkedState ); + summaryMultiPlot->updateAllRequiredEditors(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RicToggleXAxisLinkingFeature::setupActionLook( QAction* actionToSetup ) +{ + QString text = "Link"; + auto* summaryMultiPlot = caf::firstAncestorOfTypeFromSelectedObject(); + if ( summaryMultiPlot ) + { + if ( summaryMultiPlot->isTimeAxisLinked() ) + { + text = "Unlink"; + } + } + + actionToSetup->setText( text + " Time Axis" ); + actionToSetup->setIcon( QIcon( ":/chain.png" ) ); +} diff --git a/ApplicationLibCode/Commands/SummaryPlotCommands/RicToggleXAxisLinkingFeature.h b/ApplicationLibCode/Commands/SummaryPlotCommands/RicToggleXAxisLinkingFeature.h new file mode 100644 index 0000000000..816d375740 --- /dev/null +++ b/ApplicationLibCode/Commands/SummaryPlotCommands/RicToggleXAxisLinkingFeature.h @@ -0,0 +1,34 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2022- Equinor ASA +// +// ResInsight is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU General Public License at +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#pragma once + +#include "cafCmdFeature.h" + +//================================================================================================== +/// +//================================================================================================== +class RicToggleXAxisLinkingFeature : public caf::CmdFeature +{ + CAF_CMD_HEADER_INIT; + +protected: + bool isCommandEnabled() override; + void onActionTriggered( bool isChecked ) override; + void setupActionLook( QAction* actionToSetup ) override; +}; diff --git a/ApplicationLibCode/Commands/SummaryPlotCommands/RicToggleYAxisLinkingFeature.cpp b/ApplicationLibCode/Commands/SummaryPlotCommands/RicToggleYAxisLinkingFeature.cpp new file mode 100644 index 0000000000..96a0cee220 --- /dev/null +++ b/ApplicationLibCode/Commands/SummaryPlotCommands/RicToggleYAxisLinkingFeature.cpp @@ -0,0 +1,76 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2022- Equinor ASA +// +// ResInsight is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU General Public License at +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#include "RicToggleYAxisLinkingFeature.h" + +#include "RimSummaryMultiPlot.h" +#include "RimSummaryPlot.h" + +#include "cafSelectionManagerTools.h" + +#include + +CAF_CMD_SOURCE_INIT( RicToggleYAxisLinkingFeature, "RicToggleYAxisLinkingFeature" ); + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +bool RicToggleYAxisLinkingFeature::isCommandEnabled() +{ + auto* summaryMultiPlot = caf::firstAncestorOfTypeFromSelectedObject(); + return ( summaryMultiPlot != nullptr ); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RicToggleYAxisLinkingFeature::onActionTriggered( bool isChecked ) +{ + auto* summaryMultiPlot = caf::firstAncestorOfTypeFromSelectedObject(); + if ( !summaryMultiPlot ) return; + + bool linkedState = summaryMultiPlot->isSubPlotAxesLinked(); + summaryMultiPlot->setSubPlotAxesLinked( !linkedState ); + + for ( auto plot : summaryMultiPlot->summaryPlots() ) + { + plot->axisChanged.send( plot ); + plot->updateAxes(); + } + + summaryMultiPlot->updateAllRequiredEditors(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RicToggleYAxisLinkingFeature::setupActionLook( QAction* actionToSetup ) +{ + QString text = "Link"; + auto* summaryMultiPlot = caf::firstAncestorOfTypeFromSelectedObject(); + if ( summaryMultiPlot ) + { + if ( summaryMultiPlot->isSubPlotAxesLinked() ) + { + text = "Unlink"; + } + } + + actionToSetup->setText( text + " Y Axis" ); + actionToSetup->setIcon( QIcon( ":/chain.png" ) ); +} diff --git a/ApplicationLibCode/Commands/SummaryPlotCommands/RicToggleYAxisLinkingFeature.h b/ApplicationLibCode/Commands/SummaryPlotCommands/RicToggleYAxisLinkingFeature.h new file mode 100644 index 0000000000..7f61cb6d7c --- /dev/null +++ b/ApplicationLibCode/Commands/SummaryPlotCommands/RicToggleYAxisLinkingFeature.h @@ -0,0 +1,34 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2022- Equinor ASA +// +// ResInsight is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU General Public License at +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#pragma once + +#include "cafCmdFeature.h" + +//================================================================================================== +/// +//================================================================================================== +class RicToggleYAxisLinkingFeature : public caf::CmdFeature +{ + CAF_CMD_HEADER_INIT; + +protected: + bool isCommandEnabled() override; + void onActionTriggered( bool isChecked ) override; + void setupActionLook( QAction* actionToSetup ) override; +}; diff --git a/ApplicationLibCode/ProjectDataModel/RimContextCommandBuilder.cpp b/ApplicationLibCode/ProjectDataModel/RimContextCommandBuilder.cpp index 416541cd28..10ccb5ce4a 100644 --- a/ApplicationLibCode/ProjectDataModel/RimContextCommandBuilder.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimContextCommandBuilder.cpp @@ -100,6 +100,7 @@ #include "RimParameterResultCrossPlot.h" #include "RimPerforationCollection.h" #include "RimPerforationInterval.h" +#include "RimPlotAxisProperties.h" #include "RimPlotAxisPropertiesInterface.h" #include "RimPlotDataFilterCollection.h" #include "RimPlotDataFilterItem.h" @@ -184,6 +185,7 @@ #include #include +#include "RimSummaryTimeAxisProperties.h" #include //-------------------------------------------------------------------------------------------------- @@ -1072,6 +1074,14 @@ caf::CmdFeatureMenuBuilder RimContextCommandBuilder::commandsFromSelection() } else if ( dynamic_cast( firstUiItem ) ) { + if ( dynamic_cast( firstUiItem ) ) + { + menuBuilder << "RicToggleYAxisLinkingFeature"; + } + if ( dynamic_cast( firstUiItem ) ) + { + menuBuilder << "RicToggleXAxisLinkingFeature"; + } menuBuilder << "RicNewPlotAxisPropertiesFeature"; } else if ( dynamic_cast( firstUiItem ) ) diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.cpp index 131d9a4f17..bcc5518614 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.cpp @@ -73,7 +73,7 @@ namespace caf template <> void AppEnum::setUp() { - addItem( RimSummaryMultiPlot::AxisRangeAggregation::NONE, "NONE", "None" ); + addItem( RimSummaryMultiPlot::AxisRangeAggregation::NONE, "NONE", "Per Sub Plot" ); addItem( RimSummaryMultiPlot::AxisRangeAggregation::SUB_PLOTS, "SUB_PLOTS", "All Sub Plots" ); addItem( RimSummaryMultiPlot::AxisRangeAggregation::WELLS, "WELLS", "All Wells" ); addItem( RimSummaryMultiPlot::AxisRangeAggregation::REGIONS, "REGIONS", "All Regions" ); @@ -142,7 +142,7 @@ RimSummaryMultiPlot::RimSummaryMultiPlot() m_appendPrevCurve.uiCapability()->setUiEditorTypeName( caf::PdmUiPushButtonEditor::uiEditorTypeName() ); m_appendPrevCurve.uiCapability()->setUiIconFromResourceString( ":/AppendPrevCurve.png" ); - CAF_PDM_InitField( &m_linkSubPlotAxes, "LinkSubPlotAxes", true, "Link Sub Plot Axes" ); + CAF_PDM_InitField( &m_linkSubPlotAxes, "LinkSubPlotAxes", false, "Link Y Axes" ); caf::PdmUiNativeCheckBoxEditor::configureFieldForEditor( &m_linkSubPlotAxes ); CAF_PDM_InitField( &m_linkTimeAxis, "LinkTimeAxis", true, "Link Time Axis" ); caf::PdmUiNativeCheckBoxEditor::configureFieldForEditor( &m_linkTimeAxis ); @@ -151,7 +151,7 @@ RimSummaryMultiPlot::RimSummaryMultiPlot() CAF_PDM_InitField( &m_allow3DSelectionLink, "Allow3DSelectionLink", true, "Allow Well Selection from 3D View" ); caf::PdmUiNativeCheckBoxEditor::configureFieldForEditor( &m_allow3DSelectionLink ); - CAF_PDM_InitFieldNoDefault( &m_axisRangeAggregation, "AxisRangeAggregation", "Axis Range Control" ); + CAF_PDM_InitFieldNoDefault( &m_axisRangeAggregation, "AxisRangeAggregation", "Y Axis Range" ); CAF_PDM_InitField( &m_hidePlotsWithValuesBelow, "HidePlotsWithValuesBelow", false, "" ); m_hidePlotsWithValuesBelow.xmlCapability()->disableIO(); @@ -206,9 +206,10 @@ void RimSummaryMultiPlot::insertPlot( RimPlot* plot, size_t index ) { sumPlot->axisChanged.connect( this, &RimSummaryMultiPlot::onSubPlotAxisChanged ); sumPlot->curvesChanged.connect( this, &RimSummaryMultiPlot::onSubPlotChanged ); + sumPlot->plotZoomedByUser.connect( this, &RimSummaryMultiPlot::onSubPlotZoomed ); bool isMinMaxOverridden = m_axisRangeAggregation() != AxisRangeAggregation::NONE; - setOverriddenFlagsForPlot( sumPlot, isMinMaxOverridden, m_autoAdjustAppearance() ); + setAutoValueStatesForPlot( sumPlot, isMinMaxOverridden, m_autoAdjustAppearance() ); RimMultiPlot::insertPlot( plot, index ); } @@ -393,9 +394,6 @@ void RimSummaryMultiPlot::defineUiOrdering( QString uiConfigName, caf::PdmUiOrde axesGroup->add( &m_linkTimeAxis ); axesGroup->add( &m_autoAdjustAppearance ); - m_linkSubPlotAxes.uiCapability()->setUiReadOnly( m_autoAdjustAppearance() ); - if ( m_autoAdjustAppearance() ) m_linkSubPlotAxes = false; - auto plotVisibilityFilterGroup = uiOrdering.addNewGroup( "Plot Visibility Filter" ); plotVisibilityFilterGroup->add( &m_plotFilterYAxisThreshold ); plotVisibilityFilterGroup->add( &m_hidePlotsWithValuesBelow ); @@ -428,6 +426,8 @@ void RimSummaryMultiPlot::defineUiOrdering( QString uiConfigName, caf::PdmUiOrde legendsGroup->add( &m_legendFontSize ); uiOrdering.skipRemainingFields( true ); + + updateReadOnlyState(); } //-------------------------------------------------------------------------------------------------- @@ -453,7 +453,7 @@ void RimSummaryMultiPlot::fieldChangedByUi( const caf::PdmFieldHandle* changedFi else if ( changedField == &m_linkSubPlotAxes || changedField == &m_axisRangeAggregation || changedField == &m_linkTimeAxis ) { - setOverriddenFlag(); + setAutoValueStates(); syncAxisRanges(); } else if ( changedField == &m_hidePlotsWithValuesBelow ) @@ -492,7 +492,7 @@ void RimSummaryMultiPlot::fieldChangedByUi( const caf::PdmFieldHandle* changedFi } else if ( changedField == &m_autoAdjustAppearance ) { - setOverriddenFlag(); + setAutoValueStates(); checkAndApplyAutoAppearance(); } else @@ -710,6 +710,7 @@ void RimSummaryMultiPlot::initAfterRead() { plot->axisChanged.connect( this, &RimSummaryMultiPlot::onSubPlotAxisChanged ); plot->curvesChanged.connect( this, &RimSummaryMultiPlot::onSubPlotChanged ); + plot->plotZoomedByUser.connect( this, &RimSummaryMultiPlot::onSubPlotZoomed ); } updateStepDimensionFromDefault(); } @@ -730,7 +731,22 @@ void RimSummaryMultiPlot::onLoadDataAndUpdate() //-------------------------------------------------------------------------------------------------- void RimSummaryMultiPlot::zoomAll() { - setOverriddenFlag(); + setAutoValueStates(); + + if ( m_linkSubPlotAxes() ) + { + // Reset zoom to make sure the complete range for min/max is available + RimMultiPlot::zoomAll(); + + if ( !summaryPlots().empty() ) + { + onSubPlotAxisChanged( nullptr, summaryPlots().front() ); + } + + updateZoom(); + + return; + } // Reset zoom to make sure the complete range for min/max is available RimMultiPlot::zoomAll(); @@ -792,7 +808,7 @@ void RimSummaryMultiPlot::setDefaultRangeAggregationSteppingDimension() m_axisRangeAggregation = rangeAggregation; m_sourceStepping->setStepDimension( stepDimension ); - setOverriddenFlag(); + setAutoValueStates(); } //-------------------------------------------------------------------------------------------------- @@ -812,6 +828,11 @@ void RimSummaryMultiPlot::checkAndApplyAutoAppearance() //-------------------------------------------------------------------------------------------------- void RimSummaryMultiPlot::syncAxisRanges() { + if ( m_linkSubPlotAxes() ) + { + return; + } + if ( m_axisRangeAggregation() == AxisRangeAggregation::NONE ) { return; @@ -830,7 +851,7 @@ void RimSummaryMultiPlot::syncAxisRanges() if ( m_axisRangeAggregation() == AxisRangeAggregation::SUB_PLOTS ) { - std::map> axisRanges; + std::map> axisRanges; // gather current min/max values for each category (axis label) for ( auto plot : summaryPlots() ) @@ -841,14 +862,15 @@ void RimSummaryMultiPlot::syncAxisRanges() double maxVal = axis->visibleRangeMax(); if ( axis->isAxisInverted() ) std::swap( minVal, maxVal ); - if ( axisRanges.count( axis->plotAxisType() ) == 0 ) + auto axisTitleText = axis->axisTitleText(); + if ( axisRanges.count( axisTitleText ) == 0 ) { - axisRanges[axis->plotAxisType()] = std::make_pair( minVal, maxVal ); + axisRanges[axisTitleText] = std::make_pair( minVal, maxVal ); } else { - auto& [currentMin, currentMax] = axisRanges[axis->plotAxisType()]; - axisRanges[axis->plotAxisType()] = + auto& [currentMin, currentMax] = axisRanges[axisTitleText]; + axisRanges[axisTitleText] = std::make_pair( std::min( currentMin, minVal ), std::max( currentMax, maxVal ) ); } } @@ -859,7 +881,7 @@ void RimSummaryMultiPlot::syncAxisRanges() { for ( auto axis : plot->plotYAxes() ) { - auto [minVal, maxVal] = axisRanges[axis->plotAxisType()]; + auto [minVal, maxVal] = axisRanges[axis->axisTitleText()]; if ( axis->isAxisInverted() ) std::swap( minVal, maxVal ); axis->setAutoZoom( false ); axis->setAutoValueVisibleRangeMin( minVal ); @@ -1148,19 +1170,19 @@ void RimSummaryMultiPlot::updatePlotVisibility() //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RimSummaryMultiPlot::setOverriddenFlag() +void RimSummaryMultiPlot::setAutoValueStates() { - bool isMinMaxOverridden = m_axisRangeAggregation() != AxisRangeAggregation::NONE; + bool enableMinMaxAutoValue = m_axisRangeAggregation() != AxisRangeAggregation::NONE; for ( auto p : summaryPlots() ) { - setOverriddenFlagsForPlot( p, isMinMaxOverridden, m_autoAdjustAppearance() ); + setAutoValueStatesForPlot( p, enableMinMaxAutoValue, m_autoAdjustAppearance() ); } } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RimSummaryMultiPlot::setOverriddenFlagsForPlot( RimSummaryPlot* summaryPlot, +void RimSummaryMultiPlot::setAutoValueStatesForPlot( RimSummaryPlot* summaryPlot, bool enableAutoValueMinMax, bool enableAutoValueAppearance ) { @@ -1242,9 +1264,6 @@ void RimSummaryMultiPlot::analyzePlotsAndAdjustAppearanceSettings() if ( hasOnlyOneQuantity ) { - // Disable sub plot linking to be able to configure individually - setSubPlotAxesLinked( false ); - auto [row, col] = gridLayoutInfoForSubPlot( p ); if ( col == 0 ) { @@ -1287,6 +1306,14 @@ bool RimSummaryMultiPlot::isSubPlotAxesLinked() const return m_linkSubPlotAxes(); } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimSummaryMultiPlot::setTimeAxisLinked( bool enable ) +{ + m_linkTimeAxis = enable; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -1315,6 +1342,14 @@ void RimSummaryMultiPlot::onSubPlotChanged( const caf::SignalEmitter* emitter ) applyPlotWindowTitleToWidgets(); } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimSummaryMultiPlot::onSubPlotZoomed( const caf::SignalEmitter* emitter ) +{ + m_axisRangeAggregation = AxisRangeAggregation::NONE; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -1340,6 +1375,14 @@ void RimSummaryMultiPlot::onSubPlotAxisChanged( const caf::SignalEmitter* emitte syncAxisRanges(); } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimSummaryMultiPlot::updateReadOnlyState() +{ + m_axisRangeAggregation.uiCapability()->setUiReadOnly( m_linkSubPlotAxes() ); +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.h b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.h index 3cbe82e24d..fbac41864a 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.h +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.h @@ -96,6 +96,7 @@ public: void setSubPlotAxesLinked( bool enable ); bool isSubPlotAxesLinked() const; + void setTimeAxisLinked( bool enable ); bool isTimeAxisLinked() const; std::pair gridLayoutInfoForSubPlot( RimSummaryPlot* summaryPlot ) const; @@ -134,9 +135,9 @@ private: void updateSourceStepper(); void updatePlotVisibility(); - void setOverriddenFlag(); + void setAutoValueStates(); static void - setOverriddenFlagsForPlot( RimSummaryPlot* summaryPlot, bool isMinMaxOverridden, bool isAppearanceOverridden ); + setAutoValueStatesForPlot( RimSummaryPlot* summaryPlot, bool isMinMaxOverridden, bool isAppearanceOverridden ); void duplicate(); @@ -146,8 +147,11 @@ private: void analyzePlotsAndAdjustAppearanceSettings(); void onSubPlotChanged( const caf::SignalEmitter* emitter ); + void onSubPlotZoomed( const caf::SignalEmitter* emitter ); void onSubPlotAxisChanged( const caf::SignalEmitter* emitter, RimSummaryPlot* summaryPlot ); + void updateReadOnlyState(); + private: caf::PdmField m_autoPlotTitle; caf::PdmField m_autoSubPlotTitle; diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlot.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlot.cpp index d15472414d..1a4dede349 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlot.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlot.cpp @@ -104,6 +104,7 @@ RimSummaryPlot::RimSummaryPlot( bool isCrossPlot ) , m_isCrossPlot( isCrossPlot ) , curvesChanged( this ) , axisChanged( this ) + , plotZoomedByUser( this ) , m_isValid( true ) { CAF_PDM_InitScriptableObject( "Summary Plot", ":/SummaryPlotLight16x16.png", "", "A Summary Plot" ); @@ -1744,6 +1745,8 @@ void RimSummaryPlot::updateZoomFromParentPlot() { propertyAxis->setAutoValueVisibleRangeMax( axisMax ); propertyAxis->setAutoValueVisibleRangeMin( axisMin ); + axisProperties->setVisibleRangeMax( axisMax ); + axisProperties->setVisibleRangeMin( axisMin ); } else { @@ -2372,8 +2375,18 @@ RimEnsembleCurveSet* RimSummaryPlot::addNewEnsembleCurveY( const RifEclipseSumma //-------------------------------------------------------------------------------------------------- void RimSummaryPlot::onPlotZoomed() { + // Disable auto scale in plot engine setAutoScaleXEnabled( false ); setAutoScaleYEnabled( false ); + + // Disable auto value for min/max fields + for ( auto p : plotYAxes() ) + { + p->enableAutoValueMinMax( false ); + } + + plotZoomedByUser.send(); + updateZoomFromParentPlot(); axisChanged.send( this ); diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlot.h b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlot.h index 31507c497f..075dd2f611 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlot.h +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlot.h @@ -81,6 +81,7 @@ class RimSummaryPlot : public RimPlot, public RimSummaryDataSourceStepping public: caf::Signal<> curvesChanged; caf::Signal axisChanged; + caf::Signal<> plotZoomedByUser; public: RimSummaryPlot( bool isCrossPlot = false ); diff --git a/ApplicationLibCode/UserInterface/RiuMultiPlotPage.cpp b/ApplicationLibCode/UserInterface/RiuMultiPlotPage.cpp index ebc5f2e758..18d72faab6 100644 --- a/ApplicationLibCode/UserInterface/RiuMultiPlotPage.cpp +++ b/ApplicationLibCode/UserInterface/RiuMultiPlotPage.cpp @@ -755,7 +755,10 @@ void RiuMultiPlotPage::updateLegendVisibility( RiuPlotWidget* plotWid legend->show(); if ( m_plotDefinition->legendPosition() == RimPlotWindow::LegendPosition::INSIDE ) + { + plotWidget->addOverlayFrame( legendFrame ); legendFrame->show(); + } else { plotWidget->removeOverlayFrame( legendFrame ); diff --git a/ApplicationLibCode/UserInterface/RiuQwtPlotWidget.cpp b/ApplicationLibCode/UserInterface/RiuQwtPlotWidget.cpp index 5f933c03e0..06f5137e0e 100644 --- a/ApplicationLibCode/UserInterface/RiuQwtPlotWidget.cpp +++ b/ApplicationLibCode/UserInterface/RiuQwtPlotWidget.cpp @@ -1486,7 +1486,13 @@ void RiuQwtPlotWidget::onLegendClicked( const QVariant& itemInfo, int index ) if ( !itemInfo.canConvert() ) return; QwtPlotItem* plotItem = qvariant_cast( itemInfo ); - if ( plotItem ) highlightPlotItem( plotItem ); + if ( plotItem ) + { + highlightPlotItem( plotItem ); + + auto wrappedPlotItem = std::make_shared( plotItem ); + emit plotItemSelected( wrappedPlotItem, false, -1 ); + } } //-------------------------------------------------------------------------------------------------- diff --git a/Fwk/AppFwk/cafUserInterface/cafPdmUiComboBoxEditor.cpp b/Fwk/AppFwk/cafUserInterface/cafPdmUiComboBoxEditor.cpp index 592b35e886..58f994f22f 100644 --- a/Fwk/AppFwk/cafUserInterface/cafPdmUiComboBoxEditor.cpp +++ b/Fwk/AppFwk/cafUserInterface/cafPdmUiComboBoxEditor.cpp @@ -279,7 +279,8 @@ void PdmUiComboBoxEditor::configureAndUpdateUi( const QString& uiConfigName ) m_autoValueToolButton->setIcon( icon ); m_autoValueToolButton->setChecked( uiField()->isAutoValueEnabled() ); - QString tooltipText = uiField()->isAutoValueEnabled() ? "Linked" : "Unlinked"; + QString tooltipText = uiField()->isAutoValueEnabled() ? UiAppearanceSettings::globaleValueButtonText() + : UiAppearanceSettings::localValueButtonText(); m_autoValueToolButton->setToolTip( tooltipText ); m_layout->insertWidget( 3, m_autoValueToolButton ); m_autoValueToolButton->show(); diff --git a/Fwk/AppFwk/cafUserInterface/cafPdmUiLineEditor.cpp b/Fwk/AppFwk/cafUserInterface/cafPdmUiLineEditor.cpp index 32db12e75a..7cc93740ce 100644 --- a/Fwk/AppFwk/cafUserInterface/cafPdmUiLineEditor.cpp +++ b/Fwk/AppFwk/cafUserInterface/cafPdmUiLineEditor.cpp @@ -156,7 +156,8 @@ void PdmUiLineEditor::configureAndUpdateUi( const QString& uiConfigName ) m_autoValueToolButton->setIcon( icon ); m_autoValueToolButton->setChecked( uiField()->isAutoValueEnabled() ); - QString tooltipText = uiField()->isAutoValueEnabled() ? "Linked" : "Unlinked"; + QString tooltipText = uiField()->isAutoValueEnabled() ? UiAppearanceSettings::globaleValueButtonText() + : UiAppearanceSettings::localValueButtonText(); m_autoValueToolButton->setToolTip( tooltipText ); m_layout->insertWidget( 1, m_autoValueToolButton ); diff --git a/Fwk/AppFwk/cafUserInterface/cafUiAppearanceSettings.cpp b/Fwk/AppFwk/cafUserInterface/cafUiAppearanceSettings.cpp index 768fa3f1f7..41d7e20114 100644 --- a/Fwk/AppFwk/cafUserInterface/cafUiAppearanceSettings.cpp +++ b/Fwk/AppFwk/cafUserInterface/cafUiAppearanceSettings.cpp @@ -60,4 +60,20 @@ void UiAppearanceSettings::setAutoValueEditorColor( const QString& colorName ) m_autoValueEditorColor = colorName; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QString UiAppearanceSettings::globaleValueButtonText() +{ + return "Global Value"; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QString UiAppearanceSettings::localValueButtonText() +{ + return "Local Value"; +} + } // namespace caf diff --git a/Fwk/AppFwk/cafUserInterface/cafUiAppearanceSettings.h b/Fwk/AppFwk/cafUserInterface/cafUiAppearanceSettings.h index 6f2380a1a9..a0ad22ecc3 100644 --- a/Fwk/AppFwk/cafUserInterface/cafUiAppearanceSettings.h +++ b/Fwk/AppFwk/cafUserInterface/cafUiAppearanceSettings.h @@ -47,6 +47,9 @@ public: QString autoValueEditorColor() const; void setAutoValueEditorColor( const QString& colorName ); + static QString globaleValueButtonText(); + static QString localValueButtonText(); + private: QString m_autoValueEditorColor; }; From 333cac84a683569eb746b930a26afd79e0e00cfd Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Mon, 12 Sep 2022 07:47:14 +0200 Subject: [PATCH 114/129] Bump version info to RC03 --- ResInsightVersion.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ResInsightVersion.cmake b/ResInsightVersion.cmake index 6882453f29..dd385e4c63 100644 --- a/ResInsightVersion.cmake +++ b/ResInsightVersion.cmake @@ -5,7 +5,7 @@ set(RESINSIGHT_PATCH_VERSION 1) # Opional text with no restrictions #set(RESINSIGHT_VERSION_TEXT "-dev") -set(RESINSIGHT_VERSION_TEXT "-RC_02") +set(RESINSIGHT_VERSION_TEXT "-RC_03") # Optional text # Must be unique and increasing within one combination of major/minor/patch version From 5eccff93c9d7bcedcb139a74038a3e8847c5ac61 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Mon, 12 Sep 2022 08:58:09 +0200 Subject: [PATCH 115/129] Fix typo for StimPlanFileName keyword --- .../ProjectDataModel/Completions/RimMeshFractureTemplate.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ApplicationLibCode/ProjectDataModel/Completions/RimMeshFractureTemplate.cpp b/ApplicationLibCode/ProjectDataModel/Completions/RimMeshFractureTemplate.cpp index 6749a12fd9..60e65fac7e 100644 --- a/ApplicationLibCode/ProjectDataModel/Completions/RimMeshFractureTemplate.cpp +++ b/ApplicationLibCode/ProjectDataModel/Completions/RimMeshFractureTemplate.cpp @@ -55,7 +55,7 @@ RimMeshFractureTemplate::RimMeshFractureTemplate() { CAF_PDM_InitScriptableObject( "Fracture Template", ":/FractureTemplate16x16.png" ); - CAF_PDM_InitFieldNoDefault( &m_stimPlanFileName, "StimFileName", "File Name" ); + CAF_PDM_InitFieldNoDefault( &m_stimPlanFileName, "StimPlanFileName", "File Name" ); m_stimPlanFileName.uiCapability()->setUiEditorTypeName( caf::PdmUiFilePathEditor::uiEditorTypeName() ); CAF_PDM_InitField( &m_userDefinedWellPathDepthAtFracture, From 572d46272e13b0b72aa253bc8fc9249204be54a1 Mon Sep 17 00:00:00 2001 From: jonjenssen <69144954+jonjenssen@users.noreply.github.com> Date: Tue, 13 Sep 2022 11:14:30 +0200 Subject: [PATCH 116/129] Summary Plot Editor: Context menu update (#9289) * Summary plot editor context menu update --- .../RicEditSummaryPlotFeature.cpp | 8 ++++ .../RicOpenSummaryPlotEditorFeature.cpp | 42 +++++++++++++++---- .../RicSummaryPlotEditorDialog.cpp | 9 ++++ .../RicSummaryPlotEditorDialog.h | 2 + .../RicSummaryPlotEditorUi.cpp | 19 ++++++++- .../RicSummaryPlotEditorUi.h | 3 ++ .../RicSummaryPlotEditorWidgetCreator.cpp | 8 ++++ .../RicSummaryPlotEditorWidgetCreator.h | 2 + .../RimContextCommandBuilder.cpp | 1 + 9 files changed, 85 insertions(+), 9 deletions(-) diff --git a/ApplicationLibCode/Commands/SummaryPlotCommands/RicEditSummaryPlotFeature.cpp b/ApplicationLibCode/Commands/SummaryPlotCommands/RicEditSummaryPlotFeature.cpp index a12729fea4..746b0b8a58 100644 --- a/ApplicationLibCode/Commands/SummaryPlotCommands/RicEditSummaryPlotFeature.cpp +++ b/ApplicationLibCode/Commands/SummaryPlotCommands/RicEditSummaryPlotFeature.cpp @@ -149,5 +149,13 @@ RimSummaryPlot* RicEditSummaryPlotFeature::selectedSummaryPlot() sumPlot = RiaSummaryTools::parentSummaryPlot( selObj ); } + if ( !sumPlot ) + { + RimSummaryMultiPlot* multiPlot = RiaSummaryTools::parentSummaryMultiPlot( selObj ); + if ( multiPlot ) + { + } + } + return sumPlot; } diff --git a/ApplicationLibCode/Commands/SummaryPlotCommands/RicOpenSummaryPlotEditorFeature.cpp b/ApplicationLibCode/Commands/SummaryPlotCommands/RicOpenSummaryPlotEditorFeature.cpp index a1c90e6c01..5e1fd5d9d7 100644 --- a/ApplicationLibCode/Commands/SummaryPlotCommands/RicOpenSummaryPlotEditorFeature.cpp +++ b/ApplicationLibCode/Commands/SummaryPlotCommands/RicOpenSummaryPlotEditorFeature.cpp @@ -29,11 +29,13 @@ #include "RimCustomObjectiveFunctionCollection.h" #include "RimEnsembleCurveFilter.h" #include "RimEnsembleCurveFilterCollection.h" +#include "RimObservedDataCollection.h" #include "RimProject.h" #include "RimRegularLegendConfig.h" #include "RimSummaryCase.h" #include "RimSummaryCaseCollection.h" #include "RimSummaryCaseMainCollection.h" +#include "RimSummaryMultiPlot.h" #include "RimSummaryPlot.h" #include "RiuPlotMainWindow.h" @@ -54,20 +56,27 @@ bool RicOpenSummaryPlotEditorFeature::isCommandEnabled() RimCustomObjectiveFunctionCollection* customObjFuncCollection = nullptr; caf::PdmObject* selObj = dynamic_cast( caf::SelectionManager::instance()->selectedItem() ); - if ( selObj ) - { - multiPlot = RiaSummaryTools::parentSummaryMultiPlot( selObj ); - selObj->firstAncestorOrThisOfType( customObjFuncCollection ); - } + if ( !selObj ) return false; + + selObj->firstAncestorOrThisOfType( customObjFuncCollection ); auto ensembleFilter = dynamic_cast( selObj ); auto ensembleFilterColl = dynamic_cast( selObj ); auto legendConfig = dynamic_cast( selObj ); + auto sumPlot = dynamic_cast( selObj ); - if ( ensembleFilter || ensembleFilterColl || legendConfig || customObjFuncCollection ) return false; + if ( ensembleFilter || ensembleFilterColl || legendConfig || customObjFuncCollection || sumPlot ) return false; + + multiPlot = RiaSummaryTools::parentSummaryMultiPlot( selObj ); if ( multiPlot ) return true; - return true; + auto summaryCase = dynamic_cast( selObj ); + auto summaryCaseColl = dynamic_cast( selObj ); + auto obsColl = dynamic_cast( selObj ); + + if ( summaryCase || summaryCaseColl || obsColl ) return true; + + return false; } //-------------------------------------------------------------------------------------------------- @@ -78,6 +87,9 @@ void RicOpenSummaryPlotEditorFeature::onActionTriggered( bool isChecked ) RimProject* project = RimProject::current(); CVF_ASSERT( project ); + RimSummaryMultiPlot* multiPlot = + dynamic_cast( caf::SelectionManager::instance()->selectedItem() ); + std::vector selectedCases = caf::selectedObjectsByType(); std::vector selectedGroups = caf::selectedObjectsByType(); @@ -126,7 +138,21 @@ void RicOpenSummaryPlotEditorFeature::onActionTriggered( bool isChecked ) dialog->raise(); } - dialog->updateFromDefaultCases( sourcesToSelect ); + if ( multiPlot ) + { + if ( multiPlot->summaryPlots().size() > 0 ) + { + dialog->updateFromSummaryPlot( multiPlot->summaryPlots()[0] ); + } + else + { + dialog->updateFromSummaryMultiPlot( multiPlot ); + } + } + else + { + dialog->updateFromDefaultCases( sourcesToSelect ); + } } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/Commands/SummaryPlotCommands/RicSummaryPlotEditorDialog.cpp b/ApplicationLibCode/Commands/SummaryPlotCommands/RicSummaryPlotEditorDialog.cpp index f25da5c11e..bfc5e39301 100644 --- a/ApplicationLibCode/Commands/SummaryPlotCommands/RicSummaryPlotEditorDialog.cpp +++ b/ApplicationLibCode/Commands/SummaryPlotCommands/RicSummaryPlotEditorDialog.cpp @@ -67,6 +67,15 @@ void RicSummaryPlotEditorDialog::updateFromSummaryPlot( RimSummaryPlot* summaryP m_curveCreatorSplitterUi->updateUi(); } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RicSummaryPlotEditorDialog::updateFromSummaryMultiPlot( RimSummaryMultiPlot* summaryPlot ) +{ + m_curveCreatorSplitterUi->updateFromSummaryMultiPlot( summaryPlot ); + m_curveCreatorSplitterUi->updateUi(); +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/Commands/SummaryPlotCommands/RicSummaryPlotEditorDialog.h b/ApplicationLibCode/Commands/SummaryPlotCommands/RicSummaryPlotEditorDialog.h index 58b16d2f14..762621b429 100644 --- a/ApplicationLibCode/Commands/SummaryPlotCommands/RicSummaryPlotEditorDialog.h +++ b/ApplicationLibCode/Commands/SummaryPlotCommands/RicSummaryPlotEditorDialog.h @@ -27,6 +27,7 @@ class PdmObject; class RicSummaryPlotEditorWidgetCreator; class RimSummaryPlot; +class RimSummaryMultiPlot; class RimSummaryCase; //================================================================================================== @@ -41,6 +42,7 @@ public: ~RicSummaryPlotEditorDialog() override; void updateFromSummaryPlot( RimSummaryPlot* summaryPlot ); + void updateFromSummaryMultiPlot( RimSummaryMultiPlot* summaryPlot ); void updateFromDefaultCases( const std::vector defaultSources ); private slots: diff --git a/ApplicationLibCode/Commands/SummaryPlotCommands/RicSummaryPlotEditorUi.cpp b/ApplicationLibCode/Commands/SummaryPlotCommands/RicSummaryPlotEditorUi.cpp index 2c87798f7c..5e27b7e201 100644 --- a/ApplicationLibCode/Commands/SummaryPlotCommands/RicSummaryPlotEditorUi.cpp +++ b/ApplicationLibCode/Commands/SummaryPlotCommands/RicSummaryPlotEditorUi.cpp @@ -165,7 +165,7 @@ void RicSummaryPlotEditorUi::updateFromSummaryPlot( RimSummaryPlot* if ( m_targetPlot ) { RimSummaryMultiPlot* parentPlot = nullptr; - targetPlot->firstAncestorOfType( parentPlot ); + m_targetPlot->firstAncestorOfType( parentPlot ); m_plotContainer = parentPlot; populateCurveCreator( *m_targetPlot ); @@ -184,6 +184,23 @@ void RicSummaryPlotEditorUi::updateFromSummaryPlot( RimSummaryPlot* caf::PdmUiItem::updateConnectedEditors(); } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RicSummaryPlotEditorUi::updateFromSummaryMultiPlot( RimSummaryMultiPlot* summaryMultiPlot, + const std::vector& defaultSources ) +{ + resetAllFields(); + + m_useAutoAppearanceAssignment = true; + + m_plotContainer = summaryMultiPlot; + + setDefaultCurveSelection( defaultSources ); + + caf::PdmUiItem::updateConnectedEditors(); +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/Commands/SummaryPlotCommands/RicSummaryPlotEditorUi.h b/ApplicationLibCode/Commands/SummaryPlotCommands/RicSummaryPlotEditorUi.h index dfa5fce41f..9da9d20554 100644 --- a/ApplicationLibCode/Commands/SummaryPlotCommands/RicSummaryPlotEditorUi.h +++ b/ApplicationLibCode/Commands/SummaryPlotCommands/RicSummaryPlotEditorUi.h @@ -68,6 +68,9 @@ public: void updateFromSummaryPlot( RimSummaryPlot* targetPlot, const std::vector& defaultSources = std::vector() ); + void updateFromSummaryMultiPlot( RimSummaryMultiPlot* summaryMultiPlot, + const std::vector& defaultSources = std::vector() ); + QWidget* addressSelectionWidget( QWidget* parent ); bool isCloseButtonPressed() const; diff --git a/ApplicationLibCode/Commands/SummaryPlotCommands/RicSummaryPlotEditorWidgetCreator.cpp b/ApplicationLibCode/Commands/SummaryPlotCommands/RicSummaryPlotEditorWidgetCreator.cpp index dcec80ddf3..ec008104b3 100644 --- a/ApplicationLibCode/Commands/SummaryPlotCommands/RicSummaryPlotEditorWidgetCreator.cpp +++ b/ApplicationLibCode/Commands/SummaryPlotCommands/RicSummaryPlotEditorWidgetCreator.cpp @@ -66,6 +66,14 @@ void RicSummaryPlotEditorWidgetCreator::updateFromSummaryPlot( RimSummaryPlot* s m_summaryCurveCreator->updateFromSummaryPlot( summaryPlot ); } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RicSummaryPlotEditorWidgetCreator::updateFromSummaryMultiPlot( RimSummaryMultiPlot* summaryMultiPlot ) +{ + m_summaryCurveCreator->updateFromSummaryMultiPlot( summaryMultiPlot ); +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/Commands/SummaryPlotCommands/RicSummaryPlotEditorWidgetCreator.h b/ApplicationLibCode/Commands/SummaryPlotCommands/RicSummaryPlotEditorWidgetCreator.h index 4fded48874..ee0932823e 100644 --- a/ApplicationLibCode/Commands/SummaryPlotCommands/RicSummaryPlotEditorWidgetCreator.h +++ b/ApplicationLibCode/Commands/SummaryPlotCommands/RicSummaryPlotEditorWidgetCreator.h @@ -24,6 +24,7 @@ #include class RimSummaryPlot; +class RimSummaryMultiPlot; class RimSummaryCase; class RicSummaryPlotEditorUi; @@ -54,6 +55,7 @@ public: ~RicSummaryPlotEditorWidgetCreator() override; void updateFromSummaryPlot( RimSummaryPlot* summaryPlot ); + void updateFromSummaryMultiPlot( RimSummaryMultiPlot* summaryMultiPlot ); void updateFromDefaultSources( const std::vector defaultSources ); private: diff --git a/ApplicationLibCode/ProjectDataModel/RimContextCommandBuilder.cpp b/ApplicationLibCode/ProjectDataModel/RimContextCommandBuilder.cpp index 10ccb5ce4a..5b1af4e6c3 100644 --- a/ApplicationLibCode/ProjectDataModel/RimContextCommandBuilder.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimContextCommandBuilder.cpp @@ -1121,6 +1121,7 @@ caf::CmdFeatureMenuBuilder RimContextCommandBuilder::commandsFromSelection() menuBuilder << "RicShowTotalAllocationDataFeature"; menuBuilder << "RicNewSummaryMultiPlotFeature"; + menuBuilder << "RicOpenSummaryPlotEditorFeature"; menuBuilder << "RicNewDerivedEnsembleFeature"; menuBuilder << "RicNewSummaryCrossPlotFeature"; menuBuilder << "RicSummaryCurveSwitchAxisFeature"; From 22696beed81131499f0fa40ddef6bf729d5f670f Mon Sep 17 00:00:00 2001 From: jonjenssen <69144954+jonjenssen@users.noreply.github.com> Date: Tue, 13 Sep 2022 11:40:35 +0200 Subject: [PATCH 117/129] Remove unused code (#9290) --- .../SummaryPlotCommands/RicEditSummaryPlotFeature.cpp | 8 -------- 1 file changed, 8 deletions(-) diff --git a/ApplicationLibCode/Commands/SummaryPlotCommands/RicEditSummaryPlotFeature.cpp b/ApplicationLibCode/Commands/SummaryPlotCommands/RicEditSummaryPlotFeature.cpp index 746b0b8a58..a12729fea4 100644 --- a/ApplicationLibCode/Commands/SummaryPlotCommands/RicEditSummaryPlotFeature.cpp +++ b/ApplicationLibCode/Commands/SummaryPlotCommands/RicEditSummaryPlotFeature.cpp @@ -149,13 +149,5 @@ RimSummaryPlot* RicEditSummaryPlotFeature::selectedSummaryPlot() sumPlot = RiaSummaryTools::parentSummaryPlot( selObj ); } - if ( !sumPlot ) - { - RimSummaryMultiPlot* multiPlot = RiaSummaryTools::parentSummaryMultiPlot( selObj ); - if ( multiPlot ) - { - } - } - return sumPlot; } From bbb8185a248bb5774add758e746cd4e212ae8ab8 Mon Sep 17 00:00:00 2001 From: Jon Jenssen Date: Tue, 13 Sep 2022 12:06:25 +0200 Subject: [PATCH 118/129] Allow opening summary plot editor from context menu when multiple cases are selected in data sources --- .../SummaryPlotCommands/RicOpenSummaryPlotEditorFeature.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/ApplicationLibCode/Commands/SummaryPlotCommands/RicOpenSummaryPlotEditorFeature.cpp b/ApplicationLibCode/Commands/SummaryPlotCommands/RicOpenSummaryPlotEditorFeature.cpp index 5e1fd5d9d7..9da4673f03 100644 --- a/ApplicationLibCode/Commands/SummaryPlotCommands/RicOpenSummaryPlotEditorFeature.cpp +++ b/ApplicationLibCode/Commands/SummaryPlotCommands/RicOpenSummaryPlotEditorFeature.cpp @@ -55,6 +55,12 @@ bool RicOpenSummaryPlotEditorFeature::isCommandEnabled() RimSummaryMultiPlot* multiPlot = nullptr; RimCustomObjectiveFunctionCollection* customObjFuncCollection = nullptr; + std::vector selectedCases = caf::selectedObjectsByType(); + if ( selectedCases.size() > 0 ) return true; + + std::vector selectedGroups = caf::selectedObjectsByType(); + if ( selectedGroups.size() > 0 ) return true; + caf::PdmObject* selObj = dynamic_cast( caf::SelectionManager::instance()->selectedItem() ); if ( !selObj ) return false; From 8dc04d00e1cb8333c6f9bc064f0f949d5e2dad20 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Mon, 12 Sep 2022 11:21:12 +0200 Subject: [PATCH 119/129] Add missing update of curve legend text --- .../ProjectDataModel/GridCrossPlots/RimGridCrossPlot.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ApplicationLibCode/ProjectDataModel/GridCrossPlots/RimGridCrossPlot.cpp b/ApplicationLibCode/ProjectDataModel/GridCrossPlots/RimGridCrossPlot.cpp index 1151b0c0d7..1a5b2e3226 100644 --- a/ApplicationLibCode/ProjectDataModel/GridCrossPlots/RimGridCrossPlot.cpp +++ b/ApplicationLibCode/ProjectDataModel/GridCrossPlots/RimGridCrossPlot.cpp @@ -755,6 +755,10 @@ void RimGridCrossPlot::updateLegend() for ( auto dataSet : m_crossPlotDataSets ) { dataSet->updateLegendIcons(); + for ( auto c : dataSet->curves() ) + { + c->updateCurveNameAndUpdatePlotLegendAndTitle(); + } } } } From 60aeda1e6f9bc118e0f9e0be9c9246c2cf7fd576 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Tue, 13 Sep 2022 17:45:41 +0200 Subject: [PATCH 120/129] Adjust auto plot settings * Adjust the max value for summary curves to get more space on top of plot * Compute axis range before computing auto plot settings * Use axis object name as key when computing aggregated min/max * Guard infinite recursion for enableAutoValue() --- .../Summary/RimSummaryMultiPlot.cpp | 159 ++++++++++-------- .../Summary/RimSummaryMultiPlot.h | 7 +- .../UserInterface/RiuMultiPlotBook.cpp | 2 +- .../cafPdmUiCore/cafPdmUiFieldHandle.cpp | 32 ++-- .../cafPdmUiCore/cafPdmUiFieldHandle.h | 4 +- 5 files changed, 121 insertions(+), 83 deletions(-) diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.cpp index bcc5518614..4a5dfdf117 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.cpp @@ -455,6 +455,8 @@ void RimSummaryMultiPlot::fieldChangedByUi( const caf::PdmFieldHandle* changedFi { setAutoValueStates(); syncAxisRanges(); + analyzePlotsAndAdjustAppearanceSettings(); + zoomAll(); } else if ( changedField == &m_hidePlotsWithValuesBelow ) { @@ -493,7 +495,7 @@ void RimSummaryMultiPlot::fieldChangedByUi( const caf::PdmFieldHandle* changedFi else if ( changedField == &m_autoAdjustAppearance ) { setAutoValueStates(); - checkAndApplyAutoAppearance(); + analyzePlotsAndAdjustAppearanceSettings(); } else { @@ -723,7 +725,7 @@ void RimSummaryMultiPlot::onLoadDataAndUpdate() RimMultiPlot::onLoadDataAndUpdate(); updatePlotWindowTitle(); - checkAndApplyAutoAppearance(); + analyzePlotsAndAdjustAppearanceSettings(); } //-------------------------------------------------------------------------------------------------- @@ -811,18 +813,6 @@ void RimSummaryMultiPlot::setDefaultRangeAggregationSteppingDimension() setAutoValueStates(); } -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimSummaryMultiPlot::checkAndApplyAutoAppearance() -{ - if ( m_autoAdjustAppearance ) - { - analyzePlotsAndAdjustAppearanceSettings(); - syncAxisRanges(); - } -} - //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -862,16 +852,15 @@ void RimSummaryMultiPlot::syncAxisRanges() double maxVal = axis->visibleRangeMax(); if ( axis->isAxisInverted() ) std::swap( minVal, maxVal ); - auto axisTitleText = axis->axisTitleText(); - if ( axisRanges.count( axisTitleText ) == 0 ) + auto key = axis->objectName(); + if ( axisRanges.count( key ) == 0 ) { - axisRanges[axisTitleText] = std::make_pair( minVal, maxVal ); + axisRanges[key] = std::make_pair( minVal, maxVal ); } else { - auto& [currentMin, currentMax] = axisRanges[axisTitleText]; - axisRanges[axisTitleText] = - std::make_pair( std::min( currentMin, minVal ), std::max( currentMax, maxVal ) ); + auto& [currentMin, currentMax] = axisRanges[key]; + axisRanges[key] = std::make_pair( std::min( currentMin, minVal ), std::max( currentMax, maxVal ) ); } } } @@ -881,9 +870,10 @@ void RimSummaryMultiPlot::syncAxisRanges() { for ( auto axis : plot->plotYAxes() ) { - auto [minVal, maxVal] = axisRanges[axis->axisTitleText()]; + auto [minVal, maxVal] = axisRanges[axis->objectName()]; if ( axis->isAxisInverted() ) std::swap( minVal, maxVal ); axis->setAutoZoom( false ); + axis->setAutoValueVisibleRangeMin( minVal ); axis->setAutoValueVisibleRangeMax( maxVal ); } @@ -1122,16 +1112,10 @@ void RimSummaryMultiPlot::computeAggregatedAxisRange() if ( axis->isAxisInverted() ) std::swap( minVal, maxVal ); - if ( !axis->isLogarithmicScaleEnabled() ) - { - int maxMajorTickIntervalCount = 8; - double stepSize = 0.0; - QwtLinearScaleEngine scaleEngine; - scaleEngine.autoScale( maxMajorTickIntervalCount, minVal, maxVal, stepSize ); - } + auto [adjustedMinVal, adjustedMaxVal] = adjustedMinMax( axis, minVal, maxVal ); - axis->setAutoValueVisibleRangeMin( minVal ); - axis->setAutoValueVisibleRangeMax( maxVal ); + axis->setAutoValueVisibleRangeMin( adjustedMinVal ); + axis->setAutoValueVisibleRangeMax( adjustedMaxVal ); } } @@ -1228,57 +1212,75 @@ void RimSummaryMultiPlot::duplicate() //-------------------------------------------------------------------------------------------------- void RimSummaryMultiPlot::analyzePlotsAndAdjustAppearanceSettings() { - RiaSummaryAddressAnalyzer analyzer; - - for ( auto p : summaryPlots() ) + if ( m_autoAdjustAppearance ) { - auto addresses = RimSummaryAddressModifier::createEclipseSummaryAddress( p ); - analyzer.appendAddresses( addresses ); - } + // Required to sync axis ranges before computing the auto scale + syncAxisRanges(); - bool hasOnlyOneQuantity = analyzer.isSingleQuantityIgnoreHistory(); + RiaSummaryAddressAnalyzer analyzer; - for ( auto p : summaryPlots() ) - { - auto timeAxisProp = p->timeAxisProperties(); - - if ( columnCount() < 3 ) - timeAxisProp->setAutoValueForMajorTickmarkCount( RimPlotAxisProperties::LegendTickmarkCount::TICKMARK_DEFAULT ); - else - timeAxisProp->setAutoValueForMajorTickmarkCount( RimPlotAxisProperties::LegendTickmarkCount::TICKMARK_FEW ); - - for ( RimPlotAxisPropertiesInterface* axisInterface : p->plotYAxes() ) + for ( auto p : summaryPlots() ) { - auto axisProp = dynamic_cast( axisInterface ); + auto addresses = RimSummaryAddressModifier::createEclipseSummaryAddress( p ); + analyzer.appendAddresses( addresses ); + } - if ( !axisProp ) continue; + bool canShowOneAxisTitlePerRow = analyzer.isSingleQuantityIgnoreHistory() && + ( m_axisRangeAggregation() != AxisRangeAggregation::NONE ); - if ( rowsPerPage() == 1 ) - axisProp->setAutoValueForMajorTickmarkCount( - RimPlotAxisPropertiesInterface::LegendTickmarkCount::TICKMARK_DEFAULT ); - else - axisProp->setAutoValueForMajorTickmarkCount( - RimPlotAxisPropertiesInterface::LegendTickmarkCount::TICKMARK_FEW ); + for ( auto p : summaryPlots() ) + { + auto timeAxisProp = p->timeAxisProperties(); - axisProp->computeAndSetAutoValueForScaleFactor(); + auto tickMarkCount = ( columnCount() < 3 ) ? RimPlotAxisProperties::LegendTickmarkCount::TICKMARK_DEFAULT + : RimPlotAxisProperties::LegendTickmarkCount::TICKMARK_FEW; - if ( hasOnlyOneQuantity ) + timeAxisProp->setAutoValueForMajorTickmarkCount( tickMarkCount ); + + for ( auto* axisProp : p->plotYAxes() ) { - auto [row, col] = gridLayoutInfoForSubPlot( p ); - if ( col == 0 ) + if ( !axisProp ) continue; + + auto tickMarkCount = ( rowsPerPage() == 1 ) ? RimPlotAxisProperties::LegendTickmarkCount::TICKMARK_DEFAULT + : RimPlotAxisProperties::LegendTickmarkCount::TICKMARK_FEW; + + axisProp->setAutoValueForMajorTickmarkCount( tickMarkCount ); + + axisProp->computeAndSetAutoValueForScaleFactor(); + + if ( canShowOneAxisTitlePerRow ) + { + auto [row, col] = gridLayoutInfoForSubPlot( p ); + + bool isFirstColumn = ( col == 0 ); + axisProp->setShowUnitText( isFirstColumn ); + axisProp->setShowDescription( isFirstColumn ); + } + else { axisProp->setShowUnitText( true ); axisProp->setShowDescription( true ); } - else - { - axisProp->setShowUnitText( false ); - axisProp->setShowDescription( false ); - } } - } - p->updateAxes(); + p->updateAxes(); + } + } + else + { + for ( auto p : summaryPlots() ) + { + for ( auto* axisProp : p->plotYAxes() ) + { + if ( !axisProp ) continue; + + axisProp->computeAndSetAutoValueForScaleFactor(); + axisProp->setShowUnitText( true ); + axisProp->setShowDescription( true ); + } + + p->updateAxes(); + } } } @@ -1383,6 +1385,31 @@ void RimSummaryMultiPlot::updateReadOnlyState() m_axisRangeAggregation.uiCapability()->setUiReadOnly( m_linkSubPlotAxes() ); } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::pair RimSummaryMultiPlot::adjustedMinMax( const RimPlotAxisProperties* axis, double min, double max ) const +{ + if ( !axis->isLogarithmicScaleEnabled() ) + { + int maxMajorTickIntervalCount = axis->tickmarkCountFromEnum( axis->majorTickmarkCount() ); + double stepSize = 0.0; + QwtLinearScaleEngine scaleEngine; + + // Do not adjust minimum value, as we usually want to keep zero unchanged + double adjustedMin = min; + + // Adjust the max value to get some space between the top of the plot and the top of the curve + double adjustedMax = max * 1.05; + + scaleEngine.autoScale( maxMajorTickIntervalCount, adjustedMin, adjustedMax, stepSize ); + + return { adjustedMin, adjustedMax }; + } + + return { min, max }; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.h b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.h index fbac41864a..d097ebb622 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.h +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.h @@ -34,6 +34,7 @@ class RimSummaryPlot; class RimSummaryPlotSourceStepping; class RimSummaryPlotNameHelper; class RimSummaryNameHelper; +class RimPlotAxisProperties; //================================================================================================== /// @@ -104,7 +105,7 @@ public: void zoomAll() override; void setDefaultRangeAggregationSteppingDimension(); - void checkAndApplyAutoAppearance(); + void analyzePlotsAndAdjustAppearanceSettings(); void keepVisiblePageAfterUpdate( bool keepPage ); @@ -144,14 +145,14 @@ private: void appendSubPlotByStepping( int direction ); void appendCurveByStepping( int direction ); - void analyzePlotsAndAdjustAppearanceSettings(); - void onSubPlotChanged( const caf::SignalEmitter* emitter ); void onSubPlotZoomed( const caf::SignalEmitter* emitter ); void onSubPlotAxisChanged( const caf::SignalEmitter* emitter, RimSummaryPlot* summaryPlot ); void updateReadOnlyState(); + std::pair adjustedMinMax( const RimPlotAxisProperties* axis, double min, double max ) const; + private: caf::PdmField m_autoPlotTitle; caf::PdmField m_autoSubPlotTitle; diff --git a/ApplicationLibCode/UserInterface/RiuMultiPlotBook.cpp b/ApplicationLibCode/UserInterface/RiuMultiPlotBook.cpp index e866660621..1280ae6147 100644 --- a/ApplicationLibCode/UserInterface/RiuMultiPlotBook.cpp +++ b/ApplicationLibCode/UserInterface/RiuMultiPlotBook.cpp @@ -508,7 +508,7 @@ void RiuMultiPlotBook::performUpdate( RiaDefines::MultiPlotPageUpdateType whatTo updateGeometry(); RimSummaryMultiPlot* multiPlot = dynamic_cast( m_plotDefinition.p() ); - if ( multiPlot ) multiPlot->checkAndApplyAutoAppearance(); + if ( multiPlot ) multiPlot->analyzePlotsAndAdjustAppearanceSettings(); // use a timer to trigger a viewer page change, if needed if ( m_goToPageAfterUpdate ) diff --git a/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/cafPdmUiFieldHandle.cpp b/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/cafPdmUiFieldHandle.cpp index 4b62e355d1..28522d5ea1 100644 --- a/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/cafPdmUiFieldHandle.cpp +++ b/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/cafPdmUiFieldHandle.cpp @@ -140,11 +140,7 @@ void PdmUiFieldHandle::setAutoValue( const QVariant& autoValue, bool notifyField { m_autoValue = autoValue; - if ( m_useAutoValue && m_autoValue.isValid() ) - { - setValueFromUiEditor( m_autoValue, notifyFieldChanged ); - updateConnectedEditors(); - } + applyAutoValueAndUpdateEditors( notifyFieldChanged ); } //-------------------------------------------------------------------------------------------------- @@ -158,15 +154,11 @@ QVariant PdmUiFieldHandle::autoValue() const //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void PdmUiFieldHandle::enableAutoValue( bool enable ) +void PdmUiFieldHandle::enableAutoValue( bool enable, bool notifyFieldChanged ) { m_useAutoValue = enable; - if ( m_useAutoValue && m_autoValue.isValid() ) - { - setValueFromUiEditor( m_autoValue, true ); - updateConnectedEditors(); - } + applyAutoValueAndUpdateEditors( notifyFieldChanged ); } //-------------------------------------------------------------------------------------------------- @@ -228,7 +220,11 @@ void PdmUiFieldHandle::setAttributes( const std::vector Date: Tue, 13 Sep 2022 17:46:53 +0200 Subject: [PATCH 121/129] Bump version to RC_04 --- ResInsightVersion.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ResInsightVersion.cmake b/ResInsightVersion.cmake index dd385e4c63..d42f9e9b4c 100644 --- a/ResInsightVersion.cmake +++ b/ResInsightVersion.cmake @@ -5,7 +5,7 @@ set(RESINSIGHT_PATCH_VERSION 1) # Opional text with no restrictions #set(RESINSIGHT_VERSION_TEXT "-dev") -set(RESINSIGHT_VERSION_TEXT "-RC_03") +set(RESINSIGHT_VERSION_TEXT "-RC_04") # Optional text # Must be unique and increasing within one combination of major/minor/patch version From c55fdb2a7d51307bb02aad114fd598910623d45b Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Tue, 13 Sep 2022 18:04:59 +0200 Subject: [PATCH 122/129] #9292 Update project tree when new fracture is added --- .../FractureCommands/RicNewWellPathFractureFeature.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ApplicationLibCode/Commands/FractureCommands/RicNewWellPathFractureFeature.cpp b/ApplicationLibCode/Commands/FractureCommands/RicNewWellPathFractureFeature.cpp index c56b28148e..fd96632534 100644 --- a/ApplicationLibCode/Commands/FractureCommands/RicNewWellPathFractureFeature.cpp +++ b/ApplicationLibCode/Commands/FractureCommands/RicNewWellPathFractureFeature.cpp @@ -101,9 +101,12 @@ RimWellPathFracture* RicNewWellPathFractureFeature::addFracture( gsl::not_nullreloadCompletionTypeResultsInAllViews(); - fractureCollection->updateAllRequiredEditors(); } + // Update well path, as the completion collections are hidden if empty. This update will make sure that the folder + // and completion is visible + wellPath->updateAllRequiredEditors(); + Riu3DMainWindowTools::selectAsCurrentItem( fracture ); return fracture; } From f010e5060e7d3ad8913e58d106fd2119bff9668c Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Wed, 14 Sep 2022 08:16:02 +0200 Subject: [PATCH 123/129] Add license notice for Qt-Advanced-Docking-System --- ApplicationLibCode/Adm/LicenseInformation.txt | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/ApplicationLibCode/Adm/LicenseInformation.txt b/ApplicationLibCode/Adm/LicenseInformation.txt index be1f4bf478..f712971dbd 100644 --- a/ApplicationLibCode/Adm/LicenseInformation.txt +++ b/ApplicationLibCode/Adm/LicenseInformation.txt @@ -540,3 +540,22 @@ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +=============================================================================== + Notice for the Qt-Advanced-Docking-System library +=============================================================================== + +https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System +https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System/blob/master/LICENSE + + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] From 53646865a6a51201135edb704ede3ecfef240e9a Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Wed, 14 Sep 2022 08:47:52 +0200 Subject: [PATCH 124/129] #9295 Make sure grid cross plot is updated when grouping objects are toggled --- .../GridCrossPlots/RimGridCrossPlotDataSet.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ApplicationLibCode/ProjectDataModel/GridCrossPlots/RimGridCrossPlotDataSet.cpp b/ApplicationLibCode/ProjectDataModel/GridCrossPlots/RimGridCrossPlotDataSet.cpp index 063c11398b..72fd3a3bdd 100644 --- a/ApplicationLibCode/ProjectDataModel/GridCrossPlots/RimGridCrossPlotDataSet.cpp +++ b/ApplicationLibCode/ProjectDataModel/GridCrossPlots/RimGridCrossPlotDataSet.cpp @@ -952,6 +952,10 @@ void RimGridCrossPlotDataSet::childFieldChangedByUi( const caf::PdmFieldHandle* triggerPlotNameUpdateAndReplot(); } } + else if ( changedChildField == &m_crossPlotCurves ) + { + loadDataAndUpdate( true ); + } } //-------------------------------------------------------------------------------------------------- From 711a9b83e7da8b7b782bf5f82738b169dd84ea4d Mon Sep 17 00:00:00 2001 From: Kristian Bendiksen Date: Wed, 14 Sep 2022 10:56:31 +0200 Subject: [PATCH 125/129] #9293 MultiPlot: avoid removing non-legend overlays. The plots can have other kinds of overlays that should not be removed. Fixes #9293. --- .../UserInterface/RiuMultiPlotPage.cpp | 6 +++++- ApplicationLibCode/UserInterface/RiuPlotWidget.cpp | 13 +++++++++---- ApplicationLibCode/UserInterface/RiuPlotWidget.h | 7 ++++--- 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/ApplicationLibCode/UserInterface/RiuMultiPlotPage.cpp b/ApplicationLibCode/UserInterface/RiuMultiPlotPage.cpp index 18d72faab6..5de96689a6 100644 --- a/ApplicationLibCode/UserInterface/RiuMultiPlotPage.cpp +++ b/ApplicationLibCode/UserInterface/RiuMultiPlotPage.cpp @@ -170,7 +170,11 @@ void RiuMultiPlotPage::insertPlot( RiuPlotWidget* plotWidget, size_t index ) subTitle->setVisible( false ); m_subTitles.insert( static_cast( index ), subTitle ); - plotWidget->clearOverlayFrames(); + // Remove legend overlays already attached to the plot widget + auto matcher = []( RiuDraggableOverlayFrame* p ) { + return dynamic_cast( p->contentFrame() ) != nullptr; + }; + plotWidget->clearOverlayFrames( matcher ); RiuQwtPlotWidget* qwtPlotWidget = dynamic_cast( plotWidget ); diff --git a/ApplicationLibCode/UserInterface/RiuPlotWidget.cpp b/ApplicationLibCode/UserInterface/RiuPlotWidget.cpp index 3980882e28..b1e1ff5ee2 100644 --- a/ApplicationLibCode/UserInterface/RiuPlotWidget.cpp +++ b/ApplicationLibCode/UserInterface/RiuPlotWidget.cpp @@ -169,13 +169,18 @@ void RiuPlotWidget::removeOverlayFrame( RiuDraggableOverlayFrame* overlayFrame ) } //-------------------------------------------------------------------------------------------------- -/// Remove all overlay widgets. +/// Remove overlay widgets matching a given criteria //-------------------------------------------------------------------------------------------------- -void RiuPlotWidget::clearOverlayFrames() +void RiuPlotWidget::clearOverlayFrames( std::function matcher ) { for ( auto p : m_overlayFrames ) - p->deleteLater(); - m_overlayFrames.clear(); + { + if ( matcher( p ) ) + { + removeOverlayFrame( p ); + p->deleteLater(); + } + } } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/UserInterface/RiuPlotWidget.h b/ApplicationLibCode/UserInterface/RiuPlotWidget.h index ef4a0209ee..a900b711e8 100644 --- a/ApplicationLibCode/UserInterface/RiuPlotWidget.h +++ b/ApplicationLibCode/UserInterface/RiuPlotWidget.h @@ -163,9 +163,10 @@ public: void scheduleReplot(); virtual void replot() = 0; - void addOverlayFrame( RiuDraggableOverlayFrame* overlayWidget ); - void removeOverlayFrame( RiuDraggableOverlayFrame* overlayWidget ); - void clearOverlayFrames(); + void addOverlayFrame( RiuDraggableOverlayFrame* overlayWidget ); + void removeOverlayFrame( RiuDraggableOverlayFrame* overlayWidget ); + void clearOverlayFrames( std::function matcher ); + virtual void updateLayout() = 0; virtual void renderTo( QPainter* painter, const QRect& targetRect, double scaling ) = 0; From d7b29589a297c8d1f4e7aed893b97cea4c4216fe Mon Sep 17 00:00:00 2001 From: Kristian Bendiksen Date: Wed, 14 Sep 2022 11:07:50 +0200 Subject: [PATCH 126/129] MultiPlot: Fix small empty legend when toggling legend position. --- ApplicationLibCode/UserInterface/RiuMultiPlotPage.cpp | 11 +++++++++++ ApplicationLibCode/UserInterface/RiuMultiPlotPage.h | 1 + 2 files changed, 12 insertions(+) diff --git a/ApplicationLibCode/UserInterface/RiuMultiPlotPage.cpp b/ApplicationLibCode/UserInterface/RiuMultiPlotPage.cpp index 5de96689a6..7527605b50 100644 --- a/ApplicationLibCode/UserInterface/RiuMultiPlotPage.cpp +++ b/ApplicationLibCode/UserInterface/RiuMultiPlotPage.cpp @@ -605,6 +605,7 @@ void RiuMultiPlotPage::performUpdate( RiaDefines::MultiPlotPageUpdateType whatTo reinsertPlotWidgets(); alignCanvasTops(); if ( m_autoAlignAxes ) alignAxes(); + updatePlotLayouts(); return; } @@ -643,6 +644,16 @@ void RiuMultiPlotPage::refreshLegends() } } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RiuMultiPlotPage::updatePlotLayouts() +{ + QList> plotWidgets = this->visiblePlotWidgets(); + for ( auto p : plotWidgets ) + p->updateLayout(); +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/UserInterface/RiuMultiPlotPage.h b/ApplicationLibCode/UserInterface/RiuMultiPlotPage.h index 1aabc4304a..b9c235e29c 100644 --- a/ApplicationLibCode/UserInterface/RiuMultiPlotPage.h +++ b/ApplicationLibCode/UserInterface/RiuMultiPlotPage.h @@ -123,6 +123,7 @@ protected: virtual void reinsertPlotWidgets(); virtual void refreshLegends(); + void updatePlotLayouts(); void addLegendWidget( RiuPlotWidget* plotWidget, RiuQwtPlotLegend* legend, From a0d0e48953c7fd39dc0617774bf56c9776cee709 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Wed, 14 Sep 2022 16:10:52 +0200 Subject: [PATCH 127/129] Minor issues when preparing user course * Grid Cross Plot: Always show grouping icons with color * Grid Cross Plot: Make sure the info box text content is updated * Bump version to RC_05 --- .../ProjectDataModel/GridCrossPlots/RimGridCrossPlot.cpp | 9 ++++++++- .../ProjectDataModel/GridCrossPlots/RimGridCrossPlot.h | 6 ++++-- .../GridCrossPlots/RimGridCrossPlotDataSet.cpp | 1 - ResInsightVersion.cmake | 2 +- 4 files changed, 13 insertions(+), 5 deletions(-) diff --git a/ApplicationLibCode/ProjectDataModel/GridCrossPlots/RimGridCrossPlot.cpp b/ApplicationLibCode/ProjectDataModel/GridCrossPlots/RimGridCrossPlot.cpp index 1a5b2e3226..4e344e9cdd 100644 --- a/ApplicationLibCode/ProjectDataModel/GridCrossPlots/RimGridCrossPlot.cpp +++ b/ApplicationLibCode/ProjectDataModel/GridCrossPlots/RimGridCrossPlot.cpp @@ -299,8 +299,8 @@ void RimGridCrossPlot::updateInfoBox() new RiuDraggableOverlayFrame( m_plotWidget->getParentForOverlay(), m_plotWidget->overlayMargins() ); m_infoBox->setAnchorCorner( RiuDraggableOverlayFrame::AnchorCorner::TopRight ); RiuTextOverlayContentFrame* textFrame = new RiuTextOverlayContentFrame( m_infoBox ); - textFrame->setText( generateInfoBoxText() ); m_infoBox->setContentFrame( textFrame ); + m_infoBoxTextFrame = textFrame; } m_plotWidget->addOverlayFrame( m_infoBox ); } @@ -314,6 +314,11 @@ void RimGridCrossPlot::updateInfoBox() } } } + + if ( m_infoBoxTextFrame ) + { + m_infoBoxTextFrame->setText( generateInfoBoxText() ); + } } //-------------------------------------------------------------------------------------------------- @@ -624,6 +629,7 @@ void RimGridCrossPlot::updateCurveNamesAndPlotTitle() m_plotWidget->setPlotTitleEnabled( m_showPlotTitle && !isSubPlot() ); } updateMdiWindowTitle(); + updateInfoBox(); } //-------------------------------------------------------------------------------------------------- @@ -739,6 +745,7 @@ void RimGridCrossPlot::setYAxisInverted( bool inverted ) //-------------------------------------------------------------------------------------------------- void RimGridCrossPlot::doUpdateLayout() { + updateInfoBox(); updateLegend(); updatePlot(); } diff --git a/ApplicationLibCode/ProjectDataModel/GridCrossPlots/RimGridCrossPlot.h b/ApplicationLibCode/ProjectDataModel/GridCrossPlots/RimGridCrossPlot.h index 38259d11dc..931ef30ef4 100644 --- a/ApplicationLibCode/ProjectDataModel/GridCrossPlots/RimGridCrossPlot.h +++ b/ApplicationLibCode/ProjectDataModel/GridCrossPlots/RimGridCrossPlot.h @@ -35,6 +35,7 @@ class RimGridCrossPlotDataSet; class RiuDraggableOverlayFrame; class RiuGridCrossQwtPlot; class RimPlotCurve; +class RiuTextOverlayContentFrame; class RimGridCrossPlotNameConfig : public RimNameConfig { @@ -159,6 +160,7 @@ private: caf::PdmChildArrayField m_crossPlotDataSets; - QPointer m_plotWidget; - QPointer m_infoBox; + QPointer m_plotWidget; + QPointer m_infoBox; + QPointer m_infoBoxTextFrame; }; diff --git a/ApplicationLibCode/ProjectDataModel/GridCrossPlots/RimGridCrossPlotDataSet.cpp b/ApplicationLibCode/ProjectDataModel/GridCrossPlots/RimGridCrossPlotDataSet.cpp index 72fd3a3bdd..b2ee7c472a 100644 --- a/ApplicationLibCode/ProjectDataModel/GridCrossPlots/RimGridCrossPlotDataSet.cpp +++ b/ApplicationLibCode/ProjectDataModel/GridCrossPlots/RimGridCrossPlotDataSet.cpp @@ -1093,7 +1093,6 @@ void RimGridCrossPlotDataSet::updateLegendIcons() for ( auto curve : m_crossPlotCurves ) { curve->determineLegendIcon(); - curve->setBlackAndWhiteLegendIcons( groupingEnabled() ); } } diff --git a/ResInsightVersion.cmake b/ResInsightVersion.cmake index d42f9e9b4c..52179e419a 100644 --- a/ResInsightVersion.cmake +++ b/ResInsightVersion.cmake @@ -5,7 +5,7 @@ set(RESINSIGHT_PATCH_VERSION 1) # Opional text with no restrictions #set(RESINSIGHT_VERSION_TEXT "-dev") -set(RESINSIGHT_VERSION_TEXT "-RC_04") +set(RESINSIGHT_VERSION_TEXT "-RC_05") # Optional text # Must be unique and increasing within one combination of major/minor/patch version From 8f9cd55d6649b6d45dcd0798ed7a4e7de2f20915 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Thu, 15 Sep 2022 08:18:34 +0200 Subject: [PATCH 128/129] Set version to 2022.06.1 --- ResInsightVersion.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ResInsightVersion.cmake b/ResInsightVersion.cmake index 52179e419a..1c204e6e28 100644 --- a/ResInsightVersion.cmake +++ b/ResInsightVersion.cmake @@ -5,7 +5,7 @@ set(RESINSIGHT_PATCH_VERSION 1) # Opional text with no restrictions #set(RESINSIGHT_VERSION_TEXT "-dev") -set(RESINSIGHT_VERSION_TEXT "-RC_05") +#set(RESINSIGHT_VERSION_TEXT "-RC_05") # Optional text # Must be unique and increasing within one combination of major/minor/patch version From b23dbd65f0114b9d785691a97b2194650843ea50 Mon Sep 17 00:00:00 2001 From: jonjenssen Date: Thu, 15 Sep 2022 13:54:39 +0200 Subject: [PATCH 129/129] Fix crash if only plot window is open and you change i.e. the font size in preferences --- ApplicationLibCode/Application/RiaGuiApplication.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/ApplicationLibCode/Application/RiaGuiApplication.cpp b/ApplicationLibCode/Application/RiaGuiApplication.cpp index 3b4ac39bfa..e59d50d51b 100644 --- a/ApplicationLibCode/Application/RiaGuiApplication.cpp +++ b/ApplicationLibCode/Application/RiaGuiApplication.cpp @@ -1437,7 +1437,7 @@ void RiaGuiApplication::applyGuiPreferences( const RiaPreferences* } QMessageBox::StandardButton reply; - reply = QMessageBox::question( m_mainWindow, + reply = QMessageBox::question( activeMainWindow(), QString( "Apply %1 to Existing Views or Plots?" ).arg( listString ), QString( "You have changed default %1 and have existing views or plots with " "different settings.\n" ) @@ -1502,7 +1502,10 @@ void RiaGuiApplication::applyGuiPreferences( const RiaPreferences* if ( oldPreferences->defaultPlotFontSize() != m_preferences->defaultPlotFontSize() ) { - m_mainWindow->applyFontSizesToDockedPlots(); + if ( m_mainWindow ) + { + m_mainWindow->applyFontSizesToDockedPlots(); + } } if ( oldPreferences->defaultPageLayout() != m_preferences->defaultPageLayout() )
Min P90 Mean P10 Max Sum